Interpolator3D.cc
Go to the documentation of this file.
1 /*
2  * Interpolator3D.cpp
3  *
4  * Created on: Apr 17, 2015
5  * Author: leven
6  */
7 
8 #include "Interpolator3D.h"
9 #include "Flight.h"
10 #include "Airplane.h"
11 #include "AirplaneUtil.h"
12 #include "Ads_bDataBase.h"
13 #include "det/Detector.h"
14 #include "AirplaneUtil.h"
15 
16 #include <sstream>
17 
18 using namespace RdAirplane;
19 using namespace utl;
20 using namespace std;
21 using namespace det;
22 using namespace boost;
23 using namespace ROOT::Math;
24 
26  const vector<const TimeStamp*>& pTimes,
27  const vector<const UTMPoint*>& pCoordinates,
28  Flight* pFlight) :
29  _flight_(pFlight),
30  _earliestTime_(**pTimes.begin()),
31  _latesTime_(**pTimes.rbegin()) {
32  const vector<double>& times = _timesFromTimeStamps(pTimes);
33  vector<double> latitudes;
34  vector<double> longitudes;
35  vector<double> altitudes;
36  _getGeodeticCoordinates(pCoordinates, &latitudes, &longitudes, &altitudes);
37  vector<double> xs;
38  vector<double> ys;
39  vector<double> zs;
40  _getCoordinates(pCoordinates, &xs, &ys, &zs);
41  _interpolatorX_ = new Interpolator(times, xs);
42  _interpolatorY_ = new Interpolator(times, ys);
43  _interpolatorZ_ = new Interpolator(times, zs);
44 
45 }
46 
48  double theTime = _timeFromTimeStamp(pTime);
49  return Point(
50  _interpolatorX_->Eval(theTime),
51  _interpolatorY_->Eval(theTime),
52  _interpolatorZ_->Eval(theTime),
54 }
55 
57  double theTime = _timeFromTimeStamp(pTime);
58  return Vector(
59  _interpolatorX_->Deriv(theTime),
60  _interpolatorY_->Deriv(theTime),
61  _interpolatorZ_->Deriv(theTime),
63 }
64 
66  return pTime > _earliestTime_ && pTime < _latesTime_;
67 }
68 
70  stringstream info;
71  info << "Interpolating from: " << (_earliestTime_) << " till " << (_latesTime_);
72  return info.str();
73 }
74 
76  delete _interpolatorX_;
77  delete _interpolatorY_;
78  delete _interpolatorZ_;
79 }
80 
82  return Detector::GetInstance().GetReferenceCoordinateSystem();
83 }
84 
87 }
88 
89 vector<double> Interpolator3D::_timesFromTimeStamps(const vector<const TimeStamp*>& pTimes) {
90  vector<double> res;
91  for(vector<const TimeStamp*>::const_iterator iter = pTimes.begin(); iter!=pTimes.end(); ++iter) {
92  res.push_back(_timeFromTimeStamp(**iter));
93  }
94  return res;
95 }
96 
98  const vector<const UTMPoint*>& pCoordinates,
99  vector<double>* p_OUT_latitudes,
100  vector<double>* p_OUT_longitudes,
101  vector<double>* p_OUT_altitudes) {
102  for(vector<const UTMPoint*>::const_iterator iter = pCoordinates.begin(); iter!=pCoordinates.end(); ++iter) {
103  const UTMPoint* utmPoint = *iter;
104  tuple<double, double, double> geodeticCoordinates = utmPoint->GetGeodeticCoordinates();
105  p_OUT_latitudes->push_back(geodeticCoordinates.get<0>());
106  p_OUT_longitudes->push_back(geodeticCoordinates.get<1>());
107  p_OUT_altitudes->push_back(geodeticCoordinates.get<2>());
108  }
109 }
110 
112  const vector<const UTMPoint*>& pCoordinates,
113  vector<double>* p_OUT_xs,
114  vector<double>* p_OUT_ys,
115  vector<double>* p_OUT_zs) {
116  for(vector<const UTMPoint*>::const_iterator iter = pCoordinates.begin(); iter!=pCoordinates.end(); ++iter) {
117  const UTMPoint* utmPoint = *iter;
118  const Point& point = utmPoint->GetPoint(_coordinateSystem());
119  p_OUT_xs->push_back(point.GetX(_coordinateSystem()));
120  p_OUT_ys->push_back(point.GetY(_coordinateSystem()));
121  p_OUT_zs->push_back(point.GetZ(_coordinateSystem()));
122  }
123 }
124 
125 tuple<double,double> Interpolator3D::_verySimpleLinearFit(const vector<double>& pX, const vector<double>& pY) {
126  double xB = *pX.begin();
127  double xE = *pX.end();
128  double xD = xE-xB;
129  double yB = *pY.begin();
130  double yE = *pY.end();
131  double yD = yE-yB;
132  double slope = yD/xD;
133  return tuple<double, double>(yB-xB*slope,slope);
134 }
135 
136 
static utl::CoordinateSystemPtr _coordinateSystem()
Point object.
Definition: Point.h:32
static double _timeFromTimeStamp(const utl::TimeStamp &pTime)
Class to hold and convert a point in geodetic coordinates.
Definition: UTMPoint.h:40
utl::Vector getDerivative(const utl::TimeStamp &pTime) const
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
static boost::tuple< double, double > _verySimpleLinearFit(const std::vector< double > &pX, const std::vector< double > &pY)
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:206
utl::Point getCoordinates(const utl::TimeStamp &pTime) const
bool isTimeInInterpolatedRange(const utl::TimeStamp &pTime) const
static void _getCoordinates(const std::vector< const utl::UTMPoint * > &pCoordinates, std::vector< double > *p_OUT_xs, std::vector< double > *p_OUT_ys, std::vector< double > *p_OUT_zs)
static void _getGeodeticCoordinates(const std::vector< const utl::UTMPoint * > &pCoordinates, std::vector< double > *p_OUT_latitudes, std::vector< double > *p_OUT_longitudes, std::vector< double > *p_OUT_altitudes)
std::string getInformation() const
ROOT::Math::Interpolator * _interpolatorZ_
double GetY(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:209
double ApproximatedGPSTimeStampFromTimestamp(const utl::TimeStamp &pTimeStamp)
Definition: AirplaneUtil.h:28
ROOT::Math::Interpolator * _interpolatorX_
Vector object.
Definition: Vector.h:30
static std::vector< double > _timesFromTimeStamps(const std::vector< const utl::TimeStamp * > &pTimes)
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:212
Interpolator3D(const std::vector< const utl::TimeStamp * > &pTimes, const std::vector< const utl::UTMPoint * > &pCoordinates, Flight *pFlight)
Point GetPoint(const CoordinateSystemPtr &theCS=CoordinateSystemPtr()) const
Get a cartesian point from an UTMPoint.
Definition: UTMPoint.cc:45
boost::tuple< double, double, double > GetGeodeticCoordinates() const
Get geodetic latitude, longitude, height.
Definition: UTMPoint.cc:67
ROOT::Math::Interpolator * _interpolatorY_

, generated on Tue Sep 26 2023.