Skip to content

Commit 9cda446

Browse files
maciaccoalibuild
andauthored
[ALICE 3] TF3: update OTOF geometry with split staves (#15666)
* add sub-stave architecture in OTOF (changes in chip containers and segmentation yet to be done) * adjust geometry parameters + use a single chip parametrization with updated size * remove log print * avoid duplicatiion of chip parameters * build otof stave in a loop * Please consider the following formatting changes --------- Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 407208a commit 9cda446

11 files changed

Lines changed: 151 additions & 175 deletions

File tree

Detectors/Upgrades/ALICE3/IOTOF/base/include/IOTOFBase/GeometryTGeo.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
5050
const int getOTOFNumberOfChips() const { return mNumberOfChipsIOTOF[1]; }
5151
static const char* getOTOFLayerPattern() { return sOTOFLayerName.c_str(); }
5252
static const char* getOTOFStavePattern() { return sOTOFStaveName.c_str(); }
53+
static const char* getOTOFSubStavePattern() { return sOTOFSubStaveName.c_str(); }
5354
static const char* getOTOFModulePattern() { return sOTOFModuleName.c_str(); }
5455
static const char* getOTOFChipPattern() { return sOTOFChipName.c_str(); }
5556
static const char* getOTOFSensorPattern() { return sOTOFSensorName.c_str(); }
@@ -96,8 +97,8 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
9697
int getIOTOFFirstChipIndex(int lay) const;
9798
int getIOTOFLayer(int index) const;
9899
bool isValidIOTOFChipIndex(int index) const { return index >= 0 && index <= mLastChipIndex[1]; }
99-
int getIOTOFChipIndex(int lay, int sta, int mod, int chip) const;
100-
bool getIOTOFChipId(int index, int& lay, int& sta, int& mod, int& chip) const;
100+
int getIOTOFChipIndex(int lay, int sta, int substa, int mod, int chip) const;
101+
bool getIOTOFChipId(int index, int& lay, int& sta, int& substa, int& mod, int& chip) const;
101102
o2::math_utils::Point3D<float> detectorToLocal(int row, int col, int chipId) const;
102103
static const ChipSpecifics& getChipSpecifics(int iotofLayer);
103104

@@ -133,6 +134,7 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
133134
protected:
134135
// Determine the number of active parts in the geometry
135136
int extractNumberOfStavesIOTOF(int lay) const;
137+
int extractNumberOfSubStavesIOTOF(int lay) const;
136138
int extractNumberOfModulesIOTOF(int lay) const;
137139
int extractNumberOfChipsPerModuleIOTOF(int lay) const;
138140
int extractNumberOfChipsFTOF() const;
@@ -151,6 +153,7 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
151153
// Outer TOF
152154
static std::string sOTOFLayerName;
153155
static std::string sOTOFStaveName;
156+
static std::string sOTOFSubStaveName;
154157
static std::string sOTOFModuleName;
155158
static std::string sOTOFChipName;
156159
static std::string sOTOFSensorName;
@@ -167,9 +170,11 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
167170

168171
// Inner/outer TOF
169172
int mNumberOfStavesIOTOF[2]{};
173+
int mNumberOfSubStavesIOTOF[2]{};
170174
int mNumberOfModulesIOTOF[2]{};
171175
int mNumberOfChipsPerModuleIOTOF[2]{};
172176
int mNumberOfChipsPerStaveIOTOF[2]{};
177+
int mNumberOfChipsPerSubStaveIOTOF[2]{};
173178
int mNumberOfChipsIOTOF[2]{};
174179
int mLastChipIndex[2]{-1, -1};
175180

Detectors/Upgrades/ALICE3/IOTOF/base/include/IOTOFBase/IOTOFBaseParam.h

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -21,65 +21,27 @@ namespace iotof
2121
{
2222

2323
struct ChipSpecifics {
24-
int NCols = 0;
25-
int NRows = 0;
26-
float PitchCol = 0.;
27-
float PitchRow = 0.;
24+
int NCols = 129;
25+
int NRows = 271;
26+
float PitchCol = 250.00e-4;
27+
float PitchRow = 100.00e-4;
2828
float PassiveEdgeReadOut = 0.;
2929
float PassiveEdgeTop = 0.;
3030
float PassiveEdgeSide = 0.;
3131
float PixelPassiveEdgeX = 0.;
3232
float PixelPassiveEdgeZ = 0.;
33-
float SensorLayerThicknessEff = 0.;
34-
float SensorLayerThickness = 0.;
33+
float SensorLayerThicknessEff = 50.e-4;
34+
float SensorLayerThickness = 50.e-4;
3535

3636
int NPixels() const { return NCols * NRows; }
3737
float ActiveMatrixSizeCols() const { return PitchCol * NCols; }
3838
float ActiveMatrixSizeRows() const { return PitchRow * NRows; }
39-
float SensorSizeCols() const { return ActiveMatrixSizeCols() + 2 * PassiveEdgeSide; }
39+
float SensorSizeCols() const { return ActiveMatrixSizeCols() + PassiveEdgeSide + PassiveEdgeSide; }
4040
float SensorSizeRows() const { return ActiveMatrixSizeRows() + PassiveEdgeTop + PassiveEdgeReadOut; }
4141
};
4242

43-
struct ITOFChipSpecifics : ChipSpecifics {
44-
ITOFChipSpecifics()
45-
{
46-
NCols = 129;
47-
NRows = 271;
48-
PitchCol = 250.00e-4;
49-
PitchRow = 100.00e-4;
50-
PassiveEdgeReadOut = 0.;
51-
PassiveEdgeTop = 0.;
52-
PassiveEdgeSide = 0.;
53-
PixelPassiveEdgeX = 0.;
54-
PixelPassiveEdgeZ = 0.;
55-
SensorLayerThicknessEff = 50.e-4;
56-
SensorLayerThickness = 50.e-4;
57-
}
58-
};
59-
60-
struct OTOFChipSpecifics : ChipSpecifics {
61-
OTOFChipSpecifics()
62-
{
63-
NCols = 125;
64-
NRows = 243;
65-
PitchCol = 250.00e-4;
66-
PitchRow = 100.00e-4;
67-
PassiveEdgeTop = 50.e-4;
68-
PassiveEdgeSide = 115.8e-4;
69-
PassiveEdgeReadOut = 50.e-4;
70-
PixelPassiveEdgeX = 0.;
71-
PixelPassiveEdgeZ = 0.;
72-
SensorLayerThicknessEff = 50.e-4;
73-
SensorLayerThickness = 50.e-4;
74-
}
75-
};
76-
77-
struct ITOFChipSpecificParam : public o2::conf::ConfigurableParamPromoter<ITOFChipSpecificParam, ITOFChipSpecifics> {
78-
O2ParamDef(ITOFChipSpecificParam, "ITOFChipSpecific");
79-
};
80-
81-
struct OTOFChipSpecificParam : public o2::conf::ConfigurableParamPromoter<OTOFChipSpecificParam, OTOFChipSpecifics> {
82-
O2ParamDef(OTOFChipSpecificParam, "OTOFChipSpecific");
43+
struct ChipSpecificsParam : public o2::conf::ConfigurableParamPromoter<ChipSpecificsParam, ChipSpecifics> {
44+
O2ParamDef(ChipSpecificsParam, "ChipSpecificsParam")
8345
};
8446

8547
struct IOTOFBaseParam : public o2::conf::ConfigurableParamHelper<IOTOFBaseParam> {

Detectors/Upgrades/ALICE3/IOTOF/base/src/GeometryTGeo.cxx

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ std::string GeometryTGeo::sITOFSensorName = "ITOFSensor";
3434
// Outer TOF
3535
std::string GeometryTGeo::sOTOFLayerName = "OTOFLayer";
3636
std::string GeometryTGeo::sOTOFStaveName = "OTOFStave";
37+
std::string GeometryTGeo::sOTOFSubStaveName = "OTOFSubStave";
3738
std::string GeometryTGeo::sOTOFModuleName = "OTOFModule";
3839
std::string GeometryTGeo::sOTOFChipName = "OTOFChip";
3940
std::string GeometryTGeo::sOTOFSensorName = "OTOFSensor";
@@ -81,11 +82,38 @@ int GeometryTGeo::extractNumberOfStavesIOTOF(int lay) const
8182
return numberOfStaves;
8283
}
8384

85+
int GeometryTGeo::extractNumberOfSubStavesIOTOF(int lay) const
86+
{
87+
if (lay == 0) {
88+
return 1;
89+
}
90+
91+
int numberOfSubStaves{0};
92+
93+
std::string staveName = GeometryTGeo::getOTOFStavePattern();
94+
TGeoVolume* staveV = gGeoManager->GetVolume(staveName.c_str());
95+
if (staveV == nullptr) {
96+
LOG(fatal) << "Can't find volume " << staveName;
97+
return -1;
98+
}
99+
100+
TObjArray* nodes = staveV->GetNodes();
101+
int nNodes = nodes->GetEntriesFast();
102+
103+
for (int j{0}; j < nNodes; ++j) {
104+
if (strstr(nodes->At(j)->GetName(), GeometryTGeo::getOTOFSubStavePattern()) != nullptr) {
105+
numberOfSubStaves++;
106+
}
107+
}
108+
109+
return numberOfSubStaves;
110+
}
111+
84112
int GeometryTGeo::extractNumberOfModulesIOTOF(int lay) const
85113
{
86114
int numberOfModules{0};
87115

88-
std::string staveName = lay == 0 ? GeometryTGeo::getITOFStavePattern() : GeometryTGeo::getOTOFStavePattern();
116+
std::string staveName = lay == 0 ? GeometryTGeo::getITOFStavePattern() : GeometryTGeo::getOTOFSubStavePattern();
89117
TGeoVolume* staveV = gGeoManager->GetVolume(staveName.c_str());
90118
if (staveV == nullptr) {
91119
LOG(fatal) << "Can't find volume " << staveName;
@@ -151,33 +179,27 @@ int GeometryTGeo::getIOTOFLayer(int index) const
151179
return index > mLastChipIndex[0] ? 1 : 0;
152180
}
153181

154-
int GeometryTGeo::getIOTOFChipIndex(int lay, int sta, int mod, int chip) const
182+
int GeometryTGeo::getIOTOFChipIndex(int lay, int sta, int substa, int mod, int chip) const
155183
{
156-
return getIOTOFFirstChipIndex(lay) + (sta - 1) * mNumberOfChipsPerStaveIOTOF[lay] + (mod - 1) * mNumberOfChipsPerModuleIOTOF[lay] + (chip - 1);
184+
return getIOTOFFirstChipIndex(lay) + (sta - 1) * mNumberOfChipsPerStaveIOTOF[lay] + (substa - 1) * mNumberOfChipsPerSubStaveIOTOF[lay] + (mod - 1) * mNumberOfChipsPerModuleIOTOF[lay] + (chip - 1);
157185
}
158186

159-
bool GeometryTGeo::getIOTOFChipId(int index, int& lay, int& sta, int& mod, int& chip) const
187+
bool GeometryTGeo::getIOTOFChipId(int index, int& lay, int& sta, int& substa, int& mod, int& chip) const
160188
{
161189
lay = getIOTOFLayer(index);
162190
index -= getIOTOFFirstChipIndex(lay);
163191
sta = mNumberOfStavesIOTOF[lay] > 0 ? index / mNumberOfChipsPerStaveIOTOF[lay] : -1;
164192
index %= mNumberOfChipsPerStaveIOTOF[lay];
193+
substa = mNumberOfSubStavesIOTOF[lay] > 0 ? index / mNumberOfChipsPerSubStaveIOTOF[lay] : -1;
194+
index %= mNumberOfChipsPerSubStaveIOTOF[lay];
165195
mod = mNumberOfModulesIOTOF[lay] > 0 ? index / mNumberOfChipsPerModuleIOTOF[lay] : -1;
166196
chip = index % mNumberOfChipsPerModuleIOTOF[lay];
167197
return true;
168198
}
169199

170-
const ChipSpecifics& GeometryTGeo::getChipSpecifics(int iotofLayer)
171-
{
172-
if (iotofLayer == 0) {
173-
return ITOFChipSpecificParam::Instance();
174-
}
175-
return OTOFChipSpecificParam::Instance();
176-
}
177-
178200
o2::math_utils::Point3D<float> GeometryTGeo::detectorToLocal(int row, int col, int chipId) const
179201
{
180-
const auto& specs = getChipSpecifics(getIOTOFLayer(chipId));
202+
const auto& specs = ChipSpecificsParam::Instance();
181203
o2::math_utils::Point3D<float> loc;
182204
loc.SetCoordinates(0.5f * ((specs.ActiveMatrixSizeRows() - specs.PassiveEdgeTop + specs.PassiveEdgeReadOut) - specs.PitchRow) - row * specs.PitchRow,
183205
0.f,
@@ -187,11 +209,12 @@ o2::math_utils::Point3D<float> GeometryTGeo::detectorToLocal(int row, int col, i
187209

188210
TString GeometryTGeo::getMatrixPath(int index) const
189211
{
190-
int lay, sta, mod, chip;
191-
getIOTOFChipId(index, lay, sta, mod, chip);
212+
int lay, sta, substa, mod, chip;
213+
getIOTOFChipId(index, lay, sta, substa, mod, chip);
192214

193215
TString path = Form("/cave_1/barrel_1/%s_2/", GeometryTGeo::getIOTOFVolPattern());
194216
sta += 1;
217+
substa += 1;
195218
mod += 1;
196219
chip += 1;
197220

@@ -211,6 +234,9 @@ TString GeometryTGeo::getMatrixPath(int index) const
211234
if (mNumberOfStavesIOTOF[lay] > 0) {
212235
path += Form("%s_%d/", GeometryTGeo::getOTOFStavePattern(), sta);
213236
}
237+
if (mNumberOfSubStavesIOTOF[lay] > 0) {
238+
path += Form("%s_%d/", GeometryTGeo::getOTOFSubStavePattern(), substa);
239+
}
214240
if (mNumberOfModulesIOTOF[lay] > 0) {
215241
path += Form("%s_%d/", GeometryTGeo::getOTOFModulePattern(), mod);
216242
}
@@ -266,6 +292,7 @@ void GeometryTGeo::Build(int loadTrans)
266292
// Inner/outer TOF
267293
for (int j{0}; j < 2; ++j) {
268294
mNumberOfStavesIOTOF[j] = extractNumberOfStavesIOTOF(j);
295+
mNumberOfSubStavesIOTOF[j] = extractNumberOfSubStavesIOTOF(j);
269296
mNumberOfModulesIOTOF[j] = extractNumberOfModulesIOTOF(j);
270297
mNumberOfChipsPerModuleIOTOF[j] = extractNumberOfChipsPerModuleIOTOF(j);
271298
}
@@ -278,14 +305,15 @@ void GeometryTGeo::Build(int loadTrans)
278305

279306
int numberOfChips{0};
280307
for (int j{0}; j < 2; ++j) {
281-
mNumberOfChipsPerStaveIOTOF[j] = mNumberOfModulesIOTOF[j] * mNumberOfChipsPerModuleIOTOF[j];
308+
mNumberOfChipsPerStaveIOTOF[j] = mNumberOfSubStavesIOTOF[j] * mNumberOfModulesIOTOF[j] * mNumberOfChipsPerModuleIOTOF[j];
309+
mNumberOfChipsPerSubStaveIOTOF[j] = mNumberOfModulesIOTOF[j] * mNumberOfChipsPerModuleIOTOF[j];
282310
mNumberOfChipsIOTOF[j] = mNumberOfStavesIOTOF[j] * mNumberOfChipsPerStaveIOTOF[j];
283311
numberOfChips += mNumberOfChipsIOTOF[j];
284312
mLastChipIndex[j] = numberOfChips - 1;
285313
}
286314

287315
LOG(info) << "TF3 geometry: numberOfChipsITOF = " << mNumberOfChipsIOTOF[0] << ", numberOfChipsOTOF = "
288-
<< mNumberOfChipsIOTOF[1] << ", numberOfChips = " << numberOfChips << ", mNumberOfChipesPerStaveITOF"
316+
<< mNumberOfChipsIOTOF[1] << ", numberOfChips = " << numberOfChips << ", mNumberOfChipsPerStaveITOF"
289317
<< mNumberOfChipsPerStaveIOTOF[0];
290318

291319
setSize(numberOfChips);

Detectors/Upgrades/ALICE3/IOTOF/base/src/IOTOFBaseLinkDef.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@
1919
#pragma link C++ class o2::iotof::IOTOFBaseParam + ;
2020
#pragma link C++ class o2::conf::ConfigurableParamHelper < o2::iotof::IOTOFBaseParam> + ;
2121

22+
#pragma link C++ class o2::iotof::ChipSpecifics + ;
23+
#pragma link C++ class o2::iotof::ChipSpecificsParam + ;
24+
#pragma link C++ class o2::conf::ConfigurableParamPromoter < o2::iotof::ChipSpecificsParam, o2::iotof::ChipSpecifics> + ;
25+
2226
#endif

Detectors/Upgrades/ALICE3/IOTOF/base/src/IOTOFBaseParam.cxx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@
1212
#include "IOTOFBase/IOTOFBaseParam.h"
1313

1414
O2ParamImpl(o2::iotof::IOTOFBaseParam);
15-
O2ParamImpl(o2::iotof::ITOFChipSpecificParam);
16-
O2ParamImpl(o2::iotof::OTOFChipSpecificParam);
15+
O2ParamImpl(o2::iotof::ChipSpecificsParam);

Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Segmentation.h

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,10 @@ class Segmentation
3535
static std::unique_ptr<o2::iotof::Segmentation> sInstance;
3636

3737
public:
38-
ChipSpecifics mITofSpecsConfig;
39-
ChipSpecifics mOTofSpecsConfig;
4038
static Segmentation* Instance();
4139

4240
~Segmentation() = default;
4341

44-
void configChip(const int nCols, const int nRows, const float pitchCol, const float pitchRow, const float passiveEdgeReadOut, const float passiveEdgeTop,
45-
const float passiveEdgeSide, const float PixelPassiveEdgeX, const float PixelPassiveEdgeZ, const float sensorLayerThicknessEff, const float sensorLayerThickness, const int subDetectorID);
46-
void configChip(const ChipSpecifics& specsConfig, const int subDetectorID);
47-
4842
/// Transformation from Geant detector centered local coordinates (cm) to
4943
/// Pixel cell numbers iRow and iCol.
5044
/// Returns kTRUE if point x,z is inside sensitive volume, kFALSE otherwise.
@@ -79,7 +73,7 @@ class Segmentation
7973
row = col = -1;
8074
return;
8175
}
82-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
76+
const auto& specsConfig = ChipSpecificsParam::Instance();
8377
xRow = getFirstRowCoordinate(subDetectorID) - row * specsConfig.PitchRow;
8478
zCol = col * specsConfig.PitchCol + getFirstColCoordinate(subDetectorID);
8579
}
@@ -90,7 +84,7 @@ class Segmentation
9084
row = col = -1;
9185
return;
9286
}
93-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
87+
const auto& specsConfig = ChipSpecificsParam::Instance();
9488
loc.SetCoordinates(getFirstRowCoordinate(subDetectorID) - row * specsConfig.PitchRow, T(0.), col * specsConfig.PitchCol + getFirstColCoordinate(subDetectorID));
9589
}
9690
template <typename T = float, typename L = float>
@@ -100,7 +94,7 @@ class Segmentation
10094
row = col = -1;
10195
return;
10296
}
103-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
97+
const auto& specsConfig = ChipSpecificsParam::Instance();
10498
loc[0] = getFirstRowCoordinate(subDetectorID) - row * specsConfig.PitchRow;
10599
loc[1] = T(0);
106100
loc[2] = col * specsConfig.PitchCol + getFirstColCoordinate(subDetectorID);
@@ -115,7 +109,7 @@ class Segmentation
115109
row = col = -1;
116110
return false;
117111
}
118-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
112+
const auto& specsConfig = ChipSpecificsParam::Instance();
119113
if (row < 0 || row >= specsConfig.NRows || col < 0 || col >= specsConfig.NCols) {
120114
return false;
121115
}
@@ -130,7 +124,7 @@ class Segmentation
130124
row = col = -1;
131125
return false;
132126
}
133-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
127+
const auto& specsConfig = ChipSpecificsParam::Instance();
134128
if (row < 0 || row >= specsConfig.NRows || col < 0 || col >= specsConfig.NCols) {
135129
return false;
136130
}
@@ -144,7 +138,7 @@ class Segmentation
144138
row = col = -1;
145139
return false;
146140
}
147-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
141+
const auto& specsConfig = ChipSpecificsParam::Instance();
148142
if (row < 0 || row >= specsConfig.NRows || col < 0 || col >= specsConfig.NCols) {
149143
return false;
150144
}
@@ -154,17 +148,15 @@ class Segmentation
154148

