Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEntryList.h
Go to the documentation of this file.
1 // @(#)root/tree:$Id$
2 // Author: Anna Kreshuk 27/10/2006
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TEntryList
13 #define ROOT_TEntryList
14 
15 #include "TNamed.h"
16 
17 class TTree;
18 class TDirectory;
19 class TObjArray;
20 class TString;
21 
22 class TList;
23 class TCollection;
24 
25 class TEntryList: public TNamed
26 {
27  private:
28  TEntryList& operator=(const TEntryList&); // Not implemented
29 
30  protected:
31  TList *fLists; ///< a list of underlying entry lists for each tree of a chain
32  TEntryList *fCurrent; ///<! currently filled entry list
33 
34  Int_t fNBlocks; ///< number of TEntryListBlocks
35  TObjArray *fBlocks; ///< blocks with indices of passing events (TEntryListBlocks)
36  Long64_t fN; ///< number of entries in the list
37  Long64_t fEntriesToProcess; ///< used on proof to set the number of entries to process in a packet
38  TString fTreeName; ///< name of the tree
39  TString fFileName; ///< name of the file, where the tree is
40  ULong_t fStringHash; ///<! Hash value of a string of treename and filename
41  Int_t fTreeNumber; ///<! the index of the tree in the chain (used when the entry
42  ///< list is used as input (TTree::SetEntryList())
43 
44  Long64_t fLastIndexQueried; ///<! used to optimize GetEntry() function from a loop
45  Long64_t fLastIndexReturned; ///<! used to optimize GetEntry() function from a loop
46  Bool_t fShift; ///<! true when some sub-lists don't correspond to trees
47  ///< (when the entry list is used as input in TChain)
48  TDirectory *fDirectory; ///<! Pointer to directory holding this tree
49  Bool_t fReapply; ///< If true, TTree::Draw will 'reapply' the original cut
50 
51  void GetFileName(const char *filename, TString &fn, Bool_t * = 0);
52 
53  public:
54  enum {kBlockSize = 64000}; //number of entries in each block (not the physical size).
55 
56  TEntryList();
57  TEntryList(const char *name, const char *title);
58  TEntryList(const char *name, const char *title, const TTree *tree);
59  TEntryList(const char *name, const char *title, const char *treename, const char *filename);
60  TEntryList(const TTree *tree);
61  TEntryList(const TEntryList& elist);
62  virtual ~TEntryList();
63 
64  virtual void Add(const TEntryList *elist);
65  virtual Int_t Contains(Long64_t entry, TTree *tree = 0);
66  virtual void DirectoryAutoAdd(TDirectory *);
67  virtual Bool_t Enter(Long64_t entry, TTree *tree = 0);
68  virtual TEntryList *GetCurrentList() const { return fCurrent; };
69  virtual TEntryList *GetEntryList(const char *treename, const char *filename, Option_t *opt="");
70  virtual Long64_t GetEntry(Int_t index);
71  virtual Long64_t GetEntryAndTree(Int_t index, Int_t &treenum);
72  virtual Long64_t GetEntriesToProcess() const {return fEntriesToProcess;}
73  virtual TList *GetLists() const { return fLists; }
74  virtual TDirectory *GetDirectory() const { return fDirectory; }
75  virtual Long64_t GetN() const { return fN; }
76  virtual const char *GetTreeName() const { return fTreeName.Data(); }
77  virtual const char *GetFileName() const { return fFileName.Data(); }
78  virtual Int_t GetTreeNumber() const { return fTreeNumber; }
79  virtual Bool_t GetReapplyCut() const { return fReapply; };
80 
81  Bool_t IsValid() const
82  {
83  if ((fLists || fBlocks)) return kTRUE;
84  return kFALSE;
85  }
86 
87  virtual Int_t Merge(TCollection *list);
88 
89  virtual Long64_t Next();
90  virtual void OptimizeStorage();
91  virtual Int_t RelocatePaths(const char *newloc, const char *oldloc = 0);
92  virtual Bool_t Remove(Long64_t entry, TTree *tree = 0);
93  virtual void Reset();
94  virtual Int_t ScanPaths(TList *roots, Bool_t notify = kTRUE);
95 
96  virtual void Print(const Option_t* option = "") const;
97  virtual void SetDirectory(TDirectory *dir);
98  virtual void SetEntriesToProcess(Long64_t nen) { fEntriesToProcess = nen; }
99  virtual void SetShift(Bool_t shift) { fShift = shift; };
100  virtual void SetTree(const TTree *tree);
101  virtual void SetTree(const char *treename, const char *filename);
102  virtual void SetTreeName(const char *treename){ fTreeName = treename; };
103  virtual void SetFileName(const char *filename){ fFileName = filename; };
104  virtual void SetTreeNumber(Int_t index) { fTreeNumber=index; }
105  virtual void SetReapplyCut(Bool_t apply = kFALSE) {fReapply = apply;}; // *TOGGLE* *GETTER=GetReapplyCut
106  virtual void Subtract(const TEntryList *elist);
107 
108  static Int_t Relocate(const char *fn,
109  const char *newroot, const char *oldroot = 0, const char *enlnm = 0);
110  static Int_t Scan(const char *fn, TList *roots);
111 
112 // Preventing warnings with -Weffc++ in GCC since the overloading of the || operator was a design choice.
113 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600
114 #pragma GCC diagnostic push
115 #pragma GCC diagnostic ignored "-Weffc++"
116 #endif
117  friend TEntryList operator||(TEntryList& elist1, TEntryList& elist2);
118 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600
119 #pragma GCC diagnostic pop
120 #endif
121 
122  ClassDef(TEntryList, 2); //A list of entries in a TTree
123 };
124 #endif