Updated macros for D0 (Massimo) + new macros for L* analysis in pp (Serguei)
authorfbellini <fbellini@cern.ch>
Thu, 20 Feb 2014 13:06:35 +0000 (14:06 +0100)
committerfbellini <fbellini@cern.ch>
Thu, 20 Feb 2014 13:06:35 +0000 (14:06 +0100)
PWGLF/RESONANCES/macros/mini/AddAnalysisTaskD0.C
PWGLF/RESONANCES/macros/mini/AddTaskLStarPP.C [new file with mode: 0644]
PWGLF/RESONANCES/macros/mini/ConfigD0.C
PWGLF/RESONANCES/macros/mini/ConfigLStarPP.C [new file with mode: 0644]
PWGLF/RESONANCES/macros/mini/ConfigLStarPP_MC.C [new file with mode: 0644]

index 28ead9a..1bb4aa9 100644 (file)
@@ -33,7 +33,7 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0
    Int_t       nmix = 5,
    Double_t    minYlab =  -0.5,
    Double_t    maxYlab =  0.5,
-   Double_t    dcaProduct = 1E-4,
+   Double_t    dcaProduct = -1E-4,
    Float_t     maxDiffVzMix = 1.0,
    Float_t     maxDiffMultMix = 10.0,
    Float_t     maxDiffAngleMixDeg = 20.0,
@@ -55,7 +55,7 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0
    } 
 
    // create the task and configure 
-   TString taskName = Form("D0%s%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.5f", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), cutV, NTPCcluster, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, trackDCAcutMax, trackDCAcutMin, dcaProduct);
+   TString taskName = Form("D0%s%s_%.1f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.4f_%.5f_%.2f", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), cutV, NTPCcluster, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, trackDCAcutMax, trackDCAcutMin, dcaProduct, minpt);
    AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
    if (!isMC && !isPP){
      Printf(Form("========== SETTING USE CENTRALITY PATCH AOD049 : %s", (aodN==49)? "yes" : "no"));
@@ -147,12 +147,13 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0
    cutsPairY->ShowCuts();
    cutsPairY->PrintSetInfo();
    
-   AliRsnCutSet *cutsPairDCAp = new AliRsnCutSet("pairCutsDCAp", AliRsnTarget::kMother);
+   /*AliRsnCutSet *cutsPairDCAp = new AliRsnCutSet("pairCutsDCAp", AliRsnTarget::kMother);
    cutsPairDCAp->AddCut(cutDCAproduct);
    cutsPairDCAp->UseMonitor(kTRUE);
    cutsPairDCAp->SetCutScheme("setPairD0_DCAp");
    cutsPairDCAp->ShowCuts();
-   cutsPairDCAp->PrintSetInfo();
+   cutsPairDCAp->PrintSetInfo();*/
+  
    
    
    //
@@ -163,7 +164,7 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0
        Printf("========================== MC analysis - PID cuts not used");
    } else 
      Printf("========================== DATA analysis - PID cuts used");
-   if (!ConfigD0(task, isPP, isMC, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, aodFilterBit, trackDCAcutMax, trackDCAcutMin, NTPCcluster, minpt, "", cutsPairY, cutsPairDCAp)) return 0x0;
+   if (!ConfigD0(task, isPP, isMC, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, aodFilterBit, trackDCAcutMax, trackDCAcutMin, NTPCcluster, minpt, "", cutsPairY)) return 0x0;
    
    //
    // -- CONTAINERS --------------------------------------------------------------------------------
