Go to the documentation of this file.00001 
00002 #ifndef vpdfl_gaussian_h
00003 #define vpdfl_gaussian_h
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #include <vpdfl/vpdfl_pdf_base.h>
00018 #include <vnl/vnl_matrix.h>
00019 #include <vnl/vnl_vector.h>
00020 #include <vcl_iosfwd.h>
00021 
00022 
00023 
00024 class vpdfl_gaussian : public vpdfl_pdf_base
00025 {
00026   vnl_matrix<double> evecs_;
00027   vnl_vector<double> evals_;
00028   double log_k_;
00029   void calcLogK();
00030 
00031   
00032   
00033   double dx_sigma_dx(const vnl_vector<double>& x) const;
00034 
00035  protected: 
00036   
00037   
00038   mutable vnl_vector<double> dx_;
00039   
00040   
00041   mutable vnl_vector<double> b_;
00042 
00043 
00044  public:
00045   
00046   vpdfl_gaussian();
00047 
00048   
00049   virtual ~vpdfl_gaussian();
00050 
00051   
00052   
00053   
00054   void set(const vnl_vector<double>& mean,
00055            const vnl_vector<double>& variance,
00056            const vnl_matrix<double>& evecs,
00057            const vnl_vector<double>& evals);
00058 
00059   
00060   
00061   
00062   
00063   
00064   
00065   
00066   virtual void set(const vnl_vector<double>& mean,
00067                    const vnl_matrix<double>& evecs,
00068                    const vnl_vector<double>& evals);
00069 
00070   
00071   
00072   
00073   
00074   
00075   void set(const vnl_vector<double>& mean,
00076            const vnl_matrix<double>& covar,
00077            double min_eval = 1e-6);
00078 
00079   
00080   
00081   void set_mean(const vnl_vector<double>& mean);
00082 
00083   
00084   
00085   const vnl_matrix<double>& eigenvecs() const { return evecs_; }
00086 
00087   
00088   
00089   const vnl_vector<double>& eigenvals() const { return evals_; }
00090 
00091   
00092   
00093   
00094   vnl_matrix<double> covariance() const;
00095 
00096   
00097   double log_k() const { return log_k_; }
00098 
00099   
00100   
00101   virtual vpdfl_sampler_base* new_sampler() const;
00102 
00103   
00104   
00105   
00106   virtual double log_p(const vnl_vector<double>& x) const;
00107 
00108   
00109   virtual void gradient(vnl_vector<double>& g,
00110                         const vnl_vector<double>& x,
00111                         double& p) const;
00112 
00113   
00114   virtual double log_prob_thresh(double pass_proportion) const;
00115 
00116   
00117   
00118   
00119   
00120   
00121   
00122   virtual void nearest_plausible(vnl_vector<double>& x, double log_p_min) const;
00123 
00124   
00125   short version_no() const;
00126 
00127   
00128   virtual vcl_string is_a() const;
00129 
00130   
00131   virtual bool is_class(vcl_string const& s) const;
00132 
00133   
00134   virtual vpdfl_pdf_base* clone() const;
00135 
00136   
00137   virtual void print_summary(vcl_ostream& os) const;
00138 
00139   
00140   virtual void b_write(vsl_b_ostream& bfs) const;
00141 
00142 
00143   
00144   virtual void b_read(vsl_b_istream& bfs);
00145 };
00146 
00147 #endif // vpdfl_gaussian_h