BmnRoot
Loading...
Searching...
No Matches
BmnMQSink.h
Go to the documentation of this file.
1#ifndef BMNMQSINK_H_
2#define BMNMQSINK_H_
3
4#include <cxxabi.h> // __cxa_demangle
5// STL
6#include <memory>
7#include <string>
8#include <typeinfo>
9// Auxillary
10#include <boost/program_options.hpp>
11#include <zmq.h>
12// Root
13#include <Rtypes.h>
14#include <TBufferFile.h>
15// #include <RootSerializer.h>
16#include <TClonesArray.h>
17// FairRoot
18#include <FairRootManager.h>
19#include <FairSink.h>
20// #include <fairmq/Message.h>
21// #include <fairmq/Device.h>
22// #include <fairmq/ProgOptions.h>
24//
25// #include <fairmq/DeviceRunner.h>
26// BmnRoot
27
28#include "BmnMath.h"
29#include "BmnParts.h"
30
31namespace bpo = boost::program_options;
32
33// struct Branch
34
35class BmnMQSink : public FairSink
36{
37 public:
38 BmnMQSink(Int_t OutPort = 6666);
39 virtual ~BmnMQSink();
40
41 virtual Bool_t InitSink();
42 virtual void Close();
43 virtual void Reset() {}
44
45 virtual Sink_Type GetSinkType()
46 {
47 printf("\t\tType asked\n");
48 return kONLINESINK;
49 }
50
51 virtual void FillEventHeader(FairEventHeader* /* feh */) { printf("\t\tfill event header?\n"); }
52
53 virtual void SetOutTree(TTree* /* fTree */)
54 {
55 printf("\t\tset out tree?\n");
56 return;
57 }
58
59 virtual void Fill();
60
61 virtual Int_t Write(const char* name, Int_t /* option=0 */, Int_t /* bufsize=0 */)
62 {
63 printf("\t\twrite %s?\n", name);
64 return -1;
65 }
66
67 virtual void RegisterImpl(const char*, const char*, void*);
68 virtual void RegisterAny(const char* brname, const std::type_info& oi, const std::type_info& pi, void* obj);
69
70 virtual void WriteFolder() { printf("\t\t WriteFolder\n"); }
72
73 virtual void WriteObject(TObject* f, const char* name, Int_t /* option = 0 */)
74 {
75 // printf("\t\t WriteObject %08X %s\n", f, name);
76 }
77 virtual void WriteGeometry() { printf("\t\tWriteGeometry\n"); }
78
79 virtual FairSink* CloneSink();
80
81 bool IsPersistentBranchAny(const char* name);
82
83 /* /// Returns a default object for a branch or looks it up when it exists already. */
84 /* /// Returns nullptr when the branch does not exist or looking up with wrong type. */
85 /* /// The returned default object will be filled with data by the framework. */
86 template<typename T>
87 T GetPersistentBranchAny(const char* brname) const
88 {
89 static_assert(std::is_pointer<T>::value, "Return type of GetPersistentBranchAny has to be a pointer");
90 using P = typename std::remove_pointer<T>::type;
91 auto iter = fPersistentBranchesMap.find(brname);
92 if (iter != fPersistentBranchesMap.end()) {
93 // verify type consistency
94 if (typeid(P).hash_code() != iter->second->origtypeinfo.hash_code()) {
95 EmitPersistentBranchWrongTypeWarning(brname, typeid(P).name(), iter->second->origtypeinfo.name());
96 return nullptr;
97 }
98 return static_cast<T>(iter->second->ptraddr);
99 }
100 return nullptr;
101 }
102
103 private:
104 // fair::mq::DeviceRunner fSender;
105 // fair::mq::Device* fSender;//
106 // FairMQDevice* fSender;
107 std::string fOutChannel;
108 BmnParts fParts;
109 // FairMQParts fPartsF;
110 void* fCtx;
111 void* fOutSocket;
112 Int_t fOutPort;
113
114 map<const char*, TObject*> fObjMap;
115 map<const char*, TClonesArray*> fArrMap;
116
117 // private helper function to emit a warning
118 void EmitPersistentBranchWrongTypeWarning(const char* brname, const char* typen1, const char* typen2) const;
119
120 BmnMQSink(const BmnMQSink&);
121 BmnMQSink& operator=(const BmnMQSink&);
122 ClassDef(BmnMQSink, 1)
123};
124
125#endif /* BMNMQSINK_H_ */
float f
Definition P4_F32vec4.h:21
virtual void WriteObject(TObject *f, const char *name, Int_t)
Definition BmnMQSink.h:73
T GetPersistentBranchAny(const char *brname) const
Definition BmnMQSink.h:87
virtual Bool_t InitSink()
virtual FairSink * CloneSink()
virtual void WriteFolder()
Definition BmnMQSink.h:70
virtual void Fill()
virtual void FillEventHeader(FairEventHeader *)
Definition BmnMQSink.h:51
virtual void WriteGeometry()
Definition BmnMQSink.h:77
virtual ~BmnMQSink()
virtual void RegisterAny(const char *brname, const std::type_info &oi, const std::type_info &pi, void *obj)
virtual Int_t Write(const char *name, Int_t, Int_t)
Definition BmnMQSink.h:61
virtual void Close()
bool IsPersistentBranchAny(const char *name)
virtual void Reset()
Definition BmnMQSink.h:43
BmnMQSink(Int_t OutPort=6666)
virtual Sink_Type GetSinkType()
Definition BmnMQSink.h:45
virtual void SetOutTree(TTree *)
Definition BmnMQSink.h:53
virtual void RegisterImpl(const char *, const char *, void *)
virtual bool CreatePersistentBranchesAny()