summaryrefslogtreecommitdiffstats
path: root/fitsy++/savefits.C
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2020-03-19 14:52:02 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2020-03-19 14:52:02 (GMT)
commitd464af4522b4ecc906eb726a55fb01dc2db44930 (patch)
treefe8613cbd93424e933229e7ad7cc7d5ceae11fd8 /fitsy++/savefits.C
parent36b673794f503c76e7dca7360bea4cd1ebf1e660 (diff)
downloadblt-d464af4522b4ecc906eb726a55fb01dc2db44930.zip
blt-d464af4522b4ecc906eb726a55fb01dc2db44930.tar.gz
blt-d464af4522b4ecc906eb726a55fb01dc2db44930.tar.bz2
libfitsy
Diffstat (limited to 'fitsy++/savefits.C')
-rw-r--r--fitsy++/savefits.C358
1 files changed, 0 insertions, 358 deletions
diff --git a/fitsy++/savefits.C b/fitsy++/savefits.C
deleted file mode 100644
index bfd6f94..0000000
--- a/fitsy++/savefits.C
+++ /dev/null
@@ -1,358 +0,0 @@
-// Copyright (C) 1999-2018
-// Smithsonian Astrophysical Observatory, Cambridge, MA, USA
-// For conditions of distribution and use, see copyright notice in "copyright"
-
-#include <iostream>
-#include <sstream>
-#include <iomanip>
-using namespace std;
-
-#include <tcl.h>
-
-#include "file.h"
-#include "util.h"
-#include "outfile.h"
-#include "outchannel.h"
-#include "outsocket.h"
-
-int FitsFile::saveFitsPrimHeader(OutFitsStream& str)
-{
- // write fake primary header
- char buf[FTY_BLOCK];
- memset(buf,' ',FTY_BLOCK);
-
- char* hdu = buf;
-
- memcpy(hdu,"SIMPLE = ",10);
- memcpy(hdu+32-3,"T /",3);
- hdu += FTY_CARDLEN;
-
- memcpy(hdu,"BITPIX = ",10);
- memcpy(hdu+32-3,"8 /",3);
- hdu += FTY_CARDLEN;
-
- memcpy(hdu,"NAXIS = ",10);
- memcpy(hdu+32-3,"0 /",3);
- hdu += FTY_CARDLEN;
-
- memcpy(hdu,"END",3);
- str.write(buf, FTY_BLOCK);
-
- return FTY_BLOCK;
-}
-
-int FitsFile::saveFitsHeaderCards(OutFitsStream& str, int depth, int cc)
-{
- char buf[FTY_CARDLEN];
- int cnt = 0;
-
- char* ptr = head()->cards() + cc;
- char* end = head()->cards() + head()->headbytes();
-
- while (ptr<end) {
- if (!strncmp(ptr,"BITPIX",6) && head()->bitpix() == -16) {
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"BITPIX = ",10);
- memcpy(buf+32-4,"32 /",4);
- str.write(buf, FTY_CARDLEN);
- }
- else if (!strncmp(ptr,"NAXIS ",6)) {
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"NAXIS = ",10);
- if (depth>1)
- memcpy(buf+32-3,"3 /",3);
- else
- if (head()->naxis(1)>1)
- memcpy(buf+32-3,"2 /",3);
- else
- memcpy(buf+32-3,"1 /",3);
- str.write(buf, FTY_CARDLEN);
- }
- else if (!strncmp(ptr,"NAXIS2",6)) {
- str.write(ptr, FTY_CARDLEN);
-
- if (depth>1) {
- ostringstream ddstr;
- ddstr << depth << " /" << ends;
- const char* ddptr = dupstr(ddstr.str().c_str());
- int ll = strlen(ddptr);
-
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"NAXIS3 = ",10);
- memcpy(buf+32-ll, ddptr, ll);
- str.write(buf, FTY_CARDLEN);
- cnt += FTY_CARDLEN;
- delete [] ddptr;
- }
- }
- else if (!strncmp(ptr,"NAXIS3",6)) {
- // skip, we already take care of it above
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"NAXIS4",6)) {
- // skip, better not be here
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"NAXIS5",6)) {
- // skip, better not be here
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"PCOUNT",6)) {
- // skip
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"GCOUNT",6)) {
- // skip
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"END ",6)) {
- // skip, will insert at the end
- cnt -= FTY_CARDLEN;
- }
- else if (!strncmp(ptr,"CRVAL3",6) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"CRPIX3",6) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"CDELT3",6) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"CTYPE3",6) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"CUNIT3",6) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"CD3_",4) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else if (!strncmp(ptr,"PC3_",4) && depth==1)
- // skip
- cnt -= FTY_CARDLEN;
- else
- str.write(ptr, FTY_CARDLEN);
-
- ptr += FTY_CARDLEN;
- cnt += FTY_CARDLEN;
- }
-
- // final END
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"END",3);
- str.write(buf, FTY_CARDLEN);
- cnt += FTY_CARDLEN;
-
- return cnt;
-}
-
-int FitsFile::saveFitsHeader(OutFitsStream& str, int depth)
-{
- int cnt =0;
- char buf[FTY_CARDLEN];
-
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"SIMPLE = ",10);
- memcpy(buf+32-3,"T /",3);
- str.write(buf, FTY_CARDLEN);
- cnt += FTY_CARDLEN;
-
- cnt += saveFitsHeaderCards(str,depth,cnt);
- cnt += saveFitsPad(str,cnt,' ');
-
- return cnt;
-}
-
-int FitsFile::saveFitsXtHeader(OutFitsStream& str, int depth)
-{
- // write xtension header
- // the header may be an xtension, or primary, so lets force a
- // first line of 'SIMPLE' and then write the rest of the header
- int cnt =0;
- char buf[FTY_CARDLEN];
-
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"XTENSION= 'IMAGE '",20);
- str.write(buf, FTY_CARDLEN);
- cnt += FTY_CARDLEN;
-
- cnt += saveFitsHeaderCards(str,depth,cnt);
- cnt += saveFitsPad(str,cnt,' ');
-
- return cnt;
-}
-
-int FitsFile::saveFits(OutFitsStream& str)
-{
- FitsImageHDU* hdu = (FitsImageHDU*)(head()->hdu());
-
- if (hdu->bitpix() != -16) {
- switch (endian_) {
- case BIG:
- str.write((char*)data(), hdu->imgbytes());
- break;
- case LITTLE:
- str.writeSwap((char*)data(), hdu->imgbytes(), head()->bitpix());
- break;
- case NATIVE:
- break;
- }
-
- return hdu->imgbytes();
- }
-
- // convert bitpix=-16 to bitpix=32
- int nx = head()->naxis(0);
- int ny = head()->naxis(1);
- int ss = nx*ny;
- int* dest = new int[ss];
- for(int jj=0; jj<ny; jj++) {
- for (int ii=0; ii<nx; ii++) {
- unsigned short* data = (unsigned short*)data_;
- unsigned short* ptr = data + jj*nx +ii;
-
- unsigned short vv;
- if (byteswap_)
- swap2((char*)ptr, (char*)&vv);
- else
- vv = *ptr;
-
- dest[jj*nx + ii] = int(vv);
- }
- }
-
- if (!lsb())
- str.write((char*)dest, 4*ss);
- else
- str.writeSwap((char*)dest, 4*ss, 32);
-
- delete [] dest;
- return 4*ss;
-}
-
-int FitsFile::saveFitsPad(OutFitsStream& str, size_t cnt, char fil)
-{
- // write any padding
- char buf[FTY_BLOCK];
- memset(buf,fil,FTY_BLOCK);
-
- int npad = FTY_BLOCK - (cnt % FTY_BLOCK);
- if (npad == FTY_BLOCK)
- npad = 0;
- if( npad > 0 )
- str.write(buf, npad);
-
- return npad;
-}
-
-int FitsFile::saveFitsTable(OutFitsStream& str)
-{
- int cnt =0;
- // primary header
- str.write(primary()->cards(), primary()->headbytes());
- cnt += primary()->headbytes();
-
- // now, ext header
- str.write(head()->cards(), head()->headbytes());
- cnt += head()->headbytes();
-
- // write valid data
- // our data may be short (mmap or bad fits), so write valid data
- // then write the pad, becareful with arch, if array
-
- switch (endian_) {
- case BIG:
- str.write((char*)data(), head()->allbytes());
- break;
- case LITTLE:
- str.writeSwap((char*)data(), head()->allbytes(), head()->bitpix());
- break;
- case NATIVE:
- break;
- }
- cnt += head()->allbytes();
-
- // we may need to add a buffer to round out to block size
- int diff = head()->padbytes();
- if (diff>0) {
- char* buf = new char[diff];
- memset(buf,'\0',diff);
- str.write(buf, diff);
- delete [] buf;
- }
- cnt += head()->padbytes();
-
- return cnt;
-}
-
-int FitsFile::saveFitsIISHeader(OutFitsStream& str)
-{
- int cnt =0;
- char buf[FTY_CARDLEN];
-
- char* ptr = head()->cards();
- char* end = head()->cards() + head()->headbytes();
- while (ptr<end) {
- if (!strncmp(ptr,"BITPIX",6)) {
- memset(buf,' ',FTY_CARDLEN);
- memcpy(buf,"BITPIX = ",10);
- memcpy(buf+32-4,"-32 /",5);
- str.write(buf, FTY_CARDLEN);
- }
- else
- str.write(ptr, FTY_CARDLEN);
-
- ptr+=FTY_CARDLEN;
- cnt += FTY_CARDLEN;
- }
-
- cnt += saveFitsPad(str,cnt,' ');
-
- return cnt;
-}
-
-int FitsFile::saveFitsIIS(OutFitsStream& str, Vector& iisz)
-{
- FitsImageHDU* hdu = (FitsImageHDU*)(head()->hdu());
-
- unsigned char* src = (unsigned char*)data();
- int size = hdu->imgbytes();
- float* dest = new float[size];
-
- for (int ii=0; ii<size; ii++)
- if (src[ii] == 0)
- dest[ii] = NAN;
- else if (src[ii] == 1)
- dest[ii] = iisz[0];
- else if (src[ii] == 200)
- dest[ii] = iisz[1];
- else if (src[ii] > 200)
- dest[ii] = NAN;
- else
- dest[ii] = ((src[ii]-1) * (iisz[1]-iisz[0]))/199 + iisz[0];
-
- if (!lsb())
- str.write((char*)dest, size*sizeof(float));
- else
- str.writeSwap((char*)dest, size*sizeof(float), -32);
-
- if (dest)
- delete [] dest;
-
- return size*sizeof(float);
-}
-
-int FitsFile::saveArray(OutFitsStream& str, ArchType which)
-{
- // only save one slice
- size_t size = head_->naxis(0)*head_->naxis(1)*abs(head_->bitpix()/8);
- int bitpix = head_->bitpix();
-
- if (which == endian_)
- str.write((char*)data(), size);
- else
- str.writeSwap((char*)data(), size, bitpix);
-
- return size;
-}
-