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.                                                 *
 **************************************************************************/

#include "AliEveTRDModuleImp.h"
#include "AliEveTRDData.h"
#include "EveBase/AliEveEventManager.h"

#include "TTree.h"
#include "TGListTree.h"
#include "TClonesArray.h"
#include "TGeoManager.h"
#include "TGeoMatrix.h"

#include "TEveManager.h"
#include "TEveTrack.h"
#include "TEveGeoNode.h"
#include "TEveTrans.h"


#include "AliLog.h"
#include "AliCDBManager.h"
#include "AliTRDgeometry.h"
#include "AliTRDCommonParam.h"
#include "AliTRDpadPlane.h"
#include "AliTRDhit.h"
#include "AliTRDcluster.h"
#include "AliTRDtrackingChamber.h"
#include "AliTRDtrackletMCM.h"

ClassImp(AliEveTRDChamber)
ClassImp(AliEveTRDNode)

//______________________________________________________________________________
AliEveTRDNode::AliEveTRDNode(const char *typ, Int_t det) :
  TEveElement(), AliEveTRDModule(typ, det)
{
  // Xonstructor.
}

//______________________________________________________________________________
void AliEveTRDNode::Paint(Option_t* option)
{
  // Paint object.

  AliEveTRDModule *module(NULL);
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((module = dynamic_cast<AliEveTRDModule*>(*iter))) module->Paint(option);
    iter++;
  }
}

//______________________________________________________________________________
void AliEveTRDNode::Reset()
{
  // Reset.

  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    //(dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
    iter++;
  }
}

//______________________________________________________________________________
void AliEveTRDNode::Collapse()
{
  // Collapse.

  TGListTree *list = gEve->GetListTree();
  AliEveTRDNode *node = 0x0;
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Collapse();
    list->CloseItem(FindListTreeItem(list));
    iter++;
  }
}

//______________________________________________________________________________
void AliEveTRDNode::Expand()
{
  // Expand.

  TGListTree *list = gEve->GetListTree();
  AliEveTRDNode *node = 0x0;
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Expand();
    list->OpenItem(FindListTreeItem(list));
    iter++;
  }
}

//______________________________________________________________________________
void AliEveTRDNode::EnableListElements(Bool_t rnr_self, Bool_t rnr_children)
{
  // Enable list elements.

  SetRnrSelf(rnr_self);
  AliEveTRDNode *node(NULL);
  AliEveTRDChamber *chmb(NULL);
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
      node->SetRnrSelf(rnr_children);
      node->EnableListElements(rnr_children, rnr_children);
    }
    if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->EnableListElements(rnr_children, rnr_children);
    iter++;
  }
  gEve->Redraw3D();
}

//______________________________________________________________________________
void AliEveTRDNode::DisableListElements(Bool_t rnr_self, Bool_t rnr_children)
{
  // Disable list elements.

  SetRnrSelf(rnr_self);
  AliEveTRDNode *node(NULL);
  AliEveTRDChamber *chmb(NULL);
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
      node->SetRnrSelf(rnr_children);
      node->DisableListElements(rnr_children, rnr_children);
    }
    if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->DisableListElements(rnr_children, rnr_children);
    iter++;
  }
  gEve->Redraw3D();
}

//______________________________________________________________________________
void AliEveTRDNode::UpdateLeaves()
{
  // Update leaves.

  AliEveTRDModule *module;
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    module = dynamic_cast<AliEveTRDModule*>(*iter);
    if(!module) continue;

    module->fRnrHits = fRnrHits;
    module->fRnrDigits = fRnrDigits;
    module->fDigitsLog = fDigitsLog;
    module->fDigitsBox = fDigitsBox;
    module->fDigitsThreshold = fDigitsThreshold;
    module->fDigitsNeedRecompute = fDigitsNeedRecompute;
    module->fRnrRecPoints = fRnrRecPoints;
    module->fRnrTracklets = fRnrTracklets;
    iter++;
  }

  AliEveTRDNode *node = 0x0;
  iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateLeaves();
    iter++;
  }
}


