Skip to content
Snippets Groups Projects
ce_GEM.cpp 2.08 KiB
Newer Older
Jihee Kim's avatar
Jihee Kim committed
#include <XML/Helper.h>
//////////////////////////////////
// Electron Endcap GEM Tracking
//////////////////////////////////

using namespace std;
using namespace dd4hep;

static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
{
  xml_det_t  x_det      = e;
  string     detName    = x_det.nameStr();
  int        detID      = x_det.id();

  xml_dim_t  dim        = x_det.dimensions();
  double     RIn        = dim.rmin();
  double     ROut       = dim.rmax();
  double     SizeZ      = dim.length();
  xml_dim_t  pos        = x_det.position();

  Material   Vacuum     = desc.material("Vacuum");

  // Create Global Volume 
  Tube ce_GEM_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg);
  Volume detVol("ce_GEM_GVol_Logic", ce_GEM_GVol_Solid, Vacuum);
  detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));

  // Construct Layers
  xml_comp_t x_layer = x_det.child(_U(layer));
  const int repeat   = x_layer.repeat();
  
  xml_comp_t x_slice = x_layer.child(_U(slice));
  Material slice_mat = desc.material(x_slice.materialStr());
  
  // Loop over layers
  //for(int i = 0; i < repeat; i++) {
  //  layerRIn[i]  = RIn + (SiLayerGap * i);
  //  layerROut[i] = RIn + (0.01 + SiLayerGap * i);

  //  if (layerROut[i] > ROut)
  //    continue; 

  //  string logic_layer_name = detName + _toString(i, "_Logic_lay_%d");
  //  Volume layerVol(logic_layer_name,Tube(layerRIn[i], layerROut[i], SizeZ / 2.0, 0.0, 360.0 * deg), slice_mat);
  //  layerVol.setVisAttributes(desc,x_layer.visStr());
  //  sens.setType("tracker");
  //  layerVol.setSensitiveDetector(sens);

  //  Position     layer_pos = Position(0.0, 0.0, 0.0);
  //  PlacedVolume layerPV = detVol.placeVolume(layerVol, layer_pos);
  //  layerPV.addPhysVolID("layer", i+1);
  //}

  DetElement   det(detName, detID);
  Volume       motherVol = desc.pickMotherVolume(det);
  Transform3D  tr(RotationZYX(0.0, 0.0, 0.0), Position(pos.x(), pos.y(), pos.z()));
  PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
  detPV.addPhysVolID("system", detID);
  det.setPlacement(detPV);
  return det;
}

DECLARE_DETELEMENT(ce_GEM, createDetector)