97 GeoIdentifierTag* diamondTag =
new GeoIdentifierTag(400);
149 double layerUnitPos_Y = (trapBackY/
cos(
angle) - coolingSidePlateY)*
cos(
angle);
150 double layerUnitPos_Z = coolingSidePlateY*
sin(
angle) + trapBackShortZ + bracketZ - brcktLockZ;
158 if(diamond ==
nullptr)
165 double max_thick = diamond_Z + air_gap + chip_thick + substrate_Z;
168 const GeoBox* dbmModuleBox =
new GeoBox(substrate_X/2.0 + safety, substrate_Y/2.0 + safety, max_thick/2.0 + safety);
169 const GeoLogVol* dbmModuleLog =
new GeoLogVol(
"dbmModuleLog", dbmModuleBox, air);
170 GeoPhysVol* dbmModulePhys =
new GeoPhysVol(dbmModuleLog);
175 const GeoBox* dbmDiamondBox =
new GeoBox(diamond_Z/2.0, diamond_X/2.0, diamond_Y/2.0 );
176 const GeoLogVol* dbmDiamondLog =
new GeoLogVol(
"dbmDiamondLog", dbmDiamondBox, diamond);
177 GeoFullPhysVol* dbmDiamondPhys =
new GeoFullPhysVol(dbmDiamondLog);
183 GeoTrf::Translation3D dbmDiamondPos(0, bot2Diamond+diamond_Y/2.0-substrate_Y/2.0, diamond_Z/2.0-max_thick/2.0);
186 dbmModulePhys->add(diamondTag);
187 dbmModulePhys->add(xform);
188 dbmModulePhys->add(dbmDiamondPhys);
191 const GeoBox* dbmFEI4Box =
new GeoBox(chip_thick/2.0, chip_X/2.0, chip_Y/2.0 );
192 const GeoLogVol* dbmFEI4Log =
new GeoLogVol(
"dbmWallLogF4", dbmFEI4Box, chip_mat);
193 GeoPhysVol* dbmFEI4Phys =
new GeoPhysVol(dbmFEI4Log);
195 GeoTrf::Translation3D dbmFEI4Pos(0, bot2Chip+chip_Y/2.0-substrate_Y/2.0, max_thick/2.0-substrate_Z-chip_thick/2.0);
198 dbmModulePhys->add(xform);
199 dbmModulePhys->add(dbmFEI4Phys);
202 const GeoBox* dbmSubstBox =
new GeoBox(substrate_X/2.0, substrate_Y/2.0, substrate_Z/2.0);
204 const GeoLogVol* dbmSubstLog =
new GeoLogVol(
"dbmWallLogCe", dbmSubstBox, aluminiumNitride);
205 GeoPhysVol* dbmSubstPhys =
new GeoPhysVol(dbmSubstLog);
207 GeoTrf::Translate3D dbmSubstPos(0, 0, max_thick/2.0-substrate_Z/2.0);
208 xform =
new GeoTransform(dbmSubstPos);
210 dbmModulePhys->add(xform);
211 dbmModulePhys->add(dbmSubstPhys);
221 double sensorPosInModuleCage_Z = layer1Space +
layer*Zspacing - (substrate_Z + chip_thick + air_gap + diamond_Z/2.);
222 double sensorPosInModuleCage_Y = Rspacing + bot2Diamond + diamond_Y/2.;
223 double globPosZ = ZToIP + layerUnitPos_Z + (sensorPosInModuleCage_Z *
cos(
angle) - sensorPosInModuleCage_Y *
sin(
angle));
224 double globPosY = RToBeam + layerUnitPos_Y + (sensorPosInModuleCage_Z *
sin(
angle) + sensorPosInModuleCage_Y *
cos(
angle));
228 GeoAlignableTransform *xformAlign =
new GeoAlignableTransform(
GeoTrf::Transform3D(alignTransformPos*rmX10));
232 return dbmModulePhys;