Skip to content

Commit e0ccd4b

Browse files
committed
ITS3: account for epitaxial layer
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 9315737 commit e0ccd4b

File tree

3 files changed

+32
-23
lines changed

3 files changed

+32
-23
lines changed

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

Lines changed: 27 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,26 @@ 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+
// TODO FS
927+
// correction for effective sensor thickness; disabled for now since this does not work
928+
// but the bias by not using in this should be very small
929+
/*static TGeoTranslation tra;*/
930+
/*tra.SetDx(SuperSegmentation::mSensorLayerThicknessCorr * std::cos(alpha));*/
931+
/*tra.SetDy(SuperSegmentation::mSensorLayerThicknessCorr * std::sin(alpha));*/
932+
/*t2l *= tra;*/
933+
return Mat3D(t2l);
934+
}
935+
929936
//__________________________________________________________________________
930937
int GeometryTGeo::extractVolumeCopy(const char* name, const char* prefix) const
931938
{

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)