]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/macros/AddTaskPWG4HighPtTrackQA.C
Covariance matrix histos now also filled for ESD.
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskPWG4HighPtTrackQA.C
1 void AddTaskPWG4HighPtTrackQAAll(char *prodType = "LHC10h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0) 
2 {    
3
4   int cent = 10;
5   
6   AliPWG4HighPtTrackQA *taskTrackQA00cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,0);
7   //  AliPWG4HighPtTrackQA *taskTrackQA01cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,1);
8   //  AliPWG4HighPtTrackQA *taskTrackQA02cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,2);
9   AliPWG4HighPtTrackQA *taskTrackQA03cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,3);
10   AliPWG4HighPtTrackQA *taskTrackQA10cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,1,0);
11   AliPWG4HighPtTrackQA *taskTrackQA11cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,1,1);
12   AliPWG4HighPtTrackQA *taskTrackQA20cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,2,0);
13   AliPWG4HighPtTrackQA *taskTrackQA21cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,2,1);
14   AliPWG4HighPtTrackQA *taskTrackQA40cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,4,0);
15   AliPWG4HighPtTrackQA *taskTrackQA41cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,4,1);
16   AliPWG4HighPtTrackQA *taskTrackQA50cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,5,0);
17   AliPWG4HighPtTrackQA *taskTrackQA60cent10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,6,0);
18
19   if(isPbPb) {
20     for(cent=0; cent<4; cent++) {
21       AliPWG4HighPtTrackQA *taskTrackQA00 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,0);
22       // AliPWG4HighPtTrackQA *taskTrackQA01 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,1);
23       // AliPWG4HighPtTrackQA *taskTrackQA02 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,2);
24       AliPWG4HighPtTrackQA *taskTrackQA03 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,0,3);
25       AliPWG4HighPtTrackQA *taskTrackQA10 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,1,0);
26       AliPWG4HighPtTrackQA *taskTrackQA11 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,1,1);
27       AliPWG4HighPtTrackQA *taskTrackQA20 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,2,0);
28       AliPWG4HighPtTrackQA *taskTrackQA21 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,2,1);
29       AliPWG4HighPtTrackQA *taskTrackQA40 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,4,0);
30       AliPWG4HighPtTrackQA *taskTrackQA41 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,4,1);
31       AliPWG4HighPtTrackQA *taskTrackQA50 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,5,0);
32       AliPWG4HighPtTrackQA *taskTrackQA60 = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,cent,6,0);
33     }
34   }
35
36 }
37
38 void AddTaskPWG4HighPtTrackQAAOD(char *prodType = "LHC10h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 1, Int_t filterBit) 
39 {   
40   AliPWG4HighPtTrackQA *taskTrackQA = AddTaskPWG4HighPtTrackQA(prodType,isPbPb,iAODanalysis,0,0,0);
41   taskTrackQA->SetFilterMask(filterBit);
42 }
43
44 AliPWG4HighPtTrackQA* AddTaskPWG4HighPtTrackQA(char *prodType = "LHC10e14",Bool_t isPbPb=kTRUE,Int_t iAODanalysis = 0, Int_t centClass = 0, Int_t trackType = 0, Int_t cuts = 0)
45 {
46   /*
47     trackType: 0 = global
48                1 = TPC stand alone
49                2 = TPC stand alone constrained to SPD vertex
50                3 = global w/o SPD layer requirements
51                4 = TPC stand alone constrained to SPD vertex with QA track selection on global tracks
52                5 = Hybrid tracks: constrained TPConly for which no tight ITS is available
53                6 = Hybrid tracks: constrained loose global for which no tight ITS is available
54     cuts:      0 (global) = standard ITSTPC2010 
55                1 (global) = ITSrefit, no SPD requirements
56                2 (global) = SPD || SDD
57                3 (global) = standard ITS tight cuts with nCrossed rows cut
58                0 (TPC)    = standard TPC + NClusters>70
59                1 (TPC)    = standard TPC + NClusters>0 --> to study new TPC QA recommendations
60                0 (hybrid 5) = constrained TPConly for which no tight ITS is available
61                0 (hybrid 6) = constrained loose global for which no tight ITS is available
62    */
63
64   // Creates HighPtTrackQA analysis task and adds it to the analysis manager.
65   
66   // A. Get the pointer to the existing analysis manager via the static access method.
67   //==============================================================================
68   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
69   if (!mgr) {
70     Error("AddTaskPWG4HighPtQMC", "No analysis manager to connect to.");
71     return NULL;
72   }  
73
74   // B. Check the analysis type using the event handlers connected to the analysis
75   //    manager. The availability of MC handler can also be checked here.
76   //==============================================================================
77   if (!mgr->GetInputEventHandler()) {
78     ::Error("AddPWG4TaskHighPtTrackQA", "This task requires an input event handler");
79     return NULL;
80   }  
81
82   // C. Create the task, add it to manager.
83   //===========================================================================
84  
85   //CREATE THE  CUTS -----------------------------------------------
86   //Use AliESDtrackCuts
87   AliESDtrackCuts *trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts");
88   AliESDtrackCuts *trackCutsITSLoose = 0x0;
89   AliESDtrackCuts *trackCutsTPConly = new AliESDtrackCuts("AliESDtrackCutsTPConly","TPC only Cuts");
90
91   //Standard Cuts
92   //Set track cuts for global tracks
93   if(trackType==0 && cuts==0) {
94     trackCuts = trackCuts->GetStandardITSTPCTrackCuts2010(kTRUE);//Primary Track Selection
95     trackCuts->SetRequireITSRefit(kTRUE);
96   }
97   if(trackType==0 && cuts==1) {
98     //Cuts global tracks with ITSrefit requirement
99     // TPC  
100     trackCuts->SetMinNClustersTPC(70);
101     trackCuts->SetMaxChi2PerClusterTPC(4);
102     trackCuts->SetAcceptKinkDaughters(kFALSE);
103     trackCuts->SetRequireTPCRefit(kTRUE);
104     // ITS
105     trackCuts->SetRequireITSRefit(kTRUE);
106     
107     trackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
108     trackCuts->SetMaxDCAToVertexZ(2);
109     trackCuts->SetDCAToVertex2D(kFALSE);
110     trackCuts->SetRequireSigmaToVertex(kFALSE);
111   }
112   if(trackType==0 && cuts==2) {
113     trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts with SPD or SDD");
114     //Cuts SPD || SDD
115     // TPC  
116     trackCuts->SetMinNClustersTPC(70);
117     trackCuts->SetMaxChi2PerClusterTPC(4);
118     trackCuts->SetAcceptKinkDaughters(kFALSE);
119     trackCuts->SetRequireTPCRefit(kTRUE);
120     // ITS
121     trackCuts->SetRequireITSRefit(kTRUE);
122     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
123     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
124     
125     trackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
126     trackCuts->SetMaxDCAToVertexZ(2);
127     trackCuts->SetDCAToVertex2D(kFALSE);
128     trackCuts->SetRequireSigmaToVertex(kFALSE);
129     
130     trackCuts->SetRequireITSRefit(kTRUE);
131   }
132   if(trackType==0 && cuts==3) {
133     // tight global tracks
134     trackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE,1);
135     trackCuts->SetMinNCrossedRowsTPC(120);
136     trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially swittches it off
137     trackCuts->SetMaxDCAToVertexXY(2.4);
138     trackCuts->SetMaxDCAToVertexZ(3.2);
139     trackCuts->SetDCAToVertex2D(kTRUE);
140     trackCuts->SetMaxChi2PerClusterITS(32);
141   }
142
143   if(trackType==1 && cuts==0) {
144     //Set track cuts for TPConly tracks
145     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts(); 
146     trackCuts->SetMinNClustersTPC(70);
147   }
148   if(trackType==1 && cuts==1) {
149     //Set track cuts for TPConly tracks
150     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts(); 
151     trackCuts->SetMinNClustersTPC(0);
152   }
153
154   if(trackType==2 && cuts==0) {
155      //       Set track cuts for TPConly constrained tracks
156     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
157     trackCuts->SetMinNClustersTPC(70);
158   }
159   if(trackType==2 && cuts==1) {
160     //Set track cuts for TPConly constrained tracks
161     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
162     trackCuts->SetMinNClustersTPC(0);
163   }
164
165   if(trackType==4 && cuts==0) {
166      //       Set track cuts for TPConly constrained tracks
167     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
168     trackCuts->SetMinNClustersTPC(70);
169   }
170   if(trackType==4 && cuts==1) {
171      //       Set track cuts for TPConly constrained tracks
172     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
173     trackCuts->SetMinNClustersTPC(0);
174   }
175   if(trackType==5 || trackType==6) {
176     // tight global tracks
177     trackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE,1);
178     trackCuts->SetMinNCrossedRowsTPC(120);
179     trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially swittches it off
180     trackCuts->SetMaxDCAToVertexXY(2.4);
181     trackCuts->SetMaxDCAToVertexZ(3.2);
182     trackCuts->SetDCAToVertex2D(kTRUE);
183     trackCuts->SetMaxChi2PerClusterITS(32);
184
185     trackCutsITSLoose  = new AliESDtrackCuts(*trackCuts);
186     trackCutsITSLoose->SetName("loose ITS fake cuts");
187     trackCutsITSLoose->SetMaxChi2PerClusterITS(1E10);
188
189     trackCutsTPConly = trackCutsTPConly->GetStandardTPCOnlyTrackCuts();
190     trackCutsTPConly->SetMinNClustersTPC(0);
191     trackCutsTPConly->SetMinNCrossedRowsTPC(120);
192     trackCutsTPConly->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially switches it off     
193   }
194
195   trackCuts->SetEtaRange(-0.9,0.9);
196   trackCuts->SetPtRange(0.15, 1e10);
197   
198
199
200   //Create the task
201   AliPWG4HighPtTrackQA *taskPWG4TrackQA = new AliPWG4HighPtTrackQA(Form("AliPWG4HighPtTrackQACent%dTrack%dCuts%d",centClass,trackType,cuts));
202   taskPWG4TrackQA->SetTrackType(trackType);
203   taskPWG4TrackQA->SetCuts(trackCuts);
204   taskPWG4TrackQA->SetCutsITSLoose(trackCutsITSLoose);
205   taskPWG4TrackQA->SetCutsTPConly(trackCutsTPConly);
206   
207   taskPWG4TrackQA->SetPtMax(100.);
208  
209   if(iAODanalysis)
210     taskPWG4TrackQA->SetDataType(AliPWG4HighPtTrackQA::kAOD);
211   else
212     taskPWG4TrackQA->SetDataType(AliPWG4HighPtTrackQA::kESD);
213
214   if(isPbPb) {
215     taskPWG4TrackQA->SetIsPbPb(kTRUE);
216     taskPWG4TrackQA->SetCentralityClass(centClass);
217   }
218   //  taskPWG4TrackQA->SetSigmaConstrainedMax(5.);
219
220   taskPWG4TrackQA->SelectCollisionCandidates();
221
222
223   // E. Create ONLY the output containers for the data produced by the task.
224   // Get and connect other common input/output containers via the manager as below
225   //==============================================================================
226
227   TString outputfile = AliAnalysisManager::GetCommonFileName();
228   outputfile += Form(":PWG4_HighPtTrackQACent%dTrackType%dCuts%d",centClass,trackType,cuts);
229   
230   AliAnalysisDataContainer *cout_histQAtrack = mgr->CreateContainer(Form("qa_histsQAtrackCent%dType%dcuts%d",centClass,trackType,cuts), TList::Class(), AliAnalysisManager::kOutputContainer,outputfile);
231
232   mgr->AddTask(taskPWG4TrackQA);
233   mgr->ConnectInput(taskPWG4TrackQA,0,mgr->GetCommonInputContainer());
234   mgr->ConnectOutput(taskPWG4TrackQA,1,cout_histQAtrack);
235
236   // Return task pointer at the end
237   return taskPWG4TrackQA;
238 }