ATLAS Offline Software
Loading...
Searching...
No Matches
TileTBStat.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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
196StatusCode TileTBStat::execute(const EventContext& ctx) {
197
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(ctx);
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);
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(std::move(ROBfrag));
284 }
285 }
286 }
287
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
313 m_cisSamples.addValue(m_cisPar[1]);
314 m_cisI3Delay.addValue(m_cisPar[2]);
315 } else {
316 m_cisMode.addValue(m_cisPar[0]);
317 m_cisSamples.addValue(m_cisPar[1]);
318 m_cisPipeline.addValue(m_cisPar[2]);
319 m_cisI3Delay.addValue(m_cisPar[3]);
320 m_cisEvent.addValue(m_cisPar[4]);
321 m_cisPhase.addValue(m_cisPar[5]);
322 m_cisDAC.addValue(m_cisPar[6]);
323 m_cisCap.addValue(m_cisPar[7]);
324 m_cisCard.addValue(m_cisPar[8]);
325 }
326
327 const eformat::FullEventFragment<const uint32_t*> * event = m_robSvc->getEvent(ctx);
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();
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();
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(ctx, 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);
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 //After this assignment, bits 8-31 of lvl1_trigger_type are known to be unset.
458 unsigned int lvl1_trigger_type = event->lvl1_trigger_type();
459 //...so lvl1_trigger_type must be less than 256
460 ++m_nEventsPerTrigger[lvl1_trigger_type];
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());
481 m_laserDiodeTemp.addValue(pTileLasObj->getPumpDiodeTemp());
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 ");
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
702void 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 = reinterpret_cast<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}
#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.
Handle class for reading from StoreGate.
size_t size() const
Number of registered mappings.
#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.
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
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
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)
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