CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
sistrip::SpyEventMatcher Class Reference

#include <SiStripSpyEventMatcher.h>

Classes

class  CountersWrapper
 
class  EventKey
 
struct  MatchingOutput
 
class  SpyDataCollections
 

Public Types

typedef edm::EventID EventID
 
typedef std::set< EventIDSpyEventList
 

Public Member Functions

void getCollections (const edm::EventPrincipal &event, const uint32_t eventId, const uint8_t apvAddress, const SiStripFedCabling &cabling, MatchingOutput &matchingOutput)
 
void getMatchedCollections (const uint32_t eventId, const uint8_t apvAddress, const SpyEventList *matchingEvents, const SiStripFedCabling &cabling, SpyDataCollections &collectionsToCreate)
 
void initialize ()
 
const SpyEventListmatchesForEvent (const uint32_t eventId, const uint8_t apvAddress) const
 
 SpyEventMatcher (const edm::ParameterSet &config)
 
virtual ~SpyEventMatcher ()
 

Private Types

typedef std::vector< uint32_t > Counters
 
typedef boost::shared_ptr
< CountersWrapper
CountersPtr
 
typedef edm::VectorInputSource Source
 

Private Member Functions

void addNextEventToMap (const edm::EventPrincipal &nextSpyEvent)
 
std::unique_ptr< SourceconstructSource (const edm::ParameterSet &sourceConfig)
 
void operator() (const edm::EventPrincipal &event)
 

Static Private Member Functions

static void findMatchingFeds (const uint32_t eventId, const uint8_t apvAddress, CountersPtr totalEventCounters, CountersPtr l1aCounters, CountersPtr apvAddresses, std::set< uint16_t > &matchingFeds)
 
static CountersPtr getCounters (const edm::EventPrincipal &event, const edm::InputTag &tag, const bool mapKeyIsByFedID=true)
 
template<class T >
static const TgetProduct (const edm::EventPrincipal &event, const edm::InputTag &tag)
 
static void mergeMatchingData (const std::set< uint16_t > &matchingFeds, const FEDRawDataCollection &inputRawData, CountersPtr inputTotalEventCounters, CountersPtr inputL1ACounters, CountersPtr inputAPVAddresses, const edm::DetSetVector< SiStripRawDigi > *inputScopeDigis, const edm::DetSetVector< SiStripRawDigi > *inputPayloadDigis, const edm::DetSetVector< SiStripRawDigi > *inputReorderedDigis, const edm::DetSetVector< SiStripRawDigi > *inputVirginRawDigis, FEDRawDataCollection &outputRawData, std::vector< uint32_t > &outputTotalEventCounters, std::vector< uint32_t > &outputL1ACounters, std::vector< uint32_t > &outputAPVAddresses, std::vector< edm::DetSet< SiStripRawDigi > > *outputScopeDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputPayloadDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputReorderedDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputVirginRawDigisVector, const SiStripFedCabling &cabling)
 

Private Attributes

edm::InputTag apvAddressesTag_
 
uint32_t counterDiffMax_
 
std::map< EventKey, SpyEventListeventMatches_
 
std::unique_ptr
< edm::EventPrincipal
eventPrincipal_
 
edm::InputTag l1aCountersTag_
 
edm::InputTag payloadDigisTag_
 
std::unique_ptr
< edm::ProcessConfiguration
processConfiguration_
 
std::shared_ptr
< edm::ProductRegistry
productRegistry_
 
edm::InputTag rawDataTag_
 
edm::InputTag reorderedDigisTag_
 
edm::InputTag scopeDigisTag_
 
std::unique_ptr
< edm::VectorInputSource >
const 
source_
 
edm::InputTag totalEventCountersTag_
 
edm::InputTag virginRawDigisTag_
 

Static Private Attributes

static const char * mlLabel_ = "SpyEventMatcher"
 

Detailed Description

Definition at line 31 of file SiStripSpyEventMatcher.h.

Member Typedef Documentation

typedef std::vector<uint32_t> sistrip::SpyEventMatcher::Counters
private

Definition at line 101 of file SiStripSpyEventMatcher.h.

typedef boost::shared_ptr<CountersWrapper> sistrip::SpyEventMatcher::CountersPtr
private

Definition at line 119 of file SiStripSpyEventMatcher.h.

Definition at line 72 of file SiStripSpyEventMatcher.h.

Definition at line 122 of file SiStripSpyEventMatcher.h.

Definition at line 73 of file SiStripSpyEventMatcher.h.

Constructor & Destructor Documentation

sistrip::SpyEventMatcher::SpyEventMatcher ( const edm::ParameterSet config)

Definition at line 48 of file SiStripSpyEventMatcher.cc.

