ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ExP02DetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file ExP02DetectorConstruction.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 //
30 //
32 
33 #include "G4Material.hh"
34 #include "G4Box.hh"
35 #include "G4Tubs.hh"
36 #include "G4LogicalVolume.hh"
37 #include "G4ThreeVector.hh"
38 #include "G4PVPlacement.hh"
39 #include "globals.hh"
40 #include "G4SystemOfUnits.hh"
41 
42 //ROOT
43 #include "TROOT.h"
44 #include "TFile.h"
45 #include "TSystem.h"
46 
47 #include "ExP02GeoTree.hh"
48 
49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
50 
53  fExperimentalHall_log(0), fTracker_log(0),
54  fCalorimeterBlock_log(0), fCalorimeterLayer_log(0),
55  fExperimentalHall_phys(0), fCalorimeterLayer_phys(0),
56  fCalorimeterBlock_phys(0), fTracker_phys(0)
57 {;}
58 
59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
60 
62 {
63 }
64 
65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
66 
68 {
69 
70  //------------------------------------------------------ materials
71 
72  G4double a; // atomic mass
73  G4double z; // atomic number
74  G4double density;
75 
76  G4Material* Ar =
77  new G4Material("ArgonGas", z= 18., a= 39.95*g/mole, density= 1.782*mg/cm3);
78 
79  G4Material* Al =
80  new G4Material("Aluminum", z= 13., a= 26.98*g/mole, density= 2.7*g/cm3);
81 
82  G4Material* Pb =
83  new G4Material("Lead", z= 82., a= 207.19*g/mole, density= 11.35*g/cm3);
84 
85  //------------------------------------------------------ volumes
86 
87  //------------------------------ experimental hall (world volume)
88  //------------------------------ beam line along x axis
89 
90  G4double expHall_x = 3.0*m;
91  G4double expHall_y = 1.0*m;
92  G4double expHall_z = 1.0*m;
93  G4Box* experimentalHall_box
94  = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);
95  fExperimentalHall_log = new G4LogicalVolume(experimentalHall_box,
96  Ar,"expHall_log",0,0,0);
98  fExperimentalHall_log,"expHall",0,false,0);
99 
100  //------------------------------ a tracker tube
101 
102  G4double innerRadiusOfTheTube = 0.*cm;
103  G4double outerRadiusOfTheTube = 60.*cm;
104  G4double hightOfTheTube = 50.*cm;
105  G4double startAngleOfTheTube = 0.*deg;
106  G4double spanningAngleOfTheTube = 360.*deg;
107  G4Tubs* tracker_tube = new G4Tubs("tracker_tube",innerRadiusOfTheTube,
108  outerRadiusOfTheTube,hightOfTheTube,
109  startAngleOfTheTube,spanningAngleOfTheTube);
110  fTracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log",0,0,0);
111  G4double trackerPos_x = -1.0*m;
112  G4double trackerPos_y = 0.*m;
113  G4double trackerPos_z = 0.*m;
115  G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z),
116  fTracker_log,"tracker",fExperimentalHall_log,false,0);
117 
118  //------------------------------ a calorimeter block
119 
120  G4double block_x = 1.0*m;
121  G4double block_y = 50.0*cm;
122  G4double block_z = 50.0*cm;
123  G4Box* calorimeterBlock_box = new G4Box("calBlock_box",block_x,
124  block_y,block_z);
125  fCalorimeterBlock_log = new G4LogicalVolume(calorimeterBlock_box,
126  Pb,"caloBlock_log",0,0,0);
127  G4double blockPos_x = 1.0*m;
128  G4double blockPos_y = 0.0*m;
129  G4double blockPos_z = 0.0*m;
131  G4ThreeVector(blockPos_x,blockPos_y,blockPos_z),
132  fCalorimeterBlock_log,"caloBlock",fExperimentalHall_log,false,0);
133 
134  //------------------------------ calorimeter layers
135 
136  G4double calo_x = 1.*cm;
137  G4double calo_y = 40.*cm;
138  G4double calo_z = 40.*cm;
139  G4Box* calorimeterLayer_box = new G4Box("caloLayer_box",
140  calo_x,calo_y,calo_z);
141  fCalorimeterLayer_log = new G4LogicalVolume(calorimeterLayer_box,
142  Al,"caloLayer_log",0,0,0);
143  for(G4int i=0;i<19;i++) // loop for 19 layers
144  {
145  G4double caloPos_x = (i-9)*10.*cm;
146  G4double caloPos_y = 0.0*m;
147  G4double caloPos_z = 0.0*m;
149  G4ThreeVector(caloPos_x,caloPos_y,caloPos_z),
150  fCalorimeterLayer_log,"caloLayer",fCalorimeterBlock_log,false,i);
151  }
152 
153  //------------------------------------------------------------------
154 
155  // writing the geometry to a ROOT file
156 
157  // initialize ROOT
158  TSystem ts;
159 
160  gSystem->Load("libExP02ClassesDict");
161 
162  // gDebug = 1;
163 
165 
166  ExP02GeoTree* geotree = new ExP02GeoTree(fExperimentalHall_phys, eltab);
167 
168  TFile fo("geo.root","RECREATE");
169 
170  fo.WriteObject(geotree, "my_geo");
171 
172  return fExperimentalHall_phys;
173 }
174