155149
float getFirstRowCoordinate(const int subDetectorID)
156150
{
157-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
151+
const auto& specsConfig = ChipSpecificsParam::Instance();
158152
return 0.5 * ((specsConfig.ActiveMatrixSizeRows() - specsConfig.PassiveEdgeTop + specsConfig.PassiveEdgeReadOut) - specsConfig.PitchRow);
159153
}
160154
float getFirstColCoordinate(const int subDetectorID)
161155
{
162-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
156+
const auto& specsConfig = ChipSpecificsParam::Instance();
163157
return 0.5 * (specsConfig.PitchCol - specsConfig.ActiveMatrixSizeCols());
164158
}
165159

166-
void print();
167-
168160
ClassDefNV(Segmentation, 1); // Segmentation class upgrade pixels
169161
};
170162

@@ -176,7 +168,7 @@ inline void Segmentation::localToDetectorUnchecked(float xRow, float zCol, int&
176168
iRow = iCol = -1;
177169
return;
178170
}
179-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
171+
const auto& specsConfig = ChipSpecificsParam::Instance();
180172
xRow = 0.5 * (specsConfig.ActiveMatrixSizeRows() - specsConfig.PassiveEdgeTop + specsConfig.PassiveEdgeReadOut) - xRow; // coordinate wrt top edge of Active matrix
181173
zCol += 0.5 * specsConfig.ActiveMatrixSizeCols(); // coordinate wrt left edge of Active matrix
182174
iRow = int(xRow / specsConfig.PitchRow);
@@ -202,7 +194,7 @@ inline bool Segmentation::localToDetector(float xRow, float zCol, int& iRow, int
202194
iRow = iCol = -1;
203195
return false;
204196
}
205-
const ChipSpecifics& specsConfig = (subDetectorID == 0) ? mITofSpecsConfig : mOTofSpecsConfig;
197+
const auto& specsConfig = ChipSpecificsParam::Instance();
206198
xRow = 0.5 * (specsConfig.ActiveMatrixSizeRows() - specsConfig.PassiveEdgeTop + specsConfig.PassiveEdgeReadOut) - xRow; // coordinate wrt top edge of Active matrix
207199
zCol += 0.5 * specsConfig.ActiveMatrixSizeCols(); // coordinate wrt left edge of Active matrix
208200
if (xRow < 0 || xRow >= specsConfig.ActiveMatrixSizeRows() || zCol < 0 || zCol >= specsConfig.ActiveMatrixSizeCols()) {

0 commit comments

Comments
 (0)