15 #include "GeoModelKernel/GeoBox.h"
16 #include "GeoModelKernel/GeoLogVol.h"
17 #include "GeoModelKernel/GeoFullPhysVol.h"
18 #include "GeoModelKernel/GeoMaterial.h"
19 #include "GaudiKernel/SystemOfUnits.h"
20 #include "Identifier/Identifier.h"
38 GeoModelIO::ReadGeoModel* sqliteReader,
39 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
40 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX,
41 bool isBLayer,
bool isModule3D)
68 std::shared_ptr<const PixelDiodeMatrix> fullMatrix =
makeMatrix(phiPitch, etaPitch, etaPitchLong, etaPitchLongEnd,
69 circuitsPhi, circuitsEta, diodeRowPerCirc, diodeColPerCirc);
71 std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
93 std::vector <int> connections(maxRow-minRow+1);
96 for (
unsigned int iRow = 0; iRow < connections.size(); iRow++){
97 connections[iRow] = iRow + minRow;
122 m_gmt_mgr->
msg(MSG::WARNING) <<
"GeoPixelSiCrystal: Active area not consistent with sensor size. Sensor: "
128 <<
"GeoPixelSiCrystal: Sensor: "
141 GeoFullPhysVol* siPhys{
nullptr};
146 siPhys = (*m_mapFPV)[siName];
156 const GeoBox* siBox =
new GeoBox(thickness*0.5,
width*0.5,
length*0.5);
160 auto *logVolume =
new GeoLogVol(
logname,siBox,siMat);
164 siPhys =
new GeoFullPhysVol(logVolume);
180 int circuitsPhi,
int circuitsEta,
int diodeRowPerCirc,
int diodeColPerCirc)
195 std::shared_ptr<const PixelDiodeMatrix> fullMatrix =
nullptr;
197 if (etaPitchLongEnd == etaPitchLong && etaPitchLong != etaPitch) {
201 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
202 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLong);
204 std::shared_ptr<const PixelDiodeMatrix> singleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
206 std::move(normalCell),
210 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
211 nullptr, std::move(singleChipRow), circuitsEta,
nullptr);
213 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
214 nullptr, std::move(singleRow), circuitsPhi*diodeRowPerCirc,
nullptr);
215 }
else if (etaPitchLongEnd == etaPitchLong && (etaPitchLong == etaPitch || circuitsEta == 1)) {
218 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
219 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
220 nullptr, std::move(normalCell), circuitsEta*diodeColPerCirc,
nullptr);
221 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
222 nullptr, std::move(singleRow), circuitsPhi*diodeRowPerCirc,
nullptr);
223 }
else if (etaPitchLongEnd == etaPitch && etaPitchLong != etaPitch && circuitsEta > 2) {
226 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
227 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLong);
229 std::shared_ptr<const PixelDiodeMatrix> lowerSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
234 std::shared_ptr<const PixelDiodeMatrix> middleSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
239 std::shared_ptr<const PixelDiodeMatrix> upperSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
244 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
245 std::move(lowerSingleChipRow), std::move(middleSingleChipRow), circuitsEta-2, std::move(upperSingleChipRow));
246 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
247 nullptr, singleRow, circuitsPhi*diodeRowPerCirc,
nullptr);
248 }
else if (etaPitchLongEnd == etaPitch && etaPitchLong != etaPitch && circuitsEta == 2) {
251 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
252 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLong);
254 std::shared_ptr<const PixelDiodeMatrix> lowerSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
259 std::shared_ptr<const PixelDiodeMatrix> upperSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
264 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
265 std::move(lowerSingleChipRow), std::move(upperSingleChipRow), 1,
nullptr);
266 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
267 nullptr, singleRow, circuitsPhi*diodeRowPerCirc,
nullptr);
268 }
else if (circuitsEta == 1 || (etaPitchLongEnd != etaPitch && etaPitchLong == etaPitch )){
272 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
273 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLongEnd);
275 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
277 std::move(normalCell),
278 circuitsEta*diodeColPerCirc-2,
280 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
281 nullptr, singleRow, circuitsPhi*diodeRowPerCirc,
nullptr);
285 std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
286 std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLong);
287 std::shared_ptr<const PixelDiodeMatrix> endCell = PixelDiodeMatrix::construct(phiPitch, etaPitchLongEnd);
289 std::shared_ptr<const PixelDiodeMatrix> lowerSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
294 std::shared_ptr<const PixelDiodeMatrix> middleSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
299 std::shared_ptr<const PixelDiodeMatrix> upperSingleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
304 std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
305 std::move(lowerSingleChipRow), std::move(middleSingleChipRow), circuitsEta-2, std::move(upperSingleChipRow));
306 fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
307 nullptr, singleRow, circuitsPhi*diodeRowPerCirc,
nullptr);