File indexing completed on 2023-10-25 09:37:58
0001 #include <cstdlib>
0002 #include <iostream>
0003 #include <fstream>
0004 #include <vector>
0005
0006 #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h"
0007 #include "CondFormats/HcalObjects/interface/HcalGains.h"
0008 #include "Geometry/CaloTopology/interface/HcalTopology.h"
0009 #include "FWCore/Framework/interface/Frameworkfwd.h"
0010 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0011 #include "FWCore/Framework/interface/Event.h"
0012 #include "FWCore/Framework/interface/MakerMacros.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "Geometry/Records/interface/HcalRecNumberingRecord.h"
0015
0016 class scaleGains : public edm::one::EDAnalyzer<edm::one::WatchRuns> {
0017 public:
0018 explicit scaleGains(const edm::ParameterSet&);
0019 ~scaleGains() override;
0020
0021 private:
0022 void beginRun(edm::Run const& iEvent, edm::EventSetup const&) override {}
0023 void analyze(edm::Event const&, edm::EventSetup const&) override;
0024 void endRun(edm::Run const& iEvent, edm::EventSetup const&) override {}
0025 std::string fileIn, fileOut;
0026 double scale;
0027 edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> tok_htopo_;
0028 };
0029
0030 scaleGains::scaleGains(const edm::ParameterSet& iConfig) {
0031 fileIn = iConfig.getUntrackedParameter<std::string>("FileIn");
0032 fileOut = iConfig.getUntrackedParameter<std::string>("FileOut");
0033 scale = iConfig.getUntrackedParameter<double>("Scale");
0034 tok_htopo_ = esConsumes<HcalTopology, HcalRecNumberingRecord>();
0035 }
0036
0037 scaleGains::~scaleGains() {}
0038
0039 void scaleGains::analyze(edm::Event const&, edm::EventSetup const& iSetup) {
0040 HcalTopology topo = iSetup.getData(tok_htopo_);
0041
0042 HcalGains gainsIn(&topo);
0043 ;
0044 std::ifstream inStream(fileIn.c_str());
0045 HcalDbASCIIIO::getObject(inStream, &gainsIn);
0046 inStream.close();
0047
0048 HcalGains gainsOut(&topo);
0049 ;
0050 std::vector<DetId> channels = gainsIn.getAllChannels();
0051 for (unsigned i = 0; i < channels.size(); i++) {
0052 DetId id = channels[i];
0053 HcalGain item(id,
0054 gainsIn.getValues(id)->getValue(0) * scale,
0055 gainsIn.getValues(id)->getValue(1) * scale,
0056 gainsIn.getValues(id)->getValue(2) * scale,
0057 gainsIn.getValues(id)->getValue(3) * scale);
0058 gainsOut.addValues(item);
0059 }
0060
0061 std::ofstream outStream(fileOut.c_str());
0062 HcalDbASCIIIO::dumpObject(outStream, gainsOut);
0063 outStream.close();
0064 }
0065
0066
0067 DEFINE_FWK_MODULE(scaleGains);