ROOT logo
/*  created by fbellini@cern.ch on 14/09/2010 */
/*  last modified by fbellini   on 11/11/2011 */

AliAnalysisTaskSE * AddTaskTOFQA(Bool_t flagEnableAdvancedCheck=kFALSE, 
				 UInt_t triggerMask = AliVEvent::kAnyINT,
				 Int_t trackCutSetTOFqa = 0,
				 TString cutName = "") 
{
  // Task for checking TOF QA
 
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTask", "No analysis manager to connect to.");
    return NULL;
  }   

  // Check the analysis type using the event handlers connected to the analysis manager.
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTask", "This task requires an input event handler");
    return NULL;
  }
  TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
  
  // Create the task
  AliAnalysisTaskTOFqa *task = new AliAnalysisTaskTOFqa("taskTOFqa");
  task->EnableAdvancedCheck(flagEnableAdvancedCheck);
  task->SelectCollisionCandidates(triggerMask);
  //AliLog::SetClassDebugLevel("AliAnalysisTaskTOFqa",1);
  mgr->AddTask(task);

  /* cuts used for QA in 2010 p-p */
    //Define track cut set
  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts", "TrackCutsTOFqa"); 
  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");

  if ( (trackCutSetTOFqa<0) || (trackCutSetTOFqa>=AliAnalysisTaskTOFqaID::kNCutSetTOFqa) ) trackCutSetTOFqa = 0;

  if ( trackCutSetTOFqa == AliAnalysisTaskTOFqaID::kRun1Cuts ) {
    //use track cuts used for QA during run1 (before July 2014)
    esdTrackCuts->SetMinNClustersTPC(70); 
    esdTrackCuts->SetMaxChi2PerClusterTPC(4);
    esdTrackCuts->SetAcceptKinkDaughters(kFALSE); 
    esdTrackCuts->SetRequireTPCRefit(kTRUE);
    esdTrackCuts->SetRequireITSRefit(kTRUE);
    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
					   AliESDtrackCuts::kAny);
    esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");//selects primaries
    esdTrackCuts->SetMaxDCAToVertexZ(2);
    esdTrackCuts->SetDCAToVertex2D(kFALSE);
    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
  } else {
    if ( trackCutSetTOFqa == AliAnalysisTaskTOFqaID::kStd2010 ) esdTrackCuts->GetStandardITSTPCTrackCuts2010(kTRUE,0);
    if ( trackCutSetTOFqa == AliAnalysisTaskTOFqaID::kStd2010crossedRows ) esdTrackCuts->GetStandardITSTPCTrackCuts2010(kTRUE,1);
    if ( trackCutSetTOFqa == AliAnalysisTaskTOFqaID::kStd2011) esdTrackCuts->GetStandardITSTPCTrackCuts2011(kTRUE,0); 
    if ( trackCutSetTOFqa == AliAnalysisTaskTOFqaID::kStd2011crossedRows ) esdTrackCuts->GetStandardITSTPCTrackCuts2011(kTRUE,1);
  }
  
  trackFilter->AddCuts(esdTrackCuts);
  task->SetTrackFilter(trackFilter); 
  
  // Create containers for input/output
  AliAnalysisDataContainer *cInputTOFqa = mgr->CreateContainer("cInputTOFqa",TChain::Class(),AliAnalysisManager::kInputContainer);
  AliAnalysisDataContainer *cGeneralTOFqa = mgr->CreateContainer(Form("cGeneralTOFqa%s",cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF_Performance",mgr->GetCommonFileName()));
  AliAnalysisDataContainer *cTimeZeroTOFqa = mgr->CreateContainer(Form("cTimeZeroTOFqa%s",cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF_Performance",mgr->GetCommonFileName()));
  AliAnalysisDataContainer *cPIDTOFqa = mgr->CreateContainer(Form("cPIDTOFqa%s",cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF_Performance",mgr->GetCommonFileName()));
  AliAnalysisDataContainer *cPosTracksTOFqa = mgr->CreateContainer(Form("cPosTracksTOFqa%s",cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF_Performance",mgr->GetCommonFileName()));
  AliAnalysisDataContainer *cNegTracksTOFqa = mgr->CreateContainer(Form("cNegTracksTOFqa%s",cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF_Performance",mgr->GetCommonFileName()));

  // Attach i/o
  mgr->ConnectInput(task, 0,mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task, 1, cGeneralTOFqa);
  mgr->ConnectOutput(task, 2, cTimeZeroTOFqa);
  mgr->ConnectOutput(task, 3, cPIDTOFqa);
  mgr->ConnectOutput(task, 4, cPosTracksTOFqa);
  mgr->ConnectOutput(task, 5, cNegTracksTOFqa);
  return task;
}
 AddTaskTOFQA.C:1
 AddTaskTOFQA.C:2
 AddTaskTOFQA.C:3
 AddTaskTOFQA.C:4
 AddTaskTOFQA.C:5
 AddTaskTOFQA.C:6
 AddTaskTOFQA.C:7
 AddTaskTOFQA.C:8
 AddTaskTOFQA.C:9
 AddTaskTOFQA.C:10
 AddTaskTOFQA.C:11
 AddTaskTOFQA.C:12
 AddTaskTOFQA.C:13
 AddTaskTOFQA.C:14
 AddTaskTOFQA.C:15
 AddTaskTOFQA.C:16
 AddTaskTOFQA.C:17
 AddTaskTOFQA.C:18
 AddTaskTOFQA.C:19
 AddTaskTOFQA.C:20
 AddTaskTOFQA.C:21
 AddTaskTOFQA.C:22
 AddTaskTOFQA.C:23
 AddTaskTOFQA.C:24
 AddTaskTOFQA.C:25
 AddTaskTOFQA.C:26
 AddTaskTOFQA.C:27
 AddTaskTOFQA.C:28
 AddTaskTOFQA.C:29
 AddTaskTOFQA.C:30
 AddTaskTOFQA.C:31
 AddTaskTOFQA.C:32
 AddTaskTOFQA.C:33
 AddTaskTOFQA.C:34
 AddTaskTOFQA.C:35
 AddTaskTOFQA.C:36
 AddTaskTOFQA.C:37
 AddTaskTOFQA.C:38
 AddTaskTOFQA.C:39
 AddTaskTOFQA.C:40
 AddTaskTOFQA.C:41
 AddTaskTOFQA.C:42
 AddTaskTOFQA.C:43
 AddTaskTOFQA.C:44
 AddTaskTOFQA.C:45
 AddTaskTOFQA.C:46
 AddTaskTOFQA.C:47
 AddTaskTOFQA.C:48
 AddTaskTOFQA.C:49
 AddTaskTOFQA.C:50
 AddTaskTOFQA.C:51
 AddTaskTOFQA.C:52
 AddTaskTOFQA.C:53
 AddTaskTOFQA.C:54
 AddTaskTOFQA.C:55
 AddTaskTOFQA.C:56
 AddTaskTOFQA.C:57
 AddTaskTOFQA.C:58
 AddTaskTOFQA.C:59
 AddTaskTOFQA.C:60
 AddTaskTOFQA.C:61
 AddTaskTOFQA.C:62
 AddTaskTOFQA.C:63
 AddTaskTOFQA.C:64
 AddTaskTOFQA.C:65
 AddTaskTOFQA.C:66
 AddTaskTOFQA.C:67
 AddTaskTOFQA.C:68
 AddTaskTOFQA.C:69
 AddTaskTOFQA.C:70
 AddTaskTOFQA.C:71
 AddTaskTOFQA.C:72
 AddTaskTOFQA.C:73
 AddTaskTOFQA.C:74
 AddTaskTOFQA.C:75
 AddTaskTOFQA.C:76
 AddTaskTOFQA.C:77
 AddTaskTOFQA.C:78