Skip to content
Snippets Groups Projects
cb_EMCAL.cpp 3.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • Whitney Armstrong's avatar
    Whitney Armstrong committed
    #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;
    
    
    //struct cb_EMCAL_Config
    //{
    //    double RIn;
    //    double ROut;
    //    double ROutshift = 5 * cm;
    //    double Thickness = 40 * cm;
    //    double SizeZ;
    //};
    //
    //
    //class cb_EMCAL_Design
    //{
    //public:
    //    inline void Construct(cb_EMCAL_Config cfg, cb_Solenoid_Config cfgsolenoid, G4Material *worldMaterial, G4VPhysicalVolume *motherVolume)
    //    {
    //        spdlog::debug("Begin cb_EMCAL volume \n");
    //
    //        ConstructionConfig = cfg;
    //
    //        //........................EMCAL Barrel detector----------------------------------------------
    //
    //        // working
    //
    //        //    G4double EMCALB_R_cone[4]={cb_EMCAL_GVol_RIn,  cb_EMCAL_GVol_ROut, cb_EMCAL_GVol_ROut, cb_EMCAL_GVol_RIn };
    //        //  G4double cb_EMCAL_GVol_ConeZ[4]={ -SizeZ/2, -SizeZ/2+60*cm, SizeZ/2-60*cm, SizeZ/2};
    //
    //
    //        double coneROut[4] = {cfg.ROut, cfg.ROut, cfg.ROut, cfg.ROut};
    //        double coneRIn[4] = {cfg.ROut - 1. * cm, cfg.RIn, cfg.RIn, cfg.ROut - 1. * cm};
    //        double coneZ[4] = {-cfgsolenoid.SizeZ / 2, -cfgsolenoid.SizeZ / 2 + 30 * cm, cfgsolenoid.SizeZ / 2 - 30 * cm, cfgsolenoid.SizeZ / 2};
    //
    //        Solid = new G4Polycone("cb_EMCAL_GVol_Solid", 0. * deg, 360. * deg, 4, coneZ, coneRIn, coneROut);
    //        Logic = new G4LogicalVolume(Solid, worldMaterial, "cb_EMCAL_GVol_Logic");
    //        Phys = new G4PVPlacement(0, G4ThreeVector(), "cb_EMCAL_GVol_Phys", Logic, motherVolume, false, 0);
    //
    //
    //        G4VisAttributes *visAttr = new G4VisAttributes(G4Color(0.3, 0.5, 0.9, 1.));
    //        visAttr->SetLineWidth(1);
    //        visAttr->SetForceSolid(false);
    //        Logic->SetVisAttributes(visAttr);
    //    }
    //
    //
    //    inline void ConstructBars()
    //    {
    //        // Setting material
    //        cb_EMCAL_det_Material = fMat->GetMaterial("PbWO4");
    //        Logic->SetMaterial(cb_EMCAL_det_Material);
    //
    //        // Visualising it differently
    //        auto visualAttributes = new G4VisAttributes(G4Color(0.3, 0.5, 0.9, 1.));
    //        visualAttributes->SetLineWidth(1);
    //        visualAttributes->SetForceSolid(true);
    //        Logic->SetVisAttributes(visualAttributes);
    //        //    fPhysicsEMCAL = new G4PVPlacement(0, G4ThreeVector(0,0,-40*cm), "EMCALbSolPhys",fLogicEMCAL,
    //        //                               cb_EMCAL_GVol_Phys, false,     0 );
    //    }
    //
    //    G4Polycone *Solid;      //pointer to the solid
    //    G4LogicalVolume *Logic;    //pointer to the logical
    //    G4VPhysicalVolume *Phys;  //pointer to the physical
    //
    //    /// Parameters that was used in the moment of construction
    //    cb_EMCAL_Config ConstructionConfig;
    
    }
    
    // clang-format off
    DECLARE_DETELEMENT(cb_EMCAL, createDetector)