SUPP. FIGURE 4: Python Code

									
class supp_figure4a:
	@staticmethod
	def execute(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('SUPP-FIGURE4A: main_supp_figure4a_go_histograms')
		supp_figure4a.main_supp_figure3a_go_histograms(folder = folder, output_folder = output_folder)

	@staticmethod
	def main_supp_figure4a_go_histograms(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('plot_BP_go_output')
		supp_figure4a.plot_BP_go_output(folder  = folder, output_folder = output_folder)

		print('plot_CC_go_output')
		supp_figure4a.plot_CC_go_output(folder  = folder, output_folder = output_folder)

	@staticmethod
	def plot_BP_go_output(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		fdr_data = DataFrameAnalyzer.open_in_chunks(folder,'BP_go_output_fdrData_male_female_difference_DAVID6_8.tsv.gz')
		fe_data = DataFrameAnalyzer.open_in_chunks(folder,'BP_go_output_feData_male_female_difference_DAVID6_8.tsv.gz')
		size_data = DataFrameAnalyzer.open_in_chunks(folder,'BP_go_output_sizeData_male_female_difference_DAVID6_8.tsv.gz')
		fdr_data = fdr_data.T
		fe_data = fe_data.T
		size_data = size_data.T

		quant_fdr_data = fdr_data[['mq','fq']]
		quant_fdr_data = quant_fdr_data.dropna(thresh=1)
		stoch_fdr_data = fdr_data[['ms','fs']]
		stoch_fdr_data = stoch_fdr_data.dropna(thresh=1)
		quant_size_data = size_data[['mq','fq']]
		quant_size_data = quant_size_data.dropna(thresh=1)
		stoch_size_data = size_data[['ms','fs']]
		stoch_size_data = stoch_size_data.dropna(thresh=1)
		quant_fe_data = fe_data[['mq','fq']]
		quant_fe_data = quant_fe_data.dropna(thresh=1)
		stoch_fe_data = fe_data[['ms','fs']]
		stoch_fe_data = stoch_fe_data.dropna(thresh=1)

		quant_fe_data = quant_fe_data.replace(np.nan, 0)
		stoch_fe_data = stoch_fe_data.replace(np.nan,0)
		quant_fdr_data = quant_fdr_data.replace(np.nan, 0)
		stoch_fdr_data = stoch_fdr_data.replace(np.nan,0)

		quant_fe_data = quant_fe_data.sort_values('mq', ascending = False)
		q1 = quant_fe_data[quant_fe_data.mq>0]
		q2 = quant_fe_data[quant_fe_data.mq<=0]
		q2 = q2.sort_values('fq')
		quant_fe_data = pd.concat([q1,q2])

		stoch_fe_data = stoch_fe_data.sort_values('ms', ascending = False)
		q1 = stoch_fe_data[stoch_fe_data.ms>0]
		q2 = stoch_fe_data[stoch_fe_data.ms<=0]
		q2 = q2.sort_values('fs')
		stoch_fe_data = pd.concat([q1,q2])

		stoch_fdr_data = stoch_fdr_data.T[list(stoch_fe_data.index)].T
		quant_fdr_data = quant_fdr_data.T[list(quant_fe_data.index)].T

		import matplotlib.colors as mcolors
		c = mcolors.ColorConverter().to_rgb
		male_seq = [c('pink'),c('pink'),c('magenta'),c('magenta'),c('purple'),c('purple')]
		female_seq = [c('lightgreen'),c('lightgreen'), c('green'),c('green'), c('darkgreen'),c('darkgreen')]
		male_my_cmap = colorFacade.make_colormap(male_seq, 'male')
		female_my_cmap = colorFacade.make_colormap(female_seq, 'female')

		male_quant_fe_list = list(quant_fe_data.mq)
		female_quant_fe_list = list(quant_fe_data.fq)
		quant_label_list = [item.split('~')[1] for item in list(quant_fe_data.index)]
		sc, quant_male_color_list = colorFacade.get_specific_color_gradient(male_my_cmap, np.array(quant_fe_data.mq))
		sc, quant_female_color_list = colorFacade.get_specific_color_gradient(female_my_cmap, np.array(quant_fe_data.fq))
		male_stoch_fe_list = list(stoch_fe_data.ms)
		female_stoch_fe_list = list(stoch_fe_data.fs)
		stoch_label_list = [item.split('~')[1] for item in list(stoch_fe_data.index)]
		sc, stoch_male_color_list = colorFacade.get_specific_color_gradient(male_my_cmap, np.array(stoch_fe_data.ms))
		sc, stoch_female_color_list = colorFacade.get_specific_color_gradient(female_my_cmap, np.array(stoch_fe_data.fs))
		
		quant_ind = np.arange(len(quant_fe_data))
		stoch_ind = np.arange(len(stoch_fe_data))

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (7,5))
		ax = fig.add_subplot(111)
		width = 0.85
		colors = [sc.to_rgba(item) for item in male_stoch_fe_list]
		rects = ax.bar(stoch_ind, male_stoch_fe_list, width, color = stoch_male_color_list, edgecolor = 'white')
		rects = ax.bar(stoch_ind, (-1)*np.array(female_stoch_fe_list), width, color = stoch_female_color_list, edgecolor = 'white')
		ax.set_xlim(0,len(stoch_ind))
		plt.xticks(list(utilsFacade.frange(0.5,len(stoch_label_list)+0.5,1)))
		ax.set_xticklabels(stoch_label_list, rotation = 90)
		plt.savefig(output_folder + 'suppFig4a_BP_stoichiometry_male_female_barplot_DAVID6_8.pdf',
					bbox_inches = 'tight', dpi = 300)

	@staticmethod
	def plot_CC_go_output(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		fdr_data = DataFrameAnalyzer.open_in_chunks(folder,'CC_go_output_fdrData_male_female_difference_DAVID6_8.tsv.gz')
		fe_data = DataFrameAnalyzer.open_in_chunks(folder,'CC_go_output_feData_male_female_difference_DAVID6_8.tsv.gz')
		size_data = DataFrameAnalyzer.open_in_chunks(folder,'CC_go_output_sizeData_male_female_difference_DAVID6_8.tsv.gz')
		fdr_data = fdr_data.T
		fe_data = fe_data.T
		size_data = size_data.T

		quant_fdr_data = fdr_data[['mq','fq']]
		quant_fdr_data = quant_fdr_data.dropna(thresh=1)
		stoch_fdr_data = fdr_data[['ms','fs']]
		stoch_fdr_data = stoch_fdr_data.dropna(thresh=1)
		quant_size_data = size_data[['mq','fq']]
		quant_size_data = quant_size_data.dropna(thresh=1)
		stoch_size_data = size_data[['ms','fs']]
		stoch_size_data = stoch_size_data.dropna(thresh=1)
		quant_fe_data = fe_data[['mq','fq']]
		quant_fe_data = quant_fe_data.dropna(thresh=1)
		stoch_fe_data = fe_data[['ms','fs']]
		stoch_fe_data = stoch_fe_data.dropna(thresh=1)

		quant_fe_data = quant_fe_data.replace(np.nan, 0)
		stoch_fe_data = stoch_fe_data.replace(np.nan,0)
		quant_fdr_data = quant_fdr_data.replace(np.nan, 0)
		stoch_fdr_data = stoch_fdr_data.replace(np.nan,0)

		quant_fe_data = quant_fe_data.sort_values('mq', ascending = False)
		q1 = quant_fe_data[quant_fe_data.mq>0]
		q2 = quant_fe_data[quant_fe_data.mq<=0]
		q2 = q2.sort_values('fq')
		quant_fe_data = pd.concat([q1,q2])

		stoch_fe_data = stoch_fe_data.sort_values('ms', ascending = False)
		q1 = stoch_fe_data[stoch_fe_data.ms>0]
		q2 = stoch_fe_data[stoch_fe_data.ms<=0]
		q2 = q2.sort_values('fs')
		stoch_fe_data = pd.concat([q1,q2])

		stoch_fdr_data = stoch_fdr_data.T[list(stoch_fe_data.index)].T
		quant_fdr_data = quant_fdr_data.T[list(quant_fe_data.index)].T

		import matplotlib.colors as mcolors
		c = mcolors.ColorConverter().to_rgb
		male_seq = [c('pink'),c('pink'),c('magenta'),c('magenta'),c('purple'),c('purple')]
		female_seq = [c('lightgreen'),c('lightgreen'), c('green'),c('green'), c('darkgreen'),c('darkgreen')]
		male_my_cmap = colorFacade.make_colormap(male_seq, 'male')
		female_my_cmap = colorFacade.make_colormap(female_seq,'female')

		male_quant_fe_list = list(quant_fe_data.mq)
		female_quant_fe_list = list(quant_fe_data.fq)
		quant_label_list = [item.split('~')[1] for item in list(quant_fe_data.index)]
		sc, quant_male_color_list = colorFacade.get_specific_color_gradient(male_my_cmap, np.array(quant_fe_data.mq))
		sc, quant_female_color_list = colorFacade.get_specific_color_gradient(female_my_cmap, np.array(quant_fe_data.fq))
		male_stoch_fe_list = list(stoch_fe_data.ms)
		female_stoch_fe_list = list(stoch_fe_data.fs)
		stoch_label_list = [item.split('~')[1] for item in list(stoch_fe_data.index)]
		sc, stoch_male_color_list = colorFacade.get_specific_color_gradient(male_my_cmap, np.array(stoch_fe_data.ms))
		sc, stoch_female_color_list = colorFacade.get_specific_color_gradient(female_my_cmap, np.array(stoch_fe_data.fs))
		
		quant_ind = np.arange(len(quant_fe_data))
		stoch_ind = np.arange(len(stoch_fe_data))


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (15,5))
		ax = fig.add_subplot(111)

		width = 0.85
		colors = [sc.to_rgba(item) for item in male_quant_fe_list]
		rects = ax.bar(quant_ind, male_quant_fe_list, width, color = quant_male_color_list, edgecolor = 'white')
		rects = ax.bar(quant_ind, (-1)*np.array(female_quant_fe_list), width, color = quant_female_color_list, edgecolor = 'white')
		ax.set_xlim(0,len(quant_ind))
		plt.xticks(list(utilsFacade.frange(0.5,len(quant_label_list)+0.5,1)))
		ax.set_xticklabels(quant_label_list, rotation = 90)
		plt.savefig(folder + 'CC_abundances_male_female_barplot_DAVID6_8.pdf', bbox_inches = 'tight', dpi = 300)

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (7,5))
		ax = fig.add_subplot(111)
		width = 0.85
		colors = [sc.to_rgba(item) for item in male_stoch_fe_list]
		rects = ax.bar(stoch_ind, male_stoch_fe_list, width, color = stoch_male_color_list, edgecolor = 'white')
		rects = ax.bar(stoch_ind, (-1)*np.array(female_stoch_fe_list), width, color = stoch_female_color_list, edgecolor = 'white')
		ax.set_xlim(0,len(stoch_ind))
		plt.xticks(list(utilsFacade.frange(0.5,len(stoch_label_list)+0.5,1)))
		ax.set_xticklabels(stoch_label_list, rotation = 90)
		plt.savefig(output_folder + 'suppFig4a_CC_stoichiometry_male_female_barplot_DAVID6_8.pdf',
					bbox_inches = 'tight', dpi = 300)

class supp_figure4b:
	@staticmethod
	def execute(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('SUPP-FIGURE4B: supp_figure4b_complex_scatter_abundances')
		supp_figure4b.main_figure4b_complex_scatter_abundances(folder = folder, output_folder = output_folder)

		print('SUPP-FIGURE4B: supp_figure4b_subunit_scatter_abundances')
		supp_figure4b.main_figure4b_subunit_scatter_abundances(folder = folder, output_folder = output_folder)

	@staticmethod
	def main_figure4b_complex_scatter_abundances(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		df = DataFrameAnalyzer.open_in_chunks(folder,'fig5d_gygi3_complex_total_abundance_difference.tsv.gz')
		sex_cohen_list = list(df['sex'])
		diet_cohen_list = list(df['diet'])
		colors = list(df['color'])

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		ax.scatter(sex_cohen_list, diet_cohen_list, edgecolor = 'black',
		 	color = colors, alpha = 0.7, s = 80)
		plottingFacade.add_trendline(ax, sex_cohen_list, diet_cohen_list, color = 'k')
		ax.set_title(scipy.stats.pearsonr(sex_cohen_list, diet_cohen_list))
		ax.set_xlabel('sex')
		ax.set_ylabel('diet')
		ax.set_xlim(-2,2)
		ax.set_ylim(-2,2)
		plt.savefig(folder + 'suppFig4b_complex_abundance_comparing_diet_sex.pdf',
					bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def main_figure4b_subunit_scatter_abundances(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		df = DataFrameAnalyzer.open_in_chunks(folder, 'data/fig5d_gygi3_subunit_stoichiometry_difference.tsv.gz')
		gender_stoch_list = df['gender']
		diet_stoch_list = df['diet']
		colors = df['color']

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (7,7))
		ax = fig.add_subplot(111)
		ax.scatter(np.array(gender_stoch_list), np.array(diet_stoch_list),
				   color = colors, edgecolor = 'black', alpha = 0.7, s = 30)
		plottingFacade.add_trendline(ax,np.array(gender_stoch_list),
									 np.array(diet_stoch_list), color = 'k')
		ax.set_xlim(-1,1)
		ax.set_ylim(-1,1)
		ax.set_title(scipy.stats.pearsonr(np.array(gender_stoch_list), np.array(diet_stoch_list)))
		ax.set_xlabel('logFC (male/female)')
		ax.set_ylabel('logFC (high-fat/chow)')
		plt.savefig(folder + 'suppFig4b_logFC_complexSubunits_scatter_stoichiometry_gender_diet.pdf',
					bbox_inches	= 'tight', dpi = 400)

class supp_figure4c:
	@staticmethod
	def execute(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('SUPP-FIGURE4C: main_supp_figure4c_volcanoPlots')
		supp_figure4c.main_supp_figure4c_volcanoPlots(folder = folder, output_folder = output_folder)

	@staticmethod
	def main_supp_figure4c_volcanoPlots(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('SUPP-FIGURE3C: suppFigure4c_volcanoPlot_cop1_hsComparison')
		supp_figure4c.suppFigure4c_volcanoPlot_cop1_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_volcanoPlot_cop2_hsComparison')
		supp_figure4c.suppFigure4c_volcanoPlot_cop2_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_volcanoPlot_cohesin_hsComparison')
		supp_figure4c.suppFigure4c_volcanoPlot_cohesin_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_volcanoPlot_retromer_hsComparison')
		supp_figure4c.suppFigure4c_volcanoPlot_retromer_hsComparison(folder = folder, output_folder = output_folder)

	@staticmethod
	def main_supp_figure4c_boxPlots(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		print('SUPP-FIGURE3C: suppFigure4c_cop1_boxplot_logFC_hsComparison')
		supp_figure4c.suppFigure4c_cop1_boxplot_logFC_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_cop2_boxplot_logFC_hsComparison')
		supp_figure4c.suppFigure4c_cop2_boxplot_logFC_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_retromer_boxplot_logFC_hsComparison')
		supp_figure4c.suppFigure4c_retromer_boxplot_logFC_hsComparison(folder = folder, output_folder = output_folder)
		print('SUPP-FIGURE3C: suppFigure4c_cohesin_boxplot_logFC_hsComparison')
		supp_figure4c.suppFigure4c_cohesin_boxplot_logFC_hsComparison(folder = folder, output_folder = output_folder)

	@staticmethod
	def suppFigure4c_volcanoPlot_cop1_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data[data.analysis_type=='stoch_highfat-chow']
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search=='HC2402:COPI']

		pval_list = -np.log10(np.array(data['pval.adj']))
		fc_list = np.array(data['logFC'])

		complex_pval_list = -np.log10(np.array(complex_data['pval.adj']))
		complex_fc_list = np.array(complex_data['logFC'])
		complex_label_list = list(complex_data.index)
		complex_colors = ['red' if item<=0.01 else 'darkblue' for item in list(complex_data['pval.adj'])]

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		ax.scatter(fc_list, pval_list, edgecolor = 'black', s = 30, color = 'white', alpha = 0.2)
		ax.scatter(complex_fc_list, complex_pval_list, edgecolor = 'black', s = 50, color = complex_colors)
		for count, label in enumerate(complex_label_list):
			x,y = complex_fc_list[count], complex_pval_list[count]
			ax.annotate(label, xy = (x,y), color = complex_colors[count])
		ax.set_xlabel('logFC (male/female)')
		ax.set_ylabel('p.value[-log10]')
		ax.set_xlim(-1.25,1.25)
		ax.set_ylim(-0.01, 10)
		plt.savefig(folder + 'suppFig4c_cop1_volcano_hs_comparison.pdf', bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def suppFigure4c_volcanoPlot_retromer_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data[data.analysis_type=='stoch_highfat-chow']
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search.str.contains('retromer')]

		pval_list = -np.log10(np.array(data['pval.adj']))
		fc_list = np.array(data['logFC'])

		complex_pval_list = -np.log10(np.array(complex_data['pval.adj']))
		complex_fc_list = np.array(complex_data['logFC'])
		complex_label_list = list(complex_data.index)
		complex_colors = ['red' if item<=0.01 else 'darkblue' for item in list(complex_data['pval.adj'])]


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		ax.scatter(fc_list, pval_list, edgecolor = 'black',s = 30, color = 'white', alpha = 0.2)
		ax.scatter(complex_fc_list, complex_pval_list,edgecolor = 'black', s = 50, color = complex_colors)
		for count, label in enumerate(complex_label_list):
			x,y = complex_fc_list[count], complex_pval_list[count]
			ax.annotate(label, xy = (x,y), color = complex_colors[count])
		ax.set_xlabel('logFC (highfat/chow)')
		ax.set_ylabel('p.value[-log10]')
		ax.set_xlim(-1.25,1.25)
		ax.set_ylim(-0.01, 10)
		plt.savefig(folder + 'suppFig4c_retromer_volcano_hs_comparison.pdf',bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def suppFigure4c_volcanoPlot_cohesin_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data[data.analysis_type=='stoch_highfat-chow']
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search.str.contains('Cohesin')]

		pval_list = -np.log10(np.array(data['pval.adj']))
		fc_list = np.array(data['logFC'])

		complex_pval_list = -np.log10(np.array(complex_data['pval.adj']))
		complex_fc_list = np.array(complex_data['logFC'])
		complex_label_list = list(complex_data.index)
		complex_colors = ['red' if item<=0.01 else 'darkblue' for item in list(complex_data['pval.adj'])]


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		ax.scatter(fc_list, pval_list, edgecolor = 'black',s = 30, color = 'white', alpha = 0.2)
		ax.scatter(complex_fc_list, complex_pval_list,edgecolor = 'black', s = 50, color = complex_colors)
		for count, label in enumerate(complex_label_list):
			x,y = complex_fc_list[count], complex_pval_list[count]
			ax.annotate(label, xy = (x,y), color = complex_colors[count])
		ax.set_xlabel('logFC (highfat/chow)')
		ax.set_ylabel('p.value[-log10]')
		ax.set_xlim(-1.25,1.25)
		ax.set_ylim(-0.01,10)
		plt.savefig(folder + 'suppFig4c_cohesin_volcano_hs_comparison.pdf',bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def suppFigure4c_volcanoPlot_cop2_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data[data.analysis_type=='stoch_highfat-chow']
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search=='HC663:COPII']

		pval_list = -np.log10(np.array(data['pval.adj']))
		fc_list = np.array(data['logFC'])

		complex_pval_list = -np.log10(np.array(complex_data['pval.adj']))
		complex_fc_list = np.array(complex_data['logFC'])
		complex_label_list = list(complex_data.index)
		complex_colors = ['red' if item<=0.01 else 'darkblue' for item in list(complex_data['pval.adj'])]


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		ax.scatter(fc_list, pval_list, edgecolor = 'black',s = 30, color = 'white', alpha = 0.2)
		ax.scatter(complex_fc_list, complex_pval_list,edgecolor = 'black', s = 50, color = complex_colors)
		for count, label in enumerate(complex_label_list):
			x,y = complex_fc_list[count], complex_pval_list[count]
			ax.annotate(label, xy = (x,y), color = complex_colors[count])
		ax.set_xlabel('logFC (highfat/chow)')
		ax.set_ylabel('p.value[-log10]')
		ax.set_xlim(-1.25,1.25)
		ax.set_ylim(-0.01, 10)
		plt.savefig(folder + 'suppFig4c_cop2_volcano_hs_comparison.pdf',bbox_inches = 'tight', dpi = 400)
	
	@staticmethod
	def suppFigure4c_cop1_boxplot_logFC_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search=='HC2402:COPI']
		male_data = complex_data[complex_data.analysis_type=='highfat']
		female_data = complex_data[complex_data.analysis_type=='chow']
		stoch_maleFemale_data = complex_data[complex_data.analysis_type=='stoch_highfat-chow']
		pval_dict = stoch_maleFemale_data['pval.adj'].to_dict()

		wpc_data = wp.stoch_gygi3.copy()
		wpc_data = wpc_data[wpc_data.complex_search=='HC2402:COPI']
		quant_list = utilsFacade.filtering(list(wpc_data.columns),'quant_')
		male_list = utilsFacade.filtering(quant_list, 'H')
		female_list = utilsFacade.filtering(quant_list, 'S')
		male_data = wpc_data[male_list].T
		female_data = wpc_data[female_list].T

		protein_list = list(set(male_data.columns).intersection(set(female_data.columns)))
		pval_list = [pval_dict[protein] for protein in protein_list]
		pval_list, protein_list = zip(*sorted(zip(pval_list, protein_list)))
		data_list = list()
		color_list = list()
		sig_protein_list = list()
		positions = [0.5]
		for protein in protein_list:
			if pval_dict[protein]<=0.01:
				data_list.append(utilsFacade.finite(list(male_data[protein])))
				data_list.append(utilsFacade.finite(list(female_data[protein])))
				color_list.append('purple')
				color_list.append('green')
				sig_protein_list.append(protein)
				sig_protein_list.append(protein)
				positions.append(positions[-1]+0.4)
				positions.append(positions[-1]+0.6)

		male_median_data = male_data.T.median().T
		female_median_data = female_data.T.median().T
		data_list.append(list(male_median_data))
		data_list.append(list(female_median_data))
		color_list.append('grey')
		color_list.append('grey')
		sig_protein_list.append('COPI-highfat')
		sig_protein_list.append('COPI-chow')
		positions.append(positions[-1]+0.5)


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		bp = ax.boxplot(data_list,notch=0,sym="",vert=1,patch_artist=True,widths=[0.4]*len(data_list), positions = positions)
		plt.setp(bp['medians'], color="black")
		plt.setp(bp['whiskers'], color="black",linestyle="--",alpha=0.8)
		for i,patch in enumerate(bp['boxes']):
			patch.set_edgecolor("black")
			patch.set_alpha(0.6)
			patch.set_color(color_list[i])
			sub_group=data_list[i]
			x = numpy.random.normal(positions[i], 0.04, size=len(data_list[i]))
			ax.scatter(x,sub_group,color='white', alpha=0.5,edgecolor="black",s=5)
		ax.set_title('COPI complex')
		ax.set_xticklabels(sig_protein_list, rotation = 90)
		ax.set_ylim(-1,1)
		ax.set_ylabel('normalized abundances')
		plt.savefig(folder + 'suppFig4c_cop1_boxplot_highfat_chow.pdf',bbox_inches = 'tight', dpi = 400)
	
	@staticmethod
	def suppFigure4c_cop2_boxplot_logFC_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search=='HC663:COPII']
		male_data = complex_data[complex_data.analysis_type=='highfat']
		female_data = complex_data[complex_data.analysis_type=='chow']
		stoch_maleFemale_data = complex_data[complex_data.analysis_type=='stoch_highfat-chow']
		pval_dict = stoch_maleFemale_data['pval.adj'].to_dict()

		wpc_data = wp.stoch_gygi3.copy()
		wpc_data = wpc_data[wpc_data.complex_search=='HC663:COPII']
		quant_list = utilsFacade.filtering(list(wpc_data.columns),'quant_')
		male_list = utilsFacade.filtering(quant_list, 'H')
		female_list = utilsFacade.filtering(quant_list, 'S')
		male_data = wpc_data[male_list].T
		female_data = wpc_data[female_list].T

		protein_list = list(set(male_data.columns).intersection(set(female_data.columns)))
		pval_list = [pval_dict[protein] for protein in protein_list]
		pval_list, protein_list = zip(*sorted(zip(pval_list, protein_list)))
		data_list = list()
		color_list = list()
		sig_protein_list = list()
		positions = [0.5]
		for protein in protein_list:
			if pval_dict[protein]<=0.01:
				data_list.append(utilsFacade.finite(list(male_data[protein])))
				data_list.append(utilsFacade.finite(list(female_data[protein])))
				color_list.append('purple')
				color_list.append('green')
				sig_protein_list.append(protein)
				sig_protein_list.append(protein)
				positions.append(positions[-1]+0.4)
				positions.append(positions[-1]+0.6)

		male_median_data = male_data.T.median().T
		female_median_data = female_data.T.median().T
		data_list.append(list(male_median_data))
		data_list.append(list(female_median_data))
		color_list.append('grey')
		color_list.append('grey')
		sig_protein_list.append('COPII-highfat')
		sig_protein_list.append('COPII-chow')
		positions.append(positions[-1]+0.5)


		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		bp = ax.boxplot(data_list,notch=0,sym="",vert=1,patch_artist=True,widths=[0.4]*len(data_list), positions = positions)
		plt.setp(bp['medians'], color="black")
		plt.setp(bp['whiskers'], color="black",linestyle="--",alpha=0.8)
		for i,patch in enumerate(bp['boxes']):
			patch.set_edgecolor("black")
			patch.set_alpha(0.6)
			patch.set_color(color_list[i])
			sub_group=data_list[i]
			x = numpy.random.normal(positions[i], 0.04, size=len(data_list[i]))
			ax.scatter(x,sub_group,color='white', alpha=0.5,edgecolor="black",s=5)
		ax.set_title('COPII complex')
		ax.set_xticklabels(sig_protein_list, rotation = 90)
		ax.set_ylim(-1,1)
		ax.set_ylabel('normalized abundances')
		plt.savefig(folder + 'suppFigure4c_cop2_boxplot_highfat_chow.pdf',bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def suppFigure4c_retromer_boxplot_logFC_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search.str.contains('retromer')]
		male_data = complex_data[complex_data.analysis_type=='highfat']
		female_data = complex_data[complex_data.analysis_type=='chow']
		stoch_maleFemale_data = complex_data[complex_data.analysis_type=='stoch_highfat-chow']
		pval_dict = stoch_maleFemale_data['pval.adj'].to_dict()

		wpc_data = wp.stoch_gygi3.copy()
		wpc_data = wpc_data[wpc_data.complex_search.str.contains('MAPK')]
		quant_list = utilsFacade.filtering(list(wpc_data.columns),'quant_')
		male_list = utilsFacade.filtering(quant_list, 'H')
		female_list = utilsFacade.filtering(quant_list, 'S')
		male_data = wpc_data[male_list].T
		female_data = wpc_data[female_list].T

		protein_list = list(set(male_data.columns).intersection(set(female_data.columns)))
		pval_list = [pval_dict[protein] for protein in protein_list]
		pval_list, protein_list = zip(*sorted(zip(pval_list, protein_list)))
		data_list = list()
		color_list = list()
		sig_protein_list = list()
		positions = [0.5]
		for protein in protein_list:
			if pval_dict[protein]<=1:
				data_list.append(utilsFacade.finite(list(male_data[protein])))
				data_list.append(utilsFacade.finite(list(female_data[protein])))
				color_list.append('purple')
				color_list.append('green')
				sig_protein_list.append(protein)
				sig_protein_list.append(protein)
				positions.append(positions[-1]+0.4)
				positions.append(positions[-1]+0.6)

		male_median_data = male_data.T.median().T
		female_median_data = female_data.T.median().T
		data_list.append(list(male_median_data))
		data_list.append(list(female_median_data))
		color_list.append('grey')
		color_list.append('grey')
		sig_protein_list.append('MAPK-highfat')
		sig_protein_list.append('MAPK-chow')
		positions.append(positions[-1]+0.5)

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		bp = ax.boxplot(data_list,notch=0,sym="",vert=1,patch_artist=True,widths=[0.4]*len(data_list), positions = positions)
		plt.setp(bp['medians'], color="black")
		plt.setp(bp['whiskers'], color="black",linestyle="--",alpha=0.8)
		for i,patch in enumerate(bp['boxes']):
			patch.set_edgecolor("black")
			patch.set_alpha(0.6)
			patch.set_color(color_list[i])
			sub_group=data_list[i]
			x = numpy.random.normal(positions[i], 0.04, size=len(data_list[i]))
			ax.scatter(x,sub_group,color='white', alpha=0.5,edgecolor="black",s=5)
		ax.set_title('MAPK complex')
		ax.set_xticklabels(sig_protein_list, rotation = 90)
		ax.set_ylim(-1,1)
		ax.set_ylabel('normalized abundances')
		plt.savefig(folder + 'suppFigure4c_retromer_boxplot_highfat_chow.pdf',bbox_inches = 'tight', dpi = 400)

	@staticmethod
	def suppFigure4c_cohesin_boxplot_logFC_hsComparison(**kwargs):
		folder = kwargs.get('folder','PATH')
		output_folder = kwargs.get('output_folder','PATH')

		filename = 'gygi3_complex_hs_merged_perGeneRun.tsv.gz'
		data = DataFrameAnalyzer.open_in_chunks(folder, filename)
		data = data.drop_duplicates()
		data = data.drop(['C9','C2','Psd3'], axis = 0)
		complex_data = data[data.complex_search.str.contains('Cohesin')]
		male_data = complex_data[complex_data.analysis_type=='highfat']
		female_data = complex_data[complex_data.analysis_type=='chow']
		stoch_maleFemale_data = complex_data[complex_data.analysis_type=='stoch_highfat-chow']
		pval_dict = stoch_maleFemale_data['pval.adj'].to_dict()

		wpc_data = wp.stoch_gygi3.copy()
		wpc_data = wpc_data[wpc_data.complex_search.str.contains('Cohesin')]
		quant_list = utilsFacade.filtering(list(wpc_data.columns),'quant_')
		male_list = utilsFacade.filtering(quant_list, 'H')
		female_list = utilsFacade.filtering(quant_list, 'S')
		male_data = wpc_data[male_list].T
		female_data = wpc_data[female_list].T

		protein_list = list(set(male_data.columns).intersection(set(female_data.columns)))
		pval_list = [pval_dict[protein] for protein in protein_list]
		pval_list, protein_list = zip(*sorted(zip(pval_list, protein_list)))
		data_list = list()
		color_list = list()
		sig_protein_list = list()
		positions = [0.5]
		for protein in protein_list:
			if pval_dict[protein]<=1:
				data_list.append(utilsFacade.finite(list(male_data[protein])))
				data_list.append(utilsFacade.finite(list(female_data[protein])))
				color_list.append('purple')
				color_list.append('green')
				sig_protein_list.append(protein)
				sig_protein_list.append(protein)
				positions.append(positions[-1]+0.4)
				positions.append(positions[-1]+0.6)

		male_median_data = male_data.T.median().T
		female_median_data = female_data.T.median().T
		data_list.append(list(male_median_data))
		data_list.append(list(female_median_data))
		color_list.append('grey')
		color_list.append('grey')
		sig_protein_list.append('Cohesin-highfat')
		sig_protein_list.append('Cohesin-chow')
		positions.append(positions[-1]+0.5)

		sns.set(context='notebook', style='white', 
			palette='deep', font='Liberation Sans', font_scale=1, 
			color_codes=False, rc=None)
		plt.rcParams["axes.grid"] = True

		plt.clf()
		fig = plt.figure(figsize = (5,5))
		ax = fig.add_subplot(111)
		bp = ax.boxplot(data_list,notch=0,sym="",vert=1,patch_artist=True,widths=[0.4]*len(data_list), positions = positions)
		plt.setp(bp['medians'], color="black")
		plt.setp(bp['whiskers'], color="black",linestyle="--",alpha=0.8)
		for i,patch in enumerate(bp['boxes']):
			patch.set_edgecolor("black")
			patch.set_alpha(0.6)
			patch.set_color(color_list[i])
			sub_group=data_list[i]
			x = numpy.random.normal(positions[i], 0.04, size=len(data_list[i]))
			ax.scatter(x,sub_group,color='white', alpha=0.5,edgecolor="black",s=5)
		ax.set_title('Cohesin complex')
		ax.set_xticklabels(sig_protein_list, rotation = 90)
		ax.set_ylim(-1,1)
		ax.set_ylabel('normalized abundances')
		plt.savefig(folder + 'suppFig4c_cohesin_boxplot_highfat_chow.pdf',bbox_inches = 'tight', dpi = 400)

if __name__ == "__main__":
	## EXECUTE SUPPFIGURE4
	supp_figure4a.execute(folder = sys.argv[1], output_folder = sys.argv[2])
	supp_figure4b.execute(folder = sys.argv[1], output_folder = sys.argv[2])
	supp_figure4c.execute(folder = sys.argv[1], output_folder = sys.argv[2])
									
								

All scripts were developed by Natalie Romanov (Bork group, EMBL). The source code used in the analysis of protein complex variability across individuals is released under the GNU General Public License v3.0. All scripts on this website/web resource is Copyright (C) 2019 Natalie Romanov, Michael Kuhn, Ruedi Aebersold, Alessandro Ori, Martin Beck, Peer Bork and EMBL.

GNU LICENSE

Download script here