Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 28 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 29 30 #include "TransitionRadiationPhysics.hh" 31 32 #include "DetectorConstruction.hh" 33 #include "XTRTransparentRegRadModel.hh" 34 35 #include "G4Electron.hh" 36 #include "G4GammaXTRadiator.hh" 37 #include "G4Positron.hh" 38 #include "G4ProcessManager.hh" 39 #include "G4RegularXTRadiator.hh" 40 #include "G4StrawTubeXTRadiator.hh" 41 #include "G4TransparentRegXTRadiator.hh" 42 #include "G4VXTRenergyLoss.hh" 43 #include "G4XTRGammaRadModel.hh" 44 #include "G4XTRRegularRadModel.hh" 45 #include "G4XTRTransparentRegRadModel.hh" 46 47 G4ThreadLocal G4VXTRenergyLoss* TransitionRadiationPhysics::fXTRProcess = nullptr; 48 49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 50 51 TransitionRadiationPhysics::TransitionRadiationPhysics(G4int verb, DetectorConstruction* ptr) 52 : G4VPhysicsConstructor("XTR"), fDetector(ptr), fVerbose(verb), fXTRModel("transpM") 53 {} 54 55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 56 57 TransitionRadiationPhysics::~TransitionRadiationPhysics() {} 58 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 61 void TransitionRadiationPhysics::ConstructProcess() 62 { 63 if ("dummy" == fXTRModel) { 64 return; 65 } 66 if (0 < fVerbose) { 67 G4cout << "TransitionRadiationPhysics: XTR model <" << fXTRModel << ">" << G4endl; 68 } 69 RadiatorDescription* rDescription = fDetector->GetRadiatorDescription(); 70 71 if (fXTRModel == "gammaR") { 72 fXTRProcess = new G4GammaXTRadiator(rDescription->fLogicalVolume, 100., 100., 73 rDescription->fFoilMaterial, rDescription->fGasMaterial, 74 rDescription->fFoilThickness, rDescription->fGasThickness, 75 rDescription->fFoilNumber, "GammaXTRadiator"); 76 } 77 else if (fXTRModel == "gammaM") { 78 fXTRProcess = new G4XTRGammaRadModel(rDescription->fLogicalVolume, 100., 100., 79 rDescription->fFoilMaterial, rDescription->fGasMaterial, 80 rDescription->fFoilThickness, rDescription->fGasThickness, 81 rDescription->fFoilNumber, "GammaXTRadiator"); 82 } 83 else if (fXTRModel == "strawR") { 84 fXTRProcess = new G4StrawTubeXTRadiator( 85 rDescription->fLogicalVolume, rDescription->fFoilMaterial, rDescription->fGasMaterial, 0.53, 86 3.14159, fDetector->GetAbsorberMaterial(), true, "strawXTRadiator"); 87 } 88 else if (fXTRModel == "regR") { 89 fXTRProcess = new G4RegularXTRadiator(rDescription->fLogicalVolume, rDescription->fFoilMaterial, 90 rDescription->fGasMaterial, rDescription->fFoilThickness, 91 rDescription->fGasThickness, rDescription->fFoilNumber, 92 "RegularXTRadiator"); 93 } 94 else if (fXTRModel == "transpR") { 95 // G4TransparentRegXTRadiator* 96 fXTRProcess = new G4TransparentRegXTRadiator( 97 rDescription->fLogicalVolume, rDescription->fFoilMaterial, rDescription->fGasMaterial, 98 rDescription->fFoilThickness, rDescription->fGasThickness, rDescription->fFoilNumber, 99 "RegularXTRadiator"); 100 } 101 else if (fXTRModel == "regM") { 102 fXTRProcess = new G4XTRRegularRadModel( 103 rDescription->fLogicalVolume, rDescription->fFoilMaterial, rDescription->fGasMaterial, 104 rDescription->fFoilThickness, rDescription->fGasThickness, rDescription->fFoilNumber, 105 "RegularXTRadiator"); 106 } 107 else if (fXTRModel == "transpM") { 108 fXTRProcess = new XTRTransparentRegRadModel( 109 rDescription->fLogicalVolume, rDescription->fFoilMaterial, rDescription->fGasMaterial, 110 rDescription->fFoilThickness, rDescription->fGasThickness, rDescription->fFoilNumber, 111 "RegularXTRadiator"); 112 } 113 if (!fXTRProcess) { 114 if (0 < fVerbose) { 115 G4cout << "TransitionRadiationPhysics: XTR model <" << fXTRModel 116 << "> is not known - no XTR process defined" << G4endl; 117 } 118 return; 119 } 120 121 fXTRProcess->SetVerboseLevel(fVerbose); 122 123 G4Electron* elec = G4Electron::Electron(); 124 G4ProcessManager* manager = elec->GetProcessManager(); 125 manager->AddDiscreteProcess(fXTRProcess); 126 127 G4Positron* posi = G4Positron::Positron(); 128 manager = posi->GetProcessManager(); 129 manager->AddDiscreteProcess(fXTRProcess); 130 } 131 132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 133