Source code for sequana.cnv

#
#  This file is part of Sequana software
#
#  Copyright (c) 2016-2022 - Sequana Development Team
#
#  Distributed under the terms of the 3-clause BSD license.
#  The full license is in the LICENSE file, distributed with this software.
#
#  website: https://github.com/sequana/sequana
#  documentation: http://sequana.readthedocs.io
#
##############################################################################
import colorlog
from pylab import plot

from sequana.lazy import pandas as pd
from sequana.lazy import pylab

logger = colorlog.getLogger(__name__)


[docs]class CNVnator(object): """Reader of the CNVnator output file.""" def __init__(self, filename): self.filename = filename self.df = pd.read_csv(filename, sep="\t", header=None) self.df.columns = ["type", "label", "size", "3", "4", "5", "6", "7", "8"] name = self.df["label"].apply(lambda x: x.rsplit(":", 1)[0]) start = self.df["label"].apply(lambda x: x.rsplit(":", 1)[1].split("-")[0]) end = self.df["label"].apply(lambda x: x.rsplit(":", 1)[1].split("-")[1]) self.df["start"] = start.astype(int) self.df["end"] = end.astype(int) self.df["name"] = name
[docs] def plot(self, chr_name, x1=None, x2=None, Y=20): df = self.df.query("name == @chr_name") for _, item in df.iterrows(): if item["type"] == "deletion": plot([item.start, item.end], [-1, -1], "r-", label="deletion") else: plot([item.start, item.end], [Y, Y], "b-", label="duplication") pylab.legend()
[docs] def hist_event_size(self, bins=20): self.df["size"].hist(ec="k", bins=bins, lw=1)