Skip to content

Commit 8869071

Browse files
authored
Add GPU QA histograms for missing inner clusters and track clones (#15909)
* Add GPU QA histograms for missing inner clusters and track clones * Changing to mRecTracks[iCol][i] * Adjust for comments
1 parent 41fd1ea commit 8869071

2 files changed

Lines changed: 45 additions & 1 deletion

File tree

‎GPU/GPUTracking/qa/GPUQA.cxx‎

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,10 @@ int32_t GPUQA::InitQACreateHistograms()
525525
createHist(mClusters[i], name, name, AXIS_BINS[4], binsPt.get());
526526
}
527527

528+
const int32_t maxPads = GPUTPCGeometry::NPads(GPUTPCGeometry::NROWS - 1);
529+
createHist(mLowestRowDifferenceVsPad, "lowest_row_difference_vs_pad", "Lowest cluster row difference;Pad of lowest reconstructed cluster;Lowest reconstructed row - lowest MC row", maxPads, -0.5, maxPads - 0.5, 2 * GPUTPCGeometry::NROWS - 1, -GPUTPCGeometry::NROWS + 0.5, GPUTPCGeometry::NROWS - 0.5);
530+
createHist(mLowestRowTrackMultiplicity, "lowest_row_track_multiplicity", "Track multiplicity for missing inner clusters;Reconstructed tracks with the same MC label;Selected reconstructed tracks", 100, -0.5, 99.5);
531+
528532
createHist(mPadRow[0], "padrow0", "padrow0", GPUTPCGeometry::NROWS - PADROW_CHECK_MINCLS, 0, GPUTPCGeometry::NROWS - 1 - PADROW_CHECK_MINCLS, GPUTPCGeometry::NROWS - PADROW_CHECK_MINCLS, 0, GPUTPCGeometry::NROWS - 1 - PADROW_CHECK_MINCLS);
529533
createHist(mPadRow[1], "padrow1", "padrow1", 100.f, -0.2f, 0.2f, GPUTPCGeometry::NROWS - PADROW_CHECK_MINCLS, 0, GPUTPCGeometry::NROWS - 1 - PADROW_CHECK_MINCLS);
530534
createHist(mPadRow[2], "padrow2", "padrow2", 100.f, -0.2f, 0.2f, GPUTPCGeometry::NROWS - PADROW_CHECK_MINCLS, 0, GPUTPCGeometry::NROWS - 1 - PADROW_CHECK_MINCLS);
@@ -1109,7 +1113,11 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx
11091113
for (uint32_t iCl = 0; iCl < clNative->nClusters[iSector][iRow]; iCl++) {
11101114
int32_t i = clNative->clusterOffset[iSector][iRow] + iCl;
11111115
for (int32_t j = 0; j < GetMCLabelNID(i); j++) {
1112-
uint32_t trackId = GetMCTrackObj(mTrackMCLabelsReverse, GetMCLabel(i, j));
1116+
const mcLabelI_t label = GetMCLabel(i, j);
1117+
if (!label.isValid() || label.isNoise()) {
1118+
continue;
1119+
}
1120+
uint32_t trackId = GetMCTrackObj(mTrackMCLabelsReverse, label);
11131121
if (trackId < lowestPadRow.size() && lowestPadRow[trackId] > iRow) {
11141122
lowestPadRow[trackId] = iRow;
11151123
}
@@ -1119,6 +1127,28 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx
11191127
}
11201128
for (uint32_t i = 0; i < mTracking->mIOPtrs.nMergedTracks; i++) {
11211129
const auto& trk = mTracking->mIOPtrs.mergedTracks[i];
1130+
const auto& label = mTrackMCLabels[i];
1131+
if (trk.OK() && trk.NClustersFitted() > 50 && CAMath::Abs(trk.GetParam().GetQPt()) < 1.f && label.isValid() && !label.isNoise() &&
1132+
(mMCTrackMin == -1 || label.getTrackID() >= mMCTrackMin) && (mMCTrackMax == -1 || label.getTrackID() < mMCTrackMax)) {
1133+
const uint32_t trackId = GetMCTrackObj(mTrackMCLabelsReverse, label);
1134+
if (trackId < lowestPadRow.size() && lowestPadRow[trackId] < 10) {
1135+
const GPUTPCGMMergedTrackHit* lowestCl = nullptr;
1136+
for (uint32_t j = 0; j < trk.NClusters(); j++) {
1137+
const auto& cl = mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef() + j];
1138+
if (!(cl.state & GPUTPCGMMergedTrackHit::flagReject) && (!lowestCl || cl.row < lowestCl->row)) {
1139+
lowestCl = &cl;
1140+
}
1141+
}
1142+
if (lowestCl) {
1143+
const float pad = clNative->clustersLinear[lowestCl->num].getPad();
1144+
const int32_t difference = (int32_t)lowestCl->row - lowestPadRow[trackId];
1145+
mLowestRowDifferenceVsPad->Fill(pad, difference);
1146+
if (CAMath::Abs(difference) > 5 && pad > 5.f && pad < GPUTPCGeometry::NPads(lowestCl->row) - 5.f) {
1147+
mLowestRowTrackMultiplicity->Fill(GetMCTrackObj(mRecTracks, label));
1148+
}
1149+
}
1150+
}
1151+
}
11221152
if (trk.OK() && lowestPadRow[i] != 255 && trk.NClustersFitted() >= PADROW_CHECK_MINCLS && CAMath::Abs(trk.GetParam().GetQPt()) < 1.0) {
11231153
const auto& lowestCl = mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef()].row < mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef() + trk.NClusters() - 1].row ? mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef()] : mTracking->mIOPtrs.mergedTrackHits[trk.FirstClusterRef() + trk.NClusters() - 1];
11241154
const int32_t lowestRow = lowestCl.row;
@@ -2912,6 +2942,17 @@ int32_t GPUQA::DrawQAHistograms(TObjArray* qcout)
29122942
}
29132943
}
29142944

2945+
if (mQATasks & taskClusterAttach) {
2946+
for (TH1* h : {static_cast<TH1*>(mLowestRowDifferenceVsPad), static_cast<TH1*>(mLowestRowTrackMultiplicity)}) {
2947+
if (tout && !mConfig.inputHistogramsOnly) {
2948+
h->Write();
2949+
}
2950+
if (qcout) {
2951+
qcout->Add(h);
2952+
}
2953+
}
2954+
}
2955+
29152956
// Process cluster count statistics
29162957
if ((mQATasks & taskClusterCounts) && !mHaveExternalHists && !mConfig.clusterRejectionHistograms && !mConfig.inputHistogramsOnly) {
29172958
DoClusterCounts(attachClusterCounts);

‎GPU/GPUTracking/qa/GPUQA.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@ class GPUQA
318318
TPad* mPClRej[3];
319319
TPad* mPClRejP;
320320

321+
TH2F* mLowestRowDifferenceVsPad;
322+
TH1F* mLowestRowTrackMultiplicity;
323+
321324
TH2F* mPadRow[4];
322325
TCanvas* mCPadRow[4];
323326
TPad* mPPadRow[4];

0 commit comments

Comments
 (0)