Geant4  10.02.p03
G4EmSaturation Class Reference

#include <G4EmSaturation.hh>

Collaboration diagram for G4EmSaturation:

Public Member Functions

 G4EmSaturation (G4int verb)
 
virtual ~G4EmSaturation ()
 
virtual G4double VisibleEnergyDeposition (const G4ParticleDefinition *, const G4MaterialCutsCouple *, G4double length, G4double edepTotal, G4double edepNIEL=0.0)
 
G4double FindG4BirksCoefficient (const G4Material *)
 
void DumpBirksCoefficients ()
 
void DumpG4BirksCoefficients ()
 
G4double VisibleEnergyDepositionAtAStep (const G4Step *)
 
void SetVerbose (G4int)
 

Private Member Functions

G4EmSaturationoperator= (const G4EmSaturation &right)
 
 G4EmSaturation (const G4EmSaturation &)
 
G4double FindBirksCoefficient (const G4Material *)
 
void InitialiseBirksCoefficient (const G4Material *)
 
void InitialiseG4materials ()
 

Private Attributes

const G4ParticleDefinitionelectron
 
const G4ParticleDefinitionproton
 
G4LossTableManagermanager
 
G4NistManagernist
 
const G4MaterialcurMaterial
 
G4double curBirks
 
G4double curRatio
 
G4double curChargeSq
 
G4int verbose
 
G4int nMaterials
 
G4int nG4Birks
 
G4int nWarnings
 
std::vector< const G4Material * > matPointers
 
std::vector< G4StringmatNames
 
std::vector< G4doublemassFactors
 
std::vector< G4doubleeffCharges
 
std::vector< G4doubleg4MatData
 
std::vector< G4Stringg4MatNames
 

Detailed Description

Definition at line 72 of file G4EmSaturation.hh.

Constructor & Destructor Documentation

◆ G4EmSaturation() [1/2]

G4EmSaturation::G4EmSaturation ( G4int  verb)

Definition at line 57 of file G4EmSaturation.cc.

58  : manager(nullptr)
59 {
60  verbose = verb;
61 
62  curMaterial = nullptr;
63  curBirks = 0.0;
64  curRatio = 1.0;
65  curChargeSq = 1.0;
66  nMaterials = nWarnings = 0;
67 
68  electron = nullptr;
69  proton = nullptr;
71 
73 }
const G4ParticleDefinition * electron
const G4ParticleDefinition * proton
void InitialiseG4materials()
G4NistManager * nist
const G4Material * curMaterial
static G4NistManager * Instance()
G4LossTableManager * manager
G4double curChargeSq
Here is the call graph for this function:

◆ ~G4EmSaturation()

G4EmSaturation::~G4EmSaturation ( )
virtual

Definition at line 77 of file G4EmSaturation.cc.

78 {}

◆ G4EmSaturation() [2/2]

G4EmSaturation::G4EmSaturation ( const G4EmSaturation )
private

Member Function Documentation

◆ DumpBirksCoefficients()

void G4EmSaturation::DumpBirksCoefficients ( )

Definition at line 245 of file G4EmSaturation.cc.

246 {
247  if(nMaterials > 0) {
248  G4cout << "### Birks coeffitients used in run time" << G4endl;
249  for(G4int i=0; i<nMaterials; ++i) {
250  G4double br = matPointers[i]->GetIonisation()->GetBirksConstant();
251  G4cout << " " << matNames[i] << " "
252  << br*MeV/mm << " mm/MeV" << " "
253  << br*matPointers[i]->GetDensity()*MeV*cm2/g
254  << " g/cm^2/MeV"
255  << G4endl;
256  }
257  }
258 }
std::vector< const G4Material * > matPointers
static const double MeV
Definition: G4SIunits.hh:211
static const double cm2
Definition: G4SIunits.hh:119
int G4int
Definition: G4Types.hh:78
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5206
std::vector< G4String > matNames
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
static const double mm
Definition: G4SIunits.hh:114
Here is the call graph for this function:

◆ DumpG4BirksCoefficients()

void G4EmSaturation::DumpG4BirksCoefficients ( )

Definition at line 262 of file G4EmSaturation.cc.

263 {
264  if(nG4Birks > 0) {
265  G4cout << "### Birks coeffitients for Geant4 materials" << G4endl;
266  for(G4int i=0; i<nG4Birks; ++i) {
267  G4cout << " " << g4MatNames[i] << " "
268  << g4MatData[i]*MeV/mm << " mm/MeV" << G4endl;
269  }
270  }
271 }
static const double MeV
Definition: G4SIunits.hh:211
std::vector< G4double > g4MatData
std::vector< G4String > g4MatNames
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
static const double mm
Definition: G4SIunits.hh:114
Here is the caller graph for this function:

