BmnRoot
Loading...
Searching...
No Matches
BmnDecoder.cxx
Go to the documentation of this file.
1#include "BmnDecoder.h"
2// System
3#include <arpa/inet.h> /* For ntohl for Big Endian LAND. */
4// C++
5#include <bitset>
6#include <chrono>
7#include <iostream>
8// ROOT
9#include "TStopwatch.h"
10#include "TSystem.h"
11// FairRoot
12#include "FairLogger.h"
13// BmnRoot
14#include "BmnADCDigit.h"
15#include "BmnConverterTools.h"
16#include "BmnGemStripDigit.h"
17#include "BmnHRBDigit.h"
18#include "BmnMSCDigit.h"
19#include "BmnRawDataDecoder.h"
20#include "BmnSyncDigit.h"
21#include "BmnTDCDigit.h"
22#include "BmnTQDCADCDigit.h"
23#include "DigiRunHeader.h"
24#include "TangoData.h"
25#include "UniDetectorParameter.h"
26#include "UniRawFile.h"
27#include "UniRun.h"
28// Double_t realtime = 0.0;
29// Double_t converterTime = 0.0;
30
31BmnDecoder::BmnDecoder(TString file, TString outfile, ULong_t nEvents, ULong_t period)
32 : isSpillStart(kFALSE)
33 , fSpillCntr(0)
34 , fApplyThreshold(kTRUE)
35 , isTaskMode(false)
36 , isForwardMode(false)
37 , fTOF700ReferenceRun(0)
38 , fTOF700ReferenceChamber(0)
39 , fPeriodId(period)
40 , fEventId(0)
41 , fNTotalEvents(0)
42 , fNSignalEvents(0)
43 , fStartEventId(0)
44 , fTime_s(0)
45 , fTime_ns(0)
46 , fRunStartTime(TimeZero)
47 , fRunEndTime(TimeZero)
48 , fRawTree(nullptr)
49 , fRawTreeSpills(nullptr)
50 , fDigiTree(nullptr)
51 , fRootFileName(file)
52 , fCalibFileName("adc-calib.root")
53 , fDigiRunHdrName("DigiRunHeader")
54 , fDchMapFileName("")
55 , fMwpcMapFileName("")
56 , fGemMapFileName("")
57 , fVspMapFileName("")
58 , fTof400PlaceMapFileName("")
59 , fTof400StripMapFileName("")
60 , fTof701PlaceMapFileName("")
61 , fTof701StripMapFileName("")
62 , fTof700MapFileName("")
63 , fTof700GeomFileName("")
64 , fZDCMapFileName("")
65 , fZDCCalibrationFileName("")
66 , fScWallMapFileName("")
67 , fScWallCalibrationFileName("")
68 , fFHCalMapFileName("")
69 , fFHCalCalibrationFileName("")
70 , fHodoMapFileName("")
71 , fHodoCalibrationFileName("")
72 , fNdetMapFileName("")
73 , fNdetCalibrationFileName("")
74 , fHgndMapFileName("")
75 , fHgndCalibrationFileName("")
76 , fECALMapFileName("")
77 , fECALCalibrationFileName("")
78 , fCscMapFileName("")
79 , fTrigPlaceMapFileName("")
80 , fTrigChannelMapFileName("")
81 , fRawRunHdrName("RawRunHeader")
82 , fMetadataName("RawRunMetadata")
83 , fRootFileIn(nullptr)
84 , fRootFileOut(nullptr)
85 , fDigiFileOut(nullptr)
86 , fCalibFile(nullptr)
87 , sync(nullptr)
88 , adc32(nullptr)
89 , adc64(nullptr)
90 , adc128(nullptr)
91 , adc(nullptr)
92 , vsp_raw(nullptr)
93 , hrb(nullptr)
94 , tdc(nullptr)
95 , tqdc_tdc(nullptr)
96 , tqdc_adc(nullptr)
97 , tdc_hgnd(nullptr)
98 , eventHeaderDAQ(nullptr)
99 , rawRunHeader(nullptr)
100 , msc(nullptr)
101 , t0raw(nullptr)
102 , silicon(nullptr)
103 , sibt(nullptr)
104 , gem(nullptr)
105 , csc(nullptr)
106 , vsp(nullptr)
107 , tof400(nullptr)
108 , tof700(nullptr)
109 , tof701(nullptr)
110 , zdc(nullptr)
111 , scwall(nullptr)
112 , fhcal(nullptr)
113 , hodo(nullptr)
114 , ndet(nullptr)
115 , hgnd(nullptr)
116 , ecal(nullptr)
117 , dch(nullptr)
118 , mwpc(nullptr)
119 , msc_copy(nullptr)
120 , t0_copy(nullptr)
121 , eventHeader(nullptr)
122 , spillHeader(nullptr)
123 , fMaxEvent(nEvents)
124 , fCscMapper(nullptr)
125 , fGemMapper(nullptr)
126 , fVspMapper(nullptr)
127 , fSiliconMapper(nullptr)
128 , fSiBTMapper(nullptr)
129 , fDchMapper(nullptr)
130 , fMwpcMapper(nullptr)
131 , fTrigMapper(nullptr)
132 , fTof400Mapper(nullptr)
133 //, fTof700Mapper(nullptr) //Legacy
134 , fTof701Mapper(nullptr)
135 , fZDCMapper(nullptr)
136 , fScWallMapper(nullptr)
137 , fFHCalMapper(nullptr)
138 , fHodoMapper(nullptr)
139 , fNdetMapper(nullptr)
140 , fHgndMapper(nullptr)
141 , fECALMapper(nullptr)
142 , fMSCMapper(nullptr)
143 , nSpillEvents(0)
144 , fBmnSetup(kBMNSETUP)
145 , fEvForPedestals(N_EV_FOR_PEDESTALS)
146 , fUseCalibFile(false)
147 , fSaveCalibFile(true)
148 , fExportJsonBocks(false)
149 , fSaveOutput(true)
150 , fT0Serial(0)
151 , fT0SyncTime(0)
152 , fT0Time(0.0)
153 , fT0Width(0.0)
154 , tai_utc_dif(0)
155 , fVerbose(0)
156 , _dfl_run_id{{8, 7814}, {9, 8974}}
157{
158 if (fRootFileName != "") {
159 // printf("fRootFileName %s\n", fRootFileName.Data());
160 fRunId = GetRunIdFromFile(fRootFileName);
161 TString subName = GetSubNameAfterRunId(file);
162 std::printf("RunId %d got from the RawRoot file (BmnDecoder ctor)\n", fRunId);
163 fDigiFileName = (outfile == "") ? Form("bmn_run%d%s_digi.root", fRunId, subName.Data()) : outfile;
164 if (fRootFileName.Length()) {
165
166 } else {
167 Int_t lastSlash = fDigiFileName.Last('/');
168 TString digiPath = (lastSlash == TString::kNPOS) ? "" : TString(fDigiFileName(0, lastSlash + 1));
169 fRootFileName = Form("%sbmn_run%d%s_raw.root", digiPath.Data(), fRunId, subName.Data());
170 }
171 fSubName = subName;
172 } else
173 LOGF(debug, "Creating decoder without input file.");
174 // InitUTCShift();
175 // Legacy
176 // for (int c = 0; c < 60; c++) {
177 // refrun_tof700_slewing[c] = 0;
178 // refchamber_tof700_slewing[c] = 0;
179 // type_tof700_slewing[c] = 0;
180 // }
181
182 // printf("Constructor of DECODER is finished\n");
183}
184
186{
187 if (fGemMapper)
188 delete fGemMapper;
189 if (fCscMapper)
190 delete fCscMapper;
191 if (fVspMapper)
192 delete fVspMapper;
193 if (fSiliconMapper)
194 delete fSiliconMapper;
195 if (fSiBTMapper)
196 delete fSiBTMapper;
197 if (fDchMapper)
198 delete fDchMapper;
199 if (fMwpcMapper)
200 delete fMwpcMapper;
201 if (fTrigMapper)
202 delete fTrigMapper;
203 if (fTof400Mapper)
204 delete fTof400Mapper;
205 // Legacy
206 // if (fTof700Mapper)
207 // delete fTof700Mapper;
208 if (fTof701Mapper)
209 delete fTof701Mapper;
210 if (fZDCMapper)
211 delete fZDCMapper;
212 if (fScWallMapper)
213 delete fScWallMapper;
214 if (fFHCalMapper)
215 delete fFHCalMapper;
216 if (fHodoMapper)
217 delete fHodoMapper;
218 if (fNdetMapper)
219 delete fNdetMapper;
220 if (fHgndMapper)
221 delete fHgndMapper;
222 if (fECALMapper)
223 delete fECALMapper;
224 if (fMSCMapper)
225 delete fMSCMapper;
226
227 if (gem)
228 delete gem;
229 if (csc)
230 delete csc;
231 if (vsp)
232 delete vsp;
233 if (msc_copy)
234 delete msc_copy;
235 if (t0_copy)
236 delete t0_copy;
237 if (dch)
238 delete dch;
239 if (mwpc)
240 delete mwpc;
241 if (silicon)
242 delete silicon;
243 if (tof400)
244 delete tof400;
245 if (tof700)
246 delete tof700;
247 if (tof701)
248 delete tof701;
249 if (zdc)
250 delete zdc;
251 if (scwall)
252 delete scwall;
253 if (fhcal)
254 delete fhcal;
255 if (hodo)
256 delete hodo;
257 if (ndet)
258 delete ndet;
259 if (hgnd)
260 delete hgnd;
261 if (ecal)
262 delete ecal;
263
264 if (eventHeader)
265 delete eventHeader;
266 if (spillHeader)
267 delete spillHeader;
268 if (eventHeaderDAQ)
269 delete eventHeaderDAQ;
270}
271
273{
274 isTaskMode = true;
275 FairRootManager* frm = FairRootManager::Instance();
276 bool save_output = fSaveOutput;
277
278 auto reg_fun = [&](TString name, TObject* ar) -> void {
279 TClass* cl = TClass::GetClass(ar->ClassName());
280 if (cl == TClonesArray::Class())
281 frm->Register(name, name + "_dir", static_cast<TClonesArray*>(ar), save_output);
282 else
283 frm->Register(name, name + "_dir", static_cast<TNamed*>(ar), save_output);
284 LOG(debug1) << "Register by class " << cl->GetName() << " : " << name;
285 return;
286 };
287 LoadConfig();
288 AssignInputs();
289 InitMappers(reg_fun);
290
291 fPedEvCntr = 0; // counter for pedestal events between two recalculations
292 fPedEvCntrBySpill = 0; // counter for pedestal events between two spills
293 fNoiseEvCntr = 0; // counter of event for noise channel detection
294 fPedEnough = kFALSE;
295 fNoiseEnough = kFALSE;
296 if (fUseCalibFile)
297 LoadCalibFile(fCalibFileName);
299 fNSignalEvents = 0;
300 fNTotalEvents = 0;
301 fSpillCntr = 0;
302 return kSUCCESS;
303}
304
306{
307 return kSUCCESS;
308}
309
310void BmnDecoder::Exec(Option_t* opt)
311{
313
314 return;
315}
316
318{
319 std::printf("[INFO] " ANSI_COLOR_BLUE "Starting to decode file %s\n" ANSI_COLOR_RESET, fRootFileName.Data());
320
321 fRootFileIn = new TFile(fRootFileName, "READ");
322 if (fRootFileIn->IsOpen() == false) {
323 LOGF(error, "\n!!!!\ncannot open file %s \nDecodeDataToDigi stopped\n!!!!", fRootFileName.Data());
324 return kBMNERROR;
325 } else {
326 LOGF(info, "Input file: %s, Output file: %s", fRootFileName.Data(), fDigiFileName.Data());
327 }
328 fRawTree = (TTree*)fRootFileIn->Get("BMN_RAW");
329 AssignInputs();
330
331 fDigiFileOut = new TFile(fDigiFileName, "recreate");
332 NRawTreeEvents = fRawTree->GetEntries(); //(fMaxEvent > fRawTree->GetEntries() || fMaxEvent == 0) ?
333 // fRawTree->GetEntries() : fMaxEvent;
334 NRawTreeSpills = fRawTreeSpills ? fRawTreeSpills->GetEntries() : 0;
335 if (fMaxEvent == 0)
336 fMaxEvent = NRawTreeEvents;
337 fMaxEvent = Min(fMaxEvent, NRawTreeEvents);
338 return kBMNSUCCESS;
339}
340
342{
343 if (PreInitOffline() == kBMNERROR)
344 return kBMNERROR;
345 InitDecoder();
347 return kBMNSUCCESS;
348}
349
351{
352 /****************** 1st Iter of Si/GEM mapper *************/
353 // Double_t rtime;
354 // Double_t ctime;
355 TStopwatch timer;
356 if (fGemMapper || fSiliconMapper || fCscMapper || fSiBTMapper /* || fVspMapper */) {
357 std::printf("[INFO] Searching for pedestal events\n");
358 for (Long64_t iEv = 0; iEv < NRawTreeEvents; ++iEv) {
359 fRawTree->GetEntry(iEv);
360
361 if (!eventHeaderDAQ)
362 continue;
363 fCurEventType = eventHeaderDAQ->GetEventType();
364 if (fCurEventType != kBMNPEDESTAL)
365 continue;
366 if (fPedEvCntr != fEvForPedestals) {
367 CopyDataToPedMap(fPedEvCntr);
368 fPedEvCntr++;
369 // } else if (fVerbose == 0)
370 // DrawBar(fPedEvCntr, fEvForPedestals);
371 } else
372 break;
373 }
374 /*if (fPedEvCntr != fEvForPedestals) {
375 printf(ANSI_COLOR_RED "\n[WARNING]" ANSI_COLOR_RESET);
376 printf(" Not enough pedestal events (%d instead of %d)\n", fPedEvCntr, fEvForPedestals);
377 }*/
378 LOGF(info, "Found a total of %d pedestal events", fPedEvCntr);
380 // if (fGemMapper) {
381 // fGemMapper->DrawDebugHists2D();
382 // fGemMapper->DrawDebugHists();
384 // return kBMNSUCCESS;
385 // }
386 // if (fSiliconMapper) {
387 // fSiliconMapper->DrawDebugHists2D();
388 // fSiliconMapper->DrawDebugHists();
389 // fSiliconMapper->ClearDebugHists();
391 // }
392 /*fPedEvCntr = 0;
393 printf("\n[INFO]" ANSI_COLOR_BLUE " Clear noisy channels:\n" ANSI_COLOR_RESET);
394 printf("\tFilling signal profiles for station-module-layer histograms\n");
395 UInt_t nEvForNoiseCorrection = 10000;
396 printf("\tNumber of requested events is ");
397 printf(ANSI_COLOR_RED "%u\n" ANSI_COLOR_RESET, nEvForNoiseCorrection);
398 printf("\tActual number of events is ");
399 printf(ANSI_COLOR_RED "%lld\n" ANSI_COLOR_RESET, NRawTreeEvents);*/
400 std::printf("[INFO] Searching for signal events\n");
401 for (Long64_t iEv = 0; iEv < NRawTreeEvents; ++iEv) {
402 fRawTree->GetEntry(iEv);
403 if (!eventHeaderDAQ)
404 continue;
405 fCurEventType = eventHeaderDAQ->GetEventType();
406 if (fCurEventType == kBMNPEDESTAL) {
407 /*CopyDataToPedMap(fPedEvCntr);
408 fPedEvCntr++;
409 if ((fPedEvCntr == fEvForPedestals - 1)) {
410 RecalculatePedestals();
411 fPedEvCntr = 0;
412 }*/
413 } else { // payload
414 // if (fPrevEventType == kBMNPEDESTAL && fPedEvCntr == fEvForPedestals - 1)
415 if (fCurEventType == kBMNPAYLOAD) {
416 fNoiseEvCntr++;
417 FillProfiles();
418 if (iEv != 0 && fNoiseEvCntr % 2500 == 0)
419 LOG(info) << "Profile event #" << fNoiseEvCntr << "/" << fEvForNoiseCorr << ";";
420 }
421 }
422 fPrevEventType = fCurEventType;
423 if (fNoiseEvCntr >= fEvForNoiseCorr)
424 break;
425 }
426 LOGF(info, "Found a total of %d payload events", fNoiseEvCntr);
429 }
430
431 /****************** End of the 1st iter ******************/
432 fCurEventType = kBMNPAYLOAD;
433 fPrevEventType = fCurEventType;
434 fNoiseEvCntr = 0;
435 fPedEvCntr = 0;
436 vector<UInt_t> startTripEvent;
437 vector<UInt_t> endTripEvent;
438 // //check for trip information
439 // TString date_start = fRunStartTime.AsString("s"); // 1252 run
440 // TString date_end = fRunEndTime.AsString("s");
441 // std::printf("START (event %u):\t%s\n", fStartEventId, fRunStartTime.AsString());
442 // std::printf("FINISH (event %u):\t%s\n", fEventId, fRunEndTime.AsString());
443 // TangoData db_tango((char*) date_start.Data(), (char*) date_end.Data(), (char*) "gem", (char*) "trip");
444 // TangoData::enumConditions condition = TangoData::conditionEqual;
445 // bool condition_value = 1;
446 // vector<int> map_channel_run5{ 1, 3, 0, 5, 2, 6, 4, 7};
447 // vector<int> map_channel_run6_b1529{ 1, 3, 0, 5, 2, 6, 4};
448 // vector<int> map_channel_run6_a1529{ 1, 3, 0, 5, 6, 4, 2};
449 // vector<int>* map_channel = nullptr;
450 // switch (fPeriodId) {
451 // case 5:
452 // map_channel = &map_channel_run5;
453 // break;
454 // case 6:
455 // if (fRunId < 1569)
456 // map_channel = &map_channel_run6_b1529;
457 // else
458 // map_channel = &map_channel_run6_a1529;
459 // break;
460 // default:
461 // std::printf("Warning: unknown GEM Tango channel map for the run!\n");
462 // break;
463 //
464 // }
465 //
466 // UInt_t runLength = fRunEndTime.AsDouble() - fRunStartTime.AsDouble(); //in seconds.nanoseconds
467 // Double_t timeStep = runLength * 1.0 / fNTotalEvents; //time for one event
468 // //printf("Run duration = %d sec.\t TimeStep = %f sec./event\n", runLength, timeStep);
469 // if (map_channel) {
470 // TObjArray* tango_data_gem = db_tango.SearchTangoIntervals(condition, condition_value, map_channel);
471 // if (tango_data_gem) {
472 // for (Int_t i = 0; i < tango_data_gem->GetEntriesFast(); ++i) {
473 // TObjArray* currGemTripInfo = (TObjArray*) tango_data_gem->At(i);
474 // if (currGemTripInfo->GetEntriesFast() != 0)
475 // for (Int_t j = 0; j < currGemTripInfo->GetEntriesFast(); ++j) {
476 // TangoTimeInterval* ti = (TangoTimeInterval*) currGemTripInfo->At(j);
477 // startTripEvent.push_back(UInt_t((ti->start_time.Convert() - fRunStartTime.AsDouble()) /
478 // timeStep)); endTripEvent.push_back(UInt_t((ti->end_time.Convert() -
479 // fRunStartTime.AsDouble()) / timeStep));
480 // }
481 // }
482 // }
483 // }
484
485 std::printf("[INFO]");
486 std::printf(ANSI_COLOR_BLUE " Main loop over events:\n" ANSI_COLOR_RESET);
487 for (Long64_t iEv = 0; iEv < fMaxEvent; ++iEv) {
489
490 fRawTree->GetEntry(iEv);
491
492 fCurEventType = eventHeaderDAQ->GetEventType();
493 fNTotalEvents++;
494 if ((fCurEventType == kBMNPAYLOAD)) // || (fCurEventType == kBMNPEDESTAL))
495 fNSignalEvents++;
496 fEventId = eventHeaderDAQ->GetEventId();
497 if (iEv != 0 && iEv % 2500 == 0)
498 LOGF(info, "Decoded %7lld events. EventId %7lld", iEv, fEventId);
499 if ((fStartEventId == 0) && (fEventId))
500 fStartEventId = fEventId;
501 FillTimeShiftsMap();
502 if (!eventHeaderDAQ)
503 continue;
504 Bool_t isTripEvent = kFALSE;
505 for (size_t iTrip = 0; iTrip < startTripEvent.size(); ++iTrip) {
506 if (eventHeaderDAQ->GetEventId() > startTripEvent[iTrip]
507 && eventHeaderDAQ->GetEventId() < endTripEvent[iTrip])
508 {
509 isTripEvent = kTRUE;
510 break;
511 }
512 }
513 if (fVerbose > 0)
514 if ((fNSignalEvents % 5000 == 0) && ((fCurEventType == kBMNPAYLOAD) || (fCurEventType == kBMNPEDESTAL)))
515 cout << "Digitization: " << fNSignalEvents << "/" << fNTotalEvents << "/" << fMaxEvent
516 << " processed; Spill #" << fSpillCntr << endl;
517 // } else if (fVerbose == 0)
518 // DrawBar(fNSignalEvents, fMaxEvent);
519
520 if (fTrigMapper) {
521 timer.Start();
522 fTrigMapper->FillEvent(tqdc_tdc, tqdc_adc, fTimeShifts);
523 timer.Stop();
524 // rtime = timer.RealTime();
525 // ctime = timer.CpuTime();
526 // printf("\nReal time %f s, CPU time %f s fTrigMapper TQDC\n", rtime, ctime);
527 timer.Start();
528 fTrigMapper->FillEvent(tdc, fTimeShifts);
529 timer.Stop();
530 // rtime = timer.RealTime();
531 // ctime = timer.CpuTime();
532 // printf("Real time %f s, CPU time %f s fTrigMapper TDC\n", rtime, ctime);
533 fT0Time = 0.;
534 fT0Width = 0.;
535 GetT0Info(fT0Time, fT0Width);
536 }
537 eventHeader->SetRunId(eventHeaderDAQ->GetRunId());
538 eventHeader->SetEventId(eventHeaderDAQ->GetEventId());
539 eventHeader->SetPeriodId(eventHeaderDAQ->GetPeriodId());
540 eventHeader->SetEventTimeTS(TTimeStamp(time_t(fTime_s), fTime_ns));
541 eventHeader->SetEventTime(TTimeStamp(time_t(fTime_s), fTime_ns).AsDouble());
542 eventHeader->SetEventType(fCurEventType);
543 eventHeader->SetTripWord(isTripEvent);
544 eventHeader->SetTrigInfo(eventHeaderDAQ->GetTrigInfo());
545 eventHeader->SetTimeShift(fTimeShifts);
546 eventHeader->SetStartSignalInfo(fT0Time, fT0Width);
547 eventHeader->SetSpillStart(eventHeaderDAQ->GetSpillStart());
548 eventHeader->SetInputSignalsAR(eventHeaderDAQ->GetInputSignalsAR());
549 eventHeader->SetInputSignalsBR(eventHeaderDAQ->GetInputSignalsBR());
550 eventHeader->SetInputSignalsVector(move(eventHeaderDAQ->GetInputSignalsVector()));
551 eventHeader->SetSpillId(eventHeaderDAQ->GetSpillId());
552 eventHeader->SetSpillStartTS(eventHeaderDAQ->GetSpillStartTS());
553
554 if (fCurEventType == kBMNPEDESTAL) {
555 fPedEvCntrBySpill++;
556 if (fPedEvCntr < (fEvForPedestals - 1)) {
557 CopyDataToPedMap(fPedEvCntr);
558 fPedEvCntr++;
559 }
560 } else {
561 if ((fPrevEventType == kBMNPEDESTAL) && (fPedEvCntr == (fEvForPedestals - 1))) {
563#ifdef ADC_QA
564 FillAdcQa();
565#endif
566 }
567 if (fCurEventType == kBMNPAYLOAD) { // payload
568 timer.Start();
569 if (fCscMapper)
570 fCscMapper->FillEvent(adc32, csc);
571 timer.Stop();
572 // rtime = timer.RealTime();
573 // ctime = timer.CpuTime();
574 // printf("\nReal time %f s, CPU time %f s
575 // fCscMapper\n", rtime, ctime);
576 timer.Start();
577
578 // auto start = chrono::high_resolution_clock::now();
579 // auto stop = chrono::high_resolution_clock::now();
580 // clock_t c_start = clock();
581 if (fGemMapper)
582 fGemMapper->FillEvent(adc32, gem);
583 // clock_t c_stop = clock();
584 timer.Stop();
585 // rtime = timer.RealTime();
586 // ctime = timer.CpuTime();
587 // printf("Real time %2.6f s, CPU time %2.6f s fGemMapper\n", rtime, ctime);
588 // printf(" clock() CPU time %2.6f s fGemMapper\n",
589 // (Double_t)(c_stop-c_start)/CLOCKS_PER_SEC);
590 timer.Start();
591 if (fSiliconMapper)
592 fSiliconMapper->FillEvent(adc128, silicon);
593 timer.Stop();
594 // rtime = timer.RealTime();
595 // ctime = timer.CpuTime();
596 // printf("Real time %f s, CPU time %f s
597 // fSiliconMapper\n", rtime, ctime);
598 if (fSiBTMapper)
599 fSiBTMapper->FillEvent(adc64, sibt);
600 if (fVspMapper)
601 fVspMapper->FillEvent(vsp_raw, vsp, eventHeader);
602 // #endif
603 timer.Start();
604 if (fDchMapper)
605 fDchMapper->FillEvent(tdc, &fTimeShifts, dch, fT0Time);
606 timer.Stop();
607 // rtime = timer.RealTime();
608 // ctime = timer.CpuTime();
609 // printf("Real time %f s, CPU time %f s fDchMapper\n", rtime,
610 // ctime);
611 timer.Start();
612 if (fMwpcMapper)
613 fMwpcMapper->FillEvent(hrb, mwpc);
614 timer.Stop();
615 // rtime = timer.RealTime();
616 // ctime = timer.CpuTime();
617 // printf("Real time %f s, CPU time %f s fMwpcMapper\n", rtime,
618 // ctime);
619 timer.Start();
620 if (fTof400Mapper)
621 fTof400Mapper->FillEvent(tdc, &fTimeShifts, tof400);
622 timer.Stop();
623 // rtime = timer.RealTime();
624 // ctime = timer.CpuTime();
625 // printf("Real time %f s, CPU time %f s fTof400Mapper\n", rtime,
626 // ctime);
627
628 // Legacy
629 // timer.Start();
630 // // if (fTof700Mapper && fT0Time != 0. && fT0Width != 0.) fTof700Mapper->fillEvent(tdc,
631 // // &fTimeShifts, fT0Time, fT0Width, tof700);
632 // if (fTof700Mapper)
633 // fTof700Mapper->fillEvent(tdc, &fTimeShifts, fT0Time, fT0Width, tof700);
634 // timer.Stop();
635 // rtime = timer.RealTime();
636 // ctime = timer.CpuTime();
637 // printf("Real time %f s, CPU time %f s fTof700Mapper\n", rtime,
638 // ctime);
639 timer.Start();
640 if (fTof701Mapper)
641 fTof701Mapper->FillEvent(tdc, &fTimeShifts, tof701);
642 timer.Stop();
643 // rtime = timer.RealTime();
644 // ctime = timer.CpuTime();
645 // printf("Real time %f s, CPU time %f s fTof701Mapper\n", rtime,
646 // ctime);
647 timer.Start();
648 if (fZDCMapper)
649 fZDCMapper->fillEvent(adc, zdc);
650 timer.Stop();
651 // rtime = timer.RealTime();
652 // ctime = timer.CpuTime();
653 // printf("Real time %f s, CPU time %f s fZDCMapper\n", rtime,
654 // ctime);
655 timer.Start();
656 if (fScWallMapper)
657 fScWallMapper->fillEvent(adc, scwall);
658 timer.Stop();
659 // rtime = timer.RealTime();
660 // ctime = timer.CpuTime();
661 // printf("Real time %f s, CPU time %f s fScWallMapper\n", rtime,
662 // ctime);
663 timer.Start();
664 if (fFHCalMapper)
665 fFHCalMapper->fillEvent(adc, fhcal);
666 timer.Stop();
667 // rtime = timer.RealTime();
668 // ctime = timer.CpuTime();
669 // printf("Real time %f s, CPU time %f s fFHCalMapper\n", rtime,
670 // ctime);
671 timer.Start();
672 if (fHodoMapper)
673 fHodoMapper->fillEvent(tqdc_tdc, tqdc_adc, hodo);
674 timer.Stop();
675 // rtime = timer.RealTime();
676 // ctime = timer.CpuTime();
677 // printf("Real time %f s, CPU time %f s fHodoMapper\n", rtime,
678 // ctime);
679 timer.Start();
680 if (fNdetMapper)
681 fNdetMapper->fillEvent(tqdc_tdc, tqdc_adc, &fTimeShifts, ndet);
682 timer.Stop();
683 // rtime = timer.RealTime();
684 // ctime = timer.CpuTime();
685 // printf("Real time %f s, CPU time %f s fNdetMapper\n", rtime,
686 // ctime);
687 timer.Start();
688 if (fHgndMapper)
689 fHgndMapper->fillEvent(tdc_hgnd, eventHeader, hgnd);
690 timer.Stop();
691 // rtime = timer.RealTime();
692 // ctime = timer.CpuTime();
693 // printf("Real time %f s, CPU time %f s fHgndMapper\n", rtime,
694 // ctime);
695 timer.Start();
696 if (fECALMapper)
697 fECALMapper->fillEvent(adc, ecal);
698 timer.Stop();
699 // rtime = timer.RealTime();
700 // ctime = timer.CpuTime();
701 // printf("Real time %f s, CPU time %f s fECALMapper\n", rtime, ctime);
702 }
703 }
704 if (fMSCMapper && (fPeriodId < 8))
705 fMSCMapper->SumEvent7(msc, eventHeader, spillHeader, fPedEvCntrBySpill);
706
707 fDigiTree->Fill();
708#ifdef FILL_RMS
709 if (fCurEventType == kBMNPAYLOAD) { // testing RMS
710 printf("Test RMS. Exit");
711 break;
712 }
713#endif
714 if ((fCurEventType == kBMNPAYLOAD) && (fPrevEventType == kBMNPEDESTAL)) {
715 eventHeader->SetSpillStart(true);
716 fSpillCntr++;
717 LOGF(info, "Spill start# %3u iEntry %6d EventId %8u", fSpillCntr, iEv, fEventId);
718 } else
719 eventHeader->SetSpillStart(false);
720 fPrevEventType = fCurEventType;
721 if ((Long_t)fNSignalEvents >= fMaxEvent)
722 break;
723 }
724 {
725 for (UInt_t iSpillEntry = 0; iSpillEntry < NRawTreeSpills; ++iSpillEntry) {
727 fRawTreeSpills->GetEntry(iSpillEntry);
728 msc_copy->AbsorbObjects(msc);
729 t0_copy->AbsorbObjects(t0raw);
730 if (t0_copy->GetEntries()) {
731 // LOGF(info, "t0_copy entries %d ", t0_copy->GetEntries());
732 BmnT0Raw<kT0_BIN_BLOCK_WORDS>* dig = static_cast<BmnT0Raw<kT0_BIN_BLOCK_WORDS>*>(t0_copy->At(0));
733 LOG(info) << "T0 time " << BmnFunctionSet::TimePoint2String(dig->GetTime()) << " iEntry "
734 << iSpillEntry;
735 }
736 fDigiTreeSpills->Fill();
737 }
738 }
739#ifdef ADC_QA
740 SaveAdcQa();
741#endif
742 // if (fSiliconMapper) {
743 // fSiliconMapper->DrawDebugHists2D();
744 // // fSiliconMapper->DrawDebugHists();
745 // // fSiliconMapper->ClearDebugHists();
746 // // return kBMNSUCCESS;
747 // }
748 // Legacy
749 // if (fTof700Mapper) {
750 // fTof700Mapper->WriteSlewingResults();
751 // fDigiFileOut->cd();
752 // }
753 fRunEndTime = TTimeStamp(time_t(fTime_s), fTime_ns);
754 DigiRunHeader* runHeader = new DigiRunHeader(fPeriodId, fRunId, fRunStartTime, fRunEndTime);
755 runHeader->SetTrigConfig(rawRunHeader->GetTrigConfig());
756 runHeader->SetSpillMap(move(rawRunHeader->GetSpillMap()));
757 if (fTrigMapper) {
758 runHeader->T0Map() = fTrigMapper->T0Map();
759 runHeader->GetTrcBitMap() = fTrigMapper->GetTrcMap();
760 runHeader->GetScalerMap() = fTrigMapper->GetScalerMap();
761 }
762 if (fMSCMapper)
763 fMSCMapper->FillRunHeader(runHeader);
764 fDigiFileOut->WriteObject(runHeader, fDigiRunHdrName.Data());
765 fDigiFileOut->WriteObject(metadata, fMetadataName.Data());
766
767 std::printf(ANSI_COLOR_RED "\n=============== RUN" ANSI_COLOR_RESET);
768 std::printf(ANSI_COLOR_BLUE " %04d " ANSI_COLOR_RESET, fRunId);
769 std::printf(ANSI_COLOR_RED "SUMMARY ===============\n" ANSI_COLOR_RESET);
770 std::printf("START (event %u):\t%s\n", fStartEventId, fRunStartTime.AsString());
771 std::printf("FINISH (event %u):\t%s\n", fEventId, fRunEndTime.AsString());
772 std::printf("Total Events:\t%lu\nSignal Events:\t%lu\n", fNTotalEvents, fNSignalEvents);
773 std::printf(ANSI_COLOR_RED "================================================\n" ANSI_COLOR_RESET);
774
775 if (fRawTree)
776 fRawTree->Delete();
777 // fDigiTree->Write();
778 // if (fDigiTreeSpills) fDigiTreeSpills->Write();
779
780 fDigiFileOut->Write();
781 fDigiFileOut->Close();
782 delete runHeader;
783 fRootFileIn->Close();
784 Finalize();
785 return kBMNSUCCESS;
786}
787
789{
790 auto reg_fun = [&](TString name, TObject* ar) -> void {
791 fDigiTree->Branch(name, &ar);
792 LOGF(debug1, "Register branch: %s", name.Data());
793 return;
794 };
795 LoadConfig();
796 InitMappers(reg_fun);
797
798 fPedEvCntr = 0; // counter for pedestal events between two recalculations
799 fPedEvCntrBySpill = 0; // counter for pedestal events between two spills
800 fNoiseEvCntr = 0; // counter of event for noise channel detection
801 fPedEnough = kFALSE;
802 fNoiseEnough = kFALSE;
803 if (fUseCalibFile)
804 LoadCalibFile(fCalibFileName);
806 fNSignalEvents = 0;
807 fNTotalEvents = 0;
808 fSpillCntr = 0;
809 return kBMNSUCCESS;
810}
811
813{
814 Assignment_Fun("SYNC", &sync, fRawTree);
815 Assignment_Fun("ADC32", &adc32, fRawTree);
816 Assignment_Fun("ADC64", &adc64, fRawTree);
817 Assignment_Fun("ADC128", &adc128, fRawTree);
818 Assignment_Fun("ADC", &adc, fRawTree);
819 Assignment_Fun("VSP_RAW", &vsp_raw, fRawTree);
820 Assignment_Fun("TDC", &tdc, fRawTree);
821 Assignment_Fun("TQDC_ADC", &tqdc_adc, fRawTree);
822 Assignment_Fun("TQDC_TDC", &tqdc_tdc, fRawTree);
823 Assignment_Fun("TDC_HGND", &tdc_hgnd, fRawTree);
824 Assignment_Fun("HRB", &hrb, fRawTree);
825 Assignment_Fun("BmnEventHeader.", &eventHeaderDAQ, fRawTree);
826 if ((!isForwardMode) && (!isTaskMode)) {
827 fRawTreeSpills = (TTree*)fRootFileIn->Get("BMN_RAW_SPILLS");
828 rawRunHeader = static_cast<DigiRunHeader*>(fRootFileIn->Get(fRawRunHdrName));
829 metadata = static_cast<BmnMetadataRaw*>(fRootFileIn->Get(fMetadataName));
830 // printf("extracted raw tcc %lu after\n",
831 // rawRunHeader->GetTrigConfig().TrigChannelConfig().size());
832 }
833 if (fRawTreeSpills) {
834 Assignment_Fun("MSC", &msc, fRawTreeSpills);
835 Assignment_Fun("T0Raw", &t0raw, fRawTreeSpills);
836 // fRawTreeSpills->SetBranchAddress("MSC", &msc);
837 // fRawTreeSpills->SetBranchAddress("T0Raw", &t0raw);
838 }
839 return;
840}
841
843{
844 if (fGemMapper) {
845 fGemMapper->SetApplyThreshold(fApplyThreshold);
846 fGemMapper->SetEvForPedestals(fEvForPedestals);
847 }
848 if (fCscMapper) {
849 fCscMapper->SetApplyThreshold(fApplyThreshold);
850 fCscMapper->SetEvForPedestals(fEvForPedestals);
851 }
852 if (fSiliconMapper) {
853 fSiliconMapper->SetApplyThreshold(fApplyThreshold);
854 fSiliconMapper->SetEvForPedestals(fEvForPedestals);
855 }
856 if (fSiBTMapper) {
857 fSiBTMapper->SetApplyThreshold(fApplyThreshold);
858 fSiBTMapper->SetEvForPedestals(fEvForPedestals);
859 }
860 // if (fVspMapper) {
861 // fVspMapper->SetApplyThreshold(fApplyThreshold);
862 // fVspMapper->SetEvForPedestals(fEvForPedestals);
863 // }
864}
865
866void BmnDecoder::InitMappers(std::function<void(TString, TObject*)> branch_reg_fun)
867{
868 uint32_t run4init = (fRunId == UNKNOWN_RUNID) ? _dfl_run_id[fPeriodId] : fRunId;
869 fDigiTree =
870 new TTree(conf.get<string>("Decoder.DigiTreeName").c_str(), conf.get<string>("Decoder.DigiTreeTitle").c_str());
871 eventHeader = new BmnEventHeader();
872 Register_Fun("BmnEventHeader.", &eventHeader);
873 if (fRawTreeSpills) {
874 fDigiTreeSpills = new TTree("spill", "spill");
875 spillHeader = new BmnSpillHeader();
876 fDigiTreeSpills->Branch("BmnSpillHeader.", &spillHeader);
877 if (fPeriodId < 8)
878 fMSCMapper = new BmnMscRaw2Digit(fPeriodId, run4init, fMSCMapFileName, fRawTreeSpills, fDigiTreeSpills);
879 msc_copy = new TClonesArray(msc->GetClass());
880 fDigiTreeSpills->Branch("MSC", &msc_copy);
881 t0_copy = new TClonesArray(t0raw->GetClass());
882 fDigiTreeSpills->Branch("T0Raw", &t0_copy);
883 } else {
884 msc_copy = new TClonesArray(msc->GetClass());
885 t0_copy = new TClonesArray(t0raw->GetClass());
886 }
887
888 // check if detector is in setup and is active
889 if (fDetectorSetup.count(kBC) > 0 && fDetectorSetup.at(kBC) == 1) {
890 fTrigMapper = new BmnTrigRaw2Digit(fTrigPlaceMapFileName, fTrigChannelMapFileName, branch_reg_fun);
891 if (fT0Serial == 0) {
892 fT0Serial = fTrigMapper->GetT0Serial();
893 LOGF(info, "T0 serial 0x%X got from trig mapping (InitMappers)", fT0Serial);
894 }
895 fTrigMapper->SetSetup(fBmnSetup);
896 }
897
898 if (fDetectorSetup.count(kMWPC) > 0 && fDetectorSetup.at(kMWPC) == 1) {
899 mwpc = new TClonesArray("BmnMwpcDigit");
900 Register_Fun("MWPC", &mwpc);
901 fMwpcMapper = new BmnMwpcRaw2Digit(fMwpcMapFileName);
902 }
903
904 if (fDetectorSetup.count(kSILICON) > 0 && fDetectorSetup.at(kSILICON) == 1) {
905 silicon = new TClonesArray("BmnSiliconDigit");
906 Register_Fun("SILICON", &silicon);
907 fSiliconMapper = new BmnSiliconRaw2Digit(fPeriodId, run4init, fSiliconMapFileName, fBmnSetup);
908 fSiliconMapper->SetVerbose(0);
909#ifdef ADC_QA
910 fFsdQa = new BmnAdcQA(fPeriodId, run4init, "FSD");
911#endif
912 }
913
914 if (fDetectorSetup.count(kSiBT) > 0 && fDetectorSetup.at(kSiBT) == 1) {
915 sibt = new TClonesArray("BmnSiBTDigit");
916 Register_Fun("SiBT", &sibt);
917 fSiBTMapper = new BmnSiBTRaw2Digit(fPeriodId, run4init, fSiBTMapFileName, fBmnSetup);
918 }
919
920 if (fDetectorSetup.count(kGEM) > 0 && fDetectorSetup.at(kGEM) == 1) {
921 gem = new TClonesArray("BmnGemStripDigit");
922 Register_Fun("GEM", &gem);
923 fGemMapper = new BmnGemRaw2Digit(fPeriodId, run4init, fGemMapFileName, fBmnSetup);
924#ifdef ADC_QA
925 fGemQa = new BmnAdcQA(fPeriodId, run4init, "GEM");
926#endif
927 }
928
929 if (fDetectorSetup.count(kVSP) > 0 && fDetectorSetup.at(kVSP) == 1) {
930 LOGF(info, "---------- Init VSP mapper ----------");
931 vsp = new TClonesArray("BmnVSPDigit");
932 Register_Fun("VSP", &vsp);
933 fVspMapper = new BmnVspRaw2Digit(fPeriodId, run4init, fVspMapFileName, fBmnSetup);
934 }
935
936 if (fDetectorSetup.count(kTOF1) > 0 && fDetectorSetup.at(kTOF1) == 1) {
937 LOGF(info, "---------- Init TOF400 mapper ----------");
938 tof400 = new TClonesArray("BmnTof1Digit");
939 Register_Fun("TOF400", &tof400);
940 fTof400Mapper = new BmnTof1Raw2Digit();
941 fTof400Mapper->setVerbose(fVerbose);
942 Bool_t FlagTemp = fTof400Mapper->setRun(fPeriodId, run4init);
943 if (FlagTemp == kFALSE) {
944 if (fTof400PlaceMapFileName.Sizeof() > 1 && fTof400StripMapFileName.Sizeof() > 1) {
945 TString dir = Form("%s%s", getenv("VMCWORKDIR"), "/input/");
946 FlagTemp = fTof400Mapper->setMapFromFile(dir + fTof400PlaceMapFileName.Data(),
947 dir + fTof400StripMapFileName.Data());
948 }
949 }
950 LOGF(info, "---------- Initialization of TOF400 mapper finished ----------");
951 }
952
953 if (fDetectorSetup.count(kTOF701) > 0 && fDetectorSetup.at(kTOF701) == 1) {
954 LOGF(info, "---------- Init TOF701 mapper ----------");
955 tof701 = new TClonesArray("BmnTof701Digit");
956 Register_Fun("TOF701", &tof701);
957 fTof701Mapper = new BmnTof701Raw2Digit();
958 fTof701Mapper->setVerbose(fVerbose);
959 Bool_t FlagTemp = fTof701Mapper->setRun(fPeriodId, run4init);
960 if (FlagTemp == kFALSE) {
961 if (fTof701PlaceMapFileName.Sizeof() > 1 && fTof701StripMapFileName.Sizeof() > 1) {
962 TString dir = Form("%s%s", getenv("VMCWORKDIR"), "/input/");
963 FlagTemp = fTof701Mapper->setMapFromFile(dir + fTof701PlaceMapFileName.Data(),
964 dir + fTof701StripMapFileName.Data());
965 fTof701Mapper->setINLFromFile(Form("%s%s", dir.Data(), "TOF701_ListINLFiles_Run8.txt"));
966 }
967 }
968 LOGF(info, "---------- Initialization of TOF701 mapper finished ----------");
969 }
970
971 // Legacy
972 // if (fDetectorSetup.count(kTOF) > 0 && fDetectorSetup.at(kTOF) == 1) {
973 // LOGF(info, "---------- Init TOF700 mapper ----------");
974 // if (fTOF700ReferenceRun <= 0) {
975 // UniDetectorParameter* pDetectorParameter = UniDetectorParameter::GetDetectorParameter(
976 // "TOF2", "slewing_file_id", fPeriodId,
977 // run4init); //(detector_name, parameter_name, period_number, run_number)
978 // if (pDetectorParameter) {
979 // IntValue* pReferenceRun = (IntValue*)pDetectorParameter->GetValue();
980 // fTOF700ReferenceRun = pReferenceRun->value;
981 // delete pDetectorParameter;
982 // } else {
983 // LOGF(error, "Not found slewing run ID for run %d in DB", run4init);
984 // }
985 // }
986 // tof700 = new TClonesArray("BmnTof2Digit");
987 // Register_Fun("TOF700", &tof700);
988 // fTof700Mapper = new BmnTof2Raw2DigitNew(fTof700MapFileName, fRootFileName, fTOF700ReferenceRun,
989 // fTOF700ReferenceChamber, fTof700GeomFileName);
990 // for (int i = 0; i < 60; i++) {
991 // if (type_tof700_slewing[i]) {
992 // fTof700Mapper->SetSlewingReference(i + 1, refrun_tof700_slewing[i], refchamber_tof700_slewing[i]);
993 // }
994 // }
995 // // fTof700Mapper->readSlewingT0();
996 // // fTof700Mapper->readSlewingLimits();
997 // fTof700Mapper->readSlewing();
998 // fTof700Mapper->BookSlewingResults();
999 // LOGF(info, "---------- Initialization of TOF700 mapper finished ----------");
1000 // }
1001
1002 if (fDetectorSetup.count(kDCH) > 0 && fDetectorSetup.at(kDCH) == 1) {
1003 dch = new TClonesArray("BmnDchDigit");
1004 Register_Fun("DCH", &dch);
1005 fDchMapper = new BmnDchRaw2Digit(fPeriodId, run4init);
1006 }
1007
1008 if (fDetectorSetup.count(kZDC) > 0 && fDetectorSetup.at(kZDC) == 1) {
1009 zdc = new TClonesArray("BmnZDCDigit");
1010 Register_Fun("ZdcDigit", &zdc);
1011 fZDCMapper = new BmnZDCRaw2Digit(fPeriodId, run4init, fZDCMapFileName, fZDCCalibrationFileName);
1012 }
1013
1014 if (fDetectorSetup.count(kECAL) > 0 && fDetectorSetup.at(kECAL) == 1) {
1015 ecal = new TClonesArray("BmnECALDigit");
1016 Register_Fun("EcalDigit", &ecal);
1017 fECALMapper = new BmnECALRaw2Digit(run4init);
1018 }
1019
1020 if (fDetectorSetup.count(kSCWALL) > 0 && fDetectorSetup.at(kSCWALL) == 1) {
1021 LOG(info) << "scwall in setup";
1022 scwall = new TClonesArray("BmnScWallDigi");
1023 Register_Fun("ScWallDigi", &scwall);
1024 fScWallMapper = new BmnScWallRaw2Digit(fPeriodId, run4init, fScWallMapFileName, fScWallCalibrationFileName);
1025 fScWallMapper->print();
1026 }
1027
1028 if (fDetectorSetup.count(kFHCAL) > 0 && fDetectorSetup.at(kFHCAL) == 1) {
1029 LOG(info) << "fhcal in setup";
1030 fhcal = new TClonesArray("BmnFHCalDigi");
1031 Register_Fun("FHCalDigi", &fhcal);
1032 fFHCalMapper = new BmnFHCalRaw2Digit(fPeriodId, run4init, fFHCalMapFileName, fFHCalCalibrationFileName);
1033 fFHCalMapper->print();
1034 }
1035
1036 if (fDetectorSetup.count(kHODO) > 0 && fDetectorSetup.at(kHODO) == 1) {
1037 LOG(info) << "hodo in setup";
1038 hodo = new TClonesArray("BmnHodoDigi");
1039 Register_Fun("HodoDigi", &hodo);
1040 fHodoMapper =
1041 new BmnHodoRaw2Digit(fPeriodId, run4init, fHodoMapFileName.Data(), fHodoCalibrationFileName.Data());
1042 fHodoMapper->print();
1043 }
1044
1045 if (fDetectorSetup.count(kNDET) > 0 && fDetectorSetup.at(kNDET) == 1) {
1046 LOG(info) << "ndet in setup";
1047 ndet = new TClonesArray("BmnNdetDigi");
1048 Register_Fun("NdetDigi", &ndet);
1049 fNdetMapper = new BmnNdetRaw2Digit(fPeriodId, run4init, fNdetMapFileName, fNdetCalibrationFileName);
1050 fNdetMapper->print();
1051 }
1052
1053 if (fDetectorSetup.count(kHGND) > 0 && fDetectorSetup.at(kHGND) == 1) {
1054 LOG(info) << "hgnd in setup";
1055 hgnd = new TClonesArray("BmnHgndDigi");
1056 Register_Fun("HgndDigi", &hgnd);
1057 fHgndMapper = new BmnHgndRaw2Digit(fPeriodId, fRunId, fHgndMapFileName.Data(), fHgndCalibrationFileName.Data());
1058 fHgndMapper->print();
1059 }
1060
1061 if (fDetectorSetup.count(kCSC) > 0 && fDetectorSetup.at(kCSC) == 1) {
1062 csc = new TClonesArray("BmnCSCDigit");
1063 Register_Fun("CSC", &csc);
1064 fCscMapper = new BmnCscRaw2Digit(fPeriodId, run4init, fCscMapFileName, fBmnSetup);
1065#ifdef ADC_QA
1066 fCscQa = new BmnAdcQA(fPeriodId, run4init, "CSC");
1067#endif
1068 }
1069 return;
1070}
1071
1072BmnStatus BmnDecoder::LoadCalibFile(TString& FileName)
1073{
1074 TDirectory* temp_dir = gDirectory;
1075 fCalibFile = new TFile(FileName, "READ");
1076 if (fCalibFile)
1077 if (fCalibFile->IsOpen()) {
1078 if (fSiliconMapper)
1079 fSiliconMapper->LoadFilterInfo(fCalibFile);
1080 if (fGemMapper)
1081 fGemMapper->LoadFilterInfo(fCalibFile);
1082 if (fCscMapper)
1083 fCscMapper->LoadFilterInfo(fCalibFile);
1084 if (fSiBTMapper)
1085 fSiBTMapper->LoadFilterInfo(fCalibFile);
1086 // if (fVspMapper)
1087 // fVspMapper->LoadFilterInfo(fCalibFile);
1088 fCalibFile->Close();
1089 fPedEnough = kTRUE;
1090 fNoiseEnough = kTRUE;
1091 LOGF(info, "ADC calibration file loaded!");
1092 }
1093 gDirectory = temp_dir;
1094 return kBMNSUCCESS;
1095}
1096
1097BmnStatus BmnDecoder::SaveCalibFile(TString& FileName)
1098{
1099 fCalibFile = new TFile(FileName, "RECREATE");
1100 if (fCalibFile) {
1101 if (fSiliconMapper)
1102 fSiliconMapper->SaveFilterInfo(fCalibFile);
1103 if (fGemMapper)
1104 fGemMapper->SaveFilterInfo(fCalibFile);
1105 if (fCscMapper)
1106 fCscMapper->SaveFilterInfo(fCalibFile);
1107 if (fSiBTMapper)
1108 fSiBTMapper->SaveFilterInfo(fCalibFile);
1109 // if (fVspMapper)
1110 // fVspMapper->SaveFilterInfo(fCalibFile);
1111 fCalibFile->Close();
1112 LOGF(info, "ADC calibration file saved!");
1113 }
1114 return kBMNSUCCESS;
1115}
1116
1118{
1119 if (dch)
1120 dch->Delete();
1121 if (mwpc)
1122 mwpc->Delete();
1123 if (gem)
1124 gem->Delete();
1125 if (csc)
1126 csc->Delete();
1127 if (vsp)
1128 vsp->Delete();
1129 if (sibt)
1130 sibt->Delete();
1131 if (silicon)
1132 silicon->Delete();
1133 if (tof400)
1134 tof400->Delete();
1135 if (tof700)
1136 tof700->Delete();
1137 if (tof701)
1138 tof701->Delete();
1139 if (zdc)
1140 zdc->Delete();
1141 if (scwall)
1142 scwall->Delete();
1143 if (fhcal)
1144 fhcal->Delete();
1145 if (hodo)
1146 hodo->Delete();
1147 if (ndet)
1148 ndet->Delete();
1149 if (hgnd)
1150 hgnd->Delete();
1151 if (ecal)
1152 ecal->Delete();
1153 if (fTrigMapper)
1154 fTrigMapper->ClearArrays();
1155 fTimeShifts.clear();
1156 eventHeader->Clear();
1157}
1158
1160{
1161 if (spillHeader)
1162 spillHeader->Clear();
1163 if (msc_copy)
1164 msc_copy->Delete();
1165 if (t0_copy)
1166 t0_copy->Delete();
1167}
1168
1170{
1171 LOGF(info, "Starting to correct pedestal events");
1172 if (fGemMapper)
1173 fGemMapper->RecalculatePedestalsAugmented();
1174 if (fCscMapper)
1175 fCscMapper->RecalculatePedestalsAugmented();
1176 if (fSiliconMapper)
1177 fSiliconMapper->RecalculatePedestalsAugmented();
1178 if (fSiBTMapper)
1179 fSiBTMapper->RecalculatePedestalsAugmented();
1180 // if (fVspMapper)
1181 // fVspMapper->RecalculatePedestalsAugmented();
1182 fPedEvCntr = 0;
1183 fPedEnough = kTRUE;
1184 LOGF(info, "Finished correcting pedestal events");
1185}
1186
1188{
1189 if (fFsdQa) {
1190 UInt_t serial = 0x0AADD6E9;
1191 Int_t i_serial = fSiliconMapper->GetSerialMap()[serial];
1192 Int_t ch = 10;
1193 Int_t smpl = 3;
1194 fFsdQa->SetAveragePedestal(serial, ch, smpl, fSpillCntr, fSiliconMapper->GetPedestal(i_serial, ch, smpl));
1195 serial = 0x04E993A5;
1196 i_serial = fSiliconMapper->GetSerialMap()[serial];
1197 ch = 8;
1198 smpl = 5;
1199 fFsdQa->SetAveragePedestal(serial, ch, smpl, fSpillCntr, fSiliconMapper->GetPedestal(i_serial, ch, smpl));
1200 }
1201 if (fGemQa) {
1202 UInt_t serial = 0x0aad5333;
1203 Int_t i_serial = fGemMapper->GetSerialMap()[serial];
1204 Int_t ch = 47;
1205 Int_t smpl = 25;
1206 fGemQa->SetAveragePedestal(serial, ch, smpl, fSpillCntr, fGemMapper->GetPedestal(i_serial, ch, smpl));
1207 }
1208 if (fCscQa) {
1209 UInt_t serial = 0x0A7B2235;
1210 Int_t i_serial = fCscMapper->GetSerialMap()[serial];
1211 Int_t ch = 7;
1212 Int_t smpl = 14;
1213 fCscQa->SetAveragePedestal(serial, ch, smpl, fSpillCntr, fCscMapper->GetPedestal(i_serial, ch, smpl));
1214 }
1215}
1216
1218{
1219 if (fFsdQa)
1220 fFsdQa->SaveHists();
1221 if (fGemQa)
1222 fGemQa->SaveHists();
1223 if (fCscQa)
1224 fCscQa->SaveHists();
1225}
1226
1228{
1229 if (fGemMapper)
1230 fGemMapper->FillProfiles(adc32);
1231 if (fCscMapper)
1232 fCscMapper->FillProfiles(adc32);
1233 if (fSiliconMapper)
1234 fSiliconMapper->FillProfiles(adc128);
1235 // if (fVspMapper)
1236 // fVspMapper->FillProfiles(vsp_raw);
1237 // if (fSiBTMapper) fSiBTMapper->FillProfiles(adc64);
1238}
1239
1241{
1242 LOGF(info, "Marking noisy channels from signal events");
1243 if (fGemMapper)
1244 fGemMapper->FillNoisyChannels();
1245 if (fCscMapper) {
1246 // BmnRawDataDecoder::samplesCsc = 32;
1247 // BmnRawDataDecoder::threshCsc = 2;
1248 fCscMapper->FillNoisyChannels();
1249 }
1250 // if (fVspMapper) {
1251 // // BmnRawDataDecoder::samplesCsc = 32;
1252 // // BmnRawDataDecoder::threshCsc = 2;
1253 // fVspMapper->FillNoisyChannels();
1254 // }
1255 if (fSiliconMapper) {
1256 // extremely high picks
1260 fSiliconMapper->FillNoisyChannels();
1261
1262 // low groups of noisy channels
1266
1267 fSiliconMapper->FillNoisyChannels();
1268 }
1269 // if (fSiBTMapper) fSiBTMapper->FillNoisyChannels();
1270}
1271
1273{
1276 fCurEventType = eventHeaderDAQ->GetEventType();
1277 fEventId = eventHeaderDAQ->GetEventId();
1278 // LOGF(info, "iEv %6u fPedEnough %d, fNoiseEnough %d", fEventId, fPedEnough, fNoiseEnough);
1279 FillTimeShiftsMap();
1280 if ((fCurEventType == kBMNPAYLOAD) || (fCurEventType == kBMNPEDESTAL))
1281 fNTotalEvents++;
1282 if ((fCurEventType == kBMNPAYLOAD))
1283 fNSignalEvents++;
1284
1285 if (fVerbose > 0) {
1286 if ((fNSignalEvents % 5000 == 0) && ((fCurEventType == kBMNPAYLOAD) || (fCurEventType == kBMNPEDESTAL)))
1287 LOG(info) << "Digitization: " << fNSignalEvents << "/" << fNTotalEvents << "/" << fMaxEvent
1288 << " processed; Spill #" << fSpillCntr;
1289 }
1290 // printf("fCurEventType %d\n", fCurEventType);
1291 fT0Time = 0.;
1292 if (fTrigMapper) {
1293 fTrigMapper->FillEvent(tqdc_tdc, tqdc_adc, fTimeShifts);
1294 fTrigMapper->FillEvent(tdc, fTimeShifts);
1295 fT0Time = 0.0;
1296 fT0Width = 0.0;
1297 GetT0Info(fT0Time, fT0Width);
1298 }
1299 if ((fCurEventType == kBMNPEDESTAL)) {
1300 // if ((Int_t)fPedEvCntr == fEvForPedestals - 1)
1301 // return kBMNERROR; // FIX return!
1302 CopyDataToPedMap(fPedEvCntr++);
1303 } else if (fCurEventType == kBMNPAYLOAD) { // payload
1304 if (fPrevEventType == kBMNPEDESTAL) {
1305 if (fPedEvCntr >= fEvForPedestals - 1) {
1307 fPedEvCntr = 0;
1308 fPedEnough = true;
1309 }
1310 }
1311 if (fPedEnough) {
1312 if (fNoiseEnough) {
1313 if (fGemMapper)
1314 fGemMapper->FillEvent(adc32, gem);
1315 if (fCscMapper)
1316 fCscMapper->FillEvent(adc32, csc);
1317 if (fSiliconMapper)
1318 fSiliconMapper->FillEvent(adc128, silicon);
1319 if (fSiBTMapper)
1320 fSiBTMapper->FillEvent(adc64, sibt);
1321 } else {
1322 if (fCurEventType == kBMNPAYLOAD) {
1323 fNoiseEvCntr++;
1324 if (fVerbose > 0) {
1325 if (fNoiseEvCntr % 1000 == 0)
1326 LOG(info) << "Profile event #" << fNoiseEvCntr << "/" << fEvForNoiseCorr << ";";
1327 }
1328 FillProfiles();
1329 if (fNoiseEvCntr >= fEvForNoiseCorr) {
1330 LOGF(info, ANSI_COLOR_BLUE " Marking noisy channels" ANSI_COLOR_RESET);
1333 fNoiseEnough = true;
1334 }
1335 }
1336 }
1337 }
1338 if (fVspMapper)
1339 fVspMapper->FillEvent(vsp_raw, vsp);
1340 if (fDchMapper)
1341 fDchMapper->FillEvent(tdc, &fTimeShifts, dch, fT0Time);
1342 if (fMwpcMapper)
1343 fMwpcMapper->FillEvent(hrb, mwpc);
1344 if (fTof400Mapper)
1345 fTof400Mapper->FillEvent(tdc, &fTimeShifts, tof400);
1346 // Legacy
1347 // if (fTof700Mapper && fT0Time != 0. && fT0Width != 0.) fTof700Mapper->fillEvent(tdc, &fTimeShifts,
1348 // fT0Time, fT0Width, tof700);
1349 // if (fTof700Mapper)
1350 // fTof700Mapper->fillEvent(tdc, &fTimeShifts, fT0Time, fT0Width, tof700);
1351 if (fTof701Mapper)
1352 fTof701Mapper->FillEvent(tdc, &fTimeShifts, tof701);
1353 if (fZDCMapper)
1354 fZDCMapper->fillEvent(adc, zdc);
1355 if (fScWallMapper)
1356 fScWallMapper->fillEvent(adc, scwall);
1357 if (fFHCalMapper)
1358 fFHCalMapper->fillEvent(adc, fhcal);
1359 if (fHodoMapper)
1360 fHodoMapper->fillEvent(tqdc_tdc, tqdc_adc, hodo);
1361 if (fNdetMapper)
1362 fNdetMapper->fillEvent(tqdc_tdc, tqdc_adc, &fTimeShifts, ndet);
1363 if (fHgndMapper)
1364 fHgndMapper->fillEvent(tdc_hgnd, eventHeader, hgnd);
1365 if (fECALMapper)
1366 fECALMapper->fillEvent(adc, ecal);
1367 }
1368 fRunEndTime = TTimeStamp(time_t(fTime_s), fTime_ns);
1369 eventHeader->SetRunId(eventHeaderDAQ->GetRunId());
1370 eventHeader->SetEventId(eventHeaderDAQ->GetEventId());
1371 eventHeader->SetPeriodId(eventHeaderDAQ->GetPeriodId());
1372 eventHeader->SetEventTimeTS(fRunEndTime);
1373 eventHeader->SetEventTime(fRunEndTime.AsDouble());
1374 eventHeader->SetEventType(fCurEventType);
1375 eventHeader->SetTripWord(kFALSE);
1376 eventHeader->SetTrigInfo(eventHeaderDAQ->GetTrigInfo());
1377 eventHeader->SetTimeShift(fTimeShifts);
1378 eventHeader->SetStartSignalInfo(fT0Time, fT0Width);
1379 eventHeader->SetSpillStart(eventHeaderDAQ->GetSpillStart());
1380 eventHeader->SetInputSignalsAR(eventHeaderDAQ->GetInputSignalsAR());
1381 eventHeader->SetInputSignalsBR(eventHeaderDAQ->GetInputSignalsBR());
1382 eventHeader->SetInputSignalsVector(move(eventHeaderDAQ->GetInputSignalsVector()));
1383 eventHeader->SetSpillId(eventHeaderDAQ->GetSpillId());
1384 eventHeader->SetSpillStartTS(eventHeaderDAQ->GetSpillStartTS());
1385 // fDigiTree->Fill();
1386 if ((fCurEventType == kBMNPAYLOAD) && (fPrevEventType == kBMNPEDESTAL)) {
1387 eventHeader->SetSpillStart(true);
1388 LOGF(info, "spill start %u", eventHeader->GetSpillStart());
1389 } else
1390 eventHeader->SetSpillStart(false);
1391 fPrevEventType = fCurEventType;
1392 if (msc_copy)
1393 msc_copy->AbsorbObjects(msc);
1394 if (t0_copy)
1395 t0_copy->AbsorbObjects(t0raw);
1396 // LOGF(info, "Event type %u GEM %4d MSC %4d",(uint8_t)fCurEventType, gem->GetEntries(),
1397 // msc_copy->GetEntries());
1398 return kBMNSUCCESS;
1399}
1400
1402{
1403 if (fUseCalibFile && fNoiseEnough)
1404 SaveCalibFile(fCalibFileName);
1405 return kBMNSUCCESS;
1406}
1407
1408BmnStatus BmnDecoder::FillTimeShiftsMap()
1409{
1410 if (fT0Serial == 0)
1411 return kBMNERROR;
1412 fT0SyncTime = 0;
1413 for (Int_t i = 0; i < sync->GetEntriesFast(); ++i) {
1414 BmnSyncDigit* syncDig = (BmnSyncDigit*)sync->At(i);
1415 // if (fTrigMapper)
1416 // if (syncDig->GetSerial() == fTrigMapper->GetTrcSerial()) {
1417 // LOGF(debug, "TRC sync: %s", TTimeStamp(time_t(fTime_s), fTime_ns).AsString());
1418 // break;
1419 // }
1420 if (syncDig->GetSerial() == fT0Serial) {
1421 fT0SyncTime = syncDig->GetTime_ns() + syncDig->GetTime_sec() * 1000000000LL;
1422 fTime_s = syncDig->GetTime_sec();
1423 fTime_ns = syncDig->GetTime_ns();
1424 // printf("serial %08X sync: %s\n", syncDig->GetSerial(), TTimeStamp(time_t(fTime_s), fTime_ns).AsString());
1425 if (fRunStartTime == TimeZero) {
1426 fRunStartTime = TTimeStamp(time_t(fTime_s), fTime_ns);
1427 }
1428 LOGF(debug, "T0 sync: %s", TTimeStamp(time_t(fTime_s), fTime_ns).AsString());
1429 break;
1430 }
1431 }
1432 for (Int_t i = 0; i < sync->GetEntriesFast(); ++i) {
1433 BmnSyncDigit* syncDig = (BmnSyncDigit*)sync->At(i);
1434 Long64_t syncTime = (fT0SyncTime == 0.0) ? 0 : syncDig->GetTime_ns() + syncDig->GetTime_sec() * 1000000000LL;
1435 fTimeShifts.insert(pair<UInt_t, Long64_t>(syncDig->GetSerial(), syncTime - fT0SyncTime));
1436 }
1437 return kBMNSUCCESS;
1438}
1439
1440void BmnDecoder::CopyDataToPedMap(UInt_t ev)
1441{
1442 if (ev < fEvForPedestals) {
1443 if (fVerbose > 0)
1444 if (fPedEvCntr % 100 == 0 && fPedEvCntr > 0)
1445 cout << "Pedestal event #" << fPedEvCntr << "/" << fEvForPedestals << ";" << endl;
1446 if (fGemMapper)
1447 fGemMapper->CopyData2PedMap(adc32, ev);
1448 if (fSiliconMapper)
1449 fSiliconMapper->CopyData2PedMap(adc128, ev);
1450 if (fSiBTMapper)
1451 fSiBTMapper->CopyData2PedMap(adc64, ev);
1452 if (fCscMapper)
1453 fCscMapper->CopyData2PedMap(adc32, ev);
1454 // if (fVspMapper)
1455 // fVspMapper->CopyData2PedMap(vsp_raw, vsp);
1456 }
1457}
1458
1459// Legacy
1460// void BmnDecoder::SetTof700SlewingReference(Int_t chamber, Int_t refrun, Int_t refchamber)
1461// {
1462// if (chamber <= 0 || chamber > 60) {
1463// std::printf("Wrong slewing chamber number %d\n", chamber);
1464// return;
1465// }
1466// if (refchamber <= 0 || refchamber > 60) {
1467// std::printf("Wrong slewing reference chamber number %d\n", refchamber);
1468// return;
1469// }
1470// if (refrun < 0 || refrun > 9999) {
1471// std::printf("Wrong slewing reference run number %d\n", refrun);
1472// return;
1473// }
1474// refrun_tof700_slewing[chamber - 1] = refrun;
1475// refchamber_tof700_slewing[chamber - 1] = refchamber;
1476// type_tof700_slewing[chamber - 1] = 1;
1477// return;
1478// }
1479
1481{
1482 fRunId = 0;
1483 TPRegexp re(".+\\.root");
1484 TPRegexp re_data(".*\\w+_\\w+_\\w+_(\\d+)([^/]*)\\.data");
1485 if (re.MatchB(name)) {
1486 fRootFileIn = new TFile(name, "READ");
1487 if (fRootFileIn->IsOpen()) {
1488 BmnEventHeader* tempHdr = nullptr;
1489 TTree* RawTree = (TTree*)fRootFileIn->Get("BMN_RAW");
1490 if (RawTree) {
1491 RawTree->SetBranchAddress("BmnEventHeader.", &tempHdr);
1492 if (RawTree->GetEntriesFast()) {
1493 RawTree->GetEntry(0);
1494 fRunId = tempHdr->GetRunId();
1495 fRootFileName = name;
1496 }
1497 delete RawTree;
1498 }
1499 delete tempHdr;
1500 fRootFileIn->Close();
1501 }
1502 delete fRootFileIn;
1503 }
1504 if (fRunId > 0)
1505 return fRunId;
1506 if (fRunId <= 0) {
1507 // Int_t run = 0;
1508 // sscanf(&(((char *)name.Data())[strlen(name.Data())-9]), "%d", &run);
1509 re_data.Substitute(name, "$1");
1510
1511 // cout << name << endl;
1512
1513 return name.Atoi();
1514
1515 } else
1516 return fRunId;
1517}
1518
1519BmnStatus BmnDecoder::GetT0Info(Double_t& t0time, Double_t& t0width)
1520{
1521 vector<TClonesArray*>* trigArr = fTrigMapper->GetTrigArrays();
1522 BmnTrigDigit* dig = 0;
1523 for (auto ar : *trigArr) {
1524 if ((fPeriodId == 8) && (fBmnSetup == kSRCSETUP)) { // temporary crutches
1525 if ((fRunId >= 986) && (fRunId <= 1086)) {
1526 if ((strcmp(ar->GetName(), "BC2_1_A")))
1527 continue;
1528 } else {
1529 if ((strcmp(ar->GetName(), "T0_1_A")))
1530 continue;
1531 }
1532 } else {
1533 if (fPeriodId > 6) {
1534 if (fPeriodId == 8) {
1535 if (strcmp(ar->GetName(), "BC2AT"))
1536 continue;
1537 } else {
1538 if (strcmp(ar->GetName(), "BC2"))
1539 continue;
1540 }
1541 } else {
1542 if (strcmp(ar->GetName(), "T0"))
1543 continue;
1544 }
1545 }
1546 for (int i = 0; i < ar->GetEntriesFast(); i++) {
1547 dig = (BmnTrigDigit*)ar->At(i);
1548 if (dig->GetMod() == 0) {
1549 t0time = dig->GetTime();
1550 t0width = dig->GetAmp();
1551 // printf(" t0 %f t0w %f n %d\n", t0time, t0width, ar->GetEntriesFast());
1552 return kBMNSUCCESS;
1553 }
1554 }
1555 }
1556 return kBMNERROR;
1557}
1558
1560{
1561 TPRegexp re_data(".*\\w+_\\w+_\\w+_(\\d+)([^/]*)\\.data");
1562 TPRegexp re_raw(".*\\w+_run(\\d+)([^/]*)_raw\\.root");
1563 TString str(name);
1564 if (re_data.MatchB(str))
1565 re_data.Substitute(str, "$2");
1566 else {
1567 if (re_raw.MatchB(str))
1568 re_raw.Substitute(str, "$2");
1569 else
1570 return "";
1571 }
1572 return str;
1573}
1574
1575BmnStatus BmnDecoder::LoadConfig()
1576{
1577 LOGF(debug, "%s", __func__);
1578 if (fDecoderConfigFileName.length() == 0)
1579 fDecoderConfigFileName = string(getenv("VMCWORKDIR")) + "/config/bmnconf.json";
1580 pt::read_json(fDecoderConfigFileName, conf);
1581 fExportJsonBocks = conf.get<bool>("Decoder.ExportJson", false);
1582 fEvForPedestals = conf.get<Int_t>("Decoder.NEventsForPedestals", N_EV_FOR_PEDESTALS);
1583 fEvForNoiseCorr = conf.get<Int_t>("Decoder.NEventsForNoiseCorr", 20000);
1584 return kBMNSUCCESS;
1585}
1586
1588{
1589 switch (id) {
1590 case DetectorId::kBC:
1591 return fTrigMapper;
1592 case DetectorId::kCSC:
1593 return fCscMapper;
1594 case DetectorId::kFHCAL:
1595 return fFHCalMapper;
1596 case DetectorId::kGEM:
1597 return fGemMapper;
1598 case DetectorId::kHGND:
1599 return fHgndMapper;
1600 case DetectorId::kHODO:
1601 return fHodoMapper;
1602 case DetectorId::kNDET:
1603 return fNdetMapper;
1605 return fScWallMapper;
1607 return fSiliconMapper;
1608 case DetectorId::kSiBT:
1609 return fSiBTMapper;
1610 case DetectorId::kTOF1:
1611 return fTof400Mapper;
1613 return fTof701Mapper;
1614 case DetectorId::kVSP:
1615 return fVspMapper;
1616 default:
1617 LOGF(error, "Unsupported DetectorID");
1618 return nullptr;
1619 }
1620}
int i
Definition P4_F32vec4.h:22
DetectorId
@ kBC
@ kSILICON
@ kNDET
@ kGEM
@ kVSP
@ kHGND
@ kTOF1
@ kFHCAL
@ kSCWALL
@ kCSC
@ kMWPC
@ kTOF701
@ kDCH
@ kECAL
@ kSiBT
@ kZDC
@ kHODO
BmnStatus
Definition BmnEnums.h:24
@ kBMNERROR
Definition BmnEnums.h:26
@ kBMNSUCCESS
Definition BmnEnums.h:25
@ kSRCSETUP
Definition BmnEnums.h:91
@ kBMNSETUP
Definition BmnEnums.h:90
@ kBMNPAYLOAD
Definition BmnEnums.h:71
@ kBMNPEDESTAL
Definition BmnEnums.h:70
#define ANSI_COLOR_RED
Definition BmnMath.h:16
#define ANSI_COLOR_RESET
Definition BmnMath.h:18
#define ANSI_COLOR_BLUE
Definition BmnMath.h:17
BmnStatus RecalculatePedestalsAugmented()
Float_t GetPedestal(Int_t iSer, Int_t ch, Int_t smpl)
BmnStatus SaveFilterInfo(TFile *cTalibFile)
void CopyData2PedMap(TClonesArray *adc, UInt_t ev)
void SetVerbose(Int_t v)
unordered_map< UInt_t, Int_t > & GetSerialMap()
void SetEvForPedestals(UInt_t v)
void SetApplyThreshold(bool b)
BmnStatus LoadFilterInfo(TFile *cTalibFile)
void SetAveragePedestal(UInt_t ser, Int_t ch, Int_t smpl, Int_t spill_id, Double_t content)
Definition BmnAdcQA.cxx:17
void SaveHists()
Definition BmnAdcQA.cxx:31
BmnStatus FillNoisyChannels()
BmnStatus FillProfiles(TClonesArray *adc)
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *csc)
void FillEvent(TClonesArray *tdc, unordered_map< UInt_t, Long64_t > *ts, TClonesArray *dch, Double_t t0)
void InitMappers(std::function< void(TString, TObject *)> branch_reg_fun)
BmnStatus DecodeOffline()
TString GetSubNameAfterRunId(TString name)
BmnStatus DecodeDataToDigiIterate()
void ConfigureStripMappers()
void AssignInputs()
void ClearSpillDigiArrays()
void FillProfiles()
void * GetMapper(DetectorId id)
BmnStatus DecodeDataToDigi()
virtual ~BmnDecoder()
Int_t GetRunIdFromFile(TString name)
BmnStatus PreInitOffline()
void SaveAdcQa()
void FillNoisyChannels()
InitStatus ReInit()
void ClearDigiArrays()
void FillAdcQa()
void Exec(Option_t *opt)
BmnDecoder(TString file="", TString outfile="", ULong_t nEvents=0, ULong_t period=8)
void RecalculatePedestals()
BmnStatus Finalize()
BmnStatus InitDecoder()
InitStatus Init()
void fillEvent(TClonesArray *data, TClonesArray *ecaldigit)
vector< uint32_t > & GetInputSignalsVector()
void SetStartSignalInfo(Double_t time, Double_t width)
TTimeStamp GetSpillStartTS()
UInt_t GetPeriodId()
void SetEventType(BmnEventType event_type)
UInt_t GetInputSignalsBR()
UInt_t GetEventId()
void SetInputSignalsAR(UInt_t v)
Int_t & GetSpillId()
void SetTimeShift(unordered_map< UInt_t, Long64_t > time_shift)
void SetSpillStart(Bool_t flag)
void SetSpillStartTS(TTimeStamp ts)
void SetInputSignalsVector(vector< uint32_t > v)
void SetSpillId(UInt_t sid)
void SetEventTimeTS(TTimeStamp event_time)
Bool_t GetSpillStart()
void SetTripWord(Bool_t flag)
BmnTrigInfo & GetTrigInfo()
void SetTrigInfo(BmnTrigInfo &trig_info)
UInt_t GetInputSignalsAR()
void SetInputSignalsBR(UInt_t v)
void SetPeriodId(UInt_t period_id)
BmnEventType GetEventType()
void SetEventId(UInt_t event_id)
void fillEvent(TClonesArray *data, TClonesArray *FHCaldigit)
static std::string TimePoint2String(SysPoint p)
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *gem)
BmnStatus FillNoisyChannels()
BmnStatus FillProfiles(TClonesArray *adc)
void fillEvent(TClonesArray *tdc_data, BmnEventHeader *hdr, TClonesArray *digits)
void fillEvent(TClonesArray *tdc_data, TClonesArray *adc_data, TClonesArray *Hododigit)
BmnStatus SumEvent7(TClonesArray *msc, BmnEventHeader *hdr, BmnSpillHeader *sh, UInt_t &nPedEvBySpill)
void FillRunHeader(DigiRunHeader *rh)
void FillEvent(TClonesArray *hrb, TClonesArray *mwpc)
void fillEvent(TClonesArray *tdc_data, TClonesArray *adc_data, unordered_map< UInt_t, Long64_t > *mapTS, TClonesArray *Ndetdigit)
static double correctionSil
static double threshSil
void fillEvent(TClonesArray *data, TClonesArray *ScWalldigit)
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *sts)
BmnStatus FillProfiles(TClonesArray *adc)
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *sts)
UInt_t GetSerial() const
Long64_t GetTime_sec() const
Long64_t GetTime_ns() const
SysPoint GetTime()
Definition BmnT0Raw.h:92
void setVerbose(Int_t verbose)
Bool_t setRun(Int_t nPerion, Int_t nRun)
Bool_t setMapFromFile(TString placementMapFile, TString mapFile)
void FillEvent(TClonesArray *data, unordered_map< UInt_t, Long64_t > *mapTS, TClonesArray *tof1digit)
Bool_t setMapFromFile(TString placementMapFile, TString mapFile)
void setVerbose(Int_t verbose)
void FillEvent(TClonesArray *data, unordered_map< UInt_t, Long64_t > *mapTS, TClonesArray *Tof701digit)
Bool_t setRun(Int_t nPerion, Int_t nRun)
void setINLFromFile(std::string INLFile)
Double_t GetAmp() const
Double_t GetTime() const
Short_t GetMod() const
vector< TClonesArray * > * GetTrigArrays()
NameChMap & GetTrcMap()
Name2SerCh & GetScalerMap()
void SetSetup(BmnSetup stp)
BmnStatus FillEvent(TClonesArray *tdc, unordered_map< UInt_t, Long64_t > &tsMap)
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *digits, BmnEventHeader *eh=nullptr)
void fillEvent(TClonesArray *data, TClonesArray *zdcdigit)
void SetTrigConfig(BmnTrigConfig tc)
NameChMap & GetTrcBitMap()
Name2SerCh & GetScalerMap()
T0ChMap & T0Map()
BmnTrigConfig & GetTrigConfig()
void SetSpillMap(map< SysPoint, BmnSpillInfo > v)
map< SysPoint, BmnSpillInfo > & GetSpillMap()
#define N_EV_FOR_PEDESTALS
#define UNKNOWN_RUNID
Definition BmnDecoder.h:49