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

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

V2

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