ROOT logo
/*  created by fbellini@cern.ch on 29/04/2013 */
/*  last modified by fbellini   on 29/04/2013 */

// UInt_t kTriggerMuonAll = AliVEvent::kMUL7 | AliVEvent::kMUSH7 | AliVEvent::kMUU7 | AliVEvent::kMUS7;
// UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
// UInt_t kTriggerEMC   = AliVEvent::kEMC7;
// UInt_t kTriggerHM   = AliVEvent::kHighMult;
// UInt_t kTriggerInt = AliVEvent::kAnyINT;
// UInt_t kTriggerMask = kTriggerInt;

AliAnalysisTaskSE * AddTaskTOFqaID(Bool_t flagEnableAdvancedCheck = kFALSE, 
				   UInt_t triggerMask = AliVEvent::kAnyINT, 
				   Int_t trackCutSetTOFqa = 0, 
				   Bool_t flagEnableChargeSplit = kFALSE,
				   TString cutName = "",
				   Bool_t isMC = kFALSE, 
				   Short_t absPdgCode = 0) 
{
  // 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"
 
  if (isMC && (absPdgCode<0)) {
    ::Error("AddTask","Invalid selected PDG code for MC. Set absPdgCode=0 for no specie selection.");
  }
 
  // Create the task
  AliAnalysisTaskTOFqaID *task = new AliAnalysisTaskTOFqaID(Form("taskTOFqaID_%i",absPdgCode));
  task->EnableAdvancedCheck(flagEnableAdvancedCheck);
  task->EnableChargeSplit(flagEnableChargeSplit);
  task->SetSelectMCspecies(isMC, absPdgCode);
  task->SelectCollisionCandidates(triggerMask);
  //AliLog::SetClassDebugLevel("AliAnalysisTaskTOFqaID",4);
  mgr->AddTask(task);

  //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); 
  
  TString partName(task->GetSpeciesName(absPdgCode));
 
  // Create containers for input/output
  AliAnalysisDataContainer *cInputTOFqa = mgr->CreateContainer("cInputTOFqa", TChain::Class(),AliAnalysisManager::kInputContainer);
  AliAnalysisDataContainer *cGeneralTOFqa = mgr->CreateContainer(Form("base_%s%s",partName.Data(),cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF",mgr->GetCommonFileName(), partName.Data()));
  AliAnalysisDataContainer *cTimeZeroTOFqa = mgr->CreateContainer(Form("timeZero_%s%s",partName.Data(),cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF",mgr->GetCommonFileName(),partName.Data()));
   AliAnalysisDataContainer *cPIDTOFqa = mgr->CreateContainer(Form("pid_%s%s",partName.Data(),cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF",mgr->GetCommonFileName(),partName.Data()));
   AliAnalysisDataContainer *cTRDcheckTOFqa = mgr->CreateContainer(Form("trd_%s%s",partName.Data(),cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF",mgr->GetCommonFileName(),partName.Data()));
   AliAnalysisDataContainer *cTriggerTOFqa = mgr->CreateContainer(Form("trigger_%s%s",partName.Data(),cutName.Data()),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:TOF",mgr->GetCommonFileName(),partName.Data()));

  // 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, cTRDcheckTOFqa);
  mgr->ConnectOutput(task, 5, cTriggerTOFqa);
  return task;
}
 AddTaskTOFqaID.C:1
 AddTaskTOFqaID.C:2
 AddTaskTOFqaID.C:3
 AddTaskTOFqaID.C:4
 AddTaskTOFqaID.C:5
 AddTaskTOFqaID.C:6
 AddTaskTOFqaID.C:7
 AddTaskTOFqaID.C:8
 AddTaskTOFqaID.C:9
 AddTaskTOFqaID.C:10
 AddTaskTOFqaID.C:11
 AddTaskTOFqaID.C:12
 AddTaskTOFqaID.C:13
 AddTaskTOFqaID.C:14
 AddTaskTOFqaID.C:15
 AddTaskTOFqaID.C:16
 AddTaskTOFqaID.C:17
 AddTaskTOFqaID.C:18
 AddTaskTOFqaID.C:19
 AddTaskTOFqaID.C:20
 AddTaskTOFqaID.C:21
 AddTaskTOFqaID.C:22
 AddTaskTOFqaID.C:23
 AddTaskTOFqaID.C:24
 AddTaskTOFqaID.C:25
 AddTaskTOFqaID.C:26
 AddTaskTOFqaID.C:27
 AddTaskTOFqaID.C:28
 AddTaskTOFqaID.C:29
 AddTaskTOFqaID.C:30
 AddTaskTOFqaID.C:31
 AddTaskTOFqaID.C:32
 AddTaskTOFqaID.C:33
 AddTaskTOFqaID.C:34
 AddTaskTOFqaID.C:35
 AddTaskTOFqaID.C:36
 AddTaskTOFqaID.C:37
 AddTaskTOFqaID.C:38
 AddTaskTOFqaID.C:39
 AddTaskTOFqaID.C:40
 AddTaskTOFqaID.C:41
 AddTaskTOFqaID.C:42
 AddTaskTOFqaID.C:43
 AddTaskTOFqaID.C:44
 AddTaskTOFqaID.C:45
 AddTaskTOFqaID.C:46
 AddTaskTOFqaID.C:47
 AddTaskTOFqaID.C:48
 AddTaskTOFqaID.C:49
 AddTaskTOFqaID.C:50
 AddTaskTOFqaID.C:51
 AddTaskTOFqaID.C:52
 AddTaskTOFqaID.C:53
 AddTaskTOFqaID.C:54
 AddTaskTOFqaID.C:55
 AddTaskTOFqaID.C:56
 AddTaskTOFqaID.C:57
 AddTaskTOFqaID.C:58
 AddTaskTOFqaID.C:59
 AddTaskTOFqaID.C:60
 AddTaskTOFqaID.C:61
 AddTaskTOFqaID.C:62
 AddTaskTOFqaID.C:63
 AddTaskTOFqaID.C:64
 AddTaskTOFqaID.C:65
 AddTaskTOFqaID.C:66
 AddTaskTOFqaID.C:67
 AddTaskTOFqaID.C:68
 AddTaskTOFqaID.C:69
 AddTaskTOFqaID.C:70
 AddTaskTOFqaID.C:71
 AddTaskTOFqaID.C:72
 AddTaskTOFqaID.C:73
 AddTaskTOFqaID.C:74
 AddTaskTOFqaID.C:75
 AddTaskTOFqaID.C:76
 AddTaskTOFqaID.C:77
 AddTaskTOFqaID.C:78
 AddTaskTOFqaID.C:79
 AddTaskTOFqaID.C:80
 AddTaskTOFqaID.C:81
 AddTaskTOFqaID.C:82
 AddTaskTOFqaID.C:83
 AddTaskTOFqaID.C:84
 AddTaskTOFqaID.C:85
 AddTaskTOFqaID.C:86
 AddTaskTOFqaID.C:87
 AddTaskTOFqaID.C:88
 AddTaskTOFqaID.C:89
 AddTaskTOFqaID.C:90
 AddTaskTOFqaID.C:91
 AddTaskTOFqaID.C:92
 AddTaskTOFqaID.C:93
 AddTaskTOFqaID.C:94
 AddTaskTOFqaID.C:95