Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/hadrontherapy/include/HadrontherapyDetectorConstruction.hh

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 ]

Diff markup

Differences between /examples/advanced/hadrontherapy/include/HadrontherapyDetectorConstruction.hh (Version 11.3.0) and /examples/advanced/hadrontherapy/include/HadrontherapyDetectorConstruction.hh (Version 10.7)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // Hadrontherapy advanced example for Geant4       26 // Hadrontherapy advanced example for Geant4
 27 // See more at: https://twiki.cern.ch/twiki/bi     27 // See more at: https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesHadrontherapy
 28                                                    28 
 29 #ifndef HadrontherapyDetectorConstruction_H        29 #ifndef HadrontherapyDetectorConstruction_H
 30 #define HadrontherapyDetectorConstruction_H 1      30 #define HadrontherapyDetectorConstruction_H 1
 31                                                    31 
 32 #include "G4Box.hh"                                32 #include "G4Box.hh"
 33 #include "globals.hh"                              33 #include "globals.hh"
 34 #include "G4VisAttributes.hh"                      34 #include "G4VisAttributes.hh"
 35 #include "G4LogicalVolume.hh"                      35 #include "G4LogicalVolume.hh"
 36 #include "G4UnitsTable.hh"                         36 #include "G4UnitsTable.hh"
 37 #include "HadrontherapyDetectorROGeometry.hh"      37 #include "HadrontherapyDetectorROGeometry.hh"
 38                                                    38 
 39 class G4VPhysicalVolume;                           39 class G4VPhysicalVolume;
 40 class G4LogicalVolume;                             40 class G4LogicalVolume;
 41 class G4PVPlacement;                               41 class G4PVPlacement;
 42 class HadrontherapyDetectorROGeometry;             42 class HadrontherapyDetectorROGeometry;
 43 class HadrontherapyDetectorMessenger;              43 class HadrontherapyDetectorMessenger;
 44 class HadrontherapyDetectorSD;                     44 class HadrontherapyDetectorSD;
 45 class HadrontherapyMatrix;                         45 class HadrontherapyMatrix;
 46 class HadrontherapyLet;                            46 class HadrontherapyLet;
 47                                                    47 
 48 class HadrontherapyDetectorConstruction            48 class HadrontherapyDetectorConstruction
 49 {                                                  49 {
 50 public:                                            50 public:
 51                                                    51     
 52     HadrontherapyDetectorConstruction(G4VPhysi     52     HadrontherapyDetectorConstruction(G4VPhysicalVolume*);
 53                                                    53     
 54     ~HadrontherapyDetectorConstruction();          54     ~HadrontherapyDetectorConstruction();
 55                                                    55     
 56 public:                                            56 public:
 57     static HadrontherapyDetectorConstruction*      57     static HadrontherapyDetectorConstruction* GetInstance();
 58     void InitializeDetectorROGeometry(Hadronth     58     void InitializeDetectorROGeometry(HadrontherapyDetectorROGeometry*,
 59                                       G4ThreeV     59                                       G4ThreeVector detectorToWorldPosition);
 60     G4VPhysicalVolume* motherPhys;                 60     G4VPhysicalVolume* motherPhys;
 61     HadrontherapyDetectorSD*         detectorS     61     HadrontherapyDetectorSD*         detectorSD; // Pointer to sensitive detector
 62                                                    62     
 63     //////////////////////////                     63     //////////////////////////
 64     void VirtualLayer(G4bool Varbool);             64     void VirtualLayer(G4bool Varbool);
 65     G4bool NewSource;                              65     G4bool NewSource;
 66     void SetVirtualLayerPosition(G4ThreeVector     66     void SetVirtualLayerPosition(G4ThreeVector);
 67     G4ThreeVector VirtualLayerPosition;            67     G4ThreeVector VirtualLayerPosition;
 68                                                    68     
 69     //////////////////////////                     69     //////////////////////////
 70 private:                                           70 private:
 71                                                    71     
 72     void ConstructPhantom();                       72     void ConstructPhantom();
 73     void ConstructDetector();                      73     void ConstructDetector();
 74     void ParametersCheck();                        74     void ParametersCheck();
 75     void CheckOverlaps();                          75     void CheckOverlaps();
 76                                                    76     
 77 public:                                            77 public:
 78     // Get detector position relative to WORLD     78     // Get detector position relative to WORLD
 79     inline G4ThreeVector GetDetectorToWorldPos     79     inline G4ThreeVector GetDetectorToWorldPosition()
 80     {                                              80     {
 81         return phantomPosition + detectorPosit     81         return phantomPosition + detectorPosition;
 82     }                                              82     }
 83     //////////////////////////////////////////     83     /////////////////////////////////////////////////////////////////////////////
 84     // Get displacement between phantom and de     84     // Get displacement between phantom and detector by detector position (center of), phantom (center of) and detector sizes
 85     inline G4ThreeVector GetDetectorToPhantomP     85     inline G4ThreeVector GetDetectorToPhantomPosition()
 86     {                                              86     {
 87         return G4ThreeVector(phantomSizeX/2 -      87         return G4ThreeVector(phantomSizeX/2 - detectorSizeX/2 + detectorPosition.getX(),
 88                              phantomSizeY/2 -      88                              phantomSizeY/2 - detectorSizeY/2 + detectorPosition.getY(),
 89                              phantomSizeZ/2 -      89                              phantomSizeZ/2 - detectorSizeZ/2 + detectorPosition.getZ()
 90                              );                    90                              );
 91     }                                              91     }
 92                                                    92     
 93     //////////////////////////////////////////     93     /////////////////////////////////////////////////////////////////////////////
 94     // Calculate (and set) detector position b     94     // Calculate (and set) detector position by displacement, phantom and detector sizes
 95     inline void SetDetectorPosition()              95     inline void SetDetectorPosition()
 96     {                                              96     {
 97         // Adjust detector position                97         // Adjust detector position
 98         detectorPosition.setX(detectorToPhanto     98         detectorPosition.setX(detectorToPhantomPosition.getX() - phantomSizeX/2 + detectorSizeX/2);
 99         detectorPosition.setY(detectorToPhanto     99         detectorPosition.setY(detectorToPhantomPosition.getY() - phantomSizeY/2 + detectorSizeY/2);
100         detectorPosition.setZ(detectorToPhanto    100         detectorPosition.setZ(detectorToPhantomPosition.getZ() - phantomSizeZ/2 + detectorSizeZ/2);
101                                                   101         
102                                                   102         
103     }                                             103     }
104     //////////////////////////////////////////    104     /////////////////////////////////////////////////////////////////////////////
105     // Check whether detector is inside phanto    105     // Check whether detector is inside phantom
106     inline bool IsInside(G4double detectorX,      106     inline bool IsInside(G4double detectorX,
107                          G4double detectorY,      107                          G4double detectorY,
108                          G4double detectorZ,      108                          G4double detectorZ,
109                          G4double phantomX,       109                          G4double phantomX,
110                          G4double phantomY,       110                          G4double phantomY,
111                          G4double phantomZ,       111                          G4double phantomZ,
112                          G4ThreeVector pos)       112                          G4ThreeVector pos)
113     {                                             113     {
114         // Dimensions check... X Y and Z          114         // Dimensions check... X Y and Z
115         // Firstly check what dimension we are    115         // Firstly check what dimension we are modifying
116         {                                         116         {
117             if (detectorX > phantomX)             117             if (detectorX > phantomX)
118             {                                     118             {
119                 G4cout << "Error: Detector X d    119                 G4cout << "Error: Detector X dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
120                 return false;                     120                 return false;
121             }                                     121             }
122             if ( (phantomX - detectorX) < pos.    122             if ( (phantomX - detectorX) < pos.getX())
123             {                                     123             {
124                 G4cout << "Error: X dimension     124                 G4cout << "Error: X dimension doesn't fit with detector to phantom relative position" << G4endl;
125                 return false;                     125                 return false;
126             }                                     126             }
127         }                                         127         }
128                                                   128         
129         {                                         129         {
130             if (detectorY > phantomY)             130             if (detectorY > phantomY)
131             {                                     131             {
132                 G4cout << "Error: Detector Y d    132                 G4cout << "Error: Detector Y dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
133                 return false;                     133                 return false;
134             }                                     134             }
135             if ( (phantomY - detectorY) < pos.    135             if ( (phantomY - detectorY) < pos.getY())
136             {                                     136             {
137                 G4cout << "Error: Y dimension     137                 G4cout << "Error: Y dimension doesn't fit with detector to phantom relative position" << G4endl;
138                 return false;                     138                 return false;
139             }                                     139             }
140         }                                         140         }
141                                                   141         
142         {                                         142         {
143             if (detectorZ > phantomZ)             143             if (detectorZ > phantomZ)
144             {                                     144             {
145                 G4cout << "Error: Detector Z d    145                 G4cout << "Error: Detector Z dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
146                 return false;                     146                 return false;
147             }                                     147             }
148             if ( (phantomZ - detectorZ) < pos.    148             if ( (phantomZ - detectorZ) < pos.getZ())
149             {                                     149             {
150                 G4cout << "Error: Z dimension     150                 G4cout << "Error: Z dimension doesn't fit with detector to phantom relative position" << G4endl;
151                 return false;                     151                 return false;
152             }                                     152             }
153         }                                         153         }
154                                                   154         
155         return true;                              155         return true;
156     }                                             156     }
157     //////////////////////////////////////////    157     /////////////////////////////////////////////////////////////////////////////
158                                                   158     
159     G4bool  SetPhantomMaterial(G4String materi    159     G4bool  SetPhantomMaterial(G4String material);
160     void SetVoxelSize(G4double sizeX, G4double    160     void SetVoxelSize(G4double sizeX, G4double sizeY, G4double sizeZ);
161     void SetDetectorSize(G4double sizeX, G4dou    161     void SetDetectorSize(G4double sizeX, G4double sizeY, G4double sizeZ);
162     void SetPhantomSize(G4double sizeX, G4doub    162     void SetPhantomSize(G4double sizeX, G4double sizeY, G4double sizeZ);
163     void SetPhantomPosition(G4ThreeVector);       163     void SetPhantomPosition(G4ThreeVector);
164     void SetDetectorToPhantomPosition(G4ThreeV    164     void SetDetectorToPhantomPosition(G4ThreeVector DetectorToPhantomPosition);
165     void UpdateGeometry();                        165     void UpdateGeometry();
166     void PrintParameters();                       166     void PrintParameters();
167     G4LogicalVolume* GetDetectorLogicalVolume(    167     G4LogicalVolume* GetDetectorLogicalVolume(){ return detectorLogicalVolume;}
168                                                   168     
169 private:                                          169 private:
170     static HadrontherapyDetectorConstruction*     170     static HadrontherapyDetectorConstruction* instance;
171     HadrontherapyDetectorMessenger* detectorMe    171     HadrontherapyDetectorMessenger* detectorMessenger;
172                                                   172     
173     G4VisAttributes* skyBlue;                     173     G4VisAttributes* skyBlue;
174     G4VisAttributes* red;                         174     G4VisAttributes* red;
175                                                   175     
176     HadrontherapyDetectorROGeometry* detectorR    176     HadrontherapyDetectorROGeometry* detectorROGeometry; // Pointer to ROGeometry
177     HadrontherapyMatrix*             matrix;      177     HadrontherapyMatrix*             matrix;
178     HadrontherapyLet*                let;         178     HadrontherapyLet*                let;
179                                                   179     
180     G4Box *phantom , *detector;                   180     G4Box *phantom , *detector;
181     G4LogicalVolume *phantomLogicalVolume, *de    181     G4LogicalVolume *phantomLogicalVolume, *detectorLogicalVolume;
182     G4VPhysicalVolume *phantomPhysicalVolume,     182     G4VPhysicalVolume *phantomPhysicalVolume, *detectorPhysicalVolume;
183                                                   183     
184     G4Box* solidVirtualLayer;                     184     G4Box* solidVirtualLayer;
185     G4LogicalVolume* logicVirtualLayer;           185     G4LogicalVolume* logicVirtualLayer;
186     G4VPhysicalVolume*  physVirtualLayer;         186     G4VPhysicalVolume*  physVirtualLayer;
187                                                   187     
188     G4double phantomSizeX;                        188     G4double phantomSizeX;
189     G4double phantomSizeY;                        189     G4double phantomSizeY;
190     G4double phantomSizeZ;                        190     G4double phantomSizeZ;
191                                                   191     
192     G4double detectorSizeX;                       192     G4double detectorSizeX;
193     G4double detectorSizeY;                       193     G4double detectorSizeY;
194     G4double detectorSizeZ;                       194     G4double detectorSizeZ;
195                                                   195     
196     G4ThreeVector phantomPosition, detectorPos    196     G4ThreeVector phantomPosition, detectorPosition, detectorToPhantomPosition; //  phantom center, detector center, detector to phantom relative position
197                                                   197     
198     G4double sizeOfVoxelAlongX;                   198     G4double sizeOfVoxelAlongX;
199     G4double sizeOfVoxelAlongY;                   199     G4double sizeOfVoxelAlongY;
200     G4double sizeOfVoxelAlongZ;                   200     G4double sizeOfVoxelAlongZ;
201                                                   201     
202     G4int numberOfVoxelsAlongX;                   202     G4int numberOfVoxelsAlongX;
203     G4int numberOfVoxelsAlongY;                   203     G4int numberOfVoxelsAlongY;
204     G4int numberOfVoxelsAlongZ;                   204     G4int numberOfVoxelsAlongZ;
205                                                   205     
206     G4double volumeOfVoxel, massOfVoxel;          206     G4double volumeOfVoxel, massOfVoxel;
207                                                   207     
208     G4Material *phantomMaterial, *detectorMate    208     G4Material *phantomMaterial, *detectorMaterial;
209     G4Region* aRegion;                            209     G4Region* aRegion;
210 };                                                210 };
211 #endif                                            211 #endif
212                                                   212