[ROOT] Re: TTree question

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Jan 27 2001 - 23:04:11 MET


Hi Anton,
In split mode a branch cannot contain basic type such as strings.
See the list of limitations at:
  http://root.cern.ch/root/HowtoWriteTree.html

This limitation is about to be removed with the new TTree split
mechanism that I am currently testing. Your class will be easily
split by the new algorithm.

Rene Brun


On Sat, 27 Jan 2001, Anton Fokin wrote:

> Hi,
> 
> I am trying to improve I/O in my package and I have a number of questions
> about TTree performance.
> 
> I store objects of THistoricalData class (see below) in a tree. One of
> THistoricalData fields is of TDate class (see below). TDate holds number of
> days from day zero, fNDays, which is UInt_t. Before it was ULong_t and it
> cused warning in the split mode (see Eddy Offerman mail/Rene reply). Now I
> have changed it to UInt_t but I still get a warning:
> 
> Loading data for COMPX (Nasdaq Combined Composite Index)
> Warning in <TTree::Branch>: Cannot process member:fDate
> 
> 1. Could you please explain this.
> 
> 2. If I use non-split mode and set file compression level to 0, I see that
> the file is filled up with "THistoricalData" strings, I suppose for every
> entry in the tree. This makes 5 MB file out of ~800KB binary data I am
> loading into the tree. Do you really write class label for every entry, not
> only for the branch???
> 
> PS. in the split mode I get 12Mb !!!! file out of the same 800KB but this I
> would not blame before I clarify my question about warning message for
> fNDays field.
> 
> Regards,
> Anton
> 
> class THistoricalData : public TObject {
> public:
> enum EDataOption {
>   kOK,
>   kNotAvailable,
>   kInterpolated
> };
> protected:
>   TDate   fDate;       // Date
>   Float_t fBid;        // Bid
>   Float_t fAsk;        // Ask
>   Float_t fHigh;       // High
>   Float_t fLow;        // Low
>   Float_t fClose;      // Close
>   UInt_t  fVolume;     // Volume
>    Int_t  fOption;     // Option
> public:
>           THistoricalData();
>           THistoricalData(TDate Date, Float_t Bid, Float_t Ask, UInt_t
> Volume, Int_t Option = kOK);
>           THistoricalData(TDate Date, Float_t High, Float_t Low, Float_t
> Close, UInt_t Volume, Int_t Option = kOK);
> 
>     TDate GetDate()   { return fDate;   }
>   Float_t GetBid()    { return fBid;    }
>   Float_t GetAsk()    { return fAsk;    }
>   Float_t GetHigh()   { return fHigh;   }
>   Float_t GetLow()    { return fLow;    }
>   Float_t GetClose()  { return fClose;  }
>    UInt_t GetVolume() { return fVolume; }
>     Int_t GetOption() { return fOption; }
> 
>   Float_t GetPrice(Int_t Option = TFinObject::kTypicalPrice);
> 
>      void Set(TDate Date, Float_t Bid, Float_t Ask, UInt_t Volume, Int_t
> Option = kOK);
>      void Set(TDate Date, Float_t High, Float_t Low, Float_t Close, UInt_t
> Volume, Int_t Option = kOK);
> 
>      void SetDate(TDate Date)       { fDate   = Date;   }
>      void SetBid(Float_t Bid)       { fBid    = Bid;    }
>      void SetAsk(Float_t Ask)       { fAsk    = Ask;    }
>      void SetHigh(Float_t High)     { fHigh   = High;   }
>      void SetLow(Float_t Low)       { fLow    = Low;    }
>      void SetClose(Float_t Close)   { fClose  = Close;  }
>      void SetVolume(UInt_t Volume)  { fVolume = Volume; }
>      void SetOption(Int_t Option)   { fOption = Option; }
> 
>      void Print(const char* Option = "");
> 
>   ClassDef(THistoricalData, 100) // Daily historical data
> };
> 
> #endif
> 
> 
> class TDate : public TObject {
>  public:
>                           TDate();
>                           TDate(TMonth Month, Int_t Day, Int_t Year);
>                           TDate(Int_t DayOfYear, Int_t Year);
>                           TDate(const TDate &Date);
>                           TDate(UInt_t DayNumber);
>                           TDate(const char* Date, const char* Pattern =
> "yymmdd");
>                           TDate(UInt_t Date, const char* Pattern);
>                           TDate(const struct tm *Date);
> 
>         TDate             AddMonths(Int_t MonthNumber);
>         TDate             AddWeeks(Int_t WeekNumber);
>         TDate             AddYears(Int_t YearNumber);
>         TDate             BeginDST();
>         static TDate      BeginDST(Int_t Year);
>         Int_t             Day();
>         UInt_t           DayNumber();
>         TWeekDay          DayOfWeek();
>         Int_t             DayOfYear();
>         Int_t             DaysInMonth();
>         static Int_t      DaysInMonth(TMonth Month, Int_t Year);
>         Int_t             DaysInYear();
>         static Int_t      DaysInYear(Int_t Year);
>         TDate             EndDST();
>         static TDate      EndDST(Int_t Year);
>         Bool_t            IsDST();
>         static Bool_t     IsDST(TDate &Date);
>         Bool_t            IsLeapYear();
>         static Bool_t     IsLeapYear(Int_t year);
>         Bool_t            IsValid();
>         static Bool_t     IsValid(TMonth Month, Int_t Day, Int_t Year);
>         TMonth            Month();
> 
>         Bool_t            operator!=(const TDate &Date) const;
>         TDate             operator+(Int_t DayNumber) const;
>         TDate             operator+(long DayNumber) const;
>         TDate             operator++();
>         TDate             operator++(int);
>         TDate&            operator+=(Int_t DayNumber);
>         TDate&            operator+=(long DayNumber);
>         long              operator-(const TDate &Date) const;
>         TDate             operator-(Int_t DayNumber) const;
>         TDate             operator-(long DayNumber) const;
>         TDate             operator--();
>         TDate             operator--(int);
>         TDate&            operator-=(Int_t DayNumber);
>         TDate&            operator-=(long DayNumber);
>         Bool_t            operator<(const TDate &Date) const;
>         Bool_t            operator<=(const TDate &Date) const;
>         TDate&            operator=(const TDate &Date);
>         Bool_t            operator==(const TDate &Date) const;
>         Bool_t            operator>(const TDate &Date) const;
>         Bool_t            operator>=(const TDate &Date) const;
> 
> //        TDate&            operator=(const UInt_t DayNumber);
>         Bool_t            operator==(const UInt_t DayNumber) const;
>         Bool_t            operator!=(const UInt_t DayNumber) const;
> 
> //        static void       SetBeginDST(TMonth Month, TWeekDay WeekDay);
> //        static void       SetEndDST(TMonth Month, TWeekDay WeekDay);
>         static TDate      Today();
>         Int_t             WeekOfMonth();
>         Int_t             WeekOfYear();
>         Int_t             WeeksInYear();
>         static Int_t      WeeksInYear(Int_t Year);
>         Int_t             Year();
> 
>         UInt_t            Convert();
>         TString           AsString();
>         void              Print(const char* Option = "");
> 
>         // Pope Gregor XIII's reform cancelled 10 days:
>         // the day after Oct 4 1582 was Oct 15 1582
>         static const Int_t    ReformYear;
>         static const TMonth   ReformMonth;
>         static const UInt_t  ReformDayNumber;
> 
> protected:
>         // Daylight Savings Time Month and Day of Week
>         static TMonth   BeginDSTMonth;
>         static TWeekDay BeginDSTDay;
>         static TMonth   EndDSTMonth;
>         static TWeekDay EndDSTDay;
> 
> protected:
>              TDate  Set(TMonth Month, Int_t Day, Int_t Year);
>            UInt_t  MakeDayNumber(TDateEntry *DateEntry);
>         TDateEntry* FromDayNumber(UInt_t DayNumber);
> 
> private:
>         UInt_t fDayNumber;
> 
> 
>   ClassDef(TDate, 100) // Date manipulation
> };
> 
> 
> 



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:34 MET