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 */