예제 #1
0
	def run(self):
		communicator = MPI.world.duplicate()
		node_rank = communicator.rank	
		free_computing_nodes = range(1,communicator.size-1)	#exclude the last node
		if node_rank == 0:
			(conn, curs) =  db_connect(self.hostname, self.dbname, self.schema)
			schema_instance = form_schema_tables(self.fname, self.acc_cutoff, self.lm_bit)
			gene_id2no = get_gene_id2gene_no(curs)
			gene2enc_array = self.get_gene2enc_array(self.gim_inputfname, gene_id2no)
			gene2enc_array_pickle = cPickle.dumps(gene2enc_array, -1)
			
			gene_no2id = get_gene_no2gene_id(curs)
			gene_no2go_no = get_gene_no2go_no(curs)
			gene_no2id_pickle = cPickle.dumps(gene_no2id, -1)
			gene_no2go_no_pickle = cPickle.dumps(gene_no2go_no, -1)
			for node in free_computing_nodes:	#send it to the computing_node
				communicator.send(gene2enc_array_pickle, node, 0)
			
			communicator.send(gene_no2id_pickle, communicator.size-1, 0)
			communicator.send(gene_no2go_no_pickle, communicator.size-1, 0)
		elif node_rank in free_computing_nodes:
			data, source, tag = communicator.receiveString(0, 0)
			gene2enc_array = cPickle.loads(data)	#take the data
		elif node_rank==communicator.size-1:
			schema_instance = form_schema_tables(self.fname, self.acc_cutoff, self.lm_bit)
			data, source, tag = communicator.receiveString(0, 0)
			gene_no2id = cPickle.loads(data)
			data, source, tag = communicator.receiveString(0, 0)
			gene_no2go_no = cPickle.loads(data)
			
		mpi_synchronize(communicator)
		if node_rank == 0:
			curs.execute("DECLARE crs CURSOR FOR SELECT p.id, p.vertex_set, p.edge_set, p.recurrence_array,\
			g.go_no_list from %s p, %s g where g.mcl_id=p.id"%(schema_instance.pattern_table, schema_instance.good_cluster_table))
			input_node(communicator, curs, free_computing_nodes, self.message_size, self.report)
		elif node_rank in free_computing_nodes:
			parameter_list = [gene2enc_array, self.dataset_signature_set, self.p_value_cut_off]
			computing_node(communicator, parameter_list, self.computing_node_handler, report=self.report)
		elif node_rank==communicator.size-1:
			if not os.path.isdir(self.pic_output_dir):
				os.makedirs(self.pic_output_dir)
			cluster_info_instance = cluster_info()
			ofname = os.path.join(self.pic_output_dir, '%s_p%s'%(schema_instance.good_cluster_table, self.p_value_cut_off))
			writer = csv.writer(open(ofname, 'w'), delimiter='\t')
			parameter_list = [self.pic_output_dir, cluster_info_instance, gene_no2id, gene_no2go_no, writer]
			output_node(communicator, free_computing_nodes, parameter_list, self.output_node_handler, self.report)
			del writer
