// Launches the list analyser and loads kinks into the list.
// 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:
// 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.
// In the console type ".x ana_list_load_kinks.C(list)"
// For more information please see "ana_list.C" or have a look at the class documentation.
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TGLViewer.h>
#include <TEveManager.h>
#include <TEveTrackPropagator.h>
#include <AliTRDarrayADC.h>
#include <AliTRDReconstructor.h>
#include <AliTRDtrackV1.h>
#include <AliESDkink.h>
#include <AliESDEvent.h>
#include <AliESDfriend.h>
#include <AliEveTRDData.h>
#include <AliEveEventManager.h>
#include <AliEveKink.h>
#include <AliEveListAnalyser.h>
#endif
void esd_kink_init_rectrackMother(TEveRecTrack& rt, const AliExternalTrackParam* tp)
{
Double_t pbuf[3], vbuf[3];
rt.fSign = tp->GetSign();
tp->GetXYZ(vbuf); rt.fV.Set(vbuf);
tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf);
rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
}
void esd_kink_init_rectrackDaughter(TEveRecTrack& rt, const AliExternalTrackParam* tp, TEveVector* svt,TEveVector* spt)
{
rt.fSign = tp->GetSign();
rt.fV.Set(*svt);
rt.fP.Set(*spt);
rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
}
AliEveKink* esd_make_kink(TEveTrackPropagator* rnrStyleMoth,TEveTrackPropagator* rnrStyleDaugh, AliESDtrack* moth, AliESDtrack* daug, AliESDkink* kink, Int_t i)
{
TEveRecTrack rcMoth;
TEveRecTrack rcDaug;
TEveRecKink rcKink;
const TVector3 p1(kink->GetMotherP());
rcKink.fPMother.Set(p1);
const TVector3 p2(kink->GetDaughterP());
rcKink.fPDaughter.Set(p2);
const TVector3 r1(kink->GetPosition());
rcKink.fVKink.Set(r1);
for (Int_t j=0; j<3; ++j) rcKink.fKinkAngle[j]=kink->GetAngle(j);
Double_t r[3], r2[3];
moth->GetTPCInnerParam()->GetXYZ(r2); rcKink.fVMother.Set(r2);
daug->GetOuterParam()->GetXYZ(r); rcKink.fVDaughter.Set(r);
esd_kink_init_rectrackMother(rcMoth, (moth->GetTPCInnerParam()));
rcMoth.fIndex = moth->GetID();
esd_kink_init_rectrackDaughter(rcDaug, daug->GetOuterParam(), &rcKink.fVKink, &rcKink.fPDaughter);
rcDaug.fIndex = daug->GetID();
AliEveKink* myKink = new AliEveKink(&rcMoth, &rcDaug, &rcKink, rnrStyleMoth,rnrStyleDaugh);
myKink->SetElementName(Form("ESDkink %d \n", i));
myKink->SetESDKinkIndex(i);
for (Int_t j=0; j<3; ++j) myKink->SetKinkAngle(j, kink->GetAngle(j));
Double_t daugProbability[10];
Double_t daugP = 0.0;
daug->GetESDpid(daugProbability);
daugP = daug->P();
// ****** Tentative particle type "concentrations"
Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
AliPID::SetPriors(c);
AliPID daugPid(daugProbability);
Int_t daugMostProbPdg = 0;
switch (daugPid.GetMostProbable()){
case 0:
daugMostProbPdg = 11; break;
case 1:
daugMostProbPdg = 13; break;
case 2:
daugMostProbPdg = 211; break;
default :
daugMostProbPdg = 13; break;
}
Float_t daugMaxProbPid = daugPid.GetProbability(daugPid.GetMostProbable());
myKink->SetMaxProbPdgPid(daugMostProbPdg,daugMaxProbPid);//????????????
return myKink;
}
void ana_list_load_kinks(AliEveListAnalyser* objects = 0, TEveElement *cont = 0)
{
Bool_t noListProvided = kTRUE;
if (objects) noListProvided = kFALSE;
// Link data containers
AliESDfriend *eventESDfriend = 0x0;
if(!(eventESDfriend = AliEveEventManager::AssertESDfriend())){
Warning("ana_list_load_tracks", "AliESDfriend not found");
return;
}
AliESDEvent* esd = AliEveEventManager::AssertESD();
AliEveEventManager::AssertGeometry();
if (!objects) objects = new AliEveListAnalyser("Analysis Objects");
// Kinks
AliEveKinkList* list = new AliEveKinkList("ESD kink");
list->SetMainColor(3); // green
TEveTrackPropagator* rnrStyleMoth = list->GetPropagatorMoth();
rnrStyleMoth->SetMagField( 0.1*esd->GetMagneticField() );
TEveTrackPropagator* rnrStyleDaugh = list->GetPropagatorDaugh();
rnrStyleDaugh->SetMagField( 0.1*esd->GetMagneticField() );
rnrStyleDaugh->SetMaxR(520);
//gEve->AddElement(list);
// Number of elements already in the list
Int_t nOld = objects->NumChildren();
Int_t count = 0;
for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
{
AliESDtrack* mtrack = esd->GetTrack(n);
if (!mtrack) continue;
// GetKinkIndex < 0 in the following!!! => -GetKinkIndex > 0
if(mtrack->GetKinkIndex(0) < 0)
{
AliESDkink *kink = new AliESDkink;
kink = esd->GetKink(-mtrack->GetKinkIndex(0) - 1);
if (!kink) continue;
for (Int_t m = 0; m < esd->GetNumberOfTracks(); ++m)
{
AliESDtrack * dtrack = esd->GetTrack(m);
if (!dtrack) continue;
if((dtrack->GetKinkIndex(0) > 0 ) && (dtrack->GetKinkIndex(0) == -mtrack->GetKinkIndex(0)))
{
AliESDtrack* mothTr = esd->GetTrack(n);
AliESDtrack* daugTr = esd->GetTrack(m);
if (!mothTr || !daugTr) continue;
AliEveKink* myKink = esd_make_kink(rnrStyleMoth, rnrStyleDaugh, mothTr, daugTr, kink, (-mtrack->GetKinkIndex(0)-1));
if (myKink)
{
myKink->SetUserData(kink);
myKink->SetMarkerColor(3);
gEve->AddElement(myKink, list);
objects->AddElement(myKink);
myKink->SetName(Form("[%4d] kink", count + nOld));
++count;
}
}
} // inner track loop
} //mother kink index <0
} // Outer track loop
list->MakeKinks();
objects->SetTitle(Form("Objects %d", objects->NumChildren()));
objects->StampObjProps();
// If a new list analyser has been created, add it to eve.
if (noListProvided) gEve->AddElement(objects, cont);
gEve->Redraw3D();
// TGLViewer *v = gEve->GetDefaultGLViewer();
// v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
// ((TGLOrthoCamera&)v->CurrentCamera()).SetEnableRotate(kTRUE);
// v->UpdateScene();
return;
}
ana_list_load_kinks.C:100 ana_list_load_kinks.C:101 ana_list_load_kinks.C:102 ana_list_load_kinks.C:103 ana_list_load_kinks.C:104 ana_list_load_kinks.C:105 ana_list_load_kinks.C:106 ana_list_load_kinks.C:107 ana_list_load_kinks.C:108 ana_list_load_kinks.C:109 ana_list_load_kinks.C:110 ana_list_load_kinks.C:111 ana_list_load_kinks.C:112 ana_list_load_kinks.C:113 ana_list_load_kinks.C:114 ana_list_load_kinks.C:115 ana_list_load_kinks.C:116 ana_list_load_kinks.C:117 ana_list_load_kinks.C:118 ana_list_load_kinks.C:119 ana_list_load_kinks.C:120 ana_list_load_kinks.C:121 ana_list_load_kinks.C:122 ana_list_load_kinks.C:123 ana_list_load_kinks.C:124 ana_list_load_kinks.C:125 ana_list_load_kinks.C:126 ana_list_load_kinks.C:127 ana_list_load_kinks.C:128 ana_list_load_kinks.C:129 ana_list_load_kinks.C:130 ana_list_load_kinks.C:131 ana_list_load_kinks.C:132 ana_list_load_kinks.C:133 ana_list_load_kinks.C:134 ana_list_load_kinks.C:135 ana_list_load_kinks.C:136 ana_list_load_kinks.C:137 ana_list_load_kinks.C:138 ana_list_load_kinks.C:139 ana_list_load_kinks.C:140 ana_list_load_kinks.C:141 ana_list_load_kinks.C:142 ana_list_load_kinks.C:143 ana_list_load_kinks.C:144 ana_list_load_kinks.C:145 ana_list_load_kinks.C:146 ana_list_load_kinks.C:147 ana_list_load_kinks.C:148 ana_list_load_kinks.C:149 ana_list_load_kinks.C:150 ana_list_load_kinks.C:151 ana_list_load_kinks.C:152 ana_list_load_kinks.C:153 ana_list_load_kinks.C:154 ana_list_load_kinks.C:155 ana_list_load_kinks.C:156 ana_list_load_kinks.C:157 ana_list_load_kinks.C:158 ana_list_load_kinks.C:159 ana_list_load_kinks.C:160 ana_list_load_kinks.C:161 ana_list_load_kinks.C:162 ana_list_load_kinks.C:163 ana_list_load_kinks.C:164 ana_list_load_kinks.C:165 ana_list_load_kinks.C:166 ana_list_load_kinks.C:167 ana_list_load_kinks.C:168 ana_list_load_kinks.C:169 ana_list_load_kinks.C:170 ana_list_load_kinks.C:171 ana_list_load_kinks.C:172 ana_list_load_kinks.C:173 ana_list_load_kinks.C:174 ana_list_load_kinks.C:175 ana_list_load_kinks.C:176 ana_list_load_kinks.C:177 ana_list_load_kinks.C:178 ana_list_load_kinks.C:179 ana_list_load_kinks.C:180 ana_list_load_kinks.C:181 ana_list_load_kinks.C:182 ana_list_load_kinks.C:183 ana_list_load_kinks.C:184 ana_list_load_kinks.C:185 ana_list_load_kinks.C:186 ana_list_load_kinks.C:187 ana_list_load_kinks.C:188 ana_list_load_kinks.C:189 ana_list_load_kinks.C:190 ana_list_load_kinks.C:191 ana_list_load_kinks.C:192 ana_list_load_kinks.C:193 ana_list_load_kinks.C:194 ana_list_load_kinks.C:195 ana_list_load_kinks.C:196 ana_list_load_kinks.C:197