References edm::ParameterSet::emptyParameterSetID(), eventPrincipal_, processConfiguration_, productRegistry_, and source_.

49  : rawDataTag_(config.getParameter<edm::InputTag>("RawSpyDataTag")),
50  totalEventCountersTag_(config.getParameter<edm::InputTag>("SpyTotalEventCountersTag")),
51  l1aCountersTag_(config.getParameter<edm::InputTag>("SpyL1ACountersTag")),
52  apvAddressesTag_(config.getParameter<edm::InputTag>("SpyAPVAddressesTag")),
53  scopeDigisTag_(config.getParameter<edm::InputTag>("SpyScopeDigisTag")),
54  payloadDigisTag_(config.getParameter<edm::InputTag>("SpyPayloadDigisTag")),
55  reorderedDigisTag_(config.getParameter<edm::InputTag>("SpyReorderedDigisTag")),
56  virginRawDigisTag_(config.getParameter<edm::InputTag>("SpyVirginRawDigisTag")),
57  counterDiffMax_(config.getParameter<uint32_t>("CounterDiffMaxAllowed")),
62  {
63  // Use the empty parameter set for the parameter set ID of our "@MIXING" process.
65  productRegistry_->setFrozen();
66 
67  eventPrincipal_.reset(new edm::EventPrincipal(source_->productRegistry(),
68  std::make_shared<edm::BranchIDListHelper>(),
69  std::make_shared<edm::ThinnedAssociationsHelper>(),
71  nullptr));
72  }
T getParameter(std::string const &) const
std::string getPassID()
Definition: GetPassID.h:8
std::unique_ptr< edm::EventPrincipal > eventPrincipal_
std::unique_ptr< edm::ProcessConfiguration > processConfiguration_
std::unique_ptr< Source > constructSource(const edm::ParameterSet &sourceConfig)
std::shared_ptr< edm::ProductRegistry > productRegistry_
std::unique_ptr< edm::VectorInputSource > const source_
std::string getReleaseVersion()
static ParameterSetID emptyParameterSetID()
sistrip::SpyEventMatcher::~SpyEventMatcher ( )
virtual

Definition at line 46 of file SiStripSpyEventMatcher.cc.

46 {}

Member Function Documentation

void sistrip::SpyEventMatcher::addNextEventToMap ( const edm::EventPrincipal nextSpyEvent)
private

Definition at line 95 of file SiStripSpyEventMatcher.cc.

References apvAddressesTag_, counterDiffMax_, edm::EventID::event(), eventMatches_, getCounters(), edm::EventPrincipal::id(), relval_steps::key, l1aCountersTag_, LogDebug, mlLabel_, contentValuesCheck::ss, and totalEventCountersTag_.

Referenced by initialize().

96  {
97  edm::EventID spyEventId = nextSpyEvent.id();
98 
99  CountersPtr totalEventCounters = getCounters(nextSpyEvent,totalEventCountersTag_);
100  CountersPtr l1aCounters = getCounters(nextSpyEvent,l1aCountersTag_);
101  CountersPtr apvAddresses = getCounters(nextSpyEvent,apvAddressesTag_,false);
102  //loop over all FEDs. Maps should have same content and be in order so, avoid searches by iterating (and checking keys match)
103  //add all possible event keys to the map
104  std::vector<uint32_t>::const_iterator iTotalEventCount = totalEventCounters->begin();
105  std::vector<uint32_t>::const_iterator iL1ACount = l1aCounters->begin();
106  std::vector<uint32_t>::const_iterator iAPVAddress = apvAddresses->begin();
107  //for debug
108  std::map<EventKey,uint16_t> fedCounts;
109  unsigned int fedid = 0;
110  for (;
111  ( (iTotalEventCount != totalEventCounters->end()) && (iL1ACount != l1aCounters->end()) && (iAPVAddress != apvAddresses->end()) );
112  (++iTotalEventCount, ++iL1ACount, ++iAPVAddress, ++fedid)
113  ){
114  if (*iAPVAddress == 0) {
115  continue;
116  }
117 
118  if ( ((*iTotalEventCount) > (*iL1ACount) ) ||
119  ((*iL1ACount)-(*iTotalEventCount) > counterDiffMax_)
120  ) {
121  LogWarning(mlLabel_) << "Spy event " << spyEventId.event()
122  << " error in counter values for FED " << fedid
123  << ", totCount = " << *iTotalEventCount
124  << ", L1Acount = " << *iL1ACount
125  << std::endl;
126 
127  continue;
128  }
129 
130  for (uint32_t eventId = (*iTotalEventCount)+1; eventId <= (*iL1ACount)+1; ++eventId) {
131  EventKey key(eventId,*iAPVAddress);
132  eventMatches_[key].insert(spyEventId);
133  fedCounts[key]++;
134  }
135  }
136 
137  //for debug
138  std::ostringstream ss;
139  ss << "Spy event " << spyEventId.event() << " matches (eventID,apvAddress,nFEDs): ";
140  for (std::map<EventKey,uint16_t>::const_iterator iEventFEDCount = fedCounts.begin(); iEventFEDCount != fedCounts.end(); ++iEventFEDCount) {
141  ss << "(" << iEventFEDCount->first.eventId() << "," << uint16_t(iEventFEDCount->first.apvAddress()) << "," << iEventFEDCount->second << ") ";
142  }
143  LogDebug(mlLabel_) << ss.str();
144  }
#define LogDebug(id)
EventNumber_t event() const
Definition: EventID.h:41
boost::shared_ptr< CountersWrapper > CountersPtr
EventID const & id() const
static CountersPtr getCounters(const edm::EventPrincipal &event, const edm::InputTag &tag, const bool mapKeyIsByFedID=true)
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
std::map< EventKey, SpyEventList > eventMatches_
std::unique_ptr< SpyEventMatcher::Source > sistrip::SpyEventMatcher::constructSource ( const edm::ParameterSet sourceConfig)
private
void sistrip::SpyEventMatcher::findMatchingFeds ( const uint32_t  eventId,
const uint8_t  apvAddress,
SpyEventMatcher::CountersPtr  totalEventCounters,
SpyEventMatcher::CountersPtr  l1aCounters,
SpyEventMatcher::CountersPtr  apvAddresses,
std::set< uint16_t > &  matchingFeds 
)
staticprivate

