* If the number of detectors is set to 0 (zero) in AliFMDMap, it
will assume that the data contained is 51,200 entries -
corresponding exactly to the number of channels in the FMD.
This is the default mode of operation for most maps - in
particular the multiplicity map of AliESDFMD. Before, one
would specify 3 detectors, 2 rings, 40 sectors, and 512 strips,
resulting in 3*2*40*512=122880 entries - or 71680 entries that
would never be used. This change will effectively more than
half the amount of memory used by AliESDFMD.
* Implemented the member function AliFMDMap::CalcCoords to go from
array index to detector coordinates
(detector,ring,sector,strip).
* Implemented *=, /=, +=, and -= between AliFMDMap objects, and
*, /, +, and - operators that return an AliFMDFloatMap object.
The implementation will access the contained arrays sequentially
for optimal speed (unrolled nested loops). This would allow us
to the ADC->Energy conversion like
energy = (adc - pedestal) * gain
where energy, adc, pedestal, and gain are all AliFMDFloatMap
objects. Special care is taken if the maps do not have the same
dimensions.
* Implemented AliFMDMap::ForEach that takes an object of a
sub-class of AliFMDMap::ForOne and applies the relevant
functional operator to each element. The internal array is
accessed sequentially for optimal speed (unrolled nested
loops).
* Define AliESDFMD::ForEach that will loop over all entries and
apply the functional operator of the supplied object of a
sub-class of AliESDFMD::ForOne to each element in turn. The
loop is unrolled.
Changes in FMD:
* AliFMD***Map now defaults to construct with exactly 51200
entries. Maps with fewer entries can still be made (like
before) by explicit use of constructor arguments.
* Calibration and digitizer code constructs AliFMD***Map with
minimal sizes needed.
These changes committed by Peter HRISTOV on behalf of Christian Holm
Christensen.