From 7beb79fd31ffed5def211040cd0c45c25fa3866f Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Tue, 27 Aug 2024 10:44:15 +0200 Subject: [PATCH] Remove usage of std::binary_function The usage of std::binary_function is really old legacy to define the functions used in STL algorithms like std::sort. std::binary_function was deprecated with C++11 and removed from C++ with C++17. Obviously it is still supported by some compilers since compilation errors only occured with newer Apple clang versions. Switch to the modern implementation using lambdas in the STL algorithms. This also increase code readability since the code is located at the same place where it is used. The change was confirmed to not introduce changes in the output by comparing the produced TTrees before and after the commit in all produced ROOT files. --- core/base/CbmHistManager.cxx | 12 +-- .../rich/finder/CbmRichRingFinderData.h | 37 +-------- .../finder/CbmRichRingFinderHoughImpl.cxx | 39 ++++++--- reco/littrack/parallel/LitScalTrack.h | 69 ++-------------- reco/littrack/parallel/LitTrackSelection.h | 50 +++++++++--- reco/littrack/std/data/CbmLitHit.h | 23 +----- reco/littrack/std/data/CbmLitTrack.h | 79 ++++--------------- .../std/selection/CbmLitQualitySort.cxx | 36 ++++++--- 8 files changed, 117 insertions(+), 228 deletions(-) mode change 100755 => 100644 core/base/CbmHistManager.cxx diff --git a/core/base/CbmHistManager.cxx b/core/base/CbmHistManager.cxx old mode 100755 new mode 100644 index 1cc8bc50aa..f8a7d69873 --- a/core/base/CbmHistManager.cxx +++ b/core/base/CbmHistManager.cxx @@ -47,14 +47,6 @@ using std::sort; using std::string; using std::vector; -class CompareTNamedMore : public std::binary_function<const TNamed*, const TNamed*, Bool_t> { -public: - Bool_t operator()(const TNamed* object1, const TNamed* object2) const - { - return string(object1->GetName()) > string(object2->GetName()); - } -}; - CbmHistManager::CbmHistManager() : fMap(), fCanvases() {} CbmHistManager::~CbmHistManager() {} @@ -78,7 +70,9 @@ vector<T> CbmHistManager::ObjectVector(const string& pattern) const LOG(info) << "Exception in CbmHistManager::ObjectVector: " << ex.what(); } - sort(objects.begin(), objects.end(), CompareTNamedMore()); + sort(objects.begin(), objects.end(), [](const TNamed* object1, const TNamed* object2) { + return string(object1->GetName()) > string(object2->GetName()); + }); return objects; } diff --git a/reco/detectors/rich/finder/CbmRichRingFinderData.h b/reco/detectors/rich/finder/CbmRichRingFinderData.h index 89e859de3e..7dbf295d07 100644 --- a/reco/detectors/rich/finder/CbmRichRingFinderData.h +++ b/reco/detectors/rich/finder/CbmRichRingFinderData.h @@ -18,7 +18,7 @@ * \date 2008 **/ class CbmRichHoughHit { -public: + public: /** * \brief Standard constructor. */ @@ -32,39 +32,4 @@ public: bool fIsUsed; }; -/** -* \class CbmRichHoughHitCmpUp -* -* \brief CbmRichHoughHit comparator for hits sorting by X coordinate. -* -* \author Semen Lebedev -* \date 2008 -**/ -class CbmRichHoughHitCmpUp : public std::binary_function<const CbmRichHoughHit, const CbmRichHoughHit, bool> { -public: - virtual ~CbmRichHoughHitCmpUp() {} - - bool operator()(const CbmRichHoughHit& m1, const CbmRichHoughHit& m2) const { return m1.fHit.fX < m2.fHit.fX; } -}; - - -/** -* \class CbmRichRingComparatorMore -* -* \brief CbmRichRingLight comparator based on the selection ANN criterion. -* -* \author Semen Lebedev -* \date 2008 -**/ -class CbmRichRingComparatorMore : public std::binary_function<const CbmRichRingLight*, const CbmRichRingLight*, bool> { -public: - virtual ~CbmRichRingComparatorMore() {} - - bool operator()(const CbmRichRingLight* ring1, const CbmRichRingLight* ring2) const - { - return ring1->GetSelectionNN() > ring2->GetSelectionNN(); - } -}; - - #endif /* CBM_RICH_RING_FINDER_DATA_H_ */ diff --git a/reco/detectors/rich/finder/CbmRichRingFinderHoughImpl.cxx b/reco/detectors/rich/finder/CbmRichRingFinderHoughImpl.cxx index ac27eacb18..205bf123ba 100644 --- a/reco/detectors/rich/finder/CbmRichRingFinderHoughImpl.cxx +++ b/reco/detectors/rich/finder/CbmRichRingFinderHoughImpl.cxx @@ -15,15 +15,13 @@ #include "CbmRichRingFitterCOP.h" #include "CbmRichRingLight.h" #include "CbmRichRingSelectAnn.h" - #include "TSystem.h" #include <algorithm> +#include <cmath> #include <iostream> #include <set> -#include <cmath> - using std::cout; using std::endl; using std::set; @@ -128,7 +126,8 @@ void CbmRichRingFinderHoughImpl::DoFind() fFoundRings.clear(); fFoundRings.reserve(100); - std::sort(fData.begin(), fData.end(), CbmRichHoughHitCmpUp()); + std::sort(fData.begin(), fData.end(), + [](const CbmRichHoughHit& m1, const CbmRichHoughHit& m2) { return m1.fHit.fX < m2.fHit.fX; }); HoughTransformReconstruction(); RingSelection(); fData.clear(); @@ -193,10 +192,14 @@ void CbmRichRingFinderHoughImpl::DefineLocalAreaAndHits(float x0, float y0, int* //find all hits which are in the corridor mpnt.fHit.fX = x0 - fMaxDistance; - itmin = std::lower_bound(fData.begin(), fData.end(), mpnt, CbmRichHoughHitCmpUp()); + itmin = std::lower_bound(fData.begin(), fData.end(), mpnt, [](const CbmRichHoughHit& m1, const CbmRichHoughHit& m2) { + return m1.fHit.fX < m2.fHit.fX; + }); mpnt.fHit.fX = x0 + fMaxDistance; - itmax = std::lower_bound(fData.begin(), fData.end(), mpnt, CbmRichHoughHitCmpUp()) - 1; + itmax = std::lower_bound(fData.begin(), fData.end(), mpnt, + [](const CbmRichHoughHit& m1, const CbmRichHoughHit& m2) { return m1.fHit.fX < m2.fHit.fX; }) + - 1; *indmin = itmin - fData.begin(); *indmax = itmax - fData.begin(); @@ -404,7 +407,9 @@ void CbmRichRingFinderHoughImpl::FindPeak(int indmin, int indmax) // cout << select << endl; // Remove found hits only for good quality rings - if (select > fAnnCut) { RemoveHitsAroundRing(indmin, indmax, ring2); } + if (select > fAnnCut) { + RemoveHitsAroundRing(indmin, indmax, ring2); + } if (select > -0.7) { fFoundRings.push_back(ring2); @@ -425,14 +430,18 @@ void CbmRichRingFinderHoughImpl::RemoveHitsAroundRing(int indmin, int indmax, Cb float ry = fData[j].fHit.fY - ring->GetCenterY(); float dr = fabs(sqrt(rx * rx + ry * ry) - ring->GetRadius()); - if (dr < dCut) { fData[j].fIsUsed = true; } + if (dr < dCut) { + fData[j].fIsUsed = true; + } } } void CbmRichRingFinderHoughImpl::RingSelection() { int nofRings = fFoundRings.size(); - sort(fFoundRings.begin(), fFoundRings.end(), CbmRichRingComparatorMore()); + sort(fFoundRings.begin(), fFoundRings.end(), [](const CbmRichRingLight* ring1, const CbmRichRingLight* ring2) { + return ring1->GetSelectionNN() > ring2->GetSelectionNN(); + }); set<unsigned int> usedHitsAll; vector<unsigned int> goodRingIndex; goodRingIndex.reserve(nofRings); @@ -446,9 +455,13 @@ void CbmRichRingFinderHoughImpl::RingSelection() int nofUsedHitsAll = 0; for (int iHit = 0; iHit < nofHits; iHit++) { set<unsigned int>::iterator it = usedHitsAll.find(ring->GetHitId(iHit)); - if (it != usedHitsAll.end()) { nofUsedHitsAll++; } + if (it != usedHitsAll.end()) { + nofUsedHitsAll++; + } + } + if ((float) nofUsedHitsAll / (float) nofHits > fUsedHitsAllCut) { + isGoodRingAll = false; } - if ((float) nofUsedHitsAll / (float) nofHits > fUsedHitsAllCut) { isGoodRingAll = false; } if (isGoodRingAll) { fFoundRings[iRing]->SetRecFlag(1); @@ -490,7 +503,9 @@ void CbmRichRingFinderHoughImpl::ReAssignSharedHits(int ringInd1, int ringInd2) float ry2 = hitY - ring2->GetCenterY(); float dr2 = fabs(sqrt(rx2 * rx2 + ry2 * ry2) - ring2->GetRadius()); - if (dr1 > dr2) { ring1->RemoveHit(hitId1); } + if (dr1 > dr2) { + ring1->RemoveHit(hitId1); + } else { ring2->RemoveHit(hitId2); } diff --git a/reco/littrack/parallel/LitScalTrack.h b/reco/littrack/parallel/LitScalTrack.h index 9954c7add5..5ca5ea9b08 100644 --- a/reco/littrack/parallel/LitScalTrack.h +++ b/reco/littrack/parallel/LitScalTrack.h @@ -12,13 +12,13 @@ #ifndef LITSCALTRACK_H_ #define LITSCALTRACK_H_ +#include "LitScalPixelHit.h" +#include "LitTrackParam.h" + #include <sstream> #include <string> #include <vector> -#include "LitScalPixelHit.h" -#include "LitTrackParam.h" - using std::string; using std::stringstream; using std::vector; @@ -38,7 +38,7 @@ namespace lit * tracking algorithm. */ class LitScalTrack { - public: + public: /** * \brief Constructor. */ @@ -220,7 +220,7 @@ namespace lit return strm; } - private: + private: vector<const LitScalPixelHit*> fHits; // Array of hits LitTrackParamScal fParamFirst; // First track parameter LitTrackParamScal fParamLast; // Last track parameter @@ -232,65 +232,6 @@ namespace lit bool fIsGood; // true id track is "good" }; - - /** -* \class CompareLitScalTrackChiSqOverNdfLess -* \brief Comparator class used in STL algorithms for \c LitScalTrack class. -* \author Andrey Lebedev <andrey.lebedev@gsi.de> -* \date 2013 -* -* This comparator class can be used in STL sort and find algorithms -* to sort in \a ascending order \c LitScalTracks objects by its -* (chi-square / NDF) value. -*/ - class CompareLitScalTrackChiSqOverNdfLess : - public std::binary_function<const LitScalTrack*, const LitScalTrack*, bool> { - public: - bool operator()(const LitScalTrack* track1, const LitScalTrack* track2) const - { - return ((track1->GetChiSq() / track1->GetNDF()) < (track2->GetChiSq() / track2->GetNDF())); - } - }; - - - /** -* \class CompareLitScalTrackNofHitsMore -* \brief Comparator class used in STL algorithms for \c LitScalTrack class. -* \author Andrey Lebedev <andrey.lebedev@gsi.de> -* \date 2013 -* -* This comparator class can be used in STL sort and find algorithms -* to sort in \a descending order \c LitScalTracks objects by a -* number of hits. -*/ - class CompareLitScalTrackNofHitsMore : public std::binary_function<const LitScalTrack*, const LitScalTrack*, bool> { - public: - bool operator()(const LitScalTrack* track1, const LitScalTrack* track2) const - { - return track1->GetNofHits() > track2->GetNofHits(); - } - }; - - - /** -* \class CompareLitScalTrackLastStationIdMore -* \brief Comparator class used in STL algorithms for \c LitScalTrack class. -* \author Andrey Lebedev <andrey.lebedev@gsi.de> -* \date 2013 -* -* This comparator class can be used in STL sort and find algorithms -* to sort in \a descending order \c LitScalTracks objects by a -* last station ID. -*/ - class CompareLitScalTrackLastStationIdMore : - public std::binary_function<const LitScalTrack*, const LitScalTrack*, bool> { - public: - bool operator()(const LitScalTrack* track1, const LitScalTrack* track2) const - { - return track1->GetLastStationId() > track2->GetLastStationId(); - } - }; - } // namespace parallel } // namespace lit diff --git a/reco/littrack/parallel/LitTrackSelection.h b/reco/littrack/parallel/LitTrackSelection.h index b8deef840b..0b62223cce 100644 --- a/reco/littrack/parallel/LitTrackSelection.h +++ b/reco/littrack/parallel/LitTrackSelection.h @@ -14,14 +14,14 @@ #ifndef LITTRACKSELECTION_H_ #define LITTRACKSELECTION_H_ +#include "LitScalTrack.h" + #include <algorithm> #include <functional> #include <set> #include <utility> #include <vector> -#include "LitScalTrack.h" - using std::equal_range; using std::pair; using std::set; @@ -35,7 +35,9 @@ namespace lit void DoSortNofHits(vector<LitScalTrack*>& tracks) { - sort(tracks.begin(), tracks.end(), CompareLitScalTrackNofHitsMore()); + sort(tracks.begin(), tracks.end(), [](const LitScalTrack* track1, const LitScalTrack* track2) { + return track1->GetNofHits() > track2->GetNofHits(); + }); unsigned int maxNofHits = tracks.front()->GetNofHits(); unsigned int minNofHits = tracks.back()->GetNofHits(); @@ -45,17 +47,26 @@ namespace lit value.SetNofHits(iNofHits); pair<vector<LitScalTrack*>::iterator, vector<LitScalTrack*>::iterator> bounds; - bounds = equal_range(tracks.begin(), tracks.end(), &value, CompareLitScalTrackNofHitsMore()); + bounds = + equal_range(tracks.begin(), tracks.end(), &value, [](const LitScalTrack* track1, const LitScalTrack* track2) { + return track1->GetNofHits() > track2->GetNofHits(); + }); - if (bounds.first == bounds.second) { continue; } + if (bounds.first == bounds.second) { + continue; + } - sort(bounds.first, bounds.second, CompareLitScalTrackChiSqOverNdfLess()); + sort(bounds.first, bounds.second, [](const LitScalTrack* track1, const LitScalTrack* track2) { + return ((track1->GetChiSq() / track1->GetNDF()) < (track2->GetChiSq() / track2->GetNDF())); + }); } } void DoSortLastStation(vector<LitScalTrack*>& tracks) { - sort(tracks.begin(), tracks.end(), CompareLitScalTrackLastStationIdMore()); + sort(tracks.begin(), tracks.end(), [](const LitScalTrack* track1, const LitScalTrack* track2) { + return track1->GetLastStationId() > track2->GetLastStationId(); + }); unsigned int maxPlaneId = tracks.front()->GetLastStationId(); unsigned int minPlaneId = tracks.back()->GetLastStationId(); @@ -65,17 +76,26 @@ namespace lit value.SetLastStationId(iPlaneId); pair<vector<LitScalTrack*>::iterator, vector<LitScalTrack*>::iterator> bounds; - bounds = equal_range(tracks.begin(), tracks.end(), &value, CompareLitScalTrackLastStationIdMore()); + bounds = + equal_range(tracks.begin(), tracks.end(), &value, [](const LitScalTrack* track1, const LitScalTrack* track2) { + return track1->GetLastStationId() > track2->GetLastStationId(); + }); - if (bounds.first == bounds.second) { continue; } + if (bounds.first == bounds.second) { + continue; + } - sort(bounds.first, bounds.second, CompareLitScalTrackChiSqOverNdfLess()); + sort(bounds.first, bounds.second, [](const LitScalTrack* track1, const LitScalTrack* track2) { + return ((track1->GetChiSq() / track1->GetNDF()) < (track2->GetChiSq() / track2->GetNDF())); + }); } } void DoSortChiSqOverNDF(vector<LitScalTrack*>& tracks) { - sort(tracks.begin(), tracks.end(), CompareLitScalTrackChiSqOverNdfLess()); + sort(tracks.begin(), tracks.end(), [](const LitScalTrack* track1, const LitScalTrack* track2) { + return ((track1->GetChiSq() / track1->GetNDF()) < (track2->GetChiSq() / track2->GetNDF())); + }); } @@ -94,7 +114,9 @@ namespace lit for (unsigned int iTrack = 0; iTrack < nofTracks; iTrack++) { LitScalTrack* track = tracks[iTrack]; - if (!track->IsGood()) { continue; } + if (!track->IsGood()) { + continue; + } int nofSharedHits = 0; int nofHits = track->GetNofHits(); @@ -113,7 +135,9 @@ namespace lit } } - if (!track->IsGood()) { continue; } + if (!track->IsGood()) { + continue; + } for (int iHit = 0; iHit < nofHits; iHit++) { int hitId = track->GetHit(iHit)->refId; diff --git a/reco/littrack/std/data/CbmLitHit.h b/reco/littrack/std/data/CbmLitHit.h index 68bb74cabd..e8d1d319c5 100644 --- a/reco/littrack/std/data/CbmLitHit.h +++ b/reco/littrack/std/data/CbmLitHit.h @@ -12,11 +12,10 @@ #ifndef CBMLITHIT_H_ #define CBMLITHIT_H_ +#include "TObject.h" #include "base/CbmLitEnums.h" #include "base/CbmLitFloat.h" -#include "TObject.h" - #include <functional> #include <string> using std::string; @@ -28,7 +27,7 @@ using std::string; * \brief Base data class for hits. **/ class CbmLitHit { -public: + public: /** * \brief Constructor. */ @@ -64,7 +63,7 @@ public: */ virtual string ToString() const { return ""; } -private: + private: Int_t fRefId; // reference to MC LitHitType fHitType; // type of the hit (strip, pixel, etc). Used to safely cast to the proper type. litfloat fZ; // Z position of the hit [cm] @@ -85,20 +84,4 @@ private: static const Int_t SB_STATION = 4; }; -/** - * \class Comparator for STL sorting algorithms. - */ -class CompareHitPtrZLess : public std::binary_function<const CbmLitHit*, const CbmLitHit*, bool> { -public: - bool operator()(const CbmLitHit* hit1, const CbmLitHit* hit2) const { return hit1->GetZ() < hit2->GetZ(); } -}; - -/** - * \class Comparator for STL sorting algorithms. - */ -class CompareHitPtrZMore : public std::binary_function<const CbmLitHit*, const CbmLitHit*, bool> { -public: - bool operator()(const CbmLitHit* hit1, const CbmLitHit* hit2) const { return hit1->GetZ() > hit2->GetZ(); } -}; - #endif /*CBMLITHIT_H_*/ diff --git a/reco/littrack/std/data/CbmLitTrack.h b/reco/littrack/std/data/CbmLitTrack.h index e5619d3688..dbe43236f7 100644 --- a/reco/littrack/std/data/CbmLitTrack.h +++ b/reco/littrack/std/data/CbmLitTrack.h @@ -32,7 +32,7 @@ using std::vector; * \brief Base data class for track. **/ class CbmLitTrack { -public: + public: /** * \brief Constructor. */ @@ -108,7 +108,9 @@ public: void RemoveHit(Int_t index) { fHits.erase(fHits.begin() + index); - if (!fFitNodes.empty()) { fFitNodes.erase(fFitNodes.begin() + index); }; + if (!fFitNodes.empty()) { + fFitNodes.erase(fFitNodes.begin() + index); + }; } /** @@ -117,9 +119,13 @@ public: */ void SortHits(Bool_t downstream = true) { - if (downstream) { sort(fHits.begin(), fHits.end(), CompareHitPtrZLess()); } + if (downstream) { + sort(fHits.begin(), fHits.end(), + [](const CbmLitHit* hit1, const CbmLitHit* hit2) { return hit1->GetZ() < hit2->GetZ(); }); + } else { - sort(fHits.begin(), fHits.end(), CompareHitPtrZMore()); + sort(fHits.begin(), fHits.end(), + [](const CbmLitHit* hit1, const CbmLitHit* hit2) { return hit1->GetZ() > hit2->GetZ(); }); } } @@ -133,7 +139,9 @@ public: std::vector<litfloat> covLast(fParamLast.GetCovMatrix()); // don't check the time error, because time can be unmeasured -- S.Gorbunov for (Int_t i = 0; i < 15; i++) { - if (std::abs(covFirst[i]) > 10000. || std::abs(covLast[i]) > 10000.) { return false; } + if (std::abs(covFirst[i]) > 10000. || std::abs(covLast[i]) > 10000.) { + return false; + } } return true; } @@ -151,7 +159,7 @@ public: return ss.str(); } -private: + private: vector<const CbmLitHit*> fHits; // Array of hits CbmLitTrackParam fParamFirst; // First track parameter CbmLitTrackParam fParamLast; // Last track parameter @@ -167,63 +175,4 @@ private: litfloat fLength; // Track length }; -/** - * \brief Comparator for STL sorting algorithms. - */ -class CompareTrackPtrChiSqOverNdfLess : public std::binary_function<const CbmLitTrack*, const CbmLitTrack*, Bool_t> { -public: - Bool_t operator()(const CbmLitTrack* track1, const CbmLitTrack* track2) const - { - return ((track1->GetChi2() / track1->GetNDF()) < (track2->GetChi2() / track2->GetNDF())); - } -}; - - -/** - * \brief Comparator for STL sorting algorithms. - */ -class CompareTrackPtrPrevTrackIdLess : public std::binary_function<const CbmLitTrack*, const CbmLitTrack*, Bool_t> { -public: - Bool_t operator()(const CbmLitTrack* track1, const CbmLitTrack* track2) const - { - return track1->GetPreviousTrackId() < track2->GetPreviousTrackId(); - } -}; - - -/** - * \brief Comparator for STL sorting algorithms. - */ -class CompareTrackPtrNofHitsMore : public std::binary_function<const CbmLitTrack*, const CbmLitTrack*, Bool_t> { -public: - Bool_t operator()(const CbmLitTrack* track1, const CbmLitTrack* track2) const - { - return track1->GetNofHits() > track2->GetNofHits(); - } -}; - - -/** - * \brief Comparator for STL sorting algorithms. - */ -class CompareTrackPtrNofHitsLess : public std::binary_function<const CbmLitTrack*, const CbmLitTrack*, Bool_t> { -public: - Bool_t operator()(const CbmLitTrack* track1, const CbmLitTrack* track2) const - { - return track1->GetNofHits() < track2->GetNofHits(); - } -}; - - -/** - * \brief Comparator for STL sorting algorithms. - */ -class CompareTrackPtrLastStationIdMore : public std::binary_function<const CbmLitTrack*, const CbmLitTrack*, Bool_t> { -public: - Bool_t operator()(const CbmLitTrack* track1, const CbmLitTrack* track2) const - { - return track1->GetLastStationId() > track2->GetLastStationId(); - } -}; - #endif /*CBMLITTRACK_H_*/ diff --git a/reco/littrack/std/selection/CbmLitQualitySort.cxx b/reco/littrack/std/selection/CbmLitQualitySort.cxx index 73f4691d9e..adefdd0486 100644 --- a/reco/littrack/std/selection/CbmLitQualitySort.cxx +++ b/reco/littrack/std/selection/CbmLitQualitySort.cxx @@ -32,7 +32,9 @@ CbmLitQualitySort::~CbmLitQualitySort() {} LitStatus CbmLitQualitySort::DoSortNofHits(TrackPtrIterator itBegin, TrackPtrIterator itEnd) { - std::sort(itBegin, itEnd, CompareTrackPtrNofHitsMore()); + std::sort(itBegin, itEnd, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return track1->GetNofHits() > track2->GetNofHits(); + }); Int_t maxNofHits = (*itBegin)->GetNofHits(); Int_t minNofHits = (*(itEnd - 1))->GetNofHits(); @@ -42,18 +44,26 @@ LitStatus CbmLitQualitySort::DoSortNofHits(TrackPtrIterator itBegin, TrackPtrIte value.SetNofHits(iNofHits); std::pair<TrackPtrIterator, TrackPtrIterator> bounds; - bounds = std::equal_range(itBegin, itEnd, &value, CompareTrackPtrNofHitsMore()); + bounds = std::equal_range(itBegin, itEnd, &value, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return track1->GetNofHits() > track2->GetNofHits(); + }); - if (bounds.first == bounds.second) { continue; } + if (bounds.first == bounds.second) { + continue; + } - std::sort(bounds.first, bounds.second, CompareTrackPtrChiSqOverNdfLess()); + std::sort(bounds.first, bounds.second, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return ((track1->GetChi2() / track1->GetNDF()) < (track2->GetChi2() / track2->GetNDF())); + }); } return kLITSUCCESS; } LitStatus CbmLitQualitySort::DoSortLastStation(TrackPtrIterator itBegin, TrackPtrIterator itEnd) { - std::sort(itBegin, itEnd, CompareTrackPtrLastStationIdMore()); + std::sort(itBegin, itEnd, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return track1->GetLastStationId() > track2->GetLastStationId(); + }); Int_t maxPlaneId = (*itBegin)->GetLastStationId(); Int_t minPlaneId = (*(itEnd - 1))->GetLastStationId(); @@ -63,17 +73,25 @@ LitStatus CbmLitQualitySort::DoSortLastStation(TrackPtrIterator itBegin, TrackPt value.SetLastStationId(iPlaneId); std::pair<TrackPtrIterator, TrackPtrIterator> bounds; - bounds = std::equal_range(itBegin, itEnd, &value, CompareTrackPtrLastStationIdMore()); + bounds = std::equal_range(itBegin, itEnd, &value, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return track1->GetLastStationId() > track2->GetLastStationId(); + }); - if (bounds.first == bounds.second) { continue; } + if (bounds.first == bounds.second) { + continue; + } - std::sort(bounds.first, bounds.second, CompareTrackPtrChiSqOverNdfLess()); + std::sort(bounds.first, bounds.second, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return ((track1->GetChi2() / track1->GetNDF()) < (track2->GetChi2() / track2->GetNDF())); + }); } return kLITSUCCESS; } LitStatus CbmLitQualitySort::DoSortChiSqOverNDF(TrackPtrIterator itBegin, TrackPtrIterator itEnd) { - std::sort(itBegin, itEnd, CompareTrackPtrChiSqOverNdfLess()); + std::sort(itBegin, itEnd, [](const CbmLitTrack* track1, const CbmLitTrack* track2) { + return ((track1->GetChi2() / track1->GetNDF()) < (track2->GetChi2() / track2->GetNDF())); + }); return kLITSUCCESS; } -- GitLab