Skip to content

Commit 424a0ce

Browse files
committed
make stave width explicit variable and use it to constrain its placement, rather than sensor width: this allowed for potential small ex/intrusions.
1 parent 24fe222 commit 424a0ce

4 files changed

Lines changed: 18 additions & 19 deletions

File tree

‎Detectors/Upgrades/ALICE3/TRKFT3/FT3/simulation/include/FT3Simulation/FT3Module.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ class FT3Module
8686

8787
// Helper functions
8888
void fill_stave_greedy(
89-
PosNegPositionTypes& y_positions, double Rin, double Rout,
90-
double x_left, unsigned kSensorStack, PositionRangeType y_range,
89+
PosNegPositionTypes& y_positions, unsigned kSensorStack,
90+
PositionRangeType y_range,
9191
std::pair<double, double>& absAllowedYRange);
9292

9393
PositionTypes fill_stave_exact(const std::vector<Constants::StaveFill>& fills);

‎Detectors/Upgrades/ALICE3/TRKFT3/FT3/simulation/include/FT3Simulation/FT3ModuleConstants.h‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ namespace o2::ft3::ModuleConstants
4747
// First set all layout constants for the rest of the function
4848
const double single_sensor_width = 2.5;
4949
const double single_sensor_height = 2.9;
50-
const double inactive_width = 0.2;
50+
const double inactive_width = 0.15;
5151
const double sensor2x1_gap = 0.015; // gap between L&R sensors in 2x1, and between sensors in a stack
5252
const double stackGap = 0.035; // gap between 2xN module stacks
5353

