/home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/ds/include/RAT/DS/EV.hh Source File

Ratpac-two: /home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/ds/include/RAT/DS/EV.hh Source File
Ratpac-two
EV.hh
1 
11 #ifndef __RAT_DS_EV__
12 #define __RAT_DS_EV__
13 
14 // Clang 5.0 headers confuse rootcint...
15 #ifdef __MAKECINT__
16 #define __signed signed
17 #endif
18 
19 #include <TObject.h>
20 #include <TTimeStamp.h>
21 
22 #include <RAT/DS/Digit.hh>
23 #include <RAT/DS/DigitPMT.hh>
24 #include <RAT/DS/FitResult.hh>
25 #include <RAT/DS/LAPPD.hh>
26 #include <RAT/DS/PMT.hh>
27 #include <limits>
28 #include <vector>
29 
30 namespace RAT {
31 namespace DS {
32 
33 class EV : public TObject {
34  public:
35  EV() : TObject() {}
36  virtual ~EV() {}
37 
39  virtual Int_t GetID() const { return id; }
40  virtual void SetID(Int_t _id) { id = _id; }
41 
43  virtual TTimeStamp GetUTC() const { return utc; }
44  virtual void SetUTC(const TTimeStamp &_utc) { utc = _utc; }
45 
47  virtual uint64_t GetTriggerWord() const { return trigger_word; }
48  virtual void SetTriggerWord(const uint64_t &_trigger_word) { trigger_word = _trigger_word; }
49 
51  virtual PMT *GetOrCreatePMT(Int_t id) {
52  pmt[id].SetID(id);
53  return &pmt[id];
54  }
55  const std::vector<Int_t> GetAllPMTIDs() {
56  std::vector<Int_t> result;
57  for (auto const &kv : pmt) {
58  result.push_back(kv.first);
59  }
60  return result;
61  }
62  virtual Int_t GetPMTCount() const { return pmt.size(); }
63  virtual void PrunePMT() { pmt.clear(); }
64 
66  virtual DigitPMT *GetOrCreateDigitPMT(Int_t id) {
67  digitpmt[id].SetID(id);
68  return &digitpmt[id];
69  }
70  const std::vector<Int_t> GetAllDigitPMTIDs() {
71  std::vector<Int_t> result;
72  for (auto const &kv : digitpmt) {
73  result.push_back(kv.first);
74  }
75  return result;
76  }
77  virtual size_t EraseDigitPMT(Int_t id) {
78  size_t n_erased = digitpmt.erase(id);
79  return n_erased;
80  }
81  virtual Int_t GetDigitPMTCount() const { return digitpmt.size(); }
82  virtual void PruneDigitPMT() { digitpmt.clear(); }
83 
84  const std::vector<Int_t> GetAllCleanedDigitPMTIDs() const {
85  std::vector<Int_t> result;
86  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
87  DigitPMT::HCMask hit_cleaning_mask = kv.second.GetHitCleaningMask();
88  if (hit_cleaning_mask == 0) {
89  result.push_back(kv.first);
90  }
91  }
92  return result;
93  }
94 
95  // TODO: Implemetation for PMT class
96  const std::vector<Int_t> GetAllCleanedPMTIDs() const {
97  throw std::logic_error("EV::GetAllCleanedPMTIDs is not yet implemented.");
98  }
99 
101  virtual Int_t Nhits() const { return GetPMTCount(); }
102  virtual Int_t NhitsCleaned() const { return GetAllCleanedPMTIDs().size(); }
103 
105  virtual Int_t DigitNhits() const {
106  int result = 0;
107  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
108  if (kv.second.GetNCrossings() > 0) {
109  result++;
110  }
111  }
112  return result;
113  }
114  virtual Int_t DigitNhitsCleaned() const {
115  int result = 0;
116  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
117  DigitPMT::HCMask hit_cleaning_mask = kv.second.GetHitCleaningMask();
118  if (kv.second.GetNCrossings() > 0 && hit_cleaning_mask == 0) {
119  result++;
120  }
121  }
122  return result;
123  }
124 
126  virtual LAPPD *GetLAPPD(Int_t i) { return &lappd[i]; }
127  virtual Int_t GetLAPPDCount() const { return lappd.size(); }
128  virtual LAPPD *AddNewLAPPD() {
129  lappd.resize(lappd.size() + 1);
130  return &lappd.back();
131  }
132  virtual void PruneLAPPD() { lappd.resize(0); }
133 
135  Double_t GetDeltaT() const { return deltat; }
136  void SetDeltaT(Double_t _deltat) { deltat = _deltat; }
137 
138  void SetCalibratedTriggerTime(Double_t _calibratedTriggerTime) { calibratedTriggerTime = _calibratedTriggerTime; }
139  Double_t GetCalibratedTriggerTime() const { return calibratedTriggerTime; }
140 
142  Double_t GetTotalCharge() const { return qTotal; }
143  void SetTotalCharge(Double_t _qTotal) { qTotal = _qTotal; }
144 
146  virtual std::vector<FitResult *> GetFitResults() { return fitResults; }
147  virtual void AddFitResult(FitResult *fit) { fitResults.push_back(fit); }
148  virtual void PruneFitResults() { fitResults.resize(0); }
149 
151  virtual std::vector<Classifier *> GetClassifierResults() { return classifierResults; }
152  virtual void AddClassifierResult(Classifier *clf) { classifierResults.push_back(clf); }
153  virtual void PruneClassifierResults() { classifierResults.resize(0); }
154 
156  virtual void SetDigitizer(const Digit &dig) { digitizer.push_back(dig); }
157 
159  virtual Digit &GetDigitizer() { return digitizer.at(0); };
160 
162  virtual bool DigitizerExists() const { return !digitizer.empty(); }
163 
164  // Prune digitizer information
165  virtual void PruneDigitizer() { digitizer.resize(0); }
166 
168  virtual uint64_t GetEventCleaningWord() const { return eventCleaningWord; }
169  virtual void SetEventCleaningWord(uint64_t _eventCleaningWord) { eventCleaningWord = _eventCleaningWord; }
170  virtual void SetEventCleaningBit(uint8_t bit_position, bool value = true) {
171  if (bit_position >= std::numeric_limits<uint64_t>::digits) {
172  warn << "Tried to set bit out of event cleaning bit mask range, ignoring." << newline;
173  return;
174  }
175  eventCleaningWord = (eventCleaningWord & ~(1ULL << bit_position)) | (value << bit_position);
176  }
177  virtual bool GetEventCleaningBit(uint8_t bit_position) const {
178  if (bit_position >= std::numeric_limits<uint64_t>::digits) {
179  warn << "Tried to get bit out of event cleaning bit mask range, ignoring." << newline;
180  return false;
181  }
182  return (eventCleaningWord >> bit_position) & 0x1;
183  }
184 
185  ClassDef(EV, 6);
186 
187  protected:
188  Int_t id;
189  Double_t qTotal;
190  Double_t calibratedTriggerTime;
191  Double_t deltat;
192  TTimeStamp utc;
193  uint64_t trigger_word;
194  std::map<Int_t, PMT> pmt;
195  std::map<Int_t, DigitPMT> digitpmt;
196  std::vector<LAPPD> lappd;
197  std::vector<FitResult *> fitResults;
198  std::vector<Classifier *> classifierResults;
199  std::vector<Digit> digitizer;
200  uint64_t eventCleaningWord = 0;
201 };
202 
203 } // namespace DS
204 } // namespace RAT
205 
206 #endif
Definition: Classifier.hh:13
Definition: DigitPMT.hh:23
Definition: Digit.hh:22
Definition: EV.hh:33
virtual Digit & GetDigitizer()
Get CAEN digitizer information for this event.
Definition: EV.hh:159
virtual uint64_t GetTriggerWord() const
Definition: EV.hh:47
virtual TTimeStamp GetUTC() const
Definition: EV.hh:43
virtual LAPPD * GetLAPPD(Int_t i)
Definition: EV.hh:126
virtual Int_t GetID() const
Definition: EV.hh:39
virtual PMT * GetOrCreatePMT(Int_t id)
Definition: EV.hh:51
virtual Int_t DigitNhits() const
Definition: EV.hh:105
std::vector< Digit > digitizer
The digitizer information.
Definition: EV.hh:199
virtual uint64_t GetEventCleaningWord() const
Definition: EV.hh:168
virtual Int_t Nhits() const
Definition: EV.hh:101
virtual std::vector< FitResult * > GetFitResults()
Definition: EV.hh:146
Double_t GetTotalCharge() const
Definition: EV.hh:142
virtual void SetDigitizer(const Digit &dig)
Set CAEN digitizer information for this event.
Definition: EV.hh:156
virtual DigitPMT * GetOrCreateDigitPMT(Int_t id)
Definition: EV.hh:66
virtual bool DigitizerExists() const
Check if the digitizer exists.
Definition: EV.hh:162
Double_t GetDeltaT() const
Definition: EV.hh:135
virtual std::vector< Classifier * > GetClassifierResults()
Definition: EV.hh:151
Definition: FitResult.hh:15
Definition: LAPPD.hh:18
Definition: PMT.hh:16
Definition: CCCrossSecMessenger.hh:29