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

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

Gestion tsid

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