ROOT logo
//
// *** 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 ConfigPhiPbPbTPC
(  
   AliRsnMiniAnalysisTask *task,
   Bool_t                  isMC,
   Bool_t                  isESD,
   const char             *suffix,
   AliRsnCutSet           *cutsPair
)
{
   // manage suffix
   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
   
   // 
   // -- Define track cuts -------------------------------------------------------------------------
   //
   
   // BB parameterization depends on data sample (MC, data)
   Double_t bbPar[5];
   if (isMC) {
      bbPar[0] = 2.15898 / 50.0;
      bbPar[1] = 1.75295E1;
      bbPar[2] = 3.40030E-9;
      bbPar[3] = 1.96178;
      bbPar[4] = 3.91720;
   } else {
      bbPar[0] = 1.41543 / 50.0;
      bbPar[1] = 2.63394E1;
      bbPar[2] = 5.0411E-11;
      bbPar[3] = 2.12543;
      bbPar[4] = 4.88663;
   }
   
   // standard kaon cut
   AliRsnCutKaonForPhi2010 *cut = new AliRsnCutKaonForPhi2010(Form("cut%s", suffix), 3.0, 3.0, 0.8);
   
   // setup (set manually the TPC PID)
   cut->SetMode(AliRsnCutKaonForPhi2010::kOnlyTPC);
   cut->InitMyPID(isMC, isESD);
   cut->MyPID()->GetTPCResponse().SetBetheBlochParameters(bbPar[0], bbPar[1], bbPar[2], bbPar[3], bbPar[4]);
   
   // cut set
   AliRsnCutSet *cutSet = new AliRsnCutSet(Form("set%s", suffix), AliRsnTarget::kDaughter);
   cutSet->AddCut(cut);
   cutSet->SetCutScheme(cut->GetName());
   
   // add to task
   Int_t icut = task->AddTrackCuts(cutSet);
   ::Info("Config", "Cut ID = %d", icut);
   
   //
   // -- 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     [6] = { 1      ,  0      ,  0      ,  0      ,  isMC   ,  isMC     };
   Bool_t  useIM   [6] = { 1      ,  1      ,  1      ,  1      ,  1      ,  0        };
   TString name    [6] = {"Unlike", "Mixing", "LikePP", "LikeMM", "Trues" , "Res"     };
   TString comp    [6] = {"PAIR"  , "MIX"   , "PAIR"  , "PAIR"  , "TRUE"  , "TRUE"    };
   TString output  [6] = {"SPARSE", "SPARSE", "SPARSE", "SPARSE", "SPARSE", "SPARSE"  };
   Char_t  charge1 [6] = {'+'     , '+'     , '+'     , '-'     , '+'     , '+'       };
   Char_t  charge2 [6] = {'-'     , '-'     , '+'     , '-'     , '-'     , '-'       };
   Int_t   cutID   [6] = { icut   ,  icut   ,  icut   ,  icut   ,  icut   ,  icut     };
   
   for (Int_t i = 0; i < 6; i++) {
      if (!use[i]) continue;
      // create output
      AliRsnMiniOutput *out = task->CreateOutput(Form("phi_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
      // selection settings
      out->SetCutID(0, cutID[i]);
      out->SetCutID(1, cutID[i]);
      out->SetDaughter(0, AliRsnDaughter::kKaon);
      out->SetDaughter(1, AliRsnDaughter::kKaon);
      out->SetCharge(0, charge1[i]);
      out->SetCharge(1, charge2[i]);
      out->SetMotherPDG(333);
      out->SetMotherMass(1.019455);
      // pair cuts
      out->SetPairCuts(cutsPair);
      // axis X: invmass (or resolution)
      if (useIM) 
         out->AddAxis(imID, 500, 0.9,  1.4);
      else
         out->AddAxis(resID, 200, -0.02, 0.02);
      // axis Y: transverse momentum
      out->AddAxis(ptID, 100, 0.0, 10.0);
      // axis Z: centrality 
      out->AddAxis(centID, 100, 0.0, 100.0);
   }
   
   return kTRUE;
}
 ConfigPhiPbPbTPC.C:1
 ConfigPhiPbPbTPC.C:2
 ConfigPhiPbPbTPC.C:3
 ConfigPhiPbPbTPC.C:4
 ConfigPhiPbPbTPC.C:5
 ConfigPhiPbPbTPC.C:6
 ConfigPhiPbPbTPC.C:7
 ConfigPhiPbPbTPC.C:8
 ConfigPhiPbPbTPC.C:9
 ConfigPhiPbPbTPC.C:10
 ConfigPhiPbPbTPC.C:11
 ConfigPhiPbPbTPC.C:12
 ConfigPhiPbPbTPC.C:13
 ConfigPhiPbPbTPC.C:14
 ConfigPhiPbPbTPC.C:15
 ConfigPhiPbPbTPC.C:16
 ConfigPhiPbPbTPC.C:17
 ConfigPhiPbPbTPC.C:18
 ConfigPhiPbPbTPC.C:19
 ConfigPhiPbPbTPC.C:20
 ConfigPhiPbPbTPC.C:21
 ConfigPhiPbPbTPC.C:22
 ConfigPhiPbPbTPC.C:23
 ConfigPhiPbPbTPC.C:24
 ConfigPhiPbPbTPC.C:25
 ConfigPhiPbPbTPC.C:26
 ConfigPhiPbPbTPC.C:27
 ConfigPhiPbPbTPC.C:28
 ConfigPhiPbPbTPC.C:29
 ConfigPhiPbPbTPC.C:30
 ConfigPhiPbPbTPC.C:31
 ConfigPhiPbPbTPC.C:32
 ConfigPhiPbPbTPC.C:33
 ConfigPhiPbPbTPC.C:34
 ConfigPhiPbPbTPC.C:35
 ConfigPhiPbPbTPC.C:36
 ConfigPhiPbPbTPC.C:37
 ConfigPhiPbPbTPC.C:38
 ConfigPhiPbPbTPC.C:39
 ConfigPhiPbPbTPC.C:40
 ConfigPhiPbPbTPC.C:41
 ConfigPhiPbPbTPC.C:42
 ConfigPhiPbPbTPC.C:43
 ConfigPhiPbPbTPC.C:44
 ConfigPhiPbPbTPC.C:45
 ConfigPhiPbPbTPC.C:46
 ConfigPhiPbPbTPC.C:47
 ConfigPhiPbPbTPC.C:48
 ConfigPhiPbPbTPC.C:49
 ConfigPhiPbPbTPC.C:50
 ConfigPhiPbPbTPC.C:51
 ConfigPhiPbPbTPC.C:52
 ConfigPhiPbPbTPC.C:53
 ConfigPhiPbPbTPC.C:54
 ConfigPhiPbPbTPC.C:55
 ConfigPhiPbPbTPC.C:56
 ConfigPhiPbPbTPC.C:57
 ConfigPhiPbPbTPC.C:58
 ConfigPhiPbPbTPC.C:59
 ConfigPhiPbPbTPC.C:60
 ConfigPhiPbPbTPC.C:61
 ConfigPhiPbPbTPC.C:62
 ConfigPhiPbPbTPC.C:63
 ConfigPhiPbPbTPC.C:64
 ConfigPhiPbPbTPC.C:65
 ConfigPhiPbPbTPC.C:66
 ConfigPhiPbPbTPC.C:67
 ConfigPhiPbPbTPC.C:68
 ConfigPhiPbPbTPC.C:69
 ConfigPhiPbPbTPC.C:70
 ConfigPhiPbPbTPC.C:71
 ConfigPhiPbPbTPC.C:72
 ConfigPhiPbPbTPC.C:73
 ConfigPhiPbPbTPC.C:74
 ConfigPhiPbPbTPC.C:75
 ConfigPhiPbPbTPC.C:76
 ConfigPhiPbPbTPC.C:77
 ConfigPhiPbPbTPC.C:78
 ConfigPhiPbPbTPC.C:79
 ConfigPhiPbPbTPC.C:80
 ConfigPhiPbPbTPC.C:81
 ConfigPhiPbPbTPC.C:82
 ConfigPhiPbPbTPC.C:83
 ConfigPhiPbPbTPC.C:84
 ConfigPhiPbPbTPC.C:85
 ConfigPhiPbPbTPC.C:86
 ConfigPhiPbPbTPC.C:87
 ConfigPhiPbPbTPC.C:88
 ConfigPhiPbPbTPC.C:89
 ConfigPhiPbPbTPC.C:90
 ConfigPhiPbPbTPC.C:91
 ConfigPhiPbPbTPC.C:92
 ConfigPhiPbPbTPC.C:93
 ConfigPhiPbPbTPC.C:94
 ConfigPhiPbPbTPC.C:95
 ConfigPhiPbPbTPC.C:96
 ConfigPhiPbPbTPC.C:97
 ConfigPhiPbPbTPC.C:98
 ConfigPhiPbPbTPC.C:99
 ConfigPhiPbPbTPC.C:100
 ConfigPhiPbPbTPC.C:101
 ConfigPhiPbPbTPC.C:102
 ConfigPhiPbPbTPC.C:103
 ConfigPhiPbPbTPC.C:104
 ConfigPhiPbPbTPC.C:105
 ConfigPhiPbPbTPC.C:106
 ConfigPhiPbPbTPC.C:107
 ConfigPhiPbPbTPC.C:108
 ConfigPhiPbPbTPC.C:109
 ConfigPhiPbPbTPC.C:110
 ConfigPhiPbPbTPC.C:111
 ConfigPhiPbPbTPC.C:112
 ConfigPhiPbPbTPC.C:113
 ConfigPhiPbPbTPC.C:114
 ConfigPhiPbPbTPC.C:115