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 // Authors: S. Meylan and C. Villagrasa (IRSN, 27 // Models come from 28 // M. Bug et al, Rad. Phys and Chem. 130, 459- 29 // 30 31 #include "G4DNAPTBAugerModel.hh" 32 #include "G4PhysicalConstants.hh" 33 #include "G4SystemOfUnits.hh" 34 #include "Randomize.hh" 35 #include "G4Electron.hh" 36 37 #include "G4Material.hh" 38 39 using namespace std; 40 41 G4DNAPTBAugerModel::G4DNAPTBAugerModel(const G 42 { 43 verboseLevel = 0; 44 minElectronEnergy = 0.0; 45 // To inform the user that the Auger model 46 G4cout << modelName <<" is constructed" << 47 } 48 49 G4DNAPTBAugerModel::~G4DNAPTBAugerModel() 50 { 51 if( verboseLevel>0 ) G4cout << modelName < 52 } 53 54 void G4DNAPTBAugerModel::Initialise() 55 { 56 verboseLevel = 0; 57 58 if( verboseLevel>0 ) 59 { 60 G4cout << "PTB Auger model is initiali 61 } 62 63 } 64 65 //....oooOO0OOooo........oooOO0OOooo........oo 66 67 void G4DNAPTBAugerModel::ComputeAugerEffect(st 68 { 69 // Rename material if modified NIST materi 70 // This is needed when material is obtaine 71 G4String materialName = materialNameIni; 72 if(materialName.find("_MODIFIED") != 0u){ 73 materialName = materialName.substr(0,m 74 } 75 76 // check if there is a k-shell ionisation 77 G4int atomId(0); 78 79 atomId = DetermineIonisedAtom(atomId, mate 80 81 if(atomId!=0) 82 { 83 G4double kineticEnergy = CalculAugerEn 84 85 if(kineticEnergy<0) 86 { 87 G4cerr<<"************************* 88 G4cerr<<"FatalError. Auger kinetic 89 exit(EXIT_FAILURE); 90 } 91 92 if(atomId==1 || atomId==2 || atomId==3 93 { 94 GenerateAugerWithRandomDirection(f 95 } 96 else if(atomId==4) 97 { 98 GenerateAugerWithRandomDirection(f 99 GenerateAugerWithRandomDirection(f 100 } 101 } 102 } 103 104 //....oooOO0OOooo........oooOO0OOooo........oo 105 106 G4int G4DNAPTBAugerModel::DetermineIonisedAtom 107 { 108 if(materialName=="THF" || materialName=="b 109 if(bindingEnergy==305.07){ 110 atomId=1; //"carbon"; 111 } 112 else if(bindingEnergy==557.94){ 113 atomId=2; //"oxygen"; 114 } 115 } 116 else if(materialName=="PY" || materialName 117 || materialName=="cytosine_PY" || 118 || materialName=="adenine_PU" || m 119 ) 120 { 121 if(bindingEnergy==307.52){ 122 atomId=1; //"carbon"; 123 } 124 else if(bindingEnergy==423.44){ 125 atomId=4; //"nitrogen"; 126 } 127 } 128 else if(materialName=="TMP"|| materialName 129 if(bindingEnergy==209.59 || bindingEne 130 atomId=3; //"carbonTMP"; 131 } 132 133 return atomId; 134 } 135 136 //....oooOO0OOooo........oooOO0OOooo........oo 137 138 G4double G4DNAPTBAugerModel::CalculAugerEnergy 139 { 140 G4double kineticEnergy; 141 142 if(atomId==2) // oxygen 143 { 144 kineticEnergy = 495*eV; 145 } 146 else 147 { 148 G4double f1, f2, f3, g1, g2, Y; 149 150 Y = G4UniformRand(); 151 152 if(atomId == 1){ // carbon 153 f1 = -7.331e-2; 154 f2 = -3.306e-5; 155 f3 = 2.433e0; 156 g1 = 4.838e-1; 157 g2 = 3.886e0; 158 } 159 else if(atomId == 4){ // nitrogen 160 f1 = -7.518e-2; 161 f2 = 1.178e-4; 162 f3 = 2.600e0; 163 g1 = 4.639e-1; 164 g2 = 3.770e0; 165 } 166 else// if(atomId == 3) // carbon_TMP 167 { 168 f1 = -5.700e-2; 169 f2 = 1.200e-4; 170 f3 = 2.425e0; 171 g1 = 5.200e-1; 172 g2 = 2.560e0; 173 } 174 175 kineticEnergy = pow(10, f1*pow( abs( l 176 } 177 178 return kineticEnergy; 179 } 180 181 //....oooOO0OOooo........oooOO0OOooo........oo 182 183 void G4DNAPTBAugerModel::SetCutForAugerElectro 184 { 185 minElectronEnergy = cut; 186 } 187 188 //....oooOO0OOooo........oooOO0OOooo........oo 189 190 void G4DNAPTBAugerModel::GenerateAugerWithRand 191 { 192 // Isotropic angular distribution for th 193 G4double newcosTh = 1.-2.*G4UniformRand( 194 G4double newsinTh = std::sqrt(1.-newcos 195 G4double newPhi = twopi*G4UniformRand(); 196 197 G4double xDir = newsinTh*std::sin(newPh 198 G4double yDir = newsinTh*std::cos(newPhi 199 G4double zDir = newcosTh; 200 201 G4ThreeVector ElectronDirection(xDir,yDi 202 203 // generation of new particle 204 auto dp = new G4DynamicParticle (G4Elec 205 fvect->push_back(dp); 206 } 207