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')
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