Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 09:22:42

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file runAndEvent/RE01/src/RE01CalorimeterROGeometry.cc
0027 /// \brief Implementation of the RE01CalorimeterROGeometry class
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 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0046 RE01CalorimeterROGeometry::RE01CalorimeterROGeometry(G4String& parallelWorldName)
0047   : G4VUserParallelWorld(parallelWorldName)
0048 {
0049 #include "RE01DetectorParameterDef.icc"
0050 }
0051 
0052 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0053 RE01CalorimeterROGeometry::~RE01CalorimeterROGeometry()
0054 {
0055   ;
0056 }
0057 
0058 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0059 void RE01CalorimeterROGeometry::Construct()
0060 {
0061   // A dummy material is used to fill the volumes of the readout geometry.
0062   // ( It will be allowed to set a NULL pointer in volumes of such virtual
0063   // division in future, since this material is irrelevant for tracking.)
0064   G4Material* dummyMat = nullptr;
0065 
0066   // the ReadOut World:
0067   G4VPhysicalVolume* ROWorldPhys = GetWorld();
0068   G4LogicalVolume* ROWorldLog = ROWorldPhys->GetLogicalVolume();
0069 
0070   // Calorimeter volume:
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   //  G4VPhysicalVolume * caloROphys =
0075   new G4PVPlacement(0, G4ThreeVector(), caloROlog, "calROphysical", ROWorldLog, false, 0);
0076 
0077   // -------------------------------
0078   // Calorimeter readout division:
0079   // -------------------------------
0080   // Phi division first: 48 sectors
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   //  G4VPhysicalVolume * caloROphiDivisionPhys =
0086   new G4PVReplica("caloROphiDivisionPhysical", caloROphiDivisionLog, caloROlog, kPhi,
0087                   fSegmentsinPhi, fCaloCell_dphi);
0088   // then z division: 20 slices:
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   //  G4VPhysicalVolume * caloROcellPhys =
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   // Sensitive Detector
0104   //------------------------------------------------------------------
0105   G4String calorimeterSDname = "/mydet/calorimeter";
0106   RE01CalorimeterSD* calorimeterSD = new RE01CalorimeterSD(calorimeterSDname);
0107   G4SDManager::GetSDMpointer()->AddNewDetector(calorimeterSD);
0108   SetSensitiveDetector("caloROcellLogical", calorimeterSD);
0109 }