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

/* $Id$ */

// Event pool based on THnSparseI
// This class is needed by the AnalysisManager to steer a mixing analysis.
// Author: Peter Hristov
// Peter.Hristov@cern.ch

#include <THnSparse.h>
#include <TEntryList.h>
#include "AliVEventPool.h"

class TChain;
class TTreeFormula;
class AliRunTagCuts;
class AliEventTagCuts;
class AliDetectorTagCuts;
class AliLHCTagCuts;

//_____________________________________________________________________________
class AliEventPoolSparse : public AliVEventPool {
 public:

  AliEventPoolSparse();
  AliEventPoolSparse(const char* name, const char* title, TChain * tagchain, Int_t dim,
		     const char ** vars, const Int_t* nbins, const Double_t* xmin = 0,
		     const Double_t* xmax = 0, Int_t chunksize = 1024 * 16);

  virtual ~AliEventPoolSparse();

  // Interface from AiVEventPool, to be overloaded
  virtual TChain* GetNextChain();
  virtual void  GetCurrentBin(Float_t* xbin);
  virtual Int_t GetDimension(){return fN;}
  virtual void  Init();

  TEntryList * GetNextPool(Int_t i) {
    // Returns the array associated with bin "i"
    return fPool>0 ? fPool[i] : 0x0;
  }

  TEntryList * GetEvents(const Double_t * x) {
    // Returns the array associated with the bin
    // that corresponds to vector "x"
    Int_t bin = fHnSparseI.GetBin(x,kFALSE);
    return fPool>0 ? fPool[bin] : 0x0;
  }

  void SetTagChain(TChain * chain){
    // Input tag chain
    fTagChain = chain;
  }

  TChain * GetTagChain() const {
    // Return the input tag chain
    return fTagChain;
  }

  // Cuts
  void SetRunCut(const char * cut);
  void SetLHCCut(const char * cut);
  void SetDetCut(const char * cut);
  void SetEventCut(const char * cut);

  void SetRunCut(AliRunTagCuts* cut);
  void SetEventCut(AliEventTagCuts* cut);
  void SetDetectorCut(AliDetectorTagCuts* cut);
  void SetLHCCut(AliLHCTagCuts* cut);

  TTreeFormula ** GetPoolVars() const {return fVars;}
  TTreeFormula * GetRunCut() const {return fRunCut;}
  TTreeFormula * GetLHCCut() const {return fLHCCut;}
  TTreeFormula * GetDetCut() const {return fDetCut;}
  TTreeFormula * GetEventCut() const {return fEvCut;}
  Int_t BinNumber() const {return fBinNumber;}
	  
 protected:

  void Set(Int_t n);


 private:

  AliEventPoolSparse(const AliEventPoolSparse& source); // Not implemented
  AliEventPoolSparse& operator = (const AliEventPoolSparse& source); // Not implemented

  THnSparseI fHnSparseI; // Sparse histogram to 
  Int_t fChunkSize;      //! Cached chunk size since the getter is protected
  Int_t fN;              // Size of the array fPool
  TEntryList ** fPool;   // Arrays of pointers to the TEntryList containing the event IDs
  Int_t fCurrentBin;     //! Current bin
  TChain * fTagChain;    //! Input chain of tags

  TTreeFormula ** fVars; // Array of variables used to create the pools 
  TTreeFormula * fRunCut;// Run selection
  TTreeFormula * fLHCCut;// LNC-based selection
  TTreeFormula * fDetCut;// Detector-based selection
  TTreeFormula * fEvCut; // Event-based selection

  AliRunTagCuts *fRunTagCut; // RunTag class cut
  AliEventTagCuts *fEventTagCut; // EventTag class cut
  AliDetectorTagCuts *fDetectorTagCut; // DetectorTag class cut
  AliLHCTagCuts *fLHCTagCut; // LHCTag class cut

  Int_t fBinNumber;      // Current bin
  
  ClassDef(AliEventPoolSparse,2)  // 
};

#endif


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