Subject: clean up template code

From: William Joye <[email-masked]>
Date: Thu, 26 Jul 2018 14:47:37 -0400

---
 tksao/frame/fitsimage.C | 120 ++++++++----------------------------------------
 tksao/frame/fitsimage.h |   9 ++--
 2 files changed, 24 insertions(+), 105 deletions(-)

diff --git a/tksao/frame/fitsimage.C b/tksao/frame/fitsimage.C
index 5e98a39..105f0b0 100644
--- a/tksao/frame/fitsimage.C
+++ b/tksao/frame/fitsimage.C
@@ -118,13 +118,6 @@ FitsImage::FitsImage(Context* cx, Tcl_Interp* pp)
   wcsCel_ =NULL;
   wcs3D_ =NULL;
   wcsHPX_ =0;
-
-  astSav_ =NULL;
-  astInvSav_ =0;
-  wcsSav_ =NULL;
-  wcsCelSav_ =NULL;
-  wcs3DSav_ =NULL;
-  wcsHPXSav_ =0;
 #endif
   wcsAltHeader_ =NULL;
   wfpc2Header_ =NULL;
@@ -1425,34 +1418,20 @@ void FitsImage::initWCS0(const Vector& pix)
   if (!ast_)
     return;
 
-  // read wcs struct into astChannel
-  // we may have an error, just reset
-  astClearStatus;
-
-  // new fitschan
-  AstFitsChan* chan = astFitsChan(NULL, NULL, "");
-  if (!astOK || chan == AST__NULL)
-    return;
-
-  // no warning messages
-  astClear(chan,"Warnings");
-
-  // basics (needed by fitschan.c)
-  putFitsCard(chan, "NAXIS1", (int)naxis(0));
-  putFitsCard(chan, "NAXIS2", (int)naxis(1));
+  FitsHead* hd = new FitsHead(naxis(0), naxis(1), 1, -32);
 
   // CTYPE
-  putFitsCard(chan, "CTYPE1", "RA---TAN");
-  putFitsCard(chan, "CTYPE2", "DEC--TAN");
+  hd->appendString("CTYPE1", "RA---TAN", NULL);
+  hd->appendString("CTYPE2", "DEC--TAN", NULL);
 
   // CRPIX
   Vector cc = mapFromRef(pix, Coord::IMAGE, Coord::FK5);
-  putFitsCard(chan, "CRPIX1", cc[1]);
-  putFitsCard(chan, "CRPIX2", cc[0]);
+  hd->appendReal("CRPIX1", cc[1], 8, NULL);
+  hd->appendReal("CRPIX2", cc[0], 8, NULL);
 
   // CRVAL
-  putFitsCard(chan, "CRVAL1", 0);
-  putFitsCard(chan, "CRVAL2", 0);
+  hd->appendReal("CRVAL1", 0, 8, NULL);
+  hd->appendReal("CRVAL2", 0, 8, NULL);
 
   // CD
   float ss = getWCSPixelSize(Coord::WCS);
@@ -1468,85 +1447,22 @@ void FitsImage::initWCS0(const Vector& pix)
     break;
   };
   Matrix mx = flip*Rotate(ang)*Scale(ss);
-  putFitsCard(chan, "CD1_1", mx[0][0]);
-  putFitsCard(chan, "CD1_2", mx[0][1]);
-  putFitsCard(chan, "CD2_1", mx[1][0]);
-  putFitsCard(chan, "CD2_2", mx[1][1]);
+  hd->appendReal("CD1_1", mx[0][0], 8, NULL);
+  hd->appendReal("CD1_2", mx[0][1], 8, NULL);
+  hd->appendReal("CD2_1", mx[1][0], 8, NULL);
+  hd->appendReal("CD2_2", mx[1][1], 8, NULL);
 
   // EPOCH, EQUINOX
-  putFitsCard(chan, "EPOCH", 2000);
-  putFitsCard(chan, "EQUINOX", 2000);
+  hd->appendReal("EPOCH", 2000, 8, NULL);
+  hd->appendReal("EQUINOX", 2000, 8, NULL);
   
   // RADESYS
