CMS 3D CMS Logo

ExoticaDQM.cc
Go to the documentation of this file.
2 
3 using namespace edm;
4 using namespace std;
5 using namespace reco;
6 using namespace trigger;
7 
8 typedef vector<string> vstring;
9 
10 //
11 // -- Constructor
12 //
14  edm::LogInfo("ExoticaDQM") << " Starting ExoticaDQM "
15  << "\n";
16 
17  typedef std::vector<edm::InputTag> vtag;
18 
19  // Get parameters from configuration file
20  // Trigger
21  TriggerToken_ = consumes<TriggerResults>(ps.getParameter<edm::InputTag>("TriggerResults"));
22  HltPaths_ = ps.getParameter<vector<string> >("HltPaths");
23  //
24  VertexToken_ = consumes<reco::VertexCollection>(ps.getParameter<InputTag>("vertexCollection"));
25  //
26  ElectronToken_ = consumes<reco::GsfElectronCollection>(ps.getParameter<InputTag>("electronCollection"));
27  //
28  MuonToken_ = consumes<reco::MuonCollection>(ps.getParameter<InputTag>("muonCollection"));
29  //
30  PhotonToken_ = consumes<reco::PhotonCollection>(ps.getParameter<InputTag>("photonCollection"));
31  //
32  PFJetToken_ = consumes<reco::PFJetCollection>(ps.getParameter<InputTag>("pfJetCollection"));
33  //
34  DiJetPFJetCollection_ = ps.getParameter<std::vector<edm::InputTag> >("DiJetPFJetCollection");
35  for (std::vector<edm::InputTag>::const_iterator jetlabel = DiJetPFJetCollection_.begin(),
36  jetlabelEnd = DiJetPFJetCollection_.end();
37  jetlabel != jetlabelEnd;
38  ++jetlabel) {
39  DiJetPFJetToken_.push_back(consumes<reco::PFJetCollection>(*jetlabel));
40  }
41  //
42  PFMETToken_ = consumes<reco::PFMETCollection>(ps.getParameter<InputTag>("pfMETCollection"));
43  //
44  ecalBarrelRecHitToken_ = consumes<EBRecHitCollection>(
45  ps.getUntrackedParameter<InputTag>("ecalBarrelRecHit", InputTag("reducedEcalRecHitsEB")));
46  //
47  ecalEndcapRecHitToken_ = consumes<EERecHitCollection>(
48  ps.getUntrackedParameter<InputTag>("ecalEndcapRecHit", InputTag("reducedEcalRecHitsEE")));
49  //
50  TrackToken_ = consumes<reco::TrackCollection>(ps.getParameter<InputTag>("trackCollection"));
51  //
52  MuonDispToken_ = consumes<reco::TrackCollection>(ps.getParameter<InputTag>("displacedMuonCollection"));
53  //
54  MuonDispSAToken_ = consumes<reco::TrackCollection>(ps.getParameter<InputTag>("displacedSAMuonCollection"));
55  //
56  GenParticleToken_ = consumes<reco::GenParticleCollection>(ps.getParameter<InputTag>("genParticleCollection"));
57 
58  JetCorrectorToken_ = consumes<reco::JetCorrector>(ps.getParameter<edm::InputTag>("jetCorrector"));
59 
60  magFieldToken_ = esConsumes();
61  //Cuts - MultiJets
62  jetID = new reco::helper::JetIDHelper(ps.getParameter<ParameterSet>("JetIDParams"), consumesCollector());
63 
64  //Varibles and Cuts for each Module:
65  //Dijet
66  dijet_PFJet1_pt_cut_ = ps.getParameter<double>("dijet_PFJet1_pt_cut");
67  dijet_PFJet2_pt_cut_ = ps.getParameter<double>("dijet_PFJet2_pt_cut");
68  //DiMuon
69  dimuon_Muon1_pt_cut_ = ps.getParameter<double>("dimuon_Muon1_pt_cut");
70  dimuon_Muon2_pt_cut_ = ps.getParameter<double>("dimuon_Muon2_pt_cut");
71  //DiElectron
72  dielectron_Electron1_pt_cut_ = ps.getParameter<double>("dielectron_Electron2_pt_cut");
73  dielectron_Electron2_pt_cut_ = ps.getParameter<double>("dielectron_Electron2_pt_cut");
74  //DiPhoton
75  diphoton_Photon1_pt_cut_ = ps.getParameter<double>("diphoton_Photon2_pt_cut");
76  diphoton_Photon2_pt_cut_ = ps.getParameter<double>("diphoton_Photon2_pt_cut");
77  //MonoJet
78  monojet_PFJet_pt_cut_ = ps.getParameter<double>("monojet_PFJet_pt_cut");
79  monojet_PFJet_met_cut_ = ps.getParameter<double>("monojet_PFJet_met_cut");
80  //MonoMuon
81  monomuon_Muon_pt_cut_ = ps.getParameter<double>("monomuon_Muon_pt_cut");
82  monomuon_Muon_met_cut_ = ps.getParameter<double>("monomuon_Muon_met_cut");
83  //MonoElectron
84  monoelectron_Electron_pt_cut_ = ps.getParameter<double>("monoelectron_Electron_pt_cut");
85  monoelectron_Electron_met_cut_ = ps.getParameter<double>("monoelectron_Electron_met_cut");
86  //MonoPhoton
87  monophoton_Photon_pt_cut_ = ps.getParameter<double>("monophoton_Photon_pt_cut");
88  monophoton_Photon_met_cut_ = ps.getParameter<double>("monophoton_Photon_met_cut");
89  // Displaced lepton or jet
90  dispFermion_eta_cut_ = ps.getParameter<double>("dispFermion_eta_cut");
91  dispFermion_pt_cut_ = ps.getParameter<double>("dispFermion_pt_cut");
92 }
93 
94 //
95 // -- Destructor
96 //
98  edm::LogInfo("ExoticaDQM") << " Deleting ExoticaDQM "
99  << "\n";
100 }
101 
102 //
103 // -- Book histograms
104 //
106  bei.cd();
107 
108  //--- DiJet
109  for (unsigned int icoll = 0; icoll < DiJetPFJetCollection_.size(); ++icoll) {
110  std::stringstream ss;
111  ss << "Physics/Exotica/Dijets/" << DiJetPFJetCollection_[icoll].label();
112  bei.setCurrentFolder(ss.str());
113  //bei.setCurrentFolder("Physics/Exotica/Dijets");
114  dijet_PFJet_pt.push_back(bei.book1D("dijet_PFJet_pt", "Pt of PFJet (GeV)", 50, 30.0, 5000));
115  dijet_PFJet_eta.push_back(bei.book1D("dijet_PFJet_eta", "#eta (PFJet)", 50, -2.5, 2.5));
116  dijet_PFJet_phi.push_back(bei.book1D("dijet_PFJet_phi", "#phi (PFJet)", 50, -3.14, 3.14));
117  dijet_PFJet_rapidity.push_back(bei.book1D("dijet_PFJet_rapidity", "Rapidity (PFJet)", 50, -6.0, 6.0));
118  dijet_PFJet_mass.push_back(bei.book1D("dijet_PFJet_mass", "Mass (PFJets)", 50, 0., 500.));
119  dijet_deltaPhiPFJet1PFJet2.push_back(
120  bei.book1D("dijet_deltaPhiPFJet1PFJet2", "#Delta#phi(Leading PFJet, Sub PFJet)", 40, 0., 3.15));
121  dijet_deltaEtaPFJet1PFJet2.push_back(
122  bei.book1D("dijet_deltaEtaPFJet1PFJet2", "#Delta#eta(Leading PFJet, Sub PFJet)", 40, -5., 5.));
123  dijet_deltaRPFJet1PFJet2.push_back(
124  bei.book1D("dijet_deltaRPFJet1PFJet2", "#DeltaR(Leading PFJet, Sub PFJet)", 50, 0., 6.));
125  dijet_invMassPFJet1PFJet2.push_back(
126  bei.book1D("dijet_invMassPFJet1PFJet2", "Leading PFJet, SubLeading PFJet Invariant mass (GeV)", 50, 0., 8000.));
127  dijet_PFchef.push_back(bei.book1D("dijet_PFchef", "Leading PFJet CHEF", 50, 0.0, 1.0));
128  dijet_PFnhef.push_back(bei.book1D("dijet_PFnhef", "Leading PFJet NHEF", 50, 0.0, 1.0));
129  dijet_PFcemf.push_back(bei.book1D("dijet_PFcemf", "Leading PFJet CEMF", 50, 0.0, 1.0));
130  dijet_PFnemf.push_back(bei.book1D("dijet_PFnemf", "Leading PFJEt NEMF", 50, 0.0, 1.0));
131  dijet_PFJetMulti.push_back(bei.book1D("dijet_PFJetMulti", "No. of PFJets", 10, 0., 10.));
132  }
133  //--- DiMuon
134  bei.setCurrentFolder("Physics/Exotica/DiMuons");
135  dimuon_Muon_pt = bei.book1D("dimuon_Muon_pt", "Pt of Muon (GeV)", 50, 30.0, 2000);
136  dimuon_Muon_eta = bei.book1D("dimuon_Muon_eta", "#eta (Muon)", 50, -2.5, 2.5);
137  dimuon_Muon_phi = bei.book1D("dimuon_Muon_phi", "#phi (Muon)", 50, -3.14, 3.14);
138  dimuon_Charge = bei.book1D("dimuon_Charge", "Charge of the Muon", 10, -5., 5.);
139  dimuon_deltaEtaMuon1Muon2 =
140  bei.book1D("dimuon_deltaEtaMuon1Muon2", "#Delta#eta(Leading Muon, Sub Muon)", 40, -5., 5.);
141  dimuon_deltaPhiMuon1Muon2 =
142  bei.book1D("dimuon_deltaPhiMuon1Muon2", "#Delta#phi(Leading Muon, Sub Muon)", 40, 0., 3.15);
143  dimuon_deltaRMuon1Muon2 = bei.book1D("dimuon_deltaRMuon1Muon2", "#DeltaR(Leading Muon, Sub Muon)", 50, 0., 6.);
144  dimuon_invMassMuon1Muon2 =
145  bei.book1D("dimuon_invMassMuon1Muon2", "Leading Muon, SubLeading Muon Low Invariant mass (GeV)", 50, 500., 4500.);
146  dimuon_MuonMulti = bei.book1D("dimuon_MuonMulti", "No. of Muons", 10, 0., 10.);
147  //--- DiElectrons
148  bei.setCurrentFolder("Physics/Exotica/DiElectrons");
149  dielectron_Electron_pt = bei.book1D("dielectron_Electron_pt", "Pt of Electron (GeV)", 50, 30.0, 2000);
150  dielectron_Electron_eta = bei.book1D("dielectron_Electron_eta", "#eta (Electron)", 50, -2.5, 2.5);
151  dielectron_Electron_phi = bei.book1D("dielectron_Electron_phi", "#phi (Electron)", 50, -3.14, 3.14);
152  dielectron_Charge = bei.book1D("dielectron_Charge", "Charge of the Electron", 10, -5., 5.);
153  dielectron_deltaEtaElectron1Electron2 =
154  bei.book1D("dielectron_deltaEtaElectron1Electron2", "#Delta#eta(Leading Electron, Sub Electron)", 40, -5., 5.);
155  dielectron_deltaPhiElectron1Electron2 =
156  bei.book1D("dielectron_deltaPhiElectron1Electron2", "#Delta#phi(Leading Electron, Sub Electron)", 40, 0., 3.15);
157  dielectron_deltaRElectron1Electron2 =
158  bei.book1D("dielectron_deltaRElectron1Electron2", "#DeltaR(Leading Electron, Sub Electron)", 50, 0., 6.);
159  dielectron_invMassElectron1Electron2 = bei.book1D("dielectron_invMassElectron1Electron2",
160  "Leading Electron, SubLeading Electron Invariant mass (GeV)",
161  50,
162  500.,
163  4500.);
164  dielectron_ElectronMulti = bei.book1D("dielectron_ElectronMulti", "No. of Electrons", 10, 0., 10.);
165  //--- DiPhotons
166  bei.setCurrentFolder("Physics/Exotica/DiPhotons");
167  diphoton_Photon_energy = bei.book1D("diphoton_Photon_energy", "Energy of Photon (GeV)", 50, 30.0, 300);
168  diphoton_Photon_et = bei.book1D("diphoton_Photon_et", "Et of Photon (GeV)", 50, 30.0, 300);
169  diphoton_Photon_pt = bei.book1D("diphoton_Photon_pt", "Pt of Photon (GeV)", 50, 30.0, 300);
170  diphoton_Photon_eta = bei.book1D("diphoton_Photon_eta", "#eta (Photon)", 50, -2.5, 2.5);
171  diphoton_Photon_etasc = bei.book1D("diphoton_Photon_etasc", "#eta sc(Photon)", 50, -2.5, 2.5);
172  diphoton_Photon_phi = bei.book1D("diphoton_Photon_phi", "#phi (Photon)", 50, -3.14, 3.14);
173  diphoton_Photon_hovere_eb = bei.book1D("diphoton_Photon_hovere_eb", "H/E (Photon) EB", 50, 0., 0.50);
174  diphoton_Photon_hovere_ee = bei.book1D("diphoton_Photon_hovere_ee", "H/E (Photon) EE", 50, 0., 0.50);
175  diphoton_Photon_sigmaietaieta_eb =
176  bei.book1D("diphoton_Photon_sigmaietaieta_eb", "#sigma_{i #eta i #eta} (Photon) EB", 50, 0., 0.03);
177  diphoton_Photon_sigmaietaieta_ee =
178  bei.book1D("diphoton_Photon_sigmaietaieta_ee", "#sigma_{i #eta i #eta} (Photon) EE", 50, 0., 0.03);
179  diphoton_Photon_trksumptsolidconedr03_eb =
180  bei.book1D("diphoton_Photon_trksumptsolidconedr03_eb", "TrkSumPtDr03 (Photon) EB", 50, 0., 15.);
181  diphoton_Photon_trksumptsolidconedr03_ee =
182  bei.book1D("diphoton_Photon_trksumptsolidconedr03_ee", "TrkSumPtDr03 (Photon) EE", 50, 0., 15.);
183  diphoton_Photon_e1x5e5x5_eb = bei.book1D("diphoton_Photon_e1x5e5x5_eb", "E_{1x5}/E_{5x5} (Photon) EB", 50, 0., 1.);
184  diphoton_Photon_e1x5e5x5_ee = bei.book1D("diphoton_Photon_e1x5e5x5_ee", "E_{1x5}/E_{5x5} (Photon) EE", 50, 0., 1.);
185  diphoton_Photon_e2x5e5x5_eb = bei.book1D("diphoton_Photon_e2x5e5x5_eb", "E_{2x5}/E_{5x5} (Photon) EB", 50, 0., 1.);
186  diphoton_Photon_e2x5e5x5_ee = bei.book1D("diphoton_Photon_e2x5e5x5_ee", "E_{2x5}/E_{5x5} (Photon) EE", 50, 0., 1.);
187  diphoton_deltaEtaPhoton1Photon2 =
188  bei.book1D("diphoton_deltaEtaPhoton1Photon2", "#Delta#eta(SubLeading Photon, Sub Photon)", 40, -5., 5.);
189  diphoton_deltaPhiPhoton1Photon2 =
190  bei.book1D("diphoton_deltaPhiPhoton1Photon2", "#Delta#phi(SubLeading Photon, Sub Photon)", 40, 0., 3.15);
191  diphoton_deltaRPhoton1Photon2 =
192  bei.book1D("diphoton_deltaRPhoton1Photon2", "#DeltaR(SubLeading Photon, Sub Photon)", 50, 0., 6.);
193  diphoton_invMassPhoton1Photon2 = bei.book1D(
194  "diphoton_invMassPhoton1Photon2", "SubLeading Photon, SubSubLeading Photon Invariant mass (GeV)", 50, 500., 4500.);
195  diphoton_PhotonMulti = bei.book1D("diphoton_PhotonMulti", "No. of Photons", 10, 0., 10.);
196  //--- MonoJet
197  bei.setCurrentFolder("Physics/Exotica/MonoJet");
198  monojet_PFJet_pt = bei.book1D("monojet_PFJet_pt", "Pt of MonoJet (GeV)", 50, 30.0, 1000);
199  monojet_PFJet_eta = bei.book1D("monojet_PFJet_eta", "#eta(MonoJet)", 50, -2.5, 2.5);
200  monojet_PFJet_phi = bei.book1D("monojet_PFJet_phi", "#phi(MonoJet)", 50, -3.14, 3.14);
201  monojet_PFMet = bei.book1D("monojet_PFMet", "Pt of PFMET (GeV)", 40, 0.0, 1000);
202  monojet_PFMet_phi = bei.book1D("monojet_PFMet_phi", "#phi(PFMET #phi)", 50, -3.14, 3.14);
203  monojet_PFJetPtOverPFMet = bei.book1D("monojet_PFJetPtOverPFMet", "Pt of MonoJet/MET (GeV)", 40, 0.0, 5.);
204  monojet_deltaPhiPFJetPFMet = bei.book1D("monojet_deltaPhiPFJetPFMet", "#Delta#phi(MonoJet, PFMet)", 40, 0., 3.15);
205  monojet_PFchef = bei.book1D("monojet_PFchef", "MonojetJet CHEF", 50, 0.0, 1.0);
206  monojet_PFnhef = bei.book1D("monojet_PFnhef", "MonojetJet NHEF", 50, 0.0, 1.0);
207  monojet_PFcemf = bei.book1D("monojet_PFcemf", "MonojetJet CEMF", 50, 0.0, 1.0);
208  monojet_PFnemf = bei.book1D("monojet_PFnemf", "MonojetJet NEMF", 50, 0.0, 1.0);
209  monojet_PFJetMulti = bei.book1D("monojet_PFJetMulti", "No. of PFJets", 10, 0., 10.);
210  //--- MonoMuon
211  bei.setCurrentFolder("Physics/Exotica/MonoMuon");
212  monomuon_Muon_pt = bei.book1D("monomuon_Muon_pt", "Pt of Monomuon (GeV)", 50, 30.0, 2000);
213  monomuon_Muon_eta = bei.book1D("monomuon_Muon_eta", "#eta(Monomuon)", 50, -2.5, 2.5);
214  monomuon_Muon_phi = bei.book1D("monomuon_Muon_phi", "#phi(Monomuon)", 50, -3.14, 3.14);
215  monomuon_Charge = bei.book1D("monomuon_Charge", "Charge of the MonoMuon", 10, -5., 5.);
216  monomuon_PFMet = bei.book1D("monomuon_PFMet", "Pt of PFMET (GeV)", 40, 0.0, 2000);
217  monomuon_PFMet_phi = bei.book1D("monomuon_PFMet_phi", "PFMET #phi", 50, -3.14, 3.14);
218  monomuon_MuonPtOverPFMet = bei.book1D("monomuon_MuonPtOverPFMet", "Pt of Monomuon/PFMet", 40, 0.0, 5.);
219  monomuon_deltaPhiMuonPFMet = bei.book1D("monomuon_deltaPhiMuonPFMet", "#Delta#phi(Monomuon, PFMet)", 40, 0., 3.15);
220  monomuon_TransverseMass = bei.book1D("monomuon_TransverseMass", "Transverse Mass M_{T} GeV", 40, 200., 3000.);
221  monomuon_MuonMulti = bei.book1D("monomuon_MuonMulti", "No. of Muons", 10, 0., 10.);
222  //--- MonoElectron
223  bei.setCurrentFolder("Physics/Exotica/MonoElectron");
224  monoelectron_Electron_pt = bei.book1D("monoelectron_Electron_pt", "Pt of Monoelectron (GeV)", 50, 30.0, 4000);
225  monoelectron_Electron_eta = bei.book1D("monoelectron_Electron_eta", "#eta(MonoElectron)", 50, -2.5, 2.5);
226  monoelectron_Electron_phi = bei.book1D("monoelectron_Electron_phi", "#phi(MonoElectron)", 50, -3.14, 3.14);
227  monoelectron_Charge = bei.book1D("monoelectron_Charge", "Charge of the MonoElectron", 10, -5., 5.);
228  monoelectron_PFMet = bei.book1D("monoelectron_PFMet", "Pt of PFMET (GeV)", 40, 0.0, 4000);
229  monoelectron_PFMet_phi = bei.book1D("monoelectron_PFMet_phi", "PFMET #phi", 50, -3.14, 3.14);
230  monoelectron_ElectronPtOverPFMet =
231  bei.book1D("monoelectron_ElectronPtOverPFMet", "Pt of Monoelectron/PFMet", 40, 0.0, 5.);
232  monoelectron_deltaPhiElectronPFMet =
233  bei.book1D("monoelectron_deltaPhiElectronPFMet", "#Delta#phi(MonoElectron, PFMet)", 40, 0., 3.15);
234  monoelectron_TransverseMass = bei.book1D("monoelectron_TransverseMass", "Transverse Mass M_{T} GeV", 40, 200., 4000.);
235  monoelectron_ElectronMulti = bei.book1D("monoelectron_ElectronMulti", "No. of Electrons", 10, 0., 10.);
236 
237  //--- DiPhotons
238  bei.setCurrentFolder("Physics/Exotica/MonoPhotons");
239  monophoton_Photon_energy = bei.book1D("monophoton_Photon_energy", "Energy of Leading Photon (GeV)", 50, 30.0, 1000);
240  monophoton_Photon_et = bei.book1D("monophoton_Photon_et", "Et of Leading Photon (GeV)", 50, 30.0, 1000);
241  monophoton_Photon_pt = bei.book1D("monophoton_Photon_pt", "Pt of Leading Photon (GeV)", 50, 30.0, 1000);
242  monophoton_Photon_eta = bei.book1D("monophoton_Photon_eta", "#eta (Leading Photon)", 50, -2.5, 2.5);
243  monophoton_Photon_etasc = bei.book1D("monophoton_Photon_etasc", "#eta sc(Leading Photon)", 50, -2.5, 2.5);
244  monophoton_Photon_phi = bei.book1D("monophoton_Photon_phi", "#phi(Leading Photon)", 50, -3.14, 3.14);
245  monophoton_Photon_hovere = bei.book1D("monophoton_Photon_hovere", "H/E (Leading Photon)", 50, 0., 0.50);
246  monophoton_Photon_sigmaietaieta =
247  bei.book1D("monophoton_Photon_sigmaietaieta", "#sigma_{i #eta i #eta} (Leading Photon)", 50, 0., 0.03);
248  monophoton_Photon_trksumptsolidconedr03 =
249  bei.book1D("monophoton_Photon_trksumptsolidconedr03", "TrkSumPtDr03 (Leading Photon)", 50, 0., 15.);
250  monophoton_Photon_e1x5e5x5 = bei.book1D("monophoton_Photon_e1x5e5x5", "E_{1x5}/E_{5x5} (Leading Photon)", 50, 0., 1.);
251  monophoton_Photon_e2x5e5x5 = bei.book1D("monophoton_Photon_e2x5e5x5", "E_{2x5}/E_{5x5} (Leading Photon)", 50, 0., 1.);
252  monophoton_PFMet = bei.book1D("monophoton_PFMet", "Pt of PFMET (GeV)", 40, 0.0, 1000);
253  monophoton_PFMet_phi = bei.book1D("monophoton_PFMet_phi", "PFMET #phi", 50, -3.14, 3.14);
254  monophoton_PhotonPtOverPFMet = bei.book1D("monophoton_PhotonPtOverPFMet", "Pt of Monophoton/PFMet", 40, 0.0, 5.);
255  monophoton_deltaPhiPhotonPFMet =
256  bei.book1D("monophoton_deltaPhiPhotonPFMet", "#Delta#phi(SubLeading Photon, PFMet)", 40, 0., 3.15);
257  monophoton_PhotonMulti = bei.book1D("monophoton_PhotonMulti", "No. of Photons", 10, 0., 10.);
258 
259  //--- Displaced Leptons (filled using only leptons from long-lived stop decay).
260  bei.setCurrentFolder("Physics/Exotica/DisplacedFermions");
261  dispElec_track_effi_lxy = bei.bookProfile("dispElec_track_effi_lxy",
262  "Electron channel; transverse decay length (cm); track reco efficiency",
263  10,
264  0.,
265  100.,
266  -999.,
267  999,
268  "");
269  dispElec_elec_effi_lxy = bei.bookProfile("dispElec_elec_effi_lxy",
270  "Electron channel; transverse decay length (cm); electron reco efficiency",
271  10,
272  0.,
273  100.,
274  -999.,
275  999,
276  "");
277  dispMuon_track_effi_lxy = bei.bookProfile("dispMuon_track_effi_lxy",
278  "Muon channel; transverse decay length (cm); track reco efficiency",
279  10,
280  0.,
281  100.,
282  -999.,
283  999,
284  "");
285  dispMuon_muon_effi_lxy = bei.bookProfile("dispMuon_muon_effi_lxy",
286  "Muon channel; transverse decay length (cm); muon reco efficiency",
287  10,
288  0.,
289  100.,
290  -999.,
291  999,
292  "");
293  dispMuon_muonDisp_effi_lxy =
294  bei.bookProfile("dispMuon_muonDisp_effi_lxy",
295  "Muon channel; transverse decay length (cm); displacedMuon reco efficiency",
296  10,
297  0.,
298  100.,
299  -999.,
300  999,
301  "");
302  dispMuon_muonDispSA_effi_lxy =
303  bei.bookProfile("dispMuon_muonDispSA_effi_lxy",
304  "Muon channel; transverse decay length (cm); displacedSAMuon reco efficiency",
305  10,
306  0.,
307  400.,
308  -999.,
309  999,
310  "");
311  //--- Displaced Jets (filled using only tracks or jets from long-lived stop decay).
312  dispJet_track_effi_lxy = bei.bookProfile("dispJet_track_effi_lxy",
313  "Jet channel; transverse decay length (cm); track reco efficiency",
314  10,
315  0.,
316  100.,
317  -999.,
318  999,
319  "");
320 
321  bei.cd();
322 }
323 
324 //
325 // -- Analyze
326 //
328  // objects
329 
330  //Trigger
331  bool ValidTriggers = iEvent.getByToken(TriggerToken_, TriggerResults_);
332  if (!ValidTriggers)
333  return;
334 
335  // Vertices
336  bool ValidVertices = iEvent.getByToken(VertexToken_, VertexCollection_);
337  if (!ValidVertices)
338  return;
339 
340  // Electrons
341  bool ValidGedGsfElectron = iEvent.getByToken(ElectronToken_, ElectronCollection_);
342  if (!ValidGedGsfElectron)
343  return;
344 
345  // Muons
346  bool ValidPFMuon = iEvent.getByToken(MuonToken_, MuonCollection_);
347  if (!ValidPFMuon)
348  return;
349 
350  // Jets
351  bool ValidPFJet = iEvent.getByToken(PFJetToken_, pfJetCollection_);
352  pfjets = *pfJetCollection_;
353  if (!ValidPFJet)
354  return;
355 
356  // PFMETs
357  bool ValidPFMET = iEvent.getByToken(PFMETToken_, pfMETCollection_);
358  if (!ValidPFMET)
359  return;
360 
361  // Photons
362  bool ValidCaloPhoton = iEvent.getByToken(PhotonToken_, PhotonCollection_);
363  if (!ValidCaloPhoton)
364  return;
365 
366  // Tracks
367  bool ValidTracks = iEvent.getByToken(TrackToken_, TrackCollection_);
368  if (!ValidTracks)
369  return;
370 
371  // Special collections for displaced particles
372  iEvent.getByToken(MuonDispToken_, MuonDispCollection_);
373  iEvent.getByToken(MuonDispSAToken_, MuonDispSACollection_);
374 
375  // MC truth
376  bool ValidGenParticles = iEvent.getByToken(GenParticleToken_, GenCollection_);
377 
378  // JetCorrector
379  bool ValidJetCorrector = iEvent.getByToken(JetCorrectorToken_, JetCorrector_);
380 
381  //Trigger
382 
383  int N_Triggers = TriggerResults_->size();
384  int N_GoodTriggerPaths = HltPaths_.size();
385  bool triggered_event = false;
386  const edm::TriggerNames& trigName = iEvent.triggerNames(*TriggerResults_);
387  for (int i_Trig = 0; i_Trig < N_Triggers; ++i_Trig) {
388  if (TriggerResults_.product()->accept(i_Trig)) {
389  for (int n = 0; n < N_GoodTriggerPaths; n++) {
390  if (trigName.triggerName(i_Trig).find(HltPaths_[n]) != std::string::npos) {
391  triggered_event = true;
392  }
393  }
394  }
395  }
396  if (triggered_event == false)
397  return;
398 
399  for (int i = 0; i < 2; i++) {
400  //Jets
401  PFJetPx[i] = 0.;
402  PFJetPy[i] = 0.;
403  PFJetPt[i] = 0.;
404  PFJetEta[i] = 0.;
405  PFJetPhi[i] = 0.;
406  PFJetNHEF[i] = 0.;
407  PFJetCHEF[i] = 0.;
408  PFJetNEMF[i] = 0.;
409  PFJetCEMF[i] = 0.;
410  //Muons
411  MuonPx[i] = 0.;
412  MuonPy[i] = 0.;
413  MuonPt[i] = 0.;
414  MuonEta[i] = 0.;
415  MuonPhi[i] = 0.;
416  MuonCharge[i] = 0.;
417  //Electrons
418  ElectronPx[i] = 0.;
419  ElectronPy[i] = 0.;
420  ElectronPt[i] = 0.;
421  ElectronEta[i] = 0.;
422  ElectronPhi[i] = 0.;
423  ElectronCharge[i] = 0.;
424  //Photons
425  PhotonEnergy[i] = 0.;
426  PhotonPt[i] = 0.;
427  PhotonEt[i] = 0.;
428  PhotonEta[i] = 0.;
429  PhotonEtaSc[i] = 0.;
430  PhotonPhi[i] = 0.;
431  PhotonHoverE[i] = 0.;
432  PhotonSigmaIetaIeta[i] = 0.;
433  PhotonTrkSumPtSolidConeDR03[i] = 0.;
434  PhotonE1x5E5x5[i] = 0.;
435  PhotonE2x5E5x5[i] = 0.;
436  }
437 
438  //Getting information from the RecoObjects
439  dijet_countPFJet_ = 0;
440  monojet_countPFJet_ = 0;
441 
442  PFJetCollection::const_iterator pfjet_ = pfjets.begin();
443  for (; pfjet_ != pfjets.end(); ++pfjet_) {
444  double scale = 1.;
445  if (ValidJetCorrector)
446  scale = JetCorrector_->correction(*pfjet_);
447  if (scale * pfjet_->pt() > PFJetPt[0]) {
448  PFJetPt[1] = PFJetPt[0];
449  PFJetPx[1] = PFJetPx[0];
450  PFJetPy[1] = PFJetPy[0];
451  PFJetEta[1] = PFJetEta[0];
452  PFJetPhi[1] = PFJetPhi[0];
453  PFJetRapidity[1] = PFJetRapidity[0];
454  PFJetMass[1] = PFJetMass[0];
455  PFJetNHEF[1] = PFJetNHEF[0];
456  PFJetCHEF[1] = PFJetCHEF[0];
457  PFJetNEMF[1] = PFJetNEMF[0];
458  PFJetCEMF[1] = PFJetCEMF[0];
459  //
460  PFJetPt[0] = scale * pfjet_->pt();
461  PFJetPx[0] = scale * pfjet_->px();
462  PFJetPy[0] = scale * pfjet_->py();
463  PFJetEta[0] = pfjet_->eta();
464  PFJetPhi[0] = pfjet_->phi();
465  PFJetRapidity[0] = pfjet_->rapidity();
466  PFJetMass[0] = pfjet_->mass();
467  PFJetNHEF[0] = pfjet_->neutralHadronEnergyFraction();
468  PFJetCHEF[0] = pfjet_->chargedHadronEnergyFraction();
469  PFJetNEMF[0] = pfjet_->neutralEmEnergyFraction();
470  PFJetCEMF[0] = pfjet_->chargedEmEnergyFraction();
471  } else if (scale * pfjet_->pt() < PFJetPt[0] && scale * pfjet_->pt() > PFJetPt[1]) {
472  PFJetPt[1] = scale * pfjet_->pt();
473  PFJetPx[1] = scale * pfjet_->px();
474  PFJetPy[1] = scale * pfjet_->py();
475  PFJetEta[1] = pfjet_->eta();
476  PFJetPhi[1] = pfjet_->phi();
477  PFJetRapidity[1] = pfjet_->rapidity();
478  PFJetMass[1] = pfjet_->mass();
479  PFJetNHEF[1] = pfjet_->neutralHadronEnergyFraction();
480  PFJetCHEF[1] = pfjet_->chargedHadronEnergyFraction();
481  PFJetNEMF[1] = pfjet_->neutralEmEnergyFraction();
482  PFJetCEMF[1] = pfjet_->chargedEmEnergyFraction();
483  } else {
484  }
485  if (scale * pfjet_->pt() > dijet_PFJet1_pt_cut_)
486  dijet_countPFJet_++;
487  if (scale * pfjet_->pt() > dijet_PFJet1_pt_cut_)
488  monojet_countPFJet_++;
489  }
490 
491  VertexCollection vertexCollection = *(VertexCollection_.product());
492  reco::VertexCollection::const_iterator primaryVertex_ = vertexCollection.begin();
493 
494  dimuon_countMuon_ = 0;
495  monomuon_countMuon_ = 0;
496  reco::MuonCollection::const_iterator muon_ = MuonCollection_->begin();
497  for (; muon_ != MuonCollection_->end(); muon_++) {
498  // Muon High Pt ID
499  bool HighPt = false;
500  if (muon_->isGlobalMuon() && muon_->globalTrack()->hitPattern().numberOfValidMuonHits() > 0 &&
501  muon_->numberOfMatchedStations() > 1 && muon_->innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
502  muon_->innerTrack()->hitPattern().numberOfValidPixelHits() > 0 &&
503  muon_->muonBestTrack()->ptError() / muon_->muonBestTrack()->pt() < 0.3 &&
504  fabs(muon_->muonBestTrack()->dxy(primaryVertex_->position())) < 0.2 &&
505  fabs(muon_->bestTrack()->dz(primaryVertex_->position())) < 0.5 && fabs(muon_->eta()) < 2.1)
506  HighPt = true;
507 
508  if (HighPt == true) {
509  if (muon_->pt() > MuonPt[0]) {
510  MuonPt[1] = MuonPt[0];
511  MuonPx[1] = MuonPx[0];
512  MuonPy[1] = MuonPy[0];
513  MuonEta[1] = MuonEta[0];
514  MuonPhi[1] = MuonPhi[0];
515  MuonCharge[1] = MuonCharge[0];
516  //
517  MuonPt[0] = muon_->pt();
518  MuonPx[0] = muon_->px();
519  MuonPy[0] = muon_->py();
520  MuonEta[0] = muon_->eta();
521  MuonPhi[0] = muon_->phi();
522  MuonCharge[0] = muon_->charge();
523  } else if (muon_->pt() > MuonPt[1] && muon_->pt() < MuonPt[0]) {
524  MuonPt[1] = muon_->pt();
525  MuonPx[1] = muon_->px();
526  MuonPy[1] = muon_->py();
527  MuonEta[1] = muon_->eta();
528  MuonPhi[1] = muon_->phi();
529  MuonCharge[1] = muon_->charge();
530  }
531  }
532  if (muon_->pt() > dimuon_Muon1_pt_cut_)
533  dimuon_countMuon_++;
534  if (muon_->pt() > monomuon_Muon_pt_cut_)
535  monomuon_countMuon_++;
536  }
537 
538  dielectron_countElectron_ = 0;
539  monoelectron_countElectron_ = 0;
540  reco::GsfElectronCollection::const_iterator electron_ = ElectronCollection_->begin();
541  for (; electron_ != ElectronCollection_->end(); electron_++) {
542  //HEEP Selection 4.1 (some cuts)
543  if (electron_->e5x5() <= 0)
544  continue;
545  if (electron_->gsfTrack().isNull())
546  continue;
547  bool HEPP_ele = false;
548  double sceta = electron_->caloPosition().eta();
549  double dEtaIn = fabs(electron_->deltaEtaSuperClusterTrackAtVtx());
550  double dPhiIn = fabs(electron_->deltaPhiSuperClusterTrackAtVtx());
551  double HoverE = electron_->hadronicOverEm();
552  int missingHits = electron_->gsfTrack()->hitPattern().numberOfLostTrackerHits(HitPattern::MISSING_INNER_HITS);
553  double dxy = electron_->gsfTrack()->dxy(primaryVertex_->position());
554  double tkIso = electron_->dr03TkSumPt();
555  double e2x5Fraction = electron_->e2x5Max() / electron_->e5x5();
556  double e1x5Fraction = electron_->e1x5() / electron_->e5x5();
557  double scSigmaIetaIeta = electron_->scSigmaIEtaIEta();
558  if (electron_->ecalDriven() && electron_->pt() > 35.) {
559  if (fabs(sceta) < 1.442) { // barrel
560  if (fabs(dEtaIn) < 0.005 && fabs(dPhiIn) < 0.06 && HoverE < 0.05 && tkIso < 5. && missingHits <= 1 &&
561  fabs(dxy) < 0.02 && (e2x5Fraction > 0.94 || e1x5Fraction > 0.83))
562  HEPP_ele = true;
563  } else if (fabs(sceta) > 1.56 && fabs(sceta) < 2.5) { // endcap
564  if (fabs(dEtaIn) < 0.007 && fabs(dPhiIn) < 0.06 && HoverE < 0.05 && tkIso < 5. && missingHits <= 1 &&
565  fabs(dxy) < 0.02 && scSigmaIetaIeta < 0.03)
566  HEPP_ele = true;
567  }
568  }
569  //
570  if (HEPP_ele == false)
571  continue;
572  if (electron_->pt() > ElectronPt[0]) {
573  ElectronPt[1] = ElectronPt[0];
574  ElectronPx[1] = ElectronPx[0];
575  ElectronPy[1] = ElectronPy[0];
576  ElectronEta[1] = ElectronEta[0];
577  ElectronPhi[1] = ElectronPhi[0];
578  ElectronCharge[1] = ElectronCharge[0];
579  //
580  ElectronPt[0] = electron_->pt();
581  ElectronPx[0] = electron_->px();
582  ElectronPy[0] = electron_->py();
583  ElectronEta[0] = electron_->eta();
584  ElectronPhi[0] = electron_->phi();
585  ElectronCharge[0] = electron_->charge();
586  } else if (electron_->pt() > ElectronPt[1] && electron_->pt() < ElectronPt[0]) {
587  ElectronPt[1] = electron_->pt();
588  ElectronPx[1] = electron_->px();
589  ElectronPy[1] = electron_->py();
590  ElectronEta[1] = electron_->eta();
591  ElectronPhi[1] = electron_->phi();
592  ElectronCharge[1] = electron_->charge();
593  }
594  if (electron_->pt() > dielectron_Electron1_pt_cut_)
595  dielectron_countElectron_++;
596  if (electron_->pt() > monoelectron_Electron_pt_cut_)
597  monoelectron_countElectron_++;
598  }
599 
600  diphoton_countPhoton_ = 0.;
601  reco::PhotonCollection::const_iterator photon_ = PhotonCollection_->begin();
602  for (; photon_ != PhotonCollection_->end(); ++photon_) {
603  if (photon_->pt() > PhotonPt[0]) {
604  PhotonEnergy[1] = PhotonEnergy[0];
605  PhotonPt[1] = PhotonPt[0];
606  PhotonEt[1] = PhotonEt[0];
607  PhotonEta[1] = PhotonEta[0];
608  PhotonEtaSc[1] = PhotonEtaSc[0];
609  PhotonPhi[1] = PhotonPhi[0];
610  PhotonHoverE[1] = PhotonHoverE[0];
611  PhotonSigmaIetaIeta[1] = PhotonSigmaIetaIeta[0];
612  PhotonTrkSumPtSolidConeDR03[1] = PhotonTrkSumPtSolidConeDR03[0];
613  PhotonE1x5E5x5[1] = PhotonE1x5E5x5[0];
614  PhotonE2x5E5x5[1] = PhotonE2x5E5x5[0];
615  PhotonEnergy[0] = photon_->energy();
616  PhotonPt[0] = photon_->pt();
617  PhotonEt[0] = photon_->et();
618  PhotonEta[0] = photon_->eta();
619  PhotonEtaSc[0] = photon_->caloPosition().eta();
620  PhotonPhi[0] = photon_->phi();
621  PhotonHoverE[0] = photon_->hadronicOverEm();
622  PhotonSigmaIetaIeta[0] = photon_->sigmaIetaIeta();
623  PhotonTrkSumPtSolidConeDR03[0] = photon_->trkSumPtSolidConeDR03();
624  PhotonE1x5E5x5[0] = photon_->e1x5() / photon_->e5x5();
625  PhotonE2x5E5x5[0] = photon_->e2x5() / photon_->e5x5();
626  } else if (photon_->pt() > PhotonPt[1] && photon_->pt() < PhotonPt[0]) {
627  PhotonEnergy[1] = photon_->energy();
628  PhotonPt[1] = photon_->pt();
629  PhotonEt[1] = photon_->et();
630  PhotonEta[1] = photon_->eta();
631  PhotonEtaSc[1] = photon_->caloPosition().eta();
632  PhotonPhi[1] = photon_->phi();
633  PhotonHoverE[1] = photon_->hadronicOverEm();
634  PhotonSigmaIetaIeta[1] = photon_->sigmaIetaIeta();
635  PhotonTrkSumPtSolidConeDR03[1] = photon_->trkSumPtSolidConeDR03();
636  PhotonE1x5E5x5[1] = photon_->e1x5() / photon_->e5x5();
637  PhotonE2x5E5x5[1] = photon_->e2x5() / photon_->e5x5();
638  }
639  if (photon_->pt() > diphoton_Photon1_pt_cut_)
640  diphoton_countPhoton_++;
641  }
642 
643  //
644  // Analyze
645  //
646 
647  //Resonances
648  analyzeDiJets(iEvent);
649  analyzeDiMuons(iEvent);
650  analyzeDiElectrons(iEvent);
651  analyzeDiPhotons(iEvent);
652 
653  //MonoSearches
654  analyzeMonoJets(iEvent);
655  analyzeMonoMuons(iEvent);
656  analyzeMonoElectrons(iEvent);
657 
658  //LongLived
659  if (ValidGenParticles) {
660  analyzeDisplacedLeptons(iEvent, iSetup);
661  analyzeDisplacedJets(iEvent, iSetup);
662  }
663 }
664 
666  //=== This is designed to run on MC events in which a pair of long-lived stop quarks each decay to a displaced lepton + displaced b jet.
667 
668  // Initialisation
669 
670  const unsigned int stop1 = 1000006; // PDG identifier of top squark1
671  const unsigned int stop2 = 2000006; // PDG identifier of top squark2
672  const float deltaRcut = 0.01; // Cone size for matching reco to true leptons.
673  const float invPtcut = 0.1; // Cut in 1/Pt consistency for matching reco tracks to genParticles.
674 
675  //--- Measure the efficiency to reconstruct leptons from long-lived stop quark decay.
676 
677  for (const reco::GenParticle& gen : *GenCollection_) {
678  unsigned int idPdg = abs(gen.pdgId());
679  // Find electrons/muons from long-lived stop decay.
680  if (idPdg == stop1 || idPdg == stop2) {
681  unsigned int nDau = gen.numberOfDaughters();
682  for (unsigned int i = 0; i < nDau; i++) {
683  const reco::GenParticle* dau = (const reco::GenParticle*)gen.daughter(i);
684  // Only measure efficiency using leptons passing pt & eta cuts. (The pt cut is almost irrelevant, since leptons from stop decay are hard).
685  if (fabs(dau->eta()) < dispFermion_eta_cut_ && dau->pt() > dispFermion_pt_cut_) {
686  unsigned int pdgIdDau = abs(dau->pdgId());
687 
688  if (pdgIdDau == 11 || pdgIdDau == 13) { // electron or muon from stop decay
689 
690  // Get transverse decay length of stop quark.
691  float lxy = dau->vertex().rho();
692 
693  // Get momentum vector of daughter genParticle trajectory extrapolated to beam-line.
694  GlobalVector genP = this->getGenParticleTrajectoryAtBeamline(iSetup, dau);
695 
696  if (pdgIdDau == 11) { // electron from stop decay
697 
698  // Find matching reco track if any.
699  bool recoedTrk = false;
700  for (const reco::Track& trk : *TrackCollection_) {
701  if (reco::deltaR(genP, trk) < deltaRcut && fabs(1 / dau->pt() - 1 / trk.pt()) < invPtcut) {
702  //cout<<"MATCH ELEC TRK "<<dau->pt()<<" "<<trk.pt()<<" "<<reco::deltaR(genP, trk)<<endl;
703  recoedTrk = true;
704  }
705  }
706  dispElec_track_effi_lxy->Fill(lxy, recoedTrk);
707 
708  // Find matching reco electron if any.
709  bool recoedE = false;
710  for (const reco::GsfElectron& eReco : *ElectronCollection_) {
711  if (reco::deltaR(genP, eReco) < deltaRcut && fabs(1 / dau->pt() - 1 / eReco.pt()) < invPtcut)
712  recoedE = true;
713  }
714  dispElec_elec_effi_lxy->Fill(lxy, recoedE);
715 
716  } else if (pdgIdDau == 13) { // muon from stop decay
717 
718  // Find matching reco track if any.
719  bool recoedTrk = false;
720  for (const reco::Track& trk : *TrackCollection_) {
721  if (reco::deltaR(genP, trk) < deltaRcut && fabs(1 / dau->pt() - 1 / trk.pt()) < invPtcut) {
722  //cout<<"MATCH MUON TRK "<<dau->pt()<<" "<<trk.pt()<<" "<<reco::deltaR(genP, trk)<<endl;
723  recoedTrk = true;
724  }
725  }
726  dispMuon_track_effi_lxy->Fill(lxy, recoedTrk);
727 
728  // Find matching reco muon, if any, in normal global muon collection.
729  bool recoedMu = false;
730  for (const reco::Muon& muReco : *MuonCollection_) {
731  if (reco::deltaR(genP, muReco) < deltaRcut && fabs(1 / dau->pt() - 1 / muReco.pt()) < invPtcut)
732  recoedMu = true;
733  }
734  dispMuon_muon_effi_lxy->Fill(lxy, recoedMu);
735 
736  // Find matching reco muon, if any, in displaced global muon collection.
737  bool recoedMuDisp = false;
738  for (const reco::Track& muDispReco : *MuonDispCollection_) {
739  if (reco::deltaR(genP, muDispReco) < deltaRcut && fabs(1 / dau->pt() - 1 / muDispReco.pt()) < invPtcut)
740  recoedMuDisp = true;
741  }
742  dispMuon_muonDisp_effi_lxy->Fill(lxy, recoedMuDisp);
743 
744  // Find matching reco muon, if any, in displaced SA muon collection.
745  bool recoedMuDispSA = false;
746  for (const reco::Track& muDispSAReco : *MuonDispSACollection_) {
747  if (reco::deltaR(genP, muDispSAReco) < deltaRcut &&
748  fabs(1 / dau->pt() - 1 / muDispSAReco.pt()) < invPtcut)
749  recoedMuDispSA = true;
750  }
751  dispMuon_muonDispSA_effi_lxy->Fill(lxy, recoedMuDispSA);
752  }
753  }
754  }
755  }
756  }
757  }
758 }
760  //=== This is designed to run on MC events in which a pair of long-lived stop quarks each decay to a displaced lepton + displaced b jet.
761 
762  // Initialisation
763 
764  // Define function to identify R-hadrons containing stop quarks from PDG particle code.
765  // N.B. Jets originate not just from stop quark, but also from its partner SM quark inside the R hadron.
766  auto isRhadron = [](unsigned int pdgId) { return (pdgId / 100) == 10006 || (pdgId / 1000) == 1006; };
767 
768  const float deltaRcut = 0.01; // Cone size for matching reco tracks to genParticles.
769  const float invPtcut = 0.1; // Cut in 1/Pt consistency for matching reco tracks to genParticles.
770 
771  //--- Measure the efficiency to reconstruct tracks in jet(s) from long-lived stop quark decay.
772 
773  for (const reco::GenParticle& gen : *GenCollection_) {
774  unsigned int idPdg = abs(gen.pdgId());
775  // Only measure efficiency using charged e, mu pi, K, p
776  if (idPdg == 11 || idPdg == 13 || idPdg == 211 || idPdg == 321 || idPdg == 2212) {
777  // Only measure efficiency using leptons passing pt & eta cuts. (The pt cut is almost irrelevant, since leptons from stop decay are hard).
778  if (fabs(gen.eta()) < dispFermion_eta_cut_ && gen.pt() > dispFermion_pt_cut_) {
779  // Check if this particle came (maybe indirectly) from an R hadron decay.
780  const reco::GenParticle* genMoth = &gen;
781  const reco::GenParticle* genRhadron = nullptr;
782  bool foundParton = false;
783  while (genMoth->numberOfMothers() > 0) {
784  genMoth = (const reco::GenParticle*)genMoth->mother(0);
785  unsigned int idPdgMoth = abs(genMoth->pdgId());
786  // Check that the R-hadron decayed via a quark/gluon before yielding genParticle "gen".
787  // This ensures that gen is from the jet, and not a lepton produced directly from the stop quark decay.
788  if ((idPdgMoth >= 1 && idPdgMoth <= 6) || idPdgMoth == 21)
789  foundParton = true;
790  // Note if ancestor was R hadron
791  if (isRhadron(idPdgMoth)) {
792  genRhadron = genMoth;
793  break;
794  }
795  }
796 
797  if (foundParton && genRhadron != nullptr) { // This GenParticle came (maybe indirectly) from an R hadron decay.
798 
799  // Get transverse decay length of R hadron.
800  float lxy = genRhadron->daughter(0)->vertex().rho();
801 
802  // Get momentum vector of genParticle trajectory extrapolated to beam-line.
803  GlobalVector genP = this->getGenParticleTrajectoryAtBeamline(iSetup, &gen);
804 
805  // Find matching reco track if any.
806  bool recoedTrk = false;
807  for (const reco::Track& trk : *TrackCollection_) {
808  if (reco::deltaR(genP, trk) < deltaRcut && fabs(1 / gen.pt() - 1 / trk.pt()) < invPtcut) {
809  //cout<<"MATCH TRK "<<gen.pt()<<" "<<trk.pt()<<" "<<reco::deltaR(gen, trk)<<endl;
810  recoedTrk = true;
811  }
812  }
813  dispJet_track_effi_lxy->Fill(lxy, recoedTrk);
814  }
815  }
816  }
817  }
818 }
820  const reco::GenParticle* gen) {
821  //=== Estimate the momentum vector that a GenParticle would have at its trajectory's point of closest
822  //=== approach to the beam-line.
823 
824  // Get the magnetic field
825  const MagneticField* theMagField = &iSetup.getData(magFieldToken_);
826 
827  // Make FreeTrajectoryState of this gen particle
828  FreeTrajectoryState fts(GlobalPoint(gen->vx(), gen->vy(), gen->vz()),
829  GlobalVector(gen->px(), gen->py(), gen->pz()),
830  gen->charge(),
831  theMagField);
832 
833  // Get trajectory closest to beam line
834  TSCBLBuilderNoMaterial tscblBuilder;
835  const BeamSpot beamspot; // Simple beam-spot at (0,0,0). Good enough.
836  TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(fts, beamspot);
837 
838  GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
839 
840  return p;
841 }
842 
844  for (unsigned int icoll = 0; icoll < DiJetPFJetCollection_.size(); ++icoll) {
845  dijet_countPFJet_ = 0;
846  bool ValidDiJetPFJets = iEvent.getByToken(DiJetPFJetToken_[icoll], DiJetpfJetCollection_);
847  if (!ValidDiJetPFJets)
848  continue;
849  DiJetpfjets = *DiJetpfJetCollection_;
850  for (int i = 0; i < 2; i++) {
851  PFJetPx[i] = 0.;
852  PFJetPy[i] = 0.;
853  PFJetPt[i] = 0.;
854  PFJetEta[i] = 0.;
855  PFJetPhi[i] = 0.;
856  PFJetNHEF[i] = 0.;
857  PFJetCHEF[i] = 0.;
858  PFJetNEMF[i] = 0.;
859  PFJetCEMF[i] = 0.;
860  }
861  PFJetCollection::const_iterator DiJetpfjet_ = DiJetpfjets.begin();
862  for (; DiJetpfjet_ != DiJetpfjets.end(); ++DiJetpfjet_) {
863  double scale = 1.;
864  if (scale * DiJetpfjet_->pt() > PFJetPt[0]) {
865  PFJetPt[1] = PFJetPt[0];
866  PFJetPx[1] = PFJetPx[0];
867  PFJetPy[1] = PFJetPy[0];
868  PFJetEta[1] = PFJetEta[0];
869  PFJetPhi[1] = PFJetPhi[0];
870  PFJetRapidity[1] = DiJetpfjet_->rapidity();
871  PFJetMass[1] = DiJetpfjet_->mass();
872  PFJetNHEF[1] = PFJetNHEF[0];
873  PFJetCHEF[1] = PFJetCHEF[0];
874  PFJetNEMF[1] = PFJetNEMF[0];
875  PFJetCEMF[1] = PFJetCEMF[0];
876  PFJetPt[0] = scale * DiJetpfjet_->pt();
877  PFJetPx[0] = scale * DiJetpfjet_->px();
878  PFJetPy[0] = scale * DiJetpfjet_->py();
879  PFJetEta[0] = DiJetpfjet_->eta();
880  PFJetPhi[0] = DiJetpfjet_->phi();
881  PFJetRapidity[0] = DiJetpfjet_->rapidity();
882  PFJetMass[0] = DiJetpfjet_->mass();
883  PFJetNHEF[0] = DiJetpfjet_->neutralHadronEnergyFraction();
884  PFJetCHEF[0] = DiJetpfjet_->chargedHadronEnergyFraction();
885  PFJetNEMF[0] = DiJetpfjet_->neutralEmEnergyFraction();
886  PFJetCEMF[0] = DiJetpfjet_->chargedEmEnergyFraction();
887  } else if (scale * DiJetpfjet_->pt() < PFJetPt[0] && scale * DiJetpfjet_->pt() > PFJetPt[1]) {
888  PFJetPt[1] = scale * DiJetpfjet_->pt();
889  PFJetPx[1] = scale * DiJetpfjet_->px();
890  PFJetPy[1] = scale * DiJetpfjet_->py();
891  PFJetEta[1] = DiJetpfjet_->eta();
892  PFJetPhi[1] = DiJetpfjet_->phi();
893  PFJetRapidity[1] = DiJetpfjet_->rapidity();
894  PFJetMass[1] = DiJetpfjet_->mass();
895  PFJetNHEF[1] = DiJetpfjet_->neutralHadronEnergyFraction();
896  PFJetCHEF[1] = DiJetpfjet_->chargedHadronEnergyFraction();
897  PFJetNEMF[1] = DiJetpfjet_->neutralEmEnergyFraction();
898  PFJetCEMF[1] = DiJetpfjet_->chargedEmEnergyFraction();
899  } else {
900  }
901  if (scale * DiJetpfjet_->pt() > dijet_PFJet1_pt_cut_)
902  dijet_countPFJet_++;
903  }
904  if (PFJetPt[0] > dijet_PFJet1_pt_cut_ && PFJetPt[1] > dijet_PFJet2_pt_cut_) {
905  dijet_PFJet_pt[icoll]->Fill(PFJetPt[0]);
906  dijet_PFJet_eta[icoll]->Fill(PFJetEta[0]);
907  dijet_PFJet_phi[icoll]->Fill(PFJetPhi[0]);
908  dijet_PFJet_rapidity[icoll]->Fill(PFJetRapidity[0]);
909  dijet_PFJet_mass[icoll]->Fill(PFJetMass[0]);
910  dijet_PFJet_pt[icoll]->Fill(PFJetPt[1]);
911  dijet_PFJet_eta[icoll]->Fill(PFJetEta[1]);
912  dijet_PFJet_phi[icoll]->Fill(PFJetPhi[1]);
913  dijet_PFJet_rapidity[icoll]->Fill(PFJetRapidity[1]);
914  dijet_PFJet_mass[icoll]->Fill(PFJetMass[1]);
915  dijet_deltaPhiPFJet1PFJet2[icoll]->Fill(deltaPhi(PFJetPhi[0], PFJetPhi[1]));
916  dijet_deltaEtaPFJet1PFJet2[icoll]->Fill(PFJetEta[0] - PFJetEta[1]);
917  dijet_deltaRPFJet1PFJet2[icoll]->Fill(deltaR(PFJetEta[0], PFJetPhi[0], PFJetEta[1], PFJetPhi[1]));
918  dijet_invMassPFJet1PFJet2[icoll]->Fill(
919  sqrt(2 * PFJetPt[0] * PFJetPt[1] * (cosh(PFJetEta[0] - PFJetEta[1]) - cos(PFJetPhi[0] - PFJetPhi[1]))));
920  dijet_PFchef[icoll]->Fill(PFJetCHEF[0]);
921  dijet_PFnhef[icoll]->Fill(PFJetNHEF[0]);
922  dijet_PFcemf[icoll]->Fill(PFJetCEMF[0]);
923  dijet_PFnemf[icoll]->Fill(PFJetNEMF[0]);
924  dijet_PFJetMulti[icoll]->Fill(dijet_countPFJet_);
925  }
926  }
927 }
928 
930  if (MuonPt[0] > dimuon_Muon1_pt_cut_ && MuonPt[1] > dimuon_Muon2_pt_cut_ && MuonCharge[0] * MuonCharge[1] == -1) {
931  dimuon_Muon_pt->Fill(MuonPt[0]);
932  dimuon_Muon_eta->Fill(MuonEta[0]);
933  dimuon_Muon_phi->Fill(MuonPhi[0]);
934  dimuon_Muon_pt->Fill(MuonPt[1]);
935  dimuon_Muon_eta->Fill(MuonEta[1]);
936  dimuon_Muon_phi->Fill(MuonPhi[1]);
937  dimuon_Charge->Fill(MuonCharge[0]);
938  dimuon_Charge->Fill(MuonCharge[1]);
939  dimuon_deltaPhiMuon1Muon2->Fill(deltaPhi(MuonPhi[0], MuonPhi[1]));
940  dimuon_deltaEtaMuon1Muon2->Fill(MuonEta[0] - MuonEta[1]);
941  dimuon_deltaRMuon1Muon2->Fill(deltaR(MuonEta[0], MuonPhi[0], MuonEta[1], MuonPhi[1]));
942  dimuon_invMassMuon1Muon2->Fill(
943  sqrt(2 * MuonPt[0] * MuonPt[1] * (cosh(MuonEta[0] - MuonEta[1]) - cos(MuonPhi[0] - MuonPhi[1]))));
944  dimuon_MuonMulti->Fill(dimuon_countMuon_);
945  }
946 }
947 
949  if (ElectronPt[0] > dielectron_Electron1_pt_cut_ && ElectronPt[1] > dielectron_Electron2_pt_cut_ &&
950  ElectronCharge[0] * ElectronCharge[1] == -1.) {
951  dielectron_Electron_pt->Fill(ElectronPt[0]);
952  dielectron_Electron_eta->Fill(ElectronEta[0]);
953  dielectron_Electron_phi->Fill(ElectronPhi[0]);
954  dielectron_Electron_pt->Fill(ElectronPt[1]);
955  dielectron_Electron_eta->Fill(ElectronEta[1]);
956  dielectron_Electron_phi->Fill(ElectronPhi[1]);
957  dielectron_Charge->Fill(ElectronCharge[0]);
958  dielectron_Charge->Fill(ElectronCharge[1]);
959  dielectron_deltaPhiElectron1Electron2->Fill(deltaPhi(ElectronPhi[0], ElectronPhi[1]));
960  dielectron_deltaEtaElectron1Electron2->Fill(ElectronEta[0] - ElectronEta[1]);
961  dielectron_deltaRElectron1Electron2->Fill(deltaR(ElectronEta[0], ElectronPhi[0], ElectronEta[1], ElectronPhi[1]));
962  dielectron_invMassElectron1Electron2->Fill(
963  sqrt(2 * ElectronPt[0] * ElectronPt[1] *
964  (cosh(ElectronEta[0] - ElectronEta[1]) - cos(ElectronPhi[0] - ElectronPhi[1]))));
965  dielectron_ElectronMulti->Fill(dielectron_countElectron_);
966  }
967 }
968 
970  if (PhotonPt[0] > diphoton_Photon1_pt_cut_ && PhotonPt[1] > diphoton_Photon2_pt_cut_) {
971  diphoton_Photon_energy->Fill(PhotonEnergy[0]);
972  diphoton_Photon_pt->Fill(PhotonPt[0]);
973  diphoton_Photon_et->Fill(PhotonEt[0]);
974  diphoton_Photon_eta->Fill(PhotonEta[0]);
975  diphoton_Photon_etasc->Fill(PhotonEtaSc[0]);
976  diphoton_Photon_phi->Fill(PhotonPhi[0]);
977  if (fabs(PhotonEtaSc[0]) < 1.442) {
978  diphoton_Photon_hovere_eb->Fill(PhotonHoverE[0]);
979  diphoton_Photon_sigmaietaieta_eb->Fill(PhotonSigmaIetaIeta[0]);
980  diphoton_Photon_trksumptsolidconedr03_eb->Fill(PhotonTrkSumPtSolidConeDR03[0]);
981  diphoton_Photon_e1x5e5x5_eb->Fill(PhotonE1x5E5x5[0]);
982  diphoton_Photon_e2x5e5x5_eb->Fill(PhotonE2x5E5x5[0]);
983  }
984  if (fabs(PhotonEtaSc[0]) > 1.566 && fabs(PhotonEtaSc[0]) < 2.5) {
985  diphoton_Photon_hovere_ee->Fill(PhotonHoverE[0]);
986  diphoton_Photon_sigmaietaieta_ee->Fill(PhotonSigmaIetaIeta[0]);
987  diphoton_Photon_trksumptsolidconedr03_ee->Fill(PhotonTrkSumPtSolidConeDR03[0]);
988  diphoton_Photon_e1x5e5x5_ee->Fill(PhotonE1x5E5x5[0]);
989  diphoton_Photon_e2x5e5x5_ee->Fill(PhotonE2x5E5x5[0]);
990  }
991  diphoton_Photon_energy->Fill(PhotonEnergy[1]);
992  diphoton_Photon_pt->Fill(PhotonPt[1]);
993  diphoton_Photon_et->Fill(PhotonEt[1]);
994  diphoton_Photon_eta->Fill(PhotonEta[1]);
995  diphoton_Photon_etasc->Fill(PhotonEtaSc[1]);
996  diphoton_Photon_phi->Fill(PhotonPhi[1]);
997  if (fabs(PhotonEtaSc[1]) < 1.4442) {
998  diphoton_Photon_hovere_eb->Fill(PhotonHoverE[1]);
999  diphoton_Photon_sigmaietaieta_eb->Fill(PhotonSigmaIetaIeta[1]);
1000  diphoton_Photon_trksumptsolidconedr03_eb->Fill(PhotonTrkSumPtSolidConeDR03[1]);
1001  diphoton_Photon_e1x5e5x5_eb->Fill(PhotonE1x5E5x5[1]);
1002  diphoton_Photon_e2x5e5x5_eb->Fill(PhotonE2x5E5x5[1]);
1003  }
1004  if (fabs(PhotonEtaSc[1]) > 1.566 && fabs(PhotonEtaSc[1]) < 2.5) {
1005  diphoton_Photon_hovere_ee->Fill(PhotonHoverE[1]);
1006  diphoton_Photon_sigmaietaieta_ee->Fill(PhotonSigmaIetaIeta[1]);
1007  diphoton_Photon_trksumptsolidconedr03_ee->Fill(PhotonTrkSumPtSolidConeDR03[1]);
1008  diphoton_Photon_e1x5e5x5_ee->Fill(PhotonE1x5E5x5[1]);
1009  diphoton_Photon_e2x5e5x5_ee->Fill(PhotonE2x5E5x5[1]);
1010  }
1011  diphoton_deltaPhiPhoton1Photon2->Fill(deltaPhi(PhotonPhi[0], PhotonPhi[1]));
1012  diphoton_deltaEtaPhoton1Photon2->Fill(PhotonEta[0] - PhotonEta[1]);
1013  diphoton_deltaRPhoton1Photon2->Fill(deltaR(PhotonEta[0], PhotonPhi[0], PhotonEta[1], PhotonPhi[1]));
1014  diphoton_invMassPhoton1Photon2->Fill(
1015  sqrt(2 * PhotonPt[0] * PhotonPt[1] * (cosh(PhotonEta[0] - PhotonEta[1]) - cos(PhotonPhi[0] - PhotonPhi[1]))));
1016  diphoton_PhotonMulti->Fill(diphoton_countPhoton_);
1017  }
1018 }
1019 
1021  const PFMETCollection* pfmetcol = pfMETCollection_.product();
1022  const PFMET pfmet = pfmetcol->front();
1023  if (PFJetPt[0] > monojet_PFJet_pt_cut_ && pfmet.et() > monojet_PFJet_met_cut_) {
1024  monojet_PFJet_pt->Fill(PFJetPt[0]);
1025  monojet_PFJet_eta->Fill(PFJetEta[0]);
1026  monojet_PFJet_phi->Fill(PFJetPhi[0]);
1027  monojet_PFMet->Fill(pfmet.et());
1028  monojet_PFMet_phi->Fill(pfmet.phi());
1029  monojet_PFJetPtOverPFMet->Fill(PFJetPt[0] / pfmet.et());
1030  monojet_deltaPhiPFJetPFMet->Fill(deltaPhi(PFJetPhi[0], pfmet.phi()));
1031  monojet_PFchef->Fill(PFJetCHEF[0]);
1032  monojet_PFnhef->Fill(PFJetNHEF[0]);
1033  monojet_PFcemf->Fill(PFJetCEMF[0]);
1034  monojet_PFnemf->Fill(PFJetNEMF[0]);
1035  monojet_PFJetMulti->Fill(monojet_countPFJet_);
1036  }
1037 }
1038 
1040  const PFMETCollection* pfmetcol = pfMETCollection_.product();
1041  const PFMET pfmet = pfmetcol->front();
1042  if (MuonPt[0] > monomuon_Muon_pt_cut_ && pfmet.et() > monomuon_Muon_met_cut_) {
1043  monomuon_Muon_pt->Fill(MuonPt[0]);
1044  monomuon_Muon_eta->Fill(MuonEta[0]);
1045  monomuon_Muon_phi->Fill(MuonPhi[0]);
1046  monomuon_Charge->Fill(MuonCharge[0]);
1047  monomuon_PFMet->Fill(pfmet.et());
1048  monomuon_PFMet_phi->Fill(pfmet.phi());
1049  monomuon_MuonPtOverPFMet->Fill(MuonPt[0] / pfmet.et());
1050  monomuon_deltaPhiMuonPFMet->Fill(deltaPhi(MuonPhi[0], pfmet.phi()));
1051  monomuon_TransverseMass->Fill(sqrt(2 * MuonPt[0] * pfmet.et() * (1 - cos(deltaPhi(MuonPhi[0], pfmet.phi())))));
1052  monomuon_MuonMulti->Fill(monomuon_countMuon_);
1053  }
1054 }
1055 
1057  const PFMETCollection* pfmetcol = pfMETCollection_.product();
1058  const PFMET pfmet = pfmetcol->front();
1059  if (ElectronPt[0] > monoelectron_Electron_pt_cut_ && pfmet.et() > monoelectron_Electron_met_cut_) {
1060  monoelectron_Electron_pt->Fill(ElectronPt[0]);
1061  monoelectron_Electron_eta->Fill(ElectronEta[0]);
1062  monoelectron_Electron_phi->Fill(ElectronPhi[0]);
1063  monoelectron_Charge->Fill(ElectronCharge[0]);
1064  monoelectron_PFMet->Fill(pfmet.et());
1065  monoelectron_PFMet_phi->Fill(pfmet.phi());
1066  monoelectron_ElectronPtOverPFMet->Fill(ElectronPt[0] / pfmet.et());
1067  monoelectron_deltaPhiElectronPFMet->Fill(deltaPhi(ElectronPhi[0], pfmet.phi()));
1068  monoelectron_TransverseMass->Fill(
1069  sqrt(2 * ElectronPt[0] * pfmet.et() * (1 - cos(deltaPhi(ElectronPhi[0], pfmet.phi())))));
1070  monoelectron_ElectronMulti->Fill(monoelectron_countElectron_);
1071  }
1072 }
1073 
1075  const PFMETCollection* pfmetcol = pfMETCollection_.product();
1076  const PFMET pfmet = pfmetcol->front();
1077  if (PhotonPt[0] > monophoton_Photon_pt_cut_ && pfmet.et() > monophoton_Photon_met_cut_) {
1078  monophoton_Photon_energy->Fill(PhotonEnergy[0]);
1079  monophoton_Photon_pt->Fill(PhotonPt[0]);
1080  monophoton_Photon_et->Fill(PhotonEt[0]);
1081  monophoton_Photon_eta->Fill(PhotonEta[0]);
1082  monophoton_Photon_etasc->Fill(PhotonEtaSc[0]);
1083  monophoton_Photon_phi->Fill(PhotonPhi[0]);
1084  monophoton_Photon_hovere->Fill(PhotonHoverE[0]);
1085  monophoton_Photon_sigmaietaieta->Fill(PhotonSigmaIetaIeta[0]);
1086  monophoton_Photon_trksumptsolidconedr03->Fill(PhotonTrkSumPtSolidConeDR03[0]);
1087  monophoton_Photon_e1x5e5x5->Fill(PhotonE1x5E5x5[0]);
1088  monophoton_Photon_e2x5e5x5->Fill(PhotonE2x5E5x5[0]);
1089  monophoton_PFMet->Fill(pfmet.et());
1090  monophoton_PFMet_phi->Fill(pfmet.phi());
1091  monophoton_PhotonPtOverPFMet->Fill(PhotonPt[0] / pfmet.et());
1092  monophoton_deltaPhiPhotonPFMet->Fill(deltaPhi(PhotonPhi[0], pfmet.phi()));
1093  monophoton_PhotonMulti->Fill(monophoton_countPhoton_);
1094  }
1095 }
virtual void analyzeMonoElectrons(edm::Event const &e)
Definition: ExoticaDQM.cc:1056
virtual void analyzeDiJets(edm::Event const &e)
Definition: ExoticaDQM.cc:843
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const Candidate * mother(size_type=0) const override
return mother at a given position, i = 0, ... numberOfMothers() - 1 (read only mode) ...
virtual void analyzeMonoMuons(edm::Event const &e)
Definition: ExoticaDQM.cc:1039
double pt() const final
transverse momentum
ExoticaDQM(const edm::ParameterSet &ps)
Definition: ExoticaDQM.cc:13
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
Definition: ExoticaDQM.cc:327
virtual void analyzeMonoJets(edm::Event const &e)
Definition: ExoticaDQM.cc:1020
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
virtual void analyzeDiMuons(edm::Event const &e)
Definition: ExoticaDQM.cc:929
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
void bookHistograms(DQMStore::IBooker &bei, edm::Run const &, edm::EventSetup const &) override
Definition: ExoticaDQM.cc:105
const Point & vertex() const override
vertex position (overwritten by PF...)
size_t numberOfMothers() const override
number of mothers
virtual void analyzeDisplacedJets(edm::Event const &e, const edm::EventSetup &s)
Definition: ExoticaDQM.cc:759
~ExoticaDQM() override
Definition: ExoticaDQM.cc:97
T getUntrackedParameter(std::string const &, T const &) const
virtual GlobalVector getGenParticleTrajectoryAtBeamline(const edm::EventSetup &iSetup, const reco::GenParticle *gen)
Definition: ExoticaDQM.cc:819
int pdgId() const final
PDG identifier.
int iEvent
Definition: GenABIO.cc:224
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
T sqrt(T t)
Definition: SSEVec.h:19
virtual void analyzeDiPhotons(edm::Event const &e)
Definition: ExoticaDQM.cc:969
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
virtual void analyzeDisplacedLeptons(edm::Event const &e, const edm::EventSetup &s)
Definition: ExoticaDQM.cc:665
GlobalVector momentum() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual const Point & vertex() const =0
vertex position
bool getData(T &iHolder) const
Definition: EventSetup.h:122
def gen(fragment, howMuch)
Production test section ####.
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
virtual void analyzeMonoPhotons(edm::Event const &e)
Definition: ExoticaDQM.cc:1074
Log< level::Info, false > LogInfo
fixed size matrix
double et() const final
transverse energy
HLT enums.
virtual void analyzeDiElectrons(edm::Event const &e)
Definition: ExoticaDQM.cc:948
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
double phi() const final
momentum azimuthal angle
std::vector< std::string > vstring
Definition: Schedule.cc:475
const Candidate * daughter(size_type) const override
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
Definition: Run.h:45
Global3DVector GlobalVector
Definition: GlobalVector.h:10
Collection of PF MET.
double eta() const final
momentum pseudorapidity
int icoll
Definition: AMPTWrapper.h:146