File indexing completed on 2025-08-03 08:16:46
0001
0002
0003 #ifndef FUN4ALL_FUN4ALLSERVER_H
0004 #define FUN4ALL_FUN4ALLSERVER_H
0005
0006 #include "Fun4AllBase.h"
0007
0008 #include "Fun4AllHistoManager.h" // for Fun4AllHistoManager
0009
0010 #include <phool/PHTimer.h>
0011
0012 #include <deque>
0013 #include <iostream>
0014 #include <map>
0015 #include <string>
0016 #include <utility> // for pair
0017 #include <vector>
0018
0019 class Fun4AllInputManager;
0020 class Fun4AllMemoryTracker;
0021 class Fun4AllSyncManager;
0022 class Fun4AllOutputManager;
0023 class PHCompositeNode;
0024 class PHTimeStamp;
0025 class SubsysReco;
0026 class TDirectory;
0027 class TH1;
0028 class TNamed;
0029
0030 class Fun4AllServer : public Fun4AllBase
0031 {
0032 public:
0033 static Fun4AllServer *instance();
0034 ~Fun4AllServer() override;
0035
0036
0037 virtual bool registerHisto(const std::string &hname, TNamed *h1d, const int replace = 0);
0038 virtual bool registerHisto(TNamed *h1d, const int replace = 0);
0039 template <typename T>
0040 T *makeHisto(T *t)
0041 {
0042 return ServerHistoManager->makeHisto(t);
0043 }
0044 virtual int isHistoRegistered(const std::string &name) const;
0045
0046 int registerSubsystem(SubsysReco *subsystem, const std::string &topnodename = "TOP");
0047 void addNewSubsystem(SubsysReco *subsystem, const std::string &topnodename = "TOP") { NewSubsystems.push_back(std::make_pair(subsystem, topnodename)); }
0048 int unregisterSubsystem(SubsysReco *subsystem);
0049 SubsysReco *getSubsysReco(const std::string &name);
0050 int registerOutputManager(Fun4AllOutputManager *manager);
0051 Fun4AllOutputManager *getOutputManager(const std::string &name);
0052 int registerHistoManager(Fun4AllHistoManager *manager);
0053 Fun4AllHistoManager *getHistoManager(const std::string &name);
0054 TNamed *getHisto(const std::string &hname) const;
0055 TNamed *getHisto(const unsigned int ihisto) const;
0056 std::string getHistoName(const unsigned int ihisto) const;
0057 void Print(const std::string &what = "ALL") const override;
0058
0059 void InitAll();
0060 int BeginRunTimeStamp(PHTimeStamp &TimeStp);
0061 int dumpHistos(const std::string &filename, const std::string &openmode = "RECREATE");
0062 int Reset();
0063 virtual int BeginRun(const int runno);
0064 int BeginRunSubsystem(const std::pair<SubsysReco *, PHCompositeNode *> &subsys);
0065 virtual int EndRun(const int runno = 0);
0066 virtual int End();
0067 PHCompositeNode *topNode() const { return TopNode; }
0068 PHCompositeNode *topNode(const std::string &name);
0069 int outfileclose();
0070 virtual int process_event();
0071 PHCompositeNode *getNode(const std::string &name, const std::string &topnodename = "TOP");
0072 int AddTopNode(const std::string &name);
0073 int MakeNodesTransient(PHCompositeNode *startNode);
0074 int MakeNodesPersistent(PHCompositeNode *startNode);
0075
0076 int AddComplaint(const std::string &complaint, const std::string &remedy);
0077
0078
0079 int registerInputManager(Fun4AllInputManager *InManager);
0080 Fun4AllInputManager *getInputManager(const std::string &name);
0081 int PrdfEvents() const;
0082 int DstEvents() const;
0083
0084
0085 int run(const int nevnts = 0, const bool require_nevents = false);
0086
0087
0088
0089
0090
0091 int skip(const int nevnts = 0);
0092
0093 int fileopen(const std::string &managername, const std::string &filename);
0094 int fileclose(const std::string &managername);
0095 int SegmentNumber();
0096 int ResetNodeTree();
0097 int BranchSelect(const std::string &managername, const std::string &branch, int iflag);
0098 int BranchSelect(const std::string &branch, int iflag);
0099 int setBranches(const std::string &managername);
0100 int setBranches();
0101 virtual void identify(std::ostream &out = std::cout) const;
0102 unsigned GetTopNodes(std::vector<std::string> &names) const;
0103 void GetInputFullFileList(std::vector<std::string> &fnames) const;
0104 void GetOutputManagerList(std::vector<std::string> &names) const;
0105 void GetModuleList(std::vector<std::string> &names) const;
0106 Fun4AllSyncManager *getSyncManager(const std::string &name = "DefaultSyncManager");
0107 int registerSyncManager(Fun4AllSyncManager *newmaster);
0108 int retcodestats(const int iret) { return retcodesmap[iret]; }
0109 void EventNumber(const int evtno) { eventnumber = evtno; }
0110 int EventNumber() const { return eventnumber; }
0111 void NodeIdentify(const std::string &name);
0112 void KeepDBConnection(const int i = 1) { keep_db_connected = i; }
0113 void PrintTimer(const std::string &name = "");
0114 static void PrintMemoryTracker(const std::string &name = "");
0115 int RunNumber() const { return runnumber; }
0116 int EventCounter() const { return eventcounter; }
0117 std::map<const std::string, PHTimer>::const_iterator timer_begin() { return timer_map.begin(); }
0118 std::map<const std::string, PHTimer>::const_iterator timer_end() { return timer_map.end(); }
0119
0120 protected:
0121 Fun4AllServer(const std::string &name = "Fun4AllServer");
0122 static int InitNodeTree(PHCompositeNode *topNode);
0123 int CountOutNodes(PHCompositeNode *startNode);
0124 int CountOutNodesRecursive(PHCompositeNode *startNode, const int icount);
0125 int UpdateEventSelector(Fun4AllOutputManager *manager);
0126 int unregisterSubsystemsNow();
0127 int setRun(const int runno);
0128 static Fun4AllServer *__instance;
0129 TH1 *FrameWorkVars{nullptr};
0130 Fun4AllMemoryTracker *ffamemtracker{nullptr};
0131 Fun4AllHistoManager *ServerHistoManager{nullptr};
0132 PHTimeStamp *beginruntimestamp{nullptr};
0133 PHCompositeNode *TopNode{nullptr};
0134 Fun4AllSyncManager *defaultSyncManager{nullptr};
0135
0136 int OutNodeCount{0};
0137 int bortime_override{0};
0138 int ScreamEveryEvent{0};
0139 int unregistersubsystem{0};
0140 int runnumber{0};
0141 int eventnumber{0};
0142 int eventcounter{0};
0143 int keep_db_connected{0};
0144
0145 std::vector<std::string> ComplaintList;
0146 std::vector<std::pair<SubsysReco *, PHCompositeNode *>> Subsystems;
0147 std::vector<std::pair<SubsysReco *, PHCompositeNode *>> DeleteSubsystems;
0148 std::deque<std::pair<SubsysReco *, std::string>> NewSubsystems;
0149 std::vector<int> RetCodes;
0150 std::vector<Fun4AllOutputManager *> OutputManager;
0151 std::vector<TDirectory *> TDirCollection;
0152 std::vector<Fun4AllHistoManager *> HistoManager;
0153 std::map<std::string, PHCompositeNode *> topnodemap;
0154 std::string default_Tdirectory = "Rint:/";
0155 std::vector<Fun4AllSyncManager *> SyncManagers;
0156 std::map<int, int> retcodesmap;
0157 std::map<const std::string, PHTimer> timer_map;
0158 };
0159
0160 #endif