26 #include "TInterpreter.h" 27 #include "TApplication.h" 39 #include "TStopwatch.h" 40 #include "TTimeStamp.h" 43 #include "TGo4LockGuard.h" 91 void InstallGo4CtrlCHandler(
bool on);
114 GO4TRACE((14,
"TGo4Analysis::Instance()",__LINE__, __FILE__));
129 return fiRunningMode == 0;
134 return fiRunningMode == 1;
139 return fiRunningMode == 2;
144 fiRunningMode = mode;
149 fbInitIsDone(kFALSE),
151 fxAnalysisSlave(nullptr),
152 fxStepManager(nullptr),
153 fxObjectManager(nullptr),
156 fiAutoSaveCompression(5),
158 fbAutoSaveOverwrite(kFALSE),
159 fbNewInputFile(kFALSE),
160 fxCurrentInputFileName(),
161 fbAutoSaveFileChange(kFALSE),
162 fxSampleEvent(nullptr),
163 fxObjectNames(nullptr),
164 fxDoWorkingFlag(flagInit),
165 fxInterruptHandler(nullptr),
170 fServerObserverPass(),
171 fbMakeWithAutosave(kTRUE),
173 fbPythonBound(kFALSE),
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 TInterpreter* 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);
291 GO4TRACE((15,
"TGo4Analysis::~TGo4Analysis()",__LINE__, __FILE__));
301 gROOT->ProcessLineSync(TString::Format(
".x %s",
TGo4Log::subGO4SYS(
"macros/anamacroclose.C").Data()).Data());
317 if (gApplication) gApplication->Terminate();
332 GO4TRACE((14,
"TGo4Analysis::InitEventClasses()",__LINE__, __FILE__));
341 TGo4Log::Info(
"Analysis -- Initializing EventClasses done.");
355 TGo4Log::Info(
"Analysis BaseClass -- EventClasses were already initialized.");
364 GO4TRACE((11,
"TGo4Analysis::MainCycle()",__LINE__, __FILE__));
406 GO4TRACE((11,
"TGo4Analysis::UserEventFunc()",__LINE__, __FILE__));
417 GO4TRACE((11,
"TGo4Analysis::Process()",__LINE__, __FILE__));
426 gSystem->ProcessEvents();
439 TDirectory *savdir = gDirectory;
458 Message(2,
"Analysis %s TIMEOUT for eventsource %s:%s.",
465 Message(2,
"End of event source %s: name:%s - msg:%s",
486 Message(3,
"Analysis %s ERROR: %s from event source %s:\n %s",
524 Message(3,
"Analysis %s ERROR: %s from dynamic list entry %s:%s",
540 Message(3,
"Analysis %s ERROR: %s in Analysis Step %s",
566 catch(std::exception& ex)
568 Message(3,
"Analysis %s got standard exception %s",
GetName(), ex.what());
584 GO4TRACE((11,
"TGo4Analysis::RunImplicitLoop(Int_t)",__LINE__, __FILE__));
587 if (process_event_interval>1.) process_event_interval = 1.;
592 Bool_t userate = showrate || (process_event_interval > 0.);
593 Bool_t process_events = kFALSE;
598 TTimeStamp last_update;
603 Message(1,
"Analysis loop for %d cycles is starting...", times);
605 Message(1,
"Analysis loop is starting...");
609 if ((times > 0) && (cnt >= times)) {
620 process_events = kTRUE;
622 bool need_update =
false;
624 if ((now.AsDouble() - last_update.AsDouble()) >= 1.) {
625 last_update = now; need_update =
true;
652 if (process_events) {
654 process_events = kFALSE;
655 gSystem->ProcessEvents();
765 Message(1,
"!!! Unexpected exception in %d cycle !!!", cnt);
775 Message(1,
"Analysis implicit Loop has finished after %d cycles.", cnt);
783 Message(1,
"%s appeared in %d cycle.", ex.
What(), cnt);
786 catch(std::exception &ex) {
787 Message(1,
"standard exception %s appeared in %d cycle.", ex.what(), cnt);
790 Message(1,
"!!! Unexpected exception in %d cycle !!!", cnt);
794 printf(
"\n"); fflush(stdout);
807 GO4TRACE((11,
"TGo4Analysis::RemoveDynamicEntry(const char *, const char *)",__LINE__, __FILE__));
818 GO4TRACE((11,
"TGo4Analysis::UpdateStatus(TGo4AnalysisStatus*)",__LINE__, __FILE__));
832 GO4TRACE((11,
"TGo4Analysis::SetStatus(TGo4AnalysisStatus*)",__LINE__, __FILE__));
848 GO4TRACE((11,
"TGo4Analysis::LoadStatus(const char *)",__LINE__, __FILE__));
856 TFile *statusfile = TFile::Open(fname.Data(),
"READ");
857 if(statusfile && statusfile->IsOpen()) {
861 TIter iter(statusfile->GetListOfKeys());
863 while ((key = (TKey *)iter()) !=
nullptr) {
864 if (strcmp(key->GetClassName(),
"TGo4AnalysisStatus") == 0)
break;
872 Message(1,
"Analysis %s: Found status object %s in file %s",
873 GetName(), state->GetName(), fname.Data());
876 Message(0,
"Analysis: New analysis state is set.");
879 Message(3,
"Analysis LoadStatus: Could not find status %s in file %s",
GetName(), fname.Data());
883 Message(3,
"Analysis LoadStatus: Failed to open file %s", fname.Data());
894 GO4TRACE((11,
"TGo4Analysis::SaveStatus(const char *)",__LINE__, __FILE__));
897 memset(buffer, 0,
sizeof(buffer));
899 strncpy(buffer, filename,
sizeof(buffer)-10);
904 auto statusfile = TFile::Open(buffer,
"RECREATE");
905 if(statusfile && statusfile->IsOpen()) {
914 Message(-1,
"Analysis SaveStatus: Saved Analysis settings to file %s", buffer);
916 Message(3,
"Analysis SaveStatus: FAILED to create status object !!!");
920 Message(3,
"Analysis SaveStatus: Failed to open file %s ",
929 GO4TRACE((11,
"TGo4Analysis::CreateStatus()",__LINE__, __FILE__));
930 TDirectory *filsav = gDirectory;
940 GO4TRACE((11,
"TGo4Analysis::CreateWebStatus()",__LINE__, __FILE__));
941 TDirectory *filsav = gDirectory;
959 GO4TRACE((11,
"TGo4Analysis::CreateSingleEventTree(TGo4EventElement *)",__LINE__, __FILE__));
961 return event ?
event->CreateSampleTree(&
fxSampleEvent) :
nullptr;
966 GO4TRACE((11,
"TGo4Analysis::CreateSingleEventTree(const char *, Bool_t)",__LINE__, __FILE__));
978 GO4TRACE((14,
"TGo4Analysis::CloseAnalysis()",__LINE__, __FILE__));
991 GO4TRACE((11,
"TGo4Analysis:PreLoop()",__LINE__, __FILE__));
1008 GO4TRACE((11,
"TGo4Analysis::PostLoop()",__LINE__, __FILE__));
1033 GO4TRACE((11,
"TGo4Analysis::UserPreLoop()",__LINE__, __FILE__));
1035 Message(0,
"Analysis BaseClass -- executing default User Preloop");
1041 GO4TRACE((11,
"TGo4Analysis::UserPostLoop()",__LINE__, __FILE__));
1043 Message(0,
"Analysis BaseClass -- executing default User Postloop");
1052 if(filename) buffer = filename;
1069 GO4TRACE((12,
"TGo4Analysis::LockAutoSave()",__LINE__, __FILE__));
1078 GO4TRACE((12,
"TGo4Analysis::UnLockAutoSave()",__LINE__, __FILE__));
1088 GO4TRACE((12,
"TGo4Analysis::AutoSave()",__LINE__, __FILE__));
1092 Message(0,
"Analysis -- AutoSaving....");
1098 Message(0,
"Analysis -- AutoSave done.");
1145 GO4TRACE((11,
"TGo4Analysis::UpdateNamesList()",__LINE__, __FILE__));
1149 Message(0,
"Analysis BaseClass -- Nameslist updated.");
1186 va_start(args, text);
1214 Message(2,
"Could not send object %s to GUI in batch mode.", ob->GetName());
1253 Bool_t sysret = gSystem->ProcessEvents();
1268 Message(1,
"Start object server not yet enabled.");
1271 Message(2,
"Could not start object server in batch mode.");
1279 Message(1,
"Stop object server not yet enabled.");
1281 Message(2,
"Could not stop object server in batch mode.");
1289 TGo4Log::Message(1,
"Analysis server is initiating shutdown after ctrl-c, please wait!!\n");
1303 Message(1,
"Showing Output Event %s of step %s", sevtree->GetName(), stepname);
1305 Message(1,
"Showing Input Event %s of step %s", sevtree->GetName(), stepname);
1307 std::cout << std::endl;
1317 const char *hevx,
const char *hmemx,
1318 const char *hevy,
const char *hmemy,
1319 const char *hevz,
const char *hmemz,
1320 const char *condition,
1321 const char *cevx,
const char *cmemx,
1322 const char *cevy,
const char *cmemy)
1325 histo, hevx, hmemx, hevy, hmemy, hevz, hmemz,
1326 condition, cevx, cmemx, cevy, cmemy);
1730 if (!fullname || (strlen(fullname) == 0))
1732 const char *separ = strrchr(fullname,
'/');
1734 objectname = separ + 1;
1735 foldername.Append(fullname, separ - fullname);
1737 objectname = fullname;
1742 Int_t nbinsx, Double_t xlow, Double_t xup,
1743 const char *xtitle,
const char *ytitle)
1746 TString foldername, histoname;
1748 TGo4Log::Error(
"Histogram name not specified, can be a hard error");
1759 const char *sclass =
"TH1I";
1761 case 'I':
case 'i': itype = 0; sclass =
"TH1I";
break;
1762 case 'F':
case 'f': itype = 1; sclass =
"TH1F";
break;
1763 case 'D':
case 'd': itype = 2; sclass =
"TH1D";
break;
1764 case 'S':
case 's': itype = 3; sclass =
"TH1S";
break;
1765 case 'C':
case 'c': itype = 4; sclass =
"TH1C";
break;
1766 default:
TGo4Log::Error(
"There is no histogram type: %c, use I instead", type);
break;
1773 if (title) oldh->SetTitle(title);
1774 if (xtitle) oldh->GetXaxis()->SetTitle(xtitle);
1775 if (ytitle) oldh->GetYaxis()->SetTitle(ytitle);
1780 TGo4Log::Info(
"There is histogram %s with type %s other than specified %s, create new and reuse content",
1781 fullname, oldh->ClassName(), sclass);
1787 oldh->SetName(
"___");
1790 TH1 *newh =
nullptr;
1793 case 0: newh =
new TH1I(histoname, title, nbinsx, xlow, xup);
break;
1794 case 1: newh =
new TH1F(histoname, title, nbinsx, xlow, xup);
break;
1795 case 2: newh =
new TH1D(histoname, title, nbinsx, xlow, xup);
break;
1796 case 3: newh =
new TH1S(histoname, title, nbinsx, xlow, xup);
break;
1797 case 4: newh =
new TH1C(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 default:
TGo4Log::Error(
"There is no histogram type: %c, use I instead", type);
break;
1856 if (title) oldh->SetTitle(title);
1857 if (xtitle) oldh->GetXaxis()->SetTitle(xtitle);
1858 if (ytitle) oldh->GetYaxis()->SetTitle(ytitle);
1859 return (TH2 *) oldh;
1863 TGo4Log::Info(
"There is histogram %s with type %s other than specified %s, create new and reuse content",
1864 fullname, oldh->ClassName(), sclass);
1870 oldh->SetName(
"___");
1873 TH2 *newh =
nullptr;
1876 case 0: newh =
new TH2I(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1877 case 1: newh =
new TH2F(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1878 case 2: newh =
new TH2D(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1879 case 3: newh =
new TH2S(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1880 case 4: newh =
new TH2C(histoname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
1883 newh->SetTitle(title);
1885 if (xtitle) newh->GetXaxis()->SetTitle(xtitle);
1886 if (ytitle) newh->GetYaxis()->SetTitle(ytitle);
1887 if (ztitle) newh->GetZaxis()->SetTitle(ztitle);
1895 if (foldername.Length() > 0)
1906 Double_t xmin, Double_t xmax,
1907 const char *HistoName)
1910 TString foldername, condname;
1913 TGo4Log::Error(
"Condition name not specified, can be a hard error");
1931 if (foldername.Length() > 0)
1942 Double_t xmin, Double_t xmax,
1943 Double_t ymin, Double_t ymax,
1944 const char *HistoName)
1947 TString foldername, condname;
1950 TGo4Log::Error(
"Condition name not specified, can be a hard error");
1964 wcond->
SetValues(xmin, xmax, ymin, ymax);
1968 if (foldername.Length() > 0)
1980 Double_t (*points) [2],
1981 const char *HistoName,
1985 TString foldername, condname;
1988 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2002 TArrayD fullx(npoints+1), fully(npoints+1);
2004 for (
int i = 0; i < npoints; i++) {
2005 fullx[i] = points[i][0];
2006 fully[i] = points[i][1];
2010 if ((fullx[0]!=fullx[npoints-1]) || (fully[0]!=fully[npoints-1])) {
2011 fullx[npoints] = fullx[0];
2012 fully[npoints] = fully[0];
2016 TCutG mycat(
"initialcut", npoints, fullx.GetArray(), fully.GetArray());
2022 pcond->SetValues(&mycat);
2025 pcond->SetHistogram(HistoName);
2027 if (foldername.Length() > 0)
2040 Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta,
2041 const char *HistoName)
2044 TString foldername, condname;
2047 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2062 econd->
SetEllipse(cx, cy, a1, a2, theta, npoints);
2065 if (foldername.Length() > 0)
2076 Int_t npoints, Double_t cx, Double_t cy, Double_t r,
2077 const char *HistoName)
2085 const char *HistoName)
2094 Double_t (*points) [2],
2095 const char *HistoName)
2105 TString foldername, condname;
2108 TGo4Log::Error(
"Condition name not specified, can be a hard error");
2126 if (foldername.Length() > 0)
2155 TString foldername, graphname;
2157 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2161 TGraph *graph =
dynamic_cast<TGraph *
>(
GetObject(fullname));
2165 graph =
new TGraph();
2167 graph =
new TGraph(points, xvalues, yvalues);
2168 graph->SetName(graphname.Data());
2169 graph->SetTitle(title);
2171 if (foldername.Length() > 0)
2183 TString foldername, graphname;
2185 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2189 TGraph *graph =
dynamic_cast<TGraph *
>(
GetObject(fullname));
2192 graph =
new TGraph(
function);
2193 graph->SetName(graphname.Data());
2194 graph->SetTitle(title);
2195 if (foldername.Length() > 0)
2206 TString foldername, graphname;
2208 TGo4Log::Error(
"TGraph name not specified, can be a hard error");
2215 graph->SetName(graphname.Data());
2216 graph->SetTitle(title);
2217 if (foldername.Length() > 0)
2226 const char *classname,
2230 TString foldername, paramname;
2232 if (!fullname || (strlen(fullname) == 0)) {
2233 TGo4Log::Error(
"Parameter name not specified, can be a hard error");
2236 const char *separ = strrchr(fullname,
'/');
2238 paramname = separ + 1;
2239 foldername.Append(fullname, separ - fullname);
2241 paramname = fullname;
2246 if (!param->InheritsFrom(classname)) {
2247 TGo4Log::Info(
"There is parameter %s with type %s other than specified %s, rebuild", fullname,
2248 param->ClassName(), classname);
2255 paramname = TString(
"\"") + paramname + TString(
"\"");
2258 if (newcmd && (strstr(newcmd,
"new ") == newcmd))
2259 cmd = TString::Format(newcmd, paramname.Data());
2261 cmd = TString::Format(
"new %s(%s)", classname, paramname.Data());
2263 auto res = gROOT->ProcessLineFast(cmd.Data());
2266 TGo4Log::Error(
"Cannot create parameter of class %s", classname);
2272 if (foldername.Length() > 0)
2280 if (newcmd && (strstr(newcmd,
"set_") == newcmd)) {
2302 if (!macro_name || (strlen(macro_name) == 0))
return -1;
2305 TString file_name(macro_name);
2306 Ssiz_t pos = file_name.First(
'(');
2307 if (pos > 0) file_name.Resize(pos);
2308 bool has_plus =
false;
2309 pos = file_name.First(
'+');
2310 if (pos > 0) { file_name.Resize(pos); has_plus =
true; }
2311 while ((file_name.Length() > 0) && (file_name[file_name.Length()-1] ==
' '))
2312 file_name.Resize(file_name.Length()-1);
2313 while ((file_name.Length() > 0) && (file_name[0] ==
' '))
2314 file_name.Remove(0, 1);
2316 if (gSystem->AccessPathName(file_name.Data())) {
2323 TString exec =
".x ";
2324 exec.Append(macro_name);
2327 std::ifstream t(file_name.Data());
2328 std::string content = std::string(std::istreambuf_iterator<char>(t), {});
2329 if (content.empty()) {
2334 TString func_name = file_name;
2335 pos = func_name.Last(
'/');
2336 if (pos != kNPOS) func_name.Remove(0, pos+1);
2337 pos = func_name.Index(
".C");
2338 if (pos == kNPOS) pos = func_name.Index(
".cxx");
2339 if (pos != kNPOS) func_name.Resize(pos);
2341 bool fall_back =
false;
2342 if (has_plus) fall_back =
true;
2343 if (func_name.IsNull()) fall_back =
true;
2345 std::string search = func_name.Data(); search +=
"(";
2346 auto name_pos = content.find(search);
2347 if (name_pos == std::string::npos) fall_back =
true;
2350 auto res = gROOT->ProcessLineSync(exec.Data(), &error);
2351 return error ? -1 : res;
2354 static std::vector<std::string> script_names;
2355 static std::vector<std::string> script_contents;
2356 static std::vector<std::string> script_func;
2357 static int findx = 1;
2361 for (
unsigned n = 0; n < script_names.size(); n++)
2362 if (script_names[n] == file_name.Data()) {
2368 script_names.push_back(file_name.Data());
2369 script_contents.push_back(content);
2370 script_func.push_back(func_name.Data());
2371 indx = script_names.size() - 1;
2373 if (!gInterpreter->LoadText(content.c_str())) {
2374 TGo4Log::Error(
"Cannot parse code of %s script", file_name.Data());
2377 }
else if (script_contents[indx] != content) {
2379 std::string new_name = func_name.Data();
2380 new_name += std::to_string(findx++);
2381 script_contents[indx] = content;
2382 script_func[indx] = new_name;
2384 content.erase(name_pos, func_name.Length());
2385 content.insert(name_pos, new_name);
2387 if (!gInterpreter->LoadText(content.c_str())) {
2388 TGo4Log::Error(
"Cannot parse modified code of %s script", file_name.Data());
2392 func_name = new_name.c_str();
2396 func_name = script_func[indx].c_str();
2399 TGo4Log::Error(
"Execute function %s from script %s", func_name.Data(), file_name.Data());
2402 func_name.Append(
"()");
2403 auto res = gROOT->ProcessLineSync(func_name.Data(), &error);
2404 if (error) res = -1;
2411 if (!macro_name || (strlen(macro_name) == 0))
return -1;
2412 TString comstring=macro_name;
2423 comstring = command;
2424 comstring = comstring.Strip(TString::kBoth);
2426 comstring = comstring.Strip(TString::kLeading);
2428 const TString PY_EXT =
".py";
2429 int imin = comstring.Index(PY_EXT +
" ");
2430 int imax = comstring.Length();
2434 imin += PY_EXT.Length();
2436 int ilen = imax - imin;
2437 TString scrstring = comstring(0, imin);
2438 TString argstring = comstring(imin, ilen);
2440 comstring =
"TPython::Exec(\"import sys; sys.argv = [\'" + scrstring +
"\'] + \'" + argstring +
"\'.split()\");";
2441 comstring +=
"TPython::LoadMacro(\"" + scrstring +
"\");";
2446 comstring.Prepend(
"TPython::LoadMacro(\"" + go4sys + pyinit +
"\");");
2447 comstring.Prepend(
"TPython::Bind(go4, \"go4\");" );
2452 const char *cursor = command;
2453 const char *at =
nullptr;
2455 Ssiz_t len = strlen(cursor);
2456 at = strstr(cursor,
"@");
2458 len = (Ssiz_t)(at - cursor);
2459 comstring.Append(cursor, len);
2460 comstring.Append(
"TGo4Analysis::Instance()->");
2463 comstring.Append(cursor);
2477 return gROOT->ProcessLineSync(comstring, errcode);
2512 Message(2,
"Analysis %s was not initialized! Please SUBMIT settings first.",
GetName());
2521 #include "windows.h" 2525 BOOL WINAPI Go4ConsoleSigHandler(DWORD sig)
2534 case CTRL_BREAK_EVENT:
2535 case CTRL_LOGOFF_EVENT:
2536 case CTRL_SHUTDOWN_EVENT:
2537 case CTRL_CLOSE_EVENT:
2539 printf(
" non CTRL-C signal - ignore\n");
2544 void InstallGo4CtrlCHandler(
bool on)
2546 SetConsoleCtrlHandler(Go4ConsoleSigHandler, on);
Bool_t AddTreeHistogram(const char *hisname, const char *treename, const char *varexp, const char *cutexp)
Int_t Store(const char *name, TGo4Parameter *obj)
TGraph * MakeGraph(const char *fullname, const char *title, Int_t points=0, Double_t *xvalues=nullptr, Double_t *yvalues=nullptr)
void SendObject(TObject *obj, const char *receiver=nullptr)
void SetAutoFileName(const char *name)
const char * GetAutoFileName() const
void SetOutputEvent(TGo4EventElement *event)
TGo4PolyCond * MakePolyCond(const char *fullname, Int_t npoints, Double_t(*points) [2], const char *HistoName=nullptr, Bool_t shapedcond=kFALSE)
void SetRunning(Bool_t on=kTRUE)
Graphs that renew themselves iteratively to monitor a value.
static const Int_t fgiMACROSTARTPOLL
static Bool_t IsServerMode()
static const char * fgcPYINIT
void PrintConditions(const char *expression=nullptr)
Bool_t NewStepProcessor(const char *name, TGo4EventProcessorParameter *par)
void SetEllipse(Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta=0, Int_t npoints=0)
Bool_t NewStepSource(const char *name, TGo4EventSourceParameter *par)
Bool_t RemoveEventProcessor(TGo4EventProcessor *pro)
Bool_t NewStepProcessor(const char *name, TGo4EventProcessorParameter *par)
virtual void StatusMessage(int level, Bool_t printout, const TString &)
void UpdateStatus(TGo4AnalysisStatus *state)
TGo4EventElement * GetOutputEvent(const char *stepname) const
Bool_t RemoveEventStructure(TGo4EventElement *ev)
TGo4Condition * GetAnalysisCondition(const char *name, const char *cond_cl=nullptr)
const char * GetName() const override
Bool_t SetStepStorage(const char *name, Bool_t on)
void SetDateTime(const char *str)
void Print(Option_t *opt="") const override
virtual Int_t UserPreLoop()
TGo4AnalysisClient * fxAnalysisSlave
void SetStatus(TGo4AnalysisStatus *state)
void SetStepChecking(Bool_t on=kTRUE)
Bool_t AddPicture(TGo4Picture *pic, const char *subfolder=nullptr)
Bool_t IsSortedOrder() const
void SetAnalysisName(const char *name)
Int_t GetAutoSaveCompression() const
Bool_t IsAutoSaveFileName() const
void SetOutputEvent(TGo4EventElement *event)
TGo4ShapedCond * MakeBoxCond(const char *fullname, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta, const char *HistoName=nullptr)
void DefineServerPasswords(const char *admin, const char *controller, const char *observer)
Bool_t RemoveParameter(const char *name)
void UpdateStatus(TGo4AnalysisStatus *state)
Bool_t AddDynamicEntry(TGo4DynamicEntry *entry)
static void SetCommandList(TGo4CommandProtoList *list)
virtual void UserPreLoop()
Long64_t ExecutePython(const char *script_name, Int_t *errcode=nullptr)
Bool_t SetParameter(const char *name, TGo4Parameter *par)
Int_t GetPriority() const
static void UnRegister(TGo4CommandReceiver *p)
static Bool_t CheckVersion(Int_t version)
virtual void CloseAnalysis()
Int_t StoreFolder(const char *stepname, TFolder *folder)
void SetCurrentSource(const char *str)
static void Info(const char *text,...) GO4_PRINTF_ARGS
const char * GetStatusMessage() const
TGo4TreeStructure * CreateTreeStructure(const char *treename)
void SetObserverPassword(const char *passwd)
Int_t StoreParameter(const char *name, TGo4Parameter *par)
TGo4InterruptHandler * fxInterruptHandler
void SetValues(Double_t low1, Double_t up1) override
Bool_t RemovePicture(const char *name)
Int_t GetAutoSaveInterval() const
virtual const char * What()
void SetAutoSaveOn(Bool_t on=kTRUE)
Bool_t AddParameter(TGo4Parameter *par, const char *subfolder=nullptr)
Int_t ProcessAnalysisSteps()
TObject * NextMatchingObject(const char *expr=nullptr, const char *folder=nullptr, Bool_t reset=kFALSE)
virtual void SetValues(const Int_t num, const Int_t *values)
static void CloseLogfile()
void SetControllerPassword(const char *passwd)
void SetSortedOrder(Bool_t on=kTRUE)
static Bool_t IsOutputEnabled()
TGo4ObjectStatus * CreateObjectStatus(const char *name, const char *folder=nullptr)
TGo4AnalysisObjectManager * ObjectManager() const
Bool_t ClearObjects(const char *name)
Bool_t EvaluateFolderpath(const char *fullname, TString &object, TString &folder)
void SetAutoSaveFile(const char *filename=nullptr, Bool_t overwrite=kFALSE, Int_t compression=5)
Bool_t DeleteObjects(const char *name)
void SetSortedOrder(Bool_t on=kTRUE)
Bool_t RemoveObject(const char *name, Bool_t del=kTRUE)
static const char * fgcDEFAULTSTATUSFILENAME
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)
TGo4Picture * GetPicture(const char *name)
Bool_t RemoveDynamicEntry(const char *entryname, const char *listname=nullptr)
Int_t IsAutoSaveOverwrite() const
void SendMessageToGUI(Int_t level, Bool_t printout, const char *text)
TGo4AnalysisStep * GetAnalysisStep(const char *name) const
void SetStepChecking(Bool_t on=kTRUE)
static Bool_t IsClientMode()
TGo4AnalysisObjectNames * fxObjectNames
Int_t StoreFitter(const char *name, TGo4Fitter *fit)
Bool_t AddPicture(TGo4Picture *pic, const char *subfolder=nullptr)
Bool_t RemoveEventSource(TGo4EventSource *source)
Bool_t RemoveDynamicEntry(const char *entryname)
TH1 * GetHistogram(const char *name)
void ShowEvent(const char *stepname, Bool_t isoutput=kTRUE)
friend class TGo4AnalysisWebStatus
void SetUpdateInterval(double v)
TString fxDefaultTestFileName
Bool_t SetParameterStatus(const char *name, TGo4ParameterStatus *par)
static void Register(const char *name, TGo4CommandReceiver *p)
virtual void RatemeterUpdate(TGo4Ratemeter *)
Bool_t RemoveAnalysisCondition(const char *name)
TGo4AnalysisObjectManager * fxObjectManager
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)
virtual Int_t UserEventFunc()
Bool_t SetFirstStep(const char *name)
static void OutputEnable(Bool_t on=kTRUE)
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)
Int_t IsErrorStopEnabled() const
TGo4AnalysisStepManager * fxStepManager
void SendStatusMessage(Int_t level, Bool_t printout, const TString &text) override
TGo4Condition * GetAnalysisCondition(const char *name, const char *cond_cl=nullptr)
void SetDynListInterval(Int_t val)
Bool_t SetParameter(const char *name, TGo4Parameter *par, TFolder *parent=nullptr)
TGo4ListCond * MakeListCond(const char *fullname, const Int_t num, const Int_t *values, const char *HistoName=nullptr)
void SetRunning(Bool_t on=kTRUE)
TGo4AnalysisObjectNames * CreateNamesList()
Bool_t AddCanvas(TCanvas *can, const char *subfolder=nullptr)
const char * GetMessage() const
Bool_t RemoveTree(TTree *tree, const char *stepname=nullptr)
TNamed * GetObject(const char *name, const char *folder=nullptr)
virtual void ResetCounts()
TTree * CreateSingleEventTree(const char *name, Bool_t isoutput=kTRUE)
Bool_t fbMakeWithAutosave
const char * GetSourceName() const
Int_t IsErrorStopEnabled() const
Bool_t RemoveEventStructure(TGo4EventElement *ev)
Bool_t RemoveEventStore(TGo4EventStore *store)
Bool_t AddTree(TTree *tree, const char *subfolder=nullptr)
TGo4AnalysisStep * GetAnalysisStep(const char *name)
Bool_t AddTree(TTree *tree, const char *subfolder=nullptr)
virtual void UserPostLoop()
void SetAdministratorPassword(const char *passwd)
Bool_t AddEventProcessor(TGo4EventProcessor *pro)
Bool_t AddEventSource(TGo4EventSource *source)
static const char fgcPYPROMPT
void SetNewInputFile(Bool_t on=kTRUE)
void ProcessCrtlCSignal()
Bool_t SetAnalysisCondition(const char *name, TGo4Condition *con, Bool_t counter=kTRUE)
Bool_t LoadObjects(const char *filename=nullptr)
Bool_t ResetBackStores(Bool_t clearflag=kFALSE)
static const char * Message(Int_t prio, const char *text,...) GO4_PRINTF2_ARGS
void PrintHistograms(const char *expression=nullptr)
Bool_t SetStepStorage(const char *name, Bool_t on)
static const char * fgcDEFAULTFILENAME
static void Debug(const char *text,...) GO4_PRINTF_ARGS
Int_t IsAutoSaveOn() const
Long64_t ExecuteScript(const char *script_name)
TGo4ObjectStatus * CreateObjectStatus(const char *name, const char *folder=nullptr)
TGo4AnalysisStep * GetAnalysisStepNum(Int_t number) const
void PrintConditions(const char *expression=nullptr)
Int_t GetDynListInterval() const
Bool_t SetAnalysisCondition(const char *name, TGo4Condition *con, Bool_t counter=kTRUE, TFolder *parent=nullptr)
static const char * fgcDEFAULTFILESUF
Bool_t RemoveEventSource(TGo4EventSource *source)
TH1 * GetHistogram(const char *name)
Int_t RunImplicitLoop(Int_t times, Bool_t showrate=kFALSE, Double_t process_event_interval=-1., Bool_t iswebserver=kFALSE)
const char * GetStatusMessage() const
Bool_t RemoveTree(TTree *tree, const char *stepname=nullptr)
TCanvas * GetCanvas(const char *name)
TStopwatch * fxAutoSaveClock
void SetAutoSave(Bool_t on=kTRUE)
Bool_t RemoveEventStore(TGo4EventStore *store)
Bool_t AddAnalysisCondition(TGo4Condition *con, const char *subfolder=nullptr)
void SendObjectToGUI(TObject *ob)
Long64_t ExecuteLine(const char *command, Int_t *errcode=nullptr)
TString fServerObserverPass
Int_t GetPriority() const
static TGo4CommandInvoker * Instance()
const char * GetEntryClass() const
Bool_t RemoveCanvas(const char *name)
Bool_t AddEventStructure(TGo4EventElement *ev)
Bool_t AddEventStore(TGo4EventStore *store)
void Message(Int_t prio, const char *text,...)
const char * GetEntryName() const
Bool_t AddEventSource(TGo4EventSource *source)
void OpenAutoSaveFile(bool for_writing=false)
TFolder * FindSubFolder(TFolder *parent, const char *subfolder, Bool_t create=kTRUE)
TGo4Parameter * GetParameter(const char *name, const char *parameter_class=nullptr)
Int_t StoreCondition(const char *name, TGo4Condition *con)
Bool_t AddEventProcessor(TGo4EventProcessor *pro)
TGo4Parameter * GetParameter(const char *name, const char *parameter_class=nullptr)
void SetCircle(Double_t cx, Double_t cy, Double_t r, Int_t npoints=0)
Bool_t ResetBackStores(Bool_t clearflag=kFALSE)
Bool_t AddAnalysisCondition(TGo4Condition *con, const char *subfolder=nullptr)
void SetHistogram(const char *name)
TTree * GetTree(const char *name)
virtual Bool_t InitEventClasses()
Bool_t NewStepStore(const char *name, TGo4EventStoreParameter *par)
static Bool_t IsBatchMode()
Bool_t DeleteObjects(const char *name)
Bool_t RemoveCanvas(const char *name)
Bool_t RemoveEventProcessor(TGo4EventProcessor *pro)
Bool_t AddAnalysisStep(TGo4AnalysisStep *next)
TGo4Parameter * MakeParameter(const char *fullname, const char *classname, const char *cmd=nullptr)
virtual Int_t UserPostLoop()
void StartObjectServer(const char *basename, const char *passwd)
const char * GetEventSourceName() const
TGo4AnalysisObjectNames * CreateNamesList()
TObject * NextMatchingObject(const char *expr, const char *folder, Bool_t reset)
Bool_t ClearObjects(const char *name)
TGo4EventElement * GetInputEvent(const char *stepname) const
TGo4Picture * GetPicture(const char *name)
TGo4WinCond * MakeWinCond(const char *fullname, Double_t xmin, Double_t xmax, const char *HistoName=nullptr)
Bool_t AddHistogram(TH1 *his, const char *subfolder=nullptr, Bool_t replace=kTRUE)
#define __GO4BUILDVERSION__
Int_t fiAutoSaveCompression
static TGo4Version * Instance()
static TGo4Analysis * fxInstance
virtual void ProcessSnifferEvents()
TGo4EventElement * GetEventStructure(const char *name) const
const char * GetStepName() const
Bool_t AddCanvas(TCanvas *can, const char *subfolder=nullptr)
TGo4ShapedCond * MakeFreeShapeCond(const char *fullname, Int_t npoints, Double_t(*points)[2], const char *HistoName=nullptr)
Bool_t RemoveAnalysisCondition(const char *name)
TNamed * GetObject(const char *name, const char *folder=nullptr)
Bool_t AddObject(TNamed *anything, const char *subfolder=nullptr, Bool_t replace=kTRUE)
TGo4EventElement * GetOutputEvent() const
static void Error(const char *text,...) GO4_PRINTF_ARGS
TGo4AnalysisSniffer * fSniffer
Bool_t Update(Int_t increment=1)
TGo4RollingGraph * MakeRollingGraph(const char *fullname, const char *title, Int_t points=0, Int_t average=1)
virtual Bool_t InitEventClasses()
TGo4ShapedCond * MakeCircleCond(const char *fullname, Int_t npoints, Double_t cx, Double_t cy, Double_t r, const char *HistoName=nullptr)
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)
Bool_t NewStepStore(const char *name, TGo4EventStoreParameter *par)
Bool_t AddHistogram(TH1 *his, const char *subfolder=nullptr, Bool_t replace=kTRUE)
TFolder * GetObjectFolder()
void Print(Option_t *opt="") const override
TGo4EventProcessor * GetEventProcessor() const
static void PrintRate(ULong64_t cnt, double rate)
static Int_t fiRunningMode
Bool_t RemoveObject(const char *name, Bool_t del=kTRUE)
static Int_t GetIgnoreLevel()
Bool_t SetParameterStatus(const char *name, TGo4ParameterStatus *par, TFolder *parent=nullptr)
Bool_t RemoveHistogram(const char *name, Bool_t del=kTRUE)
void SetAutoSaveOverwrite(Bool_t over=kTRUE)
void PrintParameters(const char *expression=nullptr)
Bool_t MainIsRunning() const
TGo4AnalysisStep * GetAnalysisStepNum(Int_t number)
Bool_t AddAnalysisStep(TGo4AnalysisStep *next)
void ProcessDynamicList()
Bool_t ProtectObjects(const char *name, const Option_t *flags)
static TString subGO4SYS(const char *subdir)
Bool_t ProtectObjects(const char *name, const Option_t *flags)
Bool_t SetPicture(const char *name, TGo4Picture *pic)
Bool_t AddTreeHistogram(const char *hisname, const char *treename, const char *varexp, const char *cutexp)
void SetConfigFileName(const char *name)
Bool_t AddObject(TNamed *anything, const char *subfolder=nullptr, Bool_t replace=kTRUE)
TGo4EventElement * GetEventStructure(const char *name) const
Bool_t RemoveParameter(const char *name)
ULong64_t GetCurrentCount() const
void PrintHistograms(const char *expression=nullptr)
void UpdateStatusBuffer()
Bool_t fbAutoSaveOverwrite
const char * GetSourceClass() const
Bool_t AddParameter(TGo4Parameter *par, const char *subfolder=nullptr)
Bool_t TestBufferUpdateConditions()
void SetAutoSaveInterval(Int_t i)
TString fxCurrentInputFileName
Bool_t AddDynamicEntry(TGo4DynamicEntry *entry)
Int_t GetDynListInterval() const
TGo4AnalysisStatus * CreateStatus()
Bool_t SaveStatus(const char *filename=nullptr)
void SetBox(Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta=0)
Bool_t AddEventStructure(TGo4EventElement *ev)
void UpdateRate(Int_t counts=1)
static const char * GO4SYS()
Bool_t RemoveHistogram(const char *name, Bool_t del=kTRUE)
Bool_t LoadObjects(TFile *statusfile)
Int_t ProcessAnalysisSteps()
void SaveObjects(TFile *file)
enum TGo4Analysis::@0 fxDoWorkingFlag
Bool_t AddEventStore(TGo4EventStore *store)
void PrintParameters(const char *expression=nullptr)
Bool_t LoadStatus(const char *filename=nullptr)
const char * GetErrMess() const
void SetDynListInterval(Int_t val)
static const Int_t fgiDYNLISTINTERVAL
static void SetRunningMode(int mode)
static TGo4Analysis * Instance()
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)
TGo4EventElement * fxSampleEvent
static const Int_t fgiAUTOSAVECOUNTS
TGo4EventElement * GetInputEvent(const char *stepname) const
Bool_t IsSortedOrder() const
TTree * GetTree(const char *name)
Bool_t SetFirstStep(const char *name)
Bool_t SetPicture(const char *name, TGo4Picture *pic, TFolder *parent=nullptr)
TGo4AnalysisWebStatus * CreateWebStatus()
Int_t GetNumberOfAnalysisSteps() const
Bool_t NewStepSource(const char *name, TGo4EventSourceParameter *par)
Bool_t fbAutoSaveFileChange
void SetAutoSaveCompression(Int_t i=5)
TGo4TreeStructure * CreateTreeStructure(TTree *thetree)
TFolder * GetObjectFolder()
Bool_t SetLastStep(const char *name)
Bool_t RemovePicture(const char *name)
TCanvas * GetCanvas(const char *name)
TGo4Analysis(const char *name=nullptr)
Bool_t FindObjectPathName(TObject *obj, TString &pathname, TFolder *fold=nullptr)
Bool_t SetLastStep(const char *name)
void SetAutoSaveInterval(Int_t interval=0)
const char * GetErrMess() const
void SetStatus(TGo4AnalysisStatus *state)