From 5606c9ac2deadb681b5aaf91f9045b646d9f2729 Mon Sep 17 00:00:00 2001 From: William Joye Date: Thu, 7 Dec 2017 17:08:42 -0500 Subject: update AST WCS --- tksao/frame/base.C | 12 +- tksao/frame/fitsimage.C | 285 ++++++++++++++++++++++-------------------------- tksao/frame/fitsimage.h | 5 +- tksao/frame/fitsmap.C | 24 ++-- 4 files changed, 154 insertions(+), 172 deletions(-) diff --git a/tksao/frame/base.C b/tksao/frame/base.C index 5b020d3..00fb7e2 100644 --- a/tksao/frame/base.C +++ b/tksao/frame/base.C @@ -649,11 +649,11 @@ Matrix Base::calcAlignWCS(FitsImage* fits1, FitsImage* fits2, astClearStatus; // just to make sure astBegin; // start memory management - fits1->setWCSSystem(fits1->newast_, sys1); - fits2->setWCSSystem(fits2->newast_, sys2); + fits1->setWCSSystem(fits1->ast_, sys1); + fits2->setWCSSystem(fits2->ast_, sys2); - AstFrameSet* wcs1 = (AstFrameSet*)astCopy(fits1->newast_); - AstFrameSet* wcs2 = (AstFrameSet*)astCopy(fits2->newast_); + AstFrameSet* wcs1 = (AstFrameSet*)astCopy(fits1->ast_); + AstFrameSet* wcs2 = (AstFrameSet*)astCopy(fits2->ast_); astInvert(wcs1); astInvert(wcs2); AstFrameSet* cvt = (AstFrameSet*)astConvert(wcs1, wcs2, ""); @@ -662,8 +662,8 @@ Matrix Base::calcAlignWCS(FitsImage* fits1, FitsImage* fits2, astInvert(cvt); Vector cc1 = fits1->center(); Vector cc2 = fits2->center(); - Vector ll = fits1->wcsTran(fits1->newast_, cc1, 1); - Vector ur = fits2->wcsTran(fits2->newast_, cc2, 1); + Vector ll = fits1->wcsTran(fits1->ast_, cc1, 1); + Vector ur = fits2->wcsTran(fits2->ast_, cc2, 1); double fit[6]; double tol = 1; diff --git a/tksao/frame/fitsimage.C b/tksao/frame/fitsimage.C index 3f6b71c..9807c10 100644 --- a/tksao/frame/fitsimage.C +++ b/tksao/frame/fitsimage.C @@ -112,7 +112,8 @@ FitsImage::FitsImage(Context* cx, Tcl_Interp* pp) ast_ =NULL; wcsx_ =NULL; #else - newast_ =NULL; + ast_ =NULL; + wcs_ =NULL; #endif wcsHeader_ =NULL; altHeader_ =NULL; @@ -191,8 +192,10 @@ FitsImage::~FitsImage() delete [] wcsx_; } #else - if (manageWCS_ && newast_) - astAnnul(newast_); + if (manageWCS_ && ast_) + astAnnul(ast_); + if (manageWCS_ && wcs_) + delete [] wcs_; #endif if (wcsHeader_) @@ -1091,9 +1094,12 @@ void FitsImage::initWCS() for (int ii=0; iiwcsx_[ii]; #else - newast_ = ptr->newast_; + ast_ = ptr->ast_; + wcs_ = ptr->wcs_; #endif #ifndef NEWWCS @@ -1191,8 +1198,8 @@ void FitsImage::initWCS() } #else astinit(hd, prim); - if (DebugAST && newast_) - astShow(newast_); + if (DebugAST && ast_) + astShow(ast_); #endif #ifndef NEWWCS @@ -1585,11 +1592,11 @@ void FitsImage::match(const char* xxname1, const char* yyname1, // sanity check if (nxx1 != nyy1 || nxx2 != nyy2) return; - setWCSSystem(newast_, sys1); - if (!wcsIsASkyFrame(newast_)) + setWCSSystem(ast_, sys1); + if (!wcsIsASkyFrame(ast_)) return; - setWCSSystem(newast_, sys2); - if (!wcsIsASkyFrame(newast_)) + setWCSSystem(ast_, sys2); + if (!wcsIsASkyFrame(ast_)) return; // get doubles @@ -1629,11 +1636,11 @@ void FitsImage::match(const char* xxname1, const char* yyname1, Vector* ptr1 =NULL; if (sky1 != sky2) { - AstFrameSet* wcs1 = (AstFrameSet*)astCopy(newast_); + AstFrameSet* wcs1 = (AstFrameSet*)astCopy(ast_); setWCSSystem(wcs1, sys1); setWCSSkyFrame(wcs1,sky1); - AstFrameSet* wcs2 = (AstFrameSet*)astCopy(newast_); + AstFrameSet* wcs2 = (AstFrameSet*)astCopy(ast_); setWCSSystem(wcs2, sys2); setWCSSkyFrame(wcs2,sky2); @@ -1648,12 +1655,12 @@ void FitsImage::match(const char* xxname1, const char* yyname1, // now compare if (ptr1 && ptr2) { - setWCSSystem(newast_, sys2); - setWCSSkyFrame(newast_, sky2); + setWCSSystem(ast_, sys2); + setWCSSkyFrame(ast_, sky2); Tcl_Obj* objrr = Tcl_NewListObj(0,NULL); for(int jj=0; jj=0 ? Coord::NORMAL : Coord::XX; else rr = ang<=0 ? Coord::NORMAL : Coord::XX; @@ -3054,15 +3061,15 @@ double FitsImage::getWCSRotation(Coord::CoordSystem sys, Coord::SkyFrame sky) return 0; astClearStatus; // just to make sure - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); Vector in[2]; Vector out[2]; in[0] = center(); in[1] = center()+Vector(0,1); - wcsTran(newast_, 2, in, 1, out); - double ang = wcsAxAngle(newast_,out[0],out[1]); + wcsTran(ast_, 2, in, 1, out); + double ang = wcsAxAngle(ast_,out[0],out[1]); if (!(isnan(ang)||isinf(ang)||(ang == -DBL_MAX)||(ang == DBL_MAX))) return getWCSOrientation(sys,sky) == Coord::NORMAL ? ang : -ang; @@ -3114,12 +3121,12 @@ Vector FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys, if (!hasWCS(sys)) return Vector(); - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); - Vector out = wcsTran(newast_, in, 1); + Vector out = wcsTran(ast_, in, 1); if (astOK && checkWCS(out)) - return wcsIsASkyFrame(newast_) ? radToDeg(out) : out; + return wcsIsASkyFrame(ast_) ? radToDeg(out) : out; else return Vector(); } @@ -3193,13 +3200,13 @@ char* FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys, if (!hasWCS(sys)) return lbuf; - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); ostringstream str; - Vector out = wcsTran(newast_, in, 1); + Vector out = wcsTran(ast_, in, 1); if (astOK && checkWCS(out)) { - if (wcsIsASkyFrame(newast_)) { + if (wcsIsASkyFrame(ast_)) { switch (format) { case Coord::DEGREES: out = radToDeg(out); @@ -3214,19 +3221,19 @@ char* FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys, case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: - setWCSFormat(newast_,1,"hms.3"); - setWCSFormat(newast_,2,"+dms.3"); + setWCSFormat(ast_,1,"hms.3"); + setWCSFormat(ast_,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"); + setWCSFormat(ast_,1,"+dms.3"); + setWCSFormat(ast_,2,"+dms.3"); break; } - str << astFormat(newast_,1,out[0]) << ' ' - << astFormat(newast_,2,out[1]) << ' ' + str << astFormat(ast_,1,out[0]) << ' ' + << astFormat(ast_,2,out[1]) << ' ' << coord.skyFrameStr(sky) << ends; break; } @@ -3250,12 +3257,12 @@ Vector3d FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, if (!hasWCS(sys)) return Vector(); - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); - Vector3d out = wcsTran(newast_, in, 1); + Vector3d out = wcsTran(ast_, in, 1); if (astOK && checkWCS(out)) - return wcsIsASkyFrame(newast_) ? radToDeg(out) : out; + return wcsIsASkyFrame(ast_) ? radToDeg(out) : out; else return Vector3d(); } @@ -3270,13 +3277,13 @@ char* FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, if (!hasWCS(sys)) return lbuf; - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); ostringstream str; - Vector3d out = wcsTran(newast_, in, 1); + Vector3d out = wcsTran(ast_, in, 1); if (astOK && checkWCS(out)) { - if (wcsIsASkyFrame(newast_)) { + if (wcsIsASkyFrame(ast_)) { switch (format) { case Coord::DEGREES: out = radToDeg(out); @@ -3291,19 +3298,19 @@ char* FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys, case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: - setWCSFormat(newast_,1,"hms.3"); - setWCSFormat(newast_,2,"+dms.3"); + setWCSFormat(ast_,1,"hms.3"); + setWCSFormat(ast_,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"); + setWCSFormat(ast_,1,"+dms.3"); + setWCSFormat(ast_,2,"+dms.3"); break; } - str << astFormat(newast_,1,out[0]) << ' ' - << astFormat(newast_,2,out[1]) << ' ' + str << astFormat(ast_,1,out[0]) << ' ' + << astFormat(ast_,2,out[1]) << ' ' << out[2] << ' ' << coord.skyFrameStr(sky) << ends; break; } @@ -3344,11 +3351,11 @@ Vector FitsImage::wcs2pix(const Vector& vv, Coord::CoordSystem sys, astClearStatus; // just to make sure if (hasWCS(sys)) { - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); - Vector in = wcsIsASkyFrame(newast_) ? degToRad(vv) : vv; - Vector out = wcsTran(newast_, in, 0); + Vector in = wcsIsASkyFrame(ast_) ? degToRad(vv) : vv; + Vector out = wcsTran(ast_, in, 0); if (astOK && checkWCS(out)) return out; } @@ -3363,11 +3370,11 @@ Vector3d FitsImage::wcs2pix(const Vector3d& vv, Coord::CoordSystem sys, astClearStatus; // just to make sure if (hasWCS(sys)) { - setWCSSystem(newast_,sys); - setWCSSkyFrame(newast_,sky); + setWCSSystem(ast_,sys); + setWCSSkyFrame(ast_,sky); - Vector3d in = wcsIsASkyFrame(newast_) ? degToRad(vv) : vv; - Vector3d out = wcsTran(newast_, in, 0); + Vector3d in = wcsIsASkyFrame(ast_) ? degToRad(vv) : vv; + Vector3d out = wcsTran(ast_, in, 0); if (astOK && checkWCS(out)) return out; } @@ -3398,11 +3405,11 @@ double FitsImage::getWCSDist(const Vector& vv1, const Vector& vv2, return 0; astClearStatus; // just to make sure - setWCSSystem(newast_,sys); + setWCSSystem(ast_,sys); - return wcsIsASkyFrame(newast_) ? - radToDeg(wcsDistance(newast_, degToRad(vv1), degToRad(vv2))) : - wcsDistance(newast_, vv1, vv2); + return wcsIsASkyFrame(ast_) ? + radToDeg(wcsDistance(ast_, degToRad(vv1), degToRad(vv2))) : + wcsDistance(ast_, vv1, vv2); } #endif @@ -3456,54 +3463,33 @@ int FitsImage::hasWCSCel(Coord::CoordSystem sys) return 0; } + #else + int FitsImage::hasWCS(Coord::CoordSystem sys) { - if (!newast_ || sys