#include <G4XTRGammaRadModel.hh>
Inheritance diagram for G4XTRGammaRadModel:
Public Member Functions | |
G4XTRGammaRadModel (G4LogicalVolume *anEnvelope, G4double, G4double, G4Material *, G4Material *, G4double, G4double, G4int, const G4String &processName="XTRgammaRadiator") | |
virtual | ~G4XTRGammaRadModel () |
G4double | GetStackFactor (G4double energy, G4double gamma, G4double varAngle) |
Definition at line 56 of file G4XTRGammaRadModel.hh.
G4XTRGammaRadModel::G4XTRGammaRadModel | ( | G4LogicalVolume * | anEnvelope, | |
G4double | , | |||
G4double | , | |||
G4Material * | , | |||
G4Material * | , | |||
G4double | , | |||
G4double | , | |||
G4int | , | |||
const G4String & | processName = "XTRgammaRadiator" | |||
) |
Definition at line 42 of file G4XTRGammaRadModel.cc.
References G4VXTRenergyLoss::fAlphaGas, G4VXTRenergyLoss::fAlphaPlate, G4VXTRenergyLoss::fExitFlux, G4cout, and G4endl.
00047 : 00048 G4VXTRenergyLoss(anEnvelope,foilMat,gasMat,a,b,n,processName) 00049 { 00050 G4cout<<"Gammma distributed X-ray TR radiator model is called"<<G4endl ; 00051 00052 // Build energy and angular integral spectra of X-ray TR photons from 00053 // a radiator 00054 00055 fAlphaPlate = alphaPlate ; 00056 fAlphaGas = alphaGas ; 00057 G4cout<<"fAlphaPlate = "<<fAlphaPlate<<" ; fAlphaGas = "<<fAlphaGas<<G4endl ; 00058 fExitFlux = true; 00059 // BuildTable() ; 00060 }
G4XTRGammaRadModel::~G4XTRGammaRadModel | ( | ) | [virtual] |
G4double G4XTRGammaRadModel::GetStackFactor | ( | G4double | energy, | |
G4double | gamma, | |||
G4double | varAngle | |||
) | [virtual] |
Reimplemented from G4VXTRenergyLoss.
Definition at line 80 of file G4XTRGammaRadModel.cc.
References G4VXTRenergyLoss::fAlphaGas, G4VXTRenergyLoss::fAlphaPlate, G4VXTRenergyLoss::fGasThick, G4VXTRenergyLoss::fPlateNumber, G4VXTRenergyLoss::fPlateThick, G4VXTRenergyLoss::GetGasFormationZone(), G4VXTRenergyLoss::GetGasLinearPhotoAbs(), G4VXTRenergyLoss::GetPlateFormationZone(), G4VXTRenergyLoss::GetPlateLinearPhotoAbs(), and G4VXTRenergyLoss::OneInterfaceXTRdEdx().
00082 { 00083 G4double result, Qa, Qb, Q, Za, Zb, Ma, Mb ; 00084 00085 Za = GetPlateFormationZone(energy,gamma,varAngle) ; 00086 Zb = GetGasFormationZone(energy,gamma,varAngle) ; 00087 00088 Ma = GetPlateLinearPhotoAbs(energy) ; 00089 Mb = GetGasLinearPhotoAbs(energy) ; 00090 00091 Qa = ( 1.0 + fPlateThick*Ma/fAlphaPlate ) ; 00092 Qa = std::pow(Qa,-fAlphaPlate) ; 00093 Qb = ( 1.0 + fGasThick*Mb/fAlphaGas ) ; 00094 Qb = std::pow(Qb,-fAlphaGas) ; 00095 Q = Qa*Qb ; 00096 00097 G4complex Ca(1.0+0.5*fPlateThick*Ma/fAlphaPlate,fPlateThick/Za/fAlphaPlate) ; 00098 G4complex Cb(1.0+0.5*fGasThick*Mb/fAlphaGas,fGasThick/Zb/fAlphaGas) ; 00099 00100 G4complex Ha = std::pow(Ca,-fAlphaPlate) ; 00101 G4complex Hb = std::pow(Cb,-fAlphaGas) ; 00102 G4complex H = Ha*Hb ; 00103 00104 G4complex F1 = ( 0.5*(1+Qa)*(1.0+H) - Ha - Qa*Hb )/(1.0-H) ; 00105 00106 G4complex F2 = (1.0-Ha)*(Qa-Ha)*Hb/(1.0-H)/(Q-H) ; 00107 00108 F2 *= std::pow(Q,G4double(fPlateNumber)) - std::pow(H,fPlateNumber) ; 00109 00110 result = ( 1 - std::pow(Q,G4double(fPlateNumber)) )/( 1 - Q ) ; 00111 00112 G4complex stack = result*F1; 00113 stack += F2; 00114 stack *= 2.0*OneInterfaceXTRdEdx(energy,gamma,varAngle); 00115 00116 result = std::real(stack); 00117 00118 // result *= 2.0*std::real(F1); 00119 // result += 2.0*std::real(F2); 00120 00121 return result ; 00122 }