diff --git a/PWGLF/RESONANCES/macros/mini/AddTaskLStarPP.C b/PWGLF/RESONANCES/macros/mini/AddTaskLStarPP.C
new file mode 100644 (file)
index 0000000..4f0d947
--- /dev/null
@@ -0,0 +1,176 @@
+// 
+// General macro to configure the RSN analysis task.
+// It calls all configs desired by the user, by means
+// of the boolean switches defined in the first lines.
+// ---
+// Inputs:
+//  1) flag to know if running on MC or data
+//  2) path where all configs are stored
+// ---
+// Returns:
+//  kTRUE  --> initialization successful
+//  kFALSE --> initialization failed (some config gave errors)
+//
+
+Bool_t usePhi   = 0;
+Bool_t useKStar = 0;
+Bool_t useLStar = 1;
+
+ //set to kTRUE if using data AOD049 - needed to enable centrality patch
+Bool_t isAOD049 = 0;
+
+AliRsnMiniAnalysisTask * AddTaskLStarPP
+(
+   Bool_t      isMC,
+   Bool_t      isPP,
+   const char *path,
+   Int_t       nmix = 0
+)
+{  
+   //
+   // -- INITIALIZATION ----------------------------------------------------------------------------
+   //
+   
+   // retrieve analysis manager
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+
+   // create the task and connect with physics selection
+   AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask("RSN", isMC);
+   if (isAOD049 && !isMC && !isPP){
+     task->SetUseCentralityPatch(kTRUE);
+   }
+//S.K.
+//   task->SelectCollisionCandidates(AliVEvent::kMB);
+   task->SelectCollisionCandidates(AliVEvent::kINT7);  // for pPb
+
+   mgr->AddTask(task);
+   
+   // settings
+   if (isPP) 
+      task->UseMultiplicity("QUALITY");
+   else
+//      task->UseCentrality("V0M");
+      task->UseCentrality("V0A");  // for pPb
+   
+   // set mixing
+   task->UseContinuousMix();
+   //task->UseBinnedMix();
+   task->SetNMix(nmix);
+   task->SetMaxDiffVz(1.0);
+   task->SetMaxDiffMult(10.0);
+   task->SetMaxDiffAngle(1E20);
+   
+   //
+   // -- EVENT CUTS (same for all configs) ---------------------------------------------------------
+   //
+   
+   // cut on primary vertex:
+   // - 2nd argument --> |Vz| range
+   // - 3rd argument --> minimum required number of contributors
+   // - 4th argument --> tells if TPC stand-alone vertexes must be accepted
+   AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 10.0, 0, kFALSE);
+   
+   // set the check for pileup
+//   if (isPP) cutVertex->SetCheckPileUp(kTRUE);
+//S.K.
+
+   //set check for pileup in 2013
+   Bool_t      rmFirstEvtChunk = kTRUE; //needed for pA 2013
+   Bool_t      rejectPileUp = kTRUE; //best if used, for pA 2013
+   Int_t       MinPlpContribSPD = 5; //default value if used
+   Bool_t      useMVPileUpSelection = kFALSE; //
+   Bool_t      useVtxCut2013pA = kTRUE; //default use recommended 2013 pA vtx selection
+   AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", rmFirstEvtChunk, rejectPileUp);
+   cutEventUtils->SetUseVertexSelection2013pA(useVtxCut2013pA);
+   cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
+      
+   // define and fill cut set
+   AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
+//S.K.
+   eventCuts->AddCut(cutEventUtils);
+   eventCuts->AddCut(cutVertex);
+//S.K.   eventCuts->SetCutScheme(cutVertex->GetName());
+   eventCuts->SetCutScheme(Form("%s&%s", cutEventUtils->GetName(), cutVertex->GetName()));
+   
+   // set cuts in task
+   task->SetEventCuts(eventCuts);
+   
+   //
+   // -- EVENT-ONLY COMPUTATIONS -------------------------------------------------------------------
+   //
+   
+   // initialize value computation for multiplicity/centrality
+   // second argument tells if the value must be taken from MC
+   // (when this can be done)
+   // after creating the value, the task returns its ID
+   Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
+   
+   // create event-related output
+   AliRsnMiniOutput *outMult = task->CreateOutput("eventMult", "HIST", "EVENT");
+   // set axes, by passing value ID and defining the binning
+   if (isPP) 
+      outMult->AddAxis(multID, 300, 0.0, 300.0);
+   else
+//      outMult->AddAxis(multID, 100, 0.0, 100.0);
+      outMult->AddAxis(multID, 10, 0.0, 100.0);
+   
+   //
+   // -- PAIR CUTS (common to all resonances) ------------------------------------------------------
+   //
+   
+   AliRsnCutMiniPair *cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange);
+//   cutY->SetRangeD(-0.5, 0.5);
+//   cutY->SetRangeD(0.465, 0.965);
+   cutY->SetRangeD(-0.465, 0.035);
+   
+   AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
+   cutsPair->AddCut(cutY);
+   cutsPair->SetCutScheme(cutY->GetName());
+   
+   //
+   // -- CONFIGS -----------------------------------------------------------------------------------
+   //
+   
+   if (usePhi) {
+      if (isPP) {
+         gROOT->LoadMacro(Form("%s/ConfigPhi.C", path));
+         if (!ConfigPhi(task, isMC, "", cutsPair)) return 0x0;
+      } else {
+         gROOT->LoadMacro(Form("%s/ConfigPhiPbPb.C", path));
+         if (!ConfigPhiPbPb(task, isMC, "", cutsPair)) return 0x0;
+      }
+      if (isMC) {
+         gROOT->LoadMacro(Form("%s/ConfigPhiMC.C", path));
+         if (!ConfigPhiMC(task, isPP, "", cutsPair)) return 0x0;
+      }
+   }
+   
+   if (useKStar) {
+      gROOT->LoadMacro(Form("%s/ConfigKStar.C", path));
+      if (!ConfigKStar(task, isMC, "", cutsPair)) return 0x0;
+      if (isMC) {
+         gROOT->LoadMacro(Form("%s/ConfigKStarMC.C", path));
+         if (!ConfigKStarMC(task, isPP, "", cutsPair)) return 0x0;
+      }
+   }
+   
+   if (useLStar) {
+      gROOT->LoadMacro(Form("%s/ConfigLStarPP.C", path));
+      if (!ConfigLStarPP(task, isMC, "", cutsPair)) return 0x0;
+      if (isMC) {
+         gROOT->LoadMacro(Form("%s/ConfigLStarPP_MC.C", path));
+         if (!ConfigLStarPP_MC(task, isPP, "", cutsPair)) return 0x0;
+      }
+   }
+   
+   //
+   // -- CONTAINERS --------------------------------------------------------------------------------
+   //
+   
+   const char *file = AliAnalysisManager::GetCommonFileName();
+   AliAnalysisDataContainer *output = mgr->CreateContainer("RsnOut", TList::Class(), AliAnalysisManager::kOutputContainer, file);
+   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(task, 1, output);
+
+   return task;
+}
index 53893dc..768f5a1 100644 (file)
@@ -23,8 +23,7 @@ Bool_t ConfigD0
    Int_t                  NTPCcluster = 70,
    Double_t                minpt = 0.15, 
    const char            *suffix,
