Brand new GUI application for online display/reco by Matevz.
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Sep 2009 16:18:30 +0000 (16:18 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Sep 2009 16:18:30 +0000 (16:18 +0000)
17 files changed:
MONITOR/AliChildReaper.cxx [new file with mode: 0644]
MONITOR/AliChildReaper.h [new file with mode: 0644]
MONITOR/AliDimIntNotifier.cxx [new file with mode: 0644]
MONITOR/AliDimIntNotifier.h [new file with mode: 0644]
MONITOR/AliOnlineReco.cxx [new file with mode: 0644]
MONITOR/AliOnlineReco.h [new file with mode: 0644]
MONITOR/AliTestChildProc.cxx [new file with mode: 0644]
MONITOR/AliTestChildProc.h [new file with mode: 0644]
MONITOR/MONITORLinkDef.h
MONITOR/alionlinemonitor.cxx [new file with mode: 0644]
MONITOR/alitestproc.cxx [new file with mode: 0644]
MONITOR/binalionlinemonitor.pkg [new file with mode: 0644]
MONITOR/binalitestproc.pkg [new file with mode: 0644]
MONITOR/binderoot.pkg
MONITOR/binmonitorCheck.pkg
MONITOR/binmonitorGDC.pkg
MONITOR/libMONITOR.pkg

diff --git a/MONITOR/AliChildReaper.cxx b/MONITOR/AliChildReaper.cxx
new file mode 100644 (file)
index 0000000..8eb3f65
--- /dev/null
@@ -0,0 +1,52 @@
+// @(#)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 "AliChildReaper.h"
+
+#include <sys/wait.h>
+
+//______________________________________________________________________________
+// Full description of AliChildReaper
+//
+
+ClassImp(AliChildReaper)
+
+AliChildReaper* AliChildReaper::fgTheOne = 0;
+
+AliChildReaper* AliChildReaper::Instance()
+{
+  if (fgTheOne == 0)
+    fgTheOne = new AliChildReaper;
+  return fgTheOne;
+}
+
+AliChildReaper::AliChildReaper()
+{
+  struct sigaction sac;
+  sac.sa_handler = sig_handler;
+  sigemptyset(&sac.sa_mask);
+  sac.sa_flags = 0;
+  sigaction(SIGCHLD, &sac, 0);
+}
+
+void AliChildReaper::sig_handler(int /*sig*/)
+{
+  int   status;
+  pid_t pid = wait(&status);
+  Instance()->ChildDeath(pid, status);
+}
+
+void AliChildReaper::ChildDeath(Int_t pid, Int_t status)
+{
+   Long_t args[2];
+   args[0] = (Long_t) pid;
+   args[1] = (Long_t) status;
+
+   Emit("ChildDeath(Int_t,Int_t)", args);
+}
diff --git a/MONITOR/AliChildReaper.h b/MONITOR/AliChildReaper.h
new file mode 100644 (file)
index 0000000..036e6c6
--- /dev/null
@@ -0,0 +1,42 @@
+// @(#)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.                                                 *
+ **************************************************************************/
+
+#ifndef AliChildReaper_H
+#define AliChildReaper_H
+
+#include "TObject.h"
+#include "TQObject.h"
+
+//______________________________________________________________________________
+// Short description of AliChildReaper
+//
+
+class AliChildReaper : public TObject,
+                      public TQObject
+{
+public:
+  void ChildDeath(Int_t pid, Int_t status); // *SIGNAL*
+
+  static AliChildReaper* Instance();
+
+private:
+  AliChildReaper();
+  virtual ~AliChildReaper() {}
+
+  AliChildReaper(const AliChildReaper&);            // Not implemented
+  AliChildReaper& operator=(const AliChildReaper&); // Not implemented
+
+  static void sig_handler(int sig);
+
+  static AliChildReaper* fgTheOne;
+
+  ClassDef(AliChildReaper, 0);
+};
+
+#endif
diff --git a/MONITOR/AliDimIntNotifier.cxx b/MONITOR/AliDimIntNotifier.cxx
new file mode 100644 (file)
index 0000000..fc84831
--- /dev/null
@@ -0,0 +1,99 @@
+// @(#)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 "AliDimIntNotifier.h"
+
+
+//______________________________________________________________________________
+// Full description of AliDimIntNotifier
+//
+
+ClassImp(AliDimIntNotifier)
+
+Long_t AliDimIntNotifier::fgMainThreadId = 0;
+
+void AliDimIntNotifier::SetMainThreadId()
+{
+  fgMainThreadId = TThread::SelfId();
+}
+
+AliDimIntNotifier::AliDimIntNotifier(const TString& service) :
+  DimUpdatedInfo(service, -1),
+  fNotifyLck(kTRUE),
+  fNotifyCnd(&fNotifyLck),
+  fLastMessage(-1)
+{
+  fReThreader.Connect("Timeout()", "AliDimIntNotifier", this, "DimMessage()");
+}
+
+void AliDimIntNotifier::StartTimer()
+{
+  fReThreader.Reset();
+  fReThreader.TurnOn();
+}
+
+void AliDimIntNotifier::StopTimer()
+{
+  fReThreader.TurnOff();
+}
+
+void AliDimIntNotifier::infoHandler()
+{
+  // Handle DIM message
+
+  fNotifyLck.Lock();
+  fLastMessage = getData() ? getInt() : -1;
+  if (TThread::SelfId() != fgMainThreadId)
+  {
+    StartTimer();
+    fNotifyCnd.Wait();
+  }
+  else
+  {
+    Warning("infoHandler", "DIM message received from CINT thread.");
+    DimMessage();
+  }
+  fNotifyLck.UnLock();
+}
+
+void AliDimIntNotifier::infoHandlerTest(Int_t fake)
+{
+  // Fake handler for testing.
+
+  fNotifyLck.Lock();
+  fLastMessage = fake;
+  if (TThread::SelfId() != fgMainThreadId)
+  {
+    StartTimer();
+    fNotifyCnd.Wait();
+  }
+  else
+  {
+    Warning("infoHandlerTest", "Was called from CINT thread ...");
+    DimMessage();
+  }
+  fNotifyLck.UnLock();
+}
+
+void AliDimIntNotifier::DimMessage(Int_t)
+{
+  StopTimer();
+  if (fLastMessage != -1)
+  {
+    Emit("DimMessage(Int_t)", fLastMessage);
+    printf("Notify %d\n", fLastMessage);
+  }
+  else
+  {
+    printf("NOTNotify %d\n", fLastMessage);
+  }
+  fNotifyLck.Lock();
+  fNotifyCnd.Signal();
+  fNotifyLck.UnLock();
+}
diff --git a/MONITOR/AliDimIntNotifier.h b/MONITOR/AliDimIntNotifier.h
new file mode 100644 (file)
index 0000000..8d2fc85
--- /dev/null
@@ -0,0 +1,72 @@
+// @(#)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.                                                 *
+ **************************************************************************/
+
+#ifndef AliDimIntNotifier_H
+#define AliDimIntNotifier_H
+
+#include <TObject.h>
+#include <TQObject.h>
+
+#include <TMutex.h>
+#include <TCondition.h>
+#include <TTimer.h>
+
+#ifdef ALI_DIM
+#include <dic.hxx>
+#else
+class DimUpdatedInfo
+{
+public:
+  DimUpdatedInfo(const Char_t*, Int_t) {}
+
+  Bool_t getData() { return kFALSE; }
+  Int_t  getInt()  { return -1; }
+};
+#endif
+
+//______________________________________________________________________________
+// Short description of AliDimIntNotifier
+//
+
+class AliDimIntNotifier : public TObject,
+                         public TQObject,
+                         public DimUpdatedInfo
+{
+public:
+
+  AliDimIntNotifier(const TString& service);
+
+  virtual ~AliDimIntNotifier() {}
+
+  void infoHandler();
+  void infoHandlerTest(Int_t fake);
+
+  void DimMessage(Int_t=-1); // *SIGNAL*
+
+  static void SetMainThreadId();
+
+private:
+  AliDimIntNotifier(const AliDimIntNotifier&);            // Not implemented
+  AliDimIntNotifier& operator=(const AliDimIntNotifier&); // Not implemented
+
+  void StartTimer();
+  void StopTimer();
+
+  TTimer       fReThreader;
+  TMutex       fNotifyLck;
+  TCondition   fNotifyCnd;
+
+  Int_t        fLastMessage;
+
+  static Long_t fgMainThreadId;
+
+  ClassDef(AliDimIntNotifier, 0);
+};
+
+#endif
diff --git a/MONITOR/AliOnlineReco.cxx b/MONITOR/AliOnlineReco.cxx
new file mode 100644 (file)
index 0000000..b5f4553
--- /dev/null
@@ -0,0 +1,254 @@
+// @(#)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 "AliOnlineReco.h"
+#include "AliChildReaper.h"
+#include "AliDimIntNotifier.h"
+
+#include <TGListBox.h>
+#include <TGButton.h>
+
+#include <unistd.h>
+#include <signal.h>
+
+//______________________________________________________________________________
+// Full description of AliOnlineReco
+//
+
+ClassImp(AliOnlineReco)
+
+AliOnlineReco::AliOnlineReco() :
+  TGMainFrame(gClient->GetRoot(), 400, 400),
+
+  fRunList(0), fStartButt(0), fStopButt(0), fXyzzButt(0),
+
+  fSOR(new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS")),
+  fEOR(new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS")),
+
+  fTestMode(kFALSE)
+{
+  // GUI components.
+  fRunList = new TGListBox(this);
+  AddFrame(fRunList, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+
+  TGHorizontalFrame *hf = new TGHorizontalFrame(this, 1, 20);
+
+  fStartButt = new TGTextButton(hf, "Start");
+  hf->AddFrame(fStartButt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  fStartButt->Connect("Clicked()", "AliOnlineReco", this, "DoStart()");
+
+  fStopButt = new TGTextButton(hf, "Stop");
+  hf->AddFrame(fStopButt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  fStopButt->Connect("Clicked()", "AliOnlineReco", this, "DoStop()");
+
+  fXyzzButt = new TGTextButton(hf, "Exit");
+  hf->AddFrame(fXyzzButt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  fXyzzButt->Connect("Clicked()", "AliOnlineReco", this, "DoXyzz()");
+
+  AddFrame(hf, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
+
+  MapSubwindows();
+  Layout();
+  SetWindowName("Alice Online Reconstruction");
+
+  // DIM interface.
+  fSOR->Connect("DimMessage(Int_t)", "AliOnlineReco", this, "StartOfRun(Int_t)");
+  fEOR->Connect("DimMessage(Int_t)", "AliOnlineReco", this, "EndOfRun(Int_t)");
+
+  // Signal handlers
+  // ROOT's TSignalHAndler works not SIGCHLD ...
+  AliChildReaper::Instance()->Connect("ChildDeath(Int_t,Int_t)", "AliOnlineReco", this, "ChildDeath(Int_t,Int_t)");
+}
+
+AliOnlineReco::mIntInt_i AliOnlineReco::FindMapEntryByPid(Int_t pid)
+{
+  for (mIntInt_i i = fRun2PidMap.begin(); i != fRun2PidMap.end(); ++i)
+  {
+    if (i->second == pid)
+      return i;
+  }
+
+  return fRun2PidMap.end();
+}
+
+//------------------------------------------------------------------------------
+// Handlers of DIM signals.
+//------------------------------------------------------------------------------
+
+void AliOnlineReco::StartOfRun(Int_t run)
+{
+  mIntInt_i i = fRun2PidMap.find(run);
+  if (i == fRun2PidMap.end())
+  {
+    fRun2PidMap[run] = 0;
+    fRunList->AddEntrySort(TString::Format("%d", run), run);
+    fRunList->Layout();
+  }
+  else
+  {
+    Error("StartOfRun", "Run %d already registered.", run);
+  }
+}
+
+void AliOnlineReco::EndOfRun(Int_t run)
+{
+  mIntInt_i i = fRun2PidMap.find(run);
+  if (i != fRun2PidMap.end())
+  {
+    Int_t pid = i->second;
+    fRunList->RemoveEntry(run);
+    fRunList->Layout();
+    fRun2PidMap.erase(i);
+    if (pid)
+    {
+      // Send terminate signal to process ...
+      if (fTestMode)
+      {
+       kill(pid, SIGTERM);
+      }
+      else
+      {
+       // alieve will auto-destruct on SIGUSR1
+       kill(pid, SIGUSR1);
+      }
+    }
+    gClient->NeedRedraw(fRunList);
+  }
+  else
+  {
+    Error("EndOfRun", "Run %d not registered.", run);
+  }
+}
+
+//------------------------------------------------------------------------------
+// Handlers of OS signals.
+//------------------------------------------------------------------------------
+
+void AliOnlineReco::ChildDeath(Int_t pid, Int_t status)
+{
+  printf("child death pid=%d, statues=%d...\n", pid, status);
+
+  mIntInt_i i = FindMapEntryByPid(pid);
+  if (i != fRun2PidMap.end())
+  {
+    Int_t run = i->first;
+    fRunList->RemoveEntry(run);
+    if (status == 0)
+    {
+      fRunList->AddEntrySort(TString::Format("%-20d -- FINISHED", run), run);
+    }
+    else
+    {
+      fRunList->AddEntrySort(TString::Format("%-20d -- CRASHED [%d]", run, status), run);
+    }
+    fRunList->Layout();
+    i->second = 0;
+  }
+  else
+  {
+    Warning("ChildDeath", "Process with pid=%d not registered.", pid);
+  }
+}
+
+//------------------------------------------------------------------------------
+// Handlers of button signals.
+//------------------------------------------------------------------------------
+
+void AliOnlineReco::DoStart()
+{
+  Int_t run = fRunList->GetSelected();
+  mIntInt_i i = fRun2PidMap.find(run);
+
+  if (i == fRun2PidMap.end())
+  {
+    Error("DoStart", "no selection");
+    return;
+  }
+
+  if (i->second == 0)
+  {
+    pid_t pid = fork();
+    if (pid == -1)
+    {
+      perror("DoStart -- Fork failed");
+      return;
+    }
+
+    if (pid)
+    {
+      i->second = pid;
+      fRunList->RemoveEntry(run);
+      fRunList->AddEntrySort(TString::Format("%-20d -- RUNNING", run), run);
+      fRunList->Layout();
+    }
+    else
+    {
+      int s;
+      if (fTestMode)
+      {
+       s = execlp("alitestproc", "alitestproc", TString::Format("%d", run).Data(), (char*) 0);
+      }
+      else
+      {
+       // !!!! Cvetan, add proper args here ...
+       s = execlp("alieve", "alieve", TString::Format("%d", run).Data(), (char*) 0);
+      }
+
+      if (s == -1)
+      {
+       perror("execlp failed - this will not end well");
+       gSystem->Exit(1);
+      }
+    }
+  }
+  else
+  {
+    Error("DoStart", "Process already running.");
+  }
+}
+
+void AliOnlineReco::DoStop()
+{
+  Int_t run = fRunList->GetSelected();
+  mIntInt_i i = fRun2PidMap.find(run);
+
+  if (i == fRun2PidMap.end())
+  {
+    Error("DoStop", "no selection");
+    return;
+  }
+
+  Int_t pid = i->second;
+  if (pid)
+  {
+    if (fTestMode)
+    {
+      kill(pid, SIGTERM);
+    }
+    else
+    {
+      // alieve will auto-destruct on SIGUSR1
+      kill(pid, SIGUSR1);
+    }
+  }
+  else
+  {
+    Error("DoStop", "Process not running.");
+  }
+}
+
+void AliOnlineReco::DoXyzz()
+{
+  gSystem->ExitLoop();
+}
+
+void AliOnlineReco::CloseWindow()
+{
+  gSystem->ExitLoop();
+}
diff --git a/MONITOR/AliOnlineReco.h b/MONITOR/AliOnlineReco.h
new file mode 100644 (file)
index 0000000..85e612a
--- /dev/null
@@ -0,0 +1,89 @@
+// @(#)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.                                                 *
+ **************************************************************************/
+
+#ifndef AliOnlineReco_H
+#define AliOnlineReco_H
+
+#include "TObject.h"
+#include <TGFrame.h>
+
+#include <map>
+
+class AliDimIntNotifier;
+
+class TGTextButton;
+class TGListBox;
+
+//______________________________________________________________________________
+// Short description of AliOnlineReco
+//
+
+
+class AliOnlineReco : public TGMainFrame
+{
+public:
+  AliOnlineReco();
+  virtual ~AliOnlineReco() {}
+
+  AliDimIntNotifier* GetSOR() const { return fSOR; }
+  AliDimIntNotifier* GetEOR() const { return fEOR; }
+
+  void SetTestMode() { fTestMode = kTRUE; }
+
+  //------------------------------------------------------------------------------
+  // Handlers of DIM signals.
+  //------------------------------------------------------------------------------
+
+  void StartOfRun(Int_t run);
+  void EndOfRun(Int_t run);
+
+  //------------------------------------------------------------------------------
+  // Handlers of OS signals.
+  //------------------------------------------------------------------------------
+
+  void ChildDeath(Int_t pid, Int_t status);
+
+  //------------------------------------------------------------------------------
+  // Handlers of button signals.
+  //------------------------------------------------------------------------------
+
+  void DoStart();
+  void DoStop();
+  void DoXyzz();
+
+  virtual void CloseWindow();
+
+private:
+  AliOnlineReco(const AliOnlineReco&);            // Not implemented
+  AliOnlineReco& operator=(const AliOnlineReco&); // Not implemented
+
+  // GUI components.
+  TGListBox     *fRunList;
+  TGTextButton  *fStartButt;
+  TGTextButton  *fStopButt;
+  TGTextButton  *fXyzzButt;
+
+  // DIM interface. Could do without ...
+  AliDimIntNotifier *fSOR;
+  AliDimIntNotifier *fEOR;
+
+  // Run-state, process mngmnt
+  typedef std::map<Int_t, Int_t> mIntInt_t; // value should be struct { pid, state, ... };
+  typedef mIntInt_t::iterator    mIntInt_i;
+
+  mIntInt_t      fRun2PidMap;
+
+  Bool_t         fTestMode;
+
+  mIntInt_i FindMapEntryByPid(Int_t pid);
+
+  ClassDef(AliOnlineReco, 0);
+};
+
+#endif
diff --git a/MONITOR/AliTestChildProc.cxx b/MONITOR/AliTestChildProc.cxx
new file mode 100644 (file)
index 0000000..ea1005b
--- /dev/null
@@ -0,0 +1,68 @@
+// @(#)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 "AliTestChildProc.h"
+
+#include <TGButton.h>
+
+#include <TSystem.h>
+
+#include <cstdio>
+#include <cstdlib>
+
+
+//==============================================================================
+// AliTestChildProc
+//==============================================================================
+
+//______________________________________________________________________________
+// Full description of AliTestChildProc
+//
+
+ClassImp(AliTestChildProc)
+
+AliTestChildProc::AliTestChildProc(Int_t run) :
+  TGMainFrame(gClient->GetRoot(), 400, 200)
+{
+  TGTextButton *b;
+
+  b = new TGTextButton(this, "Exit");
+  AddFrame(b, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  b->Connect("Clicked()", "AliTestChildProc", this, "DoExit()");
+
+  b = new TGTextButton(this, "Crash");
+  AddFrame(b, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  b->Connect("Clicked()", "AliTestChildProc", this, "DoCrash()");
+
+  b = new TGTextButton(this, "Xyzz");
+  AddFrame(b, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
+  b->Connect("Clicked()", "AliTestChildProc", this, "DoXyzz()");
+
+  MapSubwindows();
+  Layout();
+  SetWindowName(TString::Format("Test window %d", run));
+}
+
+void AliTestChildProc::DoExit()
+{
+  printf("doing exit ...\n");
+  gSystem->ExitLoop();
+}
+
+void AliTestChildProc::DoCrash()
+{
+  printf("doing crash ...\n");
+  TObject *p = 0;
+  p->Dump();
+}
+
+void AliTestChildProc::DoXyzz()
+{
+  printf("doing xyzz ...\n");
+}
diff --git a/MONITOR/AliTestChildProc.h b/MONITOR/AliTestChildProc.h
new file mode 100644 (file)
index 0000000..d4bb2cd
--- /dev/null
@@ -0,0 +1,36 @@
+// @(#)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.                                                 *
+ **************************************************************************/
+
+#ifndef AliTestChildProc_H
+#define AliTestChildProc_H
+
+#include <TGFrame.h>
+
+//______________________________________________________________________________
+// Short description of AliTestChildProc
+//
+
+class AliTestChildProc : public TGMainFrame
+{
+
+public:
+  AliTestChildProc(Int_t run);
+
+  void DoExit();
+  void DoCrash();
+  void DoXyzz();
+  
+private:
+  AliTestChildProc(const AliTestChildProc&);            // Not implemented
+  AliTestChildProc& operator=(const AliTestChildProc&); // Not implemented
+
+  ClassDef(AliTestChildProc, 0);
+};
+
+#endif
index 93b6dbd..46e60d5 100644 (file)
 #pragma link C++ class  AliQADirListItem+;
 #pragma link C++ class  AliOnlineRecoTrigger+;
 #pragma link C++ class  TerminateSignalHandler+;
-#endif
 
+#pragma link C++ class AliDimIntNotifier+;
+#pragma link C++ class AliChildReaper+;
+#pragma link C++ class AliOnlineReco+;
+#pragma link C++ class AliTestChildProc+;
+
+#endif
diff --git a/MONITOR/alionlinemonitor.cxx b/MONITOR/alionlinemonitor.cxx
new file mode 100644 (file)
index 0000000..34a38bc
--- /dev/null
@@ -0,0 +1,31 @@
+#include "AliDimIntNotifier.h"
+#include "AliOnlineReco.h"
+
+#include <TRint.h>
+
+int main(int argc, char **argv)
+{
+  AliDimIntNotifier::SetMainThreadId();
+
+  Bool_t test = argc > 1 && strcmp("-test", argv[1]) == 0;
+
+  TRint app("App", &argc, argv);
+
+  AliOnlineReco *win = new AliOnlineReco;
+  win->MapWindow();
+
+  if (test)
+  {
+    win->SetTestMode();
+
+    win->GetSOR()->infoHandlerTest(2214);
+    win->GetSOR()->infoHandlerTest(2215);
+    win->GetSOR()->infoHandlerTest(2224);
+    win->GetSOR()->infoHandlerTest(2244);
+
+    printf("win = (AliOnlineReco*) 0x%lx\n", (unsigned long)win);
+  }
+
+  app.Run(kTRUE);
+  return 0;
+}
diff --git a/MONITOR/alitestproc.cxx b/MONITOR/alitestproc.cxx
new file mode 100644 (file)
index 0000000..bdbb255
--- /dev/null
@@ -0,0 +1,22 @@
+#include "AliTestChildProc.h"
+
+#include <TRint.h>
+#include <TSystem.h>
+
+#include <TGFrame.h>
+
+#include <cstdlib>
+
+int main(int argc, char **argv)
+{
+  // Crash on SEGV.
+  gSystem->IgnoreSignal(kSigSegmentationViolation, true);
+
+  TRint app("App", &argc, argv);
+
+  TGMainFrame* mf = new AliTestChildProc(atoi(argv[1]));
+  mf->MapWindow();
+
+  app.Run(kTRUE);
+  return 0;
+}
diff --git a/MONITOR/binalionlinemonitor.pkg b/MONITOR/binalionlinemonitor.pkg
new file mode 100644 (file)
index 0000000..52d6513
--- /dev/null
@@ -0,0 +1,30 @@
+#-*- Mode: Makefile -*-
+
+SRCS  := alionlinemonitor.cxx
+
+EINCLUDE+= TPC ITS RAW
+
+PACKBLIBS := $(ROOTCLIBS) $(SYSLIBS)
+
+ELIBS:= MONITOR STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec ITSbase ITSsim ITSrec HLTbase MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
+ifdef DATE_ROOT
+
+PACKBLIBS += $(shell date-config --monitorlibs)
+ELIBSDIR:=
+
+EINCLUDE+= ${DATE_COMMON_DEFS} ${DATE_MONITOR_DIR}
+
+ifdef DIMDIR
+
+EINCLUDE += $(DIMDIR)/dim
+ELIBS += dim
+ELIBSDIR += $(DIMDIR)/$(ALICE_TARGET)
+
+endif
+
+endif
+
+ifneq (,$(findstring macosx,$(ALICE_TARGET)))
+PACKLDFLAGS:=$(LDFLAGS) $(ELIBS:%=-Wl,-u,_G__cpp_setupG__%)
+endif
diff --git a/MONITOR/binalitestproc.pkg b/MONITOR/binalitestproc.pkg
new file mode 100644 (file)
index 0000000..f698876
--- /dev/null
@@ -0,0 +1,30 @@
+#-*- Mode: Makefile -*-
+
+SRCS  := alitestproc.cxx
+
+EINCLUDE+= TPC ITS RAW
+
+PACKBLIBS := $(ROOTCLIBS) $(SYSLIBS)
+
+ELIBS:= MONITOR STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec ITSbase ITSsim ITSrec HLTbase MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
+ifdef DATE_ROOT
+
+PACKBLIBS += $(shell date-config --monitorlibs)
+ELIBSDIR:=
+
+EINCLUDE+= ${DATE_COMMON_DEFS} ${DATE_MONITOR_DIR}
+
+ifdef DIMDIR
+
+EINCLUDE += $(DIMDIR)/dim
+ELIBS += dim
+ELIBSDIR += $(DIMDIR)/$(ALICE_TARGET)
+
+endif
+
+endif
+
+ifneq (,$(findstring macosx,$(ALICE_TARGET)))
+PACKLDFLAGS:=$(LDFLAGS) $(ELIBS:%=-Wl,-u,_G__cpp_setupG__%)
+endif
index 6e1cad8..d4f0476 100644 (file)
@@ -6,6 +6,8 @@ EINCLUDE+= TPC ITS RAW
 
 PACKBLIBS := $(ROOTCLIBS) $(SYSLIBS)
 
+ELIBS:= MONITOR
+
 SRCS += root2date.cxx
 ELIBSDIR:=
 ELIBS:=STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec HLTbase ITSbase ITSsim ITSrec MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
index abea878..43f2f11 100644 (file)
@@ -7,13 +7,23 @@ EINCLUDE+= TPC ITS RAW
 
 PACKBLIBS := $(ROOTCLIBS) $(SYSLIBS)
 
+ELIBS:= MONITOR STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec ITSbase ITSsim ITSrec HLTbase MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
 ifdef DATE_ROOT
 
 PACKBLIBS += $(shell date-config --monitorlibs)
 ELIBSDIR:=
-ELIBS:=STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec ITSbase ITSsim ITSrec HLTbase MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
 EINCLUDE+= ${DATE_COMMON_DEFS} ${DATE_MONITOR_DIR}
 
+ifdef DIMDIR
+
+EINCLUDE += $(DIMDIR)/dim
+ELIBS += dim
+ELIBSDIR += $(DIMDIR)/$(ALICE_TARGET)
+
+endif
+
 endif
 
 ifneq (,$(findstring macosx,$(ALICE_TARGET)))
index b86f693..8bf1660 100644 (file)
@@ -7,13 +7,23 @@ EINCLUDE+= TPC ITS RAW
 
 PACKBLIBS := $(ROOTCLIBS) $(SYSLIBS)
 
+ELIBS:= MONITOR STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec HLTbase ITSbase ITSsim ITSrec MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
 ifdef DATE_ROOT
 
 PACKBLIBS += $(shell date-config --monitorlibs)
 ELIBSDIR:=
-ELIBS:=STEERBase ESD AOD CDB STEER RAWDatabase RAWDatarec RAWDatasim TPCbase TPCsim TPCrec HLTbase ITSbase ITSsim ITSrec MUONsim MUONrec MUONbase MUONgeometry MUONraw MUONcalib MUONmapping MUONtrigger MUONevaluation MUONcore
+
 EINCLUDE+= ${DATE_COMMON_DEFS} ${DATE_MONITOR_DIR}
 
+ifdef DIMDIR
+
+EINCLUDE += $(DIMDIR)/dim
+ELIBS += dim
+ELIBSDIR += $(DIMDIR)/$(ALICE_TARGET)
+
+endif
+
 endif
 
 ifneq (,$(findstring macosx,$(ALICE_TARGET)))
index 8678951..0494c1c 100644 (file)
@@ -8,7 +8,8 @@ SRCS:=  AliMonitorPlot.cxx AliMonitorHisto.cxx AliMonitorTrend.cxx \
        AliMonitorProcess.cxx AliMonitorControl.cxx \
        AliMonitorDialog.cxx AliMonitorClient.cxx \
        AliQAHistNavigator.cxx AliQAHistViewer.cxx \
-       AliOnlineRecoTrigger.cxx
+       AliOnlineRecoTrigger.cxx \
+       AliDimIntNotifier.cxx AliChildReaper.cxx AliOnlineReco.cxx AliTestChildProc.cxx
 
 CINTHDRS:= $(SRCS:.cxx=.h)