Added trigger selection for ESD analysis in mini task + added computation of leadin...
authorfbellini <fbellini@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Nov 2013 14:40:29 +0000 (14:40 +0000)
committerfbellini <fbellini@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Nov 2013 14:40:29 +0000 (14:40 +0000)
PWGLF/RESONANCES/AliRsnCutTrackQuality.cxx
PWGLF/RESONANCES/AliRsnMiniAnalysisTask.cxx
PWGLF/RESONANCES/AliRsnMiniAnalysisTask.h
PWGLF/RESONANCES/AliRsnMiniEvent.cxx
PWGLF/RESONANCES/AliRsnMiniParticle.cxx
PWGLF/RESONANCES/AliRsnMiniParticle.h
PWGLF/RESONANCES/AliRsnMiniValue.cxx
PWGLF/RESONANCES/macros/mini/AddTaskKStar_pAPileUp.C

index 43d68db..8162b7f 100644 (file)
@@ -221,8 +221,8 @@ Bool_t AliRsnCutTrackQuality::CheckESD(AliESDtrack *track)
 // This is done using the default track checker for ESD.
 // It is declared static, not to recreate it every time.
 //
-
-   static AliESDtrackCuts cuts;
+  //static AliESDtrackCuts cuts;
+  AliESDtrackCuts cuts;
 
    // general acceptance/pt cuts
    cuts.SetPtRange(fPt[0], fPt[1]);
index d491e22..43536af 100644 (file)
@@ -45,6 +45,7 @@ AliRsnMiniAnalysisTask::AliRsnMiniAnalysisTask() :
    AliAnalysisTaskSE(),
    fUseMC(kFALSE),
    fEvNum(0),
+   fTriggerMask(0),
    fUseCentrality(kFALSE),
    fCentralityType("QUALITY"),
    fUseAOD049CentralityPatch(kFALSE),
@@ -81,6 +82,7 @@ AliRsnMiniAnalysisTask::AliRsnMiniAnalysisTask(const char *name, Bool_t useMC) :
    AliAnalysisTaskSE(name),
    fUseMC(useMC),
    fEvNum(0),
+   fTriggerMask(AliVEvent::kMB),
    fUseCentrality(kFALSE),
    fCentralityType("QUALITY"),
    fUseAOD049CentralityPatch(kFALSE),
