KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
bbb_description.h
Go to the documentation of this file.
1 /* =========================================================================== *
2  |
3  | Copyright (c) 1994-2011 by Kobus Barnard (author)
4  |
5  | Personal and educational use of this code is granted, provided that this
6  | header is kept intact, and that the authorship is not misrepresented, that
7  | its use is acknowledged in publications, and relevant papers are cited.
8  |
9  | For other use contact the author (kobus AT cs DOT arizona DOT edu).
10  |
11  | Please note that the code in this file has not necessarily been adequately
12  | tested. Naturally, there is no guarantee of performance, support, or fitness
13  | for any particular task. Nonetheless, I am interested in hearing about
14  | problems that you encounter.
15  |
16  | Author: Ernesto Brau
17  * =========================================================================== */
18 
19 /* $Id$ */
20 
21 #ifndef B3_DESCRIPTION_H
22 #define B3_DESCRIPTION_H
23 
28 #include <bbb_cpp/bbb_traj_set.h>
29 #include <bbb_cpp/bbb_data.h>
30 #include <m_cpp/m_vector.h>
31 #include <l_cpp/l_int_matrix.h>
32 #include <l_cpp/l_int_vector.h>
33 #include <l_cpp/l_functors.h>
34 #include <l_cpp/l_word_list.h>
35 #include <l/l_sys_io.h>
36 #include <map>
37 #include <set>
38 #include <vector>
39 #include <utility>
40 #include <iostream>
41 #include <fstream>
42 #include <algorithm>
43 #include <string>
44 #include <iterator>
45 #include <boost/foreach.hpp>
46 #include <boost/bind.hpp>
47 #include <boost/variant.hpp>
48 #include <boost/ref.hpp>
49 #include <boost/tuple/tuple.hpp>
50 
51 namespace kjb {
52 namespace bbb {
53 
54 // forward declaration
55 class Likelihood;
56 
63 {
64 public:
65  typedef std::multimap<const Intentional_activity*, Activity_sequence>
67 
68 public:
70  Description(size_t start, size_t end, const Traj_set& trajs) :
71  root_("FFA", start, end, Vector(), trajs)
72  {
73  IFT(trajs.size() != 0, Illegal_argument,
74  "Cannot create description; empty trajectory set");
75  IFT(*trajs.rbegin() + 1 == trajs.size(), Illegal_argument,
76  "Cannot create description; trajectories indexed incorrectly");
77  }
78 
80  Description(const Intentional_activity& root) : root_(root)
81  {
82  const Traj_set& trajs = root.trajectories();
83  IFT(trajs.size() != 0, Illegal_argument,
84  "Cannot create description; empty trajectory set");
85  IFT(*trajs.rbegin() + 1 == trajs.size(), Illegal_argument,
86  "Cannot create description; trajectories indexed incorrectly");
87  }
88 
90  Description(const Description& desc) : root_(desc.root_)
91  {
92  copy(desc, root_, desc.root_);
93  }
94 
97  {
98  if(&desc != this)
99  {
100  tree_.clear();
101  root_ = desc.root_;
102  copy(desc, root_, desc.root_);
103  }
104 
105  return *this;
106  }
107 
109  void clear(const Intentional_activity& root)
110  {
111  root_ = root;
112  tree_.clear();
113  }
114 
117  (
118  const Intentional_activity* act,
119  const Activity_sequence& aseq
120  )
121  {
122  // this check is expensive; once we have more confidence in this code
123  // we should take it off
124  assert(contains(*act));
125 
126  return &(tree_.insert(std::make_pair(act, aseq))->second);
127  }
128 
130  size_t start() const { return root_.start(); }
131 
133  size_t end() const { return root_.end(); }
134 
136  const Intentional_activity& root_activity() const { return root_; }
137 
139  std::pair<Act_tree::const_iterator, Act_tree::const_iterator> children
140  (
141  const Intentional_activity& act
142  ) const
143  {
144  return tree_.equal_range(&act);
145  }
146 
148  template<class Iter>
149  void physical_activities(Iter out, const std::string& name = "") const;
150 
152  template<class Iter>
153  void intentional_activities(Iter out, const std::string& name = "") const;
154 
156  template<class A, class OutIt>
157  void ancestors(const A& act, OutIt result, int max_depth = -1) const;
158 
160  bool is_root(const Physical_activity&) const { return false; }
161 
163  bool is_root(const Intentional_activity& act) const
164  {
165  return &act == &root_;
166  }
167 
172  template<class A>
173  bool contains(const A& act_p) const;
174 
175 private:
176  friend std::ostream& operator<<(std::ostream&, const Description&);
177  friend Data sample(const Likelihood& likelihood, const Description& desc);
178 
180  void copy
181  (
182  const Description& desc,
183  const Intentional_activity& local_act,
184  const Intentional_activity& desc_act
185  );
186 
187  Intentional_activity root_;
188  Act_tree tree_;
189 };
190 
192 std::ostream& operator<<(std::ostream& ost, const Description& desc);
193 
194 /* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
195 
196 template<class Iter>
197 void Description::physical_activities(Iter out, const std::string& name) const
198 {
199  BOOST_FOREACH(const Act_tree::value_type& pr, tree_)
200  {
201  const Activity_sequence& aseq = pr.second;
202  for(size_t j = 0; j < aseq.size(); ++j)
203  {
204  const Activity_sequence::Activity& act = aseq.activity(j);
205  const Physical_activity* pa_p = boost::get<Physical_activity>(&act);
206  if(pa_p)
207  {
208  if(name == "" || name == pa_p->name())
209  {
210  *out++ = pa_p;
211  }
212  }
213  }
214  }
215 }
216 
217 /* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
218 
219 template<class Iter>
220 void Description::intentional_activities(Iter out, const std::string& name) const
221 {
222  *out++ = &root_;
223  BOOST_FOREACH(const Act_tree::value_type& pr, tree_)
224  {
225  if(name == "" || name == pr.first->name())
226  {
227  *out++ = pr.first;
228  }
229  }
230 }
231 
232 /* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
233 
234 template<class A, class OutIt>
235 void Description::ancestors(const A& act, OutIt result, int max_depth) const
236 {
237  using namespace boost;
238 
240  typedef Intentional_activity Ia;
241 
242  if(is_root(act) || max_depth == 0) { return; }
243 
244  const Ia* parent_p = 0;
245  BOOST_FOREACH(const Act_tree::value_type& pr, tree_)
246  {
247  const Activity_sequence& aseq = pr.second;
248  Asit act_p = std::find_if(
249  aseq.begin(),
250  aseq.end(),
251  bind(same_activity<A>, _1, cref(act)));
252 
253  if(act_p != aseq.end())
254  {
255  parent_p = pr.first;
256  break;
257  }
258  }
259 
260  IFT(parent_p, Illegal_argument, "Cannot get ancestors: activity not found");
261 
262  *result++ = parent_p;
263  if(max_depth > 0) --max_depth;
264  ancestors(*parent_p, result, max_depth);
265 }
266 
267 /* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
268 
269 template<class A>
270 bool Description::contains(const A& act) const
271 {
272  using namespace boost;
273 
274  if(is_root(act)) return true;
275  BOOST_FOREACH(const Act_tree::value_type& pr, tree_)
276  {
277  const Activity_sequence& aseq = pr.second;
278  size_t c = std::count_if(
279  aseq.begin(),
280  aseq.end(),
281  bind(same_activity<A>, _1, cref(act)));
282 
283  if(c != 0) return true;
284  }
285 
286  return false;
287 }
288 
291 {
292 public:
294  {
295  size_t id;
296  std::string name;
297  size_t start;
298  size_t end;
299  size_t parent;
300  size_t role;
302 
303  bool operator<(const Activity_info& ai) const { return name < ai.name; }
304 
305  //bool operator==(const Activity_info& ai) const
306  //{
307  // return id == ai.id &&
308  // name == ai.name &&
309  // start == ai.start &&
310  // end == ai.end &&
311  // parent == ai.parent &&
312  // std::equal(trajs.begin(), trajs.end(), ai.trajs.begin());
313  //}
314  };
315 
316 public:
317  void fill(const Description& desc, const Activity_library& lib)
318  {
319  index = 0;
320  info_set.clear();
321 
322  const Intentional_activity rt = desc.root_activity();
323  Activity_info ai = {
324  0,
325  rt.name(),
326  rt.start(),
327  rt.end(),
328  0,
329  0,
330  rt.trajectories()
331  };
332  info_set.insert(ai);
333 
334  fill_tree(desc.root_activity(), index, desc, lib);
335  }
336 
337  void extract(Description& desc, const Activity_library& lib) const
338  {
339  typedef std::multiset<Activity_info>::const_iterator Iter;
340 
341  // find root
342  Iter ai_p = std::find_if(
343  info_set.begin(),
344  info_set.end(),
345  boost::bind(&Description_info::is_root, this, _1));
346  IFT(ai_p != info_set.end(), Runtime_error,
347  "Cannot read description; root group must have ID = 0");
348 
349  // create root
351  ai_p->name,
352  ai_p->start,
353  ai_p->end,
354  Vector(),
355  ai_p->trajs));
356 
357  // fill other activities
358  extract_tree(desc.root_activity(), 0, desc, lib);
359  }
360 
361 private:
362  void fill_tree
363  (
364  const Intentional_activity& act,
365  size_t id,
366  const Description& desc,
367  const Activity_library& lib
368  );
369 
370  void extract_tree
371  (
372  const Intentional_activity& act,
373  size_t id,
374  Description& desc,
375  const Activity_library& lib
376  ) const;
377 
378  template<class AseqIt, class VecIt>
379  void get_child_sequences
380  (
381  size_t id,
382  AseqIt seq_out,
383  VecIt ids_out,
384  const Activity_library& lib
385  ) const;
386 
387  bool is_root(const Activity_info& ai) const { return ai.id == 0; }
388 
389  bool same_traj_set(const Traj_set& ts1, const Traj_set& ts2) const
390  {
391  return std::equal(ts1.begin(), ts1.end(), ts2.begin());
392  }
393 
394 public:
395  std::multiset<Activity_info> info_set;
396  size_t index;
397 };
398 
399 /* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
400 
401 template<class AseqIt, class VecIt>
402 void Description_info::get_child_sequences
403 (
404  size_t id,
405  AseqIt seq_out,
406  VecIt ids_out,
407  const Activity_library& lib
408 ) const
409 {
410  typedef std::map<size_t, const Activity_info*> Time_info_map;
411  std::vector<Time_info_map> ti_maps;
412  std::vector<Traj_set> traj_sets;
413 
414  BOOST_FOREACH(const Activity_info& ai, info_set)
415  {
416  if(ai.id != id && ai.parent == id)
417  {
418  std::vector<Traj_set>::iterator set_p;
419  set_p = std::find_if(
420  traj_sets.begin(),
421  traj_sets.end(),
422  boost::bind(
423  &Description_info::same_traj_set,
424  this,
425  boost::cref(ai.trajs),
426  _1));
427 
428  size_t seq_idx;
429  if(set_p == traj_sets.end())
430  {
431  traj_sets.push_back(ai.trajs);
432  ti_maps.push_back(Time_info_map());
433  seq_idx = traj_sets.size() - 1;
434  }
435  else
436  {
437  seq_idx = std::distance(traj_sets.begin(), set_p);
438  }
439 
440  ti_maps[seq_idx][ai.start] = &ai;
441  }
442  }
443 
444  for(size_t j = 0; j < ti_maps.size(); ++j)
445  {
446  std::vector<size_t> ids;
447  Activity_sequence aseq("ROLER");
448  BOOST_FOREACH(const Time_info_map::value_type& pr, ti_maps[j])
449  {
450  if(lib.is_physical(pr.second->name))
451  {
452  size_t s = pr.second->start;
453  size_t e = pr.second->end;
454  Trajectory trajectory;
455  std::vector<Vector> zeros(2, Vector((int)(e - s + 1), 0.0));
456  trajectory.set_dimensions(s, zeros.begin(), zeros.end());
457  aseq.add(Physical_activity(
458  pr.second->name,
459  trajectory,
460  pr.second->trajs));
461  }
462  else if(lib.is_intentional(pr.second->name))
463  {
464  aseq.add(Intentional_activity(
465  pr.second->name,
466  pr.second->start,
467  pr.second->end,
468  Vector(),
469  pr.second->trajs));
470  }
471  else
472  {
473  assert(false);
474  }
475 
476  ids.push_back(pr.second->id);
477  }
478 
479  *seq_out++ = aseq;
480  *ids_out++ = ids;
481  }
482 }
483 
493 template<class InIt>
494 void write
495 (
496  const Description& desc,
497  const std::string& path,
498  const Activity_library& lib,
499  InIt first,
500  InIt last
501 )
502 {
503  typedef Description_info::Activity_info Act_info;
504 
505  const size_t ntrajs = desc.root_activity().trajectories().size();
506  const size_t nframes = desc.end() + 1;
507 
508  // check for all kinds of errors
509  IFT(ntrajs != 0, Illegal_argument,
510  "Cannot write description: contains no trajectories");
511  IFT(*desc.root_activity().trajectories().rbegin() == ntrajs - 1,
512  Illegal_argument, "Cannot write description: bad trajectory indices.");
513  IFT(std::distance(first, last) == ntrajs, Illegal_argument,
514  "Cannot write description: bad trajectory indices.");
515  IFT(kjb_c::is_directory(path.c_str()), Illegal_argument,
516  "Cannot write description: invalid path.");
517 
518  // too much std:: in this function
519  using namespace std;
520 
521  // parse tree
522  Description_info dinfo;
523  dinfo.fill(desc, lib);
524 
525  // write files
526  Int_matrix empty_mat(nframes, ntrajs, -1);
527  vector<size_t> parents(dinfo.info_set.size());
528  vector<size_t> roles(dinfo.info_set.size());
529 
530  string cur_name = dinfo.info_set.begin()->name;
531  multiset<Act_info>::const_iterator ai_p = dinfo.info_set.begin();
532  while(ai_p != dinfo.info_set.end())
533  {
534  Int_matrix cur_mat = empty_mat;;
535  while(ai_p != dinfo.info_set.end() && ai_p->name == cur_name)
536  {
537  // save activity
538  BOOST_FOREACH(size_t j, ai_p->trajs)
539  {
540  for(size_t t = ai_p->start; t <= ai_p->end; ++t)
541  {
542  cur_mat(t, j) = ai_p->id;
543  }
544  }
545 
546  parents[ai_p->id] = ai_p->parent;
547  roles[ai_p->id] = ai_p->role;
548  ++ai_p;
549  }
550 
551  // write to file
552  ofstream ofs((path + "/" + cur_name + ".txt").c_str());
553  IFT(ofs, IO_error, "Cannot write description: error creating file.");
554 
555  // write first line
556  ofs << -1 << ",";
557  InIt notlast = last;
558  copy(first, --notlast, ostream_iterator<size_t>(ofs, ","));
559  ofs << *notlast << endl;
560 
561  // write other lines
562  for(size_t t = 0; t < nframes; ++t)
563  {
564  ofs << t << ",";
565  Int_vector r = cur_mat.get_row(t);
566  copy(r.begin(), r.end() - 1, ostream_iterator<int>(ofs, ","));
567  ofs << *r.rbegin() << endl;
568  }
569 
570  ofs.close();
571 
572  if(ai_p != dinfo.info_set.end()) cur_name = ai_p->name;
573  }
574 
575  ofstream ofs((path + "/parents.txt").c_str());
576  IFT(ofs, IO_error, "Cannot write description: error creating file.");
577  copy(parents.begin(), parents.end()-1, ostream_iterator<size_t>(ofs, ","));
578  ofs << *parents.rbegin() << endl;
579 
580  copy(roles.begin(), roles.end()-1, ostream_iterator<size_t>(ofs, ","));
581  ofs << *roles.rbegin() << endl;
582  ofs.close();
583 }
584 
586 template<class InIt>
587 Description_info::Activity_info find_group
588 (
589  Int_matrix& act_mat,
590  size_t tr,
591  size_t jc,
592  InIt first,
593  InIt last
594 )
595 {
597 
598  // first row and column of matrix are not part of the group info
599  IFT(tr != 0 && jc != 0, Illegal_argument,
600  "Cannot find group; bad row or col.");
601 
602  // group of interest
603  ai.id = act_mat(tr, jc);
604 
605  // find initial and final frames
606  size_t r = tr;
607  while(r != 0 && act_mat(r, jc) == ai.id) --r;
608  size_t sr = r + 1;
609 
610  r = sr;
611  while(r != act_mat.get_num_rows() && act_mat(r, jc) == ai.id) ++r;
612  size_t er = r - 1;
613 
614  // find individuals participating
615  for(size_t i = 1; i < act_mat.get_num_cols(); ++i)
616  {
617  if(act_mat(sr, i) == ai.id)
618  {
619  // find index
620  InIt sz_p = std::find(first, last, act_mat(0, i));
621  IFT(sz_p != last, Runtime_error, "Cannot read activity; bad IDs.");
622  ai.trajs.insert(*sz_p);
623 
624  // clear column area
625  for(size_t k = sr; k <= er; ++k)
626  {
627  act_mat(k, i) = -1;
628  }
629  }
630  }
631 
632  ai.start = act_mat(sr, 0);
633  ai.end = act_mat(er, 0);
634 
635  return ai;
636 }
637 
647 template<class InIt>
648 void read
649 (
650  Description& desc,
651  const std::string& path,
652  const Activity_library& lib,
653  InIt first,
654  InIt last
655 )
656 {
657  typedef Description_info::Activity_info Ainfo;
658  using boost::tie;
659  using std::vector;
660 
661  IFT(kjb_c::is_directory(path.c_str()), Illegal_argument,
662  "Cannot read description: invalid path.");
663 
665  Description_info dinfo;
666 
667  // read parents file
668  IFT(kjb_c::is_file((path + "/parents.txt").c_str()), IO_error,
669  "Cannot read description; cannot read parents file.");
670  Int_vector parents(path + "/parents.txt");
671 
672  // go through each activity and look at corresponding file
673  const size_t nacts = lib.num_activities();
674  for(size_t i = 0; i < nacts; ++i)
675  {
676  const std::string& name = lib.activity_name(i);
677  //std::string act_fp = path + "/" + name + ".txt";
678  //if(!kjb_c::is_file(act_fp.c_str())) continue;
679 
680  std::string act_fpg = path + "/" + name + "*.txt";
681  Word_list wl(act_fpg.c_str());
682  if(wl.size() == 0) continue;
683 
684  for(size_t f = 0; f < wl.size(); ++f)
685  {
686  // parse file and find different groups;
687  // we shall first put activities in vectors then worry about tree
688  std::string act_fp = wl[f];
689  Int_matrix cur_act(act_fp);
690  for(size_t t = 1; t < cur_act.get_num_rows(); ++t)
691  {
692  for(size_t j = 1; j < cur_act.get_num_cols(); ++j)
693  {
694  if(cur_act(t, j) != -1)
695  {
696  Ainfo ai = find_group(cur_act, t, j, first, last);
697  ai.name = name;
698  ai.parent = parents[ai.id];
699  dinfo.info_set.insert(ai);
700  }
701  }
702  }
703  }
704  }
705 
706  // fill description
707  dinfo.extract(desc, lib);
708 }
709 
714 Description make_trivial_description(const Data& data);
715 
716 }} // namespace kjb::bbb
717 
718 #endif /*B3_DESCRIPTION_H */
719 
Definition: bbb_intentional_activity.h:39
bool is_physical(const std::string &act) const
Is the given activity physical?.
Definition: bbb_activity_library.h:75
size_t id
Definition: bbb_description.h:295
void fill(const Description &desc, const Activity_library &lib)
Definition: bbb_description.h:317
Definition for the Int_matrix class, a thin wrapper on the KJB Int_matrix struct and its related func...
bool is_root(const Intentional_activity &act) const
Return true if the given activity is the root.
Definition: bbb_description.h:163
size_t role
Definition: bbb_description.h:300
size_t parent
Definition: bbb_description.h:299
Description make_trivial_description(const Data &data)
Create a trivial description from data, where everybody is simply walking independently.
Definition: bbb_description.cpp:184
Description_info::Activity_info find_group(Int_matrix &act_mat, size_t tr, size_t jc, InIt first, InIt last)
Find group in activity matrix. Utility function for read().
Definition: bbb_description.h:588
Definition: bbb_activity_sequence.h:39
This class implements matrices, in the linear-algebra sense, restricted to integer-valued elements...
Definition: l_int_matrix.h:71
size_t index
Definition: bbb_description.h:396
void add(const Intentional_activity &activity)
Add intentional activity.
Definition: bbb_activity_sequence.h:65
Description(size_t start, size_t end, const Traj_set &trajs)
Create a descrpition with the given end times.
Definition: bbb_description.h:70
void extract(Description &desc, const Activity_library &lib) const
Definition: bbb_description.h:337
friend std::ostream & operator<<(std::ostream &, const Description &)
Push an description to an output stream.
bool operator<(const Activity_info &ai) const
Definition: bbb_description.h:303
void intentional_activities(Iter out, const std::string &name="") const
Get all the phsical activities of this description.
Definition: bbb_description.h:220
for k
Definition: APPgetLargeConnectedEdges.m:61
bool is_intentional(const std::string &act) const
Is the given activity intentional?.
Definition: bbb_activity_library.h:69
r
Definition: APPgetLargeConnectedEdges.m:127
Wrapper for the libKJB type Word_list (useful for globs).
Definition: l_word_list.h:60
Definition: bbb_likelihood.h:37
friend Data sample(const Likelihood &likelihood, const Description &desc)
Sample data from likelihood, given a description.
std::multiset< Activity_info > info_set
Definition: bbb_description.h:395
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
const std::string & name() const
Get this PA's name.
Definition: bbb_physical_activity.h:61
std::multimap< const Intentional_activity *, Activity_sequence > Act_tree
Definition: bbb_description.h:66
Wrapped version of Word_list integrated with kjb_glob.
iterator end()
Definition: l_int_vector.h:446
Definition: bbb_description.h:62
Extract sparse information from description (for write()).
Definition: bbb_description.h:290
const std::string & activity_name(size_t a) const
Get the name of the a-th activity.
Definition: bbb_activity_library.h:54
std::ostream & operator<<(std::ostream &ost, const Activity_sequence &aseq)
Push an activity sequence to an output stream.
#define IFT(a, ex, msg)
Definition: l_exception.h:101
std::string name
Definition: bbb_description.h:296
boost::variant< Physical_activity, Intentional_activity > Activity
Definition: bbb_activity_sequence.h:42
size_t end() const
Gets the end frame of this IA.
Definition: bbb_intentional_activity.h:68
Vec_type get_row(int row) const
Return a specified row of this matrix, in the form of an Int_vector.
Definition: l_int_matrix.cpp:168
const Intentional_activity & root_activity() const
Get the root activity of this description.
Definition: bbb_description.h:136
const Activity & activity(size_t j) const
Get the jth actiity.
Definition: bbb_activity_sequence.h:59
const_iterator end() const
Iterator to one-past-the-last activity.
Definition: bbb_activity_sequence.h:56
void ancestors(const A &act, OutIt result, int max_depth=-1) const
Get the ancestors of the given activity.
Definition: bbb_description.h:235
size_t start() const
Gets the start frame of this IA.
Definition: bbb_intentional_activity.h:65
void physical_activities(Iter out, const std::string &name="") const
Get all the phsical activities of this description.
Definition: bbb_description.h:197
Definition: bbb_traj_set.h:37
This class implements vectors, in the linear-algebra sense, restricted to integer-valued elements...
Definition: l_int_vector.h:83
size_t size() const
Get the jth actiity.
Definition: bbb_activity_sequence.h:62
size_t end
Definition: bbb_description.h:298
size_t num_activities() const
Get number of activities avialable.
Definition: bbb_activity_library.h:60
void write(const Data &data, const std::string &fname)
Write to file.
Definition: bbb_data.cpp:123
std::pair< Act_tree::const_iterator, Act_tree::const_iterator > children(const Intentional_activity &act) const
Get the the children of a given IA node.
Definition: bbb_description.h:140
Generic_trajectory< Complete_state > Trajectory
Definition: pt_complete_trajectory.h:42
Definition: bbb_data.h:37
size_t start
Definition: bbb_description.h:297
const Activity_sequence * add_child_sequence(const Intentional_activity *act, const Activity_sequence &aseq)
Add an activity sequence as a child of an IA.
Definition: bbb_description.h:117
reverse_iterator rbegin()
Definition: l_int_vector.h:466
void clear(const Intentional_activity &root)
Resets this description and sets the given IA as root.
Definition: bbb_description.h:109
void read(Data &data, const std::string &fname)
Read from file.
Definition: bbb_data.cpp:37
Description(const Description &desc)
Copy constructor: deep copy.
Definition: bbb_description.h:90
const_iterator begin() const
Iterator to first activity.
Definition: bbb_activity_sequence.h:53
Definition: bbb_description.h:293
const std::string & name() const
Gets the name of this IA.
Definition: bbb_intentional_activity.h:62
size_t size() const
Number of trajectories in this set.
Definition: bbb_traj_set.h:79
int get_num_rows() const
Return the number of rows in the matrix.
Definition: l_int_matrix.h:470
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
Traj_set trajs
Definition: bbb_description.h:301
const_reverse_iterator rbegin() const
Iterator to reverse first index.
Definition: bbb_traj_set.h:73
void insert(const SizeType &j)
Add trajectory to this association.
Definition: bbb_traj_set.h:57
int get_num_cols() const
Return the number of columns in the matrix.
Definition: l_int_matrix.h:481
Definition: bbb_physical_activity.h:39
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
Object thrown when input or output fails.
Definition: l_exception.h:496
iterator begin()
Definition: l_int_vector.h:426
Description(const Intentional_activity &root)
Create a descrpition which is forced to be of the given kind.
Definition: bbb_description.h:80
Description & operator=(const Description &desc)
Assignment: deep copy.
Definition: bbb_description.h:96
bool is_root(const Physical_activity &) const
Return true if the given activity is the root.
Definition: bbb_description.h:160
std::vector< Activity >::const_iterator const_iterator
Definition: bbb_activity_sequence.h:43
Definition for the Int_vector class, a thin wrapper on the KJB Int_vector struct and its related func...
Definition: bbb_activity_library.h:38
const Traj_set & trajectories() const
Get this IA's trajectories.
Definition: bbb_intentional_activity.h:77
size_t start() const
Get the start time of this description.
Definition: bbb_description.h:130
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...
size_t end() const
Get the end time of this description.
Definition: bbb_description.h:133
Object thrown when computation fails somehow during execution.
Definition: l_exception.h:321
bool contains(const A &act_p) const
Checks whether the given activity is contained (by address) in this description.
Definition: bbb_description.h:270