2 #include "TLorentzVector.h" 16 #include "TLorentzVector.h" 22 #include "Math/GenVector/VectorUtil.h" 32 PFTaus_ = consumes<reco::PFTauCollection>(pfTau.getUntrackedParameter<
InputTag>(
"PFTauProducer"));
33 auto discs = pfTau.getUntrackedParameter<vector<InputTag>>(
"PFTauDiscriminators");
35 PFTauDis_.push_back(consumes<reco::PFTauDiscriminator>(
tag));
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);
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);
62 Muons_ = consumes<reco::MuonCollection>(
muons.getUntrackedParameter<
InputTag>(
"MuonCollection"));
63 doMuons_ =
muons.getUntrackedParameter<
bool>(
"doMuons",
false);
64 ptMinMuon_ =
muons.getUntrackedParameter<
double>(
"ptMin", 15.);
69 Jets_ = consumes<reco::CaloJetCollection>(
jets.getUntrackedParameter<
InputTag>(
"JetCollection"));
70 doJets_ =
jets.getUntrackedParameter<
bool>(
"doJets");
71 ptMinJet_ =
jets.getUntrackedParameter<
double>(
"etMin");
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");
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");
92 MET_ = consumes<reco::CaloMETCollection>(
met.getUntrackedParameter<
InputTag>(
"METCollection"));
93 doMET_ =
met.getUntrackedParameter<
bool>(
"doMET",
false);
94 ptMinMET_ =
met.getUntrackedParameter<
double>(
"ptMin", 15.);
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");
130 auto product_PFTaus = make_unique<LorentzVectorCollection>();
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_) {
143 if ((*pftaudis)[thePFTau] < 0.5) {
153 product_PFTaus->emplace_back(pftau.px(), pftau.py(), pftau.pz(), pftau.energy());
158 iEvent.
put(
move(product_PFTaus),
"PFTaus");
162 auto product_Electrons = make_unique<LorentzVectorCollection>();
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");
172 if (iEvent.
getByToken(Electrons_, electrons)) {
173 for (
size_t i = 0;
i < electrons->size(); ++
i) {
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;
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;
194 double const isolation_value_ele{sum_of_pt_ele /
195 (
electron.trackMomentumAtVtx().Rho() *
electron.trackMomentumAtVtx().Rho())};
196 if (isolation_value_ele < e_isoMaxSumPt_) {
205 iEvent.
put(
move(product_Electrons),
"Electrons");
209 auto product_Muons = make_unique<LorentzVectorCollection>();
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());
220 iEvent.
put(
move(product_Muons),
"Muons");
224 auto product_Jets = make_unique<LorentzVectorCollection>();
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());
235 iEvent.
put(
move(product_Jets),
"Jets");
239 auto product_Towers = make_unique<LorentzVectorCollection>();
243 for (
auto const& tower1 : *towers) {
244 if (tower1.pt() > ptMinTower_ && tower1.eta() > etaMin_ && tower1.eta() < etaMax_ && tower1.phi() > phiMin_ &&
245 tower1.phi() < phiMax_) {
248 for (
auto const& tower2 : *towers) {
250 isolET += tower2.pt();
252 isolET -= tower1.pt();
254 if (isolET < towerIsol_) {
255 product_Towers->emplace_back(tower1.px(), tower1.py(), tower1.pz(), tower1.energy());
260 iEvent.
put(
move(product_Towers),
"Towers");
264 auto product_Gammas = make_unique<LorentzVectorCollection>();
268 for (
auto const&
photon : *photons) {
269 if (
photon.ecalRecHitSumEtConeDR04() < photonEcalIso_ &&
photon.et() > ptMinPhoton_ &&
photon.eta() > etaMin_ &&
275 iEvent.
put(
move(product_Gammas),
"Photons");
279 auto product_MET = make_unique<LorentzVectorCollection>();
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());
286 iEvent.
put(
move(product_MET),
"MET");
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override
void doElectrons(edm::Event &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void doMET(edm::Event &) const
HLTTauRefProducer(const edm::ParameterSet &)
void doTowers(edm::Event &) const
void doPFTaus(edm::Event &) const
void doMuons(edm::Event &) const
void doJets(edm::Event &) const
void doPhotons(edm::Event &) const