16 #include <TObjArray.h>
17 #include <TClonesArray.h>
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"
34 #include "AliNeutralTrackParam.h"
85 fRunInVertexing(kFALSE),
86 fImproveTracks(kTRUE),
98 const char *resfileCurURI,
99 const char *resfileUpgURI,
139 fRunInVertexing(isRunInVertexing),
140 fImproveTracks(kTRUE),
154 TFile *resfileCur=TFile::Open(resfileCurURI);
192 TFile *resfileUpg=TFile::Open(resfileUpgURI );
231 DefineOutput(1,TNtuple::Class());
247 fDebugNtuple=
new TNtuple(
"fDebugNtuple",
"Smearing",
"pdg:ptmc:d0rpo:d0zo:pt1o:sd0rpo:sd0zo:spt1o:d0rpn:d0zn:pt1n:sd0rpn:sd0zn:spt1n:d0rpmc:d0zmc:pt1mc");
282 if(AODEvent() && IsStandardAOD()) ev = dynamic_cast<AliAODEvent*> (AODEvent());
291 TClonesArray *mcs=
static_cast<TClonesArray*
>(ev->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
294 for(
Int_t itrack=0;itrack<ev->GetNumberOfTracks();++itrack) {
295 AliAODTrack * trk =
dynamic_cast<AliAODTrack*
>(ev->GetTrack(itrack));
296 if(!trk) AliFatal(
"Not a standard AOD");
302 AliVVertex *primaryVertex=ev->GetPrimaryVertex();
306 TClonesArray *array2Prong=
static_cast<TClonesArray*
>(ev->GetList()->FindObject(
"D0toKpi"));
308 for (
Int_t icand=0;icand<array2Prong->GetEntries();++icand) {
312 AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx();
315 AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(0)));
316 AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(1)));
320 ta12.Add(&et1); ta12.Add(&et2);
328 decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]);
329 decay->GetSecondaryVtx()->SetChi2perNDF(v12->GetChi2toNDF());
336 et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
338 d0err[0] = TMath::Sqrt(covd0z0[0]);
339 et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
341 d0err[1] = TMath::Sqrt(covd0z0[0]);
342 decay->Setd0Prongs(2,d0);
349 dca=et1.GetDCA(&et2,bz,xdummy,ydummy);
356 for (
Int_t i=0;i<2;++i) {
357 const AliAODTrack *t=
static_cast<AliAODTrack*
>(decay->GetDaughter(i));
362 decay->SetPxPyPzProngs(2,px,py,pz);
368 TClonesArray *arrayCascade=
static_cast<TClonesArray*
>(ev->GetList()->FindObject(
"Dstar"));
371 for (
Int_t icand=0;icand<arrayCascade->GetEntries();++icand) {
380 AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast<AliAODTrack*>(decayDstar->
GetBachelor()));
383 AliNeutralTrackParam *trackD0 =
new AliNeutralTrackParam(decay);
392 et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
394 d01err[0] = TMath::Sqrt(covd0z0[0]);
395 trackD0->PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
397 d01err[1] = TMath::Sqrt(covd0z0[0]);
398 decayDstar->Setd0Prongs(2,d01);
402 delete trackD0; trackD0=NULL;
406 for (
Int_t i=0;i<2;++i) {
407 const AliAODTrack *t1=
static_cast<AliAODTrack*
>(decayDstar->GetDaughter(i));
412 decayDstar->SetPxPyPzProngs(2,px1,py1,pz1);
419 TClonesArray *array3Prong=
static_cast<TClonesArray*
>(ev->GetList()->FindObject(
"Charm3Prong"));
421 for (
Int_t icand=0;icand<array3Prong->GetEntries();++icand) {
425 AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx();
426 AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(0)));
427 AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(1)));
428 AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast<AliAODTrack*>(decay->GetDaughter(2)));
430 ta123.Add(&et1);ta123.Add(&et2);ta123.Add(&et3);
431 ta12. Add(&et1);ta12 .Add(&et2);
432 ta23 .Add(&et2);ta23 .Add(&et3);
440 decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]);
441 decay->GetSecondaryVtx()->SetChi2perNDF(v123->GetChi2toNDF());
447 et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
449 d0err[0] = TMath::Sqrt(covd0z0[0]);
450 et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
452 d0err[1] = TMath::Sqrt(covd0z0[0]);
453 et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
455 d0err[2] = TMath::Sqrt(covd0z0[0]);
456 decay->Setd0Prongs (3,d0 );
463 dca[0]=et1.GetDCA(&et2,bz,xdummy,ydummy);
464 dca[1]=et3.GetDCA(&et2,bz,xdummy,ydummy);
465 dca[2]=et1.GetDCA(&et3,bz,xdummy,ydummy);
466 decay->SetDCAs(3,dca);
469 primaryVertex->GetXYZ(pos);
470 decay->
SetDist12toPrim(TMath::Sqrt((v12->GetX()-pos[0])*(v12->GetX()-pos[0])
471 +(v12->GetY()-pos[1])*(v12->GetY()-pos[1])
472 +(v12->GetZ()-pos[2])*(v12->GetZ()-pos[2])));
473 decay->
SetDist23toPrim(TMath::Sqrt((v23->GetX()-pos[0])*(v23->GetX()-pos[0])
474 +(v23->GetY()-pos[1])*(v23->GetY()-pos[1])
475 +(v23->GetZ()-pos[2])*(v23->GetZ()-pos[2])));
477 delete v123;
delete v12;
delete v23;
480 for (
Int_t i=0;i<3;++i) {
481 const AliAODTrack *t=
static_cast<AliAODTrack*
>(decay->GetDaughter(i));
486 decay->SetPxPyPzProngs(3,px,py,pz);
494 if (!(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)))
498 if (TESTBIT(track->GetITSClusterMap(),7))
return;
503 AliExternalTrackParam et; et.CopyFromVTrack(track);
508 Int_t imc=track->GetLabel();
510 const AliAODMCParticle *mc=
static_cast<AliAODMCParticle*
>(mcs->At(imc));
518 AliExternalTrackParam mct(mcx,mcp,mccv,mcc);
519 const Double_t *parammc=mct.GetParameter();
521 AliVertex vtx(mcx,1.,1);
526 et.PropagateToDCA(&vtx,track->GetBz(),10.);
527 et.Rotate(mct.GetAlpha());
537 switch (mc->GetPdgCode()) {
538 case 2212:
case -2212:
580 Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.);
583 Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.);
586 Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
597 track->SetPosition(x,kFALSE);
598 track->SetP(p,kTRUE);
602 UChar_t itsClusterMap = track->GetITSClusterMap();
603 SETBIT(itsClusterMap,7);
604 track->SetITSClusterMap(itsClusterMap);
638 AliVertexerTracks vertexer(bField);
639 vertexer.SetVtxStart(old->GetX(),old->GetY(),old->GetZ());
640 AliESDVertex *vertex=vertexer.VertexForSelectedTracks(tracks,ids);
652 Int_t n =graph->GetN();
656 if(!graphSA)
return graph->Eval(xmin);
658 if(x<xminSA)
return graphSA->Eval(xminSA);
659 return graphSA->Eval(x);
661 if (x>xmax)
return graph->Eval(xmax);
662 return graph->Eval(x);
TGraph * fPt1ResPiCur
old pt dep. 1/pt res. for kaons
TGraph * fD0ZResPUpg
old pt dep. 1/pt res. for pions
TGraph * fD0RPResKCur
old pt dep. d0 res. in rphi for protons
TGraph * fD0RPResPiUpgSA
new standalone pt dep. d0 res. in rphi for kaons
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
Double_t EvalGraph(Double_t x, const TGraph *graph, const TGraph *graphSA=0) const
Helper functions.
void SmearTrack(AliAODTrack *track, const TClonesArray *mcs)
TGraph * fD0ZResPiCurSA
old standalone pt dep. d0 res. in z for kaons
virtual void UserExec(Option_t *option)
TList * fDebugOutput
this is always kTRUE. kFALSE only if re-running on already improved AODs
void SetDist12toPrim(Double_t d)
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
TGraph * fPt1ResPUpg
new pt dep. d0 res. in rphi for pions
TGraph * fD0RPResKCurSA
old standalone pt dep. d0 res. in rphi for protons
void SetDist23toPrim(Double_t d)
TGraph * fPt1ResKUpg
new pt dep. 1/pt res. for protons
TGraph * fPt1ResKCur
old pt dep. 1/pt res. for protons
TGraph * fD0RPResKUpgSA
new standalone pt dep. d0 res. in rphi for protons
TGraph * fPt1ResPUpgSA
new standalone pt dep. d0 res. in rphi for pions
AliAnalysisTaskSEImproveITS()
virtual ~AliAnalysisTaskSEImproveITS()
AliAODTrack * GetBachelor() const
TGraph * fD0RPResPiCurSA
old standalone pt dep. d0 res. in rphi for kaons
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
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
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 res. in rphi for pions
TGraph * fD0RPResPUpg
new pt dep. d0 res. in z for pions
TGraph * fD0ZResPiUpg
new pt dep. d0 res. in z for kaons
TGraph * fD0ZResPiCur
old pt dep. d0 res. in z for kaons
AliAODRecoDecayHF2Prong * Get2Prong() const
ClassImp(AliAnalysisTaskSEImproveITS)
TGraph * fD0ZResPiUpgSA
new standalone pt dep. d0 res. in z for kaons
TGraph * fD0RPResPiUpg
new pt dep. d0 res. in rphi for kaons
AliESDVertex * RecalculateVertex(const AliVVertex *old, TObjArray *tracks, Double_t bField)
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