#include "AliEveEventManagerEditor.h"
#include "AliEveEventManager.h"
+#include "AliEveConfigManager.h"
#include <AliESDEvent.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)
//______________________________________________________________________________
fEventId (0),
fInfoLabel (0),
fAutoLoad (0),
+ fLoopMarked (0),
fAutoLoadTime (0),
fTrigSel (0),
fEventInfo (0)
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);
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);
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()");
- fM->Connect("StorageManagerOk()",cls,this,"StorageManagerChangedState(=1)");
- fM->Connect("StorageManagerDown()",cls,this,"StorageManagerChangedState(=0)");
+ 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();
{
// Load previous event
// fM->PrevEvent();
- fM->GotoEvent(1);
+ if (fM->IsOnlineMode()) {
+ fM->GotoEvent(1);
+ }
+ else {
+ fM->GotoEvent((Int_t) fEventId->GetNumber()-1);
+
+ }
}
{
// Load next event
// fM->NextEvent();
- fM->GotoEvent(2);
-
+ 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);
+ }
}
//______________________________________________________________________________
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 the auto-load flag
fM->SetAutoLoad(fAutoLoad->IsOn());
- Update();
+ Update(fM->NewEventAvailable());
+}
+
+//______________________________________________________________________________
+void AliEveEventManagerWindow::DoSetLoopMarked()
+{
+ // Set the auto-load flag
+ fM->SetLoopMarked(fLoopMarked->IsOn());
+// Update(fM->NewEventAvailable());
}
//______________________________________________________________________________
}
//______________________________________________________________________________
-void AliEveEventManagerWindow::Update()
+void AliEveEventManagerWindow::Update(int state)
{
- // Update current event, number of available events, list of active triggers
Bool_t autoLoad = fM->GetAutoLoad();
Bool_t extCtrl = fM->IsUnderExternalControl();
Bool_t evNavOn = !autoLoad && !extCtrl;
- // fFirstEvent->SetEnabled(evNavOn);
- // fPrevEvent ->SetEnabled(evNavOn);
- // fLastEvent ->SetEnabled(evNavOn);
- fFirstEvent->SetEnabled(!autoLoad);
- fPrevEvent ->SetEnabled(!autoLoad);
- fLastEvent ->SetEnabled(!autoLoad);
- fNextEvent ->SetEnabled(!autoLoad);
- 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);
+#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;
}
- continue;
+ if (!fTrigSel->FindEntry(trigName.Data()))
+ fTrigSel->AddEntry(trigName.Data(),iTrig);
}
- if (!fTrigSel->FindEntry(trigName.Data()))
- fTrigSel->AddEntry(trigName.Data(),iTrig);
}
- }
- fTrigSel->SetEnabled(!evNavOn);
+ fTrigSel->SetEnabled(!evNavOn);
- fEventInfo->LoadBuffer(fM->GetEventInfoHorizontal());
+// fEventInfo->LoadBuffer(fM->GetEventInfoHorizontal());
- Layout();
+ 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(false);
- fNextEvent->SetEnabled(false);
- fLastEvent->SetEnabled(false);
- fPrevEvent->SetEnabled(false);
- fFirstEvent->SetEnabled(false);
- }
+ 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(true);
- fNextEvent->SetEnabled(true);
- fLastEvent->SetEnabled(true);
- fPrevEvent->SetEnabled(true);
- fFirstEvent->SetEnabled(true);
- }
+ fMarkEvent->SetEnabled(kTRUE);
+ fNextEvent->SetEnabled(!autoLoad);
+ fLastEvent->SetEnabled(!autoLoad);
+ fPrevEvent->SetEnabled(!autoLoad);
+ fFirstEvent->SetEnabled(!autoLoad);
+ fEventId->SetState(!autoLoad);
+ }
+ }
+#endif
}
//------------------------------------------------------------------------------