ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GammaRayTelDetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GammaRayTelDetectorConstruction.cc
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 // ------------------------------------------------------------
28 // GEANT 4 class implementation file
29 // CERN Geneva Switzerland
30 //
31 //
32 // ------------ GammaRayTelDetectorConstruction ------
33 // by F.Longo, R.Giannitrapani & G.Santin (13 nov 2000)
34 //
35 // ************************************************************
36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
38 
41 
42 #include "GammaRayTelTrackerSD.hh"
43 
46 
47 #include "G4PhysicalConstants.hh"
48 #include "G4SystemOfUnits.hh"
49 #include "G4Material.hh"
50 #include "G4Box.hh"
51 #include "G4LogicalVolume.hh"
52 #include "G4PVPlacement.hh"
53 #include "G4PVReplica.hh"
54 #include "G4UniformMagField.hh"
55 #include "G4FieldManager.hh"
57 #include "G4SDManager.hh"
58 #include "G4RunManager.hh"
60 #include "G4AutoDelete.hh"
61 #include "G4VisAttributes.hh"
62 #include "G4Colour.hh"
63 #include "G4UImanager.hh"
64 
65 
66 #include "G4RegionStore.hh"
67 
70 
71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
72 
74  :solidWorld(0),logicWorld(0),physiWorld(0),
75  solidPayload(0),logicPayload(0),physiPayload(0),
76  solidTKR(0),logicTKR(0),physiTKR(0),
77  solidCAL(0),logicCAL(0),physiCAL(0),
78  solidACT(0),logicACT(0),physiACT(0),
79  solidACL1(0),logicACL1(0),physiACL1(0),
80  solidACL2(0),logicACL2(0),physiACL2(0),
81  solidTKRDetectorX(0),logicTKRDetectorX(0),physiTKRDetectorX(0),
82  solidTKRDetectorY(0),logicTKRDetectorY(0),physiTKRDetectorY(0),
83  solidCALLayerX(0),logicCALLayerX(0),physiCALLayerX(0),
84  solidCALLayerY(0),logicCALLayerY(0),physiCALLayerY(0),
85  solidCALDetectorX(0),logicCALDetectorX(0),physiCALDetectorX(0),
86  solidCALDetectorY(0),logicCALDetectorY(0),physiCALDetectorY(0),
87  solidPlane(0),logicPlane(0),physiPlane(0),
88  solidConverter(0),logicConverter(0),physiConverter(0),
89  logicTKRStripX(0),logicTKRStripY(0)
90  // aTKRRegion(0), aCALRegion(0)
91 {
92  // default parameter values of the payload
93 
96  TKRSiliconTileXY = 9.*cm;
98  TKRLayerDistance = 3.*cm;
99  SiliconGuardRing = 1.5*mm;
100  TKRViewsDistance = 1.*mm;
101  NbOfTKRLayers = 15;
102  NbOfTKRTiles = 4;
103  CALBarThickness = 1.5*cm;
104  NbOfCALBars = 12;
105  NbOfCALLayers = 5;
106  ACDThickness = 1.*cm;
107  NbOfACDTopTiles = 1;
109 
111  ACDTKRDistance = 5.*cm;
112  CALTKRDistance = 1.5*cm;
113 
114  //Initialize thread-local sensitive detectors
115  trackerSD.Put(0);
116  calorimeterSD.Put(0);
118 
120 
121  // create commands for interactive definition of the payload
123 
124 }
125 
126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
127 
129 { delete detectorMessenger;}
130 
131 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
132 
134 {
135  DefineMaterials();
136  return ConstructPayload();
137 }
138 
139 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
140 
142 {
143 
144  G4String name, symbol;
145  G4double a, z, density;
146 
147  G4int ncomponents, natoms;
148  G4double fractionmass;
149  G4double temperature, pressure;
150 
151  //
152  // define Elements
153  //
154 
155  a = 1.01*g/mole;
156  G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
157 
158  a = 12.01*g/mole;
159  G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
160 
161  a = 14.006*g/mole;
162  G4Element* N = new G4Element(name="Nitrogen" ,symbol="N" , z= 7., a);
163 
164  a = 15.99*g/mole;
165  G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
166 
167  a = 26.98*g/mole;
168  G4Element* Alumin = new G4Element(name="Aluminum" ,symbol="Al" , z= 13., a);
169 
170  a = 28.09*g/mole;
171  G4Element* Silicon = new G4Element(name="Silicon", symbol="Si", z=14., a);
172 
173  a= 55.845*g/mole;
174  G4Element* Iron = new G4Element(name="Iron", symbol="Fe", z=26.,a);
175 
176  a = 126.904*g/mole;
177  G4Element* I = new G4Element(name="Iodine" ,symbol="I" , z= 53., a);
178 
179  a = 132.905*g/mole;
180  G4Element* Cs = new G4Element(name="Cesium" ,symbol="Cs" , z= 55., a);
181 
182  a = 207.19*g/mole;
183  G4Element* Lead = new G4Element(name="Lead", symbol="Pb", z=82., a);
184 
185  //
186  // define simple materials
187  //
188 
189  density = 19.3*g/cm3;
190  a = 183.84*g/mole;
191  G4Material* W = new G4Material(name="Tungsten", z=74., a, density);
192 
193 
194  //
195  // define a material from elements. case 1: chemical molecule
196  //
197 
198  density = 1.032*g/cm3;
199  G4Material* Sci = new G4Material(name="Scintillator", density, ncomponents=2);
200  Sci->AddElement(C, natoms=9);
201  Sci->AddElement(H, natoms=10);
202 
203  density = 4.53*g/cm3;
204  G4Material* CsI = new G4Material(name="CesiumIodide", density, ncomponents=2);
205  CsI->AddElement(Cs, natoms=5);
206  CsI->AddElement(I, natoms=5);
207 
208  //
209  // define a material from elements. case 2: mixture by fractional mass
210  //
211 
212  density = 1.290*mg/cm3;
213  G4Material* Air = new G4Material(name="Air" , density, ncomponents=2);
214  Air->AddElement(N, fractionmass=0.7);
215  Air->AddElement(O, fractionmass=0.3);
216 
217  density = 2.700*g/cm3;
218  G4Material* Al = new G4Material(name="Aluminum", density, ncomponents=1);
219  Al->AddElement(Alumin, fractionmass=1.);
220 
221  density = 2.333*g/cm3;
222  G4Material* Si = new G4Material(name="Silicon", density, ncomponents=1);
223  Si->AddElement(Silicon, fractionmass=1.);
224 
225  density = 7.87*g/cm3;
226  G4Material* Fe = new G4Material(name="Iron", density, ncomponents=1);
227  Fe->AddElement(Iron, fractionmass=1.);
228 
229  density = 11.35*g/cm3;
230  G4Material* Pb = new G4Material(name="Lead", density, ncomponents=1);
231  Pb->AddElement(Lead, fractionmass=1.);
232 
233  //
234  // examples of vacuum
235  //
236 
237  density = universe_mean_density; //from PhysicalConstants.h
238  pressure = 3.e-18*pascal;
239  temperature = 2.73*kelvin;
240  G4Material* vacuum = new G4Material(name="Galactic", z=1., a=1.01*g/mole, density,kStateGas,temperature,pressure);
241 
242  density = 1.e-5*g/cm3;
243  pressure = 2.e-2*bar;
244  temperature = STP_Temperature; //from PhysicalConstants.h
245  G4Material* beam = new G4Material(name="Beam", density, ncomponents=1,
246  kStateGas,temperature,pressure);
247  beam->AddMaterial(Air, fractionmass=1.);
248 
250 
251  //default materials of the payload
252 
253  ConverterMaterial = W;
254  defaultMaterial = vacuum;
255  ACDMaterial = Sci;
256  CALMaterial = CsI;
257  TKRMaterial = Si;
258 
259 }
260 
261 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
262 
264 {
265  // complete the Payload parameters definition
267 
268  //
269  // World
270  //
271 
272  solidWorld = new G4Box("World",
274 
277  "World");
278 
280  0,false,0);
281 
282  //
283  // Payload
284  //
285 
286  /* solidPayload=0; logicPayload=0; physiPayload=0;
287  solidTKR=0;logicTKR=0;physiTKR=0;
288  solidCAL=0;logicCAL=0;physiCAL=0;
289  solidACT=0;logicACT=0;physiACT=0;
290  solidACL1=0;logicACL1=0;physiACL1=0;
291  solidACL2=0;logicACL2=0;physiACL2=0;
292  solidConverter=0;logicConverter=0;physiConverter=0;
293  solidTKRDetectorX=0;logicTKRDetectorX=0;
294  solidTKRDetectorY=0;logicTKRDetectorY=0;
295  physiTKRDetectorX=0;physiTKRDetectorY=0;
296  solidCALDetectorX=0;logicCALDetectorX=0;physiCALDetectorX=0;
297  solidCALDetectorY=0;logicCALDetectorY=0;physiCALDetectorY=0;
298  solidPlane=0;logicPlane=0;physiPlane=0;
299  aCALRegion=0; aTKRRegion=0;
300  */
301  //
302  // Payload
303  //
304 
305  solidPayload = new G4Box("Payload",
306  PayloadSizeXY/2,
307  PayloadSizeXY/2,
308  PayloadSizeZ/2);
309 
312  "Payload");
313 
314  physiPayload = new G4PVPlacement(0,
315  G4ThreeVector(),
316  "Payload",
317  logicPayload,
318  physiWorld,
319  false,
320  0);
321  //
322  // Calorimeter (CAL)
323  //
324 
325  solidCAL = new G4Box("CAL",
326  CALSizeXY/2,CALSizeXY/2,CALSizeZ/2);
327 
330  "CAL");
331  physiCAL = new G4PVPlacement(0,
332  G4ThreeVector(0,0,
333  -PayloadSizeZ/2+CALSizeZ/2),
334  "CAL",
335  logicCAL,
336  physiPayload,
337  false,
338  0);
339  //
340  // Tracker (TKR)
341  //
342 
343  solidTKR = new G4Box("TKR",
344  TKRSizeXY/2,TKRSizeXY/2,TKRSizeZ/2);
345 
348  "TKR");
349  physiTKR = new G4PVPlacement(0,
350  G4ThreeVector(0,0,
353  "TKR",
354  logicTKR,
355  physiPayload,
356  false,
357  0);
358 
359 
360  //
361  // Anticoincidence Top (ACT)
362  //
363 
364  solidACT = new G4Box("ACT",
365  ACTSizeXY/2,ACTSizeXY/2,ACTSizeZ/2);
366 
368 
369  physiACT = new G4PVPlacement(0,
370  G4ThreeVector(0,0,
374  "ACT",
375  logicACT,
376  physiPayload,
377  false,
378  0);
379 
380  //
381  // Anticoincidence Lateral Side (ACL)
382  //
383 
384  solidACL1 = new G4Box("ACL1",
385  ACL1SizeX/2,ACL1SizeY/2,ACL1SizeZ/2);
386 
388 
389  physiACL1 = new G4PVPlacement(0,
392  -PayloadSizeZ/2+ACL1SizeZ/2),
393  "ACL1",
394  logicACL1,
395  physiPayload,
396  false,
397  0);
398 
399  physiACL1 = new G4PVPlacement(0,
402  -PayloadSizeZ/2+ACL1SizeZ/2),
403  "ACL1",
404  logicACL1,
405  physiPayload,
406  false,
407  1);
408 
409  solidACL2 = new G4Box("ACL2",
410  ACL2SizeX/2,ACL2SizeY/2,ACL2SizeZ/2);
411 
413  ACDMaterial,
414  "ACL2");
415 
416 
417  physiACL2 = new G4PVPlacement(0,
420  -PayloadSizeZ/2+ACL2SizeZ/2),
421  "ACL2",
422  logicACL2,
423  physiPayload,
424  false,
425  0);
426 
427  physiACL2 = new G4PVPlacement(0,
430  -PayloadSizeZ/2+ACL2SizeZ/2),
431  "ACL2",
432  logicACL2,
433  physiPayload,
434  false,
435  1);
436 
437 
438  // Tracker Structure (Plane + Converter + TKRDetectorX + TKRDetectorY)
439 
440  solidPlane = new G4Box("Plane",
442 
445  "Plane");
446 
448  ("TKRDetectorY",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
449 
451  TKRMaterial,
452  "TKRDetector Y");
453 
454 
456  ("TKRDetectorX",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
457 
459  TKRMaterial,
460  "TKRDetector X");
461 
462 
463  solidConverter = new G4Box
464  ("Converter",TKRSizeXY/2,TKRSizeXY/2,ConverterThickness/2);
465 
468  "Converter");
469 
470  G4int i=0;
471 
472  for (i = 0; i < NbOfTKRLayers; i++)
473  {
474 
476  new G4PVPlacement(0,G4ThreeVector(0.,0.,-TKRSizeZ/2
478  +(i)*TKRLayerDistance),
479  "TKRDetectorY",
481  physiTKR,
482  false,
483  i);
484 
486  new G4PVPlacement(0,G4ThreeVector(0.,0.,
487  -TKRSizeZ/2+
491  (i)*TKRLayerDistance),
492  "TKRDetectorX",
494  physiTKR,
495  false,
496  i);
497 
498 
499  physiConverter =
500  new G4PVPlacement(0,G4ThreeVector(0.,0.,
501  -TKRSizeZ/2+
505  (i)*TKRLayerDistance),
506  "Converter",
508  physiTKR,
509  false,
510  i);
511 
512 
513 
514  physiPlane =
515  new G4PVPlacement(0,G4ThreeVector(0.,0.,
516  -TKRSizeZ/2+
521  (i)*TKRLayerDistance),
522  "Plane",
523  logicPlane,
524  physiTKR,
525  false,
526  i);
527 
528  }
529 
530 
531 
532  G4VSolid * solidTKRActiveTileX = new
533  G4Box("Active Tile X", TKRActiveTileXY/2,
535 
536 
537  G4VSolid * solidTKRActiveTileY = new
538  G4Box("Active Tile Y", TKRActiveTileXY/2,
540 
541 
542  G4LogicalVolume* logicTKRActiveTileX =
543  new G4LogicalVolume(solidTKRActiveTileX, TKRMaterial,
544  "Active Tile X",0,0,0);
545 
546 
547  G4LogicalVolume* logicTKRActiveTileY =
548  new G4LogicalVolume(solidTKRActiveTileY, TKRMaterial,
549  "Active Tile Y",0,0,0);
550 
551 
552 
553 
554  G4int j=0;
555  G4int k=0;
556 
557  G4double x=0.;
558  G4double y=0.;
559  G4double z=0.;
560 
561  for (i=0;i< NbOfTKRTiles; i++)
562  {
563  for (j=0;j< NbOfTKRTiles; j++)
564  {
565  k = i*NbOfTKRTiles + j;
566 
567 
574  z = 0.;
575 
576  new G4PVPlacement(0,
577  G4ThreeVector(x,y,z),
578  logicTKRActiveTileY,
579  "Active Tile Y",
581  false,
582  k);
583 
584 
591  z = 0.;
592 
593  new G4PVPlacement(0,
594  G4ThreeVector(x,y,z),
595  logicTKRActiveTileX,
596  "Active Tile X",
598  false,
599  k);
600 
601  }
602  }
603 
604 
605  // STRIPS (not any more in the Readout Geometry)
606 
607  // Silicon Strips
608 
609  /*
610  G4double TKRXStripX=0.;
611  G4double TKRYStripY=0.;
612  G4double TKRYStripX=0.;
613  G4double TKRXStripY=0.;
614  */
615 
619 
620 
621  G4VSolid* solidTKRStripX = new G4Box("Strip X",
623  TKRZStrip/2);
624 
625  logicTKRStripX =
626  new G4LogicalVolume(solidTKRStripX,TKRMaterial,"Strip X",0,0,0);
627 
628 
629  G4VSolid* solidTKRStripY = new G4Box("Strip Y",
631  TKRZStrip/2);
632 
633 
634  logicTKRStripY =
635  new G4LogicalVolume(solidTKRStripY,TKRMaterial,"Strip Y",0,0,0);
636 
637 
638  for (i=0;i< NbOfTKRStrips; i++)
639  {
640  new G4PVPlacement(0,
642  (i)*TKRSiliconPitch, 0., 0.),
644  "Strip X",
645  logicTKRActiveTileX,
646  false,
647  i);
648 
649 
650  new G4PVPlacement(0,
652  +TKRSiliconPitch/2 +
653  (i)*TKRSiliconPitch, 0.),
655  "Strip Y",
656  logicTKRActiveTileY,
657  false,
658  i);
659 
660 
661 
662 
663 
664  }
665 
666 
667 
668  // Calorimeter Structure (CALLayerX + CALLayerY)
669 
670 
671  solidCALLayerX = new G4Box("CALLayerX",
673 
675  CALMaterial,
676  "CALLayerX");
677 
678  solidCALLayerY = new G4Box("CALLayerY",
680 
682  CALMaterial,
683  "CALLayerY");
684 
685  for (i = 0; i < NbOfCALLayers; i++)
686  {
687 
688  physiCALLayerY =
689  new G4PVPlacement(0,G4ThreeVector(0,0,
690  -CALSizeZ/2+
691  CALBarThickness/2 +
692  (i)*2*CALBarThickness),
693  "CALLayerY",
695  physiCAL,
696  false,
697  i);
698 
699  physiCALLayerX =
700  new G4PVPlacement(0,G4ThreeVector(0,0,
701  -CALSizeZ/2+
702  CALBarThickness/2 +
703  CALBarThickness +
704  (i)*2*CALBarThickness),
705  "CALLayerX",
707  physiCAL,
708  false,
709  i);
710 
711  }
712 
713  // Calorimeter Structure (CALDetectorX + CALDetectorY)
714 
715  solidCALDetectorX = new G4Box("CALDetectorX",
717 
719  CALMaterial,
720  "CALDetectorX");
721 
722  solidCALDetectorY = new G4Box("CALDetectorY",
724 
726  CALMaterial,
727  "CALDetectorY");
728 
729  for (i = 0; i < NbOfCALBars; i++)
730  {
731 
733  new G4PVPlacement(0,
735  (i)*CALBarY, 0, 0),
737  "CALDetectorY",
739  false,
740  i);
741 
743  new G4PVPlacement(0,
744  G4ThreeVector(0,-CALSizeXY/2+ CALBarY/2 +
745  (i)*CALBarY, 0),
747  "CALDetectorX",
749  false,
750  i);
751 
752  }
753 
754 
755  // Cuts by Regions
756 
757  /*
758  G4String regName[] = {"Calorimeter","Tracker"};
759  if (aCALRegion) delete aCALRegion;
760 
761  aCALRegion = new G4Region(regName[0]);
762  logicCAL->SetRegion(aCALRegion);
763  aCALRegion->AddRootLogicalVolume(logicCAL);
764 
765  if (aTKRRegion) delete aTKRRegion;
766 
767  aTKRRegion = new G4Region(regName[1]);
768  logicTKR->SetRegion(aTKRRegion);
769  aTKRRegion->AddRootLogicalVolume(logicTKR);
770  */
771 
772 
773  //
774  // Visualization attributes
775  //
776 
777  // Invisible Volume
781  logicTKRActiveTileX->SetVisAttributes(G4VisAttributes::GetInvisible());
782  logicTKRActiveTileY->SetVisAttributes(G4VisAttributes::GetInvisible());
790 
791  // Some visualization styles
792 
793  G4VisAttributes* VisAtt1= new G4VisAttributes(G4Colour(0.3,0.8,0.1));
794  VisAtt1->SetVisibility(true);
795  VisAtt1->SetForceSolid(TRUE);
796 
797  G4VisAttributes* VisAtt2= new G4VisAttributes(G4Colour(0.2,0.3,0.8));
798  VisAtt2->SetVisibility(true);
799  VisAtt2->SetForceSolid(FALSE);
800 
801  G4VisAttributes* VisAtt3= new G4VisAttributes(G4Colour(0.8,0.2,0.3));
802  VisAtt3->SetVisibility(true);
803  VisAtt3->SetForceWireframe(TRUE);
804 
805  // Visible Volumes
806 
811  logicACT->SetVisAttributes(VisAtt3);
812  logicACL1->SetVisAttributes(VisAtt3);
813  logicACL2->SetVisAttributes(VisAtt3);
814 
815 
816  //
817  //always return the physical World
818  //
820  return physiWorld;
821 }
822 
823 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
824 
826 {
827 
828  //
829  // Sensitive Detectors - Tracker
830  //
831  if(trackerSD.Get()==0)
832  {
833  GammaRayTelTrackerSD* SD = new GammaRayTelTrackerSD("TrackerSD");
834  trackerSD.Put(SD);
835  }
836 
838  //Flags the strips as sensitive .
839  if (logicTKRStripX)
841  if (logicTKRStripY)
843 
844 
845  //
846  // Sensitive Detectors: Calorimeter
847  //
848  if(calorimeterSD.Get()==0)
849  {
850  GammaRayTelCalorimeterSD* SD = new GammaRayTelCalorimeterSD("CalorimeterSD");
851  calorimeterSD.Put(SD);
852  }
854  if (logicCALDetectorX)
856  if (logicCALDetectorY)
858 
859  //
860  // Sensitive Detectors: Anticoincidence
861  //
862 
863  if(anticoincidenceSD.Get()==0)
864  {
866  ("AnticoincidenceSD");
868  }
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