59 unsigned int gensize = genParticles->size();
61 std::auto_ptr<double>
weight (
new double);
70 for (
unsigned int i = 0;
i<gensize; ++
i) {
73 if (status!=3)
continue;
76 if (status==3 && (partId==23||
abs(partId)==24)) {
77 boson = &(*genParticles)[
i];
87 for (
unsigned int i = 0;
i<gensize; ++
i) {
91 if (status!=1)
continue;
93 if (partId!=22)
continue;
97 if (mother->
status()!=3)
continue;
98 int mId = mother->
pdgId();
99 if (
abs(mId)>6 && mId!=2212)
continue;
102 if (keyD==parton1Key || keyD==parton2Key) {
111 if (boson && photon) {
113 double s = smom.M2();
114 double sqrts = smom.M();
117 ROOT::Math::Boost cmboost(smom.BoostToCM());
119 double pcostheta = ( smom.x()*photonCM.x()
120 + smom.y()*photonCM.y()
121 + smom.z()*photonCM.z() ) / smom.P();
124 double t = - sqrts * (photonCM.t()-pcostheta);
125 double MV = boson->
mass();
126 double u = MV*MV - s -
t;
127 (*weight) = 1. - 2*t*u/(s*s+MV*MV*MV*MV);
virtual int pdgId() const
PDG identifier.
edm::EDGetTokenT< reco::GenParticleCollection > genToken_
daughters::value_type daughterRef(size_type i) const
reference to daughter at given position
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual int status() const
status word
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
virtual size_t numberOfMothers() const
number of mothers
virtual size_t numberOfDaughters() const
number of daughters
Abs< T >::type abs(const T &t)
daughters::value_type motherRef(size_type i=0) const
reference to mother at given position
virtual float mass() const
mass
virtual const LorentzVector & p4() const
four-momentum Lorentz vector