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