Blame view

src/ParamOutputImpl/Plot/Time/TimePlot.hh 7.25 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
	class TimePlot : public PanelPlotOutput
	{
	public:
		TimePlot(AMDA::Parameters::ParameterManager &manager,
1d1a3b8a   Erdogan Furkan   Done for tickPlot...
45
46
				 boost::shared_ptr<Panel> panel, TimeAxisDecorator *timeAxisDecorator = new DefaultTimeAxisDecorator(), 
				 bool isStandalone = true);
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
47
48
		virtual ~TimePlot();
		/**
1d1a3b8a   Erdogan Furkan   Done for tickPlot...
49
50
	 	* @overload plot::PanelPlotOutput
	 	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
51
52
53
54
		virtual const std::string typeName()
		{
			return TIMEPLOT_NODENAME;
		}
fbe3c2bb   Benjamin Renard   First commit
55

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
56
		/**
1d1a3b8a   Erdogan Furkan   Done for tickPlot...
57
58
59
60
61
62
63
64
	 	* @overload plot::PanelPlotOutput
	 	*/
		virtual const std::string subTypeName()
		{
			return TIMEPLOT_NODENAME;
		}

		/**
fbe3c2bb   Benjamin Renard   First commit
65
66
	 * @brief overloads ParamOutput::preparePlotArea
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
67
		virtual void preparePlotArea(double startTime, double stopTime, int intervalIndex);
fbe3c2bb   Benjamin Renard   First commit
68

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
69
		/**
fbe3c2bb   Benjamin Renard   First commit
70
71
	 * @brief overloads ParamOutput::draw()
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
72
73
		virtual bool draw(double startTime, double stopTime, int intervalIndex,
						  bool isFirstInterval, bool isLastInterval);
fbe3c2bb   Benjamin Renard   First commit
74

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

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
77
78
79
80
		void setTimeAxisDecorator(std::shared_ptr<TimeAxisDecorator> pDecorator_)
		{
			_xdecoratorPtr = pDecorator_;
		}
fbe3c2bb   Benjamin Renard   First commit
81

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
82
83
84
85
		std::shared_ptr<TimeAxisDecorator> getTimeAxisDecorator()
		{
			return _xdecoratorPtr;
		}
fbe3c2bb   Benjamin Renard   First commit
86

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
87
88
89
90
91
92
93
94
95
96
97
98
		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
99
100
	 * @brief QSAS time configuration for time formatting
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
101
		static QSASConfig *qsasconfig;
fbe3c2bb   Benjamin Renard   First commit
102

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
103
104
	protected:
		/**
fbe3c2bb   Benjamin Renard   First commit
105
106
107
	 * @overload PanelPlotOutput::calculatePlotArea(Bounds const& pPanelBounds, bool pKeepRatio)
	 * @brief Calculate and draw plot area.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
108
		virtual void calculatePlotArea(const Bounds &panelBounds_, Bounds &bounds_);
fbe3c2bb   Benjamin Renard   First commit
109

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
110
		/**
fbe3c2bb   Benjamin Renard   First commit
111
112
113
	 * @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...
114
		virtual void drawFills(double startDate, double stopDate);
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::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...
120
121
122
123
		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
124

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
125
		/**
fbe3c2bb   Benjamin Renard   First commit
126
127
128
	 * @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...
129
130
		virtual void drawSpectro(double startDate, double stopDate, std::string pParamId,
								 SpectroProperties &pSpectro);
5f13f59c   Hacene SI HADJ MOHAND   in progress worki...
131
132
                
                		virtual void drawSauvaud(double startDate, double stopDate, std::string pParamId,
e1e55413   Hacene SI HADJ MOHAND   us ok
133
								 SauvaudProperties &pSauvaud,int subInde, int subsNumber,  std::string opositeLegend);
5f13f59c   Hacene SI HADJ MOHAND   in progress worki...
134

fbe3c2bb   Benjamin Renard   First commit
135

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
136
		/**
e257cfb9   Benjamin Renard   First implementat...
137
138
139
	 * @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...
140
141
		virtual void drawIntervals(double startDate, double stopDate, std::string pParamId,
								   IntervalsProperties &pIntervals);
e257cfb9   Benjamin Renard   First implementat...
142

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

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
145
		/**
fbe3c2bb   Benjamin Renard   First commit
146
147
148
149
150
//	 * @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...
151
		virtual double convertXAxisValue(const std::string &value);
fbe3c2bb   Benjamin Renard   First commit
152

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
153
		/**
fbe3c2bb   Benjamin Renard   First commit
154
155
156
	 * @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...
157
		std::string drawOppositeSide(boost::shared_ptr<Axis> pAxis);
fbe3c2bb   Benjamin Renard   First commit
158

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
159
		/**
20fef3b6   Benjamin Renard   Fix reset functio...
160
	 * @overload PanelPlotOutput::resetPlot - reset plot
fbe3c2bb   Benjamin Renard   First commit
161
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
162
163
164
165
166
167
		virtual void resetPlot()
		{
			_startDateDrawn = false;
			PanelPlotOutput::resetPlot();
		}
		/*
fbe3c2bb   Benjamin Renard   First commit
168
169
170
	 *
	 */

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

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

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
176
		/**
fbe3c2bb   Benjamin Renard   First commit
177
178
	 * @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...
179
		void configureSeriesAxis();
fbe3c2bb   Benjamin Renard   First commit
180

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
181
		/**
fbe3c2bb   Benjamin Renard   First commit
182
183
	 * @brief Configure axis legend with paramInfo.
	 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
184
		void configureAxisLegend();
fbe3c2bb   Benjamin Renard   First commit
185

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
186
		/**
fbe3c2bb   Benjamin Renard   First commit
187
188
	* @brief Configure spectro.
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
189
		void configureSpectroAxis();
793c4351   Hacene SI HADJ MOHAND   creation de class...
190
191
192
193
                    /**
                	* @brief Configure spectro.
	*/
		void configureSauvaudAxis();
fbe3c2bb   Benjamin Renard   First commit
194

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
195
		/**
62024e03   Erdogan Furkan   Some modifications
196
197
198
		 * @brief configure the TT/Catalogue intervals legend
		 *
		 */
0fa2d990   Erdogan Furkan   7616 - Adding lab...
199
		void configureIntervalsLegend();
62024e03   Erdogan Furkan   Some modifications
200
201
202
		/**
		 * @brief Retrieve ConstantLine informations for a given serieId and constantId.
		 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
203
		ConstantLine *getConstantLineFromId(int serieId, int constantId, boost::shared_ptr<Axis> &yAxis);
fbe3c2bb   Benjamin Renard   First commit
204

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
205
		/**
fbe3c2bb   Benjamin Renard   First commit
206
207
	* @brief Retrieve serie properties by serie Id.
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
208
		bool getSeriePropertiesById(int serieId, SeriesProperties &rSerieProperties);
fbe3c2bb   Benjamin Renard   First commit
209

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
210
		/**
fbe3c2bb   Benjamin Renard   First commit
211
212
	* @brief Merge, sort and remove duplicate from 2 arrays in a vector
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
213
214
215
		void mergeAndSortTime(double *values1Time, int values1Nb,
							  double *values2Time, int values2Nb,
							  std::vector<double> &values);
fbe3c2bb   Benjamin Renard   First commit
216

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
217
		/**
fbe3c2bb   Benjamin Renard   First commit
218
219
	* @brief Return or compute an interpolated value
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
220
		double getInterpolatedValue(double *values, double *valuesTime, int valuesNb, double atTime);
fbe3c2bb   Benjamin Renard   First commit
221

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
222
		/**
fbe3c2bb   Benjamin Renard   First commit
223
224
	* @brief Compute if two ligne segments intersects
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
225
226
227
		bool intersect(double xi, double y1i, double y2i,
					   double xj, double y1j, double y2j,
					   double *xInter);
fbe3c2bb   Benjamin Renard   First commit
228

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
229
		/**
fbe3c2bb   Benjamin Renard   First commit
230
231
	* @brief Compute and add intersections time to the vector if intersections exist
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
232
233
234
		void addIntersectionTime(double *values1, double *values1Time, int values1Nb,
								 double *values2, double *values2Time, int values2Nb,
								 std::vector<double> &valuesTime);
fbe3c2bb   Benjamin Renard   First commit
235

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
236
		/**
fbe3c2bb   Benjamin Renard   First commit
237
238
	* @brief Draw Fill Area for the given arrays and the valueTime timeline
	*/
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
239
240
241
242
243
244
		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
245

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

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

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

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
252
253
		bool _startDateDrawn;
	};
fbe3c2bb   Benjamin Renard   First commit
254

fe6b6521   Menouard AZIB   J'ai ajouté le tr...
255
	/**
fbe3c2bb   Benjamin Renard   First commit
256
257
 * @brief Custom generator for time label, just not display min time.
 */
fe6b6521   Menouard AZIB   J'ai ajouté le tr...
258
259
	void generateTimeLabel(PLINT axis, PLFLT value, char *label, PLINT length,
						   PLPointer data);
fbe3c2bb   Benjamin Renard   First commit
260
261
262

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