예제 #2
0
	def run(self):
		"""
		10-17-05
			bit control whether that setting has linear model
		"""
		schema_instance1 = form_schema_tables(self.fname1, self.acc_cutoff1, self.lm_bit1)
		schema_instance2 = form_schema_tables(self.fname2, self.acc_cutoff2, self.lm_bit2)
		(conn, curs) =  db_connect(self.hostname, self.dbname, self.schema)
		p_gene_id_set1 = p_gene_id_set_from_gene_p_table(curs, schema_instance1.gene_p_table)
		p_gene_id_set2 = p_gene_id_set_from_gene_p_table(curs, schema_instance2.gene_p_table)
		p_gene_id_set_total = p_gene_id_set_from_gene_p_table(curs, schema_instance2.p_gene_table)
		
		catI_set = p_gene_id_set1 - p_gene_id_set2
		catII_set = p_gene_id_set1 & p_gene_id_set2
		catIII_set = p_gene_id_set2 - p_gene_id_set1
		catIV_set = p_gene_id_set_total-(p_gene_id_set1|p_gene_id_set2)
		
		sample_ls_ls = []
		for p_gene_id_set in [catI_set, catII_set, catIII_set, catIV_set]:
			sample_ls_ls.append(self.sample_p_gene_id_set(p_gene_id_set, self.no_of_samples))
		
		writer = csv.writer(open(self.ofname, 'w'), delimiter = '\t')
		writer.writerow(['linear model coeffs of two settings'])
		writer.writerow([])
		writer.writerow(['No.','intercept', 'coeff1', 'coeff2', 'coeff3', 'coeff4', 'coeff5', 'intercept_p_value',\
			'coeff1_p_value', 'coeff2_p_value', 'coeff3_p_value', 'coeff4_p_value', 'coeff5_p_value',\
			'score_cut_off'])
		
		#fetch linear model coefficients
		pga_instance_list = [None, None]	#10-17-05 default is nothing, none of them have linear model
		if self.bit[0] == '1':
			pga_instance1 = p_gene_analysis()
			pga_instance1.go_no2lm_results, lm_results_2d_list = pga_instance1.get_go_no2lm_results(curs, schema_instance1.lm_table)
			pga_instance1.general_lm_results = pga_instance1.get_general_lm_results(lm_results_2d_list)
			pga_instance_list[0] = pga_instance1
			self.output_lm_model(curs, schema_instance1, writer)
		if self.bit[1] == '1':
			pga_instance2 = p_gene_analysis()
			pga_instance2.go_no2lm_results, lm_results_2d_list = pga_instance2.get_go_no2lm_results(curs, schema_instance2.lm_table)
			pga_instance2.general_lm_results = pga_instance2.get_general_lm_results(lm_results_2d_list)
			pga_instance_list[1] = pga_instance2
			self.output_lm_model(curs, schema_instance2, writer)
		
		#following is for drawing graph in output_p_gene_id_list()
		self.gene_no2gene_id = get_gene_no2gene_id(curs)
		self.gene_no2go_no = get_gene_no2go_no(curs)

		cluster_info_instance = cluster_info()
		
		for i in range(len(sample_ls_ls)):
			cat_no = i+1
			sys.stderr.write("Category %s...\n"%cat_no)
			writer.writerow(['Category %s'%cat_no])
			writer.writerow([self.category_no2information[cat_no]])
			cat_dir = 'cat%s'%cat_no
			if not os.path.isdir(cat_dir):
				os.makedirs(cat_dir)
			if i==0:	#this is different, prediction only in schema_instance1, so swap it
				self.output_p_gene_id_list(curs, schema_instance2, schema_instance1, sample_ls_ls[i], writer, cat_dir, \
					pga_instance_list[1], pga_instance_list[0], cluster_info_instance, self.simple)
			else:
				self.output_p_gene_id_list(curs, schema_instance1, schema_instance2, sample_ls_ls[i], writer, cat_dir, \
					pga_instance_list[0], pga_instance_list[1], cluster_info_instance, self.simple)
			sys.stderr.write("End Category %s.\n"%cat_no)