-   AliRsnCutSet           *cutsPairY,
-   AliRsnCutSet           *cutsPairDCAp
+   AliRsnCutSet           *cutsPairY
 )
 {
    // manage suffix
@@ -156,7 +155,6 @@ Bool_t ConfigD0
       out->SetMotherMass(mass[i]);
       // pair cuts
       out->SetPairCuts(cutsPairY);
-      out->SetPairCuts(cutsPairDCAp);
 
       // axis X: invmass (or resolution)
       if (useIM[i]) 
@@ -167,26 +165,26 @@ Bool_t ConfigD0
       out->AddAxis(ptID, 100, 0.0, 10.0);
       
       // axiz Z: rapidity
-      out->AddAxis(yID, 100, -1, 1);
+      //out->AddAxis(yID, 100, -1, 1);
       
       // more axis: daughter's dca product
-      out->AddAxis(dcapID, 2000, -0.001, 0.001);
+      out->AddAxis(dcapID, 100, -0.001, 0);
       
-      out->AddAxis(daug1ptID, 1500, 0.0, 15.0);
+      //out->AddAxis(daug1ptID, 150, 0.0, 15.0);
      
-      out->AddAxis(daug2ptID, 1500, 0.0, 15.0);
+      //out->AddAxis(daug2ptID, 150, 0.0, 15.0);
       
-      out->AddAxis(daug1dcaID, 1000, -1.0, 1.0);
+      //out->AddAxis(daug1dcaID, 200, -1.0, 1.0);
       
-      out->AddAxis(daug2dcaID, 1000, -1.0, 1.0);
+      //out->AddAxis(daug2dcaID, 200, -1.0, 1.0);
       
       
       if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
    }
    
    
