12#include "FairLogger.h"
14#include "BmnADCDigit.h"
16#include "BmnGemStripDigit.h"
17#include "BmnHRBDigit.h"
18#include "BmnMSCDigit.h"
20#include "BmnSyncDigit.h"
21#include "BmnTDCDigit.h"
22#include "BmnTQDCADCDigit.h"
23#include "BmnTrigDigit.h"
24#include "DigiRunHeader.h"
26#include "UniDetectorParameter.h"
27#include "UniRawFile.h"
159 if (fRootFileName !=
"") {
161 fRunId = GetRunIdFromFile(fRootFileName);
162 TString subName = GetSubNameAfterRunId(file);
163 std::printf(
"RunId %d got from the RawRoot file (BmnDecoder ctor)\n", fRunId);
164 fDigiFileName = (outfile ==
"") ?
Form(
"bmn_run%d%s_digi.root", fRunId, subName.
Data()) : outfile;
165 if (fRootFileName.Length()) {
168 Int_t lastSlash = fDigiFileName.Last(
'/');
170 fRootFileName =
Form(
"%sbmn_run%d%s_raw.root", digiPath.
Data(), fRunId, subName.
Data());
174 LOGF(debug,
"Creating decoder without input file.");
276 FairRootManager* frm = FairRootManager::Instance();
282 frm->Register(name, name +
"_dir",
static_cast<TClonesArray*
>(ar), save_output);
284 frm->Register(name, name +
"_dir",
static_cast<TNamed*
>(ar), save_output);
285 LOG(debug1) <<
"Register by class " << cl->
GetName() <<
" : " << name;
324 LOGF(error,
"\n!!!!\ncannot open file %s \nDecodeDataToDigi stopped\n!!!!",
fRootFileName.Data());
355 std::printf(
"[INFO] Searching for pedestal events\n");
376 LOGF(info,
"Found a total of %d pedestal events",
fPedEvCntr);
398 std::printf(
"[INFO] Searching for signal events\n");
424 LOGF(info,
"Found a total of %d payload events",
fNoiseEvCntr);
434 vector<UInt_t> startTripEvent;
435 vector<UInt_t> endTripEvent;
483 std::printf(
"[INFO]");
493 if (iEv != 0 && iEv % 2500 == 0)
494 LOGF(info,
"Decoded %7lld events. EventId %7lld", iEv,
fEventId);
506 for (
size_t iTrip = 0; iTrip < startTripEvent.size(); ++iTrip) {
517 <<
" processed; Spill #" <<
fSpillCntr << endl;
580 printf(
"Test RMS. Exit");
595 for (UInt_t iSpillEntry = 0; iSpillEntry <
NRawTreeSpills; ++iSpillEntry) {
626 printf(
"runHeader %p\n", (
void*)runHeader);
684 LOGF(debug1,
"Register branch: %s", name.
Data());
762 new TTree(
conf.get<
string>(
"Decoder.DigiTreeName").c_str(),
conf.get<
string>(
"Decoder.DigiTreeTitle").c_str());
785 LOGF(info,
"T0 serial 0x%X got from trig mapping (InitMappers)",
fT0Serial);
792 LOGF(info,
"T0 serial 0x%X got from trig mapping (InitMappers)",
fT0Serial);
830 LOGF(info,
"---------- Init VSP mapper ----------");
837 LOGF(info,
"---------- Init TOF400 mapper ----------");
845 TString dir =
Form(
"%s%s", getenv(
"VMCWORKDIR"),
"/input/");
850 LOGF(info,
"---------- Initialization of TOF400 mapper finished ----------");
854 LOGF(info,
"---------- Init TOF701 mapper ----------");
862 TString dir =
Form(
"%s%s", getenv(
"VMCWORKDIR"),
"/input/");
868 LOGF(info,
"---------- Initialization of TOF701 mapper finished ----------");
921 LOG(info) <<
"scwall in setup";
930 LOG(info) <<
"fhcal in setup";
938 LOG(info) <<
"hodo in setup";
947 LOG(info) <<
"ndet in setup";
955 LOG(info) <<
"hgnd in setup";
992 LOGF(info,
"ADC calibration file loaded!");
1013 LOGF(info,
"ADC calibration file saved!");
1072 LOGF(info,
"Starting to correct pedestal events");
1085 LOGF(info,
"Finished correcting pedestal events");
1091 UInt_t serial = 0x0AADD6E9;
1096 serial = 0x04E993A5;
1103 UInt_t serial = 0x0aad5333;
1110 UInt_t serial = 0x0A7B2235;
1143 LOGF(info,
"Marking noisy channels from signal events");
1271 LOGF(info,
"spill start %u",
eventHeader->GetSpillStart());
1367 TPRegexp re_data(
".*\\w+_\\w+_\\w+_(\\d+)([^/]*)\\.data");
1377 fRunId = tempHdr->GetRunId();
1404 vector<TClonesArray*>* trigArr =
fTrigMapper->GetTrigArrays();
1406 for (
auto ar : *trigArr) {
1409 if ((strcmp(ar->GetName(),
"BC2_1_A")))
1412 if ((strcmp(ar->GetName(),
"T0_1_A")))
1418 if (strcmp(ar->GetName(),
"BC2AT"))
1421 if (strcmp(ar->GetName(),
"BC2"))
1425 if (strcmp(ar->GetName(),
"T0"))
1429 for (
int i = 0;
i < ar->GetEntriesFast();
i++) {
1431 if (dig->
GetMod() == 0) {
1444 TPRegexp re_data(
".*\\w+_\\w+_\\w+_(\\d+)([^/]*)\\.data");
1445 TPRegexp re_raw(
".*\\w+_run(\\d+)([^/]*)_raw\\.root");
1460 LOGF(debug,
"%s", __func__);
1500 LOGF(error,
"Unsupported DetectorID");
char * Form(const char *fmt,...)
BmnStatus
Define status code.
@ kBMNPAYLOAD
spill event.
@ kBMNPEDESTAL
pedestal event.
void InitMappers(std::function< void(TString, TObject *)> branch_reg_fun)
TString fTrigChannelMapFileName
BmnStatus DecodeOffline()
void Assignment_Fun(const TString name, BrType **ob, TTree *tree=nullptr)
TString GetSubNameAfterRunId(TString name)
TString fTof701StripMapFileName
BmnStatus FillTimeShiftsMap()
TString fSiliconMapFileName
BmnDchRaw2Digit * fDchMapper
TString fScWallCalibrationFileName
TString fTrigPlaceMapFileName
TString fTof701PlaceMapFileName
BmnStatus DecodeDataToDigiIterate()
void ConfigureStripMappers()
BmnGemRaw2Digit * fGemMapper
void CopyDataToPedMap(UInt_t ev)
TString fHgndCalibrationFileName
BmnECALRaw2Digit * fECALMapper
Int_t fTOF700ReferenceChamber
DigiRunHeader * rawRunHeader
BmnEventHeader * eventHeader
BmnStatus GetT0Info(Double_t &t0time, Double_t &t0width)
BmnStatus SaveCalibFile(TString &FileName)
BmnStatus LoadCalibFile(TString &FileName)
BmnMscRaw2Digit * fMSCMapper
BmnTof701Raw2Digit * fTof701Mapper
BmnHgndRaw2Digit * fHgndMapper
TString fNdetCalibrationFileName
void ClearSpillDigiArrays()
BmnSpillHeader * spillHeader
BmnFHCalRaw2Digit * fFHCalMapper
map< uint32_t, uint32_t > _dfl_run_id
BmnNdetRaw2Digit * fNdetMapper
TString fScWallMapFileName
TString fTof400PlaceMapFileName
BmnSiBTRaw2Digit * fSiBTMapper
Int_t fTOF700ReferenceRun
BmnEventHeader * eventHeaderDAQ
void * GetMapper(DetectorId id)
TString fTof700MapFileName
std::map< DetectorId, bool > fDetectorSetup
TString fHodoCalibrationFileName
unordered_map< UInt_t, Long64_t > fTimeShifts
BmnEventType fCurEventType
BmnStatus DecodeDataToDigi()
BmnEventType fPrevEventType
Int_t GetRunIdFromFile(TString name)
string fDecoderConfigFileName
BmnStatus PreInitOffline()
TString fZDCCalibrationFileName
TString fFHCalMapFileName
BmnSiliconRaw2Digit * fSiliconMapper
BmnTof1Raw2Digit * fTof400Mapper
void Register_Fun(const TString name, BrType **ob)
BmnVspRaw2Digit * fVspMapper
BmnDecoder(TString file="", TString outfile="", ULong_t nEvents=0, ULong_t period=8)
const TTimeStamp TimeZero
void RecalculatePedestals()
BmnMetadataRaw * metadata
TString fFHCalCalibrationFileName
TString fECALCalibrationFileName
TString fTof400StripMapFileName
BmnCscRaw2Digit * fCscMapper
BmnZDCRaw2Digit * fZDCMapper
BmnHodoRaw2Digit * fHodoMapper
BmnScWallRaw2Digit * fScWallMapper
BmnTrigRaw2Digit * fTrigMapper
TString fTof700GeomFileName
BmnMwpcRaw2Digit * fMwpcMapper
static std::string TimePoint2String(SysPoint p)
static double correctionSil
Long64_t GetTime_sec() const
Long64_t GetTime_ns() const
T0 module spill settings and counts.
static TClass * GetClass(Bool_t load=kTRUE, Bool_t silent=kFALSE)
const char * GetName() const override
Bool_t MatchB(const TString &s, const TString &mods="", Int_t start=0, Int_t nMaxMatch=10)
Int_t Substitute(TString &s, const TString &replace, const TString &mods="", Int_t start=0, Int_t nMatchMax=10)
static constexpr Ssiz_t kNPOS
const char * Data() const
Double_t AsDouble() const
const char * AsString(const Option_t *option="") const
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
virtual Long64_t GetEntriesFast() const
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
#define N_EV_FOR_PEDESTALS
#define PRINT_DETECTOR_TIMERS(DetMapper)
#define FILL_DETECTOR(DetMapper,...)
Double_t Min(Double_t a, Double_t b)