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"))
88 const HepMC::GenEvent *myGenEvent = evt->GetEvent();
96 std::vector<const HepMC::GenParticle*> allproducts;
103 for(HepMC::GenEvent::particle_const_iterator iter = myGenEvent->particles_begin(); iter != myGenEvent->particles_end(); ++iter) {
105 if ((*iter)->status()==3 &&
abs((*iter)->pdg_id() == 15) )
return;
107 if((*iter)->status()==requiredstatus) {
109 allproducts.push_back(*iter);
114 if (allproducts.size() < 2)
return;
120 std::vector<const HepMC::GenParticle*>
products;
121 products.push_back(allproducts.front());
123 double charge1 = PData1->charge();
124 for (
unsigned int i = 1;
i < allproducts.size(); ++
i ){
126 double charge2 = PData2->charge();
127 if (charge1*charge2 < 0) products.push_back(allproducts[
i]);
131 if (products.size() < 2)
return;
133 assert(products[0]->momentum().
perp() >= products[1]->momentum().
perp());
136 if (products[0]->momentum().
perp() < 20.)
return;
139 TLorentzVector lep1(products[0]->momentum().
x(), products[0]->momentum().
y(), products[0]->momentum().
z(), products[0]->momentum().
t());
140 TLorentzVector lep2(products[1]->momentum().
x(), products[1]->momentum().
y(), products[1]->momentum().
z(), products[1]->momentum().
t());
141 TLorentzVector dilepton_mom = lep1 + lep2;
142 TLorentzVector dilepton_andphoton_mom = dilepton_mom;
145 if (dilepton_mom.M() < 60.)
return;
148 std::vector<const HepMC::GenParticle*> fsrphotons;
154 std::vector<TLorentzVector> gammasMomenta;
155 for (
unsigned int ipho = 0; ipho < fsrphotons.size(); ++ipho){
156 TLorentzVector phomom(fsrphotons[ipho]->momentum().
x(), fsrphotons[ipho]->momentum().
y(), fsrphotons[ipho]->momentum().
z(), fsrphotons[ipho]->momentum().
t());
157 dilepton_andphoton_mom += phomom;
159 gammasMomenta.push_back(phomom);
165 ZptLog->
Fill(log10(dilepton_andphoton_mom.Pt()),weight);
182 TVector3 boost = dilepton_andphoton_mom.BoostVector();
186 for (
unsigned int ipho = 0; ipho < gammasMomenta.size(); ++ipho){
187 gammasMomenta[ipho].Boost(boost);
189 std::sort(gammasMomenta.begin(), gammasMomenta.end(), HepMCValidationHelper::GreaterByE<TLorentzVector>);
192 if (gammasMomenta.size() != 0 && dilepton_andphoton_mom.M() > 50.) {
194 double dphi = lep1.DeltaR(gammasMomenta.front()) < lep2.DeltaR(gammasMomenta.front()) ?
195 lep1.DeltaPhi(gammasMomenta.front()) : lep2.DeltaPhi(gammasMomenta.front());
MonitorElement * gamma_energy
MonitorElement * dilep_rap
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void findFSRPhotons(const std::vector< const HepMC::GenParticle * > &leptons, const std::vector< const HepMC::GenParticle * > &all, double deltaR, std::vector< const HepMC::GenParticle * > &photons)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
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)
virtual void endRun(const edm::Run &, const edm::EventSetup &)
void getData(T &iHolder) const
edm::ESHandle< HepPDT::ParticleDataTable > fPDGTable
PDT table.
MonitorElement * dilep_massPeak
virtual ~DrellYanValidation()
ESProducts< T, S > products(const T &i1, const S &i2)
Cos< T >::type cos(const T &t)
DQMStore * dbe
ME's "container".
Abs< T >::type abs(const T &t)
MonitorElement * Zdaughters
MonitorElement * dilep_pt
HepPDT::ParticleData ParticleData
virtual void beginRun(const edm::Run &, const edm::EventSetup &)
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
double weight(const edm::Event &)
DrellYanValidation(const edm::ParameterSet &)
void setCurrentFolder(const std::string &fullpath)