]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/Documentation/AliFemto.tex
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / Documentation / AliFemto.tex
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %
3 % AliFemto Documentation - User Guide and Reference Manual -- LaTeX source
4 %  ALICE Experiment Femtoscopic Analysis framework
5 %  Mike Lisa 17 May 2006
6 % [Based on similar document for StHbt (STAR framework), Mike Lisa 22 May 2006]
7 %
8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9 \documentclass[twoside]{article}
10
11 \newcommand {\DocumentVersionNumber} {1.1}  %%% this is the Version Number
12
13
14 \usepackage{natbib}
15
16
17 %\usepackage[T1]{fontenc}
18 %\renewcommand*\ttdefault{txtt}
19 %\renewcommand*\familydefault{\ttdefault}
20
21
22
23 \parindent 0pt
24 \parskip 6pt
25 \advance\textwidth by 80pt%
26 \advance\evensidemargin by -80pt%
27
28 %\renewcommand{\familydefault}{cmss}
29
30 \usepackage{epsfig}
31 %%%%%%\usepackage{pdffig}
32
33
34 \usepackage{graphicx}
35 \usepackage{psboxit}
36 \usepackage{color}
37 \usepackage{amsmath}
38 \usepackage{amssymb}
39 \usepackage{fancyhdr}
40 \usepackage{times}
41 \usepackage{verbatim}
42 \usepackage{makeidx}
43 \usepackage{subfigure}
44 %%%\usepackage[dvips=true,hyperindex=true,colorlinks=true,linkcolor=blue,bookmarks=true]{hyperref}
45 \usepackage[hyperindex=true,colorlinks=true,linkcolor=blue,bookmarks=true]{hyperref}
46
47 \PScommands      % init boxit
48 \makeindex
49
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
51 %
52 % Define header and footer style
53 %
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55 \pagestyle{fancyplain}
56 \rhead[\fancyplain{}{\bfseries\leftmark}]
57       {\fancyplain{}{\bfseries\rightmark}}
58 \lhead[\fancyplain{}{\bfseries\rightmark}]
59       {\fancyplain{}{\bfseries\leftmark}}
60 \rfoot[{}]{\fancyplain{}{\bfseries\thepage}}
61 \lfoot[\fancyplain{}{\bfseries\thepage}]{}
62 \cfoot{}
63
64 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 %
66 % Typographic Conventions
67 %
68 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69 \newcommand{\name}[1]{\textsf{#1}}%  or class-, function-, package names
70 \newcommand{\comp}[1]{\texttt{#1}}%  computer font
71 \newcommand{\args}[1]{\textit{#1}}%   command arguments
72 \newcommand{\meth}[1]{\textsf{#1}}%  class methods
73 %%%
74 %%% font for package names
75 %%%
76 \newcommand{\AliEn}{{\tt AliEn }}
77 \newcommand{\AliFemto}{{\tt AliFemto }}
78 \newcommand{\AliRoot}{{\tt AliRoot }}
79 \newcommand{\ROOT}{{\tt ROOT }}
80 \newcommand{\StHbt}{{\tt StHbt }}
81 \newcommand{\cvs}{{\tt StHbt }}
82
83
84 %% removed a bunch of unused (?) \newcommand statements
85
86
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
88 %
89 % Define multiline labels for class reference
90 %
91 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
92 \newcommand{\entrylabel}[1]{\mbox{\textbf{{#1}}}\hfil}%
93 \newenvironment{entry}
94 {\begin{list}{}%
95     {\renewcommand{\makelabel}{\entrylabel}%
96      \setlength{\labelwidth}{90pt}%
97      \setlength{\leftmargin}{\labelwidth}
98      \advance\leftmargin by \labelsep%
99       }%
100     }%
101   {\end{list}}
102
103 \newcommand{\Entrylabel}[1]%
104 {\raisebox{0pt}[1ex][0pt]{\makebox[\labelwidth][l]%
105     {\parbox[t]{\labelwidth}{\hspace{0pt}\textbf{{#1}}}}}}
106 \newenvironment{Entry}%
107 {\renewcommand{\entrylabel}{\Entrylabel}\begin{entry}}%
108   {\end{entry}}
109
110
111
112 %%%
113 %%% font for AliFemto class/method/attribute names
114 %%% ---- at some point, let's find some nice font...
115 %%% 
116 \newcommand{\acf}[1]{{\tt \bf #1}}
117
118 \begin{document}
119
120 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
121 %
122 %    Title page
123 %
124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
125 \begin{titlepage}
126 \pagestyle{empty}
127 \vspace*{-35mm}
128 \begin{center}
129   {\Large\bf AliFemto - A Femtoscopic Analysis Framework for ALICE}
130   \hfill\mbox{}\\[4.5cm]
131 \mbox{\includegraphics[width=\textwidth]{AliFemtoTitle.pdf}}
132   \hfill\mbox{}\\[8cm]
133   {\LARGE User Guide and Reference Manual}\\[2cm]
134   {\LARGE Revision \DocumentVersionNumber}  \\[5mm] 
135   {\LARGE \today}  % replaced by cvs with current revision  
136   \vfill
137 \end{center}
138 \cleardoublepage
139 \end{titlepage}
140 \pagenumbering{roman}
141
142 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143 %
144 %    Table of contents
145 %
146 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147 \tableofcontents
148 %\cleardoublepage
149 \clearpage
150
151 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
152 %
153 %    User Guide
154 %
155 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
156 \pagenumbering{arabic}
157
158
159 \setcounter{section}{-1}
160 \section{About this document}
161
162 This is the Users' Guide and Reference Manual for the \AliFemto software package,
163 for use in the ALICE experiment at the Large Hadron Collider.
164 The femtoscopy analysis effort in ALICE is in the Physics Working Group 2.  Thus,
165 the software described here may be found in the {\tt PWG2/FEMTOSCOPY } area when
166 \AliRoot is checked out.
167
168 The files (.tex, .pdf, etc.) for this documentation are cvs-controlled along with
169 the \AliFemto code in the ALICE repository under the {\tt PWG2/FEMTOSCOPY/Documentation } area.
170 While earth-moving changes in the framework are not anticipated, this manuscript will be to some
171 extent a ``living document.''  The reposisory version of the documentation
172 should be considered the ``official'' source of information on the package at any given time.
173
174 This document consists of two parts.  The Users' Guide introduces the package and, perhaps most
175 interestingly to the reader, provides a blow-by-blow example of its use.  The Reference Manual
176 is essentially a listing and short description of the classes and the limited inheritance
177 scheme.
178
179 \AliFemto will often be run in a larger framework than a simple \ROOT or \AliRoot session, e.g.
180 \AliEn and the Task-Train framework in ALICE.  This manual focusses only on \AliFemto itself.
181 For tutorials on how to run \AliFemto within these contexts, see
182 the ALICE femtoscopy web pages\\
183  {\tt http://aliceinfo.cern.ch/Collaboration/PhysicsWorkingGroups/PWG2/Femtoscopy/}.
184
185
186
187
188 \clearpage
189
190 \part{Users' Guide}
191 \clearpage
192
193
194 \section{Introduction - Basics and Motivation}
195
196
197 Femtoscopy-- the measurement of the space-time structure of dynamic systems at the fermi scale--
198 is an integral tool in studies in high-energy particle (e.g. p+p) and heavy ion (e.g. Pb+Pb)
199 collisions.  It can also be a non-trivial, somewhat subtle tool, with nonobvious experimental
200 ``traps'' which are periodically redisovered as expertise evaporates and algorithms are lost.
201
202 Especially in large modern high energy experimental collaborations, complex experimental
203 issues impact on this already-delicate tool.  Furthermore, by the nature of such collaborations,
204 ``Physics Working Groups'' (PWGs) are commonly formed, in which several collaborators work on
205 similar physics topics (e.g. femtoscopy) which share common techniques and problems.  Sharing
206 of experience and
207 solutions among PWG members is invaluable to work through problems quickly and to assure quality
208 and consistency in physics results.  In addition to regular discussions by phone/vrvs/email, sharing
209 a common software analysis infrastructure allows for rapid and collaborative development, testing
210 and sharing of solutions.  Production of quality physics results in a timely manner demands the
211 use of all available collaborative tools; while cross-checks are always crucial to an analysis,
212 re-creating the many aspects of a wheel is sometimes a (all-too-common) waste of valuable manpower.
213
214 Just as code-sharing {\it within} a collaboration or PWG is desirable when analysis techniques
215 are similar, code-sharing {\it between} collaborations or PWGs may be equally beneficial, if the
216 similarities are sufficiently great.  Code reusability is often claimed as one of the most important
217 benefits of well-designed object-oriented programming.  Through the development of standardized tools
218 and inheritance schemes, high-energy physics has largely moved away from perpetual re-implementation
219 of established algorithms.  
220 Previously, the student who needed a particular ``twist'' to, say a resonance-finding technique,
221 would often find it easiest to start from scratch in a self-contained Fortran code.  This was due
222 to the fact that the {\it previous} student's Fortran code lacked extensibility; e.g. interfaces
223 and common blocks were specialized for a particular, narrow purpose.  With care, languages such as
224 C++ provide a natural solution.  The student can focus on {\it new} aspects of her problem (the purpose,
225 after all, of research) and the science behind it.  The {\it same} objects and elements of the {\it same} 
226 code, developed and refined by others, are at her disposal; likewise, she will make her own contributions
227 and everybody benefits.
228 Likewise, so long as the detector and reconstruction configurations of two experiments 
229 are sufficiently similar, both collaborations may benefit by sharing some code.
230
231 This document discusses a two-particle correlation software package for use in the ALICE experiment
232 at the LHC.  It is based largely on the framework (StHbt) used since 1999 in the STAR experiment at
233 RHIC, an experiment remarkably similar to ALICE in all respects.  StHbt, itself, was developed by
234 femtoscopy experts from earlier heavy ion experiments at the AGS and SPS; as such, it distills the
235 generic features of any heavy ion femtoscopic analysis.  The femtoscopy group in ALICE is arguably
236 the most complete collection of the world's experts in this sub-field ever assembled.  It is hoped
237 that this common analysis software will enable a maximum positive superposition of the experience
238 of these experts.
239
240
241 \subsection{Femtoscopy, HBT, and heavy ions}
242
243 The feature distinguishing heavy ion from particle physics is the dominance of space-time
244 geometry.  
245 This is manifest in the fact that we seek the geometrically-largest systems in order to approximate
246 the infinite system in which thermodynamic variables and phases of matter become meaningful.
247 At all stages of the the dynamic system's evolution, geometry rules.
248 The geometric overlap anisotropy of the entrance channel is known to dominate the subsequent
249 evolution of the bulk, and focusing systematics of geometric entrance-channel quantities
250 (e.g. reaction-plane, impact parameter) yields much more information than geometric averages
251 over these quantities.  In the intermediate stage of the collision, path-lengh considerations
252 are crucial to determine the physics of so-called ``jet quenching'' at the highest energies.
253 Further, we seek a system in which coloured degrees of freedom
254 are relevant over ``large'' length scales.  Much of the dynamic bulk physics is reflected in the
255 end freeze-out stage in collective observables (e.g. flow) which are usually defined in terms
256 of space-momentum correlations.
257 Clearly, geometry is a key defining feature of our field; momentum space alone is less than
258 half the story.
259
260 However, particle momentum is precisely what we measure.  Geometrical information must be
261 inferred.  The most direct and common method of doing so is through femtoscopy, the use of
262 two-particle momentum-space correlations to probe fermi-scale emission zones.  Experimental
263 and theoretical aspects of femtoscopy are discussed at length
264 elsewhere~\citep[][and references within]{Lisa:2005dd}.  Without becoming mathematical, the
265 main point is to measure the increase (or decrease) of the likelihood of measuring a particle
266 with a particular momentum, given the presence of another particle; in other words, the effect
267 on the conditional probability.  The effect to be measured is driven by the two-particle wavefunction, which
268 depends on relative momentum (measured) and relative position (inferred).  The probability $A$
269 as a function of a measured relative quantity (typically relative momentum 
270 ${\bf q}$, so $A \sim dN/d{\bf q}$) is usually dominated by detector acceptance and single-particle
271 phasespace; the modification due to two-particle effects represent only a small perturbation.
272 Thus, some sort of comparison to a reference distribution $B({\bf q})$ is usually performed.
273 Ideally, $B$ contains all single- and two-particle acceptance and efficiency effects and lacks
274 only the sought-for correlation.  The distribution $B$ is often generated by so-called ``mixed-event''
275 techniques, and the correlation function $C$, ideally containing only 2-particle
276 correlations due to the relative wavefunction, given by
277 \begin{equation}
278 \label{eq:usualC}
279 C({\bf q})=\frac{A({\bf q})}{B({\bf q})}
280 \end{equation}
281 It should be stressed, however, that neither using ${\bf q}={\bf p_1}-{\bf p_2}$ as a two-particle
282 variable, generating histrograms/distributions $A$ or $B$, nor taking any ratio $C$ must be associated
283 with a correlation analysis, in general.  See Section~\ref{sec:bones} below.
284
285 Briefly, some terminology which the reader may encounter.  Two-particle femtoscopic measurements
286 are related to the pioneering work of Hanbury-Brown and Twiss over half a century ago, to measure
287 the angular size of stars~\cite{HanburyBrown:1954}.  (The relationship, however, is somewhat more
288 oblique than often realized.)  Thus, similar analyses in high-energy physics
289 are often referred to as ``HBT'' studies.  For reference,
290 the first actual application to high-energy physics was performed by Goldhaber, Goldhaber,
291 Lee and Pais~\cite{Goldhaber:1960sf} shortly thereafter; thus correlations for pions reflect
292 the ``GGLP effect.''  The rubrik of femtoscopy~\cite{Lednicky:2002fq} is nowadays
293 used in general.
294
295
296
297
298 \subsection{The bones of a femtoscopic analysis}
299 \label{sec:bones}
300 Similar algorithmic requirements and characteristics appear in a wide range of femtoscopic (and non-femtoscopic)
301 analyses.  AliFemto was designed as a common analysis framework for collaborators conducting diverse
302 analyses sharing nevertheless a large overlap of techniques.
303
304 The design was driven by asking two questions: ``What {\it is} a femtoscopy-style analysis, in general?'' and
305 ``What sorts of actions will be common to most analyses and what sorts will be person-specific?''  
306
307 The first question may be answered with the following rough procedure.  Names of class types inside square brackets []
308 are discussed in Sections~\ref{sec:AliFemtoDiagramEtc} and~\ref{sec:coreUser}.
309
310 \begin{enumerate}
311 \item\label{it:read}  Obtain an event (usually, data associated with one collision) from somewhere. [\name{AliFemtoEventReader}]
312 \item\label{it:write} (Optional) Write the event (or portions thereof) to a file,                       [\name{AliFemtoEventReader}]\\
313                       The output file does not neccessarily use the same format as the input.
314 \item\label{it:EvCut} Decide to use or discard (``cut on'') the event in the analysis.               [\name{AliFemtoEventCut}]
315 \item\label{it:TrCut} Select (``cut on'') the particles of interest.                                 [\name{AliFemtoParticleCut}]
316 \item\label{it:Reals} Form pairs of particles coming from the present event.                         [\name{AliFemtoAnalysis}]
317 \item\label{it:PrCut} Cut on these pairs.                                                            [\name{AliFemtoPairCut}]
318 \item\label{it:Num}   Do ``something'' with these pairs.                                             [\name{AliFemtoCorrFctn}]\\
319                       {\it Usually}, but not neccessarily, this involves calculation of some relative
320                       variable (e.g. a relative momentum) and incrementing a histogram.
321 %%\item\label{it:Num}   Send pairs passing the PairCut to the several CorrFctns for further processing. 
322 \item\label{it:Mix}   {\it Usually,} form other pairs of particles to construct a reference pair     
323                       distribution.                                                                  [\name{AliFemtoAnalysis}]\\
324                       {\it Usually} this is related to generating pairs (``mixed'' pairs) of
325                       particles between the present event and similar events which are sitting in 
326                       the EventBuffer.
327 \item\label{it:PrCut2} Cut on these pairs.                                                           [\name{AliFemtoPairCut}]\\
328                       {\it Almost always}, it is an identical cut as used in step~\ref{it:PrCut}.
329 \item\label{it:Den}   Do ``something'' with these pairs.                                             [\name{AliFemtoCorrFctn}]\\
330                       {\it Usually}, but not neccessarily, this involves calculation of some relative
331                       variable (usually the same one as in step~\ref{it:Num}) and incrementing a histogram.
332 \item\label{it:Store} Store the present event into the EventBuffer.                                  [\name{AliFemtoAnalysis}]
333 \item\label{it:loop}  Return to step~\ref{it:read} for the next event.                               [\name{AliFemtoManager}]
334 \end{enumerate}
335
336 The first question is thus addressed by implementing the above basic functionality in methods of common classes.
337 Considerations about the second question are reflected in the class inheritance structure and division of classes
338 into ``central'' and User classes.  We discuss this below.
339
340 \section{The Structure and use of \AliFemto}
341 \label{sec:AliFemtoDiagramEtc}
342
343 \AliFemto is a flexible and extendable software package in the \ROOT framework for performing two-particle
344 femtoscopic studies.  The basic design and structure of the package is essentially unchanged since its
345 original deployment in the STAR Experiment at RHIC in 1999.  However, its functionality and features
346 have been developed considerably by continuous use in experimental and model analyses by the STAR-HBT
347 group since then.  The  package was designed from the beginning to be independent of the STAR analysis framework
348 (root4star).  Thus, it is easily used for ALICE-specific analyses (either in \AliRoot or ``vanilla'' \ROOT)
349 or for model studies in any root flavor.
350
351 {\bf Important note:}
352 In this Section, we discuss the structure of the code, and a specific example of how to use it in ``vanilla'' or pure \AliRoot
353 mode.  In other words, here we run with a simple \ROOT macro.  If we run instead in the ALICE {\tt task} framework, then the
354 operations described here are performed by the {\tt AliFemtoTask}, rather than the user directly.  Translation between these
355 modes of operation is transparent.  For tutorials on how to run \AliFemto within the {\tt task} framework, \AliEn, etc, see
356 the ALICE femtoscopy web pages\\
357  {\tt http://aliceinfo.cern.ch/Collaboration/PhysicsWorkingGroups/PWG2/Femtoscopy/}.
358
359
360 \subsection{Top level}
361 \label{sec:topLevel}
362 The top-level structure of AliFemto is shown in Figure~\ref{fig:TopLevelUML} in simplified Unified Modeling Language (UML)~\cite{UMLreference} format.
363 Here, we describe generally the classes shown, and their interaction.  See the Reference Manual for details.
364
365 \begin{figure}[t]
366 \includegraphics[width=\textwidth]{TopLevelUML.pdf}
367 \caption{The large-view structure of the code.  
368 Yellow classes at the periphery are bases for user-written
369 classes.\label{fig:TopLevelUML}
370 }
371 \end{figure}
372
373
374 \subsubsection{AliFemtoManager}
375
376 There is a single \name{AliFemtoManager} object for any \AliFemto session.
377 \name{AliFemtoManager} controls all \AliFemto actions; it is this (through
378 the four methods \meth{Init()}, \meth{ProcessEvent()}, \meth{Report()}, and \meth{Finish()}) with which the user 
379 interfaces.
380 There is only one AliFemtoManager, instantiated by the user (or the {\tt AliFemtoTask}-- see beginning of
381 Section~\ref{sec:AliFemtoDiagramEtc}), and objects are ``plugged into'' it by the user at runtime;
382 see Section~\ref{sec:example} for an example.
383
384 In order to proceed with an \AliFemto study, the \name{AliFemtoManager} must have an \name{AliFemtoEventReader}, which passes event information
385 to it.  Optionally, the \name{AliFemtoManager} may also have one or more {\it other} \name{AliFemtoEventReader}
386 objects, which are in ``Write'' mode and
387 which takes the event data and writes it to a fiile.  This is useful in order to change data format or to write out only a selection
388 of the events or information within events.  Also optionally (but usually the case), the \name{AliFemtoManager} will have one or more
389 \name{AliFemtoAnalysis}
390 objects; it is these which perform correlation studies.  In principle, the \name{AliFemtoManager} may have neither Writers or Analyses, but
391 in this case nothing gets done with the data.
392
393 \subsubsection{AliFemtoEventReader}
394 \label{sec:AliFemtoEventReader}
395
396 Typical users will not need to write \name{AliFemtoEventReader}s, but will instead use a standard one.  We discuss its basics here
397 just for reference.
398
399
400 The job of the \name{AliFemtoEventReader} is to pass events, upon request, to the \name{AliFemtoManager}.  
401 How the events are obtained (reading from
402 a data or simulation file, reading from some location in memory filled by someone else, random generation within the \name{AliFemtoReader} itself...) is
403 immaterial.  Regardless
404 of the data format read in by the \name{AliFemtoReader}, the data is passed to the \name{AliFemtoManager} in the form of an \name{AliFemtoEvent}.  
405 (See the Reference Manual for full details on the content and structure of \name{AliFemtoEvent}.)
406 In this way, all
407 of \AliFemto code is unaware of external data sources or formats; all such dependency is confined to the \name{AliFemtoEventReader}-derived classes.
408
409
410 \name{AliFemtoEventReader} is, itself, a base class, with a pure virtual method \meth{ReturnHbtEvent()}.  For any given application/datasource (e.g.
411 ALICE ESDs, Geant kine banks, RQMD files), a class must be written which inherits from AliFemtoEventReader.
412 In the simillar STAR package, of order 10 specific Reader classes
413 are available for use now; they will be developed for ALICE as needed. 
414 It is expected that the typical user will not need to write his own \name{AliFemtoEventReader} class, but simply select one already written.
415 It is one of these derived classes which is ``plugged into'' the \name{AliFemtoManager}.  Once the user instantiates and configures
416 the Reader, she typically does not interact with it anymore.  A specific example is given in Section~\ref{sec:example}
417
418
419
420 \subsubsection{AliFemtoAnalysis}
421 \label{sec:AliFemtoAnalysis}
422
423 Typical users will not need to write \name{AliFemtoAnalysis} objects, but will instead select among standard ones.  We discuss the basics here
424 just for reference.
425
426
427 The most important element of an \AliFemto study is the Analysis.  All Analysis classes derive from the interface class
428 \name{AliFemtoAnalysis}, which has three important pure virtual methods.  
429 They must implement (even if it is a ``do-nothing'' method) a \meth{Finish()} method, which will be invoked by
430 the \name{AliFemtoManager} just before the session ends.  Also, each \{name{AliFemtoAnalysis} class must generate 
431 a \meth{Report()} (c.f. Section~\ref{sec:reports}).
432
433
434 Finally and most importantly, an \name{AliFemtoAnalysis} class must be able to \meth{Process()}
435 an \name{AliFemtoEvent}.  What it does with the \name{AliFemtoEvent}, even if it simply ignores it, is 
436 of course not important to the \name{AliFemtoManager}.
437 In practice, naturally, an Analysis {\it does} process the data, making cuts and extracting correlations.
438 The simplest \name{AliFemtoAnalysis}-derived class, \name{AliFemtoSimpleAnalysis}, is a good example of this.  We discuss this in
439 Section~\ref{sec:analysisLevel}.
440
441 \subsubsection{Action flow}
442 Briefly, each time \name{AliFemtoManager}::\meth{ProcessEvent()} is invoked by the user (or Task, or whatever),
443 it obtains an \name{AliFemtoEvent} from its \name{AliFemtoEventReader}. 
444 It then passes this \name{AliFemtoEvent} to each of its Writers through the \meth{WriteHbtEvent()} method.
445 Finally, it passes the \name{AliFemtoEvent} to each of its {\name AliFemtoAnalysis::}{\meth ProcessEvent({\args AliFemtoEvent*})}.
446
447
448
449 \subsection{Analysis level}
450 \label{sec:analysisLevel}
451
452 The \name{AliFemtoAnalysis} is usually the focus of any \AliFemto session.  As discussed in Section~\ref{sec:AliFemtoAnalysis},
453 the only requirement of such an object in principle is that it must accept an \name{AliFemtoEvent} object via its \meth{ProcessEvent} method.
454 However, in practice, \name{AliFemtoAnalysis}-derived classes almost always contain Cuts, CorrFctns, etc.  We describe these
455 here.
456
457 A UML representation of the class structure of an Analysis is shown in Figure~\ref{fig:analysisUML}.
458
459 \begin{figure}[t]
460 \includegraphics[width=\textwidth]{Analysis.pdf}
461 \caption{The basics of an Analysis configuration in UML representation.  Most classes shown are base classes.
462 Appending ``= 0'' to a method name denotes pure virtuality-- the method is not defined in the base class, but must
463 be defined in any instantiated class which derives from it.  Yellow classes at the periphery are bases for user-written
464 classes.\label{fig:analysisUML}
465 }
466 \end{figure}
467
468 \subsubsection{AliFemtoEventCut}
469
470 The first action of an \name{AliFemtoAnalysis} is usually to invoke the method \name{AliFemtoEventCut::{\meth Pass(\args{AliFemtoEvent*})}}.
471 This returns
472 a boolean value (and may, internally, store information about the \name{AliFemtoEvent} passed to it).  If the event does not
473 Pass, no further processing is done by the AliFemtoAnalysis-- control returns to the \name{AliFemtoManager}.
474
475 The Reference Manual gives the full implementation of a simple \name{AliFemtoEventCut}.
476
477
478 \subsubsection{AliFemtoParticleCuts}
479 \label{sec:AliFemtoParticleCuts}
480
481 Depending on the topological nature of the particles being selected,
482 one uses the class \name{AliFemtoTrackCut}, \name{AliFemtoV0Cut}, \name{AliFemtoKinkCut}, or \name{AliFemtoXiCut}.
483 All of these inherit from \name{AliFemtoParticleCut};
484 see Figure~\ref{fig:analysisUML}.  As with all cuts, these classes have pure virtural \meth{Pass()} methods.
485 An Analysis has two \name{AliFemtoParticle} cuts, corresponding to the two particles used in the correlation analysis.
486
487 There is ``special'' behaviour when the \name{AliFemtoParticle} cuts are applied.  For each AliFemtoTrack/V0/Kink/Xi which Passes the cuts,
488 an \name{AliFemtoParticle} is created.  (The \name{AliFemtoParticle} objects themselves
489 are created and used within the Analysis-- the user is not concerned with them.)
490 It is the \name{AliFemtoParticle} objects (not \name{AliFemtoTracks} etc) which are used at further steps in the Analysis
491 for the current event.  {\bf Important:} all \name{AliFemtoParticleCut}-derived objects set the mass of the particle it selects.  Based on
492 kinematic and PID information, the user, through the \name{AliFemtoParticleCut}, decides e.g. that the Track is a proton; the user needs to
493 tell the \name{AliFemtoParticleCut} the mass of the proton; c.f. Section~\ref{sec:example}.  When the \name{AliFemtoParticle} corresponding to this
494 \name{AliFemtoTrack} is created, it is at this point that the mass of the proton is assigned to the particle.
495
496 \subsubsection{AliFemtoPairCut}
497
498 As the name suggests, user-written classes which derive from \name{AliFemtoPairCut} must have a \meth{Pass()} method selecting
499 \name{AliFemtoPairs} for further processing.  (\name{AliFemtoPair}s are created and used internally; the user does not interact with them.)
500 These cuts may, for example, try to discriminate ``fake'' pairs caused by splitting or (for the reference pair distribution)
501 those tracks which would merge.
502
503 Importantly, the Analysis will automatically apply the {\it same} \name{AliFemtoPair} cut to pairs generated from ``real'' and from ``mixed''
504 events.  Almost always, this is very important for femtoscopic analyses.  However, if neccessary, one may circumvent this behaviour
505 by attaching \name{AliFemtoPairCut} objects to the correlation function object itself.  In this case, different PairCuts may be applied to ``real'' and
506 reference distributions.
507
508 \subsubsection{AliFemtoCorrFctn}
509
510 The ``end result'' of most femtoscopic studies is the correlation function.  These compare somehow (often via a ratio of
511 distributions, c.f. Equation~\ref{eq:usualC}) ``real'' and reference pairs.  In general, then, a user-written class which
512 derives from \name{AliFemtoCorrFctn} should implement \meth{AddRealPair(\args{AliFemtoPair})} and \meth{AddMixedPair(\args{AliFemtoPair})}
513 methods.  These methods may do whatever the user
514 wishes, of course.
515
516 Most CorrFctn classes are rather simple.  See the Reference Manual for a full listing of an example.
517
518 Often, one wishes to construct several correlation functions simultaneously (e.g. one in $Q_{inv}$, $\vec{q}_{3D}$, $\Theta_{opening}$ etc).
519 For this reason, every \name{AliFemtoAnalysis} may have several \name{AliFemtoCorrFctn} objects.
520 The same \name{AliFemtoPair}s are sent to each \name{AliFemtoCorrFctn}.
521
522
523 \subsubsection{Action flow}
524
525 The most important action of each \name{AliFemtoAnalysis} is in its \meth{ProcessEvent(\args{AliFemtoEvent*})} method.
526 corresponds approximately to steps~\ref{it:EvCut}-\ref{it:Store} of the list in Section~\ref{sec:bones}.
527 Upon being given an Event by the Manager, it first sends it to its EventCut.  If \name{AliFemtoEventCut::\meth{Pass(\args{AliFemtoEvent*})}}
528 returns false, the  method returns with no further action.
529
530 Otherwise, an \name{AliFemtoPicoEvent} (essentially two lists of \name{AliFemtoParticle}s, c.f. Section~\ref{sec:AliFemtoParticleCuts}) is formed from 
531 the particles which Pass the \name{AliFemtoParticleCuts}.  All possible pairs of these Particles are tested by the 
532 \name{AliFemtoPairCut::\meth{Pass()}} method,
533 and those which Pass are sent to each of the \name{AliFemtoCorrFctn}'s \meth{AddRealPair(\args{AliFemtoPair*})} methods.
534
535 Then, ``mixed'' \name{AliFemtoPair}s are formed by combining all \name{AliFemtoParticles} from the present event with those of previously-processed
536 events, which have been stored in a collection of \name{AliFemtoPicoEvents}.  (C.f. Figure~\ref{fig:analysisUML}; the user need not interact
537 with this aspect of the code.)  All such Pairs are formed.  These are evaluated by the \name{AliFemtoPairCut} and those which Pass are sent to
538 each of the \name{AliFemtoCorrFctn::\meth{AddMixedPair(\args{AliFemtoPair*})}} methods.
539
540 Finally, the AliFemtoPicoEvent is put into the list (c.f. Figure~\ref{fig:analysisUML}) of such objects for mixing with future events,
541 and control returns to the AliFemtoManager.
542
543 As mentioned previously, the above procedure is just one typical of Analyses.  In principle, one's specific Analysis class might
544 email the user each pair, or each particle at random.
545
546
547 \subsection{Reports}
548 \label{sec:reports}
549
550 Note that most classes above have \meth{Report()} methods.  These are simple user-written methods returning strings which can tell something about
551 what happened to that class during the study.  E.g. a \name{AliFemtoEventCut} might Report on how many events passed/failed the
552 cut.  The content of the Report is up to the user; it might be even an empty string or your spouse's name.
553
554
555 At the end of the session, the Reports of the various objects are concatenated in the following way.
556
557 Each AliFemtoAnalysis
558 collects Reports from its AliFemtoEventCut, AliFemtoParticleCut (for both the first and second particle), AliFemtoPairCut, and all
559 of its AliFemtoCorrFctn objects.  These are concatenated with any other information coming from the AliFemtoAnalysis itself.
560 This constitutes the Report of the AliFemtoAnalysis.
561
562 The AliFemtoManager collects Reports from each of its AliFemtoEventReader objects (both those in read and write mode)
563 and from each of its AliFemtoAnalysis objects.  These are concatenated and constitute the final Report
564 printed to the screen (or log file).  
565
566 %==========================================================
567 %==================== Example =============================
568 %==========================================================
569
570
571 \subsection{Example macro}
572 \label{sec:example}
573
574 Here, we show a specific macro which may be used to perform two Analyses which produce several CorrFctns.  The example
575 shown is for use in ``pure'' root.  It may also be used as a simple macro in AliRoot or, as been previously mentioned,
576 it is straightforward to wrap it in a Task or Train (or, in STAR, the BFC Chain).
577
578 Figures~\ref{fig:exampleMacroGload}-\ref{fig:exampleEventLoop} in this Section are only cartoons suggesting what the
579 code in the macro does-- they are not UML.  All classes in this specific example are user-written
580 classes, with the exception of AliFemtoManager.  (Several of them such as the \name{AliFemtoEventReaderESD} class,
581 have already been written and are provided in the \cvs checkout.)
582  For details, see Sections~\ref{sec:topLevel} and~\ref{sec:analysisLevel}.
583
584
585 \subsubsection{Initialization and plugging in the Reader}
586 %--------------------- Example Step 1 ----------------------
587
588 \begin{figure}[t]
589 \includegraphics[width=\textwidth]{ExampleMacro1.pdf}
590 \caption{The preliminaries in a \AliFemto macro: loading of the libraries, instantiation of top-level structure, and
591 instantiating and plugging in a Reader.
592 The cartoon is meant so suggest the action of the macro commands; it is not a UML diagram.
593 \label{fig:exampleMacroGload}
594 }
595 \end{figure}
596
597 \begin{figure}[t]
598 \includegraphics[width=\textwidth]{ExampleMacro2.pdf}
599 \caption{The construction of a specific \name{AliFemtoAnalysis}, including its cuts and collection of three CorrFctn
600 objects.  The dark shaded region in the cartoon denotes a collection.
601 \label{fig:exampleFirstAnalysisStart}
602 }
603 \end{figure}
604
605 \begin{figure}[t]
606 \includegraphics[width=\textwidth]{ExampleMacro3.pdf}
607 \caption{The final step in configuring the first Analysis is to set the number of events to mix when constructing
608 the ``background'' distribution.  This finished Analysis (dark grey box) is then added to the collection of Analyses
609 for the \name{AliFemtoManager} (large light grey box), thus making the connection between these objects.
610 \label{fig:exampleFirstAnalysisFinish}
611 }
612 \end{figure}
613
614 \begin{figure}[t]
615 \includegraphics[width=\textwidth]{ExampleMacro4.pdf}
616 \caption{A second Analysis is instantiated, configured, and added to the collection.  The same
617 proceedure is followed as for the fist Analysis (Figures~\ref{fig:exampleFirstAnalysisStart}
618 and~\ref{fig:exampleFirstAnalysisFinish}), though the two Analyses know nothing about each other.
619 \label{fig:exampleSecondAnalysis}
620 }
621 \end{figure}
622
623 \begin{figure}[t]
624 \includegraphics[width=\textwidth]{ExampleMacro5.pdf}
625 \caption{Construction of the AliFemto study complete, event looping is trivial.  Note that all
626 interaction with the code is through only a few methods of the AliFemtoManager object.
627 \label{fig:exampleEventLoop}
628 }
629 \end{figure}
630
631 Figure~\ref{fig:exampleMacroGload} shows the beginning of the macro.  
632 As usual in a root macro, libraries are loaded first.  For the femtoscopic analysis itself, only the AliFemto and AliFemtoUser
633 libraries need be loaded.  All internal \AliFemto classes such as \name{AliFemtoPair} are found in the AliFemto directory.
634 That directory also has a few simple CorrFcn, Reader, and Cut classes.  The user will probably want to start with these and
635 elaborate upon them; in this case, her new classes should go into the AliFemtoUser area.
636
637 In this example
638 we use the specific \name{AliFemtoEventReader}-derived class \name{AliFemtoEventReaderESD}; not surprisingly, this Reader needs
639 the ESD library loaded as well.
640
641
642
643 Since all Readers are user-written, their configuration
644 methods will be specific to the class used.  This is as it should be, since attempts to ``foresee'' all possible
645 uses of the Reader classes will ultimately result in limitations later on, and sloppy work-arounds.
646
647 The \name{AliFemtoManager} is instantiated; note that its pointer is declared outside the scope of the macro, at the top.
648 Finally, the \name{AliFemtoEventReaderESD} object is ``plugged in'' to the \name{AliFemtoManager}.  This is indicated by the arrow
649 in the cartoon; recall that this is not a UML diagram.
650
651 \subsubsection{Adding Analyses}
652 %--------------------- Example Step 2 ----------------------
653
654
655 In Figure~\ref{fig:exampleFirstAnalysisStart} we see construction of a specific Analysis  (c.f.
656 Section~\ref{sec:analysisLevel}).
657 An \name{AliFemtoAnalysis}-derived class, \name{AliFemtoVertexAnalysis}, is
658 instantiated.  (For reference, this class takes care to ``mix'' only those events close to each other in
659 primary vertex position; it is very commonly used.)  All configuration (vertex range, number of bins) takes
660 place in the constructor, in this specific class.
661
662 The Cuts are (i) instantiated, (ii) configured, and (iii) ``plugged into'' this Analysis.
663 Finally, three correlation functions are instantiated, configured, and added to the collection
664 of CorrFctns for this analysis.  (The collection is suggested by the dark-shaded box in the cartoon.)
665 We note that one of the CorrFctn classes there is \name{OpeningAngleCorrFctn}.  The fact that its name
666 does not begin with ``AliFemto'' is a clue that this class is user-written, for her own purposes; it would
667 not be included in ALICE nightly builds and would sit in the AliFemtoUser area.
668
669 Two notes:  Firstly, we see that the same AliFemtoTrackCut is used for both the first and second particle-- this
670 is an analysis of identical pions.  Secondly, as mentioned in  Section~\ref{sec:AliFemtoParticleCuts}, all AliFemtoParticleCuts
671 {\it must} define a particle mass.  This is not special to this specific example.
672
673 %--------------------- Example Step 3 ----------------------
674
675
676 In Figure~\ref{fig:exampleFirstAnalysisStart}, the conglomeration of Analysis-related objects is not related to
677 the AliFemtoManager instantiated in the previous Figure.  In Figure~\ref{fig:exampleFirstAnalysisFinish}, the connection
678 is made.  Firstly, the ``final detail'' for the Analysis is completed-- the number of events to mix for the reference
679 distribution is set, and the now-fully-configured Analysis is added to the collection of Analyses (denoted by the large
680 grey box).
681
682 %--------------------- Example Step 4 ----------------------
683
684
685 The structure is now complete in principle-- a useful correlation study may proceed.
686 We may add one or more completely seperate Analyses, if we wish.  This is shown in
687 Figure~\ref{fig:exampleSecondAnalysis}.  The only points here are that the second
688 (and any subsequent) Analyses are set up similarly to the first one discussed above, and
689 there is no connection the Analyses in the AliFemtoManager's collection of Analyses.
690
691
692 \subsubsection{Processing data}
693 \label{sec:ProcessingData}
694 %--------------------- Example Step 5 ----------------------
695
696
697 Finally, Figure~\ref{fig:exampleEventLoop} moves beyond construction of the collection
698 of objects, and commands a processing of the data.  We note that all ``external'' interaction
699 is with the AliFemtoManager class.  If the Reader needs to interact with the ``outside world''
700 (e.g. by opening a file or pointing to a location in memory), then it is up to that specific
701 class, using its own specific methods, to take care of that.
702
703 In Figure~\ref{fig:exampleEventLoop}, the processing is ordered within a ``pure root'' macro
704 directly.  This can be different in other frameworks.  For example, in the STAR Maker schema~\cite{StarMaker},
705 the AliFemtoManager Init(), ProcessEvent(), Report() and Finish() methods will be invoked by the AliFemtoMaker
706 Init(), Make(), and Finish() methods.  Indeed, the AliFemtoMaker does almost nothing else than perform these
707 simple invocations.
708
709
710 \section{Code Organization}
711
712
713 \subsection{Directory structure: core and user classes}
714 \label{sec:coreUser}
715
716 The femtoscopy analysis effort in ALICE falls in the soft physics working group (PWG2).
717 Thus, when checking out the full \AliRoot from \cvs, it will be found in the {\tt PWG2/FEMTOSCOPY/}
718 area.  (One may also check out only PWG2 files using\\
719 {\tt cvs -qz2 -d :pserver:cvs@alisoft.cern.ch:/soft/cvsroot co PWG2}.\\  This is useful if running
720 \AliFemto in ``standalone'' mode.)
721
722 In this directory are found two subdirectories.  The first is {\tt AliFemto/},
723 which holds about 80 classes (as of \today), such as \name{AliFemtoManager}, \name{AliFemtoPair}, etc.
724 It also holds all of the base classes for user-derived code (e.g. \name{AliFemtoCorrFctn}) and one
725 or two simple examples of classes which derive from these (e.g. \name{AliFemtoQinvCorrFctn}).  These
726 last might be useful templates for users writing more sophisticated Cuts, CorrFctns, Readers, Analyses, etc.
727 The {\tt AliFemto/} subdirectory is included in the official nightly build.  Files there must obey
728 ALICE coding standards, and limited \cvs access is anticipated.
729
730 The second directory is {\tt AliFemtoUser/}.  Files in this subdirectory are not included in the nightly
731 build.  This area is meant to be a repository for user code, typically Cuts, CorrFctns, etc, which might
732 be of interest to others working on some analysis.  It is \cvs archived, and widespread read/write \cvs access
733 is anticipated.
734
735 Seperate shared object (.so) libraries are built for the {\tt AliFemto/} and {\tt AliFemtoUser/}
736 area; c.f. the macro snip in Figure~\ref{fig:exampleMacroGload}.
737
738
739 \section{Known problems}
740
741 As of \today, there are no known problems with \AliFemto.  However, this Users' Guide is incomplete, in that
742 it does not discuss so-called ``theoretical'' correlation studies covered in the \name{AliFemtoModel*} classes.
743 This will be remedied in the next version of the Users' Guide.  In the meantime, see an excellent tutorial
744 on the subject on the ALICE femtoscopy webpage\\
745  {\tt http://aliceinfo.cern.ch/Collaboration/PhysicsWorkingGroups/PWG2/Femtoscopy/}.
746
747
748
749 \clearpage
750
751 \part{Reference Manual}
752 \label{part:RefMan}
753
754 The Reference Manual is being finalized.
755
756 \clearpage
757
758
759
760 %%%%%%%%\section{References}
761 \begin{thebibliography}{99}
762
763  \bibitem{UMLreference}
764    The Unified Modeling Language (UML), 
765    http://www.omg.org/technology/documents/formal/uml.htm ;
766    http://en.wikipedia.org/wiki/Unified\_Modeling\_Language
767
768 \bibitem{Lisa:2005dd}
769   M.~A.~Lisa, S.~Pratt, R.~Soltz and U.~Wiedemann,
770   %``Femtoscopy in relativistic heavy ion collisions,''
771   Ann.\ Rev.\ Nucl.\ Part.\ Sci.\  {\bf 55}, 357 (2005)
772   [arXiv:nucl-ex/0505014].
773   %%CITATION = NUCL-EX 0505014;%%
774
775 \bibitem{HanburyBrown:1954}
776   Hanbury-Brown, R., and Twiss, R.Q.
777   %''A new type of interferometer for use in radio-astronomy'',
778   Phil. Mag. {\bf 45}, 663 (1954).
779
780 \bibitem{Goldhaber:1960sf}
781   Goldhaber, Gerson and Goldhaber, Sulamith and Lee, Won-Yong
782                   and Pais, Abraham, 
783   %''Influence of Bose-Einstein statistics on the antiproton
784                   proton  annihilation process''
785   Phys. Rev. {\bf 120} 300 (1960).
786
787 \bibitem{Lednicky:2002fq}
788    Lednicky, R.,
789    %''Progress in correlation femtoscopy,''
790    nucl-th/0212089
791
792
793 \bibitem{StarMaker}
794 %Unfortunately, the best (!?!?) documentation of the basic STAR Maker analysis framework is
795 %a brief presentation by Victor Perevoztchikov which may be found on the STAR computing
796 %tutorial website:
797 Tutorial by Victor Perevoztchikov 
798 http://www.star.bnl.gov/STAR/comp/train/tut/Maker-in-STAR/Victor-Makers.html
799
800 \end{thebibliography}
801
802
803 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
804 %
805 % The End
806 %
807 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
808
809 \printindex
810
811 \end{document}