00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "StHbtMaker/Cut/helensLaPTrackCut.h"
00017 #include "StHbtMaker/Cut/helensEventCut.h"
00018 #include "StHbtMaker/Infrastructure/StHbtAnalysis.h"
00019 #include <cstdio>
00020
00021 #ifdef __ROOT__
00022 ClassImp(helensLaPTrackCut)
00023 #endif
00024
00025 helensLaPTrackCut::helensLaPTrackCut(){
00026 mNTracksPassed = mNTracksFailed = 0;
00027 mNSigmaElectron[0] = -1e9; mNSigmaElectron[1] = +1e9;
00028 mNSigmaPion[0] = -1e9; mNSigmaPion[1] = +1e9;
00029 mNSigmaKaon[0] = -1e9; mNSigmaKaon[1] = +1e9;
00030 mNSigmaProton[0] = -1e9; mNSigmaProton[1] = +1e9;
00031 mNSigmaAntiElectron[0] = 0.; mNSigmaAntiElectron[1] = 0.;
00032 mNSigmaAntiPion[0] = 0.; mNSigmaAntiPion[1] = 0.;
00033 mNSigmaAntiKaon[0] = 0.; mNSigmaAntiKaon[1] = 0.;
00034 mNSigmaAntiProton[0] = 0.; mNSigmaAntiProton[1] = 0.;
00035 mPt[0] = -1e9; mPt[1] = +1e9;
00036 mPx[0] = -1e9; mPx[1] = +1e9;
00037 mPy[0] = -1e9; mPy[1] = +1e9;
00038 mPz[0] = -1e9; mPz[1] = +1e9;
00039 }
00040
00041 helensLaPTrackCut::helensLaPTrackCut(helensLaPTrackCut& c) : StHbtTrackCut(c) {
00042 mNTracksPassed = mNTracksFailed = 0;
00043 mCharge = c.mCharge;
00044 mNSigmaElectron[0] = c.mNSigmaElectron[0];
00045 mNSigmaElectron[1] = c.mNSigmaElectron[1];
00046 mNSigmaPion[0] = c.mNSigmaPion[0];
00047 mNSigmaPion[1] = c.mNSigmaPion[1];
00048 mNSigmaKaon[0] = c.mNSigmaKaon[0];
00049 mNSigmaKaon[1] = c.mNSigmaKaon[1];
00050 mNSigmaProton[0] = c.mNSigmaProton[0];
00051 mNSigmaProton[1] = c.mNSigmaProton[1];
00052 mNSigmaAntiElectron[0] = c.mNSigmaAntiElectron[0];
00053 mNSigmaAntiElectron[1] = c.mNSigmaAntiElectron[1];
00054 mNSigmaAntiPion[0] = c.mNSigmaAntiPion[0];
00055 mNSigmaAntiPion[1] = c.mNSigmaAntiPion[1];
00056 mNSigmaAntiKaon[0] = c.mNSigmaAntiKaon[0];
00057 mNSigmaAntiKaon[1] = c.mNSigmaAntiKaon[1];
00058 mNSigmaAntiProton[0] = c.mNSigmaAntiProton[0];
00059 mNSigmaAntiProton[1] = c.mNSigmaAntiProton[1];
00060 mNHits[0] = c.mNHits[0];
00061 mNHits[1] = c.mNHits[1];
00062 mP[0] = c.mP[0]; mP[1] = c.mP[1];
00063 mPt[0] = c.mPt[0]; mPt[1] = c.mPt[1];
00064 mPx[0] = c.mPx[0]; mPx[1] = c.mPx[1];
00065 mPy[0] = c.mPy[0]; mPy[1] = c.mPy[1];
00066 mPz[0] = c.mPz[0]; mPz[1] = c.mPz[1];
00067 mRapidity[0] = c.mRapidity[0];
00068 mRapidity[1] = c.mRapidity[1];
00069 mDCA[0] = c.mDCA[0];
00070 mDCA[1] = c.mDCA[1];
00071 mNTracksPassed=0;
00072 mNTracksFailed=0;
00073 #ifdef STHBTDEBUG
00074 cout << " helensLaPTrackCut::helensLaPTrackCut(helensLaPTrackCut& c) " << endl;
00075 #endif
00076 }
00077
00078
00079 helensLaPTrackCut::~helensLaPTrackCut(){
00080 }
00081
00082
00083 bool helensLaPTrackCut::Pass(const StHbtTrack* track){
00084
00085
00086 float TEnergy = ::sqrt(track->P().mag2()+mMass*mMass);
00087 float TRapidity = 0.5*::log((TEnergy+track->P().z())/
00088 (TEnergy-track->P().z()));
00089
00090 #ifdef STHBTDEBUG
00091 cout <<
00092 track->NSigmaElectron() << " " <<
00093 track->NSigmaPion() << " " <<
00094 track->NSigmaKaon() << " " <<
00095 track->NSigmaProton() << " " <<
00096 track->DCAxy() << " " <<
00097 track->NHits() << " " <<
00098 track->P().mag() << " " <<
00099 track->Pt() << " " <<
00100 TRapidity << " " <<
00101 track->Charge() << " ";
00102 #endif
00103
00104 bool goodPID = (
00105 (track->NSigmaElectron() >= mNSigmaElectron[0]) &&
00106 (track->NSigmaElectron() <= mNSigmaElectron[1]) &&
00107 (track->NSigmaPion() >= mNSigmaPion[0]) &&
00108 (track->NSigmaPion() <= mNSigmaPion[1]) &&
00109 (track->NSigmaKaon() >= mNSigmaKaon[0]) &&
00110 (track->NSigmaKaon() <= mNSigmaKaon[1]) &&
00111 (track->NSigmaProton() >= mNSigmaProton[0]) &&
00112 (track->NSigmaProton() <= mNSigmaProton[1]) &&
00113 !( (track->NSigmaElectron() >= mNSigmaAntiElectron[0]) &&
00114 (track->NSigmaElectron() <= mNSigmaAntiElectron[1]) ) &&
00115 !( (track->NSigmaPion() >= mNSigmaAntiPion[0]) &&
00116 (track->NSigmaPion() <= mNSigmaAntiPion[1]) ) &&
00117 !( (track->NSigmaKaon() >= mNSigmaAntiKaon[0]) &&
00118 (track->NSigmaKaon() <= mNSigmaAntiKaon[1]) ) &&
00119 !( (track->NSigmaProton() >= mNSigmaAntiProton[0]) &&
00120 (track->NSigmaProton() <= mNSigmaAntiProton[1]) ) &&
00121 (track->Charge() == mCharge || mCharge==0 )
00122 );
00123
00124
00125
00126 #ifdef STHBTDEBUG
00127 cout << mNSigmaElectron[0] << " << " << track->NSigmaElectron() << " << " << mNSigmaElectron[1] << " ";
00128 cout << (track->NSigmaElectron() >= mNSigmaElectron[0]) << (track->NSigmaElectron() <= mNSigmaElectron[1]) << endl;
00129 #endif
00130
00131 bool goodTrack=( true &&
00132 (track->DCAxy() >= mDCA[0]) &&
00133 (track->DCAxy() <= mDCA[1]) &&
00134 (track->NHits() >= mNHits[0]) &&
00135 (track->NHits() <= mNHits[1]) &&
00136 (track->P().mag() >= mP[0]) &&
00137 (track->P().mag() <= mP[1]) &&
00138 (track->Pt() >= mPt[0]) &&
00139 (track->Pt() <= mPt[1]) &&
00140 (track->P().x() >= mPx[0]) &&
00141 (track->P().x() <= mPx[1]) &&
00142 (track->P().y() >= mPy[0]) &&
00143 (track->P().y() <= mPy[1]) &&
00144 (track->P().z() >= mPz[0]) &&
00145 (track->P().z() <= mPz[1]) &&
00146 (TRapidity >= mRapidity[0]) &&
00147 (TRapidity <= mRapidity[1])
00148 );
00149
00150
00151 #ifdef STHBTDEBUG
00152 cout << " goodPID=" << goodPID << " ";
00153 cout << " goodTrack=" << goodTrack << " ";
00154 cout << endl;
00155 #endif
00156
00157
00158 if( goodTrack){
00159
00160
00161
00162 StHbtAnalysis* Anal = (StHbtAnalysis*) myAnalysis;
00163 helensEventCut* EventCut = (helensEventCut*)Anal->EventCut();
00164 StHbtTrkV0Iterator pIter;
00165 StHbtTrkV0Match* TheMatch;
00166
00167
00168 for( pIter= EventCut->TrkV0MatchCollection()->begin(); pIter!= EventCut->TrkV0MatchCollection()->end(); pIter++){
00169
00170 TheMatch = *pIter;
00171 if( TheMatch->TrkId() == track->TrackId()){
00172 goodTrack = !(TheMatch->Used());
00173 break;
00174 }
00175
00176 }
00177
00178 }
00179
00180 (goodTrack && goodPID) ? mNTracksPassed++ : mNTracksFailed++;
00181
00182 return (goodPID && goodTrack);
00183 }
00184
00185 StHbtString helensLaPTrackCut::Report(){
00186 string Stemp;
00187 char Ctemp[100];
00188 sprintf(Ctemp,"\nParticle mass:\t%E",mMass);
00189 Stemp+=Ctemp;
00190 sprintf(Ctemp,"\nParticle charge:\t%d",mCharge);
00191 Stemp+=Ctemp;
00192 sprintf(Ctemp,"\nParticle Nsigma from pion:\t%E - %E",mNSigmaPion[0],mNSigmaPion[1]);
00193 Stemp+=Ctemp;
00194 sprintf(Ctemp,"\nParticle Nsigma from kaon:\t%E - %E",mNSigmaKaon[0],mNSigmaKaon[1]);
00195 Stemp+=Ctemp;
00196 sprintf(Ctemp,"\nParticle Nsigma from proton:\t%E - %E",mNSigmaProton[0],mNSigmaProton[1]);
00197 Stemp+=Ctemp;
00198 sprintf(Ctemp,"\nParticle Nsigma from electron:\t%E - %E",mNSigmaElectron[0],mNSigmaElectron[1]);
00199 Stemp+=Ctemp;
00200 sprintf(Ctemp,"\nParticle #hits:\t%d - %d",mNHits[0],mNHits[1]);
00201 Stemp+=Ctemp;
00202 sprintf(Ctemp,"\nParticle p:\t%E - %E",mP[0],mP[1]);
00203 Stemp+=Ctemp;
00204 sprintf(Ctemp,"\nParticle pT:\t%E - %E",mPt[0],mPt[1]);
00205 Stemp+=Ctemp;
00206 sprintf(Ctemp,"\nParticle rapidity:\t%E - %E",mRapidity[0],mRapidity[1]);
00207 Stemp+=Ctemp;
00208 sprintf(Ctemp,"\nParticle DCA:\t%E - %E",mDCA[0],mDCA[1]);
00209 Stemp+=Ctemp;
00210 sprintf(Ctemp,"\nNumber of tracks which passed:\t%ld Number which failed:\t%ld",mNTracksPassed,mNTracksFailed);
00211 Stemp += Ctemp;
00212 StHbtString returnThis = Stemp;
00213 return returnThis;
00214 }
00215