60 : start(s), end(e), offset(o), rect(r) {}
62 Session() : start(0), end(0), offset(0), rect(
nullptr) {}
71 bool isTemporary()
const;
80 class CaptureSession :
public Session
88 CaptureSession(
double start_,
double end_,
QCPItemRect *rect,
91 : Session(start_, end_, CAPTURE_Y, rect),
94 CaptureSession() : Session(0, 0, CAPTURE_Y,
nullptr) {}
100 G_IDLE, G_GUIDING, G_CALIBRATING, G_SUSPENDED, G_DITHERING, G_IGNORE
102 class GuideSession :
public Session
105 SimpleGuideState simpleState;
106 GuideSession(
double start_,
double end_,
QCPItemRect *rect, SimpleGuideState
state_)
107 : Session(start_, end_, GUIDE_Y, rect), simpleState(
state_) {}
108 GuideSession() : Session(0, 0, GUIDE_Y,
nullptr) {}
110 class AlignSession :
public Session
115 : Session(start_, end_, ALIGN_Y, rect), state(
state_) {}
116 AlignSession() : Session(0, 0, ALIGN_Y,
nullptr) {}
118 class MountSession :
public Session
121 ISD::Mount::Status state;
122 MountSession(
double start_,
double end_,
QCPItemRect *rect, ISD::Mount::Status
state_)
123 : Session(start_, end_, MOUNT_Y, rect), state(
state_) {}
124 MountSession() : Session(0, 0, MOUNT_Y,
nullptr) {}
126 class MountFlipSession :
public Session
129 MeridianFlipState::MeridianFlipMountState state;
130 MountFlipSession(
double start_,
double end_,
QCPItemRect *rect, MeridianFlipState::MeridianFlipMountState
state_)
131 : Session(start_, end_, MERIDIAN_MOUNT_FLIP_Y, rect), state(
state_) {}
132 MountFlipSession() : Session(0, 0, MERIDIAN_MOUNT_FLIP_Y,
nullptr) {}
134 class SchedulerJobSession :
public Session
137 SchedulerJobSession(
double start_,
double end_,
QCPItemRect *rect,
139 : Session(start_, end_, SCHEDULER_Y, rect), jobName(
jobName_), reason(
reason_) {}
140 SchedulerJobSession() : Session(0, 0, SCHEDULER_Y,
nullptr) {}
144 class FocusSession :
public Session
152 AutofocusReason reason;
154 AutofocusFailReason failCode;
166 double tempTicks, altitude, altTicks;
167 int prevPosError, thisPosError, totalTicks, adaptedPosition;
170 bool standardSession =
true;
172 FocusSession() : Session(0, 0, FOCUS_Y,
nullptr) {}
178 FocusSession(
double start_,
double end_,
QCPItemRect *rect,
181 double focusPosition();
191 return m_LogText.
join(
"\n");
199 void captureComplete(
const QVariantMap &metadata);
204 void guideState(Ekos::GuideState status);
205 void guideStats(
double raError,
double decError,
int raPulse,
int decPulse,
209 void autofocusStarting(
double temperature,
const QString &filter,
const AutofocusReason reason,
const QString &reasonInfo);
210 void autofocusComplete(
const double temperature,
const QString &filter,
const QString &points,
const bool useWeights,
212 void adaptiveFocusComplete(
const QString &filter,
double temperature,
double tempTicks,
213 double altitude,
double altTicks,
int prevPosError,
int thisPosError,
int totalTicks,
215 void autofocusAborted(
const QString &filter,
const QString &points,
const bool useWeights,
216 const AutofocusFailReason failCode,
const QString failCodeInfo);
223 void mountState(ISD::Mount::Status status);
224 void mountCoords(
const SkyPoint &position, ISD::Mount::PierSide pierSide,
const dms &haValue);
225 void mountFlipStatus(Ekos::MeridianFlipState::MeridianFlipMountState status);
227 void schedulerJobStarted(
const QString &jobName);
229 void newTargetDistance(
double targetDistance);
233 void userSetLeftAxis(
QCPAxis *axis);
238 void appendLogText(
const QString &);
243 void newLog(
const QString &text);
254 void processCaptureAborted(
double time,
double exposureSeconds,
bool batchMode =
false);
255 void processAutofocusStarting(
double time,
double temperature,
const QString &filter,
const AutofocusReason reason,
const QString &reasonInfo);
256 void processAutofocusComplete(
double time,
const QString &filter,
const QString &points,
const QString &curve,
const QString &title,
bool batchMode);
257 void processAutofocusCompleteV2(
double time,
double temperature,
const QString &filter,
const AutofocusReason reason,
const QString &reasonInfo,
258 const QString &points,
const bool useWeights,
const QString &curve,
const QString &title,
bool batchMode =
false);
259 void processAutofocusAborted(
double time,
const QString &filter,
const QString &points,
bool batchMode);
260 void processAutofocusAbortedV2(
double time,
double temperature,
const QString &filter,
const AutofocusReason reason,
const QString &reasonInfo,
261 const QString &points,
const bool useWeights,
const AutofocusFailReason failCode,
const QString failCodeInfo,
bool batchMode =
false);
262 void processAdaptiveFocusComplete(
double time,
const QString &filter,
double temperature,
double tempTicks,
263 double altitude,
double altTicks,
int prevPosError,
int thisPosError,
int totalTicks,
264 int position,
bool focuserMoved,
bool batchMode =
false);
265 void processTemperature(
double time,
double temperature,
bool batchMode =
false);
266 void processGuideState(
double time,
const QString &state,
bool batchMode =
false);
267 void processGuideStats(
double time,
double raError,
double decError,
int raPulse,
269 void processMountCoords(
double time,
double ra,
double dec,
double az,
double alt,
270 int pierSide,
double ha,
bool batchMode =
false);
272 void processMountState(
double time,
const QString &statusString,
bool batchMode =
false);
273 void processAlignState(
double time,
const QString &statusString,
bool batchMode =
false);
274 void processMountFlipState(
double time,
const QString &statusString,
bool batchMode =
false);
276 void processSchedulerJobStarted(
double time,
const QString &jobName);
277 void processSchedulerJobEnded(
double time,
const QString &jobName,
const QString &reason,
bool batchMode =
false);
278 void checkForMissingSchedulerJobEnd(
double time);
279 void processTargetDistance(
double time,
double targetDistance,
bool batchMode =
false);
285 void scroll(
int value);
290 void statsYZoomOut();
294 void adjustView(
double time);
301 void updateMaxX(
double time);
307 void captureSessionClicked(CaptureSession &c,
bool doubleClick);
308 void focusSessionClicked(FocusSession &c,
bool doubleClick);
309 void guideSessionClicked(GuideSession &c,
bool doubleClick);
310 void mountSessionClicked(MountSession &c,
bool doubleClick);
311 void alignSessionClicked(AlignSession &c,
bool doubleClick);
312 void mountFlipSessionClicked(MountFlipSession &c,
bool doubleClick);
313 void schedulerSessionClicked(SchedulerJobSession &c,
bool doubleClick);
322 void setVisibility();
328 void setupKeyboardShortcuts(
QWidget *plot);
333 void highlightTimelineItem(
const Session &session);
334 void unhighlightTimelineItem();
338 void changeTimelineItem(
bool next);
340 void nextTimelineItem();
341 void previousTimelineItem();
357 QCPItemRect * addSession(
double start,
double end,
double y,
364 void addTemporarySession(Session *session,
double time,
double duration,
366 void removeTemporarySession(Session *session);
367 void removeTemporarySessions();
368 void adjustTemporarySession(Session *session);
369 void adjustTemporarySessions();
373 double snr,
int numStars,
double skyBackground,
double time);
376 double skyBackground,
double drift,
double rms,
double time);
377 void addMountCoords(
double ra,
double dec,
double az,
double alt,
int pierSide,
378 double ha,
double time);
380 const double time,
double startTime);
381 void addTemperature(
double temperature,
const double time);
382 void addFocusPosition(
double focusPosition,
double time);
383 void addTargetDistance(
double targetDistance,
const double time);
389 template <
typename Func>
398 void initStatsPlot();
399 void initTimelinePlot();
400 void initGraphicsPlot();
401 void initInputSelection();
407 void displayGuideGraphics(
double start,
double end,
double *
raRMS,
411 void updateStatsValues();
413 void setStatsCursor(
double time);
414 void removeStatsCursor();
415 void keepCurrent(
int state);
418 void initStatsCheckboxes();
422 void resetGraphicsPlot();
425 void resetCaptureState();
426 void resetAutofocusState();
427 void resetGuideState();
428 void resetGuideStats();
429 void resetAlignState();
430 void resetMountState();
431 void resetMountCoords();
432 void resetMountFlipState();
433 void resetSchedulerJob();
434 void resetTemperature();
437 double readDataFromFile(
const QString &filename);
438 double processInputLine(
const QString &line);
441 void displayFITS(
const QString &filename);
450 void appendToLog(
const QString &lines);
459 double upper = YAxisInfo::UPPER_RESCALE);
463 bool restoreYAxes(
const QString &encoding);
466 void setLeftAxis(
QCPAxis *axis);
473 QCPAxis *activeYAxis {
nullptr };
479 std::map<QObject*, YAxisInfo> yAxisMap;
484 bool logInitialized {
false };
489 double plotStart { 0.0 };
490 double plotWidth { 10.0 };
491 double maxXValue { 10.0 };
496 QString analyzeTimeZone {
"" };
497 bool startTimeInitialized {
false };
506 std::unique_ptr<RmsFilter> guiderRms;
507 std::unique_ptr<RmsFilter> captureRms;
510 double yAxisInitialPos = { 0 };
528 double statsCursorTime { -1 };
535 bool runtimeDisplay {
true };
539 CaptureSession temporaryCaptureSession;
540 FocusSession temporaryFocusSession;
541 GuideSession temporaryGuideSession;
542 AlignSession temporaryAlignSession;
543 MountSession temporaryMountSession;
544 MountFlipSession temporaryMountFlipSession;
545 SchedulerJobSession temporarySchedulerJobSession;
548 double captureStartedTime { -1 };
549 double previousCaptureStartedTime { 1 };
550 double previousCaptureCompletedTime { 1 };
551 QString captureStartedFilter {
"" };
554 double autofocusStartedTime { -1 };
555 QString autofocusStartedFilter {
"" };
556 double autofocusStartedTemperature { 0 };
557 AutofocusReason autofocusStartedReason { AutofocusReason::FOCUS_NONE};
558 QString autofocusStartedReasonInfo {
"" };
561 SimpleGuideState lastGuideStateStarted { G_IDLE };
562 double guideStateStartedTime { -1 };
565 double lastGuideStatsTime { -1 };
566 double lastCaptureRmsTime { -1 };
567 int numStarsMax { 0 };
569 double skyBgMax { 0 };
571 int numCaptureStarsMax { 0 };
572 double lastTemperature { -1000 };
577 double lastAlignStateStartedTime { -1 };
580 double mountStateStartedTime { -1 };
581 ISD::Mount::Status lastMountState { ISD::Mount::Status::MOUNT_IDLE };
586 double lastMountRa { -1 };
587 double lastMountDec { -1 };
588 double lastMountHa { -1 };
589 double lastMountAz { -1 };
590 double lastMountAlt { -1 };
591 int lastMountPierSide { -1 };
594 MeridianFlipState::MeridianFlipMountState lastMountFlipStateReceived { MeridianFlipState::MOUNT_FLIP_NONE};
595 MeridianFlipState::MeridianFlipMountState lastMountFlipStateStarted { MeridianFlipState::MOUNT_FLIP_NONE };
596 double mountFlipStateStartedTime { -1 };
599 double schedulerJobStartedTime;
600 QString schedulerJobStartedJobName;
605 void setSelectedSession(
const Session &s);
606 void clearSelectedSession();
607 Session m_selectedSession;
613 static constexpr int CAPTURE_Y = 1;
614 static constexpr int FOCUS_Y = 2;
615 static constexpr int ALIGN_Y = 3;
616 static constexpr int GUIDE_Y = 4;
617 static constexpr int MERIDIAN_MOUNT_FLIP_Y = 5;
618 static constexpr int MOUNT_Y = 6;
619 static constexpr int SCHEDULER_Y = 7;
620 static constexpr int LAST_Y = 8;