%Paper: 
%From: "E.W.N." Glover <E.W.N.Glover@durham.ac.uk>
%Date: Thu, 6 Oct 94 14:58:41 +0100
%Date (revised): Fri, 7 Oct 94 10:07:53 +0100
%Date (revised): Fri, 7 Oct 94 15:17:04 +0100


\documentstyle[12pt]{article}
\input tables
%
\voffset=-2.0cm
\hoffset=-1.5cm
\textheight=22.0truecm
\textwidth=16.5truecm
\def\ymin{y_{\rm min}}
\def\Draft#1{
\begin{center}
\begin{tabular}{|c|}
\hline
#1 \\
\hline
\end{tabular}
\end{center}
}
\parskip 2ex
\begin{document}



\begin{titlepage}
\begin{flushright}
DTP/94/80\\
\end{flushright}
\vspace{2cm}
\begin{center}
{\Large\bf The Energy-Energy Correlation Function Revisited}\\
\vspace{1cm}
{\large
E.~W.~N.~ Glover and M.~R.~Sutton}\\
\vspace{0.5cm}
{\it
Physics Department, University of Durham,\\ Durham DH1~3LE, England} \\
\vspace{0.5cm}
%{\large August 1994}
\today
\vspace{0.5cm}
\end{center}
\begin{abstract}
The ${\cal O}(\alpha_s^2)$ coefficient of the energy-energy
correlation function (EEC) has been calculated by four groups with
differing results.  This discrepancy has lead to some confusion over
how to measure the strong coupling constant using the EEC and the
asymmetry of the energy-energy correlation function (AEEC) in
electron-positron annihilation at the $Z$ resonance.  For example, SLD
average the four values of $\alpha_s$ extracted from each of the
different calculations.  To resolve this situation, we present a new
calculation of this coefficient using three separate numerical
techniques to cancel the infrared poles.  All three methods agree with
each other and confirm the results of Kunszt and Nason that form the
benchmark for other ${\cal O}(\alpha_s^2)$ quantities.  As a
consequence, the central values and theoretical errors of the strong
coupling constant derived by SLD from the EEC and AEEC are altered.
Using the SLD data, we find, $\alpha_s^{EEC}(M_Z^2) =
0.125^{+0.002}_{-0.003}~({\rm exp.})
\pm 0.012 ~({\rm theory})$ and
$\alpha_s^{AEEC}(M_Z^2) = 0.114\pm 0.005~({\rm exp.})
\pm 0.004 ~({\rm theory})$.

\end{abstract}
\end{titlepage}



The energy-energy correlation function $\Sigma_{EEC}$ has recently
been used to measure the strong coupling constant, $\alpha_s$, in
$e^+e^-$ annihilation on the $Z$ resonance\footnote{A significant
amount of data has also been collected at lower energies, see for
example
\cite{SW} and references therein.} \cite{delphi,opal,opalnew,sld}.
It is defined in terms of the angle $\chi_{ij}$
between two particles $i$ and $j$ such that,
\begin{equation}
\frac{1}{\sigma}
\frac{d\Sigma_{EEC}(\chi)}{d\cos\chi} =
\frac{1}{\Delta\cos\chi~N_{events}}
\sum_{N_{events}}
\sum_{ij} \frac{E_iE_j}{E^2},
\end{equation}
where $E_i$ and $E_j$ are the energies of the particles and $E$ the
total energy in the event, $E = \sqrt{s}$.  The sum runs over all
pairs $ij$ lying within a bin in $\cos\chi$ of width $\Delta\cos\chi$
so that $\cos\chi-\Delta\cos\chi/2 < \cos\chi_{ij} <
\cos\chi+\Delta\cos\chi/2$.
For $i\neq j$, each pair enters twice in the sum so the integral of
the distribution is normalised to one when integrated over the whole
range of $\chi$.

The energy-energy correlation function can be
 described by a perturbative series,
\begin{equation}
\frac{1}{\sigma}
\frac{d\Sigma_{EEC}(\chi)}{d\cos\chi} =
\left(\frac{\alpha_s(\mu)}{2\pi}\right)
A(\chi)+  \left(\frac{\alpha_s(\mu)}{2\pi}\right)^2
\left(2\pi b_0 \log\left(\frac{\mu^2}{s}\right)A(\chi)
+ B(\chi)\right ) + {\cal O}(\alpha_s^3),
\end{equation}
where $b_0 = (11N-2n_f)/12\pi$ and $\sigma$ is the first order hadronic
cross section,
$$
\sigma = \sigma_0 \left (1 + \frac{\alpha_s(\mu)}{\pi}\right ),
$$
with $\sigma_0$ being the Born cross section for $e^+e^- \to $
hadrons.  More often, the energy-energy correlation function is
described relative to the Born cross section,
\begin{equation}
\frac{1}{\sigma_0}
\frac{d\Sigma_{EEC}(\chi)}{d\cos\chi}
= \left(\frac{\alpha_s(\mu)}{2\pi}\right)
\bar A(\chi)
+  \left(\frac{\alpha_s(\mu)}{2\pi}\right)^2 \left(2\pi b_0
\log\left(\frac{\mu^2}{s}\right)\bar A(\chi) + \bar B(\chi)\right )
+ {\cal O}(\alpha_s^3),
\end{equation}
where $\bar A = A$, $\bar B = B+2A$.  The lowest order contribution to
the energy-energy correlation function for $0^\circ < \chi <
180^\circ$ is obtained from the $Z,~\gamma^* \to q\bar qg$ process,
where $\chi$ can be the angle between any of the three partons.  An
analytic form for the leading order coefficient $A$ has been obtained
by Basham et al \cite{BBEL},
\begin{equation}
\bar A(\chi) = A(\chi) = (1+\omega)^3 \frac{1+3\omega}{3\omega}
\left[
(2-6\omega^2)\log\left(1+\frac{1}{\omega}\right) + 6\omega-3\right],
\end{equation}
where $\omega = \cot^2(\chi/2)$.  At next-to-leading order, the
relevant processes are $Z, ~\gamma^* \to q\bar q g$ at one-loop and
$Z,~\gamma^* \to q\bar q q\bar q,~~ q\bar q gg$ at tree level.  The
matrix elements for these processes were first computed by Ellis, Ross
and Terrano (ERT) \cite{ERT} in the $\overline{MS}$ scheme and have
formed the basis for all subsequent estimates of the second order
coefficient $\bar B$.  However, $\bar B$ has been computed several
times with differing results, first by Ali and Barreiro (AB)
\cite{AB1,AB2} and by Richards, Stirling and Ellis (RSE)
\cite{RSE1,RSE2} and more recently by Falck and Kramer (FK) \cite{FK}
and Kunszt and Nason (KN) \cite{KN}.  Despite this disagreement, the
radiative corrections are known to be relatively large while
hadronisation corrections are also significant. Therefore, to extract
the strong coupling constant, it is more usual to define the
asymmetry,
\begin{equation}
\frac{1}{\sigma}
\frac{d\Sigma_{AEEC}(\chi)}{d\cos\chi} =
\frac{1}{\sigma}
\frac{d\Sigma_{EEC}(180^\circ-\chi)}{d\cos\chi}-
\frac{1}{\sigma}
\frac{d\Sigma_{EEC}(\chi)}{d\cos\chi},
\end{equation}
where the corrections are smaller and the intra-jet region at $\chi
\sim 0^\circ $ and the back-to-back two jet region at $\chi \sim
180^\circ$ are suppressed.

