summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2018-08-16 16:52:55 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2018-08-16 16:52:55 (GMT)
commit33b8f9fd852477630addbf48a59d01849df5a096 (patch)
tree37188a077cc674a1afcd952bc8126283d9d918b3
parent2e9a4d3293f9a27883d525abaaa5459a67b063af (diff)
downloadblt-33b8f9fd852477630addbf48a59d01849df5a096.zip
blt-33b8f9fd852477630addbf48a59d01849df5a096.tar.gz
blt-33b8f9fd852477630addbf48a59d01849df5a096.tar.bz2
simplify wcs code
-rw-r--r--tksao/frame/basecommand.C10
-rw-r--r--tksao/frame/fitsimage.C20
-rw-r--r--tksao/frame/fitsmap.C35
-rw-r--r--tksao/vector/vectorstr.C83
-rw-r--r--tksao/vector/vectorstr.h8
5 files changed, 123 insertions, 33 deletions
diff --git a/tksao/frame/basecommand.C b/tksao/frame/basecommand.C
index 2c60ee9..b3ad310 100644
--- a/tksao/frame/basecommand.C
+++ b/tksao/frame/basecommand.C
@@ -1783,6 +1783,16 @@ void Base::getFitsSliceCmd(int id, Coord::CoordSystem sys)
{
if (currentContext->fits) {
int ss = currentContext->slice(id);
+ /*
+ FitsImage* ptr = currentContext->fits;
+ Vector cc = ptr->center();
+ Vector3d dd = Vector3d(cc,ss) * Translate3d(-.5,-.5,-.5);
+ cerr << ptr->mapFromRef(dd,sys,Coord::FK5,Coord::SEXAGESIMAL)
+ << '='
+ << ptr->mapFromRef(dd,sys)
+ << '='
+ << ptr->mapFromImage3d(ss,sys) << endl;
+ */
printDouble(currentContext->fits->mapFromImage3d(ss,sys));
}
else
diff --git a/tksao/frame/fitsimage.C b/tksao/frame/fitsimage.C
index 984b21a..23d8e40 100644
--- a/tksao/frame/fitsimage.C
+++ b/tksao/frame/fitsimage.C
@@ -2763,23 +2763,22 @@ const char* FitsImage::getWCSAxisSymbol(Coord::CoordSystem sys, int axis)
Vector FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys,
Coord::SkyFrame sky)
{
- astClearStatus; // just to make sure
- astBegin; // start memory management
-
if (!hasWCS(sys))
return Vector();
+ astClearStatus; // just to make sure
+ astBegin; // start memory management
+
setWCSSystem(sys);
setWCSSkyFrame(sky);
Vector out = wcsTran(ast_, in, 1);
+ if (!astOK || !checkWCS(out))
+ return Vector();
astEnd;
- if (astOK && checkWCS(out))
- return hasWCSCel(sys) ? zero360(radToDeg(out)) : out;
-
- return Vector();
+ return hasWCSCel(sys) ? zero360(radToDeg(out)) : out;
}
VectorStr FitsImage::pix2wcs(const Vector& in, Coord::CoordSystem sys,
@@ -2818,13 +2817,12 @@ Vector3d FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys,
setWCSSkyFrame(sky);
Vector3d out = wcsTran(ast_, in, 1);
+ if (!astOK || !checkWCS(out))
+ return Vector3d();
astEnd;
- if (astOK && checkWCS(out))
- return hasWCSCel(sys) ? zero360(radToDeg(out)) : out;
- else
- return Vector3d();
+ return hasWCSCel(sys) ? zero360(radToDeg(out)) : out;
}
VectorStr3d FitsImage::pix2wcs(const Vector3d& in, Coord::CoordSystem sys,
diff --git a/tksao/frame/fitsmap.C b/tksao/frame/fitsmap.C
index 53903ec..97708ac 100644
--- a/tksao/frame/fitsmap.C
+++ b/tksao/frame/fitsmap.C
@@ -30,10 +30,21 @@ Vector FitsImage::mapFromRef(const Vector& vv, Coord::CoordSystem out,
VectorStr FitsImage::mapFromRef(const Vector& vv, Coord::CoordSystem out,
Coord::SkyFrame sky, Coord::SkyFormat format)
{
- if (hasWCS(out))
- return pix2wcs(vv * refToImage, out, sky, format);
- else
- return VectorStr();
+ switch (out) {
+ case Coord::IMAGE:
+ return VectorStr(vv * refToImage);
+ case Coord::PHYSICAL:
+ return VectorStr(vv * refToPhysical);
+ case Coord::AMPLIFIER:
+ return VectorStr(vv * refToAmplifier);
+ case Coord::DETECTOR:
+ return VectorStr(vv * refToDetector);
+ default:
+ if (hasWCS(out))
+ return pix2wcs(vv * refToImage, out, sky, format);
+ }
+
+ return VectorStr();
}
Vector3d FitsImage::mapFromRef(const Vector3d& vv, Coord::CoordSystem out,
@@ -56,10 +67,18 @@ Vector3d FitsImage::mapFromRef(const Vector3d& vv, Coord::CoordSystem out,
VectorStr3d FitsImage::mapFromRef(const Vector3d& vv, Coord::CoordSystem out,
Coord::SkyFrame sky, Coord::SkyFormat format)
{
- if (hasWCS(out))
- return pix2wcs(vv * refToImage3d, out, sky, format);
- else
- return VectorStr3d();
+ switch (out) {
+ case Coord::IMAGE:
+ case Coord::PHYSICAL:
+ case Coord::AMPLIFIER:
+ case Coord::DETECTOR:
+ return VectorStr3d(vv * refToImage3d);
+ default:
+ if (hasWCS(out))
+ return pix2wcs(vv * refToImage3d, out, sky, format);
+ }
+
+ return VectorStr3d();
}
Vector FitsImage::mapToRef(const Vector& vv, Coord::CoordSystem in,
diff --git a/tksao/vector/vectorstr.C b/tksao/vector/vectorstr.C
index c77ef16..7d0576c 100644
--- a/tksao/vector/vectorstr.C
+++ b/tksao/vector/vectorstr.C
@@ -28,14 +28,44 @@ VectorStr::VectorStr(const VectorStr& vv)
c[1] = dupstr(vv.c[1]);
}
+VectorStr::VectorStr(const Vector& vv)
+{
+ ostringstream str0;
+ str0 << vv[0];
+ c[0] = dupstr(str0.str().c_str());
+
+ ostringstream str1;
+ str1 << vv[1];
+ c[1] = dupstr(str1.str().c_str());
+}
+
VectorStr& VectorStr::operator=(const VectorStr& vv)
{
if (c[0])
delete [] c[0];
c[0]=dupstr(vv.c[0]);
+
if (c[1])
delete [] c[1];
c[1]=dupstr(vv.c[1]);
+
+ return *this;
+}
+
+VectorStr& VectorStr::operator=(const Vector& vv)
+{
+ if (c[0])
+ delete [] c[0];
+ ostringstream str0;
+ str0 << vv[0];
+ c[0] = dupstr(str0.str().c_str());
+
+ if (c[1])
+ delete [] c[1];
+ ostringstream str1;
+ str1 << vv[1];
+ c[1] = dupstr(str1.str().c_str());
+
return *this;
}
@@ -57,12 +87,6 @@ ostream& operator<<(ostream& os, const VectorStr& vv)
return os;
}
-istream& operator>>(istream& ss, VectorStr& vv)
-{
- ss >> vv.c[0] >> vv.c[1];
- return ss;
-}
-
// VectorStr3d
VectorStr3d::~VectorStr3d()
@@ -89,17 +113,58 @@ VectorStr3d::VectorStr3d(const VectorStr3d& vv)
c[2] = dupstr(vv.c[2]);
}
+VectorStr3d::VectorStr3d(const Vector3d& vv)
+{
+ ostringstream str0;
+ str0 << vv[0];
+ c[0] = dupstr(str0.str().c_str());
+
+ ostringstream str1;
+ str1 << vv[1];
+ c[1] = dupstr(str1.str().c_str());
+
+ ostringstream str2;
+ str2 << vv[2];
+ c[2] = dupstr(str2.str().c_str());
+}
+
VectorStr3d& VectorStr3d::operator=(const VectorStr3d& vv)
{
if (c[0])
delete [] c[0];
c[0]=dupstr(vv.c[0]);
+
if (c[1])
delete [] c[1];
c[1]=dupstr(vv.c[1]);
+
if (c[2])
delete [] c[2];
c[2]=dupstr(vv.c[2]);
+
+ return *this;
+}
+
+VectorStr3d& VectorStr3d::operator=(const Vector3d& vv)
+{
+ if (c[0])
+ delete [] c[0];
+ ostringstream str0;
+ str0 << vv[0];
+ c[0] = dupstr(str0.str().c_str());
+
+ if (c[1])
+ delete [] c[1];
+ ostringstream str1;
+ str1 << vv[1];
+ c[1] = dupstr(str1.str().c_str());
+
+ if (c[2])
+ delete [] c[2];
+ ostringstream str2;
+ str2 << vv[2];
+ c[2] = dupstr(str2.str().c_str());
+
return *this;
}
@@ -120,9 +185,3 @@ ostream& operator<<(ostream& os, const VectorStr3d& vv)
return os;
}
-
-istream& operator>>(istream& ss, VectorStr3d& vv)
-{
- ss >> vv.c[0] >> vv.c[1] >> vv.c[2];
- return ss;
-}
diff --git a/tksao/vector/vectorstr.h b/tksao/vector/vectorstr.h
index 36587ad..71181fb 100644
--- a/tksao/vector/vectorstr.h
+++ b/tksao/vector/vectorstr.h
@@ -5,6 +5,8 @@
#ifndef __vectorstr_h__
#define __vectorstr_h__
+#include "vector.h"
+
#include <iostream>
using namespace std;
@@ -17,14 +19,15 @@ class VectorStr {
~VectorStr();
VectorStr(const char*, const char*);
VectorStr(const VectorStr&);
+ VectorStr(const Vector&);
VectorStr& operator=(const VectorStr&);
+ VectorStr& operator=(const Vector&);
const char* operator[](int i) const {return c[i];} // return element
char** cc() {return c;} // return vector
};
ostream& operator<<(ostream&, const VectorStr&);
-istream& operator>>(istream&, VectorStr&);
class VectorStr3d {
public:
@@ -35,14 +38,15 @@ class VectorStr3d {
~VectorStr3d();
VectorStr3d(const char*, const char*, const char*);
VectorStr3d(const VectorStr3d&);
+ VectorStr3d(const Vector3d&);
VectorStr3d& operator=(const VectorStr3d&);
+ VectorStr3d& operator=(const Vector3d&);
const char* operator[](int i) const {return c[i];} // return element
char** cc() {return c;} // return vector
};
ostream& operator<<(ostream&, const VectorStr3d&);
-istream& operator>>(istream&, VectorStr3d&);
#endif