Definition at line 238 of file SiStripSpyEventMatcher.cc.

Referenced by getCollections().

243  {
244  //loop over all FEDs. Maps should have same content and be in order so, avoid searches by iterating (and checking keys match)
245  std::vector<uint32_t>::const_iterator iTotalEventCount = totalEventCounters->begin();
246  std::vector<uint32_t>::const_iterator iL1ACount = l1aCounters->begin();
247  std::vector<uint32_t>::const_iterator iAPVAddress = apvAddresses->begin();
248  for (;
249  ( (iTotalEventCount != totalEventCounters->end()) && (iL1ACount != l1aCounters->end()) && (iAPVAddress != apvAddresses->end()) );
250  (++iTotalEventCount, ++iL1ACount, ++iAPVAddress)
251  ){
252  if (*iAPVAddress == 0) {
253  continue;
254  }
255  if ( (eventId > *iTotalEventCount) && (eventId <= (*iL1ACount)+1) && (*iAPVAddress == apvAddress) ) {
256  matchingFeds.insert(matchingFeds.end(),iTotalEventCount-totalEventCounters->begin());
257  }
258  }
259  }
void sistrip::SpyEventMatcher::getCollections ( const edm::EventPrincipal event,
const uint32_t  eventId,
const uint8_t  apvAddress,
const SiStripFedCabling cabling,
MatchingOutput matchingOutput 
)

Definition at line 165 of file SiStripSpyEventMatcher.cc.

References sistrip::SpyEventMatcher::MatchingOutput::alreadyMergedFeds_, apvAddressesTag_, event(), Exception, findMatchingFeds(), getCounters(), l1aCountersTag_, LogDebug, mergeMatchingData(), min(), mlLabel_, sistrip::SpyEventMatcher::MatchingOutput::outputAPVAddresses_, sistrip::SpyEventMatcher::MatchingOutput::outputL1ACounters_, sistrip::SpyEventMatcher::MatchingOutput::outputPayloadDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputRawData_, sistrip::SpyEventMatcher::MatchingOutput::outputReorderedDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputScopeDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputTotalEventCounters_, sistrip::SpyEventMatcher::MatchingOutput::outputVirginRawDigisVector_, payloadDigisTag_, rawDataTag_, reorderedDigisTag_, scopeDigisTag_, contentValuesCheck::ss, totalEventCountersTag_, and virginRawDigisTag_.

Referenced by getMatchedCollections().

