gets geometry parameters from gearbox.
29{
30
31
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");
50
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
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
104
105 GearDir cablesEnvelopParams(content, "cablesEnvelope");
106
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
115
116 GearDir coolingParams(content, "coolingPipe");
117
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
146
147 GearDir coolingFEBParams(content, "febcoolingv2");
148
149
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
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) {
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
190 }
191 }
192
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);
210
211
212 m_aerogelPlane.setWallThickness(aerogel.getLength(
"wallThickness"));
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
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
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);
259 }
else if (
m_aerogelPlane.getFullAerogelMaterialDescriptionKey() == 1) {
261 wallHeightNew = wallHeightNew / 10.0;
262
263
264
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
275
276
278
279
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");
289 }
290
291
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.;
310 }
311
312
313
314}
bool m_displaceGlobal
use global displacement parameters
ARICHGeoGlobalDisplacement m_globalDispl
global displacement parameters
bool m_displaceMirrors
use mirror displacement parameters
ARICHGeoFEBCooling m_coolingv2
ARICH cooling system (v2) geometry configuration.
int m_bbstudy
is beam background study
ARICHGeoMirrorDisplacement m_mirrorDispl
mirror displacement parameters
void modulesPosition(const GearDir &content)
initializes the positions of HAPD modules, with the parameters from xml.
static const double cm
Standard units with the value = 1.
static Materials & getInstance()
Get a reference to the singleton instance.
double sqrt(double a)
sqrt for double