From 06b3dbc1bb5018d233d95bbd4972eb27178625a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Du=C5=A1an=20Poizl?=
Date: Wed, 2 Oct 2024 11:52:35 +0200
Subject: [PATCH] Update help and translation
---
about/help_en | 28 ++
about/help_fr | 10 +
about/help_sk | 10 +
imageinfo.cpp | 18 +
imageinfo.h | 2 +
platesolving.cpp | 19 +-
platesolving.ui | 5 +-
platesolvingsettings.ui | 5 +-
translations/tenmon_en.qm | Bin 14409 -> 23208 bytes
translations/tenmon_en.ts | 784 ++++++++++++++++++++++++++++---------
translations/tenmon_fr.qm | Bin 16313 -> 16052 bytes
translations/tenmon_fr.ts | 788 +++++++++++++++++++++++++++++---------
translations/tenmon_sk.qm | Bin 15323 -> 25734 bytes
translations/tenmon_sk.ts | 784 ++++++++++++++++++++++++++++---------
14 files changed, 1878 insertions(+), 575 deletions(-)
diff --git a/about/help_en b/about/help_en
index 1eae1ee..caf39e0 100644
--- a/about/help_en
+++ b/about/help_en
@@ -116,6 +116,24 @@ Pressing Enter or clicking on Filter button will filter out database reco
This example filters for files where: "Bias" is in the file name, the OBJECT property is "M_42" (where the underscore can be any single character), and the DATE property begins with "2022".
+
Plate Solving
+
This module can plate solve images and update FITS header with solution for FITS and XISF images.
+Profile this set various parameters that affect star extraction and solving.
+Starting point program will try to automatically determine optimal starting point which helps to speed up solving.
+You can leave one or both unchecked then it will attempt to do blind solving. If the position or scale is wrong it can actually
+fail to solve.
+Solution this section contain resulting solution like RA,DEC coordinates center of image, image field of view, orientation as degrees E of N,
+image scale in arcseconds per pixel, number of stars extracted and HFR fitting and eccentricity. Then there is log window for debug information from
+solver.
+
+
Then finally there are various action button. Settings button show dialog where you can set path to existing index files or auto download some.
+Extract button will just extract stars from image and it will show their count, HFR and eccentricity. This action doesn't need index files.
+Solve button will try to find coordinates of images. Abort button will stop extraction or solving. Update FITS header will update FITS fits keywords
+with found solution.
+
+
In settings dialog you can set path to index files which is by default custom internal one. It also try to locate commonly used path from other
+programs like KStars for astrometry.net index files.
+
Batch processing
@@ -155,6 +173,8 @@ There is global object called core that have these methods.
getFloat(label = "", value = 0, decimals = 3) show dialog box with input box to retrieve decimal value. String value passed in first argument is used as description label.
Second parameter is default value in input box. All three parameters are optional. When cancel is pressed it return Undefined.
getItem(items) show selection dialog which allow to select one item from array of items. It return selected item as string. When cancel is pressed it return Undefined.
+
setStartingSolution(solution) with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
+ Same object as returned by File.solve() method. You can also call it without paramer in which case it will clear any previously set values.
File
@@ -208,6 +228,14 @@ for(file of convertedFiles)// now we can iterate over the files
stats() calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
let s = file.stats();
core.log("Median value is " + s.median);
+
solve(updateHeader) this method will run plate solving on this image and will return solution in form of object with these attributes "ra" and "dec" which are center coordinates of image
+ "fieldWidth" and "fieldHeight" which is FOV of image in arcseconds, "orientation" is degrees east of north, "pixscale" scale of image in arcseconds per pixel,
+ "parity" true false value if the image was flipped in vertical direction, "raError" and "decError" deviation from starting point.
+ When updateHeader is set to true it update FITS header for file with this solution. Default value is false.
+
extractStars(hfr) extract stars will run extraction of stars. When parameter hfr is set to true it will fit HFR on every star.
+ It return array of objects representing extracted stars. Each object in array
+ will have these attributes "x" and "y" pixel coordinates of center of star, "mag" relative magnitude of star, "flux" total flux, "peak" peak value of star, "HFR" half flux radius of star,
+ "a" and "b" semi major and minor axis of star, "theta" angle of orientation of the star, "ra" and "dec" coordinates of star, "numPixels" number of pixel occupied by the star in image.
FITSRecordModify
diff --git a/about/help_fr b/about/help_fr
index 6da2fe8..8fc9b8d 100644
--- a/about/help_fr
+++ b/about/help_fr
@@ -133,6 +133,8 @@ Le deuxième paramètre est la valeur par défaut dans la zone de saisie. Les de
getFloat(label = "", value = 0, decimals = 3) affiche une boîte de dialogue avec une zone de saisie pour récupérer une valeur décimale. Le texte passé dans le premier argument est utilisé comme label de description.
Le deuxième paramètre est la valeur par défaut dans la zone de saisie. Les trois paramètres sont facultatifs. Lorsque vous appuyez sur Annuler, il renvoie Undefined.
getItem(items) affiche une boîte de dialogue de sélection qui permet de sélectionner un élément dans un tableau d'éléments. Lorsque vous appuyez sur Annuler, il renvoie Undefined.
+
setStartingSolution(solution) with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
+ Same object as returned by File.solve() method. You can also call it without paramer in which case it will clear any previously set values.
File
@@ -185,6 +187,14 @@ for(file of convertedFiles)// now we can iterate over the files
stats() calculer les statistiques d'images de base et les renvoyer sous forme d'objet avec des attributs "mean", "stddev", "median", "min", "max" et "mad".
let s = file.stats();
core.log("Median value is " + s.median);
+
solve(updateHeader) this method will run plate solving on this image and will return solution in form of object with these attributes "ra" and "dec" which are center coordinates of image
+ "fieldWidth" and "fieldHeight" which is FOV of image in arcseconds, "orientation" is degrees east of north, "pixscale" scale of image in arcseconds per pixel,
+ "parity" true false value if the image was flipped in vertical direction, "raError" and "decError" deviation from starting point.
+ When updateHeader is set to true it update FITS header for file with this solution. Default value is false.
+
extractStars(hfr) extract stars will run extraction of stars. When parameter hfr is set to true it will fit HFR on every star.
+ It return array of objects representing extracted stars. Each object in array
+ will have these attributes "x" and "y" pixel coordinates of center of star, "mag" relative magnitude of star, "flux" total flux, "peak" peak value of star, "HFR" half flux radius of star,
+ "a" and "b" semi major and minor axis of star, "theta" angle of orientation of the star, "ra" and "dec" coordinates of star, "numPixels" number of pixel occupied by the star in image.
FITSRecordModify
diff --git a/about/help_sk b/about/help_sk
index 015722d..6f2d7b0 100644
--- a/about/help_sk
+++ b/about/help_sk
@@ -122,6 +122,8 @@ V skripte je dostupný globálny objekt nazvaný core ktorý má nasledov
getFloat(label = "", value = 0, decimals = 3) ukáže diálog pre získanie reálneho čísla. Prvý parameter je textový popis. Druhý parameter je východzia hodnota. Tretí parameter je počet desatinných miest.
Obydva parametre sú voliteľné. Vracia zadané číslo alebo ak je stlačené tlačidlo zrušiť vráti Undefined.
getItem(items) ukáže dialog pre výber jednej hodnoty z poľa hodnôt. Vracia vybranú hodnotu ako String alebo ak je stlačené tlačidlo zrušiť vráti Undefined.
+
setStartingSolution(solution) with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
+ Same object as returned by File.solve() method. You can also call it without paramer in which case it will clear any previously set values.
File
@@ -175,6 +177,14 @@ for(file of convertedFiles)// now we can iterate over the files
stats() calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
let s = file.stats();
core.log("Median value is " + s.median);
+
solve(updateHeader) this method will run plate solving on this image and will return solution in form of object with these attributes "ra" and "dec" which are center coordinates of image
+ "fieldWidth" and "fieldHeight" which is FOV of image in arcseconds, "orientation" is degrees east of north, "pixscale" scale of image in arcseconds per pixel,
+ "parity" true false value if the image was flipped in vertical direction, "raError" and "decError" deviation from starting point.
+ When updateHeader is set to true it update FITS header for file with this solution. Default value is false.
+
extractStars(hfr) extract stars will run extraction of stars. When parameter hfr is set to true it will fit HFR on every star.
+ It return array of objects representing extracted stars. Each object in array
+ will have these attributes "x" and "y" pixel coordinates of center of star, "mag" relative magnitude of star, "flux" total flux, "peak" peak value of star, "HFR" half flux radius of star,
+ "a" and "b" semi major and minor axis of star, "theta" angle of orientation of the star, "ra" and "dec" coordinates of star, "numPixels" number of pixel occupied by the star in image.
FITSRecordModify
diff --git a/imageinfo.cpp b/imageinfo.cpp
index 8efed53..fb3c587 100644
--- a/imageinfo.cpp
+++ b/imageinfo.cpp
@@ -344,6 +344,24 @@ double SkyPoint::fromDMS(const QString &dms)
return deg;
}
+QString SkyPoint::toHMS(double decHour)
+{
+ double h,m,s,md;
+ md = std::modf(decHour, &h) * 60.0;
+ s = std::modf(md, &m) * 60.0;
+
+ return QString("%1h %2m %3s").arg((int)h, 2, 10, QChar('0')).arg((int)m, 2, 10, QChar('0')).arg((int)s, 2, 10, QChar('0'));
+}
+
+QString SkyPoint::toDMS(double deg)
+{
+ double d,m,s,md;
+ md = std::modf(deg, &d) * 60.0;
+ s = std::modf(md, &m) * 60.0;
+
+ return QString("%1˚ %2' %3\"").arg((int)d, 2, 10, QChar('0')).arg((int)m, 2, 10, QChar('0')).arg((int)s, 2, 10, QChar('0'));
+}
+
SkyPointScale ImageInfoData::getCenterRaDec() const
{
SkyPointScale ret;
diff --git a/imageinfo.h b/imageinfo.h
index cca16a7..2a194f7 100644
--- a/imageinfo.h
+++ b/imageinfo.h
@@ -36,6 +36,8 @@ public:
QString toString() const;
static double fromHMS(const QString &hms);
static double fromDMS(const QString &dms);
+ static QString toHMS(double decHour);
+ static QString toDMS(double deg);
};
struct SkyPointScale
diff --git a/platesolving.cpp b/platesolving.cpp
index 386ec56..7c8b935 100644
--- a/platesolving.cpp
+++ b/platesolving.cpp
@@ -24,11 +24,15 @@ PlateSolving::PlateSolving(QWidget *parent)
_ui->profileComboBox->addItem(profile.listName);
}
_ui->profileComboBox->setCurrentIndex(profileIdx);
+ _ui->profileComboBox->setToolTip(profiles[profileIdx].description);
_ui->scaleUnit->setCurrentIndex(settings.value("platesolving/scaleUnit", 1).toInt());
connect(_ui->profileComboBox, &QComboBox::currentIndexChanged, [this](int index){
auto profiles = StellarSolver::getBuiltInProfiles();
_solver->setParameters(profiles[index]);
+ _ui->profileComboBox->setToolTip(profiles[index].description);
+ QSettings settings;
+ settings.setValue("platesolving/profile", index);
});
connect(_ui->extractButton, &QPushButton::clicked, this, &PlateSolving::extract);
@@ -36,6 +40,7 @@ PlateSolving::PlateSolving(QWidget *parent)
connect(_ui->settingsButton, &QPushButton::clicked, this, &PlateSolving::settings);
connect(_ui->abortButton, &QPushButton::clicked, this, &PlateSolving::abort);
connect(_ui->updateButton, &QPushButton::clicked, this, &PlateSolving::updateHeader);
+ connect(_ui->raStart, &QDoubleSpinBox::valueChanged, [this](double val){ _ui->raLabel->setText("RA " + SkyPoint::toHMS(val)); });
connect(_solver, &Solver::solvingDone, this, &PlateSolving::solvingDone);
connect(_solver, &Solver::extractionDone, this, &PlateSolving::extractionDone);
connect(_solver, &Solver::logOutput, [this](const QString &log){ _ui->log->appendPlainText(log); });
@@ -81,7 +86,7 @@ void PlateSolving::extractionDone()
}
_ui->stars->setText(QString::number(stars.size()));
- _ui->hfr->setText(QString("%1 Ecc:%2").arg(hfr).arg(std::sqrt(1 - (b*b)/(a*a))));
+ _ui->hfr->setText(QString("%1pix Ecc:%2").arg(hfr).arg(std::sqrt(1 - (b*b)/(a*a))));
_ui->log->appendPlainText(QString("Extraction finished in %1 ms").arg(_solvingTime.elapsed()));
_ui->solveButton->setDisabled(false);
@@ -126,12 +131,12 @@ void PlateSolving::solvingDone()
_ui->extractButton->setDisabled(false);
auto solution = _solver->getSolution();
- _ui->ra->setText(QString::number(solution.ra));
- _ui->dec->setText(QString::number(solution.dec));
- _ui->orientation->setText(QString::number(solution.orientation));
- _ui->fieldWidth->setText(QString::number(solution.fieldWidth));
- _ui->fieldHeight->setText(QString::number(solution.fieldHeight));
- _ui->pixelScale->setText(QString::number(solution.pixscale));
+ _ui->ra->setText(SkyPoint::toHMS(solution.ra / 15.0));
+ _ui->dec->setText(SkyPoint::toDMS(solution.dec));
+ _ui->orientation->setText(QString::number(solution.orientation) + "°");
+ _ui->fieldWidth->setText(QString::number(solution.fieldWidth) + "'");
+ _ui->fieldHeight->setText(QString::number(solution.fieldHeight) + "\"");
+ _ui->pixelScale->setText(QString::number(solution.pixscale) + "\"/pix");
_ui->log->appendPlainText(QString("Solving finished in %1 ms").arg(_solvingTime.elapsed()));
}
diff --git a/platesolving.ui b/platesolving.ui
index a016514..3f4f502 100644
--- a/platesolving.ui
+++ b/platesolving.ui
@@ -100,6 +100,9 @@
24.000000000000000
+
+ 0.100000000000000
+
@@ -163,7 +166,7 @@
-
+ RA
diff --git a/platesolvingsettings.ui b/platesolvingsettings.ui
index ef4481a..b5b9527 100644
--- a/platesolvingsettings.ui
+++ b/platesolvingsettings.ui
@@ -45,11 +45,14 @@
- <html><head/><body><p>Plate solving need index files in order to solve an image. You can download them here by checking. This is possible only to default location.</p><p>It is required to download index files that cover 100%-50% field of view and recomended 100%-10%. So for images with 70' field of view it is required to download index files in 30'-85' and recomended 4'-85'.</p></body></html>
+ <html><head/><body><p>Plate solving need index files in order to solve an image. You can download them here by clicking on check box. It will download them into default location. Or you can reuse <span style=" font-weight:700;">any</span> index files (not only listed bellow) from astrometry.net by adding path pointing to them. <a href="https://astrometrynet.readthedocs.io/en/latest/readme.html#getting-index-files"><span style=" text-decoration: underline; color:#0000ff;">More details about index files.</span></a></p><p>It is required to download index files that cover 100%-50% field of view and recomended 100%-10%. So for images with 70' field of view it is required to download index files in 30'-85' and recomended 4'-85'.</p></body></html>true
+
+ true
+
diff --git a/translations/tenmon_en.qm b/translations/tenmon_en.qm
index 06052ad64191411efafe2a210ddeb2fee5939e67..e45526feece208c0a65b45187e2b622f31d073c0 100644
GIT binary patch
literal 23208
zcmb_^3v^spb@q`oGkT3=Sy61qam=-B#c~pj-m+{92TQVK1?InTgLNc6{}P_dM{mJ-fbe*ZcqE?;jLGgsto=&n-?0
z(Rf0L`lJxoegPkvLR|j_A!a`$#H206iTi};-6zD!PYH40{X(4jMInwGLY!T~>v16#
zZxN#5>!SYrLzw?|(J<8`#MX5Yy6{CII?s#HL#skueTN8rHYCKhJtFjHe14+{J;CRb
zBJ?E2?|evvo*NLN?YMfq`jaB`!ncIDu2+Qq<8C23UM<37zlP^?B0PSt5KaH8Uav`t
z@R8R7kKYvG6Qe@3|D_18d|rs?_3G6)FTxjq_a4lD6zkpa1rdJY%R=mXK-@6>UEtfL
zUZ+1NW`E;;A@;vQ+%)!p5Oqu9rqBEkv>y{MzkRO|SN>3(eAluN(}%>V?GFplYKhz9
zj{@E`;`Wb#KR3*aJMZ~4*8i~hxqtr%cy~^uZ1AJ=0daw^;;Z7`Cwhh0{YLTOXAk20
z*NH!@yG@9x8S%xxz`X6hB)<03w?PK~S|?u80Qi5WUU!ewMc;On5M#emx4Y|0`20%s
z+VynZ{=0Vo|Nm2G{pfu{^z5tq)CayJ#IC=tdt~yc5Hs(o`^L-g3QFW_=l;6Cc?|M8
z@aJ{kIuAbFWYm3cxmk#V57mp-cL~wIUcdFkH-+f_hx&atf)59F)?a(?0U=`lR6lT4
z7xd$f`b<6e5ewI6`?1d1U#QRh-c!Km*VXH;U#VYf1^=7xs$cst=-K)0`VVw`MTp_%
z`j0)f2>w4<|M96K;QK;D*9bn}ai-zQ`%6Mx6>Yf6{39VETN{=N1<-S+_8$R(p=