/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Muc/MucCalibAlg/MucCalibAlg-00-02-16/MucCalibAlg/MucCalibMgr.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------|
00002 //      [File  ]:                       MucCalibMgr.h                           |
00003 //      [Brief ]:       Header file of MucCalibMgr class for encapsulation      |
00004 //      [Author]:       Xie Yuguang, <ygxie@mail.ihep.ac.cn>                    |
00005 //      [Date  ]:       Mar 28, 2006                                            |
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     // for initialize
00049     StatusCode InitNtuple();            
00050     StatusCode InitHisto();     
00051     StatusCode InitArea();
00052 
00053     // for execute
00054     StatusCode DimuSelect();
00055     StatusCode ReadEvent();
00056     StatusCode CheckEvent();
00057     StatusCode FillEvent();
00058         
00059     // for finalize
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;              // BOSS version
00105     double m_hv;              // high voltage,  default = 7200V
00106     double m_th;              // threshold,     default = 75mV
00107     double m_er;              // event rate,    default = 4000Hz
00108     double m_tag;             // input event type 0:Anything(default), 1:Dimu, 
00109                               // 2:RandomTrg, 3:Cosmic ray, 4:Ppjuu, 5:Other
00110     int   m_recMode;          // rec mode flag, 0:ExtTrk(default), 1:SelfTrk, 2: combine
00111     int   m_usePad;           // calculate pad eff flag, 0: no(default), other: yes
00112     int   m_effWindow;        // eff window for tracking in eff calibration, default = 4
00113     int   m_clusterMode;      // flag for cluster building method, 0: no build, 1: basic(default), 2/3: other 
00114     int   m_clusterSave;      // flag for cluster output, 0: no save(default), 1: save 
00115     int   m_checkEvent;       // flag for checking event or not, 0: not check(default), 1: check 
00116     int   m_dimuSelect;       // flag for selecting dimu event or not, 0: no(default), 1: yes 
00117     int   m_dimuOnly;         // flag for using dimu event only or not, 0: no(default), 1: yes 
00118     
00119     string    m_outputFile;       // calibration constants output file name
00120     ofstream* m_fdata;            // cluster data output file, enable if m_clusterMode != 0     
00121     clock_t   m_jobStart, m_jobFinish;  // for time assumption, start at constructor, end at SaveConst()
00122     clock_t   m_evtBegin, m_evtEnd;  // for event processing time, start at ReadEvent(), end at FillEvent()
00123 
00124     // Calibration results for total events
00125     // 0-efficiency, 1-eff err, 2-noise, 3-area(cm^2), 4-Cluster(number of strip), 5-track number
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;         // tag of event 0: all(default), 1: dimu 
00133     // Digi and hit container for total events
00134     // 0-digi number, 1-rec track number, 2-efficiency hit number, 
00135     // 3-incidental and noise hit number, 4-rec/fit hit number
00136     long m_record[PART_MAX][SEGMENT_MAX][LAYER_MAX][STRIP_INBOX_MAX][5];
00137 
00138     // Digi or hit mark collection for one event
00139     MucMark*  m_ptrMucMark;
00140     mark_col  m_digiCol;    // container of digis in an event
00141     mark_col  m_expHitCol;  // container of fitting hits in all rec tracks in an  event 
00142     mark_col  m_calHitCol;  // container of fired hits in a rec track,fresh each track
00143     mark_col  m_effHitCol;  // container of fired hits in all rec tracks in an event 
00144     mark_col  m_nosHitCol;  // container of digis not in all rec tracks in an event
00145 
00146     mark_col  m_segDigiCol[PART_MAX][SEGMENT_MAX];  // container of digis in segment of part
00147     vector< mark_col > m_clusterCol; // container of clusters in all digits of an event
00148     vector<float> m_lineResCol; // container of residual by line fit
00149     vector<float> m_quadResCol; // container of residual by quad fit
00150     vector<float> m_extrResCol; // container of residual by extrapolation
00151 
00152     // Muc id transformer
00153     MucIdTransform* m_ptrIdTr;
00154     
00155     // TGraph for eff with error bar
00156     TGraphErrors* m_geLayerEff;
00157     TGraphErrors* m_geBoxEff;
00158     TGraphErrors* m_geStripEff;
00159     TCanvas*      m_cv[CALIB_LV_MAX];
00160 
00161     // Histogram containers for efficiency and lost
00162     // Hit map for online check 
00163     TH1F* m_hHitMapBarrel_Lay[B_LAY_NUM];     // fill according to layer(map per layer)
00164     TH1F* m_hHitMapEndcap_Lay[2][E_LAY_NUM];
00165     TH1F* m_hHitMapBarrel_Seg[B_SEG_NUM];     // fill according to segmemt(map per segment)
00166     TH1F* m_hHitMapEndcap_Seg[2][E_SEG_NUM];
00167 
00168     // Nhit vs event for online check
00169     TH1F* m_hHitVsEvent;
00170 
00171     // Distance between Ext track hit and Muc track hit on the first inner layer for online check
00172     TH1F* m_hTrackDistance;
00173     
00174     // Diff of phi angles of two tracks(dimuon event)
00175     TH1F* m_hTrackPosPhiDiff;
00176     TH1F* m_hTrackMomPhiDiff;
00177     // Diff of theta angles of two tracks(dimuon event)
00178     TH1F* m_hTrackPosThetaDiff;
00179     TH1F* m_hTrackMomThetaDiff;
00180     
00181     // PhiDiff VS ThetaDiff for dimuon event
00182     TH2F* m_hDimuTracksPosDiff;
00183     TH2F* m_hDimuTracksMomDiff;    
00184     
00185     // Phi VS costheta for online check
00186     TH2F* m_hPhiCosTheta;
00187 
00188     // Spacial resolution
00189     TH1F* m_hBarrelResDist[B_LAY_NUM];  // barrel spacial resolution
00190     TH1F* m_hEndcapResDist[E_LAY_NUM];  // endcap spacial resolution
00191     TH1F* m_hBarrelResComp[2];             // barrel spacial resolution vs layer
00192     TH1F* m_hEndcapResComp[2];             // ebdcao soacuak resikytuib vs layer    
00193 
00194     // 2D histogram for eff map
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     // LV0
00202     TH1F* m_hBrLayerFire; // only barrel
00203     TH1F* m_hEcLayerFire; // only endcap
00204 
00205     TH1F* m_hLayerFire;   // all
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     // LV1
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     // LV2
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     // Histograms for cluster 
00244     TH1F* m_hLayerCluster[LAYER_MAX];
00245     TH1F* m_hLayerClusterCmp;
00246     TH1F* m_hBoxCluster[BOX_MAX];
00247     TH1F* m_hBoxClusterCmp;
00248     
00249     //Tree for constant root file 
00250     TTree* m_tJobLog;
00251     TTree* m_tStatLog;
00252     TTree* m_tLayConst;
00253     TTree* m_tBoxConst;
00254     TTree* m_tStrConst;
00255     
00256     // Job log tree 
00257     int m_fStartRun;            // the id of run start
00258     int m_fEndRun;              // the id of run end
00259     double m_fTotalDAQTime;     // total DAQ time
00260     double m_fTotalJobTime;     // total job time
00261     double m_fCalibLayerNum;    // the number of layers calibrated
00262     double m_fCalibBoxNum;      // the number of boxes calibrated
00263     double m_fCalibStripNum;    // the number of strips calibrated
00264     double m_fTotalEvent;       // total events
00265     double m_fTotalDigi;        // total MUC digis
00266     double m_fTotalExpHit;      // total rec hits
00267     double m_fTotalEffHit;      // total eff hits
00268     double m_fTotalNosHit;      // total incidental/noise hits
00269     double m_fTotalClstNum;       // total number of clusters
00270     double m_fTotalStripArea;   // total area of strips
00271     double m_fLayerCoverage;    // layer calibrated coverage
00272     double m_fBoxCoverage;      // layer calibrated coverage
00273     double m_fStripCoverage;    // layer calibrated coverage
00274     
00275     // Layer constants tree, level 0
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     // Box constants tree, level 1
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     // Strip constants tree, level 2
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     // N-tuple
00323     NTuple::Tuple*  m_eventLogTuple;      // Event info
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;   // run time of a event
00334     
00335     NTuple::Tuple*  m_mdcTrkInfoTuple;    // Mdc track info     
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;     // Track info     
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;     // Track collinearity 
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;   // Cluster size total
00379     NTuple::Item<double> m_ntClusterSize;
00380             
00381     NTuple::Tuple*  m_effWindowTuple;     // EFF_WINDOW
00382     NTuple::Item<double> m_ntEffWindow;
00383 
00384 /*
00385     NTuple::Tuple*  m_resInfoTuple;       // Res info
00386     NTuple::Item<long>     m_nExpNum;
00387     NTuple::Array<double>  m_res;
00388     NTuple::Array<long>    m_resPart;
00389     NTuple::Array<long>    m_resSegment;
00390     NTuple::Array<long>    m_resLayer;
00391     NTuple::Array<bool>    m_resFired;        
00392 */    
00393 
00394     NTuple::Tuple*  m_resInfoTuple;       // Res info
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

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