97 fData = fMaster =
false;
112 outFile <<
"G4ANuTauNucleusCcModel is a anti tau neutrino-nucleus (charge current) scattering\n"
113 <<
"model which uses the standard model \n"
114 <<
"transfer parameterization. The model is fully relativistic\n";
127 G4int nSize(0), i(0), j(0), k(0);
131#ifdef G4MULTITHREADED
137#ifdef G4MULTITHREADED
146 std::ostringstream ost1, ost2, ost3, ost4;
147 ost1 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/xarraycckr";
149 std::ifstream filein1( ost1.str().c_str() );
155 for( k = 0; k <
fNbin; ++k )
157 for( i = 0; i <=
fNbin; ++i )
165 ost2 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/xdistrcckr";
166 std::ifstream filein2( ost2.str().c_str() );
170 for( k = 0; k <
fNbin; ++k )
172 for( i = 0; i <
fNbin; ++i )
180 ost3 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/q2arraycckr";
181 std::ifstream filein3( ost3.str().c_str() );
185 for( k = 0; k <
fNbin; ++k )
187 for( i = 0; i <=
fNbin; ++i )
189 for( j = 0; j <=
fNbin; ++j )
198 ost4 << path <<
"/" <<
"neutrino" <<
"/" << pName <<
"/q2distrcckr";
199 std::ifstream filein4( ost4.str().c_str() );
203 for( k = 0; k <
fNbin; ++k )
205 for( i = 0; i <=
fNbin; ++i )
207 for( j = 0; j <
fNbin; ++j )
227 if( pName ==
"anti_nu_tau"
281 G4double cost(1.), sint(0.), phi(0.), muMom(0.), massX2(0.), massX(0.), massR(0.), eCut(0.);
287 G4int pdgP(0), qB(0);
299 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
301 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
304 muMom = sqrt(
fEmu*
fEmu-fMtau*fMtau);
335 if( pName ==
"anti_nu_tau" ) pdgP = 211;
341 eCut = (
fMpi + mTarg)*(
fMpi + mTarg) - (massX + massR)*(massX + massR);
347 if ( lvX.
e() > eCut )
366 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
368 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
370 muMom = sqrt(
fEmu*
fEmu-fMtau*fMtau);
406 if( pName ==
"anti_nu_tau" ) qB = 2;
440 if( pName ==
"anti_nu_tau" )
458 if( pName ==
"anti_nu_tau" )
488 fMr = proton_mass_c2;
517 if (
fProton && pName ==
"anti_nu_tau" ) qB = 2;
519 else if( !
fProton && pName ==
"anti_nu_tau" ) qB = 1;
542 G4double e3(0.), pMu2(0.), pX2(0.), nMom(0.), rM(0.), hM(0.), tM = targetNucleus.
AtomicMass(
A,Z);
544 G4double cost(1.), sint(0.), phi(0.), muMom(0.);
576 if(pMu2 < 0.) {
fBreak =
true;
return; }
584 while( ( abs(
fCosTheta) > 1. ||
fEmu < fMtau ) && iTer < iTerMax );
586 if( iTer >= iTerMax ) {
fBreak =
true;
return; }
601 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
603 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
604 muMom = sqrt(
fEmu*
fEmu-fMtau*fMtau);
620 ei = tM - sqrt( (rM + Ex)*(rM + Ex) + nMom*nMom );
623 nm2 = ei*ei - nMom*nMom;
626 while( nm2 < 0. && iTer < iTerMax );
628 if( iTer >= iTerMax ) {
fBreak =
true;
return; }
691 if(pMu2 < 0.) {
fBreak =
true;
return; }
697 while( ( abs(
fCosTheta) > 1. ||
fEmu < fMtau ) && iTer < iTerMax );
699 if( iTer >= iTerMax ) {
fBreak =
true;
return; }
715 sint = std::sqrt( (1.0 - cost)*(1.0 + cost) );
717 eP =
G4ThreeVector( sint*std::cos(phi), sint*std::sin(phi), cost );
718 muMom = sqrt(
fEmu*
fEmu-fMtau*fMtau);
const char * G4FindDataDir(const char *)
CLHEP::HepLorentzVector G4LorentzVector
G4ThreeVector G4RandomDirection()
#define G4MUTEX_INITIALIZER
#define G4MUTEXLOCK(mutex)
#define G4MUTEXUNLOCK(mutex)
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
void SampleLVkr(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual G4bool IsApplicable(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual void InitialiseModel()
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual ~G4ANuTauNucleusCcModel()
G4ANuTauNucleusCcModel(const G4String &name="ANuTauNuclCcModel")
virtual void ModelDescription(std::ostream &) const
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double GetTotalEnergy() const
G4HadFinalState theParticleChange
void CoherentPion(G4LorentzVector &lvP, G4int pdgP, G4Nucleus &targetNucleus)
static G4double fNuMuQarrayKR[50][51][51]
static G4double fNuMuXarrayKR[50][51]
G4int GetOnePionIndex(G4double energy)
G4double SampleXkr(G4double energy)
G4double SampleQkr(G4double energy, G4double xx)
G4double GgSampleNM(G4Nucleus &nucl)
G4double GetNuMuOnePionProb(G4int index, G4double energy)
static G4double fNuMuXdistrKR[50][50]
static G4double fNuMuQdistrKR[50][51][50]
G4double CalculateQEratioA(G4int Z, G4int A, G4double energy, G4int nepdg)
void ClusterDecay(G4LorentzVector &lvX, G4int qX)
void FinalBarion(G4LorentzVector &lvB, G4int qB, G4int pdgB)
G4double AtomicMass(const G4double A, const G4double Z, const G4int numberOfLambdas=0) const
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleName() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
static G4TauMinus * TauMinus()
static G4TauPlus * TauPlus()