Skip to content

Commit f71ac5d

Browse files
committed
ITS3: account for epitaxial layer
1 parent 9315737 commit f71ac5d

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

Detectors/ITSMFT/ITS/base/src/GeometryTGeo.cxx

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -420,33 +420,20 @@ TGeoHMatrix* GeometryTGeo::extractMatrixSensor(int index) const
420420
static int chipInGlo{0};
421421

422422
// account for the difference between physical sensitive layer (where charge collection is simulated) and effective sensor thicknesses
423+
// in the ITS3 case this accounted by specialized functions
423424
double delta = Segmentation::SensorLayerThickness - Segmentation::SensorLayerThicknessEff;
424-
#ifdef ENABLE_UPGRADES
425-
if (mIsLayerITS3[getLayer(index)]) {
426-
delta = its3::SegmentationSuperAlpide::mSensorLayerThickness - its3::SegmentationSuperAlpide::mSensorLayerThicknessEff;
427-
}
428-
#endif
429-
430425
static TGeoTranslation tra(0., 0.5 * delta, 0.);
431-
426+
#ifdef ENABLE_UPGRADES // only apply for non ITS3 OB layers
427+
if (!mIsLayerITS3[getLayer(index)]) {
428+
matTmp *= tra;
429+
}
430+
#else
432431
matTmp *= tra;
432+
#endif
433433

434434
return &matTmp;
435435
}
436436

437-
//__________________________________________________________________________
438-
const o2::math_utils::Transform3D GeometryTGeo::getT2LMatrixITS3(int isn, float alpha)
439-
{
440-
// create for sensor isn the TGeo matrix for Tracking to Local frame transformations
441-
static TGeoHMatrix t2l;
442-
t2l.Clear();
443-
t2l.RotateZ(alpha * RadToDeg()); // rotate in direction of normal to the tangent to the cylinder
444-
const TGeoHMatrix& matL2G = getMatrixL2G(isn);
445-
const auto& matL2Gi = matL2G.Inverse();
446-
t2l.MultiplyLeft(&matL2Gi);
447-
return Mat3D(t2l);
448-
}
449-
450437
//__________________________________________________________________________
451438
void GeometryTGeo::Build(int loadTrans)
452439
{
@@ -926,6 +913,24 @@ TGeoHMatrix& GeometryTGeo::createT2LMatrix(int isn)
926913
return t2l;
927914
}
928915

916+
//__________________________________________________________________________
917+
const o2::math_utils::Transform3D GeometryTGeo::getT2LMatrixITS3(int isn, float alpha)
918+
{
919+
// create for sensor isn the TGeo matrix for Tracking to Local frame transformations with correction for effective thickness
920+
static TGeoHMatrix t2l;
921+
t2l.Clear();
922+
t2l.RotateZ(alpha * RadToDeg()); // rotate in direction of normal to the tangent to the cylinder
923+
const TGeoHMatrix& matL2G = getMatrixL2G(isn);
924+
const auto& matL2Gi = matL2G.Inverse();
925+
t2l.MultiplyLeft(&matL2Gi);
926+
// correction for effective sensor thickness
927+
static TGeoTranslation tra;
928+
tra.SetDx(SuperSegmentation::mSensorLayerThicknessCorr * std::cos(alpha));
929+
tra.SetDy(SuperSegmentation::mSensorLayerThicknessCorr * std::sin(alpha));
930+
t2l *= tra;
931+
return Mat3D(t2l);
932+
}
933+
929934
//__________________________________________________________________________
930935
int GeometryTGeo::extractVolumeCopy(const char* name, const char* prefix) const
931936
{

Detectors/Upgrades/ITS3/base/include/ITS3Base/SegmentationSuperAlpide.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class SegmentationSuperAlpide
6969
static constexpr float mPitchRow{constants::pixelarray::width / static_cast<float>(mNRows)};
7070
static constexpr float mSensorLayerThickness{constants::thickness};
7171
static constexpr float mSensorLayerThicknessEff{constants::effThickness};
72+
static constexpr float mSensorLayerThicknessCorr{constants::corrThickness};
7273
static constexpr std::array<float, constants::nLayers> mRadii{constants::radii};
7374

7475
/// Transformation from the curved surface to a flat surface

Detectors/Upgrades/ITS3/base/include/ITS3Base/SpecsV2.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,11 @@ constexpr unsigned int nTotLayers{7};
118118
constexpr unsigned int nSensorsIB{2 * nLayers};
119119
constexpr float equatorialGap{1 * mm};
120120
constexpr std::array<unsigned int, nLayers> nSegments{3, 4, 5};
121-
constexpr float epitaxialThickness{10 * mu};
122-
constexpr float psubThickness{40 * mu};
121+
constexpr float epitaxialThickness{10 * mu}; // eptixial layer (charge collection)
122+
constexpr float psubThickness{40 * mu}; // silicon substrate
123123
constexpr float thickness{epitaxialThickness + psubThickness}; // physical thickness of chip
124-
constexpr float effThickness{epitaxialThickness + psubThickness / 2.0}; // correction to the epitaxial layer
124+
constexpr float effThickness{epitaxialThickness / 2.0 + psubThickness}; // effective physical thickness
125+
constexpr float corrThickness{effThickness - thickness / 2.0}; // correction to get into the epitxial layer
125126
constexpr std::array<float, nLayers> radii{19.0006 * mm, 25.228 * mm, 31.4554 * mm}; // middle radius e.g. inner radius+thickness/2.
126127
constexpr std::array<float, nLayers> radiiInner{radii[0] - thickness / 2.0, radii[1] - thickness / 2.0, radii[2] - thickness / 2.0}; // inner radius
127128
constexpr std::array<float, nLayers> radiiOuter{radii[0] + thickness / 2.0, radii[1] + thickness / 2.0, radii[2] + thickness / 2.0}; // inner radius

0 commit comments

Comments
 (0)