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 /// \file hadronic/Hadr00/src/DetectorConstruc 26 /// \file hadronic/Hadr00/src/DetectorConstruction.cc 27 /// \brief Implementation of the DetectorConst 27 /// \brief Implementation of the DetectorConstruction class 28 // 28 // 29 // 29 // 30 ////////////////////////////////////////////// 30 ///////////////////////////////////////////////////////////////////////// 31 // 31 // 32 // DetectorConstruction 32 // DetectorConstruction 33 // 33 // 34 // Created: 20.06.2008 V.Ivanchenko 34 // Created: 20.06.2008 V.Ivanchenko 35 // 35 // 36 // Modified: 36 // Modified: 37 // 37 // 38 ////////////////////////////////////////////// 38 //////////////////////////////////////////////////////////////////////// 39 // << 39 // 40 40 41 #include "DetectorConstruction.hh" 41 #include "DetectorConstruction.hh" 42 << 43 #include "DetectorMessenger.hh" 42 #include "DetectorMessenger.hh" 44 43 45 #include "G4Colour.hh" << 44 #include "G4Tubs.hh" 46 #include "G4GeometryManager.hh" << 47 #include "G4LogicalVolume.hh" 45 #include "G4LogicalVolume.hh" 48 #include "G4LogicalVolumeStore.hh" << 49 #include "G4NistManager.hh" << 50 #include "G4PVPlacement.hh" 46 #include "G4PVPlacement.hh" 51 #include "G4PhysicalConstants.hh" << 47 52 #include "G4PhysicalVolumeStore.hh" << 53 #include "G4RunManager.hh" 48 #include "G4RunManager.hh" >> 49 >> 50 #include "G4GeometryManager.hh" >> 51 #include "G4PhysicalVolumeStore.hh" >> 52 #include "G4LogicalVolumeStore.hh" 54 #include "G4SolidStore.hh" 53 #include "G4SolidStore.hh" 55 #include "G4SystemOfUnits.hh" << 54 56 #include "G4Tubs.hh" << 57 #include "G4UnitsTable.hh" << 58 #include "G4VisAttributes.hh" 55 #include "G4VisAttributes.hh" >> 56 #include "G4Colour.hh" >> 57 >> 58 #include "G4UnitsTable.hh" 59 #include "G4ios.hh" 59 #include "G4ios.hh" 60 60 >> 61 #include "G4NistManager.hh" >> 62 >> 63 #include "G4PhysicalConstants.hh" >> 64 #include "G4SystemOfUnits.hh" >> 65 61 //....oooOO0OOooo........oooOO0OOooo........oo 66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 62 67 63 DetectorConstruction::DetectorConstruction() 68 DetectorConstruction::DetectorConstruction() 64 : G4VUserDetectorConstruction(), << 69 : G4VUserDetectorConstruction(), 65 fTargetMaterial(nullptr), << 70 fTargetMaterial(nullptr), fWorldMaterial(nullptr), 66 fWorldMaterial(nullptr), << 71 fSolidW(nullptr), fSolidA(nullptr), 67 fSolidW(nullptr), << 72 fLogicTarget(nullptr), fLogicWorld(nullptr), 68 fSolidA(nullptr), << 73 fPhysWorld(nullptr), fPhysList(nullptr) 69 fLogicTarget(nullptr), << 70 fLogicWorld(nullptr), << 71 fPhysWorld(nullptr), << 72 fPhysList(nullptr) << 73 { 74 { 74 fDetectorMessenger = new DetectorMessenger(t 75 fDetectorMessenger = new DetectorMessenger(this); 75 76 76 fRadius = 5. * cm; << 77 fRadius = 5.*cm; 77 fLength = 10. * cm; << 78 fLength = 10.*cm; 78 79 79 fTargetMaterial = G4NistManager::Instance()- 80 fTargetMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_Al"); 80 fWorldMaterial = G4NistManager::Instance()-> << 81 fWorldMaterial = >> 82 G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic"); 81 83 82 ComputeGeomParameters(); 84 ComputeGeomParameters(); 83 } 85 } 84 86 85 //....oooOO0OOooo........oooOO0OOooo........oo 87 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 86 88 87 DetectorConstruction::~DetectorConstruction() 89 DetectorConstruction::~DetectorConstruction() 88 { << 90 { 89 delete fDetectorMessenger; 91 delete fDetectorMessenger; 90 } 92 } 91 93 92 void DetectorConstruction::ComputeGeomParamete 94 void DetectorConstruction::ComputeGeomParameters() 93 { 95 { 94 // Sizes 96 // Sizes 95 fWorldR = fRadius + CLHEP::cm; << 97 fWorldR = fRadius + CLHEP::cm; 96 fWorldZ = fLength + CLHEP::cm; << 98 fWorldZ = fLength + CLHEP::cm; 97 if (fPhysWorld) { << 99 if(fPhysWorld) { 98 fSolidW->SetOuterRadius(fWorldR); 100 fSolidW->SetOuterRadius(fWorldR); 99 fSolidW->SetZHalfLength(fWorldZ * 0.5); << 101 fSolidW->SetZHalfLength(fWorldZ*0.5); 100 fSolidA->SetOuterRadius(fRadius); 102 fSolidA->SetOuterRadius(fRadius); 101 fSolidA->SetZHalfLength(fLength * 0.5); << 103 fSolidA->SetZHalfLength(fLength*0.5); 102 } 104 } 103 } 105 } 104 106 105 G4VPhysicalVolume* DetectorConstruction::Const 107 G4VPhysicalVolume* DetectorConstruction::Construct() 106 { 108 { 107 if (fPhysWorld) { << 109 if(fPhysWorld) { return fPhysWorld; } 108 return fPhysWorld; << 109 } << 110 ComputeGeomParameters(); 110 ComputeGeomParameters(); 111 111 112 // 112 // 113 // World 113 // World 114 // 114 // 115 fSolidW = new G4Tubs("World", 0., fWorldR, 0 << 115 fSolidW = new G4Tubs("World", 0., fWorldR, 0.5*fWorldZ, 0., twopi); 116 fLogicWorld = new G4LogicalVolume(fSolidW, f << 116 fLogicWorld = new G4LogicalVolume(fSolidW, fWorldMaterial,"World"); 117 fPhysWorld = << 117 fPhysWorld = new G4PVPlacement(nullptr, G4ThreeVector(0.,0.,0.), 118 new G4PVPlacement(nullptr, G4ThreeVector(0 << 118 fLogicWorld, "World", >> 119 nullptr, false, 0); 119 120 120 // 121 // 121 // Target volume 122 // Target volume 122 // 123 // 123 fSolidA = new G4Tubs("Target", 0., fRadius, << 124 fSolidA = new G4Tubs("Target", 0., fRadius, 0.5*fLength, 0.,twopi); 124 fLogicTarget = new G4LogicalVolume(fSolidA, 125 fLogicTarget = new G4LogicalVolume(fSolidA, fTargetMaterial, "Target"); 125 new G4PVPlacement(nullptr, G4ThreeVector(), << 126 new G4PVPlacement(nullptr, G4ThreeVector(), fLogicTarget, "Target", >> 127 fLogicWorld, false, 0); 126 128 127 G4cout << "### Target consist of " << fTarge << 129 G4cout << "### Target consist of " 128 << " disks with R(mm)= " << fRadius / << 130 << fTargetMaterial->GetName() 129 << G4endl; << 131 << " disks with R(mm)= " << fRadius/mm >> 132 << " fLength(mm)= " << fLength/mm >> 133 << " ###" << G4endl; 130 134 131 // colors 135 // colors 132 fLogicWorld->SetVisAttributes(G4VisAttribute 136 fLogicWorld->SetVisAttributes(G4VisAttributes::GetInvisible()); 133 137 134 G4VisAttributes* regCcolor = new G4VisAttrib 138 G4VisAttributes* regCcolor = new G4VisAttributes(G4Colour(0., 0.3, 0.7)); 135 fLogicTarget->SetVisAttributes(regCcolor); 139 fLogicTarget->SetVisAttributes(regCcolor); 136 140 137 G4cout << *(G4Material::GetMaterialTable()) 141 G4cout << *(G4Material::GetMaterialTable()) << G4endl; 138 142 139 return fPhysWorld; 143 return fPhysWorld; 140 } 144 } 141 145 142 //....oooOO0OOooo........oooOO0OOooo........oo 146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 143 147 144 void DetectorConstruction::SetTargetMaterial(c 148 void DetectorConstruction::SetTargetMaterial(const G4String& mat) 145 { 149 { 146 // search the material by its name 150 // search the material by its name 147 G4Material* material = G4NistManager::Instan 151 G4Material* material = G4NistManager::Instance()->FindOrBuildMaterial(mat); 148 152 149 if (material && material != fTargetMaterial) 153 if (material && material != fTargetMaterial) { 150 fTargetMaterial = material; 154 fTargetMaterial = material; 151 if (fLogicTarget) { << 155 if(fLogicTarget) { fLogicTarget->SetMaterial(fTargetMaterial); } 152 fLogicTarget->SetMaterial(fTargetMateria << 153 } << 154 G4RunManager::GetRunManager()->PhysicsHasB 156 G4RunManager::GetRunManager()->PhysicsHasBeenModified(); 155 } 157 } 156 } 158 } 157 159 158 //....oooOO0OOooo........oooOO0OOooo........oo 160 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 159 161 160 void DetectorConstruction::SetWorldMaterial(co 162 void DetectorConstruction::SetWorldMaterial(const G4String& mat) 161 { 163 { 162 // search the material by its name 164 // search the material by its name 163 G4Material* material = G4NistManager::Instan 165 G4Material* material = G4NistManager::Instance()->FindOrBuildMaterial(mat); 164 166 165 if (material && material != fWorldMaterial) 167 if (material && material != fWorldMaterial) { 166 fWorldMaterial = material; 168 fWorldMaterial = material; 167 if (fLogicWorld) { << 169 if(fLogicWorld) { fLogicWorld->SetMaterial(fWorldMaterial); } 168 fLogicWorld->SetMaterial(fWorldMaterial) << 169 } << 170 G4RunManager::GetRunManager()->PhysicsHasB 170 G4RunManager::GetRunManager()->PhysicsHasBeenModified(); 171 } 171 } 172 } 172 } 173 173 174 void DetectorConstruction::SetTargetRadius(G4d << 174 void DetectorConstruction::SetTargetRadius(G4double val) 175 { 175 { 176 if (val > 0.0 && val != fRadius) { << 176 if(val > 0.0 && val != fRadius) { 177 fRadius = val; 177 fRadius = val; 178 ComputeGeomParameters(); 178 ComputeGeomParameters(); 179 } << 179 } 180 } 180 } 181 181 182 //....oooOO0OOooo........oooOO0OOooo........oo 182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 183 183 184 void DetectorConstruction::SetTargetLength(G4d << 184 void DetectorConstruction::SetTargetLength(G4double val) 185 { 185 { 186 if (val > 0.0 && val != fLength) { << 186 if(val > 0.0 && val != fLength) { 187 fLength = val; 187 fLength = val; 188 ComputeGeomParameters(); 188 ComputeGeomParameters(); 189 } << 189 } 190 } 190 } 191 191 192 //....oooOO0OOooo........oooOO0OOooo........oo 192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 193 193