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 "AliEveTPCLoader.h"
#include "AliEveTPCData.h"
#include <EveDet/AliEveTPCSector2D.h>
#include <EveDet/AliEveTPCSector3D.h>
#include <TEveManager.h>
#include <TEveGedEditor.h>

#include <AliRawReaderRoot.h>
#include <AliTPCRawStreamV3.h>

#include <TSystem.h>

//==============================================================================
//==============================================================================
// AliEveTPCLoader
//==============================================================================

//______________________________________________________________________________
//
// Front-end for stand-alone inspection of TPC raw-data.
// GUI is implemented in AliEveTPCLoaderEditor class.

ClassImp(AliEveTPCLoader)

AliEveTPCLoader::AliEveTPCLoader(const Text_t* n, const Text_t* t) :
  TEveElementList(n, t),

  fFile(),
  fEvent(-1),
  fDoubleSR(kFALSE),

  fTPCEquipementMap(),
  fReader(0),
  fData(0),

  fSec2Ds(36),
  fSec3Ds(36),

  fSetInitSectorParams(kFALSE),
  fInitMinTime(0), fInitMaxTime(460), fInitThreshold(5), fInitMaxVal(128),
  fCutOnEta(kFALSE), fEtaMax(1.5), fEtaMin(-1.5)
{
  // Constructor.

  fData = new AliEveTPCData;
}

AliEveTPCLoader::~AliEveTPCLoader()
{
  // Destructor.

  delete fReader;
  delete fData;
}

/******************************************************************************/

void AliEveTPCLoader::RemoveElementLocal(TEveElement* el)
{
  // Local removal an element, virtual from TEveElement.
  // Need to search for it in visual sector representations and remove
  // it there as well.

  for (Int_t i=0; i<36; ++i) {
    if (fSec2Ds[i] == el) fSec2Ds[i] = 0;
    if (fSec3Ds[i] == el) fSec3Ds[i] = 0;
  }
}

void AliEveTPCLoader::RemoveElementsLocal()
{
  // Local removal of all elements, virtual from TEveElement.
  // Must remove all visual sector representations.

  for (Int_t i=0; i<36; ++i) {
    fSec2Ds[i] = 0;
    fSec3Ds[i] = 0;
  }
}

/******************************************************************************/

void AliEveTPCLoader::SetData(AliEveTPCData* d)
{
  // Set external TPC-data container. The old one is deleted.

  delete fData;
  fData = d;
}

/******************************************************************************/

void AliEveTPCLoader::OpenFile()
{
  // Open the raw-data file, as set in fFile data-member.
  // Raw-reader is also created and attached to the file.
  // First event is loaded and all sectors for which the data-exists
  // are created.

  static const TEveException kEH("AliEveTPCLoader::OpenFile ");

  if (gSystem->AccessPathName(fFile, kReadPermission))
      throw(kEH + "can not read '" + fFile + "'.");

  fData->DeleteAllSectors();

  delete fReader;
  fReader =  0;
  fEvent  = -1;

  fReader = new AliRawReaderRoot(fFile);
  if (fTPCEquipementMap != "")
    fReader->LoadEquipmentIdsMap
      (gSystem->ExpandPathName(fTPCEquipementMap.Data()));

  NextEvent();
  LoadEvent();
  UpdateSectors(kTRUE);
}

void AliEveTPCLoader::LoadEvent()
{
  // Load an event.

  static const TEveException kEH("AliEveTPCLoader::LoadEvent ");

  if (fReader == 0)
    throw(kEH + "data file not opened.");

  printf("Now loading event %d\n", fEvent);
  fReader->Reset();
  AliTPCRawStreamV3 input(fReader);
  fReader->Select("TPC");

  fData->DropAllSectors();
  fData->LoadRaw(input, kTRUE, kTRUE);
}

void AliEveTPCLoader::NextEvent(Bool_t rewindOnEnd)
{
  // Go o the next event.
  // When the last event is reached and rewindOnEnd is true, the file
  // is rewound back to the first event. Otherwise an exception is thrown.

  static const TEveException kEH("AliEveTPCLoader::NextEvent ");

  if (fReader == 0)
    throw(kEH + "data file not opened.");

  if (fReader->NextEvent() == kTRUE) {
    ++fEvent;
  } else {
    if (fEvent == -1)
      throw(kEH + "no events available.");
    if (rewindOnEnd) {
      printf("Reached end of stream (event=%d), rewinding to first event.\n", fEvent);
      fReader->RewindEvents();
      fReader->NextEvent();
      fEvent = 0;
    } else {
      throw(kEH + "last event reached.");
    }
  }
}

