Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /geant4/examples/advanced/doiPET/include/doiPETDetectorConstruction.hh was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // ********************************************************************
0002 // * License and Disclaimer                                           *
0003 // *                                                                  *
0004 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0005 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0006 // * conditions of the Geant4 Software License,  included in the file *
0007 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0008 // * include a list of copyright holders.                             *
0009 // *                                                                  *
0010 // * Neither the authors of this software system, nor their employing *
0011 // * institutes,nor the agencies providing financial support for this *
0012 // * work  make  any representation or  warranty, express or implied, *
0013 // * regarding  this  software system or assume any liability for its *
0014 // * use.  Please see the license in the file  LICENSE  and URL above *
0015 // * for the full disclaimer and the limitation of liability.         *
0016 // *                                                                  *
0017 // * This  code  implementation is the result of  the  scientific and *
0018 // * technical work of the GEANT4 collaboration.                      *
0019 // * By using,  copying,  modifying or  distributing the software (or *
0020 // * any work based  on the software)  you  agree  to acknowledge its *
0021 // * use  in  resulting  scientific  publications,  and indicate your *
0022 // * acceptance of all terms of the Geant4 Software license.          *
0023 // ********************************************************************
0024 
0025 //GEANT4 - Depth-of-Interaction enabled Positron emission tomography (PET) advanced example 
0026 
0027 //Contributors
0028 
0029 // Abdella M. Ahmed (1, 2), Andrew Chacon (1, 2), Harley Rutherford (1, 2),
0030 // Hideaki Tashima (3), Go Akamatsu (3), Akram Mohammadi (3), Eiji Yoshida (3), Taiga Yamaya (3)
0031 // Susanna Guatelli (2), and Mitra Safavi-Naeini (1, 2)
0032 
0033 // (1) Australian Nuclear Science and Technology Organisation, Australia
0034 // (2) University of Wollongong, Australia
0035 // (3) National Institute of Radiological Sciences, Japan
0036 
0037 
0038 
0039 #ifndef doiPETDetectorConstruction_h
0040 #define doiPETDetectorConstruction_h 1
0041 
0042 #include "G4VUserDetectorConstruction.hh"
0043 #include "globals.hh"
0044 #include "G4UnitsTable.hh"
0045 #include "G4Element.hh"
0046 #include "doiPETGlobalParameters.hh"
0047 
0048 class G4Material;
0049 class G4VPhysicalVolume;
0050 class G4LogicalVolume;
0051 //
0052 class doiPETAnalysis;
0053 class doiPETDetectorConstructionMessenger;
0054 
0055 /// Detector construction class to define materials and geometry.
0056 ///
0057 /// Crystals are positioned in Ring, with an appropriate rotation matrix. 
0058 /// Several copies of Ring are placed in the full detector.
0059 
0060 class doiPETDetectorConstruction : public G4VUserDetectorConstruction
0061 {
0062 public:
0063   doiPETDetectorConstruction();
0064   virtual ~doiPETDetectorConstruction();
0065 
0066 public:
0067   virtual G4VPhysicalVolume* Construct();
0068 
0069   void ConstructPhantom(G4LogicalVolume*);
0070   void ChangePhantom(G4String choice);
0071   void SetPhantomPosition(G4ThreeVector);
0072   void SetPhantomRadius(G4double);
0073   void SetPhantomLength(G4double);
0074   void SetNumberOfSleeves(G4int);
0075 
0076 
0077 private:
0078   void DefineMaterials();
0079   doiPETDetectorConstructionMessenger* fDetectorMessenger;
0080   doiPETAnalysis* pAnalysis;
0081 
0082   G4LogicalVolume* phantom_logicalV;
0083   G4VPhysicalVolume* phantom_physicalV;
0084   //G4LogicalVolume* gelatin_logicalV;
0085   //G4VPhysicalVolume* gelatin_physicalV;
0086 
0087   //world
0088   G4LogicalVolume* world_logicalV;
0089   G4VPhysicalVolume* world_physicalV;
0090 
0091   //detector block
0092   G4LogicalVolume* blockDetector_logicalV;
0093   G4VPhysicalVolume* blockDetector_physicalV;
0094 
0095   //air volume to fill the detector block
0096   G4LogicalVolume* airBox_logicalV;
0097   G4VPhysicalVolume* airBox_physicalV;
0098 
0099   //crystals
0100   G4LogicalVolume* crystal_logicalV;
0101   G4VPhysicalVolume* crystal_physicalV;
0102 
0103 
0104   //water
0105   G4LogicalVolume* water_logicalV;
0106   G4VPhysicalVolume* water_physicalV;
0107 
0108   //lung
0109   G4LogicalVolume* lung_logicalV;
0110   G4VPhysicalVolume* lung_physicalV;
0111 
0112   //test line phantom
0113   G4LogicalVolume* test_logicalV;
0114   G4VPhysicalVolume* test_physicalV;
0115 
0116   G4LogicalVolume* lung_logicalV_PMMA;
0117   G4VPhysicalVolume* lung_physicalVPMMA;
0118 
0119   //cold regions
0120   //G4LogicalVolume* coldRegion_logicalV;
0121   //G4VPhysicalVolume* coldRegion_physicalV;
0122 
0123   //
0124   //Surrounding PMMA for hot sphere
0125   G4LogicalVolume* hotSpherePMMA_logicalV;
0126   G4VPhysicalVolume* hotSpherePMMA_physicalV;
0127 
0128   //hot water phantom (activity is distributed)
0129   G4LogicalVolume* hotSphereWater_logicalV;
0130   G4VPhysicalVolume* hotSphereWater_physicalV;
0131 
0132   //surrounding PMMA cold sphere
0133   G4LogicalVolume* coldSpherePMMA_logicalV;
0134   G4VPhysicalVolume* coldSpherePMMA_physicalV;
0135 
0136   //cold Water phantom in the cold PMMA sphere 
0137   G4LogicalVolume* coldSphereWater_logicalV;
0138   G4VPhysicalVolume* coldSphereWater_physicalV;
0139 
0140   //fillable polyethylene phantom for sensitivity
0141   G4LogicalVolume* phantomPE_logicalV;
0142   G4VPhysicalVolume* phantomPE_physicalV;
0143 
0144   //Image quality phantom for small animal NEMA NU-4
0145   G4LogicalVolume* waterPhantom_logicalV;
0146   G4VPhysicalVolume* WaterPhantom_physicalV;
0147 
0148   G4LogicalVolume* rod_phantom_logicalV;
0149   G4VPhysicalVolume* rod_phantom_physicalV;
0150 
0151   G4LogicalVolume* chamberPMMA_logicalV;
0152   G4VPhysicalVolume* chamberPMMA_physicalV;
0153 
0154   //
0155   G4LogicalVolume* chamberWater_logicalV;
0156   G4VPhysicalVolume* chamberWater_physicalV;
0157 
0158   //
0159   G4LogicalVolume* chamberAir_logicalV;
0160   G4VPhysicalVolume* chamberAir_physicalV;
0161 
0162 
0163   //Dimension of the sphere
0164   G4double spherePositionX, spherePositionY; //, spherePositionZ;
0165   G4double sphereDiameter;
0166   G4double distanceFromCenter;
0167   G4int numberOfSpheres;
0168   G4double sphereWallThickness;
0169   G4double zOffsetSpherePhantom;
0170 
0171   G4String PhantomType;
0172 
0173   //materials
0174   G4Material* air;
0175   G4Material* pmma;
0176   G4Material* water;
0177   G4Material* polyethylene;
0178   G4Material* polyethylene_NEMA;
0179   //G4Material* inflatedLung;
0180   G4Material* polystyrene;
0181   G4Material* Aluminum;
0182 
0183   //elements for GSO
0184   G4Element*  O;
0185   G4Element* Si;
0186   G4Element* Gd;
0187   G4Material* GSO;
0188 
0189   G4Material* crystalMaterial;
0190   //G4Material* phantomMaterial;
0191 
0192   G4bool  fCheckOverlaps;
0193   G4bool isotopes;
0194 
0195 
0196   //size of world
0197   G4double worldSizeX;
0198   G4double worldSizeY;
0199   G4double worldSizeZ;
0200 
0201 
0202   //The following is moved to doiPETGlobalParameters.hh
0203   //G4int numberOfCrystal_DOI;
0204   //G4int numberOfCrystal_tangential;
0205   //G4int numberOfCrystal_axial;
0206 
0207   ////
0208   //G4double sizeOfCrystal_DOI; 
0209   //G4double sizeOfCrystal_tangential;
0210   //G4double sizeOfCrystal_axial;
0211 
0212   ////
0213   //G4double crystalGap_DOI;
0214   //G4double crystalGap_tangential;
0215   //G4double crystalGap_axial;
0216 
0217   G4double sizeOfAirBox_DOI;
0218   G4double sizeOfAirBox_axial;
0219   G4double sizeOfAirBox_tangential;
0220 
0221 
0222   G4double sizeOfBlockDetector_DOI;
0223   G4double sizeOfBlockDetector_axial;
0224   G4double sizeOfBlockDetector_tangential;
0225 
0226   //G4double AluminumCoverThickness;
0227 
0228 
0229   //G4int numberOfPETDetector;
0230   //G4int numberOfRings;
0231 
0232 
0233   //G4double scannerRadius;
0234   G4double thetaDetector; //The azimuthal angle for arranging the detector in the PET ring 
0235   //G4double ringGap;
0236   G4int blockIndex;
0237   //G4int AlCase_Index;
0238   G4int crystalIndex;
0239 
0240   //detector position
0241   G4double detectorPositionX;
0242   G4double detectorPositionY;
0243   G4double detectorPositionZ;
0244 
0245   //crystal position
0246   G4double crystalPositionX; 
0247   G4double crystalPositionY;
0248   G4double crystalPositionZ;
0249 
0250 
0251 
0252   G4ThreeVector phantomPosition;
0253 
0254   //
0255   G4double phantomRadius;
0256   G4double phantomLength;
0257 
0258   //Phantom dimension for rectangular box (placed for therapy study)
0259   //G4double phantomSizeX, phantomSizeY, phantomSizeZ;
0260 
0261   //the following is to make the body phantom 
0262   G4double yOffsetBodyPhantom;
0263   G4double zOffsetBodyPhantom;
0264   G4double lengthOfBodyPhantom; //Interior length ( = 180m mm) + wallthickness (= 3mm)
0265   G4double radiusOfBodyPhantom;
0266   G4double wallThicknessOfBodyPhantom;
0267   G4double radiusOfLungPhantom;
0268 
0269   //Test phantom defnition. The phantom has the same as that that of NECR phantom except
0270   G4double hieghtOfTestPhantom; 
0271   G4double diameterOfTestPhantom;
0272 
0273   //To the cylindrical phantom to make the body phantom
0274   G4double radiusOfSmallcyl;
0275   G4double boxWidth;
0276   G4double boxHeight;
0277 
0278 
0279   //Image quality phantom for small animals
0280   G4double waterPhantomRadius;
0281   G4double waterPhantomLength;
0282 
0283   G4double rodPhantomLength;
0284   G4double rodDiameter;
0285   G4int numberOfRods;
0286 
0287   //Declare position for the rod phantoms
0288   G4double rodPositionX, rodPositionY, rodPositionZ;
0289 
0290   //Declare position for cold region chanmbers
0291   G4double chamberPositionX, chamberPositionY, chamberPositionZ;
0292   G4double chamberPhantomLength;
0293   G4double chamberDiameter;
0294   G4double wallThicknessOfChamber;
0295 
0296   //Declare the number of concentric (Al) sleeves
0297   G4int numOfSleeves;
0298 };
0299 
0300 /////////////////////////////////////////////////////////////////////////////////////////
0301 
0302 #endif