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"
47 GeoModelIO::ReadGeoModel* sqliteReader,
48 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
49 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
51 m_stereoSign(stereoSign),
116 int tiltSign = (
m_tilt < 0) ? -1 : +1;
125 double yModuleOffset = 0.0;
154 m_coolingPipePos =
new GeoTransform(GeoTrf::Translate3D(xCoolingPipePos, yCoolingPipePos, 0));
167 double xModulePos = stagger_sign * xModuleOffset;
168 double yModulePos = yModuleOffset;
169 double zModulePos =
m_zPos[iModule];
181 double xCoolingBlockPos = xCoolingBlockOffset + xModulePos;
182 double yCoolingBlockPos = yCoolingBlockOffset + yModulePos;
183 double zCoolingBlockPos = zCoolingBlockOffset + zModulePos;
184 m_coolingBlockPos.push_back(
new GeoTransform(GeoTrf::Translate3D(xCoolingBlockPos, yCoolingBlockPos, zCoolingBlockPos)));
190 double xDoglegPos = xDoglegOffset + xModulePos;
191 double yDoglegPos = yDoglegOffset + yModulePos;
192 double zDoglegPos = zDoglegOffset + zModulePos;
193 m_doglegPos.push_back(
new GeoTransform(GeoTrf::Translate3D(xDoglegPos, yDoglegPos, zDoglegPos)));
196 stagger_sign = - stagger_sign;
231 double moduleYMax = c4.y();
232 double moduleYMin = c5.y();
245 double skiWidth = moduleYMax - moduleYMin + 2*rphiClearance;
250 double skiThickness =
m_module->
thickness() + 2 * std::abs(xModuleOffset) + radialClearance;
260 double xmax1 = 0.5*skiThickness;
261 double xmin1 = -xModuleOffset + xDoglegOffset - 0.5*
m_dogleg->thickness();
262 double xmax2 = xmax1;
263 double xmin2 = xCoolingPipePos -
m_coolingPipe->pipeRadius();
267 double ymax1 = moduleYMax + rphiClearance;
268 double ymin1 = moduleYMin - rphiClearance;
292 double xCenter = 0.5*(xmin1+xmax1);
293 double yCenter = 0.5*(ymin1+ymax1);
294 double xShift2 = 0.5*(xmin2+xmax2) - xCenter;
295 double yShift2 = 0.5*(ymin2+ymax2) - yCenter;
306 GeoBox * envelope1 =
new GeoBox(0.5 * (xmax1-xmin1), 0.5 * (ymax1-ymin1), 0.5 *
m_length);
307 GeoBox * envelope2 =
new GeoBox(0.5 * (xmax2-xmin2), 0.5 * (ymax2-ymin2), 0.5 *
m_length);
309 const GeoShape * skiEnvelopeShape =
nullptr;
311 const GeoShape & tmpShape = (*envelope1).
312 add(*envelope2 << GeoTrf::Translate3D(xShift2, yShift2, 0));
313 skiEnvelopeShape = &tmpShape;
320 std::ostringstream
name;
343 GeoPhysVol * ski=
nullptr;
353 GeoAlignableTransform * moduleTransform =
new GeoAlignableTransform(
m_modulePos[iModule]);
354 ski->add(moduleTransform);
356 ski->add(
new GeoIdentifierTag(
m_id[iModule]));
357 id.setEtaModule(
m_id[iModule]);
385 id.setEtaModule(
m_id[iModule]);