This page will contain some general information about the RootTreeWriter. For information about specific "engines" have a look here. The information available on this page should also be available in the doxygen documentation of the RootTreeWriter.
Bugs & Feature Requests
Please file bugs and feature requests on this wiki page.
The RootTreeWriter is a processor for MARLIN. The basic idea of the RootTreeWriter is to provide a framework which allows you to create ROOT trees with "event summary" information.
While tasks which need the complete or large fractions of an event -like all reconstructions tasks, computations of event properties, jet finding, etc.- should be implemented as MARLIN processors, for some taks it might be an advantage to create a ROOT tree which summarises the event. The typical use-case for the RootTreeWriter is a chain of MARLIN processors with the RootTreeWriter as the last processor.
Because the variables which are of interest and should be written to the ROOT tree depend strongly on the specific task the RootTreeWriter does not define the variables which are written to the ROOT tree, but leaves the task to extract the desired information from the event to the user. To use the RootTreeWriter the user has to implement one or more RootTreeWriter-engines. An engine is a piece of code which extracts/calculates a set of related variables from one single event. The RootTreeWriter in turn takes on the task to open the ROOT file, create the ROOT tree and call the individual engines.
Because the engines can be switched on and off in the steering file one can create a customised tree. However if an engine is shared between two or more users, these engines define standardised blocks in the resulting ROOT trees which clearly helps to compare and/or combine analyses and allows the users to exchange their ROOT trees without changing their analyses.
To create a new engine for the RootTreeWriter should be straight forward and is a good starting point for people new to LCIO/MARLIN as well as a convenient way to create ROOT trees from LCIO files for experienced users of LCIO. Up to now there are no predefined engines within the core package of the RootTreeWriter. Especially there are no predefined engines which dump complete LCIO collections to a ROOT tree. The reason for this is that task, which need the information of one (or more) complete LCIO collections should be implemented as a MARLIN processor and not in an external ROOT script 1. However, there are valid cases to dump large fractions of the information of LCIO collections into a ROOT. Writing an engine which performs this task can be written very quickly.
Although collecting engines and making a set of standardised engines available to a group of users desirable. Please tell me about your engines and/or send me the code to build up a set of "standard" engines. Some engines useful for the CALICE collaboration can be found here.
Getting the RootTreeWriter
While the development of the RootTreeWriter takes place in a git repository there is cvs repository in the afs (/afs/desy.de/group/flc/soft/softcvs; module: RootTreeWriter) which should be accessible for the world. Please report, if you have problems getting the source.
The RootTreeWriter has a cmake build system in the style of the ILC core software. There used to be a "gmake based" build system which is currently broken. If you need the make based build system, contact me, but have a good explanation, why you cannot use the cmake based build system :). For further details see the doxygen documentation.
The RootTreeWriter is licensed under a dual LGPL/BSD license. This should allow you to use the RootTreeWriter in every project. If there are license issues for using the RootTreeWriter in your project, please contact me.
Still any Questions?
Use the RootTreeWriter/Discussion page to leave comments and/or questions concerning the RootTreeWriter (no registration to this Wiki needed) or write an email to me: <joergen DOT samson AT desy DOT de>
Please don't just write such ROOT scripts just because it is more convenient. Such scripts are hard to maintain and even harder to be used by other users. Writing MARLIN processors is easy to learn and your hard work will live longer. (1)