- Added classes and macros for TPC PID calibration
[u/mrichter/AliRoot.git] / PWGPP / TPC / macros / AddTaskTPCPIDEtaTree.C
1 AliAnalysisTask *AddTaskTPCPIDEtaTree(Bool_t correctdEdxEtaDependence = kFALSE, Bool_t correctdEdxMultiplicityDependence = kFALSE,
2                                       Bool_t setDoAdditionalQA = kFALSE, Bool_t useTPCCutMIGeo = kTRUE, Bool_t usePhiCut = kFALSE){
3   //get the current analysis manager
4   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
5   if (!mgr) {
6     Error("AddTask_bhess_PIDetaTree", "No analysis manager found.");
7     return 0;
8   }
9   
10   //========= Add task to the ANALYSIS manager =====
11   AliTPCPIDEtaTree *task = new AliTPCPIDEtaTree("TPCPIDEtaTree");
12   task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kINT7);
13   
14   //
15   // Add track filters
16   //
17   AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
18   AliESDtrackCuts* esdTrackCutsL = 0x0;
19   
20   printf("\nSettings:\n");
21   TString listOfFiles = gSystem->Getenv("LIST");
22   if (listOfFiles.Contains("LHC11") || listOfFiles.Contains("LHC12") || listOfFiles.Contains("LHC13")) {
23     esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
24     printf("Using standard ITS-TPC track cuts 2011.\n");
25   }
26   else if (listOfFiles.Contains("LHC10")) {
27     esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
28     printf("Using standard ITS-TPC track cuts 2010.\n");
29   }
30   else  {
31     esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
32     printf("WARNING: Cuts not configured for this period!!! Using standard ITS-TPC track cuts 2011\n");
33   }
34   
35   if (listOfFiles.Contains("PbPb") || listOfFiles.Contains("pPb") || listOfFiles.Contains("Pbp")) {
36     task->SetStoreMultiplicity(kTRUE);
37     printf("PbPb, pPb or Pbp detected -> Storing multiplicity in tree!\n");
38   }
39   else  {
40     task->SetStoreMultiplicity(kFALSE);
41     printf("pp detected -> NOT storing multiplicity in tree!\n");
42   }
43   
44   
45   // Test whether we have pPb or Pbp
46   if (listOfFiles.Contains("pPb") || listOfFiles.Contains("Pbp")) {
47     task->SetIsPbpOrpPb(kTRUE);
48     printf("pPb/Pbp detected -> Adapting vertex cuts!\n");
49   }
50   else  {
51     task->SetIsPbpOrpPb(kFALSE);
52     printf("Collision type different from pPb/Pbp detected -> Using standard vertex cuts!\n");
53   }
54   
55   
56   trackFilter->AddCuts(esdTrackCutsL);
57   task->SetTrackFilter(trackFilter);
58   task->SetUsePhiCut(usePhiCut);
59   task->SetUseTPCCutMIGeo(useTPCCutMIGeo);
60   
61   printf("UsePhiCut: %d\n", task->GetUsePhiCut());
62   printf("UseTPCCutMIGeo: %d\n", task->GetUseTPCCutMIGeo());
63   
64   
65   task->SetDoAdditionalQA(setDoAdditionalQA);
66   
67   if (task->GetDoAdditionalQA())
68     printf("Storing histos for additional QA!\n");
69   else
70     printf("NOT storing histos for additional QA!\n");
71   
72   task->SetZvtxCutEvent(10.0);
73   printf("Cut on z position of vertex: %.2f cm\n", task->GetZvtxCutEvent());
74   
75   task->SetEtaCut(0.9);
76   printf("EtaCut: %.2f\n", task->GetEtaCut());
77   
78   task->SetPtpcPionCut(0.6);
79   printf("P_TPC_Pion cut: %.2f\n", task->GetPtpcPionCut());
80   
81   task->SetStoreNumOfSubthresholdclusters(kTRUE);
82   printf("Store num subthreshold clusters: %d\n", task->GetStoreNumOfSubthresholdclusters());
83   
84   task->SetStoreNumClustersInActiveVolume(kTRUE);
85   printf("Store num clusters in active volume: %d\n", task->GetStoreNumClustersInActiveVolume());
86   
87   task->SetCorrectdEdxEtaDependence(correctdEdxEtaDependence);  
88   task->SetCorrectdEdxMultiplicityDependence(correctdEdxMultiplicityDependence);
89   
90   printf("Eta correction: %s for this task\n", 
91          task->GetCorrectdEdxEtaDependence() ? "enabled (only works if enabled in PIDresponse!)" : "explicitly disabled");
92   printf("Multiplicity correction: %s for this task\n\n", 
93          task->GetCorrectdEdxMultiplicityDependence() ? "enabled (only works if enabled in PIDresponse!)" : "explicitly disabled");
94   
95   mgr->AddTask(task);
96
97
98   //================================================
99   //              data containers
100   //================================================
101   //            find input container
102   //below the trunk version
103   AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
104
105   //dumm output container
106   AliAnalysisDataContainer *coutput0 =
107       mgr->CreateContainer("TPCPIDEtaTree",
108                            TTree::Class(),
109                            AliAnalysisManager::kExchangeContainer,
110                            "TPCPIDEtaTree_default");
111
112   //define output containers, please use 'username'_'somename'
113   AliAnalysisDataContainer *coutput1 = 
114       mgr->CreateContainer("TPCPIDEtaTree", TTree::Class(),
115                            AliAnalysisManager::kOutputContainer,"TPCPIDEtaTree.root");
116   AliAnalysisDataContainer *coutput2 = 
117       mgr->CreateContainer("TPCPIDEtaTree", TTree::Class(),
118                            AliAnalysisManager::kOutputContainer,"TPCPIDEtaTreePions.root");
119   AliAnalysisDataContainer *coutput3 = 
120       mgr->CreateContainer("TPCPIDEtaTreeAdditionalQA", TObjArray::Class(),
121                            AliAnalysisManager::kOutputContainer,"TPCPIDEtaTreeAddionalQA.root");
122
123   //connect containers
124   mgr->ConnectInput(task,  0, cinput );
125   mgr->ConnectOutput(task,  0, coutput0);
126   mgr->ConnectOutput(task,  1, coutput1);
127   mgr->ConnectOutput(task, 2, coutput2); 
128   mgr->ConnectOutput(task, 3, coutput3); 
129
130   return task;
131 }