20 #include "GeoModelRead/ReadGeoModel.h"
21 #include "GeoModelKernel/GeoBox.h"
22 #include "GeoModelKernel/GeoLogVol.h"
23 #include "GeoModelKernel/GeoPhysVol.h"
24 #include "GeoModelKernel/GeoFullPhysVol.h"
25 #include "GeoModelKernel/GeoNameTag.h"
26 #include "GeoModelKernel/GeoIdentifierTag.h"
27 #include "GeoModelKernel/GeoTransform.h"
28 #include "GeoModelKernel/GeoShape.h"
29 #include "GeoModelKernel/GeoShapeUnion.h"
30 #include "GeoModelKernel/GeoShapeShift.h"
31 #include "GeoModelKernel/GeoDefinitions.h"
32 #include "GaudiKernel/SystemOfUnits.h"
40 GeoModelIO::ReadGeoModel* sqliteReader,
41 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
42 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
82 const double t_hybrid =
m_hybrid->thickness();
83 const double w_hybrid =
m_hybrid->width();
86 const double t_pigtail =
m_pigtail->thickness();
87 const double w_pigtail =
m_pigtail->width();
88 const double l_pigtail =
m_pigtail->length();
90 const double t_sensor =
m_sensor->thickness();
91 const double w_sensor =
m_sensor->width();
92 const double l_sensor =
m_sensor->length();
97 const double sensorPosX = 0.0;
98 const double sensorPosY = 0.0;
99 const double sensorPosZ = 0.0;
102 const double hybridPosY = 0.0;
105 const double pigtailPosX = hybridPosX + 0.5*t_hybrid - 0.5*t_pigtail;
106 const double pigtailPosY = -0.5*w_hybrid - 0.5*w_pigtail;
107 const double pigtailPosZ = hybridPosZ;
113 const double w_ose1 = w_sensor +
m_safety;
114 const double t_ose1 = t_sensor +
m_safety;
115 const double l_ose1 = l_sensor +
m_safety;
117 const double t_ose2 = t_hybrid +
m_safety;
118 const double w_ose2 = w_hybrid + w_pigtail +
m_safety;
119 const double l_ose2 = l_pigtail +
m_safety;
121 const double ose2PosX = hybridPosX;
122 const double ose2PosY = hybridPosY - 0.5*w_pigtail;
123 const double ose2PosZ = hybridPosZ;
128 m_hybridPos =
new GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
129 m_pigtailPos =
new GeoTransform(GeoTrf::Translate3D(pigtailPosX, pigtailPosY, pigtailPosZ));
143 m_sensorPos =
new GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
148 const GeoBox * ose1Shape =
new GeoBox(0.5 * t_ose1,
151 const GeoBox * ose2Shape =
new GeoBox(0.5 * t_ose2,
155 const GeoShape & OuterSideEnvelopeShape = (*ose1Shape).
156 add(*ose2Shape << GeoTrf::Translate3D(ose2PosX, ose2PosY, ose2PosZ));
158 const GeoLogVol * OuterSideEnvelopeLog =
new GeoLogVol(
"OuterSideEnvelope",
159 &OuterSideEnvelopeShape,
166 return OuterSideEnvelopeLog;
180 GeoFullPhysVol * outerSide =
new GeoFullPhysVol(
m_logVolume);
186 outerSide->add(
new GeoIdentifierTag(1000));
188 outerSide->add(
m_sensor->build(
id));
192 outerSide->add(
m_hybrid->getVolume());