BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Simulation/BOOST/EmcSim/include/EmcSim/BesEmcConstruction.hh
Go to the documentation of this file.
1//---------------------------------------------------------------------------//
2// BOOST --- BESIII Object_Oreiented Simulation Tool //
3//---------------------------------------------------------------------------//
4// Descpirtion: EMC detector
5// Author: Fu Chengdong
6// Created: Sep 4, 2003
7// Comment:
8//---------------------------------------------------------------------------//
9//
10
11#ifndef BesEmcConstruction_h
12#define BesEmcConstruction_h 1
13
14// #include "G4VUserDetectorConstruction.hh"
15#include "EmcSim/BesEmcEndGeometry.hh"
16#include "EmcSim/BesEmcGeometry.hh"
17#include "G4VPVParameterisation.hh"
18#include "SimUtil/BesSubdetector.hh"
19#include "globals.hh"
20
21// #include "CLHEP/config/CLHEP.h"
22#include "CLHEP/Geometry/Plane3D.h"
23#include "CLHEP/Geometry/Point3D.h"
24#include "CLHEP/Vector/Rotation.h"
25#include "CLHEP/Vector/ThreeVector.h"
26#ifndef ENABLE_BACKWARDS_COMPATIBILITY
27typedef HepGeom::Point3D<double> HepPoint3D;
28#endif
29#ifndef ENABLE_BACKWARDS_COMPATIBILITY
30// backwards compatibility will be enabled ONLY in CLHEP 1.9
31typedef HepGeom::Plane3D<double> HepPlane3D;
32#endif
33
34using namespace CLHEP;
35
36class G4Box;
37class G4Tubs;
38class G4Cons;
39class G4Polyhedra;
40class G4Trap;
41class G4UnionSolid;
42class G4LogicalVolume;
43class G4VPhysicalVolume;
44class G4Material;
45class G4UniformMagField;
47class BesEmcSD;
48class G4IrregBox;
49class G4SubtractionSolid;
50
52public: // with description
54 // Static method which returns the singleton pointer of G4RunManager or
55 // its derived class.
56
57private:
58 static BesEmcConstruction* fBesEmcConstruction;
59
60public:
63
64public:
65 inline void SetVerboseLevel( G4int val ) { verboseLevel = val; }
66
67 void SetCrystalMaterial( G4String );
68
69 void SetCasingMaterial( G4String );
70 void SetCasingThickness( G4ThreeVector );
71
72 void SetBSCRmin( G4double );
73 void SetBSCNbPhi( G4int );
74 void SetBSCNbTheta( G4int );
75 void SetStartIDTheta( G4int );
76 void SetBSCCrystalLength( G4double );
77 void SetBSCYFront0( G4double );
78 void SetBSCYFront( G4double );
79 void SetBSCPosition0( G4double );
80 void SetBSCPosition1( G4double );
81
82 void SetMagField( G4double );
83
84 void Construct( G4LogicalVolume* );
85
87
88 void ThreeVectorTrans( G4ThreeVector fPnt[8], double x[8], double y[8], double z[8] );
89 void TransformToArb8( const G4ThreeVector fPnt[8], G4ThreeVector newfPnt[8],
90 G4ThreeVector& center, G4ThreeVector& rotAngle );
91 Hep3Vector RotAngleFromNewZ( Hep3Vector newZ );
92
93public:
95
96 G4int GetVerboseLevel() { return verboseLevel; };
97 G4double GetMagField() { return fmagField; };
98
99 G4int GetStartIDTheta() { return startID; };
100
101 G4Material* GetCrystalMaterial() { return fCrystalMaterial; };
102 G4Material* GetCasingMaterial() { return fCasingMaterial; };
103 // G4ThreeVector GetCasingThickness() {return
104 // G4ThreeVector(fTyvekThickness,fAlThickness,fMylarThickness);};
105
106 const G4VPhysicalVolume* GetEMC() { return physiEMC; }
107 const G4VPhysicalVolume* GetBSCPhi() { return physiBSCPhi; };
108 const G4VPhysicalVolume* GetBSCTheta() { return physiBSCTheta; };
109 const G4VPhysicalVolume* GetBSCCrystal() { return physiBSCCrystal; };
110 const G4VPVParameterisation* GetCrystalParam() { return crystalParam; };
111
112private:
113 G4int verboseLevel;
114 G4double fmagField;
115
116 G4Material* fCrystalMaterial;
117
118 G4int phiNbCrystals;
119 G4int thetaNbCrystals;
120 G4int startID;
121
122 G4Material* fCasingMaterial;
123
124 G4Material* defaultMaterial;
125
126 G4Tubs* solidBSC; // Barrel
127 G4Cons* solidESC; // Endcap
128 G4UnionSolid* solidEMC;
129 G4LogicalVolume* logicEMC;
130 G4VPhysicalVolume* physiEMC;
131
132 G4SubtractionSolid* solidBSCWorld; // virtual volume for barrel
133 G4LogicalVolume* logicBSCWorld;
134 G4VPhysicalVolume* physiBSCWorld;
135
136 G4Tubs* solidBSCPhiTub;
137 G4Cons* solidConsPhi;
138 G4SubtractionSolid* solidBSCPhi1;
139 G4SubtractionSolid* solidBSCPhi; // pointer to the solid Layer
140 G4LogicalVolume* logicBSCPhi; // pointer to the logical Layer
141 G4VPhysicalVolume* physiBSCPhi; // pointer to the physical Layer
142
143 G4Trap* solidBSCTheta; // pointer to the solid Absorber
144 G4LogicalVolume* logicBSCTheta; // pointer to the logical Absorber
145 G4VPhysicalVolume* physiBSCTheta; // pointer to the physical Absorber
146
147 G4Trap* solidBSCCrystal; // pointer to the solid Absorber
148 G4LogicalVolume* logicBSCCrystal; // pointer to the logical Absorber
149 G4VPhysicalVolume* physiBSCCrystal; // pointer to the physical Absorber
150
151 G4UniformMagField* magField; // pointer to the magnetic field
152
153 BesEmcDetectorMessenger* detectorMessenger; // pointer to the Messenger
154 BesEmcSD* besEMCSD; // pointer to the sensitive detector
155 BesEmcGeometry* besEMCGeometry;
156 BesEmcEndGeometry* emcEnd;
157 G4VPVParameterisation* crystalParam;
158
159 // Endcap geometry
160private:
161 G4Cons* solidEnd; // pointer to the endcap
162 G4LogicalVolume* logicEnd;
163 G4VPhysicalVolume* physiEnd;
164
165 G4Cons* solidEndPhi;
166 G4LogicalVolume* logicEndPhi;
167 G4VPhysicalVolume* physiEndPhi;
168
169 G4IrregBox* solidEndCasing;
170 G4LogicalVolume* logicEndCasing;
171 G4VPhysicalVolume* physiEndCasing;
172
173 G4IrregBox* solidEndCrystal;
174 G4LogicalVolume* logicEndCrystal;
175 G4VPhysicalVolume* physiEndCrystal;
176
177 // other substance on the rear face of crystal
178private:
179 G4Box* solidRear; // virtual volume
180 G4LogicalVolume* logicRear;
181 G4VPhysicalVolume* physiRear;
182
183 G4Box* solidCasingBox; // casing
184 G4Box* solidAirHole;
185 G4SubtractionSolid* solidRearCasing;
186 G4LogicalVolume* logicRearCasing;
187 G4VPhysicalVolume* physiRearCasing;
188
189 G4Box* solidOrgGlass; // organic glass
190 G4LogicalVolume* logicOrgGlass;
191 G4VPhysicalVolume* physiOrgGlass;
192
193 G4Box* solidPD; // photodiode
194 G4LogicalVolume* logicPD;
195 G4VPhysicalVolume* physiPD;
196
197 G4Box* solidAlBox; // Al plate
198 G4SubtractionSolid* solidAlPlate;
199 G4LogicalVolume* logicAlPlate;
200 G4VPhysicalVolume* physiAlPlate;
201
202 G4Box* solidPreAmpBox; // preamplifier box
203 G4LogicalVolume* logicPreAmpBox;
204 G4VPhysicalVolume* physiPreAmpBox;
205
206 G4Box* solidAirInPABox; // air in preamplifier box
207 G4LogicalVolume* logicAirInPABox;
208 G4VPhysicalVolume* physiAirInPABox;
209
210 G4Box* solidHangingPlate; // stainless steel for hanging the crysta
211 G4LogicalVolume* logicHangingPlate;
212 G4VPhysicalVolume* physiHangingPlate;
213
214 G4Cons* solidOCGirder; // opening-cut girder
215 G4LogicalVolume* logicOCGirder;
216 G4VPhysicalVolume* physiOCGirder;
217
218 G4Tubs* solidCable; // cable
219 G4LogicalVolume* logicCable;
220 G4VPhysicalVolume* physiCable;
221
222 G4Tubs* solidWaterPipe; // water pipe
223 G4LogicalVolume* logicWaterPipe;
224 G4VPhysicalVolume* physiWaterPipe;
225
226 // barrel support frame
227private:
228 G4Tubs* solidSupportBar; // support bar
229 G4LogicalVolume* logicSupportBar;
230 G4VPhysicalVolume* physiSupportBar;
231
232 G4Tubs* solidSupportBar1;
233 G4LogicalVolume* logicSupportBar1;
234 G4VPhysicalVolume* physiSupportBar1;
235
236 G4Tubs* solidEndRing; // end ring
237 G4LogicalVolume* logicEndRing;
238 G4VPhysicalVolume* physiEndRing;
239
240 G4Tubs* solidGear;
241 G4LogicalVolume* logicGear;
242 G4VPhysicalVolume* physiGear;
243
244 G4Tubs* solidTaperRing1; // taper ring
245 G4LogicalVolume* logicTaperRing1;
246 G4VPhysicalVolume* physiTaperRing1;
247
248 G4Cons* solidTaperRing2;
249 G4LogicalVolume* logicTaperRing2;
250 G4VPhysicalVolume* physiTaperRing2;
251
252 G4Cons* solidTaperRing3;
253 G4LogicalVolume* logicTaperRing3;
254 G4VPhysicalVolume* physiTaperRing3;
255
256private:
257 G4Material* rearCasingMaterial;
258 G4Material* organicGlass;
259 G4Material* stainlessSteel;
260 G4Material* cable;
261 G4Material* waterPipe;
262
263public:
264 void ConstructSPFrame( G4LogicalVolume*, BesEmcGeometry* );
265 void ConstructEndGeometry( G4LogicalVolume* );
268 G4int ComputeEndCopyNb( G4int );
269
270private:
271 void DefineMaterials();
272 void ComputeEMCParameters();
273 // G4VPhysicalVolume* Construct(G4LogicalVolume*);
274};
275
276//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
277
278#endif
HepGeom::Point3D< double > HepPoint3D
HepGeom::Plane3D< double > HepPlane3D
void SetBSCRmin(G4double)
void SetBSCYFront(G4double)
void ThreeVectorTrans(G4ThreeVector fPnt[8], double x[8], double y[8], double z[8])
void ConstructSPFrame(G4LogicalVolume *, BesEmcGeometry *)
void Construct(G4LogicalVolume *)
static BesEmcConstruction * GetBesEmcConstruction()
void TransformToArb8(const G4ThreeVector fPnt[8], G4ThreeVector newfPnt[8], G4ThreeVector &center, G4ThreeVector &rotAngle)
void SetMagField(G4double)
void ConstructEndGeometry(G4LogicalVolume *)
void SetBSCPosition1(G4double)
void SetCasingThickness(G4ThreeVector)
void SetBSCYFront0(G4double)
void SetBSCCrystalLength(G4double)
void SetBSCNbPhi(G4int)
void SetCrystalMaterial(G4String)
void SetBSCPosition0(G4double)
Hep3Vector RotAngleFromNewZ(Hep3Vector newZ)
void SetCasingMaterial(G4String)
void SetStartIDTheta(G4int)
G4int ComputeEndCopyNb(G4int)
void SetBSCNbTheta(G4int)