// Copyright (C) 1999-2018 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "plio.h" extern "C" { int pl_l2pi(short *ll_src, int xs, int *px_dst, int npix); } template FitsPliom::FitsPliom(FitsFile* fits) : FitsCompressm(fits) { FitsCompressm::uncompress(fits); } template int FitsPliom::compressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { double zs = FitsCompressm::bscale_; if (FitsCompressm::zscale_) zs = FitsCompressm::zscale_->value(sptr,0); double zz = FitsCompressm::bzero_; if (FitsCompressm::zzero_) zz = FitsCompressm::zzero_->value(sptr,0); int blank = FitsCompressm::blank_; if (FitsCompressm::zblank_) blank = (int)FitsCompressm::zblank_->value(sptr,0); int icnt=0; short* ibuf = (short*)((FitsBinColumnArray*)FitsCompressm::compress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; // swap if needed if (FitsCompressm::byteswap_) for (int ii=0; ii::tilesize_; int* obuf = new int[ocnt]; int cc = pl_l2pi(ibuf, 1, obuf, ocnt); if (cc != ocnt) { internalError("Fitsy++ plio error"); return 0; } int ll=0; for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii] = FitsCompressm::getValue(obuf+ll,zs,zz,blank); if (obuf) delete [] obuf; return 1; } template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom;