ROOT logo
// @(#)root/eve:$Id$
// Author: Matevz Tadel 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 "AliEveEventManagerEditor.h"
#include "AliEveEventManager.h"
#include "AliEveConfigManager.h"

#include <AliESDEvent.h>

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

#include <TEveGValuators.h>
#include <TGButton.h>
#include <TGTextView.h>
#include <TGLabel.h>

#include "Riostream.h"

#ifdef ZMQ
#include "AliStorageAdministratorPanelListEvents.h"
#include "AliStorageAdministratorPanelMarkEvent.h"
#endif

//______________________________________________________________________________
// GUI editor for AliEveEventManager.
//

using std::ifstream;
using std::ofstream;
using std::ios;
using std::cout;
using std::endl;
using std::string;

ClassImp(AliEveEventManagerEditor)

//______________________________________________________________________________
AliEveEventManagerEditor::AliEveEventManagerEditor(const TGWindow *p, Int_t width, Int_t height,
						   UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0),
  fDumpEventInfo(0),
  fEventInfo(0)
{
  // Constructor.

  MakeTitle("AliEveEventManager");

  {
    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    fDumpEventInfo = new TGTextButton(f, "Dump Event Info");
    fDumpEventInfo->SetToolTipText("Append information about current event to event_info.txt file.");
    fDumpEventInfo->SetWidth(120);
    fDumpEventInfo->ChangeOptions(fDumpEventInfo->GetOptions() | kFixedWidth);
    f->AddFrame(fDumpEventInfo, new TGLayoutHints(kLHintsNormal, 4,0,0,0));
    fDumpEventInfo->Connect("Clicked()",
			"AliEveEventManagerEditor", this, "DumpEventInfo()");
    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
  }
  {
    TGVerticalFrame* f = new TGVerticalFrame(this);

    TGLabel *eventInfoLabel = new TGLabel(f, "Event Information:");
    f->AddFrame(eventInfoLabel, new TGLayoutHints(kLHintsNormal, 0,0,6,2));

    fEventInfo = new TGTextView(f, 200, 300);
    f->AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));

    AddFrame(f, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
  }
}

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

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

  fM = static_cast<AliEveEventManager*>(obj);

  fEventInfo->LoadBuffer(fM->GetEventInfoVertical());
}

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

//______________________________________________________________________________
void AliEveEventManagerEditor::DumpEventInfo()
{
  // Dump event-info into event_info.txt.
  // The info is appended into the file.

  ofstream f("event_info.txt", ios::out | ios::app);

  f << "================================================================================\n\n";
  f << fM->GetEventInfoHorizontal() << std::endl << std::endl;

  f.close();
}


//==============================================================================
// AliEveEventManagerWindow
//==============================================================================

//______________________________________________________________________________
//
// Horizontal GUI for AliEveEventManager, to be placed in the
// bottom part of ROOT browser.

ClassImp(AliEveEventManagerWindow)

