Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/medical/DICOM/src/DicomRegularDetectorConstruction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 //
 27 /// \file DicomRegularDetectorConstruction.cc
 28 /// \brief Implementation of the DicomRegularDetectorConstruction clas
 29 //
 30 // History:
 31 //        Pedro Arce
 32 //
 33 //*******************************************************
 34 
 35 #include "DicomRegularDetectorConstruction.hh"
 36 
 37 #include "DicomPhantomParameterisationColour.hh"
 38 
 39 #include "G4Box.hh"
 40 #include "G4Colour.hh"
 41 #include "G4Element.hh"
 42 #include "G4LogicalVolume.hh"
 43 #include "G4Material.hh"
 44 #include "G4PVParameterised.hh"
 45 #include "G4PVPlacement.hh"
 46 #include "G4VPhysicalVolume.hh"
 47 #include "G4VisAttributes.hh"
 48 #include "G4ios.hh"
 49 #include "globals.hh"
 50 
 51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 52 DicomRegularDetectorConstruction::DicomRegularDetectorConstruction() : DicomDetectorConstruction()
 53 {}
 54 
 55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 56 DicomRegularDetectorConstruction::~DicomRegularDetectorConstruction() {}
 57 
 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 59 void DicomRegularDetectorConstruction::ConstructPhantom()
 60 {
 61 #ifdef G4VERBOSE
 62   G4cout << "DicomRegularDetectorConstruction::ConstructPhantom " << G4endl;
 63 #endif
 64 
 65   //----- Create parameterisation
 66   DicomPhantomParameterisationColour* param = new DicomPhantomParameterisationColour();
 67 
 68   //----- Set voxel dimensions
 69   param->SetVoxelDimensions(fVoxelHalfDimX, fVoxelHalfDimY, fVoxelHalfDimZ);
 70 
 71   //----- Set number of voxels
 72   param->SetNoVoxels(fNoVoxelsX, fNoVoxelsY, fNoVoxelsZ);
 73 
 74   //----- Set list of materials
 75   param->SetMaterials(fMaterials);
 76 
 77   //----- Set list of material indices: for each voxel it is a number that
 78   // correspond to the index of its material in the vector of materials
 79   // defined above
 80   param->SetMaterialIndices(fMateIDs);
 81 
 82   //----- Define voxel logical volume
 83   G4Box* voxel_solid = new G4Box("Voxel", fVoxelHalfDimX, fVoxelHalfDimY, fVoxelHalfDimZ);
 84   G4LogicalVolume* voxel_logic =
 85     new G4LogicalVolume(voxel_solid, fMaterials[0], "VoxelLogical", 0, 0, 0);
 86   // material is not relevant, it will be changed by the
 87   // ComputeMaterial method of the parameterisation
 88 
 89   voxel_logic->SetVisAttributes(new G4VisAttributes(G4VisAttributes::GetInvisible()));
 90 
 91   //--- Assign the fContainer volume of the parameterisation
 92   param->BuildContainerSolid(fContainer_phys);
 93 
 94   //--- Assure yourself that the voxels are completely filling the
 95   // fContainer volume
 96   param->CheckVoxelsFillContainer(fContainer_solid->GetXHalfLength(),
 97                                   fContainer_solid->GetYHalfLength(),
 98                                   fContainer_solid->GetZHalfLength());
 99 
100   //----- The G4PVParameterised object that uses the created parameterisation
101   // should be placed in the fContainer logical volume
102   G4PVParameterised* phantom_phys = new G4PVParameterised(
103     "phantom", voxel_logic, fContainer_logic, kXAxis, fNoVoxelsX * fNoVoxelsY * fNoVoxelsZ, param);
104   // if axis is set as kUndefined instead of kXAxis, GEANT4 will
105   //  do an smart voxel optimisation
106   // (not needed if G4RegularNavigation is used)
107 
108   //----- Set this physical volume as having a regular structure of type 1,
109   // so that G4RegularNavigation is used
110   phantom_phys->SetRegularStructureId(1);  // if not set, G4VoxelNavigation
111   // will be used instead
112 
113   SetScorer(voxel_logic);
114 }
115