Nevertheless, the disagreement of the theoretical calculations has
caused confusion in the extraction of $\alpha_s$ using the ${\cal
O}(\alpha_s^2)$ coefficient from both the EEC and AEEC.  For example,
OPAL use the Kunszt-Nason calculation to extract a central value for
$\alpha_s$ from the AEEC with a theoretical error on
$\Lambda_{\overline{MS}}$ of +55~Mev/-10~MeV to encompass the range of
predictions
\cite{opal}.
On the other hand, SLD average the values of $\alpha_s$ obtained from
the four theoretical calculations and increase the theoretical error
accordingly \cite{sld}.  They find,
\begin{eqnarray}
\alpha^{EEC}_s(M_Z^2) & = & 0.127^{+0.002}_{-0.003}~({\rm exp.})
\pm 0.013 ~({\rm theory}),\nonumber \\
\alpha^{AEEC}_s(M_Z^2) & = & 0.116\pm 0.005~({\rm exp.})
\pm 0.006 ~({\rm theory}),\nonumber
\end{eqnarray}
where the theoretical error includes the uncertainty from
hadronisation ($\pm 0.002$ for EEC and $^{+0.003}_{-0.002}$ for AEEC),
renormalisation scale ($\pm 0.011$ for EEC and $\pm 0.003$ for AEEC)
and an error of $\pm 0.006$ for EEC and $\pm 0.004$ for the AEEC
purely from the uncertainty over which ${\cal O}(\alpha_s^2)$
coefficient is correct \cite{sld}.


In this letter, we attempt to resolve the theoretical disagreement.
We first review the discrepancies amongst the existing calculations of
$\bar B$.  We then present a new calculation of the energy-energy
correlation function at ${\cal O}(\alpha_s^2)$ which is in complete
agreement with the results of Kunszt and Nason.

In order to compute next-to-leading order quantities in perturbation
theory, it is necessary to combine the contribution from $n$-parton
one-loop Feynman diagrams with the $n+1$-parton bremstrahlung process.
The virtual matrix elements are divergent and contain both infrared
and ultraviolet singularities.  The ultraviolet poles are removed by
renormalisation, however the soft and collinear infrared poles are
only cancelled when the virtual graphs are combined with the
bremstrahlung process.  Although the cancellation of infrared poles
can be done analytically for simple processes, for complicated
processes like this, it is necessary to resort to numerical
techniques.  Since the theoretical calculations of $\bar B$ are all
based on the same ERT matrix elements, the discrepancies amongst the
theoretical calculations appear to be rooted in the numerical
implementation.

The numerical problem has been nicely formulated by Kunszt and Soper
\cite{KS} by means of a simple example integral,
\begin{equation}
{\cal I} = \lim_{\epsilon \to 0} \left \lbrace
\int^1_0 \frac{dx}{x} x^\epsilon F(x) -
\frac{1}{\epsilon} F(0)\right \rbrace,
\end{equation}
where $F(x)$ is a known but complicated function representing the
$n+1$-parton bremstrahlung matrix elements.  Here $x$ represents the
angle between two partons or the energy of a gluon and the integral
over $x$ represents the additional phase space of the extra parton.
As $x\to 0$, the integrand is regularised by the $x^\epsilon$ factor
as in dimensional regularisation, however, the first term is still
divergent as $\epsilon \to 0$.  This divergence is cancelled by the
second term - the $n$-parton one-loop contribution - so that the
integral is finite.  A variety of methods to compute ${\cal I}$ have
been developed.

The original method used by ERT is also known as the subtraction
method.  Here, a divergent term is subtracted from the first term and
added to the second,
\begin{eqnarray}
{\cal I} &= & \lim_{\epsilon \to 0} \left \lbrace
\int^1_0 \frac{dx}{x} x^\epsilon (F(x)-F(0))
+F(0) \int^1_0 \frac{dx}{x} x^\epsilon
- \frac{1}{\epsilon} F(0)\right \rbrace \nonumber \\
    &= & \int^1_0 \frac{dx}{x}  \left (F(x)-F(0)\right),
\end{eqnarray}
so that the integral is manifestly finite.  This method has the
advantages of requiring no extra theoretical cutoffs and making no
approximations.  A disadvantage is that it does require some
additional analytic effort to explicitly extract the poles from the
analogue of $\int^1_0 \frac{dx}{x} x^\epsilon$.  For ${\cal
O}(\alpha_s^2)$ quantities in electron-positron collisions, this was
performed by Ellis, Ross and Terrano \cite{ERT}.  However, this
analytic integration has to be carried out from scratch for each
process under investigation and may even require a knowledge of the
experimental jet algorithm \cite{KS}.

An alternate approach known as the phase space slicing method has been
widely used - see ref.~\cite{GG} and refences theirin.  The
integration region is divided into two parts, $0 < x < \delta$ and
$\delta < x < 1$.  In the first region, the function $F(x)$ can be
approximated by $F(0)$ provided the arbitrary cutoff $\delta \ll 1$,
\begin{eqnarray}
{\cal I} &\sim & \lim_{\epsilon \to 0} \left \lbrace
\int^1_\delta \frac{dx}{x} x^\epsilon F(x)
+F(0) \int^\delta_0 \frac{dx}{x} x^\epsilon
- \frac{1}{\epsilon} F(0)\right \rbrace \nonumber \\
    &\sim &
\int^1_\delta \frac{dx}{x}   F(x)
+F(0) \ln(\delta).
\end{eqnarray}
This method is extremely portable \cite{GG} since the soft and
collinear approximations of the matrix elements and phase space are
universal.  This makes it easy to apply to a wide variety of
physically interesting processes.  However, the disadvantage is the
presence of the arbitrary cutoff $\delta$.  The integral should not
depend on $\delta$, and the $\delta$ dependence of the two terms in
Eq.~8 should cancel.  Since the approximations are reliable only when
$\delta$ is small, this can give rise to numerical problems.

