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 <TClonesArray.h>
#include <TBranch.h>
#include <TTree.h>
#include <TEveManager.h>
#include <TEveElement.h>
#include <TEvePointSet.h>

#include <AliRunLoader.h>
#include <AliCluster.h>
#include <AliEveEventManager.h>
#else
class TEveElement;
class TEvePointSet;
class TTree;
class TBranch;
#endif

TEvePointSet* its_clusters(TEveElement* cont=0, Float_t maxR=50)
{
  AliEveEventManager::AssertGeometry();

  AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
  rl->LoadRecPoints("ITS");

  TTree *cTree = rl->GetTreeR("ITS", false);
  if (cTree == 0)
    return 0;

  TClonesArray *cl = NULL;
  TBranch *branch  = cTree->GetBranch("ITSRecPoints");
  branch->SetAddress(&cl);

  TEvePointSet* clusters = new TEvePointSet(10000);
  clusters->SetOwnIds(kTRUE);

  Int_t nentr = (Int_t) cTree->GetEntries();
  for (Int_t i=0; i<nentr; i++)
  {
    if (!cTree->GetEvent(i)) continue;

    Int_t ncl = cl->GetEntriesFast();

    Float_t maxRsqr = maxR*maxR;
    for (Int_t icl = 0; icl < ncl; ++icl)
    {
      AliCluster *c = (AliCluster*) cl->UncheckedAt(icl);
      // This really should not happen, but did in online display once.
      if (c == 0)
      {
	::Warning("its_clusters", "Got NULL AliCluster*, idx=%d, N=%d.",
		  icl, ncl);
	continue;
      }
      Float_t g[3]; //global coordinates
      c->GetGlobalXYZ(g);
      if (g[0]*g[0] + g[1]*g[1] < maxRsqr)
      {
	clusters->SetNextPoint(g[0], g[1], g[2]);
	AliCluster *atp = new AliCluster(*c);
	clusters->SetPointId(atp);
      }
    }
  }

  rl->UnloadRecPoints("ITS");

  if (clusters->Size() == 0 && gEve->GetKeepEmptyCont() == kFALSE) {
    Warning("its_clusters.C", "No ITS clusters");
    delete clusters;
    return 0;
  }

  clusters->SetName("ITS Clusters");

  clusters->SetTitle(Form("N=%d", clusters->Size()));

  const TString viz_tag("REC Clusters ITS");

  clusters->ApplyVizTag(viz_tag, "Clusters");

  gEve->AddElement(clusters, cont);

  gEve->Redraw3D();

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