-   AddMonitorOutput_PairY(cutsPairY->GetMonitorOutput());
-   AddMonitorOutput_PairDCAProduct(cutsPairDCAp->GetMonitorOutput());
+   /*AddMonitorOutput_PairY(cutsPairY->GetMonitorOutput());
+   AddMonitorOutput_PairDCAProduct(cutsPairDCAp->GetMonitorOutput());*/
    
    AddMonitorOutput_PionEta(cutSetPi->GetMonitorOutput());
    AddMonitorOutput_PionY(cutSetPi->GetMonitorOutput());
@@ -222,7 +220,7 @@ Bool_t ConfigD0
    // binnings
    out->AddAxis(imID, 800, 1.4, 2.2);
    out->AddAxis(ptID, 100, 0.0, 10.0);
-   out->AddAxis(yID, 100, -1, 1);
+   //out->AddAxis(yID, 100, -1, 1);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
    
@@ -238,7 +236,7 @@ Bool_t ConfigD0
    // binnings
    out->AddAxis(imID, 800, 1.4, 2.2);
    out->AddAxis(ptID, 100, 0.0, 10.0);
-   out->AddAxis(yID, 100, -1, 1);
+   //out->AddAxis(yID, 100, -1, 1);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
    
@@ -248,7 +246,7 @@ Bool_t ConfigD0
    return kTRUE;
 }
 
-void AddMonitorOutput_PairY(TObjArray *mon=0,TString opt="",AliRsnLoopPair *pairy=0)
+/*void AddMonitorOutput_PairY(TObjArray *mon=0,TString opt="",AliRsnLoopPair *pairy=0)
 {
 
    // Pair Y
@@ -280,7 +278,7 @@ void AddMonitorOutput_PairDCAProduct(TObjArray *mon=0,TString opt="",AliRsnLoopP
    if (mon) mon->Add(outMonitorPairDCAProduct);
    if (pairdcaproduct) pairdcaproduct->AddOutput(outMonitorPairDCAProduct);
   
-}
+}*/
 
 
 void AddMonitorOutput_PionEta(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *peta=0)
