To read and store base-step (Shift, Slide, Rise, Tilt, Roll and Twist) and
        helical base-step (X-disp, Y-disp, h-Rise, Inclination, Tip and h-Twist) parameters from an input file

        Parameters
        ----------
        filename : str
            Input file, which is generated from do_x3dna. e.g. L-BPS_g.dat or L-BPH_g.dat.

        bp_step : 1D list or array
            base-steps to analyze
            Example: ::

                bp_step = [6]                                # step_range = False
                bp_step = [4,15]                             # step_range = True
                bp_step = range(4,15)                        # step_range = False
                bp_step = np.arange(4,15)                    # step_range = False
                bp_step = [2,5,6,7,9,12,18]                  # step_range = False

        parameters : str or 1D list
            Either ``All`` to extract all parameter available in input file
            or list of either base-step or helical base-step parameter as follows:

            If helical = ``False``:

                * ``shift``
                * ``slide``
                * ``rise``
                * ``tilt``
                * ``roll``
                * ``twist``

            If helical = ``True``:

                * ``x-disp``
                * ``y-disp``
                * ``h-rise``
                * ``inclination``
                * ``tip``
                * ``h-twist``

        step_range : bool
            ``Dfault=True``: As shown above, if ``True``, bp_step is taken as a range otherwise list or numpy array.

        helical : bool
            If ``True``, parameters in input file will be considered as helical base-steps parameters
            If ``False``, parameters will be considered as base-steps parameters.

def set_base_step_parameters(self, filename, bp_step, parameters='all', step_range=True, helical=False):
        """To read and store base-step (Shift, Slide, Rise, Tilt, Roll and Twist) and
        helical base-step (X-disp, Y-disp, h-Rise, Inclination, Tip and h-Twist) parameters from an input file

        Parameters
        ----------
        filename : str
            Input file, which is generated from do_x3dna. e.g. L-BPS_g.dat or L-BPH_g.dat.

        bp_step : 1D list or array
            base-steps to analyze
            Example: ::

                bp_step = [6]                                # step_range = False
                bp_step = [4,15]                             # step_range = True
                bp_step = range(4,15)                        # step_range = False
                bp_step = np.arange(4,15)                    # step_range = False
                bp_step = [2,5,6,7,9,12,18]                  # step_range = False

        parameters : str or 1D list
            Either ``All`` to extract all parameter available in input file
            or list of either base-step or helical base-step parameter as follows:

            If helical = ``False``:

                * ``shift``
                * ``slide``
                * ``rise``
                * ``tilt``
                * ``roll``
                * ``twist``

            If helical = ``True``:

                * ``x-disp``
                * ``y-disp``
                * ``h-rise``
                * ``inclination``
                * ``tip``
                * ``h-twist``

        step_range : bool
            ``Dfault=True``: As shown above, if ``True``, bp_step is taken as a range otherwise list or numpy array.

        helical : bool
            If ``True``, parameters in input file will be considered as helical base-steps parameters
            If ``False``, parameters will be considered as base-steps parameters.

        """
        if not (isinstance(bp_step, list) or isinstance(bp_step, np.ndarray)):
            raise AssertionError(
                "type %s is not list or np.ndarray" % type(bp_step))

        if not (isinstance(parameters, list) or isinstance(parameters, np.ndarray)):
            if parameters == 'all' and not helical:
                parameters = ['shift', 'slide', 'rise', 'tilt', 'roll', 'twist']
            elif parameters == 'all' and helical:
                parameters = ['x-disp', 'y-disp', 'h-rise', 'inclination', 'tip', 'h-twist']
            else:
                raise ValueError(" ERROR: {0} is not accepted parameters!!! It should be either \"all\" or list of parameter names.".format(parameters) )

        targetParameters = None
        targetParametersReverse = None
        if helical:
            targetParameters = { 1:'x-disp', 2:'y-disp', 3:'h-rise', 4:'inclination', 5:'tip', 6:'h-twist' }
        else:
            targetParameters = { 1:'shift', 2:'slide', 3:'rise', 4:'tilt', 5:'roll', 6:'twist' }
        targetParametersReverse = dict((v,k) for k,v in targetParameters.items())

        # Check if requested parameters found within input file
        gotParametersInputFile = checkParametersInputFile(filename)
        if gotParametersInputFile is None:
            raise IOError(' Something wrong in input file {0}.\n Cannot read parameters.\n File should be an output from do_x3dna.'.format(filename))
        for parameter in parameters:
            if parameter not in gotParametersInputFile:
                raise ValueError(' Parameter {0} not found in input file. \n This file contains following parameters: \n {1}'.format(parameter, gotParametersInputFile))

        InputParamIndex = []
        for parameter in parameters:
            if parameter in targetParameters.values():
                InputParamIndex.append( targetParametersReverse[parameter] )
            else:
                print('\nWARNING: base pair parameters \"{0}\" not accepted. Skipping it !!\n' .format(parameter))

        if not InputParamIndex:
            raise ValueError("No acceptable base-pair parameters found!!!")

        data, time = read_param_file(filename, InputParamIndex, bp_step, step_range, startBP=self.startBP)
        self._set_time(time)

        bpIndex, OutParamIndex = get_idx_of_bp_parameters(bp_step, InputParamIndex, step_range, startBP=self.startBP)

        for i in range(len(data)):
            for j in range(len(data[i])):
                bp_num = str( bpIndex[i]+self.startBP )
                param = targetParameters[OutParamIndex[j]+1]
                self._set_data(data[i][j], 'bps', bp_num, param, scaleoffset=2)