Hi,
this is kind of a recurring problem (see also "I have some static var,
and I don't want that to be stored in each event"). I can think of two
possible solutions for that, as long as MyParameter derives from
TObject. I believe I've even used both of them once...
a) Create a class MyWorld that contains both your TTree and some
container of MyParameter objects.
b) If you store the TTree in a file, also store a container of
MyParameters in this file.
In the MyEvent objects which are stored in TTree, store TRefs to
MyParameter objects instead of MyParameter*s. If you don't have a good
reason for choosing option b), use option a) - in my point of view it's
much "cleaner" (expandable, TBrowsable, thread-safe, independent of open
files, error handeling is far easier etc).
By the way: If your parameter set is the same for the whole tree you
obviously don't need a _container_ of MyParameter objects. You don't
even need to store the TRefs (i.e.: you don't need to store any
reference to a MyParameter object in MyEvent), instead you should write
a MyEvent::GetParameter which retrieves the one and only parameter set
(case a: forward to some MyWorld::GetParameter(), case b: make
MyParameter a singleton, which reads itself once from MyWorld's
TTree::GetFile()).
Hope that works and helps,
Axel.
Ole Streicher wrote:
>Hi!
>
>Sorry for filling the list up with questions ;-)
>
>How can I store objects in a TTree which are not local to an event?
>Example: I have a class that stores a set of parameters and a class
>that stores the event.
>
>class MyParameter {
> private:
> int p1[10000];
>//...
> ClassDef(MyParameter,1)
>};
>
>class MyEvent {
> private:
> MyParameter* par;
> MyTrack *track;
>//...
> ClassDef(MyEvent,1)
>};
>
>Now, I have two Parameter sets "MyParameter par1, par2;", and I want
>-- based on some algorithm -- to put into my event either a link to
>par1 or par2. The problem here is that I want ofcourse not the
>complete parameter set to be stored in each event, but each different
>parameter set should be stored only once.
>
>How do I do that? I found no option that allows me to distinguish
>between data that are stored within each event (like the track in the
>example above) and which are stored only once.
>
>Ole
>
>
>
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:06 MET