ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/
//
// Class AliHFEvarManager
// Common place for definiton of variables to be filled into the 
// correction framework container
// More information can be found inside the implementation file
//
#ifndef ALIHFEVARMANAGER_H
#define ALIHFEVARMANAGER_H

#ifndef ROOT_TNamed
#include <TNamed.h>
#endif

#ifndef ROOT_TArrayD
#include <TArrayD.h>
#endif

template <class X>
class THnSparseT;
class TArrayF;
typedef class THnSparseT<TArrayF> THnSparseF;
class TH3F;
class TF3;
class AliCFContainer;
class AliHFEcontainer;
class AliHFEsignalCuts;
class AliVParticle;


class AliHFEvarManager : public TNamed{
public:
  enum EVarCode_t{
    kPt = 1,
    kEta,
    kPhi,
    kCharge,
    kSource,
    kCentrality,
    kSpecies,
  };
	AliHFEvarManager();
	AliHFEvarManager(const Char_t *name);
  AliHFEvarManager(const AliHFEvarManager &ref);
  AliHFEvarManager &operator=(const AliHFEvarManager &ref);
  void Copy(TObject &o) const;
	~AliHFEvarManager();

  TObjArray *GetVariables() const { return fVariables; }
  
  void SetOwner(Bool_t owner = kTRUE) { SetBit(kOwner, owner); }
  Bool_t IsOwner() const { return TestBit(kOwner); }

  void AddVariable(TString name);
  void AddVariable(TString name, Int_t nBins, Double_t min, Double_t max, Bool_t isLogarithmic = kFALSE);
  void AddVariable(TString name, Int_t nBins, const Double_t *binning);
  Bool_t IsVariableDefined(TString name);
  void DefineVariables(AliHFEcontainer *cont);
  void NewTrack(AliVParticle *track, AliVParticle *mcTrack = NULL, Float_t centrality = 99.0, Int_t aprioriPID = -1, Bool_t signal = kTRUE);
  Bool_t IsSignalTrack() const { return fSignalTrack; }
  void FillContainer(AliCFContainer *const cont, Int_t step, Bool_t useMC = kFALSE) const;
  void FillContainer(const AliHFEcontainer *const cont, const Char_t *contname, UInt_t step, Bool_t useMC = kFALSE, Double_t externalWeight = 1.) const;
  void FillContainerStepname(const AliHFEcontainer *const cont, const Char_t *contname, const Char_t *step, Bool_t useMC = kFALSE, Double_t externalWeight = 1.) const;
  void FillCorrelationMatrix(THnSparseF *matrix) const;
  
  void SetSignalCuts(AliHFEsignalCuts *signal) { fSignal = signal; }
  void SetWeightFactors(TH3F *weightFactors);
  void SetWeightFactorsFunction(TF3*weightFactorsFunction);
  
  struct AliHFEvariable : public TNamed{
    public:
      AliHFEvariable();
      AliHFEvariable(const Char_t *name, const Char_t *title, UInt_t fCode, UInt_t nBins, Double_t min, Double_t max, Bool_t isLogarithmic = kFALSE);
      AliHFEvariable(const Char_t *name, const Char_t *title, UInt_t fCode, UInt_t nBins, const Double_t *binning);
      AliHFEvariable(const AliHFEvariable &ref);
      AliHFEvariable &operator=(const AliHFEvariable &ref);
      ~AliHFEvariable();

      UInt_t GetVarCode() const { return fCode; }
      UInt_t GetNumberOfBins() const { return fNBins; }
      Double_t* GetBinning();
      Bool_t HasUserDefinedBinning() const { return fUserDefinedBinning; }
      Double_t GetMinimum() const { return fMin; }
      Double_t GetMaximum() const { return fMax; } 
      Int_t IsLogarithmic() const { return fIsLogarithmic; }
    private:
      UInt_t    fCode;              // Unique variable code
      UInt_t    fNBins;             // Number of bins
      Double_t  fMin;               // Minimum
      Double_t  fMax;               // Maximum
      TArrayD   fBinning;           // User defined binning
      Bool_t    fIsLogarithmic;     // Logarithmic binning
      Bool_t    fUserDefinedBinning;// Has User defined binning

      ClassDef(AliHFEvarManager::AliHFEvariable, 1) // HFE variable definition
  };
 
protected:
  Double_t GetValue(AliVParticle *track, UInt_t code, Float_t centrality = 99.0, Int_t aprioriPID = -1) const;
  void FillArray(AliVParticle *track, Double_t *container, Float_t centrality = 99.0, Int_t aprioriPID = -1) const;
  Double_t FindWeight(Double_t pt, Double_t eta, Double_t phi) const;

private:
  enum{
    kOwner = BIT(14)
  };
  TObjArray *fVariables;                // Variables to process
  Double_t *fContent;                   //! Cache values for track in classmember 
  Double_t *fContentMC;                 //! Cache content of the asssociated MC track in class member
  Double_t fWeightFactor;               // Cache weighting factor
  Bool_t  fSignalTrack;                 // Signal Track
	Bool_t  fWeighting;                   // Weighting or not for the efficiency maps
  AliHFEsignalCuts *fSignal;            // MC Signal Definition
	TH3F *fWeightFactors;                 // Weight factors
	TF3  *fWeightFactorsFunction;         // Weight factors

	ClassDef(AliHFEvarManager, 1)         // The variable Manager for the HFE Analysis
};

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