Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:46

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
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   // cppcheck-suppress [virtualCallInConstructor]
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   // Interface to the default Input Master
0079   int registerInputManager(Fun4AllInputManager *InManager);
0080   Fun4AllInputManager *getInputManager(const std::string &name);
0081   int PrdfEvents() const;
0082   int DstEvents() const;
0083 
0084   //! run n events (0 means up to end of file)
0085   int run(const int nevnts = 0, const bool require_nevents = false);
0086 
0087   /*!
0088     \brief skip n events (0 means up to the end of file).
0089     Skip means read, don't process.
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