Skip to content
Snippets Groups Projects

Resolve "Implement ci_GEM"

Merged Marshall Scott requested to merge 20-implement-ci_gem into master
Files
3
src/ci_GEM.cpp 0 → 100644
+ 53
0
 
#include <XML/Helper.h>
 
///////////////////////////
 
// Central Ion GEM
 
///////////////////////////
 
 
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.sizez(); // Size in Z direction
 
double ROut = dims.rmax(); // Outer radius
 
double RIn = dims.rmin(); // Inner radius
 
double ShiftZ = dims.delta();
 
double PosX = dims.posx();
 
double PosZ = dims.posz();
 
int Nlayers = dims.nlayers();
 
Material mat = desc.material(detElem.materialStr());
 
 
Tube envelope(RIn, ROut, SizeZ, 0, 360 * deg);
 
//Volume envelopeVol(detName + "_envelope", envelope, det.;
 
 
Tube ci_GEM_GVol_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg);
 
Volume detVol("ci_GEM_GVol_Logic", ci_GEM_GVol_Solid, mat);
 
 
 
for (cml_coll_t c(detElem, _U(layer)); c; c++)
 
{
 
xml_comp_t x_layer = c;
 
string layer_name = detName + _toString(c.id(), "_layer%d");
 
Volume layer_vol(layer_name, Tube(c.rmin(), c.rmax(), c.z() ), mat );
 
Position layer_pos(0, 0, fnz);
 
pv = envelopeVol.placeVolume(layer_vol, layer_pos);
 
pv.addPhysVolID("layer", c.id() );
 
}
 
 
 
 
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(envelopeVol, tr);
 
det.setPlacement(detPV);
 
return det;
 
}
 
// clang-format off
 
DECLARE_DETELEMENT(ci_GEM, createDetector)
Loading