Skip to content
Snippets Groups Projects
TestDetector.cpp 1.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include <XML/Helper.h>
    
    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         rInner    = dims.inner_radius();
      double         rMin      = dims.rmin();
      double         thickness = dims.thickness();
      double         innerZ    = dims.inner_z();
      double         angle     = dims.angle();
    
      Material mat = desc.material(detElem.materialStr());
    
      Tube             outerTubeShape(rMin, rInner + thickness, innerZ + thickness);
      Tube             innerTubeShape(0, rInner, innerZ);
      SubtractionSolid unchamferedShape(outerTubeShape, innerTubeShape);
      Cone             chamferShape(thickness, 0, rMin, 0, rMin + 2 * tan(angle) * thickness);
      SubtractionSolid detShape(unchamferedShape, chamferShape, Position(0, 0, innerZ + thickness));
      Volume           detVol(detName, detShape, mat);
    
      detVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
    
      DetElement   det(detName, detID);
      Volume       motherVol = desc.pickMotherVolume(det);
      PlacedVolume detPV     = motherVol.placeVolume(detVol);
      det.setPlacement(detPV);
      return det;
    }
    
    // clang-format off
    DECLARE_DETELEMENT(TestDetector, createDetector)