@@ -122,6 +124,7 @@ AliRsnMiniAnalysisTask::AliRsnMiniAnalysisTask(const AliRsnMiniAnalysisTask &cop
    AliAnalysisTaskSE(copy),
    fUseMC(copy.fUseMC),
    fEvNum(0),
+   fTriggerMask(copy.fTriggerMask),
    fUseCentrality(copy.fUseCentrality),
    fCentralityType(copy.fCentralityType),
    fUseAOD049CentralityPatch(copy.fUseAOD049CentralityPatch),
@@ -168,6 +171,8 @@ AliRsnMiniAnalysisTask &AliRsnMiniAnalysisTask::operator=(const AliRsnMiniAnalys
    if (this == &copy)
       return *this;
    fUseMC = copy.fUseMC;
+   fEvNum = copy.fEvNum;
+   fTriggerMask = copy.fTriggerMask;
    fUseCentrality = copy.fUseCentrality;
    fCentralityType = copy.fCentralityType;
    fUseAOD049CentralityPatch = copy.fUseAOD049CentralityPatch;
@@ -602,7 +607,8 @@ Char_t AliRsnMiniAnalysisTask::CheckCurrentEvent()
       output = 'E';
       // ESD specific check: Physics Selection
       // --> if this is failed, the event is rejected
-      isSelected = (((AliInputEventHandler *)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
+      isSelected = (((AliInputEventHandler *)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
+
       if (!isSelected) {
          AliDebugClass(2, "Event does not pass physics selections");
          fRsnEvent.SetRef(0x0);
@@ -1127,3 +1133,67 @@ void AliRsnMiniAnalysisTask::SetEventQAHist(TString type,TH2F *histo)
 
    return;
 }
+
+//----------------------------------------------------------------------------------
+Int_t AliRsnMiniAnalysisTask::CreateValue(AliRsnMiniValue::EType type, Bool_t useMC)
+{
+//
+// Create a new value in the task,
+// and returns its ID, which is needed for setting up histograms.
+// If that value was already initialized, returns its ID and does not recreate it.
+//
+
+   Int_t valID = ValueID(type, useMC);
+   if (valID >= 0 && valID < fValues.GetEntries()) {
+      AliInfo(Form("Value '%s' is already created in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
+   } else {
+      valID = fValues.GetEntries();
+      AliInfo(Form("Creating value '%s' in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
+      new (fValues[valID]) AliRsnMiniValue(type, useMC);
+   }
+
+   return valID;
+}
+
+//----------------------------------------------------------------------------------
+Int_t AliRsnMiniAnalysisTask::ValueID(AliRsnMiniValue::EType type, Bool_t useMC)
+{
+//
+// Searches if a value computation is initialized
+//
+
+   const char *name = AliRsnMiniValue::ValueName(type, useMC);
+   TObject *obj = fValues.FindObject(name);
+   if (obj)
+      return fValues.IndexOf(obj);
+   else
+      return -1;
+}
+
+//----------------------------------------------------------------------------------
+AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput(const char *name, AliRsnMiniOutput::EOutputType type, AliRsnMiniOutput::EComputation src)
+{
+//
+// Create a new histogram definition in the task,
+// which is then returned to the user for its configuration
+//
+
+   Int_t n = fHistograms.GetEntries();
+   AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, type, src);
+
+   return newDef;
+}
+
+//----------------------------------------------------------------------------------
+AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput(const char *name, const char *outType, const char *compType)
+{
+//
+// Create a new histogram definition in the task,
+// which is then returned to the user for its configuration
+//
+
+   Int_t n = fHistograms.GetEntries();
+   AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, outType, compType);
+
+   return newDef;
+}
index 2b7e28c..46237e1 100644 (file)
@@ -36,6 +36,7 @@ public:
    virtual ~AliRsnMiniAnalysisTask();
 
    void                UseMC(Bool_t yn = kTRUE)           {fUseMC = yn;}
+   void                UseESDTriggerMask(UInt_t trgMask)     {fTriggerMask = trgMask;}
    void                UseCentrality(const char *type)    {fUseCentrality = kTRUE; fCentralityType = type; fCentralityType.ToUpper();}
    void                SetUseCentralityPatch(Bool_t isAOD049) {fUseAOD049CentralityPatch = isAOD049;}
    void                UseMultiplicity(const char *type)  {fUseCentrality = kFALSE; fCentralityType = type; fCentralityType.ToUpper();}
@@ -78,6 +79,7 @@ private:
 
    Bool_t               fUseMC;           //  use or not MC info
    Int_t                fEvNum;           //! absolute event counter
+   UInt_t               fTriggerMask;   //trigger mask
    Bool_t               fUseCentrality;   //  if true, use centrality for event, otherwise use multiplicity
    TString              fCentralityType;  //  definition used to choose what centrality or multiplicity to use
    Bool_t               fUseAOD049CentralityPatch; //flag to enable AOD049 centrality patch
@@ -107,68 +109,8 @@ private:
    Bool_t               fBigOutput;       // flag if open file for output list
    Int_t                fMixPrintRefresh; // how often info in mixing part is printed
 
-   ClassDef(AliRsnMiniAnalysisTask, 5);   // AliRsnMiniAnalysisTask
+   ClassDef(AliRsnMiniAnalysisTask, 6);   // AliRsnMiniAnalysisTask
 };
 
-inline Int_t AliRsnMiniAnalysisTask::CreateValue(AliRsnMiniValue::EType type, Bool_t useMC)
-{
-//
-// Create a new value in the task,
-// and returns its ID, which is needed for setting up histograms.
-// If that value was already initialized, returns its ID and does not recreate it.
-//
-
-   Int_t valID = ValueID(type, useMC);
-   if (valID >= 0 && valID < fValues.GetEntries()) {
-      AliInfo(Form("Value '%s' is already created in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
-   } else {
-      valID = fValues.GetEntries();
-      AliInfo(Form("Creating value '%s' in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
-      new (fValues[valID]) AliRsnMiniValue(type, useMC);
-   }
-
-   return valID;
-}
-
-inline Int_t AliRsnMiniAnalysisTask::ValueID(AliRsnMiniValue::EType type, Bool_t useMC)
-{
-//
-// Searches if a value computation is initialized
-//
-
-   const char *name = AliRsnMiniValue::ValueName(type, useMC);
-   TObject *obj = fValues.FindObject(name);
-   if (obj)
-      return fValues.IndexOf(obj);
-   else
-      return -1;
-}
-
-inline AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput
-(const char *name, AliRsnMiniOutput::EOutputType type, AliRsnMiniOutput::EComputation src)
-{
-//
-// Create a new histogram definition in the task,
-// which is then returned to the user for its configuration
-//
-
-   Int_t n = fHistograms.GetEntries();
-   AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, type, src);
-
-   return newDef;
-}
-
-inline AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput
-(const char *name, const char *outType, const char *compType)
-{
-//
-// Create a new histogram definition in the task,
-// which is then returned to the user for its configuration
-//
-
-   Int_t n = fHistograms.GetEntries();
-   AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, outType, compType);
 
-   return newDef;
-}
 #endif
index f59f58d..dfd081f 100644 (file)
@@ -28,7 +28,7 @@ void AliRsnMiniEvent::AddParticle(AliRsnMiniParticle copy)
 AliRsnMiniParticle *AliRsnMiniEvent::GetParticle(Int_t i)
 {
 //
-// Return the leading particle
+// Return the particle
 //
 
    if (i < 0 || i > fParticles.GetEntriesFast()) return 0x0;
index 4770f4a..045f3cf 100644 (file)
@@ -6,6 +6,9 @@
 // to allow an event mixing.
 //
 
+#include <TDatabasePDG.h>
+#include <TParticlePDG.h>
+
 #include "AliRsnDaughter.h"
 #include "AliRsnMiniParticle.h"
 
@@ -50,3 +53,27 @@ void AliRsnMiniParticle::CopyDaughter(AliRsnDaughter *daughter)
       fMotherPDG = daughter->GetMotherPDG();
    }
 }
+
+
+//__________________________________________________________________________________________________
+Double_t AliRsnMiniParticle::Mass()
+{
+   //
+   // return mass of particle
+   //
+
+   TDatabasePDG *db   = TDatabasePDG::Instance();
+   TParticlePDG *part = db->GetParticle(PDG());
+   return part->Mass();
+}
+
+//__________________________________________________________________________________________________
+void AliRsnMiniParticle::Set4Vector(TLorentzVector &v, Float_t mass, Bool_t mc)
+{
+   //
+   // return 4 vector of particle
+   //
+
+   if (mass<0.0) mass = Mass();
+   v.SetXYZM(Px(mc), Py(mc), Pz(mc),mass);
+}
index 332a838..d5abb51 100644 (file)
@@ -31,6 +31,7 @@ public:
    Float_t       &Pz(Bool_t mc)              {return (mc ? fPsim[2] : fPrec[2]);}
    Short_t       &PDG()                      {return fPDG;}
    Short_t        PDGAbs()                   {return TMath::Abs(fPDG);}
+   Double_t       Mass();
    Int_t         &Mother()                   {return fMother;}
    Short_t       &MotherPDG()                {return fMotherPDG;}
    UShort_t      &CutBits()                  {return fCutBits;}
@@ -38,7 +39,7 @@ public:
    void           SetCutBit(Int_t i)         {UShort_t bit = 1 << i; fCutBits |=   bit;}
    void           ClearCutBit(Int_t i)       {UShort_t bit = 1 << i; fCutBits &= (~bit);}
 
-   void           Set4Vector(TLorentzVector &v, Float_t mass, Bool_t mc) {v.SetXYZM(Px(mc), Py(mc), Pz(mc), mass);}
+   void           Set4Vector(TLorentzVector &v, Float_t mass=-1.0, Bool_t mc=kFALSE);
    void           CopyDaughter(AliRsnDaughter *daughter);
 
 private:
index 0b176e7..c3db068 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "AliRsnMiniPair.h"
 #include "AliRsnMiniEvent.h"
+#include "AliRsnMiniParticle.h"
 
 #include "AliRsnMiniValue.h"
 
@@ -111,10 +112,10 @@ const char *AliRsnMiniValue::TypeName(EType type)
       case kDipAngle:     return "DipAngle";
       case kCosThetaStar: return "CosThetaStar";
       case kAngleLeading: return "AngleToLeading";
-      case kFirstDaughterPt: return "FirstDaughterPt";  
-      case kSecondDaughterPt: return "SecondDaughterPt";  
-      case kFirstDaughterP: return "FirstDaughterP";  
-      case kSecondDaughterP: return "SecondDaughterP";  
+      case kFirstDaughterPt: return "FirstDaughterPt";
+      case kSecondDaughterPt: return "SecondDaughterPt";
+      case kFirstDaughterP: return "FirstDaughterP";
+      case kSecondDaughterP: return "SecondDaughterP";
       default:            return "Undefined";
    }
 }
@@ -138,8 +139,9 @@ Float_t AliRsnMiniValue::Eval(AliRsnMiniPair *pair, AliRsnMiniEvent *event)
    // the computation is not doable due to any problem
    // (not initialized support object, wrong values, risk of floating point errors)
    // the method returng kFALSE and sets the computed value to a meaningless number
-   Double_t p3[3]={0.,0.,0.};
+   Double_t p3[3]= {0.,0.,0.};
+   AliRsnMiniParticle *l;
+   TLorentzVector v;
    switch (fType) {
          // ---- event values -------------------------------------------------------------------------
       case kVz:
@@ -149,6 +151,11 @@ Float_t AliRsnMiniValue::Eval(AliRsnMiniPair *pair, AliRsnMiniEvent *event)
       case kPlaneAngle:
          return event->Angle();
       case kLeadingPt:
+         l = event->LeadingParticle();
+         if (l) {
+            l->Set4Vector(v,-1.0,fUseMCInfo);
+            return v.Pt();
+         }
          return 0.0;
       case kPt:
          return pair->Pt(fUseMCInfo);
@@ -171,17 +178,27 @@ Float_t AliRsnMiniValue::Eval(AliRsnMiniPair *pair, AliRsnMiniEvent *event)
       case kCosThetaStar:
          return pair->CosThetaStar(fUseMCInfo);
       case kAngleLeading:
-         AliWarning("This method is not yet implemented");
-        return 1E20;
+         l = event->LeadingParticle();
+         if (l) {
+            l->Set4Vector(v,-1.0,fUseMCInfo);
+            Double_t angle = v.Phi() - pair->Sum(fUseMCInfo).Phi();
+
+            //return angle w.r.t. leading particle in the range -pi/2, 3/2pi
+            while (angle >= 1.5 * TMath::Pi()) angle -= 2 * TMath::Pi();
+            while (angle < -0.5 * TMath::Pi()) angle += 2 * TMath::Pi();
+            return angle;
+         }
+//         AliWarning("This method is not yet implemented");
+         return 1E20;
       case kFirstDaughterPt:
          return pair->DaughterPt(0,fUseMCInfo);
       case kSecondDaughterPt:
          return pair->DaughterPt(1,fUseMCInfo);
       case kFirstDaughterP:
-        pair->DaughterPxPyPz(0,fUseMCInfo, p3);
+         pair->DaughterPxPyPz(0,fUseMCInfo, p3);
          return TMath::Sqrt(p3[0]*p3[0]+p3[1]*p3[1]+p3[2]*p3[2]);
       case kSecondDaughterP:
-        pair->DaughterPxPyPz(1,fUseMCInfo, p3);
+         pair->DaughterPxPyPz(1,fUseMCInfo, p3);
          return TMath::Sqrt(p3[0]*p3[0]+p3[1]*p3[1]+p3[2]*p3[2]);
       default:
          AliError("Invalid value type");
index ef43230..997317e 100644 (file)
@@ -11,9 +11,9 @@ AliRsnMiniAnalysisTask * AddTaskKStar_pAPileUp
    Bool_t      isMC,
    Bool_t      isPP,
    TString     outNameSuffix = "tof2s_pileup",
-   Bool_t      rmFirstEvtChunk = kFALSE,
+   Bool_t      rmFirstEvtChunk = kTRUE,
    Bool_t      rejectPileUp = kTRUE,
-   Int_t       MinPlpContribSPD = 1,
+   Int_t       MinPlpContribSPD = 5,
    Bool_t      useMVPileUpSelection = kFALSE,
    Int_t       MinPlpContribMV = 5,
    Int_t       aodFilterBit = 5,
@@ -48,6 +48,9 @@ AliRsnMiniAnalysisTask * AddTaskKStar_pAPileUp
    // create the task and configure 
    TString taskName = Form("TOFKStar%s%s_%i%i", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), (Int_t)cutPiCandidate,(Int_t)cutKaCandidate );
    AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
+   //task->UseESDTriggerMask(AliVEvent::kINT7); //ESD
+   task->SelectCollisionCandidates(AliVEvent::kINT7); //AOD
+   
    if (isPP) 
      task->UseMultiplicity("QUALITY");
    else