BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnDataFilters.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.int
7
8 Data selection policy for the ROOT file iterator
9*/
10
11#ifndef BMNDATAFILTERS_H
12#define BMNDATAFILTERS_H
13
14#include "BmnDetectorModel.h"
15#include "CbmStsHit.h"
16#include "CbmStsTrack.h"
17
18#include <functional>
19
20// USER DEFINED:
21// Definition of trakcs and hits selection criteria
22// ================================================
23
24inline constexpr Int_t BMN_MIN_HITS_PER_TRACK{5}; // minimum allowed number of hits in a track
25inline constexpr Double_t BMN_MAX_CHI2_PER_NDF{5.0}; // maximum allowed chi2 per NDF in a track
26
27inline constexpr const char* BMN_TRACKS_CUT_STR{"at least 5 hits, max Chi2/NDF = 5.0"};
28inline constexpr const char* BMN_HITS_CUT_STR{"no hit cuts applied"};
29inline constexpr const char* BMN_VERTEX_CUT_STR{"one SiBT hit per station, then the residual test in Align()"};
30
31// CAUTION: BmnAlignTestTask rewrites hit positions, and hit errors when it is
32// given its own StdDev. A cut on either would let a test task keep other tracks
33// than its source data, and so give its vertex hits other weights.
34inline Bool_t BmnAcceptHit(const CbmStsHit& hit, const BmnDetectorModel& model)
35{
36 return !model.IgnoreHit(hit.GetDetectorID());
37}
38
39inline Bool_t BmnAcceptTrack(const CbmStsTrack& track, Int_t usableHits, Bool_t wholeTrackOnly = kTRUE)
40{
41 if (wholeTrackOnly && usableHits != track.GetNStsHits())
42 return kFALSE;
43 if (usableHits < BMN_MIN_HITS_PER_TRACK)
44 return kFALSE;
45 if (track.GetNDF() <= 0)
46 return kFALSE;
47 if (track.GetChi2() / track.GetNDF() > BMN_MAX_CHI2_PER_NDF)
48 return kFALSE;
49
50 return kTRUE;
51}
52
53// ROOT iterator filter functions
54// ==============================
55
56typedef std::function<Bool_t(const CbmStsHit&)> HitFilter_t;
57typedef std::function<Bool_t(const CbmStsTrack&, Int_t usableHits)> TrackFilter_t;
58
60{
61 return [&model](const CbmStsHit& hit) { return BmnAcceptHit(hit, model); };
62}
63
65{
66 return [wholeTrackOnly](const CbmStsTrack& track, Int_t usableHits) {
67 return BmnAcceptTrack(track, usableHits, wholeTrackOnly);
68 };
69}
70
71#endif // BMNDATAFILTERS_H
TrackFilter_t BmnDefaultTrackFilter(Bool_t wholeTrackOnly=kTRUE)
constexpr Int_t BMN_MIN_HITS_PER_TRACK
constexpr const char * BMN_VERTEX_CUT_STR
std::function< Bool_t(const CbmStsHit &)> HitFilter_t
Bool_t BmnAcceptHit(const CbmStsHit &hit, const BmnDetectorModel &model)
HitFilter_t BmnDefaultHitFilter(const BmnDetectorModel &model)
Bool_t BmnAcceptTrack(const CbmStsTrack &track, Int_t usableHits, Bool_t wholeTrackOnly=kTRUE)
constexpr const char * BMN_HITS_CUT_STR
constexpr const char * BMN_TRACKS_CUT_STR
std::function< Bool_t(const CbmStsTrack &, Int_t usableHits)> TrackFilter_t
constexpr Double_t BMN_MAX_CHI2_PER_NDF
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
virtual Bool_t IgnoreHit(Int_t) const
Int_t GetNStsHits() const
Accessors.
Definition CbmStsTrack.h:60
Double_t GetChi2() const
Definition CbmStsTrack.h:66
Int_t GetNDF() const
Definition CbmStsTrack.h:67