167  {
168 
169  //read the input collections from the event
170  const FEDRawDataCollection* inputRawDataPtr = getProduct< FEDRawDataCollection >(event,rawDataTag_);
171  if (!inputRawDataPtr) {
172  throw cms::Exception(mlLabel_) << "Failed to get raw spy data with tag " << rawDataTag_ << " from spy event";
173  }
174  const FEDRawDataCollection& inputRawData = *inputRawDataPtr;
175  CountersPtr inputTotalEventCounters = getCounters(event,totalEventCountersTag_);
176  CountersPtr inputL1ACounters = getCounters(event,l1aCountersTag_);
177  CountersPtr inputAPVAddresses = getCounters(event,apvAddressesTag_,false);
178  const edm::DetSetVector<SiStripRawDigi>* inputScopeDigis = getProduct< edm::DetSetVector<SiStripRawDigi> >(event,scopeDigisTag_);
179  const edm::DetSetVector<SiStripRawDigi>* inputPayloadDigis = getProduct< edm::DetSetVector<SiStripRawDigi> >(event,payloadDigisTag_);
180  const edm::DetSetVector<SiStripRawDigi>* inputReorderedDigis = getProduct< edm::DetSetVector<SiStripRawDigi> >(event,reorderedDigisTag_);
181  const edm::DetSetVector<SiStripRawDigi>* inputVirginRawDigis = getProduct< edm::DetSetVector<SiStripRawDigi> >(event,virginRawDigisTag_);
182  //construct the output vectors if the digis were found and they do not exist
183  if (inputScopeDigis && !mo.outputScopeDigisVector_.get() ) mo.outputScopeDigisVector_.reset(new std::vector< edm::DetSet<SiStripRawDigi> >);
184  if (inputPayloadDigis && !mo.outputPayloadDigisVector_.get() ) mo.outputPayloadDigisVector_.reset(new std::vector< edm::DetSet<SiStripRawDigi> >);
185  if (inputReorderedDigis && !mo.outputReorderedDigisVector_.get() ) mo.outputReorderedDigisVector_.reset(new std::vector< edm::DetSet<SiStripRawDigi> >);
186  if (inputVirginRawDigis && !mo.outputVirginRawDigisVector_.get() ) mo.outputVirginRawDigisVector_.reset(new std::vector< edm::DetSet<SiStripRawDigi> >);
187  //find matching FEDs
188  std::set<uint16_t> matchingFeds;
189  findMatchingFeds(eventId,apvAddress,inputTotalEventCounters,inputL1ACounters,inputAPVAddresses,matchingFeds);
190  LogInfo(mlLabel_) << "Spy event " << event.id() << " has " << matchingFeds.size() << " matching FEDs";
191  std::ostringstream ss;
192  ss << "Matching FEDs for event " << event.id() << ": ";
193  for (std::set<uint16_t>::const_iterator iFedId = matchingFeds.begin(); iFedId != matchingFeds.end(); ++iFedId) {
194  ss << *iFedId << " ";
195  }
196  LogDebug(mlLabel_) << ss.str();
197  //check there are no duplicates
198  std::vector<uint16_t> duplicateFeds( std::min(mo.alreadyMergedFeds_.size(),matchingFeds.size()) );
199  std::vector<uint16_t>::iterator duplicatesBegin = duplicateFeds.begin();
200  std::vector<uint16_t>::iterator duplicatesEnd = std::set_intersection(mo.alreadyMergedFeds_.begin(),mo.alreadyMergedFeds_.end(),
201  matchingFeds.begin(),matchingFeds.end(),
202  duplicatesBegin);
203  if ( (duplicatesEnd-duplicatesBegin) != 0 ) {
204  std::ostringstream ss;
205  ss << "Found a match for FEDs ";
206  for (std::vector<uint16_t>::const_iterator iDup = duplicatesBegin; iDup != duplicatesEnd; ++iDup) {
207  ss << *iDup << " ";
208  }
209  ss << ". Output SetSetVectors will be unusable!";
210  LogError(mlLabel_) << ss.str();
211  }
212  //merge the matching data
213  mergeMatchingData(matchingFeds,inputRawData,inputTotalEventCounters,inputL1ACounters,inputAPVAddresses,
214  inputScopeDigis,inputPayloadDigis,inputReorderedDigis,inputVirginRawDigis,
215  mo.outputRawData_,mo.outputTotalEventCounters_,mo.outputL1ACounters_,mo.outputAPVAddresses_,
216  mo.outputScopeDigisVector_.get(),mo.outputPayloadDigisVector_.get(),
217  mo.outputReorderedDigisVector_.get(),mo.outputVirginRawDigisVector_.get(),
218  cabling);
219  mo.alreadyMergedFeds_.insert(matchingFeds.begin(),matchingFeds.end());
220  }
#define LogDebug(id)
static void findMatchingFeds(const uint32_t eventId, const uint8_t apvAddress, CountersPtr totalEventCounters, CountersPtr l1aCounters, CountersPtr apvAddresses, std::set< uint16_t > &matchingFeds)
boost::shared_ptr< CountersWrapper > CountersPtr
static CountersPtr getCounters(const edm::EventPrincipal &event, const edm::InputTag &tag, const bool mapKeyIsByFedID=true)
T min(T a, T b)
Definition: MathUtil.h:58
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
static void mergeMatchingData(const std::set< uint16_t > &matchingFeds, const FEDRawDataCollection &inputRawData, CountersPtr inputTotalEventCounters, CountersPtr inputL1ACounters, CountersPtr inputAPVAddresses, const edm::DetSetVector< SiStripRawDigi > *inputScopeDigis, const edm::DetSetVector< SiStripRawDigi > *inputPayloadDigis, const edm::DetSetVector< SiStripRawDigi > *inputReorderedDigis, const edm::DetSetVector< SiStripRawDigi > *inputVirginRawDigis, FEDRawDataCollection &outputRawData, std::vector< uint32_t > &outputTotalEventCounters, std::vector< uint32_t > &outputL1ACounters, std::vector< uint32_t > &outputAPVAddresses, std::vector< edm::DetSet< SiStripRawDigi > > *outputScopeDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputPayloadDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputReorderedDigisVector, std::vector< edm::DetSet< SiStripRawDigi > > *outputVirginRawDigisVector, const SiStripFedCabling &cabling)
SpyEventMatcher::CountersPtr sistrip::SpyEventMatcher::getCounters ( const edm::EventPrincipal event,
const edm::InputTag tag,
const bool  mapKeyIsByFedID = true 
)
staticprivate

