ROOT logo
/***************************************************************************
              fbellini@cern.ch - last modified on 28/11/2013
//
//Lauches KStar analysis with rsn mini package
//Allows basic configuration of pile-up check and event cuts
//
****************************************************************************/
enum pairYCutSet { kPairDefault,
		   kNegative,
		   kCentral
                 };

enum eventCutSet { kOld = -1, 
		   kEvtDefault, //=0
		   kNoPileUpCut, //=1
		   kPileUpMV, //=2
		   kPileUpSPD3, //=3		      
		   kDefaultVtx8, //=4
		   kDefaultVtx5, //=5                    
		   kMCEvtDefault //=6
};

enum eventMixConfig { kDisabled = -1,
		      kMixDefault,//=0 //10 events, Dvz = 1cm, DC = 10
		      k5Evts, //=1 //5 events, Dvz = 1cm, DC = 10
		      k5Cent,  //=2 //10 events, Dvz = 1cm, DC = 5
                    };


AliRsnMiniAnalysisTask * AddTaskKStarPPB
(
 Bool_t      isMC = kFALSE,
 Bool_t      isPP = kFALSE,
 TString     outNameSuffix = "tof2s",
 Int_t       evtCutSetID = 0,
 Int_t       pairCutSetID = 0,
 Int_t       mixingConfigID = 0,
 Int_t       aodFilterBit = 5,
 Int_t       customQualityCutsID = -1,
 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
 Float_t     nsigmaPi = 2.0,
 Float_t     nsigmaKa = 2.0,
 Bool_t      enableMonitor = kTRUE,
 Bool_t      IsMcTrueOnly = kFALSE,
 TString     monitorOpt = "",
 Bool_t      useMixLS = 0,
 Bool_t      checkReflex = 0,
 AliRsnMiniValue::EType yaxisvar = AliRsnMiniValue::kPt
)
{  

  
  //-------------------------------------------
  // 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
  
  if (evtCutSetID==eventCutSet::kOld) {
    triggerMask = AliVEvent::kAnyINT;
    rmFirstEvtChunk = kFALSE;
    rejectPileUp = kFALSE;
    useVtxCut2013pA = kFALSE;
  }
  
  if (evtCutSetID==eventCutSet::kNoPileUpCut) {
    rmFirstEvtChunk = kTRUE;
    rejectPileUp = kFALSE;
  }
  
  if (evtCutSetID==eventCutSet::kPileUpMV) {
    useMVPileUpSelection = kTRUE;
    MinPlpContribSPD = 3;
    //MinPlpContribMV = 5; //already set as default
  }
  
  if (evtCutSetID==eventCutSet::kPileUpSPD3) {
    MinPlpContribSPD = 3;
  }
  
  if (evtCutSetID==eventCutSet::kDefaultVtx8){
    vtxZcut = 8.0; //cm
  } 
  
  if (evtCutSetID==eventCutSet::kDefaultVtx5){
    vtxZcut = 5.0; //cm
  }
  
  if (evtCutSetID==eventCutSet::kMCEvtDefault) {
    rmFirstEvtChunk = kFALSE;
    rejectPileUp = kFALSE;
  }
  
  //-------------------------------------------
  //pair cuts
  //-------------------------------------------
  Double_t    minYlab =  -0.465;
  Double_t    maxYlab =  0.035;

  if (pairCutSetID==pairYCutSet::kNegative) { //-0.5<y_cm<0.0
    minYlab = -0.965;    maxYlab = -0.465;
  }
  
  if (pairCutSetID==pairYCutSet::kCentral) { //|y_cm|<0.3
    minYlab = -0.765;    maxYlab = -0.165;
  }

  //-------------------------------------------
  //mixing settings
  //-------------------------------------------
  Int_t       nmix = 0;
  Float_t     maxDiffVzMix = 1.0;
  Float_t     maxDiffMultMix = 10.0;
  
  if (mixingConfigID == eventMixConfig::kMixDefault) {
    nmix = 10;
  }

  if (mixingConfigID == eventMixConfig::k5Evts) {
    nmix = 5;
  }
  
  if (mixingConfigID == eventMixConfig::k5Cent) {
    maxDiffMultMix = 5;
  }

  //
  // -- INITIALIZATION ----------------------------------------------------------------------------
  // retrieve analysis manager
  //
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      ::Error("AddAnalysisTaskTOFKStar", "No analysis manager to connect to.");
      return NULL;
   } 

   // create the task and configure 
   TString taskName = Form("TOFKStar%s%s_%i%i", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), (Int_t)cutPiCandidate,(Int_t)cutKaCandidate );
   AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC);
   //task->UseESDTriggerMask(triggerMask); //ESD
   task->SelectCollisionCandidates(triggerMask); //AOD
   
   if (isPP) 
     task->UseMultiplicity("QUALITY");
   else
     task->UseCentrality("V0A");   
   // set event mixing options
   task->UseContinuousMix();
   //task->UseBinnedMix();
   task->SetNMix(nmix);
   task->SetMaxDiffVz(maxDiffVzMix);
   task->SetMaxDiffMult(maxDiffMultMix);
   ::Info("AddAnalysisTaskTOFKStar", Form("Event mixing configuration: \n events to mix = %i \n max diff. vtxZ = cm %5.3f \n max diff multi = %5.3f", nmix, maxDiffVzMix, maxDiffMultMix));
   
   mgr->AddTask(task);
   
   //
   // -- EVENT CUTS (same for all configs) ---------------------------------------------------------
   //  
   // cut on primary vertex:
   // - 2nd argument --> |Vz| range
   // - 3rd argument --> minimum required number of contributors to vtx
   // - 4th argument --> tells if TPC stand-alone vertexes must be accepted
   AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", vtxZcut, 0, kFALSE);
   //if (isPP) cutVertex->SetCheckPileUp(kTRUE);   // set the check for pileup 
   //set check for pileup in 2013
   AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", rmFirstEvtChunk, rejectPileUp);
   cutEventUtils->SetUseVertexSelection2013pA(useVtxCut2013pA);
   ::Info("AddAnalysisTaskTOFKStar", Form(":::::::::::::::::: Vertex cut as pA 2013: %s", (useVtxCut2013pA?"ON":"OFF")));   
   if (useMVPileUpSelection){
     cutEventUtils->SetUseMVPlpSelection(useMVPileUpSelection);
     cutEventUtils->SetMinPlpContribMV(MinPlpContribMV);
     cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
     ::Info("AddAnalysisTaskTOFKStar", Form("Multiple-vtx Pile-up rejection settings: MinPlpContribMV = %i, MinPlpContribSPD = %i", MinPlpContribMV, MinPlpContribSPD));
   } else {
     cutEventUtils->SetMinPlpContribSPD(MinPlpContribSPD);
     ::Info("AddAnalysisTaskTOFKStar", Form("SPD Pile-up rejection settings: MinPlpContribSPD = %i", MinPlpContribSPD));
   }
   ::Info("AddAnalysisTaskTOFKStar", Form(":::::::::::::::::: Pile-up rejection mode: %s", (rejectPileUp?"ON":"OFF")));   
   ::Info("AddAnalysisTaskTOFKStar", Form("::::::::::::: Remove first event in chunk: %s", (rmFirstEvtChunk?"ON":"OFF")));   
   
   // define and fill cut set for event cut
   AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
   eventCuts->AddCut(cutEventUtils);
   eventCuts->AddCut(cutVertex);
   eventCuts->SetCutScheme(Form("%s&%s", cutEventUtils->GetName(), cutVertex->GetName()));
   // set cuts in task
   task->SetEventCuts(eventCuts);
   
   //
   // -- EVENT-ONLY COMPUTATIONS -------------------------------------------------------------------
   //   
   //vertex
   Int_t vtxID = task->CreateValue(AliRsnMiniValue::kVz, kFALSE);
   AliRsnMiniOutput *outVtx = task->CreateOutput("eventVtx", "HIST", "EVENT");
   outVtx->AddAxis(vtxID, 240, -12.0, 12.0);
   
   //multiplicity or centrality
   Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
   AliRsnMiniOutput *outMult = task->CreateOutput("eventMult", "HIST", "EVENT");
   if (isPP) 
     outMult->AddAxis(multID, 400, 0.0, 400.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","", 100, 0., 100., 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(minYlab, maxYlab);
   
   AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
   cutsPair->AddCut(cutY);
   cutsPair->SetCutScheme(cutY->GetName());
   
   //
   // -- CONFIG ANALYSIS --------------------------------------------------------------------------
   //   
   gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigKStarPPb.C");
   if (!ConfigKStarPPb(task, isMC, isPP, "", cutsPair, aodFilterBit, customQualityCutsID, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly,  monitorOpt.Data(), useMixLS, isMC&checkReflex, yaxisvar)) return 0x0;
   
   
   //
   // -- CONTAINERS --------------------------------------------------------------------------------
   //
   TString outputFileName = AliAnalysisManager::GetCommonFileName();
   //  outputFileName += ":Rsn";
   Printf("AddAnalysisTaskTOFKStar - Set OutputFileName : \n %s\n", outputFileName.Data() );
   
   AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s",outNameSuffix.Data()), 
							   TList::Class(), 
							   AliAnalysisManager::kOutputContainer, 
							   outputFileName);
   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
   mgr->ConnectOutput(task, 1, output);
   
   return task;
}
 AddTaskKStarPPB.C:1
 AddTaskKStarPPB.C:2
 AddTaskKStarPPB.C:3
 AddTaskKStarPPB.C:4
 AddTaskKStarPPB.C:5
 AddTaskKStarPPB.C:6
 AddTaskKStarPPB.C:7
 AddTaskKStarPPB.C:8
 AddTaskKStarPPB.C:9
 AddTaskKStarPPB.C:10
 AddTaskKStarPPB.C:11
 AddTaskKStarPPB.C:12
 AddTaskKStarPPB.C:13
 AddTaskKStarPPB.C:14
 AddTaskKStarPPB.C:15
 AddTaskKStarPPB.C:16
 AddTaskKStarPPB.C:17
 AddTaskKStarPPB.C:18
 AddTaskKStarPPB.C:19
 AddTaskKStarPPB.C:20
 AddTaskKStarPPB.C:21
 AddTaskKStarPPB.C:22
 AddTaskKStarPPB.C:23
 AddTaskKStarPPB.C:24
 AddTaskKStarPPB.C:25
 AddTaskKStarPPB.C:26
 AddTaskKStarPPB.C:27
 AddTaskKStarPPB.C:28
 AddTaskKStarPPB.C:29
 AddTaskKStarPPB.C:30
 AddTaskKStarPPB.C:31
 AddTaskKStarPPB.C:32
 AddTaskKStarPPB.C:33
 AddTaskKStarPPB.C:34
 AddTaskKStarPPB.C:35
 AddTaskKStarPPB.C:36
 AddTaskKStarPPB.C:37
 AddTaskKStarPPB.C:38
 AddTaskKStarPPB.C:39
 AddTaskKStarPPB.C:40
 AddTaskKStarPPB.C:41
 AddTaskKStarPPB.C:42
 AddTaskKStarPPB.C:43
 AddTaskKStarPPB.C:44
 AddTaskKStarPPB.C:45
 AddTaskKStarPPB.C:46
 AddTaskKStarPPB.C:47
 AddTaskKStarPPB.C:48
 AddTaskKStarPPB.C:49
 AddTaskKStarPPB.C:50
 AddTaskKStarPPB.C:51
 AddTaskKStarPPB.C:52
 AddTaskKStarPPB.C:53
 AddTaskKStarPPB.C:54
 AddTaskKStarPPB.C:55
 AddTaskKStarPPB.C:56
 AddTaskKStarPPB.C:57
 AddTaskKStarPPB.C:58
 AddTaskKStarPPB.C:59
 AddTaskKStarPPB.C:60
 AddTaskKStarPPB.C:61
 AddTaskKStarPPB.C:62
 AddTaskKStarPPB.C:63
 AddTaskKStarPPB.C:64
 AddTaskKStarPPB.C:65
 AddTaskKStarPPB.C:66
 AddTaskKStarPPB.C:67
 AddTaskKStarPPB.C:68
 AddTaskKStarPPB.C:69
 AddTaskKStarPPB.C:70
 AddTaskKStarPPB.C:71
 AddTaskKStarPPB.C:72
 AddTaskKStarPPB.C:73
 AddTaskKStarPPB.C:74
 AddTaskKStarPPB.C:75
 AddTaskKStarPPB.C:76
 AddTaskKStarPPB.C:77
 AddTaskKStarPPB.C:78
 AddTaskKStarPPB.C:79
 AddTaskKStarPPB.C:80
 AddTaskKStarPPB.C:81
 AddTaskKStarPPB.C:82
 AddTaskKStarPPB.C:83
 AddTaskKStarPPB.C:84
 AddTaskKStarPPB.C:85
 AddTaskKStarPPB.C:86
 AddTaskKStarPPB.C:87
 AddTaskKStarPPB.C:88
 AddTaskKStarPPB.C:89
 AddTaskKStarPPB.C:90
 AddTaskKStarPPB.C:91
 AddTaskKStarPPB.C:92
 AddTaskKStarPPB.C:93
 AddTaskKStarPPB.C:94
 AddTaskKStarPPB.C:95
 AddTaskKStarPPB.C:96
 AddTaskKStarPPB.C:97
 AddTaskKStarPPB.C:98
 AddTaskKStarPPB.C:99
 AddTaskKStarPPB.C:100
 AddTaskKStarPPB.C:101
 AddTaskKStarPPB.C:102
 AddTaskKStarPPB.C:103
 AddTaskKStarPPB.C:104
 AddTaskKStarPPB.C:105
 AddTaskKStarPPB.C:106
 AddTaskKStarPPB.C:107
 AddTaskKStarPPB.C:108
 AddTaskKStarPPB.C:109
 AddTaskKStarPPB.C:110
 AddTaskKStarPPB.C:111
 AddTaskKStarPPB.C:112
 AddTaskKStarPPB.C:113
 AddTaskKStarPPB.C:114
 AddTaskKStarPPB.C:115
 AddTaskKStarPPB.C:116
 AddTaskKStarPPB.C:117
 AddTaskKStarPPB.C:118
 AddTaskKStarPPB.C:119
 AddTaskKStarPPB.C:120
 AddTaskKStarPPB.C:121
 AddTaskKStarPPB.C:122
 AddTaskKStarPPB.C:123
 AddTaskKStarPPB.C:124
 AddTaskKStarPPB.C:125
 AddTaskKStarPPB.C:126
 AddTaskKStarPPB.C:127
 AddTaskKStarPPB.C:128
 AddTaskKStarPPB.C:129
 AddTaskKStarPPB.C:130
 AddTaskKStarPPB.C:131
 AddTaskKStarPPB.C:132
 AddTaskKStarPPB.C:133
 AddTaskKStarPPB.C:134
 AddTaskKStarPPB.C:135
 AddTaskKStarPPB.C:136
 AddTaskKStarPPB.C:137
 AddTaskKStarPPB.C:138
 AddTaskKStarPPB.C:139
 AddTaskKStarPPB.C:140
 AddTaskKStarPPB.C:141
 AddTaskKStarPPB.C:142
 AddTaskKStarPPB.C:143
 AddTaskKStarPPB.C:144
 AddTaskKStarPPB.C:145
 AddTaskKStarPPB.C:146
 AddTaskKStarPPB.C:147
 AddTaskKStarPPB.C:148
 AddTaskKStarPPB.C:149
 AddTaskKStarPPB.C:150
 AddTaskKStarPPB.C:151
 AddTaskKStarPPB.C:152
 AddTaskKStarPPB.C:153
 AddTaskKStarPPB.C:154
 AddTaskKStarPPB.C:155
 AddTaskKStarPPB.C:156
 AddTaskKStarPPB.C:157
 AddTaskKStarPPB.C:158
 AddTaskKStarPPB.C:159
 AddTaskKStarPPB.C:160
 AddTaskKStarPPB.C:161
 AddTaskKStarPPB.C:162
 AddTaskKStarPPB.C:163
 AddTaskKStarPPB.C:164
 AddTaskKStarPPB.C:165
 AddTaskKStarPPB.C:166
 AddTaskKStarPPB.C:167
 AddTaskKStarPPB.C:168
 AddTaskKStarPPB.C:169
 AddTaskKStarPPB.C:170
 AddTaskKStarPPB.C:171
 AddTaskKStarPPB.C:172
 AddTaskKStarPPB.C:173
 AddTaskKStarPPB.C:174
 AddTaskKStarPPB.C:175
 AddTaskKStarPPB.C:176
 AddTaskKStarPPB.C:177
 AddTaskKStarPPB.C:178
 AddTaskKStarPPB.C:179
 AddTaskKStarPPB.C:180
 AddTaskKStarPPB.C:181
 AddTaskKStarPPB.C:182
 AddTaskKStarPPB.C:183
 AddTaskKStarPPB.C:184
 AddTaskKStarPPB.C:185
 AddTaskKStarPPB.C:186
 AddTaskKStarPPB.C:187
 AddTaskKStarPPB.C:188
 AddTaskKStarPPB.C:189
 AddTaskKStarPPB.C:190
 AddTaskKStarPPB.C:191
 AddTaskKStarPPB.C:192
 AddTaskKStarPPB.C:193
 AddTaskKStarPPB.C:194
 AddTaskKStarPPB.C:195
 AddTaskKStarPPB.C:196
 AddTaskKStarPPB.C:197
 AddTaskKStarPPB.C:198
 AddTaskKStarPPB.C:199
 AddTaskKStarPPB.C:200
 AddTaskKStarPPB.C:201
 AddTaskKStarPPB.C:202
 AddTaskKStarPPB.C:203
 AddTaskKStarPPB.C:204
 AddTaskKStarPPB.C:205
 AddTaskKStarPPB.C:206
 AddTaskKStarPPB.C:207
 AddTaskKStarPPB.C:208
 AddTaskKStarPPB.C:209
 AddTaskKStarPPB.C:210
 AddTaskKStarPPB.C:211
 AddTaskKStarPPB.C:212
 AddTaskKStarPPB.C:213
 AddTaskKStarPPB.C:214
 AddTaskKStarPPB.C:215
 AddTaskKStarPPB.C:216
 AddTaskKStarPPB.C:217
 AddTaskKStarPPB.C:218
 AddTaskKStarPPB.C:219
 AddTaskKStarPPB.C:220
 AddTaskKStarPPB.C:221
 AddTaskKStarPPB.C:222
 AddTaskKStarPPB.C:223
 AddTaskKStarPPB.C:224
 AddTaskKStarPPB.C:225
 AddTaskKStarPPB.C:226
 AddTaskKStarPPB.C:227
 AddTaskKStarPPB.C:228
 AddTaskKStarPPB.C:229
 AddTaskKStarPPB.C:230
 AddTaskKStarPPB.C:231
 AddTaskKStarPPB.C:232
 AddTaskKStarPPB.C:233
 AddTaskKStarPPB.C:234
 AddTaskKStarPPB.C:235
 AddTaskKStarPPB.C:236
 AddTaskKStarPPB.C:237
 AddTaskKStarPPB.C:238
 AddTaskKStarPPB.C:239
 AddTaskKStarPPB.C:240
 AddTaskKStarPPB.C:241
 AddTaskKStarPPB.C:242
 AddTaskKStarPPB.C:243
 AddTaskKStarPPB.C:244
 AddTaskKStarPPB.C:245
 AddTaskKStarPPB.C:246
 AddTaskKStarPPB.C:247
 AddTaskKStarPPB.C:248
 AddTaskKStarPPB.C:249
 AddTaskKStarPPB.C:250
 AddTaskKStarPPB.C:251
 AddTaskKStarPPB.C:252
 AddTaskKStarPPB.C:253