//______________________________________________________________________________
void AliEveTRDNode::UpdateNode()
{
  // Update node.

  // Info("UpdateNode()", Form("%s", GetName()));
  AliEveTRDNode *node = 0x0;
  List_i iter = fChildren.begin();
  while(iter != fChildren.end()){
    if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateNode();
    iter++;
  }

  Int_t score[11];
  for(int i=0; i<11; i++) score[i] = 0;
  AliEveTRDModule *module;
  iter = fChildren.begin();
  while(iter != fChildren.end()){
    module = dynamic_cast<AliEveTRDModule*>(*iter);
    if(!module) continue;
    score[0] += (module->fLoadHits) ? 1 : 0;
    score[1] += (module->fRnrHits) ? 1 : 0;

    score[2] += (module->fLoadDigits) ? 1 : 0;
    score[3] += (module->fRnrDigits) ? 1 : 0;
    score[4] += (module->fDigitsLog) ? 1 : 0;
    score[5] += (module->fDigitsBox) ? 1 : 0;
    score[6] += (module->fDigitsNeedRecompute) ? 1 : 0;

    score[7] += (module->fLoadRecPoints) ? 1 : 0;
    score[8] += (module->fRnrRecPoints) ? 1 : 0;

    score[9] += (module->fLoadTracklets) ? 1 : 0;
    score[10] += (module->fRnrTracklets) ? 1 : 0;
    iter++;
  }

  Int_t size = fChildren.size();
  fLoadHits      = (score[0] > 0) ? kTRUE : kFALSE;
  fRnrHits       = (score[1] == size) ? kTRUE : kFALSE;

  fLoadDigits    = (score[2] > 0) ? kTRUE : kFALSE;
  fRnrDigits     = (score[3] == size) ? kTRUE : kFALSE;
  fDigitsLog     = (score[4] == size) ? kTRUE : kFALSE;
  fDigitsBox     = (score[5] == size) ? kTRUE : kFALSE;
  fDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;

  fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
  fRnrRecPoints  = (score[8] == size) ? kTRUE : kFALSE;

  fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
  fRnrTracklets  = (score[10] == size) ? kTRUE : kFALSE;
}


///////////////////////////////////////////////////////////
////////////      AliEveTRDChamber     ////////////////////
///////////////////////////////////////////////////////////

//______________________________________________________________________________
AliEveTRDChamber::AliEveTRDChamber(Int_t det) :
  TEveElement()
  ,AliEveTRDModule("Chmb", det)
  ,fDigits(0x0)
  ,fHits(0x0)
  ,fRecPoints(0x0)
  ,fTracklets(0x0)
  ,fGeo(0x0)
  ,fShape(0x0)
  ,fNrows(-1)
  ,fNcols(-1)
  ,fNtime(22)
{
  //
  // Constructor
  //
}


//______________________________________________________________________________
void AliEveTRDChamber::LoadClusters(TObjArray *clusters)
{
  //
  // Draw clusters
  //

  if(!fGeo){
    AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
    return;
  }

  if(!fRecPoints){ 
    AddElement(fRecPoints = new AliEveTRDClusters());
    fRecPoints->SetTitle(Form("Clusters for Det %d", GetID()));
  }
  fRecPoints->Reset();

  // get rotation parameters
  Int_t sec = AliTRDgeometry::GetSector(GetID());
  Float_t alpha((0.5+sec)*AliTRDgeometry::GetAlpha()),
          cphi(TMath::Cos(alpha)),
          sphi(TMath::Sin(alpha));
  Float_t q;
  Float_t g[3]; //global coordinates
  AliTRDcluster *c(NULL);
  Int_t nc = clusters->GetEntriesFast();
  for(int iclus=0; iclus<nc; iclus++){
    if(!(c = (AliTRDcluster*)clusters->UncheckedAt(iclus))) continue;
    q = c->GetQ();
    // Temorary fix related to bug http://savannah.cern.ch/bugs/?89730
    // c->GetGlobalXYZ(g);
    g[0] = c->GetX() * cphi - c->GetY() * sphi;
    g[1] = c->GetX() * sphi + c->GetY() * cphi;
    g[2] = c->GetZ();
    Int_t id = fRecPoints->SetNextPoint(g[0], g[1], g[2]);
    fRecPoints->SetPointId(id, new AliTRDcluster(*c));
  }
  fRecPoints->StampObjProps();
  fLoadRecPoints = kTRUE;
}


//______________________________________________________________________________
void AliEveTRDChamber::LoadClusters(AliTRDtrackingChamber *tc)
{
  if(!fGeo){
    AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
    return;
  }

  if(!fRecPoints){ 
    AddElement(fRecPoints = new AliEveTRDClusters());
    fRecPoints->SetTitle(Form("Clusters for Det %d", GetID()));
  }
  fRecPoints->Reset();

  // get rotation parameters
  Int_t sec = AliTRDgeometry::GetSector(fDet);
  Float_t alpha((0.5+sec)*AliTRDgeometry::GetAlpha()),
          cphi(TMath::Cos(alpha)),
          sphi(TMath::Sin(alpha));
  Float_t g[3]; //global coordinates
  const AliTRDchamberTimeBin *tb(NULL);
  for(int itb=0; itb<AliTRDseedV1::kNtb; itb++){
    tb = tc->GetTB(itb);
    if(!(Int_t(*tb))) continue;
    const AliTRDcluster *c(NULL); Int_t ic = 0;
    while((c=tb->GetCluster(ic))){
      // Temorary fix related to bug http://savannah.cern.ch/bugs/?89730
      // c->GetGlobalXYZ(g);
      g[0] = c->GetX() * cphi - c->GetY() * sphi;
      g[1] = c->GetX() * sphi + c->GetY() * cphi;
      g[2] = c->GetZ();
      Int_t id = fRecPoints->SetNextPoint(g[0], g[1], g[2]);
      fRecPoints->SetPointId(id, new AliTRDcluster(*c));
      ic++;
    }
  }
  fRecPoints->StampObjProps();
  fLoadRecPoints = kTRUE;
}


