Add-on by F. Blanco: code to manage leading particle and cuts with respect to that
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Aug 2010 09:31:21 +0000 (09:31 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Aug 2010 09:31:21 +0000 (09:31 +0000)
PWG2/RESONANCES/AliRsnCutStd.cxx
PWG2/RESONANCES/AliRsnCutStd.h
PWG2/RESONANCES/AliRsnEvent.cxx
PWG2/RESONANCES/AliRsnValue.cxx
PWG2/RESONANCES/AliRsnValue.h

index 3891851..65384ee 100644 (file)
@@ -63,6 +63,7 @@ AliRsnCutStd::AliRsnCutStd
     // double
     case kP:
     case kPt:
+    case kPtLeading:
     case kEta:
     case kY:
     case kThetaDeg:
@@ -109,6 +110,7 @@ AliRsnCutStd::AliRsnCutStd
     // double
     case kP:
     case kPt:
+    case kPtLeading:
     case kEta:
     case kY:
     case kThetaDeg:
@@ -135,6 +137,7 @@ AliRsnCut::EVarType AliRsnCutStd::CheckType()
     // double couts
     case kP:
     case kPt:
+    case kPtLeading:
     case kEta:
     case kY:
     case kThetaDeg:
@@ -249,8 +252,19 @@ Bool_t AliRsnCutStd::IsEventSelected(AliRsnEvent * const event)
     case kMult:
       fCutValueI = event->GetMultiplicity();
       return OkRange();
+    case kPtLeading:
+    {
+      int leadingID = event->SelectLeadingParticle(0);
+      if(leadingID >= 0) {
+         AliRsnDaughter leadingPart = event->GetDaughter(leadingID);
+         AliVParticle *ref = fUseMC ? leadingPart.GetRefMC() : leadingPart.GetRef();
+         fCutValueD = ref->Pt();
+      }
+      else fCutValueD = 0;
+      return OkRange();
+    }
     default:
       AliWarning(Form("Value %d is not included in available cuts for EVENT. Cut skipped.", fType));
       return kTRUE;
   }
-}
+}
\ No newline at end of file
index b7e3d89..f927b35 100644 (file)
@@ -32,6 +32,7 @@ class AliRsnCutStd : public AliRsnCut
       kY,
       kThetaDeg,
       kMult,
+      kPtLeading,
       // cut without reference values
       kCharge,
       kSameLabel,
@@ -62,4 +63,4 @@ class AliRsnCutStd : public AliRsnCut
     ClassDef(AliRsnCutStd, 1)
 };
 
-#endif
+#endif
\ No newline at end of file
index 485987a..540829a 100644 (file)
@@ -324,14 +324,17 @@ Int_t AliRsnEvent::SelectLeadingParticle
   for (i = 0; i < nTracks; i++) {
     AliRsnDaughter track = GetDaughter(i);
     if (cutPID) if (!cutPID->IsSelected(&track)) continue;
-    if (track.P().Perp() < ptMin) continue;
-    if (!leading.IsOK() || track.P().Perp() > leading.P().Perp())
+    AliVParticle *ref = track.GetRef();
+    if (ref->Pt() < ptMin) continue;
+    //double pt = track.P().Perp();
+    //Printf("track %d %g", i, pt);
+    if (!leading.IsOK() || ref->Pt() > ptMin)
     {
       fLeading = i;
-      leading = track;
+      //leading = track;
+      ptMin = ref->Pt();
     }
   }
-
   return fLeading;
 }
 
@@ -393,4 +396,4 @@ Bool_t AliRsnEvent::GetAngleDistr
   angleRMS = TMath::Sqrt(angle2Mean - angleMean * angleMean);
 
   return kTRUE;
-}
+}
\ No newline at end of file
index 8a84c01..f005cae 100644 (file)
@@ -210,10 +210,38 @@ Bool_t AliRsnValue::Eval(AliRsnMother * const mother, AliRsnPairDef * const pair
     case kPairCosThetaStarMC2:
       //fValue = TMath::Cos(mother->ThetaStar(kFALSE, kTRUE));
       break;
+    case kAngleToLeading:
+      {
+         int ID1 = (mother->GetDaughter(0))->GetID();
+         int ID2 = (mother->GetDaughter(1))->GetID();
+         int leadingID = event->SelectLeadingParticle(0);
+         if(leadingID == ID1 || leadingID == ID2) return kFALSE;
+         AliRsnDaughter  leadingPart = event->GetDaughter(leadingID);
+         AliVParticle *ref = leadingPart.GetRef();
+
+         fValue = ref->Phi() - mother->Sum().Phi();
+         //return angle w.r.t. leading particle in the range -pi/2, 3/2pi
+         while(fValue >= TMath::Pi()) fValue -= 2*TMath::Pi();
+         while(fValue < -0.5*TMath::Pi()) fValue += 2*TMath::Pi();
+         //Printf("%g", fValue);
+
+      }
+      break;
     case kEventMult:
       if (!event) fValue = 0.0;
       fValue = (Double_t)event->GetMultiplicity();
       break;
+    case kLeadingPt:
+      {
+         int leadingID = event->SelectLeadingParticle(0);
+         if(leadingID >= 0) {
+                 AliRsnDaughter leadingPart = event->GetDaughter(leadingID);
+                 AliVParticle *ref = leadingPart.GetRef();
+                 fValue = ref->Pt();
+         }
+         else fValue = 0;
+      }
+      break;
     default:
       AliWarning("Invalid value type");
       return kFALSE;
index 252de99..3c01e86 100644 (file)
@@ -43,6 +43,8 @@ class AliRsnValue : public TNamed
       kPairCosThetaStar2,
       kPairCosThetaStarMC1,
       kPairCosThetaStarMC2,
+      kAngleToLeading,
+      kLeadingPt,
       kEventMult,
       kValueTypes
     };