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 9.6.p1)


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