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