Draw samples from the spot states given the spots positions and some data. More...
#include <sampled_multispot.h>
Public Member Functions | |
GibbsSampler (const vector< vector< double > > &pixel_intensities_, const vector< vector< double > > &spot_intensities_, const vector< Vector< 4 > > &spots_, const Matrix< 3 > A_, const Vector< 3 > pi_, double variance_, int sample_iterations_) | |
void | set_variance (double v) |
void | reset () |
template<class T > | |
void | next (T &rng) |
const vector< vector< State > > & | sample () const |
const vector< vector< double > > & | sample_intensities () const |
Private Attributes | |
const vector< vector< double > > & | pixel_intensities |
const vector< vector< double > > & | spot_intensities |
const vector< Vector< 4 > > | spots |
const Matrix< 3 > | A |
const Vector< 3 > | pi |
const double | base_variance |
double | variance |
const int | sample_iterations |
const int | num_frames |
const int | num_pixels |
const vector< int > | O |
vector< vector< State > > | current_sample |
vector< vector< double > > | current_sample_intensities |
Draw samples from the spot states given the spots positions and some data.
Variable naming matches that in FitSpots.
Definition at line 207 of file sampled_multispot.h.
SampledMultispot::GibbsSampler::GibbsSampler | ( | const vector< vector< double > > & | pixel_intensities_, | |
const vector< vector< double > > & | spot_intensities_, | |||
const vector< Vector< 4 > > & | spots_, | |||
const Matrix< 3 > | A_, | |||
const Vector< 3 > | pi_, | |||
double | variance_, | |||
int | sample_iterations_ | |||
) | [inline] |
Definition at line 226 of file sampled_multispot.h.
References assert_same_size(), pixel_intensities, and spot_intensities.
00233 :pixel_intensities(pixel_intensities_), //pixel_intensities: [frame][pixels] 00234 spot_intensities(spot_intensities_), //spot_intensities: [spot][pixel] 00235 spots(spots_), 00236 A(A_), 00237 pi(pi_), 00238 base_variance(variance_), 00239 variance(variance_), 00240 sample_iterations(sample_iterations_), 00241 num_frames(pixel_intensities.size()), 00242 num_pixels(pixel_intensities[0].size()), 00243 //Observations vector. As usual for this application, the observations are just 00244 //numbered integers which refer to data held elsewhere. 00245 O(sequence(num_frames)), 00246 //Start all spots OFF, so the intensity is 0. OFF is 1 or 2, not 0!!! 00247 //sample_list: [sample][spot][frame]: list of samples drawn using Gibbs sampling 00248 current_sample(spots.size(), vector<State>(num_frames, 2)), //current sample [spot][frame] 00249 //pixel intensities assosciated with the current sample [frame][pixel] 00250 current_sample_intensities(num_frames, vector<double>(num_pixels)) 00251 { 00252 //Check a bunch of stuff 00253 assert_same_size(pixel_intensities); 00254 assert_same_size(spot_intensities); 00255 00256 }
void SampledMultispot::GibbsSampler::set_variance | ( | double | v | ) | [inline] |
Update the noide variance.
Used for adding thermal noise.
v | noise variance. |
Definition at line 260 of file sampled_multispot.h.
References variance.
00261 { 00262 variance = v; 00263 }
void SampledMultispot::GibbsSampler::reset | ( | ) | [inline] |
Reset the gibbs sampler oro the initial state (all spots off).
Definition at line 267 of file sampled_multispot.h.
References base_variance, current_sample, current_sample_intensities, num_frames, num_pixels, and variance.
00268 { 00269 vector<State> off(num_frames, 2); 00270 fill(current_sample.begin(), current_sample.end(), off); 00271 00272 vector<double> black(num_pixels); 00273 fill(current_sample_intensities.begin(), current_sample_intensities.end(), black); 00274 variance = base_variance; 00275 }
void SampledMultispot::GibbsSampler::next | ( | T & | rng | ) | [inline] |
Get the next sample.
rng | Random number generator |
Definition at line 279 of file sampled_multispot.h.
References A, SampledMultispot::add_spot(), current_sample, current_sample_intensities, forward_algorithm_delta(), O, pi, pixel_intensities, SampledMultispot::remove_spot(), sample_iterations, spot_intensities, spots, and variance.
00280 { 00281 for(int j=0; j < sample_iterations; j++) 00282 for(int k=0; k < (int) spots.size(); k++) 00283 { 00284 //Subtract off the spot we're interested in. 00285 remove_spot(current_sample_intensities, spot_intensities[k], current_sample[k]); 00286 00287 //Now current_sample_intensities is the image value for every spot in every frame, 00288 //except the current spot, which is always set to off. This allows us to add it in 00289 //easily. 00290 SpotWithBackground B(current_sample_intensities, spot_intensities[k], pixel_intensities, variance); 00291 vector<array<double, 3> > delta = forward_algorithm_delta(A, pi, B, O); 00292 current_sample[k] = backward_sampling<3,State, T>(A, delta, rng); 00293 00294 //Put the newly sampled spot in 00295 add_spot(current_sample_intensities, spot_intensities[k], current_sample[k]); 00296 } 00297 }
const vector<vector<State> >& SampledMultispot::GibbsSampler::sample | ( | ) | const [inline] |
Retrieve the current sample.
Definition at line 305 of file sampled_multispot.h.
References current_sample.
00306 { 00307 return current_sample; 00308 }
const vector<vector<double> >& SampledMultispot::GibbsSampler::sample_intensities | ( | ) | const [inline] |
Retrieve the intensities for the current sample.
Definition at line 310 of file sampled_multispot.h.
References current_sample_intensities.
00311 { 00312 return current_sample_intensities; 00313 }
const vector<vector<double> >& SampledMultispot::GibbsSampler::pixel_intensities [private] |
Definition at line 209 of file sampled_multispot.h.
Referenced by GibbsSampler(), and next().
const vector<vector<double> >& SampledMultispot::GibbsSampler::spot_intensities [private] |
Definition at line 210 of file sampled_multispot.h.
Referenced by GibbsSampler(), and next().
const vector<Vector<4> > SampledMultispot::GibbsSampler::spots [private] |
Definition at line 211 of file sampled_multispot.h.
Referenced by next().
const Matrix<3> SampledMultispot::GibbsSampler::A [private] |
Definition at line 212 of file sampled_multispot.h.
Referenced by next().
const Vector<3> SampledMultispot::GibbsSampler::pi [private] |
Definition at line 213 of file sampled_multispot.h.
Referenced by next().
const double SampledMultispot::GibbsSampler::base_variance [private] |
Definition at line 214 of file sampled_multispot.h.
Referenced by reset().
double SampledMultispot::GibbsSampler::variance [private] |
Definition at line 215 of file sampled_multispot.h.
Referenced by next(), reset(), and set_variance().
const int SampledMultispot::GibbsSampler::sample_iterations [private] |
Definition at line 217 of file sampled_multispot.h.
Referenced by next().
const int SampledMultispot::GibbsSampler::num_frames [private] |
Definition at line 218 of file sampled_multispot.h.
Referenced by reset().
const int SampledMultispot::GibbsSampler::num_pixels [private] |
Definition at line 218 of file sampled_multispot.h.
Referenced by reset().
const vector<int> SampledMultispot::GibbsSampler::O [private] |
Definition at line 219 of file sampled_multispot.h.
Referenced by next().
vector<vector<State> > SampledMultispot::GibbsSampler::current_sample [private] |
Definition at line 221 of file sampled_multispot.h.
vector<vector<double> > SampledMultispot::GibbsSampler::current_sample_intensities [private] |
Definition at line 222 of file sampled_multispot.h.
Referenced by next(), reset(), and sample_intensities().