#include <TMuiRoadOGroup.h>
Public Methods | |
TMuiRoadOGroup (const short &arm, const float &z, const float &MutrWin, const float &MuidWin) | |
Constructor. More... | |
TMuiRoadOGroup (const TMuiRoadOGroup &source) | |
Copy constructor. More... | |
~TMuiRoadOGroup () | |
Destructor. More... | |
void | SetGroup (const short &Group) |
set the group index for this road. More... | |
void | AttachRoad (TMuiRoadMapO::pointer road) |
Attach the given road to this group. More... | |
void | MergeGroup (TMuiRoadOGroup *sourceGroup) |
Merge roads from another group to this group. More... | |
void | RemoveRoad (TMuiRoadMapO::pointer road) |
Remove the given road from this group. More... | |
void | TMuiRoadOGroup::Clear () |
size_t | GoldenIndex () const |
Get the road index for "Golden" road in this group. More... | |
short | Group () const |
unique index of of this group. More... | |
short | TotalRoads () const |
How many roads in all does this group contain? More... | |
TMuiRoadMapO::pointer | Road (int roadIndex) const |
Pointer to the Nth road of this group. More... | |
bool | IsGroup (TMuiRoadMapO::pointer road) |
Does the road belong to this group. More... | |
PHPoint | ProjectToZ (TMutFitPar fit_par, double ZPlane) |
Project a TMutFitPar object to the the specified ZPlane. More... | |
Public Attributes | |
vector< TMuiRoadMapO::pointer > | f_pRoads |
Private Methods | |
void | MarkGolden () |
Mark the "Golden" road in this group. More... | |
Private Attributes | |
float | fZPlane |
float | fMutrWin |
float | fMuidWin |
short | fGroup |
size_t | fGoldenIndex |
float | fChi2DOF |
short | fArm |
short | fTotalRoads |
Definition at line 19 of file TMuiRoadOGroup.h.
|
Constructor.
Definition at line 17 of file TMuiRoadOGroup.cxx.
00019 : fZPlane(z),fMutrWin(MutrWin),fMuidWin(MuidWin), 00020 fGroup(-1),fGoldenIndex(0),fChi2DOF(100000.0), 00021 fArm(arm),fTotalRoads(0),f_pRoads(0) 00022 {} |
|
Copy constructor.
Definition at line 25 of file TMuiRoadOGroup.cxx.
00026 : fZPlane(source.fZPlane),fMutrWin(source.fMutrWin), 00027 fMuidWin(source.fMuidWin), 00028 fGroup(source.fGroup),fGoldenIndex(source.fGoldenIndex), 00029 fChi2DOF(source.fChi2DOF),fArm(source.fArm), 00030 fTotalRoads(source.fTotalRoads),f_pRoads(source.f_pRoads) 00031 {} |
|
Destructor.
Definition at line 34 of file TMuiRoadOGroup.cxx.
00034 {} |
|
Attach the given road to this group.
Definition at line 75 of file TMuiRoadOGroup.cxx. References f_pRoads, and fTotalRoads. Referenced by mMuiRoadFinder1::flag_golden, and MergeGroup.
00076 { 00077 // Attach the road to the group. 00078 f_pRoads.push_back(road); 00079 fTotalRoads = f_pRoads.size(); 00080 } |
|
Get the road index for "Golden" road in this group.
Definition at line 57 of file TMuiRoadOGroup.cxx. References fGoldenIndex.
00058 { 00059 return fGoldenIndex; 00060 } |
|
unique index of of this group.
Definition at line 65 of file TMuiRoadOGroup.cxx. References fGroup. Referenced by SetGroup.
00066 { 00067 return fGroup; 00068 } |
|
Does the road belong to this group.
Definition at line 220 of file TMuiRoadOGroup.cxx. References f_pRoads, fArm, fMutrWin, fZPlane, and ProjectToZ.
00221 { 00222 vector<TMuiRoadMapO::pointer>::iterator i; 00223 short arm = road->get()->get_arm(); 00224 00225 // Is the given road in the same arm as the group? 00226 if ( arm != fArm ) { 00227 return false; 00228 } 00229 00230 // 00231 if(f_pRoads.size()>=1500) 00232 { 00233 return false; 00234 } 00235 00236 // Grouping roads with following criteria: 00237 // 1. Project roads to MuTR Station 3, if they are in a certain window 00238 // 2. If pass 1, if all associated hits are in a certain window in each gap 00239 00240 // compare the given road with each road within this group 00241 bool St3IsGroup = false; 00242 PHPoint roadX = ProjectToZ(road->get()->get_fit_par(),fZPlane); 00243 for (i = f_pRoads.begin(); i != f_pRoads.end(); i++) { 00244 // Does the road already exist in the group? 00245 if( (*i)->get()->get_key() == road->get()->get_key() ){ 00246 return false; 00247 } 00248 PHPoint iX = ProjectToZ((*i)->get()->get_fit_par(),fZPlane); 00249 if ( (fabs(iX.getX()- roadX.getX()) < fMutrWin) && (fabs(iX.getY()- roadX.getY()) < fMutrWin)){ 00250 St3IsGroup=true; 00251 break; 00252 } 00253 } 00254 if(St3IsGroup == false) 00255 { 00256 return false; 00257 } 00258 // check associated clusters in each MuID gap 00259 int MatchingVHits = 0; 00260 int MatchingHHits = 0; 00261 int MinMatchHits = 1; 00262 00263 for (i = f_pRoads.begin(); i != f_pRoads.end(); i++) 00264 { 00265 //Loop over clusters and check for matches within window 00266 TMuiClusterMapO::const_key_iterator iclust1 00267 =road->get()->get_associated<TMuiClusterO>(); 00268 TMuiClusterMapO::const_key_iterator iclust2 00269 =(*i)->get()->get_associated<TMuiClusterO>(); 00270 00271 while(TMuiClusterMapO::const_pointer clust1 = iclust1.next()) 00272 { 00273 iclust2 = (*i)->get()->get_associated<TMuiClusterO>(); 00274 while(TMuiClusterMapO::const_pointer clust2 = iclust2.next()) 00275 { 00276 if(clust1->get()->get_key()==clust2->get()->get_key()) 00277 { 00278 if(clust1->get()->get_orientation()==0) 00279 { 00280 MatchingHHits++; 00281 }else{ 00282 MatchingVHits++; 00283 } 00284 } 00285 } 00286 } 00287 00288 00289 } 00290 00291 if(MatchingVHits>=MinMatchHits && MatchingHHits>=MinMatchHits && St3IsGroup) 00292 { 00293 return true; 00294 } 00295 00296 return false; 00297 00298 } |
|
Mark the "Golden" road in this group.
Definition at line 136 of file TMuiRoadOGroup.cxx. References f_pRoads, fZPlane, and ProjectToZ. Referenced by SetGroup.
00137 { 00138 // Mark the "golden" road in the group. 00139 // Lets sort the roads by their projections to station 3 of the MuTr 00140 // and choose the median. We may want to weight by Chi2. 00141 if(f_pRoads.size()>=1500) 00142 { 00143 cout<<"Road Group reached maximum entries: 1500\n"; 00144 return; 00145 } 00146 double st3x, st3y; 00147 double st3xlist[1500]; 00148 double st3ylist[1500]; 00149 double Rst3xlist[1500]; 00150 double Rst3ylist[1500]; 00151 TMuiRoadMapO::pointer Rlist[1500]; 00152 int xycount=0; 00153 00154 short Golden = 0; 00155 vector<TMuiRoadMapO::pointer>::iterator i; 00156 TMuiRoadMapO::pointer road = NULL; 00157 PHPoint st3p; 00158 for (i=f_pRoads.begin(); i != f_pRoads.end(); i++){ 00159 road=(*i); 00160 st3p = ProjectToZ(road->get()->get_fit_par(),fZPlane); 00161 st3xlist[xycount] = st3p.getX(); 00162 st3ylist[xycount] = st3p.getY(); 00163 Rst3xlist[xycount] = st3p.getX(); 00164 Rst3ylist[xycount] = st3p.getY(); 00165 Rlist[xycount] = road; 00166 xycount++; 00167 } 00168 // Now lets calculate the median 00169 gsl_sort(st3xlist,1,xycount); 00170 gsl_sort(st3ylist,1,xycount); 00171 st3x = gsl_stats_median_from_sorted_data(st3xlist,1,xycount); 00172 st3y = gsl_stats_median_from_sorted_data(st3ylist,1,xycount); 00173 // Lets find the road the minimum distance from this 00174 double MinDist = 1E10; 00175 double ThisDist = 0.0; 00176 int med_id = 0; 00177 for (int rid = 0; rid < xycount; rid++) 00178 { 00179 ThisDist = sqrt((st3x-Rst3xlist[rid])*(st3x-Rst3xlist[rid])+(st3y-Rst3ylist[rid])*(st3y-Rst3ylist[rid])); 00180 if(ThisDist < MinDist) 00181 { 00182 MinDist = ThisDist; 00183 road = Rlist[rid]; 00184 med_id = rid; 00185 } 00186 } 00187 //Now lets set this road as golden 00188 for (i=f_pRoads.begin(); i != f_pRoads.end(); i++){ 00189 if( (*i) == road){ 00190 Golden = 1; 00191 (*i)->get()->set_golden(Golden); 00192 }else{ 00193 (*i)->get()->set_golden(0); 00194 } 00195 } 00196 } |
|
Merge roads from another group to this group.
Definition at line 85 of file TMuiRoadOGroup.cxx. References AttachRoad, Road, and TotalRoads. Referenced by mMuiRoadFinder1::flag_golden.
00086 { 00087 if(sourceGroup==NULL) 00088 { 00089 return; 00090 } 00091 int roadIndex = 0; 00092 while(roadIndex < sourceGroup->TotalRoads()) 00093 { 00094 AttachRoad(sourceGroup->Road(roadIndex)); 00095 roadIndex++; 00096 } 00097 } |
|
Project a TMutFitPar object to the the specified ZPlane.
Definition at line 207 of file TMuiRoadOGroup.cxx. References fZPlane. Referenced by IsGroup, and MarkGolden.
00208 { 00209 PHPoint z_intersect; 00210 PHGeometry::intersectionLinePlane( 00211 PHLine(fit_par.get_point(),fit_par.get_tangent()), 00212 PHPlane(PHPoint(0,0,fZPlane),PHVector(0,0,1)), 00213 z_intersect 00214 ); 00215 return z_intersect; 00216 } |
|
Remove the given road from this group.
Definition at line 120 of file TMuiRoadOGroup.cxx. References f_pRoads, and fTotalRoads.
00121 { 00122 // Remove the road from the group. 00123 vector<TMuiRoadMapO::pointer>::iterator i; 00124 for (i=f_pRoads.begin(); i != f_pRoads.end(); i++){ 00125 if((*i) == road){ 00126 f_pRoads.erase(i); 00127 break; 00128 } 00129 } 00130 fTotalRoads = f_pRoads.size(); 00131 } |
|
Pointer to the Nth road of this group.
Definition at line 101 of file TMuiRoadOGroup.cxx. References f_pRoads. Referenced by MergeGroup.
|
|
set the group index for this road.
Definition at line 41 of file TMuiRoadOGroup.cxx. References f_pRoads, fGroup, Group, and MarkGolden. Referenced by mMuiRoadFinder1::flag_golden.
|
|
|
|
How many roads in all does this group contain?
Definition at line 203 of file TMuiRoadOGroup.cxx. References fTotalRoads. Referenced by MergeGroup.
00203 {return fTotalRoads;} |
|
Definition at line 88 of file TMuiRoadOGroup.h. Referenced by AttachRoad, IsGroup, MarkGolden, RemoveRoad, Road, and SetGroup. |
|
Definition at line 85 of file TMuiRoadOGroup.h. Referenced by IsGroup. |
|
Definition at line 84 of file TMuiRoadOGroup.h. |
|
Definition at line 83 of file TMuiRoadOGroup.h. Referenced by GoldenIndex. |
|
Definition at line 82 of file TMuiRoadOGroup.h. |
|
Definition at line 80 of file TMuiRoadOGroup.h. |
|
Definition at line 79 of file TMuiRoadOGroup.h. Referenced by IsGroup. |
|
Definition at line 86 of file TMuiRoadOGroup.h. Referenced by AttachRoad, RemoveRoad, and TotalRoads. |
|
Definition at line 78 of file TMuiRoadOGroup.h. Referenced by IsGroup, MarkGolden, and ProjectToZ. |