19 #include "GeoModelRead/ReadGeoModel.h"
20 #include "GeoModelKernel/GeoBox.h"
21 #include "GeoModelKernel/GeoTube.h"
22 #include "GeoModelKernel/GeoLogVol.h"
23 #include "GeoModelKernel/GeoPhysVol.h"
24 #include "GeoModelKernel/GeoNameTag.h"
25 #include "GeoModelKernel/GeoIdentifierTag.h"
26 #include "GeoModelKernel/GeoTransform.h"
27 #include "GeoModelKernel/GeoAlignableTransform.h"
28 #include "GeoModelKernel/GeoMaterial.h"
29 #include "GeoModelKernel/GeoShape.h"
30 #include "GeoModelKernel/GeoShapeUnion.h"
31 #include "GeoModelKernel/GeoShapeShift.h"
32 #include "GeoModelKernel/GeoDefinitions.h"
33 #include "GaudiKernel/SystemOfUnits.h"
46 GeoModelIO::ReadGeoModel* sqliteReader,
47 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
48 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
50 m_stereoSign(stereoSign),
115 int tiltSign = (
m_tilt < 0) ? -1 : +1;
124 double yModuleOffset = 0.0;
153 m_coolingPipePos =
new GeoTransform(GeoTrf::Translate3D(xCoolingPipePos, yCoolingPipePos, 0));
166 double xModulePos = stagger_sign * xModuleOffset;
167 double yModulePos = yModuleOffset;
168 double zModulePos =
m_zPos[iModule];
180 double xCoolingBlockPos = xCoolingBlockOffset + xModulePos;
181 double yCoolingBlockPos = yCoolingBlockOffset + yModulePos;
182 double zCoolingBlockPos = zCoolingBlockOffset + zModulePos;
183 m_coolingBlockPos.push_back(
new GeoTransform(GeoTrf::Translate3D(xCoolingBlockPos, yCoolingBlockPos, zCoolingBlockPos)));
189 double xDoglegPos = xDoglegOffset + xModulePos;
190 double yDoglegPos = yDoglegOffset + yModulePos;
191 double zDoglegPos = zDoglegOffset + zModulePos;
192 m_doglegPos.push_back(
new GeoTransform(GeoTrf::Translate3D(xDoglegPos, yDoglegPos, zDoglegPos)));
195 stagger_sign = - stagger_sign;
230 double moduleYMax = c4.y();
231 double moduleYMin = c5.y();
244 double skiWidth = moduleYMax - moduleYMin + 2*rphiClearance;
249 double skiThickness =
m_module->
thickness() + 2 * std::abs(xModuleOffset) + radialClearance;
259 double xmax1 = 0.5*skiThickness;
260 double xmin1 = -xModuleOffset + xDoglegOffset - 0.5*
m_dogleg->thickness();
261 double xmax2 = xmax1;
262 double xmin2 = xCoolingPipePos -
m_coolingPipe->pipeRadius();
266 double ymax1 = moduleYMax + rphiClearance;
267 double ymin1 = moduleYMin - rphiClearance;
291 double xCenter = 0.5*(xmin1+xmax1);
292 double yCenter = 0.5*(ymin1+ymax1);
293 double xShift2 = 0.5*(xmin2+xmax2) - xCenter;
294 double yShift2 = 0.5*(ymin2+ymax2) - yCenter;
305 GeoBox * envelope1 =
new GeoBox(0.5 * (xmax1-xmin1), 0.5 * (ymax1-ymin1), 0.5 *
m_length);
306 GeoBox * envelope2 =
new GeoBox(0.5 * (xmax2-xmin2), 0.5 * (ymax2-ymin2), 0.5 *
m_length);
308 const GeoShape * skiEnvelopeShape =
nullptr;
310 const GeoShape & tmpShape = (*envelope1).
311 add(*envelope2 << GeoTrf::Translate3D(xShift2, yShift2, 0));
312 skiEnvelopeShape = &tmpShape;
319 std::ostringstream
name;
342 GeoPhysVol * ski=
nullptr;
352 GeoAlignableTransform * moduleTransform =
new GeoAlignableTransform(
m_modulePos[iModule]);
353 ski->add(moduleTransform);
355 ski->add(
new GeoIdentifierTag(
m_id[iModule]));
356 id.setEtaModule(
m_id[iModule]);
384 id.setEtaModule(
m_id[iModule]);