Skip to content
Snippets Groups Projects

Resolve "Implement ce_MRICH"

Merged Chao Peng requested to merge 12-implement-ce_mrich into master
1 file
+ 61
0
Compare changes
  • Side-by-side
  • Inline
src/ce_MRICH.cpp 0 → 100644
+ 61
0
#include <XML/Helper.h>
#include "TMath.h"
#include "TString.h"
#include "Math/Point2D.h"
#include "DDRec/Surface.h"
#include "DDRec/DetectorData.h"
#include "DD4hep/OpticalSurfaces.h"
#include "DD4hep/DetFactoryHelper.h"
#include "DD4hep/Printout.h"
using namespace std;
using namespace dd4hep;
using namespace dd4hep::rec;
typedef ROOT::Math::XYPoint Point;
// create the detector
static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetector sens)
{
xml::DetElement detElem = handle;
std::string detName = detElem.nameStr();
int detID = detElem.id();
DetElement det(detName, detID);
xml::Component dims = detElem.dimensions();
xml::Component mods = detElem.child(_Unicode(modules));
xml::Component rads = detElem.child(_Unicode(radiator));
auto RIn = dims.attr<double>(_Unicode(r_in));
auto ROut = dims.attr<double>(_Unicode(r_out));
auto SizeZ = dims.attr<double>(_Unicode(size_z));
auto PosZ = dims.z();
auto InnerR = dims.attr<double>(_Unicode(inner_r));
auto mThick = mods.attr<double>(_Unicode(thickness));
auto mWidth = mods.attr<double>(_Unicode(width));
auto mGap = mods.attr<double>(_Unicode(gap));
auto envMat = desc.material(detElem.materialStr());
// detector envelope
auto envShape = Tube(RIn, ROut, SizeZ / 2., 0., 2*M_PI);
Volume envVol("ce_MRICH_GVol", envShape, envMat);
envVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
// modules
// place envelope
Volume motherVol = desc.pickMotherVolume(det);
PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, PosZ));
envPV.addPhysVolID("system", detID);
det.setPlacement(envPV);
return det;
}
// clang-format off
DECLARE_DETELEMENT(ce_MRICH, createDetector)
Loading