00001 #ifndef ATLFAST_XKALMAN_H
00002 #define ATLFAST_XKALMAN_H
00003
00004 #include "AtlfastAlgs/TrackTrajectory.h"
00005 #include "CLHEP/Matrix/Matrix.h"
00006 #include <vector>
00007 #include <string>
00008 #include "CLHEP/Random/JamesRandom.h"
00009 #include "AtlfastAlgs/CorrelatedData.h"
00010 class MsgStream;
00011
00012 namespace Atlfast {
00013 using std::string;
00014 class CorrelatedData;
00015
00016
00017 class Displacement{
00018 public:
00019 Displacement() {}
00020 ~Displacement() {}
00021 Displacement(double off, double pow,
00022 vector<double> average, vector<double> rms):
00023 m_off(off), m_pow(pow), m_average(average), m_rms(rms) {}
00024 Displacement(const Displacement& disp);
00025 Displacement operator=(const Displacement& disp);
00026
00027 double off() const {return m_off;}
00028 double pow() const {return m_pow;}
00029 double average(int i) const {return m_average[i];}
00030 double rms(int i) const {return m_rms[i];}
00031 private:
00032 double m_off;
00033 double m_pow;
00034 vector<double> m_average;
00035 vector<double> m_rms;
00036 };
00037
00038
00039
00040
00041
00042 class XKalman{
00043 public:
00044 XKalman(int, MsgStream&);
00045 ~XKalman() {
00046
00047 }
00048 TrackTrajectory doBremFit(const TrackTrajectory&) const;
00049 private:
00050
00051 Displacement m_d0Disp;
00052 Displacement m_phiDisp;
00053
00054 string m_file;
00055
00056 int m_nRBins, m_nEtaBins, m_nPBins;
00057 double m_rMin, m_rMax;
00058 double m_pMin, m_pMax;
00059 double m_p1scal, m_p2scal;
00060 HepMatrix m_bremR;
00061 vector<HepMatrix> m_pTDist;
00062
00063 MsgStream* m_log;
00064 CorrelatedData* m_correlatedData;
00065 HepRandomEngine* m_randomEngine;
00066
00067
00068 double scaleDPhi(double pT, double old,
00069 const Displacement& axis,
00070 int iRBrem, double deltaP) const;
00071 double scalePT(double pT, double pscale) const;
00072
00073 };
00074
00075 }
00076
00077 #endif