#ifndef ALIBASECALIBVIEWER_H
#define ALIBASECALIBVIEWER_H
#include <TObject.h>
#include <TTree.h>
#include <TFile.h>
#include "TFriendElement.h"
#include "AliMathBase.h"
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 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;
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;
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;
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;
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;
void FormatHistoLabels(TH1 *histo) const;
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;
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;
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;
TFile* fFile;
TObjArray* fListOfObjectsToBeDeleted;
Bool_t fTreeMustBeDeleted;
TString fAbbreviation;
TString fAppendString;
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)
};
#endif