00001 #include "GaudiKernel/Algorithm.h" 00002 #include <string> 00003 #include <vector> 00004 #include "CLHEP/Vector/ThreeVector.h" 00005 #include "HepPDT/ParticleDataTable.hh" 00006 #include "GaudiKernel/NTuple.h" 00007 #include "McTruth/McParticle.h" 00008 #include "McTruth/MdcMcHit.h" 00009 #include "RawDataProviderSvc/RawDataProviderSvc.h" 00010 #include "AIDA/IHistogram1D.h" 00011 #include "MdcGeomSvc/IMdcGeomSvc.h" 00012 #include "MdcGeomSvc/MdcGeoWire.h" 00013 #include "MdcGeomSvc/MdcGeoLayer.h" 00014 #include "MagneticField/IMagneticFieldSvc.h" 00015 #include "MdcRecEvent/RecMdcTrack.h" 00016 #include "MdcRecEvent/RecMdcHit.h" 00017 #include <math.h> 00018 00019 class MdcDetector; 00020 class TH1F; 00021 class TH2F; 00022 00023 class MdcNavigation:public Algorithm { 00024 public: 00025 MdcNavigation (const std::string& name, ISvcLocator* pSvcLocator); 00026 StatusCode initialize(); 00027 StatusCode execute(); 00028 StatusCode finalize(); 00029 StatusCode beginRun(); 00030 00031 private: 00032 //calculate momentum using helix parameters of fitted track 00033 Hep3Vector momentum(const RecMdcTrack* trk); 00034 StatusCode bookNTuple(); 00035 StatusCode fillInit(); 00036 StatusCode fillRecTrack(const RecMdcTrack* it, int mcTkNum, int recTkNum); 00037 StatusCode fillRecHits(RecMdcHitCol& hitCol); 00038 StatusCode fillEvent(); 00039 StatusCode skipMcParticle(const Event::McParticle* it, int nKindSkiped, int* keepedPart); 00040 double poca(const MdcDigi* aDigi,const HepVector helixPar,const HepSymMatrix errMat); 00041 double probab(const int& ndof, const double& chisq); 00042 00043 HepPDT::ParticleDataTable* m_particleTable; 00044 RawDataProviderSvc* m_rawDataProviderSvc; 00045 IMagneticFieldSvc* m_pIMF; 00046 00047 bool m_poca; 00048 bool m_debug; 00049 const MdcDetector * m_gm; 00050 int havedigi[43][288]; 00051 short multiTdcCount[43][288]; 00052 bool m_hist; 00053 int m_mc; 00054 bool m_doSag; 00055 bool m_rawData; 00056 int m_maxMdcDigi; 00057 bool m_keepBadTdc; 00058 bool m_dropHot; 00059 bool m_keepUnmatch; 00060 long t_eventNo; 00061 long t_runNo; 00062 double t_t0; 00063 double t_t0Stat; 00064 double t_t0Truth; 00065 int t_nTk; 00066 int t_recTkNum; 00067 int t_mcTkNum; 00068 int t_trkRecoTk; 00069 int t_curlTk; 00070 int t_patRecTk ; 00071 int t_xRecTk; 00072 int m_nMcHit; 00073 int* keepedParticles; 00074 double m_d0Cut; 00075 double m_z0Cut; 00076 double nNoise; 00077 long nDigiTk[100]; 00078 long digiLayer[100];//mc digi per track; 50 track/event most 00079 00080 NTuple::Tuple* g_tupleMc; 00081 NTuple::Tuple* g_tupleRec; 00082 NTuple::Tuple* g_tupleEvt; 00083 00084 AIDA::IHistogram1D* g_layerEff; 00085 NTuple::Item<double> m_na_p; 00086 NTuple::Item<double> m_na_pt; 00087 NTuple::Item<double> m_na_pz; 00088 NTuple::Item<double> m_na_d0; 00089 NTuple::Item<double> m_na_phi0; 00090 NTuple::Item<double> m_na_cpa; 00091 NTuple::Item<double> m_na_z0; 00092 NTuple::Item<double> m_na_tanl; 00093 NTuple::Item<double> m_na_q; 00094 NTuple::Item<double> m_na_d0E; 00095 NTuple::Item<double> m_na_phi0E; 00096 NTuple::Item<double> m_na_cpaE; 00097 NTuple::Item<double> m_na_z0E; 00098 NTuple::Item<double> m_na_tanlE; 00099 00100 NTuple::Item<double> m_na_dP; 00101 NTuple::Item<double> m_na_dPt; 00102 NTuple::Item<double> m_na_dPz; 00103 NTuple::Item<double> m_na_dD0; 00104 NTuple::Item<double> m_na_dPhi0; 00105 NTuple::Item<double> m_na_dCpa; 00106 NTuple::Item<double> m_na_dZ0; 00107 NTuple::Item<double> m_na_dTanl; 00108 00109 NTuple::Item<double> m_na_d0Res; 00110 NTuple::Item<double> m_na_phi0Res; 00111 NTuple::Item<double> m_na_cpaRes; 00112 NTuple::Item<double> m_na_z0Res; 00113 NTuple::Item<double> m_na_tanlRes; 00114 00115 NTuple::Item<long> m_na_nHit; 00116 NTuple::Item<long> m_na_nDigi; 00117 NTuple::Item<double> m_na_nEvtNoise; 00118 NTuple::Item<double> m_na_nAct; 00119 NTuple::Item<double> m_na_nNoise; 00120 NTuple::Item<double> m_na_nMatch; 00121 NTuple::Item<double> m_na_nSt; 00122 NTuple::Item<double> m_na_nDof; 00123 NTuple::Item<double> m_na_fiTerm; 00124 NTuple::Item<double> m_na_chi2; 00125 NTuple::Item<double> m_na_chi2Dof; 00126 NTuple::Item<double> m_na_chi2Prob; 00127 NTuple::Item<double> m_na_mcTkNum; 00128 NTuple::Item<double> m_na_mcTkId; 00129 NTuple::Item<double> m_na_recTkNum; 00130 00131 NTuple::Item<double> m_na_mcpid; 00132 NTuple::Item<double> m_na_mcp; 00133 NTuple::Item<double> m_na_mcpt; 00134 NTuple::Item<double> m_na_mcpx; 00135 NTuple::Item<double> m_na_mcpy; 00136 NTuple::Item<double> m_na_mcpz; 00137 NTuple::Item<double> m_na_mcd0; 00138 NTuple::Item<double> m_na_mcphi0; 00139 NTuple::Item<double> m_na_mcz0; 00140 NTuple::Item<double> m_na_mctheta; 00141 NTuple::Item<double> m_na_mccpa; 00142 NTuple::Item<double> m_na_mcq; 00143 NTuple::Item<double> m_na_mcfifin; 00144 NTuple::Item<double> m_na_mcflag; 00145 NTuple::Item<long> m_na_tkStat; 00146 00147 00148 NTuple::Item<long> m_na_tkId; 00149 NTuple::Item<double> m_na_evtNo; 00150 NTuple::Array<double> m_na_resid; 00151 NTuple::Array<double> m_na_driftD; 00152 NTuple::Array<long> m_na_act; 00153 NTuple::Array<double> m_na_driftT; 00154 NTuple::Array<double> m_na_doca; 00155 NTuple::Array<double> m_na_entra; 00156 NTuple::Array<double> m_na_zhit; 00157 NTuple::Array<double> m_na_chi2add; 00158 NTuple::Array<double> m_na_flaglr; 00159 NTuple::Array<double> m_na_hitStat; 00160 NTuple::Array<double> m_na_Tdc; 00161 NTuple::Array<double> m_na_Adc; 00162 NTuple::Array<double> m_na_layer; 00163 NTuple::Array<double> m_na_wire; 00164 NTuple::Array<double> m_na_gwire; 00165 NTuple::Array<double> m_na_hitTkId; 00166 NTuple::Array<double> m_na_digiTkId; 00167 NTuple::Array<double> m_na_digiLayer; 00168 00169 NTuple::Item<double> m_na_t2mcp; 00170 NTuple::Item<double> m_na_t2mcpt; 00171 NTuple::Item<double> m_na_t2mcphi; 00172 NTuple::Item<double> m_na_t2mctheta; 00173 NTuple::Item<double> m_na_t2tanl; 00174 NTuple::Item<double> m_na_t2recTkNum; 00175 NTuple::Item<double> m_na_t2mcTkNum; 00176 NTuple::Item<double> m_na_t2p; 00177 NTuple::Item<double> m_na_t2pt; 00178 00179 NTuple::Item<double> m_na_t3recTk; 00180 NTuple::Item<double> m_na_t3mcTk; 00181 NTuple::Item<long> m_na_t3TrkReco; 00182 NTuple::Item<long> m_na_t3Curl; 00183 NTuple::Item<long> m_na_t3PatRec; 00184 NTuple::Item<long> m_na_t3XRec; 00185 NTuple::Item<double> m_na_t3evtNo; 00186 NTuple::Item<double> m_na_t3t0; 00187 NTuple::Item<double> m_na_t3t0Truth; 00188 NTuple::Item<double> m_na_t3t0Stat; 00189 NTuple::Item<double> m_na_t3timing; 00190 00191 NTuple::Item<long> m_na_t3runNo; 00192 NTuple::Item<long> m_na_t3nDigi; 00193 NTuple::Array<long> m_na_t3layer; 00194 NTuple::Array<long> m_na_t3wire; 00195 NTuple::Array<long> m_na_t3gwire; 00196 NTuple::Array<double> m_na_t3rt; 00197 NTuple::Array<double> m_na_t3rtNot0; 00198 NTuple::Array<double> m_na_t3rc; 00199 NTuple::Array<double> m_na_t3phi; 00200 NTuple::Array<double> m_na_t3xMid; 00201 NTuple::Array<double> m_na_t3yMid; 00202 NTuple::Array<long> m_na_t3ovfl; 00203 NTuple::Array<long> m_na_t3tNum; 00204 }; 00205