Read a specific parameter from the do_x3dna output file.
    It automatically load the input parameter from a file to dna object or HDF5 file.
    It automatically decides from input parameter, what will be format of input file.

    Parameters
    ----------
    dna : :class:`DNA`
        Input :class:`DNA` instance.
    filename : str
        Input filename. This file should be output from do_x3dna.
    parameter : str, list, None
        Name of parameter. For details about accepted keywords, see ``parameter`` in the method :meth:`DNA.get_parameters`.
        Note that parameter that are calculated from do_x3dna cannot be used here.
        In case of `Ǹone`, parameters name will be automatically determine from the input file.
    bp : list
        List containing lower and higher limit of base-pair/step range.
            * This list should not contain more than two number.
            * First number should be less than second number.

        Example for base-pairs/steps 4 to 15:
            ``bp = [4,15]         # step_range = True``

        If ``None``, all base-pairs/steps will be considered.

def setParametersFromFile(dna, filename, parameters=None, bp=None):
    """Read a specific parameter from the do_x3dna output file.
    It automatically load the input parameter from a file to dna object or HDF5 file.
    It automatically decides from input parameter, what will be format of input file.

    Parameters
    ----------
    dna : :class:`DNA`
        Input :class:`DNA` instance.
    filename : str
        Input filename. This file should be output from do_x3dna.
    parameter : str, list, None
        Name of parameter. For details about accepted keywords, see ``parameter`` in the method :meth:`DNA.get_parameters`.
        Note that parameter that are calculated from do_x3dna cannot be used here.
        In case of `Ǹone`, parameters name will be automatically determine from the input file.
    bp : list
        List containing lower and higher limit of base-pair/step range.
            * This list should not contain more than two number.
            * First number should be less than second number.

        Example for base-pairs/steps 4 to 15:
            ``bp = [4,15]         # step_range = True``

        If ``None``, all base-pairs/steps will be considered.

    """

    gotParameterList = False
    param_type = None

    # In case of none try to determine from file
    if parameters is None:
        parameters = checkParametersInputFile(filename)
        if parameters is None:
            raise AssertionError(" Cannot determine the parameters name from file {0}.".format(filename))

    if isinstance(parameters, list) or isinstance(parameters, np.ndarray):
        gotParameterList = True
        parameter = list(parameters)
        param_type = getParameterType(parameter[0])
    else:
        param_type = getParameterType(parameters)

    if bp is None:
        if param_type == 'bps':
            bp = [dna.startBP, dna.num_step]
        else:
            bp = [dna.startBP, dna.num_bp]

    if len(bp) == 1:
        bp_range = False
    else:
        bp_range = True

    if not gotParameterList:
        tempParamName = parameters
        inputParameter = [ parameters ]
    else:
        tempParamName = parameters[0]
        inputParameter = parameter

    sys.stdout.write('\nLoading parameters: {0}'.format(inputParameter))

    success = False
    if tempParamName in basePairParameters:
        dna.set_base_pair_parameters(filename, bp, parameters=inputParameter, bp_range=bp_range)
        success = True

    if tempParamName in baseStepParameters:
        dna.set_base_step_parameters(filename, bp, parameters=inputParameter, step_range=bp_range, helical=False)
        success = True

    if tempParamName in helicalBaseStepParameters:
        dna.set_base_step_parameters(filename, bp, parameters=inputParameter, step_range=bp_range, helical=True)
        success = True

    if tempParamName in groovesParameters:
        dna.set_major_minor_groove(filename, bp, parameters=inputParameter, step_range=bp_range)
        success = True

    if tempParamName in backboneDihedrals:
        dna.set_backbone_dihedrals(filename, bp, parameters=inputParameter, bp_range=bp_range)
        success = True

    if tempParamName in helicalRadiusParameters:
        dna.set_helical_radius(filename, bp, full=True, bp_range=bp_range)
        success = True

    if tempParamName in helicalAxisParameters:
        if len(bp) == 1:
            raise AssertionError("Axis cannot be read for a single base-step.\n Use a segment spanned over several basepairs.")
        dna.set_helical_axis(filename, step_range=True, step=bp)
        success = True

    if not success:
        raise ValueError ('Not able to load these parameters: {0}... '.format(parameter))