ROOT logo
#ifndef ALICALIBVIEWERGUITIME_H
#define ALICALIBVIEWERGUITIME_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id: AliCalibViewerGUItime.h,v */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  GUI for displaying calibration entries over run/time                     //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////


#ifndef ROOT_TGButton
#include <TGWidget.h>
#endif
#ifndef ROOT_TGFrame
#include <TGFrame.h>
#endif
#include <TString.h>
#include <TVectorT.h>

class TGCompositeFrame;
class TRootEmbeddedCanvas;
class TGTextButton;
class TGListBox;
class TGRadioButton;
class TGComboBox;
class TGGroupFrame;
class TGLabel;
class TGTabElement;
class TGWindow;

class TFile;
class TTree;
class TChain;
class TGraph;
class TObjArray;

class TMap;

class AliBaseCalibViewerGUI;

class AliCalibViewerGUItime : public TGCompositeFrame {
public:
  AliCalibViewerGUItime(const TGWindow *p, UInt_t w, UInt_t h, const Char_t* det = "TRD");
  virtual ~AliCalibViewerGUItime();

  static TObjArray* ShowGUI(TChain* chain);   // launch the time trending GUI and load a chain
  static TObjArray* ShowGUI();        // launch the empty time trending GUI

  void DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h);
  
  void UseFile(const char* fileName, const char* treeName);
  void UseChain(TChain *chain = 0);
  void Reload(Int_t first=1);
  void AddReferenceTree(const char* treeFileName, const char* refName="R");
  
  void SetCalibViewerGUI(AliBaseCalibViewerGUI *gui) {fCalibViewerGUI=gui;}
  void SetCalibViewerGUItab(TGTabElement *tab) {fCalibViewerGUItab=tab;}
  void SetCacheDir(const char* cachedir) {fOutputCacheDir=cachedir;}
  
  const char* GetDrawString();
  const char* GetDrawOption() const;
  void GetCutString(TString &cutStr);
  TChain* GetChain() const {return fTree;}
  //Slots
  void DoDraw();
  void DoDumpRuns();
  void DoCustomDraw();
  void DoCustomCutsDraw();
  void DoParLimitChange();
  void DoNewSelection();                    // decides whether to redraw if user makes another selection
  void DoChangeSelectionList() {Reload(0);}
  void HandleButtonsDrawSel(Int_t id = -1);              
  void MouseMove(Int_t event, Int_t x, Int_t y, TObject */*selected*/);
  void SavePicture();
  void HandleLoadRunTextEntry();
  void HandleLoadRunButtons();
  
 private:
  TString fDetector;                       // TPC/TRD

  TFile*  fFile;                          //file that keeps the tree
  TChain*  fTree;                         //internal tree
  AliBaseCalibViewerGUI *fCalibViewerGUI;  //calib viewer gui used to display verbose information for one run
  TGTabElement *fCalibViewerGUItab;       //tab the calib view gui redies in
  TH1*    fCurrentHist;                   //histogram currently drawn in main canvas
  TGraph* fCurrentGraph;                  //current graph
  Int_t   fCurrentRunDetails;             //run number for wich details are currently shown
  TString fOutputCacheDir;                //output cache diretory for AliTPCCalibViewerGUI trees, created on the fly
  TString fDrawString;                    //current draw string
  Bool_t  fIsCustomDraw;                  //if custom draw string is selected
  TVectorD fRunNumbers;                   //run numbers of current selection
  TVectorD fTimeStamps;                   //timr stamps of current selection
  TVectorD fValuesX;                      //values of current selection
  TVectorD fValuesY;                      //values of current selection
  //
  Bool_t  fNoGraph;                       //Whether to create a graph
  Long64_t fGraphLimitEntries;            //limit in number of entries in the chain for producing a graph
  //
  TMap *fMapRefTrees;                      //map of reference trees for the CalibViewer
  //GUI elements
  //main canvas Top part, bottom part
  TGCompositeFrame    *fContTopBottom;      // container for all GUI elements, vertical divided
  //top left, centre, right
  TGCompositeFrame    *fContLCR;            // container for all GUI elements, horizontal divided
  //content left
  TGCompositeFrame    *fContLeft;           // container for GUI elements on left side
  TGGroupFrame        *fContDrawOpt;        // Subgroup for draw selection
  TGCheckButton       *fChkDrawOptSame;     // draw option 'same'
  TGComboBox          *fComboAddDrawOpt;    // additional draw options combo box
  TGGroupFrame        *fContDrawSel;        // Subgroup for draw selection
  TGCompositeFrame    *fContDrawSelSubRunTime; //Radio button subframe
  TGRadioButton       *fRadioXhist;         // Radio button x-variable: show only 1D distribution
  TGRadioButton       *fRadioXrun;          // Radio button x-variable: run
  TGRadioButton       *fRadioXtime;         // Radio button x-variable: time
  TGListBox           *fListVariables;      // listbox with possible variables
  TGComboBox          *fComboRunType;       // run type selection box
  TGLabel             *fLblRunType;         // run type label
  TGNumberEntry       *fNmbPar;             // parameter number
  TGLabel             *fLblPar;             // parameter name
  TGListBox           *fListCalibType;      // calibration type selection box
  TGGroupFrame        *fContCalibType;      // calibration type label
  //content centre
  TGCompositeFrame    *fContCenter;         // container for GUI elements at the center
  TRootEmbeddedCanvas *fCanvMain;           // main drawing canvas
  //content right 
  TGCompositeFrame    *fContRight;          // container for GUI elements on right side
  TGGroupFrame        *fContValues;         // container to keep data point information
  TGLabel             *fLblRunNumber;       // run number label
  TGLabel             *fLblRunTime;         // time stamp label
  TGLabel             *fLblValueX;          // value label
  TGLabel             *fLblValueY;          // value label
  TGLabel             *fLblRunNumberVal;    // run number of the data point hoovered
  TGLabel             *fLblRunTimeVal;      // time stamp of the data point hoovered
  TGLabel             *fLblValueXVal;       // value of the data point hoovered
  TGLabel             *fLblValueYVal;       // value of the data point hoovered
  TGTextButton        *fBtnDumpRuns;        // draw button
  TGTextButton        *fBtnSave;            // Save button

  TGGroupFrame        *fContLoad;           // Load file container
  TGCompositeFrame    *fContFilename;       // filename container
  TGCompositeFrame    *fContConfigFile;     // config file container
  TGCompositeFrame    *fContTreeName;       // tree name container
  TGLabel             *fLblTreeName;        // tree name label
  TGTextEntry         *fTxtFilename;        // filename text entry
  TGTextEntry         *fTxtConfigFile;      // config file text entry
  TGTextEntry         *fTxtTreeName;        // tree name text entry
  TGButton            *fBtnLoadFile;        // load file button

  //content bottom
  TGCompositeFrame    *fContCustom;         // container for custom draw command GUI elements
  TGCompositeFrame    *fContCustomCuts;     // container for custom cut options GUI elements
  TGLabel             *fLblCustomDraw;      // label for custom draw string
  TGLabel             *fLblCustomCuts;      // label for custom cuts string
  TGComboBox          *fComboCustomDraw;    // combo box custom draw string
  TGComboBox          *fComboCustomCuts;    // combo box custom cuts string
  //
  TObjArray *fTrashBox;                   //graphics objects to be deleted (histograms, graphs,...)
  
  enum { kRadioXhist=10, kRadioXrun=11, kRadioXtime=12 };
  enum { kBranchOnOff=0, kBranchTitle=1, kCalibType=2, kParamNames=3 };
  
  void UpdateParLimits();
  void UpdateParName();
  void SetGuiTree(Int_t run);
  void FillRunTypes();
  void FillCalibTypes();
  void SetInitialValues();
  void CheckDrawGraph();
  Bool_t CheckChain();
  void UpdateValueArrays(Bool_t withGraph);
  const char* SubstituteUnderscores(const char* in);
  void GetHistogramTitle(TString &title);
  void AdjustYRange();