AliEveEventManagerWindow::AliEveEventManagerWindow(AliEveEventManager* mgr) :
  TGMainFrame(gClient->GetRoot(), 400, 100, kVerticalFrame),
  fM            (mgr),
  fFirstEvent   (0),
  fPrevEvent    (0),
  fNextEvent    (0),
  fLastEvent    (0),
  fRefresh      (0),
  fEventId      (0),
  fInfoLabel    (0),
  fAutoLoad     (0),
  fLoopMarked   (0),
  fAutoLoadTime (0),
  fTrigSel      (0),
  fEventInfo    (0)
{
  // Constructor.

  const TString cls("AliEveEventManagerWindow");
  TGTextButton *b = 0;
  {
    Int_t width = 50;

    TGHorizontalFrame* f = new TGHorizontalFrame(this);
    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 0,0,2,2));

    fFirstEvent = b = MkTxtButton(f, "First", width);
    b->Connect("Clicked()", cls, this, "DoFirstEvent()");
    fPrevEvent = b = MkTxtButton(f, "Prev", width);
    b->Connect("Clicked()", cls, this, "DoPrevEvent()");

    fEventId = new TGNumberEntry(f, 0, 5, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
                                 TGNumberFormat::kNELLimitMinMax, 0, 10000);
    f->AddFrame(fEventId, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
    fEventId->Connect("ValueSet(Long_t)", cls, this, "DoSetEvent()");
    fInfoLabel = new TGLabel(f);
    f->AddFrame(fInfoLabel, new TGLayoutHints(kLHintsNormal, 5, 10, 4, 0));

    fNextEvent = b = MkTxtButton(f, "Next", width);
    b->Connect("Clicked()", cls, this, "DoNextEvent()");
    fLastEvent = b = MkTxtButton(f, "Last", width);
    b->Connect("Clicked()", cls, this, "DoLastEvent()");
    fMarkEvent = b = MkTxtButton(f, "Mark", width);
    b->Connect("Clicked()", cls, this, "DoMarkEvent()");
      fRestartReco = b = MkTxtButton(f, "Restart reco", 2*width);
      b->Connect("Clicked()", cls, this, "DoRestartReco()");
      fRestartManager = b = MkTxtButton(f, "Restart manager", 2*width);
      b->Connect("Clicked()", cls, this, "DoRestartManager()");
      
      
    MkLabel(f, "||", 0, 8, 8);

    fRefresh = b = MkTxtButton(f, "Refresh", width + 8);
    b->Connect("Clicked()",cls, this, "DoRefresh()");

    MkLabel(f, "||", 0, 8, 8);

    fAutoLoad = new TGCheckButton(f, "Autoload");
    f->AddFrame(fAutoLoad, new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
    fAutoLoad->SetToolTipText("Automatic event loading.");
    fAutoLoad->Connect("Toggled(Bool_t)", cls, this, "DoSetAutoLoad()");

    fLoopMarked = new TGCheckButton(f, "Loop Marked");
    f->AddFrame(fLoopMarked, new TGLayoutHints(kLHintsLeft, 0, 4, 3, 0));
    fLoopMarked->SetToolTipText("Automatic marked events loading.");
    fLoopMarked->Connect("Toggled(Bool_t)", cls, this, "DoSetLoopMarked()");
      
    fAutoLoadTime = new TEveGValuator(f, "Time: ", 110, 0);
    f->AddFrame(fAutoLoadTime);
    fAutoLoadTime->SetShowSlider(kFALSE);
    fAutoLoadTime->SetNELength(4);
    fAutoLoadTime->Build();
    fAutoLoadTime->SetLimits(0, 1000);
    fAutoLoadTime->SetToolTip("Automatic event loading time in seconds.");
    fAutoLoadTime->Connect("ValueSet(Double_t)", cls, this, "DoSetAutoLoadTime()");

    fTrigSel = new TGComboBox(f);
    fTrigSel->Resize(4*width,b->GetDefaultHeight());
    fTrigSel->AddEntry("No trigger selection",-1);
    fTrigSel->Select(-1,kFALSE);
    f->AddFrame(fTrigSel, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
    fTrigSel->Connect("Selected(char*)", cls, this, "DoSetTrigSel()");

    fStorageStatus = MkLabel(f,"Storage: Waiting",0,8,8);
    fEventServerStatus = MkLabel(f,"Event Server: Waiting",0,10,10);
      
  }
    
  fEventInfo = new TGTextView(this, 400, 600);
  AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));

   fM->Connect("NewEventLoaded()", cls, this, "Update(=1)");
   fM->Connect("NoEventLoaded()", cls, this, "Update(=0)");
   fM->Connect("StorageManagerOk()",cls,this,"StorageManagerChangedState(=1)");
   fM->Connect("StorageManagerDown()",cls,this,"StorageManagerChangedState(=0)");

  SetCleanup(kDeepCleanup);
  Layout();
  MapSubwindows();
  MapWindow();
}