Definition at line 348 of file SiStripSpyEventMatcher.cc.

References event(), Exception, sistrip::FED_ID_MAX, sistrip::SpyUtilities::fillFEDMajorities(), mlLabel_, and GlobalPosition_Frontier_DevDB_cff::tag.

Referenced by addNextEventToMap(), and getCollections().

349  {
350  const std::vector<uint32_t>* vectorFromEvent = getProduct< std::vector<uint32_t> >(event,tag);
351  if (vectorFromEvent) {
352  //vector is from event so, will be deleted when the event is destroyed (and not before)
353  return CountersPtr(new CountersWrapper(vectorFromEvent) );
354  } else {
355  const std::map<uint32_t,uint32_t>* mapFromEvent = getProduct< std::map<uint32_t,uint32_t> >(event,tag);
356  if (mapFromEvent) {
357  std::vector<uint32_t>* newVector = new std::vector<uint32_t>(FED_ID_MAX+1,0);
358  if (mapKeyIsByFedID) {
359  for (std::map<uint32_t,uint32_t>::const_iterator iIdValue = mapFromEvent->begin(); iIdValue != mapFromEvent->end(); ++iIdValue) {
360  newVector->at(iIdValue->first) = iIdValue->second;
361  }
362  } else {
363  SpyUtilities::fillFEDMajorities(*mapFromEvent,*newVector);
364  }
365 // std::cout << " -- Map " << tag << std::endl;
366 // for (uint32_t lIt= 0;
367 // lIt < newVector->size();
368 // lIt++) {
369 // std::cout << lIt << " " << newVector->at(lIt) << std::endl;
370 // }
371  //vector was allocated here so, will need to be deleted when finished with
372  CountersPtr newCountersPtr( new CountersWrapper(newVector,true) );
373  return newCountersPtr;
374  } else {
375  throw cms::Exception(mlLabel_) << "Unable to get product " << tag << " from spy event";
376  }
377  }
378  }
boost::shared_ptr< CountersWrapper > CountersPtr
static void fillFEDMajorities(const std::map< uint32_t, uint32_t > &channelValues, std::vector< uint32_t > &fedMajoritiesToFill)
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
static const uint16_t FED_ID_MAX
void sistrip::SpyEventMatcher::getMatchedCollections ( const uint32_t  eventId,
const uint8_t  apvAddress,
const SpyEventList matchingEvents,
const SiStripFedCabling cabling,
SpyDataCollections collectionsToCreate 
)

Definition at line 222 of file SiStripSpyEventMatcher.cc.

References eventPrincipal_, getCollections(), sistrip::SpyEventMatcher::MatchingOutput::outputAPVAddresses_, sistrip::SpyEventMatcher::MatchingOutput::outputL1ACounters_, sistrip::SpyEventMatcher::MatchingOutput::outputPayloadDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputRawData_, sistrip::SpyEventMatcher::MatchingOutput::outputReorderedDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputScopeDigisVector_, sistrip::SpyEventMatcher::MatchingOutput::outputTotalEventCounters_, sistrip::SpyEventMatcher::MatchingOutput::outputVirginRawDigisVector_, and source_.

