BAT.jl icon indicating copy to clipboard operation
BAT.jl copied to clipboard

Add BinningAlgorithm algo type

Open oschulz opened this issue 5 years ago • 4 comments

We currently handle choice of default binning differently in bat_marginalmode and bat_marginalize. We should add BinningAlgorithm as a new super-type for auto-binning algorithms (and also offer user-specified fixed binning).

oschulz avatar Jul 29 '20 19:07 oschulz

I think I can take a look at this, maybe together with @VasylHafych, to harmonize our efforts from marginal mode and plotting in this new type.

Cornelius-G avatar Jul 29 '20 23:07 Cornelius-G

Thanks! We can split _auto_binning_nbins among separate subtypes of AbstractBinningAlgorithm, and have a FixedBinning too or so. Of course we should allow AbstractArrays and NamedTuples of binning algos (like you already implemented for plotting) so the user can specify binning in a per-parameter fashion.

oschulz avatar Jul 30 '20 06:07 oschulz

Ok, so just to make sure I understand what you propose:

We will add a AbstractBinningAlgorithm as a supertype for the different automatic binnings, like Freedman–Diaconis and so on. These types could then be passed to plot and bat_marginalize as a keyword argument like plot(samples, :a, bins=FD()) and would trigger the right version of _auto_binning_nbins. But how exactly should we handle user-defined binning, like fixed number of bins or bin edges. Should it be possible to pass them directly as Ints and Ranges, like currently in plotting: plot(samples, bins=(200, -1:.01:1))? Or would these need to be put into a subtype like FixedBinning, so that plot(samples, bins = FixedBinning(200, -1:0.1:1)) ?

Cornelius-G avatar Jul 30 '20 09:07 Cornelius-G

Yes, that's the idea. FixedBinning would indeed be a subtype of AbstractBinningAlgorithm.

To make life more comfortable for the users, we should define Base.conv(::Type{AbstractBinningAlgorithm}, x) for symbols (e.g. :fd gets converted to Freedman–Diaconis()), scalars (like 500 means 500 bins, ends of range auto-adjusted) and ranges (0:0.2:1000 will be converted to an instance of FixedBinning).

oschulz avatar Jul 30 '20 09:07 oschulz