Commit b95897e93bc71944fcdcfb22f402fe89da0fad10
1 parent
0c9205e3
use GTime in interpolation
Showing
1 changed file
with
33 additions
and
7 deletions
inst/cta/src/GCTAPointing.cpp
| @@ -31,6 +31,7 @@ | @@ -31,6 +31,7 @@ | ||
| 31 | #include "GCTAPointing.hpp" | 31 | #include "GCTAPointing.hpp" |
| 32 | #include "GTools.hpp" | 32 | #include "GTools.hpp" |
| 33 | #include "GFits.hpp" | 33 | #include "GFits.hpp" |
| 34 | +#include "GHorizDir.hpp" | ||
| 34 | 35 | ||
| 35 | /* __ Method name definitions ____________________________________________ */ | 36 | /* __ Method name definitions ____________________________________________ */ |
| 36 | 37 | ||
| @@ -45,11 +46,15 @@ | @@ -45,11 +46,15 @@ | ||
| 45 | * The advantage of this method is that ctools does not need to | 46 | * The advantage of this method is that ctools does not need to |
| 46 | * implement ra/dec to alt/az coordinate conversions, since the values | 47 | * implement ra/dec to alt/az coordinate conversions, since the values |
| 47 | * are pre-calculated. | 48 | * are pre-calculated. |
| 49 | + * | ||
| 50 | + * \bug: GTimeReference should be used to convert the time from the | ||
| 51 | + * FITS file to a GTime in the correct system | ||
| 48 | ************************************************************************/ | 52 | ************************************************************************/ |
| 49 | void | 53 | void |
| 50 | GCTAPointing::load_pointing_table(std::string filename) | 54 | GCTAPointing::load_pointing_table(std::string filename) |
| 51 | { | 55 | { |
| 52 | 56 | ||
| 57 | + | ||
| 53 | std::cout << "load pointing from: " << filename << std::endl; | 58 | std::cout << "load pointing from: " << filename << std::endl; |
| 54 | 59 | ||
| 55 | // Open the pointing file and find the pointing table: | 60 | // Open the pointing file and find the pointing table: |
| @@ -74,12 +79,23 @@ GCTAPointing::load_pointing_table(std::string filename) | @@ -74,12 +79,23 @@ GCTAPointing::load_pointing_table(std::string filename) | ||
| 74 | 79 | ||
| 75 | for (size_t ii=0; ii < table->nrows(); ii++) { | 80 | for (size_t ii=0; ii < table->nrows(); ii++) { |
| 76 | 81 | ||
| 77 | - m_table_nodes.append( 0.5*(stop->real(ii) - start->real(ii))); | ||
| 78 | - m_table_az[ii] = az->real(ii); | ||
| 79 | - m_table_alt[ii] = alt->real(ii); | 82 | + double midtime = 0.5*(stop->real(ii) - start->real(ii)); |
| 83 | + GTime tt(midtime, "sec" ); | ||
| 84 | + m_table_nodes.append( tt.secs() ); | ||
| 85 | + m_table_az[ii] = az->real(ii) * gammalib::deg2rad; | ||
| 86 | + m_table_alt[ii] = alt->real(ii) * gammalib::deg2rad; | ||
| 80 | 87 | ||
| 88 | + if (ii==0) { | ||
| 89 | + m_table_tmin = tt; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + if (ii==table->nrows()-1){ | ||
| 93 | + m_table_tmax = tt; | ||
| 94 | + } | ||
| 95 | + | ||
| 81 | } | 96 | } |
| 82 | 97 | ||
| 98 | + | ||
| 83 | m_has_table = true; | 99 | m_has_table = true; |
| 84 | 100 | ||
| 85 | } | 101 | } |
| @@ -100,17 +116,27 @@ GCTAPointing::dir_horiz( const GTime &time ) const { | @@ -100,17 +116,27 @@ GCTAPointing::dir_horiz( const GTime &time ) const { | ||
| 100 | // average direction... | 116 | // average direction... |
| 101 | } | 117 | } |
| 102 | 118 | ||
| 119 | + // first check if time is inside table bounds | ||
| 120 | + | ||
| 121 | + if (time<m_table_tmin || time>m_table_tmax) { | ||
| 122 | + throw GException::out_of_range( __func__, time.secs(), | ||
| 123 | + m_table_tmin.secs(), | ||
| 124 | + m_table_tmax.secs()); | ||
| 125 | + } | ||
| 126 | + | ||
| 103 | // get interpolated alt and az for the given time using the pointing | 127 | // get interpolated alt and az for the given time using the pointing |
| 104 | // table: | 128 | // table: |
| 105 | 129 | ||
| 106 | - alt = m_table_nodes.interpolate( time.sec(), m_table_alt ); | ||
| 107 | - az = m_table_nodes.interpolate( time.sec(), m_table_az ); | 130 | + double alt = m_table_nodes.interpolate( time.secs(), m_table_alt ); |
| 131 | + double az = m_table_nodes.interpolate( time.secs(), m_table_az ); | ||
| 108 | 132 | ||
| 109 | // construct a GHorizDir and return it: | 133 | // construct a GHorizDir and return it: |
| 110 | 134 | ||
| 111 | - return GHorizDir(alt,az); | 135 | + GHorizDir dir; |
| 136 | + dir.altaz(alt,az); | ||
| 137 | + return dir; | ||
| 112 | 138 | ||
| 113 | -} | 139 | + } |
| 114 | 140 | ||
| 115 | 141 | ||
| 116 | /* __ Macros _____________________________________________________________ */ | 142 | /* __ Macros _____________________________________________________________ */ |