private:
  AliCalibViewerGUItime(const AliCalibViewerGUItime &v);
  AliCalibViewerGUItime &operator = (const AliCalibViewerGUItime &v);         // assignment operator
  
  ClassDef(AliCalibViewerGUItime, 1)
    
};

#endif
 AliCalibViewerGUItime.h:1
 AliCalibViewerGUItime.h:2
 AliCalibViewerGUItime.h:3
 AliCalibViewerGUItime.h:4
 AliCalibViewerGUItime.h:5
 AliCalibViewerGUItime.h:6
 AliCalibViewerGUItime.h:7
 AliCalibViewerGUItime.h:8
 AliCalibViewerGUItime.h:9
 AliCalibViewerGUItime.h:10
 AliCalibViewerGUItime.h:11
 AliCalibViewerGUItime.h:12
 AliCalibViewerGUItime.h:13
 AliCalibViewerGUItime.h:14
 AliCalibViewerGUItime.h:15
 AliCalibViewerGUItime.h:16
 AliCalibViewerGUItime.h:17
 AliCalibViewerGUItime.h:18
 AliCalibViewerGUItime.h:19
 AliCalibViewerGUItime.h:20
 AliCalibViewerGUItime.h:21
 AliCalibViewerGUItime.h:22
 AliCalibViewerGUItime.h:23
 AliCalibViewerGUItime.h:24
 AliCalibViewerGUItime.h:25
 AliCalibViewerGUItime.h:26
 AliCalibViewerGUItime.h:27
 AliCalibViewerGUItime.h:28
 AliCalibViewerGUItime.h:29
 AliCalibViewerGUItime.h:30
 AliCalibViewerGUItime.h:31
 AliCalibViewerGUItime.h:32
 AliCalibViewerGUItime.h:33
 AliCalibViewerGUItime.h:34
 AliCalibViewerGUItime.h:35
 AliCalibViewerGUItime.h:36
 AliCalibViewerGUItime.h:37
 AliCalibViewerGUItime.h:38
 AliCalibViewerGUItime.h:39
 AliCalibViewerGUItime.h:40
 AliCalibViewerGUItime.h:41
 AliCalibViewerGUItime.h:42
 AliCalibViewerGUItime.h:43
 AliCalibViewerGUItime.h:44
 AliCalibViewerGUItime.h:45
 AliCalibViewerGUItime.h:46
 AliCalibViewerGUItime.h:47
 AliCalibViewerGUItime.h:48
 AliCalibViewerGUItime.h:49
 AliCalibViewerGUItime.h:50
 AliCalibViewerGUItime.h:51
 AliCalibViewerGUItime.h:52
 AliCalibViewerGUItime.h:53
 AliCalibViewerGUItime.h:54
 AliCalibViewerGUItime.h:55
 AliCalibViewerGUItime.h:56
 AliCalibViewerGUItime.h:57
 AliCalibViewerGUItime.h:58
 AliCalibViewerGUItime.h:59
 AliCalibViewerGUItime.h:60
 AliCalibViewerGUItime.h:61
 AliCalibViewerGUItime.h:62
 AliCalibViewerGUItime.h:63
 AliCalibViewerGUItime.h:64
 AliCalibViewerGUItime.h:65
 AliCalibViewerGUItime.h:66
 AliCalibViewerGUItime.h:67
 AliCalibViewerGUItime.h:68
 AliCalibViewerGUItime.h:69
 AliCalibViewerGUItime.h:70
 AliCalibViewerGUItime.h:71
 AliCalibViewerGUItime.h:72
 AliCalibViewerGUItime.h:73
 AliCalibViewerGUItime.h:74
 AliCalibViewerGUItime.h:75
 AliCalibViewerGUItime.h:76
 AliCalibViewerGUItime.h:77
 AliCalibViewerGUItime.h:78
 AliCalibViewerGUItime.h:79
 AliCalibViewerGUItime.h:80
 AliCalibViewerGUItime.h:81
 AliCalibViewerGUItime.h:82
 AliCalibViewerGUItime.h:83
 AliCalibViewerGUItime.h:84
 AliCalibViewerGUItime.h:85
 AliCalibViewerGUItime.h:86
 AliCalibViewerGUItime.h:87
 AliCalibViewerGUItime.h:88
 AliCalibViewerGUItime.h:89
 AliCalibViewerGUItime.h:90
 AliCalibViewerGUItime.h:91
 AliCalibViewerGUItime.h:92
 AliCalibViewerGUItime.h:93
 AliCalibViewerGUItime.h:94
 AliCalibViewerGUItime.h:95
 AliCalibViewerGUItime.h:96
 AliCalibViewerGUItime.h:97
 AliCalibViewerGUItime.h:98
 AliCalibViewerGUItime.h:99
 AliCalibViewerGUItime.h:100
 AliCalibViewerGUItime.h:101
 AliCalibViewerGUItime.h:102
 AliCalibViewerGUItime.h:103
 AliCalibViewerGUItime.h:104
 AliCalibViewerGUItime.h:105
 AliCalibViewerGUItime.h:106
 AliCalibViewerGUItime.h:107
 AliCalibViewerGUItime.h:108
 AliCalibViewerGUItime.h:109
 AliCalibViewerGUItime.h:110
 AliCalibViewerGUItime.h:111
 AliCalibViewerGUItime.h:112
 AliCalibViewerGUItime.h:113
 AliCalibViewerGUItime.h:114
 AliCalibViewerGUItime.h:115
 AliCalibViewerGUItime.h:116
 AliCalibViewerGUItime.h:117
 AliCalibViewerGUItime.h:118
 AliCalibViewerGUItime.h:119
 AliCalibViewerGUItime.h:120
 AliCalibViewerGUItime.h:121
 AliCalibViewerGUItime.h:122
 AliCalibViewerGUItime.h:123
 AliCalibViewerGUItime.h:124
 AliCalibViewerGUItime.h:125
 AliCalibViewerGUItime.h:126
 AliCalibViewerGUItime.h:127
 AliCalibViewerGUItime.h:128
 AliCalibViewerGUItime.h:129
 AliCalibViewerGUItime.h:130
 AliCalibViewerGUItime.h:131
 AliCalibViewerGUItime.h:132
 AliCalibViewerGUItime.h:133
 AliCalibViewerGUItime.h:134
 AliCalibViewerGUItime.h:135
 AliCalibViewerGUItime.h:136
 AliCalibViewerGUItime.h:137
 AliCalibViewerGUItime.h:138
 AliCalibViewerGUItime.h:139
 AliCalibViewerGUItime.h:140
 AliCalibViewerGUItime.h:141
 AliCalibViewerGUItime.h:142
 AliCalibViewerGUItime.h:143
 AliCalibViewerGUItime.h:144
 AliCalibViewerGUItime.h:145
 AliCalibViewerGUItime.h:146
 AliCalibViewerGUItime.h:147
 AliCalibViewerGUItime.h:148
 AliCalibViewerGUItime.h:149
 AliCalibViewerGUItime.h:150
 AliCalibViewerGUItime.h:151
 AliCalibViewerGUItime.h:152
 AliCalibViewerGUItime.h:153
 AliCalibViewerGUItime.h:154
 AliCalibViewerGUItime.h:155
 AliCalibViewerGUItime.h:156
 AliCalibViewerGUItime.h:157
 AliCalibViewerGUItime.h:158
 AliCalibViewerGUItime.h:159
 AliCalibViewerGUItime.h:160
 AliCalibViewerGUItime.h:161
 AliCalibViewerGUItime.h:162
 AliCalibViewerGUItime.h:163
 AliCalibViewerGUItime.h:164
 AliCalibViewerGUItime.h:165
 AliCalibViewerGUItime.h:166
 AliCalibViewerGUItime.h:167
 AliCalibViewerGUItime.h:168
 AliCalibViewerGUItime.h:169
 AliCalibViewerGUItime.h:170
 AliCalibViewerGUItime.h:171
 AliCalibViewerGUItime.h:172
 AliCalibViewerGUItime.h:173
 AliCalibViewerGUItime.h:174
 AliCalibViewerGUItime.h:175
 AliCalibViewerGUItime.h:176
 AliCalibViewerGUItime.h:177
 AliCalibViewerGUItime.h:178
 AliCalibViewerGUItime.h:179
 AliCalibViewerGUItime.h:180
 AliCalibViewerGUItime.h:181
 AliCalibViewerGUItime.h:182
 AliCalibViewerGUItime.h:183
 AliCalibViewerGUItime.h:184
 AliCalibViewerGUItime.h:185
 AliCalibViewerGUItime.h:186
 AliCalibViewerGUItime.h:187