Skip to content

Commit 4fe4a21

Browse files
committed
Fix Y position of ITS3 clusters and hits
1 parent 9cef6de commit 4fe4a21

File tree

4 files changed

+58
-27
lines changed

4 files changed

+58
-27
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ namespace apts
147147
{
148148
constexpr double pitchX{15.0 * mu};
149149
constexpr double pitchZ{15.0 * mu};
150-
constexpr double responseUpperLimit{10 * mu};
151-
constexpr double responseYShift{responseUpperLimit - silicon::thicknessOut};
150+
constexpr double responseYShift{15.5 * mu};
152151
} // namespace apts
153152
namespace moss
154153
{

Detectors/Upgrades/ITS3/macros/test/CheckClustersITS3.C

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -225,28 +225,33 @@ void CheckClustersITS3(const std::string& clusfile = "o2clus_its.root",
225225
locH = gman->getMatrixL2G(chipID) ^ (hit.GetPos()); // inverse conversion from global to local
226226
locHsta = gman->getMatrixL2G(chipID) ^ (hit.GetPosStart());
227227

228-
float x0 = locHsta.X(), dltx = locH.X() - x0;
229-
float y0 = locHsta.Y(), dlty = locH.Y() - y0;
230-
float z0 = locHsta.Z(), dltz = locH.Z() - z0;
231-
auto r = (0.5 * (Segmentation::SensorLayerThickness - Segmentation::SensorLayerThicknessEff) - y0) / dlty;
232-
233-
if (!isIB) {
234-
locH.SetXYZ(x0 + r * dltx, y0 + r * dlty, z0 + r * dltz);
228+
float x0, y0, z0, dltx, dlty, dltz, r;
229+
if (isIB) {
230+
float xFlat{0.}, yFlat{0.};
231+
mMosaixSegmentations[layer].curvedToFlat(locC.X(), locC.Y(), xFlat, yFlat);
232+
locC.SetCoordinates(xFlat, yFlat, locC.Z());
233+
mMosaixSegmentations[layer].curvedToFlat(locH.X(), locH.Y(), xFlat, yFlat);
234+
locH.SetCoordinates(xFlat, yFlat, locH.Z());
235+
mMosaixSegmentations[layer].curvedToFlat(locHsta.X(), locHsta.Y(), xFlat, yFlat);
236+
locHsta.SetCoordinates(xFlat, yFlat, locHsta.Z());
237+
x0 = locHsta.X();
238+
dltx = locH.X() - x0;
239+
y0 = locHsta.Y();
240+
dlty = locH.Y() - y0;
241+
z0 = locHsta.Z();
242+
dltz = locH.Z() - z0;
243+
r = (its3::constants::pixelarray::pixels::apts::responseYShift - y0) / dlty;
235244
} else {
236-
// compare in local flat coordinates
237-
float xFlatEnd{0.}, yFlatEnd{0.};
238-
mMosaixSegmentations[layer].curvedToFlat(locH.X(), locH.Y(), xFlatEnd, yFlatEnd);
239-
locH.SetXYZ(xFlatEnd, yFlatEnd, locH.Z());
240-
float xFlatSta{0.}, yFlatSta{0.};
241-
mMosaixSegmentations[layer].curvedToFlat(locHsta.X(), locHsta.Y(), xFlatSta, yFlatSta);
242-
locHsta.SetXYZ(xFlatSta, yFlatSta, locHsta.Z());
243-
244-
// not really precise, but okish
245-
locH.SetXYZ(0.5f * (locH.X() + locHsta.X()), 0.5f * (locH.Y() + locHsta.Y()), 0.5f * (locH.Z() + locHsta.Z()));
246-
247-
mMosaixSegmentations[layer].curvedToFlat(locC.X(), locC.Y(), xFlatSta, yFlatSta);
248-
locC.SetXYZ(xFlatSta, yFlatSta, locC.Z());
245+
x0 = locHsta.X();
246+
dltx = locH.X() - x0;
247+
y0 = locHsta.Y();
248+
dlty = locH.Y() - y0;
249+
z0 = locHsta.Z();
250+
dltz = locH.Z() - z0;
251+
r = (0.5 * (Segmentation::SensorLayerThickness - Segmentation::SensorLayerThicknessEff) - y0) / dlty;
249252
}
253+
locH.SetXYZ(x0 + r * dltx, y0 + r * dlty, z0 + r * dltz);
254+
250255
float theta = std::acos(gloC.Z() / gloC.Rho());
251256
float eta = -std::log(std::tan(theta / 2));
252257

Detectors/Upgrades/ITS3/macros/test/CreateDictionariesITS3.C

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#define ENABLE_UPGRADES
3434
#include "DetectorsCommonDataFormats/DetID.h"
3535
#include "ITSBase/GeometryTGeo.h"
36+
#include "ITS3Base/SpecsV2.h"
3637
#include "ITSMFTBase/SegmentationAlpide.h"
3738
#include "ITS3Base/SegmentationMosaix.h"
3839
#include "DataFormatsITSMFT/CompCluster.h"
@@ -94,7 +95,7 @@ void CreateDictionariesITS3(bool saveDeltas = true,
9495
TNtuple* nt = nullptr;
9596
if (saveDeltas) {
9697
fout = TFile::Open("CreateDictionaries.root", "recreate");
97-
nt = new TNtuple("nt", "hashes ntuple", "hash:layer:chipID:xhf:zhf:xcf:zcf:dx:dz:outlimDx:outlimDz");
98+
nt = new TNtuple("nt", "hashes ntuple", "hash:layer:chipID:xhf:zhf:xcf:zcf:dx:dz:outlimDx:outlimDz:clusterSize:eta");
9899
}
99100

100101
const o2::steer::DigitizationContext* digContext = nullptr;
@@ -270,16 +271,34 @@ void CreateDictionariesITS3(bool saveDeltas = true,
270271
auto xyzLocE = gman->getMatrixL2G(chipID) ^ (hit.GetPos()); // inverse conversion from global to local
271272
auto xyzLocS = gman->getMatrixL2G(chipID) ^ (hit.GetPosStart());
272273
o2::math_utils::Vector3D<float> xyzLocM;
273-
xyzLocM.SetCoordinates(0.5f * (xyzLocE.X() + xyzLocS.X()), 0.5f * (xyzLocE.Y() + xyzLocS.Y()), 0.5f * (xyzLocE.Z() + xyzLocS.Z()));
274274
auto locC = o2::its3::TopologyDictionary::getClusterCoordinates(cluster, pattern, false);
275275
int layer = gman->getLayer(chipID);
276+
float x0, y0, z0, dltx, dlty, dltz, r;
276277
if (ib) {
277278
float xFlat{0.}, yFlat{0.};
278-
mMosaixSegmentations[layer].curvedToFlat(xyzLocM.X(), xyzLocM.Y(), xFlat, yFlat);
279-
xyzLocM.SetCoordinates(xFlat, yFlat, xyzLocM.Z());
280279
mMosaixSegmentations[layer].curvedToFlat(locC.X(), locC.Y(), xFlat, yFlat);
281280
locC.SetCoordinates(xFlat, yFlat, locC.Z());
281+
mMosaixSegmentations[layer].curvedToFlat(xyzLocE.X(), xyzLocE.Y(), xFlat, yFlat);
282+
xyzLocE.SetCoordinates(xFlat, yFlat, xyzLocE.Z());
283+
mMosaixSegmentations[layer].curvedToFlat(xyzLocS.X(), xyzLocS.Y(), xFlat, yFlat);
284+
xyzLocS.SetCoordinates(xFlat, yFlat, xyzLocS.Z());
285+
x0 = xyzLocS.X();
286+
dltx = xyzLocE.X() - x0;
287+
y0 = xyzLocS.Y();
288+
dlty = xyzLocE.Y() - y0;
289+
z0 = xyzLocS.Z();
290+
dltz = xyzLocE.Z() - z0;
291+
r = (its3::constants::pixelarray::pixels::apts::responseYShift - y0) / dlty;
292+
} else {
293+
x0 = xyzLocS.X();
294+
dltx = xyzLocE.X() - x0;
295+
y0 = xyzLocS.Y();
296+
dlty = xyzLocE.Y() - y0;
297+
z0 = xyzLocS.Z();
298+
dltz = xyzLocE.Z() - z0;
299+
r = (0.5 * (Segmentation::SensorLayerThickness - Segmentation::SensorLayerThicknessEff) - y0) / dlty;
282300
}
301+
xyzLocM.SetXYZ(x0 + r * dltx, y0 + r * dlty, z0 + r * dltz);
283302

284303
auto pitchX = (ib) ? o2::its3::SegmentationMosaix::PitchRow : o2::itsmft::SegmentationAlpide::PitchRow;
285304
auto pitchZ = (ib) ? o2::its3::SegmentationMosaix::PitchCol : o2::itsmft::SegmentationAlpide::PitchCol;
@@ -302,7 +321,13 @@ void CreateDictionariesITS3(bool saveDeltas = true,
302321
}
303322
}
304323
if (saveDeltas) {
305-
nt->Fill(topology.getHash(), layer, chipID, xyzLocM.X(), xyzLocM.Z(), locC.X(), locC.Z(), dX, dZ, outLimitDx, outLimitDz);
324+
auto vectDiff = xyzLocE - xyzLocS;
325+
auto theta = std::acos(vectDiff.Z() / std::hypot(vectDiff.X(), vectDiff.Y(), vectDiff.Z()));
326+
auto eta = -std::log(std::tan(theta/2));
327+
if (ib) {
328+
LOGP(info, "Yhit flat start: {}, end: {}, middle: {}", xyzLocS.Y(), xyzLocE.Y(), xyzLocM.Y());
329+
}
330+
nt->Fill(topology.getHash(), layer, chipID, xyzLocM.X(), xyzLocM.Z(), locC.X(), locC.Z(), dX, dZ, outLimitDx, outLimitDz, pattern.getNPixels(), eta);
306331
}
307332
}
308333
} else {

Detectors/Upgrades/ITS3/reconstruction/src/TopologyDictionary.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "ITS3Reconstruction/TopologyDictionary.h"
1515
#include "ITS3Base/SegmentationMosaix.h"
16+
#include "ITS3Base/SpecsV2.h"
1617
#include "ITSMFTBase/SegmentationAlpide.h"
1718
#include "CommonUtils/StringUtils.h"
1819
#include <TFile.h>
@@ -202,6 +203,7 @@ math_utils::Point3D<T> TopologyDictionary::getClusterCoordinates(const itsmft::C
202203
auto layer = its3::constants::detID::getDetID2Layer(cl.getSensorID());
203204
mIBSegmentations[layer].detectorToLocalUnchecked(cl.getRow(), cl.getCol(), locCl);
204205
locCl.SetX(locCl.X() + this->getXCOG(cl.getPatternID(), true) * its3::SegmentationMosaix::PitchRow);
206+
locCl.SetY(its3::constants::pixelarray::pixels::apts::responseYShift);
205207
locCl.SetZ(locCl.Z() + this->getZCOG(cl.getPatternID(), true) * its3::SegmentationMosaix::PitchCol);
206208
float xCurved{0.f}, yCurved{0.f};
207209
mIBSegmentations[layer].flatToCurved(locCl.X(), locCl.Y(), xCurved, yCurved);

0 commit comments

Comments
 (0)