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"));
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"));
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"));
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"));
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);
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
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
255 aerogel.getLength("zPosition") +
256 (aerogel.getLength("wallHeight") + aerogel.getLength("plateThickness") + aerogel.getLength("imgTubeThickness")) / 2.0 -
258 0, 0, 0);
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;
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();
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 }
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);
320 m_hapd.print();
321 m_merger.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
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}
void setTileGap(double gap)
Set gap between aerogel tile and aluminum wall.
bool isConsistent() const override
Consistency check of geometry parameters.
void setNAeroSlotsIndividualRing(const std::vector< int > &nAeroSlotsIndividualRing)
Set vector of numbers of aerogel slots in individual ring.
double getCompensationARICHairVolumeThick_min() const
Get minimum thickness of the compensation volume with ARICH air.
void setWallHeight(double height)
Set height of aluminum walls between aerogel tiles.
void print(const std::string &title="Aerogel plane parameters:") const override
Print the content of the class.
void addSupportPlate(double inR, double outR, double thick, const std::string &material)
Set parameters of aerogel support plate.
void setWallThickness(double thick)
Set thickness of aluminum walls between aerogel tiles.
void setWallRadius(std::vector< double > &rs)
Set radiuses at which "r" aluminum walls between tiles are placed (+inner+outer aluminum ring).
void printTileParameters(const std::string &title="Aerogel tiles parameters:") const
Print the content of the m_tiles vector of tilestr structure.
void setAerogelLayer(unsigned ilayer, double thick, double rIndex, double trLen, const std::string &material)
Set parameters of i-th aerogel layer.
void addTileParameters(int ring, int column, int layerN, double n, double transmL, double thick, const std::string &material)
Add parameters of individual tile.
void setCompensationARICHairVolumeThick_min(double compensationARICHairVolumeThick_min)
Set minimum thickness of the compensation volume with ARICH air.
void setImgTubeThickness(double imgTubeThickness)
Set imaginary tube thickness just after aerogel layers used as volume to which tracks are extrapolate...
void setFullAerogelMaterialDescriptionKey(int fullAerogelMaterialDescriptionKey)
Set full aerogel material description key.
void setPlacement(double x, double y, double z, double rx, double ry, double rz)
Set aerogel plane positioning within ARICH local volume.
void setWallDPhi(std::vector< double > &dphi)
Set phi (angle) distance between "phi" aluminum walls between aerogel tiles for all aerogel tile ring...
int getFullAerogelMaterialDescriptionKey() const
Get full aerogel material description key.
double getMaximumTotalTileThickness() const
Get maximum total thickness of the aerogel tiles tile_up + tile_down for all the slots.
virtual void print(const std::string &title) const
Print the content of the class.
Definition: ARICHGeoBase.cc:20
void setEnvelopeCenterPosition(double x0, double y0, double z0)
Set position of cables envelop.
void setEnvelopeOuterRadius(double envelopeOuterRadius)
Set outer radius of cables envelop.
void print(const std::string &title="Merger PCB geometry parameters") const
Print the content of the class.
void checkCablesEnvelopDataConsistency() const
Check data consistency of cables envelop In case of failure print the basf2 ERROR message using B2ASS...
void setCablesEffectiveMaterialName(const std::string &materialName)
Set Effective material name describing cables.
void setEnvelopeThickness(double envelopeThickness)
Set thickness of cables envelop.
void setEnvelopeInnerRadius(double envelopeInnerRadius)
Set inner radius of cables envelop.
void setEnvelopeCenterPosition(double x0, double y0, double z0)
Set position of cooling system assembly envelope.
void setCoolingTestPlatePosZ0(const std::vector< double > &coolingTestPlatePosZ0)
Set vector of Z placement of the cooling test plates center within ARICH mother volume in mm.
void setDepthColdTubeInPlate(double depthColdTubeInPlate)
Set depth of the cold tube in the cooling test plate.
void setCoolingTestPlateslengths(double lx, double ly, double lz)
Set dimensions of cooling test plates in x, y, z directions.
void setCoolingTestPlatePosPhi(const std::vector< double > &coolingTestPlatePosPhi)
Set vector of azimuthal angle of the cooling test plates center in polar coordinate system in deg.
void print(const std::string &title="Cooling system geometry parameters") const
Print the content of the class.
void setColdTubeNumber(int coldTubeNumber)
Set number of cold tubes in one plate.
void setCoolingPosR(const std::vector< double > &coolingPosR)
Set vector of radial distance (r, pho) of the cooling system object center in polar coordinate system...
void checkCoolingSystemDataConsistency() const
Check data consistency of the cooling system positions.
void setColdTubeMaterialName(const std::string &materialName)
Set material name of cold tube.
void setCoolingGeometryID(const std::vector< double > &coolingGeometryID)
Set vector of cooling system object geometry ID 1 - G4Tubs 2 - G4Torus.
void setEnvelopeOuterRadius(double envelopeOuterRadius)
Set outer radius of cooling system assembly envelope.
void setCoolingL(const std::vector< double > &coolingL)
Set vector of lengs of the cooling system object with given geometry ID.
void setCoolingTestPlatePosR(const std::vector< double > &coolingTestPlatePosR)
Set vector of rho of the cooling test plates center in polar coordinate system in mm.
void setCoolinRotationAngle(const std::vector< double > &coolinRotationAngle)
Set vector of azimuthal angle of rotation around Z - axis of the cooling system object in polar coord...
void setColdTubeSubtractedR(double coldTubeSubtractedR)
Set outer radius of subtracted tubes for cold tube.
void setCoolingPipeMaterialName(const std::string &materialName)
Set material name of cooling pipe.
void setEnvelopeThickness(double envelopeThickness)
Set thickness of cooling system assembly envelope.
void setCoolingTestPlateMaterialName(const std::string &materialName)
Set material name of cooling test plates.
void setRmax(double rmax)
Set size of cooling system pipe : outer radius in mm.
void setRmin(double rmin)
Set size of cooling system pipe : inner radius in mm.
void setColdTubeSpacing(double coldTubeSpacing)
Set distance from center of the cold tube to edge of cooling plate.
void setColdTubeWallThickness(double coldTubeWallThickness)
Set cold tube wall thickness.
void setCoolingPosPhi(const std::vector< double > &coolingPosPhi)
Set vector of azimuthal angle of the cooling system object center in polar coordinate system in deg.
void setEnvelopeInnerRadius(double envelopeInnerRadius)
Set inner radius of cooling system envelope.
void setColdTubeR(double coldTubeR)
Set radius of cold tubes in the cooling test plane.
void setModuleHoleSize(double hsize)
Set size of module hole in support plate.
double getSlotR(unsigned modID) const
Get radial position of module with given module ID number.
void setRingPar(const std::vector< std::pair< double, double > > &ringPar)
Set parameters of module slot rings (r of center of slots in ring, phi (angle) distance between modul...
void setSupportBackWallHeight(double h)
Set height of the aluminum walls between modules on the electronics side of aluminum support plate.
void addSupportPlate(double inR, double outR, double thick, const std::string &material)
Set parameters of the support plate.
void print(const std::string &title="Detector plane parameters") const override
Print the content of the class.
double getSlotPhi(unsigned modID) const
Get phi (angle) position of module with given module ID number.
void setSupportZPosition(double zPosition)
Set Z position of the aluminum support plate (start Z).
void setSupportBackWallThickness(double d)
Set thickness of the aluminum walls between modules on the electronics side of the aluminum support p...
void setPlacement(double x, double y, double z, double rx, double ry, double rz)
Set detector plane positioning within ARICH local volume.
void setFebcoolingv2GeometryID(const std::vector< double > &febcoolingv2GeometryID)
Set vector of feb cooling configuration/geometry ID.
void setRectangleW(double value)
Set width of the rectangle in mm.
void setRectangleL(double value)
Set length of the rectangle in mm.
void setSmallSquareSize(double value)
Set size of the small square in mm.
void setRectangleDistanceFromCenter(double value)
Set distance from center of the rectangle in mm.
void setSmallSquareThickness(double value)
Set thickness of the small square in mm.
void setRectangleThickness(double value)
Set thickness of the rectangle in mm.
void setBigSquareSize(double value)
Set size of the big square in mm.
void setBigSquareThickness(double value)
Set thickness of the big square in mm.
void setBeta(double beta)
Sets rotation around y.
void setZ(double z)
Sets translation in z.
void setAlpha(double alpha)
Sets rotation around x.
void setY(double y)
Sets translation in y.
void setGamma(double gamma)
Sets rotation around z.
void setX(double x)
Sets translation in x.
void setChipGap(double chipGap)
Set gap between APD chips.
Definition: ARICHGeoHAPD.h:56
void setAPDVolume(double sizeX, double sizeY, double sizeZ, const std::string &material, const GeoOpticalSurface &surf)
Sets APD volume (single volume for all 4 chips)
Definition: ARICHGeoHAPD.h:131
void print(const std::string &title="HAPD module geometry parameters") const override
Print the content of the class.
Definition: ARICHGeoHAPD.cc:85
void setFEBVolume(double sizeX, double sizeY, double sizeZ, const std::string &material)
Sets FEB volume.
Definition: ARICHGeoHAPD.h:114
void setWinThickness(double thickness)
Set window thickness.
Definition: ARICHGeoHAPD.h:44
void setModuleSizeZ(double modZ)
Set module size in Z (height of HAPD + FEB)
Definition: ARICHGeoHAPD.h:75
void setWinRefIndex(double refInd)
Set refractive index of HAPD window.
Definition: ARICHGeoHAPD.h:69
void setWallThickness(double thickness)
Set wall thickness.
Definition: ARICHGeoHAPD.h:38
void setWallMaterial(const std::string &material)
Sets casing material.
Definition: ARICHGeoHAPD.h:81
void setWinMaterial(const std::string &material)
Set window material.
Definition: ARICHGeoHAPD.h:87
void setHAPDVolume(double sizeX, double sizeY, double sizeZ, const std::string &material)
Sets HAPD volume.
Definition: ARICHGeoHAPD.h:148
void setPadSize(double padSize)
Set pad size.
Definition: ARICHGeoHAPD.h:50
void setNPads(int nx, int ny)
Set number of pads in x and y direction.
Definition: ARICHGeoHAPD.h:63
void getXYChannelPos(int chX, int chY, double &x, double &y) const
Returns local x,y position from channel X,Y numbers.
Definition: ARICHGeoHAPD.cc:15
void setVolume(double innerR, double outerR, double length, const std::string &material)
Sets parameters of ARICH master volume.
void print(const std::string &title="ARICH Master Volume geometry parameters") const override
Print the content of the class.
void setPlacement(double x, double y, double z, double rx, double ry, double rz)
Sets positioning of ARICH master volume in global Belle II coordinate system.
double getLength() const
Get ARICH master volume length.
void setMergerPCBWidth(double sizeW)
Set merger PCB width.
void setMergerAngle(const std::vector< double > &mergerAngle)
Set vector of merger boarts azimuthal angles in polar coordinate system in deg.
void setEnvelopeCenterPosition(double x0, double y0, double z0)
Set position of merger PCB assembly envelope.
void setSingleMergerenvelopeDeltaZ(const std::vector< double > &singlemergerenvelopeDeltaZ)
Set vector of Z position of the single merger and merger cooling body envelope inside global merger e...
void setMergerPCBscrewholePosdX2(double screwholePosdX2)
Set merger PCB screw hole position from the top edge.
void checkMergerPositionsDataConsistency() const
Check data consistency of the merger positions In case of failure print the basf2 ERROR message using...
void setSingleMergerEnvelopeThickness(double thickness)
Set single merger PCB and merger cooling envelop thickness.
void setMergerPCBLenght(double sizeL)
Set merger PCB length.
void setMergerPCBMaterialName(const std::string &materialName)
Set merger PCB material name.
void setMergerPosR(const std::vector< double > &mergerPosR)
Set vector of merger boards distances from the center in mm.
void setSingleMergerEnvelopeSizeL(double sizeL)
Set single merger PCB and merger cooling envelop length.
void setMergerPCBscrewholeR(double screwholeR)
Set merger PCB screw hole radius.
void setEnvelopeOuterRadius(double envelopeOuterRadius)
Set outer radius of merger PCB assembly envelope.
void print(const std::string &title="Merger PCB geometry parameters") const
Print the content of the class.
void setMergerSlotID(const std::vector< double > &mergerSlotID)
Set vector of merger boards slot numbers.
void setMergerPCBThickness(double thickness)
Set merger PCB thickness.
void setMergerOrientation(const std::vector< double > &mergerOrientation)
Set vector of merger boarts orientations.
void setSingleMergeEnvelopePosition(double x0, double y0, double z0)
Set position of merger PCB inside the single merger envelope.
void setEnvelopeThickness(double envelopeThickness)
Set thickness of merger PCB assembly envelope.
void setSingleMergerEnvelopeSizeW(double sizeW)
Set single merger PCB and merger cooling envelop width.
void setMergerPCBscrewholePosdY(double screwholePosdY)
Set merger PCB screw hole position from the left and right sides.
void setEnvelopeInnerRadius(double envelopeInnerRadius)
Set inner radius of merger PCB assembly envelope.
void setMergerPCBscrewholePosdX1(double screwholePosdX1)
Set merger PCB screw hole position from the bottom edge.
void setDisplacementElement(int id, const ARICHPositionElement &pars)
Sets displacement parameters (element) for mirror plate.
void initializeDefault()
Initializes default mirror position parameters (assuming plate position on the regular m_nMirrors-sid...
void print(const std::string &title="Mirror configuration parameters") const override
Print the content of the class.
const ROOT::Math::XYZVector & getPoint(const unsigned mirID) const
Get vector to the center point of the mirror plate reflective surface.
void setRadius(double r)
Set nominal radius at which mirror plates are placed (center of plate)
void setNMirrors(unsigned nmir)
Set number of mirror plates (slots)
void setStartAngle(double stang)
Set phi angle of position of the first mirror plate.
void setMirrorPlate(double thick, double width, double length, const std::string &material, const GeoOpticalSurface &surf)
Set parameters of mirror plate.
void setZPosition(double zPos)
Set nominal Z position of mirror plates (center point in ARICH local frame)
void addTube(double inR, double outR, double length, double zPosition, const std::string &material, const std::string &name)
Add volume of cylindrical shape (tube)
void setWedge(unsigned i, const std::vector< double > &par)
Set parameters of support wedge volumes.
void setMaterial(const std::string &material)
Set default material of support structures.
void addWedge(int type, double r, double phi, double z, const std::string &material)
Add wedge (all added wedges are placed)
void print(const std::string &title="Parameters of ARICH support structure and neutron shield") const override
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.