00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "StHbtMaker/Cut/adamsPairCut.h"
00018 #include <string>
00019 #include <cstdio>
00020 #include <Stsstream.h>
00021
00022 #ifdef __ROOT__
00023 ClassImp(adamsPairCut)
00024 #endif
00025
00026
00027 adamsPairCut::adamsPairCut():HitMergingPairCut(){
00028 mNPairsPassed = mNPairsFailed = 0;
00029 mElSigma=0.0;
00030 mPiSigma=0.0;
00031 mKSigma =0.0;
00032 mElPIDMax=1.0;
00033 mPiPIDMax=1.0;
00034 mKPIDMax =1.0;
00035 mPIDPThreshold= 0.0;
00036 }
00037
00038
00039
00040
00041
00042 bool adamsPairCut::Pass(const StHbtPair* pair){
00043 bool isElPair, isPiPair, isKPair;
00044
00045 if (pair->track1()->Track()->P().mag() < mPIDPThreshold)
00046 {
00047 bool is1El = (TMath::Abs(pair->track1()->Track()->NSigmaElectron()) < mElSigma);
00048 bool is1Pi = (TMath::Abs(pair->track1()->Track()->NSigmaPion()) < mPiSigma);
00049 bool is1K = (TMath::Abs(pair->track1()->Track()->NSigmaKaon()) < mKSigma);
00050 if (pair->track2()->Track()->P().mag() < mPIDPThreshold)
00051 {
00052 isElPair = is1El && (TMath::Abs(pair->track2()->Track()->NSigmaElectron()) < mElSigma);
00053 isPiPair = is1Pi && (TMath::Abs(pair->track2()->Track()->NSigmaPion()) < mPiSigma);
00054 isKPair = is1K && (TMath::Abs(pair->track2()->Track()->NSigmaKaon()) < mKSigma);
00055 }
00056 else
00057 {
00058 isElPair = is1El && (pair->track2()->Track()->PidProbElectron() <= mElPIDMax);
00059 isPiPair = is1Pi && (pair->track2()->Track()->PidProbPion() <= mPiPIDMax);
00060 isKPair = is1K && (pair->track2()->Track()->PidProbKaon() <= mKPIDMax);
00061 }
00062 }
00063 else
00064 {
00065 if (pair->track2()->Track()->P().mag() < mPIDPThreshold)
00066 {
00067 bool is2El = (TMath::Abs(pair->track2()->Track()->NSigmaElectron()) < mElSigma);
00068 bool is2Pi = (TMath::Abs(pair->track2()->Track()->NSigmaPion()) < mPiSigma);
00069 bool is2K = (TMath::Abs(pair->track2()->Track()->NSigmaKaon()) < mKSigma);
00070 isElPair = is2El && (pair->track1()->Track()->PidProbElectron() <= mElPIDMax);
00071 isPiPair = is2Pi && (pair->track1()->Track()->PidProbPion() <= mPiPIDMax);
00072 isKPair = is2K && (pair->track1()->Track()->PidProbKaon() <= mKPIDMax);
00073 }
00074 else
00075 {
00076 isElPair = (pair->track1()->Track()->PidProbElectron() * pair->track2()->Track()->PidProbElectron()) < mElPIDMax;
00077 isPiPair = (pair->track1()->Track()->PidProbPion() * pair->track2()->Track()->PidProbPion()) < mPiPIDMax;
00078 isKPair = (pair->track1()->Track()->PidProbKaon() * pair->track2()->Track()->PidProbKaon()) < mKPIDMax;
00079 }
00080 }
00081 bool temp = ( pair->track1()->TrackId()!=pair->track2()->TrackId() &&
00082 (!isElPair) &&
00083 (!isPiPair) &&
00084 (!isKPair) &&
00085 pair->getFracOfMergedRow()<mMaxFracPair
00086 );
00087 temp ? mNPairsPassed++ : mNPairsFailed++;
00088 return temp;
00089 }
00090
00091 StHbtString adamsPairCut::Report(){
00092 string Stemp = "Adams Pair Cut - cut on e+e- pi+pi+ K+K- using NSigma\n";
00093 char Ctemp[100];
00094 sprintf(Ctemp,"Number of pairs which passed:\t%ld Number which failed:\t%ld\n",mNPairsPassed,mNPairsFailed);
00095 Stemp += Ctemp;
00096 StHbtString returnThis = Stemp;
00097 return returnThis;
00098 }
00099
00100 ostrstream* adamsPairCut::finalReport() const{
00101 ostrstream* tFinalReport = new ostrstream;
00102 (*tFinalReport) << "_____ Adams pair Cut _____ " << endl
00103 << " N pairs passed : " << mNPairsPassed << endl
00104 << " N pairs failed : " << mNPairsFailed << endl
00105 << ends;
00106 return tFinalReport;
00107 }