c8e1a041a3d5a3786adf37652d310ee6d1fcba73
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_V0.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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  **************************************************************************/
9
10 void esd_v0_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp)
11 {
12   Double_t      pbuf[3], vbuf[3];
13
14   rt.fSign = tp->GetSign();
15   tp->GetXYZ(vbuf);     rt.fV.Set(vbuf);
16   tp->GetPxPyPz(pbuf);  rt.fP.Set(pbuf);
17   // Double_t ep = at->GetP(), mc = at->GetMass();
18   rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
19 }
20
21 AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
22                       AliESDtrack* neg, AliESDtrack* pos, AliESDv0* v0, Int_t i)
23 {
24   TEveRecTrack  rcPos;
25   TEveRecTrack  rcNeg;
26   TEveRecV0     rcV0;
27
28   Double_t p[3];
29   v0->GetNPxPyPz(p[0], p[1], p[2]);
30   rcV0.fPPos.Set(p);
31   v0->GetPPxPyPz(p[0], p[1], p[2]);
32   rcV0.fPNeg.Set(p);
33
34   v0->GetPxPyPz(p[0], p[1], p[2]);
35   Double_t v[3];
36   v0->GetXYZ(v[0], v[1], v[2]);
37
38   //   printf(" %f %f %f / %f %f %f    %i\n",p[0], p[1], p[2],
39   //     v[0], v[1], v[2], v0->GetOnFlyStatus());
40
41   rcV0.fVNeg.Set(v); //original track vertices at dca not stored
42   rcV0.fVPos.Set(v);
43   rcV0.fVCa.Set(v);
44
45   rcV0.fDLabel[0] = v0->GetNindex();
46   rcV0.fDLabel[1] = v0->GetPindex();
47
48   esd_v0_init_rectrack(rcNeg, v0->GetParamN());
49   esd_v0_init_rectrack(rcPos, v0->GetParamP());
50
51   AliEveV0* myV0 = new AliEveV0(&rcNeg, &rcPos, &rcV0, rnrStyle);
52   myV0->SetElementName(Form("ESDv0 %d", i));
53   myV0->SetElementTitle(Form("OnFly: %d\nDCA %f",
54                              v0->GetOnFlyStatus(),
55                              v0->GetDcaV0Daughters()));
56   myV0->SetESDIndex(i);
57   myV0->SetOnFlyStatus(v0->GetOnFlyStatus());
58   myV0->SetDaughterDCA(v0->GetDcaV0Daughters());
59
60   return myV0;
61 }
62
63
64 AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
65 {
66   AliESDEvent* esd = AliEveEventManager::AssertESD();
67
68   AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
69
70   AliEveV0List* cont = new AliEveV0List("ESD v0");
71   cont->SetMainColor(Color_t(3)); // green
72   TEveTrackPropagator* rnrStyle = cont->GetPropagator();
73   rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
74
75   gEve->AddElement(cont);
76
77   Int_t count = 0;
78   for (Int_t n=0; n<esd->GetNumberOfV0s(); ++n)
79   {
80     AliESDv0 *v0 = esd->GetV0(n);
81
82     if (v0->GetOnFlyStatus() != onFly) continue;
83
84     Int_t negInd = v0->GetNindex();
85     Int_t posInd = v0->GetPindex();
86     AliESDtrack* negTr = esd->GetTrack(negInd);
87     AliESDtrack* posTr = esd->GetTrack(posInd);
88
89     AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
90     if (myV0)
91     {
92       gEve->AddElement(myV0, cont);
93       ++count;
94     }
95   }
96
97   cont->SetTitle("test");
98   cont->UpdateItems();
99
100   cont->MakeV0s();
101   gEve->Redraw3D();
102
103   return cont;
104 }
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120