/** @file Cern2017Monitor.C ** @author Pierre-Alain Loizeau ** @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 Cern2017MonitorBeta(TString inFile = "") { TString srcDir = gSystem->Getenv("VMCWORKDIR"); TString inDir = srcDir + "/input/"; if( "" != inFile ) inFile = inDir + inFile; // --- Specify number of events to be produced. // --- -1 means run until the end of the input file. // Int_t nEvents = 10000; Int_t nEvents = -1; // --- Specify output file name (this is just an example) TString outFile = "data/test.root"; TString parFile = "data/testparam.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 = "./"; TString paramFileSts = paramDir + "StsUnpackPar.par"; TObjString* tutDetDigiFileSts = new TObjString(paramFileSts); parFileList->Add(tutDetDigiFileSts); // --- Set debug level gDebug = 0; std::cout << std::endl; std::cout << ">>> Cern2017Monitor: output file is " << outFile << std::endl; // ======================================================================== // ======================================================================== std::cout << std::endl; std::cout << ">>> Cern2017Monitor: Initialising..." << std::endl; // Sts Monitor // CbmCern2017MonitorRawSts* monitorSts = new CbmCern2017MonitorRawSts(); CbmCern2017MonitorBetaSts* monitorSts = new CbmCern2017MonitorBetaSts(); // monitorSts->SetPrintMessage(); monitorSts->EnableChanHitDtPlot(); // monitorSts->SetPulserChannels( 0, 95, 1, 95, // 2, 95, 6, 27 ); // X-4 monitorSts->SetPulserChannels( 0, 95, 1, 95, 2, 27, 5, 27 ); // X-3 // monitorSts->SetPulserChannels( 0, 95, 1, 27, // 2, 27, 3, 27 ); // X-2 monitorSts->SetLongDurationLimits( 3600, 10 ); monitorSts->SetBetaFormatMode(); // --- Source task CbmFlibCern2016Source* source = new CbmFlibCern2016Source(); if( "" != inFile ) source->SetFileName(inFile); else { source->SetHostName( "cbmflib20"); source->SetPortNumber( 5556 ); } source->AddUnpacker(monitorSts, 0x10, 6); // stsXyter DPBs // --- Event header FairEventHeader* event = new CbmTbEvent(); event->SetRunId(1); // --- Run run = new FairRunOnline(source); run->SetOutputFile(outFile); run->SetEventHeader(event); run->ActivateHttpServer(100); // refresh each 100 events run->SetAutoFinish(kFALSE); // ----- Runtime database --------------------------------------------- FairRuntimeDb* rtdb = run->GetRuntimeDb(); Bool_t kParameterMerged = kTRUE; FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged); FairParAsciiFileIo* parIn = new FairParAsciiFileIo(); parOut->open(parFile.Data()); parIn->open(parFileList, "in"); rtdb->setFirstInput(parIn); rtdb->setOutput(parOut); run->Init(); // --- Start run TStopwatch timer; timer.Start(); std::cout << ">>> Cern2017Monitor: Starting run..." << std::endl; run->Run(nEvents, 0); // run until end of input file 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 << ">>> Cern2017Monitor: Macro finished successfully." << std::endl; std::cout << ">>> Cern2017Monitor: Output file is " << outFile << std::endl; std::cout << ">>> Cern2017Monitor: 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; }