Geant4_10
XrayFluoPlaneDetectorConstruction.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: XrayFluoPlaneDetectorConstruction.cc
28 // GEANT4 tag $Name: xray_fluo-V03-02-00
29 //
30 // Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
31 //
32 // History:
33 // -----------
34 // 29 aug 2003 Alfonso Mantero Created
35 // -------------------------------------------------------------------
36 
39 #include "XrayFluoSD.hh"
40 #include "XrayFluoNistMaterials.hh"
41 #include "G4PhysicalConstants.hh"
42 #include "G4SystemOfUnits.hh"
43 #include "G4Material.hh"
44 #include "G4ThreeVector.hh"
45 #include "G4Box.hh"
46 #include "G4Sphere.hh"
47 #include "G4LogicalVolume.hh"
48 #include "G4PVPlacement.hh"
50 #include "G4SDManager.hh"
51 #include "G4RunManager.hh"
52 #include "G4VisAttributes.hh"
53 #include "G4Colour.hh"
54 #include "G4ios.hh"
55 #include "G4PVReplica.hh"
56 #include "G4UserLimits.hh"
57 
58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
59 
60 
61 XrayFluoPlaneDetectorConstruction::XrayFluoPlaneDetectorConstruction()
62  : detectorType(0),planeGranularity(false), DeviceSizeX(0),
63  DeviceSizeY(0),DeviceThickness(0),
64  solidWorld(0),logicWorld(0),physiWorld(0),
65  solidHPGe(0),logicHPGe(0),physiHPGe(0),
66  solidScreen(0),logicScreen(0),physiScreen(0),
67  solidPlane (0),logicPlane(0),physiPlane (0),
68  solidOhmicPos(0),logicOhmicPos(0), physiOhmicPos(0),
69  solidOhmicNeg(0),logicOhmicNeg(0), physiOhmicNeg(0),
70  solidPixel(0),logicPixel(0), physiPixel(0),
71  screenMaterial(0),OhmicPosMaterial(0), OhmicNegMaterial(0),
72  pixelMaterial(0),planeMaterial(0),
73  defaultMaterial(0),HPGeSD(0)
74 
75 {
77 
78  DefineDefaultMaterials();
79 
80  NbOfPixelRows = 1; // should be 1
81  NbOfPixelColumns = 1; // should be 1
82  NbOfPixels = NbOfPixelRows*NbOfPixelColumns;
83  PixelSizeXY = 5 * cm; // should be 5
84  PixelThickness = 3.5 * mm; //changed should be 3.5 mm
85 
86  G4cout << "PixelThickness(mm): "<< PixelThickness/mm << G4endl;
87  G4cout << "PixelSizeXY(cm): "<< PixelSizeXY/cm << G4endl;
88 
89  ContactSizeXY = 5 * cm; //should be the same as pixelSizeXY
90  planeThickness = 5 * cm;
91  planeSizeXY = 5. * m;
92 
93  OhmicNegThickness = 0.005*mm;
94  OhmicPosThickness = 0.005*mm;
95 
96  screenThickness = 5 * mm;
97 
98  ThetaHPGe = 0. * deg;
99  PhiHPGe = 0. * deg;
100 
101 
102  DistDe = 0.5 * m;
103 
104  distScreen = DistDe + (screenThickness+PixelThickness)/2+OhmicPosThickness ;
105 
106  grainDia = 1 * mm;
107 
108 
109  PixelCopyNb=0;
110  grainCopyNb=0;
111  G4String defaultDetectorType = "sili";
112  ComputeApparateParameters();
113  SetDetectorType(defaultDetectorType);
114 
115  // create commands for interactive definition of the apparate
116 
117  detectorMessenger = new XrayFluoPlaneDetectorMessenger(this);
118  G4cout << "XrayFluoPlaneDetectorConstruction created" << G4endl;
119 }
120 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
121 
122 
123 XrayFluoPlaneDetectorConstruction* XrayFluoPlaneDetectorConstruction::instance = 0;
124 
126 {
127  if (instance == 0)
128  {
129  instance = new XrayFluoPlaneDetectorConstruction;
130 
131  }
132  return instance;
133 }
134 
136 {
137 
138  if (type=="sili")
139  {
140  detectorType = XrayFluoSiLiDetectorType::GetInstance();
141  }
142  else if (type=="hpge")
143  {
144  detectorType = XrayFluoHPGeDetectorType::GetInstance();
145  }
146  else
147  {
149  execp << type + "detector type unknown";
150  G4Exception("XrayFluoPlaneDetectorConstruction::SetDetectorType()","example-xray_fluorescence03",
151  FatalException, execp);
152  }
153 }
154 
156 {
157  return detectorType;
158 }
159 
160 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
161 
163 
164 {
165  delete detectorMessenger;
166  delete detectorType;
167  G4cout << "XrayFluoPlaneDetectorConstruction deleted" << G4endl;
168 }
169 
170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
171 
173 {
174  return ConstructApparate();
175 }
176 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
177 
178 void XrayFluoPlaneDetectorConstruction::DefineDefaultMaterials()
179 {
180 
181 
182  //define materials of the apparate
183 
184  planeMaterial = materials->GetMaterial("Anorthosite");
185  screenMaterial = materials->GetMaterial("G4_Pb");
186  pixelMaterial = materials->GetMaterial("G4_Si");
187  OhmicPosMaterial = materials->GetMaterial("G4_Cu");
188  OhmicNegMaterial = materials->GetMaterial("G4_Pb");
189  defaultMaterial = materials->GetMaterial("G4_Galactic");
190 }
191 
192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
193 
194 G4VPhysicalVolume* XrayFluoPlaneDetectorConstruction::ConstructApparate()
195 {
196  // complete the apparate parameters definition
197 
198  //ComputeApparateParameters();
199 
200  //world
201 
202  solidWorld = new G4Box("World", //its name
203  WorldSizeXY/2,WorldSizeXY/2,WorldSizeZ/2); //its size
204 
205  logicWorld = new G4LogicalVolume(solidWorld, //its solid
206  defaultMaterial, //its material
207  "World"); //its name
208  physiWorld = new G4PVPlacement(0, //no rotation
209  G4ThreeVector(), //at (0,0,0)
210  "World", //its name
211  logicWorld, //its logical volume
212  0, //its mother volume
213  false, //no boolean operation
214  0); //copy number
215 
216  //detector
217 
218  solidHPGe = 0; physiHPGe = 0; logicHPGe=0;
219  solidPixel=0; logicPixel=0; physiPixel=0;
220 
221  if (DeviceThickness > 0.)
222  {
223  solidHPGe = new G4Box("HPGeDetector", //its name
224  DeviceSizeX/2,DeviceSizeY/2,DeviceThickness/2);//size
225 
226 
227  logicHPGe = new G4LogicalVolume(solidHPGe, //its solid
228  defaultMaterial, //its material
229  "HPGeDetector"); //its name
230 
231  zRotPhiHPGe.rotateX(PhiHPGe);
232  G4double x,y,z;
233 
234  z = -1. * DistDe; //* std::cos(ThetaHPGe);
235  y = 0.*cm; //distScreen * std::sin(ThetaHPGe);
236  x = 0.*cm;
237 
238  physiHPGe = new G4PVPlacement(G4Transform3D(zRotPhiHPGe,G4ThreeVector(x,y,z)),
239  "HPGeDetector", //its name
240  logicHPGe, //its logical volume
241  physiWorld, //its mother volume
242  false, //no boolean operation
243  0); //copy number
244  }
245  // Pixel
246 
247 
248 
249 
250  for ( G4int j=0; j < NbOfPixelColumns ; j++ )
251  { for ( G4int i=0; i < NbOfPixelRows ; i++ )
252  {
253  solidPixel=0; logicPixel=0; physiPixel=0;
254  if (PixelThickness > 0.)
255  solidPixel = new G4Box("Pixel",
256  PixelSizeXY/2,PixelSizeXY/2, PixelThickness/2);
257 
258  logicPixel = new G4LogicalVolume(solidPixel,
259  pixelMaterial, //its material
260  "Pixel"); //its name
261 
262  /*
263  zRotPhiHPGe.rotateX(PhiHPGe);
264  G4double x,y,z;
265  z = DistDe * std::cos(ThetaHPGe);
266  y =DistDe * std::sin(ThetaHPGe);
267  x = 0.*cm;*/
268  physiPixel = new G4PVPlacement(0,
269  G4ThreeVector(0,
270  i*PixelSizeXY,
271  j*PixelSizeXY ),
272  "Pixel",
273  logicPixel, //its logical volume
274  physiHPGe, //its mother volume
275  false, //no boolean operation
276  PixelCopyNb);//copy number
277 
278 
279 
280 
281 
282 
283  // OhmicNeg
284 
285  solidOhmicNeg=0; logicOhmicNeg=0; physiOhmicNeg=0;
286 
287  if (OhmicNegThickness > 0.)
288  { solidOhmicNeg = new G4Box("OhmicNeg", //its name
289  PixelSizeXY/2,PixelSizeXY/2,OhmicNegThickness/2);
290 
291  logicOhmicNeg = new G4LogicalVolume(solidOhmicNeg, //its solid
292  OhmicNegMaterial, //its material
293  "OhmicNeg"); //its name
294 
295  physiOhmicNeg = new G4PVPlacement(0,
297  (0.,
298  0.,
299  (PixelThickness+OhmicNegThickness)/2),
300  "OhmicNeg", //its name
301  logicOhmicNeg, //its logical volume
302  physiHPGe, //its mother
303  false, //no boulean operat
304  PixelCopyNb); //copy number
305 
306  }
307  // OhmicPos
308  solidOhmicPos=0; logicOhmicPos=0; physiOhmicPos=0;
309 
310  if (OhmicPosThickness > 0.)
311  { solidOhmicPos = new G4Box("OhmicPos", //its name
312  PixelSizeXY/2,PixelSizeXY/2,OhmicPosThickness/2);
313 
314  logicOhmicPos = new G4LogicalVolume(solidOhmicPos, //its solid
315  OhmicPosMaterial, //its material
316  "OhmicPos"); //its name
317 
318  physiOhmicPos = new G4PVPlacement(0,
319  G4ThreeVector(0.,
320  0.,
321  (-PixelThickness-OhmicPosThickness)/2),
322  "OhmicPos",
323  logicOhmicPos,
324  physiHPGe,
325  false,
326  PixelCopyNb);
327 
328  }
329 
330  PixelCopyNb += PixelCopyNb;
331  G4cout << "PixelCopyNb: " << PixelCopyNb << G4endl;
332  }
333 
334  }
335 
336  // Screen
337 
338  if (DeviceThickness > 0.)
339  {
340  solidScreen = new G4Box("DetectorScreen", //its name
341  screenSizeXY/2,screenSizeXY/2,screenThickness/2);//size
342 
343 
344  logicScreen = new G4LogicalVolume(solidScreen, //its solid
345  defaultMaterial, //its material
346  "DetectorScreen"); //its name
347 
348  //zRotPhiHPGe.rotateX(PhiHPGe);
349  G4double x,y,z;
350  G4cout << "distScreen: "<< distScreen/m <<G4endl;
351  z = -1 * distScreen; //* std::cos(ThetaHPGe);
352  y = 0.*cm; //distScreen * std::sin(ThetaHPGe);
353  x = 0.*cm;
354  physiScreen = new G4PVPlacement(G4Transform3D(zRotPhiHPGe,G4ThreeVector(x,y,z)),
355  "DetectorScreen", //its name
356  logicScreen, //its logical volume
357  physiWorld, //its mother volume
358  false, //no boolean operation
359  0); //copy number
360  }
361 
362  //Plane
363 
364  if (planeGranularity) {
365 
366  solidPlane=0; logicPlane=0; physiPlane=0;
367  if (planeThickness > 0.)
368  {
369  solidPlane = new G4Box("Plane", //its name
370  planeSizeXY/2,planeSizeXY/2,planeThickness/2);//size
371 
372  logicPlane= new G4LogicalVolume(solidPlane, //its solid
373  defaultMaterial, //its material
374  "Plane"); //its name
375 
376  physiPlane = new G4PVPlacement(0, //no rotation
377  G4ThreeVector(), //at (0,0,0)
378  "Plane", //its name
379  logicPlane, //its logical volume
380  physiWorld, //its mother volume
381  false, //no boolean operation
382  0); //copy number
383 
384  }
385 
386 
387 
388 
389  G4int nbOfGrainsX = ((G4int)(planeSizeXY/grainDia)) -1 ;
390 
391  // y dim of a max density plane is 2rn-(n-1)ar, wehere a = (1-(std::sqrt(3)/2)), n is
392  // number of rows and r the radius of the grain. so the Y-dim of the plane must
393  // be greater or equal to this. It results that nmust be <= (PlaneY-a)/(1-a).
394  // Max Y shift of the planes superimposing along Z axis is minor (2/std::sqrt(3)r)
395 
396  G4double a = (1.-(std::sqrt(3.)/2.));
397  G4int nbOfGrainsY = (G4int) ( ((planeSizeXY/(grainDia/2.)) -a)/(2.-a) ) -1;
398 
399  // same for the z axis, but a = 2 * (std::sqrt(3) - std::sqrt(2))/std::sqrt(3)
400 
401  G4double b = 2. * (std::sqrt(3.) - std::sqrt(2.))/std::sqrt(3.);
402  G4int nbOfGrainsZ = (G4int) ( ((planeThickness/(grainDia/2.)) -b)/(2.-b) )-1;
403 
404  if (planeThickness > 0.){
405 
406  solidGrain=0; logicGrain=0; physiGrain=0;
407  solidGrain = new G4Sphere("Grain",0.,
408  grainDia/2,0., twopi, 0., pi);
409 
410  logicGrain = new G4LogicalVolume(solidGrain,
411  planeMaterial, //its material
412  "Grain"); //its name
413  G4ThreeVector grainPosition;
414  G4double grainInitPositionX = 0;
415  G4double grainInitPositionY = 0;
416  G4double grainInitPositionZ = (-1.*planeThickness/2.+grainDia/2.);
417  G4double grainStepX = grainDia = 0;
418  G4double grainStepY = grainDia*(1.-(0.5-(std::sqrt(3.)/4.)));
419  G4double grainStepZ = grainDia*std::sqrt(2./3.);
420 
421  for ( G4int k=0; k < nbOfGrainsZ ; k++ ) {
422  for ( G4int j=0; j < nbOfGrainsY ; j++ ) {
423  for ( G4int i=0; i < nbOfGrainsX ; i++ ) {
424 
425  // Now we identify the layer and the row where the grain is , to place it in the right position
426 
427 
428 
429  if (k%3 == 0) { // first or (4-multiple)th layer: structure is ABCABC
430  grainInitPositionY = (-1.*planeSizeXY/2.+grainDia/2.);
431  if (j%2 ==0) { //first or (3-multiple)th row
432  grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2.);
433  }
434 
435  else if ( ((j+1) % 2) == 0 ) {
436  grainInitPositionX = (-1.*planeSizeXY/2.+ grainDia);
437  }
438 
439  }
440  else if ( ((k+2) % 3) == 0 ) { // B-layer
441 
442  grainInitPositionY = ( (-1.*planeSizeXY/2.) + (grainDia/2.)*(1. + (1./std::sqrt(3.)) ) );
443 
444  if (j%2 ==0) { //first or (3-multiple)th row
445  grainInitPositionX = (-1.*planeSizeXY/2.+grainDia);
446  }
447 
448  else if ( (j+1)%2 == 0 ) {
449  grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2);
450  }
451 
452  }
453 
454  else if ( (k+1)%3 == 0 ) { // B-layer
455 
456  grainInitPositionY = (-1.*planeSizeXY/2.+(grainDia/2.)*(1.+2./std::sqrt(3.)) );
457 
458  if (j%2 ==0) { //first or (3-multiple)th row
459  grainInitPositionX = (-1.*planeSizeXY/2.+grainDia/2.);
460  }
461 
462  else if ( (j+1)%2 == 0 ) {
463  grainInitPositionX = (-1.*planeSizeXY/2.+grainDia);
464  }
465 
466  }
467 
468  physiGrain = new G4PVPlacement(0,
469  G4ThreeVector( grainInitPositionX + i*grainStepX,
470  grainInitPositionY + j*grainStepY,
471  grainInitPositionZ + k*grainStepZ),
472  "Grain",
473  logicGrain, //its logical volume
474  physiPlane, //its mother volume
475  false, //no boolean operation
476  grainCopyNb);//copy number
477 
478  grainCopyNb = grainCopyNb +1;
479  }
480  }
481  }
482  }
483  }
484  else {
485 
486  solidPlane=0; logicPlane=0; physiPlane=0;
487  if (planeThickness > 0.)
488  {
489  solidPlane = new G4Box("Plane", //its name
490  planeSizeXY/2,planeSizeXY/2,planeThickness/2);//size
491 
492  logicPlane= new G4LogicalVolume(solidPlane, //its solid
493  planeMaterial, //its material
494  "Plane"); //its name
495 
496  physiPlane = new G4PVPlacement(0, //no rotation
497  G4ThreeVector(), //at (0,0,0)
498  "Plane", //its name
499  logicPlane, //its logical volume
500  physiWorld, //its mother volume
501  false, //no boolean operation
502  0); //copy number
503 
504  }
505  }
506 
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 
521  // Visualization attributes
522 
524  G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0));
525  G4VisAttributes * yellow= new G4VisAttributes( G4Colour(255/255. ,255/255. ,51/255. ));
526  G4VisAttributes * red= new G4VisAttributes( G4Colour(255/255. , 0/255. , 0/255. ));
527  G4VisAttributes * blue= new G4VisAttributes( G4Colour(0/255. , 0/255. , 255/255. ));
528  G4VisAttributes * grayc= new G4VisAttributes( G4Colour(128/255. , 128/255. , 128/255. ));
529  G4VisAttributes * lightGray= new G4VisAttributes( G4Colour(178/255. , 178/255. , 178/255. ));
530  yellow->SetVisibility(true);
531  yellow->SetForceSolid(true);
532  red->SetVisibility(true);
533  red->SetForceSolid(true);
534  blue->SetVisibility(true);
535  grayc->SetVisibility(true);
536  grayc->SetForceSolid(true);
537  lightGray->SetVisibility(true);
538  lightGray->SetForceSolid(true);
539  simpleBoxVisAtt->SetVisibility(true);
540 
541  logicPixel->SetVisAttributes(red); //modified!!!
542  logicHPGe->SetVisAttributes(blue);
543 
544  logicPlane->SetVisAttributes(lightGray);
545 
546 
547  logicScreen->SetVisAttributes(grayc);
548  logicOhmicNeg->SetVisAttributes(yellow);
549  logicOhmicPos->SetVisAttributes(yellow);
550 
551 
552 
553  if (planeGranularity) logicGrain->SetVisAttributes(grayc);
554 
555  //always return the physical World
556 
558 
559  return physiWorld;
560 }
561 
562 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
563 
565 {
566  G4cout << "-----------------------------------------------------------------------"
567  << G4endl
568  << "The plane is a box whose size is: "
569  << G4endl
570  << planeThickness/cm
571  << " cm * "
572  << planeSizeXY/cm
573  << " cm * "
574  << planeSizeXY/cm
575  << " cm"
576  << G4endl
577  <<" Material: " << logicPlane->GetMaterial()->GetName()
578  <<G4endl
579  <<"The Detector is a slice " << DeviceThickness/(1.e-6*m) << " micron thick of " << pixelMaterial->GetName()
580  <<G4endl
581 
582 
583 <<"-------------------------------------------------------------------------"
584  << G4endl;
585 }
586 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
587 
589 {
590 
591  delete solidHPGe;
592  delete logicHPGe;
593  delete physiHPGe;
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 
613  zRotPhiHPGe.rotateX(-1.*PhiHPGe);
614  G4RunManager::GetRunManager()->DefineWorldVolume(ConstructApparate());
615 }
616 
617 
619 {
620  if (planeGranularity) {
621  delete solidGrain;
622  delete logicGrain;
623  delete physiGrain;
624  }
625 
626 }
628 {
629 
630 
631  G4cout << "Material!!!!" << newMaterial << G4endl;
632  logicPlane->SetMaterial(materials->GetMaterial(newMaterial));
634 
635 }
636 
637 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
638 
639 
640 
641 
642 
643 
644 
645 
646 
647 
648 
Definition: test07.cc:36
tuple a
Definition: test.py:11
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
CLHEP::Hep3Vector G4ThreeVector
HepRotation & rotateX(double delta)
Definition: Rotation.cc:66
G4Material * GetMaterial() const
Definition: G4Box.hh:63
const G4String & GetName() const
Definition: G4Material.hh:176
void SetVisibility(G4bool)
tuple x
Definition: test.py:50
void SetForceSolid(G4bool)
Definition: test07.cc:36
Definition: test07.cc:36
int G4int
Definition: G4Types.hh:78
static XrayFluoPlaneDetectorConstruction * GetInstance()
static XrayFluoNistMaterials * GetInstance()
virtual void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
Double_t y
Definition: plot.C:279
static XrayFluoSiLiDetectorType * GetInstance()
tuple b
Definition: test.py:12
G4GLOB_DLL std::ostream G4cout
HepGeom::Transform3D G4Transform3D
G4Material * GetMaterial(G4String)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void AddNewDetector(G4VSensitiveDetector *aSD)
Definition: G4SDManager.cc:67
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:74
static G4SDManager * GetSDMpointer()
Definition: G4SDManager.cc:40
static const G4VisAttributes Invisible
tuple z
Definition: test.py:28
static XrayFluoHPGeDetectorType * GetInstance()
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
void SetMaterial(G4Material *pMaterial)
void SetVisAttributes(const G4VisAttributes *pVA)
void SetSensitiveDetector(G4VSensitiveDetector *pSDetector)