gets geometry parameters from gearbox.
31{
32
33
34
35 m_bbstudy = content.getInt(
"BeamBackgroundStudy");
36
37 GearDir envParams(content,
"Envelope");
38 m_masterVolume.
setVolume(envParams.getLength(
"innerRadius"), envParams.getLength(
"outerRadius"), envParams.getLength(
"length"),
39 std::string("ARICH_Air"));
41 envParams.getLength("zPosition") + envParams.getLength("length") / 2., envParams.getAngle("xRotation"),
42 envParams.getAngle("yRotation"), envParams.getAngle("zRotation"));
43
44 GearDir displParams(content,
"GlobalDisplacement");
52
54
55 GearDir detParams(content,
"Detector/Module");
56
66
67 m_hapd.
setFEBVolume(detParams.getLength(
"FEB/size"), detParams.getLength(
"FEB/size"), detParams.getLength(
"FEB/thickness"),
68 detParams.getString("FEB/material"));
69 m_hapd.
setHAPDVolume(detParams.getLength(
"HAPD/size"), detParams.getLength(
"HAPD/size"), detParams.getLength(
"HAPD/height"),
70 detParams.getString("HAPD/fillMaterial"));
71
72 GearDir apdSurfParams(detParams,
"HAPD/Surface");
73 m_hapd.
setAPDVolume(detParams.getLength(
"HAPD/apdSize"), detParams.getLength(
"HAPD/apdSize"),
74 detParams.getLength("HAPD/apdThickness"), detParams.getString("HAPD/apdMaterial"),
75 materials.createOpticalSurfaceConfig(apdSurfParams));
76
77 GearDir mergerParams(content,
"MergerPCB");
78
96 mergerParams.getDouble("mergerEnvelope/y0"),
97 mergerParams.getDouble("mergerEnvelope/z0"));
99 mergerParams.getDouble("merger/envelopePosY0"),
100 mergerParams.getDouble("merger/envelopePosZ0"));
105
106
107 GearDir cablesEnvelopParams(content,
"cablesEnvelope");
108
114 cablesEnvelopParams.getDouble("z0"));
116
117
118 GearDir coolingParams(content,
"coolingPipe");
119
124 coolingParams.getDouble("coolingEnvelope/z0"));
136 coolingParams.getDouble("coolingTestPlate/lengthY"), coolingParams.getDouble("coolingTestPlate/lengthZ"));
147
148
149 GearDir coolingFEBParams(content,
"febcoolingv2");
150
151
161
162
164
165 GearDir mirrParams(content,
"Mirrors");
166 if (mirrParams) {
169 GearDir surfParams(mirrParams,
"Surface");
170 m_mirrors.
setMirrorPlate(mirrParams.getLength(
"thickness"), mirrParams.getLength(
"width"), mirrParams.getLength(
"length"),
171 mirrParams.getString("material"), materials.createOpticalSurfaceConfig(surfParams));
175 }
176
177 GearDir mirrDisplParams(content,
"MirrorDisplacement");
178 if (mirrDisplParams) {
180 for (auto plate : mirrDisplParams.getNodes("Plate")) {
181 int id = plate.getInt("@id");
182 double r = plate.getLength("r");
183 double phi = plate.getAngle("phi");
184 double z = plate.getLength("z");
185 double alpha = plate.getLength("alpha");
186 double beta = plate.getLength("beta");
187 double gamma = plate.getLength("gamma");
189 ARICHPositionElement displEl(r * cos(origPhi + phi), r * sin(origPhi + phi), z, alpha, beta, gamma);
191
192 }
193 }
194
195 GearDir aerogel(content,
"Aerogel");
196
197 std::vector<double> dPhi;
198 std::vector<int> nAeroSlotsIndividualRing;
199 for (auto ring : aerogel.getNodes("slotInRing/Ring")) {
200 dPhi.push_back(2.* M_PI / ring.getInt());
201 nAeroSlotsIndividualRing.push_back(ring.getInt());
202 }
203 std::vector<double> slotR;
204 for (auto ring : aerogel.getNodes("slotR/Ring")) {
205 slotR.push_back(ring.getLength());
206 }
207
212
213
217 aerogel.getLength("plateThickness"), aerogel.getString("material"));
218 int ilayer = 1;
219 for (auto layer : aerogel.getNodes("Layers/Layer")) {
220 double thick = layer.getLength(
"thickness") /
Unit::cm;
221 std::string material = layer.getString("material");
222 double refIndex = layer.getDouble("refIndex");
223 double trLen = layer.getLength("trLength");
225 ilayer++;
226
227 }
231
232
233 GearDir aerotilesDir(content,
"AerogelTiles");
234 for (int il = 0; il < ilayer - 1; il++) {
235 int iring = 0;
236 for (auto ns_ring : nAeroSlotsIndividualRing) {
237 iring++;
238 for (int islot = 1; islot < ns_ring + 1; islot++) {
239 for (auto tileNode : aerotilesDir.getNodes("Tiles/Tile")) {
240 int ring = tileNode.getInt("ring");
241 int column = tileNode.getInt("column");
242 int layerN = tileNode.getInt("layer");
243 if (iring == ring && column == islot && il == layerN) {
244 double n = tileNode.getDouble("n");
245 double transmL = tileNode.getDouble("transmL");
246 double thick = tileNode.getDouble("thick");
247 std::string materialName = tileNode.getString("material");
249 }
250 }
251 }
252 }
253 }
254
257 aerogel.getLength("zPosition") +
258 (aerogel.getLength("wallHeight") + aerogel.getLength("plateThickness") + aerogel.getLength("imgTubeThickness")) / 2.0 -
260 0, 0, 0);
263 wallHeightNew = wallHeightNew / 10.0;
264
265
266
268 aerogel.getLength("zPosition") +
269 (wallHeightNew + aerogel.getLength(
"plateThickness") + aerogel.getLength(
"imgTubeThickness")) / 2.0 -
m_masterVolume.
getLength() /
270 2.0,
271 0, 0, 0);
272 } else {
273 B2ERROR("ARICHGeometryConfig::read --> getFullAerogelMaterialDescriptionKey() is wrong");
274 }
275
276
277
278
280
281
282 GearDir supportDir(content,
"SupportStructure");
283 for (auto tube : supportDir.getNodes("Tubes/Tube")) {
284 std::string material = tube.getString("material");
285 double innerR = tube.getLength("innerR");
286 double outerR = tube.getLength("outerR");
287 double length = tube.getLength("length");
289 std::string name = tube.getString("name");
291 }
292
293
295
296 for (auto wedge : supportDir.getNodes("Wedges/Wedge")) {
297 std::vector<double> pars;
298 int id = wedge.getInt("@id");
299 if (id > 3 || id < 1) continue;
300 for (auto par : wedge.getNodes("par")) {
301 pars.push_back(par.getLength());
302 }
304 }
305
306 for (auto wedge : supportDir.getNodes("Wedges/Placements/Placement")) {
307 int type = wedge.getInt("type");
308 double r = wedge.getLength("r");
309 double phi = wedge.getAngle("phi");
312 }
313
314
315
316}
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 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+outter aluminum ring).
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 thikness just after aerogel layers used as volume to which tracks are extrapolated...
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.
void setEnvelopeCenterPosition(double x0, double y0, double z0)
Set position of cables envelop.
void setEnvelopeOuterRadius(double envelopeOuterRadius)
Set outer radius of cables envelop.
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 dimentions 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 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 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.
void setAPDVolume(double sizeX, double sizeY, double sizeZ, const std::string &material, const GeoOpticalSurface &surf)
Sets APD volume (single volume for all 4 chips)
void setFEBVolume(double sizeX, double sizeY, double sizeZ, const std::string &material)
Sets FEB volume.
void setWinThickness(double thickness)
Set window thickness.
void setModuleSizeZ(double modZ)
Set module size in Z (height of HAPD + FEB)
void setWinRefIndex(double refInd)
Set refractive index of HAPD window.
void setWallThickness(double thickness)
Set wall thickness.
void setWallMaterial(const std::string &material)
Sets casing material.
void setWinMaterial(const std::string &material)
Set window material.
void setHAPDVolume(double sizeX, double sizeY, double sizeZ, const std::string &material)
Sets HAPD volume.
void setPadSize(double padSize)
Set pad size.
void setNPads(int nx, int ny)
Set number of pads in x and y direction.
void setVolume(double innerR, double outerR, double length, const std::string &material)
Sets parameters of ARICH master volume.
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.
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 lenght.
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 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...
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)
bool m_displaceGlobal
use global displacement parameters
bool m_displaceMirrors
use mirror displacement parameters
int m_bbstudy
is beam background study
void modulesPosition(const GearDir &content)
initializes the positions of HAPD modules, with the parameters from xml.
Position element for ARICH.
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