21 #ifndef TRACKING_TRAJECTORY_H
22 #define TRACKING_TRAJECTORY_H
27 #include <l/l_sys_io.h>
35 #include <boost/optional.hpp>
36 #include <boost/foreach.hpp>
37 #include <boost/lambda/lambda.hpp>
38 #include <boost/algorithm/string.hpp>
39 #include <boost/format.hpp>
40 #include <boost/lexical_cast.hpp>
70 bool parse(
const std::string& line)
79 void write(std::ofstream& ofs)
const
115 public std::vector<boost::optional<Generic_trajectory_element<T> > >
119 typedef std::vector<boost::optional<Trajectory_element> >
Base;
137 size_t parse(std::ifstream& ifs);
142 void write(
const std::string& filename)
const;
172 transform(std::back_inserter(vals), boost::lambda::_1);
179 template <
class OutIt,
class Trans>
180 void transform(OutIt outp, Trans f)
const;
190 swap(static_cast<Base&>(t1), static_cast<Base&>(t2));
219 for(
size_t i = 0;
i < this->size(); ++
i)
222 out[
i] = to_vector((*
this)[
i]->value);
241 if(!parse_header(line))
246 this->push_back(elem);
250 this->push_back(
false);
263 std::ofstream ofs(filename.c_str());
271 for(
size_t f = 0; f < this->size(); f++)
275 (*this)[f]->write(ofs);
291 size_t sz = this->size();
292 for(
size_t i = 0;
i < sz;
i++)
308 size_t sz = this->size();
309 for(
int i = static_cast<int>(sz) - 1;
i >= 0;
i--)
323 template <
class OutIt,
class Trans>
326 int stime = start_time();
327 int etime = end_time();
329 if(stime == -1 || etime == -1)
336 for(
size_t i = stm - 1;
i <= etm - 1;
i++)
339 *outp++ = f((*
this)[
i]->value);
350 public std::map<Entity_id, Generic_trajectory<T> >
355 typedef std::map<Entity_id, Trajectory>
Base;
366 void parse(
const std::string& path,
const std::string& entity);
372 void write(
const std::string& dirname)
const;
391 swap(t1.duration_, t2.duration_);
392 swap(static_cast<Base&>(t1), static_cast<Base&>(t2));
407 typedef typename Base::value_type Map_element;
412 BOOST_FOREACH(
const Map_element& element, *
this)
414 out_map[element.first] = element.second.
to_canonical(to_vector);
425 const std::string& path,
426 const std::string& entity
429 using namespace boost;
431 if(entity.empty())
return;
433 std::string pattern = path +
"/" + entity +
"_*.txt";
434 Word_list word_list(pattern.c_str(), NULL);
436 for(
size_t i = 0;
i < word_list.size();
i++)
438 std::string path = word_list[
i];
442 std::string::size_type fname_st = path.rfind(
'/') + 1;
443 std::string fname = path.substr(fname_st);
445 std::vector<std::string> parts;
446 split(parts, fname, is_any_of(
"_."), token_compress_on);
449 "Invalid filename format for track file:", (fname.c_str()));
452 size_t index = boost::lexical_cast<
size_t>(parts[1]);
457 std::ifstream ifs(path.c_str());
458 IFTD(ifs,
IO_error,
"File not found: %s", (path.c_str()));
466 if(this->size() == 0)
469 duration() = traj.
parse(ifs);
473 size_t num_frames = traj.
parse(ifs);
475 "Trajectories have differing duration.");
487 kjb_c::kjb_mkdir(dirname.c_str());
492 boost::format fmt(
"%s/%s_%d.txt");
493 std::string filename = (
495 % boost::lexical_cast<std::string>(it->first.type)
496 % it->first.index).str();
498 assert(duration() == it->second.size());
499 it->second.write(filename);
friend void swap(Generic_trajectory< T > &t1, Generic_trajectory< T > &t2)
Swap two trajectories.
Definition: tracking_trajectory.h:183
Generic_trajectory_map(size_t duration=0)
Constructor.
Definition: tracking_trajectory.h:359
Generic_trajectory_map< kjb::Vector > Canonical_trajectory_map
Definition: tracking_trajectory.h:53
std::vector< boost::optional< Trajectory_element > > Base
Definition: tracking_trajectory.h:119
double height
Definition: tracking_trajectory.h:195
double get_entity_type_average_height(Entity_type type)
Get the average height of an entity.
Definition: tracking_entity.cpp:110
Represents an element of a trajectory of a particular entity.
Definition: tracking_trajectory.h:61
double get_entity_type_average_girth(Entity_type type)
Get the average girth of an entity.
Definition: tracking_entity.cpp:138
Canonical_trajectory to_canonical(F to_vector) const
Definition: tracking_trajectory.h:207
Canonical_trajectory_map to_canonical(F to_vector) const
convert to a "canonical" trajectory of kjb::Vectors. Used for evaluation.
Definition: tracking_trajectory.h:405
std::vector< T > get_values() const
Get a vector of the values of this trajectory.
Definition: tracking_trajectory.h:169
height
Definition: APPgetLargeConnectedEdges.m:33
Wrapper for the libKJB type Word_list (useful for globs).
Definition: l_word_list.h:60
#define KJB_THROW(ex)
Definition: l_exception.h:46
Entity_id id
Definition: tracking_trajectory.h:194
friend void swap(Generic_trajectory_element< T > &t1, Generic_trajectory_element< T > &t2)
Swap two trajectories.
Definition: tracking_trajectory.h:97
Wrapped version of Word_list integrated with kjb_glob.
size_t & duration()
Returns the duration of this set of trajectories.
Definition: tracking_trajectory.h:381
void write(std::ofstream &ofs) const
Writes this element to a stream.
Definition: tracking_trajectory.h:79
Generic_trajectory_element< T > Trajectory_element
Definition: tracking_trajectory.h:118
#define IFT(a, ex, msg)
Definition: l_exception.h:101
void parse(const std::string &path, const std::string &entity)
Reads all trajectories in a directory.
Definition: tracking_trajectory.h:424
Entity + index; used for file I/O.
Definition: tracking_entity.h:82
int end_time() const
Returns index of last valid element.
Definition: tracking_trajectory.h:306
std::map< Entity_id, Trajectory > Base
Definition: tracking_trajectory.h:355
Generic_trajectory< kjb::Vector > Canonical_trajectory
Definition: tracking_trajectory.h:49
end get the endpoints of the long edges and an image of the long edges for id
Definition: APPgetLargeConnectedEdges.m:96
Generic_trajectory_element< T > Trajectory_element
Definition: tracking_trajectory.h:354
Represents a set of trajectories; it is a map from entity to trajectory.
Definition: tracking_trajectory.h:53
void write(const std::string &filename) const
Writes a single trajectory to a file.
Definition: tracking_trajectory.h:261
count
Definition: APPgetLargeConnectedEdges.m:71
void swap(kjb::Gsl_Multimin_fdf &m1, kjb::Gsl_Multimin_fdf &m2)
Swap two wrapped multimin objects.
Definition: gsl_multimin.h:693
double get_entity_type_average_width(Entity_type type)
Get the average width of an entity.
Definition: tracking_entity.cpp:124
#define KJB_THROW_3(ex, fmt, params)
Definition: l_exception.h:56
bool parse(const std::string &line)
Reads an element from a line of a file.
Definition: tracking_trajectory.h:70
T value
Definition: tracking_trajectory.h:106
void write(const std::string &dirname) const
Writes this trajectory map to files in directory given by the string.
Definition: tracking_trajectory.h:485
static void write_invalid(std::ofstream &ofs)
Writes this element to a stream.
Definition: tracking_trajectory.h:88
Generic_trajectory(size_t sz, double h, double w, double g)
Definition: tracking_trajectory.h:130
Represents a trajectory. Vector of optionals to trajectory elements.
Definition: tracking_trajectory.h:49
int getline(FILE *fp, std::string *line, char EOL= '\n')
Like C's fgets but with std::string, or C++'s getline but with FILE*.
Generic_trajectory(double h, double w, double g)
Definition: tracking_trajectory.h:127
friend void swap(Generic_trajectory_map< T > &t1, Generic_trajectory_map< T > &t2)
Swap two trajectories.
Definition: tracking_trajectory.h:388
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
Object thrown when attempting to use unimplemented functionality.
Definition: l_exception.h:281
Entity_type
Definition: tracking_entity.h:40
bool parse_header(const std::string &)
Parses the header information from a header line.
Definition: tracking_trajectory.h:145
void write_header(std::ofstream &) const
Writes the header of a trajectory. Does nothing by default. Please specialize.
Definition: tracking_trajectory.h:154
Generic_trajectory_element(const T &value_)
Definition: tracking_trajectory.h:65
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
size_t parse(std::ifstream &ifs)
Reads a single trajectory from the given file.
Definition: tracking_trajectory.h:231
Generic_trajectory(size_t size)
Definition: tracking_trajectory.h:125
Object thrown when input or output fails.
Definition: l_exception.h:496
Support for error handling exception classes in libKJB.
void transform(OutIt outp, Trans f) const
Fill a sequence of values obtained from this trajectory.
Definition: tracking_trajectory.h:324
double girth
Definition: tracking_trajectory.h:197
#define IFTD(a, ex, msg, params)
Definition: l_exception.h:112
Generic_trajectory< T > Trajectory
Definition: tracking_trajectory.h:353
size_t duration() const
Returns the duration of this set of trajectories.
Definition: tracking_trajectory.h:375
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...
Generic_trajectory()
Definition: tracking_trajectory.h:123
Object thrown when computation fails somehow during execution.
Definition: l_exception.h:321
Generic_trajectory_element()
Definition: tracking_trajectory.h:63
double width
Definition: tracking_trajectory.h:196
int start_time() const
Returns index of first valid element.
Definition: tracking_trajectory.h:289