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_