/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/MdcAlignAlg/MdcAlignAlg-00-01-04/MdcAlignAlg/MilleAlign.h

Go to the documentation of this file.
00001 /* Millepede matrix method for alignment, author: Volker Blobel  */
00002 /* First used in BESIII drift chamber by Wu Linghui (wulh@ihep.ac.cn) */
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      /* for millepede */
00054      Millepede* m_pMilleAlign;
00055      int m_npar;
00056      bool m_dofs[NDOFALIGN];
00057      double m_sigm[NDOFALIGN];
00058      int m_nGloHit;             /* number of global pars for each hit */
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      /* histograms */
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;            /* for debug */
00079      TH1F* m_hddocaLay[LAYERNMAX];              /* for debug */
00080 };
00081 
00082 inline void MilleAlign::setParam(MdcAliParams& param){
00083      MdcAlign::setParam(param);
00084      m_param = param;
00085 }
00086 
00087 #endif /* MILLEALIGN_H */

Generated on Tue Nov 29 23:12:47 2016 for BOSS_7.0.2 by  doxygen 1.4.7