#!/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)
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()