]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/ana_list_load_kinks.C
Add function geom_its_dets() that displays the branches containing sensitive volumes.
[u/mrichter/AliRoot.git] / EVE / alice-macros / ana_list_load_kinks.C
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
22 void 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
33 void 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
42 AliEveKink* 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
106 void 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 }