source: Sophya/trunk/Poubelle/archTOI.old/auxinterpgps.cc@ 360

Last change on this file since 360 was 360, checked in by ansari, 26 years ago

auxilliary GPS

File size: 2.2 KB
RevLine 
[358]1#include "auxinterpgps.h"
2#include "fitsio.h"
3#include "archtoi.h"
4
5AuxInterpGPS::AuxInterpGPS() {
6 ilastok = false;
7}
8
9void AuxInterpGPS::AddValue(double mjd, double lat, double lon, double alt) {
10 elems.insert(elem(mjd, lat, lon, alt));
11 ilastok = false;
12}
13
14void AuxInterpGPS::FindElem(double mjd) {
[360]15 ilast = elems.upper_bound(elem(mjd,0,0,0));
16 ilastok = (ilast != elems.end() && ilast != elems.begin());
[358]17}
18
19
20int AuxInterpGPS::getLocation(double mjd, double& lat, double& lon, double& alt) {
21 if (!ilastok ||
[360]22 (mjd > (*ilast).mjd)) {
[358]23 FindElem(mjd);
24 } else {
[360]25 set<elem>::const_iterator i = ilast; i--;
26 if (mjd <= (*i).mjd) FindElem(mjd);
[358]27 }
[360]28
29
[358]30
31 if (!ilastok) return -1;
[360]32 double lastmjd = (*ilast).mjd;
33 if (mjd > lastmjd) return -1;
34 if (ilast == elems.begin()) return -1;
35 set<elem>::const_iterator i = ilast; i--;
36 double prevmjd = (*i).mjd;
37 if (mjd < prevmjd) return -1;
[358]38
[360]39 double x = (mjd - prevmjd) / (lastmjd - prevmjd);
[358]40
[360]41 lat = (*i).lat*(1-x) + (*ilast).lat*x;
42 lon = (*i).lon*(1-x) + (*ilast).lon*x;
43 alt = (*i).alt*(1-x) + (*ilast).alt*x;
[358]44
45 return 0;
46}
47
48void AuxInterpGPS::FitsDump(string const& filename) {
49 int fitsStatus=0;
50 fitsfile* fptr;
51 remove(filename.c_str());
52 fits_create_file(&fptr, filename.c_str(), &fitsStatus);
53 char* colnames[4] = {"MJD","LATITUDE","LONGITUDE","ALTITUDE"};
54 char* coltypes[4] = {"1D","1D","1D","1D"};
55 char* colunits[4] = {" ", " " , " ", " "};
56 fits_create_tbl(fptr, BINARY_TBL, 0, 4, colnames, coltypes, colunits, NULL, &fitsStatus);
57 fits_write_date(fptr, &fitsStatus);
58 fits_write_comment(fptr, "Generated with archtoi " ARCHTOI_VERS, &fitsStatus);
59 int fitsLine = 1;
60 for (set<elem>::iterator i = elems.begin(); i != elems.end(); i++,fitsLine++) {
[359]61 fits_write_col_dbl(fptr, 1, fitsLine, 1, 1, (double*) &(*i).mjd, &fitsStatus);
62 fits_write_col_dbl(fptr, 2, fitsLine, 1, 1, (double*) &(*i).lat, &fitsStatus);
63 fits_write_col_dbl(fptr, 3, fitsLine, 1, 1, (double*) &(*i).lon, &fitsStatus);
64 fits_write_col_dbl(fptr, 4, fitsLine, 1, 1, (double*) &(*i).alt, &fitsStatus);
[358]65 }
66
67 fits_close_file(fptr, &fitsStatus);
68 fits_report_error(stderr, fitsStatus); /* print out any error messages */
[359]69}
Note: See TracBrowser for help on using the repository browser.