ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RMC01DetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RMC01DetectorConstruction.cc
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 //
28 //
29 //
31 // Class Name: RMC01DetectorConstruction
32 // Author: L. Desorgher
33 // Organisation: SpaceIT GmbH
34 // Contract: ESA contract 21435/08/NL/AT
35 // Customer: ESA/ESTEC
37 
38 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
40 
43 
44 #include "G4Material.hh"
45 #include "G4Box.hh"
46 #include "G4Orb.hh"
47 #include "G4Tubs.hh"
48 #include "G4LogicalVolume.hh"
49 #include "G4PVPlacement.hh"
50 #include "G4GeometryManager.hh"
51 #include "G4PhysicalVolumeStore.hh"
52 #include "G4LogicalVolumeStore.hh"
53 #include "G4SolidStore.hh"
54 #include "G4VisAttributes.hh"
55 #include "G4Colour.hh"
56 
57 #include "G4SDManager.hh"
58 #include "G4RunManager.hh"
59 #include "G4PhysicalConstants.hh"
60 #include "G4SystemOfUnits.hh"
61 #include "RMC01SD.hh"
62 
63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
64 
67  fDetectorMessenger(0),
68  fShield_Thickness(5.*mm),
69  fSensitive_cylinder_H (1.*mm),
70  fSensitive_cylinder_Rout (1.*mm)
71 {
73 }
74 
75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76 
78 { delete fDetectorMessenger;
79 }
80 
81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
82 
84 {
86  return ConstructSimpleGeometry();
87 }
88 
89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
90 
92 {
93 
94  G4String symbol; //a=mass of a mole;
95  G4double a, z, density; //z=mean number of protons;
96  G4double fractionmass;
97  G4int ncomponents;
98 
99  //
100  // define Elements
101  //
102 
103  G4Element* N = new G4Element("Nitrogen",symbol="N" , z= 7., a= 14.01*g/mole);
104  G4Element* O = new G4Element("Oxygen" ,symbol="O" , z= 8., a= 16.00*g/mole);
105 
106  //
107  // define simple materials
108  //
109 
110  new G4Material("Aluminum", z=13., a=26.98*g/mole, density=2.700*g/cm3);
111  new G4Material("Silicon", z=14., a=28.09*g/mole, density=2.33*g/cm3);
112  new G4Material("Tantalum", z=73., a=180.9479*g/mole, density=16.654*g/cm3);
113 
114  //
115  // define air
116  //
117 
118  G4Material* Air = new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
119  Air->AddElement(N, fractionmass=0.7);
120  Air->AddElement(O, fractionmass=0.3);
121 
122  //
123  //Example of Vacuum
124  //
125 
126  new G4Material("Vacuum", z=1., a=1.01*g/mole,density= universe_mean_density,
127  kStateGas, 3.e-18*pascal, 2.73*kelvin);
128 }
129 
130 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131 
133 {
134 
135  // Clean old geometry, if any
136 
141 
142  // World
143  //-----------
144 
145  G4Box* solidWorld = new G4Box("World",15.*cm, 15.*cm, 15.*cm);
146  G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld,
147  G4Material::GetMaterial("Vacuum"),
148  "World");
149 
150  G4VPhysicalVolume* physiWorld = new G4PVPlacement(0, //no rotation
151  G4ThreeVector(), //at (0,0,0)
152  logicWorld, //its logical volume
153  "World", //its name
154  0, //its mother volume
155  false, //no boolean operation
156  0);
157 
158  //Shielding Aluminum Sphere
159  //-------------------
160 
161  G4double radiusShieldingSphere =10.*cm;
162 
163  G4Orb* solidShieldingSphere=new G4Orb("Shielding", radiusShieldingSphere);
164  G4LogicalVolume* logicShieldingSphere=
165  new G4LogicalVolume(solidShieldingSphere,
166  G4Material::GetMaterial("Aluminum"),
167  "Shielding"); //its name;
168 
169  new G4PVPlacement(0, //no rotation
170  G4ThreeVector(), //at (0,0,0)
171  logicShieldingSphere, //its logical volume
172  "Shielding", //its name
173  logicWorld, //its mother volume
174  false, //no boolean operation
175  0);
176 
177  //Bulk Sphere
178  //-------------------
179 
180  G4Orb* solidBulkSphere=new G4Orb("Bulk",
181  radiusShieldingSphere-fShield_Thickness);
182  G4LogicalVolume* logicBulkSphere=new G4LogicalVolume(
183  solidBulkSphere,//its solid
184  G4Material::GetMaterial("Air"),//its material
185  "Bulk"); //its name;
186 
187  new G4PVPlacement(0, //no rotation
188  G4ThreeVector(), //at (0,0,0)
189  logicBulkSphere, //its logical volume
190  "Bulk", //its name
191  logicShieldingSphere, //its mother volume
192  false, //no boolean operation
193  0);
194 
195  //Detecting cylinder
196  //-------------------
197 
198  G4Tubs* solidDetecting=new G4Tubs("SensitiveVolume",
200  0.,twopi);
201 
202  G4LogicalVolume* logicDetectingCylinder=new G4LogicalVolume(solidDetecting,
203  G4Material::GetMaterial("Silicon"),
204  "SensitiveVolume");
205 
206  new G4PVPlacement(0, //no rotation
207  G4ThreeVector(0.,0.,0.), //at (0,0,0)
208  logicDetectingCylinder, //its logical volume
209  "SensitiveVolume", //its name
210  logicBulkSphere, //its mother volume
211  false, //no boolean operation
212  0);
213 
214 
215  RMC01SD* theSensitiveDetector = new RMC01SD("/SensitiveCylinder");
216 
217  G4SDManager::GetSDMpointer()->AddNewDetector(theSensitiveDetector);
218  logicDetectingCylinder->SetSensitiveDetector(theSensitiveDetector);
219 
220  //Tantalum Plates on the top and beside
221  //-------------------------------------
222  G4Box* solidPlate=new G4Box("TantalumPlate",4.*cm,4.*cm,0.25*mm);
223  G4LogicalVolume* logicPlate=new G4LogicalVolume(solidPlate, //its solid
224  G4Material::GetMaterial("Tantalum"),//its material
225  "TantalumPlate"); //its name;
226 
227 
228  new G4PVPlacement(0, //no rotation
229  G4ThreeVector(0.,0.,6.*cm), //at (0,0,0)
230  logicPlate, //its logical volume
231  "TantalumPlate1", //its name
232  logicBulkSphere, //its mother volume
233  false, //no boolean operation
234  0);
235 
236  new G4PVPlacement(0, //no rotation
237  G4ThreeVector(0.,0.,-6.*cm), //at (0,0,0)
238  logicPlate, //its logical volume
239  "TantalumPlate2", //its name
240  logicBulkSphere, //its mother volume
241  false, //no boolean operation
242  0);
243 
244  return physiWorld;
245 
246 }
247 
248 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
249 
252 }
253 
254 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
255 
258 }
259 
260 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
261 
264 }
265 
266 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......