Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/underground_physics/src/DMXPhysicsList.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 /examples/advanced/underground_physics/src/DMXPhysicsList.cc (Version 11.3.0) and /examples/advanced/underground_physics/src/DMXPhysicsList.cc (Version 9.0)


  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 //                                                 26 //
 27 // -------------------------------------------     27 // --------------------------------------------------------------
 28 //   GEANT 4 - Underground Dark Matter Detecto     28 //   GEANT 4 - Underground Dark Matter Detector Advanced Example
 29 //                                                 29 //
 30 //      For information related to this code c     30 //      For information related to this code contact: Alex Howard
 31 //      e-mail: alexander.howard@cern.ch           31 //      e-mail: alexander.howard@cern.ch
 32 // -------------------------------------------     32 // --------------------------------------------------------------
 33 // Comments                                        33 // Comments
 34 //                                                 34 //
 35 //                  Underground Advanced           35 //                  Underground Advanced
 36 //               by A. Howard and H. Araujo        36 //               by A. Howard and H. Araujo 
 37 //                    (27th November 2001)         37 //                    (27th November 2001)
 38 //                                                 38 //
 39 // PhysicsList program                             39 // PhysicsList program
 40 //                                                 40 //
 41 // Modified:                                       41 // Modified:
 42 //                                                 42 //
 43 // 14-02-03 Fix bugs in msc and hIon instancia     43 // 14-02-03 Fix bugs in msc and hIon instanciation + cut per region
 44 //                                                 44 //
 45 // 05-02-05 AH - changes to G4Decay - added is     45 // 05-02-05 AH - changes to G4Decay - added is not short lived protection
 46 //          and redefined particles to allow n     46 //          and redefined particles to allow non-static creation
 47 //          i.e. changed construction to G4Mes     47 //          i.e. changed construction to G4MesonConstructor, G4BaryonConstructor
 48 //                                             << 
 49 // 23-10-09 LP - migrated EM physics from the  << 
 50 //          the new G4Livermore model implemen << 
 51 //                                                 48 //
 52 // -------------------------------------------     49 // --------------------------------------------------------------
 53                                                    50 
 54 #include <iomanip>                             << 
 55                                                << 
 56 #include "DMXPhysicsList.hh"                       51 #include "DMXPhysicsList.hh"
 57                                                    52 
 58 #include "globals.hh"                              53 #include "globals.hh"
 59 #include "G4SystemOfUnits.hh"                  << 
 60 #include "G4ProcessManager.hh"                     54 #include "G4ProcessManager.hh"
 61 #include "G4ProcessVector.hh"                      55 #include "G4ProcessVector.hh"
 62                                                    56 
 63 #include "G4ParticleDefinition.hh"                 57 #include "G4ParticleDefinition.hh"
 64 #include "G4ParticleWithCuts.hh"                   58 #include "G4ParticleWithCuts.hh"
 65 #include "G4ParticleTypes.hh"                      59 #include "G4ParticleTypes.hh"
 66 #include "G4ParticleTable.hh"                      60 #include "G4ParticleTable.hh"
 67                                                    61 
 68 #include "G4ios.hh"                                62 #include "G4ios.hh"
 69 #include "G4UserLimits.hh"                     <<  63 #include <iomanip>  
 70                                                << 
 71 #include "G4MesonConstructor.hh"               << 
 72 #include "G4BaryonConstructor.hh"              << 
 73 #include "G4IonConstructor.hh"                 << 
 74 #include "G4ShortLivedConstructor.hh"          << 
 75                                                << 
 76 #include "DMXMaxTimeCuts.hh"                   << 
 77 #include "DMXMinEkineCuts.hh"                  << 
 78 #include "G4StepLimiter.hh"                    << 
 79                                                << 
 80 // gamma                                       << 
 81 #include "G4PhotoElectricEffect.hh"            << 
 82 #include "G4LivermorePhotoElectricModel.hh"    << 
 83                                                << 
 84 #include "G4ComptonScattering.hh"              << 
 85 #include "G4LivermoreComptonModel.hh"          << 
 86                                                << 
 87 #include "G4GammaConversion.hh"                << 
 88 #include "G4BetheHeitler5DModel.hh"            << 
 89                                                << 
 90 #include "G4RayleighScattering.hh"             << 
 91 #include "G4LivermoreRayleighModel.hh"         << 
 92                                                << 
 93 // e-                                          << 
 94 #include "G4eMultipleScattering.hh"            << 
 95                                                << 
 96 #include "G4eIonisation.hh"                    << 
 97 #include "G4LivermoreIonisationModel.hh"       << 
 98                                                << 
 99 #include "G4eBremsstrahlung.hh"                << 
