]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
new track visualization/analysis framework (Ben Hess)
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 2 Sep 2008 15:59:08 +0000 (15:59 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 2 Sep 2008 15:59:08 +0000 (15:59 +0000)
EVE/EveDet/AliEveTRDTrackList.cxx [new file with mode: 0644]
EVE/EveDet/AliEveTRDTrackList.h [new file with mode: 0644]
EVE/EveDet/AliEveTRDTrackListEditor.cxx [new file with mode: 0644]
EVE/EveDet/AliEveTRDTrackListEditor.h [new file with mode: 0644]
EVE/EveDet/LinkDef.h

diff --git a/EVE/EveDet/AliEveTRDTrackList.cxx b/EVE/EveDet/AliEveTRDTrackList.cxx
new file mode 100644 (file)
index 0000000..1a661db
--- /dev/null
@@ -0,0 +1,15 @@
+#include "AliEveTRDTrackList.h"
+
+ClassImp(AliEveTRDTrackList)
+
+///////////////////////////////////////////////////////////
+/////////////   AliEveTRDTrackList ////////////////////////
+///////////////////////////////////////////////////////////
+AliEveTRDTrackList::AliEveTRDTrackList(const Text_t* n, const Text_t* t, Bool_t doColor):
+  TEveElementList(n, t, doColor),
+  macroList(0)
+{
+  SetChildClass(AliEveTRDTrack::Class());
+
+  macroList = new TList();
+}
diff --git a/EVE/EveDet/AliEveTRDTrackList.h b/EVE/EveDet/AliEveTRDTrackList.h
new file mode 100644 (file)
index 0000000..c5a1276
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef AliEveTRDTrackList_H
+#define AliEveTRDTrackList_H
+
+#include <TEveElement.h>
+#include <EveDet/AliEveTRDData.h>
+#include <TList.h>
+
+
+class AliEveTRDTrackList: public TEveElementList
+{
+  friend class AliEveTRDTrackListEditor;
+
+public:
+  AliEveTRDTrackList(const Text_t* n = "AliEveTRDTrackList", const Text_t* t = "", Bool_t doColor = kFALSE);
+protected:
+  TList* macroList; // List of macros
+
+private:
+  AliEveTRDTrackList(const AliEveTRDTrackList&);            // Not implemented
+  AliEveTRDTrackList& operator=(const AliEveTRDTrackList&); // Not implemented
+
+  ClassDef(AliEveTRDTrackList, 0); // Class containing a list of tracks
+};
+
+#endif
diff --git a/EVE/EveDet/AliEveTRDTrackListEditor.cxx b/EVE/EveDet/AliEveTRDTrackListEditor.cxx
new file mode 100644 (file)
index 0000000..d63464a
--- /dev/null
@@ -0,0 +1,262 @@
+#include "AliEveTRDTrackListEditor.h"
+
+ClassImp(AliEveTRDTrackListEditor)
+
+///////////////////////////////////////////////////////////
+/////////////   AliEveTRDTrackListEditor //////////////////
+///////////////////////////////////////////////////////////
+AliEveTRDTrackListEditor::AliEveTRDTrackListEditor(const TGWindow* p, Int_t width, Int_t height,
+                                                  UInt_t options, Pixel_t back) :
+  TGedFrame(p, width, height, options, back),
+  fM(0),
+  fMainFrame(0),
+  fMemberFrame(0),
+  fBrowseFrame(0),
+  bBrowse(0),
+  bApplyMacros(0),
+  bRemoveMacros(0),
+  teField(0),
+  tvMemberList(0),
+  tlMacroList(0),
+  fileInfo(0),
+  fileTypes(0)
+{
+  // Constructor.
+  fMainFrame = CreateEditorTabSubFrame("Apply macros");
+  
+  // Functionality for adding macros 
+  fBrowseFrame = new TGHorizontalFrame(fMainFrame);
+
+  teField = new TGTextEntry(fBrowseFrame);
+  teField->Connect("ReturnPressed()","AliEveTRDTrackListEditor", this, "HandleMacroPathSet()"); 
+  fBrowseFrame->AddFrame(teField);
+  
+  bBrowse = new TGTextButton(fBrowseFrame, "Browse");
+  bBrowse->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "BrowseMacros()");
+  fBrowseFrame->AddFrame(bBrowse);
+  fMainFrame->AddFrame(fBrowseFrame);
+
+  tlMacroList = new TGListBox(fMainFrame);
+  tlMacroList->Resize(194, 120);
+  tlMacroList->SetMultipleSelections(kTRUE);
+  fMainFrame->AddFrame(tlMacroList);
+
+  bApplyMacros = new TGTextButton(fMainFrame, "Apply selected macro(s)");
+  bApplyMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "ApplyMacros()");
+  bApplyMacros->SetRightMargin(12);
+  fMainFrame->AddFrame(bApplyMacros);
+
+  bRemoveMacros = new TGTextButton(fMainFrame, "Remove selected macro(s)");
+  bRemoveMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "RemoveMacros()");
+  fMainFrame->AddFrame(bRemoveMacros);
+
+  // List members
+  fMemberFrame = CreateEditorTabSubFrame("Members");
+  
+  tvMemberList = new TGTextView(fMemberFrame, 220, 120, "");
+  fMemberFrame->AddFrame(tvMemberList);
+
+  // Set up file dialog
+  fileInfo = new TGFileInfo();
+  fileInfo->SetMultipleSelection(kTRUE);
+
+  fileTypes = new Char_t*[6];
+  fileTypes[0] = "All files"; fileTypes[1] = "*";
+  fileTypes[2] = "ROOT macros"; fileTypes[3] = "*.C";
+  fileTypes[4] = 0; fileTypes[5] = 0;
+  fileInfo->fFileTypes = (const Char_t**)fileTypes;
+  fileInfo->fFileTypeIdx = 2;
+  fileInfo->fMultipleSelection = kTRUE;
+}
+
+void AliEveTRDTrackListEditor::AddMacro(const Char_t* pathname)
+{
+  // Only add macro, if it is not already in the list
+  if (fM->macroList->FindObject(pathname) == 0)
+  {
+      fM->macroList->Add(new TObjString(pathname));
+      fM->macroList->Sort();
+
+      UpdateMacroList();
+  }
+  else
+  {
+      new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Warning", "Macro is already in list (won't be added again)!",
+                   kMBIconExclamation, kMBOk);
+  }
+}
+
+void AliEveTRDTrackListEditor::ApplyMacros()
+{
+  TList* iterator = new TList();
+  //TEveMacro* macro = NULL;
+  Char_t name[100];
+  Char_t path[300];
+  Char_t pathname[400];
+  Char_t cmd[430];
+
+  memset(name, '\0', sizeof(Char_t) * 100);
+  memset(path, '\0', sizeof(Char_t) * 300);
+  memset(pathname, '\0', sizeof(Char_t) * 400);
+  memset(cmd, '\0', sizeof(Char_t) * 430);
+
+  tlMacroList->GetSelectedEntries(iterator);
+
+  // Make tracklist availabe
+  fM->ExportToCINT("trackList");
+  for (Int_t i = 0; i < iterator->GetEntries(); i++)
+  {
+      // Extract path and name -> Make pathname
+      sscanf(iterator->At(i)->GetTitle(), "%s (Path: %s)", name, path);
+      // Delete ")" at the end of path
+      path[strlen(path) - 1] = '\0';
+      sprintf(pathname, "%s/%s", path, name);
+
+      TString sPathname(pathname);
+      gSystem->ExpandPathName(sPathname);
+      sprintf(cmd, ".x %s(trackList)", pathname);
+      gROOT->ProcessLine(cmd);
+      // Load and execute macro
+      //macro = new TEveMacro(sPathname);
+
+      //macro->Exec("trackList");
+      //if (macro != NULL)    delete macro;
+  }
+
+  if (iterator != NULL) delete iterator;    
+}
+/*
+void AliEveTRDTrackListEditor::BrowseMacros()
+{
+  new TGFileDialog(gClient->GetRoot(), new TGWindow(), kFDOpen, fileInfo);
+  
+  if (fileInfo->fFilename != 0 && fileInfo->fIniDir != 0)
+  {                            
+    Char_t pathname[300];
+    
+    // Extract filename
+    Char_t* name = strrchr(fileInfo->fFilename, '/');
+    // Delete '"' at the end
+    name[strlen(name)] = '\0';
+    sprintf(pathname, "%s (Path: %s)", name + 1, fileInfo->fIniDir);
+  
+    AddMacro(pathname); 
+  }
+}
+*/
+
+void AliEveTRDTrackListEditor::BrowseMacros()
+{
+  new TGFileDialog(gClient->GetRoot(), GetMainFrame(), kFDOpen, fileInfo);
+  
+  if (fileInfo->fIniDir != 0)
+  {                            
+    Char_t pathname[300];
+    
+    // Extract filenames
+    TObject* iter = fileInfo->fFileNamesList->First();
+    Char_t* name = 0;
+
+    while (iter != 0)
+    {
+      name = strrchr(iter->GetName(), '/');
+      // Delete '"' at the end
+      name[strlen(name)] = '\0';
+      sprintf(pathname, "%s (Path: %s)", name + 1, fileInfo->fIniDir);
+  
+      AddMacro(pathname); 
+      iter = (TObjString*)fileInfo->fFileNamesList->After(iter);
+    }
+  }
+}
+
+void AliEveTRDTrackListEditor::HandleMacroPathSet()
+{
+  if (strlen(teField->GetText()) != 0)
+  {                            
+    // Check if file exists
+    FILE* fp = NULL;
+
+    fp = fopen(teField->GetText(), "rb");
+    if (fp != NULL)
+    {
+        fclose(fp);
+        Char_t pathname[300];
+    
+        // Extract filename
+        Char_t* name = strrchr(teField->GetText(), '/');
+
+        // Current path
+        if (name == NULL)
+        {
+            sprintf(pathname, "%s (Path: .)", teField->GetText());
+        }
+        // Different path
+        else
+        {
+            // Extract path
+            Char_t* path = new Char_t[240];
+            memset(path, '\0', sizeof(Char_t) * 240);
+            strncpy(path, teField->GetText(), strlen(teField->GetText()) - strlen(name));
+            sprintf(pathname, "%s (Path: %s)", name + 1, path);
+
+            if (path != NULL)  delete path;
+        }
+
+        AddMacro(pathname);   
+    }
+    else
+    {
+        new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", 
+                     "File does not exist or you do not have read permission!", kMBIconExclamation, kMBOk);
+    }
+  }
+}
+
+void AliEveTRDTrackListEditor::RemoveMacros()
+{
+  TList* iterator = new TList();
+  
+  tlMacroList->GetSelectedEntries(iterator);
+
+  for (Int_t i = 0; i < iterator->GetEntries(); i++)
+  {
+      fM->macroList->Remove(fM->macroList->FindObject(iterator->At(i)->GetTitle()));
+  }
+
+  UpdateMacroList();
+}
+
+void AliEveTRDTrackListEditor::SetModel(TObject* obj)
+{
+  // Set model object.
+  fM = dynamic_cast<AliEveTRDTrackList*>(obj);
+
+  // Add members to a list
+  tvMemberList->Clear();
+  for (TEveElement::List_i iterator = fM->BeginChildren(); iterator != fM->EndChildren(); ++iterator)
+  {
+    tvMemberList->AddLineFast(((AliEveTRDTrack*)(*iterator))->GetName());
+  }  
+  tvMemberList->ShowTop();
+  tvMemberList->Update();
+
+  UpdateMacroList();
+}
+
+void AliEveTRDTrackListEditor::UpdateMacroList()
+{
+  tlMacroList->RemoveAll();
+  TObjString* iter = (TObjString*)fM->macroList->First();
+
+  while (iter != 0)
+  {
+    tlMacroList->AddEntry(iter->GetName(), -1);
+    iter = (TObjString*)fM->macroList->After(iter);
+  }
+
+  tlMacroList->SortByName();
+}
diff --git a/EVE/EveDet/AliEveTRDTrackListEditor.h b/EVE/EveDet/AliEveTRDTrackListEditor.h
new file mode 100644 (file)
index 0000000..c3ba055
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef AliEveTRDTrackListEditor_H
+#define AliEveTRDTrackListEditor_H
+
+#include <TGedFrame.h>
+#include <TGFileDialog.h>
+#include <TGButton.h>
+#include <TGTextEntry.h>
+#include <TGTextView.h>
+#include <TGListBox.h>
+#include <TGMsgBox.h>
+//#include <TEveMacro.h>
+#include <TObjString.h>
+#include <TSystem.h>
+#include <TROOT.h>
+#include <EveDet/AliEveTRDTrackList.h>
+
+class AliEveTRDTrackListEditor: public TGedFrame
+{
+public:
+  AliEveTRDTrackListEditor(const TGWindow* p=0, Int_t width=170, Int_t height=30,
+                          UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground());
+  virtual ~AliEveTRDTrackListEditor() {};
+
+  virtual void SetModel(TObject* obj);
+
+  void ApplyMacros();         // Apply macros
+  void BrowseMacros();        // Browse macros
+  void HandleMacroPathSet();  // Handle "macro path set"-event 
+  void RemoveMacros();        // Remove macros
+
+protected:
+  AliEveTRDTrackList* fM;     // Model object.
+
+private:
+  AliEveTRDTrackListEditor(const AliEveTRDTrackListEditor&);            // Not implemented
+  AliEveTRDTrackListEditor& operator=(const AliEveTRDTrackListEditor&); // Not implemented 
+
+  void AddMacro(const Char_t* pathname);   // Add macro to the macro list
+  void UpdateMacroList();                  // Updates the macro list
+
+
+  TGVerticalFrame*  fMainFrame; // Top frame for macro functionality.
+  TGVerticalFrame*  fMemberFrame; // Top frame for member list
+  TGHorizontalFrame* fBrowseFrame; // For searching macros
+
+  TGTextButton*   bBrowse; // Browse button
+  TGTextButton*   bApplyMacros; // Apply macros button
+  TGTextButton*   bRemoveMacros; // Remove macros button
+  TGTextEntry*    teField; // Text field to insert macro path manually
+  TGTextView*     tvMemberList; // To display the list of members
+  TGListBox*      tlMacroList; // To display the list of macros
+
+  TGFileInfo*     fileInfo; // Holds data about opening macros
+  Char_t**    fileTypes; // File types (for macros)
+
+  ClassDef(AliEveTRDTrackListEditor, 0); // Editor for AliEveTRDTrackList.
+};
+
+#endif
index e375590dd68a864d6b0840d93cc84698f809634c..b60fb1746e88e9240819cdd85e9866d95d080264 100644 (file)
@@ -85,6 +85,8 @@
 #pragma link C++ class AliEveTRDClusters+;
 #pragma link C++ class AliEveTRDTracklet+;
 #pragma link C++ class AliEveTRDTrack+;
+#pragma link C++ class AliEveTRDTrackList+;
+#pragma link C++ class AliEveTRDTrackListEditor+;
 
 // TOF
 #pragma link C++ class AliEveTOFDigitsInfo+;