ROOT logo
//
// How to steer the basic TRD data containers from a macro.
// 
// The loading and looping over events is performed by the
// AliEve mechanism. For a stand alone TRD loop control check 
// the macro "trd_loader.C"
// 
// Usage:
// .x trd_detectors.C(sector)
// 
// Author:
// Alex Bercuci (A.Bercuci@gsi.de)
// 

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TGeoManager.h>
#include <TEveManager.h>
#include <TEveElement.h>
#include <TEvePointSet.h>

#include <AliCluster.h>
#include <AliRunLoader.h>
#include <AliTRDarrayADC.h>
#include <AliTRDcluster.h>
#include <AliTRDgeometry.h>
#include <AliTRDdigitsManager.h>
#include <AliEveEventManager.h>
#include <AliEveTRDModuleImp.h>
#else
class TEvePointSet;
class TEveElement;
#endif

TEveElementList* trd_digits(Int_t sector = -1, TEveElement *cont = 0)
{
  // Link data containers
  if(!gGeoManager) AliEveEventManager::AssertGeometry();

  AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
  
  // define EVE containers
  TEveElementList *list = new TEveElementList("TRD Digits");
  
  AliEveTRDNode *sm(NULL), *stk(NULL); 
  AliEveTRDChamber *chm(NULL);
  // Link TRD digits
  rl->LoadDigits("TRD");
  TTree *tD = rl->GetTreeD("TRD", kFALSE);
  if(!tD){ 
    Error("trd_digits", "Missing digits tree");
    return NULL;
  }
  AliTRDdigitsManager dm;
  dm.ReadDigits(tD);

  AliTRDgeometry *geo = new AliTRDgeometry();
  Int_t sBegin=sector<0?0:sector,
        sEnd  =sector<0?(AliTRDgeometry::kNsector):sector+1;
  Int_t jdet(0);
  for(Int_t isec=sBegin; isec<sEnd; isec++) {
    sm = new AliEveTRDNode("Sector", isec);
    for(Int_t istk(0); istk<AliTRDgeometry::kNstack; istk++) {
      stk = new AliEveTRDNode("Stack", istk);
      stk->SetTitle(Form("Index %d", isec*AliTRDgeometry::kNstack+istk));
      for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++) {
        Int_t det=AliTRDgeometry::GetDetector(ily, istk, isec);
        if(!(dm.GetDigits(det)->GetDim())) continue;
        chm=new AliEveTRDChamber(det);
        chm->SetGeometry(geo);
        chm->LoadDigits(&dm);
        stk->AddElement(chm);
        jdet++;
      }
      if(!stk->HasChildren()){
        delete stk;
        continue;
      }
      sm->AddElement(stk);
    }
    if(!sm->HasChildren()){
      delete sm;
      continue;
    }
    list->AddElement(sm);
  }
  rl->UnloadDigits("TRD");
  gEve->AddElement(list, cont);
  gEve->Redraw3D();

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