#include <TrkOutAvgTimeCalculator.h>
Inheritance diagram for TrkOutAvgTimeCalculator:
Public Member Functions | |
bool | trackTime (const TrkRecoTrk &trk, double &time, double &timeerr) const |
virtual bool | trackTime (const TrkRecoTrk &trk, double &time, double &timeerr, int &nHotsUsed) const |
virtual bool | trackTime (const TrkRecoTrk &trk, double &time, double &timeerr, int &nHotsUsed) const |
TrkOutAvgTimeCalculator (const TrkHotSelector &selector, double maxpull) | |
TrkOutAvgTimeCalculator (const TrkHotSelector &selector, double maxpull) | |
virtual | ~TrkOutAvgTimeCalculator () |
virtual | ~TrkOutAvgTimeCalculator () |
Protected Member Functions | |
bool | useHot (const TrkHitOnTrk &x) const |
bool | useHot (const TrkHitOnTrk &x) const |
Private Member Functions | |
TrkOutAvgTimeCalculator & | operator= (const TrkOutAvgTimeCalculator &) |
TrkOutAvgTimeCalculator & | operator= (const TrkOutAvgTimeCalculator &) |
TrkOutAvgTimeCalculator (const TrkOutAvgTimeCalculator &) | |
TrkOutAvgTimeCalculator (const TrkOutAvgTimeCalculator &) | |
Private Attributes | |
double | _maxpull |
|
00025 : 00026 TrkTimeCalculator(selector),_maxpull(maxpull) 00027 {}
|
|
00030 {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00037 { int dummy; return trackTime(trk,time,timeerr,dummy);}
|
|
Implements TrkTimeCalculator. |
|
Implements TrkTimeCalculator. 00036 { 00037 const TrkHitList *hotlist = trk.hits(); 00038 std::vector<ws> l; 00039 ws sum; 00040 for(TrkHitList::hot_iterator i(hotlist->begin());i!=hotlist->end();++i){ 00041 double hottime,hottimeerr; 00042 if(!useHot(*i) || !i->timeResid(hottime,hottimeerr)) continue; 00043 hottime*=1e9; hottimeerr*=1e9; 00044 ws x(hottime,double(1)/(hottimeerr*hottimeerr)); 00045 l.push_back(x); 00046 sum +=x; 00047 } 00048 if (_maxpull>0 && sum.n()>2 && sum.isPhysical()) { // do pull based pruning 00049 std::vector<ws>::iterator worst=l.end(); 00050 do { 00051 worst=l.end(); double worstPull = _maxpull; 00052 for(std::vector<ws>::iterator i=l.begin();i!=l.end();++i) { 00053 ws u(sum); u-=*i; 00054 if (!u.isPhysical()) { 00055 #ifdef MDCPATREC_WARNING 00056 std::cout<<"ErrMsg(warning) rounding problem?" << std::endl; 00057 #endif 00058 continue; 00059 } 00060 double p = fabs(u.pull( *i )); 00061 if (p>worstPull) { worstPull = p; worst = i; } 00062 } 00063 if (worst!=l.end()) { 00064 sum-=*worst; l.erase(worst); 00065 } 00066 } while (sum.isPhysical() && sum.n()>2 && worst!=l.end()); 00067 } 00068 if (sum.isPhysical()) { 00069 time = sum.mean()*1e-9 + trk.trackT0();; 00070 timeerr = sum.sigma()*1e-9; 00071 nHotsUsed = sum.n(); 00072 return true; 00073 } 00074 return false; 00075 }
|
|
00039 { return _selector.useHot(x);}
|
|
00039 { return _selector.useHot(x);}
|
|
|