BmnRoot
Loading...
Searching...
No Matches
BmnTrigRaw2Digit.h
Go to the documentation of this file.
1#ifndef BMNTRIGRAWTODIGIT_H
2#define BMNTRIGRAWTODIGIT_H
3// C++
4#include <fstream>
5#include <iostream>
6#include <map>
7#include <regex>
8#include <sstream>
9#include <unordered_map>
10#include <vector>
11// ROOT
12#include <TCanvas.h>
13#include <TClonesArray.h>
14#include <TH1I.h>
15#include <TMath.h>
16#include <TPRegexp.h>
17#include <TString.h>
18#include <TTree.h>
19// BmnRoot
20#include "BmnAliases.h"
21#include "BmnEnums.h"
22#include "BmnTDCDigit.h"
23#include "BmnTQDCADCDigit.h"
24#include "BmnTrigDigit.h"
25#include "BmnTrigWaveDigit.h"
26
27#define CHANNEL_COUNT_MAX 72u
28#define TDC72_CHANNEL_COUNT 72u
29#define TQDC16_CHANNEL_COUNT 16u
30#define TDC_BIN_COUNT 1024
31#define HPTIMEBIN 0.02344
32#define INVHPTIMEBIN 42.6666
33#define ADC_CLOCK_TQDC16VS 8.0 // nano seconds
34#define ADC_CLOCK 12.0
35#define ADC_CLOCK_OLD 12.5
36#define TDC_CLOCK 24.0
37#define TDC_CLOCK_OLD 25.0
38const UShort_t kNCHANNELS = 8; // number of channels in one HPTDC
39
40using std::map;
41using std::vector;
42
44{
45 TString name;
46 UInt_t module;
47 UInt_t serial;
48 UShort_t slot;
49 UShort_t channel;
50 Bool_t isNegative;
51 TClonesArray* branchArrayPtr;
52};
53
69
71{
72 public:
74 BmnTrigRaw2Digit(TString mappingFile, TString INLFile, TTree* digiTree = NULL);
75 // BmnTrigRaw2Digit(TString mappingFile, TString INLFile, FairRootManager* frm = NULL, bool saveOutput = true);
76 BmnTrigRaw2Digit(TString mappingFile, TString INLFile, std::function<void(TString, TClonesArray*)> BranchRegFun);
77
79 {
80 for (TClonesArray* ar : trigArrays)
81 delete ar;
82 // for (auto el : fMap)
83 // delete el;
84 fMap.clear();
85 for (auto& el : fPlacementMap) {
86 delete el.second;
87 }
88 fPlacementMap.clear();
89 }
90
91 vector<BmnTrigChannelData>* GetMap() { return &fMap; }
93 T0ChMap& T0Map() { return fT0Map; }
95 NameChMap& GetTrcMap() { return fTrcBitMap; }
97 Name2SerCh& GetScalerMap() { return name2scaler_map; }
98 SerCh2Name& GetScaler2NameMap() { return scalers2name_map; }
99 map<std::pair<uint32_t, uint16_t>, uint16_t>& GetScaler2IdxMap() { return scalers2index_map; }
100 map<uint16_t, uint16_t>& GetTrcIdx2ScalerIdxMap() { return trcIdx2scalerIdx; }
101 NameChMap& GetScalerName2IdxMap() { return scalers_name2index_map; }
102 vector<string>& GetScalerIdx2NameMap() { return scalers_index2name_map; }
103
104 BmnStatus FillEvent(TClonesArray* tdc, unordered_map<UInt_t, Long64_t>& tsMap);
105 BmnStatus FillEvent(TClonesArray* tdc, TClonesArray* adc, unordered_map<UInt_t, Long64_t>& tsMap);
107 BmnStatus ReadChannelMap(TString mappingFile);
108 BmnStatus ReadPlacementMap(TString mappingFile);
110
111 vector<TClonesArray*>* GetTrigArrays() { return &trigArrays; }
112
113 UInt_t GetT0Serial()
114 {
115 // if (fTrcSerial > 0)
116 // return fTrcSerial;
117 for (auto& itPl : fPlacementMap)
118 if (itPl.second->IsT0)
119 return itPl.second->CrateSerial;
120 return 0;
121 }
122
123 uint32_t GetTrcSerial() { return fTrcSerial; }
124
125 void SetSetup(BmnSetup stp) { fSetup = stp; }
126
127 private:
128 TString Serial2FileName(TString boardName, UInt_t serial)
129 {
130 UShort_t h = serial >> 16;
131 UShort_t l = serial & 0x0000FFFF;
132 TString inlFileName = Form("%s-%04X-%04X.ini", boardName.Data(), h, l);
133 return inlFileName;
134 }
135
136 UInt_t ChanCntByName(TString channelCountStr)
137 {
138 // regex reBoardName("(\\D+)(\\d+)(.*)");
139 TPRegexp reBoardName("(\\D+)(\\d+)(.*)");
140 // string channelCountStr = name;
141 UInt_t channelCount = CHANNEL_COUNT_MAX;
142 if (reBoardName.MatchB(channelCountStr)) {
143 // if (regex_match(name, reBoardName)){
144 // channelCountStr = regex_replace(name, reBoardName, "$2");
145 reBoardName.Substitute(channelCountStr, "$2");
146 channelCount = strtoul(channelCountStr.Data(), nullptr, 10);
147 // channelCount = strtoul(channelCountStr.c_str(), nullptr, 10);
148 }
149 return channelCount;
150 }
151
152 void ProcessWave(int16_t* iValue, const uint16_t& nVals, Bool_t& isNeg);
153
154 Double_t GetBaseline(int16_t* iValue, const uint16_t& nVals);
155
156 map<PlMapKey, BmnTrigParameters*> fPlacementMap;
157 NameChMap fTrcBitMap;
158 Name2SerCh name2scaler_map;
159 T0ChMap fT0Map;
160 vector<BmnTrigChannelData> fMap;
161 BmnSetup fSetup;
162 TString fMapFileName;
163 vector<TClonesArray*> trigArrays;
164
165 unique_ptr<TH1I> fWorkHist;
166 uint32_t fTrcSerial;
167
168 SerCh2Name scalers2name_map;
169 // map: <serial, channel> -> index in the list (inside spillHeader->ScalersVec(), and MSC matrix)
170 map<std::pair<uint32_t, uint16_t>, uint16_t> scalers2index_map;
171 map<uint16_t, uint16_t> trcIdx2scalerIdx;
172 // map: name -> index in the list
173 NameChMap scalers_name2index_map;
174 vector<string> scalers_index2name_map;
175
176 ClassDef(BmnTrigRaw2Digit, 1);
177};
178
179#endif /* BMNTRIGRAWTODIGIT_H */
BmnStatus
Definition BmnEnums.h:24
BmnSetup
Definition BmnEnums.h:89
std::unordered_map< std::string, std::pair< uint32_t, uint16_t > > Name2SerCh
Definition BmnAliases.h:9
std::map< std::pair< uint32_t, uint16_t >, std::string > SerCh2Name
Definition BmnAliases.h:10
std::map< T0MapKey, uint16_t > T0ChMap
Definition BmnAliases.h:6
std::unordered_map< std::string, uint16_t > NameChMap
Definition BmnAliases.h:7
BmnStatus ReadINLFromFile(BmnTrigParameters *par)
vector< string > & GetScalerIdx2NameMap()
BmnStatus ReadChannelMap(TString mappingFile)
vector< TClonesArray * > * GetTrigArrays()
NameChMap & GetScalerName2IdxMap()
virtual ~BmnTrigRaw2Digit()
NameChMap & GetTrcMap()
Name2SerCh & GetScalerMap()
void SetSetup(BmnSetup stp)
SerCh2Name & GetScaler2NameMap()
map< uint16_t, uint16_t > & GetTrcIdx2ScalerIdxMap()
map< std::pair< uint32_t, uint16_t >, uint16_t > & GetScaler2IdxMap()
BmnStatus FillEvent(TClonesArray *tdc, unordered_map< UInt_t, Long64_t > &tsMap)
BmnStatus ReadPlacementMap(TString mappingFile)
vector< BmnTrigChannelData > * GetMap()
const UShort_t kNCHANNELS
#define CHANNEL_COUNT_MAX
#define TDC_BIN_COUNT
TClonesArray * branchArrayPtr
Double_t INL[CHANNEL_COUNT_MAX][TDC_BIN_COUNT]
Bool_t NegativeMap[CHANNEL_COUNT_MAX]
TClonesArray * branchArrayPtr[CHANNEL_COUNT_MAX]
UShort_t ChannelMap[CHANNEL_COUNT_MAX]
Double_t t[CHANNEL_COUNT_MAX]