00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "TrkReco/TMSelector.h"
00014 #include "TrkReco/TTrackBase.h"
00015 #include "TrkReco/TTrack.h"
00016 #include "TrkReco/TCircle.h"
00017 #include "TrkReco/TMLink.h"
00018
00019 TMSelector::TMSelector()
00020 : _nLinksDefined(false),
00021 _nLinks(0),
00022 _nSuperLayersDefined(false),
00023 _nSuperLayers(0),
00024 _minPtDefined(false),
00025 _minPt(0.),
00026 _maxImpactDefined(false),
00027 _maxImpact(0.),
00028 _nLinksStereoDefined(false),
00029 _nLinksStereo(0),
00030 _maxDistanceDefined(false),
00031 _maxDistance(0.) {
00032 }
00033
00034 TMSelector::TMSelector(const TMSelector & a)
00035 : _nLinksDefined(a._nLinksDefined),
00036 _nLinks(a._nLinks),
00037 _nSuperLayersDefined(a._nSuperLayersDefined),
00038 _nSuperLayers(a._nSuperLayers),
00039 _minPtDefined(a._minPtDefined),
00040 _minPt(a._minPt),
00041 _maxImpactDefined(a._maxImpactDefined),
00042 _maxImpact(a._maxImpact),
00043 _nLinksStereoDefined(a._nLinksStereoDefined),
00044 _nLinksStereo(a._nLinksStereo),
00045 _maxDistanceDefined(a._maxDistanceDefined),
00046 _maxDistance(a._maxDistance) {
00047 }
00048
00049 TMSelector::~TMSelector() {
00050 }
00051
00052 bool
00053 TMSelector::select(TTrackBase & b) const {
00054
00055 #ifdef TRKRECO_DEBUG_DETAIL
00056 if (! b.fitted()) {
00057 std::cout << " TSelect::select !!! not fitted yet" << std::endl;
00058 }
00059 #endif
00060
00061 if (b.objectType() == Track) {
00062 TTrack & a = (TTrack &) b;
00063
00064 if (_minPtDefined) {
00065 if (a.pt() < _minPt) {
00066 #ifdef TRKRECO_DEBUG_DETAIL
00067 std::cout << " TSelect ... rejected by min. pt(";
00068 std::cout << a.pt() << ") < ";
00069 std::cout << _minPt << std::endl;
00070 #endif
00071 return false;
00072 }
00073 }
00074
00075 if (_maxImpactDefined) {
00076 if (fabs(a.impact()) > _maxImpact) {
00077 #ifdef TRKRECO_DEBUG_DETAIL
00078 std::cout << " TSelect ... rejected by max. impact(";
00079 std::cout << a.impact() << ") < ";
00080 std::cout << _maxImpact << std::endl;
00081 #endif
00082 return false;
00083 }
00084 }
00085 }
00086 else if (b.objectType() == Circle) {
00087 TCircle & a = (TCircle &) b;
00088
00089 if (_minPtDefined) {
00090 if (a.pt() < _minPt) {
00091 #ifdef TRKRECO_DEBUG_DETAIL
00092 std::cout << " TSelect ... rejected by min. pt(";
00093 std::cout << a.pt() << ") < ";
00094 std::cout << _minPt << std::endl;
00095 #endif
00096 return false;
00097 }
00098 }
00099
00100 if (_maxImpactDefined) {
00101 if (fabs(a.impact()) > _maxImpact) {
00102 #ifdef TRKRECO_DEBUG_DETAIL
00103 std::cout << " TSelect ... rejected by max. impact(";
00104 std::cout << a.impact() << ") < ";
00105 std::cout << _maxImpact << std::endl;
00106 #endif
00107 return false;
00108 }
00109 }
00110 }
00111 else {
00112 std::cout << "TMSelector !!! Unknown object type" << std::endl;
00113 return false;
00114 }
00115
00116 #ifdef TRKRECO_DEBUG_DETAIL
00117 std::cout << " TSelect::select ... accepted" << std::endl;
00118 #endif
00119 return true;
00120 }
00121
00122 bool
00123 TMSelector::preSelect(const TTrackBase & a) const {
00124 if (_nLinksDefined) {
00125 if (a.nLinks() < _nLinks) {
00126 #ifdef TRKRECO_DEBUG_DETAIL
00127 std::cout << " TSelect ... rejected by nLinks(";
00128 std::cout << a.nLinks() << ") < ";
00129 std::cout << _nLinks << std::endl;
00130 #endif
00131 return false;
00132 }
00133 }
00134
00135 if (_nSuperLayersDefined) {
00136 if (NSuperLayers(a.links()) < _nSuperLayers) {
00137 #ifdef TRKRECO_DEBUG_DETAIL
00138 std::cout << " TSelect ... rejected by nSuperLayers(";
00139 std::cout << NSuperLayers(a.links()) << ") < ";
00140 std::cout << _nSuperLayers << std::endl;
00141 #endif
00142 return false;
00143 }
00144 }
00145
00146 #ifdef TRKRECO_DEBUG_DETAIL
00147 std::cout << " TSelect::preSelect ... accepted" << std::endl;
00148 #endif
00149 return true;
00150 }