Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/xray_fluorescence/src/XrayFluoPlaneDetectorConstruction.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 ]

Diff markup

Differences between /examples/advanced/xray_fluorescence/src/XrayFluoPlaneDetectorConstruction.cc (Version 11.3.0) and /examples/advanced/xray_fluorescence/src/XrayFluoPlaneDetectorConstruction.cc (Version 10.6)


  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 //                                                 26 //
 27 //                                                 27 //
 28 // Author: Alfonso Mantero (Alfonso.Mantero@ge     28 // Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
 29 //                                                 29 //
 30 // History:                                        30 // History:
 31 // -----------                                     31 // -----------
 32 // 29 aug 2003 Alfonso Mantero Created             32 // 29 aug 2003 Alfonso Mantero Created
 33 // -------------------------------------------     33 // -------------------------------------------------------------------
 34                                                    34 
 35 #include "XrayFluoPlaneDetectorConstruction.hh     35 #include "XrayFluoPlaneDetectorConstruction.hh"
 36 #include "XrayFluoPlaneDetectorMessenger.hh"       36 #include "XrayFluoPlaneDetectorMessenger.hh"
 37 #include "XrayFluoSD.hh"                           37 #include "XrayFluoSD.hh"
 38 #include "XrayFluoNistMaterials.hh"                38 #include "XrayFluoNistMaterials.hh"
 39 #include "G4PhysicalConstants.hh"                  39 #include "G4PhysicalConstants.hh"
 40 #include "G4SystemOfUnits.hh"                      40 #include "G4SystemOfUnits.hh"
 41 #include "G4Material.hh"                           41 #include "G4Material.hh"
 42 #include "G4ThreeVector.hh"                        42 #include "G4ThreeVector.hh"
 43 #include "G4Box.hh"                                43 #include "G4Box.hh"
 44 #include "G4Sphere.hh"                             44 #include "G4Sphere.hh"
 45 #include "G4LogicalVolume.hh"                      45 #include "G4LogicalVolume.hh"
 46 #include "G4PVPlacement.hh"                        46 #include "G4PVPlacement.hh"
 47 #include "G4TransportationManager.hh"              47 #include "G4TransportationManager.hh"
 48 #include "G4SDManager.hh"                          48 #include "G4SDManager.hh"
 49 #include "G4RunManager.hh"                         49 #include "G4RunManager.hh"
 50 #include "G4VisAttributes.hh"                      50 #include "G4VisAttributes.hh"
 51 #include "G4Colour.hh"                             51 #include "G4Colour.hh"
 52 #include "G4PVReplica.hh"                          52 #include "G4PVReplica.hh"
 53 #include "G4UserLimits.hh"                         53 #include "G4UserLimits.hh"
 54 #include "G4GeometryManager.hh"                    54 #include "G4GeometryManager.hh"
 55 #include "G4PhysicalVolumeStore.hh"                55 #include "G4PhysicalVolumeStore.hh"
 56 #include "G4LogicalVolumeStore.hh"                 56 #include "G4LogicalVolumeStore.hh"
 57 #include "G4SolidStore.hh"                         57 #include "G4SolidStore.hh"
 58 #include "G4SDManager.hh"                          58 #include "G4SDManager.hh"
 59                                                    59 
 60 //....oooOO0OOooo........oooOO0OOooo........oo     60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 61                                                    61 
 62                                                    62 
 63 XrayFluoPlaneDetectorConstruction::XrayFluoPla     63 XrayFluoPlaneDetectorConstruction::XrayFluoPlaneDetectorConstruction()
 64   : detectorType(0),planeGranularity(false), D     64   : detectorType(0),planeGranularity(false), DeviceSizeX(0),
 65     DeviceSizeY(0),DeviceThickness(0),             65     DeviceSizeY(0),DeviceThickness(0),
 66     solidWorld(0),logicWorld(0),physiWorld(0),     66     solidWorld(0),logicWorld(0),physiWorld(0),
 67     solidHPGe(0),logicHPGe(0),physiHPGe(0),        67     solidHPGe(0),logicHPGe(0),physiHPGe(0),
 68     solidScreen(0),logicScreen(0),physiScreen(     68     solidScreen(0),logicScreen(0),physiScreen(0),
 69     solidPlane (0),logicPlane(0),physiPlane (0     69     solidPlane (0),logicPlane(0),physiPlane (0),
 70     solidOhmicPos(0),logicOhmicPos(0), physiOh     70     solidOhmicPos(0),logicOhmicPos(0), physiOhmicPos(0),
 71     solidOhmicNeg(0),logicOhmicNeg(0), physiOh     71     solidOhmicNeg(0),logicOhmicNeg(0), physiOhmicNeg(0),
 72     solidPixel(0),logicPixel(0), physiPixel(0)     72     solidPixel(0),logicPixel(0), physiPixel(0),
 73     screenMaterial(0),OhmicPosMaterial(0), Ohm     73     screenMaterial(0),OhmicPosMaterial(0), OhmicNegMaterial(0),
 74     pixelMaterial(0),planeMaterial(0),             74     pixelMaterial(0),planeMaterial(0),
 75     defaultMaterial(0),HPGeSD(0)                   75     defaultMaterial(0),HPGeSD(0)
 76                                                    76   
 77 {                                                  77 { 
 78   materials = XrayFluoNistMaterials::GetInstan     78   materials = XrayFluoNistMaterials::GetInstance();
 79                                                    79 
 80   DefineDefaultMaterials();                        80   DefineDefaultMaterials();
 81                                                    81 
 82   NbOfPixelRows     =  1; // should be 1           82   NbOfPixelRows     =  1; // should be 1
 83   NbOfPixelColumns  =  1; // should be 1           83   NbOfPixelColumns  =  1; // should be 1
 84   NbOfPixels        =  NbOfPixelRows*NbOfPixel     84   NbOfPixels        =  NbOfPixelRows*NbOfPixelColumns;
 85   PixelSizeXY       = 5 * cm; // should be 5       85   PixelSizeXY       = 5 * cm; // should be 5
 86   PixelThickness = 3.5 * mm; //changed should      86   PixelThickness = 3.5 * mm; //changed should be 3.5 mm
 87                                                    87 
 88   G4cout << "PixelThickness(mm): "<< PixelThic     88   G4cout << "PixelThickness(mm): "<< PixelThickness/mm << G4endl;
 89   G4cout << "PixelSizeXY(cm): "<< PixelSizeXY/     89   G4cout << "PixelSizeXY(cm): "<< PixelSizeXY/cm << G4endl;
 90                                                    90 
 91   ContactSizeXY  = 5 * cm; //should be the sam     91   ContactSizeXY  = 5 * cm; //should be the same as pixelSizeXY
 92   planeThickness = 5 * cm;                         92   planeThickness = 5 * cm;
 93   planeSizeXY    = 5. * m;                         93   planeSizeXY    = 5. * m;
 94                                                    94 
 95   OhmicNegThickness = 0.005*mm;                    95   OhmicNegThickness = 0.005*mm;
 96   OhmicPosThickness = 0.005*mm;                    96   OhmicPosThickness = 0.005*mm;
 97                                                    97 
 98   screenThickness = 5 * mm;                        98   screenThickness = 5 * mm;
 99                                                    99 
100   ThetaHPGe = 0. * deg;                           100   ThetaHPGe = 0. * deg;
101   PhiHPGe = 0. * deg;                             101   PhiHPGe = 0. * deg;
102                                                   102 
103                                                   103 
104   DistDe = 0.5 * m;                               104   DistDe = 0.5 * m;
105                                                   105 
106   distScreen = DistDe + (screenThickness+Pixel    106   distScreen = DistDe + (screenThickness+PixelThickness)/2+OhmicPosThickness ;
107                                                   107 
108   grainDia = 1 * mm;                              108   grainDia = 1 * mm;
109                                                   109 
110                                                   110 
111   PixelCopyNb=0;                                  111   PixelCopyNb=0;
112   grainCopyNb=0;                                  112   grainCopyNb=0;
113   G4String defaultDetectorType = "sili";          113   G4String defaultDetectorType = "sili";
114   ComputeApparateParameters();                    114   ComputeApparateParameters();
115   SetDetectorType(defaultDetectorType);           115   SetDetectorType(defaultDetectorType);
116                                                   116   
117   // create commands for interactive definitio    117   // create commands for interactive definition of the apparate
118                                                   118   
119   detectorMessenger = new XrayFluoPlaneDetecto    119   detectorMessenger = new XrayFluoPlaneDetectorMessenger(this);
120   G4cout << "XrayFluoPlaneDetectorConstruction    120   G4cout << "XrayFluoPlaneDetectorConstruction created" << G4endl;
121 }                                                 121 }
122 //....oooOO0OOooo........oooOO0OOooo........oo    122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
123                                                   123 
124                                                   124 
125 XrayFluoPlaneDetectorConstruction* XrayFluoPla    125 XrayFluoPlaneDetectorConstruction* XrayFluoPlaneDetectorConstruction::instance = 0;
126                                                   126 
127 XrayFluoPlaneDetectorConstruction* XrayFluoPla    127 XrayFluoPlaneDetectorConstruction* XrayFluoPlaneDetectorConstruction::GetInstance()
128 {                                                 128 {
129   if (instance == 0)                              129   if (instance == 0)
130     {                                             130     {
131       instance = new XrayFluoPlaneDetectorCons    131       instance = new XrayFluoPlaneDetectorConstruction;
132                                                   132      
133     }                                             133     }
134   return instance;                                134   return instance;
135 }                                                 135 }
136                                                   136 
137 void XrayFluoPlaneDetectorConstruction::SetDet    137 void XrayFluoPlaneDetectorConstruction::SetDetectorType(G4String type)
138 {                                                 138 {
139                                                   139 
140   if (type=="sili")                               140   if (type=="sili")
141     {                                             141     {
142       detectorType = XrayFluoSiLiDetectorType:    142       detectorType = XrayFluoSiLiDetectorType::GetInstance();
143     }                                             143     }
144    else if (type=="hpge")                         144    else if (type=="hpge")
145      {                                            145      {
146        detectorType = XrayFluoHPGeDetectorType    146        detectorType = XrayFluoHPGeDetectorType::GetInstance();
147     }                                             147     }
148   else                                            148   else 
149     {                                             149     {
150       G4ExceptionDescription execp;               150       G4ExceptionDescription execp;
151       execp << type + "detector type unknown";    151       execp << type + "detector type unknown";
152       G4Exception("XrayFluoPlaneDetectorConstr    152       G4Exception("XrayFluoPlaneDetectorConstruction::SetDetectorType()","example-xray_fluorescence03",
153     FatalException, execp);                       153     FatalException, execp);
154     }                                             154     }
155 }                                                 155 }
156                                                   156 
157 //....oooOO0OOooo........oooOO0OOooo........oo    157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
158                                                   158 
159 XrayFluoVDetectorType* XrayFluoPlaneDetectorCo    159 XrayFluoVDetectorType* XrayFluoPlaneDetectorConstruction::GetDetectorType() const 
160 {                                                 160 {
161   return detectorType;                            161   return detectorType;
162 }                                                 162 }
163                                                   163 
164 //....oooOO0OOooo........oooOO0OOooo........oo    164 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
165                                                   165 
166 XrayFluoPlaneDetectorConstruction::~XrayFluoPl    166 XrayFluoPlaneDetectorConstruction::~XrayFluoPlaneDetectorConstruction()
167                                                   167 
168 {                                                 168 { 
169   delete detectorMessenger;                       169   delete detectorMessenger;
170   delete detectorType;                            170   delete detectorType;
171   G4cout << "XrayFluoPlaneDetectorConstruction    171   G4cout << "XrayFluoPlaneDetectorConstruction deleted" << G4endl;
172 }                                                 172 }
173                                                   173 
174 //....oooOO0OOooo........oooOO0OOooo........oo    174 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
175                                                   175 
176 G4VPhysicalVolume* XrayFluoPlaneDetectorConstr    176 G4VPhysicalVolume* XrayFluoPlaneDetectorConstruction::Construct()
177 {                                                 177 {
178   return ConstructApparate();                     178   return ConstructApparate();
179 }                                                 179 }
180 //....oooOO0OOooo........oooOO0OOooo........oo    180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
181                                                   181 
182 void XrayFluoPlaneDetectorConstruction::Define    182 void XrayFluoPlaneDetectorConstruction::DefineDefaultMaterials()
183 {                                                 183 {
184                                                   184 
185                                                   185 
186   //define materials of the apparate              186   //define materials of the apparate
187                                                   187 
188   planeMaterial = materials->GetMaterial("Anor    188   planeMaterial = materials->GetMaterial("Anorthosite");
189   screenMaterial = materials->GetMaterial("G4_    189   screenMaterial = materials->GetMaterial("G4_Pb");
190   pixelMaterial = materials->GetMaterial("G4_S    190   pixelMaterial = materials->GetMaterial("G4_Si");
191   OhmicPosMaterial = materials->GetMaterial("G    191   OhmicPosMaterial = materials->GetMaterial("G4_Cu");
192   OhmicNegMaterial = materials->GetMaterial("G    192   OhmicNegMaterial = materials->GetMaterial("G4_Pb");
193   defaultMaterial = materials->GetMaterial("G4    193   defaultMaterial = materials->GetMaterial("G4_Galactic");
194 }                                                 194 }
195                                                   195 
196 //....oooOO0OOooo........oooOO0OOooo........oo    196 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 
197                                                   197 
198 G4VPhysicalVolume* XrayFluoPlaneDetectorConstr    198 G4VPhysicalVolume* XrayFluoPlaneDetectorConstruction::ConstructApparate()
199 {                                                 199 {
200   // complete the apparate parameters definiti    200   // complete the apparate parameters definition 
201                                                   201   
202   //ComputeApparateParameters();                  202   //ComputeApparateParameters();
203                                                   203   
204   //world                                         204   //world
205                                                   205   
206   solidWorld = new G4Box("World",                 206   solidWorld = new G4Box("World",                   //its name
207        WorldSizeXY/2,WorldSizeXY/2,WorldSizeZ/    207        WorldSizeXY/2,WorldSizeXY/2,WorldSizeZ/2); //its size
208                                                   208   
209   logicWorld = new G4LogicalVolume(solidWorld,    209   logicWorld = new G4LogicalVolume(solidWorld,    //its solid
210                                    defaultMate    210                                    defaultMaterial, //its material
211                                    "World");      211                                    "World");    //its name
212   physiWorld = new G4PVPlacement(0,     //no r    212   physiWorld = new G4PVPlacement(0,     //no rotation
213          G4ThreeVector(), //at (0,0,0)            213          G4ThreeVector(), //at (0,0,0)
214          "World",   //its name                    214          "World",   //its name
215          logicWorld,    //its logical volume      215          logicWorld,    //its logical volume
216          0,     //its mother  volume              216          0,     //its mother  volume
217          false,     //no boolean operation        217          false,     //no boolean operation
218          0);      //copy number                   218          0);      //copy number
219                                                   219  
220   //detector                                      220   //detector
221                                                   221   
222   solidHPGe = 0;  physiHPGe = 0;  logicHPGe=0;    222   solidHPGe = 0;  physiHPGe = 0;  logicHPGe=0;
223   solidPixel=0; logicPixel=0; physiPixel=0;       223   solidPixel=0; logicPixel=0; physiPixel=0;
224                                                   224   
225   if (DeviceThickness > 0.)                       225   if (DeviceThickness > 0.)  
226     {                                             226     {
227       solidHPGe = new G4Box("HPGeDetector",       227       solidHPGe = new G4Box("HPGeDetector",   //its name
228           DeviceSizeX/2,DeviceSizeY/2,DeviceTh    228           DeviceSizeX/2,DeviceSizeY/2,DeviceThickness/2);//size
229                                                   229       
230                                                   230       
231       logicHPGe = new G4LogicalVolume(solidHPG    231       logicHPGe = new G4LogicalVolume(solidHPGe,  //its solid
232               defaultMaterial,  //its material    232               defaultMaterial,  //its material 
233               "HPGeDetector");  //its name        233               "HPGeDetector");  //its name
234                                                   234       
235       zRotPhiHPGe.rotateX(PhiHPGe);               235       zRotPhiHPGe.rotateX(PhiHPGe);
236       G4double x,y,z;                             236       G4double x,y,z;
237                                                   237 
238       z = -1. * DistDe; //* std::cos(ThetaHPGe    238       z = -1. * DistDe; //* std::cos(ThetaHPGe);
239       y = 0.*cm; //distScreen * std::sin(Theta    239       y = 0.*cm; //distScreen * std::sin(ThetaHPGe);
240       x = 0.*cm;                                  240       x = 0.*cm;
241                                                   241 
242       physiHPGe = new G4PVPlacement(G4Transfor    242       physiHPGe = new G4PVPlacement(G4Transform3D(zRotPhiHPGe,G4ThreeVector(x,y,z)), 
243             "HPGeDetector", //its name            243             "HPGeDetector", //its name
244             logicHPGe,  //its logical volume      244             logicHPGe,  //its logical volume
245             physiWorld, //its mother  volume      245             physiWorld, //its mother  volume
246             false,    //no boolean operation      246             false,    //no boolean operation
247             0);   //copy number                   247             0);   //copy number
248     }                                             248     }
249   // Pixel                                        249   // Pixel
250                                                   250   
251                                                   251 
252                                                   252 
253                                                   253 
254   for ( G4int j=0; j < NbOfPixelColumns ; j++     254   for ( G4int j=0; j < NbOfPixelColumns ; j++ )
255     { for ( G4int i=0; i < NbOfPixelRows ; i++    255     { for ( G4int i=0; i < NbOfPixelRows ; i++ )
256       {                                           256       { 
257   solidPixel=0; logicPixel=0;   physiPixel=0;     257   solidPixel=0; logicPixel=0;   physiPixel=0;
258   if (PixelThickness > 0.)                        258   if (PixelThickness > 0.)
259     solidPixel = new G4Box("Pixel",               259     solidPixel = new G4Box("Pixel",     
260          PixelSizeXY/2,PixelSizeXY/2, PixelThi    260          PixelSizeXY/2,PixelSizeXY/2, PixelThickness/2);
261                                                   261   
262   logicPixel = new G4LogicalVolume(solidPixel,    262   logicPixel = new G4LogicalVolume(solidPixel,  
263            pixelMaterial, //its material          263            pixelMaterial, //its material
264            "Pixel");          //its name          264            "Pixel");          //its name
265                                                   265 
266   /*                                              266   /*
267   zRotPhiHPGe.rotateX(PhiHPGe);                   267   zRotPhiHPGe.rotateX(PhiHPGe);
268   G4double x,y,z;                                 268   G4double x,y,z;
269   z = DistDe * std::cos(ThetaHPGe);               269   z = DistDe * std::cos(ThetaHPGe);
270   y =DistDe * std::sin(ThetaHPGe);                270   y =DistDe * std::sin(ThetaHPGe);
271   x = 0.*cm;*/                                    271   x = 0.*cm;*/ 
272   physiPixel = new G4PVPlacement(0,               272   physiPixel = new G4PVPlacement(0,        
273                G4ThreeVector(0,                   273                G4ThreeVector(0,
274                  i*PixelSizeXY,                   274                  i*PixelSizeXY, 
275                  j*PixelSizeXY ),                 275                  j*PixelSizeXY ),
276                "Pixel",                           276                "Pixel",  
277                logicPixel,   //its logical vol    277                logicPixel,   //its logical volume
278                physiHPGe, //its mother  volume    278                physiHPGe, //its mother  volume
279                false,  //no boolean operation     279                false,  //no boolean operation
280                PixelCopyNb);//copy number         280                PixelCopyNb);//copy number
281                                                   281 
282                                                   282 
283                                                   283 
284                                                   284   
285                                                   285 
286                                                   286   
287   // OhmicNeg                                     287   // OhmicNeg
288                                                   288   
289   solidOhmicNeg=0; logicOhmicNeg=0; physiOhmic    289   solidOhmicNeg=0; logicOhmicNeg=0; physiOhmicNeg=0;  
290                                                   290   
291   if (OhmicNegThickness > 0.)                     291   if (OhmicNegThickness > 0.) 
292     { solidOhmicNeg = new G4Box("OhmicNeg",       292     { solidOhmicNeg = new G4Box("OhmicNeg",   //its name
293               PixelSizeXY/2,PixelSizeXY/2,Ohmi    293               PixelSizeXY/2,PixelSizeXY/2,OhmicNegThickness/2); 
294                                                   294     
295     logicOhmicNeg = new G4LogicalVolume(solidO    295     logicOhmicNeg = new G4LogicalVolume(solidOhmicNeg,    //its solid
296                 OhmicNegMaterial, //its materi    296                 OhmicNegMaterial, //its material
297                 "OhmicNeg");      //its name      297                 "OhmicNeg");      //its name
298                                                   298     
299     physiOhmicNeg = new G4PVPlacement(0,          299     physiOhmicNeg = new G4PVPlacement(0,
300               G4ThreeVector                       300               G4ThreeVector
301               (0.,                                301               (0.,
302                0.,                                302                0.,
303                 (PixelThickness+OhmicNegThickn    303                 (PixelThickness+OhmicNegThickness)/2),
304               "OhmicNeg",        //its name       304               "OhmicNeg",        //its name
305               logicOhmicNeg,     //its logical    305               logicOhmicNeg,     //its logical volume
306               physiHPGe,        //its mother      306               physiHPGe,        //its mother
307               false,             //no boulean     307               false,             //no boulean operat
308               PixelCopyNb);                //c    308               PixelCopyNb);                //copy number
309                                                   309     
310     }                                             310     }
311   // OhmicPos                                     311   // OhmicPos
312   solidOhmicPos=0; logicOhmicPos=0; physiOhmic    312   solidOhmicPos=0; logicOhmicPos=0; physiOhmicPos=0;  
313                                                   313   
314   if (OhmicPosThickness > 0.)                     314   if (OhmicPosThickness > 0.) 
315     { solidOhmicPos = new G4Box("OhmicPos",       315     { solidOhmicPos = new G4Box("OhmicPos",   //its name
316               PixelSizeXY/2,PixelSizeXY/2,Ohmi    316               PixelSizeXY/2,PixelSizeXY/2,OhmicPosThickness/2); 
317                                                   317     
318     logicOhmicPos = new G4LogicalVolume(solidO    318     logicOhmicPos = new G4LogicalVolume(solidOhmicPos,    //its solid
319                 OhmicPosMaterial, //its materi    319                 OhmicPosMaterial, //its material
320                 "OhmicPos");      //its name      320                 "OhmicPos");      //its name
321                                                   321     
322     physiOhmicPos = new G4PVPlacement(0,          322     physiOhmicPos = new G4PVPlacement(0,  
323               G4ThreeVector(0.,                   323               G4ThreeVector(0.,
324                 0.,                               324                 0.,
325                 (-PixelThickness-OhmicPosThick    325                 (-PixelThickness-OhmicPosThickness)/2),  
326               "OhmicPos",                         326               "OhmicPos",  
327               logicOhmicPos,                      327               logicOhmicPos,
328               physiHPGe,                          328               physiHPGe,  
329               false,                              329               false,     
330               PixelCopyNb);                       330               PixelCopyNb); 
331                                                   331     
332     }                                             332     }
333                                                   333   
334   PixelCopyNb += PixelCopyNb;                     334   PixelCopyNb += PixelCopyNb; 
335   G4cout << "PixelCopyNb: " << PixelCopyNb <<     335   G4cout << "PixelCopyNb: " << PixelCopyNb << G4endl;
336       }                                           336       }
337                                                   337 
338     }                                             338     }
339                                                   339   
340   // Screen                                       340   // Screen
341                                                   341 
342   if (DeviceThickness > 0.)                       342   if (DeviceThickness > 0.)  
343     {                                             343     {
344       solidScreen = new G4Box("DetectorScreen"    344       solidScreen = new G4Box("DetectorScreen",   //its name
345           screenSizeXY/2,screenSizeXY/2,screen    345           screenSizeXY/2,screenSizeXY/2,screenThickness/2);//size
346                                                   346       
347                                                   347       
348       logicScreen = new G4LogicalVolume(solidS    348       logicScreen = new G4LogicalVolume(solidScreen,  //its solid
349               defaultMaterial,  //its material    349               defaultMaterial,  //its material 
350               "DetectorScreen");  //its name      350               "DetectorScreen");  //its name
351                                                   351       
352       //zRotPhiHPGe.rotateX(PhiHPGe);             352       //zRotPhiHPGe.rotateX(PhiHPGe);
353       G4double x,y,z;                             353       G4double x,y,z;
354       G4cout << "distScreen: "<< distScreen/m     354       G4cout << "distScreen: "<< distScreen/m <<G4endl;
355       z = -1 * distScreen; //* std::cos(ThetaH    355       z = -1 * distScreen; //* std::cos(ThetaHPGe);
356       y = 0.*cm; //distScreen * std::sin(Theta    356       y = 0.*cm; //distScreen * std::sin(ThetaHPGe);
357       x = 0.*cm;                                  357       x = 0.*cm;
358       physiScreen = new G4PVPlacement(G4Transf    358       physiScreen = new G4PVPlacement(G4Transform3D(zRotPhiHPGe,G4ThreeVector(x,y,z)), 
359             "DetectorScreen", //its name          359             "DetectorScreen", //its name
360             logicScreen,  //its logical volume    360             logicScreen,  //its logical volume
361             physiWorld, //its mother  volume      361             physiWorld, //its mother  volume
362             false,    //no boolean operation      362             false,    //no boolean operation
363             0);   //copy number                   363             0);   //copy number
364     }                                             364     }
365                                                   365 
366     //Plane                                       366     //Plane
367                                                   367 
368   if (planeGranularity) {                         368   if (planeGranularity) {
369                                                   369 
370     solidPlane=0;  logicPlane=0;  physiPlane=0    370     solidPlane=0;  logicPlane=0;  physiPlane=0;
371     if (planeThickness > 0.)                      371     if (planeThickness > 0.)  
372       {                                           372       {
373   solidPlane = new G4Box("Plane",   //its name    373   solidPlane = new G4Box("Plane",   //its name
374         planeSizeXY/2,planeSizeXY/2,planeThick    374         planeSizeXY/2,planeSizeXY/2,planeThickness/2);//size
375                                                   375   
376   logicPlane= new G4LogicalVolume(solidPlane,     376   logicPlane= new G4LogicalVolume(solidPlane, //its solid
377            defaultMaterial, //its material        377            defaultMaterial, //its material
378            "Plane");  //its name                  378            "Plane");  //its name
379                                                   379   
380   physiPlane = new G4PVPlacement(0,     //no r    380   physiPlane = new G4PVPlacement(0,     //no rotation
381           G4ThreeVector(),  //at (0,0,0)          381           G4ThreeVector(),  //at (0,0,0)
382           "Plane",  //its name                    382           "Plane",  //its name
383           logicPlane, //its logical volume        383           logicPlane, //its logical volume
384           physiWorld, //its mother  volume        384           physiWorld, //its mother  volume
385           false,    //no boolean operation        385           false,    //no boolean operation
386           0);   //copy number                     386           0);   //copy number
387                                                   387   
388       }                                           388       }
389                                                   389 
390                                                   390 
391                                                   391 
392                                                   392 
393     G4int nbOfGrainsX = ((G4int)(planeSizeXY/g    393     G4int nbOfGrainsX = ((G4int)(planeSizeXY/grainDia)) -1 ;
394                                                   394     
395     // y dim of a max density plane is 2rn-(n-    395     // y dim of a max density plane is 2rn-(n-1)ar, wehere a = (1-(std::sqrt(3)/2)), n is 
396     // number of rows and r the radius of the     396     // number of rows and r the radius of the grain. so the Y-dim of the plane must 
397     // be greater or equal to this. It results    397     // be greater or equal to this. It results that nmust be <= (PlaneY-a)/(1-a).
398     // Max Y shift of the planes superimposing    398     // Max Y shift of the planes superimposing along Z axis is minor (2/std::sqrt(3)r)
399                                                   399 
400     G4double a = (1.-(std::sqrt(3.)/2.));         400     G4double a = (1.-(std::sqrt(3.)/2.));
401     G4int nbOfGrainsY =  (G4int) ( ((planeSize    401     G4int nbOfGrainsY =  (G4int) ( ((planeSizeXY/(grainDia/2.)) -a)/(2.-a) ) -1;
402                                                   402 
403     // same for the z axis, but a = 2 * (std::    403     // same for the z axis, but a = 2 * (std::sqrt(3) - std::sqrt(2))/std::sqrt(3)
404                                                   404 
405     G4double b = 2. * (std::sqrt(3.) - std::sq    405     G4double b = 2. * (std::sqrt(3.) - std::sqrt(2.))/std::sqrt(3.);
406     G4int nbOfGrainsZ =  (G4int) ( ((planeThic    406     G4int nbOfGrainsZ =  (G4int) ( ((planeThickness/(grainDia/2.)) -b)/(2.-b) )-1;
407                                                   407 
408     if (planeThickness > 0.){                     408     if (planeThickness > 0.){
409                                                   409       
410       solidGrain=0; logicGrain=0; physiGrain=0    410       solidGrain=0; logicGrain=0; physiGrain=0;
411       solidGrain = new G4Sphere("Grain",0.,       411       solidGrain = new G4Sphere("Grain",0.,     
412         grainDia/2,0., twopi, 0., pi);            412         grainDia/2,0., twopi, 0., pi);
413                                                   413       
414       logicGrain = new G4LogicalVolume(solidGr    414       logicGrain = new G4LogicalVolume(solidGrain,  
415                planeMaterial, //its material      415                planeMaterial, //its material
416                "Grain");          //its name      416                "Grain");          //its name
417       G4ThreeVector grainPosition;                417       G4ThreeVector grainPosition; 
418       G4double grainInitPositionX = 0;            418       G4double grainInitPositionX = 0;
419       G4double grainInitPositionY = 0;            419       G4double grainInitPositionY = 0;
420       G4double grainInitPositionZ = (-1.*plane    420       G4double grainInitPositionZ = (-1.*planeThickness/2.+grainDia/2.);
421       G4double grainStepX = grainDia = 0;         421       G4double grainStepX = grainDia = 0;
422       G4double grainStepY = grainDia*(1.-(0.5-    422       G4double grainStepY = grainDia*(1.-(0.5-(std::sqrt(3.)/4.)));
423       G4double grainStepZ = grainDia*std::sqrt    423       G4double grainStepZ = grainDia*std::sqrt(2./3.);
424                                                   424       
425       for ( G4int k=0; k < nbOfGrainsZ ; k++ )    425       for ( G4int k=0; k < nbOfGrainsZ ; k++ ) {
426   for ( G4int j=0; j < nbOfGrainsY ; j++ ) {      426   for ( G4int j=0; j < nbOfGrainsY ; j++ ) {
427     for ( G4int i=0; i < nbOfGrainsX ; i++ ) {    427     for ( G4int i=0; i < nbOfGrainsX ; i++ ) {
428                                                   428       
429       // Now we identify the layer and the row    429       // Now we identify the layer and the row where the grain is , to place it in the right position
430                                                   430       
431                                                   431       
432                                                   432       
433       if (k%3 == 0) { // first or (4-multiple)    433       if (k%3 == 0) { // first or (4-multiple)th layer: structure is ABCABC
434         grainInitPositionY = (-1.*planeSizeXY/    434         grainInitPositionY = (-1.*planeSizeXY/2.+grainDia/2.);    
435         if (j%2 ==0) { //first or (3-multiple)    435         if (j%2 ==0) { //first or (3-multiple)th row
436     grainInitPositionX = (-1.*planeSizeXY/2.+g    436     grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2.);
437         }                                         437         }
438                                                   438         
439         else if ( ((j+1) % 2)  == 0 ) {           439         else if ( ((j+1) % 2)  == 0 ) {
440     grainInitPositionX = (-1.*planeSizeXY/2.+     440     grainInitPositionX = (-1.*planeSizeXY/2.+ grainDia);    
441         }                                         441         }
442                                                   442         
443       }                                           443       }       
444       else if ( ((k+2) % 3) == 0 ) { // B-laye    444       else if ( ((k+2) % 3) == 0 ) { // B-layer
445                                                   445         
446         grainInitPositionY = ( (-1.*planeSizeX    446         grainInitPositionY = ( (-1.*planeSizeXY/2.) + (grainDia/2.)*(1. + (1./std::sqrt(3.)) ) );
447                                                   447         
448         if (j%2 ==0) { //first or (3-multiple)    448         if (j%2 ==0) { //first or (3-multiple)th row
449     grainInitPositionX = (-1.*planeSizeXY/2.+g    449     grainInitPositionX = (-1.*planeSizeXY/2.+grainDia);
450         }                                         450         }
451                                                   451         
452         else if ( (j+1)%2  == 0 ) {               452         else if ( (j+1)%2  == 0 ) {
453     grainInitPositionX = (-1.*planeSizeXY/2.+g    453     grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2);   
454         }                                         454         }
455                                                   455         
456       }                                           456       }
457                                                   457       
458       else if ( (k+1)%3 == 0 ) { // B-layer       458       else if ( (k+1)%3 == 0 ) { // B-layer
459                                                   459         
460         grainInitPositionY = (-1.*planeSizeXY/    460         grainInitPositionY = (-1.*planeSizeXY/2.+(grainDia/2.)*(1.+2./std::sqrt(3.)) );
461                                                   461         
462         if (j%2 ==0) { //first or (3-multiple)    462         if (j%2 ==0) { //first or (3-multiple)th row
463     grainInitPositionX = (-1.*planeSizeXY/2.+g    463     grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2.);
464         }                                         464         }
465                                                   465         
466         else if ( (j+1)%2  == 0 ) {               466         else if ( (j+1)%2  == 0 ) {
467     grainInitPositionX = (-1.*planeSizeXY/2.+g    467     grainInitPositionX = (-1.*planeSizeXY/2.+grainDia);   
468         }                                         468         }
469                                                   469         
470       }                                           470       }
471                                                   471       
472       physiGrain = new G4PVPlacement(0,           472       physiGrain = new G4PVPlacement(0,        
473              G4ThreeVector( grainInitPositionX    473              G4ThreeVector( grainInitPositionX + i*grainStepX, 
474                 grainInitPositionY + j*grainSt    474                 grainInitPositionY + j*grainStepY,
475                 grainInitPositionZ + k*grainSt    475                 grainInitPositionZ + k*grainStepZ),
476              "Grain",                             476              "Grain",  
477              logicGrain,   //its logical volum    477              logicGrain,   //its logical volume
478              physiPlane, //its mother  volume     478              physiPlane, //its mother  volume
479              false,  //no boolean operation       479              false,  //no boolean operation
480              grainCopyNb);//copy number           480              grainCopyNb);//copy number    
481                                                   481       
482       grainCopyNb = grainCopyNb +1;               482       grainCopyNb = grainCopyNb +1; 
483     }                                             483     }
484   }                                               484   }
485       }                                           485       }
486     }                                             486     }    
487   }                                               487   }
488   else {                                          488   else {     
489                                                   489       
490     solidPlane=0;  logicPlane=0;  physiPlane=0    490     solidPlane=0;  logicPlane=0;  physiPlane=0;
491     if (planeThickness > 0.)                      491     if (planeThickness > 0.)  
492       {                                           492       {
493   solidPlane = new G4Box("Plane",   //its name    493   solidPlane = new G4Box("Plane",   //its name
494         planeSizeXY/2,planeSizeXY/2,planeThick    494         planeSizeXY/2,planeSizeXY/2,planeThickness/2);//size
495                                                   495     
496   logicPlane= new G4LogicalVolume(solidPlane,     496   logicPlane= new G4LogicalVolume(solidPlane, //its solid
497            planeMaterial, //its material          497            planeMaterial, //its material
498            "Plane");  //its name                  498            "Plane");  //its name
499                                                   499     
500   physiPlane = new G4PVPlacement(0,     //no r    500   physiPlane = new G4PVPlacement(0,     //no rotation
501           G4ThreeVector(),  //at (0,0,0)          501           G4ThreeVector(),  //at (0,0,0)
502           "Plane",  //its name                    502           "Plane",  //its name
503           logicPlane, //its logical volume        503           logicPlane, //its logical volume
504           physiWorld, //its mother  volume        504           physiWorld, //its mother  volume
505           false,    //no boolean operation        505           false,    //no boolean operation
506           0);   //copy number                     506           0);   //copy number
507                                                   507     
508       }                                           508       }  
509   }                                               509   }
510                                                   510 
511   // Visualization attributes                     511   // Visualization attributes
512                                                   512   
513   logicWorld->SetVisAttributes (G4VisAttribute    513   logicWorld->SetVisAttributes (G4VisAttributes::GetInvisible());
514    G4VisAttributes* simpleBoxVisAtt= new G4Vis    514    G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0));
515    G4VisAttributes * yellow= new G4VisAttribut    515    G4VisAttributes * yellow= new G4VisAttributes( G4Colour(255/255. ,255/255. ,51/255. ));
516    G4VisAttributes * red= new G4VisAttributes(    516    G4VisAttributes * red= new G4VisAttributes( G4Colour(255/255. , 0/255. , 0/255. ));
517    G4VisAttributes * blue= new G4VisAttributes    517    G4VisAttributes * blue= new G4VisAttributes( G4Colour(0/255. , 0/255. ,  255/255. ));
518    G4VisAttributes * grayc= new G4VisAttribute    518    G4VisAttributes * grayc= new G4VisAttributes( G4Colour(128/255. , 128/255. ,  128/255. ));
519    G4VisAttributes * lightGray= new G4VisAttri    519    G4VisAttributes * lightGray= new G4VisAttributes( G4Colour(178/255. , 178/255. ,  178/255. ));
520   yellow->SetVisibility(true);                    520   yellow->SetVisibility(true);
521   yellow->SetForceSolid(true);                    521   yellow->SetForceSolid(true);
522   red->SetVisibility(true);                       522   red->SetVisibility(true);
523   red->SetForceSolid(true);                       523   red->SetForceSolid(true);
524   blue->SetVisibility(true);                      524   blue->SetVisibility(true);
525   grayc->SetVisibility(true);                     525   grayc->SetVisibility(true);
526   grayc->SetForceSolid(true);                     526   grayc->SetForceSolid(true);
527   lightGray->SetVisibility(true);                 527   lightGray->SetVisibility(true);
528   lightGray->SetForceSolid(true);                 528   lightGray->SetForceSolid(true);
529   simpleBoxVisAtt->SetVisibility(true);           529   simpleBoxVisAtt->SetVisibility(true);
530                                                   530  
531   logicPixel->SetVisAttributes(red); //modifie    531   logicPixel->SetVisAttributes(red); //modified!!!
532   logicHPGe->SetVisAttributes(blue);              532   logicHPGe->SetVisAttributes(blue);
533                                                   533 
534   logicPlane->SetVisAttributes(lightGray);        534   logicPlane->SetVisAttributes(lightGray);
535                                                   535   
536                                                   536 
537   logicScreen->SetVisAttributes(grayc);           537   logicScreen->SetVisAttributes(grayc);
538   logicOhmicNeg->SetVisAttributes(yellow);        538   logicOhmicNeg->SetVisAttributes(yellow);
539   logicOhmicPos->SetVisAttributes(yellow);        539   logicOhmicPos->SetVisAttributes(yellow);
540                                                   540 
541                                                   541 
542                                                   542 
543   if (planeGranularity)  logicGrain->SetVisAtt    543   if (planeGranularity)  logicGrain->SetVisAttributes(grayc);
544                                                   544 
545   //always return the physical World              545   //always return the physical World
546                                                   546     
547   PrintApparateParameters();                      547   PrintApparateParameters();
548                                                   548 
549   return physiWorld;                              549   return physiWorld;
550 }                                                 550 }
551                                                   551 
552 //....oooOO0OOooo........oooOO0OOooo........oo    552 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...
553                                                   553 
554 void XrayFluoPlaneDetectorConstruction::Constr    554 void XrayFluoPlaneDetectorConstruction::ConstructSDandField()
555 {                                                 555 {
556   //                                              556   //                               
557   // Sensitive Detectors                          557   // Sensitive Detectors 
558   //                                              558   //
559   if (HPGeSD.Get() == 0)                          559   if (HPGeSD.Get() == 0) 
560     {                                             560     {    
561       XrayFluoSD* SD = new XrayFluoSD ("HPGeSD    561       XrayFluoSD* SD = new XrayFluoSD ("HPGeSD",this);
562       HPGeSD.Put( SD );                           562       HPGeSD.Put( SD );
563     }                                             563     }
564   G4SDManager::GetSDMpointer()->AddNewDetector    564   G4SDManager::GetSDMpointer()->AddNewDetector(HPGeSD.Get());
565   if (logicPixel)                                 565   if (logicPixel)    
566     SetSensitiveDetector(logicPixel,HPGeSD.Get    566     SetSensitiveDetector(logicPixel,HPGeSD.Get());  
567 }                                                 567 }
568                                                   568 
569 //....oooOO0OOooo........oooOO0OOooo........oo    569 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
570                                                   570 
571 void XrayFluoPlaneDetectorConstruction::PrintA    571 void XrayFluoPlaneDetectorConstruction::PrintApparateParameters()
572 {                                                 572 {
573   G4cout << "---------------------------------    573   G4cout << "-----------------------------------------------------------------------"
574    << G4endl                                      574    << G4endl
575    << "The plane is a box whose size is: "        575    << "The plane is a box whose size is: "
576    << G4endl                                      576    << G4endl      
577    << planeThickness/cm                           577    << planeThickness/cm
578    << " cm * "                                    578    << " cm * "
579    << planeSizeXY/cm                              579    << planeSizeXY/cm
580    << " cm * "                                    580    << " cm * "
581    << planeSizeXY/cm                              581    << planeSizeXY/cm
582    << " cm"                                       582    << " cm"
583    << G4endl                                      583    << G4endl
584    <<" Material: " << logicPlane->GetMaterial(    584    <<" Material: " << logicPlane->GetMaterial()->GetName() 
585    <<G4endl                                       585    <<G4endl
586     <<"The Detector is a slice  " << DeviceThi    586     <<"The Detector is a slice  " << DeviceThickness/(1.e-6*m) <<  " micron thick of " << pixelMaterial->GetName()
587    <<G4endl                                       587    <<G4endl
588                                                   588    
589                                                   589 
590 <<"-------------------------------------------    590 <<"-------------------------------------------------------------------------"
591    << G4endl;                                     591    << G4endl;
592 }                                                 592 }
593 //....oooOO0OOooo........oooOO0OOooo........oo    593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
594                                                   594 
595 void XrayFluoPlaneDetectorConstruction::Update    595 void XrayFluoPlaneDetectorConstruction::UpdateGeometry()
596 {                                                 596 {
597   G4GeometryManager::GetInstance()->OpenGeomet    597   G4GeometryManager::GetInstance()->OpenGeometry();
598   G4PhysicalVolumeStore::Clean();                 598   G4PhysicalVolumeStore::Clean();
599   G4LogicalVolumeStore::Clean();                  599   G4LogicalVolumeStore::Clean();
600   G4SolidStore::Clean();                          600   G4SolidStore::Clean();
601                                                   601  
602   zRotPhiHPGe.rotateX(-1.*PhiHPGe);               602   zRotPhiHPGe.rotateX(-1.*PhiHPGe);
603   //Triggers a new call of Construct() and of     603   //Triggers a new call of Construct() and of all the geometry resets.
604   G4RunManager::GetRunManager()->ReinitializeG    604   G4RunManager::GetRunManager()->ReinitializeGeometry();
605 }                                                 605 }
606                                                   606 
607 //....oooOO0OOooo........oooOO0OOooo........oo    607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
608                                                   608 
609 void XrayFluoPlaneDetectorConstruction::Delete    609 void XrayFluoPlaneDetectorConstruction::DeleteGrainObjects()
610 {                                                 610 {
611   if (planeGranularity) {                         611   if (planeGranularity) { 
612     delete solidGrain;                            612     delete solidGrain; 
613     delete logicGrain;                            613     delete logicGrain;
614     delete physiGrain;                            614     delete physiGrain;
615   }                                               615   }
616                                                   616 
617 }                                                 617 }
618                                                   618 
619 //....oooOO0OOooo........oooOO0OOooo........oo    619 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
620                                                   620 
621 void XrayFluoPlaneDetectorConstruction::SetPla    621 void XrayFluoPlaneDetectorConstruction::SetPlaneMaterial(G4String newMaterial)
622 {                                                 622 {
623   //G4cout << "Material!!!!" << newMaterial <<    623   //G4cout << "Material!!!!" << newMaterial << G4endl;
624   logicPlane->SetMaterial(materials->GetMateri    624   logicPlane->SetMaterial(materials->GetMaterial(newMaterial));
625   PrintApparateParameters();                      625   PrintApparateParameters();
626   //GeometryHasBeenModified is called by the m    626   //GeometryHasBeenModified is called by the messenger
627                                                   627     
628 }                                                 628 }
629                                                   629 
630 //....oooOO0OOooo........oooOO0OOooo........oo    630 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
631                                                   631 
632                                                   632 
633                                                   633 
634                                                   634 
635                                                   635 
636                                                   636 
637                                                   637 
638                                                   638 
639                                                   639 
640                                                   640 
641                                                   641 
642                                                   642 
643                                                   643