Kstars

ekos.cpp
1/*
2 SPDX-FileCopyrightText: 2017 Jasem Mutlaq <mutlaqja@ikarustech.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "ekos.h"
8
9#include <gsl/gsl_fit.h>
10#include <gsl/gsl_vector.h>
11#include <gsl/gsl_matrix.h>
12#include <gsl/gsl_multifit.h>
13
14#include <QDebug>
15
16namespace Ekos
17{
18const QString getGuideStatusString(GuideState state, bool translated)
19{
20 return translated ? guideStates[state].toString() : guideStates[state].untranslatedText();
21}
22const QString getCaptureStatusString(CaptureState state, bool translated)
23{
24 return translated ? captureStates[state].toString() : captureStates[state].untranslatedText();
25}
26const QString getFocusStatusString(FocusState state, bool translated)
27{
28 return translated ? focusStates[state].toString() : focusStates[state].untranslatedText();
29}
30const QString getAlignStatusString(AlignState state, bool translated)
31{
32 return translated ? alignStates[state].toString() : alignStates[state].untranslatedText();
33}
34const QString getFilterStatusString(FilterState state, bool translated)
35{
36 return translated ? filterStates[state].toString() : filterStates[state].untranslatedText();
37}
38const QString getSchedulerStatusString(SchedulerState state, bool translated)
39{
40 return translated ? schedulerStates[state].toString() : schedulerStates[state].untranslatedText();
41}
42
43/* Taken from https://codereview.stackexchange.com/questions/71300/wrapper-function-to-do-polynomial-fits-with-gsl */
44std::vector<double> gsl_polynomial_fit(const double *const data_x, const double *const data_y, const int n,
45 const int order, double &chisq)
46{
47 int status = 0;
48 std::vector<double> vc;
49 gsl_vector *y, *c;
50 gsl_matrix *X, *cov;
51 y = gsl_vector_alloc(n);
52 c = gsl_vector_alloc(order + 1);
53 X = gsl_matrix_alloc(n, order + 1);
54 cov = gsl_matrix_alloc(order + 1, order + 1);
55
56 for (int i = 0; i < n; i++)
57 {
58 for (int j = 0; j < order + 1; j++)
59 {
60 gsl_matrix_set(X, i, j, pow(data_x[i], j));
61 }
62 gsl_vector_set(y, i, data_y[i]);
63 }
64
65 // Must turn off error handler or it aborts on error
66 gsl_set_error_handler_off();
67
68 gsl_multifit_linear_workspace *work = gsl_multifit_linear_alloc(n, order + 1);
69 status = gsl_multifit_linear(X, y, c, cov, &chisq, work);
70
71 if (status != GSL_SUCCESS)
72 {
73 qDebug() << Q_FUNC_INFO << "GSL multifit error:" << gsl_strerror(status);
74 return vc;
75 }
76
77 gsl_multifit_linear_free(work);
78
79 for (int i = 0; i < order + 1; i++)
80 {
81 vc.push_back(gsl_vector_get(c, i));
82 }
83
84 gsl_vector_free(y);
85 gsl_vector_free(c);
86 gsl_matrix_free(X);
87 gsl_matrix_free(cov);
88
89 return vc;
90}
91}
92
93QDBusArgument &operator<<(QDBusArgument &argument, const Ekos::CommunicationStatus &source)
94{
95 argument.beginStructure();
96 argument << static_cast<int>(source);
97 argument.endStructure();
98 return argument;
99}
100
101const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::CommunicationStatus &dest)
102{
103 int a;
104 argument.beginStructure();
105 argument >> a;
106 argument.endStructure();
107 dest = static_cast<Ekos::CommunicationStatus>(a);
108 return argument;
109}
110
112{
113 argument.beginStructure();
114 argument << static_cast<int>(source);
115 argument.endStructure();
116 return argument;
117}
118
119const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::CaptureState &dest)
120{
121 int a;
122 argument.beginStructure();
123 argument >> a;
124 argument.endStructure();
125 dest = static_cast<Ekos::CaptureState>(a);
126 return argument;
127}
128
129QDBusArgument &operator<<(QDBusArgument &argument, const Ekos::FocusState &source)
130{
131 argument.beginStructure();
132 argument << static_cast<int>(source);
133 argument.endStructure();
134 return argument;
135}
136
137const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::FocusState &dest)
138{
139 int a;
140 argument.beginStructure();
141 argument >> a;
142 argument.endStructure();
143 dest = static_cast<Ekos::FocusState>(a);
144 return argument;
145}
146
147QDBusArgument &operator<<(QDBusArgument &argument, const Ekos::GuideState &source)
148{
149 argument.beginStructure();
150 argument << static_cast<int>(source);
151 argument.endStructure();
152 return argument;
153}
154
155const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::GuideState &dest)
156{
157 int a;
158 argument.beginStructure();
159 argument >> a;
160 argument.endStructure();
161 dest = static_cast<Ekos::GuideState>(a);
162 return argument;
163}
164
166{
167 argument.beginStructure();
168 argument << static_cast<int>(source);
169 argument.endStructure();
170 return argument;
171}
172
173const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::AlignState &dest)
174{
175 int a;
176 argument.beginStructure();
177 argument >> a;
178 argument.endStructure();
179 dest = static_cast<Ekos::AlignState>(a);
180 return argument;
181}
182
183QDBusArgument &operator<<(QDBusArgument &argument, const Ekos::SchedulerState &source)
184{
185 argument.beginStructure();
186 argument << static_cast<int>(source);
187 argument.endStructure();
188 return argument;
189}
190
191const QDBusArgument &operator>>(const QDBusArgument &argument, Ekos::SchedulerState &dest)
192{
193 int a;
194 argument.beginStructure();
195 argument >> a;
196 argument.endStructure();
197 dest = static_cast<Ekos::SchedulerState>(a);
198 return argument;
199}
The SchedulerState class holds all attributes defining the scheduler's state.
Ekos is an advanced Astrophotography tool for Linux.
Definition align.cpp:79
AlignState
Definition ekos.h:145
CaptureState
Capture states.
Definition ekos.h:92
KCALENDARCORE_EXPORT QDataStream & operator>>(QDataStream &in, const KCalendarCore::Alarm::Ptr &)
KCALENDARCORE_EXPORT QDataStream & operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &)
NETWORKMANAGERQT_EXPORT NetworkManager::Status status()
void beginStructure()
void endStructure()
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Jul 26 2024 11:59:51 by doxygen 1.11.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.