#
# = GSL::Histogram2d class
#
# == Class methods
# ---
# * GSL::Histogram2d.alloc(nx, ny)
# * GSL::Histogram2d.alloc(xrange, yrange)
# * GSL::Histogram2d.alloc(nx, xmin, xmax, ny, ymin, ymax)
# * GSL::Histogram2d.alloc(nx, [xmin, xmax], ny, [ymin, ymax])
#
#   Constructors.
#
#   1. With sizes
#         >> h2 = GSL::Histogram2d.alloc(2, 3)  # size 6
#         >> h2.xrange
#         => GSL::Histogram::Range:
#         [ 0.000e+00 1.000e+00 2.000e+00 ]
#         >> h2.yrange
#         => GSL::Histogram::Range:
#         [ 0.000e+00 1.000e+00 2.000e+00 3.000e+00 ]
#         >> h2.bin
#         => GSL::Histogram::Bin:
#         [ 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ]
#         >> h2.xrange.class.superclass
#         => GSL::Vector::View::ReadOnly
#         >> h2.bin.class.superclass
#         => GSL::Vector::View::ReadOnly
#
#   1. With ranges
#          >> h2 = Histogram2d.alloc([3, 6, 7], [2, 3, 8])
#          >> h2.xrange
#          => GSL::Histogram::Range:
#          [ 3.000e+00 6.000e+00 7.000e+00 ]
#          >> h2.yrange
#          => GSL::Histogram::Range:
#          [ 2.000e+00 3.000e+00 8.000e+00 ]
#          >> h2.bin
#          => GSL::Histogram::Bin:
#          [ 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ]
#
#   1. With sizes and ranges
#          >> h2 = Histogram2d.alloc(4, [0, 4], 3, [1, 5])
#          >> h2.xrange
#          => GSL::Histogram::Range:
#          [ 0.000e+00 1.000e+00 2.000e+00 3.000e+00 4.000e+00 ]
#          >> h2.yrange
#          => GSL::Histogram::Range:
#          [ 1.000e+00 2.333e+00 3.667e+00 5.000e+00 ]
#
# ---
# * GSL::Histogram2d.alloc_uniform(nx, xmin, xmax, ny, ymin, ymax)
# * GSL::Histogram2d.equal_bins_p(h1, h2)
#
#
# == Methods
# ---
# * GSL::Histogram2d#set_ranges(vx, vy)
#
#   This sets the ranges of the existing histogram using
#   two {GSL::Vector}[link:rdoc/vector_rdoc.html] objects or arrays.
# ---
# * GSL::Histogram2d#set_ranges_uniform(xmin, xmax, ymin, ymax)
# * GSL::Histogram2d#set_ranges_uniform([xmin, xmax], [ymin, ymax])
#
#   This sets the ranges of the existing histogram <tt>self</tt> to cover
#   the ranges <tt>xmin</tt> to <tt>xmax</tt> and <tt>ymin</tt> to <tt>ymax</tt> uniformly.
#   The values of the histogram bins are reset to zero.
#
# ---
# * GSL::Histogram2d#clone
# * GSL::Histogram2d#duplicate
#
#   Returns a newly created histogram which is an exact copy of the
#   histogram <tt>self</tt>.
#
# ---
# * GSL::Histogram2d#increment(x, y, weight = 1)
# * GSL::Histogram2d#accumulate(x, y, weight = 1)
# * GSL::Histogram2d#fill(x, y, weight = 1)
#
#   These method update the histogram <tt>self</tt> by adding <tt>weight</tt>
#   to the bin whose <tt>x</tt> and <tt>y</tt> ranges contain the coordinates (x,y).
#   If (x,y) lies outside the limits of the histogram then none of the
#   bins are modified.
#
# ---
# * GSL::Histogram2d#increment2(x, y, weight = 1)
# * GSL::Histogram2d#accumulate2(x, y, weight = 1)
# * GSL::Histogram2d#fill2(x, y, weight = 1)
#
#   These are similar to <tt>GSL::Histogram#increment/accumulate/fill</tt>,
#   but when (x,y) lies outside the limits of the histogram then the edge
#   bin is incremented.
#
# ---
# * GSL::Histogram2d#get(i[, j])
# * GSL::Histogram2d#get([i, j])
# * GSL::Histogram2d#[i, j]
#
#   Return the contents of the <tt>(i,j)</tt>-th bin of the histogram <tt>self</tt>.
#
# ---
# * GSL::Histogram2d#get_xrange(i)
# * GSL::Histogram2d#get_yrange(j)
#
#   These methods find the upper and lower range limits of the <tt>i</tt>-th
#   and <tt>j</tt>-th bins in the x and y directions of the histogram <tt>self</tt>.
#
#   Ex:
#      >> h2 = Histogram2d.alloc(2, [0, 2], 3, [1, 4])
#      >> h2.get_xrange(1)
#      => [1.0, 2.0]
#      >> h2.get_yrange(1)
#      => [2.0, 3.0]
#
# ---
# * GSL::Histogram2d#xrange
# * GSL::Histogram2d#yrange
#
#   These methods returns the range of histogram as <tt>Vector::View</tt> objects.
#
# ---
# * GSL::Histogram2d#xmax
# * GSL::Histogram2d#xmin
# * GSL::Histogram2d#ymax
# * GSL::Histogram2d#ymin
# * GSL::Histogram2d#nx
# * GSL::Histogram2d#ny
#
#   These methodss return the maximum upper and minimum lower range limits
#   and the number of bins for the x and y directions of the histogram <tt>self</tt>.
#
# ---
# * GSL::Histogram2d#reset
#
#   Resets all the bins of the histogram <tt>self</tt> to zero.
#
# ---
# * GSL::Histogram2d#find(x, y)
#
#   Finds the indices i and j to the to the bin which covers the
#   coordinates (<tt>x,y</tt>).
#
# ---
# * GSL::Histogram2d#max_val
#
#   Returns the maximum value contained in the histogram bins.
#
# ---
# * GSL::Histogram2d#max_bin
#
#   Returns the indices (i,j) of the bin containing the maximum value in
#   the histogram <tt>self</tt>.
#
# ---
# * GSL::Histogram2d#min_val
#
#   Returns the minimum value contained in the histogram bins.
# ---
# * GSL::Histogram2d#min_bin
#
#   Returns the indices (i,j) of the bin containing the minimum value
#   in the histogram <tt>self</tt>.
#
# ---
# * GSL::Histogram2d#xmean
#
#   Returns the mean of the histogrammed x variable, where the histogram
#   is regarded as a probability distribution.
#   Negative bin values are ignored for the purposes of this calculation.
#
# ---
# * GSL::Histogram2d#xsigma
#
#   Returns the standard deviation of the histogrammed x variable,
#   where the histogram is regarded as a probability distribution.
#   Negative bin values are ignored for the purposes of this calculation.
#
# ---
# * GSL::Histogram2d#ymean
#
#   Returns the mean of the histogrammed y variable, where the histogram
#   is regarded as a probability distribution. Negative bin values are
#   ignored for the purposes of this calculation.
#
# ---
# * GSL::Histogram2d#ysigma
#
#   Returns the standard deviation of the histogrammed y variable,
#   where the histogram is regarded as a probability distribution.
#   Negative bin values are ignored for the purposes of this calculation.
#
# ---
# * GSL::Histogram2d#cov
#
#   Returns the covariance of the histogrammed x and y variables,
#   where the histogram is regarded as a probability distribution.
#   Negative bin values are ignored for the purposes of this calculation.
#
# ---
# * GSL::Histogram2d#sum
# * GSL::Histogram2d#integral
#
#   Return the sum of all bin values. Negative bin values are included in the sum.
# ---
# * GSL::Histogram2d#add
# * GSL::Histogram2d#sub
# * GSL::Histogram2d#mul
# * GSL::Histogram2d#div
# * GSL::Histogram2d#scale(val)
# * GSL::Histogram2d#shift(val)
# * GSL::Histogram2d#fwrite(io)
# * GSL::Histogram2d#fwrite(filename)
# * GSL::Histogram2d#fread(io)
# * GSL::Histogram2d#fread(filename)
# * GSL::Histogram2d#fprintf(io, range_format, bin_format)
# * GSL::Histogram2d#fprintf(filename, range_format, bin_format)
# * GSL::Histogram2d#fscanf(io)
# * GSL::Histogram2d#fscanf(filename)
#
#
# ---
# * GSL::Histogram2d#xproject(jstart = 0, jend = ny-1)
#
#   Creates a <tt>GSL::Histogram</tt> object by projecting the 2D histogram
#   <tt>self</tt> onto the x-axis over the y-range from <tt>jstart</tt> to <tt>jend</tt>.
#
# ---
# * GSL::Histogram2d#yproject(istart = 0, iend = nx-1)
#
#   Creates a <tt>GSL::Histogram</tt> object by projecting the 2D histogram
#   <tt>self</tt> onto the y-axis over the x-range from <tt>istart</tt> to <tt>iend</tt>.
#
# == Pdf class
# ---
# * GSL::Histogram2d::Pdf.alloc(nx, ny)
#
#   Constructors
#
# ---
# * GSL::Histogram2d::Pdf#init(h)
#
#   Initializer with a GSL::Histogram2d object <tt>h</tt>.
#
# ---
# * GSL::Histogram2d::Pdf#sample(r1, r2)
#
#
# == Example
#   #!/usr/bin/env ruby
#   require("gsl")
#
#   N = 10000
#   BINS = 100
#
#   rng = Rng.new(2)
#   h2 = Histogram2d.alloc(BINS, [-5, 5], BINS, [-8, 8])
#
#   sig1 = 1.0
#   sig2 = 2.0
#
#   for i in 0...N do
#     r1 = rng.gaussian(sig1)
#     r2 = rng.gaussian(sig2)
#     h2.increment(r1, r2)
#   end
#
#   hx = h2.xproject
#   hy = h2.yproject
#   printf("%f %f %f %f\n", h2.xsigma, h2.ysigma, hx.sigma, hy.sigma)
#   GSL::graph(hx, hy, "-T X -C -g 3")
#
#
# {prev}[link:rdoc/hist_rdoc.html]
# {next}[link:rdoc/hist3d_rdoc.html]
#
# {Reference index}[link:rdoc/ref_rdoc.html]
# {top}[link:index.html]
#
