KaliVeda
Toolkit for HIC analysis
KVTreeAnalyzer.h
1 
4 #ifndef __KVTreeAnalyzer_H
5 #define __KVTreeAnalyzer_H
6 #ifndef ROOT_TGDockableFrame
7 #include "TGDockableFrame.h"
8 #endif
9 #ifndef ROOT_TGMenu
10 #include "TGMenu.h"
11 #endif
12 #ifndef ROOT_TGMdiDecorFrame
13 #include "TGMdiDecorFrame.h"
14 #endif
15 #ifndef ROOT_TG3DLine
16 #include "TG3DLine.h"
17 #endif
18 #ifndef ROOT_TGMdiFrame
19 #include "TGMdiFrame.h"
20 #endif
21 #ifndef ROOT_TGMdiMainFrame
22 #include "TGMdiMainFrame.h"
23 #endif
24 #ifndef ROOT_TGMdiMenu
25 #include "TGMdiMenu.h"
26 #endif
27 #ifndef ROOT_TGListBox
28 #include "TGListBox.h"
29 #endif
30 #ifndef ROOT_TGNumberEntry
31 #include "TGNumberEntry.h"
32 #endif
33 #ifndef ROOT_TGScrollBar
34 #include "TGScrollBar.h"
35 #endif
36 #ifndef ROOT_TGComboBox
37 #include "TGComboBox.h"
38 #endif
39 #ifndef ROOT_TRootBrowser
40 #include "TRootBrowser.h"
41 #endif
42 #ifndef ROOT_TGFrame
43 #include "TGFrame.h"
44 #endif
45 #ifndef ROOT_TGFileDialog
46 #include "TGFileDialog.h"
47 #endif
48 #ifndef ROOT_TGShutter
49 #include "TGShutter.h"
50 #endif
51 #ifndef ROOT_TGButtonGroup
52 #include "TGButtonGroup.h"
53 #endif
54 #ifndef ROOT_TGCommandPlugin
55 #include "TGCommandPlugin.h"
56 #endif
57 #ifndef ROOT_TGCanvas
58 #include "TGCanvas.h"
59 #endif
60 #ifndef ROOT_TGFSContainer
61 #include "TGFSContainer.h"
62 #endif
63 #ifndef ROOT_TGColorSelect
64 #include "TGColorSelect.h"
65 #endif
66 #ifndef ROOT_TGTextEdit
67 #include "TGTextEdit.h"
68 #endif
69 #ifndef ROOT_TGButton
70 #include "TGButton.h"
71 #endif
72 #ifndef ROOT_TGFSComboBox
73 #include "TGFSComboBox.h"
74 #endif
75 #ifndef ROOT_TGLabel
76 #include "TGLabel.h"
77 #endif
78 #ifndef ROOT_TGView
79 #include "TGView.h"
80 #endif
81 #ifndef ROOT_TGFileBrowser
82 #include "TGFileBrowser.h"
83 #endif
84 #ifndef ROOT_TGTab
85 #include "TGTab.h"
86 #endif
87 #ifndef ROOT_TGListView
88 #include "TGListView.h"
89 #endif
90 #ifndef ROOT_TGSplitter
91 #include "TGSplitter.h"
92 #endif
93 #ifndef ROOT_TGTextEditor
94 #include "TGTextEditor.h"
95 #endif
96 #ifndef ROOT_TRootCanvas
97 #include "TRootCanvas.h"
98 #endif
99 #ifndef ROOT_TGStatusBar
100 #include "TGStatusBar.h"
101 #endif
102 #ifndef ROOT_TGListTree
103 #include "TGListTree.h"
104 #endif
105 #ifndef ROOT_TGToolTip
106 #include "TGToolTip.h"
107 #endif
108 #ifndef ROOT_TGToolBar
109 #include "TGToolBar.h"
110 #endif
111 #ifndef ROOT_TGHtmlBrowser
112 #include "TGHtmlBrowser.h"
113 #endif
114 
115 #include "TEnv.h"
116 #include "Riostream.h"
117 #include "KVListView.h"
118 #include "TChain.h"
119 #include "TCutG.h"
120 #include "TH1.h"
121 #include "TEntryList.h"
122 #include "KVUniqueNameList.h"
123 #include "TBrowser.h"
124 #include <KVUnownedList.h>
125 
126 class KVHistogram;
127 
147 class KVTreeAnalyzer : public TNamed {
148 private:
149  const Char_t* get_leaf_type_name(const TNamed* l);
150  static KVUnownedList* fgAnalyzerList;
151 
152  void init();
153  Bool_t fDeletedByGUIClose;
154 
155  TTree* fTree;
156  TChain* fChain;
157  KVUniqueNameList fSelections;
158 
159  TString fSaveAnalysisFileName;
160  Bool_t fAnalysisModifiedSinceLastSave;
161 
162  /* leaves */
163  TGGroupFrame* fMain_leaflist;
164  KVListView* G_leaflist;
165  KVList fLeafList;
166  TGLabel* G_leaf_expr;
167  TGPictureButton* G_leaf_draw;
168  TString fLeafExpr;
169  KVSeqCollection* fSelectedLeaves;
170  TNamed* fXLeaf;
171  TNamed* fYLeaf;
172  TNamed* fZLeaf;
173  TGTextEntry* G_alias_text;
174  TGCheckButton* G_histo_prof;
175  Bool_t fProfileHisto;
176  TGCheckButton* G_histo_bin;
177  Bool_t fUserBinning;
178  TGCheckButton* G_histo_weight;
179  Bool_t fUserWeight;
180  TString fWeight;
181 
182  Int_t fNx, fNy;
183  Double_t fXmin, fXmax, fYmin, fYmax;
184  Int_t fNxF;
185  Double_t fXminF, fXmaxF;
186 
187  Int_t fNxD, fNyD;
188  bool fOrderedDalitz;
189 
190  bool got_histos_or_tree_from_file = false;
191 
192  /* histos */
193  TGMainFrame* fMain_histolist;
194  const TGMainFrame* GetMainWindow() const
195  {
196  return fMain_histolist;
197  }
198  TGPopupMenu* fMenuFile;
199  TGPopupMenu* fMenuSelections;
200  TGPopupMenu* fSelCombMenu;
201  TGPopupMenu* fOptionMenu;
202  TGPopupMenu* fSelGenerate;
203  enum {
204  MH_OPEN_FILE,
205  MH_OPEN_CHAIN,
206  MH_ADD_FRIEND,
207  MH_SAVE_FILE,
208  MH_SAVE,
209  MH_CLOSE,
210  MH_QUIT,
211  OPT_PROOF,
212  MH_APPLY_ANALYSIS,
213  SEL_COMB_AND,
214  SEL_COMB_OR,
215  SEL_UPDATE,
216  SEL_DELETE,
217  SEL_GEN_CONST_XSEC
218  };
219  void HistoFileMenu_Open();
220  void OpenChain();
221  void HistoFileMenu_Save();
222  TGLayoutHints* fMenuBarItemLayout;
223  TGMenuBar* fMenuBar;
224  KVListView* G_histolist;
225  TGPictureButton* G_histo_del;
226  TGPictureButton* G_histo_add;
227  TGCheckButton* G_histo_same;
228  TGCheckButton* G_histo_app_sel;
229  TGCheckButton* G_histo_log;
230  TGCheckButton* G_histo_new_can;
231  TGCheckButton* G_histo_norm;
232  TGCheckButton* G_histo_norm_events;
233  TGCheckButton* G_histo_stats;
234  TGCheckButton* G_histo_autosave;
235  TGComboBox* G_histo_draw_option;
236  TString fDrawOption;
237  Bool_t fDrawSame;
238  Int_t fSameColorIndex;
239  Bool_t fDrawLog;
240  Bool_t fApplySelection;
241  Bool_t fNewCanvas;
242  Bool_t fNormHisto;
243  Bool_t fNormHistoEvents;
244  Bool_t fStatsHisto;
245  Bool_t fAutoSaveHisto;
246  TString fAutoSaveDir;
247  TString fAutoSaveType;
248  KVUnownedList fSelectedHistos;
249  TGTextButton* G_make_ip_scale;
250  TGTextButton* G_fit1;
251  TGTextButton* G_fit2;
252  TGTextButton* G_fit3;
253  TGTextButton* G_fitGG1;
254  TGTextButton* G_fitGG2;
255  TGTextButton* G_fitGG3;
256  TGTextEntry* G_make_ip_selection;
257  TGLabel* G_ip_histo;
264 
265  /* selections */
266  TGGroupFrame* fMain_selectionlist;
267  KVListView* G_selectionlist;
268  TGStatusBar* G_selection_status;
269  TGTextEntry* G_selection_text;
270  KVUnownedList fSelectedSelections;
271 
272  KVList fHistolist;
273  TString fTreeName;
274  TString fTreeFileName;
275  Int_t fHistoNumber;
276  Int_t fSelectionNumber;
277  Int_t fAliasNumber;
278  KVList fAliasList;
279  Bool_t fNoGui;
280 
281  Bool_t fMethodCalled;
282 
283  TH1* HistoToAdd1;
284  TH1* HistoToAdd2;
285  TH1* HistoAddResult;
286 
287  TString fRelativePathToAnalysisFile;
288  void SetRelativePathToAnalysisFile(const Char_t* p)
289  {
290  fRelativePathToAnalysisFile = p;
291  }
292 
293  TString fAnalysisSaveDir;
294 
295  Bool_t fPROOFEnabled;
296 
297  void ResetMethodCalled()
298  {
299  fMethodCalled = kFALSE;
300  }
301  Bool_t MethodNotCalled()
302  {
303  return !fMethodCalled;
304  }
305 
306  void AddHisto(TH1*);
307  void AddCut(TCutG*);
308  void AddSelection(TEntryList*);
309  void ReconnectTree();
310 
311  void GenerateHistoTitle(TString& title, const Char_t* exp, const Char_t* sel, const Char_t* weight = "");
312  void FillLeafList();
313 
314  void AnalysisSaveCheck();
315  void SetAnalysisModifiedSinceLastSave(Bool_t);
316 
317  void SetEntryList(TEntryList*);
318 
319  bool DefineWeight();
320  bool DefineUserBinning();
321  bool DefineUserBinning1F();
322  bool DefineUserBinningD();
323 
324  double GetTreeMaximum(const TString& leafname);
325  double GetTreeMinimum(const TString& leafname);
326 
327  void SetWindowTitle(const TString& tt)
328  {
329  fMain_histolist->SetWindowName(tt);
330  }
331 
332 public:
333  KVTreeAnalyzer(Bool_t nogui = kTRUE);
334  KVTreeAnalyzer(TTree*, Bool_t nogui = kFALSE);
335  virtual ~KVTreeAnalyzer();
336  void DeleteThis()
337  {
338  delete this;
339  }
340 
341  void Copy(TObject& obj) const override;
342 
343  void SetTree(TTree* t);
344  void OpenGUI();
345  void GUIClosed();
346  TH1* MakeHisto(const Char_t* expr, const Char_t* selection, Int_t nX, Int_t nY = 0, const Char_t* weight = "", Double_t xmin = -1, Double_t xmax = -1, Double_t ymin = -1, Double_t ymax = -1);
347  TH1* RemakeHisto(TH1* h, const Char_t* expr, const Char_t* weight = "");
348  TH1* MakeIntHisto(const Char_t* expr, const Char_t* selection, Int_t Xmin, Int_t Xmax, const Char_t* weight = "");
349  const KVList* GetHistoList() const
350  {
351  return &fHistolist;
352  }
353  TH1* GetHistogram(const Char_t* name) const;
354  TList* GetHistosByData(const Char_t* expr);
355  TList* GetHistosBySelection(const Char_t* expr);
356  TH1* GetHisto(const Char_t* expr, const Char_t* selection, const Char_t* weight = "");
357  KVHistogram* GetHistoByTitle(const Char_t* title);
358  void DeleteHisto(const Char_t* expr, const Char_t* selection, const Char_t* weight);
359  void DeleteSelectedHisto();
360  void AddSelectedHistos();
361  void HistoAddition(Double_t c1 = 1, Double_t c2 = 1);
362 
363  Bool_t MakeSelection(const Char_t* selection);
364  void UpdateEntryLists();
365  void GenerateSelection();
368  void CombineSelectionsAnd();
369  void CombineSelectionsOr();
370  void DeleteSelections();
371  void SelectionChanged();
372  void SetAlias(const Char_t* name, const Char_t* expr);
373  void GenerateAlias();
374  TNamed* GetAlias(const Char_t* expr)
375  {
376  return (TNamed*)fAliasList.FindObjectByType(expr);
377  }
379  {
380  fSelections.ls();
381  }
383  {
384  fTree->GetListOfLeaves()->ls();
385  }
386  void ShowAliases()
387  {
388  fAliasList.ls();
389  }
390  void ShowHistos()
391  {
392  fHistolist.ls();
393  }
394  void CurrentSelection();
395  Bool_t IsCurrentSelection(const Char_t* sel);
396  void SetSelection(TObject*);
397  void SetSelection(const Char_t*);
398  TEntryList* GetSelection(const Char_t*);
399 
400  void EnablePROOF(Bool_t yes = kTRUE);
402  {
403  return fPROOFEnabled;
404  }
406  {
411  return (gEnv->GetValue("KVTreeAnalyzer.PROOFSelections", 0) && fPROOFEnabled);
412  }
413 
414  static KVTreeAnalyzer* OpenFile(const Char_t* filename, Bool_t nogui = kFALSE);
415  void ReadFromFile(const Char_t* filename);
416  void ReadFromFile(TFile* f);
417  void OpenAnyFile(const Char_t* filepath);
418  void OpenChain(const TString& treename, const TString& treetitle, const TSeqCollection* files);
419 
420  void DrawHisto(TObject* o, Bool_t gen = kTRUE);
421  void DrawHistogram(TH1* histo, Bool_t same = false, Bool_t logscale = false);
422  void DrawCut(TCutG*);
423  void DrawLeaf(TObject*);
424  void DrawLeafExpr();
425  void DrawAsDalitz();
427  {
428  fUserBinning = ub;
429  }
431  {
432  fUserWeight = uw;
433  }
434 
435  void SetAutoSaveHisto(Bool_t yes = kTRUE)
436  {
437  fAutoSaveHisto = yes;
438  if (yes) SetUpHistoAutoSave();
439  }
440  void SetStatsHisto(Bool_t yes = kTRUE)
441  {
442  fStatsHisto = yes;
443  }
444  void SetNormHisto(Bool_t yes = kTRUE)
445  {
446  fNormHisto = yes;
447  fNormHistoEvents = (yes ? kFALSE : fNormHistoEvents);
448  G_histo_norm_events->SetState((EButtonState)fNormHistoEvents);
449  }
450  void SetNormHistoEvents(Bool_t yes = kTRUE)
451  {
452  fNormHistoEvents = yes;
453  fNormHisto = (yes ? kFALSE : fNormHisto);
454  G_histo_norm->SetState((EButtonState)fNormHisto);
455  }
456  void SetDrawOption(Option_t* option = "") override
457  {
458  fDrawOption = option;
459  }
460 
461  void SetNewCanvas(Bool_t yes = kTRUE)
462  {
463  fNewCanvas = yes;
465  if (G_histo_same->IsOn()) {
466  G_histo_same->SetState((EButtonState)kFALSE);
467  fDrawSame = kFALSE;
468  }
469  }
470  void SetDrawSame(Bool_t yes = kTRUE)
471  {
472  fSameColorIndex = 0;
473  fDrawSame = yes;
475  if (G_histo_new_can->IsOn()) {
476  G_histo_new_can->SetState((EButtonState)kFALSE);
477  fNewCanvas = kFALSE;
478  }
479  }
480  void SetDrawLog(Bool_t yes = kTRUE)
481  {
482  fDrawLog = yes;
483  }
484  void SetApplySelection(Bool_t yes = kTRUE)
485  {
486  fApplySelection = yes;
487  }
488  void SetProfileHisto(Bool_t yes = kTRUE)
489  {
490  fProfileHisto = yes;
491  }
492  void LeafChanged();
493  void HistoSelectionChanged();
494  void Save();
495  void SaveAs(const char* filename = "", Option_t* option = "") const override;
502 
504  {
505  return fNx;
506  }
508  {
509  return fNy;
510  }
512  {
513  return fXmin;
514  }
516  {
517  return fXmax;
518  }
520  {
521  return fYmin;
522  }
524  {
525  return fYmax;
526  }
527 
529  {
530  return fNxD;
531  }
533  {
534  return fNxD;
535  }
537  {
538  return fOrderedDalitz;
539  }
540 
542  {
543  return fNxF;
544  }
546  {
547  return fXminF;
548  }
550  {
551  return fXmaxF;
552  }
553 
554  const char* GetWeight()
555  {
556  return fWeight;
557  }
558 
559  void SetUpHistoAutoSave();
560 
563  void AutoSaveHisto(TH1* h);
564 
568  void GenerateAllAliases(TCollection* list);
569  void HistoFileMenu_Apply();
570  void ReapplyAnyFile(const Char_t* filepath);
571  void SetTreeFileName(TTree* t);
572 
574  {
575  return fgAnalyzerList;
576  }
577  static KVTreeAnalyzer* GetAnalyzer(const Char_t* title)
578  {
579  return (KVTreeAnalyzer*)fgAnalyzerList->FindObjectByTitle(title);
580  }
581 
582  void MakeAbsoluteIPScale(const char* name, Double_t sigmaTot);
583  void GenerateConstantXSecSelections(const char* name, Double_t sigmaTot, Double_t sigmaBin);// *MENU*
584 
585  void HandleOptionsMenu(Int_t opt);
586  void OpenAnyFriendFile(const Char_t* filepath);
589  ClassDefOverride(KVTreeAnalyzer, 5) //KVTreeAnalyzer
590  void OpenSingleFile(TFile* file);
591 
592  TChain* GetChain() const
593  {
594  return fChain;
595  }
596  void GetHistosFromFile(TFile* file, const KVUnownedList& keys);
597 };
599 R__EXTERN KVTreeAnalyzer* gTreeAnalyzer;
600 
601 #endif
int Int_t
#define R__EXTERN
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
R__EXTERN TEnv * gEnv
EButtonState
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t sel
Wrapper for histograms and graphical cuts used by KVTreeAnalyzer.
Definition: KVHistogram.h:20
Enhanced version of ROOT TGListView widget.
Definition: KVListView.h:147
Extended TList class which owns its objects by default.
Definition: KVList.h:22
KaliVeda extensions to ROOT collection classes.
virtual TObject * FindObjectByType(const Char_t *) const
virtual TObject * FindObjectByTitle(const Char_t *) const
Will return object with given title (value of TObject::GetTitle() method).
GUI for simple intuitive analysis of data in TTree ,.
void DeleteHisto(const Char_t *expr, const Char_t *selection, const Char_t *weight)
Bool_t IsPROOFEnabledForSelections() const
void SetDrawOption(Option_t *option="") override
static KVTreeAnalyzer * OpenFile(const Char_t *filename, Bool_t nogui=kFALSE)
TList * GetHistosByData(const Char_t *expr)
KVHistogram * GetHistoByTitle(const Char_t *title)
Double_t GetXminF()
Bool_t IsPROOFEnabled() const
void MakeAbsoluteIPScale(const char *name, Double_t sigmaTot)
void SetTreeFileName(TTree *t)
void SetNewCanvas(Bool_t yes=kTRUE)
void SetTree(TTree *t)
Connects a TChain for analysis.
void DeleteSelections()
Delete the currently selected selection(s)
void OpenAnyFile(const Char_t *filepath)
Bool_t MakeSelection(const Char_t *selection)
void ReapplyAnyFile(const Char_t *filepath)
Double_t GetYmax()
Double_t GetXmaxF()
Double_t GetXmax()
void GenerateAllAliases(TCollection *list)
Generate all user aliases in list which are not already defined.
void SaveAs(const char *filename="", Option_t *option="") const override
void Copy(TObject &obj) const override
Double_t GetYmin()
TH1 * RemakeHisto(TH1 *h, const Char_t *expr, const Char_t *weight="")
TH1 * MakeHisto(const Char_t *expr, const Char_t *selection, Int_t nX, Int_t nY=0, const Char_t *weight="", Double_t xmin=-1, Double_t xmax=-1, Double_t ymin=-1, Double_t ymax=-1)
void SetAlias(const Char_t *name, const Char_t *expr)
void SetDrawLog(Bool_t yes=kTRUE)
void DeleteSelectedHisto()
Delete all currently selected histograms.
void GUIClosed()
Called when graphical window is closed.
void GenerateConstantXSecSelections(const char *name, Double_t sigmaTot, Double_t sigmaBin)
TEntryList * GetSelection(const Char_t *)
Look for selection in list of selections.
Bool_t IsCurrentSelection(const Char_t *sel)
void AutoSaveHisto(TH1 *h)
void SetUserWeight(Bool_t uw)
void SetAutoSaveHisto(Bool_t yes=kTRUE)
void SetDrawSame(Bool_t yes=kTRUE)
static KVTreeAnalyzer * GetAnalyzer(const Char_t *title)
const KVList * GetHistoList() const
void GenerateAllHistograms(TCollection *)
void SetSelection(TObject *)
void CurrentSelection()
Print the currently active selection (TEntryList set on TTree).
static KVSeqCollection * GetListOfAnalyzers()
void UpdateEntryLists()
regenerate entry lists for all selections
void DrawCut(TCutG *)
void HistoAddition(Double_t c1=1, Double_t c2=1)
void OpenGUI()
Launch the GUI (unless fNoGui=kTRUE in which case this does nothing)
void HistoFileMenu_OpenFriend()
void SetProfileHisto(Bool_t yes=kTRUE)
KVTreeAnalyzer(Bool_t nogui=kTRUE)
void HandleHistoFileMenu(Int_t)
void SetNormHisto(Bool_t yes=kTRUE)
ClassDefOverride(KVTreeAnalyzer, 5) void OpenSingleFile(TFile *file)
void HandleOptionsMenu(Int_t opt)
void GetHistosFromFile(TFile *file, const KVUnownedList &keys)
void HandleSelectionsMenu(Int_t)
Double_t GetXmin()
void DrawHistogram(TH1 *histo, Bool_t same=false, Bool_t logscale=false)
void SetNormHistoEvents(Bool_t yes=kTRUE)
void EnablePROOF(Bool_t yes=kTRUE)
TList * GetHistosBySelection(const Char_t *expr)
void OpenAnyFriendFile(const Char_t *filepath)
TChain * GetChain() const
void GenerateAllSelections(TCollection *)
For applying existing analysis to new data.
const char * GetWeight()
TH1 * GetHistogram(const Char_t *name) const
Return histogram with given name.
Long64_t GetEntriesInCurrentSelection() const
Bool_t GetOrderedDalitz()
TH1 * MakeIntHisto(const Char_t *expr, const Char_t *selection, Int_t Xmin, Int_t Xmax, const Char_t *weight="")
virtual ~KVTreeAnalyzer()
Destructor.
void SelectionChanged()
Method called whenever the selected selection in the GUI list changes.
TH1 * GetHisto(const Char_t *expr, const Char_t *selection, const Char_t *weight="")
TNamed * GetAlias(const Char_t *expr)
void HistoSelectionChanged()
Method called when user histo selection changes in GUI histogram list.
void SetUserBinning(Bool_t ub)
void ReadFromFile(const Char_t *filename)
open a previously saved analysis session.
void DrawLeaf(TObject *)
Method called when user double-clicks a leaf/alias in list.
void SetApplySelection(Bool_t yes=kTRUE)
void DrawHisto(TObject *o, Bool_t gen=kTRUE)
void SetStatsHisto(Bool_t yes=kTRUE)
Optimised list in which named objects can only be placed once.
Extended TList class which does not own its objects by default.
Definition: KVUnownedList.h:20
void ls(Option_t *option="") const override
virtual const char * GetValue(const char *name, const char *dflt) const
Bool_t IsOn() const override
void SetState(EButtonState state, Bool_t emit=kFALSE) override
void SetWindowName(const char *name=nullptr) override
virtual TObjArray * GetListOfLeaves()
long long Long64_t
RVec< PromoteType< T > > exp(const RVec< T > &v)
TLine l
auto * tt