// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // #ifndef HGCALTBMATERIALS_HH #define HGCALTBMATERIALS_HH #include "G4Types.hh" #include "G4String.hh" #include "CLHEP/Units/SystemOfUnits.h" #include class G4Box; class G4LogicalVolume; class G4Material; class G4SubtractionSolid; /// Construction of a hexagon solid /// @param[in] name Name of the solid /// @param[in] cellThickness Thickness of the hexagon /// @param[in] cellSideLength Length of a side of the haxagon /// @return Solid G4SubtractionSolid *HexagonSolid(G4String name, G4double cellThickness, G4double cellSideLength); /// Construction of a logical volume /// @param[in] name Name of the solid /// @param[in] cellThickness Thickness of the hexagon /// @param[in] cellSideLength Length of a side of the haxagon /// @param[in] material Material /// @return Logical volume G4LogicalVolume *HexagonLogical(G4String name, G4double cellThickness, G4double cellSideLength, G4Material *material); /** * @brief HGCal material and elements definitions * * Defines materials used for HGCal test-beam. * Creates logical volumes for every element that may be constructed and placed * in the test beam. * */ class HGCalTBMaterials { public: /// Create HGCal materials HGCalTBMaterials(); /// Set visualisation attributes void SetEventDisplayColorScheme(); /// Get length of the beam line (world) inline G4double GetBeamLineLength() const { return fBeamLineLength; } /// Get transverse size of the beam line (world) inline G4double GetBeamLineXY() const { return fBeamLineXY; } /// Get pointer to the air material G4Material *GetAir() { return fMatAIR; } /// Place logical volume /// @param[in] aName Name of the logical volume /// @param[in,out] aZ0 Position in front of the logical volume, incremented by /// half the thickness for placement, and by another half thickness to return /// the position just behind the placed volume /// @param[in] aLogicMother Pointer to mother volume for placement void PlaceItemInLogicalVolume(std::string aName, G4double &aZ0, G4LogicalVolume *aLogicMother); /// Get logical volume of silicon pixel (cell) G4LogicalVolume *GetSiPixelLogical() { return this->fSiPixelLogical; } /// Get logical volume of SiPM G4LogicalVolume *GetAHCALSiPMlogical() { return this->fAHCALSiPMlogical; } /// Get any logical volume by name inline const G4LogicalVolume *GetLogicalVolume(G4String aName) { return fLogicalVolumeMap[aName]; }; /// Get thickness of logical volume by name inline G4double GetThickness(std::string aName) { return fThicknessMap[aName]; }; private: /// Define materisals used in HGCal test-beam void DefineMaterials(); /// Define silicon wafer logical volume from silicon cells/pixels void DefineSiWaferAndCells(); /// Define logical volumes for HGCal baseplates (CuW, Cu, PCB, Kapton layers) void DefineHGCalBaseplates(); /// Define logical volumes for HGCal cases (Al, Steel) void DefineHGCalCases(); /// Define logical volumes for HGCal electromagnetic part absorbers (Pb, Cu, /// W) void DefineHGCalEEAbsorbers(); /// Define logical volumes for HGCal hadronic part absorbers (Cu, Fe) void DefineHGCalFHAbsorbers(); /// Define logical volumes for AHCAL SiPM void DefineAHCALSiPM(); /// Define logical volumes for AHCAL absorbers void DefineAHCALAbsorbers(); /// Define logical volumes for beamline elements (MCP, scintillators, DWC) void DefineBeamLineElements(); /// Length of the beam line G4double fBeamLineLength = 90 * CLHEP::m; /// Transverse dimension of the beam line G4double fBeamLineXY = 4 * CLHEP::m; /// Rotation angle of silicon hexagon G4double fAlpha; /// Side length of silicon cell hexagon G4double fSiPixelSideLength; /// Thickness of silicon wafer hexagon G4double fSiWaferThickness; /// Side length of silicon wafer haxagon G4double fSiWaferSideLength; /// Transverse size of AHCAL SiPM G4double fAHCALSiPMxy; /// Box representing AHCAL SiPM G4Box *fAHCALSiPMsolid; /// Map of volume name to its thickness std::map fThicknessMap; /// Map of volume name to its logical volume std::map fLogicalVolumeMap; /// Map of volume name to counter of placed copies std::map fCopyCounterMap; /// Materials G4Material *fMatVacuum; G4Material *fMatAIR; G4Material *fMatAr; G4Material *fMatAl; G4Material *fMatFe; G4Material *fMatGlass; G4Material *fMatSteel; G4Material *fMatPb; G4Material *fMatCu; G4Material *fMatW; G4Material *fMatSi; G4Material *fMatKAPTON; G4Material *fMatAu; G4Material *fMatPCB; G4Material *fMatQuartz; G4Material *fMatPolystyrene; G4Material *fMatCuW; G4Material *fMatC; G4Material *fMatH; G4Material *fMatO; G4Material *fMatMn; G4Material *fMatCr; G4Material *fMatNi; G4Material *fMatPolyethylene; G4Material *fMatFreon; G4Material *fMatScintillator; G4Material *fMatArCO2; G4Material *fMatCl; G4Material *fMatF; /// Logical volumes G4LogicalVolume *fSiPixelLogical; G4LogicalVolume *fSiWaferLogical; G4LogicalVolume *fCuWbaseplateLogical; G4LogicalVolume *fCuWbaseplate550umLogical; G4LogicalVolume *fCuWbaseplate610umLogical; G4LogicalVolume *fCuWbaseplate710umLogical; G4LogicalVolume *fCuBaseplateLogical; G4LogicalVolume *fCuBaseplate25umLogical; G4LogicalVolume *fCuBaseplate175umLogical; G4LogicalVolume *fPCBbaseplateLogical; G4LogicalVolume *fPCBbaseplateThinLogical; G4LogicalVolume *fKaptonLayerLogical; G4LogicalVolume *fAlCaseLogical; G4LogicalVolume *fAlCaseThickLogical; G4LogicalVolume *fAlChipLogical; G4LogicalVolume *fSteelCaseLogical; G4LogicalVolume *fSteelCaseThickLogical; G4LogicalVolume *fPbAbsorberEElogical; G4LogicalVolume *fFeAbsorberEElogical; G4LogicalVolume *fCuAbsorberEElogical; G4LogicalVolume *fWabsorberEElogical; G4LogicalVolume *fW2mmAbsorberEEDESY2018Logical; G4LogicalVolume *fW4mmAbsorberEEDESY2018Logical; G4LogicalVolume *fCuAbsorberFHlogical; G4LogicalVolume *fFeAbsorberFHlogical; G4LogicalVolume *fAHCALSiPMlogical; G4LogicalVolume *fAHCALSiPM2x2HUBlogical; G4LogicalVolume *fAlAbsorberAHCALlogical; G4LogicalVolume *fPCBAHCALlogical; G4LogicalVolume *fFeAbsorberAHCALlogical; G4LogicalVolume *fScintillatorLogical; G4LogicalVolume *fScintillatorThinLogical; G4LogicalVolume *fMCPlogical; G4LogicalVolume *fDWClogical; G4LogicalVolume *fDWCgasLogical; G4LogicalVolume *fCK3logical; }; #endif /* HGCALTBMATERIALS_HH */