Skip to content

Commit 896b85e

Browse files
mposik1983pre-commit-ci[bot]ShujieLveprblbschmookler
authored
Update MPGD envelopes to match Sept. CAD model (#986)
### Briefly, what does this PR introduce? Update MPGD envelopes to match Sept. CAD model: https://indico.bnl.gov/event/29963/ ### What kind of change does this PR introduce? - [ ] Bug fix (issue #__) - [ ] New feature (issue #__) - [ ] Documentation update - [x] Other: Envelope update ### Please check if this PR fulfills the following: - [ ] Tests for the changes have been added - [ ] Documentation has been added / updated - [x] Changes have been communicated to collaborators ### Does this PR introduce breaking changes? What changes might users need to make to their code? No breaking changes. MPGD hit locations will be altered and a new material map will need to be generated. ### Does this PR change default behavior? There will be changes in the hit locations of the MPGDs, most notably the MPGD disks as they had changes made to their outer radii and were moved closer to the IP. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: ShujieL <ShujieL@users.noreply.github.com> Co-authored-by: Dmitry Kalinkin <dmitry.kalinkin@gmail.com> Co-authored-by: Barak Schmookler <bschmookler1@gmail.com> Co-authored-by: yann bedfer <yann.bedfer@cern.ch>
1 parent 6644324 commit 896b85e

File tree

5 files changed

+65
-65
lines changed

5 files changed

+65
-65
lines changed

compact/tracking/definitions_craterlake.xml

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@
2626

2727
<constant name="TrackerEndcapDisk_rmax" value="43*cm"/>
2828

29-
<comment> Main parameters for the outer MPGD barrel layer </comment>
30-
<constant name="MPGDOuterBarrelModule_rmin" value="735*mm"/>
31-
<constant name="MPGDOuterBarrelModule_zmin1" value="1795*mm"/>
32-
<constant name="MPGDOuterBarrelModule_zmin2" value="1845*mm"/>
33-
34-
<comment> Inner MPGD unsegmented barrel </comment>
35-
<constant name="InnerMPGDBarrel_rmin" value="550*mm"/>
36-
<constant name="InnerMPGDBarrel_rmax" value="605*mm"/>
29+
<comment> Main parameters for the Outer MPGD barrel layer </comment>
30+
<constant name="MPGDOuterBarrelModule_rmin" value="730*mm"/>
31+
<constant name="MPGDOuterBarrelModule_zmin1" value="1925*mm"/> <comment> negative z </comment>
32+
<constant name="MPGDOuterBarrelModule_zmin2" value="1675*mm"/> <comment> positive z </comment>
33+
34+
<comment> Main parameters for the Inner MPGD barrel layer </comment>
35+
<constant name="InnerMPGDBarrel_rmin" value="555*mm"/>
36+
<constant name="InnerMPGDBarrel_rmax" value="615*mm"/>
3737
<constant name="InnerMPGDBarrel_dz" value="0"/>
3838
<constant name="InnerMPGDBarrel_zmin" value="1025*mm"/> <comment> negative z </comment>
3939
<constant name="InnerMPGDBarrel_zmax" value="1450*mm"/> <comment> positive z </comment>
@@ -81,11 +81,11 @@
8181
<constant name="TrackerEndcapPDisk2_zmin" value="70.0*cm" />
8282
<constant name="TrackerEndcapPDisk2_rmin" value="32.86*mm + Beampipe_bakeout_buffer + 0.6*mm" />
8383
<constant name="TrackerEndcapPDisk2_rmax" value="TrackerEndcapDisk_rmax * .98" />
84-
<constant name="TrackerEndcapPDisk3_zmin" value="100.0*cm" />
85-
<constant name="TrackerEndcapPDisk3_rmin" value="40.58*mm + Beampipe_bakeout_buffer + 7.85*mm" />
84+
<constant name="TrackerEndcapPDisk3_zmin" value="95.0*cm" />
85+
<constant name="TrackerEndcapPDisk3_rmin" value="39.29*mm + Beampipe_bakeout_buffer + 6.63*mm" />
8686
<constant name="TrackerEndcapPDisk3_rmax" value="TrackerEndcapDisk_rmax * .98" />
87-
<constant name="TrackerEndcapPDisk4_zmin" value="135.0*cm" />
88-
<constant name="TrackerEndcapPDisk4_rmin" value="49.12*mm + Beampipe_bakeout_buffer + 16.02*mm" />
87+
<constant name="TrackerEndcapPDisk4_zmin" value="120.0*cm" />
88+
<constant name="TrackerEndcapPDisk4_rmin" value="45.72*mm + Beampipe_bakeout_buffer + 12.70*mm" />
8989
<constant name="TrackerEndcapPDisk4_rmax" value="TrackerEndcapDisk_rmax * .98" />
9090

9191
<comment> Main parameters for the negative silicon disks (will be reflected, so positive z-values here)</comment>
@@ -106,19 +106,21 @@
106106
<constant name="TrackerEndcapNDisk4_rmax" value="TrackerEndcapPDisk4_rmax" />
107107

108108
<comment> Main parameters for MPGD endcap disks, offset here is the distance between disks </comment>
109-
<constant name="ForwardMPGD_zmin" value="1500.0*mm"/>
109+
<constant name="ForwardMPGD_zmin" value="1285.0*mm"/>
110110
<constant name="ForwardMPGDMod_offset" value="125.0*mm"/>
111-
<constant name="ForwardMPGDMod1_rmin" value="81.24*mm" />
112-
<constant name="ForwardMPGDMod2_rmin" value="81.24*mm"/>
113-
<constant name="ForwardMPGDMod1_rmax" value="400*mm" />
114-
<constant name="ForwardMPGDMod2_rmax" value="400*mm" />
111+
<constant name="ForwardMPGDMod1_rmin" value="70.0*mm" />
112+
<constant name="ForwardMPGDMod2_rmin" value="70.0*mm"/>
113+
<comment> rmax = active area radius </comment>
114+
<constant name="ForwardMPGDMod1_rmax" value="420*mm" />
115+
<constant name="ForwardMPGDMod2_rmax" value="420*mm" />
115116

116117
<constant name="BackwardMPGD_zmin" value="1075.0*mm"/>
117118
<constant name="BackwardMPGDMod_offset" value="125.0*mm"/>
118-
<constant name="BackwardMPGDMod1_rmin" value="70.0*mm" />
119-
<constant name="BackwardMPGDMod2_rmin" value="70.0*mm" />
120-
<constant name="BackwardMPGDMod1_rmax" value="400.0*mm" />
121-
<constant name="BackwardMPGDMod2_rmax" value="400.0*mm" />
119+
<constant name="BackwardMPGDMod1_rmin" value="50.0*mm" />
120+
<constant name="BackwardMPGDMod2_rmin" value="50.0*mm" />
121+
<comment> rmax = active area radius </comment>
122+
<constant name="BackwardMPGDMod1_rmax" value="420.0*mm" />
123+
<constant name="BackwardMPGDMod2_rmax" value="420.0*mm" />
122124

123125
</define>
124126
<comment> See compact/definitions.xml for reserved detector id

compact/tracking/mpgd_barrel.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,19 @@
4141
<constant name="MMModuleLength" value="61.0*cm"/>
4242
<constant name="MMFrameWidth" value="1.0*cm"/>
4343
<constant name="MMOutwardFrameWidth" value="5.0*cm"/>
44-
<constant name="MMOuterSector_R" value="57.7*cm"/>
45-
<constant name="MMInnerSector_R" value="55.5*cm"/>
44+
<constant name="MMInnerSection_R" value="InnerMPGDBarrel_rmin + 0.5*cm"/>
45+
<constant name="MMOuterSection_R" value="MMInnerSection_R + 2.2*cm"/>
4646
<comment> ...Positioning </comment>
4747
<constant name="MMRadial_offset" value="1.0*cm"/>
4848
<constant name="MMCentral_gap" value="0.2*cm"/>
4949

5050
<comment> In principle, stave count should not be independenty specified: it is fixed by above intrinsic parameters </comment>
5151
<constant name="MPGDBarrelStave_count" value="8"/>
5252
<constant name="InnerMPGDBarrelLayer_rmin" value="InnerMPGDBarrel_rmin"/>
53-
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSector_R + MMRadial_offset / 2 + 1*cm"/>
53+
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSection_R + MMRadial_offset / 2 + 1*cm"/>
5454
<constant name="rmin2Sensor" value="MMDriftCuGround_thickness + MMDriftKapton_thickness + MMDriftCuElectrode_thickness + MMGasGap_thickness / 2" />
55-
<constant name="MMInnerSensor_R" value="MMInnerSector_R + rmin2Sensor" />
56-
<constant name="MMOuterSensor_R" value="MMOuterSector_R + rmin2Sensor" />
55+
<constant name="MMInnerSensor_R" value="MMInnerSection_R + rmin2Sensor" />
56+
<constant name="MMOuterSensor_R" value="MMOuterSection_R + rmin2Sensor" />
5757
<constant name="MMInnerAperture" value="MMModuleWidth/MMInnerSensor_R" />
5858
<constant name="MMOuterAperture" value="MMModuleWidth/MMOuterSensor_R" />
5959
</define>
@@ -73,8 +73,8 @@
7373

7474
<module name="InnerMPGDBarrel_Mod1" vis="TrackerLayerVis" >
7575
<comment> Models describe the overlapping of staves along phi, either (I) via offsets or (II) via distinct radii ("rmin1/2"). Solution (II) is only partially implemented: would require FOUR distinct "radius" in the readout segmentation. Note that in any case "rsensor" must be set equal the "radius" of the corresponding segmentation and is used internally to double-check the consistency between the stack of "module_component" and the segmentation "radius". </comment>
76-
<model name="MMInnerSector" rmin1="MMInnerSector_R" rmin2="MMInnerSector_R" offset="MMRadial_offset" rsensor="MMInnerSensor_R"/>
77-
<model name="MMOuterSector" rmin1="MMOuterSector_R" rmin2="MMOuterSector_R" offset="MMRadial_offset" rsensor="MMOuterSensor_R"/>
76+
<model name="MMInnerSection" rmin1="MMInnerSection_R" rmin2="MMInnerSection_R" offset="MMRadial_offset" rsensor="MMInnerSensor_R"/>
77+
<model name="MMOuterSection" rmin1="MMOuterSection_R" rmin2="MMOuterSection_R" offset="MMRadial_offset" rsensor="MMOuterSensor_R"/>
7878
<frame name="MMFrame" material="CarbonFiber" width="MMFrameWidth" vis="TrackerSupportVis" />
7979
<frame name="MMOutwardFrame" material="CarbonFiber" width="MMOutwardFrameWidth" vis="TrackerServiceVis" />
8080
<service name="MMInnerService" material="Kapton" thickness="MMInnerService_thickness" vis="TrackerServiceVis" /> <comment> This includes cables => Kapton as a material is overoptimistic. </comment>

compact/tracking/mpgd_barrel_2DStrip.xml

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22
<!-- Copyright (C) 2022 Sylvester Joosten, Wouter Deconinck, Matt Posik, Yann Bedfer -->
33

44
<lccdd>
5-
<info name="mpgd_barrel_2DStrip.xml"
6-
title="Micro Pattern Gas Detectors"
7-
author="ybedfer"
8-
url="https://github.com/ybedfer"
9-
status="development"
10-
version="2.1"
11-
><comment/>
12-
</info>
5+
<documentation>
6+
Title: Micro Pattern Gas Detectors Cylindrical Barrel Layer
7+
Author: @ybedfer
8+
Status: development
9+
Version: 2.1
10+
</documentation>
1311

1412
<define>
1513
<comment>
@@ -36,7 +34,7 @@
3634
<constant name="MMDriftCuGround_thickness" value="0.41*um"/>
3735
<comment> FIXME: No support material is here, so fudge factor used to bring material budget to ~0.5% for barrel. </comment>
3836
<constant name="MMFudgeInnerMPGDBarrel_thickness" value="570*um"/>
39-
<comment> FIXME: No definite plan for connections/services to the inner sectors yet, so guess value. </comment>
37+
<comment> FIXME: No definite plan for connections/services to the inner sections yet, so guess value. </comment>
4038
<constant name="MMInnerService_thickness" value="0.05*cm"/>
4139
<comment> 2DStrip: Multiple Sensitive Volumes. => Subdivide GasGap: 3 thin slices (pixel and (p|n)strips) at the centre, enclosed by 2 thick radiators. </comment>
4240
<constant name="MMThinGap_thickness" value="10*um"/>
@@ -46,19 +44,19 @@
4644
<constant name="MMModuleLength" value="61.0*cm"/>
4745
<constant name="MMFrameWidth" value="1.0*cm"/>
4846
<constant name="MMOutwardFrameWidth" value="5.0*cm"/>
49-
<constant name="MMOuterSector_R" value="57.7*cm"/>
50-
<constant name="MMInnerSector_R" value="55.5*cm"/>
47+
<constant name="MMInnerSection_R" value="InnerMPGDBarrel_rmin + 0.5*cm"/>
48+
<constant name="MMOuterSection_R" value="MMInnerSection_R + 2.2*cm"/>
5149
<comment> ...Positioning </comment>
5250
<constant name="MMRadial_offset" value="1.0*cm"/>
5351
<constant name="MMCentral_gap" value="0.2*cm"/>
5452

5553
<comment> In principle, stave count should not be independenty specified: it is fixed by above intrinsic parameters </comment>
5654
<constant name="MPGDBarrelStave_count" value="8"/>
5755
<constant name="InnerMPGDBarrelLayer_rmin" value="InnerMPGDBarrel_rmin"/>
58-
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSector_R + MMRadial_offset / 2 + 1*cm"/>
56+
<constant name="InnerMPGDBarrelLayer_rmax" value="MMOuterSection_R + MMRadial_offset / 2 + 1*cm"/>
5957
<constant name="rmin2Sensor" value="MMDriftCuGround_thickness + MMDriftKapton_thickness + MMDriftCuElectrode_thickness + MMGasGap_thickness / 2" />
60-
<constant name="MMInnerSensor_R" value="MMInnerSector_R + rmin2Sensor" />
61-
<constant name="MMOuterSensor_R" value="MMOuterSector_R + rmin2Sensor" />
58+
<constant name="MMInnerSensor_R" value="MMInnerSection_R + rmin2Sensor" />
59+
<constant name="MMOuterSensor_R" value="MMOuterSection_R + rmin2Sensor" />
6260
<constant name="MMInnerAperture" value="MMModuleWidth/MMInnerSensor_R" />
6361
<constant name="MMOuterAperture" value="MMModuleWidth/MMOuterSensor_R" />
6462
</define>
@@ -78,8 +76,8 @@
7876

7977
<module name="InnerMPGDBarrel_Mod1" vis="TrackerLayerVis" >
8078
<comment> Models describe the overlapping of staves along phi, either (I) via offsets or (II) via distinct radii ("rmin1/2"). Solution (II) is only partially implemented: would require FOUR distinct "radius" in the readout segmentation. Note that in any case "rsensor" must be set equal the "radius" of the corresponding segmentation and is used internally to double-check the consistency between the stack of "module_component" and the segmentation "radius". </comment>
81-
<model name="MMInnerSector" rmin1="MMInnerSector_R" rmin2="MMInnerSector_R" offset="MMRadial_offset" rsensor="MMInnerSensor_R"/>
82-
<model name="MMOuterSector" rmin1="MMOuterSector_R" rmin2="MMOuterSector_R" offset="MMRadial_offset" rsensor="MMOuterSensor_R"/>
79+
<model name="MMInnerSection" rmin1="MMInnerSection_R" rmin2="MMInnerSection_R" offset="MMRadial_offset" rsensor="MMInnerSensor_R"/>
80+
<model name="MMOuterSection" rmin1="MMOuterSection_R" rmin2="MMOuterSection_R" offset="MMRadial_offset" rsensor="MMOuterSensor_R"/>
8381
<frame name="MMFrame" material="CarbonFiber" width="MMFrameWidth" vis="TrackerSupportVis" />
8482
<frame name="MMOutwardFrame" material="CarbonFiber" width="MMOutwardFrameWidth" vis="TrackerServiceVis" />
8583
<service name="MMInnerService" material="Kapton" thickness="MMInnerService_thickness" vis="TrackerServiceVis" /> <comment> This includes cables => Kapton as a material is overoptimistic. </comment>

compact/tracking/mpgd_outerbarrel.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<constant name="MPGDOuterBarrelModule_roverlap" value="0*cm"/>
2525
<constant name="MPGDOuterBarrelModule_zoverlap" value="0*MPGDOuterBarrelFrame_width"/>
2626
<constant name="MPGDOuterBarrelModule_count" value="12" />
27-
<constant name="MPGDOuterBarrelModule_allowed_space" value="25*mm"/>
27+
<constant name="MPGDOuterBarrelModule_allowed_space" value="15*mm"/>
2828
<constant name="MPGDOuterBarrelModule_rmax" value="MPGDOuterBarrelModule_rmin + MPGDOuterBarrelModule_allowed_space" />
2929
<constant name="MPGDOuterBarrelModule_roffset" value="0.5*cm" />
3030
<constant name="MPGDOuterBarrelModule_width" value="360*mm"/>

src/MPGDCylinderBarrelTracker_geo.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
132132
xml_comp_t z_layout = x_layer.child(_U(z_layout));
133133
double z_gap = z_layout.gap();
134134
// ***** INVALID LAYOUT PROPERTIES
135-
// # of staves (along phi) and sectors (along z) are now derived from stave
136-
// width and sector length. Used to be specified directly. In order to remind
135+
// # of staves (along phi) and sections (along z) are now derived from stave
136+
// width and section length. Used to be specified directly. In order to remind
137137
// the user this is no longer the case, let's forbid the use of the
138138
// corresponding (and a few more) tags.
139139
const int nInvalids = 4;
@@ -156,7 +156,7 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
156156
// - There needs to be 2, as of 2024/03: Inner and outer.
157157
// StaveModel = radius of curvature (=> "nphi", given "rmin")
158158
// + offset
159-
// sector2Models[2][2]: Which model for [inner,outer][r1,r2]
159+
// section2Models[2][2]: Which model for [inner,outer][r1,r2]
160160
typedef struct {
161161
string name;
162162
double rmin;
@@ -168,9 +168,9 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
168168
double offset;
169169
int io;
170170
} StaveModel;
171-
const int nSectors = 4;
172-
StaveModel staveModels[nSectors];
173-
int sector2Models[2][2];
171+
const int nSections = 4;
172+
StaveModel staveModels[nSections];
173+
int section2Models[2][2];
174174
xml_coll_t mi(x_mod, _U(model));
175175
if (mi.size() != 2) {
176176
printout(ERROR, "MPGDCylinderBarrelTracker", "Number of models = %d. Must be = 2",
@@ -202,8 +202,8 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
202202
io = 0; // ...it's the inner one => io = 0.
203203
else
204204
io = 1;
205-
staveModel.io = io;
206-
sector2Models[io][0] = nStaveModels - 1;
205+
staveModel.io = io;
206+
section2Models[io][0] = nStaveModels - 1;
207207
if (fabs(rmin2 - rmin1) > 1.e6) {
208208
StaveModel& staveMode2 = staveModels[nStaveModels++];
209209
staveMode2.rmin = rmin2;
@@ -215,7 +215,7 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
215215
staveMode2.name = x_model.nameStr() + string("_2");
216216
} else
217217
staveModel.name = x_model.nameStr();
218-
sector2Models[io][1] = nStaveModels - 1;
218+
section2Models[io][1] = nStaveModels - 1;
219219
}
220220
printout(DEBUG, "MPGDCylinderBarrelTracker", "%d Stave Models:", nStaveModels);
221221
for (int iSM = 0; iSM < nStaveModels; iSM++) {
@@ -291,11 +291,11 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
291291

292292
// Now that we know total thickness, let's "printout" the characteristics
293293
// of the models (extrema, phi superposition).
294-
printout(DEBUG, "MPGDCylinderBarrelTracker", "2 Sector Models:");
294+
printout(DEBUG, "MPGDCylinderBarrelTracker", "2 Section Models:");
295295
double outerPhiSuperpos = 0; // Later used to define phi range of service to inner
296296
for (int io = 0; io < 2; io++) {
297-
StaveModel& sM0 = staveModels[sector2Models[io][0]];
298-
StaveModel& sM1 = staveModels[sector2Models[io][1]];
297+
StaveModel& sM0 = staveModels[section2Models[io][0]];
298+
StaveModel& sM1 = staveModels[section2Models[io][1]];
299299
XYVector vOffset(sM0.offset / 2, 0);
300300
double phiEdge0 = stave_width / 2 / sM0.rmin;
301301
XYVector vEdge0(sM0.rmin * cos(phiEdge0), sM0.rmin * sin(phiEdge0));
@@ -312,7 +312,7 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
312312
double dPhi = acos(vEdge0.Dot(vEdge1) / Mag0 / Mag1);
313313
RMx += total_thickness;
314314
if (io == 1) {
315-
RMn -= service_thickness; // Outer sector: account for services to inner sector
315+
RMn -= service_thickness; // Outer section: account for services to inner section
316316
outerPhiSuperpos = dPhi;
317317
}
318318
printout(
@@ -515,13 +515,13 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
515515
// ***** SECTOR POSITIONS ALONG Z
516516
// These are the 4 central values in Z where the four sets of modules, called
517517
// sectors, will be placed.
518-
double modz_pos[nSectors] = {-barrel_length / 2 + (total_length) / 2, -(total_length + z_gap) / 2,
519-
+(total_length + z_gap) / 2,
520-
+barrel_length / 2 - (total_length) / 2};
521-
int nModules = 0;
522-
for (int iz = 0; iz < nSectors; iz++) {
518+
double modz_pos[nSections] = {-barrel_length / 2 + (total_length) / 2,
519+
-(total_length + z_gap) / 2, +(total_length + z_gap) / 2,
520+
+barrel_length / 2 - (total_length) / 2};
521+
int nModules = 0;
522+
for (int iz = 0; iz < nSections; iz++) {
523523
int io = (iz == 1 || iz == 2) ? 0 : 1;
524-
int iSMs[2] = {sector2Models[io][0], sector2Models[io][1]};
524+
int iSMs[2] = {section2Models[io][0], section2Models[io][1]};
525525
int iSM0 = iSMs[0];
526526
const StaveModel& sm0 = staveModels[iSM0];
527527
int nphi = sm0.nphi;
@@ -562,7 +562,7 @@ static Ref_t create_MPGDCylinderBarrelTracker(Detector& description, xml_h e,
562562
for (int iSensitive = 0; iSensitive < sensitiveVolumeSet; iSensitive++) {
563563
// ***** SENSITIVE COMPONENTS
564564
PlacedVolume& sens_pv = sensitives[iSensitive][iV];
565-
int de_id = nphi * nSectors * iSensitive + nModules;
565+
int de_id = nphi * nSections * iSensitive + nModules;
566566
DetElement comp_de(mod_elt,
567567
std::string("de_") + sens_pv.volume().name() + _toString(de_id, "%02d"),
568568
de_id);

0 commit comments

Comments
 (0)