//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* // LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION // // ID : LEMuSRDetectorConstruction.hh , v 1.0 // AUTHOR: Taofiq PARAISO // DATE : 2004-06-24 16:24 //§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// // // & &&&&&&&&&& &&&&&&& &&&&&&&& // & & && && & && // & & & & & & && // & &&&&&&& & & &&&&&& &&&&&&&& // & & & && & & && // & & && & & && && & & // &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && // & // & // & // & // DETECTOR CONSTRUCTION.HH //§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// #ifndef LEMuSRDetectorConstruction_H #define LEMuSRDetectorConstruction_H 1 #include "globals.hh" #include "G4VUserDetectorConstruction.hh" // G4 CLASSES FOR MATERIAL DEFINITION #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4Element.hh" #include "G4ElementTable.hh" #include "G4Isotope.hh" #include "G4UnitsTable.hh" #include "G4Transform3D.hh" // G4 ATTRIBUTES CLASSES #include "G4UserLimits.hh" #include "G4VisAttributes.hh" #include "G4Colour.hh" // G4 SENSITIVE DETECTOR #include "G4SDManager.hh" #include "LEMuSRScintSD.hh" #include "LEMuSROScintSD.hh" #include "LEMuSRMcpSD.hh" #include "LEMuSRCryoSD.hh" // G4 FIELD MANAGER #include "G4UniformMagField.hh" #include "G4UniformElectricField.hh" #include "G4FieldManager.hh" #include "LEMuSRRNDMAGField.hh" class LEMuSRDetectorMessenger; // modif class G4Box; class G4Tubs; class G4Cons; class G4SubtractionSolid; class G4UnionSolid; class G4LogicalVolume; class G4VPhysicalVolume; class G4Material; class LEMuSRDetectorConstruction : public G4VUserDetectorConstruction { public: // Constructeur et destructeur static LEMuSRDetectorConstruction* theDetector; // un pointeur a l'instance static LEMuSRDetectorConstruction* GetInstance(); LEMuSRDetectorConstruction(); ~LEMuSRDetectorConstruction(); // construction G4VPhysicalVolume* Construct(); G4VPhysicalVolume* lemuDetector(); // messenger LEMuSRDetectorMessenger* Messenger; //declaration of all the volumes private: //=======LABORATORY::WORLD================= // solid G4Box* LABO_box; // logical G4LogicalVolume* lv_LABO; // physical G4VPhysicalVolume* pv_LABO; // materials G4Material* LABO_material; //======= MPC2 ================= void lemuMCP2(); //solids G4Tubs* MCPV_tube; G4Tubs* MCPS_tube; G4Tubs* F160_tube; G4Tubs* F100_tube; G4Tubs* F200_tube; G4Tubs* GATV_tube; G4Tubs* GATS_tube; G4UnionSolid* MCPV_vtube; // logicals volumes G4LogicalVolume* lv_MCPV; G4LogicalVolume* lv_MCPS ; G4LogicalVolume* lv_F160 ; G4LogicalVolume* lv_F100 ; G4LogicalVolume* lv_F200 ; G4LogicalVolume* lv_GATV; G4LogicalVolume* lv_GATS ; // physical volumes G4VPhysicalVolume* pv_MCPV; G4VPhysicalVolume* pv_MCPS; G4VPhysicalVolume* pv_F160 ; G4VPhysicalVolume* pv_F100 ; G4VPhysicalVolume* pv_F200 ; G4VPhysicalVolume* pv_GATV; G4VPhysicalVolume* pv_GATS ; void buildAnodeField(); // parameter public: G4double mcpv_z; G4int Grid, Guards; //=================== ANODE ======================= private: void lemuANODE(); // solids G4Cons* RA_E_cone; G4Cons* RA_M_cone; G4Box *RA_Ebox, *RA_Mbox; G4SubtractionSolid* RA_E, *RA_M; G4Tubs* RA_G_tube, *RAV_tube; // logical G4LogicalVolume* lv_RA_E ; G4LogicalVolume* lv_RA_M ; G4LogicalVolume* lv_RA_G ; G4LogicalVolume* lv_RAV ; // physical G4VPhysicalVolume* pv_RA_E ; G4VPhysicalVolume* pv_RA_M ; G4VPhysicalVolume* pv_RA_G ; G4VPhysicalVolume* pv_RAV ; //================ MCP DETECTOR ===================== private: void lemuMCPdet(); // solids G4Tubs* DMCP_tube; G4Tubs* MCPM_tube; G4Box* MCPA_box; G4Tubs* ANVA_tube; G4Box* MCSR_box; G4Tubs* MCVR_tube; G4Tubs* MCSS_tube; // logical volumes G4LogicalVolume* lv_DMCP ; G4LogicalVolume* lv_MCPA ; G4LogicalVolume* lv_MCPM ; G4LogicalVolume* lv_ANVA ; G4LogicalVolume* lv_MCSR ; G4LogicalVolume* lv_MCVR ; G4LogicalVolume* lv_MCSS ; // physical volumes G4VPhysicalVolume* pv_DMCP ; G4VPhysicalVolume* pv_MCPA ; G4VPhysicalVolume* pv_MCPM ; G4VPhysicalVolume* pv_MCPM2; G4VPhysicalVolume* pv_ANVA ; G4VPhysicalVolume* pv_ANVA2; G4VPhysicalVolume* pv_MCSR ; G4VPhysicalVolume* pv_MCVR ; G4VPhysicalVolume* pv_MCSS ; // parameters public: G4double B; // magnetic field default unit gauss //================ CRYOSTAT ====================== private: void lemuCRYO(); // solids G4Tubs* SAH1_tube; G4Tubs* SAH2_tube; G4Tubs* SAH3_tube; G4Tubs* SAPH_tube; G4Tubs* COFI_tube; G4Tubs* CRY1_tube; G4Tubs* CRY2_tube; G4Tubs* CRY3_tube; G4Tubs* CRY4_tube; G4Tubs* CRSH_tube; G4Tubs* cryoField_tube; G4Tubs* CRSH2_tube; G4Tubs* Guard_Rings; // logical volumes G4LogicalVolume* lv_SAH1 ; G4LogicalVolume* lv_SAH2 ; G4LogicalVolume* lv_SAH3; G4LogicalVolume* lv_SAPH ; G4LogicalVolume* lv_COFI ; G4LogicalVolume* lv_CRY1 ; G4LogicalVolume* lv_CRY2 ; G4LogicalVolume* lv_CRY3 ; G4LogicalVolume* lv_CRY4 ; G4LogicalVolume* lv_CRSH ; G4LogicalVolume* lv_CRSH2 ; G4LogicalVolume* lv_Guards ; G4LogicalVolume* lv_cryoField ; // physical volumes G4VPhysicalVolume* pv_SAH1 ; G4VPhysicalVolume* pv_SAH2 ; G4VPhysicalVolume* pv_SAH3 ; G4VPhysicalVolume* pv_SAPH ; G4VPhysicalVolume* pv_COFI ; G4VPhysicalVolume* pv_CRY1 ; G4VPhysicalVolume* pv_CRY2 ; G4VPhysicalVolume* pv_CRY3 ; G4VPhysicalVolume* pv_CRY4 ; G4VPhysicalVolume* pv_CRSH ; G4VPhysicalVolume* pv_CRSH2 ; G4VPhysicalVolume* pv_Guard1 ; G4VPhysicalVolume* pv_Guard2 ; G4VPhysicalVolume* pv_cryoField; // Cryo electric field manager G4FieldManager* cryoFieldMgr; G4ElectricField* cryoField; G4FieldManager* sampleFieldMgr; G4MagneticField* sampleField; void buildCryoField(); void NEWMAPS(); public: // Parameters G4double cryoFieldLength,cryoVoltage; G4String Material_SAH; //================ LINSE three ====================== private: void lemuLinse3(); // solids G4Tubs* L3VA_tube; G4Tubs* L3ST_tube; G4Tubs* L3F_tube; // flange G4SubtractionSolid* L3GP_tube; G4Tubs* L3GP1, *L3GP2, *L3GP3; // L3GV_tube is a boolean G4SubtractionSolid* L3HP_tube; G4Tubs* L3HP1, *L3HP2 , *L3HP3, *L3HP4, *L3HP5; // logical volumes G4LogicalVolume* lv_L3VA ; G4LogicalVolume* lv_L3ST ; G4LogicalVolume* lv_L3F;//flange // Ground potential G4LogicalVolume* lv_L3GP1, *lv_L3GP2 , *lv_L3GP3; // High potential G4LogicalVolume* lv_L3HP, *lv_L3HP3, *lv_L3HP4, *lv_L3HP5 ; // physical volumes G4double L3z; G4VPhysicalVolume* pv_L3VA ; G4VPhysicalVolume* pv_L3ST ; G4VPhysicalVolume* pv_L3F1, *pv_L3F2 ;// flanges G4VPhysicalVolume* pv_L3GP1, *pv_L3GP2, *pv_L3GP3, *pv_L3GP4, *pv_L3GP5, *pv_L3GP6, *pv_L3GP7, *pv_L3GP8 ; G4VPhysicalVolume* pv_L3HP, *pv_L3HP3, *pv_L3HP4, *pv_L3HP5 , *pv_L3HP6, *pv_L3HP7, *pv_L3HP8; G4VPhysicalVolume* pv_L3GV2 ; //================ TRIGGER DETECTOR ==================== private: void lemuTrigger_Detector(); // solids G4Tubs* Trigger_tube; G4Tubs* TriggerV_tube; G4Tubs* TriggerF_tube; // flange G4Box* Trigger_box, *Trigger_box2, *Trigger_box3; // magnetic field manager G4FieldManager* T1FieldMgr; G4UniformElectricField* T1Field; // magnetic field manager G4FieldManager* T2FieldMgr; G4UniformElectricField* T2Field; // magnetic field manager G4FieldManager* T3FieldMgr; G4UniformElectricField* T3Field; // logical G4LogicalVolume *lv_Trigger, *lv_TriggerF, *lv_TriggerV, *lv_TriggerB, *lv_TriggerB2, *lv_TriggerB3, *lv_CFOIL; // physica.l G4VPhysicalVolume *pv_Trigger, *pv_TriggerF1, *pv_TriggerF2,*pv_TriggerV, *pv_TriggerB, *pv_TriggerB2, *pv_TriggerB3, *pv_CFOIL; //================ COMPENSATION GATE ==================== private: void lemuCGate(); // solids G4Tubs* CGate_tube; G4Tubs* CGateV_tube; G4Tubs* CGateF_tube; // flange // logical G4LogicalVolume *lv_CGate, *lv_CGateF, *lv_CGateV; // physica.l G4VPhysicalVolume *pv_CGate, *pv_CGateF1, *pv_CGateF2,*pv_CGateV; //======= INNER/OUTER SCINTILLATOR ================= private: void lemuSCINT(); //solids G4Tubs* SCIS_tube; G4Tubs* SCOS_tube; // logicals volumes G4LogicalVolume* lv_SCIS; G4LogicalVolume* lv_SCOS ; // physical volumes G4VPhysicalVolume* pv_SCISl; G4VPhysicalVolume* pv_SCOSl; G4VPhysicalVolume* pv_SCISr; G4VPhysicalVolume* pv_SCOSr; G4VPhysicalVolume* pv_SCISb; G4VPhysicalVolume* pv_SCOSb; G4VPhysicalVolume* pv_SCISt; G4VPhysicalVolume* pv_SCOSt; G4Transform3D rotation1; G4Transform3D rotation2; G4Transform3D rotation3; //================ ASYMETRY TEST VOLUMES ================ private: void lemuAsym(); // solids G4Tubs* Asym_tube; // logical G4LogicalVolume *lv_Asym, *lv_AsymL, *lv_AsymR; // physica.l G4VPhysicalVolume *pv_Asym, *pv_Asym2, *pv_AsymL, *pv_AsymR; G4Transform3D Asym_rotation; //========= ELECTRIC FIELD TEST VOLUMES ================ private: void lemuFieldCheck(); // solids G4Tubs* fchk_tube; // logical G4LogicalVolume* lv_fchk, *lv_fchk2,*lv_fchk3; // physical G4VPhysicalVolume* pv_fchk,*pv_fchk2,*pv_fchk3,*pv_fchk4,*pv_fchk5,*pv_fchk6,*pv_fchk7,*pv_fchk8,*pv_fchk9,*pv_fchk1,*pv_fchk10,*pv_fchk11,*pv_fchk12,*pv_fchk13,*pv_fchk14,*pv_fchk15,*pv_fchk16,*pv_fchk17,*pv_fchk18,*pv_fchk19,*pv_fchk20,*pv_fchk21,*pv_fchk22,*pv_fchk23,*pv_fchk24,*pv_fchk25,*pv_fchk26,*pv_fchk27,*pv_fchk28,*pv_fchk29,*pv_fchk30,*pv_fchk31,*pv_fchk32,*pv_fchk33,*pv_fchk34,*pv_fchk35,*pv_fchk36,*pv_fchk37,*pv_fchk38,*pv_fchk39,*pv_fchk40,*pv_fchk41,*pv_fchk42,*pv_fchk43,*pv_fchk44,*pv_fchk45,*pv_fchk46,*pv_fchk47,*pv_fchk48,*pv_fchk49,*pv_fchk50,*pv_fchk51,*pv_fchk52,*pv_fchk53,*pv_fchk54,*pv_fchk55,*pv_fchk56,*pv_fchk57,*pv_fchk58,*pv_fchk59,*pv_fchk60,*pv_fchk61,*pv_fchk62,*pv_fchk63,*pv_fchk64,*pv_fchk65,*pv_fchk66,*pv_fchk67,*pv_fchk68,*pv_fchk69,*pv_fchk70,*pv_fchk71,*pv_fchk72; //====== SENSITIVE DETECTORS ========================== public: LEMuSRCryoSD *CryoSD; LEMuSRMcpSD *McpSD; LEMuSRScintSD *iScintSD; LEMuSROScintSD *oScintSD; G4int scint, mcp, cryo; //====== MATERIAL DECLARATION ========================= private: void MaterialsDefinition(); //materials G4Material* SC_material; G4Material* SAH_material; G4Material* SAPH_material; G4Material* Scint_material; G4Material* DMCP_material; G4Material* Vacuum ; G4Material* SSteel ; G4Material* Copper ; G4Material* Macor ; G4Material* Carbon ; //====== ATTRIBUTES SETTING ========================= void LoadAttributes(); G4VisAttributes* Blue_style, *Red_style, *Purple_style, *Green_style, *Yellow_style, *dRed_style , *dYellow_style, *lBlue_style,*fBlue_style, *dBlue_style, *oxsteel; G4VisAttributes* VTBB_style,*MCP_style, *MACOR_style, *SCINT_style, *dSCINT_style; G4VisAttributes* White_style; G4UserLimits* VTBB_lim; //====== ARGUMENTS AND PARAMETERS====================== public: G4double dSPhi; // starting angle for detector G4double dEPhi; // ending angle for detector G4double sSPhi; // starting angle for detector G4double sEPhi; // ending angle for detector G4int magfield, elfield, anode_elfield, trigger_field; G4double L3FieldVal,AnodeFieldVal,RALval,RARval, FieldStepLim, cfthk; G4FieldManager* L3FieldMgr, *GFieldMgr; G4double offset, mcdetector, halfview; G4double AsymCheck; G4double RA_Ez, RA_Mz, RA_Gz, GATVz; inline G4double GetParamMC(){return mcdetector;} //======= TEMPLATE Volume To Be Built ================= void lemuVTBB(); //solids G4Tubs* VTBB_tube; // logicals volumes G4LogicalVolume* lv_VTBB; // physical volumes G4VPhysicalVolume* pv_VTBB; //materials G4Material* VTBB_material; // print STATUS void PrintStatus(); }; #endif