summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/tools/modcalcvlsr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/tools/modcalcvlsr.cpp')
-rw-r--r--kstars/kstars/tools/modcalcvlsr.cpp577
1 files changed, 577 insertions, 0 deletions
diff --git a/kstars/kstars/tools/modcalcvlsr.cpp b/kstars/kstars/tools/modcalcvlsr.cpp
new file mode 100644
index 00000000..601f9e77
--- /dev/null
+++ b/kstars/kstars/tools/modcalcvlsr.cpp
@@ -0,0 +1,577 @@
+/***************************************************************************
+ modcalcvlsr.cpp - description
+ -------------------
+ begin : sun mar 13 2005
+ copyright : (C) 2005 by Pablo de Vicente
+ email : p.devicente@wanadoo.es
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "modcalcvlsr.h"
+
+#include "modcalcvlsr.moc"
+#include "ksnumbers.h"
+#include "dms.h"
+#include "dmsbox.h"
+#include "skypoint.h"
+#include "geolocation.h"
+#include "kstars.h"
+#include "kstarsdata.h"
+#include "kstarsdatetime.h"
+#include "libkdeedu/extdate/extdatetimeedit.h"
+
+#include <qdatetimeedit.h> //need for QTimeEdit
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qstring.h>
+#include <qtextstream.h>
+#include <kfiledialog.h>
+#include <kmessagebox.h>
+
+
+modCalcVlsr::modCalcVlsr(QWidget *parentSplit, const char *name) : modCalcVlsrDlg (parentSplit,name) {
+
+ showCurrentDateTime();
+ initGeo();
+ showLongLat();
+ raBox->setDegType(FALSE);
+ show();
+}
+
+modCalcVlsr::~modCalcVlsr(){
+ delete geoPlace;
+}
+
+SkyPoint modCalcVlsr::getEquCoords (void)
+{
+ dms raCoord, decCoord;
+
+ raCoord = raBox->createDms(FALSE);
+ decCoord = decBox->createDms();
+
+ SkyPoint sp = SkyPoint (raCoord, decCoord);
+
+ return sp;
+}
+
+double modCalcVlsr::getVLSR (void)
+{
+ double vlsr = vlsrBox->text().toDouble();
+ return vlsr;
+}
+
+double modCalcVlsr::getVhel (void)
+{
+ double vh = vHelioBox->text().toDouble();
+ return vh;
+}
+
+double modCalcVlsr::getVgeo (void)
+{
+ double vg = vGeoBox->text().toDouble();
+ return vg;
+}
+
+double modCalcVlsr::getVtopo (void)
+{
+ double vt = vTopoBox->text().toDouble();
+ return vt;
+}
+
+
+KStarsDateTime modCalcVlsr::getDateTime (void)
+{
+ return KStarsDateTime( datBox->date() , timBox->time() );
+}
+
+double modCalcVlsr::getEpoch (QString eName)
+{
+ bool ok = false;
+ double epoch = eName.toDouble(&ok);
+ if ( ok )
+ return epoch;
+ else {
+ kdDebug() << i18n( "Could not parse epoch string; assuming J2000" ) << endl;
+ return 2000.0;
+ }
+}
+
+dms modCalcVlsr::getLongitude(void)
+{
+ dms longitude;
+ longitude = longBox->createDms();
+ return longitude;
+}
+
+dms modCalcVlsr::getLatitude(void)
+{
+ dms latitude;
+ latitude = latBox->createDms();
+ return latitude;
+}
+
+double modCalcVlsr::getHeight(void)
+{
+ bool ok = false;
+ double height = heightBox->text().toDouble(&ok);
+ if (ok)
+ return height;
+ else {
+ kdDebug() << i18n( "Could not parse height string; assuming 0" ) << endl;
+ return 0.0;
+ }
+
+}
+
+void modCalcVlsr::getGeoLocation (void)
+{
+ geoPlace->setLong( getLongitude() );
+ geoPlace->setLat( getLatitude() );
+ geoPlace->setHeight( getHeight() );
+
+}
+
+void modCalcVlsr::showCurrentDateTime (void)
+{
+ KStars *ks = (KStars*) parent()->parent()->parent();
+
+ KStarsDateTime dt = ks->data()->geo()->LTtoUT( KStarsDateTime::currentDateTime() );
+
+ datBox->setDate( dt.date() );
+ timBox->setTime( dt.time() );
+ dateBoxBatch->setDate( dt.date() );
+ utBoxBatch->setTime( dt.time() );
+}
+
+// SIRVE para algo?
+void modCalcVlsr::initGeo(void)
+{
+ KStars *ks = (KStars*) parent()->parent()->parent(); // QSplitter->AstroCalc->KStars
+ geoPlace = new GeoLocation( ks->geo() );
+}
+
+
+
+void modCalcVlsr::showLongLat(void)
+{
+
+ KStars *ks = (KStars*) parent()->parent()->parent(); // QSplitter->AstroCalc->KStars
+ longBox->show( ks->geo()->lng() );
+ latBox->show( ks->geo()->lat() );
+ longBoxBatch->show( ks->geo()->lng() );
+ latBoxBatch->show( ks->geo()->lat() );
+}
+
+void modCalcVlsr::showVlsr (const double vlsr )
+{
+ vlsrBox->setText( KGlobal::locale()->formatNumber( vlsr ) );
+}
+
+void modCalcVlsr::showHelVel (const double vhel )
+{
+ vHelioBox->setText( KGlobal::locale()->formatNumber( vhel ) );
+}
+
+void modCalcVlsr::showGeoVel (const double vgeo )
+{
+ vGeoBox->setText( KGlobal::locale()->formatNumber( vgeo ) );
+}
+
+void modCalcVlsr::showTopoVel (const double vtop )
+{
+ vTopoBox->setText( KGlobal::locale()->formatNumber( vtop ) );
+}
+
+void modCalcVlsr::showEpoch( const KStarsDateTime &dt )
+{
+ double epochN = dt.epoch();
+// Localization
+// epochName->setText(KGlobal::locale()->formatNumber(epochN,3));
+ epochName->setText( KGlobal::locale()->formatNumber( epochN ) );
+
+}
+
+void modCalcVlsr::slotClearCoords()
+{
+
+ raBox->clearFields();
+ decBox->clearFields();
+ longBox->clearFields();
+ latBox->clearFields();
+ epochName->setText("");
+ vlsrBox->setText("");
+ vHelioBox->setText("");
+ vGeoBox->setText("");
+ vTopoBox->setText("");
+
+ datBox->setDate(ExtDate::currentDate());
+ timBox->setTime(QTime(0,0,0));
+
+}
+
+void modCalcVlsr::slotComputeVelocities()
+{
+ SkyPoint sp = getEquCoords();
+ getGeoLocation();
+
+
+ double epoch0 = getEpoch( epochName->text() );
+ KStarsDateTime dt0;
+ dt0.setFromEpoch(epoch0);
+ KStarsDateTime dt1 = getDateTime();
+ double vst[3];
+ dms gsidt = dt1.gst();
+ geoPlace->TopocentricVelocity(vst, gsidt);
+
+ if ( radioVlsr->isChecked() ) {
+
+ double vlsr = getVLSR();
+ double vhelio = sp.vHeliocentric(vlsr, dt0.djd() );
+ showHelVel( vhelio );
+
+ double vg = sp.vGeocentric(vhelio, dt1.djd());
+ showGeoVel( vg );
+
+ showTopoVel ( sp.vTopocentric(vg, vst) );
+
+ } else if (radioVhelio->isChecked() ) {
+
+ double vhel = getVhel();
+ double vlsr = sp.vHelioToVlsr(vhel, dt0.djd() );
+ showVlsr(vlsr);
+
+ double vg = sp.vGeocentric(vhel, dt1.djd());
+ showGeoVel( vg );
+
+ showTopoVel ( sp.vTopocentric(vg, vst) );
+
+ } else if (radioVgeo->isChecked() ) {
+
+ double vgeo = getVgeo();
+ double vhel = sp.vGeoToVHelio(vgeo, dt1.djd() );
+ showHelVel(vhel) ;
+
+ double vlsr = sp.vHelioToVlsr(vhel, dt0.djd() );
+ showVlsr(vlsr);
+
+
+ showTopoVel ( sp.vTopocentric(vgeo, vst) );
+
+ } else {
+ double vtopo = getVtopo();
+ double vgeo = sp.vTopoToVGeo(vtopo, vst);
+ showGeoVel( vgeo );
+
+ double vhel = sp.vGeoToVHelio(vgeo, dt1.djd() );
+ showHelVel(vhel) ;
+
+ double vlsr = sp.vHelioToVlsr(vhel, dt0.djd() );
+ showVlsr(vlsr);
+ }
+
+}
+
+void modCalcVlsr::slotUtChecked(){
+ if ( utCheckBatch->isChecked() )
+ utBoxBatch->setEnabled( false );
+ else {
+ utBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotDateChecked(){
+ if ( dateCheckBatch->isChecked() )
+ dateBoxBatch->setEnabled( false );
+ else {
+ dateBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotRaChecked(){
+ if ( raCheckBatch->isChecked() ) {
+ raBoxBatch->setEnabled( false );
+ }
+ else {
+ raBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotDecChecked(){
+ if ( decCheckBatch->isChecked() ) {
+ decBoxBatch->setEnabled( false );
+ }
+ else {
+ decBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotEpochChecked(){
+ if ( epochCheckBatch->isChecked() )
+ epochBoxBatch->setEnabled( false );
+ else
+ epochBoxBatch->setEnabled( true );
+}
+
+void modCalcVlsr::slotLongChecked(){
+ if ( longCheckBatch->isChecked() )
+ longBoxBatch->setEnabled( false );
+ else
+ longBoxBatch->setEnabled( true );
+}
+
+void modCalcVlsr::slotLatChecked(){
+ if ( latCheckBatch->isChecked() )
+ latBoxBatch->setEnabled( false );
+ else {
+ latBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotHeightChecked(){
+ if ( heightCheckBatch->isChecked() )
+ heightBoxBatch->setEnabled( false );
+ else {
+ heightBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotVlsrChecked(){
+ if ( vlsrCheckBatch->isChecked() )
+ vlsrBoxBatch->setEnabled( false );
+ else {
+ vlsrBoxBatch->setEnabled( true );
+ }
+}
+
+void modCalcVlsr::slotInputFile() {
+ QString inputFileName;
+ inputFileName = KFileDialog::getOpenFileName( );
+ InputLineEditBatch->setText( inputFileName );
+}
+
+void modCalcVlsr::slotOutputFile() {
+ QString outputFileName;
+ outputFileName = KFileDialog::getSaveFileName( );
+ OutputLineEditBatch->setText( outputFileName );
+}
+
+void modCalcVlsr::slotRunBatch() {
+ QString inputFileName;
+
+ inputFileName = InputLineEditBatch->text();
+
+ // We open the input file and read its content
+
+ if ( QFile::exists(inputFileName) ) {
+ QFile f( inputFileName );
+ if ( !f.open( IO_ReadOnly) ) {
+ QString message = i18n( "Could not open file %1.").arg( f.name() );
+ KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
+ inputFileName = "";
+ return;
+ }
+
+// processLines(&f);
+ QTextStream istream(&f);
+ processLines(istream);
+// readFile( istream );
+ f.close();
+ } else {
+ QString message = i18n( "Invalid file: %1" ).arg( inputFileName );
+ KMessageBox::sorry( 0, message, i18n( "Invalid file" ) );
+ inputFileName = "";
+ InputLineEditBatch->setText( inputFileName );
+ return;
+ }
+}
+
+void modCalcVlsr::processLines( QTextStream &istream ) {
+
+ // we open the output file
+
+// QTextStream istream(&fIn);
+ QString outputFileName;
+ outputFileName = OutputLineEditBatch->text();
+ QFile fOut( outputFileName );
+ fOut.open(IO_WriteOnly);
+ QTextStream ostream(&fOut);
+
+ QString line;
+ QString space = " ";
+ int i = 0;
+ long double jd0;
+ SkyPoint spB;
+ double sra, cra, sdc, cdc;
+ dms raB, decB, latB, longB;
+ double epoch0B, vhB, vgB, vtB, vlsrB, heightB;
+ double vtopo[3];
+ QTime utB;
+ ExtDate dtB;
+ KStarsDateTime dt0B;
+
+ while ( ! istream.eof() ) {
+ line = istream.readLine();
+ line.stripWhiteSpace();
+
+ //Go through the line, looking for parameters
+
+ QStringList fields = QStringList::split( " ", line );
+
+ i = 0;
+
+ // Read Ut and write in ostream if corresponds
+
+ if(utCheckBatch->isChecked() ) {
+ utB = QTime::fromString( fields[i] );
+ i++;
+ } else
+ utB = utBoxBatch->time();
+
+ if ( allRadioBatch->isChecked() )
+ ostream << utB.toString() << space;
+ else
+ if(utCheckBatch->isChecked() )
+ ostream << utB.toString() << space;
+
+ // Read date and write in ostream if corresponds
+
+ if(dateCheckBatch->isChecked() ) {
+ dtB = ExtDate::fromString( fields[i] );
+ i++;
+ } else
+ dtB = dateBoxBatch->date();
+ if ( allRadioBatch->isChecked() )
+ ostream << dtB.toString().append(space);
+ else
+ if(dateCheckBatch->isChecked() )
+ ostream << dtB.toString().append(space);
+
+ // Read RA and write in ostream if corresponds
+
+ if(raCheckBatch->isChecked() ) {
+ raB = dms::fromString( fields[i],FALSE);
+ i++;
+ } else
+ raB = raBoxBatch->createDms(FALSE);
+
+ if ( allRadioBatch->isChecked() )
+ ostream << raB.toHMSString() << space;
+ else
+ if(raCheckBatch->isChecked() )
+ ostream << raB.toHMSString() << space;
+
+ // Read DEC and write in ostream if corresponds
+
+ if(decCheckBatch->isChecked() ) {
+ decB = dms::fromString( fields[i], TRUE);
+ i++;
+ } else
+ decB = decBoxBatch->createDms();
+
+ if ( allRadioBatch->isChecked() )
+ ostream << decB.toDMSString() << space;
+ else
+ if(decCheckBatch->isChecked() )
+ ostream << decB.toDMSString() << space;
+
+ // Read Epoch and write in ostream if corresponds
+
+ if(epochCheckBatch->isChecked() ) {
+ epoch0B = fields[i].toDouble();
+ i++;
+ } else
+ epoch0B = getEpoch( epochBoxBatch->text() );
+
+ if ( allRadioBatch->isChecked() )
+ ostream << epoch0B << space;
+ else
+ if(epochCheckBatch->isChecked() )
+ ostream << epoch0B << space;
+
+ // Read vlsr and write in ostream if corresponds
+
+ if(vlsrCheckBatch->isChecked() ) {
+ vlsrB = fields[i].toDouble();
+ i++;
+ } else
+ vlsrB = getEpoch( epochBoxBatch->text() );
+
+ if ( allRadioBatch->isChecked() )
+ ostream << vlsrB << space;
+ else
+ if(vlsrCheckBatch->isChecked() )
+ ostream << vlsrB << space;
+
+ // Read Longitude and write in ostream if corresponds
+
+ if (longCheckBatch->isChecked() ) {
+ longB = dms::fromString( fields[i],TRUE);
+ i++;
+ } else
+ longB = longBoxBatch->createDms(TRUE);
+
+ if ( allRadioBatch->isChecked() )
+ ostream << longB.toDMSString() << space;
+ else
+ if (longCheckBatch->isChecked() )
+ ostream << longB.toDMSString() << space;
+
+ // Read Latitude
+
+
+ if (latCheckBatch->isChecked() ) {
+ latB = dms::fromString( fields[i], TRUE);
+ i++;
+ } else
+ latB = latBoxBatch->createDms(TRUE);
+ if ( allRadioBatch->isChecked() )
+ ostream << latB.toDMSString() << space;
+ else
+ if (latCheckBatch->isChecked() )
+ ostream << latB.toDMSString() << space;
+
+ // Read height and write in ostream if corresponds
+
+ if(heightCheckBatch->isChecked() ) {
+ heightB = fields[i].toDouble();
+ i++;
+ } else
+ heightB = getEpoch( epochBoxBatch->text() );
+
+ if ( allRadioBatch->isChecked() )
+ ostream << heightB << space;
+ else
+ if(heightCheckBatch->isChecked() )
+ ostream << heightB << space;
+
+ // We make the first calculations
+
+ spB = SkyPoint (raB, decB);
+ dt0B.setFromEpoch(epoch0B);
+ vhB = spB.vHeliocentric(vlsrB, dt0B.djd());
+ jd0 = KStarsDateTime(dtB,utB).djd();
+ vgB = spB.vGeocentric(vlsrB, jd0);
+ geoPlace->setLong( longB );
+ geoPlace->setLat( latB );
+ geoPlace->setHeight( heightB );
+ dms gsidt = KStarsDateTime(dtB,utB).gst();
+ geoPlace->TopocentricVelocity(vtopo, gsidt);
+ spB.ra()->SinCos(sra, cra);
+ spB.dec()->SinCos(sdc, cdc);
+ vtB = vgB - (vtopo[0]*cdc*cra + vtopo[1]*cdc*sra + vtopo[2]*sdc);
+
+ ostream << vhB << space << vgB << space << vtB << endl;
+
+ }
+
+
+ fOut.close();
+}