With Boris and Antonin:
[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   if (! v0->GetOnFlyStatus())
25   { // v0 on fly do not have the momentum vector filled...
26     TEveRecTrack  rcPos;
27     TEveRecTrack  rcNeg;
28     TEveRecV0     rcV0;
29
30     Double_t p[3];
31     v0->GetNPxPyPz(p[0], p[1], p[2]);
32     rcV0.fPPos.Set(p);
33     v0->GetPPxPyPz(p[0], p[1], p[2]);
34     rcV0.fPNeg.Set(p);
35
36     v0->GetPxPyPz(p[0], p[1], p[2]);
37     Double_t v[3];
38     v0->GetXYZ(v[0], v[1], v[2]);
39
40     //   printf(" %f %f %f / %f %f %f    %i\n",p[0], p[1], p[2],
41     //   v[0], v[1], v[2], v0->GetOnFlyStatus());
42
43     rcV0.fVNeg.Set(v); //original track vertices at dca not stored
44     rcV0.fVPos.Set(v);
45     rcV0.fVCa.Set(v);
46
47     rcV0.fDLabel[0] = v0->GetNindex();
48     rcV0.fDLabel[1] = v0->GetPindex();
49
50     esd_v0_init_rectrack(rcNeg, v0->GetParamN());
51     esd_v0_init_rectrack(rcPos, v0->GetParamP());
52
53     AliEveV0* myV0 = new AliEveV0(&rcNeg, &rcPos, &rcV0, rnrStyle);
54     char ch[50];
55     //   sprintf(ch,"ESDv0%i",i);
56     //   myV0->SetName(ch);
57     //   myV0->SetTitle(ch);
58     myV0->SetESDIndex(i);
59     myV0->SetDaughterDCA(v0->GetDcaV0Daughters());
60
61     return myV0;
62   } else {
63     return 0;
64   }
65 }
66
67
68 AliEveV0List* esd_V0(Double_t min_pt=0.1, Double_t max_pt=100)
69 {
70   AliESDEvent* esd = AliEveEventManager::AssertESD();
71   AliESDVertex* primVertex =(AliESDVertex*) esd->GetVertex();
72
73   AliEveV0List* cont = new AliEveV0List("ESD v0");
74   cont->SetMainColor(Color_t(3)); // green
75   TEveTrackPropagator* rnrStyle = cont->GetPropagator();
76   rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
77
78   gEve->AddElement(cont);
79
80   Int_t count = 0;
81   //for (Int_t n=0; count<3; n++) {
82   for (Int_t n=0; n<esd->GetNumberOfV0s(); n++) {
83
84     AliESDv0 *v0 = esd->GetV0(n);
85     if (v0->GetOnFlyStatus()) continue;
86
87     Int_t negInd = v0->GetNindex();
88     Int_t posInd = v0->GetPindex();
89     AliESDtrack* negTr = esd->GetTrack(negInd);
90     AliESDtrack* posTr = esd->GetTrack(posInd);
91
92     AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
93     if (myV0) {
94       gEve->AddElement(myV0, cont);
95       count++;
96     }
97   }
98
99   cont->SetTitle("test");
100   cont->UpdateItems();
101
102   cont->MakeV0s();
103   gEve->Redraw3D();
104
105   return cont;
106 }
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122