ROOT logo
/*
  Last update: 26/03/2012, vzero branch, in PbPb macro execute the vzero code, a bug was fixed 
  New modifications: 08/10/2014 - more modularity 
*/

AliAnalysisTaskHighPtDeDx* AddTaskHighPtDeDx(Bool_t AnalysisMC, const Char_t* taskname, Int_t typerun, Float_t minc, Float_t maxc )
{
  // Creates a pid task and adds it to the analysis manager
  UInt_t kTriggerInt[2] = { AliVEvent::kMB, AliVEvent::kCentral + AliVEvent::kSemiCentral };
    
  // Get the pointer to the existing analysis manager via the static
  //access method
  //=========================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    Error("AddTaskHighPtDeDx", "No analysis manager to connect to.");
    return NULL;
  }  
  
  // Check the analysis type using the event handlers connected to the
  // analysis manager The availability of MC handler can also be
  // checked here.
  // =========================================================================
  if (!mgr->GetInputEventHandler()) {
    Error("AddTaskHighPtDeDx", "This task requires an input event handler");
    return NULL;
  }  
  


  //
  // Add track filters, with Golden Cuts
  //
  /*
  AliAnalysisFilter* trackFilterGolden = new AliAnalysisFilter("trackFilter");
  AliESDtrackCuts* esdTrackCutsGolden = 
    AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
  trackFilterGolden->AddCuts(esdTrackCutsGolden);
  */

  AliAnalysisFilter* trackFilterGolden = new AliAnalysisFilter("trackFilter");
  AliESDtrackCuts* esdTrackCutsGolden = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
  esdTrackCutsGolden->SetMinNCrossedRowsTPC(120);
  esdTrackCutsGolden->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
  esdTrackCutsGolden->SetMaxChi2PerClusterITS(36);
  esdTrackCutsGolden->SetMaxFractionSharedTPCClusters(0.4);
  esdTrackCutsGolden->SetMaxChi2TPCConstrainedGlobal(36);
  esdTrackCutsGolden->SetMaxDCAToVertexXY(3.0);


  trackFilterGolden->AddCuts(esdTrackCutsGolden);


  
  //old cuts without golden cut
  AliAnalysisFilter* trackFilter0 = new AliAnalysisFilter("trackFilter");
  Bool_t clusterCut=0;
  Bool_t selPrimaries=kTRUE;
  AliESDtrackCuts* esdTrackCutsL0 = new AliESDtrackCuts;
 // TPC  
  if(clusterCut == 0)  esdTrackCutsL0->SetMinNClustersTPC(70);
  else if (clusterCut == 1) {
    esdTrackCutsL0->SetMinNCrossedRowsTPC(70);
    esdTrackCutsL0->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
  }
  else {
    AliWarningClass(Form("Wrong value of the clusterCut parameter (%d), using cut on Nclusters",clusterCut));
    esdTrackCutsL0->SetMinNClustersTPC(70);
  }
  esdTrackCutsL0->SetMaxChi2PerClusterTPC(4);
  esdTrackCutsL0->SetAcceptKinkDaughters(kFALSE);
  esdTrackCutsL0->SetRequireTPCRefit(kTRUE);
  // ITS
  esdTrackCutsL0->SetRequireITSRefit(kTRUE);
  esdTrackCutsL0->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
					 AliESDtrackCuts::kAny);
  if(selPrimaries) {
    // 7*(0.0026+0.0050/pt^1.01)
    esdTrackCutsL0->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
  }
  esdTrackCutsL0->SetMaxDCAToVertexZ(2);
  esdTrackCutsL0->SetDCAToVertex2D(kFALSE);
  esdTrackCutsL0->SetRequireSigmaToVertex(kFALSE);
  esdTrackCutsL0->SetMaxChi2PerClusterITS(1e10);
  esdTrackCutsL0->SetMaxChi2TPCConstrainedGlobal(1e10);


  trackFilter0->AddCuts(esdTrackCutsL0);

  
  
  AliAnalysisFilter* trackFilterTPC = new AliAnalysisFilter("trackFilterTPC");
  AliESDtrackCuts* esdTrackCutsTPC = 
  AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
  trackFilterTPC->AddCuts(esdTrackCutsTPC);

  // Create the task and configure it 
  //========================================================================
  if(typerun==2){//heavy ion analysis
        
    AliAnalysisTaskHighPtDeDx* taskHighPtDeDx;
    taskHighPtDeDx=0;
    Char_t TaskName[256]={0};
    sprintf(TaskName,"%s_%1.0f_%1.0f",taskname,minc,maxc);
     
    taskHighPtDeDx = new AliAnalysisTaskHighPtDeDx(TaskName);
    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
    taskHighPtDeDx->SetAnalysisType(type);
    taskHighPtDeDx->SetAnalysisMC(AnalysisMC);
    taskHighPtDeDx->SetAnalysisPbPb(kTRUE);
    taskHighPtDeDx->SetProduceVZEROBranch(kTRUE);
    taskHighPtDeDx->SetProduceTPCBranch(kFALSE);
    taskHighPtDeDx->SetDebugLevel(0);
    taskHighPtDeDx->SetEtaCut(0.8);
    taskHighPtDeDx->SetVtxCut(10.0);
    taskHighPtDeDx->SetMinPt(0.0); // default 2.0
    taskHighPtDeDx->SetLowPtFraction(0.01); // keep 1% of tracks below min pt
    taskHighPtDeDx->SetTreeOption(1);
    taskHighPtDeDx->SetTrigger1(kTriggerInt[0]);
    taskHighPtDeDx->SetTrigger2(kTriggerInt[1]);
    taskHighPtDeDx->SetMinCent(minc);
    taskHighPtDeDx->SetMaxCent(maxc);
    //Set Filtesr
    taskHighPtDeDx->SetTrackFilterGolden(trackFilterGolden);
    taskHighPtDeDx->SetTrackFilter(trackFilter0);
    taskHighPtDeDx->SetTrackFilterTPC(trackFilterTPC);
     
    //V0's cuts
    taskHighPtDeDx->SetMassCut(0.1);         // def: 0.03
    taskHighPtDeDx->SetRequireRecV0(kTRUE); // def: kTRUE
    taskHighPtDeDx->SetStoreMcIn(kTRUE);     // def: kFALSE

    mgr->AddTask(taskHighPtDeDx);
    
    // Create ONLY the output containers for the data produced by the
    // task.  Get and connect other common input/output containers via
    // the manager as below
    //=======================================================================
    AliAnalysisDataContainer *cout_hist;
    cout_hist=0;
    
    TString outputFileName = AliAnalysisManager::GetCommonFileName();
    
    //Arrangements for subdirectories (not implemented yet) 
    //outputFileName += ":PWGLF_StrVsMult";
    //if (mgr->GetMCtruthEventHandler()) outputFileName += "_MC";
     
    cout_hist = mgr->CreateContainer(Form("output_%1.0f_%1.0f",minc,maxc), TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
    mgr->ConnectInput (taskHighPtDeDx, 0, mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskHighPtDeDx, 1, cout_hist);
    
    // Return task pointer at the end
    return taskHighPtDeDx;
  }
}
 AddTaskHighPtDeDx.C:1
 AddTaskHighPtDeDx.C:2
 AddTaskHighPtDeDx.C:3
 AddTaskHighPtDeDx.C:4
 AddTaskHighPtDeDx.C:5
 AddTaskHighPtDeDx.C:6
 AddTaskHighPtDeDx.C:7
 AddTaskHighPtDeDx.C:8
 AddTaskHighPtDeDx.C:9
 AddTaskHighPtDeDx.C:10
 AddTaskHighPtDeDx.C:11
 AddTaskHighPtDeDx.C:12
 AddTaskHighPtDeDx.C:13
 AddTaskHighPtDeDx.C:14
 AddTaskHighPtDeDx.C:15
 AddTaskHighPtDeDx.C:16
 AddTaskHighPtDeDx.C:17
 AddTaskHighPtDeDx.C:18
 AddTaskHighPtDeDx.C:19
 AddTaskHighPtDeDx.C:20
 AddTaskHighPtDeDx.C:21
 AddTaskHighPtDeDx.C:22
 AddTaskHighPtDeDx.C:23
 AddTaskHighPtDeDx.C:24
 AddTaskHighPtDeDx.C:25
 AddTaskHighPtDeDx.C:26
 AddTaskHighPtDeDx.C:27
 AddTaskHighPtDeDx.C:28
 AddTaskHighPtDeDx.C:29
 AddTaskHighPtDeDx.C:30
 AddTaskHighPtDeDx.C:31
 AddTaskHighPtDeDx.C:32
 AddTaskHighPtDeDx.C:33
 AddTaskHighPtDeDx.C:34
 AddTaskHighPtDeDx.C:35
 AddTaskHighPtDeDx.C:36
 AddTaskHighPtDeDx.C:37
 AddTaskHighPtDeDx.C:38
 AddTaskHighPtDeDx.C:39
 AddTaskHighPtDeDx.C:40
 AddTaskHighPtDeDx.C:41
 AddTaskHighPtDeDx.C:42
 AddTaskHighPtDeDx.C:43
 AddTaskHighPtDeDx.C:44
 AddTaskHighPtDeDx.C:45
 AddTaskHighPtDeDx.C:46
 AddTaskHighPtDeDx.C:47
 AddTaskHighPtDeDx.C:48
 AddTaskHighPtDeDx.C:49
 AddTaskHighPtDeDx.C:50
 AddTaskHighPtDeDx.C:51
 AddTaskHighPtDeDx.C:52
 AddTaskHighPtDeDx.C:53
 AddTaskHighPtDeDx.C:54
 AddTaskHighPtDeDx.C:55
 AddTaskHighPtDeDx.C:56
 AddTaskHighPtDeDx.C:57
 AddTaskHighPtDeDx.C:58
 AddTaskHighPtDeDx.C:59
 AddTaskHighPtDeDx.C:60
 AddTaskHighPtDeDx.C:61
 AddTaskHighPtDeDx.C:62
 AddTaskHighPtDeDx.C:63
 AddTaskHighPtDeDx.C:64
 AddTaskHighPtDeDx.C:65
 AddTaskHighPtDeDx.C:66
 AddTaskHighPtDeDx.C:67
 AddTaskHighPtDeDx.C:68
 AddTaskHighPtDeDx.C:69
 AddTaskHighPtDeDx.C:70
 AddTaskHighPtDeDx.C:71
 AddTaskHighPtDeDx.C:72
 AddTaskHighPtDeDx.C:73
 AddTaskHighPtDeDx.C:74
 AddTaskHighPtDeDx.C:75
 AddTaskHighPtDeDx.C:76
 AddTaskHighPtDeDx.C:77
 AddTaskHighPtDeDx.C:78
 AddTaskHighPtDeDx.C:79
 AddTaskHighPtDeDx.C:80
 AddTaskHighPtDeDx.C:81
 AddTaskHighPtDeDx.C:82
 AddTaskHighPtDeDx.C:83
 AddTaskHighPtDeDx.C:84
 AddTaskHighPtDeDx.C:85
 AddTaskHighPtDeDx.C:86
 AddTaskHighPtDeDx.C:87
 AddTaskHighPtDeDx.C:88
 AddTaskHighPtDeDx.C:89
 AddTaskHighPtDeDx.C:90
 AddTaskHighPtDeDx.C:91
 AddTaskHighPtDeDx.C:92
 AddTaskHighPtDeDx.C:93
 AddTaskHighPtDeDx.C:94
 AddTaskHighPtDeDx.C:95
 AddTaskHighPtDeDx.C:96
 AddTaskHighPtDeDx.C:97
 AddTaskHighPtDeDx.C:98
 AddTaskHighPtDeDx.C:99
 AddTaskHighPtDeDx.C:100
 AddTaskHighPtDeDx.C:101
 AddTaskHighPtDeDx.C:102
 AddTaskHighPtDeDx.C:103
 AddTaskHighPtDeDx.C:104
 AddTaskHighPtDeDx.C:105
 AddTaskHighPtDeDx.C:106
 AddTaskHighPtDeDx.C:107
 AddTaskHighPtDeDx.C:108
 AddTaskHighPtDeDx.C:109
 AddTaskHighPtDeDx.C:110
 AddTaskHighPtDeDx.C:111
 AddTaskHighPtDeDx.C:112
 AddTaskHighPtDeDx.C:113
 AddTaskHighPtDeDx.C:114
 AddTaskHighPtDeDx.C:115
 AddTaskHighPtDeDx.C:116
 AddTaskHighPtDeDx.C:117
 AddTaskHighPtDeDx.C:118
 AddTaskHighPtDeDx.C:119
 AddTaskHighPtDeDx.C:120
 AddTaskHighPtDeDx.C:121
 AddTaskHighPtDeDx.C:122
 AddTaskHighPtDeDx.C:123
 AddTaskHighPtDeDx.C:124
 AddTaskHighPtDeDx.C:125
 AddTaskHighPtDeDx.C:126
 AddTaskHighPtDeDx.C:127
 AddTaskHighPtDeDx.C:128
 AddTaskHighPtDeDx.C:129
 AddTaskHighPtDeDx.C:130
 AddTaskHighPtDeDx.C:131
 AddTaskHighPtDeDx.C:132
 AddTaskHighPtDeDx.C:133
 AddTaskHighPtDeDx.C:134
 AddTaskHighPtDeDx.C:135
 AddTaskHighPtDeDx.C:136
 AddTaskHighPtDeDx.C:137
 AddTaskHighPtDeDx.C:138
 AddTaskHighPtDeDx.C:139
 AddTaskHighPtDeDx.C:140
 AddTaskHighPtDeDx.C:141
 AddTaskHighPtDeDx.C:142
 AddTaskHighPtDeDx.C:143
 AddTaskHighPtDeDx.C:144
 AddTaskHighPtDeDx.C:145
 AddTaskHighPtDeDx.C:146
 AddTaskHighPtDeDx.C:147
 AddTaskHighPtDeDx.C:148
 AddTaskHighPtDeDx.C:149
 AddTaskHighPtDeDx.C:150
 AddTaskHighPtDeDx.C:151
 AddTaskHighPtDeDx.C:152
 AddTaskHighPtDeDx.C:153
 AddTaskHighPtDeDx.C:154
 AddTaskHighPtDeDx.C:155
 AddTaskHighPtDeDx.C:156