00001 #ifndef Analysis_PRIMARYVTX_H 00002 #define Analysis_PRIMARYVTX_H 00003 00004 #include "GaudiKernel/AlgFactory.h" 00005 #include "GaudiKernel/Algorithm.h" 00006 #include "GaudiKernel/NTuple.h" 00007 #include "TH1D.h" 00008 #include "CLHEP/Matrix/Vector.h" 00009 #include "EvtRecEvent/EvtRecPrimaryVertex.h" 00010 #include "EvtRecEvent/EvtRecTrack.h" 00011 00012 using CLHEP::HepVector; 00013 00014 class EvtRecEvent; 00015 00016 class PrimaryVertex : public Algorithm { 00017 public: 00018 PrimaryVertex(const std::string& name, ISvcLocator* pSvcLocator); 00019 StatusCode initialize(); 00020 StatusCode execute(); 00021 StatusCode finalize(); 00022 00023 private: 00024 StatusCode RegisterEvtRecPrimaryVertex( 00025 EvtRecPrimaryVertex* aNewEvtRecPrimaryVertex, 00026 MsgStream& log); 00027 00028 void SelectGoodChargedTracks( 00029 SmartDataPtr<EvtRecEvent>& recEvent, 00030 SmartDataPtr<EvtRecTrackCol>& recTrackCol, 00031 std::vector<int>& icp, std::vector<int>& icm, std::vector<int>& iGood); 00032 00033 private: 00034 int m_sel_number[15]; 00035 00036 int m_trackNumberCut; 00037 double m_vz0Cut; 00038 double m_cosThetaCut; 00039 int m_fitMethod; 00040 double m_globalChisqCut; 00041 double m_chisqCut; 00042 int m_trackIteration; 00043 int m_vertexIteration; 00044 double m_chi2CutforTrkIter; 00045 int m_freedomCut; 00046 double m_chi2CutforSmooth; 00047 /* 00048 //particle ID cut 00049 bool m_useDedx; 00050 bool m_useTof1; 00051 bool m_useTof2; 00052 bool m_useTofE; 00053 bool m_useTofQ; 00054 bool m_useEmc; 00055 bool m_useMuc; 00056 double m_PidProbCut;*/ 00057 00058 int m_output; //switch of output PrimaryVertex.root 00059 00060 // define NTuples 00061 NTuple::Tuple* m_tuple1; // Global vertex fit results 00062 NTuple::Item<double> m_chig; 00063 NTuple::Item<long> m_ndofg; 00064 NTuple::Item<double> m_probg; 00065 NTuple::Item<double> m_gvx; 00066 NTuple::Item<double> m_gvy; 00067 NTuple::Item<double> m_gvz; 00068 00069 NTuple::Tuple* m_tuple2; // chi-square of smooth 00070 NTuple::Item<double> m_chis; 00071 NTuple::Item<double> m_chif; 00072 NTuple::Item<double> m_probs; 00073 NTuple::Item<double> m_probf; 00074 00075 NTuple::Tuple* m_tuple3; 00076 NTuple::Item<double> m_pull_drho; 00077 NTuple::Item<double> m_pull_phi; 00078 NTuple::Item<double> m_pull_kapha; 00079 NTuple::Item<double> m_pull_dz; 00080 NTuple::Item<double> m_pull_lamb; 00081 NTuple::Item<double> m_pull_momentum; 00082 00083 NTuple::Tuple* m_tuple4; // Kalman vertex fit results 00084 NTuple::Item<double> m_chik; 00085 NTuple::Item<long> m_ndofk; 00086 NTuple::Item<double> m_probk; 00087 NTuple::Item<double> m_kvx; 00088 NTuple::Item<double> m_kvy; 00089 NTuple::Item<double> m_kvz; 00090 }; 00091 #endif