41 {
42
43 GeoFullPhysVol* barrelPhys{nullptr};
44
46 barrelPhys = (*m_mapFPV)["Barrel"];
47 }
48 else {
49
50
51
52 double rmin =
m_gmt_mgr->PixelBarrelRMin();
53 double rmax =
m_gmt_mgr->PixelBarrelRMax();
54 double halflength =
m_gmt_mgr->PixelBarrelHalfLength();
55 const GeoMaterial* air =
m_mat_mgr->getMaterial(
"std::Air");
56 const GeoTube* barrelTube = new GeoTube(rmin,rmax,halflength);
57 const GeoLogVol* barrelLog = new GeoLogVol("Barrel",barrelTube,air);
58 barrelPhys = new GeoFullPhysVol(barrelLog);
59 }
60
61
63
64
67
68
69
70
72 for(
int ii = 0; ii <
m_gmt_mgr->PixelBarrelNLayer(); ii++){
73
76 Identifier
id =
m_gmt_mgr->getIdHelper()->wafer_id(0,ii,0,0);
77
79
80 std::string lnameDD2 = "Layer_PixelBarrel"+std::to_string(ii);
81
82 auto itAX =
m_mapAX->find(lnameDD2);
84 throw std::runtime_error("GeoPixelBarrel cannot find AX for the key " + lnameDD2);
85 GeoAlignableTransform* xform = itAX->second;
86
87 auto itFPV =
m_mapFPV->find(lnameDD2);
89 throw std::runtime_error("GeoPixelBarrel cannot find FPV for the key " + lnameDD2);
90 GeoFullPhysVol* layerFPV = itFPV->second;
91
93
94
95 m_DDmgr->addAlignableTransform(1,
id, xform, layerFPV);
96
97
98
99
100
101 InDetDD::ExtraMaterial xMat(
m_gmt_mgr->distortedMatManager());
102 xMat.add(layerFPV,"PixelLayer");
103 xMat.add(layerFPV,
"PixelLayer"+std::to_string(
m_gmt_mgr->GetLD()));
104 }
105 else {
106
107 double layerZshift =
m_gmt_mgr->PixelLayerGlobalShift();
108 GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Translate3D(0.,0.,layerZshift));
109 GeoVPhysVol* layerphys =
layer.Build();
110 std::string lname = "Layer" + std::to_string(ii);
111 GeoNameTag *
tag =
new GeoNameTag(lname);
112 barrelPhys->add(tag);
113 barrelPhys->add(new GeoIdentifierTag(ii));
114 barrelPhys->add(xform);
115 barrelPhys->add(layerphys);
116
117
118 m_DDmgr->addAlignableTransform(1,
id, xform, layerphys);
119
120
122 {
123
124 GeoNameTag * tagSupportA = new GeoNameTag("StaveRingAndEndblocks_A");
125 GeoTransform *xformSupportA =
layer.getSupportTrfA();
126 GeoPhysVol *supportPhys_A =
layer.getSupportA();
127 barrelPhys->add(tagSupportA);
128 barrelPhys->add(xformSupportA);
129 barrelPhys->add(supportPhys_A);
130
131
132 GeoNameTag * tagSupportC = new GeoNameTag("StaveRingAndEndblocks_C");
133 GeoTransform *xformSupportC =
layer.getSupportTrfC();
134 GeoPhysVol *supportPhys_C =
layer.getSupportC();
135 barrelPhys->add(tagSupportC);
136 barrelPhys->add(xformSupportC);
137 barrelPhys->add(supportPhys_C);
138
139
141 GeoNameTag *tagM = new GeoNameTag("Brl0M_StaveRing");
142 GeoTransform *xformSupportMidRing =
layer.getSupportTrfMidRing();
143 GeoVPhysVol *supportPhysMidRing =
layer.getSupportMidRing();
144 barrelPhys->add(tagM);
145 barrelPhys->add(xformSupportMidRing);
146 barrelPhys->add(supportPhysMidRing);
147 }
148
149
150
153 iFlexSrv.Build();
154
155 GeoNameTag * tagFlexA = new GeoNameTag("PP0Flex_A");
156 GeoTransform *xformFlexA = iFlexSrv.getSupportTrfA();
157 GeoPhysVol *flexPhys_A = iFlexSrv.getSupportA();
158 barrelPhys->add(tagFlexA);
159 barrelPhys->add(xformFlexA);
160 barrelPhys->add(flexPhys_A);
161
162 GeoNameTag * tagFlexC = new GeoNameTag("PP0Flex_C");
163 GeoTransform *xformFlexC = iFlexSrv.getSupportTrfC();
164 GeoPhysVol *flexPhys_C = iFlexSrv.getSupportC();
165 barrelPhys->add(tagFlexC);
166 barrelPhys->add(xformFlexC);
167 barrelPhys->add(flexPhys_C);
168 }
169 }
170 }
171 }
172 else
173 {
175 }
176 }
177
179
180
181
184 m_pixServices->getServMatBuilder()->buildAndPlace(
"B", barrelPhys);
185 }
186
187
188
189
192 frame.BuildInBarrel(barrelPhys);
193 }
194 }
195
196
197 InDetDD::ExtraMaterial xMat(
m_gmt_mgr->distortedMatManager());
198 xMat.add(barrelPhys,"PixelBarrel");
199
200 return barrelPhys;
201}
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
GeoModelIO::ReadGeoModel * m_sqliteReader
PixelGeometryManager * m_gmt_mgr
InDetDD::PixelDetectorManager * m_DDmgr
InDetMaterialManager * m_mat_mgr