예제 #1
0
#!/usr/local/bin/python3.8
import sys
import logging, sys

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler(sys.stdout))
from lineage import Lineage

l = Lineage(output_dir='storage/app/dna/output')

var1 = sys.argv[1]
var2 = sys.argv[2]

file1 = "storage/app/dna/" + sys.argv[3]
file2 = "storage/app/dna/" + sys.argv[4]

user662 = l.create_individual(var1, file1)
user663 = l.create_individual(var2, file2)
discordant_snps = l.find_discordant_snps(user662, user663, save_output=True)
len(discordant_snps.loc[discordant_snps['chrom'] != 'MT'])
results = l.find_shared_dna([user662, user663],
                            cM_threshold=0.75,
                            snp_threshold=1100)
예제 #2
0
    def find_discordant_snps(self, progress_recorder=None):
        ind1_snps = self.individual1.get_canonical_snps()
        ind2_snps = self.individual2.get_canonical_snps()

        if not ind1_snps or not ind2_snps:
            self.delete()
            return

        if self.individual3:
            ind3_snps = self.individual3.get_canonical_snps()

            if not ind3_snps:
                self.delete()
                return

        with tempfile.TemporaryDirectory() as tmpdir:
            l = Lineage(output_dir=tmpdir, parallelize=False)

            ind1_snps_file = shutil.copy(
                ind1_snps.file.path,
                os.path.join(tmpdir, "ind1_snps" + ind1_snps.file_ext),
            )

            ind2_snps_file = shutil.copy(
                ind2_snps.file.path,
                os.path.join(tmpdir, "ind2_snps" + ind2_snps.file_ext),
            )

            if self.individual3:
                ind3_snps_file = shutil.copy(
                    ind3_snps.file.path,
                    os.path.join(tmpdir, "ind3_snps" + ind3_snps.file_ext),
                )

            ind1 = l.create_individual(self.individual1.name, ind1_snps_file)
            ind2 = l.create_individual(self.individual2.name, ind2_snps_file)

            if self.individual3:
                ind3 = l.create_individual(self.individual3.name,
                                           ind3_snps_file)
            else:
                ind3 = None

            discordant_snps = l.find_discordant_snps(ind1,
                                                     ind2,
                                                     ind3,
                                                     save_output=True)

            self.total_discordant_snps = len(discordant_snps)

            for root, dirs, files in os.walk(tmpdir):
                for file in files:
                    file_path = os.path.join(root, file)
                    if "discordant_snps" in file:
                        self.discordant_snps_csv.name = get_relative_user_dir_file(
                            self.user.uuid, uuid4())
                        compress_file(file_path, self.discordant_snps_csv.path)

                        self.discordant_snps_pickle = get_relative_user_dir_file(
                            self.user.uuid, uuid4(), ".pkl.gz")
                        discordant_snps.to_pickle(
                            self.discordant_snps_pickle.path)

                        break

        self.setup_complete = True
        self.save()