Import Geant4 9.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 17:01:34 +02:00
parent b1eb5424d2
commit e2d2f9810a
10384 changed files with 698580 additions and 628834 deletions
@@ -24,8 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AnnihiToMuPair.cc,v 1.6 2009-11-09 18:24:07 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// ------------ G4AnnihiToMuPair physics process ------
// by H.Burkhardt, S. Kelner and R. Kokoulin, November 2002
@@ -43,6 +42,8 @@
#include "G4ios.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Positron.hh"
#include "G4MuonPlus.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4BetheBlochNoDeltaModel.cc,v 1.4 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4BraggNoDeltaModel.cc,v 1.4 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -24,8 +24,7 @@
// ********************************************************************
//
//
// $Id: G4GammaConversionToMuons.cc,v 1.8 2010-10-26 14:15:40 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// ------------ G4GammaConversionToMuons physics process ------
// by H.Burkhardt, S. Kelner and R. Kokoulin, April 2002
@@ -36,6 +35,8 @@
// ---------------------------------------------------------------------------
#include "G4GammaConversionToMuons.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4UnitsTable.hh"
#include "G4MuonPlus.hh"
#include "G4MuonMinus.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ICRU73NoDeltaModel.cc,v 1.1 2010-06-04 10:23:31 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ee2KChargedModel.cc,v 1.2 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,8 @@
#include "G4ee2KChargedModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4KaonPlus.hh"
#include "G4KaonMinus.hh"
#include "G4DynamicParticle.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ee2KNeutralModel.cc,v 1.2 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,8 @@
#include "G4ee2KNeutralModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4KaonZeroLong.hh"
#include "G4KaonZeroShort.hh"
#include "G4DynamicParticle.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeCrossSections.cc,v 1.7 2008-07-10 18:06:39 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -48,6 +47,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4eeCrossSections.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4PionPlus.hh"
#include "G4PionMinus.hh"
#include "G4PionZero.hh"
@@ -195,17 +196,17 @@ G4double G4eeCrossSections::CrossSection2pi(G4double e)
complex<G4double> xo(cos(PhOm2Pi),sin(PhOm2Pi));
complex<G4double> xf(cos(PhPhi2Pi),sin(PhPhi2Pi));
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> drho = DpRho(e);
complex<G4double> dom = DpOm(e);
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(Width2p(s,MsRho,GRho,1.0,MsPi)*MsRho3*BrRhoEe*GRho)*xr/drho
+ sqrt(Width2p(s,MsOm,GOm,BrOm2Pi,MsPi)*MsOm3*BrOmEe*GOm)*xo/dom
+ sqrt(Width2p(s,MsPhi,GPhi,BrPhi2Pi,MsPi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
sqrt(Width2p(s_inv,MsRho,GRho,1.0,MsPi)*MsRho3*BrRhoEe*GRho)*xr/drho
+ sqrt(Width2p(s_inv,MsOm,GOm,BrOm2Pi,MsPi)*MsOm3*BrOmEe*GOm)*xo/dom
+ sqrt(Width2p(s_inv,MsPhi,GPhi,BrPhi2Pi,MsPi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
@@ -216,15 +217,15 @@ G4double G4eeCrossSections::CrossSection3pi(G4double e)
{
complex<G4double> xf(cos(PhPhi2Pi),sin(PhPhi));
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> dom = DpOm(e);
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(Width3p(s,MsOm,GOm,BrOm3Pi)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(Width3p(s,MsPhi,GPhi,BrPhi3Pi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
sqrt(Width3p(s_inv,MsOm,GOm,BrOm3Pi)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(Width3p(s_inv,MsPhi,GPhi,BrPhi3Pi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
@@ -235,17 +236,17 @@ G4double G4eeCrossSections::CrossSectionPi0G(G4double e)
{
complex<G4double> xf(cos(PhPhi),sin(PhPhi));
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> drho = DpRho(e);
complex<G4double> dom = DpOm(e);
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(WidthPg(s,MsRho,GRho,BrRhoPi0G,MsPi0)*MsRho3*BrRhoEe*GRho)/drho
+ sqrt(WidthPg(s,MsOm,GOm,BrOmPi0G,MsPi0)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(WidthPg(s,MsPhi,GPhi,BrPhiPi0G,MsPi0)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
sqrt(WidthPg(s_inv,MsRho,GRho,BrRhoPi0G,MsPi0)*MsRho3*BrRhoEe*GRho)/drho
+ sqrt(WidthPg(s_inv,MsOm,GOm,BrOmPi0G,MsPi0)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(WidthPg(s_inv,MsPhi,GPhi,BrPhiPi0G,MsPi0)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
@@ -256,17 +257,17 @@ G4double G4eeCrossSections::CrossSectionEtaG(G4double e)
{
complex<G4double> xf(cos(PhPhi),sin(PhPhi));
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> drho = DpRho(e);
complex<G4double> dom = DpOm(e);
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(WidthPg(s,MsRho,GRho,BrRhoEtaG,MsEta)*MsRho3*BrRhoEe*GRho)/drho
+ sqrt(WidthPg(s,MsOm,GOm,BrOmEtaG,MsEta)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(WidthPg(s,MsPhi,GPhi,BrPhiEtaG,MsEta)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
sqrt(WidthPg(s_inv,MsRho,GRho,BrRhoEtaG,MsEta)*MsRho3*BrRhoEe*GRho)/drho
+ sqrt(WidthPg(s_inv,MsOm,GOm,BrOmEtaG,MsEta)*MsOm3*BrOmEe*GOm)/dom
+ sqrt(WidthPg(s_inv,MsPhi,GPhi,BrPhiEtaG,MsEta)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
@@ -275,13 +276,13 @@ G4double G4eeCrossSections::CrossSectionEtaG(G4double e)
G4double G4eeCrossSections::CrossSection2Kcharged(G4double e)
{
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(Width2p(s,MsPhi,GPhi,BrPhi2Kc,MsKc)*MsPhi3*BrPhiEe*GPhi)/dphi;
sqrt(Width2p(s_inv,MsPhi,GPhi,BrPhi2Kc,MsKc)*MsPhi3*BrPhiEe*GPhi)/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
@@ -290,37 +291,37 @@ G4double G4eeCrossSections::CrossSection2Kcharged(G4double e)
G4double G4eeCrossSections::CrossSection2Kneutral(G4double e)
{
G4double s = e*e;
G4double s_inv = e*e;
complex<G4double> dphi = DpPhi(e);
complex<G4double> amp =
sqrt(Width2p(s,MsPhi,GPhi,BrPhiKsKl,MsKs)*MsPhi3*BrPhiEe*GPhi)/dphi;
sqrt(Width2p(s_inv,MsPhi,GPhi,BrPhiKsKl,MsKs)*MsPhi3*BrPhiEe*GPhi)/dphi;
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s_inv);
return cross;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4double G4eeCrossSections::Width2p(G4double s, G4double mres,
G4double g, G4double br, G4double m)
G4double G4eeCrossSections::Width2p(G4double s_inv, G4double mres,
G4double gconst, G4double br, G4double mp)
{
G4double m2 = 4.0*m*m;
G4double mp2 = 4.0*mp*mp;
G4double s0 = mres*mres;
G4double f = (s - m2)/(s0 - m2);
G4double f = (s_inv - mp2)/(s0 - mp2);
if(f < 0.0) f = 0.0;
return g*br*sqrt(f)*f*s0/s;
return gconst*br*sqrt(f)*f*s0/s_inv;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4double G4eeCrossSections::Width3p(G4double s, G4double mres,
G4double g, G4double br)
G4double G4eeCrossSections::Width3p(G4double s_inv, G4double mres,
G4double gconst, G4double br)
{
G4double w = PhaseSpace3p(sqrt(s));
G4double w = PhaseSpace3p(sqrt(s_inv));
G4double w0= PhaseSpace3p(mres);
G4double x = g*br*w/w0;
G4double x = gconst*br*w/w0;
return x;
}
@@ -343,14 +344,14 @@ G4double G4eeCrossSections::PhaseSpace3p(G4double e)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4double G4eeCrossSections::WidthPg(G4double s, G4double mres,
G4double g, G4double br, G4double m)
G4double G4eeCrossSections::WidthPg(G4double s_inv, G4double mres,
G4double gconst, G4double br, G4double mp)
{
G4double m2 = m*m;
G4double mp2 = mp*mp;
G4double s0 = mres*mres;
G4double f = (s - m2)*mres/((s0 - m2)*sqrt(s));
G4double f = (s_inv - mp2)*mres/((s0 - mp2)*sqrt(s_inv));
if(f < 0.0) f = 0.0;
return g*br*f*f*f;
return gconst*br*f*f*f;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -365,11 +366,11 @@ G4double G4eeCrossSections::WidthRho(G4double e)
G4double G4eeCrossSections::WidthOm(G4double e)
{
G4double s = e*e;
G4double w = (Width3p(s, MsOm, GOm, BrOm3Pi) +
WidthPg(s, MsOm, GOm, BrOmPi0G, MsPi0) +
WidthPg(s, MsOm, GOm, BrOmEtaG, MsEta) +
Width2p(s, MsOm, GOm, BrOm2Pi, MsPi)) /
G4double s_inv = e*e;
G4double w = (Width3p(s_inv, MsOm, GOm, BrOm3Pi) +
WidthPg(s_inv, MsOm, GOm, BrOmPi0G, MsPi0) +
WidthPg(s_inv, MsOm, GOm, BrOmEtaG, MsEta) +
Width2p(s_inv, MsOm, GOm, BrOm2Pi, MsPi)) /
(BrOm3Pi+BrOmPi0G+BrOmEtaG+BrOm2Pi);
return w;
}
@@ -378,12 +379,12 @@ G4double G4eeCrossSections::WidthOm(G4double e)
G4double G4eeCrossSections::WidthPhi(G4double e)
{
G4double s = e*e;
G4double w = (Width3p(s, MsPhi, GPhi, BrPhi3Pi) +
WidthPg(s, MsPhi, GPhi, BrPhiPi0G, MsPi0) +
WidthPg(s, MsPhi, GPhi, BrPhiEtaG, MsEta) +
Width2p(s, MsPhi, GPhi, BrPhi2Kc, MsKc) +
Width2p(s, MsPhi, GPhi, BrPhiKsKl, MsKs)) /
G4double s_inv = e*e;
G4double w = (Width3p(s_inv, MsPhi, GPhi, BrPhi3Pi) +
WidthPg(s_inv, MsPhi, GPhi, BrPhiPi0G, MsPi0) +
WidthPg(s_inv, MsPhi, GPhi, BrPhiEtaG, MsEta) +
Width2p(s_inv, MsPhi, GPhi, BrPhi2Kc, MsKc) +
Width2p(s_inv, MsPhi, GPhi, BrPhiKsKl, MsKs)) /
(BrPhi3Pi+BrPhiPi0G+BrPhiEtaG+BrPhi2Kc+BrPhiKsKl);
return w;
}
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeTo3PiModel.cc,v 1.3 2009-11-11 17:13:47 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,7 @@
#include "G4eeTo3PiModel.hh"
#include "Randomize.hh"
#include "G4SystemOfUnits.hh"
#include "G4PionPlus.hh"
#include "G4PionMinus.hh"
#include "G4PionZero.hh"
@@ -131,7 +131,7 @@ void G4eeTo3PiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
G4LorentzVector w0, w1, w2;
G4ThreeVector dir0, dir1;
G4double e0, p0, e2, p, g, m01, m02, m12;
G4double e0, p0, e2, p, gg, m01, m02, m12;
// max pi0 energy
G4double edel = 0.5*e*(1.0 + x0*x0 - 4.0*x1*x1) - massPi0;
@@ -171,16 +171,16 @@ void G4eeTo3PiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
G4double py = pz1*px2 - pz2*px1;
G4double pz = px1*py2 - px2*py1;
g = (px*px + py*py + pz*pz)*
gg = (px*px + py*py + pz*pz)*
norm( 1.0/cross->DpRho(m01) + 1.0/cross->DpRho(m02)
+ 1.0/cross->DpRho(m12) );
if(g > gmax) {
if(gg > gmax) {
G4cout << "G4eeTo3PiModel::SampleSecondaries WARNING matrix element g= "
<< g << " > " << gmax << " (majoranta)" << G4endl;
<< gg << " > " << gmax << " (majoranta)" << G4endl;
}
if(g > gcash) gcash = g;
if(gg > gcash) gcash = gg;
} while( gmax*G4UniformRand() > g );
} while( gmax*G4UniformRand() > gg );
w0.rotateUz(direction);
w1.rotateUz(direction);
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToHadrons.cc,v 1.9 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -50,6 +49,7 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4eeToHadrons.hh"
#include "G4SystemOfUnits.hh"
#include "G4MaterialCutsCouple.hh"
#include "G4Gamma.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToHadronsModel.cc,v 1.10 2010-10-26 14:15:40 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -51,6 +50,8 @@
#include "G4eeToHadronsModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Electron.hh"
#include "G4Gamma.hh"
#include "G4Positron.hh"
@@ -64,10 +65,10 @@
using namespace std;
G4eeToHadronsModel::G4eeToHadronsModel(G4Vee2hadrons* m, G4int ver,
G4eeToHadronsModel::G4eeToHadronsModel(G4Vee2hadrons* mod, G4int ver,
const G4String& nam)
: G4VEmModel(nam),
model(m),
model(mod),
crossPerElectron(0),
crossBornPerElectron(0),
isInitialised(false),
@@ -236,10 +237,10 @@ void G4eeToHadronsModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp
G4LorentzVector gLv = gamma->Get4Momentum();
G4LorentzVector lv(0.0,0.0,0.0,e);
lv -= gLv;
G4double m = lv.m();
G4double mass = lv.m();
G4ThreeVector boost = lv.boostVector();
const G4ThreeVector dir = gamma->GetMomentumDirection();
model->SampleSecondaries(newp, m, dir);
model->SampleSecondaries(newp, mass, dir);
G4int np = newp->size();
for(G4int j=0; j<np; j++) {
G4DynamicParticle* dp = (*newp)[j];
@@ -277,12 +278,13 @@ void G4eeToHadronsModel::ComputeCMCrossSectionPerElectron()
G4double x2 = x1;
G4double s2 = crossBornPerElectron->GetValue(e2, b);
G4double w2 = bt*(del*pow(x2,btm1) - 1.0 + 0.5*x2);
G4double w1;
for(G4int j=i-2; j>=0; j--) {
e1 = crossPerElectron->GetLowEdgeEnergy(j);
x1 = 1. - e1/e;
G4double s1 = crossBornPerElectron->GetValue(e1, b);
G4double w1 = bt*(del*pow(x1,btm1) - 1.0 + 0.5*x1);
s1 = crossBornPerElectron->GetValue(e1, b);
w1 = bt*(del*pow(x1,btm1) - 1.0 + 0.5*x1);
cs += 0.5*(x1 - x2)*(w2*s2 + w1*s1);
e2 = e1;
x2 = x1;
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToHadronsMultiModel.cc,v 1.9 2010-10-26 14:15:40 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4eeToHadronsMultiModel.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4eeToTwoPiModel.hh"
#include "G4eeTo3PiModel.hh"
#include "G4eeToPGammaModel.hh"
@@ -61,8 +62,8 @@
using namespace std;
G4eeToHadronsMultiModel::G4eeToHadronsMultiModel(G4int ver, const G4String& name)
: G4VEmModel(name),
G4eeToHadronsMultiModel::G4eeToHadronsMultiModel(G4int ver, const G4String& mname)
: G4VEmModel(mname),
csFactor(1.0),
nModels(0),
verbose(ver),
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToPGammaModel.cc,v 1.2 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,8 @@
#include "G4eeToPGammaModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4PionZero.hh"
#include "G4Eta.hh"
#include "G4Gamma.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4eeToTwoPiModel.cc,v 1.7 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -49,6 +48,8 @@
#include "G4eeToTwoPiModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4PionPlus.hh"
#include "G4PionMinus.hh"
#include "G4DynamicParticle.hh"
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hBremsstrahlung.cc,v 1.4 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -46,6 +45,7 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4hBremsstrahlung.hh"
#include "G4SystemOfUnits.hh"
#include "G4Gamma.hh"
#include "G4hBremsstrahlungModel.hh"
#include "G4UniversalFluctuation.hh"
@@ -62,6 +62,8 @@ G4hBremsstrahlung::G4hBremsstrahlung(const G4String& name)
isInitialised(false)
{
SetProcessSubType(fBremsstrahlung);
SetSecondaryParticle(G4Gamma::Gamma());
SetIonisation(false);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -96,8 +98,6 @@ void G4hBremsstrahlung::InitialiseEnergyLossProcess(
isInitialised = true;
theParticle = part;
SetSecondaryParticle(G4Gamma::Gamma());
SetIonisation(false);
if (!EmModel()) { SetEmModel(new G4hBremsstrahlungModel()); }
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hBremsstrahlungModel.cc,v 1.3 2008-07-22 16:15:16 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -50,6 +49,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4hBremsstrahlungModel.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
using namespace std;
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hPairProduction.cc,v 1.4 2009-02-20 16:38:33 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -46,6 +45,7 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4hPairProduction.hh"
#include "G4SystemOfUnits.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4hPairProductionModel.hh"
@@ -63,6 +63,8 @@ G4hPairProduction::G4hPairProduction(const G4String& name)
isInitialised(false)
{
SetProcessSubType(fPairProdByCharged);
SetSecondaryParticle(G4Positron::Positron());
SetIonisation(false);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -96,9 +98,6 @@ void G4hPairProduction::InitialiseEnergyLossProcess(
isInitialised = true;
theParticle = part;
SetSecondaryParticle(G4Positron::Positron());
SetIonisation(false);
if (!EmModel()) { SetEmModel(new G4hPairProductionModel()); }
G4VEmFluctuationModel* fm = 0;
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hPairProductionModel.cc,v 1.1 2008-03-06 11:47:11 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -50,6 +49,7 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4hPairProductionModel.hh"
#include "G4PhysicalConstants.hh"
using namespace std;
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4hhIonisation.cc,v 1.11 2010-10-26 14:15:40 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -48,13 +47,17 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4hhIonisation.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4BraggNoDeltaModel.hh"
#include "G4BetheBlochNoDeltaModel.hh"
#include "G4ICRU73NoDeltaModel.hh"
#include "G4UniversalFluctuation.hh"
#include "G4BohrFluctuations.hh"
#include "G4IonFluctuations.hh"
#include "G4UnitsTable.hh"
#include "G4Electron.hh"
#include "G4LossTableManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -93,8 +96,8 @@ G4double G4hhIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
{
G4double x = 0.5*cut/electron_mass_c2;
G4double y = electron_mass_c2/mass;
G4double g = x*y + std::sqrt((1. + x)*(1. + x*y*y));
return mass*(g - 1.0);
G4double gam = x*y + std::sqrt((1. + x)*(1. + x*y*y));
return mass*(gam - 1.0);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -112,36 +115,34 @@ void G4hhIonisation::InitialiseEnergyLossProcess(const G4ParticleDefinition* par
}
SetBaseParticle(0);
SetSecondaryParticle(G4Electron::Electron());
//G4double q = theParticle->GetPDGCharge();
mass = theParticle->GetPDGMass();
ratio = electron_mass_c2/mass;
G4double eth = 2*MeV*mass/proton_mass_c2;
flucModel = new G4BohrFluctuations();
flucModel = new G4IonFluctuations();
G4int nm = 1;
G4double emin = std::min(MinKinEnergy(), 0.1*eth);
G4double emax = std::max(MaxKinEnergy(), 100*eth);
G4double minKinEnergy = MinKinEnergy();
SetMinKinEnergy(emin);
SetMaxKinEnergy(emax);
G4int bin = G4lrint(G4LossTableManager::Instance()->GetNumberOfBinsPerDecade()
*std::log10(emax/emin));
SetDEDXBinning(bin);
if(eth > minKinEnergy) {
G4VEmModel* em;
em = new G4BraggNoDeltaModel();
//if(q > 0.0) { em = new G4BraggNoDeltaModel(); }
//else { em = new G4ICRU73NoDeltaModel(); }
em->SetLowEnergyLimit(minKinEnergy);
em->SetHighEnergyLimit(eth);
AddEmModel(nm, em, flucModel);
++nm;
}
G4VEmModel* em = 0;
if(part->GetPDGCharge() > 0.0) { em = new G4BraggNoDeltaModel(); }
else { em = new G4ICRU73NoDeltaModel(); }
em->SetLowEnergyLimit(emin);
em->SetHighEnergyLimit(eth);
AddEmModel(1, em, flucModel);
if(eth < MaxKinEnergy()) {
G4VEmModel* em1 = new G4BetheBlochNoDeltaModel();
em1->SetLowEnergyLimit(std::max(eth,minKinEnergy));
em1->SetHighEnergyLimit(MaxKinEnergy());
AddEmModel(nm, em1, flucModel);
}
em = new G4BetheBlochNoDeltaModel();
em->SetLowEnergyLimit(eth);
em->SetHighEnergyLimit(emax);
AddEmModel(1, em, flucModel);
if(verboseLevel>1) {
G4cout << "G4hhIonisation is initialised: Nmodels= " << nm << G4endl;
G4cout << "G4hhIonisation is initialised" << G4endl;
}
isInitialised = true;
}
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4mplIonisation.cc,v 1.11 2010-10-26 15:40:03 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -46,10 +45,12 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4mplIonisation.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Electron.hh"
#include "G4mplIonisationModel.hh"
#include "G4mplIonisationWithDeltaModel.hh"
#include "G4BohrFluctuations.hh"
#include "G4LossTableManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -61,11 +62,12 @@ G4mplIonisation::G4mplIonisation(G4double mCharge, const G4String& name)
isInitialised(false)
{
// By default classical magnetic charge is used
if(magneticCharge == 0.0) magneticCharge = eplus*0.5/fine_structure_const;
if(magneticCharge == 0.0) { magneticCharge = eplus*0.5/fine_structure_const; }
SetVerboseLevel(0);
SetProcessSubType(fIonisation);
SetStepFunction(0.2, 1*mm);
SetSecondaryParticle(G4Electron::Electron());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -82,19 +84,30 @@ G4bool G4mplIonisation::IsApplicable(const G4ParticleDefinition&)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4mplIonisation::InitialiseEnergyLossProcess(const G4ParticleDefinition*,
void G4mplIonisation::InitialiseEnergyLossProcess(const G4ParticleDefinition* p,
const G4ParticleDefinition*)
{
if(isInitialised) { return; }
SetBaseParticle(0);
SetSecondaryParticle(G4Electron::Electron());
G4mplIonisationWithDeltaModel* ion =
// monopole model is responsible both for energy loss and fluctuations
G4mplIonisationWithDeltaModel* ion =
new G4mplIonisationWithDeltaModel(magneticCharge,"PAI");
ion->SetLowEnergyLimit(MinKinEnergy());
ion->SetHighEnergyLimit(MaxKinEnergy());
AddEmModel(0,ion,ion);
ion->SetParticle(p);
// define size of dedx and range tables
G4double emin = std::min(MinKinEnergy(),ion->LowEnergyLimit());
G4double emax = std::max(MaxKinEnergy(),ion->HighEnergyLimit());
G4int bin = G4lrint(G4LossTableManager::Instance()->GetNumberOfBinsPerDecade()
*std::log10(emax/emin));
ion->SetLowEnergyLimit(emin);
ion->SetHighEnergyLimit(emax);
SetMinKinEnergy(emin);
SetMaxKinEnergy(emax);
SetDEDXBinning(bin);
AddEmModel(1,ion,ion);
isInitialised = true;
}
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4mplIonisationModel.cc,v 1.8 2010-10-26 15:40:03 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -56,6 +55,8 @@
#include "G4mplIonisationModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4LossTableManager.hh"
#include "G4ParticleChangeForLoss.hh"
@@ -79,8 +80,8 @@ G4mplIonisationModel::G4mplIonisationModel(G4double mCharge, const G4String& nam
chargeSquare = magCharge * magCharge;
dedxlim = 45.*nmpl*nmpl*GeV*cm2/g;
fParticleChange = 0;
mass = 0.0;
monopole = 0;
mass = 0.0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -90,21 +91,35 @@ G4mplIonisationModel::~G4mplIonisationModel()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4mplIonisationModel::Initialise(const G4ParticleDefinition* p,
const G4DataVector&)
void G4mplIonisationModel::SetParticle(const G4ParticleDefinition* p)
{
monopole = p;
mass = monopole->GetPDGMass();
G4double emin =
std::min(LowEnergyLimit(),0.1*mass*(1/sqrt(1 - betalow*betalow) - 1));
G4double emax =
std::max(HighEnergyLimit(),10*mass*(1/sqrt(1 - beta2lim) - 1));
SetLowEnergyLimit(emin);
SetHighEnergyLimit(emax);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4mplIonisationModel::Initialise(const G4ParticleDefinition* p,
const G4DataVector&)
{
if(!monopole) { SetParticle(p); }
if(!fParticleChange) { fParticleChange = GetParticleChangeForLoss(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4double G4mplIonisationModel::ComputeDEDXPerVolume(const G4Material* material,
const G4ParticleDefinition*,
const G4ParticleDefinition* p,
G4double kineticEnergy,
G4double)
{
if(!monopole) { SetParticle(p); }
G4double tau = kineticEnergy / mass;
G4double gam = tau + 1.0;
G4double bg2 = tau * (tau + 2.0);
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4mplIonisationWithDeltaModel.cc,v 1.1 2010-10-26 15:40:03 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// -------------------------------------------------------------------
//
@@ -56,6 +55,8 @@
#include "G4mplIonisationWithDeltaModel.hh"
#include "Randomize.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4LossTableManager.hh"
#include "G4ParticleChangeForLoss.hh"
#include "G4Electron.hh"
@@ -65,7 +66,8 @@
using namespace std;
G4mplIonisationWithDeltaModel::G4mplIonisationWithDeltaModel(G4double mCharge, const G4String& nam)
G4mplIonisationWithDeltaModel::G4mplIonisationWithDeltaModel(G4double mCharge,
const G4String& nam)
: G4VEmModel(nam),G4VEmFluctuationModel(nam),
magCharge(mCharge),
twoln10(log(100.0)),
@@ -84,8 +86,8 @@ G4mplIonisationWithDeltaModel::G4mplIonisationWithDeltaModel(G4double mCharge, c
theElectron = G4Electron::Electron();
G4cout << "### Monopole ionisation model with d-electron production, Gmag= "
<< magCharge/eplus << G4endl;
mass = 0.0;
monopole = 0;
mass = 0.0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -95,12 +97,25 @@ G4mplIonisationWithDeltaModel::~G4mplIonisationWithDeltaModel()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void G4mplIonisationWithDeltaModel::SetParticle(const G4ParticleDefinition* p)
{
monopole = p;
mass = monopole->GetPDGMass();
G4double emin =
std::min(LowEnergyLimit(),0.1*mass*(1/sqrt(1 - betalow*betalow) - 1));
G4double emax =
std::max(HighEnergyLimit(),10*mass*(1/sqrt(1 - beta2lim) - 1));
SetLowEnergyLimit(emin);
SetHighEnergyLimit(emax);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void
G4mplIonisationWithDeltaModel::Initialise(const G4ParticleDefinition* p,
const G4DataVector&)
{
monopole = p;
mass = monopole->GetPDGMass();
if(!monopole) { SetParticle(p); }
if(!fParticleChange) { fParticleChange = GetParticleChangeForLoss(); }
}
@@ -112,6 +127,7 @@ G4mplIonisationWithDeltaModel::ComputeDEDXPerVolume(const G4Material* material,
G4double kineticEnergy,
G4double maxEnergy)
{
if(!monopole) { SetParticle(p); }
G4double tmax = MaxSecondaryEnergy(p,kineticEnergy);
G4double cutEnergy = std::min(tmax, maxEnergy);
G4double tau = kineticEnergy / mass;
@@ -187,6 +203,7 @@ G4mplIonisationWithDeltaModel::ComputeCrossSectionPerElectron(
G4double cutEnergy,
G4double maxKinEnergy)
{
if(!monopole) { SetParticle(p); }
G4double cross = 0.0;
G4double tmax = MaxSecondaryEnergy(p, kineticEnergy);
G4double maxEnergy = min(tmax,maxKinEnergy);