File indexing completed on 2024-04-06 12:19:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <sys/types.h>
0020 #include <sys/stat.h>
0021 #include <unistd.h>
0022
0023 #include <cassert>
0024 #include <fstream>
0025
0026 #include "FWCore/Framework/interface/Frameworkfwd.h"
0027 #include "FWCore/Framework/interface/stream/EDAnalyzer.h"
0028 #include "FWCore/Framework/interface/Event.h"
0029 #include "FWCore/Framework/interface/MakerMacros.h"
0030
0031 #include "FWCore/ServiceRegistry/interface/Service.h"
0032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0033
0034 #include "CondFormats/JetMETObjects/interface/FFTJetCorrectorParameters.h"
0035 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0036
0037 #define init_param(type, varname) varname(ps.getParameter<type>(#varname))
0038
0039
0040
0041
0042 class FFTJetCorrectorDBWriter : public edm::stream::EDAnalyzer<> {
0043 public:
0044 explicit FFTJetCorrectorDBWriter(const edm::ParameterSet&);
0045 FFTJetCorrectorDBWriter() = delete;
0046 FFTJetCorrectorDBWriter(const FFTJetCorrectorDBWriter&) = delete;
0047 FFTJetCorrectorDBWriter& operator=(const FFTJetCorrectorDBWriter&) = delete;
0048 ~FFTJetCorrectorDBWriter() override {}
0049
0050 private:
0051 void analyze(const edm::Event&, const edm::EventSetup&) override;
0052
0053 std::string inputFile;
0054 std::string record;
0055 };
0056
0057 FFTJetCorrectorDBWriter::FFTJetCorrectorDBWriter(const edm::ParameterSet& ps)
0058 : init_param(std::string, inputFile), init_param(std::string, record) {}
0059
0060 void FFTJetCorrectorDBWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0061 std::unique_ptr<FFTJetCorrectorParameters> fcp;
0062
0063 {
0064 std::ifstream input(inputFile.c_str(), std::ios_base::binary);
0065 if (!input.is_open())
0066 throw cms::Exception("InvalidArgument") << "Failed to open file \"" << inputFile << '"' << std::endl;
0067
0068 struct stat st;
0069 if (stat(inputFile.c_str(), &st))
0070 throw cms::Exception("SystemError") << "Failed to stat file \"" << inputFile << '"' << std::endl;
0071
0072 const std::size_t len = st.st_size;
0073 fcp = std::make_unique<FFTJetCorrectorParameters>(len);
0074 assert(fcp->length() == len);
0075 if (len)
0076 input.read(fcp->getBuffer(), len);
0077 if (input.fail())
0078 throw cms::Exception("SystemError")
0079 << "Input stream failure while reading file \"" << inputFile << '"' << std::endl;
0080 }
0081
0082 edm::Service<cond::service::PoolDBOutputService> poolDbService;
0083 if (poolDbService.isAvailable())
0084 poolDbService->writeOneIOV(*fcp, poolDbService->currentTime(), record);
0085 else
0086 throw cms::Exception("ConfigurationError") << "PoolDBOutputService is not available, "
0087 << "please configure it properly" << std::endl;
0088 }
0089
0090 DEFINE_FWK_MODULE(FFTJetCorrectorDBWriter);