2 #ifdef SiStripMonitorHardware_BuildEventMatchingCode
37 : eventId_(eventId), apvAddress_(apvAddress) {}
40 : outputRawData_(outputRawData),
67 std::make_shared<edm::BranchIDListHelper>(),
68 std::make_shared<edm::ThinnedAssociationsHelper>(),
80 size_t fileNameHash = 0
U;
86 [
this](
auto const& iE,
auto const&) {
94 std::ostringstream
ss;
95 ss <<
"Events with possible matches (eventID,apvAddress): ";
96 for (std::map<EventKey, SpyEventList>::const_iterator iSpyEvent =
eventMatches_.begin();
99 ss <<
"(" << iSpyEvent->first.eventId() <<
"," << uint16_t(iSpyEvent->first.apvAddress()) <<
") ";
112 std::vector<uint32_t>::const_iterator iTotalEventCount = totalEventCounters->begin();
113 std::vector<uint32_t>::const_iterator iL1ACount = l1aCounters->begin();
114 std::vector<uint32_t>::const_iterator iAPVAddress = apvAddresses->begin();
116 std::map<EventKey, uint16_t> fedCounts;
117 unsigned int fedid = 0;
118 for (; ((iTotalEventCount != totalEventCounters->end()) && (iL1ACount != l1aCounters->end()) &&
119 (iAPVAddress != apvAddresses->end()));
120 (++iTotalEventCount, ++iL1ACount, ++iAPVAddress, ++
fedid)) {
121 if (*iAPVAddress == 0) {
125 if (((*iTotalEventCount) > (*iL1ACount)) || ((*iL1ACount) - (*iTotalEventCount) >
counterDiffMax_)) {
127 <<
", totCount = " << *iTotalEventCount <<
", L1Acount = " << *iL1ACount << std::endl;
132 for (uint32_t eventId = (*iTotalEventCount) + 1; eventId <= (*iL1ACount) + 1; ++eventId) {
140 std::ostringstream
ss;
141 ss <<
"Spy event " << spyEventId.
event() <<
" matches (eventID,apvAddress,nFEDs): ";
142 for (std::map<EventKey, uint16_t>::const_iterator iEventFEDCount = fedCounts.begin();
143 iEventFEDCount != fedCounts.end();
145 ss <<
"(" << iEventFEDCount->first.eventId() <<
"," << uint16_t(iEventFEDCount->first.apvAddress()) <<
","
146 << iEventFEDCount->second <<
") ";
152 const uint8_t apvAddress)
const {
153 EventKey eventKey(eventId, apvAddress);
154 std::map<EventKey, SpyEventList>::const_iterator iMatch =
eventMatches_.find(eventKey);
156 LogDebug(
mlLabel_) <<
"No match found for event " << eventId <<
" with APV address " << uint16_t(apvAddress);
159 std::ostringstream
ss;
160 ss <<
"Found matches to event " << eventId <<
" with address " << uint16_t(apvAddress) <<
" in spy events ";
161 for (SpyEventList::const_iterator iMatchingSpyEvent = iMatch->second.begin();
162 iMatchingSpyEvent != iMatch->second.end();
163 ++iMatchingSpyEvent) {
164 ss << iMatchingSpyEvent->event() <<
" ";
167 return &(iMatch->second);
172 const uint32_t eventId,
173 const uint8_t apvAddress,
178 if (!inputRawDataPtr) {
203 std::set<uint16_t> matchingFeds;
204 findMatchingFeds(eventId, apvAddress, inputTotalEventCounters, inputL1ACounters, inputAPVAddresses, matchingFeds);
205 LogInfo(
mlLabel_) <<
"Spy event " <<
event.id() <<
" has " << matchingFeds.size() <<
" matching FEDs";
206 std::ostringstream
ss;
207 ss <<
"Matching FEDs for event " <<
event.id() <<
": ";
208 for (std::set<uint16_t>::const_iterator iFedId = matchingFeds.begin(); iFedId != matchingFeds.end(); ++iFedId) {
209 ss << *iFedId <<
" ";
214 std::vector<uint16_t>::iterator duplicatesBegin = duplicateFeds.begin();
215 std::vector<uint16_t>::iterator duplicatesEnd = std::set_intersection(mo.
alreadyMergedFeds_.begin(),
217 matchingFeds.begin(),
220 if ((duplicatesEnd - duplicatesBegin) != 0) {
221 std::ostringstream
ss;
222 ss <<
"Found a match for FEDs ";
223 for (std::vector<uint16_t>::const_iterator iDup = duplicatesBegin; iDup != duplicatesEnd; ++iDup) {
226 ss <<
". Output SetSetVectors will be unusable!";
232 inputTotalEventCounters,
252 const uint8_t apvAddress,
258 size_t fileNameHash = 0
U;
264 matchingEvents->begin(),
265 matchingEvents->end(),
266 [&](
auto const& iE,
auto const&) { this->
getCollections(iE, eventId, apvAddress, cabling, mo); });
278 const uint8_t apvAddress,
282 std::set<uint16_t>& matchingFeds) {
284 std::vector<uint32_t>::const_iterator iTotalEventCount = totalEventCounters->begin();
285 std::vector<uint32_t>::const_iterator iL1ACount = l1aCounters->begin();
286 std::vector<uint32_t>::const_iterator iAPVAddress = apvAddresses->begin();
287 for (; ((iTotalEventCount != totalEventCounters->end()) && (iL1ACount != l1aCounters->end()) &&
288 (iAPVAddress != apvAddresses->end()));
289 (++iTotalEventCount, ++iL1ACount, ++iAPVAddress)) {
290 if (*iAPVAddress == 0) {
293 if ((eventId > *iTotalEventCount) && (eventId <= (*iL1ACount) + 1) && (*iAPVAddress == apvAddress)) {
294 matchingFeds.insert(matchingFeds.end(), iTotalEventCount - totalEventCounters->begin());
309 std::vector<uint32_t>& outputTotalEventCounters,
310 std::vector<uint32_t>& outputL1ACounters,
311 std::vector<uint32_t>& outputAPVAddresses,
318 if (inputScopeDigis) {
319 outputScopeDigisVector->reserve(outputScopeDigisVector->size() +
320 matchingFeds.size() *
323 if (inputPayloadDigis) {
324 outputPayloadDigisVector->reserve(outputPayloadDigisVector->size() + matchingFeds.size() *
FEDCH_PER_FED);
326 if (inputReorderedDigis) {
327 outputReorderedDigisVector->reserve(outputReorderedDigisVector->size() + matchingFeds.size() *
FEDCH_PER_FED);
329 if (inputVirginRawDigis) {
330 outputVirginRawDigisVector->reserve(outputVirginRawDigisVector->size() +
335 std::set<uint32_t> usedDetIds;
336 for (std::set<uint16_t>::const_iterator iFedId = matchingFeds.begin(); iFedId != matchingFeds.end(); ++iFedId) {
337 const uint32_t
fedId = *iFedId;
342 outputTotalEventCounters[
fedId] = (*inputTotalEventCounters)[
fedId];
343 outputL1ACounters[
fedId] = (*inputL1ACounters)[
fedId];
344 outputAPVAddresses[
fedId] = (*inputAPVAddresses)[
fedId];
348 if (inputScopeDigis) {
350 if (iScopeDigis != inputScopeDigis->
end()) {
351 outputScopeDigisVector->push_back(*iScopeDigis);
354 if (inputPayloadDigis) {
356 if (iPayloadDigis != inputPayloadDigis->
end()) {
357 outputPayloadDigisVector->push_back(*iPayloadDigis);
360 if (inputReorderedDigis) {
362 if (iReorderedDigis != inputReorderedDigis->
end()) {
363 outputReorderedDigisVector->push_back(*iReorderedDigis);
367 if (inputVirginRawDigis) {
368 std::set<uint32_t> fedDetIds;
370 for (
auto iConn = conns.begin(); iConn != conns.end(); ++iConn) {
371 if (!iConn->isConnected())
373 const uint32_t detId = iConn->detId();
374 if (usedDetIds.find(detId) != usedDetIds.end()) {
375 LogError(
mlLabel_) <<
"Duplicate DetID found " << detId <<
" skipping data for this Det from FED " <<
fedId;
378 fedDetIds.insert(iConn->detId());
380 usedDetIds.insert(fedDetIds.begin(), fedDetIds.end());
381 for (std::set<uint32_t>::const_iterator iDetId = fedDetIds.begin(); iDetId != fedDetIds.end(); ++iDetId) {
383 if (iVirginRawDigis != inputVirginRawDigis->
end()) {
384 outputVirginRawDigisVector->push_back(*iVirginRawDigis);
393 const bool mapKeyIsByFedID) {
394 const std::vector<uint32_t>* vectorFromEvent = getProduct<std::vector<uint32_t> >(
event,
tag);
395 if (vectorFromEvent) {
397 return std::make_shared<CountersWrapper>(vectorFromEvent);
399 const std::map<uint32_t, uint32_t>* mapFromEvent = getProduct<std::map<uint32_t, uint32_t> >(
event,
tag);
401 std::vector<uint32_t>* newVector =
new std::vector<uint32_t>(
FED_ID_MAX + 1, 0);
402 if (mapKeyIsByFedID) {
403 for (std::map<uint32_t, uint32_t>::const_iterator iIdValue = mapFromEvent->begin();
404 iIdValue != mapFromEvent->end();
406 newVector->at(iIdValue->first) = iIdValue->second;
419 return newCountersPtr;
428 std::vector<uint32_t>& theTotalEventCounters,
429 std::vector<uint32_t>& theL1ACounters,
430 std::vector<uint32_t>& theAPVAddresses,
436 totalEventCounters(new
std::vector<uint32_t>),
437 l1aCounters(new
std::vector<uint32_t>),
438 apvAddresses(new
std::vector<uint32_t>),
439 scopeDigis(theScopeDigisVector ? new
edm::DetSetVector<
SiStripRawDigi>(*theScopeDigisVector) : nullptr),
440 payloadDigis(thePayloadDigisVector ? new
edm::DetSetVector<
SiStripRawDigi>(*thePayloadDigisVector) : nullptr),
441 reorderedDigis(theReorderedDigisVector ? new
edm::DetSetVector<
SiStripRawDigi>(*theReorderedDigisVector)
443 virginRawDigis(theVirginRawDigisVector ? new
edm::DetSetVector<
SiStripRawDigi>(*theVirginRawDigisVector)
453 totalEventCounters(),
462 : pConst(theCounters),
p(nullptr), deleteP(
false) {}
465 : pConst(theCounters),
p(theCounters), deleteP(takeOwnership) {}
474 #endif //SiStripMonitorHardware_BuildEventMatchingCode