Skip to content
Snippets Groups Projects
Commit 98391417 authored by Marshall Scott's avatar Marshall Scott
Browse files

First draft fi_B0_EMCAL

parent 289dab64
Branches
No related tags found
1 merge request!44Draft: Resolve "Implement fi_B0_EMCAL"
Pipeline #8192 failed
......@@ -653,5 +653,24 @@
<constant name="ci_GEM_posx" value="0 * cm"/>
<constant name="ci_GEM_nlayers" value="8"/>
<comment>
--------------------------
Forward Ion B0 EMCAL
--------------------------
will move later
</comment>
<constant name="fi_B0_EMCAL_ID" value="500"/>
<constant name="fi_B0_EMCAL_y_length" value="4 * cm"/>
<constant name="fi_B0_EMCAL_x_length" value="4 * cm"/>
<constant name="fi_B0_EMCAL_sizez" value="40 * cm"/>
<constant name="fi_B0_EMCAL_rmin" value="7 * cm"/>
<constant name="fi_B0_EMCAL_rmax" value="10 * cm"/>
<constant name="fi_B0_EMCAL_z" value="0 * cm"/>
<constant name="fi_B0_EMCAL_Gap" value="0.01 * mm"/>
<constant name="fi_B0_EMCAL_x_Shift" value="-35 * cm"/>
<constant name="fi_B0_EMCAL_angle" value="0.05"/><comment> not used in .h file </comment>
</define>
......@@ -59,6 +59,8 @@
<vis name="ci_GEMVis" r= "0.8" g="0.4" b="0.3" alpha="0.8" showDaughters="true" visible="true"/>
<vis name="ci_HCALVis" r= "0.6" g="0" b="0.6" alpha="1.0" showDaughters="true" visible="true"/>
<vis name="fi_B0_EMCALVis" r= "0.1" g="1.0" b="0.9" alpha="1.0" showDaughters="true" visible="true"/>
<comment>
Deprecated colors.
</comment>
......
<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
<!-- Some information about detector-->
<info name="Forward Ion B0 EMCAL" title="Forward Ion B0 EMCAL"
author="Marshall Scott"
url="https://eicweb.phy.anl.gov/EIC/detectors/reference_detector.git"
status="development"
version="v1 2021-04-14">
<comment>Forward Ion B0 EMCAL</comment>
</info>
<includes>
</includes>
<limits>
</limits>
<regions>
</regions>
<display>
</display>
<!-- Define detector -->
<detectors>
<comment>
Forward Ion B0 EMCAL
</comment>
<detector id="fi_B0_EMCAL_ID" name="fi_B0_EMCAL" type="fi_B0_EMCAL" insideTrackingVolume="false" vis="fi_B0_EMCALVis" readout="fi_B0_EMCAL_Hits">
<material name="PbWO4"/>
<dimensions length="fi_B0_EMCAL_y_length" width="fi_B0_EMCAL_x_length" z_length="fi_B0_EMCAL_sizez" x_offset="fi_B0_EMCAL_x_Shift" rmin="fi_B0_EMCAL_rmin" rmax="fi_B0_EMCAL_rmax" z="fi_B0_EMCAL_z" gap="fi_B0_EMCAL_Gap" angle="fi_B0_EMCAL_angle"/>
</detector>
</detectors>
<readouts>
<readout name="fi_B0_EMCAL_Hits">
<segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" />
<id>system:8,layer:8,x:32:-16,y:-16</id>
</readout>
</readouts>
<plugins>
</plugins>
</lccdd>
#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 RIn = dims.rmin();
double ROut = dims.rmax();
double SizeZ = dims.z_length();
double X_Shift = dims.x_offset();
double X_length = dims.width();
double Y_length = dims.length();
double Z = dims.z();
double Angle = dims.angle();
double Gap = dims.gap();
Material pbw04 = desc.material("PbWO4");
Material vacuum = desc.material("Vacuum");
//Outer volume
Box fi_B0_EMCAL_Solid(X_length / 2., Y_length / 2., SizeZ / 2.);
Volume envelopeVol("fi_B0_EMCAL_Logic", fi_B0_EMCAL_Solid, pbw04);
envelopeVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
// Crystals
double y_C = 0 * dd4hep::cm;
double x_C = 0 * dd4hep::cm;
int k = -1;
char* abname;
for (int j = 0; j < 50; j++) {
y_C -= Y_length + Gap;
x_C = (X_length + Gap) * 0.5;
sens.setType("calorimeter");
for (int i = 0; i < 50; i++) {
double R = sqrt(x_C * x_C + y_C * y_C);
if (R < ROut - X_length + Gap && R > RIn) {
k++;
std::sprintf(abname, "fi_B0_EMCAL_%d", k);
Volume crystalVol1(abname, fi_B0_EMCAL_Solid, pbw04);
crystalVol1.setSensitiveDetector(sens);
Transform3D tr1(RotationZYX(0,0,0), Position(x_C + X_Shift, y_C, Z));
PlacedVolume cry1 = envelopeVol.placeVolume(crystalVol1, tr1);
cry1.addPhysVolID("crystal", k);
k++;
std::sprintf(abname, "fi_B0_EMCAL_%d", k);
Volume crystalVol2(abname, fi_B0_EMCAL_Solid, pbw04);
crystalVol2.setSensitiveDetector(sens);
Transform3D tr2(RotationZYX(0,0,0), Position(-x_C + X_Shift, y_C, Z));
PlacedVolume cry2 = envelopeVol.placeVolume(crystalVol2, tr2);
cry2.addPhysVolID("crystal", k);
k++;
std::sprintf(abname, "fi_B0_EMCAL_%d", k);
Volume crystalVol3(abname, fi_B0_EMCAL_Solid, pbw04);
crystalVol3.setSensitiveDetector(sens);
Transform3D tr3(RotationZYX(0,0,0), Position(x_C + X_Shift, -y_C, Z));
PlacedVolume cry3 = envelopeVol.placeVolume(crystalVol3, tr3);
cry3.addPhysVolID("crystal", k);
k++;
std::sprintf(abname, "fi_B0_EMCAL_%d", k);
Volume crystalVol4(abname, fi_B0_EMCAL_Solid, pbw04);
crystalVol4.setSensitiveDetector(sens);
Transform3D tr4(RotationZYX(0,0,0), Position(-x_C + X_Shift, -y_C, Z));
PlacedVolume cry4 = envelopeVol.placeVolume(crystalVol4, tr4);
cry4.addPhysVolID("crystal", k);
}
x_C += X_length + Gap;
}
}
DetElement det(detName, detID);
Volume motherVol = desc.pickMotherVolume(det);
Transform3D tr(RotationZYX(0,0,0), Position(0, 0, 0));
PlacedVolume detPV = motherVol.placeVolume(envelopeVol, tr);
detPV.addPhysVolID("system", detID);
det.setPlacement(detPV);
return det;
}
// clang-format off
DECLARE_DETELEMENT(fi_B0_EMCAL, createDetector)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment