FDsimG4Mercedes.cc
Go to the documentation of this file.
1 #include "FDsimG4Mercedes.hh"
3 #include "FDsimG4MercedesSD.hh"
4 #include "FDsimG4Colours.hh"
5 #include "G4UnitsTable.hh"
6 #include "G4IntersectionSolid.hh"
7 #include "G4Box.hh"
8 #include "G4RunManager.hh"
9 #include "G4SDManager.hh"
10 #include "G4OpticalSurface.hh"
11 #include "G4LogicalBorderSurface.hh"
12 #include "G4LogicalSkinSurface.hh"
13 #include "G4Material.hh"
14 #include "G4MaterialTable.hh"
15 #include "G4Tubs.hh"
16 #include "G4Cons.hh"
17 #include "G4Trap.hh"
18 #include "G4Polyhedra.hh"
19 #include "G4UnionSolid.hh"
20 #include "G4LogicalVolume.hh"
21 #include "G4ThreeVector.hh"
22 #include "G4VisAttributes.hh"
23 #include "G4Colour.hh"
24 
25 using namespace TelescopeSimulatorLX;
26 
28 {
29  const G4RunManager* runManager = G4RunManager::GetRunManager();
30  const FDsimG4DetectorConstruction* DetectorConstruction =
31  dynamic_cast<const FDsimG4DetectorConstruction*>(runManager->GetUserDetectorConstruction());
32 
33  fMercedesBase = DetectorConstruction->fMercedesBase;
34  fMercedesHeight = DetectorConstruction->fMercedesHeight;
35  fMercedesArmLength=13.15*mm;
36 
37  fMercedesMaterial = G4Material::GetMaterial("Aluminum");
39 }
40 
41 
43 {
44 }
45 
46 
48 {
49  G4cerr << " ================================================================ " << G4endl;
50  G4cerr << " = Mercedes parameters " << G4endl;
51  G4cerr << " = " << G4endl;
52  G4cerr << " = Material : " << fMercedesMaterial->GetName() << G4endl;
53  G4cerr << " = " << G4endl;
54  G4cerr << " ================================================================ " << G4endl;
55 
56  G4cerr << fMercedesMaterial->GetMaterialPropertiesTable() << G4endl;
57  if (fMercedesMaterial->GetMaterialPropertiesTable())
58  {
59  if(fMercedesMaterial->GetMaterialPropertiesTable()->GetProperty("ABSORPTION"))
60  {
61  G4cerr << "Absorption Property Vector " << G4endl;
62  G4MaterialPropertyVector *Absorption =
63  fMercedesMaterial->GetMaterialPropertiesTable()->GetProperty("ABSORPTION");
64  Absorption->DumpVector();
65  }
66  }
67 }
68 
69 
71 {
72  const G4double TOLERANCE = 0.01*mm;
73  G4double MercedesSide = sqrt(pow(fMercedesBase/2.,2.)+pow(fMercedesHeight,2.));
74 
75  G4double Dphi = 2.0*atan(fMercedesBase/2./fMercedesHeight);
76  G4double phi0 = 3.0*pi/2.-Dphi/2.;
77 
78  G4int NumZplanes=2;
79 
80  G4double PosZplanes[2] = {-TOLERANCE,fMercedesArmLength};
81  G4double Rin[2] = {0.,0.};
82  G4double Rout[2] = {MercedesSide,MercedesSide};
83 
84  // Build 3 polyhedra
85 
86  G4Polyhedra* MercedesArm1 =
87  new G4Polyhedra("MercedesArm1",phi0,Dphi,1,NumZplanes,PosZplanes,Rin,Rout);
88 
89  G4Polyhedra* MercedesArm2 =
90  new G4Polyhedra("MercedesArm2",phi0,Dphi,1,NumZplanes,PosZplanes,Rin,Rout);
91  G4Polyhedra* MercedesArm3 =
92  new G4Polyhedra("MercedesArm3",phi0,Dphi,1,NumZplanes,PosZplanes,Rin,Rout);
93 
94  G4RotationMatrix* ArmRot12 =
95  new G4RotationMatrix(G4ThreeVector(0.,1.,0.),2*pi/3.0);
96  G4RotationMatrix* ArmRot13 =
97  new G4RotationMatrix(G4ThreeVector(0.,1.,0.),-2*pi/3.0);
98 
99  G4ThreeVector translation = G4ThreeVector(0.,0.,0.);
100 
101  G4UnionSolid* MercedesArms12
102  = new G4UnionSolid("MercedesArms12",MercedesArm1,MercedesArm2,ArmRot12,translation);
103  G4UnionSolid* MercedesArms123
104  = new G4UnionSolid("MercedesArms123",MercedesArms12,MercedesArm3,ArmRot13,translation);
105 
106  fMercedes_log =
107  new G4LogicalVolume(MercedesArms123,(G4Material *)fMercedesMaterial,"Mercedes",0,0,0);
108 
109  fMercedes_log->SetVisAttributes(new G4VisAttributes(cyan));
110  fMercedes_log->SetOptimisation(true) ;
111 
112  const G4RunManager* runManager = G4RunManager::GetRunManager();
113  const FDsimG4DetectorConstruction* DetectorConstruction =
114  dynamic_cast<const FDsimG4DetectorConstruction*>(runManager->GetUserDetectorConstruction());
115 
116  G4bool useSD = DetectorConstruction->fUseSensitiveDetectors;
117  if (useSD) {
118  G4SDManager* SDmanager = G4SDManager::GetSDMpointer();
119  FDsimG4MercedesSD* MercedesSD = new FDsimG4MercedesSD("MercedesSD");
120  SDmanager->AddNewDetector(MercedesSD);
121  fMercedes_log->SetSensitiveDetector(MercedesSD) ;
122  }
123 
124  // define mercedes - air optical surface
125  // G4OpticalSurface * OpticalAirMercedes = new G4OpticalSurface("MercedesSurface");
126  // OpticalAirMercedes->SetModel(unified);
127  // OpticalAirMercedes->SetType(dielectric_metal);
128  // G4MaterialPropertiesTable *MercedesMPT = new G4MaterialPropertiesTable();
129  // MercedesMPT->AddProperty("REFLECTIVITY", new G4MaterialPropertyVector()) ;
130  // MercedesMPT->AddEntry("REFLECTIVITY", 0.0*eV,0.85);
131  // MercedesMPT->AddEntry("REFLECTIVITY",10.0*eV,0.85);
132  // OpticalAirMercedes->SetMaterialPropertiesTable(MercedesMPT) ;
133  // new G4LogicalSkinSurface("MercedesSurface",fMercedes_log,OpticalAirMercedes);
134 
135 }
constexpr double mm
Definition: AugerUnits.h:113
double pow(const double x, const unsigned int i)
static const G4Colour cyan(0.0, 1.0, 1.0)

, generated on Tue Sep 26 2023.