##// END OF EJS Templates
WIP Multicomponent TS...
jeandet -
r1431:8eb0c93bfd80
parent child
Show More
@@ -0,0 +1,17
1 import sys
2 sys.path.append("/home/jeandet/Documents/prog/build-SciQLop-Desktop-Debug/core")
3 import PythonProviders
4 import pysciqlopcore
5 import numpy as np
6
7 someglobal = 1
8
9 def test(name,start,stop):
10 x = np.arange(start, stop)
11 y = np.cos(x/10.)
12 return pysciqlopcore.ScalarTimeSerie(x,y)
13
14
15 #PythonProviders.register_product(["/folder1/folder2/product1", "/folder1/folder3/product2", "/folder4/folder5/product3"],test)
16
17
@@ -1,1 +1,1
1 Subproject commit b9379e008899fce30581fbbf2b3fefd6fe36cee2
1 Subproject commit 41273d8529cddde1c8b6bcea03d71d9cd1a18c06
@@ -27,7 +27,10 public:
27 template <typename T, typename Enabled = void>
27 template <typename T, typename Enabled = void>
28 struct PlottablesCreator
28 struct PlottablesCreator
29 {
29 {
30 static PlottablesMap createPlottables(QCustomPlot&) { return {}; }
30 static PlottablesMap createPlottables(QCustomPlot&, const std::shared_ptr<T>& dataSeries)
31 {
32 return {};
33 }
31 };
34 };
32
35
33 PlottablesMap createGraphs(QCustomPlot& plot, int nbGraphs)
36 PlottablesMap createGraphs(QCustomPlot& plot, int nbGraphs)
@@ -53,7 +56,10 PlottablesMap createGraphs(QCustomPlot& plot, int nbGraphs)
53 template <typename T>
56 template <typename T>
54 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<ScalarTimeSerie, T>::value>>
57 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<ScalarTimeSerie, T>::value>>
55 {
58 {
56 static PlottablesMap createPlottables(QCustomPlot& plot) { return createGraphs(plot, 1); }
59 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
60 {
61 return createGraphs(plot, 1);
62 }
57 };
63 };
58
64
59 /**
65 /**
@@ -63,7 +69,24 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<ScalarTime
63 template <typename T>
69 template <typename T>
64 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<VectorTimeSerie, T>::value>>
70 struct PlottablesCreator<T, typename std::enable_if_t<std::is_base_of<VectorTimeSerie, T>::value>>
65 {
71 {
66 static PlottablesMap createPlottables(QCustomPlot& plot) { return createGraphs(plot, 3); }
72 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
73 {
74 return createGraphs(plot, 3);
75 }
76 };
77
78 /**
79 * Specialization of PlottablesCreator for MultiComponentTimeSeries
80 * @sa VectorSeries
81 */
82 template <typename T>
83 struct PlottablesCreator<T,
84 typename std::enable_if_t<std::is_base_of<MultiComponentTimeSerie, T>::value>>
85 {
86 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
87 {
88 return createGraphs(plot, dataSeries->size(1));
89 }
67 };
90 };
68
91
69 /**
92 /**
@@ -74,7 +97,7 template <typename T>
74 struct PlottablesCreator<T,
97 struct PlottablesCreator<T,
75 typename std::enable_if_t<std::is_base_of<SpectrogramTimeSerie, T>::value>>
98 typename std::enable_if_t<std::is_base_of<SpectrogramTimeSerie, T>::value>>
76 {
99 {
77 static PlottablesMap createPlottables(QCustomPlot& plot)
100 static PlottablesMap createPlottables(QCustomPlot& plot, const std::shared_ptr<T>& dataSeries)
78 {
101 {
79 PlottablesMap result {};
102 PlottablesMap result {};
80 result.insert({ 0, new QCPColorMap { plot.xAxis, plot.yAxis } });
103 result.insert({ 0, new QCPColorMap { plot.xAxis, plot.yAxis } });
@@ -236,6 +259,54 struct PlottablesUpdater<T, typename std::enable_if_t<std::is_base_of<VectorTime
236 }
259 }
237 };
260 };
238
261
262
263 template <typename T>
264 struct PlottablesUpdater<T, typename std::enable_if_t<std::is_base_of<MultiComponentTimeSerie, T>::value>>
265 {
266 static void setPlotYAxisRange(T& dataSeries, const DateTimeRange& xAxisRange, QCustomPlot& plot)
267 {
268 double minValue = 0., maxValue = 0.;
269 if (auto serie = dynamic_cast<MultiComponentTimeSerie*>(&dataSeries))
270 {
271 // TODO
272 // std::for_each(
273 // std::begin(*serie), std::end(*serie), [&minValue, &maxValue](const auto& v) {
274 // minValue = std::min({ minValue, std::min_element(v.begin(),v.end()) });
275 // maxValue = std::max({ maxValue, std::max_element(v.begin(),v.end()) });
276 // });
277 }
278
279 plot.yAxis->setRange(QCPRange { minValue, maxValue });
280 }
281
282 static void updatePlottables(
283 T& dataSeries, PlottablesMap& plottables, const DateTimeRange& range, bool rescaleAxes)
284 {
285 for (const auto& plottable : plottables)
286 {
287 if (auto graph = dynamic_cast<QCPGraph*>(plottable.second))
288 {
289 auto dataContainer = QSharedPointer<SqpDataContainer>::create();
290 if (auto serie = dynamic_cast<MultiComponentTimeSerie*>(&dataSeries))
291 {
292 // TODO
293 }
294 graph->setData(dataContainer);
295 }
296 }
297
298 if (!plottables.empty())
299 {
300 auto plot = plottables.begin()->second->parentPlot();
301
302 if (rescaleAxes)
303 {
304 plot->rescaleAxes();
305 }
306 }
307 }
308 };
309
239 /**
310 /**
240 * Specialization of PlottablesUpdater for spectrograms
311 * Specialization of PlottablesUpdater for spectrograms
241 * @sa SpectrogramSeries
312 * @sa SpectrogramSeries
@@ -346,7 +417,7 struct PlottablesHelper : public IPlottablesHelper
346
417
347 PlottablesMap create(QCustomPlot& plot) const override
418 PlottablesMap create(QCustomPlot& plot) const override
348 {
419 {
349 return PlottablesCreator<T>::createPlottables(plot);
420 return PlottablesCreator<T>::createPlottables(plot, m_DataSeries);
350 }
421 }
351
422
352 void update(
423 void update(
@@ -395,6 +466,9 std::unique_ptr<IPlottablesHelper> createHelper(std::shared_ptr<Variable2> varia
395 case DataSeriesType::VECTOR:
466 case DataSeriesType::VECTOR:
396 return std::make_unique<PlottablesHelper<VectorTimeSerie>>(
467 return std::make_unique<PlottablesHelper<VectorTimeSerie>>(
397 std::dynamic_pointer_cast<VectorTimeSerie>(variable->data()));
468 std::dynamic_pointer_cast<VectorTimeSerie>(variable->data()));
469 case DataSeriesType::MULTICOMPONENT:
470 return std::make_unique<PlottablesHelper<MultiComponentTimeSerie>>(
471 std::dynamic_pointer_cast<MultiComponentTimeSerie>(variable->data()));
398 default:
472 default:
399 // Creates default helper
473 // Creates default helper
400 break;
474 break;
@@ -1,7 +1,8
1 import sys
1 import sys
2 sys.path.append("/home/jeandet/Documents/prog/build-SciQLop-Desktop-Debug/core")
2 sys.path.append("/home/jeandet/Documents/prog/build-SciQLop-Desktop-Debug/core")
3 import traceback
3 import os
4 import os
4 import datetime
5 from datetime import datetime, timedelta, timezone
5 import PythonProviders
6 import PythonProviders
6 import pysciqlopcore
7 import pysciqlopcore
7 import numpy as np
8 import numpy as np
@@ -21,16 +22,16 def get_sample(metadata,start,stop):
21 elif key == 'type':
22 elif key == 'type':
22 if value == 'vector':
23 if value == 'vector':
23 ts_type = pysciqlopcore.VectorTimeSerie
24 ts_type = pysciqlopcore.VectorTimeSerie
24 tstart=datetime.datetime.fromtimestamp(start)
25 tstart=datetime.datetime.utcfromtimestamp(start)
25 tend=datetime.datetime.fromtimestamp(stop)
26 tend=datetime.datetime.utcfromtimestamp(stop)
26 df = amda.get_parameter(start_time=tstart, stop_time=tend, parameter_id=param_id)
27 df = amda.get_parameter(start_time=tstart, stop_time=tend, parameter_id=param_id)
27 t = np.array([d.timestamp()-7200 for d in df.index])
28 #t = np.array([d.timestamp()-7200 for d in df.index])
29 t = np.array([d.timestamp() for d in df.index])
28 values = df.values
30 values = df.values
29 print(len(t))
30 print(len(values))
31 return ts_type(t,values)
31 return ts_type(t,values)
32 return ts_type(1)
32 return ts_type(1)
33 except Exception as e:
33 except Exception as e:
34 print(traceback.format_exc())
34 print("Error in amda.py ",str(e))
35 print("Error in amda.py ",str(e))
35 return ts_type(1)
36 return ts_type(1)
36
37
@@ -13,21 +13,6 cd = cdaweb()
13
13
14 def get_sample(name,start,stop):
14 def get_sample(name,start,stop):
15 try:
15 try:
16 tstart=datetime.datetime.fromtimestamp(start).strftime('%Y%m%dT%H%M%SZ')
17 tend=datetime.datetime.fromtimestamp(stop).strftime('%Y%m%dT%H%M%SZ')
18 req_url=f"https://cdaweb.gsfc.nasa.gov/WS/cdasr/1/dataviews/sp_phys/datasets/MMS4_SCM_SRVY_L2_SCSRVY/data/{tstart},{tend}/mms4_scm_acb_gse_scsrvy_srvy_l2?format=csv"
19 resp = requests.get(req_url,headers={"Accept":"application/json"})
20 csv_url = resp.json()['FileDescription'][0]['Name']
21 df = pds.read_csv(csv_url,comment='#',index_col=0, infer_datetime_format=True,parse_dates=True)
22 t = np.array([d.timestamp()-7200 for d in df.index])
23 values = df.values
24 return pysciqlopcore.VectorTimeSerie(t,values)
25 except Exception as e:
26 print("fuck ",str(e))
27 return pysciqlopcore.VectorTimeSerie(1)
28
29 def get_sample(name,start,stop):
30 try:
31 tstart=datetime.datetime.fromtimestamp(start)
16 tstart=datetime.datetime.fromtimestamp(start)
32 tend=datetime.datetime.fromtimestamp(stop)
17 tend=datetime.datetime.fromtimestamp(stop)
33 df = cd.get_variable(dataset="MMS2_SCM_SRVY_L2_SCSRVY",variable="mms2_scm_acb_gse_scsrvy_srvy_l2",tstart=tstart,tend=tend)
18 df = cd.get_variable(dataset="MMS2_SCM_SRVY_L2_SCSRVY",variable="mms2_scm_acb_gse_scsrvy_srvy_l2",tstart=tstart,tend=tend)
@@ -23,7 +23,7 const auto DATA_SOURCE_NAME = QStringLiteral("PythonProviders");
23 class PythonProvider : public IDataProvider
23 class PythonProvider : public IDataProvider
24 {
24 {
25 public:
25 public:
26 PythonProvider(PythonInterpreter::provider_funct_t f) : _pythonFunction { f } {}
26 explicit PythonProvider(PythonInterpreter::provider_funct_t f) : _pythonFunction { f } {}
27
27
28 PythonProvider(const PythonProvider& other) : _pythonFunction { other._pythonFunction } {}
28 PythonProvider(const PythonProvider& other) : _pythonFunction { other._pythonFunction } {}
29
29
@@ -147,5 +147,4 void PythonProviders::register_product(
147 });
147 });
148 dataSourceController.setDataSourceItem(id, std::move(root));
148 dataSourceController.setDataSourceItem(id, std::move(root));
149 dataSourceController.setDataProvider(id, std::make_unique<PythonProvider>(f));
149 dataSourceController.setDataProvider(id, std::make_unique<PythonProvider>(f));
150 std::cout << "Gone there" << std::endl;
151 }
150 }
General Comments 0
You need to be logged in to leave comments. Login now