CMS 3D CMS Logo

HLTTauRefProducer.cc
Go to the documentation of this file.
2 #include "TLorentzVector.h"
3 // TAU includes
8 // ELECTRON includes
17 // MUON includes
20 #include "TLorentzVector.h"
22 //CaloTower includes
26 #include "Math/GenVector/VectorUtil.h"
27 
28 using namespace edm;
29 using namespace reco;
30 using namespace std;
31 
33 {
34  //One Parameter Set per Collection
35  {
36  auto const& pfTau = iConfig.getUntrackedParameter<edm::ParameterSet>("PFTaus");
37  PFTaus_ = consumes<reco::PFTauCollection>(pfTau.getUntrackedParameter<InputTag>("PFTauProducer"));
38  auto discs = pfTau.getUntrackedParameter<vector<InputTag>>("PFTauDiscriminators");
39  for (edm::InputTag& tag: discs) {
40  PFTauDis_.push_back(consumes<reco::PFTauDiscriminator>(tag));
41  }
42  doPFTaus_ = pfTau.getUntrackedParameter<bool>("doPFTaus",false);
43  ptMinPFTau_= pfTau.getUntrackedParameter<double>("ptMin",15.);
44  }
45 
46  {
47  auto const& electrons = iConfig.getUntrackedParameter<edm::ParameterSet>("Electrons");
48  Electrons_ = consumes<reco::GsfElectronCollection>(electrons.getUntrackedParameter<InputTag>("ElectronCollection"));
49  doElectrons_ = electrons.getUntrackedParameter<bool>("doElectrons",false);
50  e_doID_ = electrons.getUntrackedParameter<bool>("doID",false);
51  if(e_doID_) {
52  e_idAssocProd_ = consumes<reco::ElectronIDAssociationCollection>(electrons.getUntrackedParameter<InputTag>("IdCollection"));
53  }
54  e_ctfTrackCollectionSrc_ = electrons.getUntrackedParameter<InputTag>("TrackCollection");
55  e_ctfTrackCollection_ = consumes<reco::TrackCollection>(e_ctfTrackCollectionSrc_);
56  ptMinElectron_= electrons.getUntrackedParameter<double>("ptMin",15.);
57  e_doTrackIso_ = electrons.getUntrackedParameter<bool>("doTrackIso",false);
58  e_trackMinPt_= electrons.getUntrackedParameter<double>("ptMinTrack",1.5);
59  e_lipCut_= electrons.getUntrackedParameter<double>("lipMinTrack",1.5);
60  e_minIsoDR_= electrons.getUntrackedParameter<double>("InnerConeDR",0.02);
61  e_maxIsoDR_= electrons.getUntrackedParameter<double>("OuterConeDR",0.6);
62  e_isoMaxSumPt_= electrons.getUntrackedParameter<double>("MaxIsoVar",0.02);
63  }
64 
65  {
66  auto const& muons = iConfig.getUntrackedParameter<edm::ParameterSet>("Muons");
67  Muons_ = consumes<reco::MuonCollection>(muons.getUntrackedParameter<InputTag>("MuonCollection"));
68  doMuons_ = muons.getUntrackedParameter<bool>("doMuons",false);
69  ptMinMuon_= muons.getUntrackedParameter<double>("ptMin",15.);
70  }
71 
72  {
73  auto const& jets = iConfig.getUntrackedParameter<edm::ParameterSet>("Jets");
74  Jets_ = consumes<reco::CaloJetCollection>(jets.getUntrackedParameter<InputTag>("JetCollection"));
75  doJets_ = jets.getUntrackedParameter<bool>("doJets");
76  ptMinJet_= jets.getUntrackedParameter<double>("etMin");
77  }
78 
79  {
80  auto const& towers = iConfig.getUntrackedParameter<edm::ParameterSet>("Towers");
81  Towers_ = consumes<CaloTowerCollection>(towers.getUntrackedParameter<InputTag>("TowerCollection"));
82  doTowers_ = towers.getUntrackedParameter<bool>("doTowers");
83  ptMinTower_= towers.getUntrackedParameter<double>("etMin");
84  towerIsol_= towers.getUntrackedParameter<double>("towerIsolation");
85  }
86 
87  {
88  auto const& photons = iConfig.getUntrackedParameter<edm::ParameterSet>("Photons");
89  Photons_ = consumes<reco::PhotonCollection>(photons.getUntrackedParameter<InputTag>("PhotonCollection"));
90  doPhotons_ = photons.getUntrackedParameter<bool>("doPhotons");
91  ptMinPhoton_= photons.getUntrackedParameter<double>("etMin");
92  photonEcalIso_= photons.getUntrackedParameter<double>("ECALIso");
93  }
94 
95  {
96  auto const& met = iConfig.getUntrackedParameter<edm::ParameterSet>("MET");
97  MET_ = consumes<reco::CaloMETCollection>(met.getUntrackedParameter<InputTag>("METCollection"));
98  doMET_ = met.getUntrackedParameter<bool>("doMET",false);
99  ptMinMET_= met.getUntrackedParameter<double>("ptMin",15.);
100  }
101 
102  etaMax_ = iConfig.getUntrackedParameter<double>("EtaMax",2.5);
103 
104  //recoCollections
105  produces<LorentzVectorCollection>("PFTaus");
106  produces<LorentzVectorCollection>("Electrons");
107  produces<LorentzVectorCollection>("Muons");
108  produces<LorentzVectorCollection>("Jets");
109  produces<LorentzVectorCollection>("Photons");
110  produces<LorentzVectorCollection>("Towers");
111  produces<LorentzVectorCollection>("MET");
112 
113 }
114 
116 {
117  if(doPFTaus_)
118  doPFTaus(iEvent);
119  if(doElectrons_)
120  doElectrons(iEvent);
121  if(doMuons_)
122  doMuons(iEvent);
123  if(doJets_)
124  doJets(iEvent);
125  if(doPhotons_)
126  doPhotons(iEvent);
127  if(doTowers_)
128  doTowers(iEvent);
129  if(doMET_)
130  doMET(iEvent);
131 }
132 
133 void
135 {
136  auto product_PFTaus = make_unique<LorentzVectorCollection>();
137 
139  if (iEvent.getByToken(PFTaus_,pftaus)) {
140  for (unsigned int i=0; i<pftaus->size(); ++i) {
141  auto const& pftau = (*pftaus)[i];
142  if (pftau.pt()>ptMinPFTau_&&fabs(pftau.eta())<etaMax_) {
143  reco::PFTauRef thePFTau {pftaus,i};
144  bool passAll {true};
145  for (edm::EDGetTokenT<reco::PFTauDiscriminator> const& token: PFTauDis_) {
147  if (iEvent.getByToken(token, pftaudis)) {
148  if ((*pftaudis)[thePFTau] < 0.5) {
149  passAll = false;
150  break;
151  }
152  }
153  else{
154  passAll = false;
155  break;
156  }
157  }
158  if (passAll) {
159  product_PFTaus->emplace_back(pftau.px(), pftau.py(), pftau.pz(), pftau.energy());
160  }
161  }
162  }
163  }
164  iEvent.put(move(product_PFTaus),"PFTaus");
165 }
166 
167 
168 void
170 {
171  auto product_Electrons = make_unique<LorentzVectorCollection>();
172 
174  bool doID {e_doID_};
175  if (doID) {//UGLY HACK UNTIL GET ELETRON ID WORKING IN 210
176  if (!iEvent.getByToken(e_idAssocProd_, pEleID)) {
177  edm::LogInfo("") << "Error! Can't get electronIDAssocProducer by label. ";
178  doID = false;
179  }
180  }
181 
183  if (!iEvent.getByToken(e_ctfTrackCollection_, pCtfTracks)) {
184  edm::LogInfo("") << "Error! Can't get " << e_ctfTrackCollectionSrc_.label() << " by label. ";
185  iEvent.put(move(product_Electrons),"Electrons");
186  return;
187  }
188 
190  if (iEvent.getByToken(Electrons_,electrons)) {
191  for (size_t i=0 ; i<electrons->size(); ++i) {
192  edm::Ref<reco::GsfElectronCollection> electronRef (electrons,i);
193  bool idDec {false};
194  if (doID) {
196  tagIDAssocItr = pEleID->find(electronRef);
197  const reco::ElectronIDRef& id_tag = tagIDAssocItr->val;
198  idDec=id_tag->cutBasedDecision();
199  }
200  else {
201  idDec=true;
202  }
203  auto const& electron = (*electrons)[i];
204  if (electron.pt()>ptMinElectron_&&fabs(electron.eta())<etaMax_&&idDec) {
205  if (e_doTrackIso_) {
206  double sum_of_pt_ele {};
207  for (auto const& tr : *pCtfTracks) {
208  double const lip {electron.gsfTrack()->dz() - tr.dz()};
209  if (tr.pt() > e_trackMinPt_ && fabs(lip) < e_lipCut_) {
210  double dphi {fabs(tr.phi()-electron.trackMomentumAtVtx().phi())};
211  if (dphi>acos(-1.)) {
212  dphi=2*acos(-1.)-dphi;
213  }
214  double const deta {fabs(tr.eta()-electron.trackMomentumAtVtx().eta())};
215  double const dr_ctf_ele {sqrt(deta*deta+dphi*dphi)};
216  if((dr_ctf_ele>e_minIsoDR_) && (dr_ctf_ele<e_maxIsoDR_)){
217  double const cft_pt_2 {tr.pt()*tr.pt()};
218  sum_of_pt_ele += cft_pt_2;
219  }
220  }
221  }
222  double const isolation_value_ele {sum_of_pt_ele/(electron.trackMomentumAtVtx().Rho()*electron.trackMomentumAtVtx().Rho())};
223  if (isolation_value_ele<e_isoMaxSumPt_) {
224  product_Electrons->emplace_back(electron.px(),electron.py(),electron.pz(),electron.energy());
225  }
226  }
227  else {
228  product_Electrons->emplace_back(electron.px(),electron.py(),electron.pz(),electron.energy());
229  }
230  }
231  }
232  }
233  iEvent.put(move(product_Electrons),"Electrons");
234 }
235 
236 void
238 {
239  auto product_Muons = make_unique<LorentzVectorCollection>();
240 
242  if (iEvent.getByToken(Muons_,muons)) {
243  for (auto const& muon : *muons) {
244  if (muon.pt()>ptMinMuon_ && fabs(muon.eta())<etaMax_) {
245  product_Muons->emplace_back(muon.px(),muon.py(),muon.pz(),muon.energy());
246  }
247  }
248  }
249  iEvent.put(move(product_Muons),"Muons");
250 }
251 
252 
253 void
255 {
256  auto product_Jets = make_unique<LorentzVectorCollection>();
257 
259  if (iEvent.getByToken(Jets_,jets)) {
260  for (auto const& jet : *jets) {
261  if (jet.et()>ptMinJet_ && fabs(jet.eta())<etaMax_) {
262  product_Jets->emplace_back(jet.px(),jet.py(),jet.pz(),jet.energy());
263  }
264  }
265  }
266  iEvent.put(move(product_Jets),"Jets");
267 }
268 
269 void
271 {
272  auto product_Towers = make_unique<LorentzVectorCollection>();
273 
275  if (iEvent.getByToken(Towers_,towers)) {
276  for (auto const& tower1 : *towers) {
277  if (tower1.pt()>ptMinTower_ && fabs(tower1.eta())<etaMax_) {
278  //calculate isolation
279  double isolET {};
280  for (auto const& tower2 : *towers) {
281  if (ROOT::Math::VectorUtil::DeltaR(tower1.p4(),tower2.p4())<0.5) {
282  isolET+=tower2.pt();
283  }
284  isolET-=tower1.pt();
285  }
286  if (isolET<towerIsol_) {
287  product_Towers->emplace_back(tower1.px(),tower1.py(),tower1.pz(),tower1.energy());
288  }
289  }
290  }
291  }
292  iEvent.put(move(product_Towers),"Towers");
293 }
294 
295 
296 void
298 {
299  auto product_Gammas = make_unique<LorentzVectorCollection>();
300 
302  if (iEvent.getByToken(Photons_,photons)) {
303  for (auto const& photon : *photons) {
304  if (photon.ecalRecHitSumEtConeDR04()<photonEcalIso_ &&
305  photon.et()>ptMinPhoton_ && fabs(photon.eta())<etaMax_) {
306  product_Gammas->emplace_back(photon.px(),photon.py(),photon.pz(),photon.energy());
307  }
308  }
309  }
310  iEvent.put(move(product_Gammas),"Photons");
311 }
312 
313 void
315 {
316  auto product_MET = make_unique<LorentzVectorCollection>();
317 
319  if(iEvent.getByToken(MET_,met) && !met->empty()){
320  auto const& metMom = met->front().p4();
321  product_MET->emplace_back(metMom.Px(), metMom.Py(), 0, metMom.Pt());
322  }
323  iEvent.put(move(product_MET),"MET");
324 }
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override
void doElectrons(edm::Event &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
void doMET(edm::Event &) const
const std::string id_tag("id")
HLTTauRefProducer(const edm::ParameterSet &)
int iEvent
Definition: GenABIO.cc:230
T sqrt(T t)
Definition: SSEVec.h:18
vector< PseudoJet > jets
void doTowers(edm::Event &) const
met
===> hadronic RAZOR
void doPFTaus(edm::Event &) const
fixed size matrix
HLT enums.
void doMuons(edm::Event &) const
void doJets(edm::Event &) const
void doPhotons(edm::Event &) const
def move(src, dest)
Definition: eostools.py:510