Particle Identification and Tracking
particle_track.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 #include "particle_base.h"
26 
27 #include <utility>
28 #include <list>
29 // namespace utilities{
30 // class Tuple;
31 // }
32 
33 #ifndef PARTICLE_TRACK
34 #define PARTICLE_TRACK
35 namespace tracking{
36 class Track_box;
37 class Hash_shelf;
38 class hash_case;
39 
46 
47 
48 public:
49 
54  friend class Track_box;
55  friend class track_list;
56 
57 
58 
59 
60 
61  particle_track(int i_ind,int frame);
62 
67  particle_track(int i_ind,utilities::Tuplef pos,unsigned int frame);
68 
69 
72 
73 
80  void print_t(int more)const;
81 
87  const particle_track* get_next()const{return next_;}
88 
95 
101  const particle_track* get_prev()const{return prev_;}
102 
116  const utilities::Tuplef get_corrected_disp(const particle_track * part_in)const;
117 
126  bool step_forwards(int n,const particle_track* & next)const;
127 
128 
139  bool step_backwards(int n,const particle_track* & next)const;
140 
141 
142 
143 
144 
149  Track_box* get_track()const;
150 
154  int get_track_id()const;
155 
160  const Hash_shelf* get_shelf()const{
161  return shelf_;
162  }
166  void set_shelf(Hash_shelf* shelf);
167 
171  float distancesq_corrected(const particle_track* part_in)const;
172 
176  bool has_track()const;
177 
181  bool has_next()const;
186 
187 
192  std::list<std::pair<particle_track*, float> >* n_pos_link;
197  std::list<std::pair<particle_track*, float> >* p_pos_link;
198 
199 
200 
201  int get_value(utilities::D_TYPE type,int &val) const;
202  float get_value(utilities::D_TYPE type,float &val) const;
203  std::complex<float> get_value(utilities::D_TYPE type,std::complex<float>& val) const;
204 
205 
206 private:
216 
223 
232  bool step_backwards(int n, particle_track* & next);
241  bool step_forwards(int n,particle_track* & next);
242 
243 
244 
245 
246 
257  void set_track(Track_box* i_track);
258 
259 
264  particle_track* reset_track(Track_box * i_track,int & count);
265 
269  void clear_next()
270  {
271  next_ = NULL;
272  }
276  void clear_prev()
277  {
278  prev_ = NULL;
279  }
280 
288  void set_next(particle_track* n_next);
289 
297  void set_prev(particle_track* n_prev);
298 
299 
303  void clear_track_data();
304 
310  void clear_data_forward();
311 
317  void clear_data_backward();
318 
319 
320 };
321 }
322 #endif