summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2017-12-06 18:01:00 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2017-12-06 18:01:00 (GMT)
commit8eb010fed77496da3a3b684d15a7f249cc887fc8 (patch)
treed1a3e9d90d115c08b064c27d9e83266e9f08cc70
parent1e73f87cdce20222b649edf55645f0a4ac8fedb1 (diff)
downloadblt-8eb010fed77496da3a3b684d15a7f249cc887fc8.zip
blt-8eb010fed77496da3a3b684d15a7f249cc887fc8.tar.gz
blt-8eb010fed77496da3a3b684d15a7f249cc887fc8.tar.bz2
update AST WCS
-rw-r--r--tksao/frame/fitsimage.C102
-rw-r--r--tksao/frame/fitsimage.h3
-rw-r--r--tksao/frame/frame3dbase.C17
-rw-r--r--tksao/frame/framebase.C8
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;