#ifndef ALIDIELECTRONHF_H
#define ALIDIELECTRONHF_H
#include <TNamed.h>
#include <TObjArray.h>
#include <TBits.h>
#include <THnBase.h>
#include "AliDielectronVarManager.h"
#include "AliDielectronHistos.h"
class AliDielectronHF : public TNamed {
public:
enum { kMaxCuts=20 };
enum EBinType {
kStdBin=0,
kBinToMax,
kBinFromMin,
kSymBin
};
enum EPairType {
kAll=0, kMConly,
kSeAll, kSeOnlyOS,
kMeAll, kMeOnlyOS,
kSeMeAll, kSeMeOnlyOS,
kSeReAll, kSeReOnlyOS,
};
AliDielectronHF();
AliDielectronHF(const char*name, const char* title);
virtual ~AliDielectronHF();
void Init();
void SetSignalsMC(TObjArray* array) {fSignalsMC = array;}
void SetStepForMCGenerated(Bool_t switcher=kTRUE) {fStepGenerated = switcher;}
void SetPairTypes(EPairType ptype) { fPairType=ptype; }
void SetEventArray(Bool_t switcher=kTRUE) {fEventArray=switcher;}
void UserProfile(const char* histClass, UInt_t valTypeP,
const TVectorD * const binsX, UInt_t valTypeX, TString option="",
UInt_t valTypeW=AliDielectronHistos::kNoWeights);
void UserHistogram(const char* histClass,
const TVectorD * const binsX, UInt_t valTypeX, UInt_t valTypeW=AliDielectronHistos::kNoWeights)
{ UserProfile(histClass,AliDielectronHistos::kNoProfile,binsX,valTypeX,"",valTypeW); }
void UserProfile(const char* histClass, UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY,
UInt_t valTypeX, UInt_t valTypeY, TString option="", UInt_t valTypeW=AliDielectronHistos::kNoWeights);
void UserHistogram(const char* histClass,
const TVectorD * const binsX, const TVectorD * const binsY,
UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeW=AliDielectronHistos::kNoWeights)
{ UserProfile(histClass,AliDielectronHistos::kNoProfile,binsX,binsY,valTypeX,valTypeY,"",valTypeW); }
void UserProfile(const char* histClass, UInt_t valTypeP,
const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ, TString option="",
UInt_t valTypeW=AliDielectronHistos::kNoWeights);
void UserHistogram(const char* histClass,
const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ, UInt_t valTypeW=AliDielectronHistos::kNoWeights)
{ UserProfile(histClass,AliDielectronHistos::kNoProfile,binsX,binsY,binsZ,valTypeX,valTypeY,valTypeZ,"",valTypeW); }
void UserSparse(const char* histClass,
Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW=AliDielectronHistos::kNoWeights);
void AddCutVariable(AliDielectronVarManager::ValueTypes type, Int_t nbins,
Double_t min, Double_t max, Bool_t log=kFALSE, Bool_t leg=kFALSE, EBinType btype=kStdBin);
void AddCutVariable(AliDielectronVarManager::ValueTypes type,
const char* binLimitStr, Bool_t leg=kFALSE, EBinType btype=kStdBin);
void AddCutVariable(AliDielectronVarManager::ValueTypes type,
TVectorD * binLimits, Bool_t leg=kFALSE, EBinType btype=kStdBin);
void Fill(Int_t pairIndex, const AliDielectronPair *particle);
void Fill(Int_t label1, Int_t label2, Int_t nSignal);
void Fill(Int_t Index, Double_t * const valuesPair, Double_t * const valuesLeg1, Double_t * const valuesLeg2);
Bool_t IsPairTypeSelected(Int_t itype);
Int_t GetNumberOfBins() const;
const TObjArray * GetHistArray() const { return &fArrPairType; }
Bool_t GetStepForMCGenerated() const { return fStepGenerated; }
Bool_t IsEventArray() const { return fEventArray; }
private:
TBits *fUsedVars;
TObjArray fArrPairType;
EPairType fPairType;
TObjArray* fSignalsMC;
UShort_t fVarCuts[kMaxCuts];
TBits *fVarCutType;
TObjArray fAxes;
UShort_t fBinType[kMaxCuts];
Bool_t fHasMC;
Bool_t fStepGenerated;
Bool_t fEventArray;
TObjArray fRefObj;
AliDielectronHF(const AliDielectronHF &c);
AliDielectronHF &operator=(const AliDielectronHF &c);
ClassDef(AliDielectronHF,6)
};
#endif