Ejemplo n.º 1
0
    sample.name,
    fisher_directory,
    'eigenvector',
    args.selection,
    WC_string,
    '_'.join(inputvariables) if len([k for k, j in zip(inputvariables, w.variables) if k != j]) > 0 else 'all',
    'full' if not args.fpsScaling else 'fps',
    )
if not os.path.isdir(plot_directory_): os.makedirs(plot_directory_)
if os.path.isfile(os.path.join(plot_directory_, 'ev_file.log')):
    os.remove(os.path.join(plot_directory_, 'ev_file.log'))

# Fill dictionaries with Eigenvalues and Eigenvectors
for i, item in enumerate(data):

    print_matrix = w.matrix_to_string(*w.get_total_fisherInformation_matrix(
        item['coeff'], inputvariables, **WC))

    evs, evecs = np.linalg.eigh(
        w.get_total_fisherInformation_matrix(item['coeff'], inputvariables,
                                             **WC)[1])
    evecs_frac = [[abs(entry) / sum(abs(vec)) for entry in vec]
                  for vec in evecs.T]
    item['x_pos'] = i + 1
    item['evs'] = evs
    item['evecs_frac'] = evecs_frac

    with open(os.path.join(plot_directory_, 'ev_file.log'), 'a') as f:
        f.write('bin %i\n' % i)
        f.write('matrix\n')
        f.write(print_matrix)
        f.write('\neval\n')
Ejemplo n.º 2
0
                                             weightFunction=weightFunction)
    full['color'] = 15

expo = 1. / len(args.variables)
data = [full] if not args.fpsScaling else []
data += selections + plotVariables2D + plotVariables3D + plotVariables4D
n_data = len(data)

# Fill dictionaries with normalized fisher information and plotting data
for i, item in enumerate(data):
    # if number of events per bin < args.nEventThresh for all bins, the list will be empty
    if len(item['coeff']) == 0:
        norm_detI = 0
    else:
        detI = np.linalg.det(
            w.get_total_fisherInformation_matrix(item['coeff'], args.variables,
                                                 **WC)[1])
        if i == 0: detI0 = detI
        norm_detI = abs(detI / detI0)**expo if detI0 != 0 else 0
    item['x_graph'] = array('d', range(1, n_data + 1))
    item['y_graph'] = array('d', [0] * i + [norm_detI] + [0] * (n_data - i))


# Plots
def drawPlot(log=False):
    ''' Plotting function
    '''

    scalingLabel = 'full' if not args.fpsScaling else 'fps'

    def getTGraph(n, x, y, color=40):
        ''' Create a TGraph object