82 {2190., 1920., 1700., 1600., 1440., 1232. };
96115.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,
97745.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,
984806.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,
9930988.8, 35765.7, 41279, 47642.2, 54986.3, 63462.4, 73245.2, 84536, 97567.2, 112607, 129966 };
126 fMu = 105.6583745*MeV;
127 fMpi = 139.57018*MeV;
128 fM1 = 939.5654133*MeV;
129 fM2 = 938.2720813*MeV;
194 outFile <<
"G4NeutrinoNucleusModel is a neutrino-nucleus general\n"
195 <<
"model which uses the standard model \n"
196 <<
"transfer parameterization. The model is fully relativistic\n";
225 G4int i(0), nBin(50);
228 for( i = 0; i < nBin; ++i )
240 xx =
GetXkr( nBin-1, prob);
253 else xx = x1 + (e-e1)*(x2-x1)/(e2-e1);
267 for( i = 0; i < nBin; ++i )
295 else xx = x1 + (prob-p1)*(x2-x1)/(p2-p1);
314 qq1 =
GetQkr( 0, jX, prob);
316 else if ( iE >= nBin-1)
318 qq1 =
GetQkr( nBin-1, jX, prob);
330 else qq1 = q1 + (e-e1)*(q2-q1)/(e2-e1);
337 qq2 =
GetQkr( iE, 0, prob);
339 else if ( jX >= nBin)
341 qq2 =
GetQkr( iE, nBin, prob);
353 else qq2 = q1 + (e-e1)*(q2-q1)/(e2-e1);
369 for( i = 0; i < nBin; ++i )
397 else qq = q1 + (prob-p1)*(q2-q1)/(p2-p1);
413 if( pdg == 211 || pdg == -211 || pdg == 111)
428 for(
unsigned int i = 0; i < ddktv->size(); i++ )
432 ddktv->operator[](i)->Get4Momentum());
437 delete ddktv->operator[](i);
449 G4int A(0), Z(0), pdg = pdgB;
456 if( pdg == 2212 || pdg == 2112)
467 G4double det(0.), det2(0.), rM(0.), mX = lvB.
m();
482 rM = electron_mass_c2;
488 G4double a = 4.*(sumE*sumE - pX*pX);
492 if( det2 <= 0. ) det = 0.;
493 else det = sqrt(det2);
504 eX = sqrt( pX*pX +
fMr*
fMr );
508 if( pdg == 2212 || pdg == 2112)
523 for(
unsigned int i = 0; i < ddktv->size(); i++ )
527 ddktv->operator[](i)->Get4Momentum() );
532 delete ddktv->operator[](i);
538 G4double eRecoil = sqrt( rM*rM + dP*dP );
576 if( products !=
nullptr )
578 for(
auto iter = products->cbegin(); iter != products->cend(); ++iter )
582 (*iter)->GetTotalEnergy(),
583 (*iter)->GetMomentum() ) );
599 G4int A(0), Z(0), pdg = pdgP;
602 G4double rM(0.), mN(938.), det(0.), det2(0.);
653 G4double a = 4.*(sumE*sumE - pX*pX);
657 if(det2 > 0.) det = sqrt(det2);
665 if( pX < 0. ) pX = 0.;
667 eX = sqrt( dP*dP +
fMr*
fMr );
670 if(
A >= 1 ) lvN.
boost(bst);
680 G4double eRecoil = sqrt( rM*rM + pX*pX );
725 G4int pdgB(0), i(0), qM(0), qB(0);
726 G4double mM(0.), mB(0.), eM(0.), eB(0.), pM(0.), pB(0.);
727 G4double mm1(0.), mm22(0.), M1(0.), M2(0.), mX(0.);
735 G4double deltaMr[4] = { 0.*MeV, 0.*MeV, 100.*MeV, 0.*MeV};
753 if ( qX == 2 || qX == 0) { pdgB = 2212; qB = 1;}
755 else if( qX == 1 || qX == -1) { pdgB = 2112; qB = 0;}
759 else if( mX <
fBarMass[i] + deltaMr[i] || mX < mN + mPi )
763 if ( qX == 1 && pdgB != 2212) pdgB = pdgB - 10;
764 else if( qX == 0 && pdgB != 2212) pdgB = pdgB - 110;
765 else if( qX == 0 && pdgB == 2212) pdgB = pdgB - 100;
778 if( qX == 2 || qX == 0) { pdgB = 2212; qB = 1;}
779 else if( qX == 1 || qX == -1) { pdgB = 2112; qB = 0;}
791 mM = mm1 + rand*(mm22-mm1);
808 if ( qX == 2 || qX == 0) { pdgB = 2212; qB = 1;}
809 else if( qX == 1 || qX == -1) { pdgB = 2112; qB = 0;}
826 eM = 0.5*(mX*mX + mM*mM - mB*mB)/mX;
827 pM = sqrt(eM*eM - mM*mM);
831 eB = 0.5*(mX*mX + mB*mB - mM*mM)/mX;
832 pB = sqrt(eB*eB - mB*mB);
840 if ( qX == 2 ) { qM = 1; qB = 1;}
841 else if( qX == 1 ) { qM = 0; qB = 1;}
842 else if( qX == 0 ) { qM = 0; qB = 0;}
843 else if( qX == -1 ) { qM = -1; qB = 0;}
864 G4int pdgM(0), pdgB(0), i(0), qM(0), qB(0);
865 G4double mM(0.), mB(0.), eM(0.), eB(0.), pM(0.), pB(0.);
866 G4double mm1(0.), mm22(0.), M1(0.), M2(0.), mX(0.), Tkin(0.);
872 if( mX < 1080*MeV && mX > 990*MeV && Tkin < 600*MeV )
878 G4double deltaMr[4] = { 0.*MeV, 0.*MeV, 100.*MeV, 0.*MeV};
896 if ( qX == 1) { pdgB = 211; qB = 1;}
897 else if( qX == 0 ) { pdgB = 111; qB = 0;}
898 else if( qX == -1) { pdgB = -211; qB = -1;}
902 else if( mX <
fMesMass[i] + deltaMr[i] )
909 if( qX == 0 ) pdgB = pdgB - 100;
910 else if( qX == -1 ) pdgB = -pdgB;
912 if( finB )
return FinalMeson( lvX, qX, pdgB );
919 mm22 = mX - mPi - 1.*MeV;
923 if ( qX == 1) { pdgB = 211; qB = 1;}
924 else if( qX == 0 ) { pdgB = 111; qB = 0;}
925 else if( qX == -1) { pdgB = -211; qB = -1;}
934 if ( qX == 1 ) { qM = 1; qB = 0;}
935 else if( qX == 0 ) { qM = -1; qB = 1;}
936 else if( qX == -1 ) { qM = -1; qB = 0;}
945 mM = mm1 + rand*(mm22-mm1);
960 if ( qX == 1) { pdgB = 211; qB = 1;}
961 else if( qX == 0 ) { pdgB = 111; qB = 0;}
962 else if( qX == -1) { pdgB = -211; qB = -1;}
966 else if( mX <
fMesMass[i] + deltaMr[i] )
973 if( qX == 0 ) pdgB = pdgB - 100;
974 else if( qX == -1 ) pdgB = -pdgB;
976 if( finB )
return FinalMeson( lvX, qX, pdgB );
984 if ( qX == 1) { pdgB = 211; qB = 1;}
985 else if( qX == 0 ) { pdgB = 111; qB = 0;}
986 else if( qX == -1) { pdgB = -211; qB = -1;}
999 eM = 0.5*(mX*mX + mM*mM - mB*mB)/mX;
1000 pM = sqrt(eM*eM - mM*mM);
1004 eB = 0.5*(mX*mX + mB*mB - mM*mM)/mX;
1005 pB = sqrt(eB*eB - mB*mB);
1015 if ( qM == 0 ) pdgM = pdgM - 100;
1016 else if( qM == -1 ) pdgM = -pdgM;
1047 if( delta2 >= 0. ) delta = sqrt(delta2);
1049 result = 0.5*(-b-delta)/a;
1072 if ( Z == 1 &&
A == 1 ) { kF = 0.; }
1073 else if ( Z == 1 &&
A == 2 ) { kF = 87.*MeV; }
1074 else if ( Z == 2 &&
A == 3 ) { kF = 134.*MeV; }
1075 else if ( Z == 6 &&
A == 12 ) { kF = 221.*MeV; }
1076 else if ( Z == 14 &&
A == 28 ) { kF = 239.*MeV; }
1077 else if ( Z == 26 &&
A == 56 ) { kF = 257.*MeV; }
1078 else if ( Z == 82 &&
A == 208 ) { kF = 265.*MeV; }
1081 kF = kp*ZpA*( 1 - pow(
G4double(
A), -t1 ) ) + kn*NpA*( 1 - pow(
G4double(
A), -t2 ) );
1121 const G4int maxBin = 12;
1123 G4double refA[maxBin] = { 2., 6., 12., 16., 27., 28., 40., 50., 56., 58., 197., 208. };
1125 G4double pEx[maxBin] = { 0., 12.2, 10.1, 10.9, 21.6, 12.4, 17.8, 17., 19., 16.8, 19.5, 14.7 };
1127 G4double nEx[maxBin] = { 0., 12.2, 10., 10.2, 21.6, 12.4, 21.8, 17., 19., 16.8, 19.5, 16.9 };
1131 if(fP)
for( i = 0; i < maxBin; ++i ) dE[i] = pEx[i];
1132 else dE[i] = nEx[i];
1134 for( i = 0; i < maxBin; ++i )
1136 if( aa <= refA[i] )
break;
1138 if( i >= maxBin ) eX = dE[maxBin-1];
1139 else if( i <= 0 ) eX = dE[0];
1146 if (a1 == a2 || e1 == e2 ) eX = dE[i];
1147 else eX = e1 + (e2-e1)*(aa-a1)/(a2-a1);
1161 G4double shift(1.), xx(1.), mom(0.), th(0.1);
1169 if(
A <= 12) th = 0.1;
1184 if(
A <= 12 ) ll = 6.0;
1203 if( mom > 2.*kF )
f2p2h =
true;
1217 G4int i, eIndex = 0;
1219 for( i = 0; i <
fIndex; i++)
1240 if( index <= 0 || energy <
fNuMuEnergy[0] ) ratio = 0.;
1253 ratio = y1 + (energy-x1)*angle;
1263 0.112103, 0.117359, 0.123119, 0.129443, 0.136404,
1264 0.144084, 0.152576, 0.161991, 0.172458, 0.184126,
1265 0.197171, 0.211801, 0.228261, 0.24684, 0.267887,
1266 0.291816, 0.319125, 0.350417, 0.386422, 0.428032,
1267 0.47634, 0.532692, 0.598756, 0.676612, 0.768868,
1268 0.878812, 1.01062, 1.16963, 1.36271, 1.59876,
1269 1.88943, 2.25002, 2.70086, 3.26916, 3.99166,
1270 4.91843, 6.11836, 7.6872, 9.75942, 12.5259,
1271 16.2605, 21.3615, 28.4141, 38.2903, 52.3062,
1272 72.4763, 101.93, 145.6, 211.39, 312.172
1282 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98,
1283 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98,
1284 0.97, 0.96, 0.95, 0.93,
1285 0.917794, 0.850239, 0.780412, 0.709339, 0.638134, 0.568165,
1286 0.500236, 0.435528, 0.375015, 0.319157, 0.268463, 0.2232, 0.183284,
1287 0.148627, 0.119008, 0.0940699, 0.0733255, 0.0563819, 0.0427312, 0.0319274,
1288 0.0235026, 0.0170486, 0.0122149, 0.00857825, 0.00594018, 0.00405037
1297 G4int i, eIndex = 0;
1333 ratio = y1 + (energy-x1)*angle;
1344 0.275314, 0.293652, 0.31729, 0.33409, 0.351746, 0.365629, 0.380041, 0.400165, 0.437941, 0.479237,
1345 0.504391, 0.537803, 0.588487, 0.627532, 0.686839, 0.791905, 0.878332, 0.987405, 1.08162, 1.16971,
1346 1.2982, 1.40393, 1.49854, 1.64168, 1.7524, 1.87058, 2.02273, 2.15894, 2.3654, 2.55792, 2.73017,
1347 3.03005, 3.40733, 3.88128, 4.53725, 5.16786, 5.73439, 6.53106, 7.43879, 8.36214, 9.39965, 10.296,
1348 11.5735, 13.1801, 15.2052, 17.5414, 19.7178, 22.7462, 25.9026, 29.4955, 33.5867, 39.2516, 46.4716,
1349 53.6065, 63.4668, 73.2147, 85.5593, 99.9854
1357 0.0019357, 0.0189361, 0.0378722, 0.0502758, 0.0662559, 0.0754581, 0.0865008, 0.0987275, 0.124112,
1358 0.153787, 0.18308, 0.213996, 0.245358, 0.274425, 0.301536, 0.326612, 0.338208, 0.337806, 0.335948,
1359 0.328092, 0.313557, 0.304965, 0.292169, 0.28481, 0.269474, 0.254138, 0.247499, 0.236249, 0.221654,
1360 0.205492, 0.198781, 0.182216, 0.162251, 0.142878, 0.128631, 0.116001, 0.108435, 0.0974843, 0.082092,
1361 0.0755204, 0.0703121, 0.0607066, 0.0554278, 0.0480401, 0.0427023, 0.0377123, 0.0323248, 0.0298584,
1362 0.0244296, 0.0218526, 0.019121, 0.016477, 0.0137309, 0.0137963, 0.0110371, 0.00834028, 0.00686127, 0.00538226
double B(double temperature)
double A(double temperature)
G4double G4Log(G4double x)
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
CLHEP::Hep3Vector G4ThreeVector
Hep3Vector orthogonal() const
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
void SetExcEnergyAndMomentum(G4double eexc, const G4LorentzVector &)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void SetLocalEnergyDeposit(G4double aE)
const G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4KineticTrackVector * Decay()
static G4MuonMinus * MuonMinus()
static G4MuonPlus * MuonPlus()
static const G4double fBarMass[4]
void CoherentPion(G4LorentzVector &lvP, G4int pdgP, G4Nucleus &targetNucleus)
static G4double fNuMuQarrayKR[50][51][51]
virtual void ModelDescription(std::ostream &) const
G4GeneratorPrecompoundInterface * fPrecoInterface
G4double FermiMomentum(G4Nucleus &targetNucleus)
static G4double fNuMuXarrayKR[50][51]
G4double NucleonMomentum(G4Nucleus &targetNucleus)
G4int GetOnePionIndex(G4double energy)
static const G4double fResMass[6]
static const G4int fMesPDG[4]
static const G4double fNuMuEnergy[50]
G4ExcitationHandler * fDeExcitation
G4double SampleXkr(G4double energy)
G4ParticleDefinition * theMuonMinus
static const G4int fResNumber
G4double SampleQkr(G4double energy, G4double xx)
G4double GetNuMuQeTotRat(G4int index, G4double energy)
G4int GetEnergyIndex(G4double energy)
G4double GetXkr(G4int iEnergy, G4double prob)
void MesonDecay(G4LorentzVector &lvX, G4int qX)
G4double GgSampleNM(G4Nucleus &nucl)
G4double GetNuMuOnePionProb(G4int index, G4double energy)
virtual ~G4NeutrinoNucleusModel()
void FinalMeson(G4LorentzVector &lvM, G4int qM, G4int pdgM)
G4double GetQkr(G4int iE, G4int jX, G4double prob)
static const G4double fMesMass[4]
G4PreCompoundModel * fPreCompound
static const G4int fBarPDG[4]
static G4double fNuMuXdistrKR[50][50]
static G4double fNuMuQdistrKR[50][51][50]
virtual G4bool IsApplicable(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
static const G4double fNuMuQeTotRat[50]
G4NeutrinoNucleusModel(const G4String &name="neutrino-nucleus")
G4double FinalMomentum(G4double mI, G4double mF, G4double mP, G4LorentzVector lvX)
G4ParticleDefinition * theMuonPlus
G4double GetMinNuMuEnergy()
void ClusterDecay(G4LorentzVector &lvX, G4int qX)
void FinalBarion(G4LorentzVector &lvB, G4int qB, G4int pdgB)
static const G4double fOnePionProb[58]
static const G4int fClustNumber
void RecoilDeexcitation(G4Fragment &fragment)
static const G4double fNuMuEnergyLogVector[50]
static const G4double fOnePionEnergy[58]
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double AtomicMass(const G4double A, const G4double Z) const
G4double GetPDGMass() const
const G4String & GetParticleName() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment) final
static G4Proton * Proton()
void SetDeExcitation(G4VPreCompoundModel *ptr)