Check CVMFS_OCDB and deal with storages accordingly
authorrgrosso <Raffaele.Grosso@cern.ch>
Tue, 4 Feb 2014 10:00:31 +0000 (11:00 +0100)
committerrgrosso <Raffaele.Grosso@cern.ch>
Wed, 19 Feb 2014 13:24:11 +0000 (14:24 +0100)
In SetDefaultStorage check environment variable triggering cvmfs case:
CVMFS_OCDB. It is supposed to be set to the cvmfs path, containing
OCDB tags (list of all files seen in each OCDB at the moment when
the AliRoot tag was created) and two scripts, to get the year from the
run number and to extract the files valid for the given run.

The method ValidateCvmfsCase validates the $OCDB_PATH path
    // and modify Uri if it is "raw://"
The "alien://" uri passed to GetStorage is converted into a
"local:///cvmfs" uri inside CreateParameter called by GetStorage, via
AlienToCvmfsUri.

E.g.: OCDB_PATH="/cvmfs/alice.cern.ch/Packages/v5-04-Rev-12"
Example of expected subtree inside OCDB_PATH:
     Ideal.list.gz
  MC/Residual.list.gz
     Full.list.gz

     2009.list.gz
data/.......
     2013.list.gz

 bin/getUriFromYear.sh
     getOCDBFilesPerRun.sh

In addition:
Set indent to standard two spaces
Fixed indentation of comments foll. method header

Get only highest sub+version in L::QueryValidFiles

Let AliCDBLocal::GetId look in the list of valid fileIds and let
AliCDBLocal::GetEntry get from the list of valid FileIds

SetRun sets AliEn URI via SetDefaultStorageFromRun also in
CVMFS case, via getUriFromYear.sh script

32 files changed:
STEER/CDB/AliBaseCalibViewer.cxx
STEER/CDB/AliBaseCalibViewer.h
STEER/CDB/AliBaseCalibViewerGUI.cxx
STEER/CDB/AliCDBDump.cxx
STEER/CDB/AliCDBDump.h
STEER/CDB/AliCDBEntry.cxx
STEER/CDB/AliCDBEntry.h
STEER/CDB/AliCDBGrid.cxx
STEER/CDB/AliCDBGrid.h
STEER/CDB/AliCDBHandler.cxx
STEER/CDB/AliCDBId.cxx
STEER/CDB/AliCDBId.h
STEER/CDB/AliCDBLocal.cxx
STEER/CDB/AliCDBLocal.h
STEER/CDB/AliCDBManager.cxx
STEER/CDB/AliCDBManager.h
STEER/CDB/AliCDBMetaData.cxx
STEER/CDB/AliCDBMetaData.h
STEER/CDB/AliCDBPath.cxx
STEER/CDB/AliCDBPath.h
STEER/CDB/AliCDBRunRange.cxx
STEER/CDB/AliCDBRunRange.h
STEER/CDB/AliCDBStorage.cxx
STEER/CDB/AliCDBStorage.h
STEER/CDB/AliDCSGenDB.cxx
STEER/CDB/AliPreprocessor.cxx
STEER/CDB/AliPreprocessor.h
STEER/CDB/AliShuttleInterface.cxx
STEER/CDB/AliShuttleInterface.h
STEER/CDB/AliSplineFit.cxx
STEER/STEER/AliGeomManager.cxx
STEER/STEER/AliGeomManager.h

index c70114a..c8e80d3 100644 (file)
 ClassImp(AliBaseCalibViewer)
 
 AliBaseCalibViewer::AliBaseCalibViewer()
-                  :TObject(),
-                   fTree(0),
-                   fFile(0),
-                   fListOfObjectsToBeDeleted(0),
-                   fTreeMustBeDeleted(0), 
-                   fAbbreviation(0), 
-                   fAppendString(0)
+:TObject(),
+  fTree(0),
+  fFile(0),
+  fListOfObjectsToBeDeleted(0),
+  fTreeMustBeDeleted(0), 
+  fAbbreviation(0), 
+  fAppendString(0)
 {
   //
   // Default constructor
@@ -52,13 +52,13 @@ AliBaseCalibViewer::AliBaseCalibViewer()
 
 //_____________________________________________________________________________
 AliBaseCalibViewer::AliBaseCalibViewer(const AliBaseCalibViewer &c)
-                  :TObject(c),
-                   fTree(0),
-                   fFile(0),
-                   fListOfObjectsToBeDeleted(0),
-                   fTreeMustBeDeleted(0),
-                   fAbbreviation(0), 
-                   fAppendString(0)
+:TObject(c),
+  fTree(0),
+  fFile(0),
+  fListOfObjectsToBeDeleted(0),
+  fTreeMustBeDeleted(0),
+  fAbbreviation(0), 
+  fAppendString(0)
 {
   //
   // dummy AliBaseCalibViewer copy constructor
@@ -73,13 +73,13 @@ AliBaseCalibViewer::AliBaseCalibViewer(const AliBaseCalibViewer &c)
 
 //_____________________________________________________________________________
 AliBaseCalibViewer::AliBaseCalibViewer(TTree* tree)
-                  :TObject(),
-                   fTree(0),
-                   fFile(0),
-                   fListOfObjectsToBeDeleted(0),
-                   fTreeMustBeDeleted(0),
-                   fAbbreviation(0), 
-                   fAppendString(0)
+:TObject(),
+  fTree(0),
+  fFile(0),
+  fListOfObjectsToBeDeleted(0),
+  fTreeMustBeDeleted(0),
+  fAbbreviation(0), 
+  fAppendString(0)
 {
   //
   // Constructor that initializes the calibration viewer
@@ -93,114 +93,114 @@ AliBaseCalibViewer::AliBaseCalibViewer(TTree* tree)
 
 //_____________________________________________________________________________
 AliBaseCalibViewer::AliBaseCalibViewer(const Char_t* fileName, const Char_t* treeName)
-                  :TObject(),
-                   fTree(0),
-                   fFile(0),
-                   fListOfObjectsToBeDeleted(0),
-                   fTreeMustBeDeleted(0),
-                   fAbbreviation(0), 
-                   fAppendString(0)
-                   
+:TObject(),
+  fTree(0),
+  fFile(0),
+  fListOfObjectsToBeDeleted(0),
+  fTreeMustBeDeleted(0),
+  fAbbreviation(0), 
+  fAppendString(0)
+
 {
-   //
-   // Constructor to initialize the calibration viewer
-   // the file 'fileName' contains the tree 'treeName'
-   //
-   fFile = new TFile(fileName, "read");
-   fTree = (TTree*) fFile->Get(treeName);
-   fTreeMustBeDeleted = kTRUE;
-   fListOfObjectsToBeDeleted = new TObjArray();
-   fAbbreviation = "~";
-   fAppendString = ".fElements";
+  //
+  // Constructor to initialize the calibration viewer
+  // the file 'fileName' contains the tree 'treeName'
+  //
+  fFile = new TFile(fileName, "read");
+  fTree = (TTree*) fFile->Get(treeName);
+  fTreeMustBeDeleted = kTRUE;
+  fListOfObjectsToBeDeleted = new TObjArray();
+  fAbbreviation = "~";
+  fAppendString = ".fElements";
 }
 
 //____________________________________________________________________________
 AliBaseCalibViewer & AliBaseCalibViewer::operator =(const AliBaseCalibViewer & param)
 {
-   //
-   // assignment operator - dummy
-   // not yet working!!!
-   //
+  //
+  // assignment operator - dummy
+  // not yet working!!!
+  //
   if(&param == this) return *this;
   TObject::operator=(param);
 
 
-   fTree = param.fTree;
-   fTreeMustBeDeleted = param.fTreeMustBeDeleted;
-   fListOfObjectsToBeDeleted = param.fListOfObjectsToBeDeleted;
-   fAbbreviation = param.fAbbreviation;
-   fAppendString = param.fAppendString;
-   return (*this);
+  fTree = param.fTree;
+  fTreeMustBeDeleted = param.fTreeMustBeDeleted;
+  fListOfObjectsToBeDeleted = param.fListOfObjectsToBeDeleted;
+  fAbbreviation = param.fAbbreviation;
+  fAppendString = param.fAppendString;
+  return (*this);
 }
 
 //_____________________________________________________________________________
 AliBaseCalibViewer::~AliBaseCalibViewer()
 {
-   //
-   // AliBaseCalibViewer destructor
-   // all objects will be deleted, the file will be closed, the pictures will disappear
-   //
-   if (fTree && fTreeMustBeDeleted) {
-      fTree->SetCacheSize(0);
-      fTree->Delete();
-   }
-   if (fFile) {
-      fFile->Close();
-      fFile = 0;
-   }
-
-   for (Int_t i = fListOfObjectsToBeDeleted->GetEntriesFast()-1; i >= 0; i--) {
-      delete fListOfObjectsToBeDeleted->At(i);
-   }
-   delete fListOfObjectsToBeDeleted;
+  //
+  // AliBaseCalibViewer destructor
+  // all objects will be deleted, the file will be closed, the pictures will disappear
+  //
+  if (fTree && fTreeMustBeDeleted) {
+    fTree->SetCacheSize(0);
+    fTree->Delete();
+  }
+  if (fFile) {
+    fFile->Close();
+    fFile = 0;
+  }
+
+  for (Int_t i = fListOfObjectsToBeDeleted->GetEntriesFast()-1; i >= 0; i--) {
+    delete fListOfObjectsToBeDeleted->At(i);
+  }
+  delete fListOfObjectsToBeDeleted;
 }
 
 //_____________________________________________________________________________
 void AliBaseCalibViewer::Delete(Option_t* /*option*/) {
-   //
-   // Should be called from AliBaseCalibViewerGUI class only.
-   // If you use Delete() do not call the destructor.
-   // All objects (except those contained in fListOfObjectsToBeDeleted) will be deleted, the file will be closed.
-   //
-   
-   if (fTree && fTreeMustBeDeleted) {
-      fTree->SetCacheSize(0);
-      fTree->Delete();
-   }
-   delete fFile;
-   delete fListOfObjectsToBeDeleted;
+  //
+  // Should be called from AliBaseCalibViewerGUI class only.
+  // If you use Delete() do not call the destructor.
+  // All objects (except those contained in fListOfObjectsToBeDeleted) will be deleted, the file will be closed.
+  //
+
+  if (fTree && fTreeMustBeDeleted) {
+    fTree->SetCacheSize(0);
+    fTree->Delete();
+  }
+  delete fFile;
+  delete fListOfObjectsToBeDeleted;
 }
 
 //_____________________________________________________________________________
 void AliBaseCalibViewer::FormatHistoLabels(TH1 *histo) const {
-   // 
-   // formats title and axis labels of histo 
-   // removes '.fElements'
-   // 
-   if (!histo) return;
-   TString replaceString(fAppendString.Data());
-   TString *str = new TString(histo->GetTitle());
-   str->ReplaceAll(replaceString, "");
-   histo->SetTitle(str->Data());
-   delete str;
-   if (histo->GetXaxis()) {
-      str = new TString(histo->GetXaxis()->GetTitle());
-      str->ReplaceAll(replaceString, "");
-      histo->GetXaxis()->SetTitle(str->Data());
-      delete str;
-   }
-   if (histo->GetYaxis()) {
-      str = new TString(histo->GetYaxis()->GetTitle());
-      str->ReplaceAll(replaceString, "");
-      histo->GetYaxis()->SetTitle(str->Data());
-      delete str;
-   }
-   if (histo->GetZaxis()) {
-      str = new TString(histo->GetZaxis()->GetTitle());
-      str->ReplaceAll(replaceString, "");
-      histo->GetZaxis()->SetTitle(str->Data());
-      delete str;
-   }
+  // 
+  // formats title and axis labels of histo 
+  // removes '.fElements'
+  // 
+  if (!histo) return;
+  TString replaceString(fAppendString.Data());
+  TString *str = new TString(histo->GetTitle());
+  str->ReplaceAll(replaceString, "");
+  histo->SetTitle(str->Data());
+  delete str;
+  if (histo->GetXaxis()) {
+    str = new TString(histo->GetXaxis()->GetTitle());
+    str->ReplaceAll(replaceString, "");
+    histo->GetXaxis()->SetTitle(str->Data());
+    delete str;
+  }
+  if (histo->GetYaxis()) {
+    str = new TString(histo->GetYaxis()->GetTitle());
+    str->ReplaceAll(replaceString, "");
+    histo->GetYaxis()->SetTitle(str->Data());
+    delete str;
+  }
+  if (histo->GetZaxis()) {
+    str = new TString(histo->GetZaxis()->GetTitle());
+    str->ReplaceAll(replaceString, "");
+    histo->GetZaxis()->SetTitle(str->Data());
+    delete str;
+  }
 }
 
 //_____________________________________________________________________________
@@ -209,277 +209,277 @@ TFriendElement* AliBaseCalibViewer::AddReferenceTree(const Char_t* filename, con
   // add a reference tree to the current tree
   // by default the treename is 'tree' and the reference treename is 'R'
   //
-   TFile *file = new TFile(filename);
-   fListOfObjectsToBeDeleted->Add(file);
-   TTree * tree = (TTree*)file->Get(treename);
-   return AddFriend(tree, refname);
+  TFile *file = new TFile(filename);
+  fListOfObjectsToBeDeleted->Add(file);
+  TTree * tree = (TTree*)file->Get(treename);
+  return AddFriend(tree, refname);
 }
 
 //_____________________________________________________________________________
 TString* AliBaseCalibViewer::Fit(const Char_t* drawCommand, const Char_t* formula, const Char_t* cuts, 
-                                Double_t & chi2, TVectorD &fitParam, TMatrixD &covMatrix){
-   //
-   // fit an arbitrary function, specified by formula into the data, specified by drawCommand and cuts
-   // returns chi2, fitParam and covMatrix
-   // returns TString with fitted formula
-   //
-   
-   TString formulaStr(formula); 
-   TString drawStr(drawCommand);
-   TString cutStr(cuts);
-   
-   // abbreviations:
-   drawStr.ReplaceAll(fAbbreviation, fAppendString);
-   cutStr.ReplaceAll(fAbbreviation, fAppendString);
-   formulaStr.ReplaceAll(fAbbreviation, fAppendString);
-   
-   formulaStr.ReplaceAll("++", fAbbreviation);
-   TObjArray* formulaTokens = formulaStr.Tokenize(fAbbreviation.Data()); 
-   Int_t dim = formulaTokens->GetEntriesFast();
-   
-   fitParam.ResizeTo(dim);
-   covMatrix.ResizeTo(dim,dim);
-   
-   TLinearFitter* fitter = new TLinearFitter(dim+1, Form("hyp%d",dim));
-   fitter->StoreData(kTRUE);   
-   fitter->ClearPoints();
-   
-   Int_t entries = Draw(drawStr.Data(), cutStr.Data(), "goff");
-   if (entries == -1) {
-     delete fitter;
-     delete formulaTokens;
-     return new TString("An ERROR has occured during fitting!");
-   }
-   Double_t **values = new Double_t*[dim+1] ; 
-   
-   for (Int_t i = 0; i < dim + 1; i++){
-      Int_t centries = 0;
-      if (i < dim) centries = fTree->Draw(((TObjString*)formulaTokens->At(i))->GetName(), cutStr.Data(), "goff");
-      else  centries = fTree->Draw(drawStr.Data(), cutStr.Data(), "goff");
-      
-      if (entries != centries) {
-       delete fitter;
-       delete [] values;
-       delete formulaTokens;
-       return new TString("An ERROR has occured during fitting!");
-      }
-      values[i] = new Double_t[entries];
-      memcpy(values[i],  fTree->GetV1(), entries*sizeof(Double_t)); 
-   }
-   
-   // add points to the fitter
-   for (Int_t i = 0; i < entries; i++){
-      Double_t x[1000];
-      for (Int_t j=0; j<dim;j++) x[j]=values[j][i];
-      fitter->AddPoint(x, values[dim][i], 1);
-   }
-
-   fitter->Eval();
-   fitter->GetParameters(fitParam);
-   fitter->GetCovarianceMatrix(covMatrix);
-   chi2 = fitter->GetChisquare();
-   
-   TString *preturnFormula = new TString(Form("( %e+",fitParam[0])), &returnFormula = *preturnFormula;
-   
-   for (Int_t iparam = 0; iparam < dim; iparam++) {
-     returnFormula.Append(Form("%s*(%e)",((TObjString*)formulaTokens->At(iparam))->GetName(),fitParam[iparam+1]));
-     if (iparam < dim-1) returnFormula.Append("+");
-   }
-   returnFormula.Append(" )");
-   delete formulaTokens;
-   delete fitter;
-   for (Int_t i = 0; i < dim + 1; i++) delete [] values[i];
-   delete[] values;
-   return preturnFormula;
+    Double_t & chi2, TVectorD &fitParam, TMatrixD &covMatrix){
+  //
+  // fit an arbitrary function, specified by formula into the data, specified by drawCommand and cuts
+  // returns chi2, fitParam and covMatrix
+  // returns TString with fitted formula
+  //
+
+  TString formulaStr(formula); 
+  TString drawStr(drawCommand);
+  TString cutStr(cuts);
+
+  // abbreviations:
+  drawStr.ReplaceAll(fAbbreviation, fAppendString);
+  cutStr.ReplaceAll(fAbbreviation, fAppendString);
+  formulaStr.ReplaceAll(fAbbreviation, fAppendString);
+
+  formulaStr.ReplaceAll("++", fAbbreviation);
+  TObjArray* formulaTokens = formulaStr.Tokenize(fAbbreviation.Data()); 
+  Int_t dim = formulaTokens->GetEntriesFast();
+
+  fitParam.ResizeTo(dim);
+  covMatrix.ResizeTo(dim,dim);
+
+  TLinearFitter* fitter = new TLinearFitter(dim+1, Form("hyp%d",dim));
+  fitter->StoreData(kTRUE);   
+  fitter->ClearPoints();
+
+  Int_t entries = Draw(drawStr.Data(), cutStr.Data(), "goff");
+  if (entries == -1) {
+    delete fitter;
+    delete formulaTokens;
+    return new TString("An ERROR has occured during fitting!");
+  }
+  Double_t **values = new Double_t*[dim+1] ; 
+
+  for (Int_t i = 0; i < dim + 1; i++){
+    Int_t centries = 0;
+    if (i < dim) centries = fTree->Draw(((TObjString*)formulaTokens->At(i))->GetName(), cutStr.Data(), "goff");
+    else  centries = fTree->Draw(drawStr.Data(), cutStr.Data(), "goff");
+
+    if (entries != centries) {
+      delete fitter;
+      delete [] values;
+      delete formulaTokens;
+      return new TString("An ERROR has occured during fitting!");
+    }
+    values[i] = new Double_t[entries];
+    memcpy(values[i],  fTree->GetV1(), entries*sizeof(Double_t)); 
+  }
+
+  // add points to the fitter
+  for (Int_t i = 0; i < entries; i++){
+    Double_t x[1000];
+    for (Int_t j=0; j<dim;j++) x[j]=values[j][i];
+    fitter->AddPoint(x, values[dim][i], 1);
+  }
+
+  fitter->Eval();
+  fitter->GetParameters(fitParam);
+  fitter->GetCovarianceMatrix(covMatrix);
+  chi2 = fitter->GetChisquare();
+
+  TString *preturnFormula = new TString(Form("( %e+",fitParam[0])), &returnFormula = *preturnFormula;
+
+  for (Int_t iparam = 0; iparam < dim; iparam++) {
+    returnFormula.Append(Form("%s*(%e)",((TObjString*)formulaTokens->At(iparam))->GetName(),fitParam[iparam+1]));
+    if (iparam < dim-1) returnFormula.Append("+");
+  }
+  returnFormula.Append(" )");
+  delete formulaTokens;
+  delete fitter;
+  for (Int_t i = 0; i < dim + 1; i++) delete [] values[i];
+  delete[] values;
+  return preturnFormula;
 }
 
 //_____________________________________________________________________________
 Double_t AliBaseCalibViewer::GetLTM(Int_t n, Double_t *array, Double_t *sigma, Double_t fraction){
-   //
-   //  returns the LTM and sigma
-   //
-   Double_t *ddata = new Double_t[n];
-   Double_t mean = 0, lsigma = 0;
-   UInt_t nPoints = 0;
-   for (UInt_t i = 0; i < (UInt_t)n; i++) {
-         ddata[nPoints]= array[nPoints];
-         nPoints++;
-   }
-   Int_t hh = TMath::Min(TMath::Nint(fraction * nPoints), Int_t(n));
-   AliMathBase::EvaluateUni(nPoints, ddata, mean, lsigma, hh);
-   if (sigma) *sigma = lsigma;
-   delete [] ddata;
-   return mean;
+  //
+  //  returns the LTM and sigma
+  //
+  Double_t *ddata = new Double_t[n];
+  Double_t mean = 0, lsigma = 0;
+  UInt_t nPoints = 0;
+  for (UInt_t i = 0; i < (UInt_t)n; i++) {
+    ddata[nPoints]= array[nPoints];
+    nPoints++;
+  }
+  Int_t hh = TMath::Min(TMath::Nint(fraction * nPoints), Int_t(n));
+  AliMathBase::EvaluateUni(nPoints, ddata, mean, lsigma, hh);
+  if (sigma) *sigma = lsigma;
+  delete [] ddata;
+  return mean;
 }
 
 //_____________________________________________________________________________
 Int_t AliBaseCalibViewer::GetBin(Float_t value, Int_t nbins, Double_t binLow, Double_t binUp){
-   // Returns the 'bin' for 'value'
-   // The interval between 'binLow' and 'binUp' is divided into 'nbins' equidistant bins
-   // avoid index out of bounds error: 'if (bin < binLow) bin = binLow' and vice versa
-   /* Begin_Latex
-         GetBin(value) = #frac{nbins - 1}{binUp - binLow} #upoint (value - binLow) +1
-      End_Latex
-   */
-   
-   Int_t bin =  TMath::Nint( (Float_t)(value - binLow) / (Float_t)(binUp - binLow) * (nbins-1) ) + 1;
-   // avoid index out of bounds:   
-   if (value < binLow) bin = 0;
-   if (value > binUp)  bin = nbins + 1;
-   return bin;
-   
+  // Returns the 'bin' for 'value'
+  // The interval between 'binLow' and 'binUp' is divided into 'nbins' equidistant bins
+  // avoid index out of bounds error: 'if (bin < binLow) bin = binLow' and vice versa
+  /* Begin_Latex
+     GetBin(value) = #frac{nbins - 1}{binUp - binLow} #upoint (value - binLow) +1
+     End_Latex
+     */
+
+  Int_t bin =  TMath::Nint( (Float_t)(value - binLow) / (Float_t)(binUp - binLow) * (nbins-1) ) + 1;
+  // avoid index out of bounds:   
+  if (value < binLow) bin = 0;
+  if (value > binUp)  bin = nbins + 1;
+  return bin;
+
 }
 
 //_____________________________________________________________________________
 TH1F* AliBaseCalibViewer::SigmaCut(TH1F *histogram, Float_t mean, Float_t sigma, Float_t sigmaMax, 
-                                  Float_t sigmaStep, Bool_t pm) {
-   //
-   // Creates a cumulative histogram Begin_Latex S(t, #mu, #sigma) End_Latex, where you can see, how much of the data are inside sigma-intervals around the mean value
-   // The data of the distribution Begin_Latex f(x, #mu, #sigma) End_Latex are given in 'histogram'
-   // 'mean' and 'sigma' are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in 'histogram', to be specified by the user
-   // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma, Begin_Latex t #sigma End_Latex)
-   // sigmaStep: the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
-   // pm: Decide weather Begin_Latex t > 0 End_Latex (first case) or Begin_Latex t End_Latex arbitrary (secound case)
-   // The actual work is done on the array.
-   /* Begin_Latex 
-         f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = (#int_{#mu}^{#mu + t #sigma} f(x, #mu, #sigma) dx + #int_{#mu}^{#mu - t #sigma} f(x, #mu, #sigma) dx) / (#int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx),    for  t > 0    
-         or      
-         f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{#mu}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
-      End_Latex  
-      Begin_Macro(source)
-      {
-         Float_t mean = 0;
-         Float_t sigma = 1.5;
-         Float_t sigmaMax = 4;
-         gROOT->SetStyle("Plain");
-         TH1F *distribution = new TH1F("Distribution1", "Distribution f(x, #mu, #sigma)", 1000,-5,5);
-         TRandom rand(23);
-         for (Int_t i = 0; i <50000;i++) distribution->Fill(rand.Gaus(mean, sigma));
-         Float_t *ar = distribution->GetArray();
-         
-         TCanvas* macro_example_canvas = new TCanvas("cAliBaseCalibViewer", "", 350, 350);
-         macro_example_canvas->Divide(0,3);
-         TVirtualPad *pad1 = macro_example_canvas->cd(1);
-         pad1->SetGridy();
-         pad1->SetGridx();
-         distribution->Draw();
-         TVirtualPad *pad2 = macro_example_canvas->cd(2);
-         pad2->SetGridy();
-         pad2->SetGridx();
-         
-         TH1F *shist = AliTPCCalibViewer::SigmaCut(distribution, mean, sigma, sigmaMax);
-         shist->SetNameTitle("Cumulative","Cumulative S(t, #mu, #sigma)");
-         shist->Draw();  
-         TVirtualPad *pad3 = macro_example_canvas->cd(3);
-         pad3->SetGridy();
-         pad3->SetGridx();
-         TH1F *shistPM = AliTPCCalibViewer::SigmaCut(distribution, mean, sigma, sigmaMax, -1, kTRUE);
-         shistPM->Draw();   
-         return macro_example_canvas;
-      }  
-      End_Macro
-   */ 
-   
-   Float_t *array = histogram->GetArray();
-   Int_t    nbins = histogram->GetXaxis()->GetNbins();
-   Float_t binLow = histogram->GetXaxis()->GetXmin();
-   Float_t binUp  = histogram->GetXaxis()->GetXmax();
-   return AliBaseCalibViewer::SigmaCut(nbins, array, mean, sigma, nbins, binLow, binUp, sigmaMax, sigmaStep, pm);
+    Float_t sigmaStep, Bool_t pm) {
+  //
+  // Creates a cumulative histogram Begin_Latex S(t, #mu, #sigma) End_Latex, where you can see, how much of the data are inside sigma-intervals around the mean value
+  // The data of the distribution Begin_Latex f(x, #mu, #sigma) End_Latex are given in 'histogram'
+  // 'mean' and 'sigma' are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in 'histogram', to be specified by the user
+  // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma, Begin_Latex t #sigma End_Latex)
+  // sigmaStep: the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
+  // pm: Decide weather Begin_Latex t > 0 End_Latex (first case) or Begin_Latex t End_Latex arbitrary (secound case)
+  // The actual work is done on the array.
+  /* Begin_Latex 
+     f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = (#int_{#mu}^{#mu + t #sigma} f(x, #mu, #sigma) dx + #int_{#mu}^{#mu - t #sigma} f(x, #mu, #sigma) dx) / (#int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx),    for  t > 0    
+     or      
+     f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{#mu}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
+     End_Latex  
+     Begin_Macro(source)
+     {
+     Float_t mean = 0;
+     Float_t sigma = 1.5;
+     Float_t sigmaMax = 4;
+     gROOT->SetStyle("Plain");
+     TH1F *distribution = new TH1F("Distribution1", "Distribution f(x, #mu, #sigma)", 1000,-5,5);
+     TRandom rand(23);
+     for (Int_t i = 0; i <50000;i++) distribution->Fill(rand.Gaus(mean, sigma));
+     Float_t *ar = distribution->GetArray();
+
+     TCanvas* macro_example_canvas = new TCanvas("cAliBaseCalibViewer", "", 350, 350);
+     macro_example_canvas->Divide(0,3);
+     TVirtualPad *pad1 = macro_example_canvas->cd(1);
+     pad1->SetGridy();
+     pad1->SetGridx();
+     distribution->Draw();
+     TVirtualPad *pad2 = macro_example_canvas->cd(2);
+     pad2->SetGridy();
+     pad2->SetGridx();
+
+     TH1F *shist = AliTPCCalibViewer::SigmaCut(distribution, mean, sigma, sigmaMax);
+     shist->SetNameTitle("Cumulative","Cumulative S(t, #mu, #sigma)");
+     shist->Draw();  
+     TVirtualPad *pad3 = macro_example_canvas->cd(3);
+     pad3->SetGridy();
+     pad3->SetGridx();
+     TH1F *shistPM = AliTPCCalibViewer::SigmaCut(distribution, mean, sigma, sigmaMax, -1, kTRUE);
+     shistPM->Draw();   
+     return macro_example_canvas;
+     }  
+     End_Macro
+     */ 
+
+  Float_t *array = histogram->GetArray();
+  Int_t    nbins = histogram->GetXaxis()->GetNbins();
+  Float_t binLow = histogram->GetXaxis()->GetXmin();
+  Float_t binUp  = histogram->GetXaxis()->GetXmax();
+  return AliBaseCalibViewer::SigmaCut(nbins, array, mean, sigma, nbins, binLow, binUp, sigmaMax, sigmaStep, pm);
 }   
-   
+
 //_____________________________________________________________________________
 TH1F* AliBaseCalibViewer::SigmaCut(Int_t n, Float_t *array, Float_t mean, Float_t sigma, Int_t nbins, Float_t binLow, Float_t binUp, Float_t sigmaMax, Float_t sigmaStep, Bool_t pm){
-   //
-   // Creates a histogram Begin_Latex S(t, #mu, #sigma) End_Latex, where you can see, how much of the data are inside sigma-intervals around the mean value
-   // The data of the distribution Begin_Latex f(x, #mu, #sigma) End_Latex are given in 'array', 'n' specifies the length of the array
-   // 'mean' and 'sigma' are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in 'array', to be specified by the user
-   // 'nbins': number of bins, 'binLow': first bin, 'binUp': last bin
-   // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma, Begin_Latex t #sigma End_Latex)
-   // sigmaStep: the binsize of the generated histogram
-   // Here the actual work is done.
-   
-   if (TMath::Abs(sigma) < 1.e-10) return 0;
-   Float_t binWidth = (binUp-binLow)/(nbins - 1);
-   if (sigmaStep <= 0) sigmaStep = binWidth;
-   Int_t kbins = (Int_t)(sigmaMax * sigma / sigmaStep) + 1; // + 1  due to overflow bin in histograms
-   if (pm) kbins = 2 * (Int_t)(sigmaMax * sigma / sigmaStep) + 1;
-   Float_t kbinLow = !pm ? 0 : -sigmaMax;
-   Float_t kbinUp  = sigmaMax;
-   TH1F *hist = new TH1F("sigmaCutHisto","Cumulative; Multiples of #sigma; Fraction of included data", kbins, kbinLow, kbinUp); 
-   hist->SetDirectory(0);
-   hist->Reset();
-   
-   // calculate normalization
-   Double_t normalization = 0;
-   for (Int_t i = 0; i <= n; i++) {
-        normalization += array[i];
-   }
-   
-   // given units: units from given histogram
-   // sigma units: in units of sigma
-   // iDelta: integrate in interval (mean +- iDelta), given units
-   // x:      ofset from mean for integration, given units
-   // hist:   needs 
-   
-   // fill histogram
-   for (Float_t iDelta = 0; iDelta <= sigmaMax * sigma; iDelta += sigmaStep) {
-      // integrate array
-      Double_t valueP = array[GetBin(mean, nbins, binLow, binUp)];
-      Double_t valueM = array[GetBin(mean-binWidth, nbins, binLow, binUp)];
-      // add bin of mean value only once to the histogram
-      for (Float_t x = binWidth; x <= iDelta; x += binWidth) {
-         valueP += (mean + x <= binUp)  ? array[GetBin(mean + x, nbins, binLow, binUp)] : 0;
-         valueM += (mean-binWidth - x >= binLow) ? array[GetBin(mean-binWidth - x, nbins, binLow, binUp)] : 0; 
-      }
-
-      if (valueP / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", valueP, normalization);
-      if (valueP / normalization > 100) return hist;
-      if (valueM / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", valueM, normalization);
-      if (valueM / normalization > 100) return hist;
-      valueP = (valueP / normalization);
-      valueM = (valueM / normalization);
-      if (pm) {
-         Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
-         hist->SetBinContent(bin, valueP);
-         bin = GetBin(-iDelta/sigma, kbins, kbinLow, kbinUp);
-         hist->SetBinContent(bin, valueM);
-      }
-      else { // if (!pm)
-         Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
-         hist->SetBinContent(bin, valueP + valueM);
-      }
-   }
-   if (!pm) hist->SetMaximum(1.2);
-   return hist;
+  //
+  // Creates a histogram Begin_Latex S(t, #mu, #sigma) End_Latex, where you can see, how much of the data are inside sigma-intervals around the mean value
+  // The data of the distribution Begin_Latex f(x, #mu, #sigma) End_Latex are given in 'array', 'n' specifies the length of the array
+  // 'mean' and 'sigma' are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in 'array', to be specified by the user
+  // 'nbins': number of bins, 'binLow': first bin, 'binUp': last bin
+  // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma, Begin_Latex t #sigma End_Latex)
+  // sigmaStep: the binsize of the generated histogram
+  // Here the actual work is done.
+
+  if (TMath::Abs(sigma) < 1.e-10) return 0;
+  Float_t binWidth = (binUp-binLow)/(nbins - 1);
+  if (sigmaStep <= 0) sigmaStep = binWidth;
+  Int_t kbins = (Int_t)(sigmaMax * sigma / sigmaStep) + 1; // + 1  due to overflow bin in histograms
+  if (pm) kbins = 2 * (Int_t)(sigmaMax * sigma / sigmaStep) + 1;
+  Float_t kbinLow = !pm ? 0 : -sigmaMax;
+  Float_t kbinUp  = sigmaMax;
+  TH1F *hist = new TH1F("sigmaCutHisto","Cumulative; Multiples of #sigma; Fraction of included data", kbins, kbinLow, kbinUp); 
+  hist->SetDirectory(0);
+  hist->Reset();
+
+  // calculate normalization
+  Double_t normalization = 0;
+  for (Int_t i = 0; i <= n; i++) {
+    normalization += array[i];
+  }
+
+  // given units: units from given histogram
+  // sigma units: in units of sigma
+  // iDelta: integrate in interval (mean +- iDelta), given units
+  // x:      ofset from mean for integration, given units
+  // hist:   needs 
+
+  // fill histogram
+  for (Float_t iDelta = 0; iDelta <= sigmaMax * sigma; iDelta += sigmaStep) {
+    // integrate array
+    Double_t valueP = array[GetBin(mean, nbins, binLow, binUp)];
+    Double_t valueM = array[GetBin(mean-binWidth, nbins, binLow, binUp)];
+    // add bin of mean value only once to the histogram
+    for (Float_t x = binWidth; x <= iDelta; x += binWidth) {
+      valueP += (mean + x <= binUp)  ? array[GetBin(mean + x, nbins, binLow, binUp)] : 0;
+      valueM += (mean-binWidth - x >= binLow) ? array[GetBin(mean-binWidth - x, nbins, binLow, binUp)] : 0; 
+    }
+
+    if (valueP / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", valueP, normalization);
+    if (valueP / normalization > 100) return hist;
+    if (valueM / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", valueM, normalization);
+    if (valueM / normalization > 100) return hist;
+    valueP = (valueP / normalization);
+    valueM = (valueM / normalization);
+    if (pm) {
+      Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
+      hist->SetBinContent(bin, valueP);
+      bin = GetBin(-iDelta/sigma, kbins, kbinLow, kbinUp);
+      hist->SetBinContent(bin, valueM);
+    }
+    else { // if (!pm)
+      Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
+      hist->SetBinContent(bin, valueP + valueM);
+    }
+  }
+  if (!pm) hist->SetMaximum(1.2);
+  return hist;
 }
 
 //_____________________________________________________________________________
 TH1F* AliBaseCalibViewer::SigmaCut(Int_t /*n*/, Double_t */*array*/, Double_t /*mean*/, Double_t /*sigma*/, 
-                                  Int_t /*nbins*/, Double_t */*xbins*/, Double_t /*sigmaMax*/){
-   // 
-   // SigmaCut for variable binsize
-   // NOT YET IMPLEMENTED !!!
-   // 
-   printf("SigmaCut with variable binsize, Not yet implemented\n");
-
-   return 0;
+    Int_t /*nbins*/, Double_t */*xbins*/, Double_t /*sigmaMax*/){
+  // 
+  // SigmaCut for variable binsize
+  // NOT YET IMPLEMENTED !!!
+  // 
+  printf("SigmaCut with variable binsize, Not yet implemented\n");
+
+  return 0;
 }
 
 //_____________________________________________________________________________
 Int_t  AliBaseCalibViewer::DrawHisto1D(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts, 
-                                      const Char_t *sigmas, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM) const
+    const Char_t *sigmas, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM) const
 {
-   //
-   // Easy drawing of data, in principle the same as EasyDraw1D
-   // Difference: A line for the mean / median / LTM is drawn
-   // in 'sigmas' you can specify in which distance to the mean/median/LTM you want to see a line in sigma-units, separated by ';'
-   // example: sigmas = "2; 4; 6;"  at Begin_Latex 2 #sigma End_Latex, Begin_Latex 4 #sigma End_Latex and Begin_Latex 6 #sigma End_Latex  a line is drawn.
-   // "plotMean", "plotMedian" and "plotLTM": what kind of lines do you want to see?
-   //
+  //
+  // Easy drawing of data, in principle the same as EasyDraw1D
+  // Difference: A line for the mean / median / LTM is drawn
+  // in 'sigmas' you can specify in which distance to the mean/median/LTM you want to see a line in sigma-units, separated by ';'
+  // example: sigmas = "2; 4; 6;"  at Begin_Latex 2 #sigma End_Latex, Begin_Latex 4 #sigma End_Latex and Begin_Latex 6 #sigma End_Latex  a line is drawn.
+  // "plotMean", "plotMedian" and "plotLTM": what kind of lines do you want to see?
+  //
   Int_t oldOptStat = gStyle->GetOptStat();
   gStyle->SetOptStat(0000000);
   Double_t ltmFraction = 0.8;
-  
+
   TObjArray *sigmasTokens = TString(sigmas).Tokenize(";");
   TVectorF nsigma(sigmasTokens->GetEntriesFast());
   for (Int_t i = 0; i < sigmasTokens->GetEntriesFast(); i++) {
@@ -498,35 +498,35 @@ Int_t  AliBaseCalibViewer::DrawHisto1D(const Char_t* drawCommand, const Char_t*
   drawStr += " >> tempHist";
   Int_t entries = EasyDraw1D(drawStr.Data(), sector, cuts);
   TH1F *htemp = (TH1F*)gDirectory->Get("tempHist");
-   // FIXME is this histogram deleted automatically?
+  // FIXME is this histogram deleted automatically?
   Double_t *values = fTree->GetV1();  // value is the array containing 'entries' numbers
-  
+
   Double_t mean = TMath::Mean(entries, values);
   Double_t median = TMath::Median(entries, values);
   Double_t sigma = TMath::RMS(entries, values);
   Double_t maxY = htemp->GetMaximum();
-  
+
   TLegend * legend = new TLegend(.7,.7, .99, .99, "Statistical information");
-   //fListOfObjectsToBeDeleted->Add(legend);
-  
+  //fListOfObjectsToBeDeleted->Add(legend);
+
   if (plotMean) {
-      // draw Mean
+    // draw Mean
     TLine* line = new TLine(mean, 0, mean, maxY);
-      //fListOfObjectsToBeDeleted->Add(line);
+    //fListOfObjectsToBeDeleted->Add(line);
     line->SetLineColor(kRed);
     line->SetLineWidth(2);
     line->SetLineStyle(1);
     line->Draw();
     legend->AddEntry(line, Form("Mean: %f", mean), "l");
-      // draw sigma lines
+    // draw sigma lines
     for (Int_t i = 0; i < nsigma.GetNoElements(); i++) {
       TLine* linePlusSigma = new TLine(mean + nsigma[i] * sigma, 0, mean + nsigma[i] * sigma, maxY);
-         //fListOfObjectsToBeDeleted->Add(linePlusSigma);
+      //fListOfObjectsToBeDeleted->Add(linePlusSigma);
       linePlusSigma->SetLineColor(kRed);
       linePlusSigma->SetLineStyle(2 + i);
       linePlusSigma->Draw();
       TLine* lineMinusSigma = new TLine(mean - nsigma[i] * sigma, 0, mean - nsigma[i] * sigma, maxY);
-         //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
+      //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
       lineMinusSigma->SetLineColor(kRed);
       lineMinusSigma->SetLineStyle(2 + i);
       lineMinusSigma->Draw();
@@ -534,23 +534,23 @@ Int_t  AliBaseCalibViewer::DrawHisto1D(const Char_t* drawCommand, const Char_t*
     }
   }
   if (plotMedian) {
-      // draw median
+    // draw median
     TLine* line = new TLine(median, 0, median, maxY);
-      //fListOfObjectsToBeDeleted->Add(line);
+    //fListOfObjectsToBeDeleted->Add(line);
     line->SetLineColor(kBlue);
     line->SetLineWidth(2);
     line->SetLineStyle(1);
     line->Draw();
     legend->AddEntry(line, Form("Median: %f", median), "l");
-      // draw sigma lines
+    // draw sigma lines
     for (Int_t i = 0; i < nsigma.GetNoElements(); i++) {
       TLine* linePlusSigma = new TLine(median + nsigma[i] * sigma, 0, median + nsigma[i]*sigma, maxY);
-         //fListOfObjectsToBeDeleted->Add(linePlusSigma);
+      //fListOfObjectsToBeDeleted->Add(linePlusSigma);
       linePlusSigma->SetLineColor(kBlue);
       linePlusSigma->SetLineStyle(2 + i);
       linePlusSigma->Draw();
       TLine* lineMinusSigma = new TLine(median - nsigma[i] * sigma, 0, median - nsigma[i]*sigma, maxY);
-         //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
+      //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
       lineMinusSigma->SetLineColor(kBlue);
       lineMinusSigma->SetLineStyle(2 + i);
       lineMinusSigma->Draw();
@@ -558,26 +558,26 @@ Int_t  AliBaseCalibViewer::DrawHisto1D(const Char_t* drawCommand, const Char_t*
     }
   }
   if (plotLTM) {
-      // draw LTM
+    // draw LTM
     Double_t ltmRms = 0;
     Double_t ltm = GetLTM(entries, values, &ltmRms, ltmFraction);
     TLine* line = new TLine(ltm, 0, ltm, maxY);
-      //fListOfObjectsToBeDeleted->Add(line);
+    //fListOfObjectsToBeDeleted->Add(line);
     line->SetLineColor(kGreen+2);
     line->SetLineWidth(2);
     line->SetLineStyle(1);
     line->Draw();
     legend->AddEntry(line, Form("LTM: %f", ltm), "l");
-      // draw sigma lines
+    // draw sigma lines
     for (Int_t i = 0; i < nsigma.GetNoElements(); i++) {
       TLine* linePlusSigma = new TLine(ltm + nsigma[i] * ltmRms, 0, ltm + nsigma[i] * ltmRms, maxY);
-         //fListOfObjectsToBeDeleted->Add(linePlusSigma);
+      //fListOfObjectsToBeDeleted->Add(linePlusSigma);
       linePlusSigma->SetLineColor(kGreen+2);
       linePlusSigma->SetLineStyle(2+i);
       linePlusSigma->Draw();
-      
+
       TLine* lineMinusSigma = new TLine(ltm - nsigma[i] * ltmRms, 0, ltm - nsigma[i] * ltmRms, maxY);
-         //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
+      //fListOfObjectsToBeDeleted->Add(lineMinusSigma);
       lineMinusSigma->SetLineColor(kGreen+2);
       lineMinusSigma->SetLineStyle(2+i);
       lineMinusSigma->Draw();
@@ -592,331 +592,331 @@ Int_t  AliBaseCalibViewer::DrawHisto1D(const Char_t* drawCommand, const Char_t*
 
 //_____________________________________________________________________________
 Int_t AliBaseCalibViewer::SigmaCut(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts, 
-                                  Float_t sigmaMax, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM, Bool_t pm, 
-                                  const Char_t *sigmas, Float_t sigmaStep) const {
-   //
-   // Creates a histogram, where you can see, how much of the data are inside sigma-intervals 
-   // around the mean/median/LTM
-   // with drawCommand, sector and cuts you specify your input data, see EasyDraw
-   // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma)
-   // sigmaStep: the binsize of the generated histogram
-   // plotMean/plotMedian/plotLTM: specifies where to put the center
-   //
-  
-   Double_t ltmFraction = 0.8;
-   
-   TString drawStr(drawCommand);
-   Bool_t dangerousToDraw = drawStr.Contains(":") || drawStr.Contains(">>");
-   if (dangerousToDraw) {
-      Warning("SigmaCut", "The draw string must not contain ':' or '>>'.");
-      return -1;
-   }
-   drawStr += " >> tempHist";
-   
-   Int_t entries = EasyDraw1D(drawStr.Data(), sector, cuts, "goff");
-   TH1F *htemp = (TH1F*)gDirectory->Get("tempHist");
-   // FIXME is this histogram deleted automatically?
-   Double_t *values = fTree->GetV1();  // value is the array containing 'entries' numbers
-   
-   Double_t mean = TMath::Mean(entries, values);
-   Double_t median = TMath::Median(entries, values);
-   Double_t sigma = TMath::RMS(entries, values);
-   
-   TLegend * legend = new TLegend(.7,.7, .99, .99, "Cumulative");
-   //fListOfObjectsToBeDeleted->Add(legend);
-   TH1F *cutHistoMean = 0;
-   TH1F *cutHistoMedian = 0;
-   TH1F *cutHistoLTM = 0;
-   
-   TObjArray *sigmasTokens = TString(sigmas).Tokenize(";");  
-   TVectorF nsigma(sigmasTokens->GetEntriesFast());
-   for (Int_t i = 0; i < sigmasTokens->GetEntriesFast(); i++) {
-      TString str(((TObjString*)sigmasTokens->At(i))->GetString());
-      Double_t sig = (str.IsFloat()) ? str.Atof() : 0;
-      nsigma[i] = sig;
-   }
-   delete sigmasTokens;
-   //
-   if (plotMean) {
-      cutHistoMean = SigmaCut(htemp, mean, sigma, sigmaMax, sigmaStep, pm);
-      if (cutHistoMean) {
-         //fListOfObjectsToBeDeleted->Add(cutHistoMean);
-         cutHistoMean->SetLineColor(kRed);
-         legend->AddEntry(cutHistoMean, "Mean", "l");
-         cutHistoMean->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         cutHistoMean->Draw();
-         DrawLines(cutHistoMean, nsigma, legend, kRed, pm);
-      } // if (cutHistoMean)
-       
-   }
-   if (plotMedian) {
-      cutHistoMedian = SigmaCut(htemp, median, sigma, sigmaMax, sigmaStep, pm);
-      if (cutHistoMedian) {
-         //fListOfObjectsToBeDeleted->Add(cutHistoMedian);
-         cutHistoMedian->SetLineColor(kBlue);
-         legend->AddEntry(cutHistoMedian, "Median", "l");
-         cutHistoMedian->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         if (plotMean && cutHistoMean) cutHistoMedian->Draw("same");
-            else cutHistoMedian->Draw();
-         DrawLines(cutHistoMedian, nsigma, legend, kBlue, pm);
-      }  // if (cutHistoMedian)
-   }
-   if (plotLTM) {
-      Double_t ltmRms = 0;
-      Double_t ltm = GetLTM(entries, values, &ltmRms, ltmFraction);
-      cutHistoLTM = SigmaCut(htemp, ltm, ltmRms, sigmaMax, sigmaStep, pm);
-      if (cutHistoLTM) {
-         //fListOfObjectsToBeDeleted->Add(cutHistoLTM);
-         cutHistoLTM->SetLineColor(kGreen+2);
-         legend->AddEntry(cutHistoLTM, "LTM", "l");
-         cutHistoLTM->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         if ((plotMean && cutHistoMean) || (plotMedian && cutHistoMedian)) cutHistoLTM->Draw("same");
-            else cutHistoLTM->Draw();
-         DrawLines(cutHistoLTM, nsigma, legend, kGreen+2, pm);
-      }
-   }
-   if (!plotMean && !plotMedian && !plotLTM) return -1;
-   legend->Draw();
-   return 1;
+    Float_t sigmaMax, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM, Bool_t pm, 
+    const Char_t *sigmas, Float_t sigmaStep) const {
+  //
+  // Creates a histogram, where you can see, how much of the data are inside sigma-intervals 
+  // around the mean/median/LTM
+  // with drawCommand, sector and cuts you specify your input data, see EasyDraw
+  // sigmaMax: up to which sigma around the mean/median/LTM the histogram is generated (in units of sigma)
+  // sigmaStep: the binsize of the generated histogram
+  // plotMean/plotMedian/plotLTM: specifies where to put the center
+  //
+
+  Double_t ltmFraction = 0.8;
+
+  TString drawStr(drawCommand);
+  Bool_t dangerousToDraw = drawStr.Contains(":") || drawStr.Contains(">>");
+  if (dangerousToDraw) {
+    Warning("SigmaCut", "The draw string must not contain ':' or '>>'.");
+    return -1;
+  }
+  drawStr += " >> tempHist";
+
+  Int_t entries = EasyDraw1D(drawStr.Data(), sector, cuts, "goff");
+  TH1F *htemp = (TH1F*)gDirectory->Get("tempHist");
+  // FIXME is this histogram deleted automatically?
+  Double_t *values = fTree->GetV1();  // value is the array containing 'entries' numbers
+
+  Double_t mean = TMath::Mean(entries, values);
+  Double_t median = TMath::Median(entries, values);
+  Double_t sigma = TMath::RMS(entries, values);
+
+  TLegend * legend = new TLegend(.7,.7, .99, .99, "Cumulative");
+  //fListOfObjectsToBeDeleted->Add(legend);
+  TH1F *cutHistoMean = 0;
+  TH1F *cutHistoMedian = 0;
+  TH1F *cutHistoLTM = 0;
+
+  TObjArray *sigmasTokens = TString(sigmas).Tokenize(";");  
+  TVectorF nsigma(sigmasTokens->GetEntriesFast());
+  for (Int_t i = 0; i < sigmasTokens->GetEntriesFast(); i++) {
+    TString str(((TObjString*)sigmasTokens->At(i))->GetString());
+    Double_t sig = (str.IsFloat()) ? str.Atof() : 0;
+    nsigma[i] = sig;
+  }
+  delete sigmasTokens;
+  //
+  if (plotMean) {
+    cutHistoMean = SigmaCut(htemp, mean, sigma, sigmaMax, sigmaStep, pm);
+    if (cutHistoMean) {
+      //fListOfObjectsToBeDeleted->Add(cutHistoMean);
+      cutHistoMean->SetLineColor(kRed);
+      legend->AddEntry(cutHistoMean, "Mean", "l");
+      cutHistoMean->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      cutHistoMean->Draw();
+      DrawLines(cutHistoMean, nsigma, legend, kRed, pm);
+    } // if (cutHistoMean)
+
+  }
+  if (plotMedian) {
+    cutHistoMedian = SigmaCut(htemp, median, sigma, sigmaMax, sigmaStep, pm);
+    if (cutHistoMedian) {
+      //fListOfObjectsToBeDeleted->Add(cutHistoMedian);
+      cutHistoMedian->SetLineColor(kBlue);
+      legend->AddEntry(cutHistoMedian, "Median", "l");
+      cutHistoMedian->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      if (plotMean && cutHistoMean) cutHistoMedian->Draw("same");
+      else cutHistoMedian->Draw();
+      DrawLines(cutHistoMedian, nsigma, legend, kBlue, pm);
+    }  // if (cutHistoMedian)
+  }
+  if (plotLTM) {
+    Double_t ltmRms = 0;
+    Double_t ltm = GetLTM(entries, values, &ltmRms, ltmFraction);
+    cutHistoLTM = SigmaCut(htemp, ltm, ltmRms, sigmaMax, sigmaStep, pm);
+    if (cutHistoLTM) {
+      //fListOfObjectsToBeDeleted->Add(cutHistoLTM);
+      cutHistoLTM->SetLineColor(kGreen+2);
+      legend->AddEntry(cutHistoLTM, "LTM", "l");
+      cutHistoLTM->SetTitle(Form("%s, cumulative; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      if ((plotMean && cutHistoMean) || (plotMedian && cutHistoMedian)) cutHistoLTM->Draw("same");
+      else cutHistoLTM->Draw();
+      DrawLines(cutHistoLTM, nsigma, legend, kGreen+2, pm);
+    }
+  }
+  if (!plotMean && !plotMedian && !plotLTM) return -1;
+  legend->Draw();
+  return 1;
 }
 
 //_____________________________________________________________________________
 Int_t AliBaseCalibViewer::Integrate(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts, 
-                                   Float_t /*sigmaMax*/, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM, 
-                                   const Char_t *sigmas, Float_t /*sigmaStep*/) const {
-   //
-   // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
-   // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
-   // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
-   // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
-   // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
-   // The actual work is done on the array.
-   /* Begin_Latex 
-         f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{-#infty}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
-      End_Latex  
-   */
-   
-   Double_t ltmFraction = 0.8;
-   
-   TString drawStr(drawCommand);
-   Bool_t dangerousToDraw = drawStr.Contains(":") || drawStr.Contains(">>");
-   if (dangerousToDraw) {
-      Warning("Integrate", "The draw string must not contain ':' or '>>'.");
-      return -1;
-   }
-   drawStr += " >> tempHist";
-   
-   Int_t entries = EasyDraw1D(drawStr.Data(), sector, cuts, "goff");
-   TH1F *htemp = (TH1F*)gDirectory->Get("tempHist");
-   TGraph *integralGraphMean   = 0;
-   TGraph *integralGraphMedian = 0;
-   TGraph *integralGraphLTM    = 0;
-   Double_t *values = fTree->GetV1();  // value is the array containing 'entries' numbers
-   Int_t    *index  = new Int_t[entries];
-   Float_t  *xarray = new Float_t[entries];
-   Float_t  *yarray = new Float_t[entries];
-   TMath::Sort(entries, values, index, kFALSE);
-   
-   Double_t mean = TMath::Mean(entries, values);
-   Double_t median = TMath::Median(entries, values);
-   Double_t sigma = TMath::RMS(entries, values);
-   
-   // parse sigmas string
-   TObjArray *sigmasTokens = TString(sigmas).Tokenize(";");  
-   TVectorF nsigma(sigmasTokens->GetEntriesFast());
-   for (Int_t i = 0; i < sigmasTokens->GetEntriesFast(); i++) {
-      TString str(((TObjString*)sigmasTokens->At(i))->GetString());
-      Double_t sig = (str.IsFloat()) ? str.Atof() : 0;
-      nsigma[i] = sig;
-   }
-   delete sigmasTokens;
-   TLegend * legend = new TLegend(.7,.7, .99, .99, "Integrated histogram");
-   //fListOfObjectsToBeDeleted->Add(legend);
-  
-   if (plotMean) {
-      for (Int_t i = 0; i < entries; i++) {
-         xarray[i] = (values[index[i]] - mean) / sigma; 
-         yarray[i] = float(i) / float(entries);
-      }
-      integralGraphMean = new TGraph(entries, xarray, yarray);
-      if (integralGraphMean) {
-         //fListOfObjectsToBeDeleted->Add(integralGraphMean);
-         integralGraphMean->SetLineColor(kRed);
-         legend->AddEntry(integralGraphMean, "Mean", "l");
-         integralGraphMean->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         integralGraphMean->Draw("alu");
-         DrawLines(integralGraphMean, nsigma, legend, kRed, kTRUE);
-      }
-   }
-   if (plotMedian) {
-      for (Int_t i = 0; i < entries; i++) {
-         xarray[i] = (values[index[i]] - median) / sigma; 
-         yarray[i] = float(i) / float(entries);
-      }
-      integralGraphMedian = new TGraph(entries, xarray, yarray);
-      if (integralGraphMedian) {
-         //fListOfObjectsToBeDeleted->Add(integralGraphMedian);
-         integralGraphMedian->SetLineColor(kBlue);
-         legend->AddEntry(integralGraphMedian, "Median", "l");
-         integralGraphMedian->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         if (plotMean && integralGraphMean) integralGraphMedian->Draw("samelu");
-            else integralGraphMedian->Draw("alu");
-         DrawLines(integralGraphMedian, nsigma, legend, kBlue, kTRUE);
-      }
-   }
-   if (plotLTM) {
-      Double_t ltmRms = 0;
-      Double_t ltm = GetLTM(entries, values, &ltmRms, ltmFraction);
-      for (Int_t i = 0; i < entries; i++) {
-         xarray[i] = (values[index[i]] - ltm) / ltmRms; 
-         yarray[i] = float(i) / float(entries);
-      }
-      integralGraphLTM = new TGraph(entries, xarray, yarray);
-      if (integralGraphLTM) {
-         //fListOfObjectsToBeDeleted->Add(integralGraphLTM);
-         integralGraphLTM->SetLineColor(kGreen+2);
-         legend->AddEntry(integralGraphLTM, "LTM", "l");
-         integralGraphLTM->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
-         if ((plotMean && integralGraphMean) || (plotMedian && integralGraphMedian)) integralGraphLTM->Draw("samelu");
-            else integralGraphLTM->Draw("alu");
-         DrawLines(integralGraphLTM, nsigma, legend, kGreen+2, kTRUE);
-      }
-   }
-   delete [] index;
-   delete [] xarray;
-   delete [] yarray;
-   if (!plotMean && !plotMedian && !plotLTM) return -1;
-   legend->Draw();
-   return entries;
+    Float_t /*sigmaMax*/, Bool_t plotMean, Bool_t plotMedian, Bool_t plotLTM, 
+    const Char_t *sigmas, Float_t /*sigmaStep*/) const {
+  //
+  // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
+  // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
+  // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
+  // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
+  // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
+  // The actual work is done on the array.
+  /* Begin_Latex 
+     f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{-#infty}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
+     End_Latex  
+     */
+
+  Double_t ltmFraction = 0.8;
+
+  TString drawStr(drawCommand);
+  Bool_t dangerousToDraw = drawStr.Contains(":") || drawStr.Contains(">>");
+  if (dangerousToDraw) {
+    Warning("Integrate", "The draw string must not contain ':' or '>>'.");
+    return -1;
+  }
+  drawStr += " >> tempHist";
+
+  Int_t entries = EasyDraw1D(drawStr.Data(), sector, cuts, "goff");
+  TH1F *htemp = (TH1F*)gDirectory->Get("tempHist");
+  TGraph *integralGraphMean   = 0;
+  TGraph *integralGraphMedian = 0;
+  TGraph *integralGraphLTM    = 0;
+  Double_t *values = fTree->GetV1();  // value is the array containing 'entries' numbers
+  Int_t    *index  = new Int_t[entries];
+  Float_t  *xarray = new Float_t[entries];
+  Float_t  *yarray = new Float_t[entries];
+  TMath::Sort(entries, values, index, kFALSE);
+
+  Double_t mean = TMath::Mean(entries, values);
+  Double_t median = TMath::Median(entries, values);
+  Double_t sigma = TMath::RMS(entries, values);
+
+  // parse sigmas string
+  TObjArray *sigmasTokens = TString(sigmas).Tokenize(";");  
+  TVectorF nsigma(sigmasTokens->GetEntriesFast());
+  for (Int_t i = 0; i < sigmasTokens->GetEntriesFast(); i++) {
+    TString str(((TObjString*)sigmasTokens->At(i))->GetString());
+    Double_t sig = (str.IsFloat()) ? str.Atof() : 0;
+    nsigma[i] = sig;
+  }
+  delete sigmasTokens;
+  TLegend * legend = new TLegend(.7,.7, .99, .99, "Integrated histogram");
+  //fListOfObjectsToBeDeleted->Add(legend);
+
+  if (plotMean) {
+    for (Int_t i = 0; i < entries; i++) {
+      xarray[i] = (values[index[i]] - mean) / sigma; 
+      yarray[i] = float(i) / float(entries);
+    }
+    integralGraphMean = new TGraph(entries, xarray, yarray);
+    if (integralGraphMean) {
+      //fListOfObjectsToBeDeleted->Add(integralGraphMean);
+      integralGraphMean->SetLineColor(kRed);
+      legend->AddEntry(integralGraphMean, "Mean", "l");
+      integralGraphMean->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      integralGraphMean->Draw("alu");
+      DrawLines(integralGraphMean, nsigma, legend, kRed, kTRUE);
+    }
+  }
+  if (plotMedian) {
+    for (Int_t i = 0; i < entries; i++) {
+      xarray[i] = (values[index[i]] - median) / sigma; 
+      yarray[i] = float(i) / float(entries);
+    }
+    integralGraphMedian = new TGraph(entries, xarray, yarray);
+    if (integralGraphMedian) {
+      //fListOfObjectsToBeDeleted->Add(integralGraphMedian);
+      integralGraphMedian->SetLineColor(kBlue);
+      legend->AddEntry(integralGraphMedian, "Median", "l");
+      integralGraphMedian->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      if (plotMean && integralGraphMean) integralGraphMedian->Draw("samelu");
+      else integralGraphMedian->Draw("alu");
+      DrawLines(integralGraphMedian, nsigma, legend, kBlue, kTRUE);
+    }
+  }
+  if (plotLTM) {
+    Double_t ltmRms = 0;
+    Double_t ltm = GetLTM(entries, values, &ltmRms, ltmFraction);
+    for (Int_t i = 0; i < entries; i++) {
+      xarray[i] = (values[index[i]] - ltm) / ltmRms; 
+      yarray[i] = float(i) / float(entries);
+    }
+    integralGraphLTM = new TGraph(entries, xarray, yarray);
+    if (integralGraphLTM) {
+      //fListOfObjectsToBeDeleted->Add(integralGraphLTM);
+      integralGraphLTM->SetLineColor(kGreen+2);
+      legend->AddEntry(integralGraphLTM, "LTM", "l");
+      integralGraphLTM->SetTitle(Form("%s, integrated; Multiples of #sigma; Fraction of included data", htemp->GetTitle()));
+      if ((plotMean && integralGraphMean) || (plotMedian && integralGraphMedian)) integralGraphLTM->Draw("samelu");
+      else integralGraphLTM->Draw("alu");
+      DrawLines(integralGraphLTM, nsigma, legend, kGreen+2, kTRUE);
+    }
+  }
+  delete [] index;
+  delete [] xarray;
+  delete [] yarray;
+  if (!plotMean && !plotMedian && !plotLTM) return -1;
+  legend->Draw();
+  return entries;
 }
 
 //_____________________________________________________________________________
 TH1F* AliBaseCalibViewer::Integrate(TH1F *histogram, Float_t mean, Float_t sigma, Float_t sigmaMax, Float_t sigmaStep){
-   //
-   // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
-   // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
-   // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
-   // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
-   // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
-   // The actual work is done on the array.
-   /* Begin_Latex 
-         f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{-#infty}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
-      End_Latex  
-      Begin_Macro(source)
-      {
-         Float_t mean = 0;
-         Float_t sigma = 1.5;
-         Float_t sigmaMax = 4;
-         gROOT->SetStyle("Plain");
-         TH1F *distribution = new TH1F("Distribution2", "Distribution f(x, #mu, #sigma)", 1000,-5,5);
-         TRandom rand(23);
-         for (Int_t i = 0; i <50000;i++) distribution->Fill(rand.Gaus(mean, sigma));
-         Float_t *ar = distribution->GetArray();
-         
-         TCanvas* macro_example_canvas = new TCanvas("macro_example_canvas_Integrate", "", 350, 350);
-         macro_example_canvas->Divide(0,2);
-         TVirtualPad *pad1 = macro_example_canvas->cd(1);
-         pad1->SetGridy();
-         pad1->SetGridx();
-         distribution->Draw();
-         TVirtualPad *pad2 = macro_example_canvas->cd(2);
-         pad2->SetGridy();
-         pad2->SetGridx();
-         TH1F *shist = AliTPCCalibViewer::Integrate(distribution, mean, sigma, sigmaMax);
-         shist->SetNameTitle("Cumulative","Cumulative S(t, #mu, #sigma)");
-         shist->Draw();  
-         
-         return macro_example_canvas_Integrate;
-      }  
-      End_Macro
-   */ 
-
-   
-   Float_t *array = histogram->GetArray();
-   Int_t    nbins = histogram->GetXaxis()->GetNbins();
-   Float_t binLow = histogram->GetXaxis()->GetXmin();
-   Float_t binUp  = histogram->GetXaxis()->GetXmax();
-   return Integrate(nbins, array, nbins, binLow, binUp, mean, sigma, sigmaMax, sigmaStep);
+  //
+  // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
+  // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
+  // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
+  // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
+  // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
+  // The actual work is done on the array.
+  /* Begin_Latex 
+     f(x, #mu, #sigma)     #Rightarrow       S(t, #mu, #sigma) = #int_{-#infty}^{#mu + t #sigma} f(x, #mu, #sigma) dx / #int_{-#infty}^{+#infty} f(x, #mu, #sigma) dx
+     End_Latex  
+     Begin_Macro(source)
+     {
+     Float_t mean = 0;
+     Float_t sigma = 1.5;
+     Float_t sigmaMax = 4;
+     gROOT->SetStyle("Plain");
+     TH1F *distribution = new TH1F("Distribution2", "Distribution f(x, #mu, #sigma)", 1000,-5,5);
+     TRandom rand(23);
+     for (Int_t i = 0; i <50000;i++) distribution->Fill(rand.Gaus(mean, sigma));
+     Float_t *ar = distribution->GetArray();
+
+     TCanvas* macro_example_canvas = new TCanvas("macro_example_canvas_Integrate", "", 350, 350);
+     macro_example_canvas->Divide(0,2);
+     TVirtualPad *pad1 = macro_example_canvas->cd(1);
+     pad1->SetGridy();
+     pad1->SetGridx();
+     distribution->Draw();
+     TVirtualPad *pad2 = macro_example_canvas->cd(2);
+     pad2->SetGridy();
+     pad2->SetGridx();
+     TH1F *shist = AliTPCCalibViewer::Integrate(distribution, mean, sigma, sigmaMax);
+     shist->SetNameTitle("Cumulative","Cumulative S(t, #mu, #sigma)");
+     shist->Draw();  
+
+     return macro_example_canvas_Integrate;
+     }  
+     End_Macro
+     */ 
+
+
+  Float_t *array = histogram->GetArray();
+  Int_t    nbins = histogram->GetXaxis()->GetNbins();
+  Float_t binLow = histogram->GetXaxis()->GetXmin();
+  Float_t binUp  = histogram->GetXaxis()->GetXmax();
+  return Integrate(nbins, array, nbins, binLow, binUp, mean, sigma, sigmaMax, sigmaStep);
 }
 
 //_____________________________________________________________________________
 TH1F* AliBaseCalibViewer::Integrate(Int_t n, Float_t *array, Int_t nbins, Float_t binLow, Float_t binUp, 
-                                   Float_t mean, Float_t sigma, Float_t sigmaMax, Float_t sigmaStep){
-   // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
-   // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
-   // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
-   // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
-   // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
-   // Here the actual work is done.
-      
-   Bool_t givenUnits = kTRUE;
-   if (TMath::Abs(sigma) < 1.e-10 && TMath::Abs(sigmaMax) < 1.e-10) givenUnits = kFALSE;
-   if (givenUnits) {
-      sigma = 1;
-      sigmaMax = (binUp - binLow) / 2.;
-   }
-   
-   Float_t binWidth = (binUp-binLow)/(nbins - 1);
-   if (sigmaStep <= 0) sigmaStep = binWidth;
-   Int_t kbins =  (Int_t)(sigmaMax * sigma / sigmaStep) + 1;  // + 1  due to overflow bin in histograms
-   Float_t kbinLow = givenUnits ? binLow : -sigmaMax;
-   Float_t kbinUp  = givenUnits ? binUp  : sigmaMax;
-   TH1F *hist = 0; 
-   if (givenUnits)  hist = new TH1F("integratedHisto","Integrated Histogram; Given x; Fraction of included data", kbins, kbinLow, kbinUp); 
-   if (!givenUnits) hist = new TH1F("integratedHisto","Integrated Histogram; Multiples of #sigma; Fraction of included data", kbins, kbinLow, kbinUp); 
-   hist->SetDirectory(0);
-   hist->Reset();
-   
-   // calculate normalization
- //  printf("calculating normalization, integrating from bin 1 to %i \n", n);
-   Double_t normalization = 0;
-   for (Int_t i = 1; i <= n; i++) {
-        normalization += array[i];
-   }
- //  printf("normalization: %f \n", normalization);
-   
-   // given units: units from given histogram
-   // sigma units: in units of sigma
-   // iDelta: integrate in interval (mean +- iDelta), given units
-   // x:      ofset from mean for integration, given units
-   // hist:   needs 
-   
-   // fill histogram
-   for (Float_t iDelta = mean - sigmaMax * sigma; iDelta <= mean + sigmaMax * sigma; iDelta += sigmaStep) {
-      // integrate array
-      Double_t value = 0;
-      for (Float_t x = mean - sigmaMax * sigma; x <= iDelta; x += binWidth) {
-         value += (x <= binUp && x >= binLow)  ? array[GetBin(x, nbins, binLow, binUp)] : 0;
-      }
-      if (value / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", value, normalization);
-      if (value / normalization > 100) return hist;
-      Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
+    Float_t mean, Float_t sigma, Float_t sigmaMax, Float_t sigmaStep){
+  // Creates an integrated histogram Begin_Latex S(t, #mu, #sigma) End_Latex, out of the input distribution distribution Begin_Latex f(x, #mu, #sigma) End_Latex, given in "histogram"   
+  // "mean" and "sigma" are Begin_Latex #mu End_Latex and  Begin_Latex #sigma End_Latex of the distribution in "histogram", to be specified by the user
+  // sigmaMax: up to which sigma around the mean/median/LTM you want to integrate 
+  // if "igma == 0" and "sigmaMax == 0" the whole histogram is integrated
+  // "sigmaStep": the binsize of the generated histogram, -1 means, that the maximal reasonable stepsize is used
+  // Here the actual work is done.
+
+  Bool_t givenUnits = kTRUE;
+  if (TMath::Abs(sigma) < 1.e-10 && TMath::Abs(sigmaMax) < 1.e-10) givenUnits = kFALSE;
+  if (givenUnits) {
+    sigma = 1;
+    sigmaMax = (binUp - binLow) / 2.;
+  }
+
+  Float_t binWidth = (binUp-binLow)/(nbins - 1);
+  if (sigmaStep <= 0) sigmaStep = binWidth;
+  Int_t kbins =  (Int_t)(sigmaMax * sigma / sigmaStep) + 1;  // + 1  due to overflow bin in histograms
+  Float_t kbinLow = givenUnits ? binLow : -sigmaMax;
+  Float_t kbinUp  = givenUnits ? binUp  : sigmaMax;
+  TH1F *hist = 0; 
+  if (givenUnits)  hist = new TH1F("integratedHisto","Integrated Histogram; Given x; Fraction of included data", kbins, kbinLow, kbinUp); 
+  if (!givenUnits) hist = new TH1F("integratedHisto","Integrated Histogram; Multiples of #sigma; Fraction of included data", kbins, kbinLow, kbinUp); 
+  hist->SetDirectory(0);
+  hist->Reset();
+
+  // calculate normalization
+  //  printf("calculating normalization, integrating from bin 1 to %i \n", n);
+  Double_t normalization = 0;
+  for (Int_t i = 1; i <= n; i++) {
+    normalization += array[i];
+  }
+  //  printf("normalization: %f \n", normalization);
+
+  // given units: units from given histogram
+  // sigma units: in units of sigma
+  // iDelta: integrate in interval (mean +- iDelta), given units
+  // x:      ofset from mean for integration, given units
+  // hist:   needs 
+
+  // fill histogram
+  for (Float_t iDelta = mean - sigmaMax * sigma; iDelta <= mean + sigmaMax * sigma; iDelta += sigmaStep) {
+    // integrate array
+    Double_t value = 0;
+    for (Float_t x = mean - sigmaMax * sigma; x <= iDelta; x += binWidth) {
+      value += (x <= binUp && x >= binLow)  ? array[GetBin(x, nbins, binLow, binUp)] : 0;
+    }
+    if (value / normalization > 100) printf("+++ Error, value to big: %f, normalization with %f will fail  +++ \n", value, normalization);
+    if (value / normalization > 100) return hist;
+    Int_t bin = GetBin(iDelta/sigma, kbins, kbinLow, kbinUp);
     //  printf("first integration bin: %i, last integration bin: %i \n", GetBin(mean - sigmaMax * sigma, nbins, binLow, binUp), GetBin(iDelta, nbins, binLow, binUp));
     //  printf("value: %f, normalization: %f, normalized value: %f, iDelta: %f, Bin: %i \n", value, normalization, value/normalization, iDelta, bin);
-      value = (value / normalization);
-      hist->SetBinContent(bin, value);
-   }
-   return hist;
+    value = (value / normalization);
+    hist->SetBinContent(bin, value);
+  }
+  return hist;
 }
 
 //_____________________________________________________________________________
 void AliBaseCalibViewer::DrawLines(TH1F *histogram, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const {
-   //
-   // Private function for SigmaCut(...) and Integrate(...)
-   // Draws lines into the given histogram, specified by "nsigma", the lines are addeed to the legend
-   //
-  
-   // start to draw the lines, loop over requested sigmas
+  //
+  // Private function for SigmaCut(...) and Integrate(...)
+  // Draws lines into the given histogram, specified by "nsigma", the lines are addeed to the legend
+  //
+
+  // start to draw the lines, loop over requested sigmas
   for (Int_t i = 0; i < nsigma.GetNoElements(); i++) {
     if (!pm) {
       Int_t bin = histogram->GetXaxis()->FindBin(nsigma[i]);
       TLine* lineUp = new TLine(nsigma[i], 0, nsigma[i], histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineUp);
+      //fListOfObjectsToBeDeleted->Add(lineUp);
       lineUp->SetLineColor(color);
       lineUp->SetLineStyle(2 + i);
       lineUp->Draw();
       TLine* lineLeft = new TLine(nsigma[i], histogram->GetBinContent(bin), 0, histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineLeft);
+      //fListOfObjectsToBeDeleted->Add(lineLeft);
       lineLeft->SetLineColor(color);
       lineLeft->SetLineStyle(2 + i);
       lineLeft->Draw();
@@ -925,24 +925,24 @@ void AliBaseCalibViewer::DrawLines(TH1F *histogram, TVectorF nsigma, TLegend *le
     else { // if (pm)
       Int_t bin = histogram->GetXaxis()->FindBin(nsigma[i]);
       TLine* lineUp1 = new TLine(nsigma[i], 0, nsigma[i], histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineUp1);
+      //fListOfObjectsToBeDeleted->Add(lineUp1);
       lineUp1->SetLineColor(color);
       lineUp1->SetLineStyle(2 + i);
       lineUp1->Draw();
       TLine* lineLeft1 = new TLine(nsigma[i], histogram->GetBinContent(bin), histogram->GetBinLowEdge(0)+histogram->GetBinWidth(0), histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineLeft1);
+      //fListOfObjectsToBeDeleted->Add(lineLeft1);
       lineLeft1->SetLineColor(color);
       lineLeft1->SetLineStyle(2 + i);
       lineLeft1->Draw();
       legend->AddEntry(lineLeft1, Form("Fraction(+%f #sigma) = %f",nsigma[i], histogram->GetBinContent(bin)), "l");
       bin = histogram->GetXaxis()->FindBin(-nsigma[i]);
       TLine* lineUp2 = new TLine(-nsigma[i], 0, -nsigma[i], histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineUp2);
+      //fListOfObjectsToBeDeleted->Add(lineUp2);
       lineUp2->SetLineColor(color);
       lineUp2->SetLineStyle(2 + i);
       lineUp2->Draw();
       TLine* lineLeft2 = new TLine(-nsigma[i], histogram->GetBinContent(bin), histogram->GetBinLowEdge(0)+histogram->GetBinWidth(0), histogram->GetBinContent(bin));
-         //fListOfObjectsToBeDeleted->Add(lineLeft2);
+      //fListOfObjectsToBeDeleted->Add(lineLeft2);
       lineLeft2->SetLineColor(color);
       lineLeft2->SetLineStyle(2 + i);
       lineLeft2->Draw();
@@ -953,21 +953,21 @@ void AliBaseCalibViewer::DrawLines(TH1F *histogram, TVectorF nsigma, TLegend *le
 
 //_____________________________________________________________________________
 void AliBaseCalibViewer::DrawLines(TGraph *graph, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const {
-   //
-   // Private function for SigmaCut(...) and Integrate(...)
-   // Draws lines into the given histogram, specified by "nsigma", the lines are addeed to the legend
-   //
-  
-   // start to draw the lines, loop over requested sigmas
+  //
+  // Private function for SigmaCut(...) and Integrate(...)
+  // Draws lines into the given histogram, specified by "nsigma", the lines are addeed to the legend
+  //
+
+  // start to draw the lines, loop over requested sigmas
   for (Int_t i = 0; i < nsigma.GetNoElements(); i++) {
     if (!pm) {
       TLine* lineUp = new TLine(nsigma[i], 0, nsigma[i], graph->Eval(nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineUp);
+      //fListOfObjectsToBeDeleted->Add(lineUp);
       lineUp->SetLineColor(color);
       lineUp->SetLineStyle(2 + i);
       lineUp->Draw();
       TLine* lineLeft = new TLine(nsigma[i], graph->Eval(nsigma[i]), 0, graph->Eval(nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineLeft);
+      //fListOfObjectsToBeDeleted->Add(lineLeft);
       lineLeft->SetLineColor(color);
       lineLeft->SetLineStyle(2 + i);
       lineLeft->Draw();
@@ -975,23 +975,23 @@ void AliBaseCalibViewer::DrawLines(TGraph *graph, TVectorF nsigma, TLegend *lege
     }
     else { // if (pm)
       TLine* lineUp1 = new TLine(nsigma[i], 0, nsigma[i], graph->Eval(nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineUp1);
+      //fListOfObjectsToBeDeleted->Add(lineUp1);
       lineUp1->SetLineColor(color);
       lineUp1->SetLineStyle(2 + i);
       lineUp1->Draw();
       TLine* lineLeft1 = new TLine(nsigma[i], graph->Eval(nsigma[i]), graph->GetHistogram()->GetXaxis()->GetBinLowEdge(0), graph->Eval(nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineLeft1);
+      //fListOfObjectsToBeDeleted->Add(lineLeft1);
       lineLeft1->SetLineColor(color);
       lineLeft1->SetLineStyle(2 + i);
       lineLeft1->Draw();
       legend->AddEntry(lineLeft1, Form("Fraction(+%f #sigma) = %f",nsigma[i], graph->Eval(nsigma[i])), "l");
       TLine* lineUp2 = new TLine(-nsigma[i], 0, -nsigma[i], graph->Eval(-nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineUp2);
+      //fListOfObjectsToBeDeleted->Add(lineUp2);
       lineUp2->SetLineColor(color);
       lineUp2->SetLineStyle(2 + i);
       lineUp2->Draw();
       TLine* lineLeft2 = new TLine(-nsigma[i], graph->Eval(-nsigma[i]), graph->GetHistogram()->GetXaxis()->GetBinLowEdge(0), graph->Eval(-nsigma[i]));
-         //fListOfObjectsToBeDeleted->Add(lineLeft2);
+      //fListOfObjectsToBeDeleted->Add(lineLeft2);
       lineLeft2->SetLineColor(color);
       lineLeft2->SetLineStyle(2 + i);
       lineLeft2->Draw();
index ac44dd0..9efaba3 100644 (file)
 class TLegend;
 
 class AliBaseCalibViewer : public TObject {
- public:
-   AliBaseCalibViewer();
-   AliBaseCalibViewer(const AliBaseCalibViewer &c);
-   AliBaseCalibViewer(TTree* tree);
-   AliBaseCalibViewer(const Char_t* fileName, const Char_t* treeName = "tree");
-   AliBaseCalibViewer &operator = (const AliBaseCalibViewer & param);
-   virtual ~AliBaseCalibViewer();
-   virtual void Delete(Option_t* option = "");
-
-   TString& GetAbbreviation()  { return fAbbreviation;  }
-   TString& GetAppendString()  { return fAppendString; }
-   void SetAbbreviation(const Char_t* abr) { fAbbreviation = abr; }
-   void SetAppendString(const Char_t* str) { fAppendString = str; }
-
-   //virtual void GetTimeInfoOCDB(const Char_t* runList, const Char_t* outFile,
-                                //Int_t firstRun, Int_t lastRun, UInt_t infoFlags,
-                                //const Char_t* ocdbStorage) = 0;
-
-   virtual void     Draw(Option_t* opt="") { fTree->Draw(opt); }
-   virtual Long64_t Draw(const Char_t* varexp, const TCut& selection, Option_t* option = "", 
-                        Long64_t nentries = 1000000000, Long64_t firstentry = 0) { 
-     return fTree->Draw(varexp, selection, option, nentries, firstentry); 
-   };
-   virtual Long64_t Draw(const Char_t* varexp, const Char_t* selection, Option_t* option = "", 
-                        Long64_t nentries = 1000000000, Long64_t firstentry = 0) { 
-     return fTree->Draw(varexp, selection, option, nentries, firstentry); 
-   };
-
-   virtual const char* AddAbbreviations(Char_t* c, Bool_t printDrawCommand = kFALSE) = 0;
-   // easy drawing of data, use '~' for abbreviation of '.fElements'
-   virtual Int_t EasyDraw(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
-                         const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
-   // easy drawing of data, use '~' for abbreviation of '.fElements'
-   virtual Int_t EasyDraw(const Char_t* drawCommand, Int_t sector, const Char_t* cuts = 0, 
-                         const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
-   // easy drawing of data, use '~' for abbreviation of '.fElements'
-   virtual Int_t EasyDraw1D(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
-                           const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
-   // easy drawing of data, use '~' for abbreviation of '.fElements'
-   virtual Int_t EasyDraw1D(const Char_t* drawCommand, Int_t sector, const Char_t* cuts = 0, 
-                           const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
-   // formats title and axis labels of histo, removes '.fElements'
-   void FormatHistoLabels(TH1 *histo) const;   
-   // draws 1d histograms and superimposes mean, median, ltm and several sigma cuts
-   Int_t  DrawHisto1D(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
-                     const Char_t *sigmas = "2;4;6", Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
-                     Bool_t plotLTM = kTRUE) const; 
-   // draws fraction of used pads over different sigma cuts
-   Int_t     SigmaCut(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
-                     Float_t sigmaMax = 5, Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
-                     Bool_t plotLTM = kTRUE, Bool_t pm = kFALSE, const Char_t *sigmas = "", 
-                     Float_t sigmaStep = -1) const;    
-   // draws an integrated histogram
-   Int_t    Integrate(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
-                     Float_t sigmaMax = 5, Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
-                     Bool_t plotLTM = kTRUE, const Char_t *sigmas = "", Float_t sigmaStep = -1) const;    
-
-   virtual TObjArray* GetListOfVariables(Bool_t printList = kFALSE) = 0;
-   virtual TObjArray* GetListOfNormalizationVariables(Bool_t printList = kFALSE) const = 0;
-
-   TFriendElement* AddReferenceTree(const Char_t* filename, const Char_t* treename = "tree", const Char_t* refname = "R");
-   TFriendElement* AddFriend(const Char_t* treename, const Char_t* filename) 
-   {return fTree->AddFriend(treename, filename);};
-   TFriendElement* AddFriend(TTree* tree, const Char_t* alias, Bool_t warn=kFALSE) 
-   {return fTree->AddFriend(tree, alias, warn);};
-   TFriendElement* AddFriend(const Char_t* treename, TFile* file) 
-   {return fTree->AddFriend(treename, file);};
-   TTree * GetTree() const { return fTree;}
-
-   TString* Fit(const Char_t* drawCommand, const Char_t* formula, const Char_t* cuts, 
-               Double_t & chi2, TVectorD &fitParam, TMatrixD &covMatrix);
-   static Double_t GetLTM(Int_t n, Double_t *array, Double_t *sigma = 0, Double_t fraction = 0.9);
-   static Int_t GetBin(Float_t value, Int_t nbins, Double_t binLow, Double_t binUp);
-   static TH1F* SigmaCut(Int_t n, Float_t *array, Float_t mean, Float_t sigma, Int_t nbins, 
-                        Float_t binLow, Float_t binUp, Float_t sigmaMax, Float_t sigmaStep = -1, Bool_t pm = kFALSE);
-   static TH1F* SigmaCut(TH1F *histogram, Float_t mean, Float_t sigma, Float_t sigmaMax, 
-                        Float_t sigmaStep = -1, Bool_t pm = kFALSE);
-   static TH1F* Integrate(TH1F *histogram, Float_t mean = 0, Float_t sigma = 0, 
-                         Float_t sigmaMax = 0, Float_t sigmaStep = -1);
-   static TH1F* Integrate(Int_t n, Float_t *array, Int_t nbins, Float_t binLow, Float_t binUp, 
-                         Float_t mean = 0, Float_t sigma = 0, Float_t sigmaMax = 0, Float_t sigmaStep = -1);
-   static TH1F* SigmaCut(Int_t n, Double_t *array, Double_t mean, Double_t sigma, 
-                        Int_t nbins, Double_t *xbins, Double_t sigmaMax);
-
- protected:
-   TTree* fTree;     // tree containing visualization data (e.g. written by AliTPCCalPad::MakeTree(...)
-   TFile* fFile;     // file that contains a calPads tree (e.g. written by AliTPCCalPad::MakeTree(...)
-   TObjArray* fListOfObjectsToBeDeleted;  //Objects, that will be deleted when the destructor ist called
-   Bool_t fTreeMustBeDeleted;  // decides weather the tree must be deleted in destructor or not 
-   TString fAbbreviation;       // the abreviation for '.fElements'
-   TString fAppendString;      // '.fElements', stored in a TStrig
-   
-   void DrawLines(TH1F *cutHistoMean, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const;
-   void DrawLines(TGraph *graph, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const;
-   
-   
-   ClassDef(AliBaseCalibViewer,1)    //  Base calibration viewer class
+  public:
+    AliBaseCalibViewer();
+    AliBaseCalibViewer(const AliBaseCalibViewer &c);
+    AliBaseCalibViewer(TTree* tree);
+    AliBaseCalibViewer(const Char_t* fileName, const Char_t* treeName = "tree");
+    AliBaseCalibViewer &operator = (const AliBaseCalibViewer & param);
+    virtual ~AliBaseCalibViewer();
+    virtual void Delete(Option_t* option = "");
+
+    TString& GetAbbreviation()  { return fAbbreviation;  }
+    TString& GetAppendString()  { return fAppendString; }
+    void SetAbbreviation(const Char_t* abr) { fAbbreviation = abr; }
+    void SetAppendString(const Char_t* str) { fAppendString = str; }
+
+    //virtual void GetTimeInfoOCDB(const Char_t* runList, const Char_t* outFile,
+    //Int_t firstRun, Int_t lastRun, UInt_t infoFlags,
+    //const Char_t* ocdbStorage) = 0;
+
+    virtual void     Draw(Option_t* opt="") { fTree->Draw(opt); }
+    virtual Long64_t Draw(const Char_t* varexp, const TCut& selection, Option_t* option = "", 
+        Long64_t nentries = 1000000000, Long64_t firstentry = 0) { 
+      return fTree->Draw(varexp, selection, option, nentries, firstentry); 
+    };
+    virtual Long64_t Draw(const Char_t* varexp, const Char_t* selection, Option_t* option = "", 
+        Long64_t nentries = 1000000000, Long64_t firstentry = 0) { 
+      return fTree->Draw(varexp, selection, option, nentries, firstentry); 
+    };
+
+    virtual const char* AddAbbreviations(Char_t* c, Bool_t printDrawCommand = kFALSE) = 0;
+    // easy drawing of data, use '~' for abbreviation of '.fElements'
+    virtual Int_t EasyDraw(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
+        const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
+    // easy drawing of data, use '~' for abbreviation of '.fElements'
+    virtual Int_t EasyDraw(const Char_t* drawCommand, Int_t sector, const Char_t* cuts = 0, 
+        const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
+    // easy drawing of data, use '~' for abbreviation of '.fElements'
+    virtual Int_t EasyDraw1D(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
+        const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
+    // easy drawing of data, use '~' for abbreviation of '.fElements'
+    virtual Int_t EasyDraw1D(const Char_t* drawCommand, Int_t sector, const Char_t* cuts = 0, 
+        const Char_t* drawOptions = 0, Bool_t writeDrawCommand = kFALSE) const = 0;   
+    // formats title and axis labels of histo, removes '.fElements'
+    void FormatHistoLabels(TH1 *histo) const;   
+    // draws 1d histograms and superimposes mean, median, ltm and several sigma cuts
+    Int_t  DrawHisto1D(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
+        const Char_t *sigmas = "2;4;6", Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
+        Bool_t plotLTM = kTRUE) const; 
+    // draws fraction of used pads over different sigma cuts
+    Int_t     SigmaCut(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
+        Float_t sigmaMax = 5, Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
+        Bool_t plotLTM = kTRUE, Bool_t pm = kFALSE, const Char_t *sigmas = "", 
+        Float_t sigmaStep = -1) const;    
+    // draws an integrated histogram
+    Int_t    Integrate(const Char_t* drawCommand, const Char_t* sector, const Char_t* cuts = 0, 
+        Float_t sigmaMax = 5, Bool_t plotMean = kTRUE, Bool_t plotMedian = kTRUE, 
+        Bool_t plotLTM = kTRUE, const Char_t *sigmas = "", Float_t sigmaStep = -1) const;    
+
+    virtual TObjArray* GetListOfVariables(Bool_t printList = kFALSE) = 0;
+    virtual TObjArray* GetListOfNormalizationVariables(Bool_t printList = kFALSE) const = 0;
+
+    TFriendElement* AddReferenceTree(const Char_t* filename, const Char_t* treename = "tree", const Char_t* refname = "R");
+    TFriendElement* AddFriend(const Char_t* treename, const Char_t* filename) 
+    {return fTree->AddFriend(treename, filename);};
+    TFriendElement* AddFriend(TTree* tree, const Char_t* alias, Bool_t warn=kFALSE) 
+    {return fTree->AddFriend(tree, alias, warn);};
+    TFriendElement* AddFriend(const Char_t* treename, TFile* file) 
+    {return fTree->AddFriend(treename, file);};
+    TTree * GetTree() const { return fTree;}
+
+    TString* Fit(const Char_t* drawCommand, const Char_t* formula, const Char_t* cuts, 
+        Double_t & chi2, TVectorD &fitParam, TMatrixD &covMatrix);
+    static Double_t GetLTM(Int_t n, Double_t *array, Double_t *sigma = 0, Double_t fraction = 0.9);
+    static Int_t GetBin(Float_t value, Int_t nbins, Double_t binLow, Double_t binUp);
+    static TH1F* SigmaCut(Int_t n, Float_t *array, Float_t mean, Float_t sigma, Int_t nbins, 
+        Float_t binLow, Float_t binUp, Float_t sigmaMax, Float_t sigmaStep = -1, Bool_t pm = kFALSE);
+    static TH1F* SigmaCut(TH1F *histogram, Float_t mean, Float_t sigma, Float_t sigmaMax, 
+        Float_t sigmaStep = -1, Bool_t pm = kFALSE);
+    static TH1F* Integrate(TH1F *histogram, Float_t mean = 0, Float_t sigma = 0, 
+        Float_t sigmaMax = 0, Float_t sigmaStep = -1);
+    static TH1F* Integrate(Int_t n, Float_t *array, Int_t nbins, Float_t binLow, Float_t binUp, 
+        Float_t mean = 0, Float_t sigma = 0, Float_t sigmaMax = 0, Float_t sigmaStep = -1);
+    static TH1F* SigmaCut(Int_t n, Double_t *array, Double_t mean, Double_t sigma, 
+        Int_t nbins, Double_t *xbins, Double_t sigmaMax);
+
+  protected:
+    TTree* fTree;     // tree containing visualization data (e.g. written by AliTPCCalPad::MakeTree(...)
+    TFile* fFile;     // file that contains a calPads tree (e.g. written by AliTPCCalPad::MakeTree(...)
+    TObjArray* fListOfObjectsToBeDeleted;  //Objects, that will be deleted when the destructor ist called
+    Bool_t fTreeMustBeDeleted;  // decides weather the tree must be deleted in destructor or not 
+    TString fAbbreviation;       // the abreviation for '.fElements'
+    TString fAppendString;      // '.fElements', stored in a TStrig
+
+    void DrawLines(TH1F *cutHistoMean, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const;
+    void DrawLines(TGraph *graph, TVectorF nsigma, TLegend *legend, Int_t color, Bool_t pm) const;
+
+
+    ClassDef(AliBaseCalibViewer,1)    //  Base calibration viewer class
 };
 
 #endif
index bc72b66..80334f5 100644 (file)
@@ -41,837 +41,837 @@ ClassImp(AliBaseCalibViewerGUI)
 //________________________________________________________________________________________
 AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const TGWindow *p, UInt_t w, UInt_t h)
   : TGCompositeFrame(p, w, h),
-    fViewer(0),
-    fContTopBottom(0),
-    fContLCR(0),
-    fContLeft(0),
-    ftabLeft(0),
-    ftabLeft0(0),
-    ftabLeft1(0),
-    ftabRight(0),
-    fTabRight0(0),
-    fTabRight1(0),
-    fContRight(0),
-    fContCenter(0),
-    fContPlotOpt(0),
-    fContDrawOpt(0),
-    fContDrawOptSub1D2D(0),
-    fContNormalized(0),
-    fContCustom(0),
-    fContCuts(0),
-    fContAddCuts(0),
-    fContFit(0),
-    fContAddFit(0),
-    fContScaling(0),
-    fContSetMax(0),
-    fContSetMin(0),
-    fContAddDrawOpt(0),
-    fListVariables(0),
-    fBtnDraw(0),
-    fBtnFit(0),
-    fBtnAddFitFunction(0),
-    fBtnGetMinMax(0),
-    fCanvMain(0),
-    fRadioRaw(0),
-    fRadioNormalized(0),
-    fRadioPredefined(0),
-    fRadioCustom(0),
-    fRadio1D(0),
-    fRadio2D(0),
-    fComboAddDrawOpt(0),
-    fChkAuto(0),
-    fChkAutoAppend(0),
-    fComboMethod(0),
-    fListNormalization(0),
-    fComboCustom(0),
-    fLblCustomDraw(0),
-    fChkAddDrawOpt(0),
-    fLblAddCuts(0),
-    fComboAddCuts(0), 
-    fComboCustomFit(0),
-    fChkSetMax(0),
-    fChkSetMin(0),
-    fChkGetMinMaxAuto(0),
-    fTxtSetMax(0),
-    fTxtSetMin(0) ,
-    fContDrawOpt1D(0), 
-    fcontDrawOpt1DSubLR(0),
-    fContDrawOpt1DSubNSC(0), 
-    fRadioNorm(0),
-    fRadioSigma(0),
-    fTxtSigmas(0),
-    fContCumuLR(0),
-    fContCumLeft(0),
-    fContCumRight(0),
-    fLblSigmaMax(0),
-    fTxtSigmaMax(0),
-    fRadioCumulative(0),
-    fCheckCumulativePM(0),
-    fRadioIntegrate(0),
-    fContDrawOpt1DSubMML(0),
-    fChkMean(0),
-    fChkMedian(0),
-    fChkLTM(0),
-    fContStatOpt(0),
-    fChkStatName(0),
-    fChkStatEntries(0),
-    fContStatMean(0),
-    fChkStatMean(0),
-    fChkStatMeanPM(0),
-    fContStatRMS(0),
-    fChkStatRMS(0),
-    fChkStatRMSPM(0),
-    fChkStatUnderflow(0),
-    fChkStatOverflow(0),
-    fChkStatIntegral(0),
-    fContStatSkew(0),
-    fChkStatSkewness(0),
-    fChkStatSkewnessPM(0),
-    fContStatKurt(0),
-    fChkStatKurtosis(0),
-    fChkStatKurtosisPM(0),
-    fBtnUnchekAll(0),
-    fContLabeling(0),
-    fChkLabelTitle(0),
-    fTxtLabelTitle(0),
-    fChkLabelXaxis(0),
-    fTxtLabelXaxis(0),
-    fChkLabelYaxis(0),
-    fTxtLabelYaxis(0),
-    fChkLabelGetAuto(0),
-    fContSave(0),
-    fBtnSave(0),
-    fContAddSaveOpt(0),
-    fChkAddSaveOpt(0),
-    fComboAddSaveOpt(0),
-    fContExport(0),
-    fContAddExport(0),
-    fComboExportName(0),
-    fBtnExport(0),
-    fBtnAddNorm(0), 
-    fContTree(0),
-    fBtnDumpToFile(0),
-    fBtnLoadTree(0),
-    fChkAddAsReference(0),
-    fTxtRefName(0), 
-    fInitialized(0)
+  fViewer(0),
+  fContTopBottom(0),
+  fContLCR(0),
+  fContLeft(0),
+  ftabLeft(0),
+  ftabLeft0(0),
+  ftabLeft1(0),
+  ftabRight(0),
+  fTabRight0(0),
+  fTabRight1(0),
+  fContRight(0),
+  fContCenter(0),
+  fContPlotOpt(0),
+  fContDrawOpt(0),
+  fContDrawOptSub1D2D(0),
+  fContNormalized(0),
+  fContCustom(0),
+  fContCuts(0),
+  fContAddCuts(0),
+  fContFit(0),
+  fContAddFit(0),
+  fContScaling(0),
+  fContSetMax(0),
+  fContSetMin(0),
+  fContAddDrawOpt(0),
+  fListVariables(0),
+  fBtnDraw(0),
+  fBtnFit(0),
+  fBtnAddFitFunction(0),
+  fBtnGetMinMax(0),
+  fCanvMain(0),
+  fRadioRaw(0),
+  fRadioNormalized(0),
+  fRadioPredefined(0),
+  fRadioCustom(0),
+  fRadio1D(0),
+  fRadio2D(0),
+  fComboAddDrawOpt(0),
+  fChkAuto(0),
+  fChkAutoAppend(0),
+  fComboMethod(0),
+  fListNormalization(0),
+  fComboCustom(0),
+  fLblCustomDraw(0),
+  fChkAddDrawOpt(0),
+  fLblAddCuts(0),
+  fComboAddCuts(0), 
+  fComboCustomFit(0),
+  fChkSetMax(0),
+  fChkSetMin(0),
+  fChkGetMinMaxAuto(0),
+  fTxtSetMax(0),
+  fTxtSetMin(0) ,
+  fContDrawOpt1D(0), 
+  fcontDrawOpt1DSubLR(0),
+  fContDrawOpt1DSubNSC(0), 
+  fRadioNorm(0),
+  fRadioSigma(0),
+  fTxtSigmas(0),
+  fContCumuLR(0),
+  fContCumLeft(0),
+  fContCumRight(0),
+  fLblSigmaMax(0),
+  fTxtSigmaMax(0),
+  fRadioCumulative(0),
+  fCheckCumulativePM(0),
+  fRadioIntegrate(0),
+  fContDrawOpt1DSubMML(0),
+  fChkMean(0),
+  fChkMedian(0),
+  fChkLTM(0),
+  fContStatOpt(0),
+  fChkStatName(0),
+  fChkStatEntries(0),
+  fContStatMean(0),
+  fChkStatMean(0),
+  fChkStatMeanPM(0),
+  fContStatRMS(0),
+  fChkStatRMS(0),
+  fChkStatRMSPM(0),
+  fChkStatUnderflow(0),
+  fChkStatOverflow(0),
+  fChkStatIntegral(0),
+  fContStatSkew(0),
+  fChkStatSkewness(0),
+  fChkStatSkewnessPM(0),
+  fContStatKurt(0),
+  fChkStatKurtosis(0),
+  fChkStatKurtosisPM(0),
+  fBtnUnchekAll(0),
+  fContLabeling(0),
+  fChkLabelTitle(0),
+  fTxtLabelTitle(0),
+  fChkLabelXaxis(0),
+  fTxtLabelXaxis(0),
+  fChkLabelYaxis(0),
+  fTxtLabelYaxis(0),
+  fChkLabelGetAuto(0),
+  fContSave(0),
+  fBtnSave(0),
+  fContAddSaveOpt(0),
+  fChkAddSaveOpt(0),
+  fComboAddSaveOpt(0),
+  fContExport(0),
+  fContAddExport(0),
+  fComboExportName(0),
+  fBtnExport(0),
+  fBtnAddNorm(0), 
+  fContTree(0),
+  fBtnDumpToFile(0),
+  fBtnLoadTree(0),
+  fChkAddAsReference(0),
+  fTxtRefName(0), 
+  fInitialized(0)
 {
-   //
-   // AliBaseCalibViewerGUI constructor; fileName specifies the ROOT tree used for drawing 
-   //
+  //
+  // AliBaseCalibViewerGUI constructor; fileName specifies the ROOT tree used for drawing 
+  //
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::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, 200, 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 button
-   fBtnDraw = new TGTextButton(fContLeft, "&Draw");
-   fContLeft->AddFrame(fBtnDraw, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
-   //fBtnDraw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoTest(=\"fBtnDraw clicked\")");
-   fBtnDraw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoDraw()");
-   fBtnDraw->SetToolTipText("Press here to draw according to selections.");
-   
-   // tabs on the left side:
-   ftabLeft = new TGTab(fContLeft);
-   fContLeft->AddFrame(ftabLeft, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
-   ftabLeft0 = ftabLeft->AddTab("General");
-   ftabLeft1 = ftabLeft->AddTab("More plot options");
-
-   
-      // **************************** content of tabLeft0 *******************************
-      
-      // draw options container *** fcontDrawOpt ***  " Plot options "
-      fContDrawOpt = new TGGroupFrame(ftabLeft0, "Plot options", kVerticalFrame | kFitWidth | kFitHeight);
-      ftabLeft0->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-      fContDrawOptSub1D2D = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
-      fContDrawOpt->AddFrame(fContDrawOptSub1D2D, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-         // ------------------------- content of fContDrawOpt -------------------------
-         // -- radio1D, radio2D, chkAuto
-         // 1D radio button
-         fRadio1D = new TGRadioButton(fContDrawOptSub1D2D, "1D", 30);
-         fContDrawOptSub1D2D->AddFrame(fRadio1D, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-         fRadio1D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-         fRadio1D->SetToolTipText("1D drawing \nSelect this if you want to have the full control for the custom draw.");
-         
-         // 2D radio button
-         fRadio2D = new TGRadioButton(fContDrawOptSub1D2D, "2D", 31);
-         fContDrawOptSub1D2D->AddFrame(fRadio2D, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
-         fRadio2D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-         fRadio2D->SetToolTipText("2D drawing");
-         
-         // additional draw options container
-         fContAddDrawOpt = new TGCompositeFrame(fContDrawOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContDrawOpt->AddFrame(fContAddDrawOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-
-            //  content of --- fContAddDrawOpt ---
-            // addition draw options label
-            fChkAddDrawOpt = new TGCheckButton(fContAddDrawOpt, "Draw options:");
-            //fChkAddDrawOpt->SetTextJustify(kTextLeft);
-            fContAddDrawOpt->AddFrame(fChkAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
-            fChkAddDrawOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-            fChkAddDrawOpt->SetToolTipText("Enter additional draw options like 'prof' or 'colz' here.\nBe careful with the option 'same' for 2D drawings as it will crash (ROOT feature).");
-            
-            // additional draw options combo box
-            fComboAddDrawOpt = new TGComboBox(fContAddDrawOpt);
-            fComboAddDrawOpt->Resize(0, fBtnDraw->GetDefaultHeight());
-            fComboAddDrawOpt->EnableTextInput(kTRUE);
-            fContAddDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fComboAddDrawOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=14)");
-            fComboAddDrawOpt->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-                  
-         // automatic redraw check button
-         fChkAuto = new TGCheckButton(fContDrawOpt, "Auto redraw");
-         fContDrawOpt->AddFrame(fChkAuto, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-         fChkAuto->SetToolTipText("Decide if you want an automatic redraw on each new selection.\nNot recommended on a slow machine, during remote connection or if your draw option is 'same'.");
-         
-         // automatic append ending check button
-         fChkAutoAppend = new TGCheckButton(fContDrawOpt, "Auto add appending");
-         fContDrawOpt->AddFrame(fChkAutoAppend, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
-         fChkAutoAppend->SetToolTipText("Tries to repair your custom draw string or custom cut string, if you forgot '~' or '.fElements' \nThis function may be buggy!");
-               
-      
-      // *** predefined radio button ***  " Predefined "
-      fRadioPredefined = new TGRadioButton(ftabLeft0, "Predefined: ", 13);
-      ftabLeft0->AddFrame(fRadioPredefined, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      fRadioPredefined->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-      fRadioPredefined->SetToolTipText("Draw predefined variables according to selection.");
-      
-      // list of variables
-      fListVariables = new TGListBox(ftabLeft0);
-      ftabLeft0->AddFrame(fListVariables, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
-      fListVariables->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-   
-      
-      // normalization options container *** fContPlotOpt ***
-      //fContPlotOpt = new TGCompositeFrame(fContLeft, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-      fContPlotOpt = new TGGroupFrame(ftabLeft0, "Normalization options", kVerticalFrame | kFitWidth | kFitHeight);
-      ftabLeft0->AddFrame(fContPlotOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
-
-         // ------------------------- content of fContPlotOpt -------------------------
-         // raw radio button
-         fRadioRaw = new TGRadioButton(fContPlotOpt, "Raw", 10);
-         fContPlotOpt->AddFrame(fRadioRaw, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         fRadioRaw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-         fRadioRaw->SetToolTipText("Plot without normalization");
-      
-         // normalized radio button
-         fRadioNormalized = new TGRadioButton(fContPlotOpt, "Normalized", 11);
-         fContPlotOpt->AddFrame(fRadioNormalized, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         fRadioNormalized->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-         fRadioNormalized->SetToolTipText("Normalize data");
-      
-         // normalized options container *** fContNormalized ***
-         fContNormalized = new TGCompositeFrame(fContPlotOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContPlotOpt->AddFrame(fContNormalized, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 15, 0, 0, 0));
-      
-            // --- content of fContNormalized ---
-            // --- combo box to select 'subtract' or 'divide', list of normalization variables
-            // method drop down combo box
-            fComboMethod = new TGComboBox(fContNormalized);
-            fComboMethod->Resize(0, fBtnDraw->GetDefaultHeight());
-            fContNormalized->AddFrame(fComboMethod, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fComboMethod->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-         
-            // list of normalization variables
-            fListNormalization = new TGListBox(fContNormalized);
-            fContNormalized->AddFrame(fListNormalization, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-            fListNormalization->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-
-      // custom radio button
-      fRadioCustom = new TGRadioButton(ftabLeft0, "Custom: ", 12);
-      ftabLeft0->AddFrame(fRadioCustom, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      fRadioCustom->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
-      fRadioCustom->SetToolTipText("Draw data according to user specific text entry in the 'Custom Draw' line. Remember '~' (= '.fElements')!");
-      // custom options container is located further down
-      
-      // **************************** content of tabLeft1 *******************************
-      
-      // draw options container *** fcontDrawOpt1D ***  " Plot options "
-      fContDrawOpt1D = new TGGroupFrame(ftabLeft1, "1D Plot options", kVerticalFrame | kFitWidth | kFitHeight);
-      ftabLeft1->AddFrame(fContDrawOpt1D, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-      
-      fcontDrawOpt1DSubLR = new TGCompositeFrame(fContDrawOpt1D, 1, 1, kVerticalFrame | kFitWidth | kFitHeight);
-      fContDrawOpt1D->AddFrame(fcontDrawOpt1DSubLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-         // ***** content of fContDrawOpt1DSubLR *****
-         fContDrawOpt1DSubNSC = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
-         fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubNSC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         
-            // --------------------------- content of fContDrawOpt1DSubNSC -----------------
-            fRadioNorm = new TGRadioButton(fContDrawOpt1DSubNSC, "Normal", 110);
-            fContDrawOpt1DSubNSC->AddFrame(fRadioNorm, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fRadioNorm->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-            fRadioNorm->SetToolTipText("Produce a normal 1D plot, a histogram of the selected data.");
-               
-            fRadioSigma = new TGRadioButton(fContDrawOpt1DSubNSC, "Sigma", 111);
-            fContDrawOpt1DSubNSC->AddFrame(fRadioSigma, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
-            fRadioSigma->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-            fRadioSigma->SetToolTipText("Draw a normal histogram, but also lines that indicate the mean/median/LTM \nand sigmas of the selected data.");
-
-            fTxtSigmas = new TGTextEntry(fContDrawOpt1DSubNSC, "2; 4; 6", 111);
-            fContDrawOpt1DSubNSC->AddFrame(fTxtSigmas, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
-            fTxtSigmas->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=111)");
-            fTxtSigmas->SetToolTipText("Enter sigma intervals you would like to be indicated by lines. \nExample: '2; 4; 6'");
-               
-            fContCumuLR = new TGCompositeFrame(fContDrawOpt1DSubNSC, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
-            fContDrawOpt1DSubNSC->AddFrame(fContCumuLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
-            
-               fContCumLeft = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
-               fContCumuLR->AddFrame(fContCumLeft, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-                           
-                  fRadioCumulative = new TGRadioButton(fContCumLeft, "Cumulative", 112);
-                  fContCumLeft->AddFrame(fRadioCumulative, new TGLayoutHints(kLHintsNormal, 0, 10, 0, 0));
-                  fRadioCumulative->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-                  fRadioCumulative->SetToolTipText("Draw the cumulative (SigmaCut) of the given selection. \nThe data distribution is integrated, starting from the mean/median/LTM.");
-                  
-                  fCheckCumulativePM = new TGCheckButton(fContCumLeft, "Plus/Minus");
-                  fContCumLeft->AddFrame(fCheckCumulativePM, new TGLayoutHints(kLHintsNormal, 10, 15, 0, 0));
-                  fCheckCumulativePM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-                  fCheckCumulativePM->SetToolTipText("Decide whether you want the cumulative integration for each direction (+/-) \nor only for the absolute distance to the mean/median/LTM value.");
-                  
-                  fRadioIntegrate = new TGRadioButton(fContCumLeft, "Integrate", 113);
-                  fContCumLeft->AddFrame(fRadioIntegrate, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
-                  fRadioIntegrate->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-                  fRadioIntegrate->SetToolTipText("Draw the integral of the given selection.");
-                  
-               fContCumRight = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
-               fContCumuLR->AddFrame(fContCumRight, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-               
-                  fLblSigmaMax = new TGLabel(fContCumRight, "SigmaMax:");
-                  fLblSigmaMax->SetTextJustify(kTextLeft);
-                  fContCumRight->AddFrame(fLblSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
-
-                  fTxtSigmaMax = new TGTextEntry(fContCumRight, "5", 112);
-                  fContCumRight->AddFrame(fTxtSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
-                  fTxtSigmaMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=112)");
-                  fTxtSigmaMax->SetToolTipText("Enter up to which multiple of sigma you want to integrate.");
-             
-            
-         fContDrawOpt1DSubMML = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
-         fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubMML, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
-         
-            // -------------- content of fcontDrawOpt1DSubLR
-            fChkMean = new TGCheckButton(fContDrawOpt1DSubMML, "Mean");
-            fContDrawOpt1DSubMML->AddFrame(fChkMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-            fChkMean->SetToolTipText("Activate Mean for Sigma/Cumulative/Integrate");
-
-            fChkMedian = new TGCheckButton(fContDrawOpt1DSubMML, "Median");
-            fContDrawOpt1DSubMML->AddFrame(fChkMedian, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkMedian->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-            fChkMedian->SetToolTipText("Activate Median for Sigma/Cumulative/Integrate");
-
-            fChkLTM = new TGCheckButton(fContDrawOpt1DSubMML, "LTM");
-            fContDrawOpt1DSubMML->AddFrame(fChkLTM, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkLTM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
-            fChkLTM->SetToolTipText("Activate LTM for Sigma/Cumulative/Integrate");
-            
-      
-      // statistic options container *** fcontStatOpt1D ***  " Statistic options "      
-      fContStatOpt = new TGGroupFrame(ftabLeft1, "Statistic options", kVerticalFrame | kFitWidth | kFitHeight);
-      ftabLeft1->AddFrame(fContStatOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
-      
-         fChkStatName = new TGCheckButton(fContStatOpt, "Name");
-         fContStatOpt->AddFrame(fChkStatName, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkStatName->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-         fChkStatName->SetToolTipText("Display the name in the statistics legend.");
-      
-         fChkStatEntries = new TGCheckButton(fContStatOpt, "Entries");
-         fContStatOpt->AddFrame(fChkStatEntries, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkStatEntries->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-         fChkStatEntries->SetToolTipText("Display the number of entries in the statistics legend.");
-      
-         fContStatMean = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
-         fContStatOpt->AddFrame(fContStatMean, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-            fChkStatMean = new TGCheckButton(fContStatMean, "Mean");
-            fContStatMean->AddFrame(fChkStatMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkStatMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatMean->SetToolTipText("Display the mean value of the data in the statistics legend.");
-            
-            fChkStatMeanPM = new TGCheckButton(fContStatMean, "+- Error");
-            fContStatMean->AddFrame(fChkStatMeanPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
-            fChkStatMeanPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatMeanPM->SetToolTipText("Display the mean value's error in the statistics legend.");
-
-         fContStatRMS = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
-         fContStatOpt->AddFrame(fContStatRMS, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-            fChkStatRMS = new TGCheckButton(fContStatRMS, "RMS");
-            fContStatRMS->AddFrame(fChkStatRMS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkStatRMS->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatRMS->SetToolTipText("Display the RMS value of the data in the statistics legend.");
-            
-            fChkStatRMSPM = new TGCheckButton(fContStatRMS, "+- Error");
-            fContStatRMS->AddFrame(fChkStatRMSPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
-            fChkStatRMSPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatRMSPM->SetToolTipText("Display the RMS value's error in the statistics legend.");
-
-         fChkStatUnderflow = new TGCheckButton(fContStatOpt, "Underflow");
-         fContStatOpt->AddFrame(fChkStatUnderflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkStatUnderflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-         fChkStatUnderflow->SetToolTipText("Display the number of entries in the underflow bin.");
-      
-         fChkStatOverflow = new TGCheckButton(fContStatOpt, "Overflow");
-         fContStatOpt->AddFrame(fChkStatOverflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkStatOverflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-         fChkStatOverflow->SetToolTipText("Display the number of entries in the overflow bin.");
-      
-         fChkStatIntegral = new TGCheckButton(fContStatOpt, "Integral");
-         fContStatOpt->AddFrame(fChkStatIntegral, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkStatIntegral->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-         fChkStatIntegral->SetToolTipText("Display the integral of the data in the statistics legend.");
-      
-         fContStatSkew = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
-         fContStatOpt->AddFrame(fContStatSkew, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-            fChkStatSkewness = new TGCheckButton(fContStatSkew, "Skewness");
-            fContStatSkew->AddFrame(fChkStatSkewness, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkStatSkewness->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatSkewness->SetToolTipText("Display the skewness of the data in the statistics legend. \nBe careful! Sometimes the skewness causes a floating point exception that hangs the GUI!");
-            
-            fChkStatSkewnessPM = new TGCheckButton(fContStatSkew, "+- Error");
-            fContStatSkew->AddFrame(fChkStatSkewnessPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
-            fChkStatSkewnessPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatSkewnessPM->SetToolTipText("Display the skewness' error in the statistics legend.");
-
-         fContStatKurt = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
-         fContStatOpt->AddFrame(fContStatKurt, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-      
-            fChkStatKurtosis = new TGCheckButton(fContStatKurt, "Kurtosis");
-            fContStatKurt->AddFrame(fChkStatKurtosis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkStatKurtosis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatKurtosis->SetToolTipText("Display the kurtosis of the data in the statistics legend.");
-            
-            fChkStatKurtosisPM = new TGCheckButton(fContStatKurt, "+- Error");
-            fContStatKurt->AddFrame(fChkStatKurtosisPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
-            fChkStatKurtosisPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
-            fChkStatKurtosisPM->SetToolTipText("Display the kurtosis' error in the statistics legend.");
-       
-      fBtnUnchekAll = new TGTextButton(fContStatOpt, "&Uncheck all");
-      fContStatOpt->AddFrame(fBtnUnchekAll, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
-      fBtnUnchekAll->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "UnchekAllStat()");
-      fBtnUnchekAll->SetToolTipText("Disable all statistics legend entries, \nno statistics legend.");
-
-      
-      // 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
-         fComboCustom = new TGComboBox(fContCustom);
-         fComboCustom->Resize(0, fBtnDraw->GetDefaultHeight());
-         fComboCustom->EnableTextInput(kTRUE);
-         fContCustom->AddFrame(fComboCustom, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-         fComboCustom->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=42)");
-         fComboCustom->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-      
-   
-      // additional cuts container
-      fContAddCuts = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
-      fContTopBottom->AddFrame(fContAddCuts, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
-      
-         // ------------------------- content of fContAddCuts -------------------------
-         fLblAddCuts = new TGLabel(fContAddCuts, "Custom cuts:  ");
-         fLblAddCuts->SetTextJustify(kTextLeft);
-         fContAddCuts->AddFrame(fLblAddCuts, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
-         // combo text field for additional cuts
-         fComboAddCuts = new TGComboBox(fContAddCuts);
-         fComboAddCuts->Resize(0, fBtnDraw->GetDefaultHeight());
-         fComboAddCuts->EnableTextInput(kTRUE);
-         fContAddCuts->AddFrame(fComboAddCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-         fComboAddCuts->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-         
-   // ==========================================================================
-   // ************************* content of fContCenter *************************
-   // ========================================================================
-   // main drawing canvas
-   fCanvMain = new TRootEmbeddedCanvas("Main_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*)", "AliBaseCalibViewerGUI", this, "MouseMove(Int_t, Int_t, Int_t, TObject*)");
-     
-   fCanvMain->GetCanvas()->Connect("RangeAxisChanged()", "AliTPCCalibViewerGUI", this, "GetMinMax()");
-   fCanvMain->GetCanvas()->SetToolTipText("The Main_Canvas, here your plots are displayed.");
-   
-   
-   // =========================================================================   
-   // ************************* content of fContRight *************************
-   // ========================================================================
-   
-   // tabs on the right side:
-   ftabRight = new TGTab(fContRight);
-   fContRight->AddFrame(ftabRight, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
-   fTabRight0 = ftabRight->AddTab("Basic");
-   fTabRight1 = ftabRight->AddTab("Advanced");
-
-   
-      // **************************** content of tabLeft0 *******************************
-      // cut options container
-      fContCuts = new TGGroupFrame(fTabRight0, "Cuts", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight0->AddFrame(fContCuts, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-  
-      // Scaling options container
-      fContScaling = new TGGroupFrame(fTabRight0, "Scaling", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight0->AddFrame(fContScaling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-   
-         // ************************* content of fContScaling *************************
-         // SetMaximum container
-         fContSetMax = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContScaling->AddFrame(fContSetMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         
-            // ------------------------- content of fContSetMax -------------------------
-            // SetMaximum - checkbox
-            fChkSetMax = new TGCheckButton(fContSetMax, "Set fixed max.");
-            fContSetMax->AddFrame(fChkSetMax, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkSetMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkSetMax->SetToolTipText("Set the maximum fixed to the value specified here.");
-            
-            // text field for maximum value
-            fTxtSetMax = new TGTextEntry(fContSetMax, "", 41);
-            fContSetMax->AddFrame(fTxtSetMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fTxtSetMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fTxtSetMax->SetToolTipText("maximum value for the drawing");
-      
-         // SetMinimum container
-         fContSetMin = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContScaling->AddFrame(fContSetMin, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         
-            // ------------------------- content of fContSetMin -------------------------
-            // SetMinimum - checkbox
-            fChkSetMin = new TGCheckButton(fContSetMin, "Set fixed min.");
-            fContSetMin->AddFrame(fChkSetMin, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkSetMin->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkSetMin->SetToolTipText("Set the minimum fixed to the value specified here.");
-            
-            // text field for minimum value
-            fTxtSetMin = new TGTextEntry(fContSetMin, "", 40);
-            fContSetMin->AddFrame(fTxtSetMin, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fTxtSetMin->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fTxtSetMin->SetToolTipText("minimum value for the drawing");
-         
-         // get Min & Max from Plot - button
-         fBtnGetMinMax = new TGTextButton(fContScaling, "&Get scale from plot");
-         fContScaling->AddFrame(fBtnGetMinMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         fBtnGetMinMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "GetMinMax()");
-         fBtnGetMinMax->SetToolTipText("Get min and max from plot, e.g. after rescaling by dragging the palette. \nObsolete! The button's function will change to 'Unzoom all'.");
-         
-         // GetMinMaxAuto - checkbox
-         fChkGetMinMaxAuto = new TGCheckButton(fContScaling, "Get Min + Max auto.");
-         fContScaling->AddFrame(fChkGetMinMaxAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-         fChkGetMinMaxAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-         fChkGetMinMaxAuto->SetToolTipText("Get minimum and maximum automatically from each new plot. \nDeactivate this, if you want to 'save' your specified minimum and maximum.");
-         
-      // labeling container *** fContLabeling ***  " Labeling "      
-         fContLabeling = new TGGroupFrame(fTabRight0, "Labeling", kVerticalFrame | kFitWidth | kFitHeight);
-         fTabRight0->AddFrame(fContLabeling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         
-            fChkLabelTitle = new TGCheckButton(fContLabeling, "Set title:");
-            fContLabeling->AddFrame(fChkLabelTitle, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkLabelTitle->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkLabelTitle->SetToolTipText("Set the plot title.");
-               
-            fTxtLabelTitle = new TGTextEntry(fContLabeling, "Title", 500);
-            fContLabeling->AddFrame(fTxtLabelTitle, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fTxtLabelTitle->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=50)");
-            fTxtLabelTitle->SetToolTipText("plot title");
-   
-            fChkLabelXaxis = new TGCheckButton(fContLabeling, "Set X-axis label:");
-            fContLabeling->AddFrame(fChkLabelXaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkLabelXaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkLabelXaxis->SetToolTipText("Set the X-axis label.");
-               
-            fTxtLabelXaxis = new TGTextEntry(fContLabeling, "XaxisLabel", 500);
-            fContLabeling->AddFrame(fTxtLabelXaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fTxtLabelXaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=51)");
-            fTxtLabelXaxis->SetToolTipText("X-axis label");
-   
-            fChkLabelYaxis = new TGCheckButton(fContLabeling, "Set Y-axis label:");
-            fContLabeling->AddFrame(fChkLabelYaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkLabelYaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkLabelYaxis->SetToolTipText("Set the Y-axis label.");
-               
-            fTxtLabelYaxis = new TGTextEntry(fContLabeling, "YaxisLabel", 500);
-            fContLabeling->AddFrame(fTxtLabelYaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fTxtLabelYaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=52)");
-            fTxtLabelYaxis->SetToolTipText("Y-axis label");
-   
-            fChkLabelGetAuto = new TGCheckButton(fContLabeling, "Get labels auto.");
-            fContLabeling->AddFrame(fChkLabelGetAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
-            fChkLabelGetAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
-            fChkLabelGetAuto->SetToolTipText("Get labels automatically from each new plot \nDeactivate this, if you want to 'save' your specified labels.");
-
-      
-      // **************************** content of ftabRight1 *******************************
-      // Save container
-      fContSave = new TGGroupFrame(fTabRight1, "Save", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight1->AddFrame(fContSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         // save button
-         fBtnSave = new TGTextButton(fContSave, "&Save picture");
-         fContSave->AddFrame(fBtnSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         fBtnSave->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "SavePicture()");
-         fBtnSave->SetToolTipText("Open a 'Save as...' dialog to save the current plot as picture or macro.");
-
-         // additional save options container
-         fContAddSaveOpt = new TGCompositeFrame(fContSave, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContSave->AddFrame(fContAddSaveOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
-   
-            //  content of --- fContAddSaveOpt ---
-            // addition save options label
-            fChkAddSaveOpt = new TGCheckButton(fContAddSaveOpt, "Save options:");
-            fContAddSaveOpt->AddFrame(fChkAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
-            fChkAddSaveOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
-            fChkAddSaveOpt->SetToolTipText("Additional save options (see documentation for TPad::Print()).");
-            
-            // additional save options combo box
-            fComboAddSaveOpt = new TGComboBox(fContAddSaveOpt);
-            fContAddSaveOpt->AddFrame(fComboAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-            fComboAddSaveOpt->Resize(0, fBtnDraw->GetDefaultHeight());
-            fComboAddSaveOpt->EnableTextInput(kTRUE);
-            fComboAddSaveOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "SavePicture()");
-            
-      // calPad export container           
-      fContExport = new TGGroupFrame(fTabRight1, "Export AliTPCCalPad", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight1->AddFrame(fContExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-         // ------------------------- content of fContExport -------------------------
-         // container for export name
-           
-         fContAddExport = new TGCompositeFrame(fContExport, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContExport->AddFrame(fContAddExport, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
-         
-         fComboExportName = new TGComboBox(fContAddExport);
-         fComboExportName->Resize(0, fBtnDraw->GetDefaultHeight());
-         fContAddExport->AddFrame(fComboExportName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-         fComboExportName->AddEntry("calPad",  0);  // first default value
-         fComboExportName->Select(0);               // select default value before connecting
-         fComboExportName->EnableTextInput(kTRUE);
-          
-         // export button
-         fBtnExport = new TGTextButton(fContExport, "&Export to CINT");
-         fContExport->AddFrame(fBtnExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-        fBtnExport->SetToolTipText("Lifeless button :(");
-      
-         // add to normalisation button
-         fBtnAddNorm = new TGTextButton(fContExport, "&Add to normalization");
-         fContExport->AddFrame(fBtnAddNorm, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-        fBtnAddNorm->SetToolTipText("Lifeless button :(");
-      // Tree container
-      fContTree = new TGGroupFrame(fTabRight1, "Tree", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight1->AddFrame(fContTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-           
-         // dump tree to file button
-         fBtnDumpToFile = new TGTextButton(fContTree, "&Dump to File");
-         fContTree->AddFrame(fBtnDumpToFile, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-        fBtnDumpToFile->SetToolTipText("Lifeless button :(");
-        
-         // dump tree to file button
-         fBtnLoadTree = new TGTextButton(fContTree, "&Load Tree");
-         fContTree->AddFrame(fBtnLoadTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-        fBtnLoadTree->SetToolTipText("Lifeless button :(");
-
-         fChkAddAsReference = new TGCheckButton(fContTree, "as reference:");
-         fContTree->AddFrame(fChkAddAsReference, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
-        fChkAddAsReference->SetToolTipText("Lifeless button :(");            
-
-         fTxtRefName = new TGTextEntry(fContTree, "R", 500);
-         fContTree->AddFrame(fTxtRefName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 15, 0, 0, 0));
-        fTxtRefName->SetToolTipText("Reference Name");
-                       
-      // Fit options container
-      fContFit = new TGGroupFrame(fTabRight1, "Custom fit", kVerticalFrame | kFitWidth | kFitHeight);
-      fTabRight1->AddFrame(fContFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-       
-         // ------------------------- content of fContFit -------------------------
-         // container for additional fits
-         fContAddFit = new TGCompositeFrame(fContFit, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
-         fContFit->AddFrame(fContAddFit, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
-      
-            // --- content of fContAddFit ---
-            // text field for custom fit
-            fComboCustomFit = new TGComboBox(fContAddFit);
-            fComboCustomFit->Resize(0, fBtnDraw->GetDefaultHeight());
-            fComboCustomFit->EnableTextInput(kTRUE);
-            fContAddFit->AddFrame(fComboCustomFit, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
-                    
-         // fit button
-         fBtnFit = new TGTextButton(fContAddFit, "&Fit");
-         fContAddFit->AddFrame(fBtnFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
-        fBtnFit->SetToolTipText("Lifeless button :(");
+  // 
+  // 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, 200, 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 button
+  fBtnDraw = new TGTextButton(fContLeft, "&Draw");
+  fContLeft->AddFrame(fBtnDraw, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
+  //fBtnDraw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoTest(=\"fBtnDraw clicked\")");
+  fBtnDraw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoDraw()");
+  fBtnDraw->SetToolTipText("Press here to draw according to selections.");
+
+  // tabs on the left side:
+  ftabLeft = new TGTab(fContLeft);
+  fContLeft->AddFrame(ftabLeft, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
+  ftabLeft0 = ftabLeft->AddTab("General");
+  ftabLeft1 = ftabLeft->AddTab("More plot options");
+
+
+  // **************************** content of tabLeft0 *******************************
+
+  // draw options container *** fcontDrawOpt ***  " Plot options "
+  fContDrawOpt = new TGGroupFrame(ftabLeft0, "Plot options", kVerticalFrame | kFitWidth | kFitHeight);
+  ftabLeft0->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
+  fContDrawOptSub1D2D = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
+  fContDrawOpt->AddFrame(fContDrawOptSub1D2D, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ------------------------- content of fContDrawOpt -------------------------
+  // -- radio1D, radio2D, chkAuto
+  // 1D radio button
+  fRadio1D = new TGRadioButton(fContDrawOptSub1D2D, "1D", 30);
+  fContDrawOptSub1D2D->AddFrame(fRadio1D, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
+  fRadio1D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadio1D->SetToolTipText("1D drawing \nSelect this if you want to have the full control for the custom draw.");
+
+  // 2D radio button
+  fRadio2D = new TGRadioButton(fContDrawOptSub1D2D, "2D", 31);
+  fContDrawOptSub1D2D->AddFrame(fRadio2D, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
+  fRadio2D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadio2D->SetToolTipText("2D drawing");
+
+  // additional draw options container
+  fContAddDrawOpt = new TGCompositeFrame(fContDrawOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContDrawOpt->AddFrame(fContAddDrawOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
+
+  //  content of --- fContAddDrawOpt ---
+  // addition draw options label
+  fChkAddDrawOpt = new TGCheckButton(fContAddDrawOpt, "Draw options:");
+  //fChkAddDrawOpt->SetTextJustify(kTextLeft);
+  fContAddDrawOpt->AddFrame(fChkAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
+  fChkAddDrawOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+  fChkAddDrawOpt->SetToolTipText("Enter additional draw options like 'prof' or 'colz' here.\nBe careful with the option 'same' for 2D drawings as it will crash (ROOT feature).");
+
+  // additional draw options combo box
+  fComboAddDrawOpt = new TGComboBox(fContAddDrawOpt);
+  fComboAddDrawOpt->Resize(0, fBtnDraw->GetDefaultHeight());
+  fComboAddDrawOpt->EnableTextInput(kTRUE);
+  fContAddDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboAddDrawOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=14)");
+  fComboAddDrawOpt->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+  // automatic redraw check button
+  fChkAuto = new TGCheckButton(fContDrawOpt, "Auto redraw");
+  fContDrawOpt->AddFrame(fChkAuto, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
+  fChkAuto->SetToolTipText("Decide if you want an automatic redraw on each new selection.\nNot recommended on a slow machine, during remote connection or if your draw option is 'same'.");
+
+  // automatic append ending check button
+  fChkAutoAppend = new TGCheckButton(fContDrawOpt, "Auto add appending");
+  fContDrawOpt->AddFrame(fChkAutoAppend, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
+  fChkAutoAppend->SetToolTipText("Tries to repair your custom draw string or custom cut string, if you forgot '~' or '.fElements' \nThis function may be buggy!");
+
+
+  // *** predefined radio button ***  " Predefined "
+  fRadioPredefined = new TGRadioButton(ftabLeft0, "Predefined: ", 13);
+  ftabLeft0->AddFrame(fRadioPredefined, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fRadioPredefined->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadioPredefined->SetToolTipText("Draw predefined variables according to selection.");
+
+  // list of variables
+  fListVariables = new TGListBox(ftabLeft0);
+  ftabLeft0->AddFrame(fListVariables, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
+  fListVariables->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+
+  // normalization options container *** fContPlotOpt ***
+  //fContPlotOpt = new TGCompositeFrame(fContLeft, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContPlotOpt = new TGGroupFrame(ftabLeft0, "Normalization options", kVerticalFrame | kFitWidth | kFitHeight);
+  ftabLeft0->AddFrame(fContPlotOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
+
+  // ------------------------- content of fContPlotOpt -------------------------
+  // raw radio button
+  fRadioRaw = new TGRadioButton(fContPlotOpt, "Raw", 10);
+  fContPlotOpt->AddFrame(fRadioRaw, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fRadioRaw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadioRaw->SetToolTipText("Plot without normalization");
+
+  // normalized radio button
+  fRadioNormalized = new TGRadioButton(fContPlotOpt, "Normalized", 11);
+  fContPlotOpt->AddFrame(fRadioNormalized, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fRadioNormalized->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadioNormalized->SetToolTipText("Normalize data");
+
+  // normalized options container *** fContNormalized ***
+  fContNormalized = new TGCompositeFrame(fContPlotOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContPlotOpt->AddFrame(fContNormalized, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 15, 0, 0, 0));
+
+  // --- content of fContNormalized ---
+  // --- combo box to select 'subtract' or 'divide', list of normalization variables
+  // method drop down combo box
+  fComboMethod = new TGComboBox(fContNormalized);
+  fComboMethod->Resize(0, fBtnDraw->GetDefaultHeight());
+  fContNormalized->AddFrame(fComboMethod, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboMethod->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+  // list of normalization variables
+  fListNormalization = new TGListBox(fContNormalized);
+  fContNormalized->AddFrame(fListNormalization, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
+  fListNormalization->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+  // custom radio button
+  fRadioCustom = new TGRadioButton(ftabLeft0, "Custom: ", 12);
+  ftabLeft0->AddFrame(fRadioCustom, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fRadioCustom->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
+  fRadioCustom->SetToolTipText("Draw data according to user specific text entry in the 'Custom Draw' line. Remember '~' (= '.fElements')!");
+  // custom options container is located further down
+
+  // **************************** content of tabLeft1 *******************************
+
+  // draw options container *** fcontDrawOpt1D ***  " Plot options "
+  fContDrawOpt1D = new TGGroupFrame(ftabLeft1, "1D Plot options", kVerticalFrame | kFitWidth | kFitHeight);
+  ftabLeft1->AddFrame(fContDrawOpt1D, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
+
+  fcontDrawOpt1DSubLR = new TGCompositeFrame(fContDrawOpt1D, 1, 1, kVerticalFrame | kFitWidth | kFitHeight);
+  fContDrawOpt1D->AddFrame(fcontDrawOpt1DSubLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ***** content of fContDrawOpt1DSubLR *****
+  fContDrawOpt1DSubNSC = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
+  fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubNSC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // --------------------------- content of fContDrawOpt1DSubNSC -----------------
+  fRadioNorm = new TGRadioButton(fContDrawOpt1DSubNSC, "Normal", 110);
+  fContDrawOpt1DSubNSC->AddFrame(fRadioNorm, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fRadioNorm->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fRadioNorm->SetToolTipText("Produce a normal 1D plot, a histogram of the selected data.");
+
+  fRadioSigma = new TGRadioButton(fContDrawOpt1DSubNSC, "Sigma", 111);
+  fContDrawOpt1DSubNSC->AddFrame(fRadioSigma, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
+  fRadioSigma->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fRadioSigma->SetToolTipText("Draw a normal histogram, but also lines that indicate the mean/median/LTM \nand sigmas of the selected data.");
+
+  fTxtSigmas = new TGTextEntry(fContDrawOpt1DSubNSC, "2; 4; 6", 111);
+  fContDrawOpt1DSubNSC->AddFrame(fTxtSigmas, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
+  fTxtSigmas->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=111)");
+  fTxtSigmas->SetToolTipText("Enter sigma intervals you would like to be indicated by lines. \nExample: '2; 4; 6'");
+
+  fContCumuLR = new TGCompositeFrame(fContDrawOpt1DSubNSC, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContDrawOpt1DSubNSC->AddFrame(fContCumuLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
+
+  fContCumLeft = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
+  fContCumuLR->AddFrame(fContCumLeft, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fRadioCumulative = new TGRadioButton(fContCumLeft, "Cumulative", 112);
+  fContCumLeft->AddFrame(fRadioCumulative, new TGLayoutHints(kLHintsNormal, 0, 10, 0, 0));
+  fRadioCumulative->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fRadioCumulative->SetToolTipText("Draw the cumulative (SigmaCut) of the given selection. \nThe data distribution is integrated, starting from the mean/median/LTM.");
+
+  fCheckCumulativePM = new TGCheckButton(fContCumLeft, "Plus/Minus");
+  fContCumLeft->AddFrame(fCheckCumulativePM, new TGLayoutHints(kLHintsNormal, 10, 15, 0, 0));
+  fCheckCumulativePM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fCheckCumulativePM->SetToolTipText("Decide whether you want the cumulative integration for each direction (+/-) \nor only for the absolute distance to the mean/median/LTM value.");
+
+  fRadioIntegrate = new TGRadioButton(fContCumLeft, "Integrate", 113);
+  fContCumLeft->AddFrame(fRadioIntegrate, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
+  fRadioIntegrate->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fRadioIntegrate->SetToolTipText("Draw the integral of the given selection.");
+
+  fContCumRight = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
+  fContCumuLR->AddFrame(fContCumRight, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fLblSigmaMax = new TGLabel(fContCumRight, "SigmaMax:");
+  fLblSigmaMax->SetTextJustify(kTextLeft);
+  fContCumRight->AddFrame(fLblSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
+
+  fTxtSigmaMax = new TGTextEntry(fContCumRight, "5", 112);
+  fContCumRight->AddFrame(fTxtSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
+  fTxtSigmaMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=112)");
+  fTxtSigmaMax->SetToolTipText("Enter up to which multiple of sigma you want to integrate.");
+
+
+  fContDrawOpt1DSubMML = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
+  fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubMML, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
+
+  // -------------- content of fcontDrawOpt1DSubLR
+  fChkMean = new TGCheckButton(fContDrawOpt1DSubMML, "Mean");
+  fContDrawOpt1DSubMML->AddFrame(fChkMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fChkMean->SetToolTipText("Activate Mean for Sigma/Cumulative/Integrate");
+
+  fChkMedian = new TGCheckButton(fContDrawOpt1DSubMML, "Median");
+  fContDrawOpt1DSubMML->AddFrame(fChkMedian, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkMedian->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fChkMedian->SetToolTipText("Activate Median for Sigma/Cumulative/Integrate");
+
+  fChkLTM = new TGCheckButton(fContDrawOpt1DSubMML, "LTM");
+  fContDrawOpt1DSubMML->AddFrame(fChkLTM, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkLTM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
+  fChkLTM->SetToolTipText("Activate LTM for Sigma/Cumulative/Integrate");
+
+
+  // statistic options container *** fcontStatOpt1D ***  " Statistic options "      
+  fContStatOpt = new TGGroupFrame(ftabLeft1, "Statistic options", kVerticalFrame | kFitWidth | kFitHeight);
+  ftabLeft1->AddFrame(fContStatOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
+
+  fChkStatName = new TGCheckButton(fContStatOpt, "Name");
+  fContStatOpt->AddFrame(fChkStatName, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatName->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatName->SetToolTipText("Display the name in the statistics legend.");
+
+  fChkStatEntries = new TGCheckButton(fContStatOpt, "Entries");
+  fContStatOpt->AddFrame(fChkStatEntries, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatEntries->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatEntries->SetToolTipText("Display the number of entries in the statistics legend.");
+
+  fContStatMean = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContStatOpt->AddFrame(fContStatMean, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fChkStatMean = new TGCheckButton(fContStatMean, "Mean");
+  fContStatMean->AddFrame(fChkStatMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatMean->SetToolTipText("Display the mean value of the data in the statistics legend.");
+
+  fChkStatMeanPM = new TGCheckButton(fContStatMean, "+- Error");
+  fContStatMean->AddFrame(fChkStatMeanPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
+  fChkStatMeanPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatMeanPM->SetToolTipText("Display the mean value's error in the statistics legend.");
+
+  fContStatRMS = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContStatOpt->AddFrame(fContStatRMS, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fChkStatRMS = new TGCheckButton(fContStatRMS, "RMS");
+  fContStatRMS->AddFrame(fChkStatRMS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatRMS->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatRMS->SetToolTipText("Display the RMS value of the data in the statistics legend.");
+
+  fChkStatRMSPM = new TGCheckButton(fContStatRMS, "+- Error");
+  fContStatRMS->AddFrame(fChkStatRMSPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
+  fChkStatRMSPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatRMSPM->SetToolTipText("Display the RMS value's error in the statistics legend.");
+
+  fChkStatUnderflow = new TGCheckButton(fContStatOpt, "Underflow");
+  fContStatOpt->AddFrame(fChkStatUnderflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatUnderflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatUnderflow->SetToolTipText("Display the number of entries in the underflow bin.");
+
+  fChkStatOverflow = new TGCheckButton(fContStatOpt, "Overflow");
+  fContStatOpt->AddFrame(fChkStatOverflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatOverflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatOverflow->SetToolTipText("Display the number of entries in the overflow bin.");
+
+  fChkStatIntegral = new TGCheckButton(fContStatOpt, "Integral");
+  fContStatOpt->AddFrame(fChkStatIntegral, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatIntegral->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatIntegral->SetToolTipText("Display the integral of the data in the statistics legend.");
+
+  fContStatSkew = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContStatOpt->AddFrame(fContStatSkew, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fChkStatSkewness = new TGCheckButton(fContStatSkew, "Skewness");
+  fContStatSkew->AddFrame(fChkStatSkewness, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatSkewness->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatSkewness->SetToolTipText("Display the skewness of the data in the statistics legend. \nBe careful! Sometimes the skewness causes a floating point exception that hangs the GUI!");
+
+  fChkStatSkewnessPM = new TGCheckButton(fContStatSkew, "+- Error");
+  fContStatSkew->AddFrame(fChkStatSkewnessPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
+  fChkStatSkewnessPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatSkewnessPM->SetToolTipText("Display the skewness' error in the statistics legend.");
+
+  fContStatKurt = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContStatOpt->AddFrame(fContStatKurt, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fChkStatKurtosis = new TGCheckButton(fContStatKurt, "Kurtosis");
+  fContStatKurt->AddFrame(fChkStatKurtosis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkStatKurtosis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatKurtosis->SetToolTipText("Display the kurtosis of the data in the statistics legend.");
+
+  fChkStatKurtosisPM = new TGCheckButton(fContStatKurt, "+- Error");
+  fContStatKurt->AddFrame(fChkStatKurtosisPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
+  fChkStatKurtosisPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
+  fChkStatKurtosisPM->SetToolTipText("Display the kurtosis' error in the statistics legend.");
+
+  fBtnUnchekAll = new TGTextButton(fContStatOpt, "&Uncheck all");
+  fContStatOpt->AddFrame(fBtnUnchekAll, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
+  fBtnUnchekAll->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "UnchekAllStat()");
+  fBtnUnchekAll->SetToolTipText("Disable all statistics legend entries, \nno statistics legend.");
+
+
+  // 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
+  fComboCustom = new TGComboBox(fContCustom);
+  fComboCustom->Resize(0, fBtnDraw->GetDefaultHeight());
+  fComboCustom->EnableTextInput(kTRUE);
+  fContCustom->AddFrame(fComboCustom, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboCustom->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=42)");
+  fComboCustom->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+
+  // additional cuts container
+  fContAddCuts = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
+  fContTopBottom->AddFrame(fContAddCuts, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
+
+  // ------------------------- content of fContAddCuts -------------------------
+  fLblAddCuts = new TGLabel(fContAddCuts, "Custom cuts:  ");
+  fLblAddCuts->SetTextJustify(kTextLeft);
+  fContAddCuts->AddFrame(fLblAddCuts, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
+  // combo text field for additional cuts
+  fComboAddCuts = new TGComboBox(fContAddCuts);
+  fComboAddCuts->Resize(0, fBtnDraw->GetDefaultHeight());
+  fComboAddCuts->EnableTextInput(kTRUE);
+  fContAddCuts->AddFrame(fComboAddCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboAddCuts->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+
+  // ==========================================================================
+  // ************************* content of fContCenter *************************
+  // ========================================================================
+  // main drawing canvas
+  fCanvMain = new TRootEmbeddedCanvas("Main_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*)", "AliBaseCalibViewerGUI", this, "MouseMove(Int_t, Int_t, Int_t, TObject*)");
+
+  fCanvMain->GetCanvas()->Connect("RangeAxisChanged()", "AliTPCCalibViewerGUI", this, "GetMinMax()");
+  fCanvMain->GetCanvas()->SetToolTipText("The Main_Canvas, here your plots are displayed.");
+
+
+  // =========================================================================   
+  // ************************* content of fContRight *************************
+  // ========================================================================
+
+  // tabs on the right side:
+  ftabRight = new TGTab(fContRight);
+  fContRight->AddFrame(ftabRight, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
+  fTabRight0 = ftabRight->AddTab("Basic");
+  fTabRight1 = ftabRight->AddTab("Advanced");
+
+
+  // **************************** content of tabLeft0 *******************************
+  // cut options container
+
+  fContCuts = new TGGroupFrame(fTabRight0, "Cuts", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight0->AddFrame(fContCuts, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // Scaling options container
+  fContScaling = new TGGroupFrame(fTabRight0, "Scaling", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight0->AddFrame(fContScaling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ************************* content of fContScaling *************************
+  // SetMaximum container
+  fContSetMax = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContScaling->AddFrame(fContSetMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ------------------------- content of fContSetMax -------------------------
+  // SetMaximum - checkbox
+  fChkSetMax = new TGCheckButton(fContSetMax, "Set fixed max.");
+  fContSetMax->AddFrame(fChkSetMax, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkSetMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkSetMax->SetToolTipText("Set the maximum fixed to the value specified here.");
+
+  // text field for maximum value
+  fTxtSetMax = new TGTextEntry(fContSetMax, "", 41);
+  fContSetMax->AddFrame(fTxtSetMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fTxtSetMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fTxtSetMax->SetToolTipText("maximum value for the drawing");
+
+  // SetMinimum container
+  fContSetMin = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContScaling->AddFrame(fContSetMin, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ------------------------- content of fContSetMin -------------------------
+  // SetMinimum - checkbox
+  fChkSetMin = new TGCheckButton(fContSetMin, "Set fixed min.");
+  fContSetMin->AddFrame(fChkSetMin, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkSetMin->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkSetMin->SetToolTipText("Set the minimum fixed to the value specified here.");
+
+  // text field for minimum value
+  fTxtSetMin = new TGTextEntry(fContSetMin, "", 40);
+  fContSetMin->AddFrame(fTxtSetMin, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fTxtSetMin->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fTxtSetMin->SetToolTipText("minimum value for the drawing");
+
+  // get Min & Max from Plot - button
+  fBtnGetMinMax = new TGTextButton(fContScaling, "&Get scale from plot");
+  fContScaling->AddFrame(fBtnGetMinMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnGetMinMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "GetMinMax()");
+  fBtnGetMinMax->SetToolTipText("Get min and max from plot, e.g. after rescaling by dragging the palette. \nObsolete! The button's function will change to 'Unzoom all'.");
+
+  // GetMinMaxAuto - checkbox
+  fChkGetMinMaxAuto = new TGCheckButton(fContScaling, "Get Min + Max auto.");
+  fContScaling->AddFrame(fChkGetMinMaxAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkGetMinMaxAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkGetMinMaxAuto->SetToolTipText("Get minimum and maximum automatically from each new plot. \nDeactivate this, if you want to 'save' your specified minimum and maximum.");
+
+  // labeling container *** fContLabeling ***  " Labeling "      
+  fContLabeling = new TGGroupFrame(fTabRight0, "Labeling", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight0->AddFrame(fContLabeling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  fChkLabelTitle = new TGCheckButton(fContLabeling, "Set title:");
+  fContLabeling->AddFrame(fChkLabelTitle, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkLabelTitle->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkLabelTitle->SetToolTipText("Set the plot title.");
+
+  fTxtLabelTitle = new TGTextEntry(fContLabeling, "Title", 500);
+  fContLabeling->AddFrame(fTxtLabelTitle, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fTxtLabelTitle->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=50)");
+  fTxtLabelTitle->SetToolTipText("plot title");
+
+  fChkLabelXaxis = new TGCheckButton(fContLabeling, "Set X-axis label:");
+  fContLabeling->AddFrame(fChkLabelXaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkLabelXaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkLabelXaxis->SetToolTipText("Set the X-axis label.");
+
+  fTxtLabelXaxis = new TGTextEntry(fContLabeling, "XaxisLabel", 500);
+  fContLabeling->AddFrame(fTxtLabelXaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fTxtLabelXaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=51)");
+  fTxtLabelXaxis->SetToolTipText("X-axis label");
+
+  fChkLabelYaxis = new TGCheckButton(fContLabeling, "Set Y-axis label:");
+  fContLabeling->AddFrame(fChkLabelYaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkLabelYaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkLabelYaxis->SetToolTipText("Set the Y-axis label.");
+
+  fTxtLabelYaxis = new TGTextEntry(fContLabeling, "YaxisLabel", 500);
+  fContLabeling->AddFrame(fTxtLabelYaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fTxtLabelYaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=52)");
+  fTxtLabelYaxis->SetToolTipText("Y-axis label");
+
+  fChkLabelGetAuto = new TGCheckButton(fContLabeling, "Get labels auto.");
+  fContLabeling->AddFrame(fChkLabelGetAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
+  fChkLabelGetAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
+  fChkLabelGetAuto->SetToolTipText("Get labels automatically from each new plot \nDeactivate this, if you want to 'save' your specified labels.");
+
+
+  // **************************** content of ftabRight1 *******************************
+  // Save container
+  fContSave = new TGGroupFrame(fTabRight1, "Save", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight1->AddFrame(fContSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  // save button
+  fBtnSave = new TGTextButton(fContSave, "&Save picture");
+  fContSave->AddFrame(fBtnSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnSave->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "SavePicture()");
+  fBtnSave->SetToolTipText("Open a 'Save as...' dialog to save the current plot as picture or macro.");
+
+  // additional save options container
+  fContAddSaveOpt = new TGCompositeFrame(fContSave, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContSave->AddFrame(fContAddSaveOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
+
+  //  content of --- fContAddSaveOpt ---
+  // addition save options label
+  fChkAddSaveOpt = new TGCheckButton(fContAddSaveOpt, "Save options:");
+  fContAddSaveOpt->AddFrame(fChkAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
+  fChkAddSaveOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
+  fChkAddSaveOpt->SetToolTipText("Additional save options (see documentation for TPad::Print()).");
+
+  // additional save options combo box
+  fComboAddSaveOpt = new TGComboBox(fContAddSaveOpt);
+  fContAddSaveOpt->AddFrame(fComboAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboAddSaveOpt->Resize(0, fBtnDraw->GetDefaultHeight());
+  fComboAddSaveOpt->EnableTextInput(kTRUE);
+  fComboAddSaveOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "SavePicture()");
+
+  // calPad export container       
+  fContExport = new TGGroupFrame(fTabRight1, "Export AliTPCCalPad", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight1->AddFrame(fContExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  // ------------------------- content of fContExport -------------------------
+  // container for export name
+
+  fContAddExport = new TGCompositeFrame(fContExport, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContExport->AddFrame(fContAddExport, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
+
+  fComboExportName = new TGComboBox(fContAddExport);
+  fComboExportName->Resize(0, fBtnDraw->GetDefaultHeight());
+  fContAddExport->AddFrame(fComboExportName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+  fComboExportName->AddEntry("calPad",  0);  // first default value
+  fComboExportName->Select(0);               // select default value before connecting
+  fComboExportName->EnableTextInput(kTRUE);
+
+  // export button
+  fBtnExport = new TGTextButton(fContExport, "&Export to CINT");
+  fContExport->AddFrame(fBtnExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnExport->SetToolTipText("Lifeless button :(");
+
+  // add to normalisation button
+  fBtnAddNorm = new TGTextButton(fContExport, "&Add to normalization");
+  fContExport->AddFrame(fBtnAddNorm, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnAddNorm->SetToolTipText("Lifeless button :(");
+
+  // Tree container
+  fContTree = new TGGroupFrame(fTabRight1, "Tree", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight1->AddFrame(fContTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // dump tree to file button
+  fBtnDumpToFile = new TGTextButton(fContTree, "&Dump to File");
+  fContTree->AddFrame(fBtnDumpToFile, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnDumpToFile->SetToolTipText("Lifeless button :(");
+
+  // dump tree to file button
+  fBtnLoadTree = new TGTextButton(fContTree, "&Load Tree");
+  fContTree->AddFrame(fBtnLoadTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnLoadTree->SetToolTipText("Lifeless button :(");
+
+  fChkAddAsReference = new TGCheckButton(fContTree, "as reference:");
+  fContTree->AddFrame(fChkAddAsReference, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
+  fChkAddAsReference->SetToolTipText("Lifeless button :(");            
+
+  fTxtRefName = new TGTextEntry(fContTree, "R", 500);
+  fContTree->AddFrame(fTxtRefName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 15, 0, 0, 0));
+  fTxtRefName->SetToolTipText("Reference Name");
+
+  // Fit options container
+  fContFit = new TGGroupFrame(fTabRight1, "Custom fit", kVerticalFrame | kFitWidth | kFitHeight);
+  fTabRight1->AddFrame(fContFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+
+  // ------------------------- content of fContFit -------------------------
+  // container for additional fits
+  fContAddFit = new TGCompositeFrame(fContFit, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
+  fContFit->AddFrame(fContAddFit, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
+
+  // --- content of fContAddFit ---
+  // text field for custom fit
+  fComboCustomFit = new TGComboBox(fContAddFit);
+  fComboCustomFit->Resize(0, fBtnDraw->GetDefaultHeight());
+  fComboCustomFit->EnableTextInput(kTRUE);
+  fContAddFit->AddFrame(fComboCustomFit, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
+
+  // fit button
+  fBtnFit = new TGTextButton(fContAddFit, "&Fit");
+  fContAddFit->AddFrame(fBtnFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
+  fBtnFit->SetToolTipText("Lifeless button :(");
 }
 
 //________________________________________________________________________________________
-AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const AliBaseCalibViewerGUI &c)
-   : TGCompositeFrame(c.fParent, c.fWidth, c.fHeight),
-    fViewer(0),
-    fContTopBottom(0),
-    fContLCR(0),
-    fContLeft(0),
-    ftabLeft(0),
-    ftabLeft0(0),
-    ftabLeft1(0),
-    ftabRight(0),
-    fTabRight0(0),
-    fTabRight1(0),
-    fContRight(0),
-    fContCenter(0),
-    fContPlotOpt(0),
-    fContDrawOpt(0),
-    fContDrawOptSub1D2D(0),
-    fContNormalized(0),
-    fContCustom(0),
-    fContCuts(0),
-    fContAddCuts(0),
-    fContFit(0),
-    fContAddFit(0),
-    fContScaling(0),
-    fContSetMax(0),
-    fContSetMin(0),
-    fContAddDrawOpt(0),
-    fListVariables(0),
-    fBtnDraw(0),
-    fBtnFit(0),
-    fBtnAddFitFunction(0),
-    fBtnGetMinMax(0),
-    fCanvMain(0),
-    fRadioRaw(0),
-    fRadioNormalized(0),
-    fRadioPredefined(0),
-    fRadioCustom(0),
-    fRadio1D(0),
-    fRadio2D(0),
-    fComboAddDrawOpt(0),
-    fChkAuto(0),
-    fChkAutoAppend(0),
-    fComboMethod(0),
-    fListNormalization(0),
-    fComboCustom(0),
-    fLblCustomDraw(0),
-    fChkAddDrawOpt(0),
-    fLblAddCuts(0),
-    fComboAddCuts(0), 
-    fComboCustomFit(0),
-    fChkSetMax(0),
-    fChkSetMin(0),
-    fChkGetMinMaxAuto(0),
-    fTxtSetMax(0),
-    fTxtSetMin(0), 
-    fContDrawOpt1D(0),
-    fcontDrawOpt1DSubLR(0),
-    fContDrawOpt1DSubNSC(0), 
-    fRadioNorm(0),
-    fRadioSigma(0),
-    fTxtSigmas(0),
-    fContCumuLR(0),
-    fContCumLeft(0),
-    fContCumRight(0),
-    fLblSigmaMax(0),
-    fTxtSigmaMax(0),
-    fRadioCumulative(0),
-    fCheckCumulativePM(0),
-    fRadioIntegrate(0),
-    fContDrawOpt1DSubMML(0),
-    fChkMean(0),
-    fChkMedian(0),
-    fChkLTM(0), 
-    fContStatOpt(0),
-    fChkStatName(0),
-    fChkStatEntries(0),
-    fContStatMean(0),
-    fChkStatMean(0),
-    fChkStatMeanPM(0),
-    fContStatRMS(0),
-    fChkStatRMS(0),
-    fChkStatRMSPM(0),
-    fChkStatUnderflow(0),
-    fChkStatOverflow(0),
-    fChkStatIntegral(0),
-    fContStatSkew(0),
-    fChkStatSkewness(0),
-    fChkStatSkewnessPM(0),
-    fContStatKurt(0),
-    fChkStatKurtosis(0),
-    fChkStatKurtosisPM(0),
-    fBtnUnchekAll(0),
-    fContLabeling(0),
-    fChkLabelTitle(0),
-    fTxtLabelTitle(0),
-    fChkLabelXaxis(0),
-    fTxtLabelXaxis(0),
-    fChkLabelYaxis(0),
-    fTxtLabelYaxis(0),
-    fChkLabelGetAuto(0),
-    fContSave(0),
-    fBtnSave(0),
-    fContAddSaveOpt(0),
-    fChkAddSaveOpt(0),
-    fComboAddSaveOpt(0),
-    fContExport(0),
-    fContAddExport(0),
-    fComboExportName(0),
-    fBtnExport(0),
-    fBtnAddNorm(0), 
-    fContTree(0),
-    fBtnDumpToFile(0),
-    fBtnLoadTree(0),
-    fChkAddAsReference(0),
-    fTxtRefName(0),
-    fInitialized(0)
+  AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const AliBaseCalibViewerGUI &c)
+: TGCompositeFrame(c.fParent, c.fWidth, c.fHeight),
+  fViewer(0),
+  fContTopBottom(0),
+  fContLCR(0),
+  fContLeft(0),
+  ftabLeft(0),
+  ftabLeft0(0),
+  ftabLeft1(0),
+  ftabRight(0),
+  fTabRight0(0),
+  fTabRight1(0),
+  fContRight(0),
+  fContCenter(0),
+  fContPlotOpt(0),
+  fContDrawOpt(0),
+  fContDrawOptSub1D2D(0),
+  fContNormalized(0),
+  fContCustom(0),
+  fContCuts(0),
+  fContAddCuts(0),
+  fContFit(0),
+  fContAddFit(0),
+  fContScaling(0),
+  fContSetMax(0),
+  fContSetMin(0),
+  fContAddDrawOpt(0),
+  fListVariables(0),
+  fBtnDraw(0),
+  fBtnFit(0),
+  fBtnAddFitFunction(0),
+  fBtnGetMinMax(0),
+  fCanvMain(0),
+  fRadioRaw(0),
+  fRadioNormalized(0),
+  fRadioPredefined(0),
+  fRadioCustom(0),
+  fRadio1D(0),
+  fRadio2D(0),
+  fComboAddDrawOpt(0),
+  fChkAuto(0),
+  fChkAutoAppend(0),
+  fComboMethod(0),
+  fListNormalization(0),
+  fComboCustom(0),
+  fLblCustomDraw(0),
+  fChkAddDrawOpt(0),
+  fLblAddCuts(0),
+  fComboAddCuts(0), 
+  fComboCustomFit(0),
+  fChkSetMax(0),
+  fChkSetMin(0),
+  fChkGetMinMaxAuto(0),
+  fTxtSetMax(0),
+  fTxtSetMin(0), 
+  fContDrawOpt1D(0),
+  fcontDrawOpt1DSubLR(0),
+  fContDrawOpt1DSubNSC(0), 
+  fRadioNorm(0),
+  fRadioSigma(0),
+  fTxtSigmas(0),
+  fContCumuLR(0),
+  fContCumLeft(0),
+  fContCumRight(0),
+  fLblSigmaMax(0),
+  fTxtSigmaMax(0),
+  fRadioCumulative(0),
+  fCheckCumulativePM(0),
+  fRadioIntegrate(0),
+  fContDrawOpt1DSubMML(0),
+  fChkMean(0),
+  fChkMedian(0),
+  fChkLTM(0), 
+  fContStatOpt(0),
+  fChkStatName(0),
+  fChkStatEntries(0),
+  fContStatMean(0),
+  fChkStatMean(0),
+  fChkStatMeanPM(0),
+  fContStatRMS(0),
+  fChkStatRMS(0),
+  fChkStatRMSPM(0),
+  fChkStatUnderflow(0),
+  fChkStatOverflow(0),
+  fChkStatIntegral(0),
+  fContStatSkew(0),
+  fChkStatSkewness(0),
+  fChkStatSkewnessPM(0),
+  fContStatKurt(0),
+  fChkStatKurtosis(0),
+  fChkStatKurtosisPM(0),
+  fBtnUnchekAll(0),
+  fContLabeling(0),
+  fChkLabelTitle(0),
+  fTxtLabelTitle(0),
+  fChkLabelXaxis(0),
+  fTxtLabelXaxis(0),
+  fChkLabelYaxis(0),
+  fTxtLabelYaxis(0),
+  fChkLabelGetAuto(0),
+  fContSave(0),
+  fBtnSave(0),
+  fContAddSaveOpt(0),
+  fChkAddSaveOpt(0),
+  fComboAddSaveOpt(0),
+  fContExport(0),
+  fContAddExport(0),
+  fComboExportName(0),
+  fBtnExport(0),
+  fBtnAddNorm(0), 
+  fContTree(0),
+  fBtnDumpToFile(0),
+  fBtnLoadTree(0),
+  fChkAddAsReference(0),
+  fTxtRefName(0),
+  fInitialized(0)
 {
   //
   // dummy AliBaseCalibViewerGUI copy constructor
@@ -880,510 +880,510 @@ AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const AliBaseCalibViewerGUI &c)
 
 //________________________________________________________________________________________
 AliBaseCalibViewerGUI & AliBaseCalibViewerGUI::operator =(const AliBaseCalibViewerGUI & /*param*/) {
-   //
-   // dummy assignment operator
-   //
-   return (*this);
+  //
+  // dummy assignment operator
+  //
+  return (*this);
 }
 
 //________________________________________________________________________________________
 AliBaseCalibViewerGUI::~AliBaseCalibViewerGUI() {
-   // 
-   // Destructor
-   // 
+  // 
+  // Destructor
+  // 
   /*
-   if (fCanvMain && fCanvMain->GetCanvas()) {
-      for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
-         if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
-            fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
-      }
-   } 
-*/
-   //   Cleanup();
+     if (fCanvMain && fCanvMain->GetCanvas()) {
+     for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
+     if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
+     fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
+     }
+     } 
+     */
+  //   Cleanup();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::SetInitialValues() {
-   // 
-   // Set the default button states
-   // 
-   fChkAuto->SetState(kButtonUp);
-   fRadioPredefined->SetState(kButtonDown);
-   fRadioRaw->SetState(kButtonDown);
-   fRadio1D->SetState(kButtonDown);
-   fChkGetMinMaxAuto->SetState(kButtonDown);
-   fChkSetMin->SetState(kButtonUp);
-   fChkSetMax->SetState(kButtonUp);
-   fRadioNorm->SetState(kButtonDown);
-   fRadioSigma->SetState(kButtonUp);
-   fRadioCumulative->SetState(kButtonUp);
-   fChkMean->SetState(kButtonDown);
-   fCheckCumulativePM->SetState(kButtonUp);
-   
-   fChkLabelGetAuto->SetState(kButtonDown);
-
-   Int_t statOpt = gStyle->GetOptStat();
-   if (statOpt == 1) statOpt = 1111;
-   if (statOpt / 200000000 >= 1) {
-      fChkStatKurtosis->SetState(kButtonDown);
-      fChkStatKurtosisPM->SetState(kButtonDown);
-      statOpt -= 200000000;
-   }
-   if (statOpt / 100000000 >= 1) {
-      fChkStatKurtosis->SetState(kButtonDown);
-      statOpt -= 100000000;
-   }
-   if (statOpt / 20000000 >= 1) {
-      fChkStatSkewness->SetState(kButtonDown);
-      fChkStatSkewnessPM->SetState(kButtonDown);
-      statOpt -= 20000000;
-   }
-   if (statOpt / 10000000 >= 1) {
-      fChkStatSkewness->SetState(kButtonDown);
-      statOpt -= 10000000;
-   }
-   if (statOpt / 1000000 >= 1) {
-      fChkStatIntegral->SetState(kButtonDown);
-      statOpt -= 1000000;
-   }
-   if (statOpt / 100000 >= 1) {
-      fChkStatOverflow->SetState(kButtonDown);
-      statOpt -= 100000;
-   }
-   if (statOpt / 10000 >= 1) {
-      fChkStatUnderflow->SetState(kButtonDown);
-      statOpt -= 10000;
-   }
-   if (statOpt / 2000 >= 1) {
-      fChkStatRMS->SetState(kButtonDown);
-      fChkStatRMSPM->SetState(kButtonDown);
-      statOpt -= 2000;
-   }
-   if (statOpt / 1000 >= 1) {
-      fChkStatRMS->SetState(kButtonDown);
-      statOpt -= 1000;
-   }
-   if (statOpt / 200 >= 1) {
-      fChkStatMean->SetState(kButtonDown);
-      fChkStatMeanPM->SetState(kButtonDown);
-      statOpt -= 200;
-   }
-   if (statOpt / 100 >= 1) {
-      fChkStatMean->SetState(kButtonDown);
-      statOpt -= 100;
-   }
-   if (statOpt / 10 >= 1) {
-      fChkStatEntries->SetState(kButtonDown);
-      statOpt -= 10;
-   }
-   if (statOpt / 1 >= 1) {
-      fChkStatName->SetState(kButtonDown);
-      statOpt -= 1;
-   }
-      
-   // fill fComboAddDrawOpt with some additional drawing options
-   fComboAddDrawOpt->AddEntry("same",      0);
-   fComboAddDrawOpt->AddEntry("profbox",   1);
-   fComboAddDrawOpt->AddEntry("profcolz",  2);
-   fComboAddDrawOpt->AddEntry("profcont0", 3);
-   fComboAddDrawOpt->AddEntry("proflego",  4);
-   fComboAddDrawOpt->AddEntry("proflego2", 5);
-   fComboAddDrawOpt->AddEntry("profsurf",  6);
-   fComboAddDrawOpt->AddEntry("profsurf1", 7);
-   fComboAddDrawOpt->AddEntry("profsurf2", 8);
-   fComboAddDrawOpt->AddEntry("box",    9);
-   fComboAddDrawOpt->AddEntry("colz",  10);
-   fComboAddDrawOpt->AddEntry("cont0", 11);
-   fComboAddDrawOpt->AddEntry("lego",  12);
-   fComboAddDrawOpt->AddEntry("lego2", 13);
-   fComboAddDrawOpt->AddEntry("surf",  14);
-   fComboAddDrawOpt->AddEntry("surf1", 15);
-   fComboAddDrawOpt->AddEntry("surf2", 16);
-
-   // fill fComboAddSaveOpt with some additional drawing options
-   fComboAddSaveOpt->AddEntry("Portrait",  0);
-   fComboAddSaveOpt->AddEntry("Landscape", 1);
-   fComboAddSaveOpt->AddEntry("Preview",   2);
-   fComboAddSaveOpt->AddEntry("+50",       3);
-
-   // fill fComboMethod
-   fComboMethod->AddEntry("subtract",  0);
-   fComboMethod->AddEntry("divide by", 1);
-   
-   // fill fComboExportName
-   fBtnExport->SetEnabled(kFALSE);
-   fBtnAddNorm->SetEnabled(kFALSE);
-
-   // select initial variables
-   fListVariables->Select(0);
-   fListNormalization->Select(0);
-   fComboMethod->Select(0);
-
-   fListVariables->IntegralHeight(kFALSE);         // naja
-   fListNormalization->IntegralHeight(kFALSE);     // naja
-   fChkAuto->SetState(kButtonDown);
+  // 
+  // Set the default button states
+  // 
+  fChkAuto->SetState(kButtonUp);
+  fRadioPredefined->SetState(kButtonDown);
+  fRadioRaw->SetState(kButtonDown);
+  fRadio1D->SetState(kButtonDown);
+  fChkGetMinMaxAuto->SetState(kButtonDown);
+  fChkSetMin->SetState(kButtonUp);
+  fChkSetMax->SetState(kButtonUp);
+  fRadioNorm->SetState(kButtonDown);
+  fRadioSigma->SetState(kButtonUp);
+  fRadioCumulative->SetState(kButtonUp);
+  fChkMean->SetState(kButtonDown);
+  fCheckCumulativePM->SetState(kButtonUp);
+
+  fChkLabelGetAuto->SetState(kButtonDown);
+
+  Int_t statOpt = gStyle->GetOptStat();
+  if (statOpt == 1) statOpt = 1111;
+  if (statOpt / 200000000 >= 1) {
+    fChkStatKurtosis->SetState(kButtonDown);
+    fChkStatKurtosisPM->SetState(kButtonDown);
+    statOpt -= 200000000;
+  }
+  if (statOpt / 100000000 >= 1) {
+    fChkStatKurtosis->SetState(kButtonDown);
+    statOpt -= 100000000;
+  }
+  if (statOpt / 20000000 >= 1) {
+    fChkStatSkewness->SetState(kButtonDown);
+    fChkStatSkewnessPM->SetState(kButtonDown);
+    statOpt -= 20000000;
+  }
+  if (statOpt / 10000000 >= 1) {
+    fChkStatSkewness->SetState(kButtonDown);
+    statOpt -= 10000000;
+  }
+  if (statOpt / 1000000 >= 1) {
+    fChkStatIntegral->SetState(kButtonDown);
+    statOpt -= 1000000;
+  }
+  if (statOpt / 100000 >= 1) {
+    fChkStatOverflow->SetState(kButtonDown);
+    statOpt -= 100000;
+  }
+  if (statOpt / 10000 >= 1) {
+    fChkStatUnderflow->SetState(kButtonDown);
+    statOpt -= 10000;
+  }
+  if (statOpt / 2000 >= 1) {
+    fChkStatRMS->SetState(kButtonDown);
+    fChkStatRMSPM->SetState(kButtonDown);
+    statOpt -= 2000;
+  }
+  if (statOpt / 1000 >= 1) {
+    fChkStatRMS->SetState(kButtonDown);
+    statOpt -= 1000;
+  }
+  if (statOpt / 200 >= 1) {
+    fChkStatMean->SetState(kButtonDown);
+    fChkStatMeanPM->SetState(kButtonDown);
+    statOpt -= 200;
+  }
+  if (statOpt / 100 >= 1) {
+    fChkStatMean->SetState(kButtonDown);
+    statOpt -= 100;
+  }
+  if (statOpt / 10 >= 1) {
+    fChkStatEntries->SetState(kButtonDown);
+    statOpt -= 10;
+  }
+  if (statOpt / 1 >= 1) {
+    fChkStatName->SetState(kButtonDown);
+    statOpt -= 1;
+  }
+
+  // fill fComboAddDrawOpt with some additional drawing options
+  fComboAddDrawOpt->AddEntry("same",      0);
+  fComboAddDrawOpt->AddEntry("profbox",   1);
+  fComboAddDrawOpt->AddEntry("profcolz",  2);
+  fComboAddDrawOpt->AddEntry("profcont0", 3);
+  fComboAddDrawOpt->AddEntry("proflego",  4);
+  fComboAddDrawOpt->AddEntry("proflego2", 5);
+  fComboAddDrawOpt->AddEntry("profsurf",  6);
+  fComboAddDrawOpt->AddEntry("profsurf1", 7);
+  fComboAddDrawOpt->AddEntry("profsurf2", 8);
+  fComboAddDrawOpt->AddEntry("box",    9);
+  fComboAddDrawOpt->AddEntry("colz",  10);
+  fComboAddDrawOpt->AddEntry("cont0", 11);
+  fComboAddDrawOpt->AddEntry("lego",  12);
+  fComboAddDrawOpt->AddEntry("lego2", 13);
+  fComboAddDrawOpt->AddEntry("surf",  14);
+  fComboAddDrawOpt->AddEntry("surf1", 15);
+  fComboAddDrawOpt->AddEntry("surf2", 16);
+
+  // fill fComboAddSaveOpt with some additional drawing options
+  fComboAddSaveOpt->AddEntry("Portrait",  0);
+  fComboAddSaveOpt->AddEntry("Landscape", 1);
+  fComboAddSaveOpt->AddEntry("Preview",   2);
+  fComboAddSaveOpt->AddEntry("+50",       3);
+
+  // fill fComboMethod
+  fComboMethod->AddEntry("subtract",  0);
+  fComboMethod->AddEntry("divide by", 1);
+
+  // fill fComboExportName
+  fBtnExport->SetEnabled(kFALSE);
+  fBtnAddNorm->SetEnabled(kFALSE);
+
+  // select initial variables
+  fListVariables->Select(0);
+  fListNormalization->Select(0);
+  fComboMethod->Select(0);
+
+  fListVariables->IntegralHeight(kFALSE);         // naja
+  fListNormalization->IntegralHeight(kFALSE);     // naja
+  fChkAuto->SetState(kButtonDown);
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::HandleButtonsGeneral(Int_t id) {
-   //
-   // handles mutual radio button exclusions
-   // for general Tab
-   //
-   if (id == -1) {
-      TGButton *btn = (TGButton *) gTQSender;
-      id = btn->WidgetId();
-   }
-
-   switch (id) {
-      case 10:             // fRadioRaw
-         fRadioNormalized->SetState(kButtonUp);
-         fRadioPredefined->SetState(kButtonDown);
-         fRadioCustom->SetState(kButtonUp);
-        break;
-      case 11:             // fRadioNormalized
-         fRadioRaw->SetState(kButtonUp);
-         fRadioPredefined->SetState(kButtonDown);
-         fRadioCustom->SetState(kButtonUp);
-         break;
-      case 12:             // fRadioCustom
-         fRadioPredefined->SetState(kButtonUp);
-        break;
-      case 14:             // select Draw options fComboAddDrawOpt
-         fChkAddDrawOpt->SetState(kButtonDown);
-         break;
-      case 13:             // fRadioPredefined
-         fRadioCustom->SetState(kButtonUp);
-        break;
+  //
+  // handles mutual radio button exclusions
+  // for general Tab
+  //
+  if (id == -1) {
+    TGButton *btn = (TGButton *) gTQSender;
+    id = btn->WidgetId();
+  }
+
+  switch (id) {
+    case 10:             // fRadioRaw
+      fRadioNormalized->SetState(kButtonUp);
+      fRadioPredefined->SetState(kButtonDown);
+      fRadioCustom->SetState(kButtonUp);
+      break;
+    case 11:             // fRadioNormalized
+      fRadioRaw->SetState(kButtonUp);
+      fRadioPredefined->SetState(kButtonDown);
+      fRadioCustom->SetState(kButtonUp);
+      break;
+    case 12:             // fRadioCustom
+      fRadioPredefined->SetState(kButtonUp);
+      break;
+    case 14:             // select Draw options fComboAddDrawOpt
+      fChkAddDrawOpt->SetState(kButtonDown);
+      break;
+    case 13:             // fRadioPredefined
+      fRadioCustom->SetState(kButtonUp);
+      break;
       //--------
-      case 30:             // fRadio1D
-         fRadio2D->SetState(kButtonUp);
-        fBtnExport->SetEnabled(kFALSE);
-        fBtnAddNorm->SetEnabled(kFALSE);
-         break;
-      case 31:             // fRadio2D
-         fRadio1D->SetState(kButtonUp);
-        fBtnExport->SetEnabled(kTRUE);
-        fBtnAddNorm->SetEnabled(kTRUE);
-         break;
-      case 42:             // fComboCustom
-         fRadioCustom->SetState(kButtonDown);
-         fRadioPredefined->SetState(kButtonUp);
-         break;
-   }
-   DoNewSelection();
+    case 30:             // fRadio1D
+      fRadio2D->SetState(kButtonUp);
+      fBtnExport->SetEnabled(kFALSE);
+      fBtnAddNorm->SetEnabled(kFALSE);
+      break;
+    case 31:             // fRadio2D
+      fRadio1D->SetState(kButtonUp);
+      fBtnExport->SetEnabled(kTRUE);
+      fBtnAddNorm->SetEnabled(kTRUE);
+      break;
+    case 42:             // fComboCustom
+      fRadioCustom->SetState(kButtonDown);
+      fRadioPredefined->SetState(kButtonUp);
+      break;
+  }
+  DoNewSelection();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::HandleButtons1D(Int_t id) {
-   //
-   // handles mutual radio button exclusions
-   // 1D-Tab buttons
-   //
-   
-   if (id == -1) {
-      TGButton *btn = (TGButton *) gTQSender;
-      id = btn->WidgetId();
-   }
-   switch (id) {
-      case 110:            // 1D draw normal
-         fRadioNorm->SetState(kButtonDown);
-         fRadioSigma->SetState(kButtonUp);
-         fRadioCumulative->SetState(kButtonUp);
-         fRadioIntegrate->SetState(kButtonUp);
-         break;
-      case 111:            // 1D draw sigma
-         fRadioNorm->SetState(kButtonUp);
-         fRadioSigma->SetState(kButtonDown);
-         fRadioCumulative->SetState(kButtonUp);
-         fRadioIntegrate->SetState(kButtonUp);
-         break;
-      case 112:            // 1D draw cumulative
-         fRadioNorm->SetState(kButtonUp);
-         fRadioSigma->SetState(kButtonUp);
-         fRadioCumulative->SetState(kButtonDown);
-         fRadioIntegrate->SetState(kButtonUp);
-         break;
-      case 113:            // 1D draw integral
-         fRadioNorm->SetState(kButtonUp);
-         fRadioSigma->SetState(kButtonUp);
-         fRadioCumulative->SetState(kButtonUp);
-         fRadioIntegrate->SetState(kButtonDown);
-         break;
-   }
-   DoNewSelection();
+  //
+  // handles mutual radio button exclusions
+  // 1D-Tab buttons
+  //
+
+  if (id == -1) {
+    TGButton *btn = (TGButton *) gTQSender;
+    id = btn->WidgetId();
+  }
+  switch (id) {
+    case 110:            // 1D draw normal
+      fRadioNorm->SetState(kButtonDown);
+      fRadioSigma->SetState(kButtonUp);
+      fRadioCumulative->SetState(kButtonUp);
+      fRadioIntegrate->SetState(kButtonUp);
+      break;
+    case 111:            // 1D draw sigma
+      fRadioNorm->SetState(kButtonUp);
+      fRadioSigma->SetState(kButtonDown);
+      fRadioCumulative->SetState(kButtonUp);
+      fRadioIntegrate->SetState(kButtonUp);
+      break;
+    case 112:            // 1D draw cumulative
+      fRadioNorm->SetState(kButtonUp);
+      fRadioSigma->SetState(kButtonUp);
+      fRadioCumulative->SetState(kButtonDown);
+      fRadioIntegrate->SetState(kButtonUp);
+      break;
+    case 113:            // 1D draw integral
+      fRadioNorm->SetState(kButtonUp);
+      fRadioSigma->SetState(kButtonUp);
+      fRadioCumulative->SetState(kButtonUp);
+      fRadioIntegrate->SetState(kButtonDown);
+      break;
+  }
+  DoNewSelection();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::HandleButtonsStat(Int_t id) {
-   // 
-   // handles statistic check boxes 
-   // checks each checkbox if checked
-   // if the checkbox is checked, appends 'n' for name, 'e' for entries, ...
-   // to a TString, passes this TString to gStyle->SetOptStat(...)
-   // 
-   if (id == -1) {
-      TGButton *btn = (TGButton *) gTQSender;
-      id = btn->WidgetId();
-   }
-   TString statOpt("");
-   if (fChkStatName->GetState() == kButtonDown) statOpt.Append("n");
-   if (fChkStatEntries->GetState() == kButtonDown) statOpt.Append("e");
-   if (fChkStatMean->GetState() == kButtonDown && fChkStatMeanPM->GetState() == kButtonUp) statOpt.Append("m");
-   if (fChkStatMeanPM->GetState() == kButtonDown) statOpt.Append("M");
-   if (fChkStatRMS->GetState() == kButtonDown && fChkStatRMSPM->GetState() == kButtonUp) statOpt.Append("r");
-   if (fChkStatRMSPM->GetState() == kButtonDown) statOpt.Append("R");
-   if (fChkStatUnderflow->GetState() == kButtonDown) statOpt.Append("u");
-   if (fChkStatOverflow->GetState() == kButtonDown) statOpt.Append("o");
-   if (fChkStatIntegral->GetState() == kButtonDown) statOpt.Append("i");
-   if (fChkStatSkewness->GetState() == kButtonDown && fChkStatSkewnessPM->GetState() == kButtonUp) statOpt.Append("s");
-   if (fChkStatSkewnessPM->GetState() == kButtonDown) statOpt.Append("S");
-   if (fChkStatKurtosis->GetState() == kButtonDown && fChkStatKurtosisPM->GetState() == kButtonUp) statOpt.Append("k");
-   if (fChkStatKurtosisPM->GetState() == kButtonDown) statOpt.Append("K");
-   
-   gStyle->SetOptStat(statOpt);
-   DoNewSelection();
+  // 
+  // handles statistic check boxes 
+  // checks each checkbox if checked
+  // if the checkbox is checked, appends 'n' for name, 'e' for entries, ...
+  // to a TString, passes this TString to gStyle->SetOptStat(...)
+  // 
+  if (id == -1) {
+    TGButton *btn = (TGButton *) gTQSender;
+    id = btn->WidgetId();
+  }
+  TString statOpt("");
+  if (fChkStatName->GetState() == kButtonDown) statOpt.Append("n");
+  if (fChkStatEntries->GetState() == kButtonDown) statOpt.Append("e");
+  if (fChkStatMean->GetState() == kButtonDown && fChkStatMeanPM->GetState() == kButtonUp) statOpt.Append("m");
+  if (fChkStatMeanPM->GetState() == kButtonDown) statOpt.Append("M");
+  if (fChkStatRMS->GetState() == kButtonDown && fChkStatRMSPM->GetState() == kButtonUp) statOpt.Append("r");
+  if (fChkStatRMSPM->GetState() == kButtonDown) statOpt.Append("R");
+  if (fChkStatUnderflow->GetState() == kButtonDown) statOpt.Append("u");
+  if (fChkStatOverflow->GetState() == kButtonDown) statOpt.Append("o");
+  if (fChkStatIntegral->GetState() == kButtonDown) statOpt.Append("i");
+  if (fChkStatSkewness->GetState() == kButtonDown && fChkStatSkewnessPM->GetState() == kButtonUp) statOpt.Append("s");
+  if (fChkStatSkewnessPM->GetState() == kButtonDown) statOpt.Append("S");
+  if (fChkStatKurtosis->GetState() == kButtonDown && fChkStatKurtosisPM->GetState() == kButtonUp) statOpt.Append("k");
+  if (fChkStatKurtosisPM->GetState() == kButtonDown) statOpt.Append("K");
+
+  gStyle->SetOptStat(statOpt);
+  DoNewSelection();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::HandleButtonsNoRedraw(Int_t id) {
-   //
-   // handles label & scaling checkboxes 
-   // without redrawing (not necessary, faster like this)
-   //
-    if (id == -1) {
-      TGButton *btn = (TGButton *) gTQSender;
-      id = btn->WidgetId();
-   }
-
-   switch (id) {
-      case 40:             // fTxtSetMin
-         fChkSetMin->SetState(kButtonDown);
-         break;
-      case 41:             // fTxtSetMax
-         fChkSetMax->SetState(kButtonDown);
-         break;
-      case 50:             // fTxtLabelTitle
-         fChkLabelTitle->SetState(kButtonDown);
-         break;
-      case 51:             // fTxtLabelXaxis
-         fChkLabelXaxis->SetState(kButtonDown);
-         break;
-      case 52:             // fTxtLabelXaxis
-         fChkLabelYaxis->SetState(kButtonDown);
-         break;
-   }
-   SetMinMaxLabel();
+  //
+  // handles label & scaling checkboxes 
+  // without redrawing (not necessary, faster like this)
+  //
+  if (id == -1) {
+    TGButton *btn = (TGButton *) gTQSender;
+    id = btn->WidgetId();
+  }
+
+  switch (id) {
+    case 40:             // fTxtSetMin
+      fChkSetMin->SetState(kButtonDown);
+      break;
+    case 41:             // fTxtSetMax
+      fChkSetMax->SetState(kButtonDown);
+      break;
+    case 50:             // fTxtLabelTitle
+      fChkLabelTitle->SetState(kButtonDown);
+      break;
+    case 51:             // fTxtLabelXaxis
+      fChkLabelXaxis->SetState(kButtonDown);
+      break;
+    case 52:             // fTxtLabelXaxis
+      fChkLabelYaxis->SetState(kButtonDown);
+      break;
+  }
+  SetMinMaxLabel();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::ReplacePlaceHolders(TString &str)
 {
-    //
-    // replace the defined placeholders in the custom draw string and cut string
-    //
-    TString drawPlaceHolder("#draw#");
-    TString normPlaceHolder("#norm#");
-
-    //current draw variable
-    TString desiredData("");
-    if (fListVariables->GetSelectedEntry()){
-      desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
-      str.ReplaceAll(drawPlaceHolder,desiredData);
-    }
-
-    //current normalisation
-    TString normalizationData("");
-    if (fListNormalization->GetSelectedEntry()){
-      normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
-      if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
-        if ( normalizationData.BeginsWith("_") ) normalizationData = desiredData+normalizationData;
-      if ( fListVariables->FindEntry(normalizationData.Data()) )
-        normalizationData+="~";
-      str.ReplaceAll(normPlaceHolder,normalizationData);
-    }
+  //
+  // replace the defined placeholders in the custom draw string and cut string
+  //
+  TString drawPlaceHolder("#draw#");
+  TString normPlaceHolder("#norm#");
+
+  //current draw variable
+  TString desiredData("");
+  if (fListVariables->GetSelectedEntry()){
+    desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
+    str.ReplaceAll(drawPlaceHolder,desiredData);
+  }
+
+  //current normalisation
+  TString normalizationData("");
+  if (fListNormalization->GetSelectedEntry()){
+    normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
+    if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
+      if ( normalizationData.BeginsWith("_") ) normalizationData = desiredData+normalizationData;
+    if ( fListVariables->FindEntry(normalizationData.Data()) )
+      normalizationData+="~";
+    str.ReplaceAll(normPlaceHolder,normalizationData);
+  }
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::DoNewSelection() {
-   //
-   // decides whether to redraw if user makes another selection
-   //
-   if (fChkAuto->GetState() == kButtonDown) DoDraw();
+  //
+  // decides whether to redraw if user makes another selection
+  //
+  if (fChkAuto->GetState() == kButtonDown) DoDraw();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::SavePicture() {
-   // 
-   // saves the current picture
-   // 
-   // use the following combination of file type and save options:
-   // (see also TCanvas::Print)
-   // 
-   //       "ps"  - Postscript file is produced (see special cases below)
-   //    "Portrait" - Postscript file is produced (Portrait)
-   // "Landscape" - Postscript file is produced (Landscape)
-   //       "eps" - an Encapsulated Postscript file is produced
-   //    "Preview" - an Encapsulated Postscript file with preview is produced.
-   //       "pdf" - a PDF file is produced
-   //       "svg" - a SVG file is produced
-   //       "gif" - a GIF file is produced
-   //       "gif+NN" - an animated GIF file is produced, where NN is delay in 10ms units
-   //       "xpm" - a XPM file is produced
-   //       "png" - a PNG file is produced
-   //       "jpg" - a JPEG file is produced
-   //       "tiff" - a TIFF file is produced
-   //       "cxx" - a C++ macro file is produced
-   //       "xml" - a XML file
-   //       "root" - a ROOT binary file
-   
-   const char *kSaveAsTypes[] = {
-      "Postscript",  "*.ps",
-      "Encapsulated Postscript",   "*.eps",
-      "PDF",   "*.pdf",
-      "JPEG",   "*.jpg",
-      "PNG",   "*.png",
-      "TIFF",   "*.tiff",
-      "GIF",   "*.gif",
-      "XPM",   "*.xpm",
-      "SVG",   "*.svg",
-      "XML",   "*.xml",
-      "C++ macro",   "*.cxx",
-      "Macro file",  "*.C",
-      "ROOT file",   "*.root",
-      "All file",    "*",
-       0,              0
-   };
-   TString addSaveOpt("");
-   if (fChkAddSaveOpt->GetState() == kButtonDown)
-   addSaveOpt += fComboAddSaveOpt->GetTextEntry()->GetText();
-   TString dir(".");
-   TGFileInfo fi;
-   fi.fFileTypes = kSaveAsTypes;
-   fi.fOverwrite = kFALSE;
-   new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDSave, &fi);
-   if (fi.fFilename && strlen(fi.fFilename)) {
-      if (addSaveOpt != "")
-         fCanvMain->GetCanvas()->Print(fi.fFilename, addSaveOpt.Data());
-      else 
-         fCanvMain->GetCanvas()->Print(fi.fFilename);
-   }
+  // 
+  // saves the current picture
+  // 
+  // use the following combination of file type and save options:
+  // (see also TCanvas::Print)
+  // 
+  //       "ps"  - Postscript file is produced (see special cases below)
+  //    "Portrait" - Postscript file is produced (Portrait)
+  // "Landscape" - Postscript file is produced (Landscape)
+  //       "eps" - an Encapsulated Postscript file is produced
+  //    "Preview" - an Encapsulated Postscript file with preview is produced.
+  //       "pdf" - a PDF file is produced
+  //       "svg" - a SVG file is produced
+  //       "gif" - a GIF file is produced
+  //       "gif+NN" - an animated GIF file is produced, where NN is delay in 10ms units
+  //       "xpm" - a XPM file is produced
+  //       "png" - a PNG file is produced
+  //       "jpg" - a JPEG file is produced
+  //       "tiff" - a TIFF file is produced
+  //       "cxx" - a C++ macro file is produced
+  //       "xml" - a XML file
+  //       "root" - a ROOT binary file
+
+  const char *kSaveAsTypes[] = {
+    "Postscript",  "*.ps",
+    "Encapsulated Postscript",   "*.eps",
+    "PDF",   "*.pdf",
+    "JPEG",   "*.jpg",
+    "PNG",   "*.png",
+    "TIFF",   "*.tiff",
+    "GIF",   "*.gif",
+    "XPM",   "*.xpm",
+    "SVG",   "*.svg",
+    "XML",   "*.xml",
+    "C++ macro",   "*.cxx",
+    "Macro file",  "*.C",
+    "ROOT file",   "*.root",
+    "All file",    "*",
+    0,              0
+  };
+  TString addSaveOpt("");
+  if (fChkAddSaveOpt->GetState() == kButtonDown)
+    addSaveOpt += fComboAddSaveOpt->GetTextEntry()->GetText();
+  TString dir(".");
+  TGFileInfo fi;
+  fi.fFileTypes = kSaveAsTypes;
+  fi.fOverwrite = kFALSE;
+  new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDSave, &fi);
+  if (fi.fFilename && strlen(fi.fFilename)) {
+    if (addSaveOpt != "")
+      fCanvMain->GetCanvas()->Print(fi.fFilename, addSaveOpt.Data());
+    else 
+      fCanvMain->GetCanvas()->Print(fi.fFilename);
+  }
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::GetMinMax() {
-   //
-   // Read current Min & Max from the plot and set it to fTxtSetMin & fTxtSetMax
-   //
-   if (fChkGetMinMaxAuto->GetState() == kButtonUp) return;
-   TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
-   TObject* ptr = 0;
-   for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
-      ptr = listOfPrimitives->At(i);
-      if ( ptr->InheritsFrom("TH1") ) break;
-   }
-   if ( !ptr || !ptr->InheritsFrom("TH1") ) return;      // if the loop did not find a TH1
-   TH1 *hist = (TH1*)ptr;
-
-   if (fRadio2D->GetState() == kButtonDown) {
-      if (fChkSetMax->GetState() == kButtonUp)
-         fTxtSetMax->SetText(Form("%f", hist->GetMaximum()));
-      if (fChkSetMin->GetState() == kButtonUp)
-         fTxtSetMin->SetText(Form("%f", hist->GetMinimum()));
-   }
-   else if (fRadio1D->GetState() == kButtonDown) {
-      if (fChkSetMax->GetState() == kButtonUp)
-         fTxtSetMax->SetText( Form("%f", hist->GetXaxis()->GetXmax()) );
-      if (fChkSetMin->GetState() == kButtonUp)
-         fTxtSetMin->SetText( Form("%f", hist->GetXaxis()->GetXmin()) );
-   }
+  //
+  // Read current Min & Max from the plot and set it to fTxtSetMin & fTxtSetMax
+  //
+  if (fChkGetMinMaxAuto->GetState() == kButtonUp) return;
+  TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
+  TObject* ptr = 0;
+  for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
+    ptr = listOfPrimitives->At(i);
+    if ( ptr->InheritsFrom("TH1") ) break;
+  }
+  if ( !ptr || !ptr->InheritsFrom("TH1") ) return;      // if the loop did not find a TH1
+  TH1 *hist = (TH1*)ptr;
+
+  if (fRadio2D->GetState() == kButtonDown) {
+    if (fChkSetMax->GetState() == kButtonUp)
+      fTxtSetMax->SetText(Form("%f", hist->GetMaximum()));
+    if (fChkSetMin->GetState() == kButtonUp)
+      fTxtSetMin->SetText(Form("%f", hist->GetMinimum()));
+  }
+  else if (fRadio1D->GetState() == kButtonDown) {
+    if (fChkSetMax->GetState() == kButtonUp)
+      fTxtSetMax->SetText( Form("%f", hist->GetXaxis()->GetXmax()) );
+    if (fChkSetMin->GetState() == kButtonUp)
+      fTxtSetMin->SetText( Form("%f", hist->GetXaxis()->GetXmin()) );
+  }
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::SetMinMaxLabel() {
-   // 
-   // Set Minimum, Maximum and labels without redrawing the plot
-   // (faster)
-   // 
-   
-   // search for histogram
-   TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
-   TObject* ptr = 0;
-   for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
-      ptr = listOfPrimitives->At(i);
-      if ( ptr->InheritsFrom("TH1") ) break;
-   }
-   if ( ptr == 0 || !ptr->InheritsFrom("TH1") ) {  // if the loop did not find a TH1
-      fCanvMain->GetCanvas()->Update();
-      Warning("SetMinMaxLabel","No Histogram found!");
-      return;
-      // unable to find histogram, no min and max wil be read out
-   }
-   
-   TH1 *hist = (TH1*)ptr; 
-   TString minTxt(fTxtSetMin->GetText());
-   TString maxTxt(fTxtSetMax->GetText());
-   
-   // set min and max according to specified values, if checkbox is checked
-   if (fRadio2D->GetState() == kButtonDown) {
-      if (fChkSetMax->GetState() == kButtonDown && fChkSetMax->GetState() == kButtonDown &&(maxTxt.IsDigit() || maxTxt.IsFloat()) )
-         hist->SetMaximum(maxTxt.Atof());
-      if (fChkSetMax->GetState() == kButtonUp)
-         hist->SetMaximum(-1111);  // default value, to unzoom
-      if (fChkSetMin->GetState() == kButtonDown && (minTxt.IsDigit() || minTxt.IsFloat()) )
-         hist->SetMinimum(minTxt.Atof());
-      if (fChkSetMin->GetState() == kButtonUp)
-         hist->SetMinimum(-1111);  // default value, to unzoom
-   }
-   else if (fRadio2D->GetState() == kButtonDown) {
-      if (fChkSetMin->GetState() == kButtonDown && 
-          fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
-         hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), hist->GetXaxis()->GetXmax());
-      else if (fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
-         hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), maxTxt.Atof());
-      else if (fChkSetMin->GetState() == kButtonDown && hist->GetXaxis())
-         hist->GetXaxis()->SetRangeUser(minTxt.Atof(), hist->GetXaxis()->GetXmax());
-      hist->SetTitle(hist->GetTitle());  // trick to update the histogram
-   }
-   
-   // get min and max from plot       
-   GetMinMax();
-   
-   // set labels according to specification, if cehckboxes are checked
-   if (fChkLabelTitle->GetState() == kButtonDown) 
-      hist->SetTitle(fTxtLabelTitle->GetText());
-   if (fChkLabelXaxis->GetState() == kButtonDown)
-      hist->GetXaxis()->SetTitle(fTxtLabelXaxis->GetText());
-   if (fChkLabelYaxis->GetState() == kButtonDown)
-      hist->GetYaxis()->SetTitle(fTxtLabelYaxis->GetText());
-   // get and/or set labels and title
-   if (fChkLabelGetAuto->GetState() == kButtonDown) {
-      fTxtLabelTitle->SetText(hist->GetTitle());
-      fTxtLabelXaxis->SetTitle(hist->GetXaxis()->GetTitle());
-      fTxtLabelYaxis->SetTitle(hist->GetYaxis()->GetTitle());
-   }
-   hist->SetTitle(hist->GetTitle());  // trick to update the histogram
-   fCanvMain->GetCanvas()->Update();
+  // 
+  // Set Minimum, Maximum and labels without redrawing the plot
+  // (faster)
+  // 
+
+  // search for histogram
+  TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
+  TObject* ptr = 0;
+  for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
+    ptr = listOfPrimitives->At(i);
+    if ( ptr->InheritsFrom("TH1") ) break;
+  }
+  if ( ptr == 0 || !ptr->InheritsFrom("TH1") ) {  // if the loop did not find a TH1
+    fCanvMain->GetCanvas()->Update();
+    Warning("SetMinMaxLabel","No Histogram found!");
+    return;
+    // unable to find histogram, no min and max wil be read out
+  }
+
+  TH1 *hist = (TH1*)ptr; 
+  TString minTxt(fTxtSetMin->GetText());
+  TString maxTxt(fTxtSetMax->GetText());
+
+  // set min and max according to specified values, if checkbox is checked
+  if (fRadio2D->GetState() == kButtonDown) {
+    if (fChkSetMax->GetState() == kButtonDown && fChkSetMax->GetState() == kButtonDown &&(maxTxt.IsDigit() || maxTxt.IsFloat()) )
+      hist->SetMaximum(maxTxt.Atof());
+    if (fChkSetMax->GetState() == kButtonUp)
+      hist->SetMaximum(-1111);  // default value, to unzoom
+    if (fChkSetMin->GetState() == kButtonDown && (minTxt.IsDigit() || minTxt.IsFloat()) )
+      hist->SetMinimum(minTxt.Atof());
+    if (fChkSetMin->GetState() == kButtonUp)
+      hist->SetMinimum(-1111);  // default value, to unzoom
+  }
+  else if (fRadio2D->GetState() == kButtonDown) {
+    if (fChkSetMin->GetState() == kButtonDown && 
+        fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
+      hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), hist->GetXaxis()->GetXmax());
+    else if (fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
+      hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), maxTxt.Atof());
+    else if (fChkSetMin->GetState() == kButtonDown && hist->GetXaxis())
+      hist->GetXaxis()->SetRangeUser(minTxt.Atof(), hist->GetXaxis()->GetXmax());
+    hist->SetTitle(hist->GetTitle());  // trick to update the histogram
+  }
+
+  // get min and max from plot       
+  GetMinMax();
+
+  // set labels according to specification, if cehckboxes are checked
+  if (fChkLabelTitle->GetState() == kButtonDown) 
+    hist->SetTitle(fTxtLabelTitle->GetText());
+  if (fChkLabelXaxis->GetState() == kButtonDown)
+    hist->GetXaxis()->SetTitle(fTxtLabelXaxis->GetText());
+  if (fChkLabelYaxis->GetState() == kButtonDown)
+    hist->GetYaxis()->SetTitle(fTxtLabelYaxis->GetText());
+  // get and/or set labels and title
+  if (fChkLabelGetAuto->GetState() == kButtonDown) {
+    fTxtLabelTitle->SetText(hist->GetTitle());
+    fTxtLabelXaxis->SetTitle(hist->GetXaxis()->GetTitle());
+    fTxtLabelYaxis->SetTitle(hist->GetYaxis()->GetTitle());
+  }
+  hist->SetTitle(hist->GetTitle());  // trick to update the histogram
+  fCanvMain->GetCanvas()->Update();
 }
 
 //________________________________________________________________________________________
 void AliBaseCalibViewerGUI::UnchekAllStat() {
-   // 
-   // Disable all statistical legend entries, no statistical legend.
-   // 
-   fChkStatName->SetState(kButtonUp);
-   fChkStatEntries->SetState(kButtonUp);
-   fChkStatMean->SetState(kButtonUp);
-   fChkStatMeanPM->SetState(kButtonUp);
-   fChkStatRMS->SetState(kButtonUp);
-   fChkStatRMSPM->SetState(kButtonUp);
-   fChkStatUnderflow->SetState(kButtonUp);
-   fChkStatOverflow->SetState(kButtonUp);
-   fChkStatIntegral->SetState(kButtonUp);
-   fChkStatSkewness->SetState(kButtonUp);
-   fChkStatSkewnessPM->SetState(kButtonUp);
-   fChkStatKurtosis->SetState(kButtonUp);
-   fChkStatKurtosisPM->SetState(kButtonUp);
-   
-   HandleButtonsStat(0);
+  // 
+  // Disable all statistical legend entries, no statistical legend.
+  // 
+  fChkStatName->SetState(kButtonUp);
+  fChkStatEntries->SetState(kButtonUp);
+  fChkStatMean->SetState(kButtonUp);
+  fChkStatMeanPM->SetState(kButtonUp);
+  fChkStatRMS->SetState(kButtonUp);
+  fChkStatRMSPM->SetState(kButtonUp);
+  fChkStatUnderflow->SetState(kButtonUp);
+  fChkStatOverflow->SetState(kButtonUp);
+  fChkStatIntegral->SetState(kButtonUp);
+  fChkStatSkewness->SetState(kButtonUp);
+  fChkStatSkewnessPM->SetState(kButtonUp);
+  fChkStatKurtosis->SetState(kButtonUp);
+  fChkStatKurtosisPM->SetState(kButtonUp);
+
+  HandleButtonsStat(0);
 }
index c292db2..4f65798 100644 (file)
@@ -36,219 +36,220 @@ ClassImp(AliCDBDump)
 
 //_____________________________________________________________________________
 AliCDBDump::AliCDBDump(const char* dbFile, Bool_t readOnly):
-fFile(NULL), fReadOnly(readOnly) {
-// constructor
-
-       // opening file
-       fFile = TFile::Open(dbFile, fReadOnly ? "READ" : "UPDATE");     
-       if (!fFile) {
-               AliError(Form("Can't open file <%s>!" , dbFile));
-       } else {
-               AliDebug(2,Form("File <%s> opened",dbFile));
-               if(fReadOnly) AliDebug(2,Form("in read-only mode"));
-       }
-
-       fType="dump";
-       fBaseFolder = dbFile;
+  fFile(NULL), fReadOnly(readOnly)
+{
+  // constructor
+
+  // opening file
+  fFile = TFile::Open(dbFile, fReadOnly ? "READ" : "UPDATE");  
+  if (!fFile) {
+    AliError(Form("Can't open file <%s>!" , dbFile));
+  } else {
+    AliDebug(2,Form("File <%s> opened",dbFile));
+    if(fReadOnly) AliDebug(2,Form("in read-only mode"));
+  }
+
+  fType="dump";
+  fBaseFolder = dbFile;
 }
 
 //_____________________________________________________________________________
 AliCDBDump::~AliCDBDump() {
-// destructor
+  // destructor
 
-       if (fFile) {
-               fFile->Close();
-               delete fFile;
-       }
+  if (fFile) {
+    fFile->Close();
+    delete fFile;
+  }
 }
 
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::KeyNameToId(const char* keyname, AliCDBRunRange& runRange,
-       Int_t& version, Int_t& subVersion) {
-// build AliCDBId from keyname numbers
+    Int_t& version, Int_t& subVersion) {
+  // build AliCDBId from keyname numbers
+
+  Ssiz_t mSize;
 
-        Ssiz_t mSize;
+  // valid keyname: Run#firstRun_#lastRun_v#version_s#subVersion.root
+  TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s[0-9]+$");
+  keyPattern.Index(keyname, &mSize);
+  if (!mSize) {
+    AliDebug(2,Form("Bad keyname <%s>.", keyname));
+    return kFALSE;
+  }
 
-       // valid keyname: Run#firstRun_#lastRun_v#version_s#subVersion.root
-        TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s[0-9]+$");
-        keyPattern.Index(keyname, &mSize);
-        if (!mSize) {
-                AliDebug(2,Form("Bad keyname <%s>.", keyname));
-                return kFALSE;
-        }
+  TObjArray* strArray = (TObjArray*) TString(keyname).Tokenize("_");
 
-        TObjArray* strArray = (TObjArray*) TString(keyname).Tokenize("_");
+  TString firstRunString(((TObjString*) strArray->At(0))->GetString());
+  runRange.SetFirstRun(atoi(firstRunString.Data() + 3));
+  runRange.SetLastRun(atoi(((TObjString*) strArray->At(1))->GetString()));
 
-       TString firstRunString(((TObjString*) strArray->At(0))->GetString());
-       runRange.SetFirstRun(atoi(firstRunString.Data() + 3));
-       runRange.SetLastRun(atoi(((TObjString*) strArray->At(1))->GetString()));
-       
-       TString verString(((TObjString*) strArray->At(2))->GetString());
-       version = atoi(verString.Data() + 1);
+  TString verString(((TObjString*) strArray->At(2))->GetString());
+  version = atoi(verString.Data() + 1);
 
-       TString subVerString(((TObjString*) strArray->At(3))->GetString());
-        subVersion = atoi(subVerString.Data() + 1);
+  TString subVerString(((TObjString*) strArray->At(3))->GetString());
+  subVersion = atoi(subVerString.Data() + 1);
 
-        delete strArray;
+  delete strArray;
 
-        return kTRUE;
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::IdToKeyName(const AliCDBRunRange& runRange, Int_t version,
-        Int_t subVersion, TString& keyname) {
-// build key name from AliCDBId data (run range, version, subVersion)
-
-        if (!runRange.IsValid()) {
-                AliDebug(2,Form("Invalid run range <%d, %d>.",
-                        runRange.GetFirstRun(), runRange.GetLastRun()));
-                return kFALSE;
-        }
-
-        if (version < 0) {
-                AliDebug(2,Form("Invalid version <%d>.", version));
-                return kFALSE;
-        }
-
-       if (subVersion < 0) {
-               AliDebug(2,Form("Invalid subversion <%d>.", subVersion));
-               return kFALSE;
-       }
-    
-        keyname += "Run";
-       keyname += runRange.GetFirstRun();
-        keyname += "_";
-        keyname += runRange.GetLastRun();
-        keyname += "_v";
-        keyname += version;
-       keyname += "_s";
-       keyname += subVersion;
-
-        return kTRUE;
+    Int_t subVersion, TString& keyname) {
+  // build key name from AliCDBId data (run range, version, subVersion)
+
+  if (!runRange.IsValid()) {
+    AliDebug(2,Form("Invalid run range <%d, %d>.",
+          runRange.GetFirstRun(), runRange.GetLastRun()));
+    return kFALSE;
+  }
+
+  if (version < 0) {
+    AliDebug(2,Form("Invalid version <%d>.", version));
+    return kFALSE;
+  }
+
+  if (subVersion < 0) {
+    AliDebug(2,Form("Invalid subversion <%d>.", subVersion));
+    return kFALSE;
+  }
+
+  keyname += "Run";
+  keyname += runRange.GetFirstRun();
+  keyname += "_";
+  keyname += runRange.GetLastRun();
+  keyname += "_v";
+  keyname += version;
+  keyname += "_s";
+  keyname += subVersion;
+
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::MkDir(const TString& path) {
-// descend into TDirectory, making TDirectories if they don't exist 
-       TObjArray* strArray = (TObjArray*) path.Tokenize("/");
-       
-       TIter iter(strArray);
-       TObjString* str;
-
-       while ((str = (TObjString*) iter.Next())) {
-               
-               TString dirName(str->GetString());
-               if (!dirName.Length()) {
-                       continue;
-               }
-
-               if (gDirectory->cd(dirName)) {
-                       continue;
-               }
-
-               TDirectory* aDir = gDirectory->mkdir(dirName, "");
-               if (!aDir) {
-                       AliError(Form("Can't create directory <%s>!", 
-                                       dirName.Data()));
-                       delete strArray;
-
-                       return kFALSE;
-               }
-
-               aDir->cd();
-       }       
-       
-       delete strArray;
-
-       return kTRUE;
+  // descend into TDirectory, making TDirectories if they don't exist 
+  TObjArray* strArray = (TObjArray*) path.Tokenize("/");
+
+  TIter iter(strArray);
+  TObjString* str;
+
+  while ((str = (TObjString*) iter.Next())) {
+
+    TString dirName(str->GetString());
+    if (!dirName.Length()) {
+      continue;
+    }
+
+    if (gDirectory->cd(dirName)) {
+      continue;
+    }
+
+    TDirectory* aDir = gDirectory->mkdir(dirName, "");
+    if (!aDir) {
+      AliError(Form("Can't create directory <%s>!", 
+            dirName.Data()));
+      delete strArray;
+
+      return kFALSE;
+    }
+
+    aDir->cd();
+  }    
+
+  delete strArray;
+
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::PrepareId(AliCDBId& id) {
-// prepare id (version, subVersion) of the object that will be stored (called by PutEntry)
-
-       AliCDBRunRange aRunRange; // the runRange got from filename 
-       AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
-       Int_t aVersion, aSubVersion; // the version subVersion got from filename
-       Int_t lastVersion = 0, lastSubVersion = -1; // highest version and subVersion found
-
-       
-       TIter iter(gDirectory->GetListOfKeys());
-       TKey* key;
-
-       if (!id.HasVersion()) { // version not specified: look for highest version & subVersion 
-                               
-               while ((key = (TKey*) iter.Next())) { // loop on keys
-
-                       const char* keyName = key->GetName();
-       
-                       if (!KeyNameToId(keyName, aRunRange, aVersion, 
-                          aSubVersion)) {
-                               AliDebug(2,Form(
-                                       "Bad keyname <%s>!I'll skip it.", keyName));
-                               continue;
-                       }
-                       
-                       if (!aRunRange.Overlaps(id.GetAliCDBRunRange())) continue;
-                       if(aVersion < lastVersion) continue;
-                       if(aVersion > lastVersion) lastSubVersion = -1;
-                       if(aSubVersion < lastSubVersion) continue;
-                       lastVersion = aVersion;
-                       lastSubVersion = aSubVersion;
-                       lastRunRange = aRunRange;
-               }
-
-               id.SetVersion(lastVersion);
-               id.SetSubVersion(lastSubVersion + 1);
-
-       } else { // version specified, look for highest subVersion only
-               
-               while ((key = (TKey*) iter.Next())) { // loop on the keys
-
-                       const char* keyName = key->GetName();
-       
-                       if (!KeyNameToId(keyName, aRunRange, aVersion, 
-                          aSubVersion)) {
-                               AliDebug(2,Form(
-                                       "Bad keyname <%s>!I'll skip it.", keyName));
-                               continue;
-                       }
-
-                       if (aRunRange.Overlaps(id.GetAliCDBRunRange()) 
-                               && aVersion == id.GetVersion()
-                               && aSubVersion > lastSubVersion) {
-                               lastSubVersion = aSubVersion;
-                               lastRunRange = aRunRange;
-                       }
-       
-               }
-               
-               id.SetSubVersion(lastSubVersion + 1);
-       }
-
-       TString lastStorage = id.GetLastStorage();
-       if(lastStorage.Contains(TString("grid"), TString::kIgnoreCase) &&
-          id.GetSubVersion() > 0 ){
-               AliError(Form("Grid to Dump Storage error! local object with version v%d_s%d found:",id.GetVersion(), id.GetSubVersion()-1));
-               AliError(Form("This object has been already transferred from Grid (check v%d_s0)!",id.GetVersion()));
-               return kFALSE;
-       }
-
-       if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) &&
-          id.GetSubVersion() > 0 ){
-               AliDebug(2, Form("A NEW object is being stored with version v%d_s%d",
-                                       id.GetVersion(),id.GetSubVersion()));
-               AliDebug(2, Form("and it will hide previously stored object with v%d_s%d!",
-                                       id.GetVersion(),id.GetSubVersion()-1));
-       }
-
-       if(!lastRunRange.IsAnyRange() && !(lastRunRange.IsEqual(& id.GetAliCDBRunRange()))) 
-               AliWarning(Form("Run range modified w.r.t. previous version (Run%d_%d_v%d_s%d)",
-                       lastRunRange.GetFirstRun(), lastRunRange.GetLastRun(), 
-                       id.GetVersion(), id.GetSubVersion()-1));
-
-       return kTRUE;
+  // prepare id (version, subVersion) of the object that will be stored (called by PutEntry)
+
+  AliCDBRunRange aRunRange; // the runRange got from filename 
+  AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
+  Int_t aVersion, aSubVersion; // the version subVersion got from filename
+  Int_t lastVersion = 0, lastSubVersion = -1; // highest version and subVersion found
+
+
+  TIter iter(gDirectory->GetListOfKeys());
+  TKey* key;
+
+  if (!id.HasVersion()) {      // version not specified: look for highest version & subVersion 
+
+    while ((key = (TKey*) iter.Next())) { // loop on keys
+
+      const char* keyName = key->GetName();
+
+      if (!KeyNameToId(keyName, aRunRange, aVersion, 
+            aSubVersion)) {
+        AliDebug(2,Form(
+              "Bad keyname <%s>!I'll skip it.", keyName));
+        continue;
+      }
+
+      if (!aRunRange.Overlaps(id.GetAliCDBRunRange())) continue;
+      if(aVersion < lastVersion) continue;
+      if(aVersion > lastVersion) lastSubVersion = -1;
+      if(aSubVersion < lastSubVersion) continue;
+      lastVersion = aVersion;
+      lastSubVersion = aSubVersion;
+      lastRunRange = aRunRange;
+    }
+
+    id.SetVersion(lastVersion);
+    id.SetSubVersion(lastSubVersion + 1);
+
+  } else { // version specified, look for highest subVersion only
+
+    while ((key = (TKey*) iter.Next())) { // loop on the keys
+
+      const char* keyName = key->GetName();
+
+      if (!KeyNameToId(keyName, aRunRange, aVersion, 
+            aSubVersion)) {
+        AliDebug(2,Form(
+              "Bad keyname <%s>!I'll skip it.", keyName));
+        continue;
+      }
+
+      if (aRunRange.Overlaps(id.GetAliCDBRunRange()) 
+          && aVersion == id.GetVersion()
+          && aSubVersion > lastSubVersion) {
+        lastSubVersion = aSubVersion;
+        lastRunRange = aRunRange;
+      }
+
+    }
+
+    id.SetSubVersion(lastSubVersion + 1);
+  }
+
+  TString lastStorage = id.GetLastStorage();
+  if(lastStorage.Contains(TString("grid"), TString::kIgnoreCase) &&
+      id.GetSubVersion() > 0 ){
+    AliError(Form("Grid to Dump Storage error! local object with version v%d_s%d found:",id.GetVersion(), id.GetSubVersion()-1));
+    AliError(Form("This object has been already transferred from Grid (check v%d_s0)!",id.GetVersion()));
+    return kFALSE;
+  }
+
+  if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) &&
+      id.GetSubVersion() > 0 ){
+    AliDebug(2, Form("A NEW object is being stored with version v%d_s%d",
+          id.GetVersion(),id.GetSubVersion()));
+    AliDebug(2, Form("and it will hide previously stored object with v%d_s%d!",
+          id.GetVersion(),id.GetSubVersion()-1));
+  }
+
+  if(!lastRunRange.IsAnyRange() && !(lastRunRange.IsEqual(& id.GetAliCDBRunRange()))) 
+    AliWarning(Form("Run range modified w.r.t. previous version (Run%d_%d_v%d_s%d)",
+          lastRunRange.GetFirstRun(), lastRunRange.GetLastRun(), 
+          id.GetVersion(), id.GetSubVersion()-1));
+
+  return kTRUE;
 
 }
 
@@ -365,416 +366,416 @@ Bool_t AliCDBDump::PrepareId(AliCDBId& id) {
 
 //_____________________________________________________________________________
 AliCDBId* AliCDBDump::GetId(const AliCDBId& query) {
-// look for filename matching query (called by GetEntry)
+  // look for filename matching query (called by GetEntry)
+
+
+  AliCDBRunRange aRunRange; // the runRange got from filename
+  Int_t aVersion, aSubVersion; // the version and subVersion got from filename
+
+  TIter iter(gDirectory->GetListOfKeys());
+  TKey* key;
+
+  AliCDBId* result = new AliCDBId();
+  result->SetPath(query.GetPath());
+
+  if (!query.HasVersion()) { // neither version and subversion specified -> look for highest version and subVersion
+
+    while ((key = (TKey*) iter.Next())) { // loop on the keys
+
+      if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
+      // aRunRange, aVersion, aSubVersion filled from filename
+
+      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
+      // aRunRange contains requested run!
 
+      if (result->GetVersion() < aVersion) {
+        result->SetVersion(aVersion);
+        result->SetSubVersion(aSubVersion);
 
-        AliCDBRunRange aRunRange; // the runRange got from filename
-        Int_t aVersion, aSubVersion; // the version and subVersion got from filename
-
-       TIter iter(gDirectory->GetListOfKeys());
-       TKey* key;
-
-       AliCDBId* result = new AliCDBId();
-       result->SetPath(query.GetPath());
-
-       if (!query.HasVersion()) { // neither version and subversion specified -> look for highest version and subVersion
-
-                while ((key = (TKey*) iter.Next())) { // loop on the keys
-                       
-                       if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
-                        // aRunRange, aVersion, aSubVersion filled from filename
-
-                       if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
-                       // aRunRange contains requested run!
-
-                       if (result->GetVersion() < aVersion) {
-                               result->SetVersion(aVersion);
-                               result->SetSubVersion(aSubVersion);
-
-                               result->SetFirstRun(
-                                       aRunRange.GetFirstRun());
-                               result->SetLastRun(
-                                       aRunRange.GetLastRun());
-
-                       } else if (result->GetVersion() == aVersion
-                               && result->GetSubVersion()
-                                       < aSubVersion) {
-
-                               result->SetSubVersion(aSubVersion);
-
-                               result->SetFirstRun(
-                                       aRunRange.GetFirstRun());
-                               result->SetLastRun(
-                                       aRunRange.GetLastRun());
-                       } else if (result->GetVersion() == aVersion
-                               && result->GetSubVersion() == aSubVersion){
-                               AliError(Form("More than one object valid for run %d, version %d_%d!",
-                                       query.GetFirstRun(), aVersion, aSubVersion));
-                               delete result;
-                               return NULL;
-                               }
-               }
-
-       } else if (!query.HasSubVersion()) { // version specified but not subversion -> look for highest subVersion
-
-               result->SetVersion(query.GetVersion());
-
-                while ((key = (TKey*) iter.Next())) { // loop on the keys
-
-                       if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
-                        // aRunRange, aVersion, aSubVersion filled from filename
-
-                       if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; 
-                       // aRunRange contains requested run!
-                       
-                       if(query.GetVersion() != aVersion) continue;
-                       // aVersion is requested version!
-
-                       if(result->GetSubVersion() == aSubVersion){
-                               AliError(Form("More than one object valid for run %d, version %d_%d!",
-                                       query.GetFirstRun(), aVersion, aSubVersion));
-                               delete result;
-                               return NULL;
-                       }
-                       if( result->GetSubVersion() < aSubVersion) {
-
-                                result->SetSubVersion(aSubVersion);
-
-                                result->SetFirstRun(
-                                       aRunRange.GetFirstRun());
-                                result->SetLastRun(
-                                       aRunRange.GetLastRun());
-                       } 
-                }
-
-       } else { // both version and subversion specified
-
-                while ((key = (TKey*) iter.Next())) { // loop on the keys
-                       
-                       if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
-                        // aRunRange, aVersion, aSubVersion filled from filename
-
-                       if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
-                       // aRunRange contains requested run!
-
-                       if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion) continue;
-                       // aVersion and aSubVersion are requested version and subVersion!
-
-                       if(result->GetVersion() == aVersion && result->GetSubVersion() == aSubVersion){
-                               AliError(Form("More than one object valid for run %d, version %d_%d!",
-                                       query.GetFirstRun(), aVersion, aSubVersion));
-                               delete result;
-                               return NULL;
-                       }
-                       result->SetVersion(aVersion);
-                       result->SetSubVersion(aSubVersion);
-                       result->SetFirstRun(aRunRange.GetFirstRun());
-                       result->SetLastRun(aRunRange.GetLastRun());
-                       
-               }
-       }
-
-       return result;
+        result->SetFirstRun(
+            aRunRange.GetFirstRun());
+        result->SetLastRun(
+            aRunRange.GetLastRun());
+
+      } else if (result->GetVersion() == aVersion
+          && result->GetSubVersion()
+          < aSubVersion) {
+
+        result->SetSubVersion(aSubVersion);
+
+        result->SetFirstRun(
+            aRunRange.GetFirstRun());
+        result->SetLastRun(
+            aRunRange.GetLastRun());
+      } else if (result->GetVersion() == aVersion
+          && result->GetSubVersion() == aSubVersion){
+        AliError(Form("More than one object valid for run %d, version %d_%d!",
+              query.GetFirstRun(), aVersion, aSubVersion));
+        delete result;
+        return NULL;
+      }
+    }
+
+  } else if (!query.HasSubVersion()) { // version specified but not subversion -> look for highest subVersion
+
+    result->SetVersion(query.GetVersion());
+
+    while ((key = (TKey*) iter.Next())) { // loop on the keys
+
+      if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
+      // aRunRange, aVersion, aSubVersion filled from filename
+
+      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; 
+      // aRunRange contains requested run!
+
+      if(query.GetVersion() != aVersion) continue;
+      // aVersion is requested version!
+
+      if(result->GetSubVersion() == aSubVersion){
+        AliError(Form("More than one object valid for run %d, version %d_%d!",
+              query.GetFirstRun(), aVersion, aSubVersion));
+        delete result;
+        return NULL;
+      }
+      if( result->GetSubVersion() < aSubVersion) {
+
+        result->SetSubVersion(aSubVersion);
+
+        result->SetFirstRun(
+            aRunRange.GetFirstRun());
+        result->SetLastRun(
+            aRunRange.GetLastRun());
+      } 
+    }
+
+  } else { // both version and subversion specified
+
+    while ((key = (TKey*) iter.Next())) { // loop on the keys
+
+      if (!KeyNameToId(key->GetName(), aRunRange, aVersion, aSubVersion)) continue;
+      // aRunRange, aVersion, aSubVersion filled from filename
+
+      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
+      // aRunRange contains requested run!
+
+      if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion) continue;
+      // aVersion and aSubVersion are requested version and subVersion!
+
+      if(result->GetVersion() == aVersion && result->GetSubVersion() == aSubVersion){
+        AliError(Form("More than one object valid for run %d, version %d_%d!",
+              query.GetFirstRun(), aVersion, aSubVersion));
+        delete result;
+        return NULL;
+      }
+      result->SetVersion(aVersion);
+      result->SetSubVersion(aSubVersion);
+      result->SetFirstRun(aRunRange.GetFirstRun());
+      result->SetLastRun(aRunRange.GetLastRun());
+
+    }
+  }
+
+  return result;
 }
 
 //_____________________________________________________________________________
 AliCDBEntry* AliCDBDump::GetEntry(const AliCDBId& queryId) {
-// get AliCDBEntry from the database
-
-       TDirectory::TContext context(gDirectory, fFile);
-
-       if (!(fFile && fFile->IsOpen())) {
-                AliError("AliCDBDump storage is not initialized properly");
-                return NULL;
-        }
-
-        if (!gDirectory->cd(queryId.GetPath())) {
-                return NULL;
-        }
-
-       AliCDBId *dataId = GetEntryId(queryId);
-
-       if (!dataId || !dataId->IsSpecified()) {
-               if(dataId) delete dataId;
-               return NULL;
-       }
-
-       TString keyname;
-       if (!IdToKeyName(dataId->GetAliCDBRunRange(), dataId->GetVersion(),
-               dataId->GetSubVersion(), keyname)) {
-               AliDebug(2,Form("Bad ID encountered! Subnormal error!"));
-               delete dataId;
-               return NULL;
-       }
-
-       // get the only AliCDBEntry object from the file
-       // the object in the file is an AliCDBEntry entry named keyname
-       // keyName = Run#firstRun_#lastRun_v#version_s#subVersion
-
-       TObject* anObject = gDirectory->Get(keyname);
-       if (!anObject) {
-               AliDebug(2,Form("Bad storage data: NULL entry object!"));
-               delete dataId;
-               return NULL;
-       } 
-
-       if (AliCDBEntry::Class() != anObject->IsA()) {
-               AliDebug(2,Form("Bad storage data: Invalid entry object!"));
-               delete dataId;
-               return NULL;
-       }
-
-       ((AliCDBEntry*) anObject)->SetLastStorage("dump");
-
-       delete dataId;
-       return (AliCDBEntry*) anObject;
+  // get AliCDBEntry from the database
+
+  TDirectory::TContext context(gDirectory, fFile);
+
+  if (!(fFile && fFile->IsOpen())) {
+    AliError("AliCDBDump storage is not initialized properly");
+    return NULL;
+  }
+
+  if (!gDirectory->cd(queryId.GetPath())) {
+    return NULL;
+  }
+
+  AliCDBId *dataId = GetEntryId(queryId);
+
+  if (!dataId || !dataId->IsSpecified()) {
+    if(dataId) delete dataId;
+    return NULL;
+  }
+
+  TString keyname;
+  if (!IdToKeyName(dataId->GetAliCDBRunRange(), dataId->GetVersion(),
+        dataId->GetSubVersion(), keyname)) {
+    AliDebug(2,Form("Bad ID encountered! Subnormal error!"));
+    delete dataId;
+    return NULL;
+  }
+
+  // get the only AliCDBEntry object from the file
+  // the object in the file is an AliCDBEntry entry named keyname
+  // keyName = Run#firstRun_#lastRun_v#version_s#subVersion
+
+  TObject* anObject = gDirectory->Get(keyname);
+  if (!anObject) {
+    AliDebug(2,Form("Bad storage data: NULL entry object!"));
+    delete dataId;
+    return NULL;
+  } 
+
+  if (AliCDBEntry::Class() != anObject->IsA()) {
+    AliDebug(2,Form("Bad storage data: Invalid entry object!"));
+    delete dataId;
+    return NULL;
+  }
+
+  ((AliCDBEntry*) anObject)->SetLastStorage("dump");
+
+  delete dataId;
+  return (AliCDBEntry*) anObject;
 }
 
 //_____________________________________________________________________________
 AliCDBId* AliCDBDump::GetEntryId(const AliCDBId& queryId) {
-// get AliCDBEntry from the database
+  // get AliCDBEntry from the database
 
-       TDirectory::TContext context(gDirectory, fFile);
+  TDirectory::TContext context(gDirectory, fFile);
 
-       if (!(fFile && fFile->IsOpen())) {
-                AliError("AliCDBDump storage is not initialized properly");
-                return NULL;
-        }
+  if (!(fFile && fFile->IsOpen())) {
+    AliError("AliCDBDump storage is not initialized properly");
+    return NULL;
+  }
 
-        if (!gDirectory->cd(queryId.GetPath())) {
-                return NULL;
-        }
+  if (!gDirectory->cd(queryId.GetPath())) {
+    return NULL;
+  }
 
-       AliCDBId* dataId = 0;
+  AliCDBId* dataId = 0;
 
-       // look for a filename matching query requests (path, runRange, version, subVersion)
-       if (!queryId.HasVersion()) {
-               // if version is not specified, first check the selection criteria list
-               AliCDBId selectedId(queryId);
-               GetSelection(&selectedId);
-               dataId = GetId(queryId);
-       } else {
-               dataId = GetId(queryId);
-       }
+  // look for a filename matching query requests (path, runRange, version, subVersion)
+  if (!queryId.HasVersion()) {
+    // if version is not specified, first check the selection criteria list
+    AliCDBId selectedId(queryId);
+    GetSelection(&selectedId);
+    dataId = GetId(queryId);
+  } else {
+    dataId = GetId(queryId);
+  }
 
-       if (dataId && !dataId->IsSpecified()) {
-               delete dataId;
-               return NULL;
-       }
+  if (dataId && !dataId->IsSpecified()) {
+    delete dataId;
+    return NULL;
+  }
 
-       return dataId;
+  return dataId;
 }
 
 //_____________________________________________________________________________
 void AliCDBDump::GetEntriesForLevel0(const AliCDBId& queryId, TList* result) {
-// multiple request (AliCDBStorage::GetAll)
+  // multiple request (AliCDBStorage::GetAll)
+
+  TDirectory* saveDir = gDirectory;
 
-       TDirectory* saveDir = gDirectory;
+  TIter iter(gDirectory->GetListOfKeys());
+  TKey* key;
 
-       TIter iter(gDirectory->GetListOfKeys());
-       TKey* key;
+  while ((key = (TKey*) iter.Next())) {
 
-       while ((key = (TKey*) iter.Next())) {
+    TString keyNameStr(key->GetName());
+    if (queryId.GetAliCDBPath().Level1Comprises(keyNameStr)) {
+      gDirectory->cd(keyNameStr);
+      GetEntriesForLevel1(queryId, result);
 
-               TString keyNameStr(key->GetName());
-               if (queryId.GetAliCDBPath().Level1Comprises(keyNameStr)) {
-                       gDirectory->cd(keyNameStr);
-                       GetEntriesForLevel1(queryId, result);
-                       
-                       saveDir->cd();
-               }
-       }
+      saveDir->cd();
+    }
+  }
 }
 
 //_____________________________________________________________________________
 void AliCDBDump::GetEntriesForLevel1(const AliCDBId& queryId, TList* result) {
-// multiple request (AliCDBStorage::GetAll)
+  // multiple request (AliCDBStorage::GetAll)
 
-        TIter iter(gDirectory->GetListOfKeys());
-        TKey* key;
+  TIter iter(gDirectory->GetListOfKeys());
+  TKey* key;
 
-       TDirectory* level0Dir = (TDirectory*) gDirectory->GetMother();
+  TDirectory* level0Dir = (TDirectory*) gDirectory->GetMother();
 
-        while ((key = (TKey*) iter.Next())) {
+  while ((key = (TKey*) iter.Next())) {
 
-                TString keyNameStr(key->GetName());
-                if (queryId.GetAliCDBPath().Level2Comprises(keyNameStr)) {
-                       
-                       AliCDBPath aPath(level0Dir->GetName(), 
-                                       gDirectory->GetName(), keyNameStr);
-                       AliCDBId anId(aPath, queryId.GetAliCDBRunRange(), 
-                                       queryId.GetVersion(), -1);
+    TString keyNameStr(key->GetName());
+    if (queryId.GetAliCDBPath().Level2Comprises(keyNameStr)) {
 
-                       AliCDBEntry* anEntry = GetEntry(anId);
-                       if (anEntry) {
-                               result->Add(anEntry);
-                       }
-       
-                }
-        }
+      AliCDBPath aPath(level0Dir->GetName(), 
+          gDirectory->GetName(), keyNameStr);
+      AliCDBId anId(aPath, queryId.GetAliCDBRunRange(), 
+          queryId.GetVersion(), -1);
+
+      AliCDBEntry* anEntry = GetEntry(anId);
+      if (anEntry) {
+        result->Add(anEntry);
+      }
+
+    }
+  }
 
 }
 
-                        
+
 //_____________________________________________________________________________
 TList* AliCDBDump::GetEntries(const AliCDBId& queryId) {
-// multiple request (AliCDBStorage::GetAll)
+  // multiple request (AliCDBStorage::GetAll)
 
-       TDirectory::TContext context(gDirectory, fFile);
+  TDirectory::TContext context(gDirectory, fFile);
 
-       if (!(fFile && fFile->IsOpen())) {
-                AliError("AliCDBDump storage is not initialized properly");
-                return NULL;
-        }
+  if (!(fFile && fFile->IsOpen())) {
+    AliError("AliCDBDump storage is not initialized properly");
+    return NULL;
+  }
 
-       TList* result = new TList();
-       result->SetOwner();
+  TList* result = new TList();
+  result->SetOwner();
 
-       TIter iter(gDirectory->GetListOfKeys());
-       TKey* key;
+  TIter iter(gDirectory->GetListOfKeys());
+  TKey* key;
 
-       while ((key = (TKey*) iter.Next())) {
-               
-               TString keyNameStr(key->GetName());
-               if (queryId.GetAliCDBPath().Level0Comprises(keyNameStr)) {
-                       gDirectory->cd(keyNameStr);
-                       GetEntriesForLevel0(queryId, result);
+  while ((key = (TKey*) iter.Next())) {
 
-                       fFile->cd();
-               }
-       }
+    TString keyNameStr(key->GetName());
+    if (queryId.GetAliCDBPath().Level0Comprises(keyNameStr)) {
+      gDirectory->cd(keyNameStr);
+      GetEntriesForLevel0(queryId, result);
 
-       return result;
+      fFile->cd();
+    }
+  }
+
+  return result;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::PutEntry(AliCDBEntry* entry, const char* mirrors) {
-// put an AliCDBEntry object into the database
-
-       TDirectory::TContext context(gDirectory, fFile);
-
-       if (!(fFile && fFile->IsOpen())) {
-               AliError("AliCDBDump storage is not initialized properly");
-               return kFALSE;
-       }
-
-       if (fReadOnly) {
-               AliError("AliCDBDump storage is read only!");
-               return kFALSE;
-       }
-
-       TString mirrorsString(mirrors);
-       if(!mirrorsString.IsNull())
-               AliWarning("AliCDBLocal storage cannot take mirror SEs into account. They will be ignored.");
-
-       AliCDBId& id = entry->GetId();
-       
-        if (!gDirectory->cd(id.GetPath())) {
-                if (!MkDir(id.GetPath())) {
-                        AliError(Form("Can't open directory <%s>!", 
-                                       id.GetPath().Data()));
-                        return kFALSE;
-                }
-        }
-
-       // set version and subVersion for the entry to be stored
-       if (!PrepareId(id)) {
-               return kFALSE;          
-       }
-
-       // build keyname from entry's id
-       TString keyname;
-       if (!IdToKeyName(id.GetAliCDBRunRange(), id.GetVersion(), id.GetSubVersion(), keyname)) {
-               AliError("Invalid ID encountered! Subnormal error!");
-               return kFALSE;
-       }       
-
-       // write object (key name: Run#firstRun_#lastRun_v#version_s#subVersion)
-       Bool_t result = gDirectory->WriteTObject(entry, keyname);
-       if (!result) {
-               AliError(Form("Can't write entry to file: %s",
-                               fFile->GetName()));
-       }
-
-        if(result) {
-               AliInfo(Form("CDB object stored into file %s",fFile->GetName()));
-               AliInfo(Form("TDirectory/key name: %s/%s",id.GetPath().Data(),keyname.Data()));
-        }
-
-       return result;
+  // put an AliCDBEntry object into the database
+
+  TDirectory::TContext context(gDirectory, fFile);
+
+  if (!(fFile && fFile->IsOpen())) {
+    AliError("AliCDBDump storage is not initialized properly");
+    return kFALSE;
+  }
+
+  if (fReadOnly) {
+    AliError("AliCDBDump storage is read only!");
+    return kFALSE;
+  }
+
+  TString mirrorsString(mirrors);
+  if(!mirrorsString.IsNull())
+    AliWarning("AliCDBLocal storage cannot take mirror SEs into account. They will be ignored.");
+
+  AliCDBId& id = entry->GetId();
+
+  if (!gDirectory->cd(id.GetPath())) {
+    if (!MkDir(id.GetPath())) {
+      AliError(Form("Can't open directory <%s>!", 
+            id.GetPath().Data()));
+      return kFALSE;
+    }
+  }
+
+  // set version and subVersion for the entry to be stored
+  if (!PrepareId(id)) {
+    return kFALSE;             
+  }
+
+  // build keyname from entry's id
+  TString keyname;
+  if (!IdToKeyName(id.GetAliCDBRunRange(), id.GetVersion(), id.GetSubVersion(), keyname)) {
+    AliError("Invalid ID encountered! Subnormal error!");
+    return kFALSE;
+  }    
+
+  // write object (key name: Run#firstRun_#lastRun_v#version_s#subVersion)
+  Bool_t result = gDirectory->WriteTObject(entry, keyname);
+  if (!result) {
+    AliError(Form("Can't write entry to file: %s",
+          fFile->GetName()));
+  }
+
+  if(result) {
+    AliInfo(Form("CDB object stored into file %s",fFile->GetName()));
+    AliInfo(Form("TDirectory/key name: %s/%s",id.GetPath().Data(),keyname.Data()));
+  }
+
+  return result;
 }
 //_____________________________________________________________________________
 TList* AliCDBDump::GetIdListFromFile(const char* fileName){
 
-       TString turl(fileName);
-       if (turl[0] != '/') {
-               turl.Prepend(TString(gSystem->WorkingDirectory()) + '/');
-       }
-       TFile *file = TFile::Open(turl);
-       if (!file) {
-               AliError(Form("Can't open selection file <%s>!", turl.Data()));
-               return NULL;
-       }
-       file->cd();
-
-       TList *list = new TList();
-       list->SetOwner();
-       int i=0;
-       TString keycycle;
-       
-       AliCDBId *id;
-       while(1){
-               i++;
-               keycycle = "AliCDBId;";
-               keycycle+=i;
-               
-               id = (AliCDBId*) file->Get(keycycle);
-               if(!id) break;
-               list->AddFirst(id);
-       }
-       file->Close(); delete file; file=0;     
-       return list;
+  TString turl(fileName);
+  if (turl[0] != '/') {
+    turl.Prepend(TString(gSystem->WorkingDirectory()) + '/');
+  }
+  TFile *file = TFile::Open(turl);
+  if (!file) {
+    AliError(Form("Can't open selection file <%s>!", turl.Data()));
+    return NULL;
+  }
+  file->cd();
+
+  TList *list = new TList();
+  list->SetOwner();
+  int i=0;
+  TString keycycle;
+
+  AliCDBId *id;
+  while(1){
+    i++;
+    keycycle = "AliCDBId;";
+    keycycle+=i;
+
+    id = (AliCDBId*) file->Get(keycycle);
+    if(!id) break;
+    list->AddFirst(id);
+  }
+  file->Close(); delete file; file=0;  
+  return list;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::Contains(const char* path) const{
-// check for path in storage
+  // check for path in storage
+
+  TDirectory::TContext context(gDirectory, fFile);
+  if (!(fFile && fFile->IsOpen())) {
+    AliError("AliCDBDump storage is not initialized properly");
+    return kFALSE;
+  }
 
-       TDirectory::TContext context(gDirectory, fFile);
-       if (!(fFile && fFile->IsOpen())) {
-                AliError("AliCDBDump storage is not initialized properly");
-                return kFALSE;
-        }
-       
-       return gDirectory->cd(path);
+  return gDirectory->cd(path);
 
 }
 
 //_____________________________________________________________________________
 void AliCDBDump::QueryValidFiles()
 {
-// Query the CDB for files valid for AliCDBStorage::fRun
-// fills list fValidFileIds with AliCDBId objects created from file name
+  // Query the CDB for files valid for AliCDBStorage::fRun
+  // fills list fValidFileIds with AliCDBId objects created from file name
 
-       AliError("Not yet (and maybe never) implemented");
+  AliError("Not yet (and maybe never) implemented");
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDump::IdToFilename(const AliCDBId& /*id*/, TString& /*filename*/) const {
-// build file name from AliCDBId (path, run range, version) and fDBFolder
+  // build file name from AliCDBId (path, run range, version) and fDBFolder
 
-       AliError("Not implemented");
-        return kFALSE;
+  AliError("Not implemented");
+  return kFALSE;
 }
 
 
 //_____________________________________________________________________________
 void AliCDBDump::SetRetry(Int_t /* nretry */, Int_t /* initsec */) {
 
-       // Function to set the exponential retry for putting entries in the OCDB
+  // Function to set the exponential retry for putting entries in the OCDB
 
-       AliInfo("This function sets the exponential retry for putting entries in the OCDB - to be used ONLY for AliCDBGrid --> returning without doing anything");
-       return;
+  AliInfo("This function sets the exponential retry for putting entries in the OCDB - to be used ONLY for AliCDBGrid --> returning without doing anything");
+  return;
 } 
 
 /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -785,57 +786,57 @@ void AliCDBDump::SetRetry(Int_t /* nretry */, Int_t /* initsec */) {
 
 ClassImp(AliCDBDumpFactory)
 
-//_____________________________________________________________________________
-Bool_t AliCDBDumpFactory::Validate(const char* dbString) {
-// check if the string is valid dump URI
+  //_____________________________________________________________________________
+  Bool_t AliCDBDumpFactory::Validate(const char* dbString) {
+    // check if the string is valid dump URI
 
-        TRegexp dbPattern("^dump://.+$");
+    TRegexp dbPattern("^dump://.+$");
 
-        return TString(dbString).Contains(dbPattern);
-}
+    return TString(dbString).Contains(dbPattern);
+  }
 
 //_____________________________________________________________________________
 AliCDBParam* AliCDBDumpFactory::CreateParameter(const char* dbString) {
-// create AliCDBDumpParam class from the URI string
+  // create AliCDBDumpParam class from the URI string
+
+  if (!Validate(dbString)) {
+    return NULL;
+  }
 
-        if (!Validate(dbString)) {
-                return NULL;
-        }
+  TString pathname(dbString + sizeof("dump://") - 1);
 
-        TString pathname(dbString + sizeof("dump://") - 1);
+  Bool_t readOnly;
 
-       Bool_t readOnly;
+  if (pathname.Contains(TRegexp(";ReadOnly$"))) {
+    pathname.Resize(pathname.Length() - sizeof(";ReadOnly") + 1);
+    readOnly = kTRUE;
+  } else {
+    readOnly = kFALSE;
+  }
 
-       if (pathname.Contains(TRegexp(";ReadOnly$"))) {
-               pathname.Resize(pathname.Length() - sizeof(";ReadOnly") + 1);
-               readOnly = kTRUE;
-       } else {
-               readOnly = kFALSE;
-       }
+  gSystem->ExpandPathName(pathname);
 
-       gSystem->ExpandPathName(pathname);
-       
-       if (pathname[0] != '/') {
-               pathname.Prepend(TString(gSystem->WorkingDirectory()) + '/');
-       }
+  if (pathname[0] != '/') {
+    pathname.Prepend(TString(gSystem->WorkingDirectory()) + '/');
+  }
 
-        return new AliCDBDumpParam(pathname, readOnly);
+  return new AliCDBDumpParam(pathname, readOnly);
 }
 
 //_____________________________________________________________________________
 AliCDBStorage* AliCDBDumpFactory::Create(const AliCDBParam* param) {
-// create AliCDBDump storage instance from parameters
+  // create AliCDBDump storage instance from parameters
 
-        if (AliCDBDumpParam::Class() == param->IsA()) {
+  if (AliCDBDumpParam::Class() == param->IsA()) {
 
-                const AliCDBDumpParam* dumpParam = 
-                       (const AliCDBDumpParam*) param;
+    const AliCDBDumpParam* dumpParam = 
+      (const AliCDBDumpParam*) param;
 
-                return new AliCDBDump(dumpParam->GetPath(),
-                               dumpParam->IsReadOnly());
-        }
+    return new AliCDBDump(dumpParam->GetPath(),
+        dumpParam->IsReadOnly());
+  }
 
-        return NULL;
+  return NULL;
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -846,65 +847,65 @@ AliCDBStorage* AliCDBDumpFactory::Create(const AliCDBParam* param) {
 
 ClassImp(AliCDBDumpParam)
 
-//_____________________________________________________________________________
-AliCDBDumpParam::AliCDBDumpParam():
-fDBPath(), fReadOnly(kFALSE)
+  //_____________________________________________________________________________
+  AliCDBDumpParam::AliCDBDumpParam():
+    fDBPath(), fReadOnly(kFALSE)
 {
-// default constructor
+  // default constructor
 
 }
 
 //_____________________________________________________________________________
 AliCDBDumpParam::AliCDBDumpParam(const char* dbPath, Bool_t readOnly):
-        fDBPath(dbPath), fReadOnly(readOnly)
+  fDBPath(dbPath), fReadOnly(readOnly)
 {
-// constructor
-
-       TString uri;
-       uri += "dump://";
-       uri += dbPath;
-
-       if (fReadOnly) {
-               uri += ";ReadOnly";
-       }
-       
-        SetURI(uri);
-        SetType("dump");
+  // constructor
+
+  TString uri;
+  uri += "dump://";
+  uri += dbPath;
+
+  if (fReadOnly) {
+    uri += ";ReadOnly";
+  }
+
+  SetURI(uri);
+  SetType("dump");
 }
 
 //_____________________________________________________________________________
 AliCDBDumpParam::~AliCDBDumpParam() {
-// destructor
+  // destructor
 
 }
 
 //_____________________________________________________________________________
 AliCDBParam* AliCDBDumpParam::CloneParam() const {
-// clone parameter
+  // clone parameter
 
-       return new AliCDBDumpParam(fDBPath, fReadOnly);
+  return new AliCDBDumpParam(fDBPath, fReadOnly);
 }
 
 //_____________________________________________________________________________
 ULong_t AliCDBDumpParam::Hash() const {
-// return Hash function
+  // return Hash function
 
-       return fDBPath.Hash();
+  return fDBPath.Hash();
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBDumpParam::IsEqual(const TObject* obj) const {
-// check if this object is equal to AliCDBParam obj
-       
-       if (this == obj) {
-               return kTRUE;
-       }
+  // check if this object is equal to AliCDBParam obj
+
+  if (this == obj) {
+    return kTRUE;
+  }
 
-       if (AliCDBDumpParam::Class() != obj->IsA()) {
-               return kFALSE;
-       }
+  if (AliCDBDumpParam::Class() != obj->IsA()) {
+    return kFALSE;
+  }
 
-       AliCDBDumpParam* other = (AliCDBDumpParam*) obj;
+  AliCDBDumpParam* other = (AliCDBDumpParam*) obj;
 
-       return fDBPath == other->fDBPath;
+  return fDBPath == other->fDBPath;
 }
index f8500d9..9110594 100644 (file)
@@ -18,52 +18,52 @@ class TDirectory;
 class TFile;
 
 class AliCDBDump: public AliCDBStorage {
-       friend class AliCDBDumpFactory;
+  friend class AliCDBDumpFactory;
 
-public:
+  public:
 
-       virtual Bool_t IsReadOnly() const {return fReadOnly;};
-       virtual Bool_t HasSubVersion() const {return kFALSE;};
-       virtual Bool_t Contains(const char* path) const;
-       virtual Bool_t IdToFilename(const AliCDBId& id, TString& filename) const;
-       virtual void SetRetry(Int_t /* nretry */, Int_t /* initsec */);
+  virtual Bool_t IsReadOnly() const {return fReadOnly;};
+  virtual Bool_t HasSubVersion() const {return kFALSE;};
+  virtual Bool_t Contains(const char* path) const;
+  virtual Bool_t IdToFilename(const AliCDBId& id, TString& filename) const;
+  virtual void SetRetry(Int_t /* nretry */, Int_t /* initsec */);
 
-protected:
+  protected:
 
-       virtual AliCDBEntry*    GetEntry(const AliCDBId& query);
-       virtual AliCDBId*       GetEntryId(const AliCDBId& query);
-        virtual TList*                 GetEntries(const AliCDBId& query);
-        virtual Bool_t                 PutEntry(AliCDBEntry* entry, const char* mirrors="");
-       virtual TList*          GetIdListFromFile(const char* fileName);
+  virtual AliCDBEntry*         GetEntry(const AliCDBId& query);
+  virtual AliCDBId*    GetEntryId(const AliCDBId& query);
+  virtual TList*               GetEntries(const AliCDBId& query);
+  virtual Bool_t               PutEntry(AliCDBEntry* entry, const char* mirrors="");
+  virtual TList*               GetIdListFromFile(const char* fileName);
 
-private:
+  private:
 
-       AliCDBDump(const AliCDBDump & source);
-       AliCDBDump & operator=(const AliCDBDump & source);
-       AliCDBDump(const char* dbFile, Bool_t readOnly);
-       virtual ~AliCDBDump();  
+  AliCDBDump(const AliCDBDump & source);
+  AliCDBDump & operator=(const AliCDBDump & source);
+  AliCDBDump(const char* dbFile, Bool_t readOnly);
+  virtual ~AliCDBDump();       
 
-       Bool_t KeyNameToId(const char* keyname, AliCDBRunRange& runRange,
-                       Int_t& version, Int_t& subVersion);
-       Bool_t IdToKeyName(const AliCDBRunRange& runRange, Int_t version,
-                       Int_t subVersion, TString& keyname);    
+  Bool_t KeyNameToId(const char* keyname, AliCDBRunRange& runRange,
+      Int_t& version, Int_t& subVersion);
+  Bool_t IdToKeyName(const AliCDBRunRange& runRange, Int_t version,
+      Int_t subVersion, TString& keyname);     
 
-       Bool_t MkDir(const TString& dir);
+  Bool_t MkDir(const TString& dir);
 
 
-       Bool_t PrepareId(AliCDBId& id);
-//     Bool_t GetId(const AliCDBId& query, AliCDBId& result);
-       AliCDBId* GetId(const AliCDBId& query);
+  Bool_t PrepareId(AliCDBId& id);
+  //   Bool_t GetId(const AliCDBId& query, AliCDBId& result);
+  AliCDBId* GetId(const AliCDBId& query);
 
-       virtual void QueryValidFiles();
+  virtual void QueryValidFiles();
 
-       void GetEntriesForLevel0(const AliCDBId& query, TList* result);
-       void GetEntriesForLevel1(const AliCDBId& query, TList* result);
+  void GetEntriesForLevel0(const AliCDBId& query, TList* result);
+  void GetEntriesForLevel1(const AliCDBId& query, TList* result);
 
-       TFile* fFile;           // Dump file
-       Bool_t fReadOnly;       // ReadOnly flag
+  TFile* fFile;                // Dump file
+  Bool_t fReadOnly;    // ReadOnly flag
 
-       ClassDef(AliCDBDump, 0);
+  ClassDef(AliCDBDump, 0);
 };
 
 /////////////////////////////////////////////////////////////////////
@@ -74,15 +74,15 @@ private:
 
 class AliCDBDumpFactory: public AliCDBStorageFactory {
 
-public:
+  public:
 
-        virtual Bool_t Validate(const char* dbString);
-        virtual AliCDBParam* CreateParameter(const char* dbString);
+    virtual Bool_t Validate(const char* dbString);
+    virtual AliCDBParam* CreateParameter(const char* dbString);
 
-protected:
-        virtual AliCDBStorage* Create(const AliCDBParam* param);
+  protected:
+    virtual AliCDBStorage* Create(const AliCDBParam* param);
 
-        ClassDef(AliCDBDumpFactory, 0);
+    ClassDef(AliCDBDumpFactory, 0);
 };
 
 /////////////////////////////////////////////////////////////////////
@@ -93,26 +93,26 @@ protected:
 
 class AliCDBDumpParam: public AliCDBParam {
 
-public:
-        AliCDBDumpParam();
-        AliCDBDumpParam(const char* dbPath, Bool_t readOnly = kFALSE);
-        
-        virtual ~AliCDBDumpParam();
+  public:
+    AliCDBDumpParam();
+    AliCDBDumpParam(const char* dbPath, Bool_t readOnly = kFALSE);
 
-        const TString& GetPath() const {return fDBPath;};
-       Bool_t IsReadOnly() const {return fReadOnly;};
+    virtual ~AliCDBDumpParam();
 
-       virtual AliCDBParam* CloneParam() const;
+    const TString& GetPath() const {return fDBPath;};
+    Bool_t IsReadOnly() const {return fReadOnly;};
 
-       virtual ULong_t Hash() const;
-       virtual Bool_t IsEqual(const TObject* obj) const;
-       
-private:
+    virtual AliCDBParam* CloneParam() const;
 
-        TString fDBPath;       // Dump file path name
-       Bool_t fReadOnly;       // ReadOnly flag
+    virtual ULong_t Hash() const;
+    virtual Bool_t IsEqual(const TObject* obj) const;
 
-       ClassDef(AliCDBDumpParam, 0);
+  private:
+
+    TString fDBPath;   // Dump file path name
+    Bool_t fReadOnly;  // ReadOnly flag
+
+    ClassDef(AliCDBDumpParam, 0);
 };
 
 #endif
index 1249c0c..eda7b17 100644 (file)
@@ -28,118 +28,118 @@ ClassImp(AliCDBEntry)
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry():
-fObject(NULL),
-fId(),
-fMetaData(NULL), 
-fIsOwner(kFALSE){
-// default constructor
+  fObject(NULL),
+  fId(),
+  fMetaData(NULL), 
+  fIsOwner(kFALSE){
+    // default constructor
 
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBId& id, 
-                       AliCDBMetaData* metaData, Bool_t owner):
-fObject(object), 
-fId(id), 
-fMetaData(metaData), 
-fIsOwner(owner){
-// constructor
+    AliCDBMetaData* metaData, Bool_t owner):
+  fObject(object), 
+  fId(id), 
+  fMetaData(metaData), 
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBPath& path, 
-                       const AliCDBRunRange& runRange,
-                        AliCDBMetaData* metaData,Bool_t owner):
-fObject(object), 
-fId(path, runRange, -1, -1), 
-fMetaData(metaData),
-fIsOwner(owner){
-// constructor
+    const AliCDBRunRange& runRange,
+    AliCDBMetaData* metaData,Bool_t owner):
+  fObject(object), 
+  fId(path, runRange, -1, -1), 
+  fMetaData(metaData),
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBPath& path, 
-                       const AliCDBRunRange& runRange,
-                       Int_t version, AliCDBMetaData* metaData, Bool_t owner):
-fObject(object), 
-fId(path, runRange, version, -1), 
-fMetaData(metaData),
-fIsOwner(owner){
-// constructor
+    const AliCDBRunRange& runRange,
+    Int_t version, AliCDBMetaData* metaData, Bool_t owner):
+  fObject(object), 
+  fId(path, runRange, version, -1), 
+  fMetaData(metaData),
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBPath& path, 
-                       const AliCDBRunRange& runRange,
-                       Int_t version, Int_t subVersion, 
-                       AliCDBMetaData* metaData, Bool_t owner):
-fObject(object),
-fId(path, runRange, version, subVersion), 
-fMetaData(metaData), 
-fIsOwner(owner){
-// constructor
+    const AliCDBRunRange& runRange,
+    Int_t version, Int_t subVersion, 
+    AliCDBMetaData* metaData, Bool_t owner):
+  fObject(object),
+  fId(path, runRange, version, subVersion), 
+  fMetaData(metaData), 
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBPath& path, 
-                       Int_t firstRun, Int_t lastRun, 
-                       AliCDBMetaData* metaData, Bool_t owner):
-fObject(object),
-fId(path, firstRun, lastRun, -1, -1), 
-fMetaData(metaData), 
-fIsOwner(owner){
-// constructor
+    Int_t firstRun, Int_t lastRun, 
+    AliCDBMetaData* metaData, Bool_t owner):
+  fObject(object),
+  fId(path, firstRun, lastRun, -1, -1), 
+  fMetaData(metaData), 
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry(TObject* object, const AliCDBPath& path, 
-                       Int_t firstRun, Int_t lastRun,
-                       Int_t version, AliCDBMetaData* metaData,
-                       Bool_t owner):
-fObject(object),
-fId(path, firstRun, lastRun, version, -1),
-fMetaData(metaData), 
-fIsOwner(owner){
-// constructor
+    Int_t firstRun, Int_t lastRun,
+    Int_t version, AliCDBMetaData* metaData,
+    Bool_t owner):
+  fObject(object),
+  fId(path, firstRun, lastRun, version, -1),
+  fMetaData(metaData), 
+  fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::AliCDBEntry( TObject* object, const AliCDBPath& path, 
-                       Int_t firstRun, Int_t lastRun,
-                       Int_t version, Int_t subVersion,
-                       AliCDBMetaData* metaData, Bool_t owner):
-fObject(object),
-fId(path, firstRun, lastRun, version, subVersion),
-fMetaData(metaData), fIsOwner(owner){
-// constructor
+    Int_t firstRun, Int_t lastRun,
+    Int_t version, Int_t subVersion,
+    AliCDBMetaData* metaData, Bool_t owner):
+  fObject(object),
+  fId(path, firstRun, lastRun, version, subVersion),
+  fMetaData(metaData), fIsOwner(owner){
+    // constructor
     fMetaData->SetObjectClassName(fObject->ClassName());
-}
+  }
 
 //_____________________________________________________________________________
 AliCDBEntry::~AliCDBEntry() {
-// destructor
+  // destructor
 
-       if (fIsOwner) {
-               if (fObject) {
-                       delete fObject;
-               }
+  if (fIsOwner) {
+    if (fObject) {
+      delete fObject;
+    }
 
-               if (fMetaData) {
-                       delete fMetaData;
-               }
-       }
+    if (fMetaData) {
+      delete fMetaData;
+    }
+  }
 }
 
 //_____________________________________________________________________________
 void AliCDBEntry::PrintId() const {
-       AliInfo(Form("%s",fId.ToString().Data()));
+
+  AliInfo(Form("%s",fId.ToString().Data()));
 
 }
index fb608d3..0e9c83d 100644 (file)
 
 class AliCDBEntry: public TObject {
 
-public:
-       AliCDBEntry();
-
-       AliCDBEntry(TObject* object, const AliCDBId& id,  
-                       AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
-                       AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
-                       Int_t version, AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
-                       Int_t version, Int_t subVersion, 
-                       AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
-                       AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
-                       Int_t version, AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
-                       Int_t version, Int_t subVersion, 
-                       AliCDBMetaData* metaData, Bool_t owner = kFALSE);
-
-       virtual ~AliCDBEntry();
-
-
-       void            SetId(const AliCDBId& id) {fId = id;};
-       AliCDBId&       GetId() {return fId;};
-       const AliCDBId& GetId() const {return fId;};
-       void            PrintId() const;
-       
-       void            SetObject(TObject* object) {fObject = object;};
-       TObject*        GetObject() {return fObject;};
-       const TObject*  GetObject() const {return fObject;};    
-
-       void                    SetMetaData(AliCDBMetaData* metaData) {fMetaData = metaData;};
-       AliCDBMetaData*         GetMetaData() {return fMetaData;};
-       const AliCDBMetaData*   GetMetaData() const {return fMetaData;};
-       void                    PrintMetaData() const {fMetaData->PrintMetaData();}
-
-       void    SetOwner(Bool_t owner) {fIsOwner = owner;};
-       Bool_t  IsOwner() const {return fIsOwner;};
-       
-       void    SetVersion(Int_t version) {fId.SetVersion(version);}
-       void    SetSubVersion(Int_t subVersion) {fId.SetSubVersion(subVersion);}
-       
-       const TString   GetLastStorage() const {return fId.GetLastStorage();};
-       void            SetLastStorage(TString lastStorage) {fId.SetLastStorage(lastStorage);};
-
-private:
-       
-       AliCDBEntry(const AliCDBEntry& other); // no copy ctor
-       void operator= (const AliCDBEntry& other); // no assignment op
-
-       TObject* fObject;               // object
-       AliCDBId fId;                   // entry ID
-       AliCDBMetaData* fMetaData;      // metaData
-       Bool_t fIsOwner;                // ownership flag
-       
-       ClassDef(AliCDBEntry, 1);
+  public:
+    AliCDBEntry();
+
+    AliCDBEntry(TObject* object, const AliCDBId& id,  
+        AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
+        AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
+        Int_t version, AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, const AliCDBRunRange& runRange,
+        Int_t version, Int_t subVersion, 
+        AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
+        AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
+        Int_t version, AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    AliCDBEntry(TObject* object, const AliCDBPath& path, Int_t firstRun, Int_t lastRun,
+        Int_t version, Int_t subVersion, 
+        AliCDBMetaData* metaData, Bool_t owner = kFALSE);
+
+    virtual ~AliCDBEntry();
+
+
+    void               SetId(const AliCDBId& id) {fId = id;};
+    AliCDBId&  GetId() {return fId;};
+    const AliCDBId& GetId() const {return fId;};
+    void               PrintId() const;
+
+    void               SetObject(TObject* object) {fObject = object;};
+    TObject*   GetObject() {return fObject;};
+    const TObject*     GetObject() const {return fObject;};    
+
+    void                       SetMetaData(AliCDBMetaData* metaData) {fMetaData = metaData;};
+    AliCDBMetaData*    GetMetaData() {return fMetaData;};
+    const AliCDBMetaData*      GetMetaData() const {return fMetaData;};
+    void                       PrintMetaData() const {fMetaData->PrintMetaData();}
+
+    void       SetOwner(Bool_t owner) {fIsOwner = owner;};
+    Bool_t     IsOwner() const {return fIsOwner;};
+
+    void       SetVersion(Int_t version) {fId.SetVersion(version);}
+    void       SetSubVersion(Int_t subVersion) {fId.SetSubVersion(subVersion);}
+
+    const TString      GetLastStorage() const {return fId.GetLastStorage();};
+    void               SetLastStorage(TString lastStorage) {fId.SetLastStorage(lastStorage);};
+
+  private:
+
+    AliCDBEntry(const AliCDBEntry& other); // no copy ctor
+    void operator= (const AliCDBEntry& other); // no assignment op
+
+    TObject* fObject;          // object
+    AliCDBId fId;                      // entry ID
+    AliCDBMetaData* fMetaData;         // metaData
+    Bool_t fIsOwner;           // ownership flag
+
+    ClassDef(AliCDBEntry, 1);
 };
 
 #endif
index 39a188f..706820b 100644 (file)
@@ -42,105 +42,104 @@ ClassImp(AliCDBGrid)
 
 //_____________________________________________________________________________
 AliCDBGrid::AliCDBGrid(const char *gridUrl, const char *user, const char *dbFolder,
-                       const char *se, const char* cacheFolder, Bool_t operateDisconnected,
-                      Long64_t cacheSize, Long_t cleanupInterval) :
-AliCDBStorage(),
-fGridUrl(gridUrl),
-fUser(user),
-fDBFolder(dbFolder),
-fSE(se),
-fMirrorSEs(""),
-fCacheFolder(cacheFolder),
-fOperateDisconnected(operateDisconnected),
-fCacheSize(cacheSize),
-fCleanupInterval(cleanupInterval)
+    const char *se, const char* cacheFolder, Bool_t operateDisconnected,
+    Long64_t cacheSize, Long_t cleanupInterval) :
+  AliCDBStorage(),
+  fGridUrl(gridUrl),
+  fUser(user),
+  fDBFolder(dbFolder),
+  fSE(se),
+  fMirrorSEs(""),
+  fCacheFolder(cacheFolder),
+  fOperateDisconnected(operateDisconnected),
+  fCacheSize(cacheSize),
+  fCleanupInterval(cleanupInterval)
 {
 // constructor //
 
-       // if the same Grid is alreay active, skip connection
-       if (!gGrid || fGridUrl != gGrid->GridUrl()
-            || (( fUser != "" ) && ( fUser != gGrid->GetUser() )) ) {
-               // connection to the Grid
-               AliInfo("Connection to the Grid...");
-               if(gGrid){
-                       AliInfo(Form("gGrid = %p; fGridUrl = %s; gGrid->GridUrl() = %s",gGrid,fGridUrl.Data(), gGrid->GridUrl()));
-                       AliInfo(Form("fUser = %s; gGrid->GetUser() = %s",fUser.Data(), gGrid->GetUser()));
-               }
-               TGrid::Connect(fGridUrl.Data(),fUser.Data());
-       }
-
-       if(!gGrid) {
-               AliError("Connection failed!");
-               return;
-       }
-
-       TString initDir(gGrid->Pwd(0));
-       if (fDBFolder[0] != '/') {
-               fDBFolder.Prepend(initDir);
-       }
-
-       // check DBFolder: trying to cd to DBFolder; if it does not exist, create it
-       if(!gGrid->Cd(fDBFolder.Data(),0)){
-               AliDebug(2,Form("Creating new folder <%s> ...",fDBFolder.Data()));
-               TGridResult* res = gGrid->Command(Form("mkdir -p %s",fDBFolder.Data()));
-               TString result = res->GetKey(0,"__result__");
-               if(result == "0"){
-                       AliFatal(Form("Cannot create folder <%s> !",fDBFolder.Data()));
-                       return;
-               }
-       } else {
-               AliDebug(2,Form("Folder <%s> found",fDBFolder.Data()));
-       }
-
-       // removes any '/' at the end of path, then append one '/'
-       while(fDBFolder.EndsWith("/")) fDBFolder.Remove(fDBFolder.Last('/')); 
-       fDBFolder+="/";
-
-       fType="alien";
-       fBaseFolder = fDBFolder;
-
-       // Setting the cache
-
-       // Check if local cache folder is already defined
-       TString origCache(TFile::GetCacheFileDir());
-       if(fCacheFolder.Length() > 0) {
-               if(origCache.Length() == 0) {
-                       AliInfo(Form("Setting local cache to: %s", fCacheFolder.Data()));
-               } else if(fCacheFolder != origCache) {
-                       AliWarning(Form("Local cache folder was already defined, changing it to: %s",
-                                       fCacheFolder.Data()));
-               }
-
-               // default settings are: operateDisconnected=kTRUE, forceCacheread = kFALSE
-               if(!TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected)) {
-                       AliError(Form("Could not set cache folder %s !", fCacheFolder.Data()));
-                       fCacheFolder = "";
-               } else {
-                       // reset fCacheFolder because the function may have
-                       // slightly changed the folder name (e.g. '/' added)
-                       fCacheFolder = TFile::GetCacheFileDir();
-               }
-
-               // default settings are: cacheSize=1GB, cleanupInterval = 0
-               if(!TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval)) {
-                       AliError(Form("Could not set following values "
-                               "to ShrinkCacheFileDir: cacheSize = %lld, cleanupInterval = %ld !",
-                               fCacheSize, fCleanupInterval));
-               }
-       }
-
-       // return to the initial directory
-       gGrid->Cd(initDir.Data(),0);
-
-       fNretry = 3;  // default
-       fInitRetrySeconds = 5;   // default
+  // if the same Grid is alreay active, skip connection
+  if (!gGrid || fGridUrl != gGrid->GridUrl()
+      || (( fUser != "" ) && ( fUser != gGrid->GetUser() )) ) {
+    // connection to the Grid
+    AliInfo("Connection to the Grid...");
+    if(gGrid){
+      AliInfo(Form("gGrid = %p; fGridUrl = %s; gGrid->GridUrl() = %s",gGrid,fGridUrl.Data(), gGrid->GridUrl()));
+      AliInfo(Form("fUser = %s; gGrid->GetUser() = %s",fUser.Data(), gGrid->GetUser()));
+    }
+    TGrid::Connect(fGridUrl.Data(),fUser.Data());
+  }
+
+  if(!gGrid) {
+    AliError("Connection failed!");
+    return;
+  }
+
+  TString initDir(gGrid->Pwd(0));
+  if (fDBFolder[0] != '/') {
+    fDBFolder.Prepend(initDir);
+  }
+
+  // check DBFolder: trying to cd to DBFolder; if it does not exist, create it
+  if(!gGrid->Cd(fDBFolder.Data(),0)){
+    AliDebug(2,Form("Creating new folder <%s> ...",fDBFolder.Data()));
+    TGridResult* res = gGrid->Command(Form("mkdir -p %s",fDBFolder.Data()));
+    TString result = res->GetKey(0,"__result__");
+    if(result == "0"){
+      AliFatal(Form("Cannot create folder <%s> !",fDBFolder.Data()));
+      return;
+    }
+  } else {
+    AliDebug(2,Form("Folder <%s> found",fDBFolder.Data()));
+  }
+
+  // removes any '/' at the end of path, then append one '/'
+  while(fDBFolder.EndsWith("/")) fDBFolder.Remove(fDBFolder.Last('/')); 
+  fDBFolder+="/";
+
+  fType="alien";
+  fBaseFolder = fDBFolder;
+
+  // Setting the cache
+
+  // Check if local cache folder is already defined
+  TString origCache(TFile::GetCacheFileDir());
+  if(fCacheFolder.Length() > 0) {
+    if(origCache.Length() == 0) {
+      AliInfo(Form("Setting local cache to: %s", fCacheFolder.Data()));
+    } else if(fCacheFolder != origCache) {
+      AliWarning(Form("Local cache folder was already defined, changing it to: %s",
+            fCacheFolder.Data()));
+    }
+
+    // default settings are: operateDisconnected=kTRUE, forceCacheread = kFALSE
+    if(!TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected)) {
+      AliError(Form("Could not set cache folder %s !", fCacheFolder.Data()));
+      fCacheFolder = "";
+    } else {
+      // reset fCacheFolder because the function may have
+      // slightly changed the folder name (e.g. '/' added)
+      fCacheFolder = TFile::GetCacheFileDir();
+    }
+
+    // default settings are: cacheSize=1GB, cleanupInterval = 0
+    if(!TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval)) {
+      AliError(Form("Could not set following values "
+            "to ShrinkCacheFileDir: cacheSize = %lld, cleanupInterval = %ld !",
+            fCacheSize, fCleanupInterval));
+    }
+  }
+
+  // return to the initial directory
+  gGrid->Cd(initDir.Data(),0);
+
+  fNretry = 3;  // default
+  fInitRetrySeconds = 5;   // default
 }
 
 //_____________________________________________________________________________
-AliCDBGrid::~AliCDBGrid()
-{
+AliCDBGrid::~AliCDBGrid() {
 // destructor
-       delete gGrid; gGrid=0;
+  delete gGrid; gGrid=0;
 
 }
 
@@ -148,91 +147,91 @@ AliCDBGrid::~AliCDBGrid()
 Bool_t AliCDBGrid::FilenameToId(TString& filename, AliCDBId& id) {
 // build AliCDBId from full path filename (fDBFolder/path/Run#x_#y_v#z_s0.root)
 
-       if(filename.Contains(fDBFolder)){
-               filename = filename(fDBFolder.Length(),filename.Length()-fDBFolder.Length());
-       }
+  if(filename.Contains(fDBFolder)){
+    filename = filename(fDBFolder.Length(),filename.Length()-fDBFolder.Length());
+  }
 
-       TString idPath = filename(0,filename.Last('/'));
-       id.SetPath(idPath);
-       if(!id.IsValid()) return kFALSE;
+  TString idPath = filename(0,filename.Last('/'));
+  id.SetPath(idPath);
+  if(!id.IsValid()) return kFALSE;
 
-       filename=filename(idPath.Length()+1,filename.Length()-idPath.Length());
+  filename=filename(idPath.Length()+1,filename.Length()-idPath.Length());
 
-        Ssiz_t mSize;
-       // valid filename: Run#firstRun_#lastRun_v#version_s0.root
-        TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s0.root$");
-        keyPattern.Index(filename, &mSize);
-        if (!mSize) {
+  Ssiz_t mSize;
+  // valid filename: Run#firstRun_#lastRun_v#version_s0.root
+  TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s0.root$");
+  keyPattern.Index(filename, &mSize);
+  if (!mSize) {
 
-               // TODO backward compatibility ... maybe remove later!
-               Ssiz_t oldmSize;
-               TRegexp oldKeyPattern("^Run[0-9]+_[0-9]+_v[0-9]+.root$");
-               oldKeyPattern.Index(filename, &oldmSize);
-               if(!oldmSize) {
-                       AliDebug(2,Form("Bad filename <%s>.", filename.Data()));
-                       return kFALSE;
-               } else {
-                       AliDebug(2,Form("Old filename format <%s>.", filename.Data()));
-                       id.SetSubVersion(-11); // TODO trick to ensure backward compatibility
-               }
+    // TODO backward compatibility ... maybe remove later!
+    Ssiz_t oldmSize;
+    TRegexp oldKeyPattern("^Run[0-9]+_[0-9]+_v[0-9]+.root$");
+    oldKeyPattern.Index(filename, &oldmSize);
+    if(!oldmSize) {
+      AliDebug(2,Form("Bad filename <%s>.", filename.Data()));
+      return kFALSE;
+    } else {
+      AliDebug(2,Form("Old filename format <%s>.", filename.Data()));
+      id.SetSubVersion(-11); // TODO trick to ensure backward compatibility
+    }
 
-        } else {
-               id.SetSubVersion(-1); // TODO trick to ensure backward compatibility
-       }
+  } else {
+    id.SetSubVersion(-1); // TODO trick to ensure backward compatibility
+  }
 
-       filename.Resize(filename.Length() - sizeof(".root") + 1);
+  filename.Resize(filename.Length() - sizeof(".root") + 1);
 
-        TObjArray* strArray = (TObjArray*) filename.Tokenize("_");
+  TObjArray* strArray = (TObjArray*) filename.Tokenize("_");
 
-       TString firstRunString(((TObjString*) strArray->At(0))->GetString());
-       id.SetFirstRun(atoi(firstRunString.Data() + 3));
-       id.SetLastRun(atoi(((TObjString*) strArray->At(1))->GetString()));
+  TString firstRunString(((TObjString*) strArray->At(0))->GetString());
+  id.SetFirstRun(atoi(firstRunString.Data() + 3));
+  id.SetLastRun(atoi(((TObjString*) strArray->At(1))->GetString()));
 
-       TString verString(((TObjString*) strArray->At(2))->GetString());
-       id.SetVersion(atoi(verString.Data() + 1));
+  TString verString(((TObjString*) strArray->At(2))->GetString());
+  id.SetVersion(atoi(verString.Data() + 1));
 
-        delete strArray;
+  delete strArray;
 
-        return kTRUE;
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBGrid::IdToFilename(const AliCDBId& id, TString& filename) const {
 // build file name from AliCDBId (path, run range, version) and fDBFolder
 
-       if (!id.GetAliCDBRunRange().IsValid()) {
-               AliDebug(2,Form("Invalid run range <%d, %d>.",
-                       id.GetFirstRun(), id.GetLastRun()));
-               return kFALSE;
-       }
+  if (!id.GetAliCDBRunRange().IsValid()) {
+    AliDebug(2,Form("Invalid run range <%d, %d>.",
+          id.GetFirstRun(), id.GetLastRun()));
+    return kFALSE;
+  }
 
-       if (id.GetVersion() < 0) {
-               AliDebug(2,Form("Invalid version <%d>.", id.GetVersion()));
-                return kFALSE;
-       }
+  if (id.GetVersion() < 0) {
+    AliDebug(2,Form("Invalid version <%d>.", id.GetVersion()));
+    return kFALSE;
+  }
 
-       filename = Form("Run%d_%d_v%d",
-                               id.GetFirstRun(),
-                               id.GetLastRun(),
-                               id.GetVersion());
+  filename = Form("Run%d_%d_v%d",
+      id.GetFirstRun(),
+      id.GetLastRun(),
+      id.GetVersion());
 
-       if (id.GetSubVersion() != -11) filename += "_s0"; // TODO to ensure backward compatibility
-       filename += ".root";
+  if (id.GetSubVersion() != -11) filename += "_s0"; // TODO to ensure backward compatibility
+  filename += ".root";
 
-       filename.Prepend(fDBFolder + id.GetPath() + '/');
+  filename.Prepend(fDBFolder + id.GetPath() + '/');
 
-        return kTRUE;
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 void AliCDBGrid::SetRetry(Int_t nretry, Int_t initsec) {
 
-       // Function to set the exponential retry for putting entries in the OCDB
+  // Function to set the exponential retry for putting entries in the OCDB
 
-       AliWarning("WARNING!!! You are changing the exponential retry times and delay: this function should be used by experts!"); 
-       fNretry = nretry;
-       fInitRetrySeconds = initsec;
-       AliDebug(2,Form("fNretry = %d, fInitRetrySeconds = %d", fNretry, fInitRetrySeconds));
+  AliWarning("WARNING!!! You are changing the exponential retry times and delay: this function should be used by experts!"); 
+  fNretry = nretry;
+  fInitRetrySeconds = initsec;
+  AliDebug(2,Form("fNretry = %d, fInitRetrySeconds = %d", fNretry, fInitRetrySeconds));
 } 
 
 
@@ -240,171 +239,171 @@ void AliCDBGrid::SetRetry(Int_t nretry, Int_t initsec) {
 Bool_t AliCDBGrid::PrepareId(AliCDBId& id) {
 // prepare id (version) of the object that will be stored (called by PutEntry)
 
-       TString initDir(gGrid->Pwd(0));
-
-       TString dirName(fDBFolder);
-
-       Bool_t dirExist=kFALSE;
-
-
-
-       // go to the path; if directory does not exist, create it
-       for(int i=0;i<3;i++){
-               //TString cmd("find -d ");
-               //cmd += Form("%s ",dirName);
-               //cmd += 
-               //gGrid->Command(cmd.Data());
-               dirName+=Form("%s/",id.GetPathLevel(i).Data());
-               dirExist=gGrid->Cd(dirName,0);
-               if (!dirExist) {
-                       AliDebug(2,Form("Creating new folder <%s> ...",dirName.Data()));
-                       if(!gGrid->Mkdir(dirName,"",0)){
-                               AliError(Form("Cannot create directory <%s> !",dirName.Data()));
-                               gGrid->Cd(initDir.Data());
-                       return kFALSE;
-                       }
-
-                       // if folders are new add tags to them
-                       if(i == 1) {
-                               // TODO Currently disabled
-                               // add short lived tag!
-                               // AliInfo("Tagging level 1 folder with \"ShortLived\" tag");
-                               // if(!AddTag(dirName,"ShortLived_try")){
-                               //      AliError(Form("Could not tag folder %s !", dirName.Data()));
-                               //      if(!gGrid->Rmdir(dirName.Data())){
-                               //              AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
-                               //      }
-                               //      return 0;
-                               //}
-
-                       } else if(i == 2) {
-                               AliDebug(2,"Tagging level 2 folder with \"CDB\" and \"CDB_MD\" tag");
-                               if(!AddTag(dirName,"CDB")){
-                                       AliError(Form("Could not tag folder %s !", dirName.Data()));
-                                       if(!gGrid->Rmdir(dirName.Data())){
-                                               AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
-                                       }
-                                       return 0;
-                               }
-                               if(!AddTag(dirName,"CDB_MD")){
-                                       AliError(Form("Could not tag folder %s !", dirName.Data()));
-                                       if(!gGrid->Rmdir(dirName.Data())){
-                                               AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
-                                       }
-                                       return 0;
-                               }
-
-                               // TODO Currently disabled
-                               // add short lived tag!
-                               // TString path=id.GetPath();
-                               // if(AliCDBManager::Instance()->IsShortLived(path.Data())) {
-                               //      AliInfo(Form("Tagging %s as short lived", dirName.Data()));
-                               //      if(!TagShortLived(dirName, kTRUE)){
-                               //              AliError(Form("Could not tag folder %s !", dirName.Data()));
-                               //              if(!gGrid->Rmdir(dirName.Data())){
-                               //                      AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
-                               //              }
-                               //              return 0;
-                               //      }
-                               // } else {
-                               //      AliInfo(Form("Tagging %s as long lived", dirName.Data()));
-                               //      if(!TagShortLived(dirName, kFALSE)){
-                               //              AliError(Form("Could not tag folder %s !", dirName.Data()));
-                               //              if(!gGrid->Rmdir(dirName.Data())){
-                               //                      AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
-                               //              }
-                               //              return 0;
-                               //      }
-                               // }
-                       }
-               }
-       }
-       gGrid->Cd(initDir,0);
-
-       TString filename;
-       AliCDBId anId; // the id got from filename
-       AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
-       Int_t lastVersion=0; // highest version found
-
-       TGridResult *res = gGrid->Ls(dirName);
-
-       //loop on the files in the directory, look for highest version
-       for(int i=0; i < res->GetEntries(); i++){
-               filename=res->GetFileNamePath(i);
-               if (!FilenameToId(filename, anId)) continue;
-               if (anId.GetAliCDBRunRange().Overlaps(id.GetAliCDBRunRange()) && anId.GetVersion() > lastVersion) {
-                       lastVersion = anId.GetVersion();
-                       lastRunRange = anId.GetAliCDBRunRange();
-               }
-
-       }
-       delete res;
-
-       // GRP entries with explicitly set version escape default incremental versioning
-       if(id.GetPath().Contains("GRP") && id.HasVersion() && lastVersion!=0)
-       {
-               AliDebug(5,Form("Entry %s won't be put in the destination OCDB", id.ToString().Data()));
-               return kFALSE;
-       }
-
-       id.SetVersion(lastVersion + 1);
-       id.SetSubVersion(0);
-
-       TString lastStorage = id.GetLastStorage();
-       if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) && id.GetVersion() > 1 ){
-               AliDebug(2, Form("A NEW object is being stored with version %d",
-                                       id.GetVersion()));
-               AliDebug(2, Form("and it will hide previously stored object with version %d!",
-                                       id.GetVersion()-1));
-       }
-
-       if(!lastRunRange.IsAnyRange() && !(lastRunRange.IsEqual(&id.GetAliCDBRunRange())))
-               AliWarning(Form("Run range modified w.r.t. previous version (Run%d_%d_v%d)",
-                       lastRunRange.GetFirstRun(), lastRunRange.GetLastRun(), id.GetVersion()));
-
-       return kTRUE;
+  TString initDir(gGrid->Pwd(0));
+
+  TString dirName(fDBFolder);
+
+  Bool_t dirExist=kFALSE;
+
+
+
+  // go to the path; if directory does not exist, create it
+  for(int i=0;i<3;i++){
+    //TString cmd("find -d ");
+    //cmd += Form("%s ",dirName);
+    //cmd += 
+    //gGrid->Command(cmd.Data());
+    dirName+=Form("%s/",id.GetPathLevel(i).Data());
+    dirExist=gGrid->Cd(dirName,0);
+    if (!dirExist) {
+      AliDebug(2,Form("Creating new folder <%s> ...",dirName.Data()));
+      if(!gGrid->Mkdir(dirName,"",0)){
+        AliError(Form("Cannot create directory <%s> !",dirName.Data()));
+        gGrid->Cd(initDir.Data());
+        return kFALSE;
+      }
+
+      // if folders are new add tags to them
+      if(i == 1) {
+        // TODO Currently disabled
+        // add short lived tag!
+        // AliInfo("Tagging level 1 folder with \"ShortLived\" tag");
+        // if(!AddTag(dirName,"ShortLived_try")){
+        //     AliError(Form("Could not tag folder %s !", dirName.Data()));
+        //     if(!gGrid->Rmdir(dirName.Data())){
+        //             AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
+        //     }
+        //     return 0;
+        //}
+
+      } else if(i == 2) {
+        AliDebug(2,"Tagging level 2 folder with \"CDB\" and \"CDB_MD\" tag");
+        if(!AddTag(dirName,"CDB")){
+          AliError(Form("Could not tag folder %s !", dirName.Data()));
+          if(!gGrid->Rmdir(dirName.Data())){
+            AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
+          }
+          return 0;
+        }
+        if(!AddTag(dirName,"CDB_MD")){
+          AliError(Form("Could not tag folder %s !", dirName.Data()));
+          if(!gGrid->Rmdir(dirName.Data())){
+            AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
+          }
+          return 0;
+        }
+
+        // TODO Currently disabled
+        // add short lived tag!
+        // TString path=id.GetPath();
+        // if(AliCDBManager::Instance()->IsShortLived(path.Data())) {
+        //     AliInfo(Form("Tagging %s as short lived", dirName.Data()));
+        //     if(!TagShortLived(dirName, kTRUE)){
+        //             AliError(Form("Could not tag folder %s !", dirName.Data()));
+        //             if(!gGrid->Rmdir(dirName.Data())){
+        //                     AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
+        //             }
+        //             return 0;
+        //     }
+        // } else {
+        //     AliInfo(Form("Tagging %s as long lived", dirName.Data()));
+        //     if(!TagShortLived(dirName, kFALSE)){
+        //             AliError(Form("Could not tag folder %s !", dirName.Data()));
+        //             if(!gGrid->Rmdir(dirName.Data())){
+        //                     AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
+        //             }
+        //             return 0;
+        //     }
+        // }
+      }
+    }
+  }
+  gGrid->Cd(initDir,0);
+
+  TString filename;
+  AliCDBId anId; // the id got from filename
+  AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
+  Int_t lastVersion=0; // highest version found
+
+  TGridResult *res = gGrid->Ls(dirName);
+
+  //loop on the files in the directory, look for highest version
+  for(int i=0; i < res->GetEntries(); i++){
+    filename=res->GetFileNamePath(i);
+    if (!FilenameToId(filename, anId)) continue;
+    if (anId.GetAliCDBRunRange().Overlaps(id.GetAliCDBRunRange()) && anId.GetVersion() > lastVersion) {
+      lastVersion = anId.GetVersion();
+      lastRunRange = anId.GetAliCDBRunRange();
+    }
+
+  }
+  delete res;
+
+  // GRP entries with explicitly set version escape default incremental versioning
+  if(id.GetPath().Contains("GRP") && id.HasVersion() && lastVersion!=0)
+  {
+    AliDebug(5,Form("Entry %s won't be put in the destination OCDB", id.ToString().Data()));
+    return kFALSE;
+  }
+
+  id.SetVersion(lastVersion + 1);
+  id.SetSubVersion(0);
+
+  TString lastStorage = id.GetLastStorage();
+  if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) && id.GetVersion() > 1 ){
+    AliDebug(2, Form("A NEW object is being stored with version %d",
+          id.GetVersion()));
+    AliDebug(2, Form("and it will hide previously stored object with version %d!",
+          id.GetVersion()-1));
+  }
+
+  if(!lastRunRange.IsAnyRange() && !(lastRunRange.IsEqual(&id.GetAliCDBRunRange())))
+    AliWarning(Form("Run range modified w.r.t. previous version (Run%d_%d_v%d)",
+          lastRunRange.GetFirstRun(), lastRunRange.GetLastRun(), id.GetVersion()));
+
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 AliCDBId* AliCDBGrid::GetId(const TObjArray& validFileIds, const AliCDBId& query) {
 // look for the Id that matches query's requests (highest or exact version)
 
-       if(validFileIds.GetEntriesFast() < 1)
-               return NULL;
-
-       TIter iter(&validFileIds);
-
-       AliCDBId *anIdPtr=0;
-       AliCDBId* result=0;
-
-       while((anIdPtr = dynamic_cast<AliCDBId*> (iter.Next()))){
-               if(anIdPtr->GetPath() != query.GetPath()) continue;
-
-               //if(!CheckVersion(query, anIdPtr, result)) return NULL;
-
-               if (!query.HasVersion()){ // look for highest version
-                       if(result && result->GetVersion() > anIdPtr->GetVersion()) continue;
-                       if(result && result->GetVersion() == anIdPtr->GetVersion()) {
-                               AliError(Form("More than one object valid for run %d, version %d!",
-                                       query.GetFirstRun(), anIdPtr->GetVersion()));
-                               return NULL;
-                       }
-                       result = anIdPtr;
-               } else { // look for specified version
-                       if(query.GetVersion() != anIdPtr->GetVersion()) continue;
-                       if(result && result->GetVersion() == anIdPtr->GetVersion()){
-                               AliError(Form("More than one object valid for run %d, version %d!",
-                                       query.GetFirstRun(), anIdPtr->GetVersion()));
-                               return NULL;
-                       }
-                       result = anIdPtr;
-               }
-
-       }
-       
-       if (!result) return NULL;
-
-       return dynamic_cast<AliCDBId*> (result->Clone());
+  if(validFileIds.GetEntriesFast() < 1)
+    return NULL;
+
+  TIter iter(&validFileIds);
+
+  AliCDBId *anIdPtr=0;
+  AliCDBId* result=0;
+
+  while((anIdPtr = dynamic_cast<AliCDBId*> (iter.Next()))){
+    if(anIdPtr->GetPath() != query.GetPath()) continue;
+
+    //if(!CheckVersion(query, anIdPtr, result)) return NULL;
+
+    if (!query.HasVersion()){ // look for highest version
+      if(result && result->GetVersion() > anIdPtr->GetVersion()) continue;
+      if(result && result->GetVersion() == anIdPtr->GetVersion()) {
+        AliError(Form("More than one object valid for run %d, version %d!",
+              query.GetFirstRun(), anIdPtr->GetVersion()));
+        return NULL;
+      }
+      result = anIdPtr;
+    } else { // look for specified version
+      if(query.GetVersion() != anIdPtr->GetVersion()) continue;
+      if(result && result->GetVersion() == anIdPtr->GetVersion()){
+        AliError(Form("More than one object valid for run %d, version %d!",
+              query.GetFirstRun(), anIdPtr->GetVersion()));
+        return NULL;
+      }
+      result = anIdPtr;
+    }
+
+  }
+
+  if (!result) return NULL;
+
+  return dynamic_cast<AliCDBId*> (result->Clone());
 }
 
 //_____________________________________________________________________________
@@ -412,495 +411,492 @@ AliCDBId* AliCDBGrid::GetEntryId(const AliCDBId& queryId) {
 // get AliCDBId from the database
 // User must delete returned object
 
-       AliCDBId* dataId=0;
-
-       AliCDBId selectedId(queryId);
-       if (!selectedId.HasVersion()) {
-               // if version is not specified, first check the selection criteria list
-               GetSelection(&selectedId);
-       }
-
-       TObjArray validFileIds;
-       validFileIds.SetOwner(1);
-
-       // look for file matching query requests (path, runRange, version)
-       if(selectedId.GetFirstRun() == fRun && fPathFilter.Comprises(selectedId.GetAliCDBPath()) &&
-                       fVersion == selectedId.GetVersion() && !fMetaDataFilter){
-               // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
-               AliDebug(2, Form("List of files valid for run %d was loaded. Looking there for fileids valid for path %s!",
-                                       selectedId.GetFirstRun(), selectedId.GetPath().Data()));
-               dataId = GetId(fValidFileIds, selectedId);
-
-       } else {
-               // List of files valid for reqested run was not loaded. Looking directly into CDB
-               AliDebug(2, Form("List of files valid for run %d and version %d was not loaded. Looking directly into CDB for fileids valid for path %s!",
-                                       selectedId.GetFirstRun(), selectedId.GetVersion(), selectedId.GetPath().Data()));
-
-               TString filter;
-               MakeQueryFilter(selectedId.GetFirstRun(), selectedId.GetLastRun(), 0, filter);
-
-               TString pattern = ".root";
-               TString optionQuery = "-y -m";
-               if(selectedId.GetVersion() >= 0) {
-                       pattern.Prepend(Form("_v%d_s0",selectedId.GetVersion()));
-                       optionQuery = "";
-               }
-
-               TString folderCopy(Form("%s%s/Run",fDBFolder.Data(),selectedId.GetPath().Data()));
-
-               if (optionQuery.Contains("-y")){
-                       AliInfo("Only latest version will be returned");
-               }
-
-               AliDebug(2,Form("** fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
-               TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());
-               if (res) {
-                       AliCDBId validFileId;
-                       for(int i=0; i<res->GetEntries(); i++){
-                               TString filename = res->GetKey(i, "lfn");
-                               if(filename == "") continue;
-                               if(FilenameToId(filename, validFileId))
-                                               validFileIds.AddLast(validFileId.Clone());
-                       }
-                       delete res;
-               }else{
-                   return 0; // this should be only in case of file catalogue glitch
-               }
-
-               dataId = GetId(validFileIds, selectedId);
-       }
-
-       return dataId;
+  AliCDBId* dataId=0;
+
+  AliCDBId selectedId(queryId);
+  if (!selectedId.HasVersion()) {
+    // if version is not specified, first check the selection criteria list
+    GetSelection(&selectedId);
+  }
+
+  TObjArray validFileIds;
+  validFileIds.SetOwner(1);
+
+  // look for file matching query requests (path, runRange, version)
+  if(selectedId.GetFirstRun() == fRun && fPathFilter.Comprises(selectedId.GetAliCDBPath()) &&
+      fVersion == selectedId.GetVersion() && !fMetaDataFilter){
+    // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
+    AliDebug(2, Form("List of files valid for run %d was loaded. Looking there for fileids valid for path %s!",
+          selectedId.GetFirstRun(), selectedId.GetPath().Data()));
+    dataId = GetId(fValidFileIds, selectedId);
+
+  } else {
+    // List of files valid for reqested run was not loaded. Looking directly into CDB
+    AliDebug(2, Form("List of files valid for run %d and version %d was not loaded. Looking directly into CDB for fileids valid for path %s!",
+          selectedId.GetFirstRun(), selectedId.GetVersion(), selectedId.GetPath().Data()));
+
+    TString filter;
+    MakeQueryFilter(selectedId.GetFirstRun(), selectedId.GetLastRun(), 0, filter);
+
+    TString pattern = ".root";
+    TString optionQuery = "-y -m";
+    if(selectedId.GetVersion() >= 0) {
+      pattern.Prepend(Form("_v%d_s0",selectedId.GetVersion()));
+      optionQuery = "";
+    }
+
+    TString folderCopy(Form("%s%s/Run",fDBFolder.Data(),selectedId.GetPath().Data()));
+
+    if (optionQuery.Contains("-y")){
+      AliInfo("Only latest version will be returned");
+    }
+
+    AliDebug(2,Form("** fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
+    TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());
+    if (res) {
+      AliCDBId validFileId;
+      for(int i=0; i<res->GetEntries(); i++){
+        TString filename = res->GetKey(i, "lfn");
+        if(filename == "") continue;
+        if(FilenameToId(filename, validFileId))
+          validFileIds.AddLast(validFileId.Clone());
+      }
+      delete res;
+    }else{
+      return 0; // this should be only in case of file catalogue glitch
+    }
+
+    dataId = GetId(validFileIds, selectedId);
+  }
+
+  return dataId;
 }
 
 //_____________________________________________________________________________
 AliCDBEntry* AliCDBGrid::GetEntry(const AliCDBId& queryId) {
 // get AliCDBEntry from the database
 
-       AliCDBId* dataId = GetEntryId(queryId);
+  AliCDBId* dataId = GetEntryId(queryId);
 
-       if (!dataId){
-                AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
-                return NULL;
-        }
+  if (!dataId){
+    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
+    return NULL;
+  }
 
-       TString filename;
-       if (!IdToFilename(*dataId, filename)) {
-               AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
-               delete dataId;
-                AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
-               return NULL;
-       }
+  TString filename;
+  if (!IdToFilename(*dataId, filename)) {
+    AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
+    delete dataId;
+    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
+  }
 
-       AliCDBEntry* anEntry = GetEntryFromFile(filename, dataId);
+  AliCDBEntry* anEntry = GetEntryFromFile(filename, dataId);
 
-       delete dataId;
-       if(!anEntry){
-                Printf("follows an alifatal");
-                AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
-        }
+  delete dataId;
+  if(!anEntry)
+    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
 
-       return anEntry;
+  return anEntry;
 }
 
 //_____________________________________________________________________________
 AliCDBEntry* AliCDBGrid::GetEntryFromFile(TString& filename, AliCDBId* dataId){
 // Get AliCBEntry object from file "filename"
 
-       AliDebug(2,Form("Opening file: %s",filename.Data()));
+  AliDebug(2,Form("Opening file: %s",filename.Data()));
 
-       filename.Prepend("/alien");
+  filename.Prepend("/alien");
 
-       // if option="CACHEREAD" TFile will use the local caching facility!
-       TString option="READ";
-       if(fCacheFolder != ""){
+  // if option="CACHEREAD" TFile will use the local caching facility!
+  TString option="READ";
+  if(fCacheFolder != ""){
 
-               // Check if local cache folder was changed in the meanwhile
-               TString origCache(TFile::GetCacheFileDir());
-               if(fCacheFolder != origCache) {
-                       AliWarning(Form("Local cache folder has been overwritten!! fCacheFolder = %s origCache = %s",
-                                       fCacheFolder.Data(), origCache.Data()));
-                       TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected);
-                       TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval);
-               }
+    // Check if local cache folder was changed in the meanwhile
+    TString origCache(TFile::GetCacheFileDir());
+    if(fCacheFolder != origCache) {
+      AliWarning(Form("Local cache folder has been overwritten!! fCacheFolder = %s origCache = %s",
+            fCacheFolder.Data(), origCache.Data()));
+      TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected);
+      TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval);
+    }
 
-               option.Prepend("CACHE");
-        }
+    option.Prepend("CACHE");
+  }
 
-       AliDebug(2, Form("Option: %s", option.Data()));
+  AliDebug(2, Form("Option: %s", option.Data()));
 
-       TFile *file = TFile::Open(filename, option);
-       if (!file) {
-               AliDebug(2,Form("Can't open file <%s>!", filename.Data()));
-               return NULL;
-       }
+  TFile *file = TFile::Open(filename, option);
+  if (!file) {
+    AliDebug(2,Form("Can't open file <%s>!", filename.Data()));
+    return NULL;
+  }
 
-       // get the only AliCDBEntry object from the file
-       // the object in the file is an AliCDBEntry entry named "AliCDBEntry"
+  // get the only AliCDBEntry object from the file
+  // the object in the file is an AliCDBEntry entry named "AliCDBEntry"
 
-       AliCDBEntry* anEntry = dynamic_cast<AliCDBEntry*> (file->Get("AliCDBEntry"));
+  AliCDBEntry* anEntry = dynamic_cast<AliCDBEntry*> (file->Get("AliCDBEntry"));
 
-       if (!anEntry) {
-               AliDebug(2,Form("Bad storage data: file does not contain an AliCDBEntry object!"));
-               file->Close();
-               return NULL;
-       }
+  if (!anEntry) {
+    AliDebug(2,Form("Bad storage data: file does not contain an AliCDBEntry object!"));
+    file->Close();
+    return NULL;
+  }
 
-       // The object's Id is not reset during storage
-       // If object's Id runRange or version do not match with filename,
-       // it means that someone renamed file by hand. In this case a warning msg is issued.
+  // The object's Id is not reset during storage
+  // If object's Id runRange or version do not match with filename,
+  // it means that someone renamed file by hand. In this case a warning msg is issued.
 
-       if(anEntry){
-               AliCDBId entryId = anEntry->GetId();
-               Int_t tmpSubVersion = dataId->GetSubVersion();
-               dataId->SetSubVersion(entryId.GetSubVersion()); // otherwise filename and id may mismatch
-               if(!entryId.IsEqual(dataId)){
-                       AliWarning(Form("Mismatch between file name and object's Id!"));
-                       AliWarning(Form("File name: %s", dataId->ToString().Data()));
-                       AliWarning(Form("Object's Id: %s", entryId.ToString().Data()));
-               }
-               dataId->SetSubVersion(tmpSubVersion);
-       }
+  if(anEntry){
+    AliCDBId entryId = anEntry->GetId();
+    Int_t tmpSubVersion = dataId->GetSubVersion();
+    dataId->SetSubVersion(entryId.GetSubVersion()); // otherwise filename and id may mismatch
+    if(!entryId.IsEqual(dataId)){
+      AliWarning(Form("Mismatch between file name and object's Id!"));
+      AliWarning(Form("File name: %s", dataId->ToString().Data()));
+      AliWarning(Form("Object's Id: %s", entryId.ToString().Data()));
+    }
+    dataId->SetSubVersion(tmpSubVersion);
+  }
 
-       anEntry->SetLastStorage("grid");
+  anEntry->SetLastStorage("grid");
 
-       // Check whether entry contains a TTree. In case load the tree in memory!
-       LoadTreeFromFile(anEntry);
+  // Check whether entry contains a TTree. In case load the tree in memory!
+  LoadTreeFromFile(anEntry);
 
-       // close file, return retieved entry
-       file->Close(); delete file; file=0;
+  // close file, return retieved entry
+  file->Close(); delete file; file=0;
 
-       return anEntry;
+  return anEntry;
 }
 
 //_____________________________________________________________________________
 TList* AliCDBGrid::GetEntries(const AliCDBId& queryId) {
 // multiple request (AliCDBStorage::GetAll)
 
-       TList* result = new TList();
-       result->SetOwner();
-
-       TObjArray validFileIds;
-       validFileIds.SetOwner(1);
-
-       Bool_t alreadyLoaded = kFALSE;
-
-       // look for file matching query requests (path, runRange)
-       if(queryId.GetFirstRun() == fRun &&
-                       fPathFilter.Comprises(queryId.GetAliCDBPath()) && fVersion < 0 && !fMetaDataFilter){
-               // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
-               AliDebug(2,Form("List of files valid for run %d and for path %s was loaded. Looking there!",
-                                       queryId.GetFirstRun(), queryId.GetPath().Data()));
-
-               alreadyLoaded = kTRUE;
-
-       } else {
-               // List of files valid for reqested run was not loaded. Looking directly into CDB
-               AliDebug(2,Form("List of files valid for run %d and for path %s was not loaded. Looking directly into CDB!",
-                                       queryId.GetFirstRun(), queryId.GetPath().Data()));
-
-               TString filter;
-               MakeQueryFilter(queryId.GetFirstRun(), queryId.GetLastRun(), 0, filter);
-
-               TString path = queryId.GetPath();
-
-               TString pattern = "Run*.root";
-               TString optionQuery = "-y";
-
-               TString addFolder = "";
-               if (!path.Contains("*")){
-                   if (!path.BeginsWith("/")) addFolder += "/";
-                   addFolder += path;
-               }
-               else{
-                   if (path.BeginsWith("/")) path.Remove(0,1);
-                   if (path.EndsWith("/")) path.Remove(path.Length()-1,1);     
-                   TObjArray* tokenArr = path.Tokenize("/");
-                   if (tokenArr->GetEntries() != 3) {
-                       AliError("Not a 3 level path! Keeping old query...");
-                       pattern.Prepend(path+"/");
-                   }
-                   else{
-                       TString str0 = ((TObjString*)tokenArr->At(0))->String();
-                       TString str1 = ((TObjString*)tokenArr->At(1))->String();
-                       TString str2 = ((TObjString*)tokenArr->At(2))->String();
-                       if (str0 != "*" && str1 != "*" && str2 == "*"){
-                           // e.g. "ITS/Calib/*"
-                           addFolder = "/"+str0+"/"+str1;
-                       }
-                       else if (str0 != "*" && str1 == "*" && str2 == "*"){    
-                           // e.g. "ITS/*/*"
-                           addFolder = "/"+str0;
-                       }
-                       else if (str0 == "*" && str1 == "*" && str2 == "*"){    
-                           // e.g. "*/*/*"
-                           // do nothing: addFolder is already an empty string;
-                       }
-                       else{
-                           // e.g. "ITS/*/RecoParam"
-                           pattern.Prepend(path+"/");
-                       }
-                   }
-                   delete tokenArr; tokenArr=0;
-               }
-
-               TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));
-
-               AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
-
-               TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  
-
-               if (!res) {
-                   AliError("Grid query failed");
-                   return 0;
-               }
-
-               AliCDBId validFileId;
-               for(int i=0; i<res->GetEntries(); i++){
-                       TString filename = res->GetKey(i, "lfn");
-                       if(filename == "") continue;
-                       if(FilenameToId(filename, validFileId))
-                                       validFileIds.AddLast(validFileId.Clone());
-               }
-               delete res;
-       }
-
-       TIter *iter=0;
-       if(alreadyLoaded){
-               iter = new TIter(&fValidFileIds);
-       } else {
-               iter = new TIter(&validFileIds);
-       }
-
-       TObjArray selectedIds;
-       selectedIds.SetOwner(1);
-
-       // loop on list of valid Ids to select the right version to get.
-       // According to query and to the selection criteria list, version can be the highest or exact
-       AliCDBPath pathCopy;
-       AliCDBId* anIdPtr=0;
-       AliCDBId* dataId=0;
-       AliCDBPath queryPath = queryId.GetAliCDBPath();
-       while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
-               AliCDBPath thisCDBPath = anIdPtr->GetAliCDBPath();
-               if(!(queryPath.Comprises(thisCDBPath)) || pathCopy.GetPath() == thisCDBPath.GetPath()) continue;
-               pathCopy = thisCDBPath;
-
-               // check the selection criteria list for this query
-               AliCDBId thisId(*anIdPtr);
-               thisId.SetVersion(queryId.GetVersion());
-               if(!thisId.HasVersion()) GetSelection(&thisId);
-
-               if(alreadyLoaded){
-                       dataId = GetId(fValidFileIds, thisId);
-               } else {
-                       dataId = GetId(validFileIds, thisId);
-               }
-               if(dataId) selectedIds.Add(dataId);
-       }
-
-       delete iter; iter=0;
-
-       // selectedIds contains the Ids of the files matching all requests of query!
-       // All the objects are now ready to be retrieved
-       iter = new TIter(&selectedIds);
-       while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
-               TString filename;
-               if (!IdToFilename(*anIdPtr, filename)) {
-                       AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
-                       continue;
-               }
-
-               AliCDBEntry* anEntry = GetEntryFromFile(filename, anIdPtr);
-
-               if(anEntry) result->Add(anEntry);
-
-       }
-       delete iter; iter=0;
-
-       return result;
+  TList* result = new TList();
+  result->SetOwner();
+
+  TObjArray validFileIds;
+  validFileIds.SetOwner(1);
+
+  Bool_t alreadyLoaded = kFALSE;
+
+  // look for file matching query requests (path, runRange)
+  if(queryId.GetFirstRun() == fRun &&
+      fPathFilter.Comprises(queryId.GetAliCDBPath()) && fVersion < 0 && !fMetaDataFilter){
+    // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
+    AliDebug(2,Form("List of files valid for run %d and for path %s was loaded. Looking there!",
+          queryId.GetFirstRun(), queryId.GetPath().Data()));
+
+    alreadyLoaded = kTRUE;
+
+  } else {
+    // List of files valid for reqested run was not loaded. Looking directly into CDB
+    AliDebug(2,Form("List of files valid for run %d and for path %s was not loaded. Looking directly into CDB!",
+          queryId.GetFirstRun(), queryId.GetPath().Data()));
+
+    TString filter;
+    MakeQueryFilter(queryId.GetFirstRun(), queryId.GetLastRun(), 0, filter);
+
+    TString path = queryId.GetPath();
+
+    TString pattern = "Run*.root";
+    TString optionQuery = "-y";
+
+    TString addFolder = "";
+    if (!path.Contains("*")){
+      if (!path.BeginsWith("/")) addFolder += "/";
+      addFolder += path;
+    }
+    else{
+      if (path.BeginsWith("/")) path.Remove(0,1);
+      if (path.EndsWith("/")) path.Remove(path.Length()-1,1);  
+      TObjArray* tokenArr = path.Tokenize("/");
+      if (tokenArr->GetEntries() != 3) {
+        AliError("Not a 3 level path! Keeping old query...");
+        pattern.Prepend(path+"/");
+      }
+      else{
+        TString str0 = ((TObjString*)tokenArr->At(0))->String();
+        TString str1 = ((TObjString*)tokenArr->At(1))->String();
+        TString str2 = ((TObjString*)tokenArr->At(2))->String();
+        if (str0 != "*" && str1 != "*" && str2 == "*"){
+          // e.g. "ITS/Calib/*"
+          addFolder = "/"+str0+"/"+str1;
+        }
+        else if (str0 != "*" && str1 == "*" && str2 == "*"){   
+          // e.g. "ITS/*/*"
+          addFolder = "/"+str0;
+        }
+        else if (str0 == "*" && str1 == "*" && str2 == "*"){   
+          // e.g. "*/*/*"
+          // do nothing: addFolder is already an empty string;
+        }
+        else{
+          // e.g. "ITS/*/RecoParam"
+          pattern.Prepend(path+"/");
+        }
+      }
+      delete tokenArr; tokenArr=0;
+    }
+
+    TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));
+
+    AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
+
+    TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  
+
+    if (!res) {
+      AliError("Grid query failed");
+      return 0;
+    }
+
+    AliCDBId validFileId;
+    for(int i=0; i<res->GetEntries(); i++){
+      TString filename = res->GetKey(i, "lfn");
+      if(filename == "") continue;
+      if(FilenameToId(filename, validFileId))
+        validFileIds.AddLast(validFileId.Clone());
+    }
+    delete res;
+  }
+
+  TIter *iter=0;
+  if(alreadyLoaded){
+    iter = new TIter(&fValidFileIds);
+  } else {
+    iter = new TIter(&validFileIds);
+  }
+
+  TObjArray selectedIds;
+  selectedIds.SetOwner(1);
+
+  // loop on list of valid Ids to select the right version to get.
+  // According to query and to the selection criteria list, version can be the highest or exact
+  AliCDBPath pathCopy;
+  AliCDBId* anIdPtr=0;
+  AliCDBId* dataId=0;
+  AliCDBPath queryPath = queryId.GetAliCDBPath();
+  while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
+    AliCDBPath thisCDBPath = anIdPtr->GetAliCDBPath();
+    if(!(queryPath.Comprises(thisCDBPath)) || pathCopy.GetPath() == thisCDBPath.GetPath()) continue;
+    pathCopy = thisCDBPath;
+
+    // check the selection criteria list for this query
+    AliCDBId thisId(*anIdPtr);
+    thisId.SetVersion(queryId.GetVersion());
+    if(!thisId.HasVersion()) GetSelection(&thisId);
+
+    if(alreadyLoaded){
+      dataId = GetId(fValidFileIds, thisId);
+    } else {
+      dataId = GetId(validFileIds, thisId);
+    }
+    if(dataId) selectedIds.Add(dataId);
+  }
+
+  delete iter; iter=0;
+
+  // selectedIds contains the Ids of the files matching all requests of query!
+  // All the objects are now ready to be retrieved
+  iter = new TIter(&selectedIds);
+  while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
+    TString filename;
+    if (!IdToFilename(*anIdPtr, filename)) {
+      AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
+      continue;
+    }
+
+    AliCDBEntry* anEntry = GetEntryFromFile(filename, anIdPtr);
+
+    if(anEntry) result->Add(anEntry);
+
+  }
+  delete iter; iter=0;
+
+  return result;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBGrid::PutEntry(AliCDBEntry* entry, const char* mirrors) {
-       // put an AliCDBEntry object into the database
-
-       AliCDBId& id = entry->GetId();
-
-       // set version for the entry to be stored
-       if (!PrepareId(id)) return kFALSE;
-
-       // build filename from entry's id
-       TString filename;
-       if (!IdToFilename(id, filename)) {
-               AliError("Bad ID encountered! Subnormal error!");
-               return kFALSE;
-       }
-
-       TString folderToTag = Form("%s%s",
-                       fDBFolder.Data(),
-                       id.GetPath().Data());
-
-       TDirectory* saveDir = gDirectory;
-
-       TString fullFilename = Form("/alien%s", filename.Data());
-       TString seMirrors(mirrors);
-       if(seMirrors.IsNull() || seMirrors.IsWhitespace()) seMirrors=GetMirrorSEs();
-       // specify SE to filename
-       // if a list of SEs was passed to this method or set via SetMirrorSEs, set the first as SE for opening the file.
-       // The other SEs will be used in cascade in case of failure in opening the file.
-       // The remaining SEs will be used to create replicas.
-       TObjArray *arraySEs = seMirrors.Tokenize(',');
-       Int_t nSEs = arraySEs->GetEntries();
-       Int_t remainingSEs = 1;
-       if(nSEs == 0){
-               if (fSE != "default") fullFilename += Form("?se=%s",fSE.Data());
-       }else{
-               remainingSEs = nSEs;
-       }
-
-       // open file
-       TFile *file=0;
-       AliDebug(2, Form("fNretry = %d, fInitRetrySeconds = %d",fNretry,fInitRetrySeconds));
-       TString targetSE("");
-
-       Bool_t result = kFALSE;
-       Bool_t reOpenResult = kFALSE;
-       Int_t reOpenAttempts=0;
-       while( !reOpenResult && reOpenAttempts<2){ //loop to check the file after closing it, to catch the unlikely but possible case when the file
-               // is cleaned up by alien just before closing as a consequence of a network disconnection while writing
-
-               while( !file && remainingSEs>0){
-                       if(nSEs!=0){
-                               TObjString *target = (TObjString*) arraySEs->At(nSEs-remainingSEs);
-                               targetSE=target->String();
-                               if ( !(targetSE.BeginsWith("ALICE::") && targetSE.CountChar(':')==4) ) {
-                                       AliError(Form("\"%s\" is an invalid storage element identifier.",targetSE.Data()));
-                                       continue;
-                               }
-                               if(fullFilename.Contains('?')) fullFilename.Remove(fullFilename.Last('?'));
-                               fullFilename += Form("?se=%s",targetSE.Data());
-                       }
-                       Int_t remainingAttempts=fNretry;
-                       Int_t nsleep = fInitRetrySeconds; // number of seconds between attempts. We let it increase exponentially
-                       AliDebug(2, Form("Uploading file into SE #%d: %s",nSEs-remainingSEs+1,targetSE.Data()));
-                       while(remainingAttempts > 0) {
-                               AliDebug(2, Form("Uploading file into OCDB at %s - Attempt #%d",targetSE.Data(),fNretry-remainingAttempts+1));
-                               remainingAttempts--;
-                               file = TFile::Open(fullFilename,"CREATE");
-                               if(!file || !file->IsWritable()){
-                                       if(file) file->Close(); delete file; file=0; // file is not writable
-                                       TString message(TString::Format("Attempt %d failed.",fNretry-remainingAttempts));
-                                       if(remainingAttempts>0) {
-                                               message += " Sleeping for "; message += nsleep; message += " seconds";
-                                       }else{
-                                               if(remainingSEs>0) message += " Trying to upload at next SE";
-                                       }
-                                       AliDebug(2, message.Data());
-                                       if(remainingAttempts>0) sleep(nsleep);
-                               }else{
-                                       remainingAttempts=0;
-                               }
-                               nsleep*=fInitRetrySeconds;
-                       }
-                       remainingSEs--;
-               }
-               if(!file){
-                       AliError(Form("All %d attempts have failed on all %d SEs. Returning...",fNretry,nSEs));
-                       return kFALSE;
-               }
-
-               file->cd();
-
-               //SetTreeToFile(entry, file);
-               entry->SetVersion(id.GetVersion());
-
-               // write object (key name: "AliCDBEntry")
-               result = (file->WriteTObject(entry, "AliCDBEntry") != 0);
-               if (!result) AliError(Form("Can't write entry to file <%s>!", filename.Data()));
-               file->Close();
-
-               if(result)
-               {
-                       AliDebug(2, Form("Reopening file %s for checking its correctness",fullFilename.Data()));
-                       TFile* ffile = TFile::Open(fullFilename.Data(),"READ");
-                       if(!ffile){
-                               reOpenResult = kFALSE;
-                               AliInfo(Form("The file %s was closed successfully but cannot be reopened. Trying now to regenerate it (regeneration attempt number %d)",
-                                                       fullFilename.Data(),++reOpenAttempts));
-                               delete file; file=0;
-                               AliDebug(2, Form("Removing file %s", filename.Data()));
-                               if(!gGrid->Rm(filename.Data()))
-                                       AliError("Can't delete file!");
-                               remainingSEs++;
-                       }else{
-                               reOpenResult = kTRUE;
-                               ffile->Close();
-                       }
-                       delete ffile; ffile=0;
-               }
-       }
-
-       if (saveDir) saveDir->cd(); else gROOT->cd();
-       delete file; file=0;
-
-       if(result && reOpenResult) {
-
-               if(!TagFileId(filename, &id)){
-                       AliInfo(Form("CDB tagging failed. Deleting file %s!",filename.Data()));
-                       if(!gGrid->Rm(filename.Data()))
-                               AliError("Can't delete file!");
-                       return kFALSE;
-               }
-
-               TagFileMetaData(filename, entry->GetMetaData());
-       }else{
-               AliError("The file could not be opend or the object could not be written");
-               if(!gGrid->Rm(filename.Data()))
-                       AliError("Can't delete file!");
-               return kFALSE;
-       }
-
-       AliInfo(Form("CDB object stored into file %s", filename.Data()));
-       if(nSEs==0)
-               AliInfo(Form("Storage Element: %s", fSE.Data()));
-       else
-               AliInfo(Form("Storage Element: %s", targetSE.Data()));
-
-       //In case of other SEs specified by the user, mirror the file to the remaining SEs
-       for(Int_t i=0; i<nSEs; i++){
-               if(i==nSEs-remainingSEs-1) continue; // skip mirroring to the SE where the file was saved
-               TString mirrorCmd("mirror ");
-               mirrorCmd += filename;
-               mirrorCmd += " ";
-               TObjString *target = (TObjString*) arraySEs->At(i);
-               TString mirrorSE(target->String());
-               mirrorCmd += mirrorSE;
-               AliDebug(5,Form("mirror command: \"%s\"",mirrorCmd.Data()));
-               AliInfo(Form("Mirroring to storage element: %s", mirrorSE.Data()));
-               gGrid->Command(mirrorCmd.Data());
-       }
-       arraySEs->Delete(); arraySEs=0;
-
-       return kTRUE;
+// put an AliCDBEntry object into the database
+
+  AliCDBId& id = entry->GetId();
+
+  // set version for the entry to be stored
+  if (!PrepareId(id)) return kFALSE;
+
+  // build filename from entry's id
+  TString filename;
+  if (!IdToFilename(id, filename)) {
+    AliError("Bad ID encountered! Subnormal error!");
+    return kFALSE;
+  }
+
+  TString folderToTag = Form("%s%s",
+      fDBFolder.Data(),
+      id.GetPath().Data());
+
+  TDirectory* saveDir = gDirectory;
+
+  TString fullFilename = Form("/alien%s", filename.Data());
+  TString seMirrors(mirrors);
+  if(seMirrors.IsNull() || seMirrors.IsWhitespace()) seMirrors=GetMirrorSEs();
+  // specify SE to filename
+  // if a list of SEs was passed to this method or set via SetMirrorSEs, set the first as SE for opening the file.
+  // The other SEs will be used in cascade in case of failure in opening the file.
+  // The remaining SEs will be used to create replicas.
+  TObjArray *arraySEs = seMirrors.Tokenize(',');
+  Int_t nSEs = arraySEs->GetEntries();
+  Int_t remainingSEs = 1;
+  if(nSEs == 0){
+    if (fSE != "default") fullFilename += Form("?se=%s",fSE.Data());
+  }else{
+    remainingSEs = nSEs;
+  }
+
+  // open file
+  TFile *file=0;
+  AliDebug(2, Form("fNretry = %d, fInitRetrySeconds = %d",fNretry,fInitRetrySeconds));
+  TString targetSE("");
+
+  Bool_t result = kFALSE;
+  Bool_t reOpenResult = kFALSE;
+  Int_t reOpenAttempts=0;
+  while( !reOpenResult && reOpenAttempts<2){ //loop to check the file after closing it, to catch the unlikely but possible case when the file
+    // is cleaned up by alien just before closing as a consequence of a network disconnection while writing
+
+    while( !file && remainingSEs>0){
+      if(nSEs!=0){
+        TObjString *target = (TObjString*) arraySEs->At(nSEs-remainingSEs);
+        targetSE=target->String();
+        if ( !(targetSE.BeginsWith("ALICE::") && targetSE.CountChar(':')==4) ) {
+          AliError(Form("\"%s\" is an invalid storage element identifier.",targetSE.Data()));
+          continue;
+        }
+        if(fullFilename.Contains('?')) fullFilename.Remove(fullFilename.Last('?'));
+        fullFilename += Form("?se=%s",targetSE.Data());
+      }
+      Int_t remainingAttempts=fNretry;
+      Int_t nsleep = fInitRetrySeconds; // number of seconds between attempts. We let it increase exponentially
+      AliDebug(2, Form("Uploading file into SE #%d: %s",nSEs-remainingSEs+1,targetSE.Data()));
+      while(remainingAttempts > 0) {
+        AliDebug(2, Form("Uploading file into OCDB at %s - Attempt #%d",targetSE.Data(),fNretry-remainingAttempts+1));
+        remainingAttempts--;
+        file = TFile::Open(fullFilename,"CREATE");
+        if(!file || !file->IsWritable()){
+          if(file) file->Close(); delete file; file=0; // file is not writable
+          TString message(TString::Format("Attempt %d failed.",fNretry-remainingAttempts));
+          if(remainingAttempts>0) {
+            message += " Sleeping for "; message += nsleep; message += " seconds";
+          }else{
+            if(remainingSEs>0) message += " Trying to upload at next SE";
+          }
+          AliDebug(2, message.Data());
+          if(remainingAttempts>0) sleep(nsleep);
+        }else{
+          remainingAttempts=0;
+        }
+        nsleep*=fInitRetrySeconds;
+      }
+      remainingSEs--;
+    }
+    if(!file){
+      AliError(Form("All %d attempts have failed on all %d SEs. Returning...",fNretry,nSEs));
+      return kFALSE;
+    }
+
+    file->cd();
+
+    //SetTreeToFile(entry, file);
+    entry->SetVersion(id.GetVersion());
+
+    // write object (key name: "AliCDBEntry")
+    result = (file->WriteTObject(entry, "AliCDBEntry") != 0);
+    if (!result) AliError(Form("Can't write entry to file <%s>!", filename.Data()));
+    file->Close();
+
+    if(result)
+    {
+      AliDebug(2, Form("Reopening file %s for checking its correctness",fullFilename.Data()));
+      TFile* ffile = TFile::Open(fullFilename.Data(),"READ");
+      if(!ffile){
+        reOpenResult = kFALSE;
+        AliInfo(Form("The file %s was closed successfully but cannot be reopened. Trying now to regenerate it (regeneration attempt number %d)",
+              fullFilename.Data(),++reOpenAttempts));
+        delete file; file=0;
+        AliDebug(2, Form("Removing file %s", filename.Data()));
+        if(!gGrid->Rm(filename.Data()))
+          AliError("Can't delete file!");
+        remainingSEs++;
+      }else{
+        reOpenResult = kTRUE;
+        ffile->Close();
+      }
+      delete ffile; ffile=0;
+    }
+  }
+
+  if (saveDir) saveDir->cd(); else gROOT->cd();
+  delete file; file=0;
+
+  if(result && reOpenResult) {
+
+    if(!TagFileId(filename, &id)){
+      AliInfo(Form("CDB tagging failed. Deleting file %s!",filename.Data()));
+      if(!gGrid->Rm(filename.Data()))
+        AliError("Can't delete file!");
+      return kFALSE;
+    }
+
+    TagFileMetaData(filename, entry->GetMetaData());
+  }else{
+    AliError("The file could not be opend or the object could not be written");
+    if(!gGrid->Rm(filename.Data()))
+      AliError("Can't delete file!");
+    return kFALSE;
+  }
+
+  AliInfo(Form("CDB object stored into file %s", filename.Data()));
+  if(nSEs==0)
+    AliInfo(Form("Storage Element: %s", fSE.Data()));
+  else
+    AliInfo(Form("Storage Element: %s", targetSE.Data()));
+
+  //In case of other SEs specified by the user, mirror the file to the remaining SEs
+  for(Int_t i=0; i<nSEs; i++){
+    if(i==nSEs-remainingSEs-1) continue; // skip mirroring to the SE where the file was saved
+    TString mirrorCmd("mirror ");
+    mirrorCmd += filename;
+    mirrorCmd += " ";
+    TObjString *target = (TObjString*) arraySEs->At(i);
+    TString mirrorSE(target->String());
+    mirrorCmd += mirrorSE;
+    AliDebug(5,Form("mirror command: \"%s\"",mirrorCmd.Data()));
+    AliInfo(Form("Mirroring to storage element: %s", mirrorSE.Data()));
+    gGrid->Command(mirrorCmd.Data());
+  }
+  arraySEs->Delete(); arraySEs=0;
+
+  return kTRUE;
 }
 
 //_____________________________________________________________________________
 Bool_t AliCDBGrid::AddTag(TString& folderToTag, const char* tagname){
 // add "tagname" tag (CDB or CDB_MD) to folder where object will be stored
 
-       Bool_t result = kTRUE;
-       AliDebug(2, Form("adding %s tag to folder %s", tagname, folderToTag.Data()));
-       TString addTag = Form("addTag %s %s", folderToTag.Data(), tagname);
-       TGridResult *gridres = gGrid->Command(addTag.Data());
-       const char* resCode = gridres->GetKey(0,"__result__"); // '1' if success
-       if(resCode[0] != '1') {
-               AliError(Form("Couldn't add %s tags to folder %s !",
-                                               tagname, folderToTag.Data()));
-               result = kFALSE;
-       }
-       delete gridres;
-       return result;
+  Bool_t result = kTRUE;
+  AliDebug(2, Form("adding %s tag to folder %s", tagname, folderToTag.Data()));
+  TString addTag = Form("addTag %s %s", folderToTag.Data(), tagname);
+  TGridResult *gridres = gGrid->Command(addTag.Data());
+  const char* resCode = gridres->GetKey(0,"__result__"); // '1' if success
+  if(resCode[0] != '1') {
+    AliError(Form("Couldn't add %s tags to folder %s !",
+          tagname, folderToTag.Data()));
+    result = kFALSE;
+  }
+  delete gridres;
+  return result;
 }
 
 //_____________________________________________________________________________
@@ -908,40 +904,40 @@ Bool_t AliCDBGrid::TagFileId(TString& filename, const AliCDBId* id){
 // tag stored object in CDB table using object Id's parameters
 
 
-        TString dirname(filename);
-       Int_t dirNumber = gGrid->Mkdir(dirname.Remove(dirname.Last('/')),"-d");
-       
-       TString addTagValue1 = Form("addTagValue %s CDB ", filename.Data());
-       TString addTagValue2 = Form("first_run=%d last_run=%d version=%d ",
-                                       id->GetFirstRun(),
-                                       id->GetLastRun(),
-                                       id->GetVersion());
-       TString addTagValue3 = Form("path_level_0=\"%s\" path_level_1=\"%s\" path_level_2=\"%s\" ",
-                                       id->GetPathLevel(0).Data(),
-                                       id->GetPathLevel(1).Data(),
-                                       id->GetPathLevel(2).Data());
-       //TString addTagValue4 = Form("version_path=\"%s\" dir_number=%d",Form("%d_%s",id->GetVersion(),filename.Data()),dirNumber); 
-       TString addTagValue4 = Form("version_path=\"%09d%s\" dir_number=%d",id->GetVersion(),filename.Data(),dirNumber); 
-       TString addTagValue = Form("%s%s%s%s",
-                                       addTagValue1.Data(),
-                                       addTagValue2.Data(),
-                                       addTagValue3.Data(),
-                                       addTagValue4.Data());
-
-       Bool_t result = kFALSE;
-       AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
-       TGridResult* res = gGrid->Command(addTagValue.Data());
-       const char* resCode = res->GetKey(0,"__result__"); // '1' if success
-       if(resCode[0] != '1') {
-               AliError(Form("Couldn't add CDB tag value to file %s !",
-                                               filename.Data()));
-               result = kFALSE;
-       } else {
-               AliDebug(2, "Object successfully tagged.");
-               result = kTRUE;
-       }
-       delete res;
-       return result;
+  TString dirname(filename);
+  Int_t dirNumber = gGrid->Mkdir(dirname.Remove(dirname.Last('/')),"-d");
+
+  TString addTagValue1 = Form("addTagValue %s CDB ", filename.Data());
+  TString addTagValue2 = Form("first_run=%d last_run=%d version=%d ",
+      id->GetFirstRun(),
+      id->GetLastRun(),
+      id->GetVersion());
+  TString addTagValue3 = Form("path_level_0=\"%s\" path_level_1=\"%s\" path_level_2=\"%s\" ",
+      id->GetPathLevel(0).Data(),
+      id->GetPathLevel(1).Data(),
+      id->GetPathLevel(2).Data());
+  //TString addTagValue4 = Form("version_path=\"%s\" dir_number=%d",Form("%d_%s",id->GetVersion(),filename.Data()),dirNumber); 
+  TString addTagValue4 = Form("version_path=\"%09d%s\" dir_number=%d",id->GetVersion(),filename.Data(),dirNumber); 
+  TString addTagValue = Form("%s%s%s%s",
+      addTagValue1.Data(),
+      addTagValue2.Data(),
+      addTagValue3.Data(),
+      addTagValue4.Data());
+
+  Bool_t result = kFALSE;
+  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
+  TGridResult* res = gGrid->Command(addTagValue.Data());
+  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
+  if(resCode[0] != '1') {
+    AliError(Form("Couldn't add CDB tag value to file %s !",
+          filename.Data()));
+    result = kFALSE;
+  } else {
+    AliDebug(2, "Object successfully tagged.");
+    result = kTRUE;
+  }
+  delete res;
+  return result;
 
 }
 
@@ -949,21 +945,21 @@ Bool_t AliCDBGrid::TagFileId(TString& filename, const AliCDBId* id){
 Bool_t AliCDBGrid::TagShortLived(TString& filename, Bool_t value){
 // tag folder with ShortLived tag
 
-       TString addTagValue = Form("addTagValue %s ShortLived_try value=%d", filename.Data(), value);
-
-       Bool_t result = kFALSE;
-       AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
-       TGridResult* res = gGrid->Command(addTagValue.Data());
-       const char* resCode = res->GetKey(0,"__result__"); // '1' if success
-       if(resCode[0] != '1') {
-               AliError(Form("Couldn't add ShortLived tag value to file %s !", filename.Data()));
-               result = kFALSE;
-       } else {
-               AliDebug(2,"Object successfully tagged.");
-               result = kTRUE;
-       }
-       delete res;
-       return result;
+  TString addTagValue = Form("addTagValue %s ShortLived_try value=%d", filename.Data(), value);
+
+  Bool_t result = kFALSE;
+  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
+  TGridResult* res = gGrid->Command(addTagValue.Data());
+  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
+  if(resCode[0] != '1') {
+    AliError(Form("Couldn't add ShortLived tag value to file %s !", filename.Data()));
+    result = kFALSE;
+  } else {
+    AliDebug(2,"Object successfully tagged.");
+    result = kTRUE;
+  }
+  delete res;
+  return result;
 
 }
 
@@ -971,64 +967,64 @@ Bool_t AliCDBGrid::TagShortLived(TString& filename, Bool_t value){
 Bool_t AliCDBGrid::TagFileMetaData(TString& filename, const AliCDBMetaData* md){
 // tag stored object in CDB table using object Id's parameters
 
-       TString addTagValue1 = Form("addTagValue %s CDB_MD ", filename.Data());
-       TString addTagValue2 = Form("object_classname=\"%s\" responsible=\"%s\" beam_period=%d ",
-                                       md->GetObjectClassName(),
-                                       md->GetResponsible(),
-                                       md->GetBeamPeriod());
-       TString addTagValue3 = Form("aliroot_version=\"%s\" comment=\"%s\"",
-                                       md->GetAliRootVersion(),
-                                       md->GetComment());
-       TString addTagValue = Form("%s%s%s",
-                                       addTagValue1.Data(),
-                                       addTagValue2.Data(),
-                                       addTagValue3.Data());
-
-       Bool_t result = kFALSE;
-       AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
-       TGridResult* res = gGrid->Command(addTagValue.Data());
-       const char* resCode = res->GetKey(0,"__result__"); // '1' if success
-       if(resCode[0] != '1') {
-               AliWarning(Form("Couldn't add CDB_MD tag value to file %s !",
-                                               filename.Data()));
-               result = kFALSE;
-       } else {
-               AliDebug(2,"Object successfully tagged.");
-               result = kTRUE;
-       }
-       return result;
+  TString addTagValue1 = Form("addTagValue %s CDB_MD ", filename.Data());
+  TString addTagValue2 = Form("object_classname=\"%s\" responsible=\"%s\" beam_period=%d ",
+      md->GetObjectClassName(),
+      md->GetResponsible(),
+      md->GetBeamPeriod());
+  TString addTagValue3 = Form("aliroot_version=\"%s\" comment=\"%s\"",
+      md->GetAliRootVersion(),
+      md->GetComment());
+  TString addTagValue = Form("%s%s%s",
+      addTagValue1.Data(),
+      addTagValue2.Data(),
+      addTagValue3.Data());
+
+  Bool_t result = kFALSE;
+  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
+  TGridResult* res = gGrid->Command(addTagValue.Data());
+  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
+  if(resCode[0] != '1') {
+    AliWarning(Form("Couldn't add CDB_MD tag value to file %s !",
+          filename.Data()));
+    result = kFALSE;
+  } else {
+    AliDebug(2,"Object successfully tagged.");
+    result = kTRUE;
+  }
+  return result;
 }
 
 //_____________________________________________________________________________
 TList* AliCDBGrid::GetIdListFromFile(const char* fileName){
 
-       TString turl(fileName);
-       turl.Prepend("/alien" + fDBFolder);
-       turl += "?se="; turl += fSE.Data();
-       TFile *file = TFile::Open(turl);
-       if (!file) {
-               AliError(Form("Can't open selection file <%s>!", turl.Data()));
-               return NULL;
-       }
-
-       TList *list = new TList();
-       list->SetOwner();
-       int i=0;
-       TString keycycle;
-
-       AliCDBId *id;
-       while(1){
-               i++;
-               keycycle = "AliCDBId;";
-               keycycle+=i;
-               
-               id = (AliCDBId*) file->Get(keycycle);
-               if(!id) break;
-               list->AddFirst(id);
-       }
-       file->Close(); delete file; file=0;
-       
-       return list;
+  TString turl(fileName);
+  turl.Prepend("/alien" + fDBFolder);
+  turl += "?se="; turl += fSE.Data();
+  TFile *file = TFile::Open(turl);
+  if (!file) {
+    AliError(Form("Can't open selection file <%s>!", turl.Data()));
+    return NULL;
+  }
+
+  TList *list = new TList();
+  list->SetOwner();
+  int i=0;
+  TString keycycle;
+
+  AliCDBId *id;
+  while(1){
+    i++;
+    keycycle = "AliCDBId;";
+    keycycle+=i;
+
+    id = (AliCDBId*) file->Get(keycycle);
+    if(!id) break;
+    list->AddFirst(id);
+  }
+  file->Close(); delete file; file=0;
+
+  return list;
 
 
 }
@@ -1037,148 +1033,150 @@ TList* AliCDBGrid::GetIdListFromFile(const char* fileName){
 Bool_t AliCDBGrid::Contains(const char* path) const{
 // check for path in storage's DBFolder
 
-       TString initDir(gGrid->Pwd(0));
-       TString dirName(fDBFolder);
-       dirName += path; // dirName = fDBFolder/path
-       Bool_t result=kFALSE;
-       if (gGrid->Cd(dirName,0)) result=kTRUE;
-       gGrid->Cd(initDir.Data(),0);
-       return result;
+  TString initDir(gGrid->Pwd(0));
+  TString dirName(fDBFolder);
+  dirName += path; // dirName = fDBFolder/path
+  Bool_t result=kFALSE;
+  if (gGrid->Cd(dirName,0)) result=kTRUE;
+  gGrid->Cd(initDir.Data(),0);
+  return result;
 }
 
 //_____________________________________________________________________________
 void AliCDBGrid::QueryValidFiles()
 {
-// Query the CDB for files valid for AliCDBStorage::fRun
-// fills list fValidFileIds with AliCDBId objects created from file name
-
-       TString filter;
-       MakeQueryFilter(fRun, fRun, fMetaDataFilter, filter);
-
-       TString path = fPathFilter.GetPath();
-
-       TString pattern = "Run*";
-       TString optionQuery = "-y";
-       if(fVersion >= 0) {
-               pattern += Form("_v%d_s0", fVersion);
-               optionQuery = "";
-       }
-       pattern += ".root";
-       AliDebug(2,Form("pattern: %s", pattern.Data()));
-
-       TString addFolder = "";
-       if (!path.Contains("*")){
-               if (!path.BeginsWith("/")) addFolder += "/";
-               addFolder += path;
-       }
-       else{
-               if (path.BeginsWith("/")) path.Remove(0,1);
-               if (path.EndsWith("/")) path.Remove(path.Length()-1,1); 
-               TObjArray* tokenArr = path.Tokenize("/");
-               if (tokenArr->GetEntries() != 3) {
-                       AliError("Not a 3 level path! Keeping old query...");
-                       pattern.Prepend(path+"/");
-               }
-               else{
-                       TString str0 = ((TObjString*)tokenArr->At(0))->String();
-                       TString str1 = ((TObjString*)tokenArr->At(1))->String();
-                       TString str2 = ((TObjString*)tokenArr->At(2))->String();
-                       if (str0 != "*" && str1 != "*" && str2 == "*"){
-                               // e.g. "ITS/Calib/*"
-                               addFolder = "/"+str0+"/"+str1;
-                       }
-                       else if (str0 != "*" && str1 == "*" && str2 == "*"){    
-                               // e.g. "ITS/*/*"
-                               addFolder = "/"+str0;
-                       }
-                       else if (str0 == "*" && str1 == "*" && str2 == "*"){    
-                               // e.g. "*/*/*"
-                               // do nothing: addFolder is already an empty string;
-                       }
-                       else{
-                               // e.g. "ITS/*/RecoParam"
-                               pattern.Prepend(path+"/");
-                       }
-               }
-               delete tokenArr; tokenArr=0;
-       }
-
-       TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));
-
-       AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
-
-       if (optionQuery == "-y"){
-               AliInfo("Only latest version will be returned");
-       } 
-
-       TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  
-
-       if (!res) {
-               AliError("Grid query failed");
-               return;
-       }
-
-       TIter next(res);
-       TMap *map;
-       while ((map = (TMap*)next())) {
-         TObjString *entry;
-         if ((entry = (TObjString *) ((TMap *)map)->GetValue("lfn"))) {
-           TString& filename = entry->String();
-           if(filename.IsNull()) continue;
-           AliDebug(2,Form("Found valid file: %s", filename.Data()));
-           AliCDBId *validFileId = new AliCDBId;
-           Bool_t result = FilenameToId(filename, *validFileId);
-           if(result) {
-             fValidFileIds.AddLast(validFileId);
-           }
-           else {
-             delete validFileId;
-           }
-         }
-       }
-       delete res;
+  // Query the CDB for files valid for AliCDBStorage::fRun
+  // Fills list fValidFileIds with AliCDBId objects extracted from CDB files
+  // selected from AliEn metadata.
+  // If fVersion was not set, fValidFileIds is filled with highest versions. 
+
+  TString filter;
+  MakeQueryFilter(fRun, fRun, fMetaDataFilter, filter);
+
+  TString path = fPathFilter.GetPath();
+
+  TString pattern = "Run*";
+  TString optionQuery = "-y";
+  if(fVersion >= 0) {
+    pattern += Form("_v%d_s0", fVersion);
+    optionQuery = "";
+  }
+  pattern += ".root";
+  AliDebug(2,Form("pattern: %s", pattern.Data()));
+
+  TString addFolder = "";
+  if (!path.Contains("*")){
+    if (!path.BeginsWith("/")) addFolder += "/";
+    addFolder += path;
+  }
+  else{
+    if (path.BeginsWith("/")) path.Remove(0,1);
+    if (path.EndsWith("/")) path.Remove(path.Length()-1,1);    
+    TObjArray* tokenArr = path.Tokenize("/");
+    if (tokenArr->GetEntries() != 3) {
+      AliError("Not a 3 level path! Keeping old query...");
+      pattern.Prepend(path+"/");
+    }
+    else{
+      TString str0 = ((TObjString*)tokenArr->At(0))->String();
+      TString str1 = ((TObjString*)tokenArr->At(1))->String();
+      TString str2 = ((TObjString*)tokenArr->At(2))->String();
+      if (str0 != "*" && str1 != "*" && str2 == "*"){
+        // e.g. "ITS/Calib/*"
+        addFolder = "/"+str0+"/"+str1;
+      }
+      else if (str0 != "*" && str1 == "*" && str2 == "*"){     
+        // e.g. "ITS/*/*"
+        addFolder = "/"+str0;
+      }
+      else if (str0 == "*" && str1 == "*" && str2 == "*"){     
+        // e.g. "*/*/*"
+        // do nothing: addFolder is already an empty string;
+      }
+      else{
+        // e.g. "ITS/*/RecoParam"
+        pattern.Prepend(path+"/");
+      }
+    }
+    delete tokenArr; tokenArr=0;
+  }
+
+  TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));
+
+  AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
+
+  if (optionQuery == "-y"){
+    AliInfo("Only latest version will be returned");
+  } 
+
+  TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  
+
+  if (!res) {
+    AliError("Grid query failed");
+    return;
+  }
+
+  TIter next(res);
+  TMap *map;
+  while ((map = (TMap*)next())) {
+    TObjString *entry;
+    if ((entry = (TObjString *) ((TMap *)map)->GetValue("lfn"))) {
+      TString& filename = entry->String();
+      if(filename.IsNull()) continue;
+      AliDebug(2,Form("Found valid file: %s", filename.Data()));
+      AliCDBId *validFileId = new AliCDBId;
+      Bool_t result = FilenameToId(filename, *validFileId);
+      if(result) {
+        fValidFileIds.AddLast(validFileId);
+      }
+      else {
+        delete validFileId;
+      }
+    }
+  }
+  delete res;
 
 }
 
 //_____________________________________________________________________________
 void AliCDBGrid::MakeQueryFilter(Int_t firstRun, Int_t lastRun,
-                                       const AliCDBMetaData* md, TString& result) const
+    const AliCDBMetaData* md, TString& result) const
 {
-// create filter for file query
-
-       result = Form("CDB:first_run<=%d and CDB:last_run>=%d", firstRun, lastRun);
-
-//     if(version >= 0) {
-//             result += Form(" and CDB:version=%d", version);
-//     }
-//     if(pathFilter.GetLevel0() != "*") {
-//             result += Form(" and CDB:path_level_0=\"%s\"", pathFilter.GetLevel0().Data());
-//     }
-//     if(pathFilter.GetLevel1() != "*") {
-//             result += Form(" and CDB:path_level_1=\"%s\"", pathFilter.GetLevel1().Data());
-//     }
-//     if(pathFilter.GetLevel2() != "*") {
-//             result += Form(" and CDB:path_level_2=\"%s\"", pathFilter.GetLevel2().Data());
-//     }
-
-       if(md){
-               if(md->GetObjectClassName()[0] != '\0') {
-                       result += Form(" and CDB_MD:object_classname=\"%s\"", md->GetObjectClassName());
-               }
-               if(md->GetResponsible()[0] != '\0') {
-                       result += Form(" and CDB_MD:responsible=\"%s\"", md->GetResponsible());
-               }
-               if(md->GetBeamPeriod() != 0) {
-                       result += Form(" and CDB_MD:beam_period=%d", md->GetBeamPeriod());
-               }
-               if(md->GetAliRootVersion()[0] != '\0') {
-                       result += Form(" and CDB_MD:aliroot_version=\"%s\"", md->GetAliRootVersion());
-               }
-               if(md->GetComment()[0] != '\0') {
-                       result += Form(" and CDB_MD:comment=\"%s\"", md->GetComment());
-               }
-       }
-       AliDebug(2, Form("filter: %s",result.Data()));
+  // create filter for file query
+
+  result = Form("CDB:first_run<=%d and CDB:last_run>=%d", firstRun, lastRun);
+
+  //   if(version >= 0) {
+  //           result += Form(" and CDB:version=%d", version);
+  //   }
+  //   if(pathFilter.GetLevel0() != "*") {
+  //           result += Form(" and CDB:path_level_0=\"%s\"", pathFilter.GetLevel0().Data());
+  //   }
+  //   if(pathFilter.GetLevel1() != "*") {
+  //           result += Form(" and CDB:path_level_1=\"%s\"", pathFilter.GetLevel1().Data());
+  //   }
+  //   if(pathFilter.GetLevel2() != "*") {
+  //           result += Form(" and CDB:path_level_2=\"%s\"", pathFilter.GetLevel2().Data());
+  //   }
+
+  if(md){
+    if(md->GetObjectClassName()[0] != '\0') {
+      result += Form(" and CDB_MD:object_classname=\"%s\"", md->GetObjectClassName());
+    }
+    if(md->GetResponsible()[0] != '\0') {
+      result += Form(" and CDB_MD:responsible=\"%s\"", md->GetResponsible());
+    }
+    if(md->GetBeamPeriod() != 0) {
+      result += Form(" and CDB_MD:beam_period=%d", md->GetBeamPeriod());
+    }
+    if(md->GetAliRootVersion()[0] != '\0') {
+      result += Form(" and CDB_MD:aliroot_version=\"%s\"", md->GetAliRootVersion());
+    }
+    if(md->GetComment()[0] != '\0') {
+      result += Form(" and CDB_MD:comment=\"%s\"", md->GetComment());
+    }
+  }
+  AliDebug(2, Form("filter: %s",result.Data()));
 
 }
 
@@ -1191,149 +1189,149 @@ void AliCDBGrid::MakeQueryFilter(Int_t firstRun, Int_t lastRun,
 
 ClassImp(AliCDBGridFactory)
 
-//_____________________________________________________________________________
-Bool_t AliCDBGridFactory::Validate(const char* gridString) {
-// check if the string is valid Grid URI
+  //_____________________________________________________________________________
+  Bool_t AliCDBGridFactory::Validate(const char* gridString) {
+    // check if the string is valid Grid URI
 
-        TRegexp gridPattern("^alien://.+$");
+    TRegexp gridPattern("^alien://.+$");
 
-        return TString(gridString).Contains(gridPattern);
-}
+    return TString(gridString).Contains(gridPattern);
+  }
 
 //_____________________________________________________________________________
 AliCDBParam* AliCDBGridFactory::CreateParameter(const char* gridString) {
-// create AliCDBGridParam class from the URI string
-
-       if (!Validate(gridString)) {
-               return NULL;
-       }
-
-       TString buffer(gridString);
-
-       TString gridUrl         = "alien://";
-       TString user            = "";
-       TString dbFolder        = "";
-       TString se              = "default";
-       TString cacheFolder     = "";
-       Bool_t  operateDisconnected = kTRUE;
-       Long64_t cacheSize          = (UInt_t) 1024*1024*1024; // 1GB
-       Long_t cleanupInterval      = 0;
-
-       TObjArray *arr = buffer.Tokenize('?');
-       TIter iter(arr);
-       TObjString *str = 0;
-
-       while((str = (TObjString*) iter.Next())){
-               TString entry(str->String());
-               Int_t indeq = entry.Index('=');
-               if(indeq == -1) {
-                       if(entry.BeginsWith("alien://")) { // maybe it's a gridUrl!
-                               gridUrl = entry;
-                               continue;
-                       } else {
-                               AliError(Form("Invalid entry! %s",entry.Data()));
-                               continue;
-                       }
-               }
-               
-               TString key = entry(0,indeq);
-               TString value = entry(indeq+1,entry.Length()-in