23 #include "eformat/FullEventFragment.h"
38 #include "boost/io/ios_state.hpp"
58 if (
Value <= 0.0)
return;
76 boost::io::ios_base_all_saver coutsave(std::cout);
77 std::cout <<
s <<
" " << std::fixed;
80 std::cout <<
" " << std::setw(4) << std::setprecision(1) <<
Min
81 <<
" - " << std::setw(4) << std::setprecision(1) <<
Max;
83 std::cout <<
" ---- - ----";
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();
91 std::cout <<
" ---- - ---- mean= ------ rms= -----";
93 std::cout << std::endl;
104 std::cout <<
s <<
" ";
105 std::map<int, int>::const_iterator
min =
checkOut.begin();
106 std::map<int, int>::const_iterator
max =
checkOut.end();
112 std::cout <<
" " <<
min->first;
115 std::cout <<
" " <<
min->first <<
" - " <<
max->first;
118 std::cout <<
" " <<
min->first <<
"(" <<
min->second <<
")";
122 std::cout << std::endl;
152 , m_nEventsPerTrigger()
193 return StatusCode::SUCCESS;
198 const EventContext& ctx = Gaudi::Hive::currentContext();
201 static std::atomic<bool>
first=
true;
202 static std::atomic<bool> firstORsecond=
true;
204 if ( firstORsecond ) {
205 const eformat::FullEventFragment<const uint32_t*> *
event =
m_robSvc->getEvent(ctx);
212 uint32_t L1type =
event->lvl1_trigger_type();
214 for (
size_t irob=0; irob<nrob; ++irob) {
216 event->child(fprob, irob);
221 ROBfrag.
ROBid = robf.source_id();
222 ROBfrag.
RODid = robf.rod_source_id();
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();
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;
235 max_allowed_size = 0;
238 unsigned int size = robf.rod_ndata();
239 if (
size > max_allowed_size) {
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;
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" );
263 switch ( subdet_id ) {
278 if ((ROBfrag.
RODid & 0xFF0000) == 0x500000) {
290 std::cout <<
"Fragments found in event " <<
event->global_id();
291 else if (firstORsecond)
292 std::cout <<
"Fragments found in first event";
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) {
300 for (
unsigned int j = 0; j <
m_fragMap[
i].fragID.size(); ++j)
302 std::cout << std::dec << std::endl;
311 unsigned int testsum=0;
313 if ( testsum == 0 &&
m_cisPar[3] == 8 ) {
328 const eformat::FullEventFragment<const uint32_t*> *
event =
m_robSvc->getEvent(ctx);
340 m_evTime =
event->bc_time_seconds();
349 if (m_trigType < 1 || m_trigType > 0x80 ) {
363 std::vector<uint32_t> robid;
366 std::vector<const ROBDataProviderSvc::ROBF*> robf;
367 m_robSvc->getROBData(ctx, robid, robf);
370 m_runNo = robFrag->rod_run_no();
385 bool first_header=
true;
386 for (
size_t irob=0; irob<
event->nchildren(); ++irob) {
388 event->child(fprob, irob);
392 ROBfrag.
L1type =
event->lvl1_trigger_type();
393 ROBfrag.
ROBid = robf.source_id();
394 ROBfrag.
RODid = robf.rod_source_id();
396 if ((ROBfrag.
RODid & 0xFF0000) == 0x500000) {
402 unsigned int size = robf.rod_ndata();
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;
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;
428 <<
" event header time " <<
event->bc_time_seconds()
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;
459 unsigned int lvl1_trigger_type =
event->lvl1_trigger_type();
475 ATH_MSG_ERROR(
"There is a problem opening the LASER object" );
496 return StatusCode::SUCCESS;
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;
515 char format[30] =
"%a, %d %b %Y %H:%M:%S %Z (%z)";
519 ATH_MSG_WARNING(
"no event header available, taking time from cispar" );
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;
534 std::cout <<
"End time " <<
m_evTime;
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;
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;
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;
561 std::cout << std::endl <<
"Ngains " << ( (
m_calibMode == 1) ? 2 : 1 ) << std::endl;
563 bool cisdiff =
false;
564 for (
int i = 0;
i < 16; ++
i) {
570 std::cout <<
"CISpar first ";
571 for (
int i = 0;
i < 16; ++
i)
573 std::cout << std::endl <<
"CISpar last ";
574 for (
int i = 0;
i < 16; ++
i)
576 std::cout << std::endl;
578 std::cout <<
"CISpar begin ";
579 for (
int i = 0;
i < 16; ++
i)
584 std::cout << std::endl <<
"CISpar end ";
585 for (
int i = 0;
i < 16; ++
i)
590 std::cout << std::endl << std::endl;
597 for (
int i = 0;
i < 128; ++
i) {
600 for (
int i = 128;
i < 256; ++
i) {
603 nbad -= nlas+nped+ncis;
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;
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;
626 std::cout <<
"Number of events per trigger:" << std::endl;
627 for (
int i = 0;
i < 256; ++
i) {
629 std::cout <<
" Level1 trigger type: " <<
i <<
" (0x"<< std::hex <<
i << std::dec <<
") => " <<
m_nEventsPerTrigger[
i] << std::endl;
634 std::cout <<
" Level1 trigger type: > 255(0xFF) => " <<
m_nEventsPerTrigger[256] << std::endl;
637 std::cout << std::endl << std::endl;
639 std::cout <<
"LasFrag begin" << 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";
668 std::cout << std::endl <<
"LasError " <<
m_Error;
673 std::cout << std::endl <<
"LasAlarm " <<
m_Alarm;
678 std::cout << std::endl <<
"LasShOpen " <<
m_ShOpen;
683 std::cout << std::endl <<
"LasShClosed " <<
m_ShClose;
684 std::cout << std::endl <<
"LasFrag end" << std::endl << std::endl;
686 std::cout <<
"CISparFrag begin" << std::endl;
696 std::cout <<
"CISparFrag end" << std::endl << std::endl;
700 return StatusCode::SUCCESS;
705 unsigned int offset = 0, sizeOverhead = 2;
706 bool v3Format = ( *(
data) == 0xff1234ff );
707 v3Format |= ( *(
data) == 0x00123400 );
715 if ( frag->
size < sizeOverhead ) {
719 int n = frag->
size - sizeOverhead - 1;
720 for (;
n > -1; --
n) {
721 if ( fdata[
n]!=0 && fdata[
n]!=0xffffffff)
break;
724 ROBfrag.
fragID.push_back(frag->
id + 0xff000000);