diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2017-12-06 18:01:00 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2017-12-06 18:01:00 (GMT) |
commit | 8eb010fed77496da3a3b684d15a7f249cc887fc8 (patch) | |
tree | d1a3e9d90d115c08b064c27d9e83266e9f08cc70 /tksao | |
parent | 1e73f87cdce20222b649edf55645f0a4ac8fedb1 (diff) | |
download | blt-8eb010fed77496da3a3b684d15a7f249cc887fc8.zip blt-8eb010fed77496da3a3b684d15a7f249cc887fc8.tar.gz blt-8eb010fed77496da3a3b684d15a7f249cc887fc8.tar.bz2 |
update AST WCS
Diffstat (limited to 'tksao')
-rw-r--r-- | tksao/frame/fitsimage.C | 102 | ||||
-rw-r--r-- | tksao/frame/fitsimage.h | 3 | ||||
-rw-r--r-- | tksao/frame/frame3dbase.C | 17 | ||||
-rw-r--r-- | tksao/frame/framebase.C | 8 |
4 files changed, 100 insertions, 30 deletions
diff --git a/tksao/frame/fitsimage.C b/tksao/frame/fitsimage.C index 04713e8..fdc9614 100644 --- a/tksao/frame/fitsimage.C +++ b/tksao/frame/fitsimage.C @@ -3126,24 +3126,6 @@ Vector FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys, else return Vector(); } - -Vector3d FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, - Coord::SkyFrame sky) -{ - astClearStatus; // just to make sure - - if (!hasWCS(sys)) - return Vector(); - - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); - - Vector3d out = wcsTran(newast_, in, 1); - if (astOK && checkWCS(out)) - return wcsIsASkyFrame(newast_) ? radToDeg(out) : out; - else - return Vector3d(); -} #endif #ifndef NEWWCS @@ -3262,6 +3244,83 @@ char* FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys, } #endif +#ifdef NEWWCS +Vector3d FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, + Coord::SkyFrame sky) +{ + astClearStatus; // just to make sure + + if (!hasWCS(sys)) + return Vector(); + + setWCSSystem(newast_,sys); + setWCSSkyFrame(newast_,sky); + + Vector3d out = wcsTran(newast_, in, 1); + if (astOK && checkWCS(out)) + return wcsIsASkyFrame(newast_) ? radToDeg(out) : out; + else + return Vector3d(); +} + +char* FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, + Coord::SkyFrame sky, Coord::SkyFormat format, + char* lbuf) +{ + astClearStatus; // just to make sure + lbuf[0] = '\0'; + + if (!hasWCS(sys)) + return lbuf; + + setWCSSystem(newast_,sys); + setWCSSkyFrame(newast_,sky); + + ostringstream str; + Vector3d out = wcsTran(newast_, in, 1); + if (astOK && checkWCS(out)) { + if (wcsIsASkyFrame(newast_)) { + switch (format) { + case Coord::DEGREES: + out = radToDeg(out); + str << setprecision(8) << out[0] << ' ' << out[1] << ' ' << out[2] + << ' ' << coord.skyFrameStr(sky) << ends; + break; + + case Coord::SEXAGESIMAL: + out = zeroTWOPI(out); + switch (sky) { + case Coord::FK4: + case Coord::FK4_NO_E: + case Coord::FK5: + case Coord::ICRS: + setWCSFormat(newast_,1,"hms.3"); + setWCSFormat(newast_,2,"+dms.3"); + break; + case Coord::GALACTIC: + case Coord::SUPERGALACTIC: + case Coord::ECLIPTIC: + case Coord::HELIOECLIPTIC: + setWCSFormat(newast_,1,"+dms.3"); + setWCSFormat(newast_,2,"+dms.3"); + break; + } + str << astFormat(newast_,1,out[0]) << ' ' + << astFormat(newast_,2,out[1]) << ' ' + << out[2] << ' ' << coord.skyFrameStr(sky) << ends; + break; + } + } + else + str << setprecision(8) << out[0] << ' ' << out[1] << ' ' << out[2] <<ends; + + strncpy(lbuf, str.str().c_str(), str.str().length()); + } + + return lbuf; +} +#endif + #ifndef NEWWCS Vector FitsImage::wcs2pix(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) @@ -4106,7 +4165,12 @@ Vector3d FitsImage::wcsTran(AstFrameSet* ast, const Vector3d& in, int forward) switch (naxes) { case 1: case 2: - // error + double pin[2]; + double pout[2]; + pin[0] = in[0]; + pin[1] = in[1]; + astTranN(ast, 1, 2, 1, pin, forward, 2, 1, pout); + return Vector3d(pout[0],pout[1],forward ? 1 : 0); break; case 3: { diff --git a/tksao/frame/fitsimage.h b/tksao/frame/fitsimage.h index 4cb721f..7a093dc 100644 --- a/tksao/frame/fitsimage.h +++ b/tksao/frame/fitsimage.h @@ -371,8 +371,11 @@ class FitsImage { #ifdef NEWWCS Vector3d pix2wcs(const Vector3d&, Coord::CoordSystem, Coord::SkyFrame); + char* pix2wcs(const Vector3d&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, char*); + Vector3d wcs2pix(const Vector3d&, Coord::CoordSystem, Coord::SkyFrame); #endif + double pix2wcsx(double, Coord::CoordSystem); double wcs2pixx(double, Coord::CoordSystem); diff --git a/tksao/frame/frame3dbase.C b/tksao/frame/frame3dbase.C index 3317ea8..9b8360e 100644 --- a/tksao/frame/frame3dbase.C +++ b/tksao/frame/frame3dbase.C @@ -155,7 +155,7 @@ void Frame3dBase::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, void Frame3dBase::getInfoWCS(char* var, Vector3d& rr, FitsImage* ptr, FitsImage* sptr) { - Vector img = Vector(rr) * sptr->refToData; + Vector3d img = rr * sptr->refToImage3d; for (int ii=0; ii<MULTWCS; ii++) { char buf[64]; @@ -164,8 +164,7 @@ void Frame3dBase::getInfoWCS(char* var, Vector3d& rr, FitsImage* ptr, if (hasWCS(www)) { char buff[128]; - Vector uu = img * dataToImage; - sptr->pix2wcs(uu, www, wcsSky_, wcsSkyFormat_, buff); + sptr->pix2wcs(img, www, wcsSky_, wcsSkyFormat_, buff); int argc; const char** argv; @@ -175,18 +174,22 @@ void Frame3dBase::getInfoWCS(char* var, Vector3d& rr, FitsImage* ptr, Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",x"),argv[0],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",x"),"",0); + if (argc > 1 && argv && argv[1]) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",y"),argv[1],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",y"),"",0); - coordToTclArray(ptr,rr,www,var,"wcs"); - + if (argc > 2 && argv && argv[2]) + Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",z"),argv[2],0); + else + Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",z"),"",0); + char* wcsname = (char*)sptr->getWCSName(www); if (wcsname) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),wcsname,0); - else if (argc > 2 && argv && argv[2]) - Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),argv[2],0); + else if (argc > 3 && argv && argv[3]) + Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),argv[3],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),"",0); diff --git a/tksao/frame/framebase.C b/tksao/frame/framebase.C index e2e1400..a73cdc8 100644 --- a/tksao/frame/framebase.C +++ b/tksao/frame/framebase.C @@ -37,7 +37,8 @@ FrameBase::~FrameBase() XFreeGC(display, colormapGCXOR); } -void FrameBase::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, char* var) +void FrameBase::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, + char* var) { FitsBound* params; int mosaic; @@ -136,7 +137,7 @@ void FrameBase::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, char* va void FrameBase::getInfoWCS(char* var, Vector& rr, FitsImage* ptr, FitsImage* sptr) { - Vector img = rr * sptr->refToData; + Vector img = rr * sptr->refToImage; for (int ii=0; ii<MULTWCS; ii++) { char buf[64]; @@ -145,8 +146,7 @@ void FrameBase::getInfoWCS(char* var, Vector& rr, FitsImage* ptr, if (hasWCS(www)) { char buff[128]; - Vector uu = img * dataToImage; - sptr->pix2wcs(uu, www, wcsSky_, wcsSkyFormat_, buff); + sptr->pix2wcs(img, www, wcsSky_, wcsSkyFormat_, buff); int argc; const char** argv; |