SpectroNode.hh
3.72 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
* SpectroNode.hh
*
* Created on: Jul 2, 2014
* Author: AKKA
*/
#ifndef SPECTRONODE_HH_
#define SPECTRONODE_HH_
#include <iosfwd>
#include <libxml/globals.h>
#include <libxml/tree.h>
#include <libxml/xmlstring.h>
#include "DrawingPropertiesNode.hh"
#include "FileConfigurator.hh"
#include "PlotLogger.hh"
#include "SpectroProperties.hh"
namespace plot
{
/**
* Class that handle a <spectro> xml node.
* Template class that should be instanciated for each subclass of PanelOutputPanel.
*/
template <class PlotType>
class SpectroNode : public plot::DrawingPropertiesNode<PlotType>
{
public:
SpectroNode() : DrawingPropertiesNode<PlotType>()
{
}
virtual ~SpectroNode()
{
}
void proceed(xmlNodePtr pNode_, const AMDA::Parameters::CfgContext &pContext_)
{
LOG4CXX_DEBUG(gLogger, "SpectroNode::proceed");
PlotType *plotOutput = pContext_.get<PlotType *>();
xmlChar *name = pContext_.get<xmlChar *>();
// initialize spectro with default properties
DrawingProperties defaultProps = plotOutput->getParameter(
(const char *)name)
.getDefaultProperties();
// read parent attributes
DrawingPropertiesNode<PlotType>::parseAttributes(pNode_, defaultProps);
// spectro properties
std::shared_ptr<SpectroProperties> spectroPropsPtr =
std::shared_ptr<SpectroProperties>(new SpectroProperties(defaultProps));
xmlChar *value = NULL;
// -- parameter resolution
value = xmlGetProp(pNode_, (const xmlChar *)"resolution");
if (value)
{
spectroPropsPtr->setMaxResolution(atoi((const char *)value));
xmlFree(value);
}
// read index definition
value = xmlGetProp(pNode_, (const xmlChar *)"index");
if (value)
{
spectroPropsPtr->setIndexDef((const char *)value);
xmlFree(value);
}
//set related dim
spectroPropsPtr->setRelatedDim(AMDA::Common::ParameterIndexesTool::getRelatedDimForTab2D(spectroPropsPtr->getIndexDef()));
// read uselog0asmin
value = xmlGetProp(pNode_, (const xmlChar *)"uselog0asmin");
if (value)
{
std::string strValue((const char *)value);
std::transform(strValue.begin(), strValue.end(), strValue.begin(),
::tolower);
std::istringstream is(strValue);
bool uselog0asmin;
is >> std::boolalpha >> uselog0asmin;
spectroPropsPtr->setUseLog0AsMin(uselog0asmin);
xmlFree(value);
}
// normalization
value = xmlGetProp(pNode_, (const xmlChar *)"normalization");
if (value)
{
spectroPropsPtr->setNormalization((const char *)value);
xmlFree(value);
}
value = xmlGetProp(pNode_, (const xmlChar *)BACKGROUND_SUB_TYPE);
if (value)
{
const char *valueString = (const char *)value;
if (strcmp(valueString, BACKGROUND_SUB_TYPE_BY_CHANNEL) == 0)
{
spectroPropsPtr->setBackgroundSubType(SpectroProperties::BackgroundSubType::BYCHANNEL);
}
else if (strcmp(valueString, BACKGROUND_SUB_TYPE_BY_FIXED_VALUE) == 0)
{
spectroPropsPtr->setBackgroundSubType(SpectroProperties::BackgroundSubType::FIXEDVALUE);
}
xmlFree(value);
}
value = xmlGetProp(pNode_, (const xmlChar *)BACKGROUND_SUB_VALUE);
if (value)
{
char *newValueBrut = (char *)value;
double newValue = std::stod(newValueBrut);
spectroPropsPtr->setBackgroundSubValue(newValue);
xmlFree(value);
}
//setRelatedDim
value = xmlGetProp(pNode_, (const xmlChar *)BACKGROUND_SUB_DIM);
if (value)
{
char *newValueBrut = (char *)value;
int newValue = std::stoi(newValueBrut);
spectroPropsPtr->setBackgroundSubDim(newValue);
xmlFree(value);
}
// add spectro definition to parameter
plotOutput->getParameter((const char *)name).addSpectroProperties(spectroPropsPtr);
}
};
}
/* namespace plot */
#endif /* SPECTRONODE_HH_ */