ROOT logo
#ifndef AliTHn_H
#define AliTHn_H

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

// optimized data container reusing functionality of AliCFContainer / THnsparse
//
// Use AliTHn instead of AliCFContainer and your memory consumption will be drastically reduced
// As AliTHn derives from AliCFContainer, you can just replace your current AliCFContainer object by AliTHn
// Once you have the merged output, call FillParent() and you can use AliCFContainer as usual

#include "TObject.h"
#include "TString.h"
#include "AliCFContainer.h"

class TArrayF;
class TCollection;

class AliTHn : public AliCFContainer
{
 public:
  AliTHn();
  AliTHn(const Char_t* name, const Char_t* title,const Int_t nSelStep, const Int_t nVarIn, const Int_t* nBinIn);
  
  virtual ~AliTHn();
  
  virtual void  Fill(const Double_t *var, Int_t istep, Double_t weight=1.) ;
  virtual void  FillParent();
  virtual void  FillContainer(AliCFContainer* cont);
  
  TArrayF* GetValues(Int_t step) { return fValues[step]; }
  TArrayF* GetSumw2(Int_t step)  { return fSumw2[step]; }
  
  void DeleteContainers();
  void ReduceAxis();
  
  AliTHn(const AliTHn &c);
  AliTHn& operator=(const AliTHn& corr);
  virtual void Copy(TObject& c) const;

  virtual Long64_t Merge(TCollection* list);
  
protected:
  void Init();
  Long64_t GetGlobalBinIndex(const Int_t* binIdx);
  
  Long64_t fNBins;   // number of total bins
  Int_t    fNVars;   // number of variables
  Int_t    fNSteps;  // number of selection steps
  TArrayF **fValues; //[fNSteps] data container
  TArrayF **fSumw2;  //[fNSteps] data container
  
  TAxis** axisCache; //! cache axis pointers (about 50% of the time in Fill is spent in GetAxis otherwise)
  Int_t* fNbinsCache; //! cache Nbins per axis
  Double_t* fLastVars; //! caching of last used bins (in many loops some vars are the same for a while)
  Int_t* fLastBins; //! caching of last used bins (in many loops some vars are the same for a while)
  
  ClassDef(AliTHn, 4) // THn like container
};

#endif
 AliTHn.h:1
 AliTHn.h:2
 AliTHn.h:3
 AliTHn.h:4
 AliTHn.h:5
 AliTHn.h:6
 AliTHn.h:7
 AliTHn.h:8
 AliTHn.h:9
 AliTHn.h:10
 AliTHn.h:11
 AliTHn.h:12
 AliTHn.h:13
 AliTHn.h:14
 AliTHn.h:15
 AliTHn.h:16
 AliTHn.h:17
 AliTHn.h:18
 AliTHn.h:19
 AliTHn.h:20
 AliTHn.h:21
 AliTHn.h:22
 AliTHn.h:23
 AliTHn.h:24
 AliTHn.h:25
 AliTHn.h:26
 AliTHn.h:27
 AliTHn.h:28
 AliTHn.h:29
 AliTHn.h:30
 AliTHn.h:31
 AliTHn.h:32
 AliTHn.h:33
 AliTHn.h:34
 AliTHn.h:35
 AliTHn.h:36
 AliTHn.h:37
 AliTHn.h:38
 AliTHn.h:39
 AliTHn.h:40
 AliTHn.h:41
 AliTHn.h:42
 AliTHn.h:43
 AliTHn.h:44
 AliTHn.h:45
 AliTHn.h:46
 AliTHn.h:47
 AliTHn.h:48
 AliTHn.h:49
 AliTHn.h:50
 AliTHn.h:51
 AliTHn.h:52
 AliTHn.h:53
 AliTHn.h:54
 AliTHn.h:55
 AliTHn.h:56
 AliTHn.h:57
 AliTHn.h:58
 AliTHn.h:59
 AliTHn.h:60
 AliTHn.h:61
 AliTHn.h:62