AliPhysics  068200c (068200c)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskSEImproveITS.cxx
Go to the documentation of this file.
1 /*************************************************************************
2 * Copyright(c) 1998-2011, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15 
16 #include <TObjArray.h>
17 #include <TClonesArray.h>
18 #include <TGraph.h>
19 #include <TFile.h>
20 #include <TList.h>
21 #include <TNtuple.h>
22 
23 #include "AliVertex.h"
24 #include "AliVVertex.h"
25 #include "AliESDVertex.h"
26 #include "AliVertexerTracks.h"
27 #include "AliAODEvent.h"
28 #include "AliAODTrack.h"
29 #include "AliAODMCParticle.h"
30 #include "AliExternalTrackParam.h"
33 #include "AliAODRecoCascadeHF.h"
34 #include "AliAnalysisVertexingHF.h"
35 #include "AliNeutralTrackParam.h"
37 
38 //
39 // Implementation of the "hybrid-approach" for ITS upgrade studies.
40 // The tastk smears the track parameters according to estimations
41 // from single-track upgrade studies. Afterwards it recalculates
42 // the parameters of the reconstructed decays.
43 //
44 // WARNING: This will affect all tasks in a train after this one
45 // (which is typically desired, though).
46 //
47 
50  fD0ZResPCur (0),
51  fD0ZResKCur (0),
52  fD0ZResPiCur (0),
53  fD0RPResPCur (0),
54  fD0RPResKCur (0),
55  fD0RPResPiCur(0),
56  fD0RPSigmaPullRatioP(0),
57  fD0RPSigmaPullRatioK(0),
58  fD0RPSigmaPullRatioPi(0),
59  fPt1ResPCur (0),
60  fPt1ResKCur (0),
61  fPt1ResPiCur (0),
62  fD0ZResPUpg (0),
63  fD0ZResKUpg (0),
64  fD0ZResPiUpg (0),
65  fD0RPResPUpg (0),
66  fD0RPResKUpg (0),
67  fD0RPResPiUpg(0),
68  fPt1ResPUpg (0),
69  fPt1ResKUpg (0),
70  fPt1ResPiUpg (0),
71  fD0ZResPCurSA (0),
72  fD0ZResKCurSA (0),
73  fD0ZResPiCurSA (0),
74  fD0RPResPCurSA (0),
75  fD0RPResKCurSA (0),
76  fD0RPResPiCurSA(0),
77  fPt1ResPCurSA (0),
78  fPt1ResKCurSA (0),
79  fPt1ResPiCurSA (0),
80  fD0ZResPUpgSA (0),
81  fD0ZResKUpgSA (0),
82  fD0ZResPiUpgSA (0),
83  fD0RPResPUpgSA (0),
84  fD0RPResKUpgSA (0),
85  fD0RPResPiUpgSA(0),
86  fPt1ResPUpgSA (0),
87  fPt1ResKUpgSA (0),
88  fPt1ResPiUpgSA (0),
89  fRunInVertexing(kFALSE),
90  fImproveTracks(kTRUE),
91  fUpdateSecVertCovMat(kTRUE),
92  fUpdateSTCovMatrix(kTRUE),
93  fUpdatePulls(kTRUE),
94  fMimicData(kFALSE),
95  fDebugOutput (0),
96  fDebugNtuple (0),
97  fDebugVars (0),
98  fNDebug (0)
99 {
100  //
101  // Default constructor.
102  for(Int_t jh=0; jh<2; jh++){
103  for(Int_t ih=0; ih<4; ih++){
104  fD0RPMeanPCur[jh][ih]=0x0;
105  fD0RPMeanKCur[jh][ih]=0x0;
106  fD0RPMeanPiCur[jh][ih]=0x0;
107  fD0RPMeanPUpg[jh][ih]=0x0;
108  fD0RPMeanKUpg[jh][ih]=0x0;
109  fD0RPMeanPiUpg[jh][ih]=0x0;
110  }
111  }
112  //
113 }
114 
116  const char *period,
117  const char *systematic,
118  Bool_t isRunInVertexing,
119  Int_t ndebug)
120  :AliAnalysisTaskSE(name),
121  fD0ZResPCur (0),
122  fD0ZResKCur (0),
123  fD0ZResPiCur (0),
124  fD0RPResPCur (0),
125  fD0RPResKCur (0),
126  fD0RPResPiCur(0),
127  fD0RPSigmaPullRatioP(0),
128  fD0RPSigmaPullRatioK(0),
129  fD0RPSigmaPullRatioPi(0),
130  fPt1ResPCur (0),
131  fPt1ResKCur (0),
132  fPt1ResPiCur (0),
133  fD0ZResPUpg (0),
134  fD0ZResKUpg (0),
135  fD0ZResPiUpg (0),
136  fD0RPResPUpg (0),
137  fD0RPResKUpg (0),
138  fD0RPResPiUpg(0),
139  fPt1ResPUpg (0),
140  fPt1ResKUpg (0),
141  fPt1ResPiUpg (0),
142  fD0ZResPCurSA (0),
143  fD0ZResKCurSA (0),
144  fD0ZResPiCurSA (0),
145  fD0RPResPCurSA (0),
146  fD0RPResKCurSA (0),
147  fD0RPResPiCurSA(0),
148  fPt1ResPCurSA (0),
149  fPt1ResKCurSA (0),
150  fPt1ResPiCurSA (0),
151  fD0ZResPUpgSA (0),
152  fD0ZResKUpgSA (0),
153  fD0ZResPiUpgSA (0),
154  fD0RPResPUpgSA (0),
155  fD0RPResKUpgSA (0),
156  fD0RPResPiUpgSA(0),
157  fPt1ResPUpgSA (0),
158  fPt1ResKUpgSA (0),
159  fPt1ResPiUpgSA (0),
160  fRunInVertexing(isRunInVertexing),
161  fImproveTracks(kTRUE),
162  fUpdateSecVertCovMat(kTRUE),
163  fUpdateSTCovMatrix(kTRUE),
164  fUpdatePulls(kTRUE),
165  fMimicData(kFALSE),
166  fDebugOutput (0),
167  fDebugNtuple (0),
168  fDebugVars (0),
169  fNDebug (ndebug)
170 {
171  //
172  // Constructor to be used to create the task.
173  // The the URIs specify the resolution files to be used.
174  // They are expected to contain TGraphs with the resolutions
175  // for the current and the upgraded ITS (see code for details).
176  // One may also specify for how many tracks debug information
177  // is written to the output.
178  //
179  for(Int_t jh=0; jh<2; jh++){
180  for(Int_t ih=0; ih<4; ih++){
181  fD0RPMeanPCur[jh][ih]=0x0;
182  fD0RPMeanKCur[jh][ih]=0x0;
183  fD0RPMeanPiCur[jh][ih]=0x0;
184  fD0RPMeanPUpg[jh][ih]=0x0;
185  fD0RPMeanKUpg[jh][ih]=0x0;
186  fD0RPMeanPiUpg[jh][ih]=0x0;
187  }
188  }
189 
190  TString resfileCurURI = Form("alien:///alice/cern.ch/user/p/pwg_hf/common/Improver/%s/%s/ITSgraphs_Current.root",period,systematic);
191  TFile *resfileCur=TFile::Open(resfileCurURI.Data());
192 
193 
194  fD0RPResPCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResP" )));
195  fD0RPResKCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResK" )));
196  fD0RPResPiCur=new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResPi")));
197  fD0RPSigmaPullRatioP =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPSigmaPullRatioP" )));
198  fD0RPSigmaPullRatioK =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPSigmaPullRatioK" )));
199  fD0RPSigmaPullRatioPi=new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPSigmaPullRatioPi")));
200  for(Int_t j=0; j<2; j++){
201  for(Int_t i=0; i<4; i++){
202  fD0RPMeanPCur[j][i]=new TGraph(*static_cast<TGraph*>(resfileCur->Get(Form("D0RPMeanP_B%d_phi%d",j,i))));
203  fD0RPMeanKCur[j][i]=new TGraph(*static_cast<TGraph*>(resfileCur->Get(Form("D0RPMeanK_B%d_phi%d",j,i))));
204  fD0RPMeanPiCur[j][i]=new TGraph(*static_cast<TGraph*>(resfileCur->Get(Form("D0RPMeanPi_B%d_phi%d",j,i))));
205  fD0RPMeanPCur[j][i]->SetName(Form("D0RPMeanPCur_B%d_phi%d",j,i));
206  fD0RPMeanKCur[j][i]->SetName(Form("D0RPMeanKCur_B%d_phi%d",j,i));
207  fD0RPMeanPiCur[j][i]->SetName(Form("D0RPMeanPiCur_B%d_phi%d",j,i));
208  }
209  }
210  fD0ZResPCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResP" )));
211  fD0ZResKCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResK" )));
212  fD0ZResPiCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResPi" )));
213  fPt1ResPCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResP" )));
214  fPt1ResKCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResK" )));
215  fPt1ResPiCur =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResPi" )));
216  fD0RPResPCur ->SetName("D0RPResPCur" );
217  fD0RPResKCur ->SetName("D0RPResKCur" );
218  fD0RPResPiCur->SetName("D0RPResPiCur");
219  fD0ZResPCur ->SetName("D0ZResPCur" );
220  fD0ZResKCur ->SetName("D0ZResKCur" );
221  fD0ZResPiCur ->SetName("D0ZResPiCur" );
222  fPt1ResPCur ->SetName("Pt1ResPCur" );
223  fPt1ResKCur ->SetName("Pt1ResKCur" );
224  fPt1ResPiCur ->SetName("Pt1ResPiCur" );
225  fD0RPResPCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResPSA" )));
226  fD0RPResKCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResKSA" )));
227  fD0RPResPiCurSA=new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0RPResPiSA")));
228  fD0ZResPCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResPSA" )));
229  fD0ZResKCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResKSA" )));
230  fD0ZResPiCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("D0ZResPiSA" )));
231  fPt1ResPCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResPSA" )));
232  fPt1ResKCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResKSA" )));
233  fPt1ResPiCurSA =new TGraph(*static_cast<TGraph*>(resfileCur->Get("Pt1ResPiSA" )));
234  fD0RPResPCurSA ->SetName("D0RPResPCurSA" );
235  fD0RPResKCurSA ->SetName("D0RPResKCurSA" );
236  fD0RPResPiCurSA->SetName("D0RPResPiCurSA");
237  fD0ZResPCurSA ->SetName("D0ZResPCurSA" );
238  fD0ZResKCurSA ->SetName("D0ZResKCurSA" );
239  fD0ZResPiCurSA ->SetName("D0ZResPiCurSA" );
240  fPt1ResPCurSA ->SetName("Pt1ResPCurSA" );
241  fPt1ResKCurSA ->SetName("Pt1ResKCurSA" );
242  fPt1ResPiCurSA ->SetName("Pt1ResPiCurSA" );
243  delete resfileCur;
244 
245  TString resfileUpgURI = Form("alien:///alice/cern.ch/user/p/pwg_hf/common/Improver/%s/%s/ITSgraphs_NewAll-X0.3-Res4um.root",period,systematic);
246  TFile *resfileUpg=TFile::Open(resfileUpgURI.Data());
247  fD0RPResPUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResP" )));
248  fD0RPResKUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResK" )));
249  fD0RPResPiUpg=new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResPi")));
250  for(Int_t j=0; j<2; j++){
251  for(Int_t i=0; i<4; i++){
252  fD0RPMeanPUpg[j][i]=new TGraph(*static_cast<TGraph*>(resfileUpg->Get(Form("D0RPMeanP_B%d_phi%d",j,i))));
253  fD0RPMeanKUpg[j][i]=new TGraph(*static_cast<TGraph*>(resfileUpg->Get(Form("D0RPMeanK_B%d_phi%d",j,i))));
254  fD0RPMeanPiUpg[j][i]=new TGraph(*static_cast<TGraph*>(resfileUpg->Get(Form("D0RPMeanPi_B%d_phi%d",j,i))));
255  fD0RPMeanPUpg[j][i]->SetName(Form("D0RPMeanPUpg_B%d_phi%d",j,i));
256  fD0RPMeanKUpg[j][i]->SetName(Form("D0RPMeanKUpg_B%d_phi%d",j,i));
257  fD0RPMeanPiUpg[j][i]->SetName(Form("D0RPMeanPiUpg_B%d_phi%d",j,i));
258  }
259  }
260  fD0ZResPUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResP" )));
261  fD0ZResKUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResK" )));
262  fD0ZResPiUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResPi" )));
263  fPt1ResPUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResP" )));
264  fPt1ResKUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResK" )));
265  fPt1ResPiUpg =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResPi" )));
266  fD0RPResPUpg ->SetName("D0RPResPUpg" );
267  fD0RPResKUpg ->SetName("D0RPResKUpg" );
268  fD0RPResPiUpg->SetName("D0RPResPiUpg");
269  fD0ZResPUpg ->SetName("D0ZResPUpg" );
270  fD0ZResKUpg ->SetName("D0ZResKUpg" );
271  fD0ZResPiUpg ->SetName("D0ZResPiUpg" );
272  fPt1ResPUpg ->SetName("Pt1ResPUpg" );
273  fPt1ResKUpg ->SetName("Pt1ResKUpg" );
274  fPt1ResPiUpg ->SetName("Pt1ResPiUpg" );
275  fD0RPResPUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResPSA" )));
276  fD0RPResKUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResKSA" )));
277  fD0RPResPiUpgSA=new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0RPResPiSA")));
278  fD0ZResPUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResPSA" )));
279  fD0ZResKUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResKSA" )));
280  fD0ZResPiUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("D0ZResPiSA" )));
281  fPt1ResPUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResPSA" )));
282  fPt1ResKUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResKSA" )));
283  fPt1ResPiUpgSA =new TGraph(*static_cast<TGraph*>(resfileUpg->Get("Pt1ResPiSA" )));
284  fD0RPResPUpgSA ->SetName("D0RPResPUpgSA" );
285  fD0RPResKUpgSA ->SetName("D0RPResKUpgSA" );
286  fD0RPResPiUpgSA->SetName("D0RPResPiUpgSA");
287  fD0ZResPUpgSA ->SetName("D0ZResPUpgSA" );
288  fD0ZResKUpgSA ->SetName("D0ZResKUpgSA" );
289  fD0ZResPiUpgSA ->SetName("D0ZResPiUpgSA" );
290  fPt1ResPUpgSA ->SetName("Pt1ResPUpgSA" );
291  fPt1ResKUpgSA ->SetName("Pt1ResKUpgSA" );
292  fPt1ResPiUpgSA ->SetName("Pt1ResPiUpgSA" );
293  delete resfileUpg;
294 
295  DefineOutput(1,TNtuple::Class());
296 }
297 
299  //
300  // Destructor.
301  //
302  delete fDebugOutput;
303 }
304 
306  //
307  // Creation of user output objects.
308  //
309  fDebugOutput=new TList();
310  fDebugOutput->SetOwner();
311  fDebugNtuple=new TNtuple("fDebugNtuple","Smearing","pdg:ptmc:d0rpo:d0zo:pt1o:sd0rpo:sd0zo:spt1o:d0rpn:d0zn:pt1n:sd0rpn:sd0zn:spt1n:d0rpmc:d0zmc:pt1mc");
312  fDebugVars=new Float_t[fDebugNtuple->GetNvar()];
313 
314  fDebugOutput->Add(fDebugNtuple );
315 
316  fDebugOutput->Add(fD0RPResPCur );
317  fDebugOutput->Add(fD0RPResKCur );
322  for(Int_t j=0; j<2; j++){
323  for(Int_t i=0; i<4; i++){
324  fDebugOutput->Add(fD0RPMeanPCur[j][i]);
325  fDebugOutput->Add(fD0RPMeanKCur[j][i]);
326  fDebugOutput->Add(fD0RPMeanPiCur[j][i]);
327  fDebugOutput->Add(fD0RPMeanPUpg[j][i]);
328  fDebugOutput->Add(fD0RPMeanKUpg[j][i]);
329  fDebugOutput->Add(fD0RPMeanPiUpg[j][i]);
330  }
331  }
332  fDebugOutput->Add(fD0ZResPCur );
333  fDebugOutput->Add(fD0ZResKCur );
334  fDebugOutput->Add(fD0ZResPiCur );
335  fDebugOutput->Add(fPt1ResPCur );
336  fDebugOutput->Add(fPt1ResKCur );
337  fDebugOutput->Add(fPt1ResPiCur );
338  fDebugOutput->Add(fD0RPResPUpg );
339  fDebugOutput->Add(fD0RPResKUpg );
341  fDebugOutput->Add(fD0ZResPUpg );
342  fDebugOutput->Add(fD0ZResKUpg );
343  fDebugOutput->Add(fD0ZResPiUpg );
344  fDebugOutput->Add(fPt1ResPUpg );
345  fDebugOutput->Add(fPt1ResKUpg );
346  fDebugOutput->Add(fPt1ResPiUpg );
347 
348  PostData(1,fDebugOutput);
349 }
350 
352  //
353  // The event loop
354  //
355  AliAODEvent *ev=0x0;
356  if(!fRunInVertexing) {
357  ev=dynamic_cast<AliAODEvent*>(InputEvent());
358  } else {
359  if(AODEvent() && IsStandardAOD()) ev = dynamic_cast<AliAODEvent*> (AODEvent());
360  }
361  if(!ev) return;
362  Double_t bz=ev->GetMagneticField();
363 
364  // first loop on candidates to fill them in case of reduced AODs
365  // this is done to have the same behaviour of the improver with full (pp, p-Pb) and recuced (Pb-Pb) candidates
367 
368  // D0->Kpi
369  TClonesArray *array2Prong=static_cast<TClonesArray*>(ev->GetList()->FindObject("D0toKpi"));
370  if (array2Prong) {
371  for (Int_t icand=0;icand<array2Prong->GetEntries();++icand) {
372  AliAODRecoDecayHF2Prong *decay=static_cast<AliAODRecoDecayHF2Prong*>(array2Prong->At(icand));
373  vHF->FillRecoCand(ev,(AliAODRecoDecayHF2Prong*)decay);
374  }
375  }
376  // Dstar->Kpipi
377  TClonesArray *arrayCascade=static_cast<TClonesArray*>(ev->GetList()->FindObject("Dstar"));
378  if (arrayCascade) {
379  for (Int_t icand=0;icand<arrayCascade->GetEntries();++icand) {
380  AliAODRecoCascadeHF *decayDstar=static_cast<AliAODRecoCascadeHF*>(arrayCascade->At(icand));
381  vHF->FillRecoCasc(ev,((AliAODRecoCascadeHF*)decayDstar),kTRUE);
382  }
383  }
384  // Three prong
385  TClonesArray *array3Prong=static_cast<TClonesArray*>(ev->GetList()->FindObject("Charm3Prong"));
386  if (array3Prong) {
387  for (Int_t icand=0;icand<array3Prong->GetEntries();++icand) {
388  AliAODRecoDecayHF3Prong *decay=static_cast<AliAODRecoDecayHF3Prong*>(array3Prong->At(icand));
389  vHF->FillRecoCand(ev,(AliAODRecoDecayHF3Prong*)decay);
390  }
391  }
392 
393 
394  // Smear all tracks
395  TClonesArray *mcs=static_cast<TClonesArray*>(ev->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
396  if (!mcs) return;
397  if (fImproveTracks) {
398  for(Int_t itrack=0;itrack<ev->GetNumberOfTracks();++itrack) {
399  AliAODTrack * trk = dynamic_cast<AliAODTrack*>(ev->GetTrack(itrack));
400  if(!trk) AliFatal("Not a standard AOD");
401  SmearTrack(trk,mcs,bz);
402  }
403  }
404 
405  // TODO: recalculated primary vertex
406  AliVVertex *primaryVertex=ev->GetPrimaryVertex();
407 
408 
409  // Recalculate all candidates
410  // D0->Kpi
411  if (array2Prong) {
412  for (Int_t icand=0;icand<array2Prong->GetEntries();++icand) {
413  AliAODRecoDecayHF2Prong *decay=static_cast<AliAODRecoDecayHF2Prong*>(array2Prong->At(icand));
414  if(!vHF->FillRecoCand(ev,(AliAODRecoDecayHF2Prong*)decay))continue;
415 
416  // recalculate vertices
417  AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx();
418 
419 
420  AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(0)));
421  AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(1)));
422 
423  TObjArray ta12;
424 
425  ta12.Add(&et1); ta12.Add(&et2);
426  AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz);
427 
428 
429  // update secondary vertex
430  Double_t pos[3];
431  Double_t covpos[6];
432  v12->GetXYZ(pos);
433  v12->GetCovMatrix(covpos);
434  decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]);
435  if(fUpdateSecVertCovMat) decay->GetSecondaryVtx()->SetCovMatrix(covpos);
436  decay->GetSecondaryVtx()->SetChi2perNDF(v12->GetChi2toNDF());
437 
438  // update d0
439  Double_t d0z0[2],covd0z0[3];
440  Double_t d0[2],d0err[2];
441  et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
442  d0[0]=d0z0[0];
443  d0err[0] = TMath::Sqrt(covd0z0[0]);
444  et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
445  d0[1]=d0z0[0];
446  d0err[1] = TMath::Sqrt(covd0z0[0]);
447  decay->Setd0Prongs(2,d0);
448  decay->Setd0errProngs(2,d0err);
449  //
450 
451 
452  Double_t xdummy=0.,ydummy=0.;
453  Double_t dca;
454  dca=et1.GetDCA(&et2,bz,xdummy,ydummy);
455  decay->SetDCA(dca);
456 
457 
458 
459  Double_t px[2],py[2],pz[2];
460  for (Int_t i=0;i<2;++i) {
461  AliExternalTrackParam et;
462  et.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(i)));
463  et.PropagateToDCA(v12,bz,100.,d0z0,covd0z0);
464  px[i]=et.Px();
465  py[i]=et.Py();
466  pz[i]=et.Pz();
467  }
468  decay->SetPxPyPzProngs(2,px,py,pz);
469  delete v12;
470  }
471  }
472 
473 
474  // Dstar->Kpipi
475  if (arrayCascade) {
476  for (Int_t icand=0;icand<arrayCascade->GetEntries();++icand) {
477  AliAODRecoCascadeHF *decayDstar=static_cast<AliAODRecoCascadeHF*>(arrayCascade->At(icand));
478  if(!vHF->FillRecoCasc(ev,((AliAODRecoCascadeHF*)decayDstar),kTRUE))continue;
479  //Get D0 from D*
481 
482  // recalculate vertices
483  //AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx();
484 
485  //soft pion
486  AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast<AliAODTrack*>(decayDstar->GetBachelor()));
487 
488  //track D0
489  AliNeutralTrackParam *trackD0 = new AliNeutralTrackParam(decay);
490 
492 
493  // update d0
494  Double_t d0z0[2],covd0z0[3];
495  Double_t d01[2],d01err[2];
496 
497  //the D*
498  et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
499  d01[0]=d0z0[0];
500  d01err[0] = TMath::Sqrt(covd0z0[0]);
501  trackD0->PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
502  d01[1]=d0z0[0];
503  d01err[1] = TMath::Sqrt(covd0z0[0]);
504  decayDstar->Setd0Prongs(2,d01);
505  decayDstar->Setd0errProngs(2,d01err);
506 
507  // delete v12;
508  delete trackD0; trackD0=NULL;
509 
510  // a run for D*
511  Double_t px1[2],py1[2],pz1[2];
512  for (Int_t i=0;i<2;++i) {
513  const AliAODTrack *t1=static_cast<AliAODTrack*>(decayDstar->GetDaughter(i));
514  px1[i]=t1->Px();
515  py1[i]=t1->Py();
516  pz1[i]=t1->Pz();
517  }
518  decayDstar->SetPxPyPzProngs(2,px1,py1,pz1);
519 
520  }
521  }
522 
523 
524  // Three prong
525  if (array3Prong) {
526  for (Int_t icand=0;icand<array3Prong->GetEntries();++icand) {
527  AliAODRecoDecayHF3Prong *decay=static_cast<AliAODRecoDecayHF3Prong*>(array3Prong->At(icand));
528  if(!vHF->FillRecoCand(ev,(AliAODRecoDecayHF3Prong*)decay))continue;
529 
530  // recalculate vertices
531  AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx();
532  AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(0)));
533  AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(1)));
534  AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(2)));
535  TObjArray ta123,ta12,ta23;
536  ta123.Add(&et1);ta123.Add(&et2);ta123.Add(&et3);
537  ta12. Add(&et1);ta12 .Add(&et2);
538  ta23 .Add(&et2);ta23 .Add(&et3);
539  AliESDVertex *v123=RecalculateVertex(oldSecondaryVertex,&ta123,bz);
540  AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz);
541  AliESDVertex *v23 =RecalculateVertex(oldSecondaryVertex,&ta23 ,bz);
542 
543  // update secondary vertex
544  Double_t pos[3];
545  Double_t covpos[6];
546  v123->GetXYZ(pos);
547  v123->GetCovMatrix(covpos);
548  decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]);
549  if(fUpdateSecVertCovMat) decay->GetSecondaryVtx()->SetCovMatrix(covpos);
550  decay->GetSecondaryVtx()->SetChi2perNDF(v123->GetChi2toNDF());
551 
552  // update d0 for all progs
553  Double_t d0z0[2],covd0z0[3];
554  Double_t d0[3],d0err[3];
555  et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
556  d0[0]=d0z0[0];
557  d0err[0] = TMath::Sqrt(covd0z0[0]);
558  et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
559  d0[1]=d0z0[0];
560  d0err[1] = TMath::Sqrt(covd0z0[0]);
561  et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
562  d0[2]=d0z0[0];
563  d0err[2] = TMath::Sqrt(covd0z0[0]);
564  decay->Setd0Prongs (3,d0 );
565  decay->Setd0errProngs(3,d0err);
566  // TODO: setter missing
567 
568  // update dca for prong combinations
569  Double_t xdummy=0.,ydummy=0.;
570  Double_t dca[3];
571  dca[0]=et1.GetDCA(&et2,bz,xdummy,ydummy);
572  dca[1]=et3.GetDCA(&et2,bz,xdummy,ydummy);
573  dca[2]=et1.GetDCA(&et3,bz,xdummy,ydummy);
574  decay->SetDCAs(3,dca);
575 
576  // update sigmavertex = dispersion
577  Float_t sigmaV=v123->GetDispersion();
578  decay->SetSigmaVert(sigmaV);
579  // update dist12 and dist23
580  primaryVertex->GetXYZ(pos);
581  decay->SetDist12toPrim(TMath::Sqrt((v12->GetX()-pos[0])*(v12->GetX()-pos[0])
582  +(v12->GetY()-pos[1])*(v12->GetY()-pos[1])
583  +(v12->GetZ()-pos[2])*(v12->GetZ()-pos[2])));
584  decay->SetDist23toPrim(TMath::Sqrt((v23->GetX()-pos[0])*(v23->GetX()-pos[0])
585  +(v23->GetY()-pos[1])*(v23->GetY()-pos[1])
586  +(v23->GetZ()-pos[2])*(v23->GetZ()-pos[2])));
587 
588 
589  Double_t px[3],py[3],pz[3];
590  for (Int_t i=0;i<3;++i) {
591  AliExternalTrackParam et;
592  et.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(i)));
593  et.PropagateToDCA(v123,bz,100.,d0z0,covd0z0);
594  px[i]=et.Px();
595  py[i]=et.Py();
596  pz[i]=et.Pz();
597  }
598  decay->SetPxPyPzProngs(3,px,py,pz);
599 
600  delete v123;delete v12;delete v23;
601  }
602  }
603  delete vHF;
604 
605 }
606 
607 void AliAnalysisTaskSEImproveITS::SmearTrack(AliAODTrack *track,const TClonesArray *mcs, Double_t bz) {
608  // Early exit, if this track has nothing in common with the ITS
609 
610  if (!(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)))
611  return;
612 
613  // Check if the track was already "improved" (this is done with a trick using layer 7 (ie the 8th))
614  if (TESTBIT(track->GetITSClusterMap(),7)) return;
615  //
616 
617 
618  // Get reconstructed track parameters
619  AliExternalTrackParam et; et.CopyFromVTrack(track);
620  Double_t *param=const_cast<Double_t*>(et.GetParameter());
621 
622 
623  Double_t *covar=const_cast<Double_t*>(et.GetCovariance());
624 
625  // Get MC info
626  Int_t imc=track->GetLabel();
627  if (imc<=0) return;
628  const AliAODMCParticle *mc=static_cast<AliAODMCParticle*>(mcs->At(imc));
629  Double_t mcx[3];
630  Double_t mcp[3];
631  Double_t mccv[36]={0.};
632  Short_t mcc;
633  mc->XvYvZv(mcx);
634  mc->PxPyPz(mcp);
635  mcc=mc->Charge();
636  AliExternalTrackParam mct(mcx,mcp,mccv,mcc);
637  const Double_t *parammc=mct.GetParameter();
638 //TODO: const Double_t *covermc=mct.GetCovariance();
639  AliVertex vtx(mcx,1.,1);
640 
641  // Correct reference points and frames according to MC
642  // TODO: B-Field correct?
643  // TODO: failing propagation....
644  et.PropagateToDCA(&vtx,track->GetBz(),10.);
645  et.Rotate(mct.GetAlpha());
646 
647  // Select appropriate smearing functions
648  Double_t ptmc=TMath::Abs(mc->Pt());
649  Double_t phimc=mc->Phi();
650  Int_t phiBin=PhiBin(phimc);
651  Int_t magfield=0;
652  if(bz<0.) magfield=0;
653  else if(bz>0.)magfield=1;
654  Double_t sd0rpn=0.;
655  Double_t sd0mrpn=0.;
656  Double_t sd0zn =0.;
657  Double_t spt1n =0.;
658  Double_t sd0rpo=0.;
659  Double_t sd0mrpo=0.;
660  Double_t sd0zo =0.;
661  Double_t spt1o =0.;
662  Double_t pullcorr=0.;
663 
664  switch (mc->GetPdgCode()) {
665  case 2212: case -2212:
667  sd0zo =EvalGraph(ptmc,fD0ZResPCur,fD0ZResPCurSA);
668  spt1o =EvalGraph(ptmc,fPt1ResPCur,fPt1ResPCurSA);
670  sd0zn =EvalGraph(ptmc,fD0ZResPUpg,fD0ZResPUpgSA);
671  spt1n =EvalGraph(ptmc,fPt1ResPUpg,fPt1ResPUpgSA);
672  sd0mrpo=EvalGraph(ptmc,fD0RPMeanPCur[magfield][phiBin],fD0RPMeanPCur[magfield][phiBin]);
673  sd0mrpn=EvalGraph(ptmc,fD0RPMeanPUpg[magfield][phiBin],fD0RPMeanPUpg[magfield][phiBin]);
675  break;
676  case 321: case -321:
678  sd0zo =EvalGraph(ptmc,fD0ZResKCur,fD0ZResKCurSA);
679  spt1o =EvalGraph(ptmc,fPt1ResKCur,fPt1ResKCurSA);
681  sd0zn =EvalGraph(ptmc,fD0ZResKUpg,fD0ZResKUpgSA);
682  spt1n =EvalGraph(ptmc,fPt1ResKUpg,fPt1ResKUpgSA);
683  sd0mrpo=EvalGraph(ptmc,fD0RPMeanKCur[magfield][phiBin],fD0RPMeanKCur[magfield][phiBin]);
684  sd0mrpn=EvalGraph(ptmc,fD0RPMeanKUpg[magfield][phiBin],fD0RPMeanKUpg[magfield][phiBin]);
686  break;
687  case 211: case -211:
694  sd0mrpo=EvalGraph(ptmc,fD0RPMeanPiCur[magfield][phiBin],fD0RPMeanPiCur[magfield][phiBin]);
695  sd0mrpn=EvalGraph(ptmc,fD0RPMeanPiUpg[magfield][phiBin],fD0RPMeanPiUpg[magfield][phiBin]);
697  break;
698  default:
699  return;
700  }
701 
702  // Use the same units (i.e. cm and GeV/c)! TODO: pt!
703  sd0rpo*=1.e-4;
704  sd0zo *=1.e-4;
705  sd0rpn*=1.e-4;
706  sd0zn *=1.e-4;
707  sd0mrpo*=1.e-4;
708  sd0mrpn*=1.e-4;
709 
710  // Apply the smearing
711  Double_t d0zo =param [1];
712  Double_t d0zmc =parammc[1];
713  Double_t d0rpo =param [0];
714  Double_t d0rpmc=parammc[0];
715  Double_t pt1o =param [4];
716  Double_t pt1mc =parammc[4];
717  Double_t dd0zo =d0zo-d0zmc;
718  Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.);
719  Double_t d0zn =d0zmc+dd0zn;
720  Double_t dd0rpo=d0rpo-d0rpmc;
721  Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.);
722  Double_t dd0mrpn=TMath::Abs(sd0mrpn)-TMath::Abs(sd0mrpo);
723  Double_t d0rpn =d0rpmc+dd0rpn-dd0mrpn;
724 
725  if(fMimicData){
726  dd0mrpn=sd0mrpn-sd0mrpo;
727  d0rpn =d0rpmc+dd0rpn+dd0mrpn;
728  }
729 
730  Double_t dpt1o =pt1o-pt1mc;
731  Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
732  Double_t pt1n =pt1mc+dpt1n;
733  param[0]=d0rpn;
734  param[1]=d0zn ;
735  param[4]=pt1n ;
736 
737  //cov matrix update
738  if(fUpdateSTCovMatrix){
739  if(sd0rpo>0.) covar[0]*=(sd0rpn/sd0rpo)*(sd0rpn/sd0rpo);//yy
740  if(sd0zo>0. && sd0rpo>0.)covar[1]*=(sd0rpn/sd0rpo)*(sd0zn/sd0zo);//yz
741  if(sd0zo>0.) covar[2]*=(sd0zn/sd0zo)*(sd0zn/sd0zo);//zz
742  if(sd0rpo>0.) covar[3]*=(sd0rpn/sd0rpo);//yl
743  if(sd0zo>0.) covar[4]*=(sd0zn/sd0zo);//zl
744  if(sd0rpo>0.) covar[6]*=(sd0rpn/sd0rpo);//ysenT
745  if(sd0zo>0.) covar[7]*=(sd0zn/sd0zo);//zsenT
746  if(sd0rpo>0. && spt1o>0.)covar[10]*=(sd0rpn/sd0rpo)*(spt1n/spt1o);//ypt
747  if(sd0zo>0. && spt1o>0.) covar[11]*=(sd0zn/sd0zo)*(spt1n/spt1o);//zpt
748  if(spt1o>0.) covar[12]*=(spt1n/spt1o);//sinPhipt
749  if(spt1o>0.) covar[13]*=(spt1n/spt1o);//tanTpt
750  if(spt1o>0.) covar[14]*=(spt1n/spt1o)*(spt1n/spt1o);//ptpt
751  }
752  if(fUpdatePulls){
753 
754  covar[0]*=pullcorr*pullcorr;//yy
755  covar[1]*=pullcorr;//yz
756  covar[3]*=pullcorr;//yl
757  covar[6]*=pullcorr;//ysenT
758  covar[10]*=pullcorr;//ypt
759 
760  }
761 
762  // Copy the smeared parameters to the AOD track
763  Double_t x[3];
764  Double_t p[3];
765  et.GetXYZ(x);
766  et.GetPxPyPz(p);
767  Double_t cv[21];
768  et.GetCovarianceXYZPxPyPz(cv);
769  track->SetPosition(x,kFALSE);
770  track->SetP(p,kTRUE);
771  track->SetCovMatrix(cv);
772 
773 
774  // Mark the track as "improved" with a trick (this is done with a trick using layer 7 (ie the 8th))
775  UChar_t itsClusterMap = track->GetITSClusterMap();
776  SETBIT(itsClusterMap,7);
777  track->SetITSClusterMap(itsClusterMap);
778  //
779 
780  // write out debug infos
781  if (fDebugNtuple->GetEntries()<fNDebug) {
782  Int_t idbg=0;
783  fDebugVars[idbg++]=mc->GetPdgCode();
784  fDebugVars[idbg++]=ptmc ;
785  fDebugVars[idbg++]=d0rpo ;
786  fDebugVars[idbg++]=d0zo ;
787  fDebugVars[idbg++]=pt1o ;
788  fDebugVars[idbg++]=sd0rpo;
789  fDebugVars[idbg++]=sd0zo ;
790  fDebugVars[idbg++]=spt1o ;
791  fDebugVars[idbg++]=d0rpn ;
792  fDebugVars[idbg++]=d0zn ;
793  fDebugVars[idbg++]=pt1n ;
794  fDebugVars[idbg++]=sd0rpn;
795  fDebugVars[idbg++]=sd0zn ;
796  fDebugVars[idbg++]=spt1n ;
797  fDebugVars[idbg++]=d0rpmc;
798  fDebugVars[idbg++]=d0zmc ;
799  fDebugVars[idbg++]=pt1mc ;
800  fDebugNtuple->Fill(fDebugVars);
801  PostData(1,fDebugOutput);
802  }
803 }
804 
805 AliESDVertex* AliAnalysisTaskSEImproveITS::RecalculateVertex(const AliVVertex *old,TObjArray *tracks,Double_t bField) {
806  //
807  // Helper function to recalculate a vertex.
808  //
809 
810  static UShort_t ids[]={1,2,3}; //TODO: unsave...
811  AliVertexerTracks vertexer(bField);
812  vertexer.SetVtxStart(old->GetX(),old->GetY(),old->GetZ());
813  AliESDVertex *vertex=vertexer.VertexForSelectedTracks(tracks,ids);
814  return vertex;
815 }
816 
818  //
819  // Evaluates a TGraph without linear extrapolation. Instead the last
820  // valid point of the graph is used when out of range.
821  // The function assumes an ascending order of X.
822  //
823 
824  // TODO: find a pretty solution for this:
825  Int_t n =graph->GetN();
826  Double_t xmin=graph->GetX()[0 ];
827  Double_t xmax=graph->GetX()[n-1];
828  if (x<xmin) {
829  if(!graphSA) return graph->Eval(xmin);
830  Double_t xminSA=graphSA->GetX()[0];
831  if(x<xminSA) return graphSA->Eval(xminSA);
832  return graphSA->Eval(x);
833  }
834  if (x>xmax) return graph->Eval(xmax);
835  return graph->Eval(x);
836 }
837 
838 //________________________________________________________________________
839 
841  Double_t pi=TMath::Pi();
842  if(phi>2.*pi || phi<0.) return -1;
843  if((phi<=(pi/4.)) || (phi>7.*(pi/4.))) return 0;
844  if((phi>(pi/4.)) && (phi<=3.*(pi/4.))) return 1;
845  if((phi>3.*(pi/4.)) && (phi<=5.*(pi/4.))) return 2;
846  if((phi>(5.*pi/4.)) && (phi<=7.*(pi/4.))) return 3;
847  return -1;
848 }
849 
851 
TGraph * fPt1ResPiCur
old pt dep. 1/pt res. for kaons
TGraph * fD0RPMeanPUpg[2][4]
new pt dep. d0 res. in rphi for pions
TGraph * fD0ZResPUpg
old pt dep. 1/pt res. for pions
TGraph * fD0RPResKCur
old pt dep. d0 res. in rphi for protons
Bool_t fMimicData
flag to switch on/off the correction of the pulls
TGraph * fD0RPResPiUpgSA
new standalone pt dep. d0 res. in rphi for kaons
double Double_t
Definition: External.C:58
TGraph * fD0ZResKUpgSA
new standalone pt dep. d0 res. in z for protons
TGraph * fD0RPResPCurSA
old standalone pt dep. d0 res. in z for pions
virtual void UserCreateOutputObjects()
Implementation of interface methods.
TGraph * fD0RPResPiCur
old pt dep. d0 res. in rphi for kaons
TGraph * fPt1ResKUpgSA
new standalone pt dep. 1/pt res. for protons
TGraph * fD0ZResPUpgSA
old standalone pt dep. 1/pt res. for pions
TGraph * fD0RPMeanPiCur[2][4]
old pt dep. d0 mean. in rphi for kaons in 4 phi regions
Double_t EvalGraph(Double_t x, const TGraph *graph, const TGraph *graphSA=0) const
Helper functions.
TGraph * fD0RPMeanPiUpg[2][4]
new pt dep. d0 mean in rphi for kaons in 4 phi regions
Double_t bz
Bool_t fUpdateSecVertCovMat
this is always kTRUE. kFALSE only if re-running on already improved AODs
TGraph * fD0ZResPiCurSA
old standalone pt dep. d0 res. in z for kaons
virtual void UserExec(Option_t *option)
TGraph * fD0RPMeanPCur[2][4]
pt dep. d0 sigma pull MC/data in rphi for pions
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
TList * fDebugOutput
! collection of debug output
void SmearTrack(AliAODTrack *track, const TClonesArray *mcs, Double_t bz)
TGraph * fPt1ResPiUpg
new pt dep. 1/pt res. for kaons
TGraph * fPt1ResPCurSA
old standalone pt dep. d0 res. in rphi for pions
TGraph * fPt1ResPiCurSA
old standalone pt dep. 1/pt res. for kaons
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
TGraph * fPt1ResPUpg
new pt dep. d0 mean in rphi for pions in 4 phi regions
TGraph * fD0RPResKCurSA
old standalone pt dep. d0 res. in rphi for protons
TGraph * fPt1ResKUpg
new pt dep. 1/pt res. for protons
int Int_t
Definition: External.C:63
TGraph * fPt1ResKCur
old pt dep. 1/pt res. for protons
TGraph * fD0RPResKUpgSA
new standalone pt dep. d0 res. in rphi for protons
float Float_t
Definition: External.C:68
TGraph * fPt1ResPUpgSA
new standalone pt dep. d0 res. in rphi for pions
AliAODTrack * GetBachelor() const
TGraph * fD0RPSigmaPullRatioK
pt dep. d0 sigma pull MC/data in rphi for protons
TGraph * fD0RPResPiCurSA
old standalone pt dep. d0 res. in rphi for kaons
TGraph * fD0RPSigmaPullRatioP
old pt dep. d0 res. in rphi for pions
TGraph * fD0ZResKCurSA
old standalone pt dep. d0 res. in z for protons
TGraph * fD0ZResPCurSA
new pt dep. 1/pt res. for pions
Float_t * fDebugVars
! variables to store as degug info
TGraph * fD0RPResPCur
old pt dep. d0 res. in z for pions
short Short_t
Definition: External.C:23
Bool_t fRunInVertexing
new standalone pt dep. 1/pt res. for pions
TGraph * fPt1ResPiUpgSA
new standalone pt dep. 1/pt res. for kaons
TGraph * fD0RPResPUpgSA
new standalone pt dep. d0 res. in z for pions
TGraph * fPt1ResKCurSA
old standalone pt dep. 1/pt res. for protons
decay
Definition: HFPtSpectrum.C:41
TGraph * fD0RPSigmaPullRatioPi
pt dep. d0 sigma pull MC/data in rphi for kaons
Bool_t fImproveTracks
flag to run hybrid task before the vertexingHF task or in standard mode
TGraph * fD0ZResKCur
old pt dep. d0 res. in z for protons
void Setd0errProngs(Int_t nprongs, Double_t *d0)
TGraph * fPt1ResPCur
old pt dep. d0 mean. in rphi for pions in 4 phi regions
TGraph * fD0RPResPUpg
new pt dep. d0 res. in z for pions
Bool_t fUpdateSTCovMatrix
flag to swicth on/off the modification of the sec vert cov matrix
TGraph * fD0ZResPiUpg
new pt dep. d0 res. in z for kaons
unsigned short UShort_t
Definition: External.C:28
const char Option_t
Definition: External.C:48
TGraph * fD0ZResPiCur
old pt dep. d0 res. in z for kaons
Bool_t fUpdatePulls
flag to switch on/off the update of the single track covariance matrix
const Double_t pi
bool Bool_t
Definition: External.C:53
void SetSigmaVert(Double_t sigmaVert)
AliAODRecoDecayHF2Prong * Get2Prong() const
TGraph * fD0ZResPiUpgSA
new standalone pt dep. d0 res. in z for kaons
TGraph * fD0RPResPiUpg
new pt dep. d0 res. in rphi for kaons
TGraph * fD0RPMeanKUpg[2][4]
new pt dep. d0 mean in rphi for protons in 4 phi regions
AliESDVertex * RecalculateVertex(const AliVVertex *old, TObjArray *tracks, Double_t bField)
TGraph * fD0RPMeanKCur[2][4]
old pt dep. d0 mean. in rphi for protons in 4 phi regions
TNtuple * fDebugNtuple
! debug send on output slot 1
TGraph * fD0RPResKUpg
new pt dep. d0 res. in rphi for protons
TGraph * fD0ZResKUpg
new pt dep. d0 res. in z for protons