Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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()
Ejemplo n.º 3
0
    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 ''