comparison draw_amr_matrix.py @ 6:caf554e039b2 draft

Uploaded
author greg
date Wed, 22 Feb 2023 21:23:25 +0000
parents 33a0ea992043
children 389c98d344ce
comparison
equal deleted inserted replaced
5:46d31ec5d24c 6:caf554e039b2
131 ofh.write("\nFinding AMR mutations for %s.\n" % str(region['name'])) 131 ofh.write("\nFinding AMR mutations for %s.\n" % str(region['name']))
132 region_dir = os.path.join(mutations_dir, 'region_' + str(region_i)) 132 region_dir = os.path.join(mutations_dir, 'region_' + str(region_i))
133 os.mkdir(region_dir) 133 os.mkdir(region_dir)
134 region_bed = os.path.join(region_dir, 'region.bed') 134 region_bed = os.path.join(region_dir, 'region.bed')
135 mutation_regions.loc[[region_i], ].to_csv(path_or_buf=region_bed, sep='\t', header=False, index=False) 135 mutation_regions.loc[[region_i], ].to_csv(path_or_buf=region_bed, sep='\t', header=False, index=False)
136 cmd = "bedtools intersect -nonamecheck -wb -a '%s' -b '%s' | awk '{BEGIN{getline < \"%s\" ;printf $0\"\t\";getline < \"%s\"; getline < \"%s\";print $0}{print}' > %s" % (region_bed, amr_mutations_file, amr_mutation_regions_file, amr_mutations_file, amr_mutations_file, region_mutations_output_file) 136 cmd = ' '.join(['bedtools intersect -nonamecheck -wb -a',
137 region_bed,
138 '-b',
139 amr_mutations_file,
140 ' | awk \'BEGIN{getline < "' + amr_mutation_regions_file + '";printf $0"\\t";',
141 'getline < "' + amr_mutations_file + '"; getline < "' + amr_mutations_file + '";print $0}{print}\'',
142 '1>' + region_mutations_output_file])
143 ofh.write("\ncmd:\n%s\n" % cmd)
137 run_command(cmd) 144 run_command(cmd)
138 try: 145 try:
139 region_mutations = pandas.read_csv(region_mutations_output_file, sep='\t', header=0, index_col=False) 146 region_mutations = pandas.read_csv(region_mutations_output_file, sep='\t', header=0, index_col=False)
140 except Exception: 147 except Exception:
141 region_mutations = pandas.DataFrame() 148 region_mutations = pandas.DataFrame()
156 for mutation_idx, mutation_hit in mutation_hits.iterrows(): 163 for mutation_idx, mutation_hit in mutation_hits.iterrows():
157 mutation_name = mutation_region + ' ' + mutation_hit['REF'] + '->' + mutation_hit['ALT'] 164 mutation_name = mutation_region + ' ' + mutation_hit['REF'] + '->' + mutation_hit['ALT']
158 amr_to_draw = amr_to_draw.append(pandas.Series([mutation_name, mutation_hit['DRUG']], name=amr_to_draw.shape[0], index=amr_to_draw.columns)) 165 amr_to_draw = amr_to_draw.append(pandas.Series([mutation_name, mutation_hit['DRUG']], name=amr_to_draw.shape[0], index=amr_to_draw.columns))
159 166
160 if amr_deletions_file not in [None, 'None'] and os.path.getsize(amr_deletions_file) > 0: 167 if amr_deletions_file not in [None, 'None'] and os.path.getsize(amr_deletions_file) > 0:
161 # TODO: So far, no samples have produced deletions, but we do have all the pices in place
162 # within the workflow to receive the amr_deletions_file here, although it is currently
163 # always empty...
164 # Roll up deletions that might confer resistance. 168 # Roll up deletions that might confer resistance.
165 try: 169 try:
166 amr_deletions = pandas.read_csv(filepath_or_buffer=amr_deletions_file, sep='\t', header=None) 170 amr_deletions = pandas.read_csv(filepath_or_buffer=amr_deletions_file, sep='\t', header=None)
167 except Exception: 171 except Exception:
168 amr_deletions = pandas.DataFrame() 172 amr_deletions = pandas.DataFrame()
180 for hit_idx, hit in amr_to_draw.iterrows(): 184 for hit_idx, hit in amr_to_draw.iterrows():
181 amr_matrix.loc[hit[0], hit[1]] = 1 185 amr_matrix.loc[hit[0], hit[1]] = 1
182 amr_matrix_png = os.path.join(output_dir, 'amr_matrix.png') 186 amr_matrix_png = os.path.join(output_dir, 'amr_matrix.png')
183 int_matrix = amr_matrix[amr_matrix.columns].astype(int) 187 int_matrix = amr_matrix[amr_matrix.columns].astype(int)
184 figure, axis = pyplot.subplots() 188 figure, axis = pyplot.subplots()
189 heatmap = axis.pcolor(int_matrix, cmap=pyplot.cm.Blues, linewidth=0)
185 axis.invert_yaxis() 190 axis.invert_yaxis()
186 axis.set_yticks(numpy.arange(0.5, len(amr_matrix.index)), minor=False) 191 axis.set_yticks(numpy.arange(0.5, len(amr_matrix.index)), minor=False)
187 axis.set_yticklabels(int_matrix.index.values) 192 axis.set_yticklabels(int_matrix.index.values)
188 axis.set_xticks(numpy.arange(0.5, len(amr_matrix.columns)), minor=False) 193 axis.set_xticks(numpy.arange(0.5, len(amr_matrix.columns)), minor=False)
189 axis.set_xticklabels(amr_matrix.columns.values, rotation=90) 194 axis.set_xticklabels(amr_matrix.columns.values, rotation=90)