ROOT logo
/***************************************************************************
            
/
// 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 ConfigLambdaStarPbPb
(  
    AliRsnMiniAnalysisTask *task, 
    Bool_t                 isMC , 
    Bool_t                 isPP ,
    const char             *suffix,
    AliRsnCutSet           *cutsPair,
    Int_t                  aodFilterBit = 5,
    AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPrCandidate = AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010,
    AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010,
    Float_t                nsigmaPr = 2.0,
    Float_t                nsigmaKa = 2.0,
    Bool_t                 enableMonitor = kTRUE,
    Bool_t                 IsMcTrueOnly = kFALSE,
    Int_t                  aodN = 0
)
{
  // manage suffix
  if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
  
  // set daughter cuts
  AliRsnCutSetDaughterParticle * cutSetQ;
  AliRsnCutSetDaughterParticle * cutSetPr;
  AliRsnCutSetDaughterParticle * cutSetK;

  cutSetQ  = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kKaon, -1.0, aodFilterBit);
  cutSetPr = new AliRsnCutSetDaughterParticle(Form("cutProtonTPCPbPb_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit);
  cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutKaonTPCPbPb_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);

  Int_t iCutQ = task->AddTrackCuts(cutSetQ);
  Int_t iCutPr = task->AddTrackCuts(cutSetPr);
  Int_t iCutK = task->AddTrackCuts(cutSetK);
  
  if(enableMonitor){
    Printf("======== Monitoring cut AliRsnCutSetDaughterParticle enabled");
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
    AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput());
    AddMonitorOutput(isMC, cutSetPr->GetMonitorOutput());
    AddMonitorOutput(isMC, cutSetK->GetMonitorOutput());
  }  
  
  // -- 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);
  /* pseudorapidity   */ Int_t etaID  = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
  /* rapidity         */ Int_t yID    = task->CreateValue(AliRsnMiniValue::kY, 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] = { !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly ,  !IsMcTrueOnly, !IsMcTrueOnly,  isMC   ,   isMC   ,  isMC   ,   isMC   };
  Bool_t  useIM   [10] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  1      ,   1      ,  0      ,   0      };
  TString name    [10] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM",  "TruesMP", "ResPM"  ,  "ResMP"  };
  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"  };
  Char_t  charge1 [10] = {'+'      , '-'      , '+'      , '-'      , '+'     , '-'     , '+'     ,  '-'     , '+'     ,  '-'     };
  Char_t  charge2 [10] = {'-'      , '+'      , '-'      , '+'      , '+'     , '-'     , '-'     ,  '+'     , '-'     ,  '+'     };
  Int_t   cutID1  [10] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK  ,  iCutK  ,   iCutK  ,  iCutK  ,   iCutK  };
  Int_t cutID2    [10] = { iCutPr  ,  iCutPr  ,  iCutPr  ,  iCutPr  ,iCutPr  ,  iCutPr  , iCutPr  ,  iCutPr  ,  iCutPr  ,  iCutPr };
  
  for (Int_t i = 0; i < 10; i++) {
    if (!use[i]) continue;
    AliRsnMiniOutput *out = task->CreateOutput(Form("lstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
    out->SetCutID(0, cutID1[i]);
    out->SetCutID(1, cutID2[i]);
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kProton);
    out->SetCharge(0, charge1[i]);
    out->SetCharge(1, charge2[i]);
    out->SetMotherPDG(3124);
    out->SetMotherMass(1.520);
    out->SetPairCuts(cutsPair);

    // axis X: invmass (or resolution)
    if (useIM[i]) 
      out->AddAxis(imID, 900, 1.3, 2.2);
    //else
    //out->AddAxis(resID, 200, -0.02, 0.02);
    
    // axis Y: transverse momentum
    out->AddAxis(ptID, 500, 0.0, 50.0);
    
    // axis Z: centrality-multiplicity
    if (!isPP)
      out->AddAxis(centID, 100, 0.0, 100.0);
    else 
      out->AddAxis(centID, 400, 0.0, 400.0);
    
    // axis W: pseudorapidity
    //    out->AddAxis(etaID, 20, -1.0, 1.0);
    // axis J: rapidity
    // out->AddAxis(yID, 10, -0.5, 0.5);
    
  }   
  return kTRUE;
}
 ConfigLambdaStarPbPb.C:1
 ConfigLambdaStarPbPb.C:2
 ConfigLambdaStarPbPb.C:3
 ConfigLambdaStarPbPb.C:4
 ConfigLambdaStarPbPb.C:5
 ConfigLambdaStarPbPb.C:6
 ConfigLambdaStarPbPb.C:7
 ConfigLambdaStarPbPb.C:8
 ConfigLambdaStarPbPb.C:9
 ConfigLambdaStarPbPb.C:10
 ConfigLambdaStarPbPb.C:11
 ConfigLambdaStarPbPb.C:12
 ConfigLambdaStarPbPb.C:13
 ConfigLambdaStarPbPb.C:14
 ConfigLambdaStarPbPb.C:15
 ConfigLambdaStarPbPb.C:16
 ConfigLambdaStarPbPb.C:17
 ConfigLambdaStarPbPb.C:18
 ConfigLambdaStarPbPb.C:19
 ConfigLambdaStarPbPb.C:20
 ConfigLambdaStarPbPb.C:21
 ConfigLambdaStarPbPb.C:22
 ConfigLambdaStarPbPb.C:23
 ConfigLambdaStarPbPb.C:24
 ConfigLambdaStarPbPb.C:25
 ConfigLambdaStarPbPb.C:26
 ConfigLambdaStarPbPb.C:27
 ConfigLambdaStarPbPb.C:28
 ConfigLambdaStarPbPb.C:29
 ConfigLambdaStarPbPb.C:30
 ConfigLambdaStarPbPb.C:31
 ConfigLambdaStarPbPb.C:32
 ConfigLambdaStarPbPb.C:33
 ConfigLambdaStarPbPb.C:34
 ConfigLambdaStarPbPb.C:35
 ConfigLambdaStarPbPb.C:36
 ConfigLambdaStarPbPb.C:37
 ConfigLambdaStarPbPb.C:38
 ConfigLambdaStarPbPb.C:39
 ConfigLambdaStarPbPb.C:40
 ConfigLambdaStarPbPb.C:41
 ConfigLambdaStarPbPb.C:42
 ConfigLambdaStarPbPb.C:43
 ConfigLambdaStarPbPb.C:44
 ConfigLambdaStarPbPb.C:45
 ConfigLambdaStarPbPb.C:46
 ConfigLambdaStarPbPb.C:47
 ConfigLambdaStarPbPb.C:48
 ConfigLambdaStarPbPb.C:49
 ConfigLambdaStarPbPb.C:50
 ConfigLambdaStarPbPb.C:51
 ConfigLambdaStarPbPb.C:52
 ConfigLambdaStarPbPb.C:53
 ConfigLambdaStarPbPb.C:54
 ConfigLambdaStarPbPb.C:55
 ConfigLambdaStarPbPb.C:56
 ConfigLambdaStarPbPb.C:57
 ConfigLambdaStarPbPb.C:58
 ConfigLambdaStarPbPb.C:59
 ConfigLambdaStarPbPb.C:60
 ConfigLambdaStarPbPb.C:61
 ConfigLambdaStarPbPb.C:62
 ConfigLambdaStarPbPb.C:63
 ConfigLambdaStarPbPb.C:64
 ConfigLambdaStarPbPb.C:65
 ConfigLambdaStarPbPb.C:66
 ConfigLambdaStarPbPb.C:67
 ConfigLambdaStarPbPb.C:68
 ConfigLambdaStarPbPb.C:69
 ConfigLambdaStarPbPb.C:70
 ConfigLambdaStarPbPb.C:71
 ConfigLambdaStarPbPb.C:72
 ConfigLambdaStarPbPb.C:73
 ConfigLambdaStarPbPb.C:74
 ConfigLambdaStarPbPb.C:75
 ConfigLambdaStarPbPb.C:76
 ConfigLambdaStarPbPb.C:77
 ConfigLambdaStarPbPb.C:78
 ConfigLambdaStarPbPb.C:79
 ConfigLambdaStarPbPb.C:80
 ConfigLambdaStarPbPb.C:81
 ConfigLambdaStarPbPb.C:82
 ConfigLambdaStarPbPb.C:83
 ConfigLambdaStarPbPb.C:84
 ConfigLambdaStarPbPb.C:85
 ConfigLambdaStarPbPb.C:86
 ConfigLambdaStarPbPb.C:87
 ConfigLambdaStarPbPb.C:88
 ConfigLambdaStarPbPb.C:89
 ConfigLambdaStarPbPb.C:90
 ConfigLambdaStarPbPb.C:91
 ConfigLambdaStarPbPb.C:92
 ConfigLambdaStarPbPb.C:93
 ConfigLambdaStarPbPb.C:94
 ConfigLambdaStarPbPb.C:95
 ConfigLambdaStarPbPb.C:96
 ConfigLambdaStarPbPb.C:97
 ConfigLambdaStarPbPb.C:98
 ConfigLambdaStarPbPb.C:99
 ConfigLambdaStarPbPb.C:100
 ConfigLambdaStarPbPb.C:101
 ConfigLambdaStarPbPb.C:102
 ConfigLambdaStarPbPb.C:103
 ConfigLambdaStarPbPb.C:104
 ConfigLambdaStarPbPb.C:105
 ConfigLambdaStarPbPb.C:106
 ConfigLambdaStarPbPb.C:107
 ConfigLambdaStarPbPb.C:108
 ConfigLambdaStarPbPb.C:109
 ConfigLambdaStarPbPb.C:110
 ConfigLambdaStarPbPb.C:111
 ConfigLambdaStarPbPb.C:112
 ConfigLambdaStarPbPb.C:113
 ConfigLambdaStarPbPb.C:114