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.                  *
**************************************************************************/
//
// HFE correction framework container
// Contains many single containers
// Extra fuctionality like appending added
//
#ifndef ALIHFECONTAINER_H
#define ALIHFECONTAINER_H

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

#ifndef ROOT_TObjArray
#include <TObjArray.h>
#endif

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

class TArrayF;
template <class X>
class THnSparseT;
typedef class THnSparseT<TArrayF> THnSparseF;
class TCollection;
class TList;
class THashList;
class TString;
class AliCFContainer;

class AliHFEcontainer : public TNamed{
  public:
    AliHFEcontainer();
    AliHFEcontainer(const Char_t *name);
    AliHFEcontainer(const Char_t *name, UInt_t nVar);
    AliHFEcontainer(const AliHFEcontainer &ref);
    AliHFEcontainer& operator=(const AliHFEcontainer &ref);
    ~AliHFEcontainer();

    virtual Long64_t Merge(TCollection *coll);

    void CreateContainer(const Char_t *name, const Char_t *title, UInt_t nStep);
    void CreateCorrelationMatrix(const Char_t *name, const Char_t *title);
    AliCFContainer *GetCFContainer(const Char_t *name) const;
    THnSparseF *GetCorrelationMatrix(const Char_t *name) const;
    THashList *GetListOfCorrelationMatrices() const { return fCorrelationMatrices; }
    void FillCFContainer(const Char_t *name, UInt_t step, const Double_t * const content, Double_t weight = 1.) const;
    void FillCFContainerStepname(const Char_t *name, const Char_t *step, const Double_t *const content, Double_t weight = 1.) const;
    AliCFContainer *MakeMergedCFContainer(const Char_t *name, const Char_t *title, const Char_t *contnames) const;

    Int_t GetNumberOfCFContainers() const;
    Int_t GetNumberOfEvents() const { return fNEvents; };
    void NewEvent() { fNEvents++; };
    void SetNumberOfVariables(UInt_t nVar);
    inline void SetBinning(UInt_t var, UInt_t nBins, Double_t *content);
    void SetVariableName(UInt_t var, const Char_t *varname);
    void SetStepTitle(const Char_t *contname, const Char_t *steptitle, UInt_t step);
    void MakeLinearBinning(UInt_t var, UInt_t nBins, Double_t begin, Double_t end);
    void MakeLogarithmicBinning(UInt_t var, UInt_t nBins, Double_t begin, Double_t end);
    void MakeUserDefinedBinning(UInt_t var, UInt_t nBins, const Double_t *binning);
    void Sumw2(const char *contname) const;

    virtual void Print(const Option_t * opt = NULL) const;

    struct AliHFEvarInfo : public TObject{
        AliHFEvarInfo();
        AliHFEvarInfo(const Char_t *name);
        AliHFEvarInfo(const AliHFEvarInfo &ref);
        AliHFEvarInfo &operator=(const AliHFEvarInfo &ref);
        ~AliHFEvarInfo();

        UInt_t GetNumberOfBins() const { return fBinning->GetSize() ? fBinning->GetSize() - 1 : 0; };
        const Double_t *GetBinning() const { return fBinning->GetArray(); };
        TString *GetVarName() const { return fVarName; };

        void SetVarName(const Char_t *name);
        void SetBinning(UInt_t nBins, const Double_t *binning);
      private:
        TString *fVarName;  // Variable Name
        TArrayD *fBinning;  // Binning
        
        ClassDef(AliHFEcontainer::AliHFEvarInfo, 1)  // Variable information
    };

  private:
    THashList *fContainers;     // TObjArray for Containers
    THashList *fCorrelationMatrices; // Container for Correlation Matrices
    TObjArray *fVariables;      // Variable Information
    UInt_t fNVars;              // Number of Variables
    Int_t fNEvents;             // Number of Events

    ClassDef(AliHFEcontainer, 1)  // HFE Efficiency Container
};

