File indexing completed on 2024-04-06 12:24:30
0001 #include <memory>
0002 #include <string>
0003 #include <fstream>
0004 #include <iostream>
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/MakerMacros.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "FWCore/ServiceRegistry/interface/Service.h"
0011 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0012 #include "CondFormats/PhysicsToolsObjects/interface/PerformancePayloadFromTable.h"
0013
0014 #include "CondFormats/PhysicsToolsObjects/interface/PerformanceWorkingPoint.h"
0015
0016 class PhysicsPerformanceDBWriterFromFile_WPandPayload : public edm::global::EDAnalyzer<> {
0017 public:
0018 PhysicsPerformanceDBWriterFromFile_WPandPayload(const edm::ParameterSet&);
0019 void beginJob() override;
0020 void analyze(edm::StreamID, const edm::Event&, const edm::EventSetup&) const override {}
0021 void endJob() override {}
0022 ~PhysicsPerformanceDBWriterFromFile_WPandPayload() override {}
0023
0024 private:
0025 std::string inputTxtFile;
0026 std::string rec1, rec2;
0027 };
0028
0029 PhysicsPerformanceDBWriterFromFile_WPandPayload::PhysicsPerformanceDBWriterFromFile_WPandPayload(
0030 const edm::ParameterSet& p) {
0031 inputTxtFile = p.getUntrackedParameter<std::string>("inputTxtFile");
0032 rec1 = p.getUntrackedParameter<std::string>("RecordPayload");
0033 rec2 = p.getUntrackedParameter<std::string>("RecordWP");
0034 }
0035
0036 void PhysicsPerformanceDBWriterFromFile_WPandPayload::beginJob() {
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 std::ifstream in;
0052 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "Opening " << inputTxtFile;
0053 in.open(inputTxtFile.c_str());
0054 std::string tagger;
0055 float cut;
0056
0057 std::string concreteType;
0058 std::string comment;
0059 std::vector<float> pl;
0060 int stride;
0061
0062 in >> tagger;
0063 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "WP Tagger is " << tagger;
0064
0065 in >> cut;
0066 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "WP Cut is " << cut;
0067
0068 in >> concreteType;
0069 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "concrete Type is " << concreteType;
0070
0071
0072
0073
0074
0075 int nres, nbin;
0076 in >> nres;
0077 in >> nbin;
0078 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload")
0079 << " Results: " << nres << " Binning variables: " << nbin;
0080
0081 stride = nres + nbin * 2;
0082 if (!stride) {
0083 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << " Malformed input file";
0084 exit(1);
0085 }
0086
0087 int number = 0;
0088
0089 std::vector<PerformanceResult::ResultType> res;
0090 std::vector<BinningVariables::BinningVariablesType> bin;
0091
0092 while (number < nres && !in.eof()) {
0093 int tmp;
0094 in >> tmp;
0095 res.push_back((PerformanceResult::ResultType)(tmp));
0096 number++;
0097 }
0098 if (number != nres) {
0099 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "Table not well formed";
0100 }
0101 number = 0;
0102 while (number < nbin && !in.eof()) {
0103 int tmp;
0104 in >> tmp;
0105 bin.push_back((BinningVariables::BinningVariablesType)(tmp));
0106 number++;
0107 }
0108 if (number != nbin) {
0109 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "Table not well formed";
0110 }
0111
0112 number = 0;
0113 while (!in.eof()) {
0114 float temp;
0115 in >> temp;
0116 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload")
0117 << " Intersing " << temp << " in position " << number;
0118 number++;
0119 pl.push_back(temp);
0120 }
0121
0122
0123
0124
0125 if (stride != nbin * 2 + nres) {
0126 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "Table not well formed";
0127 }
0128 if ((number % stride) != 0) {
0129 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << "Table not well formed";
0130 }
0131 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << " CLOSING ";
0132 in.close();
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145 PerformanceWorkingPoint wp(cut, tagger);
0146
0147 PerformancePayloadFromTable btagpl;
0148
0149 if (concreteType == "PerformancePayloadFromTable") {
0150 btagpl = PerformancePayloadFromTable(res, bin, stride, pl);
0151 } else {
0152 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << " Non existing request: " << concreteType;
0153 }
0154
0155 edm::LogInfo("PhysicsPerformanceDBWriterFromFile_WPandPayload") << " Created the " << concreteType << " object";
0156
0157 edm::Service<cond::service::PoolDBOutputService> s;
0158 if (s.isAvailable()) {
0159 s->writeOneIOV(btagpl, s->beginOfTime(), rec1);
0160
0161 s->writeOneIOV(wp, s->beginOfTime(), rec2);
0162 }
0163 }
0164
0165 DEFINE_FWK_MODULE(PhysicsPerformanceDBWriterFromFile_WPandPayload);