Skip to content

Commit 06af269

Browse files
authored
ITS3: Base: Make ALPIDE pixel size configurable (#10690)
v1->v2: Changed Name from Alpide to SuperAlpide to be more consistent Signed-off-by: Felix Schlepper <f3sch.git@outlook.com>
1 parent 8ed5975 commit 06af269

File tree

5 files changed

+96
-31
lines changed

5 files changed

+96
-31
lines changed

Detectors/Upgrades/ITS3/base/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
o2_add_library(ITS3Base
1313
SOURCES src/MisalignmentParameter.cxx
1414
src/SegmentationSuperAlpide.cxx
15+
src/SuperAlpideParams.cxx
1516
PUBLIC_LINK_LIBRARIES O2::CommonConstants O2::MathUtils O2::DetectorsBase)
1617

1718
o2_target_root_dictionary(ITS3Base
1819
HEADERS include/ITS3Base/SegmentationSuperAlpide.h
19-
include/ITS3Base/MisalignmentParameter.h)
20+
include/ITS3Base/MisalignmentParameter.h
21+
include/ITS3Base/SuperAlpideParams.h)

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

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <Rtypes.h>
1919
#include "MathUtils/Cartesian.h"
2020
#include "CommonConstants/MathConstants.h"
21+
#include "ITS3Base/SuperAlpideParams.h"
2122
#include <Framework/Logger.h>
2223

