00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #if !defined(PACKAGE_LPAV_H_INCLUDED)
00016 #define PACKAGE_LPAV_H_INCLUDED
00017
00018
00019 #include <iosfwd>
00020
00021
00022 #include "CLHEP/Matrix/SymMatrix.h"
00023 #include "TrackUtil/Lpar.h"
00024 using namespace CLHEP;
00025
00026
00027
00028 class Lpav : public Lpar
00029 {
00030
00031
00032 public:
00033
00034
00035
00036 Lpav();
00037 virtual ~Lpav();
00038
00039
00040 void calculate_average(void);
00041 void calculate_average3(void);
00042 void calculate_average(double x, double y, double w=1);
00043 void calculate_average3(double x, double y, double w=1);
00044 double calculate_lpar(void);
00045 double calculate_lpar3(void);
00046 double fit();
00047 double fit(double x, double y, double w=1);
00048 inline void clear();
00049 void add_point(double x, double y, double w=1);
00050 void add_point_frac(double x, double y, double w, double f);
00051
00052
00053 double nc() const { return m_nc; }
00054 HepSymMatrix cov(int=0) const;
00055 HepSymMatrix cov_c(int=0) const;
00056 int extrapolate(double, double&, double&) const;
00057 double similarity(double, double) const;
00058 double delta_chisq(double x, double y, double w=1) const;
00059 double chisq() const { return m_chisq; }
00060 double prob() const;
00061 double chi_deg() const;
00062
00063
00064
00065
00066 inline const Lpav& operator=( const Lpav& );
00067 const Lpav& operator=( const Lpar& );
00068 const Lpav& operator+=( const Lpav& );
00069
00070 friend std::ostream& operator<<(std::ostream &o, const Lpav &s);
00071 friend Lpav operator+(const Lpav &, const Lpav &);
00072 class Singular {};
00073 class Singular_c {};
00074
00075 protected:
00076
00077
00078
00079
00080 private:
00081
00082 inline Lpav( const Lpav& );
00083
00084
00085 bool operator==( const Lpav& ) const;
00086 bool operator!=( const Lpav& ) const;
00087
00088
00089 void add(double x, double y, double w=1, double a=0, double b=0);
00090 void sub(double x, double y, double w=1, double a=0, double b=0);
00091 void calculate_average_n(double xxav, double yyav, double xyav,
00092 double xrrav, double yrrav, double rrrrav);
00093 double chisq(double chisq) { m_chisq = chisq; return m_chisq; }
00094 double nc(double nc) { m_nc = nc; return m_nc; }
00095 double solve_lambda(void);
00096 double solve_lambda3(void);
00097
00098
00099
00100
00101 double m_wsum;
00102 double m_xsum;
00103 double m_ysum;
00104 double m_xxsum;
00105 double m_yysum;
00106 double m_xysum;
00107 double m_xrrsum;
00108 double m_yrrsum;
00109 double m_rrrrsum;
00110
00111 double m_wsum_temp;
00112 double m_xav;
00113 double m_yav;
00114 double m_xyavp;
00115
00116 double m_rscale;
00117 double m_xxavp;
00118 double m_yyavp;
00119 double m_xrravp;
00120 double m_yrravp;
00121 double m_rrrravp;
00122 double m_sinrot;
00123 double m_cosrot;
00124
00125 double m_nc;
00126 double m_chisq;
00127
00128
00129
00130 };
00131
00132
00133 inline const Lpav & Lpav::operator=(const Lpav &lp) {
00134 Lpar::operator=(lp);
00135 m_wsum = lp.m_wsum;
00136 m_xsum = lp.m_xsum;
00137 m_ysum = lp.m_ysum;
00138 m_xxsum = lp.m_xxsum;
00139 m_yysum = lp.m_yysum;
00140 m_xysum = lp.m_xysum;
00141 m_xrrsum = lp.m_xrrsum;
00142 m_yrrsum = lp.m_yrrsum;
00143 m_rrrrsum = lp.m_rrrrsum;
00144
00145 m_wsum_temp = lp. m_wsum_temp;
00146 m_xav = lp.m_xav;
00147 m_yav = lp.m_yav;
00148 m_xyavp = lp.m_xyavp;
00149
00150 m_rscale = lp. m_rscale;
00151 m_xxavp = lp.m_xxavp;
00152 m_yyavp = lp.m_yyavp;
00153 m_xrravp = lp.m_xrravp;
00154 m_yrravp = lp.m_yrravp;
00155 m_rrrravp = lp.m_rrrravp;
00156 m_sinrot = lp.m_sinrot;
00157 m_cosrot = lp.m_cosrot;
00158
00159 m_nc = lp. m_nc;
00160 m_chisq = lp.m_chisq;
00161 return *this;
00162 }
00163
00164 inline Lpav::Lpav(const Lpav &lp) : Lpar(lp) {
00165 m_wsum = lp.m_wsum;
00166 m_xsum = lp.m_xsum;
00167 m_ysum = lp.m_ysum;
00168 m_xxsum = lp.m_xxsum;
00169 m_yysum = lp.m_yysum;
00170 m_xysum = lp.m_xysum;
00171 m_xrrsum = lp.m_xrrsum;
00172 m_yrrsum = lp.m_yrrsum;
00173 m_rrrrsum = lp.m_rrrrsum;
00174
00175 m_wsum_temp = lp. m_wsum_temp;
00176 m_xav = lp.m_xav;
00177 m_yav = lp.m_yav;
00178 m_xyavp = lp.m_xyavp;
00179
00180 m_rscale = lp. m_rscale;
00181 m_xxavp = lp.m_xxavp;
00182 m_yyavp = lp.m_yyavp;
00183 m_xrravp = lp.m_xrravp;
00184 m_yrravp = lp.m_yrravp;
00185 m_rrrravp = lp.m_rrrravp;
00186 m_sinrot = lp.m_sinrot;
00187 m_cosrot = lp.m_cosrot;
00188
00189 m_nc = lp. m_nc;
00190 m_chisq = lp.m_chisq;
00191 return;
00192 }
00193
00194 inline void Lpav::clear() {
00195 m_wsum = m_xsum = m_ysum = m_xxsum = m_yysum = m_xysum
00196 = m_xrrsum = m_yrrsum = m_rrrrsum = m_rscale = m_nc = 0;
00197 m_chisq = -1;
00198 }
00199
00200 #endif
00201