def __mode_HV(self, data, allrange, _ar_labels, _ar_units, _xc=0, _yc=0, _graphs_joined=True):
        #Could be moved to uti_plot_com.py (since there is not Matplotlib-specific content)
        #allrange, units = _rescale_range(allrange)
        #allrange, units = _rescale_range(allrange, _ar_units, 0, _xc, _yc)
        allrange, units = uti_plot_com.rescale_range(allrange, _ar_units, 0, _xc, _yc)

        e0, e1, ne, x0, x1, nx, y0, y1, ny, ec, xc, yc = allrange
        range_x = x0, x1, nx
        range_y = y0, y1, ny
        #print range_x, range_y
        #x = np.linspace(x0, x1, nx)
        #y = np.linspace(y0, y1, ny)
        #ix = np.where(abs(x)==abs(x).min())[0][0]
        #iy = np.where(abs(y)==abs(y).min())[0][0]
        #label2D = ("Horizontal Position, ["+units[1]+"]", "Vertical Position, ["+units[2]+"]")
        strTitle = _ar_labels[3]
        if (ne == 1) and (e0 > 0): strTitle += ' at ' + str(e0) + ' ' + units[0]

        label2D = (_ar_labels[1] + ' [' + units[1]+ ']', _ar_labels[2] + ' [' + units[2] + ']', strTitle)
        #print(label2D)

        #label1H = ("Horizontal Position, ["+units[1]+"]","Ph/s/0.1%BW/mm^2")
        strTitle = 'At ' + _ar_labels[2] + ': ' + str(yc)
        if yc != 0: strTitle += ' ' + units[2]
        label1H = (_ar_labels[1] + ' [' + units[1] + ']', _ar_labels[3] + ' [' + _ar_units[3] + ']', strTitle)

        #label1V = ("Vertical Position, ["+units[2]+"]","Ph/s/0.1%BW/mm^2")
        strTitle = 'At ' + _ar_labels[1] + ': ' + str(xc)
        if xc != 0: strTitle += ' ' + units[1]
        label1V = (_ar_labels[2] + ' [' + units[2] + ']', _ar_labels[3] + ' [' + _ar_units[3] + ']', strTitle)

        #return plot_2D_1D(data, range_x, range_y, [label2D, label1H, label1V], _graphs_joined)
        return self.uti_plot2d1d(data, range_x, range_y, xc, yc, [label2D, label1H, label1V], _graphs_joined)
    def __mode_E(self, data, allrange, _ar_labels, _ar_units):
        #allrange, units = _rescale_range(allrange)
        #allrange, units = _rescale_range(allrange, _ar_units)
        allrange, units = uti_plot_com.rescale_range(allrange, _ar_units)

        e0, e1, ne, x0, x1, nx, y0, y1, ny, ec, xc, yc = allrange
        range_e = e0, e1, ne
        #label = ("Energy, ["+units[0]+"]","Ph/s/0.1%BW")
        label = (_ar_labels[0] + ' [' + units[0] + ']', _ar_labels[3] + ' [' + _ar_units[3] + ']')
        fig = self._pl.figure(figsize=(4,4))
        self._plot_1D(data,range_e,label,fig)
        return fig
    def __mode_T(self, data, allrange, _ar_labels, _ar_units, _ec=0, _xc=0, _yc=0):
        #allrange, units = _rescale_range(allrange)
        #allrange, units = _rescale_range(allrange, _ar_units, _ec, _xc, _yc)
        allrange, units = uti_plot_com.rescale_range(allrange, _ar_units, _ec, _xc, _yc)

        #e0, e1, ne, x0, x1, nx, y0, y1, ny = allrange
        e0, e1, ne, x0, x1, nx, y0, y1, ny, ec, xc, yc = allrange
        #toprint = (e0,e1,units[0], x0,x1,units[1], y0,y1,units[2], data[0]) #squeeze have reduced it to an array with one element.
        toprint = (e0,units[0], x0,units[1], y0,units[2], data[0],units[3]) #squeeze have reduced it to an array with one element.
        #sys.stdout.write('Total Flux for \nE: %f -> %f %s\nX: %f -> %f %s\nY: %f -> %f %s\n is %f Ph/s/0.1%BW' % toprint) 
        sys.stdout.write(_ar_labels[3] + ' for \n' + _ar_labels[0] + ': %f %s\n' + _ar_labels[1] + ': %f %s\n' + _ar_labels[2] + ': %f %s\n is %f %s' % toprint) 
        return None
    def __mode_H(self, data, allrange, _ar_labels, _ar_units):
        #allrange, units = _rescale_range(allrange)
        #allrange, units = _rescale_range(allrange, _ar_units)
        allrange, units = uti_plot_com.rescale_range(allrange, _ar_units)

        #e0, e1, ne, x0, x1, nx, y0, y1, ny = allrange
        e0, e1, ne, x0, x1, nx, y0, y1, ny, ec, xc, yc = allrange
        range_x = x0, x1, nx 
        #label = ("Horizontal Position, ["+units[1]+"]","Ph/s/0.1%BW/mm^2")
        label = (_ar_labels[1] + ' [' + units[1] + ']', _ar_labels[3] + ' [' + _ar_units[3] + ']')
        fig = self._pl.figure(figsize=(4,4))
        self._plot_1D(data, range_x, label, fig)
        return fig
    def __mode_EHV(self, data, allrange, _ar_labels, _ar_units, _ec, _xc, _yc, _graphs_joined=1):
        #allrange, units = _rescale_range(allrange)
        #allrange, units = _rescale_range(allrange, _ar_units, _ec, _xc, _yc)
        allrange, units = uti_plot_com.rescale_range(allrange, _ar_units, _ec, _xc, _yc)

        #e0, e1, ne, x0, x1, nx, y0, y1, ny = allrange
        e0, e1, ne, x0, x1, nx, y0, y1, ny, ec, xc, yc = allrange

        #e = np.linspace(e0, e1, ne)
        #x = np.linspace(x0, x1, nx)
        #y = np.linspace(y0, y1, ny)
        #ie = np.where(data.sum(axis=1)==data.sum(axis=1).max())[0][0]
        #ix = np.where(abs(x)==abs(x).min())[0][0]
        #iy = np.where(abs(y)==abs(y).min())[0][0]

        range_e = e0, e1, ne
        range_x = x0, x1, nx
        range_y = y0, y1, ny

        ie = 0
        if ne > 1:
            if ec > e1: ie = ne - 1
            elif ec > e0:
                eStep = (e1 - e0)/(ne - 1)
                if eStep > 0: ie = int(round((ec - e0)/eStep))
        ix = 0
        if nx > 1:
            if xc > x1: ix = nx - 1
            elif xc > x0:
                xStep = (x1 - x0)/(nx - 1)
                if xStep > 0: ix = int(round((xc - x0)/xStep))
        iy = 0
        if ny > 1:
            if yc > y1: iy = ny - 1
            elif yc > y0:
                yStep = (y1 - y0)/(ny - 1)
                if yStep > 0: iy = int(round((yc - y0)/yStep))

        #label2D = ("Horizontal Position, ["+units[1]+"]", "Vertical Position, ["+units[2]+"]")
        label2D = (_ar_labels[1] + ' [' + units[1] + ']', _ar_labels[2] + ' [' + units[2] + ']')

        #label1E = ("Energy, ["+units[0]+"]","Ph/s/0.1%BW/mm^2")
        label1E = (_ar_labels[0] + ' [' + units[0] + ']', _ar_labels[3] + ' [' + units[3] + ']')

        #label1H = ("Horizontal Position, ["+units[1]+"]","Ph/s/0.1%BW/mm^2")
        label1H = (_ar_labels[1] + ' [' + units[1] + ']', _ar_labels[3] + ' [' + units[3] + ']')

        #label1V = ("Vertical Position, ["+units[2]+"]","Ph/s/0.1%BW/mm^2")
        label1V = (_ar_labels[2] + ' [' + units[2] + ']', _ar_labels[3] + ' [' + units[3] + ']')

        arCutXY = array('d', [0]*nx*ny)
        perY = ne*nx
        i = 0
        for iiy in range(ny):
            perY_iiy = perY*iiy
            for iix in range(nx):
                arCutXY[i] = data[ie + ne*iix + perY_iiy]
                i += 1

        arCutE = array('d', [0]*ne)
        perX_ix = ne*ix
        perY_iy = perY*iy
        for iie in range(ne): arCutE[iie] = data[iie + perX_ix + perY_iy]

        arCutX = array('d', [0]*nx)
        for iix in range(nx): arCutX[iix] = data[ie + ne*iix + perY_iy]

        arCutY = array('d', [0]*ny)
        for iiy in range(ny): arCutY[iiy] = data[ie + perX_ix + perY*iiy]

        #fig = _pl.figure(figsize=(8,8))
        #_plot_2D(data[:,:,ie], range_x, range_y, label2D, fig, 221)
        #_plot_1D(data[ix,iy,:],range_e,label1E,fig,224)
        #_plot_1D(data[ie,:,iy],range_x,label1H,fig,222)
        #_plot_1D(data[:,ix,ie],range_y,label1V,fig,223)

        fig = None
        if _graphs_joined:
            fig = self._pl.figure(figsize=(12,5))
            self._plot_2D(arCutXY, range_x, range_y, label2D, fig, 221) #showing graphs in one figure
            self._plot_1D(arCutE, range_e, label1E, fig, 222)
            self._plot_1D(arCutX, range_x, label1X, fig, 223)
            self._plot_1D(arCutY, range_y, label1Y, fig, 224)
        else:
            self.uti_plot2d(arCutXY, range_x, range_y, label2D)
            self.uti_plot1d(arCutE, range_e, label1E)
            self.uti_plot1d(arCutX, range_x, label1X)
            self.uti_plot1d(arCutY, range_y, label1Y)
        return self._maybe_savefig(fig)