10 #include "GeoModelKernel/GeoTransform.h"
11 #include "GeoModelKernel/GeoAlignableTransform.h"
12 #include "GeoModelKernel/GeoNameTag.h"
13 #include "GeoModelKernel/GeoBox.h"
14 #include "GaudiKernel/SystemOfUnits.h"
16 #include "Identifier/Identifier.h"
27 GeoModelIO::ReadGeoModel* sqliteReader,
28 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
29 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
33 double thickness = 0.5;
35 int circuitsPerPhi = 1;
36 int circuitsPerEta = 1;
37 int cellRowPerCirc = 80;
38 int cellColPerCirc = 336;
39 int rowsPerCircuit = 80;
40 int columnsPerCircuit = 336;
43 double pitchEtaLongEnd = 0.05;
44 double pitchEtaLong = 0.05;
45 double pitchPhi = 0.25;
46 double pitchEta = 0.05;
53 std::array<int,kNDirections>{circuitsPerPhi,circuitsPerEta},
54 std::array<int,kNDirections>{rowsPerCircuit,columnsPerCircuit},
56 std::array<double,kNDirections>{pitchPhi,pitchEta},
57 std::array<double,kNDirections>{0.,pitchEtaLongEnd},
58 std::array<double,kNDirections>{0.,pitchEtaLong}});
60 std::unique_ptr<PixelModuleDesign> p_dbmdesign = std::make_unique<PixelModuleDesign>(thickness,
67 std::move(diode_tree),
96 GeoIdentifierTag* diamondTag =
new GeoIdentifierTag(400);
148 double layerUnitPos_Y = (trapBackY/
cos(
angle) - coolingSidePlateY)*
cos(
angle);
149 double layerUnitPos_Z = coolingSidePlateY*
sin(
angle) + trapBackShortZ + bracketZ - brcktLockZ;
157 if(diamond ==
nullptr)
164 double max_thick = diamond_Z + air_gap + chip_thick + substrate_Z;
167 const GeoBox* dbmModuleBox =
new GeoBox(substrate_X/2.0 + safety, substrate_Y/2.0 + safety, max_thick/2.0 + safety);
168 const GeoLogVol* dbmModuleLog =
new GeoLogVol(
"dbmModuleLog", dbmModuleBox, air);
169 GeoPhysVol* dbmModulePhys =
new GeoPhysVol(dbmModuleLog);
174 const GeoBox* dbmDiamondBox =
new GeoBox(diamond_Z/2.0, diamond_X/2.0, diamond_Y/2.0 );
175 const GeoLogVol* dbmDiamondLog =
new GeoLogVol(
"dbmDiamondLog", dbmDiamondBox, diamond);
176 GeoFullPhysVol* dbmDiamondPhys =
new GeoFullPhysVol(dbmDiamondLog);
182 GeoTrf::Translation3D dbmDiamondPos(0, bot2Diamond+diamond_Y/2.0-substrate_Y/2.0, diamond_Z/2.0-max_thick/2.0);
185 dbmModulePhys->add(diamondTag);
186 dbmModulePhys->add(xform);
187 dbmModulePhys->add(dbmDiamondPhys);
190 const GeoBox* dbmFEI4Box =
new GeoBox(chip_thick/2.0, chip_X/2.0, chip_Y/2.0 );
191 const GeoLogVol* dbmFEI4Log =
new GeoLogVol(
"dbmWallLogF4", dbmFEI4Box, chip_mat);
192 GeoPhysVol* dbmFEI4Phys =
new GeoPhysVol(dbmFEI4Log);
194 GeoTrf::Translation3D dbmFEI4Pos(0, bot2Chip+chip_Y/2.0-substrate_Y/2.0, max_thick/2.0-substrate_Z-chip_thick/2.0);
197 dbmModulePhys->add(xform);
198 dbmModulePhys->add(dbmFEI4Phys);
201 const GeoBox* dbmSubstBox =
new GeoBox(substrate_X/2.0, substrate_Y/2.0, substrate_Z/2.0);
203 const GeoLogVol* dbmSubstLog =
new GeoLogVol(
"dbmWallLogCe", dbmSubstBox, aluminiumNitride);
204 GeoPhysVol* dbmSubstPhys =
new GeoPhysVol(dbmSubstLog);
206 GeoTrf::Translate3D dbmSubstPos(0, 0, max_thick/2.0-substrate_Z/2.0);
207 xform =
new GeoTransform(dbmSubstPos);
209 dbmModulePhys->add(xform);
210 dbmModulePhys->add(dbmSubstPhys);
220 double sensorPosInModuleCage_Z = layer1Space +
layer*Zspacing - (substrate_Z + chip_thick + air_gap + diamond_Z/2.);
221 double sensorPosInModuleCage_Y = Rspacing + bot2Diamond + diamond_Y/2.;
222 double globPosZ = ZToIP + layerUnitPos_Z + (sensorPosInModuleCage_Z *
cos(
angle) - sensorPosInModuleCage_Y *
sin(
angle));
223 double globPosY = RToBeam + layerUnitPos_Y + (sensorPosInModuleCage_Z *
sin(
angle) + sensorPosInModuleCage_Y *
cos(
angle));
227 GeoAlignableTransform *xformAlign =
new GeoAlignableTransform(
GeoTrf::Transform3D(alignTransformPos*rmX10));
231 return dbmModulePhys;