Ejemplo n.º 1
0
def makeHistogram( name, axes, data, errs, unit="1", data_type = 'double'):
    """create a histogram out of given data
    axes are a list of (axis_name, axis_bins)
    if axis_bins are integers or strings, it is supposed to be a discreted axis
    if axis bins are floats, it is supposed to be a continuous axis
    """
    # convert axis input parameters to axis instances
    _axes = []
    from Axis import Axis
    for axis_params in axes:
        if isinstance( axis_params, Axis ): _axis = axis_params
        else: _axis = axis( *axis_params )
        _axes.append(_axis)
        continue

    # unit
    unit = unitFromString( unit )

    # data
    shape = [ _axis.size() for _axis in _axes ]
    if data is None: data=createDataset(
        'data', unit, shape = shape,
        data_type = data_type )
    from DatasetBase import DatasetBase
    if isinstance( data, DatasetBase ): dataDS = data
    else: dataDS = createDataset( "data", unit, data = data, data_type = data_type )

    if errs is None: errs=createDataset(
        'errors', unit*unit, shape = shape,
        data_type = dataDS.typecode() )
    if isinstance( errs, DatasetBase ): errsDS = errs
    else: errsDS = createDataset( "errors", unit**2, data = errs, data_type = data_type )
    
    from Histogram import Histogram
    h = Histogram( name = name, unit = unit,
                   data = dataDS, errors = errsDS, axes = _axes )
    h._setShape( tuple([ len(_axis.binCenters()) for _axis in h.axes() ]) )
    return h