Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/physics_lists/lists/src/Shielding.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 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //
 27 //---------------------------------------------------------------------------
 28 //
 29 // ClassName:   
 30 //
 31 // Author: 2010 Tatsumi Koi, Gunter Folger
 32 //
 33 //   created from FTFP_BERT
 34 //
 35 // Modified:
 36 // 05.08.2014 K.L.Genser: added provision for Hadronic Physics Variant M
 37 // 16.08.2010 H.Kurashige: Remove inclusion of G4ParticleWithCuts 
 38 // 26.04.2011 T.Koi: Add G4RadioactiveDecayPhysics
 39 // 16.10.2012 A.Ribon: Use new default stopping
 40 // 07.11.2013 T.Koi: Add IonElasticPhysics, Set proton cut to 0 to generate
 41 //                   low energy recoils and activate production of fission
 42 //                   fragments 
 43 // 06.08.2019 A.Ribon: Replacing explicit values for the energy transition
 44 //                     region with values from G4HadronicParameters
 45 //
 46 //----------------------------------------------------------------------------
 47 //
 48 
 49 #include "Shielding.hh"
 50 #include "globals.hh"
 51 
 52 #include "G4DecayPhysics.hh"
 53 #include "G4RadioactiveDecayPhysics.hh"
 54 #include "G4EmStandardPhysics.hh"
 55 #include "G4EmStandardPhysics_option4.hh"
 56 #include "G4EmExtraPhysics.hh"
 57 #include "G4IonQMDPhysics.hh"
 58 #include "G4LightIonQMDPhysics.hh"
 59 #include "G4IonElasticPhysics.hh"
 60 #include "G4StoppingPhysics.hh"
 61 #include "G4HadronElasticPhysicsHP.hh"
 62 #include "G4HadronElasticPhysicsLEND.hh"
 63 #include "G4ParticleHPManager.hh"
 64 
 65 #include "G4HadronPhysicsShielding.hh"
 66 #include "G4HadronPhysicsShieldingLEND.hh"
 67 #include "G4HadronicParameters.hh"
 68 #include <CLHEP/Units/SystemOfUnits.h>
 69 
 70 Shielding::Shielding(G4int verbose, const G4String& n_model, 
 71                      const G4String& HadrPhysVariant, G4bool useLightIonQMD)
 72 {
 73   G4String LEN_model = n_model; 
 74   size_t find = LEN_model.find("LEND__");
 75   G4String evaluation;
 76   if ( find != G4String::npos )
 77   {
 78      evaluation=LEN_model;
 79      evaluation.erase(0,find+6);
 80      LEN_model="LEND";
 81   }
 82 
 83   if(verbose > 0) {
 84     G4cout << "<<< Geant4 Physics List simulation engine: Shielding"
 85      << HadrPhysVariant << G4endl;
 86     if ( LEN_model=="LEND" ) {
 87       G4cout << "<<< LEND will be used for low energy neutron and gamma projectiles" << G4endl;
 88     } else {
 89       G4cout << "<<< (Note that Shielding" << HadrPhysVariant << " and Shielding"
 90        << HadrPhysVariant << "_HP are equivalent!)" << G4endl;
 91     }
 92   }
 93   defaultCutValue = 0.7*CLHEP::mm;  
 94   SetCutValue(0, "proton");  
 95   SetVerboseLevel(verbose);
 96 
 97   // EM Physics
 98   RegisterPhysics( new G4EmStandardPhysics(verbose));
 99 
100   // Synchroton Radiation & GN Physics
101   G4EmExtraPhysics* emExtraPhysics = new G4EmExtraPhysics(verbose);
102   if ( LEN_model == "LEND" ) {
103      // Use LEND model for Gamma Nuclear 
104      emExtraPhysics->LENDGammaNuclear(true);
105   }
106   RegisterPhysics( emExtraPhysics );
107 
108   // Decays 
109   RegisterPhysics( new G4DecayPhysics(verbose) );
110   RegisterPhysics( new G4RadioactiveDecayPhysics(verbose) );
111 
112   // Hadron Elastic scattering
113   if ( LEN_model == "HP" ) 
114   {
115      RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
116   }
117   else if ( LEN_model == "LEND" ) 
118   {
119      RegisterPhysics( new G4HadronElasticPhysicsLEND(verbose,evaluation));
120   }
121   else 
122   {
123      if(verbose > 0) {
124        G4cout << "Shielding Physics List: Warning!" <<G4endl;
125        G4cout << "\"" << LEN_model 
126               << "\" is not valid for the low energy neutron model." <<G4endl;
127        G4cout << "Neutron HP package will be used." <<G4endl;
128      }
129      RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
130   } 
131 
132   G4VPhysicsConstructor* hpc;
133   // Hadron Physics HP or LEND 
134   if (HadrPhysVariant == "M") {
135      // The variant "M" has a special, dedicated energy transition region
136      // between the string model and cascade model, therefore the recommended
137      // values from G4HadronicParameters are intentionally not used. 
138      hpc = new G4HadronPhysicsShielding("hInelastic Shielding", verbose, 
139                                         9.5*CLHEP::GeV, 9.9*CLHEP::GeV);
140   } else {
141      hpc = new G4HadronPhysicsShielding("hInelastic Shielding", verbose,
142                                         G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade(),
143                                         G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade());
144   }
145 
146   if ( LEN_model == "LEND" ) {
147      delete hpc;
148      if (HadrPhysVariant == "M") {
149         // The variant "M" has a special, dedicated energy transition region
150         // between the string model and cascade model, therefore the recommended
151         // values from G4HadronicParameters are intentionally not used. 
152         hpc = new G4HadronPhysicsShieldingLEND("hInelastic ShieldingLEND", verbose,
153                                                9.5*CLHEP::GeV, 9.9*CLHEP::GeV);
154      } else {
155         hpc = new G4HadronPhysicsShieldingLEND("hInelastic ShieldingLEND", verbose, 
156                                                G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade(),
157                                                G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade());
158      }
159   } else {
160      //G4cout << "Shielding Physics List: Warning." <<G4endl;
161      //G4cout << "Name of Low Energy Neutron model " << LEN_model 
162      //         << " is invalid." <<G4endl;
163      //G4cout << "Will use neutron HP package." <<G4endl;
164   }
165   RegisterPhysics( hpc );
166 
167   if ( LEN_model == "HP" ) {
168      //Activate prodcuton of fission fragments in neutronHP
169      G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( true );
170   }
171 
172   // Stopping Physics
173   RegisterPhysics( new G4StoppingPhysics(verbose) );
174 
175   // Ion Physics
176   RegisterPhysics( new G4IonElasticPhysics(verbose) );
177   if (useLightIonQMD){
178     RegisterPhysics( new G4LightIonQMDPhysics(verbose) );
179   } else {
180     RegisterPhysics( new G4IonQMDPhysics(verbose) );
181   }
182 }
183