SampledMultispot::GibbsSampler2 Class Reference
[Storm classes]

Gibbs sampling class which masks spots to reduce computation. More...

#include <sampled_multispot.h>

List of all members.

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

Detailed Description

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.


Constructor & Destructor Documentation

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     }


Member Function Documentation

void SampledMultispot::GibbsSampler2::set_variance ( double  v  )  [inline]

Update the noide variance.

Used for adding thermal noise.

Parameters:
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     }

template<class T >
void SampledMultispot::GibbsSampler2::next ( T &  rng  )  [inline]

Get the next sample.

Parameters:
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     }


Member Data Documentation

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().

Definition at line 331 of file sampled_multispot.h.

Referenced by reset().

Definition at line 332 of file sampled_multispot.h.

Referenced by next(), reset(), and set_variance().

Definition at line 334 of file sampled_multispot.h.

Referenced by next().

Definition at line 335 of file sampled_multispot.h.

Referenced by reset().

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().

Definition at line 338 of file sampled_multispot.h.

Referenced by next(), reset(), and sample().

Definition at line 339 of file sampled_multispot.h.

Referenced by next(), reset(), and sample_intensities().

Definition at line 341 of file sampled_multispot.h.

Definition at line 342 of file sampled_multispot.h.

Definition at line 343 of file sampled_multispot.h.


The documentation for this class was generated from the following file:
Generated on Wed Nov 2 18:00:04 2011 for BCUBED by  doxygen 1.6.3