// authors: Matthew Steinpreis (matthew.steinpreis@cern.ch)\r
// \r
// Major changes:\r
-// - TOF mismatch function calls changed (3/28/13)\r
+// - TOF mismatch function calls changed (4/18/13)\r
// - added minimum decay length cut (3/28/13)\r
//\r
// Minor changes:\r
// of k0Count (which included skipped k0s with shared daughters) (3/25/13)\r
// - added hists for 3D mom. in LF and PRF (3/28/13) \r
// - changed calling of PIDResponse (should be same actions) (3/28/13)\r
+// - keep "side" K0s for mass plot (4/18)\r
+// - tweaked loading and skipping appropriately\r
+// - use merit test to skip sides (against good and side K0s)\r
+// - a good K0 cant be skipped by a side\r
////////////////////////////////////////////////////////////////////////////////\r
\r
\r
fOutputList->Add(fHistKtK0);\r
\r
//invariant mass distributions\r
- //TH3F* fHistMassPtK0= new TH3F("fHistMassPtK0", "",kCentBins,.5,kCentBins+.5,40,0.,4.,200,.4,.6);\r
- //fOutputList->Add(fHistMassPtK0);\r
+ TH3F* fHistMass = new TH3F("fHistMass","",kCentBins,.5,kCentBins+.5,50,0.,5.,400,.3,.7);\r
+ fOutputList->Add(fHistMass);\r
//TH3F* fHistMassPtCFK0 = new TH3F("fHistMassPtCFK0","",kCentBins,.5,kCentBins+.5,50,0.,5.,200,.4,.6);\r
//fOutputList->Add(fHistMassPtCFK0);\r
//TH3F* fHistMassPtCFBkgK0 = new TH3F("fHistMassPtCFBkgK0","",kCentBins,.5,kCentBins+.5,50,0.,5.,200,.4,.6);\r
if(fabs(fPidAOD->NumberOfSigmasTPC(prongTrackNeg,AliPID::kPion)) < kMaxTPCSigmaPion) goodPiMinus = kTRUE;\r
\r
//Positive daughter identification TOF\r
- //float probMis;\r
- //AliPIDResponse::EDetPidStatus statusPosTOF = fPidAOD->CheckPIDStatus(AliPIDResponse::kTOF, prongTrackPos);\r
+ float probMis;\r
+ AliPIDResponse::EDetPidStatus statusPosTOF = fPidAOD->CheckPIDStatus(AliPIDResponse::kTOF, prongTrackPos);\r
double Ppos = v0->PProng(pos0or1);\r
if(Ppos > kTOFLow) //PiPlus\r
{\r
- if( (statusPos&AliESDtrack::kTOFpid)!=0 && (statusPos&AliESDtrack::kTIME)!=0 && (statusPos&AliESDtrack::kTOFout)!=0 && (statusPos&AliESDtrack::kTOFmismatch)<=0)\r
- //if(AliPIDResponse::kDetPidOk == statusPosTOF)\r
+ //if( (statusPos&AliESDtrack::kTOFpid)!=0 && (statusPos&AliESDtrack::kTIME)!=0 && (statusPos&AliESDtrack::kTOFout)!=0 && (statusPos&AliESDtrack::kTOFmismatch)<=0) (OBSOLETE; NEW CALL BELOW)\r
+ if(AliPIDResponse::kDetPidOk == statusPosTOF)\r
{\r
- //probMis = fPidAOD->GetTOFMismatchProbability(prongTrackPos);\r
- //if(probMis < 0.01) //avoid TOF-TPC mismatch\r
- //{\r
+ probMis = fPidAOD->GetTOFMismatchProbability(prongTrackPos);\r
+ if(probMis < 0.01) //avoid TOF-TPC mismatch\r
+ {\r
if(fabs(fPidAOD->NumberOfSigmasTOF(prongTrackPos,AliPID::kPion)) < kMaxTOFSigmaPion) goodPiPlus = kTRUE;\r
else goodPiPlus = kFALSE;\r
- //} \r
+ } \r
}\r
}\r
//Negative daughter identification TOF\r
- //AliPIDResponse::EDetPidStatus statusNegTOF = fPidAOD->CheckPIDStatus(AliPIDResponse::kTOF, prongTrackNeg);\r
+ AliPIDResponse::EDetPidStatus statusNegTOF = fPidAOD->CheckPIDStatus(AliPIDResponse::kTOF, prongTrackNeg);\r
double Pneg = v0->PProng(neg0or1);\r
if(Pneg > kTOFLow) //PiMinus\r
{\r
- if( (statusNeg&AliESDtrack::kTOFpid)!=0 && (statusNeg&AliESDtrack::kTIME)!=0 && (statusNeg&AliESDtrack::kTOFout)!=0 && (statusNeg&AliESDtrack::kTOFmismatch)<=0)\r
- //if(AliPIDResponse::kDetPidOk == statusNegTOF)\r
+ //if( (statusNeg&AliESDtrack::kTOFpid)!=0 && (statusNeg&AliESDtrack::kTIME)!=0 && (statusNeg&AliESDtrack::kTOFout)!=0 && (statusNeg&AliESDtrack::kTOFmismatch)<=0) (OBSOLETE; NEW CALL BELOW)\r
+ if(AliPIDResponse::kDetPidOk == statusNegTOF)\r
{\r
- //probMis = fPidAOD->GetTOFMismatchProbability(prongTrackPos);\r
- //if(probMis < 0.01) //avoid TOF-TPC mismatch\r
- //{\r
+ probMis = fPidAOD->GetTOFMismatchProbability(prongTrackPos);\r
+ if(probMis < 0.01) //avoid TOF-TPC mismatch\r
+ {\r
if(fabs(fPidAOD->NumberOfSigmasTOF(prongTrackNeg,AliPID::kPion)) < kMaxTOFSigmaPion) goodPiMinus = kTRUE;\r
else goodPiMinus = kFALSE;\r
- //}\r
+ }\r
}\r
}\r
\r
//K0 cuts\r
if(v0->Eta() > kEtaCut) continue; \r
if(v0->CosPointingAngle(primaryVertex) < kMinCosAngle) continue;\r
- if(v0->MassK0Short() < .4 || v0->MassK0Short() > .6) continue;\r
+ if(v0->MassK0Short() < .2 || v0->MassK0Short() > .8) continue;\r
if(v0->DcaNegToPrimVertex() < kMinDCAPrimaryPion) continue;\r
if(v0->DcaPosToPrimVertex() < kMinDCAPrimaryPion) continue; \r
if(v0->DecayLength(primaryVertex) > kMaxDLK0) continue;\r
//}// if kMCCase\r
\r
if(v0->MassK0Short() > .48 && v0->MassK0Short() < .515) goodK0 = kTRUE;\r
- else continue; //remove if want to do mass plots; would need to amend other stuff\r
+ //else continue; //removed, Apr 18\r
\r
//Check for shared daughters, using v0 DCA to judge\r
tempK0[v0Count].fSkipShared = kFALSE;\r
if(fMeritCase){\r
for(int iID = 0; iID<v0Count; iID++){\r
- if(tempK0[iID].fSkipShared == kFALSE){\r
+ if(tempK0[iID].fSkipShared == kFALSE){ //if old is already skipped, go to next old\r
if(tempK0[iID].fDaughterID1 == prongTrackPos->GetID() || tempK0[iID].fDaughterID2 == prongTrackNeg->GetID()){\r
- if(tempK0[iID].fV0Dca <= v0Dca){ //if old beats new\r
- tempK0[v0Count].fSkipShared = kTRUE; //skip new\r
+ if(tempK0[iID].fV0Dca <= v0Dca){ //if old beats new...\r
+ if(!tempK0[iID].fK0 && goodK0) continue; //if bad old beats new good, do nothing... \r
+ else{ //but if bad old beats new bad, or good old beats anything, skip new\r
+ tempK0[v0Count].fSkipShared = kTRUE; //skip new\r
break; //no need to keep checking others\r
}\r
- else{//new beats old\r
- tempK0[iID].fSkipShared = kTRUE; //skip old \r
- k0Count--;} //subtract from number of K0s (new one will be added later, if it succeeds)\r
+ }\r
+ else{ //if new beats old...\r
+ if(tempK0[iID].fK0 && !goodK0) continue; //if bad new beats good old, do nothing...\r
+ else{ //but if bad new beats bad old, or good new beats anything, skip old\r
+ tempK0[iID].fSkipShared = kTRUE; //skip old \r
+ if(tempK0[iID].fK0) k0Count--; //if good old gets skipped, subtract from number of K0s (new one will be added later, if it succeeds)\r
+ }\r
+ }\r
}\r
}\r
}\r
- if(tempK0[v0Count].fSkipShared) continue;\r
+ if(tempK0[v0Count].fSkipShared) continue; //if new K0 is skipped, don't load; go to next v0\r
}//if MeritCase \r
\r
//load parameters into temporary class instance\r
if(v0Count < kMaxNumK0)\r
{\r
- tempK0[v0Count].fK0 = kTRUE;\r
- //else tempK0[v0Count].fK0 = kFALSE; //in case I include v0s that arent "good" K0s \r
- k0Count++; //same as v0count right now (continue if not in mass range, above)\r
+ if(goodK0){\r
+ tempK0[v0Count].fK0 = kTRUE;\r
+ k0Count++;\r
+ }\r
+ else tempK0[v0Count].fK0 = kFALSE; \r
\r
//if(v0->MassK0Short() > .45 && v0->MassK0Short() < .48) tempK0[v0Count].fSideLeft = kTRUE;\r
//else tempK0[v0Count].fSideLeft = kFALSE;\r
//if(v0->MassK0Short() > .515 && v0->MassK0Short() < .545) tempK0[v0Count].fSideRight = kTRUE;\r
//else tempK0[v0Count].fSideRight = kFALSE;\r
- if(!goodK0) continue; //no sides, speed up analysis (REDUNDANT RIGHT NOW)\r
+ //if(!goodK0) continue; //no sides, speed up analysis (REDUNDANT RIGHT NOW)\r
\r
tempK0[v0Count].fDaughterID1 = prongTrackPos->GetID();\r
tempK0[v0Count].fDaughterID2 = prongTrackNeg->GetID();\r
(fEvt) = fEC[zBin][centBin]->fEvt;\r
(fEvt)->fFillStatus = 1;\r
int unskippedCount = 0;\r
- for(int i=0;i<v0Count;i++){\r
- if(!tempK0[i].fSkipShared){//don't include skipped v0s (from shared daughters)\r
- (fEvt)->fK0Particle[unskippedCount] = tempK0[i];\r
- unskippedCount++;\r
+ for(int i=0;i<v0Count;i++)\r
+ {\r
+ if(!tempK0[i].fSkipShared) //don't include skipped v0s (from shared daughters)\r
+ {\r
+ ((TH3F*)fOutputList->FindObject("fHistMass"))->Fill(centBin+1,tempK0[i].fPt,tempK0[i].fMass);\r
+ if(tempK0[i].fK0) //make sure particle is good (mass)\r
+ {\r
+ (fEvt)->fK0Particle[unskippedCount] = tempK0[i]; //load good, unskipped K0s\r
+ unskippedCount++; //count good, unskipped K0s\r
+ }\r
}\r
}\r
(fEvt)->fNumV0s = unskippedCount;\r