104 const double rphiClearance = 0.5*Gaudi::Units::mm;
105 const double radialClearance = 0.5*Gaudi::Units::mm;
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];
174 GeoTrf::Translation3D pos(xModulePos, yModulePos, zModulePos);
175 m_modulePos.push_back(GeoTrf::Transform3D(pos*rot));
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;
206 GeoTrf::Vector3D c0(0.0,
209 GeoTrf::Vector3D c1(0.0,
212 GeoTrf::Vector3D c2(0.0,
215 GeoTrf::Vector3D c3(0.0,
218 GeoTrf::Vector3D c4(0.0,
221 GeoTrf::Vector3D c5(0.0,
224 GeoTrf::Vector3D c6(0.0,
227 GeoTrf::Vector3D c7(0.0,
231 double moduleYMax = c4.y();
232 double moduleYMin = c5.y();
242 moduleYMax = std::max(std::max(c0.y(), c4.y()), std::max(c7.y(), c3.y()));
243 moduleYMin = std::min(std::min(c1.y(), c5.y()), std::min(c6.y(), c2.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;
271 ymax2 = std::max(-yModuleOffset + yCoolingBlockOffset + 0.5*
m_coolingBlock->width(),
276 ymin2 = std::min(-yModuleOffset + yCoolingBlockOffset - 0.5*
m_coolingBlock->width(),
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;
315 GeoLogVol * skiLog =
new GeoLogVol(
getName(), skiEnvelopeShape,
m_materials->gasMaterial());
320 std::ostringstream name;
321 name <<
"Module#" <<
m_id[iModule];
322 m_nameTag.push_back(
new GeoNameTag(name.str()));
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)