- Added classes and macros for TPC PID calibration
[u/mrichter/AliRoot.git] / PWGPP / TPC / macros / AddTaskTPCcalibResidualPID.C
1 AliAnalysisTask *AddTaskTPCcalibResidualPID(Bool_t producePIDqa = kTRUE, Bool_t useTPCCutMIGeo = kTRUE,
2                                             Bool_t correctdEdxEtaDependence = kFALSE, 
3                                             Bool_t correctdEdxMultiplicityDependence = kFALSE,
4                                             Bool_t useMCinfo = kTRUE){
5   //get the current analysis manager
6   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
7   if (!mgr) {
8     Error("AddTask_statsQA_TPCresPID", "No analysis manager found.");
9     return 0;
10   }
11
12   TString trainConfig=gSystem->Getenv("CONFIG_FILE");
13
14   TString list=gSystem->Getenv("LIST");
15   Bool_t isLHC11h = list.Contains("LHC11h");
16
17
18   //========= Add task to the ANALYSIS manager =====
19   AliTPCcalibResidualPID *task=new AliTPCcalibResidualPID("TPCresPID");
20   task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kINT7);
21
22   // which THnSparse should be produced
23   task->SetProducePIDqa(producePIDqa);
24   
25   AliESDtrackCuts* esdTrackCuts = 0x0;
26   AliESDtrackCuts* esdTrackCutsV0 = 0x0;
27   
28   //TODO LHC12 + check if cuts are correct in this way!
29   TString listOfFiles = gSystem->Getenv("LIST");
30   if (listOfFiles.Contains("LHC11") || listOfFiles.Contains("LHC12") || listOfFiles.Contains("LHC13")) {
31     esdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
32     esdTrackCutsV0 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
33     task->SetESDtrackCuts(esdTrackCuts);
34     //task->SetESDtrackCutsV0(esdTrackCutsV0);
35     printf("Using standard ITS-TPC track cuts 2011.\n");
36   }
37   else if (listOfFiles.Contains("LHC10")) {
38     esdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
39     esdTrackCutsV0 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
40     task->SetESDtrackCuts(esdTrackCuts);
41     //task->SetESDtrackCutsV0(esdTrackCutsV0);
42     printf("Using standard ITS-TPC track cuts 2010.\n");
43   }
44   else  {
45     esdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
46     esdTrackCutsV0 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
47     task->SetESDtrackCuts(esdTrackCuts);
48     //task->SetESDtrackCutsV0(esdTrackCutsV0);
49     
50     printf("WARNING: Cuts not configured for this period!!! Using standard ITS-TPC track cuts 2011\n");
51   }
52   
53   // Test whether we have pPb or Pbp
54   if (listOfFiles.Contains("pPb") || listOfFiles.Contains("Pbp")) {
55     task->SetIsPbpOrpPb(kTRUE);
56     printf("pPb/Pbp detected -> Adapting vertex cuts!\n");
57   }
58   else  {
59     task->SetIsPbpOrpPb(kFALSE);
60     printf("Collision type different from pPb/Pbp detected -> Using standard vertex cuts!\n");
61   }
62
63   task->SetZvtxCutEvent(10.0);
64   printf("Cut on z position of vertex: %.2f cm\n", task->GetZvtxCutEvent());
65   
66   task->SetUseTPCCutMIGeo(useTPCCutMIGeo);
67   printf("UseTPCCutMIGeo: %d\n", task->GetUseTPCCutMIGeo());
68   
69   task->SetCorrectdEdxEtaDependence(correctdEdxEtaDependence);
70   
71   task->SetCorrectdEdxMultiplicityDependence(correctdEdxMultiplicityDependence);
72   
73   task->SetUseMCinfo(useMCinfo);
74   
75   printf("Eta correction: %s for this task\n", 
76          task->GetCorrectdEdxEtaDependence() ? "enabled (only works if enabled in PIDresponse!)" : "explicitly disabled");
77   
78   printf("Multiplicity correction: %s for this task\n", 
79          task->GetCorrectdEdxMultiplicityDependence() ? "enabled (only works if enabled in PIDresponse!)" : "explicitly disabled");
80
81   printf("Use MC info: %d\n", task->GetUseMCinfo());
82   
83   
84   mgr->AddTask(task);
85
86   //================================================
87   //              data containers
88   //================================================
89   //            find input container
90   
91   
92   //            define output containers, please use 'username'_'somename'
93   AliAnalysisDataContainer *coutput1 =
94     mgr->CreateContainer("TPCresPID", TObjArray::Class(),
95                          AliAnalysisManager::kOutputContainer,"TPCresidualPID.root");
96     
97   AliAnalysisDataContainer *coutput2 =
98     mgr->CreateContainer("TPCresPIDQA", TObjArray::Class(),
99                          AliAnalysisManager::kOutputContainer,"TPCresidualPIDQA.root");
100   
101   //           connect containers
102   mgr->ConnectInput  (task,  0, mgr->GetCommonInputContainer() );
103   mgr->ConnectOutput (task,  1, coutput1);
104   mgr->ConnectOutput (task,  2, coutput2);
105   
106   return task;
107 }