9#include "daq/dqm/HistoRelay2.h"
10#include <framework/pcore/EvtMessage.h>
19HistoRelay2::HistoRelay2(
string& filename,
string& dest,
int port)
23 m_filename = filename;
27HistoRelay2::~HistoRelay2()
32int HistoRelay2::collect()
39 auto ret = m_sock->send(msg);
47 printf(
"HistoRelay2: socket seems dead -> reconnect\n");
55EvtMessage* HistoRelay2::StreamFile(
string& filename)
57 TFile* file =
new TFile((std::string(
"/dev/shm/") + filename).c_str(),
"read");
58 if (file == NULL || file->IsZombie())
return NULL;
62 StreamHistograms(gDirectory, &hdl, numobjs);
67 (msg->
header())->reserved[0] = 0;
68 (msg->
header())->reserved[1] = numobjs;
72int HistoRelay2::StreamHistograms(TDirectory* curdir,
MsgHandler* msg,
int& numobjs)
74 TList* keylist = curdir->GetListOfKeys();
76 TIter nextkey(keylist);
78 while ((key = (TKey*)nextkey())) {
79 TObject* obj = curdir->FindObjectAny(key->GetName());
80 if (obj->IsA()->InheritsFrom(
"TH1")) {
83 msg->
add(h1, h1->GetName());
85 }
else if (obj->IsA()->InheritsFrom(TDirectory::Class())) {
87 TDirectory* tdir = (TDirectory*) obj;
89 TText subdir(0, 0, tdir->GetName());
90 msg->
add(&subdir,
"SUBDIR:" +
string(obj->GetName())) ;
93 StreamHistograms(tdir, msg, numobjs);
94 TText command(0, 0,
"COMMAND:EXIT");
95 msg->
add(&command,
"SUBDIR:EXIT");
Class to manage streamed object.
EvtHeader * header()
Get pointer to EvtHeader.
A class to encode/decode an EvtMessage.
virtual void add(const TObject *, const std::string &name)
Add an object to be streamed.
Abstract base class for different kinds of events.