File indexing completed on 2023-03-17 10:42:09
0001 #ifndef _CSCBADCHAMBERSCONDITIONS_H
0002 #define _CSCBADCHAMBERSCONDITIONS_H
0003
0004 #include "FWCore/Framework/interface/ESHandle.h"
0005 #include "FWCore/Framework/interface/ESProducer.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "FWCore/Framework/interface/EventSetup.h"
0008 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
0009 #include "FWCore/Framework/interface/Frameworkfwd.h"
0010 #include "FWCore/Framework/interface/MakerMacros.h"
0011 #include "FWCore/Framework/interface/SourceFactory.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include <cmath>
0014 #include <memory>
0015
0016 #include "CondFormats/CSCObjects/interface/CSCBadChambers.h"
0017 #include "CondFormats/DataRecord/interface/CSCBadChambersRcd.h"
0018 #include <DataFormats/MuonDetId/interface/CSCDetId.h>
0019
0020 class CSCBadChambersConditions : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder {
0021 public:
0022 CSCBadChambersConditions(const edm::ParameterSet &);
0023 ~CSCBadChambersConditions() override;
0024
0025 inline static CSCBadChambers *prefillBadChambers();
0026
0027 typedef std::unique_ptr<CSCBadChambers> ReturnType;
0028
0029 ReturnType produceBadChambers(const CSCBadChambersRcd &);
0030
0031 private:
0032
0033 void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &,
0034 const edm::IOVSyncValue &,
0035 edm::ValidityInterval &) override;
0036 CSCBadChambers *cndbBadChambers;
0037 };
0038
0039 #include <fstream>
0040 #include <iostream>
0041 #include <vector>
0042
0043
0044 inline CSCBadChambers *CSCBadChambersConditions::prefillBadChambers() {
0045
0046
0047
0048 int new_chambers;
0049 std::vector<int> new_badchambers;
0050 int old_chamber = -1;
0051 int new_nrlines;
0052 new_nrlines = 0;
0053
0054 std::ifstream newdata;
0055
0056 newdata.open("badchambers.dat", std::ios::in);
0057 if (!newdata) {
0058 std::cerr << "Error: badchambers.dat -> no such file!" << std::endl;
0059 exit(1);
0060 }
0061
0062 while (!newdata.eof()) {
0063 newdata >> new_chambers;
0064 if (new_chambers != old_chamber) {
0065 new_badchambers.push_back(new_chambers);
0066 std::cout << new_chambers << std::endl;
0067 ++new_nrlines;
0068 }
0069 old_chamber = new_chambers;
0070 }
0071 newdata.close();
0072
0073 CSCBadChambers *cndbbadchambers = new CSCBadChambers(new_nrlines, new_badchambers);
0074
0075
0076
0077 return cndbbadchambers;
0078 }
0079
0080 #endif