Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TileTBStat.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //*****************************************************************************
6 // Filename : TileTBStat.cxx
7 // Author : Alexander Solodkov
8 // Created : Jun, 2004
9 //
10 // DESCRIPTION:
11 // Provide statistics for a run
12 //
13 // HISTORY:
14 //
15 // BUGS:
16 //
17 //*****************************************************************************
18 
19 //Gaudi Includes
20 
21 
22 //Atlas include
23 #include "eformat/FullEventFragment.h"
25 #include "StoreGate/ReadHandle.h"
27 
28 //TileCal include
29 #include "CaloIdentifier/TileID.h"
36 #include "TileTBRec/TileTBStat.h"
37 
38 #include "boost/io/ios_state.hpp"
39 
40 #include <iostream>
41 #include <ctime>
42 #include <cmath>
43 
44 // Constructor & deconstructor
50  Min = HUGE_VAL;
51  Max = -HUGE_VAL;
52  Sum = 0;
53  SumSq = 0;
54  Counter = 0;
55 }
56 
58  if (Value <= 0.0) return;
59  if (Max < Value) Max = Value;
60  if (Min > Value) Min = Value;
61  Sum += Value;
62  SumSq += Value * Value;
63  Counter++;
64 }
65 
67  return Sum / Counter;
68 }
69 
71  if (Counter <= 1) return 0;
72  return sqrt(std::max(0.0,((SumSq - ((Sum * Sum) / Counter)) / (Counter - 1))));
73 }
74 
75 void StatDouble::print(const char* s, bool minMaxOnly) {
76  boost::io::ios_base_all_saver coutsave(std::cout);
77  std::cout << s << " " << std::fixed;
78  if (minMaxOnly) {
79  if (Counter > 0)
80  std::cout << " " << std::setw(4) << std::setprecision(1) << Min
81  << " - " << std::setw(4) << std::setprecision(1) << Max;
82  else
83  std::cout << " ---- - ----";
84  } else {
85  if (Counter > 0)
86  std::cout << " " << std::setw(4) << std::setprecision(1) << Min
87  << " - " << std::setw(4) << std::setprecision(1) << Max
88  << " mean= " << std::setw(6) << std::setprecision(3) << getMean()
89  << " rms= " << std::setw(5) << std::setprecision(3) << getChi2();
90  else
91  std::cout << " ---- - ---- mean= ------ rms= -----";
92  }
93  std::cout << std::endl;
94 }
95 
97 }
98 
100  ++checkOut[Value];
101 }
102 
103 void StatInt::print(const char* s, bool minMaxOnly) {
104  std::cout << s << " ";
105  std::map<int, int>::const_iterator min = checkOut.begin();
106  std::map<int, int>::const_iterator max = checkOut.end();
107  if (min == max) { // empty map
108  std::cout << " ---";
109  } else {
110  --max;
111  if (min == max) { // one value only
112  std::cout << " " << min->first;
113  } else {
114  if (minMaxOnly) {
115  std::cout << " " << min->first << " - " << max->first;
116  } else {
117  for (++max; min != max; ++min)
118  std::cout << " " << min->first << "(" << min->second << ")";
119  }
120  }
121  }
122  std::cout << std::endl;
123 }
124 
125 TileTBStat::TileTBStat(const std::string& name, ISvcLocator* pSvcLocator)
126  : AthAlgorithm(name, pSvcLocator)
127  , m_evtNr(0)
128  , m_lasStatus(0)
129  , m_checkOn(0)
130  , m_checkOff(0)
131  , m_check0(0)
132  , m_check1(0)
133  , m_check2(0)
134  , m_Alarm(0)
135  , m_Error(0)
136  , m_ShOpen(0)
137  , m_ShClose(0)
138  , m_evTime(0)
139  , m_trigType(0)
140  , m_prevTrig(0)
141  , m_timeBegin(0)
142  , m_timeStart(0)
143  , m_timeLast(0)
144  , m_calibMode(0)
145  , m_spillPattern(0)
146  , m_nSpill(0)
147  , m_nEvt()
148  , m_cisPar()
149  , m_cis1st()
150  , m_cisBeg()
151  , m_cisEnd()
152  , m_nEventsPerTrigger()
153 {
155 }
156 
157 
159 }
160 
161 // Alg standard interface function
163 
164  ATH_MSG_INFO( "Initialization" );
165 
166  m_checkOn = 0;
167  m_checkOff = 0;
168  m_check0 = 0;
169  m_check1 = 0;
170  m_check2 = 0;
171 
172  m_lasStatus = 0;
173 
174  // start with event 0
175  m_evtNr = 0;
177  m_calibMode = m_prevTrig = m_spillPattern = m_evtMin = 0xFFFFFFFF;
178  memset(m_nEvt, 0, sizeof(m_nEvt));
179  memset(m_cisPar, 0, sizeof(m_cisPar));
180  memset(m_cis1st, 0, sizeof(m_cis1st));
181  memset(m_cisBeg, 0, sizeof(m_cisBeg));
182  memset(m_cisEnd, 0, sizeof(m_cisEnd));
183  memset(m_nEventsPerTrigger, 0, sizeof(m_nEventsPerTrigger));
184 
185  m_timeStart = time(0);
186  ATH_MSG_INFO( "initialization completed" );
187 
190  ATH_CHECK( m_robSvc.retrieve() );
192 
193  return StatusCode::SUCCESS;
194 }
195 
197 
198  const EventContext& ctx = Gaudi::Hive::currentContext();
199  const TileDQstatus* dqStatus = SG::makeHandle (m_dqStatusKey, ctx).get();
200 
201  static std::atomic<bool> first=true;
202  static std::atomic<bool> firstORsecond=true;
203 
204  if ( firstORsecond ) {
205  const eformat::FullEventFragment<const uint32_t*> * event = m_robSvc->getEvent(ctx);
206  if( true /* event->check_tree() */) { // valid event
207  if ( ! first ) firstORsecond = m_printAllEvents;
208  first=false;
209  m_fragMap.clear();
210 
211  uint32_t nrob = event->nchildren();
212  uint32_t L1type = event->lvl1_trigger_type();
213 
214  for (size_t irob=0; irob<nrob; ++irob) {
215  const uint32_t* fprob;
216  event->child(fprob, irob);
217  const eformat::ROBFragment<const uint32_t*> robf(fprob);
218 
219  T_RobRodFragMap ROBfrag;
220  ROBfrag.L1type = L1type;
221  ROBfrag.ROBid = robf.source_id();
222  ROBfrag.RODid = robf.rod_source_id();
223 
224  //unsigned int version = robf.rod_version();
225  unsigned int source_id = robf.rod_source_id();
226  eformat::helper::SourceIdentifier id = eformat::helper::SourceIdentifier(source_id);
227  unsigned int subdet_id = id.subdetector_id();
228  //unsigned int module_id = id.module_id();
229 
230  unsigned int max_allowed_size = robf.rod_fragment_size_word();
231  unsigned int delta = robf.rod_header_size_word() + robf.rod_trailer_size_word();
232  if (max_allowed_size > delta) {
233  max_allowed_size -= delta;
234  } else {
235  max_allowed_size = 0;
236  }
237 
238  unsigned int size = robf.rod_ndata();
239  if (size > max_allowed_size) {
240 
241  if (size - robf.rod_trailer_size_word() < max_allowed_size) {
242  ATH_MSG_ERROR( "Problem with data size - assuming that trailer size is " << robf.rod_trailer_size_word()-(size-max_allowed_size)
243  <<" words instead of " << robf.rod_trailer_size_word() << " and data size is " << size << " words " );
244  max_allowed_size = size;
245  } else if (size - robf.rod_trailer_size_word() == max_allowed_size) {
246  ATH_MSG_ERROR( "Problem with data size - assuming that trailer is absent "
247  << " ROD size " << robf.rod_fragment_size_word()
248  << " header size " << robf.rod_header_size_word()
249  << " data size " << size );
250  max_allowed_size = size;
251  } else {
252  max_allowed_size += robf.rod_trailer_size_word();
253  size = max_allowed_size;
254  ATH_MSG_ERROR( "Problem with data size - assuming " << size << " words and no trailer at all" );
255  }
256  }
257 
258  if ( size > 0 ) {
259 
260  const uint32_t * data;
261  robf.rod_data(data);
262 
263  switch ( subdet_id ) {
264  case TILE_BEAM_ID: // TILE BEAM ROD
265  case COMMON_BEAM_ID: // COMMON BEAM ROD
266  case 0x63: // wrong id in first test runs
267  case TILE_POS_ID: // POSITIVE ROD
268  case TILE_NEG_ID: // NEGATIVE ROD
269  case TILE_EBPOS_ID: // POSITIVE EB ROD
270  case TILE_EBNEG_ID: // NEGATIVE EB ROD
271  find_frag(data, size, ROBfrag);
272  break;
273  default:
274  break;
275  }
276  }
277  m_fragMap.push_back(ROBfrag);
278  if ((ROBfrag.RODid & 0xFF0000) == 0x500000) {
279  size_t i=0;
280  for ( ; i<m_beamFragMap.size(); ++i) {
281  if (m_beamFragMap[i].ROBid == ROBfrag.ROBid && m_beamFragMap[i].L1type == ROBfrag.L1type) break;
282  }
283  if (i==m_beamFragMap.size()) {
284  m_beamFragMap.push_back(ROBfrag);
285  }
286  }
287  }
288 
289  if (m_printAllEvents)
290  std::cout << "Fragments found in event " << event->global_id();
291  else if (firstORsecond)
292  std::cout << "Fragments found in first event";
293  else
294  std::cout << "Fragments found in second event";
295  std::cout << " L1 trigger type " << L1type << " (0x"<< std::hex << L1type << std::dec << ")"
296  << " calib mode=" << dqStatus->calibMode() << std::endl
297  << " ROB ID ROD ID Frag IDs" << std::endl;
298  for (unsigned int i = 0; i < nrob; ++i) {
299  std::cout << std::hex << " 0x" << m_fragMap[i].ROBid << " 0x" << m_fragMap[i].RODid;
300  for (unsigned int j = 0; j < m_fragMap[i].fragID.size(); ++j)
301  std::cout << std::hex << " 0x" << m_fragMap[i].fragID[j];
302  std::cout << std::dec << std::endl;
303  }
304  }
305  }
306 
307  // take values from event header
308 
309  memcpy(m_cisPar,dqStatus->cispar(), sizeof (m_cisPar));
310 
311  unsigned int testsum=0;
312  for (int k = 4; k < 16; ++k) testsum += m_cisPar[k];
313  if ( testsum == 0 && m_cisPar[3] == 8 ) { // broken CIS par
316  } else {
326  }
327 
328  const eformat::FullEventFragment<const uint32_t*> * event = m_robSvc->getEvent(ctx);
329 
330  if (testsum!=0) {
331  memcpy(m_cisEnd,m_cisPar,sizeof(m_cisPar));
332  m_cisEnd[16] = event->global_id();
333  m_cisEnd[17] = m_evtNr;
334  m_cisEnd[18] = 1;
335  if (m_cisBeg[18] == 0) {
336  memcpy(m_cisBeg,m_cisEnd,sizeof(m_cisEnd));
337  }
338  }
339 
340  m_evTime = event->bc_time_seconds();
341  if (m_evTime >= m_timeStart || m_evTime < 1054321000 ) {
342  if (m_evtNr == 0)
343  ATH_MSG_WARNING( "bad time in event header (" << m_evTime << "), taking time from cispar (" << m_cisPar[10] << ")" );
344 
345  m_evTime = m_cisPar[10];
346  }
347 
348  m_trigType = dqStatus->trigType();
349  if (m_trigType < 1 || m_trigType > 0x80 ) {
350  if (m_evtNr == 0)
351  ATH_MSG_WARNING( "no event trig type available (" << m_trigType << ") , taking trig from cispar (" << m_cisPar[12] << ")" );
352 
353  m_trigType = m_cisPar[12];
354  }
355 
356  m_evtNo = event->global_id();
357  if (m_evtNo < m_evtMin) m_evtMin = m_evtNo;
358  if (m_evtNo > m_evtMax) m_evtMax = m_evtNo;
359 
360  if (m_evtNr == 0) {
362  ATH_CHECK(hid2re.isValid());
363  std::vector<uint32_t> robid;
364  robid.push_back( hid2re->getRobFromFragID(DIGI_PAR_FRAG) );
365  robid.push_back( hid2re->getRobFromFragID(LASER_OBJ_FRAG) );
366  std::vector<const ROBDataProviderSvc::ROBF*> robf;
367  m_robSvc->getROBData(ctx, robid, robf);
368  const ROBDataProviderSvc::ROBF* robFrag = (robf.size() > 0 ) ? robf[0] : 0;
369  if (robFrag) {
370  m_runNo = robFrag->rod_run_no(); // take it from beam ROD header
371  } else {
372  m_runNo = event->run_no(); // run_no sometimes is not filled here
373  }
376  m_calibMode = dqStatus->calibMode();
377  memcpy(m_cis1st,m_cisPar,sizeof(m_cisPar));
378  } else if (m_evtNr == 1) {
379  // once again, first event can be junk
380  m_calibMode = dqStatus->calibMode();
381  }
382 
383  if (! m_printAllEvents) {
384  // check if new Laser or CIS fragments appear in events with different L1 trigger types
385  bool first_header=true;
386  for (size_t irob=0; irob<event->nchildren(); ++irob) {
387  const uint32_t* fprob;
388  event->child(fprob, irob);
389  const eformat::ROBFragment<const uint32_t*> robf(fprob);
390 
391  T_RobRodFragMap ROBfrag;
392  ROBfrag.L1type = event->lvl1_trigger_type();
393  ROBfrag.ROBid = robf.source_id();
394  ROBfrag.RODid = robf.rod_source_id();
395 
396  if ((ROBfrag.RODid & 0xFF0000) == 0x500000) {
397  size_t i=0;
398  for ( ; i<m_beamFragMap.size(); ++i) {
399  if (m_beamFragMap[i].ROBid == ROBfrag.ROBid && m_beamFragMap[i].L1type == ROBfrag.L1type) break;
400  }
401  if (i==m_beamFragMap.size()) {
402  unsigned int size = robf.rod_ndata();
403  if ( size > 0 ) {
404  const uint32_t * data;
405  robf.rod_data(data);
406  find_frag(data, size, ROBfrag);
407  m_beamFragMap.push_back(ROBfrag);
408  if (first_header) {
409  first_header=false;
410  std::cout << "Beam Fragments found in event " << m_evtNo << " ( " << m_evtNr << " ) L1 trigger type "
411  << ROBfrag.L1type << " (0x"<< std::hex << ROBfrag.L1type << std::dec << ")" << std::endl
412  << " ROB ID ROD ID Frag IDs" << std::endl;
413  }
414  std::cout << std::hex << " 0x" << ROBfrag.ROBid << " 0x" << ROBfrag.RODid;
415  for (unsigned int j = 0; j < ROBfrag.fragID.size(); ++j)
416  std::cout << std::hex << " 0x" << ROBfrag.fragID[j];
417  std::cout << std::dec << std::endl;
418  }
419  }
420  }
421  }
422  }
423 
424  if ( ( m_evTime < m_timeBegin && (m_timeBegin - m_evTime) < 10*24*3600 ) || // less then 10 days shift in neg direction
425  ( m_evTime > m_timeBegin && (m_evTime - m_timeBegin) > 10*24*3600 ) ) { // more than 10 days shift in pos direction
426 
427  ATH_MSG_WARNING( " in evt " << m_evtNo << " ( " << m_evtNr << " ) "
428  << " event header time " << event->bc_time_seconds()
429  << " CISpar time " << m_cisPar[10]
430  << " old begin time " << m_timeBegin );
431 
432  if ( m_cisPar[10] > 0 && m_cisPar[10] - m_evTime > 600 ) { // more than 10 min difference !
433  ATH_MSG_WARNING( "Strange time in event header, ignore it! " );
434 
435  m_evTime = m_cisPar[10];
436  } else {
437  ATH_MSG_WARNING( "Strange begin time, change it from " << m_timeBegin << " to " << m_evTime );
438 
440  }
441  }
442 
443  if ((m_evTime >= m_timeBegin) && ((m_evTime - m_timeBegin) < 10 * 24 * 3600)
444  && (m_evTime > m_timeLast)) {
446  }
447 
448  int ind = 4;
449  switch ( m_trigType ) {
450  case 1: ind = 0; break;
451  case 2: ind = 1; break;
452  case 4: ind = 2; break;
453  case 8: ind = 3; break;
454  case 16: ind = 3; break;
455  default: ind = 4; break;
456  }
457  ++(m_nEvt[ind]);
458 
459  unsigned int lvl1_trigger_type = event->lvl1_trigger_type();
460  if (lvl1_trigger_type < 256U) ++m_nEventsPerTrigger[lvl1_trigger_type];
461  else ++m_nEventsPerTrigger[256];
462 
463  m_spillPattern <<= 4;
464  m_spillPattern |= (m_trigType & 0xF);
465 
466  if (m_spillPattern != m_prevTrig && m_spillPattern == 0x11111111)
467  ++m_nSpill;
468 
470 
471  ++m_evtNr;
472 
474  if(!pTileLasObj.isValid()) {
475  ATH_MSG_ERROR( "There is a problem opening the LASER object" );
476 
477  //return sc;
478  } else {
479  m_lasFiltNum.addValue(pTileLasObj->getFiltNumber());
480  m_lasAmp.addValue((int)pTileLasObj->getDiodeCurrOrd());
481  m_laserBoxTemp.addValue(pTileLasObj->getDiodeBoxTemp());
483  m_laserBoxHum.addValue(pTileLasObj->getHumidity());
484  m_gasFlow.addValue(pTileLasObj->getGasFlux());
485  m_lasStatus = (pTileLasObj->getAlarm() << 0x9) + (pTileLasObj->getInterlock() << 0x8) + (pTileLasObj->getShutter() << 0x6)
486  + ((int)pTileLasObj->getHVpmts() << 0x4) + ((int)pTileLasObj->getLVdiodes() << 0x3) + (pTileLasObj->getAlphaPos());
487  int lasAlpha = (int)pTileLasObj->getAlphaPos() & 0x7;
488  m_lasAlphaPos.addValue(lasAlpha);
491 // std::cout << std::endl << "Status: " << std::hex << m_lasStatus << std::dec
492 // << std::endl << "Alpha: " << lasAlpha << std::endl << std::endl;
493  }
494 
495  //log<<MSG::DEBUG<<"execute() completed successfully"<<endmsg;
496  return StatusCode::SUCCESS;
497 }
498 
500 
501  ATH_MSG_INFO( "Finalization" );
502 
503  std::cout << std::endl << "Run number " << m_runNo << std::endl;
504  std::cout << "Min event number " << m_evtMin << std::endl;
505  std::cout << "Max event number " << m_evtMax << std::endl;
506  std::cout << "First event " << m_evtBegin << std::endl;
507  std::cout << "Last event " << m_evtNo << std::endl;
508 
509  // time stored in event header is time since 1-jan-1970 00:00:00 Geneva time
510  // has to make one hour correction to convert to UNIX (UTC) time
511 
512  time_t tim;
513  struct tm buf;
514  char ctim[50];
515  char format[30] = "%a, %d %b %Y %H:%M:%S %Z (%z)";
516 
517  if (m_evTime >= m_timeStart || m_evTime == 0 ) {
518  if (m_evtNr == 0)
519  ATH_MSG_WARNING( "no event header available, taking time from cispar" );
520 
521  m_evTime = m_cisPar[10];
522  }
523 
524  if (m_timeBegin != 0 && m_timeBegin < 1104537600 ) { // CTB 2004 time
525  std::cout << "Begin time " << m_timeBegin;
526  tim = m_timeBegin - 3600;
527  std::cout << "-3600=" << tim;
528  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
529  std::cout << " " << ctim;
530  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
531  std::cout << " " << ctim;
532  std::cout << std::endl;
533 
534  std::cout << "End time " << m_evTime;
535  tim = m_evTime - 3600;
536  std::cout << "-3600=" << tim;
537  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
538  std::cout << " " << ctim;
539  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
540  std::cout << " " << ctim;
541  std::cout << std::endl;
542 
543  } else {
544 
545  std::cout << "Begin time " << m_timeBegin;
546  tim = m_timeBegin;
547  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
548  std::cout << " " << ctim;
549  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
550  std::cout << " " << ctim;
551  std::cout << std::endl;
552  std::cout << "End time " << m_timeLast;
553  tim = m_timeLast;
554  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
555  std::cout << " " << ctim;
556  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
557  std::cout << " " << ctim;
558  std::cout << std::endl;
559  }
560 
561  std::cout << std::endl << "Ngains " << ( (m_calibMode == 1) ? 2 : 1 ) << std::endl;
562 
563  bool cisdiff = false;
564  for (int i = 0; i < 16; ++i) {
565  cisdiff |= (m_cis1st[i] != m_cisBeg[i]);
566  cisdiff |= (m_cisEnd[i] != m_cisPar[i]);
567  }
568 
569  if (cisdiff) {
570  std::cout << "CISpar first ";
571  for (int i = 0; i < 16; ++i)
572  std::cout << m_cis1st[i] << " ";
573  std::cout << std::endl << "CISpar last ";
574  for (int i = 0; i < 16; ++i)
575  std::cout << m_cisPar[i] << " ";
576  std::cout << std::endl;
577  }
578  std::cout << "CISpar begin ";
579  for (int i = 0; i < 16; ++i)
580  std::cout << m_cisBeg[i] << " ";
581  if (cisdiff) {
582  std::cout << " \tevent " << m_cisBeg[16] << " \teventNr " << m_cisBeg[17];
583  }
584  std::cout << std::endl << "CISpar end ";
585  for (int i = 0; i < 16; ++i)
586  std::cout << m_cisEnd[i] << " ";
587  if (cisdiff) {
588  std::cout << " \tevent " << m_cisEnd[16] << " \teventNr " << m_cisEnd[17];
589  }
590  std::cout << std::endl << std::endl;
591 
592  uint32_t nphy=0;
593  uint32_t nlas=m_nEventsPerTrigger[52];
594  uint32_t nped=m_nEventsPerTrigger[49];
595  uint32_t ncis=m_nEventsPerTrigger[50];
596  uint32_t nbad=0;
597  for (int i = 0; i < 128; ++i) {
598  nbad += m_nEventsPerTrigger[i];
599  }
600  for (int i = 128; i < 256; ++i) {
601  nphy += m_nEventsPerTrigger[i];
602  }
603  nbad -= nlas+nped+ncis;
604  nbad += m_nEventsPerTrigger[256];
605 
606  if (m_nEvt[1]+m_nEvt[2]+m_nEvt[3]==0 && nlas+nped+ncis>0) {
607  std::cout << "Spills " << m_nSpill << std::endl;
608  std::cout << "Events " << m_evtNr << std::endl;
609  std::cout << "Phy " << nphy << std::endl;
610  std::cout << "Las " << nlas << std::endl;
611  std::cout << "Ped " << nped << std::endl;
612  std::cout << "CIS " << ncis << std::endl;
613  std::cout << "Bad " << nbad << std::endl;
614  std::cout << std::endl << std::endl;
615  } else {
616  std::cout << "Spills " << m_nSpill << std::endl;
617  std::cout << "Events " << m_evtNr << std::endl;
618  std::cout << "Phy " << m_nEvt[0] << std::endl;
619  std::cout << "Las " << m_nEvt[1] << std::endl;
620  std::cout << "Ped " << m_nEvt[2] << std::endl;
621  std::cout << "CIS " << m_nEvt[3] << std::endl;
622  std::cout << "Bad " << m_nEvt[4] << std::endl;
623  std::cout << std::endl << std::endl;
624  }
625 
626  std::cout << "Number of events per trigger:" << std::endl;
627  for (int i = 0; i < 256; ++i) {
628  if (m_nEventsPerTrigger[i] != 0) {
629  std::cout << " Level1 trigger type: " << i << " (0x"<< std::hex << i << std::dec << ") => " << m_nEventsPerTrigger[i] << std::endl;
630  }
631  }
632 
633  if (m_nEventsPerTrigger[256] != 0) {
634  std::cout << " Level1 trigger type: > 255(0xFF) => " << m_nEventsPerTrigger[256] << std::endl;
635  }
636 
637  std::cout << std::endl << std::endl;
638 
639  std::cout << "LasFrag begin" << std::endl;
640  m_lasFiltNum.print("FilterWheel");
641  m_lasAmp.print("ReqAmp");
642  std::cout << "Counter " << m_laserDiodeTemp.Counter << std::endl;
643  m_laserDiodeTemp.print("LaserDiodeTemp");
644  m_laserBoxTemp.print ("LaserBoxTemp ");
645  m_laserBoxHum.print ("LaserBoxHum ");
646  m_gasFlow.print ("GasFlow ");
647  m_check0 = ~m_checkOn;
648  m_check1 = ~m_checkOff;
649  m_check2 = ~(m_check0 ^ m_check1);
650  m_lasAlphaPos.print("LasAlpha");
651  int bit = 0x800;
652 // std::cout << "StatusHEX: " << std::hex << m_lasStatus << std::endl;
653  std::cout << "GlobalStatus ";
654  for (int i = 0; i < 9; i++) {
655  if (m_check0 & bit) std::cout << " 0";
656  else if (m_check1 & bit) std::cout << " 1";
657  else std::cout << " 2";
658  bit = bit >> 1;
659  }
660  m_Alarm = 0;
661  m_Error = 0;
662  m_ShOpen = 0;
663  m_ShClose = 0;
664  bit = 0x200;
665  if (m_check0 & bit) m_Error = 0; else
666  if (m_check1 & bit) m_Error = 1; else
667  m_Error = 2;
668  std::cout << std::endl << "LasError " << m_Error;
669  bit = 0x800;
670  if (m_check0 & bit) m_Alarm = 0; else
671  if (m_check1 & bit) m_Alarm = 1; else
672  m_Alarm = 2;
673  std::cout << std::endl << "LasAlarm " << m_Alarm;
674  bit = bit >> 4;
675  if (m_check0 & bit) m_ShOpen = 0; else
676  if (m_check1 & bit) m_ShOpen = 1; else
677  m_ShOpen = 2;
678  std::cout << std::endl << "LasShOpen " << m_ShOpen;
679  bit = bit >> 1;
680  if (m_check0 & bit) m_ShClose = 0; else
681  if (m_check1 & bit) m_ShClose = 1; else
682  m_ShClose = 2;
683  std::cout << std::endl << "LasShClosed " << m_ShClose;
684  std::cout << std::endl << "LasFrag end" << std::endl << std::endl;
685 
686  std::cout << "CISparFrag begin" << std::endl;
687  m_cisMode.print("CISparMode");
688  m_cisSamples.print("CISparSamples");
689  m_cisPipeline.print("CISparPipeline");
690  m_cisI3Delay.print("CISparI3Delay");
691  m_cisDAC.print("CISparDAC");
692  m_cisCap.print("CISparCap");
693  m_cisEvent.print("CISparEvent");
694  m_cisPhase.print("CISparPhase");
695  m_cisCard.print("CISparCard");
696  std::cout << "CISparFrag end" << std::endl << std::endl;
697 
698  ATH_MSG_INFO( "finalize() successfully" );
699 
700  return StatusCode::SUCCESS;
701 }
702 
703 void TileTBStat::find_frag(const uint32_t * data, unsigned int size, T_RobRodFragMap & ROBfrag) {
704 
705  unsigned int offset = 0, sizeOverhead = 2;
706  bool v3Format = ( *(data) == 0xff1234ff ); // additional frag marker since Sep 2005
707  v3Format |= ( *(data) == 0x00123400 ); // another possible frag marker (can appear in buggy ROD frags)
708  if ( v3Format ) {
709  ++sizeOverhead;
710  ++offset; // skip frag marker
711  }
712 
713  while (offset < size ) {
714  const T_RodDataFrag* frag = (const T_RodDataFrag *)(data + offset);
715  if ( frag->size < sizeOverhead ) { // too small size, frag contains garbage
716  break;
717  }
718  const uint32_t * fdata = frag->data;
719  int n = frag->size - sizeOverhead - 1;
720  for (; n > -1; --n) {
721  if ( fdata[n]!=0 && fdata[n]!=0xffffffff) break;
722  }
723  if (n == -1 && m_detectDummyFragments) { // nothing reasonable found
724  ROBfrag.fragID.push_back(frag->id + 0xff000000);
725  } else {
726  ROBfrag.fragID.push_back(frag->id);
727  }
728  offset += frag->size;
729  }
730 
731  if ( v3Format ) --offset; // set offset back to correct value
732  if ( offset > size && ROBfrag.fragID.size() > 0 ) { // wrong length in last frag, drop it
733  ROBfrag.fragID.resize(ROBfrag.fragID.size()-1);
734  }
735 }
TileTBStat::m_timeLast
uint32_t m_timeLast
Definition: TileTBStat.h:136
TileLaserObject::getDiodeBoxTemp
double getDiodeBoxTemp() const
Definition: TileLaserObject.h:244
TileTBStat::initialize
virtual StatusCode initialize() override
Definition: TileTBStat.cxx:162
RunTileTBMonitoring.fragID
fragID
Definition: RunTileTBMonitoring.py:212
TileTBStat::T_RodDataFrag::data
uint32_t data[1]
Definition: TileTBStat.h:160
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
TileTBStat::m_evtMin
uint32_t m_evtMin
Definition: TileTBStat.h:137
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
TILE_NEG_ID
#define TILE_NEG_ID
Definition: TileTBFrag.h:16
vtune_athena.format
format
Definition: vtune_athena.py:14
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileTBStat.h
TileLaserObject::getAlphaPos
int getAlphaPos() const
Definition: TileLaserObject.h:284
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
StatDouble::addValue
void addValue(double Value)
Definition: TileTBStat.cxx:57
TileLaserObject::getPumpDiodeTemp
double getPumpDiodeTemp() const
Definition: TileLaserObject.h:234
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
TileHid2RESrcID::getRobFromFragID
uint32_t getRobFromFragID(int frag_id) const
make a ROB SrcID for a fragment ID
Definition: TileHid2RESrcID.cxx:457
TileDQstatus::calibMode
uint32_t calibMode() const
Calibration mode.
Definition: TileDQstatus.h:148
TileTBStat::m_cisPipeline
StatInt m_cisPipeline
Definition: TileTBStat.h:115
TileTBStat::m_cisPhase
StatInt m_cisPhase
Definition: TileTBStat.h:120
TileTBStat::m_Alarm
int m_Alarm
Definition: TileTBStat.h:126
TileTBStat::T_RobRodFragMap::RODid
uint32_t RODid
Definition: TileTBStat.h:152
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:210
TileTBStat::m_ShClose
int m_ShClose
Definition: TileTBStat.h:126
TileTBStat::find_frag
void find_frag(const uint32_t *data, unsigned int size, T_RobRodFragMap &ROBfrag)
Definition: TileTBStat.cxx:703
TileTBStat::m_calibMode
uint32_t m_calibMode
Definition: TileTBStat.h:139
TileLaserObject::getDiodeCurrOrd
double getDiodeCurrOrd() const
Definition: TileLaserObject.h:219
TileTBStat::m_cisI3Delay
StatInt m_cisI3Delay
Definition: TileTBStat.h:116
DIGI_PAR_FRAG
#define DIGI_PAR_FRAG
Definition: TileTBFrag.h:41
Value
tag-value pair class.
Definition: Value.h:39
StatInt::print
void print(const char *s, bool minMaxOnly=false)
Definition: TileTBStat.cxx:103
TileLaserObject::getAlarm
int getAlarm() const
Definition: TileLaserObject.h:309
ROBDataProviderSvc.h
TileTBStat::m_nSpill
uint32_t m_nSpill
Definition: TileTBStat.h:141
TileTBStat::m_lasFiltNum
StatInt m_lasFiltNum
Definition: TileTBStat.h:122
StatInt::checkOut
std::map< int, int > checkOut
Definition: TileTBStat.h:73
StatDouble::print
void print(const char *s, bool minMaxOnly=false)
Definition: TileTBStat.cxx:75
TileLaserObject.h
TileTBStat::m_spillPattern
uint32_t m_spillPattern
Definition: TileTBStat.h:140
TileTBStat::m_checkOn
int m_checkOn
Definition: TileTBStat.h:125
TileTBStat::T_RodDataFrag::id
uint32_t id
Definition: TileTBStat.h:159
TileTBStat::m_cisMode
StatInt m_cisMode
Definition: TileTBStat.h:113
StatDouble::StatDouble
StatDouble()
Definition: TileTBStat.cxx:49
TileTBStat::m_detectDummyFragments
Gaudi::Property< bool > m_detectDummyFragments
Definition: TileTBStat.h:93
TileTBStat::T_RodDataFrag::size
uint32_t size
Definition: TileTBStat.h:158
TileID.h
StatDouble::Counter
int Counter
Definition: TileTBStat.h:64
TileTBStat::T_RodDataFrag
Definition: TileTBStat.h:157
TileTBStat::m_beamFragMap
std::vector< T_RobRodFragMap > m_beamFragMap
Definition: TileTBStat.h:164
TileLaserObject::getFiltNumber
int getFiltNumber() const
Definition: TileLaserObject.h:229
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
TILE_EBPOS_ID
#define TILE_EBPOS_ID
Definition: TileTBFrag.h:17
TileTBStat::m_check1
int m_check1
Definition: TileTBStat.h:125
TileDQstatus::trigType
int trigType() const
Trigger type.
Definition: TileDQstatus.h:156
TileTBStat::m_check0
int m_check0
Definition: TileTBStat.h:125
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TileTBStat::m_cisCap
StatInt m_cisCap
Definition: TileTBStat.h:118
TileTBStat::m_cisCard
StatInt m_cisCard
Definition: TileTBStat.h:121
TileLaserObject::getHumidity
double getHumidity() const
Definition: TileLaserObject.h:264
TileDQstatus
Class that holds Data Quality fragment information and provides functions to extract the data quality...
Definition: TileDQstatus.h:49
TileTBStat::m_prevTrig
uint32_t m_prevTrig
Definition: TileTBStat.h:132
TileTBStat::m_Error
int m_Error
Definition: TileTBStat.h:126
TileHWID.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TileLaserObject::getShutter
int getShutter() const
Definition: TileLaserObject.h:299
TileTBStat::TileTBStat
TileTBStat(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TileTBStat.cxx:125
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
eformat::ROBFragment< const uint32_t * >
lumiFormat.i
int i
Definition: lumiFormat.py:85
TILE_EBNEG_ID
#define TILE_EBNEG_ID
Definition: TileTBFrag.h:18
StatDouble::SumSq
double SumSq
Definition: TileTBStat.h:65
TileDigitsContainer.h
beamspotman.n
n
Definition: beamspotman.py:731
StatDouble::Min
double Min
Definition: TileTBStat.h:65
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TileLaserObject::getHVpmts
double getHVpmts() const
Definition: TileLaserObject.h:294
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
TileTBStat::m_evtMax
uint32_t m_evtMax
Definition: TileTBStat.h:138
TileTBStat::m_cisEvent
StatInt m_cisEvent
Definition: TileTBStat.h:119
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
StatDouble::Max
double Max
Definition: TileTBStat.h:65
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TileTBStat::m_nEvt
uint32_t m_nEvt[5]
Definition: TileTBStat.h:142
TileTBStat::m_cisPar
uint32_t m_cisPar[16]
Definition: TileTBStat.h:143
TileTBStat::m_timeBegin
uint32_t m_timeBegin
Definition: TileTBStat.h:134
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TILE_BEAM_ID
#define TILE_BEAM_ID
definition of various fragments expected in BS files from testbeam
Definition: TileTBFrag.h:14
TileTBStat::m_check2
int m_check2
Definition: TileTBStat.h:125
TileTBStat::m_cisSamples
StatInt m_cisSamples
Definition: TileTBStat.h:114
TileTBStat::T_RobRodFragMap::L1type
uint32_t L1type
Definition: TileTBStat.h:150
TileTBStat::finalize
virtual StatusCode finalize() override
Definition: TileTBStat.cxx:499
StatDouble::getMean
double getMean()
Definition: TileTBStat.cxx:66
TileTBStat::T_RobRodFragMap::ROBid
uint32_t ROBid
Definition: TileTBStat.h:151
TileTBStat::m_gasFlow
StatDouble m_gasFlow
Definition: TileTBStat.h:112
TileTBStat::m_robSvc
ServiceHandle< IROBDataProviderSvc > m_robSvc
Name of ROB data provider service.
Definition: TileTBStat.h:105
TileTBStat::execute
virtual StatusCode execute() override
Definition: TileTBStat.cxx:196
TileTBStat::m_lasAmp
StatInt m_lasAmp
Definition: TileTBStat.h:123
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
LASER_OBJ_FRAG
#define LASER_OBJ_FRAG
Definition: TileTBFrag.h:49
errorcheck.h
Helpers for checking error return status codes and reporting errors.
TileTBStat::m_fragMap
std::vector< T_RobRodFragMap > m_fragMap
Definition: TileTBStat.h:163
TileTBStat::m_cisDAC
StatInt m_cisDAC
Definition: TileTBStat.h:117
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TileTBFrag.h
TileDQstatus::cispar
const uint32_t * cispar() const
CIS parameters.
Definition: TileDQstatus.h:152
TILE_POS_ID
#define TILE_POS_ID
Definition: TileTBFrag.h:15
TileLaserObject::getLVdiodes
double getLVdiodes() const
Definition: TileLaserObject.h:289
TileTBStat::m_laserBoxTemp
StatDouble m_laserBoxTemp
Definition: TileTBStat.h:109
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
TileTBStat::m_laserDiodeTemp
StatDouble m_laserDiodeTemp
Definition: TileTBStat.h:110
TileTBStat::m_laserObjectKey
SG::ReadHandleKey< TileLaserObject > m_laserObjectKey
Definition: TileTBStat.h:99
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TileTBStat::m_ShOpen
int m_ShOpen
Definition: TileTBStat.h:126
TileTBStat::T_RobRodFragMap
Definition: TileTBStat.h:149
TileBeamElemContByteStreamCnv.h
DeMoScan.first
bool first
Definition: DeMoScan.py:536
TileTBStat::m_trigType
int m_trigType
Definition: TileTBStat.h:131
TileLaserObject::getInterlock
int getInterlock() const
Definition: TileLaserObject.h:304
TileTBStat::m_cisBeg
uint32_t m_cisBeg[19]
Definition: TileTBStat.h:145
TileTBStat::m_laserBoxHum
StatDouble m_laserBoxHum
Definition: TileTBStat.h:111
TileBeamElemContainer.h
TileTBStat::m_lasAlphaPos
StatInt m_lasAlphaPos
Definition: TileTBStat.h:124
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
StatInt::addValue
void addValue(int Value)
Definition: TileTBStat.cxx:99
TileTBStat::m_printAllEvents
Gaudi::Property< bool > m_printAllEvents
Definition: TileTBStat.h:91
TileTBStat::~TileTBStat
virtual ~TileTBStat()
Definition: TileTBStat.cxx:158
TileTBStat::m_hid2RESrcIDKey
SG::ReadCondHandleKey< TileHid2RESrcID > m_hid2RESrcIDKey
Definition: TileTBStat.h:95
TileTBStat::T_RobRodFragMap::fragID
std::vector< uint32_t > fragID
Definition: TileTBStat.h:153
TileLaserObject::getGasFlux
double getGasFlux() const
Definition: TileLaserObject.h:254
TileTBStat::m_runNo
uint32_t m_runNo
Definition: TileTBStat.h:128
ReadHandle.h
Handle class for reading from StoreGate.
TileTBStat::m_evtNr
int m_evtNr
Definition: TileTBStat.h:108
TileTBStat::m_dqStatusKey
SG::ReadHandleKey< TileDQstatus > m_dqStatusKey
Definition: TileTBStat.h:97
TileTBStat::m_cis1st
uint32_t m_cis1st[16]
Definition: TileTBStat.h:144
TileTBStat::m_timeStart
uint32_t m_timeStart
Definition: TileTBStat.h:135
TileTBStat::m_lasStatus
int m_lasStatus
Definition: TileTBStat.h:125
TileTBStat::m_cisEnd
uint32_t m_cisEnd[19]
Definition: TileTBStat.h:146
TileTBStat::m_evtNo
uint32_t m_evtNo
Definition: TileTBStat.h:130
StatInt::StatInt
StatInt()
Definition: TileTBStat.cxx:96
COMMON_BEAM_ID
#define COMMON_BEAM_ID
Definition: TileTBFrag.h:19
StatDouble::Sum
double Sum
Definition: TileTBStat.h:65
TileTBStat::m_evTime
uint32_t m_evTime
Definition: TileTBStat.h:129
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
fitman.k
k
Definition: fitman.py:528
TileTBStat::m_checkOff
int m_checkOff
Definition: TileTBStat.h:125
TileTBStat::m_evtBegin
uint32_t m_evtBegin
Definition: TileTBStat.h:133
TileTBStat::m_nEventsPerTrigger
uint32_t m_nEventsPerTrigger[257]
Definition: TileTBStat.h:168
StatDouble::getChi2
double getChi2()
Definition: TileTBStat.cxx:70