00001 #ifndef MDCPERFORMANCE_H
00002 #define MDCPERFORMANCE_H
00003 #include "GaudiKernel/Algorithm.h"
00004 #include <string>
00005 #include <vector>
00006 #include "CLHEP/Vector/ThreeVector.h"
00007 #include "CLHEP/HepPDT/ParticleDataTable.hh"
00008 #include "GaudiKernel/NTuple.h"
00009 #include "McTruth/McParticle.h"
00010 #include "McTruth/MdcMcHit.h"
00011 #include "RawDataProviderSvc/RawDataProviderSvc.h"
00012 #include "MdcGeomSvc/IMdcGeomSvc.h"
00013 #include "MdcGeomSvc/MdcGeoWire.h"
00014 #include "MdcGeomSvc/MdcGeoLayer.h"
00015 #include "MagneticField/IMagneticFieldSvc.h"
00016 #include "BField/BField.h"
00017 #include "MdcNavigation/MdcCheckUtil.h"
00018 class MdcDetector;
00019
00020 class MdcPerformance:public Algorithm {
00021 public:
00022 MdcPerformance (const std::string& name, ISvcLocator* pSvcLocator);
00023 StatusCode initialize();
00024 StatusCode execute();
00025 StatusCode finalize();
00026
00027 private:
00028 StatusCode bookNTuple();
00029 StatusCode fillInit();
00030 StatusCode fillRawEvent();
00031 StatusCode getNoiseThroughRawDigi();
00032 StatusCode fillRecEvent();
00033 StatusCode fillRecTrack(const RecMdcTrack* tk);
00034
00035 HepPDT::ParticleDataTable* m_particleTable;
00036 RawDataProviderSvc* m_rawDataProviderSvc;
00037 IMagneticFieldSvc* m_pIMF;
00038 const MdcDetector * m_gm;
00039 double Bz;
00040
00041 int havedigi[43][288];
00042 short multiTdcCount[43][288];
00043 bool m_doSag;
00044 bool m_rawData;
00045 long t_eventNo;
00046 long t_runNo;
00047 double t_t0;
00048 double t_t0Stat;
00049 double t_t0Truth;
00050 int t_timing;
00051 int t_nTk;
00052 double t_recTkNum;
00053 int t_mcTkNum;
00054 int t_patRecTk ;
00055 int t_mdcxRecTk;
00056 int t_trkRecoTk;
00057
00058 bool m_keepFirstTdc;
00059 bool m_poca;
00060 int m_maxMdcDigi;
00061 bool m_keepBadTdc;
00062 bool m_dropHot;
00063 bool m_keepUnmatch;
00064 double m_mass;
00065 MdcCheckUtil* m_mdcCheckUtil;
00066
00067 NTuple::Tuple* m_tupleRawEvt;
00068 NTuple::Tuple* m_tuple1;
00069 NTuple::Item<double> m_t3_recTk;
00070 NTuple::Item<long> m_t3_TrkReco;
00071 NTuple::Item<long> m_t3_PatRec;
00072 NTuple::Item<double> m_t3_evtNo;
00073 NTuple::Item<long> m_t3_runNo;
00074 NTuple::Item<double> m_t3_t0;
00075 NTuple::Item<double> m_t3_t0Truth;
00076 NTuple::Item<long> m_t3_t0Stat;
00077
00078 NTuple::Item<long> m_trig_index;
00079 NTuple::Array<long> m_trig_cond;
00080 NTuple::Array<long> m_trig_chan;
00081 NTuple::Item<long> m_trig_timewindow;
00082 NTuple::Item<long> m_trig_timetype;
00083
00084 NTuple::Item<long> m_t3_nDigi;
00085 NTuple::Item<long> m_t3_nDigiUnmatch;
00086 NTuple::Array<long> m_t3_layer;
00087 NTuple::Array<long> m_t3_wire;
00088 NTuple::Array<long> m_t3_gwire;
00089 NTuple::Array<double> m_t3_rt;
00090 NTuple::Array<double> m_t3_rc;
00091 NTuple::Array<long> m_t3_ovfl;
00092
00093 NTuple::Item<double> m_evtNo;
00094 NTuple::Item<double> m_runNo;
00095 NTuple::Item<double> m_d0;
00096 NTuple::Item<double> m_phi0;
00097 NTuple::Item<double> m_cpa;
00098 NTuple::Item<double> m_z0;
00099 NTuple::Item<double> m_tanl;
00100 NTuple::Item<double> m_d0E;
00101 NTuple::Item<double> m_phi0E;
00102 NTuple::Item<double> m_cpaE;
00103 NTuple::Item<double> m_z0E;
00104 NTuple::Item<double> m_tanlE;
00105 NTuple::Item<double> m_q;
00106 NTuple::Item<double> m_recTkNum;
00107 NTuple::Item<double> m_p;
00108 NTuple::Item<double> m_pt;
00109 NTuple::Item<double> m_pz;
00110 NTuple::Item<double> m_pcms;
00111
00112 NTuple::Item<long> m_nHit;
00113 NTuple::Item<long> m_nAct;
00114 NTuple::Item<long> m_nSt;
00115 NTuple::Item<long> m_nDof;
00116 NTuple::Item<double> m_fiTerm;
00117 NTuple::Item<double> m_chi2;
00118 NTuple::Item<double> m_chi2Dof;
00119 NTuple::Item<double> m_chi2Prob;
00120 NTuple::Item<long> m_tkStat;
00121
00122
00123 NTuple::Item<long> m_tkId;
00124 NTuple::Array<long> m_layer;
00125 NTuple::Array<long> m_wire;
00126 NTuple::Array<double> m_gwire;
00127 NTuple::Array<double> m_resid;
00128 NTuple::Array<double> m_driftD;
00129 NTuple::Array<double> m_driftT;
00130 NTuple::Array<double> m_doca;
00131 NTuple::Array<double> m_entra;
00132 NTuple::Array<double> m_zhit;
00133 NTuple::Array<double> m_chi2add;
00134 NTuple::Array<double> m_flaglr;
00135 NTuple::Array<double> m_Tdc;
00136 NTuple::Array<double> m_Adc;
00137 NTuple::Array<long> m_hitStat;
00138
00139
00140 };
00141
00142 #endif