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 ConfigPhiPbPb
(  
   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::kDefaultPID);
   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;
}
 ConfigPhiPbPb.C:1
 ConfigPhiPbPb.C:2
 ConfigPhiPbPb.C:3
 ConfigPhiPbPb.C:4
 ConfigPhiPbPb.C:5
 ConfigPhiPbPb.C:6
 ConfigPhiPbPb.C:7
 ConfigPhiPbPb.C:8
 ConfigPhiPbPb.C:9
 ConfigPhiPbPb.C:10
 ConfigPhiPbPb.C:11
 ConfigPhiPbPb.C:12
 ConfigPhiPbPb.C:13
 ConfigPhiPbPb.C:14
 ConfigPhiPbPb.C:15
 ConfigPhiPbPb.C:16
 ConfigPhiPbPb.C:17
 ConfigPhiPbPb.C:18
 ConfigPhiPbPb.C:19
 ConfigPhiPbPb.C:20
 ConfigPhiPbPb.C:21
 ConfigPhiPbPb.C:22
 ConfigPhiPbPb.C:23
 ConfigPhiPbPb.C:24
 ConfigPhiPbPb.C:25
 ConfigPhiPbPb.C:26
 ConfigPhiPbPb.C:27
 ConfigPhiPbPb.C:28
 ConfigPhiPbPb.C:29
 ConfigPhiPbPb.C:30
 ConfigPhiPbPb.C:31
 ConfigPhiPbPb.C:32
 ConfigPhiPbPb.C:33
 ConfigPhiPbPb.C:34
 ConfigPhiPbPb.C:35
 ConfigPhiPbPb.C:36
 ConfigPhiPbPb.C:37
 ConfigPhiPbPb.C:38
 ConfigPhiPbPb.C:39
 ConfigPhiPbPb.C:40
 ConfigPhiPbPb.C:41
 ConfigPhiPbPb.C:42
 ConfigPhiPbPb.C:43
 ConfigPhiPbPb.C:44
 ConfigPhiPbPb.C:45
 ConfigPhiPbPb.C:46
 ConfigPhiPbPb.C:47
 ConfigPhiPbPb.C:48
 ConfigPhiPbPb.C:49
 ConfigPhiPbPb.C:50
 ConfigPhiPbPb.C:51
 ConfigPhiPbPb.C:52
 ConfigPhiPbPb.C:53
 ConfigPhiPbPb.C:54
 ConfigPhiPbPb.C:55
 ConfigPhiPbPb.C:56
 ConfigPhiPbPb.C:57
 ConfigPhiPbPb.C:58
 ConfigPhiPbPb.C:59
 ConfigPhiPbPb.C:60
 ConfigPhiPbPb.C:61
 ConfigPhiPbPb.C:62
 ConfigPhiPbPb.C:63
 ConfigPhiPbPb.C:64
 ConfigPhiPbPb.C:65
 ConfigPhiPbPb.C:66
 ConfigPhiPbPb.C:67
 ConfigPhiPbPb.C:68
 ConfigPhiPbPb.C:69
 ConfigPhiPbPb.C:70
 ConfigPhiPbPb.C:71
 ConfigPhiPbPb.C:72
 ConfigPhiPbPb.C:73
 ConfigPhiPbPb.C:74
 ConfigPhiPbPb.C:75
 ConfigPhiPbPb.C:76
 ConfigPhiPbPb.C:77
 ConfigPhiPbPb.C:78
 ConfigPhiPbPb.C:79
 ConfigPhiPbPb.C:80
 ConfigPhiPbPb.C:81
 ConfigPhiPbPb.C:82
 ConfigPhiPbPb.C:83
 ConfigPhiPbPb.C:84
 ConfigPhiPbPb.C:85
 ConfigPhiPbPb.C:86
 ConfigPhiPbPb.C:87
 ConfigPhiPbPb.C:88
 ConfigPhiPbPb.C:89
 ConfigPhiPbPb.C:90
 ConfigPhiPbPb.C:91
 ConfigPhiPbPb.C:92
 ConfigPhiPbPb.C:93
 ConfigPhiPbPb.C:94
 ConfigPhiPbPb.C:95
 ConfigPhiPbPb.C:96
 ConfigPhiPbPb.C:97
 ConfigPhiPbPb.C:98
 ConfigPhiPbPb.C:99
 ConfigPhiPbPb.C:100
 ConfigPhiPbPb.C:101
 ConfigPhiPbPb.C:102
 ConfigPhiPbPb.C:103
 ConfigPhiPbPb.C:104
 ConfigPhiPbPb.C:105
 ConfigPhiPbPb.C:106
 ConfigPhiPbPb.C:107
 ConfigPhiPbPb.C:108
 ConfigPhiPbPb.C:109
 ConfigPhiPbPb.C:110
 ConfigPhiPbPb.C:111
 ConfigPhiPbPb.C:112
 ConfigPhiPbPb.C:113
 ConfigPhiPbPb.C:114
 ConfigPhiPbPb.C:115