Skip to content
Merged
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
39 changes: 20 additions & 19 deletions compact/tracking/definitions_craterlake.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,16 @@
<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_rmax" value="605*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 +105,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
6 changes: 2 additions & 4 deletions compact/tracking/mpgd_barrel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@

<comment> In principle, stave count should not be independenty specified: it is fixed by above intrinsic parameters </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="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 Expand Up @@ -100,8 +98,8 @@

<layer module="InnerMPGDBarrel_Mod1" id="1" vis="InvisibleWithDaughters">
<barrel_envelope
inner_r="InnerMPGDBarrelLayer_rmin"
outer_r="InnerMPGDBarrelLayer_rmax"
inner_r="InnerMPGDBarrel_rmin"
outer_r="InnerMPGDBarrel_rmax"
z_length="InnerMPGDBarrelLayer_length"
z0="InnerMPGDBarrel_zoffset"/>
<layer_material surface="inner" binning="binPhi,binZ" bins0="MPGDBarrelStave_count*24" bins1="100" />
Expand Down
51 changes: 32 additions & 19 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="0.5*(MPGDOuterBarrelModule_zmin2 - MPGDOuterBarrelModule_zmin1)"/>
<constant name="MPGDOuterBarrelModule_PCB_offset" value="110*mm"/>
<constant name="MPGDOuterStrip_range" value="(MPGDOuterBarrelModule_length + MPGDOuterBarrelModule_width)/2.0*sqrt(2)"/>

<comment> Layer parameters </comment>
Expand All @@ -47,7 +48,8 @@
<dimensions width="MPGDOuterBarrelModule_width" length="MPGDOuterBarrelModule_length" height="MPGDOuterBarrelModule_allowed_space" />
<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,89 @@
width="MPGDOuterBarrelModule_width"
thickness="MPGDOuterBarrelDriftGap_thickness"
vis="TrackerMPGDGasVis"
length="MPGDOuterBarrelModule_length"/>
offset="0"
length="MPGDOuterBarrelModule_length - MPGDOuterBarrelModule_PCB_offset"/>

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

<comment> Frame width gets subtracted from the gas module volumes
see src/BarrelPlanarMPGDTracker_geo.cpp
Expand All @@ -139,9 +152,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 All @@ -152,8 +166,7 @@
dr="0" />
<z_layout
dr = "MPGDOuterBarrelModule_roverlap"
z0 = "MPGDOuterBarrelModule_zoverlap"
nz = "2"/>
z0 = "MPGDOuterBarrelModule_zoverlap"/>
</layer>
</detector>
</detectors>
Expand Down
21 changes: 16 additions & 5 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,10 @@ 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));
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));

if (x_comp.isSensitive()) {
pv.addPhysVolID("sensor", sensor_number++);
Expand Down Expand Up @@ -256,7 +261,7 @@ static Ref_t create_BarrelPlanarMPGDTracker_geo(Detector& description, xml_h e,
double rphi_dr = x_layout.dr(); // The delta radius of every other module
double phi_incr = (2 * M_PI) / nphi; // Phi increment for one module
double phic = phi0; // Phi of the module
double nz = z_layout.nz(); // Number of modules placed in z
int nz = 2; // Number of modules placed in z
double z_dr = z_layout.dr(); // Radial offest of modules in z
double z0 = z_layout.z0(); // Sets how much overlap in z the nz modules have

Expand All @@ -283,14 +288,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 rotates planes around azimuth, RotZ flips plane so pcb_feb_ext is facing endcaps

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