#ifndef ROOT_TDSet
#define ROOT_TDSet
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
class TChain;
class TCollection;
class TCut;
class TDSet;
class TEventList;
class TEntryList;
class TFileInfo;
class THashList;
class TIter;
class TList;
class TProof;
class TProofChain;
class TTree;
#include <set>
#include <list>
class TDSetElement : public TNamed {
public:
typedef std::list<std::pair<TDSetElement*, TString> > FriendsList_t;
enum EStatusBits {
kHasBeenLookedUp = BIT(15),
kWriteV3 = BIT(16),
kEmpty = BIT(17),
kCorrupted = BIT(18)
};
private:
TString fDirectory;
Long64_t fFirst;
Long64_t fNum;
TString fMsd;
Long64_t fTDSetOffset;
TObject *fEntryList;
Bool_t fValid;
Long64_t fEntries;
TList *fFriends;
Bool_t HasBeenLookedUp() const { return TestBit(kHasBeenLookedUp); }
TDSetElement& operator=(const TDSetElement &);
public:
TDSetElement();
TDSetElement(const char *file, const char *objname = 0,
const char *dir = 0, Long64_t first = 0, Long64_t num = -1,
const char *msd = 0);
TDSetElement(const TDSetElement& elem);
virtual ~TDSetElement();
virtual TList *GetListOfFriends() const { return fFriends; }
virtual void AddFriend(TDSetElement *friendElement, const char *alias);
virtual void DeleteFriends();
const char *GetFileName() const { return GetName(); }
Long64_t GetFirst() const { return fFirst; }
void SetFirst(Long64_t first) { fFirst = first; }
Long64_t GetNum() const { return fNum; }
Long64_t GetEntries(Bool_t istree = kTRUE, Bool_t openfile = kTRUE);
void SetEntries(Long64_t ent) { fEntries = ent; }
const char *GetMsd() const { return fMsd; }
void SetNum(Long64_t num) { fNum = num; }
Bool_t GetValid() const { return fValid; }
const char *GetObjName() const { return GetTitle(); }
const char *GetDirectory() const;
void Print(Option_t *options="") const;
Long64_t GetTDSetOffset() const { return fTDSetOffset; }
void SetTDSetOffset(Long64_t offset) { fTDSetOffset = offset; }
void SetEntryList(TObject *aList, Long64_t first = -1, Long64_t num = -1);
TObject *GetEntryList() const { return fEntryList; }
void Validate(Bool_t isTree);
void Validate(TDSetElement *elem);
void Invalidate() { fValid = kFALSE; }
void SetValid() { fValid = kTRUE; }
Int_t Compare(const TObject *obj) const;
Bool_t IsSortable() const { return kTRUE; }
Int_t Lookup(Bool_t force = kFALSE);
void SetLookedUp() { SetBit(kHasBeenLookedUp); }
TFileInfo *GetFileInfo(const char *type = "TTree");
ClassDef(TDSetElement,6)
};
class TDSet : public TNamed {
public:
enum EStatusBits {
kWriteV3 = BIT(16),
kEmpty = BIT(17),
kValidityChecked = BIT(18),
kSomeInvalid = BIT(19)
};
private:
TString fDir;
TString fType;
TString fObjName;
THashList *fElements;
Bool_t fIsTree;
TIter *fIterator;
TObject *fEntryList;
TProofChain *fProofChain;
void SplitEntryList();
TDSet(const TDSet &);
void operator=(const TDSet &);
protected:
TDSetElement *fCurrent;
public:
TDSet();
TDSet(const char *name, const char *objname = "*",
const char *dir = "/", const char *type = 0);
TDSet(const TChain &chain, Bool_t withfriends = kTRUE);
virtual ~TDSet();
virtual Bool_t Add(const char *file, const char *objname = 0,
const char *dir = 0, Long64_t first = 0,
Long64_t num = -1, const char *msd = 0);
virtual Bool_t Add(TDSet *set);
virtual Bool_t Add(TCollection *fileinfo, const char *meta = 0,
Bool_t availableOnly = kFALSE, TCollection *badlist = 0);
virtual Bool_t Add(TFileInfo *fileinfo, const char *meta = 0);
virtual void AddFriend(TDSet *friendset, const char *alias);
virtual Long64_t Process(const char *selector, Option_t *option = "",
Long64_t nentries = -1,
Long64_t firstentry = 0,
TObject *enl = 0);
virtual Long64_t Draw(const char *varexp, const char *selection,
Option_t *option = "", Long64_t nentries = -1,
Long64_t firstentry = 0);
virtual Long64_t Draw(const char *varexp, const TCut &selection,
Option_t *option = "", Long64_t nentries = -1,
Long64_t firstentry = 0);
virtual void Draw(Option_t *opt) { Draw(opt, "", "", 1000000000, 0); }
Int_t ExportFileList(const char *filepath, Option_t *opt = "");
void Print(Option_t *option="") const;
void SetObjName(const char *objname);
void SetDirectory(const char *dir);
Bool_t IsTree() const { return fIsTree; }
Bool_t IsValid() const { return !fType.IsNull(); }
Bool_t ElementsValid();
const char *GetType() const { return fType; }
const char *GetObjName() const { return fObjName; }
const char *GetDirectory() const { return fDir; }
TList *GetListOfElements() const { return (TList *)fElements; }
Int_t Remove(TDSetElement *elem, Bool_t deleteElem = kTRUE);
virtual void Reset();
virtual TDSetElement *Next(Long64_t totalEntries = -1);
TDSetElement *Current() const { return fCurrent; };
static Long64_t GetEntries(Bool_t isTree, const char *filename,
const char *path, TString &objname);
void AddInput(TObject *obj);
void ClearInput();
TObject *GetOutput(const char *name);
TList *GetOutputList();
virtual void StartViewer();
virtual TTree *GetTreeHeader(TProof *proof);
virtual void SetEntryList(TObject *aList);
TObject *GetEntryList() const { return fEntryList; }
void Validate();
void Validate(TDSet *dset);
void Lookup(Bool_t removeMissing = kFALSE, TList **missingFiles = 0);
void SetLookedUp();
void SetWriteV3(Bool_t on = kTRUE);
ClassDef(TDSet,6)
};
#endif