225  {
226  if (!matchingEvents) return;
227  size_t fileNameHash = 0U;
228  FEDRawDataCollection outputRawData;
229  MatchingOutput mo(outputRawData);
230  source_->loopSpecified(*eventPrincipal_,fileNameHash,matchingEvents->begin(),matchingEvents->end(),boost::bind(&SpyEventMatcher::getCollections,this,_1,
231  eventId,apvAddress,boost::cref(cabling),boost::ref(mo)));
232  SpyDataCollections collections(mo.outputRawData_,mo.outputTotalEventCounters_,mo.outputL1ACounters_,mo.outputAPVAddresses_,
233  mo.outputScopeDigisVector_.get(),mo.outputPayloadDigisVector_.get(),
234  mo.outputReorderedDigisVector_.get(),mo.outputVirginRawDigisVector_.get());
235  collectionsToCreate = collections;
236  }
std::unique_ptr< edm::EventPrincipal > eventPrincipal_
void getCollections(const edm::EventPrincipal &event, const uint32_t eventId, const uint8_t apvAddress, const SiStripFedCabling &cabling, MatchingOutput &matchingOutput)
std::unique_ptr< edm::VectorInputSource > const source_
template<class T >
const T * sistrip::SpyEventMatcher::getProduct ( const edm::EventPrincipal event,
const edm::InputTag tag 
)
staticprivate

Definition at line 171 of file SiStripSpyEventMatcher.h.

References event(), LogDebug, mlLabel_, NULL, and GlobalPosition_Frontier_DevDB_cff::tag.

172  {
173  LogDebug(mlLabel_) << "Retrieving product " << tag;
174  // Note: The third argument to getProductByTag can be a nullptr
175  // as long as unscheduled execution of an EDProducer cannot occur
176  // as a result of this function call (and with the current implementation
177  // of SpyEventMatcher unscheduled execution never happens).
178  const std::shared_ptr< const edm::Wrapper<T> > productWrapper = edm::getProductByTag<T>(event,tag,nullptr);
179  if (productWrapper) {
180  return productWrapper->product();
181  } else {
182  return NULL;
183  }
184  }
#define LogDebug(id)
#define NULL
Definition: scimark2.h:8
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
void sistrip::SpyEventMatcher::initialize ( )

Definition at line 81 of file SiStripSpyEventMatcher.cc.

References addNextEventToMap(), eventMatches_, eventPrincipal_, LogDebug, bookConverter::max, mlLabel_, source_, and contentValuesCheck::ss.

82  {
83  size_t fileNameHash = 0U;
84  //add spy events to the map until there are none left
85  source_->loopOverEvents(*eventPrincipal_,fileNameHash,std::numeric_limits<size_t>::max(),boost::bind(&SpyEventMatcher::addNextEventToMap,this,_1));
86  //debug
87  std::ostringstream ss;
88  ss << "Events with possible matches (eventID,apvAddress): ";
89  for (std::map<EventKey,SpyEventList>::const_iterator iSpyEvent = eventMatches_.begin(); iSpyEvent != eventMatches_.end(); ++iSpyEvent) {
90  ss << "(" << iSpyEvent->first.eventId() << "," << uint16_t(iSpyEvent->first.apvAddress()) << ") ";
91  }
92  LogDebug(mlLabel_) << ss.str();
93  }
#define LogDebug(id)
std::unique_ptr< edm::EventPrincipal > eventPrincipal_
std::unique_ptr< edm::VectorInputSource > const source_
void addNextEventToMap(const edm::EventPrincipal &nextSpyEvent)
std::map< EventKey, SpyEventList > eventMatches_
const SpyEventMatcher::SpyEventList * sistrip::SpyEventMatcher::matchesForEvent ( const uint32_t  eventId,
const uint8_t  apvAddress 
) const

Definition at line 146 of file SiStripSpyEventMatcher.cc.

References eventMatches_, LogDebug, mlLabel_, NULL, and contentValuesCheck::ss.