2324
namespace o2
@@ -30,33 +31,40 @@ class SegmentationSuperAlpide
3031
{
3132
public:
3233
SegmentationSuperAlpide(int layer = 0) : mLayer{layer},
33-
mNPixels{mNRows * mNCols},
34+
mPitchCol{SuperAlpideParams::Instance().pitchCol},
35+
mPitchRow{SuperAlpideParams::Instance().pitchRow},
36+
mNCols{static_cast<int>(mLength / mPitchCol)},
3437
mNRows{static_cast<int>(double(mRadii[layer] + mSensorLayerThickness / 2) * double(constants::math::PI) / double(mPitchRow) + 1)},
38+
mNPixels{mNRows * mNCols},
39+
mActiveMatrixSizeCols{mPitchCol * mNCols},
3540
mActiveMatrixSizeRows{mPitchRow * mNRows},
41+
mSensorSizeCols{mActiveMatrixSizeCols + mPassiveEdgeSide + mPassiveEdgeSide},
3642
mSensorSizeRows{mActiveMatrixSizeRows + mPassiveEdgeTop + mPassiveEdgeReadOut}
3743
{
38-
LOGP(info, "rows: {} cols: {} npixels: {}", mNRows, mNCols, mNPixels);
39-
LOGP(info, "SegmentationSuperAlpide: layer {} ActiveMatrixSizeRows: {} ActiveMatrixSizeCols: {}", mLayer, mActiveMatrixSizeCols, mActiveMatrixSizeRows);
44+
LOGP(info, "SegmentationSuperAlpide:");
45+
LOGP(info, "PitchCol={} PitchRow={}", mPitchCol, mPitchRow);
46+
LOGP(info, "Layer {}: ActiveMatrixSizeRows={} ActiveMatrixSizeCols={}", mLayer, mActiveMatrixSizeCols, mActiveMatrixSizeRows);
47+
LOGP(info, "Rows={} Cols={} NPixels={}", mNRows, mNCols, mNPixels);
4048
}
41-
static constexpr std::array<float, 10> mRadii = {1.8f, 2.4f, 3.0f, 7.0f, 10.f};
42-
static constexpr float mLength = 27.15f;
43-
static constexpr float mPitchCol = 20.e-4;
44-
static constexpr float mPitchRow = 20.e-4;
45-
static constexpr int mNCols = mLength / mPitchCol;
46-
int mNRows;
47-
int mNPixels;
48-
int mLayer;
49-
static constexpr float mPassiveEdgeReadOut = 0.; // width of the readout edge (Passive bottom)
50-
static constexpr float mPassiveEdgeTop = 0.; // Passive area on top
51-
static constexpr float mPassiveEdgeSide = 0.; // width of Passive area on left/right of the sensor
52-
static constexpr float mActiveMatrixSizeCols = mPitchCol * mNCols; // Active size along columns
53-
float mActiveMatrixSizeRows; // Active size along rows
54-
55-
// effective thickness of sensitive layer, accounting for charge collection non-unifoemity, https://alice.its.cern.ch/jira/browse/AOC-46
56-
static constexpr float mSensorLayerThicknessEff = 28.e-4;
57-
static constexpr float mSensorLayerThickness = 30.e-4; // physical thickness of sensitive part
58-
static constexpr float mSensorSizeCols = mActiveMatrixSizeCols + mPassiveEdgeSide + mPassiveEdgeSide; // SensorSize along columns
59-
float mSensorSizeRows; // SensorSize along rows
49+
static constexpr std::array<float, 10> mRadii = {1.8f, 2.4f, 3.0f, 7.0f, 10.f}; ///< radii for different layers
50+
static constexpr float mLength = 27.15f; ///< chip length
51+
const float mPitchCol; ///< pixel column size
52+
const float mPitchRow; ///< pixel row size
53+
const int mNCols; ///< number of columns
54+
const int mNRows; ///< number of rows
55+
const int mNPixels; ///< total number of pixels
56+
const int mLayer; ///< chip layer
57+
static constexpr float mPassiveEdgeReadOut = 0.; ///< width of the readout edge (Passive bottom)
58+
static constexpr float mPassiveEdgeTop = 0.; ///< Passive area on top
59+
static constexpr float mPassiveEdgeSide = 0.; ///< width of Passive area on left/right of the sensor
60+
const float mActiveMatrixSizeCols; ///< Active size along columns
61+
const float mActiveMatrixSizeRows; ///< Active size along rows
62+
63+
// effective thickness of sensitive layer, accounting for charge collection non-uniformity, https://alice.its.cern.ch/jira/browse/AOC-46
64+
static constexpr float mSensorLayerThicknessEff = 28.e-4; ///< effective thickness of sensitive part
65+
static constexpr float mSensorLayerThickness = 30.e-4; ///< physical thickness of sensitive part
66+
const float mSensorSizeCols; ///< SensorSize along columns
67+
const float mSensorSizeRows; ///< SensorSize along rows
6068

6169
~SegmentationSuperAlpide() = default;
6270

@@ -65,23 +73,23 @@ class SegmentationSuperAlpide
6573
/// \param xCurved Detector local curved coordinate x in cm with respect to
6674
/// the center of the sensitive volume.
6775
/// \param yCurved Detector local curved coordinate y in cm with respect to
68-
/// the center of the sensitive volulme.
76+
/// the center of the sensitive volume.
6977
/// \param xFlat Detector local flat coordinate x in cm with respect to
7078
/// the center of the sensitive volume.
7179
/// \param yFlat Detector local flat coordinate y in cm with respect to
72-
/// the center of the sensitive volulme.
80+
/// the center of the sensitive volume.
7381
void curvedToFlat(float xCurved, float yCurved, float& xFlat, float& yFlat);
7482

7583
/// Transformation from the flat surface to a curved surface
7684
/// It works only if the detector is not rototraslated
7785
/// \param xFlat Detector local flat coordinate x in cm with respect to
7886
/// the center of the sensitive volume.
7987
/// \param yFlat Detector local flat coordinate y in cm with respect to
80-
/// the center of the sensitive volulme.
88+
/// the center of the sensitive volume.
8189
/// \param xCurved Detector local curved coordinate x in cm with respect to
8290
/// the center of the sensitive volume.
8391
/// \param yCurved Detector local curved coordinate y in cm with respect to
84-
/// the center of the sensitive volulme.
92+
/// the center of the sensitive volume.
8593
void flatToCurved(float xFlat, float yFlat, float& xCurved, float& yCurved);
8694

8795
/// Transformation from Geant detector centered local coordinates (cm) to
@@ -92,7 +100,7 @@ class SegmentationSuperAlpide
92100
/// \param float x Detector local coordinate x in cm with respect to
93101
/// the center of the sensitive volume.
94102
/// \param float z Detector local coordinate z in cm with respect to
95-
/// the center of the sensitive volulme.
103+
/// the center of the sensitive volume.
96104
/// \param int iRow Detector x cell coordinate. Has the range 0 <= iRow < mNumberOfRows
97105
/// \param int iCol Detector z cell coordinate. Has the range 0 <= iCol < mNumberOfColumns
98106
bool localToDetector(float x, float z, int& iRow, int& iCol);
@@ -106,7 +114,7 @@ class SegmentationSuperAlpide
106114
/// \param float x Detector local coordinate x in cm with respect to the
107115
/// center of the sensitive volume.
108116
/// \param float z Detector local coordinate z in cm with respect to the
109-
/// center of the sensitive volulme.
117+
/// center of the sensitive volume.
110118
/// If iRow and or iCol is outside of the segmentation range a value of -0.5*Dx()
111119
/// or -0.5*Dz() is returned.
112120
bool detectorToLocal(int iRow, int iCol, float& xRow, float& zCol);
@@ -122,11 +130,14 @@ class SegmentationSuperAlpide
122130
{
123131
return 0.5 * ((mActiveMatrixSizeRows - mPassiveEdgeTop + mPassiveEdgeReadOut) - mPitchRow);
124132
}
125-
static constexpr float getFirstColCoordinate() { return 0.5 * (mPitchCol - mActiveMatrixSizeCols); }
133+
float getFirstColCoordinate()
134+
{
135+
return 0.5 * (mPitchCol - mActiveMatrixSizeCols);
136+
}
126137

127138
void print();
128139

129-
ClassDefNV(SegmentationSuperAlpide, 1); // Segmentation class upgrade pixels
140+
ClassDefNV(SegmentationSuperAlpide, 2); // Segmentation class upgrade pixels
130141
};
131142

