00001 #ifndef __MMUIFINDROAD_HH__ 00002 #define __MMUIFINDROAD_HH__ 00003 00004 #include<PHModule.h> 00005 #include<PHTimeServer.h> 00006 #include<PHPoint.h> 00007 #include<TMutFitPar.hh> 00008 #include<vector> 00009 #include<TMuiRoadMapO.h> 00010 #include<TMuiClusterMapO.h> 00011 #include<mMuiFindRoadPar.h> 00012 #include<TMuiRoadFinder.h> 00013 #include<boost/array.hpp> 00014 00022 00023 00049 class mMuiFindRoad : public PHModule 00050 { 00051 public: 00052 00053 mMuiFindRoad(); 00054 ~mMuiFindRoad(); 00055 virtual PHBoolean event(PHCompositeNode*); 00056 00057 private: 00058 00059 // private methods 00060 // 00061 void set_interface_ptrs(PHCompositeNode* top_node); 00062 00063 void find_roads(); 00064 00065 void associate_clusters(); 00066 00067 void associate_cluster(TMuiRoadMapO::pointer road_ptr, 00068 TMuiClusterMapO::pointer in_cluster_ptr, 00069 const PHPoint& road_point, 00070 double in_distance); 00071 00072 void fit_roads(); 00073 00074 void set_road_parameters(); 00075 00076 void apply_road_cuts(); 00077 00078 void eliminate_duplicates(); 00079 00080 bool cluster_list_equal(const TMuiRoadMapO::pointer road1, 00081 const TMuiRoadMapO::pointer road2); 00082 00083 // binary predicate for sorting container of shared pointers to 00084 // keyed objects 00085 // 00086 struct less_ftor 00087 { 00088 bool operator()(const TMuiClusterMapO::pointer& val1, const TMuiClusterMapO::pointer& val2){ 00089 return val1->get()->get_key().get_obj_key() < val2->get()->get_key().get_obj_key(); 00090 } 00091 }; 00092 00093 struct equal_ftor 00094 { 00095 bool operator()(const TMuiClusterMapO::pointer& val1, const TMuiClusterMapO::pointer& val2){ 00096 return val1->get()->get_key().get_obj_key() == val2->get()->get_key().get_obj_key(); 00097 } 00098 }; 00099 00100 // Interface pointers 00101 // 00102 const mMuiFindRoadPar* _mod_par; // parameter table 00103 TMuiClusterMapO* _cluster_map; // IOC 00104 TMuiRoadMapO* _road_map; // IOC 00105 00106 // Local road list 00107 // 00108 TMuiRoadFinder::road_list _roads; 00109 00110 // Timer 00111 // 00112 PHTimeServer::timer _timer; 00113 }; 00114 00115 #endif /* __MMUIFINDROAD_HH__ */ 00116 00117 00118