ATLAS Offline Software
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 {
154 }
155 
156 
158 }
159 
160 // Alg standard interface function
162 
163  ATH_MSG_INFO( "Initialization" );
164 
165  m_checkOn = 0;
166  m_checkOff = 0;
167  m_check0 = 0;
168  m_check1 = 0;
169  m_check2 = 0;
170 
171  m_lasStatus = 0;
172 
173  // start with event 0
174  m_evtNr = 0;
176  m_calibMode = m_prevTrig = m_spillPattern = m_evtMin = 0xFFFFFFFF;
177  memset(m_nEvt, 0, sizeof(m_nEvt));
178  memset(m_cisPar, 0, sizeof(m_cisPar));
179  memset(m_cis1st, 0, sizeof(m_cis1st));
180  memset(m_cisBeg, 0, sizeof(m_cisBeg));
181  memset(m_cisEnd, 0, sizeof(m_cisEnd));
182  memset(m_nEventsPerTrigger, 0, sizeof(m_nEventsPerTrigger));
183 
184  m_timeStart = time(0);
185  ATH_MSG_INFO( "initialization completed" );
186 
189  ATH_CHECK( m_robSvc.retrieve() );
191 
192  return StatusCode::SUCCESS;
193 }
194 
196 
197  const EventContext& ctx = Gaudi::Hive::currentContext();
198  const TileDQstatus* dqStatus = SG::makeHandle (m_dqStatusKey, ctx).get();
199 
200  static std::atomic<bool> first=true;
201  static std::atomic<bool> firstORsecond=true;
202 
203  if ( firstORsecond ) {
204  const eformat::FullEventFragment<const uint32_t*> * event = m_robSvc->getEvent();
205  if( true /* event->check_tree() */) { // valid event
206  if ( ! first ) firstORsecond = m_printAllEvents;
207  first=false;
208  m_fragMap.clear();
209 
210  uint32_t nrob = event->nchildren();
211  uint32_t L1type = event->lvl1_trigger_type();
212 
213  for (size_t irob=0; irob<nrob; ++irob) {
214  const uint32_t* fprob;
215  event->child(fprob, irob);
216  const eformat::ROBFragment<const uint32_t*> robf(fprob);
217 
218  T_RobRodFragMap ROBfrag;
219  ROBfrag.L1type = L1type;
220  ROBfrag.ROBid = robf.source_id();
221  ROBfrag.RODid = robf.rod_source_id();
222 
223  //unsigned int version = robf.rod_version();
224  unsigned int source_id = robf.rod_source_id();
225  eformat::helper::SourceIdentifier id = eformat::helper::SourceIdentifier(source_id);
226  unsigned int subdet_id = id.subdetector_id();
227  //unsigned int module_id = id.module_id();
228 
229  unsigned int max_allowed_size = robf.rod_fragment_size_word();
230  unsigned int delta = robf.rod_header_size_word() + robf.rod_trailer_size_word();
231  if (max_allowed_size > delta) {
232  max_allowed_size -= delta;
233  } else {
234  max_allowed_size = 0;
235  }
236 
237  unsigned int size = robf.rod_ndata();
238  if (size > max_allowed_size) {
239 
240  if (size - robf.rod_trailer_size_word() < max_allowed_size) {
241  ATH_MSG_ERROR( "Problem with data size - assuming that trailer size is " << robf.rod_trailer_size_word()-(size-max_allowed_size)
242  <<" words instead of " << robf.rod_trailer_size_word() << " and data size is " << size << " words " );
243  max_allowed_size = size;
244  } else if (size - robf.rod_trailer_size_word() == max_allowed_size) {
245  ATH_MSG_ERROR( "Problem with data size - assuming that trailer is absent "
246  << " ROD size " << robf.rod_fragment_size_word()
247  << " header size " << robf.rod_header_size_word()
248  << " data size " << size );
249  max_allowed_size = size;
250  } else {
251  max_allowed_size += robf.rod_trailer_size_word();
252  size = max_allowed_size;
253  ATH_MSG_ERROR( "Problem with data size - assuming " << size << " words and no trailer at all" );
254  }
255  }
256 
257  if ( size > 0 ) {
258 
259  const uint32_t * data;
260  robf.rod_data(data);
261 
262  switch ( subdet_id ) {
263  case TILE_BEAM_ID: // TILE BEAM ROD
264  case COMMON_BEAM_ID: // COMMON BEAM ROD
265  case 0x63: // wrong id in first test runs
266  case TILE_POS_ID: // POSITIVE ROD
267  case TILE_NEG_ID: // NEGATIVE ROD
268  case TILE_EBPOS_ID: // POSITIVE EB ROD
269  case TILE_EBNEG_ID: // NEGATIVE EB ROD
270  find_frag(data, size, ROBfrag);
271  break;
272  default:
273  break;
274  }
275  }
276  m_fragMap.push_back(ROBfrag);
277  if ((ROBfrag.RODid & 0xFF0000) == 0x500000) {
278  size_t i=0;
279  for ( ; i<m_beamFragMap.size(); ++i) {
280  if (m_beamFragMap[i].ROBid == ROBfrag.ROBid && m_beamFragMap[i].L1type == ROBfrag.L1type) break;
281  }
282  if (i==m_beamFragMap.size()) {
283  m_beamFragMap.push_back(ROBfrag);
284  }
285  }
286  }
287 
288  if (m_printAllEvents)
289  std::cout << "Fragments found in event " << event->global_id();
290  else if (firstORsecond)
291  std::cout << "Fragments found in first event";
292  else
293  std::cout << "Fragments found in second event";
294  std::cout << " L1 trigger type " << L1type << " (0x"<< std::hex << L1type << std::dec << ")"
295  << " calib mode=" << dqStatus->calibMode() << std::endl
296  << " ROB ID ROD ID Frag IDs" << std::endl;
297  for (unsigned int i = 0; i < nrob; ++i) {
298  std::cout << std::hex << " 0x" << m_fragMap[i].ROBid << " 0x" << m_fragMap[i].RODid;
299  for (unsigned int j = 0; j < m_fragMap[i].fragID.size(); ++j)
300  std::cout << std::hex << " 0x" << m_fragMap[i].fragID[j];
301  std::cout << std::dec << std::endl;
302  }
303  }
304  }
305 
306  // take values from event header
307 
308  memcpy(m_cisPar,dqStatus->cispar(), sizeof (m_cisPar));
309 
310  unsigned int testsum=0;
311  for (int k = 4; k < 16; ++k) testsum += m_cisPar[k];
312  if ( testsum == 0 && m_cisPar[3] == 8 ) { // broken CIS par
315  } else {
325  }
326 
327  const eformat::FullEventFragment<const uint32_t*> * event = m_robSvc->getEvent();
328 
329  if (testsum!=0) {
330  memcpy(m_cisEnd,m_cisPar,sizeof(m_cisPar));
331  m_cisEnd[16] = event->global_id();
332  m_cisEnd[17] = m_evtNr;
333  m_cisEnd[18] = 1;
334  if (m_cisBeg[18] == 0) {
335  memcpy(m_cisBeg,m_cisEnd,sizeof(m_cisEnd));
336  }
337  }
338 
339  m_evTime = event->bc_time_seconds();
340  if (m_evTime >= m_timeStart || m_evTime < 1054321000 ) {
341  if (m_evtNr == 0)
342  ATH_MSG_WARNING( "bad time in event header (" << m_evTime << "), taking time from cispar (" << m_cisPar[10] << ")" );
343 
344  m_evTime = m_cisPar[10];
345  }
346 
347  m_trigType = dqStatus->trigType();
348  if (m_trigType < 1 || m_trigType > 0x80 ) {
349  if (m_evtNr == 0)
350  ATH_MSG_WARNING( "no event trig type available (" << m_trigType << ") , taking trig from cispar (" << m_cisPar[12] << ")" );
351 
352  m_trigType = m_cisPar[12];
353  }
354 
355  m_evtNo = event->global_id();
356  if (m_evtNo < m_evtMin) m_evtMin = m_evtNo;
357  if (m_evtNo > m_evtMax) m_evtMax = m_evtNo;
358 
359  if (m_evtNr == 0) {
361  ATH_CHECK(hid2re.isValid());
362  std::vector<uint32_t> robid;
363  robid.push_back( hid2re->getRobFromFragID(DIGI_PAR_FRAG) );
364  robid.push_back( hid2re->getRobFromFragID(LASER_OBJ_FRAG) );
365  std::vector<const ROBDataProviderSvc::ROBF*> robf;
366  m_robSvc->getROBData(robid, robf);
367  const ROBDataProviderSvc::ROBF* robFrag = (robf.size() > 0 ) ? robf[0] : 0;
368  if (robFrag) {
369  m_runNo = robFrag->rod_run_no(); // take it from beam ROD header
370  } else {
371  m_runNo = event->run_no(); // run_no sometimes is not filled here
372  }
375  m_calibMode = dqStatus->calibMode();
376  memcpy(m_cis1st,m_cisPar,sizeof(m_cisPar));
377  } else if (m_evtNr == 1) {
378  // once again, first event can be junk
379  m_calibMode = dqStatus->calibMode();
380  }
381 
382  if (! m_printAllEvents) {
383  // check if new Laser or CIS fragments appear in events with different L1 trigger types
384  bool first_header=true;
385  for (size_t irob=0; irob<event->nchildren(); ++irob) {
386  const uint32_t* fprob;
387  event->child(fprob, irob);
388  const eformat::ROBFragment<const uint32_t*> robf(fprob);
389 
390  T_RobRodFragMap ROBfrag;
391  ROBfrag.L1type = event->lvl1_trigger_type();
392  ROBfrag.ROBid = robf.source_id();
393  ROBfrag.RODid = robf.rod_source_id();
394 
395  if ((ROBfrag.RODid & 0xFF0000) == 0x500000) {
396  size_t i=0;
397  for ( ; i<m_beamFragMap.size(); ++i) {
398  if (m_beamFragMap[i].ROBid == ROBfrag.ROBid && m_beamFragMap[i].L1type == ROBfrag.L1type) break;
399  }
400  if (i==m_beamFragMap.size()) {
401  unsigned int size = robf.rod_ndata();
402  if ( size > 0 ) {
403  const uint32_t * data;
404  robf.rod_data(data);
405  find_frag(data, size, ROBfrag);
406  m_beamFragMap.push_back(ROBfrag);
407  if (first_header) {
408  first_header=false;
409  std::cout << "Beam Fragments found in event " << m_evtNo << " ( " << m_evtNr << " ) L1 trigger type "
410  << ROBfrag.L1type << " (0x"<< std::hex << ROBfrag.L1type << std::dec << ")" << std::endl
411  << " ROB ID ROD ID Frag IDs" << std::endl;
412  }
413  std::cout << std::hex << " 0x" << ROBfrag.ROBid << " 0x" << ROBfrag.RODid;
414  for (unsigned int j = 0; j < ROBfrag.fragID.size(); ++j)
415  std::cout << std::hex << " 0x" << ROBfrag.fragID[j];
416  std::cout << std::dec << std::endl;
417  }
418  }
419  }
420  }
421  }
422 
423  if ( ( m_evTime < m_timeBegin && (m_timeBegin - m_evTime) < 10*24*3600 ) || // less then 10 days shift in neg direction
424  ( m_evTime > m_timeBegin && (m_evTime - m_timeBegin) > 10*24*3600 ) ) { // more than 10 days shift in pos direction
425 
426  ATH_MSG_WARNING( " in evt " << m_evtNo << " ( " << m_evtNr << " ) "
427  << " event header time " << event->bc_time_seconds()
428  << " CISpar time " << m_cisPar[10]
429  << " old begin time " << m_timeBegin );
430 
431  if ( m_cisPar[10] > 0 && m_cisPar[10] - m_evTime > 600 ) { // more than 10 min difference !
432  ATH_MSG_WARNING( "Strange time in event header, ignore it! " );
433 
434  m_evTime = m_cisPar[10];
435  } else {
436  ATH_MSG_WARNING( "Strange begin time, change it from " << m_timeBegin << " to " << m_evTime );
437 
439  }
440  }
441 
442  if ((m_evTime >= m_timeBegin) && ((m_evTime - m_timeBegin) < 10 * 24 * 3600)
443  && (m_evTime > m_timeLast)) {
445  }
446 
447  int ind = 4;
448  switch ( m_trigType ) {
449  case 1: ind = 0; break;
450  case 2: ind = 1; break;
451  case 4: ind = 2; break;
452  case 8: ind = 3; break;
453  case 16: ind = 3; break;
454  default: ind = 4; break;
455  }
456  ++(m_nEvt[ind]);
457 
458  unsigned int lvl1_trigger_type = event->lvl1_trigger_type();
459  if (lvl1_trigger_type < 256U) ++m_nEventsPerTrigger[lvl1_trigger_type];
460  else ++m_nEventsPerTrigger[256];
461 
462  m_spillPattern <<= 4;
463  m_spillPattern |= (m_trigType & 0xF);
464 
465  if (m_spillPattern != m_prevTrig && m_spillPattern == 0x11111111)
466  ++m_nSpill;
467 
469 
470  ++m_evtNr;
471 
473  if(!pTileLasObj.isValid()) {
474  ATH_MSG_ERROR( "There is a problem opening the LASER object" );
475 
476  //return sc;
477  } else {
478  m_lasFiltNum.addValue(pTileLasObj->getFiltNumber());
479  m_lasAmp.addValue((int)pTileLasObj->getDiodeCurrOrd());
480  m_laserBoxTemp.addValue(pTileLasObj->getDiodeBoxTemp());
482  m_laserBoxHum.addValue(pTileLasObj->getHumidity());
483  m_gasFlow.addValue(pTileLasObj->getGasFlux());
484  m_lasStatus = (pTileLasObj->getAlarm() << 0x9) + (pTileLasObj->getInterlock() << 0x8) + (pTileLasObj->getShutter() << 0x6)
485  + ((int)pTileLasObj->getHVpmts() << 0x4) + ((int)pTileLasObj->getLVdiodes() << 0x3) + (pTileLasObj->getAlphaPos());
486  int lasAlpha = (int)pTileLasObj->getAlphaPos() & 0x7;
487  m_lasAlphaPos.addValue(lasAlpha);
490 // std::cout << std::endl << "Status: " << std::hex << m_lasStatus << std::dec
491 // << std::endl << "Alpha: " << lasAlpha << std::endl << std::endl;
492  }
493 
494  //log<<MSG::DEBUG<<"execute() completed successfully"<<endmsg;
495  return StatusCode::SUCCESS;
496 }
497 
499 
500  ATH_MSG_INFO( "Finalization" );
501 
502  std::cout << std::endl << "Run number " << m_runNo << std::endl;
503  std::cout << "Min event number " << m_evtMin << std::endl;
504  std::cout << "Max event number " << m_evtMax << std::endl;
505  std::cout << "First event " << m_evtBegin << std::endl;
506  std::cout << "Last event " << m_evtNo << std::endl;
507 
508  // time stored in event header is time since 1-jan-1970 00:00:00 Geneva time
509  // has to make one hour correction to convert to UNIX (UTC) time
510 
511  time_t tim;
512  struct tm buf;
513  char ctim[50];
514  char format[30] = "%a, %d %b %Y %H:%M:%S %Z (%z)";
515 
516  if (m_evTime >= m_timeStart || m_evTime == 0 ) {
517  if (m_evtNr == 0)
518  ATH_MSG_WARNING( "no event header available, taking time from cispar" );
519 
520  m_evTime = m_cisPar[10];
521  }
522 
523  if (m_timeBegin != 0 && m_timeBegin < 1104537600 ) { // CTB 2004 time
524  std::cout << "Begin time " << m_timeBegin;
525  tim = m_timeBegin - 3600;
526  std::cout << "-3600=" << tim;
527  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
528  std::cout << " " << ctim;
529  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
530  std::cout << " " << ctim;
531  std::cout << std::endl;
532 
533  std::cout << "End time " << m_evTime;
534  tim = m_evTime - 3600;
535  std::cout << "-3600=" << tim;
536  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
537  std::cout << " " << ctim;
538  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
539  std::cout << " " << ctim;
540  std::cout << std::endl;
541 
542  } else {
543 
544  std::cout << "Begin time " << m_timeBegin;
545  tim = m_timeBegin;
546  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
547  std::cout << " " << ctim;
548  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
549  std::cout << " " << ctim;
550  std::cout << std::endl;
551  std::cout << "End time " << m_timeLast;
552  tim = m_timeLast;
553  strftime(ctim, 50, format, localtime_r(&tim, &buf) );
554  std::cout << " " << ctim;
555  strftime(ctim, 50, format, gmtime_r(&tim, &buf) );
556  std::cout << " " << ctim;
557  std::cout << std::endl;
558  }
559 
560  std::cout << std::endl << "Ngains " << ( (m_calibMode == 1) ? 2 : 1 ) << std::endl;
561 
562  bool cisdiff = false;
563  for (int i = 0; i < 16; ++i) {
564  cisdiff |= (m_cis1st[i] != m_cisBeg[i]);
565  cisdiff |= (m_cisEnd[i] != m_cisPar[i]);
566  }
567 
568  if (cisdiff) {
569  std::cout << "CISpar first ";
570  for (int i = 0; i < 16; ++i)
571  std::cout << m_cis1st[i] << " ";
572  std::cout << std::endl << "CISpar last ";
573  for (int i = 0; i < 16; ++i)
574  std::cout << m_cisPar[i] << " ";
575  std::cout << std::endl;
576  }
577  std::cout << "CISpar begin ";
578  for (int i = 0; i < 16; ++i)
579  std::cout << m_cisBeg[i] << " ";
580  if (cisdiff) {
581  std::cout << " \tevent " << m_cisBeg[16] << " \teventNr " << m_cisBeg[17];
582  }
583  std::cout << std::endl << "CISpar end ";
584  for (int i = 0; i < 16; ++i)
585  std::cout << m_cisEnd[i] << " ";
586  if (cisdiff) {
587  std::cout << " \tevent " << m_cisEnd[16] << " \teventNr " << m_cisEnd[17];
588  }
589  std::cout << std::endl << std::endl;
590 
591  uint32_t nphy=0;
592  uint32_t nlas=m_nEventsPerTrigger[52];
593  uint32_t nped=m_nEventsPerTrigger[49];
594  uint32_t ncis=m_nEventsPerTrigger[50];
595  uint32_t nbad=0;
596  for (int i = 0; i < 128; ++i) {
597  nbad += m_nEventsPerTrigger[i];
598  }
599  for (int i = 128; i < 256; ++i) {
600  nphy += m_nEventsPerTrigger[i];
601  }
602  nbad -= nlas+nped+ncis;
603  nbad += m_nEventsPerTrigger[256];
604 
605  if (m_nEvt[1]+m_nEvt[2]+m_nEvt[3]==0 && nlas+nped+ncis>0) {
606  std::cout << "Spills " << m_nSpill << std::endl;
607  std::cout << "Events " << m_evtNr << std::endl;
608  std::cout << "Phy " << nphy << std::endl;
609  std::cout << "Las " << nlas << std::endl;
610  std::cout << "Ped " << nped << std::endl;
611  std::cout << "CIS " << ncis << std::endl;
612  std::cout << "Bad " << nbad << std::endl;
613  std::cout << std::endl << std::endl;
614  } else {
615  std::cout << "Spills " << m_nSpill << std::endl;
616  std::cout << "Events " << m_evtNr << std::endl;
617  std::cout << "Phy " << m_nEvt[0] << std::endl;
618  std::cout << "Las " << m_nEvt[1] << std::endl;
619  std::cout << "Ped " << m_nEvt[2] << std::endl;
620  std::cout << "CIS " << m_nEvt[3] << std::endl;
621  std::cout << "Bad " << m_nEvt[4] << std::endl;
622  std::cout << std::endl << std::endl;
623  }
624 
625  std::cout << "Number of events per trigger:" << std::endl;
626  for (int i = 0; i < 256; ++i) {
627  if (m_nEventsPerTrigger[i] != 0) {
628  std::cout << " Level1 trigger type: " << i << " (0x"<< std::hex << i << std::dec << ") => " << m_nEventsPerTrigger[i] << std::endl;
629  }
630  }
631 
632  if (m_nEventsPerTrigger[256] != 0) {
633  std::cout << " Level1 trigger type: > 255(0xFF) => " << m_nEventsPerTrigger[256] << std::endl;
634  }
635 
636  std::cout << std::endl << std::endl;
637 
638  std::cout << "LasFrag begin" << std::endl;
639  m_lasFiltNum.print("FilterWheel");
640  m_lasAmp.print("ReqAmp");
641  std::cout << "Counter " << m_laserDiodeTemp.Counter << std::endl;
642  m_laserDiodeTemp.print("LaserDiodeTemp");
643  m_laserBoxTemp.print ("LaserBoxTemp ");
644  m_laserBoxHum.print ("LaserBoxHum ");
645  m_gasFlow.print ("GasFlow ");
646  m_check0 = ~m_checkOn;
647  m_check1 = ~m_checkOff;
648  m_check2 = ~(m_check0 ^ m_check1);
649  m_lasAlphaPos.print("LasAlpha");
650  int bit = 0x800;
651 // std::cout << "StatusHEX: " << std::hex << m_lasStatus << std::endl;
652  std::cout << "GlobalStatus ";
653  for (int i = 0; i < 9; i++) {
654  if (m_check0 & bit) std::cout << " 0";
655  else if (m_check1 & bit) std::cout << " 1";
656  else std::cout << " 2";
657  bit = bit >> 1;
658  }
659  m_Alarm = 0;
660  m_Error = 0;
661  m_ShOpen = 0;
662  m_ShClose = 0;
663  bit = 0x200;
664  if (m_check0 & bit) m_Error = 0; else
665  if (m_check1 & bit) m_Error = 1; else
666  m_Error = 2;
667  std::cout << std::endl << "LasError " << m_Error;
668  bit = 0x800;
669  if (m_check0 & bit) m_Alarm = 0; else
670  if (m_check1 & bit) m_Alarm = 1; else
671  m_Alarm = 2;
672  std::cout << std::endl << "LasAlarm " << m_Alarm;
673  bit = bit >> 4;
674  if (m_check0 & bit) m_ShOpen = 0; else
675  if (m_check1 & bit) m_ShOpen = 1; else
676  m_ShOpen = 2;
677  std::cout << std::endl << "LasShOpen " << m_ShOpen;
678  bit = bit >> 1;
679  if (m_check0 & bit) m_ShClose = 0; else
680  if (m_check1 & bit) m_ShClose = 1; else
681  m_ShClose = 2;
682  std::cout << std::endl << "LasShClosed " << m_ShClose;
683  std::cout << std::endl << "LasFrag end" << std::endl << std::endl;
684 
685  std::cout << "CISparFrag begin" << std::endl;
686  m_cisMode.print("CISparMode");
687  m_cisSamples.print("CISparSamples");
688  m_cisPipeline.print("CISparPipeline");
689  m_cisI3Delay.print("CISparI3Delay");
690  m_cisDAC.print("CISparDAC");
691  m_cisCap.print("CISparCap");
692  m_cisEvent.print("CISparEvent");
693  m_cisPhase.print("CISparPhase");
694  m_cisCard.print("CISparCard");
695  std::cout << "CISparFrag end" << std::endl << std::endl;
696 
697  ATH_MSG_INFO( "finalize() successfully" );
698 
699  return StatusCode::SUCCESS;
700 }
701 
702 void TileTBStat::find_frag(const uint32_t * data, unsigned int size, T_RobRodFragMap & ROBfrag) {
703 
704  unsigned int offset = 0, sizeOverhead = 2;
705  bool v3Format = ( *(data) == 0xff1234ff ); // additional frag marker since Sep 2005
706  v3Format |= ( *(data) == 0x00123400 ); // another possible frag marker (can appear in buggy ROD frags)
707  if ( v3Format ) {
708  ++sizeOverhead;
709  ++offset; // skip frag marker
710  }
711 
712  while (offset < size ) {
713  const T_RodDataFrag* frag = (const T_RodDataFrag *)(data + offset);
714  if ( frag->size < sizeOverhead ) { // too small size, frag contains garbage
715  break;
716  }
717  const uint32_t * fdata = frag->data;
718  int n = frag->size - sizeOverhead - 1;
719  for (; n > -1; --n) {
720  if ( fdata[n]!=0 && fdata[n]!=0xffffffff) break;
721  }
722  if (n == -1 && m_detectDummyFragments) { // nothing reasonable found
723  ROBfrag.fragID.push_back(frag->id + 0xff000000);
724  } else {
725  ROBfrag.fragID.push_back(frag->id);
726  }
727  offset += frag->size;
728  }
729 
730  if ( v3Format ) --offset; // set offset back to correct value
731  if ( offset > size && ROBfrag.fragID.size() > 0 ) { // wrong length in last frag, drop it
732  ROBfrag.fragID.resize(ROBfrag.fragID.size()-1);
733  }
734 }
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:161
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
max
#define max(a, b)
Definition: cfImp.cxx:41
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
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
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:70
StatDouble::addValue
void addValue(double Value)
Definition: TileTBStat.cxx:57
TileLaserObject::getPumpDiodeTemp
double getPumpDiodeTemp() const
Definition: TileLaserObject.h:234
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:206
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:702
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:270
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:92
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
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?
min
#define min(a, b)
Definition: cfImp.cxx:40
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:498
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:195
TileTBStat::m_lasAmp
StatInt m_lasAmp
Definition: TileTBStat.h:123
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
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:534
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:157
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