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