BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
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;
52
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{
74};
75
76template<typename HitType>
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
int Int_t
float Float_t
double Double_t
constexpr Bool_t kTRUE
BmnDataIterator(BmnSimpleProgressBar *pb=nullptr)
void SetTickProgress(Float_t progress)
BmnSimpleProgressBar * GetProgressBar() const noexcept
virtual Double_t HitWy() const override
virtual Int_t HitDetectorID() const override
const Int_t fTracksCount
virtual Double_t HitWx() const override
BmnRamIterator()=delete
virtual Int_t HitsInTrack() const override
virtual void NextHit() override
virtual Double_t HitY() const override
virtual Double_t HitZ() const override
BmnRamIterator(const BmnRamIterator &other)=default
const Float_t fProgressPart
virtual Double_t HitX() const override
BmnRamIterator Slice(Int_t firstTrack, Int_t tracksCount) const
const Int_t * fpFirstHits
virtual void ResetAll() override
void CountHitsInTrack() noexcept
virtual ~BmnRamIterator()=default
virtual void ResetHits() override
const HitType * fpHits
virtual void NextTrack() override