Right now, intensity, polarization and footprint are constant during a scan. This is not necessarily the case in experiment. Therefore we need to preserve the possibility of extending IBeamScan towards variable intensity, polarization, footprint.
But yes, on each point of scan every beam property can be changed. We can also scan over polarization, resolution, divergence etc. Also during the wavelength scan the intensity, resolution, beam size and shape will also change as side effect.
So the design of scan as vector of independent beams looks more proper. Some API to set and get the "collective" properties like common wavelength or intensity can be added for each parameter we can meet in individual beam.
This "collective" API may be exposed only to corresponding derivatives of abstract BeamScan. So BeamScan::setWavelength() will affect wavelengths of all beams and should callable from AlphaScan, PolScan(does not exist), but not from LambdaScan and vice versa.