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