Belle II Software development
ARICHGeometryConfig.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <framework/gearbox/GearDir.h>
10#include <framework/logging/Logger.h>
11#include <framework/gearbox/Unit.h>
12
13#include <arich/dbobjects/ARICHGeometryConfig.h>
14
15#include <geometry/Materials.h>
16#include <arich/dbobjects/ARICHGeoHAPD.h>
17
18#include <cmath>
19
20using namespace std;
21using namespace Belle2;
22
24{
25 read(content);
26}
27
29{
30 //------------------------------
31 // Get ARICH geometry parameters from the gearbox
32 //------------------------------
33 m_bbstudy = content.getInt("BeamBackgroundStudy");
34
35 GearDir envParams(content, "Envelope");
36 m_masterVolume.setVolume(envParams.getLength("innerRadius"), envParams.getLength("outerRadius"), envParams.getLength("length"),
37 std::string("ARICH_Air"));
38 m_masterVolume.setPlacement(envParams.getLength("xPosition"), envParams.getLength("yPosition"),
39 envParams.getLength("zPosition") + envParams.getLength("length") / 2., envParams.getAngle("xRotation"),
40 envParams.getAngle("yRotation"), envParams.getAngle("zRotation"));
41
42 GearDir displParams(content, "GlobalDisplacement");
43 m_displaceGlobal = !displParams.getBool("Disable");
44 m_globalDispl.setX(displParams.getLength("x"));
45 m_globalDispl.setY(displParams.getLength("y"));
46 m_globalDispl.setZ(displParams.getLength("z"));
47 m_globalDispl.setAlpha(displParams.getAngle("alpha"));
48 m_globalDispl.setBeta(displParams.getAngle("beta"));
49 m_globalDispl.setGamma(displParams.getAngle("gamma"));
50
51 auto& materials = geometry::Materials::getInstance();
52
53 GearDir detParams(content, "Detector/Module");
54
55 m_hapd.setWallThickness(detParams.getLength("HAPD/windowThickness"));
56 m_hapd.setPadSize(detParams.getLength("HAPD/padSize"));
57 m_hapd.setChipGap(detParams.getLength("HAPD/chipGap"));
58 m_hapd.setNPads(int(sqrt(detParams.getInt("HAPD/padNum"))), int(sqrt(detParams.getInt("HAPD/padNum"))));
59 m_hapd.setWinThickness(detParams.getLength("HAPD/windowThickness"));
60 m_hapd.setWinRefIndex(detParams.getDouble("HAPD/windowRefIndex"));
61 m_hapd.setModuleSizeZ(detParams.getLength("height"));
62 m_hapd.setWallMaterial(detParams.getString("HAPD/wallMaterial"));
63 m_hapd.setWinMaterial(detParams.getString("HAPD/windowMaterial"));
64
65 m_hapd.setFEBVolume(detParams.getLength("FEB/size"), detParams.getLength("FEB/size"), detParams.getLength("FEB/thickness"),
66 detParams.getString("FEB/material"));
67 m_hapd.setHAPDVolume(detParams.getLength("HAPD/size"), detParams.getLength("HAPD/size"), detParams.getLength("HAPD/height"),
68 detParams.getString("HAPD/fillMaterial"));
69
70 GearDir apdSurfParams(detParams, "HAPD/Surface");
71 m_hapd.setAPDVolume(detParams.getLength("HAPD/apdSize"), detParams.getLength("HAPD/apdSize"),
72 detParams.getLength("HAPD/apdThickness"), detParams.getString("HAPD/apdMaterial"),
73 materials.createOpticalSurfaceConfig(apdSurfParams));
74
75 GearDir mergerParams(content, "MergerPCB");
76 // read merger PCB parameters
77 m_merger.setMergerPCBMaterialName(mergerParams.getString("merger/material"));
78 m_merger.setMergerPCBLenght(mergerParams.getDouble("merger/sizeL"));
79 m_merger.setMergerPCBWidth(mergerParams.getDouble("merger/sizeW"));
80 m_merger.setMergerPCBThickness(mergerParams.getDouble("merger/thickness"));
81 m_merger.setMergerPCBscrewholeR(mergerParams.getDouble("merger/mergerPCBscrewholeR"));
82 m_merger.setMergerPCBscrewholePosdY(mergerParams.getDouble("merger/mergerPCBscrewholePosdY"));
83 m_merger.setMergerPCBscrewholePosdX1(mergerParams.getDouble("merger/mergerPCBscrewholePosdX1"));
84 m_merger.setMergerPCBscrewholePosdX2(mergerParams.getDouble("merger/mergerPCBscrewholePosdX2"));
85 m_merger.setSingleMergerEnvelopeSizeL(mergerParams.getDouble("merger/envelopeSizeL"));
86 m_merger.setSingleMergerEnvelopeSizeW(mergerParams.getDouble("merger/envelopeSizeW"));
87 m_merger.setSingleMergerEnvelopeThickness(mergerParams.getDouble("merger/envelopeThickness"));
88 m_merger.setSingleMergerenvelopeDeltaZ(mergerParams.getArray("merger/envelopeDeltaZ"));
89 m_merger.setMergerSlotID(mergerParams.getArray("merger/mergerSlotID"));
90 m_merger.setMergerPosR(mergerParams.getArray("merger/mergerPosR"));
91 m_merger.setMergerAngle(mergerParams.getArray("merger/mergerAngle"));
92 m_merger.setMergerOrientation(mergerParams.getArray("merger/mergerOrientation"));
93 m_merger.setEnvelopeCenterPosition(mergerParams.getDouble("mergerEnvelope/x0"),
94 mergerParams.getDouble("mergerEnvelope/y0"),
95 mergerParams.getDouble("mergerEnvelope/z0"));
96 m_merger.setSingleMergeEnvelopePosition(mergerParams.getDouble("merger/envelopePosX0"),
97 mergerParams.getDouble("merger/envelopePosY0"),
98 mergerParams.getDouble("merger/envelopePosZ0"));
99 m_merger.setEnvelopeOuterRadius(mergerParams.getDouble("mergerEnvelope/outerRadius"));
100 m_merger.setEnvelopeInnerRadius(mergerParams.getDouble("mergerEnvelope/innerRadius"));
101 m_merger.setEnvelopeThickness(mergerParams.getDouble("mergerEnvelope/thickness"));
102 m_merger.checkMergerPositionsDataConsistency();
103 //m_merger.print();
104
105 GearDir cablesEnvelopParams(content, "cablesEnvelope");
106 // read cables envelop parameters
107 m_cablesenvelope.setCablesEffectiveMaterialName(cablesEnvelopParams.getString("material"));
108 m_cablesenvelope.setEnvelopeOuterRadius(cablesEnvelopParams.getDouble("outerRadius"));
109 m_cablesenvelope.setEnvelopeInnerRadius(cablesEnvelopParams.getDouble("innerRadius"));
110 m_cablesenvelope.setEnvelopeThickness(cablesEnvelopParams.getDouble("thickness"));
111 m_cablesenvelope.setEnvelopeCenterPosition(cablesEnvelopParams.getDouble("x0"), cablesEnvelopParams.getDouble("y0"),
112 cablesEnvelopParams.getDouble("z0"));
113 m_cablesenvelope.checkCablesEnvelopDataConsistency();
114 //m_cablesenvelope.print();
115
116 GearDir coolingParams(content, "coolingPipe");
117 // read ARICH cooling system parameters
118 m_cooling.setEnvelopeOuterRadius(coolingParams.getDouble("coolingEnvelope/outerRadius"));
119 m_cooling.setEnvelopeInnerRadius(coolingParams.getDouble("coolingEnvelope/innerRadius"));
120 m_cooling.setEnvelopeThickness(coolingParams.getDouble("coolingEnvelope/thickness"));
121 m_cooling.setEnvelopeCenterPosition(coolingParams.getDouble("coolingEnvelope/x0"), coolingParams.getDouble("coolingEnvelope/y0"),
122 coolingParams.getDouble("coolingEnvelope/z0"));
123 m_cooling.setCoolingPipeMaterialName(coolingParams.getString("cooling/material"));
124 m_cooling.setRmin(coolingParams.getDouble("cooling/Rmin"));
125 m_cooling.setRmax(coolingParams.getDouble("cooling/Rmax"));
126 m_cooling.setCoolingGeometryID(coolingParams.getArray("cooling/coolingGeometryID"));
127 m_cooling.setCoolingL(coolingParams.getArray("cooling/coolingL"));
128 m_cooling.setCoolingPosPhi(coolingParams.getArray("cooling/coolingPosPhi"));
129 m_cooling.setCoolingPosR(coolingParams.getArray("cooling/coolingPosR"));
130 m_cooling.setCoolinRotationAngle(coolingParams.getArray("cooling/coolinRotationAngle"));
131 m_cooling.setCoolingTestPlateMaterialName(coolingParams.getString("coolingTestPlate/material"));
132 m_cooling.setColdTubeMaterialName(coolingParams.getString("coolingTestPlate/materialColdTube"));
133 m_cooling.setCoolingTestPlateslengths(coolingParams.getDouble("coolingTestPlate/lengthX"),
134 coolingParams.getDouble("coolingTestPlate/lengthY"), coolingParams.getDouble("coolingTestPlate/lengthZ"));
135 m_cooling.setColdTubeR(coolingParams.getDouble("coolingTestPlate/coldTubeR"));
136 m_cooling.setColdTubeSubtractedR(coolingParams.getDouble("coolingTestPlate/coldTubeSubtractedR"));
137 m_cooling.setColdTubeWallThickness(coolingParams.getDouble("coolingTestPlate/coldTubeWallThickness"));
138 m_cooling.setDepthColdTubeInPlate(coolingParams.getDouble("coolingTestPlate/depthColdTubeInPlate"));
139 m_cooling.setColdTubeSpacing(coolingParams.getDouble("coolingTestPlate/coldTubeSpacing"));
140 m_cooling.setColdTubeNumber(coolingParams.getInt("coolingTestPlate/coldTubeNumber"));
141 m_cooling.setCoolingTestPlatePosR(coolingParams.getArray("coolingTestPlate/coolingTestPlatePosR"));
142 m_cooling.setCoolingTestPlatePosPhi(coolingParams.getArray("coolingTestPlate/coolingTestPlatePosPhi"));
143 m_cooling.setCoolingTestPlatePosZ0(coolingParams.getArray("coolingTestPlate/coolingTestPlatePosZ0"));
144 m_cooling.checkCoolingSystemDataConsistency();
145 //m_cooling.print();
146
147 GearDir coolingFEBParams(content, "febcoolingv2");
148 // read ARICH cooling system (v2) parameters
149 // FEB cooling bodies
150 m_coolingv2.setSmallSquareSize(coolingFEBParams.getDouble("smallSquareSize"));
151 m_coolingv2.setSmallSquareThickness(coolingFEBParams.getDouble("smallSquareThickness"));
152 m_coolingv2.setBigSquareSize(coolingFEBParams.getDouble("bigSquareSize"));
153 m_coolingv2.setBigSquareThickness(coolingFEBParams.getDouble("bigSquareThickness"));
154 m_coolingv2.setRectangleL(coolingFEBParams.getDouble("rectangleL"));
155 m_coolingv2.setRectangleW(coolingFEBParams.getDouble("rectangleW"));
156 m_coolingv2.setRectangleThickness(coolingFEBParams.getDouble("rectangleThickness"));
157 m_coolingv2.setRectangleDistanceFromCenter(coolingFEBParams.getDouble("rectangleDistanceFromCenter"));
158 m_coolingv2.setFebcoolingv2GeometryID(coolingFEBParams.getArray("febcoolingv2GeometryID"));
159
160 // read detector plane parameters
161 modulesPosition(content);
162
163 GearDir mirrParams(content, "Mirrors");
164 if (mirrParams) {
165 m_mirrors.setNMirrors(mirrParams.getInt("nMirrors"));
166 m_mirrors.setStartAngle(mirrParams.getAngle("startAngle"));
167 GearDir surfParams(mirrParams, "Surface");
168 m_mirrors.setMirrorPlate(mirrParams.getLength("thickness"), mirrParams.getLength("width"), mirrParams.getLength("length"),
169 mirrParams.getString("material"), materials.createOpticalSurfaceConfig(surfParams));
170 m_mirrors.setZPosition(mirrParams.getLength("zPosition") + mirrParams.getLength("width") / 2. - m_masterVolume.getLength() / 2.);
171 m_mirrors.setRadius(mirrParams.getLength("radius"));
172 m_mirrors.initializeDefault();
173 }
174
175 GearDir mirrDisplParams(content, "MirrorDisplacement");
176 if (mirrDisplParams) {
177 m_displaceMirrors = !mirrDisplParams.getBool("Disable");
178 for (auto plate : mirrDisplParams.getNodes("Plate")) {
179 int id = plate.getInt("@id");
180 double r = plate.getLength("r");
181 double phi = plate.getAngle("phi");
182 double z = plate.getLength("z");
183 double alpha = plate.getLength("alpha");
184 double beta = plate.getLength("beta");
185 double gamma = plate.getLength("gamma");
186 double origPhi = m_mirrors.getPoint(id).Phi();
187 ARICHPositionElement displEl(r * cos(origPhi + phi), r * sin(origPhi + phi), z, alpha, beta, gamma);
188 m_mirrorDispl.setDisplacementElement(id, displEl);
189 // displEl.print();
190 }
191 }
192 // read and prepare aerogel plane parameters
193 GearDir aerogel(content, "Aerogel");
194
195 std::vector<double> dPhi;
196 std::vector<int> nAeroSlotsIndividualRing;
197 for (auto ring : aerogel.getNodes("slotInRing/Ring")) {
198 dPhi.push_back(2.* M_PI / ring.getInt());
199 nAeroSlotsIndividualRing.push_back(ring.getInt());
200 }
201 std::vector<double> slotR;
202 for (auto ring : aerogel.getNodes("slotR/Ring")) {
203 slotR.push_back(ring.getLength());
204 }
205
206 m_aerogelPlane.setWallRadius(slotR);
207 m_aerogelPlane.setWallDPhi(dPhi);
208 m_aerogelPlane.setNAeroSlotsIndividualRing(nAeroSlotsIndividualRing);
209 m_aerogelPlane.setTileGap(aerogel.getLength("tileGap"));
210 //cout<<"aerogel.getLength(\"tileGap\") = "<<aerogel.getLength("tileGap")<<endl;
211
212 m_aerogelPlane.setWallThickness(aerogel.getLength("wallThickness"));
213 m_aerogelPlane.setWallHeight(aerogel.getLength("wallHeight"));
214 m_aerogelPlane.addSupportPlate(aerogel.getLength("plateInnerR"), aerogel.getLength("plateOuterR"),
215 aerogel.getLength("plateThickness"), aerogel.getString("material"));
216 int ilayer = 1;
217 for (auto layer : aerogel.getNodes("Layers/Layer")) {
218 double thick = layer.getLength("thickness") / Unit::cm;
219 std::string material = layer.getString("material");
220 double refIndex = layer.getDouble("refIndex");
221 double trLen = layer.getLength("trLength");
222 m_aerogelPlane.setAerogelLayer(ilayer, thick, refIndex, trLen, material);
223 ilayer++;
224 //std::cout<<" double thick = layer.getLength(thickness) / Unit::cm = "<<thick<<std::endl;
225 }
226 m_aerogelPlane.setFullAerogelMaterialDescriptionKey(aerogel.getInt("fullAerogelMaterialDescriptionKey"));
227 m_aerogelPlane.setImgTubeThickness(aerogel.getDouble("imgTubeThickness"));
228 m_aerogelPlane.setCompensationARICHairVolumeThick_min(aerogel.getDouble("compensationARICHairVolumeThick_min"));
229
230 // Aerogel tiles
231 GearDir aerotilesDir(content, "AerogelTiles");
232 for (int il = 0; il < ilayer - 1; il++) {
233 int iring = 0;
234 for (auto ns_ring : nAeroSlotsIndividualRing) {
235 iring++;
236 for (int islot = 1; islot < ns_ring + 1; islot++) {
237 for (auto tileNode : aerotilesDir.getNodes("Tiles/Tile")) {
238 int ring = tileNode.getInt("ring");
239 int column = tileNode.getInt("column");
240 int layerN = tileNode.getInt("layer");
241 if (iring == ring && column == islot && il == layerN) {
242 double n = tileNode.getDouble("n");
243 double transmL = tileNode.getDouble("transmL");
244 double thick = tileNode.getDouble("thick");
245 std::string materialName = tileNode.getString("material");
246 m_aerogelPlane.addTileParameters(ring, column, layerN, n, transmL, thick, materialName);
247 }
248 }
249 }
250 }
251 }
252
253 if (m_aerogelPlane.getFullAerogelMaterialDescriptionKey() == 0) {
254 m_aerogelPlane.setPlacement(0.0, 0.0,
255 aerogel.getLength("zPosition") +
256 (aerogel.getLength("wallHeight") + aerogel.getLength("plateThickness") + aerogel.getLength("imgTubeThickness")) / 2.0 -
257 m_masterVolume.getLength() / 2.0,
258 0, 0, 0);
259 } else if (m_aerogelPlane.getFullAerogelMaterialDescriptionKey() == 1) {
260 double wallHeightNew = m_aerogelPlane.getMaximumTotalTileThickness() + m_aerogelPlane.getCompensationARICHairVolumeThick_min();
261 wallHeightNew = wallHeightNew / 10.0; //conversion from mm to cm - this need to be implemented properly
262 //cout<<"m_aerogelPlane.getMaximumTotalTileThickness() = "<<m_aerogelPlane.getMaximumTotalTileThickness()<<endl
263 // <<"m_aerogelPlane.getCompensationARICHairVolumeThick_min() = "<<m_aerogelPlane.getCompensationARICHairVolumeThick_min()<<endl
264 // <<"wallHeightNew = "<<wallHeightNew<<endl;
265 m_aerogelPlane.setPlacement(0.0, 0.0,
266 aerogel.getLength("zPosition") +
267 (wallHeightNew + aerogel.getLength("plateThickness") + aerogel.getLength("imgTubeThickness")) / 2.0 - m_masterVolume.getLength() /
268 2.0,
269 0, 0, 0);
270 } else {
271 B2ERROR("ARICHGeometryConfig::read --> getFullAerogelMaterialDescriptionKey() is wrong");
272 }
273
274 //m_aerogelPlane.print();
275 //m_aerogelPlane.printTileParameters();
276 //m_aerogelPlane.testGetTileParametersFunction();
277 m_aerogelPlane.isConsistent();
278
279 // support structures
280 GearDir supportDir(content, "SupportStructure");
281 for (auto tube : supportDir.getNodes("Tubes/Tube")) {
282 std::string material = tube.getString("material");
283 double innerR = tube.getLength("innerR");
284 double outerR = tube.getLength("outerR");
285 double length = tube.getLength("length");
286 double zPosition = tube.getLength("zPosition") - m_masterVolume.getLength() / 2.;
287 std::string name = tube.getString("name");
288 m_supportStructure.addTube(innerR, outerR, length, zPosition, material, name);
289 }
290 //m_supportStructure.print();
291
292 m_supportStructure.setMaterial(supportDir.getString("material"));
293
294 for (auto wedge : supportDir.getNodes("Wedges/Wedge")) {
295 std::vector<double> pars;
296 int id = wedge.getInt("@id");
297 if (id > 3 || id < 1) continue;
298 for (auto par : wedge.getNodes("par")) {
299 pars.push_back(par.getLength());
300 }
301 m_supportStructure.setWedge(id, pars);
302 }
303
304 for (auto wedge : supportDir.getNodes("Wedges/Placements/Placement")) {
305 int type = wedge.getInt("type");
306 double r = wedge.getLength("r");
307 double phi = wedge.getAngle("phi");
308 double z = wedge.getLength("z") - m_masterVolume.getLength() / 2.;
309 m_supportStructure.addWedge(type, r, phi, z, supportDir.getString("material"));
310 }
311
312 //print();
313
314}
315
316void ARICHGeometryConfig::print(const std::string& title) const
317{
318 ARICHGeoBase::print(title);
319 m_detectorPlane.print();
320 m_hapd.print();
321 m_merger.print();
322 m_cablesenvelope.print();
323 m_cooling.print();
324 m_masterVolume.print();
325 m_aerogelPlane.print();
326 m_aerogelPlane.printTileParameters();
327 m_mirrors.print();
328 m_supportStructure.print();
329}
330
332{
333
334 GearDir detParams(content, "Detector/Plane");
335
336 std::vector<std::pair<double, double>> ringPar;
337
338 for (auto ring : detParams.getNodes("Rings/Ring")) {
339 double r = ring.getLength("r");
340 int nMod = ring.getInt("nModules");
341 ringPar.push_back({r, 2.*M_PI / nMod});
342 }
343
344 m_detectorPlane.setRingPar(ringPar);
345
346 GearDir supportParams(content, "Detector/supportPlate");
347 double modHeight = content.getLength("Detector/Module/height");
348 m_detectorPlane.addSupportPlate(supportParams.getLength("innerRadius"), supportParams.getLength("outerRadius"),
349 supportParams.getLength("thickness"), supportParams.getString("material"));
350 m_detectorPlane.setModuleHoleSize(supportParams.getLength("moduleHoleSize"));
351 m_detectorPlane.setSupportZPosition(supportParams.getLength("zPosition") + (supportParams.getLength("thickness") +
352 supportParams.getLength("backWallHeight")) / 2. - m_masterVolume.getLength() / 2.);
353 m_detectorPlane.setSupportBackWallHeight(supportParams.getLength("backWallHeight"));
354 m_detectorPlane.setSupportBackWallThickness(supportParams.getLength("backWallThickness"));
355
356 m_detectorPlane.setPlacement(0.0, 0.0, detParams.getLength("zPosition") + modHeight / 2. - m_masterVolume.getLength() / 2., 0.0,
357 0.0, 0.0);
358
359}
360
361/*void ARICHGeometryConfig::readMirrorAlignment(const GearDir& content)
362 {
363 GearDir modParams(content, "Mirrors/Alignment");
364
365 for (const GearDir& plate : modParams.getNodes("Plate")) {
366 int id = atoi(plate.getString("@id").c_str());
367 double dr = plate.getLength("dr");
368 double dphi = plate.getAngle("dphi");
369 double dtheta = plate.getAngle("dtheta");
370 m_mirrorpoint[id - 1].SetMag(m_mirrorpoint[id - 1].Mag() + dr);
371 m_mirrornorm[id - 1].SetTheta(m_mirrornorm[id - 1].Theta() + dtheta);
372 m_mirrornorm[id - 1].SetPhi(m_mirrornorm[id - 1].Phi() + dphi);
373 }
374 }*/
375
376ROOT::Math::XYVector ARICHGeometryConfig::getChannelPosition(unsigned moduleID, unsigned chX, unsigned chY) const
377{
378 const double radius = m_detectorPlane.getSlotR(moduleID);
379 const double phi = m_detectorPlane.getSlotPhi(moduleID);
380 const double cosPhi = std::cos(phi);
381 const double sinPhi = std::sin(phi);
382 ROOT::Math::XYVector origin(radius * cosPhi, radius * sinPhi);
383 double x, y;
384 m_hapd.getXYChannelPos(chX, chY, x, y);
385 // create a vector from x, y that is rotated by phi
386 ROOT::Math::XYVector locPos(x * cosPhi - y * sinPhi,
387 x * sinPhi + y * cosPhi);
388 return origin + locPos;
389}
virtual void print(const std::string &title) const
Print the content of the class.
ARICHGeoSupport m_supportStructure
support structure geometry configuration
bool m_displaceGlobal
use global displacement parameters
ARICHGeoMasterVolume m_masterVolume
master volume geometry configuration
ARICHGeoGlobalDisplacement m_globalDispl
global displacement parameters
ARICHGeoMirrors m_mirrors
mirrors geometry configuration
bool m_displaceMirrors
use mirror displacement parameters
ARICHGeoFEBCooling m_coolingv2
ARICH cooling system (v2) geometry configuration.
ARICHGeoCablesEnvelope m_cablesenvelope
ARICH cables envelop geometry configuration.
ARICHGeoAerogelPlane m_aerogelPlane
aerogel plane geometry configuration
void read(const GearDir &content)
gets geometry parameters from gearbox.
ROOT::Math::XYVector getChannelPosition(unsigned moduleID, unsigned xChn, unsigned yChn) const
Get position of HAPD (x,y) channel in local ARICH coordinates.
ARICHGeoDetectorPlane m_detectorPlane
detector plane geometry configuration
ARICHGeometryConfig()
Default constructor.
ARICHGeoCooling m_cooling
ARICH cooling system geometry configuration.
ARICHGeoMerger m_merger
Merger PCB geometry configuration.
ARICHGeoHAPD m_hapd
HAPD geometry configuration.
int m_bbstudy
is beam background study
void print(const std::string &title="ARICH geometry parameters") const
Print some debug information.
ARICHGeoMirrorDisplacement m_mirrorDispl
mirror displacement parameters
void modulesPosition(const GearDir &content)
initializes the positions of HAPD modules, with the parameters from xml.
Position element for ARICH.
GearDir is the basic class used for accessing the parameter store.
Definition GearDir.h:31
virtual std::string getString(const std::string &path="") const noexcept(false) override
Get the parameter path as a string.
Definition GearDir.h:69
static const double cm
Standard units with the value = 1.
Definition Unit.h:47
double getAngle(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard angle unit.
Definition Interface.h:299
std::vector< double > getArray(const std::string &path) const noexcept(false)
Get the parameter path as a list of double values converted to the standard unit.
Definition Interface.cc:123
double getDouble(const std::string &path="") const noexcept(false)
Get the parameter path as a double.
Definition Interface.cc:41
double getLength(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard length unit.
Definition Interface.h:259
std::vector< GearDir > getNodes(const std::string &path="") const
Get vector of GearDirs which point to all the nodes the given path evaluates to.
Definition Interface.cc:21
bool getBool(const std::string &path="") const noexcept(false)
Get the parameter path as a bool.
Definition Interface.cc:80
int getInt(const std::string &path="") const noexcept(false)
Get the parameter path as a int.
Definition Interface.cc:60
static Materials & getInstance()
Get a reference to the singleton instance.
Definition Materials.cc:85
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28
Abstract base class for different kinds of events.
STL namespace.