Geant4  10.02.p01
GammaRayTelDetectorConstruction.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: GammaRayTelDetectorConstruction.cc 82630 2014-07-01 09:43:00Z gcosmo $
28 // ------------------------------------------------------------
29 // GEANT 4 class implementation file
30 // CERN Geneva Switzerland
31 //
32 //
33 // ------------ GammaRayTelDetectorConstruction ------
34 // by F.Longo, R.Giannitrapani & G.Santin (13 nov 2000)
35 //
36 // ************************************************************
37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
38 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
39 
42 
43 #include "GammaRayTelTrackerSD.hh"
44 
47 
48 #include "G4PhysicalConstants.hh"
49 #include "G4SystemOfUnits.hh"
50 #include "G4Material.hh"
51 #include "G4Box.hh"
52 #include "G4LogicalVolume.hh"
53 #include "G4PVPlacement.hh"
54 #include "G4PVReplica.hh"
55 #include "G4UniformMagField.hh"
56 #include "G4FieldManager.hh"
58 #include "G4SDManager.hh"
59 #include "G4RunManager.hh"
61 #include "G4AutoDelete.hh"
62 #include "G4VisAttributes.hh"
63 #include "G4Colour.hh"
64 #include "G4UImanager.hh"
65 
66 
67 #include "G4RegionStore.hh"
68 
71 
72 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
73 
75  :solidWorld(0),logicWorld(0),physiWorld(0),
76  solidPayload(0),logicPayload(0),physiPayload(0),
77  solidTKR(0),logicTKR(0),physiTKR(0),
78  solidCAL(0),logicCAL(0),physiCAL(0),
79  solidACT(0),logicACT(0),physiACT(0),
80  solidACL1(0),logicACL1(0),physiACL1(0),
81  solidACL2(0),logicACL2(0),physiACL2(0),
82  solidTKRDetectorX(0),logicTKRDetectorX(0),physiTKRDetectorX(0),
83  solidTKRDetectorY(0),logicTKRDetectorY(0),physiTKRDetectorY(0),
84  solidCALLayerX(0),logicCALLayerX(0),physiCALLayerX(0),
85  solidCALLayerY(0),logicCALLayerY(0),physiCALLayerY(0),
86  solidCALDetectorX(0),logicCALDetectorX(0),physiCALDetectorX(0),
87  solidCALDetectorY(0),logicCALDetectorY(0),physiCALDetectorY(0),
88  solidPlane(0),logicPlane(0),physiPlane(0),
89  solidConverter(0),logicConverter(0),physiConverter(0),
90  logicTKRStripX(0),logicTKRStripY(0)
91  // aTKRRegion(0), aCALRegion(0)
92 {
93  // default parameter values of the payload
94 
97  TKRSiliconTileXY = 9.*cm;
99  TKRLayerDistance = 3.*cm;
100  SiliconGuardRing = 1.5*mm;
101  TKRViewsDistance = 1.*mm;
102  NbOfTKRLayers = 15;
103  NbOfTKRTiles = 4;
104  CALBarThickness = 1.5*cm;
105  NbOfCALBars = 12;
106  NbOfCALLayers = 5;
107  ACDThickness = 1.*cm;
108  NbOfACDTopTiles = 1;
110 
112  ACDTKRDistance = 5.*cm;
113  CALTKRDistance = 1.5*cm;
114 
115  //Initialize thread-local sensitive detectors
116  trackerSD.Put(0);
117  calorimeterSD.Put(0);
119 
121 
122  // create commands for interactive definition of the payload
124 
125 }
126 
127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
128 
130 { delete detectorMessenger;}
131 
132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
133 
135 {
136  DefineMaterials();
137  return ConstructPayload();
138 }
139 
140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
141 
143 {
144 
145  G4String name, symbol;
146  G4double a, z, density;
147 
148  G4int ncomponents, natoms;
149  G4double fractionmass;
150  G4double temperature, pressure;
151 
152  //
153  // define Elements
154  //
155 
156  a = 1.01*g/mole;
157  G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
158 
159  a = 12.01*g/mole;
160  G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
161 
162  a = 14.006*g/mole;
163  G4Element* N = new G4Element(name="Nitrogen" ,symbol="N" , z= 7., a);
164 
165  a = 15.99*g/mole;
166  G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
167 
168  a = 26.98*g/mole;
169  G4Element* Alumin = new G4Element(name="Aluminum" ,symbol="Al" , z= 13., a);
170 
171  a = 28.09*g/mole;
172  G4Element* Silicon = new G4Element(name="Silicon", symbol="Si", z=14., a);
173 
174  a= 55.845*g/mole;
175  G4Element* Iron = new G4Element(name="Iron", symbol="Fe", z=26.,a);
176 
177  a = 126.904*g/mole;
178  G4Element* I = new G4Element(name="Iodine" ,symbol="I" , z= 53., a);
179 
180  a = 132.905*g/mole;
181  G4Element* Cs = new G4Element(name="Cesium" ,symbol="Cs" , z= 55., a);
182 
183  a = 207.19*g/mole;
184  G4Element* Lead = new G4Element(name="Lead", symbol="Pb", z=82., a);
185 
186  //
187  // define simple materials
188  //
189 
190  density = 19.3*g/cm3;
191  a = 183.84*g/mole;
192  G4Material* W = new G4Material(name="Tungsten", z=74., a, density);
193 
194 
195  //
196  // define a material from elements. case 1: chemical molecule
197  //
198 
199  density = 1.032*g/cm3;
200  G4Material* Sci = new G4Material(name="Scintillator", density, ncomponents=2);
201  Sci->AddElement(C, natoms=9);
202  Sci->AddElement(H, natoms=10);
203 
204  density = 4.53*g/cm3;
205  G4Material* CsI = new G4Material(name="CesiumIodide", density, ncomponents=2);
206  CsI->AddElement(Cs, natoms=5);
207  CsI->AddElement(I, natoms=5);
208 
209  //
210  // define a material from elements. case 2: mixture by fractional mass
211  //
212 
213  density = 1.290*mg/cm3;
214  G4Material* Air = new G4Material(name="Air" , density, ncomponents=2);
215  Air->AddElement(N, fractionmass=0.7);
216  Air->AddElement(O, fractionmass=0.3);
217 
218  density = 2.700*g/cm3;
219  G4Material* Al = new G4Material(name="Aluminum", density, ncomponents=1);
220  Al->AddElement(Alumin, fractionmass=1.);
221 
222  density = 2.333*g/cm3;
223  G4Material* Si = new G4Material(name="Silicon", density, ncomponents=1);
224  Si->AddElement(Silicon, fractionmass=1.);
225 
226  density = 7.87*g/cm3;
227  G4Material* Fe = new G4Material(name="Iron", density, ncomponents=1);
228  Fe->AddElement(Iron, fractionmass=1.);
229 
230  density = 11.35*g/cm3;
231  G4Material* Pb = new G4Material(name="Lead", density, ncomponents=1);
232  Pb->AddElement(Lead, fractionmass=1.);
233 
234  //
235  // examples of vacuum
236  //
237 
238  density = universe_mean_density; //from PhysicalConstants.h
239  pressure = 3.e-18*pascal;
240  temperature = 2.73*kelvin;
241  G4Material* vacuum = new G4Material(name="Galactic", z=1., a=1.01*g/mole, density,kStateGas,temperature,pressure);
242 
243  density = 1.e-5*g/cm3;
244  pressure = 2.e-2*bar;
245  temperature = STP_Temperature; //from PhysicalConstants.h
246  G4Material* beam = new G4Material(name="Beam", density, ncomponents=1,
247  kStateGas,temperature,pressure);
248  beam->AddMaterial(Air, fractionmass=1.);
249 
251 
252  //default materials of the payload
253 
254  ConverterMaterial = W;
255  defaultMaterial = vacuum;
256  ACDMaterial = Sci;
257  CALMaterial = CsI;
258  TKRMaterial = Si;
259 
260 }
261 
262 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
263 
265 {
266  // complete the Payload parameters definition
268 
269  //
270  // World
271  //
272 
273  solidWorld = new G4Box("World",
275 
278  "World");
279 
281  0,false,0);
282 
283  //
284  // Payload
285  //
286 
287  /* solidPayload=0; logicPayload=0; physiPayload=0;
288  solidTKR=0;logicTKR=0;physiTKR=0;
289  solidCAL=0;logicCAL=0;physiCAL=0;
290  solidACT=0;logicACT=0;physiACT=0;
291  solidACL1=0;logicACL1=0;physiACL1=0;
292  solidACL2=0;logicACL2=0;physiACL2=0;
293  solidConverter=0;logicConverter=0;physiConverter=0;
294  solidTKRDetectorX=0;logicTKRDetectorX=0;
295  solidTKRDetectorY=0;logicTKRDetectorY=0;
296  physiTKRDetectorX=0;physiTKRDetectorY=0;
297  solidCALDetectorX=0;logicCALDetectorX=0;physiCALDetectorX=0;
298  solidCALDetectorY=0;logicCALDetectorY=0;physiCALDetectorY=0;
299  solidPlane=0;logicPlane=0;physiPlane=0;
300  aCALRegion=0; aTKRRegion=0;
301  */
302  //
303  // Payload
304  //
305 
306  solidPayload = new G4Box("Payload",
307  PayloadSizeXY/2,
308  PayloadSizeXY/2,
309  PayloadSizeZ/2);
310 
313  "Payload");
314 
315  physiPayload = new G4PVPlacement(0,
316  G4ThreeVector(),
317  "Payload",
318  logicPayload,
319  physiWorld,
320  false,
321  0);
322  //
323  // Calorimeter (CAL)
324  //
325 
326  solidCAL = new G4Box("CAL",
327  CALSizeXY/2,CALSizeXY/2,CALSizeZ/2);
328 
331  "CAL");
332  physiCAL = new G4PVPlacement(0,
333  G4ThreeVector(0,0,
334  -PayloadSizeZ/2+CALSizeZ/2),
335  "CAL",
336  logicCAL,
337  physiPayload,
338  false,
339  0);
340  //
341  // Tracker (TKR)
342  //
343 
344  solidTKR = new G4Box("TKR",
345  TKRSizeXY/2,TKRSizeXY/2,TKRSizeZ/2);
346 
349  "TKR");
350  physiTKR = new G4PVPlacement(0,
351  G4ThreeVector(0,0,
354  "TKR",
355  logicTKR,
356  physiPayload,
357  false,
358  0);
359 
360 
361  //
362  // Anticoincidence Top (ACT)
363  //
364 
365  solidACT = new G4Box("ACT",
366  ACTSizeXY/2,ACTSizeXY/2,ACTSizeZ/2);
367 
369 
370  physiACT = new G4PVPlacement(0,
371  G4ThreeVector(0,0,
375  "ACT",
376  logicACT,
377  physiPayload,
378  false,
379  0);
380 
381  //
382  // Anticoincidence Lateral Side (ACL)
383  //
384 
385  solidACL1 = new G4Box("ACL1",
386  ACL1SizeX/2,ACL1SizeY/2,ACL1SizeZ/2);
387 
389 
390  physiACL1 = new G4PVPlacement(0,
393  -PayloadSizeZ/2+ACL1SizeZ/2),
394  "ACL1",
395  logicACL1,
396  physiPayload,
397  false,
398  0);
399 
400  physiACL1 = new G4PVPlacement(0,
403  -PayloadSizeZ/2+ACL1SizeZ/2),
404  "ACL1",
405  logicACL1,
406  physiPayload,
407  false,
408  1);
409 
410  solidACL2 = new G4Box("ACL2",
411  ACL2SizeX/2,ACL2SizeY/2,ACL2SizeZ/2);
412 
414  ACDMaterial,
415  "ACL2");
416 
417 
418  physiACL2 = new G4PVPlacement(0,
421  -PayloadSizeZ/2+ACL2SizeZ/2),
422  "ACL2",
423  logicACL2,
424  physiPayload,
425  false,
426  0);
427 
428  physiACL2 = new G4PVPlacement(0,
431  -PayloadSizeZ/2+ACL2SizeZ/2),
432  "ACL2",
433  logicACL2,
434  physiPayload,
435  false,
436  1);
437 
438 
439  // Tracker Structure (Plane + Converter + TKRDetectorX + TKRDetectorY)
440 
441  solidPlane = new G4Box("Plane",
443 
446  "Plane");
447 
449  ("TKRDetectorY",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
450 
452  TKRMaterial,
453  "TKRDetector Y");
454 
455 
457  ("TKRDetectorX",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
458 
460  TKRMaterial,
461  "TKRDetector X");
462 
463 
464  solidConverter = new G4Box
465  ("Converter",TKRSizeXY/2,TKRSizeXY/2,ConverterThickness/2);
466 
469  "Converter");
470 
471  G4int i=0;
472 
473  for (i = 0; i < NbOfTKRLayers; i++)
474  {
475 
477  new G4PVPlacement(0,G4ThreeVector(0.,0.,-TKRSizeZ/2
479  +(i)*TKRLayerDistance),
480  "TKRDetectorY",
482  physiTKR,
483  false,
484  i);
485 
487  new G4PVPlacement(0,G4ThreeVector(0.,0.,
488  -TKRSizeZ/2+
492  (i)*TKRLayerDistance),
493  "TKRDetectorX",
495  physiTKR,
496  false,
497  i);
498 
499 
500  physiConverter =
501  new G4PVPlacement(0,G4ThreeVector(0.,0.,
502  -TKRSizeZ/2+
506  (i)*TKRLayerDistance),
507  "Converter",
509  physiTKR,
510  false,
511  i);
512 
513 
514 
515  physiPlane =
516  new G4PVPlacement(0,G4ThreeVector(0.,0.,
517  -TKRSizeZ/2+
522  (i)*TKRLayerDistance),
523  "Plane",
524  logicPlane,
525  physiTKR,
526  false,
527  i);
528 
529  }
530 
531 
532 
533  G4VSolid * solidTKRActiveTileX = new
534  G4Box("Active Tile X", TKRActiveTileXY/2,
536 
537 
538  G4VSolid * solidTKRActiveTileY = new
539  G4Box("Active Tile Y", TKRActiveTileXY/2,
541 
542 
543  G4LogicalVolume* logicTKRActiveTileX =
544  new G4LogicalVolume(solidTKRActiveTileX, TKRMaterial,
545  "Active Tile X",0,0,0);
546 
547 
548  G4LogicalVolume* logicTKRActiveTileY =
549  new G4LogicalVolume(solidTKRActiveTileY, TKRMaterial,
550  "Active Tile Y",0,0,0);
551 
552 
553 
554 
555  G4int j=0;
556  G4int k=0;
557 
558  G4double x=0.;
559  G4double y=0.;
560  G4double z=0.;
561 
562  for (i=0;i< NbOfTKRTiles; i++)
563  {
564  for (j=0;j< NbOfTKRTiles; j++)
565  {
566  k = i*NbOfTKRTiles + j;
567 
568 
575  z = 0.;
576 
577  new G4PVPlacement(0,
578  G4ThreeVector(x,y,z),
579  logicTKRActiveTileY,
580  "Active Tile Y",
582  false,
583  k);
584 
585 
592  z = 0.;
593 
594  new G4PVPlacement(0,
595  G4ThreeVector(x,y,z),
596  logicTKRActiveTileX,
597  "Active Tile X",
599  false,
600  k);
601 
602  }
603  }
604 
605 
606  // STRIPS (not any more in the Readout Geometry)
607 
608  // Silicon Strips
609 
610  /*
611  G4double TKRXStripX=0.;
612  G4double TKRYStripY=0.;
613  G4double TKRYStripX=0.;
614  G4double TKRXStripY=0.;
615  */
616 
620 
621 
622  G4VSolid* solidTKRStripX = new G4Box("Strip X",
624  TKRZStrip/2);
625 
626  logicTKRStripX =
627  new G4LogicalVolume(solidTKRStripX,TKRMaterial,"Strip X",0,0,0);
628 
629 
630  G4VSolid* solidTKRStripY = new G4Box("Strip Y",
632  TKRZStrip/2);
633 
634 
635  logicTKRStripY =
636  new G4LogicalVolume(solidTKRStripY,TKRMaterial,"Strip Y",0,0,0);
637 
638 
639  for (i=0;i< NbOfTKRStrips; i++)
640  {
641  new G4PVPlacement(0,
643  (i)*TKRSiliconPitch, 0., 0.),
645  "Strip X",
646  logicTKRActiveTileX,
647  false,
648  i);
649 
650 
651  new G4PVPlacement(0,
653  +TKRSiliconPitch/2 +
654  (i)*TKRSiliconPitch, 0.),
656  "Strip Y",
657  logicTKRActiveTileY,
658  false,
659  i);
660 
661 
662 
663 
664 
665  }
666 
667 
668 
669  // Calorimeter Structure (CALLayerX + CALLayerY)
670 
671 
672  solidCALLayerX = new G4Box("CALLayerX",
674 
676  CALMaterial,
677  "CALLayerX");
678 
679  solidCALLayerY = new G4Box("CALLayerY",
681 
683  CALMaterial,
684  "CALLayerY");
685 
686  for (i = 0; i < NbOfCALLayers; i++)
687  {
688 
689  physiCALLayerY =
690  new G4PVPlacement(0,G4ThreeVector(0,0,
691  -CALSizeZ/2+
692  CALBarThickness/2 +
693  (i)*2*CALBarThickness),
694  "CALLayerY",
696  physiCAL,
697  false,
698  i);
699 
700  physiCALLayerX =
701  new G4PVPlacement(0,G4ThreeVector(0,0,
702  -CALSizeZ/2+
703  CALBarThickness/2 +
704  CALBarThickness +
705  (i)*2*CALBarThickness),
706  "CALLayerX",
708  physiCAL,
709  false,
710  i);
711 
712  }
713 
714  // Calorimeter Structure (CALDetectorX + CALDetectorY)
715 
716  solidCALDetectorX = new G4Box("CALDetectorX",
718 
720  CALMaterial,
721  "CALDetectorX");
722 
723  solidCALDetectorY = new G4Box("CALDetectorY",
725 
727  CALMaterial,
728  "CALDetectorY");
729 
730  for (i = 0; i < NbOfCALBars; i++)
731  {
732 
734  new G4PVPlacement(0,
736  (i)*CALBarY, 0, 0),
738  "CALDetectorY",
740  false,
741  i);
742 
744  new G4PVPlacement(0,
745  G4ThreeVector(0,-CALSizeXY/2+ CALBarY/2 +
746  (i)*CALBarY, 0),
748  "CALDetectorX",
750  false,
751  i);
752 
753  }
754 
755 
756  // Cuts by Regions
757 
758  /*
759  G4String regName[] = {"Calorimeter","Tracker"};
760  if (aCALRegion) delete aCALRegion;
761 
762  aCALRegion = new G4Region(regName[0]);
763  logicCAL->SetRegion(aCALRegion);
764  aCALRegion->AddRootLogicalVolume(logicCAL);
765 
766  if (aTKRRegion) delete aTKRRegion;
767 
768  aTKRRegion = new G4Region(regName[1]);
769  logicTKR->SetRegion(aTKRRegion);
770  aTKRRegion->AddRootLogicalVolume(logicTKR);
771  */
772 
773 
774  //
775  // Visualization attributes
776  //
777 
778  // Invisible Volume
782  logicTKRActiveTileX->SetVisAttributes(G4VisAttributes::Invisible);
783  logicTKRActiveTileY->SetVisAttributes(G4VisAttributes::Invisible);
791 
792  // Some visualization styles
793 
794  G4VisAttributes* VisAtt1= new G4VisAttributes(G4Colour(0.3,0.8,0.1));
795  VisAtt1->SetVisibility(true);
796  VisAtt1->SetForceSolid(TRUE);
797 
798  G4VisAttributes* VisAtt2= new G4VisAttributes(G4Colour(0.2,0.3,0.8));
799  VisAtt2->SetVisibility(true);
800  VisAtt2->SetForceSolid(FALSE);
801 
802  G4VisAttributes* VisAtt3= new G4VisAttributes(G4Colour(0.8,0.2,0.3));
803  VisAtt3->SetVisibility(true);
804  VisAtt3->SetForceWireframe(TRUE);
805 
806  // Visible Volumes
807 
812  logicACT->SetVisAttributes(VisAtt3);
813  logicACL1->SetVisAttributes(VisAtt3);
814  logicACL2->SetVisAttributes(VisAtt3);
815 
816 
817  //
818  //always return the physical World
819  //
821  return physiWorld;
822 }
823 
824 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
825 
827 {
828 
829  //
830  // Sensitive Detectors - Tracker
831  //
832  if(trackerSD.Get()==0)
833  {
834  GammaRayTelTrackerSD* SD = new GammaRayTelTrackerSD("TrackerSD");
835  trackerSD.Put(SD);
836  }
837 
838  //Flags the strips as sensitive .
839 
840  if (logicTKRStripX)
842  if (logicTKRStripY)
844 
845 
846  //
847  // Sensitive Detectors: Calorimeter
848  //
849  if(calorimeterSD.Get()==0)
850  {
851  GammaRayTelCalorimeterSD* SD = new GammaRayTelCalorimeterSD("CalorimeterSD");
852  calorimeterSD.Put(SD);
853  }
854  if (logicCALDetectorX)
856  if (logicCALDetectorY)
858 
859  //
860  // Sensitive Detectors: Anticoincidence
861  //
862 
863  if(anticoincidenceSD.Get()==0)
864  {
866  ("AnticoincidenceSD");
868  }
869 
870  if (logicACT)
872  if (logicACL1)
873  SetSensitiveDetector(logicACL1,anticoincidenceSD.Get()); // ACD lateral side
874  if (logicACL2)
875  SetSensitiveDetector(logicACL2,anticoincidenceSD.Get()); // ACD lateral side
876 
877  // Create global magnetic field messenger.
878  // Uniform magnetic field is then created automatically if
879  // the field value is not zero.
880  G4ThreeVector fieldValue = G4ThreeVector();
883 
884  // Register the field messenger for deleting
886 
887  return;
888 
889 }
890 
892 {
893  G4cout << "\n------------------------------------------------------------"
894  << "\n---> The Tracker is " << NbOfTKRLayers << " layers of: "
895  << ConverterThickness/mm << "mm of " << ConverterMaterial->GetName()
896  << "\n------------------------------------------------------------\n";
897 }
898 
899 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
900 
901 
902 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
903 
905 {
906  // search the material by its name
907  G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
908  if (pttoMaterial)
909  {
910  ConverterMaterial = pttoMaterial;
911  logicConverter->SetMaterial(pttoMaterial);
913  }
914 }
915 
917 {
918  ConverterThickness = val;
919 }
920 
921 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
922 
924 {
925  TKRSiliconThickness = val;
926 }
927 
928 
930 {
931  TKRSiliconPitch = val;
932 }
933 
934 
936 {
937  TKRSiliconTileXY = val;
938 }
939 
940 
942 {
943  NbOfTKRLayers = val;
944 }
945 
946 
948 {
949  NbOfTKRTiles = val;
950 }
951 
953 {
954  TKRLayerDistance = val;
955 }
956 
958 {
959  TKRViewsDistance = val;
960 }
961 
962 
963 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
964 
966 {
967  NbOfCALLayers = val;
968 }
969 
971 {
972  NbOfCALBars = val;
973 }
974 
976 {
977  CALBarThickness = val;
978 }
979 
980 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
981 
983 {
984  ACDThickness = val;
985 }
986 
987 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
988 
990 {
991  // Just invoke manually the MT-safe command
992  // /globalField/setValue
993  // instantiated by the GlobalFieldMessenger
994  std::stringstream sss;
995  sss << "/globalField/setValue 0 0 " << fieldValue/tesla << " tesla";
996 
997  G4String command = sss.str();
998  G4cout << "Going to execute: " << command << G4endl;
999 
1000  G4UImanager* UImanager = G4UImanager::GetUIpointer();
1001  UImanager->ApplyCommand(command);
1002 
1003 }
1004 
1005 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1006 
1008 {
1009  // delete payloadSD;
1013 
1015 
1016 }
1017 
1018 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1019 
1020 
1021 
1022 
1023 
1024 
1025 
1026 
1027 
1028 
1029 
1030 
1031 
1032 
1033 
1034 
1035 
static const double cm
Definition: G4SIunits.hh:118
static G4ThreadLocal G4GlobalMagFieldMessenger * fMagFieldMessenger
void SetVerboseLevel(G4int verboseLevel)
G4String symbol
Definition: TRTMaterials.hh:40
void SetForceWireframe(G4bool)
G4Material * Air
Definition: TRTMaterials.hh:57
void UpdateMaterialList(G4VPhysicalVolume *currentWorld=0)
CLHEP::Hep3Vector G4ThreeVector
void AddMaterial(G4Material *material, G4double fraction)
Definition: G4Material.cc:469
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
Definition: G4Material.cc:604
G4double z
Definition: TRTMaterials.hh:39
Definition: G4Box.hh:64
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetName() const
Definition: G4Material.hh:178
void SetVisibility(G4bool)
value_type & Get() const
Definition: G4Cache.hh:282
static G4MaterialTable * GetMaterialTable()
Definition: G4Material.cc:589
G4double a
Definition: TRTMaterials.hh:39
double C(double temp)
static const double mg
Definition: G4SIunits.hh:181
void SetForceSolid(G4bool)
#define G4ThreadLocal
Definition: tls.hh:89
int G4int
Definition: G4Types.hh:78
virtual void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:58
static G4RegionStore * GetInstance()
G4double density
Definition: TRTMaterials.hh:39
G4Cache< GammaRayTelAnticoincidenceSD * > anticoincidenceSD
void Register(T *inst)
Definition: G4AutoDelete.hh:65
G4GLOB_DLL std::ostream G4cout
void PhysicsHasBeenModified()
#define FALSE
Definition: globals.hh:52
G4Material * Si
Definition: TRTMaterials.hh:78
static const double cm3
Definition: G4SIunits.hh:120
#define TRUE
Definition: globals.hh:55
static const double bar
Definition: G4SIunits.hh:233
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void ReinitializeGeometry(G4bool destroyFirst=false, G4bool prop=true)
static const double kelvin
Definition: G4SIunits.hh:278
#define pascal
Definition: G4SIunits.hh:231
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
static const double micrometer
Definition: G4SIunits.hh:99
static const char sss[MAX_N_PAR+2]
Definition: Evaluator.cc:64
static const double g
Definition: G4SIunits.hh:180
G4Cache< GammaRayTelCalorimeterSD * > calorimeterSD
const G4double x[NPOINTSGL]
static const G4VisAttributes Invisible
static const double mole
Definition: G4SIunits.hh:283
#define G4endl
Definition: G4ios.hh:61
void AddElement(G4Element *element, G4int nAtoms)
Definition: G4Material.cc:364
static const double tesla
Definition: G4SIunits.hh:265
double G4double
Definition: G4Types.hh:76
void SetMaterial(G4Material *pMaterial)
void Put(const value_type &val) const
Definition: G4Cache.hh:286
static const double mm
Definition: G4SIunits.hh:114
void SetVisAttributes(const G4VisAttributes *pVA)
G4Cache< GammaRayTelTrackerSD * > trackerSD
G4Material * Al
Definition: TRTMaterials.hh:74
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:446
GammaRayTelDetectorMessenger * detectorMessenger