ROOT logo
//
// 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 useLStar = 1;


AliRsnMiniAnalysisTask * AddTaskLStarPPb
(
   Bool_t      isMC,
   Bool_t      isPP,
   const char *path,
   Int_t       nmix = 0
)
{  
   //
   // -- INITIALIZATION ----------------------------------------------------------------------------
   //
   
  //-------------------------------------------
  // event cuts
  //-------------------------------------------
  UInt_t      triggerMask = AliVEvent::kINT7;
  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; //
  Int_t       MinPlpContribMV = 5; //default value if used
  Bool_t      useVtxCut2013pA = kTRUE; //default use recommended 2013 pA vtx selection
  Double_t    vtxZcut = 10.0; //cm, default cut on vtx z



   // retrieve analysis manager
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

   // create the task and connect with physics selection
   AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask("RSN", isMC);

   //task->UseESDTriggerMask(triggerMask); //ESD
   task->SelectCollisionCandidates(triggerMask); //AOD	
   
   // settings
   if (isPP) 
      task->UseMultiplicity("QUALITY");
   else
      task->UseCentrality("V0M");
   
   // set mixing
   task->UseContinuousMix();
   //task->UseBinnedMix();
   task->SetNMix(nmix);
   task->SetMaxDiffVz(1.0);
   task->SetMaxDiffMult(10.0);
   //task->SetMaxDiffAngle(20);
   //   if (!isPP) task->SetMaxDiffAngle(20.0*TMath::DegToRad()); //set angle diff in rad

   mgr->AddTask(task);

   //
   // -- 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", vtxZcut, 0, kFALSE);
   
   // set the check for pileup
   //if (isPP) cutVertex->SetCheckPileUp(kTRUE);

   //set check for pileup in 2013  #############
 
   AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", rmFirstEvtChunk, rejectPileUp);
   cutEventUtils->SetUseVertexSelection2013pA(useVtxCut2013pA);
   ::Info("AddTaskLStarPPb", Form(":::::::::::::::::: Vertex cut as pA 2013: %s", (useVtxCut2013pA?"ON":"OFF")));   
   if (useMVPileUpSelection){
     cutEventUtils->SetUseMVPlpSelection(useMVPileUpSelection);
     cutEventUtils->SetMinPlpContribMV(MinPlpContribMV);
     cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
     ::Info("AddTaskLStarPPb", Form("Multiple-vtx Pile-up rejection settings: MinPlpContribMV = %i, MinPlpContribSPD = %i", MinPlpContribMV, MinPlpContribSPD));
   } else {
     cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
     ::Info("AddTaskLStarPPb", Form("SPD Pile-up rejection settings: MinPlpContribSPD = %i", MinPlpContribSPD));
   }
   ::Info("AddTaskLStarPPb", Form(":::::::::::::::::: Pile-up rejection mode: %s", (rejectPileUp?"ON":"OFF")));   
   ::Info("AddTaskLStarPPb", Form("::::::::::::: Remove first event in chunk: %s", (rmFirstEvtChunk?"ON":"OFF")));   
  



   // define and fill cut set
   AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
   eventCuts->AddCut(cutEventUtils);
   eventCuts->AddCut(cutVertex);
   eventCuts->SetCutScheme(Form("%s&%s", cutEventUtils->GetName(), cutVertex->GetName()));
   //eventCuts->SetCutScheme(cutVertex->GetName());
   
   // set cuts in task
   task->SetEventCuts(eventCuts);
   
   //
   // -- EVENT-ONLY COMPUTATIONS -------------------------------------------------------------------
   //
   
   // 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

   // VERTEX POSITION    
   Int_t vertexID = task->CreateValue(AliRsnMiniValue::kVz, kFALSE);
   AliRsnMiniOutput *outVertex = task->CreateOutput("eventVertex", "HIST", "EVENT");
   outVertex->AddAxis(vertexID, 400, -20.0, 20.0);


   // initialize value computation for multiplicity/centrality
   Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
   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);
   
//   TH2F* hvz=new TH2F("hVzVsCent","", 100, 0., 100., 240, -12.0, 12.0);
//   task->SetEventQAHist("vz",hvz);//plugs this histogram into the fHAEventVz data member

