]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/FEMTOSCOPY/K0Analysis/AliFemtoK0Analysis.cxx
Analysis code update (Matt Steinpreis)
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / K0Analysis / AliFemtoK0Analysis.cxx
index b42516f0918157264f6dc47c74dfc2d96713fd5c..eda386a2dd3898ed0b29b84112b26afaaeee9ed5 100644 (file)
@@ -21,7 +21,7 @@
 //  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
@@ -255,8 +259,8 @@ void AliFemtoK0Analysis::UserCreateOutputObjects()
   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
@@ -595,43 +599,43 @@ void AliFemtoK0Analysis::Exec(Option_t *)
     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
@@ -661,39 +665,48 @@ void AliFemtoK0Analysis::Exec(Option_t *)
     //}// 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
@@ -748,10 +761,16 @@ void AliFemtoK0Analysis::Exec(Option_t *)
   (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