File indexing completed on 2024-04-06 12:11:02
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), token_(consumes(pset.getParameter<edm::InputTag>("ProductLabel"))), cablingToken_(esConsumes()) {
0022 produces<DetIdVector>();
0023 }
0024
0025 ExcludedFEDListProducer::~ExcludedFEDListProducer() {}
0026
0027 void ExcludedFEDListProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0028 edm::ParameterSetDescription desc;
0029 desc.add<edm::InputTag>("ProductLabel", edm::InputTag("rawDataCollector"));
0030 descriptions.add("siStripExcludedFEDListProducer", desc);
0031 }
0032
0033 void ExcludedFEDListProducer::produce(edm::Event& event, const edm::EventSetup& es) {
0034 if (runNumber_ != event.run()) {
0035 runNumber_ = event.run();
0036
0037 auto const& cabling = es.getData(cablingToken_);
0038
0039 DetIdVector emptyDetIdVector;
0040 detids_.swap(emptyDetIdVector);
0041
0042 detids_.reserve(100);
0043
0044 edm::Handle<FEDRawDataCollection> buffers;
0045 event.getByToken(token_, buffers);
0046
0047
0048 for (auto ifed = cabling.fedIds().begin(); ifed != cabling.fedIds().end(); ifed++) {
0049
0050
0051
0052
0053 const FEDRawData& input = buffers->FEDData(static_cast<int>(*ifed));
0054
0055
0056 if (input.size() == 0) {
0057
0058
0059 auto conns = cabling.fedConnections(*ifed);
0060
0061 detids_.reserve(detids_.size() + conns.size());
0062 for (auto iconn = conns.begin(); iconn != conns.end(); ++iconn) {
0063 if (!iconn->detId() || iconn->detId() == sistrip::invalid32_)
0064 continue;
0065 detids_.push_back(iconn->detId());
0066 }
0067 }
0068 }
0069 }
0070
0071
0072
0073
0074
0075 event.put(std::make_unique<DetIdVector>(detids_));
0076 }
0077 }