11#ifndef BesEmcConstruction_h
12#define BesEmcConstruction_h 1
19#include "G4VPVParameterisation.hh"
22#include "CLHEP/Vector/ThreeVector.h"
23#include "CLHEP/Vector/Rotation.h"
24#include "CLHEP/Geometry/Point3D.h"
25#include "CLHEP/Geometry/Plane3D.h"
26#ifndef ENABLE_BACKWARDS_COMPATIBILITY
29#ifndef ENABLE_BACKWARDS_COMPATIBILITY
44class G4VPhysicalVolume;
46class G4UniformMagField;
50class G4SubtractionSolid;
92 void ThreeVectorTrans( G4ThreeVector fPnt[8],
double x[8],
double y[8],
double z[8] );
93 void TransformToArb8(
const G4ThreeVector fPnt[8], G4ThreeVector newfPnt[8],
94 G4ThreeVector ¢er, G4ThreeVector &rotAngle );
110 const G4VPhysicalVolume*
GetEMC() {
return physiEMC; }
111 const G4VPhysicalVolume*
GetBSCPhi() {
return physiBSCPhi;};
121 G4Material* fCrystalMaterial;
124 G4int thetaNbCrystals;
127 G4Material* fCasingMaterial;
129 G4Material* defaultMaterial;
133 G4UnionSolid* solidEMC;
134 G4LogicalVolume* logicEMC;
135 G4VPhysicalVolume* physiEMC;
137 G4SubtractionSolid* solidBSCWorld;
138 G4LogicalVolume* logicBSCWorld;
139 G4VPhysicalVolume* physiBSCWorld;
141 G4Tubs* solidBSCPhiTub;
142 G4Cons* solidConsPhi;
143 G4SubtractionSolid* solidBSCPhi1;
144 G4SubtractionSolid* solidBSCPhi;
145 G4LogicalVolume* logicBSCPhi;
146 G4VPhysicalVolume* physiBSCPhi;
148 G4Trap* solidBSCTheta;
149 G4LogicalVolume* logicBSCTheta;
150 G4VPhysicalVolume* physiBSCTheta;
152 G4Trap* solidBSCCrystal;
153 G4LogicalVolume* logicBSCCrystal;
154 G4VPhysicalVolume* physiBSCCrystal;
156 G4UniformMagField* magField;
162 G4VPVParameterisation* crystalParam;
168 G4LogicalVolume* logicEnd;
169 G4VPhysicalVolume* physiEnd;
172 G4LogicalVolume* logicEndPhi;
173 G4VPhysicalVolume* physiEndPhi;
175 G4IrregBox* solidEndCasing;
176 G4LogicalVolume* logicEndCasing;
177 G4VPhysicalVolume* physiEndCasing;
179 G4IrregBox* solidEndCrystal;
180 G4LogicalVolume* logicEndCrystal;
181 G4VPhysicalVolume* physiEndCrystal;
187 G4LogicalVolume* logicRear;
188 G4VPhysicalVolume* physiRear;
190 G4Box* solidCasingBox;
192 G4SubtractionSolid* solidRearCasing;
193 G4LogicalVolume* logicRearCasing;
194 G4VPhysicalVolume* physiRearCasing;
196 G4Box* solidOrgGlass;
197 G4LogicalVolume* logicOrgGlass;
198 G4VPhysicalVolume* physiOrgGlass;
201 G4LogicalVolume* logicPD;
202 G4VPhysicalVolume* physiPD;
205 G4SubtractionSolid* solidAlPlate;
206 G4LogicalVolume* logicAlPlate;
207 G4VPhysicalVolume* physiAlPlate;
209 G4Box* solidPreAmpBox;
210 G4LogicalVolume* logicPreAmpBox;
211 G4VPhysicalVolume* physiPreAmpBox;
213 G4Box* solidAirInPABox;
214 G4LogicalVolume* logicAirInPABox;
215 G4VPhysicalVolume* physiAirInPABox;
217 G4Box* solidHangingPlate;
218 G4LogicalVolume* logicHangingPlate;
219 G4VPhysicalVolume* physiHangingPlate;
221 G4Cons* solidOCGirder;
222 G4LogicalVolume* logicOCGirder;
223 G4VPhysicalVolume* physiOCGirder;
226 G4LogicalVolume* logicCable;
227 G4VPhysicalVolume* physiCable;
229 G4Tubs* solidWaterPipe;
230 G4LogicalVolume* logicWaterPipe;
231 G4VPhysicalVolume* physiWaterPipe;
235 G4Tubs* solidSupportBar;
236 G4LogicalVolume* logicSupportBar;
237 G4VPhysicalVolume* physiSupportBar;
239 G4Tubs* solidSupportBar1;
240 G4LogicalVolume* logicSupportBar1;
241 G4VPhysicalVolume* physiSupportBar1;
243 G4Tubs* solidEndRing;
244 G4LogicalVolume* logicEndRing;
245 G4VPhysicalVolume* physiEndRing;
248 G4LogicalVolume* logicGear;
249 G4VPhysicalVolume* physiGear;
251 G4Tubs* solidTaperRing1;
252 G4LogicalVolume* logicTaperRing1;
253 G4VPhysicalVolume* physiTaperRing1;
255 G4Cons* solidTaperRing2;
256 G4LogicalVolume* logicTaperRing2;
257 G4VPhysicalVolume* physiTaperRing2;
259 G4Cons* solidTaperRing3;
260 G4LogicalVolume* logicTaperRing3;
261 G4VPhysicalVolume* physiTaperRing3;
264 G4Material* rearCasingMaterial;
265 G4Material* organicGlass;
266 G4Material* stainlessSteel;
268 G4Material* waterPipe;
279 void DefineMaterials();
280 void ComputeEMCParameters();
HepGeom::Point3D< double > HepPoint3D
HepGeom::Plane3D< double > HepPlane3D
const G4VPhysicalVolume * GetEMC()
void SetBSCRmin(G4double)
static BesEmcConstruction * GetBesEmcConstruction()
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 *)
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()