00001 /* Residual distribution method, author: Wu Linghui (wulh@ihep.ac.cn) */ 00002 00003 #ifndef RESIALIGN_H 00004 #define RESIALIGN_H 00005 00006 #include "MdcAlignAlg/MdcAlign.h" 00007 #include "MdcAlignAlg/MdcAliParams.h" 00008 00009 #include "GaudiKernel/NTuple.h" 00010 #include "GaudiKernel/INTupleSvc.h" 00011 00012 #include "TH1F.h" 00013 #include "TGraph.h" 00014 00015 #include <fstream> 00016 00017 using namespace Alignment; 00018 00019 class ResiAlign: public MdcAlign { 00020 public: 00021 ResiAlign(); 00022 ~ResiAlign(); 00023 void clear(); 00024 void initialize(TObjArray* hlist, IMdcGeomSvc* mdcGeomSvc, 00025 IMdcCalibFunSvc* mdcFunSvc); 00026 00027 void setParam(MdcAliParams& param); 00028 bool fillHist(MdcAliEvent* event); 00029 void updateConst(MdcAlignPar* alignPar); 00030 00031 static Double_t funResi(double* x, double* par); 00032 00033 private: 00034 MdcAliParams m_param; 00035 TObjArray* m_hlist; 00036 IMdcGeomSvc* m_mdcGeomSvc; 00037 IMdcCalibFunSvc* m_mdcFunSvc; 00038 INTupleSvc* ntupleSvc; 00039 00040 int m_ndiv; 00041 double m_resiCut; 00042 bool m_layBound[LAYERNMAX]; 00043 00044 Long64_t m_npoint[NEP]; 00045 double m_zrange[LAYERNMAX][2]; 00046 double m_radii[LAYERNMAX]; 00047 double m_docaMin[LAYERNMAX]; 00048 double m_docaMax[LAYERNMAX]; 00049 double m_xe[WIRENMAX]; 00050 double m_ye[WIRENMAX]; 00051 double m_ze[WIRENMAX]; 00052 double m_xw[WIRENMAX]; 00053 double m_yw[WIRENMAX]; 00054 double m_zw[WIRENMAX]; 00055 00056 NTuple::Tuple* m_tuple[NEP+1]; 00057 NTuple::Item<long> m_iRun[NEP+1]; 00058 NTuple::Item<long> m_iEvt[NEP+1]; 00059 NTuple::Item<float> m_resi[NEP+1]; 00060 NTuple::Item<float> m_p[NEP+1]; 00061 NTuple::Item<float> m_pt[NEP+1]; 00062 NTuple::Item<float> m_phi[NEP+1]; 00063 NTuple::Item<float> m_lay[NEP+1]; 00064 NTuple::Item<float> m_lr[NEP+1]; 00065 NTuple::Item<float> m_cel[NEP+1]; 00066 00067 std::ofstream m_fevt; 00068 00069 TH1F* m_hnTrk; 00070 TH1F* m_hnHit; 00071 TH1F* m_hlayHitmap; 00072 TH1F* m_hresAll; 00073 TH1F* m_hresInn; 00074 TH1F* m_hresStp; 00075 TH1F* m_hresOut; 00076 TH1F* m_hresLay[LAYERNMAX]; 00077 TGraph* m_gr[NEP]; 00078 00079 int m_ncut1; 00080 int m_ncut2; 00081 int m_ncut3; 00082 int m_ncut4; 00083 int m_ncut5; 00084 int m_ncut6; 00085 int m_ncut7; 00086 int m_ncut8; 00087 int m_ncut9; 00088 int m_ncut10; 00089 int m_ncut11; 00090 int m_ncut12; 00091 int m_ncut13; 00092 }; 00093 00094 inline void ResiAlign::setParam(MdcAliParams& param){ 00095 MdcAlign::setParam(param); 00096 m_param = param; 00097 } 00098 00099 #endif /*RESIALIGN_H*/