CMS 3D CMS Logo

PFRecoTauTagInfoProducer.cc
Go to the documentation of this file.
1 /* class PFRecoTauTagInfoProducer
2  * returns a PFTauTagInfo collection starting from a JetTrackAssociations <a PFJet,a list of Tracks> collection,
3  * created: Aug 28 2007,
4  * revised: ,
5  * authors: Ludovic Houchu
6  */
7 
12 
14 
21 
24 
27 
28 #include "CLHEP/Random/RandGauss.h"
29 
30 #include "Math/GenVector/VectorUtil.h"
31 
32 #include <memory>
33 
34 using namespace reco;
35 using namespace edm;
36 using namespace std;
37 
39  public:
40  explicit PFRecoTauTagInfoProducer(const edm::ParameterSet& iConfig);
41  ~PFRecoTauTagInfoProducer() override;
42  void produce(edm::StreamID, edm::Event&,const edm::EventSetup&) const override;
43  static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);
44  private:
45  std::unique_ptr<const PFRecoTauTagInfoAlgorithm> PFRecoTauTagInfoAlgo_;
52 
56 };
57 
59 
60  PFCandidateProducer_ = iConfig.getParameter<edm::InputTag>("PFCandidateProducer");
61  PFJetTracksAssociatorProducer_ = iConfig.getParameter<edm::InputTag>("PFJetTracksAssociatorProducer");
62  PVProducer_ = iConfig.getParameter<edm::InputTag>("PVProducer");
63  smearedPVsigmaX_ = iConfig.getParameter<double>("smearedPVsigmaX");
64  smearedPVsigmaY_ = iConfig.getParameter<double>("smearedPVsigmaY");
65  smearedPVsigmaZ_ = iConfig.getParameter<double>("smearedPVsigmaZ");
66  PFRecoTauTagInfoAlgo_.reset( new PFRecoTauTagInfoAlgorithm(iConfig) );
67  PFCandidate_token = consumes<PFCandidateCollection>(PFCandidateProducer_);
68  PFJetTracksAssociator_token = consumes<JetTracksAssociationCollection>(PFJetTracksAssociatorProducer_);
69  PV_token = consumes<VertexCollection>(PVProducer_);
70  produces<PFTauTagInfoCollection>();
71 }
73 }
74 
76  edm::Handle<JetTracksAssociationCollection> thePFJetTracksAssociatorCollection;
77  iEvent.getByToken(PFJetTracksAssociator_token,thePFJetTracksAssociatorCollection);
78  // *** access the PFCandidateCollection in the event in order to retrieve the PFCandidateRefVector which constitutes each PFJet
79  edm::Handle<PFCandidateCollection> thePFCandidateCollection;
80  iEvent.getByToken(PFCandidate_token,thePFCandidateCollection);
81  vector<CandidatePtr> thePFCandsInTheEvent;
82  for(unsigned int i_PFCand=0;i_PFCand!=thePFCandidateCollection->size();i_PFCand++) {
83  thePFCandsInTheEvent.push_back(CandidatePtr(thePFCandidateCollection,i_PFCand));
84  }
85  // ***
86  // query a rec/sim PV
88  iEvent.getByToken(PV_token,thePVs);
89  const VertexCollection vertCollection=*(thePVs.product());
90  math::XYZPoint V(0,0,-1000.);
91 
92  Vertex thePV;
93  if(!vertCollection.empty()) thePV =*(vertCollection.begin());
94 else{
95  Vertex::Error SimPVError;
96  SimPVError(0,0)=15.*15.;
97  SimPVError(1,1)=15.*15.;
98  SimPVError(2,2)=15.*15.;
99  Vertex::Point SimPVPoint(0.,0.,-1000.);
100  thePV=Vertex(SimPVPoint,SimPVError,1,1,1);
101  }
102 
103  auto resultExt = std::make_unique<PFTauTagInfoCollection>();
104  for(JetTracksAssociationCollection::const_iterator iAssoc=thePFJetTracksAssociatorCollection->begin();iAssoc!=thePFJetTracksAssociatorCollection->end();iAssoc++){
105  PFTauTagInfo myPFTauTagInfo=PFRecoTauTagInfoAlgo_->buildPFTauTagInfo(JetBaseRef((*iAssoc).first),thePFCandsInTheEvent,(*iAssoc).second,thePV);
106  resultExt->push_back(myPFTauTagInfo);
107  }
108 
109 
110  // OrphanHandle<PFTauTagInfoCollection> myPFTauTagInfoCollection=iEvent.put(std::move(resultExt));
111  iEvent.put(std::move(resultExt));
112 }
113 
114 void
116  {
117  // pfRecoTauTagInfoProducerInsideOut
119  desc.add<int>("tkminTrackerHitsn", 3);
120  desc.add<double>("tkminPt", 0.5);
121  desc.add<double>("tkmaxChi2", 100.0);
122  desc.add<double>("ChargedHadrCand_AssociationCone", 1.0);
123  desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
124  desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
125  desc.add<double>("tkPVmaxDZ", 0.2);
126  desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
127  desc.add<int>("tkminPixelHitsn", 0);
128  desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
129  desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
130  desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
131  desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
132  desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
133  desc.add<bool>("UsePVconstraint", true);
134  desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
135  desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("insideOutJetTracksAssociatorAtVertex"));
136  desc.add<double>("smearedPVsigmaY", 0.0015);
137  desc.add<double>("smearedPVsigmaX", 0.0015);
138  desc.add<double>("smearedPVsigmaZ", 0.005);
139  desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
140  desc.add<double>("tkmaxipt", 0.03);
141  descriptions.add("pfRecoTauTagInfoProducerInsideOut", desc);
142  }
143  {
144  // pfRecoTauTagInfoProducer
146  desc.add<int>("tkminTrackerHitsn", 3);
147  desc.add<double>("tkminPt", 0.5);
148  desc.add<double>("tkmaxChi2", 100.0);
149  desc.add<double>("ChargedHadrCand_AssociationCone", 0.8);
150  desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
151  desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
152  desc.add<double>("tkPVmaxDZ", 0.2);
153  desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
154  desc.add<int>("tkminPixelHitsn", 0);
155  desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
156  desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
157  desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
158  desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
159  desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
160  desc.add<bool>("UsePVconstraint", true);
161  desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
162  desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("ak4PFJetTracksAssociatorAtVertex"));
163  desc.add<double>("smearedPVsigmaY", 0.0015);
164  desc.add<double>("smearedPVsigmaX", 0.0015);
165  desc.add<double>("smearedPVsigmaZ", 0.005);
166  desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
167  desc.add<double>("tkmaxipt", 0.03);
168  descriptions.add("pfRecoTauTagInfoProducer", desc);
169  }
170 }
171 
T getParameter(std::string const &) const
edm::EDGetTokenT< PFCandidateCollection > PFCandidate_token
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
transient_vector_type::const_iterator const_iterator
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
const_iterator end() const
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< VertexCollection > PV_token
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::unique_ptr< const PFRecoTauTagInfoAlgorithm > PFRecoTauTagInfoAlgo_
edm::RefToBase< Jet > JetBaseRef
Definition: JetCollection.h:13
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
PFRecoTauTagInfoProducer(const edm::ParameterSet &iConfig)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T const * product() const
Definition: Handle.h:74
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
edm::EDGetTokenT< JetTracksAssociationCollection > PFJetTracksAssociator_token
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
fixed size matrix
HLT enums.
const_iterator begin() const
def move(src, dest)
Definition: eostools.py:511