Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // ------------------------------------------- 28 // 29 // Geant4 source file 30 // 31 // File name: G4ParticleHPInelasticURR.cc 32 // 33 // Authors: Marek Zmeskal (CTU, Czech Tec 34 // Loic Thulliez (CEA France) 35 // 36 // Creation date: 4 June 2024 37 // 38 // Description: Class to handle URR range 39 // the proper isotope cross- 40 // ParticleHP. 41 // 42 // Modifications: 43 // 44 // ------------------------------------------- 45 // 46 // 47 48 #include "G4ParticleHPInelasticURR.hh" 49 #include "G4ParticleHPManager.hh" 50 #include "G4HadronicParameters.hh" 51 #include "G4ParticleHPChannel.hh" 52 #include "G4ParticleHPInelastic.hh" 53 #include "G4ParticleHPProbabilityTablesStore.h 54 #include "G4SystemOfUnits.hh" 55 #include "G4Threading.hh" 56 57 58 G4ParticleHPInelasticURR::G4ParticleHPInelasti 59 SetMinEnergy( 0.0 * CLHEP::eV ); 60 SetMaxEnergy( 20.0 * CLHEP::MeV ); 61 particleHPinelastic = new G4ParticleHPInelas 62 } 63 64 65 G4ParticleHPInelasticURR::~G4ParticleHPInelast 66 67 68 G4HadFinalState* G4ParticleHPInelasticURR::App 69 if ( doNOTusePTforInelastic ) { 70 return particleHPinelastic->ApplyYoursel 71 } 72 const G4Material* theMaterial = aTrack.GetMa 73 G4double kineticEnergy = aTrack.GetKineticEn 74 G4HadFinalState* theFinalState = nullptr; 75 if ( kineticEnergy < (*URRlimits).back().fir 76 return particleHPinelastic->ApplyYourself( 77 } 78 G4int elementI = -1; 79 G4int isotopeJ = -1; 80 G4int A = aNucleus.GetA_asInt(); 81 G4int Z = aNucleus.GetZ_asInt(); 82 G4ParticleHPManager::GetInstance()->OpenReac 83 // finds the element and isotope of the sele 84 for ( G4int i = 0; i < (G4int)theMaterial->G 85 if ( Z == theMaterial->GetElement(i)->GetZ 86 for ( G4int j = 0; j < (G4int)theMateria 87 if ( A == theMaterial->GetElement(i)-> 88 isotopeJ = j; 89 break; 90 } 91 } 92 // the loop cannot be ended here because 93 if ( isotopeJ != -1 ) { 94 // isotope was found and for loop is e 95 elementI = (G4int)theMaterial->GetElem 96 break; 97 } 98 } // end if find element 99 } // end element loop 100 // Check whether the energy is out of the UR 101 if ( kineticEnergy < (*URRlimits).at(element 102 // Call inelastic final state in G4Paricle 103 const G4Element* target_element = (*G4Elem 104 theFinalState = (*G4ParticleHPManager::Get 105 ->ApplyYourself( target_el 106 // Update target nucleus information accor 107 G4int selectedIsotope_A = G4ParticleHPMana 108 aNucleus.SetParameters( selectedIsotope_A, 109 const G4Isotope* target_isotope = nullptr; 110 // Find the selected isotope among in the 111 for ( G4int j = 0; j < (G4int)target_eleme 112 target_isotope = target_element->GetIsot 113 if ( target_isotope->GetN() == selectedI 114 } 115 aNucleus.SetIsotope( target_isotope ); 116 } else { 117 // the energy is inside the limits of the U 118 theFinalState = (*G4ParticleHPManager::GetI 119 ->ApplyYourself( isotopeJ, 120 } 121 G4ParticleHPManager::GetInstance()->CloseRea 122 return theFinalState; 123 } 124 125 126 void G4ParticleHPInelasticURR::BuildPhysicsTab 127 particleHPinelastic->BuildPhysicsTable( *(G4 128 if ( G4HadronicParameters::Instance()->GetTy 129 doNOTusePTforInelastic = true; 130 } else if ( G4HadronicParameters::Instance() 131 doNOTusePTforInelastic = false; 132 // in the case of calendf probability tabl 133 URRlimits = G4ParticleHPManager::GetInstan 134 if ( URRlimits == nullptr ) { 135 G4ParticleHPProbabilityTablesStore::GetI 136 URRlimits = G4ParticleHPProbabilityTable 137 G4ParticleHPManager::GetInstance()->Regi 138 } 139 } 140 } 141 142 143 const std::pair< G4double, G4double > G4Partic 144 // max energy non-conservation is mass of he 145 return std::pair< G4double, G4double >( 10.0 146 } 147 148 149 G4int G4ParticleHPInelasticURR::GetVerboseLeve 150 return G4ParticleHPManager::GetInstance()->G 151 } 152 153 154 void G4ParticleHPInelasticURR::SetVerboseLevel 155 G4ParticleHPManager::GetInstance()->SetVerbo 156 } 157 158 159 void G4ParticleHPInelasticURR::ModelDescriptio 160 outFile << "High Precision model based on Ev 161 } 162