ROOT logo
/***************************************************************************
  rama.chandra.baral@cern.ch & sarita.sahoo@cern.ch - last modified on 20/08/2014

// *** Configuration script for L*, anti-L*, syst. analysis for pp and p-Pb 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 ConfigLStar
(  
    AliRsnMiniAnalysisTask *task, 
    Bool_t                 isMC, 
    Bool_t                 isPP,
    const char             *suffix,
    AliRsnCutSet           *cutsPair,
    Int_t                  aodFilterBit = 5,
    AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPrCandidate = AliRsnCutSetDaughterParticle::kFastTOFpidNsigma,
    AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kFastTOFpidNsigma,
    Float_t                nsigmaPr = 2.0,
    Float_t                nsigmaKa = 2.0,
    Bool_t                 enableTrkSyst = kFALSE,
    Char_t                 DCAxyFormula[100] = "0.0182+0.035/pt^1.01",
    Double_t               dcazmax = 3.2,
    Double_t               minNcls = 70,
    Double_t               maxX2cls = 4.0,
    Double_t               minCrossedRows = 50.0,
    Double_t               maxClsCrossedRows = 0.8,

    Bool_t                 enableMonitor = kTRUE,
    Bool_t                 IsMcTrueOnly = kFALSE,
    Int_t                  signedPdg = 3124,

    TString                monitorOpt = "",  //Flag for AddMonitorOutput.C e.g."NoSIGN"
    Bool_t                 useCrossedRows = kFALSE,
    AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt,
    Bool_t                 useMixLS = 0
)
{
  // manage suffix
  if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
  
  // set daughter cuts
  AliRsnCutSetDaughterParticle * cutSetQ;
  AliRsnCutSetDaughterParticle * cutSetP;
  AliRsnCutSetDaughterParticle * cutSetK;


  //vary track quality cuts for systematic checks
  if(enableTrkSyst) {
    AliRsnCutTrackQuality * trkQualityCut =  new AliRsnCutTrackQuality("QualityCut");
    
    //trkQualityCut->DisableAll();//disable all cuts, filter bit, pT, eta, and DCAxy cuts will be reset later
    trkQualityCut->SetAODTestFilterBit(aodFilterBit);//reset the filter bit cut 
    trkQualityCut->SetCheckOnlyFilterBit(kFALSE);//tells the cut object to check all other cuts individually,
    trkQualityCut->SetDCARPtFormula(DCAxyFormula);
    trkQualityCut->SetDCAZmax(dcazmax);

    if(useCrossedRows) {
      trkQualityCut->SetMinNCrossedRowsTPC(minCrossedRows, kTRUE);
      trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(maxClsCrossedRows, kTRUE); }
    else trkQualityCut->SetTPCminNClusters(minNcls);

    trkQualityCut->SetTPCmaxChi2(maxX2cls);
    trkQualityCut->SetRejectKinkDaughters(kTRUE);
    //trkQualityCut->SetSPDminNClusters(AliESDtrackCuts::kAny);
    trkQualityCut->SetSPDminNClusters(1);
    trkQualityCut->SetITSminNClusters(0);
    trkQualityCut->SetITSmaxChi2(36);
    trkQualityCut->SetMaxChi2TPCConstrainedGlobal(36);
    trkQualityCut->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);//already in defaults 2011
    trkQualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in defaults 2011
    trkQualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in defaults 2011
    trkQualityCut->SetPtRange(0.15, 20.0);
    trkQualityCut->SetEtaRange(-0.8, 0.8);
    
    trkQualityCut->Print();

    if(isPP) cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2010, AliPID::kPion, -1.0);
    else     cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0);
    cutSetP           = new AliRsnCutSetDaughterParticle(Form("cutP%i_%2.1fsigma",cutPrCandidate, nsigmaPr), trkQualityCut, cutPrCandidate, AliPID::kProton, nsigmaPr);
    cutSetK           = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutKaCandidate, nsigmaKa), trkQualityCut, cutKaCandidate, AliPID::kKaon, nsigmaKa);

  }

  else
    {
      //default cuts 2010 for pp and 2011 for p-Pb
      if(isPP) {
	cutSetQ  = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2010, AliPID::kPion, -1.0, aodFilterBit);
	cutSetP  = new AliRsnCutSetDaughterParticle(Form("cutProton_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit);
	cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutKaon_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
      }
      else {
	cutSetQ  = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit);
	cutSetQ->SetUse2011StdQualityCuts(kTRUE);
	cutSetP = new AliRsnCutSetDaughterParticle(Form("cutProton2011_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit);
	cutSetP->SetUse2011StdQualityCuts(kTRUE);
	cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutKaon2011_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
	cutSetK->SetUse2011StdQualityCuts(kTRUE);
      }
    }
  
  Int_t iCutQ = task->AddTrackCuts(cutSetQ);
  Int_t iCutP = task->AddTrackCuts(cutSetP);
  Int_t iCutK = task->AddTrackCuts(cutSetK);
  
  if (enableMonitor){
    Printf("======== Cut monitoring enabled");
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
    AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput(), monitorOpt.Data());
    AddMonitorOutput(isMC, cutSetP->GetMonitorOutput(), monitorOpt.Data());
    AddMonitorOutput(isMC, cutSetK->GetMonitorOutput(), monitorOpt.Data());
  }  
  
  // -- 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);
  /* 1st daughter pt  */ Int_t fdpt   = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE);
  /* 2nd daughter pt  */ Int_t sdpt   = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE);
  /* 1st daughter p   */ Int_t fdp    = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE);
  /* 2nd daughter p   */ Int_t sdp    = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, 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     [12] = { !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly,!IsMcTrueOnly,!IsMcTrueOnly,!IsMcTrueOnly, isMC    ,  isMC   , isMC   ,  isMC  , useMixLS , useMixLS};
  Bool_t  useIM   [12] = { 1            ,  1           ,  1           ,  1          ,  1          , 1           ,  1      ,   1     , 0      ,   0    , 1        , 1       };
  TString name    [12] = {"UnlikePM"    , "UnlikeMP"   , "MixingPM"   , "MixingMP"  , "LikePP"    , "LikeMM"    ,"TruesPM","TruesMP","ResPM" ,"ResMP" ,"MixingPP","MixingMM"};
  TString comp    [12] = {"PAIR"        , "PAIR"       , "MIX"        , "MIX"       , "PAIR"      , "PAIR"      , "TRUE"  , "TRUE"  , "TRUE" , "TRUE" , "MIX"    ,"MIX"   };
  TString output  [12] = {"SPARSE"      , "SPARSE"     , "SPARSE"     , "SPARSE"    , "SPARSE"    , "SPARSE"    , "SPARSE","SPARSE" ,"SPARSE","SPARSE","SPARSE"  ,"SPARSE"};
  Char_t  charge1 [12] = {'+'           , '-'          , '+'          , '-'         , '+'         , '-'         , '+'     ,  '-'    , '+'    ,  '-'   , '+'      , '-'    };
  Char_t  charge2 [12] = {'-'           , '+'          , '-'          , '+'         , '+'         , '-'         , '-'     ,  '+'    , '-'    ,  '+'   ,'+'       , '-'    };
  Int_t   cutID1  [12] = { iCutP        ,  iCutP       ,  iCutP       ,  iCutP      ,  iCutP      ,  iCutP      ,  iCutP  ,  iCutP  ,  iCutP ,  iCutP , iCutP    , iCutP };
  Int_t   cutID2  [12] = { iCutK        ,  iCutK       ,  iCutK       ,  iCutK      ,  iCutK      ,  iCutK      ,  iCutK  ,  iCutK  ,  iCutK ,  iCutK , iCutK    , iCutK };
  
  //TString output  [10] = {"HIST"   , "HIST"   , "HIST"   , "HIST"   , "HIST"  , "HIST"  , "HIST"  ,  "HIST"  , "HIST"  ,  "HIST"  };

  for (Int_t i = 0; i < 12; 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::kProton);
    out->SetDaughter(1, AliRsnDaughter::kKaon);
    out->SetCharge(0, charge1[i]);
    out->SetCharge(1, charge2[i]);
    out->SetMotherPDG(signedPdg);
    out->SetMotherMass(1.51953);
    out->SetPairCuts(cutsPair);

    // axis X: invmass (or resolution)
    if (useIM[i]) 
      out->AddAxis(imID, 800, 1.4, 2.2);
    else
      out->AddAxis(resID, 200, -0.02, 0.02);
    
    // axis Y: transverse momentum of pair as default - else chosen value
    if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt) {
      out->AddAxis(fdpt, 100, 0.0, 10.0);
      out->AddAxis(sdpt, 100, 0.0, 10.0);  }
    else
      if (yaxisVar==AliRsnMiniValue::kFirstDaughterP) {
	out->AddAxis(fdp, 100, 0.0, 10.0);
	out->AddAxis(sdp, 100, 0.0, 10.0);  }
      else 
	out->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt

    // 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);
    
  }   
  
  if (isMC){   
    // create output
    AliRsnMiniOutput *outm = task->CreateOutput(Form("Lstar_Mother%s", suffix), "SPARSE", "MOTHER");
    outm->SetDaughter(0, AliRsnDaughter::kProton);
    outm->SetDaughter(1, AliRsnDaughter::kKaon);
    outm->SetMotherPDG(signedPdg);
    outm->SetMotherMass(1.51953);
    // pair cuts
    outm->SetPairCuts(cutsPair);
    // binnings
    outm->AddAxis(imID, 800, 1.4, 2.2);

    // axis Y: transverse momentum of pair as default - else chosen value
    if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt) {
      outm->AddAxis(fdpt, 100, 0.0, 10.0);
      outm->AddAxis(sdpt, 100, 0.0, 10.0);  }
    else
      if (yaxisVar==AliRsnMiniValue::kFirstDaughterP) {
	outm->AddAxis(fdp, 100, 0.0, 10.0);
	outm->AddAxis(sdp, 100, 0.0, 10.0);  }
      else 
	outm->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt


    if (!isPP){
      outm->AddAxis(centID, 100, 0.0, 100.0);
    }   else    { 
      outm->AddAxis(centID, 400, 0.0, 400.0);
    }
  }
  return kTRUE;
}
 ConfigLStar.C:1
 ConfigLStar.C:2
 ConfigLStar.C:3
 ConfigLStar.C:4
 ConfigLStar.C:5
 ConfigLStar.C:6
 ConfigLStar.C:7
 ConfigLStar.C:8
 ConfigLStar.C:9
 ConfigLStar.C:10
 ConfigLStar.C:11
 ConfigLStar.C:12
 ConfigLStar.C:13
 ConfigLStar.C:14
 ConfigLStar.C:15
 ConfigLStar.C:16
 ConfigLStar.C:17
 ConfigLStar.C:18
 ConfigLStar.C:19
 ConfigLStar.C:20
 ConfigLStar.C:21
 ConfigLStar.C:22
 ConfigLStar.C:23
 ConfigLStar.C:24
 ConfigLStar.C:25
 ConfigLStar.C:26
 ConfigLStar.C:27
 ConfigLStar.C:28
 ConfigLStar.C:29
 ConfigLStar.C:30
 ConfigLStar.C:31
 ConfigLStar.C:32
 ConfigLStar.C:33
 ConfigLStar.C:34
 ConfigLStar.C:35
 ConfigLStar.C:36
 ConfigLStar.C:37
 ConfigLStar.C:38
 ConfigLStar.C:39
 ConfigLStar.C:40
 ConfigLStar.C:41
 ConfigLStar.C:42
 ConfigLStar.C:43
 ConfigLStar.C:44
 ConfigLStar.C:45
 ConfigLStar.C:46
 ConfigLStar.C:47
 ConfigLStar.C:48
 ConfigLStar.C:49
 ConfigLStar.C:50
 ConfigLStar.C:51
 ConfigLStar.C:52
 ConfigLStar.C:53
 ConfigLStar.C:54
 ConfigLStar.C:55
 ConfigLStar.C:56
 ConfigLStar.C:57
 ConfigLStar.C:58
 ConfigLStar.C:59
 ConfigLStar.C:60
 ConfigLStar.C:61
 ConfigLStar.C:62
 ConfigLStar.C:63
 ConfigLStar.C:64
 ConfigLStar.C:65
 ConfigLStar.C:66
 ConfigLStar.C:67
 ConfigLStar.C:68
 ConfigLStar.C:69
 ConfigLStar.C:70
 ConfigLStar.C:71
 ConfigLStar.C:72
 ConfigLStar.C:73
 ConfigLStar.C:74
 ConfigLStar.C:75
 ConfigLStar.C:76
 ConfigLStar.C:77
 ConfigLStar.C:78
 ConfigLStar.C:79
 ConfigLStar.C:80
 ConfigLStar.C:81
 ConfigLStar.C:82
 ConfigLStar.C:83
 ConfigLStar.C:84
 ConfigLStar.C:85
 ConfigLStar.C:86
 ConfigLStar.C:87
 ConfigLStar.C:88
 ConfigLStar.C:89
 ConfigLStar.C:90
 ConfigLStar.C:91
 ConfigLStar.C:92
 ConfigLStar.C:93
 ConfigLStar.C:94
 ConfigLStar.C:95
 ConfigLStar.C:96
 ConfigLStar.C:97
 ConfigLStar.C:98
 ConfigLStar.C:99
 ConfigLStar.C:100
 ConfigLStar.C:101
 ConfigLStar.C:102
 ConfigLStar.C:103
 ConfigLStar.C:104
 ConfigLStar.C:105
 ConfigLStar.C:106
 ConfigLStar.C:107
 ConfigLStar.C:108
 ConfigLStar.C:109
 ConfigLStar.C:110
 ConfigLStar.C:111
 ConfigLStar.C:112
 ConfigLStar.C:113
 ConfigLStar.C:114
 ConfigLStar.C:115
 ConfigLStar.C:116
 ConfigLStar.C:117
 ConfigLStar.C:118
 ConfigLStar.C:119
 ConfigLStar.C:120
 ConfigLStar.C:121
 ConfigLStar.C:122
 ConfigLStar.C:123
 ConfigLStar.C:124
 ConfigLStar.C:125
 ConfigLStar.C:126
 ConfigLStar.C:127
 ConfigLStar.C:128
 ConfigLStar.C:129
 ConfigLStar.C:130
 ConfigLStar.C:131
 ConfigLStar.C:132
 ConfigLStar.C:133
 ConfigLStar.C:134
 ConfigLStar.C:135
 ConfigLStar.C:136
 ConfigLStar.C:137
 ConfigLStar.C:138
 ConfigLStar.C:139
 ConfigLStar.C:140
 ConfigLStar.C:141
 ConfigLStar.C:142
 ConfigLStar.C:143
 ConfigLStar.C:144
 ConfigLStar.C:145
 ConfigLStar.C:146
 ConfigLStar.C:147
 ConfigLStar.C:148
 ConfigLStar.C:149
 ConfigLStar.C:150
 ConfigLStar.C:151
 ConfigLStar.C:152
 ConfigLStar.C:153
 ConfigLStar.C:154
 ConfigLStar.C:155
 ConfigLStar.C:156
 ConfigLStar.C:157
 ConfigLStar.C:158
 ConfigLStar.C:159
 ConfigLStar.C:160
 ConfigLStar.C:161
 ConfigLStar.C:162
 ConfigLStar.C:163
 ConfigLStar.C:164
 ConfigLStar.C:165
 ConfigLStar.C:166
 ConfigLStar.C:167
 ConfigLStar.C:168
 ConfigLStar.C:169
 ConfigLStar.C:170
 ConfigLStar.C:171
 ConfigLStar.C:172
 ConfigLStar.C:173
 ConfigLStar.C:174
 ConfigLStar.C:175
 ConfigLStar.C:176
 ConfigLStar.C:177
 ConfigLStar.C:178
 ConfigLStar.C:179
 ConfigLStar.C:180
 ConfigLStar.C:181
 ConfigLStar.C:182
 ConfigLStar.C:183
 ConfigLStar.C:184
 ConfigLStar.C:185
 ConfigLStar.C:186
 ConfigLStar.C:187
 ConfigLStar.C:188
 ConfigLStar.C:189
 ConfigLStar.C:190
 ConfigLStar.C:191
 ConfigLStar.C:192
 ConfigLStar.C:193
 ConfigLStar.C:194
 ConfigLStar.C:195
 ConfigLStar.C:196
 ConfigLStar.C:197
 ConfigLStar.C:198
 ConfigLStar.C:199
 ConfigLStar.C:200
 ConfigLStar.C:201
 ConfigLStar.C:202
 ConfigLStar.C:203
 ConfigLStar.C:204
 ConfigLStar.C:205
 ConfigLStar.C:206
 ConfigLStar.C:207
 ConfigLStar.C:208
 ConfigLStar.C:209
 ConfigLStar.C:210
 ConfigLStar.C:211
 ConfigLStar.C:212
 ConfigLStar.C:213
 ConfigLStar.C:214
 ConfigLStar.C:215
 ConfigLStar.C:216
 ConfigLStar.C:217
 ConfigLStar.C:218
 ConfigLStar.C:219
 ConfigLStar.C:220
 ConfigLStar.C:221
 ConfigLStar.C:222
 ConfigLStar.C:223
 ConfigLStar.C:224
 ConfigLStar.C:225
 ConfigLStar.C:226