Blame view

src/ParamOutputImpl/Plot/Time/TimePlot.hh 7.12 KB
fbe3c2bb   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
/*
 * TimePlot.hh
 *
 *  Created on: 22 nov. 2013
 *      Author: CS
 */

#ifndef TIMEPLOT_HH_
#define TIMEPLOT_HH_

fbe3c2bb   Benjamin Renard   First commit
11
#include "NodeCfg.hh"
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
12
#include "PanelPlotOutput.hh"
fbe3c2bb   Benjamin Renard   First commit
13
14
15
16
17
18
19

#include <algorithm>
#include <map>
#include <memory>

#include "DefaultTimeAxisDecorator.hh"

fbe3c2bb   Benjamin Renard   First commit
20
21
#include "TimeAxisDecorator.hh"

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
22
23
#include "ParamData.hh"

fbe3c2bb   Benjamin Renard   First commit
24
25
#include "TimePlotNode.hh"

677db865   Benjamin Renard   Draw intervals on...
26
27
#include "ParamInfo.hh"

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
28
29
extern "C"
{
fbe3c2bb   Benjamin Renard   First commit
30
31
32
#include <plplot/qsastime.h>
}

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
33
34
namespace plot
{
fbe3c2bb   Benjamin Renard   First commit
35

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
36
	class TimeAxis;
fbe3c2bb   Benjamin Renard   First commit
37

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
38
	/**
fbe3c2bb   Benjamin Renard   First commit
39
40
 * Plot that draws f(t)
 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
41
42
43
44
45
46
47
	class TimePlot : public PanelPlotOutput
	{
	public:
		TimePlot(AMDA::Parameters::ParameterManager &manager,
				 boost::shared_ptr<Panel> panel, TimeAxisDecorator *timeAxisDecorator = new DefaultTimeAxisDecorator(), bool isStandalone = true);
		virtual ~TimePlot();
		/**
fbe3c2bb   Benjamin Renard   First commit
48
49
	 * @overload plot::PanelPlotOutput
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
50
51
52
53
		virtual const std::string typeName()
		{
			return TIMEPLOT_NODENAME;
		}
fbe3c2bb   Benjamin Renard   First commit
54

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
55
		/**
fbe3c2bb   Benjamin Renard   First commit
56
57
	 * @brief overloads ParamOutput::preparePlotArea
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
58
		virtual void preparePlotArea(double startTime, double stopTime, int intervalIndex);
fbe3c2bb   Benjamin Renard   First commit
59

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
60
		/**
fbe3c2bb   Benjamin Renard   First commit
61
62
	 * @brief overloads ParamOutput::draw()
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
63
64
		virtual bool draw(double startTime, double stopTime, int intervalIndex,
						  bool isFirstInterval, bool isLastInterval);
fbe3c2bb   Benjamin Renard   First commit
65

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
66
		TimeAxis *getTimeAxis();
fbe3c2bb   Benjamin Renard   First commit
67

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
68
69
70
71
		void setTimeAxisDecorator(std::shared_ptr<TimeAxisDecorator> pDecorator_)
		{
			_xdecoratorPtr = pDecorator_;
		}
fbe3c2bb   Benjamin Renard   First commit
72

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
73
74
75
76
		std::shared_ptr<TimeAxisDecorator> getTimeAxisDecorator()
		{
			return _xdecoratorPtr;
		}
fbe3c2bb   Benjamin Renard   First commit
77

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
78
79
80
81
82
83
84
85
86
87
88
89
		void normalize(MatrixGrid &matrixGrid, std::string normalizationType);

		/**
		 * @brief Apply a background subtraction for the given spectro
		 * 
		 * @param matrixGrid matrix for each index of the sepctro
		 * @param pSpectro spectro's properties
		 * @param data data of the parameter associated with the spectro
		 */
		void applyBackgroundSubtraction(MatrixGrid &matrixGrid, SpectroProperties &pSpectro, ParameterData &data);

