103 const double rphiClearance = 0.5*Gaudi::Units::mm;
104 const double radialClearance = 0.5*Gaudi::Units::mm;
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];
173 GeoTrf::Translation3D pos(xModulePos, yModulePos, zModulePos);
174 m_modulePos.push_back(GeoTrf::Transform3D(pos*rot));
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;
205 GeoTrf::Vector3D c0(0.0,
208 GeoTrf::Vector3D c1(0.0,
211 GeoTrf::Vector3D c2(0.0,
214 GeoTrf::Vector3D c3(0.0,
217 GeoTrf::Vector3D c4(0.0,
220 GeoTrf::Vector3D c5(0.0,
223 GeoTrf::Vector3D c6(0.0,
226 GeoTrf::Vector3D c7(0.0,
230 double moduleYMax = c4.y();
231 double moduleYMin = c5.y();
241 moduleYMax = std::max(std::max(c0.y(), c4.y()), std::max(c7.y(), c3.y()));
242 moduleYMin = std::min(std::min(c1.y(), c5.y()), std::min(c6.y(), c2.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;
270 ymax2 = std::max(-yModuleOffset + yCoolingBlockOffset + 0.5*
m_coolingBlock->width(),
275 ymin2 = std::min(-yModuleOffset + yCoolingBlockOffset - 0.5*
m_coolingBlock->width(),
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;
314 GeoLogVol * skiLog =
new GeoLogVol(
getName(), skiEnvelopeShape,
m_materials->gasMaterial());
319 std::string name = std::format(
"Module#{}",
m_id[iModule]);
320 m_nameTag.push_back(
new GeoNameTag(name));
SCT_Ski(const std::string &name, SCT_Module *module, int stereoSign, double tilt, double length, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)