22 #include <TDirectory.h>
29 #include <boost/foreach.hpp>
31 #include <sys/utsname.h>
58 , unregistersubsystem(0)
61 , beginruntimestamp(nullptr)
62 , keep_db_connected(0)
129 for (
int i = 0; i < kMAXSIGNALS; i++)
131 gSystem->IgnoreSignal((ESignals) i);
133 ostringstream histomanagername;
134 histomanagername <<
Name() <<
"HISTOS";
152 cout <<
"Fun4AllServer::dumpHistos() dumping histograms" << endl;
153 if (!filename.empty())
157 vector<Fun4AllHistoManager *>::const_iterator hiter;
160 iret += (*hiter)->dumpHistos(
"", openmode);
187 string currdir = gDirectory->GetPath();
188 TDirectory *tmpdir = gDirectory;
189 if (!tmpdir->FindObject(topnodename.c_str()))
191 tmpdir = tmpdir->mkdir(topnodename.c_str());
194 cout <<
"Error creating TDirectory topdir " << topnodename.c_str() << endl;
203 gROOT->cd(topnodename.c_str());
205 if (!tmpdir->FindObject(subsystem->
Name().c_str()))
207 tmpdir = tmpdir->mkdir(subsystem->
Name().c_str());
210 cout <<
"Error creating TDirectory subdir " << subsystem->
Name() << endl;
219 pair<SubsysReco *, PHCompositeNode *> newsubsyspair(subsystem, subsystopNode);
223 iret = subsystem->
Init(subsystopNode);
225 catch (
const exception &e)
227 cout <<
PHWHERE <<
" caught exception thrown during SubsysReco::Init() from "
228 << subsystem->
Name() << endl;
229 cout <<
"error: " << e.what() << endl;
234 cout <<
PHWHERE <<
" caught unknown type exception thrown during SubsysReco::Init() from "
235 << subsystem->
Name() << endl;
238 gROOT->cd(currdir.c_str());
245 cout <<
"Not Registering Subsystem " << subsystem->
Name() << endl;
249 cout <<
PHWHERE <<
" Error initializing subsystem "
250 << subsystem->
Name() <<
", return code: " << iret << endl;
255 cout <<
"Registering Subsystem " << subsystem->
Name() << endl;
258 ostringstream timer_name;
259 timer_name << subsystem->
Name() <<
"_" << topnodename;
260 PHTimer timer(timer_name.str());
271 pair<SubsysReco *, PHCompositeNode *> subsyspair(subsystem, 0);
279 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator sysiter, removeiter;
288 if ((*sysiter).first == (*removeiter).first)
297 cout <<
"unregisterSubsystem: Could not find SubsysReco "
298 << (*removeiter).first->Name()
299 <<
" in Fun4All Reco Module list" << endl;
300 delete (*removeiter).first;
305 cout <<
"Removing Subsystem: " << (*removeiter).first->Name()
306 <<
" at index " << index << endl;
309 delete (*removeiter).first;
312 vector<Fun4AllOutputManager *>::iterator outiter;
326 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator sysiter;
329 if ((*sysiter).first->Name() == name)
333 cout <<
"Found Subsystem " << name << endl;
335 return (*sysiter).first;
338 cout <<
"Could not find SubsysReco " << name << endl;
345 string separatorstring =
"------------------------------";
346 ostringstream complaintno;
361 vector<Fun4AllOutputManager *>::iterator iter;
364 if ((*iter)->Name() == manager->
Name())
366 cout <<
"OutputManager " << manager->
Name() <<
" allready in list" << endl;
372 cout <<
"Registering OutputManager " << manager->
Name() << endl;
381 vector<string>::iterator striter;
382 vector<pair<SubsysReco *, PHCompositeNode *> >::const_iterator subsysiter;
390 cout <<
PHWHERE <<
"striter: " << *striter << endl;
396 if (*striter == (*subsysiter).first->Name())
401 cout <<
PHWHERE <<
"setting RecoModuleIndex to " << index << endl;
410 cout <<
"Could not find module " << *striter
411 <<
", removing it from list of event selector modules" << endl;
422 vector<Fun4AllOutputManager *>::iterator iter;
425 if (name == (*iter)->Name())
429 cout <<
"Found OutputManager " << name << endl;
434 cout <<
"Could not find OutputManager" << name << endl;
441 vector<Fun4AllHistoManager *>::iterator iter;
444 if ((*iter)->Name() == name)
448 cout <<
"Found HistoManager " << name << endl;
455 cout <<
"Could not find HistoManager " << name << endl;
462 vector<Fun4AllHistoManager *>::iterator iter;
465 if ((*iter)->Name() == manager->
Name())
467 cout <<
"HistoManager " << manager->
Name() <<
" allready in list" << endl;
473 cout <<
"Registering HistoManager " << manager->
Name() << endl;
504 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator iter;
509 cout <<
"*******************************************************************************" << endl;
510 cout <<
"*******************************************************************************" << endl;
511 cout <<
"*******************************************************************************" << endl;
512 cout <<
"Now that I have your attention, please fix the following "
514 vector<string>::const_iterator viter;
517 cout << *viter << endl;
520 cout <<
"*******************************************************************************" << endl;
521 cout <<
"*******************************************************************************" << endl;
522 cout <<
"*******************************************************************************" << endl;
529 string currdir = gDirectory->GetPath();
534 cout <<
"Fun4AllServer::process_event processing " << (*iter).first->Name() << endl;
536 ostringstream newdirname;
537 newdirname << (*iter).second->getName() <<
"/" << (*iter).first->Name();
538 if (!gROOT->cd(newdirname.str().c_str()))
540 cout <<
PHWHERE <<
"Unexpected TDirectory Problem cd'ing to "
541 << (*iter).second->getName()
542 <<
" - send e-mail to off-l with your macro" << endl;
549 cout <<
"process_event: cded to " << newdirname.str().c_str() << endl;
555 ostringstream timer_name;
556 timer_name << (*iter).first->Name() <<
"_" << (*iter).second->getName();
557 std::map<const std::string, PHTimer>::iterator titer =
timer_map.find(timer_name.str());
558 bool timer_found =
false;
562 titer->second.restart();
566 cout <<
"could not find timer for " << timer_name << endl;
568 RetCodes[icnt] = (*iter).first->process_event((*iter).second);
571 titer->second.stop();
575 catch (
const exception &e)
577 cout <<
PHWHERE <<
" caught exception thrown during process_event from "
578 << (*iter).first->Name() << endl;
579 cout <<
"error: " << e.what() << endl;
584 cout <<
PHWHERE <<
" caught unknown type exception thrown during process_event from "
585 << (*iter).first->Name() << endl;
594 cout <<
"Fun4AllServer::Discard Event by " << (*iter).first->Name() << endl;
603 cout <<
"Fun4AllServer::Abort Event by " << (*iter).first->Name() << endl;
610 cout <<
"Fun4AllServer::Abort Run by " << (*iter).first->Name() << endl;
615 cout <<
"Fun4AllServer::Unknown return code: "
616 <<
RetCodes[icnt] <<
" from process_event method of "
617 << (*iter).first->Name() << endl;
618 cout <<
"This smells like an uninitialized return code and" << endl;
619 cout <<
"it is too dangerous to continue, this Run will be aborted" << endl;
620 cout <<
"If you do not know how to fix this please send mail to" << endl;
621 cout <<
"phenix-off-l with this message" << endl;
632 gROOT->cd(currdir.c_str());
646 static int first = 1;
658 cout <<
PHWHERE <<
" FATAL: Someone changed the number of Output Nodes on the fly, from " <<
OutNodeCount <<
" to " << newcount << endl;
661 vector<Fun4AllOutputManager *>::iterator iterOutMan;
664 if (!(*iterOutMan)->DoNotWriteEvent(&
RetCodes))
668 cout <<
"Writing Event for " << (*iterOutMan)->Name() << endl;
670 (*iterOutMan)->WriteGeneric(dstNode);
676 cout <<
"Not Writing Event for " << (*iterOutMan)->Name() << endl;
686 cout <<
"Fun4AllServer::process_event Resetting Event " << (*iter).first->Name() << endl;
688 (*iter).first->ResetEvent((*iter).second);
694 cout <<
"Fun4AllServer::process_event Resetting Event for Sync Manager " << syncman->
Name() << endl;
704 vector<string> ResetNodeList;
705 ResetNodeList.push_back(
"DST");
708 map<string, PHCompositeNode *>::const_iterator iter;
712 for (vector<string>::const_iterator nodename = ResetNodeList.begin();
713 nodename != ResetNodeList.end(); ++nodename)
715 if (mainIter.
cd(*nodename))
728 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator iter;
733 cout <<
"Fun4AllServer::Reset Resetting " << (*iter).first->Name() << endl;
735 i += (*iter).first->Reset((*iter).second);
737 vector<Fun4AllHistoManager *>::iterator hiter;
748 cout <<
"Setting BOR timestamp to ";
767 cout <<
"overriding BOR timestamp by ";
774 cout <<
"Fun4AllServer::BeginRun: Run number " << runno <<
" uses RECO TIMESTAMP: ";
778 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator iter;
793 string currdir = gDirectory->GetPath();
796 ostringstream newdirname;
797 newdirname << (*iter).second->getName() <<
"/" << (*iter).first->Name();
798 if (!gROOT->cd(newdirname.str().c_str()))
800 cout <<
PHWHERE <<
"Unexpected TDirectory Problem cd'ing to "
801 << (*iter).second->getName()
802 <<
" - send e-mail to off-l with your macro" << endl;
809 cout <<
"BeginRun: cded to " << newdirname.str().c_str() << endl;
815 cout <<
"Fun4AllServer::BeginRun: InitRun for " << (*iter).first->Name() << endl;
819 iret = (*iter).first->InitRun((*iter).second);
821 catch (
const exception &e)
823 cout <<
PHWHERE <<
" caught exception thrown during SubsysReco::InitRun() from "
824 << (*iter).first->Name() << endl;
825 cout <<
"error: " << e.what() << endl;
830 cout <<
PHWHERE <<
" caught unknown type exception thrown during SubsysReco::InitRun() from "
831 << (*iter).first->Name() << endl;
837 cout <<
PHWHERE <<
"Module " << (*iter).first->Name() <<
" issued Abort Run, exiting" << endl;
842 cout <<
PHWHERE <<
"Module " << (*iter).first->Name() <<
" issued non Fun4AllReturnCodes::EVENT_OK return code " << iret <<
" in InitRun()" << endl;
846 gROOT->cd(currdir.c_str());
857 cout <<
"WARNING WARNING, DBs will not be disconnected" << endl;
858 cout <<
"This is for DB server testing purposes only" << endl;
859 cout <<
"If you do not test our DB servers, remove" << endl;
860 cout <<
"Fun4AllServer->KeepDBConnection()" << endl;
861 cout <<
"from your macro" << endl;
881 while ((thisNode = iterat()))
883 if ((thisNode->getType() ==
"PHCompositeNode"))
892 cout << thisNode->getName() <<
", Node Count: " << icnt << endl;
904 while ((thisNode = iterat()))
906 if ((thisNode->getType() ==
"PHCompositeNode"))
912 thisNode->makeTransient();
923 while ((thisNode = iterat()))
925 if ((thisNode->getType() ==
"PHCompositeNode"))
931 thisNode->makePersistent();
939 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator iter;
941 string currdir = gDirectory->GetPath();
946 cout <<
"Fun4AllServer::EndRun: EndRun("
947 << runno <<
") for " << (*iter).first->Name() << endl;
949 ostringstream newdirname;
950 newdirname << (*iter).second->getName() <<
"/" << (*iter).first->Name();
951 if (!gROOT->cd(newdirname.str().c_str()))
953 cout <<
PHWHERE <<
"Unexpected TDirectory Problem cd'ing to "
954 << (*iter).second->getName()
955 <<
" - send e-mail to off-l with your macro" << endl;
962 cout <<
"EndRun: cded to " << newdirname.str().c_str() << endl;
967 (*iter).first->EndRun(runno);
969 catch (
const exception &e)
971 cout <<
PHWHERE <<
" caught exception thrown during SubsysReco::EndRun() from "
972 << (*iter).first->Name() << endl;
973 cout <<
"error: " << e.what() << endl;
978 cout <<
PHWHERE <<
" caught unknown type exception thrown during SubsysReco::EndRun() from "
979 << (*iter).first->Name() << endl;
983 gROOT->cd(currdir.c_str());
993 vector<pair<SubsysReco *, PHCompositeNode *> >::iterator iter;
995 string currdir = gDirectory->GetPath();
1000 cout <<
"Fun4AllServer::End: End for " << (*iter).first->Name() << endl;
1002 ostringstream newdirname;
1003 newdirname << (*iter).second->getName() <<
"/" << (*iter).first->Name();
1004 if (!gROOT->cd(newdirname.str().c_str()))
1006 cout <<
PHWHERE <<
"Unexpected TDirectory Problem cd'ing to "
1007 << (*iter).second->getName()
1008 <<
" - send e-mail to off-l with your macro" << endl;
1015 cout <<
"End: cded to " << newdirname.str().c_str() << endl;
1020 i += (*iter).first->End((*iter).second);
1022 catch (
const exception &e)
1024 cout <<
PHWHERE <<
" caught exception thrown during SusbsysReco::End() from "
1025 << (*iter).first->Name() << endl;
1026 cout <<
"error: " << e.what() << endl;
1031 cout <<
PHWHERE <<
" caught unknown type exception thrown during SubsysReco::End() from "
1032 << (*iter).first->Name() << endl;
1036 gROOT->cd(currdir.c_str());
1041 cout <<
"No Run Node, not writing Runwise info" << endl;
1047 vector<Fun4AllOutputManager *>::iterator IOiter;
1050 (*IOiter)->WriteNode(runNode);
1060 cout <<
"*******************************************************************************" << endl;
1061 cout <<
"*******************************************************************************" << endl;
1062 cout <<
"*******************************************************************************" << endl;
1063 cout <<
"Now that we are at the End(), please fix the following "
1065 vector<string>::const_iterator viter;
1068 cout << *viter << endl;
1070 cout <<
" " << endl;
1071 cout <<
"*******************************************************************************" << endl;
1072 cout <<
"*******************************************************************************" << endl;
1073 cout <<
"*******************************************************************************" << endl;
1081 if (what ==
"ALL" || what ==
"HISTOS")
1086 histoman->
Print(what);
1089 if (what ==
"ALL" || what ==
"SUBSYSTEMS")
1092 cout <<
"--------------------------------------" << endl
1094 cout <<
"List of Subsystems in Fun4AllServer:" << endl;
1096 vector<pair<SubsysReco *, PHCompositeNode *> >::const_iterator miter;
1099 cout << (*miter).first->Name()
1100 <<
" running under topNode " << (*miter).second->getName() << endl;
1105 if (what ==
"ALL" || what ==
"INPUTMANAGER")
1110 cout <<
"SyncManager: " << syncman->
Name() << endl;
1111 syncman->
Print(what);
1115 if (what ==
"ALL" || what.find(
"OUTPUTMANAGER") != string::npos)
1118 string pass_on = what;
1119 if (pass_on ==
"ALL" || pass_on ==
"OUTPUTMANAGER")
1121 cout <<
"--------------------------------------" << endl
1123 cout <<
"List of OutputManagers in Fun4AllServer:" << endl;
1128 string::size_type pos = pass_on.find(
"%");
1129 pass_on = pass_on.substr(pos + 1, pass_on.size());
1133 outman->
Print(pass_on);
1137 if (what ==
"ALL" || what ==
"TOPNODES")
1140 cout <<
"--------------------------------------" << endl
1142 cout <<
"List of TopNodes in Fun4AllServer:" << endl;
1144 map<std::string, PHCompositeNode *>::const_iterator iter;
1147 cout << iter->first <<
" is at " << hex
1148 << iter->second << dec << endl;
1152 if (what ==
"ALL" || what ==
"NODETREE")
1155 cout <<
"--------------------------------------" << endl
1157 cout <<
"List of Nodes in Fun4AllServer:" << endl;
1159 map<std::string, PHCompositeNode *>::const_iterator iter;
1162 cout <<
"Node Tree under TopNode " << iter->first << endl;
1174 out <<
"Fun4AllServer Name: " <<
ThisName << endl;
1184 cout <<
"Erasing OutputManager "
1186 <<
" at memory location " << *(
OutputManager.begin()) << endl;
1209 map<string, PHCompositeNode *>::const_iterator iter;
1213 return iter->second;
1220 return iter->second;
1222 cout <<
PHWHERE <<
" Could not create new topNode " << name
1223 <<
" send email to off-l with the following printout: " << endl;
1226 cout << iter->first <<
" is at " << hex << iter->second << endl;
1233 map<string, PHCompositeNode *>::const_iterator iter;
1265 vector<Fun4AllSyncManager *>::const_iterator iter;
1268 if ((*iter)->getInputManager(name))
1270 return (*iter)->getInputManager(name);
1273 cout <<
"Could not locate input manager " << name << endl;
1291 static bool run_number_forced = rc->
FlagExist(
"RUNNUMBER");
1292 static int ifirst = 1;
1293 if (ifirst && run_number_forced)
1296 cout <<
"Fun4AllServer: Runnumber forced to " <<
runnumber <<
" by RUNNUMBER IntFlag" << endl;
1301 vector<Fun4AllSyncManager *>::const_iterator iter;
1304 int resetnodetree = 0;
1309 cout <<
"executing run for input master " << (*iter)->Name() << endl;
1311 int retval = (*iter)->run(1);
1337 (*iter)->PushBackInputMgrsEvents(1);
1348 int runno = (*iter)->CurrentRun();
1352 if (currentrun == 0)
1358 if (currentrun != runno)
1360 cout <<
"Mixing of Runs within same event is not supported" << endl;
1361 cout <<
"Here is the list of Sync Managers and their runnumbers:" << endl;
1362 vector<Fun4AllSyncManager *>::const_iterator syiter;
1365 cout << (*syiter)->Name() <<
" run number: " << (*syiter)->CurrentRun() << endl;
1367 cout <<
"Exiting now" << endl;
1375 if (currentrun !=
runnumber && !run_number_forced)
1383 else if (!run_number_forced)
1398 const double significand = icnt / pow(10, (
int) (log10(icnt)));
1400 if ((fmod(significand, 1.0) == 0 && significand <= 10) or icnt == 0)
1402 cout <<
"Fun4AllServer::run - process_event cycle "
1404 if (require_nevents)
1405 cout <<
", " << icnt_good <<
" good event so far";
1424 if (require_nevents)
1430 if (iret || (nevnts > 0 && icnt_good >= nevnts))
1433 else if (iret || (nevnts > 0 && ++icnt >= nevnts))
1445 vector<Fun4AllSyncManager *>::const_iterator iter;
1448 iret += (*iter)->skip(nevnts);
1457 vector<Fun4AllSyncManager *>::const_iterator iter;
1460 iret += (*iter)->fileopen(managername, filename);
1468 vector<Fun4AllSyncManager *>::const_iterator iter;
1471 iret += (*iter)->BranchSelect(managername, branch, iflag);
1479 vector<Fun4AllSyncManager *>::const_iterator iter;
1482 iret += (*iter)->BranchSelect(branch, iflag);
1490 vector<Fun4AllSyncManager *>::const_iterator iter;
1493 iret += (*iter)->setBranches(managername);
1501 vector<Fun4AllSyncManager *>::const_iterator iter;
1504 iret += (*iter)->setBranches();
1512 vector<Fun4AllSyncManager *>::const_iterator iter;
1515 iret += (*iter)->fileclose(managername);
1540 map<string, PHCompositeNode *>::const_iterator iter;
1543 names.push_back(iter->first);
1545 return names.size();
1551 vector<Fun4AllOutputManager *>::const_iterator iter;
1554 names.push_back((*iter)->Name());
1562 vector<pair<SubsysReco *, PHCompositeNode *> >::const_iterator iter;
1565 names.push_back((*iter).first->Name());
1574 if (syncman->
Name() == newmaster->
Name())
1576 cout <<
"Input Master " << newmaster->
Name()
1577 <<
" already registered" << endl;
1583 cout <<
"Registering Input Master " << newmaster->
Name() << endl;
1592 if (name ==
"DefaultSyncManager")
1596 vector<Fun4AllSyncManager *>::iterator iter;
1600 if ((*iter)->Name() == name)
1605 cout <<
"Could not find Input Master " << name << endl;
1617 cout <<
"Fun4AllServer::setRun(): could not get timestamp for run " << runno
1618 <<
", using tics(0) timestamp: ";
1636 cout <<
"Could not locate node " << name
1637 <<
" or no PHObject Node" << endl;
1644 map<const string, PHTimer>::const_iterator iter;
1649 iter->second.print_stat();
1657 iter->second.print_stat();
1661 cout <<
"No timer with name " << name <<
" found" << endl;
1662 cout <<
"Existing timers:" << endl;
1665 cout << iter->first << endl;
std::vector< std::string > ComplaintList
int registerInputManager(Fun4AllInputManager *InManager)
int AddComplaint(const std::string &complaint, const std::string &remedy)
PHPointerList< PHNode > & ls()
virtual int Init(PHCompositeNode *)
int registerSyncManager(Fun4AllSyncManager *newmaster)
virtual std::vector< unsigned > * RecoModuleIndex()
retrieves pointer to vector of event selector module ids
int verbosity
The verbosity level. 0 means not verbose at all.
std::vector< Fun4AllOutputManager * > OutputManager
static Fun4AllServer * __instance
int BeginRunTimeStamp(PHTimeStamp &TimeStp)
void setOutfileName(const std::string &filename)
std::vector< Fun4AllSyncManager * > SyncManagers
PHTimeStamp * beginruntimestamp
virtual int EndRun(const int runno=0)
void Print(const std::string &what="ALL") const
void GetInputFullFileList(std::vector< std::string > &fnames) const
PHNode * findFirst(const std::string &, const std::string &)
virtual void Print(const std::string &what="ALL") const
Fun4AllInputManager * getInputManager(const char *name)
void GetModuleList(std::vector< std::string > &names) const
int AddTopNode(const std::string &name)
void Print(const std::string &what="ALL") const
Fun4AllSyncManager * getSyncManager(const std::string &name="DefaultSyncManager")
virtual std::vector< std::string > * EventSelector()
retrieves pointer to vector of event selector module names
virtual void Verbosity(const int i)
int fileopen(const char *managername="NONE", const char *filename="NONE")
TNamed * getHisto(const std::string &hname) const
static Fun4AllServer * instance()
PHBoolean addNode(PHNode *)
void PrintTimer(const std::string &name="")
Fun4AllServer(const std::string &name="Fun4AllServer")
PHBoolean cd(const std::string &pathString="")
const char * getHistoName(const unsigned int ihisto) const
virtual int FlagExist(const std::string &name) const
virtual void set_IntFlag(const std::string &name, const int flag)
virtual int DisconnectDB()
unsigned GetTopNodes(std::vector< std::string > &names) const
int registerHistoManager(Fun4AllHistoManager *manager)
int skip(const int nevnts=0)
skip n events (0 means up to the end of file). Skip means read, don't process.
int dumpHistos(const std::string &filename="", const std::string &openmode="RECREATE")
int MakeNodesPersistent(PHCompositeNode *startNode)
std::string default_Tdirectory
static recoConsts * instance()
Fun4AllHistoManager * ServerHistoManager
std::vector< std::pair< SubsysReco *, PHCompositeNode * > > DeleteSubsystems
void GetInputFullFileList(std::vector< std::string > &fnames) const
int registerSubsystem(SubsysReco *subsystem, const std::string &topnodename="TOP")
void TotalEvents(const int i)
std::map< int, int > retcodesmap
int unregisterSubsystemsNow()
virtual void identify(std::ostream &os=std::cout) const
PHCompositeNode * getNode(const char *name, const char *topnodename="TOP")
std::map< const std::string, PHTimer > timer_map
int registerInputManager(Fun4AllInputManager *InManager)
int run(const int nevnts=0, const bool require_nevents=false)
run n events (0 means up to end of file)
int CountOutNodes(PHCompositeNode *startNode)
Fun4AllHistoManager * getHistoManager(const std::string &name)
virtual const std::string Name() const
Returns the name of this module.
void SegmentNumber(const int iseg)
int registerOutputManager(Fun4AllOutputManager *manager)
TNamed * getHisto(const std::string &hname) const
std::vector< int > RetCodes
const char * getHistoName(const unsigned int ihisto) const
std::vector< Fun4AllHistoManager * > HistoManager
virtual int process_event()
int unregisterSubsystem(SubsysReco *subsystem)
PHCompositeNode * topNode() const
std::map< std::string, PHCompositeNode * > topnodemap
virtual int isHistoRegistered(const std::string &name) const
int BranchSelect(const char *managername, const char *branch, int iflag)
virtual bool registerHisto(const char *hname, TNamed *h1d, const int replace=0)
virtual void identify(std::ostream &out=std::cout) const
Fun4AllOutputManager * getOutputManager(const std::string &name)
Output even more messages.
int InitNodeTree(PHCompositeNode *topNode)
void GetOutputManagerList(std::vector< std::string > &names) const
Output some useful messages during manual command line running.
std::vector< std::pair< SubsysReco *, PHCompositeNode * > > Subsystems
void PrdfEvents(const int i)
bool registerHisto(const std::string &hname, TNamed *h1d, const int replace=0)
virtual void Print(const std::string &what="ALL") const
print method (dump event selector)
SubsysReco * getSubsysReco(const std::string &name)
static const int NFRAMEWORKBINS
void NodeIdentify(const std::string &name)
int UpdateEventSelector(Fun4AllOutputManager *manager)
Fun4AllSyncManager * defaultSyncManager
int fileclose(const std::string &managername="")
virtual int BeginRun(const int runno)
int setRun(const int runnumber)
void forEach(PHNodeOperation &)
int CountOutNodesRecursive(PHCompositeNode *startNode, const int icount)
Quiet mode. Only output critical messages. Intended for batch production mode.
virtual int get_IntFlag(const std::string &name) const
PHCompositeNode * TopNode
int MakeNodesTransient(PHCompositeNode *startNode)
std::vector< TDirectory * > TDirCollection
int isHistoRegistered(const std::string &name) const