File indexing completed on 2023-08-27 23:16:46
0001 #include "EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.h"
0002 #include "DataFormats/Common/interface/DetSet.h"
0003 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0004 #include "DataFormats/SiStripCommon/interface/SiStripConstants.h"
0005 #include "DataFormats/SiStripCommon/interface/SiStripEventSummary.h"
0006 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
0007 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
0008 #include "EventFilter/SiStripRawToDigi/interface/TFHeaderDescription.h"
0009 #include "FWCore/Utilities/interface/Exception.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0013 #include <iostream>
0014 #include <sstream>
0015 #include <iomanip>
0016 #include <ext/algorithm>
0017
0018 namespace sistrip {
0019
0020 ExcludedFEDListProducer::ExcludedFEDListProducer(const edm::ParameterSet& pset)
0021 : runNumber_(0),
0022 cacheId_(0),
0023 cabling_(nullptr),
0024 token_(consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("ProductLabel"))),
0025 cablingToken_(esConsumes<SiStripFedCabling, SiStripFedCablingRcd, edm::Transition::BeginRun>()) {
0026 produces<DetIdVector>();
0027 }
0028
0029 ExcludedFEDListProducer::~ExcludedFEDListProducer() {}
0030
0031 void ExcludedFEDListProducer::beginRun(const edm::Run& run, const edm::EventSetup& es) {
0032 uint32_t cacheId = es.get<SiStripFedCablingRcd>().cacheIdentifier();
0033
0034 if (cacheId_ != cacheId) {
0035 cacheId_ = cacheId;
0036
0037 edm::ESHandle<SiStripFedCabling> c = es.getHandle(cablingToken_);
0038 cabling_ = c.product();
0039 }
0040 }
0041
0042 void ExcludedFEDListProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0043 edm::ParameterSetDescription desc;
0044 desc.add<edm::InputTag>("ProductLabel", edm::InputTag("rawDataCollector"));
0045 descriptions.add("siStripExcludedFEDListProducer", desc);
0046 }
0047
0048 void ExcludedFEDListProducer::produce(edm::Event& event, const edm::EventSetup& es) {
0049 if (runNumber_ != event.run()) {
0050 runNumber_ = event.run();
0051
0052 DetIdVector emptyDetIdVector;
0053 detids_.swap(emptyDetIdVector);
0054
0055 detids_.reserve(100);
0056
0057 edm::Handle<FEDRawDataCollection> buffers;
0058 event.getByToken(token_, buffers);
0059
0060
0061 for (auto ifed = cabling_->fedIds().begin(); ifed != cabling_->fedIds().end(); ifed++) {
0062
0063
0064
0065
0066 const FEDRawData& input = buffers->FEDData(static_cast<int>(*ifed));
0067
0068
0069 if (input.size() == 0) {
0070
0071
0072 auto conns = cabling_->fedConnections(*ifed);
0073
0074 detids_.reserve(detids_.size() + conns.size());
0075 for (auto iconn = conns.begin(); iconn != conns.end(); ++iconn) {
0076 if (!iconn->detId() || iconn->detId() == sistrip::invalid32_)
0077 continue;
0078 detids_.push_back(iconn->detId());
0079 }
0080 }
0081 }
0082 }
0083
0084
0085
0086
0087
0088 event.put(std::make_unique<DetIdVector>(detids_));
0089 }
0090 }