00001 #ifndef ExtBesEmcConstruction_h 00002 #define ExtBesEmcConstruction_h 1 00003 00004 #include "globals.hh" 00005 #include "TrkExtAlg/ExtBesSubdetector.h" 00006 00007 //For Code construction------------ 00008 #include "ExtBesEmcGeometry.h" 00009 #include "ExtBesEmcEndGeometry.h" 00010 #include "G4VPVParameterisation.hh" 00011 00012 class G4Box; 00013 class G4Tubs; 00014 class G4Cons; 00015 class G4Polyhedra; 00016 class G4Trap; 00017 class G4UnionSolid; 00018 class G4LogicalVolume; 00019 class G4VPhysicalVolume; 00020 class G4Material; 00021 class G4UniformMagField; 00022 class BesEmcDetectorMessenger; 00023 class BesEmcSD; 00024 class G4IrregBox; 00025 class G4SubtractionSolid; 00026 //-------------------------------- 00027 00028 class ExtBesEmcConstruction : public ExtBesSubdetector 00029 { 00030 public: 00031 ExtBesEmcConstruction(); 00032 ~ExtBesEmcConstruction(); 00033 00034 static ExtBesEmcConstruction* GetBesEmcConstruction() {return fBesEmcConstruction;}; 00035 00036 void Construct(G4LogicalVolume*); 00037 00038 void ConstructSPFrame(G4LogicalVolume*, ExtBesEmcGeometry*); 00039 void ConstructEndGeometry(G4LogicalVolume*); 00040 G4int ComputeEndCopyNb(G4int); 00041 00042 00043 inline void SetVerboseLevel(G4int val){ verboseLevel=val;} 00044 00045 void SetCrystalMaterial (G4String); 00046 00047 void SetCasingMaterial (G4String); 00048 void SetCasingThickness(G4ThreeVector); 00049 00050 void SetBSCRmin(G4double); 00051 void SetBSCNbPhi(G4int); 00052 void SetBSCNbTheta(G4int); 00053 void SetStartIDTheta(G4int); 00054 void SetBSCCrystalLength(G4double); 00055 void SetBSCYFront0(G4double); 00056 void SetBSCYFront(G4double); 00057 void SetBSCPosition0(G4double); 00058 void SetBSCPosition1(G4double); 00059 00060 void SetMagField(G4double); 00061 00062 void UpdateGeometry(); 00063 00064 void PrintEMCParameters(); 00065 00066 G4int GetVerboseLevel() {return verboseLevel;}; 00067 G4double GetMagField() {return fmagField;}; 00068 00069 G4int GetStartIDTheta() {return startID;}; 00070 00071 G4Material* GetCrystalMaterial() {return fCrystalMaterial;}; 00072 G4Material* GetCasingMaterial() {return fCasingMaterial;}; 00073 //G4ThreeVector GetCasingThickness() {return G4ThreeVector(fTyvekThickness,fAlThickness,fMylarThickness);}; 00074 00075 const G4VPhysicalVolume* GetEMC() {return physiEMC; } 00076 const G4VPhysicalVolume* GetBSCPhi() {return physiBSCPhi;}; 00077 const G4VPhysicalVolume* GetBSCTheta() {return physiBSCTheta;}; 00078 const G4VPhysicalVolume* GetBSCCrystal(){return physiBSCCrystal;}; 00079 const G4VPVParameterisation* GetCrystalParam(){return crystalParam;}; 00080 00081 private: 00082 static ExtBesEmcConstruction* fBesEmcConstruction; 00083 00084 private: 00085 void DefineMaterials(); 00086 // G4LogicalVolume* logicalEmc; 00087 // G4VPhysicalVolume* physicalEmc; 00088 00089 //For code construction----------------------- 00090 G4int verboseLevel; 00091 G4double fmagField; 00092 00093 G4Material* fCrystalMaterial; 00094 00095 G4int phiNbCrystals; 00096 G4int thetaNbCrystals; 00097 G4int startID; 00098 00099 G4Material* fCasingMaterial; 00100 00101 G4Material* defaultMaterial; 00102 00103 G4Tubs* solidBSC; //Barrel 00104 G4Tubs* solidESC; //Endcap 00105 G4UnionSolid* solidEMC; 00106 G4LogicalVolume* logicEMC; 00107 G4VPhysicalVolume* physiEMC; 00108 00109 G4Tubs* solidBSCPhiTub; 00110 G4Cons* solidConsPhi; 00111 G4SubtractionSolid* solidBSCPhi1; 00112 G4SubtractionSolid* solidBSCPhi; //pointer to the solid Layer 00113 G4LogicalVolume* logicBSCPhi; //pointer to the logical Layer 00114 G4VPhysicalVolume* physiBSCPhi; //pointer to the physical Layer 00115 00116 G4Trap* solidBSCTheta; //pointer to the solid Absorber 00117 G4LogicalVolume* logicBSCTheta; //pointer to the logical Absorber 00118 G4VPhysicalVolume* physiBSCTheta; //pointer to the physical Absorber 00119 00120 G4Trap* solidBSCCrystal; //pointer to the solid Absorber 00121 G4LogicalVolume* logicBSCCrystal; //pointer to the logical Absorber 00122 G4VPhysicalVolume* physiBSCCrystal; //pointer to the physical Absorber 00123 00124 G4UniformMagField* magField; //pointer to the magnetic field 00125 00126 BesEmcDetectorMessenger* detectorMessenger; //pointer to the Messenger 00127 BesEmcSD* besEMCSD; //pointer to the sensitive detector 00128 ExtBesEmcGeometry *besEMCGeometry; 00129 ExtBesEmcEndGeometry *emcEnd; 00130 G4VPVParameterisation* crystalParam; 00131 00132 00133 //Endcap geometry 00134 G4Cons* solidEnd; //pointer to the endcap 00135 G4LogicalVolume* logicEnd; 00136 G4VPhysicalVolume* physiEnd; 00137 00138 G4Cons* solidEndPhi; 00139 G4LogicalVolume* logicEndPhi; 00140 G4VPhysicalVolume* physiEndPhi; 00141 00142 G4IrregBox* solidEndCasing; 00143 G4LogicalVolume* logicEndCasing; 00144 G4VPhysicalVolume* physiEndCasing; 00145 00146 G4IrregBox* solidEndCrystal; 00147 G4LogicalVolume* logicEndCrystal; 00148 G4VPhysicalVolume* physiEndCrystal; 00149 00150 //other substance on the rear face of crystal 00151 private: 00152 00153 G4Box* solidRear; //virtual volume 00154 G4LogicalVolume* logicRear; 00155 G4VPhysicalVolume* physiRear; 00156 00157 G4Box* solidCasingBox; //casing 00158 G4Box* solidAirHole; 00159 G4SubtractionSolid* solidRearCasing; 00160 G4LogicalVolume* logicRearCasing; 00161 G4VPhysicalVolume* physiRearCasing; 00162 00163 G4Box* solidOrgGlass; //organic glass 00164 G4LogicalVolume* logicOrgGlass; 00165 G4VPhysicalVolume* physiOrgGlass; 00166 00167 G4Box* solidPD; //photodiode 00168 G4LogicalVolume* logicPD; 00169 G4VPhysicalVolume* physiPD; 00170 00171 G4Box* solidAlBox; //Al plate 00172 G4SubtractionSolid* solidAlPlate; 00173 G4LogicalVolume* logicAlPlate; 00174 G4VPhysicalVolume* physiAlPlate; 00175 00176 G4Box* solidPreAmpBox; //preamplifier box 00177 G4LogicalVolume* logicPreAmpBox; 00178 G4VPhysicalVolume* physiPreAmpBox; 00179 00180 G4Box* solidAirInPABox; //air in preamplifier box 00181 G4LogicalVolume* logicAirInPABox; 00182 G4VPhysicalVolume* physiAirInPABox; 00183 00184 G4Box* solidHangingPlate; //stainless steel for hanging the crysta 00185 G4LogicalVolume* logicHangingPlate; 00186 G4VPhysicalVolume* physiHangingPlate; 00187 00188 G4Cons* solidOCGirder; //opening-cut girder 00189 G4LogicalVolume* logicOCGirder; 00190 G4VPhysicalVolume* physiOCGirder; 00191 00192 G4Tubs* solidCable; //cable 00193 G4LogicalVolume* logicCable; 00194 G4VPhysicalVolume* physiCable; 00195 00196 G4Tubs* solidWaterPipe; //water pipe 00197 G4LogicalVolume* logicWaterPipe; 00198 G4VPhysicalVolume* physiWaterPipe; 00199 00200 //barrel support frame 00201 private: 00202 G4Tubs* solidSupportBar; //support bar 00203 G4LogicalVolume* logicSupportBar; 00204 G4VPhysicalVolume* physiSupportBar; 00205 00206 G4Tubs* solidSupportBar1; 00207 G4LogicalVolume* logicSupportBar1; 00208 G4VPhysicalVolume* physiSupportBar1; 00209 00210 G4Tubs* solidEndRing; //end ring 00211 G4LogicalVolume* logicEndRing; 00212 G4VPhysicalVolume* physiEndRing; 00213 00214 G4Tubs* solidGear; 00215 G4LogicalVolume* logicGear; 00216 G4VPhysicalVolume* physiGear; 00217 00218 G4Tubs* solidTaperRing1; //taper ring 00219 G4LogicalVolume* logicTaperRing1; 00220 G4VPhysicalVolume* physiTaperRing1; 00221 00222 G4Cons* solidTaperRing2; 00223 G4LogicalVolume* logicTaperRing2; 00224 G4VPhysicalVolume* physiTaperRing2; 00225 00226 G4Cons* solidTaperRing3; 00227 G4LogicalVolume* logicTaperRing3; 00228 G4VPhysicalVolume* physiTaperRing3; 00229 00230 private: 00231 G4Material* rearCasingMaterial; 00232 G4Material* organicGlass; 00233 G4Material* stainlessSteel; 00234 G4Material* cable; 00235 G4Material* waterPipe; 00236 00237 //---------------------------------------------------------------- 00238 00239 00240 }; 00241 00242 #endif