Added to repository
This commit is contained in:
518
geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh
Normal file
518
geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh
Normal file
@ -0,0 +1,518 @@
|
||||
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//*
|
||||
// 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
|
||||
|
Reference in New Issue
Block a user