Skip to content
Snippets Groups Projects

Draft: mCBM reco without event building before

Closed Pierre-Alain Loizeau requested to merge p.-a.loizeau/cbmroot:mcbm_no_event_reco into master

Files

/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Pierre-Alain Loizeau [committer], Adrian Weber */
// --- Includes needed for IDE
#include <RtypesCore.h>
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
#include <math.h>
#include <stdio.h>
#if !defined(__CLING__)
#include "CbmTrdRawMessageSpadic.h"
#include "CbmTrdSpadic.h"
#include <FairLogger.h>
#include <FairRootFileSink.h>
#include <FairRunOnline.h>
#include <Logger.h>
#include <TStopwatch.h>
#include <TSystem.h>
#endif
/// FIXME: Disable clang formatting to keep easy parameters overview
/* clang-format off */
Bool_t mcbm_event_anydigi(std::string infile,
UInt_t uRunId,
std::int32_t nTimeslices = -1,
bool bDigiEvtsOutput = false,
std::string sOutDir = "data/")
{
/// FIXME: Re-enable clang formatting after parameters initial values setting
/* clang-format on */
std::vector<std::string> vInFile = {infile};
// --- Logger settings ----------------------------------------------------
TString logLevel = "INFO";
TString logVerbosity = "LOW";
// ------------------------------------------------------------------------
// ----- Environment --------------------------------------------------
TString myName = "mcbm_event"; // this macro's name for screen output
TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory
// ------------------------------------------------------------------------
// ----- Output filename ----------------------------------------------
std::string suffix = ".events.root";
if (bDigiEvtsOutput) suffix = ".digievents.root";
std::string filename = Form("%d%s", uRunId, "_anydigi_") + suffix;
std::string outfilename = sOutDir + "/" + filename;
std::cout << "-I- " << myName << ": Output file will be " << outfilename << std::endl;
std::string histosfilename = sOutDir + "/" + filename;
if (bDigiEvtsOutput) { //
histosfilename.replace(histosfilename.find(suffix), suffix.size(), ".digievents.hist.root");
}
else {
histosfilename.replace(histosfilename.find(suffix), suffix.size(), ".events.hist.root");
}
std::cout << "-I- " << myName << ": Histos file will be " << histosfilename << std::endl;
// ------------------------------------------------------------------------
// --------------------event builder---------------------------------------
CbmTaskBuildRawEvents* evBuildRaw = new CbmTaskBuildRawEvents();
// Choose between NoOverlap, MergeOverlap, AllowOverlap
evBuildRaw->SetEventOverlapMode(EOverlapModeRaw::NoOverlap);
// Set Sliding window mode with any detector
// => Disable refdet search for seeds
evBuildRaw->SetReferenceDetector(kRawEventBuilderDetUndef);
// Remove detectors not there in 2022
evBuildRaw->RemoveDetector(kRawEventBuilderDetSts);
evBuildRaw->RemoveDetector(kRawEventBuilderDetMuch);
evBuildRaw->RemoveDetector(kRawEventBuilderDetTrd);
evBuildRaw->RemoveDetector(kRawEventBuilderDetTrd2D);
evBuildRaw->RemoveDetector(kRawEventBuilderDetRich);
evBuildRaw->RemoveDetector(kRawEventBuilderDetPsd);
// Add all 2022 detectors in the right order
evBuildRaw->AddDetector(kRawEventBuilderDetT0);
evBuildRaw->AddDetector(kRawEventBuilderDetSts);
evBuildRaw->AddDetector(kRawEventBuilderDetMuch);
evBuildRaw->AddDetector(kRawEventBuilderDetTrd);
evBuildRaw->AddDetector(kRawEventBuilderDetTrd2D);
evBuildRaw->AddDetector(kRawEventBuilderDetTof);
evBuildRaw->AddDetector(kRawEventBuilderDetRich);
// => Activate sliding window seed builder and set parameters
// (minDigis, WinDuration, DeadTime)
double_t dEvntInterval = 300.;
evBuildRaw->SetSlidingWindowSeedFinder(1, 1., dEvntInterval);
// => Set timeslice parameters to avoid fatal due to request for TimesliceMetaData
evBuildRaw->SetTsParameters(0.0, 1.28e8, 1.28e6);
// Add a detector on which the seed finder will operate
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetT0);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetSts);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetMuch);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetTrd);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetTrd2D);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetTof);
evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetRich);
// Use standard MUCH digis
evBuildRaw->ChangeMuchBeamtimeDigiFlag();
// Pick any digi within "event" interval
/// FIXME: Disable clang formatting to keep easy parameters overview
/* clang-format off */
evBuildRaw->SetTriggerWindow(ECbmModuleId::kT0, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kSts, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kMuch, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kTrd, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kTrd2d, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kTof, -0.001, dEvntInterval);
evBuildRaw->SetTriggerWindow(ECbmModuleId::kRich, -0.001, dEvntInterval);
/// FIXME: Re-enable clang formatting after parameters initial values setting
/* clang-format on */
// Enable DigiEvent output if requested
if (bDigiEvtsOutput) {
evBuildRaw->SetDigiEventOutput();
evBuildRaw->SetDigiEventExclusiveTrdExtraction();
}
evBuildRaw->SetOutFilename(histosfilename);
// evBuildRaw->SetOutputBranchPersistent("CbmEvent", kFALSE);
evBuildRaw->SetWriteHistosToFairSink(kFALSE);
// ------------------------------------------------------------------------
// In general, the following parts need not be touched
// ========================================================================
// ----- Timer --------------------------------------------------------
TStopwatch timer;
timer.Start();
// ------------------------------------------------------------------------
// ----- FairRunAna ---------------------------------------------------
auto run = new FairRunAna();
auto inputSource = new FairFileSource(infile);
run->SetSource(inputSource);
auto sink = new FairRootFileSink(outfilename.data());
run->SetSink(sink);
run->SetRunId(uRunId);
run->AddTask(evBuildRaw);
// ------------------------------------------------------------------------
// ----- Logger settings ----------------------------------------------
FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data());
FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data());
// ------------------------------------------------------------------------
// ----- Run initialisation -------------------------------------------
std::cout << std::endl;
std::cout << "-I- " << myName << ": Initialise run" << std::endl;
run->Init();
// ------------------------------------------------------------------------
// ----- Start run ----------------------------------------------------
std::cout << std::endl << std::endl;
if (nTimeslices < 0) {
std::cout << "-I- " << myName << ": Starting run over all timeslices in input" << std::endl;
run->Run(0, -1);
}
else {
std::cout << "-I- " << myName << ": Starting run over " << nTimeslices
<< " timeslices (or less if not enough in input)" << std::endl;
run->Run(0, nTimeslices);
}
// ------------------------------------------------------------------------
// ----- Finish -------------------------------------------------------
timer.Stop();
std::cout << "Macro finished successfully." << std::endl;
std::cout << "After CpuTime = " << timer.CpuTime() << " s RealTime = " << timer.RealTime() << " s." << std::endl;
// ------------------------------------------------------------------------
return kTRUE;
} // End of main macro function
Loading