ROOT logo
#ifndef ALIDIELECTRONHF_H
#define ALIDIELECTRONHF_H

/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#############################################################
//#                                                           # 
//#         Class AliDielectronHF                     #
//#                                                           #
//#  Authors:                                                 #
//#   Julian Book, Uni-Frankfurt / Julian.Book@cern.ch        #
//#                                                           #
//#############################################################

#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 {
    //    kOSonly=0,  kOSandLS, kOSandROT, kOSandMIX, kAll, kMConly
    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;}

  // functions to add 1-dimensional objects
  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); }

  // functions to add 2-dimensional objects
  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); }

  // functions to add 3-dimensional objects
  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); }

  // functions to add multidimensional stuff
  void UserSparse(const char* histClass,
		  Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW=AliDielectronHistos::kNoWeights);


  // functions to define the grid
  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;             // list of used variables

  TObjArray fArrPairType;           //-> array of pair types
  EPairType fPairType;              // which pair combinations to include
  TObjArray* fSignalsMC;            //! array of MC signals to be studied

  UShort_t  fVarCuts[kMaxCuts];     // cut variables
  TBits     *fVarCutType;           // array to store leg booleans
  //  Bool_t    fVarCutType[kMaxCuts];  // array to store leg booleans
  TObjArray fAxes;                  // Axis descriptions of the cut binning
  UShort_t  fBinType[kMaxCuts];     // binning type of the axes
  
  Bool_t    fHasMC;                 // is mc array
  Bool_t    fStepGenerated;         // switcher for generated particles
  Bool_t    fEventArray;            // switch OFF pair types and ON event array
  TObjArray fRefObj;               // reference object

  AliDielectronHF(const AliDielectronHF &c);
  AliDielectronHF &operator=(const AliDielectronHF &c);

  
  ClassDef(AliDielectronHF,6)         // Dielectron HF
};



#endif
 AliDielectronHF.h:1
 AliDielectronHF.h:2
 AliDielectronHF.h:3
 AliDielectronHF.h:4
 AliDielectronHF.h:5
 AliDielectronHF.h:6
 AliDielectronHF.h:7
 AliDielectronHF.h:8
 AliDielectronHF.h:9
 AliDielectronHF.h:10
 AliDielectronHF.h:11
 AliDielectronHF.h:12
 AliDielectronHF.h:13
 AliDielectronHF.h:14
 AliDielectronHF.h:15
 AliDielectronHF.h:16
 AliDielectronHF.h:17
 AliDielectronHF.h:18
 AliDielectronHF.h:19
 AliDielectronHF.h:20
 AliDielectronHF.h:21
 AliDielectronHF.h:22
 AliDielectronHF.h:23
 AliDielectronHF.h:24
 AliDielectronHF.h:25
 AliDielectronHF.h:26
 AliDielectronHF.h:27
 AliDielectronHF.h:28
 AliDielectronHF.h:29
 AliDielectronHF.h:30
 AliDielectronHF.h:31
 AliDielectronHF.h:32
 AliDielectronHF.h:33
 AliDielectronHF.h:34
 AliDielectronHF.h:35
 AliDielectronHF.h:36
 AliDielectronHF.h:37
 AliDielectronHF.h:38
 AliDielectronHF.h:39
 AliDielectronHF.h:40
 AliDielectronHF.h:41
 AliDielectronHF.h:42
 AliDielectronHF.h:43
 AliDielectronHF.h:44
 AliDielectronHF.h:45
 AliDielectronHF.h:46
 AliDielectronHF.h:47
 AliDielectronHF.h:48
 AliDielectronHF.h:49
 AliDielectronHF.h:50
 AliDielectronHF.h:51
 AliDielectronHF.h:52
 AliDielectronHF.h:53
 AliDielectronHF.h:54
 AliDielectronHF.h:55
 AliDielectronHF.h:56
 AliDielectronHF.h:57
 AliDielectronHF.h:58
 AliDielectronHF.h:59
 AliDielectronHF.h:60
 AliDielectronHF.h:61
 AliDielectronHF.h:62
 AliDielectronHF.h:63
 AliDielectronHF.h:64
 AliDielectronHF.h:65
 AliDielectronHF.h:66
 AliDielectronHF.h:67
 AliDielectronHF.h:68
 AliDielectronHF.h:69
 AliDielectronHF.h:70
 AliDielectronHF.h:71
 AliDielectronHF.h:72
 AliDielectronHF.h:73
 AliDielectronHF.h:74
 AliDielectronHF.h:75
 AliDielectronHF.h:76
 AliDielectronHF.h:77
 AliDielectronHF.h:78
 AliDielectronHF.h:79
 AliDielectronHF.h:80
 AliDielectronHF.h:81
 AliDielectronHF.h:82
 AliDielectronHF.h:83
 AliDielectronHF.h:84
 AliDielectronHF.h:85
 AliDielectronHF.h:86
 AliDielectronHF.h:87
 AliDielectronHF.h:88
 AliDielectronHF.h:89
 AliDielectronHF.h:90
 AliDielectronHF.h:91
 AliDielectronHF.h:92
 AliDielectronHF.h:93
 AliDielectronHF.h:94
 AliDielectronHF.h:95
 AliDielectronHF.h:96
 AliDielectronHF.h:97
 AliDielectronHF.h:98
 AliDielectronHF.h:99
 AliDielectronHF.h:100
 AliDielectronHF.h:101
 AliDielectronHF.h:102
 AliDielectronHF.h:103
 AliDielectronHF.h:104
 AliDielectronHF.h:105
 AliDielectronHF.h:106
 AliDielectronHF.h:107
 AliDielectronHF.h:108
 AliDielectronHF.h:109
 AliDielectronHF.h:110
 AliDielectronHF.h:111
 AliDielectronHF.h:112
 AliDielectronHF.h:113
 AliDielectronHF.h:114
 AliDielectronHF.h:115
 AliDielectronHF.h:116
 AliDielectronHF.h:117
 AliDielectronHF.h:118
 AliDielectronHF.h:119
 AliDielectronHF.h:120
 AliDielectronHF.h:121
 AliDielectronHF.h:122
 AliDielectronHF.h:123
 AliDielectronHF.h:124
 AliDielectronHF.h:125
 AliDielectronHF.h:126
 AliDielectronHF.h:127
 AliDielectronHF.h:128
 AliDielectronHF.h:129
 AliDielectronHF.h:130
 AliDielectronHF.h:131
 AliDielectronHF.h:132
 AliDielectronHF.h:133