File indexing completed on 2024-04-06 12:02:01
0001 #include <stdexcept>
0002 #include <string>
0003 #include <iostream>
0004 #include <fstream>
0005 #include <string>
0006 #include <vector>
0007 #include <bitset>
0008
0009 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0010 #include "FWCore/Framework/interface/Event.h"
0011 #include "FWCore/Framework/interface/ESHandle.h"
0012 #include "FWCore/Framework/interface/MakerMacros.h"
0013
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/Utilities/interface/ESGetToken.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018
0019 #include "CondFormats/CSCObjects/interface/CSCBadChambers.h"
0020 #include "CondFormats/DataRecord/interface/CSCBadChambersRcd.h"
0021 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0022 #include "DataFormats/MuonDetId/interface/CSCIndexer.h"
0023
0024 namespace edmtest {
0025 class CSCReadBadChambersAnalyzer : public edm::one::EDAnalyzer<> {
0026 public:
0027 explicit CSCReadBadChambersAnalyzer(edm::ParameterSet const& ps)
0028 : chambersToken_{esConsumes()},
0029 outputToFile_(ps.getParameter<bool>("outputToFile")),
0030 readBadChambers_(ps.getParameter<bool>("readBadChambers")),
0031 me42installed_(ps.getParameter<bool>("me42installed")) {}
0032
0033 ~CSCReadBadChambersAnalyzer() override {}
0034
0035 void analyze(const edm::Event& e, const edm::EventSetup& c) override;
0036
0037 private:
0038 const edm::ESGetToken<CSCBadChambers, CSCBadChambersRcd> chambersToken_;
0039 const bool outputToFile_;
0040 const bool readBadChambers_;
0041 const bool me42installed_;
0042 };
0043
0044 void CSCReadBadChambersAnalyzer::analyze(const edm::Event& e, const edm::EventSetup& context) {
0045 using namespace edm::eventsetup;
0046
0047 edm::LogSystem log("CSCBadChambers");
0048
0049 int counter = 0;
0050 log << " RUN# " << e.id().run() << std::endl;
0051 log << " EVENT# " << e.id().event() << std::endl;
0052
0053 auto theBadChambers = &context.getData(chambersToken_);
0054
0055 CSCIndexer indexer;
0056
0057 log << "Bad Chambers:" << std::endl;
0058
0059 int nbad = theBadChambers->numberOfChambers();
0060 log << "No. in list = " << nbad << std::endl;
0061
0062
0063
0064 int countbad = 0;
0065 int countgood = 0;
0066
0067
0068
0069 int lastRing = 1;
0070 if (me42installed_)
0071 lastRing = 2;
0072 int totalc = indexer.startChamberIndexInEndcap(2, 4, lastRing) + indexer.chambersInRingOfStation(4, lastRing);
0073
0074 for (int indexc = 1; indexc != totalc; ++indexc) {
0075 counter++;
0076
0077 CSCDetId id = indexer.detIdFromChamberIndex(indexc);
0078 bool bbad = theBadChambers->isInBadChamber(id);
0079 std::string bbads = "LIVE";
0080 if (bbad) {
0081 bbads = "DEAD";
0082 ++countbad;
0083 } else {
0084 ++countgood;
0085 }
0086 log << counter << " " << indexc << " " << id << " In bad list? " << bbads << std::endl;
0087 }
0088
0089 log << "Total number of chambers = " << counter << std::endl;
0090 log << "Total number of good chambers = " << countgood << std::endl;
0091 log << "Total number of bad chambers = " << countbad << std::endl;
0092
0093 if (outputToFile_) {
0094 std::ofstream BadChamberFile("dbBadChamber.dat", std::ios::app);
0095 std::vector<int> badChambers = theBadChambers->container();
0096 counter = 0;
0097 std::vector<int>::const_iterator itcham;
0098
0099 for (itcham = badChambers.begin(); itcham != badChambers.end(); ++itcham) {
0100 counter++;
0101 BadChamberFile << counter << " " << *itcham << std::endl;
0102 }
0103 }
0104 }
0105
0106 DEFINE_FWK_MODULE(CSCReadBadChambersAnalyzer);
0107 }