Finally, a third method is a hybrid of the two previous techniques.
To preserve the portability of the phase space slicing method, we add
and subtract only the universal soft/collinear approximations for $x <
\delta$,
\begin{eqnarray}
{\cal I} &\sim & \lim_{\epsilon \to 0} \left \lbrace
\int^1_0 \frac{dx}{x} x^\epsilon F(x)
-F(0) \int^\delta_0 \frac{dx}{x} x^\epsilon
+F(0) \int^\delta_0 \frac{dx}{x} x^\epsilon
- \frac{1}{\epsilon} F(0)\right \rbrace \nonumber \\
    &\sim &
\int^1_0 \frac{dx}{x}  \left( F(x)-F(0) \theta(\delta-x) \right)
+F(0) \ln(\delta).
\end{eqnarray}
A cancellation between the terms still occurs, however only the phase
space is approximated, so that this method is valid at larger values
of $\delta$.  The difference between the latter two approaches is,
\begin{equation}
\int^\delta_0 \frac{dx}{x}  \left( F(x)-F(0) \right),
\end{equation}
which clearly tends to zero as $\delta \to 0$.  Therefore, provided
$\delta$ is chosen small enough, all three methods should give
equivalent results.


We will present results using all three methods, however, we first
turn briefly to a discussion of the previous calculations, each of
which uses a different notation for the first and second order
coefficients $\bar A$ and $\bar B$ as shown in Table~1.  We follow the
event shape description and focus on the perfect resolution limit
($\delta \to 0$). In other words, no jet definition is applied to the
partons before computing the energy-energy correlation function.

Both AB and RSE use the subtraction method to compute $\bar B$.  AB
perform the five dimensional integral over the four parton phase space
numerically, while RSE relate the angle between partons $\chi$ to the
invariants and are left with a four dimensional integral.  Their
results for the energy-energy correlation at $\chi \sim 90^\circ$ are
shown in Table~2.  Because one of the integrations has been removed,
RSE have significantly smaller errors.  Nevertheless, within the
errors, both agree.  This is in contrast to the claim in \cite{AB2}
where $B/A$ of RSE is compared with $\bar B/\bar A$ of
AB\footnote{Table~2 of \cite{AB2} claims to show the ratio $R^{corr}
\sim B/ A $ however inspection of the raw numbers in Table~1
indicates that actually $R^{corr} \sim \bar B/\bar A$ is quoted.  As
a result the comparison of AB and RSE in Fig.~4 of \cite{AB2} is
flawed.  Unfortunately this claim has propagated through the
literature \cite{FK,KN}.}.

\begin{table}[t]
\begintable
             | $\bar A$             | $\bar B$             \crthick
AB$^{(1)}$   | $2F$                 | $4G$                 \cr
RSE$^{(2)}$  | $2g^{(1)}$           | $4g^{(2)}$           \cr
FK$^{(3)}$   | $2C$                 | $4D$                 \cr
KN$^{(4)}$   | $A_{EEC}/\sin^2\chi$ | $B_{EEC}/\sin^2\chi$ \endtable
\caption[]{The definitions of the LO and NLO coefficients of the
different calculations;\\
 (1) Eq. 1.6 of ref.~\cite{AB2},
(2) eq. 1.4 of ref.~\cite{RSE2}, (3) eq. 1.2 of ref.~\cite{FK},
(4) eq. 4.24 of ref.~\cite{KN}. }
\end{table}

Falck and Kramer \cite{FK} present two results for the perfect
resolution limit.  The first is based on a phase space slicing
approach with a theoretical cutoff such that $y_{ij} = (p_i+p_j)^2/s >
\ymin = 10^{-4}$.  For such small values of $\ymin$, it is assumed
that the limit $\ymin \to 0$ can be considered to have been reached -
an assumption supported by earlier studies \cite{AB1}.  This result is
somewhat larger than AB and RSE, but the numerical errors also appear
to be larger.  As a check, FK quote a second much smaller result based
on the subtraction method which is in rough agreement with RSE (and
hence AB).  However, in conclusion, FK ascribe these differences to
the presence of the cutoff $\ymin$ and the phase space slicing method
used to compute $\bar B/\bar A$.


\begin{table}[t]
\begintable
            | $\bar A(\chi \sim 90^\circ)$ | $\bar B(\chi \sim 90^\circ)$
 | $\bar B/\bar A$\crthick
AB$^{(1)}$  | 2.434 | $42.68 \pm 1.94$ | $17.53 \pm 0.79$      \cr
RSE$^{(2)}$ | 2.426 | $41.52 \pm 0.16$ | $17.1  \pm 0.06 $     \cr
FKa$^{(3)}$ | $--$  | $--$             | $25.1  \pm ?$         \cr
FKb$^{(4)}$ | $--$  | $--$             | $17.5  \pm ?$         \cr
KN$^{(5)}$  | 2.43  | $51.25\pm 2.67$  | $21.1  \pm 1.1$       \cr
GSa$^{(6)}$        | 2.43  | $52.39\pm 0.83$  | $21.6  \pm 0.34$
   \cr
GSb$^{(7)}$         | 2.43  | $51.15\pm 0.68$  | $21.05 \pm  0.28$
    \cr
GSc$^{(8)}$         | 2.43  | $52.29\pm 2.08$  | $21.52 \pm 0.86$
   \endtable
\caption[]{The NLO to LO coefficients and the ratio
$\bar B/\bar A$ for the different calculations;
(1) Table 1 of ref.~\cite{AB2},
(2) Table 3 of ref.~\cite{RSE2},
(3) Fig.~ 3 of ref.~\cite{FK},
(4) Fig.~ 6 of ref.~\cite{FK},
(5) Tables 2 and 3 of ref.~\cite{KN},
(6) The subtraction method,
(7) The phase space slicing scheme with $\ymin=10^{-5}$,
(8) The hybrid subtraction scheme with $\ymin=10^{-5}$.}
\end{table}

Finally, the benchmark calculation of ${\cal O}(\alpha_s^2)$
quantities at LEP energies is that of Kunszt and Nason.  By using a
sophisticated phase space mapping, they have reorganised the ERT
matrix elements to give numerically stable results for all of the
event shape and three jet quantities measured at LEP.  Many of their
predictions for other quantities have been checked
\cite{glo} and it would be rather surprising for a single distribution
to be in error.  However, despite claiming to agree with FK, the KN
result at $\chi \sim 90^\circ$ lies between the other calculations.

