24#include "Math/BrentMinimizer1D.h"
26#include "TStopwatch.h"
35template<
typename HitType = BmnHitRecord>
42 const char* constraintsPath =
nullptr,
47 const char* filesListPath,
48 const char* constraintsPath =
nullptr,
53 Bool_t
Align(Bool_t fixEvery = kFALSE);
55 Bool_t
SaveSolution(
const char* jsonPath, Bool_t withAlpha = kFALSE);
56 Bool_t
LoadSolution(
const char* jsonPath, Bool_t withAlpha = kTRUE, Bool_t withMSE = kTRUE);
132 std::vector<BmnDataIterator*> fpIterators;
133 std::vector<Int_t> fFirstTracksIdx;
134 std::mutex fMutexGlobal;
135 Int_t fThreadsCnt{1};
137 void ProcessTracks(TVectorD* pvB_dash, TMatrixD* pmC_dash, Int_t threadNum);
138 void CalculateMSEpart(Bool_t withResiduals, Int_t threadNum);
148#define _BMN_ALIGNER_RUN_THREADS(...) \
150 std::thread** _THRDS = new std::thread*[GetThreadCount()]; \
151 for (auto i = 0; i < GetThreadCount(); i++) \
152 _THRDS[i] = new std::thread(__VA_ARGS__, i); \
153 for (auto i = 0; i < GetThreadCount(); i++) { \
162template<
typename HitType>
165 const char* constraintsPath,
167 : fpMeasureModel(measureModel)
168 , fpDetModel(modelDetector)
169 , fpConstraintsPath(constraintsPath)
170 , fThreadsCnt(nThreads)
172 TH1D::AddDirectory(kFALSE);
173 TH1D::StatOverflows(kTRUE);
175 fDetectorActive.fill(kTRUE);
178template<
typename HitType>
181 fIterationResults.emplace_back(fTotalTracks);
182 fpResultLast = fpResultCurrent;
183 fpResultCurrent = &fIterationResults.back();
186template<
typename HitType>
190 fpResultCurrent->Alpha() = AlphaZero;
194template<
typename HitType>
198 fTotalCpuTime += timer.CpuTime();
199 fTotalRealTime += timer.RealTime();
#define BMN_BRENT_GRID_SIZE
ROOT::Math::SVector< Double_t, BMN_GLPARAMS_TOTAL > SVectGLT
BmnAligner(const BmnMeasureModel *measureModel, const BmnDetectorModel *modelDetector, const char *filesListPath, const char *constraintsPath=nullptr, Int_t nThreads=1)
virtual Bool_t IterateAlignment()
DetectorFlags_t fDetectorActive
BmnAlignResult * fpResultCurrent
std::vector< TVectorD > fConstraints
BmnSimpleProgressBar & GetProgressBar() noexcept
std::array< Int_t, BMN_MODULE_COUNT > DetectorHitCount_t
BmnAlignResult * fpResultLast
std::array< Bool_t, BMN_MODULE_COUNT > DetectorFlags_t
Bool_t Initialized() const noexcept
std::deque< BmnAlignResult > fIterationResults
void StoreZeroSolution(const std::vector< SVectLC > &AlphaZero)
Int_t TotalHits() const noexcept
BmnDataIterator * fpIteratorMain
ROOT::Math::BrentMinimizer1D Minimizer1D_t
BmnSimpleProgressBar fProgressBar
virtual void ReportResults() const
virtual Double_t CalculateMSE(Bool_t withResiduals)
std::vector< Bool_t > * fpTrackUsable
DetectorHitCount_t fHitsPerDetector
Bool_t SaveSolution(const char *jsonPath, Bool_t withAlpha=kFALSE)
BmnRamIterator< HitType > * fpRamIterator
Double_t fOmegaScaleFactor
Int_t TotalTracks() const noexcept
BmnRootIterator * fpRootIterator
Bool_t LoadSolution(const char *jsonPath, Bool_t withAlpha=kTRUE, Bool_t withMSE=kTRUE)
BmnAlignResult * GetCurrentResult() const noexcept
Bool_t Align(Bool_t fixEvery=kFALSE)
BmnAligner(const BmnMeasureModel *measureModel, const BmnDetectorModel *modelDetector, const char *constraintsPath=nullptr, Int_t nThreads=1)
void DoneInTime(TStopwatch &timer, const char *stage)
Double_t OmegaScaleFactor() const noexcept
Double_t CalculateMSE(const SVectGLT &solution)
Int_t GetThreadCount() const noexcept
const BmnDetectorModel * fpDetModel
const BmnMeasureModel * fpMeasureModel
const char * fpConstraintsPath
BmnAlignResult * GetResult(Bool_t last=kTRUE) const noexcept
virtual Bool_t PrepareData(const char *tracksPath=nullptr)
Bool_t SolveGlobal(const TMatrixD &mCL, const TVectorD &vBL)
void MarkTime(TStopwatch &timer)