/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Simulation/BOOST/EmcSim/EmcSim-00-00-46/EmcSim/BesEmcConstruction.hh

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------//
00002 //      BOOST --- BESIII Object_Oreiented Simulation Tool                    //
00003 //---------------------------------------------------------------------------//
00004 //Descpirtion: EMC detector 
00005 //Author: Fu Chengdong
00006 //Created: Sep 4, 2003
00007 //Comment:
00008 //---------------------------------------------------------------------------//
00009 //
00010 
00011 #ifndef BesEmcConstruction_h
00012 #define BesEmcConstruction_h 1
00013 
00014 //#include "G4VUserDetectorConstruction.hh"
00015 #include "globals.hh"
00016 #include "BesSubdetector.hh"
00017 #include "BesEmcGeometry.hh"
00018 #include "BesEmcEndGeometry.hh"
00019 #include "G4VPVParameterisation.hh"
00020 
00021 //#include "CLHEP/config/CLHEP.h"
00022 #include "CLHEP/Vector/ThreeVector.h"
00023 #include "CLHEP/Vector/Rotation.h"
00024 #include "CLHEP/Geometry/Point3D.h"
00025 #include "CLHEP/Geometry/Plane3D.h"
00026 #ifndef ENABLE_BACKWARDS_COMPATIBILITY
00027   typedef HepGeom::Point3D<double> HepPoint3D;
00028 #endif
00029 #ifndef ENABLE_BACKWARDS_COMPATIBILITY
00030   //  backwards compatibility will be enabled ONLY in CLHEP 1.9
00031   typedef HepGeom::Plane3D<double> HepPlane3D;
00032 #endif
00033 
00034 
00035 using namespace CLHEP;
00036 
00037 class G4Box;
00038 class G4Tubs;
00039 class G4Cons;
00040 class G4Polyhedra;
00041 class G4Trap;
00042 class G4UnionSolid;
00043 class G4LogicalVolume;
00044 class G4VPhysicalVolume;
00045 class G4Material;
00046 class G4UniformMagField;
00047 class BesEmcDetectorMessenger;
00048 class BesEmcSD;
00049 class G4IrregBox;
00050 class G4SubtractionSolid;
00051 
00052 class BesEmcConstruction : public BesSubdetector
00053 {
00054 public: // with description
00055   static BesEmcConstruction* GetBesEmcConstruction();
00056   //  Static method which returns the singleton pointer of G4RunManager or
00057   // its derived class.
00058   
00059 private:
00060   static BesEmcConstruction* fBesEmcConstruction;
00061   
00062 public:
00063   
00064   BesEmcConstruction();
00065   ~BesEmcConstruction();
00066   
00067 public:
00068   
00069   inline void SetVerboseLevel(G4int val){ verboseLevel=val;}
00070 
00071   void SetCrystalMaterial (G4String);     
00072   
00073   void SetCasingMaterial (G4String);     
00074   void SetCasingThickness(G4ThreeVector);
00075   
00076   void SetBSCRmin(G4double);
00077   void SetBSCNbPhi(G4int);
00078   void SetBSCNbTheta(G4int);
00079   void SetStartIDTheta(G4int);
00080   void SetBSCCrystalLength(G4double);
00081   void SetBSCYFront0(G4double);
00082   void SetBSCYFront(G4double);
00083   void SetBSCPosition0(G4double);
00084   void SetBSCPosition1(G4double);
00085   
00086   void SetMagField(G4double);
00087      
00088   void Construct(G4LogicalVolume*);
00089   
00090   void UpdateGeometry();
00091 
00092   void ThreeVectorTrans( G4ThreeVector fPnt[8], double x[8], double y[8], double z[8] );
00093   void TransformToArb8( const G4ThreeVector fPnt[8], G4ThreeVector newfPnt[8],
00094       G4ThreeVector &center, G4ThreeVector &rotAngle );
00095   Hep3Vector RotAngleFromNewZ( Hep3Vector newZ );
00096   
00097 public:
00098   
00099   void PrintEMCParameters(); 
00100   
00101   G4int GetVerboseLevel() {return verboseLevel;};
00102   G4double GetMagField()  {return fmagField;};
00103 
00104   G4int GetStartIDTheta()          {return startID;};
00105   
00106   G4Material* GetCrystalMaterial()  {return fCrystalMaterial;};     
00107   G4Material* GetCasingMaterial()       {return fCasingMaterial;};
00108   //G4ThreeVector GetCasingThickness()   {return G4ThreeVector(fTyvekThickness,fAlThickness,fMylarThickness);};
00109   
00110   const G4VPhysicalVolume* GetEMC() {return physiEMC; }
00111   const G4VPhysicalVolume* GetBSCPhi() {return physiBSCPhi;};
00112   const G4VPhysicalVolume* GetBSCTheta() {return physiBSCTheta;};
00113   const G4VPhysicalVolume* GetBSCCrystal(){return physiBSCCrystal;};
00114   const G4VPVParameterisation* GetCrystalParam(){return crystalParam;};
00115 
00116 private:
00117 
00118   G4int              verboseLevel;
00119   G4double           fmagField;
00120      
00121   G4Material*        fCrystalMaterial;
00122 
00123   G4int              phiNbCrystals;
00124   G4int              thetaNbCrystals;
00125   G4int              startID;
00126 
00127   G4Material*        fCasingMaterial;
00128   
00129   G4Material*        defaultMaterial;
00130 
00131   G4Tubs*             solidBSC;     //Barrel
00132   G4Cons*             solidESC;     //Endcap
00133   G4UnionSolid*       solidEMC;
00134   G4LogicalVolume*    logicEMC;
00135   G4VPhysicalVolume*  physiEMC;
00136   
00137   G4SubtractionSolid* solidBSCWorld;  //virtual volume for barrel
00138   G4LogicalVolume*    logicBSCWorld;
00139   G4VPhysicalVolume*  physiBSCWorld;
00140   
00141   G4Tubs*            solidBSCPhiTub;
00142   G4Cons*            solidConsPhi;
00143   G4SubtractionSolid* solidBSCPhi1;
00144   G4SubtractionSolid* solidBSCPhi;   //pointer to the solid Layer 
00145   G4LogicalVolume*   logicBSCPhi;    //pointer to the logical Layer
00146   G4VPhysicalVolume* physiBSCPhi;    //pointer to the physical Layer
00147 
00148   G4Trap*            solidBSCTheta; //pointer to the solid Absorber
00149   G4LogicalVolume*   logicBSCTheta; //pointer to the logical Absorber
00150   G4VPhysicalVolume* physiBSCTheta; //pointer to the physical Absorber
00151   
00152   G4Trap*            solidBSCCrystal; //pointer to the solid Absorber
00153   G4LogicalVolume*   logicBSCCrystal; //pointer to the logical Absorber
00154   G4VPhysicalVolume* physiBSCCrystal; //pointer to the physical Absorber
00155 
00156   G4UniformMagField* magField;      //pointer to the magnetic field
00157   
00158   BesEmcDetectorMessenger* detectorMessenger;  //pointer to the Messenger
00159   BesEmcSD*          besEMCSD;  //pointer to the sensitive detector
00160   BesEmcGeometry     *besEMCGeometry;
00161   BesEmcEndGeometry  *emcEnd;
00162   G4VPVParameterisation*  crystalParam;   
00163 
00164 //Endcap geometry
00165 private:
00166   
00167   G4Cons*            solidEnd;      //pointer to the endcap
00168   G4LogicalVolume*   logicEnd;
00169   G4VPhysicalVolume* physiEnd;
00170 
00171   G4Cons*            solidEndPhi;
00172   G4LogicalVolume*   logicEndPhi;
00173   G4VPhysicalVolume* physiEndPhi;
00174 
00175   G4IrregBox*        solidEndCasing;
00176   G4LogicalVolume*   logicEndCasing;
00177   G4VPhysicalVolume* physiEndCasing;
00178 
00179   G4IrregBox*        solidEndCrystal;
00180   G4LogicalVolume*   logicEndCrystal;
00181   G4VPhysicalVolume* physiEndCrystal;
00182 
00183 //other substance on the rear face of crystal
00184 private:
00185 
00186   G4Box*              solidRear;          //virtual volume
00187   G4LogicalVolume*    logicRear;
00188   G4VPhysicalVolume*  physiRear;
00189 
00190   G4Box*              solidCasingBox;     //casing
00191   G4Box*              solidAirHole;
00192   G4SubtractionSolid* solidRearCasing;
00193   G4LogicalVolume*    logicRearCasing;
00194   G4VPhysicalVolume*  physiRearCasing;
00195 
00196   G4Box*              solidOrgGlass;      //organic glass
00197   G4LogicalVolume*    logicOrgGlass;
00198   G4VPhysicalVolume*  physiOrgGlass;
00199 
00200   G4Box*              solidPD;            //photodiode
00201   G4LogicalVolume*    logicPD;
00202   G4VPhysicalVolume*  physiPD;
00203 
00204   G4Box*              solidAlBox;         //Al plate
00205   G4SubtractionSolid* solidAlPlate;
00206   G4LogicalVolume*    logicAlPlate;
00207   G4VPhysicalVolume*  physiAlPlate;
00208 
00209   G4Box*              solidPreAmpBox;     //preamplifier box
00210   G4LogicalVolume*    logicPreAmpBox;
00211   G4VPhysicalVolume*  physiPreAmpBox;
00212 
00213   G4Box*              solidAirInPABox;    //air in preamplifier box
00214   G4LogicalVolume*    logicAirInPABox;
00215   G4VPhysicalVolume*  physiAirInPABox;
00216 
00217   G4Box*              solidHangingPlate;  //stainless steel for hanging the crysta
00218   G4LogicalVolume*    logicHangingPlate;
00219   G4VPhysicalVolume*  physiHangingPlate;
00220 
00221   G4Cons*             solidOCGirder;      //opening-cut girder
00222   G4LogicalVolume*    logicOCGirder;
00223   G4VPhysicalVolume*  physiOCGirder;
00224 
00225   G4Tubs*             solidCable;         //cable
00226   G4LogicalVolume*    logicCable;
00227   G4VPhysicalVolume*  physiCable;
00228 
00229   G4Tubs*             solidWaterPipe;     //water pipe
00230   G4LogicalVolume*    logicWaterPipe;
00231   G4VPhysicalVolume*  physiWaterPipe;
00232 
00233 //barrel support frame
00234 private:
00235   G4Tubs*             solidSupportBar;      //support bar
00236   G4LogicalVolume*    logicSupportBar;
00237   G4VPhysicalVolume*  physiSupportBar;
00238   
00239   G4Tubs*             solidSupportBar1;
00240   G4LogicalVolume*    logicSupportBar1;
00241   G4VPhysicalVolume*  physiSupportBar1;
00242   
00243   G4Tubs*             solidEndRing;       //end ring
00244   G4LogicalVolume*    logicEndRing;
00245   G4VPhysicalVolume*  physiEndRing;
00246 
00247   G4Tubs*             solidGear;
00248   G4LogicalVolume*    logicGear;
00249   G4VPhysicalVolume*  physiGear;
00250 
00251   G4Tubs*             solidTaperRing1;     //taper ring
00252   G4LogicalVolume*    logicTaperRing1;
00253   G4VPhysicalVolume*  physiTaperRing1;
00254 
00255   G4Cons*             solidTaperRing2;
00256   G4LogicalVolume*    logicTaperRing2;
00257   G4VPhysicalVolume*  physiTaperRing2;
00258 
00259   G4Cons*             solidTaperRing3;
00260   G4LogicalVolume*    logicTaperRing3;
00261   G4VPhysicalVolume*  physiTaperRing3;
00262 
00263 private:
00264   G4Material*         rearCasingMaterial;
00265   G4Material*         organicGlass;
00266   G4Material*         stainlessSteel;
00267   G4Material*         cable;
00268   G4Material*         waterPipe;
00269 
00270 public:
00271   void ConstructSPFrame(G4LogicalVolume*, BesEmcGeometry*);
00272   void ConstructEndGeometry(G4LogicalVolume*);
00273   void GetLogicalVolume();
00274   void SetVisAndSD();
00275   G4int ComputeEndCopyNb(G4int);
00276       
00277 private:
00278     
00279   void DefineMaterials();
00280   void ComputeEMCParameters();
00281   //  G4VPhysicalVolume* Construct(G4LogicalVolume*);     
00282 };
00283 
00284 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00285 
00286 #endif

Generated on Tue Nov 29 23:14:25 2016 for BOSS_7.0.2 by  doxygen 1.4.7