Rene Brun
authored
*****************WARNING***************** With this mega patch, we introduce support for TTree/TChain with more than 2 billion entries. Several class data members have been changed from Int_t (or Stat_t) to Long64_t. ==>Trees written with this new version cannot be read with older versions ****************************************** TBranch: ======== - replace the members with type Int_t or Stat_t by Long64_t Long64_t fEntryNumber; // Current entry number (last one filled in this branch) Long64_t fReadEntry; //! Current entry number when reading Long64_t fEntries; // Number of entries Long64_t fTotBytes; // Total number of bytes in all leaves before compression Long64_t fZipBytes; // Total number of bytes in all leaves after compression Long64_t *fBasketEntry; //[fMaxBaskets] Table of first entry in eack basket - corresponding changes in the member functions virtual Int_t GetEntry(Long64_t entry=0, Int_t getall = 0); virtual Int_t GetEntryExport(Long64_t entry, Int_t getall, TClonesArray *list, Int_t n); Int_t GetEvent(Long64_t entry=0) {return GetEntry(entry);} Long64_t *GetBasketEntry() const {return fBasketEntry;} Long64_t GetReadEntry() const {return fReadEntry;} Long64_t GetTotalSize() const; Long64_t GetTotBytes() const {return fTotBytes;} Long64_t GetZipBytes() const {return fZipBytes;} Long64_t GetEntryNumber() const {return fEntryNumber;} Long64_t GetEntries() const {return fEntries;} TBranch::Streamer has been modified to read old files and automatically translate the old types to the new types. The new version of Streamer uses the TClass::ReadBuffer/WriteBuffer. TBranch::Print has been modified to take into account the new data types. ClassDef version increased to 10. TBranchClones: ============== virtual Int_t GetEntry(Long64_t entry=0, Int_t getall = 0); TBranchElement: =============== Int_t GetEntry(Long64_t entry=0, Int_t getall = 0); TBranchObject: ============== virtual Int_t GetEntry(Long64_t entry=0, Int_t getall = 0); TChain: ======= Long64_t *fTreeOffset; //[fTreeOffsetLen]Array of variables virtual Int_t Add(const char *name, Long64_t nentries=kBigNumber); virtual Int_t AddFile(const char *name, Long64_t nentries=kBigNumber); virtual Long64_t Draw(const char *varexp, const TCut &selection, Option_t *option="" ,Long64_t nentries=kBigNumber, Long64_t firstentry=0); virtual Long64_t Draw(const char *varexp, const char *selection, Option_t *option="" ,Long64_t nentries=kBigNumber, Long64_t firstentry=0); // *MENU* virtual Long64_t GetChainEntryNumber(Long64_t entry) const; virtual Long64_t GetEntries() const; virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0); Long64_t LoadTree(Long64_t entry); virtual void Loop(Option_t *option="",Long64_t nentries=kBigNumber, Long64_t firstentry=0); // *MENU* virtual Long64_t Merge(const char *name); virtual Long64_t Merge(TCollection *list); virtual Long64_t Merge(TFile *file, Int_t basketsize, Option_t *option=""); virtual Long64_t Process(const char *filename,Option_t *option="", Long64_t nentries=kBigNumber, Long64_t firstentry=0); // *MENU* virtual Long64_t Process(TSelector *selector,Option_t *option="", Long64_t nentries=kBigNumber, Long64_t firstentry=0); ClassDef version changed from 4 to 5 TSelector ========= virtual Bool_t ProcessCut(Long64_t /*entry*/) { return kTRUE; } virtual void ProcessFill(Long64_t /*entry*/) { } virtual Bool_t Process(Long64_t /*entry*/) { return kFALSE; } TSelectorCint ============= virtual Bool_t ProcessCut(Long64_t entry); virtual void ProcessFill(Long64_t entry); virtual Bool_t Process(Long64_t entry); TSelectorDraw ============= Long64_t fDraw; //! Last entry loop number when object was drawn Long64_t fSelectedRows; // Number of selected entries Long64_t fOldEstimate; // value of Tree fEstimate when selector is called Double_t *fV1; //![fSelectedRows]Local buffer for variable 1 Double_t *fV2; //![fSelectedRows]Local buffer for variable 2 Double_t *fV3; //![fSelectedRows]Local buffer for variable 3 Double_t *fV4; //![fSelectedRows]Local buffer for variable 4 Double_t *fW; //![fSelectedRows]Local buffer for weights virtual Long64_t GetSelectedRows() const {return fSelectedRows;} virtual Bool_t Process(Long64_t /*entry*/) { return kFALSE; } virtual void ProcessFill(Long64_t entry); virtual void ProcessFillMultiple(Long64_t entry); virtual void ProcessFillObject(Long64_t entry); virtual void SetEstimate(Long64_t n); TTree ===== Modified data types Long64_t fEntries; // Number of entries Long64_t fTotBytes; // Total number of bytes in all branches before compression Long64_t fZipBytes; // Total number of bytes in all branches after compression Long64_t fSavedBytes; // Number of autosaved bytes Long64_t fMaxEntryLoop; // Maximum number of entries to process Long64_t fMaxVirtualSize; // Maximum total size of buffers kept in memory Long64_t fAutoSave; // Autosave tree when fAutoSave bytes produced Long64_t fEstimate; // Number of entries to estimate histogram limits Long64_t fChainOffset; //! Offset of 1st entry of this Tree in a TChain Long64_t fReadEntry; //! Number of the entry being processed Long64_t fTotalBuffers; //! Total number of bytes in branch buffers Long64_t fDebugMin; //! First entry number to debug Long64_t fDebugMax; //! Last entry number to debug New function signatures virtual Long64_t AutoSave(Option_t *option=""); virtual TTree *CloneTree(Long64_t nentries=-1, Option_t *option=""); virtual Long64_t CopyEntries(TTree *tree, Long64_t nentries=-1); virtual TTree *CopyTree(const char *selection, Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); virtual Long64_t Draw(const char *varexp, const TCut &selection, Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); virtual Long64_t Draw(const char *varexp, const char *selection, Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); // *MENU* virtual Long64_t Fit(const char *funcname ,const char *varexp, const char *selection="",Option_t *option="" ,Option_t *goption="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); // *MENU* virtual Long64_t GetChainEntryNumber(Long64_t entry) const {return entry;} virtual Long64_t GetChainOffset() const { return fChainOffset; } Long64_t GetDebugMax() const {return fDebugMax;} Long64_t GetDebugMin() const {return fDebugMin;} virtual Long64_t GetEntries() const {return fEntries;} virtual Long64_t GetEntriesFast() const {return fEntries;} virtual Long64_t GetEntriesFriend() const; virtual Long64_t GetEstimate() const { return fEstimate; } virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0); Int_t GetEvent(Long64_t entry=0, Int_t getall=0) {return GetEntry(entry,getall);} virtual Long64_t GetEntryNumberWithBestIndex(Int_t major, Int_t minor=0) const; virtual Long64_t GetEntryNumberWithIndex(Int_t major, Int_t minor=0) const; virtual Long64_t GetEntryNumber(Long64_t entry) const; virtual Long64_t GetMaxEntryLoop() const {return fMaxEntryLoop;} static Long64_t GetMaxTreeSize(); virtual Long64_t GetMaxVirtualSize() const {return fMaxVirtualSize;} virtual Long64_t GetReadEntry() const {return fReadEntry;} virtual Long64_t GetReadEvent() const {return fReadEntry;} virtual Long64_t GetSelectedRows() {return GetPlayer()->GetSelectedRows();} virtual Long64_t GetTotBytes() const {return fTotBytes;} virtual Long64_t GetZipBytes() const {return fZipBytes;} virtual Long64_t LoadTree(Long64_t entry); virtual Long64_t LoadTreeFriend(Long64_t entry, TTree *T); virtual Long64_t Merge(TCollection *list); TPrincipal *Principal(const char *varexp="", const char *selection="", Option_t *option="np" ,Long64_t nentries=1000000000, Long64_t firstentry=0); virtual Long64_t Process(const char *filename,Option_t *option="", Long64_t nentries=1000000000, Long64_t firstentry=0); // *MENU* virtual Long64_t Process(TSelector *selector, Option_t *option="", Long64_t nentries=1000000000, Long64_t firstentry=0); virtual Long64_t Project(const char *hname, const char *varexp, const char *selection="", Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); virtual TSQLResult *Query(const char *varexp="", const char *selection="", Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); virtual Long64_t Scan(const char *varexp="", const char *selection="", Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); // *MENU* virtual void SetDebug(Int_t level=1, Long64_t min=0, Long64_t max=9999999); // *MENU* virtual void SetEntries(Long64_t n); virtual void SetEstimate(Long64_t nentries=10000); virtual void SetMaxEntryLoop(Long64_t maxev=1000000000) {fMaxEntryLoop = maxev;} // *MENU* static void SetMaxTreeSize(Long64_t maxsize=1900000000); virtual void SetMaxVirtualSize(Long64_t size=0) {fMaxVirtualSize = size;} // *MENU* virtual void Show(Long64_t entry=-1, Int_t lenmax=20); virtual Long64_t UnbinnedFit(const char *funcname ,const char *varexp, const char *selection="",Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0); TTree::Streamer has been modified to real old files. TTree::Print has been modified to take into account the new data types. ClassDef version number incremented to 13. TVirtualTreePlayer ================== virtual TTree *CopyTree(const char *selection, Option_t *option="" ,Long64_t nentries=1000000000, Long64_t firstentry=0) = 0; virtual Long64_t DrawScript(const char* wrapperPrefix, const char *macrofilename, const char *cutfilename, Option_t *option, Long64_t nentries, Long64_t firstentry) = 0; virtual Long64_t DrawSelect(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry) = 0; virtual Long64_t Fit(const char *formula ,const char *varexp, const char *selection,Option_t *option ,Option_t *goption ,Long64_t nentries, Long64_t firstentry) = 0; virtual Long64_t GetSelectedRows() const = 0; virtual TPrincipal *Principal(const char *varexp="", const char *selection="", Option_t *option="np" ,Long64_t nentries=1000000000, Long64_t firstentry=0) = 0; virtual Long64_t Process(const char *filename,Option_t *option="", Long64_t nentries=1000000000, Long64_t firstentry=0) = 0; virtual Long64_t Process(TSelector *selector,Option_t *option="", Long64_t nentries=1000000000, Long64_t firstentry=0) = 0; virtual Long64_t Scan(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry) = 0; virtual TSQLResult *Query(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry) = 0; virtual void SetEstimate(Long64_t n) = 0; virtual Long64_t UnbinnedFit(const char *formula ,const char *varexp, const char *selection,Option_t *option ,Long64_t nentries, Long64_t firstentry) = 0; TTreeFormula ============ TLeaf* GetLeafWithDatamember(const char* topchoice, const char* nextchice, Long64_t readentry) const; Bool_t BranchHasMethod(TLeaf* leaf, TBranch* branch, const char* method,const char* params, Long64_t readentry) const; TTreePlayer =========== Long64_t fSelectedRows; // Number of selected entries virtual TTree *CopyTree(const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry); virtual Long64_t DrawScript(const char* wrapperPrefix, const char *macrofilename, const char *cutfilename, Option_t *option, Long64_t nentries, Long64_t firstentry); virtual Long64_t DrawSelect(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry); virtual Long64_t Fit(const char *formula ,const char *varexp, const char *selection,Option_t *option , Option_t *goption ,Long64_t nentries, Long64_t firstentry); virtual Long64_t GetSelectedRows() const {return fSelectedRows;} TPrincipal *Principal(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry); virtual Long64_t Process(const char *filename,Option_t *option, Long64_t nentries, Long64_t firstentry); virtual Long64_t Process(TSelector *selector,Option_t *option, Long64_t nentries, Long64_t firstentry); virtual Long64_t Scan(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry); virtual TSQLResult *Query(const char *varexp, const char *selection, Option_t *option ,Long64_t nentries, Long64_t firstentry); virtual void SetEstimate(Long64_t n); virtual Long64_t UnbinnedFit(const char *formula ,const char *varexp, const char *selection,Option_t *option ,Long64_t nentries, Long64_t firstentry); The generated code by TTreePlayer::MakeCode, MakeClass, MakeProxy uses Long64_t instead of Int_t TTreeViewer =========== Long64_t Process(const char* filename, Option_t *option="", Long64_t nentries=1000000000, Long64_t firstentry=0); // *MENU* void SetCurrentRecord(Long64_t entry); THbookBranch ============ virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0); virtual void SetEntries(Long64_t n) {fEntries=n;} THbookTree ========== virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0); virtual void InitBranches(Long64_t entry); virtual void SetEntries(Long64_t n); TProofDraw ========== virtual Bool_t Process(Long64_t /*entry*/); TProofPlayer ============ virtual Long64_t Process(TDSet *set, virtual Long64_t DrawSelect(TDSet *set, const char *varexp, Long64_t Process(TDSet *set, const char *selector, Long64_t DrawSelect(TDSet *set, const char *varexp, git-svn-id: http://root.cern.ch/svn/root/trunk@9615 27541ba8-7e3a-0410-8455-c3a389f83636