72 :solidWorld(0),logicWorld(0),physiWorld(0),
73 solidPayload(0),logicPayload(0),physiPayload(0),
74 solidTKR(0),logicTKR(0),physiTKR(0),
75 solidCAL(0),logicCAL(0),physiCAL(0),
76 solidACT(0),logicACT(0),physiACT(0),
77 solidACL1(0),logicACL1(0),physiACL1(0),
78 solidACL2(0),logicACL2(0),physiACL2(0),
79 solidTKRDetectorX(0),logicTKRDetectorX(0),physiTKRDetectorX(0),
80 solidTKRDetectorY(0),logicTKRDetectorY(0),physiTKRDetectorY(0),
81 solidCALLayerX(0),logicCALLayerX(0),physiCALLayerX(0),
82 solidCALLayerY(0),logicCALLayerY(0),physiCALLayerY(0),
83 solidCALDetectorX(0),logicCALDetectorX(0),physiCALDetectorX(0),
84 solidCALDetectorY(0),logicCALDetectorY(0),physiCALDetectorY(0),
85 solidPlane(0),logicPlane(0),physiPlane(0),
86 solidConverter(0),logicConverter(0),physiConverter(0),
87 trackerSD(0),calorimeterSD(0),anticoincidenceSD(0)
94 TKRSiliconTileXY = 9.*
cm;
96 TKRLayerDistance = 3.*
cm;
97 SiliconGuardRing = 1.5*
mm;
98 TKRViewsDistance = 1.*
mm;
101 CALBarThickness = 1.5*
cm;
104 ACDThickness = 1.*
cm;
106 NbOfACDLateralTiles = 2;
109 ACDTKRDistance = 5.*
cm;
110 CALTKRDistance = 1.5*
cm;
112 ComputePayloadParameters();
122 {
delete detectorMessenger;}
129 return ConstructPayload();
134 void GammaRayTelDetectorConstruction::DefineMaterials()
140 G4int ncomponents, natoms;
182 density = 19.3*
g/
cm3;
191 density = 1.032*
g/
cm3;
196 density = 4.53*
g/
cm3;
205 density = 1.290*
mg/
cm3;
210 density = 2.700*
g/
cm3;
214 density = 2.333*
g/
cm3;
218 density = 7.87*
g/
cm3;
222 density = 11.35*
g/
cm3;
232 temperature = 2.73*
kelvin;
235 density = 1.e-5*
g/
cm3;
236 pressure = 2.e-2*
bar;
246 ConverterMaterial = W;
247 defaultMaterial = vacuum;
259 ComputePayloadParameters();
265 solidWorld =
new G4Box(
"World",
266 WorldSizeXY/2,WorldSizeXY/2,WorldSizeZ/2);
298 solidPayload =
new G4Box(
"Payload",
318 solidCAL =
new G4Box(
"CAL",
319 CALSizeXY/2,CALSizeXY/2,CALSizeZ/2);
326 -PayloadSizeZ/2+CALSizeZ/2),
336 solidTKR =
new G4Box(
"TKR",
337 TKRSizeXY/2,TKRSizeXY/2,TKRSizeZ/2);
344 -PayloadSizeZ/2+CALSizeZ+
345 CALTKRDistance+TKRSizeZ/2),
357 solidACT =
new G4Box(
"ACT",
358 ACTSizeXY/2,ACTSizeXY/2,ACTSizeZ/2);
364 -PayloadSizeZ/2+CALSizeZ+
365 CALTKRDistance+TKRSizeZ+
366 ACDTKRDistance+ACTSizeZ/2),
377 solidACL1 =
new G4Box(
"ACL1",
378 ACL1SizeX/2,ACL1SizeY/2,ACL1SizeZ/2);
384 -PayloadSizeXY/2+ACL1SizeY/2,
385 -PayloadSizeZ/2+ACL1SizeZ/2),
394 PayloadSizeXY/2-ACL1SizeY/2,
395 -PayloadSizeZ/2+ACL1SizeZ/2),
402 solidACL2 =
new G4Box(
"ACL2",
403 ACL2SizeX/2,ACL2SizeY/2,ACL2SizeZ/2);
412 PayloadSizeXY/2-ACL2SizeY/2,
413 -PayloadSizeZ/2+ACL2SizeZ/2),
422 -PayloadSizeXY/2+ACL2SizeY/2,
423 -PayloadSizeZ/2+ACL2SizeZ/2),
433 solidPlane =
new G4Box(
"Plane",
434 TKRSizeXY/2,TKRSizeXY/2,TKRSupportThickness/2);
440 solidTKRDetectorY =
new G4Box
441 (
"TKRDetectorY",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
448 solidTKRDetectorX =
new G4Box
449 (
"TKRDetectorX",TKRSizeXY/2,TKRSizeXY/2,TKRSiliconThickness/2);
456 solidConverter =
new G4Box
457 (
"Converter",TKRSizeXY/2,TKRSizeXY/2,ConverterThickness/2);
465 for (i = 0; i < NbOfTKRLayers; i++)
470 +TKRSiliconThickness/2
471 +(i)*TKRLayerDistance),
481 TKRSiliconThickness/2 +
484 (i)*TKRLayerDistance),
495 2*TKRSiliconThickness +
497 ConverterThickness/2+
498 (i)*TKRLayerDistance),
510 2*TKRSiliconThickness +
513 TKRSupportThickness/2+
514 (i)*TKRLayerDistance),
525 G4VSolid * solidTKRActiveTileX =
new
526 G4Box(
"Active Tile X", TKRActiveTileXY/2,
527 TKRActiveTileXY/2,TKRActiveTileZ/2);
530 G4VSolid * solidTKRActiveTileY =
new
531 G4Box(
"Active Tile Y", TKRActiveTileXY/2,
532 TKRActiveTileXY/2,TKRActiveTileZ/2);
537 "Active Tile X",0,0,0);
542 "Active Tile Y",0,0,0);
552 for (i=0;i< NbOfTKRTiles; i++)
554 for (j=0;j< NbOfTKRTiles; j++)
556 k = i*NbOfTKRTiles + j;
559 x = -TKRSizeXY/2+TilesSeparation+SiliconGuardRing+
560 TKRActiveTileXY/2+(i)*((2*SiliconGuardRing)+
561 TilesSeparation+TKRActiveTileXY);
562 y = -TKRSizeXY/2+TilesSeparation+SiliconGuardRing+
563 TKRActiveTileXY/2+(j)*((2*SiliconGuardRing)+TilesSeparation+
576 x = -TKRSizeXY/2+TilesSeparation+SiliconGuardRing+
577 TKRActiveTileXY/2+(j)*((2*SiliconGuardRing)+
578 TilesSeparation+TKRActiveTileXY);
579 y = -TKRSizeXY/2+TilesSeparation+SiliconGuardRing+
580 TKRActiveTileXY/2+(i)*((2*SiliconGuardRing)+
581 TilesSeparation+TKRActiveTileXY);
599 solidCALLayerX =
new G4Box(
"CALLayerX",
600 CALSizeXY/2,CALSizeXY/2,CALBarThickness/2);
606 solidCALLayerY =
new G4Box(
"CALLayerY",
607 CALSizeXY/2,CALSizeXY/2,CALBarThickness/2);
613 for (i = 0; i < NbOfCALLayers; i++)
620 (i)*2*CALBarThickness),
632 (i)*2*CALBarThickness),
643 solidCALDetectorX =
new G4Box(
"CALDetectorX",
644 CALBarX/2,CALBarY/2,CALBarThickness/2);
650 solidCALDetectorY =
new G4Box(
"CALDetectorY",
651 CALBarY/2,CALBarX/2,CALBarThickness/2);
657 for (i = 0; i < NbOfCALBars; i++)
716 G4String ROgeometryName =
"TrackerROGeom";
723 if (logicTKRActiveTileX)
725 if (logicTKRActiveTileY)
740 if (logicCALDetectorX)
742 if (logicCALDetectorY)
749 if(!anticoincidenceSD)
752 (
"AnticoincidenceSD");
815 G4cout <<
"\n------------------------------------------------------------"
816 <<
"\n---> The Tracker is " << NbOfTKRLayers <<
" layers of: "
817 << ConverterThickness/
mm <<
"mm of " << ConverterMaterial->
GetName()
818 <<
"\n------------------------------------------------------------\n";
832 ConverterMaterial = pttoMaterial;
840 ConverterThickness = val;
847 TKRSiliconThickness = val;
853 TKRSiliconPitch = val;
859 TKRSiliconTileXY = val;
876 TKRLayerDistance = val;
881 TKRViewsDistance = val;
899 CALBarThickness = val;
917 if(magField)
delete magField;
void SetNbOfCALLayers(G4int)
~GammaRayTelDetectorConstruction()
void SetForceWireframe(G4bool)
void UpdateMaterialList(G4VPhysicalVolume *currentWorld=0)
void SetNbOfTKRLayers(G4int)
CLHEP::Hep3Vector G4ThreeVector
void SetCALBarThickness(G4double)
G4bool SetDetectorField(G4Field *detectorField)
void SetTKRSiliconThickness(G4double)
void AddMaterial(G4Material *material, G4double fraction)
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
int universe_mean_density
const G4String & GetName() const
void SetVisibility(G4bool)
static G4MaterialTable * GetMaterialTable()
void SetTKRViewsDistance(G4double)
void SetForceSolid(G4bool)
void SetTKRSiliconPitch(G4double)
void SetNbOfCALBars(G4int)
virtual void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
void SetConverterMaterial(G4String)
static G4RegionStore * GetInstance()
G4GLOB_DLL std::ostream G4cout
void SetTKRLayerDistance(G4double)
void PhysicsHasBeenModified()
void SetROgeometry(G4VReadOutGeometry *value)
void PrintPayloadParameters()
void SetNbOfTKRTiles(G4int)
GammaRayTelDetectorConstruction()
void SetTKRTileSizeXY(G4double)
static G4TransportationManager * GetTransportationManager()
void AddNewDetector(G4VSensitiveDetector *aSD)
G4FieldManager * GetFieldManager() const
static G4RunManager * GetRunManager()
static G4SDManager * GetSDMpointer()
static const G4VisAttributes Invisible
void SetMagField(G4double)
void AddElement(G4Element *element, G4int nAtoms)
G4VPhysicalVolume * Construct()
void CreateChordFinder(G4MagneticField *detectorMagField)
void SetMaterial(G4Material *pMaterial)
void SetVisAttributes(const G4VisAttributes *pVA)
void SetSensitiveDetector(G4VSensitiveDetector *pSDetector)
void SetConverterThickness(G4double)
void SetACDThickness(G4double)