Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-05 03:16:47

0001 /* class PFRecoTauTagInfoProducer
0002  * returns a PFTauTagInfo collection starting from a JetTrackAssociations <a PFJet,a list of Tracks> collection,
0003  * created: Aug 28 2007,
0004  * revised: ,
0005  * authors: Ludovic Houchu
0006  */
0007 
0008 #include <memory>
0009 
0010 #include <CLHEP/Random/RandGauss.h>
0011 #include <Math/GenVector/VectorUtil.h>
0012 
0013 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
0014 #include "DataFormats/TauReco/interface/PFTauTagInfo.h"
0015 #include "DataFormats/VertexReco/interface/Vertex.h"
0016 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/Frameworkfwd.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021 #include "FWCore/Framework/interface/global/EDProducer.h"
0022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0023 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0026 #include "RecoTauTag/RecoTau/interface/PFRecoTauTagInfoAlgorithm.h"
0027 
0028 using namespace reco;
0029 using namespace edm;
0030 using namespace std;
0031 
0032 class PFRecoTauTagInfoProducer : public edm::global::EDProducer<> {
0033 public:
0034   explicit PFRecoTauTagInfoProducer(const edm::ParameterSet& iConfig);
0035   ~PFRecoTauTagInfoProducer() override;
0036   void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0037   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038 
0039 private:
0040   std::unique_ptr<const PFRecoTauTagInfoAlgorithm> PFRecoTauTagInfoAlgo_;
0041   edm::InputTag PFCandidateProducer_;
0042   edm::InputTag PFJetTracksAssociatorProducer_;
0043   edm::InputTag PVProducer_;
0044   double smearedPVsigmaX_;
0045   double smearedPVsigmaY_;
0046   double smearedPVsigmaZ_;
0047 
0048   edm::EDGetTokenT<PFCandidateCollection> PFCandidate_token;
0049   edm::EDGetTokenT<JetTracksAssociationCollection> PFJetTracksAssociator_token;
0050   edm::EDGetTokenT<VertexCollection> PV_token;
0051 };
0052 
0053 PFRecoTauTagInfoProducer::PFRecoTauTagInfoProducer(const edm::ParameterSet& iConfig) {
0054   PFCandidateProducer_ = iConfig.getParameter<edm::InputTag>("PFCandidateProducer");
0055   PFJetTracksAssociatorProducer_ = iConfig.getParameter<edm::InputTag>("PFJetTracksAssociatorProducer");
0056   PVProducer_ = iConfig.getParameter<edm::InputTag>("PVProducer");
0057   smearedPVsigmaX_ = iConfig.getParameter<double>("smearedPVsigmaX");
0058   smearedPVsigmaY_ = iConfig.getParameter<double>("smearedPVsigmaY");
0059   smearedPVsigmaZ_ = iConfig.getParameter<double>("smearedPVsigmaZ");
0060   PFRecoTauTagInfoAlgo_ = std::make_unique<PFRecoTauTagInfoAlgorithm>(iConfig);
0061   PFCandidate_token = consumes<PFCandidateCollection>(PFCandidateProducer_);
0062   PFJetTracksAssociator_token = consumes<JetTracksAssociationCollection>(PFJetTracksAssociatorProducer_);
0063   PV_token = consumes<VertexCollection>(PVProducer_);
0064   produces<PFTauTagInfoCollection>();
0065 }
0066 PFRecoTauTagInfoProducer::~PFRecoTauTagInfoProducer() {}
0067 
0068 void PFRecoTauTagInfoProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0069   edm::Handle<JetTracksAssociationCollection> thePFJetTracksAssociatorCollection;
0070   iEvent.getByToken(PFJetTracksAssociator_token, thePFJetTracksAssociatorCollection);
0071   // *** access the PFCandidateCollection in the event in order to retrieve the PFCandidateRefVector which constitutes each PFJet
0072   edm::Handle<PFCandidateCollection> thePFCandidateCollection;
0073   iEvent.getByToken(PFCandidate_token, thePFCandidateCollection);
0074   vector<CandidatePtr> thePFCandsInTheEvent;
0075   for (unsigned int i_PFCand = 0; i_PFCand != thePFCandidateCollection->size(); i_PFCand++) {
0076     thePFCandsInTheEvent.push_back(CandidatePtr(thePFCandidateCollection, i_PFCand));
0077   }
0078   // ***
0079   // query a rec/sim PV
0080   edm::Handle<VertexCollection> thePVs;
0081   iEvent.getByToken(PV_token, thePVs);
0082   const VertexCollection vertCollection = *(thePVs.product());
0083   math::XYZPoint V(0, 0, -1000.);
0084 
0085   Vertex thePV;
0086   if (!vertCollection.empty())
0087     thePV = *(vertCollection.begin());
0088   else {
0089     Vertex::Error SimPVError;
0090     SimPVError(0, 0) = 15. * 15.;
0091     SimPVError(1, 1) = 15. * 15.;
0092     SimPVError(2, 2) = 15. * 15.;
0093     Vertex::Point SimPVPoint(0., 0., -1000.);
0094     thePV = Vertex(SimPVPoint, SimPVError, 1, 1, 1);
0095   }
0096 
0097   auto resultExt = std::make_unique<PFTauTagInfoCollection>();
0098   for (JetTracksAssociationCollection::const_iterator iAssoc = thePFJetTracksAssociatorCollection->begin();
0099        iAssoc != thePFJetTracksAssociatorCollection->end();
0100        iAssoc++) {
0101     PFTauTagInfo myPFTauTagInfo = PFRecoTauTagInfoAlgo_->buildPFTauTagInfo(
0102         JetBaseRef((*iAssoc).first), thePFCandsInTheEvent, (*iAssoc).second, thePV);
0103     resultExt->push_back(myPFTauTagInfo);
0104   }
0105 
0106   iEvent.put(std::move(resultExt));
0107 }
0108 
0109 void PFRecoTauTagInfoProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0110   {
0111     // pfRecoTauTagInfoProducerInsideOut
0112     edm::ParameterSetDescription desc;
0113     desc.add<int>("tkminTrackerHitsn", 3);
0114     desc.add<double>("tkminPt", 0.5);
0115     desc.add<double>("tkmaxChi2", 100.0);
0116     desc.add<double>("ChargedHadrCand_AssociationCone", 1.0);
0117     desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
0118     desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
0119     desc.add<double>("tkPVmaxDZ", 0.2);
0120     desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
0121     desc.add<int>("tkminPixelHitsn", 0);
0122     desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
0123     desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
0124     desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
0125     desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
0126     desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
0127     desc.add<bool>("UsePVconstraint", true);
0128     desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
0129     desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("insideOutJetTracksAssociatorAtVertex"));
0130     desc.add<double>("smearedPVsigmaY", 0.0015);
0131     desc.add<double>("smearedPVsigmaX", 0.0015);
0132     desc.add<double>("smearedPVsigmaZ", 0.005);
0133     desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
0134     desc.add<double>("tkmaxipt", 0.03);
0135     descriptions.add("pfRecoTauTagInfoProducerInsideOut", desc);
0136   }
0137   {
0138     // pfRecoTauTagInfoProducer
0139     edm::ParameterSetDescription desc;
0140     desc.add<int>("tkminTrackerHitsn", 3);
0141     desc.add<double>("tkminPt", 0.5);
0142     desc.add<double>("tkmaxChi2", 100.0);
0143     desc.add<double>("ChargedHadrCand_AssociationCone", 0.8);
0144     desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
0145     desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
0146     desc.add<double>("tkPVmaxDZ", 0.2);
0147     desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
0148     desc.add<int>("tkminPixelHitsn", 0);
0149     desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
0150     desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
0151     desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
0152     desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
0153     desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
0154     desc.add<bool>("UsePVconstraint", true);
0155     desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
0156     desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("ak4PFJetTracksAssociatorAtVertex"));
0157     desc.add<double>("smearedPVsigmaY", 0.0015);
0158     desc.add<double>("smearedPVsigmaX", 0.0015);
0159     desc.add<double>("smearedPVsigmaZ", 0.005);
0160     desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
0161     desc.add<double>("tkmaxipt", 0.03);
0162     descriptions.add("pfRecoTauTagInfoProducer", desc);
0163   }
0164 }
0165 
0166 DEFINE_FWK_MODULE(PFRecoTauTagInfoProducer);