[arch-commits] Commit in kstars/repos/community-x86_64 (4 files)
Antonio Rojas
arojas at gemini.archlinux.org
Mon May 23 06:27:09 UTC 2022
Date: Monday, May 23, 2022 @ 06:27:08
Author: arojas
Revision: 1210089
archrelease: copy trunk to community-x86_64
Added:
kstars/repos/community-x86_64/PKGBUILD
(from rev 1210088, kstars/trunk/PKGBUILD)
kstars/repos/community-x86_64/stellarsolver2.patch
(from rev 1210088, kstars/trunk/stellarsolver2.patch)
Deleted:
kstars/repos/community-x86_64/PKGBUILD
kstars/repos/community-x86_64/stellarsolver2.patch
----------------------+
PKGBUILD | 64 -
stellarsolver2.patch | 2166 ++++++++++++++++++++++++-------------------------
2 files changed, 1115 insertions(+), 1115 deletions(-)
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2022-05-23 06:26:56 UTC (rev 1210088)
+++ PKGBUILD 2022-05-23 06:27:08 UTC (rev 1210089)
@@ -1,32 +0,0 @@
-# Maintainer: Felix Yan <felixonamrs at archlinux.org>
-# Maintainer: Antonio Rojas <arojas at archlinux.org>
-# Contributor: Andrea Scarpino <andrea at archlinux.org>
-
-pkgname=kstars
-pkgver=3.5.8
-pkgrel=1
-epoch=1
-pkgdesc='Desktop Planetarium'
-url='https://kde.org/applications/education/kstars/'
-arch=(x86_64)
-license=(GPL LGPL FDL)
-depends=(stellarsolver libraw kplotting knewstuff knotifyconfig qt5-datavis3d libindi qt5-quickcontrols qt5-websockets qtkeychain
- breeze-icons hicolor-icon-theme)
-makedepends=(extra-cmake-modules kdoctools eigen)
-optdepends=('xplanet: XPlanet support')
-source=(https://download.kde.org/stable/$pkgname/$pkgname-$pkgver.tar.xz{,.sig})
-sha256sums=('660d902837b7abf3810d6e24f72fd84f0444a29bd7d43e1896b19fece1c88c3f'
- 'SKIP')
-validpgpkeys=(259D9FCEE9175351965633696D9CE2AEE028C4F3) # Jasem Mutlaq <mutlaqja at ikarustech.com>
-
-build() {
- cmake -B build -S $pkgname-$pkgver \
- -DBUILD_TESTING=OFF \
- -DCMAKE_C_FLAGS="$CFLAGS -ffat-lto-objects" \
- -DCMAKE_CXX_FLAGS="$CXXFLAGS -ffat-lto-objects"
- cmake --build build
-}
-
-package() {
- DESTDIR="$pkgdir" cmake --install build
-}
Copied: kstars/repos/community-x86_64/PKGBUILD (from rev 1210088, kstars/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2022-05-23 06:27:08 UTC (rev 1210089)
@@ -0,0 +1,32 @@
+# Maintainer: Felix Yan <felixonamrs at archlinux.org>
+# Maintainer: Antonio Rojas <arojas at archlinux.org>
+# Contributor: Andrea Scarpino <andrea at archlinux.org>
+
+pkgname=kstars
+pkgver=3.5.8
+pkgrel=2
+epoch=1
+pkgdesc='Desktop Planetarium'
+url='https://kde.org/applications/education/kstars/'
+arch=(x86_64)
+license=(GPL LGPL FDL)
+depends=(stellarsolver libraw kplotting knewstuff knotifyconfig qt5-datavis3d libindi qt5-quickcontrols qt5-websockets qtkeychain
+ breeze-icons hicolor-icon-theme)
+makedepends=(extra-cmake-modules kdoctools eigen)
+optdepends=('xplanet: XPlanet support')
+source=(https://download.kde.org/stable/$pkgname/$pkgname-$pkgver.tar.xz{,.sig})
+sha256sums=('660d902837b7abf3810d6e24f72fd84f0444a29bd7d43e1896b19fece1c88c3f'
+ 'SKIP')
+validpgpkeys=(259D9FCEE9175351965633696D9CE2AEE028C4F3) # Jasem Mutlaq <mutlaqja at ikarustech.com>
+
+build() {
+ cmake -B build -S $pkgname-$pkgver \
+ -DBUILD_TESTING=OFF \
+ -DCMAKE_C_FLAGS="$CFLAGS -ffat-lto-objects" \
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS -ffat-lto-objects"
+ cmake --build build
+}
+
+package() {
+ DESTDIR="$pkgdir" cmake --install build
+}
Deleted: stellarsolver2.patch
===================================================================
--- stellarsolver2.patch 2022-05-23 06:26:56 UTC (rev 1210088)
+++ stellarsolver2.patch 2022-05-23 06:27:08 UTC (rev 1210089)
@@ -1,1083 +0,0 @@
-From cf5db0400263577fb4805fad64fd5ad67c3b3bec Mon Sep 17 00:00:00 2001
-From: Robert Lancaster <rlancaste at gmail.com>
-Date: Wed, 2 Mar 2022 22:04:41 +0000
-Subject: [PATCH] Updating KStars to support StellarSolver 2.0
-
----
- CMakeLists.txt | 2 +-
- Tests/kstars_ui/test_ekos_align.cpp | 2 +-
- .../kstars_ui/test_ekos_meridianflip_base.cpp | 2 +-
- kstars/auxiliary/ksutils.cpp | 11 +
- kstars/ekos/align/align.cpp | 18 +-
- kstars/ekos/align/opsalign.ui | 7 +-
- kstars/ekos/align/opsprograms.cpp | 30 +-
- kstars/ekos/align/opsprograms.ui | 28 +-
- kstars/ekos/align/remoteastrometryparser.cpp | 10 +-
- kstars/ekos/align/remoteastrometryparser.h | 2 +-
- kstars/ekos/auxiliary/solverutils.cpp | 14 +-
- .../ekos/auxiliary/stellarsolverprofile.cpp | 50 +--
- .../auxiliary/stellarsolverprofileeditor.cpp | 9 +-
- .../auxiliary/stellarsolverprofileeditor.ui | 286 +++++++++++-------
- kstars/fitsviewer/fitssepdetector.cpp | 6 +-
- kstars/fitsviewer/structuredefinitions.h | 84 +++--
- kstars/kstars.kcfg | 5 +
- 17 files changed, 353 insertions(+), 213 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 746f2f351..8f26f7a66 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -215,7 +215,7 @@ MACRO_BOOL_TO_01(INDI_FOUND HAVE_INDI)
- set_package_properties(INDI PROPERTIES DESCRIPTION "Astronomical instrumentation control" URL "https://www.indilib.org" TYPE OPTIONAL PURPOSE "Support for controlling astronomical devices on Linux with KStars.")
-
- if (INDI_FOUND AND NOT ANDROID)
-- find_package(StellarSolver REQUIRED)
-+ find_package(StellarSolver REQUIRED 2.0)
- endif(INDI_FOUND AND NOT ANDROID)
- MACRO_BOOL_TO_01(StellarSolver_FOUND HAVE_STELLARSOLVER)
-
-diff --git a/Tests/kstars_ui/test_ekos_align.cpp b/Tests/kstars_ui/test_ekos_align.cpp
-index 4e5a9f482..ce0f3c3f2 100644
---- a/Tests/kstars_ui/test_ekos_align.cpp
-+++ b/Tests/kstars_ui/test_ekos_align.cpp
-@@ -266,7 +266,7 @@ void TestEkosAlign::prepareTestCase()
- // select StellarSolver
- Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
- // select fast solve profile option
-- Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
-+ Options::setSolveOptionsProfile(SSolver::Parameters::SINGLE_THREAD_SOLVING);
- // select the "Slew to Target" mode
- KTRY_SET_RADIOBUTTON(ekos->alignModule(), slewR, true);
- // reduce the accuracy to avoid testing problems
-diff --git a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-index ea58b07fa..0152c3324 100644
---- a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-+++ b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-@@ -88,7 +88,7 @@ bool TestEkosMeridianFlipBase::startEkosProfile()
- // select StellarSolver
- Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
- // select fast solve profile option
-- Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
-+ Options::setSolveOptionsProfile(SSolver::Parameters::SINGLE_THREAD_SOLVING);
- // select the "Slew to Target" mode
- KTRY_SET_RADIOBUTTON_SUB(ekos->alignModule(), slewR, true);
-
-diff --git a/kstars/auxiliary/ksutils.cpp b/kstars/auxiliary/ksutils.cpp
-index 1b9b53f6a..57547a245 100644
---- a/kstars/auxiliary/ksutils.cpp
-+++ b/kstars/auxiliary/ksutils.cpp
-@@ -1165,6 +1165,17 @@ QString getDefaultPath(const QString &option)
- #endif
- return prefix + "/bin/solve-field";
- }
-+ else if (option == "WatneyBinary")
-+ {
-+#if defined(ASTROMETRY_PREFIX)
-+ return QString(ASTROMETRY_PREFIX "/bin/watney-solver");
-+#elif defined(Q_OS_OSX)
-+ return "/usr/local/bin/watney-solver";
-+#elif defined(Q_OS_WIN)
-+ return "C:/Program Files/watney-solve-win-x64-1/watney-solve.exe";
-+#endif
-+ return prefix + "/bin/watney-solver";
-+ }
- else if (option == "SextractorBinary")
- {
- #if defined(SEXTRACTOR_PREFIX)
-diff --git a/kstars/ekos/align/align.cpp b/kstars/ekos/align/align.cpp
-index d2b31a240..debf6d0dc 100644
---- a/kstars/ekos/align/align.cpp
-+++ b/kstars/ekos/align/align.cpp
-@@ -1867,7 +1867,7 @@ void Align::startSolving()
-
- if (solverModeButtonGroup->checkedId() == SOLVER_LOCAL)
- {
-- if(Options::solverType() != SSolver::SOLVER_ASTAP) //You don't need astrometry index files to use ASTAP
-+ if(Options::solverType() != SSolver::SOLVER_ASTAP && Options::solverType() != SSolver::SOLVER_WATNEYASTROMETRY) //You don't need astrometry index files to use ASTAP or Watney
- {
- bool foundAnIndex = false;
- for(QString dataDir : astrometryDataDirs)
-@@ -1916,16 +1916,19 @@ void Align::startSolving()
- m_StellarSolver->setParameters(m_StellarSolverProfiles.at(Options::solveOptionsProfile()));
-
- const SSolver::SolverType type = static_cast<SSolver::SolverType>(m_StellarSolver->property("SolverType").toInt());
-- if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP)
-+ if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP || type == SSolver::SOLVER_WATNEYASTROMETRY)
- {
- QString filename = QDir::tempPath() + QString("/solver%1.fits").arg(QUuid::createUuid().toString().remove(
- QRegularExpression("[-{}]")));
- alignView->saveImage(filename);
- m_StellarSolver->setProperty("FileToProcess", filename);
-- m_StellarSolver->setProperty("SextractorBinaryPath", Options::sextractorBinary());
-- m_StellarSolver->setProperty("SolverPath", Options::astrometrySolverBinary());
-- m_StellarSolver->setProperty("ASTAPBinaryPath", Options::aSTAPExecutable());
-- m_StellarSolver->setProperty("WCSPath", Options::astrometryWCSInfo());
-+ ExternalProgramPaths externalPaths;
-+ externalPaths.sextractorBinaryPath = Options::sextractorBinary();
-+ externalPaths.solverPath = Options::astrometrySolverBinary();
-+ externalPaths.astapBinaryPath = Options::aSTAPExecutable();
-+ externalPaths.watneyBinaryPath = Options::watneyBinary();
-+ externalPaths.wcsPath = Options::astrometryWCSInfo();
-+ m_StellarSolver->setExternalFilePaths(externalPaths);
-
- //No need for a conf file this way.
- m_StellarSolver->setProperty("AutoGenerateAstroConfig", true);
-@@ -2042,8 +2045,7 @@ void Align::solverComplete()
- else
- {
- FITSImage::Solution solution = m_StellarSolver->getSolution();
-- // Would be better if parity was a bool field instead of a QString with "pos" and "neg" as possible values.
-- const bool eastToTheRight = solution.parity == "pos" ? false : true;
-+ const bool eastToTheRight = solution.parity == FITSImage::POSITIVE? false : true;
- solverFinished(solution.orientation, solution.ra, solution.dec, solution.pixscale, eastToTheRight);
- }
- }
-diff --git a/kstars/ekos/align/opsalign.ui b/kstars/ekos/align/opsalign.ui
-index b472917a2..808b05e8c 100644
---- a/kstars/ekos/align/opsalign.ui
-+++ b/kstars/ekos/align/opsalign.ui
-@@ -6,7 +6,7 @@
- <rect>
- <x>0</x>
- <y>0</y>
-- <width>444</width>
-+ <width>470</width>
- <height>179</height>
- </rect>
- </property>
-@@ -108,6 +108,11 @@
- <string>Local ASTAP</string>
- </property>
- </item>
-+ <item>
-+ <property name="text">
-+ <string>Local Watney</string>
-+ </property>
-+ </item>
- <item>
- <property name="text">
- <string>Online Astrometry</string>
-diff --git a/kstars/ekos/align/opsprograms.cpp b/kstars/ekos/align/opsprograms.cpp
-index ff76214a5..f0e7e467b 100644
---- a/kstars/ekos/align/opsprograms.cpp
-+++ b/kstars/ekos/align/opsprograms.cpp
-@@ -43,37 +43,15 @@ void OpsPrograms::slotApply()
-
- void OpsPrograms::loadDefaultPaths(int option)
- {
-- ExternalProgramPaths paths;
--
-- switch(option)
-- {
-- case 0:
-- return;
-- break;
-- case 1:
-- paths = StellarSolver::getLinuxDefaultPaths();
-- break;
-- case 2:
-- paths = StellarSolver::getLinuxInternalPaths();
-- break;
-- case 3:
-- paths = StellarSolver::getMacHomebrewPaths();
-- break;
-- case 4:
-- paths = StellarSolver::getWinANSVRPaths();
-- break;
-- case 5:
-- paths = StellarSolver::getWinCygwinPaths();
-- break;
-- default:
-- paths = StellarSolver::getLinuxDefaultPaths();
-- break;
-- }
-+ if(option == 0)
-+ return;
-+ ExternalProgramPaths paths = StellarSolver::getDefaultExternalPaths((SSolver::ComputerSystemType) (option - 1));
-
- kcfg_SextractorBinary->setText(paths.sextractorBinaryPath);
- kcfg_AstrometryConfFile->setText(paths.confPath);
- kcfg_AstrometrySolverBinary->setText(paths.solverPath);
- kcfg_ASTAPExecutable->setText(paths.astapBinaryPath);
-+ kcfg_WatneyBinary->setText(paths.watneyBinaryPath);
- kcfg_AstrometryWCSInfo->setText(paths.wcsPath);
-
- defaultPathSelector->setCurrentIndex(0);
-diff --git a/kstars/ekos/align/opsprograms.ui b/kstars/ekos/align/opsprograms.ui
-index fcf59bcea..b3b505c7c 100644
---- a/kstars/ekos/align/opsprograms.ui
-+++ b/kstars/ekos/align/opsprograms.ui
-@@ -7,7 +7,7 @@
- <x>0</x>
- <y>0</y>
- <width>658</width>
-- <height>481</height>
-+ <height>517</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
-@@ -169,6 +169,32 @@
- </layout>
- </widget>
- </item>
-+ <item>
-+ <widget class="QGroupBox" name="groupBox_6">
-+ <property name="title">
-+ <string>Watney Solver</string>
-+ </property>
-+ <layout class="QGridLayout" name="gridLayout_5">
-+ <item row="0" column="0">
-+ <widget class="QLabel" name="label_21">
-+ <property name="text">
-+ <string>Watney binary:</string>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="0" column="1">
-+ <widget class="QLineEdit" name="kcfg_WatneyBinary">
-+ <property name="toolTip">
-+ <string>Astrometry.net solve-field binary</string>
-+ </property>
-+ <property name="text">
-+ <string/>
-+ </property>
-+ </widget>
-+ </item>
-+ </layout>
-+ </widget>
-+ </item>
- <item>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="title">
-diff --git a/kstars/ekos/align/remoteastrometryparser.cpp b/kstars/ekos/align/remoteastrometryparser.cpp
-index 89e1649b2..99d51e348 100644
---- a/kstars/ekos/align/remoteastrometryparser.cpp
-+++ b/kstars/ekos/align/remoteastrometryparser.cpp
-@@ -121,9 +121,9 @@ bool RemoteAstrometryParser::sendArgs(const QStringList &args)
- QStringList solverArgs = args;
- // Add parity option if none is give and we already know parity before
- // and is NOT a blind solve
-- if (Options::astrometryDetectParity() && parity.isEmpty() == false && args.contains("parity") == false &&
-+ if (Options::astrometryDetectParity() && args.contains("parity") == false &&
- (args.contains("-3") || args.contains("-L")))
-- solverArgs << "--parity" << parity;
-+ solverArgs << "--parity" << QString::number(parity);
-
- //for (int i = 0; i < solverSettings->ntp; i++)
- for (auto &it : *solverSettings)
-@@ -284,9 +284,9 @@ void RemoteAstrometryParser::checkResults(INumberVectorProperty *nvp)
- else if (!strcmp(nvp->np[i].name, "ASTROMETRY_RESULTS_PARITY"))
- {
- if (nvp->np[i].value == 1)
-- parity = "pos";
-+ parity = FITSImage::POSITIVE;
- else if (nvp->np[i].value == -1)
-- parity = "neg";
-+ parity = FITSImage::NEGATIVE;
- }
- }
-
-@@ -295,7 +295,7 @@ void RemoteAstrometryParser::checkResults(INumberVectorProperty *nvp)
- int elapsed = (int)round(solverTimer.elapsed() / 1000.0);
- align->appendLogText(i18np("Solver completed in %1 second.", "Solver completed in %1 seconds.", elapsed));
- stopSolver();
-- emit solverFinished(orientation, ra, de, pixscale, parity != "pos");
-+ emit solverFinished(orientation, ra, de, pixscale, parity != FITSImage::POSITIVE);
- }
- }
- }
-diff --git a/kstars/ekos/align/remoteastrometryparser.h b/kstars/ekos/align/remoteastrometryparser.h
-index 9ca103d7e..ccb350008 100644
---- a/kstars/ekos/align/remoteastrometryparser.h
-+++ b/kstars/ekos/align/remoteastrometryparser.h
-@@ -53,7 +53,7 @@ class RemoteAstrometryParser : public AstrometryParser
- bool captureRunning { false };
- Align *align { nullptr };
- QElapsedTimer solverTimer;
-- QString parity;
-+ FITSImage::Parity parity = FITSImage::BOTH;
- QString targetCCD;
- };
- }
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofile.cpp b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-index 909ae58ed..7109df6e4 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-+++ b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-@@ -24,8 +24,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
- focusDefault.keepNum = 100;
- focusDefault.minarea = 20;
- focusDefault.maxEllipse = 1.5;
-- // JM 2021.10.03: Seems to be a lot more reliable than 2 FWHM
-- StellarSolver::createConvFilterFromFWHM(&focusDefault, 1);
-+ focusDefault.convFilterType = SSolver::CONV_GAUSSIAN;
-+ focusDefault.fwhm = 1;
- focusDefault.r_min = 5;
- focusDefault.maxSize = 10;
- focusDefault.removeBrightest = 10;
-@@ -37,7 +37,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
- stars.listName = "2-AllStars";
- stars.description = i18n("Profile for the source extraction of all the stars in an image.");
- stars.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&stars, 1);
-+ stars.convFilterType = SSolver::CONV_GAUSSIAN;
-+ stars.fwhm = 1;
- stars.r_min = 2;
- profileList.append(stars);
-
-@@ -45,7 +46,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
- smallStars.listName = "3-SmallSizedStars";
- smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
- smallStars.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
-+ smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
-+ smallStars.fwhm = 1;
- smallStars.r_min = 2;
- smallStars.maxSize = 5;
- smallStars.initialKeep = 500;
-@@ -57,7 +59,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
- mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
- mid.maxEllipse = 1.5;
- mid.minarea = 20;
-- StellarSolver::createConvFilterFromFWHM(&mid, 4);
-+ mid.convFilterType = SSolver::CONV_GAUSSIAN;
-+ mid.fwhm = 4;
- mid.r_min = 5;
- mid.removeDimmest = 20;
- mid.minSize = 2;
-@@ -71,7 +74,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
- big.description = i18n("Profile optimized for source extraction of larger stars.");
- big.maxEllipse = 1.5;
- big.minarea = 40;
-- StellarSolver::createConvFilterFromFWHM(&big, 8);
-+ big.convFilterType = SSolver::CONV_GAUSSIAN;
-+ big.fwhm = 8;
- big.r_min = 20;
- big.minSize = 5;
- big.initialKeep = 500;
-@@ -101,7 +105,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
- stars.listName = "2-AllStars";
- stars.description = i18n("Profile for the source extraction of all the stars in an image.");
- stars.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&stars, 1);
-+ stars.convFilterType = SSolver::CONV_GAUSSIAN;
-+ stars.fwhm = 1;
- stars.r_min = 2;
- profileList.append(stars);
-
-@@ -109,7 +114,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
- smallStars.listName = "3-SmallSizedStars";
- smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
- smallStars.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
-+ smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
-+ smallStars.fwhm = 1;
- smallStars.r_min = 2;
- smallStars.maxSize = 5;
- smallStars.initialKeep = 500;
-@@ -121,7 +127,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
- mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
- mid.maxEllipse = 1.5;
- mid.minarea = 20;
-- StellarSolver::createConvFilterFromFWHM(&mid, 4);
-+ mid.convFilterType = SSolver::CONV_GAUSSIAN;
-+ mid.fwhm = 4;
- mid.r_min = 5;
- mid.removeDimmest = 20;
- mid.minSize = 2;
-@@ -135,7 +142,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
- big.description = i18n("Profile optimized for source extraction of larger stars.");
- big.maxEllipse = 1.5;
- big.minarea = 40;
-- StellarSolver::createConvFilterFromFWHM(&big, 8);
-+ big.convFilterType = SSolver::CONV_GAUSSIAN;
-+ big.fwhm = 8;
- big.r_min = 20;
- big.minSize = 5;
- big.initialKeep = 500;
-@@ -152,8 +160,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
- SSolver::Parameters defaultProfile;
- defaultProfile.listName = "1-Default";
- defaultProfile.description = i18n("Default profile. Generic and not optimized for any specific purpose.");
-- // JM 2021.10.03: Seems to help in cases where solver fails to solve any images.
-- StellarSolver::createConvFilterFromFWHM(&defaultProfile, 1);
-+ defaultProfile.convFilterType = SSolver::CONV_GAUSSIAN;
-+ defaultProfile.fwhm = 1;
- profileList.append(defaultProfile);
-
- SSolver::Parameters fastSolving;
-@@ -165,7 +173,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
- fastSolving.keepNum = 50;
- fastSolving.initialKeep = 500;
- fastSolving.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&fastSolving, 4);
-+ fastSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+ fastSolving.fwhm = 4;
- profileList.append(fastSolving);
-
- SSolver::Parameters parLargeSolving;
-@@ -176,7 +185,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
- parLargeSolving.keepNum = 50;
- parLargeSolving.initialKeep = 500;
- parLargeSolving.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&parLargeSolving, 4);
-+ parLargeSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+ parLargeSolving.fwhm = 4;
- profileList.append(parLargeSolving);
-
- SSolver::Parameters fastSmallSolving;
-@@ -187,7 +197,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
- fastSmallSolving.keepNum = 50;
- fastSmallSolving.initialKeep = 500;
- fastSmallSolving.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&fastSmallSolving, 4);
-+ fastSmallSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+ fastSmallSolving.fwhm = 4;
- profileList.append(fastSmallSolving);
-
- return profileList;
-@@ -205,7 +216,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
-
- hfrDefault.minarea = 20;
- hfrDefault.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&hfrDefault, 2);
-+ hfrDefault.convFilterType = SSolver::CONV_GAUSSIAN;
-+ hfrDefault.fwhm = 2;
- hfrDefault.r_min = 5;
- hfrDefault.maxSize = 10;
-
-@@ -224,7 +236,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
-
- big.minarea = 40;
- big.maxEllipse = 1.5;
-- StellarSolver::createConvFilterFromFWHM(&big, 8);
-+ big.convFilterType = SSolver::CONV_GAUSSIAN;
-+ big.fwhm = 8;
- big.r_min = 20;
- big.maxSize = 0;
-
-@@ -242,7 +255,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
-
- most.minarea = 10;
- most.maxEllipse = 0;
-- StellarSolver::createConvFilterFromFWHM(&most, 1);
-+ most.convFilterType = SSolver::CONV_GAUSSIAN;
-+ most.fwhm = 1;
- most.r_min = 3.5;
- most.minSize = 0;
- most.maxSize = 0;
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-index c80b7725a..e33c1da30 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-+++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-@@ -241,14 +241,16 @@ SSolver::Parameters StellarSolverProfileEditor::getSettingsFromUI()
- params.kron_fact = kron_fact->text().toDouble();
- params.subpix = subpix->text().toInt() ;
- params.r_min = r_min->text().toFloat();
-- //params.inflags
- params.magzero = magzero->text().toFloat();
-+ params.threshold_bg_multiple = threshMultiple->text().toFloat();
-+ params.threshold_offset = threshOffset->text().toFloat();
- params.minarea = minarea->text().toFloat();
- params.deblend_thresh = deblend_thresh->text().toInt();
- params.deblend_contrast = deblend_contrast->text().toFloat();
- params.clean = (cleanCheckBox->isChecked()) ? 1 : 0;
- params.clean_param = clean_param->text().toDouble();
-- StellarSolver::createConvFilterFromFWHM(¶ms, fwhm->value());
-+ params.convFilterType = (SSolver::ConvFilterType) convFilter->currentIndex();
-+ params.fwhm = fwhm->value();
-
- //Star Filter Settings
- params.resort = resort->isChecked();
-@@ -289,11 +291,14 @@ void StellarSolverProfileEditor::sendSettingsToUI(SSolver::Parameters a)
- r_min->setText(QString::number(a.r_min));
-
- magzero->setText(QString::number(a.magzero));
-+ threshMultiple->setText(QString::number(a.threshold_bg_multiple));
-+ threshOffset->setText(QString::number(a.threshold_offset));
- minarea->setText(QString::number(a.minarea));
- deblend_thresh->setText(QString::number(a.deblend_thresh));
- deblend_contrast->setText(QString::number(a.deblend_contrast));
- cleanCheckBox->setChecked(a.clean == 1);
- clean_param->setText(QString::number(a.clean_param));
-+ convFilter->setCurrentIndex(a.convFilterType);
- fwhm->setValue(a.fwhm);
-
- //Star Filter Settings
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-index 54e475cbd..2ba0f30a0 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-+++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-@@ -347,7 +347,7 @@
- <property name="spacing">
- <number>3</number>
- </property>
-- <item row="3" column="6">
-+ <item row="4" column="6">
- <widget class="QLineEdit" name="r_min">
- <property name="toolTip">
- <string>The minimum radius for stars for flux calculations.</string>
-@@ -357,43 +357,47 @@
- </property>
- </widget>
- </item>
-- <item row="0" column="0" colspan="2">
-- <widget class="QLabel" name="label_38">
-- <property name="sizePolicy">
-- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-- <horstretch>0</horstretch>
-- <verstretch>0</verstretch>
-- </sizepolicy>
-+ <item row="5" column="3">
-+ <widget class="QSpinBox" name="fwhm">
-+ <property name="toolTip">
-+ <string>A variable to store the fwhm in pixels used to generate the convolution filter for star detection.</string>
- </property>
-- <property name="text">
-- <string><a href = "https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html" >Extraction Params</a></string>
-+ <property name="minimum">
-+ <number>1</number>
- </property>
-- <property name="openExternalLinks">
-- <bool>true</bool>
-+ <property name="maximum">
-+ <number>10</number>
- </property>
- </widget>
- </item>
-- <item row="0" column="2" colspan="2">
-- <widget class="QLabel" name="label_20">
-- <property name="text">
-- <string><a href="https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html">Deblending Params</a></string>
-+ <item row="5" column="6">
-+ <widget class="QLineEdit" name="magzero">
-+ <property name="toolTip">
-+ <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
- </property>
-- <property name="openExternalLinks">
-- <bool>true</bool>
-+ <property name="text">
-+ <string>20</string>
- </property>
- </widget>
- </item>
-- <item row="4" column="6">
-- <widget class="QLineEdit" name="magzero">
-+ <item row="3" column="3">
-+ <widget class="QLineEdit" name="deblend_contrast">
- <property name="toolTip">
-- <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
-+ <string>The percentage of flux a separate peak must have to be considered a separate object.</string>
- </property>
- <property name="text">
-- <string>20</string>
-+ <string>1</string>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="3" column="2">
-+ <widget class="QLabel" name="label_19">
-+ <property name="text">
-+ <string>Min Cont.</string>
- </property>
- </widget>
- </item>
-- <item row="1" column="6">
-+ <item row="2" column="6">
- <widget class="QLineEdit" name="kron_fact">
- <property name="toolTip">
- <string>This sets the Kron Factor for use with the kron radius for flux calculations.</string>
-@@ -403,47 +407,131 @@
- </property>
- </widget>
- </item>
-- <item row="1" column="0">
-- <widget class="QLabel" name="label_21">
-+ <item row="2" column="5">
-+ <widget class="QLabel" name="label_25">
- <property name="text">
-- <string>Min Area</string>
-+ <string>Kron Factor</string>
- </property>
- </widget>
- </item>
-- <item row="3" column="0">
-- <widget class="QCheckBox" name="cleanCheckBox">
-- <property name="toolTip">
-- <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
-+ <item row="5" column="2">
-+ <widget class="QLabel" name="label_23">
-+ <property name="text">
-+ <string>Conv FWHM</string>
- </property>
-+ </widget>
-+ </item>
-+ <item row="5" column="5">
-+ <widget class="QLabel" name="label_15">
- <property name="text">
-- <string>Clean?</string>
-+ <string>magzero</string>
- </property>
-- <property name="checked">
-- <bool>true</bool>
-+ </widget>
-+ </item>
-+ <item row="4" column="3">
-+ <widget class="QComboBox" name="convFilter">
-+ <property name="toolTip">
-+ <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
- </property>
-+ <property name="currentIndex">
-+ <number>0</number>
-+ </property>
-+ <item>
-+ <property name="text">
-+ <string>Default</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Custom</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Gaussian</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Mexican Hat</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Top Hat</string>
-+ </property>
-+ </item>
- </widget>
- </item>
-- <item row="1" column="1">
-- <widget class="QLineEdit" name="minarea">
-+ <item row="2" column="3">
-+ <widget class="QLineEdit" name="deblend_thresh">
- <property name="toolTip">
-- <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
-+ <string>The number of thresholds the intensity range is divided up into.</string>
- </property>
- <property name="text">
-- <string>5</string>
-+ <string>32</string>
- </property>
- </widget>
- </item>
-- <item row="2" column="1">
-- <widget class="QLineEdit" name="subpix">
-+ <item row="0" column="0" colspan="2">
-+ <widget class="QLabel" name="label_38">
-+ <property name="sizePolicy">
-+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-+ <horstretch>0</horstretch>
-+ <verstretch>0</verstretch>
-+ </sizepolicy>
-+ </property>
-+ <property name="text">
-+ <string><a href = "https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html" >Extraction Params</a></string>
-+ </property>
-+ <property name="openExternalLinks">
-+ <bool>true</bool>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="4" column="5">
-+ <widget class="QLabel" name="label_13">
-+ <property name="text">
-+ <string>r_min</string>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="3" column="6">
-+ <widget class="QComboBox" name="apertureShape">
- <property name="toolTip">
-- <string>The subpixel sampling factor for star extraction</string>
-+ <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
-+ </property>
-+ <property name="currentIndex">
-+ <number>1</number>
- </property>
-+ <item>
-+ <property name="text">
-+ <string>Auto</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Circle</string>
-+ </property>
-+ </item>
-+ <item>
-+ <property name="text">
-+ <string>Ellipse</string>
-+ </property>
-+ </item>
-+ </widget>
-+ </item>
-+ <item row="0" column="2" colspan="2">
-+ <widget class="QLabel" name="label_20">
- <property name="text">
-- <string>5</string>
-+ <string><a href="https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html">Deblending Params</a></string>
-+ </property>
-+ <property name="openExternalLinks">
-+ <bool>true</bool>
- </property>
- </widget>
- </item>
-- <item row="1" column="2">
-+ <item row="2" column="2">
- <widget class="QLabel" name="label_18">
- <property name="text">
- <string>Thresh</string>
-@@ -466,38 +554,34 @@
- </property>
- </widget>
- </item>
-- <item row="2" column="0">
-- <widget class="QLabel" name="label_24">
-+ <item row="4" column="2">
-+ <widget class="QLabel" name="label_26">
- <property name="text">
-- <string>Sub Pix</string>
-+ <string>Conv Filter</string>
- </property>
- </widget>
- </item>
-- <item row="1" column="3">
-- <widget class="QLineEdit" name="deblend_thresh">
-- <property name="toolTip">
-- <string>The number of thresholds the intensity range is divided up into.</string>
-- </property>
-+ <item row="3" column="5">
-+ <widget class="QLabel" name="label_12">
- <property name="text">
-- <string>32</string>
-+ <string>Shape</string>
- </property>
- </widget>
- </item>
-- <item row="1" column="5">
-- <widget class="QLabel" name="label_25">
-- <property name="text">
-- <string>Kron Factor</string>
-+ <item row="6" column="0">
-+ <widget class="QCheckBox" name="cleanCheckBox">
-+ <property name="toolTip">
-+ <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
- </property>
-- </widget>
-- </item>
-- <item row="4" column="5">
-- <widget class="QLabel" name="label_15">
- <property name="text">
-- <string>magzero</string>
-+ <string>Clean?</string>
-+ </property>
-+ <property name="checked">
-+ <bool>true</bool>
- </property>
- </widget>
- </item>
-- <item row="3" column="1">
-+ <item row="6" column="1">
- <widget class="QLineEdit" name="clean_param">
- <property name="toolTip">
- <string> The cleaning parameter</string>
-@@ -507,79 +591,71 @@
- </property>
- </widget>
- </item>
-- <item row="2" column="6">
-- <widget class="QComboBox" name="apertureShape">
-+ <item row="5" column="0">
-+ <widget class="QLabel" name="label_24">
-+ <property name="text">
-+ <string>Sub Pix</string>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="5" column="1">
-+ <widget class="QLineEdit" name="subpix">
- <property name="toolTip">
-- <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
-+ <string>The subpixel sampling factor for star extraction</string>
- </property>
-- <property name="currentIndex">
-- <number>1</number>
-+ <property name="text">
-+ <string>5</string>
- </property>
-- <item>
-- <property name="text">
-- <string>Auto</string>
-- </property>
-- </item>
-- <item>
-- <property name="text">
-- <string>Circle</string>
-- </property>
-- </item>
-- <item>
-- <property name="text">
-- <string>Ellipse</string>
-- </property>
-- </item>
- </widget>
- </item>
-- <item row="3" column="2">
-- <widget class="QLabel" name="label_23">
-+ <item row="4" column="0">
-+ <widget class="QLabel" name="label_21">
- <property name="text">
-- <string>Conv FWHM</string>
-+ <string>Min Area</string>
- </property>
- </widget>
- </item>
-- <item row="2" column="2">
-- <widget class="QLabel" name="label_19">
-+ <item row="4" column="1">
-+ <widget class="QLineEdit" name="minarea">
-+ <property name="toolTip">
-+ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
-+ </property>
- <property name="text">
-- <string>Min Cont.</string>
-+ <string>5</string>
- </property>
- </widget>
- </item>
-- <item row="3" column="5">
-- <widget class="QLabel" name="label_13">
-+ <item row="3" column="0">
-+ <widget class="QLabel" name="label_22">
- <property name="text">
-- <string>r_min</string>
-+ <string>Thresh Offset</string>
- </property>
- </widget>
- </item>
-- <item row="2" column="3">
-- <widget class="QLineEdit" name="deblend_contrast">
-+ <item row="3" column="1">
-+ <widget class="QLineEdit" name="threshOffset">
- <property name="toolTip">
-- <string>The percentage of flux a separate peak must have to be considered a separate object.</string>
-+ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
- </property>
- <property name="text">
-- <string>1</string>
-+ <string>0</string>
- </property>
- </widget>
- </item>
-- <item row="2" column="5">
-- <widget class="QLabel" name="label_12">
-+ <item row="2" column="0">
-+ <widget class="QLabel" name="label_30">
- <property name="text">
-- <string>Shape</string>
-+ <string>Thresh Multiple</string>
- </property>
- </widget>
- </item>
-- <item row="3" column="3">
-- <widget class="QSpinBox" name="fwhm">
-+ <item row="2" column="1">
-+ <widget class="QLineEdit" name="threshMultiple">
- <property name="toolTip">
-- <string>A variable to store the fwhm in pixels used to generate the convolution filter for star detection.</string>
-- </property>
-- <property name="minimum">
-- <number>1</number>
-+ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
- </property>
-- <property name="maximum">
-- <number>10</number>
-+ <property name="text">
-+ <string>2.0</string>
- </property>
- </widget>
- </item>
-diff --git a/kstars/fitsviewer/fitssepdetector.cpp b/kstars/fitsviewer/fitssepdetector.cpp
-index c943b5d30..4a1ccb9dc 100644
---- a/kstars/fitsviewer/fitssepdetector.cpp
-+++ b/kstars/fitsviewer/fitssepdetector.cpp
-@@ -113,10 +113,6 @@ bool FITSSEPDetector::findSourcesAndBackground(QRect const &boundary)
- else
- solver->setParameters(SSolver::Parameters()); // This is default
-
-- // Wait synchronously
--
-- QEventLoop loop;
-- connect(solver, &StellarSolver::finished, &loop, &QEventLoop::quit);
- QList<FITSImage::Star> stars;
- const bool runHFR = group != Ekos::AlignProfiles;
-
-@@ -124,7 +120,7 @@ bool FITSSEPDetector::findSourcesAndBackground(QRect const &boundary)
- solver->extract(runHFR, boundary);
- else
- solver->extract(runHFR);
-- loop.exec(QEventLoop::ExcludeUserInputEvents);
-+
- stars = solver->getStarList();
-
- if (stars.empty())
-diff --git a/kstars/fitsviewer/structuredefinitions.h b/kstars/fitsviewer/structuredefinitions.h
-index 92556e6cb..16ba59945 100644
---- a/kstars/fitsviewer/structuredefinitions.h
-+++ b/kstars/fitsviewer/structuredefinitions.h
-@@ -6,45 +6,56 @@
- #define STRUCTUREDEFINITIONS_H
-
- //system includes
--#include "stdint.h"
-+#include <stdint.h>
-+#include <math.h>
- #include <QString>
--#include <QVector>
--#include "math.h"
-
- namespace FITSImage
- {
-
--/// Stats struct to hold statisical data about the FITS data
--/// This is defined in both KStars and StellarSolver
--typedef struct
-+typedef enum
- {
-- double min[3] = {0}, max[3] = {0};
-- double mean[3] = {0};
-- double stddev[3] = {0};
-- double median[3] = {0};
-- double SNR { 0 };
-- /// FITS image data type (TBYTE, TUSHORT, TULONG, TFLOAT, TLONGLONG, TDOUBLE)
-- uint32_t dataType { 0 };
-- int bytesPerPixel { 1 };
-- int ndim { 2 };
-- int64_t size { 0 };
-- uint32_t samples_per_channel { 0 };
-- uint16_t width { 0 };
-- uint16_t height { 0 };
-- /// Number of channels
-- uint8_t channels { 1 };
-+ POSITIVE,
-+ NEGATIVE,
-+ BOTH
-+} Parity;
-+
-+static const QString getParityText(Parity parity){
-+ return parity == FITSImage::NEGATIVE ? "negative" : "positive";
-+}
-+
-+static const QString getShortParityText(Parity parity){
-+ return parity == FITSImage::NEGATIVE ? "neg" : "pos";
-+}
-+
-+// Stats struct to hold statisical data about the FITS data
-+typedef struct Statistic
-+{
-+ double min[3] = {0}, max[3] = {0}; // Minimum and Maximum R, G, B pixel values in the image
-+ double mean[3] = {0}; // Average R, G, B value of the pixels in the image
-+ double stddev[3] = {0}; // Standard Deviation of the R, G, B pixel values in the image
-+ double median[3] = {0}; // Median R, G, B pixel value in the image
-+ double SNR { 0 }; // Signal to noise ratio
-+ uint32_t dataType { 0 }; // FITS image data type (TBYTE, TUSHORT, TULONG, TFLOAT, TLONGLONG, TDOUBLE)
-+ int bytesPerPixel { 1 }; // Number of bytes used for each pixel, size of datatype above
-+ int ndim { 2 }; // Number of dimensions in a fits image
-+ int64_t size { 0 }; // Filesize in bytes
-+ uint32_t samples_per_channel { 0 }; // area of the image in pixels
-+ uint16_t width { 0 }; // width of the image in pixels
-+ uint16_t height { 0 }; // height of the image in pixels
-+ uint8_t channels { 1 }; // Mono Images have 1 channel, RGB has 3 channels
- } Statistic;
-
- // This structure holds data about sources that are found within
- // an image. It is returned by Source Extraction
--typedef struct
-+typedef struct Star
- {
- float x; // The x position of the star in Pixels
- float y; // The y position of the star in Pixels
-- float mag; // The magnitude of the star
-+ float mag; // The magnitude of the star, note that this is a relative magnitude based on the star extraction options.
- float flux; // The calculated total flux
- float peak; // The peak value of the star
-- float HFR; // The half flux radius
-+ float HFR; // The half flux radius of the star
- float a; // The semi-major axis of the star
- float b; // The semi-minor axis of the star
- float theta; // The angle of orientation of the star
-@@ -55,29 +66,36 @@ typedef struct
-
- // This struct holds data about the background in an image
- // It is returned by source extraction
--typedef struct
-+typedef struct Background
- {
-- int bw, bh; // single tile width, height
-- float global; // global mean
-- float globalrms; // global sigma
-+ int bw, bh; // single tile width, height
-+ float global; // global mean
-+ float globalrms; // global sigma
- int num_stars_detected; // Number of stars detected before any reduction.
- } Background;
-
- // This struct contains information about the astrometric solution
- // for an image.
--typedef struct
-+typedef struct Solution
- {
- double fieldWidth; // The calculated width of the field in arcminutes
- double fieldHeight; // The calculated height of the field in arcminutes
-- double ra; // The Right Ascension of the center of the field
-- double dec; // The Declination of the center of the field
-+ double ra; // The Right Ascension of the center of the field in degrees
-+ double dec; // The Declination of the center of the field in degrees
- double orientation; // The orientation angle of the image from North in degrees
-- double pixscale; // The pixel scale of the image
-- QString parity; // The parity of the solved image. (Whether it has been flipped) JPEG images tend to have negative parity while FITS files tend to have positive parity.
-+ double pixscale; // The pixel scale of the image in arcseconds per pixel
-+ Parity parity; // The parity of the solved image. (Whether it has been flipped) JPEG images tend to have negative parity while FITS files tend to have positive parity.
- double raError; // The error between the search_ra position and the solution ra position in arcseconds
- double decError; // The error between the search_dec position and the solution dec position in arcseconds
- } Solution;
-
-+// This is point in the World Coordinate System with both RA and DEC.
-+typedef struct wcs_point
-+{
-+ float ra; // The Right Ascension in degrees
-+ float dec; // The Declination in degrees
-+} wcs_point;
-+
- } // FITSImage
-
- #endif // STRUCTUREDEFINITIONS_H
-diff --git a/kstars/kstars.kcfg b/kstars/kstars.kcfg
-index 35d189191..da9727031 100644
---- a/kstars/kstars.kcfg
-+++ b/kstars/kstars.kcfg
-@@ -2151,6 +2151,11 @@
- <whatsthis>Path to the Sextractor executable.</whatsthis>
- <default code="true">KSUtils::getDefaultPath("SextractorBinary")</default>
- </entry>
-+ <entry name="WatneyBinary" type="String">
-+ <label></label>
-+ <whatsthis>Path to the Watney Solver executable.</whatsthis>
-+ <default code="true">KSUtils::getDefaultPath("WatneyBinary")</default>
-+ </entry>
-
- <entry name="AstrometryAPIKey" type="String">
- <label>astrometry.net API Key</label>
---
-GitLab
-
Copied: kstars/repos/community-x86_64/stellarsolver2.patch (from rev 1210088, kstars/trunk/stellarsolver2.patch)
===================================================================
--- stellarsolver2.patch (rev 0)
+++ stellarsolver2.patch 2022-05-23 06:27:08 UTC (rev 1210089)
@@ -0,0 +1,1083 @@
+From cf5db0400263577fb4805fad64fd5ad67c3b3bec Mon Sep 17 00:00:00 2001
+From: Robert Lancaster <rlancaste at gmail.com>
+Date: Wed, 2 Mar 2022 22:04:41 +0000
+Subject: [PATCH] Updating KStars to support StellarSolver 2.0
+
+---
+ CMakeLists.txt | 2 +-
+ Tests/kstars_ui/test_ekos_align.cpp | 2 +-
+ .../kstars_ui/test_ekos_meridianflip_base.cpp | 2 +-
+ kstars/auxiliary/ksutils.cpp | 11 +
+ kstars/ekos/align/align.cpp | 18 +-
+ kstars/ekos/align/opsalign.ui | 7 +-
+ kstars/ekos/align/opsprograms.cpp | 30 +-
+ kstars/ekos/align/opsprograms.ui | 28 +-
+ kstars/ekos/align/remoteastrometryparser.cpp | 10 +-
+ kstars/ekos/align/remoteastrometryparser.h | 2 +-
+ kstars/ekos/auxiliary/solverutils.cpp | 14 +-
+ .../ekos/auxiliary/stellarsolverprofile.cpp | 50 +--
+ .../auxiliary/stellarsolverprofileeditor.cpp | 9 +-
+ .../auxiliary/stellarsolverprofileeditor.ui | 286 +++++++++++-------
+ kstars/fitsviewer/fitssepdetector.cpp | 6 +-
+ kstars/fitsviewer/structuredefinitions.h | 84 +++--
+ kstars/kstars.kcfg | 5 +
+ 17 files changed, 353 insertions(+), 213 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 746f2f351..8f26f7a66 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -215,7 +215,7 @@ MACRO_BOOL_TO_01(INDI_FOUND HAVE_INDI)
+ set_package_properties(INDI PROPERTIES DESCRIPTION "Astronomical instrumentation control" URL "https://www.indilib.org" TYPE OPTIONAL PURPOSE "Support for controlling astronomical devices on Linux with KStars.")
+
+ if (INDI_FOUND AND NOT ANDROID)
+- find_package(StellarSolver REQUIRED)
++ find_package(StellarSolver REQUIRED 2.0)
+ endif(INDI_FOUND AND NOT ANDROID)
+ MACRO_BOOL_TO_01(StellarSolver_FOUND HAVE_STELLARSOLVER)
+
+diff --git a/Tests/kstars_ui/test_ekos_align.cpp b/Tests/kstars_ui/test_ekos_align.cpp
+index 4e5a9f482..ce0f3c3f2 100644
+--- a/Tests/kstars_ui/test_ekos_align.cpp
++++ b/Tests/kstars_ui/test_ekos_align.cpp
+@@ -266,7 +266,7 @@ void TestEkosAlign::prepareTestCase()
+ // select StellarSolver
+ Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
+ // select fast solve profile option
+- Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
++ Options::setSolveOptionsProfile(SSolver::Parameters::SINGLE_THREAD_SOLVING);
+ // select the "Slew to Target" mode
+ KTRY_SET_RADIOBUTTON(ekos->alignModule(), slewR, true);
+ // reduce the accuracy to avoid testing problems
+diff --git a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
+index ea58b07fa..0152c3324 100644
+--- a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
++++ b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
+@@ -88,7 +88,7 @@ bool TestEkosMeridianFlipBase::startEkosProfile()
+ // select StellarSolver
+ Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
+ // select fast solve profile option
+- Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
++ Options::setSolveOptionsProfile(SSolver::Parameters::SINGLE_THREAD_SOLVING);
+ // select the "Slew to Target" mode
+ KTRY_SET_RADIOBUTTON_SUB(ekos->alignModule(), slewR, true);
+
+diff --git a/kstars/auxiliary/ksutils.cpp b/kstars/auxiliary/ksutils.cpp
+index 1b9b53f6a..57547a245 100644
+--- a/kstars/auxiliary/ksutils.cpp
++++ b/kstars/auxiliary/ksutils.cpp
+@@ -1165,6 +1165,17 @@ QString getDefaultPath(const QString &option)
+ #endif
+ return prefix + "/bin/solve-field";
+ }
++ else if (option == "WatneyBinary")
++ {
++#if defined(ASTROMETRY_PREFIX)
++ return QString(ASTROMETRY_PREFIX "/bin/watney-solver");
++#elif defined(Q_OS_OSX)
++ return "/usr/local/bin/watney-solver";
++#elif defined(Q_OS_WIN)
++ return "C:/Program Files/watney-solve-win-x64-1/watney-solve.exe";
++#endif
++ return prefix + "/bin/watney-solver";
++ }
+ else if (option == "SextractorBinary")
+ {
+ #if defined(SEXTRACTOR_PREFIX)
+diff --git a/kstars/ekos/align/align.cpp b/kstars/ekos/align/align.cpp
+index d2b31a240..debf6d0dc 100644
+--- a/kstars/ekos/align/align.cpp
++++ b/kstars/ekos/align/align.cpp
+@@ -1867,7 +1867,7 @@ void Align::startSolving()
+
+ if (solverModeButtonGroup->checkedId() == SOLVER_LOCAL)
+ {
+- if(Options::solverType() != SSolver::SOLVER_ASTAP) //You don't need astrometry index files to use ASTAP
++ if(Options::solverType() != SSolver::SOLVER_ASTAP && Options::solverType() != SSolver::SOLVER_WATNEYASTROMETRY) //You don't need astrometry index files to use ASTAP or Watney
+ {
+ bool foundAnIndex = false;
+ for(QString dataDir : astrometryDataDirs)
+@@ -1916,16 +1916,19 @@ void Align::startSolving()
+ m_StellarSolver->setParameters(m_StellarSolverProfiles.at(Options::solveOptionsProfile()));
+
+ const SSolver::SolverType type = static_cast<SSolver::SolverType>(m_StellarSolver->property("SolverType").toInt());
+- if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP)
++ if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP || type == SSolver::SOLVER_WATNEYASTROMETRY)
+ {
+ QString filename = QDir::tempPath() + QString("/solver%1.fits").arg(QUuid::createUuid().toString().remove(
+ QRegularExpression("[-{}]")));
+ alignView->saveImage(filename);
+ m_StellarSolver->setProperty("FileToProcess", filename);
+- m_StellarSolver->setProperty("SextractorBinaryPath", Options::sextractorBinary());
+- m_StellarSolver->setProperty("SolverPath", Options::astrometrySolverBinary());
+- m_StellarSolver->setProperty("ASTAPBinaryPath", Options::aSTAPExecutable());
+- m_StellarSolver->setProperty("WCSPath", Options::astrometryWCSInfo());
++ ExternalProgramPaths externalPaths;
++ externalPaths.sextractorBinaryPath = Options::sextractorBinary();
++ externalPaths.solverPath = Options::astrometrySolverBinary();
++ externalPaths.astapBinaryPath = Options::aSTAPExecutable();
++ externalPaths.watneyBinaryPath = Options::watneyBinary();
++ externalPaths.wcsPath = Options::astrometryWCSInfo();
++ m_StellarSolver->setExternalFilePaths(externalPaths);
+
+ //No need for a conf file this way.
+ m_StellarSolver->setProperty("AutoGenerateAstroConfig", true);
+@@ -2042,8 +2045,7 @@ void Align::solverComplete()
+ else
+ {
+ FITSImage::Solution solution = m_StellarSolver->getSolution();
+- // Would be better if parity was a bool field instead of a QString with "pos" and "neg" as possible values.
+- const bool eastToTheRight = solution.parity == "pos" ? false : true;
++ const bool eastToTheRight = solution.parity == FITSImage::POSITIVE? false : true;
+ solverFinished(solution.orientation, solution.ra, solution.dec, solution.pixscale, eastToTheRight);
+ }
+ }
+diff --git a/kstars/ekos/align/opsalign.ui b/kstars/ekos/align/opsalign.ui
+index b472917a2..808b05e8c 100644
+--- a/kstars/ekos/align/opsalign.ui
++++ b/kstars/ekos/align/opsalign.ui
+@@ -6,7 +6,7 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>444</width>
++ <width>470</width>
+ <height>179</height>
+ </rect>
+ </property>
+@@ -108,6 +108,11 @@
+ <string>Local ASTAP</string>
+ </property>
+ </item>
++ <item>
++ <property name="text">
++ <string>Local Watney</string>
++ </property>
++ </item>
+ <item>
+ <property name="text">
+ <string>Online Astrometry</string>
+diff --git a/kstars/ekos/align/opsprograms.cpp b/kstars/ekos/align/opsprograms.cpp
+index ff76214a5..f0e7e467b 100644
+--- a/kstars/ekos/align/opsprograms.cpp
++++ b/kstars/ekos/align/opsprograms.cpp
+@@ -43,37 +43,15 @@ void OpsPrograms::slotApply()
+
+ void OpsPrograms::loadDefaultPaths(int option)
+ {
+- ExternalProgramPaths paths;
+-
+- switch(option)
+- {
+- case 0:
+- return;
+- break;
+- case 1:
+- paths = StellarSolver::getLinuxDefaultPaths();
+- break;
+- case 2:
+- paths = StellarSolver::getLinuxInternalPaths();
+- break;
+- case 3:
+- paths = StellarSolver::getMacHomebrewPaths();
+- break;
+- case 4:
+- paths = StellarSolver::getWinANSVRPaths();
+- break;
+- case 5:
+- paths = StellarSolver::getWinCygwinPaths();
+- break;
+- default:
+- paths = StellarSolver::getLinuxDefaultPaths();
+- break;
+- }
++ if(option == 0)
++ return;
++ ExternalProgramPaths paths = StellarSolver::getDefaultExternalPaths((SSolver::ComputerSystemType) (option - 1));
+
+ kcfg_SextractorBinary->setText(paths.sextractorBinaryPath);
+ kcfg_AstrometryConfFile->setText(paths.confPath);
+ kcfg_AstrometrySolverBinary->setText(paths.solverPath);
+ kcfg_ASTAPExecutable->setText(paths.astapBinaryPath);
++ kcfg_WatneyBinary->setText(paths.watneyBinaryPath);
+ kcfg_AstrometryWCSInfo->setText(paths.wcsPath);
+
+ defaultPathSelector->setCurrentIndex(0);
+diff --git a/kstars/ekos/align/opsprograms.ui b/kstars/ekos/align/opsprograms.ui
+index fcf59bcea..b3b505c7c 100644
+--- a/kstars/ekos/align/opsprograms.ui
++++ b/kstars/ekos/align/opsprograms.ui
+@@ -7,7 +7,7 @@
+ <x>0</x>
+ <y>0</y>
+ <width>658</width>
+- <height>481</height>
++ <height>517</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+@@ -169,6 +169,32 @@
+ </layout>
+ </widget>
+ </item>
++ <item>
++ <widget class="QGroupBox" name="groupBox_6">
++ <property name="title">
++ <string>Watney Solver</string>
++ </property>
++ <layout class="QGridLayout" name="gridLayout_5">
++ <item row="0" column="0">
++ <widget class="QLabel" name="label_21">
++ <property name="text">
++ <string>Watney binary:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="1">
++ <widget class="QLineEdit" name="kcfg_WatneyBinary">
++ <property name="toolTip">
++ <string>Astrometry.net solve-field binary</string>
++ </property>
++ <property name="text">
++ <string/>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </widget>
++ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+diff --git a/kstars/ekos/align/remoteastrometryparser.cpp b/kstars/ekos/align/remoteastrometryparser.cpp
+index 89e1649b2..99d51e348 100644
+--- a/kstars/ekos/align/remoteastrometryparser.cpp
++++ b/kstars/ekos/align/remoteastrometryparser.cpp
+@@ -121,9 +121,9 @@ bool RemoteAstrometryParser::sendArgs(const QStringList &args)
+ QStringList solverArgs = args;
+ // Add parity option if none is give and we already know parity before
+ // and is NOT a blind solve
+- if (Options::astrometryDetectParity() && parity.isEmpty() == false && args.contains("parity") == false &&
++ if (Options::astrometryDetectParity() && args.contains("parity") == false &&
+ (args.contains("-3") || args.contains("-L")))
+- solverArgs << "--parity" << parity;
++ solverArgs << "--parity" << QString::number(parity);
+
+ //for (int i = 0; i < solverSettings->ntp; i++)
+ for (auto &it : *solverSettings)
+@@ -284,9 +284,9 @@ void RemoteAstrometryParser::checkResults(INumberVectorProperty *nvp)
+ else if (!strcmp(nvp->np[i].name, "ASTROMETRY_RESULTS_PARITY"))
+ {
+ if (nvp->np[i].value == 1)
+- parity = "pos";
++ parity = FITSImage::POSITIVE;
+ else if (nvp->np[i].value == -1)
+- parity = "neg";
++ parity = FITSImage::NEGATIVE;
+ }
+ }
+
+@@ -295,7 +295,7 @@ void RemoteAstrometryParser::checkResults(INumberVectorProperty *nvp)
+ int elapsed = (int)round(solverTimer.elapsed() / 1000.0);
+ align->appendLogText(i18np("Solver completed in %1 second.", "Solver completed in %1 seconds.", elapsed));
+ stopSolver();
+- emit solverFinished(orientation, ra, de, pixscale, parity != "pos");
++ emit solverFinished(orientation, ra, de, pixscale, parity != FITSImage::POSITIVE);
+ }
+ }
+ }
+diff --git a/kstars/ekos/align/remoteastrometryparser.h b/kstars/ekos/align/remoteastrometryparser.h
+index 9ca103d7e..ccb350008 100644
+--- a/kstars/ekos/align/remoteastrometryparser.h
++++ b/kstars/ekos/align/remoteastrometryparser.h
+@@ -53,7 +53,7 @@ class RemoteAstrometryParser : public AstrometryParser
+ bool captureRunning { false };
+ Align *align { nullptr };
+ QElapsedTimer solverTimer;
+- QString parity;
++ FITSImage::Parity parity = FITSImage::BOTH;
+ QString targetCCD;
+ };
+ }
+diff --git a/kstars/ekos/auxiliary/stellarsolverprofile.cpp b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
+index 909ae58ed..7109df6e4 100644
+--- a/kstars/ekos/auxiliary/stellarsolverprofile.cpp
++++ b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
+@@ -24,8 +24,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
+ focusDefault.keepNum = 100;
+ focusDefault.minarea = 20;
+ focusDefault.maxEllipse = 1.5;
+- // JM 2021.10.03: Seems to be a lot more reliable than 2 FWHM
+- StellarSolver::createConvFilterFromFWHM(&focusDefault, 1);
++ focusDefault.convFilterType = SSolver::CONV_GAUSSIAN;
++ focusDefault.fwhm = 1;
+ focusDefault.r_min = 5;
+ focusDefault.maxSize = 10;
+ focusDefault.removeBrightest = 10;
+@@ -37,7 +37,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
+ stars.listName = "2-AllStars";
+ stars.description = i18n("Profile for the source extraction of all the stars in an image.");
+ stars.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&stars, 1);
++ stars.convFilterType = SSolver::CONV_GAUSSIAN;
++ stars.fwhm = 1;
+ stars.r_min = 2;
+ profileList.append(stars);
+
+@@ -45,7 +46,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
+ smallStars.listName = "3-SmallSizedStars";
+ smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
+ smallStars.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
++ smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
++ smallStars.fwhm = 1;
+ smallStars.r_min = 2;
+ smallStars.maxSize = 5;
+ smallStars.initialKeep = 500;
+@@ -57,7 +59,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
+ mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
+ mid.maxEllipse = 1.5;
+ mid.minarea = 20;
+- StellarSolver::createConvFilterFromFWHM(&mid, 4);
++ mid.convFilterType = SSolver::CONV_GAUSSIAN;
++ mid.fwhm = 4;
+ mid.r_min = 5;
+ mid.removeDimmest = 20;
+ mid.minSize = 2;
+@@ -71,7 +74,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
+ big.description = i18n("Profile optimized for source extraction of larger stars.");
+ big.maxEllipse = 1.5;
+ big.minarea = 40;
+- StellarSolver::createConvFilterFromFWHM(&big, 8);
++ big.convFilterType = SSolver::CONV_GAUSSIAN;
++ big.fwhm = 8;
+ big.r_min = 20;
+ big.minSize = 5;
+ big.initialKeep = 500;
+@@ -101,7 +105,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
+ stars.listName = "2-AllStars";
+ stars.description = i18n("Profile for the source extraction of all the stars in an image.");
+ stars.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&stars, 1);
++ stars.convFilterType = SSolver::CONV_GAUSSIAN;
++ stars.fwhm = 1;
+ stars.r_min = 2;
+ profileList.append(stars);
+
+@@ -109,7 +114,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
+ smallStars.listName = "3-SmallSizedStars";
+ smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
+ smallStars.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
++ smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
++ smallStars.fwhm = 1;
+ smallStars.r_min = 2;
+ smallStars.maxSize = 5;
+ smallStars.initialKeep = 500;
+@@ -121,7 +127,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
+ mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
+ mid.maxEllipse = 1.5;
+ mid.minarea = 20;
+- StellarSolver::createConvFilterFromFWHM(&mid, 4);
++ mid.convFilterType = SSolver::CONV_GAUSSIAN;
++ mid.fwhm = 4;
+ mid.r_min = 5;
+ mid.removeDimmest = 20;
+ mid.minSize = 2;
+@@ -135,7 +142,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
+ big.description = i18n("Profile optimized for source extraction of larger stars.");
+ big.maxEllipse = 1.5;
+ big.minarea = 40;
+- StellarSolver::createConvFilterFromFWHM(&big, 8);
++ big.convFilterType = SSolver::CONV_GAUSSIAN;
++ big.fwhm = 8;
+ big.r_min = 20;
+ big.minSize = 5;
+ big.initialKeep = 500;
+@@ -152,8 +160,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
+ SSolver::Parameters defaultProfile;
+ defaultProfile.listName = "1-Default";
+ defaultProfile.description = i18n("Default profile. Generic and not optimized for any specific purpose.");
+- // JM 2021.10.03: Seems to help in cases where solver fails to solve any images.
+- StellarSolver::createConvFilterFromFWHM(&defaultProfile, 1);
++ defaultProfile.convFilterType = SSolver::CONV_GAUSSIAN;
++ defaultProfile.fwhm = 1;
+ profileList.append(defaultProfile);
+
+ SSolver::Parameters fastSolving;
+@@ -165,7 +173,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
+ fastSolving.keepNum = 50;
+ fastSolving.initialKeep = 500;
+ fastSolving.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&fastSolving, 4);
++ fastSolving.convFilterType = SSolver::CONV_GAUSSIAN;
++ fastSolving.fwhm = 4;
+ profileList.append(fastSolving);
+
+ SSolver::Parameters parLargeSolving;
+@@ -176,7 +185,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
+ parLargeSolving.keepNum = 50;
+ parLargeSolving.initialKeep = 500;
+ parLargeSolving.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&parLargeSolving, 4);
++ parLargeSolving.convFilterType = SSolver::CONV_GAUSSIAN;
++ parLargeSolving.fwhm = 4;
+ profileList.append(parLargeSolving);
+
+ SSolver::Parameters fastSmallSolving;
+@@ -187,7 +197,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
+ fastSmallSolving.keepNum = 50;
+ fastSmallSolving.initialKeep = 500;
+ fastSmallSolving.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&fastSmallSolving, 4);
++ fastSmallSolving.convFilterType = SSolver::CONV_GAUSSIAN;
++ fastSmallSolving.fwhm = 4;
+ profileList.append(fastSmallSolving);
+
+ return profileList;
+@@ -205,7 +216,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
+
+ hfrDefault.minarea = 20;
+ hfrDefault.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&hfrDefault, 2);
++ hfrDefault.convFilterType = SSolver::CONV_GAUSSIAN;
++ hfrDefault.fwhm = 2;
+ hfrDefault.r_min = 5;
+ hfrDefault.maxSize = 10;
+
+@@ -224,7 +236,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
+
+ big.minarea = 40;
+ big.maxEllipse = 1.5;
+- StellarSolver::createConvFilterFromFWHM(&big, 8);
++ big.convFilterType = SSolver::CONV_GAUSSIAN;
++ big.fwhm = 8;
+ big.r_min = 20;
+ big.maxSize = 0;
+
+@@ -242,7 +255,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
+
+ most.minarea = 10;
+ most.maxEllipse = 0;
+- StellarSolver::createConvFilterFromFWHM(&most, 1);
++ most.convFilterType = SSolver::CONV_GAUSSIAN;
++ most.fwhm = 1;
+ most.r_min = 3.5;
+ most.minSize = 0;
+ most.maxSize = 0;
+diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
+index c80b7725a..e33c1da30 100644
+--- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
++++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
+@@ -241,14 +241,16 @@ SSolver::Parameters StellarSolverProfileEditor::getSettingsFromUI()
+ params.kron_fact = kron_fact->text().toDouble();
+ params.subpix = subpix->text().toInt() ;
+ params.r_min = r_min->text().toFloat();
+- //params.inflags
+ params.magzero = magzero->text().toFloat();
++ params.threshold_bg_multiple = threshMultiple->text().toFloat();
++ params.threshold_offset = threshOffset->text().toFloat();
+ params.minarea = minarea->text().toFloat();
+ params.deblend_thresh = deblend_thresh->text().toInt();
+ params.deblend_contrast = deblend_contrast->text().toFloat();
+ params.clean = (cleanCheckBox->isChecked()) ? 1 : 0;
+ params.clean_param = clean_param->text().toDouble();
+- StellarSolver::createConvFilterFromFWHM(¶ms, fwhm->value());
++ params.convFilterType = (SSolver::ConvFilterType) convFilter->currentIndex();
++ params.fwhm = fwhm->value();
+
+ //Star Filter Settings
+ params.resort = resort->isChecked();
+@@ -289,11 +291,14 @@ void StellarSolverProfileEditor::sendSettingsToUI(SSolver::Parameters a)
+ r_min->setText(QString::number(a.r_min));
+
+ magzero->setText(QString::number(a.magzero));
++ threshMultiple->setText(QString::number(a.threshold_bg_multiple));
++ threshOffset->setText(QString::number(a.threshold_offset));
+ minarea->setText(QString::number(a.minarea));
+ deblend_thresh->setText(QString::number(a.deblend_thresh));
+ deblend_contrast->setText(QString::number(a.deblend_contrast));
+ cleanCheckBox->setChecked(a.clean == 1);
+ clean_param->setText(QString::number(a.clean_param));
++ convFilter->setCurrentIndex(a.convFilterType);
+ fwhm->setValue(a.fwhm);
+
+ //Star Filter Settings
+diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
+index 54e475cbd..2ba0f30a0 100644
+--- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
++++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
+@@ -347,7 +347,7 @@
+ <property name="spacing">
+ <number>3</number>
+ </property>
+- <item row="3" column="6">
++ <item row="4" column="6">
+ <widget class="QLineEdit" name="r_min">
+ <property name="toolTip">
+ <string>The minimum radius for stars for flux calculations.</string>
+@@ -357,43 +357,47 @@
+ </property>
+ </widget>
+ </item>
+- <item row="0" column="0" colspan="2">
+- <widget class="QLabel" name="label_38">
+- <property name="sizePolicy">
+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
++ <item row="5" column="3">
++ <widget class="QSpinBox" name="fwhm">
++ <property name="toolTip">
++ <string>A variable to store the fwhm in pixels used to generate the convolution filter for star detection.</string>
+ </property>
+- <property name="text">
+- <string><a href = "https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html" >Extraction Params</a></string>
++ <property name="minimum">
++ <number>1</number>
+ </property>
+- <property name="openExternalLinks">
+- <bool>true</bool>
++ <property name="maximum">
++ <number>10</number>
+ </property>
+ </widget>
+ </item>
+- <item row="0" column="2" colspan="2">
+- <widget class="QLabel" name="label_20">
+- <property name="text">
+- <string><a href="https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html">Deblending Params</a></string>
++ <item row="5" column="6">
++ <widget class="QLineEdit" name="magzero">
++ <property name="toolTip">
++ <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
+ </property>
+- <property name="openExternalLinks">
+- <bool>true</bool>
++ <property name="text">
++ <string>20</string>
+ </property>
+ </widget>
+ </item>
+- <item row="4" column="6">
+- <widget class="QLineEdit" name="magzero">
++ <item row="3" column="3">
++ <widget class="QLineEdit" name="deblend_contrast">
+ <property name="toolTip">
+- <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
++ <string>The percentage of flux a separate peak must have to be considered a separate object.</string>
+ </property>
+ <property name="text">
+- <string>20</string>
++ <string>1</string>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="2">
++ <widget class="QLabel" name="label_19">
++ <property name="text">
++ <string>Min Cont.</string>
+ </property>
+ </widget>
+ </item>
+- <item row="1" column="6">
++ <item row="2" column="6">
+ <widget class="QLineEdit" name="kron_fact">
+ <property name="toolTip">
+ <string>This sets the Kron Factor for use with the kron radius for flux calculations.</string>
+@@ -403,47 +407,131 @@
+ </property>
+ </widget>
+ </item>
+- <item row="1" column="0">
+- <widget class="QLabel" name="label_21">
++ <item row="2" column="5">
++ <widget class="QLabel" name="label_25">
+ <property name="text">
+- <string>Min Area</string>
++ <string>Kron Factor</string>
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="0">
+- <widget class="QCheckBox" name="cleanCheckBox">
+- <property name="toolTip">
+- <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
++ <item row="5" column="2">
++ <widget class="QLabel" name="label_23">
++ <property name="text">
++ <string>Conv FWHM</string>
+ </property>
++ </widget>
++ </item>
++ <item row="5" column="5">
++ <widget class="QLabel" name="label_15">
+ <property name="text">
+- <string>Clean?</string>
++ <string>magzero</string>
+ </property>
+- <property name="checked">
+- <bool>true</bool>
++ </widget>
++ </item>
++ <item row="4" column="3">
++ <widget class="QComboBox" name="convFilter">
++ <property name="toolTip">
++ <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
+ </property>
++ <property name="currentIndex">
++ <number>0</number>
++ </property>
++ <item>
++ <property name="text">
++ <string>Default</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Custom</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Gaussian</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Mexican Hat</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Top Hat</string>
++ </property>
++ </item>
+ </widget>
+ </item>
+- <item row="1" column="1">
+- <widget class="QLineEdit" name="minarea">
++ <item row="2" column="3">
++ <widget class="QLineEdit" name="deblend_thresh">
+ <property name="toolTip">
+- <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
++ <string>The number of thresholds the intensity range is divided up into.</string>
+ </property>
+ <property name="text">
+- <string>5</string>
++ <string>32</string>
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="1">
+- <widget class="QLineEdit" name="subpix">
++ <item row="0" column="0" colspan="2">
++ <widget class="QLabel" name="label_38">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string><a href = "https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html" >Extraction Params</a></string>
++ </property>
++ <property name="openExternalLinks">
++ <bool>true</bool>
++ </property>
++ </widget>
++ </item>
++ <item row="4" column="5">
++ <widget class="QLabel" name="label_13">
++ <property name="text">
++ <string>r_min</string>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="6">
++ <widget class="QComboBox" name="apertureShape">
+ <property name="toolTip">
+- <string>The subpixel sampling factor for star extraction</string>
++ <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
++ </property>
++ <property name="currentIndex">
++ <number>1</number>
+ </property>
++ <item>
++ <property name="text">
++ <string>Auto</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Circle</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Ellipse</string>
++ </property>
++ </item>
++ </widget>
++ </item>
++ <item row="0" column="2" colspan="2">
++ <widget class="QLabel" name="label_20">
+ <property name="text">
+- <string>5</string>
++ <string><a href="https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html">Deblending Params</a></string>
++ </property>
++ <property name="openExternalLinks">
++ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+- <item row="1" column="2">
++ <item row="2" column="2">
+ <widget class="QLabel" name="label_18">
+ <property name="text">
+ <string>Thresh</string>
+@@ -466,38 +554,34 @@
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="0">
+- <widget class="QLabel" name="label_24">
++ <item row="4" column="2">
++ <widget class="QLabel" name="label_26">
+ <property name="text">
+- <string>Sub Pix</string>
++ <string>Conv Filter</string>
+ </property>
+ </widget>
+ </item>
+- <item row="1" column="3">
+- <widget class="QLineEdit" name="deblend_thresh">
+- <property name="toolTip">
+- <string>The number of thresholds the intensity range is divided up into.</string>
+- </property>
++ <item row="3" column="5">
++ <widget class="QLabel" name="label_12">
+ <property name="text">
+- <string>32</string>
++ <string>Shape</string>
+ </property>
+ </widget>
+ </item>
+- <item row="1" column="5">
+- <widget class="QLabel" name="label_25">
+- <property name="text">
+- <string>Kron Factor</string>
++ <item row="6" column="0">
++ <widget class="QCheckBox" name="cleanCheckBox">
++ <property name="toolTip">
++ <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
+ </property>
+- </widget>
+- </item>
+- <item row="4" column="5">
+- <widget class="QLabel" name="label_15">
+ <property name="text">
+- <string>magzero</string>
++ <string>Clean?</string>
++ </property>
++ <property name="checked">
++ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="1">
++ <item row="6" column="1">
+ <widget class="QLineEdit" name="clean_param">
+ <property name="toolTip">
+ <string> The cleaning parameter</string>
+@@ -507,79 +591,71 @@
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="6">
+- <widget class="QComboBox" name="apertureShape">
++ <item row="5" column="0">
++ <widget class="QLabel" name="label_24">
++ <property name="text">
++ <string>Sub Pix</string>
++ </property>
++ </widget>
++ </item>
++ <item row="5" column="1">
++ <widget class="QLineEdit" name="subpix">
+ <property name="toolTip">
+- <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose. NOTE: Circle is usually better at the moment</string>
++ <string>The subpixel sampling factor for star extraction</string>
+ </property>
+- <property name="currentIndex">
+- <number>1</number>
++ <property name="text">
++ <string>5</string>
+ </property>
+- <item>
+- <property name="text">
+- <string>Auto</string>
+- </property>
+- </item>
+- <item>
+- <property name="text">
+- <string>Circle</string>
+- </property>
+- </item>
+- <item>
+- <property name="text">
+- <string>Ellipse</string>
+- </property>
+- </item>
+ </widget>
+ </item>
+- <item row="3" column="2">
+- <widget class="QLabel" name="label_23">
++ <item row="4" column="0">
++ <widget class="QLabel" name="label_21">
+ <property name="text">
+- <string>Conv FWHM</string>
++ <string>Min Area</string>
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="2">
+- <widget class="QLabel" name="label_19">
++ <item row="4" column="1">
++ <widget class="QLineEdit" name="minarea">
++ <property name="toolTip">
++ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
++ </property>
+ <property name="text">
+- <string>Min Cont.</string>
++ <string>5</string>
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="5">
+- <widget class="QLabel" name="label_13">
++ <item row="3" column="0">
++ <widget class="QLabel" name="label_22">
+ <property name="text">
+- <string>r_min</string>
++ <string>Thresh Offset</string>
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="3">
+- <widget class="QLineEdit" name="deblend_contrast">
++ <item row="3" column="1">
++ <widget class="QLineEdit" name="threshOffset">
+ <property name="toolTip">
+- <string>The percentage of flux a separate peak must have to be considered a separate object.</string>
++ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
+ </property>
+ <property name="text">
+- <string>1</string>
++ <string>0</string>
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="5">
+- <widget class="QLabel" name="label_12">
++ <item row="2" column="0">
++ <widget class="QLabel" name="label_30">
+ <property name="text">
+- <string>Shape</string>
++ <string>Thresh Multiple</string>
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="3">
+- <widget class="QSpinBox" name="fwhm">
++ <item row="2" column="1">
++ <widget class="QLineEdit" name="threshMultiple">
+ <property name="toolTip">
+- <string>A variable to store the fwhm in pixels used to generate the convolution filter for star detection.</string>
+- </property>
+- <property name="minimum">
+- <number>1</number>
++ <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
+ </property>
+- <property name="maximum">
+- <number>10</number>
++ <property name="text">
++ <string>2.0</string>
+ </property>
+ </widget>
+ </item>
+diff --git a/kstars/fitsviewer/fitssepdetector.cpp b/kstars/fitsviewer/fitssepdetector.cpp
+index c943b5d30..4a1ccb9dc 100644
+--- a/kstars/fitsviewer/fitssepdetector.cpp
++++ b/kstars/fitsviewer/fitssepdetector.cpp
+@@ -113,10 +113,6 @@ bool FITSSEPDetector::findSourcesAndBackground(QRect const &boundary)
+ else
+ solver->setParameters(SSolver::Parameters()); // This is default
+
+- // Wait synchronously
+-
+- QEventLoop loop;
+- connect(solver, &StellarSolver::finished, &loop, &QEventLoop::quit);
+ QList<FITSImage::Star> stars;
+ const bool runHFR = group != Ekos::AlignProfiles;
+
+@@ -124,7 +120,7 @@ bool FITSSEPDetector::findSourcesAndBackground(QRect const &boundary)
+ solver->extract(runHFR, boundary);
+ else
+ solver->extract(runHFR);
+- loop.exec(QEventLoop::ExcludeUserInputEvents);
++
+ stars = solver->getStarList();
+
+ if (stars.empty())
+diff --git a/kstars/fitsviewer/structuredefinitions.h b/kstars/fitsviewer/structuredefinitions.h
+index 92556e6cb..16ba59945 100644
+--- a/kstars/fitsviewer/structuredefinitions.h
++++ b/kstars/fitsviewer/structuredefinitions.h
+@@ -6,45 +6,56 @@
+ #define STRUCTUREDEFINITIONS_H
+
+ //system includes
+-#include "stdint.h"
++#include <stdint.h>
++#include <math.h>
+ #include <QString>
+-#include <QVector>
+-#include "math.h"
+
+ namespace FITSImage
+ {
+
+-/// Stats struct to hold statisical data about the FITS data
+-/// This is defined in both KStars and StellarSolver
+-typedef struct
++typedef enum
+ {
+- double min[3] = {0}, max[3] = {0};
+- double mean[3] = {0};
+- double stddev[3] = {0};
+- double median[3] = {0};
+- double SNR { 0 };
+- /// FITS image data type (TBYTE, TUSHORT, TULONG, TFLOAT, TLONGLONG, TDOUBLE)
+- uint32_t dataType { 0 };
+- int bytesPerPixel { 1 };
+- int ndim { 2 };
+- int64_t size { 0 };
+- uint32_t samples_per_channel { 0 };
+- uint16_t width { 0 };
+- uint16_t height { 0 };
+- /// Number of channels
+- uint8_t channels { 1 };
++ POSITIVE,
++ NEGATIVE,
++ BOTH
++} Parity;
++
++static const QString getParityText(Parity parity){
++ return parity == FITSImage::NEGATIVE ? "negative" : "positive";
++}
++
++static const QString getShortParityText(Parity parity){
++ return parity == FITSImage::NEGATIVE ? "neg" : "pos";
++}
++
++// Stats struct to hold statisical data about the FITS data
++typedef struct Statistic
++{
++ double min[3] = {0}, max[3] = {0}; // Minimum and Maximum R, G, B pixel values in the image
++ double mean[3] = {0}; // Average R, G, B value of the pixels in the image
++ double stddev[3] = {0}; // Standard Deviation of the R, G, B pixel values in the image
++ double median[3] = {0}; // Median R, G, B pixel value in the image
++ double SNR { 0 }; // Signal to noise ratio
++ uint32_t dataType { 0 }; // FITS image data type (TBYTE, TUSHORT, TULONG, TFLOAT, TLONGLONG, TDOUBLE)
++ int bytesPerPixel { 1 }; // Number of bytes used for each pixel, size of datatype above
++ int ndim { 2 }; // Number of dimensions in a fits image
++ int64_t size { 0 }; // Filesize in bytes
++ uint32_t samples_per_channel { 0 }; // area of the image in pixels
++ uint16_t width { 0 }; // width of the image in pixels
++ uint16_t height { 0 }; // height of the image in pixels
++ uint8_t channels { 1 }; // Mono Images have 1 channel, RGB has 3 channels
+ } Statistic;
+
+ // This structure holds data about sources that are found within
+ // an image. It is returned by Source Extraction
+-typedef struct
++typedef struct Star
+ {
+ float x; // The x position of the star in Pixels
+ float y; // The y position of the star in Pixels
+- float mag; // The magnitude of the star
++ float mag; // The magnitude of the star, note that this is a relative magnitude based on the star extraction options.
+ float flux; // The calculated total flux
+ float peak; // The peak value of the star
+- float HFR; // The half flux radius
++ float HFR; // The half flux radius of the star
+ float a; // The semi-major axis of the star
+ float b; // The semi-minor axis of the star
+ float theta; // The angle of orientation of the star
+@@ -55,29 +66,36 @@ typedef struct
+
+ // This struct holds data about the background in an image
+ // It is returned by source extraction
+-typedef struct
++typedef struct Background
+ {
+- int bw, bh; // single tile width, height
+- float global; // global mean
+- float globalrms; // global sigma
++ int bw, bh; // single tile width, height
++ float global; // global mean
++ float globalrms; // global sigma
+ int num_stars_detected; // Number of stars detected before any reduction.
+ } Background;
+
+ // This struct contains information about the astrometric solution
+ // for an image.
+-typedef struct
++typedef struct Solution
+ {
+ double fieldWidth; // The calculated width of the field in arcminutes
+ double fieldHeight; // The calculated height of the field in arcminutes
+- double ra; // The Right Ascension of the center of the field
+- double dec; // The Declination of the center of the field
++ double ra; // The Right Ascension of the center of the field in degrees
++ double dec; // The Declination of the center of the field in degrees
+ double orientation; // The orientation angle of the image from North in degrees
+- double pixscale; // The pixel scale of the image
+- QString parity; // The parity of the solved image. (Whether it has been flipped) JPEG images tend to have negative parity while FITS files tend to have positive parity.
++ double pixscale; // The pixel scale of the image in arcseconds per pixel
++ Parity parity; // The parity of the solved image. (Whether it has been flipped) JPEG images tend to have negative parity while FITS files tend to have positive parity.
+ double raError; // The error between the search_ra position and the solution ra position in arcseconds
+ double decError; // The error between the search_dec position and the solution dec position in arcseconds
+ } Solution;
+
++// This is point in the World Coordinate System with both RA and DEC.
++typedef struct wcs_point
++{
++ float ra; // The Right Ascension in degrees
++ float dec; // The Declination in degrees
++} wcs_point;
++
+ } // FITSImage
+
+ #endif // STRUCTUREDEFINITIONS_H
+diff --git a/kstars/kstars.kcfg b/kstars/kstars.kcfg
+index 35d189191..da9727031 100644
+--- a/kstars/kstars.kcfg
++++ b/kstars/kstars.kcfg
+@@ -2151,6 +2151,11 @@
+ <whatsthis>Path to the Sextractor executable.</whatsthis>
+ <default code="true">KSUtils::getDefaultPath("SextractorBinary")</default>
+ </entry>
++ <entry name="WatneyBinary" type="String">
++ <label></label>
++ <whatsthis>Path to the Watney Solver executable.</whatsthis>
++ <default code="true">KSUtils::getDefaultPath("WatneyBinary")</default>
++ </entry>
+
+ <entry name="AstrometryAPIKey" type="String">
+ <label>astrometry.net API Key</label>
+--
+GitLab
+
More information about the arch-commits
mailing list