2 // Main author: Davide Caffarri 2009
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 class AliAODRecoDecayHF;
12 void aod_hf_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp)
14 Double_t pbuf[3], vbuf[3];
15 rt.fSign = tp->GetSign();
16 tp->GetXYZ(vbuf); rt.fV.Set(vbuf);
17 tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf);
18 // Double_t ep = at->GetP(), mc = at->GetMass();
19 rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
23 AliEveHF* aod_make_HF(TEveTrackPropagator* rnrStyle, AliAODVertex* primAODVtx,
24 AliESDtrack* neg, AliESDtrack* pos, AliAODRecoDecayHF* rd, Int_t i)
31 p[0]=rd->PxProng(0); p[1]=rd->PyProng(0); p[2]=rd->PzProng(0);
33 p[0]=rd->PxProng(1); p[1]=rd->PyProng(1); p[2]=rd->PzProng(1);
36 p[0]=rd->Px(); p[1]=rd->Py(); p[2]=rd->Pz();
39 Double_t primVtx[3]={primAODVtx->GetX(), primAODVtx->GetY(), primAODVtx->GetZ(),};
42 Double_t v[3] = {rd->Xv(),rd->Yv(),rd->Zv()};
43 printf("vertex %f %f %f\n",v[0],v[1],v[2]);
45 aod_hf_init_rectrack(rcNeg, neg);
46 //rcNeg.fIndex = v0->GetNindex();
47 aod_hf_init_rectrack(rcPos, pos);
48 //rcPos.fIndex = v0->GetPindex();
50 AliEveHF* myHF = new AliEveHF(&rcNeg, &rcPos, primVtx ,rd, v, rnrStyle);
51 myHF->SetElementName(Form("D0->Kpi %d", i));
52 myHF->SetElementTitle(Form("CosPointingAngle %f",
53 rd->CosPointingAngle()));
59 AliEveHFList* aod_HF()
60 { Bool_t useParFiles=kFALSE;
61 gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/LoadLibraries.C");
62 LoadLibraries(useParFiles);
65 AliAODEvent* aod = AliEveEventManager::AssertAOD();
66 AliESDEvent* esd = AliEveEventManager::AssertESD();
69 /*gSystem->Load("libANALYSIS");
70 gSystem->Load("libANALYSISalice");
71 gSystem->Load("libCORRFW");
72 gSystem->Load("libPWG3base");
73 gSystem->Load("libPWG3vertexingHF");
77 TClonesArray *mcArray =
78 (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
80 printf("MC particles branch not found!\n");
85 AliAODVertex* primVtx_aod = (AliAODVertex*) aod->GetPrimaryVertex();
86 // AliESDVertex *primVtx_esd = (AliESDVertex*) esd->GetPrimaryVertex();
89 AliEveHFList* cont = new AliEveHFList("AOD HF vertices");
90 cont->SetMainColor(2);
91 TEveTrackPropagator* rnrStyle = cont->GetPropagator();
92 rnrStyle->SetMagField( 0.1*aod->GetMagneticField() );
94 gEve->AddElement(cont);
96 TEvePointSet* pointsD0toKpi = new TEvePointSet("D0->Kpi vertex locations");
98 // load D0->Kpi candidates
99 TClonesArray *arrayD0toKpi = (TClonesArray*)aod->GetList()->FindObject("D0toKpi");
101 // load 3prong candidates
102 // TClonesArray *array3Prong =
103 // (TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
106 for (Int_t iD0toKpi=0; iD0toKpi<(arrayD0toKpi->GetEntriesFast()); iD0toKpi++) {
107 AliAODRecoDecayHF2Prong *rd = (AliAODRecoDecayHF2Prong*)arrayD0toKpi->UncheckedAt(iD0toKpi);
108 Bool_t unsetvtx=kFALSE;
109 if(!rd->GetOwnPrimaryVtx()) {
110 rd->SetOwnPrimaryVtx(primVtx_aod);
113 // REAL D0 particle. If you want to draw only real D0 un-comment these lines
114 //Int_t labD0 = rd->MatchToMC(421,mcArray);
115 //if(labD0<0) continue;
117 AliAODTrack* negAODTr = rd->GetDaughter(0);
118 AliAODTrack* posAODTr = rd->GetDaughter(1);
120 AliVVertex *secv = rd->GetSecondaryVtx();
122 AliESDtrack *negTr = new AliESDtrack(negAODTr);
123 AliESDtrack *posTr = new AliESDtrack(posAODTr);
125 negTr->PropagateToDCA((AliAODVertex*)secv,aod->GetMagneticField(),100.);
126 posTr->PropagateToDCA((AliAODVertex*)secv,aod->GetMagneticField(),100.);
128 AliEveHF* myD0 = aod_make_HF(rnrStyle,primVtx_aod,negTr,posTr,rd,iD0toKpi);
130 gEve->AddElement(myD0,cont);
134 pointsD0toKpi->SetNextPoint(rd->Xv(),rd->Yv(),rd->Zv());
135 pointsD0toKpi->SetPointId(rd);
138 rd->UnsetOwnPrimaryVtx();
143 //cont->SetTitle("test");
148 pointsD0toKpi->SetTitle(Form("N=%d",pointsD0toKpi->Size()));
149 pointsD0toKpi->SetMarkerStyle(4);
150 pointsD0toKpi->SetMarkerSize(1.5);
151 pointsD0toKpi->SetMarkerColor(kViolet);
153 gEve->AddElement(pointsD0toKpi);