Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/src/G4EmSaturation.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/utils/src/G4EmSaturation.cc (Version 11.3.0) and /processes/electromagnetic/utils/src/G4EmSaturation.cc (Version 10.1.p3)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
                                                   >>  26 // $Id: G4EmSaturation.cc 81936 2014-06-06 15:42:55Z gcosmo $
 26 //                                                 27 //
 27 // -------------------------------------------     28 // -------------------------------------------------------------------
 28 //                                                 29 //
 29 // GEANT4 Class file                               30 // GEANT4 Class file
 30 //                                                 31 //
 31 //                                                 32 //
 32 // File name:     G4EmSaturation                   33 // File name:     G4EmSaturation
 33 //                                                 34 //
 34 // Author:        Vladimir Ivanchenko              35 // Author:        Vladimir Ivanchenko
 35 //                                                 36 //
 36 // Creation date: 18.02.2008                       37 // Creation date: 18.02.2008
 37 //                                                 38 //
 38 // Modifications:                                  39 // Modifications:
 39 //                                                 40 //
 40 // -------------------------------------------     41 // -------------------------------------------------------------
 41                                                    42 
 42 //....oooOO0OOooo........oooOO0OOooo........oo     43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 43 //....oooOO0OOooo........oooOO0OOooo........oo     44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 44                                                    45 
 45 #include "G4EmSaturation.hh"                       46 #include "G4EmSaturation.hh"
 46 #include "G4PhysicalConstants.hh"                  47 #include "G4PhysicalConstants.hh"
 47 #include "G4SystemOfUnits.hh"                      48 #include "G4SystemOfUnits.hh"
 48 #include "G4LossTableManager.hh"                   49 #include "G4LossTableManager.hh"
 49 #include "G4NistManager.hh"                        50 #include "G4NistManager.hh"
 50 #include "G4Material.hh"                           51 #include "G4Material.hh"
 51 #include "G4MaterialCutsCouple.hh"                 52 #include "G4MaterialCutsCouple.hh"
 52 #include "G4ParticleTable.hh"                      53 #include "G4ParticleTable.hh"
 53                                                    54 
 54 //....oooOO0OOooo........oooOO0OOooo........oo     55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 55                                                    56 
 56 std::size_t G4EmSaturation::nMaterials = 0;    << 
 57 std::vector<G4double> G4EmSaturation::massFact << 
 58 std::vector<G4double> G4EmSaturation::effCharg << 
 59 std::vector<G4double> G4EmSaturation::g4MatDat << 
 60 std::vector<G4String> G4EmSaturation::g4MatNam << 
 61                                                << 
 62 G4EmSaturation::G4EmSaturation(G4int verb)         57 G4EmSaturation::G4EmSaturation(G4int verb) 
                                                   >>  58   : manager(0)
 63 {                                                  59 {
 64   verbose = verb;                                  60   verbose = verb;
 65   nWarnings = nG4Birks = 0;                    <<  61   manager = 0;
                                                   >>  62 
                                                   >>  63   curMaterial = 0;
                                                   >>  64   curBirks    = 0.0;
                                                   >>  65   curRatio    = 1.0;
                                                   >>  66   curChargeSq = 1.0;
                                                   >>  67   nMaterials  = nWarnings = 0;
 66                                                    68 
 67   electron = nullptr;                          <<  69   electron = 0;
 68   proton   = nullptr;                          <<  70   proton   = 0;
 69   nist     = G4NistManager::Instance();            71   nist     = G4NistManager::Instance();
 70   InitialiseG4Saturation();                    <<  72 
                                                   >>  73   InitialiseG4materials(); 
 71 }                                                  74 }
 72                                                    75 
 73 //....oooOO0OOooo........oooOO0OOooo........oo     76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 74                                                    77 
 75 G4EmSaturation::~G4EmSaturation() = default;   <<  78 G4EmSaturation::~G4EmSaturation()
                                                   >>  79 {}
 76                                                    80 
 77 //....oooOO0OOooo........oooOO0OOooo........oo     81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 78                                                    82 
 79 G4double G4EmSaturation::VisibleEnergyDepositi     83 G4double G4EmSaturation::VisibleEnergyDeposition(
 80                                       const G4     84                                       const G4ParticleDefinition* p, 
 81                                       const G4 <<  85               const G4MaterialCutsCouple* couple, 
 82                                       G4double <<  86               G4double length,
 83                                       G4double <<  87               G4double edep,
 84                                       G4double <<  88               G4double niel)
 85 {                                                  89 {
 86   // no energy deposition                      << 
 87   if(edep <= 0.0) { return 0.0; }                  90   if(edep <= 0.0) { return 0.0; }
 88                                                    91 
 89   // zero step length may happens only if step << 
 90   // is applied, in that case saturation shoul << 
 91   if(length <= 0.0) { return edep; }           << 
 92                                                << 
 93   G4double evis = edep;                            92   G4double evis = edep;
 94   G4double bfactor = couple->GetMaterial()->Ge <<  93   G4double bfactor = FindBirksCoefficient(couple->GetMaterial());
 95                                                    94 
 96   if(bfactor > 0.0) {                              95   if(bfactor > 0.0) { 
 97                                                    96 
                                                   >>  97     G4int pdgCode = p->GetPDGEncoding();
 98     // atomic relaxations for gamma incident       98     // atomic relaxations for gamma incident
 99     if(22 ==  p->GetPDGEncoding()) {           <<  99     if(22 == pdgCode && electron) {
100       //G4cout << "%% gamma edep= " << edep/ke << 100       //G4cout << "%% gamma edep= " << edep/keV << " keV " <<manager << G4endl; 
101       evis /= (1.0 + bfactor*edep/             << 101       evis /= (1.0 + bfactor*edep/manager->GetRange(electron,edep,couple));
102         G4LossTableManager::Instance()->GetRan << 
103                                                   102 
104       // energy loss                              103       // energy loss
105     } else {                                      104     } else {
106                                                   105 
107       // protections                              106       // protections
108       G4double nloss = std::max(niel, 0.0);    << 107       G4double nloss = niel;
                                                   >> 108       if(nloss < 0.0) { nloss = 0.0; }
109       G4double eloss = edep - nloss;              109       G4double eloss = edep - nloss;
110                                                   110 
111       // neutrons and neutral hadrons             111       // neutrons and neutral hadrons
112       if(0.0 == p->GetPDGCharge() || eloss < 0 << 112       if(0.0 == p->GetPDGCharge() || eloss < 0.0 || length <= 0.0) {
113         nloss = edep;                          << 113   nloss = edep;
114         eloss = 0.0;                              114         eloss = 0.0;
115       } else {                                 << 
116                                                << 
117   // continues energy loss                     << 
118   eloss /= (1.0 + bfactor*eloss/length);       << 
119       }                                           115       }
                                                   >> 116 
                                                   >> 117       // continues energy loss
                                                   >> 118       if(eloss > 0.0) { eloss /= (1.0 + bfactor*eloss/length); }
                                                   >> 119  
120       // non-ionizing energy loss                 120       // non-ionizing energy loss
121       if(nloss > 0.0) {                        << 121       if(nloss > 0.0 && proton) {
122         std::size_t idx = couple->GetMaterial( << 122         G4double escaled = nloss*curRatio;
123         G4double escaled = nloss*massFactors[i << 123   /*
124   /*                                           << 
125         G4cout << "%% p edep= " << nloss/keV <    124         G4cout << "%% p edep= " << nloss/keV << " keV  Escaled= " 
126                << escaled << " MeV  in " << co << 125          << escaled << " MeV  in " << couple->GetMaterial()->GetName()
127                << "  " << p->GetParticleName() << 126          << "  " << p->GetParticleName()
128                << G4endl;                      << 127          << G4endl; 
129   G4cout << proton->GetParticleName() << G4end << 
130   */                                              128   */
131         G4double range = G4LossTableManager::I << 129         G4double range = manager->GetRange(proton,escaled,couple)/curChargeSq; 
132           ->GetRange(proton,escaled,couple)/ef << 130   nloss /= (1.0 + bfactor*nloss/range);
133         nloss /= (1.0 + bfactor*nloss/range);  << 
134       }                                           131       }
                                                   >> 132 
135       evis = eloss + nloss;                       133       evis = eloss + nloss;
136     }                                             134     }
137   }                                               135   }
                                                   >> 136   
138   return evis;                                    137   return evis;
139 }                                                 138 }
140                                                   139 
141 //....oooOO0OOooo........oooOO0OOooo........oo    140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
142                                                   141 
143 void G4EmSaturation::InitialiseG4Saturation()  << 
144 {                                              << 
145   if(nMaterials == G4Material::GetNumberOfMate << 
146   nMaterials = G4Material::GetNumberOfMaterial << 
147   massFactors.resize(nMaterials, 1.0);         << 
148   effCharges.resize(nMaterials, 1.0);          << 
149                                                << 
150   if(0 == nG4Birks) {  InitialiseG4materials() << 
151                                                << 
152   for(std::size_t i=0; i<nMaterials; ++i) {    << 
153     InitialiseBirksCoefficient((*G4Material::G << 
154   }                                            << 
155   if(verbose > 0) { DumpBirksCoefficients(); } << 
156 }                                              << 
157                                                << 
158 //....oooOO0OOooo........oooOO0OOooo........oo << 
159                                                << 
160 G4double G4EmSaturation::FindG4BirksCoefficien    142 G4double G4EmSaturation::FindG4BirksCoefficient(const G4Material* mat)
161 {                                                 143 {
162   if(0 == nG4Birks) {  InitialiseG4materials() << 
163                                                << 
164   G4String name = mat->GetName();                 144   G4String name = mat->GetName();
165   // is this material in the vector?              145   // is this material in the vector?
166                                                   146   
167   for(G4int j=0; j<nG4Birks; ++j) {               147   for(G4int j=0; j<nG4Birks; ++j) {
168     if(name == g4MatNames[j]) {                   148     if(name == g4MatNames[j]) {
169       if(verbose > 0)                             149       if(verbose > 0) 
170         G4cout << "### G4EmSaturation::FindG4B << 150   G4cout << "### G4EmSaturation::FindG4BirksCoefficient for "
171                << name << " is " << g4MatData[ << 151          << name << " is " << g4MatData[j]*MeV/mm << " mm/MeV "
172                << G4endl;                      << 152          << G4endl;
173       return g4MatData[j];                        153       return g4MatData[j];
174     }                                             154     }
175   }                                               155   }
176   return 0.0;                                  << 156   return FindBirksCoefficient(mat);
177 }                                                 157 }
178                                                   158 
179 //....oooOO0OOooo........oooOO0OOooo........oo    159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
180                                                   160 
181 void G4EmSaturation::InitialiseBirksCoefficien    161 void G4EmSaturation::InitialiseBirksCoefficient(const G4Material* mat)
182 {                                                 162 {
183   // electron and proton should exist in any c    163   // electron and proton should exist in any case
184   if(nullptr == electron) {                    << 164   if(!manager) {
                                                   >> 165     manager = G4LossTableManager::Instance();
185     electron = G4ParticleTable::GetParticleTab    166     electron = G4ParticleTable::GetParticleTable()->FindParticle("e-");
186     proton = G4ParticleTable::GetParticleTable    167     proton = G4ParticleTable::GetParticleTable()->FindParticle("proton");
187     if(nullptr == electron) {                  << 
188       G4Exception("G4EmSaturation::InitialiseB << 
189       FatalException, "electron should exist") << 
190     }                                          << 
191   }                                               168   }
192                                                   169 
193   G4double curBirks = mat->GetIonisation()->Ge << 170   curMaterial = mat;
                                                   >> 171   curBirks = 0.0;
                                                   >> 172   curRatio = 1.0;
                                                   >> 173   curChargeSq = 1.0;
                                                   >> 174 
                                                   >> 175   // seach in the run-time list
                                                   >> 176   for(G4int i=0; i<nMaterials; ++i) {
                                                   >> 177     if(mat == matPointers[i]) {
                                                   >> 178       curBirks = mat->GetIonisation()->GetBirksConstant();
                                                   >> 179       curRatio = massFactors[i];
                                                   >> 180       curChargeSq = effCharges[i];
                                                   >> 181       return;
                                                   >> 182     }
                                                   >> 183   }
194                                                   184 
195   G4String name = mat->GetName();                 185   G4String name = mat->GetName();
                                                   >> 186   curBirks = mat->GetIonisation()->GetBirksConstant();
196                                                   187 
197   // material has no Birks coeffitient defined    188   // material has no Birks coeffitient defined
198   // seach in the Geant4 list                     189   // seach in the Geant4 list
199   if(curBirks == 0.0) {                           190   if(curBirks == 0.0) {
200     for(G4int j=0; j<nG4Birks; ++j) {             191     for(G4int j=0; j<nG4Birks; ++j) {
201       if(name == g4MatNames[j]) {                 192       if(name == g4MatNames[j]) {
202         mat->GetIonisation()->SetBirksConstant << 193   mat->GetIonisation()->SetBirksConstant(g4MatData[j]);
203         curBirks = g4MatData[j];                  194         curBirks = g4MatData[j];
204         break;                                    195         break;
205       }                                           196       }
206     }                                             197     }
207   }                                               198   }
208                                                   199 
209   if(curBirks == 0.0) { return; }              << 200   if(curBirks == 0.0) {
                                                   >> 201     if(0 < nWarnings) {
                                                   >> 202       ++nWarnings;
                                                   >> 203       G4ExceptionDescription ed;
                                                   >> 204       ed << "Birks constants are not defined for material " << name 
                                                   >> 205    << " ! \n Define Birks constants for the material" 
                                                   >> 206    << " or not apply saturation.";
                                                   >> 207       G4Exception("G4EmSaturation::InitialiseBirksCoefficient", "em0088",
                                                   >> 208       JustWarning, ed);
                                                   >> 209     }
                                                   >> 210     return;
                                                   >> 211   }
210                                                   212 
211   // compute mean mass ratio                      213   // compute mean mass ratio
212   G4double curRatio = 0.0;                     << 214   curRatio = 0.0;
213   G4double curChargeSq = 0.0;                  << 215   curChargeSq = 0.0;
214   G4double norm = 0.0;                            216   G4double norm = 0.0;
215   const G4ElementVector* theElementVector = ma    217   const G4ElementVector* theElementVector = mat->GetElementVector();
216   const G4double* theAtomNumDensityVector = ma    218   const G4double* theAtomNumDensityVector = mat->GetVecNbOfAtomsPerVolume();
217   std::size_t nelm = mat->GetNumberOfElements( << 219   size_t nelm = mat->GetNumberOfElements();
218   for (std::size_t i=0; i<nelm; ++i) {         << 220   for (size_t i=0; i<nelm; ++i) {
219     const G4Element* elm = (*theElementVector)    221     const G4Element* elm = (*theElementVector)[i];
220     G4int Z = elm->GetZasInt();                << 222     G4double Z = elm->GetZ();
221     G4double w = theAtomNumDensityVector[i];   << 223     G4double w = Z*Z*theAtomNumDensityVector[i];
222     curRatio += w/nist->GetAtomicMassAmu(Z);   << 224     curRatio += w/nist->GetAtomicMassAmu(G4int(Z));
223     curChargeSq += (Z*Z)*w;                    << 225     curChargeSq = Z*Z*w;
224     norm += w;                                    226     norm += w;
225   }                                               227   }
226   if ( norm > 0.0) { norm = 1.0/norm; }        << 228   curRatio *= proton_mass_c2/norm;
227   curRatio *= (CLHEP::proton_mass_c2*norm);    << 229   curChargeSq /= norm;
228   curChargeSq *= norm;                         << 
229                                                   230 
230   // store results                                231   // store results
231   std::size_t idx = mat->GetIndex();           << 232   matPointers.push_back(mat);
232   massFactors[idx] = curRatio;                 << 233   matNames.push_back(name);
233   effCharges[idx] = curChargeSq;               << 234   massFactors.push_back(curRatio);
                                                   >> 235   effCharges.push_back(curChargeSq);
                                                   >> 236   nMaterials++;
                                                   >> 237   if(verbose > 0) {
                                                   >> 238     G4cout << "### G4EmSaturation::FindBirksCoefficient Birks coefficient for "
                                                   >> 239      << name << "  " << curBirks*MeV/mm << " mm/MeV" << G4endl;
                                                   >> 240   }
                                                   >> 241   return;
234 }                                                 242 }
235                                                   243 
236 //....oooOO0OOooo........oooOO0OOooo........oo    244 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
237                                                   245 
238 void G4EmSaturation::DumpBirksCoefficients()      246 void G4EmSaturation::DumpBirksCoefficients()
239 {                                                 247 {
240   G4cout << "### Birks coefficients used in ru << 248   if(nMaterials > 0) {
241   const G4MaterialTable* mtable = G4Material:: << 249     G4cout << "### Birks coeffitients used in run time" << G4endl;
242   for(std::size_t i=0; i<nMaterials; ++i) {    << 250     for(G4int i=0; i<nMaterials; ++i) {
243     const G4Material* mat = (*mtable)[i];      << 251       G4double br = matPointers[i]->GetIonisation()->GetBirksConstant();
244     G4double br = mat->GetIonisation()->GetBir << 252       G4cout << "   " << matNames[i] << "     " 
245     if(br > 0.0) {                             << 
246       G4cout << "   " << mat->GetName() << "   << 
247        << br*MeV/mm << " mm/MeV" << "     "       253        << br*MeV/mm << " mm/MeV" << "     "
248        << br*mat->GetDensity()*MeV*cm2/g       << 254        << br*matPointers[i]->GetDensity()*MeV*cm2/g 
249        << " g/cm^2/MeV  massFactor=  " << mass << 255        << " g/cm^2/MeV" 
250        << " effCharge= " << effCharges[i] << G << 256        << G4endl;
251     }                                             257     }
252   }                                               258   }
253 }                                                 259 }
254                                                   260 
255 //....oooOO0OOooo........oooOO0OOooo........oo    261 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
256                                                   262 
257 void G4EmSaturation::DumpG4BirksCoefficients()    263 void G4EmSaturation::DumpG4BirksCoefficients()
258 {                                                 264 {
259   if(nG4Birks > 0) {                              265   if(nG4Birks > 0) {
260     G4cout << "### Birks coefficients for Gean << 266     G4cout << "### Birks coeffitients for Geant4 materials" << G4endl;
261     for(G4int i=0; i<nG4Birks; ++i) {             267     for(G4int i=0; i<nG4Birks; ++i) {
262       G4cout << "   " << g4MatNames[i] << "       268       G4cout << "   " << g4MatNames[i] << "   " 
263              << g4MatData[i]*MeV/mm << " mm/Me << 269        << g4MatData[i]*MeV/mm << " mm/MeV" << G4endl;
264     }                                             270     }
265   }                                               271   }
266 }                                                 272 }
267                                                   273 
268 //....oooOO0OOooo........oooOO0OOooo........oo    274 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
269                                                   275 
270 void G4EmSaturation::InitialiseG4materials()      276 void G4EmSaturation::InitialiseG4materials()
271 {                                                 277 {
272   nG4Birks = 4;                                << 
273   g4MatData.reserve(nG4Birks);                 << 
274                                                << 
275   // M.Hirschberg et al., IEEE Trans. Nuc. Sci    278   // M.Hirschberg et al., IEEE Trans. Nuc. Sci. 39 (1992) 511
276   // SCSN-38 kB = 0.00842 g/cm^2/MeV; rho = 1.    279   // SCSN-38 kB = 0.00842 g/cm^2/MeV; rho = 1.06 g/cm^3
277   g4MatNames.push_back("G4_POLYSTYRENE");         280   g4MatNames.push_back("G4_POLYSTYRENE");
278   g4MatData.push_back(0.07943*mm/MeV);            281   g4MatData.push_back(0.07943*mm/MeV);
279                                                   282 
280   // C.Fabjan (private communication)             283   // C.Fabjan (private communication)
281   // kB = 0.006 g/cm^2/MeV; rho = 7.13 g/cm^3     284   // kB = 0.006 g/cm^2/MeV; rho = 7.13 g/cm^3
282   g4MatNames.push_back("G4_BGO");                 285   g4MatNames.push_back("G4_BGO");
283   g4MatData.push_back(0.008415*mm/MeV);           286   g4MatData.push_back(0.008415*mm/MeV);
284                                                   287 
285   // A.Ribon analysis of publications             288   // A.Ribon analysis of publications
286   // Scallettar et al., Phys. Rev. A25 (1982)     289   // Scallettar et al., Phys. Rev. A25 (1982) 2419.
287   // NIM A 523 (2004) 275.                        290   // NIM A 523 (2004) 275. 
288   // kB = 0.022 g/cm^2/MeV; rho = 1.396 g/cm^3    291   // kB = 0.022 g/cm^2/MeV; rho = 1.396 g/cm^3; 
289   // ATLAS Efield = 10 kV/cm provide the stron << 292   // ATLAS Efield = 10 kV/cm provide the strongest effect 
290   // kB = 0.1576*mm/MeV                        << 
291   // A. Kiryunin and P.Strizenec "Geant4 hadro << 
292   // working group meeting " kB = 0.041/9.13 g << 
293   g4MatNames.push_back("G4_lAr");                 293   g4MatNames.push_back("G4_lAr");
294   g4MatData.push_back(0.032*mm/MeV);           << 294   g4MatData.push_back(0.1576*mm/MeV);
295                                                   295 
296   //G4_BARIUM_FLUORIDE                            296   //G4_BARIUM_FLUORIDE
297   //G4_CESIUM_IODIDE                              297   //G4_CESIUM_IODIDE
298   //G4_GEL_PHOTO_EMULSION                         298   //G4_GEL_PHOTO_EMULSION
299   //G4_PHOTO_EMULSION                             299   //G4_PHOTO_EMULSION
300   //G4_PLASTIC_SC_VINYLTOLUENE                    300   //G4_PLASTIC_SC_VINYLTOLUENE
301   //G4_SODIUM_IODIDE                              301   //G4_SODIUM_IODIDE
302   //G4_STILBENE                                   302   //G4_STILBENE
303   //G4_lAr                                        303   //G4_lAr
304                                                << 304   //G4_PbWO4
305   //G4_PbWO4 - CMS value                       << 
306   g4MatNames.push_back("G4_PbWO4");            << 
307   g4MatData.push_back(0.0333333*mm/MeV);       << 
308                                                << 
309   //G4_Lucite                                     305   //G4_Lucite
310                                                   306 
                                                   >> 307   nG4Birks = g4MatData.size();
311 }                                                 308 }
312                                                   309 
313 //....oooOO0OOooo........oooOO0OOooo........oo    310 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
314                                                   311