◆ FindBirksCoefficient()

G4double G4EmSaturation::FindBirksCoefficient ( const G4Material mat)
inlineprivate

Definition at line 163 of file G4EmSaturation.hh.

164 {
165  if(mat != curMaterial) { InitialiseBirksCoefficient(mat); }
166  return curBirks;
167 }
void InitialiseBirksCoefficient(const G4Material *)
const G4Material * curMaterial
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FindG4BirksCoefficient()

G4double G4EmSaturation::FindG4BirksCoefficient ( const G4Material mat)

Definition at line 141 of file G4EmSaturation.cc.

142 {
143  G4String name = mat->GetName();
144  // is this material in the vector?
145 
146  for(G4int j=0; j<nG4Birks; ++j) {
147  if(name == g4MatNames[j]) {
148  if(verbose > 0)
149  G4cout << "### G4EmSaturation::FindG4BirksCoefficient for "
150  << name << " is " << g4MatData[j]*MeV/mm << " mm/MeV "
151  << G4endl;
152  return g4MatData[j];
153  }
154  }
155  return FindBirksCoefficient(mat);
156 }
static const double MeV
Definition: G4SIunits.hh:211
std::vector< G4double > g4MatData
G4double FindBirksCoefficient(const G4Material *)
G4String name
Definition: TRTMaterials.hh:40
std::vector< G4String > g4MatNames
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4String & GetName() const
Definition: G4Material.hh:178
static const double mm
Definition: G4SIunits.hh:114
Here is the call graph for this function:

◆ InitialiseBirksCoefficient()

void G4EmSaturation::InitialiseBirksCoefficient ( const G4Material mat)
private

Definition at line 160 of file G4EmSaturation.cc.

161 {
162  // electron and proton should exist in any case
163  if(!manager) {
167  }
168 
169  curMaterial = mat;
170  curBirks = 0.0;
171  curRatio = 1.0;
172  curChargeSq = 1.0;
173 
174  // seach in the run-time list
175  for(G4int i=0; i<nMaterials; ++i) {
176  if(mat == matPointers[i]) {
178  curRatio = massFactors[i];
179  curChargeSq = effCharges[i];
180  return;
181  }
182  }
183 
184  G4String name = mat->GetName();
186 
187  // material has no Birks coeffitient defined
188  // seach in the Geant4 list
189  if(curBirks == 0.0) {
190  for(G4int j=0; j<nG4Birks; ++j) {
191  if(name == g4MatNames[j]) {
193  curBirks = g4MatData[j];
194  break;
195  }
196  }
197  }
198 
199  if(curBirks == 0.0) {
200  if(0 < nWarnings) {
201  ++nWarnings;
203  ed << "Birks constants are not defined for material " << name
204  << " ! \n Define Birks constants for the material"
205  << " or not apply saturation.";
206  G4Exception("G4EmSaturation::InitialiseBirksCoefficient", "em0088",
207  JustWarning, ed);
208  }
209  return;
210  }
211 
212  // compute mean mass ratio
213  curRatio = 0.0;
214  curChargeSq = 0.0;
215  G4double norm = 0.0;
216  const G4ElementVector* theElementVector = mat->GetElementVector();
217  const G4double* theAtomNumDensityVector = mat->GetVecNbOfAtomsPerVolume();
218  size_t nelm = mat->GetNumberOfElements();
219  for (size_t i=0; i<nelm; ++i) {
220  const G4Element* elm = (*theElementVector)[i];
221  G4double Z = elm->GetZ();
222  G4double w = Z*Z*theAtomNumDensityVector[i];
224  curChargeSq = Z*Z*w;
225  norm += w;
226  }
228  curChargeSq /= norm;
229 
230  // store results
231  matPointers.push_back(mat);
232  matNames.push_back(name);
233  massFactors.push_back(curRatio);
234  effCharges.push_back(curChargeSq);
235  nMaterials++;
236  if(verbose > 0) {
237  G4cout << "### G4EmSaturation::FindBirksCoefficient Birks coefficient for "
238  << name << " " << curBirks*MeV/mm << " mm/MeV" << G4endl;
239  }
240  return;
241 }
G4double GetBirksConstant() const
std::vector< const G4Material * > matPointers
const G4ParticleDefinition * electron
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:226
static const double MeV
Definition: G4SIunits.hh:211
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4LossTableManager * Instance()
std::vector< G4double > g4MatData
const G4ParticleDefinition * proton
std::vector< G4Element * > G4ElementVector
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
G4NistManager * nist
G4String name
Definition: TRTMaterials.hh:40
void SetBirksConstant(G4double value)
const G4Material * curMaterial
Float_t norm
std::vector< G4double > effCharges
std::vector< G4String > g4MatNames
int G4int
Definition: G4Types.hh:78
Float_t mat
std::vector< G4String > matNames
G4GLOB_DLL std::ostream G4cout
Float_t Z
const G4double * GetVecNbOfAtomsPerVolume() const
Definition: G4Material.hh:206
float proton_mass_c2
Definition: hepunit.py:275
std::vector< G4double > massFactors
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ParticleTable * GetParticleTable()
size_t GetNumberOfElements() const
Definition: G4Material.hh:186
G4LossTableManager * manager
#define G4endl
Definition: G4ios.hh:61
G4double curChargeSq
const G4ElementVector * GetElementVector() const
Definition: G4Material.hh:190
double G4double
Definition: G4Types.hh:76
const G4String & GetName() const
Definition: G4Material.hh:178
G4double GetAtomicMassAmu(const G4String &symb) const
static const double mm
Definition: G4SIunits.hh:114
G4double GetZ() const
Definition: G4Element.hh:131
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitialiseG4materials()

