CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTTauRefProducer.cc
Go to the documentation of this file.
2 #include "TLorentzVector.h"
3 // TAU includes
6 // ELECTRON includes
13 // MUON includes
16 #include "TLorentzVector.h"
18 //CaloTower includes
22 #include "Math/GenVector/VectorUtil.h"
23 
24 using namespace edm;
25 using namespace reco;
26 using namespace std;
27 
29  //One Parameter Set per Collection
30  {
31  auto const& pfTau = iConfig.getUntrackedParameter<edm::ParameterSet>("PFTaus");
32  PFTaus_ = consumes<reco::PFTauCollection>(pfTau.getUntrackedParameter<InputTag>("PFTauProducer"));
33  auto discs = pfTau.getUntrackedParameter<vector<InputTag>>("PFTauDiscriminators");
34  for (edm::InputTag& tag : discs) {
35  PFTauDis_.push_back(consumes<reco::PFTauDiscriminator>(tag));
36  }
37  doPFTaus_ = pfTau.getUntrackedParameter<bool>("doPFTaus", false);
38  ptMinPFTau_ = pfTau.getUntrackedParameter<double>("ptMin", 15.);
39  etaMinPFTau_ = pfTau.getUntrackedParameter<double>("etaMin", -2.5);
40  etaMaxPFTau_ = pfTau.getUntrackedParameter<double>("etaMax", 2.5);
41  phiMinPFTau_ = pfTau.getUntrackedParameter<double>("phiMin", -3.15);
42  phiMaxPFTau_ = pfTau.getUntrackedParameter<double>("phiMax", 3.15);
43  }
44 
45  {
46  auto const& electrons = iConfig.getUntrackedParameter<edm::ParameterSet>("Electrons");
47  Electrons_ = consumes<reco::GsfElectronCollection>(electrons.getUntrackedParameter<InputTag>("ElectronCollection"));
48  doElectrons_ = electrons.getUntrackedParameter<bool>("doElectrons", false);
49  e_ctfTrackCollectionSrc_ = electrons.getUntrackedParameter<InputTag>("TrackCollection");
50  e_ctfTrackCollection_ = consumes<reco::TrackCollection>(e_ctfTrackCollectionSrc_);
51  ptMinElectron_ = electrons.getUntrackedParameter<double>("ptMin", 15.);
52  e_doTrackIso_ = electrons.getUntrackedParameter<bool>("doTrackIso", false);
53  e_trackMinPt_ = electrons.getUntrackedParameter<double>("ptMinTrack", 1.5);
54  e_lipCut_ = electrons.getUntrackedParameter<double>("lipMinTrack", 1.5);
55  e_minIsoDR_ = electrons.getUntrackedParameter<double>("InnerConeDR", 0.02);
56  e_maxIsoDR_ = electrons.getUntrackedParameter<double>("OuterConeDR", 0.6);
57  e_isoMaxSumPt_ = electrons.getUntrackedParameter<double>("MaxIsoVar", 0.02);
58  }
59 
60  {
61  auto const& muons = iConfig.getUntrackedParameter<edm::ParameterSet>("Muons");
62  Muons_ = consumes<reco::MuonCollection>(muons.getUntrackedParameter<InputTag>("MuonCollection"));
63  doMuons_ = muons.getUntrackedParameter<bool>("doMuons", false);
64  ptMinMuon_ = muons.getUntrackedParameter<double>("ptMin", 15.);
65  }
66 
67  {
68  auto const& jets = iConfig.getUntrackedParameter<edm::ParameterSet>("Jets");
69  Jets_ = consumes<reco::CaloJetCollection>(jets.getUntrackedParameter<InputTag>("JetCollection"));
70  doJets_ = jets.getUntrackedParameter<bool>("doJets");
71  ptMinJet_ = jets.getUntrackedParameter<double>("etMin");
72  }
73 
74  {
75  auto const& towers = iConfig.getUntrackedParameter<edm::ParameterSet>("Towers");
76  Towers_ = consumes<CaloTowerCollection>(towers.getUntrackedParameter<InputTag>("TowerCollection"));
77  doTowers_ = towers.getUntrackedParameter<bool>("doTowers");
78  ptMinTower_ = towers.getUntrackedParameter<double>("etMin");
79  towerIsol_ = towers.getUntrackedParameter<double>("towerIsolation");
80  }
81 
82  {
83  auto const& photons = iConfig.getUntrackedParameter<edm::ParameterSet>("Photons");
84  Photons_ = consumes<reco::PhotonCollection>(photons.getUntrackedParameter<InputTag>("PhotonCollection"));
85  doPhotons_ = photons.getUntrackedParameter<bool>("doPhotons");
86  ptMinPhoton_ = photons.getUntrackedParameter<double>("etMin");
87  photonEcalIso_ = photons.getUntrackedParameter<double>("ECALIso");
88  }
89 
90  {
91  auto const& met = iConfig.getUntrackedParameter<edm::ParameterSet>("MET");
92  MET_ = consumes<reco::CaloMETCollection>(met.getUntrackedParameter<InputTag>("METCollection"));
93  doMET_ = met.getUntrackedParameter<bool>("doMET", false);
94  ptMinMET_ = met.getUntrackedParameter<double>("ptMin", 15.);
95  }
96 
97  etaMin_ = iConfig.getUntrackedParameter<double>("EtaMin", -2.5);
98  etaMax_ = iConfig.getUntrackedParameter<double>("EtaMax", 2.5);
99  phiMin_ = iConfig.getUntrackedParameter<double>("PhiMin", -3.15);
100  phiMax_ = iConfig.getUntrackedParameter<double>("PhiMax", 3.15);
101 
102  //recoCollections
103  produces<LorentzVectorCollection>("PFTaus");
104  produces<LorentzVectorCollection>("Electrons");
105  produces<LorentzVectorCollection>("Muons");
106  produces<LorentzVectorCollection>("Jets");
107  produces<LorentzVectorCollection>("Photons");
108  produces<LorentzVectorCollection>("Towers");
109  produces<LorentzVectorCollection>("MET");
110 }
111 
113  if (doPFTaus_)
114  doPFTaus(iEvent);
115  if (doElectrons_)
116  doElectrons(iEvent);
117  if (doMuons_)
118  doMuons(iEvent);
119  if (doJets_)
120  doJets(iEvent);
121  if (doPhotons_)
122  doPhotons(iEvent);
123  if (doTowers_)
124  doTowers(iEvent);
125  if (doMET_)
126  doMET(iEvent);
127 }
128 
130  auto product_PFTaus = make_unique<LorentzVectorCollection>();
131 
133  if (iEvent.getByToken(PFTaus_, pftaus)) {
134  for (unsigned int i = 0; i < pftaus->size(); ++i) {
135  auto const& pftau = (*pftaus)[i];
136  if (pftau.pt() > ptMinPFTau_ && pftau.eta() > etaMinPFTau_ && pftau.eta() < etaMaxPFTau_ &&
137  pftau.phi() > phiMinPFTau_ && pftau.phi() < phiMaxPFTau_) {
138  reco::PFTauRef thePFTau{pftaus, i};
139  bool passAll{true};
140  for (edm::EDGetTokenT<reco::PFTauDiscriminator> const& token : PFTauDis_) {
142  if (iEvent.getByToken(token, pftaudis)) {
143  if ((*pftaudis)[thePFTau] < 0.5) {
144  passAll = false;
145  break;
146  }
147  } else {
148  passAll = false;
149  break;
150  }
151  }
152  if (passAll) {
153  product_PFTaus->emplace_back(pftau.px(), pftau.py(), pftau.pz(), pftau.energy());
154  }
155  }
156  }
157  }
158  iEvent.put(move(product_PFTaus), "PFTaus");
159 }
160 
162  auto product_Electrons = make_unique<LorentzVectorCollection>();
163 
165  if (!iEvent.getByToken(e_ctfTrackCollection_, pCtfTracks)) {
166  edm::LogInfo("") << "Error! Can't get " << e_ctfTrackCollectionSrc_.label() << " by label. ";
167  iEvent.put(move(product_Electrons), "Electrons");
168  return;
169  }
170 
172  if (iEvent.getByToken(Electrons_, electrons)) {
173  for (size_t i = 0; i < electrons->size(); ++i) {
174  edm::Ref<reco::GsfElectronCollection> electronRef(electrons, i);
175  auto const& electron = (*electrons)[i];
176  if (electron.pt() > ptMinElectron_ && fabs(electron.eta()) < etaMax_) {
177  if (e_doTrackIso_) {
178  double sum_of_pt_ele{};
179  for (auto const& tr : *pCtfTracks) {
180  double const lip{electron.gsfTrack()->dz() - tr.dz()};
181  if (tr.pt() > e_trackMinPt_ && fabs(lip) < e_lipCut_) {
182  double dphi{fabs(tr.phi() - electron.trackMomentumAtVtx().phi())};
183  if (dphi > acos(-1.)) {
184  dphi = 2 * acos(-1.) - dphi;
185  }
186  double const deta{fabs(tr.eta() - electron.trackMomentumAtVtx().eta())};
187  double const dr_ctf_ele{sqrt(deta * deta + dphi * dphi)};
188  if ((dr_ctf_ele > e_minIsoDR_) && (dr_ctf_ele < e_maxIsoDR_)) {
189  double const cft_pt_2{tr.pt() * tr.pt()};
190  sum_of_pt_ele += cft_pt_2;
191  }
192  }
193  }
194  double const isolation_value_ele{sum_of_pt_ele /
195  (electron.trackMomentumAtVtx().Rho() * electron.trackMomentumAtVtx().Rho())};
196  if (isolation_value_ele < e_isoMaxSumPt_) {
197  product_Electrons->emplace_back(electron.px(), electron.py(), electron.pz(), electron.energy());
198  }
199  } else {
200  product_Electrons->emplace_back(electron.px(), electron.py(), electron.pz(), electron.energy());
201  }
202  }
203  }
204  }
205  iEvent.put(move(product_Electrons), "Electrons");
206 }
207 
209  auto product_Muons = make_unique<LorentzVectorCollection>();
210 
212  if (iEvent.getByToken(Muons_, muons)) {
213  for (auto const& muon : *muons) {
214  if (muon.pt() > ptMinMuon_ && muon.eta() > etaMin_ && muon.eta() < etaMax_ && muon.phi() > phiMin_ &&
215  muon.phi() < phiMax_) {
216  product_Muons->emplace_back(muon.px(), muon.py(), muon.pz(), muon.energy());
217  }
218  }
219  }
220  iEvent.put(move(product_Muons), "Muons");
221 }
222 
224  auto product_Jets = make_unique<LorentzVectorCollection>();
225 
227  if (iEvent.getByToken(Jets_, jets)) {
228  for (auto const& jet : *jets) {
229  if (jet.et() > ptMinJet_ && jet.eta() > etaMin_ && jet.eta() < etaMax_ && jet.phi() > phiMin_ &&
230  jet.phi() < phiMax_) {
231  product_Jets->emplace_back(jet.px(), jet.py(), jet.pz(), jet.energy());
232  }
233  }
234  }
235  iEvent.put(move(product_Jets), "Jets");
236 }
237 
239  auto product_Towers = make_unique<LorentzVectorCollection>();
240 
242  if (iEvent.getByToken(Towers_, towers)) {
243  for (auto const& tower1 : *towers) {
244  if (tower1.pt() > ptMinTower_ && tower1.eta() > etaMin_ && tower1.eta() < etaMax_ && tower1.phi() > phiMin_ &&
245  tower1.phi() < phiMax_) {
246  //calculate isolation
247  double isolET{};
248  for (auto const& tower2 : *towers) {
249  if (ROOT::Math::VectorUtil::DeltaR(tower1.p4(), tower2.p4()) < 0.5) {
250  isolET += tower2.pt();
251  }
252  isolET -= tower1.pt();
253  }
254  if (isolET < towerIsol_) {
255  product_Towers->emplace_back(tower1.px(), tower1.py(), tower1.pz(), tower1.energy());
256  }
257  }
258  }
259  }
260  iEvent.put(move(product_Towers), "Towers");
261 }
262 
264  auto product_Gammas = make_unique<LorentzVectorCollection>();
265 
267  if (iEvent.getByToken(Photons_, photons)) {
268  for (auto const& photon : *photons) {
269  if (photon.ecalRecHitSumEtConeDR04() < photonEcalIso_ && photon.et() > ptMinPhoton_ && photon.eta() > etaMin_ &&
270  photon.eta() < etaMax_ && photon.phi() > phiMin_ && photon.phi() < phiMax_) {
271  product_Gammas->emplace_back(photon.px(), photon.py(), photon.pz(), photon.energy());
272  }
273  }
274  }
275  iEvent.put(move(product_Gammas), "Photons");
276 }
277 
279  auto product_MET = make_unique<LorentzVectorCollection>();
280 
282  if (iEvent.getByToken(MET_, met) && !met->empty()) {
283  auto const& metMom = met->front().p4();
284  product_MET->emplace_back(metMom.Px(), metMom.Py(), 0, metMom.Pt());
285  }
286  iEvent.put(move(product_MET), "MET");
287 }
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
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:525
void doMET(edm::Event &) const
HLTTauRefProducer(const edm::ParameterSet &)
int iEvent
Definition: GenABIO.cc:224
T sqrt(T t)
Definition: SSEVec.h:19
void doTowers(edm::Event &) const
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:511