File indexing completed on 2025-02-23 09:22:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #include "RE01CalorimeterROGeometry.hh"
0032
0033 #include "G4Box.hh"
0034 #include "G4LogicalVolume.hh"
0035 #include "G4Material.hh"
0036 #include "G4NistManager.hh"
0037 #include "G4PVPlacement.hh"
0038 #include "G4PVReplica.hh"
0039 #include "G4SDManager.hh"
0040 #include "G4SystemOfUnits.hh"
0041 #include "G4ThreeVector.hh"
0042 #include "G4Tubs.hh"
0043 #include "G4VPhysicalVolume.hh"
0044
0045
0046 RE01CalorimeterROGeometry::RE01CalorimeterROGeometry(G4String& parallelWorldName)
0047 : G4VUserParallelWorld(parallelWorldName)
0048 {
0049 #include "RE01DetectorParameterDef.icc"
0050 }
0051
0052
0053 RE01CalorimeterROGeometry::~RE01CalorimeterROGeometry()
0054 {
0055 ;
0056 }
0057
0058
0059 void RE01CalorimeterROGeometry::Construct()
0060 {
0061
0062
0063
0064 G4Material* dummyMat = nullptr;
0065
0066
0067 G4VPhysicalVolume* ROWorldPhys = GetWorld();
0068 G4LogicalVolume* ROWorldLog = ROWorldPhys->GetLogicalVolume();
0069
0070
0071 G4VSolid* caloROtub = new G4Tubs("caloROtub", fCaloTubs_rmin, fCaloTubs_rmax, fCaloTubs_dz,
0072 fCaloTubs_sphi, fCaloTubs_dphi);
0073 G4LogicalVolume* caloROlog = new G4LogicalVolume(caloROtub, dummyMat, "caloROlogical", 0, 0, 0);
0074
0075 new G4PVPlacement(0, G4ThreeVector(), caloROlog, "calROphysical", ROWorldLog, false, 0);
0076
0077
0078
0079
0080
0081 G4VSolid* caloROphiDivisionTub = new G4Tubs("caloROphiDivision", fCaloCell_rmin, fCaloCell_rmax,
0082 fCaloCell_dz, fCaloCell_sphi, fCaloCell_dphi);
0083 G4LogicalVolume* caloROphiDivisionLog =
0084 new G4LogicalVolume(caloROphiDivisionTub, dummyMat, "caloROphiDivisionLogical", 0, 0, 0);
0085
0086 new G4PVReplica("caloROphiDivisionPhysical", caloROphiDivisionLog, caloROlog, kPhi,
0087 fSegmentsinPhi, fCaloCell_dphi);
0088
0089 G4VSolid* caloROcellTub = new G4Tubs("caloROcellTub", fCaloRing_rmin, fCaloRing_rmax,
0090 fCaloRing_dz, fCaloRing_sphi, fCaloRing_dphi);
0091 G4LogicalVolume* caloROcellLog =
0092 new G4LogicalVolume(caloROcellTub, dummyMat, "caloROcellLogical", 0, 0, 0);
0093
0094 new G4PVReplica("caloROcellPhysical", caloROcellLog, caloROphiDivisionLog, kZAxis, fSegmentsinZ,
0095 2. * fCaloRing_dz);
0096 }
0097
0098 #include "RE01CalorimeterSD.hh"
0099
0100 void RE01CalorimeterROGeometry::ConstructSD()
0101 {
0102
0103
0104
0105 G4String calorimeterSDname = "/mydet/calorimeter";
0106 RE01CalorimeterSD* calorimeterSD = new RE01CalorimeterSD(calorimeterSDname);
0107 G4SDManager::GetSDMpointer()->AddNewDetector(calorimeterSD);
0108 SetSensitiveDetector("caloROcellLogical", calorimeterSD);
0109 }