]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/macros/AddTaskPWG4HighPtTrackQA.C
updated track cuts also for the spectra task M. Verweij)
[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                4 = TPC stand alone constrained to SPD vertex with QA track selection on global tracks
51                5 = Hybrid tracks: constrained TPConly for which no tight ITS is available
52                6 = Hybrid tracks: constrained loose global for which no tight ITS is available
53     cuts:      0 (global) = standard ITSTPC2010 a la RAA analysis
54                1 (global) = ITSrefit, no SPD requirements -> standard for jet analysis
55                2 (global) = ITSrefit + no hits in SPD
56                3 (global) = standard ITS tight cuts with nCrossed rows cut for hybrid tracks
57                0 (TPC)    = standard TPC + NClusters>70
58                1 (TPC)    = standard TPC + NClusters>0 --> to study new TPC QA recommendations
59                0 (hybrid 5) = constrained TPConly for which no tight ITS is available
60                0 (hybrid 6) = constrained loose global for which no tight ITS is available
61    */
62
63   // Creates HighPtTrackQA analysis task and adds it to the analysis manager.
64   
65   // A. Get the pointer to the existing analysis manager via the static access method.
66   //==============================================================================
67   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
68   if (!mgr) {
69     Error("AddTaskPWG4HighPtQMC", "No analysis manager to connect to.");
70     return NULL;
71   }  
72
73   // B. Check the analysis type using the event handlers connected to the analysis
74   //    manager. The availability of MC handler can also be checked here.
75   //==============================================================================
76   if (!mgr->GetInputEventHandler()) {
77     ::Error("AddPWG4TaskHighPtTrackQA", "This task requires an input event handler");
78     return NULL;
79   }  
80
81   // C. Create the task, add it to manager.
82   //===========================================================================
83  
84   //CREATE THE  CUTS -----------------------------------------------
85   //Use AliESDtrackCuts
86   AliESDtrackCuts *trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts");
87   AliESDtrackCuts *trackCutsITSLoose = 0x0;
88   AliESDtrackCuts *trackCutsTPConly = new AliESDtrackCuts("AliESDtrackCutsTPConly","TPC only Cuts");
89
90   //Standard Cuts
91   //Set track cuts for global tracks
92   if(trackType==0 && cuts==0) {
93     // tight global tracks
94     trackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
95     trackCuts->SetMinNCrossedRowsTPC(120);
96     trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially swittches it off
97     trackCuts->SetMaxChi2PerClusterITS(36);
98     trackCuts->MaxFractionSharedTPCCluster(0.4);
99   }
100   if(trackType==0 && cuts==1) {
101     //Cuts global tracks with ITSrefit requirement for jet analysis
102     // TPC  
103     trackCuts->SetMinNClustersTPC(80);
104     trackCuts->SetMaxChi2PerClusterTPC(4);
105     trackCuts->SetAcceptKinkDaughters(kFALSE);
106     trackCuts->SetRequireTPCRefit(kTRUE);
107     trackCuts->MaxFractionSharedTPCCluster(0.4);
108     // ITS
109     trackCuts->SetRequireITSRefit(kTRUE);
110     //accept secondaries
111     trackCuts->SetMaxDCAToVertexXY(2.4);
112     trackCuts->SetMaxDCAToVertexZ(3.2);
113     trackCuts->SetDCAToVertex2D(kTRUE);
114     //reject fakes
115     trackCuts->SetMaxChi2PerClusterITS(36);    
116
117     trackCuts->SetRequireSigmaToVertex(kFALSE);
118     
119   }
120   if(trackType==0 && cuts==2) {
121     //Cuts global tracks with ITSrefit requirement but without SPD
122     // TPC  
123     trackCuts->SetMinNClustersTPC(80);
124     trackCuts->SetMaxChi2PerClusterTPC(4);
125     trackCuts->SetAcceptKinkDaughters(kFALSE);
126     trackCuts->SetRequireTPCRefit(kTRUE);
127     trackCuts->MaxFractionSharedTPCCluster(0.4);
128     // ITS
129     trackCuts->SetRequireITSRefit(kTRUE);
130     //accept secondaries
131     trackCuts->SetMaxDCAToVertexXY(2.4);
132     trackCuts->SetMaxDCAToVertexZ(3.2);
133     trackCuts->SetDCAToVertex2D(kTRUE);
134     //reject fakes
135     trackCuts->SetMaxChi2PerClusterITS(36);    
136     trackCuts->SetRequireSigmaToVertex(kFALSE);
137     //no SPD points
138     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
139   }
140   if(trackType==0 && cuts==3) {
141     // tight global tracks
142     trackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE,1);
143     trackCuts->SetMinNCrossedRowsTPC(120);
144     trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially switches it off
145     trackCuts->SetMaxDCAToVertexXY(2.4);
146     trackCuts->SetMaxDCAToVertexZ(3.2);
147     trackCuts->SetDCAToVertex2D(kTRUE);
148     trackCuts->SetMaxChi2PerClusterITS(36);
149     trackCuts->MaxFractionSharedTPCCluster(0.4);
150   }
151
152   if(trackType==1 && cuts==0) {
153     //Set track cuts for TPConly tracks
154     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts(); 
155     trackCuts->SetMinNClustersTPC(70);
156   }
157   if(trackType==1 && cuts==1) {
158     //Set track cuts for TPConly tracks
159     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts(); 
160     trackCuts->SetMinNClustersTPC(0);
161   }
162
163   if(trackType==2 && cuts==0) {
164      //       Set track cuts for TPConly constrained tracks
165     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
166     trackCuts->SetMinNClustersTPC(70);
167   }
168   if(trackType==2 && cuts==1) {
169     //Set track cuts for TPConly constrained tracks
170     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
171     trackCuts->SetMinNClustersTPC(0);
172   }
173
174   if(trackType==4 && cuts==0) {
175      //       Set track cuts for TPConly constrained tracks
176     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
177     trackCuts->SetMinNClustersTPC(70);
178   }
179   if(trackType==4 && cuts==1) {
180      //       Set track cuts for TPConly constrained tracks
181     trackCuts = trackCuts->GetStandardTPCOnlyTrackCuts();
182     trackCuts->SetMinNClustersTPC(0);
183   }
184   if(trackType==5 || trackType==6) {
185     // tight global tracks
186     trackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE,1);
187     trackCuts->SetMinNCrossedRowsTPC(120);
188     trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially swittches it off
189     trackCuts->SetMaxDCAToVertexXY(2.4);
190     trackCuts->SetMaxDCAToVertexZ(3.2);
191     trackCuts->SetDCAToVertex2D(kTRUE);
192     trackCuts->SetMaxChi2PerClusterITS(36);
193
194     trackCutsITSLoose  = new AliESDtrackCuts(*trackCuts);
195     trackCutsITSLoose->SetName("loose ITS fake cuts");
196     trackCutsITSLoose->SetMaxChi2PerClusterITS(1E10);
197
198     trackCutsTPConly = trackCutsTPConly->GetStandardTPCOnlyTrackCuts();
199     trackCutsTPConly->SetMinNClustersTPC(0);
200     trackCutsTPConly->SetMinNCrossedRowsTPC(120);
201     trackCutsTPConly->SetMinRatioCrossedRowsOverFindableClustersTPC(0.1);// essentially switches it off     
202   }
203
204   trackCuts->SetEtaRange(-0.9,0.9);
205   trackCuts->SetPtRange(0.15, 1e10);
206   
207
208
209   //Create the task
210   AliPWG4HighPtTrackQA *taskPWG4TrackQA = new AliPWG4HighPtTrackQA(Form("AliPWG4HighPtTrackQACent%dTrack%dCuts%d",centClass,trackType,cuts));
211   taskPWG4TrackQA->SetTrackType(trackType);
212   taskPWG4TrackQA->SetCuts(trackCuts);
213   taskPWG4TrackQA->SetCutsITSLoose(trackCutsITSLoose);
214   taskPWG4TrackQA->SetCutsTPConly(trackCutsTPConly);
215   
216   taskPWG4TrackQA->SetPtMax(100.);
217  
218   if(iAODanalysis)
219     taskPWG4TrackQA->SetDataType(AliPWG4HighPtTrackQA::kAOD);
220   else
221     taskPWG4TrackQA->SetDataType(AliPWG4HighPtTrackQA::kESD);
222
223   if(isPbPb) {
224     taskPWG4TrackQA->SetIsPbPb(kTRUE);
225     taskPWG4TrackQA->SetCentralityClass(centClass);
226   }
227   //  taskPWG4TrackQA->SetSigmaConstrainedMax(5.);
228
229   taskPWG4TrackQA->SelectCollisionCandidates();
230
231
232   // E. Create ONLY the output containers for the data produced by the task.
233   // Get and connect other common input/output containers via the manager as below
234   //==============================================================================
235
236   TString outputfile = AliAnalysisManager::GetCommonFileName();
237   outputfile += Form(":PWG4_HighPtTrackQACent%dTrackType%dCuts%d",centClass,trackType,cuts);
238   
239   AliAnalysisDataContainer *cout_histQAtrack = mgr->CreateContainer(Form("qa_histsQAtrackCent%dType%dcuts%d",centClass,trackType,cuts), TList::Class(), AliAnalysisManager::kOutputContainer,outputfile);
240
241   mgr->AddTask(taskPWG4TrackQA);
242   mgr->ConnectInput(taskPWG4TrackQA,0,mgr->GetCommonInputContainer());
243   mgr->ConnectOutput(taskPWG4TrackQA,1,cout_histQAtrack);
244
245   // Return task pointer at the end
246   return taskPWG4TrackQA;
247 }