LCIO is the event data model of Marlin and thus of MarlinTPC. It defines the data classes which are stored, for instance a lcio::TrackerHit , which is a reconstructed 3D hit with spatial coodrinates and the deposited charge. All these objects are derived from lcio::LCObject.

LCIO objects are stored in so called lcio::LCCollections. Each collection contains LCObject of a certain kind, for instance lcio::TrackerHits. Each collection has a user given name which should describe which sort of data is stored.


  • A collection with TrackerHits from the TPC is called TPCHits
  • Another collecton, also containing TrackerHits but from a silicon hodoscope, whould be called HodoscopeHits
  • A collection with lcio::Tracks from the TPC standalone reconstruction could be alled TPCTracks, while the final tracks from both TPC and silicon hodoscope might be named Tracks.

A lcio file consists of a sequence of lcio::LCEvents which contain all the collections which have been reconstructed.


Event Nr Collection Name Collection Type
TPCHits lcio::TrackerHit
TPCTracks lcio::Track
TPCHits lcio::TrackerHit
TPCHits lcio::TrackerHit
TPCTracks lcio::Track
The events don't necessarily have the same collections. In the second event for instance no tracks have been found, which means there is no TPCTracks collection.


Marlin is a framework to reconstruct and analyse lcio data. It works on an event by event basis and opens the lcio files for you, provides GEAR geometry data and condiditons data from the Linear Collider Conditions Data toolkit (LCCD).

The individual computing tasks are implemented as so called Processors, which allows good modularity of the code. The processor gets an lcio event and its processEvent method is called. This can modify the event and add collections.

To use the MarlinTPC processors you have to set the MARLIN_DLL variable (see Compiling MarlinTPC, section Compiling with cmake, item D).

Steering Files

Marlin is controlled by steering files. In these files it it defined which lcio files to process and which processors to use, as well as the steering parameters for the individual processors.

Example: Searching for straight tracks using a hough transformation (TrackFinderHoughTrafoProcessor):

  <processor name="MyTrackFinderHoughTrafoProcessor"/>
  <processor name="MyLCIOOutputProcessor"/>  

  <parameter name="LCIOInputFiles"> TPCHits.slcio </parameter>
  <parameter name="Verbosity" options="DEBUG0-4,MESSAGE0-4,WARNING0-4,ERROR0-4,SILENT"> WARNING0  </parameter> 

 <processor name="MyLCIOOutputProcessor" type="LCIOOutputProcessor">
 <!--Writes the current event to the specified LCIO outputfile. Needs to be the last ActiveProcessor.-->
  <!-- name of output file -->
  <parameter name="LCIOOutputFile" type="string">TPCHits_and_TrackCandidates.slcio </parameter>
  <!--write mode for output file:  WRITE_APPEND or WRITE_NEW-->
  <parameter name="LCIOWriteMode" type="string">WRITE_NEW </parameter>

 <processor name="MyTrackFinderHoughTrafoProcessor" type="TrackFinderHoughTrafoProcessor">
 <!--TrackFinderHoughTrafoProcessor uses the hough transformation to find hits on track, track parameters can be used as starting values for the TrackFitter-->
  <!--Name of the input collection-->
  <parameter name="InputCollectionName" type="string" lcioInType="TrackerHit">TimePixHits </parameter>
  <!--Maximum distance of a hit to the track in mm-->
  <parameter name="MaximumDistanceToTrack" type="double">0.5 </parameter>
  <!--minimum number of hits on one track-->
  <parameter name="NHitsOnTrack" type="int">5 </parameter>
  <!--Name of the output collection-->
  <parameter name="OutputCollectionName" type="string" lcioOutType="Track">TimePixTrackCandidates </parameter>
  <!--if not 0 the output collection is set transient-->
  <parameter name="SetOutputTransient" type="int">0 </parameter>

Although this is a very simple example it is already quite long. Let's go through the XML file step by step.
  • After the starting <marlin> tag there is the <execute> section. Here every processor which is going to be executed is listed. In this case it's only two processors: The track finder and the LCIOOutputProcessor.
  • The second section is the global Marlin configuration ( <global> ). In this example only the two most important parameters are set:
    • The name of the lcio input file
    • The verbosity level. Marlin uses a streamlog system which defines vebosity levels from DEBUG0 (most verbose) to ERROR4 (only the most important errors). SILENT suppresses all output. The example level WARNING0 shows all warnings and errors.
  • The following sections configures the individual processors. For each processor there is one section which defines it's parameter (to be correct one section for each instance o the processor. One can run the same processor several times with different parameters. This is why in the <execute> section the user specified name myLCIOOutputProcessor is given instead of the processor type ( LCIOOutputProcessor ).
    • The myLCIOOutputProcessor instance of the LCIOOutputProcessor gets the name of output file (cannot be the same as the input file) and the write mode (WRITE_NEW).
    • Data processors like the TrackFinderHoughTrafoProcessor usually work on specific collection. These collection names (usually one input and one output collection) are specified in this section. The TrackFinderHoughTrafoProcessor also needs some additional parameters: The minimal number of hits to accept the track, and the maximal allowed distance of a hit from the track. They are also defined in this section.


There are more complete examples which come together with MarlinTPC. See Example Steering Files section for more details.

Reconstruction Work Flow

Up to now MarlinTPC consists of more than 50 Processors from which you plug together the task you want to perform. The following coarse view of the possible reconstruction flows is not complete, for instance a track seeder is missing before the track fitter. For information about the individual Processors please refer to the doxygen documentation.
  • Coarse view of the reconstruction flow:
FIXME: Improve information about reconstruction flow and available processors.

-- MartinKillenberg - 25 Jul 2008

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng reconstruction6.png r1 manage 304.7 K 2008-07-25 - 11:45 MartinKillenberg Coarse view of the reconstruction flow
Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r4 - 2008-07-25 - MartinKillenberg
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    ILCTPC All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback