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