26#include "TInterpreter.h"
27#include "TApplication.h"
39#include "TStopwatch.h"
40#include "TTimeStamp.h"
43#include "TGo4LockGuard.h"
44#include "TGo4CommandInvoker.h"
45#include "TGo4Ratemeter.h"
46#include "TGo4AnalysisCommandList.h"
48#include "TGo4WinCond.h"
49#include "TGo4PolyCond.h"
50#include "TGo4ShapedCond.h"
51#include "TGo4ListCond.h"
52#include "TGo4RollingGraph.h"
57#include "TGo4AnalysisObjectNames.h"
58#include "TGo4AnalysisStatus.h"
61#include "TGo4AnalysisClientImp.h"
63#include "TGo4DynamicListException.h"
64#include "TGo4Condition.h"
65#include "TGo4Parameter.h"
66#include "TGo4ObjEnvelope.h"
67#include "TGo4EventElement.h"
68#include "TGo4EventProcessor.h"
69#include "TGo4EventErrorException.h"
70#include "TGo4EventTimeoutException.h"
71#include "TGo4EventEndException.h"
73#include "TGo4EventStoreException.h"
91 void InstallGo4CtrlCHandler(
bool on);
114 GO4TRACE((14,
"TGo4Analysis::Instance()",__LINE__, __FILE__));
178 GO4TRACE((15,
"TGo4Analysis::TGo4Analysis(const char *)",__LINE__, __FILE__));
217 GO4TRACE((15,
"TGo4Analysis::TGo4Analysis(const char *)",__LINE__, __FILE__));
228 Message(-1,
"!!!! Analysis Base class:\n\t User Analysis was built with wrong \t\tGo4 Buildversion %d !!!!!",
231 Message(-1,
"\t >>make clean all<<");
232 Message(-1,
"Aborting in 20 s...");
233 gSystem->Sleep(20000);
241 gROOT->SetBatch(kTRUE);
263 InstallGo4CtrlCHandler(
true);
268 Message(2,
"Analysis BaseClass ctor -- analysis singleton already exists !!!");
271 if (
auto theI = gROOT->GetInterpreter())
272 theI->SetProcessLineLock(kTRUE);
274 gROOT->ProcessLineSync(
"TGo4Analysis *go4 = TGo4Analysis::Instance();");
275 gROOT->ProcessLineSync(TString::Format(
".x %s",
TGo4Log::subGO4SYS(
"macros/anamacroinit.C").Data()).Data());
283 InstallGo4CtrlCHandler(
false);
288 GO4TRACE((15,
"TGo4Analysis::~TGo4Analysis()",__LINE__, __FILE__));
300 gROOT->ProcessLineSync(TString::Format(
".x %s",
TGo4Log::subGO4SYS(
"macros/anamacroclose.C").Data()).Data());
316 if (gApplication) gApplication->Terminate();
331 GO4TRACE((14,
"TGo4Analysis::InitEventClasses()",__LINE__, __FILE__));
340 TGo4Log::Info(
"Analysis -- Initializing EventClasses done.");
354 TGo4Log::Info(
"Analysis BaseClass -- EventClasses were already initialized.");
363 GO4TRACE((11,
"TGo4Analysis::MainCycle()",__LINE__, __FILE__));
405 GO4TRACE((11,
"TGo4Analysis::UserEventFunc()",__LINE__, __FILE__));
416 GO4TRACE((11,
"TGo4Analysis::Process()",__LINE__, __FILE__));
425 gSystem->ProcessEvents();
437 TDirectory::TContext ctxt(gROOT);
454 Message(2,
"Analysis %s TIMEOUT for eventsource %s:%s.",
461 Message(2,
"End of event source %s: name:%s - msg:%s",
473 Int_t prio=ex.GetPriority();
482 Message(3,
"Analysis %s ERROR: %s from event source %s:\n %s",
520 Message(3,
"Analysis %s ERROR: %s from dynamic list entry %s:%s",
521 GetName(),ex.GetStatusMessage(),
522 ex.GetEntryName(), ex.GetEntryClass());
536 Message(3,
"Analysis %s ERROR: %s in Analysis Step %s",
537 GetName(), ex.GetStatusMessage(), ex.GetStepName());
551 if(strlen(ex.GetMessage()) != 0)
552 Message(ex.GetPriority(),
"%s", ex.GetMessage());
562 catch(std::exception& ex)
564 Message(3,
"Analysis %s got standard exception %s",
GetName(), ex.what());
580 GO4TRACE((11,
"TGo4Analysis::RunImplicitLoop(Int_t)",__LINE__, __FILE__));
583 if (process_event_interval>1.) process_event_interval = 1.;
588 Bool_t userate = showrate || (process_event_interval > 0.);
589 Bool_t process_events = kFALSE;
591 fxRate->SetUpdateInterval(process_event_interval > 0. ? process_event_interval : 1.);
592 if (showrate)
fxRate->Reset();
594 TTimeStamp last_update;
599 Message(1,
"Analysis loop for %d cycles is starting...", times);
601 Message(1,
"Analysis loop is starting...");
605 if ((times > 0) && (cnt >= times)) {
614 if (userate &&
fxRate->Update(nextcnt)) {
616 process_events = kTRUE;
618 bool need_update =
false;
620 if ((now.AsDouble() - last_update.AsDouble()) >= 1.) {
621 last_update = now; need_update =
true;
628 fxRate->SetDateTime(dt.AsSQLString());
634 fxRate->SetCurrentSource(
"- No event source -");
648 if (process_events) {
650 process_events = kFALSE;
651 gSystem->ProcessEvents();
686 Message(1,
"End of event source %s: name:%s msg:%s",ex.GetSourceClass(), ex.GetSourceName(),ex.GetErrMess());
730 Message(3,
"%s", ex.GetErrMess());
743 Message(3,
"%s", ex.GetErrMess());
761 Message(1,
"!!! Unexpected exception in %d cycle !!!", cnt);
771 Message(1,
"Analysis implicit Loop has finished after %d cycles.", cnt);
779 Message(1,
"%s appeared in %d cycle.", ex.
What(), cnt);
782 catch(std::exception &ex) {
783 Message(1,
"standard exception %s appeared in %d cycle.", ex.what(), cnt);
786 Message(1,
"!!! Unexpected exception in %d cycle !!!", cnt);
790 printf(
"\n"); fflush(stdout);
802 GO4TRACE((11,
"TGo4Analysis::RemoveDynamicEntry(const char *, const char *)",__LINE__, __FILE__));
813 GO4TRACE((11,
"TGo4Analysis::UpdateStatus(TGo4AnalysisStatus*)",__LINE__, __FILE__));
827 GO4TRACE((11,
"TGo4Analysis::SetStatus(TGo4AnalysisStatus*)",__LINE__, __FILE__));
843 GO4TRACE((11,
"TGo4Analysis::LoadStatus(const char *)",__LINE__, __FILE__));
852 TFile *statusfile = TFile::Open(fname.Data(),
"READ");
853 if(statusfile && statusfile->IsOpen()) {
857 TIter iter(statusfile->GetListOfKeys());
859 while ((key = (TKey *)iter()) !=
nullptr) {
860 if (strcmp(key->GetClassName(),
"TGo4AnalysisStatus") == 0)
break;
868 Message(1,
"Analysis %s: Found status object %s in file %s",
869 GetName(), state->GetName(), fname.Data());
872 Message(0,
"Analysis: New analysis state is set.");
875 Message(3,
"Analysis LoadStatus: Could not find status %s in file %s",
GetName(), fname.Data());
879 Message(3,
"Analysis LoadStatus: Failed to open file %s", fname.Data());
890 GO4TRACE((11,
"TGo4Analysis::SaveStatus(const char *)",__LINE__, __FILE__));
893 memset(buffer, 0,
sizeof(buffer));
895 strncpy(buffer, filename,
sizeof(buffer)-10);
900 auto statusfile = TFile::Open(buffer,
"RECREATE");
901 if(statusfile && statusfile->IsOpen()) {
909 Message(-1,
"Analysis SaveStatus: Saved Analysis settings to file %s", buffer);
911 Message(3,
"Analysis SaveStatus: FAILED to create status object !!!");
915 Message(3,
"Analysis SaveStatus: Failed to open file %s ",
927 GO4TRACE((11,
"TGo4Analysis::CreateStatus()",__LINE__, __FILE__));
929 TDirectory::TContext ctxt(gROOT);
937 GO4TRACE((11,
"TGo4Analysis::CreateWebStatus()",__LINE__, __FILE__));
939 TDirectory::TContext ctxt(gROOT);
955 GO4TRACE((11,
"TGo4Analysis::CreateSingleEventTree(TGo4EventElement *)",__LINE__, __FILE__));
957 return event ?
event->CreateSampleTree(&
fxSampleEvent) :
nullptr;
962 GO4TRACE((11,
"TGo4Analysis::CreateSingleEventTree(const char *, Bool_t)",__LINE__, __FILE__));
974 GO4TRACE((14,
"TGo4Analysis::CloseAnalysis()",__LINE__, __FILE__));
987 GO4TRACE((11,
"TGo4Analysis:PreLoop()",__LINE__, __FILE__));
992 for (Int_t num = 0; num <
fxStepManager->GetNumberOfAnalysisSteps(); num++) {
994 if (
auto proc = step->GetEventProcessor())
1004 GO4TRACE((11,
"TGo4Analysis::PostLoop()",__LINE__, __FILE__));
1016 for (Int_t num = 0; num <
fxStepManager->GetNumberOfAnalysisSteps(); num++) {
1018 if (
auto proc = step->GetEventProcessor())
1019 proc->UserPostLoop();
1029 GO4TRACE((11,
"TGo4Analysis::UserPreLoop()",__LINE__, __FILE__));
1031 Message(0,
"Analysis BaseClass -- executing default User Preloop");
1037 GO4TRACE((11,
"TGo4Analysis::UserPostLoop()",__LINE__, __FILE__));
1039 Message(0,
"Analysis BaseClass -- executing default User Postloop");
1048 if(filename) buffer = filename;
1065 GO4TRACE((12,
"TGo4Analysis::LockAutoSave()",__LINE__, __FILE__));
1074 GO4TRACE((12,
"TGo4Analysis::UnLockAutoSave()",__LINE__, __FILE__));
1084 GO4TRACE((12,
"TGo4Analysis::AutoSave()",__LINE__, __FILE__));
1088 Message(0,
"Analysis -- AutoSaving....");
1094 Message(0,
"Analysis -- AutoSave done.");
1141 GO4TRACE((11,
"TGo4Analysis::UpdateNamesList()",__LINE__, __FILE__));
1145 Message(0,
"Analysis BaseClass -- Nameslist updated.");
1182 va_start(args, text);
1210 Message(2,
"Could not send object %s to GUI in batch mode.", ob->GetName());
1217 auto envelope =
new TGo4ObjEnvelope(ob, ob->GetName(), pathname.Data());
1249 Bool_t sysret = gSystem->ProcessEvents();
1264 Message(1,
"Start object server not yet enabled.");
1267 Message(2,
"Could not start object server in batch mode.");
1275 Message(1,
"Stop object server not yet enabled.");
1277 Message(2,
"Could not stop object server in batch mode.");
1285 TGo4Log::Message(1,
"Analysis server is initiating shutdown after ctrl-c, please wait!!\n");
1299 Message(1,
"Showing Output Event %s of step %s", sevtree->GetName(), stepname);
1301 Message(1,
"Showing Input Event %s of step %s", sevtree->GetName(), stepname);
1303 std::cout << std::endl;
1313 const char *hevx,
const char *hmemx,
1314 const char *hevy,
const char *hmemy,
1315 const char *hevz,
const char *hmemz,
1316 const char *condition,
1317 const char *cevx,
const char *cmemx,
1318 const char *cevy,
const char *cmemy)
1321 histo, hevx, hmemx, hevy, hmemy, hevz, hmemz,
1322 condition, cevx, cmemx, cevy, cmemy);
1327 Bool_t rev=
fxObjectManager->AddTreeHistogram(hisname,treename,varexp,cutexp);
1699 return myfolder ?
fxStepManager->Store(stepname, myfolder) : 2;
1726 if (!fullname || (strlen(fullname) == 0))
1728 const char *separ = strrchr(fullname,
'/');
1730 objectname = separ + 1;
1731 foldername.Append(fullname, separ - fullname);
1733 objectname = fullname;
1738 Int_t nbinsx, Double_t xlow, Double_t xup,
1739 const char *xtitle,
const char *ytitle)
1742 TString foldername, histoname;
1744 TGo4Log::Error(
"Histogram name not specified, can be a hard error");
1755 const char *sclass =
"TH1I";
1757 case 'I':
case 'i': itype = 0; sclass =
"TH1I";
break;
1758 case 'F':
case 'f': itype = 1; sclass =
"TH1F";
break;
1759 case 'D':
case 'd': itype = 2; sclass =
"TH1D";
break;
1760 case 'S':
case 's': itype = 3; sclass =
"TH1S";
break;
1761 case 'C':
case 'c': itype = 4; sclass =
"TH1C";
break;
1762 case 'L':
case 'l': itype = 5; sclass =
"TH1L";
break;
1763 default:
TGo4Log::Error(
"There is no histogram type: %c, use I instead", type);
break;
1770 if (title) oldh->SetTitle(title);
1771 if (xtitle) oldh->GetXaxis()->SetTitle(xtitle);
1772 if (ytitle) oldh->GetYaxis()->SetTitle(ytitle);
1777 TGo4Log::Info(
"There is histogram %s with type %s other than specified %s, create new and reuse content",
1778 fullname, oldh->ClassName(), sclass);
1784 oldh->SetName(
"___");
1787 TH1 *newh =
nullptr;
1790 case 0: newh =
new TH1I(histoname, title, nbinsx, xlow, xup);
break;
1791 case 1: newh =
new TH1F(histoname, title, nbinsx, xlow, xup);
break;
1792 case 2: newh =
new TH1D(histoname, title, nbinsx, xlow, xup);
break;
1793 case 3: newh =
new TH1S(histoname, title, nbinsx, xlow, xup);
break;
1794 case 4: newh =
new TH1C(histoname, title, nbinsx, xlow, xup);
break;
1795#if ROOT_VERSION_CODE > ROOT_VERSION(6,32,0)
1796 case 5: newh =
new TH1L(histoname, title, nbinsx, xlow, xup);
break;
1800 newh->SetTitle(title);
1802 if (xtitle) newh->GetXaxis()->SetTitle(xtitle);
1803 if (ytitle) newh->GetYaxis()->SetTitle(ytitle);
1811 if (foldername.Length() > 0)
1822 Int_t nbinsx, Double_t xlow, Double_t xup,
1823 Int_t nbinsy, Double_t ylow, Double_t yup,
1824 const char *xtitle,
const char *ytitle,
const char *ztitle)
1827 TString foldername, histoname;
1830 TGo4Log::Error(
"Histogram name not specified, can be a hard error");
1842 const char *sclass =
"TH2I";
1844 case 'I':
case 'i': itype = 0; sclass =
"TH2I";
break;
1845 case 'F':
case 'f': itype = 1; sclass =
"TH2F";
break;
1846 case 'D':
case 'd': itype = 2; sclass =
"TH2D";
break;
1847 case 'S':
case 's': itype = 3; sclass =
"TH2S";
break;
1848 case 'C':
case 'c': itype = 4; sclass =
"TH2C";
break;
1849 case 'L':
case 'l': itype = 5; sclass =
"TH2L";
break;
1850 default:
TGo4Log::Error(
"There is no histogram type: %c, use I instead", type);
break;
1857 if (title) oldh->SetTitle(title);
1858 if (xtitle) oldh->GetXaxis()->SetTitle(xtitle);
1859 if (ytitle) oldh->GetYaxis()->SetTitle(ytitle);
1860 return (TH2 *) oldh;
1864 TGo4Log::Info(
"There is histogram %s with type %s other than specified %s, create new and reuse content",
1865 fullname, oldh->ClassName(), sclass);
1871 oldh->SetName(
"___");
1874 TH2 *newh =
nullptr;
1877 case 0: newh =
new TH2I(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1878 case 1: newh =
new TH2F(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1879 case 2: newh =
new TH2D(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1880 case 3: newh =
new TH2S(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1881 case 4: newh =
new TH2C(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1882#if ROOT_VERSION_CODE > ROOT_VERSION(6,32,0)
1883 case 5: newh =
new TH2L(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1887 newh->SetTitle(title);
1889 if (xtitle) newh->GetXaxis()->SetTitle(xtitle);
1890 if (ytitle) newh->GetYaxis()->SetTitle(ytitle);
1891 if (ztitle) newh->GetZaxis()->SetTitle(ztitle);
1899 if (foldername.Length() > 0)
1910 Double_t xmin, Double_t xmax,
1911 const char *HistoName)
1914 TString foldername, condname;
1917 TGo4Log::Error(
"Condition name not specified, can be a hard error");
1931 wcond->SetValues(xmin, xmax);
1932 wcond->SetHistogram(HistoName);
1935 if (foldername.Length() > 0)
1946 Double_t xmin, Double_t xmax,
1947 Double_t ymin, Double_t ymax,
1948 const char *HistoName)
1951 TString foldername, condname;
1954 TGo4Log::Error(
"Condition name not specified, can be a hard error");
1968 wcond->SetValues(xmin, xmax, ymin, ymax);
1969 wcond->SetHistogram(HistoName);
1972 if (foldername.Length() > 0)
1984 Double_t (*points) [2],
1985 const char *HistoName,
1989 TString foldername, condname;
1992 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2006 TArrayD fullx(npoints+1), fully(npoints+1);
2008 for (
int i = 0; i < npoints; i++) {
2009 fullx[i] = points[i][0];
2010 fully[i] = points[i][1];
2014 if ((fullx[0]!=fullx[npoints-1]) || (fully[0]!=fully[npoints-1])) {
2015 fullx[npoints] = fullx[0];
2016 fully[npoints] = fully[0];
2020 TCutG mycat(
"initialcut", npoints, fullx.GetArray(), fully.GetArray());
2031 if (foldername.Length() > 0)
2044 Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta,
2045 const char *HistoName)
2048 TString foldername, condname;
2051 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2066 econd->SetEllipse(cx, cy, a1, a2, theta, npoints);
2068 econd->SetHistogram(HistoName);
2069 if (foldername.Length() > 0)
2080 Int_t npoints, Double_t cx, Double_t cy, Double_t r,
2081 const char *HistoName)
2090 const char *HistoName)
2100 Double_t (*points) [2],
2101 const char *HistoName)
2112 TString foldername, condname;
2115 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2130 lcond->SetHistogram(HistoName);
2133 if (foldername.Length() > 0)
2162 TString foldername, graphname;
2164 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2168 auto graph =
dynamic_cast<TGraph *
>(
GetObject(fullname));
2172 graph =
new TGraph();
2174 graph =
new TGraph(points, xvalues, yvalues);
2175 graph->SetName(graphname.Data());
2176 graph->SetTitle(title);
2178 if (foldername.Length() > 0)
2190 TString foldername, graphname;
2192 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2196 TGraph *graph =
dynamic_cast<TGraph *
>(
GetObject(fullname));
2199 graph =
new TGraph(function);
2200 graph->SetName(graphname.Data());
2201 graph->SetTitle(title);
2202 if (foldername.Length() > 0)
2213 TString foldername, graphname;
2215 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2222 graph->SetName(graphname.Data());
2223 graph->SetTitle(title);
2224 if (foldername.Length() > 0)
2233 const char *classname,
2237 TString foldername, paramname;
2239 if (!fullname || (strlen(fullname) == 0)) {
2240 TGo4Log::Error(
"Parameter name not specified, can be a hard error");
2243 const char *separ = strrchr(fullname,
'/');
2245 paramname = separ + 1;
2246 foldername.Append(fullname, separ - fullname);
2248 paramname = fullname;
2253 if (!param->InheritsFrom(classname)) {
2254 TGo4Log::Info(
"There is parameter %s with type %s other than specified %s, rebuild", fullname,
2255 param->ClassName(), classname);
2262 paramname = TString(
"\"") + paramname + TString(
"\"");
2265 if (newcmd && (strstr(newcmd,
"new ") == newcmd))
2266 cmd = TString::Format(newcmd, paramname.Data());
2268 cmd = TString::Format(
"new %s(%s)", classname, paramname.Data());
2270 auto res = gROOT->ProcessLineFast(cmd.Data());
2273 TGo4Log::Error(
"Cannot create parameter of class %s", classname);
2279 if (foldername.Length() > 0)
2287 if (newcmd && (strstr(newcmd,
"set_") == newcmd)) {
2309 if (!macro_name || (strlen(macro_name) == 0))
return -1;
2312 TString file_name(macro_name);
2313 Ssiz_t pos = file_name.First(
'(');
2314 if (pos > 0) file_name.Resize(pos);
2315 bool has_plus =
false;
2316 pos = file_name.First(
'+');
2317 if (pos > 0) { file_name.Resize(pos); has_plus =
true; }
2318 while ((file_name.Length() > 0) && (file_name[file_name.Length()-1] ==
' '))
2319 file_name.Resize(file_name.Length()-1);
2320 while ((file_name.Length() > 0) && (file_name[0] ==
' '))
2321 file_name.Remove(0, 1);
2323 if (gSystem->AccessPathName(file_name.Data())) {
2330 TString exec =
".x ";
2331 exec.Append(macro_name);
2334 std::ifstream t(file_name.Data());
2335 std::string content = std::string(std::istreambuf_iterator<char>(t), {});
2336 if (content.empty()) {
2341 TString func_name = file_name;
2342 pos = func_name.Last(
'/');
2343 if (pos != kNPOS) func_name.Remove(0, pos+1);
2344 pos = func_name.Index(
".C");
2345 if (pos == kNPOS) pos = func_name.Index(
".cxx");
2346 if (pos != kNPOS) func_name.Resize(pos);
2348 bool fall_back =
false;
2349 if (has_plus) fall_back =
true;
2350 if (func_name.IsNull()) fall_back =
true;
2352 std::string search = func_name.Data(); search +=
"(";
2353 auto name_pos = content.find(search);
2354 if (name_pos == std::string::npos) fall_back =
true;
2357 auto res = gROOT->ProcessLineSync(exec.Data(), &error);
2358 return error ? -1 : res;
2361 static std::vector<std::string> script_names;
2362 static std::vector<std::string> script_contents;
2363 static std::vector<std::string> script_func;
2364 static int findx = 1;
2368 for (
unsigned n = 0; n < script_names.size(); n++)
2369 if (script_names[n] == file_name.Data()) {
2375 script_names.push_back(file_name.Data());
2376 script_contents.push_back(content);
2377 script_func.push_back(func_name.Data());
2378 indx = script_names.size() - 1;
2380 if (!gInterpreter->LoadText(content.c_str())) {
2381 TGo4Log::Error(
"Cannot parse code of %s script", file_name.Data());
2384 }
else if (script_contents[indx] != content) {
2386 std::string new_name = func_name.Data();
2387 new_name += std::to_string(findx++);
2388 script_contents[indx] = content;
2389 script_func[indx] = new_name;
2391 content.erase(name_pos, func_name.Length());
2392 content.insert(name_pos, new_name);
2394 if (!gInterpreter->LoadText(content.c_str())) {
2395 TGo4Log::Error(
"Cannot parse modified code of %s script", file_name.Data());
2399 func_name = new_name.c_str();
2403 func_name = script_func[indx].c_str();
2406 TGo4Log::Error(
"Execute function %s from script %s", func_name.Data(), file_name.Data());
2409 func_name.Append(
"()");
2410 auto res = gROOT->ProcessLineSync(func_name.Data(), &error);
2411 if (error) res = -1;
2418 if (!macro_name || (strlen(macro_name) == 0))
return -1;
2419 TString comstring=macro_name;
2430 comstring = command;
2431 comstring = comstring.Strip(TString::kBoth);
2433 comstring = comstring.Strip(TString::kLeading);
2435 const TString PY_EXT =
".py";
2436 int imin = comstring.Index(PY_EXT +
" ");
2437 int imax = comstring.Length();
2441 imin += PY_EXT.Length();
2443 int ilen = imax - imin;
2444 TString scrstring = comstring(0, imin);
2445 TString argstring = comstring(imin, ilen);
2447 comstring =
"TPython::Exec(\"import sys; sys.argv = [\'" + scrstring +
"\'] + \'" + argstring +
"\'.split()\");";
2448 comstring +=
"TPython::LoadMacro(\"" + scrstring +
"\");";
2453 comstring.Prepend(
"TPython::LoadMacro(\"" + go4sys + pyinit +
"\");");
2454 comstring.Prepend(
"TPython::Bind(go4, \"go4\");" );
2459 const char *cursor = command;
2460 const char *at =
nullptr;
2462 Ssiz_t len = strlen(cursor);
2463 at = strstr(cursor,
"@");
2465 len = (Ssiz_t)(at - cursor);
2466 comstring.Append(cursor, len);
2467 comstring.Append(
"TGo4Analysis::Instance()->");
2470 comstring.Append(cursor);
2484 return gROOT->ProcessLineSync(comstring, errcode);
2519 Message(2,
"Analysis %s was not initialized! Please SUBMIT settings first.",
GetName());
2532 BOOL WINAPI Go4ConsoleSigHandler(DWORD sig)
2541 case CTRL_BREAK_EVENT:
2542 case CTRL_LOGOFF_EVENT:
2543 case CTRL_SHUTDOWN_EVENT:
2544 case CTRL_CLOSE_EVENT:
2546 printf(
" non CTRL-C signal - ignore\n");
2551 void InstallGo4CtrlCHandler(
bool on)
2553 SetConsoleCtrlHandler(Go4ConsoleSigHandler, on);
#define __GO4BUILDVERSION__
list containing prototypes of all analysis command objects.
This object is responsible for the organization of analysis objects.
Contains the name (key) list of all objects in the analysis scope.
Status of the analysis instance.
void SetAutoSaveInterval(Int_t i)
void SetConfigFileName(const char *name)
void SetAutoSaveCompression(Int_t i=5)
const char * GetAutoFileName() const
void SetAutoSaveOverwrite(Bool_t over=kTRUE)
Int_t IsAutoSaveOverwrite() const
Int_t IsAutoSaveOn() const
void Print(Option_t *opt="") const override
basic method to printout status information on stdout; to be overridden by specific subclass
Int_t GetAutoSaveCompression() const
Int_t GetAutoSaveInterval() const
void SetAutoFileName(const char *name)
void SetAutoSaveOn(Bool_t on=kTRUE)
This object is responsible for the organisation of analysis steps.
const char * GetEventSourceName() const
Access to name of currently active event source.
The mother of all go4 analysis.
TGo4ShapedCond * MakeFreeShapeCond(const char *fullname, Int_t npoints, Double_t(*points)[2], const char *HistoName=nullptr)
Create free shaped (polygon) condition.
Bool_t RemoveDynamicEntry(const char *entryname, const char *listname=nullptr)
Remove entry of that name from dynamic list of listname.
Bool_t fbAutoSaveFileChange
True if autosave name shall be changed when input file of multiple file input has changed.
static Bool_t fbExists
This is used to check from outside if an analysis is already there.
TObject * NextMatchingObject(const char *expr=nullptr, const char *folder=nullptr, Bool_t reset=kFALSE)
Delivers pointer to next object of the Go4 folder structure with a name matching the expression expr.
TGo4EventElement * GetInputEvent(const char *stepname) const
Returns the input event structure of analysis step.
TString fxDefaultTestFileName
default file name for distributed test lmd file
TGo4ListCond * MakeListCond(const char *fullname, const Int_t num, const Int_t *values, const char *HistoName=nullptr)
Create "whitlelist" condition with separate values to test against condition is true if any of the va...
void UpdateStatus(TGo4AnalysisStatus *state)
Create a copy of the analysis internal state.
Bool_t fbAutoSaveOn
True if Autosaving is enabled (default).
TGo4AnalysisStep * GetAnalysisStepNum(Int_t number)
Access to certain analysis step by number.
virtual Int_t UserPreLoop()
User defined function called once before processing the main event loop.
Bool_t fbInitIsDone
True if analysis framework has been initialized and the event classes are created.
TFile * fxAutoFile
Optional file for autosave of the important objects.
TGo4ShapedCond * MakeCircleCond(const char *fullname, Int_t npoints, Double_t cx, Double_t cy, Double_t r, const char *HistoName=nullptr)
Create circular shaped polygon condition.
TGo4Analysis(const char *name=nullptr)
Protected constructor for singleton instance.
TFolder * GetObjectFolder()
Access to top level go4 folder.
static TGo4Analysis * Instance()
return analysis instance
static const Int_t fgiMACROSTARTPOLL
Time in ms to sleep in the polling loop of the WaitForStart.
Int_t GetDynListInterval() const
Returns current dynamic list interval.
Bool_t fbPythonBound
If true, pyroot has already bound TGo4Analysis object.
TGo4AnalysisObjectManager * ObjectManager() const
Returns pointer on analysis object manager.
Long64_t ExecuteScript(const char *script_name)
Executes ROOT script.
virtual void CloseAnalysis()
Finish the analysis run and close all event sources/storages.
Bool_t RemoveObject(const char *name, Bool_t del=kTRUE)
Removes object from user object folder by name.
void Message(Int_t prio, const char *text,...)
Display a user message.
Int_t PostLoop()
Method executed once after the main analysis event loop.
TGo4EventElement * GetEventStructure(const char *name) const
Search reference to event structure in folder.
Bool_t SetAnalysisCondition(const char *name, TGo4Condition *con, Bool_t counter=kTRUE)
Set existing analysis condition of name to the values of external condition object con.
TGraph * MakeGraph(const char *fullname, const char *title, Int_t points=0, Double_t *xvalues=nullptr, Double_t *yvalues=nullptr)
Create a TGraph with initial values as specified by points, xvalues and yvalues.
friend class TGo4AnalysisStep
TGo4Parameter * MakeParameter(const char *fullname, const char *classname, const char *cmd=nullptr)
Create parameter of specified class,.
TCanvas * GetCanvas(const char *name)
Retrieves a TCanvas by name from the Canvases folder.
TNamed * GetObject(const char *name, const char *folder=nullptr)
Searches for object by name in all directories.
void PrintHistograms(const char *expression=nullptr)
Printout of all histogram statistic counters on the terminal.
TH2 * MakeTH2(char type, const char *fullname, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, const char *xtitle=nullptr, const char *ytitle=nullptr, const char *ztitle=nullptr)
Create two dimensional histogram of specified type.
Bool_t SetParameter(const char *name, TGo4Parameter *par)
Set existing parameter of name to the values of external parameter object par.
TGo4WinCond * MakeWinCond(const char *fullname, Double_t xmin, Double_t xmax, const char *HistoName=nullptr)
Create 1D window condition.
void SetNewInputFile(Bool_t on=kTRUE)
Set flag that input file has changed.
TGo4AnalysisObjectManager * fxObjectManager
aggregationByValue 1
Bool_t IsSortedOrder() const
Returns true if sub-folders will be created in sorted order.
Bool_t RemoveHistogram(const char *name, Bool_t del=kTRUE)
Removes histogram from histogram dir by name.
void SetOutputEvent(TGo4EventElement *event)
Sets the current output event (detector) structure.
TGo4PolyCond * MakePolyCond(const char *fullname, Int_t npoints, Double_t(*points)[2], const char *HistoName=nullptr, Bool_t shapedcond=kFALSE)
Create polygon condition.
Bool_t AddAnalysisCondition(TGo4Condition *con, const char *subfolder=nullptr)
Puts a new analysis condition object in corresponding list.
virtual Bool_t InitEventClasses()
Initialization of the event class plugins which are delivered from the user defined event factory.
Bool_t SaveStatus(const char *filename=nullptr)
Save current analysis settings into file of given name.
TString fAnalysisName
name of analysis object
Bool_t AddDynamicEntry(TGo4DynamicEntry *entry)
Set dynamic entry of name "name" to the values specified by external dynamic entry status "state".
TGo4AnalysisWebStatus * CreateWebStatus()
Create a copy of the analysis internal state.
Int_t StoreFolder(const char *stepname, TFolder *folder)
Write folder into eventstore of the step specified by name.
void StartAnalysis()
(Re)Start analysis event loop, works in both batch and gui-controlled mode
Bool_t ClearObjects(const char *name)
Clear (reset) the specified objects.
Int_t fBatchLoopCount
exact number of loop counts in batch mode
void SetAnalysisName(const char *name)
Set analysis name.
Int_t IsErrorStopEnabled() const
True if current analysis step allows stop on error.
void StopAnalysis()
Stop analysis event loop, works in both batch and gui-controlled mode.
static const Int_t fgiDYNLISTINTERVAL
This value is the number of events in between subsequent dynamic list processing.
Int_t MainCycle()
The main analysis event cycle.
Bool_t NewStepStore(const char *name, TGo4EventStoreParameter *par)
Shuts down the old analysis step storage and creates a new one specified by parameter par.
void SetAutoSave(Bool_t on=kTRUE)
Enable/disable functionality of AutoSave method.
static Bool_t IsClientMode()
is client mode
TString fxCurrentInputFileName
Contains current input file name.
Bool_t AddPicture(TGo4Picture *pic, const char *subfolder=nullptr)
Puts a new picture object in corresponding folder.
static const char fgcPYPROMPT
leading character indicating python script execution
TGo4ObjectStatus * CreateObjectStatus(const char *name, const char *folder=nullptr)
Find Object of name in the folder structure and create a complete status object of it.
void DefineServerPasswords(const char *admin, const char *controller, const char *observer)
Define passwords, which should be used for analysis access when analysis runs in server mode.
TGo4AnalysisStep * GetAnalysisStep(const char *name)
Access to certain analysis step by name.
static const char * fgcDEFAULTSTATUSFILENAME
standard file name for analysis settings
void OpenAutoSaveFile(bool for_writing=false)
Open the autosave file with the current settings.
void AutoSave()
Perform autosave of all active stores, save existing calibration objects, write known objects into us...
TGo4AnalysisStepManager * fxStepManager
aggregationByValue 1
Int_t StoreFitter(const char *name, TGo4Fitter *fit)
Write fitter fit into eventstore of the step specified by name.
void ShowEvent(const char *stepname, Bool_t isoutput=kTRUE)
Printout event content of single current event to analysis terminal (using ROOT TTree::Show method).
TGo4EventElement * GetOutputEvent() const
Returns the output event (detector) structure of analysis step.
Bool_t AddObject(TNamed *anything, const char *subfolder=nullptr, Bool_t replace=kTRUE)
Add any external object to the user object folder.
Bool_t AddParameter(TGo4Parameter *par, const char *subfolder=nullptr)
Puts a new parameter object in corresponding folder.
Bool_t RemoveCanvas(const char *name)
Removes TCanvas by name.
Int_t UnLockAutoSave()
UnLock the autosave mutex.
Int_t ProcessAnalysisSteps()
Process steps.
TH1 * GetHistogram(const char *name)
Search histogram in histogram list (directory).
void PrintParameters(const char *expression=nullptr)
Printout of all parameters on the terminal.
Int_t Process()
This method is meant to be called from a go4 cintserver macro in an explicit event loop.
static void SetRunningMode(int mode)
Set analysis running mode.
void SetAutoSaveFile(const char *filename=nullptr, Bool_t overwrite=kFALSE, Int_t compression=5)
Set file for autosave action.
static const Int_t fgiAUTOSAVECOUNTS
Definition of default autosave interval.
Bool_t RemovePicture(const char *name)
Removes picture by name.
static Bool_t IsBatchMode()
is batch mode
static Int_t fiRunningMode
This is used to identify running mode of analysis: 0 - batch, 1 - client, 2 - server.
void SetControllerPassword(const char *passwd)
Specify password for controller account.
static const char * fgcPYINIT
default name of go4 python init script
void PrintDynamicList()
Print entries of current dynamic list.
Bool_t SetLastStep(const char *name)
Sets analysis step name as last one to be processed in the chain of steps.
Bool_t fbObjMade
indicate if object was created by last Make... operation
void ProcessEvents()
Method should be called to process extra events in the analysis thread context.
Bool_t AddEventStructure(TGo4EventElement *ev)
Add reference to event structure object to Go4 Folder structure.
static Bool_t Exists()
check if analysis instance exists
TString fServerAdminPass
pre-configured password for administrator access
Bool_t RemoveEventStore(TGo4EventStore *store)
Remove reference to event store from go4 folder structure.
void ShutdownServer()
for signal handler to shutdown analysis server, if existing
Long64_t ExecuteLine(const char *command, Int_t *errcode=nullptr)
Process ROOT command line.
Int_t WaitForStart()
Poll on the IsRunning state with sleep delay, returns number of wait cycles.
virtual Int_t UserEventFunc()
User defined function which processes the actual analysis.
void StopWorking()
Called by interrupt routine for normal exit from program (in batch mode).
Int_t StoreParameter(const char *name, TGo4Parameter *par)
Write object obj into eventstore of the step specified by name.
Bool_t SetParameterStatus(const char *name, TGo4ParameterStatus *par)
Set existing parameter of name to the values of external parameter status object.
friend class TGo4AnalysisWebStatus
TGo4InterruptHandler * fxInterruptHandler
use to treat Ctrl-C interrupts
Bool_t AddEventSource(TGo4EventSource *source)
Add reference to event source object to Go4 Folder structure.
Bool_t AddAnalysisStep(TGo4AnalysisStep *next)
Method for user analysis constructor to setup the list of analysis steps.
void StartObjectServer(const char *basename, const char *passwd)
Start the object (histogram) server.
void CloseAutoSaveFile()
Close the autosave file if existing.
Bool_t RemoveEventStructure(TGo4EventElement *ev)
Remove reference to event structure from go4 folder structure.
void ProcessCrtlCSignal()
Method called from Ctrl-C handler.
TGo4AnalysisSniffer * fSniffer
Sniffer object.
TString fServerCtrlPass
pre-configured password for controller access
void SetObserverPassword(const char *passwd)
Specify password for observer account.
Long64_t ExecutePython(const char *script_name, Int_t *errcode=nullptr)
Executes Python script in ROOT interpreter.
TGo4AnalysisObjectNames * fxObjectNames
aggregation 1
Bool_t SetPicture(const char *name, TGo4Picture *pic)
Set existing picture of name to the values of external picture object pic.
Bool_t SetStepStorage(const char *name, Bool_t on)
Enables analysis step of name to write its output event into its event store.
void StopObjectServer()
Stop the object (histogram) server.
Bool_t ProtectObjects(const char *name, const Option_t *flags)
Change protection properties of object name as specified.
Bool_t AddHistogram(TH1 *his, const char *subfolder=nullptr, Bool_t replace=kTRUE)
Add external histogram to go4 histogram directory.
Int_t LockAutoSave()
Lock the autosave mutex.
const char * GetName() const override
Return analysis name.
Bool_t AddTreeHistogram(const char *hisname, const char *treename, const char *varexp, const char *cutexp)
Add Histogram into the dynamic list which is linked to a tree.
TGo4Ratemeter * fxRate
optional ratemeter object
TGo4TreeStructure * CreateTreeStructure(const char *treename)
Create a tree structure for a certain tree by name.
TGo4RollingGraph * MakeRollingGraph(const char *fullname, const char *title, Int_t points=0, Int_t average=1)
Create a go4 rolling graph (generic trending plot) with properties points and average.
virtual Int_t UserPostLoop()
User defined function called once after processing the main event loop.
void PrintConditions(const char *expression=nullptr)
Print all condition counters to the terminal.
Bool_t NewStepSource(const char *name, TGo4EventSourceParameter *par)
Shuts down the old analysis step event source and creates a new one specified by parameter par.
void Constructor()
Method to create all necessary object in the real constructor.
Bool_t IsAutoSaveFileName() const
Return kTRUE, if autosave file name set.
void SetStepChecking(Bool_t on=kTRUE)
Enable or disable check of subsequent analysis step for io consistency.
Bool_t DeleteObjects(const char *name)
Delete object of name, or all objects in folder name, respectively.
TMutex * fxAutoSaveMutex
Mutex protecting the autosave file access.
TGo4Picture * GetPicture(const char *name)
Retrieves a picture object by name from the object folder.
Int_t PreLoop()
Method executed once before the main analysis event loop.
Int_t StoreCondition(const char *name, TGo4Condition *con)
Write condition con into eventstore of the step specified by name.
Bool_t fbNewInputFile
True if input file of multiple file input has changed.
TString fServerObserverPass
pre-configured password for observer access
Bool_t SetFirstStep(const char *name)
Sets analysis step name as first one to be processed in the chain of steps.
void SetStatus(TGo4AnalysisStatus *state)
Set all analysis parameters to that of given status object.
Bool_t AddTree(TTree *tree, const char *subfolder=nullptr)
Add reference to a tree in the go4 folder structure.
TTree * CreateSingleEventTree(const char *name, Bool_t isoutput=kTRUE)
Create a tree that is filled with one single event sample.
static Bool_t IsServerMode()
is server mode
Bool_t AddCanvas(TCanvas *can, const char *subfolder=nullptr)
Puts a new TCanvas in corresponding folder.
Int_t fiAutoSaveInterval
Implicit Loop cycles in between two autosave actions.
Bool_t RemoveAnalysisCondition(const char *name)
Removes analysis condition from list by name.
TString fxAutoFileName
Name of the autosave file.
TStopwatch * fxAutoSaveClock
Clock for autosave by time mechanism.
static const char * fgcDEFAULTFILESUF
filename suffix for object file
void SetDynListInterval(Int_t val)
Set current dynamic list interval.
TGo4ShapedCond * MakeBoxCond(const char *fullname, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta, const char *HistoName=nullptr)
Create tilted rectangular box shaped polygon condition.
TGo4AnalysisClient * fxAnalysisSlave
Optional backpointer to analysis client if running in gui mode.
Bool_t AddEventStore(TGo4EventStore *store)
Add reference to event store object to Go4 Folder structure.
TGo4Condition * GetAnalysisCondition(const char *name, const char *cond_cl=nullptr)
Retrieves an analysis condition from list by name.
Bool_t fbMakeWithAutosave
If false, do not use data from autosave file in Make... methods.
Bool_t fbAutoSaveOverwrite
True if autosave file is in overwrite mode.
TH1 * MakeTH1(char type, const char *fullname, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, const char *xtitle=nullptr, const char *ytitle=nullptr)
Create one dimensional histogram of specified type.
Bool_t AddEventProcessor(TGo4EventProcessor *pro)
Add reference to event processor object to Go4 Folder structure.
TGo4Parameter * GetParameter(const char *name, const char *parameter_class=nullptr)
Retrieves a parameter object by name from the object folder.
enum TGo4Analysis::@272117116030306307120057025105261037267163363177 fxDoWorkingFlag
Indicates analysis runstate.
void SetSortedOrder(Bool_t on=kTRUE)
Configure sorting order for newly created sub-folders.
Int_t fNumCtrlC
number Ctrl-C handler called
TGo4AnalysisObjectNames * CreateNamesList()
Creates a list of names (keys) of all objects in analysis directories.
Bool_t NewStepProcessor(const char *name, TGo4EventProcessorParameter *par)
Shuts down the old analysis step processor and creates a new one specified by parameter par.
Bool_t LoadStatus(const char *filename=nullptr)
Load Analysis Status from file and set analysis to these settings.
TString fxConfigFilename
name of configuration file used for this setup
void SetRunning(Bool_t on=kTRUE)
Switch slave process into running state.
Bool_t AddDynamicHistogram(const char *name, const char *histo, const char *hevx, const char *hmemx, const char *hevy=nullptr, const char *hmemy=nullptr, const char *hevz=nullptr, const char *hmemz=nullptr, const char *condition=nullptr, const char *cevx=nullptr, const char *cmemx=nullptr, const char *cevy=nullptr, const char *cmemy=nullptr)
Add (create) new dynamic histogram entry which connects an existing histogram with existing condition...
Bool_t IsRunning() const
True if the analysis as controlled by slave process is running.
Bool_t RemoveEventProcessor(TGo4EventProcessor *pro)
Remove reference to event processor from go4 folder structure.
Bool_t RemoveTree(TTree *tree, const char *stepname=nullptr)
Remove reference to a tree in the go4 folder structure.
virtual ~TGo4Analysis()
destructor
Bool_t EvaluateFolderpath(const char *fullname, TString &object, TString &folder)
Helper function to figure out object name and folder path from full path.
void UpdateNamesList()
Update the internal list of object names.
TGo4AnalysisStatus * CreateStatus()
Create a copy of the analysis internal state.
TGo4ShapedCond * MakeEllipseCond(const char *fullname, Int_t npoints, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta=0., const char *HistoName=nullptr)
Create ellipse shaped polygon condition.
void Print(Option_t *opt="") const override
Printout the analysis (step-) setup.
Bool_t ResetBackStores(Bool_t clearflag=kFALSE)
Clear previous events of backstore tree.
Bool_t RemoveParameter(const char *name)
Removes parameter by name.
Bool_t LoadObjects(const char *filename=nullptr)
Load analysis objects from file.
Int_t fiAutoSaveCount
Event counter for autosave mechanism.
void SetAdministratorPassword(const char *passwd)
Specify password for administrator account.
Int_t fiAutoSaveCompression
compression level for autosave file
static const char * fgcDEFAULTFILENAME
standard file name
void SendObjectToGUI(TObject *ob)
User May send any named object via data channel to the gui.
TGo4EventElement * fxSampleEvent
this holds event sample for the SingleEventTree.
TTree * GetTree(const char *name)
Search tree in tree folder.
Bool_t RemoveEventSource(TGo4EventSource *source)
Remove reference to event source from go4 folder structure.
static TGo4Analysis * fxInstance
Static Pointer to the analysis singleton instance.
void SendMessageToGUI(Int_t level, Bool_t printout, const char *text)
Send message string in a status object to the gui.
Int_t RunImplicitLoop(Int_t times, Bool_t showrate=kFALSE, Double_t process_event_interval=-1., Bool_t iswebserver=kFALSE)
Processes the UserEventFunc in an implicit loop for "times" times.
void SetAutoSaveInterval(Int_t interval=0)
Set time interval (in s) for autosave action.
static TGo4CommandInvoker * Instance()
static void SetCommandList(TGo4CommandProtoList *list)
Application may exchange standard command list by own subclass with specialized commands,...
static void UnRegister(TGo4CommandReceiver *p)
static void Register(const char *name, TGo4CommandReceiver *p)
virtual void Enable()
Enable (unfreeze) Test execution.
void SetHistogram(const char *name)
Define the name of the associated histogram.
virtual void ResetCounts()
Clear counters.
ABC for all entries that can be kept in a dynamic list.
The abstract base class for the data elements of which the unpacked events (or detector structure dat...
Exception to throw on event source timeout.
Exception to be thrown on error of event source.
Int_t GetPriority() const
Basic type for all classes containing information to parametrize the event processor.
Abstract event processor.
Int_t Handle() override
This is a default handler function for the respective exception type.
const char * GetSourceClass() const
Name of the throwing event source.
const char * GetSourceName() const
Name of the throwing event source.
const char * GetErrMess() const
Status/ error message of the last event.
Basic type for all classes containing information to parameterize the event source.
Basic type for all classes containing information to parametrize the event store.
The abstract interface class for the raw event store.
Exception to throw on event source timeout.
virtual const char * What()
Returns string describing the kind of exception.
virtual Int_t Handle()
This is a default handler function for the respective exception type.
Central class of Go4Fit package.
Condition that checks a value against a list of "good" (or bad) values.
virtual void SetValues(const Int_t num, const Int_t *values)
static TString subGO4SYS(const char *subdir)
Return subdirectory in the GO4SYS.
static void Info(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 1.
static void PrintRate(ULong64_t cnt, double rate)
Printout rate and events count, handle redirection.
static const char * Message(Int_t prio, const char *text,...) GO4_PRINTF2_ARGS
Display a message.
static const char * GO4SYS()
Return GO4SYS environment variable or Go4 top directory during compile (if GO4SYS) not set.
static void Debug(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 0.
static void OutputEnable(Bool_t on=kTRUE)
switch output on or off
static void Error(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 3.
static Bool_t IsOutputEnabled()
get current output state
static Int_t GetIgnoreLevel()
Get threshold for output.
static void CloseLogfile()
Close logfile if existing.
One entry of the object names folder.
Status object for an analysis parameter.
Base class for all parameter aggregations, e.g.
Picture cconfiguration in Go4.
void SetValues(Double_t *x, Double_t *y, Int_t len) override
Delete old cut and create a new cut with X,Y values.
Class containing event counter and ratemeter services.
Graphs that renew themselves iteratively to monitor a value.
void SetBox(Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta=0)
void SetCircle(Double_t cx, Double_t cy, Double_t r, Int_t npoints=0)
Contains the branchelement structure of a certain TTree on the analysis side.
Exception to be thrown by analysis user.
Int_t Handle() override
This is a default handler function for the respective exception type.
Int_t GetPriority() const
Message priority.
static Bool_t CheckVersion(Int_t version)
Returns true if Version number matches the argument of the Method.
static TGo4Version * Instance()