Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 #ifndef PAR03DETECTORCONSTRUCTION_H 27 #define PAR03DETECTORCONSTRUCTION_H 28 29 #include "G4Material.hh" 30 #include "G4SystemOfUnits.hh" 31 #include "G4VUserDetectorConstruction.hh" 32 33 class Par03DetectorMessenger; 34 class G4LogicalVolume; 35 36 /** 37 * @brief Detector construction. 38 * 39 * Creates a cylindrical detector, with cylinder axis along Z-axis. It is placed 40 * in the world volume so that its bases are located at z=0 and z=Length. 41 * Dimensions of the detector (Radius and Length) and material can be set using 42 * the UI commands. 43 * Readout geometry of the detector is created, and can be set by UI commands. 44 * Cells are created along z-axis, azimuthal angle, and radius (cylindrical 45 * segmentation). 46 * Sensitive detector Par03SensitiveDetector is attached to the 47 * cell volume. 48 * Region for the detector is created as an envelope of the fast simulation. 49 * 50 */ 51 52 class Par03DetectorConstruction : public G4VUserDetectorConstruction 53 { 54 public: 55 Par03DetectorConstruction(); 56 virtual ~Par03DetectorConstruction(); 57 58 virtual G4VPhysicalVolume* Construct() final; 59 virtual void ConstructSDandField() final; 60 61 // Set radius of the cylindrical detector 62 void SetRadius(G4double aRadius); 63 // Get radius of the cylindrical detector 64 inline G4double GetRadius() const { return fDetectorRadius; }; 65 // Set length of the cylindrical detector (along z-axis) 66 void SetLength(G4double aLength); 67 // Get length of the cylindrical detector (along z-axis) 68 inline G4double GetLength() const { return fDetectorLength; }; 69 // Set material of the detector (from NIST materials) 70 void SetMaterial(const G4String& aMaterial); 71 // Get name of the material of the detector 72 inline G4String GetMaterial() const { return fDetectorMaterial->GetName(); }; 73 74 // Set number of readout cells along z-axis 75 inline void SetNbOfLayers(G4int aNumber) { fNbOfLayers = aNumber; }; 76 // Get number of readout cells along z-axis 77 inline G4int GetNbOfLayers() const { return fNbOfLayers; }; 78 // Set number of readout cells along radius of cylinder 79 inline void SetNbOfRhoCells(G4int aNumber) { fNbOfRhoCells = aNumber; }; 80 // Get number of readout cells along radius of cylinder 81 inline G4int GetNbOfRhoCells() const { return fNbOfRhoCells; }; 82 // Set number of readout cells in azimuthal angle 83 inline void SetNbOfPhiCells(G4int aNumber) { fNbOfPhiCells = aNumber; }; 84 // Get number of readout cells in azimuthal angle 85 inline G4int GetNbOfPhiCells() const { return fNbOfPhiCells; }; 86 87 // Print detector information 88 void Print() const; 89 90 private: 91 /// Messenger that allows to modify geometry 92 Par03DetectorMessenger* fDetectorMessenger; 93 /// Logical volume of replicated cell 94 G4LogicalVolume* fLogicCell = nullptr; 95 /// World size (in each X, Y, Z dimension) 96 G4double fWorldSize = 10 * m; 97 /// Radius of the cylindrical detector 98 G4double fDetectorRadius = 10 * cm; 99 /// Length of the cylindrical detector (along z axis) 100 G4double fDetectorLength = 30 * cm; 101 /// Material of the detector 102 G4Material* fDetectorMaterial = nullptr; 103 /// Number of layers = slices along z axis 104 G4int fNbOfLayers = 10; 105 /// Number of cells along radius 106 G4int fNbOfRhoCells = 10; 107 /// Number of cells in azimuthal angle 108 G4int fNbOfPhiCells = 10; 109 }; 110 111 #endif /* PAR03DETECTORCONSTRUCTION_H */ 112