musrsim/geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh
2005-11-11 12:35:21 +00:00

519 lines
13 KiB
C++

//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//*
// 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