Development of BeamSpotMonitor algorithm
Related MRs and Issues
Test with Moore!2985 (merged)
Adresses (but may not close) #288
Overview
Introduces BeamSpotMonitor
, a new monitoring algorithm for accumulating interaction region statistics from an input container of primary vertexes:
 Tr/TrackMonitors/src/BeamSpotMonitor.cpp
 (Open to renaming suggestions)
External discussions
Contemporary implementation described in contribution of Patrick Spradlin to the RTA: WP4/5 Alignment, Calibration, QA meeting 15 Feb 2024
Target conditions
Intended to calculate and format values for conditions Conditions/LHCb/Online/InteractionRegion.yml. The example YAML file defines the format:
# Example of InteractionRegion condition
# ```
# InteractionRegion:
# position: <avg_position_x_y_z: [float x3]>
# spread: <spread_matrix_xx_xy_yy_xz_yz_zz: [float x6]>
# ```

InteractionRegion:
position: [ "0.0*mm", "0.0*mm", "0.0*mm" ]
spread: [ "0.0064*mm2", "0.0*mm2", "0.0064*mm2", "0.0*mm2", "0.0*mm2", "2809.0*mm2" ]
Computation of values
BeamSpotMonitor
uses six accumulators for calculating sample mean positions and covariance of mean positions of input PVs

Gaudi::Accumulators::SigmaCounter<>
in 'x
', 'y
', and 'z
' from which mean positions and variances are computed 
Gaudi::Accumulators::AveragingCounter<>
for 'xy
', 'yz
', and 'zx
' that are used in conjunction with statistics from the positionSigmaCounter
s to compute the offdiagonal covariances
The mean position for the position
conditions are just the return values of Gaudi::Accumulators::SigmaCounter<>::mean()
.
The diagonal elements of the spread
matrix are the return values of Gaudi::Accumulators::SigmaCounter<>::unbiased_sample_variance()
.
The offdiagonal elements of the spread
matrix are computed from two of the position means and the sum of the corresponding product accumulator:
/// Unbiased sample covariance calculator for offdiagonals
template <typename X, typename XX>
auto calculate_spread_offdiag( X const& x, X const& y, XX const& xy ) {
return ( xy.sum()  xy.nEntries() * x.mean() * y.mean() ) / ( xy.nEntries()  1 );
}
YAML writing
BeamSpotMonitor
can write YAML files to a specified location. In the current version of the method, these are written when the specified number of PVs is reached for the first time and when the values of the accumulators deviate from those of the cached report by any of the configurable thresholds.
BeamSpotMonitor
also has an option to toggle reporting a copy of the conditions through the messaging service at level INFO.