10 #include "TLorentzVector.h"
12 #include "CLHEP/Units/defs.h"
13 #include "CLHEP/Units/PhysicalConstants.h"
20 : wmanager_(iPSet, consumesCollector()),
21 hepmcCollection_(iPSet.getParameter<edm::
InputTag>(
"hepmcCollection")),
22 _flavor(iPSet.getParameter<int>(
"decaysTo")),
23 _name(iPSet.getParameter<std::
string>(
"name")) {
42 nEvt = dqm.
book1dHisto(
"nEvt",
"n analyzed Events", 1, 0., 1.,
"bin",
"Number of Events");
45 Zmass = dqm.
book1dHisto(
"Zmass",
"inv. Mass Z", 70, 0, 140,
"M_{Z} (GeV)",
"Number of Events");
46 ZmassPeak = dqm.
book1dHisto(
"ZmassPeak",
"inv. Mass Z", 80, 80, 100,
"M_{Z} (GeV)",
"Number of Events");
47 Zpt = dqm.
book1dHisto(
"Zpt",
"Z pt", 100, 0, 200,
"P_{t}^{Z} (GeV)",
"Number of Events");
49 dqm.
book1dHisto(
"ZptLog",
"log(Z pt)", 100, 0., 5.,
"log_{10}(P_{t}^{Z}) (log_{10}(GeV))",
"Number of Events");
50 Zrap = dqm.
book1dHisto(
"Zrap",
"Z y", 100, -5, 5,
"Y_{Z}",
"Number of Events");
51 Zdaughters = dqm.
book1dHisto(
"Zdaughters",
"Z daughters", 60, -30, 30,
"Z daughters (PDG ID)",
"Number of Events");
53 dilep_mass = dqm.
book1dHisto(
"dilep_mass",
"inv. Mass dilepton", 70, 0, 140,
"M_{ll} (GeV)",
"Number of Events");
55 dqm.
book1dHisto(
"dilep_massPeak",
"inv. Mass dilepton", 80, 80, 100,
"M_{ll} (GeV)",
"Number of Events");
56 dilep_pt = dqm.
book1dHisto(
"dilep_pt",
"dilepton pt", 100, 0, 200,
"P_{t}^{ll} (GeV)",
"Number of Events");
58 "dilep_ptLog",
"log(dilepton pt)", 100, 0., 5.,
"log_{10}(P_{t}^{ll}) (log_{10}(GeV))",
"Number of Events");
59 dilep_rap = dqm.
book1dHisto(
"dilep_rap",
"dilepton y", 100, -5, 5,
"Y_{ll}",
"Number of Events");
62 "photon energy in Z rest frame",
66 "E_{#gamma}^{Z rest-frame} (GeV)",
69 "cos_theta_gamma_lepton in Z rest frame",
73 "cos(#theta_{#gamma-lepton}^{Z rest-frame})",
76 leadpt = dqm.
book1dHisto(
"leadpt",
"leading lepton pt", 200, 0., 200.,
"P_{t}^{1st-lepton}",
"Number of Events");
77 secpt = dqm.
book1dHisto(
"secpt",
"second lepton pt", 200, 0., 200.,
"P_{t}^{2nd-lepton}",
"Number of Events");
78 leadeta = dqm.
book1dHisto(
"leadeta",
"leading lepton eta", 100, -5., 5.,
"#eta^{1st-lepton}",
"Number of Events");
79 seceta = dqm.
book1dHisto(
"seceta",
"second lepton eta", 100, -5., 5.,
"#eta^{2nd-lepton}",
"Number of Events");
100 std::vector<const HepMC::GenParticle*> allproducts;
111 for (HepMC::GenEvent::particle_const_iterator iter = myGenEvent->particles_begin();
112 iter != myGenEvent->particles_end();
115 if ((*iter)->status() == 3 &&
std::abs((*iter)->pdg_id()) == 15)
118 if ((*iter)->status() == requiredstatus) {
120 allproducts.push_back(*iter);
125 if (allproducts.size() < 2)
132 std::vector<const HepMC::GenParticle*>
products;
133 products.push_back(allproducts.front());
135 double charge1 = PData1->charge();
136 for (
unsigned int i = 1;
i < allproducts.size(); ++
i) {
138 double charge2 = PData2->charge();
139 if (charge1 * charge2 < 0)
140 products.push_back(allproducts[
i]);
144 if (products.size() < 2)
147 assert(products[0]->momentum().
perp() >= products[1]->momentum().
perp());
150 if (products[0]->momentum().
perp() < 20.)
154 TLorentzVector
lep1(products[0]->momentum().
x(),
155 products[0]->momentum().
y(),
156 products[0]->momentum().
z(),
157 products[0]->momentum().
t());
158 TLorentzVector
lep2(products[1]->momentum().
x(),
159 products[1]->momentum().
y(),
160 products[1]->momentum().
z(),
161 products[1]->momentum().
t());
162 TLorentzVector dilepton_mom = lep1 +
lep2;
163 TLorentzVector dilepton_andphoton_mom = dilepton_mom;
166 if (dilepton_mom.M() < 60.)
170 std::vector<const HepMC::GenParticle*> fsrphotons;
176 std::vector<TLorentzVector> gammasMomenta;
177 for (
unsigned int ipho = 0; ipho < fsrphotons.size(); ++ipho) {
178 TLorentzVector phomom(fsrphotons[ipho]->momentum().
x(),
179 fsrphotons[ipho]->momentum().
y(),
180 fsrphotons[ipho]->momentum().
z(),
181 fsrphotons[ipho]->momentum().
t());
182 dilepton_andphoton_mom += phomom;
184 gammasMomenta.push_back(phomom);
190 ZptLog->
Fill(log10(dilepton_andphoton_mom.Pt()), weight);
207 TVector3 boost = dilepton_andphoton_mom.BoostVector();
211 for (
unsigned int ipho = 0; ipho < gammasMomenta.size(); ++ipho) {
212 gammasMomenta[ipho].Boost(boost);
214 std::sort(gammasMomenta.begin(), gammasMomenta.end(), HepMCValidationHelper::GreaterByE<TLorentzVector>);
217 if (!gammasMomenta.empty() && dilepton_andphoton_mom.M() > 50.) {
219 double dphi = lep1.DeltaR(gammasMomenta.front()) < lep2.DeltaR(gammasMomenta.front())
220 ? lep1.DeltaPhi(gammasMomenta.front())
221 : lep2.DeltaPhi(gammasMomenta.front());
MonitorElement * gamma_energy
MonitorElement * dilep_rap
const edm::EventSetup & c
void findFSRPhotons(const std::vector< const HepMC::GenParticle * > &leptons, const std::vector< const HepMC::GenParticle * > &all, double deltaR, std::vector< const HepMC::GenParticle * > &photons)
edm::ESGetToken< HepPDT::ParticleDataTable, edm::DefaultRecord > fPDGTableToken
virtual void setCurrentFolder(std::string const &fullpath)
void dqmBeginRun(const edm::Run &r, const edm::EventSetup &c) override
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::InputTag hepmcCollection_
MonitorElement * cos_theta_gamma_lepton
bool sortByPt(const HepMC::GenParticle *a, const HepMC::GenParticle *b)
~DrellYanValidation() override
ESProducts< std::remove_reference_t< TArgs >...> products(TArgs &&...args)
edm::ESHandle< HepPDT::ParticleDataTable > fPDGTable
PDT table.
MonitorElement * dilep_massPeak
void analyze(edm::Event const &, edm::EventSetup const &) override
tuple lep1
print 'MRbb(1b)',event.mr_bb
Cos< T >::type cos(const T &t)
Abs< T >::type abs(const T &t)
MonitorElement * Zdaughters
MonitorElement * dilep_pt
HepPDT::ParticleData ParticleData
MonitorElement * book1dHisto(const std::string &name, const std::string &title, int n, double xmin, double xmax, const std::string &xaxis, const std::string &yaxis)
edm::EDGetTokenT< edm::HepMCProduct > hepmcCollectionToken_
std::string _name
decay flavor name
T perp() const
Magnitude of transverse component.
MonitorElement * dilep_mass
MonitorElement * ZmassPeak
MonitorElement * dilep_ptLog
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
double weight(const edm::Event &)
DrellYanValidation(const edm::ParameterSet &)