1 #include <EveDet/AliEveTRDData.h>
2 #include <EveDet/AliEveTRDTrackList.h>
3 #include "AliEveTRDTrackListEditor.h"
5 #include <EveBase/AliEveEventManager.h>
6 #include <AliTRDtrackV1.h>
9 #include <TEveBrowser.h>
10 #include <TEveGedEditor.h>
11 #include <TEveMacro.h>
12 #include <TEveManager.h>
15 #include <TGFileDialog.h>
17 #include <TGListBox.h>
20 #include <TObjString.h>
23 #include <TGTextEntry.h>
24 #include <TGTextView.h>
26 #include <TTreeStream.h>
29 ClassImp(AliEveTRDTrackListEditor)
31 ///////////////////////////////////////////////////////////
32 ///////////// AliEveTRDTrackListEditor //////////////////
33 ///////////////////////////////////////////////////////////
34 AliEveTRDTrackListEditor::AliEveTRDTrackListEditor(const TGWindow* p, Int_t width, Int_t height,
35 UInt_t options, Pixel_t back) :
36 TGedFrame(p, width, height, options, back),
40 fInheritMacroList(kFALSE),
54 fLabel1(0), fLabel2(0), fLabel3(0), fLabel4(0),
55 fLine1(0), fLine2(0), fLine3(0), fLine4(0),
58 fMainFrame = CreateEditorTabSubFrame("Apply macros");
60 // Functionality for adding macros
61 fLabel1 = new TGLabel(fMainFrame,"Add macro(s):");
62 fMainFrame->AddFrame(fLabel1);
63 fBrowseFrame = new TGHorizontalFrame(fMainFrame);
65 fteField = new TGTextEntry(fBrowseFrame);
66 fteField->Connect("ReturnPressed()","AliEveTRDTrackListEditor", this, "HandleMacroPathSet()");
67 fBrowseFrame->AddFrame(fteField);
69 fbBrowse = new TGTextButton(fBrowseFrame, "Browse");
70 fbBrowse->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "BrowseMacros()");
71 fBrowseFrame->AddFrame(fbBrowse);
72 fMainFrame->AddFrame(fBrowseFrame);
74 fLine1 = new TGHorizontal3DLine(fMainFrame, 194, 8);
75 fMainFrame->AddFrame(fLine1, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 8, 2));
76 fLabel2 = new TGLabel(fMainFrame,"Selection macros:");
77 fMainFrame->AddFrame(fLabel2);
79 ftlMacroSelList = new TGListBox(fMainFrame);
80 ftlMacroSelList->Resize(194, 94);
81 ftlMacroSelList->SetMultipleSelections(kTRUE);
82 fMainFrame->AddFrame(ftlMacroSelList);
84 fLine2 = new TGHorizontal3DLine(fMainFrame, 194, 8);
85 fMainFrame->AddFrame(fLine2, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 8, 2));
86 fLabel3 = new TGLabel(fMainFrame,"Process macros:");
87 fMainFrame->AddFrame(fLabel3);
89 ftlMacroList = new TGListBox(fMainFrame);
90 ftlMacroList->Resize(194, 94);
91 ftlMacroList->SetMultipleSelections(kTRUE);
92 fMainFrame->AddFrame(ftlMacroList);
94 fLine3 = new TGHorizontal3DLine(fMainFrame, 194, 8);
95 fMainFrame->AddFrame(fLine3, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 8, 2));
97 fbApplyMacros = new TGTextButton(fMainFrame, "Apply selected macro(s)");
98 fbApplyMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "ApplyMacros()");
99 fbApplyMacros->SetRightMargin(12);
100 fMainFrame->AddFrame(fbApplyMacros);
102 fbRemoveMacros = new TGTextButton(fMainFrame, "Remove selected macro(s)");
103 fbRemoveMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "RemoveMacros()");
104 fMainFrame->AddFrame(fbRemoveMacros);
106 // Stuff for displaying histograms
107 fHistoFrame = CreateEditorTabSubFrame("Histograms");
108 fHistoFrame->SetMapSubwindows(kTRUE);
109 fLabel4 = new TGLabel(fHistoFrame,"Data from applied macros:");
110 fHistoFrame->AddFrame(fLabel4);
112 fHistoSubFrame = new TGVerticalFrame(fHistoFrame);
113 fHistoSubFrame->SetMapSubwindows(kTRUE);
114 fHistoSubFrame->Resize(194, 200);
115 fHistoFrame->AddFrame(fHistoSubFrame);
117 fLine4 = new TGHorizontal3DLine(fHistoFrame, 194, 8);
118 fHistoFrame->AddFrame(fLine4, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 8, 2));
120 fbDrawHisto = new TGTextButton(fHistoFrame, "Draw histogram");
121 fbDrawHisto->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "DrawHistos()");
122 fHistoFrame->AddFrame(fbDrawHisto);
124 // Set up file dialog
125 fFileInfo = new TGFileInfo();
126 fFileInfo->SetMultipleSelection(kTRUE);
128 fFileTypes = new Char_t*[6];
129 fFileTypes[0] = (Char_t*)"All files"; fFileTypes[1] = (Char_t*)"*";
130 fFileTypes[2] = (Char_t*)"ROOT macros"; fFileTypes[3] = (Char_t*)"*.C";
131 fFileTypes[4] = 0; fFileTypes[5] = 0;
132 fFileInfo->fFileTypes = (const Char_t**)fFileTypes;
133 fFileInfo->fFileTypeIdx = 2;
134 fFileInfo->fMultipleSelection = kTRUE;
136 fHistoCanvasName = new TGString("");
138 // Handle the signal "Selected(Int_t ind)"
139 ftlMacroList->Connect("Selected(Int_t)", "AliEveTRDTrackListEditor", this, "UpdateMacroListSelection(Int_t)");
140 ftlMacroSelList->Connect("Selected(Int_t)", "AliEveTRDTrackListEditor", this, "UpdateMacroSelListSelection(Int_t)");
142 // Handle the signal "NewEventLoaded"
143 gAliEveEvent->Connect("NewEventLoaded()", "AliEveTRDTrackListEditor", this, "HandleNewEventLoaded()");
145 // Handle the signal "Selected" (another tab has been selected)
146 GetGedEditor()->GetTab()->Connect("Selected(Int_t)", "AliEveTRDTrackListEditor",
147 this, "HandleTabChangedToIndex(Int_t)");
150 //______________________________________________________
151 AliEveTRDTrackListEditor::~AliEveTRDTrackListEditor()
155 delete [] fFileTypes;
164 // Close and delete all tabs that have been created by this class
167 if (fHistoCanvasName != 0)
169 delete fHistoCanvasName;
170 fHistoCanvasName = 0;
174 //______________________________________________________
175 void AliEveTRDTrackListEditor::AddMacro(const Char_t* path, const Char_t* name)
177 Int_t result = fM->AddMacro(path, name);
185 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Warning", "Macro is already in list (won't be added again)!",
186 kMBIconExclamation, kMBOk);
188 case SIGNATURE_ERROR:
189 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
190 "Macro has not the signature of...\n...a selection macro: Bool_t YourMacro(const AliTRDtrackV1*)\n...a process macro (type 1): void YourMacro(const AliTRDtrackV1*, Double_t*&, Int_t&)\n...a process macro (type2): TH1* YourMacro(const AliTRDtrackV1*)",
191 kMBIconExclamation, kMBOk);
193 case NOT_EXIST_ERROR:
194 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
195 "File does not exist or you do not have read permission!", kMBIconExclamation, kMBOk);
198 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
199 Form("AliEveTRDTrackList::AddMacro exited with unknown return value: %d", result),
200 kMBIconExclamation, kMBOk);
205 //______________________________________________________
206 void AliEveTRDTrackListEditor::ApplyMacros()
208 // First apply the selection macros
209 TList* iterator = new TList();
210 ftlMacroSelList->GetSelectedEntries(iterator);
211 fM->ApplySelectionMacros(iterator);
216 if (iterator != 0) delete iterator;
218 // Now apply the process macros
219 iterator = new TList();
220 ftlMacroList->GetSelectedEntries(iterator);
221 fM->ApplyProcessMacros(iterator);
223 // Update histogram tab (data has to be reloaded)
227 // AlieveTRDTrackList::ApplyProcessMacros() automatically selects a macro -> Draw the histogram for it,
228 // if a process macro has been applied
229 if (iterator->GetEntries() > 0)
231 // Set focus on "Histograms" tab
232 GetGedEditor()->GetTab()->SetTab("Histograms");
237 if (iterator != 0) delete iterator;
241 //______________________________________________________
242 void AliEveTRDTrackListEditor::BrowseMacros()
244 new TGFileDialog(gClient->GetRoot(), GetMainFrame(), kFDOpen, fFileInfo);
246 if (fFileInfo->fIniDir != 0 && fFileInfo->fFileNamesList != 0)
249 TObject* iter = fFileInfo->fFileNamesList->First();
255 // NOTE: fileInfo->fFileNamesList will be changed by that, too!
256 name = strrchr(iter->GetName(), '/');
257 // Delete '"' at the end
258 name[strlen(name)] = '\0';
260 AddMacro(fFileInfo->fIniDir, name + 1);
261 iter = (TObjString*)fFileInfo->fFileNamesList->After(iter);
265 // -> The following problem has been fixed (trunk -> Changes according to 03 September 2008):
266 // Some error occurs, when one ends the filedialog with "cancel": fileInfo->fFileNamesList is set to 0x0, but
267 // in the next launch no new memory is allocated. So do this manually.
268 //if (fileInfo->fFileNamesList == 0) fileInfo->fFileNamesList = new TList();
271 //______________________________________________________
272 void AliEveTRDTrackListEditor::CloseTabs()
274 if (fHistoCanvas != 0)
276 // Close the created tab, if it exists
277 if (fHistoCanvasName != 0)
279 if (gEve->GetBrowser()->GetTab(1)->SetTab(fHistoCanvasName->GetString()))
281 // Now the created tab is the current one and can be deleted
282 gEve->GetBrowser()->GetTab(1)->RemoveTab();
285 // With the tab removal, the canvas will be deleted automatically!
290 //______________________________________________________
291 void AliEveTRDTrackListEditor::DrawHistos()
293 Int_t nHistograms = GetNSelectedHistograms();
294 if (nHistograms <= 0)
296 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
297 "No data selected. Please select the data you want to plot!", kMBIconExclamation, kMBOk);
302 new TGMsgBox(gClient->GetRoot(), GetMainFrame(),
303 "Error", "Only histograms with up to 3 dimensions supported. Please select 1,2 or 3 data macros!",
304 kMBIconExclamation, kMBOk);
308 // Check, if a histo macro shall be drawn
309 Int_t indexOfHistoMacro = -1;
310 Int_t selectedChecked = 0;
311 for (Int_t j = 0; j < fM->fDataFromMacroList->GetEntries(); j++)
313 if (fCheckButtons[j]->TGButton::GetState() == kButtonDown)
318 if (fM->IsHistogramMacro(fM->fDataFromMacroList->At(j)->GetName()))
320 // Is also another macro selected?
323 // Histo macros cannot(!) be correlated!
324 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
325 "Process macros of type 2 (return value \"TH1*\") cannot be correlated with other macros",
326 kMBIconExclamation, kMBOk);
330 // Mark this histo macro for drawing
331 indexOfHistoMacro = j;
333 // Have all selected macros been checked? -> If yes, we are done with this
334 if (selectedChecked == nHistograms) break;
339 TFile* file = new TFile("TRD.TrackListMacroData.root", "READ");
342 Error("Draw histograms", "Cannot open file \"TRD.TrackListMacroData.root\"");
343 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
344 "Cannot open file \"TRD.TrackListMacroData.root\"", kMBIconExclamation, kMBOk);
352 Int_t indexOfMacro1 = 0;
353 Int_t indexOfMacro2 = 0;
354 Int_t indexOfMacro3 = 0;
356 // Variable for the loop below -> Will be set to aborting value, if a histo macro is drawn
360 if (indexOfHistoMacro >= 0)
362 if ((t = (TTree*)file->Get(Form("TrackData%d", indexOfHistoMacro))))
364 SetDrawingToHistoCanvasTab();
367 t->SetBranchAddress(Form("Macro%d", indexOfHistoMacro), &myHist);
369 if (myHist != 0) myHist->Draw();
372 Error("Draw histograms", Form("No histogram for histo macro \"%s\" found!",
373 fM->fDataFromMacroList->At(indexOfHistoMacro)->GetName()));
374 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
375 Form("No histogram for histo macro \"%s\" found!",
376 fM->fDataFromMacroList->At(indexOfHistoMacro)->GetName()), kMBIconExclamation, kMBOk);
380 UpdateHistoCanvasTab();
384 Error("Draw histograms", Form("No data for histo macro \"%s\" found!",
385 fM->fDataFromMacroList->At(indexOfHistoMacro)->GetName()));
386 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
387 Form("No data for histo macro \"%s\" found!",
388 fM->fDataFromMacroList->At(indexOfHistoMacro)->GetName()), kMBIconExclamation, kMBOk);
391 // Skip the loop below
392 i = fM->fDataFromMacroList->GetEntries();
395 // Load the trees in succession and remember the entries -> Plot the process macros of type 1
396 for ( ; i < fM->fDataFromMacroList->GetEntries(); i++)
398 if (fCheckButtons[i]->TGButton::GetState() == kButtonDown)
403 if (!(t = (TTree*)file->Get(Form("TrackData%d", i))))
405 Error("Draw histograms", Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()));
406 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
407 Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()),
408 kMBIconExclamation, kMBOk);
412 // 1d histogram - macro of type 1
413 if (nHistograms == 1)
415 SetDrawingToHistoCanvasTab();
417 t->Draw(Form("Macro%d", indexOfMacro1), "1");
418 ((TH1*)gPad->GetPrimitive("htemp"))->SetTitle(Form("%s;%s",
419 fM->fDataFromMacroList->At(indexOfMacro1)->GetName(),
420 fM->fDataFromMacroList->At(indexOfMacro1)->GetName()));
422 UpdateHistoCanvasTab();
427 else if (tFriend1 == 0)
430 if (!(tFriend1 = (TTree*)file->Get(Form("TrackData%d", i))))
432 Error("Draw histograms", Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()));
433 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
434 Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()),
435 kMBIconExclamation, kMBOk);
440 if (nHistograms == 2)
442 SetDrawingToHistoCanvasTab();
444 t->AddFriend(tFriend1);
445 t->Draw(Form("Macro%d:Macro%d", indexOfMacro1, indexOfMacro2), "1");
446 ((TH1*)gPad->GetPrimitive("htemp"))->SetTitle(Form("%s - %s;%s;%s",
447 fM->fDataFromMacroList->At(indexOfMacro2)->GetName(),
448 fM->fDataFromMacroList->At(indexOfMacro1)->GetName(),
449 fM->fDataFromMacroList->At(indexOfMacro2)->GetName(),
450 fM->fDataFromMacroList->At(indexOfMacro1)->GetName()));
452 UpdateHistoCanvasTab();
461 if (!(tFriend2 = (TTree*)file->Get(Form("TrackData%d", i))))
463 Error("Draw histograms", Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()));
464 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error - Draw histograms",
465 Form("No data for macro \"%s\" found!", fM->fDataFromMacroList->At(i)->GetName()),
466 kMBIconExclamation, kMBOk);
470 SetDrawingToHistoCanvasTab();
472 t->AddFriend(tFriend1);
473 t->AddFriend(tFriend2);
474 t->Draw(Form("Macro%d:Macro%d:Macro%d", indexOfMacro1, indexOfMacro2, indexOfMacro3), "1");
475 ((TH1*)gPad->GetPrimitive("htemp"))->SetTitle(Form("%s - %s - %s;%s;%s;%s",
476 fM->fDataFromMacroList->At(indexOfMacro3)->GetName(),
477 fM->fDataFromMacroList->At(indexOfMacro2)->GetName(),
478 fM->fDataFromMacroList->At(indexOfMacro1)->GetName(),
479 fM->fDataFromMacroList->At(indexOfMacro3)->GetName(),
480 fM->fDataFromMacroList->At(indexOfMacro2)->GetName(),
481 fM->fDataFromMacroList->At(indexOfMacro1)->GetName()));
483 UpdateHistoCanvasTab();
490 if (t != 0) delete t;
492 if (tFriend1 != 0) delete tFriend1;
494 if (tFriend2 != 0) delete tFriend2;
502 //______________________________________________________
503 Int_t AliEveTRDTrackListEditor::GetNSelectedHistograms()
507 for (Int_t i = 0; i < fM->fDataFromMacroList->GetEntries(); i++)
509 if (fCheckButtons[i]->TGButton::GetState() == kButtonDown) count++;
515 //______________________________________________________
516 void AliEveTRDTrackListEditor::HandleMacroPathSet()
518 if (strlen(fteField->GetText()) != 0)
520 // Check if file exists
523 fp = fopen(fteField->GetText(), "rb");
529 Char_t* name = strrchr(fteField->GetText(), '/');
534 name = new Char_t[AliEveTRDTrackList::fkMaxMacroNameLength];
535 memset(name, '\0', sizeof(Char_t) * AliEveTRDTrackList::fkMaxMacroNameLength);
536 sprintf(name, "%s", fteField->GetText());
538 // Add path to textfield -> Path is "./" -> Use length for the name + 2
539 Char_t pathname[AliEveTRDTrackList::fkMaxMacroNameLength + 2];
540 memset(pathname, '\0', sizeof(Char_t) * (AliEveTRDTrackList::fkMaxMacroNameLength + 2));
541 sprintf(pathname, "./%s", fteField->GetText());
542 fteField->SetText(pathname);
545 if (name != 0) delete name;
552 Char_t* path = new Char_t[AliEveTRDTrackList::fkMaxMacroPathLength];
553 memset(path, '\0', sizeof(Char_t) * AliEveTRDTrackList::fkMaxMacroPathLength);
554 strncpy(path, fteField->GetText(), strlen(fteField->GetText()) - strlen(name));
556 // Ignore the slash "/" in name
557 AddMacro(path, name + 1);
559 if (path != 0) delete path;
565 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
566 "File does not exist or you do not have read permission!", kMBIconExclamation, kMBOk);
571 //______________________________________________________
572 void AliEveTRDTrackListEditor::HandleNewEventLoaded()
574 // Inherit the macro list for the next track list!
575 fInheritMacroList = kTRUE;
581 //______________________________________________________
582 void AliEveTRDTrackListEditor::HandleTabChangedToIndex(Int_t index)
584 fM->SetSelectedTab(index);
587 //______________________________________________________
588 void AliEveTRDTrackListEditor::InheritMacroList()
590 // The old macro lists are stored in the corresponding list boxes -> add them to the track list
593 fM->fMacroSelList->Delete();
594 for (Int_t i = 0; i < ftlMacroSelList->GetNumberOfEntries(); i++)
596 fM->AddMacroFast(ftlMacroSelList->GetEntry(i)->GetTitle(), kTRUE);
600 fM->fMacroList->Delete();
601 for (Int_t i = 0; i < ftlMacroList->GetNumberOfEntries(); i++)
603 fM->AddMacroFast(ftlMacroList->GetEntry(i)->GetTitle(), kFALSE);
607 //______________________________________________________
608 void AliEveTRDTrackListEditor::RemoveMacros()
610 TList* iterator = new TList();
612 ftlMacroList->GetSelectedEntries(iterator);
613 fM->RemoveProcessMacros(iterator);
615 if (iterator != 0) delete iterator;
617 iterator = new TList();
618 ftlMacroSelList->GetSelectedEntries(iterator);
619 fM->RemoveSelectionMacros(iterator);
621 // Selected macros are deleted from the list -> No selected entries left
622 fM->fMacroListSelected = 0;
623 fM->fMacroSelListSelected = 0;
627 if (iterator != 0) delete iterator;
631 //______________________________________________________
632 void AliEveTRDTrackListEditor::SetDrawingToHistoCanvasTab()
634 // If the tab with the canvas has been closed, the canvas will be deleted.
635 // So, if there is no tab, set the canvas pointer to zero and recreate it in a new tab.
636 if (fHistoCanvas != 0)
638 if (gEve->GetBrowser()->GetTab(1)->SetTab(fHistoCanvasName->GetString()) == 0)
646 fHistoCanvas = gEve->AddCanvasTab(fM->GetName());
652 //______________________________________________________
653 void AliEveTRDTrackListEditor::UpdateHistoCanvasTab()
655 // Update name of the tab (tab has been set to current tab!)
656 fHistoCanvasName->SetString(fM->GetName());
658 // Use a copy of fHistoCanvasName!! -> If the user closes a tab manually, the TGString
659 // will be deleted -> Error might occur, when accessing the pointer
660 gEve->GetBrowser()->GetTab(1)->GetCurrentTab()->SetText(new TGString(fHistoCanvasName));
662 // Switch tabs to force redrawing
663 gEve->GetBrowser()->GetTab(1)->SetTab(0);
664 gEve->GetBrowser()->GetTab(1)->SetTab(fHistoCanvasName->GetString());
665 fHistoCanvas->Update();
668 //______________________________________________________
669 void AliEveTRDTrackListEditor::SetModel(TObject* obj)
672 fM = dynamic_cast<AliEveTRDTrackList*>(obj);
676 Error("SetModel", "Parameter is zero pointer");
680 // If macro list shall be inherited from previously loaded track list, do so
681 if (fInheritMacroList)
684 fInheritMacroList = kFALSE;
691 GetGedEditor()->GetTab()->SetTab(fM->fSelectedTab);
694 //______________________________________________________
695 void AliEveTRDTrackListEditor::UpdateDataFromMacroListSelection()
697 for (Int_t i = 0; i < fM->fDataFromMacroList->GetEntries(); i++)
699 fM->SetHistoDataSelection(i, fCheckButtons[i]->IsOn());
703 //______________________________________________________
704 void AliEveTRDTrackListEditor::UpdateHistoList()
706 fHistoSubFrame->TGCompositeFrame::Cleanup();
708 // Set buttons for histograms
709 if (fCheckButtons != 0) delete fCheckButtons;
710 fCheckButtons = new TGCheckButton*[fM->fDataFromMacroList->GetEntries()];
712 TObjString* iter = (TObjString*)fM->fDataFromMacroList->First();
713 for (Int_t i = 0; i < fM->fDataFromMacroList->GetEntries() && iter != 0; i++)
715 fCheckButtons[i] = new TGCheckButton(fHistoSubFrame, iter->GetName());
716 fHistoSubFrame->AddFrame(fCheckButtons[i]);
718 fCheckButtons[i]->SetState(kButtonUp, kFALSE);
719 fCheckButtons[i]->MapRaised();
720 fCheckButtons[i]->SetOn(fM->HistoDataIsSelected(i));
721 fCheckButtons[i]->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "UpdateDataFromMacroListSelection()");
723 iter = (TObjString*)fM->fDataFromMacroList->After(iter);
727 //______________________________________________________
728 void AliEveTRDTrackListEditor::UpdateMacroList()
730 ftlMacroList->RemoveAll();
732 TObjString* iter = (TObjString*)fM->fMacroList->First();
737 ftlMacroList->AddEntry(iter->GetName(), ind++);
738 iter = (TObjString*)fM->fMacroList->After(iter);
741 ftlMacroList->SortByName();
743 // Select, what has been selected before
744 for (Int_t i = 0; i < fM->fMacroList->GetEntries(); i++)
746 ftlMacroList->Select(i, fM->MacroListIsSelected(i));
751 ftlMacroSelList->RemoveAll();
753 iter = (TObjString*)fM->fMacroSelList->First();
758 ftlMacroSelList->AddEntry(iter->GetName(), ind++);
759 iter = (TObjString*)fM->fMacroSelList->After(iter);
762 ftlMacroSelList->SortByName();
764 // Select, what has been selected before
765 for (Int_t i = 0; i < fM->fMacroSelList->GetEntries(); i++)
767 ftlMacroSelList->Select(i, fM->MacroSelListIsSelected(i));
771 //______________________________________________________
772 void AliEveTRDTrackListEditor::UpdateMacroListSelection(Int_t ind)
774 // Toggle selected item
775 fM->SetMacroListSelection(ind, !fM->MacroListIsSelected(ind));
778 //______________________________________________________
779 void AliEveTRDTrackListEditor::UpdateMacroSelListSelection(Int_t ind)
781 // Toggle selected item
782 fM->SetMacroSelListSelection(ind, !fM->MacroSelListIsSelected(ind));