File indexing completed on 2025-10-31 08:24:21
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 }