#ifndef Clusterspddresda_h #define Clusterspddresda_h 1 #include "globals.hh" #include "G4LogicalVolume.hh" #include "G4SDManager.hh" #include "G4MultiFunctionalDetector.hh" #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" class Materials; class ClusterspddresdaMessenger; class G4VPhysicalVolume; class G4LogicalVolume; class myECalSD; class G4UserLimits; class DetectorConstruction; class Clusterspddresda { public: Clusterspddresda(); ~Clusterspddresda(); static Clusterspddresda* GetInstance(); //virtual void ConstructSD(G4bool*); static const G4int maxNbOfClusters = 6; //number of cluster detectors static const G4int maxNbOfCrystals = 7; // number of crystals per cluster void SetupGeometry(); G4double ClusterDistance[maxNbOfClusters]; G4double ClusterAngle[maxNbOfClusters]; G4double ClusterInclination[maxNbOfClusters]; G4double ClusterOrientation[maxNbOfClusters]; G4int NbOfCrystals[maxNbOfClusters]; G4int NbOfClusters; G4String nameCluster[maxNbOfClusters]; G4bool ConstructBGO[maxNbOfClusters]; //if Detector is without BGO void Mb1SetFileName(G4String Mb1filename) {Mb1fileName = Mb1filename;}; void Mb2SetFileName(G4String Mb2filename) {Mb2fileName = Mb2filename;}; void TripleClusterBGOhousingSetFileName(G4String TripleClusterBGOhousingfilename) {TripleClusterBGOhousingfileName = TripleClusterBGOhousingfilename;}; void CapsuleSetFileName(G4String Capsulefilename) {CapsulefileName = Capsulefilename;}; void SeptupleClusterBGOhousingSetFileName(G4String SeptupleClusterBGOhousingfilename) {SeptupleClusterBGOhousingfileName = SeptupleClusterBGOhousingfilename;}; void Shielding90SetFileName(G4String Shielding90filename) {Shielding90fileName = Shielding90filename;}; private: Materials* materials; ClusterspddresdaMessenger* clusterspddresdaMessenger; DetectorConstruction* detectorConstruction; static Clusterspddresda* instance; void InitializeDetectorParameters(); void HPGe60Geometry(G4int, G4Transform3D, G4bool); void HPGe60BGOGeometry(G4int, G4Transform3D); void HPGe90Geometry(G4Transform3D); void TripleClusterBGOGeometry(G4int); void CrystalwDeadLayersGeometry(G4int, G4int, G4VPhysicalVolume*, G4double, G4double); void TripleClusterGeometry(G4int, G4Transform3D, G4bool); void SeptupleClusterHousing(G4int, G4Transform3D, G4bool); void SeptupleClusterGeometry(G4int, G4Transform3D, G4bool); void SeptupleClusterBGOGeometry(G4int, G4Transform3D); void MonolithicShieldingGeometry(G4Transform3D); void HPGe100Geometry(G4int, G4double, G4double, G4double); void InitializeVisAtt(); // Triple cluster detector G4LogicalVolume* TripleClusterDetector_logical[maxNbOfClusters]; // the detector world volum from gdml file G4LogicalVolume* TripleClusterCrystal_logical[maxNbOfClusters][maxNbOfCrystals]; // logical crystals G4VPhysicalVolume* TripleClusterDetector_physical[maxNbOfClusters]; // The whole detector G4VPhysicalVolume* TripleClusterCrystal_physical[maxNbOfClusters][maxNbOfCrystals]; // crystals //Cluster Crystals G4double dDeadLayerCap[maxNbOfClusters][maxNbOfCrystals]; G4double hDeadLayerCone[maxNbOfClusters][maxNbOfCrystals]; G4LogicalVolume* ActiveCrystal_logical[maxNbOfClusters][maxNbOfCrystals]; G4VPhysicalVolume* ActiveCrystal_physical[maxNbOfClusters][maxNbOfCrystals]; myECalSD* ActiveCrystals_SD[maxNbOfClusters]; // sensitive detector for HPGe crystals G4double dCluster2= 0.*mm; G4double tiltCluster2= 0.*mm; G4int version; //Septuple cluster detector G4LogicalVolume* SeptupleClusterVacuum_logical[maxNbOfClusters]; G4LogicalVolume* SeptupleClusterHousing_logical[maxNbOfClusters]; G4LogicalVolume* SeptupleClusterBGO_logical[maxNbOfClusters]; G4VPhysicalVolume* SeptupleClusterVacuum_phys[maxNbOfClusters]; G4VPhysicalVolume* SeptupleClusterHousing_phys[maxNbOfClusters]; G4VPhysicalVolume* SeptupleClusterBGO_phys[maxNbOfClusters]; //Triple cluster BGO G4double dBGOHousing; G4double dOffsetBGO; G4LogicalVolume* BGOCrystal_logic[maxNbOfClusters]; // logical BGO crystals G4LogicalVolume* BGOHousing_logical[maxNbOfClusters]; // Housing of BGO (full Al) G4VPhysicalVolume* housingBGOvac_physical[maxNbOfClusters]; // Inner vacuum of BGO housing G4VPhysicalVolume* BGOCrystal_physical[maxNbOfClusters][8]; // 8 cloned BGO crystals //myECalSD* tripleClusterBGOSD[maxNbOfClusters]; // sensitive detector BGO crystals myECalSD* BGOSD[maxNbOfClusters]; // sensitive detector BGO crystals // HPGe60 detector components G4VPhysicalVolume* physicHPGe60PbShield; // Lead shield of HPGe60 detector G4VPhysicalVolume* physicHPGe60Casing; // Casing of HPGe60 detector G4VPhysicalVolume* physicHPGe60Vac; // Space for HPGe60 vacuum G4VPhysicalVolume* physicHPGe60GeCrystal; // HPGe crystal G4VPhysicalVolume* physicHPGe60InnerCtLayer; // HPGe60 inner contact layer G4VPhysicalVolume* physicHPGe60OuterCtLayer; // HPGe60 outer contact layer G4VPhysicalVolume* physicHPGe60Holder; // Holder for crystal //dead layers HPGe60 G4double hPGe60OuterCtLayerThickness; // Outer Contactlayer Thickness of HPGe60 (Deadlayer) G4double hPGe60InnerCtLayerThickness; // HPGe90 detector components G4VPhysicalVolume* physicHPGe90PbShield; // Lead shield of HPGe60 detector G4VPhysicalVolume* physicHPGe90Casing; // Casing of HPGe60 detector G4VPhysicalVolume* physicHPGe90Vac; // Space for HPGe60 vacuum G4LogicalVolume* logicHPGe90GeCrystal; // logical HPGe crystal G4VPhysicalVolume* physicHPGe90GeCrystal; // HPGe crystal G4VPhysicalVolume* physicHPGe90InnerCtLayer; // HPGe60 inner contact layer G4VPhysicalVolume* physicHPGe90OuterCtLayer; // HPGe60 outer contact layer G4VPhysicalVolume* physicHPGe90Holder; // Holder for crystal myECalSD* HPGe90SD; myECalSD* HPGe90BGOSD; //Monolithic Shielding G4LogicalVolume* shieldingCone_log; // the shielding world volum from gdml file G4VPhysicalVolume* shieldingCone_phys; // its physical G4LogicalVolume* logicHPGe90BGO; // logical HPGe crystal // 100% detector components G4LogicalVolume* DET1BGO_logical; // logical BGO Anti-Compton Shield G4VPhysicalVolume* DET1BGO_physical; // BGO Anti-Compton Shield G4LogicalVolume* DET1HPGE_logical; // logical HPGe 100% detector G4VPhysicalVolume* DET1HPGE_physical; // HPGe 100% detector G4VPhysicalVolume* DET1Contactlayer_physical;// HPGe100 contact layer G4VPhysicalVolume* DET1Coolingfinger_physical;// HPGe100 Coolingfinger G4VPhysicalVolume* DET1Alhousinga_physical; // HPGe100 Alu housing G4VPhysicalVolume* DET1Alhousingb_physical; // HPGe100 Alu housing G4VPhysicalVolume* DET1Alhousingc_physical; // HPGe100 Alu housing G4VPhysicalVolume* DET1Alring_physical; // HPGe100 Alu ring G4VPhysicalVolume* physicHPGe100Kollimator; // lead kollimator in front of HPGe100 G4VPhysicalVolume* physicHPGe100KolliPlate; // kollimator holder HPGe100 G4VPhysicalVolume* physicHPGe100PbShield; // lead shield around HPGe100 G4VPhysicalVolume* DET1Quartz_physical; // HPGe100 Quartz layer G4VPhysicalVolume* physicHPGe100Setup; // Hole HPGe100 + BGO setup G4bool pSurfChk; // Switch for geometrical overlap check (time-consuming) G4bool solidGe; // general switch for ge visibility G4double dFrontCone; G4double dCluster; G4double zPositionCluster; G4double dCollimator; // length Collimator G4double dLeadRing1BGOHousing; G4double dLeadRingsTotal; G4SDManager* pSDman; // sensitive detector manager G4MultiFunctionalDetector* sourceSD; // sensitive detector for source G4VisAttributes* ContactLayerVisAtt; G4VisAttributes* PreampVisAtt; G4VisAttributes* geVisAtt; G4VisAttributes* aluVisAtt; G4VisAttributes* pbVisAtt; G4VisAttributes* vacVisAtt; G4VisAttributes* quartzVisAtt; G4VisAttributes* setupVisAtt; G4VisAttributes* BGOVisAtt; G4String Mb1fileName; G4String Mb2fileName; G4String TripleClusterBGOhousingfileName; G4String CapsulefileName; G4String SeptupleClusterBGOhousingfileName; G4String Shielding90fileName; }; #endif