147  {
148  EventKey eventKey(eventId,apvAddress);
149  std::map<EventKey,SpyEventList>::const_iterator iMatch = eventMatches_.find(eventKey);
150  if (iMatch == eventMatches_.end()) {
151  LogDebug(mlLabel_) << "No match found for event " << eventId << " with APV address " << uint16_t(apvAddress);
152  return NULL;
153  }
154  else {
155  std::ostringstream ss;
156  ss << "Found matches to event " << eventId << " with address " << uint16_t(apvAddress) << " in spy events ";
157  for (SpyEventList::const_iterator iMatchingSpyEvent = iMatch->second.begin(); iMatchingSpyEvent != iMatch->second.end(); ++iMatchingSpyEvent) {
158  ss << iMatchingSpyEvent->event() << " ";
159  }
160  LogInfo(mlLabel_) << ss.str();
161  return &(iMatch->second);
162  }
163  }
#define LogDebug(id)
#define NULL
Definition: scimark2.h:8
std::map< EventKey, SpyEventList > eventMatches_
void sistrip::SpyEventMatcher::mergeMatchingData ( const std::set< uint16_t > &  matchingFeds,
const FEDRawDataCollection inputRawData,
SpyEventMatcher::CountersPtr  inputTotalEventCounters,
SpyEventMatcher::CountersPtr  inputL1ACounters,
SpyEventMatcher::CountersPtr  inputAPVAddresses,
const edm::DetSetVector< SiStripRawDigi > *  inputScopeDigis,
const edm::DetSetVector< SiStripRawDigi > *  inputPayloadDigis,
const edm::DetSetVector< SiStripRawDigi > *  inputReorderedDigis,
const edm::DetSetVector< SiStripRawDigi > *  inputVirginRawDigis,
FEDRawDataCollection outputRawData,
std::vector< uint32_t > &  outputTotalEventCounters,
std::vector< uint32_t > &  outputL1ACounters,
std::vector< uint32_t > &  outputAPVAddresses,
std::vector< edm::DetSet< SiStripRawDigi > > *  outputScopeDigisVector,
std::vector< edm::DetSet< SiStripRawDigi > > *  outputPayloadDigisVector,
std::vector< edm::DetSet< SiStripRawDigi > > *  outputReorderedDigisVector,
std::vector< edm::DetSet< SiStripRawDigi > > *  outputVirginRawDigisVector,
const SiStripFedCabling cabling 
)
staticprivate

Definition at line 261 of file SiStripSpyEventMatcher.cc.

References FEDRawData::data(), edm::DetSetVector< T >::end(), sistrip::FEDCH_PER_FED, SiStripFedCabling::fedConnections(), FEDRawDataCollection::FEDData(), stage2MP7BufferRaw_cfi::fedId, SiStripFedKey::fedIndex(), edm::DetSetVector< T >::find(), LogDebug, mlLabel_, and FEDRawData::size().

Referenced by getCollections().

279  {
280  //reserve space in vectors
281  if (inputScopeDigis) {
282  outputScopeDigisVector->reserve(outputScopeDigisVector->size()+matchingFeds.size()*FEDCH_PER_FED); //maximum number of channels on matching FEDs
283  }
284  if (inputPayloadDigis) {
285  outputPayloadDigisVector->reserve(outputPayloadDigisVector->size()+matchingFeds.size()*FEDCH_PER_FED);
286  }
287  if (inputReorderedDigis) {
288  outputReorderedDigisVector->reserve(outputReorderedDigisVector->size()+matchingFeds.size()*FEDCH_PER_FED);
289  }
290  if (inputVirginRawDigis) {
291  outputVirginRawDigisVector->reserve(outputVirginRawDigisVector->size()+matchingFeds.size()*FEDCH_PER_FED/2); //maximum number of dets on matching FEDs
292  }
293  //copy the data into output collections
294  std::set<uint32_t> usedDetIds;
295  for (std::set<uint16_t>::const_iterator iFedId = matchingFeds.begin(); iFedId != matchingFeds.end(); ++iFedId) {
296  const uint32_t fedId = *iFedId;
297  LogDebug(mlLabel_) << "Copying data for FED " << fedId;
298  if (inputRawData.FEDData(fedId).size() && inputRawData.FEDData(fedId).data()) {
299  outputRawData.FEDData(fedId) = inputRawData.FEDData(fedId);
300  }
301  outputTotalEventCounters[fedId] = (*inputTotalEventCounters)[fedId];
302  outputL1ACounters[fedId] = (*inputL1ACounters)[fedId];
303  outputAPVAddresses[fedId] = (*inputAPVAddresses)[fedId];
304  for (uint8_t chan = 0; chan < FEDCH_PER_FED; ++chan) {
305  uint32_t fedIndex = SiStripFedKey::fedIndex(fedId,chan);
306  if (inputScopeDigis) {
307  edm::DetSetVector<SiStripRawDigi>::const_iterator iScopeDigis = inputScopeDigis->find(fedIndex);
308  if (iScopeDigis != inputScopeDigis->end()) {
309  outputScopeDigisVector->push_back(*iScopeDigis);
310  }
311  }
312  if (inputPayloadDigis) {
313  edm::DetSetVector<SiStripRawDigi>::const_iterator iPayloadDigis = inputPayloadDigis->find(fedIndex);
314  if (iPayloadDigis != inputPayloadDigis->end()) {
315  outputPayloadDigisVector->push_back(*iPayloadDigis);
316  }
317  }
318  if (inputReorderedDigis) {
319  edm::DetSetVector<SiStripRawDigi>::const_iterator iReorderedDigis = inputReorderedDigis->find(fedIndex);
320  if (iReorderedDigis != inputReorderedDigis->end()) {
321  outputReorderedDigisVector->push_back(*iReorderedDigis);
322  }
323  }
324  }
325  if (inputVirginRawDigis) {
326  std::set<uint32_t> fedDetIds;
327  auto conns = cabling.fedConnections(fedId);
328  for (auto iConn = conns.begin(); iConn != conns.end(); ++iConn) {
329  if (!iConn->isConnected()) continue;
330  const uint32_t detId = iConn->detId();
331  if (usedDetIds.find(detId) != usedDetIds.end()) {
332  LogError(mlLabel_) << "Duplicate DetID found " << detId << " skipping data for this Det from FED " << fedId;
333  continue;
334  }
335  fedDetIds.insert(iConn->detId());
336  }
337  usedDetIds.insert(fedDetIds.begin(),fedDetIds.end());
338  for (std::set<uint32_t>::const_iterator iDetId = fedDetIds.begin(); iDetId != fedDetIds.end(); ++iDetId) {
339  edm::DetSetVector<SiStripRawDigi>::const_iterator iVirginRawDigis = inputVirginRawDigis->find(*iDetId);
340  if (iVirginRawDigis != inputVirginRawDigis->end()) {
341  outputVirginRawDigisVector->push_back(*iVirginRawDigis);
342  }
343  }
344  }
345  }
346  }
#define LogDebug(id)
iterator find(det_id_type id)
Definition: DetSetVector.h:290
static uint32_t fedIndex(const uint16_t &fed_id, const uint16_t &fed_ch)
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:361
ConnsConstIterRange fedConnections(uint16_t fed_id) const
static const uint16_t FEDCH_PER_FED
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:104
void sistrip::SpyEventMatcher::operator() ( const edm::EventPrincipal event)
private

