]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/esd_V0.C
Update master to aliroot
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_V0.C
CommitLineData
d810d0de 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 *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
ca5fb6a4 9
ba978640 10#if !defined(__CINT__) || defined(__MAKECINT__)
11#include <TEveVSDStructs.h>
12#include <TEveTrackPropagator.h>
13#include <TEveManager.h>
14
6c49a8e1 15#include <AliExternalTrackParam.h>
16#include <AliPID.h>
17#include <AliESDEvent.h>
18#include <AliESDVertex.h>
19#include <AliESDtrack.h>
20#include <AliESDv0.h>
21#include <AliEveEventManager.h>
22#include <AliEveV0.h>
ba978640 23#endif
24
25
26void esd_v0_init_rectrack(TEveRecTrack& rt, const AliExternalTrackParam* tp)
b594a020 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
d810d0de 37AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
a9f14204 38 AliESDtrack* neg, AliESDtrack* pos, AliESDv0* v0, Int_t i)
39{
ca8a6926 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]);
e6e8b28b 51
ca8a6926 52 Double_t v[3];
e6e8b28b 53
ca8a6926 54 v0->GetXYZ(v[0], v[1], v[2]);
e6e8b28b 55 rcV0.fVCa.Set(v);
ca8a6926 56
e6e8b28b 57 v0->GetParamN()->GetXYZ(v); rcV0.fVNeg.Set(v);
58 v0->GetParamP()->GetXYZ(v); rcV0.fVPos.Set(v);
ca8a6926 59
e690d4d0 60 rcV0.fV0Birth.Set(primVtx->GetX(), primVtx->GetY(), primVtx->GetZ());
ca8a6926 61
e6e8b28b 62 // Simulation data not directly available in AliESDv0
63 //rcV0.fDLabel[0] = v0->GetNindex();
64 //rcV0.fDLabel[1] = v0->GetPindex();
ca8a6926 65
66 esd_v0_init_rectrack(rcNeg, v0->GetParamN());
e6e8b28b 67 rcNeg.fIndex = v0->GetNindex();
ca8a6926 68 esd_v0_init_rectrack(rcPos, v0->GetParamP());
e6e8b28b 69 rcPos.fIndex = v0->GetPindex();
ca8a6926 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
2c7d7ac0 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
ca8a6926 133 return myV0;
ca5fb6a4 134}
135
136
ca8a6926 137AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
ca5fb6a4 138{
d810d0de 139 AliESDEvent* esd = AliEveEventManager::AssertESD();
ca8a6926 140
141 AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
ca5fb6a4 142
b594a020 143 AliEveV0List* cont = new AliEveV0List("ESD v0");
fbc350a3 144 cont->SetMainColor(3); // green
84aff7a4 145 TEveTrackPropagator* rnrStyle = cont->GetPropagator();
daaa6c4d 146 rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
ca5fb6a4 147
84aff7a4 148 gEve->AddElement(cont);
ca5fb6a4 149
150 Int_t count = 0;
ca8a6926 151 for (Int_t n=0; n<esd->GetNumberOfV0s(); ++n)
152 {
ca5fb6a4 153 AliESDv0 *v0 = esd->GetV0(n);
ca8a6926 154
155 if (v0->GetOnFlyStatus() != onFly) continue;
ca5fb6a4 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);
51346b82 161
d810d0de 162 AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
ca8a6926 163 if (myV0)
164 {
84aff7a4 165 gEve->AddElement(myV0, cont);
ca8a6926 166 ++count;
ca5fb6a4 167 }
168 }
169
b594a020 170 cont->SetTitle("test");
ca5fb6a4 171
172 cont->MakeV0s();
84aff7a4 173 gEve->Redraw3D();
ca5fb6a4 174
175 return cont;
6c49a8e1 176}