132143
inline void SegmentationSuperAlpide::curvedToFlat(float xCurved, float yCurved, float& xFlat, float& yFlat)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
// \brief Collect all possible configurable parameters for Super ALPIDE chips
13+
14+
#ifndef O2_SUPER_ALPIDE_PARAMS_H
15+
#define O2_SUPER_ALPIDE_PARAMS_H
16+
17+
#include "CommonUtils/ConfigurableParam.h"
18+
#include "CommonUtils/ConfigurableParamHelper.h"
19+
20+
namespace o2
21+
{
22+
namespace its3
23+
{
24+
25+
/// Segmentation parameters for Super ALPIDE chips
26+
struct SuperAlpideParams : public o2::conf::ConfigurableParamHelper<SuperAlpideParams> {
27+
float pitchCol = 20.e-4; ///< Pixel column size (cm)
28+
float pitchRow = 20.e-4; ///< Pixel row size (cm)
29+
30+
// boilerplate
31+
O2ParamDef(SuperAlpideParams, "SuperAlpideParams");
32+
};
33+
34+
} // namespace its3
35+
} // namespace o2
36+
37+
#endif

Detectors/Upgrades/ITS3/base/src/ITS3BaseLinkDef.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@
1717

1818
#pragma link C++ class o2::its3::SegmentationSuperAlpide + ;
1919
#pragma link C++ class o2::its3::MisalignmentParameter + ;
20+
#pragma link C++ class o2::its3::SuperAlpideParams + ;
21+
#pragma link C++ class o2::conf::ConfigurableParamHelper < o2::its3::SuperAlpideParams> + ;
2022

2123
#endif
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
#include "ITS3Base/SuperAlpideParams.h"
13+
O2ParamImpl(o2::its3::SuperAlpideParams);

0 commit comments

Comments
 (0)