@@ -111,8 +111,9 @@ const double effectiveCarbonThickness_Stave = 0.02; // foam + shell
111111
const double staveOpeningAngle = 60 * TMath::DegToRad();
112112
const double sinTheta = TMath::Sin(staveOpeningAngle / 2);
113113
const double alpha = TMath::Pi() / 2 - staveOpeningAngle / 2; // bottom angles
114-
const double staveSensorGap = 0.1; // 2mm padding on each side when sensor is glued
115-
const double staveTriangleHeight = (sensor2x1_width + 2 * staveSensorGap) / 2.0 / tan(staveOpeningAngle / 2.0);
114+
const double staveSensorGap = 0.1025; // 1025µm padding on each side: 52.2mm stave width
115+
const double staveWidth = sensor2x1_width + 2 * staveSensorGap;
116+
const double staveTriangleHeight = staveWidth / 2.0 / tan(staveOpeningAngle / 2.0);
116117
/*
117118
* Now describe the offset of every other stave in z to avoid overlaps
118119
* ______ ______

‎Detectors/Upgrades/ALICE3/TRKFT3/FT3/simulation/src/FT3Layer.cxx‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,10 @@ void FT3Layer::createLayer(TGeoVolume* motherVolume)
423423
double z_local_offset = z_layer_thickness / 2.0;
424424
// ensure staves fully encapsulated in the layer volume,
425425
// but don't cross out of max nominal radii of 38.5cm & 71.5cm respectively (3.5cm tolerance)
426+
// Allow 9cm inward for OT:
427+
double innerRadiusForAirTube = mIsMiddleLayer ? mInnerRadius : mInnerRadius - 9.0;
426428
// MvL: try 70.5 // 2.5 cm tolerance instead
427-
TGeoTube* layer = new TGeoTube(mInnerRadius - 0.2, mOuterRadius + 2.49, z_layer_thickness / 2);
429+
TGeoTube* layer = new TGeoTube(innerRadiusForAirTube - 0.2, mOuterRadius + 2.49, z_layer_thickness / 2);
428430
layerVol = new TGeoVolume(mLayerName.c_str(), layer, medAir);
429431

430432
if (ft3Params.drawReferenceCircles) {

‎Detectors/Upgrades/ALICE3/TRKFT3/FT3/simulation/src/FT3Module.cxx‎

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,14 @@ std::pair<double, double> calculate_y_range(
8383
* y_positions: a pair of vectors, where each vector contains pairs of
8484
* y position and stack height for the positive and negative y positions respectively.
8585
* This argument will be appended with the new sensor positions and stack heights.
86-
* Rout: the outer radius of the layer
87-
* Rin: the inner radius of the layer
88-
* x_left: the x position of the left edge of the sensor to be placed
8986
* kSensorStack: the number of sensors to be stacked on top of each other
9087
* y_ranges: the y positions to start and end placing sensors,
9188
* for positive and negative y respectively
9289
* absAllowedYRange: the absolute y range allowed for placing sensors,
9390
* used to cut placement if they go past allowed tolerances
9491
*/
95-
void FT3Module::fill_stave_greedy(PosNegPositionTypes& y_positions, double Rin, double Rout,
96-
double x_left, unsigned kSensorStack, PositionRangeType y_ranges,
92+
void FT3Module::fill_stave_greedy(PosNegPositionTypes& y_positions, unsigned kSensorStack,
93+
PositionRangeType y_ranges,
9794
std::pair<double, double>& absAllowedYRange)
9895
{
9996
// start with upper half of the stave, then mirror to the bottom half
@@ -648,10 +645,10 @@ void FT3Module::build_staves_greedy(
648645
* (2) The inner tolerance is large enough to allow stave placement as wished
649646
* a) AND the given stave midpoint is above the inner radius
650647
*/
651-
double x_left = staveConfig.x_midpoints[i_stave] - Constants::sensor2x1_width / 2;
652-
double x_right = x_left + Constants::sensor2x1_width;
648+
double x_left_stave = staveConfig.x_midpoints[i_stave] - Constants::staveWidth / 2;
649+
double x_right_stave = x_left_stave + Constants::staveWidth;
653650
std::pair<double, double> absAllowedYRange =
654-
calculate_y_range(x_left, x_right, Rin, Rout);
651+
calculate_y_range(x_left_stave, x_right_stave, Rin, Rout);
655652

656653
/*
657654
* Shift allowed range by tolerance. Note that both values in the range must
@@ -679,9 +676,8 @@ void FT3Module::build_staves_greedy(
679676
// now add the sensor positions on the stave
680677
for (unsigned i_kSens = 0; i_kSens < Constants::kSensorsPerStack.size(); i_kSens++) {
681678
unsigned nModulesCurr = y_positionsPosNeg.back().first.size() + y_positionsPosNeg.back().second.size();
682-
fill_stave_greedy(y_positionsPosNeg.back(), Rin, Rout, x_left,
683-
Constants::kSensorsPerStack[i_kSens], y_ranges,
684-
absAllowedYRange);
679+
fill_stave_greedy(y_positionsPosNeg.back(), Constants::kSensorsPerStack[i_kSens],
680+
y_ranges, absAllowedYRange);
685681
unsigned nModulesAdded = y_positionsPosNeg.back().first.size() + y_positionsPosNeg.back().second.size() - nModulesCurr;
686682
nSensorStackCountPerStave[i_stave][i_kSens] = nModulesAdded;
687683
nSensorStackTotal[i_kSens] += nModulesAdded;
@@ -820,12 +816,12 @@ void FT3Module::create_layout_staveGeo(double mZ, int layerNumber, int direction
820816
double z_mid = z_offset_to_silicon * z_offset_multiplier + z_stave_shift;
821817
addSingleSensorVolume(
822818
motherVolume, layerNumber, direction, i_stave, sensor_count,
823-
x_mid - Constants::sensor2x1_width / 2,
819+
x_mid - Constants::sensor2x1_gap / 2 - Constants::active_width / 2,
824820
y_mid, z_mid, true);
825821
// right single sensor of the 2x1: place left edge half of sensor gap from center
826822
addSingleSensorVolume(
827823
motherVolume, layerNumber, direction, i_stave, sensor_count + 1,
828-
x_mid + Constants::sensor2x1_width / 2,
824+
x_mid + Constants::sensor2x1_gap / 2 + Constants::active_width / 2,
829825
y_mid, z_mid, false);
830826
// ------------ (2) Epoxy glue layer between silicon and copper (FPC) ------------
831827
z_mid = z_offset_to_glue_Si * z_offset_multiplier + z_stave_shift;

0 commit comments

Comments
 (0)