We have recalculated the ${\cal O}(\alpha_s^2)$ coefficient using all
three numerical techniques described earlier.  First, we have recoded
the ERT matrix elements precisely as described in \cite{ERT}.
However, rather than weight each event by the value of the $C$
parameter \cite{ERT}, we have weighted by the energy-energy
correlation function,
$$
\Sigma^{(3)} = \Sigma_{ij, k\neq i,j}
\frac{2E_iE_j}{s} ~\delta\left(\cos\chi -
\left(\frac{y_{ik}y_{jk}-y_{ij}}{y_{ik}y_{jk}+y_{ij}}\right)\right),
$$
and,
$$
\Sigma^{(4)} = \Sigma_{ij, k\neq i,j, l \neq i,j,k} \frac{2E_iE_j}{s}
{}~\delta\left(\cos\chi -
\left(\frac{y_{ikl}y_{jkl}-y_{kl}-y_{ij}}
{y_{ikl}y_{jkl}-y_{kl}+y_{ij}}\right)\right),
$$
for three and four parton final states respectively.

\begin{figure}\vspace{8cm}
\special{psfile=fig1.ps
          angle=0 hscale=45 vscale=45 hoffset=100 voffset=-80}
\caption[]{The ratio $\bar B/\bar A$ at $\chi \sim 90^\circ$
as a function of $\ymin$ for the phase space slicing (GSb) and hybrid
subtraction (GSc) schemes.  The $\ymin$ independent values obtained
from the subtraction method (GSa) and from ref.~\cite{KN} are also
shown.}
\end{figure}

Second, we have constructed a completely independent program along the
lines of \cite{GG} using squared matrix elements rather than helicity
amplitudes.  Either phase space slicing or the hybrid subtraction
scheme may be selected.  As described earlier, these methods rely on
an unphysical cut to isolate the divergences.  Fig.~1 shows the ratio
$\bar B/\bar A$ at $\chi \sim 90^\circ$ as a function of this cut,
$\ymin$.  At large $\ymin$, the predictions using the phase space
slicing method varies rapidly with $\ymin$.  This is because the
approximations used to perform the analytic integrations are
inaccurate.  However, despite the increasing numerical errors, we see
that for $\ymin < 10^{-4}$, the variation with $\ymin$ is small.  A
reasonable approximation to the $\ymin \to 0$ limit is therefore
$\ymin = 10^{-5}$.  In the hybrid subtraction scheme, $\bar B/\bar A$
also varies rapidly when $\ymin$ is large,
but the zero resolution limit is also
approximated by $\ymin = 10^{-5}$.

Table~2 shows the value of $\bar B/\bar A$ at $\chi \sim 90^\circ$ for
these three methods.  Within errors, all three agree with each other
and with the result of Kunszt and Nason.  In principle, the
calculation of Falck and Kramer (FKa) should coincide with those of
the phase space slicing method for $\ymin= 10^{-4}$, and the results
of AB and RSE should agree with the subtraction calculation, GSa,
however, we see that this is not the case.

\begin{figure}\vspace{8cm}
\special{psfile=fig2.ps
          angle=0 hscale=45 vscale=45 hoffset=100 voffset=-80}
\caption[]{The ratio of KN \cite{KN}
and our results using the phase space slicing method with
$\ymin = 10^{-5}$
(GSb) over the whole range of $\cos\chi$.}
\end{figure}

So far we have concentrated on a single value of $\chi$.  Fig.~2 shows
the ratio of the Kunszt-Nason calculation and our phase space slicing
results with $\ymin = 10^{-5}$ over the whole range of $\cos\chi$.  We
see that the two calculations are in good agreement with errors of
less than ${\cal O}(5\%)$.  Fitting a constant to this data
yields a ratio of 1.0068 with a $\chi^2$/d.o.f of 0.98.  The other
numerical methods give similar results.

We therefore conclude that the KN calculation is indeed correct and
that the other predictions (AB, RSE and FK) seem to be deficient in
some way.  This has a direct impact on the measurements of the strong
coupling constant made at LEP and SLC.  For example, by eliminating
this source of theoretical error, the values of $\alpha_s$ extracted
from the EEC and AEEC quoted earlier become\footnote{See Table 1 of
\cite{sld}},
\begin{eqnarray}
\alpha^{EEC}_s(M_Z^2) & = & 0.125^{+0.002}_{-0.003}~({\rm exp.})
\pm 0.012 ~({\rm theory}),\nonumber \\
\alpha^{AEEC}_s(M_Z^2) & = & 0.114\pm 0.005~({\rm exp.})
\pm 0.004 ~({\rm theory}),\nonumber
\end{eqnarray}
where, in addition to a reduction in the quoted theoretical error, the
central values have also changed.

Finally, the ${\cal O}(\alpha_s^2)$ coefficients have also provided
an input into QCD calculations where logarithms of the form $\log(1/y)$
where $y = \frac{1+\cos\chi}{2}$ have been resummed \cite{catani}.
It is worth noting that the coefficients of the logarithmic terms
computed using resummation techniques have been shown to
agree with the coefficients extracted from the numerical results of
Kunszt and Nason  and not with those of AB, RSE and FK \cite{turnock}.
This provides additional confirmation of the results presented here and
of the validity of the resummation method.

SLD have obtained a value of $\alpha_s$ using such resummed
calculations for the EEC,
again averaging over the four calculations of $\bar B$,
$$
\alpha^{EEC}_s(M_Z^2) = 0.130^{+0.003}_{-0.004}~({\rm exp.})
\pm 0.007 ~({\rm theory}) ~~~~~({\rm resummed}).
$$
Using the KN
calculation alone, this becomes \cite{sld},
$$
\alpha^{EEC}_s(M_Z^2) = 0.129^{+0.003}_{-0.004}~({\rm exp.})
\pm 0.005 ~({\rm theory})~~~~~({\rm resummed}),
$$
which, within errors, is consistent with the measurements from the
EEC and AEEC using the ${\cal O}(\alpha_s^2)$ calculations.

In conclusion, motivated by an apparent disagreement amongst
theoretical calculations of the ${\cal O}(\alpha_s^2)$ coefficient of
the energy-energy correlation function, we have recomputed it using
three different numerical techniques.  With all three methods, we
reproduce the results of Kunszt and Nason which have formed the
benchmark for extracting a value for the strong coupling constant from
LEP and SLC data.\\

\noindent{ \Large \bf Acknowledgements}

EWNG thanks James Stirling for enlightening discussions and Ramon
Munoz-Tapia for critically reading the manuscript.


