CMS 3D CMS Logo

ExcludedFEDListProducer.cc
Go to the documentation of this file.
17 #include <iostream>
18 #include <sstream>
19 #include <iomanip>
20 #include <ext/algorithm>
21 
22 namespace sistrip {
23 
25  : runNumber_(0)
26  , cacheId_(0)
27  , cabling_(nullptr)
28  , token_ ( consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("ProductLabel")) )
29  {
30  produces<DetIdCollection>();
31  }
32 
34  {
35  }
36 
37 
39  {
40  uint32_t cacheId = es.get<SiStripFedCablingRcd>().cacheIdentifier();
41 
42  if ( cacheId_ != cacheId ) {
43 
44  cacheId_ = cacheId;
45 
47  es.get<SiStripFedCablingRcd>().get( c );
48  cabling_ = c.product();
49  }
50  }
51 
54  desc.add<edm::InputTag>("ProductLabel",edm::InputTag("rawDataCollector"));
55  descriptions.add("siStripExcludedFEDListProducer",desc);
56  }
57 
59  {
60  if( runNumber_ != event.run() ) {
61 
62  runNumber_ = event.run();
63 
64  DetIdCollection emptyDetIdCollection;
65  detids_.swap(emptyDetIdCollection);
66  // Reserve space in bad module list
67  detids_.reserve(100);
68 
70  event.getByToken( token_, buffers );
71 
72  // Retrieve FED ids from cabling map and iterate through
73  for (auto ifed = cabling_->fedIds().begin() ; ifed != cabling_->fedIds().end(); ifed++ ) {
74 
75  // ignore trigger FED
76  // if ( *ifed == triggerFedId_ ) { continue; }
77 
78  // Retrieve FED raw data for given FED
79  const FEDRawData& input = buffers->FEDData( static_cast<int>(*ifed) );
80  // The FEDData contains a vector<unsigned char>. Check the size of this vector:
81 
82  if( input.size() == 0 ) {
83  // std::cout << "Input size == 0 for FED number " << static_cast<int>(*ifed) << std::endl;
84  // get the cabling connections for this FED
85  auto conns = cabling_->fedConnections(*ifed);
86  // Mark FED modules as bad
87  detids_.reserve(detids_.size()+conns.size());
88  for (auto iconn = conns.begin() ; iconn != conns.end(); ++iconn ) {
89  if ( !iconn->detId() || iconn->detId() == sistrip::invalid32_ ) continue;
90  detids_.push_back(iconn->detId()); //@@ Possible multiple entries
91  }
92  }
93  }
94  }
95 
96  // for( unsigned int it = 0; it < detids->size(); ++it ) {
97  // std::cout << "detId = " << (*detids)[it]() << std::endl;
98  // }
99 
100  event.put(std::make_unique<DetIdCollection>(detids_));
101  }
102 }
static const char runNumber_[]
size_type size() const
Definition: EDCollection.h:97
void produce(edm::Event &event, const edm::EventSetup &es) override
static const uint32_t invalid32_
Definition: Constants.h:15
void push_back(T const &t)
Definition: EDCollection.h:67
#define nullptr
const edm::EDGetTokenT< FEDRawDataCollection > token_
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
sistrip classes
static std::string const input
Definition: EdmProvDump.cc:44
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ExcludedFEDListProducer(const edm::ParameterSet &pset)
constructor
FedsConstIterRange fedIds() const
RunNumber_t run() const
Definition: Event.h:108
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void reserve(size_type n)
Definition: EDCollection.h:111
void beginRun(const edm::Run &run, const edm::EventSetup &es) override
const T & get() const
Definition: EventSetup.h:59
void add(std::string const &label, ParameterSetDescription const &psetDescription)
ConnsConstIterRange fedConnections(uint16_t fed_id) const
HLT enums.
T const * product() const
Definition: ESHandle.h:86
~ExcludedFEDListProducer() override
default constructor
void swap(EDCollection< T > &other)
Definition: EDCollection.h:74
Definition: event.py:1
Definition: Run.h:43