00001
00002
00003
00004 #ifndef MILLEALIGN_H
00005 #define MILLEALIGN_H
00006
00007 #include "MdcAlignAlg/MdcAlign.h"
00008 #include "MdcAlignAlg/Millepede.h"
00009 #include "MdcAlignAlg/Alignment.h"
00010 #include "MdcUtilitySvc/MdcUtilitySvc.h"
00011
00012 #include "TH1F.h"
00013
00014 using namespace Alignment;
00015
00016 class MilleAlign: public MdcAlign {
00017 public:
00018 MilleAlign();
00019 ~MilleAlign();
00020 void clear();
00021 void initialize(TObjArray* hlist, IMdcGeomSvc* mdcGeomSvc,
00022 IMdcCalibFunSvc* mdcFunSvc);
00023
00024 void setParam(MdcAliParams& param);
00025 bool fillHist(MdcAliEvent* event);
00026 void updateConst(MdcAlignPar* alignPar);
00027 public:
00028 std::string fixMomLab;
00029
00030 private:
00031 int getAlignParId(int lay, int iparHit);
00032
00033 bool getDeriLoc(int ipar, int lay, int cel, HepVector helix, HepSymMatrix &helixErr, double &deri);
00034 bool getDeriGlo(int iparHit, int iparGB, int lay, int cel, HepVector helix, HepSymMatrix &helixErr,
00035 double wpos[], double &deri);
00036
00037 double moment(double phi0, double tanl);
00038
00039 MdcAliParams m_param;
00040 TObjArray* m_hlist;
00041 IMdcGeomSvc* m_mdcGeomSvc;
00042 IMdcCalibFunSvc* m_mdcFunSvc;
00043 MdcUtilitySvc* m_mdcUtilitySvc;
00044
00045 double m_resiCut[LAYERNMAX];
00046 double m_docaCut[LAYERNMAX][2];
00047
00048 double m_p[20][15];
00049 double m_dxini[NEP];
00050 double m_dyini[NEP];
00051 double m_rzini[NEP];
00052
00053
00054 Millepede* m_pMilleAlign;
00055 int m_npar;
00056 bool m_dofs[NDOFALIGN];
00057 double m_sigm[NDOFALIGN];
00058 int m_nGloHit;
00059 int m_nglo;
00060 int m_nloc;
00061 std::vector<double> m_par;
00062 std::vector<double> m_error;
00063 std::vector<double> m_pull;
00064 std::vector<double> m_derGB;
00065 std::vector<double> m_derNonLin;
00066 std::vector<double> m_derLC;
00067
00068
00069 TH1F* m_hresAll;
00070 TH1F* m_hresInn;
00071 TH1F* m_hresStp;
00072 TH1F* m_hresOut;
00073 TH1F* m_hresLay[LAYERNMAX];
00074
00075 TH1F* m_hresAllRec;
00076 TH1F* m_hresLayRec[LAYERNMAX];
00077
00078 TH1F* m_hddoca;
00079 TH1F* m_hddocaLay[LAYERNMAX];
00080 };
00081
00082 inline void MilleAlign::setParam(MdcAliParams& param){
00083 MdcAlign::setParam(param);
00084 m_param = param;
00085 }
00086
00087 #endif