As you can see, this driver class is a template. Its argument
type, ``Real'', must be compatible with the
DFFT library chosen. The constructor arguments have the
following meaning:
\vskip2mm
\noindent \begin{tabular}{ll}
convolver & A pointer to an object conforming to the \cname{AbsConvolverBase} interface.\\
& Such objects calculate and manage Fourier transforms of the data \\
& and the kernels and perform their convolutions.\\
selector & A pointer to an object conforming to the
\cname{Functor1}$<$bool,Peak$>$ \\
& interface. Such objects are used to eliminate fake preclusters.\\
peakFinder & An object which finds the modes of the convolved energy distributions.\\
initialScales & A collection of resolution scales for which the peak finding will be \\
& performed.\\
maxAdaptiveScales & Maximum number of additional scales to use for adaptive pattern \\
& recognition.\\
minRatioLog & This parameter determines the minimum separation between the \\
& scales used in the adaptive pattern recognition stage.
\end{tabular}
\vskip2mm
\noindent The clustering sequencer will not own the \cname{AbsConvolverBase}
and \cname{Functor1}$<$bool,Peak$>$ objects, that is, it will not attempt
to call the ``delete'' operator on the ``convolver''
and ``selector'' pointers in its own destructor. It is a responsibility
of the user of this
class to make sure that the "run" method is called
only when the objects to which these pointers refer are still alive.
The ``run'' arguments are as follows:
\vskip2mm
\noindent \begin{tabular}{ll}
eventData & Discretized event energy distribution.\\
outputTree & A pointer to an object conforming to the \cname{AbsClusteringTree} interface. \\ & Such objects are used to arrange pattern recognition results in a form\\
& convenient for subsequent analysis.
\end{tabular}
\vskip2mm
\noindent After calling the ``run'' method, the user can also invoke
the ``insertCompleteEvent'' function. This function inserts the whole
event into the clustering tree at the lowest resolution scale.
It will be useful to perform this insertion if the clustering tree
is going to be utilized as a~balltree~\cite{ref:balltree}
during subsequent pattern recognition calculations.
\subsubsection{AbsConvolverBase and its Implementations}
Note that the kernel which is convolved with the event data during
the pattern recognition stage does not change from one event to another.
This means that the Fourier images of such a kernel can
be calculated only once for each scale and then stored
for subsequent lookups. The \cname{AbsConvolverBase}
class declares an interface to the relevant services for the rest
of the FFTJet package code.
Multiple concrete implementations of the \cname{AbsConvolverBase} functionality
are provided with the FFTJet package: \cname{KernelConvolver},
Once the parent/daughter relationships are established between
preclusters found at different resolution scales, various precluster
characteristics can be analyzed as functions of the scale parameter.
FFTJet calculates\footnote{This is the default behavior
which can be modified. If you do not want to spend CPU
time calculating these quantities, derive your own clustering tree
class from ``ProximityClusteringTree'' and override the ``postProcess''
function.} the following precluster properties:
\begin{thinlist}
\item The speed with which precluster magnitude changes as the function of scale. This is an approximate value of $\frac{d \log(m(s))}{d \log(s)}$.
\item The speed with which the precluster location drifts in the scale space. If the distance between precluster is defined by the \cname{PeakEtaPhiDistance} functor,
this becomes $\frac{|d\,\vec{r}\,|}{d \log(s)}$, with
particle can deposit its energy in a~cell) and assuming
that the jet membership function can be treated as
the probability density\footnote{Of course, this is just
an approximation, even when detailed detector-level fragmentation
functions are used as jet membership functions.
It breaks down in the same manner as
the assumption that the single-particle
jet fragmentation function can describe the distribution of all particle
momenta within a~jet.}
for the cell variables $(E_{T}, \eta, \varphi)$, this quantity
becomes, indeed, the relative $E_{T}$ uncertainty due
to the cell-to-jet assignment ambiguity.
Within these approximations,
the energy of each jet is distributed according to the
generalized binomial model.
The weight $w_i(\eta, \varphi)$ becomes the probability
for a cell at $(\eta, \varphi)$ to belong to jet $i$,
the variance of the energy contribution from this
cell to the jet is $w_i(\eta, \varphi)(1 - w_i(\eta, \varphi)) E_{T}(\eta, \varphi)^2$, and the sum under the square root in the numerator just adds these
variances up.
In the ``crisp'' mode jet fuzziness is evaluated as
$u = \frac{2 \pi k}{N_{\eta}}$, $k \in \{0, 1, ..., N_{\eta}-1\}\,$ is the $\eta$ frequency.
$v = \frac{2 \pi m}{N_{\varphi}}$, $m \in \{0, 1, ..., N_{\varphi}-1\}\,$ is the $\phi$ frequency.
$\Delta \eta = \frac{2 \pi}{N_{\eta}}$ is the {\it effective} width of the grid cells in $\eta$ (scaled so that the full $\eta$ range of the grid is $2 \pi$).
$\Delta \varphi = \frac{2 \pi}{N_{\varphi}}$ is the width of the grid cells in $\varphi$.
$\sigma_{\eta}$ is the {\it effective} kernel width parameter in $\eta$. In the
limit of small cell sizes and when $\sigma_{\eta} \ll 2 \pi$, it corresponds
to the standard deviation of the Gaussian kernel.
$\sigma_{\varphi}$ is the kernel width parameter in $\varphi$.
% $\gamma$ is the direction mixing parameter for the discretized Laplacian.
% $\gamma = 0$ means that the Laplacian is evaluated along the $\eta$ and
% $\varphi$ directions using the standard 5-point formula,
% $\gamma = 1$ means that the Laplacian
% is calculated along the grid diagonal, and values
% in between correspond to the mixture of the two. Reasonable values for
% this parameter are $0 \le \gamma \le 1/2$, while $\gamma = 1/3$
% results in the ``most isotropic'' calculation.
\noindent The rationale for this type of kernel
can be found in Ref.~\cite{ref:discretescalespace}.