\newpage
\begin{thebibliography}{99}
\bibitem{delphi}DELPHI Collaboration, P. Abreu et al,
Phys. Lett. {\bf B252} (1990) 149.
\bibitem{opal}OPAL Collaboration,
M.Z. Akrawy, Phys. Lett. {\bf B252} (1990) 159,
P.D. Acton et al,
Phys. Lett. {\bf B276} (1992) 547.
\bibitem{opalnew}OPAL Collaboration,
P.D. Acton et al,
Z. Phys. {\bf C59} (1993) 1.
\bibitem{sld}SLD Collaboration,
K. Abe et al,
SLAC preprint SLAC-PUB-6451 (1994).
\bibitem{SW} W.J. Stirling and M.R. Whalley,
Durham report DPDG/87/1 (1987).
\bibitem{ERT} R.K. Ellis, D.A. Ross and A.E. Terrano,
              Nucl. Phys. {\bf B178} (1981) 421.
\bibitem{BBEL} C.L. Basham, L.S. Brown, S.D. Ellis and S.T. Love,
Phys. Rev. Lett. {\bf 41} (1978) 1585,
Phys. Rev. {\bf D17} (1982) 2298.
\bibitem{AB1} A. Ali and F. Barreiro,
Phys. Lett. {\bf 118B} (1982) 155.
\bibitem{AB2} A. Ali and F. Barreiro,
Nucl. Phys. {\bf B236} (1984) 269.
\bibitem{RSE1} D.G. Richards, W.J. Stirling and S.D. Ellis,
Phys. Lett. {\bf 119B} (1982) 193.
\bibitem{RSE2} D.G. Richards, W.J. Stirling and S.D. Ellis,
Nucl. Phys. {\bf B229} (1983) 317.
\bibitem{FK} N.K. Falck and G. Kramer,
Z. Phys. {\bf C42} (1989) 459.
\bibitem{KN} Z. Kunszt, P. Nason, G. Marchesini and B.R. Webber in
``Z physics at LEP 1", CERN 89-08, vol. 1, eds. G. Altarelli,
R. Kleiss and C. Verzegnassi (CERN, Geneva, 1989).
\bibitem{KS}  Z. Kunszt and D.E. Soper,
	      Phys. Rev. {\bf D46} (1992) 196.
\bibitem{GG}  W.T. Giele and E.W.N. Glover,
	      Phys. Rev. {\bf D46}  (1992) 1980.
