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}},
 
   61   std::unique_ptr<PixelModuleDesign> p_dbmdesign = std::make_unique<PixelModuleDesign>(thickness,
 
   68                                  std::move(diode_tree),
 
   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;