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;