-
Administrator authored
Apply code formatting to all source/header files and root macros.
Administrator authoredApply code formatting to all source/header files and root macros.
MonitorMuch.C 4.41 KiB
/** @file Cern2017Monitor.C
** @author Pierre-Alain Loizeau <p.-a.loizeau@gsi.de>
** @date 26.07.2017
**
** ROOT macro to read tsa files which have been produced with StsXyter + DPB + FLIB
** Convert data into cbmroot format.
** Uses CbmFlibTestSource as source task.
*/
// In order to call later Finish, we make this global
FairRunOnline* run = NULL;
void MonitorMuch(TString inFile = "",
TString sHostname = "en02",
UInt_t uRunId = 0,
Int_t nEvents = -1,
Int_t iServerRefreshRate = 100,
Int_t iServerHttpPort = 8080,
TString sHistoFile = "data/MuchHistos.root") {
TString srcDir = gSystem->Getenv("VMCWORKDIR");
// --- Specify number of events to be produced.
// --- -1 means run until the end of the input file.
// Int_t nEvents = -1;
// --- Specify output file name (this is just an example)
TString parFile = "data/much_param.root";
// --- Set log output levels
FairLogger::GetLogger();
gLogger->SetLogScreenLevel("INFO");
//gLogger->SetLogScreenLevel("DEBUG");
gLogger->SetLogVerbosityLevel("LOW");
// --- Define parameter files
TList* parFileList = new TList();
TString paramDir = srcDir + "/macro/beamtime/mcbm2020/";
TString paramFileHodo = paramDir + "mMuchPar.par";
TObjString* tutDetDigiFileHodo = new TObjString(paramFileHodo);
parFileList->Add(tutDetDigiFileHodo);
// --- Set debug level
gDebug = 0;
std::cout << std::endl;
// ========================================================================
// ========================================================================
std::cout << std::endl;
std::cout << ">>> Cern2017Monitor: Initialising..." << std::endl;
// MUCH Gem Monitor
// CbmMcbm2018MonitorMuch* monitorMuch = new CbmMcbm2018MonitorMuch();
CbmMcbm2018MonitorMuchLite* monitorMuch = new CbmMcbm2018MonitorMuchLite();
monitorMuch->SetHistoFileName(sHistoFile);
// monitorSts->SetPrintMessage();
monitorMuch->SetMsOverlap(1);
// monitorMuch->SetEnableCoincidenceMaps( kFALSE );
// monitorSts->SetLongDurationLimits( 3600, 10 );
// monitorSts->SetLongDurationLimits( 7200, 60 );
// monitorSts->SetEnableCoincidenceMaps();
// monitorSts->SetCoincidenceBorder( 0.0, 200 );
// monitorSts->SetMuchMode();
/// Starting from first run on Monday 04/05/2020, MUCH uses bin sorter FW
if (811 <= uRunId) monitorMuch->SetBinningFwFlag(kTRUE);
// --- Source task
CbmMcbm2018Source* source = new CbmMcbm2018Source();
if ("" != inFile) {
source->SetFileName(inFile);
} // if( "" != inFile )
else {
source->SetHostName(sHostname);
} // else of if( "" != inFile )
source->AddUnpacker(monitorMuch, 0x40, ECbmModuleId::kMuch); // stsXyter DPBs
source->SetSubscriberHwm(10);
// --- Run
run = new FairRunOnline(source);
run->ActivateHttpServer(iServerRefreshRate,
iServerHttpPort); // refresh each 100 events
/// To avoid the server sucking all Histos from gROOT when no output file is used
/// ===> Need to explicitely add the canvases to the server in the task!
run->GetHttpServer()->GetSniffer()->SetScanGlobalDir(kFALSE);
run->SetAutoFinish(kFALSE);
// ----- Runtime database ---------------------------------------------
FairRuntimeDb* rtdb = run->GetRuntimeDb();
FairParAsciiFileIo* parIn = new FairParAsciiFileIo();
parIn->open(parFileList, "in");
rtdb->setFirstInput(parIn);
run->Init();
// --- Start run
TStopwatch timer;
timer.Start();
std::cout << ">>> MonitorSts: Starting run..." << std::endl;
// run->Run(nEvents, 0); // run until end of input file
if (nEvents <= 0) {
run->Run(nEvents, 0); // run until end of input file
} else {
run->Run(0, nEvents); // process N Events
}
timer.Stop();
std::cout << "Processed " << std::dec << source->GetTsCount() << " timeslices"
<< std::endl;
run->Finish();
// --- End-of-run info
Double_t rtime = timer.RealTime();
Double_t ctime = timer.CpuTime();
std::cout << std::endl << std::endl;
std::cout << ">>> MonitorSts: Macro finished successfully." << std::endl;
std::cout << ">>> MonitorSts: Real time " << rtime << " s, CPU time " << ctime
<< " s" << std::endl;
std::cout << std::endl;
/// --- Screen output for automatic tests
std::cout << " Test passed" << std::endl;
std::cout << " All ok " << std::endl;
}