396 eformat::SubDetector subdet_rod_id)
398{MsgStream logstr(msgSvc(), name());
399 logstr << MSG::DEBUG <<
"GetRODBlock" <<
endmsg;
401 {logstr << MSG::ERROR <<
"ROBDataProviderSvc not loaded. Can't read ByteStream" <<
endmsg;
402 return StatusCode::FAILURE;
408 {logstr <<MSG::FATAL <<
"Can't get RawEvent!" <<
endmsg;
409 return StatusCode::FAILURE;
413 std::vector<OFFLINE_FRAGMENTS_NAMESPACE::PointerType> robF(
MAX_ROBFRAGMENTS);
418 logstr <<MSG::FATAL <<
"ROB buffer overflow" <<
endmsg;
419 return StatusCode::FAILURE;
422 for (
size_t irob=0; irob<robcount; ++irob)
426 logstr << MSG::DEBUG <<
"ROB Frag *****************************" <<
endmsg;
427 MSG::hex(logstr) << MSG::DEBUG <<
"Marker : " << rob.marker() <<
endmsg;
428 MSG::hex(logstr) << MSG::DEBUG <<
"Frag Size : " << rob.fragment_size_word() <<
endmsg;
429 MSG::hex(logstr) << MSG::DEBUG <<
"Header Size: " << rob.header_size_word() <<
endmsg;
430 MSG::hex(logstr) << MSG::DEBUG <<
"Source ID : " << rob.source_id() <<
endmsg;
431 MSG::hex(logstr) << MSG::DEBUG <<
"Version : " << rob.version() <<
endmsg;
438 logstr << MSG::ERROR <<
"Got invalid ROB fragment!" <<
endmsg;
439 return StatusCode::FAILURE;
442 logstr << MSG::DEBUG <<
"ROD Frag *****************************" <<
endmsg;
443 MSG::hex(logstr) << MSG::DEBUG <<
"Frag Size : " << rob.rod_fragment_size_word() <<
endmsg;
444 MSG::hex(logstr) << MSG::DEBUG <<
"Header Size: " << rob.rod_header_size_word() <<
endmsg;
445 MSG::hex(logstr) << MSG::DEBUG <<
"Source ID : " << rob.rod_source_id() <<
endmsg;
446 MSG::hex(logstr) << MSG::DEBUG <<
"Run num : " << rob.rod_run_no() <<
endmsg;
447 MSG::hex(logstr) << MSG::DEBUG <<
"Version : " << rob.rod_version() <<
endmsg;
449 eformat::helper::SourceIdentifier rod_sid(rob.rod_source_id());
452 MSG::hex(logstr) << MSG::DEBUG <<
"Found requested ROD (id="
453 << rod_sid.subdetector_id() <<
")" <<
endmsg;
457 logstr<< MSG::INFO <<
"Guessing from ROD header -> " ;
458 if (rob.rod_detev_type()&1)
460 logstr<<
" H6 !" <<
endmsg;
466 logstr<<
" H8 !" <<
endmsg;
477 rob.rod_data(rodPointer);
479 for(
size_t i=0; i<rob.rod_ndata(); ++i)
487 logstr << MSG::FATAL <<
"Error reading bytestream event: "
488 <<
"Empty ROD block" <<
endmsg;
489 return StatusCode::FAILURE;
491 logstr << MSG::DEBUG <<
"Got Rod Block for Test Beam Instrumentation data from ByteStream" <<
endmsg;
492 return StatusCode::SUCCESS;
496 MSG::hex(logstr) << MSG::WARNING <<
" Didn't find SubDet ID for Beam Instruments. Should be "<< subdet_id<<
endmsg;
497 return StatusCode::FAILURE;
513 MsgStream logstr(msgSvc(), name());
514 logstr << MSG::DEBUG <<
"H6BuildObject called for " << unrec_code<<
endmsg;
516 const EventContext& ctx = Gaudi::Hive::currentContext();
518 StatusCode
sc=StatusCode::FAILURE;
523 std::ostringstream os;
527 if (
sc!=StatusCode::SUCCESS)
530 {MsgStream logstr(msgSvc(), name());
531 logstr << MSG::ERROR <<
"ReadRodBlock: RodBlock too small!" <<
endmsg;
532 return StatusCode::FAILURE;
547 std::string name1,name2;
592 logstr << MSG::DEBUG <<
" Found mini-ROD data in beam crate fragment, size " <<
m_subfrag_size <<
endmsg;
596 short m_feedthrough[8] = {0,0,0,0,1,1,1,1};
597 int m_sampleOrder[32] = {
598 0,1,2,3,4,5,6,7,8,9,10,
599 11,12,13,14,15,16,17,18,19,20,
600 21,22,23,24,25,26,27,28,29,30,
602 int m_sort[64] = { 55, 39, 23, 7, 119, 103, 87, 71,
603 54, 38, 22, 6, 118, 102, 86, 70,
604 53, 37, 21, 5, 117, 101, 85, 69,
605 52, 36, 20, 4, 116, 100, 84, 68,
606 51, 35, 19, 3, 115, 99, 83, 67,
607 50, 34, 18, 2, 114, 98, 82, 66,
608 49, 33, 17, 1, 113, 97, 81, 65,
609 48, 32, 16, 0, 112, 96, 80, 64
613 constexpr short m_slot[8]={5,7,9,11,3,4,5,6};
615 constexpr int NWREC = 8;
617 for(
unsigned int nfeb=0;nfeb<
m_boards.size();nfeb++){
619 if(
m_dump) logstr << MSG::DEBUG <<
" Board "<< nfeb <<
endmsg;
623 for(
unsigned int g=0;g<
m_gains.size();g++){
636 if((m_sampleOrder[0]=
m_febgain[nfeb])!=0){
637 for(
int j=0;j<
m_febgain[nfeb];j++) {m_sampleOrder[j+1]=j;}
640 samp=m_sampleOrder[s];
642 if(
m_dump&&(gainmode==2)) logstr << MSG::DEBUG <<
" channels ";
643 for(
int i= 0 ;i<64; i++){
647 unsigned short gain1 = ((tmp1>>12)&3) - 1;
651 unsigned short gain2 = ((tmp2>>12)&3) - 1;
659 if(
m_dump&&(gainmode==2)) logstr << MSG::DEBUG <<
" (," << chan <<
","<< gainmode <<
"," << samp <<
","<<
m_arrayofsample[chan+8][gainmode][samp]<<
")";
663 if(
m_dump&&(gainmode==2)) logstr << MSG::DEBUG <<
endmsg;
667 logstr << MSG::DEBUG <<
" Creating LArDigit for board "<< nfeb <<
". m_febgain=" <<
m_febgain[nfeb] <<
endmsg;
669 for(
unsigned int g=0;g<
m_gains.size();g++){
677 logstr << MSG::DEBUG <<
"Gain mode="<< gainmode <<
endmsg;
678 for(
int i=0;i<128;i++) {
688 const std::vector<HWIdentifier>& calibChannelIDs=calibLine->calibSlotLine(hwid);
689 if (calibChannelIDs.size() != 0) {
719 name1=
"word1frag0x03chan";
720 name2=
"word2frag0x03chan";
724 logstr<<MSG::ERROR<<
"Beam counter subfrag (0x03) has not expected size" <<
endmsg;
725 sc=StatusCode::FAILURE;
734 if(
m_dump) logstr << MSG::INFO <<
" sub frag 0x03 : word1="<<tmp1<<
" word2="<< tmp2 <<
endmsg;
744 if(
m_dump) logstr << MSG::INFO <<
" sub frag 0x03 : word1="<<tmp1<<
" word2="<< tmp2 <<
endmsg;
754 if(
m_dump) logstr << MSG::INFO <<
" sub frag 0x03 : word1="<<tmp1<<
" word2="<< tmp2 <<
endmsg;
765 name1=
"word1frag0x06chan";
766 name2=
"word2frag0x06chan";
767 std::string tcname=
"tc";
768 std::vector<TBScintillatorRaw *> theScints;
770 logstr<<MSG::ERROR<<
"Beam counter subfrag (0x04) has not expected size" <<
endmsg;
771 sc=StatusCode::FAILURE;
774 logstr << MSG::DEBUG <<
"H6BuildObject : building tailcatcher " <<
endmsg;
775 for(
unsigned int i=0;i<24;i++){
798 os << tcname << 2*i+1;
800 theScints.push_back(s1);
801 theScints.push_back(s2);
811 name1=
"word1frag0x05chan";
812 name2=
"word2frag0x05chan";
815 logstr << MSG::DEBUG <<
"H6BuildObject : number of BPCRaw "<< bpcnum <<
endmsg;
817 for(
int i=0;i<bpcnum;i++){
818 std::string bpcname =
"BPC";
822 std::vector<const TBTDCRaw*> theTDCs;
823 std::vector<const TBADCRaw*> theADCs;
826 unsigned int tmp1,tmp2;
830 os << name1 << (i*3);
833 os << name2 << (i*3);
842 os << name2 << (i*3+1);
845 os << name1 << (i*3+1);
850 MSG::hex(logstr) << MSG::DEBUG << bpcname<<
" "<< tmp1;
851 MSG::hex(logstr) <<
" "<< tmp2<<
" ";
856 os << name1 << (i*3+2);
859 os << name2 << (i*3+2);
864 MSG::hex(logstr) << MSG::DEBUG << bpcname<<
" "<< tmp1;
865 MSG::hex(logstr) <<
" "<< tmp2<<
endmsg;
868 theTDCs.push_back(tbtdcL);
869 theTDCs.push_back(tbtdcR);
870 theTDCs.push_back(tbtdcU);
871 theTDCs.push_back(tbtdcD);
872 theADCs.push_back(tbadcH);
873 theADCs.push_back(tbadcV);
884 name1=
"word1frag0x06chan";
885 name2=
"word2frag0x06chan";
887 logstr<<MSG::ERROR<<
"Beam counter subfrag (0x06) has not expected size" <<
endmsg;
888 sc=StatusCode::FAILURE;
892 logstr << MSG::DEBUG <<
" Building TBScintillatorRawCont with key " <<
m_keys[6] <<
endmsg;
902 logstr << MSG::DEBUG <<
" building muon counters:";
903 for(
int i=0;i<8;i++) {
904 std::string scintname=
"muon";
906 os << scintname << (i+1);
908 logstr << MSG::DEBUG <<
" " << scintname;
942 for(
int i=0;i<4;i++) {
946 os << name1 << (0+2+i);
949 os << name2 << (0+3+i);
953 if(
testbit(10,word1)) adc1->setOverflow();
954 if(
testbit(10,word2)) adc2->setOverflow();
1001 for(
int i=0;i<8;i++) {
1005 logstr << MSG::DEBUG <<
" Should I record TBScintillatorRawCont with key " <<
m_keys[6] <<
" ? " <<
endmsg;
1014 logstr << MSG::DEBUG <<
" Found MWPC subfragment. Nword= "<<nword <<
endmsg;
1016 std::string mwpcnames[8]= {
"X2",
"Y2",
"X3",
"Y3",
"X4",
"Y4",
"X5",
"Y5"};
1017 bool isX[9]={
true,
false,
true,
false,
true,
false,
true,
false};
1019 for(
int i=0;i<8;i++){
1020 mwpcraw[i] =
new TBMWPCRaw(mwpcnames[i]);
1033 w = (int) (word1>>12); c = (int) ((0xfff & word1) - w/2 + !(w&1));
1034 if( c < 768 ) {chamber = c/128; wire=c-chamber*128;}
1035 else {chamber=6+(c-768)/64; wire=c-768-(chamber-6)*64;}
1037 if(chamber>7){logstr << MSG::DEBUG <<
"Wrong MWPC chamber number : "<< chamber <<
endmsg;}
1042 logstr << MSG::DEBUG <<
" MWPC chamber="<< chamber<<
" wire=" << wire <<
" (w="<<w<<
")" <<
" c="<<c<<
endmsg;
1046 if(status != 0x1000) {MSG::hex(logstr)<< MSG::DEBUG <<
"MWPC status word error =" << status <<
endmsg; }
1056 w = (int) (word1>>12); c = (int) ((0xfff & word1) - w/2 + !(w&1));
1057 if( c < 768 ) {chamber = c/128; wire=c-chamber*128;}
1058 else {chamber=6+(c-768)/64; wire=c-768-(chamber-6)*64;}
1060 if(chamber>7){logstr << MSG::DEBUG <<
"Wrong MWPC chamber number : "<< chamber <<
endmsg;}
1065 logstr << MSG::DEBUG <<
" MWPC chamber="<< chamber<<
" wire=" << wire <<
" (w="<<w<<
")" <<
" c="<<c<<
endmsg;
1068 w = (int) (word2>>12); c = (int) ((0xfff & word2) - w/2 + !(w&1));
1069 if( c < 768 ) {chamber = c/128; wire=c-chamber*128;}
1070 else {chamber=6+(c-768)/64; wire=c-768-(chamber-6)*64;}
1073 if(chamber>7){logstr << MSG::INFO <<
"Wrong MWPC chamber number : "<< chamber <<
endmsg;}
1078 logstr << MSG::DEBUG <<
" MWPC chamber="<< chamber<<
" wire=" << wire <<
" (w="<<w<<
")" <<
" c="<<c<<
endmsg;
1083 for(
int i=0;i<8;i++){
1087 logstr << MSG::DEBUG <<
" End of MWPC subfragment " <<
endmsg;
1098 logstr << MSG::ERROR <<
"bad number of lines. nwords=" << nword <<
endmsg;
1101 int nline= nword / 16;
1102 strw =
reinterpret_cast<char*
>(&
m_rodBlock[pos]);
1103 for(
int i=0;i<nline;i++){
1105 std::string sline=
"";
1106 std::string skey=
"";
1107 for(
int j=0;j<63;j++) {
1108 if(strw[i*64+j]==0)
break;
1109 sline+=strw[i*64+j];
1112 std::istringstream iss (sline);
1114 if(skey==
"RunNumber") {
1115 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1118 if(skey==
"BeamMomentum") {
1119 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1122 if(skey==
"BeamParticle") {
1123 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1127 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1130 if(skey==
"CryoAngle") {
1131 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1134 if(skey==
"TableY") {
1135 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1138 if(skey==
"miniROD") {
1139 logstr << MSG::DEBUG << sline <<
endmsg;
1143 while(iss.good()) {iss>>board;
m_boards.push_back(board);}
1144 logstr << MSG::DEBUG <<
"Found nboards="<<
m_boards.size() <<
endmsg;
1145 for(
unsigned i=0;i<
m_boards.size();i++)logstr << MSG::DEBUG <<
m_boards[i]<<
" ";
1146 logstr << MSG::DEBUG<<
endmsg;
1148 if(skey==
"FebSamples") {
1149 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1153 while(iss.good()) {iss>>sample;
m_samples.push_back(sample);}
1154 MSG::dec(logstr) << MSG::DEBUG <<
"nsample="<<
m_samples.size() <<
endmsg;
1156 logstr << MSG::DEBUG<<
endmsg;
1158 if(skey==
"FebGains") {
1159 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1163 while(iss.good()) {iss>>gain;
m_gains.push_back(gain);}
1166 MSG::dec(logstr) << MSG::DEBUG <<
"numb of gains="<<
m_gains.size() <<
endmsg;
1167 for(
unsigned i=0;i<
m_gains.size();i++)logstr << MSG::DEBUG <<
m_gains[i]<<
" ";
1168 logstr << MSG::DEBUG<<
endmsg;
1170 if(skey==
"FebAuto") {
1171 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1175 while(iss.good()) {iss>>gain;
m_febgain.push_back(gain);}
1176 MSG::dec(logstr) << MSG::DEBUG <<
"n febauto="<<
m_febgain.size() <<
" " <<
endmsg;
1178 logstr << MSG::DEBUG<<
endmsg;
1180 if(skey==
"FebFirstSample") {
1181 MSG::dec(logstr) << MSG::DEBUG << sline <<
endmsg;
1185 while(iss.good()) {iss>>firstsample;
m_firstsamples.push_back(firstsample);}
1200 outfile <<
"Run number " <<
m_run_num << std::endl;
1201 outfile << std::endl;
1202 outfile <<
"Beam Type \t " <<
m_beam_part << std::endl;
1203 outfile <<
"Beam Momentum \t " <<
m_beam_moment << std::endl;
1204 outfile << std::endl;
1205 outfile <<
"Cryostat X pos \t " <<
m_cryoX << std::endl;
1206 outfile <<
"Cryostat Angle \t " <<
m_cryoAngle << std::endl;
1207 outfile <<
"Table Y pos \t " <<
m_tableY << std::endl;
1217 logstr << MSG::DEBUG <<
" Found Calib_ID subfragment. Nword= "<<nword <<
endmsg;
1219 logstr<<MSG::ERROR<<
"Calibration subfrag (0xff) has not expected size" <<
endmsg;
1220 sc=StatusCode::FAILURE;
1226 for(
int i=0;i<4;i++){
1236 logstr << MSG::DEBUG <<
"Found calibration header information " <<
endmsg;
1237 logstr << MSG::DEBUG <<
" Calib pattern: " <<
endmsg;
1238 for(
int byte=0;
byte<16;
byte++) {
1239 logstr << MSG::DEBUG <<
" byte " <<
byte <<
" : " ;
1240 for(
int bit=0; bit<8; bit++) {
1243 logstr << MSG::DEBUG << onoff <<
"/" ;
1245 logstr << MSG::DEBUG <<
endmsg;
1291 MsgStream logstr(msgSvc(), name());
1292 logstr << MSG::DEBUG <<
"H8BuildObject invoked for code " << unrec_code<<
endmsg;
1294 StatusCode
sc=StatusCode::FAILURE;
1295 bool gotobject=
false;
1296 bool recordfailure=
false;
1298 bool goodRodBlock=
true;
1307 if (
sc!=StatusCode::SUCCESS) {
1309 logstr << MSG::ERROR <<
"ReadRodBlock: RodBlock error! Will try to fill SG with empty objects." <<
endmsg;
1313 logstr << MSG::ERROR <<
"ReadRodBlock: RodBlock too small! Will try to fill SG with empty objects." <<
endmsg;
1375 short tdc_order[4] = {2,3,0,1};
1376 for(
int i=0;i<BPCNum;i++){
1378 for(
int j=0;j<4;j++) BPCtdc[i][j]=0;
1387 std::ostringstream os;
1400 name=
"frag0x10chan";
1401 logstr << MSG::DEBUG <<
"Got SubFragment " << MSG::hex <<
m_subfrag_id <<
" name=" << name
1410 logstr << MSG::DEBUG <<
"S1adc: 0x" << MSG::hex << (int)(
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1416 logstr << MSG::DEBUG <<
"S2 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1423 logstr << MSG::DEBUG <<
"S3 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1430 logstr << MSG::DEBUG <<
"muTag :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1437 logstr << MSG::DEBUG <<
"C1 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1444 logstr << MSG::DEBUG <<
"C2 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1452 logstr << MSG::DEBUG <<
"muHalo :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1459 logstr << MSG::DEBUG <<
"muVeto :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1465 logstr << MSG::INFO <<
" DUMP : ";
1467 logstr <<
" " << S3rightadc->
getADC()<<
" " << muTagadc->
getADC() <<
" " << C1adc->
getADC();
1476 name=
"frag0x11chan";
1477 logstr << MSG::DEBUG <<
"Got SubFragment " << MSG::hex <<
m_subfrag_id <<
" name=" << name
1485 logstr << MSG::DEBUG <<
"sTRT:" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1490 logstr << MSG::DEBUG <<
"S2 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1496 logstr << MSG::DEBUG <<
"S3 :" << MSG::hex << (
m_rodBlock[pos] & 0xfff) <<
" [0x" <<
m_rodBlock[pos] <<
"]"
1501 logstr << MSG::INFO <<
" DUMP : ";
1509 name=
"frag0x12chan";
1510 logstr << MSG::DEBUG <<
"Got SubFragment " << MSG::hex <<
m_subfrag_id <<
" name=" << name
1518 const int chan= (
m_rodBlock[pos] >> 16) & 0x1F;
1519 const unsigned int tdc =
m_rodBlock[pos] & 0xfff;
1520 const int corrup = (
m_rodBlock[pos]>>21)&0x3f;
1521 const bool endofdata=(((
m_rodBlock[pos] >> 24)&0x7)==0x4);
1524 const bool underthresh=(
m_rodBlock[pos]>>13)&1;
1525 logstr << MSG::DEBUG << MSG::dec <<
"Pos=" << pos <<
" Chan "<< chan <<
"=" << tdc <<
", OV=" << overflow
1526 <<
", UN=" <<underthresh <<
" EOD="<< endofdata <<
", corrupt=" << corrup
1529 MSG::dec(logstr) <<
" "<< (
m_rodBlock[pos] & 0xfff);
1532 if (!endofdata && !corrup) {
1537 ClockPhasetdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1541 S1tdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1545 S2downtdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1549 S3lefttdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1553 S2uptdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1557 S3righttdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1561 S0tdc =
new TBTDCRaw(os.str(),overflow,tdc,underthresh);
1572 logstr << MSG::DEBUG <<
" End of data word found at pos " << pos <<
endmsg;
1574 logstr << MSG::ERROR <<
" Unexpected end-of-data word found at pos " << pos <<
endmsg;
1577 logstr<< MSG::ERROR <<
"Corrupted data in SubFragment 0x12 pos=" << pos <<
"channel=" <<chan <<
" [0x" <<
1585 name=
"frag0x13chan";
1586 logstr << MSG::DEBUG <<
"Got SubFragment " << MSG::hex <<
m_subfrag_id <<
" name=" << name
1592 const int chan= (
m_rodBlock[pos] >> 17) & 0xF;
1593 const unsigned int tdc =
m_rodBlock[pos] & 0xffff;
1594 const bool corrup = (
m_rodBlock[pos]>>21)&0x1;
1595 const bool endofdata=!((
m_rodBlock[pos] >> 23)&0x1);
1596 logstr << MSG::DEBUG << MSG::dec <<
"Pos=" << pos <<
" Chan "<< chan <<
"=" << tdc
1597 <<
" EOD="<< endofdata <<
", corrupt=" << corrup
1599 if (!endofdata && !corrup) {
1604 const short bpc_ind = chan / 4 ;
1606 logstr<< MSG::DEBUG <<
"Error in 0x13 : found chan="<<chan<<
" corresponding to bpc "<<bpc_ind<<
endmsg;
1609 const short signaltype = tdc_order[chan % 4];
1610 if (BPCtdc[bpc_ind][signaltype]==NULL)
1611 BPCtdc[bpc_ind][signaltype] = tbtdc;
1616 logstr << MSG::DEBUG <<
" End of data word found at pos " << pos <<
endmsg;
1618 logstr << MSG::ERROR <<
" Unexpected end-of-data word found at pos " << pos <<
endmsg;
1621 logstr<< MSG::ERROR <<
"Corrupted data in SubFragment 0x13 pos=" << pos <<
"channel=" <<chan <<
" [0x" <<
1629 name=
"frag0x14chan";
1630 logstr << MSG::DEBUG <<
"Got SubFragment " << MSG::hex <<
m_subfrag_id <<
" name=" << name
1641 const int chan= (
m_rodBlock[pos] >> 17) & 0xF;
1642 const unsigned int tdc =
m_rodBlock[pos] & 0xffff;
1643 const bool corrup = (
m_rodBlock[pos]>>21)&0x1;
1644 const bool endofdata=!((
m_rodBlock[pos] >> 23)&0x1);
1647 logstr << MSG::DEBUG << MSG::dec <<
"Pos=" << pos <<
" Chan "<< chan <<
"=" << tdc
1648 <<
" EOD="<< endofdata <<
", corrupt=" << corrup
1651 if (!endofdata && !corrup) {
1656 const short bpc_ind = chan / 4 + 3;
1657 if(bpc_ind>4) { logstr<< MSG::DEBUG <<
"Error in 0x14 : found chan="<<chan<<
" corresponding to bpc "<<bpc_ind<<
endmsg;
continue;}
1658 const short signaltype = tdc_order[chan % 4];
1659 if (BPCtdc[bpc_ind][signaltype]==NULL)
1660 BPCtdc[bpc_ind][signaltype] = tbtdc;
1665 logstr << MSG::DEBUG <<
" End of data word found at pos " << pos <<
endmsg;
1667 logstr << MSG::ERROR <<
" Unexpected end-of-data word found at pos " << pos <<
endmsg;
1670 logstr<< MSG::ERROR <<
"Corrupted data in SubFragment 0x14 pos=" << pos <<
"channel=" <<chan <<
" [0x" <<
1677 logstr << MSG::INFO <<
"Found trigger word fragment" <<
endmsg;
1689 logstr << MSG::DEBUG <<
"Filling Scint" <<
endmsg;
1736 logstr << MSG::DEBUG <<
"Filling BPC" <<
endmsg;
1739 for(
int i=0;i<BPCNum;i++){
1740 std::vector<const TBTDCRaw*> listtdc;
1741 std::vector<const TBADCRaw*> listadc;
1742 for(
int j=0;j<4;j++){
1743 if(BPCtdc[i][j]==0) listtdc.push_back(dummytdc);
1744 else listtdc.push_back(BPCtdc[i][j]);
1746 listadc.push_back(dummyadc); listadc.push_back(dummyadc);
1758 if (
sc!=StatusCode::SUCCESS) {
1760 goodRodBlock =
false;
1761 logstr << MSG::ERROR <<
"Tile laser crate ROD block error! Nothing valid in SG." <<
endmsg;
1764 logstr << MSG::ERROR <<
"Tile laser crate ROD block too small! Nothing valid in SG" <<
endmsg;
1766 goodRodBlock =
false;
1792 logstr << MSG::DEBUG <<
"Found Scintillator SC1 and SC2" <<
endmsg;
1799 for(
int i=0;i<8;i++){
1801 std::stringstream RawName;
1802 RawName <<
"frag0x1chan"<<i;
1806 std::stringstream MuWallName;
1807 MuWallName <<
"MuWall"<<i;
1812 logstr << MSG::DEBUG <<
"Found first muWall block" <<
endmsg;
1820 for(
int i=0;i<4;i++){
1822 std::stringstream RawName;
1823 RawName <<
"frag0x1chan"<<(i+8);
1827 std::stringstream MuWallName;
1828 MuWallName <<
"MuWall"<<i+8;
1833 logstr << MSG::DEBUG <<
"Found second muWall block" <<
endmsg;
1861 if (
sc.isFailure( ) ) {recordfailure=
true;
1862 logstr << MSG::FATAL <<
"Cannot record BPCRawCont" <<
endmsg;
1864 }
else {
sc=StatusCode::SUCCESS; gotobject=
true;}
1869 if (
sc.isFailure( ) ) {recordfailure=
true;
1870 logstr << MSG::FATAL <<
"Cannot record ScintRawCont " <<
endmsg;
1872 }
else {
sc=StatusCode::SUCCESS; gotobject=
true;}
1877 if (
sc.isFailure( ) ) {recordfailure=
true;
1878 logstr << MSG::FATAL <<
"Cannot record TDCCont " <<
endmsg;
1880 }
else {
sc=StatusCode::SUCCESS; gotobject=
true;}
1884 if (
sc.isFailure( ) ) {recordfailure=
true;
1885 logstr << MSG::FATAL <<
"Cannot record ADCCont " <<
endmsg;
1887 }
else {
sc=StatusCode::SUCCESS; gotobject=
true;}
1893 logstr << MSG::DEBUG <<
"Recording TBTriggerPatternUnit with key " <<
m_keys[1] <<
endmsg;
1896 if (
sc.isFailure( ) ) {
1897 logstr << MSG::ERROR <<
"Cannot record TBTrigPat " <<
endmsg;
1900 sc=StatusCode::SUCCESS;
1905 logstr << MSG::DEBUG <<
" End of H8 Build " <<
endmsg;
1906 if(!gotobject) {logstr<< MSG::ERROR<<
" Could not find object of type "<<unrec_code <<
endmsg;
sc=StatusCode::FAILURE;}
1907 if(recordfailure) {logstr<< MSG::ERROR<<
" One object could not be recorded "<<
endmsg;
sc=StatusCode::FAILURE;}