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 "G4RegularXTRadiator.hh" 28 29 #include "G4Gamma.hh" 30 #include "G4PhysicalConstants.hh" 31 32 ////////////////////////////////////////////// 33 // Constructor, destructor 34 G4RegularXTRadiator::G4RegularXTRadiator(G4Log 35 G4Mat 36 G4Mat 37 G4dou 38 const 39 : G4VXTRenergyLoss(anEnvelope, foilMat, gasM 40 { 41 G4cout << "Regular X-ray TR radiator EM proc 42 43 // Build energy and angular integral spectra 44 // a radiator 45 46 fAlphaPlate = 10000; 47 fAlphaGas = 1000; 48 G4cout << "fAlphaPlate = " << fAlphaPlate << 49 << G4endl; 50 } 51 52 ////////////////////////////////////////////// 53 G4RegularXTRadiator::~G4RegularXTRadiator() = 54 55 void G4RegularXTRadiator::ProcessDescription(s 56 { 57 out << "Simulation of X-ray transition radia 58 "relativistic charged particles cross 59 "two materials. Thicknesses of plates 60 } 61 62 ////////////////////////////////////////////// 63 G4double G4RegularXTRadiator::SpectralXTRdEdx( 64 { 65 G4double result, sum = 0., tmp, cof1, cof2, 66 G4double aMa, bMb, sigma, dump; 67 G4int k, kMax, kMin; 68 69 aMa = fPlateThick * GetPlateLinearPhotoAbs 70 bMb = fGasThick * GetGasLinearPhotoAbs(ene 71 sigma = 0.5 * (aMa + bMb); 72 dump = std::exp(-fPlateNumber * sigma); 73 if(verboseLevel > 2) 74 G4cout << " dump = " << dump << G4endl; 75 cofPHC = 4 * pi * hbarc; 76 tmp = (fSigma1 - fSigma2) / cofPHC / ener 77 cof1 = fPlateThick * tmp; 78 cof2 = fGasThick * tmp; 79 80 cofMin = energy * (fPlateThick + fGasThick) 81 cofMin += (fPlateThick * fSigma1 + fGasThick 82 cofMin /= cofPHC; 83 84 theta2 = cofPHC / (energy * (fPlateThick + f 85 86 kMin = G4int(cofMin); 87 if(cofMin > kMin) 88 kMin++; 89 90 kMax = kMin + 49; 91 92 if(verboseLevel > 2) 93 { 94 G4cout << cof1 << " " << cof2 << " 95 G4cout << "kMin = " << kMin << "; kMax 96 } 97 for(k = kMin; k <= kMax; ++k) 98 { 99 tmp = pi * fPlateThick * (k + cof2) / ( 100 result = (k - cof1) * (k - cof1) * (k + co 101 if(k == kMin && kMin == G4int(cofMin)) 102 { 103 sum += 104 0.5 * std::sin(tmp) * std::sin(tmp) * 105 } 106 else 107 { 108 sum += std::sin(tmp) * std::sin(tmp) * s 109 } 110 theta2k = std::sqrt(theta2 * std::abs(k - 111 112 if(verboseLevel > 2) 113 { 114 G4cout << k << " " << theta2k << " 115 << std::sin(tmp) * std::sin(tmp) 116 << " " << sum << G4endl; 117 } 118 } 119 result = 2 * (cof1 + cof2) * (cof1 + cof2) * 120 result *= (1 - dump + 2 * dump * fPlateNumbe 121 122 return result; 123 } 124 125 ////////////////////////////////////////////// 126 // Approximation for radiator interference fac 127 // fully Regular radiator. The plate and gas g 128 // The mean values of the plate and gas gap th 129 // are supposed to be about XTR formation zone 130 // mean absorption length of XTR photons in co 131 132 G4double G4RegularXTRadiator::GetStackFactor(G 133 G 134 { 135 // some gamma (10000/1000) like algorithm 136 137 G4double result, Za, Zb, Ma, Mb; 138 139 Za = GetPlateFormationZone(energy, gamma, va 140 Zb = GetGasFormationZone(energy, gamma, varA 141 142 Ma = GetPlateLinearPhotoAbs(energy); 143 Mb = GetGasLinearPhotoAbs(energy); 144 145 G4complex Ca(1.0 + 0.5 * fPlateThick * Ma / 146 fPlateThick / Za / fAlphaPlate) 147 G4complex Cb(1.0 + 0.5 * fGasThick * Mb / fA 148 fGasThick / Zb / fAlphaGas); 149 150 G4complex Ha = std::pow(Ca, -fAlphaPlate); 151 G4complex Hb = std::pow(Cb, -fAlphaGas); 152 G4complex H = Ha * Hb; 153 154 G4complex F1 = (1.0 - Ha) * (1.0 - Hb) / (1. 155 156 G4complex F2 = (1.0 - Ha) * (1.0 - Ha) * Hb 157 (1.0 - std::pow(H, fPlateNumb 158 159 G4complex R = (F1 + F2) * OneInterfaceXTRdEd 160 161 result = 2.0 * std::real(R); 162 163 return result; 164 } 165