def iterentries(self, args): """Iterate VCF data entries Arguments: args: dict passthrough object from toplevel argparse options """ quiet = args["quiet"] if self.path.endswith(".gz"): filehandler = gzip.open(self.path, "rb") else: filehandler = open(self.path, "rb") if not quiet: filesize = os.stat(self.path).st_size progress_meter(0, filesize) nline = 0 filehandler.seek(self.entrystart) linebuffer = [] for line in filehandler: nline += 1 linebuffer.append(line) if nline == args["linebuffer"]: if not quiet: progress_meter(filehandler.tell(), filesize) for line in linebuffer: vcfrecord = self._parse_entry(line, **args) if vcfrecord == -1: continue yield vcfrecord linebuffer = [] nline = 0 for line in linebuffer: vcfrecord = self._parse_entry(line, **args) if vcfrecord == -1: continue yield vcfrecord linebuffer = [] nline = 0 filehandler.close()
def iterentries(self, args): """Iterate entries from a .geno file Argruments: args: passthrough dict of arguments """ quiet = args['quiet'] if self.path.endswith('.gz'): filehandler = gzip.open(self.path, 'rb') else: filehandler = open(self.path, 'rb') if not quiet: filesize = os.stat(self.path).st_size progress_meter(0, filesize) nline = 0 filehandler.seek(self.entrystart) linebuffer = [] for line in filehandler: nline += 1 linebuffer.append(line) if nline == args['linebuffer']: if not quiet: progress_meter(filehandler.tell(), filesize) for line in linebuffer: record = self._parse_entry(line, **args) if record == -1: continue yield record linebuffer = [] nline = 0 for line in linebuffer: record = self._parse_entry(line, **args) if record == -1: continue yield record linebuffer = [] nline = 0 filehandler.close()
def plot_chromoplot(self): """Make Chromoplot for count-based trio""" ### BEGIN maxlen = max([x[2] for x in self.params['contigs']]) width = int(maxlen // self.params['windowsize']) + 1 self.params['ntracks'] = [0, 0, 0, 0, 3, 15][4] total_windows = (maxlen // self.params['windowsize'] + 1) * len( self.data) if not self.params.get('quiet', False): progress_meter(0, total_windows) nwindow = 0 majority_counts = Counter([(1, 0), (2, 0), (3, 0)]) contig_ab_values = {} self.write_window_log(headermode=True) for contig, _, _ in self.params['contigs']: i = 0 contig_ab_values[contig] = [] while i < width: if not self.params.get('quiet', False): if not nwindow % 1000: progress_meter(nwindow, total_windows) window_codes = self.data[contig].get(i, 'nodata') if self.params['ntracks'] == 3: majority_call, trio = self.parse_count_trio(window_codes) contig_ab_values[contig].append(trio) if window_codes != 'nodata': if majority_call: majority_counts.add(majority_call) self.datalog.append((window_codes, contig, i * self.params['windowsize'])) nwindow += 1 i += 1 if not self.params.get('quiet', False): progress_meter(total_windows, total_windows) self.params['track_order'] = majority_counts.get_ranked_keys( mode='centered') for entry in self.datalog: self.write_window_log(window_codes=entry[0], contig=entry[1], pos=entry[2], track_order=self.params['track_order']) image_data = [] for contig, _, _ in self.params['contigs']: image_data.append(self.interpret_colors(contig_ab_values[contig])) image_data.append("\x00\x00\x00" * width) image_data = ''.join(image_data) height = (len(image_data) / ( self.params['ntracks'] + int(self.params['infotrack']))) // width img = Image.new('RGB', (width, height)) img.fromstring(image_data) img.save(self.params['outpath']) return ''