Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/iort_therapy/include/IORTDetectorConstruction.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 ]

  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 // This is the *BASIC* version of IORT, a Geant4-based application
 27 // Main Authors: G.Russo(a,b), C.Casarino*(c), G.C. Candiano(c), G.A.P. Cirrone(d), F.Romano(d)
 28 // Contributor Authors: S.Guatelli(e)
 29 // Past Authors: G.Arnetta(c), S.E.Mazzaglia(d)
 30 //    
 31 //   (a) Fondazione Istituto San Raffaele G.Giglio, Cefalù, Italy
 32 //   (b) IBFM-CNR , Segrate (Milano), Italy
 33 //   (c) LATO (Laboratorio di Tecnologie Oncologiche), Cefalù, Italy
 34 //   (d) Laboratori Nazionali del Sud of the INFN, Catania, Italy
 35 //   (e) University of Wollongong, Australia
 36 //
 37 //   *Corresponding author, email to carlo.casarino@polooncologicocefalu.it
 38 //////////////////////////////////////////////////////////////////////////////////////////////
 39 
 40 
 41 #ifndef IORTDetectorConstruction_H
 42 #define IORTDetectorConstruction_H 1
 43 
 44 #include "G4Box.hh"
 45 #include "globals.hh"
 46 #include "G4VisAttributes.hh"
 47 #include "G4LogicalVolume.hh"
 48 #include "G4UnitsTable.hh"
 49 #include "G4Tubs.hh"
 50 
 51 class G4VPhysicalVolume;
 52 class G4LogicalVolume;
 53 class IORTDetectorMessenger;
 54 
 55 class IORTDetectorConstruction 
 56 {
 57 public:
 58 
 59   IORTDetectorConstruction(G4VPhysicalVolume*);
 60 
 61   ~IORTDetectorConstruction();
 62 
 63   //  G4VPhysicalVolume *detectorPhysicalVolume;  aggiunto
 64 
 65 private: 
 66 
 67   void ConstructPhantom();
 68   void ConstructDetector();
 69   //  void ConstructDisc();
 70   void ConstructSensitiveDetector();
 71   void ParametersCheck();
 72 
 73 public: 
 74 // Get detector position relative to WORLD
 75 inline G4ThreeVector GetDetectorToWorldPosition()
 76   {
 77     return phantomPosition + detectorPosition;
 78   }
 79 
 80 /////////////////////////////////////////////////////////////////////////////
 81 // Get displacement between phantom and detector by detector position (center of), phantom (center of) and detector sizes
 82 inline G4ThreeVector GetDetectorToPhantomPosition()
 83 {
 84     return G4ThreeVector(phantomSizeX/2 - detectorSizeX/2 + detectorPosition.getX(),
 85                          phantomSizeY/2 - detectorSizeY/2 + detectorPosition.getY(),
 86                          phantomSizeZ/2 - detectorSizeZ/2 + detectorPosition.getZ()
 87               );
 88 }
 89 
 90 /////////////////////////////////////////////////////////////////////////////
 91 // Calculate (and set) detector position by displacement, phantom and detector sizes
 92 inline void SetDetectorPosition()
 93   {
 94     // Adjust detector position
 95     detectorPosition.setX(detectorToPhantomPosition.getX() - phantomSizeX/2 + detectorSizeX/2);
 96     detectorPosition.setY(detectorToPhantomPosition.getY() - phantomSizeY/2 + detectorSizeY/2);
 97     detectorPosition.setZ(detectorToPhantomPosition.getZ() - phantomSizeZ/2 + detectorSizeZ/2);
 98      
 99     //G4cout << "*************** DetectorToPhantomPosition " << detectorToPhantomPosition/cm << "\n";
100     //G4cout << "*************** DetectorPosition " << detectorPosition/cm << "\n";
101   }
102 /////////////////////////////////////////////////////////////////////////////
103 // Check whether detector is inside phantom
104 inline bool IsInside(G4double detectorX,
105          G4double detectorY,
106          G4double detectorZ,
107          G4double phantomX,
108          G4double phantomY,
109          G4double phantomZ,
110          G4ThreeVector detToPhantomPosition)
111 {
112 // Dimensions check... X Y and Z
113 // Firstly check what dimension we are modifying
114   {
115       if (detectorX > phantomX) 
116      {
117         G4cout << "Error: Detector X dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
118         return false;
119      }
120       if ( (phantomX - detectorX) < detToPhantomPosition.getX()) 
121            {
122         G4cout << "Error: X dimension doesn't fit with detector to phantom relative position" << G4endl;
123         return false;
124            }
125   }
126 
127   {
128       if (detectorY > phantomY) 
129      {
130         G4cout << "Error: Detector Y dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
131         return false;
132      }
133       if ( (phantomY - detectorY) < detToPhantomPosition.getY()) 
134        {
135        G4cout << "Error: Y dimension doesn't fit with detector to phantom relative position" << G4endl;
136        return false;
137        }
138   }      
139 
140   {
141       if (detectorZ > phantomZ) 
142      {
143         G4cout << "Error: Detector Z dimension must be smaller or equal to the correspondent of the phantom" << G4endl;
144         return false;
145      }
146       if ( (phantomZ - detectorZ) < detToPhantomPosition.getZ()) 
147        {
148        G4cout << "Error: Z dimension doesn't fit with detector to phantom relative position" << G4endl;
149        return false;
150        }
151   }
152 
153   return true;
154 }
155 /////////////////////////////////////////////////////////////////////////////
156 
157   G4bool  SetPhantomMaterial(G4String material);
158   void SetVoxelSize(G4double sizeX, G4double sizeY, G4double sizeZ);
159   void SetDetectorSize(G4double sizeX, G4double sizeY, G4double sizeZ);
160   void SetPhantomSize(G4double sizeX, G4double sizeY, G4double sizeZ);
161   void SetPhantomPosition(G4ThreeVector);
162   void SetDetectorToPhantomPosition(G4ThreeVector DetectorToPhantomPosition);
163   void UpdateGeometry();
164   void DeleteDisc();
165   void ConstructDisc();
166   void PrintParameters();
167   G4LogicalVolume* GetDetectorLogicalVolume(){ return detectorLogicalVolume;}
168 
169   G4bool  SetDiscoMaterialIORT(G4String material);
170   void SetOuterRadiusDiscoIORT(G4double outerr);
171   void SetinnerRadiusDiscoIORT(G4double innerr);
172   void SetheightDiscoIORT(G4double height);
173   void SetDiscoXPositionIORT(G4double xpos);
174   void SetDiscoYPositionIORT(G4double ypos);
175   void SetDiscoZPositionIORT(G4double zpos);
176 
177   G4bool  SetDiscoMaterialIORT1(G4String material);
178   void SetOuterRadiusDiscoIORT1(G4double outerr);
179   void SetinnerRadiusDiscoIORT1(G4double innerr);
180   void SetheightDiscoIORT1(G4double height);
181   void SetDiscoXPositionIORT1(G4double xpos);
182 
183   void SetAngleDiscoIORT0(G4double phi0);
184 
185 private:
186 
187   IORTDetectorMessenger* detectorMessenger; 
188 
189   G4VisAttributes* red;
190 
191   G4VPhysicalVolume* motherPhys;
192 
193   G4Box *phantom , *detector;
194   G4LogicalVolume *phantomLogicalVolume, *detectorLogicalVolume; 
195   G4VPhysicalVolume *phantomPhysicalVolume,   *detectorPhysicalVolume;
196   
197   G4double phantomSizeX; 
198   G4double phantomSizeY; 
199   G4double phantomSizeZ;
200 
201   G4double detectorSizeX; 
202   G4double detectorSizeY; 
203   G4double detectorSizeZ;
204 
205   G4ThreeVector phantomPosition, detectorPosition, detectorToPhantomPosition; //  phantom center, detector center, detector to phantom relative position
206 
207   G4Material *phantomMaterial, *detectorMaterial;
208   G4Region* aRegion;
209   
210   //Disco0 IORT
211   G4Tubs* solidDiscoIORT0;
212   G4LogicalVolume* logicDiscoIORT0;
213   G4VPhysicalVolume* physiDiscoIORT0;
214   G4double AngleDiscoIORT0; 
215 
216   // Disco1 IORT
217   G4VisAttributes* white;
218   G4VisAttributes* gray;
219   G4VisAttributes* gray1;
220   G4double innerRadiusDiscoIORT;
221   G4double OuterRadiusDiscoIORT;
222   G4double heightDiscoIORT;
223   G4double DiscoXPositionIORT;
224   G4double DiscoYPositionIORT;
225   G4double DiscoZPositionIORT;
226   G4Tubs* solidDiscoIORT; 
227   G4LogicalVolume* logicDiscoIORT;
228   G4VPhysicalVolume* physiDiscoIORT;
229   G4Material* DiscoMaterialIORT;
230 
231    // Disco2 IORT
232   
233   G4double innerRadiusDiscoIORT1;
234   G4double OuterRadiusDiscoIORT1;
235   G4double heightDiscoIORT1;
236   G4double DiscoXPositionIORT1;
237   G4Tubs* solidDiscoIORT1; 
238   G4LogicalVolume* logicDiscoIORT1;
239   G4VPhysicalVolume* physiDiscoIORT1;
240   G4Material* DiscoMaterialIORT1;
241 };
242 #endif
243 
244 
245 
246