Back to home page

Project CMSSW displayed by LXR

 
 

    


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       // Reserve space in bad module list
0042       detids_.reserve(100);
0043 
0044       edm::Handle<FEDRawDataCollection> buffers;
0045       event.getByToken(token_, buffers);
0046 
0047       // Retrieve FED ids from cabling map and iterate through
0048       for (auto ifed = cabling.fedIds().begin(); ifed != cabling.fedIds().end(); ifed++) {
0049         // ignore trigger FED
0050         // if ( *ifed == triggerFedId_ ) { continue; }
0051 
0052         // Retrieve FED raw data for given FED
0053         const FEDRawData& input = buffers->FEDData(static_cast<int>(*ifed));
0054         // The FEDData contains a vector<unsigned char>. Check the size of this vector:
0055 
0056         if (input.size() == 0) {
0057           // std::cout << "Input size == 0 for FED number " << static_cast<int>(*ifed) << std::endl;
0058           // get the cabling connections for this FED
0059           auto conns = cabling.fedConnections(*ifed);
0060           // Mark FED modules as bad
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());  //@@ Possible multiple entries
0066           }
0067         }
0068       }
0069     }
0070 
0071     // for( unsigned int it = 0; it < detids->size(); ++it ) {
0072     //   std::cout << "detId = " << (*detids)[it]() << std::endl;
0073     // }
0074 
0075     event.put(std::make_unique<DetIdVector>(detids_));
0076   }
0077 }  // namespace sistrip