\bibitem{glo} E.W.N. Glover, unpublished.
\bibitem{catani} S. Catani, L. Trentadue, G. Turnock and B.R. Webber,
Nucl. Phys. {\bf B407} (1993) 3.
\bibitem{turnock} G. Turnock, Cambridge University
preprint Cavendish-HEP-92/3 (1992);
Cambridge University Ph.D. thesis (1992).
\end{thebibliography}
\end{document}
%tables.tex
% +--------------------------------------------------------------------+
% |                                                                    |
% |                           TABLES.TEX                               |
% |                                                                    |
% |                     Ray F. Cowan  15-Feb-85                        |
% |                                                                    |
% |                       Princeton University                         |
% |                                                                    |
% |                     Last Revision: 17-Apr-86                       |
% |                                                                    |
% |   Macros I find handy for making tables.  See TABLEDOC TEX for     |
% |   a longer description.  The token-counting macros are straight    |
% |   from the TeXbook's "Dirty Tricks" appendix.                      |
% |                                                                    |
% +--------------------------------------------------------------------+
%
\newbox\hdbox%
\newcount\hdrows%
\newcount\multispancount%
\newcount\ncase%
\newcount\ncols% This is the number of primary text columns in the table.
\newcount\nrows%
\newcount\nspan%
\newcount\ntemp%
\newdimen\hdsize%
\newdimen\newhdsize%
\newdimen\parasize%
\newdimen\spreadwidth%
\newdimen\thicksize%
\newdimen\thinsize%
\newdimen\tablewidth%
\newif\ifcentertables%
\newif\ifendsize%
\newif\iffirstrow%
\newif\iftableinfo%
\newtoks\dbt%
\newtoks\hdtks%
\newtoks\savetks%
\newtoks\tableLETtokens%
\newtoks\tabletokens%
\newtoks\widthspec%
%
%  Book-keeping stuff--see how often these macros are called.
%
\immediate\write15{%
CP SMSG GJMSINK TEXTABLE --> TABLE MACROS V. 851121 JOB = \jobname%
}%
%
%  Turn on table diagnostics.
%
\tableinfotrue%
\catcode`\@=11%  Allows use of "@" in macro names, like PLAIN.TEX does.
\def\out#1{\immediate\write16{#1}}%  Debugging aid.  Writes #1 on the
%                                    user's terminal and in the log file.
%
%  Define the \tstrut height, depth in terms of the x_height parameter.
%
\def\tstrut{\vrule height3.1ex depth1.2ex width0pt}%
\def\and{\char`\&}%  Allows us to get an `&' in the text.  This is the
%                    same as using the PLAIN TeX macro \&.
\def\tablerule{\noalign{\hrule height\thinsize depth0pt}}%
\thicksize=1.5pt%  Default thickness for fat rules.  The user should feel
%                  free to change this to his preference.
\thinsize=0.6pt%   Default thickness for thin rules.
\def\thickrule{\noalign{\hrule height\thicksize depth0pt}}%
\def\hrulefill{\leaders\hrule\hfill}%
\def\bigrulefill{\leaders\hrule height\thicksize depth0pt \hfill}%
\def\ctr#1{\hfil\ #1\hfil}%
\def\altctr#1{\hfil #1\hfil}%
\def\vctr#1{\hfil\vbox to0pt{\vss\hbox{#1}\vss}\hfil}%
%
%  Here are things for controlling the width of the finished table.
%
\tablewidth=-\maxdimen%
\spreadwidth=-\maxdimen%
\def\tabskipglue{0pt plus 1fil minus 1fil}%
%
%  Stuff for centering or not.
%
\centertablestrue%
\def\centeredtables{%
   \centertablestrue%
}%
\def\noncenteredtables{%
   \centertablesfalse%
}%
%
%  \vctr vertically centers its argument in the row.
%
\parasize=4in%
\long\def\para#1{%  Used to make little paragraphs out of one entry.
   {%
      \vtop{%
         \hsize=\parasize%
         \baselineskip14pt%
         \lineskip1pt%
         \lineskiplimit1pt%
         \noindent #1%
         \vrule width0pt depth6pt%
      }%
   }%
}%
%
\gdef\ARGS{########}%  Produces the correct number of #'s in the preamble
%                      by the time eveything is expanded and \halign sees
%                      it.
\gdef\headerARGS{####}%  Same as \ARGS, but used in \header macros.
\def\@mpersand{&}%  Allows us to get alignment tab characters later
%                   when we have made the character "&" an active macro.
{\catcode`\|=13%  Make |'s locally active.
\gdef\letbarzero{\let|0}%  Globally define a macro that allows us to
%                          keep active |'s from being expanded in edef's.
\gdef\letbartab{\def|{&&}}%
\gdef\letvbbar{\let\vb|}%
%  This \def will cause active |'s read by
%                            \ruledtable to be converted into double
%                            alignment tabs.
}%  End of locally active |'s.
%
{\catcode`\&=4%  Make these alignment tabs.
\def\ampskip{&\omit\hfil&}%  This local macro skips a vertical rule.
\catcode`\&=13%  Now make &'s into active macros.
\let&0%  This allows us to expand \ampskip in the next \xdef without
%        attempting to expand the & and getting an "undefined control
%        sequence" error.
\xdef\letampskip{\def&{\ampskip}}%
\gdef\letnovbamp{\let\novb&\let\tab&}
%  This will cause active &'s read by
%                                   \ruledtable to be converted into
%                                   double tabs and an \omit'ted \vrule.
}%  End of locally active &'s.
%
\def\begintable{%  Here we make |'s and &'s active characters so we can
%                  interpret them as macros.  Note that this action is
%                  true only until we encounter the matching \endgroup
%                  token later at the end of the \ruledtable macro.
   \begingroup%
   \catcode`\|=13\letbartab\letvbbar%
   \catcode`\&=13\letampskip\letnovbamp%
   \def\multispan##1{%  We must redefine \multispan to count the number
%                       of primary columns, not physical columns.
      \omit \mscount##1%
      \multiply\mscount\tw@\advance\mscount\m@ne%
      \loop\ifnum\mscount>\@ne \sp@n\repeat%
   }%  End of \multispan macro.
   \def\|{%
      &\omit\widevline&%
   }%
   \ruledtable%  Now we call \ruledtable to do the real work.
}%  End of \begintable macro.
%
\long\def\ruledtable#1\endtable{%
%
%  This macro reads in the user's data entries
%  and converts them into a ruled table.
%
%  Important note:  Many macros and parameters are re-defined here, and
%  these must be kept local to the table macros to avoid conflict with
%  their use outside of tables.  This is done by the \begingroup token
%  macro \begintable and the \endgroup token at the end of
%  this macro.
%
   \offinterlineskip%  Needed to make rules touch each other.
   \tabskip 0pt%  Needed for same reason as \offinterlineskip.
   \def\widevline{\vrule width\thicksize}%  Make outer \vrule's wider.
   \def\endrow{\@mpersand\omit\hfil\crnorm\@mpersand}%
   \def\crthick{\@mpersand\crnorm\thickrule\@mpersand}%
   \def\crthickneg##1{\@mpersand\crnorm\thickrule
          \noalign{{\skip0=##1\vskip-\skip0}}\@mpersand}%
   \def\crnorule{\@mpersand\crnorm\@mpersand}%
   \def\crnoruleneg##1{\@mpersand\crnorm
          \noalign{{\skip0=##1\vskip-\skip0}}\@mpersand}%
   \let\nr=\crnorule%  A shorter abbreviation.
   \def\endtable{\@mpersand\crnorm\thickrule}%
%
   \let\crnorm=\cr%  Allows us to use \cr for our own purposes.
%
%  Cause user-typed \cr's to follow a row with a \tablerule.
%
   \edef\cr{\@mpersand\crnorm\tablerule\@mpersand}%
   \def\crneg##1{\@mpersand\crnorm\tablerule
          \noalign{{\skip0=##1\vskip-\skip0}}\@mpersand}%
   \let\ctneg=\crthickneg
   \let\nrneg=\crnoruleneg
%
   \the\tableLETtokens%  Get the user's extra \let's, if any.
%
%  Put the data entries into a token register so we can scan through them
%  and see what the user is asking us to do.
%
   \tabletokens={&#1}%  We add an extra alignment tab to the beginning
%                       of the first row to allow for the first \vrule.
%
%  Now count how many rows are in the table and return the result in
%  count register \nrows; do the same for columns, and return that
%  in register \ncols.
%
   \countROWS\tabletokens\into\nrows%
   \countCOLS\tabletokens\into\ncols%
%
%  Now do a little arithmetic to convert the number of primary columns
%  into the number of physical columns that the alignment preamble must
%  prepare for;  similarly for rows.
%
   \advance\ncols by -1%
   \divide\ncols by 2%
   \advance\nrows by 1%
%
%  Tell the user how many rows and columns we found in his data, if he
%  wants to know.
%
   \iftableinfo %
      \immediate\write16{[Nrows=\the\nrows, Ncols=\the\ncols]}%
   \fi%
%
%  Now we actually go ahead and produce the table.
%
   \ifcentertables
      \ifhmode \par\fi%  Make sure we are in vertical mode.
%     \line{% The final table comes out as an \hbox of width the \hsiz
%                    * * Replaced  at 14:32:17 on 3 Mar 1987 by JOWETT
%      since \line is usurped by LaTeX ...
      \hbox to \hsize{% The final table comes out as an \hbox of width the
%%\hsiz
      \hss%  The final table will be centered left-to-right.
   \else %
      \hbox{%
   \fi
      \vbox{%
         \makePREAMBLE{\the\ncols}%  Generate the preamble.
         \edef\next{\preamble}%  This line and the next line force the
         \let\preamble=\next%    expansion of all \ARGS tokens into the
%                                appropriate number of #'s.
         \makeTABLE{\preamble}{\tabletokens}%  Go do the \halign here.
      }%  End of \vbox.
      \ifcentertables \hss}\else }\fi%  Finish the centering effect.
%                                       It is important that no spaces
%                                       follow the two `}' here.
%  }%  End of \line.
   \endgroup%  Return all local macros and parameters to their outside
%              values.
   \tablewidth=-\maxdimen%  Reset \tablewidth to normal.
   \spreadwidth=-\maxdimen% Same for \spreadwidth.
}%  End of macro \ruledtable.
%
\def\makeTABLE#1#2{%  Does an \halign for the \ruledtable macro.
   {%  Start of local parameter values.
%
   \let\ifmath0%     These macros would cause trouble if they were to be
   \let\header0%     expanded in the following \xdef; we \let them be
   \let\multispan0%  equal to a digit, because digits can't be expanded.
%
%  Set up the width specification here.
%
   \ncase=0%
   \ifdim\tablewidth>-\maxdimen \ncase=1\fi%
   \ifdim\spreadwidth>-\maxdimen \ncase=2\fi%
   \relax%  This \relax is absolutely necessary, without it the following
%           \ifcase will always take \ncase=0.
%
   \ifcase\ncase %
      \widthspec={}%
   \or %
      \widthspec=\expandafter{\expandafter t\expandafter o%
                 \the\tablewidth}%
   \else %
      \widthspec=\expandafter{\expandafter s\expandafter p\expandafter r%
                 \expandafter e\expandafter a\expandafter d%
                 \the\spreadwidth}%
   \fi %
%\out{Widthspec=[\the\widthspec]}%
%\out{Preamble=[\preamble]}%
   \xdef\next{%  We must force the preamble to be expanded BEFORE the
      \halign\the\widthspec{%
%        \halign is done;  this \edef\next{...}\next construction
%                does the trick.
      #1%  This is the preamble text.
%
      \noalign{\hrule height\thicksize depth0pt}%  Makes the top \hrule.
%
      \the#2\endtable%  This is the main body.
%
%     \noalign{\hrule height0.7pt depth0pt}%  Makes the last \hrule.
      }%  End of \halign.
   }%  End of \next.
   }%  End of local values.
   \next%  This \next must be outside of the local values, because now
%          we want those troublesome macros in the \let's above to have
%          their normal actions.
}%  End of macro \makeTABLE.
%
\def\makePREAMBLE#1{%  This macro generates the necessary preamble for a
%                      ruled table with #1 primary columns.
%                      (Primary columns means the number of columns NOT
%                       counting those used for vertical rules.)
   \ncols=#1%  Get the number of columns desired.
   \begingroup%  Start local parameter definitions.
   \let\ARGS=0%  This is the key to the whole thing; it prevents \ARGS
%                from being expanded in the following \edef's.
   \edef\xtp{\widevline\ARGS\tabskip\tabskipglue%
   &\ctr{\ARGS}\tstrut}%  A 1-column preamble.  Gets the sizing right.
   \advance\ncols by -1%  One column has been generated; decrement the
%                         counter.
   \loop%  Append as many further columns as needed to the preamble.
      \ifnum\ncols>0 %
      \advance\ncols by -1%
      \edef\xtp{\xtp&\vrule width\thinsize\ARGS&\ctr{\ARGS}}%
   \repeat
   \xdef\preamble{\xtp&\widevline\ARGS\tabskip0pt%
   \crnorm}%  Adds the last \vrule.
   \endgroup%  End of local parameters.
}%  End of macro \makePREAMBLE.
%
\def\countROWS#1\into#2{%  This counts the number of rows in #1 by
%                          looking for control sequences that end a row,
%                          e.g., \cr, \crthick, etc., and puts the result
%                          into count register #2.
   \let\countREGISTER=#2%
   \countREGISTER=0%
%  \out{In countROWS:  tokens are [\the#1]}%
   \expandafter\ROWcount\the#1\endcount%
}%
%
\def\ROWcount{%
   \afterassignment\subROWcount\let\next= %
}%
\def\subROWcount{%
%  \out{In subROWcount:  next is [\meaning\next]}%  Debugging aid.
   \ifx\next\endcount %
      \let\next=\relax%
   \else%
      \ncase=0%
      \ifx\next\cr %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\endrow %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crthick %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crnorule %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crthickneg %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crnoruleneg %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crneg %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\header %
%     \out{In subROWcount:  next=header, ncase set=1}%
         \ncase=1%
      \fi%
%     \out{In subROWcount:  ncase is [\the\ncase]}%
      \relax%
      \ifcase\ncase %
         \let\next\ROWcount%
%        \out{subROWcount---> ncase=\the\ncase}%
      \or %
         \let\next\argROWskip%
%        \out{subROWcount---> ncase=\the\ncase}%
      \else %
      \fi%
   \fi%
%  \out{subROWcount---> NEXT=\meaning\next}%
   \next%
}%  End of macro \subROWcount.
%
\def\counthdROWS#1\into#2{%
\dvr{10}%
   \let\countREGISTER=#2%
   \countREGISTER=0%
\dvr{11}%
%  \out{In counthdROWS:  tokens are [\the#1]}%
\dvr{13}%
   \expandafter\hdROWcount\the#1\endcount%
\dvr{12}%
}%
%
\def\hdROWcount{%
   \afterassignment\subhdROWcount\let\next= %
}%
\def\subhdROWcount{%
%\out{In subhdROWcount:  next is [\meaning\next]}%
   \ifx\next\endcount %
      \let\next=\relax%
   \else%
      \ncase=0%
      \ifx\next\cr %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\endrow %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crthick %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\crnorule %
         \global\advance\countREGISTER by 1%
         \ncase=0%
      \fi%
      \ifx\next\header %
%\out{In subhdROWcount:  next=header, ncase set=1}%
         \ncase=1%
      \fi%
%\out{In subhdROWcount:  ncase is [\the\ncase]}%
\relax%
      \ifcase\ncase %
         \let\next\hdROWcount%
%\out{subhdROWcount---> ncase=\the\ncase}%
      \or%
         \let\next\arghdROWskip%
%\out{subhdROWcount---> ncase=\the\ncase}%
      \else %
      \fi%
   \fi%
%\out{subhdROWcount---> NEXT=\meaning\next}%
   \next%
}%
%
{\catcode`\|=13\letbartab
\gdef\countCOLS#1\into#2{%
%  \out{In countCOLS:  tokens are [\the#1]}
   \let\countREGISTER=#2%
   \global\countREGISTER=0%
   \global\multispancount=0%
   \global\firstrowtrue
   \expandafter\COLcount\the#1\endcount%
   \global\advance\countREGISTER by 3%
   \global\advance\countREGISTER by -\multispancount
%  \out{countCOLS-->[\the\countREGISTER]}
}%
%
\gdef\COLcount{%
   \afterassignment\subCOLcount\let\next= %
}%
{\catcode`\&=13%
\gdef\subCOLcount{%
%\out{In subCOLcount: next is [\meaning\next]}
   \ifx\next\endcount %
      \let\next=\relax%
   \else%
      \ncase=0%
      \iffirstrow
         \ifx\next& %
            \global\advance\countREGISTER by 2%
            \ncase=0%
         \fi%
         \ifx\next\span %
            \global\advance\countREGISTER by 1%
            \ncase=0%
         \fi%
         \ifx\next| %
            \global\advance\countREGISTER by 2%
            \ncase=0%
         \fi
         \ifx\next\|
            \global\advance\countREGISTER by 2%
            \ncase=0%
         \fi
         \ifx\next\multispan
            \ncase=1%
            \global\advance\multispancount by 1%
         \fi
         \ifx\next\header
            \ncase=2%
         \fi
         \ifx\next\cr       \global\firstrowfalse \fi
         \ifx\next\endrow   \global\firstrowfalse \fi
         \ifx\next\crthick  \global\firstrowfalse \fi
         \ifx\next\crnorule \global\firstrowfalse \fi
         \ifx\next\crnoruleneg \global\firstrowfalse \fi
         \ifx\next\crthickneg  \global\firstrowfalse \fi
         \ifx\next\crneg       \global\firstrowfalse \fi
      \fi%  End of \iffirstrow.
\relax%\out{subCOL-->  ncase=[\the\ncase]}
% \out{subCOL-->  next=\meaning\next}
      \ifcase\ncase %
         \let\next\COLcount%
      \or %
         \let\next\spancount%
      \or %
         \let\next\argCOLskip%
      \else %
      \fi %
   \fi%
%  \out{subCOL-->  countREGISTER=[\the\countREGISTER]}
   \next%
}%
\gdef\argROWskip#1{%
%  Deletes the next balanced, undelimited argument from a
%                 token list.
% \out{---> Entering argROWskip <---}
% \out{In argROWskip:  deleted arg is [#1]}%
   \let\next\ROWcount \next%
}%  End of macro \argskip.
\gdef\arghdROWskip#1{%
%  Deletes the next balanced, undelimited argument from a
%                 token list.
% \out{---> Entering arghdROWskip <---}
% \out{In arghdROWskip:  deleted arg is [#1]}%
   \let\next\ROWcount \next%
}%  End of macro \arghdROWskip.
\gdef\argCOLskip#1{%
%  Deletes the next balanced, undelimited argument from a
%                 token list.
% \out{---> Entering argCOLskip <---}
% \out{In argCOLskip:  deleted arg is [#1]}%
   \let\next\COLcount \next%
}%  End of macro \argskip.
}%  End of active &'s.
}%  End of active |'s.
\def\spancount#1{%\out{spancount--->\meaning#1}
   \nspan=#1\multiply\nspan by 2\advance\nspan by -1%
   \global\advance \countREGISTER by \nspan
%  \out{number spancount--->\the\nspan; \the\countREGISTER}
   \let\next\COLcount \next}%
%
%\def\dvr#1{\vrule width 1.0pt depth 0pt height 12pt$_{#1}$}
\def\dvr#1{\relax}%
% \omit\hfil%
% \parindent=0pt\hsize=1.1in\valign{%
% \vfil#\vfil&\vfil#\vfil\cr\hfil\hbox{\ Added to\ }\hfil&%
% \hfil\hbox{\ empty events\ }\hfil\cr}\hfil%
\def\header#1{%
\dvr{1}{\let\cr=\@mpersand%
\hdtks={#1}%
%\out{In header:  hdtks=[\the\hdtks]}%
\counthdROWS\hdtks\into\hdrows%
\advance\hdrows by 1%
\ifnum\hdrows=0 \hdrows=1 \fi%
%\out{In header:  Nhdrows=[\the\hdrows]}%
\dvr{5}\makehdPREAMBLE{\the\hdrows}%
%\out{In header:  headerpreamble=[\headerpreamble]}%
\dvr{6}\getHDdimen{#1}%
%\out{In header:  hdsize=[\the\hdsize]}%
%\striplastCR{#1}%
{\parindent=0pt\hsize=\hdsize{\let\ifmath0%
\xdef\next{\valign{\headerpreamble #1\crnorm}}}\dvr{7}\next\dvr{8}%
}%
}\dvr{2}}%  End of macro \header.
%\def\striplastCR#1\cr{\xdef\headerbody{#1}}%
\def\makehdPREAMBLE#1{%This macro generates the necessary preamble for a
\dvr{3}%
%                      ruled table with \ncols primary columns.
%                      (Primary columns means the number of columns NOT
%                       counting those used for vertical rules.
\hdrows=#1%  Get the number of columns desired.
{%  Start local parameter definitions.
\let\headerARGS=0%
%  This is the key to the whole thing; it prevents \ARGS
\let\cr=\crnorm%
%                from being expanded in the followin \edef's.
\edef\xtp{\vfil\hfil\hbox{\headerARGS}\hfil\vfil}%
\advance\hdrows by -1%  One row has been generated; decrement the
%                         counter.
\loop%  Append as many further rows as needed to the preamble.
\ifnum\hdrows>0%
\advance\hdrows by -1%
\edef\xtp{\xtp&\vfil\hfil\hbox{\headerARGS}\hfil\vfil}%
\repeat%
\xdef\headerpreamble{\xtp\crcr}%
}%  End of local parameters.
\dvr{4}}%  End of \makehdPREAMBLE.
%
\def\getHDdimen#1{%
%\out{In getHDdimen:  Arg 1=[#1]}%
\hdsize=0pt%
\getsize#1\cr\end\cr%
}%  End of macro getHDdimen.
\def\getsize#1\cr{%
%\out{In getsize:  Arg 1=[#1]}%
%  Here we have to check arg#1 and see if the first token in #1 is an
%    \end; if so, we stop, else we check the width of arg#1.
%  We recall that each arg#1 will be terminated with a \cr token.
\endsizefalse\savetks={#1}%
%\out{In getsize:  the savetks = [\the\savetks]}%
\expandafter\lookend\the\savetks\cr%
%\out{In getsize:  ifendsize = [\meaning\ifendsize]}%
\relax \ifendsize \let\next\relax \else%
\setbox\hdbox=\hbox{#1}\newhdsize=1.0\wd\hdbox%
\ifdim\newhdsize>\hdsize \hdsize=\newhdsize \fi%
%\out{In getsize:  hdsize=[\the\hdsize]}%
%\out{In getsize:  newhdsize=[\the\newhdsize]}%
\let\next\getsize \fi%
\next%
}%
\def\lookend{\afterassignment\sublookend\let\looknext= }%
\def\sublookend{\relax%
%\out{In sublookend:  looknext = [\looknext]}%
\ifx\looknext\cr %
%\out{In sublooknext:  looknext=cr}%
\let\looknext\relax \else %
%\out{In sublooknext:  looknext/=cr}%
   \relax
   \ifx\looknext\end \global\endsizetrue \fi%
   \let\looknext=\lookend%
    \fi \looknext%
}%
%
%  Allow the user to make his own names for crthick, etc.
%
\def\tablelet#1{%
   \tableLETtokens=\expandafter{\the\tableLETtokens #1}%
}%
\catcode`\@=12%  Change @'s back to their normal category code.
%

