Belle II Software  release-05-01-25
DesSer.h
1 //+
2 // File : DesSer.h
3 // Description : Module to receive data from outside and store it to DataStore
4 //
5 // Author : Satoru Yamada, IPNS, KEK
6 // Date : 4 - Sep - 2014
7 //-
8 
9 #ifndef DESSER_H
10 #define DESSER_H
11 
12 #include <string>
13 #include <vector>
14 
15 #include <sys/time.h>
16 
17 #include <daq/slc/readout/RunInfoBuffer.h>
18 #include <daq/rawdata/CprErrorMessage.h>
19 #include <daq/rawdata/modules/DAQConsts.h>
20 #include <rawdata/dataobjects/PreRawCOPPERFormat_latest.h>
21 
22 #include <daq/dataobjects/SendHeader.h>
23 #include <daq/dataobjects/SendTrailer.h>
24 
25 #define BUF_SIZE_WORD 4800
26 
28 // From Serializer.cc
30 
31 
32 namespace Belle2 {
40  class DesSer {
41 
42  // Public functions
43  public:
44 
46  DesSer();
47 
48  // DesSer();
49  virtual ~DesSer();
50 
51  void initialize(bool close_listen = true);
52 
54  virtual void DataAcquisition() = 0;
55 
57  void printData(int* buf, int nwords);
58 
60  int max_nevt;
61 
63  double max_seconds;
64 
67 
70 
73 
75  std::string m_dump_fname;
76 
78  FILE* m_fp_dump;
79 
81  int* m_buffer;
82 
84  int* m_bufary[ NUM_PREALLOC_BUF ];
85  // int* m_bufary[NUM_EVT_PER_BASF2LOOP];
86 
88  int* getPreAllocBuf();
89 
91  int* getNewBuffer(int nwords, int* delete_flag);
92 
93  // For monitoring
94  timeval m_t0;
95  double m_recvd_totbytes;
96  double m_recvd_prev_totbytes;
97  double m_sent_totbytes;
98  double m_sent_prev_totbytes;
99  int m_ncycle;
101  double cur_time;
102 
103  double m_start_time;
104  double m_prev_time;
105  int prev_event;
106 
108  double getTimeSec();
109 
111  void recordTime(int event, double* array);
112 
114  unsigned int calcSimpleChecksum(int* buf, int nwords);
115 
117  unsigned int calcXORChecksum(int* buf, int nwords);
118 
119 
120  void clearNumUsedBuf()
121  {
122  m_num_usedbuf = 0;
123  return ;
124  }
125 
127  void RateMonitor(unsigned int nevt);
128 
129 
132 
134  std::string m_nodename;
135 
137  int m_nodeid;
138 
141 
143  unsigned int m_exprunsubrun_no;
144 
147 
149  int m_exp_no;
150 
153 
156 
159 
161  void shmOpen(char* path_cfg, char* path_sta);
162 
164  int* shmGet(int fd, int size_words);
165 
168 
171 
173  //int* m_cfg_buf;
175  //int* m_cfg_sta;
176 
178 
181 
184 
186  // static RunInfoBuffer g_status;
187  // RunInfoBuffer g_status;
188 
190 
192  // From Serializer.cc
194 
196  void initializeNode();
197 
199  void beginRun();
200 
201  void endRun();
202  void terminate();
203 
204  // int sendByWriteV(RawDataBlock* rawdblk);
205  int sendByWriteV(RawDataBlockFormat* rawdblk);
206  // void Connect(const char* hostname, const int port);
207  void Accept(bool close_listen = true);
208 
209  // void fillSendHeaderTrailer(SendHeader* hdr, SendTrailer* trl, RawDataBlock* rawdblk);
210  void fillSendHeaderTrailer(SendHeader* hdr, SendTrailer* trl, RawDataBlockFormat* rawdblk);
211 
212  // Data members
213 
215  int Send(int socket, char* buf, int size_bytes);
216 
217 
219  int* m_cfg_buf;
220 
222  int* m_cfg_sta;
223 
226 
229 
230  protected :
232  // StoreArray<RawDataBlock> raw_datablkarray;
233 
236 
238  // std::vector<EvtSocketRecv*> m_recv;
239 
241  std::vector<std::string> m_hostname_from;
242 
244  std::vector<int> m_port_from;
245 
246  std::vector<int> m_socket_recv;
247 
248  // StoreArray<RawFTSW> raw_ftswarray;
249 
250  // StoreArray<RawCOPPER> rawcprarray;
251 
252  // StoreArray<ReducedRawCOPPER> rawcprarray;
253 
254  int event_diff;
255 
256  unsigned int m_prev_copper_ctr;
257 
258  unsigned int m_prev_evenum;
259 
261  // From Serializer.cc
263 
266 
267  enum {
268  COPPER = 1,
269  ROPC = 2
270  };
271 
273  std::string m_hostname_local;
274 
277 
279  // EvtSocketSend* m_sock;
280 
282  std::string p_method;
283  int p_method_val;
284 
285 #ifdef NONSTOP
286  int* m_ptr;
288 
290  int m_run_no;
291 
293  int m_prev_run_no;
294 
296  int checkRunPause();
297 
299  int checkRunRecovery();
300 
302  void openRunPauseNshm();
303 
305  void resumeRun();
306 
308  void pauseRun();
309 
311  void waitResume();
312 
314  void callCheckRunPause(std::string& err_str);
315 
317  int CheckConnection(int socket);
318 #endif
319 
322 
323  };
324 
326 } // end namespace Belle2
327 
328 #endif // DESSERCOPPER_H
Belle2::DesSer::max_seconds
double max_seconds
time to stop a run
Definition: DesSer.h:63
Belle2::DesSer::DesSer
DesSer()
Constructor / Destructor.
Definition: DesSer.cc:30
Belle2::DesSer::DataAcquisition
virtual void DataAcquisition()=0
Module functions to be called from event process.
Belle2::DesSer::m_hostname_from
std::vector< std::string > m_hostname_from
Reciever basf2 Socket.
Definition: DesSer.h:241
Belle2::DesSer::Send
int Send(int socket, char *buf, int size_bytes)
send buffer
Definition: DesSer.cc:328
Belle2::DesSer::m_trunc_mask
int m_trunc_mask
trunc mask
Definition: DesSer.h:155
Belle2::RunInfoBuffer
Definition: RunInfoBuffer.h:15
Belle2::DesSer::m_start_flag
int m_start_flag
start flag
Definition: DesSer.h:180
Belle2::DesSer::calcSimpleChecksum
unsigned int calcSimpleChecksum(int *buf, int nwords)
calculate checksum
Belle2::PreRawCOPPERFormat_latest
The Raw COPPER class ver.1 ( the latest version since May, 2014 ) This class stores data received by ...
Definition: PreRawCOPPERFormat_latest.h:30
Belle2::DesSer::m_buffer
int * m_buffer
buffer
Definition: DesSer.h:81
Belle2::DesSer::m_prev_exprunsubrun_no
unsigned int m_prev_exprunsubrun_no
run no.
Definition: DesSer.h:146
Belle2::SendHeader
Definition: SendHeader.h:21
Belle2::DesSer::cur_time
double cur_time
for time monitoring
Definition: DesSer.h:101
Belle2::DesSer::print_err
CprErrorMessage print_err
wrapper for B2LOG system
Definition: DesSer.h:183
Belle2::DesSer::m_fp_dump
FILE * m_fp_dump
dump file descripter
Definition: DesSer.h:78
Belle2::DesSer::n_basf2evt
int n_basf2evt
No. of sent events.
Definition: DesSer.h:69
Belle2::DesSer::m_run_pause
int m_run_pause
flag to show that run-controller pauses a run
Definition: DesSer.h:225
Belle2::CprErrorMessage
Definition: CprErrorMessage.h:22
Belle2::DesSer::m_shmfd_cfg
int m_shmfd_cfg
file descripter for shm
Definition: DesSer.h:167
Belle2::DesSer::m_cfg_buf
int * m_cfg_buf
buffer for shared memory
Definition: DesSer.h:219
Belle2::RawHeader_latest
The Raw Header class ver.1 ( the latest version since May, 2014 ) This class defines the format of th...
Definition: RawHeader_latest.h:32
Belle2::DesSer::m_run_error
int m_run_error
flag to show that there is some errors with which DAQ cannot continue.
Definition: DesSer.h:228
Belle2::DesSer::m_port_from
std::vector< int > m_port_from
port # to connect data sources
Definition: DesSer.h:244
Belle2::DesSer::m_cfg_sta
int * m_cfg_sta
buffer for shared memory
Definition: DesSer.h:222
Belle2::RawDataBlockFormat
The RawDataBlockFormat class Format information for rawdata handling.
Definition: RawDataBlockFormat.h:25
Belle2::DesSer::m_prev_nevt
int m_prev_nevt
No. of prev sent events.
Definition: DesSer.h:72
Belle2::DesSer::m_num_usedbuf
int m_num_usedbuf
Definition: DesSer.h:131
Belle2::DesSer::m_hostname_local
std::string m_hostname_local
Destination Host.
Definition: DesSer.h:273
Belle2::DesSer::beginRun
void beginRun()
Module functions to be called from event process.
Belle2::DesSer::p_method
std::string p_method
EvtSocket.
Definition: DesSer.h:282
Belle2::DesSer::max_nevt
int max_nevt
Definition: DesSer.h:60
Belle2::DesSer
A class definition of an input module for Sequential ROOT I/O.
Definition: DesSer.h:40
Belle2::DesSer::m_port_to
int m_port_to
Destination port.
Definition: DesSer.h:276
Belle2::DesSer::shmGet
int * shmGet(int fd, int size_words)
Get shared memory.
Belle2::DesSer::recordTime
void recordTime(int event, double *array)
store time info.
Definition: DesSer.cc:486
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::DesSer::m_nodename
std::string m_nodename
Node Name for SLC.
Definition: DesSer.h:134
Belle2::DesSer::getNewBuffer
int * getNewBuffer(int nwords, int *delete_flag)
Getbuffer.
Definition: DesSer.cc:77
Belle2::DesSer::m_shmflag
int m_shmflag
Use shared memory.
Definition: DesSer.h:158
Belle2::SendTrailer
Definition: SendTrailer.h:20
Belle2::DesSer::initializeNode
void initializeNode()
Module functions to be called from main process.
Belle2::DesSer::m_compressionLevel
int m_compressionLevel
Compression Level.
Definition: DesSer.h:66
Belle2::DesSer::m_nodeid
int m_nodeid
Node ID for SLC.
Definition: DesSer.h:137
Belle2::DesSer::m_pre_rawcpr
PreRawCOPPERFormat_latest m_pre_rawcpr
report status to SLC
Definition: DesSer.h:189
Belle2::DesSer::monitor_numeve
int monitor_numeve
buffer for shared memory
Definition: DesSer.h:177
Belle2::DesSer::tmp_header
RawHeader_latest tmp_header
which format is used
Definition: DesSer.h:321
Belle2::DesSer::m_socket_send
int m_socket_send
Reciever Socket.
Definition: DesSer.h:265
Belle2::DesSer::m_num_connections
int m_num_connections
check data contents
Definition: DesSer.h:235
Belle2::DesSer::RateMonitor
void RateMonitor(unsigned int nevt)
monitor rate
Belle2::DesSer::getTimeSec
double getTimeSec()
store time info.
Definition: DesSer.cc:478
Belle2::DesSer::m_status
RunInfoBuffer m_status
Run info buffer.
Definition: DesSer.h:140
Belle2::DesSer::m_dump_fname
std::string m_dump_fname
dump filename
Definition: DesSer.h:75
Belle2::DesSer::printData
void printData(int *buf, int nwords)
dump error data
Definition: DesSer.cc:505
Belle2::DesSer::m_shmfd_sta
int m_shmfd_sta
file descripter for shm
Definition: DesSer.h:170
Belle2::DesSer::calcXORChecksum
unsigned int calcXORChecksum(int *buf, int nwords)
calculate checksum
Definition: DesSer.cc:495
Belle2::DesSer::m_exprunsubrun_no
unsigned int m_exprunsubrun_no
run no.
Definition: DesSer.h:143
Belle2::DesSer::getPreAllocBuf
int * getPreAllocBuf()
Getbuffer.
Definition: DesSer.cc:57
Belle2::DesSer::m_exp_no
int m_exp_no
exp no.
Definition: DesSer.h:149
Belle2::DesSer::shmOpen
void shmOpen(char *path_cfg, char *path_sta)
open shared memory
Definition: DesSer.cc:679
Belle2::DesSer::m_data_type
int m_data_type
data type
Definition: DesSer.h:152
Belle2::DesSer::m_bufary
int * m_bufary[NUM_PREALLOC_BUF]
buffer
Definition: DesSer.h:84