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 "AliEveTPCLoaderEditor.h"

#include <EveDet/AliEveTPCLoader.h>
#include <EveDet/AliEveTPCData.h>

#include <TEveScene.h>
#include <TEveManager.h>
#include <TEveGValuators.h>
#include <TGDoubleSlider.h>

#include <TSystem.h>
#include <TVirtualPad.h>
#include <TColor.h>

#include <TGLabel.h>
#include <TGButton.h>
#include <TGTextEntry.h>
#include <TGNumberEntry.h>
#include <TGFileDialog.h>
#include <TGToolTip.h>


//______________________________________________________________________________
//
// Editor for AliEveTPCLoader.

ClassImp(AliEveTPCLoaderEditor)

AliEveTPCLoaderEditor::AliEveTPCLoaderEditor(const TGWindow *p,
					     Int_t width, Int_t height,
					     UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),

  fM        (0),

  fFile     (0),
  fOpenFile (0),

  fEvent    (0),
  fDoubleSR (0),

  fDataLoadThreshold (0),
  fDataLoadPedestal  (0),
  fDataAutoPedestal  (0),

  fUpdateSectors   (0),
  fReloadSectors   (0),
  fCreateSectors3D (0),
  fDeleteSectors3D (0),

  gEtaRange(0),
  gCutOnEta(0)
  
{
  // Constructor.

  MakeTitle("AliEveTPCLoader");

  Int_t labelW;

  // File / event interface

  labelW = 42;
  {
    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
    TGLabel* l = new TGLabel(g, "File: ");
    g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
    f->AddFrame(g);
    fFile = new TGTextEntry(f);
    fFile->SetWidth(140);
    f->AddFrame(fFile);
    fFile->Connect("DoubleClicked()",
		   "AliEveTPCLoaderEditor", this, "FileSelect()");
    fFile->Connect("TextChanged(const char *)",
		   "AliEveTPCLoaderEditor", this, "FileChanged()");
    fOpenFile = new TGTextButton(f, "Open");
    f->AddFrame(fOpenFile);
    fOpenFile->Connect("Clicked()",
		       "AliEveTPCLoaderEditor", this, "DoOpen()");
    AddFrame(f);
  }

  fEvent = new TEveGValuator(this, "Event:", 110, 0);
  fEvent->SetShowSlider(kFALSE);
  fEvent->SetLabelWidth(labelW);
  fEvent->SetNELength(6);
  fEvent->Build();
  fEvent->SetLimits(0, 999999);
  fEvent->SetToolTip("Current event number");
  fEvent->Connect("ValueSet(Double_t)",
		  "AliEveTPCLoaderEditor", this, "DoEvent()");
  // Reuse Event for DoubleSR button
  fDoubleSR = new TGCheckButton(fEvent, "Double SR");
  fDoubleSR->SetToolTipText("Double sampling rate");
  fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
  fDoubleSR->Connect("Toggled(Bool_t)",
                     "AliEveTPCLoaderEditor", this, "DoDoubleSR()");
  AddFrame(fEvent);


  // AliEveTPCData load settings

  labelW = 90;

  fDataLoadThreshold = new TEveGValuator(this, "Load threshold:", 110, 0);
  fDataLoadThreshold->SetShowSlider(kFALSE);
  fDataLoadThreshold->SetLabelWidth(labelW);
  fDataLoadThreshold->SetNELength(6);
  fDataLoadThreshold->Build();
  fDataLoadThreshold->SetLimits(0, 1000);
  fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
  fDataLoadThreshold->Connect
    ("ValueSet(Double_t)",
     "AliEveTPCLoaderEditor", this, "DoDataLoadThreshold()");
  AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));

  fDataLoadPedestal = new TEveGValuator(this, "Load pedestal:", 110, 0);
  fDataLoadPedestal->SetShowSlider(kFALSE);
  fDataLoadPedestal->SetLabelWidth(labelW);
  fDataLoadPedestal->SetNELength(6);
  fDataLoadPedestal->Build();
  fDataLoadPedestal->SetLimits(0, 1000);
  fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
  fDataLoadPedestal->Connect
    ("ValueSet(Double_t)",
     "AliEveTPCLoaderEditor", this, "DoDataLoadPedestal()");
  // Reuse DataLoadPedestal for DataAutoPedestal check button
  fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
  fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
  fDataAutoPedestal->Connect
    ("Toggled(Bool_t)",
     "AliEveTPCLoaderEditor", this, "DoDataAutoPedestal()");
  fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
  AddFrame(fDataLoadPedestal);

  // Steering buttons: update/reload sectors; show/hide 3d

  {
    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    fUpdateSectors = new TGTextButton(f, "Update Sectors");
    f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
    fUpdateSectors->Connect("Clicked()",
			    "AliEveTPCLoaderEditor", this, "DoUpdateSectors()");
    fReloadSectors = new TGTextButton(f, "Reload Sectors");
    f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
    fReloadSectors->Connect("Clicked()",
			    "AliEveTPCLoaderEditor", this, "DoReloadSectors()");
    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
  }
  {
    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    fCreateSectors3D = new TGTextButton(f, "Create 3D");
    f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
    fCreateSectors3D->Connect("Clicked()",
			      "AliEveTPCLoaderEditor", this, "DoCreateSectors3D()");
    fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
    f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
    fDeleteSectors3D->Connect("Clicked()",
			      "AliEveTPCLoaderEditor", this, "DoDeleteSectors3D()");
    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
  }
  {
    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    fCreateSectors3D = new TGTextButton(f, "Show 2D");
    f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
    fCreateSectors3D->Connect("Clicked()",
			      "AliEveTPCLoaderEditor", this, "DoShowSectors2D()");
    fDeleteSectors3D = new TGTextButton(f, "Hide 2D");
    f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
    fDeleteSectors3D->Connect("Clicked()",
			      "AliEveTPCLoaderEditor", this, "DoHideSectors2D()");
    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
  }

   // Eta cuts slider

  {
   TGHorizontalFrame* f = new TGHorizontalFrame(this);

   gEtaRange = new TEveGDoubleValuator(f,"Eta range:", 40, 0);
   gEtaRange->SetNELength(6);
   gEtaRange->SetLabelWidth(50);
   gEtaRange->Build();
   gEtaRange->GetSlider()->SetWidth(180);
   gEtaRange->SetLimits(-1.5, 1.5, TGNumberFormat::kNESRealTwo);
   gEtaRange->SetValues(-1.5, 1.5, TGNumberFormat::kNESRealTwo);

   gCutOnEta = new TGCheckButton(f, "Set", 10);
   gCutOnEta->SetEnabled(kTRUE);

   f->AddFrame(gEtaRange, new TGLayoutHints(kLHintsExpandX, 10, 10, 10, 10));
   f->AddFrame(gCutOnEta, new TGLayoutHints(kLHintsNormal, 10, 10, 10, 10));

   AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
  }

}

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

