Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DEVIOBufferWriter.h
Go to the documentation of this file.
1 #ifndef _DEVIOBufferWriter_
2 #define _DEVIOBufferWriter_
3 
4 #include <map>
5 #include <vector>
6 #include <string>
7 #include <set>
8 
9 #include <JANA/JObject.h>
10 #include <JANA/JEventLoop.h>
11 #include <JANA/JApplication.h>
12 
13 #include <JANA/JEventLoop.h>
14 
15 #include <DAQ/Df250PulseData.h>
16 #include <DAQ/Df250PulseIntegral.h>
17 #include <DAQ/Df250TriggerTime.h>
18 #include <DAQ/Df250WindowRawData.h>
19 #include <DAQ/Df125PulseIntegral.h>
20 #include <DAQ/Df125TriggerTime.h>
21 #include <DAQ/Df125WindowRawData.h>
22 #include <DAQ/Df125CDCPulse.h>
23 #include <DAQ/Df125FDCPulse.h>
24 #include <DAQ/Df125Config.h>
25 #include <DAQ/DF1TDCTriggerTime.h>
26 #include <DAQ/DF1TDCHit.h>
27 #include <DAQ/DF1TDCConfig.h>
28 #include <DAQ/DCAEN1290TDCConfig.h>
29 #include <DAQ/DCAEN1290TDCHit.h>
30 #include <DAQ/DDIRCTDCHit.h>
31 #include <DAQ/DDIRCTriggerTime.h>
32 #include <DAQ/DEPICSvalue.h>
33 #include <DAQ/DEventTag.h>
34 #include <DAQ/DCODAROCInfo.h>
35 #include <DAQ/DCODAEventInfo.h>
36 #include <DAQ/DL1Info.h>
37 #include <DAQ/daq_param_type.h>
39 #include <DAQ/Df125BORConfig.h>
40 #include <DAQ/DF1TDCConfig.h>
41 #include <DAQ/DCAEN1290TDCConfig.h>
42 #include <DAQ/Df125Config.h>
43 #include <DAQ/Df250BORConfig.h>
44 #include <DAQ/DDAQConfig.h>
45 #include <DAQ/DF1TDCBORConfig.h>
46 #include <DAQ/Df250Config.h>
47 #include <DAQ/Df250Scaler.h>
48 #include <DAQ/Df250AsyncPedestal.h>
49 
50 #include <DANA/DStatusBits.h>
51 #include <TTAB/DTranslationTable.h>
52 
53 #include <PID/DVertex.h>
54 #include <PID/DEventRFBunch.h>
55 
56 
57 using namespace std;
58 using namespace jana;
59 
61 {
62  public:
63  DEVIOBufferWriter(bool compact_flag = false, bool prefer_emulated_flag = false) {
64  COMPACT = compact_flag;
65  PREFER_EMULATED = prefer_emulated_flag;
66 
67  write_out_all_rocs = true; // default to writing all data
68  }
70 
71  void WriteEventToBuffer(JEventLoop *loop, vector<uint32_t> &buff, vector<const JObject *> objects_to_save) const;
72  void WriteEventToBuffer(JEventLoop *locEventLoop, vector<uint32_t> &buff) const;
73 
74  void SetROCsToWriteOut(set<uint32_t> &new_rocs_to_write_out) {
75  rocs_to_write_out = new_rocs_to_write_out;
76 
77  if(rocs_to_write_out.size() == 0)
78  write_out_all_rocs = true;
79  }
80 
81 
82  protected:
83 
84  void WriteBuiltTriggerBank(vector<uint32_t> &buff,
85  JEventLoop *loop,
86  vector<const DCODAROCInfo*> &coda_rocinfos,
87  vector<const DCODAEventInfo*> &coda_events) const;
88 
89  void WriteCAEN1290Data(vector<uint32_t> &buff,
90  vector<const DCAEN1290TDCHit*> &caen1290hits,
91  vector<const DCAEN1290TDCConfig*> &caen1290configs,
92  unsigned int Nevents) const;
93 
94 
95  void WriteF1Data(vector<uint32_t> &buff,
96  vector<const DF1TDCHit*> &F1hits,
97  vector<const DF1TDCTriggerTime*> &F1tts,
98  vector<const DF1TDCConfig*> &F1configs,
99  unsigned int Nevents) const;
100 
101  // new (Fall 2016+) firmware data format
102  void Writef250Data(vector<uint32_t> &buff,
103  vector<const Df250PulseData*> &f250pulses,
104  vector<const Df250TriggerTime*> &f250tts,
105  vector<const Df250WindowRawData*> &f250wrds, vector<const Df250Scaler*> &f250scalers,
106  unsigned int Nevents) const;
107 
108  // old (pre-Fall 2016) firmware data format
109  void Writef250Data(vector<uint32_t> &buff,
110  vector<const Df250PulseIntegral*> &f250pis,
111  vector<const Df250TriggerTime*> &f250tts,
112  vector<const Df250WindowRawData*> &f250wrds, vector<const Df250Scaler*> &f250scalers,
113  unsigned int Nevents ) const;
114 
115  void Writef125Data(vector<uint32_t> &buff,
116  vector<const Df125PulseIntegral*> &f125pis,
117  vector<const Df125CDCPulse*> &f125cdcpulses,
118  vector<const Df125FDCPulse*> &f125fdcpulses,
119  vector<const Df125TriggerTime*> &f125tts,
120  vector<const Df125WindowRawData*> &f125wrds,
121  vector<const Df125Config*> &f125configs,
122  unsigned int Nevents) const;
123 
124  void WriteDircData(vector<uint32_t> &buff,
125  vector<const DDIRCTDCHit*> &dirctdchits,
126  vector<const DDIRCTriggerTime*> &dirctts,
127  unsigned int Nevents) const;
128 
129  void WriteEPICSData(vector<uint32_t> &buff,
130  vector<const DEPICSvalue*> epicsValues) const;
131 
132  void WriteEventTagData(vector<uint32_t> &buff,
133  uint64_t event_status,
134  const DL3Trigger* l3trigger) const;
135 
136  template<typename T, typename M, typename F>
137  void WriteBORSingle(vector<uint32_t> &buff, M m, F&& modFunc) const;
138  void WriteBORData(JEventLoop *loop, vector<uint32_t> &buff) const;
139 
140  void WriteTSSyncData(JEventLoop *loop,
141  vector<uint32_t> &buff,
142  const DL1Info *l1info) const;
143 
144  void WriteDVertexData(JEventLoop *loop,
145  vector<uint32_t> &buff,
146  const DVertex *vertex) const;
147 
148  void WriteDEventRFBunchData(JEventLoop *loop,
149  vector<uint32_t> &buff,
150  const DEventRFBunch *rftime) const;
151 
153  set<uint32_t> rocs_to_write_out;
154 
155  bool COMPACT;
157 };
158 
159 #endif
#define F(x, y, z)
set< uint32_t > rocs_to_write_out
DEVIOBufferWriter(bool compact_flag=false, bool prefer_emulated_flag=false)
double Nevents
void SetROCsToWriteOut(set< uint32_t > &new_rocs_to_write_out)