void AliEveTPCLoader::GotoEvent(Int_t event)
{
  // Go to specified event.

  static const TEveException kEH("AliEveTPCLoader::GotoEvent ");

  if (fReader == 0)
    throw(kEH + "data file not opened.");

  if (event == fEvent)
    return;
  Bool_t checkEnd;
  if (event < fEvent) {
    fReader->RewindEvents();
    fEvent = -1;
    checkEnd = kFALSE;
  } else {
    checkEnd = kTRUE;
  }
  do {
    NextEvent();
  } while (fEvent != event && !(checkEnd == kTRUE && fEvent == 0));
  LoadEvent();
  UpdateSectors();
}

void* AliEveTPCLoader::LoopEvent(AliEveTPCLoader* loader)
{
  // Loop to next event on given loader. Static member to be used for
  // external control during animations.
  // Calls NextEvent(), LoadEvent() and UpdateSectors().

  loader->NextEvent();
  loader->LoadEvent();
  loader->UpdateSectors();
  if (gEve->GetEditor()->GetModel() == loader)
    gEve->EditElement(loader);
  return 0;
}

/******************************************************************************/

void AliEveTPCLoader::UpdateSectors(Bool_t dropNonPresent)
{
  // Update visual representations of sectors.
  // If dropNonPresent is true, the sectors for which there is no data in
  // the current event are removed.

  gEve->DisableRedraw();
  for (Int_t i=0; i<=35; ++i)
  {
    AliEveTPCSectorData* sd = fData->GetSectorData(i);

    // 2D sectors
    if (fSec2Ds[i] != 0)
    {
      if (dropNonPresent && sd == 0) {
	gEve->RemoveElement(fSec2Ds[i], this);
	fSec2Ds[i] = 0;
      } else {
	fSec2Ds[i]->IncRTS();
        fSec2Ds[i]->ElementChanged();
      }
    }
    else
    {
      if (sd != 0) {
	AliEveTPCSector2D* s = new AliEveTPCSector2D(Form("Sector2D %d", i));
	fSec2Ds[i] = s;
	s->SetSectorID(i);
	s->SetDataSource(fData);

	if (fDoubleSR)
	  s->SetMaxTime(1023);

        if (fSetInitSectorParams) {
          s->SetMinTime(fInitMinTime);
          s->SetMaxTime(fInitMaxTime);
          s->SetThreshold(fInitThreshold);
	  s->SetMaxVal(fInitMaxVal);
        }

	s->SetAutoTrans(kTRUE);
	s->SetFrameColor(36);

	gEve->AddElement(s, this);
      }
    }

    // 3D sectors
    if (fSec3Ds[i] != 0)
    {
      if (dropNonPresent && sd == 0) {
	gEve->RemoveElement(fSec3Ds[i], this);
	fSec3Ds[i] = 0;
      } else {
        fSec3Ds[i]->SetCutOnEta(fCutOnEta);
        fSec3Ds[i]->SetEtaMax(fEtaMax);
        fSec3Ds[i]->SetEtaMin(fEtaMin);
	fSec3Ds[i]->IncRTS();
        fSec3Ds[i]->ElementChanged();
      }
    }
  }
  gEve->Redraw3D(kTRUE, kFALSE);
  gEve->EnableRedraw();
}

void AliEveTPCLoader::ReloadSectors()
{
  // Reload current event and update sectors.

  LoadEvent();
  UpdateSectors();
}

void AliEveTPCLoader::CreateSectors3D()
{
  // Create 3D representations of sectors.

  gEve->DisableRedraw();
  for (Int_t i=0; i<=35; ++i) {
    AliEveTPCSectorData* sd = fData->GetSectorData(i);
    if (sd != 0 && fSec3Ds[i] == 0) {
      AliEveTPCSector3D* s = new AliEveTPCSector3D(Form("Sector3D %d", i));
      fSec3Ds[i] = s;
      s->SetSectorID(i);
      s->SetDataSource(fData);
      s->SetCutOnEta(fCutOnEta);
      s->SetEtaMax(fEtaMax);
      s->SetEtaMin(fEtaMin);

      if (fDoubleSR)
	s->SetDriftVel(2.273);
      if (fSec2Ds[i] != 0)
	s->CopyVizParams(fSec2Ds[i]);

      s->SetAutoTrans(kTRUE);
      s->SetFrameColor(36);

      gEve->AddElement(s, this);
    }
  }
  gEve->EnableRedraw();
}