예제 #3
0
	def __init__(self):
		"""
		2008-01-17
			use sys.argv[0] to figure out the path of guianalyzer.glade
		"""
		program_path = os.path.dirname(sys.argv[0])
		xml = gtk.glade.XML(os.path.join(program_path, 'guianalyzer.glade'))
		xml.signal_autoconnect(self)
		self.window_center = xml.get_widget("window_center")
		self.window_center.connect("destroy", self.destroy)
		self.button_cluster_info = xml.get_widget("button_cluster_info")
		self.button_cluster_accuracy = xml.get_widget("button_cluster_accuracy")
		self.entry_hostname = xml.get_widget("entry_hostname")
		self.entry_dbname = xml.get_widget("entry_dbname")
		self.entry_schema = xml.get_widget("entry_schema")
		self.entry_no_of_datasets = xml.get_widget("entry_no_of_datasets")
		self.entry_splat_table = xml.get_widget("entry_splat_table")
		self.entry_mcl_table = xml.get_widget("entry_mcl_table")
		self.entry_cluster_stat = xml.get_widget("entry_cluster_stat")
		self.togglebutton_hide_show = xml.get_widget("togglebutton_hide_show")

		self.button_db_connect = xml.get_widget("button_db_connect")
		
		self.window_cluster_info1 = xml.get_widget("window_cluster_info1")
		self.window_cluster_info1.connect("delete_event", self.subwindow_hide)
		self.window_cluster_info1.show()
		self.textview_subgraph = xml.get_widget("textview_subgraph")
		self.treeview_dataset = xml.get_widget("treeview_dataset")
		self.button_dataset_plot = xml.get_widget("button_dataset_plot")
		self.treeview_go_association = xml.get_widget("treeview_go_association")
		self.button_go_plot = xml.get_widget("button_go_plot")
		self.entry_cluster_id = xml.get_widget("entry_cluster_id")
		self.button_search_cluster_id = xml.get_widget("button_search_cluster_id")
		
		self.window_cluster_info2 = xml.get_widget("window_cluster_info2")
		self.window_cluster_info2.connect("delete_event", self.subwindow_hide)
		self.window_cluster_info2.show()
		self.treeview_recurrence = xml.get_widget("treeview_recurrence")
		self.label_total_recurrence = xml.get_widget("label_total_recurrence")
		self.label_total_edges = xml.get_widget("label_total_edges")
		self.treeview_connectivity = xml.get_widget("treeview_connectivity")
		self.label_avg_connectivity = xml.get_widget("label_avg_connectivity")
		self.label_splat_connectivity = xml.get_widget("label_splat_connectivity")
		self.label_original_connectivity = xml.get_widget("label_original_connectivity")
		self.treeview_edge_correlation = xml.get_widget("treeview_edge_correlation")
		self.button_edge_cor_plot = xml.get_widget("button_edge_cor_plot")
		self.treeview_edge_significance = xml.get_widget("treeview_edge_significance")
		self.button_edge_sig_plot = xml.get_widget("button_edge_sig_plot")
	
		self.dialog_cluster_accuracy = xml.get_widget("dialog_cluster_accuracy")
		self.dialog_cluster_accuracy.connect("delete_event", self.subwindow_hide)
		self.dialog_cluster_accuracy.show()
		self.textview_cluster_id = xml.get_widget("textview_cluster_id")
		self.okbutton_cluster_accuracy = xml.get_widget("okbutton_cluster_accuracy")
		self.treeview_cluster_accuracy = xml.get_widget("treeview_cluster_accuracy")
		self.entry_cluster_accuracy_p_gene_table = xml.get_widget("entry_cluster_accuracy_p_gene_table")
		self.entry_cluster_accuracy_p_value_cut_off = xml.get_widget("entry_cluster_accuracy_p_value_cut_off")
		self.comboboxentry_plot_type = xml.get_widget("comboboxentry_plot_type")	#06-14-05	to offer selection of plot type.
		self.comboboxentry_plot_type.set_active(0)	#06-14-05 set default
		
		#borrowed class instances
		self.cluster_info_instance = cluster_info()
		
		self.cluster_info_need_init = 1	#flag whether the windows of cluster_info need to be initialized
		self.curs = None	#used to check in on_button_cluster_info_clicked()
		self.cluster = None	#used to check in on_button_go_plot_clicked()
		self.dataset_liststore_dict = {54:self.dataset_liststore_54,
			55:self.dataset_liststore_55,
			73:self.dataset_liststore_73,
			74:self.dataset_liststore_74,
			79:self.dataset_liststore_79,
			80:self.dataset_liststore_80,
			100:self.dataset_liststore_100,
			101:self.dataset_liststore_101}