/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/MdcCalibAlg/MdcCalibAlg-00-09-02/MdcCalibAlg/MdcCalib.h

Go to the documentation of this file.
00001 #ifndef MDCCALIB_H
00002 #define MDCCALIB_H
00003 
00004 
00005 #include "MdcGeomSvc/IMdcGeomSvc.h"
00006 #include "MdcGeomSvc/MdcGeomSvc.h"
00007 #include "MdcGeomSvc/MdcGeoWire.h"
00008 #include "MdcGeomSvc/MdcGeoLayer.h"
00009 
00010 #include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
00011 #include "MdcCalibFunSvc/MdcCalibFunSvc.h"
00012 
00013 #include "MdcCalibAlg/MdcCalParams.h"
00014 #include "MdcCalibAlg/MdcCalEvent.h"
00015 #include "MdcCalibAlg/MdcCalibConst.h"
00016 #include "MdcUtilitySvc/IMdcUtilitySvc.h"
00017 #include "MdcUtilitySvc/MdcUtilitySvc.h"
00018 
00019 #include "GaudiKernel/NTuple.h"
00020 #include "GaudiKernel/INTupleSvc.h"
00021 
00022 #include "TROOT.h"
00023 #include "TFile.h"
00024 #include "TObjArray.h"
00025 #include "TH1F.h"
00026 #include "TF1.h"
00027 #include "TTree.h"
00028 #include "TFolder.h"
00029 #include "TGraph.h"
00030 
00031 #include <fstream>
00032 #include <vector>
00033 #include <map>
00034 
00035 //const double pi = 3.14159265;
00036 class MdcCalib {
00037 public:
00038      MdcCalib();
00039      virtual ~MdcCalib();
00040      virtual void initialize(TObjArray* hlist, IMdcGeomSvc* mdcGeomSvc,
00041                              IMdcCalibFunSvc* mdcFunSvc, IMdcUtilitySvc* mdcUtilitySvc) = 0;
00042 
00043      virtual void setParam(MdcCalParams& param) = 0;
00044      virtual int  fillHist(MdcCalEvent* event) = 0;
00045      virtual int  updateConst(MdcCalibConst* calconst) = 0;
00046      virtual void clear() = 0;
00047 
00048 private:
00049      int getHresId(int lay, int entr, int lr, int bin) const;
00050      int calDetEffi();
00051      bool getCellTrkPass(MdcCalEvent* event, int iTrk, int cellTrkPass[]);
00052 
00053      MdcCalParams m_param;
00054 
00055      TObjArray* m_hlist;
00056      IMdcGeomSvc* m_mdcGeomSvc;
00057      IMdcCalibFunSvc* m_mdcFunSvc;
00058      IMdcUtilitySvc*   m_mdcUtilitySvc;
00059 
00060      int m_nEvt;
00061      int m_cut1;
00062      int m_cut2;
00063      int m_cut3;
00064      int m_cut4;
00065      int m_cut5;
00066      int m_cut6;
00067 
00068      int m_nlayer;
00069      int m_nEntr[43];
00070      int m_nBin[MdcCalNLayer];
00071      bool fgReadWireEff;
00072 
00073      bool m_layBound[MdcCalNLayer];
00074 
00075      /* for calculating efficiency */
00076 /*      int m_nTrk[43]; */
00077 /*      int m_nGoodHit[43]; */
00078      bool m_fgGoodWire[43][288];
00079      TH1F* m_effNtrk;
00080      TH1F* m_effNtrkRecHit;
00081 
00082      /* calculating efficiency without the impact of track fitting */
00083      int m_hitNum[43][2];
00084 
00085      /* for track cut */
00086      bool m_fgIni;
00087      double m_docaMax[MdcCalNLayer];
00088 
00089      /* for calculating hitphi */
00090      double m_radii[MdcCalNLayer];
00091      double m_xe[MdcCalTotCell];
00092      double m_ye[MdcCalTotCell];
00093      double m_ze[MdcCalTotCell];
00094      double m_xw[MdcCalTotCell];
00095      double m_yw[MdcCalTotCell];
00096      double m_zw[MdcCalTotCell];
00097 
00098      TFolder* m_fdcom;
00099 
00100      TH1F* m_hresAllInc;
00101      TH1F* m_hresAllExc;
00102      TH1F* m_hresAllAve;
00103 
00104      TH1F* m_hresInnInc;
00105      TH1F* m_hresInnExc;
00106 
00107      TH1F* m_hresStpInc;
00108      TH1F* m_hresStpExc;
00109 
00110      TH1F* m_hresOutInc;
00111      TH1F* m_hresOutExc;
00112 
00113      TFolder* m_fdResQ;
00114      TH1F* m_hresAveAllQ[14];
00115      TH1F* m_hresAveOutQ[14];
00116      TH1F* m_hresAveLayQ[43][14];
00117 
00118      TH1F* m_hratio;
00119 
00120      TH1F* m_hTes[10];
00121      TH1F* m_hbbTrkFlg;
00122      TH1F* m_hTesAll;
00123      TH1F* m_hTesGood;
00124      TH1F* m_hTesAllFlag;
00125      TH1F* m_hTesRec;
00126      TH1F* m_hTesCalFlag;
00127      TH1F* m_hTesCalUse;
00128 
00129      TH1F* m_hnRawHit;
00130 
00131      TH1F* m_hpt;
00132      TH1F* m_hpMax;
00133      TH1F* m_hpMaxCms;
00134      TH1F* m_hptPos;
00135      TH1F* m_hptNeg;
00136 
00137      TH1F* m_hp;
00138      TH1F* m_hp_cms;
00139      TH1F* m_hpPos;
00140      TH1F* m_hpNeg;
00141      TH1F* m_hpPoscms;
00142      TH1F* m_hpNegcms;
00143 
00144      //results after four momentum cut
00145      TH1F* m_hp_cut;
00146 
00147      TH1F* m_hnTrk;
00148      TH1F* m_hnTrkCal;
00149      TH1F* m_hnhitsRec;
00150      TH1F* m_hnhitsRecInn;
00151      TH1F* m_hnhitsRecStp;
00152      TH1F* m_hnhitsRecOut;
00153      TH1F* m_hnhitsCal;
00154      TH1F* m_hnhitsCalInn;
00155      TH1F* m_hnhitsCalStp;
00156      TH1F* m_hnhitsCalOut;
00157      TH1F* m_wirehitmap;
00158      TH1F* m_layerhitmap;
00159      TH1F* m_hchisq;
00160 
00161      // histogram for distribution of noise
00162      TH1F* m_hnoisephi;
00163      TH1F* m_hnoiselay;
00164      TH1F* m_hnoisenhits;
00165 
00166      TH1F* m_hdr;
00167      TH1F* m_hphi0;
00168      TH1F* m_hkap;
00169      TH1F* m_hdz;
00170      TH1F* m_htanl;
00171      TH1F* m_hcosthe;
00172      TH1F* m_hcostheNeg;
00173      TH1F* m_hcosthePos;
00174 
00175      TH1F* m_hx0;
00176      TH1F* m_hy0;
00177      TH1F* m_hdelZ0;
00178      TGraph* m_grX0Y0;
00179      int m_nGrPoint;
00180 
00181      TH1F* m_hitEffAll;
00182      TH1F* m_hitEffRaw;
00183      TH1F* m_hitEffRec;
00184 
00185      /* X-T ntuple */
00186      int m_nEvtNtuple;
00187      NTuple::Tuple*  m_xtTuple[MdcCalNLayer];
00188      NTuple::Item<long> m_cel[MdcCalNLayer];
00189      NTuple::Item<long> m_lr[MdcCalNLayer];
00190      NTuple::Item<long> m_run[MdcCalNLayer];
00191      NTuple::Item<long> m_evt[MdcCalNLayer];
00192      NTuple::Item<double> m_doca[MdcCalNLayer];
00193      NTuple::Item<double> m_dm[MdcCalNLayer];
00194      NTuple::Item<double> m_tdr[MdcCalNLayer];
00195      NTuple::Item<double> m_tdc[MdcCalNLayer];
00196      NTuple::Item<double> m_entr[MdcCalNLayer];
00197      NTuple::Item<double> m_zhit[MdcCalNLayer];
00198      NTuple::Item<double> m_qhit[MdcCalNLayer];
00199      NTuple::Item<double> m_p[MdcCalNLayer];
00200      NTuple::Item<double> m_pt[MdcCalNLayer];
00201      NTuple::Item<double> m_phi0[MdcCalNLayer];
00202      NTuple::Item<double> m_tanl[MdcCalNLayer];
00203      NTuple::Item<double> m_hitphi[MdcCalNLayer];
00204 
00205      /* histograms drift time */
00206      TFolder* m_fdTime;
00207      TH1F* m_htraw[MdcCalNLayer];
00208      TH1F* m_htdr[MdcCalNLayer];
00209      TH1F* m_htdrlr[MdcCalNLayer][2];
00210 
00211      /* histograms of adc */
00212      TFolder* m_fdAdc;
00213      TH1F* m_hadc[MdcCalNLayer];
00214 
00215      /* histograms for spatial resolution */
00216      TFolder* m_fdres;
00217      TH1F* m_hresInc[MdcCalNLayer];
00218      TH1F* m_hreslrInc[MdcCalNLayer][2];
00219      TH1F* m_hresExc[MdcCalNLayer];
00220      TH1F* m_hreslrExc[MdcCalNLayer][2];
00221      TH1F* m_hresphi[MdcCalNLayer][20];
00222 
00223      TFolder* m_fdresAve;
00224      TH1F* m_hresAve[MdcCalNLayer];
00225      TH1F* m_hreslrAve[MdcCalNLayer][2];
00226 
00227      /* histograms for momentum vs phi */
00228      static const int NPhiBin = 20;
00229      static const int NThetaBin = 9;
00230      double m_phiWid;
00231      double m_theWid;
00232      TFolder* m_fdmomPhi;
00233      //in experimental reference frame
00234      TH1F* m_ppPhi[NPhiBin];
00235      TH1F* m_pnPhi[NPhiBin];
00236      TH1F* m_ppThe[NThetaBin];
00237      TH1F* m_pnThe[NThetaBin];
00238      TH1F* m_ppThePhi[NThetaBin][NPhiBin];
00239      TH1F* m_pnThePhi[NThetaBin][NPhiBin];
00240 
00241      //in CMS
00242      TH1F* m_ppPhiCms[NPhiBin];
00243      TH1F* m_pnPhiCms[NPhiBin];
00244      TH1F* m_ppTheCms[NThetaBin];
00245      TH1F* m_pnTheCms[NThetaBin];
00246      TH1F* m_ppThePhiCms[NThetaBin][NPhiBin];
00247      TH1F* m_pnThePhiCms[NThetaBin][NPhiBin];
00248 
00249      /* ntuple for cosmic-ray */
00250      NTuple::Tuple*  m_cosmic;
00251      NTuple::Item<double> m_pUpcos;
00252      NTuple::Item<double> m_pDwcos;
00253      NTuple::Item<double> m_ptUpcos;
00254      NTuple::Item<double> m_ptDwcos;
00255      NTuple::Item<double> m_phiUpcos;
00256      NTuple::Item<double> m_phiDwcos;
00257      NTuple::Item<double> m_drUpcos;
00258      NTuple::Item<double> m_drDwcos;
00259      NTuple::Item<double> m_dzUpcos;
00260      NTuple::Item<double> m_dzDwcos;
00261      NTuple::Item<double> m_ctheUpcos;
00262      NTuple::Item<double> m_ctheDwcos;
00263      NTuple::Item<long> m_nhitUpcos;
00264      NTuple::Item<long> m_nhitDwcos;
00265      NTuple::Item<long> m_chargecos;
00266      NTuple::Item<long> m_tesFlagcos;
00267      NTuple::Item<double> m_tescos;
00268 
00269      /* histograms for spatial resolution vs distance */
00270      double m_dwid;
00271      TFolder* m_fdres2d;
00272      std::map<int, int> m_mapr2d;
00273      std::vector<TH1F*> m_hr2dInc;
00274      std::vector<TH1F*> m_hr2dExc;
00275 
00276      TFolder* m_fdres2t;
00277      TH1F* m_hr2t[MdcCalNLayer][MdcCalNENTRXT][2][45];
00278 
00279      /* for the index of resolution histograms */
00280      static const int HRESLAYER_INDEX  = 10;
00281      static const int HRESLAYER_MASK   = 0xFC00;
00282 
00283      static const int HRESENTRA_INDEX  = 7;
00284      static const int HRESENTRA_MASK   = 0x380;
00285 
00286      static const int HRESLR_INDEX     = 5;
00287      static const int HRESLR_MASK      = 0x60;
00288 
00289      static const int HRESBIN_INDEX    = 0;
00290      static const int HRESBIN_MASK     = 0x1F;
00291 };
00292 
00293 inline void MdcCalib::setParam(MdcCalParams& param){
00294      m_param = param;
00295 }
00296 
00297 #endif /* MDCCALIB_H */

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