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