ROOT logo
// 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:1
 ana_list_load_kinks.C:2
 ana_list_load_kinks.C:3
 ana_list_load_kinks.C:4
 ana_list_load_kinks.C:5
 ana_list_load_kinks.C:6
 ana_list_load_kinks.C:7
 ana_list_load_kinks.C:8
 ana_list_load_kinks.C:9
 ana_list_load_kinks.C:10
 ana_list_load_kinks.C:11
 ana_list_load_kinks.C:12
 ana_list_load_kinks.C:13
 ana_list_load_kinks.C:14
 ana_list_load_kinks.C:15
 ana_list_load_kinks.C:16
 ana_list_load_kinks.C:17
 ana_list_load_kinks.C:18
 ana_list_load_kinks.C:19
 ana_list_load_kinks.C:20
 ana_list_load_kinks.C:21
 ana_list_load_kinks.C:22
 ana_list_load_kinks.C:23
 ana_list_load_kinks.C:24
 ana_list_load_kinks.C:25
 ana_list_load_kinks.C:26
 ana_list_load_kinks.C:27
 ana_list_load_kinks.C:28
 ana_list_load_kinks.C:29
 ana_list_load_kinks.C:30
 ana_list_load_kinks.C:31
 ana_list_load_kinks.C:32
 ana_list_load_kinks.C:33
 ana_list_load_kinks.C:34
 ana_list_load_kinks.C:35
 ana_list_load_kinks.C:36
 ana_list_load_kinks.C:37
 ana_list_load_kinks.C:38
 ana_list_load_kinks.C:39
 ana_list_load_kinks.C:40
 ana_list_load_kinks.C:41
 ana_list_load_kinks.C:42
 ana_list_load_kinks.C:43
 ana_list_load_kinks.C:44
 ana_list_load_kinks.C:45
 ana_list_load_kinks.C:46
 ana_list_load_kinks.C:47
 ana_list_load_kinks.C:48
 ana_list_load_kinks.C:49
 ana_list_load_kinks.C:50
 ana_list_load_kinks.C:51
 ana_list_load_kinks.C:52
 ana_list_load_kinks.C:53
 ana_list_load_kinks.C:54
 ana_list_load_kinks.C:55
 ana_list_load_kinks.C:56
 ana_list_load_kinks.C:57
 ana_list_load_kinks.C:58
 ana_list_load_kinks.C:59
 ana_list_load_kinks.C:60
 ana_list_load_kinks.C:61
 ana_list_load_kinks.C:62
 ana_list_load_kinks.C:63
 ana_list_load_kinks.C:64
 ana_list_load_kinks.C:65
 ana_list_load_kinks.C:66
 ana_list_load_kinks.C:67
 ana_list_load_kinks.C:68
 ana_list_load_kinks.C:69
 ana_list_load_kinks.C:70
 ana_list_load_kinks.C:71
 ana_list_load_kinks.C:72
 ana_list_load_kinks.C:73
 ana_list_load_kinks.C:74
 ana_list_load_kinks.C:75
 ana_list_load_kinks.C:76
 ana_list_load_kinks.C:77
 ana_list_load_kinks.C:78
 ana_list_load_kinks.C:79
 ana_list_load_kinks.C:80
 ana_list_load_kinks.C:81
 ana_list_load_kinks.C:82
 ana_list_load_kinks.C:83
 ana_list_load_kinks.C:84
 ana_list_load_kinks.C:85
 ana_list_load_kinks.C:86
 ana_list_load_kinks.C:87
 ana_list_load_kinks.C:88
 ana_list_load_kinks.C:89
 ana_list_load_kinks.C:90
 ana_list_load_kinks.C:91
 ana_list_load_kinks.C:92
 ana_list_load_kinks.C:93
 ana_list_load_kinks.C:94
 ana_list_load_kinks.C:95
 ana_list_load_kinks.C:96
 ana_list_load_kinks.C:97
 ana_list_load_kinks.C:98
 ana_list_load_kinks.C:99
 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