00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "StHbtMaker/Cut/franksTrackCut.h"
00017 #include <cstdio>
00018
00019 #ifdef __ROOT__
00020 ClassImp(franksTrackCut)
00021 #endif
00022
00023
00024
00025 franksTrackCut::franksTrackCut(){
00026 mNTracksPassed = mNTracksFailed = 0;
00027 mPidProbElectron[0] = -1e9; mPidProbElectron[1] = +1e9;
00028 mPidProbPion[0] = -1e9; mPidProbPion[1] = +1e9;
00029 mPidProbKaon[0] = -1e9; mPidProbKaon[1] = +1e9;
00030 mPidProbProton[0] = -1e9; mPidProbProton[1] = +1e9;
00031 mNSigmaElectron[0] = -1e9; mNSigmaElectron[1] = +1e9;
00032 mNSigmaPion[0] = -1e9; mNSigmaPion[1] = +1e9;
00033 mNSigmaKaon[0] = -1e9; mNSigmaKaon[1] = +1e9;
00034 mNSigmaProton[0] = -1e9; mNSigmaProton[1] = +1e9;
00035 mNSigmaAntiElectron[0] = 0.; mNSigmaAntiElectron[1] = 0.;
00036 mNSigmaAntiPion[0] = 0.; mNSigmaAntiPion[1] = 0.;
00037 mNSigmaAntiKaon[0] = 0.; mNSigmaAntiKaon[1] = 0.;
00038 mNSigmaAntiProton[0] = 0.; mNSigmaAntiProton[1] = 0.;
00039 mEta[0] = -1e9; mEta[1] = +1e9;
00040 mRapidity[0] = -1e9; mRapidity[1] = +1e9;
00041 mP[0] = -1e9; mP[1] = +1e9;
00042 mPt[0] = -1e9; mPt[1] = +1e9;
00043 mPx[0] = -1e9; mPx[1] = +1e9;
00044 mPy[0] = -1e9; mPy[1] = +1e9;
00045 mPz[0] = -1e9; mPz[1] = +1e9;
00046 mDCA[0] = -1e9; mDCA[1] = +1e9;
00047 mDCAGlobal[0] = -1e9; mDCAGlobal[1] = +1e9;
00048 mNHits[0] = 0; mNHits[1] = 60;
00049 mNdEdxHits[0] = 0; mNdEdxHits[1] = 60;
00050 }
00051
00052 franksTrackCut::franksTrackCut(franksTrackCut& c) : StHbtTrackCut(c) {
00053 mNTracksPassed = mNTracksFailed = 0;
00054 mCharge = c.mCharge;
00055 mPidProbElectron[0] = c.mPidProbElectron[0];
00056 mPidProbElectron[1] = c.mPidProbElectron[1];
00057 mPidProbPion[0] = c.mPidProbPion[0];
00058 mPidProbPion[1] = c.mPidProbPion[1];
00059 mPidProbKaon[0] = c.mPidProbKaon[0];
00060 mPidProbKaon[1] = c.mPidProbKaon[1];
00061 mPidProbProton[0] = c.mPidProbProton[0];
00062 mPidProbProton[1] = c.mPidProbProton[1];
00063 mNSigmaElectron[0] = c.mNSigmaElectron[0];
00064 mNSigmaElectron[1] = c.mNSigmaElectron[1];
00065 mNSigmaPion[0] = c.mNSigmaPion[0];
00066 mNSigmaPion[1] = c.mNSigmaPion[1];
00067 mNSigmaKaon[0] = c.mNSigmaKaon[0];
00068 mNSigmaKaon[1] = c.mNSigmaKaon[1];
00069 mNSigmaProton[0] = c.mNSigmaProton[0];
00070 mNSigmaProton[1] = c.mNSigmaProton[1];
00071 mNSigmaAntiElectron[0] = c.mNSigmaAntiElectron[0];
00072 mNSigmaAntiElectron[1] = c.mNSigmaAntiElectron[1];
00073 mNSigmaAntiPion[0] = c.mNSigmaAntiPion[0];
00074 mNSigmaAntiPion[1] = c.mNSigmaAntiPion[1];
00075 mNSigmaAntiKaon[0] = c.mNSigmaAntiKaon[0];
00076 mNSigmaAntiKaon[1] = c.mNSigmaAntiKaon[1];
00077 mNSigmaAntiProton[0] = c.mNSigmaAntiProton[0];
00078 mNSigmaAntiProton[1] = c.mNSigmaAntiProton[1];
00079 mNHits[0] = c.mNHits[0];
00080 mNHits[1] = c.mNHits[1];
00081 mNdEdxHits[0] = c.mNdEdxHits[0];
00082 mNdEdxHits[1] = c.mNdEdxHits[1];
00083 mP[0] = c.mP[0]; mP[1] = c.mP[1];
00084 mPt[0] = c.mPt[0]; mPt[1] = c.mPt[1];
00085 mPx[0] = c.mPx[0]; mPx[1] = c.mPx[1];
00086 mPy[0] = c.mPy[0]; mPy[1] = c.mPy[1];
00087 mPz[0] = c.mPz[0]; mPz[1] = c.mPz[1];
00088 mRapidity[0] = c.mRapidity[0];
00089 mRapidity[1] = c.mRapidity[1];
00090 mEta[0] = c.mEta[0];
00091 mEta[1] = c.mEta[1];
00092 mDCA[0] = c.mDCA[0];
00093 mDCA[1] = c.mDCA[1];
00094 mDCAGlobal[0] = c.mDCAGlobal[0];
00095 mDCAGlobal[1] = c.mDCAGlobal[1];
00096 mNTracksPassed=0;
00097 mNTracksFailed=0;
00098 #ifdef STHBTDEBUG
00099 cout << " franksTrackCut::franksTrackCut(franksTrackCut& c) " << endl;
00100 #endif
00101 }
00102
00103
00104 franksTrackCut::~franksTrackCut(){
00105 }
00106
00107
00108 bool franksTrackCut::Pass(const StHbtTrack* track){
00109
00110
00111 float TEnergy = ::sqrt(track->P().mag2()+mMass*mMass);
00112 float TRapidity = 0.5*::log((TEnergy+track->P().z())/
00113 (TEnergy-track->P().z()));
00114
00115 #ifdef STHBTDEBUG
00116 cout <<
00117 track->NSigmaElectron() << " " <<
00118 track->NSigmaPion() << " " <<
00119 track->NSigmaKaon() << " " <<
00120 track->NSigmaProton() << " " <<
00121 track->DCAxy() << " " <<
00122 track->DCAxyGlobal() << " " <<
00123 track->NHits() << " " <<
00124 track->NHitsDedx() << " " <<
00125 track->P().mag() << " " <<
00126 track->Pt() << " " <<
00127 TRapidity << " " <<
00128 track->Charge() << " ";
00129 #endif
00130
00131 bool goodPID = (
00132 (track->PidProbElectron() >= mPidProbElectron[0]) &&
00133 (track->PidProbElectron() <= mPidProbElectron[1]) &&
00134 (track->PidProbPion() >= mPidProbPion[0]) &&
00135 (track->PidProbPion() <= mPidProbPion[1]) &&
00136 (track->PidProbKaon() >= mPidProbKaon[0]) &&
00137 (track->PidProbKaon() <= mPidProbKaon[1]) &&
00138 (track->PidProbProton() >= mPidProbProton[0]) &&
00139 (track->PidProbProton() <= mPidProbProton[1]) &&
00140 (track->NSigmaElectron() >= mNSigmaElectron[0]) &&
00141 (track->NSigmaElectron() <= mNSigmaElectron[1]) &&
00142 (track->NSigmaPion() >= mNSigmaPion[0]) &&
00143 (track->NSigmaPion() <= mNSigmaPion[1]) &&
00144 (track->NSigmaKaon() >= mNSigmaKaon[0]) &&
00145 (track->NSigmaKaon() <= mNSigmaKaon[1]) &&
00146 (track->NSigmaProton() >= mNSigmaProton[0]) &&
00147 (track->NSigmaProton() <= mNSigmaProton[1]) &&
00148 !( (track->NSigmaElectron() > mNSigmaAntiElectron[0]) &&
00149 (track->NSigmaElectron() < mNSigmaAntiElectron[1]) ) &&
00150 !( (track->NSigmaPion() > mNSigmaAntiPion[0]) &&
00151 (track->NSigmaPion() < mNSigmaAntiPion[1]) ) &&
00152 !( (track->NSigmaKaon() > mNSigmaAntiKaon[0]) &&
00153 (track->NSigmaKaon() < mNSigmaAntiKaon[1]) ) &&
00154 !( (track->NSigmaProton() > mNSigmaAntiProton[0]) &&
00155 (track->NSigmaProton() < mNSigmaAntiProton[1]) ) &&
00156 (track->Charge() == mCharge || mCharge==0 )
00157 );
00158
00159 #ifdef STHBTDEBUG
00160 cout << mNSigmaElectron[0] << " << " << track->NSigmaElectron() << " << " << mNSigmaElectron[1] << " ";
00161 cout << (track->NSigmaElectron() >= mNSigmaElectron[0]) << (track->NSigmaElectron() <= mNSigmaElectron[1]) << endl;
00162 #endif
00163
00164 bool goodTrack=( true &&
00165 (track->DCAxy() >= mDCA[0]) &&
00166 (track->DCAxy() <= mDCA[1]) &&
00167 (track->DCAxyGlobal() >= mDCAGlobal[0]) &&
00168 (track->DCAxyGlobal() <= mDCAGlobal[1]) &&
00169 (track->NHits() >= mNHits[0]) &&
00170 (track->NHits() <= mNHits[1]) &&
00171 (track->NHitsDedx() >= mNdEdxHits[0]) &&
00172 (track->NHitsDedx() <= mNdEdxHits[1]) &&
00173 (track->P().mag() >= mP[0]) &&
00174 (track->P().mag() <= mP[1]) &&
00175 (track->Pt() >= mPt[0]) &&
00176 (track->Pt() <= mPt[1]) &&
00177 (track->P().x() >= mPx[0]) &&
00178 (track->P().x() <= mPx[1]) &&
00179 (track->P().y() >= mPy[0]) &&
00180 (track->P().y() <= mPy[1]) &&
00181 (track->P().z() >= mPz[0]) &&
00182 (track->P().z() <= mPz[1]) &&
00183 (track->P().pseudoRapidity() >= mEta[0]) &&
00184 (track->P().pseudoRapidity() <= mEta[1]) &&
00185 (TRapidity >= mRapidity[0]) &&
00186 (TRapidity <= mRapidity[1])
00187 );
00188
00189
00190 #ifdef STHBTDEBUG
00191 cout << " goodPID=" << goodPID << " ";
00192 cout << " goodTrack=" << goodTrack << " ";
00193 cout << endl;
00194 #endif
00195
00196 (goodTrack && goodPID) ? mNTracksPassed++ : mNTracksFailed++;
00197
00198 return (goodPID && goodTrack);
00199 }
00200
00201 StHbtString franksTrackCut::Report(){
00202 string Stemp;
00203 char Ctemp[100];
00204 sprintf(Ctemp,"\nParticle mass:\t%E",mMass);
00205 Stemp+=Ctemp;
00206 sprintf(Ctemp,"\nParticle charge:\t%d",mCharge);
00207 Stemp+=Ctemp;
00208 sprintf(Ctemp,"\nParticle Nsigma from pion:\t%E - %E",mNSigmaPion[0],mNSigmaPion[1]);
00209 Stemp+=Ctemp;
00210 sprintf(Ctemp,"\nParticle Nsigma from kaon:\t%E - %E",mNSigmaKaon[0],mNSigmaKaon[1]);
00211 Stemp+=Ctemp;
00212 sprintf(Ctemp,"\nParticle Nsigma from proton:\t%E - %E",mNSigmaProton[0],mNSigmaProton[1]);
00213 Stemp+=Ctemp;
00214 sprintf(Ctemp,"\nParticle PidProb from electron:\t%E - %E",mPidProbElectron[0],mPidProbElectron[1]);
00215 Stemp+=Ctemp;
00216 sprintf(Ctemp,"\nParticle PidProb from pion:\t%E - %E",mPidProbPion[0],mPidProbPion[1]);
00217 Stemp+=Ctemp;
00218 sprintf(Ctemp,"\nParticle PidProb from kaon:\t%E - %E",mPidProbKaon[0],mPidProbKaon[1]);
00219 Stemp+=Ctemp;
00220 sprintf(Ctemp,"\nParticle PidProb from proton:\t%E - %E",mPidProbProton[0],mPidProbProton[1]);
00221 Stemp+=Ctemp;
00222 sprintf(Ctemp,"\nParticle PidProb from electron:\t%E - %E",mPidProbElectron[0],mPidProbElectron[1]);
00223 Stemp+=Ctemp;
00224 sprintf(Ctemp,"\nParticle #hits:\t%d - %d",mNHits[0],mNHits[1]);
00225 Stemp+=Ctemp;
00226 sprintf(Ctemp,"\nParticle dEdx #hits:\t%d - %d",mNdEdxHits[0],mNdEdxHits[1]);
00227 Stemp+=Ctemp;
00228 sprintf(Ctemp,"\nParticle p:\t%E - %E",mP[0],mP[1]);
00229 Stemp+=Ctemp;
00230 sprintf(Ctemp,"\nParticle pT:\t%E - %E",mPt[0],mPt[1]);
00231 Stemp+=Ctemp;
00232 sprintf(Ctemp,"\nParticle rapidity:\t%E - %E",mRapidity[0],mRapidity[1]);
00233 Stemp+=Ctemp;
00234 sprintf(Ctemp,"\nParticle mEta:\t%E - %E",mEta[0],mEta[1]);
00235 Stemp+=Ctemp;
00236 sprintf(Ctemp,"\nParticle DCA:\t%E - %E",mDCA[0],mDCA[1]);
00237 Stemp+=Ctemp;
00238 sprintf(Ctemp,"\nParticle DCAGlobal:\t%E - %E",mDCAGlobal[0],mDCAGlobal[1]);
00239 Stemp+=Ctemp;
00240 sprintf(Ctemp,"\nNumber of tracks which passed:\t%ld Number which failed:\t%ld",mNTracksPassed,mNTracksFailed);
00241 Stemp += Ctemp;
00242 StHbtString returnThis = Stemp;
00243 return returnThis;
00244 }
00245
00246
00247 ostrstream* franksTrackCut::finalReport() const{
00248 ostrstream* tFinalReport = new ostrstream;
00249 (*tFinalReport) << "_____ Track Cut _____ " << endl
00250 << "Charge = " << mCharge << endl
00251 << mNSigmaPion[0] << " < Sigma pion < "
00252 << mNSigmaPion[1] << endl
00253 << mNSigmaKaon[0] << " < Sigma Kaon < "
00254 << mNSigmaKaon[1] << endl
00255 << mNSigmaProton[0] << " < Sigma proton < "
00256 << mNSigmaProton[1] << endl
00257 << mNHits[0] << " < NHits < " << mNHits[1] << endl
00258 << mNdEdxHits[0] << " < NHits < " << mNdEdxHits[1] << endl
00259 << mPt[0] << " < pT < " << mPt[1] << endl
00260 << mP[0] << " < p < " << mP[1] << endl
00261 << mRapidity[0] << " < Y < " << mRapidity[1] << endl
00262 << mDCA[0] << " < dca < " << mDCA[1] << endl
00263 << " >>> N Tracks passed " << mNTracksPassed << endl
00264 << " >>> N Tracks failed " << mNTracksFailed << endl
00265 << ends;
00266 return tFinalReport;
00267 }
00268