00001
00002
00003
00004
00005
00006
00007
00008 #ifndef MUC_CALIB_MGR_H
00009 #define MUC_CALIB_MGR_H
00010
00011 #include <iostream>
00012 #include <vector>
00013 #include <fstream>
00014 #include <time.h>
00015
00016 #include "GaudiKernel/IDataProviderSvc.h"
00017 #include "GaudiKernel/IMessageSvc.h"
00018 #include "GaudiKernel/IAIDATupleSvc.h"
00019 #include "GaudiKernel/INTupleSvc.h"
00020 #include "GaudiKernel/NTuple.h"
00021 #include "GaudiKernel/MsgStream.h"
00022
00023 #include "TCanvas.h"
00024 #include "TGraphErrors.h"
00025 #include "TH1F.h"
00026 #include "TH2F.h"
00027 #include "TF1.h"
00028 #include "TFile.h"
00029 #include "TFolder.h"
00030 #include "TTree.h"
00031 #include "TObjArray.h"
00032 #include "TDirectory.h"
00033
00034 #include "MucCalibAlg/MucStructConst.h"
00035 #include "MucCalibAlg/MucBoxCal.h"
00036 #include "MucCalibAlg/MucStripCal.h"
00037 #include "MucCalibAlg/MucMark.h"
00038 #include "MucCalibAlg/MucIdTransform.h"
00039
00040 using namespace std;
00041
00042 class MucCalibMgr {
00043
00044 public:
00045 MucCalibMgr( std::vector<double> jobInfo, std::vector<int> configInfo, std::string outputFile );
00046 ~MucCalibMgr();
00047
00048
00049 StatusCode InitNtuple();
00050 StatusCode InitHisto();
00051 StatusCode InitArea();
00052
00053
00054 StatusCode DimuSelect();
00055 StatusCode ReadEvent();
00056 StatusCode CheckEvent();
00057 StatusCode FillEvent();
00058
00059
00060 StatusCode AnalyseEffAndNoise();
00061 StatusCode AnalyseCluster();
00062 StatusCode AnalyseRes();
00063
00064 StatusCode SaveConst();
00065 StatusCode EndRun();
00066
00067 protected:
00068
00069 StatusCode InitOnlineHisto();
00070 StatusCode InitHistoLV0();
00071 StatusCode InitHistoLV1();
00072 StatusCode InitHistoLV2();
00073 StatusCode Init2DEffHisto();
00074 StatusCode InitClusterHisto();
00075 StatusCode InitResHisto();
00076 StatusCode InitConstTree();
00077
00078 StatusCode FillDigi( int part, int segment, int layer, int strip );
00079 StatusCode FillExpHit( int part, int segment, int layer, int strip );
00080 StatusCode FillEffHit( int part, int segment, int layer, int strip );
00081 StatusCode FillNosHit( int part, int segment, int layer, int strip );
00082 StatusCode FillCluster( int part, int segment, int layer, int size );
00083
00084 StatusCode EffAndNoiseLV0();
00085 StatusCode EffAndNoiseLV1();
00086 StatusCode EffAndNoiseLV2();
00087 StatusCode PadEff();
00088
00089 StatusCode ClearOnlineHisto();
00090 StatusCode ClearHistoLV0();
00091 StatusCode ClearHistoLV1();
00092 StatusCode ClearHistoLV2();
00093 StatusCode Clear2DEffHisto();
00094 StatusCode ClearClusterHisto();
00095 StatusCode ClearResHisto();
00096 StatusCode ClearConstTree();
00097
00098 public:
00099 IMessageSvc* msgSvc;
00100 INTupleSvc* ntupleSvc;
00101 IDataProviderSvc* eventSvc;
00102
00103 private:
00104 double m_vs;
00105 double m_hv;
00106 double m_th;
00107 double m_er;
00108 double m_tag;
00109
00110 int m_recMode;
00111 int m_usePad;
00112 int m_effWindow;
00113 int m_clusterMode;
00114 int m_clusterSave;
00115 int m_checkEvent;
00116 int m_dimuSelect;
00117 int m_dimuOnly;
00118
00119 string m_outputFile;
00120 ofstream* m_fdata;
00121 clock_t m_jobStart, m_jobFinish;
00122 clock_t m_evtBegin, m_evtEnd;
00123
00124
00125
00126 double m_layerResults[6][LAYER_MAX];
00127 double m_boxResults[6][BOX_MAX];
00128 double m_stripResults[6][STRIP_MAX];
00129
00130 int m_currentRun;
00131 long m_currentEvent;
00132 int m_eventTag;
00133
00134
00135
00136 long m_record[PART_MAX][SEGMENT_MAX][LAYER_MAX][STRIP_INBOX_MAX][5];
00137
00138
00139 MucMark* m_ptrMucMark;
00140 mark_col m_digiCol;
00141 mark_col m_expHitCol;
00142 mark_col m_calHitCol;
00143 mark_col m_effHitCol;
00144 mark_col m_nosHitCol;
00145
00146 mark_col m_segDigiCol[PART_MAX][SEGMENT_MAX];
00147 vector< mark_col > m_clusterCol;
00148 vector<float> m_lineResCol;
00149 vector<float> m_quadResCol;
00150 vector<float> m_extrResCol;
00151
00152
00153 MucIdTransform* m_ptrIdTr;
00154
00155
00156 TGraphErrors* m_geLayerEff;
00157 TGraphErrors* m_geBoxEff;
00158 TGraphErrors* m_geStripEff;
00159 TCanvas* m_cv[CALIB_LV_MAX];
00160
00161
00162
00163 TH1F* m_hHitMapBarrel_Lay[B_LAY_NUM];
00164 TH1F* m_hHitMapEndcap_Lay[2][E_LAY_NUM];
00165 TH1F* m_hHitMapBarrel_Seg[B_SEG_NUM];
00166 TH1F* m_hHitMapEndcap_Seg[2][E_SEG_NUM];
00167
00168
00169 TH1F* m_hHitVsEvent;
00170
00171
00172 TH1F* m_hTrackDistance;
00173
00174
00175 TH1F* m_hTrackPosPhiDiff;
00176 TH1F* m_hTrackMomPhiDiff;
00177
00178 TH1F* m_hTrackPosThetaDiff;
00179 TH1F* m_hTrackMomThetaDiff;
00180
00181
00182 TH2F* m_hDimuTracksPosDiff;
00183 TH2F* m_hDimuTracksMomDiff;
00184
00185
00186 TH2F* m_hPhiCosTheta;
00187
00188
00189 TH1F* m_hBarrelResDist[B_LAY_NUM];
00190 TH1F* m_hEndcapResDist[E_LAY_NUM];
00191 TH1F* m_hBarrelResComp[2];
00192 TH1F* m_hEndcapResComp[2];
00193
00194
00195 TH2F* m_h2DExpMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
00196 TH2F* m_h2DHitMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
00197 TH2F* m_h2DEffMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
00198 TObjArray* m_histArray;
00199
00200
00201
00202 TH1F* m_hBrLayerFire;
00203 TH1F* m_hEcLayerFire;
00204
00205 TH1F* m_hLayerFire;
00206 TH1F* m_hLayerExpHit;
00207 TH1F* m_hLayerEffHit;
00208 TH1F* m_hLayerNosHit;
00209 TH1F* m_hLayerEff;
00210 TH1F* m_hLayerNosRatio;
00211 TH1F* m_hLayerArea;
00212 TH1F* m_hLayerNos;
00213 TH1F* m_hLayerCnt;
00214
00215
00216 TH1F* m_hBoxFire;
00217 TH1F* m_hBoxExpHit;
00218 TH1F* m_hBoxEffHit;
00219 TH1F* m_hBoxNosHit;
00220 TH1F* m_hBoxEff;
00221 TH1F* m_hBoxNosRatio;
00222 TH1F* m_hBoxArea;
00223 TH1F* m_hBoxNos;
00224 TH1F* m_hBoxCnt;
00225
00226
00227 TH1F* m_hStripFireMap[BOX_MAX];
00228 TH1F* m_hStripExpHitMap[BOX_MAX];
00229 TH1F* m_hStripEffHitMap[BOX_MAX];
00230 TH1F* m_hStripNosHitMap[BOX_MAX];
00231 TH1F* m_hStripEffMap[BOX_MAX];
00232 TH1F* m_hStripNosRatioMap[BOX_MAX];
00233 TH1F* m_hStripFire;
00234 TH1F* m_hStripExpHit;
00235 TH1F* m_hStripEffHit;
00236 TH1F* m_hStripNosHit;
00237 TH1F* m_hStripEff;
00238 TH1F* m_hStripNosRatio;
00239 TH1F* m_hStripArea;
00240 TH1F* m_hStripNos;
00241 TH1F* m_hStripCnt;
00242
00243
00244 TH1F* m_hLayerCluster[LAYER_MAX];
00245 TH1F* m_hLayerClusterCmp;
00246 TH1F* m_hBoxCluster[BOX_MAX];
00247 TH1F* m_hBoxClusterCmp;
00248
00249
00250 TTree* m_tJobLog;
00251 TTree* m_tStatLog;
00252 TTree* m_tLayConst;
00253 TTree* m_tBoxConst;
00254 TTree* m_tStrConst;
00255
00256
00257 int m_fStartRun;
00258 int m_fEndRun;
00259 double m_fTotalDAQTime;
00260 double m_fTotalJobTime;
00261 double m_fCalibLayerNum;
00262 double m_fCalibBoxNum;
00263 double m_fCalibStripNum;
00264 double m_fTotalEvent;
00265 double m_fTotalDigi;
00266 double m_fTotalExpHit;
00267 double m_fTotalEffHit;
00268 double m_fTotalNosHit;
00269 double m_fTotalClstNum;
00270 double m_fTotalStripArea;
00271 double m_fLayerCoverage;
00272 double m_fBoxCoverage;
00273 double m_fStripCoverage;
00274
00275
00276 double m_fLayerId;
00277 double m_fLayerEff;
00278 double m_fLayerEffErr;
00279 double m_fLayerNosRatio;
00280 double m_fLayerDigi;
00281 double m_fLayerNos;
00282 double m_fLayerCnt;
00283 double m_fLayerExpHit;
00284 double m_fLayerEffHit;
00285 double m_fLayerNosHit;
00286 double m_fLayerCluster;
00287 double m_fLayerTrkNum;
00288
00289
00290 double m_fBoxId;
00291 double m_fBoxPart;
00292 double m_fBoxSegment;
00293 double m_fBoxLayer;
00294 double m_fBoxEff;
00295 double m_fBoxEffErr;
00296 double m_fBoxNosRatio;
00297 double m_fBoxDigi;
00298 double m_fBoxNos;
00299 double m_fBoxCnt;
00300 double m_fBoxExpHit;
00301 double m_fBoxEffHit;
00302 double m_fBoxNosHit;
00303 double m_fBoxCluster;
00304 double m_fBoxTrkNum;
00305
00306
00307 double m_fStripId;
00308 double m_fStripPart;
00309 double m_fStripSegment;
00310 double m_fStripLayer;
00311 double m_fStripEff;
00312 double m_fStripEffErr;
00313 double m_fStripNosRatio;
00314 double m_fStripDigi;
00315 double m_fStripNos;
00316 double m_fStripCnt;
00317 double m_fStripExpHit;
00318 double m_fStripEffHit;
00319 double m_fStripNosHit;
00320 double m_fStripTrkNum;
00321
00322
00323 NTuple::Tuple* m_eventLogTuple;
00324 NTuple::Item<double> m_ntEventId;
00325 NTuple::Item<double> m_ntEventTag;
00326 NTuple::Item<double> m_ntEsTime;
00327 NTuple::Item<double> m_ntDigiNum;
00328 NTuple::Item<double> m_ntTrackNum;
00329 NTuple::Item<double> m_ntExpHitNum;
00330 NTuple::Item<double> m_ntEffHitNum;
00331 NTuple::Item<double> m_ntNosHitNum;
00332 NTuple::Item<double> m_ntClusterNum;
00333 NTuple::Item<double> m_ntEventTime;
00334
00335 NTuple::Tuple* m_mdcTrkInfoTuple;
00336 NTuple::Item<long> m_charge;
00337 NTuple::Item<double> m_mdcpx;
00338 NTuple::Item<double> m_mdcpy;
00339 NTuple::Item<double> m_mdcpz;
00340 NTuple::Item<double> m_mdcpt;
00341 NTuple::Item<double> m_mdcpp;
00342 NTuple::Item<double> m_mdcphi;
00343 NTuple::Item<double> m_mdctheta;
00344
00345 NTuple::Tuple* m_trackInfoTuple;
00346 NTuple::Item<double> m_ntTrackEvent;
00347 NTuple::Item<double> m_ntTrackTag;
00348 NTuple::Item<double> m_ntTrackHits;
00349 NTuple::Item<double> m_ntTrackSegFly;
00350 NTuple::Item<double> m_ntTrackLayFlyA;
00351 NTuple::Item<double> m_ntTrackLayFlyB;
00352 NTuple::Item<double> m_ntTrackLayFlyC;
00353 NTuple::Item<double> m_trkRecMode;
00354 NTuple::Item<double> m_chi2;
00355 NTuple::Item<double> m_px;
00356 NTuple::Item<double> m_py;
00357 NTuple::Item<double> m_pz;
00358 NTuple::Item<double> m_pt;
00359 NTuple::Item<double> m_pp;
00360 NTuple::Item<double> m_r;
00361 NTuple::Item<double> m_cosTheta;
00362 NTuple::Item<double> m_theta;
00363 NTuple::Item<double> m_phi;
00364 NTuple::Item<double> m_depth;
00365 NTuple::Item<double> m_brLastLayer;
00366 NTuple::Item<double> m_ecLastLayer;
00367 NTuple::Item<double> m_totalHits;
00368 NTuple::Item<double> m_totalLayers;
00369 NTuple::Item<double> m_maxHitsInLayer;
00370
00371 NTuple::Tuple* m_trackDiffTuple;
00372 NTuple::Item<double> m_ntDimuTag;
00373 NTuple::Item<double> m_ntPosPhiDiff;
00374 NTuple::Item<double> m_ntPosThetaDiff;
00375 NTuple::Item<double> m_ntMomPhiDiff;
00376 NTuple::Item<double> m_ntMomThetaDiff;
00377
00378 NTuple::Tuple* m_clusterSizeTuple;
00379 NTuple::Item<double> m_ntClusterSize;
00380
00381 NTuple::Tuple* m_effWindowTuple;
00382 NTuple::Item<double> m_ntEffWindow;
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394 NTuple::Tuple* m_resInfoTuple;
00395 NTuple::Item<double> m_lineRes;
00396 NTuple::Item<double> m_quadRes;
00397 NTuple::Item<double> m_extrRes;
00398 NTuple::Item<long> m_resPart;
00399 NTuple::Item<long> m_resSegment;
00400 NTuple::Item<long> m_resLayer;
00401 NTuple::Item<long> m_resFired;
00402 NTuple::Item<long> m_resMode;
00403
00404 };
00405
00406 #endif