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 10.1.p1)


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