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