def callThirdPartyProgram(self, should_write_sim0_output): current_directory = os.getcwd() directory_of_files = self.files_directory + "/GenomeFiles" OperatingSystemUtil.changeWorkingDirectory(directory_of_files) outputs = collections.OrderedDict() if self.file_type == SupportedFileTypes.MATLAB: try: import matlab.engine outputs = self.callMatlabAPI(outputs) except ImportError as error: self.log.warn( "Unable to find MATLAB API hook. Starting program once per trial file.\n%s", error) for file in self.file_list: self.logAndIncrementProgress() file_result = self.callMATLAB(directory_of_files, file) outputs[file.split(".")[0]] = file_result if self.number_of_trials != 0: output_file_name = self.SIM1OUTPUT_FILE_NAME + '_' + file.split( ".")[0] self.writeOutputFile(file_result, output_file_name) self.writeSim1Matrix(outputs) elif self.file_type == SupportedFileTypes.R: for file in self.file_list: self.logAndIncrementProgress() file_result = self.callR(directory_of_files, file) outputs[file.split(".")[0]] = file_result if self.number_of_trials != 0: output_file_name = self.SIM1OUTPUT_FILE_NAME + '_' + file.split( ".")[0] self.writeOutputFile(file_result, output_file_name) self.writeSim1Matrix(outputs) elif self.file_type == SupportedFileTypes.OCTAVE: for file in self.file_list: self.logAndIncrementProgress() file_result = self.callOctave(directory_of_files, file) outputs[file.split(".")[0]] = file_result if self.number_of_trials != 0: output_file_name = self.SIM1OUTPUT_FILE_NAME + '_' + file.split( ".")[0] self.writeOutputFile(file_result, output_file_name) self.writeSim1Matrix(outputs) if should_write_sim0_output: output_list = [] for file in outputs.keys(): output_list.append(outputs[file]) self.writeOutputFile(output_list, self.SIM0OUTPUT_FILE_NAME) elif self.number_of_trials != 0: sim1matrix_service = MatrixService(outputs, self.number_of_genomes, self.number_of_trials) sim1matrix_service.generateSimilarityMatrix('final') if self.response_type == SupportedThirdPartyResponses.FLOAT or self.response_type == SupportedThirdPartyResponses.INTEGER: sim1matrix_service.generateResponseMatrix() OperatingSystemUtil.changeWorkingDirectory(current_directory) return outputs
def writeDataFile(self, genomes_matrix): current_directory = os.getcwd() OperatingSystemUtil.changeWorkingDirectory(self.path + "/GenomeFiles") with open(self.OUTPUT_FILE_NAME, 'w') as csv_file: try: data_writer = csv.writer(csv_file, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) for i in range(0, self.number_of_genomes): data_writer.writerow(genomes_matrix[i]) finally: csv_file.close() OperatingSystemUtil.changeWorkingDirectory(current_directory)
def writeDataFile(self, matrix, file_name): path = os.getcwd() OperatingSystemUtil.changeWorkingDirectory(path + self.OUTPUT_FOLDER_NAME) n = len(matrix) with open(file_name, 'w') as csv_file: try: data_writer = csv.writer(csv_file) for i in range(0, n): data_writer.writerow(matrix[i]) finally: csv_file.close() os.chdir(path)
def writeOutputFile(self, outputs, output_file_name): if type(outputs) != list: outputs = [outputs] path = os.getcwd() OperatingSystemUtil.changeWorkingDirectory(path + self.OUTPUT_FOLDER_NAME) file_name = output_file_name + ".csv" with open(file_name, 'w') as csv_file: try: outputs_writer = csv.writer(csv_file) outputs_writer.writerow(outputs) except ValueError as error: self.log.error("Error writing %s to file %s. %s", outputs, file_name, error) finally: csv_file.close() os.chdir(path)
def makeMultiBarPlotWithMultipleAnalysis(self, full_data, output_path, analysis_type, title): basic_plot = matplotlib.figure() full_data_sorted_by_percentage = self.sortByPercentage(full_data) location_on_plot = 1 x_ticks = [] for percentage in full_data_sorted_by_percentage.keys(): data = full_data_sorted_by_percentage[percentage].values() keys = full_data_sorted_by_percentage[percentage].keys() positions = SafeCastUtil.safeCast( range(location_on_plot, location_on_plot + len(keys)), list) plot = matplotlib.boxplot(data, positions=positions, widths=0.6) self.color_by_analysis(keys, plot) x_ticks.append(location_on_plot + (len(keys) / 2)) location_on_plot += 4 matplotlib.title(title) # set axes limits and labels if analysis_type == SupportedAnalysisTypes.CLASSIFICATION: matplotlib.ylim(0, 1) else: matplotlib.ylim(-1, 1) matplotlib.ylabel("Accuracy distribution") matplotlib.xlim(0, location_on_plot - 1) matplotlib.xlabel("% Train") matplotlib.xticks(x_ticks, [ SafeCastUtil.safeCast(k * 100, int) for k in full_data_sorted_by_percentage.keys() ]) self.createLegend(full_data) basic_plot.show() current_path = os.getcwd() OperatingSystemUtil.changeWorkingDirectory(output_path) basic_plot.savefig(self.DEFAULT_PLOT_FILENAME, bbox_inches='tight') OperatingSystemUtil.changeWorkingDirectory(current_path)