Index: display/DelphesEventDisplay.cc
===================================================================
--- display/DelphesEventDisplay.cc	(revision 4fd37d472d721c03f7ff5fd19c9afbb954188152)
+++ display/DelphesEventDisplay.cc	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
@@ -145,5 +145,8 @@
    }
 
+   // the GUI: control panel, summary tab
    make_gui();
+
+   //ready...
    load_event();
    gEve->Redraw3D(kTRUE);   
@@ -299,4 +302,13 @@
    browser->StopEmbedding();
    browser->SetTabTitle("Event Control", 0);
-}
-
+
+   // the summary tab
+   htmlSummary_ = new DelphesHtmlSummary("Delphes Event Display Summary Table");
+   TEveWindowSlot* slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
+   gHtml_ = new TGHtml(0, 100, 100);
+   TEveWindowFrame *wf = slot->MakeFrame(gHtml_);
+   gHtml_->MapSubwindows();
+   wf->SetElementName("Summary");
+
+}
+
Index: display/DelphesEventDisplay.h
===================================================================
--- display/DelphesEventDisplay.h	(revision 4fd37d472d721c03f7ff5fd19c9afbb954188152)
+++ display/DelphesEventDisplay.h	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
@@ -25,6 +25,8 @@
 #include "display/DelphesDisplay.h"
 #include "display/Delphes3DGeometry.h"
+#include "display/DelphesHtmlSummary.h"
 #include "TChain.h"
 #include "TAxis.h"
+#include "TGHtml.h"
 #include "TClonesArray.h"
 
@@ -56,4 +58,6 @@
     std::vector<DelphesBranchBase*> elements_;
     DelphesDisplay *delphesDisplay_;
+    DelphesHtmlSummary *htmlSummary_;
+    TGHtml *gHtml_;
 
     // gui controls
