00001
00002 #ifndef CLASS_DTAGTOOL_H
00003 #define CLASS_DTAGTOOL_H
00004
00005 #include "GaudiKernel/ObjectVector.h"
00006 #include "GaudiKernel/AlgFactory.h"
00007 #include "GaudiKernel/Algorithm.h"
00008 #include "GaudiKernel/NTuple.h"
00009 #include "GaudiKernel/IDataProviderSvc.h"
00010
00011 #include "CLHEP/Vector/LorentzVector.h"
00012 #include "EvtRecEvent/EvtRecTrack.h"
00013 #include "EvtRecEvent/EvtRecDTag.h"
00014 #include "EvtRecEvent/EvtRecVeeVertex.h"
00015 #include "EvtRecEvent/EvtRecPi0.h"
00016 #include "EvtRecEvent/EvtRecEtaToGG.h"
00017
00018 #include "SimplePIDSvc/ISimplePIDSvc.h"
00019
00020
00021 #include <iostream>
00022
00023 using namespace std;
00024
00025
00026
00027 class DTagTool{
00028
00029 public:
00030
00031 DTagTool ();
00032
00033 ~DTagTool ();
00034
00035
00036 bool isDTagListEmpty() { return m_isdtaglistempty; }
00037 void setPID(bool pid) {m_pid = pid;}
00038
00039
00040
00041 EvtRecDTagCol::iterator modes_begin(){ return m_iterbegin;}
00042 EvtRecDTagCol::iterator modes_end(){ return m_iterend;}
00043 EvtRecPi0Col::iterator pi0_begin(){ return m_pi0iterbegin;}
00044 EvtRecPi0Col::iterator pi0_end(){ return m_pi0iterend;}
00045 EvtRecEtaToGGCol::iterator eta_begin(){ return m_etaiterbegin;}
00046 EvtRecEtaToGGCol::iterator eta_end(){ return m_etaiterend;}
00047 EvtRecVeeVertexCol::iterator ks_begin(){ return m_ksiterbegin;}
00048 EvtRecVeeVertexCol::iterator ks_end(){ return m_ksiterend;}
00049
00050
00051 vector<int> D0modes() { return m_d0modes;}
00052 vector<int> Dpmodes() { return m_dpmodes;}
00053 vector<int> Dsmodes() { return m_dsmodes;}
00054
00055 vector<int> mode(EvtRecDTag::DecayMode decaymode);
00056 vector<int> mode(int decaymode);
00057
00058
00059 bool findSTag(EvtRecDTag::DecayMode mode, int tagcharm);
00060 bool findSTag(EvtRecDTag::DecayMode mode);
00061 bool findDTag(EvtRecDTag::DecayMode mode1, EvtRecDTag::DecayMode mode2,string smass="mbc");
00062 bool findDTag(EvtRecDTag::DecayMode mode1, int tagcharm1,EvtRecDTag::DecayMode mode2, int tagcharm2,string smass="mbc" );
00063 bool findADTag(EvtRecDTag::DecayMode mode1, EvtRecDTag::DecayMode mode2);
00064 bool findADTag(EvtRecDTag::DecayMode mode1, int tagcharm1,EvtRecDTag::DecayMode mode2, int tagcharm2 );
00065
00066 bool findSTag(int mode, int tagcharm);
00067 bool findSTag(int mode);
00068 bool findDTag(int mode1, int mode2, string smass="mbc");
00069 bool findDTag(int mode1, int tagcharm1,int mode2, int tagcharm2,string smass="mbc" );
00070 bool findADTag(int mode1, int mode2);
00071 bool findADTag(int mode1, int tagcharm1,int mode2, int tagcharm2);
00072
00073
00074
00075 EvtRecDTagCol::iterator stag(){ return m_iterstag;}
00076 EvtRecDTagCol::iterator dtag1(){ return m_iterdtag1;}
00077 EvtRecDTagCol::iterator dtag2(){ return m_iterdtag2;}
00078 vector<EvtRecDTagCol::iterator> vdtag1(){ return m_viterdtag1;}
00079 vector<EvtRecDTagCol::iterator> vdtag2(){ return m_viterdtag2;}
00080 void setdtagDE(double sigma1,double sigma2){ m_tag1desigma=sigma1;m_tag2desigma=sigma2;}
00081 bool compare(EvtRecDTagCol::iterator pair1_iter1,EvtRecDTagCol::iterator pair1_iter2,EvtRecDTagCol::iterator pair2_iter1,EvtRecDTagCol::iterator pair2_iter2, double mD, string smass);
00082
00083 void operator<< ( EvtRecDTagCol::iterator iter);
00084
00085
00086
00087 HepLorentzVector pi0p4(EvtRecPi0Col::iterator pi0Itr, bool isconstrain=true);
00088 HepLorentzVector etap4(EvtRecEtaToGGCol::iterator etaItr, bool isconstrain=true);
00089 vector<int> pi0Id(EvtRecDTagCol::iterator iter, int numpi0=1);
00090 vector<int> etaId(EvtRecDTagCol::iterator iter, int numeta=1);
00091 vector<int> ksId(EvtRecDTagCol::iterator iter, int numks=1);
00092 HepLorentzVector p4shower(RecEmcShower* shower);
00093 HepLorentzVector p4(RecMdcKalTrack* mdcKalTrack, int pid);
00094 bool isPion( EvtRecTrack* trk);
00095 bool isKaon( EvtRecTrack* trk);
00096 bool isElectron( EvtRecTrack* trk);
00097 bool isMuon( EvtRecTrack* trk);
00098 bool isGoodTrack( EvtRecTrack* trk);
00099 bool isGoodShower( EvtRecTrack* trk);
00100 bool cosmicandleptonVeto(bool emc=true);
00101 int numofShowerAboveThreshold();
00102 int numofShowerAboveThreshold(int threshold);
00103 bool shareTracks(EvtRecDTagCol::iterator iter1, EvtRecDTagCol::iterator iter2);
00104 double angleShowerwithTrack(EvtRecTrack *shower, EvtRecTrack *track);
00105
00106 void clear();
00107 void name(){ cout<<" I am the dtag tool"<<endl;}
00108
00109 protected:
00110
00111 IDataProviderSvc* eventSvc();
00112
00113
00114 private:
00115
00116 bool m_isdtaglistempty;
00117
00118 IDataProviderSvc* m_evtSvc;
00119 ISimplePIDSvc* m_simplePIDSvc;
00120
00121
00122
00123 EvtRecDTagCol::iterator m_iterbegin;
00124 EvtRecDTagCol::iterator m_iterend;
00125 EvtRecPi0Col::iterator m_pi0iterbegin;
00126 EvtRecPi0Col::iterator m_pi0iterend;
00127 EvtRecEtaToGGCol::iterator m_etaiterbegin;
00128 EvtRecEtaToGGCol::iterator m_etaiterend;
00129 EvtRecVeeVertexCol::iterator m_ksiterbegin;
00130 EvtRecVeeVertexCol::iterator m_ksiterend;
00131
00132
00133 bool m_pid;
00134
00135 EvtRecDTagCol::iterator m_iterstag;
00136 EvtRecDTagCol::iterator m_iterdtag1;
00137 EvtRecDTagCol::iterator m_iterdtag2;
00138 vector<EvtRecDTagCol::iterator> m_viterdtag1;
00139 vector<EvtRecDTagCol::iterator> m_viterdtag2;
00140 double m_tag1desigma;
00141 double m_tag2desigma;
00142
00143 vector<int> m_d0modes;
00144 vector<int> m_dpmodes;
00145 vector<int> m_dsmodes;
00146
00147 EvtRecTrackIterator m_chargebegin;
00148 EvtRecTrackIterator m_chargeend;
00149 EvtRecTrackIterator m_showerbegin;
00150 EvtRecTrackIterator m_showerend;
00151
00152
00153 };
00154
00155 typedef EvtRecDTagCol::iterator DTagToolIterator;
00156 typedef EvtRecPi0Col::iterator pi0Iterator;
00157 typedef EvtRecEtaToGGCol::iterator etaIterator;
00158 typedef EvtRecVeeVertexCol::iterator ksIterator;
00159
00160
00161
00162 #endif