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 Class file 30 // 31 // 32 // File name: G4RDGenerator2BS 33 // 34 // Author: Andreia Trindade (andreia@li 35 // Pedro Rodrigues (psilva@lip 36 // Luis Peralta (luis@lip.p 37 // 38 // Creation date: 2 June 2003 39 // 40 // Modifications: 41 // 02 Jun 2003 First implem 42 // 05 Nov 2003 MGP Fixed std na 43 // 17 Nov 2003 MGP Fixed compil 44 // 45 // Class Description: 46 // 47 // Concrete base class for Bremsstrahlung Angu 48 // 49 // Class Description: End 50 // 51 // ------------------------------------------- 52 // 53 // 54 55 #include "G4RDGenerator2BS.hh" 56 #include "Randomize.hh" 57 #include "G4PhysicalConstants.hh" 58 // 59 60 G4RDGenerator2BS::G4RDGenerator2BS(const G4Str 61 {;} 62 63 // 64 65 G4RDGenerator2BS::~G4RDGenerator2BS() 66 {;} 67 68 // 69 70 G4double G4RDGenerator2BS::PolarAngle(const G4 71 const G4double final_energy, 72 const G4int Z) 73 { 74 75 // Adapted from "Improved bremsstrahlung pho 76 // by Alex F. Bielajew, Rahde Mohan anc Chen 77 // Ionizing Radiation Standards 78 // Institute for National Measurement Standa 79 // National Research Council of Canada 80 // Departement of Medical Physics, Memorial 81 82 83 G4double theta = 0; 84 85 G4double initialTotalEnergy = (initial_energ 86 G4double finalTotalEnergy = (final_energy+el 87 EnergyRatio = finalTotalEnergy/initialTotalE 88 G4double gMaxEnergy = (pi*initialTotalEnergy 89 90 G4double Zeff = std::sqrt(static_cast<G4doub 91 z = (0.00008116224*(std::pow(Zeff,0.3333333) 92 93 // Rejection arguments 94 rejection_argument1 = (1.0+EnergyRatio*Energ 95 rejection_argument2 = - 2.0*EnergyRatio + 3. 96 rejection_argument3 = ((1-EnergyRatio)/(2.0* 97 ((1-EnergyRatio)/(2.0*initialTotalEnergy*E 98 99 // Calculate rejection function at 0, 1 and 100 G4double gfunction0 = RejectionFunction(0); 101 G4double gfunction1 = RejectionFunction(1); 102 G4double gfunctionEmax = RejectionFunction(g 103 104 105 // Calculate Maximum value 106 G4double gMaximum = std::max(gfunction0,gfun 107 gMaximum = std::max(gMaximum,gfunctionEmax); 108 109 G4double rand, gfunctionTest, randTest; 110 111 do{ 112 rand = G4UniformRand(); 113 rand = rand/(1-rand+1.0/gMaxEnergy); 114 gfunctionTest = RejectionFunction(rand); 115 randTest = G4UniformRand(); 116 117 }while(randTest > (gfunctionTest/gMaximum)); 118 119 theta = std::sqrt(rand)/initialTotalEnergy; 120 121 122 return theta; 123 } 124 // 125 126 G4double G4RDGenerator2BS::RejectionFunction(G 127 { 128 129 G4double argument = (1+value)*(1+value); 130 131 G4double gfunction = (4+std::log(rejection_a 132 ((4*EnergyRatio*value/argument)-rejection_ 133 134 return gfunction; 135 136 } 137 138 void G4RDGenerator2BS::PrintGeneratorInformati 139 { 140 G4cout << "\n" << G4endl; 141 G4cout << "Bremsstrahlung Angular Generator 142 G4cout << "Sampling algorithm adapted from P 143 G4cout << "\n" << G4endl; 144 } 145 146