Re: How to split object to diff. files ?

From: Nikolay I. Root (nroot@inp.nsk.su)
Date: Fri Jun 26 1998 - 01:36:00 MEST


Hi Rene.

I'm working in CMD2 collaboration. Our experiment -
e+e- collision at rho,omega,phi-mesons energies (formfactor pi).
Detector CMD2 consist of Drift Chamber, Z-chamber, barrel and endcaps
calorimetrs and mu-chambers. Typical raw event size - 1 - 1.5 KB.
After reconstruction - 6 - 8 KB. Recontructed events has
raw hits info + 'calibrated hits' + tracks & clusters summary.
'Calibrated hits' means conversion of 'drift time' to X,Y
and ADC counts to energy.
For last 5 year we take ~5 TB data on tapes. Our disks capacities - 
100 GB. 

>  - How many tracks do you expect per event
>  - How many hits per track
>  - How many hits in total

We have 2 tracks per event. One track has ~20 hits.
Also events contains 2-4 clusters with ~10 'crystals'/clust.

> 
> You can redirect a branch to a separate file via
>   TBranch::SetFile
> 
> My preference would be for a track class like
>   class Track : public TObject {
>     TArrayS  fListOfHits;  //array of indices in the hits TClonesArray
>     Float_t  fChi2; etc
> 

That means that I need to re-implement (near) the all methods from
TSortedList. But what about code reuse and OO ?
In principal, I can design some HitsSortedList to mountain indicies
to hits in TClonesArray to save space - just to reimplement Streamer.

But I want to have

class Track   : HitsSortedList {...}
class Cluster : HitsSortedList {...}
and so on ...

and my question was - how to create TBranch on the 'base' part
of object.

I want to separate 'hits' and 'indecies to hits' in file1
and 'summary info' in other file2.
'file1' - contains 'unsplitted' compressed objects and located
on tapes. This files for calibration, efficiency estimation and so on.
'file2' - has 'splitted' objects - events database.
Basicaly - this files for analises and for events selection
from 'file1'.
That's another question - how to separate 'background events'
and 'good events' to speed up events lookup.

Now my estimation shows me that I can to keep on disks
all user's and standard 'TEventsLists' +
'essential part of summary info' for all events
(Ntracks,Nclusters,Etotal... - to produce other 'TEventsLists') +
'full summary info' for standard selection (bhabha, K+K- ...) +
'selected hits' for calibrations.
All other info - on tapes.

Now we have analog of 'TEventsList' and 'events database' files
in one format, 'summary info' - hbook files and
'hits' - FZ-files. ==> too many tools (and steps) to handle this...

If its right that 'root' opens a files (in branches) ONLY when needed ->
we can hide all details from end user.
For this I need to derive CMD2EventsList from TEventsList to
handle 'file event number' i <-> (NRUN,NEVENT) and trap
'un-existing' files exceptions.
For batch jobs - in one way (lookup in tape archive and reading from tape),
for intractive - other way (error or warning message).
This way - transparant for user : I just need to attach 'eventlist'
to 'tree' in interactive job to avoid warnings about 'unexisting event'
to work with disk files.
Also I can produce new 'eventlist' from 'events DB' and use root
(with the same macros!) in batch mode to add 'summary info' (may be with 
'hits') from tapes to disks files. ==> only one tool for all steps !

Best regards,

                               Nikolay Root
                               BINP, Novosibirsk
                               email : nroot@inp.nsk.su



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:34 MET