61 using namespace CLHEP;
66 {2190., 1920., 1700., 1600., 1440., 1232. };
80 115.603, 133.424, 153.991, 177.729, 205.126, 236.746, 273.24, 315.361, 363.973, 420.08, 484.836, 559.573, 645.832,
81 745.387, 860.289, 992.903, 1145.96, 1322.61, 1526.49, 1761.8, 2033.38, 2346.83, 2708.59, 3126.12, 3608.02, 4164.19,
82 4806.1, 5546.97, 6402.04, 7388.91, 8527.92, 9842.5, 11359.7, 13110.8, 15131.9, 17464.5, 20156.6, 23263.8, 26849.9,
83 30988.8, 35765.7, 41279, 47642.2, 54986.3, 63462.4, 73245.2, 84536, 97567.2, 112607, 129966 };
90 #ifdef G4MULTITHREADED
116 outFile <<
"G4NuMuNucleusNcModel is a neutrino-nucleus (neutral current) scattering\n"
117 <<
"model which uses the standard model \n"
118 <<
"transfer parameterization. The model is fully relativistic\n";
130 G4int nSize(0), i(0), j(0),
k(0);
134 #ifdef G4MULTITHREADED
140 #ifdef G4MULTITHREADED
148 char* path = getenv(
"G4PARTICLEXSDATA");
149 std::ostringstream ost1, ost2, ost3, ost4;
150 ost1 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/xarraynckr";
152 std::ifstream filein1( ost1.str().c_str() );
158 for( k = 0; k <
fNbin; ++
k )
160 for( i = 0; i <=
fNbin; ++i )
168 ost2 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/xdistrnckr";
169 std::ifstream filein2( ost2.str().c_str() );
173 for( k = 0; k <
fNbin; ++
k )
175 for( i = 0; i <
fNbin; ++i )
183 ost3 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/q2arraynckr";
184 std::ifstream filein3( ost3.str().c_str() );
188 for( k = 0; k <
fNbin; ++
k )
190 for( i = 0; i <=
fNbin; ++i )
192 for( j = 0; j <=
fNbin; ++j )
201 ost4 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/q2distrnckr";
202 std::ifstream filein4( ost4.str().c_str() );
206 for( k = 0; k <
fNbin; ++
k )
208 for( i = 0; i <=
fNbin; ++i )
210 for( j = 0; j <
fNbin; ++j )
282 G4double cost(1.), sint(0.),
phi(0.), muMom(0.), massX2(0.);
288 G4int pdgP(0), qB(0);
300 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
338 if ( lvX.
e() > eCut )
356 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
429 G4double dP(0.), pX = sqrt( eX*eX - mX*mX );
463 B = sumE*sumE + rM*rM -
fMr*
fMr - pX*pX;
464 a = 4.*(sumE*sumE - pX*pX);
466 c = 4.*sumE*sumE*rM*rM - B*
B;
468 if( det2 < 0.) det2 = 0.;
469 dP = 0.5*(-
b - sqrt(det2) )/
a;
471 eX = sqrt( pX*pX +
fMr*
fMr );
480 G4double eRecoil = sqrt(rM*rM + dP*dP);
484 if( eRecoil > 100.*
MeV )
494 else if ( Zr == 2 && Ar == 3 ) { recoilDef =
G4He3::He3(); }
504 else if( eRecoil > 0.0 )
509 else if ( eX < 95000.*
GeV )
511 if (
fProton && pName ==
"nu_mu" ) qB = 1;
512 else if(
fProton && pName ==
"anti_nu_mu" ) qB = 1;
513 else if( !
fProton && pName ==
"nu_mu" ) qB = 0;
514 else if( !
fProton && pName ==
"anti_nu_mu" ) qB = 0;
552 G4double e3(0.), pMu2(0.), pX2(0.), nMom(0.), rM(0.), hM(0.), tM = targetNucleus.
AtomicMass(A,Z);
559 if( A == 1 || nMom == 0. )
593 if( iTer >= iTerMax ) {
fBreak =
true;
return; }
608 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
680 if( iTer >= iTerMax ) {
fBreak =
true;
return; }
694 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
712 G4int i(0), nBin(50);
715 for( i = 0; i < nBin; ++i )
724 else if ( i >= nBin-1)
740 else xx = x1 + (e-
e1)*(x2-x1)/(e2-
e1);
754 for( i = 0; i < nBin; ++i )
782 else xx = x1 + (prob-p1)*(x2-x1)/(p2-p1);
801 qq1 =
GetQkr( 0, jX, prob);
803 else if ( iE >= nBin-1)
805 qq1 =
GetQkr( nBin-1, jX, prob);
817 else qq1 = q1 + (e-
e1)*(q2-q1)/(e2-
e1);
824 qq2 =
GetQkr( iE, 0, prob);
826 else if ( jX >= nBin)
828 qq2 =
GetQkr( iE, nBin, prob);
840 else qq2 = q1 + (e-
e1)*(q2-q1)/(e2-
e1);
856 for( i = 0; i < nBin; ++i )
884 else qq = q1 + (prob-p1)*(q2-q1)/(p2-p1);