contrib/mul/vpdfl/vpdfl_mixture_sampler.h
Go to the documentation of this file.
00001 #ifndef vpdfl_mixture_sampler_h_
00002 #define vpdfl_mixture_sampler_h_
00003 //=======================================================================
00004 //:
00005 //  \file
00006 //
00007 //    Copyright: (C) 2000 Victoria University of Manchester
00008 //
00009 //=======================================================================
00010 
00011 #include <vpdfl/vpdfl_sampler_base.h>
00012 #include <vpdfl/vpdfl_mixture.h>
00013 #include <vnl/vnl_random.h>
00014 
00015 //=======================================================================
00016 
00017 class vpdfl_mixture;
00018 
00019 //: Instance class for vpdfl_mixture
00020 //  Implements calculation of prob, gradient, sampling etc
00021 class vpdfl_mixture_sampler : public vpdfl_sampler_base
00022 {
00023  private:
00024   //: workspace
00025   vcl_vector<vpdfl_sampler_base*> inst_;
00026 
00027   void init();
00028   void delete_stuff();
00029 
00030  protected:
00031   //: The random number generator
00032   vnl_random rng_;
00033  public:
00034 
00035   //: Dflt ctor
00036   vpdfl_mixture_sampler();
00037 
00038   //: Copy ctor
00039   vpdfl_mixture_sampler(const vpdfl_mixture_sampler&);
00040 
00041   //: Copy operator
00042   vpdfl_mixture_sampler& operator=(const vpdfl_mixture_sampler&);
00043 
00044   //: Destructor
00045   virtual ~vpdfl_mixture_sampler();
00046 
00047   //: Set model for which this is an instance
00048   virtual void set_model(const vpdfl_pdf_base&);
00049 
00050   const vpdfl_mixture& mixture() const;
00051 
00052   //: Draw random sample from distribution
00053   virtual void sample(vnl_vector<double>& x);
00054 
00055   //: Reseeds the static random number generator (one per derived class)
00056   virtual void reseed(unsigned long);
00057 
00058   //: Version number for I/O
00059   short version_no() const;
00060 
00061   //: Name of the class
00062   virtual vcl_string is_a() const;
00063 
00064   //: Does the name of the class match the argument?
00065   virtual bool is_class(vcl_string const& s) const;
00066 
00067   //: Create a copy on the heap and return base class pointer
00068   virtual vpdfl_sampler_base* clone() const;
00069 };
00070 
00071 #endif // vpdfl_mixture_sampler_h_