Skip to content
Snippets Groups Projects
CbmDeviceEventBuilderEtofStar2019.h 2.73 KiB
Newer Older
/* Copyright (C) 2019 PI-UHd, GSI
   SPDX-License-Identifier: GPL-3.0-only
   Authors: Norbert Herrmann [committer] */
/**
 * CbmDeviceEventBuilderEtofStar2019.h
 *
 */

#ifndef CBMDEVICEEVENTBUILDERETOFSTAR2019_H_
#define CBMDEVICEEVENTBUILDERETOFSTAR2019_H_

#include "Timeslice.hpp"

#include "FairMQDevice.h"

#include "TMessage.h"
#include "TStopwatch.h"

class CbmStar2019EventBuilderEtofAlgo;
class CbmStar2019TofPar;

Administrator's avatar
Administrator committed
class CbmDeviceEventBuilderEtofStar2019 : public FairMQDevice {
public:
  CbmDeviceEventBuilderEtofStar2019();
  virtual ~CbmDeviceEventBuilderEtofStar2019();

  virtual Bool_t DoUnpack(const fles::Timeslice& ts, size_t component);
  virtual void Reset();
  virtual void Finish();

  void SetParContainers();

  Bool_t InitContainers();

  Bool_t ReInitContainers();

  void SetSandboxMode(Bool_t bSandboxMode = kTRUE) { fbSandboxMode = bSandboxMode; }
Administrator's avatar
Administrator committed
  void SetEventDumpEnable(Bool_t bDumpEna = kTRUE);

  /// Temp until we change from CbmMcbmUnpack to something else
  void AddMsComponentToList(size_t component, UShort_t usDetectorId);
  void SetNbMsInTs(size_t /*uCoreMsNb*/, size_t /*uOverlapMsNb*/) {};

  CbmDeviceEventBuilderEtofStar2019(const CbmDeviceEventBuilderEtofStar2019&) = delete;
  CbmDeviceEventBuilderEtofStar2019 operator=(const CbmDeviceEventBuilderEtofStar2019&) = delete;
Administrator's avatar
Administrator committed

protected:
  virtual void InitTask();
  bool HandleData(FairMQMessagePtr&, int);
  bool HandleParts(FairMQParts&, int);
  bool HandleMessage(FairMQMessagePtr&, int);
  virtual bool SendEvent(std::vector<Int_t>, int);
  virtual bool SendSubevent(uint, char*, int, int);

private:
  uint64_t fNumMessages;
  /// Control flags
  Bool_t fbMonitorMode;       //! Switch ON the filling of a minimal set of histograms
  Bool_t fbDebugMonitorMode;  //! Switch ON the filling of a additional set of histograms
  Bool_t fbSandboxMode;       //! Switch OFF the emission of data toward the STAR DAQ
  Bool_t fbEventDumpEna;      //! Switch ON the dumping of the events to a binary file
Administrator's avatar
Administrator committed

  /// Parameters management
  TList* fParCList;

  /// Statistics & first TS rejection
  uint64_t fulTsCounter;
  uint64_t fNumEvt;

  bool CheckTimeslice(const fles::Timeslice& ts);
  bool IsChannelNameAllowed(std::string channelName);

  std::vector<std::string> fAllowedChannels             = {"tofcomponent", "parameters", "etofevts", "syscmd"};
Administrator's avatar
Administrator committed
  std::vector<std::vector<std::string>> fChannelsToSend = {{}, {}, {}};

  /// Processing algo
  CbmStar2019EventBuilderEtofAlgo* fEventBuilderAlgo;
  TStopwatch fTimer;

  CbmStar2019TofPar* fUnpackPar;  //!

  /// Event dump to binary file
  std::fstream* fpBinDumpFile;
  const UInt_t kuBinDumpBegWord = 0xFEEDBEAF;
  const UInt_t kuBinDumpEndWord = 0xFAEBDEEF;
};

#endif /* CBMDEVICEEVENTBUILDERETOFSTAR2019_H_ */