@@ -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&) |
|
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 |
|
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 |
|
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