BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnConverterThread.h
Go to the documentation of this file.
1#ifndef BMNCONVERTERTHREAD_H
2#define BMNCONVERTERTHREAD_H 1
3
4#include <queue>
5#include <vector>
6// ROOT
7#include "TClonesArray.h"
8#include "TPRegexp.h"
9#include "TROOT.h"
10#include "TString.h"
11#include "TTree.h"
12
14// FairRoot
15#include "FairLogger.h"
16// BmnRoot
17#include "BmnAbstractThread.h"
18#include "BmnEnums.h"
19#include "BmnEventHeader.h"
20#include "BmnSyncDigit.h"
21#include "RawTypes.h"
22
23using namespace ROOT;
24
26{
27 public:
28 TTree* fRawTree;
29 TTree* fRawTreeSpills;
30 TBufferMerger* merger;
31 std::shared_ptr<TBufferMergerFile> mergerFile;
32 uint32_t rawData[10000000];
33
34 // DAQ arrays
35 TClonesArray* sync;
36 TClonesArray* adc32; // gem
37 TClonesArray* adc64; // SiBT
38 TClonesArray* adc128; // FSD
39 TClonesArray* adc; // zdc & ecal & scwall & fhcal
40 TClonesArray* vsp;
41 TClonesArray* hrb;
42 TClonesArray* tdc;
43 TClonesArray* tqdc_tdc;
44 TClonesArray* tqdc_adc;
45 TClonesArray* tdc_hgnd; // hgnd
46 TClonesArray* msc;
47 TClonesArray* t0raw; // Sergeev's txt spill statistics
48 BmnEventHeader* eventHeaderDAQ;
49
50 std::map<uint8_t, const uint32_t*> time_slice_map;
51
52 struct BmnEventData
53 {
55 uint32_t fRunId;
56 uint32_t fEventId;
57 int64_t fTime_s;
58 int64_t fTime_ns;
59 };
60
61 BmnConverterThread(queue<Int_t>* thread_queue,
62 std::mutex* queue_access,
63 std::condition_variable* queue_wait,
64 Int_t id,
65 Bool_t measure_time = kFALSE)
66 : BmnAbstractThread(thread_queue, queue_access, queue_wait, id, measure_time)
67 , fRawTree(nullptr)
68 , fRawTreeSpills(nullptr)
69 , merger(nullptr)
70 , sync(nullptr)
71 , adc32(nullptr)
72 , adc64(nullptr)
73 , adc128(nullptr)
74 , adc(nullptr)
75 , vsp(nullptr)
76 , hrb(nullptr)
77 , tdc(nullptr)
78 , tqdc_tdc(nullptr)
79 , tqdc_adc(nullptr)
80 , tdc_hgnd(nullptr)
81 , msc(nullptr)
82 , t0raw(nullptr)
83 , eventHeaderDAQ(nullptr)
84 , tai_utc_dif(0)
85 {
87 // CreateTrees();
88 }
89
93 {
94 delete fRawTree;
95 delete fRawTreeSpills;
96 }
97
103
104 void SpillEnd();
105 void SetTrees(TTree* tree, TTree* treeSpills);
106
107 void SetPeriod(uint32_t v) { fPeriodId = v; }
108
110 Int_t len = 0,
111 const uint32_t* data = nullptr,
112 BmnEventType fCurEvType = kBMNEMPTY,
113 uint32_t fRunId = 7444,
114 uint32_t fEventId = -1);
115
116 void SetInitData(vector<pair<int, pair<int, int>>>* vec_tree, vector<pair<int, pair<int, int>>>* vec_tree_spills)
117 { // map<TTimeStamp, Int_t>* leaps, TTimeStamp utc_valid, Int_t tai_utc_dif){
118 this->vecTree = vec_tree;
119 this->vecTreeSpills = vec_tree_spills;
120 // this->leaps = leaps;
121 // this->utc_valid = utc_valid;
122 // this->tai_utc_dif = tai_utc_dif;
123 }
126 {
127 taskId = -1;
128 Execute();
129 delete sync;
130 delete adc32;
131 delete adc64;
132 delete adc128;
133 delete adc;
134 delete vsp;
135 delete hrb;
136 delete tdc;
137 delete tqdc_tdc;
138 delete tqdc_adc;
139 delete tdc_hgnd;
140 delete msc;
141 delete t0raw;
142 delete eventHeaderDAQ;
143 // LOGF(info, "Closing converter thread %d; Waiting time: %.3fs, Calculation time: %.3fs",
144 // threadId, GetWaitingTime(), GetCalculationTime());
145 LOGF(info, "Closing converter thread %d; Waiting time: %.3fs, Calculation time: %.3fs", threadId,
146 GetWaitingCTime().count(), GetCalculationCTime().count());
147 }
148
149 void WriteTree();
153
154 private:
155 Bool_t fExportExternalSpillStat; // export Sergeev's spill log from virtual device
156 uint32_t fPeriodId;
157
158 void WriteSpill(Int_t spillId);
159 void Calculate();
160 template<typename BrType>
161 void BranchRegFun(TString name, BrType** ar)
162 {
163 /*if (isTaskMode) {
164 cout << "Hmm";
165 FairRootManager* frm = FairRootManager::Instance();
166 frm->Register(name, name + "_dir", (*ar), fSaveOutput);
167 // TClass *cl = TClass::GetClass((*ar)->ClassName());
168 // if (cl == TClonesArray::Class())
169 // frm->Register(name, name + "_dir", static_cast<TClonesArray*> ((*ar)), fSaveOutput);
170 // else
171 // frm->Register(name, name + "_dir", static_cast<TNamed*> ((*ar)), fSaveOutput);
172 // LOG(debug1) << "Register by class " << cl->GetName() << " : " << name;
173 } else {*/
174 TBranch* b = fRawTree->Branch(name, ar);
175 LOGF(debug1, "Register branch %p : %s", (void*)b, name.Data());
176 //}
177 return;
178 }
179
180 // BmnStatus result;
181 BmnEventData fCurEvent;
182 uint32_t dataLen;
183
184 vector<pair<int, pair<int, int>>>* vecTree;
185 vector<pair<int, pair<int, int>>>* vecTreeSpills;
186
187 // Bool_t isTaskMode, fSaveOutput;
188
189 // Map to store pairs <Crate serial> - <crate time - T0 time>
190 map<TTimeStamp, Int_t> leaps;
193
196 BmnStatus ProcessEvent(const uint32_t* data, uint32_t len);
197 BmnStatus ConvertStatEvent(const uint32_t* d, uint32_t& len);
198
199 BmnStatus Process_FVME(const uint32_t* data, uint32_t len, uint32_t serial, BmnTrigInfo& spillInfo);
200 BmnStatus Process_HRB(const uint32_t* data, uint32_t len, uint32_t serial);
201 BmnStatus FillU40VE(const uint32_t* d, uint32_t slot, uint32_t& idx, BmnTrigInfo& spillInfo);
202 BmnStatus FillBlockTDC(const uint32_t* d, uint32_t serial, uint16_t& len, TClonesArray* ar, uint32_t modid);
203 BmnStatus FillBlockADC(const uint32_t* d, uint32_t serial, uint8_t channel, uint16_t& len, TClonesArray* ar);
204 BmnStatus FillTDC(const uint32_t* d, uint32_t serial, uint32_t slot, uint32_t modId, uint32_t& idx);
205 BmnStatus FillTQDC(const uint32_t* d, uint32_t serial, uint32_t slot, uint32_t modId, uint32_t& idx);
206 /**
207 * Parse TQDC16VS-E MStream data block
208 * https://afi.jinr.ru/DataFormatTQDC16VSE
209 * @param d data pointer
210 * @param serial device serial
211 * @param len payload length
212 * @return operation success
213 */
214 BmnStatus FillTQDC_E(const uint32_t* d, uint32_t serial, uint32_t& len);
215 /**
216 * Parse MSC16VE-E MStream data block
217 * https://afi.jinr.ru/DataFormatMSC_ETH
218 * @param d data pointer
219 * @param dev_hdr device header (serial, payload length, device ID)
220 * @return operation success
221 */
222 BmnStatus FillMSC16VE_E(const uint32_t* d, const DeviceHeader* dev_hdr);
223 /**
224 * https://afi.jinr.ru/TDC72VXS_DataFormat
225 */
226 BmnStatus FillTDC72VXS(const uint32_t* d, uint32_t serial, uint32_t& len, uint32_t modid);
227 /**
228 * https://afi.jinr.ru/TTVXS_DataFormat
229 */
230 BmnStatus FillTTVXS(const uint32_t* d, uint32_t serial, uint32_t& len);
231 BmnStatus ProcessGenericDevice(const uint32_t* d, const DeviceHeader* dev_hdr);
232 /**
233 * Parse custom HGND TDC data block
234 */
235 BmnStatus FillTDC250HGND(const uint32_t* d, uint32_t serial, uint32_t len);
236 /**
237 * Parse VSP data block
238 */
239 BmnStatus MapVSP(const uint32_t* d, const DeviceHeader* dev_hdr);
241 /**
242 * Parse UT24VE-TRC MStream data block
243 * https://afi.jinr.ru/DataFormatUT24VE-TRC
244 * @param d data pointer
245 * @param serial device serial
246 * @param len payload length
247 * @return operation success
248 */
249 BmnStatus FillUT24VE_TRC(const uint32_t* d, uint32_t& serial, uint32_t& len);
250 BmnStatus FillVirtualDevice(const uint32_t* d, const DeviceHeader* dh);
251 BmnStatus FillFVME2TMWR(const uint32_t* d, uint32_t serial, uint32_t& idx, uint32_t& len);
252 BmnStatus FillMSC(const uint32_t* d, uint32_t serial, uint32_t slot, uint32_t& idx);
253 inline BmnSyncDigit* FillWR(uint32_t iSerial, uint64_t iEvent, int64_t t_sec, int64_t t_ns);
254
256};
257
258#endif
__m128 v
Definition P4_F32vec4.h:1
__m128 m
Definition P4_F32vec4.h:27
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
#define ClassDef(name, id)
BmnStatus
Define status code.
Definition BmnEnums.h:93
BmnEventType
Define type of event.
Definition BmnEnums.h:143
@ kBMNEMPTY
No event (wrong sync word or metadata payload).
Definition BmnEnums.h:148
CDuration GetCalculationCTime()
BmnAbstractThread(std::queue< int32_t > *threadQueue, std::mutex *queueAccess, std::condition_variable *queueWait, int32_t id, bool measureTime=false)
CDuration GetWaitingCTime()
BmnStatus FillTTVXS(const uint32_t *d, uint32_t serial, uint32_t &len)
https://afi.jinr.ru/TTVXS_DataFormat
Int_t GetUTCShift(TTimeStamp t)
void SetMerger(TBufferMerger *m)
uint32_t rawData[10000000]
vector< pair< int, pair< int, int > > > * vecTree
void SetInitData(vector< pair< int, pair< int, int > > > *vec_tree, vector< pair< int, pair< int, int > > > *vec_tree_spills)
BmnStatus ConvertStatEvent(const uint32_t *d, uint32_t &len)
void WriteSpill(Int_t spillId)
BmnConverterThread(BmnConverterThread const &)=delete
void ClearRawSpillArrays()
void SetPeriod(uint32_t v)
BmnSyncDigit * FillWR(uint32_t iSerial, uint64_t iEvent, int64_t t_sec, int64_t t_ns)
BmnStatus FillTQDC_E(const uint32_t *d, uint32_t serial, uint32_t &len)
Parse TQDC16VS-E MStream data block https://afi.jinr.ru/DataFormatTQDC16VSE.
BmnStatus MapVSP(const uint32_t *d, const DeviceHeader *dev_hdr)
Parse VSP data block.
TClonesArray * tqdc_tdc
BmnConverterThread(queue< Int_t > *thread_queue, std::mutex *queue_access, std::condition_variable *queue_wait, Int_t id, Bool_t measure_time=kFALSE)
BmnStatus FillVSP(TClonesArray *ar)
void SetTrees(TTree *tree, TTree *treeSpills)
BmnStatus FillTDC72VXS(const uint32_t *d, uint32_t serial, uint32_t &len, uint32_t modid)
https://afi.jinr.ru/TDC72VXS_DataFormat
BmnStatus Process_HRB(const uint32_t *data, uint32_t len, uint32_t serial)
BmnStatus FillBlockTDC(const uint32_t *d, uint32_t serial, uint16_t &len, TClonesArray *ar, uint32_t modid)
BmnStatus FillTQDC(const uint32_t *d, uint32_t serial, uint32_t slot, uint32_t modId, uint32_t &idx)
BmnStatus FillFVME2TMWR(const uint32_t *d, uint32_t serial, uint32_t &idx, uint32_t &len)
std::shared_ptr< TBufferMergerFile > mergerFile
void BranchRegFun(TString name, BrType **ar)
BmnStatus FillMSC16VE_E(const uint32_t *d, const DeviceHeader *dev_hdr)
Parse MSC16VE-E MStream data block https://afi.jinr.ru/DataFormatMSC_ETH.
TBufferMerger * merger
BmnStatus FillTDC250HGND(const uint32_t *d, uint32_t serial, uint32_t len)
Parse custom HGND TDC data block.
map< TTimeStamp, Int_t > leaps
void SetExportExternalSpillStat(bool v)
BmnStatus ProcessEvent(const uint32_t *data, uint32_t len)
TClonesArray * tqdc_adc
void SetData(Int_t taskId, Int_t len=0, const uint32_t *data=nullptr, BmnEventType fCurEvType=kBMNEMPTY, uint32_t fRunId=7444, uint32_t fEventId=-1)
BmnStatus FillUT24VE_TRC(const uint32_t *d, uint32_t &serial, uint32_t &len)
Parse UT24VE-TRC MStream data block https://afi.jinr.ru/DataFormatUT24VE-TRC.
BmnEventHeader * eventHeaderDAQ
BmnStatus FillMSC(const uint32_t *d, uint32_t serial, uint32_t slot, uint32_t &idx)
BmnStatus Process_FVME(const uint32_t *data, uint32_t len, uint32_t serial, BmnTrigInfo &spillInfo)
BmnStatus FillU40VE(const uint32_t *d, uint32_t slot, uint32_t &idx, BmnTrigInfo &spillInfo)
BmnStatus ProcessGenericDevice(const uint32_t *d, const DeviceHeader *dev_hdr)
BmnStatus FillTDC(const uint32_t *d, uint32_t serial, uint32_t slot, uint32_t modId, uint32_t &idx)
TClonesArray * tdc_hgnd
BmnStatus FillVirtualDevice(const uint32_t *d, const DeviceHeader *dh)
BmnConverterThread & operator=(BmnConverterThread const &)=delete
BmnStatus FillBlockADC(const uint32_t *d, uint32_t serial, uint8_t channel, uint16_t &len, TClonesArray *ar)
vector< pair< int, pair< int, int > > > * vecTreeSpills
std::map< uint8_t, const uint32_t * > time_slice_map
void RegisterSpillBranches()
Class BmnTrigInfo Trigger counters of the current spill from U40VE card.
Definition BmnTrigInfo.h:15
const char * Data() const
Define enumerations used in tracking.