void G4EmSaturation::InitialiseG4materials ( )
private

Definition at line 275 of file G4EmSaturation.cc.

276 {
277  // M.Hirschberg et al., IEEE Trans. Nuc. Sci. 39 (1992) 511
278  // SCSN-38 kB = 0.00842 g/cm^2/MeV; rho = 1.06 g/cm^3
279  g4MatNames.push_back("G4_POLYSTYRENE");
280  g4MatData.push_back(0.07943*mm/MeV);
281 
282  // C.Fabjan (private communication)
283  // kB = 0.006 g/cm^2/MeV; rho = 7.13 g/cm^3
284  g4MatNames.push_back("G4_BGO");
285  g4MatData.push_back(0.008415*mm/MeV);
286 
287  // A.Ribon analysis of publications
288  // Scallettar et al., Phys. Rev. A25 (1982) 2419.
289  // NIM A 523 (2004) 275.
290  // kB = 0.022 g/cm^2/MeV; rho = 1.396 g/cm^3;
291  // ATLAS Efield = 10 kV/cm provide the strongest effect
292  g4MatNames.push_back("G4_lAr");
293  g4MatData.push_back(0.1576*mm/MeV);
294 
295  //G4_BARIUM_FLUORIDE
296  //G4_CESIUM_IODIDE
297  //G4_GEL_PHOTO_EMULSION
298  //G4_PHOTO_EMULSION
299  //G4_PLASTIC_SC_VINYLTOLUENE
300  //G4_SODIUM_IODIDE
301  //G4_STILBENE
302  //G4_lAr
303  //G4_PbWO4
304  //G4_Lucite
305 
306  nG4Birks = g4MatData.size();
307 }
static const double MeV
Definition: G4SIunits.hh:211
std::vector< G4double > g4MatData
std::vector< G4String > g4MatNames
static const double mm
Definition: G4SIunits.hh:114
Here is the caller graph for this function:

◆ operator=()

G4EmSaturation& G4EmSaturation::operator= ( const G4EmSaturation right)
private

◆ SetVerbose()

void G4EmSaturation::SetVerbose ( G4int  val)
inline

Definition at line 142 of file G4EmSaturation.hh.

143 {
144  verbose = val;
145 }
Here is the caller graph for this function:

◆ VisibleEnergyDeposition()

G4double G4EmSaturation::VisibleEnergyDeposition ( const G4ParticleDefinition p,
const G4MaterialCutsCouple couple,
G4double  length,
G4double  edepTotal,
G4double  edepNIEL = 0.0 
)
virtual

Definition at line 82 of file G4EmSaturation.cc.

