]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/ana_list_load_kinks.C
Added last decoder version (V2) in TOF raw data visualization
[u/mrichter/AliRoot.git] / EVE / alice-macros / ana_list_load_kinks.C
CommitLineData
664d520c 1// Launches the list analyser and loads kinks into the list.
2// If you already have a list (or rather a list analyser) with objects and you want to add the kinks to this list, do the following:
3// Right-click the list analyser in the eve-browser and select "ExportToCint". Choose e.g. "list" for the name in the window that pops up.
4// In the console type ".x ana_list_load_kinks.C(list)"
5// For more information please see "ana_list.C" or have a look at the class documentation.
6
7
8#ifndef __CINT__
9#include <TGLViewer.h>
10#include <TEveManager.h>
11#include <EveBase/AliEveEventManager.h>
12#include "TRD/AliTRDarrayADC.h"
13#include <EveDet/AliEveListAnalyser.h>
14
15#include "AliESDEvent.h"
16#include "AliESDfriend.h"
17#include "TRD/AliTRDReconstructor.h"
18#include "TRD/AliTRDtrackV1.h"
19#include "EVE/EveBase/AliEveKink.h"
20#endif
21
22void esd_kink_init_rectrackMother(TEveRecTrack& rt, AliExternalTrackParam* tp)
23{
24 Double_t pbuf[3], vbuf[3];
25
26 rt.fSign = tp->GetSign();
27 tp->GetXYZ(vbuf); rt.fV.Set(vbuf);
28 tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf);
29
30 rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
31}
32
33void esd_kink_init_rectrackDaughter(TEveRecTrack& rt, AliExternalTrackParam* tp, TEveVector* svt,TEveVector* spt)
34{
35 rt.fSign = tp->GetSign();
36 rt.fV.Set(*svt);
37 rt.fP.Set(*spt);
38
39 rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
40}
41
42AliEveKink* esd_make_kink(TEveTrackPropagator* rnrStyleMoth,TEveTrackPropagator* rnrStyleDaugh, AliESDtrack* moth, AliESDtrack* daug, AliESDkink* kink, Int_t i)
43{
44 TEveRecTrack rcMoth;
45 TEveRecTrack rcDaug;
46 TEveRecKink rcKink;
47
48 const TVector3 p1(kink->GetMotherP());
49 rcKink.fPMother.Set(p1);
50 const TVector3 p2(kink->GetDaughterP());
51 rcKink.fPDaughter.Set(p2);
52
53 const TVector3 r1(kink->GetPosition());
54 rcKink.fVKink.Set(r1);
55
56 for (Int_t j=0; j<3; ++j) rckink.fKinkAngle[j]=kink->GetAngle(j);
57
58 Double_t r[3], r2[3];
59
60 moth->GetTPCInnerParam()->GetXYZ(r2); rcKink.fVMother.Set(r2);
61 daug->GetOuterParam()->GetXYZ(r); rcKink.fVDaughter.Set(r);
62
63 esd_kink_init_rectrackMother(rcMoth, (moth->GetTPCInnerParam()));
64 rcMoth.fIndex = moth->GetID();
65
66 esd_kink_init_rectrackDaughter(rcDaug, daug->GetOuterParam(), &rcKink.fVKink, &rcKink.fPDaughter);
67 rcDaug.fIndex = daug->GetID();
68
69 AliEveKink* myKink = new AliEveKink(&rcMoth, &rcDaug, &rcKink, rnrStyleMoth,rnrStyleDaugh);
70
71 myKink->SetElementName(Form("ESDkink %d \n", i));
72 myKink->SetESDKinkIndex(i);
73
74 for (Int_t j=0; j<3; ++j) myKink->SetKinkAngle(j, kink->GetAngle(j));
75 Double_t daugProbability[10];
76 Double_t daugP = 0.0;
77 daug->GetESDpid(daugProbability);
78 daugP = daug->P();
79
80 // ****** Tentative particle type "concentrations"
81 Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
82 AliPID::SetPriors(c);
83
84 AliPID daugPid(daugProbability);
85
86 Int_t daugMostProbPdg = 0;
87
88 switch (daugPid.GetMostProbable()){
89 case 0:
90 daugMostProbPdg = 11; break;
91 case 1:
92 daugMostProbPdg = 13; break;
93 case 2:
94 daugMostProbPdg = 211; break;
95 default :
96 daugMostProbPdg = 13; break;
97 }
98
99 Float_t daugMaxProbPid = daugPid.GetProbability(daugPid.GetMostProbable());
100
101 myKink->SetMaxProbPdgPid(daugMostProbPdg,daugMaxProbPid);//????????????
102
103 return myKink;
104}
105
106void ana_list_load_kinks(AliEveListAnalyser* objects = 0, TEveElement *cont = 0)
107{
108 Bool_t noListProvided = kTRUE;
109 if (objects) noListProvided = kFALSE;
110
111 // Link data containers
112 AliESDfriend *eventESDfriend = 0x0;
113 if(!(eventESDfriend = AliEveEventManager::AssertESDfriend())){
114 Warning("ana_list_load_tracks", "AliESDfriend not found");
115 return;
116 }
117
118 AliESDEvent* esd = AliEveEventManager::AssertESD();
119
120 AliEveEventManager::AssertGeometry();
121
122 if (!objects) objects = new AliEveListAnalyser("Analysis Objects");
123
124 // Kinks
125 AliEveKinkList* list = new AliEveKinkList("ESD kink");
126 list->SetMainColor(3); // green
127 TEveTrackPropagator* rnrStyleMoth = list->GetPropagatorMoth();
128 rnrStyleMoth->SetMagField( 0.1*esd->GetMagneticField() );
129 TEveTrackPropagator* rnrStyleDaugh = list->GetPropagatorDaugh();
130 rnrStyleDaugh->SetMagField( 0.1*esd->GetMagneticField() );
131 rnrStyleDaugh->SetMaxR(520);
132 //gEve->AddElement(list);
133
134// Number of elements already in the list
135 Int_t nOld = objects->NumChildren();
136
137 Int_t count = 0;
138
139 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
140 {
141 AliESDtrack* mtrack = esd->GetTrack(n);
142 if (!mtrack) continue;
143 // GetKinkIndex < 0 in the following!!! => -GetKinkIndex > 0
144 if(mtrack->GetKinkIndex(0) < 0)
145 {
146 AliESDkink *kink = new AliESDkink;
147
148 kink = esd->GetKink(-mtrack->GetKinkIndex(0) - 1);
149 if (!kink) continue;
150
151 for (Int_t m = 0; m < esd->GetNumberOfTracks(); ++m)
152 {
153 AliESDtrack * dtrack = esd->GetTrack(m);
154 if (!dtrack) continue;
155
156 if((dtrack->GetKinkIndex(0) > 0 ) && (dtrack->GetKinkIndex(0) == -mtrack->GetKinkIndex(0)))
157 {
158 AliESDtrack* mothTr = esd->GetTrack(n);
159 AliESDtrack* daugTr = esd->GetTrack(m);
160 if (!mothTr || !daugTr) continue;
161
162 AliEveKink* myKink = esd_make_kink(rnrStyleMoth, rnrStyleDaugh, mothTr, daugTr, kink, (-mtrack->GetKinkIndex(0)-1));
163 if (myKink)
164 {
165 myKink->SetUserData(kink);
166 myKink->SetMarkerColor(3);
167 gEve->AddElement(myKink, list);
168 objects->AddElement(myKink);
169 myKink->SetName(Form("[%4d] kink", count + nOld));
170 ++count;
171 }
172 }
173 } // inner track loop
174 } //mother kink index <0
175 } // Outer track loop
176
177 list->MakeKinks();
178
179 objects->SetTitle(Form("Objects %d", objects->NumChildren()));
180 objects->StampObjProps();
181
182 // If a new list analyser has been created, add it to eve.
183 if (noListProvided) gEve->AddElement(objects, cont);
184
185 gEve->Redraw3D();
186
187 // TGLViewer *v = gEve->GetDefaultGLViewer();
188 // v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
189 // ((TGLOrthoCamera&)v->CurrentCamera()).SetEnableRotate(kTRUE);
190 // v->UpdateScene();
191
192 return;
193}