ROOT logo
AliAnalysisTask* AddTaskFilteredTree(TString outputFile="")
{
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libTENDER");
  gSystem->Load("libCORRFW");
  gSystem->Load("libPWGUDbase");
  gSystem->Load("libTPCcalib");
  gSystem->Load("libPWGPP");
  gSystem->Load("libPWGLFspectra");


  gRandom->SetSeed(0);

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

  if (!mgr) {
    Error("AddTaskFilteredTree", "No analysis manager found.");
    return 0;
  }

  // Switch off all AliInfo (too much output!!!)
  AliLog::SetGlobalLogLevel(AliLog::kError);
  mgr->SetDebugLevel(0);

  

  //
  // Create physics trigger selection class
  //
  //AliPhysicsSelection *physTrigSel =  new AliPhysicsSelection();

  //
  // Create event cuts
  //
  Float_t zvWindow = 30. ;

  AliFilteredTreeEventCuts *evtCuts = new AliFilteredTreeEventCuts("AliFilteredTreeEventCuts","Event cuts");
  evtCuts->SetZvRange(-zvWindow,zvWindow);
  evtCuts->SetMeanXYZv(0.0,0.0,0.0);
  evtCuts->SetSigmaMeanXYZv(1.0,1.0,10.0);
  evtCuts->SetTriggerRequired(kFALSE);
  //evtCuts->SetTriggerRequired(kTRUE);

  //
  // Create geom. acceptance cuts
  //
  Float_t etaWindow = 1.0 ;
  Float_t ptMin = 0.15 ;

  AliFilteredTreeAcceptanceCuts *accCuts = new AliFilteredTreeAcceptanceCuts("AliFilteredTreeAcceptanceCuts","Geom. acceptance cuts");
  accCuts->SetEtaRange(-etaWindow,etaWindow);
  accCuts->SetPtRange(ptMin,1.e10);
  accCuts->SetMaxDCAr(3.0);
  accCuts->SetMaxDCAz(30.0);

  //
  // Create standard esd track cuts
  //

  AliESDtrackCuts* esdTrackCuts = CreateCuts();
  if (!esdTrackCuts) {
    printf("ERROR: esdTrackCuts could not be created\n");
    return;
  } else {
    esdTrackCuts->SetHistogramsOn(kTRUE);
  }

  Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);

  //
  // Create task
  //
  AliAnalysisTaskFilteredTree *task = new AliAnalysisTaskFilteredTree("AliAnalysisTaskFilteredTree");
  //task->SetUseMCInfo(hasMC);
  //task->SetLowPtTrackDownscaligF(1.e4);
  //task->SetLowPtV0DownscaligF(1.e2);
  task->SetLowPtTrackDownscaligF(1.e5);
  task->SetLowPtV0DownscaligF(2.e3);
  task->SetProcessAll(kTRUE);
  task->SetProcessCosmics(kTRUE);
  //task->SetProcessAll(kFALSE);
  //task->SetFillTrees(kFALSE); // only histograms are filled

  // trigger
  //task->SelectCollisionCandidates(AliVEvent::kMB); 

  //
  // set analysis options from the Helper here !!!
  //
  // AlidNdPtHelper::OutputObject outputObject = AlidNdPtHelper::kCutAnalysisPbPb;
  // AlidNdPtHelper::ParticleMode particleMode = AlidNdPtHelper::kAllPart ;
  //AlidNdPtHelper::AnalysisMode analysisMode = AlidNdPtHelper::kTPCITS;

  task->SetEventCuts(evtCuts);
  task->SetAcceptanceCuts(accCuts);
  task->SetTrackCuts(esdTrackCuts);
  task->SetAnalysisMode(AliAnalysisTaskFilteredTree::kTPCITSAnalysisMode); 
  task->SetCentralityEstimator("V0M");
    
  // Add task
  mgr->AddTask(task);

  // Create containers for input
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  mgr->ConnectInput(task, 0, cinput);

  if (outputFile.IsNull())
    outputFile=Form("%s", AliAnalysisManager::GetCommonFileName());

  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("filtered1", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 1, coutput1);
  AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("filtered2", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 2, coutput2);
  AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("filtered3", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 3, coutput3);
  AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("filtered4", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 4, coutput4);
  AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("filtered5", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 5, coutput5);
  AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("filtered6", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
  mgr->ConnectOutput(task, 6, coutput6);


 // store histograms in the separate file
  TString outputFileHisto = "PtResHistograms.root";

  AliAnalysisDataContainer *coutput7 = mgr->CreateContainer("histo7", TList::Class(), AliAnalysisManager::kOutputContainer, outputFileHisto.Data());
  mgr->ConnectOutput(task, 7, coutput7);


  return task;
}

AliESDtrackCuts* CreateCuts(Bool_t fieldOn = kTRUE, Bool_t hists = kTRUE)
{
  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
  if(!esdTrackCuts) return 0;

  if (hists)
    esdTrackCuts->DefineHistograms(1);

  Double_t cov1, cov2, cov3, cov4, cov5;
  Double_t nSigma;
  Double_t maxDCAtoVertex, maxDCAtoVertexXY, maxDCAtoVertexZ;
  Double_t minNClustersTPC;
  Double_t maxChi2PerClusterTPC;
  Double_t minPt, maxPt;

  //
  // TPC
  //
  esdTrackCuts->SetRequireTPCRefit(kTRUE);
  esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
  //
  // ITS
  //
  //esdTrackCuts->SetRequireITSRefit(kTRUE);
  //esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
  //

  TString tag = "TPC+ITS refit and KinkRejection required - for cut studies";

  // cuts for data without field
  if (!fieldOn)
  {
    cov5 = 1e10;
    tag += " without field";
  }

  Printf("Created track cuts for: %s", tag.Data());

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