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