Update help and translation
This commit is contained in:
@@ -116,6 +116,24 @@ Pressing Enter or clicking on <i>Filter</i> 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".
|
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".
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<h3>Plate Solving</h3>
|
||||||
|
<p>This module can plate solve images and update FITS header with solution for FITS and XISF images.
|
||||||
|
<b>Profile</b> this set various parameters that affect star extraction and solving.
|
||||||
|
<b>Starting point</b> 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.
|
||||||
|
<b>Solution</b> 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.
|
||||||
|
</p>
|
||||||
|
<p>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.
|
||||||
|
|
||||||
|
<p>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.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3>Batch processing</h3>
|
<h3>Batch processing</h3>
|
||||||
|
|
||||||
@@ -155,6 +173,8 @@ There is global object called <b>core</b> that have these methods.
|
|||||||
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> show dialog box with input box to retrieve decimal value. String value passed in first argument is used as description label.
|
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> 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.</li>
|
Second parameter is default value in input box. All three parameters are optional. When cancel is pressed it return Undefined.</li>
|
||||||
<li><b>getItem(items)</b> 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.</li>
|
<li><b>getItem(items)</b> 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.</li>
|
||||||
|
<li><b>setStartingSolution(solution)</b> with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
|
||||||
|
Same object as returned by <i>File.solve()</i> method. You can also call it without paramer in which case it will clear any previously set values.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>File</h4>
|
<h4>File</h4>
|
||||||
@@ -208,6 +228,14 @@ for(file of convertedFiles)// now we can iterate over the files
|
|||||||
<li><b>stats()</b> calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
|
<li><b>stats()</b> calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
|
||||||
<pre>let s = file.stats();
|
<pre>let s = file.stats();
|
||||||
core.log("Median value is " + s.median);</pre></li>
|
core.log("Median value is " + s.median);</pre></li>
|
||||||
|
<li><b>solve(updateHeader)</b> 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.</li>
|
||||||
|
<li><b>extractStars(hfr)</b> 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.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>FITSRecordModify</h4>
|
<h4>FITSRecordModify</h4>
|
||||||
|
|||||||
@@ -133,6 +133,8 @@ Le deuxième paramètre est la valeur par défaut dans la zone de saisie. Les de
|
|||||||
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> 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.
|
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> 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.</li>
|
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.</li>
|
||||||
<li><b>getItem(items)</b> 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.</li>
|
<li><b>getItem(items)</b> 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.</li>
|
||||||
|
<li><b>setStartingSolution(solution)</b> with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
|
||||||
|
Same object as returned by <i>File.solve()</i> method. You can also call it without paramer in which case it will clear any previously set values.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>File</h4>
|
<h4>File</h4>
|
||||||
@@ -185,6 +187,14 @@ for(file of convertedFiles)// now we can iterate over the files
|
|||||||
<li><b>stats()</b> calculer les statistiques d'images de base et les renvoyer sous forme d'objet avec des attributs "mean", "stddev", "median", "min", "max" et "mad".
|
<li><b>stats()</b> calculer les statistiques d'images de base et les renvoyer sous forme d'objet avec des attributs "mean", "stddev", "median", "min", "max" et "mad".
|
||||||
<pre>let s = file.stats();
|
<pre>let s = file.stats();
|
||||||
core.log("Median value is " + s.median);</pre></li>
|
core.log("Median value is " + s.median);</pre></li>
|
||||||
|
<li><b>solve(updateHeader)</b> 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.</li>
|
||||||
|
<li><b>extractStars(hfr)</b> 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.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>FITSRecordModify</h4>
|
<h4>FITSRecordModify</h4>
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ V skripte je dostupný globálny objekt nazvaný <b>core</b> ktorý má nasledov
|
|||||||
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> 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.
|
<li><b>getFloat(label = "", value = 0, decimals = 3)</b> 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.</li>
|
Obydva parametre sú voliteľné. Vracia zadané číslo alebo ak je stlačené tlačidlo zrušiť vráti Undefined.</li>
|
||||||
<li><b>getItem(items)</b> 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.</li>
|
<li><b>getItem(items)</b> 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.</li>
|
||||||
|
<li><b>setStartingSolution(solution)</b> with this you can set starting point and image scale. It accepth object with attributes "ra", "dec", "pixscale".
|
||||||
|
Same object as returned by <i>File.solve()</i> method. You can also call it without paramer in which case it will clear any previously set values.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>File</h4>
|
<h4>File</h4>
|
||||||
@@ -175,6 +177,14 @@ for(file of convertedFiles)// now we can iterate over the files
|
|||||||
<li><b>stats()</b> calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
|
<li><b>stats()</b> calculate basic images statistics and return them as object with attributes "mean", "stddev", "median", "min", "max" and "mad".
|
||||||
<pre>let s = file.stats();
|
<pre>let s = file.stats();
|
||||||
core.log("Median value is " + s.median);</pre></li>
|
core.log("Median value is " + s.median);</pre></li>
|
||||||
|
<li><b>solve(updateHeader)</b> 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.</li>
|
||||||
|
<li><b>extractStars(hfr)</b> 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.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>FITSRecordModify</h4>
|
<h4>FITSRecordModify</h4>
|
||||||
|
|||||||
@@ -344,6 +344,24 @@ double SkyPoint::fromDMS(const QString &dms)
|
|||||||
return deg;
|
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 ImageInfoData::getCenterRaDec() const
|
||||||
{
|
{
|
||||||
SkyPointScale ret;
|
SkyPointScale ret;
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ public:
|
|||||||
QString toString() const;
|
QString toString() const;
|
||||||
static double fromHMS(const QString &hms);
|
static double fromHMS(const QString &hms);
|
||||||
static double fromDMS(const QString &dms);
|
static double fromDMS(const QString &dms);
|
||||||
|
static QString toHMS(double decHour);
|
||||||
|
static QString toDMS(double deg);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SkyPointScale
|
struct SkyPointScale
|
||||||
|
|||||||
+12
-7
@@ -24,11 +24,15 @@ PlateSolving::PlateSolving(QWidget *parent)
|
|||||||
_ui->profileComboBox->addItem(profile.listName);
|
_ui->profileComboBox->addItem(profile.listName);
|
||||||
}
|
}
|
||||||
_ui->profileComboBox->setCurrentIndex(profileIdx);
|
_ui->profileComboBox->setCurrentIndex(profileIdx);
|
||||||
|
_ui->profileComboBox->setToolTip(profiles[profileIdx].description);
|
||||||
_ui->scaleUnit->setCurrentIndex(settings.value("platesolving/scaleUnit", 1).toInt());
|
_ui->scaleUnit->setCurrentIndex(settings.value("platesolving/scaleUnit", 1).toInt());
|
||||||
|
|
||||||
connect(_ui->profileComboBox, &QComboBox::currentIndexChanged, [this](int index){
|
connect(_ui->profileComboBox, &QComboBox::currentIndexChanged, [this](int index){
|
||||||
auto profiles = StellarSolver::getBuiltInProfiles();
|
auto profiles = StellarSolver::getBuiltInProfiles();
|
||||||
_solver->setParameters(profiles[index]);
|
_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);
|
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->settingsButton, &QPushButton::clicked, this, &PlateSolving::settings);
|
||||||
connect(_ui->abortButton, &QPushButton::clicked, this, &PlateSolving::abort);
|
connect(_ui->abortButton, &QPushButton::clicked, this, &PlateSolving::abort);
|
||||||
connect(_ui->updateButton, &QPushButton::clicked, this, &PlateSolving::updateHeader);
|
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::solvingDone, this, &PlateSolving::solvingDone);
|
||||||
connect(_solver, &Solver::extractionDone, this, &PlateSolving::extractionDone);
|
connect(_solver, &Solver::extractionDone, this, &PlateSolving::extractionDone);
|
||||||
connect(_solver, &Solver::logOutput, [this](const QString &log){ _ui->log->appendPlainText(log); });
|
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->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->log->appendPlainText(QString("Extraction finished in %1 ms").arg(_solvingTime.elapsed()));
|
||||||
|
|
||||||
_ui->solveButton->setDisabled(false);
|
_ui->solveButton->setDisabled(false);
|
||||||
@@ -126,12 +131,12 @@ void PlateSolving::solvingDone()
|
|||||||
_ui->extractButton->setDisabled(false);
|
_ui->extractButton->setDisabled(false);
|
||||||
|
|
||||||
auto solution = _solver->getSolution();
|
auto solution = _solver->getSolution();
|
||||||
_ui->ra->setText(QString::number(solution.ra));
|
_ui->ra->setText(SkyPoint::toHMS(solution.ra / 15.0));
|
||||||
_ui->dec->setText(QString::number(solution.dec));
|
_ui->dec->setText(SkyPoint::toDMS(solution.dec));
|
||||||
_ui->orientation->setText(QString::number(solution.orientation));
|
_ui->orientation->setText(QString::number(solution.orientation) + "°");
|
||||||
_ui->fieldWidth->setText(QString::number(solution.fieldWidth));
|
_ui->fieldWidth->setText(QString::number(solution.fieldWidth) + "'");
|
||||||
_ui->fieldHeight->setText(QString::number(solution.fieldHeight));
|
_ui->fieldHeight->setText(QString::number(solution.fieldHeight) + "\"");
|
||||||
_ui->pixelScale->setText(QString::number(solution.pixscale));
|
_ui->pixelScale->setText(QString::number(solution.pixscale) + "\"/pix");
|
||||||
_ui->log->appendPlainText(QString("Solving finished in %1 ms").arg(_solvingTime.elapsed()));
|
_ui->log->appendPlainText(QString("Solving finished in %1 ms").arg(_solvingTime.elapsed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -100,6 +100,9 @@
|
|||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<double>24.000000000000000</double>
|
<double>24.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="2">
|
<item row="4" column="2">
|
||||||
@@ -163,7 +166,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_10">
|
<widget class="QLabel" name="raLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>RA</string>
|
<string>RA</string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -45,11 +45,14 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><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></string>
|
<string><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></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|||||||
Binary file not shown.
+596
-188
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+598
-190
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+596
-188
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user