100 #include "G4UniversalFluctuation.hh"           << 
101                                                << 
102 // e+                                          << 
103 #include "G4eIonisation.hh"                    << 
104 #include "G4eBremsstrahlung.hh"                << 
105 #include "G4eplusAnnihilation.hh"              << 
106                                                << 
107 // alpha and GenericIon and deuterons, triton, << 
108 //muon:                                        << 
109 #include "G4MuIonisation.hh"                   << 
110 #include "G4MuBremsstrahlung.hh"               << 
111 #include "G4MuPairProduction.hh"               << 
112 #include "G4MuMultipleScattering.hh"           << 
113 #include "G4MuonMinusCapture.hh"               << 
114                                                << 
115 //OTHERS:                                      << 
116 #include "G4hIonisation.hh"                    << 
117 #include "G4hMultipleScattering.hh"            << 
118 #include "G4hBremsstrahlung.hh"                << 
119 #include "G4ionIonisation.hh"                  << 
120 #include "G4IonParametrisedLossModel.hh"       << 
121 #include "G4NuclearStopping.hh"                << 
122                                                << 
123 //em process options to allow msc step-limitat << 
124 #include "G4EmParameters.hh"                   << 
125 #include "G4VAtomDeexcitation.hh"              << 
126 #include "G4UAtomicDeexcitation.hh"            << 
127 #include "G4LossTableManager.hh"               << 
128                                                << 
129 #include "G4Scintillation.hh"                  << 
130 #include "G4OpAbsorption.hh"                   << 
131 #include "G4OpBoundaryProcess.hh"              << 
132 #include "G4OpticalParameters.hh"              << 
133                                                << 
134 // Elastic processes:                          << 
135 #include "G4HadronElasticProcess.hh"           << 
136 #include "G4ChipsElasticModel.hh"              << 
137 #include "G4ElasticHadrNucleusHE.hh"           << 
138                                                << 
139 // Inelastic processes:                        << 
140 #include "G4HadronInelasticProcess.hh"         << 
141                                                << 
142 // High energy FTFP model and Bertini cascade  << 
143 #include "G4FTFModel.hh"                       << 
144 #include "G4LundStringFragmentation.hh"        << 
145 #include "G4ExcitedStringDecay.hh"             << 
146 #include "G4PreCompoundModel.hh"               << 
147 #include "G4GeneratorPrecompoundInterface.hh"  << 
148 #include "G4TheoFSGenerator.hh"                << 
149 #include "G4CascadeInterface.hh"               << 
150                                                << 
151 // Cross sections                              << 
152 #include "G4VCrossSectionDataSet.hh"           << 
153 #include "G4CrossSectionDataSetRegistry.hh"    << 
154                                                << 
155 #include "G4CrossSectionElastic.hh"            << 
156 #include "G4CrossSectionInelastic.hh"          << 
157 #include "G4BGGPionElasticXS.hh"               << 
158 #include "G4BGGPionInelasticXS.hh"             << 
159 #include "G4AntiNuclElastic.hh"                << 
160                                                << 
161 #include "G4CrossSectionInelastic.hh"          << 
162 #include "G4BGGNucleonInelasticXS.hh"          << 
163 #include "G4BGGNucleonElasticXS.hh"            << 
164 #include "G4NeutronInelasticXS.hh"             << 
165 #include "G4NeutronElasticXS.hh"               << 
166 #include "G4ComponentAntiNuclNuclearXS.hh"     << 
167 #include "G4ComponentGGNuclNuclXsc.hh"         << 
168 #include "G4ComponentGGHadronNucleusXsc.hh"    << 
169                                                << 
170 #include "G4HadronElastic.hh"                  << 
171 #include "G4NeutronCaptureProcess.hh"          << 
172                                                << 
173 // Neutron high-precision models: <20 MeV      << 
174 #include "G4ParticleHPElastic.hh"              << 
175 #include "G4ParticleHPElasticData.hh"          << 
176 #include "G4ParticleHPCapture.hh"              << 
177 #include "G4ParticleHPCaptureData.hh"          << 
178 #include "G4ParticleHPInelastic.hh"            << 
179 #include "G4ParticleHPInelasticData.hh"        << 
180                                                << 
181 // Stopping processes                          << 
182 #include "G4HadronStoppingProcess.hh"          << 
183 #include "G4HadronicAbsorptionBertini.hh"      << 
184 #include "G4HadronicAbsorptionFritiof.hh"      << 
185                                                    64 
186 #include "G4HadronicParameters.hh"             <<  65 #include "G4UserLimits.hh"
187                                                    66 
188 #include "G4Decay.hh"                          << 
189 #include "G4RadioactiveDecay.hh"               << 
190 #include "G4PhysicsListHelper.hh"              << 
191 #include "G4NuclideTable.hh"                   << 
192 #include "G4NuclearLevelData.hh"               << 
193                                                    67 
194 // Constructor ///////////////////////////////     68 // Constructor /////////////////////////////////////////////////////////////
195 DMXPhysicsList::DMXPhysicsList() : G4VUserPhys     69 DMXPhysicsList::DMXPhysicsList() : G4VUserPhysicsList() 
196 {                                                  70 {
197                                                    71 
198   defaultCutValue     = 1.0*micrometer; //         72   defaultCutValue     = 1.0*micrometer; //
199   cutForGamma         = defaultCutValue;           73   cutForGamma         = defaultCutValue;
200   cutForElectron      = 1.0*nanometer;             74   cutForElectron      = 1.0*nanometer;
201   cutForPositron      = defaultCutValue;           75   cutForPositron      = defaultCutValue;
202                                                    76 
203   VerboseLevel = 1;                                77   VerboseLevel = 1;
204   OpVerbLevel = 0;                                 78   OpVerbLevel = 0;
205                                                    79 
206   //set a finer grid of the physic tables in o << 
207   //former LowEnergy models have 200 bins up t << 
208   G4EmParameters* param = G4EmParameters::Inst << 
209   param->SetMaxEnergy(100*GeV);                << 
210   param->SetNumberOfBinsPerDecade(20);         << 
211   param->SetMscStepLimitType(fMinimal);        << 
212   param->SetFluo(true);                        << 
213   param->SetPixe(true);                        << 
214   param->SetAuger(true);                       << 
215                                                << 
216   G4EmParameters::Instance()->AddPhysics("Worl << 
217   G4DeexPrecoParameters* deex = G4NuclearLevel << 
218   deex->SetStoreICLevelData(true);             << 
219   deex->SetMaxLifeTime(G4NuclideTable::GetInst << 
220                        /std::log(2.));         << 
221   SetVerboseLevel(VerboseLevel);                   80   SetVerboseLevel(VerboseLevel);
222 }                                                  81 }
223                                                    82 
                                                   >>  83 
224 // Destructor ////////////////////////////////     84 // Destructor //////////////////////////////////////////////////////////////
225 DMXPhysicsList::~DMXPhysicsList()                  85 DMXPhysicsList::~DMXPhysicsList() 
226 {;}                                                86 {;}
227                                                    87 
                                                   >>  88 
228 // Construct Particles ///////////////////////     89 // Construct Particles /////////////////////////////////////////////////////
229 void DMXPhysicsList::ConstructParticle()           90 void DMXPhysicsList::ConstructParticle() 
230 {                                                  91 {
                                                   >>  92 
231   // In this method, static member functions s     93   // In this method, static member functions should be called
232   // for all particles which you want to use.      94   // for all particles which you want to use.
233   // This ensures that objects of these partic     95   // This ensures that objects of these particle types will be
234   // created in the program.                       96   // created in the program. 
235                                                    97 
236   ConstructMyBosons();                             98   ConstructMyBosons();
237   ConstructMyLeptons();                            99   ConstructMyLeptons();
238   ConstructMyHadrons();                           100   ConstructMyHadrons();
239   ConstructMyShortLiveds();                       101   ConstructMyShortLiveds();
                                                   >> 102 
240 }                                                 103 }
241                                                   104 
                                                   >> 105 
242 // construct Bosons://////////////////////////    106 // construct Bosons://///////////////////////////////////////////////////
243 void DMXPhysicsList::ConstructMyBosons()          107 void DMXPhysicsList::ConstructMyBosons()
244 {                                                 108 {
245   // pseudo-particles                             109   // pseudo-particles
246   G4Geantino::GeantinoDefinition();               110   G4Geantino::GeantinoDefinition();
247   G4ChargedGeantino::ChargedGeantinoDefinition    111   G4ChargedGeantino::ChargedGeantinoDefinition();
248                                                   112   
249   // gamma                                        113   // gamma
250   G4Gamma::GammaDefinition();                     114   G4Gamma::GammaDefinition();
251                                                   115 
252   //OpticalPhotons                                116   //OpticalPhotons
253   G4OpticalPhoton::OpticalPhotonDefinition();     117   G4OpticalPhoton::OpticalPhotonDefinition();
254                                                   118 
255 }                                                 119 }
256                                                   120 
                                                   >> 121 
257 // construct Leptons://///////////////////////    122 // construct Leptons://///////////////////////////////////////////////////
258 void DMXPhysicsList::ConstructMyLeptons()         123 void DMXPhysicsList::ConstructMyLeptons()
259 {                                                 124 {
260   // leptons                                      125   // leptons
261   G4Electron::ElectronDefinition();               126   G4Electron::ElectronDefinition();
262   G4Positron::PositronDefinition();               127   G4Positron::PositronDefinition();
263   G4MuonPlus::MuonPlusDefinition();               128   G4MuonPlus::MuonPlusDefinition();
264   G4MuonMinus::MuonMinusDefinition();             129   G4MuonMinus::MuonMinusDefinition();
265                                                   130 
266   G4NeutrinoE::NeutrinoEDefinition();             131   G4NeutrinoE::NeutrinoEDefinition();
267   G4AntiNeutrinoE::AntiNeutrinoEDefinition();     132   G4AntiNeutrinoE::AntiNeutrinoEDefinition();
268   G4NeutrinoMu::NeutrinoMuDefinition();           133   G4NeutrinoMu::NeutrinoMuDefinition();
269   G4AntiNeutrinoMu::AntiNeutrinoMuDefinition()    134   G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
270 }                                                 135 }
271                                                   136 
                                                   >> 137 
                                                   >> 138 #include "G4MesonConstructor.hh"
                                                   >> 139 #include "G4BaryonConstructor.hh"
                                                   >> 140 #include "G4IonConstructor.hh"
                                                   >> 141 
272 // construct Hadrons://///////////////////////    142 // construct Hadrons://///////////////////////////////////////////////////
273 void DMXPhysicsList::ConstructMyHadrons()         143 void DMXPhysicsList::ConstructMyHadrons()
274 {                                                 144 {
275  //  mesons                                       145  //  mesons
276   G4MesonConstructor mConstructor;                146   G4MesonConstructor mConstructor;
277   mConstructor.ConstructParticle();               147   mConstructor.ConstructParticle();
278                                                   148 
279  //  baryons                                      149  //  baryons
280   G4BaryonConstructor bConstructor;               150   G4BaryonConstructor bConstructor;
281   bConstructor.ConstructParticle();               151   bConstructor.ConstructParticle();
282                                                   152 
283  //  ions                                         153  //  ions
284   G4IonConstructor iConstructor;                  154   G4IonConstructor iConstructor;
285   iConstructor.ConstructParticle();               155   iConstructor.ConstructParticle();
                                                   >> 156 
286 }                                                 157 }
287                                                   158 
                                                   >> 159 
288 // construct Shortliveds://///////////////////    160 // construct Shortliveds://///////////////////////////////////////////////////
289 void DMXPhysicsList::ConstructMyShortLiveds()     161 void DMXPhysicsList::ConstructMyShortLiveds()
290 {                                                 162 {
291   G4ShortLivedConstructor slConstructor;       << 163   // ShortLiveds
292   slConstructor.ConstructParticle();           << 164   ;
293 }                                                 165 }
294                                                   166 
                                                   >> 167 
                                                   >> 168 
                                                   >> 169 
295 // Construct Processes ///////////////////////    170 // Construct Processes //////////////////////////////////////////////////////
296 void DMXPhysicsList::ConstructProcess()           171 void DMXPhysicsList::ConstructProcess() 
297 {                                                 172 {
                                                   >> 173 
298   AddTransportation();                            174   AddTransportation();
299                                                   175 
300   ConstructEM();                                  176   ConstructEM();
301                                                   177 
302   ConstructOp();                                  178   ConstructOp();
303                                                   179 
304   ConstructHad();                                 180   ConstructHad();
305                                                   181 
306   ConstructGeneral();                             182   ConstructGeneral();
                                                   >> 183 
307 }                                                 184 }
308                                                   185 
                                                   >> 186 
309 // Transportation ////////////////////////////    187 // Transportation ///////////////////////////////////////////////////////////
                                                   >> 188 #include "DMXMaxTimeCuts.hh"
                                                   >> 189 #include "DMXMinEkineCuts.hh"
                                                   >> 190 
310 void DMXPhysicsList::AddTransportation() {        191 void DMXPhysicsList::AddTransportation() {
311                                                   192   
312   G4VUserPhysicsList::AddTransportation();        193   G4VUserPhysicsList::AddTransportation();
313                                                   194   
314   auto particleIterator=GetParticleIterator(); << 195   theParticleIterator->reset();
315   particleIterator->reset();                   << 196   while( (*theParticleIterator)() ){
316   while( (*particleIterator)() ){              << 197     G4ParticleDefinition* particle = theParticleIterator->value();
317     G4ParticleDefinition* particle = particleI << 
318     G4ProcessManager* pmanager = particle->Get    198     G4ProcessManager* pmanager = particle->GetProcessManager();
319     G4String particleName = particle->GetParti    199     G4String particleName = particle->GetParticleName();
320     // time cuts for ONLY neutrons:               200     // time cuts for ONLY neutrons:
321     if(particleName == "neutron")                 201     if(particleName == "neutron") 
322       pmanager->AddDiscreteProcess(new DMXMaxT << 202     pmanager->AddDiscreteProcess(new DMXMaxTimeCuts());
323     // Energy cuts to kill charged (embedded i    203     // Energy cuts to kill charged (embedded in method) particles:
324     pmanager->AddDiscreteProcess(new DMXMinEki    204     pmanager->AddDiscreteProcess(new DMXMinEkineCuts());
325                                                << 
326     // Step limit applied to all particles:    << 
327     pmanager->AddDiscreteProcess(new G4StepLim << 
328   }                                               205   }         
329 }                                                 206 }
330                                                   207 
                                                   >> 208 
331 // Electromagnetic Processes /////////////////    209 // Electromagnetic Processes ////////////////////////////////////////////////
332 // all charged particles                          210 // all charged particles
                                                   >> 211 #include "G4MultipleScattering.hh"
                                                   >> 212 
                                                   >> 213 // gamma
                                                   >> 214 #include "G4LowEnergyRayleigh.hh" 
                                                   >> 215 #include "G4LowEnergyPhotoElectric.hh"
                                                   >> 216 #include "G4LowEnergyCompton.hh"  
                                                   >> 217 #include "G4LowEnergyGammaConversion.hh" 
                                                   >> 218 
                                                   >> 219 
                                                   >> 220 // e-
                                                   >> 221 #include "G4LowEnergyIonisation.hh" 
                                                   >> 222 #include "G4LowEnergyBremsstrahlung.hh" 
                                                   >> 223 
                                                   >> 224 // e+
                                                   >> 225 #include "G4eIonisation.hh" 
                                                   >> 226 #include "G4eBremsstrahlung.hh" 
                                                   >> 227 #include "G4eplusAnnihilation.hh"
                                                   >> 228 
                                                   >> 229 
                                                   >> 230 // alpha and GenericIon and deuterons, triton, He3:
                                                   >> 231 //hIonisation #include "G4hLowEnergyIonisation.hh" -> moved to G4hIonisation
                                                   >> 232 #include "G4EnergyLossTables.hh"
                                                   >> 233 // hLowEnergyIonisation uses Ziegler 1988 as the default
                                                   >> 234 
                                                   >> 235 
                                                   >> 236 //muon:
                                                   >> 237 #include "G4MuIonisation.hh"
                                                   >> 238 #include "G4MuBremsstrahlung.hh"
                                                   >> 239 #include "G4MuPairProduction.hh"
                                                   >> 240 #include "G4MuonMinusCaptureAtRest.hh"
                                                   >> 241 
                                                   >> 242 //OTHERS:
                                                   >> 243 //#include "G4hIonisation.hh" // standard hadron ionisation
                                                   >> 244 
                                                   >> 245 //em process options to allow msc step-limitation to be switched off
                                                   >> 246 #include "G4EmProcessOptions.hh"
                                                   >> 247 
333 void DMXPhysicsList::ConstructEM() {              248 void DMXPhysicsList::ConstructEM() {
334                                                << 
335   G4LossTableManager* man = G4LossTableManager << 
336   man->SetAtomDeexcitation(new G4UAtomicDeexci << 
337                                                   249 
338   G4EmParameters* em_params = G4EmParameters:: << 250 // processes:
                                                   >> 251 
                                                   >> 252   G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric();
                                                   >> 253   G4LowEnergyIonisation* loweIon  = new G4LowEnergyIonisation();
                                                   >> 254   G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung();
                                                   >> 255 
                                                   >> 256   // note LowEIon uses proton as basis for its data-base, therefore
                                                   >> 257   // cannot specify different LowEnergyIonisation models for different
                                                   >> 258   // particles, but can change model globally for Ion, Alpha and Proton.
                                                   >> 259 
                                                   >> 260 
                                                   >> 261   //fluorescence apply specific cut for fluorescence from photons, electrons
                                                   >> 262   //and bremsstrahlung photons:
                                                   >> 263   G4double fluorcut = 250*eV;
                                                   >> 264   lowePhot->SetCutForLowEnSecPhotons(fluorcut);
                                                   >> 265   loweIon->SetCutForLowEnSecPhotons(fluorcut);
                                                   >> 266   loweBrem->SetCutForLowEnSecPhotons(fluorcut);
339                                                   267   
340   auto particleIterator=GetParticleIterator(); << 268   // setting tables explicitly for electronic stopping power
341   particleIterator->reset();                   << 269   //  ahadronLowEIon->SetElectronicStoppingPowerModel
342   while( (*particleIterator)() ){              << 270   //  (G4GenericIon::GenericIonDefinition(), "ICRU_R49p") ;
343     G4ParticleDefinition* particle = particleI << 271   //  ahadronLowEIon->SetElectronicStoppingPowerModel
                                                   >> 272   //  (G4Proton::ProtonDefinition(), "ICRU_R49p") ;
                                                   >> 273 
                                                   >> 274   // Switch off the Barkas and Bloch corrections
                                                   >> 275   //  ahadronLowEIon->SetBarkasOff();
                                                   >> 276 
                                                   >> 277 
                                                   >> 278   theParticleIterator->reset();
                                                   >> 279   while( (*theParticleIterator)() ){
                                                   >> 280     G4ParticleDefinition* particle = theParticleIterator->value();
344     G4ProcessManager* pmanager = particle->Get    281     G4ProcessManager* pmanager = particle->GetProcessManager();
345     G4String particleName = particle->GetParti    282     G4String particleName = particle->GetParticleName();
346     G4String particleType = particle->GetParti    283     G4String particleType = particle->GetParticleType();
347     G4double charge = particle->GetPDGCharge()    284     G4double charge = particle->GetPDGCharge();
348                                                   285     
349     if (particleName == "gamma")                  286     if (particleName == "gamma") 
350       {                                           287       {
351   //gamma                                         288   //gamma
352   G4RayleighScattering* theRayleigh = new G4Ra << 289   pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh());
353   pmanager->AddDiscreteProcess(theRayleigh);   << 290   pmanager->AddDiscreteProcess(lowePhot);
354                                                << 291   pmanager->AddDiscreteProcess(new G4LowEnergyCompton());
355   G4PhotoElectricEffect* thePhotoElectricEffec << 292   pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion());
356   thePhotoElectricEffect->SetEmModel(new G4Liv << 
357   pmanager->AddDiscreteProcess(thePhotoElectri << 
358                                                << 
359   G4ComptonScattering* theComptonScattering =  << 
360   theComptonScattering->SetEmModel(new G4Liver << 
361   pmanager->AddDiscreteProcess(theComptonScatt << 
362                                                << 
363   G4GammaConversion* theGammaConversion = new  << 
364   theGammaConversion->SetEmModel(new G4BetheHe << 
365   pmanager->AddDiscreteProcess(theGammaConvers << 
366                                                << 
367       }                                           293       } 
368     else if (particleName == "e-")                294     else if (particleName == "e-") 
369       {                                           295       {
370   //electron                                      296   //electron
371   // process ordering: AddProcess(name, at res    297   // process ordering: AddProcess(name, at rest, along step, post step)
372   // Multiple scattering                       << 298   // -1 = not implemented, then ordering
373   G4eMultipleScattering* msc = new G4eMultiple << 299         G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
374   em_params->SetMscStepLimitType(fUseDistanceT << 300   pmanager->AddProcess(aMultipleScattering,     -1, 1, 1);
375   pmanager->AddProcess(msc,-1, 1, -1);         << 301   pmanager->AddProcess(loweIon,                 -1, 2, 2);
376                                                << 302   pmanager->AddProcess(loweBrem,                -1,-1, 3);
377   // Ionisation                                << 
378   G4eIonisation* eIonisation = new G4eIonisati << 
379         G4VEmModel* theIoniLiv = new G4Livermo << 
380         theIoniLiv->SetHighEnergyLimit(0.1*MeV << 
381         eIonisation->AddEmModel(0, theIoniLiv, << 
382   em_params->SetStepFunction(0.2, 100*um); //i << 
383   pmanager->AddProcess(eIonisation,-1, 2, 1);  << 
384                                                << 
385   // Bremsstrahlung                            << 
386   G4eBremsstrahlung* eBremsstrahlung = new G4e << 
387   pmanager->AddProcess(eBremsstrahlung, -1,-3, << 
388       }                                           303       } 
389     else if (particleName == "e+")                304     else if (particleName == "e+") 
390       {                                           305       {
391   //positron                                   << 306   //positron
392   G4eMultipleScattering* msc = new G4eMultiple << 307         G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
393   msc->SetStepLimitType(fUseDistanceToBoundary << 308   pmanager->AddProcess(aMultipleScattering,     -1, 1, 1);
394   pmanager->AddProcess(msc,-1, 1, -1);         << 309   pmanager->AddProcess(new G4eIonisation(),     -1, 2, 2);
395                                                << 310   pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3);
396   // Ionisation                                << 311   pmanager->AddProcess(new G4eplusAnnihilation(),0,-1, 4);      
397   G4eIonisation* eIonisation = new G4eIonisati << 
398   // eIonisation->SetStepFunction(0.2, 100*um) << 
399   pmanager->AddProcess(eIonisation,            << 
400                                                << 
401   //Bremsstrahlung (use default, no low-energy << 
402   pmanager->AddProcess(new G4eBremsstrahlung() << 
403                                                << 
404   //Annihilation                               << 
405   pmanager->AddProcess(new G4eplusAnnihilation << 
406       }                                           312       } 
407     else if( particleName == "mu+" ||             313     else if( particleName == "mu+" || 
408        particleName == "mu-"    )                 314        particleName == "mu-"    ) 
409       {                                           315       {
410   //muon                                          316   //muon  
411   pmanager->AddProcess(new G4MuMultipleScatter << 317         G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
412   pmanager->AddProcess(new G4MuIonisation(),   << 318   pmanager->AddProcess(aMultipleScattering,           -1, 1, 1);
413   pmanager->AddProcess(new G4MuBremsstrahlung( << 319   pmanager->AddProcess(new G4MuIonisation(),          -1, 2, 2);
414   pmanager->AddProcess(new G4MuPairProduction( << 320   pmanager->AddProcess(new G4MuBremsstrahlung(),      -1,-1, 3);
                                                   >> 321   pmanager->AddProcess(new G4MuPairProduction(),      -1,-1, 4);
415   if( particleName == "mu-" )                     322   if( particleName == "mu-" )
416     pmanager->AddProcess(new G4MuonMinusCaptur << 323     pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
417       }                                           324       } 
418     else if (particleName == "proton" ||       << 325     else if (particleName == "proton"     ||
419        particleName == "pi+" ||                << 326        particleName == "alpha"      ||
420        particleName == "pi-")                  << 
421       {                                        << 
422   //multiple scattering                        << 
423   pmanager->AddProcess(new G4hMultipleScatteri << 
424                                                << 
425   //ionisation                                 << 
426   G4hIonisation* hIonisation = new G4hIonisati << 
427   em_params->SetStepFunctionMuHad(0.2, 50*um); << 
428   pmanager->AddProcess(hIonisation,            << 
429                                                << 
430   //bremmstrahlung                             << 
431   pmanager->AddProcess(new G4hBremsstrahlung,  << 
432       }                                        << 
433     else if(particleName == "alpha"      ||    << 
434        particleName == "deuteron"   ||            327        particleName == "deuteron"   ||
435        particleName == "triton"     ||            328        particleName == "triton"     ||
436        particleName == "He3")                  << 329        particleName == "He3"        ||
437       {                                        << 330        particleName == "GenericIon" || 
438   //multiple scattering                        << 331        (particleType == "nucleus" && charge != 0)) 
439   pmanager->AddProcess(new G4hMultipleScatteri << 
440                                                << 
441   //ionisation                                 << 
442   G4ionIonisation* ionIoni = new G4ionIonisati << 
443   em_params->SetStepFunctionLightIons(0.1, 1*C << 
444   pmanager->AddProcess(ionIoni,                << 
445   pmanager->AddProcess(new G4NuclearStopping() << 
446       }                                        << 
447     else if (particleName == "GenericIon")     << 
448       {                                           332       {
449   // OBJECT may be dynamically created as eith    333   // OBJECT may be dynamically created as either a GenericIon or nucleus
450   // G4Nucleus exists and therefore has partic    334   // G4Nucleus exists and therefore has particle type nucleus
451   // genericIon:                                  335   // genericIon:
452                                                << 336         G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
453   //multiple scattering                        << 337   //hIonisation G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
454   pmanager->AddProcess(new G4hMultipleScatteri << 338         G4hIonisation* ahadronIon = new G4hIonisation();
455                                                << 339   pmanager->AddProcess(aMultipleScattering,-1,1,1);
456   //ionisation                                 << 340   //hIonisation pmanager->AddProcess(ahadronLowEIon,-1,2,2); 
457   G4ionIonisation* ionIoni = new G4ionIonisati << 341   pmanager->AddProcess(ahadronIon,-1,2,2); 
458   em_params->SetStepFunctionIons(0.1, 1*CLHEP: << 342         // ahadronLowEIon->SetNuclearStoppingOff() ;
459   pmanager->AddProcess(ionIoni,                << 343   //        ahadronLowEIon->SetNuclearStoppingPowerModel("ICRU_R49") ;
460   pmanager->AddProcess(new G4NuclearStopping() << 344   //        ahadronLowEIon->SetNuclearStoppingOn() ;
                                                   >> 345   
                                                   >> 346         //fluorescence switch off for hadrons (for now) PIXE:
                                                   >> 347   //hIonisation        ahadronLowEIon->SetFluorescence(false);
461       }                                           348       } 
462                                                << 
463     else if ((!particle->IsShortLived()) &&       349     else if ((!particle->IsShortLived()) &&
464        (charge != 0.0) &&                         350        (charge != 0.0) && 
465        (particle->GetParticleName() != "charge    351        (particle->GetParticleName() != "chargedgeantino")) 
466       {                                           352       {
467   //all others charged particles except geanti    353   //all others charged particles except geantino
468         G4hMultipleScattering* aMultipleScatte << 354         G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
                                                   >> 355   //hIonisation        G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
469         G4hIonisation* ahadronIon = new G4hIon    356         G4hIonisation* ahadronIon = new G4hIonisation();
470                                                << 357   pmanager->AddProcess(aMultipleScattering,-1,1,1);
471   //multiple scattering                        << 358   //hIonisation pmanager->AddProcess(ahadronLowEIon,       -1,2,2);      
472   pmanager->AddProcess(aMultipleScattering,-1, << 359   pmanager->AddProcess(ahadronIon,       -1,2,2);      
473                                                << 360   //      pmanager->AddProcess(new G4hIonisation(),       -1,2,2);      
474   //ionisation                                 << 
475   pmanager->AddProcess(ahadronIon,       -1,2, << 
476       }                                           361       }
                                                   >> 362     
477   }                                               363   }
                                                   >> 364 
                                                   >> 365   // turn off msc step-limitation - especially as electron cut 1nm
                                                   >> 366   G4EmProcessOptions opt;
                                                   >> 367   //  opt.SetMscStepLimitation(false);
                                                   >> 368   opt.SetMscStepLimitation(fMinimal);
                                                   >> 369 
478 }                                                 370 }
479                                                   371 
                                                   >> 372 
480 // Optical Processes /////////////////////////    373 // Optical Processes ////////////////////////////////////////////////////////
                                                   >> 374 #include "G4Scintillation.hh"
                                                   >> 375 #include "G4OpAbsorption.hh"
                                                   >> 376 //#include "G4OpRayleigh.hh"
                                                   >> 377 #include "G4OpBoundaryProcess.hh"
                                                   >> 378 
481 void DMXPhysicsList::ConstructOp()                379 void DMXPhysicsList::ConstructOp() 
482 {                                                 380 {
483   G4OpticalParameters* opParams = G4OpticalPar << 381   // default scintillation process
484   G4Scintillation* theScintProcessDef = new G4    382   G4Scintillation* theScintProcessDef = new G4Scintillation("Scintillation");
485   opParams->SetScintTrackSecondariesFirst(true << 383   // theScintProcessDef->DumpPhysicsTable();
486   opParams->SetScintByParticleType(true);      << 384   theScintProcessDef->SetTrackSecondariesFirst(true);
                                                   >> 385   theScintProcessDef->SetScintillationYieldFactor(1.0); //
                                                   >> 386   theScintProcessDef->SetScintillationExcitationRatio(0.0); //
                                                   >> 387   theScintProcessDef->SetVerboseLevel(OpVerbLevel);
                                                   >> 388 
                                                   >> 389   // scintillation process for alpha:
                                                   >> 390   G4Scintillation* theScintProcessAlpha = new G4Scintillation("Scintillation");
                                                   >> 391   // theScintProcessNuc->DumpPhysicsTable();
                                                   >> 392   theScintProcessAlpha->SetTrackSecondariesFirst(true);
                                                   >> 393   theScintProcessAlpha->SetScintillationYieldFactor(1.1);
                                                   >> 394   theScintProcessAlpha->SetScintillationExcitationRatio(1.0);
                                                   >> 395   theScintProcessAlpha->SetVerboseLevel(OpVerbLevel);
                                                   >> 396 
                                                   >> 397   // scintillation process for heavy nuclei
                                                   >> 398   G4Scintillation* theScintProcessNuc = new G4Scintillation("Scintillation");
                                                   >> 399   // theScintProcessNuc->DumpPhysicsTable();
                                                   >> 400   theScintProcessNuc->SetTrackSecondariesFirst(true);
                                                   >> 401   theScintProcessNuc->SetScintillationYieldFactor(0.2);
                                                   >> 402   theScintProcessNuc->SetScintillationExcitationRatio(1.0);
                                                   >> 403   theScintProcessNuc->SetVerboseLevel(OpVerbLevel);
487                                                   404 
488   // optical processes                            405   // optical processes
489   G4OpAbsorption* theAbsorptionProcess = new G    406   G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
                                                   >> 407   //  G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
490   G4OpBoundaryProcess* theBoundaryProcess = ne    408   G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
                                                   >> 409   //  theAbsorptionProcess->DumpPhysicsTable();
                                                   >> 410   //  theRayleighScatteringProcess->DumpPhysicsTable();
                                                   >> 411   theAbsorptionProcess->SetVerboseLevel(OpVerbLevel);
                                                   >> 412   // theRayleighScatteringProcess->SetVerboseLevel(OpVerbLevel);
                                                   >> 413   theBoundaryProcess->SetVerboseLevel(OpVerbLevel);
                                                   >> 414   G4OpticalSurfaceModel themodel = unified;
                                                   >> 415   theBoundaryProcess->SetModel(themodel);
491                                                   416 
492   auto particleIterator=GetParticleIterator(); << 417   theParticleIterator->reset();
493   particleIterator->reset();                   << 418   while( (*theParticleIterator)() )
494   while( (*particleIterator)() )               << 
495     {                                             419     {
496       G4ParticleDefinition* particle = particl << 420       G4ParticleDefinition* particle = theParticleIterator->value();
497       G4ProcessManager* pmanager = particle->G    421       G4ProcessManager* pmanager = particle->GetProcessManager();
498       G4String particleName = particle->GetPar    422       G4String particleName = particle->GetParticleName();
499       if (theScintProcessDef->IsApplicable(*pa    423       if (theScintProcessDef->IsApplicable(*particle)) {
500         pmanager->AddProcess(theScintProcessDe << 424   //      if(particle->GetPDGMass() > 5.0*GeV) 
501         pmanager->SetProcessOrderingToLast(the << 425   if(particle->GetParticleName() == "GenericIon") {
502         pmanager->SetProcessOrderingToLast(the << 426     pmanager->AddProcess(theScintProcessNuc); // AtRestDiscrete
                                                   >> 427     pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxAtRest);
                                                   >> 428     pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxPostStep);
                                                   >> 429   }   
                                                   >> 430   else if(particle->GetParticleName() == "alpha") {
                                                   >> 431     pmanager->AddProcess(theScintProcessAlpha);
                                                   >> 432     pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxAtRest);
                                                   >> 433     pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxPostStep);
                                                   >> 434   }
                                                   >> 435   else {
                                                   >> 436     pmanager->AddProcess(theScintProcessDef);
                                                   >> 437     pmanager->SetProcessOrderingToLast(theScintProcessDef,idxAtRest);
                                                   >> 438     pmanager->SetProcessOrderingToLast(theScintProcessDef,idxPostStep);
                                                   >> 439   }   
503       }                                           440       }
504                                                   441       
505       if (particleName == "opticalphoton") {      442       if (particleName == "opticalphoton") {
506   pmanager->AddDiscreteProcess(theAbsorptionPr    443   pmanager->AddDiscreteProcess(theAbsorptionProcess);
                                                   >> 444   //  pmanager->AddDiscreteProcess(theRayleighScatteringProcess);
507   pmanager->AddDiscreteProcess(theBoundaryProc    445   pmanager->AddDiscreteProcess(theBoundaryProcess);
508       }                                           446       }
509     }                                             447     }
510 }                                                 448 }
511                                                   449 
                                                   >> 450 
512 // Hadronic processes ////////////////////////    451 // Hadronic processes ////////////////////////////////////////////////////////
513                                                   452 
                                                   >> 453 // Elastic processes:
                                                   >> 454 #include "G4HadronElasticProcess.hh"
                                                   >> 455 
                                                   >> 456 // Inelastic processes:
                                                   >> 457 #include "G4PionPlusInelasticProcess.hh"
                                                   >> 458 #include "G4PionMinusInelasticProcess.hh"
                                                   >> 459 #include "G4KaonPlusInelasticProcess.hh"
                                                   >> 460 #include "G4KaonZeroSInelasticProcess.hh"
                                                   >> 461 #include "G4KaonZeroLInelasticProcess.hh"
                                                   >> 462 #include "G4KaonMinusInelasticProcess.hh"
                                                   >> 463 #include "G4ProtonInelasticProcess.hh"
                                                   >> 464 #include "G4AntiProtonInelasticProcess.hh"
                                                   >> 465 #include "G4NeutronInelasticProcess.hh"
                                                   >> 466 #include "G4AntiNeutronInelasticProcess.hh"
                                                   >> 467 #include "G4DeuteronInelasticProcess.hh"
                                                   >> 468 #include "G4TritonInelasticProcess.hh"
                                                   >> 469 #include "G4AlphaInelasticProcess.hh"
                                                   >> 470 
                                                   >> 471 // Low-energy Models: < 20GeV
                                                   >> 472 #include "G4LElastic.hh"
                                                   >> 473 #include "G4LEPionPlusInelastic.hh"
                                                   >> 474 #include "G4LEPionMinusInelastic.hh"
                                                   >> 475 #include "G4LEKaonPlusInelastic.hh"
                                                   >> 476 #include "G4LEKaonZeroSInelastic.hh"
                                                   >> 477 #include "G4LEKaonZeroLInelastic.hh"
                                                   >> 478 #include "G4LEKaonMinusInelastic.hh"
                                                   >> 479 #include "G4LEProtonInelastic.hh"
                                                   >> 480 #include "G4LEAntiProtonInelastic.hh"
                                                   >> 481 #include "G4LENeutronInelastic.hh"
                                                   >> 482 #include "G4LEAntiNeutronInelastic.hh"
                                                   >> 483 #include "G4LEDeuteronInelastic.hh"
                                                   >> 484 #include "G4LETritonInelastic.hh"
                                                   >> 485 #include "G4LEAlphaInelastic.hh"
                                                   >> 486 
                                                   >> 487 // High-energy Models: >20 GeV
                                                   >> 488 #include "G4HEPionPlusInelastic.hh"
                                                   >> 489 #include "G4HEPionMinusInelastic.hh"
                                                   >> 490 #include "G4HEKaonPlusInelastic.hh"
                                                   >> 491 #include "G4HEKaonZeroInelastic.hh"
                                                   >> 492 #include "G4HEKaonZeroInelastic.hh"
                                                   >> 493 #include "G4HEKaonMinusInelastic.hh"
                                                   >> 494 #include "G4HEProtonInelastic.hh"
                                                   >> 495 #include "G4HEAntiProtonInelastic.hh"
                                                   >> 496 #include "G4HENeutronInelastic.hh"
                                                   >> 497 #include "G4HEAntiNeutronInelastic.hh"
                                                   >> 498 
                                                   >> 499 // Neutron high-precision models: <20 MeV
                                                   >> 500 #include "G4NeutronHPElastic.hh"
                                                   >> 501 #include "G4NeutronHPElasticData.hh"
                                                   >> 502 #include "G4NeutronHPCapture.hh"
                                                   >> 503 #include "G4NeutronHPCaptureData.hh"
                                                   >> 504 #include "G4NeutronHPInelastic.hh"
                                                   >> 505 #include "G4NeutronHPInelasticData.hh"
                                                   >> 506 #include "G4LCapture.hh"
                                                   >> 507 
                                                   >> 508 // Stopping processes
                                                   >> 509 #include "G4PiMinusAbsorptionAtRest.hh"
                                                   >> 510 #include "G4KaonMinusAbsorptionAtRest.hh"
                                                   >> 511 #include "G4AntiProtonAnnihilationAtRest.hh"
                                                   >> 512 #include "G4AntiNeutronAnnihilationAtRest.hh"
                                                   >> 513 
                                                   >> 514 
                                                   >> 515 // ConstructHad()
                                                   >> 516 // Makes discrete physics processes for the hadrons, at present limited
                                                   >> 517 // to those particles with GHEISHA interactions (INTRC > 0).
                                                   >> 518 // The processes are: Elastic scattering and Inelastic scattering.
                                                   >> 519 // F.W.Jones  09-JUL-1998
514 void DMXPhysicsList::ConstructHad()               520 void DMXPhysicsList::ConstructHad() 
515 {                                                 521 {
516   //Elastic models                             << 522   G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
517   G4HadronElastic* elastic_lhep0 = new G4Hadro << 523   G4LElastic* theElasticModel = new G4LElastic;
518   G4ChipsElasticModel* elastic_chip = new G4Ch << 524   theElasticProcess->RegisterMe(theElasticModel);
519   G4ElasticHadrNucleusHE* elastic_he = new G4E << 
520                                                   525   
521   // Inelastic scattering                      << 526   theParticleIterator->reset();
522   const G4double theFTFMin0 =    0.0*GeV;      << 527   while ((*theParticleIterator)()) 
523   const G4double theFTFMin1 =    3.0*GeV;      << 
524   const G4double theFTFMax = G4HadronicParamet << 
525   const G4double theBERTMin0 =   0.0*GeV;      << 
526   const G4double theBERTMin1 =  19.0*MeV;      << 
527   const G4double theBERTMax =    6.0*GeV;      << 
528   const G4double theHPMin =      0.0*GeV;      << 
529   const G4double theHPMax =     20.0*MeV;      << 
530                                                << 
531   G4FTFModel * theStringModel = new G4FTFModel << 
532   G4ExcitedStringDecay * theStringDecay = new  << 
533   theStringModel->SetFragmentationModel( theSt << 
534   G4PreCompoundModel * thePreEquilib = new G4P << 
535   G4GeneratorPrecompoundInterface * theCascade << 
536                                                << 
537   G4TheoFSGenerator * theFTFModel0 = new G4The << 
538   theFTFModel0->SetHighEnergyGenerator( theStr << 
539   theFTFModel0->SetTransport( theCascade );    << 
540   theFTFModel0->SetMinEnergy( theFTFMin0 );    << 
541   theFTFModel0->SetMaxEnergy( theFTFMax );     << 
542                                                << 
543   G4TheoFSGenerator * theFTFModel1 = new G4The << 
544   theFTFModel1->SetHighEnergyGenerator( theStr << 
545   theFTFModel1->SetTransport( theCascade );    << 
546   theFTFModel1->SetMinEnergy( theFTFMin1 );    << 
547   theFTFModel1->SetMaxEnergy( theFTFMax );     << 
548                                                << 
549   G4CascadeInterface * theBERTModel0 = new G4C << 
550   theBERTModel0->SetMinEnergy( theBERTMin0 );  << 
551   theBERTModel0->SetMaxEnergy( theBERTMax );   << 
552                                                << 
553   G4CascadeInterface * theBERTModel1 = new G4C << 
554   theBERTModel1->SetMinEnergy( theBERTMin1 );  << 
555   theBERTModel1->SetMaxEnergy( theBERTMax );   << 
556                                                << 
557   G4VCrossSectionDataSet * theAntiNucleonData  << 
558   G4ComponentGGNuclNuclXsc * ggNuclNuclXsec =  << 
559   G4VCrossSectionDataSet * theGGNuclNuclData = << 
560   G4VCrossSectionDataSet * theGGNNEl = new G4C << 
561   G4ComponentGGHadronNucleusXsc * ggHNXsec = n << 
562   G4VCrossSectionDataSet * theGGHNEl = new G4C << 
563   G4VCrossSectionDataSet * theGGHNInel = new G << 
564                                                << 
565   auto particleIterator=GetParticleIterator(); << 
566   particleIterator->reset();                   << 
567   while ((*particleIterator)())                << 
568     {                                             528     {
569       G4ParticleDefinition* particle = particl << 529       G4ParticleDefinition* particle = theParticleIterator->value();
570       G4ProcessManager* pmanager = particle->G    530       G4ProcessManager* pmanager = particle->GetProcessManager();
571       G4String particleName = particle->GetPar    531       G4String particleName = particle->GetParticleName();
572                                                   532 
573       if (particleName == "pi+")                  533       if (particleName == "pi+") 
574   {                                               534   {
575     // Elastic scattering                      << 535     pmanager->AddDiscreteProcess(theElasticProcess);
576           G4HadronElasticProcess* theElasticPr << 536     G4PionPlusInelasticProcess* theInelasticProcess = 
577           theElasticProcess->AddDataSet( new G << 537       new G4PionPlusInelasticProcess("inelastic");
578           theElasticProcess->RegisterMe( elast << 538     G4LEPionPlusInelastic* theLEInelasticModel = 
579     pmanager->AddDiscreteProcess( theElasticPr << 539       new G4LEPionPlusInelastic;
580     //Inelastic scattering                     << 540     theInelasticProcess->RegisterMe(theLEInelasticModel);
581     G4HadronInelasticProcess* theInelasticProc << 541     G4HEPionPlusInelastic* theHEInelasticModel = 
582       new G4HadronInelasticProcess( "inelastic << 542       new G4HEPionPlusInelastic;
583     theInelasticProcess->AddDataSet( new G4BGG << 543     theInelasticProcess->RegisterMe(theHEInelasticModel);
584     theInelasticProcess->RegisterMe( theFTFMod << 544     pmanager->AddDiscreteProcess(theInelasticProcess);
585           theInelasticProcess->RegisterMe( the << 
586     pmanager->AddDiscreteProcess( theInelastic << 
587   }                                               545   } 
588                                                   546 
589       else if (particleName == "pi-")             547       else if (particleName == "pi-") 
590   {                                               548   {
591     // Elastic scattering                      << 549     pmanager->AddDiscreteProcess(theElasticProcess);
592           G4HadronElasticProcess* theElasticPr << 550     G4PionMinusInelasticProcess* theInelasticProcess = 
593           theElasticProcess->AddDataSet( new G << 551       new G4PionMinusInelasticProcess("inelastic");
594           theElasticProcess->RegisterMe( elast << 552     G4LEPionMinusInelastic* theLEInelasticModel = 
595     pmanager->AddDiscreteProcess( theElasticPr << 553       new G4LEPionMinusInelastic;
596     //Inelastic scattering                     << 554     theInelasticProcess->RegisterMe(theLEInelasticModel);
597     G4HadronInelasticProcess* theInelasticProc << 555     G4HEPionMinusInelastic* theHEInelasticModel = 
598       new G4HadronInelasticProcess( "inelastic << 556       new G4HEPionMinusInelastic;
599     theInelasticProcess->AddDataSet( new G4BGG << 557     theInelasticProcess->RegisterMe(theHEInelasticModel);
600     theInelasticProcess->RegisterMe( theFTFMod << 558     pmanager->AddDiscreteProcess(theInelasticProcess);
601           theInelasticProcess->RegisterMe( the << 559     G4String prcNam;
602     pmanager->AddDiscreteProcess( theInelastic << 560     pmanager->AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
603     //Absorption                               << 
604     pmanager->AddRestProcess(new G4HadronicAbs << 
605   }                                               561   }
                                                   >> 562       
606       else if (particleName == "kaon+")           563       else if (particleName == "kaon+") 
607   {                                               564   {
608     // Elastic scattering                      << 565     pmanager->AddDiscreteProcess(theElasticProcess);
609           G4HadronElasticProcess* theElasticPr << 566     G4KaonPlusInelasticProcess* theInelasticProcess = 
610     theElasticProcess->AddDataSet( theGGHNEl ) << 567       new G4KaonPlusInelasticProcess("inelastic");
611           theElasticProcess->RegisterMe( elast << 568     G4LEKaonPlusInelastic* theLEInelasticModel = 
612     pmanager->AddDiscreteProcess( theElasticPr << 569       new G4LEKaonPlusInelastic;
613           // Inelastic scattering              << 570     theInelasticProcess->RegisterMe(theLEInelasticModel);
614     G4HadronInelasticProcess* theInelasticProc << 571     G4HEKaonPlusInelastic* theHEInelasticModel = 
615       new G4HadronInelasticProcess( "inelastic << 572       new G4HEKaonPlusInelastic;
616     theInelasticProcess->AddDataSet( theGGHNIn << 573     theInelasticProcess->RegisterMe(theHEInelasticModel);
617     theInelasticProcess->RegisterMe( theFTFMod << 574     pmanager->AddDiscreteProcess(theInelasticProcess);
618           theInelasticProcess->RegisterMe( the << 575   }
619     pmanager->AddDiscreteProcess( theInelastic << 576       
620   }                                            << 
621       else if (particleName == "kaon0S")          577       else if (particleName == "kaon0S") 
622   {                                               578   {
623     // Elastic scattering                      << 579     pmanager->AddDiscreteProcess(theElasticProcess);
624           G4HadronElasticProcess* theElasticPr << 580     G4KaonZeroSInelasticProcess* theInelasticProcess = 
625     theElasticProcess->AddDataSet( theGGHNEl ) << 581       new G4KaonZeroSInelasticProcess("inelastic");
626           theElasticProcess->RegisterMe( elast << 582     G4LEKaonZeroSInelastic* theLEInelasticModel = 
627     pmanager->AddDiscreteProcess( theElasticPr << 583       new G4LEKaonZeroSInelastic;
628           // Inelastic scattering              << 584     theInelasticProcess->RegisterMe(theLEInelasticModel);
629     G4HadronInelasticProcess* theInelasticProc << 585     G4HEKaonZeroInelastic* theHEInelasticModel = 
630       new G4HadronInelasticProcess( "inelastic << 586       new G4HEKaonZeroInelastic;
631     theInelasticProcess->AddDataSet( theGGHNIn << 587     theInelasticProcess->RegisterMe(theHEInelasticModel);
632     theInelasticProcess->RegisterMe( theFTFMod << 588     pmanager->AddDiscreteProcess(theInelasticProcess);
633           theInelasticProcess->RegisterMe( the << 
634     pmanager->AddDiscreteProcess( theInelastic << 
635   }                                               589   }
636                                                   590 
637       else if (particleName == "kaon0L")          591       else if (particleName == "kaon0L") 
638   {                                               592   {
639     // Elastic scattering                      << 593     pmanager->AddDiscreteProcess(theElasticProcess);
640           G4HadronElasticProcess* theElasticPr << 594     G4KaonZeroLInelasticProcess* theInelasticProcess = 
641     theElasticProcess->AddDataSet( theGGHNEl ) << 595       new G4KaonZeroLInelasticProcess("inelastic");
642           theElasticProcess->RegisterMe( elast << 596     G4LEKaonZeroLInelastic* theLEInelasticModel = 
643     pmanager->AddDiscreteProcess( theElasticPr << 597       new G4LEKaonZeroLInelastic;
644     // Inelastic scattering                    << 598     theInelasticProcess->RegisterMe(theLEInelasticModel);
645     G4HadronInelasticProcess* theInelasticProc << 599     G4HEKaonZeroInelastic* theHEInelasticModel = 
646       new G4HadronInelasticProcess( "inelastic << 600       new G4HEKaonZeroInelastic;
647     theInelasticProcess->AddDataSet( theGGHNIn << 601     theInelasticProcess->RegisterMe(theHEInelasticModel);
648     theInelasticProcess->RegisterMe( theFTFMod << 602     pmanager->AddDiscreteProcess(theInelasticProcess);
649           theInelasticProcess->RegisterMe( the << 
650     pmanager->AddDiscreteProcess( theInelastic << 
651   }                                               603   }
652                                                   604 
653       else if (particleName == "kaon-")           605       else if (particleName == "kaon-") 
654   {                                               606   {
655     // Elastic scattering                      << 607     pmanager->AddDiscreteProcess(theElasticProcess);
656           G4HadronElasticProcess* theElasticPr << 608     G4KaonMinusInelasticProcess* theInelasticProcess = 
657     theElasticProcess->AddDataSet( theGGHNEl ) << 609       new G4KaonMinusInelasticProcess("inelastic");
658           theElasticProcess->RegisterMe( elast << 610     G4LEKaonMinusInelastic* theLEInelasticModel = 
659     pmanager->AddDiscreteProcess( theElasticPr << 611       new G4LEKaonMinusInelastic;
660           // Inelastic scattering              << 612     theInelasticProcess->RegisterMe(theLEInelasticModel);
661     G4HadronInelasticProcess* theInelasticProc << 613     G4HEKaonMinusInelastic* theHEInelasticModel = 
662       new G4HadronInelasticProcess( "inelastic << 614       new G4HEKaonMinusInelastic;
663           theInelasticProcess->AddDataSet( the << 615     theInelasticProcess->RegisterMe(theHEInelasticModel);
664     theInelasticProcess->RegisterMe( theFTFMod << 616     pmanager->AddDiscreteProcess(theInelasticProcess);
665           theInelasticProcess->RegisterMe( the << 617     pmanager->AddRestProcess(new G4KaonMinusAbsorptionAtRest, ordDefault);
666     pmanager->AddDiscreteProcess( theInelastic << 
667     pmanager->AddRestProcess(new G4HadronicAbs << 
668   }                                               618   }
669                                                   619 
670       else if (particleName == "proton")          620       else if (particleName == "proton") 
671   {                                               621   {
672     // Elastic scattering                      << 622     pmanager->AddDiscreteProcess(theElasticProcess);
673           G4HadronElasticProcess* theElasticPr << 623     G4ProtonInelasticProcess* theInelasticProcess = 
674           theElasticProcess->AddDataSet( new G << 624       new G4ProtonInelasticProcess("inelastic");
675           theElasticProcess->RegisterMe( elast << 625     G4LEProtonInelastic* theLEInelasticModel = new G4LEProtonInelastic;
676     pmanager->AddDiscreteProcess( theElasticPr << 626     theInelasticProcess->RegisterMe(theLEInelasticModel);
677     // Inelastic scattering                    << 627     G4HEProtonInelastic* theHEInelasticModel = new G4HEProtonInelastic;
678     G4HadronInelasticProcess* theInelasticProc << 628     theInelasticProcess->RegisterMe(theHEInelasticModel);
679       new G4HadronInelasticProcess( "inelastic << 629     pmanager->AddDiscreteProcess(theInelasticProcess);
680     theInelasticProcess->AddDataSet( new G4BGG << 
681     theInelasticProcess->RegisterMe( theFTFMod << 
682           theInelasticProcess->RegisterMe( the << 
683     pmanager->AddDiscreteProcess( theInelastic << 
684   }                                               630   }
                                                   >> 631 
685       else if (particleName == "anti_proton")     632       else if (particleName == "anti_proton") 
686   {                                               633   {
687     // Elastic scattering                      << 634     pmanager->AddDiscreteProcess(theElasticProcess);
688           const G4double elastic_elimitAntiNuc << 635     G4AntiProtonInelasticProcess* theInelasticProcess = 
689           G4AntiNuclElastic* elastic_anuc = ne << 636       new G4AntiProtonInelasticProcess("inelastic");
690           elastic_anuc->SetMinEnergy( elastic_ << 637     G4LEAntiProtonInelastic* theLEInelasticModel = 
691           G4CrossSectionElastic* elastic_anucx << 638       new G4LEAntiProtonInelastic;
692           G4HadronElastic* elastic_lhep2 = new << 639     theInelasticProcess->RegisterMe(theLEInelasticModel);
693           elastic_lhep2->SetMaxEnergy( elastic << 640     G4HEAntiProtonInelastic* theHEInelasticModel = 
694           G4HadronElasticProcess* theElasticPr << 641       new G4HEAntiProtonInelastic;
695           theElasticProcess->AddDataSet( elast << 642     theInelasticProcess->RegisterMe(theHEInelasticModel);
696           theElasticProcess->RegisterMe( elast << 643     pmanager->AddDiscreteProcess(theInelasticProcess);
697           theElasticProcess->RegisterMe( elast << 
698     pmanager->AddDiscreteProcess( theElasticPr << 
699     // Inelastic scattering                    << 
700     G4HadronInelasticProcess* theInelasticProc << 
701       new G4HadronInelasticProcess( "inelastic << 
702     theInelasticProcess->AddDataSet( theAntiNu << 
703     theInelasticProcess->RegisterMe( theFTFMod << 
704     pmanager->AddDiscreteProcess( theInelastic << 
705     // Absorption                              << 
706     pmanager->AddRestProcess(new G4HadronicAbs << 
707   }                                               644   }
                                                   >> 645 
708       else if (particleName == "neutron") {       646       else if (particleName == "neutron") {
709   // elastic scattering                           647   // elastic scattering
710   G4HadronElasticProcess* theElasticProcess =  << 648   G4HadronElasticProcess* theNeutronElasticProcess = 
711         theElasticProcess->AddDataSet(new G4Ne << 649     new G4HadronElasticProcess;
712         G4HadronElastic* elastic_neutronChipsM << 650   G4LElastic* theElasticModel1 = new G4LElastic;
713   elastic_neutronChipsModel->SetMinEnergy( 19. << 651   G4NeutronHPElastic * theElasticNeutron = new G4NeutronHPElastic;
714         theElasticProcess->RegisterMe( elastic << 652   theNeutronElasticProcess->RegisterMe(theElasticModel1);
715   G4ParticleHPElastic * theElasticNeutronHP =  << 653   theElasticModel1->SetMinEnergy(19*MeV);
716         theElasticNeutronHP->SetMinEnergy( the << 654   theNeutronElasticProcess->RegisterMe(theElasticNeutron);
717         theElasticNeutronHP->SetMaxEnergy( the << 655   G4NeutronHPElasticData * theNeutronData = new G4NeutronHPElasticData;
718   theElasticProcess->RegisterMe( theElasticNeu << 656   theNeutronElasticProcess->AddDataSet(theNeutronData);
719   theElasticProcess->AddDataSet( new G4Particl << 657   pmanager->AddDiscreteProcess(theNeutronElasticProcess);
720   pmanager->AddDiscreteProcess( theElasticProc << 658   // inelastic scattering
721   // inelastic scattering                      << 659   G4NeutronInelasticProcess* theInelasticProcess =
722   G4HadronInelasticProcess* theInelasticProces << 660     new G4NeutronInelasticProcess("inelastic");
723     new G4HadronInelasticProcess( "inelastic", << 661   G4LENeutronInelastic* theInelasticModel = new G4LENeutronInelastic;
724   theInelasticProcess->AddDataSet( new G4Neutr << 662   theInelasticModel->SetMinEnergy(19*MeV);
725   theInelasticProcess->RegisterMe( theFTFModel << 663   theInelasticProcess->RegisterMe(theInelasticModel);
726         theInelasticProcess->RegisterMe( theBE << 664   G4NeutronHPInelastic * theLENeutronInelasticModel =
727   G4ParticleHPInelastic * theNeutronInelasticH << 665     new G4NeutronHPInelastic;
728         theNeutronInelasticHPModel->SetMinEner << 666   theInelasticProcess->RegisterMe(theLENeutronInelasticModel);
729         theNeutronInelasticHPModel->SetMaxEner << 667   G4NeutronHPInelasticData * theNeutronData1 = 
730   theInelasticProcess->RegisterMe( theNeutronI << 668     new G4NeutronHPInelasticData;
731   theInelasticProcess->AddDataSet( new G4Parti << 669   theInelasticProcess->AddDataSet(theNeutronData1);
732   pmanager->AddDiscreteProcess(theInelasticPro    670   pmanager->AddDiscreteProcess(theInelasticProcess);
733   // capture                                      671   // capture
734   G4NeutronCaptureProcess* theCaptureProcess = << 672   G4HadronCaptureProcess* theCaptureProcess =
735     new G4NeutronCaptureProcess;               << 673     new G4HadronCaptureProcess;
736   G4ParticleHPCapture * theLENeutronCaptureMod << 674   G4LCapture* theCaptureModel = new G4LCapture;
737   theLENeutronCaptureModel->SetMinEnergy(theHP << 675   theCaptureModel->SetMinEnergy(19*MeV);
738   theLENeutronCaptureModel->SetMaxEnergy(theHP << 676   theCaptureProcess->RegisterMe(theCaptureModel);
                                                   >> 677   G4NeutronHPCapture * theLENeutronCaptureModel = new G4NeutronHPCapture;
739   theCaptureProcess->RegisterMe(theLENeutronCa    678   theCaptureProcess->RegisterMe(theLENeutronCaptureModel);
740   theCaptureProcess->AddDataSet( new G4Particl << 679   G4NeutronHPCaptureData * theNeutronData3 = new G4NeutronHPCaptureData;
                                                   >> 680   theCaptureProcess->AddDataSet(theNeutronData3);
741   pmanager->AddDiscreteProcess(theCaptureProce    681   pmanager->AddDiscreteProcess(theCaptureProcess);
                                                   >> 682   //  G4ProcessManager* pmanager = G4Neutron::Neutron->GetProcessManager();
                                                   >> 683   //  pmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1);
742       }                                           684       }
743       else if (particleName == "anti_neutron")    685       else if (particleName == "anti_neutron") 
744   {                                               686   {
745     // Elastic scattering                      << 687     pmanager->AddDiscreteProcess(theElasticProcess);
746           G4HadronElasticProcess* theElasticPr << 688     G4AntiNeutronInelasticProcess* theInelasticProcess = 
747     theElasticProcess->AddDataSet( theGGHNEl ) << 689       new G4AntiNeutronInelasticProcess("inelastic");
748           theElasticProcess->RegisterMe( elast << 690     G4LEAntiNeutronInelastic* theLEInelasticModel = 
749     pmanager->AddDiscreteProcess( theElasticPr << 691       new G4LEAntiNeutronInelastic;
750           // Inelastic scattering (include ann << 692     theInelasticProcess->RegisterMe(theLEInelasticModel);
751     G4HadronInelasticProcess* theInelasticProc << 693     G4HEAntiNeutronInelastic* theHEInelasticModel = 
752       new G4HadronInelasticProcess( "inelastic << 694       new G4HEAntiNeutronInelastic;
753     theInelasticProcess->AddDataSet( theAntiNu << 695     theInelasticProcess->RegisterMe(theHEInelasticModel);
754     theInelasticProcess->RegisterMe( theFTFMod << 696     pmanager->AddDiscreteProcess(theInelasticProcess);
755     pmanager->AddDiscreteProcess( theInelastic << 
756   }                                               697   }
                                                   >> 698 
757       else if (particleName == "deuteron")        699       else if (particleName == "deuteron") 
758   {                                               700   {
759     // Elastic scattering                      << 701     pmanager->AddDiscreteProcess(theElasticProcess);
760           G4HadronElasticProcess* theElasticPr << 702     G4DeuteronInelasticProcess* theInelasticProcess = 
761     theElasticProcess->AddDataSet( theGGNNEl ) << 703       new G4DeuteronInelasticProcess("inelastic");
762           theElasticProcess->RegisterMe( elast << 704     G4LEDeuteronInelastic* theLEInelasticModel = 
763     pmanager->AddDiscreteProcess( theElasticPr << 705       new G4LEDeuteronInelastic;
764           // Inelastic scattering              << 706     theInelasticProcess->RegisterMe(theLEInelasticModel);
765     G4HadronInelasticProcess* theInelasticProc << 707     pmanager->AddDiscreteProcess(theInelasticProcess);
766       new G4HadronInelasticProcess( "inelastic << 
767     theInelasticProcess->AddDataSet( theGGNucl << 
768     theInelasticProcess->RegisterMe( theFTFMod << 
769           theInelasticProcess->RegisterMe( the << 
770     pmanager->AddDiscreteProcess( theInelastic << 
771   }                                               708   }
                                                   >> 709       
772       else if (particleName == "triton")          710       else if (particleName == "triton") 
773   {                                               711   {
774     // Elastic scattering                      << 712     pmanager->AddDiscreteProcess(theElasticProcess);
775           G4HadronElasticProcess* theElasticPr << 713     G4TritonInelasticProcess* theInelasticProcess = 
776     theElasticProcess->AddDataSet( theGGNNEl ) << 714       new G4TritonInelasticProcess("inelastic");
777           theElasticProcess->RegisterMe( elast << 715     G4LETritonInelastic* theLEInelasticModel = 
778     pmanager->AddDiscreteProcess( theElasticPr << 716       new G4LETritonInelastic;
779           // Inelastic scattering              << 717     theInelasticProcess->RegisterMe(theLEInelasticModel);
780     G4HadronInelasticProcess* theInelasticProc << 718     pmanager->AddDiscreteProcess(theInelasticProcess);
781       new G4HadronInelasticProcess( "inelastic << 
782     theInelasticProcess->AddDataSet( theGGNucl << 
783     theInelasticProcess->RegisterMe( theFTFMod << 
784           theInelasticProcess->RegisterMe( the << 
785     pmanager->AddDiscreteProcess( theInelastic << 
786   }                                               719   }
                                                   >> 720 
787       else if (particleName == "alpha")           721       else if (particleName == "alpha") 
788   {                                               722   {
789     // Elastic scattering                      << 723     pmanager->AddDiscreteProcess(theElasticProcess);
790           G4HadronElasticProcess* theElasticPr << 724     G4AlphaInelasticProcess* theInelasticProcess = 
791     theElasticProcess->AddDataSet( theGGNNEl ) << 725       new G4AlphaInelasticProcess("inelastic");
792           theElasticProcess->RegisterMe( elast << 726     G4LEAlphaInelastic* theLEInelasticModel = 
793     pmanager->AddDiscreteProcess( theElasticPr << 727       new G4LEAlphaInelastic;
794           // Inelastic scattering              << 728     theInelasticProcess->RegisterMe(theLEInelasticModel);
795     G4HadronInelasticProcess* theInelasticProc << 729     pmanager->AddDiscreteProcess(theInelasticProcess);
796       new G4HadronInelasticProcess( "inelastic << 
797           theInelasticProcess->AddDataSet( the << 
798     theInelasticProcess->RegisterMe( theFTFMod << 
799           theInelasticProcess->RegisterMe( the << 
800     pmanager->AddDiscreteProcess( theInelastic << 
801   }                                               730   }
                                                   >> 731 
802     }                                             732     }
803 }                                                 733 }
804                                                   734 
                                                   >> 735 
805 // Decays ////////////////////////////////////    736 // Decays ///////////////////////////////////////////////////////////////////
                                                   >> 737 #include "G4Decay.hh"
                                                   >> 738 #include "G4RadioactiveDecay.hh"
                                                   >> 739 #include "G4IonTable.hh"
                                                   >> 740 #include "G4Ions.hh"
                                                   >> 741 
806 void DMXPhysicsList::ConstructGeneral() {         742 void DMXPhysicsList::ConstructGeneral() {
807                                                   743 
808   // Add Decay Process                            744   // Add Decay Process
809   G4Decay* theDecayProcess = new G4Decay();       745   G4Decay* theDecayProcess = new G4Decay();
810   auto particleIterator=GetParticleIterator(); << 746   theParticleIterator->reset();
811   particleIterator->reset();                   << 747   while( (*theParticleIterator)() )
812   while( (*particleIterator)() )               << 
813     {                                             748     {
814       G4ParticleDefinition* particle = particl << 749       G4ParticleDefinition* particle = theParticleIterator->value();
815       G4ProcessManager* pmanager = particle->G    750       G4ProcessManager* pmanager = particle->GetProcessManager();
816                                                   751       
817       if (theDecayProcess->IsApplicable(*parti    752       if (theDecayProcess->IsApplicable(*particle) && !particle->IsShortLived()) 
818   {                                               753   { 
819     pmanager ->AddProcess(theDecayProcess);       754     pmanager ->AddProcess(theDecayProcess);
820     // set ordering for PostStepDoIt and AtRes    755     // set ordering for PostStepDoIt and AtRestDoIt
821     pmanager ->SetProcessOrdering(theDecayProc    756     pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
822     pmanager ->SetProcessOrdering(theDecayProc    757     pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
823   }                                               758   }
824     }                                             759     }
825                                                   760 
826   // Declare radioactive decay to the GenericI    761   // Declare radioactive decay to the GenericIon in the IonTable.
827   G4LossTableManager* man = G4LossTableManager << 762   const G4IonTable *theIonTable = 
828   G4VAtomDeexcitation* ad = man->AtomDeexcitat << 763     G4ParticleTable::GetParticleTable()->GetIonTable();
829   if(!ad) {                                    << 764   G4RadioactiveDecay *theRadioactiveDecay = new G4RadioactiveDecay();
830     G4EmParameters::Instance()->SetAugerCascad << 
831     ad = new G4UAtomicDeexcitation();          << 
832     man->SetAtomDeexcitation(ad);              << 
833     ad->InitialiseAtomicDeexcitation();        << 
834   }                                            << 
835                                                   765 
836   G4PhysicsListHelper::GetPhysicsListHelper()- << 766   for (G4int i=0; i<theIonTable->Entries(); i++) 
837     RegisterProcess(new G4RadioactiveDecay(),  << 767     {
                                                   >> 768       G4String particleName = theIonTable->GetParticle(i)->GetParticleName();
                                                   >> 769       G4String particleType = theIonTable->GetParticle(i)->GetParticleType();
                                                   >> 770       
                                                   >> 771       if (particleName == "GenericIon") 
                                                   >> 772   {
                                                   >> 773     G4ProcessManager* pmanager = 
                                                   >> 774       theIonTable->GetParticle(i)->GetProcessManager();
                                                   >> 775     pmanager->SetVerboseLevel(VerboseLevel);
                                                   >> 776     pmanager ->AddProcess(theRadioactiveDecay);
                                                   >> 777     pmanager ->SetProcessOrdering(theRadioactiveDecay, idxPostStep);
                                                   >> 778     pmanager ->SetProcessOrdering(theRadioactiveDecay, idxAtRest);
                                                   >> 779   } 
                                                   >> 780     }
838 }                                                 781 }
839                                                   782 
840 // Cuts //////////////////////////////////////    783 // Cuts /////////////////////////////////////////////////////////////////////
841 void DMXPhysicsList::SetCuts()                    784 void DMXPhysicsList::SetCuts() 
842 {                                                 785 {
843                                                   786   
844   if (verboseLevel >1)                            787   if (verboseLevel >1)
845     G4cout << "DMXPhysicsList::SetCuts:";         788     G4cout << "DMXPhysicsList::SetCuts:";
846                                                   789   
847   if (verboseLevel>0){                            790   if (verboseLevel>0){
848     G4cout << "DMXPhysicsList::SetCuts:";         791     G4cout << "DMXPhysicsList::SetCuts:";
849     G4cout << "CutLength : "                      792     G4cout << "CutLength : " 
850      << G4BestUnit(defaultCutValue,"Length") <    793      << G4BestUnit(defaultCutValue,"Length") << G4endl;
851   }                                               794   }
852                                                   795 
853   //special for low energy physics                796   //special for low energy physics
854   G4double lowlimit=250*eV;                       797   G4double lowlimit=250*eV;  
855   G4ProductionCutsTable::GetProductionCutsTabl    798   G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowlimit,100.*GeV);
856                                                   799 
857   // set cut values for gamma at first and for    800   // set cut values for gamma at first and for e- second and next for e+,
858   // because some processes for e+/e- need cut    801   // because some processes for e+/e- need cut values for gamma 
859   SetCutValue(cutForGamma, "gamma");              802   SetCutValue(cutForGamma, "gamma");
860   SetCutValue(cutForElectron, "e-");              803   SetCutValue(cutForElectron, "e-");
861   SetCutValue(cutForPositron, "e+");              804   SetCutValue(cutForPositron, "e+");
862                                                   805   
863   if (verboseLevel>0) DumpCutValuesTable();       806   if (verboseLevel>0) DumpCutValuesTable();
864 }                                                 807 }
865                                                   808 
866                                                   809