Index: display/DelphesHtmlSummary.cc
===================================================================
--- display/DelphesHtmlSummary.cc	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
+++ display/DelphesHtmlSummary.cc	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
@@ -0,0 +1,276 @@
+#include "display/DelphesHtmlSummary.h"
+#include "TGHtml.h"
+#include "TEveElement.h"
+#include "TEveManager.h"
+#include "TEveEventManager.h"
+#include "TEvePointSet.h"
+#include "TEveTrack.h"
+
+//==============================================================================
+
+DelphesHtmlSummary *fgDelphesHtmlSummary = 0;
+TGHtml      *fgHtml        = 0;
+
+//==============================================================================
+
+//______________________________________________________________________________
+DelphesHtmlObjTable::DelphesHtmlObjTable(const char *name, Int_t nfields, Int_t nvals, Bool_t exp) : 
+   fName(name), fNValues(nvals), fNFields(nfields), fExpand(exp)
+{
+   // Constructor.
+
+   fValues = new TArrayF[fNFields];
+   for (int i=0;i<fNFields;i++)
+      fValues[i].Set(nvals);
+   fLabels = new TString[fNFields];
+}
+
+//______________________________________________________________________________
+DelphesHtmlObjTable::~DelphesHtmlObjTable()
+{
+   // Destructor.
+
+   delete [] fValues;
+   delete [] fLabels;
+}
+
+//______________________________________________________________________________
+void DelphesHtmlObjTable::Build()
+{
+   // Build HTML code.
+
+   fHtml = "<table width=100% border=1 cellspacing=0 cellpadding=0 bgcolor=f0f0f0> ",
+
+   BuildTitle();
+   if (fExpand && (fNFields > 0) && (fNValues > 0)) {
+      BuildLabels();
+      BuildTable();
+   }
+
+   fHtml += "</table>";
+}
+
+//______________________________________________________________________________
+void DelphesHtmlObjTable::BuildTitle()
+{
+   // Build table title.
+   
+   fHtml += "<tr><td colspan=";
+   fHtml += Form("%d>", fNFields+1);
+   fHtml += "<table width=100% border=0 cellspacing=2 cellpadding=0 bgcolor=6e6ea0>";
+   fHtml += "<tr><td align=left>";
+   fHtml += "<font face=Verdana size=3 color=ffffff><b><i>";
+   fHtml += fName;
+   fHtml += "</i></b></font></td>";
+   fHtml += "<td>";
+   fHtml += "<td align=right> ";
+   fHtml += "<font face=Verdana size=3 color=ffffff><b><i>";
+   fHtml += Form("Size = %d", fNValues);
+   fHtml += "</i></b></font></td></tr>";
+   fHtml += "</table>";
+   fHtml += "</td></tr>";
+}
+
+//______________________________________________________________________________
+void DelphesHtmlObjTable::BuildLabels()
+{
+   // Build table labels.
+
+   Int_t i;
+   fHtml += "<tr bgcolor=c0c0ff>";
+   fHtml += "<th> </th>"; // for the check boxes
+   for (i=0;i<fNFields;i++) {
+      fHtml += "<th> ";
+      fHtml += fLabels[i];
+      fHtml += " </th>"; // for the check boxes
+   }
+   fHtml += "</tr>";
+}
+
+//______________________________________________________________________________
+void DelphesHtmlObjTable::BuildTable()
+{
+   // Build part of table with values.
+
+   for (int i = 0; i < fNValues; i++) {
+      if (i%2)
+         fHtml += "<tr bgcolor=e0e0ff>";
+      else
+         fHtml += "<tr bgcolor=ffffff>";
+      
+      TString name = fName;
+      name.ReplaceAll(" ", "_");
+      // checkboxes
+      fHtml += "<td bgcolor=d0d0ff align=\"center\">";
+      fHtml += "<input type=\"checkbox\" name=\"";
+      fHtml += name;
+      fHtml += Form("[%d]\">",i);
+      fHtml += "</td>";
+
+      for (int j = 0; j < fNFields; j++) {
+         fHtml += "<td width=";
+         fHtml += Form("%d%%", 100/fNFields);
+         fHtml += " align=\"center\"";
+         fHtml += ">";
+         fHtml += Form("%1.4f", fValues[j][i]);
+         fHtml += "</td>";
+      }
+      fHtml += "</tr> ";
+   }
+}
+
+//______________________________________________________________________________
+DelphesHtmlSummary::DelphesHtmlSummary(const char *title) : fNTables(0), fTitle(title)
+{
+   // Constructor.
+
+   fObjTables = new TOrdCollection();
+}
+
+//______________________________________________________________________________
+DelphesHtmlSummary::~DelphesHtmlSummary()
+{
+   // Destructor.
+
+   Reset();
+}
+
+//______________________________________________________________________________
+DelphesHtmlObjTable *DelphesHtmlSummary::AddTable(const char *name, Int_t nfields, Int_t nvals,
+                                    Bool_t exp, Option_t *option)
+{
+   // Add a new table in our list of tables.
+
+   TString opt = option;
+   opt.ToLower();
+   DelphesHtmlObjTable *table = new DelphesHtmlObjTable(name, nfields, nvals, exp);
+   fNTables++;
+   if (opt.Contains("first"))
+      fObjTables->AddFirst(table);
+   else
+      fObjTables->Add(table);
+   return table;
+}
+
+//______________________________________________________________________________
+void DelphesHtmlSummary::Clear(Option_t *option)
+{
+   // Clear the table list.
+
+   if (option && option[0] == 'D')
+      fObjTables->Delete(option);
+   else
+      fObjTables->Clear(option);
+   fNTables = 0;
+}
+
+//______________________________________________________________________________
+void DelphesHtmlSummary::Reset(Option_t *)
+{
+   // Reset (delete) the table list;
+
+   delete fObjTables; fObjTables = 0;
+   fNTables = 0;
+}
+
+//______________________________________________________________________________
+void DelphesHtmlSummary::Build()
+{
+   // Build the summary.
+
+   MakeHeader();
+   for (int i=0;i<fNTables;i++) {
+      GetTable(i)->Build();
+      fHtml += GetTable(i)->Html();
+   }
+   MakeFooter();
+}
+
+//______________________________________________________________________________
+void DelphesHtmlSummary::MakeHeader()
+{
+   // Make HTML header.
+
+   fHeader  = "<html><head><title>";
+   fHeader += fTitle;
+   fHeader += "</title></head><body>";
+   fHeader += "<center><h2><font color=#2222ee><i>";
+   fHeader += fTitle;
+   fHeader += "</i></font></h2></center>";
+   fHtml    = fHeader;
+}
+
+//______________________________________________________________________________
+void DelphesHtmlSummary::MakeFooter()
+{
+   // Make HTML footer.
+
+   fFooter  = "<br><p><br><center><strong><font size=2 color=#2222ee>";
+   fFooter += "Example of using Html widget to display tabular data";
+   fFooter += "<br>";
+   fFooter += "(c) 2007-2010 Bertrand Bellenot";
+   fFooter += "</font></strong></center></body></html>";  
+   fHtml   += fFooter;
+}
+
+//==============================================================================
+
+//______________________________________________________________________________
+void update_html_summary()
+{
+   // Update summary of current event.
+
+   TEveElement::List_i i;
+   TEveElement::List_i j;
+   Int_t k;
+   TEveElement *el;
+   DelphesHtmlObjTable *table;
+   TEveEventManager *mgr = gEve ? gEve->GetCurrentEvent() : 0;
+   if (mgr) {
+      fgDelphesHtmlSummary->Clear("D");
+      for (i=mgr->BeginChildren(); i!=mgr->EndChildren(); ++i) {
+         el = ((TEveElement*)(*i));
+         if (el->IsA() == TEvePointSet::Class()) {
+            TEvePointSet *ps = (TEvePointSet *)el;
+            TString ename  = ps->GetElementName();
+            TString etitle = ps->GetElementTitle();
+            if (ename.First('\'') != kNPOS)
+               ename.Remove(ename.First('\''));
+            etitle.Remove(0, 2);
+            Int_t nel = atoi(etitle.Data());
+            table = fgDelphesHtmlSummary->AddTable(ename, 0, nel);
+         }
+         else if (el->IsA() == TEveTrackList::Class()) {
+            TEveTrackList *tracks = (TEveTrackList *)el;
+            TString ename  = tracks->GetElementName();
+            if (ename.First('\'') != kNPOS)
+               ename.Remove(ename.First('\''));
+            table = fgDelphesHtmlSummary->AddTable(ename.Data(), 5, 
+                     tracks->NumChildren(), kTRUE, "first");
+            table->SetLabel(0, "Momentum");
+            table->SetLabel(1, "P_t");
+            table->SetLabel(2, "Phi");
+            table->SetLabel(3, "Theta");
+            table->SetLabel(4, "Eta");
+            k=0;
+            for (j=tracks->BeginChildren(); j!=tracks->EndChildren(); ++j) {
+               Float_t p     = ((TEveTrack*)(*j))->GetMomentum().Mag();
+               table->SetValue(0, k, p);
+               Float_t pt    = ((TEveTrack*)(*j))->GetMomentum().Perp();
+               table->SetValue(1, k, pt);
+               Float_t phi   = ((TEveTrack*)(*j))->GetMomentum().Phi();
+               table->SetValue(2, k, phi);
+               Float_t theta = ((TEveTrack*)(*j))->GetMomentum().Theta();
+               table->SetValue(3, k, theta);
+               Float_t eta   = ((TEveTrack*)(*j))->GetMomentum().Eta();
+               table->SetValue(4, k, eta);
+               ++k;
+            }
+         }
+      }
+      fgDelphesHtmlSummary->Build();
+      fgHtml->Clear();
+      fgHtml->ParseText((char*)fgDelphesHtmlSummary->Html().Data());
+      fgHtml->Layout();
+   }
+}
Index: display/DelphesHtmlSummary.h
===================================================================
--- display/DelphesHtmlSummary.h	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
+++ display/DelphesHtmlSummary.h	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
@@ -0,0 +1,70 @@
+// Delphes HTML table for the event display. 
+// Based on the ROOT example "alice_esd_html_summary.C"
+
+#ifndef DelphesHtmlSummary_h
+#define DelphesHtmlSummary_h 
+
+#include "TArrayF.h"
+#include "TOrdCollection.h"
+
+
+class DelphesHtmlObjTable : public TObject
+{
+public:                     // make them public for shorter code
+
+   TString   fName;
+   Int_t     fNValues;      // number of values
+   Int_t     fNFields;      // number of fields
+   TArrayF  *fValues;
+   TString  *fLabels;
+   Bool_t    fExpand;
+
+   TString   fHtml;         // HTML output code
+
+   void Build();
+   void BuildTitle();
+   void BuildLabels();
+   void BuildTable();
+
+public:
+   DelphesHtmlObjTable(const char *name, Int_t nfields, Int_t nvals, Bool_t exp=kTRUE);
+   virtual ~DelphesHtmlObjTable();
+
+   void     SetLabel(Int_t col, const char *label) { fLabels[col] = label; }
+   void     SetValue(Int_t col, Int_t row, Float_t val) { fValues[col].SetAt(val, row); }
+   TString  Html() const { return fHtml; }
+
+   ClassDef(DelphesHtmlObjTable, 0);
+};
+
+//==============================================================================
+
+class DelphesHtmlSummary
+{
+public:                           // make them public for shorter code
+   Int_t           fNTables;
+   TOrdCollection *fObjTables;    // ->array of object tables
+   TString         fHtml;         // output HTML string
+   TString         fTitle;        // page title
+   TString         fHeader;       // HTML header
+   TString         fFooter;       // HTML footer
+
+   void     MakeHeader();
+   void     MakeFooter();
+
+public:
+   DelphesHtmlSummary(const char *title);
+   virtual ~DelphesHtmlSummary();
+
+   DelphesHtmlObjTable  *AddTable(const char *name, Int_t nfields, Int_t nvals, 
+                           Bool_t exp=kTRUE, Option_t *opt="");
+   DelphesHtmlObjTable  *GetTable(Int_t at) const { return (DelphesHtmlObjTable *)fObjTables->At(at); }
+   void           Build();
+   void           Clear(Option_t *option="");
+   void           Reset(Option_t *option="");
+   TString        Html() const { return fHtml; }
+
+   ClassDef(DelphesHtmlSummary, 0);
+};
+
+#endif // DelphesHtmlSummary_h
Index: display/DisplayLinkDef.h
===================================================================
--- display/DisplayLinkDef.h	(revision 4fd37d472d721c03f7ff5fd19c9afbb954188152)
+++ display/DisplayLinkDef.h	(revision 5fbcfe80e40de6add76bb12b8e0daf48a1c4dc7d)
@@ -35,4 +35,5 @@
 #include "display/Delphes3DGeometry.h"
 #include "display/DelphesEventDisplay.h"
+#include "display/DelphesHtmlSummary.h"
 
 #ifdef __CINT__
@@ -49,4 +50,6 @@
 #pragma link C++ class Delphes3DGeometry;
 #pragma link C++ class DelphesEventDisplay;
+#pragma link C++ class DelphesHtmlObjTable;
+#pragma link C++ class DelphesHtmlSummary;
 
 #endif
