File indexing completed on 2024-04-06 12:11:07
0001
0002
0003
0004
0005
0006
0007
0008 #include "EventFilter/Utilities/interface/DataPointDefinition.h"
0009 #include "EventFilter/Utilities/interface/JsonMonitorable.h"
0010 #include "EventFilter/Utilities/interface/FileIO.h"
0011 #include "EventFilter/Utilities/interface/JSONSerializer.h"
0012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0013
0014 using namespace jsoncollector;
0015
0016 const std::string DataPointDefinition::SUM = "sum";
0017 const std::string DataPointDefinition::AVG = "avg";
0018 const std::string DataPointDefinition::SAME = "same";
0019 const std::string DataPointDefinition::HISTO = "histo";
0020 const std::string DataPointDefinition::CAT = "cat";
0021 const std::string DataPointDefinition::BINARYOR = "binaryOr";
0022 const std::string DataPointDefinition::MERGE = "merge";
0023 const std::string DataPointDefinition::ADLER32 = "adler32";
0024
0025 const std::string DataPointDefinition::LEGEND = "legend";
0026 const std::string DataPointDefinition::DATA = "data";
0027 const std::string DataPointDefinition::PARAM_NAME = "name";
0028 const std::string DataPointDefinition::OPERATION = "operation";
0029 const std::string DataPointDefinition::TYPE = "type";
0030
0031
0032 bool DataPointDefinition::getDataPointDefinitionFor(std::string& defFilePath,
0033 DataPointDefinition* dpd,
0034 const std::string* defaultGroup) {
0035 std::string dpdString;
0036 bool readOK = FileIO::readStringFromFile(defFilePath, dpdString);
0037
0038 if (!readOK) {
0039 edm::LogWarning("DataPointDefinition") << "Cannot read from JSON definition path -: " << defFilePath;
0040 return false;
0041 }
0042 if (!defaultGroup)
0043 dpd->setDefaultGroup(LEGEND);
0044 else
0045 dpd->setDefaultGroup(*defaultGroup);
0046 JSONSerializer::deserialize(dpd, dpdString);
0047 return true;
0048 }
0049
0050 void DataPointDefinition::serialize(Json::Value& root) const {
0051 for (unsigned int i = 0; i < varNames_.size(); i++) {
0052 Json::Value currentDef;
0053 currentDef[PARAM_NAME] = varNames_[i];
0054 currentDef[OPERATION] = opNames_[i];
0055 if (!typeNames_[i].empty())
0056 currentDef[TYPE] = typeNames_[i];
0057 root[defaultGroup_].append(currentDef);
0058 }
0059 }
0060
0061 void DataPointDefinition::deserialize(Json::Value& root) {
0062 if (root.get(defaultGroup_, "").isArray()) {
0063 unsigned int size = root.get(defaultGroup_, "").size();
0064 for (unsigned int i = 0; i < size; i++) {
0065 varNames_.push_back(root.get(defaultGroup_, "")[i].get(PARAM_NAME, "").asString());
0066 opNames_.push_back(root.get(defaultGroup_, "")[i].get(OPERATION, "").asString());
0067 typeNames_.push_back(root.get(defaultGroup_, "")[i].get(TYPE, "").asString());
0068 }
0069 }
0070 }
0071
0072 bool DataPointDefinition::isPopulated() const {
0073 if (!varNames_.empty())
0074 return true;
0075 return false;
0076 }
0077
0078 OperationType DataPointDefinition::getOperationFor(unsigned int index) const {
0079 OperationType opType = OPUNKNOWN;
0080 if (opNames_.at(index) == DataPointDefinition::SUM)
0081 opType = OPSUM;
0082 if (opNames_.at(index) == DataPointDefinition::AVG)
0083 opType = OPAVG;
0084 if (opNames_.at(index) == DataPointDefinition::SAME)
0085 opType = OPSAME;
0086 if (opNames_.at(index) == DataPointDefinition::HISTO)
0087 opType = OPHISTO;
0088 if (opNames_.at(index) == DataPointDefinition::CAT)
0089 opType = OPCAT;
0090 return opType;
0091 }
0092
0093 void DataPointDefinition::addLegendItem(std::string const& name,
0094 std::string const& type,
0095 std::string const& operation) {
0096 varNames_.push_back(name);
0097 typeNames_.push_back(type);
0098 opNames_.push_back(operation);
0099 }