33 genParticlesTag_(pset.getUntrackedParameter<edm::InputTag> (
"GenParticlesTag", edm::InputTag(
"genParticles"))),
34 rhoParameter_(pset.getUntrackedParameter<double> (
"RhoParameter", 1.004))
55 iEvent.
getByLabel(
"genParticles", genParticles);
56 unsigned int gensize = genParticles->size();
58 std::auto_ptr<double>
weight (
new double);
64 for(
unsigned int i = 0;
i<gensize; ++
i) {
68 int id = part.
pdgId();
70 double Q = part.
mass();
72 if (nmothers<=0)
continue;
74 unsigned int quark_id =
abs((*genParticles)[key].
pdgId());
75 if (quark_id>0 && quark_id<6) {
87 double pigaga = -0.010449239475366825 - 0.0023228196282246765*
log(q2)- 0.0288 - 0.002980*(
log(q2/8464.)+0.006307*(q2/8464.-1.));
88 return (1./137.0359895) / (1.+pigaga);
94 double sin2eff = 0.232;
96 double vl = -0.5 + 2.*sin2eff;
102 double alphaW = 2.7e-3 *
pow(
log(Q*Q/80.4/80.4),2);
103 double alphaZ = 2.7e-3 *
pow(
log(Q*Q/MZ/MZ),2);
104 double sudakov_factor = 1.;
105 if (
abs(quark_id)%2==1) {
107 vq = -0.5 - 2.*qq*sin2eff;
109 sudakov_factor = 1 + (-2.139 + 0.864)*alphaW - 0.385*alphaZ;
112 vq = 0.5 - 2.*qq*sin2eff;
114 sudakov_factor = 1 + (-3.423 + 1.807)*alphaW - 0.557*alphaZ;
118 double zcoupl =
sqrt(2.) * 1.166389e-5 * MZ*MZ / 4. /
M_PI;
119 double gll = zcoupl * MZ/3. * (vl*vl + al*al);
120 double gdd = zcoupl * MZ/3. * (vq*vq + aq*aq);
121 double denom = (Q*Q-MZ*
MZ)*(Q*Q-MZ*MZ)+
pow(Q,4)*GZ*GZ/MZ/
MZ;
122 double qed =
M_PI * qq*qq * alfarn*alfarn / Q/Q;
123 double zint = rho * 2*
M_PI * zcoupl * alfarn * qq * vq*vl * (Q*Q-MZ*
MZ) / denom;
124 double zonly = rho * rho * 9.*
M_PI * gll * gdd / MZ/MZ * Q*Q / denom;
126 return (qed + zint + zonly) * sudakov_factor;
virtual int pdgId() const
PDG identifier.
#define DEFINE_FWK_MODULE(type)
virtual int status() const
status word
virtual void produce(edm::Event &, const edm::EventSetup &)
double sigma0_qqbarll(unsigned int quark_type, double Q, double rho)
virtual double mass() const
mass
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
virtual size_t numberOfMothers() const
number of mothers
virtual ~WeakEffectsWeightProducer()
double alphaQED(double q2)
edm::InputTag genParticlesTag_
daughters::value_type motherRef(size_type i=0) const
reference to mother at given position
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Log< T >::type log(const T &t)
Power< A, B >::type pow(const A &a, const B &b)
WeakEffectsWeightProducer(const edm::ParameterSet &pset)