-  putFitsCard(chan, "RADESYS", "FK5");
-
-  // all done
-  // rewind chan
-  astClear(chan, "Card");
-
-  // parse header
-  AstFrameSet* frameSet = (AstFrameSet*)astRead(chan);
-
-  // do we have anything?
-  if (!astOK || frameSet == AST__NULL || 
-      strncmp(astGetC(frameSet,"Class"), "FrameSet", 8))
-    return;
+  hd->appendString("RADESYS", "FK5", NULL);
 
-  // save current wcs
-  astSav_ = ast_;
-  astInvSav_ = astInv_;
-  wcsSav_ = wcs_;
-  wcsCelSav_ = wcsCel_;
-  wcs3DSav_ = wcs3D_;
-  wcsHPXSav_ = wcsHPX_;
-
-  // set up temp wcs
-  ast_ = frameSet;
-  astInv_ = 1;
-  wcs_ = new int[MULTWCS];
-  for (int ii=0; ii<MULTWCS; ii++)
-    wcs_[ii] =0;
-  wcs_[0] =1;
-  wcsCel_ = new int[MULTWCS];
-  for (int ii=0; ii<MULTWCS; ii++)
-    wcsCel_[ii] =0;
-  wcsCel_[0] = 1;
-  wcs3D_ = new int[MULTWCS];
-  for (int ii=0; ii<MULTWCS; ii++)
-    wcs3D_[ii] =0;
-  wcsHPX_ = 0;
-
-  if (DebugWCS)
-    astShow(frameSet);
-
-  // cleanup
-  astAnnul(chan);
-}
-
-void FitsImage::resetWCS0()
-{
-  if (wcs_)
-    delete [] wcs_;
-  if (wcsCel_)
-    delete [] wcsCel_;
-  if (wcs3D_)
-    delete [] wcs3D_;
-
-  // restore current wcs
-  ast_ = astSav_;
-  astInv_ = astInvSav_;
-  wcs_ = wcsSav_;
-  wcsCel_ = wcsCelSav_;
-  wcs3D_ = wcs3DSav_;
-  wcsHPX_ = wcsHPXSav_;
-
-  // reset temp wcs
-  astSav_ =NULL;
-  astInvSav_ =0;
-  wcsSav_ =NULL;
-  wcsCelSav_ =NULL;
-  wcs3DSav_ =NULL;
-  wcsHPXSav_ =0;
+  if (wcs0Header_)
+    delete wcs0Header_;
+  wcs0Header_ = hd;
+  initWCS(wcs0Header_);
 }
 #endif
 
diff --git a/tksao/frame/fitsimage.h b/tksao/frame/fitsimage.h
index 6d778a1..acea52a 100644
--- a/tksao/frame/fitsimage.h
+++ b/tksao/frame/fitsimage.h
@@ -168,6 +168,9 @@ class FitsImage {
   void wcs2ast0(int, FitsHead*, FitsHead*, void*);
   void header2ast(int,FitsHead*, void*);
   void astinit0(int, FitsHead*, FitsHead*);
+
+  void initWCS0(const Vector&);
+  void resetWCS0();
 #else
   void initWCS(FitsHead*);
   void astInit(FitsHead*);
@@ -175,6 +178,9 @@ class FitsImage {
   void wcsCelInit(int);
   void wcs3DInit(int);
   void wcsHPXInit();
+
+  void initWCS0(const Vector&);
+  void resetWCS0() {resetWCS();}
 #endif
   void putFitsCard(void* chan, const char* key, const char* value);
   void putFitsCard(void* chan, const char* key, int value);
@@ -410,9 +416,6 @@ class FitsImage {
   void resetWCS();
   void replaceWCS(istream&);
 
-  void initWCS0(const Vector&);
-  void resetWCS0();
-
   void processKeywordsPhysical();
   void processKeywordsParams();
   void processKeywordsFitsSection();
-- 
cgit v0.12