CCfits
2.5
|
00001 // Astrophysics Science Division, 00002 // NASA/ Goddard Space Flight Center 00003 // HEASARC 00004 // http://heasarc.gsfc.nasa.gov 00005 // e-mail: ccfits@legacy.gsfc.nasa.gov 00006 // 00007 // Original author: Ben Dorman 00008 00009 #ifndef PHDU_H 00010 #define PHDU_H 1 00011 00012 // valarray 00013 #include <valarray> 00014 // HDU 00015 #include "HDU.h" 00016 // FITS 00017 #include "FITS.h" 00018 // FITSUtil 00019 #include "FITSUtil.h" 00020 00021 namespace CCfits { 00022 class FITSBase; 00023 00024 } // namespace CCfits 00025 // for CLONE_DEFECT 00026 #ifdef _MSC_VER 00027 #include "MSconfig.h" 00028 #endif 00029 00030 00031 namespace CCfits { 00032 00067 /* !\fn PHDU::PHDU (FITSBase* p) 00068 00069 \brief Reading Primary HDU constructor. 00070 Constructor used when reading the primary HDU from an existing file. 00071 Does nothing except initialize, with the real work done by the subclass 00072 PrimaryHDU<T>. 00073 00074 */ 00075 00267 class PHDU : public HDU //## Inherits: <unnamed>%394E6F9800C3 00268 { 00269 00270 public: 00271 virtual ~PHDU(); 00272 00273 // Read data reads the image if readFlag is true and 00274 // optional keywords if supplied. Thus, with no arguments, 00275 // readData() does nothing. 00276 virtual void readData (bool readFlag = false, const std::vector<String>& keys = std::vector<String>()) = 0; 00277 virtual PHDU * clone (FITSBase* p) const = 0; 00278 virtual void zero (double value); 00279 virtual void scale (double value); 00280 virtual double zero () const; 00281 virtual double scale () const; 00282 00283 bool simple () const; 00284 bool extend () const; 00285 00286 public: 00287 // Additional Public Declarations 00288 // image reading/writing interface. 00289 00290 // The S template parameter, like for Column, denotes the fact that 00291 // the type of the input array and the object to be read may not match. 00292 00293 00294 // the rw interface for images consists of equivalents for fits_read_img, 00295 // fits_read_pix, and fits_read_subset. 00296 00297 // the paradigm for reading is that the image object (a valarray<T> type) 00298 // is the size of the data already read. 00299 00300 // write_subset has no null value aware analogue. 00301 template <typename S> 00302 void write(const std::vector<long>& first, 00303 long nElements, 00304 const std::valarray<S>& data, 00305 S* nullValue); 00306 00307 00308 template <typename S> 00309 void write(long first, 00310 long nElements, 00311 const std::valarray<S>& data, 00312 S* nullValue); 00313 00314 00315 template <typename S> 00316 void write(const std::vector<long>& first, 00317 long nElements, 00318 const std::valarray<S>& data); 00319 00320 00321 template <typename S> 00322 void write(long first, 00323 long nElements, 00324 const std::valarray<S>& data); 00325 00326 template <typename S> 00327 void write(const std::vector<long>& firstVertex, 00328 const std::vector<long>& lastVertex, 00329 const std::vector<long>& stride, 00330 const std::valarray<S>& data); 00331 00332 // read image data and return an array. Can't return a reference 00333 // because the type conversion needs to allocate a new object in general. 00334 00335 template<typename S> 00336 void read(std::valarray<S>& image) ; 00337 00338 template<typename S> 00339 void read (std::valarray<S>& image, long first,long nElements); 00340 00341 template<typename S> 00342 void read (std::valarray<S>& image, long first,long nElements, S* nullValue) ; 00343 00344 template<typename S> 00345 void read (std::valarray<S>& image, const std::vector<long>& first,long nElements) ; 00346 00347 template<typename S> 00348 void read (std::valarray<S>& image, const std::vector<long>& first, long nElements, 00349 S* nullValue); 00350 00351 template<typename S> 00352 void read (std::valarray<S>& image, const std::vector<long>& firstVertex, 00353 const std::vector<long>& lastVertex, 00354 const std::vector<long>& stride) ; 00355 00356 template<typename S> 00357 void read (std::valarray<S>& image, const std::vector<long>& firstVertex, 00358 const std::vector<long>& lastVertex, 00359 const std::vector<long>& stride, 00360 S* nullValue) ; 00361 00362 00363 protected: 00364 PHDU(const PHDU &right); 00365 // Constructor for new FITS objects, takes as arguments 00366 // the required keywords for a primary HDU. 00367 PHDU (FITSBase* p, int bpix, int naxis, const std::vector<long>& axes); 00368 // Custom constructor. Allows specification of data to be read and whether to read data at 00369 // construction or wait until the image data are requested. The default is 'lazy initialization:' 00370 // wait until asked. 00371 PHDU (FITSBase* p = 0); 00372 00373 virtual void initRead (); 00374 void simple (bool value); 00375 void extend (bool value); 00376 00377 // Additional Protected Declarations 00378 00379 private: 00380 // Additional Private Declarations 00381 00382 private: //## implementation 00383 // Data Members for Class Attributes 00384 bool m_simple; 00385 bool m_extend; 00386 00387 // Additional Implementation Declarations 00388 00389 }; 00390 00391 // Class CCfits::PHDU 00392 00393 inline bool PHDU::simple () const 00394 { 00395 return m_simple; 00396 } 00397 00398 inline void PHDU::simple (bool value) 00399 { 00400 m_simple = value; 00401 } 00402 00403 inline bool PHDU::extend () const 00404 { 00405 return m_extend; 00406 } 00407 00408 inline void PHDU::extend (bool value) 00409 { 00410 m_extend = value; 00411 } 00412 00413 } // namespace CCfits 00414 00415 00416 #endif