ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ExN01DetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file ExN01DetectorConstruction.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 //
26 // ====================================================================
27 // ExN01DetectorConstruction.cc
28 //
29 // 2005 Q
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 "G4SystemOfUnits.hh"
40 
41 // ====================================================================
42 //
43 // class description
44 //
45 // ====================================================================
46 
49  : experimentalHall_log(0), tracker_log(0),
50  calorimeterBlock_log(0), calorimeterLayer_log(0),
51  experimentalHall_phys(0), calorimeterLayer_phys(0),
52  calorimeterBlock_phys(0), tracker_phys(0)
54 {
55 }
56 
60 {
61 }
62 
66 {
67  //------------------------------------------------------ materials
68  G4double a; // atomic mass
69  G4double z; // atomic number
70  G4double density;
71 
72  G4Material* Ar =
73  new G4Material("ArgonGas", z= 18., a= 39.95*g/mole, density= 1.782*mg/cm3);
74 
75  G4Material* Al =
76  new G4Material("Aluminum", z= 13., a= 26.98*g/mole, density= 2.7*g/cm3);
77 
78  G4Material* Pb =
79  new G4Material("Lead", z= 82., a= 207.19*g/mole, density= 11.35*g/cm3);
80 
81  //------------------------------------------------------ volumes
82 
83  //------------------------------ experimental hall (world volume)
84  //------------------------------ beam line along x axis
85 
86  G4double expHall_x = 3.0*m;
87  G4double expHall_y = 1.0*m;
88  G4double expHall_z = 1.0*m;
89  G4Box* experimentalHall_box
90  = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);
91  experimentalHall_log = new G4LogicalVolume(experimentalHall_box,
92  Ar,"expHall_log",0,0,0);
95  "expHall",0,false,0);
96 
97  //------------------------------ a tracker tube
98 
99  G4double innerRadiusOfTheTube = 0.*cm;
100  G4double outerRadiusOfTheTube = 60.*cm;
101  G4double hightOfTheTube = 50.*cm;
102  G4double startAngleOfTheTube = 0.*deg;
103  G4double spanningAngleOfTheTube = 360.*deg;
104  G4Tubs* tracker_tube = new G4Tubs("tracker_tube",innerRadiusOfTheTube,
105  outerRadiusOfTheTube,hightOfTheTube,
106  startAngleOfTheTube,
107  spanningAngleOfTheTube);
108  tracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log",0,0,0);
109  G4double trackerPos_x = -1.0*m;
110  G4double trackerPos_y = 0.*m;
111  G4double trackerPos_z = 0.*m;
112  tracker_phys = new G4PVPlacement(0,
113  G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z),
114  tracker_log,"tracker",experimentalHall_log,false,0);
115 
116  //------------------------------ a calorimeter block
117 
118  G4double block_x = 1.0*m;
119  G4double block_y = 50.0*cm;
120  G4double block_z = 50.0*cm;
121  G4Box* calorimeterBlock_box = new G4Box("calBlock_box",block_x,
122  block_y,block_z);
123  calorimeterBlock_log = new G4LogicalVolume(calorimeterBlock_box,
124  Pb,"caloBlock_log",0,0,0);
125  G4double blockPos_x = 1.0*m;
126  G4double blockPos_y = 0.0*m;
127  G4double blockPos_z = 0.0*m;
129  G4ThreeVector(blockPos_x,blockPos_y,blockPos_z),
130  calorimeterBlock_log,"caloBlock",experimentalHall_log,false,0);
131 
132  //------------------------------ calorimeter layers
133 
134  G4double calo_x = 1.*cm;
135  G4double calo_y = 40.*cm;
136  G4double calo_z = 40.*cm;
137  G4Box* calorimeterLayer_box = new G4Box("caloLayer_box",
138  calo_x,calo_y,calo_z);
139  calorimeterLayer_log = new G4LogicalVolume(calorimeterLayer_box,
140  Al,"caloLayer_log",0,0,0);
141  for(G4int i=0;i<19;i++) // loop for 19 layers
142  {
143  G4double caloPos_x = (i-9)*10.*cm;
144  G4double caloPos_y = 0.0*m;
145  G4double caloPos_z = 0.0*m;
147  G4ThreeVector(caloPos_x,caloPos_y,caloPos_z),
148  calorimeterLayer_log,"caloLayer",calorimeterBlock_log,false,i);
149  }
150 
151  //------------------------------------------------------------------
152 
153  return experimentalHall_phys;
154 }
155