summaryrefslogtreecommitdiffstats
path: root/tksao
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2018-11-07 19:37:21 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2018-11-07 19:37:21 (GMT)
commitd81a364b0f8e7e847dae9274ee89fe6cdcffaa0e (patch)
tree6efcda38c9665f8ff8f0c6da98b9b63270d7fe85 /tksao
parent0838b3c708d759fe1368bfd9f7ee916ad645cfca (diff)
downloadblt-d81a364b0f8e7e847dae9274ee89fe6cdcffaa0e.zip
blt-d81a364b0f8e7e847dae9274ee89fe6cdcffaa0e.tar.gz
blt-d81a364b0f8e7e847dae9274ee89fe6cdcffaa0e.tar.bz2
fix save fits in case of wcs axis>2
Diffstat (limited to 'tksao')
-rw-r--r--tksao/frame/frsave.C14
-rw-r--r--tksao/frame/wcsast.C50
-rw-r--r--tksao/frame/wcsast.h1
3 files changed, 55 insertions, 10 deletions
diff --git a/tksao/frame/frsave.C b/tksao/frame/frsave.C
index 4a3aee1..467239b 100644
--- a/tksao/frame/frsave.C
+++ b/tksao/frame/frsave.C
@@ -10,6 +10,7 @@
#include "outchannel.h"
#include "outsocket.h"
#include "sigbus.h"
+#include "wcsast.h"
void Base::saveFits(OutFitsStream& str)
{
@@ -435,17 +436,10 @@ void FrameBase::saveFitsResampleKeyword(OutFitsStream& str, FitsHead& dst)
// ast
AstFrameSet* ast = (AstFrameSet*)astCopy(currentContext->fits->ast_);
-
Matrix mx = currentContext->fits->imageToRef * refToWidget * cc;
- double ss[] = {mx.matrix(0,0),mx.matrix(1,0),
- mx.matrix(0,1),mx.matrix(1,1)};
- double tt[] = {mx.matrix(2,0),mx.matrix(2,1)};
-
- AstMatrixMap* mm = astMatrixMap(2, 2, 0, ss, "");
- AstShiftMap* sm = astShiftMap(2, tt, "");
- AstCmpMap* cmp = astCmpMap(mm, sm, 1, "");
-
- astRemapFrame(ast, AST__BASE, cmp);
+ AstCmpMap* cmp = wcsMatrixMap(ast, mx);
+ if (cmp)
+ astRemapFrame(ast, AST__BASE, cmp);
// write to channel
if (!astWrite(chan, ast)) {
diff --git a/tksao/frame/wcsast.C b/tksao/frame/wcsast.C
index 5ae4ac7..d1b75a6 100644
--- a/tksao/frame/wcsast.C
+++ b/tksao/frame/wcsast.C
@@ -438,4 +438,54 @@ AstWinMap* wcsWinMap(AstFrameSet* ast, Vector& ll, Vector& ur, Vector& rr)
}
break;
}
+
+ return NULL;
+}
+
+AstCmpMap* wcsMatrixMap(AstFrameSet* ast, Matrix& mx)
+{
+ AstMatrixMap* mm =NULL;
+ AstShiftMap* sm =NULL;
+
+ int naxes = astGetI(ast,"Naxes");
+ switch (naxes) {
+ case 1:
+ // error
+ return NULL;
+ case 2:
+ {
+ double ss[] = {mx.matrix(0,0),mx.matrix(1,0),
+ mx.matrix(0,1),mx.matrix(1,1)};
+ double tt[] = {mx.matrix(2,0),mx.matrix(2,1)};
+ mm = astMatrixMap(2, 2, 0, ss, "");
+ sm = astShiftMap(2, tt, "");
+ }
+ break;
+ case 3:
+ {
+ double ss[] = {mx.matrix(0,0),mx.matrix(1,0),0,
+ mx.matrix(0,1),mx.matrix(1,1),0,
+ 0,0,1};
+ double tt[] = {mx.matrix(2,0),mx.matrix(2,1),0};
+ mm = astMatrixMap(3, 3, 0, ss, "");
+ sm = astShiftMap(3, tt, "");
+ }
+ break;
+ case 4:
+ {
+ double ss[] = {mx.matrix(0,0),mx.matrix(1,0),0,0,
+ mx.matrix(0,1),mx.matrix(1,1),0,0,
+ 0,0,1,0,
+ 0,0,0,1};
+ double tt[] = {mx.matrix(2,0),mx.matrix(2,1),0,0};
+ mm = astMatrixMap(4, 4, 0, ss, "");
+ sm = astShiftMap(4, tt, "");
+ }
+ break;
+ }
+
+ if (mm && sm)
+ return astCmpMap(mm, sm, 1, "");
+ else
+ return NULL;
}
diff --git a/tksao/frame/wcsast.h b/tksao/frame/wcsast.h
index e1c85fe..79dc101 100644
--- a/tksao/frame/wcsast.h
+++ b/tksao/frame/wcsast.h
@@ -23,3 +23,4 @@ double wcsAngle(AstFrameSet*, const Vector&, const Vector&, const Vector&);
double wcsAxAngle(AstFrameSet*, const Vector&, const Vector&);
AstWinMap* wcsWinMap(AstFrameSet*, Vector&, Vector&, Vector&);
+AstCmpMap* wcsMatrixMap(AstFrameSet* ast, Matrix&);