From 64503318cc5ab2be691da07554431ae8182d5f8f Mon Sep 17 00:00:00 2001 From: Maximiliano Puccio Date: Wed, 11 Dec 2024 16:52:16 +0100 Subject: [PATCH] ITS tracking: Introduce configurable minimum pt per track length The changes introduce a configurable minimum PT value per track length in the ITS tracking parameters. This allows for more fine-grained control over the minimum PT requirement, which can be useful for different tracking scenarios. The main changes are: - Modify the `TrackingParameters` struct to include an array of 4 minimum PT values, one for each track length (7, 6, 5, 4). - Update the track fitting logic in `TrackerTraits::findRoads()` to use the appropriate minimum PT value based on the track length. - Update the default minimum PT value in `TrackingInterface::initialise()` to use the new array-based approach. These changes provide more flexibility in tuning the ITS tracking parameters. --- Detectors/ITSMFT/ITS/macros/test/CheckTracksCA.C | 11 +++++++++-- .../ITS/tracking/include/ITStracking/Configuration.h | 2 +- Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx | 2 +- .../ITSMFT/ITS/tracking/src/TrackingInterface.cxx | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Detectors/ITSMFT/ITS/macros/test/CheckTracksCA.C b/Detectors/ITSMFT/ITS/macros/test/CheckTracksCA.C index c00e0ccbfe016..7c128ce34d538 100644 --- a/Detectors/ITSMFT/ITS/macros/test/CheckTracksCA.C +++ b/Detectors/ITSMFT/ITS/macros/test/CheckTracksCA.C @@ -87,6 +87,7 @@ void CheckTracksCA(bool doFakeClStud = false, TTree* mcTree = (TTree*)gFile->Get("o2sim"); mcTree->SetBranchStatus("*", 0); // disable all branches mcTree->SetBranchStatus("MCTrack*", 1); + mcTree->SetBranchStatus("MCEventHeader*", 1); std::vector* mcArr = nullptr; mcTree->SetBranchAddress("MCTrack", &mcArr); @@ -115,10 +116,13 @@ void CheckTracksCA(bool doFakeClStud = false, std::cout << "** Filling particle table ... " << std::flush; int lastEventIDcl = -1, cf = 0; int nev = mcTree->GetEntriesFast(); - std::vector> info(nev); + std::vector> info; + info.resize(nev); + TH1D* hZvertex = new TH1D("hZvertex", "Z vertex", 100, -20, 20); for (int n = 0; n < nev; n++) { // loop over MC events mcTree->GetEvent(n); info[n].resize(mcArr->size()); + hZvertex->Fill(mcEvent->GetZ()); for (unsigned int mcI{0}; mcI < mcArr->size(); ++mcI) { auto part = mcArr->at(mcI); info[n][mcI].event = n; @@ -196,7 +200,6 @@ void CheckTracksCA(bool doFakeClStud = false, info[evID][trackID].track.getImpactParams(info[evID][trackID].pvx, info[evID][trackID].pvy, info[evID][trackID].pvz, bz, ip); info[evID][trackID].dcaxy = ip[0]; info[evID][trackID].dcaz = ip[1]; - Info("", "dcaxy=%f dcaz=%f bz=%f", ip[0], ip[1], bz); } fakes += fake; @@ -286,6 +289,10 @@ void CheckTracksCA(bool doFakeClStud = false, clone->Divide(clone, den, 1, 1, "b"); clone->SetLineColor(3); clone->Draw("histesame"); + TCanvas* c2 = new TCanvas; + c2->SetGridx(); + c2->SetGridy(); + hZvertex->DrawClone(); std::cout << "** Streaming output TTree to file ... " << std::flush; TFile file("CheckTracksCA.root", "recreate"); diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h index 82d737153c827..b94de46869c09 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h @@ -94,7 +94,7 @@ struct TrackingParameters { unsigned long MaxMemory = 12000000000UL; float MaxChi2ClusterAttachment = 60.f; float MaxChi2NDF = 30.f; - float MinPt = 0.f; + std::vector MinPt = {0.f, 0.f, 0.f, 0.f}; unsigned char StartLayerMask = 0x7F; bool FindShortTracks = false; bool PerPrimaryVertexProcessing = false; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx index b39d2f5b32d4f..8dcb7bfd315c1 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx @@ -618,7 +618,7 @@ void TrackerTraits::findRoads(const int iteration) temporaryTrack.resetCovariance(); temporaryTrack.setChi2(0); fitSuccess = fitTrack(temporaryTrack, mTrkParams[0].NLayers - 1, -1, -1, mTrkParams[0].MaxChi2ClusterAttachment, mTrkParams[0].MaxChi2NDF, 50.f); - if (!fitSuccess || temporaryTrack.getPt() < mTrkParams[iteration].MinPt) { + if (!fitSuccess || temporaryTrack.getPt() < mTrkParams[iteration].MinPt[mTrkParams[iteration].NLayers - temporaryTrack.getNClusters()]) { continue; } tracks[trackIndex++] = temporaryTrack; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx b/Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx index 89ec83d0f6527..430475728376f 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx @@ -47,7 +47,7 @@ void ITSTrackingInterface::initialise() trackParams[2].TrackletMinPt = 0.1f; trackParams[2].CellDeltaTanLambdaSigma *= 4.; trackParams[2].MinTrackLength = 4; - trackParams[2].MinPt = 0.2f; + trackParams[2].MinPt[3] = 0.2f; trackParams[2].StartLayerMask = (1 << 6) + (1 << 3); if (o2::its::TrackerParamConfig::Instance().doUPCIteration) { trackParams[3].TrackletMinPt = 0.1f;