//______________________________________________________________________________
void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
{
  //
  // Draw digits
  //
  if(!fGeo){
    AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
    return;
  }

  if(!fDigits) AddElement(fDigits = new AliEveTRDDigits(this));

  //fDigits->Reset();
  fDigits->SetData(digits);
  fDigits->StampObjProps();
  fDigitsNeedRecompute = kTRUE;  
  fLoadDigits = kTRUE;
}

//______________________________________________________________________________
void AliEveTRDChamber::LoadHits(TClonesArray *hits, Int_t &idx)
{
  //
  // Draw hits
  //

  if(!fHits){ 
    AddElement(fHits = new AliEveTRDHits());
    fHits->SetTitle(Form("Hits for Det %d", GetID()));
  }
  fLoadHits = kTRUE;
  Int_t nhits = hits->GetEntriesFast();

  AliTRDhit *hit = 0x0;
  while(idx<nhits){
    hit = (AliTRDhit*)hits->UncheckedAt(idx);
    if(hit->GetDetector() != fDet) return;

    Int_t id = fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
    fHits->SetPointId(id, new AliTRDhit(*hit));
    fHits->StampObjProps();
    idx++;
  }
  return;
}

//______________________________________________________________________________
void AliEveTRDChamber::LoadTracklets(TTree *trklTree)
{
  //
  // Draw tracks
  //

  if(!fGeo){
    Error("LoadTracklets()", "Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet);
    return;
  }

  if(!fTracklets){
    fTracklets = new TClonesArray("AliEveTRDTrackletOnline",100);
  } else {
    fTracklets->Delete();
    TEveElementList *trklChild = (TEveElementList*) FindChild("Tracklets");
    if (trklChild)
      trklChild->Destroy();
  }


  TBranch *mcmBranch = trklTree->GetBranch("mcmtrklbranch");
  if (!mcmBranch)
    return;

  AliTRDtrackletMCM *trkl = 0x0;
  mcmBranch->SetAddress(&trkl);

  TEveElementList* listOfTracklets = new TEveElementList("Tracklets");
  gEve->AddElement(listOfTracklets, this);

  for(Int_t iTrkl = 0; iTrkl < mcmBranch->GetEntries(); iTrkl++){
    mcmBranch->GetEntry(iTrkl);
    if (trkl->GetDetector() == GetID()) {
      new ((*fTracklets)[fTracklets->GetEntriesFast()]) AliEveTRDTrackletOnline(trkl);
      gEve->AddElement(new AliEveTRDTrackletOnline(trkl), listOfTracklets);
    }
  }
  fLoadTracklets = kTRUE;
}


//______________________________________________________________________________
void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
{
  // Set geometry.

  fGeo = geo;

  Int_t  ism  = geo->GetSector(fDet);
  Int_t  istk = geo->GetStack(fDet);
  Int_t  ilyr = geo->GetLayer(fDet);
  Int_t  icha = istk*6+ilyr;
  Int_t idx(1); 
  if(ism>12&&ism<16) idx=3;
  else if(ism==11||ism==12) idx=2;

  // define pad plane size in pads
  AliTRDpadPlane *pp = fGeo->GetPadPlane(ilyr, istk);
  fNrows   = pp->GetNrows();
  fNcols   = pp->GetNcols();

// this version for setting the rendarable object is not working very nice
// Int_t shape_offset = TEveGeoShape::Class()->GetDataMemberOffset("fShape");
// TEveGeoShape* eg_shape = new TEveGeoShape("geometry");
// eg_shape->RefMainTrans().SetFrom(* gGeoManager->GetCurrentMatrix());
// * (TGeoShape**) (((char*)eg_shape) + shape_offset) = gGeoManager->GetCurrentVolume()->GetShape();
// 
// eg_shape->StampColorSelection();
  if(!(gGeoManager)){
    AliEveEventManager::AssertGeometry();
    if(!(gGeoManager)){
      AliError("Geo manager not available.");
      return;
    }
  }

  // define rendarable volumes
  if(!gGeoManager->cd(Form("/B077_1/BSEGMO%d_1/BTRD%d_1/UTR%d_1/UTS%d_1/UTI%d_1/UT%02d_1", ism, ism, idx, idx, idx, icha))) return;

  fShape = new TEveGeoTopNode(gGeoManager, gGeoManager->GetCurrentNode());
  fShape->RefMainTrans().SetFrom(*gGeoManager->GetCurrentMatrix());
  fShape->DisableListElements();
  fShape->SetRnrSelf(kFALSE);
// try to set the properties but it is crashing !!
//   TEveGeoNode *node = 0x0; 
//   if((node = (TEveGeoNode*)fShape->FindChild(Form("UA%02d_1", icha)))) node->SetRnrState(kTRUE);
//   else AliWarning(Form("Can not retrieve geo node UA%02d_1", icha));

  AddElement(fShape);
}

 AliEveTRDModuleImp.cxx:1
 AliEveTRDModuleImp.cxx:2
 AliEveTRDModuleImp.cxx:3
 AliEveTRDModuleImp.cxx:4
 AliEveTRDModuleImp.cxx:5
 AliEveTRDModuleImp.cxx:6
 AliEveTRDModuleImp.cxx:7
 AliEveTRDModuleImp.cxx:8
 AliEveTRDModuleImp.cxx:9
 AliEveTRDModuleImp.cxx:10
 AliEveTRDModuleImp.cxx:11
 AliEveTRDModuleImp.cxx:12
 AliEveTRDModuleImp.cxx:13
 AliEveTRDModuleImp.cxx:14
 AliEveTRDModuleImp.cxx:15
 AliEveTRDModuleImp.cxx:16
 AliEveTRDModuleImp.cxx:17
 AliEveTRDModuleImp.cxx:18
 AliEveTRDModuleImp.cxx:19
 AliEveTRDModuleImp.cxx:20
 AliEveTRDModuleImp.cxx:21
 AliEveTRDModuleImp.cxx:22
 AliEveTRDModuleImp.cxx:23
 AliEveTRDModuleImp.cxx:24
 AliEveTRDModuleImp.cxx:25
 AliEveTRDModuleImp.cxx:26
 AliEveTRDModuleImp.cxx:27
 AliEveTRDModuleImp.cxx:28
 AliEveTRDModuleImp.cxx:29
 AliEveTRDModuleImp.cxx:30
 AliEveTRDModuleImp.cxx:31
 AliEveTRDModuleImp.cxx:32
 AliEveTRDModuleImp.cxx:33
 AliEveTRDModuleImp.cxx:34
 AliEveTRDModuleImp.cxx:35
 AliEveTRDModuleImp.cxx:36
 AliEveTRDModuleImp.cxx:37
 AliEveTRDModuleImp.cxx:38
 AliEveTRDModuleImp.cxx:39
 AliEveTRDModuleImp.cxx:40
 AliEveTRDModuleImp.cxx:41
 AliEveTRDModuleImp.cxx:42
 AliEveTRDModuleImp.cxx:43
 AliEveTRDModuleImp.cxx:44
 AliEveTRDModuleImp.cxx:45
 AliEveTRDModuleImp.cxx:46
 AliEveTRDModuleImp.cxx:47
 AliEveTRDModuleImp.cxx:48
 AliEveTRDModuleImp.cxx:49
 AliEveTRDModuleImp.cxx:50
 AliEveTRDModuleImp.cxx:51
 AliEveTRDModuleImp.cxx:52
 AliEveTRDModuleImp.cxx:53
 AliEveTRDModuleImp.cxx:54
 AliEveTRDModuleImp.cxx:55
 AliEveTRDModuleImp.cxx:56
 AliEveTRDModuleImp.cxx:57
 AliEveTRDModuleImp.cxx:58
 AliEveTRDModuleImp.cxx:59
 AliEveTRDModuleImp.cxx:60
 AliEveTRDModuleImp.cxx:61
 AliEveTRDModuleImp.cxx:62
 AliEveTRDModuleImp.cxx:63
 AliEveTRDModuleImp.cxx:64
 AliEveTRDModuleImp.cxx:65
 AliEveTRDModuleImp.cxx:66
 AliEveTRDModuleImp.cxx:67
 AliEveTRDModuleImp.cxx:68
 AliEveTRDModuleImp.cxx:69
 AliEveTRDModuleImp.cxx:70
 AliEveTRDModuleImp.cxx:71
 AliEveTRDModuleImp.cxx:72
 AliEveTRDModuleImp.cxx:73
 AliEveTRDModuleImp.cxx:74
 AliEveTRDModuleImp.cxx:75
 AliEveTRDModuleImp.cxx:76
 AliEveTRDModuleImp.cxx:77
 AliEveTRDModuleImp.cxx:78
 AliEveTRDModuleImp.cxx:79
 AliEveTRDModuleImp.cxx:80
 AliEveTRDModuleImp.cxx:81
 AliEveTRDModuleImp.cxx:82
 AliEveTRDModuleImp.cxx:83
 AliEveTRDModuleImp.cxx:84
 AliEveTRDModuleImp.cxx:85
 AliEveTRDModuleImp.cxx:86
 AliEveTRDModuleImp.cxx:87
 AliEveTRDModuleImp.cxx:88
 AliEveTRDModuleImp.cxx:89
 AliEveTRDModuleImp.cxx:90
 AliEveTRDModuleImp.cxx:91
 AliEveTRDModuleImp.cxx:92
 AliEveTRDModuleImp.cxx:93
 AliEveTRDModuleImp.cxx:94
 AliEveTRDModuleImp.cxx:95
 AliEveTRDModuleImp.cxx:96
 AliEveTRDModuleImp.cxx:97
 AliEveTRDModuleImp.cxx:98
 AliEveTRDModuleImp.cxx:99
 AliEveTRDModuleImp.cxx:100
 AliEveTRDModuleImp.cxx:101
 AliEveTRDModuleImp.cxx:102
 AliEveTRDModuleImp.cxx:103
 AliEveTRDModuleImp.cxx:104
 AliEveTRDModuleImp.cxx:105
 AliEveTRDModuleImp.cxx:106
 AliEveTRDModuleImp.cxx:107
 AliEveTRDModuleImp.cxx:108
 AliEveTRDModuleImp.cxx:109
 AliEveTRDModuleImp.cxx:110
 AliEveTRDModuleImp.cxx:111
 AliEveTRDModuleImp.cxx:112
 AliEveTRDModuleImp.cxx:113
 AliEveTRDModuleImp.cxx:114
 AliEveTRDModuleImp.cxx:115
 AliEveTRDModuleImp.cxx:116
 AliEveTRDModuleImp.cxx:117
 AliEveTRDModuleImp.cxx:118
 AliEveTRDModuleImp.cxx:119
 AliEveTRDModuleImp.cxx:120
 AliEveTRDModuleImp.cxx:121
 AliEveTRDModuleImp.cxx:122
 AliEveTRDModuleImp.cxx:123
 AliEveTRDModuleImp.cxx:124
 AliEveTRDModuleImp.cxx:125
 AliEveTRDModuleImp.cxx:126
 AliEveTRDModuleImp.cxx:127
 AliEveTRDModuleImp.cxx:128
 AliEveTRDModuleImp.cxx:129
 AliEveTRDModuleImp.cxx:130
 AliEveTRDModuleImp.cxx:131
 AliEveTRDModuleImp.cxx:132
 AliEveTRDModuleImp.cxx:133
 AliEveTRDModuleImp.cxx:134
 AliEveTRDModuleImp.cxx:135
 AliEveTRDModuleImp.cxx:136
 AliEveTRDModuleImp.cxx:137
 AliEveTRDModuleImp.cxx:138
 AliEveTRDModuleImp.cxx:139
 AliEveTRDModuleImp.cxx:140
 AliEveTRDModuleImp.cxx:141
 AliEveTRDModuleImp.cxx:142
 AliEveTRDModuleImp.cxx:143
 AliEveTRDModuleImp.cxx:144
 AliEveTRDModuleImp.cxx:145
 AliEveTRDModuleImp.cxx:146
 AliEveTRDModuleImp.cxx:147
 AliEveTRDModuleImp.cxx:148
 AliEveTRDModuleImp.cxx:149
 AliEveTRDModuleImp.cxx:150
 AliEveTRDModuleImp.cxx:151
 AliEveTRDModuleImp.cxx:152
 AliEveTRDModuleImp.cxx:153
 AliEveTRDModuleImp.cxx:154
 AliEveTRDModuleImp.cxx:155
 AliEveTRDModuleImp.cxx:156
 AliEveTRDModuleImp.cxx:157
 AliEveTRDModuleImp.cxx:158
 AliEveTRDModuleImp.cxx:159
 AliEveTRDModuleImp.cxx:160
 AliEveTRDModuleImp.cxx:161
 AliEveTRDModuleImp.cxx:162
 AliEveTRDModuleImp.cxx:163
 AliEveTRDModuleImp.cxx:164
 AliEveTRDModuleImp.cxx:165
 AliEveTRDModuleImp.cxx:166
 AliEveTRDModuleImp.cxx:167
 AliEveTRDModuleImp.cxx:168
 AliEveTRDModuleImp.cxx:169
 AliEveTRDModuleImp.cxx:170
 AliEveTRDModuleImp.cxx:171
 AliEveTRDModuleImp.cxx:172
 AliEveTRDModuleImp.cxx:173
 AliEveTRDModuleImp.cxx:174
 AliEveTRDModuleImp.cxx:175
 AliEveTRDModuleImp.cxx:176
 AliEveTRDModuleImp.cxx:177
 AliEveTRDModuleImp.cxx:178
 AliEveTRDModuleImp.cxx:179
 AliEveTRDModuleImp.cxx:180
 AliEveTRDModuleImp.cxx:181
 AliEveTRDModuleImp.cxx:182
 AliEveTRDModuleImp.cxx:183
 AliEveTRDModuleImp.cxx:184
 AliEveTRDModuleImp.cxx:185
 AliEveTRDModuleImp.cxx:186
 AliEveTRDModuleImp.cxx:187
 AliEveTRDModuleImp.cxx:188
 AliEveTRDModuleImp.cxx:189
 AliEveTRDModuleImp.cxx:190
 AliEveTRDModuleImp.cxx:191
 AliEveTRDModuleImp.cxx:192
 AliEveTRDModuleImp.cxx:193
 AliEveTRDModuleImp.cxx:194
 AliEveTRDModuleImp.cxx:195
 AliEveTRDModuleImp.cxx:196
 AliEveTRDModuleImp.cxx:197
 AliEveTRDModuleImp.cxx:198
 AliEveTRDModuleImp.cxx:199
 AliEveTRDModuleImp.cxx:200
 AliEveTRDModuleImp.cxx:201
 AliEveTRDModuleImp.cxx:202
 AliEveTRDModuleImp.cxx:203
 AliEveTRDModuleImp.cxx:204
 AliEveTRDModuleImp.cxx:205
 AliEveTRDModuleImp.cxx:206
 AliEveTRDModuleImp.cxx:207
 AliEveTRDModuleImp.cxx:208
 AliEveTRDModuleImp.cxx:209
 AliEveTRDModuleImp.cxx:210
 AliEveTRDModuleImp.cxx:211
 AliEveTRDModuleImp.cxx:212
 AliEveTRDModuleImp.cxx:213
 AliEveTRDModuleImp.cxx:214
 AliEveTRDModuleImp.cxx:215
 AliEveTRDModuleImp.cxx:216
 AliEveTRDModuleImp.cxx:217
 AliEveTRDModuleImp.cxx:218
 AliEveTRDModuleImp.cxx:219
 AliEveTRDModuleImp.cxx:220
 AliEveTRDModuleImp.cxx:221
 AliEveTRDModuleImp.cxx:222
 AliEveTRDModuleImp.cxx:223
 AliEveTRDModuleImp.cxx:224
 AliEveTRDModuleImp.cxx:225
 AliEveTRDModuleImp.cxx:226
 AliEveTRDModuleImp.cxx:227
 AliEveTRDModuleImp.cxx:228
 AliEveTRDModuleImp.cxx:229
 AliEveTRDModuleImp.cxx:230
 AliEveTRDModuleImp.cxx:231
 AliEveTRDModuleImp.cxx:232
 AliEveTRDModuleImp.cxx:233
 AliEveTRDModuleImp.cxx:234
 AliEveTRDModuleImp.cxx:235
 AliEveTRDModuleImp.cxx:236
 AliEveTRDModuleImp.cxx:237
 AliEveTRDModuleImp.cxx:238
 AliEveTRDModuleImp.cxx:239
 AliEveTRDModuleImp.cxx:240
 AliEveTRDModuleImp.cxx:241
 AliEveTRDModuleImp.cxx:242
 AliEveTRDModuleImp.cxx:243
 AliEveTRDModuleImp.cxx:244
 AliEveTRDModuleImp.cxx:245
 AliEveTRDModuleImp.cxx:246
 AliEveTRDModuleImp.cxx:247
 AliEveTRDModuleImp.cxx:248
 AliEveTRDModuleImp.cxx:249
 AliEveTRDModuleImp.cxx:250
 AliEveTRDModuleImp.cxx:251
 AliEveTRDModuleImp.cxx:252
 AliEveTRDModuleImp.cxx:253
 AliEveTRDModuleImp.cxx:254
 AliEveTRDModuleImp.cxx:255
 AliEveTRDModuleImp.cxx:256
 AliEveTRDModuleImp.cxx:257
 AliEveTRDModuleImp.cxx:258
 AliEveTRDModuleImp.cxx:259
 AliEveTRDModuleImp.cxx:260
 AliEveTRDModuleImp.cxx:261
 AliEveTRDModuleImp.cxx:262
 AliEveTRDModuleImp.cxx:263
 AliEveTRDModuleImp.cxx:264
 AliEveTRDModuleImp.cxx:265
 AliEveTRDModuleImp.cxx:266
 AliEveTRDModuleImp.cxx:267
 AliEveTRDModuleImp.cxx:268
 AliEveTRDModuleImp.cxx:269
 AliEveTRDModuleImp.cxx:270
 AliEveTRDModuleImp.cxx:271
 AliEveTRDModuleImp.cxx:272
 AliEveTRDModuleImp.cxx:273
 AliEveTRDModuleImp.cxx:274
 AliEveTRDModuleImp.cxx:275
 AliEveTRDModuleImp.cxx:276
 AliEveTRDModuleImp.cxx:277
 AliEveTRDModuleImp.cxx:278
 AliEveTRDModuleImp.cxx:279
 AliEveTRDModuleImp.cxx:280
 AliEveTRDModuleImp.cxx:281
 AliEveTRDModuleImp.cxx:282
 AliEveTRDModuleImp.cxx:283
 AliEveTRDModuleImp.cxx:284
 AliEveTRDModuleImp.cxx:285
 AliEveTRDModuleImp.cxx:286
 AliEveTRDModuleImp.cxx:287
 AliEveTRDModuleImp.cxx:288
 AliEveTRDModuleImp.cxx:289
 AliEveTRDModuleImp.cxx:290
 AliEveTRDModuleImp.cxx:291
 AliEveTRDModuleImp.cxx:292
 AliEveTRDModuleImp.cxx:293
 AliEveTRDModuleImp.cxx:294
 AliEveTRDModuleImp.cxx:295
 AliEveTRDModuleImp.cxx:296
 AliEveTRDModuleImp.cxx:297
 AliEveTRDModuleImp.cxx:298
 AliEveTRDModuleImp.cxx:299
 AliEveTRDModuleImp.cxx:300
 AliEveTRDModuleImp.cxx:301
 AliEveTRDModuleImp.cxx:302
 AliEveTRDModuleImp.cxx:303
 AliEveTRDModuleImp.cxx:304
 AliEveTRDModuleImp.cxx:305
 AliEveTRDModuleImp.cxx:306
 AliEveTRDModuleImp.cxx:307
 AliEveTRDModuleImp.cxx:308
 AliEveTRDModuleImp.cxx:309
 AliEveTRDModuleImp.cxx:310
 AliEveTRDModuleImp.cxx:311
 AliEveTRDModuleImp.cxx:312
 AliEveTRDModuleImp.cxx:313
 AliEveTRDModuleImp.cxx:314
 AliEveTRDModuleImp.cxx:315
 AliEveTRDModuleImp.cxx:316
 AliEveTRDModuleImp.cxx:317
 AliEveTRDModuleImp.cxx:318
 AliEveTRDModuleImp.cxx:319
 AliEveTRDModuleImp.cxx:320
 AliEveTRDModuleImp.cxx:321
 AliEveTRDModuleImp.cxx:322
 AliEveTRDModuleImp.cxx:323
 AliEveTRDModuleImp.cxx:324
 AliEveTRDModuleImp.cxx:325
 AliEveTRDModuleImp.cxx:326
 AliEveTRDModuleImp.cxx:327
 AliEveTRDModuleImp.cxx:328
 AliEveTRDModuleImp.cxx:329
 AliEveTRDModuleImp.cxx:330
 AliEveTRDModuleImp.cxx:331
 AliEveTRDModuleImp.cxx:332
 AliEveTRDModuleImp.cxx:333
 AliEveTRDModuleImp.cxx:334
 AliEveTRDModuleImp.cxx:335
 AliEveTRDModuleImp.cxx:336
 AliEveTRDModuleImp.cxx:337
 AliEveTRDModuleImp.cxx:338
 AliEveTRDModuleImp.cxx:339
 AliEveTRDModuleImp.cxx:340
 AliEveTRDModuleImp.cxx:341
 AliEveTRDModuleImp.cxx:342
 AliEveTRDModuleImp.cxx:343
 AliEveTRDModuleImp.cxx:344
 AliEveTRDModuleImp.cxx:345
 AliEveTRDModuleImp.cxx:346
 AliEveTRDModuleImp.cxx:347
 AliEveTRDModuleImp.cxx:348
 AliEveTRDModuleImp.cxx:349
 AliEveTRDModuleImp.cxx:350
 AliEveTRDModuleImp.cxx:351
 AliEveTRDModuleImp.cxx:352
 AliEveTRDModuleImp.cxx:353
 AliEveTRDModuleImp.cxx:354
 AliEveTRDModuleImp.cxx:355
 AliEveTRDModuleImp.cxx:356
 AliEveTRDModuleImp.cxx:357
 AliEveTRDModuleImp.cxx:358
 AliEveTRDModuleImp.cxx:359
 AliEveTRDModuleImp.cxx:360
 AliEveTRDModuleImp.cxx:361
 AliEveTRDModuleImp.cxx:362
 AliEveTRDModuleImp.cxx:363
 AliEveTRDModuleImp.cxx:364
 AliEveTRDModuleImp.cxx:365
 AliEveTRDModuleImp.cxx:366
 AliEveTRDModuleImp.cxx:367
 AliEveTRDModuleImp.cxx:368
 AliEveTRDModuleImp.cxx:369
 AliEveTRDModuleImp.cxx:370
 AliEveTRDModuleImp.cxx:371
 AliEveTRDModuleImp.cxx:372
 AliEveTRDModuleImp.cxx:373
 AliEveTRDModuleImp.cxx:374
 AliEveTRDModuleImp.cxx:375
 AliEveTRDModuleImp.cxx:376
 AliEveTRDModuleImp.cxx:377
 AliEveTRDModuleImp.cxx:378
 AliEveTRDModuleImp.cxx:379
 AliEveTRDModuleImp.cxx:380
 AliEveTRDModuleImp.cxx:381
 AliEveTRDModuleImp.cxx:382
 AliEveTRDModuleImp.cxx:383
 AliEveTRDModuleImp.cxx:384
 AliEveTRDModuleImp.cxx:385
 AliEveTRDModuleImp.cxx:386
 AliEveTRDModuleImp.cxx:387
 AliEveTRDModuleImp.cxx:388
 AliEveTRDModuleImp.cxx:389
 AliEveTRDModuleImp.cxx:390
 AliEveTRDModuleImp.cxx:391
 AliEveTRDModuleImp.cxx:392
 AliEveTRDModuleImp.cxx:393
 AliEveTRDModuleImp.cxx:394
 AliEveTRDModuleImp.cxx:395
 AliEveTRDModuleImp.cxx:396
 AliEveTRDModuleImp.cxx:397
 AliEveTRDModuleImp.cxx:398
 AliEveTRDModuleImp.cxx:399
 AliEveTRDModuleImp.cxx:400
 AliEveTRDModuleImp.cxx:401
 AliEveTRDModuleImp.cxx:402
 AliEveTRDModuleImp.cxx:403
 AliEveTRDModuleImp.cxx:404
 AliEveTRDModuleImp.cxx:405
 AliEveTRDModuleImp.cxx:406
 AliEveTRDModuleImp.cxx:407
 AliEveTRDModuleImp.cxx:408
 AliEveTRDModuleImp.cxx:409
 AliEveTRDModuleImp.cxx:410
 AliEveTRDModuleImp.cxx:411
 AliEveTRDModuleImp.cxx:412
 AliEveTRDModuleImp.cxx:413
 AliEveTRDModuleImp.cxx:414
 AliEveTRDModuleImp.cxx:415
 AliEveTRDModuleImp.cxx:416
 AliEveTRDModuleImp.cxx:417
 AliEveTRDModuleImp.cxx:418
 AliEveTRDModuleImp.cxx:419
 AliEveTRDModuleImp.cxx:420
 AliEveTRDModuleImp.cxx:421
 AliEveTRDModuleImp.cxx:422
 AliEveTRDModuleImp.cxx:423
 AliEveTRDModuleImp.cxx:424
 AliEveTRDModuleImp.cxx:425
 AliEveTRDModuleImp.cxx:426
 AliEveTRDModuleImp.cxx:427
 AliEveTRDModuleImp.cxx:428
 AliEveTRDModuleImp.cxx:429
 AliEveTRDModuleImp.cxx:430
 AliEveTRDModuleImp.cxx:431
 AliEveTRDModuleImp.cxx:432
 AliEveTRDModuleImp.cxx:433
 AliEveTRDModuleImp.cxx:434
 AliEveTRDModuleImp.cxx:435
 AliEveTRDModuleImp.cxx:436
 AliEveTRDModuleImp.cxx:437
 AliEveTRDModuleImp.cxx:438
 AliEveTRDModuleImp.cxx:439
 AliEveTRDModuleImp.cxx:440
 AliEveTRDModuleImp.cxx:441
 AliEveTRDModuleImp.cxx:442
 AliEveTRDModuleImp.cxx:443
 AliEveTRDModuleImp.cxx:444
 AliEveTRDModuleImp.cxx:445
 AliEveTRDModuleImp.cxx:446
 AliEveTRDModuleImp.cxx:447
 AliEveTRDModuleImp.cxx:448
 AliEveTRDModuleImp.cxx:449
 AliEveTRDModuleImp.cxx:450
 AliEveTRDModuleImp.cxx:451
 AliEveTRDModuleImp.cxx:452
 AliEveTRDModuleImp.cxx:453
 AliEveTRDModuleImp.cxx:454
 AliEveTRDModuleImp.cxx:455
 AliEveTRDModuleImp.cxx:456
 AliEveTRDModuleImp.cxx:457
 AliEveTRDModuleImp.cxx:458
 AliEveTRDModuleImp.cxx:459
 AliEveTRDModuleImp.cxx:460
 AliEveTRDModuleImp.cxx:461
 AliEveTRDModuleImp.cxx:462
 AliEveTRDModuleImp.cxx:463
 AliEveTRDModuleImp.cxx:464
 AliEveTRDModuleImp.cxx:465
 AliEveTRDModuleImp.cxx:466
 AliEveTRDModuleImp.cxx:467
 AliEveTRDModuleImp.cxx:468
 AliEveTRDModuleImp.cxx:469
 AliEveTRDModuleImp.cxx:470
 AliEveTRDModuleImp.cxx:471
 AliEveTRDModuleImp.cxx:472
 AliEveTRDModuleImp.cxx:473
 AliEveTRDModuleImp.cxx:474