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.                                                 *
 **************************************************************************/
#ifndef __CINT__

#include <TEveManager.h>
#include <TEveQuadSet.h>
#include <TGeoNode.h>
#include <TGeoBBox.h>
#include <TGeoManager.h>
#include <TStyle.h>
#include <TEveTrans.h>
#include <TClonesArray.h>
#include <TTree.h>
#include <TBranch.h>

#include <EveBase/AliEveEventManager.h>

#include <AliRunLoader.h>
#include <AliCluster.h>
#include <AliEMCALGeometry.h>
#include <AliEMCALDigit.h>
#include <AliLog.h>

// #include <Riostream.h>
#endif

void emcal_digits()
{
  AliEveEventManager::AssertGeometry();

  TGeoNode* node = gGeoManager->GetTopVolume()->FindNode("XEN1_1");
  if (!node) return;

  Int_t nModules = node->GetNdaughters();

  TEveElementList* l = new TEveElementList("EMCAL");
  l->SetTitle("Tooltip");
  gEve->AddElement(l);

  TGeoBBox* bbbox = (TGeoBBox*) node->GetDaughter(0) ->GetVolume()->GetShape();
  TEveFrameBox* frame_big = new TEveFrameBox();
  frame_big->SetFrameColorRGBA(200,200,0,50);
  frame_big->SetAABoxCenterHalfSize(0, 0, 0, bbbox->GetDX(), bbbox->GetDY(), bbbox->GetDZ());

  TEveFrameBox* frame_sml = 0x0;

  if (nModules==12) {
    TGeoBBox* sbbox = (TGeoBBox*) node->GetDaughter(10)->GetVolume()->GetShape();
    frame_sml = new TEveFrameBox();
    frame_sml->SetFrameColorRGBA(200,200,0,50);
    frame_sml->SetAABoxCenterHalfSize(0, 0, 0, sbbox->GetDX(), sbbox->GetDY(), sbbox->GetDZ());
  }

  gStyle->SetPalette(1, 0);
  TEveRGBAPalette* pal = new TEveRGBAPalette(0, 512);
  pal->SetLimits(0, 1024);

  TEveQuadSet* smodules[12];
  memset(smodules,0,12*sizeof(TEveQuadSet*));


  AliEMCALGeometry * geom  = AliEMCALGeometry::GetInstance();  
  if (!geom) geom = AliEMCALGeometry::GetInstance("","");

  for (Int_t sm=0; sm<nModules; ++sm)
  {
    TEveQuadSet* q = new TEveQuadSet(Form("SM %d", sm+1));
    q->SetOwnIds(kTRUE);
    q->Reset(TEveQuadSet::kQT_RectangleYZFixedDimX, kFALSE, 32);
    q->SetDefWidth (geom->GetPhiTileSize());
    q->SetDefHeight(geom->GetEtaTileSize());

    q->RefMainTrans().SetFrom(*node->GetDaughter(sm)->GetMatrix());

    q->SetFrame(sm < 10 ? frame_big : frame_sml);
    q->SetPalette(pal);

    gEve->AddElement(q, l);
    smodules[sm] = q;
  }

  AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();

  rl->LoadDigits("EMCAL");
  TTree* dt = rl->GetTreeD("EMCAL", kFALSE);
  if (!dt) return;

  TClonesArray *digits = 0;
  dt->SetBranchAddress("EMCAL", &digits);
  dt->GetEntry(0);
  Int_t nEnt = digits->GetEntriesFast();
  AliEMCALDigit * dig;

  Float_t amp   = -1 ;
  Float_t time  = -1 ;
  Int_t id      = -1 ;
  Int_t iSupMod =  0 ;
  Int_t iTower  =  0 ;
  Int_t iIphi   =  0 ;
  Int_t iIeta   =  0 ;
  Int_t iphi    =  0 ;
  Int_t ieta    =  0 ;
  Double_t x, y, z;

  for (Int_t idig = 0; idig < nEnt; ++idig)
  {
    dig = static_cast<AliEMCALDigit *>(digits->At(idig));

    if(dig != 0) {
      id   = dig->GetId() ; //cell (digit) label
      amp  = dig->GetAmp(); //amplitude in cell (digit)
      time = dig->GetTime();//time of creation of digit after collision

//      AliDebugGeneral("emcal_digits", 5, Form("Cell ID %3d, Amplitude: %f", id, amp));
      // cout<<"Cell ID "<<id<<" Amp "<<amp<<endl;//" time "<<time<<endl;

      //Geometry methods
      geom->GetCellIndex(id,iSupMod,iTower,iIphi,iIeta);
      //Gives SuperModule and Tower numbers
      geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,
					iIphi, iIeta,iphi,ieta);
      //Gives label of cell in eta-phi position per each supermodule

//      AliDebugGeneral("emcal_digits", 5, Form("SModule %3d; Tover %3d; Eta %3d; Phi %3d; Cell Eta %3d; Cell Phi %3d",
//		       iSupMod, iTower, iIeta, iIphi, ieta, iphi));
      // cout<< "SModule "<<iSupMod<<"; Tower "<<iTower
      //     <<"; Eta "<<iIeta<<"; Phi "<<iIphi
      //     <<"; Cell Eta "<<ieta<<"; Cell Phi "<<iphi<<endl;

      geom->RelPosCellInSModule(id, x, y, z);
      // cout << x <<" "<< y <<" "<< z <<endl;
//      AliDebugGeneral("emcal_digits", 5, Form("(x,y,z)=(%8.3f,%8.3f,%8.3f)", x, y, z));

      TEveQuadSet* q = smodules[iSupMod];
      if (q) {
	q->AddQuad(y, z);
	q->QuadValue(TMath::Nint(amp));
	q->QuadId(new AliEMCALDigit(*dig));
      }
    } else {
//      AliDebugGeneral("emcal_digits", 1, Form("Digit pointer 0x0"));
      // cout<<"Digit pointer 0x0"<<endl;
    }
  }

  rl->UnloadDigits("EMCAL");


  for (Int_t sm = 0; sm < nModules; ++sm)
  {
    smodules[iSupMod]->RefitPlex();
  }

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