Member Data Documentation

edm::InputTag sistrip::SpyEventMatcher::apvAddressesTag_
private

Definition at line 158 of file SiStripSpyEventMatcher.h.

Referenced by addNextEventToMap(), and getCollections().

uint32_t sistrip::SpyEventMatcher::counterDiffMax_
private

Definition at line 163 of file SiStripSpyEventMatcher.h.

Referenced by addNextEventToMap().

std::map<EventKey,SpyEventList> sistrip::SpyEventMatcher::eventMatches_
private

Definition at line 154 of file SiStripSpyEventMatcher.h.

Referenced by addNextEventToMap(), initialize(), and matchesForEvent().

std::unique_ptr<edm::EventPrincipal> sistrip::SpyEventMatcher::eventPrincipal_
private

Definition at line 167 of file SiStripSpyEventMatcher.h.

Referenced by getMatchedCollections(), initialize(), and SpyEventMatcher().

edm::InputTag sistrip::SpyEventMatcher::l1aCountersTag_
private

Definition at line 157 of file SiStripSpyEventMatcher.h.

Referenced by addNextEventToMap(), and getCollections().

const char * sistrip::SpyEventMatcher::mlLabel_ = "SpyEventMatcher"
staticprivate
edm::InputTag sistrip::SpyEventMatcher::payloadDigisTag_
private

Definition at line 160 of file SiStripSpyEventMatcher.h.

Referenced by getCollections().

std::unique_ptr<edm::ProcessConfiguration> sistrip::SpyEventMatcher::processConfiguration_
private

Definition at line 166 of file SiStripSpyEventMatcher.h.

Referenced by SpyEventMatcher().

std::shared_ptr<edm::ProductRegistry> sistrip::SpyEventMatcher::productRegistry_
private

Definition at line 164 of file SiStripSpyEventMatcher.h.

Referenced by constructSource(), and SpyEventMatcher().

edm::InputTag sistrip::SpyEventMatcher::rawDataTag_
private

Definition at line 155 of file SiStripSpyEventMatcher.h.

Referenced by getCollections().

edm::InputTag sistrip::SpyEventMatcher::reorderedDigisTag_
private

Definition at line 161 of file SiStripSpyEventMatcher.h.

Referenced by getCollections().

edm::InputTag sistrip::SpyEventMatcher::scopeDigisTag_
private

Definition at line 159 of file SiStripSpyEventMatcher.h.

Referenced by getCollections().

std::unique_ptr<edm::VectorInputSource> const sistrip::SpyEventMatcher::source_
private
edm::InputTag sistrip::SpyEventMatcher::totalEventCountersTag_
private

Definition at line 156 of file SiStripSpyEventMatcher.h.

Referenced by addNextEventToMap(), and getCollections().

edm::InputTag sistrip::SpyEventMatcher::virginRawDigisTag_
private

Definition at line 162 of file SiStripSpyEventMatcher.h.

Referenced by getCollections().