ATLAS Offline Software
Loading...
Searching...
No Matches
TileTBStat.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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"
27
28//TileCal include
37
38#include "boost/io/ios_state.hpp"
39
40#include <iostream>
41#include <ctime>
42#include <cmath>
43
44// Constructor & deconstructor
48
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
75void 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
98
100 ++checkOut[Value];
101}
102
103void 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
125TileTBStat::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()
153{
155}
156
157
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;
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
188 ATH_CHECK( m_hid2RESrcIDKey.initialize() );
189 ATH_CHECK( m_dqStatusKey.initialize() );
190 ATH_CHECK( m_robSvc.retrieve() );
191 ATH_CHECK( m_laserObjectKey.initialize() );
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);
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(std::move(ROBfrag));
285 }
286 }
287 }
288
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
314 m_cisSamples.addValue(m_cisPar[1]);
315 m_cisI3Delay.addValue(m_cisPar[2]);
316 } else {
317 m_cisMode.addValue(m_cisPar[0]);
318 m_cisSamples.addValue(m_cisPar[1]);
319 m_cisPipeline.addValue(m_cisPar[2]);
320 m_cisI3Delay.addValue(m_cisPar[3]);
321 m_cisEvent.addValue(m_cisPar[4]);
322 m_cisPhase.addValue(m_cisPar[5]);
323 m_cisDAC.addValue(m_cisPar[6]);
324 m_cisCap.addValue(m_cisPar[7]);
325 m_cisCard.addValue(m_cisPar[8]);
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();
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();
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);
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());
482 m_laserDiodeTemp.addValue(pTileLasObj->getPumpDiodeTemp());
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 ");
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
703void 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 = reinterpret_cast<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}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
Handle class for reading from StoreGate.
#define TILE_NEG_ID
Definition TileTBFrag.h:16
#define LASER_OBJ_FRAG
Definition TileTBFrag.h:49
#define TILE_EBNEG_ID
Definition TileTBFrag.h:18
#define COMMON_BEAM_ID
Definition TileTBFrag.h:19
#define TILE_BEAM_ID
definition of various fragments expected in BS files from testbeam
Definition TileTBFrag.h:14
#define TILE_EBPOS_ID
Definition TileTBFrag.h:17
#define DIGI_PAR_FRAG
Definition TileTBFrag.h:41
#define TILE_POS_ID
Definition TileTBFrag.h:15
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment ROBF
ROB Fragment class.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
double getChi2()
double Max
Definition TileTBStat.h:65
double Sum
Definition TileTBStat.h:65
double SumSq
Definition TileTBStat.h:65
void addValue(double Value)
void print(const char *s, bool minMaxOnly=false)
double getMean()
double Min
Definition TileTBStat.h:65
void addValue(int Value)
std::map< int, int > checkOut
Definition TileTBStat.h:73
void print(const char *s, bool minMaxOnly=false)
Class that holds Data Quality fragment information and provides functions to extract the data quality...
int trigType() const
Trigger type.
uint32_t calibMode() const
Calibration mode.
const uint32_t * cispar() const
CIS parameters.
StatInt m_lasAlphaPos
Definition TileTBStat.h:124
std::vector< T_RobRodFragMap > m_fragMap
Definition TileTBStat.h:163
StatInt m_cisDAC
Definition TileTBStat.h:117
StatDouble m_laserBoxHum
Definition TileTBStat.h:111
void find_frag(const uint32_t *data, unsigned int size, T_RobRodFragMap &ROBfrag)
virtual StatusCode execute() override
StatDouble m_laserBoxTemp
Definition TileTBStat.h:109
uint64_t m_timeBegin
Definition TileTBStat.h:134
uint32_t m_spillPattern
Definition TileTBStat.h:140
StatInt m_cisI3Delay
Definition TileTBStat.h:116
uint64_t m_timeLast
Definition TileTBStat.h:136
StatDouble m_laserDiodeTemp
Definition TileTBStat.h:110
uint64_t m_timeStart
Definition TileTBStat.h:135
StatInt m_cisCard
Definition TileTBStat.h:121
StatInt m_lasAmp
Definition TileTBStat.h:123
Gaudi::Property< bool > m_printAllEvents
Definition TileTBStat.h:91
uint32_t m_cisEnd[19]
Definition TileTBStat.h:146
virtual ~TileTBStat()
uint32_t m_evtNo
Definition TileTBStat.h:130
SG::ReadCondHandleKey< TileHid2RESrcID > m_hid2RESrcIDKey
Definition TileTBStat.h:95
StatInt m_cisPipeline
Definition TileTBStat.h:115
virtual StatusCode finalize() override
uint32_t m_evtMax
Definition TileTBStat.h:138
StatInt m_cisMode
Definition TileTBStat.h:113
SG::ReadHandleKey< TileDQstatus > m_dqStatusKey
Definition TileTBStat.h:97
int m_lasStatus
Definition TileTBStat.h:125
uint32_t m_calibMode
Definition TileTBStat.h:139
uint32_t m_cis1st[16]
Definition TileTBStat.h:144
SG::ReadHandleKey< TileLaserObject > m_laserObjectKey
Definition TileTBStat.h:99
uint32_t m_runNo
Definition TileTBStat.h:128
ServiceHandle< IROBDataProviderSvc > m_robSvc
Name of ROB data provider service.
Definition TileTBStat.h:105
StatInt m_cisSamples
Definition TileTBStat.h:114
uint32_t m_nEvt[5]
Definition TileTBStat.h:142
StatInt m_cisEvent
Definition TileTBStat.h:119
uint32_t m_evtBegin
Definition TileTBStat.h:133
std::vector< T_RobRodFragMap > m_beamFragMap
Definition TileTBStat.h:164
uint32_t m_prevTrig
Definition TileTBStat.h:132
TileTBStat(const std::string &name, ISvcLocator *pSvcLocator)
uint64_t m_evTime
Definition TileTBStat.h:129
Gaudi::Property< bool > m_detectDummyFragments
Definition TileTBStat.h:93
StatDouble m_gasFlow
Definition TileTBStat.h:112
uint32_t m_cisBeg[19]
Definition TileTBStat.h:145
StatInt m_lasFiltNum
Definition TileTBStat.h:122
uint32_t m_cisPar[16]
Definition TileTBStat.h:143
uint32_t m_nEventsPerTrigger[257]
Definition TileTBStat.h:168
uint32_t m_nSpill
Definition TileTBStat.h:141
uint32_t m_evtMin
Definition TileTBStat.h:137
StatInt m_cisPhase
Definition TileTBStat.h:120
StatInt m_cisCap
Definition TileTBStat.h:118
virtual StatusCode initialize() override
tag-value pair class.
Definition Value.h:39
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
std::vector< uint32_t > fragID
Definition TileTBStat.h:153