19 #ifndef MCMCDA_LIKELIHOOD_H_INCLUDED
20 #define MCMCDA_LIKELIHOOD_H_INCLUDED
24 #include <gp_cpp/gp_multi_output.h>
25 #include <gp_cpp/gp_mean.h>
26 #include <gp_cpp/gp_covariance.h>
29 #include <boost/function.hpp>
47 typedef typename Track::Element Element;
49 typedef Independent_mo_gaussian_process<Zero, Squared_exponential> Gp;
55 mutable Imogp_distribution mll;
58 mutable bool fixed_inputs;
59 mutable bool limits_set;
77 gp(std::vector<Zero>(2, Zero()),
78 std::vector<Squared_exponential>(2,
79 Squared_exponential(scale, signal_sigma))
81 m_noise_sigma(noise_sigma),
87 double ssd = sqrt(signal_sigma);
102 return m_convert(pt).get_length() * std::log(noise_prob);
108 double at_noise(
const Available_data& false_alarms)
const;
113 double at_track(
const Track& track)
const;
120 return m_noise_sigma;
143 std::vector<double> noise_sigmas(dim, m_noise_sigma);
144 mll = gp.get_ml_distribution(X, noise_sigmas);
151 fixed_inputs =
false;
173 template<
class Track>
182 ll += at_track(*track_p);
192 template<
class Track>
197 for(
typename Available_data::const_iterator set_p = false_alarms.begin();
198 set_p != false_alarms.end();
201 if(limits_set && (++t < low_lim || t > up_lim))
continue;
203 for(
typename std::set<const Element*>::const_iterator
204 elem_pp = set_p->begin();
205 elem_pp != set_p->end();
208 ll += at_noise_point(**elem_pp);
222 template<
class Track>
225 bool recompute_inputs = !fixed_inputs || limits_set
226 || track.size() != X.size();
228 typename Track::const_iterator b_pair_p;
229 typename Track::const_iterator e_pair_p;
234 b_pair_p = track.lower_bound(low_lim);
235 e_pair_p = track.upper_bound(up_lim);
236 track_size = std::distance(b_pair_p, e_pair_p);
238 if(track_size == 0)
return 0.0;
242 b_pair_p = track.begin();
243 e_pair_p = track.end();
244 track_size = track.size();
251 X.reserve(2*track_size);
255 Y.reserve(2*track_size);
258 for(
typename Track::const_iterator pair_p = b_pair_p;
262 int t = pair_p->first;
264 Vector avg(m_convert(*pair_p->second).size(), 0.0);
266 while(pair_p != e_pair_p && pair_p->first == t)
271 X.push_back(
Vector().set(t + k*0.001));
272 avg += m_convert(*pair_p->second);
280 for(
size_t j = 0; j <
k; j++)
291 std::vector<double> noise_sigmas(Y[0].get_length(), m_noise_sigma);
292 mll = gp.get_ml_distribution(X, noise_sigmas);
Available_data get_available_data() const
Computes "available data".
Definition: mcmcda_association.h:143
Parent::const_iterator const_iterator
Definition: mcmcda_association.h:122
MV_gaussian_distribution MV_normal_distribution
Definition: prob_distribution.h:813
void reset_limits() const
Unser limits on evaluation.
Definition: mcmcda_likelihood.h:163
for k
Definition: APPgetLargeConnectedEdges.m:61
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
A class that represents a MCMCDA association.
Definition: mcmcda_association.h:66
double pdf(const MV_gaussian_distribution &P, const Vector &x)
Computes the joint PDF of a multivariate Gaussian at x.
Definition: prob_pdf.cpp:32
double at_noise_point(const Element &pt) const
Returns the likelihood of the noise track.
Definition: mcmcda_likelihood.h:100
double get_noise_sigma() const
Return the noise sigma of this model.
Definition: mcmcda_likelihood.h:118
const Gp & get_gp() const
Return the smoothness scale of this model.
Definition: mcmcda_likelihood.h:126
boost::function1< Vector, const Element & > Convert
Definition: mcmcda_data.h:53
double log_pdf(const MV_gaussian_distribution &P, const Vector &x)
Computes the log PDF a multivariate normal distribution at x.
Definition: prob_pdf.cpp:64
Likelihood(double scale, double signal_sigma, double noise_sigma, const typename Data< Element >::Convert &to_vector)
Constructor.
Definition: mcmcda_likelihood.h:71
double operator()(const Association< Track > &w) const
Applies this functor to the given association.
Definition: mcmcda_likelihood.h:174
void set_limits(int low, int up) const
Set limits on evaluation.
Definition: mcmcda_likelihood.h:155
void unfix_inputs() const
Fixes the inputs for faster likelihood computation.
Definition: mcmcda_likelihood.h:149
boost::math::normal Normal_distribution
Definition: prob_distribution.h:68
double at_track(const Track &track) const
Computes the GP log-likelihood of a track.
Definition: mcmcda_likelihood.h:223
const Data< Element >::Convert & get_convert() const
Return the convert function.
Definition: mcmcda_likelihood.h:134
double at_noise(const Available_data &false_alarms) const
Returns the likelihood of the noise track.
Definition: mcmcda_likelihood.h:193
void fix_inputs(const Gp_inputs &ins, size_t dim) const
Fixes the inputs for faster likelihood computation.
Definition: mcmcda_likelihood.h:140
Computes the GP-based likelihood of an association.
Definition: mcmcda_likelihood.h:44
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
void scale(kjb::Axis_aligned_rectangle_2d &box, const kjb::Vector &s)
Definition: gr_2D_bounding_box.cpp:108
std::vector< Elementp_set > Available_data
Definition: mcmcda_association.h:79
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...