ROOT logo
// $Id: its_digits.C 30728 2009-01-22 18:14:34Z mtadel $
// 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 <vector> // bypass a cint problem in root-5.20
#include <TSystem.h>
#include <TEveManager.h>
#include <TGeoManager.h>
#include <TEveElement.h>
#include <TEvePointSet.h>
#include <TObjArray.h>
#include <TClonesArray.h>
#include <TTree.h>

#include "AliEveEventManager.h"
#include "AliGeomManager.h"
#include "../ITS/UPGRADE/AliITSUGeomTGeo.h"
#include "../ITS/UPGRADE/AliITSUSegmentationPix.h"
#include "../ITS/UPGRADE/AliITSUDigitPix.h"
#include "AliRunLoader.h"
#include "AliEveITSUModule.h"

#else

class TEveElement;
class TEvePointSet;

#endif


void itsU_digits() 
  // Int_t mode            = 63,
  // Bool_t check_empty    = kTRUE,
  // Bool_t scaled_modules = kFALSE)
{
 
  gSystem->Load("libITSUpgradeBase");
  gSystem->Load("libITSUpgradeSim");

  gGeoManager = gEve->GetGeometry("geometry.root");
  //  if (AliGeomManager::GetGeometry() == 0) AliGeomManager::LoadGeometry("geometry.root");

  AliITSUGeomTGeo* gm = new AliITSUGeomTGeo(kTRUE);
  TObjArray segmArr;
  AliITSUSegmentationPix::LoadSegmentations(&segmArr, AliITSUGeomTGeo::GetITSsegmentationFileName());

  //
  //  Int_t nLayers = gm->GetNLayers();
  Int_t nModules = gm->GetNModules();

  AliEveEventManager::AssertGeometry();
  AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
  rl->LoadDigits("ITS");
  TTree* digTree = rl->GetTreeD("ITS", false);

  //  printf(" -------------------- event %d - nModules %d \n",rl->GetEventNumber(), nModules);

  //DIGITS INIT

  TClonesArray *digArr= new TClonesArray("AliITSUDigitPix");
  digTree->SetBranchAddress("ITSDigitsPix",&digArr);

  TEveElementList* evITSdig = new TEveElementList("ITSU Digits - as modules");
  TEveElementList* layITSdig = 0;

  TEveElementList* evITSdigPoints = new TEveElementList("ITSU Digits - as points");
  TEvePointSet* layITSdigPoints = 0;
  
  Int_t layOld =-1;

  for (int imod=0;imod<nModules;imod++) {

    digTree->GetEntry(imod);     
    // clone array, because digArr is reused for the next module
    // and the digit pointers for prev. modules are lost
    TClonesArray *digArrClone =  (TClonesArray*)digArr->Clone("digits clone");
 
    int ndig  = digArrClone->GetEntries();
    if (ndig<1) continue; 

    int detType = gm->GetModuleDetTypeID(imod);
    AliITSUSegmentationPix* segm = (AliITSUSegmentationPix*)segmArr.At(detType);
    int lay,lad,det;
    gm->GetModuleId(imod, lay,lad,det);
    //   printf("\nModule %3d: (det %2d in ladder %2d of Layer %d) | NDigits: %4d\n",imod,det,lad,lay,ndig);
    //
    
    if (lay!=layOld) { // assumes order in the digits !
      layITSdigPoints = new TEvePointSet(Form("ITSU Digits (points) - Layer %d",lay),10000);
      //  layITSdigPoints->ApplyVizTag(viz_tag, "Clusters");
      layITSdigPoints->SetMarkerColor(kBlack);
      layITSdigPoints->SetMarkerStyle(kFullDotMedium);
      layITSdigPoints->SetRnrSelf(kTRUE);
      layITSdigPoints->SetOwnIds(kTRUE);

      evITSdigPoints->AddElement(layITSdigPoints);   

    }

    AliEveITSUModule *evMod  = new AliEveITSUModule(gm,imod,lay,lad,det);
 
    for (int idig=0;idig<ndig;idig++) {
   
      AliITSUDigitPix *pDig = (AliITSUDigitPix*)digArrClone->At(idig);
      evMod->SetDigitInQuad(pDig);
  
      /* printf("#%3d digit (0x%lx), col:%4d/row:%3d signal: %5d e-,  generated by tracks ",
	     idig,(ULong_t)pDig,pDig->GetCoord1(),pDig->GetCoord2(),pDig->GetSignalPix()); 
      for (int itr=0;itr<pDig->GetNTracks();itr++) if (pDig->GetTrack(itr)>=0) printf(" %5d",pDig->GetTrack(itr)); printf("\n");
      */
   
      // extract global coordinates
      Float_t x,z;
      segm->DetToLocal(pDig->GetCoord2(),pDig->GetCoord1(),x,z);

      Double_t loc[3]={x,0,z}; 
      Double_t glob[3]; 
      gm->LocalToGlobal(imod,loc,glob);
   
      layITSdigPoints->SetNextPoint(glob[0], glob[1], glob[2]);
      layITSdigPoints->SetPointId(pDig);
   
      //   printf("  loc(%.3lf,%.3lf,%.3lf)->glob(%.3lf,%.3lf,%.3lf) \n",loc[0],loc[1],loc[2],glob[0],glob[1],glob[2]);
    }

 
    if (lay!=layOld) { // assumes order in the digits !
      if (layOld>=0) {
	evITSdig->AddElement(layITSdig);   
      }
      layITSdig = new TEveElementList(Form("ITSU Digits - Layer %d",lay));  
      layOld=lay;

    }

    layITSdig->AddElement(evMod);
  
  }
  evITSdig->AddElement(layITSdig);     // add list of digits of last layer

  //  gEve->AddElement(evITSdigPoints);
  gEve->AddElement(evITSdig);

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