Skip to content
Snippets Groups Projects
cb_Solenoid.cpp 1.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include <XML/Helper.h>
    ///////////////////////////
    // Central Barrel Solenoid
    ///////////////////////////
    
    using namespace dd4hep;
    
    static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens)
    {
      xml::DetElement detElem = handle;
      std::string     detName = detElem.nameStr();
      int             detID   = detElem.id();
    
      xml::Component dims = detElem.dimensions();
    
      double SizeZ  = dims.z();     // Size in Z direction
      double ROut   = dims.rmax();  // Outer diameter
      double RIn    = dims.rmin();  // Inner diameter
    
      double ShiftZ = dims.delta();
      Material mat = desc.material(detElem.materialStr());
    
      Tube   cb_Solenoid_GVol_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg);
      Volume detVol("cb_Solenoid_GVol_Logic", cb_Solenoid_GVol_Solid, mat);
    
      detVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
    
      DetElement   det(detName, detID);
      Volume       motherVol = desc.pickMotherVolume(det);
      Transform3D  tr(RotationZYX(0., 0., 0.), Position(0., 0., ShiftZ));
      PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
      det.setPlacement(detPV);
      return det;
    }
    
    // clang-format off
    DECLARE_DETELEMENT(cb_Solenoid, createDetector)