{\bfseries Marlin [Modular Analysis and Reconstruction for the L\-I\-Near collider]} is a simple modular application framework for analysis and reconstruction code based on L\-C\-I\-O.\subsection*{Overview}

The main purpose of Marlin is to facilitate the modular development of reconstruction and analysis code based on L\-C\-I\-O. As a lot of different groups are involved it should be simple and straight forward to have distributed development of modules and combine existing modules as needed in a larger application. \par
 The base class for a Marlin module is called \doxyref{marlin\-::\-Processor}{p.}{classmarlin_1_1Processor}. It defines a set of callbacks that the user can implement in their subclasses. A steering file mechanism allows to activate the needed processors. These are then called for every event using the L\-C\-Event as container for input and output data in terms of L\-C\-Collections\-:



\subsection*{Installation}

The installation of Marlin is described in the {\tt R\-E\-A\-D\-M\-E}. {\bfseries Note that since v00-\/09-\/08 the default build process has been changed to use C\-Make and create shared libraries. This allows for a flexible plugin mechanism that does not involve recompiling and relinking of Marlin and the needed packages if only one package is changed !}

\subsection*{Running Marlin}

After having installed Marlin you have to write your own \doxyref{marlin\-::\-Processor(s)}{p.}{classmarlin_1_1Processor} subclass that performs the computation. This is fairly straight forward and Marlin provides an example in \char`\"{}\$\-M\-A\-R\-L\-I\-N/examples/mymarlin\char`\"{} that can serve as a template for your own projects. 

Note\-: there is no need to write a main program as this is provided by Marlin. Existing Processors are automatically registered with Marlin provided one instance exists in the library as described in the {\tt R\-E\-A\-D\-M\-E}.

\subsubsection*{Steering files}

A Marlin application is controlled via a steering file that defines the active processors and the order in which they are called as well as global and processor specific parameters. The default format of the steering files is xml (older ascci steering files are still supported for a transition period)

\paragraph*{X\-M\-L steering files}

You can get an example X\-M\-L steering file with\-: 
\begin{DoxyItemize}
\item {\bfseries ./bin/\-Marlin -\/x $>$ example.\-xml}  
\end{DoxyItemize}The X\-M\-L steering files provide the following features\-: 
\begin{DoxyItemize}
\item definition of the program flow (order of processors to be executed) 
\item global parameters 
\item processor parameters 
\item conditional execution of processors (depending on flags set by other processors) 
\item grouping of processors sharing common parameters 
\end{DoxyItemize}

See \doxyref{marlin\-::\-X\-M\-L\-Parser}{p.}{classmarlin_1_1XMLParser} for a detailed description of the xml steering files.

The application is run by\-: 
\begin{DoxyItemize}
\item {\bfseries ./bin/\-Marlin example.\-xml}  
\end{DoxyItemize}

\paragraph*{Old Ascii steering files}

You can convert old ascii steering files to xml steering files by typing\-: 
\begin{DoxyItemize}
\item {\bfseries ./bin/\-Marlin -\/o old.\-steer new.\-xml }  
\end{DoxyItemize}

\paragraph*{Other commands }

You can get a list of all supported command line options with 
\begin{DoxyItemize}
\item {\bfseries ./bin/\-Marlin -\/h }  
\end{DoxyItemize}This will create the following output\-: 
\begin{DoxyPre}
 Usage: Marlin [OPTION] [FILE]...
   runs a Marlin application\end{DoxyPre}



\begin{DoxyPre} Running the application with a given steering file:
   Marlin steer.xml\end{DoxyPre}



\begin{DoxyPre}   Marlin -h                     print this help information
   Marlin -?                     print this help information
   Marlin -x                     print an example steering file to stdout
   Marlin -c steer.xml           check the given steering file for consistency
   Marlin -f old.xml new.xml     convert old xml files to new xml files for consistency check
   Marlin -o old.steer new.xml   convert old steering file to xml steering file
   Marlin -l                     [deprecated: old format steering file example]
   Marlin -d steer.xml flow.dot  create a program flow diagram (see: {\tt http://www.graphviz.org})\end{DoxyPre}



\begin{DoxyPre} Example:
 To create a new default steering file from any Marlin application, run
     Marlin -x > mysteer.xml
 and then use either an editor or the MarlinGUI to modify the created steering file
 to configure your application and then run it. e.g. :
     Marlin mysteer.xml > marlin.out 2>\&1 \&\end{DoxyPre}



\begin{DoxyPre}\end{DoxyPre}


\subsubsection*{Release Notes}

Marlin is under development and there are frequent releases. Please check the {\tt ./release.notes}



 

If you have any questions or proposals for new features please contact the author\-:

{\tt frank.\-gaede@desy.\-de} 