Gibbs sampling class which masks spots to reduce computation. More...
#include <sampled_multispot.h>
Public Member Functions | |
GibbsSampler2 (const vector< vector< double > > &pixel_intensities_, const vector< vector< double > > &spot_intensities_, const vector< Vector< 4 > > &spots_, const vector< vector< int > > &spot_pixels_, 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 std::vector< std::vector < int > > & | spot_pixels |
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 |
vector< double > | cutout_spot_intensities |
vector< vector< double > > | cutout_pixel_intensities |
vector< vector< double > > | cutout_current_sample_intensities |
Gibbs sampling class which masks spots to reduce computation.
This draws samples from, the spot states given the spots positions and some data. It is very similar to GibbsSampler, except that it only computes probabilities in a mask around each spot to save on computation. Variable naming matches that in FitSpots.
Definition at line 323 of file sampled_multispot.h.
SampledMultispot::GibbsSampler2::GibbsSampler2 | ( | const vector< vector< double > > & | pixel_intensities_, | |
const vector< vector< double > > & | spot_intensities_, | |||
const vector< Vector< 4 > > & | spots_, | |||
const vector< vector< int > > & | spot_pixels_, | |||
const Matrix< 3 > | A_, | |||
const Vector< 3 > | pi_, | |||
double | variance_, | |||
int | sample_iterations_ | |||
) | [inline] |
Definition at line 347 of file sampled_multispot.h.
References assert_same_size(), pixel_intensities, and spot_intensities.
00355 :pixel_intensities(pixel_intensities_), //pixel_intensities: [frame][pixels] 00356 spot_intensities(spot_intensities_), //spot_intensities: [spot][pixel] 00357 spots(spots_), 00358 spot_pixels(spot_pixels_), 00359 A(A_), 00360 pi(pi_), 00361 base_variance(variance_), 00362 variance(variance_), 00363 sample_iterations(sample_iterations_), 00364 num_frames(pixel_intensities.size()), 00365 num_pixels(pixel_intensities[0].size()), 00366 //Observations vector. As usual for this application, the observations are just 00367 //numbered integers which refer to data held elsewhere. 00368 O(sequence(num_frames)), 00369 //Start all spots OFF, so the intensity is 0. OFF is 1 or 2, not 0!!! 00370 //sample_list: [sample][spot][frame]: list of samples drawn using Gibbs sampling 00371 current_sample(spots.size(), vector<State>(num_frames, 2)), //current sample [spot][frame] 00372 //pixel intensities assosciated with the current sample [frame][pixel] 00373 current_sample_intensities(num_frames, vector<double>(num_pixels)), 00374 cutout_pixel_intensities(num_frames), 00375 cutout_current_sample_intensities(num_frames) 00376 { 00377 //Check a bunch of stuff 00378 assert_same_size(pixel_intensities); 00379 assert_same_size(spot_intensities); 00380 }
void SampledMultispot::GibbsSampler2::set_variance | ( | double | v | ) | [inline] |
Update the noide variance.
Used for adding thermal noise.
v | noise variance. |
Definition at line 384 of file sampled_multispot.h.
References variance.
00385 { 00386 variance = v; 00387 }
void SampledMultispot::GibbsSampler2::reset | ( | ) | [inline] |
Reset the gibbs sampler oro the initial state (all spots off).
Definition at line 391 of file sampled_multispot.h.
References base_variance, current_sample, current_sample_intensities, num_frames, num_pixels, and variance.
00392 { 00393 vector<State> off(num_frames, 2); 00394 fill(current_sample.begin(), current_sample.end(), off); 00395 00396 vector<double> black(num_pixels); 00397 fill(current_sample_intensities.begin(), current_sample_intensities.end(), black); 00398 variance = base_variance; 00399 }
void SampledMultispot::GibbsSampler2::next | ( | T & | rng | ) | [inline] |
Get the next sample.
rng | Random number generator |
Definition at line 403 of file sampled_multispot.h.
References A, SampledMultispot::add_spot(), current_sample, current_sample_intensities, O, pi, pixel_intensities, SampledMultispot::remove_spot(), sample_iterations, spot_intensities, spot_pixels, spots, and variance.
00404 { 00405 00406 //double remove=0; 00407 //double cut=0; 00408 //double swb=0; 00409 //double ff_masked=0; 00410 //double bs=0; 00411 //double add=0; 00412 //cvd_timer t; 00413 std::vector<array<double, 3> > delta3; 00414 for(int j=0; j < sample_iterations; j++) 00415 for(int k=0; k < (int) spots.size(); k++) 00416 { 00417 //t.reset(); 00418 //Subtract off the spot we're interested in. 00419 remove_spot(current_sample_intensities, spot_intensities[k], current_sample[k], spot_pixels[k]); 00420 //remove+=t.reset(); 00421 /* 00422 //Cut out 00423 //spot 00424 cutout_spot_intensities.resize(spot_pixels[k].size()); 00425 for(unsigned int i=0; i < spot_pixels[k].size(); i++) 00426 cutout_spot_intensities[i] = spot_intensities[k][spot_pixels[k][i]]; 00427 00428 //others 00429 for(int f=0; f < num_frames; f++) 00430 { 00431 cutout_current_sample_intensities[f].resize(spot_pixels[k].size()); 00432 cutout_pixel_intensities[f].resize(spot_pixels[k].size()); 00433 for(unsigned int i=0; i < spot_pixels[k].size();i++) 00434 { 00435 cutout_current_sample_intensities[f][i] = current_sample_intensities[f][spot_pixels[k][i]]; 00436 cutout_pixel_intensities[f][i] = pixel_intensities[f][spot_pixels[k][i]]; 00437 } 00438 }*/ 00439 //cut += t.reset(); 00440 //Now current_sample_intensities is the image value for every spot in every frame, 00441 //except the current spot, which is always set to off. This allows us to add it in 00442 //easily. 00443 00444 // SpotWithBackground B(current_sample_intensities, spot_intensities[k], pixel_intensities, variance); 00445 // vector<array<double, 3> > delta = forward_algorithm_delta(A, pi, B, O); 00446 00447 //ff+=t.reset(); 00448 00449 // SpotWithBackground B2(cutout_current_sample_intensities, cutout_spot_intensities, cutout_pixel_intensities, variance); 00450 // std::vector<array<double, 3> > delta2 = forward_algorithm_delta(A, pi, B2, O); 00451 //ff_cut+=t.reset(); 00452 00453 SpotWithBackgroundMasked B3(current_sample_intensities, spot_intensities[k], pixel_intensities, variance, spot_pixels[k]); 00454 //swb += t.reset(); 00455 forward_algorithm_delta2<3>(A, pi, B3, O, delta3); 00456 //f_masked+=t.reset(); 00457 /*for(unsigned int i=0; i < delta.size(); i++) 00458 { 00459 cout.precision(20); 00460 cout.setf(cout.scientific); 00461 std::cout << delta[i][0] << " " << delta[i][1] << " " <<delta[i][2] << std::endl; 00462 std::cout << delta2[i][0] << " " << delta2[i][1] << " " <<delta2[i][2] << std::endl; 00463 cout << endl; 00464 } 00465 std::exit(1); 00466 00467 */ 00468 00469 current_sample[k] = backward_sampling<3,State, T>(A, delta3, rng); 00470 //bs += t.reset(); 00471 //Put the newly sampled spot in 00472 add_spot(current_sample_intensities, spot_intensities[k], current_sample[k], spot_pixels[k]); 00473 //add += t.reset(); 00474 } 00475 // cout << "remove=" <<remove << " cut=" << cut << " swb=" << swb<< " ff_mask=" << ff_masked << " bs=" <<bs << " add="<<add << endl; 00476 }
const vector<vector<State> >& SampledMultispot::GibbsSampler2::sample | ( | ) | const [inline] |
Retrieve the current sample.
Definition at line 484 of file sampled_multispot.h.
References current_sample.
00485 { 00486 return current_sample; 00487 }
const vector<vector<double> >& SampledMultispot::GibbsSampler2::sample_intensities | ( | ) | const [inline] |
Retrieve the intensities for the current sample.
Definition at line 489 of file sampled_multispot.h.
References current_sample_intensities.
00490 { 00491 return current_sample_intensities; 00492 }
const vector<vector<double> >& SampledMultispot::GibbsSampler2::pixel_intensities [private] |
Definition at line 325 of file sampled_multispot.h.
Referenced by GibbsSampler2(), and next().
const vector<vector<double> >& SampledMultispot::GibbsSampler2::spot_intensities [private] |
Definition at line 326 of file sampled_multispot.h.
Referenced by GibbsSampler2(), and next().
const vector<Vector<4> > SampledMultispot::GibbsSampler2::spots [private] |
Definition at line 327 of file sampled_multispot.h.
Referenced by next().
const std::vector<std::vector<int> >& SampledMultispot::GibbsSampler2::spot_pixels [private] |
Definition at line 328 of file sampled_multispot.h.
Referenced by next().
const Matrix<3> SampledMultispot::GibbsSampler2::A [private] |
Definition at line 329 of file sampled_multispot.h.
Referenced by next().
const Vector<3> SampledMultispot::GibbsSampler2::pi [private] |
Definition at line 330 of file sampled_multispot.h.
Referenced by next().
const double SampledMultispot::GibbsSampler2::base_variance [private] |
Definition at line 331 of file sampled_multispot.h.
Referenced by reset().
double SampledMultispot::GibbsSampler2::variance [private] |
Definition at line 332 of file sampled_multispot.h.
Referenced by next(), reset(), and set_variance().
const int SampledMultispot::GibbsSampler2::sample_iterations [private] |
Definition at line 334 of file sampled_multispot.h.
Referenced by next().
const int SampledMultispot::GibbsSampler2::num_frames [private] |
Definition at line 335 of file sampled_multispot.h.
Referenced by reset().
const int SampledMultispot::GibbsSampler2::num_pixels [private] |
Definition at line 335 of file sampled_multispot.h.
Referenced by reset().
const vector<int> SampledMultispot::GibbsSampler2::O [private] |
Definition at line 336 of file sampled_multispot.h.
Referenced by next().
vector<vector<State> > SampledMultispot::GibbsSampler2::current_sample [private] |
Definition at line 338 of file sampled_multispot.h.
vector<vector<double> > SampledMultispot::GibbsSampler2::current_sample_intensities [private] |
Definition at line 339 of file sampled_multispot.h.
Referenced by next(), reset(), and sample_intensities().
vector<double> SampledMultispot::GibbsSampler2::cutout_spot_intensities [private] |
Definition at line 341 of file sampled_multispot.h.
vector<vector<double> > SampledMultispot::GibbsSampler2::cutout_pixel_intensities [private] |
Definition at line 342 of file sampled_multispot.h.
vector<vector<double> > SampledMultispot::GibbsSampler2::cutout_current_sample_intensities [private] |
Definition at line 343 of file sampled_multispot.h.