Particle Identification and Tracking
hash_case.h
Go to the documentation of this file.
1 //Copyright 2008-2010 Thomas A Caswell
2 //tcaswell@uchicago.edu
3 //http://jfi.uchicago.edu/~tcaswell
4 //
5 //This program is free software; you can redistribute it and/or modify
6 //it under the terms of the GNU General Public License as published by
7 //the Free Software Foundation; either version 3 of the License, or (at
8 //your option) any later version.
9 //
10 //This program is distributed in the hope that it will be useful, but
11 //WITHOUT ANY WARRANTY; without even the implied warranty of
12 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 //General Public License for more details.
14 //
15 //You should have received a copy of the GNU General Public License
16 //along with this program; if not, see <http://www.gnu.org/licenses>.
17 //
18 //Additional permission under GNU GPL version 3 section 7
19 //
20 //If you modify this Program, or any covered work, by linking or
21 //combining it with MATLAB (or a modified version of that library),
22 //containing parts covered by the terms of MATLAB User License, the
23 //licensors of this Program grant you additional permission to convey
24 //the resulting work.
25 
26 #ifndef HASH_CASE
27 #define HASH_CASE
28 #include <vector>
29 #include <list>
30 
31 #include "part_def.h"
32 
33 
34 
35 
36 
37 
38 namespace utilities{
39 class Array;
40 
41 class Histogram2D;
42 class Wrapper_out;
43 class Wrapper_in;
44 class Cell;
45 class Counted_vector;
46 class Accum_case;
47 class Wrapper_in;
48 class Generic_wrapper;
49 class Filter;
50 
51 
52 }
53 
54 namespace tracking{
55 class Track_shelf;
56 class Hash_shelf;
57 class track_list;
58 class Master_box;
59 
60 class Corr;
61 class Corr_case;
62 class Accumulator;
63 
69 class hash_case{
70 
71 public:
73  Hash_shelf * return_shelf(int n) const{
74  return h_case_.at(n);
75  }
76 
80  hash_case();
81 
82 
83 
84 
88  void init(Master_box & mb,const utilities::Tuplef & dims,
89  float ppb, int frames);
90 
94  void init(utilities::Wrapper_in & w_in , utilities::Filter & filt, float ppb) ;
95 
96 
98  void print() const;
99 
104  void pass_fun_to_part(void(particle::*fun)());
105 
110  void pass_fun_to_part(void(particle::*fun)() const)const;
111 
112 
113 
118  void pass_fun_to_shelf(void(Hash_shelf::*fun)());
119 
124  void pass_fun_to_shelf(void(Hash_shelf::*fun)()const)const;
125 
129  unsigned int get_num_frames() const
130  {
131  return h_case_.size();
132  }
133 
134 
139 
143  void compute_corr(tracking::Corr &) const ;
144 
145 
151  unsigned int compute_corr(tracking::Corr_case &) const ;
152 
153 
157  void compute_accum(Accumulator & in)const;
158 
162  void compute_accum(utilities::Accum_case & )const;
163 
164 
168  void fill_in_neighborhood();
169 
173  int get_avg_dtime()const;
174 
178  float get_avg_temp()const;
179 
180 
182  ~hash_case();
183 
184 #ifdef TRACKING_FLG
185 
188  void init(float box_side_len,
189  const utilities::Wrapper_in & wrapper,
190  Track_shelf & tracks,
191  utilities::Filter & filt,
192  int min_trk_length);
193 
194 
203  void link(float max_range, Track_shelf& tracks);
204 
208  void compute_mean_disp();
209 
210 #endif
211 
212 
213 protected:
217  std::vector<Hash_shelf*> h_case_;
218 
219 
220 
221 #ifdef TRACKING_FLG
222 
233  void fill_pos_link_next(std::list<particle_track*>* tlist,
234  std::vector<Hash_shelf*>::iterator in_it, float max_disp);
235 
236 #endif
237 
241  bool inited_;
242 
249 
250 };
251 
252 
253 }
254 
255 
256 #endif