ROOT logo
AliAnalysisTask* AddTask(Bool_t AnalysisMC, const Char_t* taskname, Int_t typerun,  UInt_t kTriggerInt[], Float_t minc[], Float_t maxc[] )
{
  // Creates a pid task and adds it to the analysis manager
  
  // 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);

  
  //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

    AliAnalysisTaskHighPtDeDxV0* taskHighPtDeDxV0[6];
    for( Int_t i=0; i<6; ++i ){
      taskHighPtDeDxV0[i]=0;
      Char_t TaskName[256]={0};
      sprintf(TaskName,"%s_%1.0f_%1.0f",taskname,minc[i],maxc[i]);
      
      taskHighPtDeDxV0[i] = new AliAnalysisTaskHighPtDeDxV0(TaskName);
      TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
      
      taskHighPtDeDxV0[i]->SetAnalysisType(type);
      taskHighPtDeDxV0[i]->SetAnalysisMC(AnalysisMC);
      taskHighPtDeDxV0[i]->SetAnalysisPbPb(kTRUE);
      taskHighPtDeDxV0[i]->SetProduceTPCBranch(kFALSE);
      taskHighPtDeDxV0[i]->SetDebugLevel(0);
      taskHighPtDeDxV0[i]->SetEtaCut(0.8);
      taskHighPtDeDxV0[i]->SetVtxCut(10.0);
      taskHighPtDeDxV0[i]->SetMinPt(0.0);           // def: 2.0
      taskHighPtDeDxV0[i]->SetMassCut(0.1);         // def: 0.03
      taskHighPtDeDxV0[i]->SetTreeOption(1);
      taskHighPtDeDxV0[i]->SetRequireRecV0(kFALSE); // def: kTRUE
      taskHighPtDeDxV0[i]->SetStoreMcIn(kTRUE);     // def: kFALSE
      taskHighPtDeDxV0[i]->SetTrigger1(kTriggerInt[0]);
      taskHighPtDeDxV0[i]->SetTrigger2(kTriggerInt[1]);
      taskHighPtDeDxV0[i]->SetMinCent(minc[i]);
      taskHighPtDeDxV0[i]->SetMaxCent(maxc[i]);
      //Set Filtesr
      taskHighPtDeDxV0[i]->SetTrackFilterGolden(trackFilterGolden);
      taskHighPtDeDxV0[i]->SetTrackFilter(trackFilter0);
      taskHighPtDeDxV0[i]->SetTrackFilterTPC(trackFilterTPC);
      
      mgr->AddTask(taskHighPtDeDxV0[i]);
      
      
    }
    
    // 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[6];
    for( Int_t i=0; i<6; ++i ){
      
      cout_hist[i]=0;
      Char_t outFileName[256]={0};
      sprintf(outFileName,"%s_Tree_%1.0f_%1.0f.root",taskname,minc[i],maxc[i]);
      //AliAnalysisDataContainer *cout_hist    = 0;
      
      cout_hist[i] = mgr->CreateContainer(Form("output_%1.0f_%1.0f",minc[i],maxc[i]), TList::Class(), AliAnalysisManager::kOutputContainer, outFileName);
      mgr->ConnectInput (taskHighPtDeDxV0[i], 0, mgr->GetCommonInputContainer());
      mgr->ConnectOutput(taskHighPtDeDxV0[i], 1, cout_hist[i]);
      
    }  
    
    // Return task pointer at the end
    return taskHighPtDeDxV0[0];
  }
  
  if(typerun==3){//pp analysis

    AliAnalysisTaskHighPtDeDxV0* taskHighPtDeDxV0 = new AliAnalysisTaskHighPtDeDxV0("taskHighPtDeDxV0pp");
    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
    
    taskHighPtDeDxV0->SetAnalysisType(type);
    taskHighPtDeDxV0->SetAnalysisMC(AnalysisMC);
    taskHighPtDeDxV0->SetAnalysisPbPb(kFALSE);
    taskHighPtDeDxV0->SetProduceTPCBranch(kFALSE);
    taskHighPtDeDxV0->SetDebugLevel(0);
    taskHighPtDeDxV0->SetEtaCut(0.8);
    taskHighPtDeDxV0->SetVtxCut(10.0);
    taskHighPtDeDxV0->SetMinPt(0.0);           // def: 2.0
    taskHighPtDeDxV0->SetMassCut(0.03);         // def: 0.03
    taskHighPtDeDxV0->SetTreeOption(1);
    taskHighPtDeDxV0->SetRequireRecV0(kTRUE); // def: kTRUE
    taskHighPtDeDxV0->SetStoreMcIn(kFALSE);     // def: kFALSE
    taskHighPtDeDxV0->SetTrigger1(kTriggerInt[0]);
    taskHighPtDeDxV0->SetTrigger2(kTriggerInt[1]);
    //Set Filtesr
    taskHighPtDeDxV0->SetTrackFilterGolden(trackFilterGolden);
    taskHighPtDeDxV0->SetTrackFilter(trackFilter0);
    taskHighPtDeDxV0->SetTrackFilterTPC(trackFilterTPC);
    
    mgr->AddTask(taskHighPtDeDxV0);
      
   
    
    // 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_histdedxv0;

    cout_histdedxv0=0;
    Char_t outFileName[256]={0};
    sprintf(outFileName,"%s_Tree.root",taskname);
    //AliAnalysisDataContainer *cout_hist    = 0;
    
    cout_histdedxv0 = mgr->CreateContainer("output", TList::Class(), AliAnalysisManager::kOutputContainer, outFileName);
    mgr->ConnectInput (taskHighPtDeDxV0, 0, mgr->GetCommonInputContainer());
    mgr->ConnectOutput(taskHighPtDeDxV0, 1, cout_histdedxv0);
    
    // Return task pointer at the end
    return taskHighPtDeDxV0;


  }






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