35 #include "Framework/Conventions/GBuild.h"
55 using namespace genie;
56 using namespace genie::constants;
82 const InitialState & init_state = interaction -> InitState();
83 const ProcessInfo & proc_info = interaction -> ProcInfo();
87 const Kinematics & kinematics = interaction -> Kine();
88 double W = kinematics.
W();
89 double q2 = kinematics.
q2();
90 double costh = kinematics.
FSLeptonP4().CosTheta();
95 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
97 <<
"RES/DIS Join Scheme: XSec[RES, W=" << W
98 <<
" >= Wcut=" <<
fWcut <<
"] = 0";
111 int probepdgc = init_state.
ProbePdg();
120 bool is_EM = proc_info.
IsEM();
122 if(is_CC && !is_delta) {
123 if((is_nu && is_p) || (is_nubar && is_n))
return 0;
145 double W2 = TMath::Power(W, 2);
146 double Mnuc2 = TMath::Power(Mnuc, 2);
147 double k = 0.5 * (W2 - Mnuc2)/Mnuc;
148 double v = k - 0.5 * q2/Mnuc;
149 double v2 = TMath::Power(v, 2);
151 double Q = TMath::Sqrt(Q2);
152 double Eprime = E - v;
153 double U = 0.5 * (E + Eprime + Q) / E;
154 double V = 0.5 * (E + Eprime - Q) / E;
155 double U2 = TMath::Power(U, 2);
156 double V2 = TMath::Power(V, 2);
164 if(
fKLN && is_CC) is_KLN=
true;
167 if(
fBRS && is_CC) is_BRS=
true;
170 double Pl = TMath::Sqrt(Eprime*Eprime - ml*ml);
172 double vstar = (Mnuc*v + q2)/W;
173 double Qstar = TMath::Sqrt(-q2 + vstar*vstar);
174 double sqrtq2 = TMath::Sqrt(-q2);
175 double a = 1. + 0.5*(W2-q2+Mnuc2)/Mnuc/W;
177 double KNL_Alambda_plus = 0;
178 double KNL_Alambda_minus = 0;
179 double KNL_j0_plus = 0;
180 double KNL_j0_minus = 0;
181 double KNL_jx_plus = 0;
182 double KNL_jx_minus = 0;
183 double KNL_jy_plus = 0;
184 double KNL_jy_minus = 0;
185 double KNL_jz_plus = 0;
186 double KNL_jz_minus = 0;
187 double KNL_Qstar_plus =0;
188 double KNL_Qstar_minus =0;
190 double KNL_K = Q/E/TMath::Sqrt(2*(-q2));
192 double KNL_cL_plus = 0;
193 double KNL_cL_minus = 0;
195 double KNL_cR_plus = 0;
196 double KNL_cR_minus = 0;
198 double KNL_cS_plus = 0;
199 double KNL_cS_minus = 0;
201 double KNL_vstar_plus = 0;
202 double KNL_vstar_minus = 0;
204 if(is_CC && (is_KLN || is_BRS)){
206 LOG(
"BSKLNBaseRESPXSec2014",
pINFO)
"costh1="<<costh;
207 costh = (q2 - ml*ml + 2.*E*Eprime)/2./E/Pl;
209 LOG(
"BSKLNBaseRESPXSec2014",
pINFO)
"q2="<<q2<<
"m2="<<ml*ml<<
" 2.*E*Eprime="<<2.*E*Eprime<<
" nom="<< (q2 - ml*ml + 2.*E*Eprime)<<
" den="<<2.*E*Pl;
210 LOG(
"BSKLNBaseRESPXSec2014",
pINFO)
"costh2="<<costh;
212 KNL_Alambda_plus = TMath::Sqrt(E*(Eprime - Pl));
213 KNL_Alambda_minus = TMath::Sqrt(E*(Eprime + Pl));
215 <<
"\n+++++++++++++++++++++++ \n"
216 <<
"E="<<E <<
" K= "<<KNL_K <<
"\n"
217 <<
"El="<<Eprime<<
" Pl="<<Pl<<
" ml="<<ml <<
"\n"
218 <<
"W="<<W<<
" Q="<<Q<<
" q2="<<q2 <<
"\n"
219 <<
"A-="<<KNL_Alambda_minus<<
" A+="<<KNL_Alambda_plus <<
"\n"
220 <<
"xxxxxxxxxxxxxxxxxxxxxxx";
222 KNL_j0_plus = KNL_Alambda_plus /W * TMath::Sqrt(1 - costh) * (Mnuc - Eprime - Pl);
223 KNL_j0_minus = KNL_Alambda_minus/W * TMath::Sqrt(1 + costh) * (Mnuc - Eprime + Pl);
225 KNL_jx_plus = KNL_Alambda_plus/ Q * TMath::Sqrt(1 + costh) * (Pl - E);
226 KNL_jx_minus = KNL_Alambda_minus/Q * TMath::Sqrt(1 - costh) * (Pl + E);
228 KNL_jy_plus = KNL_Alambda_plus * TMath::Sqrt(1 + costh);
229 KNL_jy_minus = -KNL_Alambda_minus * TMath::Sqrt(1 - costh);
231 KNL_jz_plus = KNL_Alambda_plus /W/Q * TMath::Sqrt(1 - costh) * ( (E + Pl)*(Mnuc -Eprime) + Pl*( E + 2*E*costh -Pl) );
232 KNL_jz_minus = KNL_Alambda_minus/W/Q * TMath::Sqrt(1 + costh) * ( (E - Pl)*(Mnuc -Eprime) + Pl*( -E + 2*E*costh -Pl) );
234 if (is_nu || is_lminus) {
235 KNL_Qstar_plus = sqrtq2 * KNL_j0_plus / TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
236 KNL_Qstar_minus = sqrtq2 * KNL_j0_minus / TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
239 else if (is_nubar || is_lplus){
240 KNL_Qstar_plus = sqrtq2 * KNL_j0_minus / TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
241 KNL_Qstar_minus = sqrtq2 * KNL_j0_plus / TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
244 if (is_nu || is_lminus) {
245 KNL_vstar_plus = sqrtq2 * KNL_jz_plus / TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
246 KNL_vstar_minus = sqrtq2 * KNL_jz_minus / TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
248 else if (is_nubar || is_lplus) {
249 KNL_vstar_minus = sqrtq2 * KNL_jz_plus / TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
250 KNL_vstar_plus = sqrtq2 * KNL_jz_minus / TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
253 if(is_nu || is_lminus){
254 KNL_cL_plus = TMath::Sqrt(0.5)* KNL_K * (KNL_jx_plus - KNL_jy_plus);
255 KNL_cL_minus = TMath::Sqrt(0.5)* KNL_K * (KNL_jx_minus - KNL_jy_minus);
257 KNL_cR_plus = TMath::Sqrt(0.5)* KNL_K * (KNL_jx_plus + KNL_jy_plus);
258 KNL_cR_minus = TMath::Sqrt(0.5)* KNL_K * (KNL_jx_minus + KNL_jy_minus);
260 KNL_cS_plus = KNL_K * TMath::Sqrt(TMath::Abs(KNL_j0_plus *KNL_j0_plus - KNL_jz_plus *KNL_jz_plus ) );
261 KNL_cS_minus = KNL_K * TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
264 if (is_nubar || is_lplus) {
265 KNL_cL_plus = 1 * TMath::Sqrt(0.5)* KNL_K * (KNL_jx_minus + KNL_jy_minus);
266 KNL_cL_minus = -1 * TMath::Sqrt(0.5)* KNL_K * (KNL_jx_plus + KNL_jy_plus);
268 KNL_cR_plus = 1 * TMath::Sqrt(0.5)* KNL_K * (KNL_jx_minus - KNL_jy_minus);
269 KNL_cR_minus = -1 * TMath::Sqrt(0.5)* KNL_K * (KNL_jx_plus - KNL_jy_plus);
271 KNL_cS_plus = -1 * KNL_K * TMath::Sqrt(TMath::Abs(KNL_j0_minus*KNL_j0_minus - KNL_jz_minus*KNL_jz_minus) );
272 KNL_cS_minus = 1 * KNL_K * TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
276 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"j0-="<<KNL_j0_minus<<
" j0+="<<KNL_j0_plus;
277 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"jx-="<<KNL_jx_minus<<
" jx+="<<KNL_jx_plus;
278 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"jy-="<<KNL_jy_minus<<
" jy+="<<KNL_jy_plus;
279 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"jz-="<<KNL_jz_minus<<
" jz+="<<KNL_jz_plus;
281 LOG(
"BSKLNBaseRESPXSec2014",
pINFO)
"sqrt2="<<sqrtq2<<
" jz+=:"<<KNL_jz_plus<<
" j0+="<<KNL_j0_plus<<
" denom="<<TMath::Sqrt(TMath::Abs(KNL_j0_plus*KNL_j0_plus - KNL_jz_plus*KNL_jz_plus) );
283 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"vstar-="<<KNL_vstar_minus<<
" vstar+="<<KNL_vstar_plus;
284 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"Qstar-="<<KNL_Qstar_minus<<
" Qstar+="<<KNL_Qstar_plus;
286 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
288 <<
"Kinematical params V = " << V <<
", U = " << U;
292 double Go = TMath::Power( 1 - 0.25 * q2 / Mnuc2, 0.5 - IR ) ;
295 if( is_EM ) Go = TMath::Power( 1 - 0.25 * q2 / W2, 0.5*(1-IR) ) ;
297 double GV = Go * TMath::Power( 1./(1-q2/
fMv2), 2);
298 double GA = Go * TMath::Power( 1./(1-q2/
fMa2), 2);
302 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"Using new GV tuned to ANL and BNL data";
304 double CV0 = 1./(1-q2/
fMv2/4.);
305 double CV3 =
fCv3 * CV0 * TMath::Power( 1-q2/
fMv2,-2);
306 double CV4 = -1. *
fCv4 * CV0 * TMath::Power( 1-q2/
fMv2,-2);
307 double CV5 =
fCv51* CV0 * TMath::Power( 1-q2/
fMv2/fCv52, -2);
309 double GV3 = 0.5 / TMath::Sqrt(3) * ( CV3 * (W + Mnuc)/Mnuc
310 + CV4 * (W2 + q2 -Mnuc2)/2./Mnuc2
311 + CV5 * (W2 - q2 -Mnuc2)/2./Mnuc2 );
313 double GV1 = - 0.5 / TMath::Sqrt(3) * ( CV3 * (Mnuc2 -q2 +Mnuc*
W)/W/Mnuc
314 + CV4 * (W2 +q2 - Mnuc2)/2./Mnuc2
315 + CV5 * (W2 -q2 - Mnuc2)/2./Mnuc2 );
317 GV = 0.5 * TMath::Power( 1 - q2/(Mnuc + W)/(Mnuc + W), 0.5-IR)
318 * TMath::Sqrt( 3 * GV3*GV3 + GV1*GV1);
320 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"GV= " <<GV <<
" CV3= " <<CV3 <<
" CV4= " << CV4 <<
" CV5= " << CV5 <<
" GV3= " << GV3 <<
" GV1= " <<GV1;
323 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"Using GV Sarita-Schwinger model";
324 double CV0 = 1./(1-q2/
fMv2/4.);
325 double CV3 =
fCv3 * CV0 * TMath::Power( 1-q2/
fMv2,-2);
326 double CV4 = -1. *
fCv4 * CV0 * TMath::Power( 1-q2/
fMv2,-2);
329 double GV3 = 0.5 / TMath::Sqrt(3) * ( CV3 * (W + Mnuc)/Mnuc
330 + CV4 * (W2 + q2 -Mnuc2)/2./Mnuc2
331 + CV5 * (W2 - q2 -Mnuc2)/2./Mnuc2 );
333 double GV1 = - 0.5 / TMath::Sqrt(3) * ( CV3 * (Mnuc2 -q2 +Mnuc*
W)/W/Mnuc
334 + CV4 * (W2 +q2 - Mnuc2)/2./Mnuc2
335 + CV5 * (W2 -q2 - Mnuc2)/2./Mnuc2 );
337 GV = 0.5 * TMath::Power( 1 - q2/(Mnuc + W)/(Mnuc + Mnuc), -IR);
339 if( is_EM ) GV = 0.5 * TMath::Power( 1 - q2/(Mnuc + W)/(Mnuc + W), -0.5*IR);
340 GV *= TMath::Sqrt( 3 * GV3*GV3 + GV1*GV1);
343 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG <<
"Using dipole parametrization for GV") ;
347 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"Using new GA tuned to ANL and BNL data";
349 double CA5 =
fCa50 * TMath::Power( 1./(1-q2/
fMa2), 2);
351 GA = 0.5 * TMath::Sqrt(3.) * TMath::Power( 1 - q2/(Mnuc + W)/(Mnuc + W), 0.5-IR) * (1- (W2 +q2 -Mnuc2)/8./Mnuc2) * CA5;
352 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"GA= " <<GA <<
" CA50= " <<
fCa50 <<
" C5A= " <<CA5;
355 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"Using GA Rarita-Schwinger model";
357 double CA5 =
fCa50 * TMath::Power( 1./(1-q2/
fMa2), 2) * ( 1./(1 -
fcII * q2/
fMb2) );
358 GA = 0.5 * TMath::Sqrt(3.) * TMath::Power( 1 - q2/(Mnuc + W)/(Mnuc + W), 0.5) * TMath::Power( 1 - q2/(4*Mnuc2), -IR) * (1- (W2 +q2 -Mnuc2)/8./Mnuc2) * CA5;
360 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"GA= " <<GA <<
" C5A= " <<CA5;
363 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG <<
"Using dipole parametrization for GA") ;
370 double d = TMath::Power(W+Mnuc,2.) - q2;
371 double sq2omg = TMath::Sqrt(2./
fOmega);
372 double nomg = IR *
fOmega;
373 double mq_w = Mnuc*Q/
W;
376 fFKR.
Tv = GV / (3.*W*sq2omg);
378 fFKR.
S = (-q2/
Q2) * (3*W*Mnuc + q2 - Mnuc2) * GV / (6*Mnuc2);
379 fFKR.
Ta = (2./3.) * (
fZeta/sq2omg) * mq_w * GA / d;
381 fFKR.
B =
fZeta/(3.*W*sq2omg) * (1 + (W2-Mnuc2+q2)/ d) * GA;
382 fFKR.
C =
fZeta/(6.*Q) * (W2 - Mnuc2 + nomg*(W2-Mnuc2+q2)/d) * (GA/Mnuc);
391 double KNL_S_plus = 0;
392 double KNL_S_minus = 0;
393 double KNL_B_plus = 0;
394 double KNL_B_minus = 0;
395 double KNL_C_plus = 0;
396 double KNL_C_minus = 0;
399 KNL_S_plus = (KNL_vstar_plus*vstar - KNL_Qstar_plus *Qstar )* (Mnuc2 -q2 - 3*W*Mnuc ) * GV / (6*Mnuc2)/Q2;
400 KNL_S_minus = (KNL_vstar_minus*vstar - KNL_Qstar_minus*Qstar )* (Mnuc2 -q2 - 3*W*Mnuc ) * GV / (6*Mnuc2)/Q2;
402 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"KNL S= " <<KNL_S_plus<<
"\t"<<KNL_S_minus<<
"\t"<<
fFKR.
S;
404 KNL_B_plus =
fZeta/(3.*W*sq2omg)/Qstar * (KNL_Qstar_plus + KNL_vstar_plus *Qstar/a/Mnuc ) * GA;
405 KNL_B_minus =
fZeta/(3.*W*sq2omg)/Qstar * (KNL_Qstar_minus + KNL_vstar_minus*Qstar/a/Mnuc ) * GA;
406 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"KNL B= " <<KNL_B_plus<<
"\t"<<KNL_B_minus<<
"\t"<<
fFKR.
B;
408 KNL_C_plus = ( (KNL_Qstar_plus*Qstar - KNL_vstar_plus*vstar ) * ( 1./3. + vstar/a/Mnuc)
409 + KNL_vstar_plus*(2./3.*W +q2/a/Mnuc + nomg/3./a/Mnuc) )*
fZeta * (GA/2./W/Qstar);
411 KNL_C_minus = ( (KNL_Qstar_minus*Qstar - KNL_vstar_minus*vstar ) * ( 1./3. + vstar/a/Mnuc)
412 + KNL_vstar_minus*(2./3.*W +q2/a/Mnuc + nomg/3./a/Mnuc) )*
fZeta * (GA/2./W/Qstar);
414 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"KNL C= "<<KNL_C_plus<<
"\t"<<KNL_C_minus<<
"\t"<<
fFKR.
C;
416 double BRS_S_plus = 0;
417 double BRS_S_minus = 0;
418 double BRS_B_plus = 0;
419 double BRS_B_minus = 0;
420 double BRS_C_plus = 0;
421 double BRS_C_minus = 0;
426 KNL_S_plus = (KNL_vstar_plus*vstar - KNL_Qstar_plus *Qstar )* (Mnuc2 -q2 - 3*W*Mnuc ) * GV / (6*Mnuc2)/Q2;
427 KNL_S_minus = (KNL_vstar_minus*vstar - KNL_Qstar_minus*Qstar )* (Mnuc2 -q2 - 3*W*Mnuc ) * GV / (6*Mnuc2)/Q2;
430 KNL_B_plus =
fZeta/(3.*W*sq2omg)/Qstar * (KNL_Qstar_plus + KNL_vstar_plus *Qstar/a/Mnuc ) * GA;
431 KNL_B_minus =
fZeta/(3.*W*sq2omg)/Qstar * (KNL_Qstar_minus + KNL_vstar_minus*Qstar/a/Mnuc ) * GA;
434 KNL_C_plus = ( (KNL_Qstar_plus*Qstar - KNL_vstar_plus*vstar ) * ( 1./3. + vstar/a/Mnuc)
435 + KNL_vstar_plus*(2./3.*W +q2/a/Mnuc + nomg/3./a/Mnuc) )*
fZeta * (GA/2./W/Qstar);
437 KNL_C_minus = ( (KNL_Qstar_minus*Qstar - KNL_vstar_minus*vstar ) * ( 1./3. + vstar/a/Mnuc)
438 + KNL_vstar_minus*(2./3.*W +q2/a/Mnuc + nomg/3./a/Mnuc) )*
fZeta * (GA/2./W/Qstar);
440 BRS_S_plus = KNL_S_plus;
441 BRS_S_minus = KNL_S_minus;
442 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"BRS S= " <<KNL_S_plus<<
"\t"<<KNL_S_minus<<
"\t"<<
fFKR.
S;
444 BRS_B_plus = KNL_B_plus +
fZeta*GA/2./W/Qstar*( KNL_Qstar_plus*vstar - KNL_vstar_plus*Qstar)
445 *( 2./3 /sq2omg *(vstar + Qstar*Qstar/Mnuc/a))/(
kPionMass2 -q2);
447 BRS_B_minus = KNL_B_minus +
fZeta*GA/2./W/Qstar*( KNL_Qstar_minus*vstar - KNL_vstar_minus*Qstar)
448 *( 2./3 /sq2omg *(vstar + Qstar*Qstar/Mnuc/a))/(
kPionMass2 -q2);
449 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"BRS B= " <<KNL_B_plus<<
"\t"<<KNL_B_minus<<
"\t"<<
fFKR.
B;
451 BRS_C_plus = KNL_C_plus +
fZeta*GA/2./W/Qstar*( KNL_Qstar_plus*vstar - KNL_vstar_plus*Qstar)
452 * Qstar*(2./3.*W +q2/Mnuc/a +nomg/3./a/Mnuc)/(
kPionMass2 -q2);
454 BRS_C_minus = KNL_C_minus +
fZeta*GA/2./W/Qstar*( KNL_Qstar_minus*vstar - KNL_vstar_minus*Qstar)
455 * Qstar*(2./3.*W +q2/Mnuc/a +nomg/3./a/Mnuc)/(
kPionMass2 -q2);
456 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"BRS C= " <<KNL_C_plus<<
"\t"<<KNL_C_minus<<
"\t"<<
fFKR.
C;
459 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
461 <<
"FKR params for RES = " << resname <<
" : " <<
fFKR;
465 double sigL_minus = 0;
466 double sigR_minus = 0;
467 double sigS_minus = 0;
469 double sigL_plus = 0;
470 double sigR_plus = 0;
471 double sigS_plus = 0;
481 if(is_CC) g2 *=
fVud2;
489 double sig0 = 0.125*(g2/
kPi)*(-q2/Q2)*(W/Mnuc);
490 double scLR = W/Mnuc;
491 double scS = (Mnuc/
W)*(-Q2/q2);
501 if(is_CC && !(is_KLN || is_BRS) ) {
516 if(is_CC && is_KLN ){
517 fFKR.S = KNL_S_minus;
518 fFKR.B = KNL_B_minus;
519 fFKR.C = KNL_C_minus;
523 assert(hamplmod_KNL_minus);
536 assert(hamplmod_KNL_plus);
546 if(is_CC && is_BRS ){
547 fFKR.S = BRS_S_minus;
548 fFKR.B = BRS_B_minus;
549 fFKR.C = BRS_C_minus;
552 assert(hamplmod_BRS_minus);
564 assert(hamplmod_BRS_plus);
574 if(is_KLN || is_BRS) {
584 <<
"sL,R,S minus = " << sigL_minus <<
"," << sigR_minus <<
"," << sigS_minus;
586 <<
"sL,R,S plus = " << sigL_plus <<
"," << sigR_plus <<
"," << sigS_plus;
598 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
599 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"sig_{0} = " << sig0;
600 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"sig_{L} = " << sigL;
601 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"sig_{R} = " << sigR;
602 LOG(
"BSKLNBaseRESPXSec2014",
pDEBUG) <<
"sig_{S} = " << sigS;
607 if(is_KLN || is_BRS) {
608 xsec = TMath::Power(KNL_cL_minus,2)*sigL_minus + TMath::Power(KNL_cL_plus,2)*sigL_plus
609 + TMath::Power(KNL_cR_minus,2)*sigR_minus + TMath::Power(KNL_cR_plus,2)*sigR_plus
610 + TMath::Power(KNL_cS_minus,2)*sigS_minus + TMath::Power(KNL_cS_plus,2)*sigS_plus;
613 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"A-="<<KNL_Alambda_minus<<
" A+="<<KNL_Alambda_plus;
615 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<q2<<
"\t"<<xsec<<
"\t"<<sig0*(V2*sigR + U2*sigL + 2*UV*sigS)<<
"\t"<<xsec/TMath::Max(sig0*(V2*sigRSR + U2*sigRSL + 2*UV*sigRSS),1.0e-100);
616 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"fFKR.B="<<fFKR.B<<
" fFKR.C="<<fFKR.C<<
" fFKR.S="<<fFKR.S;
617 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"CL-="<<TMath::Power(KNL_cL_minus,2)<<
" CL+="<<TMath::Power(KNL_cL_plus,2)<<
" U2="<<U2;
618 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"SL-="<<sigL_minus<<
" SL+="<<sigL_plus<<
" SL="<<sigRSL;
620 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"CR-="<<TMath::Power(KNL_cR_minus,2)<<
" CR+="<<TMath::Power(KNL_cR_plus,2)<<
" V2="<<V2;
621 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"SR-="<<sigR_minus<<
" SR+="<<sigR_plus<<
" sR="<<sigRSR;
623 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"CS-="<<TMath::Power(KNL_cS_minus,2)<<
" CS+="<<TMath::Power(KNL_cS_plus,2)<<
" UV="<<UV;
624 LOG(
"BSKLNBaseRESPXSec2014",
pINFO) <<
"SS-="<<sigL_minus<<
" SS+="<<sigS_plus<<
" sS="<<sigRSS;
627 if (is_nu || is_lminus) {
628 xsec = sig0*(V2*sigR + U2*sigL + 2*UV*sigS);
631 if (is_nubar || is_lplus) {
632 xsec = sig0*(U2*sigR + V2*sigL + 2*UV*sigS);
634 xsec = TMath::Max(0.,xsec);
637 if ( is_CC && is_delta ) {
638 if ( (is_nu && is_p) || (is_nubar && is_n) ) mult=3.0;
648 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
650 <<
"BreitWigner(RES=" << resname <<
", W=" << W <<
") = " << bw;
654 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
656 <<
"\n d2xsec/dQ2dW" <<
"[" << interaction->
AsString()
657 <<
"](W=" << W <<
", q2=" << q2 <<
", E=" << E <<
") = " << xsec;
680 int NNucl = (is_p) ? Z : N;
699 double P_Fermi = 0.0;
713 if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
714 else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
717 double FactorPauli_RES = 1.0;
719 double k0 = 0., q = 0., q0 = 0.;
723 k0 = (W2-Mnuc2-
Q2)/(2*W);
724 k = TMath::Sqrt(k0*k0+Q2);
728 if ( 2*P_Fermi < k-q )
729 FactorPauli_RES = 1.0;
730 if ( 2*P_Fermi >= k+q )
731 FactorPauli_RES = ((3*k*k+q*q)/(2*P_Fermi)-(5*TMath::Power(k,4)+TMath::Power(q,4)+10*k*k*q*q)/(40*TMath::Power(P_Fermi,3)))/(2*k);
732 if ( 2*P_Fermi >= k-q && 2*P_Fermi <= k+q )
733 FactorPauli_RES = ((q+k)*(q+k)-4*P_Fermi*P_Fermi/5-TMath::Power(k-q, 3)/(2*P_Fermi)+TMath::Power(k-q, 5)/(40*TMath::Power(P_Fermi, 3)))/(4*q*k);
736 xsec *= FactorPauli_RES;
761 if (!is_pn)
return false;
764 bool is_weak = proc_info.
IsWeak();
765 bool is_em = proc_info.
IsEM();
769 if (!nu_weak && !l_em)
return false;
802 double fermi_constant ;
803 this->
GetParam(
"FermiConstant", fermi_constant ) ;
807 this->
GetParam(
"FineStructureConstant", alpha ) ;
813 fMa2 = TMath::Power(ma,2);
814 fMv2 = TMath::Power(mv,2);
826 fMb2 = TMath::Power(mb,2);
832 fVud2 = TMath::Power( Vud, 2 );
848 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelCC",
"Default"));
850 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCp",
"Default"));
852 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCn",
"Default"));
854 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMp",
"Default"));
856 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMn",
"Default"));
bool IsDelta(Resonance_t res)
is it a Delta resonance?
bool IsResonant(void) const
bool fNormBW
normalize resonance breit-wigner to 1?
Cross Section Calculation Interface.
string fKFTable
table of Fermi momentum (kF) constants for various nuclei
double fOmega
FKR parameter Omega.
double W(bool selected=false) const
void Configure(const Registry &config)
bool IsWeakCC(void) const
static const double kSqrt2
bool IsNeutrino(int pdgc)
double fMv2
(vector mass)^2
bool fUsingDisResJoin
use a DIS/RES joining scheme?
double fXSecScaleNC
external NC xsec scaling factor
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
int HitNucPdg(void) const
virtual ~BSKLNBaseRESPXSec2014()
double Amp2Plus3(void) const
double Amp2Minus3(void) const
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const =0
bool KnownResonance(void) const
double HitNucMass(void) const
double fN0ResMaxNWidths
limits allowed phase space for n=0 res
static FermiMomentumTablePool * Instance(void)
Generated/set kinematical variables for an event.
bool IsChargedLepton(int pdgc)
double Mass(Resonance_t res)
resonance mass (GeV)
A table of Fermi momentum constants.
double Width(Resonance_t res)
resonance width (GeV)
double Amp2Plus1(void) const
double Amp2Minus1(void) const
return |helicity amplitude|^2
double BreitWignerL(double W, int L, double mass, double width0, double norm)
enum genie::EKinePhaseSpace KinePhaseSpace_t
double BWNorm(Resonance_t res, double N0ResMaxNWidths=6, double N2ResMaxNWidths=2, double GnResMaxNWidths=4)
breit-wigner normalization factor
enum genie::EResonance Resonance_t
const RSHelicityAmplModelI * fHAmplModelEMp
string AsString(void) const
Contains minimal information for tagging exclusive processes.
const RSHelicityAmplModelI * fHAmplModelCC
double W(const Interaction *const i)
double fVud2
|Vud|^2(square of magnitude ud-element of CKM-matrix)
bool IsPosChargedLepton(int pdgc)
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double q2(bool selected=false) const
A class holding the Rein-Sehgal's helicity amplitudes.
bool IsWeakNC(void) const
const TLorentzVector & FSLeptonP4(void) const
Singleton class to load & serve tables of Fermi momentum constants.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool fWghtBW
weight with resonance breit-wigner?
static constexpr double A
const FermiMomentumTable * GetTable(string name)
static const double kAem2
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
static constexpr double mb
bool IsAntiNeutrino(int pdgc)
double fXSecScaleCC
external CC xsec scaling factor
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const Algorithm * GetAlgorithm(const AlgId &algid)
bool fUsePauliBlocking
account for Pauli blocking?
double fWcut
apply DIS/RES joining scheme < Wcut
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
const RSHelicityAmplModelI * fHAmplModelEMn
Pure abstract base class. Defines the RSHelicityAmplModelI interface.
Resonance_t Resonance(void) const
double fMa2
(axial mass)^2
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
double Amp20Minus(void) const
bool IsNeutralLepton(int pdgc)
double fGnResMaxNWidths
limits allowed phase space for other res
double FermiMomentumForIsoscalarNucleonParametrization(const Target &target)
bool fUseRFGParametrization
use parametrization for fermi momentum insted of table?
const RSHelicityAmplModelI * fHAmplModelNCp
double Integral(const Interaction *i) const
BSKLNBaseRESPXSec2014(string name)
static AlgFactory * Instance()
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
const XclsTag & ExclTag(void) const
int IonPdgCode(int A, int Z)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double Amp20Plus(void) const
const InitialState & InitState(void) const
const char * AsString(Resonance_t res)
resonance id -> string
const ProcessInfo & ProcInfo(void) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double FindClosestKF(int target_pdgc, int nucleon_pdgc) const
const RSHelicityAmplModelI * fHAmplModelNCn
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
The GENIE Algorithm Factory.
double fN2ResMaxNWidths
limits allowed phase space for n=2 res
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double fZeta
FKR parameter Zeta.
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
bool IsNegChargedLepton(int pdgc)
const XSecIntegratorI * fXSecIntegrator
double fXSecScaleEM
external EM xsec scaling factor
const UInt_t kISkipProcessChk
if set, skip process validity checks
int ResonanceIndex(Resonance_t res)
resonance idx, quark model / SU(6)
Initial State information.
static const double kPionMass2
const Algorithm * SubAlg(const RgKey ®istry_key) const