//__________________________________________________________________
void AliHFEcontainer::SetBinning(UInt_t var, UInt_t nBins, Double_t *content){
  //
  // Set Binning for a given variable
  //
  if(var >= fNVars) return;
  AliHFEvarInfo *inf = dynamic_cast<AliHFEvarInfo *>(fVariables->UncheckedAt(var));
  if(!inf) return;
  inf->SetBinning(nBins, content); 
}
#endif
 AliHFEcontainer.h:1
 AliHFEcontainer.h:2
 AliHFEcontainer.h:3
 AliHFEcontainer.h:4
 AliHFEcontainer.h:5
 AliHFEcontainer.h:6
 AliHFEcontainer.h:7
 AliHFEcontainer.h:8
 AliHFEcontainer.h:9
 AliHFEcontainer.h:10
 AliHFEcontainer.h:11
 AliHFEcontainer.h:12
 AliHFEcontainer.h:13
 AliHFEcontainer.h:14
 AliHFEcontainer.h:15
 AliHFEcontainer.h:16
 AliHFEcontainer.h:17
 AliHFEcontainer.h:18
 AliHFEcontainer.h:19
 AliHFEcontainer.h:20
 AliHFEcontainer.h:21
 AliHFEcontainer.h:22
 AliHFEcontainer.h:23
 AliHFEcontainer.h:24
 AliHFEcontainer.h:25
 AliHFEcontainer.h:26
 AliHFEcontainer.h:27
 AliHFEcontainer.h:28
 AliHFEcontainer.h:29
 AliHFEcontainer.h:30
 AliHFEcontainer.h:31
 AliHFEcontainer.h:32
 AliHFEcontainer.h:33
 AliHFEcontainer.h:34
 AliHFEcontainer.h:35
 AliHFEcontainer.h:36
 AliHFEcontainer.h:37
 AliHFEcontainer.h:38
 AliHFEcontainer.h:39
 AliHFEcontainer.h:40
 AliHFEcontainer.h:41
 AliHFEcontainer.h:42
 AliHFEcontainer.h:43
 AliHFEcontainer.h:44
 AliHFEcontainer.h:45
 AliHFEcontainer.h:46
 AliHFEcontainer.h:47
 AliHFEcontainer.h:48
 AliHFEcontainer.h:49
 AliHFEcontainer.h:50
 AliHFEcontainer.h:51
 AliHFEcontainer.h:52
 AliHFEcontainer.h:53
 AliHFEcontainer.h:54
 AliHFEcontainer.h:55
 AliHFEcontainer.h:56
 AliHFEcontainer.h:57
 AliHFEcontainer.h:58
 AliHFEcontainer.h:59
 AliHFEcontainer.h:60
 AliHFEcontainer.h:61
 AliHFEcontainer.h:62
 AliHFEcontainer.h:63
 AliHFEcontainer.h:64
 AliHFEcontainer.h:65
 AliHFEcontainer.h:66
 AliHFEcontainer.h:67
 AliHFEcontainer.h:68
 AliHFEcontainer.h:69
 AliHFEcontainer.h:70
 AliHFEcontainer.h:71
 AliHFEcontainer.h:72
 AliHFEcontainer.h:73
 AliHFEcontainer.h:74
 AliHFEcontainer.h:75
 AliHFEcontainer.h:76
 AliHFEcontainer.h:77
 AliHFEcontainer.h:78
 AliHFEcontainer.h:79
 AliHFEcontainer.h:80
 AliHFEcontainer.h:81
 AliHFEcontainer.h:82
 AliHFEcontainer.h:83
 AliHFEcontainer.h:84
 AliHFEcontainer.h:85
 AliHFEcontainer.h:86
 AliHFEcontainer.h:87
 AliHFEcontainer.h:88
 AliHFEcontainer.h:89
 AliHFEcontainer.h:90
 AliHFEcontainer.h:91
 AliHFEcontainer.h:92
 AliHFEcontainer.h:93
 AliHFEcontainer.h:94
 AliHFEcontainer.h:95
 AliHFEcontainer.h:96
 AliHFEcontainer.h:97
 AliHFEcontainer.h:98
 AliHFEcontainer.h:99
 AliHFEcontainer.h:100
 AliHFEcontainer.h:101
 AliHFEcontainer.h:102
 AliHFEcontainer.h:103
 AliHFEcontainer.h:104
 AliHFEcontainer.h:105
 AliHFEcontainer.h:106
 AliHFEcontainer.h:107
 AliHFEcontainer.h:108
 AliHFEcontainer.h:109
 AliHFEcontainer.h:110
 AliHFEcontainer.h:111
 AliHFEcontainer.h:112
 AliHFEcontainer.h:113
 AliHFEcontainer.h:114
 AliHFEcontainer.h:115
 AliHFEcontainer.h:116
 AliHFEcontainer.h:117
 AliHFEcontainer.h:118
 AliHFEcontainer.h:119