## Basic attributes

`binedges`

: Get the bin edges of the histogram, for 1D histogram, it returns just a vector. For others, it returns a tuple of vectors. If you need a tuple of vectors, use h.binedges at your own risk.`bincounts`

: Get the bin counts (weights) of the histogram.`sumw2`

: Get the sum of weights squared of the histogram, it has the same shape as`bincounts(h)`

.`nentries`

: Get the number of times a histogram is filled (`push!`

ed)

## Derived attributes

`bincenters`

: Get the bin centers of the histogram, for 1D histogram, it returns just a vector. For others, it returns a tuple of vectors.`binerrors`

: Get the error of each bin of the histogram. By default it calls`sqrt()`

on each entry of`sumw2`

as an approximation.`mean`

,`std`

,`median`

,`quantile`

, weighted by histogram`bincounts()`

.

`FHist.integral`

— Function`integral(h; width=false)`

Get the integral a histogram; `width`

means multiply each bincount by their bin width when calculating the integral.

`width`

keyword argument only works with 1D histogram at the moment.

Be aware of the approximation you make when using `width=true`

with histogram with overflow bins, the overflow bins (i.e. the left/right most bins) width will be taken "as is".

## Manipulating histogram

This section includes adding data to histogram, and other operations that return a histogram (may with reduced dimensionality)

`FHist.atomic_push!`

— Function```
push!(h::Hist1D, val::Real, wgt::Real=1)
atomic_push!(h::Hist1D, val::Real, wgt::Real=1)
```

Adding one value at a time into histogram. `sumw2`

(sum of weights^2) accumulates `wgt^2`

with a default weight of 1. `atomic_push!`

is a slower version of `push!`

that is thread-safe.

N.B. To append multiple values at once, use broadcasting via `push!.(h, [-3.0, -2.9, -2.8])`

or `push!.(h, [-3.0, -2.9, -2.8], 2.0)`

```
push!(h::Hist2D, valx::Real, valy::Real, wgt::Real=1)
atomic_push!(h::Hist2D, valx::Real, valy::Real, wgt::Real=1)
```

Adding one value at a time into histogram. `sumw2`

(sum of weights^2) accumulates `wgt^2`

with a default weight of 1. `atomic_push!`

is a slower version of `push!`

that is thread-safe.

```
push!(h::Hist3D, valx::Real, valy::Real, wgt::Real=1)
atomic_push!(h::Hist3D, valx::Real, valy::Real, wgt::Real=1)
```

Adding one value at a time into histogram. `sumw2`

(sum of weights^2) accumulates `wgt^2`

with a default weight of 1. `atomic_push!`

is a slower version of `push!`

that is thread-safe.

`FHist.cumulative`

— Function`cumulative(h::Hist1D; forward=true)`

Create a cumulative histogram. If `forward`

, start summing from the left.

`FHist.rebin`

— Function```
rebin(h::Hist1D, n::Int=1)
rebin(n::Int) = h::Hist1D -> rebin(h, n)
```

Merges `n`

consecutive bins into one. The returned histogram will have `nbins(h)/n`

bins.

```
rebin(h::Hist2D, nx::Int=1, ny::Int=nx)
rebin(nx::Int, ny::Int) = h::Hist2D -> rebin(h, nx, ny)
```

Merges `nx`

(`ny`

) consecutive bins into one along the x (y) axis by summing.

`FHist.restrict`

— Function```
restrict(h::Hist1D, low=-Inf, high=Inf)
restrict(low=-Inf, high=Inf) = h::Hist1D -> restrict(h, low, high)
```

Returns a new histogram with a restricted x-axis. `restrict(h, 0, 3)`

(or `h |> restrict(0, 3)`

) will return a slice of `h`

where the bin centers are in `[0, 3]`

(inclusive).

```
restrict(h::Hist2D, xlow=-Inf, xhigh=Inf, ylow=-Inf, yhigh=Inf)
restrict(xlow=-Inf, xhigh=Inf, ylow=-Inf, yhigh=Inf) = h::Hist2D -> restrict(h, xlow, xhigh, ylow, yhigh)
```

Returns a new histogram with a restricted x-axis. `restrict(h, 0, 3)`

(or `h |> restrict(0, 3)`

) will return a slice of `h`

where the bin centers are in `[0, 3]`

(inclusive).

`FHist.profile`

— Function```
profile(h::Hist2D, axis::Symbol=:x)
profile(axis::Symbol=:x) = h::Hist2D -> profile(h, axis)
```

Returns the `axis`

-profile of the 2D histogram by calculating the weighted mean over the other axis. `profile(h, :x)`

will return a `Hist1D`

with the y-axis edges of `h`

.

`FHist.project`

— Function```
project(h::Hist2D, axis::Symbol=:x)
project(axis::Symbol=:x) = h::Hist2D -> project(h, axis)
```

Computes the `:x`

(`:y`

) axis projection of the 2D histogram by summing over the y (x) axis. Returns a `Hist1D`

.

```
project(h::Hist3D, axis::Symbol=:x)
project(axis::Symbol=:x) = h::Hist3D -> project(h, axis)
```

Computes the `:x`

/`:y`

/`:z`

axis projection of the 3D histogram by summing over the specified axis. Returns a `Hist2D`

.