33 m_bbstudy = content.getInt(
"BeamBackgroundStudy");
35 GearDir envParams(content,
"Envelope");
37 std::string(
"ARICH_Air"));
42 GearDir displParams(content,
"GlobalDisplacement");
53 GearDir detParams(content,
"Detector/Module");
68 detParams.
getString(
"HAPD/fillMaterial"));
70 GearDir apdSurfParams(detParams,
"HAPD/Surface");
73 materials.createOpticalSurfaceConfig(apdSurfParams));
75 GearDir mergerParams(content,
"MergerPCB");
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"));
92 m_merger.setMergerOrientation(mergerParams.
getArray(
"merger/mergerOrientation"));
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();
105 GearDir cablesEnvelopParams(content,
"cablesEnvelope");
116 GearDir coolingParams(content,
"coolingPipe");
118 m_cooling.setEnvelopeOuterRadius(coolingParams.
getDouble(
"coolingEnvelope/outerRadius"));
119 m_cooling.setEnvelopeInnerRadius(coolingParams.
getDouble(
"coolingEnvelope/innerRadius"));
122 coolingParams.
getDouble(
"coolingEnvelope/z0"));
126 m_cooling.setCoolingGeometryID(coolingParams.
getArray(
"cooling/coolingGeometryID"));
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"));
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();
147 GearDir coolingFEBParams(content,
"febcoolingv2");
157 m_coolingv2.setRectangleDistanceFromCenter(coolingFEBParams.
getDouble(
"rectangleDistanceFromCenter"));
158 m_coolingv2.setFebcoolingv2GeometryID(coolingFEBParams.
getArray(
"febcoolingv2GeometryID"));
163 GearDir mirrParams(content,
"Mirrors");
167 GearDir surfParams(mirrParams,
"Surface");
169 mirrParams.
getString(
"material"), materials.createOpticalSurfaceConfig(surfParams));
175 GearDir mirrDisplParams(content,
"MirrorDisplacement");
176 if (mirrDisplParams) {
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);
193 GearDir aerogel(content,
"Aerogel");
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());
201 std::vector<double> slotR;
202 for (
auto ring : aerogel.
getNodes(
"slotR/Ring")) {
203 slotR.push_back(ring.getLength());
208 m_aerogelPlane.setNAeroSlotsIndividualRing(nAeroSlotsIndividualRing);
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);
226 m_aerogelPlane.setFullAerogelMaterialDescriptionKey(aerogel.
getInt(
"fullAerogelMaterialDescriptionKey"));
228 m_aerogelPlane.setCompensationARICHairVolumeThick_min(aerogel.
getDouble(
"compensationARICHairVolumeThick_min"));
231 GearDir aerotilesDir(content,
"AerogelTiles");
232 for (
int il = 0; il < ilayer - 1; il++) {
234 for (
auto ns_ring : nAeroSlotsIndividualRing) {
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);
259 }
else if (
m_aerogelPlane.getFullAerogelMaterialDescriptionKey() == 1) {
261 wallHeightNew = wallHeightNew / 10.0;
271 B2ERROR(
"ARICHGeometryConfig::read --> getFullAerogelMaterialDescriptionKey() is wrong");
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");
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());
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.;