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  etaMinPFTau_= pfTau.getUntrackedParameter<double>("etaMin",-2.5);
45  etaMaxPFTau_= pfTau.getUntrackedParameter<double>("etaMax",2.5);
46  phiMinPFTau_= pfTau.getUntrackedParameter<double>("phiMin",-3.15);
47  phiMaxPFTau_= pfTau.getUntrackedParameter<double>("phiMax",3.15);
48  }
49 
50  {
51  auto const& electrons = iConfig.getUntrackedParameter<edm::ParameterSet>("Electrons");
52  Electrons_ = consumes<reco::GsfElectronCollection>(electrons.getUntrackedParameter<InputTag>("ElectronCollection"));
53  doElectrons_ = electrons.getUntrackedParameter<bool>("doElectrons",false);
54  e_doID_ = electrons.getUntrackedParameter<bool>("doID",false);
55  if(e_doID_) {
56  e_idAssocProd_ = consumes<reco::ElectronIDAssociationCollection>(electrons.getUntrackedParameter<InputTag>("IdCollection"));
57  }
58  e_ctfTrackCollectionSrc_ = electrons.getUntrackedParameter<InputTag>("TrackCollection");
59  e_ctfTrackCollection_ = consumes<reco::TrackCollection>(e_ctfTrackCollectionSrc_);
60  ptMinElectron_= electrons.getUntrackedParameter<double>("ptMin",15.);
61  e_doTrackIso_ = electrons.getUntrackedParameter<bool>("doTrackIso",false);
62  e_trackMinPt_= electrons.getUntrackedParameter<double>("ptMinTrack",1.5);
63  e_lipCut_= electrons.getUntrackedParameter<double>("lipMinTrack",1.5);
64  e_minIsoDR_= electrons.getUntrackedParameter<double>("InnerConeDR",0.02);
65  e_maxIsoDR_= electrons.getUntrackedParameter<double>("OuterConeDR",0.6);
66  e_isoMaxSumPt_= electrons.getUntrackedParameter<double>("MaxIsoVar",0.02);
67  }
68 
69  {
70  auto const& muons = iConfig.getUntrackedParameter<edm::ParameterSet>("Muons");
71  Muons_ = consumes<reco::MuonCollection>(muons.getUntrackedParameter<InputTag>("MuonCollection"));
72  doMuons_ = muons.getUntrackedParameter<bool>("doMuons",false);
73  ptMinMuon_= muons.getUntrackedParameter<double>("ptMin",15.);
74  }
75 
76  {
77  auto const& jets = iConfig.getUntrackedParameter<edm::ParameterSet>("Jets");
78  Jets_ = consumes<reco::CaloJetCollection>(jets.getUntrackedParameter<InputTag>("JetCollection"));
79  doJets_ = jets.getUntrackedParameter<bool>("doJets");
80  ptMinJet_= jets.getUntrackedParameter<double>("etMin");
81  }
82 
83  {
84  auto const& towers = iConfig.getUntrackedParameter<edm::ParameterSet>("Towers");
85  Towers_ = consumes<CaloTowerCollection>(towers.getUntrackedParameter<InputTag>("TowerCollection"));
86  doTowers_ = towers.getUntrackedParameter<bool>("doTowers");
87  ptMinTower_= towers.getUntrackedParameter<double>("etMin");
88  towerIsol_= towers.getUntrackedParameter<double>("towerIsolation");
89  }
90 
91  {
92  auto const& photons = iConfig.getUntrackedParameter<edm::ParameterSet>("Photons");
93  Photons_ = consumes<reco::PhotonCollection>(photons.getUntrackedParameter<InputTag>("PhotonCollection"));
94  doPhotons_ = photons.getUntrackedParameter<bool>("doPhotons");
95  ptMinPhoton_= photons.getUntrackedParameter<double>("etMin");
96  photonEcalIso_= photons.getUntrackedParameter<double>("ECALIso");
97  }
98 
99  {
100  auto const& met = iConfig.getUntrackedParameter<edm::ParameterSet>("MET");
101  MET_ = consumes<reco::CaloMETCollection>(met.getUntrackedParameter<InputTag>("METCollection"));
102  doMET_ = met.getUntrackedParameter<bool>("doMET",false);
103  ptMinMET_= met.getUntrackedParameter<double>("ptMin",15.);
104  }
105 
106  etaMin_ = iConfig.getUntrackedParameter<double>("EtaMin",-2.5);
107  etaMax_ = iConfig.getUntrackedParameter<double>("EtaMax",2.5);
108  phiMin_ = iConfig.getUntrackedParameter<double>("PhiMin",-3.15);
109  phiMax_ = iConfig.getUntrackedParameter<double>("PhiMax",3.15);
110 
111  //recoCollections
112  produces<LorentzVectorCollection>("PFTaus");
113  produces<LorentzVectorCollection>("Electrons");
114  produces<LorentzVectorCollection>("Muons");
115  produces<LorentzVectorCollection>("Jets");
116  produces<LorentzVectorCollection>("Photons");
117  produces<LorentzVectorCollection>("Towers");
118  produces<LorentzVectorCollection>("MET");
119 
120 }
121 
123 {
124  if(doPFTaus_)
125  doPFTaus(iEvent);
126  if(doElectrons_)
127  doElectrons(iEvent);
128  if(doMuons_)
129  doMuons(iEvent);
130  if(doJets_)
131  doJets(iEvent);
132  if(doPhotons_)
133  doPhotons(iEvent);
134  if(doTowers_)
135  doTowers(iEvent);
136  if(doMET_)
137  doMET(iEvent);
138 }
139 
140 void
142 {
143  auto product_PFTaus = make_unique<LorentzVectorCollection>();
144 
146  if (iEvent.getByToken(PFTaus_,pftaus)) {
147  for (unsigned int i=0; i<pftaus->size(); ++i) {
148  auto const& pftau = (*pftaus)[i];
149  if (pftau.pt()>ptMinPFTau_&&
150  pftau.eta()>etaMinPFTau_&&pftau.eta()<etaMaxPFTau_&&
151  pftau.phi()>phiMinPFTau_&&pftau.phi()<phiMaxPFTau_) {
152  reco::PFTauRef thePFTau {pftaus,i};
153  bool passAll {true};
154  for (edm::EDGetTokenT<reco::PFTauDiscriminator> const& token: PFTauDis_) {
156  if (iEvent.getByToken(token, pftaudis)) {
157  if ((*pftaudis)[thePFTau] < 0.5) {
158  passAll = false;
159  break;
160  }
161  }
162  else{
163  passAll = false;
164  break;
165  }
166  }
167  if (passAll) {
168  product_PFTaus->emplace_back(pftau.px(), pftau.py(), pftau.pz(), pftau.energy());
169  }
170  }
171  }
172  }
173  iEvent.put(move(product_PFTaus),"PFTaus");
174 }
175 
176 
177 void
179 {
180  auto product_Electrons = make_unique<LorentzVectorCollection>();
181 
183  bool doID {e_doID_};
184  if (doID) {//UGLY HACK UNTIL GET ELETRON ID WORKING IN 210
185  if (!iEvent.getByToken(e_idAssocProd_, pEleID)) {
186  edm::LogInfo("") << "Error! Can't get electronIDAssocProducer by label. ";
187  doID = false;
188  }
189  }
190 
192  if (!iEvent.getByToken(e_ctfTrackCollection_, pCtfTracks)) {
193  edm::LogInfo("") << "Error! Can't get " << e_ctfTrackCollectionSrc_.label() << " by label. ";
194  iEvent.put(move(product_Electrons),"Electrons");
195  return;
196  }
197 
199  if (iEvent.getByToken(Electrons_,electrons)) {
200  for (size_t i=0 ; i<electrons->size(); ++i) {
201  edm::Ref<reco::GsfElectronCollection> electronRef (electrons,i);
202  bool idDec {false};
203  if (doID) {
205  tagIDAssocItr = pEleID->find(electronRef);
206  const reco::ElectronIDRef& id_tag = tagIDAssocItr->val;
207  idDec=id_tag->cutBasedDecision();
208  }
209  else {
210  idDec=true;
211  }
212  auto const& electron = (*electrons)[i];
213  if (electron.pt()>ptMinElectron_&&fabs(electron.eta())<etaMax_&&idDec) {
214  if (e_doTrackIso_) {
215  double sum_of_pt_ele {};
216  for (auto const& tr : *pCtfTracks) {
217  double const lip {electron.gsfTrack()->dz() - tr.dz()};
218  if (tr.pt() > e_trackMinPt_ && fabs(lip) < e_lipCut_) {
219  double dphi {fabs(tr.phi()-electron.trackMomentumAtVtx().phi())};
220  if (dphi>acos(-1.)) {
221  dphi=2*acos(-1.)-dphi;
222  }
223  double const deta {fabs(tr.eta()-electron.trackMomentumAtVtx().eta())};
224  double const dr_ctf_ele {sqrt(deta*deta+dphi*dphi)};
225  if((dr_ctf_ele>e_minIsoDR_) && (dr_ctf_ele<e_maxIsoDR_)){
226  double const cft_pt_2 {tr.pt()*tr.pt()};
227  sum_of_pt_ele += cft_pt_2;
228  }
229  }
230  }
231  double const isolation_value_ele {sum_of_pt_ele/(electron.trackMomentumAtVtx().Rho()*electron.trackMomentumAtVtx().Rho())};
232  if (isolation_value_ele<e_isoMaxSumPt_) {
233  product_Electrons->emplace_back(electron.px(),electron.py(),electron.pz(),electron.energy());
234  }
235  }
236  else {
237  product_Electrons->emplace_back(electron.px(),electron.py(),electron.pz(),electron.energy());
238  }
239  }
240  }
241  }
242  iEvent.put(move(product_Electrons),"Electrons");
243 }
244 
245 void
247 {
248  auto product_Muons = make_unique<LorentzVectorCollection>();
249 
251  if (iEvent.getByToken(Muons_,muons)) {
252  for (auto const& muon : *muons) {
253  if (muon.pt()>ptMinMuon_ && muon.eta()>etaMin_&&muon.eta()<etaMax_&&muon.phi()>phiMin_&&muon.phi()<phiMax_) {
254  product_Muons->emplace_back(muon.px(),muon.py(),muon.pz(),muon.energy());
255  }
256  }
257  }
258  iEvent.put(move(product_Muons),"Muons");
259 }
260 
261 
262 void
264 {
265  auto product_Jets = make_unique<LorentzVectorCollection>();
266 
268  if (iEvent.getByToken(Jets_,jets)) {
269  for (auto const& jet : *jets) {
270  if (jet.et()>ptMinJet_ && jet.eta()>etaMin_&&jet.eta()<etaMax_&&jet.phi()>phiMin_&&jet.phi()<phiMax_) {
271  product_Jets->emplace_back(jet.px(),jet.py(),jet.pz(),jet.energy());
272  }
273  }
274  }
275  iEvent.put(move(product_Jets),"Jets");
276 }
277 
278 void
280 {
281  auto product_Towers = make_unique<LorentzVectorCollection>();
282 
284  if (iEvent.getByToken(Towers_,towers)) {
285  for (auto const& tower1 : *towers) {
286  if (tower1.pt()>ptMinTower_ && tower1.eta()>etaMin_&&tower1.eta()<etaMax_&&tower1.phi()>phiMin_&&tower1.phi()<phiMax_) {
287  //calculate isolation
288  double isolET {};
289  for (auto const& tower2 : *towers) {
290  if (ROOT::Math::VectorUtil::DeltaR(tower1.p4(),tower2.p4())<0.5) {
291  isolET+=tower2.pt();
292  }
293  isolET-=tower1.pt();
294  }
295  if (isolET<towerIsol_) {
296  product_Towers->emplace_back(tower1.px(),tower1.py(),tower1.pz(),tower1.energy());
297  }
298  }
299  }
300  }
301  iEvent.put(move(product_Towers),"Towers");
302 }
303 
304 
305 void
307 {
308  auto product_Gammas = make_unique<LorentzVectorCollection>();
309 
311  if (iEvent.getByToken(Photons_,photons)) {
312  for (auto const& photon : *photons) {
313  if (photon.ecalRecHitSumEtConeDR04()<photonEcalIso_ &&
314  photon.et()>ptMinPhoton_ && photon.eta()>etaMin_&&photon.eta()<etaMax_&&photon.phi()>phiMin_&&photon.phi()<phiMax_) {
315  product_Gammas->emplace_back(photon.px(),photon.py(),photon.pz(),photon.energy());
316  }
317  }
318  }
319  iEvent.put(move(product_Gammas),"Photons");
320 }
321 
322 void
324 {
325  auto product_MET = make_unique<LorentzVectorCollection>();
326 
328  if(iEvent.getByToken(MET_,met) && !met->empty()){
329  auto const& metMom = met->front().p4();
330  product_MET->emplace_back(metMom.Px(), metMom.Py(), 0, metMom.Pt());
331  }
332  iEvent.put(move(product_MET),"MET");
333 }
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
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:519
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