00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef TBuilderCurl_FLAG_
00014 #define TBuilderCurl_FLAG_
00015
00016 #ifdef TRKRECO_DEBUG_DETAIL
00017 #ifndef TRKRECO_DEBUG
00018 #define TRKRECO_DEBUG
00019 #endif
00020 #endif
00021
00022 #include <string>
00023
00024 #define HEP_SHORT_NAMES
00025 #include "CLHEP/Alist/AList.h"
00026 #include "TrkReco/TMSelector.h"
00027 #include "TrkReco/TBuilder0.h"
00028 #include "TrkReco/TCurlFinderParameters.h"
00029
00030
00031
00032 #ifndef CLHEP_POINT3D_H
00033 #include "CLHEP/Geometry/Point3D.h"
00034 #endif
00035 #ifndef ENABLE_BACKWARDS_COMPATIBILITY
00036 typedef HepGeom::Point3D<double> HepPoint3D;
00037 #endif
00038
00039 #include "GaudiKernel/IInterface.h"
00040 #include "GaudiKernel/Kernel.h"
00041 #include "GaudiKernel/Service.h"
00042 #include "MagneticField/IMagneticFieldSvc.h"
00043 #include "MagneticField/MagneticFieldSvc.h"
00044
00045 #include "CLHEP/Matrix/Vector.h"
00046 #include "CLHEP/Matrix/SymMatrix.h"
00047 #include "CLHEP/Vector/ThreeVector.h"
00048 #include "CLHEP/Vector/LorentzVector.h"
00049
00050
00051
00052
00054 class TBuilderCurl : public TBuilder0 {
00055
00056 public:
00058 TBuilderCurl(const std::string & name);
00059
00061 virtual ~TBuilderCurl();
00062
00063 public:
00065 TTrack * buildStereo(TTrack & track, const AList<TMLink> &) const;
00066 TTrack * buildStereoMC(TTrack & track, const AList<TMLink> &) const;
00067
00068
00069 void setParam(const TCurlFinderParameter&);
00070
00071 TTrack * buildStereo(TTrack & track, const AList<TMLink> &, const AList<TMLink> &) const;
00072 bool buildStereo(TTrack & track, double &dZ, double &tanL) const;
00073
00074
00075
00076
00077
00078
00079 private:
00080
00081 void setArcZ(TTrack&, AList<TMLink>&) const;
00082 void setArcZ(TTrack&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00083 unsigned) const;
00084 void setArcZ(TTrack&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00085 AList<TMLink>&,
00086 unsigned) const;
00087 void setArcZ(TTrack&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00088 AList<TMLink>&, AList<TMLink>&,
00089 unsigned) const;
00090 void setArcZ(TTrack&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00091 AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00092 unsigned) const;
00093 void setArcZ(TTrack&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00094 AList<TMLink>&, AList<TMLink>&, AList<TMLink>&, AList<TMLink>&,
00095 unsigned) const;
00096
00097
00098 unsigned appendPoints(AList<TMLink>&, AList<TMLink>&, double, double, TTrack&, double) const;
00099
00100
00101 void resetHelixFit(THelixFitter *) const;
00102
00103
00104 void fitLine(AList<TMLink>&, double&, double&, double&, AList<TMLink>&, AList<HepPoint3D>&, int&) const;
00105 void fitLine2(const AList<TMLink>&, double&, double&, double&, AList<TMLink>&, AList<HepPoint3D>&, int&) const;
00106
00107
00108 unsigned check(const TTrack&) const;
00109
00110
00111 bool fitWDD(double &xc, double &yc, double &r,
00112 AList<TMLink> &list) const;
00113 int stereoHit(double &xc, double &yc, double &r, double &q,
00114 AList<TMLink> & list) const;
00115
00116 void makeLine(TTrack&, AList<TMLink>&, const AList<TMLink>&,
00117 AList<TMLink>&, double&, double&, double&, AList<HepPoint3D>&) const;
00118 int sortByLocalId(AList<TMLink> &list) const;
00119
00120
00121 void plotArcZ(AList<TMLink>&, double = 0., double = 0., const int = 1) const;
00122
00123 private:
00124 mutable THelixFitter _fitter;
00125 TCurlFinderParameter m_param;
00126
00127
00128 private:
00129 IMagneticFieldSvc* m_pmgnIMF;
00130
00131 };
00132
00133
00134
00135 #ifdef TBuilderCurl_NO_INLINE
00136 #define inline
00137 #else
00138 #undef inline
00139 #define TBuilderCurl_INLINE_DEFINE_HERE
00140 #endif
00141
00142 #ifdef TBuilderCurl_INLINE_DEFINE_HERE
00143
00144 #endif
00145
00146 #undef inline
00147
00148 #endif