18 #include <ext/algorithm>
25 bool using_fed_key,
bool unpack_bad_channels,
bool mark_missing_feds,
const uint32_t errorThreshold ) :
26 headerBytes_( appended_bytes ),
27 fedBufferDumpFreq_( fed_buffer_dump_freq ),
28 fedEventDumpFreq_( fed_event_dump_freq ),
29 triggerFedId_( trigger_fed_id ),
30 useFedKey_( using_fed_key ),
31 unpackBadChannels_( unpack_bad_channels ),
32 markMissingFeds_( mark_missing_feds ),
36 useDaqRegister_(
false),
39 doFullCorruptBufferChecks_(
false),
40 doAPVEmulatorCheck_(
true),
41 errorThreshold_(errorThreshold)
45 <<
"[sistrip::RawToDigiUnpacker::"<<__func__<<
"]"
46 <<
" Constructing object...";
49 edm::LogWarning(
"SiStripRawToDigi") <<
"Warning: Unpacking of bad channels enabled. Only enable this if you know what you are doing. " << std::endl;
56 <<
"[sistrip::RawToDigiUnpacker::"<<__func__<<
"]"
57 <<
" Destructing object...";
78 if ( cabling.
fedIds().empty() ) {
80 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
81 <<
" No FEDs found in cabling map!";
83 std::vector<uint16_t>
feds;
86 buffers.
FEDData( static_cast<int>(ifed) ).
size() ) {
91 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
94 <<
" FED buffers with non-zero size!";
99 bool first_fed =
true;
102 std::vector<uint16_t>::const_iterator ifed = cabling.
fedIds().begin();
103 for ( ; ifed != cabling.
fedIds().end(); ifed++ ) {
114 std::stringstream
ss;
115 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
117 << std::setw(4) << std::setfill(
' ') << *ifed
118 <<
" in FEDRawDataCollection"
119 <<
" with non-zero pointer 0x"
121 << std::setw(8) << std::setfill(
'0')
122 <<
reinterpret_cast<uint32_t*
>(
const_cast<uint8_t*
>(input.
data()))
125 << std::setw(5) << std::setfill(
' ') << input.
size()
127 LogTrace(
"SiStripRawToDigi") << ss.str();
134 std::stringstream
ss;
144 if ( !input.
data() ) {
147 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
148 <<
" NULL pointer to FEDRawData for FED id "
153 std::vector<FedChannelConnection>::const_iterator iconn = conns.begin();
154 for ( ; iconn != conns.end(); iconn++ ) {
162 if ( !input.
size() ) {
165 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
166 <<
" FEDRawData has zero size for FED id "
171 std::vector<FedChannelConnection>::const_iterator iconn = conns.begin();
172 for ( ; iconn != conns.end(); iconn++ ) {
180 std::auto_ptr<sistrip::FEDBuffer> buffer;
183 buffer->setLegacyMode(
legacy_);
184 if (!buffer->doChecks()) {
186 throw cms::Exception(
"FEDBuffer") <<
"FED Buffer check fails for FED ID " << *ifed <<
".";
189 throw cms::Exception(
"FEDBuffer") <<
"FED corrupt buffer check fails for FED ID " << *ifed <<
".";
194 edm::LogWarning(
"sistrip::RawToDigiUnpacker") <<
"Exception caught when creating FEDBuffer object for FED " << *ifed <<
": " << e.
what();
197 std::vector<FedChannelConnection>::const_iterator iconn = conns.begin();
198 for ( ; iconn != conns.end(); iconn++ ) {
211 std::stringstream
ss;
212 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
213 <<
" EventSummary is not set correctly!"
214 <<
" Missing information from both \"trigger FED\" and \"DAQ registers\"!";
220 if ( !summary.
valid() ) {
223 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
224 <<
" EventSummary is not valid: skipping...";
240 std::stringstream
ss;
247 std::vector<FedChannelConnection>::const_iterator iconn = conns.begin();
248 for ( ; iconn != conns.end(); iconn++ ) {
251 uint16_t chan = iconn->fedCh();
254 if ( !iconn->isConnected() ) {
continue; }
291 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
292 <<
" Clusters are not ordered for FED "
293 << *ifed <<
" channel " << iconn->fedCh()
301 if (regItem.length > 0) {
317 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
318 <<
" Problem extracting common modes for FED id "
319 << *ifed <<
" and channel " << iconn->fedCh()
320 <<
": " << std::endl << e.
what();
340 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
341 <<
" Clusters are not ordered for FED "
342 << *ifed <<
" channel " << iconn->fedCh()
350 if (regItem.length > 0) {
366 size_t bits_shift = 0;
379 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
380 <<
" Clusters are not ordered for FED "
381 << *ifed <<
" channel " << iconn->fedCh()
389 if (regItem.length > 0) {
412 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
413 <<
" Clusters are not ordered for FED "
414 << *ifed <<
" channel " << iconn->fedCh()
422 if (regItem.length > 0) {
434 std::vector<uint16_t> samples;
439 uint8_t packet_code = buffer->packetCode(
legacy_);
442 while (unpacker.
hasData()) {samples.push_back(unpacker.
adc());unpacker++;}
451 while (unpacker.
hasData()) {samples.push_back(( unpacker.
adc()<<2 ));unpacker++;}
455 while (unpacker.
hasData()) {samples.push_back(( unpacker.
adc()<<1 ));unpacker++;}
458 if ( !samples.empty() ) {
462 for ( uint16_t
i = 0,
n = samples.size();
i <
n;
i++ ) {
465 (
i/128) ? readout=readout*2+1 : readout=readout*2;
476 std::vector<uint16_t> samples;
482 while (unpacker.
hasData()) {samples.push_back(unpacker.
adc());unpacker++;}
484 if ( !samples.empty() ) {
486 for ( uint16_t
i = 0,
n = samples.size();
i <
n;
i++ ) {
497 std::vector<uint16_t> samples;
503 while (unpacker.
hasData()) {samples.push_back(unpacker.
adc());unpacker++;}
505 if ( !samples.empty() ) {
507 for ( uint16_t
i = 0,
n = samples.size();
i <
n;
i++ ) {
517 std::stringstream
ss;
518 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
519 <<
" Unknown FED readout mode (" << mode
520 <<
")! Assuming SCOPE MODE...";
524 std::vector<uint16_t> samples;
530 while (unpacker.
hasData()) {samples.push_back(unpacker.
adc());unpacker++;}
532 if ( !samples.empty() ) {
534 for ( uint16_t
i = 0,
n = samples.size();
i <
n;
i++ ) {
540 std::stringstream
ss;
541 ss <<
"Extracted " << samples.size()
542 <<
" SCOPE MODE digis (samples[0] = "
544 <<
") from FED id/ch "
548 LogTrace(
"SiStripRawToDigi") << ss.str();
553 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
554 <<
" No SM digis found!";
561 unsigned int detIdsSize = detids.
size();
563 std::ostringstream
ss;
564 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
565 <<
" Problems were found in data and " << detIdsSize <<
" channels could not be unpacked. "
566 <<
"See output of FED Hardware monitoring for more information. ";
570 edm::LogError(
"TooManyErrors") <<
"Total number of errors = " << detIdsSize;
574 update(scope_mode, virgin_raw, proc_raw, zero_suppr, cm_values);
590 std::vector< edm::DetSet<SiStripDigi> > sorted_and_merged;
593 bool errorInData =
false;
597 std::vector<SiStripDigi> & digis = sorted_and_merged.back().data;
599 size_t len = it->length;
600 for (it2 = it+1; (it2 !=
end) && (it2->detid == it->detid); ++it2) { len += it2->length; }
604 for (it2 = it+0; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
611 if (!__gnu_cxx::is_sorted( sorted_and_merged.begin(), sorted_and_merged.end() )) {
614 <<
"Container must be already sorted!\nat "
621 std::vector< edm::DetSet<SiStripDigi> >::iterator iii = sorted_and_merged.begin();
622 std::vector< edm::DetSet<SiStripDigi> >::iterator jjj = sorted_and_merged.end();
623 for ( ; iii != jjj; ++iii ) {
624 if ( ! __gnu_cxx::is_sorted( iii->begin(), iii->end() ) ) {
632 if (errorInData)
edm::LogWarning(
"CorruptData") <<
"Some modules contained corrupted ZS raw data, and have been skipped in unpacking\n";
636 zero_suppr.
swap( zero_suppr_dsv );
644 std::vector< edm::DetSet<SiStripRawDigi> > sorted_and_merged;
647 bool errorInData =
false;
651 std::vector<SiStripRawDigi> & digis = sorted_and_merged.back().data;
655 int maxFirstStrip = it->first;
656 for (it2 = it+1; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
658 if (it2->first <= maxFirstStrip) { isDetOk =
false;
continue; }
659 maxFirstStrip = it2->first;
661 if (!isDetOk) { errorInData =
true; it = it2;
continue; }
664 digis.resize(maxFirstStrip + 256);
666 for (it2 = it+0; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
668 if (it->length != 256) { isDetOk =
false;
continue; }
671 if (!isDetOk) { errorInData =
true; digis.clear(); it = it2;
continue; }
676 if (errorInData)
edm::LogWarning(
"CorruptData") <<
"Some modules contained corrupted virgin raw data, and have been skipped in unpacking\n";
679 if ( !__gnu_cxx::is_sorted( sorted_and_merged.begin(), sorted_and_merged.end() ) ) {
682 <<
"Container must be already sorted!\nat "
691 virgin_raw.
swap( virgin_raw_dsv );
698 std::vector< edm::DetSet<SiStripRawDigi> > sorted_and_merged;
701 bool errorInData =
false;
705 std::vector<SiStripRawDigi> & digis = sorted_and_merged.back().data;
709 int maxFirstStrip = it->first;
710 for (it2 = it+1; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
712 if (it2->first <= maxFirstStrip) { isDetOk =
false;
continue; }
713 maxFirstStrip = it2->first;
716 if (!isDetOk) { errorInData =
true; it = it2;
continue; }
719 digis.resize(maxFirstStrip + 256);
721 for (it2 = it+0; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
723 if (it->length != 256) { isDetOk =
false;
continue; }
727 if (!isDetOk) { errorInData =
true; digis.clear(); it = it2;
continue; }
732 if (errorInData)
edm::LogWarning(
"CorruptData") <<
"Some modules contained corrupted proc raw data, and have been skipped in unpacking\n";
735 if ( !__gnu_cxx::is_sorted( sorted_and_merged.begin(), sorted_and_merged.end() ) ) {
738 <<
"Container must be already sorted!\nat "
747 proc_raw.
swap( proc_raw_dsv );
754 std::vector< edm::DetSet<SiStripRawDigi> > sorted_and_merged;
757 bool errorInData =
false;
758 std::vector<Registry>::iterator it,
end;
761 std::vector<SiStripRawDigi> & digis = sorted_and_merged.back().data;
764 if ( (it +1 != end) && (it->detid == (it+1)->detid) ) {
767 do { ++it; }
while ( ( it+1 != end) && (it->detid == (it+1)->detid) );
772 if (errorInData)
edm::LogWarning(
"CorruptData") <<
"Some fed keys contained corrupted scope mode data, and have been skipped in unpacking\n";
775 if ( !__gnu_cxx::is_sorted( sorted_and_merged.begin(), sorted_and_merged.end() ) ) {
778 <<
"Container must be already sorted!\nat "
787 scope_mode.
swap( scope_mode_dsv );
798 std::vector< edm::DetSet<SiStripRawDigi> > sorted_and_merged;
801 bool errorInData =
false;
805 std::vector<SiStripRawDigi> & digis = sorted_and_merged.back().data;
809 int maxFirstStrip = it->first;
810 for (it2 = it+1; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
812 if (it2->first <= maxFirstStrip) { isDetOk =
false;
continue; }
813 maxFirstStrip = it2->first;
815 if (!isDetOk) { errorInData =
true; it = it2;
continue; }
818 digis.resize(maxFirstStrip + 2);
820 for (it2 = it+0; (it2 !=
end) && (it2->detid == it->detid); ++it2) {
822 if (it->length != 2) { isDetOk =
false;
continue; }
825 if (!isDetOk) { errorInData =
true; digis.clear(); it = it2;
continue; }
830 if (errorInData)
edm::LogWarning(
"CorruptData") <<
"Some modules contained corrupted common mode data, and have been skipped in unpacking\n";
833 if ( !__gnu_cxx::is_sorted( sorted_and_merged.begin(), sorted_and_merged.end() ) ) {
836 <<
"Container must be already sorted!\nat "
845 common_mode.
swap( common_mode_dsv );
866 uint32_t* data_u32 = 0;
867 uint32_t size_u32 = 0;
876 if ( trigger_fed.
data() && trigger_fed.
size() ) {
877 uint8_t*
temp =
const_cast<uint8_t*
>( trigger_fed.
data() );
878 data_u32 =
reinterpret_cast<uint32_t*
>(
temp ) +
sizeof(
fedh_t)/
sizeof(uint32_t) + 1;
879 size_u32 = trigger_fed.
size()/
sizeof(uint32_t) -
sizeof(
fedh_t)/
sizeof(uint32_t) - 1;
881 if ( fed_trailer->
conscheck == 0xDEADFACE ) {
884 std::stringstream
ss;
885 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
886 <<
" Search mode for 'trigger FED' activated!"
888 LogTrace(
"SiStripRawToDigi") << ss.str();
897 std::stringstream
ss;
898 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
899 <<
" Search mode for 'trigger FED' activated!"
900 <<
" 'Trigger FED' info not found!";
910 if ( trigger_fed.
data() && trigger_fed.
size() ) {
911 uint8_t*
temp =
const_cast<uint8_t*
>( trigger_fed.
data() );
912 data_u32 =
reinterpret_cast<uint32_t*
>(
temp ) +
sizeof(
fedh_t)/
sizeof(uint32_t) + 1;
913 size_u32 = trigger_fed.
size()/
sizeof(uint32_t) -
sizeof(
fedh_t)/
sizeof(uint32_t) - 1;
915 if ( fed_trailer->
conscheck != 0xDEADFACE ) {
918 <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
919 <<
" Unexpected stamp found in DAQ trailer (ie, not 0xDEADFACE)!"
920 <<
" Buffer appears not to contain 'trigger FED' data!";
938 std::stringstream
ss;
939 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
940 <<
" NULL pointer to 'trigger FED' data";
947 std::stringstream
ss;
948 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
949 <<
" Unexpected 'Trigger FED' data size [32-bit words]: " << size_u32;
962 uint32_t* head = &data_u32[hsize];
971 std::stringstream
ss;
972 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
973 <<
" EventSummary built from \"trigger FED\":"
975 LogTrace(
"SiStripRawToDigi") << ss.str();
984 if ( input.
size() < 24 ) {
988 std::stringstream
ss;
989 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"] "
990 <<
"Input FEDRawData with FED id " << fed_id
991 <<
" has size " << input.
size();
1000 while ( ichar < input.
size()-16 && !
found ) {
1002 uint32_t* input_u32 =
reinterpret_cast<uint32_t*
>(
const_cast<unsigned char*
>( input.
data() ) + offset );
1003 uint32_t* fed_trailer =
reinterpret_cast<uint32_t*
>(
const_cast<unsigned char*
>( input.
data() ) + input.
size() - 8 );
1007 bool old_vme_header = ( input_u32[0] & 0xF0000000 ) == 0x50000000 && ( fed_trailer[0] & 0xF0000000 ) == 0xA0000000 && ( (fed_trailer[0] & 0x00FFFFFF)*0x8 ) == (input.
size() -
offset);
1009 bool old_slink_header = ( input_u32[1] & 0xF0000000 ) == 0x50000000 && ( fed_trailer[1] & 0xF0000000 ) == 0xA0000000 && ( (fed_trailer[1] & 0x00FFFFFF)*0x8 ) == (input.
size() -
offset);
1011 bool old_slink_payload = ( input_u32[3] & 0xFF000000 ) == 0xED000000;
1013 bool new_buffer_format = ( input_u32[2] & 0xFF000000 ) == 0xC5000000;
1015 if ( old_vme_header ) {
1020 memcpy( output.
data(),
1025 std::stringstream
ss;
1026 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1027 <<
" Buffer for FED id " << fed_id
1028 <<
" has been found at byte position " << offset
1029 <<
" with a size of " << input.
size()-offset <<
" bytes."
1030 <<
" Adjust the configurable 'AppendedBytes' to " <<
offset;
1031 LogTrace(
"SiStripRawToDigi") << ss.str();
1035 }
else if ( old_slink_header ) {
1037 if ( old_slink_payload ) {
1042 uint32_t* output_u32 =
reinterpret_cast<uint32_t*
>(
const_cast<unsigned char*
>( output.
data() ) );
1044 while ( iter < output.
size() /
sizeof(uint32_t) ) {
1045 output_u32[iter] = input_u32[iter+1];
1046 output_u32[iter+1] = input_u32[iter];
1051 std::stringstream
ss;
1052 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1053 <<
" Buffer (with MSB and LSB 32-bit words swapped) for FED id " << fed_id
1054 <<
" has been found at byte position " << offset
1055 <<
" with a size of " << output.
size() <<
" bytes."
1056 <<
" Adjust the configurable 'AppendedBytes' to " <<
offset;
1057 LogTrace(
"SiStripRawToDigi") << ss.str();
1061 }
else if ( new_buffer_format ) {
1066 memcpy( output.
data(),
1071 std::stringstream
ss;
1072 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1073 <<
" Buffer for FED id " << fed_id
1074 <<
" has been found at byte position " << offset
1075 <<
" with a size of " << input.
size()-offset <<
" bytes."
1076 <<
" Adjust the configurable 'AppendedBytes' to " <<
offset;
1077 LogTrace(
"SiStripRawToDigi") << ss.str();
1081 }
else {
headerBytes_ < 0 ? found =
false : found =
true; }
1082 }
else {
headerBytes_ < 0 ? found =
false : found =
true; }
1087 if ( output.
size() == 0 ) {
1091 memcpy( output.
data(), input.
data(), 0 );
1093 std::stringstream
ss;
1095 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1096 <<
" DAQ header not found within buffer for FED id: " << fed_id;
1098 uint32_t* input_u32 =
reinterpret_cast<uint32_t*
>(
const_cast<unsigned char*
>( input.
data() ) );
1099 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1100 <<
" DAQ header not found at expected location for FED id: " << fed_id << std::endl
1101 <<
" First 64-bit word of buffer is 0x"
1103 << std::setfill(
'0') << std::setw(8) << input_u32[0]
1104 << std::setfill(
'0') << std::setw(8) << input_u32[1]
1106 <<
" Adjust 'AppendedBytes' configurable to '-1' to activate 'search mode'";
1111 }
else if ( output.
size() < 24 ) {
1114 std::stringstream
ss;
1115 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1116 <<
" Unexpected buffer size! FEDRawData with FED id " << fed_id
1117 <<
" has size " << output.
size();
1134 daq1 =
static_cast<uint32_t
>( header->
daqRegister() );
1135 daq2 =
static_cast<uint32_t
>( header->
daqRegister2() );
1148 std::stringstream
ss;
1149 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1150 <<
" EventSummary built from FED DAQ registers:"
1152 LogTrace(
"SiStripRawToDigi") << ss.str();
1161 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1162 <<
" Dump of buffer for FED id " << fed_id << std::endl
1163 <<
" Buffer contains " << buffer.
size()
1164 <<
" bytes (NB: payload is byte-swapped)" << std::endl;
1167 uint32_t* buffer_u32 =
reinterpret_cast<uint32_t*
>(
const_cast<unsigned char*
>( buffer.
data() ) );
1168 unsigned int empty = 0;
1170 ss <<
"Byte-> 4 5 6 7 0 1 2 3\n";
1171 for ( uint32_t
i = 0;
i < buffer.
size()/8;
i++ ) {
1174 if ( !temp0 && !temp1 ) { empty++; }
1177 ss <<
" [ empty words ]" << std::endl;
1181 << std::setfill(
' ') << std::setw(6) <<
i*8 <<
": "
1183 << std::setfill(
'0') << std::setw(8) << temp0
1184 << std::setfill(
'0') << std::setw(8) << temp1
1192 ss <<
" Byte | <---- Byte order ----< | Byte" << std::endl;
1193 ss <<
" cntr | 7 6 5 4 3 2 1 0 | cntr" << std::endl;
1194 for ( uint32_t
i = 0;
i < buffer.
size()/8;
i++ ) {
1196 uint16_t tmp0 = buffer.
data()[
i*8+0] & 0xFF;
1197 uint16_t tmp1 = buffer.
data()[
i*8+1] & 0xFF;
1198 uint16_t tmp2 = buffer.
data()[
i*8+2] & 0xFF;
1199 uint16_t tmp3 = buffer.
data()[
i*8+3] & 0xFF;
1200 uint16_t tmp4 = buffer.
data()[
i*8+4] & 0xFF;
1201 uint16_t tmp5 = buffer.
data()[
i*8+5] & 0xFF;
1202 uint16_t tmp6 = buffer.
data()[
i*8+6] & 0xFF;
1203 uint16_t tmp7 = buffer.
data()[
i*8+7] & 0xFF;
1214 << std::setfill(
' ') << std::setw(6) <<
i*8+7 <<
" : "
1216 << std::setfill(
'0') << std::setw(2) << tmp7 <<
" "
1217 << std::setfill(
'0') << std::setw(2) << tmp6 <<
" "
1218 << std::setfill(
'0') << std::setw(2) << tmp5 <<
" "
1219 << std::setfill(
'0') << std::setw(2) << tmp4 <<
" "
1220 << std::setfill(
'0') << std::setw(2) << tmp3 <<
" "
1221 << std::setfill(
'0') << std::setw(2) << tmp2 <<
" "
1222 << std::setfill(
'0') << std::setw(2) << tmp1 <<
" "
1223 << std::setfill(
'0') << std::setw(2) << tmp0
1225 <<
" :" << std::setfill(
' ') << std::setw(6) <<
i*8
1231 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1232 <<
" End of FED buffer";
1237 method_name =
"sistrip::RawToDigiUnpacker::" + method_name;
1246 std::stringstream
ss;
1247 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1248 <<
" Caught std::exception!" << std::endl;
1249 if ( extra_info !=
"" ) {
1250 ss <<
" Information: " << extra_info << std::endl;
1252 ss <<
" Caught std::exception in ["
1253 << method_name <<
"] with message:" << std::endl
1261 std::stringstream
ss;
1262 ss <<
"[sistrip::RawToDigiUnpacker::" << __func__ <<
"]"
1263 <<
" Caught unknown exception!" << std::endl;
1264 if ( extra_info !=
"" ) {
1265 ss <<
" Information: " << extra_info << std::endl;
1267 ss <<
"Caught unknown exception in ["
1268 << method_name <<
"]" << std::endl;
void triggerFed(const FEDRawDataCollection &, SiStripEventSummary &, const uint32_t &event)
trigger info
static FEDRawChannelUnpacker procRawModeUnpacker(const FEDChannel &channel)
virtual char const * what() const
void update(RawDigis &scope_mode, RawDigis &virgin_raw, RawDigis &proc_raw, Digis &zero_suppr, RawDigis &common_mode)
fill DetSetVectors using registries
std::vector< Registry > proc_work_registry_
void updateEventSummary(const sistrip::FEDBuffer &, SiStripEventSummary &)
sets the SiStripEventSummary -> not yet implemented for FEDBuffer class
static FEDZSChannelUnpacker zeroSuppressedModeUnpacker(const FEDChannel &channel)
std::vector< SiStripDigi > zs_work_digis_
digi collections
std::vector< Registry > scope_work_registry_
void cleanupWorkVectors()
method to clear registries and digi collections
std::vector< Registry > zs_work_registry_
registries
static FEDZSChannelUnpacker preMixRawModeUnpacker(const FEDChannel &channel)
static const uint32_t invalid32_
void locateStartOfFedBuffer(const uint16_t &fed_id, const FEDRawData &input, FEDRawData &output)
Removes any data appended prior to FED buffer and reorders 32-bit words if swapped.
RawToDigiUnpacker()
private default constructor
static FEDRawChannelUnpacker scopeModeUnpacker(const FEDChannel &channel)
static FEDRawChannelUnpacker virginRawModeUnpacker(const FEDChannel &channel)
static const char mlRawToDigi_[]
void push_back(T const &t)
static FEDBSChannelUnpacker zeroSuppressedLiteModeUnpacker(const FEDChannel &channel, uint16_t num_bits)
int16_t fedEventDumpFreq_
static FEDBSChannelUnpacker virginRawModeUnpacker(const FEDChannel &channel, uint16_t num_bits)
const FEDFEHeader * feHeader() const
void swap(DetSetVector &other)
size_t size() const
Lenght of the data buffer in bytes.
FEDDAQEventType daqEventType() const
private class to register start and end index of digis in a collection
static std::string const input
const sistrip::RunType & runType() const
std::vector< SiStripRawDigi > virgin_work_digis_
static const uint8_t PACKET_CODE_VIRGIN_RAW10
uint8_t sampleNumber() const
const uint32_t & bx() const
void readoutOrder(uint16_t &physical_order, uint16_t &readout_order)
order of strips
~RawToDigiUnpacker()
default constructor
uint16_t adcPreMix() const
uint32_t event_
other values
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
static void dumpRawData(uint16_t fed_id, const FEDRawData &, std::stringstream &)
dumps raw data to stdout (NB: payload is byte-swapped,headers/trailer are not).
void resize(size_t newsize)
int16_t fedBufferDumpFreq_
void commissioningInfo(const uint32_t *const buffer, const uint32_t &event)
const uint32_t & event() const
FedsConstIterRange fedIds() const
uint8_t sampleNumber() const
FEDHeaderType headerType() const
std::vector< SiStripRawDigi > scope_work_digis_
bool doFullCorruptBufferChecks_
A Digi for the silicon strip detector, containing both strip and adc information, and suitable for st...
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
static const uint8_t PACKET_CODE_VIRGIN_RAW8_TOPBOT
std::vector< SiStripRawDigi > proc_work_digis_
void handleException(std::string method_name, std::string extra_info="")
catches all possible exceptions and rethrows them as cms::Exceptions
void reserve(size_type n)
std::vector< SiStripRawDigi > cm_work_digis_
static const uint8_t PACKET_CODE_VIRGIN_RAW8_BOTBOT
static FEDZSChannelUnpacker zeroSuppressedLiteModeUnpacker(const FEDChannel &channel)
static const uint16_t FEDCH_PER_FEUNIT
uint16_t triggerFed() const
static const uint16_t invalid_
ConnsConstIterRange fedConnections(uint16_t fed_id) const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
const sistrip::FedReadoutMode & fedReadoutMode() const
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
void createDigis(const SiStripFedCabling &, const FEDRawDataCollection &, SiStripEventSummary &, RawDigis &scope_mode, RawDigis &virgin_raw, RawDigis &proc_raw, Digis &zero_suppr, DetIdCollection &, RawDigis &common_mode)
creates digis
std::vector< Registry > cm_work_registry_
volatile std::atomic< bool > shutdown_flag false
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
static const uint8_t PACKET_CODE_VIRGIN_RAW
std::vector< Registry > virgin_work_registry_
int16_t headerBytes_
configurables