Skip to content
Snippets Groups Projects
CbmMqHistoServer.h 2.7 KiB
Newer Older
/* Copyright (C) 2019-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
   SPDX-License-Identifier: GPL-3.0-only
   Authors: Pierre-Alain Loizeau [committer] */

#ifndef CBMMQHISTOSERVER_H
#define CBMMQHISTOSERVER_H

#include "FairMQDevice.h"

#include "THttpServer.h"
#include "TObjArray.h"
#include <thread>
Administrator's avatar
Administrator committed
#include <string>

class TNamed;
class TCanvas;

Administrator's avatar
Administrator committed
class CbmMqHistoServer : public FairMQDevice {
public:
  CbmMqHistoServer();
Administrator's avatar
Administrator committed
  virtual ~CbmMqHistoServer();
Administrator's avatar
Administrator committed
  void UpdateHttpServer();
Administrator's avatar
Administrator committed
protected:
  virtual void InitTask();
Administrator's avatar
Administrator committed
  bool ReceiveData(FairMQMessagePtr& msg, int index);
Administrator's avatar
Administrator committed
  bool ReceiveHistoConfig(FairMQMessagePtr& msg, int index);
Administrator's avatar
Administrator committed
  bool ReceiveCanvasConfig(FairMQMessagePtr& msg, int index);
  bool ReceiveConfigAndData(FairMQParts& msg, int index);

Administrator's avatar
Administrator committed
  virtual void PreRun();
Administrator's avatar
Administrator committed
  virtual void PostRun();
Administrator's avatar
Administrator committed
private:
  /// Parameters
  std::string fsChannelNameHistosInput  = "histogram-in";
  std::string fsChannelNameHistosConfig = "histo-conf";
  std::string fsChannelNameCanvasConfig = "canvas-conf";
  std::string fsHistoFileName           = "MqHistos.root";
  uint32_t fuHttpServerPort             = 8098;
Administrator's avatar
Administrator committed
  /// Array of histograms with unique names
  TObjArray fArrayHisto;
  /// Vector of string with ( HistoName, FolderPath ) to send to the histogram server
  std::vector<std::pair<std::string, std::string>> fvpsHistosFolder = {};
Administrator's avatar
Administrator committed
  /// Vector of string pairs with ( CanvasName, CanvasConfig ) to send to the histogram server
  /// Format of Can config is "Name;Title;NbPadX(U);NbPadY(U);ConfigPad1(s);....;ConfigPadXY(s)"
  /// Format of Pad config is "GrixX(b),GridY(b),LogX(b),LogY(b),LogZ(b),HistoName(s),DrawOptions(s)"
  std::vector<std::pair<std::string, std::string>> fvpsCanvasConfig = {};
  std::vector<bool> fvbCanvasReady                                  = {};
  bool fbAllCanvasReady                                             = false;
  std::vector<std::pair<TNamed*, std::string>> fvHistos  = {};  //! Vector of Histos pointers and folder path
  std::vector<bool> fvbHistoRegistered                   = {};
  bool fbAllHistosRegistered                             = false;
  std::vector<std::pair<TCanvas*, std::string>> fvCanvas = {};  //! Vector of Canvas pointers and folder path
  std::vector<bool> fvbCanvasRegistered                  = {};
  bool fbAllCanvasRegistered                             = false;
Administrator's avatar
Administrator committed
  /// Internal status
Administrator's avatar
Administrator committed
  std::thread fThread;
Administrator's avatar
Administrator committed
  template<class HistoT>
  bool ReadHistogram(HistoT* pHist);
  int FindHistogram(const std::string& name);
  bool PrepareCanvas(uint32_t uCanvIdx);
Administrator's avatar
Administrator committed
  bool ResetHistograms();
  bool SaveHistograms();
Administrator's avatar
Administrator committed
#endif  // CBMMQHISTOSERVER_H