Skip to content

Commit dfa9214

Browse files
committed
Update clusters covariance with the systematics only once
1 parent 1e5aa6b commit dfa9214

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackerTraits.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class TrackerTraits
9797

9898
private:
9999
void traverseCellsTree(const int, const int);
100-
track::TrackParCov buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const Cluster& cluster3, const TrackingFrameInfo& tf3, float misalignmentY, float misalignmentZ);
100+
track::TrackParCov buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const Cluster& cluster3, const TrackingFrameInfo& tf3);
101101
bool fitTrack(TrackITSExt& track, int start, int end, int step, const float chi2clcut = o2::constants::math::VeryBig, const float chi2ndfcut = o2::constants::math::VeryBig, const float maxQoverPt = o2::constants::math::VeryBig);
102102

103103
int mNThreads = 1;

Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,15 @@ void TimeFrame::initialise(const int iteration, const TrackingParameters& trkPar
256256

257257
std::vector<ClusterHelper> cHelper;
258258
std::vector<int> clsPerBin(trkParam.PhiBins * trkParam.ZBins, 0);
259+
260+
for (int iLayer{0}; iLayer < trkParam.NLayers; ++iLayer) {
261+
for (auto &tfInfo : mTrackingFrameInfo[iLayer]) {
262+
/// Account for alignment systematics in the cluster covariance matrix
263+
tfInfo.covarianceTrackingFrame[0] += trkParam.SystErrorY2[iLayer];
264+
tfInfo.covarianceTrackingFrame[2] += trkParam.SystErrorZ2[iLayer];
265+
}
266+
}
267+
259268
for (int rof{0}; rof < mNrof; ++rof) {
260269
if ((int)mMultiplicityCutMask.size() == mNrof && !mMultiplicityCutMask[rof]) {
261270
continue;
@@ -269,6 +278,7 @@ void TimeFrame::initialise(const int iteration, const TrackingParameters& trkPar
269278
cHelper.resize(clustersNum);
270279

271280
for (int iCluster{0}; iCluster < clustersNum; ++iCluster) {
281+
272282
const Cluster& c = unsortedClusters[iCluster];
273283
ClusterHelper& h = cHelper[iCluster];
274284
float x = c.xCoordinate - mBeamPos[0];

Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ void TrackerTraits::findTracks()
522522
const auto& cluster3_glo = mTimeFrame->getUnsortedClusters()[lastCellLevel + 2].at(clusters[lastCellLevel + 2]);
523523
const auto& cluster3_tf = mTimeFrame->getTrackingFrameInfoOnLayer(lastCellLevel + 2).at(clusters[lastCellLevel + 2]);
524524

525-
TrackITSExt temporaryTrack{buildTrackSeed(cluster1_glo, cluster2_glo, cluster3_glo, cluster3_tf, mTrkParams[0].SystErrorY2[lastCellLevel + 2], mTrkParams[0].SystErrorZ2[lastCellLevel + 2])};
525+
TrackITSExt temporaryTrack{buildTrackSeed(cluster1_glo, cluster2_glo, cluster3_glo, cluster3_tf)};
526526
for (size_t iC = 0; iC < clusters.size(); ++iC) {
527527
temporaryTrack.setExternalClusterIndex(iC, clusters[iC], clusters[iC] != constants::its::UnusedIndex);
528528
}
@@ -680,7 +680,7 @@ void TrackerTraits::findShortPrimaries()
680680
auto pvsXAlpha{mTimeFrame->getPrimaryVerticesXAlpha(rof)};
681681

682682
const auto& cluster3_tf = mTimeFrame->getTrackingFrameInfoOnLayer(2).at(cluster3_glo.clusterId);
683-
TrackITSExt temporaryTrack{buildTrackSeed(cluster1_glo, cluster2_glo, cluster3_glo, cluster3_tf, mTrkParams[0].SystErrorY2[2], mTrkParams[0].SystErrorZ2[2])};
683+
TrackITSExt temporaryTrack{buildTrackSeed(cluster1_glo, cluster2_glo, cluster3_glo, cluster3_tf)};
684684
temporaryTrack.setExternalClusterIndex(0, cluster1_glo.clusterId, true);
685685
temporaryTrack.setExternalClusterIndex(1, cluster2_glo.clusterId, true);
686686
temporaryTrack.setExternalClusterIndex(2, cluster3_glo.clusterId, true);
@@ -761,15 +761,12 @@ bool TrackerTraits::fitTrack(TrackITSExt& track, int start, int end, int step, c
761761
}
762762
}
763763

764-
GPUArray<float, 3> cov{trackingHit.covarianceTrackingFrame};
765-
cov[0] += mTrkParams[0].SystErrorY2[iLayer];
766-
cov[2] += mTrkParams[0].SystErrorZ2[iLayer];
767-
auto predChi2{track.getPredictedChi2(trackingHit.positionTrackingFrame, cov)};
764+
auto predChi2{track.getPredictedChi2(trackingHit.positionTrackingFrame, trackingHit.covarianceTrackingFrame)};
768765
if ((nCl >= 3 && predChi2 > chi2clcut) || predChi2 < 0.f) {
769766
return false;
770767
}
771768
track.setChi2(track.getChi2() + predChi2);
772-
if (!track.o2::track::TrackParCov::update(trackingHit.positionTrackingFrame, cov)) {
769+
if (!track.o2::track::TrackParCov::update(trackingHit.positionTrackingFrame, trackingHit.covarianceTrackingFrame)) {
773770
return false;
774771
}
775772
nCl++;
@@ -872,15 +869,12 @@ bool TrackerTraits::trackFollowing(TrackITSExt* track, int rof, bool outward, co
872869
continue;
873870
}
874871

875-
GPUArray<float, 3> cov{trackingHit.covarianceTrackingFrame};
876-
cov[0] += mTrkParams[iteration].SystErrorY2[iLayer];
877-
cov[2] += mTrkParams[iteration].SystErrorZ2[iLayer];
878-
auto predChi2{tbuParams.getPredictedChi2(trackingHit.positionTrackingFrame, cov)};
872+
auto predChi2{tbuParams.getPredictedChi2(trackingHit.positionTrackingFrame, trackingHit.covarianceTrackingFrame)};
879873
if (predChi2 >= track->getChi2() * mTrkParams[iteration].NSigmaCut) {
880874
continue;
881875
}
882876

883-
if (!tbuParams.o2::track::TrackParCov::update(trackingHit.positionTrackingFrame, cov)) {
877+
if (!tbuParams.o2::track::TrackParCov::update(trackingHit.positionTrackingFrame, trackingHit.covarianceTrackingFrame)) {
884878
continue;
885879
}
886880
tbupdated.setChi2(tbupdated.getChi2() + predChi2); /// This is wrong for outward propagation as the chi2 refers to inward parameters
@@ -910,7 +904,7 @@ bool TrackerTraits::trackFollowing(TrackITSExt* track, int rof, bool outward, co
910904

911905
/// Clusters are given from inside outward (cluster3 is the outermost). The outermost cluster is given in the tracking
912906
/// frame coordinates whereas the others are referred to the global frame.
913-
track::TrackParCov TrackerTraits::buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const Cluster& cluster3, const TrackingFrameInfo& tf3, float misalignmentY, float misalignmentZ)
907+
track::TrackParCov TrackerTraits::buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const Cluster& cluster3, const TrackingFrameInfo& tf3)
914908
{
915909
const float ca = std::cos(tf3.alphaTrackingFrame), sa = std::sin(tf3.alphaTrackingFrame);
916910
const float x1 = cluster1.xCoordinate * ca + cluster1.yCoordinate * sa;
@@ -934,8 +928,8 @@ track::TrackParCov TrackerTraits::buildTrackSeed(const Cluster& cluster1, const
934928
{y3, z3, snp, 0.5f * (tgl12 + tgl23),
935929
zeroField ? 1.f / o2::track::kMostProbablePt
936930
: crv / (getBz() * o2::constants::math::B2C)},
937-
{tf3.covarianceTrackingFrame[0] + misalignmentY,
938-
tf3.covarianceTrackingFrame[1], tf3.covarianceTrackingFrame[2] + misalignmentZ,
931+
{tf3.covarianceTrackingFrame[0],
932+
tf3.covarianceTrackingFrame[1], tf3.covarianceTrackingFrame[2],
939933
0.f, 0.f, track::kCSnp2max,
940934
0.f, 0.f, 0.f, track::kCTgl2max,
941935
0.f, 0.f, 0.f, 0.f, track::kC1Pt2max});

0 commit comments

Comments
 (0)