GammaLib 2.0.0
Loading...
Searching...
No Matches
GFitsImageShort.cpp
Go to the documentation of this file.
1/***************************************************************************
2 * GFitsImageShort.cpp - Short integer FITS image class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2010-2018 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GFitsImageShort.cpp
23 * @brief Short integer FITS image class implementation
24 * @author Juergen Knoedlseder
25 */
26
27/* __ Includes ___________________________________________________________ */
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31#include "GException.hpp"
32#include "GFitsCfitsio.hpp"
33#include "GFitsImageShort.hpp"
34
35/* __ Method name definitions ____________________________________________ */
36
37/* __ Macros _____________________________________________________________ */
38#define G_BITPIX 16 //!< Defines the number of bits per pixel
39
40/* __ Coding definitions _________________________________________________ */
41
42/* __ Debug definitions __________________________________________________ */
43
44
45
46/*==========================================================================
47 = =
48 = Constructors/destructors =
49 = =
50 ==========================================================================*/
51
52/***********************************************************************//**
53 * @brief Void constructor
54 ***************************************************************************/
56{
57 // Initialise class members
59
60 // Return
61 return;
62}
63
64
65/***********************************************************************//**
66 * @brief 1D image constructor
67 *
68 * @param[in] nx Number of pixels.
69 * @param[in] pixels Optional pointer to image pixel array
70 *
71 * Construct 1D instance by specifying the number of pixels in the image.
72 ***************************************************************************/
73GFitsImageShort::GFitsImageShort(const int& nx, const short* pixels) :
75{
76 // Initialise class members
78
79 // Construct data
81
82 // Return
83 return;
84}
85
86
87/***********************************************************************//**
88 * @brief 2D image constructor
89 *
90 * @param[in] nx Number of pixels in first dimension.
91 * @param[in] ny Number of pixels in second dimension.
92 * @param[in] pixels Optional pointer to image pixel array
93 *
94 * Construct 2D image by specifying the number of pixels in each dimension.
95 ***************************************************************************/
96GFitsImageShort::GFitsImageShort(const int& nx, const int& ny,
97 const short* pixels) :
98 GFitsImage(G_BITPIX, nx, ny)
99{
100 // Initialise class members
101 init_members();
102
103 // Construct data
105
106 // Return
107 return;
108}
109
110
111/***********************************************************************//**
112 * @brief 3D image constructor
113 *
114 * @param[in] nx Number of pixels in first dimension.
115 * @param[in] ny Number of pixels in second dimension.
116 * @param[in] nz Number of pixels in third dimension.
117 * @param[in] pixels Optional pointer to image pixel array
118 *
119 * Construct 3D image by specifying the number of pixels in each dimension.
120 ***************************************************************************/
121GFitsImageShort::GFitsImageShort(const int& nx, const int& ny, const int& nz,
122 const short* pixels) :
123 GFitsImage(G_BITPIX, nx, ny, nz)
124{
125 // Initialise class members
126 init_members();
127
128 // Construct data
130
131 // Return
132 return;
133}
134
135
136/***********************************************************************//**
137 * @brief 4D image constructor
138 *
139 * @param[in] nx Number of pixels in first dimension.
140 * @param[in] ny Number of pixels in second dimension.
141 * @param[in] nz Number of pixels in third dimension.
142 * @param[in] nt Number of pixels in forth dimension.
143 * @param[in] pixels Optional pointer to image pixel array
144 *
145 * Construct 4D image by specifying the number of pixels in each dimension.
146 ***************************************************************************/
147GFitsImageShort::GFitsImageShort(const int& nx, const int& ny, const int& nz,
148 const int& nt, const short* pixels) :
149 GFitsImage(G_BITPIX, nx, ny, nz, nt)
150{
151 // Initialise class members
152 init_members();
153
154 // Construct data
156
157 // Return
158 return;
159}
160
161
162/***********************************************************************//**
163 * @brief Pixel array constructor
164 *
165 * @param[in] naxes Vector of number of pixels in each dimension.
166 * @param[in] pixels Optional pointer to image pixel array
167 *
168 * Construct instance of GFitsImageShort by specifying the image dimension and
169 * the number of pixels in each dimension.
170 ***************************************************************************/
171GFitsImageShort::GFitsImageShort(const std::vector<int>& naxes,
172 const short* pixels) :
173 GFitsImage(G_BITPIX, naxes)
174{
175 // Initialise class members
176 init_members();
177
178 // Construct data
180
181 // Return
182 return;
183}
184
185
186/***********************************************************************//**
187 * @brief Type conversion constructor
188 *
189 * @param[in] image FITS image.
190 *
191 * This constructor performs the conversion of any image type into a short
192 * integer image.
193 ***************************************************************************/
195 GFitsImage(image)
196{
197 // Initialise class members
198 init_members();
199
200 // Copy pixels
201 if (m_num_pixels > 0) {
202 m_pixels = new short[m_num_pixels];
203 for (int i = 0; i < m_num_pixels; ++i) {
204 m_pixels[i] = (short)image.pixel(i);
205 }
206 }
207
208 // Set number of bits per pixel
210
211 // Update header card
212 card("BITPIX").value(G_BITPIX);
213
214 // Return
215 return;
216}
217
218
219/***********************************************************************//**
220 * @brief Copy constructor
221 *
222 * @param[in] image FITS image.
223 ***************************************************************************/
225 GFitsImage(image)
226{
227 // Initialise class members
228 init_members();
229
230 // Copy members
231 copy_members(image);
232
233 // Return
234 return;
235}
236
237
238/***********************************************************************//**
239 * @brief Destructor
240 ***************************************************************************/
242{
243 // Free members
244 free_members();
245
246 // Return
247 return;
248}
249
250
251/*==========================================================================
252 = =
253 = Operators =
254 = =
255 ==========================================================================*/
256
257/***********************************************************************//**
258 * @brief Assignment operator
259 *
260 * @param[in] image FITS image.
261 ***************************************************************************/
263{
264 // Execute only if object is not identical
265 if (this != &image) {
266
267 // Copy base class members
268 this->GFitsImage::operator=(image);
269
270 // Free members
271 free_members();
272
273 // Initialise private members for clean destruction
274 init_members();
275
276 // Copy members
277 copy_members(image);
278
279 } // endif: object was not identical
280
281 // Return this object
282 return *this;
283}
284
285
286/***********************************************************************//**
287 * @brief Image pixel access operator
288 *
289 * @param[in] ix Pixel index (starting from 0).
290 *
291 * Provides access to an image pixel. No range checking is performed.
292 * Use the at(ix) method if range checking is required.
293 ***************************************************************************/
294short& GFitsImageShort::operator()(const int& ix)
295{
296 // Load data
297 load_data();
298
299 // Return image pixel
300 return m_pixels[ix];
301}
302
303
304/***********************************************************************//**
305 * @brief 2D image pixel access operator
306 *
307 * @param[in] ix Pixel index in first dimension (starting from 0).
308 * @param[in] iy Pixel index in second dimension (starting from 0).
309 *
310 * Provides access to a pixel of a 2D image. No range checking or image
311 * dimension verification is performed. Use the at(ix,iy) method if range
312 * checking and image dimension verification is required.
313 ***************************************************************************/
314short& GFitsImageShort::operator()(const int& ix, const int& iy)
315{
316 // Load data
317 load_data();
318
319 // Calculate pixel offset
320 int offset = ix + iy * m_naxes[0];
321
322 // Return image pixel
323 return m_pixels[offset];
324}
325
326
327/***********************************************************************//**
328 * @brief 3D image pixel access operator
329 *
330 * @param[in] ix Pixel index in first dimension (starting from 0).
331 * @param[in] iy Pixel index in second dimension (starting from 0).
332 * @param[in] iz Pixel index in third dimension (starting from 0).
333 *
334 * Provides access to a pixel of a 3D image. No range checking or image
335 * dimension verification is performed. Use the at(ix,iy) method if range
336 * checking and image dimension verification is required.
337 ***************************************************************************/
338short& GFitsImageShort::operator()(const int& ix, const int& iy, const int& iz)
339{
340 // Load data
341 load_data();
342
343 // Calculate pixel offset
344 int offset = ix + m_naxes[0] * (iy + iz * m_naxes[1]);
345
346 // Return image pixel
347 return m_pixels[offset];
348}
349
350
351/***********************************************************************//**
352 * @brief 4D image pixel access operator
353 *
354 * @param[in] ix Pixel index in first dimension (starting from 0).
355 * @param[in] iy Pixel index in second dimension (starting from 0).
356 * @param[in] iz Pixel index in third dimension (starting from 0).
357 * @param[in] it Pixel index in forth dimension (starting from 0).
358 *
359 * Provides access to a pixel of a 4D image. No range checking or image
360 * dimension verification is performed. Use the at(ix,iy) method if range
361 * checking and image dimension verification is required.
362 ***************************************************************************/
363short& GFitsImageShort::operator()(const int& ix, const int& iy,
364 const int& iz, const int& it)
365{
366 // Load data
367 load_data();
368
369 // Calculate pixel offset
370 int offset = ix + m_naxes[0] * (iy + m_naxes[1] * (iz + it * m_naxes[2]));
371
372 // Return image pixel
373 return m_pixels[offset];
374}
375
376
377/***********************************************************************//**
378 * @brief Image pixel access operator (const variant)
379 *
380 * @param[in] ix Pixel index (starting from 0).
381 *
382 * Provides access to an image pixel. No range checking is performed.
383 * Use the at(ix) method if range checking is required.
384 ***************************************************************************/
385const short& GFitsImageShort::operator()(const int& ix) const
386{
387 // Load data
388 load_data();
389
390 // Return image pixel
391 return m_pixels[ix];
392}
393
394
395/***********************************************************************//**
396 * @brief 2D image pixel access operator (const variant)
397 *
398 * @param[in] ix Pixel index in first dimension (starting from 0).
399 * @param[in] iy Pixel index in second dimension (starting from 0).
400 *
401 * Provides access to a pixel of a 2D image. No range checking or image
402 * dimension verification is performed. Use the at(ix,iy) method if range
403 * checking and image dimension verification is required.
404 ***************************************************************************/
405const short& GFitsImageShort::operator()(const int& ix, const int& iy) const
406{
407 // Load data
408 load_data();
409
410 // Calculate pixel offset
411 int offset = ix + iy * m_naxes[0];
412
413 // Return image pixel
414 return m_pixels[offset];
415}
416
417
418/***********************************************************************//**
419 * @brief 3D image pixel access operator (const variant)
420 *
421 * @param[in] ix Pixel index in first dimension (starting from 0).
422 * @param[in] iy Pixel index in second dimension (starting from 0).
423 * @param[in] iz Pixel index in third dimension (starting from 0).
424 *
425 * Provides access to a pixel of a 3D image. No range checking or image
426 * dimension verification is performed. Use the at(ix,iy) method if range
427 * checking and image dimension verification is required.
428 ***************************************************************************/
429const short& GFitsImageShort::operator()(const int& ix, const int& iy,
430 const int& iz) const
431{
432 // Load data
433 load_data();
434
435 // Calculate pixel offset
436 int offset = ix + m_naxes[0] * (iy + iz * m_naxes[1]);
437
438 // Return image pixel
439 return m_pixels[offset];
440}
441
442
443/***********************************************************************//**
444 * @brief 4D image pixel access operator (const variant)
445 *
446 * @param[in] ix Pixel index in first dimension (starting from 0).
447 * @param[in] iy Pixel index in second dimension (starting from 0).
448 * @param[in] iz Pixel index in third dimension (starting from 0).
449 * @param[in] it Pixel index in forth dimension (starting from 0).
450 *
451 * Provides access to a pixel of a 4D image. No range checking or image
452 * dimension verification is performed. Use the at(ix,iy) method if range
453 * checking and image dimension verification is required.
454 ***************************************************************************/
455const short& GFitsImageShort::operator()(const int& ix, const int& iy,
456 const int& iz, const int& it) const
457{
458 // Load data
459 load_data();
460
461 // Calculate pixel offset
462 int offset = ix + m_naxes[0] * (iy + m_naxes[1] * (iz + it * m_naxes[2]));
463
464 // Return image pixel
465 return m_pixels[offset];
466}
467
468
469/*==========================================================================
470 = =
471 = Public methods =
472 = =
473 ==========================================================================*/
474
475/***********************************************************************//**
476 * @brief Clear instance
477 *
478 * This method properly resets the object to an initial state.
479 ***************************************************************************/
481{
482 // Free class members (base and derived classes, derived class first)
483 free_members();
486
487 // Initialise members
490 init_members();
491
492 // Return
493 return;
494}
495
496
497/***********************************************************************//**
498 * @brief Clone FITS image
499 *
500 * Cloning provides a copy of the FITS file. Cloning is used to allocate
501 * derived classes into a base class pointer.
502 ***************************************************************************/
504{
505 // Clone this image
506 return new GFitsImageShort(*this);
507}
508
509
510/***********************************************************************//**
511 * @brief Image pixel access operator
512 *
513 * @param[in] ix Pixel index (starting from 0).
514 *
515 * Provides access to a pixel of an image including range checking. Note that
516 * this method does not necessarily restrict do 1D images but generally
517 * applies to all image dimensions.
518 ***************************************************************************/
519short& GFitsImageShort::at(const int& ix)
520{
521 // Load data
522 load_data();
523
524 // Return image pixel
525 return (m_pixels[offset(ix)]);
526}
527
528
529/***********************************************************************//**
530 * @brief 2D image pixel access operator
531 *
532 * @param[in] ix Pixel index in first dimension (starting from 0).
533 * @param[in] iy Pixel index in second dimension (starting from 0).
534 *
535 * Provides access to a pixel of an image including range checking.
536 ***************************************************************************/
537short& GFitsImageShort::at(const int& ix, const int& iy)
538{
539 // Load data
540 load_data();
541
542 // Return image pixel
543 return (m_pixels[offset(ix,iy)]);
544}
545
546
547/***********************************************************************//**
548 * @brief 3D image pixel access operator
549 *
550 * @param[in] ix Pixel index in first dimension (starting from 0).
551 * @param[in] iy Pixel index in second dimension (starting from 0).
552 * @param[in] iz Pixel index in third dimension (starting from 0).
553 *
554 * Provides access to a pixel of an image including range checking.
555 ***************************************************************************/
556short& GFitsImageShort::at(const int& ix, const int& iy, const int& iz)
557{
558 // Load data
559 load_data();
560
561 // Return image pixel
562 return (m_pixels[offset(ix,iy,iz)]);
563}
564
565
566/***********************************************************************//**
567 * @brief 4D image pixel access operator
568 *
569 * @param[in] ix Pixel index in first dimension (starting from 0).
570 * @param[in] iy Pixel index in second dimension (starting from 0).
571 * @param[in] iz Pixel index in third dimension (starting from 0).
572 * @param[in] it Pixel index in forth dimension (starting from 0).
573 *
574 * Provides access to a pixel of an image including range checking.
575 ***************************************************************************/
576short& GFitsImageShort::at(const int& ix, const int& iy, const int& iz,
577 const int& it)
578{
579 // Load data
580 load_data();
581
582 // Return image pixel
583 return (m_pixels[offset(ix,iy,iz,it)]);
584}
585
586
587/***********************************************************************//**
588 * @brief Image pixel access operator (const variant)
589 *
590 * @param[in] ix Pixel index (starting from 0).
591 *
592 * Provides access to a pixel of an image including range checking.
593 ***************************************************************************/
594const short& GFitsImageShort::at(const int& ix) const
595{
596 // Load data
597 load_data();
598
599 // Return image pixel
600 return (m_pixels[offset(ix)]);
601}
602
603
604/***********************************************************************//**
605 * @brief 2D image pixel access operator (const variant)
606 *
607 * @param[in] ix Pixel index in first dimension (starting from 0).
608 * @param[in] iy Pixel index in second dimension (starting from 0).
609 *
610 * Provides access to a pixel of an image including range checking.
611 ***************************************************************************/
612const short& GFitsImageShort::at(const int& ix, const int& iy) const
613{
614 // Load data
615 load_data();
616
617 // Return image pixel
618 return (m_pixels[offset(ix,iy)]);
619}
620
621
622/***********************************************************************//**
623 * @brief 3D image pixel access operator (const variant)
624 *
625 * @param[in] ix Pixel index in first dimension (starting from 0).
626 * @param[in] iy Pixel index in second dimension (starting from 0).
627 * @param[in] iz Pixel index in third dimension (starting from 0).
628 *
629 * Provides access to a pixel of an image including range checking.
630 ***************************************************************************/
631const short& GFitsImageShort::at(const int& ix, const int& iy,
632 const int& iz) const
633{
634 // Load data
635 load_data();
636
637 // Return image pixel
638 return (m_pixels[offset(ix,iy,iz)]);
639}
640
641
642/***********************************************************************//**
643 * @brief 4D image pixel access operator (const variant)
644 *
645 * @param[in] ix Pixel index in first dimension (starting from 0).
646 * @param[in] iy Pixel index in second dimension (starting from 0).
647 * @param[in] iz Pixel index in third dimension (starting from 0).
648 * @param[in] it Pixel index in forth dimension (starting from 0).
649 *
650 * Provides access to a pixel of an image including range checking.
651 ***************************************************************************/
652const short& GFitsImageShort::at(const int& ix, const int& iy,
653 const int& iz, const int& it) const
654{
655 // Load data
656 load_data();
657
658 // Return image pixel
659 return (m_pixels[offset(ix,iy,iz,it)]);
660}
661
662
663/***********************************************************************//**
664 * @brief Return value of image pixel
665 *
666 * @param[in] ix Pixel index (starting from 0).
667 *
668 * Returns the value of an image pixel as double precision floating point
669 * value. This method performs range checking.
670 ***************************************************************************/
671double GFitsImageShort::pixel(const int& ix) const
672{
673 // Return pixel value
674 return (double(this->at(ix)));
675}
676
677
678/***********************************************************************//**
679 * @brief Return value of image pixel (2D version)
680 *
681 * @param[in] ix Pixel index in first dimension (starting from 0).
682 * @param[in] iy Pixel index in second dimension (starting from 0).
683 *
684 * Returns the value of an image pixel as double precision floating point
685 * value. This method performs range checking.
686 ***************************************************************************/
687double GFitsImageShort::pixel(const int& ix, const int& iy) const
688{
689 // Return pixel value
690 return (double(this->at(ix,iy)));
691}
692
693
694/***********************************************************************//**
695 * @brief Return value of image pixel (3D version)
696 *
697 * @param[in] ix Pixel index in first dimension (starting from 0).
698 * @param[in] iy Pixel index in second dimension (starting from 0).
699 * @param[in] iz Pixel index in third dimension (starting from 0).
700 *
701 * Returns the value of an image pixel as double precision floating point
702 * value. This method performs range checking.
703 ***************************************************************************/
704double GFitsImageShort::pixel(const int& ix, const int& iy, const int& iz) const
705{
706 // Return pixel value
707 return (double(this->at(ix,iy,iz)));
708}
709
710
711/***********************************************************************//**
712 * @brief Return value of image pixel (4D version)
713 *
714 * @param[in] ix Pixel index in first dimension (starting from 0).
715 * @param[in] iy Pixel index in second dimension (starting from 0).
716 * @param[in] iz Pixel index in third dimension (starting from 0).
717 * @param[in] it Pixel index in forth dimension (starting from 0).
718 *
719 * Returns the value of an image pixel as double precision floating point
720 * value. This method performs range checking.
721 ***************************************************************************/
722double GFitsImageShort::pixel(const int& ix, const int& iy, const int& iz,
723 const int& it) const
724{
725 // Return pixel value
726 return (double(this->at(ix,iy,iz,it)));
727}
728
729
730/***********************************************************************//**
731 * @brief Return pointer to image pixel
732 ***************************************************************************/
734{
735 // Load data
736 load_data();
737
738 // Return
739 return m_pixels;
740}
741
742
743/***********************************************************************//**
744 * @brief Return image type
745 ***************************************************************************/
747{
748 // Return type
749 return __TSHORT;
750}
751
752
753/*==========================================================================
754 = =
755 = Private methods =
756 = =
757 ==========================================================================*/
758
759/***********************************************************************//**
760 * @brief Initialise class members
761 ***************************************************************************/
763{
764 // Initialise members
766 m_pixels = NULL;
767 m_nulval = NULL;
768
769 // Return
770 return;
771}
772
773
774/***********************************************************************//**
775 * @brief Copy class members
776 *
777 * @param image FITS image to copy
778 *
779 * Copy class members. If the pixel array is linked the pointer to the array
780 * is copied. Otherwise a copy of the image pixels will be created.
781 ***************************************************************************/
783{
784 // Fetch column data if not yet fetched. The casting circumvents the
785 // const correctness
786 bool not_loaded = (image.m_pixels == NULL);
787 if (not_loaded) {
788 const_cast<GFitsImageShort*>(&image)->fetch_data();
789 }
790
791 // Copy pixels
792 if (m_num_pixels > 0 && image.m_pixels != NULL) {
793 m_pixels = new short[m_num_pixels];
794 for (int i = 0; i < m_num_pixels; ++i) {
795 m_pixels[i] = image.m_pixels[i];
796 }
797 }
798
799 // Copy NULL value
800 alloc_nulval(image.m_nulval);
801
802 // Small memory option: release column if it was fetch above
803 #if defined(G_SMALL_MEMORY)
804 if (not_loaded) {
805 const_cast<GFitsImageShort*>(&image)->release_data();
806 }
807 #endif
808
809 // Return
810 return;
811}
812
813
814/***********************************************************************//**
815 * @brief Delete class members
816 ***************************************************************************/
818{
819 // Free memory
820 if (m_pixels != NULL) delete [] m_pixels;
821 if (m_nulval != NULL) delete m_nulval;
822
823 // Mark memory as free
824 m_pixels = NULL;
825 m_nulval = NULL;
826
827 // Return
828 return;
829}
830
831
832/***********************************************************************//**
833 * @brief Allocate data
834 ***************************************************************************/
836{
837 // Release any existing data
838 release_data();
839
840 // Allocate new data
841 if (m_num_pixels > 0) {
842 m_pixels = new short[m_num_pixels];
843 }
844
845 // Return
846 return;
847}
848
849
850/***********************************************************************//**
851 * @brief Initialise data
852 ***************************************************************************/
854{
855 // Initialise data if they exist
856 if (m_pixels != NULL) {
857 for (int i = 0; i < m_num_pixels; ++i) {
858 m_pixels[i] = 0;
859 }
860 }
861
862 // Return
863 return;
864}
865
866
867/***********************************************************************//**
868 * @brief Release data
869 ***************************************************************************/
871{
872 // Free any existing memory
873 if (m_pixels != NULL) delete [] m_pixels;
874
875 // Mark pointer as free
876 m_pixels = NULL;
877
878 // Return
879 return;
880}
881
882
883/***********************************************************************//**
884 * @brief Construct data from array
885 *
886 * @param[in] pixels Optional pointer to pixel array.
887 *
888 * Initialise pixel data from an optional pixel array. If the pointer is
889 * NULL the image is simply initialised. This method supports all
890 * constructors.
891 ***************************************************************************/
892void GFitsImageShort::construct_data(const short* pixels)
893{
894 // If there are pixels then allocate array
895 if (m_num_pixels > 0) {
896
897 // Allocate data
898 alloc_data();
899
900 // If no pixel array has been specified then simply initialise data
901 if (pixels == NULL) {
902 init_data();
903 }
904
905 // ... otherwise copy pixels
906 else {
907 for (int i = 0; i < m_num_pixels; ++i) {
908 m_pixels[i] = pixels[i];
909 }
910 }
911
912 } // endif: there are pixels in image
913
914 // Return
915 return;
916}
917
918
919/***********************************************************************//**
920 * @brief Load data
921 *
922 * Load the image data if no pixels have been allocated.
923 ***************************************************************************/
925{
926 // If image pixels are not available then fetch them now.
927 if (m_pixels == NULL) {
928 const_cast<GFitsImageShort*>(this)->fetch_data();
929 }
930
931 // Return
932 return;
933}
934
935
936/***********************************************************************//**
937 * @brief Allocates nul value
938 *
939 * @param[in] value Nul value.
940 ***************************************************************************/
941void GFitsImageShort::alloc_nulval(const void* value)
942{
943 // Free any existing memory
944 if (m_nulval != NULL) delete m_nulval;
945
946 // Mark pointer as free
947 m_nulval = NULL;
948
949 // If we have valid value, allocate and set nul value
950 if (value != NULL) {
951 m_nulval = new short;
952 *m_nulval = *((short*)value);
953 }
954
955 // Return
956 return;
957}
Exception handler interface definition.
CFITSIO interface header.
#define __TSHORT
#define G_BITPIX
Defines the number of bits per pixel.
#define G_BITPIX
Defines the number of bits per pixel.
Short integer FITS image class definition.
void free_members(void)
Delete class members.
Definition GFitsHDU.cpp:505
void init_members(void)
Initialise class members.
Definition GFitsHDU.cpp:462
GFitsHeaderCard & card(const int &cardno)
Return header card.
Definition GFitsHDU.hpp:259
void value(const std::string &value)
Set string value of header card.
Short integer FITS image class.
short * m_nulval
NULL value.
short * m_pixels
Pixels.
GFitsImageShort(void)
Void constructor.
void load_data(void) const
Load data.
void release_data(void)
Release data.
void copy_members(const GFitsImageShort &image)
Copy class members.
void init_data(void)
Initialise data.
int type(void) const
Return image type.
void alloc_data(void)
Allocate data.
void alloc_nulval(const void *value)
Allocates nul value.
GFitsImageShort * clone(void) const
Clone FITS image.
void construct_data(const short *pixels)
Construct data from array.
double pixel(const int &ix) const
Return value of image pixel.
short & operator()(const int &ix)
Image pixel access operator.
void clear(void)
Clear instance.
void * pixels(void)
Return pointer to image pixel.
short & at(const int &ix)
Image pixel access operator.
void init_members(void)
Initialise class members.
void free_members(void)
Delete class members.
virtual ~GFitsImageShort(void)
Destructor.
GFitsImageShort & operator=(const GFitsImageShort &image)
Assignment operator.
Abstract FITS image base class.
virtual double pixel(const int &ix) const =0
int offset(const int &ix) const
Return pixel offset.
void free_members(void)
Delete class members.
void fetch_data(void)
Fetch image pixels.
long * m_naxes
Number of pixels in each dimension.
int m_bitpix
Number of Bits/pixel.
int m_num_pixels
Number of image pixels.
GFitsImage & operator=(const GFitsImage &image)
Assignment operator.
void init_members(void)
Initialise class members.