]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/esd_V0.C
fix in processing MC AODs
[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 #if !defined(__CINT__) || defined(__MAKECINT__)
11 #include <TEveVSDStructs.h>
12 #include <TEveTrackPropagator.h>
13 #include <TEveManager.h>
14
15 #include <STEER/STEERBase/AliExternalTrackParam.h>
16 #include <STEER/STEERBase/AliPID.h>
17 #include <STEER/ESD/AliESDEvent.h>
18 #include <STEER/ESD/AliESDVertex.h>
19 #include <STEER/ESD/AliESDtrack.h>
20 #include <STEER/ESD/AliESDv0.h>
21 #include <EVE/EveBase/AliEveEventManager.h>
22 #include <EVE/EveBase/AliEveV0.h>
23 #endif
24
25
26 void esd_v0_init_rectrack(TEveRecTrack& rt, const AliExternalTrackParam* tp)
27 {
28   Double_t      pbuf[3], vbuf[3];
29
30   rt.fSign = tp->GetSign();
31   tp->GetXYZ(vbuf);     rt.fV.Set(vbuf);
32   tp->GetPxPyPz(pbuf);  rt.fP.Set(pbuf);
33   // Double_t ep = at->GetP(), mc = at->GetMass();
34   rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
35 }
36
37 AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
38                       AliESDtrack* neg, AliESDtrack* pos, AliESDv0* v0, Int_t i)
39 {
40   TEveRecTrack  rcPos;
41   TEveRecTrack  rcNeg;
42   TEveRecV0     rcV0;
43
44   Double_t p[3];
45   v0->GetNPxPyPz(p[0], p[1], p[2]);
46   rcV0.fPPos.Set(p);
47   v0->GetPPxPyPz(p[0], p[1], p[2]);
48   rcV0.fPNeg.Set(p);
49
50   v0->GetPxPyPz(p[0], p[1], p[2]);
51
52   Double_t v[3];
53
54   v0->GetXYZ(v[0], v[1], v[2]);
55   rcV0.fVCa.Set(v);
56
57   v0->GetParamN()->GetXYZ(v);  rcV0.fVNeg.Set(v);
58   v0->GetParamP()->GetXYZ(v);  rcV0.fVPos.Set(v);
59
60   rcV0.fV0Birth.Set(primVtx->GetXv(), primVtx->GetYv(), primVtx->GetZv());
61
62   // Simulation data not directly available in AliESDv0
63   //rcV0.fDLabel[0] = v0->GetNindex();
64   //rcV0.fDLabel[1] = v0->GetPindex();
65
66   esd_v0_init_rectrack(rcNeg, v0->GetParamN());
67   rcNeg.fIndex = v0->GetNindex();
68   esd_v0_init_rectrack(rcPos, v0->GetParamP());
69   rcPos.fIndex = v0->GetPindex();
70
71   AliEveV0* myV0 = new AliEveV0(&rcNeg, &rcPos, &rcV0, rnrStyle);
72   myV0->SetElementName(Form("ESDv0 %d", i));
73   myV0->SetElementTitle(Form("OnFly: %d\nDCA %f",
74                              v0->GetOnFlyStatus(),
75                              v0->GetDcaV0Daughters()));
76   myV0->SetESDIndex(i);
77   myV0->SetOnFlyStatus(v0->GetOnFlyStatus());
78   myV0->SetDaughterDCA(v0->GetDcaV0Daughters());
79
80   Double_t negProbability[10], posProbability[10];
81   Double_t negP = 0.0, posP = 0.0;
82   neg->GetESDpid(negProbability);
83   pos->GetESDpid(posProbability);
84   negP = neg->P();
85   posP = pos->P();
86
87   // ****** Tentative particle type "concentrations"
88   Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
89   AliPID::SetPriors(c);
90
91   AliPID negPid(negProbability);
92   AliPID posPid(posProbability);
93
94   Int_t   negMostProbPdg =  0;
95   Int_t   posMostProbPdg =  0;
96
97   switch (negPid.GetMostProbable()){
98   case 0:
99     negMostProbPdg =   11; break;
100   case 1:
101     negMostProbPdg =   13; break;
102   case 2:
103     negMostProbPdg =  211; break;
104   case 3:
105     negMostProbPdg =  321; break;
106   case 4:
107     negMostProbPdg = 2212; break;
108   default :
109     negMostProbPdg =  211; break;
110   }
111
112   switch (posPid.GetMostProbable()){
113   case 0:
114     posMostProbPdg =   11; break;
115   case 1:
116     posMostProbPdg =   13; break;
117   case 2:
118     posMostProbPdg =  211; break;
119   case 3:
120     posMostProbPdg =  321; break;
121   case 4:
122     posMostProbPdg = 2212; break;
123   default :
124     posMostProbPdg =  211; break;
125   }
126
127   Float_t negMaxProbPid  = negPid.GetProbability(negPid.GetMostProbable());
128   Float_t posMaxProbPid  = posPid.GetProbability(posPid.GetMostProbable());
129
130   myV0->SetMaxProbPdgPid(0,negMostProbPdg,negMaxProbPid);
131   myV0->SetMaxProbPdgPid(1,posMostProbPdg,posMaxProbPid);
132
133   return myV0;
134 }
135
136
137 AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
138 {
139   AliESDEvent* esd = AliEveEventManager::AssertESD();
140
141   AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
142
143   AliEveV0List* cont = new AliEveV0List("ESD v0");
144   cont->SetMainColor(3); // green
145   TEveTrackPropagator* rnrStyle = cont->GetPropagator();
146   rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
147
148   gEve->AddElement(cont);
149
150   Int_t count = 0;
151   for (Int_t n=0; n<esd->GetNumberOfV0s(); ++n)
152   {
153     AliESDv0 *v0 = esd->GetV0(n);
154
155     if (v0->GetOnFlyStatus() != onFly) continue;
156
157     Int_t negInd = v0->GetNindex();
158     Int_t posInd = v0->GetPindex();
159     AliESDtrack* negTr = esd->GetTrack(negInd);
160     AliESDtrack* posTr = esd->GetTrack(posInd);
161
162     AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
163     if (myV0)
164     {
165       gEve->AddElement(myV0, cont);
166       ++count;
167     }
168   }
169
170   cont->SetTitle("test");
171
172   cont->MakeV0s();
173   gEve->Redraw3D();
174
175   return cont;
176 }