void AliEveTPCLoader::DeleteSectors3D()
{
  // Delete 3D representations of sectors.

  gEve->DisableRedraw();
  for (Int_t i=0; i<=35; ++i) {
    TEveElement* re = fSec3Ds[i];
    if (re != 0) {
      gEve->RemoveElement(re, this);
      // delete re; // Done automatically.
      fSec3Ds[i] = 0;
    }
  }
  gEve->EnableRedraw();
}

/******************************************************************************/

void AliEveTPCLoader::SetInitParams(Int_t mint, Int_t maxt, Int_t thr, Int_t maxval)
{
  // Set initial viualization parameters for 2D and 3D sector representations.

  fSetInitSectorParams = kTRUE;
  fInitMinTime   = mint;
  fInitMaxTime   = maxt;
  fInitThreshold = thr;
  fInitMaxVal    = maxval;
}
 AliEveTPCLoader.cxx:1
 AliEveTPCLoader.cxx:2
 AliEveTPCLoader.cxx:3
 AliEveTPCLoader.cxx:4
 AliEveTPCLoader.cxx:5
 AliEveTPCLoader.cxx:6
 AliEveTPCLoader.cxx:7
 AliEveTPCLoader.cxx:8
 AliEveTPCLoader.cxx:9
 AliEveTPCLoader.cxx:10
 AliEveTPCLoader.cxx:11
 AliEveTPCLoader.cxx:12
 AliEveTPCLoader.cxx:13
 AliEveTPCLoader.cxx:14
 AliEveTPCLoader.cxx:15
 AliEveTPCLoader.cxx:16
 AliEveTPCLoader.cxx:17
 AliEveTPCLoader.cxx:18
 AliEveTPCLoader.cxx:19
 AliEveTPCLoader.cxx:20
 AliEveTPCLoader.cxx:21
 AliEveTPCLoader.cxx:22
 AliEveTPCLoader.cxx:23
 AliEveTPCLoader.cxx:24
 AliEveTPCLoader.cxx:25
 AliEveTPCLoader.cxx:26
 AliEveTPCLoader.cxx:27
 AliEveTPCLoader.cxx:28
 AliEveTPCLoader.cxx:29
 AliEveTPCLoader.cxx:30
 AliEveTPCLoader.cxx:31
 AliEveTPCLoader.cxx:32
 AliEveTPCLoader.cxx:33
 AliEveTPCLoader.cxx:34
 AliEveTPCLoader.cxx:35
 AliEveTPCLoader.cxx:36
 AliEveTPCLoader.cxx:37
 AliEveTPCLoader.cxx:38
 AliEveTPCLoader.cxx:39
 AliEveTPCLoader.cxx:40
 AliEveTPCLoader.cxx:41
 AliEveTPCLoader.cxx:42
 AliEveTPCLoader.cxx:43
 AliEveTPCLoader.cxx:44
 AliEveTPCLoader.cxx:45
 AliEveTPCLoader.cxx:46
 AliEveTPCLoader.cxx:47
 AliEveTPCLoader.cxx:48
 AliEveTPCLoader.cxx:49
 AliEveTPCLoader.cxx:50
 AliEveTPCLoader.cxx:51
 AliEveTPCLoader.cxx:52
 AliEveTPCLoader.cxx:53
 AliEveTPCLoader.cxx:54
 AliEveTPCLoader.cxx:55
 AliEveTPCLoader.cxx:56
 AliEveTPCLoader.cxx:57
 AliEveTPCLoader.cxx:58
 AliEveTPCLoader.cxx:59
 AliEveTPCLoader.cxx:60
 AliEveTPCLoader.cxx:61
 AliEveTPCLoader.cxx:62
 AliEveTPCLoader.cxx:63
 AliEveTPCLoader.cxx:64
 AliEveTPCLoader.cxx:65
 AliEveTPCLoader.cxx:66
 AliEveTPCLoader.cxx:67
 AliEveTPCLoader.cxx:68
 AliEveTPCLoader.cxx:69
 AliEveTPCLoader.cxx:70
 AliEveTPCLoader.cxx:71
 AliEveTPCLoader.cxx:72
 AliEveTPCLoader.cxx:73
 AliEveTPCLoader.cxx:74
 AliEveTPCLoader.cxx:75
 AliEveTPCLoader.cxx:76
 AliEveTPCLoader.cxx:77
 AliEveTPCLoader.cxx:78
 AliEveTPCLoader.cxx:79
 AliEveTPCLoader.cxx:80
 AliEveTPCLoader.cxx:81
 AliEveTPCLoader.cxx:82
 AliEveTPCLoader.cxx:83
 AliEveTPCLoader.cxx:84
 AliEveTPCLoader.cxx:85
 AliEveTPCLoader.cxx:86
 AliEveTPCLoader.cxx:87
 AliEveTPCLoader.cxx:88
 AliEveTPCLoader.cxx:89
 AliEveTPCLoader.cxx:90
 AliEveTPCLoader.cxx:91
 AliEveTPCLoader.cxx:92
 AliEveTPCLoader.cxx:93
 AliEveTPCLoader.cxx:94
 AliEveTPCLoader.cxx:95
 AliEveTPCLoader.cxx:96
 AliEveTPCLoader.cxx:97
 AliEveTPCLoader.cxx:98
 AliEveTPCLoader.cxx:99
 AliEveTPCLoader.cxx:100
 AliEveTPCLoader.cxx:101
 AliEveTPCLoader.cxx:102
 AliEveTPCLoader.cxx:103
 AliEveTPCLoader.cxx:104
 AliEveTPCLoader.cxx:105
 AliEveTPCLoader.cxx:106
 AliEveTPCLoader.cxx:107
 AliEveTPCLoader.cxx:108
 AliEveTPCLoader.cxx:109
 AliEveTPCLoader.cxx:110
 AliEveTPCLoader.cxx:111
 AliEveTPCLoader.cxx:112
 AliEveTPCLoader.cxx:113
 AliEveTPCLoader.cxx:114
 AliEveTPCLoader.cxx:115
 AliEveTPCLoader.cxx:116
 AliEveTPCLoader.cxx:117
 AliEveTPCLoader.cxx:118
 AliEveTPCLoader.cxx:119
 AliEveTPCLoader.cxx:120
 AliEveTPCLoader.cxx:121
 AliEveTPCLoader.cxx:122
 AliEveTPCLoader.cxx:123
 AliEveTPCLoader.cxx:124
 AliEveTPCLoader.cxx:125
 AliEveTPCLoader.cxx:126
 AliEveTPCLoader.cxx:127
 AliEveTPCLoader.cxx:128
 AliEveTPCLoader.cxx:129
 AliEveTPCLoader.cxx:130
 AliEveTPCLoader.cxx:131
 AliEveTPCLoader.cxx:132
 AliEveTPCLoader.cxx:133
 AliEveTPCLoader.cxx:134
 AliEveTPCLoader.cxx:135
 AliEveTPCLoader.cxx:136
 AliEveTPCLoader.cxx:137
 AliEveTPCLoader.cxx:138
 AliEveTPCLoader.cxx:139
 AliEveTPCLoader.cxx:140
 AliEveTPCLoader.cxx:141
 AliEveTPCLoader.cxx:142
 AliEveTPCLoader.cxx:143
 AliEveTPCLoader.cxx:144
 AliEveTPCLoader.cxx:145
 AliEveTPCLoader.cxx:146
 AliEveTPCLoader.cxx:147
 AliEveTPCLoader.cxx:148
 AliEveTPCLoader.cxx:149
 AliEveTPCLoader.cxx:150
 AliEveTPCLoader.cxx:151
 AliEveTPCLoader.cxx:152
 AliEveTPCLoader.cxx:153
 AliEveTPCLoader.cxx:154
 AliEveTPCLoader.cxx:155
 AliEveTPCLoader.cxx:156
 AliEveTPCLoader.cxx:157
 AliEveTPCLoader.cxx:158
 AliEveTPCLoader.cxx:159
 AliEveTPCLoader.cxx:160
 AliEveTPCLoader.cxx:161
 AliEveTPCLoader.cxx:162
 AliEveTPCLoader.cxx:163
 AliEveTPCLoader.cxx:164
 AliEveTPCLoader.cxx:165
 AliEveTPCLoader.cxx:166
 AliEveTPCLoader.cxx:167
 AliEveTPCLoader.cxx:168
 AliEveTPCLoader.cxx:169
 AliEveTPCLoader.cxx:170
 AliEveTPCLoader.cxx:171
 AliEveTPCLoader.cxx:172
 AliEveTPCLoader.cxx:173
 AliEveTPCLoader.cxx:174
 AliEveTPCLoader.cxx:175
 AliEveTPCLoader.cxx:176
 AliEveTPCLoader.cxx:177
 AliEveTPCLoader.cxx:178
 AliEveTPCLoader.cxx:179
 AliEveTPCLoader.cxx:180
 AliEveTPCLoader.cxx:181
 AliEveTPCLoader.cxx:182
 AliEveTPCLoader.cxx:183
 AliEveTPCLoader.cxx:184
 AliEveTPCLoader.cxx:185
 AliEveTPCLoader.cxx:186
 AliEveTPCLoader.cxx:187
 AliEveTPCLoader.cxx:188
 AliEveTPCLoader.cxx:189
 AliEveTPCLoader.cxx:190
 AliEveTPCLoader.cxx:191
 AliEveTPCLoader.cxx:192
 AliEveTPCLoader.cxx:193
 AliEveTPCLoader.cxx:194
 AliEveTPCLoader.cxx:195
 AliEveTPCLoader.cxx:196
 AliEveTPCLoader.cxx:197
 AliEveTPCLoader.cxx:198
 AliEveTPCLoader.cxx:199
 AliEveTPCLoader.cxx:200
 AliEveTPCLoader.cxx:201
 AliEveTPCLoader.cxx:202
 AliEveTPCLoader.cxx:203
 AliEveTPCLoader.cxx:204
 AliEveTPCLoader.cxx:205
 AliEveTPCLoader.cxx:206
 AliEveTPCLoader.cxx:207
 AliEveTPCLoader.cxx:208
 AliEveTPCLoader.cxx:209
 AliEveTPCLoader.cxx:210
 AliEveTPCLoader.cxx:211
 AliEveTPCLoader.cxx:212
 AliEveTPCLoader.cxx:213
 AliEveTPCLoader.cxx:214
 AliEveTPCLoader.cxx:215
 AliEveTPCLoader.cxx:216
 AliEveTPCLoader.cxx:217
 AliEveTPCLoader.cxx:218
 AliEveTPCLoader.cxx:219
 AliEveTPCLoader.cxx:220
 AliEveTPCLoader.cxx:221
 AliEveTPCLoader.cxx:222
 AliEveTPCLoader.cxx:223
 AliEveTPCLoader.cxx:224
 AliEveTPCLoader.cxx:225
 AliEveTPCLoader.cxx:226
 AliEveTPCLoader.cxx:227
 AliEveTPCLoader.cxx:228
 AliEveTPCLoader.cxx:229
 AliEveTPCLoader.cxx:230
 AliEveTPCLoader.cxx:231
 AliEveTPCLoader.cxx:232
 AliEveTPCLoader.cxx:233
 AliEveTPCLoader.cxx:234
 AliEveTPCLoader.cxx:235
 AliEveTPCLoader.cxx:236
 AliEveTPCLoader.cxx:237
 AliEveTPCLoader.cxx:238
 AliEveTPCLoader.cxx:239
 AliEveTPCLoader.cxx:240
 AliEveTPCLoader.cxx:241
 AliEveTPCLoader.cxx:242
 AliEveTPCLoader.cxx:243
 AliEveTPCLoader.cxx:244
 AliEveTPCLoader.cxx:245
 AliEveTPCLoader.cxx:246
 AliEveTPCLoader.cxx:247
 AliEveTPCLoader.cxx:248
 AliEveTPCLoader.cxx:249
 AliEveTPCLoader.cxx:250
 AliEveTPCLoader.cxx:251
 AliEveTPCLoader.cxx:252
 AliEveTPCLoader.cxx:253
 AliEveTPCLoader.cxx:254
 AliEveTPCLoader.cxx:255
 AliEveTPCLoader.cxx:256
 AliEveTPCLoader.cxx:257
 AliEveTPCLoader.cxx:258
 AliEveTPCLoader.cxx:259
 AliEveTPCLoader.cxx:260
 AliEveTPCLoader.cxx:261
 AliEveTPCLoader.cxx:262
 AliEveTPCLoader.cxx:263
 AliEveTPCLoader.cxx:264
 AliEveTPCLoader.cxx:265
 AliEveTPCLoader.cxx:266
 AliEveTPCLoader.cxx:267
 AliEveTPCLoader.cxx:268
 AliEveTPCLoader.cxx:269
 AliEveTPCLoader.cxx:270
 AliEveTPCLoader.cxx:271
 AliEveTPCLoader.cxx:272
 AliEveTPCLoader.cxx:273
 AliEveTPCLoader.cxx:274
 AliEveTPCLoader.cxx:275
 AliEveTPCLoader.cxx:276
 AliEveTPCLoader.cxx:277
 AliEveTPCLoader.cxx:278
 AliEveTPCLoader.cxx:279
 AliEveTPCLoader.cxx:280
 AliEveTPCLoader.cxx:281
 AliEveTPCLoader.cxx:282
 AliEveTPCLoader.cxx:283
 AliEveTPCLoader.cxx:284
 AliEveTPCLoader.cxx:285
 AliEveTPCLoader.cxx:286
 AliEveTPCLoader.cxx:287
 AliEveTPCLoader.cxx:288
 AliEveTPCLoader.cxx:289
 AliEveTPCLoader.cxx:290
 AliEveTPCLoader.cxx:291
 AliEveTPCLoader.cxx:292
 AliEveTPCLoader.cxx:293
 AliEveTPCLoader.cxx:294
 AliEveTPCLoader.cxx:295
 AliEveTPCLoader.cxx:296
 AliEveTPCLoader.cxx:297
 AliEveTPCLoader.cxx:298
 AliEveTPCLoader.cxx:299
 AliEveTPCLoader.cxx:300
 AliEveTPCLoader.cxx:301
 AliEveTPCLoader.cxx:302
 AliEveTPCLoader.cxx:303
 AliEveTPCLoader.cxx:304
 AliEveTPCLoader.cxx:305
 AliEveTPCLoader.cxx:306
 AliEveTPCLoader.cxx:307
 AliEveTPCLoader.cxx:308
 AliEveTPCLoader.cxx:309
 AliEveTPCLoader.cxx:310
 AliEveTPCLoader.cxx:311
 AliEveTPCLoader.cxx:312
 AliEveTPCLoader.cxx:313
 AliEveTPCLoader.cxx:314
 AliEveTPCLoader.cxx:315
 AliEveTPCLoader.cxx:316
 AliEveTPCLoader.cxx:317
 AliEveTPCLoader.cxx:318
 AliEveTPCLoader.cxx:319
 AliEveTPCLoader.cxx:320
 AliEveTPCLoader.cxx:321
 AliEveTPCLoader.cxx:322
 AliEveTPCLoader.cxx:323
 AliEveTPCLoader.cxx:324
 AliEveTPCLoader.cxx:325
 AliEveTPCLoader.cxx:326
 AliEveTPCLoader.cxx:327
 AliEveTPCLoader.cxx:328
 AliEveTPCLoader.cxx:329
 AliEveTPCLoader.cxx:330
 AliEveTPCLoader.cxx:331
 AliEveTPCLoader.cxx:332
 AliEveTPCLoader.cxx:333
 AliEveTPCLoader.cxx:334
 AliEveTPCLoader.cxx:335
 AliEveTPCLoader.cxx:336
 AliEveTPCLoader.cxx:337
 AliEveTPCLoader.cxx:338
 AliEveTPCLoader.cxx:339
 AliEveTPCLoader.cxx:340
 AliEveTPCLoader.cxx:341
 AliEveTPCLoader.cxx:342
 AliEveTPCLoader.cxx:343
 AliEveTPCLoader.cxx:344
 AliEveTPCLoader.cxx:345
 AliEveTPCLoader.cxx:346
 AliEveTPCLoader.cxx:347
 AliEveTPCLoader.cxx:348