00001 #include "StHbtMaker/Cut/franksXiCut.h"
00002 #include <cstdio>
00003
00004 #ifdef __ROOT__
00005 ClassImp(franksXiCut)
00006 #endif
00007
00008
00009 franksXiCut::franksXiCut(){
00010 mNXisPassed = mNXisFailed = 0;
00011
00012 mXiMassRange[0] =0;
00013 mXiMassRange[1]=10000;
00014
00015 mOmegaMassRange[0] =0;
00016 mOmegaMassRange[1]=10000;
00017
00018 mdcaXidaughters[0]=0;
00019 mdcaXidaughters[1]=1000;
00020
00021 mdcaXiToPrimVertex[0]=0;
00022 mdcaXiToPrimVertex[1]=1000;
00023
00024 mdecayLengthXi[0]=0;
00025 mdecayLengthXi[1]=10000;
00026
00027 mtpcHitsBac[0]=0;
00028 mtpcHitsBac[1]=1000;
00029
00030 mdcaBacToPrimVertex[0]=0;
00031 mdcaBacToPrimVertex[1]=10000;
00032
00033 mptArmXi[0]=0;
00034 mptArmXi[1]=100;
00035
00036 malphaXi[0]=-10;
00037 malphaXi[1]=10;
00038
00039 mChargedEdx=0;
00040 mdEdx[0]=0;
00041 mdEdx[1]=-10;
00042 mdEdx[0]=0;
00043 mdEdx[1]=-10;
00044
00045 mPt[0]=0;
00046 mPt[1]=100000;
00047
00048 mRapidity[0]=-100000;
00049 mRapidity[1]=100000;
00050
00051 mMass = 1.32131;
00052
00053
00054 }
00055
00056
00057
00058
00059
00060 bool franksXiCut::Pass(const StHbtXi* Xi){
00061 int inMassRange;
00062
00063 #ifdef STHBTDEBUG
00064 cout << endl;
00065 cout << " * dcaXiDaughters " << Xi->dcaXiDaughters();
00066 cout << " * dcaXiToPrimVertex " << Xi->dcaXiToPrimVertex();
00067 cout << " * decayLengthXi " << Xi->decayLengthXi();
00068 cout << " * tpcHitsBac " << Xi->tpcHitsBac();
00069 cout << " * dcaNegToPrimVertex " << Xi->dcaBacToPrimVertex();
00070 cout << " * ptArmXi " << Xi->ptArmXi();
00071 cout << " * alphaXi " << Xi->alphaXi();
00072 cout << " * dEdxBac " << Xi->dedxBac();
00073 cout << endl;
00074 #endif
00075
00076
00077 inMassRange=0;
00078
00079
00080 if ( (Xi->massXi() > mXiMassRange[0]) && (Xi->massXi() < mXiMassRange[1]) ) inMassRange=1;
00081 if ( (Xi->massOmega() > mOmegaMassRange[0]) && (Xi->massOmega() < mOmegaMassRange[1]) ) inMassRange=1;
00082
00083
00084 bool goodPID = ( inMassRange &&
00085 (Xi->dcaXiDaughters() > mdcaXidaughters[0]) &&
00086 (Xi->dcaXiDaughters() < mdcaXidaughters[1]) &&
00087 (Xi->dcaXiToPrimVertex() > mdcaXiToPrimVertex[0]) &&
00088 (Xi->dcaXiToPrimVertex() < mdcaXiToPrimVertex[1]) &&
00089 (Xi->decayLengthXi() > mdecayLengthXi[0]) &&
00090 (Xi->decayLengthXi() < mdecayLengthXi[1]) &&
00091 (Xi->tpcHitsBac() > mtpcHitsBac[0]) &&
00092 (Xi->tpcHitsBac() < mtpcHitsBac[1]) &&
00093 (Xi->dcaBacToPrimVertex() > mdcaBacToPrimVertex[0]) &&
00094 (Xi->dcaBacToPrimVertex() < mdcaBacToPrimVertex[1]) &&
00095 (Xi->ptArmXi() > mptArmXi[0]) &&
00096 (Xi->ptArmXi() < mptArmXi[1]) &&
00097 (Xi->alphaXi() > malphaXi[0]) &&
00098 (Xi->alphaXi() < malphaXi[1]));
00099
00100 if(goodPID){
00101 if( mChargedEdx <0){
00102 goodPID = (Xi->dedxNeg() > (mdEdx[0]*Xi->ptNeg()+mdEdx[1]));
00103 }
00104 if( mChargedEdx > 0){
00105 goodPID = (Xi->dedxPos() > (mdEdx[0]*Xi->ptPos()+mdEdx[1]));
00106 }
00107 }
00108
00109 if (goodPID){
00110 float TEnergy = ::sqrt((Xi->ptotXi())*(Xi->ptotXi())+mMass*mMass);
00111 float TRapidity = 0.5*::log((TEnergy+Xi->momXi().z())/
00112 (TEnergy-Xi->momXi().z()));
00113
00114 float Pt = Xi->ptXi();
00115
00116
00117
00118 #ifdef STHBTDEBUG
00119 cout << " * Pt " << Pt;
00120 cout << " * mPt[0] " << mPt[0];
00121 cout << " * mPt[1] " << mPt[1];
00122 cout << " * TRapidity " << TRapidity;
00123 cout << " * mRapidity[0] " << mRapidity[0];
00124 cout << " * mRapidity[1] " << mRapidity[1];
00125 cout << " * Pt " << (Pt > mPt[0]) && (Pt < mPt[1]);
00126 cout << " * y " << (TRapidity > mRapidity[0]) && (TRapidity < mRapidity[1]);
00127 cout << endl;
00128 #endif
00129
00130 bool goodXi=
00131 ((Pt > mPt[0]) &&
00132 (Pt < mPt[1]) &&
00133 (TRapidity > mRapidity[0]) &&
00134 (TRapidity < mRapidity[1]));
00135
00136 goodXi ? mNXisPassed++ : mNXisFailed++;
00137 return (goodXi);
00138 }
00139 else{
00140 mNXisFailed++;
00141 return (goodPID);
00142 }
00143 }
00144
00145 StHbtString franksXiCut::Report(){
00146 string Stemp;
00147 char Ctemp[100];
00148 sprintf(Ctemp,"--franksXiCut--\n Particle mass:\t%E\n",this->Mass());
00149 Stemp=Ctemp;
00150 sprintf(Ctemp,"Xi mass range:\t%E - %E\n",mXiMassRange[0],
00151 mXiMassRange[1]);
00152 Stemp+=Ctemp;
00153 sprintf(Ctemp,"dcaXidaughters:\t%E - %E\n",mdcaXidaughters[0],
00154 mdcaXidaughters[1]);
00155 Stemp+=Ctemp;
00156 sprintf(Ctemp,"dcaXiToPrimVertex:\t%E - %E\n",mdcaXiToPrimVertex[0],
00157 mdcaXiToPrimVertex[1]);
00158 Stemp+=Ctemp;
00159 sprintf(Ctemp,"decayLengthXi:\t%E - %E\n",mdecayLengthXi[0],
00160 mdecayLengthXi[1]);
00161 Stemp+=Ctemp;
00162 sprintf(Ctemp,"tpcHitsBac:\t%d - %d\n",mtpcHitsBac[0],mtpcHitsBac[1]);
00163 Stemp+=Ctemp;
00164 sprintf(Ctemp,"dcaBacToPrimVertex:\t%E - %E\n",mdcaBacToPrimVertex[0],
00165 mdcaBacToPrimVertex[1]);
00166 Stemp+=Ctemp;
00167 sprintf(Ctemp,"dedx>:\t%E pt+%E for Charge %E\n ",mdEdx[0],mdEdx[1],mChargedEdx);
00168 Stemp+=Ctemp;
00169 sprintf(Ctemp,"ptArmXi:\t%E - %E\n",mptArmXi[0],mptArmXi[1]);
00170 Stemp+=Ctemp;
00171 sprintf(Ctemp,"alphaXi:\t%E - %E\n",malphaXi[0],malphaXi[1]);
00172 Stemp+=Ctemp;
00173 sprintf(Ctemp,"Particle pT:\t%E - %E\n",mPt[0],mPt[1]);
00174 Stemp+=Ctemp;
00175 sprintf(Ctemp,"Particle rapidity:\t%E - %E\n",mRapidity[0],mRapidity[1]);
00176 Stemp+=Ctemp;
00177 sprintf(Ctemp,"Number of Xis which passed:\t%ld Number which failed:\t%ld\n",mNXisPassed,mNXisFailed);
00178 Stemp += Ctemp;
00179 StHbtString returnThis = Stemp;
00180 return returnThis;
00181 }