Commit 6c59bd24c09b007349ed4f878e0d5c20197ae1c8

Authored by knodlseder
1 parent e21b42cd

implement vector loading

include/GException.hpp
@@ -144,7 +144,19 @@ public: @@ -144,7 +144,19 @@ public:
144 // FITS keyword not found error 144 // FITS keyword not found error
145 class fits_key_not_found : public GExceptionHandler { 145 class fits_key_not_found : public GExceptionHandler {
146 public: 146 public:
147 - fits_key_not_found(string origin, string keyname, int status); 147 + fits_key_not_found(string origin, string keyname, int status = 0);
  148 + };
  149 +
  150 + // FITS column not found error
  151 + class fits_column_not_found : public GExceptionHandler {
  152 + public:
  153 + fits_column_not_found(string origin, string colname, int status = 0);
  154 + };
  155 +
  156 + // FITS HDU not found error
  157 + class fits_hdu_not_found : public GExceptionHandler {
  158 + public:
  159 + fits_hdu_not_found(string origin, string extname, int status = 0);
148 }; 160 };
149 161
150 // FITS unknown HDU type 162 // FITS unknown HDU type
@@ -153,7 +165,7 @@ public: @@ -153,7 +165,7 @@ public:
153 fits_unknown_HDU_type(string origin, int type); 165 fits_unknown_HDU_type(string origin, int type);
154 }; 166 };
155 167
156 - // FITS unknown HDU type 168 + // FITS HDU is not a table
157 class fits_HDU_not_a_table : public GExceptionHandler { 169 class fits_HDU_not_a_table : public GExceptionHandler {
158 public: 170 public:
159 fits_HDU_not_a_table(string origin, int type); 171 fits_HDU_not_a_table(string origin, int type);
@@ -165,7 +177,7 @@ public: @@ -165,7 +177,7 @@ public:
165 fits_invalid_type(string origin, string message); 177 fits_invalid_type(string origin, string message);
166 }; 178 };
167 179
168 - // FITS unable column type 180 + // FITS unknown column type
169 class fits_unknown_coltype : public GExceptionHandler { 181 class fits_unknown_coltype : public GExceptionHandler {
170 public: 182 public:
171 fits_unknown_coltype(string origin, int type); 183 fits_unknown_coltype(string origin, int type);
include/GLATResponse.hpp
@@ -74,13 +74,13 @@ public: @@ -74,13 +74,13 @@ public:
74 74
75 private: 75 private:
76 // Private methods 76 // Private methods
77 - void init_members(void);  
78 - void copy_members(const GLATResponse& rsp);  
79 - void free_members(void);  
80 - void init_aeff(void);  
81 - void init_psf(void);  
82 - void init_edisp(void);  
83 - GVector get_fits_column(const GFitsHDU* hdu, const std::string& colname); 77 + void init_members(void);
  78 + void copy_members(const GLATResponse& rsp);
  79 + void free_members(void);
  80 + void init_aeff(void);
  81 + void init_psf(void);
  82 + void init_edisp(void);
  83 + GVector get_fits_vector(const GFitsHDU* hdu, const std::string& colname, int row = 0);
84 84
85 // Private data area 85 // Private data area
86 86
src/GException.cpp
@@ -258,6 +258,26 @@ GException::fits_key_not_found::fits_key_not_found(string origin, string keyname @@ -258,6 +258,26 @@ GException::fits_key_not_found::fits_key_not_found(string origin, string keyname
258 258
259 259
260 /*************************************************************************** 260 /***************************************************************************
  261 + * FITS column not found error *
  262 + ***************************************************************************/
  263 +GException::fits_column_not_found::fits_column_not_found(string origin, string colname, int status)
  264 +{
  265 + m_origin = origin;
  266 + m_message = "Column '" + colname + "' not found in table";
  267 +}
  268 +
  269 +
  270 +/***************************************************************************
  271 + * FITS HDU not found error *
  272 + ***************************************************************************/
  273 +GException::fits_hdu_not_found::fits_hdu_not_found(string origin, string extname, int status)
  274 +{
  275 + m_origin = origin;
  276 + m_message = "HDU '" + extname + "' not found in FITS file";
  277 +}
  278 +
  279 +
  280 +/***************************************************************************
261 * Unknown HDU type found * 281 * Unknown HDU type found *
262 ***************************************************************************/ 282 ***************************************************************************/
263 GException::fits_unknown_HDU_type::fits_unknown_HDU_type(string origin, int type) 283 GException::fits_unknown_HDU_type::fits_unknown_HDU_type(string origin, int type)
src/rsp/GLATResponse.cpp
@@ -13,8 +13,7 @@ @@ -13,8 +13,7 @@
13 ***************************************************************************/ 13 ***************************************************************************/
14 14
15 /* __ Includes ___________________________________________________________ */ 15 /* __ Includes ___________________________________________________________ */
16 -//#include <vector>  
17 -#include <iostream> // cout, cerr 16 +#include <iostream>
18 #include "GException.hpp" 17 #include "GException.hpp"
19 #include "GVector.hpp" 18 #include "GVector.hpp"
20 #include "GLATResponse.hpp" 19 #include "GLATResponse.hpp"
@@ -24,6 +23,10 @@ @@ -24,6 +23,10 @@
24 /* __ Namespaces _________________________________________________________ */ 23 /* __ Namespaces _________________________________________________________ */
25 24
26 /* __ Method name definitions ____________________________________________ */ 25 /* __ Method name definitions ____________________________________________ */
  26 +#define G_INIT_AEFF "GLATResponse::init_aeff()"
  27 +#define G_INIT_PSF "GLATResponse::init_psf()"
  28 +#define G_INIT_EDISP "GLATResponse::init_edisp()"
  29 +#define G_GET_FITS_VECTOR "GLATResponse::get_fits_vector(const GFitsHDU*, const std::string&, int)"
27 30
28 /* __ Macros _____________________________________________________________ */ 31 /* __ Macros _____________________________________________________________ */
29 32
@@ -252,26 +255,17 @@ void GLATResponse::init_aeff(void) @@ -252,26 +255,17 @@ void GLATResponse::init_aeff(void)
252 GFits file; 255 GFits file;
253 file.open(m_caldb + "/" + filename); 256 file.open(m_caldb + "/" + filename);
254 257
255 - // Get pointer towards effective area HDU 258 + // Get pointer to effective area HDU
256 GFitsHDU* hdu = file.hdu("EFFECTIVE AREA"); 259 GFitsHDU* hdu = file.hdu("EFFECTIVE AREA");
257 - if (hdu == NULL) {  
258 - cout << endl << "TEST ERROR: Unable to find HDU <EFFECTIVE AREA>." << endl;  
259 - throw;  
260 - }  
261 -  
262 - // Get pointers to data columns  
263 - GFitsTableFltCol* energ_lo = (GFitsTableFltCol*)hdu->column("ENERG_LO");  
264 - GFitsTableFltCol* energ_hi = (GFitsTableFltCol*)hdu->column("ENERG_HI");  
265 - GFitsTableFltCol* ctheta_lo = (GFitsTableFltCol*)hdu->column("CTHETA_LO");  
266 - GFitsTableFltCol* ctheta_hi = (GFitsTableFltCol*)hdu->column("CTHETA_HI");  
267 - GFitsTableFltCol* effarea = (GFitsTableFltCol*)hdu->column("EFFAREA");  
268 - if (energ_lo == NULL || energ_hi == NULL ||  
269 - ctheta_lo == NULL || ctheta_hi == NULL || effarea == NULL) {  
270 - cout << endl << "TEST ERROR: Unable to get <EFFECTIVE AREA> columns." << endl;  
271 - throw;  
272 - } 260 + if (hdu == NULL)
  261 + throw GException::fits_hdu_not_found(G_INIT_AEFF, "EFFECTIVE AREA");
273 262
274 - // ... 263 + // Get the data
  264 + GVector energ_lo = get_fits_vector(hdu, "ENERG_LO");
  265 + GVector energ_hi = get_fits_vector(hdu, "ENERG_HI");
  266 + GVector ctheta_lo = get_fits_vector(hdu, "CTHETA_LO");
  267 + GVector ctheta_hi = get_fits_vector(hdu, "CTHETA_HI");
  268 + GVector effarea = get_fits_vector(hdu, "EFFAREA");
275 269
276 // Return 270 // Return
277 return; 271 return;
@@ -291,25 +285,20 @@ void GLATResponse::init_psf(void) @@ -291,25 +285,20 @@ void GLATResponse::init_psf(void)
291 GFits file; 285 GFits file;
292 file.open(m_caldb + "/" + filename); 286 file.open(m_caldb + "/" + filename);
293 287
294 - // Get pointer towards PSF HDU 288 + // Get pointer to PSF HDU
295 GFitsHDU* hdu = file.hdu("RPSF"); 289 GFitsHDU* hdu = file.hdu("RPSF");
296 - if (hdu == NULL) {  
297 - cout << endl << "TEST ERROR: Unable to find HDU <RPSF>." << endl;  
298 - throw;  
299 - }  
300 -  
301 - // Get data  
302 - GVector energ_lo = get_fits_column(hdu, "ENERG_LO");  
303 -/*  
304 - GVector energ_hi = get_fits_column(hdu, "ENERG_HI");  
305 - GVector ctheta_lo = get_fits_column(hdu, "CTHETA_LO");  
306 - GVector ctheta_hi = get_fits_column(hdu, "CTHETA_HI");  
307 - GVector ncore = get_fits_column(hdu, "NCORE");  
308 - GVector sigma = get_fits_column(hdu, "SIGMA");  
309 - GVector gcore = get_fits_column(hdu, "GCORE");  
310 - GVector gtail = get_fits_column(hdu, "GTAIL");  
311 -*/  
312 - // ... 290 + if (hdu == NULL)
  291 + throw GException::fits_hdu_not_found(G_INIT_PSF, "RPSF");
  292 +
  293 + // Get the data
  294 + GVector energ_lo = get_fits_vector(hdu, "ENERG_LO");
  295 + GVector energ_hi = get_fits_vector(hdu, "ENERG_HI");
  296 + GVector ctheta_lo = get_fits_vector(hdu, "CTHETA_LO");
  297 + GVector ctheta_hi = get_fits_vector(hdu, "CTHETA_HI");
  298 + GVector ncore = get_fits_vector(hdu, "NCORE");
  299 + GVector sigma = get_fits_vector(hdu, "SIGMA");
  300 + GVector gcore = get_fits_vector(hdu, "GCORE");
  301 + GVector gtail = get_fits_vector(hdu, "GTAIL");
313 302
314 // Return 303 // Return
315 return; 304 return;
@@ -331,29 +320,20 @@ void GLATResponse::init_edisp(void) @@ -331,29 +320,20 @@ void GLATResponse::init_edisp(void)
331 320
332 // Get pointer towards energy dispersion HDU 321 // Get pointer towards energy dispersion HDU
333 GFitsHDU* hdu = file.hdu("ENERGY DISPERSION"); 322 GFitsHDU* hdu = file.hdu("ENERGY DISPERSION");
334 - if (hdu == NULL) {  
335 - cout << endl << "TEST ERROR: Unable to find HDU <ENERGY DISPERSION>." << endl;  
336 - throw;  
337 - }  
338 -  
339 - // Get pointers to data columns  
340 - GFitsTableFltCol* energ_lo = (GFitsTableFltCol*)hdu->column("ENERG_LO");  
341 - GFitsTableFltCol* energ_hi = (GFitsTableFltCol*)hdu->column("ENERG_HI");  
342 - GFitsTableFltCol* ctheta_lo = (GFitsTableFltCol*)hdu->column("CTHETA_LO");  
343 - GFitsTableFltCol* ctheta_hi = (GFitsTableFltCol*)hdu->column("CTHETA_HI");  
344 - GFitsTableFltCol* dnorm = (GFitsTableFltCol*)hdu->column("DNORM");  
345 - GFitsTableFltCol* ltail = (GFitsTableFltCol*)hdu->column("LTAIL");  
346 - GFitsTableFltCol* rwidth = (GFitsTableFltCol*)hdu->column("RWIDTH");  
347 - GFitsTableFltCol* nr2 = (GFitsTableFltCol*)hdu->column("NR2");  
348 - GFitsTableFltCol* lt2 = (GFitsTableFltCol*)hdu->column("LT2");  
349 - GFitsTableFltCol* rt2 = (GFitsTableFltCol*)hdu->column("RT2");  
350 - if (energ_lo == NULL || energ_hi == NULL ||  
351 - ctheta_lo == NULL || ctheta_hi == NULL ||  
352 - dnorm == NULL || ltail == NULL || rwidth == NULL ||  
353 - nr2 == NULL || lt2 == NULL || rt2 == NULL) {  
354 - cout << endl << "TEST ERROR: Unable to get <ENERGY DISPERSION> columns." << endl;  
355 - throw;  
356 - } 323 + if (hdu == NULL)
  324 + throw GException::fits_hdu_not_found(G_INIT_EDISP, "ENERGY DISPERSION");
  325 +
  326 + // Get the data
  327 + GVector energ_lo = get_fits_vector(hdu, "ENERG_LO");
  328 + GVector energ_hi = get_fits_vector(hdu, "ENERG_HI");
  329 + GVector ctheta_lo = get_fits_vector(hdu, "CTHETA_LO");
  330 + GVector ctheta_hi = get_fits_vector(hdu, "CTHETA_HI");
  331 + GVector dnorm = get_fits_vector(hdu, "DNORM");
  332 + GVector ltail = get_fits_vector(hdu, "LTAIL");
  333 + GVector rwidth = get_fits_vector(hdu, "RWIDTH");
  334 + GVector nr2 = get_fits_vector(hdu, "NR2");
  335 + GVector lt2 = get_fits_vector(hdu, "LT2");
  336 + GVector rt2 = get_fits_vector(hdu, "RT2");
357 337
358 // ... 338 // ...
359 339
@@ -418,22 +398,24 @@ void GLATResponse::free_members(void) @@ -418,22 +398,24 @@ void GLATResponse::free_members(void)
418 398
419 399
420 /*************************************************************************** 400 /***************************************************************************
421 - * Load floating point data from column into vector * 401 + * Load floating point data from vector column into vector *
422 * ----------------------------------------------------------------------- * 402 * ----------------------------------------------------------------------- *
  403 + * All information is stored in the first table row using vector columns. *
423 ***************************************************************************/ 404 ***************************************************************************/
424 -GVector GLATResponse::get_fits_column(const GFitsHDU* hdu, const std::string& colname) 405 +GVector GLATResponse::get_fits_vector(const GFitsHDU* hdu, const std::string& colname, int row)
425 { 406 {
426 - // Get pointer on column  
427 - GFitsTableFltCol* ptr = (GFitsTableFltCol*)hdu->column(colname); 407 + // Get pointer to
  408 + GFitsTableCol* ptr = hdu->column(colname);
428 if (ptr == NULL) 409 if (ptr == NULL)
429 - throw; 410 + throw GException::fits_column_not_found(G_GET_FITS_VECTOR, colname);
  411 +
  412 + // Determine number of entries
  413 + int num = ptr->repeat();
430 414
431 // Load data into vector 415 // Load data into vector
432 - int num = ptr->repeat();  
433 GVector data(num); 416 GVector data(num);
434 for (int i = 0; i < num; ++i) 417 for (int i = 0; i < num; ++i)
435 - data(i) = ptr->real(0,i);  
436 - cout << data << endl; 418 + data(i) = ptr->real(row,i);
437 419
438 // Return vector 420 // Return vector
439 return data; 421 return data;