from time import sleep

import numpy as np

from artiq.experiment import *


class Histograms(EnvExperiment):
    """Histograms demo"""
    def build(self):
        pass

    def run(self):
        nbins = 50
        npoints = 20

        bin_boundaries = np.linspace(-10, 30, nbins + 1)
        self.set_dataset("hd_bins", bin_boundaries,
                         broadcast=True, save=False)

        xs = np.empty(npoints)
        xs.fill(np.nan)
        xs = self.set_dataset("hd_xs", xs,
                              broadcast=True, save=False)

        counts = np.empty((npoints, nbins))
        counts = self.set_dataset("hd_counts", counts, 
                              broadcast=True, save=False)

        for i in range(npoints):
            histogram, _ = np.histogram(np.random.normal(i, size=1000),
                                        bin_boundaries)
            counts[i] = histogram
            xs[i] = i % 8
            sleep(0.3)