StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
HitCalibHelper.h
1 #ifndef STFTTHITCALIBMAKER_HELPER_H
2 #define STFTTHITCALIBMAKER_HELPER_H
3 
4 #include <map>
5 #include <vector>
6 
7 #define MIN_BCID_SAMPLES 200
8 
10 public:
12 
13  }
14 
15  bool ready( UShort_t uuid ){
16  return ( dbcidHist.count( uuid ) > 0 && dbcidHist[uuid].size() > MIN_BCID_SAMPLES );
17  }
18 
19  void fill( UShort_t uuid, Short_t dbcid ){
20  dbcidHist[ uuid ][ dbcid ]++;
21  if ( dbcidHist[ uuid ].size() > MIN_BCID_SAMPLES ){
22  auto x = std::max_element(dbcidHist[ uuid ].begin(), dbcidHist[ uuid ].end(),
23  [](const pair<Short_t, Int_t>& p1, const pair<Short_t, Int_t>& p2) {
24  return p1.second < p2.second; });
25  dbcidAnchor[ uuid ] = x->first;
26  }
27  }
28 
29  Short_t time( UShort_t uuid, Short_t dbcid ){
30  return dbcid - dbcidAnchor[ uuid ]; // TODO: handle wrap around?
31  }
32 
33  Short_t anchor( UShort_t uuid ) {
34  if ( dbcidAnchor.count( uuid ) == 0 )
35  return -1;
36  return dbcidAnchor[ uuid ];
37  }
38 
39 
40  size_t samples( UShort_t uuid ) {
41  if ( dbcidHist.count(uuid) > 0 ){
42  size_t n = 0;
43  for ( auto kv : dbcidHist[uuid] ){
44  n += kv.second;
45  }
46  return n;
47  }
48  return 0;
49  }
50 
51  map<Short_t, Int_t> histFor( UShort_t uuid ) {
52  return dbcidHist[ uuid ];
53  }
54 
55  map< UShort_t, Short_t> &getAnchorMap(){
56  return dbcidAnchor;
57  }
58 
59  void clear(){
60  dbcidHist.clear();
61  dbcidAnchor.clear();
62  }
63 
64 
65 protected:
66 
67  // key - unique VMM Id (0,386]
68  // value - histogram (map) with key: deltaBCID, value: counts;
69  map< UShort_t, map<Short_t, Int_t> > dbcidHist;
70 
71  // key - unique VMM Id (0, 386]
72  // value - dbcid reference
73  map< UShort_t, Short_t> dbcidAnchor;
74 
75 };
76 
77 #endif