File indexing completed on 2021-12-08 08:16:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021 #include "TProfile.h"
0022
0023
0024 #include "FWCore/Framework/interface/Frameworkfwd.h"
0025 #include "FWCore/Framework/interface/one/EDFilter.h"
0026
0027 #include "FWCore/Framework/interface/Event.h"
0028 #include "FWCore/Framework/interface/MakerMacros.h"
0029
0030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0031
0032 #include <vector>
0033 #include <set>
0034
0035 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0036
0037 #include "FWCore/Utilities/interface/InputTag.h"
0038
0039 #include "DataFormats/DetId/interface/DetId.h"
0040 #include "DataFormats/DetId/interface/DetIdCollection.h"
0041
0042 #include "DPGAnalysis/SiStripTools/interface/RunHistogramManager.h"
0043 #include "CommonTools/UtilAlgos/interface/DetIdSelector.h"
0044
0045
0046
0047
0048
0049 class FEDBadModuleFilter : public edm::one::EDFilter<edm::one::WatchRuns> {
0050 public:
0051 explicit FEDBadModuleFilter(const edm::ParameterSet&);
0052 ~FEDBadModuleFilter() override;
0053
0054 private:
0055 void beginJob() override;
0056 bool filter(edm::Event&, const edm::EventSetup&) override;
0057 void beginRun(const edm::Run&, const edm::EventSetup&) override;
0058 void endRun(const edm::Run&, const edm::EventSetup&) override {}
0059 void endJob() override;
0060
0061
0062
0063 edm::EDGetTokenT<DetIdCollection> m_digibadmodulecollectionToken;
0064 unsigned int m_modulethr;
0065 std::set<unsigned int> m_modules;
0066 DetIdSelector m_modsel;
0067 bool m_wantedhist;
0068 bool m_printlist;
0069 const unsigned int m_maxLS;
0070 const unsigned int m_LSfrac;
0071 RunHistogramManager m_rhm;
0072 TH1F** m_nbadrun;
0073 TProfile** m_nbadvsorbrun;
0074 };
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 FEDBadModuleFilter::FEDBadModuleFilter(const edm::ParameterSet& iConfig)
0088 : m_digibadmodulecollectionToken(consumes<DetIdCollection>(iConfig.getParameter<edm::InputTag>("collectionName"))),
0089 m_modulethr(iConfig.getParameter<unsigned int>("badModThr")),
0090 m_modsel(),
0091 m_wantedhist(iConfig.getUntrackedParameter<bool>("wantedHisto", false)),
0092 m_printlist(iConfig.getUntrackedParameter<bool>("printList", false)),
0093 m_maxLS(iConfig.getUntrackedParameter<unsigned int>("maxLSBeforeRebin", 100)),
0094 m_LSfrac(iConfig.getUntrackedParameter<unsigned int>("startingLSFraction", 4)),
0095 m_rhm(consumesCollector())
0096
0097 {
0098
0099
0100 if (m_wantedhist) {
0101 m_nbadrun = m_rhm.makeTH1F("nbadrun", "Number of bad channels", 500, -0.5, 499.5);
0102 m_nbadvsorbrun =
0103 m_rhm.makeTProfile("nbadvsorbrun", "Number of bad channels vs time", m_LSfrac * m_maxLS, 0, m_maxLS * 262144);
0104 }
0105
0106 std::vector<unsigned int> modules =
0107 iConfig.getUntrackedParameter<std::vector<unsigned int> >("moduleList", std::vector<unsigned int>());
0108 m_modules = std::set<unsigned int>(modules.begin(), modules.end());
0109
0110 if (iConfig.exists("moduleSelection")) {
0111 m_modsel = DetIdSelector(iConfig.getUntrackedParameter<edm::ParameterSet>("moduleSelection"));
0112 }
0113 }
0114
0115 FEDBadModuleFilter::~FEDBadModuleFilter() {
0116
0117
0118 }
0119
0120
0121
0122
0123
0124
0125 bool FEDBadModuleFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0126 using namespace edm;
0127
0128 Handle<DetIdCollection> badmodules;
0129 iEvent.getByToken(m_digibadmodulecollectionToken, badmodules);
0130
0131 unsigned int nbad = 0;
0132 if (m_printlist || !m_modules.empty() || m_modsel.isValid()) {
0133 for (DetIdCollection::const_iterator mod = badmodules->begin(); mod != badmodules->end(); ++mod) {
0134 if ((m_modules.empty() || m_modules.find(*mod) != m_modules.end()) &&
0135 (!m_modsel.isValid() || m_modsel.isSelected(*mod))) {
0136 ++nbad;
0137 if (m_printlist)
0138 edm::LogInfo("FEDBadModule") << *mod;
0139 }
0140 }
0141 } else {
0142 nbad = badmodules->size();
0143 }
0144
0145 if (m_wantedhist) {
0146 if (m_nbadvsorbrun && *m_nbadvsorbrun)
0147 (*m_nbadvsorbrun)->Fill(iEvent.orbitNumber(), nbad);
0148 if (m_nbadrun && *m_nbadrun)
0149 (*m_nbadrun)->Fill(nbad);
0150 }
0151
0152 return (nbad >= m_modulethr);
0153 }
0154
0155
0156 void FEDBadModuleFilter::beginJob() {}
0157
0158
0159 void FEDBadModuleFilter::endJob() {}
0160
0161 void FEDBadModuleFilter::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0162 if (m_wantedhist) {
0163 m_rhm.beginRun(iRun);
0164 if (*m_nbadvsorbrun) {
0165 (*m_nbadvsorbrun)->SetCanExtend(TH1::kXaxis);
0166 (*m_nbadvsorbrun)->GetXaxis()->SetTitle("time [Orb#]");
0167 (*m_nbadvsorbrun)->GetYaxis()->SetTitle("Bad Channels");
0168 }
0169 }
0170 }
0171
0172
0173 DEFINE_FWK_MODULE(FEDBadModuleFilter);