Project
Loading...
Searching...
No Matches
ROFTimeClusterFinder.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#ifndef O2_MCH_ROFTIMECLUSTERFINDER_H_
18#define O2_MCH_ROFTIMECLUSTERFINDER_H_
19
20#include <cassert>
21#include <cstdint>
22#include <vector>
23#include <gsl/span>
24
28
29namespace o2
30{
31namespace mch
32{
33
35{
36 public:
37 using ROFVector = std::vector<o2::mch::ROFRecord>;
38
39 ROFTimeClusterFinder(gsl::span<const o2::mch::ROFRecord> rofs, gsl::span<const o2::mch::Digit> digits, uint32_t timeClusterSize, uint32_t nBins, bool improvePeakSearch, bool debug);
41
43 void process();
44
46 const ROFVector& getROFRecords() const { return mOutputROFs; }
47
49 char* saveROFRsToBuffer(size_t& bufSize);
50
52 void dumpInputROFs();
53 void dumpOutputROFs();
54
55 private:
57 struct TimeBin {
58 int32_t mFirstIdx{-1};
59 int32_t mLastIdx{-1};
60 uint32_t mNDigitsPS{0};
61
62 TimeBin() = default;
63
64 bool empty() { return mNDigitsPS == 0; }
65
66 bool operator<(const TimeBin& other) { return (mNDigitsPS < other.mNDigitsPS); }
67 bool operator>(const TimeBin& other) { return (mNDigitsPS > other.mNDigitsPS); }
68 bool operator<=(const TimeBin& other) { return (mNDigitsPS <= other.mNDigitsPS); }
69 bool operator>=(const TimeBin& other) { return (mNDigitsPS >= other.mNDigitsPS); }
70 };
71
72 // peak search parameters
73 uint32_t mTimeClusterSize;
74 uint32_t mNbinsInOneWindow;
75 uint32_t mBinWidth;
76 uint32_t mNbinsInOneTF;
77 DigitFilter mIsGoodDigit;
78 bool mImprovePeakSearch;
79
81 void initTimeBins();
83 int32_t getNextPeak();
85 void storeROF(int32_t firstBin, int32_t lastBin);
86
87 std::vector<TimeBin> mTimeBins;
88 int32_t mLastSavedTimeBin;
89
90 gsl::span<const o2::mch::ROFRecord> mInputROFs;
91 gsl::span<const o2::mch::Digit> mDigits;
92 ROFVector mOutputROFs{};
93 bool mDebug{false};
94};
95
96} // namespace mch
97} // namespace o2
98
99#endif // O2_MCH_ROFTIMECLUSTERFINDER_H_
Definition of the MCH ROFrame record.
std::ostringstream debug
char * saveROFRsToBuffer(size_t &bufSize)
stores the output ROFs into a flat memory buffer
const ROFVector & getROFRecords() const
return the vector of time-cluster ROFs
std::vector< o2::mch::ROFRecord > ROFVector
void process()
process the digit ROFs and create the time clusters
GLuint GLsizei bufSize
Definition glcorearb.h:790
bool operator<(EntryPM const &entryPM1, EntryPM const &entryPM2)
Definition LookUpTable.h:89
bool operator>=(const DsChannelId &a, const DsChannelId &b)
Definition DsChannelId.h:70
std::function< bool(const Digit &)> DigitFilter
Definition DigitFilter.h:21
bool operator>(const DsChannelId &a, const DsChannelId &b)
Definition DsChannelId.h:68
bool operator<=(const DsChannelId &a, const DsChannelId &b)
Definition DsChannelId.h:69
unsigned int TimeBin
global time bin
Definition Defs.h:132
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
void empty(int)
std::vector< ROFRecord > ROFVector
VectorOfTObjectPtrs other
std::vector< Digit > digits