]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCCalibViewerGUItime.cxx
TPC module
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibViewerGUItime.cxx
diff --git a/TPC/AliTPCCalibViewerGUItime.cxx b/TPC/AliTPCCalibViewerGUItime.cxx
deleted file mode 100644 (file)
index 9ff9b90..0000000
+++ /dev/null
@@ -1,1599 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
-
-
-#include <iostream>
-//Root includes
-#include <TROOT.h>
-#include <TDirectory.h>
-#include <TStyle.h>
-#include <TCanvas.h>
-#include <TPad.h>
-#include <TVirtualPad.h>
-#include <TObject.h>
-#include <TObjArray.h>
-#include <TObjString.h>
-#include <TSystem.h>
-#include <TVector.h>
-#include <TH1.h>
-#include <TCut.h>
-#include <TFile.h>
-#include <TTree.h>
-#include <TChain.h>
-#include <TBranch.h>
-#include <TIterator.h>
-#include <TGraph.h>
-#include <TAxis.h>
-#include <TTimeStamp.h>
-#include <TMath.h>
-#include <TMap.h>
-//
-#include <TGFileDialog.h>
-#include <TGInputDialog.h>
-//
-#include <TGButton.h>
-#include <TGListBox.h>
-#include <TGComboBox.h>
-#include <TGNumberEntry.h>
-#include <TGLayout.h>
-#include <TRootEmbeddedCanvas.h>
-#include <TGSplitter.h>
-#include <TGButtonGroup.h>
-#include <TGLabel.h>
-#include <TGTab.h>
-#include <TGString.h>
-
-//AliRoot includes
-#include <AliLog.h>
-#include "AliTPCCalibViewerGUI.h"
-#include "AliTPCCalibViewer.h"
-#include "AliTPCcalibDB.h"
-#include "AliTPCcalibDButil.h"
-#include "AliTPCConfigParser.h"
-
-#include "AliTPCCalibViewerGUItime.h"
-
-ClassImp(AliTPCCalibViewerGUItime)
-
-AliTPCCalibViewerGUItime::AliTPCCalibViewerGUItime(const TGWindow *p, UInt_t w, UInt_t h) :
-TGCompositeFrame(p,w,h),
-  fFile(0x0),
-  fTree(0x0),
-  fCalibViewerGUI(0x0),
-  fCalibViewerGUItab(0x0),
-  fCurrentHist(0x0),
-  fCurrentGraph(0x0),
-  fCurrentRunDetails(-1),
-  fOutputCacheDir("/tmp"),
-  fDrawString(""),
-  fConfigFile(""),
-  fConfigParser(new AliTPCConfigParser),
-  fIsCustomDraw(kFALSE),
-  fRunNumbers(10),
-  fTimeStamps(10),
-  fValuesX(10),
-  fValuesY(10),
-  fNoGraph(kFALSE),
-  fGraphLimitEntries(10000),
-  fMapRefTrees(new TMap),
-  //GUI elements
-  //main canvas Top part, bottom part
-  fContTopBottom(0x0),
-  //top left, centre, right
-  fContLCR(0x0),
-  //content left
-  fContLeft(0x0),
-  fContDrawOpt(0x0),
-  fChkDrawOptSame(0x0),
-  fChkDrawOptSparse(0x0),
-  fComboAddDrawOpt(0x0),
-  fContDrawSel(0x0),
-  fContDrawSelSubRunTime(0x0),
-  fRadioXhist(0x0),
-  fRadioXrun(0x0),
-  fRadioXtime(0x0),
-  fListVariables(0x0),
-  fComboRunType(0x0),
-  fLblRunType(0x0),
-  fNmbPar(0x0),
-  fLblPar(0x0),
-  fListCalibType(0x0),
-  fContCalibType(0x0),
-  //content centre
-  fContCenter(0x0),
-  fCanvMain(0x0),
-  //content right
-  fContRight(0x0),
-  fContValues(0x0),
-  fLblRunNumber(0x0),
-  fLblRunTime(0x0),
-  fLblValueX(0x0),
-  fLblValueY(0x0),
-  fLblRunNumberVal(0x0),
-  fLblRunTimeVal(0x0),
-  fLblValueXVal(0x0),
-  fLblValueYVal(0x0),
-  fBtnDumpRuns(0x0),
-  fContAliases(0x0),
-  fListAliases(0x0),
-  //content bottom
-  fContCustom(0x0),
-  fContCustomCuts(0x0),
-  fLblCustomDraw(0x0),
-  fLblCustomCuts(0x0),
-  fComboCustomDraw(0x0),
-  fComboCustomCuts(0x0),
-  fTrashBox(new TObjArray)
-{
-  //
-  // ctor
-  //
-  fMapRefTrees->SetOwnerKeyValue();
-  fTrashBox->SetOwner();
-  DrawGUI(p,w,h);
-  gStyle->SetMarkerStyle(20);
-  gStyle->SetMarkerSize(0.5);
-  SetInitialValues();
-}
-//______________________________________________________________________________
-AliTPCCalibViewerGUItime::~AliTPCCalibViewerGUItime(){
-  //
-  // dtor
-  //
-  delete fConfigParser;
-  delete fTrashBox;
-  delete fMapRefTrees;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h) {
-   //
-   // draw the GUI
-   //
-   // ======================================================================
-   // ************************* Display everything *************************
-   // ======================================================================
-  
-  SetCleanup(kDeepCleanup);
-  
-   // *****************************************************************************
-   // ************************* content of this MainFrame *************************
-   // *****************************************************************************
-   // top level container with horizontal layout
-  fContTopBottom = new TGCompositeFrame(this, w, h, kVerticalFrame | kFixedWidth | kFixedHeight);
-  AddFrame(fContTopBottom, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  
-  fContLCR = new TGCompositeFrame(fContTopBottom, w, h, kHorizontalFrame | kFixedWidth | kFixedHeight);
-  fContTopBottom->AddFrame(fContLCR, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  
-   // ***********************************************************************
-   // ************************* content of fContLCR *************************
-   // ***********************************************************************
-   // left container
-  fContLeft = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
-  fContLCR->AddFrame(fContLeft, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 3, 3, 3));
-  
-   // left vertical splitter
-  TGVSplitter *splitLeft = new TGVSplitter(fContLCR);
-  splitLeft->SetFrame(fContLeft, kTRUE);
-  fContLCR->AddFrame(splitLeft, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
-  
-   // right container
-  fContRight = new TGCompositeFrame(fContLCR, 150, 200, kVerticalFrame | kFixedWidth | kFitHeight);
-  fContLCR->AddFrame(fContRight, new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandY, 3, 5, 3, 3));
-  
-   // center container
-  fContCenter = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
-  fContLCR->AddFrame(fContCenter, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  
-   // right vertical splitter
-  TGVSplitter *splitRight = new TGVSplitter(fContLCR);
-  splitRight->SetFrame(fContRight, kFALSE);
-  fContLCR->AddFrame(splitRight, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
-  
-  
-   // ========================================================================
-   // ************************* content of fContLeft *************************
-   // ========================================================================
-   // --- draw button and tabLeft ---
-  // draw options
-  fContDrawOpt = new TGGroupFrame(fContLeft, "Draw options", kVerticalFrame | kFitWidth | kFitHeight);
-  fContLeft->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-
-  TGCompositeFrame *cfr = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
-  fContDrawOpt->AddFrame(cfr, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX , 0, 0, 0, 0));
-  
-  fChkDrawOptSame = new TGCheckButton(cfr, "Same");
-  cfr->AddFrame(fChkDrawOptSame, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-  fChkDrawOptSame->SetToolTipText("Add draw option 'same'");
-
-  fChkDrawOptSparse = new TGCheckButton(cfr, "Sparse");
-  cfr->AddFrame(fChkDrawOptSparse, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-  fChkDrawOptSparse->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "DoNewSelection()");
-  fChkDrawOptSparse->SetToolTipText("In case of run trending only plot runs with information");
-  
-  // additional draw options combo box
-  fComboAddDrawOpt = new TGComboBox(fContDrawOpt);
-  fComboAddDrawOpt->Resize(0, 22);
-  fComboAddDrawOpt->EnableTextInput(kTRUE);
-  fContDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-//   fComboAddDrawOpt->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral(=14)");
-//   fComboAddDrawOpt->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
-  fComboAddDrawOpt->GetTextEntry()->SetText("",kFALSE);
-  
-  // draw selection group
-  fContDrawSel = new TGGroupFrame(fContLeft, "Draw selection", kVerticalFrame | kFitWidth | kFitHeight);
-  fContLeft->AddFrame(fContDrawSel, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 10, 0));
-  //x-axis variables selection, Run of Time
-  fContDrawSelSubRunTime = new TGCompositeFrame(fContDrawSel, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
-  fContDrawSel->AddFrame(fContDrawSelSubRunTime, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX , 0, 0, 0, 0));
-  
-  // ------------------------- content of fContDrawOpt -------------------------
-  // 
-  // Run radio button
-    // Time radio button
-  fRadioXhist = new TGRadioButton(fContDrawSelSubRunTime, "hist", kRadioXhist);
-  fContDrawSelSubRunTime->AddFrame(fRadioXhist, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-  fRadioXhist->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "HandleButtonsDrawSel()");
-  fRadioXhist->SetToolTipText("Draw the distribution of the variable");
-  
-  fRadioXrun = new TGRadioButton(fContDrawSelSubRunTime, ":Run", kRadioXrun);
-  fContDrawSelSubRunTime->AddFrame(fRadioXrun, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
-  fRadioXrun->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "HandleButtonsDrawSel()");
-  fRadioXrun->SetToolTipText("Use run number as x-value");
-  
-  // Time radio button
-  fRadioXtime = new TGRadioButton(fContDrawSelSubRunTime, ":Time", kRadioXtime);
-  fContDrawSelSubRunTime->AddFrame(fRadioXtime, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
-  fRadioXtime->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "HandleButtonsDrawSel()");
-  fRadioXtime->SetToolTipText("Use time stamp number as x-value");
-  
-  
-  // list of variables
-  fListVariables = new TGListBox(fContDrawSel);
-  fContDrawSel->AddFrame(fListVariables, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  fListVariables->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoNewSelection()");
-
-  
-//-------------------- run type selection ------------------------
-  // Parameter label
-  fLblRunType = new TGLabel(fContDrawSel, "Run Type:");
-  fLblRunType->SetTextJustify(kTextLeft);
-  fContDrawSel->AddFrame(fLblRunType, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  
-  fComboRunType = new TGComboBox(fContDrawSel);
-  fComboRunType->EnableTextInput(kFALSE);
-  fContDrawSel->AddFrame(fComboRunType, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  fComboRunType->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoDraw()");
-//   fComboRunType->SetEnabled(kFALSE);
-  fComboRunType->Resize(0, 22);
-  
-  //-------------------- parameter selection ------------------------
-  // Parameter label
-  fLblPar = new TGLabel(fContDrawSel, "Parameter:");
-  fLblPar->SetTextJustify(kTextLeft);
-  fContDrawSel->AddFrame(fLblPar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  
-  fNmbPar = new TGNumberEntry(fContDrawSel, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 0, 71);
-  fContDrawSel->AddFrame(fNmbPar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  fNmbPar->Connect("ValueSet(Long_t)", "AliTPCCalibViewerGUItime", this, "DoParLimitChange()");
-  fNmbPar->SetState(kFALSE);
-  
-  //-------------------- calibration type selection ------------------------
-  // label
-  // draw selection group
-  fContCalibType = new TGGroupFrame(fContLeft, "Calib type selection", kVerticalFrame | kFitWidth | kFitHeight);
-  fContLeft->AddFrame(fContCalibType, new TGLayoutHints(kLHintsExpandX , 0, 0, 10, 0));
-    
-    // list of variables
-  fListCalibType = new TGListBox(fContCalibType);
-  fContCalibType->AddFrame(fListCalibType, new TGLayoutHints(kLHintsNormal | kLHintsExpandX , 0, 0, 0, 0));
-  fListCalibType->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoChangeSelectionList()");
-  fListCalibType->Resize(0,88);
-  fListCalibType->SetMultipleSelections();
-  
-  
-     // ==========================================================================
-   // ************************* content of fContCenter *************************
-   // ========================================================================
-   // main drawing canvas
-  fCanvMain = new TRootEmbeddedCanvas("GUItime_Canvas", fContCenter, 200, 200, kFitWidth | kFitHeight);
-  fContCenter->AddFrame(fCanvMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  fCanvMain->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)", "AliTPCCalibViewerGUItime", this, "MouseMove(Int_t, Int_t, Int_t, TObject*)");
-//   fCanvMain->GetCanvas()->Connect("RangeAxisChanged()", "AliTPCCalibViewerGUItime", this, "GetMinMax()");
-  fCanvMain->GetCanvas()->SetToolTipText("The Main_Canvas, here your plots are displayed.");
-  fCanvMain->GetCanvas()->SetRightMargin(0.062);
-  fCanvMain->GetCanvas()->SetLeftMargin(0.15);
-  
-   // =========================================================================
-   // ************************* content of fContRight *************************
-   // ========================================================================
-  //group frame for value information
-  fContValues = new TGGroupFrame(fContRight, "Data point info", kVerticalFrame | kFitWidth | kFitHeight);
-  fContRight->AddFrame(fContValues, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-  //set layout manager
-  fContValues->SetLayoutManager(new TGMatrixLayout(fContValues, 0, 2, 5));
-  //value information labels
-
-  //run number label
-  fLblRunNumber = new TGLabel(fContValues, "Run:");
-  fLblRunNumber->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblRunNumber, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-  //run number
-  fLblRunNumberVal = new TGLabel(fContValues, "000000");
-  fLblRunNumberVal->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblRunNumberVal, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
-  //time stamp label
-  fLblRunTime = new TGLabel(fContValues, "Time:");
-  fLblRunTime->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblRunTime, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-  //run number
-  fLblRunTimeVal = new TGLabel(fContValues, "00.00.0000\n00:00:00");
-  fLblRunTimeVal->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblRunTimeVal, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
-  //value label x
-  fLblValueX = new TGLabel(fContValues, "x-Value:");
-  fLblValueX->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblValueX, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-  //value x
-  fLblValueXVal = new TGLabel(fContValues, "00.000e+00");
-  fLblValueXVal->SetTextJustify(kTextRight);
-  fContValues->AddFrame(fLblValueXVal, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  //value label y
-  fLblValueY = new TGLabel(fContValues, "y-Value:");
-  fLblValueY->SetTextJustify(kTextLeft);
-  fContValues->AddFrame(fLblValueY, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-  //value y
-  fLblValueYVal = new TGLabel(fContValues, "00.000e+00");
-  fLblValueYVal->SetTextJustify(kTextRight);
-  fContValues->AddFrame(fLblValueYVal, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-   // draw button
-  fBtnDumpRuns = new TGTextButton(fContRight, "&Dump runs");
-  fContRight->AddFrame(fBtnDumpRuns, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-  fBtnDumpRuns->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "DoDumpRuns()");
-  fBtnDumpRuns->SetToolTipText("Press to dump the run numbers of the current selection.");
-  //group frame for value information
-  fContAliases = new TGGroupFrame(fContRight, "Aliases", kVerticalFrame | kFitWidth | kFitHeight);
-  fContRight->AddFrame(fContAliases, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 10, 0));
-  // list of aliases
-  fListAliases = new TGListBox(fContAliases);
-  fContAliases->AddFrame(fListAliases, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  fListAliases->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoNewSelectionAliases()");
-//   fListAliases->Resize(0,88);
-  //buttons
-  TGCompositeFrame *frame1 = new TGCompositeFrame(fContAliases, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
-  fContAliases->AddFrame(frame1, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX , 0, 0, 0, 0));
-  // add button
-  TGTextButton *btnAdd = new TGTextButton(frame1, "&Add");
-  frame1->AddFrame(btnAdd, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-  btnAdd->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "DoAddAlias()");
-  btnAdd->SetToolTipText("Press to add an alias.");
-  btnAdd->Resize(0,22);
-  // del button
-  TGTextButton *btnDel = new TGTextButton(frame1, "&Del");
-  frame1->AddFrame(btnDel, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-  btnDel->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "DoDelAlias()");
-  btnDel->SetToolTipText("Press to delete the selected alias.");
-  btnDel->Resize(0,22);
-  // update button
-  TGTextButton *btnUp = new TGTextButton(frame1, "&Upd");
-  frame1->AddFrame(btnUp, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-  btnUp->Connect("Clicked()", "AliTPCCalibViewerGUItime", this, "UpdateAliasList()");
-  btnUp->SetToolTipText("Press to update the alias list.");
-  btnUp->Resize(0,22);
-  
-
-  
-   // =========================================================================
-   // ****************** bottom content of fContTopBottom *********************
-   // =========================================================================
-  
-  // custom options container
-  // --- fComboCustom --- the custom draw line on the very low
-  fContCustom = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
-  fContTopBottom->AddFrame(fContCustom, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
-  
-         // ------------------------- content of fContCustom -------------------------
-  fLblCustomDraw = new TGLabel(fContCustom, "Custom draw: ");
-  fLblCustomDraw->SetTextJustify(kTextLeft);
-  fContCustom->AddFrame(fLblCustomDraw, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
-         // text field for custom draw command
-  fComboCustomDraw = new TGComboBox(fContCustom);
-//   fComboCustomDraw->Resize(0, fLblValueY->GetDefaultHeight());
-  fComboCustomDraw->Resize(0, 22);
-  fComboCustomDraw->EnableTextInput(kTRUE);
-  fContCustom->AddFrame(fComboCustomDraw, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  fComboCustomDraw->Connect("ReturnPressed()", "AliTPCCalibViewerGUItime", this, "DoCustomDraw()");
-  fComboCustomDraw->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoCustomDraw()");
-  fComboCustomDraw->GetTextEntry()->SetText("",kFALSE);
-  
-      // additional cuts container
-  fContCustomCuts = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
-  fContTopBottom->AddFrame(fContCustomCuts, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
-  
-         // ------------------------- content of fContCustomCuts -------------------------
-  fLblCustomCuts = new TGLabel(fContCustomCuts, "Custom cuts:  ");
-  fLblCustomCuts->SetTextJustify(kTextLeft);
-  fContCustomCuts->AddFrame(fLblCustomCuts, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
-         // combo text field for additional cuts
-  fComboCustomCuts = new TGComboBox(fContCustomCuts);
-//   fComboCustomCuts->Resize(0, fLblValueY->GetDefaultHeight());
-  fComboCustomCuts->Resize(0, 22);
-  fComboCustomCuts->EnableTextInput(kTRUE);
-  fContCustomCuts->AddFrame(fComboCustomCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-  fComboCustomCuts->Connect("ReturnPressed()", "AliTPCCalibViewerGUItime", this, "DoCustomCutsDraw()");
-  fComboCustomCuts->Connect("Selected(Int_t)", "AliTPCCalibViewerGUItime", this, "DoCustomCutsDraw()");
-  fComboCustomCuts->GetTextEntry()->SetText("",kFALSE);
-  
-  SetWindowName("AliTPCCalibViewer GUI - Time");
-  MapSubwindows();
-  Resize(GetDefaultSize());
-  MapWindow();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::SetInitialValues(){
-  //
-  // Set inital selections of the gui
-  //
-  fRadioXrun->SetState(kButtonDown);
-  fRadioXtime->SetState(kButtonUp);
-}
-
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UseFile(const char* fileName, const char* treeName) {
-  //
-  // retrieve tree from file
-  //
-  TObjArray *arr=0x0;
-  TString file(fileName);
-  if (file.Contains("://")) {
-    if (file.Contains(";")) {
-      arr=file.Tokenize(";");
-    } else {
-      arr=new TObjArray;
-      arr->Add(new TObjString(fileName));
-    }
-  } else {
-    TString s=gSystem->GetFromPipe(Form("ls %s",fileName));
-    arr=s.Tokenize("\n");
-  }
-
-  if (!arr) return;
-  TIter next(arr);
-  TObject *o=0;
-  if (fTree) delete fTree;
-  fTree=new TChain(treeName);
-  while ( (o=next()) ){
-    fTree->AddFile(o->GetName());
-  }
-  arr->SetOwner();
-  delete arr;
-  if (!CheckChain()) return;
-  UseConfigFile(fConfigFile.Data());
-  Reload();
-  
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UseChain(TChain *const chain  = 0)
-{
-  //
-  //
-  //
-  fTree=chain;
-  if (!CheckChain()) return;
-  //set configuration file
-  UseConfigFile(fConfigFile.Data());
-  Reload();
-}
-//______________________________________________________________________________
-Bool_t AliTPCCalibViewerGUItime::CheckChain()
-{
-  //
-  // check whether cahin has entries
-  // decide whether to draw graphs in 2D
-  //
-  if (!fTree) return kFALSE;
-  fTree->Lookup();
-  Long64_t entries=fTree->GetEntries();
-  if (entries==0){
-    AliError("No entries found in chain");
-    return kFALSE;
-  }
-  //check whether to draw graphs
-  CheckDrawGraph();
-  return kTRUE;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UseConfigFile(const char* file)
-{
-  //
-  // Use 'file' as configuration file
-  //
-  fConfigFile=file;
-  fConfigParser->ParseConfigFileTxt(fConfigFile.Data());
-  FillCalibTypes();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::FillRunTypes()
-{
-  //
-  //Loop over the tree entries and fill the run types
-  //
-  if (!fTree) return;
-  Int_t id=0;
-  fComboRunType->RemoveAll();
-  fComboRunType->AddEntry("ALL",id++);
-  fComboRunType->Select(0,kFALSE);
-  if (!fTree->GetBranch("runType.")) return;
-  TObjString *runType=0x0;
-  Int_t nevets=fTree->GetEntries();
-  fTree->SetBranchStatus("*",0);
-  fTree->SetBranchStatus("runType.*",1);
-  fTree->SetBranchAddress("runType.",&runType);
-  for (Int_t iev=0;iev<nevets;++iev){
-    fTree->GetEntry(iev);
-    TString type=runType->String();
-    if (!type.IsNull()&&!fComboRunType->FindEntry(type)) fComboRunType->AddEntry(type,id++);
-  }
-  fTree->ResetBranchAddresses();
-  fTree->SetBranchStatus("*",1);
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::FillCalibTypes()
-{
-  //
-  // loop over configuration and fill calibration types
-  //
-  Int_t id=0;
-  fListCalibType->RemoveAll();
-  TObject *o=0x0;
-  fConfigParser->ResetIter();
-  TString type;
-  while ( (o=fConfigParser->NextKey()) ){
-    type=fConfigParser->GetData(o,kCalibType);
-    //remove whitespcaces
-    type.Remove(TString::kBoth,' ');
-    type.Remove(TString::kBoth,'\t');
-    if (type.IsNull()) type="UNSPECIFIED";
-//     printf("CalibType: '%s'\n",type.Data());
-    if (!fListCalibType->FindEntry(type.Data())) {
-      fListCalibType->AddEntry(type.Data(),id);
-      fListCalibType->Select(id++);
-    }
-  }
-  //add type for unspecified calibration type
-  type="UNSPECIFIED";
-  if (!fListCalibType->FindEntry(type.Data())) {
-    fListCalibType->AddEntry(type.Data(),id);
-    fListCalibType->Select(id++);
-  }
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::CheckDrawGraph()
-{
-  //
-  // Check whether to draw graphs in 2D mode based on the number of entries in the chain
-  // GetEstimate() returns the maximum size of the arrays stored in GetV1()...
-  //
-  if (!fTree) return;
-  fNoGraph=kTRUE;
-  if (fTree->GetEntries()<fTree->GetEstimate()) fNoGraph=kFALSE;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::Reload(Int_t first)
-{
-  //
-  // reload the gui contents, this is needed after the input tree has changed
-  //
-
-  if ( !fTree ) return;
-  //in case of the first call create run type and calibration type entries
-  if (first){
-    FillRunTypes();
-    FillCalibTypes();
-  }
-  //activate all branches
-  fTree->SetBranchStatus("*",1);
-  //reset variables list
-  fListVariables->RemoveAll();
-  //get selected calibration types
-  TList calibTypes;
-  fListCalibType->GetSelectedEntries(&calibTypes);
-  
-  TObjArray *branchList = fTree->GetListOfBranches();
-  if ( !branchList ) return;
-  TIter nextBranch(branchList);
-  Int_t idCount=0,id=0;
-  TObject *objBranch=0;
-  while ( (objBranch=nextBranch()) ){
-    TString branchName(objBranch->GetName());
-    TString branchTitle(objBranch->GetName());
-    if (branchName == "run" || branchName == "time" || branchName == "runType.") continue;
-    Bool_t active=kTRUE;
-    TString calibType="UNSPECIFIED";
-    if (fConfigParser){
-      const TObject *key=(*fConfigParser)(branchName.Data());
-      if (key){
-        //test if branch is active
-        active=fConfigParser->GetValue(branchName.Data(),kBranchOnOff);
-        id=(*fConfigParser)()->IndexOf(key);
-//         branchTitle=fConfigParser->GetData(key,kBranchTitle);
-        calibType=fConfigParser->GetData(key,kCalibType);
-      }
-      else{
-        id=1000+idCount;
-      }
-    } else {
-      id=idCount;
-    }
-    if (calibType.IsNull()) calibType="UNSPECIFIED";
-    //check if branch is in selected calibration types
-    //if not, don't show it in the list and deactivate the branch.
-    Bool_t calibActive=kFALSE;
-    TIter nextCalib(&calibTypes);
-    TObject *objCalib=0;
-    while ( (objCalib=nextCalib()) )
-      if (calibType==objCalib->GetTitle()) calibActive=kTRUE;
-    active&=calibActive;
-    if (!active){
-      TString s=branchName;
-      if (branchName.EndsWith(".")) s+="*";
-//       fTree->SetBranchStatus(s.Data(),0);
-      continue;
-    }
-//     fListVariables->AddEntry(SubstituteUnderscores(branchTitle.Data()),id);
-    fListVariables->AddEntry(branchTitle.Data(),id);
-    ++idCount;
-  }
-  //trick to display modifications
-  fListVariables->Resize(fListVariables->GetWidth()-1, fListVariables->GetHeight());
-  fListVariables->Resize(fListVariables->GetWidth()+1, fListVariables->GetHeight());
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::AddReferenceTree(const char* treeFileName, const char* refName)
-{
-  //
-  // map of reference trees that should always be attached to the CalibViewerGUI
-  //
-  fMapRefTrees->Add(new TObjString(refName), new TObjString(treeFileName));
-
-}
-//______________________________________________________________________________
-const TString AliTPCCalibViewerGUItime::GetDrawString(){
-  //
-  // create draw string for ttree by combining the user requestsa
-  //
-  
-  TString selectedVariable="";
-  Int_t id=-1;
-  if (!fListVariables->GetSelectedEntry()) return "";
-  selectedVariable = fListVariables->GetSelectedEntry()->GetTitle();
-  id=fListVariables->GetSelectedEntry()->EntryId();
-//   printf("id: %d\n",id);
-  TString branchName=selectedVariable;
-  if (fConfigParser){
-    const TObject *key=(*fConfigParser)(id);
-    if (key) branchName=(*fConfigParser)(id)->GetName();
-  }
-  //treat case of TVector
-  if (branchName.EndsWith(".")){
-    Int_t par = (Int_t)(fNmbPar->GetNumber());
-    branchName.Append(Form("fElements[%d]",par));
-  }
-//   if (fRadioXrun->GetState()==kButtonDown)
-//     selectedVariable.Append(":run");
-//   if (fRadioXtime->GetState()==kButtonDown)
-//     selectedVariable.Append(":time");
-  
-  return branchName;
-}
-//______________________________________________________________________________
-const TString AliTPCCalibViewerGUItime::GetDrawOptionString(){
-  //
-  // get user selected draw options
-  //
-  TString drawOpt;
-  if (fComboAddDrawOpt->GetSelectedEntry()) drawOpt=fComboAddDrawOpt->GetSelectedEntry()->GetTitle();
-  if (fChkDrawOptSame->GetState()==kButtonDown && !drawOpt.Contains("same",TString::kIgnoreCase))
-    drawOpt+="same";
-  return drawOpt;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::GetCutString(TString &cutStr){
-  //
-  // create cut string
-  //
-  TCut cuts(fComboCustomCuts->GetTextEntry()->GetText());
-  TString runType="";
-  if (fComboRunType->GetSelectedEntry()) runType=fComboRunType->GetSelectedEntry()->GetTitle();
-  if (runType!="ALL"&&!runType.IsNull()) cuts+=Form("runType.String().Data()==\"%s\"",runType.Data());
-  cutStr=cuts.GetTitle();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UpdateValueArrays(Bool_t withGraph, const Double_t *xArr)
-{
-  //
-  //
-  //
-  if (!withGraph){
-    fValuesX.ResizeTo(1);
-    fValuesY.ResizeTo(1);
-    fRunNumbers.ResizeTo(1);
-    fTimeStamps.ResizeTo(1);
-  } else {
-    const Long64_t nrows=fTree->GetSelectedRows();
-    fValuesX.ResizeTo(nrows);
-    fValuesY.ResizeTo(nrows);
-    fRunNumbers.ResizeTo(nrows);
-    fTimeStamps.ResizeTo(nrows);
-    long long *index=new long long[nrows];
-
-    //sort data
-    Int_t nTime0=0;
-    for (Int_t i=0;i<fTree->GetSelectedRows();++i){
-      if (fTree->GetV2()[i]<1) ++nTime0;
-    }
-    
-    if (nTime0==fTree->GetSelectedRows()){
-        TMath::Sort(nrows,fTree->GetV1(),index,kFALSE);
-    } else {
-      TMath::Sort(nrows,fTree->GetV2(),index,kFALSE);
-    }
-
-    Double_t lastRun=-1.;
-    Int_t entries=0;
-    const Bool_t drawSparse=(fRadioXrun->GetState()==kButtonDown && fChkDrawOptSparse->GetState()==kButtonDown);
-    for (Long64_t i=0; i<nrows; ++i){
-      // in case of sparse drawing only use the first entry per run
-      Double_t run  = fTree->GetV1()[index[i]];
-      Double_t xval = xArr[index[i]];
-      
-      if (drawSparse){
-        if (TMath::Abs(lastRun-run)<.1) {
-          lastRun=run;
-          continue;
-        }
-        xval=entries+0.5;
-      }
-      fValuesX.GetMatrixArray()[entries]=xval;
-      fValuesY.GetMatrixArray()[entries]=fTree->GetV3()[index[i]];
-      fRunNumbers.GetMatrixArray()[entries]=run;
-      fTimeStamps.GetMatrixArray()[entries]=fTree->GetV2()[index[i]];
-      lastRun=run;
-      ++entries;
-    }
-    
-    if (drawSparse){
-      fValuesX.ResizeTo(entries);
-      fValuesY.ResizeTo(entries);
-      fRunNumbers.ResizeTo(entries);
-      fTimeStamps.ResizeTo(entries);
-      //      printf("entries: %d\n",entries);
-    }
-    
-    delete [] index;
-  }
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::GetHistogramTitle(TString &title)
-{
-  //
-  // Create string for histogram title
-  //
-
-  title=fDrawString;
-  Int_t pos=title.First(">>");
-  if (pos>0) title=title(0,pos);
-//   if (!fIsCustomDraw){
-    if (fRadioXrun->GetState()==kButtonDown){
-      title+=":Run";
-    } else if (fRadioXtime->GetState()==kButtonDown){
-      title+=":Date";
-    }
-//   }
-  TString cuts;
-  GetCutString(cuts);
-  TObjArray *arr=title.Tokenize(":");
-  TObject *o=0x0;
-  title+=" {";
-  title+=cuts;
-  title+="}";
-  TIter next(arr,kIterBackward);
-  while ( (o=next()) ){
-    TString varName=o->GetName();
-    title+=";";
-    //substitue variable names with names in configuration file if available
-    if ((*fConfigParser)()->GetEntries()){
-      TString branchName=varName;
-      Int_t par=0;
-      if (branchName.Contains('.')) branchName=branchName(0,branchName.First('.')+1);
-      //chek if a configuration for that branch is available
-      const TObject *oBranch=(*fConfigParser)(branchName.Data());
-      if (oBranch){
-        TString branchTitle=fConfigParser->GetData(oBranch,kBranchTitle);
-        if (!branchTitle.IsNull()){
-          //check for TVectorT type branch
-          //add parameter name if available
-          if (varName.Contains("fElements")){
-            TString parStr=varName(varName.First('[')+1,varName.Length()-varName.First('[')-2);
-            par=parStr.Atoi();
-            branchTitle+=": ";
-            TString yparname=fConfigParser->GetData(oBranch,par+kParamNames);
-            if (!yparname.IsNull()){
-              branchTitle+=yparname;
-            } else {
-              branchTitle+="[";
-              branchTitle+=par;
-              branchTitle+="]";
-            }
-          }
-        }
-        varName=branchTitle;
-        SubstituteUnderscores(varName);
-      }
-    }
-    title+=varName;
-  }
-  delete arr;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::AdjustYRange()
-{
-  //
-  //
-  //
-  TIter nextGraphicObject(fTrashBox);
-  TObject *o=0x0;
-  Float_t min=1,max=0;
-  while ( (o=nextGraphicObject()) ){
-    if (o->IsA()==TGraph::Class()){
-      TGraph *gr=(TGraph*)o;
-      if (min>max) {
-        min=TMath::MinElement(gr->GetN(),gr->GetY());
-        max=TMath::MaxElement(gr->GetN(),gr->GetY());
-      } else {
-        Float_t currmin=TMath::MinElement(gr->GetN(),gr->GetY());
-        Float_t currmax=TMath::MaxElement(gr->GetN(),gr->GetY());
-        if (currmax>max) max=currmax;
-        if (currmin<min) min=currmin;
-      }
-    }
-  }
-  if (min!=max){
-    if (min!=0) min=min-(max-min)/10;
-    if (max!=0) max=max+(max-min)/10;
-    fCurrentHist->SetMinimum(min);
-    fCurrentHist->SetMaximum(max);
-  }
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoDraw() {
-  //
-  // Draw graphics
-  //
-  TString drawString=fDrawString;
-  TString cutString;
-  GetCutString(cutString);
-  TString optString  = GetDrawOptionString();
-  Bool_t graphOutput=!fNoGraph;  //ttree buffer for V1, V2... too small
-  graphOutput&=(drawString.First(">>")<0); //histogram output in custom draw
-  graphOutput&=fRadioXhist->GetState()!=kButtonDown; //histogram drawing selected
-//   graphOutput&=!(fIsCustomDraw&&!fDrawString.Contains(":")); //custom draw 1D
-//   graphOutput&=fDrawString.CountChar(':')<2; //custom draw 1D
-  if (fIsCustomDraw&&fDrawString.Contains(":")) HandleButtonsDrawSel(-kRadioXhist);
-  if (fIsCustomDraw&&fDrawString.Contains(":")) HandleButtonsDrawSel(-kRadioXhist);
-  Bool_t drawSame=optString.Contains("same",TString::kIgnoreCase);
-//   optString+="goff";
-  if (graphOutput) {
-    drawString.Prepend("run:time:");
-    optString="goff";
-  }else{
-//     if (!fIsCustomDraw){
-      if (fRadioXrun->GetState()==kButtonDown){
-        drawString+=":run";
-      } else if (fRadioXtime->GetState()==kButtonDown){
-        drawString+=":time";
-      }
-//     }
-  }
-  TVirtualPad *padsave=gPad;
-  fCanvMain->GetCanvas()->cd();
-  //delete old histograms and graphs
-  if (!drawSame){
-    fTrashBox->Delete();
-    fCurrentGraph=0x0;
-    fCurrentHist=0x0;
-  }
-//   printf("%s (%s) [%s]\n",drawString.Data(), cutString.Data(), optString.Data());
-  //select data
-  fTree->Draw(drawString.Data(),cutString.Data(),optString.Data());
-  if (fTree->GetSelectedRows()==-1) return;
-  
-  TString title;
-  GetHistogramTitle(title);
-  Bool_t drawGraph=kFALSE;
-  Double_t *xArr=0;
-  if (graphOutput){
-    drawGraph=kTRUE;
-    if (fIsCustomDraw&&fDrawString.Contains(":")){
-//       fValuesX.SetElements(fTree->GetV4());
-      xArr=fTree->GetV4();
-    }else{
-      if (fRadioXrun->GetState()==kButtonDown){
-//         fValuesX.SetElements(fTree->GetV1());
-        xArr=fTree->GetV1();
-      } else if (fRadioXtime->GetState()==kButtonDown){
-//         fValuesX.SetElements(fTree->GetV2());
-        xArr=fTree->GetV2();
-      } else {
-        drawGraph=kFALSE;
-      }
-    }
-  }
-  if (xArr) UpdateValueArrays(graphOutput, xArr);
-//   if (graphOutput){
-//     if (fIsCustomDraw){
-//       if (fDrawString.Contains(":")){
-//         fValuesX.SetElements(fTree->GetV4());
-//         drawGraph=kTRUE;
-//       } else {
-//         drawGraph=kFALSE;
-//       }
-//     }else{
-//       drawGraph=kTRUE;
-//       if (fRadioXrun->GetState()==kButtonDown){
-//         fValuesX.SetElements(fTree->GetV1());
-//       } else if (fRadioXtime->GetState()==kButtonDown){
-//         fValuesX.SetElements(fTree->GetV2());
-//       } else {
-//         drawGraph=kFALSE;
-//       }
-//     }
-//   }
-//create graph according to selection
-  if (drawGraph){
-    TGraph *graph=new TGraph(fValuesX,fValuesY);
-//     graph->Sort();
-    TString grDraw="p";
-    if (!drawSame) grDraw+="a";
-    if (!fIsCustomDraw) grDraw+="l";
-    // sparse drawing, set bin labels
-    if (fRadioXrun->GetState()==kButtonDown && fChkDrawOptSparse->GetState()==kButtonDown){
-      Int_t nrows=fValuesX.GetNrows();
-      Double_t *newBins = new Double_t[nrows+1];
-      for (Int_t ibin=0; ibin<nrows+1; ++ibin) newBins[ibin]=ibin;
-      graph->GetXaxis()->Set(nrows,newBins);
-      graph->GetXaxis()->LabelsOption("v");
-      for (Int_t i=0; i<nrows;++i)
-        graph->GetXaxis()->SetBinLabel(i+1,Form("%.0f",fRunNumbers.GetMatrixArray()[i]));
-      delete [] newBins;
-    }
-    graph->Draw(grDraw.Data());
-    graph->SetEditable(kFALSE);
-    TH1 *hist=graph->GetHistogram();
-    hist->SetTitle(title.Data());
-    fTrashBox->Add(graph);
-    graph->SetLineColor(fTrashBox->GetEntries());
-    graph->SetMarkerColor(fTrashBox->GetEntries());
-    if (!drawSame) {
-      fCurrentGraph=graph;
-      fCurrentHist=hist;
-    }
-  } else {
-    TH1 *hist=fTree->GetHistogram();
-    hist->SetTitle(title.Data());
-//     hist->Draw(optString.Data());
-    fTrashBox->Add(hist);
-    hist->SetLineColor(fTrashBox->GetEntries());
-    hist->SetMarkerColor(fTrashBox->GetEntries());
-    if (!drawSame) fCurrentHist=hist;
-  }
-  
-  //Set time axis if choosen as x-variables
-//   if (fRadioXtime->GetState()==kButtonDown&&!fIsCustomDraw&&!drawSame){
-  if (fRadioXtime->GetState()==kButtonDown&&!drawSame){
-    TAxis *xaxis=fCurrentHist->GetXaxis();
-    xaxis->SetTimeFormat("#splitline{%d.%m}{%H:%M}");
-    xaxis->SetTimeDisplay(1);
-    xaxis->SetLabelOffset(xaxis->GetLabelOffset()*3);
-    xaxis->SetLabelSize(xaxis->GetLabelSize()/1.3);
-  }
-  if (!drawSame) {
-  //Set title offset
-    fCurrentHist->GetYaxis()->SetTitleOffset(1.5);
-  } else {
-    //adjust y-range
-    AdjustYRange();
-  }
-  gPad->Modified();
-  gPad->Update();
-  padsave->cd();
-}
-
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoDumpRuns()
-{
-  //
-  // Dump the current run numbers to stdout
-  //
-  Int_t npoints=fRunNumbers.GetNrows();
-  Int_t    *sortIndex = new Int_t[npoints];
-  TMath::Sort(npoints,fRunNumbers.GetMatrixArray(),sortIndex,kFALSE);
-  Int_t run=0, prevRun=-1;
-  
-  for (Int_t irun=0;irun<npoints;++irun){
-    run=(Int_t)fRunNumbers.GetMatrixArray()[sortIndex[irun]];
-    if (run!=prevRun) std::cout << Form("%d",run) << std::endl;
-    prevRun=run;
-  }
-  delete [] sortIndex;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoParLimitChange()
-{
-  //
-  //
-  //
-  UpdateParName();
-  DoDraw();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoNewSelection() {
-   //
-   // decides whether to redraw if user makes another selection
-   //
-  UpdateParLimits();
-  fDrawString=GetDrawString();
-  fIsCustomDraw=kFALSE;
-  DoDraw();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoCustomDraw()
-{
-  //
-  //
-  //
-  fDrawString=fComboCustomDraw->GetTextEntry()->GetText();
-//   if (fDrawString.Contains(">>")){
-//     Warning("DoCustomDraw","Currently no user defined histograms allowed!");
-//     return;
-//   }
-  fNmbPar->SetState(kFALSE);
-  fIsCustomDraw=kTRUE;
-  DoDraw();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoCustomCutsDraw()
-{
-  //
-  //
-  //
-  if (fIsCustomDraw) DoCustomDraw();
-  else {
-    fDrawString=GetDrawString();
-    fIsCustomDraw=kFALSE;
-    DoDraw();
-  }
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::HandleButtonsDrawSel(Int_t id)
-{
-  //
-  // Draw selection button handling (x-variable)
-  //
-
-  if (id == -1) {
-    TGButton *btn = (TGButton *) gTQSender;
-    id = btn->WidgetId();
-  }
-  
-  Bool_t doDraw=kFALSE;
-  Bool_t noDraw=kFALSE;
-  if (id<-1){
-    noDraw=kTRUE;
-    id=TMath::Abs(id);
-  }
-  switch (id) {
-  case (kRadioXhist):
-    doDraw=(fRadioXtime->GetState()==kButtonDown||fRadioXrun->GetState()==kButtonDown);
-    if (doDraw){
-      fRadioXrun->SetState(kButtonUp);
-      fRadioXtime->SetState(kButtonUp);
-      fRadioXhist->SetState(kButtonDown);
-    }
-    break;
-  case (kRadioXrun):
-    doDraw=(fRadioXtime->GetState()==kButtonDown||fRadioXhist->GetState()==kButtonDown);
-    if (doDraw){
-      fRadioXhist->SetState(kButtonUp);
-      fRadioXtime->SetState(kButtonUp);
-      fRadioXrun->SetState(kButtonDown);
-    }
-    break;
-  case (kRadioXtime):
-    doDraw=(fRadioXhist->GetState()==kButtonDown||fRadioXrun->GetState()==kButtonDown);
-    if (doDraw){
-      fRadioXrun->SetState(kButtonUp);
-      fRadioXhist->SetState(kButtonUp);
-      fRadioXtime->SetState(kButtonDown);
-    }
-    break;
-  }
-  if (doDraw&&!noDraw) DoCustomCutsDraw();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UpdateParName()
-{
-  //
-  // change parameter name
-  //
-  
-  Int_t par = (Int_t)(fNmbPar->GetNumber());
-  TString parName="";
-  Int_t id=fListVariables->GetSelectedEntry()->EntryId();
-  if (fConfigParser && (*fConfigParser)(id)) parName=fConfigParser->GetData((*fConfigParser)(id),par+kParamNames);
-  if (parName=="") parName.Form("%d",par);
-  fLblPar->SetText(Form("Parameter: %s",parName.Data()));
-  fDrawString=GetDrawString();
-  fIsCustomDraw=kFALSE;
-}
-
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UpdateParLimits()
-{
-  //
-  // Adjust limits for TVectorT based variables
-  //
-  if (!fTree) return;
-  TString selectedVariableTitle="";
-  Int_t id=-1;
-  if (!fListVariables->GetSelectedEntry()) return;
-  selectedVariableTitle = fListVariables->GetSelectedEntry()->GetTitle();
-  id=fListVariables->GetSelectedEntry()->EntryId();
-//   printf("id: %d\n",id);
-  TString selectedVariable=selectedVariableTitle;
-  const TObject *key=(*fConfigParser)(id);
-  if (key) selectedVariable=(*fConfigParser)(id)->GetName();
-  
-  if (selectedVariable.IsNull()||!selectedVariable.EndsWith(".")) {
-    fNmbPar->SetState(kFALSE);
-    fLblPar->SetText("Parameter: none");
-    return;
-  }
-  TVectorD *vD=0x0;
-  TVectorF *vF=0x0;
-  Int_t maxPar=0;
-  fTree->GetEntry(1);
-  TBranch *branch=fTree->GetTree()->GetBranch(selectedVariable.Data());
-  TString branchClass=branch->GetClassName();
-  Int_t event=0;
-  if (branchClass=="TVectorT<double>"){
-//     branch->SetAddress(&vD);
-    fTree->SetBranchAddress(selectedVariable.Data(),&vD);
-    while (maxPar<2&&event<fTree->GetEntries()){
-      fTree->GetEntry(event++);
-      maxPar=vD->GetNrows();
-    }
-  } else if (branchClass=="TVectorT<float>"){
-//     branch->SetAddress(&vF);
-    fTree->SetBranchAddress(selectedVariable.Data(),&vF);
-    while (maxPar<2&&event<fTree->GetEntries()){
-      fTree->GetEntry(event++);
-      maxPar=vF->GetNrows();
-    }
-  } else {
-    //class not known
-    fNmbPar->SetState(kFALSE);
-    return;
-  }
-//   branch->ResetAddress();
-  fTree->SetBranchAddress(selectedVariable.Data(),0x0);
-  if (fNmbPar->GetNumMax()!=maxPar-1) fNmbPar->SetNumber(0);
-  fNmbPar->SetLimitValues(0,maxPar-1);
-  fNmbPar->SetState(kTRUE);
-  UpdateParName();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::MouseMove(Int_t event, Int_t x, Int_t y, TObject */*selected*/)
-{
-  //
-  // handle mouse events in the draw canvas
-  //
-  UInt_t dd=0,mm=0,yy=0,HH=0,MM=0,SS=0,run=0;
-  Double_t valx=0.,valy=0.;
-  if (!fCurrentGraph) {
-    fLblRunNumberVal->SetText(Form("%06u",run));
-    fLblRunTimeVal->SetText(Form("%02u.%02u.%04u\n%02u:%02u:%02u",dd,mm,yy,HH,MM,SS));
-    fLblValueXVal->SetText(Form("%.3e", valx));
-    fLblValueYVal->SetText(Form("%.3e", valy));
-    return;
-  }
-  TVirtualPad *padsave=gPad;
-  fCanvMain->GetCanvas()->cd();
-  Int_t n=fValuesY.GetNrows();
-  Double_t *arr=0x0;
-  arr=fValuesX.GetMatrixArray();
-
-  Int_t minDist=1000000;
-  Int_t minPoint=-1;
-  for (Int_t i=0;i<n;++i){
-    Int_t pxp = gPad->XtoAbsPixel(gPad->XtoPad(arr[i]));
-    Int_t pyp = gPad->YtoAbsPixel(gPad->YtoPad(fValuesY[i]));
-    Int_t d   = TMath::Nint(TMath::Sqrt(TMath::Abs(pxp-x) + TMath::Abs(pyp-y)));
-    if (d < minDist) {
-      minDist  = d;
-      minPoint = i;
-    }
-  }
-  if (minDist<2){
-    TTimeStamp t((Int_t)fTimeStamps[minPoint]);
-    t.GetDate(kTRUE,0,&yy,&mm,&dd);
-    t.GetTime(kTRUE,0,&HH,&MM,&SS);
-    run=(UInt_t)fRunNumbers[minPoint];
-    valx=fValuesX[minPoint];
-    valy=fValuesY[minPoint];
-  } else {
-    dd=0;mm=0;yy=0;HH=0;MM=0;SS=0;run=0;
-    valx=0.;
-    valy=0.;
-  }
-  fLblRunNumberVal->SetText(Form("%06u",run));
-  fLblRunTimeVal->SetText(Form("%02u.%02u.%04u\n%02u.%02u.%02u",dd,mm,yy,HH,MM,SS));
-  if (fIsCustomDraw){
-    fLblValueXVal->SetText(Form("%.3e", valx));
-  }else{
-    if (fRadioXrun->GetState()==kButtonDown){
-      fLblValueXVal->SetText("Run");
-    } else if (fRadioXtime->GetState()==kButtonDown){
-      fLblValueXVal->SetText("Time");
-    }
-  }
-  fLblValueYVal->SetText(Form("%.3e", valy));
-  padsave->cd();
-  if (run==0) return;
-  if (event == kButton1Double ){
-    SetGuiTree(run);
-  }
-  //find closes point of current selection
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::SetGuiTree(Int_t run)
-{
-  //
-  // create the AliTPCCalibViewerGUI tree for run
-  // cache tree in directory fOutputCacheDir
-  // retrieve file from this directory if it already exists
-  //
-
-  //
-  //Create and set GUI tree  
-  //
-  //try to find file for run in fOutputCacheDir
-  TString fileName=fOutputCacheDir;
-  if (!fileName.EndsWith("/")) fileName+="/";
-  fileName+=Form("guiTreeRun_%d.root",run);
-  Bool_t load=kTRUE;
-  if (gSystem->AccessPathName(fileName.Data())){
-    load=AliTPCcalibDB::CreateGUITree(run,fileName.Data());
-    if (!load){
-      fCalibViewerGUI->Reset();
-      if (fCalibViewerGUItab) fCalibViewerGUItab->SetText(new TGString(Form("Detail - XXXXX")));
-      return;
-    }
-  }
-  fCalibViewerGUI->Initialize(fileName.Data());
-  if (fCalibViewerGUItab) fCalibViewerGUItab->SetText(new TGString(Form("Detail - %05d",run)));
-  
-  //
-  //Create and set Reference GUI tree
-  //
-  AliTPCcalibDButil util;
-  util.SetReferenceRun(run);
-  fileName=fOutputCacheDir;
-  if (!fileName.EndsWith("/")) fileName+="/";
-  fileName+=util.GetGUIRefTreeDefaultName();
-  //only update if file does not exist
-  if (gSystem->AccessPathName(fileName.Data())){
-    util.UpdateRefDataFromOCDB();
-    util.CreateGUIRefTree(fileName.Data());
-  }
-  
-  fCalibViewerGUI->GetViewer()->AddReferenceTree(fileName.Data(),"calPads","Ref");
-  
-  //
-  // Process additional reference trees
-  //
-  TIter nextRefTree(fMapRefTrees);
-  TObject *o=0x0;
-  //Set static reference data
-  while ( (o=nextRefTree()) ){
-    fCalibViewerGUI->GetViewer()->AddReferenceTree(fMapRefTrees->GetValue(o)->GetName(),"calPads",o->GetName());
-  }
-  fCalibViewerGUI->Reload();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::SubstituteUnderscores(TString &s)
-{
-  //
-  //
-  //
-  s.ReplaceAll("_{","|{");
-  s.ReplaceAll("_"," ");
-  s.ReplaceAll("|{","_{");
-}
-
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoNewSelectionAliases()
-{
-  //
-  //
-  //
-  if (!fTree) return;
-  TList *l=fTree->GetListOfAliases();
-  if (!l) return;
-  TString selectedVariable="";
-  if (!fListAliases->GetSelectedEntry()) return;
-  selectedVariable = fListAliases->GetSelectedEntry()->GetTitle();
-  fDrawString=selectedVariable;
-  fIsCustomDraw=kFALSE;
-  DoDraw();
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoAddAlias()
-{
-  //
-  //
-  //
-  new AliTPCCalibViewerGUItimeAddAliasFrame(gClient->GetRoot(), fContTopBottom, 400, 200, kVerticalFrame, this);
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::DoDelAlias()
-{
-  //
-  //
-  //
-  if (!fTree) return;
-  TList *l=fTree->GetListOfAliases();
-  if (!l) return;
-  TString selectedVariable="";
-  if (!fListAliases->GetSelectedEntry()) return;
-  selectedVariable = fListAliases->GetSelectedEntry()->GetTitle();
-  l->Remove(l->FindObject(selectedVariable.Data()));
-  UpdateAliasList();
-}
-
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItime::UpdateAliasList()
-{
-  //
-  //
-  //
-  printf("UpdateAliasList\n");
-  if (!fTree) return;
-  TList *l=fTree->GetListOfAliases();
-  if (!l) return;
-  TIter nextAlias(l);
-  TObject *o;
-  fListAliases->RemoveAll();
-  Int_t id=0;
-  while( (o=nextAlias()) ){
-    fListAliases->AddEntry(o->GetName(),id++);
-  }
-  fListAliases->Resize(fListAliases->GetWidth()-1, fListAliases->GetHeight());
-  fListAliases->Resize(fListAliases->GetWidth()+1, fListAliases->GetHeight());
-}
-//______________________________________________________________________________
-TObjArray* AliTPCCalibViewerGUItime::ShowGUI(const char* fileName, const char* treeName) {
-   //
-   // Initialize and show GUI for presentation for demonstration purposes
-   // or for fast standalone use
-   //
-  TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
-  frmMain->SetWindowName("AliTPCCalibViewer GUItime");
-  frmMain->SetCleanup(kDeepCleanup);
-  
-  TGTab* tabMain = new TGTab(frmMain, 1000, 600);
-  frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  
-  TGCompositeFrame* tabCont1 = tabMain->AddTab("Time");
-  TGCompositeFrame* tabCont2 = tabMain->AddTab("Detail - XXXXX");
-  
-  AliTPCCalibViewerGUItime* calibViewerTime = new AliTPCCalibViewerGUItime(tabCont1, 1000, 600);
-  tabCont1->AddFrame(calibViewerTime, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  calibViewerTime->SetConfigFileName("$ALICE_ROOT/TPC/CalibMacros/calibVarDescription.txt");
-  calibViewerTime->UseFile(fileName, treeName);
-  
-  AliTPCCalibViewerGUI* calibViewer = new AliTPCCalibViewerGUI(tabCont2, 1000, 600, 0);
-  tabCont2->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  calibViewerTime->SetCalibViewerGUI(calibViewer);
-  calibViewerTime->SetCalibViewerGUItab(tabMain->GetTabTab(1));
-  
-  
-  TObjArray *guiArray = new TObjArray();
-  guiArray->Add(calibViewerTime);
-  guiArray->Add(calibViewer);
-  
-  frmMain->MapSubwindows();
-  frmMain->Resize();
-  frmMain->MapWindow();
-  
-  return guiArray;
-}
-
-//______________________________________________________________________________
-TObjArray* AliTPCCalibViewerGUItime::ShowGUI(TChain *chain) {
-   //
-   // Initialize and show GUI for presentation for demonstration purposes
-   // or for fast standalone use
-   //
-  TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
-  frmMain->SetWindowName("AliTPCCalibViewer GUItime");
-  frmMain->SetCleanup(kDeepCleanup);
-
-  TGTab* tabMain = new TGTab(frmMain, 1000, 600);
-  frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-
-  TGCompositeFrame* tabCont1 = tabMain->AddTab("Time");
-
-  AliTPCCalibViewerGUItime* calibViewerTime = new AliTPCCalibViewerGUItime(tabCont1, 1000, 600);
-  tabCont1->AddFrame(calibViewerTime, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-  calibViewerTime->UseChain(chain);
-
-  TObjArray *guiArray = new TObjArray();
-  guiArray->Add(calibViewerTime);
-
-  frmMain->MapSubwindows();
-  frmMain->Resize();
-  frmMain->MapWindow();
-
-  return guiArray;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-//
-//   GUI Alias frame
-//
-////////////////////////////////////////////////////////////////////////
-
-
-ClassImp(AliTPCCalibViewerGUItimeAddAliasFrame)
-
-AliTPCCalibViewerGUItimeAddAliasFrame::AliTPCCalibViewerGUItimeAddAliasFrame(const TGWindow *p, const TGWindow *main,
-                                                                             UInt_t w, UInt_t h, UInt_t options,
-                                                                             AliTPCCalibViewerGUItime *gui, TString strAlias) :
-  fMain(0x0),
-  fTxt1(0x0),
-  fTxt2(0x0),
-  fGUI(0x0)
-{
-  fMain = new TGTransientFrame(p, main, w, h, options);
-  fMain->Connect("CloseWindow()", "AliTPCCalibViewerGUItimeAddAliasFrame", this, "DoCancel()");
-  fMain->DontCallClose(); // to avoid double deletions.
-  
-   // use hierarchical cleaning
-  fMain->SetCleanup(kDeepCleanup);
-
-  //layout
-  TGLayoutHints *l1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2);
-  TGLayoutHints *l2 = new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandX, 2, 2, 0, 5);
-//   TGLayoutHints *l3 = new TGLayoutHints(kLHintsTop | kLHintsRight, 5, 5, 5, 5);
-  
-  //input fields
-  TGCompositeFrame *f1 = new TGCompositeFrame(fMain, 60, 20, kVerticalFrame);
-  fMain->AddFrame(f1, l1);
-  TGCompositeFrame *frameName    = new TGCompositeFrame(f1);
-  TGCompositeFrame *frameFormula = new TGCompositeFrame(f1);
-  f1->AddFrame(frameName,l2);
-  f1->AddFrame(frameFormula,l2);
-  TGLabel *lblTxt1   = new TGLabel(frameName, "Name:");
-  TGLabel *lblTxt2   = new TGLabel(frameFormula, "Formula:");
-  fTxt1 = new TGTextEntry(frameName, new TGTextBuffer(1000));
-  fTxt2 = new TGTextEntry(frameFormula, new TGTextBuffer(1000));
-  
-  frameName->AddFrame(lblTxt1, l2);
-  frameName->AddFrame(fTxt1, l2);
-  frameFormula->AddFrame(lblTxt2, l2);
-  frameFormula->AddFrame(fTxt2, l2);
-  
-  fTxt1->Resize(350, fTxt1->GetDefaultHeight());
-  fTxt2->Resize(350, fTxt2->GetDefaultHeight());
-
-  //ok and cancel buttons
-  TGHorizontalFrame *frame = new TGHorizontalFrame(fMain, 60, 20, kFixedWidth);
-  
-  TGTextButton *okButton = new TGTextButton(frame, "&Ok", 1);
-  okButton->Connect("Clicked()", "AliTPCCalibViewerGUItimeAddAliasFrame", this, "DoOK()");
-  TGTextButton *cancelButton = new TGTextButton(frame, "&Cancel", 2);
-  cancelButton->Connect("Clicked()", "AliTPCCalibViewerGUItimeAddAliasFrame", this, "DoCancel()");
-  
-  
-  frame->AddFrame(okButton, l1);
-  frame->AddFrame(cancelButton, l1);
-  
-  frame->Resize(150, okButton->GetDefaultHeight());
-  
-  fMain->AddFrame(frame, new TGLayoutHints(kLHintsBottom | kLHintsRight, 2, 2, 5, 1));
-  
-  fGUI=gui;
-  TString aliasName, alias;
-  if (!strAlias.IsNull()){
-    TChain *c=fGUI->GetChain();
-    if (c){
-      TList *l=c->GetListOfAliases();
-      if (l){
-        TNamed *d=(TNamed*)l->FindObject(strAlias);
-        if (d){
-          aliasName=d->GetName();
-          alias=d->GetTitle();
-        }
-      }
-    }
-  }else{
-    alias=fGUI->GetCustomDrawString();
-  }
-  fTxt1->SetText(aliasName.Data(),kFALSE);
-  fTxt2->SetText(alias.Data(),kFALSE);
-
-  fMain->MapSubwindows();
-  fMain->Resize();
-  
-   // position relative to the parent's window
-  fMain->CenterOnParent();
-  
-  fMain->SetWindowName("Alias Editor");
-  
-  fMain->MapWindow();
-  
-}
-//______________________________________________________________________________
-AliTPCCalibViewerGUItimeAddAliasFrame::~AliTPCCalibViewerGUItimeAddAliasFrame()
-{
-  //
-  //
-  //
-  fMain->DeleteWindow();  // deletes fMain
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItimeAddAliasFrame::DoOK()
-{
-  //
-  //
-  //
-  TString aliasName=fTxt1->GetText();
-  TString alias=fTxt2->GetText();
-  if (!aliasName.IsNull()&&!alias.IsNull()){
-    TChain *c=fGUI->GetChain();
-    if (c){
-      c->SetAlias(aliasName.Data(),alias.Data());
-    }
-  }
-  fGUI->UpdateAliasList();
-  delete this;
-}
-//______________________________________________________________________________
-void AliTPCCalibViewerGUItimeAddAliasFrame::DoCancel()
-{
-  //
-  //
-  //
-  delete this;
-}
-