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 biasing/ReverseMC01/src/RMC01Detecto 26 /// \file biasing/ReverseMC01/src/RMC01DetectorConstruction.cc 27 /// \brief Implementation of the RMC01Detector 27 /// \brief Implementation of the RMC01DetectorConstruction class 28 // 28 // >> 29 // $Id: RMC01DetectorConstruction.cc 71233 2013-06-12 13:16:05Z gcosmo $ 29 // 30 // 30 ////////////////////////////////////////////// 31 ////////////////////////////////////////////////////////////// 31 // Class Name: RMC01DetectorConstr 32 // Class Name: RMC01DetectorConstruction 32 // Author: L. Desorgher 33 // Author: L. Desorgher 33 // Organisation: SpaceIT GmbH 34 // Organisation: SpaceIT GmbH 34 // Contract: ESA contract 21435/ 35 // Contract: ESA contract 21435/08/NL/AT 35 // Customer: ESA/ESTEC 36 // Customer: ESA/ESTEC 36 ////////////////////////////////////////////// 37 ////////////////////////////////////////////////////////////// 37 38 38 //....oooOO0OOooo........oooOO0OOooo........oo 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 39 //....oooOO0OOooo........oooOO0OOooo........oo 40 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 40 41 41 #include "RMC01DetectorConstruction.hh" 42 #include "RMC01DetectorConstruction.hh" 42 << 43 #include "RMC01DetectorMessenger.hh" 43 #include "RMC01DetectorMessenger.hh" 44 #include "RMC01SD.hh" << 45 44 46 #include "G4Box.hh" << 47 #include "G4Colour.hh" << 48 #include "G4GeometryManager.hh" << 49 #include "G4LogicalVolume.hh" << 50 #include "G4LogicalVolumeStore.hh" << 51 #include "G4Material.hh" 45 #include "G4Material.hh" >> 46 #include "G4Box.hh" 52 #include "G4Orb.hh" 47 #include "G4Orb.hh" >> 48 #include "G4Tubs.hh" >> 49 #include "G4LogicalVolume.hh" 53 #include "G4PVPlacement.hh" 50 #include "G4PVPlacement.hh" 54 #include "G4PhysicalConstants.hh" << 51 #include "G4GeometryManager.hh" 55 #include "G4PhysicalVolumeStore.hh" 52 #include "G4PhysicalVolumeStore.hh" 56 #include "G4RunManager.hh" << 53 #include "G4LogicalVolumeStore.hh" 57 #include "G4SDManager.hh" << 58 #include "G4SolidStore.hh" 54 #include "G4SolidStore.hh" 59 #include "G4SystemOfUnits.hh" << 60 #include "G4Tubs.hh" << 61 #include "G4VisAttributes.hh" 55 #include "G4VisAttributes.hh" >> 56 #include "G4Colour.hh" >> 57 >> 58 #include "G4SDManager.hh" >> 59 #include "G4RunManager.hh" >> 60 #include "G4PhysicalConstants.hh" >> 61 #include "G4SystemOfUnits.hh" >> 62 #include "RMC01SD.hh" 62 63 63 //....oooOO0OOooo........oooOO0OOooo........oo 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 64 65 65 RMC01DetectorConstruction::RMC01DetectorConstr 66 RMC01DetectorConstruction::RMC01DetectorConstruction() 66 : G4VUserDetectorConstruction(), << 67 : G4VUserDetectorConstruction(), 67 fDetectorMessenger(0), << 68 fDetectorMessenger(0), 68 fShield_Thickness(5. * mm), << 69 fShield_Thickness(5.*mm), 69 fSensitive_cylinder_H(1. * mm), << 70 fSensitive_cylinder_H (1.*mm), 70 fSensitive_cylinder_Rout(1. * mm) << 71 fSensitive_cylinder_Rout (1.*mm) 71 { << 72 { 72 fDetectorMessenger = new RMC01DetectorMessen << 73 fDetectorMessenger = new RMC01DetectorMessenger(this); 73 } 74 } 74 75 75 //....oooOO0OOooo........oooOO0OOooo........oo 76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 76 77 77 RMC01DetectorConstruction::~RMC01DetectorConst 78 RMC01DetectorConstruction::~RMC01DetectorConstruction() 78 { << 79 { delete fDetectorMessenger; 79 delete fDetectorMessenger; << 80 } 80 } 81 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 83 83 84 G4VPhysicalVolume* RMC01DetectorConstruction:: 84 G4VPhysicalVolume* RMC01DetectorConstruction::Construct() 85 { 85 { 86 DefineMaterials(); 86 DefineMaterials(); 87 return ConstructSimpleGeometry(); 87 return ConstructSimpleGeometry(); 88 } 88 } 89 89 90 //....oooOO0OOooo........oooOO0OOooo........oo 90 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 91 91 92 void RMC01DetectorConstruction::DefineMaterial 92 void RMC01DetectorConstruction::DefineMaterials() 93 { << 93 { 94 G4String symbol; // a=mass of a mole; << 94 95 G4double a, z, density; // z=mean number of << 95 G4String symbol; //a=mass of a mole; >> 96 G4double a, z, density; //z=mean number of protons; 96 G4double fractionmass; 97 G4double fractionmass; 97 G4int ncomponents; 98 G4int ncomponents; 98 << 99 99 // 100 // 100 // define Elements 101 // define Elements 101 // 102 // 102 << 103 103 G4Element* N = new G4Element("Nitrogen", sym << 104 G4Element* N = new G4Element("Nitrogen",symbol="N" , z= 7., a= 14.01*g/mole); 104 G4Element* O = new G4Element("Oxygen", symbo << 105 G4Element* O = new G4Element("Oxygen" ,symbol="O" , z= 8., a= 16.00*g/mole); 105 << 106 106 // 107 // 107 // define simple materials 108 // define simple materials 108 // 109 // 109 110 110 new G4Material("Aluminum", z = 13., a = 26.9 << 111 new G4Material("Aluminum", z=13., a=26.98*g/mole, density=2.700*g/cm3); 111 new G4Material("Silicon", z = 14., a = 28.09 << 112 new G4Material("Silicon", z=14., a=28.09*g/mole, density=2.33*g/cm3); 112 new G4Material("Tantalum", z = 73., a = 180. << 113 new G4Material("Tantalum", z=73., a=180.9479*g/mole, density=16.654*g/cm3); 113 114 114 // 115 // 115 // define air << 116 // define air 116 // 117 // 117 118 118 G4Material* Air = new G4Material("Air", dens << 119 G4Material* Air = new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2); 119 Air->AddElement(N, fractionmass = 0.7); << 120 Air->AddElement(N, fractionmass=0.7); 120 Air->AddElement(O, fractionmass = 0.3); << 121 Air->AddElement(O, fractionmass=0.3); 121 << 122 122 // 123 // 123 // Example of Vacuum << 124 //Example of Vacuum 124 // 125 // 125 126 126 new G4Material("Vacuum", z = 1., a = 1.01 * << 127 new G4Material("Vacuum", z=1., a=1.01*g/mole,density= universe_mean_density, 127 3.e-18 * pascal, 2.73 * kelvi << 128 kStateGas, 3.e-18*pascal, 2.73*kelvin); 128 } 129 } 129 130 130 //....oooOO0OOooo........oooOO0OOooo........oo 131 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 131 132 132 G4VPhysicalVolume* RMC01DetectorConstruction:: 133 G4VPhysicalVolume* RMC01DetectorConstruction::ConstructSimpleGeometry() 133 { 134 { 134 // Clean old geometry, if any << 135 135 >> 136 // Clean old geometry, if any >> 137 136 G4GeometryManager::GetInstance()->OpenGeomet 138 G4GeometryManager::GetInstance()->OpenGeometry(); 137 G4PhysicalVolumeStore::GetInstance()->Clean( 139 G4PhysicalVolumeStore::GetInstance()->Clean(); 138 G4LogicalVolumeStore::GetInstance()->Clean() 140 G4LogicalVolumeStore::GetInstance()->Clean(); 139 G4SolidStore::GetInstance()->Clean(); 141 G4SolidStore::GetInstance()->Clean(); 140 142 141 // World 143 // World 142 //----------- 144 //----------- 143 << 145 144 G4Box* solidWorld = new G4Box("World", 15. * << 146 G4Box* solidWorld = new G4Box("World",15.*cm, 15.*cm, 15.*cm); 145 G4LogicalVolume* logicWorld = << 147 G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, 146 new G4LogicalVolume(solidWorld, G4Material << 148 G4Material::GetMaterial("Vacuum"), 147 << 149 "World"); 148 G4VPhysicalVolume* physiWorld = new G4PVPlac << 150 149 << 151 G4VPhysicalVolume* physiWorld = new G4PVPlacement(0, //no rotation 150 << 152 G4ThreeVector(), //at (0,0,0) 151 << 153 logicWorld, //its logical volume 152 << 154 "World", //its name 153 << 155 0, //its mother volume 154 << 156 false, //no boolean operation 155 << 157 0); 156 // Shielding Aluminum Sphere << 158 >> 159 //Shielding Aluminum Sphere 157 //------------------- 160 //------------------- 158 << 161 159 G4double radiusShieldingSphere = 10. * cm; << 162 G4double radiusShieldingSphere =10.*cm; 160 << 163 161 G4Orb* solidShieldingSphere = new G4Orb("Shi << 164 G4Orb* solidShieldingSphere=new G4Orb("Shielding", radiusShieldingSphere); 162 G4LogicalVolume* logicShieldingSphere = << 165 G4LogicalVolume* logicShieldingSphere= 163 new G4LogicalVolume(solidShieldingSphere, << 166 new G4LogicalVolume(solidShieldingSphere, 164 "Shielding"); // its << 167 G4Material::GetMaterial("Aluminum"), 165 << 168 "Shielding"); //its name; 166 new G4PVPlacement(0, // no rotation << 169 167 G4ThreeVector(), // at (0 << 170 new G4PVPlacement(0, //no rotation 168 logicShieldingSphere, // << 171 G4ThreeVector(), //at (0,0,0) 169 "Shielding", // its name << 172 logicShieldingSphere, //its logical volume 170 logicWorld, // its mother << 173 "Shielding", //its name 171 false, // no boolean oper << 174 logicWorld, //its mother volume 172 0); << 175 false, //no boolean operation 173 << 176 0); 174 // Bulk Sphere << 177 >> 178 //Bulk Sphere 175 //------------------- 179 //------------------- 176 << 180 177 G4Orb* solidBulkSphere = new G4Orb("Bulk", r << 181 G4Orb* solidBulkSphere=new G4Orb("Bulk", 178 G4LogicalVolume* logicBulkSphere = << 182 radiusShieldingSphere-fShield_Thickness); 179 new G4LogicalVolume(solidBulkSphere, // i << 183 G4LogicalVolume* logicBulkSphere=new G4LogicalVolume( 180 G4Material::GetMateria << 184 solidBulkSphere,//its solid 181 "Bulk"); // its name; << 185 G4Material::GetMaterial("Air"),//its material 182 << 186 "Bulk"); //its name; 183 new G4PVPlacement(0, // no rotation << 187 184 G4ThreeVector(), // at (0 << 188 new G4PVPlacement(0, //no rotation 185 logicBulkSphere, // its l << 189 G4ThreeVector(), //at (0,0,0) 186 "Bulk", // its name << 190 logicBulkSphere, //its logical volume 187 logicShieldingSphere, // << 191 "Bulk", //its name 188 false, // no boolean oper << 192 logicShieldingSphere, //its mother volume 189 0); << 193 false, //no boolean operation 190 << 194 0); 191 // Detecting cylinder << 195 >> 196 //Detecting cylinder 192 //------------------- 197 //------------------- 193 << 198 194 G4Tubs* solidDetecting = new G4Tubs("Sensiti << 199 G4Tubs* solidDetecting=new G4Tubs("SensitiveVolume", 195 fSensiti << 200 0.,fSensitive_cylinder_Rout,fSensitive_cylinder_H/2., 196 << 201 0.,twopi); 197 G4LogicalVolume* logicDetectingCylinder = << 202 198 new G4LogicalVolume(solidDetecting, G4Mate << 203 G4LogicalVolume* logicDetectingCylinder=new G4LogicalVolume(solidDetecting, 199 << 204 G4Material::GetMaterial("Silicon"), 200 new G4PVPlacement(0, // no rotation << 205 "SensitiveVolume"); 201 G4ThreeVector(0., 0., 0.), << 206 202 logicDetectingCylinder, / << 207 new G4PVPlacement(0, //no rotation 203 "SensitiveVolume", // its << 208 G4ThreeVector(0.,0.,0.), //at (0,0,0) 204 logicBulkSphere, // its m << 209 logicDetectingCylinder, //its logical volume 205 false, // no boolean oper << 210 "SensitiveVolume", //its name 206 0); << 211 logicBulkSphere, //its mother volume 207 << 212 false, //no boolean operation 208 RMC01SD* theSensitiveDetector = new RMC01SD( << 213 0); 209 << 214 >> 215 >> 216 RMC01SD* theSensitiveDetector = new RMC01SD("/SensitiveCylinder"); >> 217 210 G4SDManager::GetSDMpointer()->AddNewDetector 218 G4SDManager::GetSDMpointer()->AddNewDetector(theSensitiveDetector); 211 logicDetectingCylinder->SetSensitiveDetector 219 logicDetectingCylinder->SetSensitiveDetector(theSensitiveDetector); 212 << 220 213 // Tantalum Plates on the top and beside << 221 //Tantalum Plates on the top and beside 214 //------------------------------------- 222 //------------------------------------- 215 G4Box* solidPlate = new G4Box("TantalumPlate << 223 G4Box* solidPlate=new G4Box("TantalumPlate",4.*cm,4.*cm,0.25*mm); 216 G4LogicalVolume* logicPlate = << 224 G4LogicalVolume* logicPlate=new G4LogicalVolume(solidPlate, //its solid 217 new G4LogicalVolume(solidPlate, // its so << 225 G4Material::GetMaterial("Tantalum"),//its material 218 G4Material::GetMateria << 226 "TantalumPlate"); //its name; 219 "TantalumPlate"); // << 227 220 << 228 221 new G4PVPlacement(0, // no rotation << 229 new G4PVPlacement(0, //no rotation 222 G4ThreeVector(0., 0., 6. * << 230 G4ThreeVector(0.,0.,6.*cm), //at (0,0,0) 223 logicPlate, // its logica << 231 logicPlate, //its logical volume 224 "TantalumPlate1", // its << 232 "TantalumPlate1", //its name 225 logicBulkSphere, // its m << 233 logicBulkSphere, //its mother volume 226 false, // no boolean oper << 234 false, //no boolean operation >> 235 0); >> 236 >> 237 new G4PVPlacement(0, //no rotation >> 238 G4ThreeVector(0.,0.,-6.*cm), //at (0,0,0) >> 239 logicPlate, //its logical volume >> 240 "TantalumPlate2", //its name >> 241 logicBulkSphere, //its mother volume >> 242 false, //no boolean operation 227 0); 243 0); 228 << 244 229 new G4PVPlacement(0, // no rotation << 230 G4ThreeVector(0., 0., -6. << 231 logicPlate, // its logica << 232 "TantalumPlate2", // its << 233 logicBulkSphere, // its m << 234 false, // no boolean oper << 235 0); << 236 << 237 return physiWorld; 245 return physiWorld; >> 246 238 } 247 } 239 248 240 //....oooOO0OOooo........oooOO0OOooo........oo 249 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 241 250 242 void RMC01DetectorConstruction::SetSensitiveVo 251 void RMC01DetectorConstruction::SetSensitiveVolumeRadius(G4double r) 243 { << 252 { fSensitive_cylinder_Rout=r; 244 fSensitive_cylinder_Rout = r; << 245 } 253 } 246 254 247 //....oooOO0OOooo........oooOO0OOooo........oo 255 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 248 256 249 void RMC01DetectorConstruction::SetSensitiveVo 257 void RMC01DetectorConstruction::SetSensitiveVolumeHeight(G4double h) 250 { << 258 { fSensitive_cylinder_H=h; 251 fSensitive_cylinder_H = h; << 252 } 259 } 253 260 254 //....oooOO0OOooo........oooOO0OOooo........oo 261 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 255 262 256 void RMC01DetectorConstruction::SetShieldingTh 263 void RMC01DetectorConstruction::SetShieldingThickness(G4double d) 257 { << 264 { fShield_Thickness=d; 258 fShield_Thickness = d; << 259 } 265 } 260 266 261 //....oooOO0OOooo........oooOO0OOooo........oo 267 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 262 268