00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #include "StHbtMaker/Cut/helensLaPV0Cut.h"
00054 #include "StHbtMaker/Cut/helensEventCut.h"
00055 #include "StHbtMaker/Infrastructure/StHbtAnalysis.h"
00056 #include <cstdio>
00057
00058 #ifdef __ROOT__
00059 ClassImp(helensLaPV0Cut)
00060 #endif
00061
00062
00063 helensLaPV0Cut::helensLaPV0Cut(){
00064 mNV0sPassed = mNV0sFailed = 0;
00065
00066 mV0MassRange[0] =0;
00067 mV0MassRange[1]=10000;
00068
00069 mdcaV0daughters[0]=0;
00070 mdcaV0daughters[1]=1000;
00071
00072 mdcaV0ToPrimVertex[0]=0;
00073 mdcaV0ToPrimVertex[1]=1000;
00074
00075 mdecayLengthV0[0]=0;
00076 mdecayLengthV0[1]=10000;
00077
00078 mtpcHitsPos[0]=0;
00079 mtpcHitsPos[1]=1000;
00080
00081 mtpcHitsNeg[0]=0;
00082 mtpcHitsNeg[1]=1000;
00083
00084
00085 mdcaPosToPrimVertex[0]=0;
00086 mdcaPosToPrimVertex[1]=1000;
00087
00088 mdcaNegToPrimVertex[0]=0;
00089 mdcaNegToPrimVertex[1]=10000;
00090
00091 mptArmV0[0]=0;
00092 mptArmV0[1]=100;
00093
00094 malphaV0[0]=-10;
00095 malphaV0[1]=10;
00096
00097 mChargedEdx=0;
00098 mdEdx[0]=0;
00099 mdEdx[1]=-10;
00100 mdEdx[0]=0;
00101 mdEdx[1]=-10;
00102
00103 mPt[0]=0;
00104 mPt[1]=100000;
00105
00106 mRapidity[0]=-100000;
00107 mRapidity[1]=100000;
00108
00109 V0Type = "K0Short";
00110 mMass = 0.498;
00111
00112
00113 }
00114
00115
00116
00117
00118
00119 bool helensLaPV0Cut::Pass(const StHbtV0* V0){
00120 int inMassRange;
00121
00122 #ifdef STHBTDEBUG
00123 cout << endl;
00124 cout << " * dcaV0Daughters " << V0->dcaV0Daughters();
00125 cout << " * dcaV0ToPrimVertex " << V0->dcaV0ToPrimVertex();
00126 cout << " * decayLengthV0 " << V0->decayLengthV0();
00127 cout << " * tpcHitsPos " << V0->tpcHitsPos();
00128 cout << " * tpcHitsNeg " << V0->tpcHitsNeg();
00129 cout << " * dcaPosToPrimVertex " << V0->dcaPosToPrimVertex();
00130 cout << " * dcaNegToPrimVertex " << V0->dcaNegToPrimVertex();
00131 cout << " * ptArmV0 " << V0->ptArmV0();
00132 cout << " * alphaV0 " << V0->alphaV0();
00133 cout << " * dEdxPos " << V0->dedxPos();
00134 cout << " * dEdxNeg " << V0->dedxNeg();
00135 cout << endl;
00136 #endif
00137
00138
00139 inMassRange=0;
00140
00141
00142 if( strstr(V0Type,"k") || strstr(V0Type,"K")){
00143 if( V0->massK0Short() < (mV0MassRange[1]) &&
00144 V0->massK0Short() > (mV0MassRange[0]) ) inMassRange=1;
00145 }
00146 else if( (strstr(V0Type,"anti") || strstr(V0Type,"ANTI"))){
00147 if( V0->massAntiLambda() < (mV0MassRange[1]) &&
00148 V0->massAntiLambda() > (mV0MassRange[0]) ) inMassRange=1;
00149 }
00150 else if( (strstr(V0Type,"ambda") || strstr(V0Type,"AMBDA"))){
00151 if( V0->massLambda() < (mV0MassRange[1]) &&
00152 V0->massLambda() > (mV0MassRange[0]) ) inMassRange=1;
00153 }
00154
00155
00156
00157 bool goodPID = ( inMassRange &&
00158 (V0->dcaV0Daughters() > mdcaV0daughters[0]) &&
00159 (V0->dcaV0Daughters() < mdcaV0daughters[1]) &&
00160 (V0->dcaV0ToPrimVertex() > mdcaV0ToPrimVertex[0]) &&
00161 (V0->dcaV0ToPrimVertex() < mdcaV0ToPrimVertex[1]) &&
00162 (V0->decayLengthV0() > mdecayLengthV0[0]) &&
00163 (V0->decayLengthV0() < mdecayLengthV0[1]) &&
00164 (V0->tpcHitsPos() > mtpcHitsPos[0]) &&
00165 (V0->tpcHitsPos() < mtpcHitsPos[1]) &&
00166 (V0->tpcHitsNeg() > mtpcHitsNeg[0]) &&
00167 (V0->tpcHitsNeg() < mtpcHitsNeg[1]) &&
00168 (V0->dcaPosToPrimVertex() > mdcaPosToPrimVertex[0]) &&
00169 (V0->dcaPosToPrimVertex() < mdcaPosToPrimVertex[1]) &&
00170 (V0->dcaNegToPrimVertex() > mdcaNegToPrimVertex[0]) &&
00171 (V0->dcaNegToPrimVertex() < mdcaNegToPrimVertex[1]) &&
00172 (V0->ptArmV0() > mptArmV0[0]) &&
00173 (V0->ptArmV0() < mptArmV0[1]) &&
00174 (V0->alphaV0() > malphaV0[0]) &&
00175 (V0->alphaV0() < malphaV0[1]));
00176
00177
00178
00179 if(goodPID && mChargedEdx !=0){
00180
00181
00182
00183 StHbtAnalysis* Anal = (StHbtAnalysis*) myAnalysis;
00184 helensEventCut* EventCut = (helensEventCut*)Anal->EventCut();
00185 StHbtTrkV0Iterator pIter;
00186 StHbtTrkV0Match* TheMatch;
00187
00188 float dedxPos= -1000;
00189 float dedxNeg=-1000;
00190 for( pIter= EventCut->TrkV0MatchCollection()->begin(); pIter!= EventCut->TrkV0MatchCollection()->end(); pIter++){
00191
00192 TheMatch = *pIter;
00193 if( TheMatch->TrkId() == V0->idPos() && !TheMatch->Used()){
00194 dedxPos= TheMatch->dEdx();
00195 TheMatch->SetUsed(1);
00196 }
00197 if( TheMatch->TrkId() == V0->idNeg() && !TheMatch->Used()){
00198 dedxNeg=TheMatch->dEdx();
00199 TheMatch->SetUsed(1);
00200 }
00201 }
00202
00203 if( mChargedEdx <0){
00204 goodPID = ( (dedxNeg > (mdEdx[0]*V0->ptNeg()+mdEdx[1])) &&
00205 (dedxNeg > (mdEdx[2]*V0->ptNeg()+mdEdx[3])));
00206 }
00207 if( mChargedEdx > 0){
00208 goodPID = ( (dedxPos > (mdEdx[0]*V0->ptPos()+mdEdx[1])) &&
00209 (dedxPos > (mdEdx[2]*V0->ptPos()+mdEdx[3])));
00210 }
00211 }
00212
00213
00214 if (goodPID){
00215
00216 float TEnergy = ::sqrt((V0->ptotV0())*(V0->ptotV0())+mMass*mMass);
00217 float TRapidity = 0.5*::log((TEnergy+V0->momV0().z())/
00218 (TEnergy-V0->momV0().z()));
00219
00220 float Pt = V0->ptV0();
00221
00222
00223
00224 #ifdef STHBTDEBUG
00225 cout << " * Pt " << Pt;
00226 cout << " * mPt[0] " << mPt[0];
00227 cout << " * mPt[1] " << mPt[1];
00228 cout << " * TRapidity " << TRapidity;
00229 cout << " * mRapidity[0] " << mRapidity[0];
00230 cout << " * mRapidity[1] " << mRapidity[1];
00231 cout << " * Pt " << (Pt > mPt[0]) && (Pt < mPt[1]);
00232 cout << " * y " << (TRapidity > mRapidity[0]) && (TRapidity < mRapidity[1]);
00233 cout << endl;
00234 #endif
00235
00236 bool goodV0=
00237 ((Pt > mPt[0]) &&
00238 (Pt < mPt[1]) &&
00239 (TRapidity > mRapidity[0]) &&
00240 (TRapidity < mRapidity[1]));
00241
00242 goodV0 ? mNV0sPassed++ : mNV0sFailed++;
00243 return (goodV0);
00244 }
00245 else{
00246 mNV0sFailed++;
00247 return (goodPID);
00248 }
00249 }
00250
00251 StHbtString helensLaPV0Cut::Report(){
00252 string Stemp;
00253 char Ctemp[100];
00254 sprintf(Ctemp,"--helensLaPV0Cut--\n Particle mass:\t%E\n",this->Mass());
00255 Stemp=Ctemp;
00256 sprintf(Ctemp,"V0 mass range:\t%E - %E\n",mV0MassRange[0],
00257 mV0MassRange[1]);
00258 Stemp+=Ctemp;
00259 sprintf(Ctemp,"dcaV0daughters:\t%E - %E\n",mdcaV0daughters[0],
00260 mdcaV0daughters[1]);
00261 Stemp+=Ctemp;
00262 sprintf(Ctemp,"dcaV0ToPrimVertex:\t%E - %E\n",mdcaV0ToPrimVertex[0],
00263 mdcaV0ToPrimVertex[1]);
00264 Stemp+=Ctemp;
00265 sprintf(Ctemp,"decayLengthV0:\t%E - %E\n",mdecayLengthV0[0],
00266 mdecayLengthV0[1]);
00267 Stemp+=Ctemp;
00268 sprintf(Ctemp,"tpcHitsPos:\t%d - %d\n",mtpcHitsPos[0],mtpcHitsPos[1]);
00269 Stemp+=Ctemp;
00270 sprintf(Ctemp,"tpcHitsNeg:\t%d - %d\n",mtpcHitsNeg[0],mtpcHitsNeg[1]);
00271 Stemp+=Ctemp;
00272 sprintf(Ctemp,"dcaPosToPrimVertex:\t%E - %E\n",mdcaPosToPrimVertex[0],
00273 mdcaPosToPrimVertex[1]);
00274 Stemp+=Ctemp;
00275 sprintf(Ctemp,"dcaNegToPrimVertex:\t%E - %E\n",mdcaNegToPrimVertex[0],
00276 mdcaNegToPrimVertex[1]);
00277 Stemp+=Ctemp;
00278 sprintf(Ctemp,"dedx>:\t%E pt+%E and \t%E pt+ %E for Charge%E\n ",mdEdx[0],mdEdx[1],mdEdx[2],mdEdx[3],mChargedEdx);
00279 Stemp+=Ctemp;
00280 sprintf(Ctemp,"ptArmV0:\t%E - %E\n",mptArmV0[0],mptArmV0[1]);
00281 Stemp+=Ctemp;
00282 sprintf(Ctemp,"alphaV0:\t%E - %E\n",malphaV0[0],malphaV0[1]);
00283 Stemp+=Ctemp;
00284 sprintf(Ctemp,"Particle pT:\t%E - %E\n",mPt[0],mPt[1]);
00285 Stemp+=Ctemp;
00286 sprintf(Ctemp,"Particle rapidity:\t%E - %E\n",mRapidity[0],mRapidity[1]);
00287 Stemp+=Ctemp;
00288 sprintf(Ctemp,"Number of V0s which passed:\t%ld Number which failed:\t%ld\n",mNV0sPassed,mNV0sFailed);
00289 Stemp += Ctemp;
00290 StHbtString returnThis = Stemp;
00291 return returnThis;
00292 }