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 #include "G4StrawTubeXTRadiator.hh" 28 29 #include "G4Gamma.hh" 30 #include "G4PhysicalConstants.hh" 31 #include "G4SystemOfUnits.hh" 32 33 ////////////////////////////////////////////// 34 // Constructor, destructor 35 G4StrawTubeXTRadiator::G4StrawTubeXTRadiator(G 36 G 37 G 38 G 39 G 40 c 41 : G4VXTRenergyLoss(anEnvelope, foilMat, gasM 42 { 43 if(verboseLevel > 0) 44 G4cout << "Straw tube X-ray TR radiator E 45 46 if(unishut) 47 { 48 fAlphaPlate = 1. / 3.; 49 fAlphaGas = 12.4; 50 if(verboseLevel > 0) 51 G4cout << "straw uniform shooting: " 52 << "fAlphaPlate = " << fAlphaPlat 53 << " ; fAlphaGas = " << fAlphaGas 54 } 55 else 56 { 57 fAlphaPlate = 0.5; 58 fAlphaGas = 5.; 59 if(verboseLevel > 0) 60 G4cout << "straw isotropical shooting: " 61 << "fAlphaPlate = " << fAlphaPlat 62 << " ; fAlphaGas = " << fAlphaGas 63 } 64 65 // index of medium material 66 fMatIndex3 = (G4int)mediumMat->GetIndex(); 67 if(verboseLevel > 0) 68 G4cout << "medium material = " << mediumMa 69 70 // plasma energy squared for plate material 71 fSigma3 = fPlasmaCof * mediumMat->GetElectro 72 if(verboseLevel > 0) 73 G4cout << "medium plasma energy = " << std 74 << G4endl; 75 76 // Compute cofs for preparation of linear ph 77 ComputeMediumPhotoAbsCof(); 78 } 79 80 ////////////////////////////////////////////// 81 G4StrawTubeXTRadiator::~G4StrawTubeXTRadiator( 82 83 void G4StrawTubeXTRadiator::ProcessDescription 84 { 85 out << "Simulation of forward X-ray transiti 86 "a straw tube radiator.\n"; 87 } 88 89 ////////////////////////////////////////////// 90 // Approximation for radiator interference fac 91 // straw tube radiator. The plate (window, str 92 // gap thicknesses are gamma distributed. 93 // The mean values of the plate and gas gap th 94 // are supposed to be about XTR formation zone 95 G4double G4StrawTubeXTRadiator::GetStackFactor 96 97 { 98 G4double result, L2, L3, M2, M3; 99 100 L2 = GetPlateFormationZone(energy, gamma, va 101 L3 = GetGasFormationZone(energy, gamma, varA 102 103 M2 = GetPlateLinearPhotoAbs(energy); 104 M3 = GetGasLinearPhotoAbs(energy); 105 106 G4complex C2(1.0 + 0.5 * fPlateThick * M2 / 107 fPlateThick / L2 / fAlphaPlate) 108 G4complex C3(1.0 + 0.5 * fGasThick * M3 / fA 109 fGasThick / L3 / fAlphaGas); 110 111 G4complex H2 = std::pow(C2, -fAlphaPlate); 112 G4complex H3 = std::pow(C3, -fAlphaGas); 113 G4complex H = H2 * H3; 114 115 G4complex Z1 = GetMediumComplexFZ(energy, ga 116 G4complex Z2 = GetPlateComplexFZ(energy, gam 117 G4complex Z3 = GetGasComplexFZ(energy, gamma 118 119 G4complex R = (Z1 - Z2) * (Z1 - Z2) * (1. - 120 (Z2 - Z3) * (Z2 - Z3) * (1. - 121 2. * (Z1 - Z2) * (Z2 - Z3) * H 122 123 result = 2.0 * std::real(R) * (varAngle * en 124 125 return result; 126 } 127 128 ////////////////////////////////////////////// 129 // Calculates formation zone for external medi 130 G4double G4StrawTubeXTRadiator::GetMediumForma 131 132 133 { 134 G4double cof, lambda; 135 lambda = 1.0 / gamma / gamma + varAngle + fS 136 cof = 2.0 * hbarc / omega / lambda; 137 return cof; 138 } 139 140 ////////////////////////////////////////////// 141 // Calculates complex formation zone for exter 142 G4complex G4StrawTubeXTRadiator::GetMediumComp 143 144 145 { 146 G4double cof, length, delta, real_v, image_v 147 148 length = 0.5 * GetMediumFormationZone(omega, 149 delta = length * GetMediumLinearPhotoAbs(om 150 cof = 1.0 / (1.0 + delta * delta); 151 152 real_v = length * cof; 153 image_v = real_v * delta; 154 155 G4complex zone(real_v, image_v); 156 return zone; 157 } 158 159 ////////////////////////////////////////////// 160 // Computes matrix of Sandia photo absorption 161 // medium material 162 void G4StrawTubeXTRadiator::ComputeMediumPhoto 163 { 164 const G4MaterialTable* theMaterialTable = G4 165 const G4Material* mat = (* 166 fMediumPhotoAbsCof = ma 167 } 168 169 ////////////////////////////////////////////// 170 // Returns the value of linear photo absorptio 171 // length) for medium for given energy of X-ra 172 G4double G4StrawTubeXTRadiator::GetMediumLinea 173 { 174 G4double omega2, omega3, omega4; 175 176 omega2 = omega * omega; 177 omega3 = omega2 * omega; 178 omega4 = omega2 * omega2; 179 180 const G4double* SandiaCof = 181 fMediumPhotoAbsCof->GetSandiaCofForMateria 182 183 G4double cross = SandiaCof[0] / omega + Sand 184 SandiaCof[2] / omega3 + San 185 return cross; 186 } 187