ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DicomRegularDetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DicomRegularDetectorConstruction.cc
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 //
29 //
30 // History:
31 // Pedro Arce
32 //
33 //*******************************************************
34 
35 #include "globals.hh"
36 
37 #include "G4Box.hh"
38 #include "G4LogicalVolume.hh"
39 #include "G4VPhysicalVolume.hh"
40 #include "G4PVPlacement.hh"
41 #include "G4PVParameterised.hh"
42 #include "G4Material.hh"
43 #include "G4Element.hh"
44 #include "G4VisAttributes.hh"
45 #include "G4Colour.hh"
46 #include "G4ios.hh"
47 
50 
51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
54 {
55 }
56 
57 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
59 {
60 }
61 
62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
64 {
65 #ifdef G4VERBOSE
66  G4cout << "DicomRegularDetectorConstruction::ConstructPhantom " << G4endl;
67 #endif
68 
69  //----- Create parameterisation
72 
73  //----- Set voxel dimensions
75 
76  //----- Set number of voxels
78 
79  //----- Set list of materials
80  param->SetMaterials( fMaterials );
81 
82  //----- Set list of material indices: for each voxel it is a number that
83  // correspond to the index of its material in the vector of materials
84  // defined above
85  param->SetMaterialIndices( fMateIDs );
86 
87  //----- Define voxel logical volume
88  G4Box* voxel_solid =
90  G4LogicalVolume* voxel_logic =
91  new G4LogicalVolume(voxel_solid,fMaterials[0],"VoxelLogical",
92  0,0,0);
93  // material is not relevant, it will be changed by the
94  // ComputeMaterial method of the parameterisation
95 
96  voxel_logic->SetVisAttributes(
98 
99  //--- Assign the fContainer volume of the parameterisation
101 
102  //--- Assure yourself that the voxels are completely filling the
103  // fContainer volume
107 
108  //----- The G4PVParameterised object that uses the created parameterisation
109  // should be placed in the fContainer logical volume
110  G4PVParameterised * phantom_phys =
111  new G4PVParameterised("phantom",voxel_logic,fContainer_logic,
112  kXAxis, fNVoxelX*fNVoxelY*fNVoxelZ, param);
113  // if axis is set as kUndefined instead of kXAxis, GEANT4 will
114  // do an smart voxel optimisation
115  // (not needed if G4RegularNavigation is used)
116 
117  //----- Set this physical volume as having a regular structure of type 1,
118  // so that G4RegularNavigation is used
119  phantom_phys->SetRegularStructureId(1); // if not set, G4VoxelNavigation
120  //will be used instead
121 
122  SetScorer(voxel_logic);
123 }