//   TH2F* hmc=new TH2F("MultiVsCent","", 400, 0., 400., 400, 0., 400.);
//   hmc->GetYaxis()->SetTitle("QUALITY");
//   task->SetEventQAHist("multicent",hmc);//plugs this histogram into the fHAEventMultiCent data member


   //
   // -- PAIR CUTS (common to all resonances) ------------------------------------------------------
   //
   
   AliRsnCutMiniPair *cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange);
   //cutY->SetRangeD(-0.5, 0.5);
      cutY->SetRangeD(-0.465, 0.035);// 0 < y_cm < 0.5; y_cm = y_lab + 0.465

   AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
   cutsPair->AddCut(cutY);
   cutsPair->SetCutScheme(cutY->GetName());
   
   //
   // -- CONFIGS -----------------------------------------------------------------------------------
   //
   

   if (useLStar) {
      gROOT->LoadMacro(Form("%s/ConfigLStarPPb.C", path));
      ConfigLStarPPb(task, isMC, isPP, "LStar", cutsPair);
   }
   
   //
   // -- 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;
}
 AddTaskLStarPPb.C:1
 AddTaskLStarPPb.C:2
 AddTaskLStarPPb.C:3
 AddTaskLStarPPb.C:4
 AddTaskLStarPPb.C:5
 AddTaskLStarPPb.C:6
 AddTaskLStarPPb.C:7
 AddTaskLStarPPb.C:8
 AddTaskLStarPPb.C:9
 AddTaskLStarPPb.C:10
 AddTaskLStarPPb.C:11
 AddTaskLStarPPb.C:12
 AddTaskLStarPPb.C:13
 AddTaskLStarPPb.C:14
 AddTaskLStarPPb.C:15
 AddTaskLStarPPb.C:16
 AddTaskLStarPPb.C:17
 AddTaskLStarPPb.C:18
 AddTaskLStarPPb.C:19
 AddTaskLStarPPb.C:20
 AddTaskLStarPPb.C:21
 AddTaskLStarPPb.C:22
 AddTaskLStarPPb.C:23
 AddTaskLStarPPb.C:24
 AddTaskLStarPPb.C:25
 AddTaskLStarPPb.C:26
 AddTaskLStarPPb.C:27
 AddTaskLStarPPb.C:28
 AddTaskLStarPPb.C:29
 AddTaskLStarPPb.C:30
 AddTaskLStarPPb.C:31
 AddTaskLStarPPb.C:32
 AddTaskLStarPPb.C:33
 AddTaskLStarPPb.C:34
 AddTaskLStarPPb.C:35
 AddTaskLStarPPb.C:36
 AddTaskLStarPPb.C:37
 AddTaskLStarPPb.C:38
 AddTaskLStarPPb.C:39
 AddTaskLStarPPb.C:40
 AddTaskLStarPPb.C:41
 AddTaskLStarPPb.C:42
 AddTaskLStarPPb.C:43
 AddTaskLStarPPb.C:44
 AddTaskLStarPPb.C:45
 AddTaskLStarPPb.C:46
 AddTaskLStarPPb.C:47
 AddTaskLStarPPb.C:48
 AddTaskLStarPPb.C:49
 AddTaskLStarPPb.C:50
 AddTaskLStarPPb.C:51
 AddTaskLStarPPb.C:52
 AddTaskLStarPPb.C:53
 AddTaskLStarPPb.C:54
 AddTaskLStarPPb.C:55
 AddTaskLStarPPb.C:56
 AddTaskLStarPPb.C:57
 AddTaskLStarPPb.C:58
 AddTaskLStarPPb.C:59
 AddTaskLStarPPb.C:60
 AddTaskLStarPPb.C:61
 AddTaskLStarPPb.C:62
 AddTaskLStarPPb.C:63
 AddTaskLStarPPb.C:64
 AddTaskLStarPPb.C:65
 AddTaskLStarPPb.C:66
 AddTaskLStarPPb.C:67
 AddTaskLStarPPb.C:68
 AddTaskLStarPPb.C:69
 AddTaskLStarPPb.C:70
 AddTaskLStarPPb.C:71
 AddTaskLStarPPb.C:72
 AddTaskLStarPPb.C:73
 AddTaskLStarPPb.C:74
 AddTaskLStarPPb.C:75
 AddTaskLStarPPb.C:76
 AddTaskLStarPPb.C:77
 AddTaskLStarPPb.C:78
 AddTaskLStarPPb.C:79
 AddTaskLStarPPb.C:80
 AddTaskLStarPPb.C:81
 AddTaskLStarPPb.C:82
 AddTaskLStarPPb.C:83
 AddTaskLStarPPb.C:84
 AddTaskLStarPPb.C:85
 AddTaskLStarPPb.C:86
 AddTaskLStarPPb.C:87
 AddTaskLStarPPb.C:88
 AddTaskLStarPPb.C:89
 AddTaskLStarPPb.C:90
 AddTaskLStarPPb.C:91
 AddTaskLStarPPb.C:92
 AddTaskLStarPPb.C:93
 AddTaskLStarPPb.C:94
 AddTaskLStarPPb.C:95
 AddTaskLStarPPb.C:96
 AddTaskLStarPPb.C:97
 AddTaskLStarPPb.C:98
 AddTaskLStarPPb.C:99
 AddTaskLStarPPb.C:100
 AddTaskLStarPPb.C:101
 AddTaskLStarPPb.C:102
 AddTaskLStarPPb.C:103
 AddTaskLStarPPb.C:104
 AddTaskLStarPPb.C:105
 AddTaskLStarPPb.C:106
 AddTaskLStarPPb.C:107
 AddTaskLStarPPb.C:108
 AddTaskLStarPPb.C:109
 AddTaskLStarPPb.C:110
 AddTaskLStarPPb.C:111
 AddTaskLStarPPb.C:112
 AddTaskLStarPPb.C:113
 AddTaskLStarPPb.C:114
 AddTaskLStarPPb.C:115
 AddTaskLStarPPb.C:116
 AddTaskLStarPPb.C:117
 AddTaskLStarPPb.C:118
 AddTaskLStarPPb.C:119
 AddTaskLStarPPb.C:120
 AddTaskLStarPPb.C:121
 AddTaskLStarPPb.C:122
 AddTaskLStarPPb.C:123
 AddTaskLStarPPb.C:124
 AddTaskLStarPPb.C:125
 AddTaskLStarPPb.C:126
 AddTaskLStarPPb.C:127
 AddTaskLStarPPb.C:128
 AddTaskLStarPPb.C:129
 AddTaskLStarPPb.C:130
 AddTaskLStarPPb.C:131
 AddTaskLStarPPb.C:132
 AddTaskLStarPPb.C:133
 AddTaskLStarPPb.C:134
 AddTaskLStarPPb.C:135
 AddTaskLStarPPb.C:136
 AddTaskLStarPPb.C:137
 AddTaskLStarPPb.C:138
 AddTaskLStarPPb.C:139
 AddTaskLStarPPb.C:140
 AddTaskLStarPPb.C:141
 AddTaskLStarPPb.C:142
 AddTaskLStarPPb.C:143
 AddTaskLStarPPb.C:144
 AddTaskLStarPPb.C:145
 AddTaskLStarPPb.C:146
 AddTaskLStarPPb.C:147
 AddTaskLStarPPb.C:148
 AddTaskLStarPPb.C:149
 AddTaskLStarPPb.C:150
 AddTaskLStarPPb.C:151
 AddTaskLStarPPb.C:152
 AddTaskLStarPPb.C:153
 AddTaskLStarPPb.C:154
 AddTaskLStarPPb.C:155
 AddTaskLStarPPb.C:156
 AddTaskLStarPPb.C:157
 AddTaskLStarPPb.C:158
 AddTaskLStarPPb.C:159
 AddTaskLStarPPb.C:160
 AddTaskLStarPPb.C:161
 AddTaskLStarPPb.C:162
 AddTaskLStarPPb.C:163
 AddTaskLStarPPb.C:164
 AddTaskLStarPPb.C:165
 AddTaskLStarPPb.C:166
 AddTaskLStarPPb.C:167
 AddTaskLStarPPb.C:168
 AddTaskLStarPPb.C:169
 AddTaskLStarPPb.C:170
 AddTaskLStarPPb.C:171
 AddTaskLStarPPb.C:172
 AddTaskLStarPPb.C:173
 AddTaskLStarPPb.C:174
 AddTaskLStarPPb.C:175
 AddTaskLStarPPb.C:176
 AddTaskLStarPPb.C:177