Kstars

modcalcgalcoord.cpp
1 /*
2  SPDX-FileCopyrightText: 2002 Pablo de Vicente <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "modcalcgalcoord.h"
8 
9 #include "ksnotification.h"
10 #include "dialogs/finddialog.h"
11 #include "skyobjects/skyobject.h"
12 #include "skyobjects/skypoint.h"
13 
14 #include <QTextStream>
15 #include <QPointer>
16 
17 modCalcGalCoord::modCalcGalCoord(QWidget *parentSplit) : QFrame(parentSplit)
18 {
19  setupUi(this);
20  RA->setUnits(dmsBox::HOURS);
21 
22  connect(RA, SIGNAL(editingFinished()), this, SLOT(slotComputeCoords()));
23  connect(Dec, SIGNAL(editingFinished()), this, SLOT(slotComputeCoords()));
24  connect(GalLongitude, SIGNAL(editingFinished()), this, SLOT(slotComputeCoords()));
25  connect(GalLatitude, SIGNAL(editingFinished()), this, SLOT(slotComputeCoords()));
26 
27  connect(ObjectButton, SIGNAL(clicked()), this, SLOT(slotObject()));
28 
29  connect(decCheckBatch, SIGNAL(clicked()), this, SLOT(slotDecCheckedBatch()));
30  connect(raCheckBatch, SIGNAL(clicked()), this, SLOT(slotRaCheckedBatch()));
31  connect(epochCheckBatch, SIGNAL(clicked()), this, SLOT(slotEpochCheckedBatch()));
32  connect(galLongCheckBatch, SIGNAL(clicked()), this, SLOT(slotGalLongCheckedBatch()));
33  connect(galLatCheckBatch, SIGNAL(clicked()), this, SLOT(slotGalLatCheckedBatch()));
34  connect(runButtonBatch, SIGNAL(clicked()), this, SLOT(slotRunBatch()));
35 
36  show();
37 }
38 
39 void modCalcGalCoord::slotObject()
40 {
41  if (FindDialog::Instance()->exec() == QDialog::Accepted)
42  {
43  SkyObject *o = FindDialog::Instance()->targetObject();
44  RA->show(o->ra());
45  Dec->show(o->dec());
46  slotComputeCoords();
47  }
48 }
49 
50 void modCalcGalCoord::slotComputeCoords()
51 {
52  if (GalLongitude->hasFocus())
53  GalLongitude->clearFocus();
54 
55  //Determine whether we should compute galactic coords from
56  //equatorial, or vice versa
57  if (sender()->objectName() == "GalLongitude" || sender()->objectName() == "GalLatitude")
58  {
59  //Validate GLong and GLat
60  bool ok(false);
61  dms glat;
62  dms glong = GalLongitude->createDms(&ok);
63  if (ok)
64  glat = GalLatitude->createDms(&ok);
65  if (ok)
66  {
67  SkyPoint sp;
68  sp.GalacticToEquatorial1950(&glong, &glat);
69  sp.B1950ToJ2000();
70  RA->show(sp.ra());
71  Dec->show(sp.dec());
72  }
73  }
74  else
75  {
76  //Validate RA and Dec
77  bool ok(false);
78  dms dec;
79  dms ra = RA->createDms(&ok);
80  if (ok)
81  dec = Dec->createDms(&ok);
82  if (ok)
83  {
84  dms glong, glat;
85  SkyPoint sp(ra, dec);
86  sp.J2000ToB1950();
87  sp.Equatorial1950ToGalactic(glong, glat);
88  GalLongitude->show(glong);
89  GalLatitude->show(glat);
90  }
91  }
92 }
93 
94 void modCalcGalCoord::galCheck()
95 {
96  galLatCheckBatch->setChecked(false);
97  galLatBoxBatch->setEnabled(false);
98  galLongCheckBatch->setChecked(false);
99  galLongBoxBatch->setEnabled(false);
100  galInputCoords = false;
101 }
102 
103 void modCalcGalCoord::equCheck()
104 {
105  raCheckBatch->setChecked(false);
106  raBoxBatch->setEnabled(false);
107  decCheckBatch->setChecked(false);
108  decBoxBatch->setEnabled(false);
109  epochCheckBatch->setChecked(false);
110  galInputCoords = true;
111 }
112 
113 void modCalcGalCoord::slotRaCheckedBatch()
114 {
115  if (raCheckBatch->isChecked())
116  {
117  raBoxBatch->setEnabled(false);
118  galCheck();
119  }
120  else
121  {
122  raBoxBatch->setEnabled(true);
123  }
124 }
125 
126 void modCalcGalCoord::slotDecCheckedBatch()
127 {
128  if (decCheckBatch->isChecked())
129  {
130  decBoxBatch->setEnabled(false);
131  galCheck();
132  }
133  else
134  {
135  decBoxBatch->setEnabled(true);
136  }
137 }
138 
139 void modCalcGalCoord::slotEpochCheckedBatch()
140 {
141  epochCheckBatch->setChecked(false);
142 
143  if (epochCheckBatch->isChecked())
144  {
145  epochBoxBatch->setEnabled(false);
146  galCheck();
147  }
148  else
149  {
150  epochBoxBatch->setEnabled(true);
151  }
152 }
153 
154 void modCalcGalCoord::slotGalLatCheckedBatch()
155 {
156  if (galLatCheckBatch->isChecked())
157  {
158  galLatBoxBatch->setEnabled(false);
159  equCheck();
160  }
161  else
162  {
163  galLatBoxBatch->setEnabled(true);
164  }
165 }
166 
167 void modCalcGalCoord::slotGalLongCheckedBatch()
168 {
169  if (galLongCheckBatch->isChecked())
170  {
171  galLongBoxBatch->setEnabled(false);
172  equCheck();
173  }
174  else
175  {
176  galLongBoxBatch->setEnabled(true);
177  }
178 }
179 
180 void modCalcGalCoord::slotRunBatch()
181 {
182  const QString inputFileName = InputFileBoxBatch->url().toLocalFile();
183 
184  // We open the input file and read its content
185 
186  if (QFile::exists(inputFileName))
187  {
188  QFile f(inputFileName);
189  if (!f.open(QIODevice::ReadOnly))
190  {
191  KSNotification::sorry(i18n("Could not open file %1.", f.fileName()), i18n("Could Not Open File"));
192  return;
193  }
194 
195  // processLines(&f);
196  QTextStream istream(&f);
197  processLines(istream);
198  // readFile( istream );
199  f.close();
200  }
201  else
202  {
203  QString message = i18n("Invalid file: %1", inputFileName);
204  KSNotification::sorry(message, i18n("Invalid file"));
205  InputFileBoxBatch->setUrl(QUrl());
206  }
207 }
208 
209 void modCalcGalCoord::processLines(QTextStream &istream)
210 {
211  // we open the output file
212 
213  // QTextStream istream(&fIn);
214  const QString outputFileName = OutputFileBoxBatch->url().toLocalFile();
215  QFile fOut(outputFileName);
216  fOut.open(QIODevice::WriteOnly);
217  QTextStream ostream(&fOut);
218 
219  QString line;
220  QChar space = ' ';
221  int i = 0;
222  SkyPoint sp;
223  dms raB, decB, galLatB, galLongB;
224  QString epoch0B;
225 
226  while (!istream.atEnd())
227  {
228  line = istream.readLine();
229  line = line.trimmed();
230 
231  //Go through the line, looking for parameters
232 
233  QStringList fields = line.split(' ');
234 
235  i = 0;
236 
237  // Input coords are galactic coordinates:
238 
239  if (galInputCoords)
240  {
241  // Read Galactic Longitude and write in ostream if corresponds
242 
243  if (galLongCheckBatch->isChecked())
244  {
245  galLongB = dms::fromString(fields[i], true);
246  i++;
247  }
248  else
249  galLongB = galLongBoxBatch->createDms();
250 
251  if (allRadioBatch->isChecked())
252  ostream << galLongB.toDMSString() << space;
253  else if (galLongCheckBatch->isChecked())
254  ostream << galLongB.toDMSString() << space;
255 
256  // Read Galactic Latitude and write in ostream if corresponds
257 
258  if (galLatCheckBatch->isChecked())
259  {
260  galLatB = dms::fromString(fields[i], true);
261  i++;
262  }
263  else
264  galLatB = galLatBoxBatch->createDms();
265 
266  if (allRadioBatch->isChecked())
267  ostream << galLatB.toDMSString() << space;
268  else if (galLatCheckBatch->isChecked())
269  ostream << galLatB.toDMSString() << space;
270 
271  sp = SkyPoint();
272  sp.GalacticToEquatorial1950(&galLongB, &galLatB);
273  ostream << sp.ra().toHMSString() << space << sp.dec().toDMSString() << epoch0B << '\n';
274  // Input coords. are equatorial coordinates:
275  }
276  else
277  {
278  // Read RA and write in ostream if corresponds
279 
280  if (raCheckBatch->isChecked())
281  {
282  raB = dms::fromString(fields[i], false);
283  i++;
284  }
285  else
286  raB = raBoxBatch->createDms();
287 
288  if (allRadioBatch->isChecked())
289  ostream << raB.toHMSString() << space;
290  else if (raCheckBatch->isChecked())
291  ostream << raB.toHMSString() << space;
292 
293  // Read DEC and write in ostream if corresponds
294 
295  if (decCheckBatch->isChecked())
296  {
297  decB = dms::fromString(fields[i], true);
298  i++;
299  }
300  else
301  decB = decBoxBatch->createDms();
302 
303  if (allRadioBatch->isChecked())
304  ostream << decB.toDMSString() << space;
305  else if (decCheckBatch->isChecked())
306  ostream << decB.toDMSString() << space;
307 
308  // Read Epoch and write in ostream if corresponds
309 
310  if (epochCheckBatch->isChecked())
311  {
312  epoch0B = fields[i];
313  i++;
314  }
315  else
316  epoch0B = epochBoxBatch->text();
317 
318  if (allRadioBatch->isChecked())
319  ostream << epoch0B << space;
320  else if (epochCheckBatch->isChecked())
321  ostream << epoch0B << space;
322 
323  sp = SkyPoint(raB, decB);
324  sp.J2000ToB1950();
325  sp.Equatorial1950ToGalactic(galLongB, galLatB);
326  ostream << galLongB.toDMSString() << space << galLatB.toDMSString() << '\n';
327  }
328  }
329 
330  fOut.close();
331 }
void GalacticToEquatorial1950(const dms *galLong, const dms *galLat)
Computes equatorial coordinates referred to 1950 from galactic ones referred to epoch B1950.
Definition: skypoint.cpp:754
Stores dms coordinates for a point in the sky. for converting between coordinate systems.
Definition: skypoint.h:44
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QString trimmed() const const
QObject * sender() const const
void J2000ToB1950(void)
Exact precession from epoch J2000 Besselian epoch 1950.
Definition: skypoint.cpp:819
bool exists() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
const QString toHMSString(const bool machineReadable=false, const bool highPrecision=false) const
Definition: dms.cpp:370
QString i18n(const char *text, const TYPE &arg...)
const QString toDMSString(const bool forceSign=false, const bool machineReadable=false, const bool highPrecision=false) const
Definition: dms.cpp:279
const CachingDms & dec() const
Definition: skypoint.h:269
bool atEnd() const const
void B1950ToJ2000(void)
Exact precession from Besselian epoch 1950 to epoch J2000.
Definition: skypoint.cpp:773
QString readLine(qint64 maxlen)
void Equatorial1950ToGalactic(dms &galLong, dms &galLat)
Computes galactic coordinates from equatorial coordinates referred to epoch 1950.
Definition: skypoint.cpp:735
QTextStream & dec(QTextStream &stream)
void setupUi(QWidget *widget)
SkyObject * targetObject()
Definition: finddialog.h:53
void show()
An angle, stored as degrees, but expressible in many ways.
Definition: dms.h:37
const CachingDms & ra() const
Definition: skypoint.h:263
Information about an object in the sky.
Definition: skyobject.h:41
QString message
static dms fromString(const QString &s, bool deg)
Static function to create a DMS object from a QString.
Definition: dms.cpp:421
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Aug 11 2022 04:00:01 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.