Geant4 Cross Reference |
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