20 using namespace genie;
21 using namespace genie::constants;
31 TComplex rat = fmw2c/fmz2c;
32 fsw2 = TComplex(1.-rat.Re(),-rat.Im());
34 falpha = TMath::Sqrt(2.)*
kGF/
kPi * fmw2c * fsw2;
36 fgae = -1./2. + 2.*fsw2;
61 TComplex prop = falpha/fsw2/(s-fmw2c);
63 return (t-mlout*mlout)*(t-mlin*mlin) * prop.Rho2();
70 TComplex prop = falpha/fsw2/(t-fmw2c);
72 return (s-mlout*mlout)*(s-mlin*mlin) * prop.Rho2();
79 double u = GetU(mlin,mlout,s,t);
81 TComplex
a = fgav*(fgae-fgbe)/(u-fmz2c)/fcw2/fsw2;
82 TComplex
b = fgav*(fgae+fgbe)/(u-fmz2c)/fcw2/fsw2 + 1./(s-fmw2c)/fsw2;
83 return falpha.Rho2() * ( (t-mlout*mlout)*(t-mlin*mlin)*b.Rho2() + (s-mlout*mlout)*(s-mlin*mlin)*a.Rho2() );
90 double u = GetU(mlin,mlout,s,t);
92 TComplex
a = fgav*(fgae+fgbe)/(u-fmz2c)/fcw2/fsw2 + 1./(t-fmw2c)/fsw2;
93 TComplex
b = fgav*(fgae-fgbe)/(u-fmz2c)/fcw2/fsw2;
94 return falpha.Rho2() * ( (t-mlout*mlout)*(t-mlin*mlin)*b.Rho2() + (s-mlout*mlout)*(s-mlin*mlin)*a.Rho2() );
101 double u = GetU(mlin,mlout,s,t);
103 TComplex
a = fgav*(fgae+fgbe)/(u-fmz2c)/fcw2/fsw2;
104 TComplex
b = fgav*(fgae-fgbe)/(u-fmz2c)/fcw2/fsw2;
105 return falpha.Rho2() * ( (t-mlout*mlout)*(t-mlin*mlin)*b.Rho2() + (s-mlout*mlout)*(s-mlin*mlin)*a.Rho2() );
112 double u = GetU(mlin,mlout,s,t);
114 TComplex
a = fgav*(fgae-fgbe)/(u-fmz2c)/fcw2/fsw2;
115 TComplex
b = fgav*(fgae+fgbe)/(u-fmz2c)/fcw2;
116 return falpha.Rho2() * ( (t-mlout*mlout)*(t-mlin*mlin)*b.Rho2()/fsw2.Rho2() + (s-mlout*mlout)*(s-mlin*mlin)*a.Rho2() );
123 double u =
kMw2 + mlout2 - s - t;
125 double ME = 8*
kPi2*falpha.Rho2()*s/
kMw2/fsw2.Re()/TMath::Power(mlout2 - t,2)/TMath::Power(
kMw2 - u,2)*
126 ( -2*(
kMw2 - u)*TMath::Power(mlout2,3) - 2*TMath::Power(mlout2,2)*(-2*
kMw2*u + u*(s + u) + TMath::Power(
kMw2,2))
127 + mlout2*(-(
kMw2*u*(4*s + 5*u)) + (s + u)*TMath::Power(
kMw2,2) + 3*TMath::Power(
kMw2,3) + (s + u)*TMath::Power(u,2))
128 + 2*
kMw2*((3*s + u)*TMath::Power(
kMw2,2) - TMath::Power(
kMw2,3) + 4*u*TMath::Power(s,2) + 2*TMath::Power(s,3) + 3*s*TMath::Power(u,2)
129 + TMath::Power(u,3) -
kMw2*TMath::Power(2*s + u,2)) );
131 return TMath::Max(0.,ME);
138 ME2 = (4*falpha.Rho2()*
kPi2*(TMath::Power(ml2,4)*s12*(2*TMath::Power(
kMw2,2)*TMath::Power(s12,2) - 2*
kMw2*Q2*s12*s13 + TMath::Power(Q2,2)*s13*(-s12 + s13)) +
139 TMath::Power(ml2,3)*(-2*TMath::Power(
kMw2,3)*TMath::Power(s12,3) + TMath::Power(Q2,2)*(s12 - s13)*s13*(-(Q2*s12) + TMath::Power(s12,2) + Q2*s13 - 3*s12*s13) +
140 2*TMath::Power(
kMw2,2)*TMath::Power(s12,2)*(3*Q2*s12 - 2*TMath::Power(s12,2) + 2*Q2*s13 + s12*s13) +
141 kMw2*Q2*s12*(Q2*TMath::Power(s12,2) - Q2*TMath::Power(s13,2) - 2*s12*TMath::Power(s13,2))) +
142 TMath::Power(ml2,2)*(-6*TMath::Power(
kMw2,4)*TMath::Power(s12,3) + 2*
kMw2*Q2*
143 (-(Q2*s12*(s12 - 3*s13)) + TMath::Power(Q2,2)*(s12 - s13) + TMath::Power(s12,2)*(s12 - s13))*(s12 - s13)*s13 +
144 TMath::Power(Q2,2)*(s12 - s13)*TMath::Power(s13,2)*(-2*Q2*s12 + 2*TMath::Power(s12,2) + 2*Q2*s13 - 3*s12*s13) +
145 2*TMath::Power(
kMw2,3)*TMath::Power(s12,2)*(2*TMath::Power(s12,2) - 3*Q2*(2*s12 + s13)) +
146 TMath::Power(
kMw2,2)*s12*(2*TMath::Power(s12,2)*TMath::Power(s12 - s13,2) + TMath::Power(Q2,2)*(s12 - s13)*s13 -
147 2*Q2*s12*(TMath::Power(s12,2) - 8*s12*s13 - 2*TMath::Power(s13,2)))) -
148 2*TMath::Power(
kMw2,2)*TMath::Power(s12,2)*(2*TMath::Power(
kMw2,4)*s12 + TMath::Power(Q2,2)*TMath::Power(s13,2)*(-s12 + s13) -
149 2*TMath::Power(
kMw2,3)*(2*TMath::Power(s12,2) - Q2*s13 + s12*s13) +
150 TMath::Power(
kMw2,2)*(4*Q2*s12*(s12 - 2*s13) + TMath::Power(Q2,2)*(-s12 + s13) + 2*s12*TMath::Power(s12 + s13,2)) +
151 2*
kMw2*s13*(TMath::Power(Q2,2)*(s12 - s13) - s12*(TMath::Power(s12,2) + TMath::Power(s13,2)) + Q2*(-TMath::Power(s12,2) + 2*s12*s13 + TMath::Power(s13,2)))) +
152 ml2*(10*TMath::Power(
kMw2,5)*TMath::Power(s12,3) - TMath::Power(Q2,2)*(Q2 - s12)*TMath::Power(s12 - s13,2)*TMath::Power(s13,3) +
153 2*TMath::Power(
kMw2,4)*TMath::Power(s12,2)*(3*Q2*s12 - 4*TMath::Power(s12,2) + 4*Q2*s13 - 3*s12*s13) +
154 kMw2*Q2*(s12 - s13)*TMath::Power(s13,2)*(2*TMath::Power(Q2,2)*(s12 - s13) + 2*TMath::Power(s12,2)*(s12 - s13) + Q2*s12*(-3*s12 + 5*s13)) +
155 TMath::Power(
kMw2,3)*s12*(2*Q2*s12*(5*TMath::Power(s12,2) - 16*s12*s13 - TMath::Power(s13,2)) +
156 TMath::Power(Q2,2)*(-3*TMath::Power(s12,2) + 2*s12*s13 + TMath::Power(s13,2)) + 2*TMath::Power(s12,2)*(TMath::Power(s12,2) + 6*s12*s13 + TMath::Power(s13,2))) -
157 TMath::Power(
kMw2,2)*s13*(TMath::Power(Q2,3)*TMath::Power(s12 - s13,2) - 2*TMath::Power(s12,3)*TMath::Power(s12 - s13,2) +
158 TMath::Power(Q2,2)*s12*(-5*TMath::Power(s12,2) + 8*s12*s13 - 3*TMath::Power(s13,2)) +
159 2*Q2*TMath::Power(s12,2)*(3*TMath::Power(s12,2) - 9*s12*s13 + 2*TMath::Power(s13,2))))))/(TMath::Power(
kMw2,3)*TMath::Power(s12,2)*TMath::Power(ml2 -
kMw2 + s13,2)*TMath::Power(ml2 -
kMw2 - s12 + s13,2)*fsw2.Re());
160 return TMath::Max(0.,ME2);
166 ME2 = 2*falpha.Rho2()*Q2*TMath::Power(
kMw2,-3)*
kPi2*TMath::Power(s12,-2)*TMath::Power(ml2 -
kMw2 + s13,-2)*TMath::Power(ml2 -
kMw2 - s12 + s13,-2)*
167 ((s12 - s13)*TMath::Power(ml2,5)*TMath::Power(s12,2) - 2*s12*TMath::Power(ml2,4)*(2*
kMw2*TMath::Power(s12,2) - (Q2 - s12)*(-3*s12*s13 + TMath::Power(s12,2) + 2*TMath::Power(s13,2))) +
168 TMath::Power(ml2,3)*(-2*(s12 - s13)*TMath::Power(
kMw2,2)*TMath::Power(s12,2) +
169 2*
kMw2*s12*(Q2*(9*s12*s13 - 5*TMath::Power(s12,2) - 2*TMath::Power(s13,2)) + s12*(-11*s12*s13 + 3*TMath::Power(s12,2) + 4*TMath::Power(s13,2))) +
170 (s12 - s13)*(TMath::Power(Q2,2)*TMath::Power(s12 - 2*s13,2) + TMath::Power(s12,2)*(-6*s12*s13 + TMath::Power(s12,2) + 6*TMath::Power(s13,2)) -
171 2*Q2*s12*(-5*s12*s13 + TMath::Power(s12,2) + 6*TMath::Power(s13,2)))) +
172 2*TMath::Power(ml2,2)*(4*(2*s12 - s13)*TMath::Power(
kMw2,3)*TMath::Power(s12,2) +
173 (Q2 - s12)*s13*(Q2*(s12 - 2*s13) + s12*(-s12 + s13))*(-3*s12*s13 + TMath::Power(s12,2) + 2*TMath::Power(s13,2)) +
174 s12*TMath::Power(
kMw2,2)*(Q2*(-11*s12*s13 + 7*TMath::Power(s12,2) - 2*TMath::Power(s13,2)) + s12*(15*s12*s13 - 11*TMath::Power(s12,2) + 2*TMath::Power(s13,2))) -
175 kMw2*((s12 - s13)*TMath::Power(Q2,2)*TMath::Power(s12 - 2*s13,2) + TMath::Power(s12,2)*(-11*s13*TMath::Power(s12,2) + TMath::Power(s12,3) + 20*s12*TMath::Power(s13,2) - 8*TMath::Power(s13,3)) -
176 2*Q2*s12*(-10*s13*TMath::Power(s12,2) + TMath::Power(s12,3) + 17*s12*TMath::Power(s13,2) - 6*TMath::Power(s13,3)))) +
177 4*TMath::Power(
kMw2,2)*TMath::Power(s12,2)*(-(s13*(Q2 - 7*s12 + 4*s13)*TMath::Power(
kMw2,2)) + (s12 - 2*s13)*TMath::Power(
kMw2,3) +
kMw2*(2*Q2 - s12 - 2*s13)*TMath::Power(s13,2) +
178 (-Q2 + s12)*TMath::Power(s13,3)) + ml2*(-15*(s12 - s13)*TMath::Power(
kMw2,4)*TMath::Power(s12,2) +
179 2*s12*TMath::Power(
kMw2,3)*(Q2*(7*s12*s13 - 3*TMath::Power(s12,2) + 2*TMath::Power(s13,2)) + s12*(-21*s12*s13 + 9*TMath::Power(s12,2) + 4*TMath::Power(s13,2))) +
180 TMath::Power(
kMw2,2)*((s12 - s13)*TMath::Power(Q2,2)*TMath::Power(s12 - 2*s13,2) +
181 TMath::Power(s12,2)*(-31*s13*TMath::Power(s12,2) + TMath::Power(s12,3) + 60*s12*TMath::Power(s13,2) - 14*TMath::Power(s13,3)) -
182 2*Q2*s12*(-14*s13*TMath::Power(s12,2) + TMath::Power(s12,3) + 27*s12*TMath::Power(s13,2) - 6*TMath::Power(s13,3))) -
183 2*
kMw2*s13*((s12 - s13)*TMath::Power(Q2,2)*TMath::Power(s12 - 2*s13,2) +
184 TMath::Power(s12,2)*(-8*s13*TMath::Power(s12,2) + TMath::Power(s12,3) + 11*s12*TMath::Power(s13,2) - 4*TMath::Power(s13,3)) +
185 Q2*s12*(15*s13*TMath::Power(s12,2) - 2*TMath::Power(s12,3) - 25*s12*TMath::Power(s13,2) + 10*TMath::Power(s13,3))) +
186 (s12 - s13)*TMath::Power(s13,2)*TMath::Power(Q2*(s12 - 2*s13) + s12*(-s12 + s13),2)))/fsw2.Re();
187 return TMath::Max(0.,ME2);
192 return a*a + b*b + c*c - 2*a*b - 2*a*c - 2*b*c;
197 return 2. * mlin * Enuin + mlin*mlin;
200 double Born::GetT(
double mlin,
double mlout,
double s,
double costhCM)
203 double sum = mlin*mlin+mlout*mlout;
204 return ( (TMath::Sqrt(Lambda(s,0.,mlin*mlin)*Lambda(s,mlout*mlout,0.))*costhCM+mlin*mlin*mlout*mlout)/s + sum - s ) /2.;
209 return mlin*mlin+mlout*mlout-s-t;
216 double frac = Enuout/Enuin;
217 if ( frac < mlin/(mlin+2.*Enuin)+(mlout*mlout-mlin*mlin)/2./Enuin/(mlin+2.*Enuin) )
return false;
218 else if ( frac > 1.-(mlout*mlout-mlin*mlin)/2./Enuin/mlin )
return false;
double GetT(double mlin, double mlout, double s, double costhCM)
double Q2(const Interaction *const i)
double PXSecPhoton_T(double s12, double s13, double Q2, double ml2)
static constexpr double s
double PXSecNCVnubar(double s, double t, double mlin, double mlout)
bool IsInPhaseSpace(double mlin, double mlout, double Enuin, double Enuout)
static constexpr double b
double PXSecCCVNC(double s, double t, double mlin, double mlout)
double Lambda(double a, double b, double c)
double PXSecPhoton_L(double s12, double s13, double Q2, double ml2)
double PXSecCCR(double s, double t, double mlin, double mlout)
double GetS(double mlin, double Enuin)
double PXSecCCRNC(double s, double t, double mlin, double mlout)
static PDGLibrary * Instance(void)
double PXSecCCV(double s, double t, double mlin, double mlout)
double PXSecPhoton(double s, double t, double mlout2)
TParticlePDG * Find(int pdgc, bool must_exist=true)
double PXSecNCVnu(double s, double t, double mlin, double mlout)
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
double GetU(double mlin, double mlout, double s, double t)