EFTfitter.jl - Plotting Tutorial

EFTfitter includes several recipes for plotting its datatypes using Plots.jl

using EFTfitter
using BAT
using IntervalSets
using Distributions
using Plots

we use the inputs from the basic tutorial:

include("tutorial_inputs.jl")
model = EFTfitterModel(parameters, measurements, correlations)

posterior = PosteriorMeasure(model)
algorithm = MCMCSampling(mcalg = MetropolisHastings(), nsteps = 10^5, nchains = 4)
samples = bat_sample(posterior, algorithm).result;

Note: All plots generated with the following plot recipes can be customized using the series attributes, axis attributes, subplot attributes and plot attributes

Plotting Observables

Plotting an Observable object:

plot(Observable(xsec1), (C1=0, C2=-1:0.01:1))

When plotting an Observable from the EFTfitterModel, it can be accessed in different ways:

plot(get_observables(model).xsec1, (C1=0, C2=-1:0.01:1))

plot(get_measurements(model).Meas1.observable, (C1=0, C2=-1:0.01:1))

example plot

If the model has many parameters, it can be convenient to pass the paramter that should be plotted together with as a NamedTuple with default values for all parameters.

default_parameters = (C1=1, C2=0)
plot(get_observables(model).xsec1, (C2=-1:0.01:1,), default_parameters)

example plot

The second argument in this function overwrites the corresponding default parameters, so it is also possible to pass multiple parameters:

plot(get_observables(model).xsec1, (C2=-1:0.01:1, C1=2.3), default_parameters)

example plot

All observables of a model can easily be plotted in one plot:

p = plot()
for meas in get_measurements(model)
    p=plot!(meas.observable, (C1=0, C2=-1:0.01:1), ylabel="prediction")
end
p

example plot

When plotting observables, the default title contains the values of the fixed parameters. In case the title is too long for one line, linebreaks can be inserted using the keyword titlewidth. e.g.:

plot(get_observables(model).xsec1, (C1=-10:0.01:10, C2=0, C3=100, C4=200), titlewidth=13)

example plot

Plotting Measurements

Measurement objects can be plotted on top of the observables as a horizontal line with an uncertainty band:

plot(get_measurements(model).Meas1.observable, (C1=0, C2=-0.2:0.01:0.2))
plot!(measurements.Meas1)

example plot

However, when plotting the measurements of the EFTfitterModel, the following syntax is preferred as it supports showing the names of the measurments in the legend:

plot(get_measurements(model).Meas1.observable, (C1=0, C2=-0.2:0.01:0.2))
plot!(get_measurements(model), :Meas1)

example plot

The uncertainty typed to be plotted can be specified:

plot(get_measurements(model).Meas1.observable, (C1=0, C2=-0.2:0.01:0.2))
plot!(get_measurements(model), :Meas1, uncertainties=(:stat, :another_unc))

example plot

When mutliple types of uncertainties are given, the sum of the squares is used as the total uncertainty. By default, all uncertainties included in the EFTfitterModel are used.

Plotting BinnedMeasurements

BinnedMeasurements can be plotted for fixed parameters:

plot(get_measurement_distributions(model).MeasDist.observable, (C1=1.2, C2=0))
plot!(get_measurement_distributions(model), :MeasDist)

example plot

alternative plotting style for measurement distributions:

plot(get_measurement_distributions(model).MeasDist.observable, (C1=1.2, C2=0))
plot!(get_measurement_distributions(model), :MeasDist, st=:scatter)

example plot

Also for BinnedMeasurements the uncertainty types to be plotted can be specified. The names of the bins can be customized using the bin_names keyword.

plot(get_measurement_distributions(model).MeasDist.observable, (C1=1.2, C2=0))
plot!(get_measurement_distributions(model), :MeasDist, st=:scatter, uncertainties=(:stat,), bin_names=("First bin", "Second bin"))

example plot

Plotting 1D Intervals

Default plot of the smallest 1D intervals containing 90% posterior probability:

plot(samples, 0.9)

example plot

Default settings for keywords:

plot(samples, 0.9,
    parameter_names = get_parameter_names(maybe_shaped_samples), # Array of String with the names of the parameters
    y_positions = collect(1:length(parameter_names))*-1, # y-positions of the interval lines
    y_offset = 0, # offest on the y-axis, helpful when plotting multiple samples on top of each other
    bins = 200, # number of bins for calculating smallest intervals
    atol = 0,) # merge intervals that are seperated less then atol (especially helpful when using a high number of bins)

helpful keyword arguments: msc = markerstrokecolor: color of the interval lines msw = markerstrokewidth: linewidth ms = markersize: size of caps

Customized 1D interval plot:

p = plot(samples, 0.9, bins = 400, atol=0.01, y_offset=-0.1, label = "Samples A")
p = plot!(samples, 0.9, bins = 100, atol=0.05, y_offset=0.1, msw = 5, ms=8, msc=:red, label = "Samples B")

example plot


This page was generated using Literate.jl.