First version of MT-compliant BunchCrossingCondData and BunchCrossingCondAlg (to replace the BunchCrossingTool), releated to the discussion at https://its.cern.ch/jira/browse/ATR-20410
IMHO the best place for this code is:
LumiBlock/LumiBlockData for the conditions data object
LumiBlock/LumiBlockComps for the conditions algorithm
The BunchCrossingCondData object here has an interface similar to old IBunchCrossingTool. Some methods that appear to be unused were dropped.
The BunchCrossingCondAlgo creates such an object based on the information in the COOL folder
/TDAQ/OLC/LHC/FILLPARAMS, explained on COOlOnlineData Twiki
Alternative ConditionsAlgos, based on other sources of information (like the simulation-parameters metadata or the Trigger Configuration) are certainly possible.
The code proposed here was tested on the q431 run/LB (330470/310). It gives the same answer than the existing BunchCrossingTool, except for the first 24 BCIDs which seem to be low-intensity non-collising bunches that are ignored by the current tool.
To do: Write test cases for more esoteric situations, like 8b4e or trains spanning the BCID_MAX to 0 wrap-around.