Import Geant4 6.2.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 10:56:29 +02:00
parent 1d812b78b1
commit e083ffb441
1415 changed files with 111223 additions and 21207 deletions
@@ -0,0 +1,334 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//G4DiffElasticHadrNucleus.cc
#include "globals.hh"
#include "G4DiffElasticHadrNucleus.hh"
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void G4DiffElasticHadrNucleus::
GetNucleusParameters(G4Nucleus * aNucleus)
{
G4int Nucleus = (int)aNucleus->GetN();
if(Nucleus == 208)
{ // R1 = 20.73; R2 = 15.74.
R1 = 4.1408*pow(static_cast<double>(Nucleus),0.3018);
R2 = 3.806*pow(Nucleus-10.068,0.2685);
Pnucl = 0.9;
Aeff = 1.1;
R1 = 19.5;
R2 = 15.74;
Pnucl = 0.4;
Aeff = 0.7;
}
else if(Nucleus == 90)
{
R1 = 16.50;
R2 = 11.62;
Pnucl = 0.4;
Aeff = 0.9;
R1 = 16.5;
R2 = 11.62;
Pnucl = 0.4;
Aeff = 0.7;
}
else if(Nucleus == 58)
{
R1 = 15.0;
R2 = 9.9;
Pnucl = 0.45;
Aeff = 0.85;
}
else if(Nucleus == 16)
{
R1 = 10.50;
R2 = 5.5;
Pnucl = 0.7;
Aeff = 0.98;
// R1 = 11.3;
// R2 = 2.5;
// Pnucl = 0.75;
// Aeff = 0.9;
}
else
{
R1 = 4.45*pow(Nucleus-1.0,0.309);
if(Nucleus == 28)
R1 = 4.25*pow(Nucleus-1.0,0.309);
R2 = 2.3*pow(static_cast<double>(Nucleus),0.36);
Pnucl = 0.176+0.00167*Nucleus+
8.69E-6*Nucleus*Nucleus;
Aeff = 0.9;
}
if(Nucleus == 9)
{
R1 = 9.0;
R2 = 7.0;
Pnucl = 0.190;
Aeff = 0.9;
}
/*
if(Nucleus == 12)
{
R1 = 9.336;
R2 = 5.63;
Pnucl = 0.197;
Aeff = 01.0;
}
*/
/*
if(Nucleus == 11)
{
R1 = 10.8;
R2 = 7.5;
Pnucl = 0.85;
Aeff = 1.2;
}
*/
if(Nucleus == 4)
{
R1 = 5.5;
R2 = 3.7;
Pnucl = 0.4;
Aeff = 0.87;
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double G4DiffElasticHadrNucleus::HadrNuclDifferCrSec(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus,
G4double aQ2)
{
// ------ All external kinematical variables are in MeV -------
// ------ but internal in GeV !!!! ------
G4double HadrEnergy = aHadron->GetTotalEnergy()/1000; // GeV
G4int Nucleus = (int)aNucleus->GetN();
if(Nucleus<4)
{
G4Exception(" This nucleus is very light for this model !!!");
}
if(Nucleus>238)
{
G4Exception(" This nucleus is very heavy for this model !!!");
}
if(HadrEnergy < 1.4999)
{
G4cout<<HadrEnergy<<G4endl;
G4Exception(" The hadron energy is very low for this model: E= ");
}
G4HadronValues::GetHadronValues(aHadron);
GetTotalCrossSection(aHadron, aNucleus);
// G4cout<<" Tot00 "<<Tot00<<" DTot00 "<<DTot00<<endl;
GetNucleusParameters(aNucleus);
G4double Q2 = aQ2/1000/1000; // GeV
G4double MomentumCMN, S, MassH, MassN, EcmH;
MassH = aHadron->GetMass()/1000;
MassN = Nucleus*0.938;
S = 2*MassN*HadrEnergy+MassN*MassN+MassH*MassH;
EcmH = (S-MassN*MassN+MassH*MassH)/2/sqrt(S);
MomentumCMN = sqrt(EcmH*EcmH-MassH*MassH);
G4double MbToB = 2.568; // from mb to GeV^-2
G4double Pi1 = 3.1416;
G4double Stot = HadrTot*MbToB; //In GeV-2
G4double Bhad = HadrSlope; //In GeV-2
G4double Asq = 1+HadrReIm*HadrReIm;
G4double Rho2 = sqrt(Asq);
G4double Pnuclp = 0.001;
Pnuclp = Pnucl;
G4double R12 = R1*R1;
G4double R22 = R2*R2;
G4double R12B = R12+2*Bhad;
G4double R22B = R22+2*Bhad;
// G4double R12Bp = R12+20;
// G4double R22Bp = R22+20;
// G4double R13Bp = R12*R1/R12Bp;
// G4double R23Bp = R22*R2/R22Bp;
G4double R12Ap = R12+20;
G4double R22Ap = R22+20;
G4double R13Ap = R12*R1/R12Ap;
G4double R23Ap = R22*R2/R22Ap*Pnuclp;
// G4double R23App = R22*R2/R22Ap*Pnuclp;
G4double R23dR13 = R23Ap/R13Ap;
G4double R12Apd = 2/R12Ap;
G4double R22Apd = 2/R22Ap;
G4double R12ApdR22Ap = 0.5*(R12Apd+R22Apd);
G4double DDSec1p = (DDSect2+DDSect3*log(1.06*2*HadrEnergy/R1/4));
G4double DDSec2p = (DDSect2+DDSect3*log(1.06*2*HadrEnergy/
sqrt((R12+R22)/2)/4));
G4double DDSec3p = (DDSect2+DDSect3*log(1.06*2*HadrEnergy/R2/4));
G4double Norm = (R12*R1-Pnucl*R22*R2)*Aeff;
G4double Normp = (R12*R1-Pnuclp*R22*R2)*Aeff;
G4double R13 = R12*R1/R12B;
G4double R23 = Pnucl*R22*R2/R22B;
G4double Unucl = Stot/2/Pi1/Norm*R13;
G4double UnuclScr = Stot/2/Pi1/Normp*R13Ap;
G4double SinFi = HadrReIm/Rho2;
G4double FiH = asin(SinFi);
G4double N = -1;
G4double N2 = R23/R13;
G4double ImElasticAmpl0 = 0;
G4double ReElasticAmpl0 = 0;
G4double exp1;
G4double N4;
G4double Prod1, Tot1=0, medTot, DTot1, DmedTot;
G4int i;
for( i=1; i<=Nucleus; i++)
{
N = -N*Unucl*(Nucleus-i+1)/i*Rho2;
N4 = 1;
Prod1 = exp(-Q2/i*R12B/4)/i*R12B;
medTot = R12B/i;
for(G4int l=1; l<=i; l++)
{
exp1 = l/R22B+(i-l)/R12B;
N4 = -N4*(i-l+1)/l*N2;
Prod1 = Prod1+N4/exp1*exp(-Q2/exp1/4);
medTot = medTot+N4/exp1;
} // end l
ReElasticAmpl0 = ReElasticAmpl0+Prod1*N*sin(FiH*i);
ImElasticAmpl0 = ImElasticAmpl0+Prod1*N*cos(FiH*i);
Tot1 = Tot1+medTot*N*cos(FiH*i);
if(abs(Prod1*N/ImElasticAmpl0) < 0.000001) break;
} // i
ImElasticAmpl0 = ImElasticAmpl0*Pi1/2.568; // The amplitude in mB
ReElasticAmpl0 = ReElasticAmpl0*Pi1/2.568; // The amplitude in mB
Tot1 = Tot1*Pi1*2.0/2.568;
G4double N1p = 1;
G4double Din1 = 0.5*(R13Ap*R13Ap*exp(-Q2/8*R12Ap)/2*R12Ap/2*DDSec1p-
2*R23Ap*R13Ap/2/R12ApdR22Ap*exp(-Q2/4/R12ApdR22Ap)*DDSec2p+
R23Ap*R23Ap/2*R22Ap/2*exp(-Q2/8*R22Ap)*DDSec3p); // at i=0
DTot1 = 0.5*(R13Ap*R13Ap/2*R12Ap/2*DDSec1p-
2*R23Ap*R13Ap/2/R12ApdR22Ap*DDSec2p+
R23Ap*R23Ap/2*R22Ap/2*DDSec3p); // at i=0
// G4cout<<" DTot00 "<<DTot00<<" Din1 "<<Din1<<" DTot1 "<<DTot1<<endl;
///// if(Nucleus>95 && HadrEnergy>1000) {Din1=0; goto tam;}
G4double exp1p;
G4double exp2p;
G4double exp3p;
G4double N2p;
G4double Din2, BinCoeff;
BinCoeff = 1;
for( i = 1; i<= Nucleus-2; i++)
{
N1p = -N1p*UnuclScr*(Nucleus-i-1)/i*Rho2;
N2p = 1;
Din2 = 0;
DmedTot = 0;
for(G4int l = 0; l<=i; l++)
{
if(l == 0) BinCoeff = 1;
else if(l !=0 ) BinCoeff = BinCoeff*(i-l+1)/l;
exp1 = l/R22B+(i-l)/R12B;
exp1p = exp1+R12Apd;
exp2p = exp1+R12ApdR22Ap;
exp3p = exp1+R22Apd;
Din2 = Din2 + N2p*BinCoeff*
(R13Ap*R13Ap/2/exp1p*exp(-Q2/4/exp1p)*DDSec1p-
2*R13Ap*R23Ap/2/exp2p*exp(-Q2/4/exp2p)*DDSec2p+
R23Ap*R23Ap/2/exp3p*exp(-Q2/4/exp3p)*DDSec3p);
DmedTot = DmedTot + N2p*BinCoeff*
(R13Ap*R13Ap/2/exp1p*DDSec1p-
2*R13Ap*R23Ap/2/exp2p*DDSec2p+
R23Ap*R23Ap/2/exp3p*DDSec3p);
N2p = -N2p*R23dR13;
} // l
Din1 = Din1+Din2*N1p*Mnoj[i]/(i+2)/(i+1)*cos(FiH*i);
DTot1 = DTot1+DmedTot*N1p*Mnoj[i]/(i+2)/(i+1)*cos(FiH*i);
if(abs(Din2*N1p/Din1) < 0.000001) break;
} // i
Din1 = -1*Din1*Nucleus*(Nucleus-1)
/2/Pi1/Normp/2/Pi1/Normp*16*Pi1*Pi1;
DTot1 = 1*DTot1*Nucleus*(Nucleus-1)
/2/Pi1/Normp/2/Pi1/Normp*16*Pi1*Pi1;
/// Din1 *= 0;
// ---------------- dSigma/dOmegaCM, mb/Ster -----------------
// tam:
G4double Corr0=Tot00/Tot1/1.0; // Corr1=DTot00/DTot1/1.0;
ImElasticAmpl0 *= Corr0;
// Din1 *= Corr1;
G4double DiffCrSec2 = (ReElasticAmpl0*ReElasticAmpl0+
(ImElasticAmpl0+Din1)*
(ImElasticAmpl0+Din1))*
2.568/4/Pi1/Pi1
*MomentumCMN*MomentumCMN;
AIm = ImElasticAmpl0;
ARe = ReElasticAmpl0;
DIm = Din1;
// if(Q2<0.001)
{
// G4cout<<" DTot00 "<<DTot00<<" Din1 "<<Din1<<" DTot1 "<<DTot1
// <<" Tot00 "<<Tot00<<" Tot1 "<<Tot1
// <<" Ampl "<<ImElasticAmpl0<<" dSdT "<<CrSecT<<G4endl;
}
return DiffCrSec2; // dSig/dOmegaCM, mb/Ster
} // function
/* End of file */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,211 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
// G4HadronValues.cc
#include "globals.hh"
#include "G4HadronValues.hh"
void
G4HadronValues::GetHadronValues(const G4DynamicParticle* aHadron)
{
G4ParticleDefinition * dHadron = aHadron->GetDefinition();
G4int iHadron;
if(dHadron == G4Proton::Proton() ||
dHadron == G4Neutron::Neutron() ||
dHadron == G4Lambda::Lambda() ||
dHadron == G4SigmaPlus::SigmaPlus() ||
dHadron == G4SigmaMinus::SigmaMinus()||
dHadron == G4SigmaZero::SigmaZero() ||
dHadron == G4XiMinus::XiMinus() ||
dHadron == G4XiZero::XiZero() ||
dHadron == G4OmegaMinus::OmegaMinus()) iHadron=0;
else if(dHadron == G4AntiProton::AntiProton() ||
dHadron == G4AntiNeutron::AntiNeutron() ||
dHadron == G4AntiLambda::AntiLambda() ||
dHadron == G4AntiSigmaPlus::AntiSigmaPlus() ||
dHadron == G4AntiSigmaMinus::AntiSigmaMinus()||
dHadron == G4AntiSigmaZero::AntiSigmaZero() ||
dHadron == G4AntiXiMinus::AntiXiMinus() ||
dHadron == G4AntiXiZero::AntiXiZero() ||
dHadron == G4AntiOmegaMinus::AntiOmegaMinus()) iHadron=1;
else if(dHadron == G4PionPlus::PionPlus()) iHadron=2;
else if(dHadron == G4PionMinus::PionMinus()) iHadron=3;
else if(dHadron == G4KaonPlus::KaonPlus()) iHadron=4;
else if(dHadron == G4KaonMinus::KaonMinus()) iHadron=5;
else {
G4Exception(" There is not method for this hadron ");
}
G4double mHadr = aHadron->GetMass()/1000.; // In GeV
G4double HadrEnergy = aHadron->GetTotalEnergy()/1000.; // In GeV
G4double sHadr = 2*HadrEnergy*0.938+0.938*0.938+mHadr*mHadr;
G4double sqrS = sqrt(sHadr);
G4double Ecm = (sHadr-mHadr*mHadr+0.938*.938)/2/sqrS;
MomentumCM = sqrt(Ecm*Ecm-0.938*0.938);
if(HadrEnergy<1.0)
{
G4Exception(" The hadron Energy is very low for this method!");
}
switch (iHadron)
{
case 0: // proton
G4double Delta;
Delta=1;
if(HadrEnergy<40)
Delta = 0.916+0.0021*HadrEnergy;
HadrTot = 5.2+5.2*log(HadrEnergy)
+51*pow(HadrEnergy,-0.35); // mb
HadrSlope = 6.44+0.88*log(sHadr)-1; // GeV-2
HadrReIm = 0.13*log(sHadr/350)*pow(sHadr,-0.18);
DDSect2 = 11; //mb*GeV-2
DDSect3 = 3; //mb*GeV-2
// if(HadrEnergy>1000) HadrReIm=0.15;
if( dHadron == G4Lambda::Lambda() ||
dHadron == G4SigmaPlus::SigmaPlus() ||
dHadron == G4SigmaMinus::SigmaMinus()||
dHadron == G4SigmaZero::SigmaZero())
{
HadrTot *=0.80;
HadrSlope *=0.85;
}
if( dHadron == G4XiMinus::XiMinus() ||
dHadron == G4XiZero::XiZero())
{
HadrTot *=0.70;
HadrSlope *=0.75;
}
if( dHadron == G4OmegaMinus::OmegaMinus())
{
HadrTot *=0.60;
HadrSlope *=0.65;
}
break;
case 1: // antiproton
sqrS = sqrt(sHadr);
HadrTot = 5.2+5.2*log(HadrEnergy)
+123.2*pow(HadrEnergy,-0.5); // mb
HadrSlope = 8.32+0.57*log(sHadr); //GeV-2
if(HadrEnergy<1000)
HadrReIm =0.06*(sqrS-2.236)*(sqrS-14.14)*pow(sHadr,-0.8);
else
HadrReIm = 0.6*log(sHadr/350)*pow(sHadr,-0.25);
DDSect2 = 11; //mb*GeV-2
DDSect3 = 3; //mb*GeV-2
// if(HadrEnergy>1000) HadrReIm=0.15;
if( dHadron == G4AntiLambda::AntiLambda() ||
dHadron == G4AntiSigmaPlus::AntiSigmaPlus() ||
dHadron == G4AntiSigmaMinus::AntiSigmaMinus()||
dHadron == G4AntiSigmaZero::AntiSigmaZero())
{
HadrTot *=0.75;
HadrSlope *=0.85;
}
if( dHadron == G4AntiXiMinus::AntiXiMinus() ||
dHadron == G4AntiXiZero::AntiXiZero())
{
HadrTot *=0.65;
HadrSlope *=0.75;
}
if( dHadron == G4AntiOmegaMinus::AntiOmegaMinus())
{
HadrTot *=0.55;
HadrSlope *=0.65;
}
break;
case 2: // pi plus
HadrTot = 10.6+2.*log(HadrEnergy)+
25*pow(HadrEnergy,-0.43); // mb
HadrSlope = 7.28+0.245*log(sHadr); //GeV-2
HadrReIm = 0.2*log(sHadr/100)*pow(sHadr,-0.15);
DDSect2 = 4.6; //mb*GeV-2
DDSect3 = 1.33; //mb*GeV-2
break;
case 3: // pi minus
HadrTot = 10.6+2*log(HadrEnergy)+
30*pow(HadrEnergy,-0.43); // mb
HadrSlope = 7.28+0.245*log(sHadr); // GeV-2
HadrReIm = 0.2*log(sHadr/100)*pow(sHadr,-0.15);
DDSect2 = 4.6; //mb*GeV-2
DDSect3 = 1.33; //mb*GeV-2
break;
case 4: // K plus
HadrTot = 10.6+1.8*log(HadrEnergy)+
9.0*pow(HadrEnergy,-0.55); // mb
if(HadrEnergy>100) HadrSlope = 15.0;
else
HadrSlope = 5.28+1.76*log(sHadr)-
2.84*pow(sHadr,-0.5); // GeV-2
HadrReIm = 0.4*(sHadr-20)*(sHadr-150)*pow(sHadr+50,-2.1);
DDSect2 = 3.5; //mb*GeV-2
DDSect3 = 1.03; //mb*GeV-2
break;
case 5: // K minus
HadrTot = 10+1.8*log(HadrEnergy)
+25*pow(HadrEnergy,-0.5); // mb
HadrSlope = 6.98+0.127*log(sHadr); // GeV-2
// if(HadrEnergy<8) HadrReIm = 0.7;
// else
HadrReIm = 0.4*(sHadr-20)*(sHadr-20)*pow(sHadr+50,-2.1);
DDSect2 = 3.5; //mb*GeV-2
DDSect3 = 1.03; //mb*GeV-2
break;
}
}
/* end of file */
@@ -0,0 +1,223 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
// IntegrHadrNucleus.cc
#include "globals.hh"
#include "G4IntegrHadrNucleus.hh"
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
void G4IntegrHadrNucleus::
GetIntegralCrSec(G4Nucleus * aNucleus)
{
G4int i, /*k,*/ l/*, m*/;
G4double N, N1, N2, N3, N4, Delta, Inel1/*, Inel3*/;
G4double Tot0, Inel0, /*Inel2,*/ Prod0, Prod1,
ak, Delt, Delt2, Delt3;
G4double Rnucl, R0, Stot, Bhad, Asq, MbToB, Pi1;
G4double Dtot, /*Dinel,*/ Dprod, Rnuc2, RB, R2B, bk, bd;
G4int Anucleus = static_cast<G4int>( aNucleus->GetN() );
if(Anucleus<4)
{
G4Exception(" This nucleus is very light for this model !!!");
}
if(Anucleus>238)
{
G4Exception(" This nucleus is very heavy for this model !!!");
}
MbToB = 2.568;
Pi1 = 3.1416;
Stot = HadrTot*MbToB; //{In GeV-2}
Bhad = HadrSlope; //{In GeV-2}
Asq = 1+HadrReIm*HadrReIm;
R0 = sqrt(0.99); //{ This is fermi}
if (Anucleus >10) R0 = sqrt(0.84);
if (Anucleus >20) R0 = sqrt((35.34+0.5*Anucleus)
/(40.97+Anucleus));
if (Anucleus == 16) R0 = sqrt(0.75);
if (Anucleus == 58) R0 = sqrt(0.6);
// R0 = sqrt(0.64);
Rnucl = R0*pow(static_cast<double>(Anucleus),0.3333); //{In Fermi }
if(Anucleus == 4) Rnucl = 1.2;
Rnuc2 = Rnucl*Rnucl*MbToB*10; //{ In GeV-2}
RB = Rnuc2+Bhad;
R2B = RB+Bhad;
Delta = Stot/R2B/2/Pi1;
Delt = Delta*Asq*0.5;
Delt2 = Delta*2;
Delt3 = Stot/RB/Bhad/16/Pi1*Asq*R2B;
Tot0 = 0;
Inel0 = 0;
Inel1=0;
N = N1 = -1/Delta;
N3 = -1/Delt2;
Prod0 = 0;
for (i=1; i<= Anucleus; i++)
{
N = -N*Delta*(Anucleus-i+1)/i;
N1 = -N1*Delta*(2*Anucleus-i+1)/i;
N3 = -N3*Delt2*(Anucleus-i+1)/i;
Tot0 = Tot0+N/i;
Inel0 = Inel0+N1/i;
N2 = 1;
N4 = 1;
Inel1 = 0;
Prod1 = 0;
for (l=0; l<= i; l++)
{
// Inel1 = Inel1+N2/(i+l);
Prod1 = Prod1+N4*RB/(i*RB+l*Bhad);
// N2 = -N2*Delt*(i-l)/(l+1);
N4 = -N4*Delt3*(i-l)/(l+1);
} // l
// Inel2 = Inel2+Inel1*N3;
Prod0 = Prod0+Prod1*N3;
if(abs(N1/i/Inel0) < 0.0001) break;
} // i
Tot0 = Tot0*HadrTot;
Inel0 = Inel0*HadrTot*0.5;
// Inel2 = Inel2*HadrTot;
Prod0 = Prod0*HadrTot;
Tot00 = Tot0;
ak = (Rnuc2*2*Pi1/Stot);
G4double DDSect1 = (DDSect2+DDSect3*log(1.06*2*HadrEnergy
/Rnucl/sqrt(25.68)/4));
Dtot = 8*Pi1*ak/HadrTot*(1-(1+Anucleus/ak)
*exp(-Anucleus/ak))*DDSect1/MbToB;
DTot00 = Dtot;
bk = (1-1/ak)/Stot/(1-1/ak/4);
bd = bk*bk*DDSect1*(1-(1+Anucleus/ak*(1-1/ak/4))*
exp(-Anucleus/ak*(1-1/4/ak)))*Rnuc2;
Dprod = bd*4*Pi1*Pi1*MbToB;
TotalCrSec = Tot0-Dtot;
InelCrSec = Inel0-Dprod;
// InelCrSec1 = Inel2;
ProdCrSec = Prod0-Dprod;
ElasticCrSec = TotalCrSec-InelCrSec;
QuasyElasticCrSec = InelCrSec-ProdCrSec;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double
G4IntegrHadrNucleus::GetElasticCrossSection(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus)
{
HadrEnergy = aHadron->GetTotalEnergy()/1000;
if(HadrEnergy < 1.5)
G4cout << " The hadron energy is very low for this model !!!"<<G4endl;
G4HadronValues::GetHadronValues(aHadron);
GetIntegralCrSec(aNucleus);
return(ElasticCrSec);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double
G4IntegrHadrNucleus::GetTotalCrossSection(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus)
{
HadrEnergy = aHadron->GetTotalEnergy()/1000;
if(HadrEnergy < 1.5)
G4cout <<" The hadron energy is very low for this model !!!"<<G4endl;
G4HadronValues::GetHadronValues(aHadron);
GetIntegralCrSec(aNucleus);
return(TotalCrSec);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double
G4IntegrHadrNucleus::GetInelasticCrossSection(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus)
{
HadrEnergy = aHadron->GetTotalEnergy()/1000;
if(HadrEnergy < 1.5)
G4cout <<" The hadron energy is very low for this model !!!"<<G4endl;
G4HadronValues::GetHadronValues(aHadron);
GetIntegralCrSec(aNucleus);
return(InelCrSec);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double
G4IntegrHadrNucleus::GetProductionCrossSection(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus)
{
HadrEnergy = aHadron->GetTotalEnergy()/1000;
if(HadrEnergy < 1.5)
G4cout <<" The hadron energy is very low for this model !!!"<<G4endl;
G4HadronValues::GetHadronValues(aHadron);
GetIntegralCrSec(aNucleus);
return(ProdCrSec);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
G4double
G4IntegrHadrNucleus::GetQuasyElasticCrossSection(
const G4DynamicParticle * aHadron,
G4Nucleus * aNucleus)
{
HadrEnergy = aHadron->GetTotalEnergy()/1000;
if(HadrEnergy < 1.5)
G4cout <<" The hadron energy is very low for this model !!!"<<G4endl;
G4HadronValues::GetHadronValues(aHadron);
GetIntegralCrSec(aNucleus);
return(QuasyElasticCrSec);
}
/* end of file */