		/**
fbe3c2bb   Benjamin Renard   First commit
90
91
	 * @brief QSAS time configuration for time formatting
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
92
		static QSASConfig *qsasconfig;
fbe3c2bb   Benjamin Renard   First commit
93

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
94
95
	protected:
		/**
fbe3c2bb   Benjamin Renard   First commit
96
97
98
	 * @overload PanelPlotOutput::calculatePlotArea(Bounds const& pPanelBounds, bool pKeepRatio)
	 * @brief Calculate and draw plot area.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
99
		virtual void calculatePlotArea(const Bounds &panelBounds_, Bounds &bounds_);
fbe3c2bb   Benjamin Renard   First commit
100

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
101
		/**
fbe3c2bb   Benjamin Renard   First commit
102
103
104
	 * @overload PanelPlotOutput::drawFills(double startDate, double stopDate)
	 * @brief Draw fill area between parameter and constant or between parameters
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
105
		virtual void drawFills(double startDate, double stopDate);
fbe3c2bb   Benjamin Renard   First commit
106

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
107
		/**
fbe3c2bb   Benjamin Renard   First commit
108
109
110
	 * @overload PanelPlotOutput::drawSeries(double startDate, double stopDate, std::string pParamId, SeriesProperties const& pSerie)
	 * @brief Draw series of parameter on plot.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
111
112
113
114
		virtual void drawSeries(double startDate, double stopDate, int intervalIndex, std::string pParamId,
								SeriesProperties &pSeries,
								AMDA::Common::ParameterIndexComponent pParamIndex,
								ParameterAxes &param, bool moreThanOneSerieForAxis);
fbe3c2bb   Benjamin Renard   First commit
115

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
116
		/**
fbe3c2bb   Benjamin Renard   First commit
117
118
119
	 * @overload PanelPlotOutput::drawSpectro(double startDate, double stopDate, std::string pParamId, SpectroProperties& pSpectro)
	 * @brief Draw spectro of parameter on plot.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
120
121
		virtual void drawSpectro(double startDate, double stopDate, std::string pParamId,
								 SpectroProperties &pSpectro);
5f13f59c   Hacene SI HADJ MOHAND   in progress worki...
122
123
                
                		virtual void drawSauvaud(double startDate, double stopDate, std::string pParamId,
e1e55413   Hacene SI HADJ MOHAND   us ok
124
								 SauvaudProperties &pSauvaud,int subInde, int subsNumber,  std::string opositeLegend);
5f13f59c   Hacene SI HADJ MOHAND   in progress worki...
125

fbe3c2bb   Benjamin Renard   First commit
126

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
127
		/**
e257cfb9   Benjamin Renard   First implementat...
128
129
130
	 * @overload PanelPlotOutput::drawIntervals(double startDate, double stopDate, std::string pParamId, IntervalsProperties& pIntervals)
	 * @brief Draw intervals defined by a parameter
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
131
132
		virtual void drawIntervals(double startDate, double stopDate, std::string pParamId,
								   IntervalsProperties &pIntervals);
e257cfb9   Benjamin Renard   First implementat...
133

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
134
		void drawXAxis(boost::shared_ptr<Axis> pXAxis, PlWindow &pPlWindow, Bounds &pPlotAreaSize, TickConf &pTickConf);
fbe3c2bb   Benjamin Renard   First commit
135

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
136
		/**
fbe3c2bb   Benjamin Renard   First commit
137
138
139
140
141
//	 * @overload convertXAxisValue(const std::string &value)
//	 * @brief Convert an X axis string value to a double X value
	 * Subclasses may override it to take into account specific value meaning.
	 * @param value string value to convert.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
142
		virtual double convertXAxisValue(const std::string &value);
fbe3c2bb   Benjamin Renard   First commit
143

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
144
		/**
fbe3c2bb   Benjamin Renard   First commit
145
146
147
	 * @brief Identify if other side of the plot area need to be drawn or not.
	 * @note A plot area side need to be drawn when there is no axis associated to it.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
148
		std::string drawOppositeSide(boost::shared_ptr<Axis> pAxis);
fbe3c2bb   Benjamin Renard   First commit
149

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
150
		/**
20fef3b6   Benjamin Renard   Fix reset functio...
151
	 * @overload PanelPlotOutput::resetPlot - reset plot
fbe3c2bb   Benjamin Renard   First commit
152
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
153
154
155
156
157
158
		virtual void resetPlot()
		{
			_startDateDrawn = false;
			PanelPlotOutput::resetPlot();
		}
		/*
fbe3c2bb   Benjamin Renard   First commit
159
160
161
	 *
	 */

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
162
163
	private:
		void drawStartDate(TimeAxis *pXAxis, double startTime, double stopTime);
fbe3c2bb   Benjamin Renard   First commit
164

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
165
		const std::string getXAxisId() const;
fbe3c2bb   Benjamin Renard   First commit
166

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
167
		/**
fbe3c2bb   Benjamin Renard   First commit
168
169
	 * @brief Configure series color (symbols and line) and range of axis (depending of parameters series to draw).
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
170
		void configureSeriesAxis();
fbe3c2bb   Benjamin Renard   First commit
171

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
172
		/**
fbe3c2bb   Benjamin Renard   First commit
173
174
	 * @brief Configure axis legend with paramInfo.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
175
		void configureAxisLegend();
fbe3c2bb   Benjamin Renard   First commit
176

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
177
		/**
fbe3c2bb   Benjamin Renard   First commit
178
179
	* @brief Configure spectro.
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
180
		void configureSpectroAxis();
793c4351   Hacene SI HADJ MOHAND   creation de class...
181
182
183
184
                    /**
                	* @brief Configure spectro.
	*/
		void configureSauvaudAxis();
fbe3c2bb   Benjamin Renard   First commit
185

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
186
		/**
62024e03   Erdogan Furkan   Some modifications
187
188
189
		 * @brief configure the TT/Catalogue intervals legend
		 *
		 */
0fa2d990   Erdogan Furkan   7616 - Adding lab...
190
		void configureIntervalsLegend();
62024e03   Erdogan Furkan   Some modifications
191
192
193
		/**
		 * @brief Retrieve ConstantLine informations for a given serieId and constantId.
		 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
194
		ConstantLine *getConstantLineFromId(int serieId, int constantId, boost::shared_ptr<Axis> &yAxis);
fbe3c2bb   Benjamin Renard   First commit
195

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
196
		/**
fbe3c2bb   Benjamin Renard   First commit
197
198
	* @brief Retrieve serie properties by serie Id.
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
199
		bool getSeriePropertiesById(int serieId, SeriesProperties &rSerieProperties);
fbe3c2bb   Benjamin Renard   First commit
200

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
201
		/**
fbe3c2bb   Benjamin Renard   First commit
202
203
	* @brief Merge, sort and remove duplicate from 2 arrays in a vector
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
204
205
206
		void mergeAndSortTime(double *values1Time, int values1Nb,
							  double *values2Time, int values2Nb,
							  std::vector<double> &values);
fbe3c2bb   Benjamin Renard   First commit
207

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
208
		/**
fbe3c2bb   Benjamin Renard   First commit
209
210
	* @brief Return or compute an interpolated value
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
211
		double getInterpolatedValue(double *values, double *valuesTime, int valuesNb, double atTime);
fbe3c2bb   Benjamin Renard   First commit
212

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
213
		/**
fbe3c2bb   Benjamin Renard   First commit
214
215
	* @brief Compute if two ligne segments intersects
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
216
217
218
		bool intersect(double xi, double y1i, double y2i,
					   double xj, double y1j, double y2j,
					   double *xInter);
fbe3c2bb   Benjamin Renard   First commit
219

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
220
		/**
fbe3c2bb   Benjamin Renard   First commit
221
222
	* @brief Compute and add intersections time to the vector if intersections exist
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
223
224
225
		void addIntersectionTime(double *values1, double *values1Time, int values1Nb,
								 double *values2, double *values2Time, int values2Nb,
								 std::vector<double> &valuesTime);
fbe3c2bb   Benjamin Renard   First commit
226

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
227
		/**
fbe3c2bb   Benjamin Renard   First commit
228
229
	* @brief Draw Fill Area for the given arrays and the valueTime timeline
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
230
231
232
233
234
235
		void drawFillArea(double *values1, double *values1Time, int values1Nb,
						  double *values2, double *values2Time, int values2Nb,
						  std::vector<double> &valuesTime,
						  bool colorGreaterSpecified, Color &colorGreater,
						  bool colorLessSpecified, Color &colorLess,
						  SeriesProperties &rSeriesProperties);
fbe3c2bb   Benjamin Renard   First commit
236

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
237
		Color getStatusColor(AMDA::Info::ParamInfoSPtr &paramInfo, double value);
677db865   Benjamin Renard   Draw intervals on...
238

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
239
		void drawOneInterval(double tmin, double tmax, Color color);
677db865   Benjamin Renard   Draw intervals on...
240

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
241
		std::shared_ptr<TimeAxisDecorator> _xdecoratorPtr;
fbe3c2bb   Benjamin Renard   First commit
242

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
243
244
		bool _startDateDrawn;
	};
fbe3c2bb   Benjamin Renard   First commit
245

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
246
	/**
fbe3c2bb   Benjamin Renard   First commit
247
248
 * @brief Custom generator for time label, just not display min time.
 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
249
250
	void generateTimeLabel(PLINT axis, PLFLT value, char *label, PLINT length,
						   PLPointer data);
fbe3c2bb   Benjamin Renard   First commit
251
252
253

} /* namespace plot */
#endif /* TIMEPLOT_HH_ */