From 2ef0687e8a9c4b5c48bdaeb87208f910ee19aad0 Mon Sep 17 00:00:00 2001 From: abercuci Date: Tue, 2 Sep 2008 15:59:08 +0000 Subject: [PATCH] new track visualization/analysis framework (Ben Hess) --- EVE/EveDet/AliEveTRDTrackList.cxx | 15 ++ EVE/EveDet/AliEveTRDTrackList.h | 26 +++ EVE/EveDet/AliEveTRDTrackListEditor.cxx | 262 ++++++++++++++++++++++++ EVE/EveDet/AliEveTRDTrackListEditor.h | 59 ++++++ EVE/EveDet/LinkDef.h | 2 + 5 files changed, 364 insertions(+) create mode 100644 EVE/EveDet/AliEveTRDTrackList.cxx create mode 100644 EVE/EveDet/AliEveTRDTrackList.h create mode 100644 EVE/EveDet/AliEveTRDTrackListEditor.cxx create mode 100644 EVE/EveDet/AliEveTRDTrackListEditor.h diff --git a/EVE/EveDet/AliEveTRDTrackList.cxx b/EVE/EveDet/AliEveTRDTrackList.cxx new file mode 100644 index 00000000000..1a661dbbf15 --- /dev/null +++ b/EVE/EveDet/AliEveTRDTrackList.cxx @@ -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 index 00000000000..c5a12760770 --- /dev/null +++ b/EVE/EveDet/AliEveTRDTrackList.h @@ -0,0 +1,26 @@ +#ifndef AliEveTRDTrackList_H +#define AliEveTRDTrackList_H + +#include +#include +#include + + +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 index 00000000000..d63464aa63e --- /dev/null +++ b/EVE/EveDet/AliEveTRDTrackListEditor.cxx @@ -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(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 index 00000000000..c3ba05593d5 --- /dev/null +++ b/EVE/EveDet/AliEveTRDTrackListEditor.h @@ -0,0 +1,59 @@ +#ifndef AliEveTRDTrackListEditor_H +#define AliEveTRDTrackListEditor_H + +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include + +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 diff --git a/EVE/EveDet/LinkDef.h b/EVE/EveDet/LinkDef.h index e375590dd68..b60fb1746e8 100644 --- a/EVE/EveDet/LinkDef.h +++ b/EVE/EveDet/LinkDef.h @@ -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+; -- 2.43.0