Commit ddd6fc57c9d861b16524c3d4ced6a9f3f6623f7b
1 parent
c6e06afb
Revise GFitsTable class interface.
A major revision of the GFitsTable class interface has been done, making it more similar to the interface of other container classes. In particular, the column access operator now returns a pointer instead of a reference, preventing code slicing. The set() method has been introduced to set columns in a table. The append_column() and insert_column() methods have been renamed to append() and insert() as they act on columns, and a table is a column container. Some arguments or return values are now also declared as const references. A size() method has been added that return the number of table columns. As the GFitsTable class is widely used throughout GammaLib, a number of classes had to be adapted to this new interface.
Showing
27 changed files
with
543 additions
and
365 deletions
NEWS
| @@ -102,6 +102,12 @@ GOptimizer & GOptimizerLM | @@ -102,6 +102,12 @@ GOptimizer & GOptimizerLM | ||
| 102 | The optimization operators have been removed and replaced by the | 102 | The optimization operators have been removed and replaced by the |
| 103 | optimize method. | 103 | optimize method. |
| 104 | 104 | ||
| 105 | +GFitsTable | ||
| 106 | + The column table operator[] now returns a pointer instead of a | ||
| 107 | + reference. Set set() method has been added for column setting. | ||
| 108 | + The append_column() and insert_column() methods have been | ||
| 109 | + renamed to append() and insert(). | ||
| 110 | + | ||
| 105 | All GammaLib constants, defined in GTools.hpp, and functions are now | 111 | All GammaLib constants, defined in GTools.hpp, and functions are now |
| 106 | put in the gammalib namespace to avoid name clashes. Mathematical | 112 | put in the gammalib namespace to avoid name clashes. Mathematical |
| 107 | constants and functions have been moved to a new model named GMath. | 113 | constants and functions have been moved to a new model named GMath. |
doc/source/user_manual/modules/fits.rst
| 1 | -.. _sec_fits: FITS file interface ------------------- Overview ~~~~~~~~ :ref:`fig_uml_fits` present an overview over the C++ classes of the FITS module and their relations. .. _fig_uml_fits: .. figure:: uml_fits.png :width: 100% FITS module The FITS module provides a high-level interface to FITS files. The module is based on the cfitsio library for file access. The C++ classes of the module implement a logical representation of the FITS file in memory that can be handled independently of the file representation on disk. The central class of the FITS module is the ``GFits`` class that represents a FITS file. The class is a container for classes derived from the abstract ``GFitsHDU`` base class which represents a FITS extension (also called Header-Data Unit, HDU). Each extension is composed of one header, implemented by the ``GFitsHeader`` class and one data unit. The header is composed of cards representing the meta-data of the fits file. The cards are implemented by the ``GFitsHeaderCard`` class. The data unit is either an image, represented by the abstract ``GFitsImage`` base class, or a table, represented by the abstract ``GFitsTable`` base class. The image can be stored in various data types, each of which is implemented by a specific class derived from ``GFitsImage``. The table can be either an ASCII table, implemented by the ``GFitsASCIITable`` class or a binary table, implemented by the ``GFitsBinTable`` class. Each table is comprised of columns, represented by the abstract ``GFitsTableCol`` base class. This class is the same for ASCII and binary tables. Similar to images, table column data can be stored in a variety of data types, each of which is implemented by a specific class derived from ``GFitsTableCol``. Creating a FITS file ~~~~~~~~~~~~~~~~~~~~ The following example illustrates the creation of a FITS file comprising one image and one table (see ``examples/createfits.cpp`` for the source code; the line numbers are for reference and are not part of the source code):: 1 GFits fits; 2 GFitsImageDouble image(20,10); 3 for (int x = 0; x < 20; ++x) { 4 for (int y = 0; y < 10; ++y) { 5 image(x,y) = x+100.0*y; 6 } 7 } 8 fits.append(image); 9 GFitsBinTable table; 10 GFitsTableDoubleCol column("ENERGY", 10, 3); 11 for (int row = 0; row < 10; ++row) { 12 for (int index = 0; index < 3; ++index) { 13 column(row, index) = row*100.0+index; 14 } 15 } 16 table.append_column(column); 17 fits.append(table); 18 fits.saveto("my_fits_file.fits", true); 19 fits.close(); In line 1, a FITS object is allocated in memory. An image is created in line 2, comprising 20 pixels in the x-direction and 10 pixels in the y-direction, each pixel being a double precision value. Lines 3-7 fill the image by a nested loop over all pixels. The image is then appended to the FITS object in line 8. In line 9, a binary table is created. A column comprising double precision values is created in line 10. The name of the column is set to ``ENERGY``, and comprises 10 rows, each of which is composed of a 3-element vector. This so-called vector column is filled by the nested loop in lines 11-15. In line 16, the column is appended to the binary table, which in turn is appended to the FITS object in line 17. In line 18, the FITS object is saved into the file ``my_fits_file.fits``. The (optional) argument ``true`` indicates that any existing file with the same name will be overwritten (by default, an attempt to overwrite an existing file will lead to an exception, hence if overwriting is desired it has to be explicitly specified). In line 19, the FITS object is closed, implying that all memory related to the object is deallocated. Note that saving of a FITS object does not close the object itself; it continues to exist in memory and can be manipulated further, independently of the FITS file on disk. Line 19 could however be omitted, as a FITS object is automatically closed upon destruction of the object. Note also that up to line 17, the FITS object only exists in memory. The FITS file on disk is only created in line 18. Alternatively, one could have written:: 1 GFits fits("my_fits_file.fits", true); ... 18 fits.save(true); Here, the FITS file on disk is created in line 1. The (optional) ``true`` argument specifies that the FITS file should be created if it does not yet exist. By default, this argument is set to ``false``, and an exception is raised when creating the ``GFits`` object. If a file exists already, line 1 will in fact open the file, and lines 2-17 will add an image and a table *in addition* to the image and table that exists already in the file. Line 1 is in fact identical to:: GFits fits; fits.open("my_fits_file.fits", true); hence it creates an instance of the ``GFits`` object and then opens the file ``my_fits_file.fits``. Line 18 then saves the FITS file taking into account the modifications that have been made. Note that only at this point the modifications will be written to disk. The ``save`` method does not take any filename as it saves a file that has been opened before. It takes however the (optional) clobber flag that specifies whether a file should be overwritten or not (as for the ``saveto`` method this flag is set to ``false`` by default). Note that one can also combine file opening with the ``saveto`` method to create a copy of the FITS file. Specifying:: 1 GFits fits("my_fits_file.fits", true); ... 18 fits.saveto("my_fits_file2.fits", true); will open the file ``my_fits_file.fits`` and save the FITS object after the manipulations of line 2-17 into the file ``my_fits_file2.fits``. A final word on the ``append`` and ``append_column`` methods that are used in the example to append the image and tables to the FITS object, and the column to the binary table. These methods will append a *copy* of the object to the FITS object, hence after appending, any manipulations on the original object will not be reflected in the FITS object. If an object should be manipulated after it has been appended, a pointer to the object has to be retrieved from the FITS object using:: GFitsImage* image = fits.image(0); GFitsTable* table = fits.table(1); GFitsTableCol* column = (*table)["ENERGY"]; For reference, a screen capture of the FITS file that is created by the above example is shown below. .. _fig_fits_example: .. figure:: fits_example.png :width: 100% FITS file example | ||
| 2 | \ No newline at end of file | 1 | \ No newline at end of file |
| 2 | +.. _sec_fits: FITS file interface ------------------- Overview ~~~~~~~~ :ref:`fig_uml_fits` present an overview over the C++ classes of the FITS module and their relations. .. _fig_uml_fits: .. figure:: uml_fits.png :width: 100% FITS module The FITS module provides a high-level interface to FITS files. The module is based on the cfitsio library for file access. The C++ classes of the module implement a logical representation of the FITS file in memory that can be handled independently of the file representation on disk. The central class of the FITS module is the ``GFits`` class that represents a FITS file. The class is a container for classes derived from the abstract ``GFitsHDU`` base class which represents a FITS extension (also called Header-Data Unit, HDU). Each extension is composed of one header, implemented by the ``GFitsHeader`` class and one data unit. The header is composed of cards representing the meta-data of the fits file. The cards are implemented by the ``GFitsHeaderCard`` class. The data unit is either an image, represented by the abstract ``GFitsImage`` base class, or a table, represented by the abstract ``GFitsTable`` base class. The image can be stored in various data types, each of which is implemented by a specific class derived from ``GFitsImage``. The table can be either an ASCII table, implemented by the ``GFitsASCIITable`` class or a binary table, implemented by the ``GFitsBinTable`` class. Each table is comprised of columns, represented by the abstract ``GFitsTableCol`` base class. This class is the same for ASCII and binary tables. Similar to images, table column data can be stored in a variety of data types, each of which is implemented by a specific class derived from ``GFitsTableCol``. Creating a FITS file ~~~~~~~~~~~~~~~~~~~~ The following example illustrates the creation of a FITS file comprising one image and one table (see ``examples/createfits.cpp`` for the source code; the line numbers are for reference and are not part of the source code):: 1 GFits fits; 2 GFitsImageDouble image(20,10); 3 for (int x = 0; x < 20; ++x) { 4 for (int y = 0; y < 10; ++y) { 5 image(x,y) = x+100.0*y; 6 } 7 } 8 fits.append(image); 9 GFitsBinTable table; 10 GFitsTableDoubleCol column("ENERGY", 10, 3); 11 for (int row = 0; row < 10; ++row) { 12 for (int index = 0; index < 3; ++index) { 13 column(row, index) = row*100.0+index; 14 } 15 } 16 table.append(column); 17 fits.append(table); 18 fits.saveto("my_fits_file.fits", true); 19 fits.close(); In line 1, a FITS object is allocated in memory. An image is created in line 2, comprising 20 pixels in the x-direction and 10 pixels in the y-direction, each pixel being a double precision value. Lines 3-7 fill the image by a nested loop over all pixels. The image is then appended to the FITS object in line 8. In line 9, a binary table is created. A column comprising double precision values is created in line 10. The name of the column is set to ``ENERGY``, and comprises 10 rows, each of which is composed of a 3-element vector. This so-called vector column is filled by the nested loop in lines 11-15. In line 16, the column is appended to the binary table, which in turn is appended to the FITS object in line 17. In line 18, the FITS object is saved into the file ``my_fits_file.fits``. The (optional) argument ``true`` indicates that any existing file with the same name will be overwritten (by default, an attempt to overwrite an existing file will lead to an exception, hence if overwriting is desired it has to be explicitly specified). In line 19, the FITS object is closed, implying that all memory related to the object is deallocated. Note that saving of a FITS object does not close the object itself; it continues to exist in memory and can be manipulated further, independently of the FITS file on disk. Line 19 could however be omitted, as a FITS object is automatically closed upon destruction of the object. Note also that up to line 17, the FITS object only exists in memory. The FITS file on disk is only created in line 18. Alternatively, one could have written:: 1 GFits fits("my_fits_file.fits", true); ... 18 fits.save(true); Here, the FITS file on disk is created in line 1. The (optional) ``true`` argument specifies that the FITS file should be created if it does not yet exist. By default, this argument is set to ``false``, and an exception is raised when creating the ``GFits`` object. If a file exists already, line 1 will in fact open the file, and lines 2-17 will add an image and a table *in addition* to the image and table that exists already in the file. Line 1 is in fact identical to:: GFits fits; fits.open("my_fits_file.fits", true); hence it creates an instance of the ``GFits`` object and then opens the file ``my_fits_file.fits``. Line 18 then saves the FITS file taking into account the modifications that have been made. Note that only at this point the modifications will be written to disk. The ``save`` method does not take any filename as it saves a file that has been opened before. It takes however the (optional) clobber flag that specifies whether a file should be overwritten or not (as for the ``saveto`` method this flag is set to ``false`` by default). Note that one can also combine file opening with the ``saveto`` method to create a copy of the FITS file. Specifying:: 1 GFits fits("my_fits_file.fits", true); ... 18 fits.saveto("my_fits_file2.fits", true); will open the file ``my_fits_file.fits`` and save the FITS object after the manipulations of line 2-17 into the file ``my_fits_file2.fits``. A final word on the ``append`` methods that are used in the example to append the image and tables to the FITS object, and the column to the binary table. These methods will append a *copy* of the object to the FITS object, hence after appending, any manipulations on the original object will not be reflected in the FITS object. If an object should be manipulated after it has been appended, a pointer to the object has to be retrieved from the FITS object using:: GFitsImage* image = fits.image(0); GFitsTable* table = fits.table(1); GFitsTableCol* column = (*table)["ENERGY"]; For reference, a screen capture of the FITS file that is created by the above example is shown below. .. _fig_fits_example: .. figure:: fits_example.png :width: 100% FITS file example | ||
| 3 | \ No newline at end of file | 3 | \ No newline at end of file |
examples/cpp/createfits/createfits.cpp
| @@ -57,7 +57,7 @@ int main(void) { | @@ -57,7 +57,7 @@ int main(void) { | ||
| 57 | column(row, index) = row*100.0+index; | 57 | column(row, index) = row*100.0+index; |
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | - table.append_column(column); | 60 | + table.append(column); |
| 61 | 61 | ||
| 62 | // Append table to FITS object | 62 | // Append table to FITS object |
| 63 | fits.append(table); | 63 | fits.append(table); |
include/GFitsTable.hpp
| @@ -41,23 +41,23 @@ | @@ -41,23 +41,23 @@ | ||
| 41 | * is a collection of columns with an identical number of rows. This class | 41 | * is a collection of columns with an identical number of rows. This class |
| 42 | * provides high level access to table columns. | 42 | * provides high level access to table columns. |
| 43 | * | 43 | * |
| 44 | - * @todo Implement remove_column method | 44 | + * @todo Implement remove() method |
| 45 | ***************************************************************************/ | 45 | ***************************************************************************/ |
| 46 | class GFitsTable : public GFitsHDU { | 46 | class GFitsTable : public GFitsHDU { |
| 47 | 47 | ||
| 48 | public: | 48 | public: |
| 49 | // Constructors and destructors | 49 | // Constructors and destructors |
| 50 | GFitsTable(void); | 50 | GFitsTable(void); |
| 51 | - explicit GFitsTable(int nrows); | 51 | + explicit GFitsTable(const int& nrows); |
| 52 | GFitsTable(const GFitsTable& table); | 52 | GFitsTable(const GFitsTable& table); |
| 53 | virtual ~GFitsTable(void); | 53 | virtual ~GFitsTable(void); |
| 54 | 54 | ||
| 55 | // Operators | 55 | // Operators |
| 56 | GFitsTable& operator=(const GFitsTable& table); | 56 | GFitsTable& operator=(const GFitsTable& table); |
| 57 | - GFitsTableCol& operator[](const int& colnum); | ||
| 58 | - const GFitsTableCol& operator[](const int& colnum) const; | ||
| 59 | - GFitsTableCol& operator[](const std::string& colname); | ||
| 60 | - const GFitsTableCol& operator[](const std::string& colname) const; | 57 | + GFitsTableCol* operator[](const int& colnum); |
| 58 | + const GFitsTableCol* operator[](const int& colnum) const; | ||
| 59 | + GFitsTableCol* operator[](const std::string& colname); | ||
| 60 | + const GFitsTableCol* operator[](const std::string& colname) const; | ||
| 61 | 61 | ||
| 62 | // Pure virtual methods | 62 | // Pure virtual methods |
| 63 | virtual void clear(void) = 0; | 63 | virtual void clear(void) = 0; |
| @@ -65,15 +65,19 @@ public: | @@ -65,15 +65,19 @@ public: | ||
| 65 | virtual HDUType exttype(void) const = 0; | 65 | virtual HDUType exttype(void) const = 0; |
| 66 | 66 | ||
| 67 | // Implemented Methods | 67 | // Implemented Methods |
| 68 | - void append_column(GFitsTableCol& column); | ||
| 69 | - void insert_column(int colnum, GFitsTableCol& column); | ||
| 70 | - void append_rows(const int& nrows); | ||
| 71 | - void insert_rows(const int& rownum, const int& nrows); | ||
| 72 | - void remove_rows(const int& rownum, const int& nrows); | ||
| 73 | - int nrows(void) const; | ||
| 74 | - int ncols(void) const; | ||
| 75 | - bool hascolumn(const std::string& colname) const; | ||
| 76 | - std::string print(const GChatter& chatter = NORMAL) const; | 68 | + const int& size(void) const; |
| 69 | + GFitsTableCol* set(const int& colnum, const GFitsTableCol& column); | ||
| 70 | + GFitsTableCol* set(const std::string& colname, const GFitsTableCol& column); | ||
| 71 | + GFitsTableCol* append(const GFitsTableCol& column); | ||
| 72 | + GFitsTableCol* insert(int colnum, const GFitsTableCol& column); | ||
| 73 | + GFitsTableCol* insert(const std::string& colname, const GFitsTableCol& column); | ||
| 74 | + void append_rows(const int& nrows); | ||
| 75 | + void insert_rows(const int& row, const int& nrows); | ||
| 76 | + void remove_rows(const int& row, const int& nrows); | ||
| 77 | + const int& nrows(void) const; | ||
| 78 | + const int& ncols(void) const; | ||
| 79 | + bool hascolumn(const std::string& colname) const; | ||
| 80 | + std::string print(const GChatter& chatter = NORMAL) const; | ||
| 77 | 81 | ||
| 78 | protected: | 82 | protected: |
| 79 | // Protected methods | 83 | // Protected methods |
| @@ -98,6 +102,64 @@ private: | @@ -98,6 +102,64 @@ private: | ||
| 98 | // Private methods | 102 | // Private methods |
| 99 | GFitsTableCol* alloc_column(int typecode) const; | 103 | GFitsTableCol* alloc_column(int typecode) const; |
| 100 | GFitsTableCol* ptr_column(const std::string& colname) const; | 104 | GFitsTableCol* ptr_column(const std::string& colname) const; |
| 105 | + int colnum(const std::string& colname) const; | ||
| 101 | }; | 106 | }; |
| 102 | 107 | ||
| 108 | + | ||
| 109 | +/***********************************************************************//** | ||
| 110 | + * @brief Return number of columns in table | ||
| 111 | + * | ||
| 112 | + * @return Number of columns in table | ||
| 113 | + * | ||
| 114 | + * Returns the number of columns in table. This method is equivalent to the | ||
| 115 | + * ncols() method. | ||
| 116 | + ***************************************************************************/ | ||
| 117 | +inline | ||
| 118 | +const int& GFitsTable::size(void) const | ||
| 119 | +{ | ||
| 120 | + return m_cols; | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | + | ||
| 124 | +/***********************************************************************//** | ||
| 125 | + * @brief Return number of rows in table | ||
| 126 | + * | ||
| 127 | + * @return Number of rows in table | ||
| 128 | + * | ||
| 129 | + * Returns the number of rows in table. | ||
| 130 | + ***************************************************************************/ | ||
| 131 | +inline | ||
| 132 | +const int& GFitsTable::nrows(void) const | ||
| 133 | +{ | ||
| 134 | + return m_rows; | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | + | ||
| 138 | +/***********************************************************************//** | ||
| 139 | + * @brief Return number of columns in table | ||
| 140 | + * | ||
| 141 | + * @return Number of columns in table | ||
| 142 | + * | ||
| 143 | + * Returns the number of columns in table. This method is equivalent to the | ||
| 144 | + * size() method. | ||
| 145 | + ***************************************************************************/ | ||
| 146 | +inline | ||
| 147 | +const int& GFitsTable::ncols(void) const | ||
| 148 | +{ | ||
| 149 | + return m_cols; | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | + | ||
| 153 | +/***********************************************************************//** | ||
| 154 | + * @brief Append column to the table | ||
| 155 | + * | ||
| 156 | + * @param[in] column Table column. | ||
| 157 | + * @return Pointer to table column that has been appended | ||
| 158 | + ***************************************************************************/ | ||
| 159 | +inline | ||
| 160 | +GFitsTableCol* GFitsTable::append(const GFitsTableCol& column) | ||
| 161 | +{ | ||
| 162 | + return (insert(m_cols, column)); | ||
| 163 | +} | ||
| 164 | + | ||
| 103 | #endif /* GFITSTABLE_HPP */ | 165 | #endif /* GFITSTABLE_HPP */ |
inst/cta/src/GCTAAeffArf.cpp
| @@ -306,9 +306,9 @@ void GCTAAeffArf::read_arf(const GFitsTable* hdu) | @@ -306,9 +306,9 @@ void GCTAAeffArf::read_arf(const GFitsTable* hdu) | ||
| 306 | m_aeff.clear(); | 306 | m_aeff.clear(); |
| 307 | 307 | ||
| 308 | // Get pointers to table columns | 308 | // Get pointers to table columns |
| 309 | - const GFitsTableCol* energy_lo = &(*hdu)["ENERG_LO"]; | ||
| 310 | - const GFitsTableCol* energy_hi = &(*hdu)["ENERG_HI"]; | ||
| 311 | - const GFitsTableCol* specresp = &(*hdu)["SPECRESP"]; | 309 | + const GFitsTableCol* energy_lo = (*hdu)["ENERG_LO"]; |
| 310 | + const GFitsTableCol* energy_hi = (*hdu)["ENERG_HI"]; | ||
| 311 | + const GFitsTableCol* specresp = (*hdu)["SPECRESP"]; | ||
| 312 | 312 | ||
| 313 | // Determine unit conversion factors (default: TeV and cm^2) | 313 | // Determine unit conversion factors (default: TeV and cm^2) |
| 314 | std::string u_energy_lo = gammalib::tolower(gammalib::strip_whitespace(energy_lo->unit())); | 314 | std::string u_energy_lo = gammalib::tolower(gammalib::strip_whitespace(energy_lo->unit())); |
inst/cta/src/GCTAEventList.cpp
| @@ -653,23 +653,23 @@ void GCTAEventList::read_events_v0(const GFitsTable* table) | @@ -653,23 +653,23 @@ void GCTAEventList::read_events_v0(const GFitsTable* table) | ||
| 653 | m_events.reserve(num); | 653 | m_events.reserve(num); |
| 654 | 654 | ||
| 655 | // Get column pointers | 655 | // Get column pointers |
| 656 | - GFitsTableULongCol* ptr_eid = (GFitsTableULongCol*)&(*table)["EVENT_ID"]; | ||
| 657 | - GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)&(*table)["TIME"]; | ||
| 658 | - GFitsTableShortCol* ptr_multip = (GFitsTableShortCol*)&(*table)["MULTIP"]; | ||
| 659 | - GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)&(*table)["RA"]; | ||
| 660 | - GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)&(*table)["DEC"]; | ||
| 661 | - GFitsTableFloatCol* ptr_dir_err = (GFitsTableFloatCol*)&(*table)["DIR_ERR"]; | ||
| 662 | - GFitsTableFloatCol* ptr_detx = (GFitsTableFloatCol*)&(*table)["DETX"]; | ||
| 663 | - GFitsTableFloatCol* ptr_dety = (GFitsTableFloatCol*)&(*table)["DETY"]; | ||
| 664 | - GFitsTableFloatCol* ptr_alt = (GFitsTableFloatCol*)&(*table)["ALT"]; | ||
| 665 | - GFitsTableFloatCol* ptr_az = (GFitsTableFloatCol*)&(*table)["AZ"]; | ||
| 666 | - GFitsTableFloatCol* ptr_corex = (GFitsTableFloatCol*)&(*table)["COREX"]; | ||
| 667 | - GFitsTableFloatCol* ptr_corey = (GFitsTableFloatCol*)&(*table)["COREY"]; | ||
| 668 | - GFitsTableFloatCol* ptr_core_err = (GFitsTableFloatCol*)&(*table)["CORE_ERR"]; | ||
| 669 | - GFitsTableFloatCol* ptr_xmax = (GFitsTableFloatCol*)&(*table)["XMAX"]; | ||
| 670 | - GFitsTableFloatCol* ptr_xmax_err = (GFitsTableFloatCol*)&(*table)["XMAX_ERR"]; | ||
| 671 | - GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)&(*table)["ENERGY"]; | ||
| 672 | - GFitsTableFloatCol* ptr_energy_err = (GFitsTableFloatCol*)&(*table)["ENERGY_ERR"]; | 656 | + GFitsTableULongCol* ptr_eid = (GFitsTableULongCol*)(*table)["EVENT_ID"]; |
| 657 | + GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)(*table)["TIME"]; | ||
| 658 | + GFitsTableShortCol* ptr_multip = (GFitsTableShortCol*)(*table)["MULTIP"]; | ||
| 659 | + GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)(*table)["RA"]; | ||
| 660 | + GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)(*table)["DEC"]; | ||
| 661 | + GFitsTableFloatCol* ptr_dir_err = (GFitsTableFloatCol*)(*table)["DIR_ERR"]; | ||
| 662 | + GFitsTableFloatCol* ptr_detx = (GFitsTableFloatCol*)(*table)["DETX"]; | ||
| 663 | + GFitsTableFloatCol* ptr_dety = (GFitsTableFloatCol*)(*table)["DETY"]; | ||
| 664 | + GFitsTableFloatCol* ptr_alt = (GFitsTableFloatCol*)(*table)["ALT"]; | ||
| 665 | + GFitsTableFloatCol* ptr_az = (GFitsTableFloatCol*)(*table)["AZ"]; | ||
| 666 | + GFitsTableFloatCol* ptr_corex = (GFitsTableFloatCol*)(*table)["COREX"]; | ||
| 667 | + GFitsTableFloatCol* ptr_corey = (GFitsTableFloatCol*)(*table)["COREY"]; | ||
| 668 | + GFitsTableFloatCol* ptr_core_err = (GFitsTableFloatCol*)(*table)["CORE_ERR"]; | ||
| 669 | + GFitsTableFloatCol* ptr_xmax = (GFitsTableFloatCol*)(*table)["XMAX"]; | ||
| 670 | + GFitsTableFloatCol* ptr_xmax_err = (GFitsTableFloatCol*)(*table)["XMAX_ERR"]; | ||
| 671 | + GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)(*table)["ENERGY"]; | ||
| 672 | + GFitsTableFloatCol* ptr_energy_err = (GFitsTableFloatCol*)(*table)["ENERGY_ERR"]; | ||
| 673 | 673 | ||
| 674 | // Copy data from columns into GCTAEventAtom objects | 674 | // Copy data from columns into GCTAEventAtom objects |
| 675 | GCTAEventAtom event; | 675 | GCTAEventAtom event; |
| @@ -734,26 +734,26 @@ void GCTAEventList::read_events_v1(const GFitsTable* table) | @@ -734,26 +734,26 @@ void GCTAEventList::read_events_v1(const GFitsTable* table) | ||
| 734 | m_events.reserve(num); | 734 | m_events.reserve(num); |
| 735 | 735 | ||
| 736 | // Get column pointers | 736 | // Get column pointers |
| 737 | - GFitsTableULongCol* ptr_eid = (GFitsTableULongCol*)&(*table)["EVENT_ID"]; | ||
| 738 | - GFitsTableULongCol* ptr_oid = (GFitsTableULongCol*)&(*table)["OBS_ID"]; | ||
| 739 | - GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)&(*table)["TIME"]; | ||
| 740 | - GFitsTableShortCol* ptr_multip = (GFitsTableShortCol*)&(*table)["MULTIP"]; | ||
| 741 | - GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)&(*table)["RA"]; | ||
| 742 | - GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)&(*table)["DEC"]; | ||
| 743 | - GFitsTableFloatCol* ptr_dir_err = (GFitsTableFloatCol*)&(*table)["DIR_ERR"]; | ||
| 744 | - GFitsTableFloatCol* ptr_detx = (GFitsTableFloatCol*)&(*table)["DETX"]; | ||
| 745 | - GFitsTableFloatCol* ptr_dety = (GFitsTableFloatCol*)&(*table)["DETY"]; | ||
| 746 | - GFitsTableFloatCol* ptr_alt = (GFitsTableFloatCol*)&(*table)["ALT"]; | ||
| 747 | - GFitsTableFloatCol* ptr_az = (GFitsTableFloatCol*)&(*table)["AZ"]; | ||
| 748 | - GFitsTableFloatCol* ptr_corex = (GFitsTableFloatCol*)&(*table)["COREX"]; | ||
| 749 | - GFitsTableFloatCol* ptr_corey = (GFitsTableFloatCol*)&(*table)["COREY"]; | ||
| 750 | - GFitsTableFloatCol* ptr_core_err = (GFitsTableFloatCol*)&(*table)["CORE_ERR"]; | ||
| 751 | - GFitsTableFloatCol* ptr_xmax = (GFitsTableFloatCol*)&(*table)["XMAX"]; | ||
| 752 | - GFitsTableFloatCol* ptr_xmax_err = (GFitsTableFloatCol*)&(*table)["XMAX_ERR"]; | ||
| 753 | - GFitsTableFloatCol* ptr_shw = (GFitsTableFloatCol*)&(*table)["SHWIDTH"]; | ||
| 754 | - GFitsTableFloatCol* ptr_shl = (GFitsTableFloatCol*)&(*table)["SHLENGTH"]; | ||
| 755 | - GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)&(*table)["ENERGY"]; | ||
| 756 | - GFitsTableFloatCol* ptr_energy_err = (GFitsTableFloatCol*)&(*table)["ENERGY_ERR"]; | 737 | + GFitsTableULongCol* ptr_eid = (GFitsTableULongCol*)(*table)["EVENT_ID"]; |
| 738 | + GFitsTableULongCol* ptr_oid = (GFitsTableULongCol*)(*table)["OBS_ID"]; | ||
| 739 | + GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)(*table)["TIME"]; | ||
| 740 | + GFitsTableShortCol* ptr_multip = (GFitsTableShortCol*)(*table)["MULTIP"]; | ||
| 741 | + GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)(*table)["RA"]; | ||
| 742 | + GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)(*table)["DEC"]; | ||
| 743 | + GFitsTableFloatCol* ptr_dir_err = (GFitsTableFloatCol*)(*table)["DIR_ERR"]; | ||
| 744 | + GFitsTableFloatCol* ptr_detx = (GFitsTableFloatCol*)(*table)["DETX"]; | ||
| 745 | + GFitsTableFloatCol* ptr_dety = (GFitsTableFloatCol*)(*table)["DETY"]; | ||
| 746 | + GFitsTableFloatCol* ptr_alt = (GFitsTableFloatCol*)(*table)["ALT"]; | ||
| 747 | + GFitsTableFloatCol* ptr_az = (GFitsTableFloatCol*)(*table)["AZ"]; | ||
| 748 | + GFitsTableFloatCol* ptr_corex = (GFitsTableFloatCol*)(*table)["COREX"]; | ||
| 749 | + GFitsTableFloatCol* ptr_corey = (GFitsTableFloatCol*)(*table)["COREY"]; | ||
| 750 | + GFitsTableFloatCol* ptr_core_err = (GFitsTableFloatCol*)(*table)["CORE_ERR"]; | ||
| 751 | + GFitsTableFloatCol* ptr_xmax = (GFitsTableFloatCol*)(*table)["XMAX"]; | ||
| 752 | + GFitsTableFloatCol* ptr_xmax_err = (GFitsTableFloatCol*)(*table)["XMAX_ERR"]; | ||
| 753 | + GFitsTableFloatCol* ptr_shw = (GFitsTableFloatCol*)(*table)["SHWIDTH"]; | ||
| 754 | + GFitsTableFloatCol* ptr_shl = (GFitsTableFloatCol*)(*table)["SHLENGTH"]; | ||
| 755 | + GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)(*table)["ENERGY"]; | ||
| 756 | + GFitsTableFloatCol* ptr_energy_err = (GFitsTableFloatCol*)(*table)["ENERGY_ERR"]; | ||
| 757 | 757 | ||
| 758 | // Copy data from columns into GCTAEventAtom objects | 758 | // Copy data from columns into GCTAEventAtom objects |
| 759 | GCTAEventAtom event; | 759 | GCTAEventAtom event; |
| @@ -821,7 +821,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | @@ -821,7 +821,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | ||
| 821 | // HIL_MSW | 821 | // HIL_MSW |
| 822 | if (table->hascolumn("HIL_MSW")) { | 822 | if (table->hascolumn("HIL_MSW")) { |
| 823 | GFitsTableFloatCol* ptr = | 823 | GFitsTableFloatCol* ptr = |
| 824 | - (GFitsTableFloatCol*)&(*table)["HIL_MSW"]; | 824 | + (GFitsTableFloatCol*)(*table)["HIL_MSW"]; |
| 825 | for (int i = 0; i < num; ++i) { | 825 | for (int i = 0; i < num; ++i) { |
| 826 | m_events[i].m_hil_msw = (*ptr)(i); | 826 | m_events[i].m_hil_msw = (*ptr)(i); |
| 827 | } | 827 | } |
| @@ -830,7 +830,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | @@ -830,7 +830,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | ||
| 830 | // HIL_MSW_ERR | 830 | // HIL_MSW_ERR |
| 831 | if (table->hascolumn("HIL_MSW_ERR")) { | 831 | if (table->hascolumn("HIL_MSW_ERR")) { |
| 832 | GFitsTableFloatCol* ptr = | 832 | GFitsTableFloatCol* ptr = |
| 833 | - (GFitsTableFloatCol*)&(*table)["HIL_MSW_ERR"]; | 833 | + (GFitsTableFloatCol*)(*table)["HIL_MSW_ERR"]; |
| 834 | for (int i = 0; i < num; ++i) { | 834 | for (int i = 0; i < num; ++i) { |
| 835 | m_events[i].m_hil_msw_err = (*ptr)(i); | 835 | m_events[i].m_hil_msw_err = (*ptr)(i); |
| 836 | } | 836 | } |
| @@ -839,7 +839,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | @@ -839,7 +839,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | ||
| 839 | // HIL_MSL | 839 | // HIL_MSL |
| 840 | if (table->hascolumn("HIL_MSL")) { | 840 | if (table->hascolumn("HIL_MSL")) { |
| 841 | GFitsTableFloatCol* ptr = | 841 | GFitsTableFloatCol* ptr = |
| 842 | - (GFitsTableFloatCol*)&(*table)["HIL_MSL"]; | 842 | + (GFitsTableFloatCol*)(*table)["HIL_MSL"]; |
| 843 | for (int i = 0; i < num; ++i) { | 843 | for (int i = 0; i < num; ++i) { |
| 844 | m_events[i].m_hil_msl = (*ptr)(i); | 844 | m_events[i].m_hil_msl = (*ptr)(i); |
| 845 | } | 845 | } |
| @@ -848,7 +848,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | @@ -848,7 +848,7 @@ void GCTAEventList::read_events_hillas(const GFitsTable* table) | ||
| 848 | // HIL_MSL_ERR | 848 | // HIL_MSL_ERR |
| 849 | if (table->hascolumn("HIL_MSL_ERR")) { | 849 | if (table->hascolumn("HIL_MSL_ERR")) { |
| 850 | GFitsTableFloatCol* ptr = | 850 | GFitsTableFloatCol* ptr = |
| 851 | - (GFitsTableFloatCol*)&(*table)["HIL_MSL_ERR"]; | 851 | + (GFitsTableFloatCol*)(*table)["HIL_MSL_ERR"]; |
| 852 | for (int i = 0; i < num; ++i) { | 852 | for (int i = 0; i < num; ++i) { |
| 853 | m_events[i].m_hil_msl_err = (*ptr)(i); | 853 | m_events[i].m_hil_msl_err = (*ptr)(i); |
| 854 | } | 854 | } |
| @@ -1112,32 +1112,32 @@ void GCTAEventList::write_events(GFitsBinTable* hdu) const | @@ -1112,32 +1112,32 @@ void GCTAEventList::write_events(GFitsBinTable* hdu) const | ||
| 1112 | } // endfor: looped over rows | 1112 | } // endfor: looped over rows |
| 1113 | 1113 | ||
| 1114 | // Append columns to table | 1114 | // Append columns to table |
| 1115 | - hdu->append_column(col_eid); | ||
| 1116 | - hdu->append_column(col_oid); | ||
| 1117 | - hdu->append_column(col_time); | ||
| 1118 | - hdu->append_column(col_live); | ||
| 1119 | - hdu->append_column(col_multip); | ||
| 1120 | - hdu->append_column(col_telmask); | ||
| 1121 | - hdu->append_column(col_ra); | ||
| 1122 | - hdu->append_column(col_dec); | ||
| 1123 | - hdu->append_column(col_direrr); | ||
| 1124 | - hdu->append_column(col_detx); | ||
| 1125 | - hdu->append_column(col_dety); | ||
| 1126 | - hdu->append_column(col_alt); | ||
| 1127 | - hdu->append_column(col_az); | ||
| 1128 | - hdu->append_column(col_corex); | ||
| 1129 | - hdu->append_column(col_corey); | ||
| 1130 | - hdu->append_column(col_core_err); | ||
| 1131 | - hdu->append_column(col_xmax); | ||
| 1132 | - hdu->append_column(col_xmax_err); | ||
| 1133 | - hdu->append_column(col_shw); | ||
| 1134 | - hdu->append_column(col_shl); | ||
| 1135 | - hdu->append_column(col_energy); | ||
| 1136 | - hdu->append_column(col_energy_err); | ||
| 1137 | - hdu->append_column(col_hil_msw); | ||
| 1138 | - hdu->append_column(col_hil_msw_err); | ||
| 1139 | - hdu->append_column(col_hil_msl); | ||
| 1140 | - hdu->append_column(col_hil_msl_err); | 1115 | + hdu->append(col_eid); |
| 1116 | + hdu->append(col_oid); | ||
| 1117 | + hdu->append(col_time); | ||
| 1118 | + hdu->append(col_live); | ||
| 1119 | + hdu->append(col_multip); | ||
| 1120 | + hdu->append(col_telmask); | ||
| 1121 | + hdu->append(col_ra); | ||
| 1122 | + hdu->append(col_dec); | ||
| 1123 | + hdu->append(col_direrr); | ||
| 1124 | + hdu->append(col_detx); | ||
| 1125 | + hdu->append(col_dety); | ||
| 1126 | + hdu->append(col_alt); | ||
| 1127 | + hdu->append(col_az); | ||
| 1128 | + hdu->append(col_corex); | ||
| 1129 | + hdu->append(col_corey); | ||
| 1130 | + hdu->append(col_core_err); | ||
| 1131 | + hdu->append(col_xmax); | ||
| 1132 | + hdu->append(col_xmax_err); | ||
| 1133 | + hdu->append(col_shw); | ||
| 1134 | + hdu->append(col_shl); | ||
| 1135 | + hdu->append(col_energy); | ||
| 1136 | + hdu->append(col_energy_err); | ||
| 1137 | + hdu->append(col_hil_msw); | ||
| 1138 | + hdu->append(col_hil_msw_err); | ||
| 1139 | + hdu->append(col_hil_msl); | ||
| 1140 | + hdu->append(col_hil_msl_err); | ||
| 1141 | 1141 | ||
| 1142 | } // endif: there were events to write | 1142 | } // endif: there were events to write |
| 1143 | 1143 |
inst/cta/src/GCTAPsfVector.cpp
| @@ -286,17 +286,17 @@ void GCTAPsfVector::read(const GFitsTable* hdu) | @@ -286,17 +286,17 @@ void GCTAPsfVector::read(const GFitsTable* hdu) | ||
| 286 | const double conv = 0.6624305 * gammalib::deg2rad; | 286 | const double conv = 0.6624305 * gammalib::deg2rad; |
| 287 | 287 | ||
| 288 | // Get pointers to table columns | 288 | // Get pointers to table columns |
| 289 | - const GFitsTableCol* energy_lo = &(*hdu)["ENERG_LO"]; | ||
| 290 | - const GFitsTableCol* energy_hi = &(*hdu)["ENERG_HI"]; | 289 | + const GFitsTableCol* energy_lo = (*hdu)["ENERG_LO"]; |
| 290 | + const GFitsTableCol* energy_hi = (*hdu)["ENERG_HI"]; | ||
| 291 | 291 | ||
| 292 | // Handle various data formats (H.E.S.S. and MAGIC) | 292 | // Handle various data formats (H.E.S.S. and MAGIC) |
| 293 | const GFitsTableCol* r68; | 293 | const GFitsTableCol* r68; |
| 294 | double r68_scale = 1.0; | 294 | double r68_scale = 1.0; |
| 295 | if (hdu->hascolumn("R68")) { | 295 | if (hdu->hascolumn("R68")) { |
| 296 | - r68 = &(*hdu)["R68"]; | 296 | + r68 = (*hdu)["R68"]; |
| 297 | } | 297 | } |
| 298 | else { | 298 | else { |
| 299 | - r68 = &(*hdu)["ANGRES40"]; | 299 | + r68 = (*hdu)["ANGRES40"]; |
| 300 | r68_scale = 1.0 / 0.6624305; // MAGIC PSF is already 1 sigma | 300 | r68_scale = 1.0 / 0.6624305; // MAGIC PSF is already 1 sigma |
| 301 | } | 301 | } |
| 302 | 302 |
inst/cta/src/GCTAResponseTable.cpp
| @@ -975,7 +975,7 @@ void GCTAResponseTable::read_colnames(const GFitsTable* hdu) | @@ -975,7 +975,7 @@ void GCTAResponseTable::read_colnames(const GFitsTable* hdu) | ||
| 975 | for (int i = 0; i < hdu->ncols(); ++i) { | 975 | for (int i = 0; i < hdu->ncols(); ++i) { |
| 976 | 976 | ||
| 977 | // Get column name | 977 | // Get column name |
| 978 | - std::string colname = (*hdu)[i].name(); | 978 | + std::string colname = (*hdu)[i]->name(); |
| 979 | 979 | ||
| 980 | // If we search for a "_LO" column, check if we have one. If one | 980 | // If we search for a "_LO" column, check if we have one. If one |
| 981 | // is found, change the search mode to 1 and set the expected name | 981 | // is found, change the search mode to 1 and set the expected name |
| @@ -1108,8 +1108,8 @@ void GCTAResponseTable::read_axes(const GFitsTable* hdu) | @@ -1108,8 +1108,8 @@ void GCTAResponseTable::read_axes(const GFitsTable* hdu) | ||
| 1108 | for (int i = 0; i < axes(); ++i) { | 1108 | for (int i = 0; i < axes(); ++i) { |
| 1109 | 1109 | ||
| 1110 | // Get pointers to table columns | 1110 | // Get pointers to table columns |
| 1111 | - const GFitsTableCol* col_lo = &(*hdu)[m_colname_lo[i]]; | ||
| 1112 | - const GFitsTableCol* col_hi = &(*hdu)[m_colname_hi[i]]; | 1111 | + const GFitsTableCol* col_lo = (*hdu)[m_colname_lo[i]]; |
| 1112 | + const GFitsTableCol* col_hi = (*hdu)[m_colname_hi[i]]; | ||
| 1113 | 1113 | ||
| 1114 | // Extract number of bins. Make sure that both columns have the | 1114 | // Extract number of bins. Make sure that both columns have the |
| 1115 | // same number of bins | 1115 | // same number of bins |
| @@ -1189,7 +1189,7 @@ void GCTAResponseTable::read_pars(const GFitsTable* hdu) | @@ -1189,7 +1189,7 @@ void GCTAResponseTable::read_pars(const GFitsTable* hdu) | ||
| 1189 | for (int i = 0; i < size(); ++i) { | 1189 | for (int i = 0; i < size(); ++i) { |
| 1190 | 1190 | ||
| 1191 | // Get pointer to table column | 1191 | // Get pointer to table column |
| 1192 | - const GFitsTableCol* col = &(*hdu)[m_colname_par[i]]; | 1192 | + const GFitsTableCol* col = (*hdu)[m_colname_par[i]]; |
| 1193 | 1193 | ||
| 1194 | // Extract number of bins. Verify that the number of bins | 1194 | // Extract number of bins. Verify that the number of bins |
| 1195 | // corresponds to the expectation. | 1195 | // corresponds to the expectation. |
inst/lat/src/GLATAeff.cpp
| @@ -609,7 +609,7 @@ void GLATAeff::read_aeff(const GFitsTable* hdu) | @@ -609,7 +609,7 @@ void GLATAeff::read_aeff(const GFitsTable* hdu) | ||
| 609 | m_aeff.reserve(size); | 609 | m_aeff.reserve(size); |
| 610 | 610 | ||
| 611 | // Get pointer to effective area column | 611 | // Get pointer to effective area column |
| 612 | - const GFitsTableCol* ptr = &(*hdu)["EFFAREA"]; | 612 | + const GFitsTableCol* ptr = (*hdu)["EFFAREA"]; |
| 613 | 613 | ||
| 614 | // Check consistency of effective area table | 614 | // Check consistency of effective area table |
| 615 | int num = ptr->number(); | 615 | int num = ptr->number(); |
| @@ -667,7 +667,7 @@ void GLATAeff::read_efficiency(const GFitsTable* hdu) | @@ -667,7 +667,7 @@ void GLATAeff::read_efficiency(const GFitsTable* hdu) | ||
| 667 | m_eff_func2 = NULL; | 667 | m_eff_func2 = NULL; |
| 668 | 668 | ||
| 669 | // Get pointer to efficiency factors column | 669 | // Get pointer to efficiency factors column |
| 670 | - const GFitsTableCol* ptr = &(*hdu)["EFFICIENCY_PARS"]; | 670 | + const GFitsTableCol* ptr = (*hdu)["EFFICIENCY_PARS"]; |
| 671 | 671 | ||
| 672 | // Allocate vectors to hold the parameters | 672 | // Allocate vectors to hold the parameters |
| 673 | std::vector<double> par1; | 673 | std::vector<double> par1; |
| @@ -735,7 +735,7 @@ void GLATAeff::write_aeff(GFits& file) const | @@ -735,7 +735,7 @@ void GLATAeff::write_aeff(GFits& file) const | ||
| 735 | col_aeff(0,i) = m_aeff[i]; | 735 | col_aeff(0,i) = m_aeff[i]; |
| 736 | 736 | ||
| 737 | // Append columns to table | 737 | // Append columns to table |
| 738 | - hdu_aeff->append_column(col_aeff); | 738 | + hdu_aeff->append(col_aeff); |
| 739 | 739 | ||
| 740 | // Append HDU to FITS file | 740 | // Append HDU to FITS file |
| 741 | file.append(*hdu_aeff); | 741 | file.append(*hdu_aeff); |
inst/lat/src/GLATEdisp.cpp
| @@ -375,8 +375,8 @@ void GLATEdisp::read_edisp(const GFitsTable* hdu) | @@ -375,8 +375,8 @@ void GLATEdisp::read_edisp(const GFitsTable* hdu) | ||
| 375 | m_ls1.reserve(size); | 375 | m_ls1.reserve(size); |
| 376 | 376 | ||
| 377 | // Get pointer to columns | 377 | // Get pointer to columns |
| 378 | - const GFitsTableCol* norm = &(*hdu)["NORM"]; | ||
| 379 | - const GFitsTableCol* ls1 = &(*hdu)["LS1"]; | 378 | + const GFitsTableCol* norm = (*hdu)["NORM"]; |
| 379 | + const GFitsTableCol* ls1 = (*hdu)["LS1"]; | ||
| 380 | 380 | ||
| 381 | // Check consistency of columns | 381 | // Check consistency of columns |
| 382 | if (norm->number() != size) | 382 | if (norm->number() != size) |
| @@ -432,8 +432,8 @@ void GLATEdisp::write_edisp(GFits& file) const | @@ -432,8 +432,8 @@ void GLATEdisp::write_edisp(GFits& file) const | ||
| 432 | } | 432 | } |
| 433 | 433 | ||
| 434 | // Append columns to table | 434 | // Append columns to table |
| 435 | - hdu_edisp->append_column(col_norm); | ||
| 436 | - hdu_edisp->append_column(col_ls1); | 435 | + hdu_edisp->append(col_norm); |
| 436 | + hdu_edisp->append(col_ls1); | ||
| 437 | 437 | ||
| 438 | // Append HDU to FITS file | 438 | // Append HDU to FITS file |
| 439 | file.append(*hdu_edisp); | 439 | file.append(*hdu_edisp); |
inst/lat/src/GLATEventList.cpp
| @@ -496,21 +496,21 @@ void GLATEventList::read_events(const GFitsTable& table) | @@ -496,21 +496,21 @@ void GLATEventList::read_events(const GFitsTable& table) | ||
| 496 | m_events.reserve(num); | 496 | m_events.reserve(num); |
| 497 | 497 | ||
| 498 | // Get column pointers | 498 | // Get column pointers |
| 499 | - GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)&table["TIME"]; | ||
| 500 | - GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)&table["ENERGY"]; | ||
| 501 | - GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)&table["RA"]; | ||
| 502 | - GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)&table["DEC"]; | ||
| 503 | - GFitsTableFloatCol* ptr_theta = (GFitsTableFloatCol*)&table["THETA"]; | ||
| 504 | - GFitsTableFloatCol* ptr_phi = (GFitsTableFloatCol*)&table["PHI"]; | ||
| 505 | - GFitsTableFloatCol* ptr_zenith = (GFitsTableFloatCol*)&table["ZENITH_ANGLE"]; | ||
| 506 | - GFitsTableFloatCol* ptr_azimuth = (GFitsTableFloatCol*)&table["EARTH_AZIMUTH_ANGLE"]; | ||
| 507 | - GFitsTableLongCol* ptr_eid = (GFitsTableLongCol*)&table["EVENT_ID"]; | ||
| 508 | - GFitsTableLongCol* ptr_rid = (GFitsTableLongCol*)&table["RUN_ID"]; | ||
| 509 | - GFitsTableShortCol* ptr_recon = (GFitsTableShortCol*)&table["RECON_VERSION"]; | ||
| 510 | - GFitsTableShortCol* ptr_calib = (GFitsTableShortCol*)&table["CALIB_VERSION"]; | ||
| 511 | - GFitsTableShortCol* ptr_class = (GFitsTableShortCol*)&table["EVENT_CLASS"]; | ||
| 512 | - GFitsTableShortCol* ptr_conv = (GFitsTableShortCol*)&table["CONVERSION_TYPE"]; | ||
| 513 | - GFitsTableDoubleCol* ptr_ltime = (GFitsTableDoubleCol*)&table["LIVETIME"]; | 499 | + GFitsTableDoubleCol* ptr_time = (GFitsTableDoubleCol*)table["TIME"]; |
| 500 | + GFitsTableFloatCol* ptr_energy = (GFitsTableFloatCol*)table["ENERGY"]; | ||
| 501 | + GFitsTableFloatCol* ptr_ra = (GFitsTableFloatCol*)table["RA"]; | ||
| 502 | + GFitsTableFloatCol* ptr_dec = (GFitsTableFloatCol*)table["DEC"]; | ||
| 503 | + GFitsTableFloatCol* ptr_theta = (GFitsTableFloatCol*)table["THETA"]; | ||
| 504 | + GFitsTableFloatCol* ptr_phi = (GFitsTableFloatCol*)table["PHI"]; | ||
| 505 | + GFitsTableFloatCol* ptr_zenith = (GFitsTableFloatCol*)table["ZENITH_ANGLE"]; | ||
| 506 | + GFitsTableFloatCol* ptr_azimuth = (GFitsTableFloatCol*)table["EARTH_AZIMUTH_ANGLE"]; | ||
| 507 | + GFitsTableLongCol* ptr_eid = (GFitsTableLongCol*)table["EVENT_ID"]; | ||
| 508 | + GFitsTableLongCol* ptr_rid = (GFitsTableLongCol*)table["RUN_ID"]; | ||
| 509 | + GFitsTableShortCol* ptr_recon = (GFitsTableShortCol*)table["RECON_VERSION"]; | ||
| 510 | + GFitsTableShortCol* ptr_calib = (GFitsTableShortCol*)table["CALIB_VERSION"]; | ||
| 511 | + GFitsTableShortCol* ptr_class = (GFitsTableShortCol*)table["EVENT_CLASS"]; | ||
| 512 | + GFitsTableShortCol* ptr_conv = (GFitsTableShortCol*)table["CONVERSION_TYPE"]; | ||
| 513 | + GFitsTableDoubleCol* ptr_ltime = (GFitsTableDoubleCol*)table["LIVETIME"]; | ||
| 514 | 514 | ||
| 515 | // Copy data from columns into GLATEventAtom objects | 515 | // Copy data from columns into GLATEventAtom objects |
| 516 | GLATEventAtom event; | 516 | GLATEventAtom event; |
| @@ -565,7 +565,7 @@ void GLATEventList::read_events(const GFitsTable& table) | @@ -565,7 +565,7 @@ void GLATEventList::read_events(const GFitsTable& table) | ||
| 565 | 565 | ||
| 566 | // Get column pointer | 566 | // Get column pointer |
| 567 | GFitsTableFloatCol* ptr_dif = | 567 | GFitsTableFloatCol* ptr_dif = |
| 568 | - static_cast<GFitsTableFloatCol*>(const_cast<GFitsTableCol*>(&table[std::string(keyword)])); | 568 | + static_cast<GFitsTableFloatCol*>(const_cast<GFitsTableCol*>(table[std::string(keyword)])); |
| 569 | 569 | ||
| 570 | // Copy data from columns into GLATEventAtom objects | 570 | // Copy data from columns into GLATEventAtom objects |
| 571 | for (int i = 0; i < num; ++i) { | 571 | for (int i = 0; i < num; ++i) { |
inst/lat/src/GLATPsfBase.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | - * GLATPsfBase.cpp - Fermi/LAT point spread function abstract base class * | 2 | + * GLATPsfBase.cpp - Fermi/LAT point spread function abstract base class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2013 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -21,7 +21,7 @@ | @@ -21,7 +21,7 @@ | ||
| 21 | /** | 21 | /** |
| 22 | * @file GLATPsfBase.cpp | 22 | * @file GLATPsfBase.cpp |
| 23 | * @brief Fermi/LAT point spread function abstract base class implementation | 23 | * @brief Fermi/LAT point spread function abstract base class implementation |
| 24 | - * @author J. Knoedlseder | 24 | + * @author Juergen Knoedlseder |
| 25 | */ | 25 | */ |
| 26 | 26 | ||
| 27 | /* __ Includes ___________________________________________________________ */ | 27 | /* __ Includes ___________________________________________________________ */ |
| @@ -199,7 +199,7 @@ void GLATPsfBase::free_members(void) | @@ -199,7 +199,7 @@ void GLATPsfBase::free_members(void) | ||
| 199 | void GLATPsfBase::read_scale(const GFitsTable* hdu) | 199 | void GLATPsfBase::read_scale(const GFitsTable* hdu) |
| 200 | { | 200 | { |
| 201 | // Get pointer to column | 201 | // Get pointer to column |
| 202 | - const GFitsTableCol* scale = &(*hdu)["PSFSCALE"]; | 202 | + const GFitsTableCol* scale = (*hdu)["PSFSCALE"]; |
| 203 | 203 | ||
| 204 | // Get scaling factors | 204 | // Get scaling factors |
| 205 | if (front()) { | 205 | if (front()) { |
| @@ -256,7 +256,7 @@ void GLATPsfBase::write_scale(GFits& file) const | @@ -256,7 +256,7 @@ void GLATPsfBase::write_scale(GFits& file) const | ||
| 256 | col_scale(0,4) = m_scale_index; | 256 | col_scale(0,4) = m_scale_index; |
| 257 | 257 | ||
| 258 | // Append column to table | 258 | // Append column to table |
| 259 | - hdu_scale->append_column(col_scale); | 259 | + hdu_scale->append(col_scale); |
| 260 | 260 | ||
| 261 | // Append HDU to FITS file | 261 | // Append HDU to FITS file |
| 262 | file.append(*hdu_scale); | 262 | file.append(*hdu_scale); |
inst/lat/src/GLATPsfV1.cpp
| @@ -205,10 +205,10 @@ void GLATPsfV1::read(const GFitsTable* hdu) | @@ -205,10 +205,10 @@ void GLATPsfV1::read(const GFitsTable* hdu) | ||
| 205 | m_gtail.reserve(size); | 205 | m_gtail.reserve(size); |
| 206 | 206 | ||
| 207 | // Get pointer to columns | 207 | // Get pointer to columns |
| 208 | - const GFitsTableCol* ncore = &(*hdu)["NCORE"]; | ||
| 209 | - const GFitsTableCol* sigma = &(*hdu)["SIGMA"]; | ||
| 210 | - const GFitsTableCol* gcore = &(*hdu)["GCORE"]; | ||
| 211 | - const GFitsTableCol* gtail = &(*hdu)["GTAIL"]; | 208 | + const GFitsTableCol* ncore = (*hdu)["NCORE"]; |
| 209 | + const GFitsTableCol* sigma = (*hdu)["SIGMA"]; | ||
| 210 | + const GFitsTableCol* gcore = (*hdu)["GCORE"]; | ||
| 211 | + const GFitsTableCol* gtail = (*hdu)["GTAIL"]; | ||
| 212 | 212 | ||
| 213 | // Check consistency of columns | 213 | // Check consistency of columns |
| 214 | if (ncore->number() != size) { | 214 | if (ncore->number() != size) { |
| @@ -286,10 +286,10 @@ void GLATPsfV1::write(GFits& file) const | @@ -286,10 +286,10 @@ void GLATPsfV1::write(GFits& file) const | ||
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | // Append columns to table | 288 | // Append columns to table |
| 289 | - hdu_rpsf->append_column(col_ncore); | ||
| 290 | - hdu_rpsf->append_column(col_sigma); | ||
| 291 | - hdu_rpsf->append_column(col_gcore); | ||
| 292 | - hdu_rpsf->append_column(col_gtail); | 289 | + hdu_rpsf->append(col_ncore); |
| 290 | + hdu_rpsf->append(col_sigma); | ||
| 291 | + hdu_rpsf->append(col_gcore); | ||
| 292 | + hdu_rpsf->append(col_gtail); | ||
| 293 | 293 | ||
| 294 | // Append HDU to FITS file | 294 | // Append HDU to FITS file |
| 295 | file.append(*hdu_rpsf); | 295 | file.append(*hdu_rpsf); |
inst/lat/src/GLATPsfV3.cpp
| @@ -214,12 +214,12 @@ void GLATPsfV3::read(const GFitsTable* hdu) | @@ -214,12 +214,12 @@ void GLATPsfV3::read(const GFitsTable* hdu) | ||
| 214 | m_gtail.reserve(size); | 214 | m_gtail.reserve(size); |
| 215 | 215 | ||
| 216 | // Get pointer to columns | 216 | // Get pointer to columns |
| 217 | - const GFitsTableCol* ncore = &(*hdu)["NCORE"]; | ||
| 218 | - const GFitsTableCol* ntail = &(*hdu)["NTAIL"]; | ||
| 219 | - const GFitsTableCol* score = &(*hdu)["SCORE"]; | ||
| 220 | - const GFitsTableCol* stail = &(*hdu)["STAIL"]; | ||
| 221 | - const GFitsTableCol* gcore = &(*hdu)["GCORE"]; | ||
| 222 | - const GFitsTableCol* gtail = &(*hdu)["GTAIL"]; | 217 | + const GFitsTableCol* ncore = (*hdu)["NCORE"]; |
| 218 | + const GFitsTableCol* ntail = (*hdu)["NTAIL"]; | ||
| 219 | + const GFitsTableCol* score = (*hdu)["SCORE"]; | ||
| 220 | + const GFitsTableCol* stail = (*hdu)["STAIL"]; | ||
| 221 | + const GFitsTableCol* gcore = (*hdu)["GCORE"]; | ||
| 222 | + const GFitsTableCol* gtail = (*hdu)["GTAIL"]; | ||
| 223 | 223 | ||
| 224 | // Check consistency of columns | 224 | // Check consistency of columns |
| 225 | if (ncore->number() != size) { | 225 | if (ncore->number() != size) { |
| @@ -314,12 +314,12 @@ void GLATPsfV3::write(GFits& file) const | @@ -314,12 +314,12 @@ void GLATPsfV3::write(GFits& file) const | ||
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | // Append columns to table | 316 | // Append columns to table |
| 317 | - hdu_rpsf->append_column(col_ncore); | ||
| 318 | - hdu_rpsf->append_column(col_ntail); | ||
| 319 | - hdu_rpsf->append_column(col_score); | ||
| 320 | - hdu_rpsf->append_column(col_stail); | ||
| 321 | - hdu_rpsf->append_column(col_gcore); | ||
| 322 | - hdu_rpsf->append_column(col_gtail); | 317 | + hdu_rpsf->append(col_ncore); |
| 318 | + hdu_rpsf->append(col_ntail); | ||
| 319 | + hdu_rpsf->append(col_score); | ||
| 320 | + hdu_rpsf->append(col_stail); | ||
| 321 | + hdu_rpsf->append(col_gcore); | ||
| 322 | + hdu_rpsf->append(col_gtail); | ||
| 323 | 323 | ||
| 324 | // Append HDU to FITS file | 324 | // Append HDU to FITS file |
| 325 | file.append(*hdu_rpsf); | 325 | file.append(*hdu_rpsf); |
inst/lat/src/GLATResponseTable.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | - * GLATResponseTable.cpp - Fermi/LAT Response table class * | 2 | + * GLATResponseTable.cpp - Fermi/LAT Response table class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | * copyright (C) 2008-2013 by Juergen Knoedlseder * | 4 | * copyright (C) 2008-2013 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| @@ -184,10 +184,10 @@ void GLATResponseTable::read(const GFitsTable* hdu) | @@ -184,10 +184,10 @@ void GLATResponseTable::read(const GFitsTable* hdu) | ||
| 184 | clear(); | 184 | clear(); |
| 185 | 185 | ||
| 186 | // Get pointers to table columns | 186 | // Get pointers to table columns |
| 187 | - const GFitsTableCol* energy_lo = &(*hdu)["ENERG_LO"]; | ||
| 188 | - const GFitsTableCol* energy_hi = &(*hdu)["ENERG_HI"]; | ||
| 189 | - const GFitsTableCol* ctheta_lo = &(*hdu)["CTHETA_LO"]; | ||
| 190 | - const GFitsTableCol* ctheta_hi = &(*hdu)["CTHETA_HI"]; | 187 | + const GFitsTableCol* energy_lo = (*hdu)["ENERG_LO"]; |
| 188 | + const GFitsTableCol* energy_hi = (*hdu)["ENERG_HI"]; | ||
| 189 | + const GFitsTableCol* ctheta_lo = (*hdu)["CTHETA_LO"]; | ||
| 190 | + const GFitsTableCol* ctheta_hi = (*hdu)["CTHETA_HI"]; | ||
| 191 | 191 | ||
| 192 | // Extract number of bins | 192 | // Extract number of bins |
| 193 | m_energy_num = energy_lo->number(); | 193 | m_energy_num = energy_lo->number(); |
| @@ -264,10 +264,10 @@ void GLATResponseTable::write(GFitsTable* hdu) const | @@ -264,10 +264,10 @@ void GLATResponseTable::write(GFitsTable* hdu) const | ||
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | // Append columns to boundary table | 266 | // Append columns to boundary table |
| 267 | - hdu->append_column(col_energy_lo); | ||
| 268 | - hdu->append_column(col_energy_hi); | ||
| 269 | - hdu->append_column(col_ctheta_lo); | ||
| 270 | - hdu->append_column(col_ctheta_hi); | 267 | + hdu->append(col_energy_lo); |
| 268 | + hdu->append(col_energy_hi); | ||
| 269 | + hdu->append(col_ctheta_lo); | ||
| 270 | + hdu->append(col_ctheta_hi); | ||
| 271 | 271 | ||
| 272 | // Return | 272 | // Return |
| 273 | return; | 273 | return; |
inst/mwl/src/GMWLSpectrum.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | - * GMWLSpectrum.cpp - Multi-wavelength spectrum class * | 2 | + * GMWLSpectrum.cpp - Multi-wavelength spectrum class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | * copyright (C) 2010-2013 by Juergen Knoedlseder * | 4 | * copyright (C) 2010-2013 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| @@ -636,19 +636,19 @@ void GMWLSpectrum::read_fits(const GFitsTable* table) | @@ -636,19 +636,19 @@ void GMWLSpectrum::read_fits(const GFitsTable* table) | ||
| 636 | 636 | ||
| 637 | // Extract column pointers | 637 | // Extract column pointers |
| 638 | if (table->ncols() == 2) { | 638 | if (table->ncols() == 2) { |
| 639 | - c_energy = &(*table)[0]; | ||
| 640 | - c_flux = &(*table)[1]; | 639 | + c_energy = (*table)[0]; |
| 640 | + c_flux = (*table)[1]; | ||
| 641 | } | 641 | } |
| 642 | else if (table->ncols() == 3) { | 642 | else if (table->ncols() == 3) { |
| 643 | - c_energy = &(*table)[0]; | ||
| 644 | - c_flux = &(*table)[1]; | ||
| 645 | - c_flux_err = &(*table)[2]; | 643 | + c_energy = (*table)[0]; |
| 644 | + c_flux = (*table)[1]; | ||
| 645 | + c_flux_err = (*table)[2]; | ||
| 646 | } | 646 | } |
| 647 | else if (table->ncols() > 3) { | 647 | else if (table->ncols() > 3) { |
| 648 | - c_energy = &(*table)[0]; | ||
| 649 | - c_energy_err = &(*table)[1]; | ||
| 650 | - c_flux = &(*table)[2]; | ||
| 651 | - c_flux_err = &(*table)[3]; | 648 | + c_energy = (*table)[0]; |
| 649 | + c_energy_err = (*table)[1]; | ||
| 650 | + c_flux = (*table)[2]; | ||
| 651 | + c_flux_err = (*table)[3]; | ||
| 652 | } | 652 | } |
| 653 | else { | 653 | else { |
| 654 | throw GMWLException::bad_file_format(G_READ_FITS, | 654 | throw GMWLException::bad_file_format(G_READ_FITS, |
| @@ -659,14 +659,18 @@ void GMWLSpectrum::read_fits(const GFitsTable* table) | @@ -659,14 +659,18 @@ void GMWLSpectrum::read_fits(const GFitsTable* table) | ||
| 659 | // Read spectral points and add to spectrum | 659 | // Read spectral points and add to spectrum |
| 660 | for (int i = 0; i < table->nrows(); ++i) { | 660 | for (int i = 0; i < table->nrows(); ++i) { |
| 661 | GMWLDatum datum; | 661 | GMWLDatum datum; |
| 662 | - if (c_energy != NULL) | 662 | + if (c_energy != NULL) { |
| 663 | datum.m_eng = conv_energy(c_energy->real(i), c_energy->unit()); | 663 | datum.m_eng = conv_energy(c_energy->real(i), c_energy->unit()); |
| 664 | - if (c_energy_err != NULL) | 664 | + } |
| 665 | + if (c_energy_err != NULL) { | ||
| 665 | datum.m_eng_err = conv_energy(c_energy_err->real(i), c_energy->unit()); | 666 | datum.m_eng_err = conv_energy(c_energy_err->real(i), c_energy->unit()); |
| 666 | - if (c_flux != NULL) | 667 | + } |
| 668 | + if (c_flux != NULL) { | ||
| 667 | datum.m_flux = conv_flux(datum.m_eng, c_flux->real(i), c_flux->unit()); | 669 | datum.m_flux = conv_flux(datum.m_eng, c_flux->real(i), c_flux->unit()); |
| 668 | - if (c_flux_err != NULL) | 670 | + } |
| 671 | + if (c_flux_err != NULL) { | ||
| 669 | datum.m_flux_err = conv_flux(datum.m_eng, c_flux_err->real(i), c_flux_err->unit()); | 672 | datum.m_flux_err = conv_flux(datum.m_eng, c_flux_err->real(i), c_flux_err->unit()); |
| 673 | + } | ||
| 670 | m_data.push_back(datum); | 674 | m_data.push_back(datum); |
| 671 | } | 675 | } |
| 672 | 676 |
pyext/GFitsTable.i
| @@ -109,7 +109,7 @@ class GFitsTable : public GFitsHDU { | @@ -109,7 +109,7 @@ class GFitsTable : public GFitsHDU { | ||
| 109 | public: | 109 | public: |
| 110 | // Constructors and destructors | 110 | // Constructors and destructors |
| 111 | GFitsTable(void); | 111 | GFitsTable(void); |
| 112 | - explicit GFitsTable(int nrows); | 112 | + explicit GFitsTable(const int& nrows); |
| 113 | GFitsTable(const GFitsTable& table); | 113 | GFitsTable(const GFitsTable& table); |
| 114 | virtual ~GFitsTable(void); | 114 | virtual ~GFitsTable(void); |
| 115 | 115 | ||
| @@ -119,14 +119,18 @@ public: | @@ -119,14 +119,18 @@ public: | ||
| 119 | virtual HDUType exttype(void) const = 0; | 119 | virtual HDUType exttype(void) const = 0; |
| 120 | 120 | ||
| 121 | // Implemented Methods | 121 | // Implemented Methods |
| 122 | - void append_column(GFitsTableCol& column); | ||
| 123 | - void insert_column(int colnum, GFitsTableCol& column); | ||
| 124 | - void append_rows(const int& nrows); | ||
| 125 | - void insert_rows(const int& rownum, const int& nrows); | ||
| 126 | - void remove_rows(const int& rownum, const int& nrows); | ||
| 127 | - bool hascolumn(const std::string& colname) const; | ||
| 128 | - int nrows(void) const; | ||
| 129 | - int ncols(void) const; | 122 | + const int& size(void) const; |
| 123 | + GFitsTableCol* set(const int& colnum, const GFitsTableCol& column); | ||
| 124 | + GFitsTableCol* set(const std::string& colname, const GFitsTableCol& column); | ||
| 125 | + GFitsTableCol* append(const GFitsTableCol& column); | ||
| 126 | + GFitsTableCol* insert(int colnum, const GFitsTableCol& column); | ||
| 127 | + GFitsTableCol* insert(const std::string& colname, const GFitsTableCol& column); | ||
| 128 | + void append_rows(const int& nrows); | ||
| 129 | + void insert_rows(const int& row, const int& nrows); | ||
| 130 | + void remove_rows(const int& row, const int& nrows); | ||
| 131 | + const int& nrows(void) const; | ||
| 132 | + const int& ncols(void) const; | ||
| 133 | + bool hascolumn(const std::string& colname) const; | ||
| 130 | }; | 134 | }; |
| 131 | 135 | ||
| 132 | 136 | ||
| @@ -134,18 +138,18 @@ public: | @@ -134,18 +138,18 @@ public: | ||
| 134 | * @brief GFitsTable class extension | 138 | * @brief GFitsTable class extension |
| 135 | ***************************************************************************/ | 139 | ***************************************************************************/ |
| 136 | %extend GFitsTable { | 140 | %extend GFitsTable { |
| 137 | - GFitsTableCol& __getitem__(const int& colnum) { | 141 | + GFitsTableCol* __getitem__(const int& colnum) { |
| 138 | return (*self)[colnum]; | 142 | return (*self)[colnum]; |
| 139 | } | 143 | } |
| 140 | - GFitsTableCol& __getitem__(const std::string& colname) { | 144 | + GFitsTableCol* __getitem__(const std::string& colname) { |
| 141 | return (*self)[colname]; | 145 | return (*self)[colname]; |
| 142 | } | 146 | } |
| 143 | void __setitem__(const int& colnum, const GFitsTableCol& col) { | 147 | void __setitem__(const int& colnum, const GFitsTableCol& col) { |
| 144 | - (*self)[colnum] = col; | 148 | + self->set(colnum, col); |
| 145 | return; | 149 | return; |
| 146 | } | 150 | } |
| 147 | void __setitem__(const std::string& colname, const GFitsTableCol& col) { | 151 | void __setitem__(const std::string& colname, const GFitsTableCol& col) { |
| 148 | - (*self)[colname] = col; | 152 | + self->set(colname, col); |
| 149 | return; | 153 | return; |
| 150 | } | 154 | } |
| 151 | }; | 155 | }; |
src/fits/GFitsTable.cpp
| @@ -55,8 +55,10 @@ | @@ -55,8 +55,10 @@ | ||
| 55 | /* __ Method name definitions ____________________________________________ */ | 55 | /* __ Method name definitions ____________________________________________ */ |
| 56 | #define G_ACCESS1 "GFitsTable::operator[](int&)" | 56 | #define G_ACCESS1 "GFitsTable::operator[](int&)" |
| 57 | #define G_ACCESS2 "GFitsTable::operator[](std::string&)" | 57 | #define G_ACCESS2 "GFitsTable::operator[](std::string&)" |
| 58 | -#define G_APPEND_COLUMN "GFitsTable::append_column(GFitsTableCol*)" | ||
| 59 | -#define G_INSERT_COLUMN "GFitsTable::insert_column(int, GFitsTableCol*)" | 58 | +#define G_SET1 "GFitsTable::set(int&, GFitsTableCol&)" |
| 59 | +#define G_SET2 "GFitsTable::set(std::string&, GFitsTableCol&)" | ||
| 60 | +#define G_INSERT1 "GFitsTable::insert(int, GFitsTableCol&)" | ||
| 61 | +#define G_INSERT2 "GFitsTable::insert(std::string&, GFitsTableCol&)" | ||
| 60 | #define G_INSERT_ROWS "GFitsTable::insert_rows(int&, int&)" | 62 | #define G_INSERT_ROWS "GFitsTable::insert_rows(int&, int&)" |
| 61 | #define G_REMOVE_ROWS "GFitsTable::remove_rows(int&, int&)" | 63 | #define G_REMOVE_ROWS "GFitsTable::remove_rows(int&, int&)" |
| 62 | #define G_DATA_OPEN "GFitsTable::data_open(void*)" | 64 | #define G_DATA_OPEN "GFitsTable::data_open(void*)" |
| @@ -80,7 +82,7 @@ | @@ -80,7 +82,7 @@ | ||
| 80 | /***********************************************************************//** | 82 | /***********************************************************************//** |
| 81 | * @brief Void constructor | 83 | * @brief Void constructor |
| 82 | * | 84 | * |
| 83 | - * Construct an instance of GFitsTable with zero rows. | 85 | + * Construct void instance. |
| 84 | ***************************************************************************/ | 86 | ***************************************************************************/ |
| 85 | GFitsTable::GFitsTable(void) : GFitsHDU() | 87 | GFitsTable::GFitsTable(void) : GFitsHDU() |
| 86 | { | 88 | { |
| @@ -97,9 +99,9 @@ GFitsTable::GFitsTable(void) : GFitsHDU() | @@ -97,9 +99,9 @@ GFitsTable::GFitsTable(void) : GFitsHDU() | ||
| 97 | * | 99 | * |
| 98 | * @param[in] nrows Number of rows in table. | 100 | * @param[in] nrows Number of rows in table. |
| 99 | * | 101 | * |
| 100 | - * Construct an instance of GFitsTable with a given number of rows. | 102 | + * Construct instance for a specified number of table rows. |
| 101 | ***************************************************************************/ | 103 | ***************************************************************************/ |
| 102 | -GFitsTable::GFitsTable(int nrows) : GFitsHDU() | 104 | +GFitsTable::GFitsTable(const int& nrows) : GFitsHDU() |
| 103 | { | 105 | { |
| 104 | // Initialise class members for clean destruction | 106 | // Initialise class members for clean destruction |
| 105 | init_members(); | 107 | init_members(); |
| @@ -115,7 +117,7 @@ GFitsTable::GFitsTable(int nrows) : GFitsHDU() | @@ -115,7 +117,7 @@ GFitsTable::GFitsTable(int nrows) : GFitsHDU() | ||
| 115 | /***********************************************************************//** | 117 | /***********************************************************************//** |
| 116 | * @brief Copy constructor | 118 | * @brief Copy constructor |
| 117 | * | 119 | * |
| 118 | - * @param[in] table Table from which to construct instance. | 120 | + * @param[in] table Table. |
| 119 | ***************************************************************************/ | 121 | ***************************************************************************/ |
| 120 | GFitsTable::GFitsTable(const GFitsTable& table) : GFitsHDU(table) | 122 | GFitsTable::GFitsTable(const GFitsTable& table) : GFitsHDU(table) |
| 121 | { | 123 | { |
| @@ -153,6 +155,7 @@ GFitsTable::~GFitsTable(void) | @@ -153,6 +155,7 @@ GFitsTable::~GFitsTable(void) | ||
| 153 | * @brief Assignment operator | 155 | * @brief Assignment operator |
| 154 | * | 156 | * |
| 155 | * @param[in] table Table. | 157 | * @param[in] table Table. |
| 158 | + * @return Table. | ||
| 156 | ***************************************************************************/ | 159 | ***************************************************************************/ |
| 157 | GFitsTable& GFitsTable::operator=(const GFitsTable& table) | 160 | GFitsTable& GFitsTable::operator=(const GFitsTable& table) |
| 158 | { | 161 | { |
| @@ -179,16 +182,17 @@ GFitsTable& GFitsTable::operator=(const GFitsTable& table) | @@ -179,16 +182,17 @@ GFitsTable& GFitsTable::operator=(const GFitsTable& table) | ||
| 179 | 182 | ||
| 180 | 183 | ||
| 181 | /***********************************************************************//** | 184 | /***********************************************************************//** |
| 182 | - * @brief Returns reference to table column | 185 | + * @brief Returns pointer to table column |
| 183 | * | 186 | * |
| 184 | * @param[in] colnum Column number [0,...,ncols()-1]. | 187 | * @param[in] colnum Column number [0,...,ncols()-1]. |
| 188 | + * @return Table column pointer. | ||
| 185 | * | 189 | * |
| 186 | * @exception GException::fits_no_data | 190 | * @exception GException::fits_no_data |
| 187 | * No data found in table. | 191 | * No data found in table. |
| 188 | * @exception GException::out_of_range | 192 | * @exception GException::out_of_range |
| 189 | * Column number is out of range. | 193 | * Column number is out of range. |
| 190 | ***************************************************************************/ | 194 | ***************************************************************************/ |
| 191 | -GFitsTableCol& GFitsTable::operator[](const int& colnum) | 195 | +GFitsTableCol* GFitsTable::operator[](const int& colnum) |
| 192 | { | 196 | { |
| 193 | // If there is no data then throw an exception | 197 | // If there is no data then throw an exception |
| 194 | if (m_columns == NULL) { | 198 | if (m_columns == NULL) { |
| @@ -197,8 +201,9 @@ GFitsTableCol& GFitsTable::operator[](const int& colnum) | @@ -197,8 +201,9 @@ GFitsTableCol& GFitsTable::operator[](const int& colnum) | ||
| 197 | 201 | ||
| 198 | // Compile option: raise exception if column number is out of range | 202 | // Compile option: raise exception if column number is out of range |
| 199 | #if defined(G_RANGE_CHECK) | 203 | #if defined(G_RANGE_CHECK) |
| 200 | - if (colnum < 0 || colnum >= m_cols) | 204 | + if (colnum < 0 || colnum >= m_cols) { |
| 201 | throw GException::out_of_range(G_ACCESS1, colnum, 0, m_cols-1); | 205 | throw GException::out_of_range(G_ACCESS1, colnum, 0, m_cols-1); |
| 206 | + } | ||
| 202 | #endif | 207 | #endif |
| 203 | 208 | ||
| 204 | // Get column pointer | 209 | // Get column pointer |
| @@ -207,22 +212,23 @@ GFitsTableCol& GFitsTable::operator[](const int& colnum) | @@ -207,22 +212,23 @@ GFitsTableCol& GFitsTable::operator[](const int& colnum) | ||
| 207 | throw GException::fits_no_data(G_ACCESS1, "No data for this column."); | 212 | throw GException::fits_no_data(G_ACCESS1, "No data for this column."); |
| 208 | } | 213 | } |
| 209 | 214 | ||
| 210 | - // Return reference | ||
| 211 | - return *ptr; | 215 | + // Return pointer |
| 216 | + return ptr; | ||
| 212 | } | 217 | } |
| 213 | 218 | ||
| 214 | 219 | ||
| 215 | /***********************************************************************//** | 220 | /***********************************************************************//** |
| 216 | - * @brief Returns reference to table column (const version) | 221 | + * @brief Returns pointer to table column (const version) |
| 217 | * | 222 | * |
| 218 | * @param[in] colnum Column number [0,...,ncols()-1]. | 223 | * @param[in] colnum Column number [0,...,ncols()-1]. |
| 224 | + * @return Table column pointer. | ||
| 219 | * | 225 | * |
| 220 | * @exception GException::fits_no_data | 226 | * @exception GException::fits_no_data |
| 221 | * No data found in table. | 227 | * No data found in table. |
| 222 | * @exception GException::out_of_range | 228 | * @exception GException::out_of_range |
| 223 | * Column number is out of range. | 229 | * Column number is out of range. |
| 224 | ***************************************************************************/ | 230 | ***************************************************************************/ |
| 225 | -const GFitsTableCol& GFitsTable::operator[](const int& colnum) const | 231 | +const GFitsTableCol* GFitsTable::operator[](const int& colnum) const |
| 226 | { | 232 | { |
| 227 | // If there is no data then throw an exception | 233 | // If there is no data then throw an exception |
| 228 | if (m_columns == NULL) { | 234 | if (m_columns == NULL) { |
| @@ -231,8 +237,9 @@ const GFitsTableCol& GFitsTable::operator[](const int& colnum) const | @@ -231,8 +237,9 @@ const GFitsTableCol& GFitsTable::operator[](const int& colnum) const | ||
| 231 | 237 | ||
| 232 | // Compile option: raise exception if column number is out of range | 238 | // Compile option: raise exception if column number is out of range |
| 233 | #if defined(G_RANGE_CHECK) | 239 | #if defined(G_RANGE_CHECK) |
| 234 | - if (colnum < 0 || colnum >= m_cols) | 240 | + if (colnum < 0 || colnum >= m_cols) { |
| 235 | throw GException::out_of_range(G_ACCESS1, colnum, 0, m_cols-1); | 241 | throw GException::out_of_range(G_ACCESS1, colnum, 0, m_cols-1); |
| 242 | + } | ||
| 236 | #endif | 243 | #endif |
| 237 | 244 | ||
| 238 | // Get column pointer | 245 | // Get column pointer |
| @@ -241,22 +248,23 @@ const GFitsTableCol& GFitsTable::operator[](const int& colnum) const | @@ -241,22 +248,23 @@ const GFitsTableCol& GFitsTable::operator[](const int& colnum) const | ||
| 241 | throw GException::fits_no_data(G_ACCESS1, "No data for this column."); | 248 | throw GException::fits_no_data(G_ACCESS1, "No data for this column."); |
| 242 | } | 249 | } |
| 243 | 250 | ||
| 244 | - // Return reference | ||
| 245 | - return *ptr; | 251 | + // Return pointer |
| 252 | + return ptr; | ||
| 246 | } | 253 | } |
| 247 | 254 | ||
| 248 | 255 | ||
| 249 | /***********************************************************************//** | 256 | /***********************************************************************//** |
| 250 | - * @brief Returns reference to table column | 257 | + * @brief Returns pointer to table column |
| 251 | * | 258 | * |
| 252 | * @param[in] colname Column name. | 259 | * @param[in] colname Column name. |
| 260 | + * @return Table column pointer. | ||
| 253 | * | 261 | * |
| 254 | * @exception GException::fits_no_data | 262 | * @exception GException::fits_no_data |
| 255 | * No data found in table. | 263 | * No data found in table. |
| 256 | * @exception GException::fits_column_not_found | 264 | * @exception GException::fits_column_not_found |
| 257 | * Column name not found. | 265 | * Column name not found. |
| 258 | ***************************************************************************/ | 266 | ***************************************************************************/ |
| 259 | -GFitsTableCol& GFitsTable::operator[](const std::string& colname) | 267 | +GFitsTableCol* GFitsTable::operator[](const std::string& colname) |
| 260 | { | 268 | { |
| 261 | // If there is no data then throw an exception | 269 | // If there is no data then throw an exception |
| 262 | if (m_columns == NULL) { | 270 | if (m_columns == NULL) { |
| @@ -271,22 +279,23 @@ GFitsTableCol& GFitsTable::operator[](const std::string& colname) | @@ -271,22 +279,23 @@ GFitsTableCol& GFitsTable::operator[](const std::string& colname) | ||
| 271 | throw GException::fits_column_not_found(G_ACCESS2, colname); | 279 | throw GException::fits_column_not_found(G_ACCESS2, colname); |
| 272 | } | 280 | } |
| 273 | 281 | ||
| 274 | - // Return reference | ||
| 275 | - return *ptr; | 282 | + // Return pointer |
| 283 | + return ptr; | ||
| 276 | } | 284 | } |
| 277 | 285 | ||
| 278 | 286 | ||
| 279 | /***********************************************************************//** | 287 | /***********************************************************************//** |
| 280 | - * @brief Returns reference to table column (const version) | 288 | + * @brief Returns pointer to table column (const version) |
| 281 | * | 289 | * |
| 282 | * @param[in] colname Column name. | 290 | * @param[in] colname Column name. |
| 291 | + * @return Table column pointer. | ||
| 283 | * | 292 | * |
| 284 | * @exception GException::fits_no_data | 293 | * @exception GException::fits_no_data |
| 285 | * No data found in table. | 294 | * No data found in table. |
| 286 | * @exception GException::fits_column_not_found | 295 | * @exception GException::fits_column_not_found |
| 287 | * Column name not found. | 296 | * Column name not found. |
| 288 | ***************************************************************************/ | 297 | ***************************************************************************/ |
| 289 | -const GFitsTableCol& GFitsTable::operator[](const std::string& colname) const | 298 | +const GFitsTableCol* GFitsTable::operator[](const std::string& colname) const |
| 290 | { | 299 | { |
| 291 | // If there is no data then throw an exception | 300 | // If there is no data then throw an exception |
| 292 | if (m_columns == NULL) { | 301 | if (m_columns == NULL) { |
| @@ -301,8 +310,8 @@ const GFitsTableCol& GFitsTable::operator[](const std::string& colname) const | @@ -301,8 +310,8 @@ const GFitsTableCol& GFitsTable::operator[](const std::string& colname) const | ||
| 301 | throw GException::fits_column_not_found(G_ACCESS2, colname); | 310 | throw GException::fits_column_not_found(G_ACCESS2, colname); |
| 302 | } | 311 | } |
| 303 | 312 | ||
| 304 | - // Return reference | ||
| 305 | - return *ptr; | 313 | + // Return pointer |
| 314 | + return ptr; | ||
| 306 | } | 315 | } |
| 307 | 316 | ||
| 308 | 317 | ||
| @@ -313,29 +322,66 @@ const GFitsTableCol& GFitsTable::operator[](const std::string& colname) const | @@ -313,29 +322,66 @@ const GFitsTableCol& GFitsTable::operator[](const std::string& colname) const | ||
| 313 | ==========================================================================*/ | 322 | ==========================================================================*/ |
| 314 | 323 | ||
| 315 | /***********************************************************************//** | 324 | /***********************************************************************//** |
| 316 | - * @brief Append column to the table | 325 | + * @brief Set column |
| 317 | * | 326 | * |
| 318 | - * @param[in] column Column which should be appended to table. | 327 | + * @param[in] colnum Column number [0,...,ncols()-1]. |
| 328 | + * @param[in] column Table column. | ||
| 329 | + * @return Pointer to table column that has been set. | ||
| 319 | * | 330 | * |
| 320 | - * A column will be appended at the end of the table. See | ||
| 321 | - * GFitsTable::insert_column | ||
| 322 | - * for more details on the method. | 331 | + * Sets the column of a table by making a deep copy of the @p column |
| 332 | + * provided. | ||
| 323 | ***************************************************************************/ | 333 | ***************************************************************************/ |
| 324 | -void GFitsTable::append_column(GFitsTableCol& column) | 334 | +GFitsTableCol* GFitsTable::set(const int& colnum, const GFitsTableCol& column) |
| 325 | { | 335 | { |
| 326 | - // Inserting at the end correspond to appending | ||
| 327 | - insert_column(m_cols, column); | 336 | + // Check if column number is valid |
| 337 | + if (colnum < 0 || colnum >= ncols()) { | ||
| 338 | + throw GException::out_of_range(G_SET1, "Column number", colnum, ncols()); | ||
| 339 | + } | ||
| 328 | 340 | ||
| 329 | - // Return | ||
| 330 | - return; | 341 | + // Free existing column |
| 342 | + if (m_columns[colnum] != NULL) delete m_columns[colnum]; | ||
| 343 | + | ||
| 344 | + // Clone column | ||
| 345 | + m_columns[colnum] = column.clone(); | ||
| 346 | + | ||
| 347 | + // Return pointer to column | ||
| 348 | + return m_columns[colnum]; | ||
| 331 | } | 349 | } |
| 332 | 350 | ||
| 333 | 351 | ||
| 334 | /***********************************************************************//** | 352 | /***********************************************************************//** |
| 353 | + * @brief Set column | ||
| 354 | + * | ||
| 355 | + * @param[in] colname Column name. | ||
| 356 | + * @param[in] column Table column. | ||
| 357 | + * @return Pointer to table column that has been set. | ||
| 358 | + * | ||
| 359 | + * Sets the column of a table by making a deep copy of the @p column | ||
| 360 | + * provided. | ||
| 361 | + ***************************************************************************/ | ||
| 362 | +GFitsTableCol* GFitsTable::set(const std::string& colname, | ||
| 363 | + const GFitsTableCol& column) | ||
| 364 | +{ | ||
| 365 | + // Get column number | ||
| 366 | + int colnum = this->colnum(colname); | ||
| 367 | + | ||
| 368 | + // If column has not been found throw an exception | ||
| 369 | + if (colnum < 0) { | ||
| 370 | + throw GException::fits_column_not_found(G_SET2, colname); | ||
| 371 | + } | ||
| 372 | + | ||
| 373 | + // Set column and return pointer to column | ||
| 374 | + return (set(colnum, column)); | ||
| 375 | +} | ||
| 376 | + | ||
| 377 | + | ||
| 378 | + | ||
| 379 | +/***********************************************************************//** | ||
| 335 | * @brief Insert column into the table | 380 | * @brief Insert column into the table |
| 336 | * | 381 | * |
| 337 | - * @param[in] colnum Column number to be inserted. | ||
| 338 | - * @param[in] column Column which should be inserted into the table. | 382 | + * @param[in] colnum Column number [0,...,ncols()]. |
| 383 | + * @param[in] column Table column. | ||
| 384 | + * @return Pointer to table column that has been appended. | ||
| 339 | * | 385 | * |
| 340 | * @exception GException::fits_bad_col_length | 386 | * @exception GException::fits_bad_col_length |
| 341 | * The length of the column is incompatible with the number of | 387 | * The length of the column is incompatible with the number of |
| @@ -343,7 +389,6 @@ void GFitsTable::append_column(GFitsTableCol& column) | @@ -343,7 +389,6 @@ void GFitsTable::append_column(GFitsTableCol& column) | ||
| 343 | * | 389 | * |
| 344 | * A column will be inserted at position 'colnum' of the table. If the | 390 | * A column will be inserted at position 'colnum' of the table. If the |
| 345 | * position is beyond the end of the table the column will be appended. | 391 | * position is beyond the end of the table the column will be appended. |
| 346 | - * Any 'colnum' value smaller than 0 will be set automatically to 0. | ||
| 347 | * | 392 | * |
| 348 | * If the table is empty and has 0 rows, the number of rows will be set to | 393 | * If the table is empty and has 0 rows, the number of rows will be set to |
| 349 | * the length of the column. | 394 | * the length of the column. |
| @@ -351,24 +396,31 @@ void GFitsTable::append_column(GFitsTableCol& column) | @@ -351,24 +396,31 @@ void GFitsTable::append_column(GFitsTableCol& column) | ||
| 351 | * The length of the column to be inserted has to be identical to the number | 396 | * The length of the column to be inserted has to be identical to the number |
| 352 | * of rows in the table. | 397 | * of rows in the table. |
| 353 | ***************************************************************************/ | 398 | ***************************************************************************/ |
| 354 | -void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | 399 | +GFitsTableCol* GFitsTable::insert(int colnum, const GFitsTableCol& column) |
| 355 | { | 400 | { |
| 356 | // Make sure that 'colnum' is valid. Since we add one column the total | 401 | // Make sure that 'colnum' is valid. Since we add one column the total |
| 357 | // number of columns at return will be m_cols+1, hence the column | 402 | // number of columns at return will be m_cols+1, hence the column |
| 358 | // index is comprised between [0,m_cols] | 403 | // index is comprised between [0,m_cols] |
| 359 | - if (colnum < 0) colnum = 0; | ||
| 360 | - if (colnum > m_cols) colnum = m_cols; | 404 | + //if (colnum < 0) colnum = 0; |
| 405 | + //if (colnum > m_cols) colnum = m_cols; | ||
| 406 | + | ||
| 407 | + // Check if column number is valid | ||
| 408 | + if (colnum < 0 || colnum > ncols()) { | ||
| 409 | + throw GException::out_of_range(G_INSERT1, "Column number", colnum, ncols()+1); | ||
| 410 | + } | ||
| 361 | 411 | ||
| 362 | // If the table is empty and has 0 rows then set the number of rows in | 412 | // If the table is empty and has 0 rows then set the number of rows in |
| 363 | // the table to the length of the column | 413 | // the table to the length of the column |
| 364 | - if (m_columns == NULL && m_rows == 0) | 414 | + if (m_columns == NULL && m_rows == 0) { |
| 365 | m_rows = column.length(); | 415 | m_rows = column.length(); |
| 416 | + } | ||
| 366 | 417 | ||
| 367 | // Throw exception if the column length is incompatible with number of | 418 | // Throw exception if the column length is incompatible with number of |
| 368 | // rows in the table | 419 | // rows in the table |
| 369 | - if (m_rows != column.length()) | ||
| 370 | - throw GException::fits_bad_col_length(G_INSERT_COLUMN, | 420 | + if (m_rows != column.length()) { |
| 421 | + throw GException::fits_bad_col_length(G_INSERT1, | ||
| 371 | column.length(), m_rows); | 422 | column.length(), m_rows); |
| 423 | + } | ||
| 372 | 424 | ||
| 373 | // If no column data exist then allocate them now | 425 | // If no column data exist then allocate them now |
| 374 | if (m_columns == NULL) { | 426 | if (m_columns == NULL) { |
| @@ -389,8 +441,9 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | @@ -389,8 +441,9 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | ||
| 389 | int src; | 441 | int src; |
| 390 | int dst; | 442 | int dst; |
| 391 | for (src = 0, dst = 0; dst < m_cols+1; ++dst) { | 443 | for (src = 0, dst = 0; dst < m_cols+1; ++dst) { |
| 392 | - if (dst == colnum) | 444 | + if (dst == colnum) { |
| 393 | tmp[dst] = NULL; | 445 | tmp[dst] = NULL; |
| 446 | + } | ||
| 394 | else { | 447 | else { |
| 395 | tmp[dst] = m_columns[src]; | 448 | tmp[dst] = m_columns[src]; |
| 396 | src++; | 449 | src++; |
| @@ -415,8 +468,33 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | @@ -415,8 +468,33 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | ||
| 415 | // file | 468 | // file |
| 416 | m_columns[colnum]->colnum(0); | 469 | m_columns[colnum]->colnum(0); |
| 417 | 470 | ||
| 418 | - // Return | ||
| 419 | - return; | 471 | + // Return column pointer |
| 472 | + return (m_columns[colnum]); | ||
| 473 | +} | ||
| 474 | + | ||
| 475 | + | ||
| 476 | +/***********************************************************************//** | ||
| 477 | + * @brief Insert column into the table | ||
| 478 | + * | ||
| 479 | + * @param[in] colname Column name. | ||
| 480 | + * @param[in] column Table column. | ||
| 481 | + * @return Pointer to table column that has been appended | ||
| 482 | + * | ||
| 483 | + * Inserts the column at the position given by the specified column name. | ||
| 484 | + ***************************************************************************/ | ||
| 485 | +GFitsTableCol* GFitsTable::insert(const std::string& colname, | ||
| 486 | + const GFitsTableCol& column) | ||
| 487 | +{ | ||
| 488 | + // Get column number | ||
| 489 | + int colnum = this->colnum(colname); | ||
| 490 | + | ||
| 491 | + // If column has not been found throw an exception | ||
| 492 | + if (colnum < 0) { | ||
| 493 | + throw GException::fits_column_not_found(G_INSERT2, colname); | ||
| 494 | + } | ||
| 495 | + | ||
| 496 | + // Insert column and return pointer to column | ||
| 497 | + return (insert(colnum, column)); | ||
| 420 | } | 498 | } |
| 421 | 499 | ||
| 422 | 500 | ||
| @@ -425,8 +503,9 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | @@ -425,8 +503,9 @@ void GFitsTable::insert_column(int colnum, GFitsTableCol& column) | ||
| 425 | * | 503 | * |
| 426 | * @param[in] nrows Number of rows to be appended. | 504 | * @param[in] nrows Number of rows to be appended. |
| 427 | * | 505 | * |
| 428 | - * This method appends rows to a FITS table. This implies that all columns | ||
| 429 | - * will be loaded into memory. | 506 | + * Appends @p nrows rows at the end of the FITS table. The method calls the |
| 507 | + * insert() method to do the job. Note that a call of this method will lead | ||
| 508 | + * to loading all table data into memory. | ||
| 430 | ***************************************************************************/ | 509 | ***************************************************************************/ |
| 431 | void GFitsTable::append_rows(const int& nrows) | 510 | void GFitsTable::append_rows(const int& nrows) |
| 432 | { | 511 | { |
| @@ -444,27 +523,31 @@ void GFitsTable::append_rows(const int& nrows) | @@ -444,27 +523,31 @@ void GFitsTable::append_rows(const int& nrows) | ||
| 444 | /***********************************************************************//** | 523 | /***********************************************************************//** |
| 445 | * @brief Insert rows into the table | 524 | * @brief Insert rows into the table |
| 446 | * | 525 | * |
| 447 | - * @param[in] rownum Row after which rows should be inserted (0=first row). | 526 | + * @param[in] row Row at which rows are inserted [0,...,nrows()]. |
| 448 | * @param[in] nrows Number of rows to be inserted. | 527 | * @param[in] nrows Number of rows to be inserted. |
| 449 | * | 528 | * |
| 450 | * @exception GException::fits_invalid_row | 529 | * @exception GException::fits_invalid_row |
| 451 | * Specified rownum is invalid. | 530 | * Specified rownum is invalid. |
| 452 | * | 531 | * |
| 453 | - * This method inserts rows into a FITS table. This implies that all columns | ||
| 454 | - * will be loaded into memory. | 532 | + * Inserts @p nrows table rows at the specified @p row into the table. If the |
| 533 | + * @p row index is set to the number of existing rows, nrows(), @p nrows | ||
| 534 | + * will be appened at the end of the table. | ||
| 535 | + * | ||
| 536 | + * Note that this method will load all table data into memory. | ||
| 455 | ***************************************************************************/ | 537 | ***************************************************************************/ |
| 456 | -void GFitsTable::insert_rows(const int& rownum, const int& nrows) | 538 | +void GFitsTable::insert_rows(const int& row, const int& nrows) |
| 457 | { | 539 | { |
| 458 | - // Make sure that rownum is valid | ||
| 459 | - if (rownum < 0 || rownum > m_rows) | ||
| 460 | - throw GException::fits_invalid_row(G_INSERT_ROWS, rownum, m_rows); | 540 | + // Make sure that row is valid |
| 541 | + if (row < 0 || row > m_rows) { | ||
| 542 | + throw GException::fits_invalid_row(G_INSERT_ROWS, row, m_rows); | ||
| 543 | + } | ||
| 461 | 544 | ||
| 462 | // Continue only if there are rows to be inserted | 545 | // Continue only if there are rows to be inserted |
| 463 | if (nrows > 0) { | 546 | if (nrows > 0) { |
| 464 | 547 | ||
| 465 | // Insert rows for all columns | 548 | // Insert rows for all columns |
| 466 | for (int icol = 0; icol < m_cols; ++icol) { | 549 | for (int icol = 0; icol < m_cols; ++icol) { |
| 467 | - m_columns[icol]->insert(rownum, nrows); | 550 | + m_columns[icol]->insert(row, nrows); |
| 468 | } | 551 | } |
| 469 | 552 | ||
| 470 | // Increment number of rows in table | 553 | // Increment number of rows in table |
| @@ -480,7 +563,7 @@ void GFitsTable::insert_rows(const int& rownum, const int& nrows) | @@ -480,7 +563,7 @@ void GFitsTable::insert_rows(const int& rownum, const int& nrows) | ||
| 480 | /***********************************************************************//** | 563 | /***********************************************************************//** |
| 481 | * @brief Remove rows from the table | 564 | * @brief Remove rows from the table |
| 482 | * | 565 | * |
| 483 | - * @param[in] rownum Row after which rows should be removed (0=first row). | 566 | + * @param[in] row Row from which on rows are removed [0,...,nrows()-1]. |
| 484 | * @param[in] nrows Number of rows to be removed. | 567 | * @param[in] nrows Number of rows to be removed. |
| 485 | * | 568 | * |
| 486 | * @exception GException::fits_invalid_row | 569 | * @exception GException::fits_invalid_row |
| @@ -488,25 +571,28 @@ void GFitsTable::insert_rows(const int& rownum, const int& nrows) | @@ -488,25 +571,28 @@ void GFitsTable::insert_rows(const int& rownum, const int& nrows) | ||
| 488 | * @exception GException::fits_invalid_nrows | 571 | * @exception GException::fits_invalid_nrows |
| 489 | * Invalid number of rows specified. | 572 | * Invalid number of rows specified. |
| 490 | * | 573 | * |
| 491 | - * This method inserts rows into a FITS table. This implies that all columns | ||
| 492 | - * will be loaded into memory. | 574 | + * Removes @p nrows table rows from the specified @p row on from the table. |
| 575 | + * | ||
| 576 | + * Note that this method will load all column data into memory. | ||
| 493 | ***************************************************************************/ | 577 | ***************************************************************************/ |
| 494 | -void GFitsTable::remove_rows(const int& rownum, const int& nrows) | 578 | +void GFitsTable::remove_rows(const int& row, const int& nrows) |
| 495 | { | 579 | { |
| 496 | - // Make sure that rownum is valid | ||
| 497 | - if (rownum < 0 || rownum >= m_rows) | ||
| 498 | - throw GException::fits_invalid_row(G_REMOVE_ROWS, rownum, m_rows-1); | 580 | + // Make sure that row is valid |
| 581 | + if (row < 0 || row >= m_rows) { | ||
| 582 | + throw GException::fits_invalid_row(G_REMOVE_ROWS, row, m_rows-1); | ||
| 583 | + } | ||
| 499 | 584 | ||
| 500 | // Make sure that we don't remove beyond the limit | 585 | // Make sure that we don't remove beyond the limit |
| 501 | - if (nrows < 0 || nrows > m_rows-rownum) | ||
| 502 | - throw GException::fits_invalid_nrows(G_REMOVE_ROWS, nrows, m_rows-rownum); | 586 | + if (nrows < 0 || nrows > m_rows-row) { |
| 587 | + throw GException::fits_invalid_nrows(G_REMOVE_ROWS, nrows, m_rows-row); | ||
| 588 | + } | ||
| 503 | 589 | ||
| 504 | // Continue only if there are rows to be removed | 590 | // Continue only if there are rows to be removed |
| 505 | if (nrows > 0) { | 591 | if (nrows > 0) { |
| 506 | 592 | ||
| 507 | - // Insert rows for all columns | 593 | + // Remove rows for all columns |
| 508 | for (int icol = 0; icol < m_cols; ++icol) { | 594 | for (int icol = 0; icol < m_cols; ++icol) { |
| 509 | - m_columns[icol]->remove(rownum, nrows); | 595 | + m_columns[icol]->remove(row, nrows); |
| 510 | } | 596 | } |
| 511 | 597 | ||
| 512 | // Decrement number of rows in table | 598 | // Decrement number of rows in table |
| @@ -520,29 +606,10 @@ void GFitsTable::remove_rows(const int& rownum, const int& nrows) | @@ -520,29 +606,10 @@ void GFitsTable::remove_rows(const int& rownum, const int& nrows) | ||
| 520 | 606 | ||
| 521 | 607 | ||
| 522 | /***********************************************************************//** | 608 | /***********************************************************************//** |
| 523 | - * @brief Return number of rows in table | ||
| 524 | - ***************************************************************************/ | ||
| 525 | -int GFitsTable::nrows(void) const | ||
| 526 | -{ | ||
| 527 | - // Return number of rows | ||
| 528 | - return m_rows; | ||
| 529 | -} | ||
| 530 | - | ||
| 531 | - | ||
| 532 | -/***********************************************************************//** | ||
| 533 | - * @brief Return number of columns in table | ||
| 534 | - ***************************************************************************/ | ||
| 535 | -int GFitsTable::ncols(void) const | ||
| 536 | -{ | ||
| 537 | - // Return number of columns | ||
| 538 | - return m_cols; | ||
| 539 | -} | ||
| 540 | - | ||
| 541 | - | ||
| 542 | -/***********************************************************************//** | ||
| 543 | * @brief Checks the presence of a column in table | 609 | * @brief Checks the presence of a column in table |
| 544 | * | 610 | * |
| 545 | * @param[in] colname Column name. | 611 | * @param[in] colname Column name. |
| 612 | + * @return True of the column exists, false otherwise. | ||
| 546 | ***************************************************************************/ | 613 | ***************************************************************************/ |
| 547 | bool GFitsTable::hascolumn(const std::string& colname) const | 614 | bool GFitsTable::hascolumn(const std::string& colname) const |
| 548 | { | 615 | { |
| @@ -589,8 +656,10 @@ std::string GFitsTable::print(const GChatter& chatter) const | @@ -589,8 +656,10 @@ std::string GFitsTable::print(const GChatter& chatter) const | ||
| 589 | } | 656 | } |
| 590 | 657 | ||
| 591 | // Append table dimensions | 658 | // Append table dimensions |
| 592 | - result.append(gammalib::parformat("Number of rows")+gammalib::str(m_rows)+"\n"); | ||
| 593 | - result.append(gammalib::parformat("Number of columns")+gammalib::str(m_cols)+"\n"); | 659 | + result.append(gammalib::parformat("Number of rows")); |
| 660 | + result.append(gammalib::str(m_rows)+"\n"); | ||
| 661 | + result.append(gammalib::parformat("Number of columns")); | ||
| 662 | + result.append(gammalib::str(m_cols)+"\n"); | ||
| 594 | 663 | ||
| 595 | // Append header information | 664 | // Append header information |
| 596 | result.append(m_header.print(chatter)); | 665 | result.append(m_header.print(chatter)); |
| @@ -1380,10 +1449,12 @@ void GFitsTable::copy_members(const GFitsTable& table) | @@ -1380,10 +1449,12 @@ void GFitsTable::copy_members(const GFitsTable& table) | ||
| 1380 | if (table.m_columns != NULL && m_cols > 0) { | 1449 | if (table.m_columns != NULL && m_cols > 0) { |
| 1381 | m_columns = new GFitsTableCol*[m_cols]; | 1450 | m_columns = new GFitsTableCol*[m_cols]; |
| 1382 | for (int i = 0; i < m_cols; ++i) { | 1451 | for (int i = 0; i < m_cols; ++i) { |
| 1383 | - if (table.m_columns[i] != NULL) | 1452 | + if (table.m_columns[i] != NULL) { |
| 1384 | m_columns[i] = table.m_columns[i]->clone(); | 1453 | m_columns[i] = table.m_columns[i]->clone(); |
| 1385 | - else | 1454 | + } |
| 1455 | + else { | ||
| 1386 | m_columns[i] = NULL; | 1456 | m_columns[i] = NULL; |
| 1457 | + } | ||
| 1387 | } | 1458 | } |
| 1388 | } | 1459 | } |
| 1389 | 1460 | ||
| @@ -1482,10 +1553,12 @@ GFitsTableCol* GFitsTable::alloc_column(int typecode) const | @@ -1482,10 +1553,12 @@ GFitsTableCol* GFitsTable::alloc_column(int typecode) const | ||
| 1482 | * @brief Returns pointer of column with given name | 1553 | * @brief Returns pointer of column with given name |
| 1483 | * | 1554 | * |
| 1484 | * @param[in] colname Name of column. | 1555 | * @param[in] colname Name of column. |
| 1556 | + * @return Pointer to table column (NULL if column has not been found). | ||
| 1485 | * | 1557 | * |
| 1486 | - * This method returns a pointer on the column with the specified name. It | ||
| 1487 | - * returns NULL if no column with the given name was found, or if the | ||
| 1488 | - * column is not allocated. | 1558 | + * Returns a pointer to the column with the specified name. If more columns |
| 1559 | + * with the same name exist, a pointer to the first of these columns is | ||
| 1560 | + * returned. If no column with the specified name is found, a NULL pointer | ||
| 1561 | + * will be returned. | ||
| 1489 | ***************************************************************************/ | 1562 | ***************************************************************************/ |
| 1490 | GFitsTableCol* GFitsTable::ptr_column(const std::string& colname) const | 1563 | GFitsTableCol* GFitsTable::ptr_column(const std::string& colname) const |
| 1491 | { | 1564 | { |
| @@ -1505,3 +1578,32 @@ GFitsTableCol* GFitsTable::ptr_column(const std::string& colname) const | @@ -1505,3 +1578,32 @@ GFitsTableCol* GFitsTable::ptr_column(const std::string& colname) const | ||
| 1505 | // Return pointer | 1578 | // Return pointer |
| 1506 | return ptr; | 1579 | return ptr; |
| 1507 | } | 1580 | } |
| 1581 | + | ||
| 1582 | + | ||
| 1583 | +/***********************************************************************//** | ||
| 1584 | + * @brief Returns column number of a given column name | ||
| 1585 | + * | ||
| 1586 | + * @param[in] colname Name of column. | ||
| 1587 | + * @return Column number (-1 if column has not been found). | ||
| 1588 | + * | ||
| 1589 | + * Returns the column number of the column with the specified name. If more | ||
| 1590 | + * columns with the same name exist, the first of these columns is returned. | ||
| 1591 | + ***************************************************************************/ | ||
| 1592 | +int GFitsTable::colnum(const std::string& colname) const | ||
| 1593 | +{ | ||
| 1594 | + // Initialise column number | ||
| 1595 | + int colnum = -1; | ||
| 1596 | + | ||
| 1597 | + // If there are columns then search for the specified name | ||
| 1598 | + if (m_columns != NULL) { | ||
| 1599 | + for (int i = 0; i < m_cols; ++i) { | ||
| 1600 | + if (m_columns[i]->name() == colname) { | ||
| 1601 | + colnum = i; | ||
| 1602 | + break; | ||
| 1603 | + } | ||
| 1604 | + } | ||
| 1605 | + } | ||
| 1606 | + | ||
| 1607 | + // Return column number | ||
| 1608 | + return colnum; | ||
| 1609 | +} |
src/obs/GEbounds.cpp
| @@ -633,8 +633,8 @@ void GEbounds::read(GFitsTable* hdu) | @@ -633,8 +633,8 @@ void GEbounds::read(GFitsTable* hdu) | ||
| 633 | 633 | ||
| 634 | // Copy information | 634 | // Copy information |
| 635 | for (int i = 0; i < m_num; ++i) { | 635 | for (int i = 0; i < m_num; ++i) { |
| 636 | - m_min[i].keV((*hdu)["E_MIN"].real(i)); | ||
| 637 | - m_max[i].keV((*hdu)["E_MAX"].real(i)); | 636 | + m_min[i].keV((*hdu)["E_MIN"]->real(i)); |
| 637 | + m_max[i].keV((*hdu)["E_MAX"]->real(i)); | ||
| 638 | } | 638 | } |
| 639 | 639 | ||
| 640 | } // endif: there were channels to read | 640 | } // endif: there were channels to read |
| @@ -679,8 +679,8 @@ void GEbounds::write(GFits* file, const std::string& extname) const | @@ -679,8 +679,8 @@ void GEbounds::write(GFits* file, const std::string& extname) const | ||
| 679 | 679 | ||
| 680 | // Create binary table | 680 | // Create binary table |
| 681 | GFitsBinTable* table = new GFitsBinTable(m_num); | 681 | GFitsBinTable* table = new GFitsBinTable(m_num); |
| 682 | - table->append_column(cemin); | ||
| 683 | - table->append_column(cemax); | 682 | + table->append(cemin); |
| 683 | + table->append(cemax); | ||
| 684 | table->extname(extname); | 684 | table->extname(extname); |
| 685 | 685 | ||
| 686 | // Write to FITS file | 686 | // Write to FITS file |
src/obs/GEnergies.cpp
| @@ -438,11 +438,11 @@ void GEnergies::read(const GFitsTable* hdu) | @@ -438,11 +438,11 @@ void GEnergies::read(const GFitsTable* hdu) | ||
| 438 | } | 438 | } |
| 439 | 439 | ||
| 440 | // Get the column with the name "Energy" | 440 | // Get the column with the name "Energy" |
| 441 | - const GFitsTableCol& col_energy = (*hdu)["Energy"]; | 441 | + const GFitsTableCol* col_energy = (*hdu)["Energy"]; |
| 442 | 442 | ||
| 443 | // Set energies | 443 | // Set energies |
| 444 | for (int i = 0; i < num; ++i) { | 444 | for (int i = 0; i < num; ++i) { |
| 445 | - append(GEnergy(col_energy.real(i), unit)); | 445 | + append(GEnergy(col_energy->real(i), unit)); |
| 446 | } | 446 | } |
| 447 | 447 | ||
| 448 | } // endif: there were energy bins | 448 | } // endif: there were energy bins |
| @@ -478,7 +478,7 @@ void GEnergies::write(GFits* file, const std::string& extname) const | @@ -478,7 +478,7 @@ void GEnergies::write(GFits* file, const std::string& extname) const | ||
| 478 | 478 | ||
| 479 | // Create energies table | 479 | // Create energies table |
| 480 | GFitsBinTable* table = new GFitsBinTable(num); | 480 | GFitsBinTable* table = new GFitsBinTable(num); |
| 481 | - table->append_column(col_energy); | 481 | + table->append(col_energy); |
| 482 | table->extname(extname); | 482 | table->extname(extname); |
| 483 | 483 | ||
| 484 | // Write to FITS file | 484 | // Write to FITS file |
src/obs/GGti.cpp
| @@ -606,8 +606,8 @@ void GGti::read(const GFitsTable* hdu) | @@ -606,8 +606,8 @@ void GGti::read(const GFitsTable* hdu) | ||
| 606 | m_start = new GTime[m_num]; | 606 | m_start = new GTime[m_num]; |
| 607 | m_stop = new GTime[m_num]; | 607 | m_stop = new GTime[m_num]; |
| 608 | for (int i = 0; i < m_num; ++i) { | 608 | for (int i = 0; i < m_num; ++i) { |
| 609 | - m_start[i].set((*hdu)["START"].real(i), m_reference); | ||
| 610 | - m_stop[i].set((*hdu)["STOP"].real(i), m_reference); | 609 | + m_start[i].set((*hdu)["START"]->real(i), m_reference); |
| 610 | + m_stop[i].set((*hdu)["STOP"]->real(i), m_reference); | ||
| 611 | } | 611 | } |
| 612 | 612 | ||
| 613 | // Set attributes | 613 | // Set attributes |
| @@ -647,8 +647,8 @@ void GGti::write(GFits* file, const std::string& extname) const | @@ -647,8 +647,8 @@ void GGti::write(GFits* file, const std::string& extname) const | ||
| 647 | 647 | ||
| 648 | // Create GTI table | 648 | // Create GTI table |
| 649 | GFitsBinTable* table = new GFitsBinTable(m_num); | 649 | GFitsBinTable* table = new GFitsBinTable(m_num); |
| 650 | - table->append_column(cstart); | ||
| 651 | - table->append_column(cstop); | 650 | + table->append(cstart); |
| 651 | + table->append(cstop); | ||
| 652 | table->extname(extname); | 652 | table->extname(extname); |
| 653 | 653 | ||
| 654 | // Write time reference | 654 | // Write time reference |
src/sky/GSkymap.cpp
| @@ -1329,7 +1329,7 @@ void GSkymap::read_healpix(const GFitsTable* hdu) | @@ -1329,7 +1329,7 @@ void GSkymap::read_healpix(const GFitsTable* hdu) | ||
| 1329 | // all columns. Only count columns that can fully hold the map. | 1329 | // all columns. Only count columns that can fully hold the map. |
| 1330 | m_num_maps = 0; | 1330 | m_num_maps = 0; |
| 1331 | for (int icol = 0; icol < ncols; ++icol) { | 1331 | for (int icol = 0; icol < ncols; ++icol) { |
| 1332 | - const GFitsTableCol* col = &(*hdu)[icol]; | 1332 | + const GFitsTableCol* col = (*hdu)[icol]; |
| 1333 | if (col->number() % nentry == 0) { | 1333 | if (col->number() % nentry == 0) { |
| 1334 | m_num_maps += col->number() / nentry; | 1334 | m_num_maps += col->number() / nentry; |
| 1335 | } | 1335 | } |
| @@ -1348,7 +1348,7 @@ void GSkymap::read_healpix(const GFitsTable* hdu) | @@ -1348,7 +1348,7 @@ void GSkymap::read_healpix(const GFitsTable* hdu) | ||
| 1348 | for (int icol = 0; icol < ncols; ++icol) { | 1348 | for (int icol = 0; icol < ncols; ++icol) { |
| 1349 | 1349 | ||
| 1350 | // Get next column | 1350 | // Get next column |
| 1351 | - const GFitsTableCol* col = &(*hdu)[icol]; | 1351 | + const GFitsTableCol* col = (*hdu)[icol]; |
| 1352 | 1352 | ||
| 1353 | // Only consider columns that can fully hold maps | 1353 | // Only consider columns that can fully hold maps |
| 1354 | if (col->number() % nentry == 0) { | 1354 | if (col->number() % nentry == 0) { |
| @@ -1562,7 +1562,7 @@ GFitsBinTable* GSkymap::create_healpix_hdu(void) const | @@ -1562,7 +1562,7 @@ GFitsBinTable* GSkymap::create_healpix_hdu(void) const | ||
| 1562 | 1562 | ||
| 1563 | // Create HDU that contains Healpix map in a binary table | 1563 | // Create HDU that contains Healpix map in a binary table |
| 1564 | hdu = new GFitsBinTable(rows); | 1564 | hdu = new GFitsBinTable(rows); |
| 1565 | - hdu->append_column(column); | 1565 | + hdu->append(column); |
| 1566 | 1566 | ||
| 1567 | } // endif: there were pixels | 1567 | } // endif: there were pixels |
| 1568 | 1568 |
src/xspec/GArf.cpp
| @@ -311,9 +311,9 @@ void GArf::read(const GFitsTable* hdu) | @@ -311,9 +311,9 @@ void GArf::read(const GFitsTable* hdu) | ||
| 311 | if (hdu != NULL) { | 311 | if (hdu != NULL) { |
| 312 | 312 | ||
| 313 | // Get pointer to data columns | 313 | // Get pointer to data columns |
| 314 | - const GFitsTableCol* energy_lo = &(*hdu)["ENERG_LO"]; | ||
| 315 | - const GFitsTableCol* energy_hi = &(*hdu)["ENERG_HI"]; | ||
| 316 | - const GFitsTableCol* specresp = &(*hdu)["SPECRESP"]; | 314 | + const GFitsTableCol* energy_lo = (*hdu)["ENERG_LO"]; |
| 315 | + const GFitsTableCol* energy_hi = (*hdu)["ENERG_HI"]; | ||
| 316 | + const GFitsTableCol* specresp = (*hdu)["SPECRESP"]; | ||
| 317 | 317 | ||
| 318 | // Determine effective area conversion factor. Internal | 318 | // Determine effective area conversion factor. Internal |
| 319 | // units are cm^2 | 319 | // units are cm^2 |
| @@ -384,9 +384,9 @@ void GArf::write(GFits& fits) const | @@ -384,9 +384,9 @@ void GArf::write(GFits& fits) const | ||
| 384 | hdu->extname("SPECRESP"); | 384 | hdu->extname("SPECRESP"); |
| 385 | 385 | ||
| 386 | // Append columns to table | 386 | // Append columns to table |
| 387 | - hdu->append_column(energy_lo); | ||
| 388 | - hdu->append_column(energy_hi); | ||
| 389 | - hdu->append_column(specresp); | 387 | + hdu->append(energy_lo); |
| 388 | + hdu->append(energy_hi); | ||
| 389 | + hdu->append(specresp); | ||
| 390 | 390 | ||
| 391 | // Append HDU to FITS file | 391 | // Append HDU to FITS file |
| 392 | fits.append(*hdu); | 392 | fits.append(*hdu); |
src/xspec/GPha.cpp
| @@ -400,7 +400,7 @@ void GPha::read(const GFitsTable* hdu) | @@ -400,7 +400,7 @@ void GPha::read(const GFitsTable* hdu) | ||
| 400 | if (hdu != NULL) { | 400 | if (hdu != NULL) { |
| 401 | 401 | ||
| 402 | // Get data column | 402 | // Get data column |
| 403 | - const GFitsTableCol& col_data = (*hdu)["COUNTS"]; | 403 | + const GFitsTableCol* col_data = (*hdu)["COUNTS"]; |
| 404 | 404 | ||
| 405 | // Extract number of channels in FITS file | 405 | // Extract number of channels in FITS file |
| 406 | int length = hdu->integer("NAXIS2"); | 406 | int length = hdu->integer("NAXIS2"); |
| @@ -423,7 +423,7 @@ void GPha::read(const GFitsTable* hdu) | @@ -423,7 +423,7 @@ void GPha::read(const GFitsTable* hdu) | ||
| 423 | 423 | ||
| 424 | // Copy data | 424 | // Copy data |
| 425 | for (int i = 0; i < length; ++i) { | 425 | for (int i = 0; i < length; ++i) { |
| 426 | - m_counts[i] = col_data.real(i); | 426 | + m_counts[i] = col_data->real(i); |
| 427 | } | 427 | } |
| 428 | 428 | ||
| 429 | } // endif: HDU was valid | 429 | } // endif: HDU was valid |
| @@ -469,14 +469,14 @@ void GPha::write(GFits& fits) const | @@ -469,14 +469,14 @@ void GPha::write(GFits& fits) const | ||
| 469 | hdu->extname("SPECTRUM"); | 469 | hdu->extname("SPECTRUM"); |
| 470 | 470 | ||
| 471 | // Append columns to table | 471 | // Append columns to table |
| 472 | - hdu->append_column(col_chan); | ||
| 473 | - hdu->append_column(col_data); | ||
| 474 | - hdu->append_column(col_stat); | ||
| 475 | - hdu->append_column(col_syst); | ||
| 476 | - hdu->append_column(col_qual); | ||
| 477 | - hdu->append_column(col_grpg); | ||
| 478 | - hdu->append_column(col_area); | ||
| 479 | - hdu->append_column(col_back); | 472 | + hdu->append(col_chan); |
| 473 | + hdu->append(col_data); | ||
| 474 | + hdu->append(col_stat); | ||
| 475 | + hdu->append(col_syst); | ||
| 476 | + hdu->append(col_qual); | ||
| 477 | + hdu->append(col_grpg); | ||
| 478 | + hdu->append(col_area); | ||
| 479 | + hdu->append(col_back); | ||
| 480 | 480 | ||
| 481 | // Append HDU to FITS file | 481 | // Append HDU to FITS file |
| 482 | fits.append(*hdu); | 482 | fits.append(*hdu); |
src/xspec/GRmf.cpp
| @@ -331,12 +331,12 @@ void GRmf::read(const GFitsTable* hdu) | @@ -331,12 +331,12 @@ void GRmf::read(const GFitsTable* hdu) | ||
| 331 | m_ebds_true.clear(); | 331 | m_ebds_true.clear(); |
| 332 | 332 | ||
| 333 | // Get pointer to data columns | 333 | // Get pointer to data columns |
| 334 | - const GFitsTableCol* energy_lo = &(*hdu)["ENERG_LO"]; | ||
| 335 | - const GFitsTableCol* energy_hi = &(*hdu)["ENERG_HI"]; | ||
| 336 | - const GFitsTableCol* n_grp = &(*hdu)["N_GRP"]; | ||
| 337 | - const GFitsTableCol* f_chan = &(*hdu)["F_CHAN"]; | ||
| 338 | - const GFitsTableCol* n_chan = &(*hdu)["N_CHAN"]; | ||
| 339 | - const GFitsTableCol* matrix = &(*hdu)["MATRIX"]; | 334 | + const GFitsTableCol* energy_lo = (*hdu)["ENERG_LO"]; |
| 335 | + const GFitsTableCol* energy_hi = (*hdu)["ENERG_HI"]; | ||
| 336 | + const GFitsTableCol* n_grp = (*hdu)["N_GRP"]; | ||
| 337 | + const GFitsTableCol* f_chan = (*hdu)["F_CHAN"]; | ||
| 338 | + const GFitsTableCol* n_chan = (*hdu)["N_CHAN"]; | ||
| 339 | + const GFitsTableCol* matrix = (*hdu)["MATRIX"]; | ||
| 340 | 340 | ||
| 341 | // Set matrix rows and columns | 341 | // Set matrix rows and columns |
| 342 | int rows = energy_lo->length(); | 342 | int rows = energy_lo->length(); |
| @@ -482,12 +482,12 @@ void GRmf::write(GFits& fits) const | @@ -482,12 +482,12 @@ void GRmf::write(GFits& fits) const | ||
| 482 | hdu->extname("MATRIX"); | 482 | hdu->extname("MATRIX"); |
| 483 | 483 | ||
| 484 | // Append columns to table | 484 | // Append columns to table |
| 485 | - hdu->append_column(energy_lo); | ||
| 486 | - hdu->append_column(energy_hi); | ||
| 487 | - hdu->append_column(n_grp); | ||
| 488 | - hdu->append_column(f_chan); | ||
| 489 | - hdu->append_column(n_chan); | ||
| 490 | - hdu->append_column(matrix); | 485 | + hdu->append(energy_lo); |
| 486 | + hdu->append(energy_hi); | ||
| 487 | + hdu->append(n_grp); | ||
| 488 | + hdu->append(f_chan); | ||
| 489 | + hdu->append(n_chan); | ||
| 490 | + hdu->append(matrix); | ||
| 491 | 491 | ||
| 492 | // Append HDU to FITS file | 492 | // Append HDU to FITS file |
| 493 | fits.append(*hdu); | 493 | fits.append(*hdu); |
test/test_GFits.cpp
| @@ -348,10 +348,10 @@ | @@ -348,10 +348,10 @@ | ||
| 348 | try { \ | 348 | try { \ |
| 349 | GFits fits; \ | 349 | GFits fits; \ |
| 350 | fits.open(filename, true); \ | 350 | fits.open(filename, true); \ |
| 351 | - GFitsBinTable table = GFitsBinTable(nrows); \ | ||
| 352 | - table.append_column(col1); \ | ||
| 353 | - table.insert_column(1, col2); \ | ||
| 354 | - table.append_column(col3); \ | 351 | + GFitsBinTable table(nrows); \ |
| 352 | + table.append(col1); \ | ||
| 353 | + table.insert(1, col2); \ | ||
| 354 | + table.append(col3); \ | ||
| 355 | fits.append(table); \ | 355 | fits.append(table); \ |
| 356 | fits.save(); \ | 356 | fits.save(); \ |
| 357 | fits.close(); \ | 357 | fits.close(); \ |
| @@ -498,8 +498,8 @@ void TestGFits::test_create(void) | @@ -498,8 +498,8 @@ void TestGFits::test_create(void) | ||
| 498 | first(1) = 2.0; | 498 | first(1) = 2.0; |
| 499 | first(2) = 3.0; | 499 | first(2) = 3.0; |
| 500 | second(0) = -99.0; | 500 | second(0) = -99.0; |
| 501 | - table.append_column(first); | ||
| 502 | - table.append_column(second); | 501 | + table.append(first); |
| 502 | + table.append(second); | ||
| 503 | 503 | ||
| 504 | // Append table to FILE file | 504 | // Append table to FILE file |
| 505 | fits.append(table); | 505 | fits.append(table); |
| @@ -529,8 +529,8 @@ void TestGFits::test_create(void) | @@ -529,8 +529,8 @@ void TestGFits::test_create(void) | ||
| 529 | first(1) = 2.0; | 529 | first(1) = 2.0; |
| 530 | first(2) = 3.0; | 530 | first(2) = 3.0; |
| 531 | second(0) = -99.0; | 531 | second(0) = -99.0; |
| 532 | - table.append_column(first); | ||
| 533 | - table.append_column(second); | 532 | + table.append(first); |
| 533 | + table.append(second); | ||
| 534 | 534 | ||
| 535 | // Append table to FILE file | 535 | // Append table to FILE file |
| 536 | fits.append(table); | 536 | fits.append(table); |
| @@ -1024,8 +1024,8 @@ void TestGFits::test_bintable_double(void) | @@ -1024,8 +1024,8 @@ void TestGFits::test_bintable_double(void) | ||
| 1024 | test_try("Read Tables"); | 1024 | test_try("Read Tables"); |
| 1025 | try { | 1025 | try { |
| 1026 | GFits fits(filename); | 1026 | GFits fits(filename); |
| 1027 | - col1 = static_cast<GFitsTableDoubleCol&>((*fits.table(1))["DOUBLE"]); | ||
| 1028 | - col2 = static_cast<GFitsTableDoubleCol&>((*fits.table(1))["DOUBLE10"]); | 1027 | + col1 = static_cast<GFitsTableDoubleCol&>(*(*fits.table(1))["DOUBLE"]); |
| 1028 | + col2 = static_cast<GFitsTableDoubleCol&>(*(*fits.table(1))["DOUBLE10"]); | ||
| 1029 | fits.close(); | 1029 | fits.close(); |
| 1030 | test_try_success(); | 1030 | test_try_success(); |
| 1031 | } | 1031 | } |
| @@ -1078,8 +1078,8 @@ void TestGFits::test_bintable_float(void) | @@ -1078,8 +1078,8 @@ void TestGFits::test_bintable_float(void) | ||
| 1078 | test_try("Read Tables"); | 1078 | test_try("Read Tables"); |
| 1079 | try { | 1079 | try { |
| 1080 | GFits fits(filename); | 1080 | GFits fits(filename); |
| 1081 | - col1 = static_cast<GFitsTableFloatCol&>((*fits.table(1))["FLOAT"]); | ||
| 1082 | - col2 = static_cast<GFitsTableFloatCol&>((*fits.table(1))["FLOAT10"]); | 1081 | + col1 = static_cast<GFitsTableFloatCol&>(*(*fits.table(1))["FLOAT"]); |
| 1082 | + col2 = static_cast<GFitsTableFloatCol&>(*(*fits.table(1))["FLOAT10"]); | ||
| 1083 | fits.close(); | 1083 | fits.close(); |
| 1084 | test_try_success(); | 1084 | test_try_success(); |
| 1085 | } | 1085 | } |
| @@ -1133,8 +1133,8 @@ void TestGFits::test_bintable_short(void) | @@ -1133,8 +1133,8 @@ void TestGFits::test_bintable_short(void) | ||
| 1133 | test_try("Read Tables"); | 1133 | test_try("Read Tables"); |
| 1134 | try { | 1134 | try { |
| 1135 | GFits fits(filename); | 1135 | GFits fits(filename); |
| 1136 | - col1 = static_cast<GFitsTableShortCol&>((*fits.table(1))["SHORT"]); | ||
| 1137 | - col2 = static_cast<GFitsTableShortCol&>((*fits.table(1))["SHORT10"]); | 1136 | + col1 = static_cast<GFitsTableShortCol&>(*(*fits.table(1))["SHORT"]); |
| 1137 | + col2 = static_cast<GFitsTableShortCol&>(*(*fits.table(1))["SHORT10"]); | ||
| 1138 | fits.close(); | 1138 | fits.close(); |
| 1139 | test_try_success(); | 1139 | test_try_success(); |
| 1140 | } | 1140 | } |
| @@ -1188,8 +1188,8 @@ void TestGFits::test_bintable_short(void) | @@ -1188,8 +1188,8 @@ void TestGFits::test_bintable_short(void) | ||
| 1188 | test_try("Read Tables"); | 1188 | test_try("Read Tables"); |
| 1189 | try { | 1189 | try { |
| 1190 | GFits fits(filename); | 1190 | GFits fits(filename); |
| 1191 | - col1 = static_cast<GFitsTableUShortCol&>((*fits.table(1))["USHORT"]); | ||
| 1192 | - col2 = static_cast<GFitsTableUShortCol&>((*fits.table(1))["USHORT10"]); | 1191 | + col1 = static_cast<GFitsTableUShortCol&>(*(*fits.table(1))["USHORT"]); |
| 1192 | + col2 = static_cast<GFitsTableUShortCol&>(*(*fits.table(1))["USHORT10"]); | ||
| 1193 | fits.close(); | 1193 | fits.close(); |
| 1194 | test_try_success(); | 1194 | test_try_success(); |
| 1195 | } | 1195 | } |
| @@ -1243,8 +1243,8 @@ void TestGFits::test_bintable_long(void) | @@ -1243,8 +1243,8 @@ void TestGFits::test_bintable_long(void) | ||
| 1243 | test_try("Read Tables"); | 1243 | test_try("Read Tables"); |
| 1244 | try { | 1244 | try { |
| 1245 | GFits fits(filename); | 1245 | GFits fits(filename); |
| 1246 | - col1 = static_cast<GFitsTableLongCol&>((*fits.table(1))["LONG"]); | ||
| 1247 | - col2 = static_cast<GFitsTableLongCol&>((*fits.table(1))["LONG10"]); | 1246 | + col1 = static_cast<GFitsTableLongCol&>(*(*fits.table(1))["LONG"]); |
| 1247 | + col2 = static_cast<GFitsTableLongCol&>(*(*fits.table(1))["LONG10"]); | ||
| 1248 | fits.close(); | 1248 | fits.close(); |
| 1249 | test_try_success(); | 1249 | test_try_success(); |
| 1250 | } | 1250 | } |
| @@ -1298,8 +1298,8 @@ void TestGFits::test_bintable_longlong(void) | @@ -1298,8 +1298,8 @@ void TestGFits::test_bintable_longlong(void) | ||
| 1298 | test_try("Read Tables"); | 1298 | test_try("Read Tables"); |
| 1299 | try { | 1299 | try { |
| 1300 | GFits fits(filename); | 1300 | GFits fits(filename); |
| 1301 | - col1 = static_cast<GFitsTableLongLongCol&>((*fits.table(1))["LONGLONG"]); | ||
| 1302 | - col2 = static_cast<GFitsTableLongLongCol&>((*fits.table(1))["LONGLONG10"]); | 1301 | + col1 = static_cast<GFitsTableLongLongCol&>(*(*fits.table(1))["LONGLONG"]); |
| 1302 | + col2 = static_cast<GFitsTableLongLongCol&>(*(*fits.table(1))["LONGLONG10"]); | ||
| 1303 | fits.close(); | 1303 | fits.close(); |
| 1304 | test_try_success(); | 1304 | test_try_success(); |
| 1305 | } | 1305 | } |
| @@ -1353,8 +1353,8 @@ void TestGFits::test_bintable_ulong(void) | @@ -1353,8 +1353,8 @@ void TestGFits::test_bintable_ulong(void) | ||
| 1353 | test_try("Read Tables"); | 1353 | test_try("Read Tables"); |
| 1354 | try { | 1354 | try { |
| 1355 | GFits fits(filename); | 1355 | GFits fits(filename); |
| 1356 | - col1 = static_cast<GFitsTableULongCol&>((*fits.table(1))["ULONG"]); | ||
| 1357 | - col2 = static_cast<GFitsTableULongCol&>((*fits.table(1))["ULONG10"]); | 1356 | + col1 = static_cast<GFitsTableULongCol&>(*(*fits.table(1))["ULONG"]); |
| 1357 | + col2 = static_cast<GFitsTableULongCol&>(*(*fits.table(1))["ULONG10"]); | ||
| 1358 | fits.close(); | 1358 | fits.close(); |
| 1359 | test_try_success(); | 1359 | test_try_success(); |
| 1360 | } | 1360 | } |
| @@ -1409,8 +1409,8 @@ void TestGFits::test_bintable_string(void) | @@ -1409,8 +1409,8 @@ void TestGFits::test_bintable_string(void) | ||
| 1409 | test_try("Read Tables"); | 1409 | test_try("Read Tables"); |
| 1410 | try { | 1410 | try { |
| 1411 | GFits fits(filename); | 1411 | GFits fits(filename); |
| 1412 | - col1 = static_cast<GFitsTableStringCol&>((*fits.table(1))["STRING"]); | ||
| 1413 | - col2 = static_cast<GFitsTableStringCol&>((*fits.table(1))["STRING10"]); | 1412 | + col1 = static_cast<GFitsTableStringCol&>(*(*fits.table(1))["STRING"]); |
| 1413 | + col2 = static_cast<GFitsTableStringCol&>(*(*fits.table(1))["STRING10"]); | ||
| 1414 | fits.close(); | 1414 | fits.close(); |
| 1415 | test_try_success(); | 1415 | test_try_success(); |
| 1416 | } | 1416 | } |
| @@ -1464,8 +1464,8 @@ void TestGFits::test_bintable_logical(void) | @@ -1464,8 +1464,8 @@ void TestGFits::test_bintable_logical(void) | ||
| 1464 | test_try("Read Tables"); | 1464 | test_try("Read Tables"); |
| 1465 | try { | 1465 | try { |
| 1466 | GFits fits(filename); | 1466 | GFits fits(filename); |
| 1467 | - col1 = static_cast<GFitsTableBoolCol&>((*fits.table(1))["LOGICAL"]); | ||
| 1468 | - col2 = static_cast<GFitsTableBoolCol&>((*fits.table(1))["LOGICAL10"]); | 1467 | + col1 = static_cast<GFitsTableBoolCol&>(*(*fits.table(1))["LOGICAL"]); |
| 1468 | + col2 = static_cast<GFitsTableBoolCol&>(*(*fits.table(1))["LOGICAL10"]); | ||
| 1469 | fits.close(); | 1469 | fits.close(); |
| 1470 | test_try_success(); | 1470 | test_try_success(); |
| 1471 | } | 1471 | } |
| @@ -1519,8 +1519,8 @@ void TestGFits::test_bintable_bit(void) | @@ -1519,8 +1519,8 @@ void TestGFits::test_bintable_bit(void) | ||
| 1519 | test_try("Read Tables"); | 1519 | test_try("Read Tables"); |
| 1520 | try { | 1520 | try { |
| 1521 | GFits fits(filename); | 1521 | GFits fits(filename); |
| 1522 | - col1 = static_cast<GFitsTableBitCol&>((*fits.table(1))["BIT"]); | ||
| 1523 | - col2 = static_cast<GFitsTableBitCol&>((*fits.table(1))["BIT10"]); | 1522 | + col1 = *(static_cast<GFitsTableBitCol*>((*fits.table(1))["BIT"])); |
| 1523 | + col2 = *(static_cast<GFitsTableBitCol*>((*fits.table(1))["BIT10"])); | ||
| 1524 | fits.close(); | 1524 | fits.close(); |
| 1525 | test_try_success(); | 1525 | test_try_success(); |
| 1526 | } | 1526 | } |
test/test_GFits.py
| @@ -154,34 +154,34 @@ class Test(GPythonTestSuite): | @@ -154,34 +154,34 @@ class Test(GPythonTestSuite): | ||
| 154 | 154 | ||
| 155 | # Set ASCII table | 155 | # Set ASCII table |
| 156 | tbl_ascii = GFitsAsciiTable() | 156 | tbl_ascii = GFitsAsciiTable() |
| 157 | - # tbl_ascii.append_column(col1) # Need to implement ?/! | ||
| 158 | - # tbl_ascii.append_column(col2) # Need to implement ?/! | ||
| 159 | - tbl_ascii.append_column(col3) | ||
| 160 | - tbl_ascii.append_column(col4) | ||
| 161 | - tbl_ascii.append_column(col5) | ||
| 162 | - tbl_ascii.append_column(col6) | ||
| 163 | - tbl_ascii.append_column(col7) | ||
| 164 | - tbl_ascii.append_column(col8) | ||
| 165 | - tbl_ascii.append_column(col9) | ||
| 166 | - tbl_ascii.append_column(col10) | ||
| 167 | - tbl_ascii.append_column(col11) | 157 | + # tbl_ascii.append(col1) # Need to implement ?/! |
| 158 | + # tbl_ascii.append(col2) # Need to implement ?/! | ||
| 159 | + tbl_ascii.append(col3) | ||
| 160 | + tbl_ascii.append(col4) | ||
| 161 | + tbl_ascii.append(col5) | ||
| 162 | + tbl_ascii.append(col6) | ||
| 163 | + tbl_ascii.append(col7) | ||
| 164 | + tbl_ascii.append(col8) | ||
| 165 | + tbl_ascii.append(col9) | ||
| 166 | + tbl_ascii.append(col10) | ||
| 167 | + tbl_ascii.append(col11) | ||
| 168 | tbl_ascii.extname("ASCII table") | 168 | tbl_ascii.extname("ASCII table") |
| 169 | fits.append(tbl_ascii) | 169 | fits.append(tbl_ascii) |
| 170 | sys.stdout.write(".") | 170 | sys.stdout.write(".") |
| 171 | 171 | ||
| 172 | # Set binary table | 172 | # Set binary table |
| 173 | tbl_bin = GFitsBinTable() | 173 | tbl_bin = GFitsBinTable() |
| 174 | - tbl_bin.append_column(col1) | ||
| 175 | - tbl_bin.append_column(col2) | ||
| 176 | - tbl_bin.append_column(col3) | ||
| 177 | - tbl_bin.append_column(col4) | ||
| 178 | - tbl_bin.append_column(col5) | ||
| 179 | - tbl_bin.append_column(col6) | ||
| 180 | - tbl_bin.append_column(col7) | ||
| 181 | - tbl_bin.append_column(col8) | ||
| 182 | - tbl_bin.append_column(col9) | ||
| 183 | - tbl_bin.append_column(col10) | ||
| 184 | - tbl_bin.append_column(col11) | 174 | + tbl_bin.append(col1) |
| 175 | + tbl_bin.append(col2) | ||
| 176 | + tbl_bin.append(col3) | ||
| 177 | + tbl_bin.append(col4) | ||
| 178 | + tbl_bin.append(col5) | ||
| 179 | + tbl_bin.append(col6) | ||
| 180 | + tbl_bin.append(col7) | ||
| 181 | + tbl_bin.append(col8) | ||
| 182 | + tbl_bin.append(col9) | ||
| 183 | + tbl_bin.append(col10) | ||
| 184 | + tbl_bin.append(col11) | ||
| 185 | tbl_bin.extname("Binary table") | 185 | tbl_bin.extname("Binary table") |
| 186 | fits.append(tbl_bin) | 186 | fits.append(tbl_bin) |
| 187 | sys.stdout.write(".") | 187 | sys.stdout.write(".") |