519 lines
13 KiB
C++
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
|
|
|