//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQTHnBaseUtils__
#define __TQTHnBaseUtils__

#include "QFramework/TQTaggable.h"
#include "QFramework/TQSampleFolder.h"
#include "TObject.h"
#include "THnBase.h"
#include "TAxis.h"
#include "QFramework/TQCounter.h"

#include <vector>
#include <limits>

namespace TQTHnBaseUtils {

  bool extractBinning(TQTaggable * p, int &dimension, std::vector<int> &nBins,
											std::vector<double> &min,	std::vector<double> &max,
											TString &errMsg);
	
  TString getHistogramDefinition(THnBase * histo);
 
  int getDimension(THnBase * histo);

  THnBase * createHistogram(TString definition, bool printErrMsg = false);
  THnBase * createHistogram(TString definition, TString &errMsg);

  THnBase * copyHistogram(THnBase * histo, const TString& newName = "");

  bool copyAxisNames(THnBase * histo, THnBase * copy);
 
  bool addHistogram(THnBase * histo1, THnBase * histo2, double scale = 1.,
										double scaleUncertainty = 0., double corr12 = 0.,
										bool includeScaleUncertainty=true);
  bool addHistogram(THnBase * histo1, THnBase * histo2, TQCounter* scale,
										double corr12 = 0., bool includeScaleUncertainty=false);
	
  bool scaleHistogram(THnBase * histo1, double scale = 1., double scaleUncertainty = 0.,
											bool includeScaleUncertainty = true);
  bool scaleHistogram(THnBase * histo1, TQCounter* scale, bool includeScaleUncertainty = false);

  bool checkConsistency(THnBase * histo1, THnBase * histo2, bool verbose=false);

  THnBase* projectionND(THnBase *hist, std::vector<TString> axesNamesToUse, const TString& option = "E");

  bool getAxisIndex(THnBase* h, const TString& axis_name, int& index);

  TAxis* getAxis(THnBase* h, const TString& axis_name);

}


#endif
 TQTHnBaseUtils.h:1
 TQTHnBaseUtils.h:2
 TQTHnBaseUtils.h:3
 TQTHnBaseUtils.h:4
 TQTHnBaseUtils.h:5
 TQTHnBaseUtils.h:6
 TQTHnBaseUtils.h:7
 TQTHnBaseUtils.h:8
 TQTHnBaseUtils.h:9
 TQTHnBaseUtils.h:10
 TQTHnBaseUtils.h:11
 TQTHnBaseUtils.h:12
 TQTHnBaseUtils.h:13
 TQTHnBaseUtils.h:14
 TQTHnBaseUtils.h:15
 TQTHnBaseUtils.h:16
 TQTHnBaseUtils.h:17
 TQTHnBaseUtils.h:18
 TQTHnBaseUtils.h:19
 TQTHnBaseUtils.h:20
 TQTHnBaseUtils.h:21
 TQTHnBaseUtils.h:22
 TQTHnBaseUtils.h:23
 TQTHnBaseUtils.h:24
 TQTHnBaseUtils.h:25
 TQTHnBaseUtils.h:26
 TQTHnBaseUtils.h:27
 TQTHnBaseUtils.h:28
 TQTHnBaseUtils.h:29
 TQTHnBaseUtils.h:30
 TQTHnBaseUtils.h:31
 TQTHnBaseUtils.h:32
 TQTHnBaseUtils.h:33
 TQTHnBaseUtils.h:34
 TQTHnBaseUtils.h:35
 TQTHnBaseUtils.h:36
 TQTHnBaseUtils.h:37
 TQTHnBaseUtils.h:38
 TQTHnBaseUtils.h:39
 TQTHnBaseUtils.h:40
 TQTHnBaseUtils.h:41
 TQTHnBaseUtils.h:42
 TQTHnBaseUtils.h:43
 TQTHnBaseUtils.h:44
 TQTHnBaseUtils.h:45
 TQTHnBaseUtils.h:46
 TQTHnBaseUtils.h:47
 TQTHnBaseUtils.h:48
 TQTHnBaseUtils.h:49
 TQTHnBaseUtils.h:50
 TQTHnBaseUtils.h:51
 TQTHnBaseUtils.h:52
 TQTHnBaseUtils.h:53