00001 #include "StiTrackFinderFilter.h"
00002 #include "StiKalmanTrack.h"
00003 #include "StiKalmanTrackNode.h"
00004 #include "StiKTNIterator.h"
00005
00006 StiTrackFinderFilter::StiTrackFinderFilter()
00007 : _minPtsCount(4),
00008 _minFitPtsCount(4),
00009 _minFitToPtsRatio(0.5)
00010 {}
00011
00012 StiTrackFinderFilter::StiTrackFinderFilter(const string & name, const string & description)
00013 : _minPtsCount(4),
00014 _minFitPtsCount(4),
00015 _minFitToPtsRatio(0.3)
00016 {}
00017
00018 StiTrackFinderFilter::~StiTrackFinderFilter()
00019 {}
00020
00021 bool StiTrackFinderFilter::accept(const StiTrack *track) const
00022 {
00023 int npts = track->getPointCount();
00024 int fitNpts = track->getFitPointCount();
00025
00026 if (npts > _minPtsCount && fitNpts > _minFitPtsCount) {
00027 #ifdef NODE_CHECK
00028
00029 const StiKalmanTrack * kTrack = static_cast<const StiKalmanTrack*>(track);
00030 if (kTrack==0) return false;
00031 StiKalmanTrackNode* leaf = kTrack->getLastNode();
00032 if (!leaf) return false;
00033
00034 StiKTNForwardIterator it(leaf);
00035 StiKTNForwardIterator end = it.end();
00036
00037 bool weird = false;
00038 int bad = 0;
00039 while (it!=end)
00040 {
00041 const StiKalmanTrackNode& node = *it;
00042 double x_g = node.x_g();
00043 double y_g = node.y_g();
00044 double z_g = node.z_g();
00045 double rt_g = sqrt(x_g*x_g+y_g*y_g);
00046 if (rt_g>210. || fabs(z_g)>250. )
00047 bad++;
00048 if (bad>2) weird = true;
00049 ++it;
00050 }
00051
00052 if (!weird)
00053 return kNoErrors;
00054 else
00055 return kWeird;
00056 #else
00057 return kNoErrors;
00058 #endif
00059 }
00060 else{
00061 if (npts > _minPtsCount)
00062 return kNoEnoughValidHits;
00063 else
00064 return kNoEnoughFittedValidHits;
00065 }
00066 return false;
00067 }
00068
00069 void StiTrackFinderFilter::initialize()
00070 {
00071 }
00072
00073 void StiTrackFinderFilter::setDefaults()
00074 {
00075 }