//______________________________________________________________________________
AliEveEventManagerWindow::~AliEveEventManagerWindow()
{
  // Destructor.

  fM->Disconnect("NewEventLoaded()", this);
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoFirstEvent()
{
  // Load previous event
  fM->GotoEvent(0);
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoPrevEvent()
{
  // Load previous event
  // fM->PrevEvent();
  if (fM->IsOnlineMode()) {
    fM->GotoEvent(1);
  }
  else {
    fM->GotoEvent((Int_t) fEventId->GetNumber()-1);

  }

}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoNextEvent()
{
  // Load next event
  // fM->NextEvent();
  if (fM->IsOnlineMode()) {
      cout<<"next event, online node"<<endl;
    fM->GotoEvent(2);
  }
  else {
      cout<<"next event, offline mode"<<endl;
    fM->GotoEvent((Int_t) fEventId->GetNumber()+1);
  }
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoLastEvent()
{
  // Load previous event
  fM->GotoEvent(-1);
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoMarkEvent()
{
  // Mark current event
  fM->MarkCurrentEvent();
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoRestartReco()
{
    ifstream configFile (GetConfigFilePath());
    string username,hostname;
    
    if (configFile.is_open())
    {
        string line;
        int from,to;
        while(configFile.good())
        {
            getline(configFile,line);
            from = line.find("\"")+1;
            to = line.find_last_of("\"");
            if(line.find("EVENT_SERVER=")==0)
            {
                hostname=line.substr(from,to-from);
            }
            else if(line.find("EVENT_SERVER_USER=")==0)
            {
                username=line.substr(from,to-from);
            }
        }
        if(configFile.eof()){configFile.clear();}
        configFile.close();
    }
    else{cout<<"Event Manager Editor -- Unable to open config file"<<endl;}

    // Kill reconstruction server
    gSystem->Exec(Form("ssh -n -f %s@%s \"killall alieventserver\"",username.c_str(),hostname.c_str()));
}

void AliEveEventManagerWindow::DoRestartManager()
{
    ifstream configFile (GetConfigFilePath());
    string username,hostname;
    
    if (configFile.is_open())
    {
        string line;
        int from,to;
        while(configFile.good())
        {
            getline(configFile,line);
            from = line.find("\"")+1;
            to = line.find_last_of("\"");
            if(line.find("STORAGE_SERVER=")==0)
            {
                hostname=line.substr(from,to-from);
            }
            else if(line.find("STORAGE_SERVER_USER=")==0)
            {
                username=line.substr(from,to-from);
            }
        }
        if(configFile.eof()){configFile.clear();}
        configFile.close();
    }
    else{cout<<"Event Manager Editor -- Unable to open config file"<<endl;}

    
    // Kill storage manager
    gSystem->Exec(Form("ssh -n -f %s@%s \"killall alistorage\"",username.c_str(),hostname.c_str()));
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoSetEvent()
{
  // Set current event
  fM->GotoEvent((Int_t) fEventId->GetNumber());
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoRefresh()
{
  // Refresh event status.

  Int_t ev = fM->GetEventId();
  fM->Close();
  fM->Open();
  fM->GotoEvent(ev);
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoSetAutoLoad()
{
  // Set the auto-load flag

  fM->SetAutoLoad(fAutoLoad->IsOn());
  Update(fM->NewEventAvailable());
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoSetLoopMarked()
{
    // Set the auto-load flag
    fM->SetLoopMarked(fLoopMarked->IsOn());
//    Update(fM->NewEventAvailable());
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoSetAutoLoadTime()
{
  // Set the auto-load time in seconds

  fM->SetAutoLoadTime(fAutoLoadTime->GetValue());
}

//______________________________________________________________________________
void AliEveEventManagerWindow::DoSetTrigSel()
{
  // Set the trigger selection

  fM->SetTrigSel(fTrigSel->GetSelectedEntry()->EntryId());
}

//______________________________________________________________________________
void AliEveEventManagerWindow::Update(int state)
{

  Bool_t autoLoad = fM->GetAutoLoad();
  Bool_t extCtrl  = fM->IsUnderExternalControl();
  Bool_t evNavOn  = !autoLoad && !extCtrl;

#ifdef ZMQ

  AliESDEvent*  esd = fM->GetESD();
  AliStorageAdministratorPanelListEvents* listEventsTab = AliStorageAdministratorPanelListEvents::GetInstance();
  AliEveConfigManager *configManager = AliEveConfigManager::GetMaster();

  if (!fM->IsOnlineMode()) {

      listEventsTab->SetOfflineMode(kTRUE);

      fFirstEvent->SetEnabled(!autoLoad);
      fPrevEvent ->SetEnabled(!autoLoad);
      fLastEvent ->SetEnabled(!autoLoad);
      fNextEvent ->SetEnabled(!autoLoad);
      fMarkEvent ->SetEnabled(kFALSE);

      fInfoLabel->SetText(Form("/ %d", fM->GetMaxEventId()));

  }
  else if (1 == state && fStorageStatus->GetText()->Contains("DOWN")) {
    fEventServerStatus->SetText("Event Server: OK");
    fFirstEvent->SetEnabled(kFALSE);
    fPrevEvent ->SetEnabled(kFALSE);
    fLastEvent ->SetEnabled(!autoLoad);
    fNextEvent ->SetEnabled(kFALSE);
    fMarkEvent ->SetEnabled(kFALSE);
    listEventsTab->SetOfflineMode(kTRUE);
    fInfoLabel->SetText(Form("/ %d",fM->GetEventId()));
  }
  else if (0 == state && fStorageStatus->GetText()->Contains("DOWN")) {
    fEventServerStatus->SetText("Event Server: Waiting");
    fFirstEvent->SetEnabled(kFALSE);
    fPrevEvent ->SetEnabled(kFALSE);
    fLastEvent ->SetEnabled(!autoLoad);
    fNextEvent ->SetEnabled(kFALSE);
    fMarkEvent ->SetEnabled(kFALSE);
    listEventsTab->SetOfflineMode(kTRUE);
  }
  else if (0 == state && fStorageStatus->GetText()->Contains("OK")) {
    fEventServerStatus->SetText("Event Server: Waiting");
    fFirstEvent->SetEnabled(!autoLoad);
    fPrevEvent ->SetEnabled(!autoLoad);
    fLastEvent ->SetEnabled(!autoLoad);
    fNextEvent ->SetEnabled(!autoLoad);
    fMarkEvent ->SetEnabled(kTRUE);
    listEventsTab->SetOfflineMode(kFALSE);
  }
  else {
    fEventServerStatus->SetText("Event Server: OK");
    fFirstEvent->SetEnabled(!autoLoad);
    fPrevEvent ->SetEnabled(!autoLoad);
    fLastEvent ->SetEnabled(!autoLoad);
    fNextEvent ->SetEnabled(!autoLoad);
    fMarkEvent ->SetEnabled(kTRUE);
    listEventsTab->SetOfflineMode(kFALSE);
  }
#endif

  if (1 == state) {
    fRefresh   ->SetEnabled(evNavOn);

    fEventId->SetNumber(fM->GetEventId());
    fEventId->SetState(evNavOn);
    // fInfoLabel->SetText(Form("/ %d", fM->GetMaxEventId()));

    fAutoLoad->SetState(fM->GetAutoLoad() ? kButtonDown : kButtonUp);
    fAutoLoadTime->SetValue(fM->GetAutoLoadTime());

    // Loop over active trigger classes
    if (fM->GetESD()) {
      for(Int_t iTrig = 0; iTrig < AliESDRun::kNTriggerClasses; iTrig++) {
	TString trigName = fM->GetESD()->GetESDRun()->GetTriggerClass(iTrig);
	if (trigName.IsNull()) {
	  if (fTrigSel->GetListBox()->GetEntry(iTrig)) {
	    if (fTrigSel->GetSelected() == iTrig) fTrigSel->Select(-1);
	    fTrigSel->RemoveEntry(iTrig);
	  }
	  continue;
	}
	if (!fTrigSel->FindEntry(trigName.Data()))
	  fTrigSel->AddEntry(trigName.Data(),iTrig);
      }
    }
    fTrigSel->SetEnabled(!evNavOn);

//    fEventInfo->LoadBuffer(fM->GetEventInfoHorizontal());

    Layout();
  }
}

void AliEveEventManagerWindow::StorageManagerChangedState(int state)
{
#ifdef ZMQ

  Bool_t autoLoad = fM->GetAutoLoad();
  AliStorageAdministratorPanelListEvents* listEventsTab = AliStorageAdministratorPanelListEvents::GetInstance();
  AliEveConfigManager *configManager = AliEveConfigManager::GetMaster();

  if (fM->IsOnlineMode()) {
    if (state == 0)
      {
        fStorageStatus->SetText("Storage: DOWN");
        fMarkEvent->SetEnabled(kFALSE);
        fNextEvent->SetEnabled(kFALSE);
        fLastEvent->SetEnabled(!autoLoad);
        fPrevEvent->SetEnabled(kFALSE);
        fFirstEvent->SetEnabled(kFALSE);
	listEventsTab->SetOfflineMode(kTRUE);
	fEventId->SetState(kFALSE);
      }
    else if(state == 1)
      {
	listEventsTab->SetOfflineMode(kFALSE);

        fStorageStatus->SetText("Storage: OK");
        fMarkEvent->SetEnabled(kTRUE);
        fNextEvent->SetEnabled(!autoLoad);
        fLastEvent->SetEnabled(!autoLoad);
        fPrevEvent->SetEnabled(!autoLoad);
        fFirstEvent->SetEnabled(!autoLoad);
	fEventId->SetState(!autoLoad);
      }
  }
#endif
}

//------------------------------------------------------------------------------
// Protected methods
//------------------------------------------------------------------------------

//______________________________________________________________________________
TGTextButton* AliEveEventManagerWindow::MkTxtButton(TGCompositeFrame* p,
						    const char* txt, Int_t width,
						    Int_t lo, Int_t ro, Int_t to, Int_t bo)
{
  // Create a standard button.
  // If width is not zero, the fixed-width flag is set.

  TGTextButton* b = new TGTextButton(p, txt);
  if (width > 0) {
    b->SetWidth(width);
    b->ChangeOptions(b->GetOptions() | kFixedWidth);
  }
  p->AddFrame(b, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
  return b;
}

//______________________________________________________________________________
TGLabel* AliEveEventManagerWindow::MkLabel(TGCompositeFrame* p,
					   const char* txt, Int_t width,
					   Int_t lo, Int_t ro, Int_t to, Int_t bo)
{
  // Create a standard button.
  // If width is not zero, the fixed-width flag is set.

  TGLabel* l = new TGLabel(p, txt);
  if (width > 0) {
    l->SetWidth(width);
    l->ChangeOptions(l->GetOptions() | kFixedWidth);
  }
  p->AddFrame(l, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
  return l;
}

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