88 {
89  if(edep <= 0.0) { return 0.0; }
90 
91  G4double evis = edep;
92  G4double bfactor = FindBirksCoefficient(couple->GetMaterial());
93 
94  if(bfactor > 0.0) {
95 
96  G4int pdgCode = p->GetPDGEncoding();
97  // atomic relaxations for gamma incident
98  if(22 == pdgCode && electron) {
99  //G4cout << "%% gamma edep= " << edep/keV << " keV " <<manager << G4endl;
100  evis /= (1.0 + bfactor*edep/manager->GetRange(electron,edep,couple));
101 
102  // energy loss
103  } else {
104 
105  // protections
106  G4double nloss = niel;
107  if(nloss < 0.0) { nloss = 0.0; }
108  G4double eloss = edep - nloss;
109 
110  // neutrons and neutral hadrons
111  if(0.0 == p->GetPDGCharge() || eloss < 0.0 || length <= 0.0) {
112  nloss = edep;
113  eloss = 0.0;
114  }
115 
116  // continues energy loss
117  if(eloss > 0.0) { eloss /= (1.0 + bfactor*eloss/length); }
118 
119  // non-ionizing energy loss
120  if(nloss > 0.0 && proton) {
121  G4double escaled = nloss*curRatio;
122  /*
123  G4cout << "%% p edep= " << nloss/keV << " keV Escaled= "
124  << escaled << " MeV in " << couple->GetMaterial()->GetName()
125  << " " << p->GetParticleName()
126  << G4endl;
127  */
128  G4double range = manager->GetRange(proton,escaled,couple)/curChargeSq;
129  nloss /= (1.0 + bfactor*nloss/range);
130  }
131 
132  evis = eloss + nloss;
133  }
134  }
135 
136  return evis;
137 }
const G4ParticleDefinition * electron
const G4ParticleDefinition * proton
const G4Material * GetMaterial() const
G4double FindBirksCoefficient(const G4Material *)
int G4int
Definition: G4Types.hh:78
Double_t edep
G4LossTableManager * manager
G4double curChargeSq
double G4double
Definition: G4Types.hh:76
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double GetPDGCharge() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ VisibleEnergyDepositionAtAStep()

G4double G4EmSaturation::VisibleEnergyDepositionAtAStep ( const G4Step *  step)
inline

Definition at line 149 of file G4EmSaturation.hh.

151 {
152  G4Track* track = step->GetTrack();
153  return VisibleEnergyDeposition(track->GetParticleDefinition(),
154  track->GetMaterialCutsCouple(),
155  step->GetStepLength(),
156  step->GetTotalEnergyDeposit(),
157  step->GetNonIonizingEnergyDeposit());
158 }
virtual G4double VisibleEnergyDeposition(const G4ParticleDefinition *, const G4MaterialCutsCouple *, G4double length, G4double edepTotal, G4double edepNIEL=0.0)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ curBirks

G4double G4EmSaturation::curBirks
private

Definition at line 120 of file G4EmSaturation.hh.

◆ curChargeSq

G4double G4EmSaturation::curChargeSq
private

Definition at line 122 of file G4EmSaturation.hh.

◆ curMaterial

const G4Material* G4EmSaturation::curMaterial
private

Definition at line 119 of file G4EmSaturation.hh.

◆ curRatio

G4double G4EmSaturation::curRatio
private

Definition at line 121 of file G4EmSaturation.hh.

◆ effCharges

std::vector<G4double> G4EmSaturation::effCharges
private

Definition at line 133 of file G4EmSaturation.hh.

◆ electron

const G4ParticleDefinition* G4EmSaturation::electron
private

Definition at line 113 of file G4EmSaturation.hh.

◆ g4MatData

std::vector<G4double> G4EmSaturation::g4MatData
private

Definition at line 136 of file G4EmSaturation.hh.

◆ g4MatNames

std::vector<G4String> G4EmSaturation::g4MatNames
private

Definition at line 137 of file G4EmSaturation.hh.

◆ manager

G4LossTableManager* G4EmSaturation::manager
private

Definition at line 115 of file G4EmSaturation.hh.

◆ massFactors

std::vector<G4double> G4EmSaturation::massFactors
private

Definition at line 132 of file G4EmSaturation.hh.

◆ matNames

std::vector<G4String> G4EmSaturation::matNames
private

Definition at line 131 of file G4EmSaturation.hh.

◆ matPointers

std::vector<const G4Material*> G4EmSaturation::matPointers
private

Definition at line 130 of file G4EmSaturation.hh.

◆ nG4Birks

G4int G4EmSaturation::nG4Birks
private

Definition at line 126 of file G4EmSaturation.hh.

◆ nist

G4NistManager* G4EmSaturation::nist
private

Definition at line 116 of file G4EmSaturation.hh.

◆ nMaterials

G4int G4EmSaturation::nMaterials
private

Definition at line 125 of file G4EmSaturation.hh.

◆ nWarnings

G4int G4EmSaturation::nWarnings
private

Definition at line 127 of file G4EmSaturation.hh.

◆ proton

const G4ParticleDefinition* G4EmSaturation::proton
private

Definition at line 114 of file G4EmSaturation.hh.

◆ verbose

G4int G4EmSaturation::verbose
private

Definition at line 124 of file G4EmSaturation.hh.


The documentation for this class was generated from the following files: