11#ifndef BesEmcConstruction_h
12#define BesEmcConstruction_h 1
15#include "EmcSim/BesEmcEndGeometry.hh"
16#include "EmcSim/BesEmcGeometry.hh"
17#include "G4VPVParameterisation.hh"
18#include "SimUtil/BesSubdetector.hh"
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
29#ifndef ENABLE_BACKWARDS_COMPATIBILITY
43class G4VPhysicalVolume;
45class G4UniformMagField;
49class G4SubtractionSolid;
90 G4ThreeVector& center, G4ThreeVector& rotAngle );
106 const G4VPhysicalVolume*
GetEMC() {
return physiEMC; }
107 const G4VPhysicalVolume*
GetBSCPhi() {
return physiBSCPhi; };
116 G4Material* fCrystalMaterial;
119 G4int thetaNbCrystals;
122 G4Material* fCasingMaterial;
124 G4Material* defaultMaterial;
128 G4UnionSolid* solidEMC;
129 G4LogicalVolume* logicEMC;
130 G4VPhysicalVolume* physiEMC;
132 G4SubtractionSolid* solidBSCWorld;
133 G4LogicalVolume* logicBSCWorld;
134 G4VPhysicalVolume* physiBSCWorld;
136 G4Tubs* solidBSCPhiTub;
137 G4Cons* solidConsPhi;
138 G4SubtractionSolid* solidBSCPhi1;
139 G4SubtractionSolid* solidBSCPhi;
140 G4LogicalVolume* logicBSCPhi;
141 G4VPhysicalVolume* physiBSCPhi;
143 G4Trap* solidBSCTheta;
144 G4LogicalVolume* logicBSCTheta;
145 G4VPhysicalVolume* physiBSCTheta;
147 G4Trap* solidBSCCrystal;
148 G4LogicalVolume* logicBSCCrystal;
149 G4VPhysicalVolume* physiBSCCrystal;
151 G4UniformMagField* magField;
157 G4VPVParameterisation* crystalParam;
162 G4LogicalVolume* logicEnd;
163 G4VPhysicalVolume* physiEnd;
166 G4LogicalVolume* logicEndPhi;
167 G4VPhysicalVolume* physiEndPhi;
169 G4IrregBox* solidEndCasing;
170 G4LogicalVolume* logicEndCasing;
171 G4VPhysicalVolume* physiEndCasing;
173 G4IrregBox* solidEndCrystal;
174 G4LogicalVolume* logicEndCrystal;
175 G4VPhysicalVolume* physiEndCrystal;
180 G4LogicalVolume* logicRear;
181 G4VPhysicalVolume* physiRear;
183 G4Box* solidCasingBox;
185 G4SubtractionSolid* solidRearCasing;
186 G4LogicalVolume* logicRearCasing;
187 G4VPhysicalVolume* physiRearCasing;
189 G4Box* solidOrgGlass;
190 G4LogicalVolume* logicOrgGlass;
191 G4VPhysicalVolume* physiOrgGlass;
194 G4LogicalVolume* logicPD;
195 G4VPhysicalVolume* physiPD;
198 G4SubtractionSolid* solidAlPlate;
199 G4LogicalVolume* logicAlPlate;
200 G4VPhysicalVolume* physiAlPlate;
202 G4Box* solidPreAmpBox;
203 G4LogicalVolume* logicPreAmpBox;
204 G4VPhysicalVolume* physiPreAmpBox;
206 G4Box* solidAirInPABox;
207 G4LogicalVolume* logicAirInPABox;
208 G4VPhysicalVolume* physiAirInPABox;
210 G4Box* solidHangingPlate;
211 G4LogicalVolume* logicHangingPlate;
212 G4VPhysicalVolume* physiHangingPlate;
214 G4Cons* solidOCGirder;
215 G4LogicalVolume* logicOCGirder;
216 G4VPhysicalVolume* physiOCGirder;
219 G4LogicalVolume* logicCable;
220 G4VPhysicalVolume* physiCable;
222 G4Tubs* solidWaterPipe;
223 G4LogicalVolume* logicWaterPipe;
224 G4VPhysicalVolume* physiWaterPipe;
228 G4Tubs* solidSupportBar;
229 G4LogicalVolume* logicSupportBar;
230 G4VPhysicalVolume* physiSupportBar;
232 G4Tubs* solidSupportBar1;
233 G4LogicalVolume* logicSupportBar1;
234 G4VPhysicalVolume* physiSupportBar1;
236 G4Tubs* solidEndRing;
237 G4LogicalVolume* logicEndRing;
238 G4VPhysicalVolume* physiEndRing;
241 G4LogicalVolume* logicGear;
242 G4VPhysicalVolume* physiGear;
244 G4Tubs* solidTaperRing1;
245 G4LogicalVolume* logicTaperRing1;
246 G4VPhysicalVolume* physiTaperRing1;
248 G4Cons* solidTaperRing2;
249 G4LogicalVolume* logicTaperRing2;
250 G4VPhysicalVolume* physiTaperRing2;
252 G4Cons* solidTaperRing3;
253 G4LogicalVolume* logicTaperRing3;
254 G4VPhysicalVolume* physiTaperRing3;
257 G4Material* rearCasingMaterial;
258 G4Material* organicGlass;
259 G4Material* stainlessSteel;
261 G4Material* waterPipe;
271 void DefineMaterials();
272 void ComputeEMCParameters();
HepGeom::Point3D< double > HepPoint3D
HepGeom::Plane3D< double > HepPlane3D
const G4VPhysicalVolume * GetEMC()
void SetBSCRmin(G4double)
const G4VPhysicalVolume * GetBSCCrystal()
const G4VPVParameterisation * GetCrystalParam()
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 ¢er, G4ThreeVector &rotAngle)
void SetMagField(G4double)
void ConstructEndGeometry(G4LogicalVolume *)
void SetBSCPosition1(G4double)
void SetCasingThickness(G4ThreeVector)
void SetBSCYFront0(G4double)
void SetBSCCrystalLength(G4double)
void PrintEMCParameters()
void SetCrystalMaterial(G4String)
void SetBSCPosition0(G4double)
Hep3Vector RotAngleFromNewZ(Hep3Vector newZ)
const G4VPhysicalVolume * GetBSCTheta()
void SetCasingMaterial(G4String)
G4Material * GetCasingMaterial()
void SetStartIDTheta(G4int)
void SetVerboseLevel(G4int val)
G4int ComputeEndCopyNb(G4int)
G4Material * GetCrystalMaterial()
void SetBSCNbTheta(G4int)
const G4VPhysicalVolume * GetBSCPhi()