Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions compact/tracking/definitions_craterlake.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@
<constant name="TrackerEndcapDisk_rmax" value="43*cm"/>

<comment> Main parameters for the outer MPGD barrel layer </comment>
<constant name="MPGDOuterBarrelModule_rmin" value="72.5*cm"/>
<constant name="MPGDOuterBarrelModule_zmin1" value="164.5*cm"/>
<constant name="MPGDOuterBarrelModule_zmin2" value="174.5*cm"/>
<constant name="MPGDOuterBarrelModule_rmin" value="735*mm"/>
<constant name="MPGDOuterBarrelModule_zmin1" value="1795*mm"/>
<constant name="MPGDOuterBarrelModule_zmin2" value="1845*mm"/>

<comment> Inner MPGD unsegmented barrel </comment>
<constant name="InnerMPGDBarrel_rmin" value="55*cm"/>
<constant name="InnerMPGDBarrel_rmin" value="550*mm"/>
<constant name="InnerMPGDBarrel_dz" value="0"/>
<constant name="InnerMPGDBarrel_zmin" value="105*cm"/> <comment> negative z </comment>
<constant name="InnerMPGDBarrel_zmax" value="143*cm"/> <comment> positive z </comment>
<constant name="InnerMPGDBarrel_zmin" value="1025*mm"/> <comment> negative z </comment>
<constant name="InnerMPGDBarrel_zmax" value="1450*mm"/> <comment> positive z </comment>
<constant name="InnerMPGDBarrel_length" value="InnerMPGDBarrel_zmax + InnerMPGDBarrel_zmin"/>
<constant name="InnerMPGDBarrel_zoffset" value="0.5*(InnerMPGDBarrel_zmax - InnerMPGDBarrel_zmin)"/>

Expand Down Expand Up @@ -104,19 +104,19 @@
<constant name="TrackerEndcapNDisk4_rmax" value="TrackerEndcapPDisk4_rmax" />

<comment> Main parameters for MPGD endcap disks, offset here is the distance between disks </comment>
<constant name="ForwardMPGD_zmin" value="148*cm"/>
<constant name="ForwardMPGDMod_offset" value="13.0*cm"/>
<constant name="ForwardMPGDMod1_rmin" value="9.0*cm" />
<constant name="ForwardMPGDMod2_rmin" value="9.0*cm"/>
<constant name="ForwardMPGDMod1_rmax" value="50*cm" />
<constant name="ForwardMPGDMod2_rmax" value="50*cm" />

<constant name="BackwardMPGD_zmin" value="110*cm"/>
<constant name="BackwardMPGDMod_offset" value="10.0*cm"/>
<constant name="BackwardMPGDMod1_rmin" value="4.653*cm" />
<constant name="BackwardMPGDMod2_rmin" value="4.635*cm" />
<constant name="BackwardMPGDMod1_rmax" value="50.0*cm" />
<constant name="BackwardMPGDMod2_rmax" value="50.0*cm" />
<constant name="ForwardMPGD_zmin" value="1500.0*mm"/>
<constant name="ForwardMPGDMod_offset" value="125.0*mm"/>
<constant name="ForwardMPGDMod1_rmin" value="81.24*mm" />
<constant name="ForwardMPGDMod2_rmin" value="81.24*mm"/>
<constant name="ForwardMPGDMod1_rmax" value="400*mm" />
<constant name="ForwardMPGDMod2_rmax" value="400*mm" />

<constant name="BackwardMPGD_zmin" value="1075.0*mm"/>
<constant name="BackwardMPGDMod_offset" value="125.0*mm"/>
<constant name="BackwardMPGDMod1_rmin" value="70.0*mm" />
<constant name="BackwardMPGDMod2_rmin" value="70.0*mm" />
<constant name="BackwardMPGDMod1_rmax" value="400.0*mm" />
<constant name="BackwardMPGDMod2_rmax" value="400.0*mm" />

</define>
<comment> See compact/definitions.xml for reserved detector id
Expand Down
3 changes: 2 additions & 1 deletion compact/tracking/mpgd_barrel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@
<constant name="MMCentral_gap" value="0.2*cm"/>

