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 <TMath.h>
#include <TEveManager.h>
#include <TEveElement.h>
#include <TEveTrack.h>
#include <TEveTrackPropagator.h>

#include <AliESDEvent.h>
#include <AliESDVertex.h>
#include <AliMultiplicity.h>
#include <AliMagF.h>
#include <AliEveEventManager.h>
#include <AliEveTracklet.h>
#include <AliEveTrackCounter.h>
#endif

TEveElementList* esd_spd_tracklets(Float_t radius=8, Width_t line_width=2,
				   Float_t dPhiWindow=0.080, Float_t dThetaWindow=0.025, 
				   Float_t dPhiShift05T=0.0045)
{
  // radius - cylindrical radius to which the tracklets should be extrapolated

  AliESDEvent     *esd = AliEveEventManager::AssertESD();
  const AliESDVertex    *pv  = esd->GetPrimaryVertexSPD();
  const AliMultiplicity *mul = esd->GetMultiplicity();

  AliMagF *field = AliEveEventManager::AssertMagField();

  TEveElementList* cont = new TEveElementList("SPD Tracklets");
  gEve->AddElement(cont);

  TEveTrackList *tg = new TEveTrackList("Good");
  tg->SetMainColor(kCyan);
  tg->SetLineWidth(line_width);
  cont->AddElement(tg);

  TEveTrackPropagator* pg = tg->GetPropagator();
  pg->SetMaxR(radius);

  TEveTrackList *tb = new TEveTrackList("Bad");
  tb->SetMainColor(kMagenta);
  tb->SetLineWidth(line_width);
  cont->AddElement(tb);

  TEveTrackPropagator* pb = tb->GetPropagator();
  pb->SetMaxR(radius);

  const Float_t  Bz = TMath::Abs(field->SolenoidField());

  const Double_t dPhiShift     = dPhiShift05T / 5.0 * Bz;
  const Double_t dPhiWindow2   = dPhiWindow * dPhiWindow;
  const Double_t dThetaWindow2 = dThetaWindow * dThetaWindow;

  for (Int_t i = 0; i < mul->GetNumberOfTracklets(); ++i)
  {
    Float_t theta  = mul->GetTheta(i);
    Float_t phi    = mul->GetPhi(i);
    Float_t dTheta = mul->GetDeltaTheta(i);
    Float_t dPhi   = mul->GetDeltaPhi(i) - dPhiShift;
    Float_t d      = dPhi*dPhi/dPhiWindow2 + dTheta*dTheta/dThetaWindow2;

    TEveTrackList* tl = (d < 1.0f) ? tg : tb;

    AliEveTracklet *t = new AliEveTracklet(i, pv, theta, phi, tl->GetPropagator());
    t->SetAttLineAttMarker(tl);
    t->SetElementName(Form("Tracklet %d", i));
    t->SetElementTitle(Form("Id = %d\nEta=%.3f, Theta=%.3f, dTheta=%.3f\nPhi=%.3f dPhi=%.3f",
			    i, mul->GetEta(i), theta, dTheta, phi, dPhi));

    tl->AddElement(t);
  }

  tg->MakeTracks();
  tg->SetTitle(Form("N=%d", tg->NumChildren()));

  tb->MakeTracks();
  tb->SetTitle(Form("N=%d", tb->NumChildren()));

  if (AliEveTrackCounter::IsActive())
  {
    AliEveTrackCounter::fgInstance->RegisterTracklets(tg, kTRUE);
    AliEveTrackCounter::fgInstance->RegisterTracklets(tb, kFALSE);
  }
  else
  {
//==========================================
    tb->SetLineStyle(1);
    tb->SetLineWidth(2);
//==========================================

  }

  gEve->Redraw3D();

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