Geant4 Cross Reference |
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 // neutron_hp -- source file 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron trans 28 // A prototype of the low energy neutron transport model. 29 // 29 // 30 // P. Arce, June-2014 Conversion neutron_hp to 30 // P. Arce, June-2014 Conversion neutron_hp to particle_hp 31 // 31 // 32 #include "G4ParticleHPIsotropic.hh" 32 #include "G4ParticleHPIsotropic.hh" 33 << 34 #include "G4Alpha.hh" << 35 #include "G4Deuteron.hh" << 36 #include "G4Electron.hh" << 37 #include "G4Gamma.hh" << 38 #include "G4He3.hh" << 39 #include "G4IonTable.hh" << 40 #include "G4Neutron.hh" << 41 #include "G4PhysicalConstants.hh" 33 #include "G4PhysicalConstants.hh" >> 34 #include "G4SystemOfUnits.hh" >> 35 #include "Randomize.hh" >> 36 #include "G4Gamma.hh" >> 37 #include "G4Electron.hh" 42 #include "G4Positron.hh" 38 #include "G4Positron.hh" >> 39 #include "G4Neutron.hh" 43 #include "G4Proton.hh" 40 #include "G4Proton.hh" 44 #include "G4SystemOfUnits.hh" << 41 #include "G4Deuteron.hh" 45 #include "G4Triton.hh" 42 #include "G4Triton.hh" 46 #include "Randomize.hh" << 43 #include "G4He3.hh" >> 44 #include "G4Alpha.hh" >> 45 #include "G4IonTable.hh" 47 46 48 void G4ParticleHPIsotropic::Init(std::istream& << 49 47 50 G4ReactionProduct* G4ParticleHPIsotropic::Samp << 48 void G4ParticleHPIsotropic::Init(std::istream & ) >> 49 { >> 50 } >> 51 >> 52 G4ReactionProduct * G4ParticleHPIsotropic::Sample(G4double anEnergy, G4double massCode, G4double ) 51 { 53 { 52 auto result = new G4ReactionProduct; << 54 G4ReactionProduct * result = new G4ReactionProduct; 53 auto Z = static_cast<G4int>(massCode / 1000) << 55 G4int Z = static_cast<G4int>(massCode/1000); 54 auto A = static_cast<G4int>(massCode - 1000 << 56 G4int A = static_cast<G4int>(massCode-1000*Z); 55 << 57 56 if (massCode == 0) { << 58 if(massCode==0) 57 result->SetDefinition(G4Gamma::Gamma()); << 59 { 58 } << 60 result->SetDefinition(G4Gamma::Gamma()); 59 else if (A == 0) { << 61 } 60 result->SetDefinition(G4Electron::Electron << 62 else if(A==0) 61 if (Z == 1) result->SetDefinition(G4Positr << 63 { 62 } << 64 result->SetDefinition(G4Electron::Electron()); 63 else if (A == 1) { << 65 if(Z==1) result->SetDefinition(G4Positron::Positron()); 64 result->SetDefinition(G4Neutron::Neutron() << 66 } 65 if (Z == 1) result->SetDefinition(G4Proton << 67 else if(A==1) 66 } << 68 { 67 else if (A == 2) { << 69 result->SetDefinition(G4Neutron::Neutron()); 68 result->SetDefinition(G4Deuteron::Deuteron << 70 if(Z==1) result->SetDefinition(G4Proton::Proton()); 69 } << 71 } 70 else if (A == 3) { << 72 else if(A==2) 71 result->SetDefinition(G4Triton::Triton()); << 73 { 72 if (Z == 2) result->SetDefinition(G4He3::H << 74 result->SetDefinition(G4Deuteron::Deuteron()); 73 } << 75 } 74 else if (A == 4) { << 76 else if(A==3) 75 result->SetDefinition(G4Alpha::Alpha()); << 77 { 76 // 110607 TK modified following parts for << 78 result->SetDefinition(G4Triton::Triton()); 77 // if(Z!=2) throw G4HadronicException(__FI << 79 if(Z==2) result->SetDefinition(G4He3::He3()); 78 if (Z != 2) { << 80 } 79 result->SetDefinition(G4IonTable::GetIon << 81 else if(A==4) 80 } << 82 { 81 } << 83 result->SetDefinition(G4Alpha::Alpha()); 82 else { << 84 //110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) 83 // 110607 TK modified following parts for << 85 //if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); 84 result->SetDefinition(G4IonTable::GetIonTa << 86 if(Z!=2) 85 // throw G4HadronicException(__FILE__, __L << 87 { 86 } << 88 result->SetDefinition( G4IonTable::GetIonTable()->GetIon ( Z , A , 0.0 ) ); 87 << 89 } 88 // Bug #1745 DHW G4double cosTh = G4UniformR << 90 } 89 G4double cosTh = 2. * G4UniformRand() - 1.; << 91 else 90 G4double phi = twopi * G4UniformRand(); << 92 { 91 G4double theta = std::acos(cosTh); << 93 //110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) 92 G4double sinth = std::sin(theta); << 94 result->SetDefinition( G4IonTable::GetIonTable()->GetIon ( Z , A , 0.0 ) ); 93 << 95 //throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPIsotropic: Unknown ion case 2"); 94 // we need the the Q value of the reaction << 96 } 95 result->SetKineticEnergy(std::max(0.001 * Me << 97 96 G4double mtot = result->GetTotalMomentum(); << 98 // Bug #1745 DHW G4double cosTh = G4UniformRand(); 97 G4ThreeVector tempVector(mtot * sinth * std: << 99 G4double cosTh = 2.*G4UniformRand()-1.; 98 mtot * cosTh); << 100 G4double phi = twopi*G4UniformRand(); 99 result->SetMomentum(tempVector); << 101 G4double theta = std::acos(cosTh); >> 102 G4double sinth = std::sin(theta); >> 103 >> 104 // we need the the Q value of the reaction >> 105 result->SetKineticEnergy(std::max(0.001*MeV, anEnergy+GetQValue())); >> 106 G4double mtot = result->GetTotalMomentum(); >> 107 G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*cosTh); >> 108 result->SetMomentum(tempVector); 100 109 101 return result; << 110 return result; 102 } 111 } 103 112