<comment> In principle, stave count should not be independenty specified: it is fixed by above intrinsic parameters </comment>
<comment> 1.3cm is to make envelope match CAD drawings </comment>
<constant name="MPGDBarrelStave_count" value="8"/>
<constant name="InnerMPGDBarrelLayer_rmin" value="InnerMPGDBarrel_rmin"/>
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSector_R + MMRadial_offset / 2 + 1*cm"/>
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSector_R + MMRadial_offset / 2 + 1*cm +1.3*cm"/>
<constant name="rmin2Sensor" value="MMDriftCuGround_thickness + MMDriftKapton_thickness + MMDriftCuElectrode_thickness + MMGasGap_thickness / 2" />
<constant name="MMInnerSensor_R" value="MMInnerSector_R + rmin2Sensor" />
<constant name="MMOuterSensor_R" value="MMOuterSector_R + rmin2Sensor" />
Expand Down
40 changes: 22 additions & 18 deletions compact/tracking/mpgd_outerbarrel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,21 @@

<define>
<comment> Frames </comment>
<constant name="MPGDOuterBarrelFrame_width" value="10*mm"/>
<constant name="MPGDOuterBarrelFrame_width" value="15*mm"/>
<constant name="MPGDOuterBarrelFrame_thickness" value="7*mm"/>

<comment> Module constants </comment>
<constant name="MPGDOuterBarrelModule_roverlap" value="0*cm"/>
<constant name="MPGDOuterBarrelModule_zoverlap" value="0*MPGDOuterBarrelFrame_width"/>
<constant name="MPGDOuterBarrelModule_count" value="12" />
<constant name="MPGDOuterBarrelModule_allowed_space" value="2.5*cm"/>
<constant name="MPGDOuterBarrelModule_allowed_space" value="25*mm"/>
<constant name="MPGDOuterBarrelModule_rmax" value="MPGDOuterBarrelModule_rmin + MPGDOuterBarrelModule_allowed_space" />
<constant name="MPGDOuterBarrelModule_roffset" value="0.5*cm" />
<constant name="MPGDOuterBarrelModule_width" value="36.0*cm"/>
<constant name="MPGDOuterBarrelModule_width" value="360*mm"/>
<constant name="MPGDOuterBarrel_length" value="MPGDOuterBarrelModule_zmin1 + MPGDOuterBarrelModule_zmin2"/>
<constant name="MPGDOuterBarrelModule_length" value="0.5*(MPGDOuterBarrelModule_zmin1 + MPGDOuterBarrelModule_zmin2 + MPGDOuterBarrelModule_zoverlap)"/>
<constant name="MPGDOuterBarrelModule_offset" value="(MPGDOuterBarrelModule_zmin2 - MPGDOuterBarrelModule_zmin1)/2.0"/>
<constant name="MPGDOuterBarrelModule_offset" value="(MPGDOuterBarrelModule_zmin2 - MPGDOuterBarrelModule_zmin1)"/>
<constant name="MPGDOuterBarrelModule_feb_ext" value="110*mm"/>
<constant name="MPGDOuterStrip_range" value="(MPGDOuterBarrelModule_length + MPGDOuterBarrelModule_width)/2.0*sqrt(2)"/>

<comment> Layer parameters </comment>
Expand All @@ -45,9 +46,10 @@
<detector id="TrackerBarrel_5_ID" name="MPGDOuterBarrel" type="epic_OuterMPGDBarrel" readout="OuterMPGDBarrelHits" vis="TrackerVis">
<type_flags type="DetType_TRACKER + DetType_BARREL"/>
<dimensions width="MPGDOuterBarrelModule_width" length="MPGDOuterBarrelModule_length" height="MPGDOuterBarrelModule_allowed_space" />
<position x="0" y="0" z="MPGDOuterBarrelModule_offset" />
<position x="0" y="0" z="MPGDOuterBarrelModule_offset" />

<comment> MPGD DIRC module components</comment>

<comment> MPGD DIRC module components</comment>
<module name="MPGDOuterBarrelModule" vis="TrackerVis">

<module_component name="DriftGap"
Expand All @@ -56,78 +58,79 @@
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelDriftGap_thickness"
vis="TrackerMPGDGasVis"
length="MPGDOuterBarrelModule_length"/>
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>

