ROOT logo
#ifndef AliTPCCalibViewerGUItime_H
#define AliTPCCalibViewerGUItime_H

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

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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  GUI for displaying calibration entires over time                         //
//  Calibration Trees are created using the macro TPC/CalibMacros/CalibEnv.C //
//  used for the calibration monitor                                         //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////


#ifndef ROOT_TGButton
#include "TGWidget.h"
#endif
#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif

#include <TGComboBox.h>
#include <TString.h>
#include <TVectorT.h>

class TGCompositeFrame;
class TRootEmbeddedCanvas;
class TGTextButton;
class TGListBox;
class TGRadioButton;
class TGGroupFrame;
class TGLabel;
class TGTabElement;
class TGTextEntry;

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

class TMap;

class AliTPCCalibViewerGUI;
class AliTPCConfigParser;



class AliTPCCalibViewerGUItime : public TGCompositeFrame {
public:
  AliTPCCalibViewerGUItime(const TGWindow *p, UInt_t w, UInt_t h);
  virtual ~AliTPCCalibViewerGUItime();
  
  static TObjArray* ShowGUI(const char* fileName = 0, const char* treeName="dcs");             // initialize and show GUI standalone
  static TObjArray* ShowGUI(TChain* chain);                                         // initialize and show GUI standalone
  
  void DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h);
  
  void UseFile(const char* fileName, const char* treeName);
  void UseChain(TChain *const chain);
  void UseConfigFile(const char* file="");
  void Reload(Int_t first=1);
  void AddReferenceTree(const char* treeFileName, const char* refName="R");

  
  void SetCalibViewerGUI(AliTPCCalibViewerGUI *const gui) {fCalibViewerGUI=gui;}
  void SetCalibViewerGUItab(TGTabElement *const tab) {fCalibViewerGUItab=tab;}
  void SetCacheDir(const char* cachedir) {fOutputCacheDir=cachedir;}
  void SetConfigFileName(const char* file) {fConfigFile=file;}
  
  const TString GetDrawString();
  const TString GetDrawOptionString();
  const char* GetCustomDrawString() const {return fComboCustomDraw->GetTextEntry()?fComboCustomDraw->GetTextEntry()->GetText():"";}
  void GetCutString(TString &cutStr);
  TChain* GetChain() const {return fTree;}
  //
  TGTextEntry* GetDrawEntry() {return fComboCustomDraw->GetTextEntry();}
  TGTextEntry* GetCutsEntry() {return fComboCustomCuts->GetTextEntry();}
  TGTextEntry* GetDrawOptEntry() {return fComboAddDrawOpt->GetTextEntry();}
  //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 DoNewSelectionAliases();
  void DoAddAlias();
  void DoDelAlias();
  void UpdateAliasList();
  TCanvas * GetCanvas(){ return fCanvMain->GetCanvas();}
 private:
  TFile*  fFile;                          //file that keeps the tree
  TChain*  fTree;                         //internal tree
  AliTPCCalibViewerGUI *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
  TString fConfigFile;                    //configuration file keeping active branches and branch descriptions
  AliTPCConfigParser *fConfigParser;      //configuration parser
  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'
  TGCheckButton       *fChkDrawOptSparse;   // draw option 'sparse'
  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
  TGGroupFrame        *fContAliases;         // container to keep data point information
  TGListBox           *fListAliases;        // list of aliases
  //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 Double_t *xArr);
  void SubstituteUnderscores(TString &s);
  void GetHistogramTitle(TString &title);
  void AdjustYRange();
private:
  AliTPCCalibViewerGUItime(const AliTPCCalibViewerGUItime &v);
  AliTPCCalibViewerGUItime &operator = (const AliTPCCalibViewerGUItime &v);         // assignment operator
  
  ClassDef(AliTPCCalibViewerGUItime, 0)
    
};

////////////////////////////////////////////////////////////////////////
//
//   GUI Alias frame
//
////////////////////////////////////////////////////////////////////////

class AliTPCCalibViewerGUItimeAddAliasFrame : public TObject {
public:
  AliTPCCalibViewerGUItimeAddAliasFrame(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h,
             UInt_t options, AliTPCCalibViewerGUItime *gui, TString strAlias="");
  virtual ~AliTPCCalibViewerGUItimeAddAliasFrame();
  
   // slots
  void DoOK();
  void DoCancel();
  

private:
  TGTransientFrame    *fMain;           //Main frame
  TGTextEntry         *fTxt1, *fTxt2;   //text input

  AliTPCCalibViewerGUItime *fGUI;       //pointer to mother process

  AliTPCCalibViewerGUItimeAddAliasFrame(const AliTPCCalibViewerGUItimeAddAliasFrame &r);
  AliTPCCalibViewerGUItimeAddAliasFrame &operator = (const AliTPCCalibViewerGUItimeAddAliasFrame &r);

  ClassDef(AliTPCCalibViewerGUItimeAddAliasFrame,0)
};

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