The code for solving Eqs. 2-4 is shown in Table 1.
This code has been checked on real data and does not hang or crash
on the first events. The values for the energy and angle
it returns look reasonable for the most part.
There is one case
that is problematic, that being a high energy cluster whose center
is at the outer edge of the detector. An example would be a single
block on the outside edge of the detector with a pulse height
corresponding to 2GeV. This is fairly rare, only a few per run,
but they do have to be treated specially because in this case
a solution to Eqs. 2-4 does not actually exist;
no photon coming from the target, no matter the energy, would be
able to deposit a mean of 2GeV in an outer block without scraping
a block at a smaller radius. In real events, of course, not all
photons come from the target, but this analysis assumes that they
do. The result is that the iterative solution pushes the corrected
energy up to ridiculous levels in search of a solution. The code
in Table 1 fixes this by quitting out of the loop as soon as the
solution energy exceeds some upper bound MAX_PHOTON_ENERGY
.
Another feature of the code in Table 1 that was not presented in the
discussion so far is the azimuthal dependence of the maximum polar
angle of the detector. In Eq. 7 the detector was
assumed to be cylindrical. The code uses a simple quadratic
fit to take into account the irregularities of the outer boundary
of the actual LGD.
The code is located in routine makePohotonPatch.c and assumes that
the cluster center has already been stored in the structure
photon_VC
and that the summed cluster energy (uncorrected) is
found in cluster->energy. Upon exit from the loop, the answers
are stored in the variables energy and theta.
The new code has been uploaded to the central cvs repository. It
replaces the former depth correction in makePhotonPatch.c and
the energy nonlinearity correction in make_photons.c
. So as
not to give anyone an unwelcome surprise, the new code is not
selected by default. Instead, the two files mentioned above were
checked into cvs with special defines
#define OLD_DEPTH_CORRECTION true #define OLD_NONLINEAR_CORRECTION truein the head of the file. Commenting out these two lines will enable the new code. Note that they must be commented out in both makePhotonPatch.c and
make_photons.c
to obtain the new behavior.
As before, the gain coefficients that are obtained using this correction procedure in the calibration will give rise to raw cluster energies that are approximately equal to the corrected ones. If all behaves as expected, once calibration constants have been obtained with this correction in place, an analysis using those gain coefficients and this procedure will need no other patching up to obtain consistent results for the masses of known mesons in the Radphi data set.