1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
* DataPointDefinition.cc
*
* Created on: Sep 24, 2012
* Author: aspataru
*/
#include "EventFilter/Utilities/interface/DataPointDefinition.h"
#include "EventFilter/Utilities/interface/JsonMonitorable.h"
#include "EventFilter/Utilities/interface/FileIO.h"
#include "EventFilter/Utilities/interface/JSONSerializer.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
using namespace jsoncollector;
const std::string DataPointDefinition::SUM = "sum";
const std::string DataPointDefinition::AVG = "avg";
const std::string DataPointDefinition::SAME = "same";
const std::string DataPointDefinition::HISTO = "histo";
const std::string DataPointDefinition::CAT = "cat";
const std::string DataPointDefinition::BINARYOR = "binaryOr";
const std::string DataPointDefinition::MERGE = "merge";
const std::string DataPointDefinition::ADLER32 = "adler32";
const std::string DataPointDefinition::LEGEND = "legend";
const std::string DataPointDefinition::DATA = "data";
const std::string DataPointDefinition::PARAM_NAME = "name";
const std::string DataPointDefinition::OPERATION = "operation";
const std::string DataPointDefinition::TYPE = "type";
//static member implementation
bool DataPointDefinition::getDataPointDefinitionFor(std::string& defFilePath,
DataPointDefinition* dpd,
const std::string* defaultGroup) {
std::string dpdString;
bool readOK = FileIO::readStringFromFile(defFilePath, dpdString);
// data point definition is missing!
if (!readOK) {
edm::LogWarning("DataPointDefinition") << "Cannot read from JSON definition path -: " << defFilePath;
return false;
}
if (!defaultGroup)
dpd->setDefaultGroup(LEGEND);
else
dpd->setDefaultGroup(*defaultGroup);
JSONSerializer::deserialize(dpd, dpdString);
return true;
}
void DataPointDefinition::serialize(Json::Value& root) const {
for (unsigned int i = 0; i < varNames_.size(); i++) {
Json::Value currentDef;
currentDef[PARAM_NAME] = varNames_[i];
currentDef[OPERATION] = opNames_[i];
if (!typeNames_[i].empty()) //only if it was found
currentDef[TYPE] = typeNames_[i];
root[defaultGroup_].append(currentDef);
}
}
void DataPointDefinition::deserialize(Json::Value& root) {
if (root.get(defaultGroup_, "").isArray()) {
unsigned int size = root.get(defaultGroup_, "").size();
for (unsigned int i = 0; i < size; i++) {
varNames_.push_back(root.get(defaultGroup_, "")[i].get(PARAM_NAME, "").asString());
opNames_.push_back(root.get(defaultGroup_, "")[i].get(OPERATION, "").asString());
typeNames_.push_back(root.get(defaultGroup_, "")[i].get(TYPE, "").asString());
}
}
}
bool DataPointDefinition::isPopulated() const {
if (!varNames_.empty())
return true;
return false;
}
OperationType DataPointDefinition::getOperationFor(unsigned int index) const {
OperationType opType = OPUNKNOWN;
if (opNames_.at(index) == DataPointDefinition::SUM)
opType = OPSUM;
if (opNames_.at(index) == DataPointDefinition::AVG)
opType = OPAVG;
if (opNames_.at(index) == DataPointDefinition::SAME)
opType = OPSAME;
if (opNames_.at(index) == DataPointDefinition::HISTO)
opType = OPHISTO;
if (opNames_.at(index) == DataPointDefinition::CAT)
opType = OPCAT;
return opType;
}
void DataPointDefinition::addLegendItem(std::string const& name,
std::string const& type,
std::string const& operation) {
varNames_.push_back(name);
typeNames_.push_back(type);
opNames_.push_back(operation);
}
|