Belle II Software  release-05-01-25
PrintEventRate.cc
1 //+
2 // File : PrintEventRate.cc
3 // Description : Module to get data from DataStore and send it to another network node
4 //
5 // Author : Satoru Yamada Itoh, IPNS, KEK
6 // Date : 18 - Jun - 2015
7 //-
8 
9 #include <rawdata/modules/PrintEventRate.h>
10 #include <time.h>
11 
12 using namespace std;
13 using namespace Belle2;
14 
15 #define EVENT_UNIT 75000
16 #define BYTES_PER_WORD 4
17 
18 //-----------------------------------------------------------------
19 // Register the Module
20 //-----------------------------------------------------------------
21 REG_MODULE(PrintEventRate)
22 
23 //-----------------------------------------------------------------
24 // Implementation
25 //-----------------------------------------------------------------
26 
28 {
29  addParam("PrintInterval", m_print_interval, "Print Interval", 60);
30 
31  m_prev_utime = 0;
32  m_prev_event = 0;
33  m_start_event = 0;
34  m_start_utime = 0;
35  m_run = 0;
36  m_cur_utime = 0;
37  m_cur_event = 0;
38  m_tot_bytes = 0;
39  m_prev_tot_bytes = 0;
40  m_n_basf2evt = 0;
41  m_first_evt = 0;
42 
43  m_erreve = 0;
44  m_errcpr = 0;
45 
46 }
47 
48 
49 
50 PrintEventRateModule::~PrintEventRateModule()
51 {
52 
53 }
54 
55 
56 void PrintEventRateModule::initialize()
57 {
58  B2INFO("PrintDataTemplate: initialize() started.");
59 
60  // StoreArray<RawCOPPER>::registerTransient(s_auxMCParticlesName.c_str());
61  // StoreObjPtr<RawCOPPER>::registerTransient();
62  // Initialize EvtMetaData
63  // m_eventMetaDataPtr.registerPersistent();
64  // Create Message Handler
65  B2INFO("PrintDataTemplate: initialize() done.");
66 
67 }
68 
69 
70 
71 void PrintEventRateModule::printCOPPEREvent(RawCOPPER* raw_copper, int i)
72 {
73  m_cur_utime = raw_copper->GetTTUtime(i);
74  m_cur_event = raw_copper->GetEveNo(i);
75  m_run = raw_copper->GetRunNo(i);
76  m_subrun = raw_copper->GetSubRunNo(i);
77 
78  unsigned int error_flag = 0;
79  error_flag = (unsigned int)(raw_copper->GetDataType(i));
80  if (error_flag) {
81  printf("!!!!!!!!! ERROR (RawCOPPER hdr) !!!!!!!!!! : run %d sub %d event %u errflag %.8x nodeID %.8x\n",
82  m_run, m_subrun, m_cur_event, error_flag , raw_copper->GetNodeID(i));
83  m_errcpr++;
84  }
85 
86  // printf("eve %d\n", m_cur_event );
87  m_tot_bytes += (double)(BYTES_PER_WORD * raw_copper->GetBlockNwords(i));
88 
89  // printf("TIME %u start %u eve %d\n", m_cur_utime, m_start_utime, m_n_basf2evt );
90 
91  // fflush(stdout);
92  if (m_first_evt == 0) {
93  m_first_evt = 1;
94  m_start_utime = m_cur_utime;
95  m_start_event = m_cur_event;
96  m_prev_utime = m_cur_utime;
97  m_prev_event = m_cur_event;
98  m_prev_tot_bytes = 0;
99  }
100 
101 
102 }
103 
104 void PrintEventRateModule::endRun()
105 {
106  int interval = m_cur_utime - m_prev_utime;
107  int total_time = m_cur_utime - m_start_utime;
108  time_t timer = (time_t)m_cur_utime;
109  struct tm t_st;
110  // time(&timer);
111  localtime_r(&timer, &t_st);
112 
113  if (interval != 0) {
114  printf("END %d/%d/%d/%d:%d:%d run %d sub %d Event %u Rate %lf [kHz] %lf [MB/s] RunTime %d [s] interval %d [s] total %lf [bytes] cpr %d s %d c %d to %d a %d e %d k %d tr %d other %d erreve %d errcpr %d\n",
115  t_st.tm_year + 1900, t_st.tm_mon + 1, t_st.tm_mday, t_st.tm_hour, t_st.tm_min, t_st.tm_sec,
116  m_run, m_subrun, m_n_basf2evt, (double)(m_n_basf2evt - m_prev_event) / interval / 1.e3,
117  (double)(m_tot_bytes - m_prev_tot_bytes) / interval / 1.e6,
118  total_time, interval, m_tot_bytes / 1.e6,
119  m_cpr, m_cpr_svd, m_cpr_cdc, m_cpr_top, m_cpr_arich, m_cpr_ecl, m_cpr_klm, m_cpr_trg, m_cpr_others, m_erreve, m_errcpr);
120 
121  } else {
122  printf("END %d/%d/%d/%d:%d:%d run %d sub %d Event %u Rate %lf [kHz] %lf [MB/s] RunTime %d [s] interval %d [s] total %lf [bytes] cpr %d s %d c %d to %d a %d e %d k %d tr %d other %d erreve %d errcpr %d\n",
123  t_st.tm_year + 1900, t_st.tm_mon + 1, t_st.tm_mday, t_st.tm_hour, t_st.tm_min, t_st.tm_sec,
124  m_run, m_subrun, m_n_basf2evt, 0., 0.,
125  total_time, interval, m_tot_bytes / 1.e6,
126  m_cpr, m_cpr_svd, m_cpr_cdc, m_cpr_top, m_cpr_arich, m_cpr_ecl, m_cpr_klm, m_cpr_trg, m_cpr_others, m_erreve, m_errcpr);
127  }
128  fflush(stdout);
129 }
130 
131 void PrintEventRateModule::event()
132 {
133  StoreArray<RawCOPPER> raw_cprarray;
134  StoreArray<RawFTSW> raw_ftswarray;
135  StoreArray<RawDataBlock> raw_datablkarray;
136  StoreArray<RawTLU> raw_tluarray;
137  StoreArray<RawPXD> raw_pxdarray;
138  StoreArray<RawSVD> raw_svdarray;
139  StoreArray<RawCDC> raw_cdcarray;
140  StoreArray<RawTOP> raw_toparray;
141  StoreArray<RawARICH> raw_aricharray;
142  StoreArray<RawECL> raw_eclarray;
143  StoreArray<RawKLM> raw_klmarray;
144  StoreArray<RawTRG> raw_trgarray;
145 
146 
147  int datablk_blknum = raw_datablkarray.getEntries();
148  int cpr_blknum = raw_cprarray.getEntries();
149  int tlu_blknum = raw_tluarray.getEntries();
150  int ftsw_blknum = raw_ftswarray.getEntries();
151  int pxd_blknum = raw_pxdarray.getEntries();
152  int svd_blknum = raw_svdarray.getEntries();
153  int cdc_blknum = raw_cdcarray.getEntries();
154  int top_blknum = raw_toparray.getEntries();
155  int arich_blknum = raw_aricharray.getEntries();
156  int ecl_blknum = raw_eclarray.getEntries();
157  int klm_blknum = raw_klmarray.getEntries();
158  int trg_blknum = raw_trgarray.getEntries();
159 
160 
161 
162  if (m_n_basf2evt == 0) {
163  m_cpr =
164  datablk_blknum +
165  cpr_blknum +
166  tlu_blknum +
167  ftsw_blknum +
168  pxd_blknum +
169  svd_blknum +
170  cdc_blknum +
171  top_blknum +
172  arich_blknum +
173  ecl_blknum +
174  klm_blknum +
175  trg_blknum;
176 
177  m_cpr_svd = svd_blknum;
178  m_cpr_cdc = cdc_blknum;
179  m_cpr_top = top_blknum;
180  m_cpr_arich = arich_blknum;
181  m_cpr_ecl = ecl_blknum;
182  m_cpr_klm = klm_blknum;
183  m_cpr_trg = trg_blknum;
184  m_cpr_others = m_cpr
185  - (m_cpr_svd
186  + m_cpr_cdc
187  + m_cpr_top
188  + m_cpr_arich
189  + m_cpr_ecl
190  + m_cpr_klm
191  + m_cpr_trg);
192  }
193 
194 
195  //
196  // FTSW + COPPER can be combined in the array
197  //
198  for (int i = 0; i < datablk_blknum; i++) {
199  for (int j = 0; j < raw_datablkarray[ i ]->GetNumEntries(); j++) {
200  int* temp_buf = raw_datablkarray[ i ]->GetBuffer(j);
201  int nwords = raw_datablkarray[ i ]->GetBlockNwords(j);
202  int delete_flag = 0;
203  int num_nodes = 1;
204  int num_events = 1;
205  if (raw_datablkarray[ i ]->CheckFTSWID(j)) {
206  // No operation
207  } else if (raw_datablkarray[ i ]->CheckTLUID(j)) {
208  // No operation
209  } else {
210  // COPPER data block
211  // printf("\n===== DataBlock( RawDataBlock(COPPER) ) : Block # %d ", i);
212  RawCOPPER temp_raw_copper;
213  temp_raw_copper.SetBuffer(temp_buf, nwords, delete_flag, num_nodes, num_events);
214  printCOPPEREvent(&temp_raw_copper, 0);
215 
216  }
217  }
218  }
219 
220  for (int i = 0; i < cpr_blknum; i++) {
221  for (int j = 0; j < raw_cprarray[ i ]->GetNumEntries(); j++) {
222  printCOPPEREvent(raw_cprarray[ i ], j);
223  }
224  }
225 
226  for (int i = 0; i < svd_blknum; i++) {
227  for (int j = 0; j < raw_svdarray[ i ]->GetNumEntries(); j++) {
228  printCOPPEREvent(raw_svdarray[ i ], j);
229  }
230  }
231 
232  for (int i = 0; i < cdc_blknum; i++) {
233  for (int j = 0; j < raw_cdcarray[ i ]->GetNumEntries(); j++) {
234  printCOPPEREvent(raw_cdcarray[ i ], j);
235  }
236  }
237 
238  for (int i = 0; i < top_blknum; i++) {
239  for (int j = 0; j < raw_toparray[ i ]->GetNumEntries(); j++) {
240  printCOPPEREvent(raw_toparray[ i ], j);
241  }
242  }
243 
244  for (int i = 0; i < arich_blknum; i++) {
245  for (int j = 0; j < raw_aricharray[ i ]->GetNumEntries(); j++) {
246  printCOPPEREvent(raw_aricharray[ i ], j);
247  }
248  }
249 
250  for (int i = 0; i < ecl_blknum; i++) {
251  for (int j = 0; j < raw_eclarray[ i ]->GetNumEntries(); j++) {
252  printCOPPEREvent(raw_eclarray[ i ], j);
253  }
254  }
255 
256  for (int i = 0; i < klm_blknum; i++) {
257  for (int j = 0; j < raw_klmarray[ i ]->GetNumEntries(); j++) {
258  printCOPPEREvent(raw_klmarray[ i ], j);
259  }
260  }
261 
262  for (int i = 0; i < trg_blknum; i++) {
263  for (int j = 0; j < raw_trgarray[ i ]->GetNumEntries(); j++) {
264  printCOPPEREvent(raw_trgarray[ i ], j);
265  }
266  }
267 
268  if (m_eventMetaDataPtr->getErrorFlag()) {
269  printf("!!!!!!!!! ERROR (EventMetaData) !!!!!!!!!! : run %d sub %d event %d errflag %.8x\n",
270  m_eventMetaDataPtr->getRun(), m_eventMetaDataPtr->getSubrun(),
271  m_eventMetaDataPtr->getEvent(), m_eventMetaDataPtr->getErrorFlag());
272  m_erreve++;
273  }
274 
275  int interval = (m_cur_utime - m_prev_utime);
276  if (interval >= m_print_interval) {
277  int total_time = m_cur_utime - m_start_utime;
278 
279  time_t timer = (time_t)m_cur_utime;
280  struct tm t_st;
281  // time(&timer);
282  localtime_r(&timer, &t_st);
283 
284  printf("MID %d/%d/%d/%d:%d:%d run %d sub %d Event %u Rate %lf [kHz] %lf [MB/s] RunTime %d [s] interval %d [s] total %lf [bytes]\n",
285  t_st.tm_year + 1900, t_st.tm_mon + 1, t_st.tm_mday, t_st.tm_hour, t_st.tm_min, t_st.tm_sec,
286  m_run, m_subrun, m_n_basf2evt, (double)(m_n_basf2evt - m_prev_event) / interval / 1.e3,
287  (double)(m_tot_bytes - m_prev_tot_bytes) / interval / 1.e6,
288  total_time, interval, m_tot_bytes / 1.e6);
289 
290  fflush(stdout);
291  m_prev_utime = m_cur_utime;
292  m_prev_tot_bytes = m_tot_bytes;
293  m_prev_event = m_n_basf2evt;
294 
295 
296 
297  m_prev_tot_bytes = m_tot_bytes;
298  m_prev_event = m_n_basf2evt;
299  m_prev_utime = m_cur_utime;
300  }
301 
302  // printf("loop %d\n", n_basf2evt);
303  m_n_basf2evt++;
304 
305 }
Belle2::RawCOPPER
The Raw COPPER class This class stores data received by COPPER via belle2linkt Data from all detector...
Definition: RawCOPPER.h:50
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::RawCOPPER::GetTTUtime
unsigned int GetTTUtime(int n)
Check if COPPER Magic words are correct.
Definition: RawCOPPER.h:600
Belle2::RawCOPPER::GetDataType
int GetDataType(int n)
get contents of header
Definition: RawCOPPER.h:390
Belle2::RawCOPPER::GetRunNo
int GetRunNo(int n)
Exp# (10bit) run# (14bit) restart # (8bit)
Definition: RawCOPPER.h:363
Belle2::RawDataBlock::GetBlockNwords
virtual int GetBlockNwords(int n)
get size of a data block
Definition: RawDataBlock.h:94
Belle2::RawCOPPER::GetSubRunNo
int GetSubRunNo(int n)
get run # (14bit)
Definition: RawCOPPER.h:370
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::RawCOPPER::GetEveNo
unsigned int GetEveNo(int n)
get subrun #(8bit)
Definition: RawCOPPER.h:376
Belle2::RawCOPPER::GetNodeID
unsigned int GetNodeID(int n)
get node-ID from data
Definition: RawCOPPER.h:383
Belle2::RawCOPPER::SetBuffer
void SetBuffer(int *bufin, int nwords, int delete_flag, int num_events, int num_nodes) OVERRIDE_CPP17
set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )
Definition: RawCOPPER.cc:132
Belle2::PrintEventRateModule
Print event rate of input data.
Definition: PrintEventRate.h:40
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226