ROOT logo
// $Id$
// Main authors: Paraskevi Ganoti: 2009

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TVector3.h>
#include <TEveVector.h>
#include <TEveTrackPropagator.h>
#include <TEveVSDStructs.h>
#include <TEveManager.h>

#include <AliExternalTrackParam.h>
#include <AliPID.h>
#include <AliESDEvent.h>
#include <AliESDtrack.h>
#include <AliESDkink.h>
#include <AliEveKink.h>
#include <AliEveEventManager.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;
} 


AliEveKinkList* esd_kink()
{
  AliESDEvent* esd = AliEveEventManager::AssertESD();
  AliEveKinkList* cont = new AliEveKinkList("ESD kink");
  cont->SetMainColor(3); // green
  TEveTrackPropagator* rnrStyleMoth = cont->GetPropagatorMoth();
  rnrStyleMoth->SetMagField( 0.1*esd->GetMagneticField() );
  TEveTrackPropagator* rnrStyleDaugh = cont->GetPropagatorDaugh();
  rnrStyleDaugh->SetMagField( 0.1*esd->GetMagneticField() ); 
  rnrStyleDaugh->SetMaxR(520);
  gEve->AddElement(cont);

  Int_t count = 0;
//   for (Int_t n=0; n<esd->GetNumberOfKinks(); ++n) 
//   {
//     AliESDkink *kink = esd->GetKink(n);  //???????????
//     printf("kink number = %d,  label of mother = %d , label of daug = %d --", n, kink->GetLabel(0), kink->GetLabel(1));
//   }   To be investigated...
    for (Int_t n=0; n<esd->GetNumberOfTracks(); ++n)
    { 
         AliESDtrack* mtrack = esd->GetTrack(n);
         if(mtrack->GetKinkIndex(0)<0){
    
         AliESDkink *kink = new AliESDkink;
    
         kink=esd->GetKink(TMath::Abs(mtrack->GetKinkIndex(0))-1);
      
         for (Int_t m=0; m<esd->GetNumberOfTracks(); ++m)
         { 
              AliESDtrack * dtrack = esd->GetTrack(m);

              if((dtrack->GetKinkIndex(0)>0)&&(dtrack->GetKinkIndex(0)==TMath::Abs(mtrack->GetKinkIndex(0)))) {
              AliESDtrack* mothTr = esd->GetTrack(n);
              AliESDtrack* daugTr = esd->GetTrack(m);
      
              AliEveKink* myKink = esd_make_kink(rnrStyleMoth, rnrStyleDaugh, mothTr, daugTr, kink, (TMath::Abs(mtrack->GetKinkIndex(0))-1));
              if (myKink)
              {
                 gEve->AddElement(myKink, cont);
                 ++count;
              }
              }
         }  // inner track loop
    
 
         }  //mother kink index <0
    } // Outer track loop

  cont->SetTitle("test");

  cont->MakeKinks();
  gEve->Redraw3D();

  return cont;
}
 esd_kink.C:1
 esd_kink.C:2
 esd_kink.C:3
 esd_kink.C:4
 esd_kink.C:5
 esd_kink.C:6
 esd_kink.C:7
 esd_kink.C:8
 esd_kink.C:9
 esd_kink.C:10
 esd_kink.C:11
 esd_kink.C:12
 esd_kink.C:13
 esd_kink.C:14
 esd_kink.C:15
 esd_kink.C:16
 esd_kink.C:17
 esd_kink.C:18
 esd_kink.C:19
 esd_kink.C:20
 esd_kink.C:21
 esd_kink.C:22
 esd_kink.C:23
 esd_kink.C:24
 esd_kink.C:25
 esd_kink.C:26
 esd_kink.C:27
 esd_kink.C:28
 esd_kink.C:29
 esd_kink.C:30
 esd_kink.C:31
 esd_kink.C:32
 esd_kink.C:33
 esd_kink.C:34
 esd_kink.C:35
 esd_kink.C:36
 esd_kink.C:37
 esd_kink.C:38
 esd_kink.C:39
 esd_kink.C:40
 esd_kink.C:41
 esd_kink.C:42
 esd_kink.C:43
 esd_kink.C:44
 esd_kink.C:45
 esd_kink.C:46
 esd_kink.C:47
 esd_kink.C:48
 esd_kink.C:49
 esd_kink.C:50
 esd_kink.C:51
 esd_kink.C:52
 esd_kink.C:53
 esd_kink.C:54
 esd_kink.C:55
 esd_kink.C:56
 esd_kink.C:57
 esd_kink.C:58
 esd_kink.C:59
 esd_kink.C:60
 esd_kink.C:61
 esd_kink.C:62
 esd_kink.C:63
 esd_kink.C:64
 esd_kink.C:65
 esd_kink.C:66
 esd_kink.C:67
 esd_kink.C:68
 esd_kink.C:69
 esd_kink.C:70
 esd_kink.C:71
 esd_kink.C:72
 esd_kink.C:73
 esd_kink.C:74
 esd_kink.C:75
 esd_kink.C:76
 esd_kink.C:77
 esd_kink.C:78
 esd_kink.C:79
 esd_kink.C:80
 esd_kink.C:81
 esd_kink.C:82
 esd_kink.C:83
 esd_kink.C:84
 esd_kink.C:85
 esd_kink.C:86
 esd_kink.C:87
 esd_kink.C:88
 esd_kink.C:89
 esd_kink.C:90
 esd_kink.C:91
 esd_kink.C:92
 esd_kink.C:93
 esd_kink.C:94
 esd_kink.C:95
 esd_kink.C:96
 esd_kink.C:97
 esd_kink.C:98
 esd_kink.C:99
 esd_kink.C:100
 esd_kink.C:101
 esd_kink.C:102
 esd_kink.C:103
 esd_kink.C:104
 esd_kink.C:105
 esd_kink.C:106
 esd_kink.C:107
 esd_kink.C:108
 esd_kink.C:109
 esd_kink.C:110
 esd_kink.C:111
 esd_kink.C:112
 esd_kink.C:113
 esd_kink.C:114
 esd_kink.C:115
 esd_kink.C:116
 esd_kink.C:117
 esd_kink.C:118
 esd_kink.C:119
 esd_kink.C:120
 esd_kink.C:121
 esd_kink.C:122
 esd_kink.C:123
 esd_kink.C:124
 esd_kink.C:125
 esd_kink.C:126
 esd_kink.C:127
 esd_kink.C:128
 esd_kink.C:129
 esd_kink.C:130
 esd_kink.C:131
 esd_kink.C:132
 esd_kink.C:133
 esd_kink.C:134
 esd_kink.C:135
 esd_kink.C:136
 esd_kink.C:137
 esd_kink.C:138
 esd_kink.C:139
 esd_kink.C:140
 esd_kink.C:141
 esd_kink.C:142
 esd_kink.C:143
 esd_kink.C:144
 esd_kink.C:145
 esd_kink.C:146
 esd_kink.C:147
 esd_kink.C:148
 esd_kink.C:149
 esd_kink.C:150
 esd_kink.C:151
 esd_kink.C:152
 esd_kink.C:153
 esd_kink.C:154
 esd_kink.C:155
 esd_kink.C:156
 esd_kink.C:157
 esd_kink.C:158
 esd_kink.C:159
 esd_kink.C:160
 esd_kink.C:161
 esd_kink.C:162
 esd_kink.C:163
 esd_kink.C:164
 esd_kink.C:165