BmnRoot
Loading...
Searching...
No Matches
BmnNdetRaw2Digit.h
Go to the documentation of this file.
1#ifndef BmnNdetRaw2Digit_H
2#define BmnNdetRaw2Digit_H
3
4#include "BmnADCDigit.h"
5#include "BmnNdetDigi.h"
6#include "BmnSyncDigit.h"
7#include "BmnTDCDigit.h"
8#include "BmnTQDCADCDigit.h"
9#include "FairLogger.h"
10#include "TClonesArray.h"
11#include "TString.h"
12#include "WfmProcessor.h"
13
14#include <boost/functional/hash.hpp>
15#include <boost/program_options.hpp>
16#include <boost/property_tree/ini_parser.hpp>
17#include <boost/property_tree/ptree.hpp>
18#include <cstdlib>
19#include <iostream>
20#include <numeric>
21#include <optional>
22#include <unordered_map>
23
25{
26
27 public:
28 BmnNdetRaw2Digit(Int_t period, Int_t run, TString mappingFile, TString calibrationFile = "");
30
32
33 void ParseConfig(TString mappingFile);
34 void ParseCalibration(TString calibrationFile);
36 void fillEvent(TClonesArray* tdc_data,
37 TClonesArray* adc_data,
38 unordered_map<UInt_t, Long64_t>* mapTS,
39 TClonesArray* Ndetdigit);
40 uint32_t correctINL(uint32_t time, std::pair<size_t, size_t> key);
41 void print();
42
44 auto GetChannelMap() { return fuoChannelMap; }
45
46 std::optional<std::pair<float, float>> GetCalibPairFromAddress(uint32_t address);
47 std::optional<uint32_t> GetAddressFromBoard(std::pair<size_t, size_t> key);
48 std::vector<float> GetCalibSlewShiftFromAddress(uint32_t address);
49
50 private:
51 int fPeriodId;
52 int fRunId;
53 TString fmappingFileName;
54 TString fcalibrationFileName;
55 bool fApplyINL = false;
56 bool fApplyAmplCalib = false;
57 bool fApplyTimeCalib = false;
58
59 std::unordered_map<std::pair<size_t, size_t>, uint32_t, boost::hash<std::pair<size_t, size_t>>>
60 fuoChannelMap; // physical channel <board, ch> to digi address
61 std::unordered_map<std::pair<size_t, size_t>, std::vector<float>, boost::hash<pair<int, int>>>
62 fINLcorrMap; // physical channel <board, ch> to vector<corrections>
63 std::unordered_map<uint32_t, std::pair<float, float>> fuoCalibMap; // digi address to pair<calib, calibError>
64 std::unordered_map<uint32_t, std::vector<float>> fuoCalibSlewShiftMap; // digi address to vector<calib>
65
66 ClassDef(BmnNdetRaw2Digit, 2);
67};
68#endif /* BmnNdetRaw2Digit_H */
std::optional< std::pair< float, float > > GetCalibPairFromAddress(uint32_t address)
void ParseCalibration(TString calibrationFile)
std::optional< uint32_t > GetAddressFromBoard(std::pair< size_t, size_t > key)
std::vector< float > GetCalibSlewShiftFromAddress(uint32_t address)
uint32_t correctINL(uint32_t time, std::pair< size_t, size_t > key)
BmnNdetRaw2Digit(Int_t period, Int_t run, TString mappingFile, TString calibrationFile="")
void ParseConfig(TString mappingFile)
void fillEvent(TClonesArray *tdc_data, TClonesArray *adc_data, unordered_map< UInt_t, Long64_t > *mapTS, TClonesArray *Ndetdigit)
struct WfmProcessor::digiPars fdigiPars
-clang-format