15 #include <TDecayChannel.h> 19 #include "Framework/Conventions/GBuild.h" 30 using namespace genie;
55 const std::array<std::array<double, 3>, 7> &fBR = !isDeuterium?
fBRp:
fBRD;
69 double Mpi2 = Mpi*Mpi;
70 double Meta2 = Meta*
Meta;
75 double k = (W2 - Mp2)/2./Mp;
77 double kcm = (W2 - Mp2)/2./W;
79 double Epicm = (W2 + Mpi2 - Mp2)/2./W;
80 double ppicm = TMath::Sqrt(TMath::Max(0.0, Epicm*Epicm - Mpi2));
81 double Epi2cm = (W2 + 4*Mpi2 - Mp2)/2./W;
82 double ppi2cm = TMath::Sqrt(TMath::Max(0.0, Epi2cm*Epi2cm - 4*Mpi2));
83 double Eetacm = (W2 + Meta2 - Mp2 )/2./W;
84 double petacm = TMath::Sqrt(TMath::Max(0.0, Eetacm*Eetacm - Meta2));
94 double x0 = i!=0?0.215:!isDeuterium?0.14462:0.1446;
96 double kr = (MassRes2-Mp2)/2./Mp;
98 double kcmr = (MassRes2-Mp2)/2./fMassRes[i];
101 double Epicmr = (MassRes2 + Mpi2 - Mp2)/2./fMassRes[i];
102 double ppicmr = TMath::Sqrt(TMath::Max(0.0, Epicmr*Epicmr - Mpi2));
103 double Epi2cmr = (MassRes2 + 4.*Mpi2 - Mp2)/2./fMassRes[i];
104 double ppi2cmr = TMath::Sqrt(TMath::Max(0.0, Epi2cmr*Epi2cmr - 4.*Mpi2));
105 double Eetacmr = (MassRes2 + Meta2 - Mp2)/2./fMassRes[i];
106 double petacmr = TMath::Sqrt(TMath::Max(0.0, Eetacmr*Eetacmr - Meta2));
111 TMath::Power((ppicmr*ppicmr + x0*x0)/(ppicm*ppicm+x0*x0),
fAngRes[i]);
114 if (!isDeuterium || (isDeuterium && i!=1))
115 pwid1 = W/fMassRes[i]*
fWidthRes[i]*TMath::Power(ppi2cm/ppi2cmr, 4.+2.*
fAngRes[i])*
116 TMath::Power((ppi2cmr*ppi2cmr + x0*x0)/(ppi2cm*ppi2cm + x0*x0), 2.+
fAngRes[i]);
118 pwid1 =
fWidthRes[i]*TMath::Power(petacm/petacmr, 1.+2.*
fAngRes[i])*TMath::Power((ppi2cmr*ppi2cmr + x0*x0)/(ppi2cm*ppi2cm + x0*x0),
fAngRes[i]);
123 if(!isDeuterium && (i==1 || i==4))
124 pwid2 =
fWidthRes[i]*TMath::Power(petacm/petacmr, 1.+2.*
fAngRes[i])*TMath::Power((petacmr*petacmr + x0*x0)/(petacm*petacm + x0*x0),
fAngRes[i]);
127 double pgam =
fWidthRes[i]*(kcm/kcmr)*(kcm/kcmr)*(kcmr*kcmr+x0*x0)/(kcm*kcm+x0*x0);
129 double width = fBR[i][0]*pwid0+fBR[i][1]*pwid1+fBR[i][2]*pwid2;
136 A = fRescoefT[i][0]*(1.+fRescoefT[i][1]*Q2/(1.+fRescoefT[i][2]*
Q2))/TMath::Power(1.+Q2/0.91, fRescoefT[i][3]);
143 double BW = kr/k*kcmr/kcm/
fWidthRes[i]*width*pgam/((W2 - MassRes2)*(W2 - MassRes2) + MassRes2*width*width);
157 const std::array<std::array<double, 5>, 2> &fNRcoefT = !isDeuterium?
fNRcoefTp:
fNRcoefTD;
165 double Wdif = W - (Mp + Mpi);
168 double Q20 = sf==0?0.05:0.125;
169 double xpr = 1./(1.+(W2-(Mp+Mpi)*(Mp+Mpi))/(Q2+Q20));
177 for (
int i=0;i<2;i++)
179 double h_nr = fNRcoefT[i][0]/TMath::Power(Q2+fNRcoefT[i][1], fNRcoefT[i][2]+fNRcoefT[i][3]*Q2+fNRcoefT[i][4]*Q2*Q2);
180 xsec += h_nr*TMath::Power(Wdif, 1.5+i);
187 double xb = Q2/(Q2+W2-Mp2);
188 double t = TMath::Log(TMath::Log((Q2+m0)/0.330/0.330)/TMath::Log(m0/0.330/0.330));
201 static constexpr std::array<double, 99> fyp
202 {0.0272,0.0326,0.0390,0.0464,0.0551,0.0651,0.0766,0.0898,0.1049,
203 0.1221,0.1416,0.1636,0.1883,0.2159,0.2466,0.2807,0.3182,0.3595,
204 0.4045,0.4535,0.5066,0.5637,0.6249,0.6901,0.7593,0.8324,0.9090,
205 0.9890,1.0720,1.1577,1.2454,1.3349,1.4254,1.5163,1.6070,1.6968,
206 1.7849,1.8705,1.9529,2.0313,2.1049,2.1731,2.2350,2.2901,2.3379,
207 2.3776,2.4090,2.4317,2.4454,2.4500,2.4454,2.4317,2.4090,2.3776,
208 2.3379,2.2901,2.2350,2.1731,2.1049,2.0313,1.9529,1.8705,1.7849,
209 1.6968,1.6070,1.5163,1.4254,1.3349,1.2454,1.1577,1.0720,0.9890,
210 0.9090,0.8324,0.7593,0.6901,0.6249,0.5637,0.5066,0.4535,0.4045,
211 0.3595,0.3182,0.2807,0.2466,0.2159,0.1883,0.1636,0.1416,0.1221,
212 0.1049,0.0898,0.0766,0.0651,0.0551,0.0464,0.0390,0.0326,0.0272};
214 static constexpr std::array<double, 99> xxp
215 {-3.000,-2.939,-2.878,-2.816,-2.755,-2.694,-2.633,-2.571,-2.510,
216 -2.449,-2.388,-2.327,-2.265,-2.204,-2.143,-2.082,-2.020,-1.959,
217 -1.898,-1.837,-1.776,-1.714,-1.653,-1.592,-1.531,-1.469,-1.408,
218 -1.347,-1.286,-1.224,-1.163,-1.102,-1.041,-0.980,-0.918,-0.857,
219 -0.796,-0.735,-0.673,-0.612,-0.551,-0.490,-0.429,-0.367,-0.306,
220 -0.245,-0.184,-0.122,-0.061, 0.000, 0.061, 0.122, 0.184, 0.245,
221 0.306, 0.367, 0.429, 0.490, 0.551, 0.612, 0.673, 0.735, 0.796,
222 0.857, 0.918, 0.980, 1.041, 1.102, 1.163, 1.224, 1.286, 1.347,
223 1.408, 1.469, 1.531, 1.592, 1.653, 1.714, 1.776, 1.837, 1.898,
224 1.959, 2.020, 2.082, 2.143, 2.204, 2.265, 2.327, 2.388, 2.449,
225 2.510, 2.571, 2.633, 2.694, 2.755, 2.816, 2.878, 2.939, 3.000};
233 double nu = (W2 - MN2 +
Q2)/2./MN;
234 double qv = TMath::Sqrt(nu*nu + Q2);
236 double dW2dpF = 2.*qv;
237 double dW2dEs = 2.*(nu + MN);
240 for (
int i=0; i<100; i++)
242 double fyuse = fyp[i+1]/100.;
243 double W2p = W2 + xxp[i+1]*pF*dW2dpF - Es*dW2dEs;
247 double Wp = TMath::Sqrt(W2p);
250 double F1pp = sigmaTp*(W2p-Mp2)/8./
kPi2/
kAem;
252 double sigmaTd =
sigmaR(0, Q2, Wp,
true) +
sigmaNR(0, Q2, Wp,
true);
253 double F1dp = sigmaTd*(W2p-Mp2)/8./
kPi2/
kAem;
256 sigmaT += sigmaTp*fyuse;
257 sigmaL += sigmaLp*fyuse;
268 static constexpr std::array<double, 20> fyd
269 {0.4965, 0.4988, 0.4958, 0.5008, 0.5027, 0.5041, 0.5029, 0.5034,
270 0.4993, 0.5147, 0.5140, 0.4975, 0.5007, 0.4992, 0.4994, 0.4977,
271 0.5023, 0.4964, 0.4966, 0.4767};
273 static constexpr std::array<double, 20> avpz
274 {-0.1820,-0.0829,-0.0590,-0.0448,-0.0345,-0.0264,-0.0195, -0.0135,
275 -0.0079,-0.0025, 0.0029, 0.0083, 0.0139, 0.0199, 0.0268, 0.0349,
276 0.0453, 0.0598, 0.0844, 0.1853};
278 static constexpr std::array<double, 20> avp2
279 {0.0938, 0.0219, 0.0137, 0.0101, 0.0081, 0.0068, 0.0060, 0.0054,
280 0.0051, 0.0049, 0.0050, 0.0051, 0.0055, 0.0060, 0.0069, 0.0081,
281 0.0102, 0.0140, 0.0225, 0.0964};
284 static constexpr std::array<double, 200> fydf
285 {0.00001,0.00002,0.00003,0.00005,0.00006,0.00009,0.00010,0.00013,
286 0.00015,0.00019,0.00021,0.00026,0.00029,0.00034,0.00038,0.00044,
287 0.00049,0.00057,0.00062,0.00071,0.00078,0.00089,0.00097,0.00109,
288 0.00119,0.00134,0.00146,0.00161,0.00176,0.00195,0.00211,0.00232,
289 0.00252,0.00276,0.00299,0.00326,0.00352,0.00383,0.00412,0.00447,
290 0.00482,0.00521,0.00560,0.00603,0.00648,0.00698,0.00747,0.00803,
291 0.00859,0.00921,0.00985,0.01056,0.01126,0.01205,0.01286,0.01376,
292 0.01467,0.01569,0.01671,0.01793,0.01912,0.02049,0.02196,0.02356,
293 0.02525,0.02723,0.02939,0.03179,0.03453,0.03764,0.04116,0.04533,
294 0.05004,0.05565,0.06232,0.07015,0.07965,0.09093,0.10486,0.12185,
295 0.14268,0.16860,0.20074,0.24129,0.29201,0.35713,0.44012,0.54757,
296 0.68665,0.86965,1.11199,1.43242,1.86532,2.44703,3.22681,4.24972,
297 5.54382,7.04016,8.48123,9.40627,9.40627,8.48123,7.04016,5.54382,
298 4.24972,3.22681,2.44703,1.86532,1.43242,1.11199,0.86965,0.68665,
299 0.54757,0.44012,0.35713,0.29201,0.24129,0.20074,0.16860,0.14268,
300 0.12185,0.10486,0.09093,0.07965,0.07015,0.06232,0.05565,0.05004,
301 0.04533,0.04116,0.03764,0.03453,0.03179,0.02939,0.02723,0.02525,
302 0.02356,0.02196,0.02049,0.01912,0.01793,0.01671,0.01569,0.01467,
303 0.01376,0.01286,0.01205,0.01126,0.01056,0.00985,0.00921,0.00859,
304 0.00803,0.00747,0.00698,0.00648,0.00603,0.00560,0.00521,0.00482,
305 0.00447,0.00412,0.00383,0.00352,0.00326,0.00299,0.00276,0.00252,
306 0.00232,0.00211,0.00195,0.00176,0.00161,0.00146,0.00134,0.00119,
307 0.00109,0.00097,0.00089,0.00078,0.00071,0.00062,0.00057,0.00049,
308 0.00044,0.00038,0.00034,0.00029,0.00026,0.00021,0.00019,0.00015,
309 0.00013,0.00010,0.00009,0.00006,0.00005,0.00003,0.00002,0.00001};
311 static constexpr std::array<double, 200> avp2f
312 {1.0,0.98974,0.96975,0.96768,0.94782,0.94450,0.92494,0.92047,
313 0.90090,0.89563,0.87644,0.87018,0.85145,0.84434,0.82593,0.81841,
314 0.80021,0.79212,0.77444,0.76553,0.74866,0.73945,0.72264,0.71343,
315 0.69703,0.68740,0.67149,0.66182,0.64631,0.63630,0.62125,0.61154,
316 0.59671,0.58686,0.57241,0.56283,0.54866,0.53889,0.52528,0.51581,
317 0.50236,0.49291,0.47997,0.47063,0.45803,0.44867,0.43665,0.42744,
318 0.41554,0.40656,0.39511,0.38589,0.37488,0.36611,0.35516,0.34647,
319 0.33571,0.32704,0.31656,0.30783,0.29741,0.28870,0.27820,0.26945,
320 0.25898,0.25010,0.23945,0.23023,0.21943,0.20999,0.19891,0.18911,
321 0.17795,0.16793,0.15669,0.14667,0.13553,0.12569,0.11504,0.10550,
322 0.09557,0.08674,0.07774,0.06974,0.06184,0.05484,0.04802,0.04203,
323 0.03629,0.03129,0.02654,0.02247,0.01867,0.01545,0.01251,0.01015,
324 0.00810,0.00664,0.00541,0.00512,0.00512,0.00541,0.00664,0.00810,
325 0.01015,0.01251,0.01545,0.01867,0.02247,0.02654,0.03129,0.03629,
326 0.04203,0.04802,0.05484,0.06184,0.06974,0.07774,0.08674,0.09557,
327 0.10550,0.11504,0.12569,0.13553,0.14667,0.15669,0.16793,0.17795,
328 0.18911,0.19891,0.20999,0.21943,0.23023,0.23945,0.25010,0.25898,
329 0.26945,0.27820,0.28870,0.29741,0.30783,0.31656,0.32704,0.33571,
330 0.34647,0.35516,0.36611,0.37488,0.38589,0.39511,0.40656,0.41554,
331 0.42744,0.43665,0.44867,0.45803,0.47063,0.47997,0.49291,0.50236,
332 0.51581,0.52528,0.53889,0.54866,0.56283,0.57241,0.58686,0.59671,
333 0.61154,0.62125,0.63630,0.64631,0.66182,0.67149,0.68740,0.69703,
334 0.71343,0.72264,0.73945,0.74866,0.76553,0.77444,0.79212,0.80021,
335 0.81841,0.82593,0.84434,0.85145,0.87018,0.87644,0.89563,0.90090,
336 0.92047,0.92494,0.94450,0.94782,0.96768,0.96975,0.98974,1.0};
344 double nu = (W2 - MN2 +
Q2)/2./MN;
345 double qv = TMath::Sqrt(nu*nu + Q2);
353 for (
int ism = 0; ism<20; ism++)
355 double W2p = TMath::Power(MD + nu - sqrt(MN2 + avp2[ism]),2) - qv*qv + 2.*qv*avpz[ism] - avp2[ism];
358 double Wp = TMath::Sqrt(W2p);
359 double sigtp =
sigmaR(0, Q2, Wp, isDeuterium) +
sigmaNR(0, Q2, Wp, isDeuterium);
360 double F1p = sigtp*(W2p-Mp2)/8./
kPi2/
kAem;
361 F1 += F1p*fyd[ism]/10.;
365 sigmaL += siglp*fyd[ism]/10.;
366 sigmaT += sigtp*fyd[ism]/10.;
373 for (
int ism = 0;ism<200;ism++)
375 double pz = -1. + 0.01*(ism + 0.5);
377 double W2p = TMath::Power(MD + nu - sqrt(MN2 + avp2f[ism]),2) - qv*qv + 2.*qv*pz - avp2f[ism];
380 double Wp = TMath::Sqrt(W2p);
381 double sigtp =
sigmaR(0, Q2, Wp, isDeuterium) +
sigmaNR(0, Q2, Wp, isDeuterium);
382 double F1p = sigtp*(W2p-Mp2)/8./
kPi2/
kAem;
383 F1 += F1p*fydf[ism]/100.;
387 sigmaT += sigtp*fydf[ism]/100.;
388 sigmaL += siglp*fydf[ism]/100.;
397 if(!isDeuterium && sigmaT!=0.)
410 double nu = (W2 - Mp2 +
Q2)/2./Mp;
411 double x = Q2/2.0/Mp/nu;
441 const Kinematics & kinematics = interaction -> Kine();
442 const InitialState & init_state = interaction -> InitState();
447 double W = kinematics.
W();
448 double Q2 = kinematics.
Q2();
457 double nu = (W2 - MN2 +
Q2)/2./MN;
458 double x = Q2/2./MN/nu;
460 double sigmaT, sigmaL, F1p,
R, W1;
464 double xb = Q2/(W2+Q2-Mp2);
474 double F1d = sigmaT*(W2-Mp2)/8./
kPi2/
kAem;
515 W1 = (2.*Z*F1d + (A - 2.*
Z)*(2.*F1d - F1p))/MN;
522 double F1M =
MEC2009(A, Q2, W);
529 double emcfac =
FitEMC(x, A);
531 double F1 = MN*W1*emcfac;
534 double K = (W2 - MN2)/2./MN;
535 double Eprime = E - nu;
536 double sin2theta_2 = Q2/4/E/Eprime;
537 double cos2theta_2 = 1 - sin2theta_2;
538 double tan2theta_2 = sin2theta_2/cos2theta_2;
539 double eps = 1./(1. + 2*(1+nu2/
Q2)*tan2theta_2);
540 double Gamma =
kAem*Eprime*K/Q2/E/(1-eps)/2/
kPi2;
543 double xsec = Gamma*(sigmaT+eps*sigmaL);
544 double jacobian = W*
kPi/E/Eprime/MN;
588 if (x>0.70 || x<0.0085)
599 double ln_c =
fEMCc[0];
600 for (
int i = 1; i<=2; i++)
601 ln_c +=
fEMCc[i]*TMath::Power(TMath::Log(x_u), i);
602 double c = TMath::Exp(ln_c);
605 for (
int i = 1; i<=8; i++)
606 alpha +=
fEMCalpha[i]*TMath::Power(x_u, i);
608 fitemc = c*TMath::Power(A, alpha);
631 if (!is_pn)
return false;
634 bool is_em = proc_info.
IsEM();
638 if (!l_em)
return false;
645 const Kinematics & kinematics = interaction -> Kine();
646 double W = kinematics.
W();
647 double Q2 = kinematics.
Q2();
648 if (W<fWmin || W>
fWmax)
650 if (Q2<fQ2min || Q2>
fQ2max)
673 TParticlePDG * res_pdg = pdglib->
Find(respdg);
676 for (
int nch = 0; nch < res_pdg->NDecayChannels(); nch++)
678 TDecayChannel * ch = res_pdg->DecayChannel(nch);
679 if (ch->NDaughters() == 2)
681 int first_daughter_pdg = ch->DaughterPdgCode (0);
682 int second_daughter_pdg = ch->DaughterPdgCode (1);
685 brpi += ch->BranchingRatio();
686 if (first_daughter_pdg ==
kPdgEta || second_daughter_pdg ==
kPdgEta)
687 breta += ch->BranchingRatio();
712 std::vector<double> vBRpi1;
713 std::vector<double> vBRpi2;
714 std::vector<double> vBReta;
717 bool useBRpi1Default = (
GetParamVect(
"BostedChristyFitEM-PionBRp", vBRpi1,
false)<7);
718 bool useBRpi2Default = (
GetParamVect(
"BostedChristyFitEM-PionBRD", vBRpi2,
false)<7);
720 bool useBRetaDefault = (
GetParamVect(
"BostedChristyFitEM-EtaBR", vBReta,
false)<7);
722 if (useBRpi1Default || useBRpi2Default || useBRetaDefault)
842 if (!useBRpi1Default)
844 for (
int i=0; i<7; i++)
845 fBRp[i][0] = vBRpi1[i];
846 if (!useBRpi2Default)
848 for (
int i=0; i<7; i++)
849 fBRD[i][0] = vBRpi2[i];
850 if (!useBRetaDefault)
852 for (
int i=0; i<7; i++)
853 fBRp[i][2] = vBReta[i];
855 for (
int i=0; i<7; i++)
858 if (useBRpi1Default || useBRpi2Default)
859 LOG(
"BostedChristyEMPXSec",
pALERT) <<
"*** Use branching ratios for pion decay from PDG table";
862 LOG(
"BostedChristyEMPXSec",
pALERT) <<
"*** Use branching ratios for eta decay from PDG table";
865 for (
int i=0;i<7;i++)
880 std::vector<double> vResMass;
882 bool useResMassDefault = (
GetParamVect(
"BostedChristyFitEM-ResMass", vResMass,
false)<7);
884 if (useResMassDefault)
886 LOG(
"BostedChristyEMPXSec",
pALERT) <<
"*** Use resonance masses from PDG table";
898 for (
int i=0; i<7; i++)
901 std::vector<double> vResWidth;
903 bool useResWidthDefault = (
GetParamVect(
"BostedChristyFitEM-ResWidth", vResWidth,
false)<7);
905 if (useResWidthDefault)
907 LOG(
"BostedChristyEMPXSec",
pALERT) <<
"*** Use resonance widths from PDG table";
919 for (
int i=0; i<7; i++)
924 std::vector<double> vRescoef;
926 bool isOk = (
GetParamVect(
"BostedChristyFitEM-ResAT0p", vRescoef)>=length);
929 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton AT(0)-parameters for xsec^R_T in the config file!";
933 for (
int i=0;i<length;i++)
937 isOk = (
GetParamVect(
"BostedChristyFitEM-Resap", vRescoef)>=length);
940 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton a-parameters for xsec^R_T in the config file!";
944 for (
int i=0;i<length;i++)
948 isOk = (
GetParamVect(
"BostedChristyFitEM-Resbp", vRescoef)>=length);
951 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton b-parameters parameters for xsec^R_T in the config file!";
955 for (
int i=0;i<length;i++)
959 isOk = (
GetParamVect(
"BostedChristyFitEM-Rescp", vRescoef)>=length);
962 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton c-parameters parameters for xsec^R_T in the config file!";
966 for (
int i=0;i<length;i++)
970 isOk = (
GetParamVect(
"BostedChristyFitEM-ResAT0D", vRescoef)>=length);
973 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium AT(0)-parameters for xsec^R_T in the config file!";
977 for (
int i=0;i<length;i++)
981 isOk = (
GetParamVect(
"BostedChristyFitEM-ResaD", vRescoef)>=length);
984 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium a-parameters for xsec^R_T in the config file!";
988 for (
int i=0;i<length;i++)
992 isOk = (
GetParamVect(
"BostedChristyFitEM-ResbD", vRescoef)>=length);
995 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium b-parameters parameters for xsec^R_T in the config file!";
999 for (
int i=0;i<length;i++)
1003 isOk = (
GetParamVect(
"BostedChristyFitEM-RescD", vRescoef)>=length);
1006 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium c-parameters parameters for xsec^R_T in the config file!";
1010 for (
int i=0;i<length;i++)
1014 isOk = (
GetParamVect(
"BostedChristyFitEM-ResAL0", vRescoef)>=length);
1017 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton AL0-parameters parameters for xsec^R_T in the config file!";
1021 for (
int i=0;i<length;i++)
1025 isOk = (
GetParamVect(
"BostedChristyFitEM-Resd", vRescoef)>=length);
1028 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton d-parameters parameters for xsec^R_L in the config file!";
1032 for (
int i=0;i<length;i++)
1036 isOk = (
GetParamVect(
"BostedChristyFitEM-Rese", vRescoef)>=length);
1039 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton e-parameters parameters for xsec^R_L in the config file!";
1043 for (
int i=0;i<length;i++)
1047 std::vector<double> vNRcoef;
1049 isOk = (
GetParamVect(
"BostedChristyFitEM-NRXSecT1p", vNRcoef)>=length);
1052 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton bkg parameters for xsec^NR_T in the config file!";
1056 for (
int i=0;i<length;i++)
1060 isOk = (
GetParamVect(
"BostedChristyFitEM-NRXSecT2p", vNRcoef)>=length);
1063 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton bkg parameters for xsec^NR_T in the config file!";
1067 for (
int i=0;i<length;i++)
1071 isOk = (
GetParamVect(
"BostedChristyFitEM-NRXSecT1D", vNRcoef)>=length);
1074 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium bkg parameters for xsec^NR_T in the config file!";
1078 for (
int i=0;i<length;i++)
1082 isOk = (
GetParamVect(
"BostedChristyFitEM-NRXSecT2D", vNRcoef)>=length);
1085 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough deuterium bkg parameters for xsec^NR_T in the config file!";
1089 for (
int i=0;i<length;i++)
1093 isOk = (
GetParamVect(
"BostedChristyFitEM-NRXSecL", vNRcoef)>=length);
1096 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough proton bkg parameters for xsec^NR_L in the config file!";
1100 for (
int i=0;i<length;i++)
1104 isOk = (
GetParamVect(
"BostedChristyFitEM-MEC", vNRcoef)>=length);
1107 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough parameters for MEC in the config file!";
1110 for (
int i=0;i<length;i++)
1114 isOk = (
GetParamVect(
"BostedChristyFitEM-MEC2009", vNRcoef)>=length);
1117 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough parameters for MEC2009 in the config file!";
1120 for (
int i=0;i<length;i++)
1124 isOk = (
GetParamVect(
"BostedChristyFitEM-Afit", vNRcoef)>=length);
1127 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough parameters for nuclei fit (A-fit) in the config file!";
1130 for (
int i=0;i<length;i++)
1135 isOk = (
GetParamVect(
"BostedChristyFitEM-EMCalpha", vNRcoef)>=length);
1138 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough alpha coefficients for EMC correction in the config file!";
1141 for (
int i=0;i<length;i++)
1145 isOk = (
GetParamVect(
"BostedChristyFitEM-EMCc", vNRcoef)>=length);
1148 LOG(
"BostedChristyEMPXSec",
pFATAL) <<
"*** Can't find enough c coefficients for EMC correction in the config file!";
1151 for (
int i=0;i<length;i++)
1152 fEMCc[i] = vNRcoef[i];
1155 std::string keyStart =
"BostedChristy-SeparationE@Pdg=";
1162 if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1164 pdg = atoi(key.c_str() + keyStart.size());
1167 if (0 != pdg && A != 0)
1169 std::ostringstream key_ss ;
1170 key_ss << keyStart <<
pdg;
1171 RgKey rgkey = key_ss.str();
1174 eb = TMath::Max(eb, 0.);
1175 fNucRmvE.insert(map<int,double>::value_type(A,eb));
1179 keyStart =
"BostedChristy-FermiMomentum@Pdg=";
1185 if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1187 pdg = atoi(key.c_str() + keyStart.size());
1190 if (0 != pdg && A != 0)
1192 std::ostringstream key_ss ;
1193 key_ss << keyStart <<
pdg;
1194 RgKey rgkey = key_ss.str();
1197 pf = TMath::Max(pf, 0.);
1198 fKFTable.insert(map<int,double>::value_type(A,pf));
1202 keyStart =
"BostedChristy-p18@Pdg=";
1208 if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1210 pdg = atoi(key.c_str() + keyStart.size());
1213 if (0 != pdg && A != 0)
1215 std::ostringstream key_ss ;
1216 key_ss << keyStart <<
pdg;
1217 RgKey rgkey = key_ss.str();
1220 fMEC2009p18.insert(map<int,double>::value_type(A,p18));
std::array< double, 7 > fMassRes
resonance mass
bool IsResonant(void) const
Cross Section Calculation Interface.
const int kPdgP33m1232_DeltaPP
double W(bool selected=false) const
void Configure(const Registry &config)
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
std::array< std::array< double, 4 >, 7 > fRescoefTp
tunable parameters from Ref.1, Table III for resonance
double Q2(const Interaction *const i)
int HitNucPdg(void) const
double Integral(const Interaction *i) const
std::array< std::array< double, 5 >, 2 > fNRcoefTp
tunable parameters from Ref.1, Table III for nonres bkg
std::array< double, 9 > fEMCalpha
tunable parameters for EMC fit
const int kPdgF15m1680_NP
double sigmaR(int, double, double, bool) const
std::array< double, 8 > fMEC2009coef
tunable parameters for MEC2009 function
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
int IonPdgCodeToA(int pdgc)
Generated/set kinematical variables for an event.
bool IsChargedLepton(int pdgc)
std::array< double, 3 > fEMCc
tunable parameters for EMC fit
double Mass(Resonance_t res)
resonance mass (GeV)
map< int, double > fKFTable
virtual ~BostedChristyEMPXSec()
const int kPdgS11m1650_N0
std::array< std::array< double, 3 >, 7 > fBRD
branching ratios of resonances for deterium fit
double Width(Resonance_t res)
resonance width (GeV)
const int kPdgF37m1950_DeltaM
const int kPdgF37m1950_DeltaP
enum genie::EKinePhaseSpace KinePhaseSpace_t
static constexpr double ub
const int kPdgS11m1535_N0
virtual const Registry & GetConfig(void) const
std::array< double, 6 > fMECcoef
tunable parameters for Eqs.(20), (21) Ref.2
const int kPdgP33m1232_DeltaP
const int kPdgP33m1232_DeltaM
void FermiSmearingA(double, double, double, double, double &, double &, double &, double &) const
map< int, double > fNucRmvE
Summary information for an interaction.
std::array< double, 13 > fAfitcoef
tunable parameters for nuclei fit
const int kPdgF37m1950_Delta0
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
const RgIMap & GetItemMap(void) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
void BranchingRatios(int, double &, double &) const
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
const int kPdgF37m1950_DeltaPP
std::array< std::array< double, 3 >, 7 > fBRp
branching ratios of resonances for proton fit
const int kPdgD13m1520_NP
const int kPdgF15m1680_N0
std::array< double, 7 > fWidthRes
resonance width
const int kPdgS11m1650_NP
Resonance_t FromPdgCode(int pdgc)
PDG code -> resonance id.
const int kPdgP33m1232_Delta0
const int kPdgP11m1440_N0
std::array< std::array< double, 5 >, 2 > fNRcoefTD
tunable parameters from Ref.1, Table IV for nonres bkg
const int kPdgD13m1520_N0
const XSecIntegratorI * fXSecIntegrator
const int kPdgP11m1440_NP
static PDGLibrary * Instance(void)
bool fUseMEC
account for MEC contribution?
Singleton class to load & serve a TDatabasePDG.
A registry. Provides the container for algorithm configuration parameters.
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
std::array< std::array< double, 4 >, 7 > fRescoefTD
tunable parameters from Ref.2, Table III for resonance
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double FitEMC(double, int) const
std::array< double, 6 > fNRcoefL
tunable parameters from Ref.1, Table III for nonres bkg
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
TParticlePDG * Find(int pdgc, bool must_exist=true)
std::array< int, 7 > fAngRes
resonance angular momentum
double MEC2009(int, double, double) const
double Q2(bool selected=false) const
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
void FermiSmearingD(double, double, double &, double &, double &, double &, bool) const
const int kPdgS11m1535_NP
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
const int kPdgTgtDeuterium
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
std::array< std::array< double, 3 >, 7 > fRescoefL
tunable parameters from Ref.1, Table III for resonance
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
Root of GENIE utility namespaces.
const UInt_t kISkipProcessChk
if set, skip process validity checks
double sigmaNR(int, double, double, bool) const
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
map< int, double > fMEC2009p18
Initial State information.
map< RgKey, RegistryItemI * > RgIMap