<module_component name="WindowGasGap"
material="Ar90IsoButane"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelWindowGap_thickness"
vis="TrackerMPGDGasVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="Window"
material="Kapton"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelWindow_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="Cathode_Kapton"
material="Kapton"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelFoilKapton_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="Cathode_Cu"
material="Copper"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelFoilCu_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="RWELL_Cu"
material="Copper"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelFoilCu_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="RWELL_Kapton"
material="Kapton"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelFoilKapton_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="Nomex"
material="Nomex"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelReadOutNomex_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="ReadOutElectrodes"
material="Copper"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelReadOutElectrode_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="ReadOutKapton"
material="Kapton"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelReadOutKapton_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_feb_ext"/>
<module_component name="PCB"
material="Fr4"
sensitive="false"
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelPCB_thickness"
vis="TrackerVis"
length="MPGDOuterBarrelModule_length" />
offset="MPGDOuterBarrelModule_feb_ext"
length="MPGDOuterBarrelModule_length"/>

<comment> Frame width gets subtracted from the gas module volumes
see src/BarrelPlanarMPGDTracker_geo.cpp
Expand All @@ -139,9 +142,10 @@
thickness="MPGDOuterBarrelFrame_thickness"/>

</module>

<comment> Layout for MPGD DIRC layers </comment>
<layer module="MPGDOuterBarrelModule" id="0" vis="TrackerSupportVis">
<envelope_tolerance r_min="0*mm" r_max="0*mm" z_min="0*mm" z_max="0*mm"/>
<envelope_tolerance r_min="0*mm" r_max="0*mm" z_min="0*mm" z_max="0*mm"/>
<layer_material surface="inner" binning="binPhi,binZ" bins0="MPGDOuterBarrelModule_count*10" bins1="100" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="MPGDOuterBarrelModule_count*10" bins1="100" />
<rphi_layout
Expand Down
22 changes: 18 additions & 4 deletions src/BarrelPlanarMPGDTracker_geo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ static Ref_t create_BarrelPlanarMPGDTracker_geo(Detector& description, xml_h e,
xml_dim_t mpgd_pos = x_det.position();
Assembly assembly(det_name);

double pcb_feb_ext = 0.0; //extension of PCB board to hold FEBs.

// Set detector type flag
dd4hep::xml::setDetectorTypeFlag(x_det, sdet);
auto& params = DD4hepDetectorHelper::ensureExtension<dd4hep::rec::VariantParameters>(sdet);
Expand Down Expand Up @@ -159,7 +161,13 @@ static Ref_t create_BarrelPlanarMPGDTracker_geo(Detector& description, xml_h e,
c_vol.setLimitSet(description, x_comp.limitsStr());
c_vol.setVisAttributes(description, x_comp.visStr());

pv = m_vol.placeVolume(c_vol, Position(0, 0, thickness_sum + x_comp.thickness() / 2.0));
if (comp_name == "PCB") {
pcb_feb_ext = x_comp.offset();
pv = m_vol.placeVolume(
c_vol, Position(0, -pcb_feb_ext / 2.0, thickness_sum + x_comp.thickness() / 2.0));
} else {
pv = m_vol.placeVolume(c_vol, Position(0, 0, thickness_sum + x_comp.thickness() / 2.0));
}

if (x_comp.isSensitive()) {
pv.addPhysVolID("sensor", sensor_number++);
Expand Down Expand Up @@ -283,14 +291,20 @@ static Ref_t create_BarrelPlanarMPGDTracker_geo(Detector& description, xml_h e,
string module_name = _toString(module, "module%d");
DetElement mod_elt(lay_elt, module_name, module);
double mod_z = 0.5 * dimensions.length();
double z_placement = mod_z - j * nz * mod_z; // z location for module placement
double z_placement = mod_z - 0.5 * pcb_feb_ext -
j * (nz * mod_z - pcb_feb_ext); // z location for module placement
double z_offset =
z_placement > 0
? -z0 / 2.0
: z0 / 2.0; // determine the amount of overlap in z the z nz modules have

Transform3D tr(RotationZYX(0.0, ((M_PI / 2) - phic - phi_tilt), -M_PI / 2),
Position(xc, yc, mpgd_pos.z() + z_placement + z_offset)); // in x-y plane,
Transform3D tr(
RotationZYX(0, ((M_PI / 2) - phic - phi_tilt), -M_PI / 2) * RotationZ(j * M_PI),
Position(
xc, yc,
mpgd_pos.z() + z_placement +
z_offset)); //RotZYX rotat planes around azimuth, RotZ flip plane so pcb_feb_ext is faceing endcaps

pv = layer_assembly.placeVolume(module_env, tr);
pv.addPhysVolID("module", module);
mod_elt.setPlacement(pv);
Expand Down
Loading