ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
EICG4dRICHConfig.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file EICG4dRICHConfig.hh
1 #ifndef EICG4dRICHConfig_HH
2 #define EICG4dRICHConfig_HH
3 
4 #include <G4GenericMessenger.hh>
5 #include <G4SystemOfUnits.hh>
6 
8 {
9 
10  // define here Global volume parameters
11  double RIn = 9.;
12  double ROut = 220 * cm;
13  double ThicknessZ = 170 * cm;
14  double PosZ = 200. * cm;
15 
16  //
17  // RICH is made of 6 identical trucated cone sectors (TBD: probably one or
18  // more sectors shall be different due to the asymmetry in the beam pipes)
19  // Each sector components have identical relative disposition
20  // Each sector is symmetric respect to the cone bysector ...
21 
22  /* model data:
23  material, geometry and placement are defined here
24  */
25 
26  G4String model_file = "drich-model0.txt";
27 
28  /*
29  double vessel_z0 = 300*cm; // position of the vessel entrance window along
30  z respect to the overall spectrometer ??? double vessel_dz = 170*cm; //
31  Vessel longitudinal length (external) - 0 thickness for the moment double
32  vessel_radius_in = 10*cm; // Vessel internal radius (around beam pipe)
33  double vessel_radius_out0 = 130.*cm; // Vessel external radius at entrance
34  double vessel_radius_out1 = 210.*cm; // Vessel external radius at exit
35  (behind the mirror) double aerogel_dz = 2*cm; // aerogel thickness double
36  filter_dz = 0.3*mm; // wavelength filter thickness double mirror_radius =
37  290*cm; // mirror radius double mirror_center_z = -210*cm; // mirror center
38  z position - relative to vessel center double mirror_center_t = 145*cm; //
39  mirror center transverse position - relative to vessel center double
40  mirror_theta = 40*deg; // mirror polar aperture
41 
42  double sensor_z = 0; // sensor center along z - relative to vessel center
43  double sensor_t = 0; // sensor center along tranverse z - relative to vessel
44  center
45  */
46 
47  /* optical data:
48  aerogel dispersione relation n_aerogel(lambda)
49  aerogel scattering length vs lambda
50  aerogel absorption length vs lambda
51  wavelength filter transmission curve vs lambda
52  gas dispersione relation n_gas(lambda)
53  gas absorption lenghth vs lambda (likely constant)
54  mirror refractive curve vs lambda
55  sensor quantum efficiency (embedded in the code or external ?)
56  */
57  // G4String optical_file = "drich-optical.txt";
58 
59  // optical properties
60  int aerOptModel = 3; // aerogel optical model used to estimate the refractive Index
61  double filter_thr = 300 * nm; // wavelength filter cutoff
62 
63  double aerogel_n = 1.03; // aerogel refractive index, at reference wavelength
64  double gas_n = 1.0008; // gas refractive index, at reference wavelength
65  double wavelength_ref = 400 * nm; // reference wavelength (for aerogel, gas, mirror ...)
66 
67  // Create a global messenger that will be used
68  inline EICG4dRICHConfig()
69  {
70  static G4GenericMessenger *Messenger;
71 
72  if (!Messenger)
73  {
74  // Set geant options
75  Messenger = new G4GenericMessenger(this, "/EICG4dRICH/");
76 
77  // Messenger->SetDirectory("Vessel"); // TBC if ok, we can define a dir
78  // for each sub-components of the EICG4dRICH
79  /*
80  auto cmd = Messenger->DeclarePropertyWithUnit("VesselLength", "cm",
81  vessel_dz, "Rich Vessel Longitudinal size, along beam (z), cone
82  height"); cmd.SetParameterName("vl",true); cmd.SetRange("vl>0,");
83  cmd.SetDefaultValue("170");
84  Messenger->DeclarePropertyWithUnit("VesselPositionZ0", "cm", vessel_z0,
85  "Rich Vessel Entrance Window Position along z");
86  Messenger->DeclarePropertyWithUnit("VesselRadiusIn", "cm",
87  vessel_radius_in, "Rich Vessel Internal Radius (near beam pipe)");
88  Messenger->DeclarePropertyWithUnit("VesselRadiusOut0", "cm",
89  vessel_radius_out0, "Rich Vessel External Radius at entrance");
90  Messenger->DeclarePropertyWithUnit("VesselRadiusOut1", "cm",
91  vessel_radius_out1, "Rich Vessel External Radius at exit, after
92  mirror"); Messenger->DeclarePropertyWithUnit("AerogelThick", "cm",
93  aerogel_dz, "Aerogel Thickness");
94  Messenger->DeclarePropertyWithUnit("FilterThick", "mm", filter_dz,
95  "High-Pass Filter Thickness");
96  Messenger->DeclarePropertyWithUnit("MirrorRadius", "cm", mirror_radius,
97  "Mirror Radius"); Messenger->DeclarePropertyWithUnit("MirrorCenterZ",
98  "cm", mirror_center_z, "Mirror Center - longitudinal, Z relative to
99  Vessel center"); Messenger->DeclarePropertyWithUnit("MirrorCenterT",
100  "cm", mirror_center_t, "Mirror Center (x/y plane) Transverse, relative
101  to Vessel center"); Messenger->DeclarePropertyWithUnit("MirrorTheta",
102  "deg", mirror_theta, "Mirror Polar Aperture");
103  Messenger->DeclarePropertyWithUnit("SensorZ", "cm", sensor_z, "Sensor
104  Center - longitudinal, Z relative to Vessel center");
105  Messenger->DeclarePropertyWithUnit("SensorT", "cm", sensor_t, "Sensor
106  Center - Transverse (x/y plane) relative to Vessel center");
107  */
108 
109  Messenger->DeclareProperty("ModelFile", model_file,"Full path of the drich model text data");
110 
111  auto cmd0 = Messenger->DeclareProperty(
112  "AerogelRefractiveIndex", aerogel_n,
113  "Aerogel Radiator Refractive Index at reference wavelength");
114  cmd0.SetParameterName("aerogeln", true);
115  cmd0.SetRange("aerogeln>1.0");
116  cmd0.SetDefaultValue("1.03");
117 
118  auto cmd1 = Messenger->DeclareProperty(
119  "GasRefractiveIndex", gas_n,
120  "Gas Radiator Refractive Index at reference wavelength");
121  cmd1.SetParameterName("gasn", true);
122  cmd1.SetRange("gasn>1.0");
123  cmd1.SetDefaultValue("1.0008");
124 
125  auto cmd2 = Messenger->DeclarePropertyWithUnit(
126  "ReferenceWavelength", "nm", wavelength_ref, "Reference wavelength");
127  cmd2.SetParameterName("wlref", true);
128  cmd2.SetRange("wlref>0");
129  cmd2.SetDefaultValue("400.e-9");
130 
131  auto cmd3 = Messenger->DeclarePropertyWithUnit(
132  "FilterThreshold", "nm", filter_thr,
133  "Wavelength threshold of acrylic filter");
134  cmd3.SetParameterName("wlfil", true);
135  cmd3.SetRange("wlfil>0.");
136  cmd3.SetDefaultValue("300.e-9");
137 
138  auto cmd4 = Messenger->DeclareProperty(
139  "AerogelOpticalModel", aerOptModel,
140  "Aerogel Optical Model for Refractive Index (0:Vorobiev, 1:Sellmeier "
141  "CLAS12, 2: LHCb, 3: scale exp. points");
142  cmd4.SetParameterName("aerOptMod", true);
143  cmd4.SetDefaultValue(3);
144 
145  // Messenger->DeclareProperty("GeometryFile", geometry_file, "Full
146  // path of Geometry configuration file (e.g. sensor array coordinates
147  // ...)");
148  // Messenger->DeclareProperty("OpticalFile", optical_file, "Full path of
149  // Optical configuration file (e.g. sensor quantum efficienct curve,
150  // mirror transmittance, radiators dispersion relations ...)");
151  }
152  }
153 };
154 
155 #endif // EICG4dRICHConfig_HH