BmnRoot
Loading...
Searching...
No Matches
BmnRamIterator.h
Go to the documentation of this file.
1/*
2 BM@N alignment routine
3 BM@N experiment at NICA complex, JINR, 2025
4
5 Department: Math & Soft Group of HEP lab
6 Author: Igor Polev, polev@jinr.ru
7
8 BmnRamIterator class declaration
9 Iterator for tracks and hits stored in RAM
10*/
11
12#ifndef BMNRAMITERATOR_H
13#define BMNRAMITERATOR_H
14
15#include "BmnDataIterator.h"
16#include "BmnHitRecord.h"
18
19#include <stdexcept>
20
21// different types of hits to be used in test tasks and real tasks
22template<typename HitType = BmnHitRecord>
24{
25 public:
26 BmnRamIterator() = delete;
27 inline BmnRamIterator(const HitType* pHits,
28 const Int_t* pFirstHits,
29 Int_t nTracks,
30 BmnSimpleProgressBar* pb = nullptr,
31 Float_t progressPart = 1.0f);
32 virtual ~BmnRamIterator() = default;
33 BmnRamIterator(const BmnRamIterator& other) = default;
34 BmnRamIterator Slice(Int_t firstTrack, Int_t tracksCount) const;
35
36 virtual void ResetHits() override;
37 virtual void ResetAll() override;
38 virtual void NextTrack() override;
39 virtual void NextHit() override;
40 virtual Double_t HitX() const override;
41 virtual Double_t HitY() const override;
42 virtual Double_t HitZ() const override;
43 virtual Double_t HitWx() const override;
44 virtual Double_t HitWy() const override;
45 virtual Int_t HitDetectorID() const override;
46 virtual Int_t HitsInTrack() const override;
47
48 private:
49 const HitType* fpHits;
50 const Int_t *fpFirstHits, fTracksCount;
51 Int_t fTrackIdx, fHitIdx, fHitsInTrack, fNextFirstHit;
52
53 const Float_t fProgressPart;
54
55 void CountHitsInTrack() noexcept;
56};
57
58// inline implementation
59
60template<typename HitType>
61inline BmnRamIterator<HitType>::BmnRamIterator(const HitType* pHits,
62 const Int_t* pFirstHits,
63 Int_t nTracks,
65 Float_t progressPart)
66 : BmnDataIterator(pb)
67 , fpHits{pHits}
68 , fpFirstHits{pFirstHits}
69 , fTracksCount{nTracks}
70 , fProgressPart{progressPart}
71{
72 fInitialized = kTRUE;
73 SetTickProgress(fProgressPart / static_cast<Float_t>(fTracksCount));
74};
75
76template<typename HitType>
77inline BmnRamIterator<HitType> BmnRamIterator<HitType>::Slice(Int_t firstTrack, Int_t tracksCount) const
78{
79 if (firstTrack >= fTracksCount)
80 throw std::invalid_argument("BmnRamIterator::Slice: invalid track index");
81 if (tracksCount > fTracksCount - firstTrack)
82 throw std::invalid_argument("BmnRamIterator::Slice: invalid tracks count");
83 return BmnRamIterator(fpHits, fpFirstHits + firstTrack, tracksCount, GetProgressBar(),
84 static_cast<Float_t>(tracksCount) / static_cast<Float_t>(fTracksCount) * fProgressPart);
85}
86
87#endif
HitType
Definition BmnBaseHit.h:15
void SetTickProgress(Float_t progress)
BmnSimpleProgressBar * GetProgressBar() const noexcept
virtual Double_t HitWx() const override
virtual Double_t HitY() const override
virtual Double_t HitWy() const override
virtual void NextTrack() override
BmnRamIterator()=delete
virtual Double_t HitX() const override
BmnRamIterator(const BmnRamIterator &other)=default
virtual Int_t HitsInTrack() const override
virtual void ResetAll() override
BmnRamIterator(const HitType *pHits, const Int_t *pFirstHits, Int_t nTracks, BmnSimpleProgressBar *pb=nullptr, Float_t progressPart=1.0f)
BmnRamIterator Slice(Int_t firstTrack, Int_t tracksCount) const
BmnRamIterator Slice(Int_t firstTrack, Int_t tracksCount) const
virtual Int_t HitDetectorID() const override
virtual ~BmnRamIterator()=default
virtual void ResetHits() override
virtual void NextHit() override
virtual Double_t HitZ() const override