void AliEveTPCLoaderEditor::SetModel(TObject* obj)
{
  // Set model object.

  fM = static_cast<AliEveTPCLoader*>(obj);

  // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
  fFile->SetText(fM->fFile);
  fEvent->SetValue(fM->fEvent);
  fEvent->SetEnabled(fM->fEvent >= 0);
  fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);

  AliEveTPCData* tpcd = fM->GetData();
  Bool_t   tpcp = (tpcd != 0);
  fDataLoadThreshold->SetEnabled(tpcp);
  fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
  fDataAutoPedestal ->SetEnabled(tpcp);
  if (tpcp) {
    fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
    fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
    fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
  }
}

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

void AliEveTPCLoaderEditor::FileSelect()
{
  // Slot for FileSelect.

  static const char *kTPCFileTypes[] = {
   "Root files",  "*.root",
   "All files",   "*.*",
    0,               0
};

  TGFileInfo fi;
  fi.fIniDir    = StrDup(gSystem->DirName (fM->fFile));
  fi.fFilename  = StrDup(gSystem->BaseName(fM->fFile));
  fi.fFileTypes = kTPCFileTypes;

  new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
  if (!fi.fFilename)
    return;

  fFile->SetText(fi.fFilename);
}

void AliEveTPCLoaderEditor::FileChanged()
{
  // Slot for FileChanged.

  fM->fFile = fFile->GetText();
}

void AliEveTPCLoaderEditor::DoOpen()
{
  // Slot for Open.

  fM->OpenFile();
  SetModel(fM);
}

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

void AliEveTPCLoaderEditor::DoEvent()
{
  // Slot for Event.

  fM->GotoEvent((Int_t) fEvent->GetValue());
  SetModel(fM);
}

void AliEveTPCLoaderEditor::DoDoubleSR()
{
  // Slot for DoubleSR.

  fM->SetDoubleSR(fDoubleSR->IsOn());
  Update();
}

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

void AliEveTPCLoaderEditor::DoDataLoadThreshold()
{
  // Slot for DataLoadThreshold.

  if (fM->GetData() == 0) return;
  fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
}

void AliEveTPCLoaderEditor::DoDataLoadPedestal()
{
  // Slot for DataLoadPedestal.

  if (fM->GetData() == 0) return;
  fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
}

void AliEveTPCLoaderEditor::DoDataAutoPedestal()
{
  // Slot for DataAutoPedestal.

  if (fM->GetData() == 0) return;
  fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
  fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
}

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

void AliEveTPCLoaderEditor::DoUpdateSectors()
{
  // Slot for UpdateSectors.

  if(gCutOnEta)
    fM->SetCutOnEta(gCutOnEta->IsOn());

  if(gEtaRange)
  {
    fM->SetEtaMin(gEtaRange->GetMin());
    fM->SetEtaMax(gEtaRange->GetMax());
  }

  fM->UpdateSectors();
}

void AliEveTPCLoaderEditor::DoReloadSectors()
{
  // Slot for ReloadSectors.

  if(gCutOnEta)
    fM->SetCutOnEta(gCutOnEta->IsOn());

  if(gEtaRange)
  {
    fM->SetEtaMin(gEtaRange->GetMin());
    fM->SetEtaMax(gEtaRange->GetMax());
  }


  fM->ReloadSectors();
}

void AliEveTPCLoaderEditor::DoCreateSectors3D()
{
  // Slot for CreateSectors3D.

  if(gCutOnEta)
    fM->SetCutOnEta(gCutOnEta->IsOn());

  if(gEtaRange)
  {
    fM->SetEtaMin(gEtaRange->GetMin());
    fM->SetEtaMax(gEtaRange->GetMax());
  }

  fM->CreateSectors3D();
}


void AliEveTPCLoaderEditor::DoDeleteSectors3D()
{
  // Slot for DeleteSectors3D.

  fM->DeleteSectors3D();
}

void AliEveTPCLoaderEditor::DoShowSectors2D()
{

   for(Int_t i = 0; i< 36; i++)
   {
      if(gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i)))
      {
         gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrSelf(kTRUE);
         gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrChildren(kTRUE);
      }
   }

}

void AliEveTPCLoaderEditor::DoHideSectors2D()
{

   for(Int_t i = 0; i< 36; i++)
   {
      if(gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i)))
      {
         gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrSelf(kFALSE);
         gEve->GetEventScene()->FirstChild()->FindChild("AliEveTPCLoader")->FindChild(Form("Sector2D %d",i))->SetRnrChildren(kFALSE);
      }
   }

}

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