00001 //psi'--> J/psi pion pion, J/psi --> di-leptons 00002 //Kai Zhu (zhuk@ihep.ac.cn) 00003 #ifndef Physics_Analysis_PipiJpsi_H 00004 #define Physics_Analysis_PipiJpsi_H 00005 00006 #include "GaudiKernel/AlgFactory.h" 00007 #include "GaudiKernel/Algorithm.h" 00008 #include "GaudiKernel/NTuple.h" 00009 #include "trkInfo.h" 00010 00011 class PipiJpsi : public Algorithm { 00012 00013 public: 00014 PipiJpsi(const std::string& name, ISvcLocator* pSvcLocator); 00015 StatusCode initialize(); 00016 StatusCode execute(); 00017 StatusCode finalize(); 00018 00019 private: 00020 00021 // Declare r0, z0 cut for charged tracks 00022 double m_vr0cut; 00023 double m_vz0cut; 00024 00025 // 00026 bool m_checkDedx; 00027 bool m_checkTof; 00028 bool m_eventrate; 00029 int m_chan_det; 00030 // declare the track angle cut and track's transverse momentum 00031 double m_cosThetaCut; 00032 00033 // declare the cut angle between two pions to drop gamma conversion 00034 double m_pipi_dang_cut; 00035 00036 // declare whether pick up sub-sample 00037 bool m_subsample_flag, m_trigger_flag; 00038 00039 // declare energy/moentum to distinguish e and muon 00040 double m_distin_emuon; 00041 00042 // define Ntuples here 00043 NTuple::Tuple* m_tuple1; // charged track vertex 00044 NTuple::Item<double> m_vx0; 00045 NTuple::Item<double> m_vy0; 00046 NTuple::Item<double> m_vz0; 00047 NTuple::Item<double> m_vr0; 00048 00049 NTuple::Tuple* m_tuple2; // fake photon 00050 NTuple::Item<double> m_dthe; 00051 NTuple::Item<double> m_dphi; 00052 NTuple::Item<double> m_dang; 00053 NTuple::Item<double> m_eraw; 00054 NTuple::Item<long> m_nGam; 00055 00056 NTuple::Tuple* m_tuple3; // dE/dx 00057 NTuple::Item<double> m_ptrk; 00058 NTuple::Item<double> m_chie; 00059 NTuple::Item<double> m_chimu; 00060 NTuple::Item<double> m_chipi; 00061 NTuple::Item<double> m_chik; 00062 NTuple::Item<double> m_chip; 00063 NTuple::Item<double> m_probPH; 00064 NTuple::Item<double> m_normPH; 00065 NTuple::Item<double> m_ghit; 00066 NTuple::Item<double> m_thit; 00067 00068 NTuple::Tuple* m_tuple4; // endcap tof 00069 NTuple::Item<double> m_ptot_etof; 00070 NTuple::Item<double> m_cntr_etof; 00071 NTuple::Item<double> m_path_etof; 00072 NTuple::Item<double> m_tof_etof; 00073 NTuple::Item<double> m_te_etof; 00074 NTuple::Item<double> m_tmu_etof; 00075 NTuple::Item<double> m_tpi_etof; 00076 NTuple::Item<double> m_tk_etof; 00077 NTuple::Item<double> m_tp_etof; 00078 NTuple::Item<double> m_ph_etof; 00079 NTuple::Item<double> m_rhit_etof; 00080 NTuple::Item<double> m_qual_etof; 00081 00082 NTuple::Tuple* m_tuple5; // barrel inner tof 00083 NTuple::Item<double> m_ptot_btof1; 00084 NTuple::Item<double> m_cntr_btof1; 00085 NTuple::Item<double> m_path_btof1; 00086 NTuple::Item<double> m_tof_btof1; 00087 NTuple::Item<double> m_te_btof1; 00088 NTuple::Item<double> m_tmu_btof1; 00089 NTuple::Item<double> m_tpi_btof1; 00090 NTuple::Item<double> m_tk_btof1; 00091 NTuple::Item<double> m_tp_btof1; 00092 NTuple::Item<double> m_ph_btof1; 00093 NTuple::Item<double> m_zhit_btof1; 00094 NTuple::Item<double> m_qual_btof1; 00095 00096 NTuple::Tuple* m_tuple6; // barrel outer tof 00097 NTuple::Item<double> m_ptot_btof2; 00098 NTuple::Item<double> m_cntr_btof2; 00099 NTuple::Item<double> m_path_btof2; 00100 NTuple::Item<double> m_tof_btof2; 00101 NTuple::Item<double> m_te_btof2; 00102 NTuple::Item<double> m_tmu_btof2; 00103 NTuple::Item<double> m_tpi_btof2; 00104 NTuple::Item<double> m_tk_btof2; 00105 NTuple::Item<double> m_tp_btof2; 00106 NTuple::Item<double> m_ph_btof2; 00107 NTuple::Item<double> m_zhit_btof2; 00108 NTuple::Item<double> m_qual_btof2; 00109 00110 // with the method of momentum selection 00111 NTuple::Tuple* m_tuple8; 00112 NTuple::Item<double> m_mom_lepm; 00113 NTuple::Item<double> m_mom_lepp; 00114 NTuple::Item<double> m_mom_pionp; 00115 NTuple::Item<double> m_mom_pionm; 00116 NTuple::Item<double> m_pipi_dang; 00117 NTuple::Item<double> m_cms_lepp; 00118 NTuple::Item<double> m_cms_lepm; 00119 NTuple::Item<double> m_mass_twopi; 00120 NTuple::Item<double> m_mass_jpsi; 00121 NTuple::Item<double> m_mass_recoil; 00122 NTuple::Item<double> m_inv_mass; 00123 NTuple::Item<double> m_tot_e; 00124 NTuple::Item<double> m_tot_px; 00125 NTuple::Item<double> m_tot_py; 00126 NTuple::Item<double> m_tot_pz; 00127 NTuple::Item<double> m_ep_ratio; 00128 NTuple::Item<long> m_event_flag; // 3 or 4 tracks, 4=>4 tracks, 0=> miss pi+, 1=> miss pi-, 2=> miss lepton+, 3=> miss lepton- 00129 NTuple::Item<double> m_trans_ratio_lepm; 00130 NTuple::Item<double> m_trans_ratio_lepp; 00131 NTuple::Item<double> m_trans_ratio_pionp; 00132 NTuple::Item<double> m_trans_ratio_pionm; 00133 NTuple::Item<long> m_run; 00134 NTuple::Item<long> m_event; 00135 NTuple::Item<long> m_index; 00136 NTuple::Array<double> m_cos_theta; 00137 NTuple::Array<double> m_phi; 00138 NTuple::Matrix<double> m_four_mom; 00139 // we don't need smear, actually, assume one track of pi pi is missing, the recoil mass is actually the invariant of pair-lepton 00140 NTuple::Item<long> m_pion_matched; 00141 NTuple::Item<long> m_lep_matched; 00142 // book MCtruth 00143 NTuple::Item<long> m_idxmc; 00144 NTuple::Array<long> m_pdgid; 00145 NTuple::Array<long> m_motheridx; 00146 NTuple::Item<double> m_true_pionp; // pions' momentum from MC truth 00147 NTuple::Item<double> m_true_pionm; 00148 00149 }; 00150 00151 00152 #endif