BmnRoot
Loading...
Searching...
No Matches
BmnHodoRaw2Digit.h
Go to the documentation of this file.
1#ifndef BMNHodoRAW2DIGIT_H
2#define BMNHodoRAW2DIGIT_H
3
4#include "BmnHodoDigi.h"
5#include "Riostream.h"
6#include "TClonesArray.h"
7#include "TString.h"
8#include "WfmProcessor.h"
9
10#include <TStopwatch.h>
11#include <UniRun.h>
12#include <boost/functional/hash.hpp>
13#include <boost/program_options.hpp>
14#include <boost/property_tree/ini_parser.hpp>
15#include <boost/property_tree/ptree.hpp>
16#include <cstdlib>
17#include <iostream>
18#include <numeric>
19#include <optional>
20#include <unordered_map>
21
22class BmnHodoRaw2Digit : public WfmProcessor
23{
24
25 public:
26 BmnHodoRaw2Digit(int period, int run, const std::string& mappingFile = "", const std::string& calibrationFile = "");
28
30
31 TString GetName() { return "BmnHodoRaw2Digit"; }
32 void ParseConfig(const std::string& file);
33 void ParseCalibration(const std::string& file);
35 uint32_t correctINL(uint32_t time, std::pair<size_t, size_t> key);
36 void fillEvent(TClonesArray* tdc_data, TClonesArray* adc_data, TClonesArray* Hododigit);
37 void print();
38
40 auto GetChannelMap() { return fuoChannelMap; }
41 std::optional<std::pair<float, float>> GetCalibPairFromAddress(uint32_t address);
42 std::optional<uint32_t> GetAddressFromBoard(std::pair<size_t, size_t> key);
43
44 private:
45 std::unordered_map<std::pair<size_t, size_t>, uint32_t, boost::hash<std::pair<size_t, size_t>>>
46 fuoChannelMap; // physical channel <board, ch> to digi address
47 std::unordered_map<std::pair<size_t, size_t>, std::vector<float>, boost::hash<std::pair<size_t, size_t>>>
48 fINLcorrMap; // physical channel <board, ch> to vector<corrections>
49 std::unordered_map<uint32_t, std::pair<float, float>> fuoCalibMap; // digi address to pair<calib, calibIntegral>
50 int fSaturation;
51
52 bool fDoRLdeconvolve;
53 int fRLthresold; // Threshold to start deconvolution
54 float fR2converge; // R2 threshold to converge
55 size_t fMaxIters; // maximum number of iterations
56 size_t fMaxPeaks; // maximum number of pileup peaks
57 std::vector<float> fEthalon;
58
59 double fworkTime_real;
60 double fworkTime_cpu;
61
62 ClassDef(BmnHodoRaw2Digit, 5);
63};
64#endif /* BMNHodoRAW2DIGIT_H */
void ParseConfig(const std::string &file)
void ParseCalibration(const std::string &file)
uint32_t correctINL(uint32_t time, std::pair< size_t, size_t > key)
std::optional< std::pair< float, float > > GetCalibPairFromAddress(uint32_t address)
void ParseINLcorrections()
void fillEvent(TClonesArray *tdc_data, TClonesArray *adc_data, TClonesArray *Hododigit)
BmnHodoRaw2Digit(int period, int run, const std::string &mappingFile="", const std::string &calibrationFile="")
std::optional< uint32_t > GetAddressFromBoard(std::pair< size_t, size_t > key)
struct WfmProcessor::digiPars fdigiPars
-clang-format