#! usr/bin/python
from __future__ import division, print_function, absolute_import
import argparse
import sys
import logging
import os, re
import requests
import transplanttoolbox_victor.vxm_hla
import itertools
from transplanttoolbox_victor.vxm_hla import allele_truncate, locus_string_geno_list, expand_ac, single_locus_allele_codes_genotype, gl_string_alleles_list, allele_code_to_allele_list
import transplanttoolbox_victor.conversion_functions_for_VXM
from transplanttoolbox_victor.conversion_functions_for_VXM import gl_string_ags, genotype_ags, allele_code_ags, unosagslist, convert_allele_list_to_ags, allele_freq
import transplanttoolbox_victor.reverse_conversion
from transplanttoolbox_victor.reverse_conversion import map_single_ag_to_alleles
##########################################################################################################################################################################
from transplanttoolbox_victor import __version__
__author__ = "Gragert Lab"
__copyright__ = "Gragert Lab"
__license__ = "gpl3"
_logger = logging.getLogger(__name__)
############################################################################################################################################################################
UA_eq_dict = {}
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
UNOS_UA_eq_filename = os.path.join(BASE_DIR,"transplanttoolbox_victor/UNOS_UA_ag_equivalencies.csv")
UNOS_UA_eq_file = open(UNOS_UA_eq_filename, 'r')
for row in UNOS_UA_eq_file:
if row.startswith("Antigen"):
continue
else:
row = row.strip("\n")
row_split = row.split(",")
ua_ag = row_split[0]
ua_ag_eqs = row_split[1:]
ua_ag_eqs = list(filter(None, ua_ag_eqs))
UA_eq_dict[ua_ag] = ua_ag_eqs
#print(UA_eq_dict)
##############################################################################################################################################################################
[docs]def vxm_uags(donorags, candidateags):
conflicts = []
donor_ags_alleles = []
UA_list = []
for ag in candidateags:
if ag in UA_eq_dict.keys():
UA_list.append(UA_eq_dict[ag])
else:
UA_list.append([ag])
recepient_ags = [item for sublist in UA_list for item in sublist]
for ag in donorags:
alleles = transplanttoolbox_victor.reverse_conversion.map_single_ag_to_alleles(ag)
donor_ags_alleles.append([ag])
if alleles:
donor_ags_alleles.append(alleles)
merged_dags_alleles = list(itertools.chain(*donor_ags_alleles))
for ag in recepient_ags:
if ag in merged_dags_alleles:
conflicts.append(ag)
return (donorags, recepient_ags, conflicts)
[docs]def vxm_hIresalleles(donorsAlleleList, candidateags):
conflicts = []
donorags = []
UA_list = []
for ag in candidateags:
if ag in UA_eq_dict.keys():
UA_list.append(UA_eq_dict[ag])
else:
UA_list.append([ag])
recepient_ags = [item for sublist in UA_list for item in sublist]
donorags = transplanttoolbox_victor.conversion_functions_for_VXM.convert_allele_list_to_ags(donorsAlleleList)
donorags_alleles = donorsAlleleList + donorags
for ag in recepient_ags:
if ag in donorags_alleles:
conflicts.append(ag)
return(donorags, recepient_ags, conflicts)
[docs]def vxm_gls(donor_gl_string, donor_ethnicity, recipient_UA_list):
conflicts = []
ag_probs = {}
donor_ags = []
output = transplanttoolbox_victor.conversion_functions_for_VXM.gl_string_ags(donor_gl_string, donor_ethnicity)
for i in output:
ag_list = i[0].split("+")
for j in ag_list:
if j in ag_probs.keys():
ag_probs[j] += i[1]
else:
ag_probs[j] = i[1]
donor_alleles = transplanttoolbox_victor.vxm_hla.gl_string_alleles_list(donor_gl_string)
#print(donor_alleles)
donor_allele_freqs = transplanttoolbox_victor.conversion_functions_for_VXM.allele_freq(donor_alleles, donor_ethnicity)
#print(donor_allele_freqs)
for k in ag_probs.keys():
donor_ags.append(k)
UA_list = []
for ag in recipient_UA_list:
if ag in UA_eq_dict.keys():
UA_list.append(UA_eq_dict[ag])
else:
UA_list.append([ag])
recepient_ags = [item for sublist in UA_list for item in sublist]
donor_alleles_ags = donor_ags + donor_alleles
for ag in recepient_ags:
if ag in donor_alleles_ags:
conflicts.append(ag)
conflict_ag_probs = {}
for i in conflicts:
if i in ag_probs.keys():
conflict_ag_probs[i] = round(ag_probs[i], 4)
elif i in donor_allele_freqs.keys():
conflict_ag_probs[i] = round(donor_allele_freqs[i], 4)
else:
conflict_ag_probs[i] = 0
for i,j in conflict_ag_probs.items():
if j > 1.00:
j = 1.00
conflict_ag_probs[i] = j
#print(conflict_ag_probs)
return(donor_ags, recepient_ags, conflicts, conflict_ag_probs)
[docs]def vxm_allele_codes(allele_codes_list, donor_ethnicity, recepient_UA_list):
conflicts = []
ag_probs = {}
donor_ags = []
output = transplanttoolbox_victor.conversion_functions_for_VXM.allele_code_ags(allele_codes_list, donor_ethnicity)
for i in output:
ag_list = i[0].split("+")
for j in ag_list:
if j in ag_probs.keys():
ag_probs[j] += i[1]
else:
ag_probs[j] = i[1]
#print(ag_probs)
donor_alleles = transplanttoolbox_victor.vxm_hla.allele_code_to_allele_list(allele_codes_list)
donor_allele_freqs = transplanttoolbox_victor.conversion_functions_for_VXM.allele_freq(donor_alleles, donor_ethnicity)
for k in ag_probs.keys():
donor_ags.append(k)
UA_list = []
for ag in recepient_UA_list:
if ag in UA_eq_dict.keys():
UA_list.append(UA_eq_dict[ag])
else:
UA_list.append([ag])
recepient_ags = [item for sublist in UA_list for item in sublist]
donor_alleles_ags = donor_ags + donor_alleles
for ag in recepient_ags:
if ag in donor_alleles_ags:
conflicts.append(ag)
conflict_ag_probs = {}
for i in conflicts:
if i in ag_probs.keys():
conflict_ag_probs[i] = round(ag_probs[i], 4)
elif i in donor_allele_freqs.keys():
conflict_ag_probs[i] = round(donor_allele_freqs[i], 4)
else:
conflict_ag_probs[i] = 0
for i,j in conflict_ag_probs.items():
if j > 1.00:
j = 1.00
conflict_ag_probs[i] = j
#print(conflict_ag_probs)
return(donor_ags, recepient_ags, conflicts, conflict_ag_probs)
[docs]def parse_args(args):
"""Parse command line parameters
Args:
args ([str]): command line parameters as list of strings
Returns:
:obj:`argparse.Namespace`: command line parameters namespace
"""
parser = argparse.ArgumentParser(
description="Just a Fibonnaci demonstration")
parser.add_argument(
'--version',
action='version',
version='allan {ver}'.format(ver=__version__))
parser.add_argument(
dest="n",
help="n-th Fibonacci number",
type=int,
metavar="INT")
parser.add_argument(
'-v',
'--verbose',
dest="loglevel",
help="set loglevel to INFO",
action='store_const',
const=logging.INFO)
parser.add_argument(
'-vv',
'--very-verbose',
dest="loglevel",
help="set loglevel to DEBUG",
action='store_const',
const=logging.DEBUG)
return parser.parse_args(args)
[docs]def setup_logging(loglevel):
"""Setup basic logging
Args:
loglevel (int): minimum loglevel for emitting messages
"""
logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
logging.basicConfig(level=loglevel, stream=sys.stdout,
format=logformat, datefmt="%Y-%m-%d %H:%M:%S")
[docs]def main(args):
"""Main entry point allowing external calls
Args:
args ([str]): command line parameter list
"""
args = parse_args(args)
setup_logging(args.loglevel)
_logger.debug("Starting crazy calculations...")
print("The {}-th Fibonacci number is {}".format(args.n, fib(args.n)))
_logger.info("Script ends here")
[docs]def run():
"""Entry point for console_scripts
"""
main(sys.argv[1:])
if __name__ == "__main__":
run()