diff --git a/PWGLF/RESONANCES/macros/mini/ConfigLStarPP.C b/PWGLF/RESONANCES/macros/mini/ConfigLStarPP.C
new file mode 100644 (file)
index 0000000..1479dd4
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// *** Configuration script for phi->KK analysis with 2010 runs ***
+// 
+// A configuration script for RSN package needs to define the followings:
+//
+// (1) decay tree of each resonance to be studied, which is needed to select
+//     true pairs and to assign the right mass to all candidate daughters
+// (2) cuts at all levels: single daughters, tracks, events
+// (3) output objects: histograms or trees
+//
+Bool_t ConfigLStarPP
+(  
+   AliRsnMiniAnalysisTask *task, 
+   Bool_t                  isMC, 
+   const char             *suffix,
+   AliRsnCutSet           *cutsPair
+)
+{
+   // manage suffix
+   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
+   
+   // 
+   // -- Define track cuts -------------------------------------------------------------------------
+   //
+   
+   // integrated pion cut
+   AliRsnCutDaughterLStar2010 *cutK = new AliRsnCutDaughterLStar2010("cutKaonForLStar", AliPID::kKaon);
+   // cut set
+   AliRsnCutSet *cutSetK = new AliRsnCutSet("setPionForLStar", AliRsnTarget::kDaughter);
+   cutSetK->AddCut(cutK);
+   cutSetK->SetCutScheme(cutK->GetName());
+   // add to task
+   Int_t icutK = task->AddTrackCuts(cutSetK);
+   
+   // integrated kaon cut
+   AliRsnCutDaughterLStar2010 *cutP = new AliRsnCutDaughterLStar2010("cutProtonForLStar", AliPID::kProton);
+   // cut set
+   AliRsnCutSet *cutSetP = new AliRsnCutSet("setKaonForLStar", AliRsnTarget::kDaughter);
+   cutSetP->AddCut(cutP);
+   cutSetP->SetCutScheme(cutP->GetName());
+   // add to task
+   Int_t icutP = task->AddTrackCuts(cutSetP);
+   
+   //
+   // -- Values ------------------------------------------------------------------------------------
+   //
+   
+   /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
+   /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
+   /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
+   /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
+   
+   //
+   // -- Create all needed outputs -----------------------------------------------------------------
+   //
+   
+   // use an array for more compact writing, which are different on mixing and charges
+   // [0] = unlike
+   // [1] = mixing
+   // [2] = like ++
+   // [3] = like --
+   Bool_t  use     [10] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  isMC   ,   isMC   ,  isMC   ,   isMC   };
+   Bool_t  useIM   [10] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  1      ,   1      ,  0      ,   0      };
+   TString name    [10] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "LikePP", "LikeMM", "Trues1",  "Trues2", "Res1"  ,  "Res2"  };
+   TString comp    [10] = {"PAIR"   , "PAIR"   , "MIX"    , "MIX"    , "PAIR"  , "PAIR"  , "TRUE"  ,  "TRUE"  , "TRUE"  ,  "TRUE"  };
+   //TString output  [10] = {"HIST" , "HIST"   , "HIST"   , "HIST"   , "HIST"  , "HIST"  , "HIST"  ,  "HIST"  , "HIST"  ,  "HIST"  };
+   TString output  [10] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE", "SPARSE", "SPARSE",  "SPARSE", "SPARSE",  "SPARSE"};
+   Int_t   pdgCode [10] = { 3124    ,  -3124    ,  3124    , -3124    ,  3124   ,  3124   ,  3124   ,  -3124   ,  3124   ,  -3124  };
+   Char_t  charge1 [10] = {'+'      , '-'      , '+'      , '-'      , '+'     , '-'     , '+'     ,  '-'     , '+'     ,  '-'     };
+   Char_t  charge2 [10] = {'-'      , '+'      , '-'      , '+'      , '+'     , '-'     , '-'     ,  '+'     , '-'     ,  '+'     };
+   Int_t   cutID1  [10] = { icutP   ,  icutP   ,  icutP   ,  icutP   ,  icutP  ,  icutP  ,  icutP  ,   icutP  ,  icutP  ,   icutP  };
+   Int_t   cutID2  [10] = { icutK   ,  icutK   ,  icutK   ,  icutK   ,  icutK  ,   icutK ,   icutK ,   icutK  ,  icutK  ,   icutK  };
+   for (Int_t i = 0; i < 10; i++) {
+      if (!use[i]) continue;
+      // create output
+      AliRsnMiniOutput *out = task->CreateOutput(Form("LStar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
+      // selection settings
+      out->SetCutID(0, cutID1[i]);
+      out->SetCutID(1, cutID2[i]);
+      out->SetDaughter(0, AliRsnDaughter::kProton);
+      out->SetDaughter(1, AliRsnDaughter::kKaon);
+      out->SetCharge(0, charge1[i]);
+      out->SetCharge(1, charge2[i]);
+      out->SetMotherPDG(pdgCode[i]);
+      out->SetMotherMass(1.520);
+      // pair cuts
+      out->SetPairCuts(cutsPair);
+      // axis X: invmass (or resolution)
+      if (useIM[i]) 
+         out->AddAxis(imID, 80, 1.4, 1.8);
+      else
+         out->AddAxis(resID, 200, -0.02, 0.02);
+      // axis Y: transverse momentum
+//S.K. out->AddAxis(ptID, 100, 0.0, 10.0);
+      out->AddAxis(ptID, 100, 0.0, 10.0);
+      //S.K. axis Z: centrality 
+      out->AddAxis(centID, 10, 0.0, 100.0);
+   }
+   
+   return kTRUE;
+}
diff --git a/PWGLF/RESONANCES/macros/mini/ConfigLStarPP_MC.C b/PWGLF/RESONANCES/macros/mini/ConfigLStarPP_MC.C
new file mode 100644 (file)
index 0000000..862143f
--- /dev/null
@@ -0,0 +1,112 @@
+//
+// *** Configuration script for phi->KK analysis with 2010 runs ***
+// 
+// A configuration script for RSN package needs to define the followings:
+//
+// (1) decay tree of each resonance to be studied, which is needed to select
+//     true pairs and to assign the right mass to all candidate daughters
+// (2) cuts at all levels: single daughters, tracks, events
+// (3) output objects: histograms or trees
+//
+Bool_t ConfigLStarPP_MC
+(
+   AliRsnMiniAnalysisTask *task, 
+   Bool_t                  isPP, 
+   const char             *suffix,
+   AliRsnCutSet           *cutsPair
+)
+{
+   // manage suffix
+   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
+   
+   // 
+   // -- Define track cuts -------------------------------------------------------------------------
+   //
+   
+   /*** EMPTY FOR TRUE PAIRS COMPUTATION ***/
+   
+   //
+   // -- Values ------------------------------------------------------------------------------------
+   //
+   
+   /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
+   /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
+   /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
+   
+   //
+   // -- Create all needed outputs -----------------------------------------------------------------
+   //
+   
+   TString mode = "SPARSE";
+//   if (!isPP) mode = "SPARSE";
+   
+   // create output
+   AliRsnMiniOutput *out = task->CreateOutput(Form("LStar_TrueMC1%s", suffix), mode.Data(), "MOTHER");
+   // selection settings
+   out->SetDaughter(0, AliRsnDaughter::kProton);
+   out->SetDaughter(1, AliRsnDaughter::kKaon);
+      out->SetCharge(0, '+');
+      out->SetCharge(1, '-');
+   out->SetMotherPDG(3124);
+   out->SetMotherMass(1.520);
+   // pair cuts
+   out->SetPairCuts(cutsPair);
+   // binnings
+   out->AddAxis(imID,  80, 1.0, 2.0);
+//S.K.   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(ptID, 100, 0.0, 10.0);
+//S.K.   if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
+   out->AddAxis(centID, 10, 0.0, 100.0);
+   
+   // create output
+   AliRsnMiniOutput *out = task->CreateOutput(Form("LStar_TrueMC2%s", suffix), mode.Data(), "MOTHER");
+   // selection settings
+   out->SetDaughter(0, AliRsnDaughter::kProton);
+   out->SetDaughter(1, AliRsnDaughter::kKaon);
+   out->SetCharge(0, '-');
+   out->SetCharge(1, '+');
+   out->SetMotherPDG(-3124);
+   out->SetMotherMass(1.520);
+   // pair cuts
+   out->SetPairCuts(cutsPair);
+   // binnings
+   out->AddAxis(imID,  100, 1.0, 2.0);
+//S.K.   out->AddAxis(ptID, 100, 0.0, 10.0);
+   out->AddAxis(ptID, 100, 0.0, 10.0);
+//S.K.   if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
+   out->AddAxis(centID, 10, 0.0, 100.0);
+     
+    // create output
+   AliRsnMiniOutput *outm = task->CreateOutput(Form("Ls_Mother"), mode.Data(), "MOTHER");
+    outm->SetDaughter(0, AliRsnDaughter::kProton);
+    outm->SetDaughter(1, AliRsnDaughter::kKaon);
+    outm->SetMotherPDG(3124);
+    outm->SetMotherMass(1.520);
+    // pair cuts
+    outm->SetPairCuts(cutsPair);
+    // binnings
+    outm->AddAxis(imID, 100, 1.0, 2.0);
+    outm->AddAxis(ptID, 100, 0.0, 10.0);
+    if (!isPP){
+      outm->AddAxis(centID, 100, 0.0, 100.0);
+    }   else    { 
+      outm->AddAxis(centID, 400, 0.0, 400.0);
+    }
+  
+ AliRsnMiniOutput *outm = task->CreateOutput(Form("Ls_AntiMother"), mode.Data(), "MOTHER");
+    outm->SetDaughter(0, AliRsnDaughter::kProton);
+    outm->SetDaughter(1, AliRsnDaughter::kKaon);
+    outm->SetMotherPDG(-3124);
+    outm->SetMotherMass(1.520);
+    // pair cuts
+    outm->SetPairCuts(cutsPair);
+    // binnings
+    outm->AddAxis(imID, 100, 1.0, 2.0);
+    outm->AddAxis(ptID, 100, 0.0, 10.0);
+    if (!isPP){
+      outm->AddAxis(centID, 100, 0.0, 100.0);
+    }   else    { 
+      outm->AddAxis(centID, 400, 0.0, 400.0);
+    }
+   return kTRUE;
+}