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 // 19.09.21 V. Grichine, first version 27 // 28 29 #include "G4GaussXTRadiator.hh" 30 31 #include "G4PhysicalConstants.hh" 32 33 ////////////////////////////////////////////// 34 // Constructor, destructor 35 36 G4GaussXTRadiator::G4GaussXTRadiator( 37 G4LogicalVolume* anEnvelope, G4double alph 38 G4double a, G4double b, G4int n, const G4Str 39 : G4VXTRenergyLoss(anEnvelope, foilMat, gasM 40 { 41 if(verboseLevel > 0) 42 G4cout << "Gauss X-ray TR radiator EM pro 43 << G4endl; 44 45 fAlphaPlate = alphaPlate; 46 fAlphaGas = alphaGas; // 1000; // 47 } 48 49 ////////////////////////////////////////////// 50 G4GaussXTRadiator::~G4GaussXTRadiator() = defa 51 52 ////////////////////////////////////////////// 53 void G4GaussXTRadiator::ProcessDescription(std 54 { 55 out << "Simulation of forward X-ray transiti 56 "relativistic charged particles cross 57 "two materials.\n"; 58 } 59 60 ////////////////////////////////////////////// 61 // 62 // The Fabian-Strujinsky (FS) algorithm for in 63 // resolution is about 0.1-0.5 mrad 64 65 G4double G4GaussXTRadiator::SpectralXTRdEdx(G4 66 { 67 G4double result, sum = 0., tmp, cof1, cof2, 68 G4int k, kMax, kMin; 69 70 cofPHC = 4. * pi * hbarc; 71 tmp = (fSigma1 - fSigma2) / cofPHC / ener 72 cof1 = fPlateThick * tmp; 73 cof2 = fGasThick * tmp; 74 75 cofMin = energy * (fPlateThick + fGasThick) 76 cofMin += (fPlateThick * fSigma1 + fGasThick 77 cofMin /= cofPHC; 78 79 theta2 = cofPHC / (energy * (fPlateThick + f 80 81 kMin = G4int(cofMin); 82 if(cofMin > kMin) 83 kMin++; 84 85 kMax = kMin + fKrange; 86 87 if(verboseLevel > 2) 88 { 89 G4cout << cof1 << " " << cof2 << " 90 G4cout << "kMin = " << kMin << "; kMax 91 } 92 for(k = kMin; k <= kMax; ++k) 93 { 94 tmp = pi * fPlateThick * (k + cof2) / ( 95 result = (k - cof1) * (k - cof1) * (k + co 96 if(k == kMin && kMin == G4int(cofMin)) 97 { 98 sum += 99 0.5 * std::sin(tmp) * std::sin(tmp) * 100 } 101 else 102 { 103 sum += std::sin(tmp) * std::sin(tmp) * s 104 } 105 theta2k = std::sqrt(theta2 * std::abs(k - 106 107 if(verboseLevel > 2) 108 { 109 G4cout << k << " " << theta2k << " 110 << std::sin(tmp) * std::sin(tmp) 111 << " " << sum << G4endl; 112 } 113 } 114 result = 4. * (cof1 + cof2) * (cof1 + cof2) 115 result *= fPlateNumber; 116 117 return result; 118 } 119 120 ////////////////////////////////////////////// 121 // 122 // Approximation for radiator interference fac 123 // Gauss-distributed regular radiator. The pla 124 // sa and sb for plate and gas, respectively. 125 // The mean values of the plate and gas gap th 126 // are supposed to be about XTR formation zone 127 128 129 G4double G4GaussXTRadiator::GetStackFactor(G4d 130 131 132 { 133 G4double result(0.); 134 G4double sa = fPlateThick/fAlphaPlate; 135 G4double sb = fGasThick/fAlphaGas; 136 G4double nn = G4double(fPlateNumber); 137 138 G4complex med( 0., 1.); 139 G4complex Z1 = GetPlateComplexFZ( energy, 140 G4complex order1 = -0.5*med*fPlateThick/Z1 - 141 142 G4complex Z2 = GetGasComplexFZ( energy, ga 143 G4complex order2 = -0.5*med*fGasThick/Z2 - 0 144 145 G4complex ordernn = ( order1 + order2 )*nn; 146 147 G4complex Ha = std::exp( order1 ); 148 G4complex Hb = std::exp( order2 ); 149 G4complex H = Ha * Hb; 150 G4complex Hn = std::exp( ordernn ); 151 152 G4complex F1 = ( 1.0 - Ha ) * ( 1.0 - Hb ) * 153 154 G4complex F2 = ( 1.0 - Ha ) * ( 1.0 - Ha ) * 155 156 G4complex R = (F1 + F2) * OneInterfaceXTRdEd 157 158 result = 2.0 * std::real(R); 159 160 return result; 161 } 162