ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * 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 <TEveVSDStructs.h>
#include <TEveTrackPropagator.h>
#include <TEveManager.h>

#include <AliExternalTrackParam.h>
#include <AliPID.h>
#include <AliESDEvent.h>
#include <AliESDVertex.h>
#include <AliESDtrack.h>
#include <AliESDv0.h>
#include <AliEveEventManager.h>
#include <AliEveV0.h>
#endif


void esd_v0_init_rectrack(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);
  // Double_t ep = at->GetP(), mc = at->GetMass();
  rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
}

AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
		      AliESDtrack* neg, AliESDtrack* pos, AliESDv0* v0, Int_t i)
{
  TEveRecTrack  rcPos;
  TEveRecTrack  rcNeg;
  TEveRecV0     rcV0;

  Double_t p[3];
  v0->GetNPxPyPz(p[0], p[1], p[2]);
  rcV0.fPPos.Set(p);
  v0->GetPPxPyPz(p[0], p[1], p[2]);
  rcV0.fPNeg.Set(p);

  v0->GetPxPyPz(p[0], p[1], p[2]);

  Double_t v[3];

  v0->GetXYZ(v[0], v[1], v[2]);
  rcV0.fVCa.Set(v);

  v0->GetParamN()->GetXYZ(v);  rcV0.fVNeg.Set(v);
  v0->GetParamP()->GetXYZ(v);  rcV0.fVPos.Set(v);

  rcV0.fV0Birth.Set(primVtx->GetX(), primVtx->GetY(), primVtx->GetZ());

  // Simulation data not directly available in AliESDv0
  //rcV0.fDLabel[0] = v0->GetNindex();
  //rcV0.fDLabel[1] = v0->GetPindex();

  esd_v0_init_rectrack(rcNeg, v0->GetParamN());
  rcNeg.fIndex = v0->GetNindex();
  esd_v0_init_rectrack(rcPos, v0->GetParamP());
  rcPos.fIndex = v0->GetPindex();

  AliEveV0* myV0 = new AliEveV0(&rcNeg, &rcPos, &rcV0, rnrStyle);
  myV0->SetElementName(Form("ESDv0 %d", i));
  myV0->SetElementTitle(Form("OnFly: %d\nDCA %f",
                             v0->GetOnFlyStatus(),
                             v0->GetDcaV0Daughters()));
  myV0->SetESDIndex(i);
  myV0->SetOnFlyStatus(v0->GetOnFlyStatus());
  myV0->SetDaughterDCA(v0->GetDcaV0Daughters());

  Double_t negProbability[10], posProbability[10];
  Double_t negP = 0.0, posP = 0.0;
  neg->GetESDpid(negProbability);
  pos->GetESDpid(posProbability);
  negP = neg->P();
  posP = pos->P();

  // ****** Tentative particle type "concentrations"
  Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
  AliPID::SetPriors(c);

  AliPID negPid(negProbability);
  AliPID posPid(posProbability);

  Int_t   negMostProbPdg =  0;
  Int_t   posMostProbPdg =  0;

  switch (negPid.GetMostProbable()){
  case 0:
    negMostProbPdg =   11; break;
  case 1:
    negMostProbPdg =   13; break;
  case 2:
    negMostProbPdg =  211; break;
  case 3:
    negMostProbPdg =  321; break;
  case 4:
    negMostProbPdg = 2212; break;
  default :
    negMostProbPdg =  211; break;
  }

  switch (posPid.GetMostProbable()){
  case 0:
    posMostProbPdg =   11; break;
  case 1:
    posMostProbPdg =   13; break;
  case 2:
    posMostProbPdg =  211; break;
  case 3:
    posMostProbPdg =  321; break;
  case 4:
    posMostProbPdg = 2212; break;
  default :
    posMostProbPdg =  211; break;
  }

  Float_t negMaxProbPid  = negPid.GetProbability(negPid.GetMostProbable());
  Float_t posMaxProbPid  = posPid.GetProbability(posPid.GetMostProbable());

  myV0->SetMaxProbPdgPid(0,negMostProbPdg,negMaxProbPid);
  myV0->SetMaxProbPdgPid(1,posMostProbPdg,posMaxProbPid);

  return myV0;
}


AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
{
  AliESDEvent* esd = AliEveEventManager::AssertESD();

  AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();

  AliEveV0List* cont = new AliEveV0List("ESD v0");
  cont->SetMainColor(3); // green
  TEveTrackPropagator* rnrStyle = cont->GetPropagator();
  rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );

  gEve->AddElement(cont);

  Int_t count = 0;
  for (Int_t n=0; n<esd->GetNumberOfV0s(); ++n)
  {
    AliESDv0 *v0 = esd->GetV0(n);

    if (v0->GetOnFlyStatus() != onFly) continue;

    Int_t negInd = v0->GetNindex();
    Int_t posInd = v0->GetPindex();
    AliESDtrack* negTr = esd->GetTrack(negInd);
    AliESDtrack* posTr = esd->GetTrack(posInd);

    AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
    if (myV0)
    {
      gEve->AddElement(myV0, cont);
      ++count;
    }
  }

  cont->SetTitle("test");

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

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