Repository 'saint_preproc'
hg clone https://toolshed.g2.bx.psu.edu/repos/bornea/saint_preproc

Changeset 25:b98ec711623d (2016-01-12)
Previous changeset 24:3894870fb1e0 (2015-11-24) Next changeset 26:09612857d26a (2016-01-28)
Commit message:
Deleted selected files
removed:
SAINT_preprocessing_v5.xml
SAINT_preprocessing_v6.py
SAINT_preprocessing_v6_mq_pep.py
SwissProt_HUMAN_2014_08.fasta
pre_process_protein_name_set.R
tool_dependencies.xml
uniprot_names.txt
b
diff -r 3894870fb1e0 -r b98ec711623d SAINT_preprocessing_v5.xml
--- a/SAINT_preprocessing_v5.xml Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,92 +0,0 @@
-<tool id="SAINT_preprocessing_v5" name="SAINT pre-processing">
-  <description></description>
-  <command interpreter="python">
-    #if (str($type) == 'Scaffold'):
-      SAINT_preprocessing_v6.py $input $preybool $fasta_db $Inter_file $Prey_file 
-      "
-        #for $ba in $bait
-         ${ba.bait1}
-         ${ba.assign}
-         ${ba.T_C}
-        #end for
-        "
-      $Bait_file \$INSTALL_RUN_PATH/
-    #elif (str($type) == 'MaxQuant'):
-      SAINT_preprocessing_v6_mq_pep.py $input $preybool $fasta_db $Inter_file $Prey_file 
-        "
-        #for $ba in $bait
-          ${ba.bait1}
-          ${ba.assign}
-          ${ba.T_C}
-        #end for
-        "
-      $Bait_file \$INSTALL_RUN_PATH/
-    #end if
-  </command>
-  <requirements>
-    <requirement type="set_environment">INSTALL_RUN_PATH</requirement>
-    <requirement type="package" version="3.2.1">package_r_3_2_1</requirement>
-  </requirements>
-  <inputs>
-    <param type="select" name="type" label="MaxQuant or Scaffold">
-      <option value="MaxQuant">MaxQuant</option>
-      <option value="Scaffold">Scaffold</option> 
-    </param>
-    <param format="dat" name="input" type="data" label="Scaffold or MaxQuant proteinGroup Output"/>
-    <param type="boolean" name="preybool" checked="true" label="Create Prey File"/>
-    <param type="data" name="fasta_db" format="fasta"  label="Provide Uniprot Fasta database" optional="true"/>
-    <repeat name="bait" title="Bait Create">
-      <param name="bait1" type="text" size="100"/>
-      <param name="assign" type="text" size="100"/>
-      <param name="T_C" type="boolean" checked="true" label="Is this a Control?"/>
-    </repeat>
-  </inputs>
-  <outputs>
-    <data format="txt" name="Inter_file" label="Inter File"/>    
-    <data format="txt" name="Prey_file" label="Prey File" />
-    <data format="txt" name="Bait_file" label="Bait File" />
-  </outputs>
-  <stdio>
-    <regex match="error"
-    source="stdout"
-           level="fatal"
-           description="Unknown error"/>
-    <regex match="Error: bad bait"
-           source="stdout"
-           level="fatal"
-           description="Error: bad bait"/>
-  </stdio> 
-
-  <tests>
-    <test>
-      <param name="input" value="fa_gc_content_input.fa"/>
-      <output name="out_file1" file="fa_gc_content_output.txt"/>
-    </test>
-  </tests>
-  <help>
-Pre-processing:
-APOSTL is able to recognize either a Scaffold "Samples Report" file (tab-delimited
-txt file) or the "peptides.txt" file output in the maxquant "txt" output folder. No
-modifications should be made to these files. Using the "Bait Create" tool, you can
-create your "bait.txt" file. It is important that the individual bait names match the
-bait names within your scaffold or maxquant output. APOSTL uses the bait file to find
-the user's baits of interest. Additionally there is an option to make the prey file (Y/N).
-When making a prey file, APOSTL queries uniprot in order to extract protein amino acid
-lengths and gene names. This takes several minutes depending on your internet connection. 
-Some users may want to run SAINTexpress using the same data set while changing which baits 
-are considered test or control. It is useful to toggle "Make Prey" off in order to save 
-time by circumventing this step as the same prey file can be used for both SAINTexpress 
-runs. 
-
-INPUTS:
-
-Scaffold file:
-
-- Scaffold "Samples Report" output (tab-delimited txt file)
-
-
-Maxquant file:
-
-- maxquant "peptides.txt" file (tab-delimited txt file)
-  </help>
-</tool>
b
diff -r 3894870fb1e0 -r b98ec711623d SAINT_preprocessing_v6.py
--- a/SAINT_preprocessing_v6.py Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,261 +0,0 @@\n-#######################################################################################\r\n-# Python-code: SAINT pre-processing from Scaffold "Samples Report" output\r\n-# Author: Brent Kuenzi\r\n-#######################################################################################\r\n-# This program reads in a raw Scaffold "Samples Report" output and a user generated\r\n-# bait file and autoformats it into prey and interaction files for SAINTexpress \r\n-# analysis\r\n-#######################################################################################\r\n-import sys\r\n-import urllib2\r\n-import os.path\r\n-#######################################################################################\r\n-## REQUIRED INPUT ##\r\n-\r\n-# 1) infile: Scaffold "Samples Report" output\r\n-# 2) baitfile: SAINT formatted bait file generated in Galaxy\r\n-# 3) prey: Y or N for generating a prey file (requires internet connection)\r\n-#######################################################################################\r\n-infile = sys.argv[1] #Scaffold "Samples Report" output\r\n-prey = sys.argv[2] # Y or N\r\n-fasta_db = sys.argv[3]\r\n-tool_path = sys.argv[8]\r\n-if fasta_db == "None":\r\n-    fasta_db = str(tool_path)  + "/SwissProt_HUMAN_2014_08.fasta"\r\n-make_bait= sys.argv[6]\r\n-\r\n-\r\n-baits = make_bait.split()\r\n-i = 0\r\n-bait_file_tmp = open("bait.txt", "wr")\r\n-order = [] \r\n-bait_cache = []\r\n-\r\n-while i < len(baits):\r\n-    if baits[i+2] == "true":\r\n-        T_C = "C"\r\n-    else:\r\n-        T_C = "T"\r\n-    line1 = baits[i] + "\\t" + baits[i+1] + "\\t" + T_C + "\\n"\r\n-    q = open(infile,"r")\r\n-    for line2 in q:\r\n-        line2 = line2.strip()\r\n-        temp = line2.split(\'\\t\')\r\n-        if "Quantitative Variance" in str(temp):\r\n-            if baits[i] in temp:\r\n-                number_bait = temp.index(str(baits[i]))\r\n-                number_bait = number_bait - 9\r\n-                bait_cache.append((number_bait, str(line1)))\r\n-            else:\r\n-                print "Error: bad bait " + str(baits[i])\r\n-                sys.exit()\r\n-        else: \r\n-            pass                    \r\n-    i = i + 3\r\n-\r\n-bait_cache.sort()\r\n-for line in bait_cache:\r\n-    bait_file_tmp.write(line[1])            \r\n-        \r\n-bait_file_tmp.close()\r\n-baitfile = "bait.txt" \r\n-\r\n-class ReturnValue1(object):\r\n-    def __init__(self, sequence, gene):\r\n-     self.seqlength = sequence\r\n-     self.genename = gene\r\n-class ReturnValue2(object):\r\n-    def __init__(self, getdata, getproteins, getheader):\r\n-        self.data = getdata\r\n-        self.proteins = getproteins\r\n-        self.header = getheader\r\n-\r\n-def main(scaffold_input, baitfile): \r\n-    bait_check(baitfile, scaffold_input)\r\n-    make_inter(scaffold_input)\r\n-    if prey == \'true\':\r\n-        make_prey(scaffold_input)\r\n-        no_error_inter(scaffold_input)\r\n-        os.rename(\'prey.txt\', sys.argv[5])\r\n-    elif prey == \'false\':\r\n-        if os.path.isfile(\'error proteins.txt\') == True:\r\n-            no_error_inter(scaffold_input)\r\n-        pass\r\n-    elif prey != \'true\' or \'false\':\r\n-        sys.exit("Invalid Prey Argument: Y or N")\r\n-\r\n-def get_info(uniprot_accession_in): # get aa lengths and gene name\r\n-    error = open(\'error proteins.txt\', \'a+\')\r\n-#    while True:\r\n-#        i = 0\r\n-#\ttry:  \r\n-#            data = urllib2.urlopen("http://www.uniprot.org/uniprot/" + uniprot_accession_in + ".fasta")\r\n-#            break\r\n-#        except urllib2.HTTPError, err:\r\n-#            i = i + 1\r\n-#            if i == 50:\r\n-#                sys.exit("More than 50 errors. Check your file or try again later.")\r\n-#            if err.code == 404:\r\n-#                error.write(uniprot_accession_in + \'\\t\' + "Invalid URL. Check protein" + \'\\n\')\r\n-#                seqlength = \'NA\'\r\n-#                genename = \'NA\'\r\n-#                return ReturnValue1(seqlength, genename)\r\n-#            elif err.code == 302:\r\n-#                sys.exit("Request timed out. Check connection and try again.")\r\n-#            else:\r\n-#                sys.exit'..b'       if match <= db_len:\r\n-                        seqlength = seqlength + len(lines[match].strip())\r\n-                        match = match + 1\r\n-                    else:\r\n-                        break\r\n-                return ReturnValue1(seqlength, genename)\r\n-        count = count + 1\r\n-        \r\n-\r\n-    if seqlength == 0:\r\n-        error.write(uniprot_accession_in + \'\\t\' + "Uniprot not in Fasta" + \'\\n\')\r\n-        error.close\r\n-        seqlength = \'NA\'\r\n-        genename = \'NA\'\r\n-        return ReturnValue1(seqlength, genename)\r\n-\r\n-def readtab(infile):\r\n-    with open(infile,\'r\') as x: # read in tab-delim text\r\n-        output = []\r\n-        for line in x:\r\n-            line = line.strip()\r\n-            temp = line.split(\'\\t\')\r\n-            output.append(temp)\r\n-    return output\r\n-def read_scaffold(scaffold_input): # Get data, proteins and header from scaffold output\r\n-    dupes = readtab(scaffold_input)\r\n-    cnt = 0\r\n-    for i in dupes:\r\n-        cnt += 1\r\n-        if i[0] == \'#\': # finds the start of second header\r\n-            header_start = cnt-1\r\n-    header = dupes[header_start]\r\n-    prot_start = header.index("Accession Number")\r\n-    data = dupes[header_start+1:len(dupes)-2] # cut off blank line and END OF FILE\r\n-    proteins = []\r\n-    for i in data:\r\n-        i[4] = i[4].split()[0] # removes the (+##) that sometimes is attached\r\n-    for protein in data:\r\n-        proteins.append(protein[prot_start])\r\n-    return ReturnValue2(data, proteins, header)\r\n-def make_inter(scaffold_input):\r\n-    bait = readtab(baitfile)\r\n-    data = read_scaffold(scaffold_input).data\r\n-    header = read_scaffold(scaffold_input).header\r\n-    proteins = read_scaffold(scaffold_input).proteins\r\n-    bait_index = []\r\n-    for i in bait:\r\n-        bait_index.append(header.index(i[0])) # Find just the baits defined in bait file\r\n-    with open(\'inter.txt\', \'w\') as y:\r\n-            a = 0; l=0\r\n-            for bb in bait:\r\n-                for lst in data:\r\n-                    y.write(header[bait_index[l]] + \'\\t\' + bb[1] + \'\\t\' + proteins[a] + \'\\t\' + lst[bait_index[l]] + \'\\n\')\r\n-                    a+=1\r\n-                    if a == len(proteins):\r\n-                        a = 0; l+=1\r\n-def make_prey(scaffold_input):\r\n-    proteins = read_scaffold(scaffold_input).proteins\r\n-    output_file = open("prey.txt",\'w\')\r\n-    for a in proteins:\r\n-        a = a.replace("\\n","") # remove \\n for input into function\r\n-        a = a.replace("\\r","") # ditto for \\r\r\n-        seq = get_info(a).seqlength\r\n-        GN = get_info(a).genename\r\n-        if seq != \'NA\':\r\n-            output_file.write(a+"\\t"+str(seq)+ "\\t" + str(GN) + "\\n")\r\n-    output_file.close()\r\n-def no_error_inter(scaffold_input): # remake inter file without protein errors from Uniprot\r\n-    err = readtab("error proteins.txt")\r\n-    bait = readtab(baitfile)\r\n-    data = read_scaffold(scaffold_input).data\r\n-    header = read_scaffold(scaffold_input).header\r\n-    bait_index = []\r\n-    for i in bait:\r\n-        bait_index.append(header.index(i[0]))\r\n-    proteins = read_scaffold(scaffold_input).proteins\r\n-    errors = []\r\n-    for e in err:\r\n-        errors.append(e[0])\r\n-    with open(\'inter.txt\', \'w\') as y:\r\n-        l = 0; a = 0\r\n-        for bb in bait:\r\n-            for lst in data:\r\n-                if proteins[a] not in errors:\r\n-                    y.write(header[bait_index[l]] + \'\\t\' + bb[1] + \'\\t\' + proteins[a] + \'\\t\' + lst[bait_index[l]] + \'\\n\')\r\n-                a+=1\r\n-                if a == len(proteins):\r\n-                    l += 1; a = 0\r\n-def bait_check(bait, scaffold_input): # check that bait names share header titles\r\n-    bait_in = readtab(bait)\r\n-    header = read_scaffold(scaffold_input).header\r\n-    for i in bait_in:\r\n-        if i[0] not in header:\r\n-            sys.exit("Bait must share header titles with Scaffold output")\r\n-\r\n-if __name__ == \'__main__\':\r\n-    main(infile, baitfile)\r\n-\r\n-os.rename("inter.txt", sys.argv[4])\r\n-os.rename("bait.txt", sys.argv[7])\r\n'
b
diff -r 3894870fb1e0 -r b98ec711623d SAINT_preprocessing_v6_mq_pep.py
--- a/SAINT_preprocessing_v6_mq_pep.py Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,264 +0,0 @@\n-#######################################################################################\r\n-# Python-code: SAINT pre-processing from maxquant "Samples Report" output\r\n-# Author: Brent Kuenzi\r\n-#######################################################################################\r\n-# This program reads in a raw maxquant "Samples Report" output and a user generated\r\n-# bait file and autoformats it into prey and interaction files for SAINTexpress \r\n-# analysis\r\n-#######################################################################################\r\n-import sys\r\n-import urllib2\r\n-import os\r\n-#######################################################################################\r\n-## REQUIRED INPUT ##\r\n-\r\n-# 1) infile: maxquant "Samples Report" output\r\n-# 2) baitfile: SAINT formatted bait file generated in Galaxy\r\n-# 3) prey: Y or N for generating a prey file (requires internet connection)\r\n-#######################################################################################\r\n-mq_file = sys.argv[1]\r\n-ins_path = sys.argv[8]\r\n-names_path = str(ins_path) + r"uniprot_names.txt"\r\n-cmd = r"Rscript "+ str(ins_path) +"pre_process_protein_name_set.R " + str(mq_file) + " " + str(names_path)\r\n-os.system(cmd)\r\n-\r\n-infile = "./tukeys_output.txt" #maxquant "Samples Report" output\r\n-prey = sys.argv[2] # Y or N\r\n-fasta_db = sys.argv[3]\r\n-if fasta_db == "None":\r\n-    fasta_db = str(ins_path)  + "SwissProt_HUMAN_2014_08.fasta"\r\n-make_bait= sys.argv[6]\r\n-\r\n-def bait_create(baits, infile):\r\n-    #Takes the Bait specified by the user and makes them into a Bait file and includes a check to make sure they are using valid baits.\r\n-    baits = make_bait.split()\r\n-    i = 0\r\n-    bait_file_tmp = open("bait.txt", "wr")\r\n-    order = [] \r\n-    bait_cache = []\r\n-    while i < len(baits):\r\n-        if baits[i+2] == "true":\r\n-            T_C = "C"\r\n-        else:\r\n-            T_C = "T"\r\n-        line1 = baits[i] + "\\t" + baits[i+1] + "\\t" + T_C + "\\n"\r\n-        q = open(infile,"r")\r\n-        for line2 in q:\r\n-           line2 = line2.replace("\\"", "")\r\n-           line2 = line2.replace(r"Intensity.", "") #R coerces "-" into "." this changes them back and remove Intensity from the Bait names.\r\n-           line2 = line2.replace(r".", r"-")\r\n-           temp = line2.split()\r\n-           if "mapped_protein" in str(temp):\r\n-                #If the bait is in the original file then write to cache it if not exit.\r\n-                if baits[i] in temp:\r\n-                    number_bait = temp.index(str(baits[i]))\r\n-                    number_bait = number_bait - 9\r\n-                    bait_cache.append((number_bait, str(line1)))\r\n-                else:\r\n-                    print "Error: bad bait " + str(baits[i])\r\n-                    sys.exit()\r\n-           else: \r\n-                pass                    \r\n-        i = i + 3\r\n-    #Writes cache to file.\r\n-    bait_cache.sort()\r\n-    for line in bait_cache:\r\n-        bait_file_tmp.write(line[1])            \r\n-        \r\n-    bait_file_tmp.close()  \r\n-\r\n-\r\n-baitfile = "bait.txt"\r\n-\r\n-class ReturnValue1(object):\r\n-    def __init__(self, sequence, gene):\r\n-     self.seqlength = sequence\r\n-     self.genename = gene\r\n-class ReturnValue2(object):\r\n-    def __init__(self, getdata, getproteins, getheader):\r\n-        self.data = getdata\r\n-        self.proteins = getproteins\r\n-        self.header = getheader\r\n-\r\n-def main(maxquant_input, make_bait):  \r\n-    bait_create(make_bait, infile)\r\n-    baitfile = "bait.txt"\r\n-    #bait_check(baitfile, maxquant_input)\r\n-    make_inter(maxquant_input)\r\n-    if prey == \'true\':\r\n-        make_prey(maxquant_input)\r\n-        no_error_inter(maxquant_input)\r\n-        os.rename(\'prey.txt\', sys.argv[5])\r\n-    elif prey == \'false\':\r\n-        if os.path.isfile(\'error proteins.txt\') == True:\r\n-            no_error_inter(maxquant_input)\r\n-        pass\r\n-    elif prey != \'true\' or \'false\':\r\n-        sys.exit("Invalid Prey Argument: Y or N")\r\n-    os.rename(\'inter.txt\', sys.argv'..b'tch]:\r\n-                    if match <= db_len:\r\n-                        seqlength = seqlength + len(lines[match].strip())\r\n-                        match = match + 1\r\n-                    else:\r\n-                        break\r\n-                return ReturnValue1(seqlength, genename)\r\n-        count = count + 1\r\n-        \r\n-\r\n-    if seqlength == 0:\r\n-        error.write(uniprot_accession_in + \'\\t\' + "Uniprot not in Fasta" + \'\\n\')\r\n-        error.close\r\n-        seqlength = \'NA\'\r\n-        genename = \'NA\'\r\n-        return ReturnValue1(seqlength, genename)\r\n-\r\n-\r\n-def readtab(infile):\r\n-    with open(infile,\'r\') as x: # read in tab-delim text\r\n-        output = []\r\n-        for line in x:\r\n-            line = line.strip()\r\n-            temp = line.split(\'\\t\')\r\n-            output.append(temp)\r\n-    return output\r\n-def read_maxquant(maxquant_input): # Get data, proteins and header from maxquant output\r\n-    dupes = readtab(maxquant_input)\r\n-    header_start = 0 \r\n-    header = dupes[header_start]\r\n-    for i in header:\r\n-        i = i.replace(r"\\"", "")\r\n-        i = i.replace(r"Intensity.", r"")\r\n-        i = i.replace(r".", r"-")\r\n-    data = dupes[header_start+1:len(dupes)] #cut off blank line and END OF FILE\r\n-    proteins = []\r\n-    for protein in data:\r\n-        proteins.append(protein[0])\r\n-    return ReturnValue2(data, proteins, header)\r\n-def make_inter(maxquant_input):\r\n-    bait = readtab(baitfile)\r\n-    data = read_maxquant(maxquant_input).data\r\n-    header = read_maxquant(maxquant_input).header\r\n-    proteins = read_maxquant(maxquant_input).proteins\r\n-    bait_index = []\r\n-    for i in bait:\r\n-        bait_index.append(header.index("mapped_protein") + 1) # Find just the baits defined in bait file\r\n-    with open(\'inter.txt\', \'w\') as y:\r\n-            a = 0; l=0\r\n-            for bb in bait:\r\n-                for lst in data:\r\n-                    y.write(header[bait_index[l]] + \'\\t\' + bb[1] + \'\\t\' + proteins[a] + \'\\t\' + lst[bait_index[l]] + \'\\n\')\r\n-                    a+=1\r\n-                    if a == len(proteins):\r\n-                        a = 0; l+=1\r\n-def make_prey(maxquant_input):\r\n-    proteins = read_maxquant(maxquant_input).proteins\r\n-    output_file = open("prey.txt",\'w\')\r\n-    for a in proteins:\r\n-        a = a.replace("\\n","") # remove \\n for input into function\r\n-        a = a.replace("\\r","") # ditto for \\r\r\n-        seq = get_info(a).seqlength\r\n-        GN = get_info(a).genename\r\n-        if seq != \'NA\':\r\n-            output_file.write(a+"\\t"+str(seq)+ "\\t" + str(GN) + "\\n")\r\n-    output_file.close()\r\n-def no_error_inter(maxquant_input): # remake inter file without protein errors from Uniprot\r\n-    err = readtab("error proteins.txt")\r\n-    bait = readtab(baitfile)\r\n-    data = read_maxquant(maxquant_input).data\r\n-    header = read_maxquant(maxquant_input).header\r\n-    header = [i.replace(r"\\"", "") for i in header]\r\n-    header = [i.replace(r"Intensity.", r"") for i in header]\r\n-    header = [i.replace(r".", r"-") for i in header]\r\n-    print header\r\n-    bait_index = []\r\n-    for i in bait:\r\n-        bait_index.append(header.index(i[0]))\r\n-    proteins = read_maxquant(maxquant_input).proteins\r\n-    errors = []\r\n-    for e in err:\r\n-        errors.append(e[0])\r\n-    with open(\'inter.txt\', \'w\') as y:\r\n-        l = 0; a = 0\r\n-        for bb in bait:\r\n-            for lst in data:\r\n-                if proteins[a] not in errors:\r\n-                    y.write(header[bait_index[l]] + \'\\t\' + bb[1] + \'\\t\' + proteins[a] + \'\\t\' + lst[bait_index[l]] + \'\\n\')\r\n-                a+=1\r\n-                if a == len(proteins):\r\n-                    l += 1; a = 0\r\n-def bait_check(bait, maxquant_input): # check that bait names share header titles\r\n-    bait_in = readtab(bait)\r\n-    header = read_maxquant(maxquant_input).header\r\n-    for i in bait_in:\r\n-        if i[0] not in header:\r\n-            sys.exit("Bait must share header titles with maxquant output")\r\n-\r\n-if __name__ == \'__main__\':\r\n-    main(infile, make_bait)\r\n'
b
diff -r 3894870fb1e0 -r b98ec711623d SwissProt_HUMAN_2014_08.fasta
--- a/SwissProt_HUMAN_2014_08.fasta Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,171484 +0,0 @@\n->sp|P31946|1433B_HUMAN 14-3-3 protein beta/alpha OS=Homo sapiens GN=YWHAB PE=1 SV=3\r\n-MTMDKSELVQKAKLAEQAERYDDMAAAMKAVTEQGHELSNEERNLLSVAYKNVVGARRSSWRVISSIEQKTERNEKKQQM\r\n-GKEYREKIEAELQDICNDVLELLDKYLIPNATQPESKVFYLKMKGDYFRYLSEVASGDNKQTTVSNSQQAYQEAFEISKK\r\n-EMQPTHPIRLGLALNFSVFYYEILNSPEKACSLAKTAFDEAIAELDTLNEESYKDSTLIMQLLRDNLTLWTSENQGDEGD\r\n-AGEGEN\r\n->sp|P62258|1433E_HUMAN 14-3-3 protein epsilon OS=Homo sapiens GN=YWHAE PE=1 SV=1\r\n-MDDREDLVYQAKLAEQAERYDEMVESMKKVAGMDVELTVEERNLLSVAYKNVIGARRASWRIISSIEQKEENKGGEDKLK\r\n-MIREYRQMVETELKLICCDILDVLDKHLIPAANTGESKVFYYKMKGDYHRYLAEFATGNDRKEAAENSLVAYKAASDIAM\r\n-TELPPTHPIRLGLALNFSVFYYEILNSPDRACRLAKAAFDDAIAELDTLSEESYKDSTLIMQLLRDNLTLWTSDMQGDGE\r\n-EQNKEALQDVEDENQ\r\n->sp|Q04917|1433F_HUMAN 14-3-3 protein eta OS=Homo sapiens GN=YWHAH PE=1 SV=4\r\n-MGDREQLLQRARLAEQAERYDDMASAMKAVTELNEPLSNEDRNLLSVAYKNVVGARRSSWRVISSIEQKTMADGNEKKLE\r\n-KVKAYREKIEKELETVCNDVLSLLDKFLIKNCNDFQYESKVFYLKMKGDYYRYLAEVASGEKKNSVVEASEAAYKEAFEI\r\n-SKEQMQPTHPIRLGLALNFSVFYYEIQNAPEQACLLAKQAFDDAIAELDTLNEDSYKDSTLIMQLLRDNLTLWTSDQQDE\r\n-EAGEGN\r\n->sp|P61981|1433G_HUMAN 14-3-3 protein gamma OS=Homo sapiens GN=YWHAG PE=1 SV=2\r\n-MVDREQLVQKARLAEQAERYDDMAAAMKNVTELNEPLSNEERNLLSVAYKNVVGARRSSWRVISSIEQKTSADGNEKKIE\r\n-MVRAYREKIEKELEAVCQDVLSLLDNYLIKNCSETQYESKVFYLKMKGDYYRYLAEVATGEKRATVVESSEKAYSEAHEI\r\n-SKEHMQPTHPIRLGLALNYSVFYYEIQNAPEQACHLAKTAFDDAIAELDTLNEDSYKDSTLIMQLLRDNLTLWTSDQQDD\r\n-DGGEGNN\r\n->sp|P31947|1433S_HUMAN 14-3-3 protein sigma OS=Homo sapiens GN=SFN PE=1 SV=1\r\n-MERASLIQKAKLAEQAERYEDMAAFMKGAVEKGEELSCEERNLLSVAYKNVVGGQRAAWRVLSSIEQKSNEEGSEEKGPE\r\n-VREYREKVETELQGVCDTVLGLLDSHLIKEAGDAESRVFYLKMKGDYYRYLAEVATGDDKKRIIDSARSAYQEAMDISKK\r\n-EMPPTNPIRLGLALNFSVFHYEIANSPEEAISLAKTTFDEAMADLHTLSEDSYKDSTLIMQLLRDNLTLWTADNAGEEGG\r\n-EAPQEPQS\r\n->sp|P27348|1433T_HUMAN 14-3-3 protein theta OS=Homo sapiens GN=YWHAQ PE=1 SV=1\r\n-MEKTELIQKAKLAEQAERYDDMATCMKAVTEQGAELSNEERNLLSVAYKNVVGGRRSAWRVISSIEQKTDTSDKKLQLIK\r\n-DYREKVESELRSICTTVLELLDKYLIANATNPESKVFYLKMKGDYFRYLAEVACGDDRKQTIDNSQGAYQEAFDISKKEM\r\n-QPTHPIRLGLALNFSVFYYEILNNPELACTLAKTAFDEAIAELDTLNEDSYKDSTLIMQLLRDNLTLWTSDSAGEECDAA\r\n-EGAEN\r\n->sp|P63104|1433Z_HUMAN 14-3-3 protein zeta/delta OS=Homo sapiens GN=YWHAZ PE=1 SV=1\r\n-MDKNELVQKAKLAEQAERYDDMAACMKSVTEQGAELSNEERNLLSVAYKNVVGARRSSWRVVSSIEQKTEGAEKKQQMAR\r\n-EYREKIETELRDICNDVLSLLEKFLIPNASQAESKVFYLKMKGDYYRYLAEVAAGDDKKGIVDQSQQAYQEAFEISKKEM\r\n-QPTHPIRLGLALNFSVFYYEILNSPEKACSLAKTAFDEAIAELDTLSEESYKDSTLIMQLLRDNLTLWTSDTQGDEAEAG\r\n-EGGEN\r\n->sp|P30443|1A01_HUMAN HLA class I histocompatibility antigen, A-1 alpha chain OS=Homo sapiens GN=HLA-A PE=1 SV=1\r\n-MAVMAPRTLLLLLSGALALTQTWAGSHSMRYFFTSVSRPGRGEPRFIAVGYVDDTQFVRFDSDAASQKMEPRAPWIEQEG\r\n-PEYWDQETRNMKAHSQTDRANLGTLRGYYNQSEDGSHTIQIMYGCDVGPDGRFLRGYRQDAYDGKDYIALNEDLRSWTAA\r\n-DMAAQITKRKWEAVHAAEQRRVYLEGRCVDGLRRYLENGKETLQRTDPPKTHMTHHPISDHEATLRCWALGFYPAEITLT\r\n-WQRDGEDQTQDTELVETRPAGDGTFQKWAAVVVPSGEEQRYTCHVQHEGLPKPLTLRWELSSQPTIPIVGIIAGLVLLGA\r\n-VITGAVVAAVMWRRKSSDRKGGSYTQAASSDSAQGSDVSLTACKV\r\n->sp|P01892|1A02_HUMAN HLA class I histocompatibility antigen, A-2 alpha chain OS=Homo sapiens GN=HLA-A PE=1 SV=1\r\n-MAVMAPRTLVLLLSGALALTQTWAGSHSMRYFFTSVSRPGRGEPRFIAVGYVDDTQFVRFDSDAASQRMEPRAPWIEQEG\r\n-PEYWDGETRKVKAHSQTHRVDLGTLRGYYNQSEAGSHTVQRMYGCDVGSDWRFLRGYHQYAYDGKDYIALKEDLRSWTAA\r\n-DMAAQTTKHKWEAAHVAEQLRAYLEGTCVEWLRRYLENGKETLQRTDAPKTHMTHHAVSDHEATLRCWALSFYPAEITLT\r\n-WQRDGEDQTQDTELVETRPAGDGTFQKWAAVVVPSGQEQRYTCHVQHEGLPKPLTLRWEPSSQPTIPIVGIIAGLVLFGA\r\n-VITGAVVAAVMWRRKSSDRKGGSYSQAASSDSAQGSDVSLTACKV\r\n->sp|P04439|1A03_HUMAN HLA class I histocompatibility antigen, A-3 alpha chain OS=Homo sapiens GN=HLA-A PE=1 SV=2\r\n-MAVMAPRTLLLLLSGALALTQTWAGSHSMRYFFTSVSRPGRGEPRFIAVGYVDDTQFVRFDSDAASQRMEPRAPWIEQEG\r\n-PEYWDQETRNVKAQSQTDRVDLGTLRGYYNQSEAGSHTIQIMYGCDVGSDGRFLRGYRQDAYDGKDYIALNEDLRSWTAA\r\n-DMAAQITKRKWEAAHEAEQLRAYLDGTCVEWLRRYLENGKETLQRTDPPKTHMTHHPISDHEATLRCWALGFYPAEITLT\r\n-WQRDGEDQTQDTELVETRPAGDGTFQKWAAVVVPSGEEQRYTCHVQHEGLPKPLTLRWELSSQPTIPIVGIIAGLVLLGA\r\n-VITGAVVAAVMWRRKSSDRKGGSYTQAASSDSAQGSDVSLTACKV\r\n->sp|P13746|1A11_HUMAN HLA class I histocompatibility antigen, A-11 alpha chain OS=Homo sapiens GN=HLA'..b'CSSEQFEEAFAQFDAEGDGTVDAENMLEALKNSSGANLQGELSHIIRQLQ\r\n-ACSLVPGFTDIFSESKEGLDIHSSMILRFLHRNRLSSAVMPYPMLEHCNNMCTMRSSVLKESLDQLVQKEKESPGDLTRS\r\n-PEMDKLKSVAKCYAYIETSSNSADIDKMTNGETSSYWQSDGSACSHWIRLKMKPDVVLRHLSIAVAATDQSYMPQQVTVA\r\n-VGRNASDLQEVRDVHIPSNVTGYVTLLENANVSQLYVQINIKRCLSDGCDTRIHGLRAVGFQRVKKSGVSVSDASAIWYW\r\n-SLLTSLVTASMETNPAFVQTVLHNTQKALRHMPPLSLSPGSTDFSTFLSPNVLEEVDSFLIRITSCCSTPEVELTLLAFA\r\n-LARGSVAKVMSSLCTITDHLDTQYDASSLILSMASVRQNLLLKYGKPLQLTLQACDVKGKEDKSGPENLLVEPWTRDGFL\r\n-TETGKTRASTIFSTGTESAFQVTQIRIMVRRGGIGAQCGLVFAYNSSSDKFCAEEHFKRFEKYDKWKLQELRQFVKSRIG\r\n-CSSDDLGEDDPIGWFELEEEWDEADVKLQQCRVAKYLMVKFLCTRQESAERLGVQGLTISGYLRPARAEAEQSVTCAHCR\r\n-KDTEESVCGATLLLRTLQFIQQLAHDLVQQKESGLKYKSFLDFAGLDLQIFWNFYSKLKQNPREECVSAQTLLLQLLQSC\r\n-FSVLQGDVLAASEEEKAPIQSPKGVEAAKELYTHLCDVVDKVDGDSVPMEILKQEVRNTLLNGAAIFFPNRQTRRNHLFT\r\n-MMNVTEQEHKQSLQLTFRSLCTYFSDKDPGGLLLLPEKNDLAKMNISEVLAVMDTLVSVAARECELLMLSGAPGEVGSVL\r\n-FSLFWSVQGSLLSWCYLQLKSTDSGAKDLAVDLIEKYVGQFLASMRAILESLFSQYSGKTIVERLCNSVFSMAARQLVIF\r\n-LLDFCTLDIPHCVLLREFSVLTELLKKLCSGPEGGLRKLDVETWQQEQPVVLHTWTKESAHNYENNCHEVSVFVSPGATY\r\n-FEVEFDDRCETEKRYDYLEFTDARGRKTRYDTKVGTDKWPKKVTFKAGPRLQFLFHSDSSHNEWGYKFTVTACGLPDVAV\r\n-SWGLDLQLLVSRLMGRLASQCMALKSVRQLGSNMVVPQAKMALVLSSPLWKPVFRHQVCPELELEASWPTHPHRNSKEVK\r\n-NIPDDPCRHFLLDFAQSEPAQNFCGPYSELFKGFIQACRKQAPKTDIVAGSTIDQAVNATFAALVYRTPDLYEKLQKYVN\r\n-SGGKIALSEEFAQVYSLADGIRIWMLEMKQKSLMSLGNEAEEKHSSEATEVNPESLAKECIEKSLLLLKFLPTGISSKES\r\n-CEKLETADETSHLQPLNKRQRTSSVVEEHFQASVSPTEAAPPATGDQSPGLGTQPKLPSSSGLPAADVSPATAEEPLSPS\r\n-TPTRRPPFTRGRLRLLSFRSMEEARLVPTVKEKYPVLKDVMDFIKDQSLSHRSVVKVLSLRKAQAQSILEVLKITQHCAE\r\n-SLGQPHCFHPPFILFLLELLTCQKDFTNYFGHLEGCGADLHKEIRDTYYQLVLFLVKAVKGFSSLNDRSLLPALSCVQTA\r\n-LLHLLDMGWEPNDLAFFVDIQLPDLLMKMSQENISVHDSVISQWSEEDELADAKQNSEWMDECQDGMFEAWYEKIAQEDP\r\n-EKQRKMHMFIARYCDLLNVDISCDGCDEIAPWHRYRCLQCSDMDLCKTCFLGGVKPEGHGDDHEMVNMEFTCDHCQGLII\r\n-GRRMNCNVCDDFDLCYGCYAAKKYSYGHLPTHSITAHPMVTIRISDRQRLIQPYIHNYSWLLFAALALYSAHLASAEDVD\r\n-GEKLDPQTRSSATTLRSQCMQLVGDCLMKAHQGKGLKALALLGVLPDGDSSLEDQALPVTVPTGASEEQLEKKAVQGAEL\r\n-SEAGNGKRAVHEEIRPVDFKQRNKADKGVSLSKDPSCQTQISDSPADASPPTGLPDAEDSEVSSQKPIEEKAVTPSPEQV\r\n-FAECSQKRILGLLAAMLPPLKSGPTVPLIDLEHVLPLMFQVVISNAGHLNETYHLTLGLLGQLIIRLLPAEVDAAVIKVL\r\n-SAKHNLFAAGDSSIVPDGWKTTHLLFSLGAVCLDSRVGLDWACSMAEILRSLNSAPLWRDVIATFTDHCIKQLPFQLKHT\r\n-NIFTLLVLVGFPQVLCVGTRCVYMDNANEPHNVIILKHFTEKNRAVIVDVKTRKRKTVKDYQLVQKGGGQECGDSRAQLS\r\n-QYSQHFAFIASHLLQSSMDSHCPEAVEATWVLSLALKGLYKTLKAHGFEEIRATFLQTDLLKLLVKKCSKGTGFSKTWLL\r\n-RDLEILSIMLYSSKKEINALAEHGDLELDERGDREEEVERPVSSPGDPEQKKLDPLEGLDEPTRICFLMAHDALNAPLHI\r\n-LRAIYELQMKKTDYFFLEVQKRFDGDELTTDERIRSLAQRWQPSKSLRLEEQSAKAVDTDMIILPCLSRPARCDQATAES\r\n-NPVTQKLISSTESELQQSYAKQRRSKSAALLHKELNCKSKRAVRDYLFRVNEATAVLYARHVLASLLAEWPSHVPVSEDI\r\n-LELSGPAHMTYILDMFMQLEEKHEWEKILQKVLQGCREDMLGTMALAACQFMEEPGMEVQVRESKHPYNNNTNFEDKVHI\r\n-PGAIYLSIKFDSQCNTEEGCDELAMSSSSDFQQDRHSFSGSQQKWKDFELPGDTLYYRFTSDMSNTEWGYRFTVTAGHLG\r\n-RFQTGFEILKQMLSEERVVPHLPLAKIWEWLVGVACRQTGHQRLKAIHLLLRIVRCCGHSDLCDLALLKPLWQLFTHMEY\r\n-GLFEDVTQPGILLPLHRALTELFFVTENRAQELGVLQDYLLALTTDDHLLRCAAQALQNIAAISLAINYPNKATRLWNVE\r\n-C\r\n->sp|Q8IYH5|ZZZ3_HUMAN ZZ-type zinc finger-containing protein 3 OS=Homo sapiens GN=ZZZ3 PE=1 SV=1\r\n-MAASRSTRVTRSTVGLNGLDESFCGRTLRNRSIAHPEEISSNSQVRSRSPKKRPEPVPIQKGNNNGRTTDLKQQSTRESW\r\n-VSPRKRGLSSSEKDNIERQAIENCERRQTEPVSPVLKRIKRCLRSEAPNSSEEDSPIKSDKESVEQRSTVVDNDADFQGT\r\n-KRACRCLILDDCEKREIKKVNVSEEGPLNSAVVEEITGYLAVNGVDDSDSAVINCDDCQPDGNTKQNSIGSYVLQEKSVA\r\n-ENGDTDTQTSMFLDSRKEDSYIDHKVPCTDSQVQVKLEDHKIVTACLPVEHVNQLTTEPATGPFSETQSSLRDSEEEVDV\r\n-VGDSSASKEQCKENTNNELDTSLESMPASGEPEPSPVLDCVSAQMMSLSEPQEHRYTLRTSPRRAAPTRGSPTKNSSPYR\r\n-ENGQFEENNLSPNETNATVSDNVSQSPTNPGEISQNEKGICCDSQNNGSEGVSKPPSEARLNIGHLPSAKESASQHITEE\r\n-EDDDPDVYYFESDHVALKHNKDYQRLLQTIAVLEAQRSQAVQDLESLGRHQREALKNPIGFVEKLQKKADIGLPYPQRVV\r\n-QLPEIVWDQYTHSLGNFEREFKNRKRHTRRVKLVFDKVGLPARPKSPLDPKKDGESLSYSMLPLSDGPEGSSSRPQMIRG\r\n-RLCDDTKPETFNQLWTVEEQKKLEQLLIKYPPEEVESRRWQKIADELGNRTAKQVASRVQKYFIKLTKAGIPVPGRTPNL\r\n-YIYSKKSSTSRRQHPLNKHLFKPSTFMTSHEPPVYMDEDDDRSCFHSHMNTAVEDASDDESIPIMYRNLPEYKELLQFKK\r\n-LKKQKLQQMQAESGFVQHVGFKCDNCGIEPIQGVRWHCQDCPPEMSLDFCDSCSDCLHETDIHKEDHQLEPIYRSETFLD\r\n-RDYCVSQGTSYNYLDPNYFPANR\r\n'
b
diff -r 3894870fb1e0 -r b98ec711623d pre_process_protein_name_set.R
--- a/pre_process_protein_name_set.R Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,98 +0,0 @@
-ins_check_run <- function() {
-  if ("affy" %in% rownames(installed.packages())){}
-  else {
-    source("https://bioconductor.org/biocLite.R")
-    biocLite(c('mygene','affy'))
-  }
-  if ('data.table' %in% rownames(installed.packages())){}
-  else {
-    install.packages('data.table', repos='http://cran.us.r-project.org')
-  }
-  if ('stringr' %in% rownames(installed.packages())){}
-  else {
-    install.packages('stringr', repos='http://cran.us.r-project.org')
-  }
-  if ('VennDiagram' %in% rownames(installed.packages())){}
-  else {
-    install.packages('VennDiagram', repos='http://cran.us.r-project.org')
-  }
-}
-
-ins_check_run()
-library(data.table)
-library(affy)
-library(stringr)
-library(mygene)
-library(VennDiagram)
-#####
-#data
-main <- function(peptides_file, db_path) {
- peptides_file = read.delim(peptides_file,header=TRUE,stringsAsFactors=FALSE,fill=TRUE)
-  peptides_txt = peptides_file
- intensity_columns = names(peptides_txt[,str_detect(names(peptides_txt),"Intensity\\.*")]) #Pulls out all lines with Intensity in them.
- intensity_columns = intensity_columns[2:length(intensity_columns)] #Removes the first column that does not have a bait. 
- peptides_txt_mapped = as.data.frame(map_peptides_proteins(peptides_txt)) #This function as below sets every line to a 1 to 1 intensity to each possible protein.
- peptides_txt_mapped$Uniprot = str_extract(peptides_txt_mapped$mapped_protein, "[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}") #Pulls out just Uniprot id from the script.
- peptides_txt_mapped = subset(peptides_txt_mapped,!is.na(Uniprot)) #removes reverse sequences and any that didn't match a uniprot accession
- columns_comb = c("Uniprot", intensity_columns) 
- peptides_mapped_intensity = subset(peptides_txt_mapped, select = columns_comb) #Subsets out only the needed cloumns for Tukeys (Uniprot IDS and baited intensities)
- swissprot_fasta = scan(db_path, what="character")
- peptides_txt_mapped_log2 = peptides_mapped_intensity
-  # Takes the log2 of the intensities. 
- for (i in intensity_columns) { 
- peptides_txt_mapped_log2[,i] = log2(subset(peptides_txt_mapped_log2, select = i))
- }
-  #get the minimum from each column while ignoring the -Inf; get the min of these mins for the global min; breaks when there's only one intensity column 
- global_min = min(apply(peptides_txt_mapped_log2[,2:ncol(peptides_txt_mapped_log2)],2,function(x) {
-   min(x[x != -Inf])
- }))
- peptides_txt_mapped_log2[peptides_txt_mapped_log2 == -Inf] <- 0
-  #uniprot accessions WITHOUT isoforms; it looks like only contaminants contain isoforms anyways
- mapped_protein_uniprotonly = str_extract(peptides_txt_mapped_log2$Uniprot,"[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}") 
- mapped_protein_uniprot_accession = str_extract(peptides_txt_mapped_log2$Uniprot,"[OPQ][0-9][A-Z0-9]{3}[0-9](-[0-9]+)?|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}(-[0-9]+)?|[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}")
- peptides_txt_mapped_log2$mapped_protein = mapped_protein_uniprotonly
-  # Runs the Tukey function returning completed table
-  peptides_txt_mapped_log2 = subset(peptides_txt_mapped_log2,mapped_protein %in% swissprot_fasta)
- protein_intensities_tukeys = get_protein_values(peptides_txt_mapped_log2,intensity_columns)
-  protein_intensities_tukeys[protein_intensities_tukeys == 1] <- 0
-  write.table(protein_intensities_tukeys, "./tukeys_output.txt", row.names = FALSE, col.names = TRUE, quote = FALSE, sep = "\t")
-
-}
-
-map_peptides_proteins = function(peptides_in) {
-    #reverse sequences are blank but have a razor protein indicating that they are reverse; exclude these for now
-    peptides_in = subset(peptides_in,peptides_in$Proteins != "")
-    results_list = list()
-    k = 1
-    for (i in 1:nrow(peptides_in)) {
-        protein_names = peptides_in[i,"Proteins"]
-        protein_names_split = unlist(strsplit(protein_names,";"))
-        for (j in 1:length(protein_names_split)) {
-            peptides_mapped_proteins = data.frame(peptides_in[i,],mapped_protein=protein_names_split[j],stringsAsFactors=FALSE)
-            results_list[[k]] = peptides_mapped_proteins
-            k = k+1
-            
-        }
-    }
-    return(rbindlist(results_list))
-}
-
-get_protein_values = function(mapped_peptides_in,intensity_columns_list) {
-  unique_mapped_proteins_list = unique(mapped_peptides_in$mapped_protein) # Gets list of all peptides listed.
-  # Generates a blank data frame with clomns of Intensities and rows of Uniprots.
-  Tukeys_df = data.frame(mapped_protein = unique_mapped_proteins_list, stringsAsFactors = FALSE ) 
-  for (q in intensity_columns_list) {Tukeys_df[,q] = NA}
-  for (i in 1:length(unique_mapped_proteins_list)) {
-    mapped_peptides_unique_subset = subset(mapped_peptides_in, mapped_protein == unique_mapped_proteins_list[i])
-    #calculate Tukey's Biweight from library(affy); returns a single numeric
-    #results_list[[i]] = data.frame(Protein=unique_mapped_proteins_list[i],Peptides_per_protein=nrow(mapped_peptides_unique_subset))
-    for (j in intensity_columns_list) {
-      #Populates with new Tukeys values.
-      Tukeys_df[i,j] = 2^(tukey.biweight(mapped_peptides_unique_subset[,j]))
-    }
-  }
-  return(Tukeys_df)
-}
-
-args <- commandArgs(trailingOnly = TRUE)
-main(args[1], args[2])
b
diff -r 3894870fb1e0 -r b98ec711623d tool_dependencies.xml
--- a/tool_dependencies.xml Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<tool_dependency>
- <install version="1.0">
- <package name="package_r_3_2_1" version="3.2.1">
- <repository toolshed="toolshed.g2.bx.psu.edu" name="package_r_3_2_1" owner="iuc" changeset_revision="fae49a02a848" prior_installation_required="True"/>
- </package>
- </install>
-    <set_environment version="1.0">
-        <environment_variable name="INSTALL_RUN_PATH" action="set_to">$REPOSITORY_INSTALL_DIR</environment_variable>   
-    </set_environment>
-</tool_dependency>
\ No newline at end of file
b
diff -r 3894870fb1e0 -r b98ec711623d uniprot_names.txt
--- a/uniprot_names.txt Tue Nov 24 12:08:23 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,218965 +0,0 @@\n-"x"\n-\n-\n-\n-\n-\n-"P62258"\n-\n-\n-\n-\n-\n-"Q04917"\n-\n-\n-\n-\n-\n-"P61981"\n-\n-\n-\n-\n-\n-"P31947"\n-\n-\n-\n-\n-\n-"P27348"\n-\n-\n-\n-\n-\n-"P63104"\n-\n-\n-\n-\n-\n-"P30443"\n-\n-\n-\n-\n-\n-\n-\n-"P01892"\n-\n-\n-\n-\n-\n-\n-\n-"P04439"\n-\n-\n-\n-\n-\n-\n-\n-"P13746"\n-\n-\n-\n-\n-\n-\n-\n-"Q96QU6"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q4AC99"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P30447"\n-\n-\n-\n-\n-\n-\n-\n-"P05534"\n-\n-\n-\n-\n-\n-\n-\n-"P18462"\n-\n-\n-\n-\n-\n-\n-\n-"P30450"\n-\n-\n-\n-\n-\n-\n-\n-"P30512"\n-\n-\n-\n-\n-\n-\n-\n-"P16188"\n-\n-\n-\n-\n-\n-\n-\n-"P16189"\n-\n-\n-\n-\n-\n-\n-\n-"P10314"\n-\n-\n-\n-\n-\n-\n-\n-"P16190"\n-\n-\n-\n-\n-\n-\n-\n-"P30453"\n-\n-\n-\n-\n-\n-\n-\n-"P30455"\n-\n-\n-\n-\n-\n-\n-\n-"P30456"\n-\n-\n-\n-\n-\n-\n-\n-"P30457"\n-\n-\n-\n-\n-\n-\n-\n-"P01891"\n-\n-\n-\n-\n-\n-\n-\n-"P10316"\n-\n-\n-\n-\n-\n-\n-\n-"P30459"\n-\n-\n-\n-\n-\n-\n-\n-"Q09160"\n-\n-\n-\n-\n-\n-\n-\n-"P01889"\n-\n-\n-\n-\n-\n-\n-\n-"P30460"\n-\n-\n-\n-\n-\n-\n-\n-"P30461"\n-\n-\n-\n-\n-\n-\n-\n-"P30462"\n-\n-\n-\n-\n-\n-\n-\n-"P30464"\n-\n-\n-\n-\n-\n-\n-\n-"P30466"\n-\n-\n-\n-\n-\n-\n-\n-"P03989"\n-\n-\n-\n-\n-\n-\n-\n-"P30685"\n-\n-\n-\n-\n-\n-\n-\n-"P18463"\n-\n-\n-\n-\n-\n-\n-\n-"Q95365"\n-\n-\n-\n-\n-\n-\n-\n-"P30475"\n-\n-\n-\n-\n-\n-\n-\n-"Q04826"\n-\n-\n-\n-\n-\n-\n-\n-"P30479"\n-\n-\n-\n-\n-\n-\n-\n-"P30480"\n-\n-\n-\n-\n-\n-\n-\n-"P30481"\n-\n-\n-\n-\n-\n-\n-\n-"P30483"\n-\n-\n-\n-\n-\n-\n-\n-"P30484"\n-\n-\n-\n-\n-\n-\n-\n-"P30486"\n-\n-\n-\n-\n-\n-\n-\n-"P30485"\n-\n-\n-\n-\n-\n-\n-\n-"P30487"\n-\n-\n-\n-\n-\n-\n-\n-"P30488"\n-\n-\n-\n-\n-\n-\n-\n-"P18464"\n-\n-\n-\n-\n-\n-\n-\n-"P30490"\n-\n-\n-\n-\n-\n-\n-\n-"P30491"\n-\n-\n-\n-\n-\n-\n-\n-"P30492"\n-\n-\n-\n-\n-\n-\n-\n-"P30493"\n-\n-\n-\n-\n-\n-\n-\n-"P30495"\n-\n-\n-\n-\n-\n-\n-\n-"P18465"\n-\n-\n-\n-\n-\n-\n-\n-"P10319"\n-\n-\n-\n-\n-\n-\n-\n-"Q29940"\n-\n-\n-\n-\n-\n-\n-\n-"Q29836"\n-\n-\n-\n-\n-\n-\n-\n-"P30498"\n-\n-\n-\n-\n-\n-\n-\n-"Q31612"\n-\n-\n-\n-\n-\n-\n-\n-"Q31610"\n-\n-\n-\n-\n-\n-\n-\n-"Q29718"\n-\n-\n-\n-\n-\n-\n-\n-"P30499"\n-\n-\n-\n-\n-\n-\n-\n-"P30501"\n-\n-\n-\n-\n-\n-\n-\n-"P04222"\n-\n-\n-\n-\n-\n-\n-\n-"P30504"\n-\n-\n-\n-\n-\n-\n-\n-"Q9TNN7"\n-\n-\n-\n-\n-\n-\n-\n-"Q29963"\n-\n-\n-\n-\n-\n-\n-\n-"P10321"\n-\n-\n-\n-\n-\n-\n-\n-"P30505"\n-\n-\n-\n-\n-\n-\n-\n-"P30508"\n-\n-\n-\n-\n-\n-\n-\n-"P30510"\n-\n-\n-\n-\n-\n-\n-\n-"Q07000"\n-\n-\n-\n-\n-\n-\n-\n-"Q29960"\n-\n-\n-\n-\n-\n-\n-\n-"Q95604"\n-\n-\n-\n-\n-\n-\n-\n-"Q29865"\n-\n-\n-\n-\n-\n-\n-\n-"Q15172"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15173"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q14738"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q16537"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q13362"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P30153"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P30154"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P63151"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q00005"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q66LE6"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9Y2T4"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P01912"\n-\n-\n-\n-\n-\n-"P13760"\n-\n-\n-\n-\n-\n-"P04229"\n-\n-\n-\n-\n-\n-"P13761"\n-\n-\n-\n-\n-\n-"Q30134"\n-\n-\n-\n-\n-\n-"Q9TQE0"\n-\n-\n-\n-\n-\n-"Q30167"\n-\n-\n-\n-\n-\n-"P20039"\n-\n-\n-\n-\n-\n-"Q95IE3"\n-\n-\n-\n-\n-\n-"Q5Y7A7"\n-\n-\n-\n-\n-\n-"Q9GIY3"\n-\n-\n-\n-\n-\n-"P01911"\n-\n-\n-\n-\n-\n-"Q29974"\n-\n-\n-\n-\n-\n-"P14060"\n-\n-\n-\n-\n-\n-\n-\n-"P26439"\n-\n-\n-\n-\n-\n-\n-\n-"Q9H2F3"\n-\n-\n-\n-\n-\n-\n-\n-"Q9Y3L3"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P78314"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q7L8J4"\n-\n-\n-\n-\n-\n-\n-\n-"O60239"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P46952"\n-\n-\n-\n-\n-\n-"P31937"\n-\n-\n-\n-\n-\n-\n-"P29372"\n-\n-\n-\n-\n-\n-"P11171"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q13541"\n-\n-\n-"Q13542"\n-\n-\n-"O60516"\n-\n-\n-"Q9NRA8"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P08195"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P08908"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P28222"\n-\n-\n-\n-\n-\n-\n-\n-"P28221"\n-\n-\n-\n-\n-\n-\n-\n-"P28566"\n-\n-\n-\n-\n-\n-\n-\n-"P30939"\n-\n-\n-\n-\n-\n-\n-\n-"P28223"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P41595"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P28335"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P46098"\n-\n-\n-\n-\n-\n-\n-\n-\n-"O95264"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8WXA8"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q70Z44"\n-\n-\n-\n-\n-\n-\n-\n-\n-"A5X5Y0"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q13639"\n-\n-\n-\n-\n-\n-\n-\n-"P47898"\n-\n-\n-\n-\n-\n-\n-"P50406"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P34969"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q96P26"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9BXI3"\n-\n-\n-\n-\n-\n-\n-\n-"Q9H0P0"\n-\n-\n-\n-\n-\n-\n-"Q969T7"\n-\n-\n-\n-\n-\n-"P49902"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P21589"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P56378"\n-\n-"P52209"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O95336"\n-\n-\n-\n-\n-\n-"P05408"\n-\n-\n-\n-\n-"P36639"\n-\n-\n-\n-\n-"P0DKL9"\n-\n-\n-\n-"Q8IZ83"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q676U5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8A4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P02763"\n-\n-\n-\n-\n-"P19652"\n-\n-\n-\n-\n-"P20848"\n-\n-\n-\n-\n-\n-\n-\n-"P01009"\n-\n-\n-\n-\n-\n-\n-\n-"P04217"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9NQ94"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8NF67"\n-\n-\n-\n-\n-\n-"Q5TYW2"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q5VUR7"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q5SQ80"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q4UJ75"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"A0PJZ0"\n-\n-\n-\n-'..b'\n-\n-\n-"P21506"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17017"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17020"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17021"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17022"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17014"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17024"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17026"\n-\n-\n-\n-\n-"P17023"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17028"\n-\n-\n-\n-\n-\n-\n-\n-"P17027"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17030"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17031"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9BSG1"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17039"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17041"\n-\n-\n-\n-\n-\n-"P17035"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8IZ26"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17036"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P13682"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P51814"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17038"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q02386"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P15621"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q96MX3"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15929"\n-\n-\n-\n-"Q68EA5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q6ZN08"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15940"\n-\n-\n-\n-\n-"O43830"\n-\n-\n-\n-\n-\n-\n-"Q16587"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9UC07"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P36508"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9NQZ8"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15935"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17097"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15937"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P51504"\n-\n-\n-\n-\n-\n-"Q9UC06"\n-\n-\n-\n-\n-\n-\n-\n-\n-"P51508"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P51522"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P51523"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q03923"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P17098"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q03938"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q05481"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P35789"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"A6NK75"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q03936"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"A8MXY4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9P2E3"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O43257"\n-\n-\n-\n-"Q0IIN9"\n-\n-\n-\n-\n-"Q15649"\n-\n-\n-\n-"Q9Y6M5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q6XR72"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8WWF5"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8ND25"\n-\n-\n-\n-\n-"Q9ULT6"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9UHR6"\n-\n-\n-\n-\n-\n-\n-\n-"Q9BRI3"\n-\n-\n-\n-\n-\n-\n-"Q99726"\n-\n-\n-\n-\n-\n-\n-\n-"Q8TAD4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8NHG8"\n-\n-\n-\n-\n-\n-"Q6NXT4"\n-\n-\n-\n-\n-\n-\n-\n-\n-"O14863"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8NEW0"\n-\n-\n-\n-\n-\n-\n-\n-"Q8IWU4"\n-\n-\n-\n-\n-\n-\n-\n-"Q6PML9"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q07157"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9UDY2"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O95049"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P60852"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q05996"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P21754"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q12836"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q6X784"\n-\n-\n-\n-\n-\n-\n-"Q9UK55"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9BS86"\n-\n-\n-\n-\n-\n-\n-"Q8TCW7"\n-\n-\n-\n-\n-\n-\n-\n-"O95218"\n-\n-\n-\n-\n-\n-\n-"O75312"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q5FWF4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9UGI0"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q2KJ03"\n-\n-\n-\n-\n-"A6NJL1"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P0CG00"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q96SZ4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"A6NGD5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O43309"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9BUG6"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9H4T2"\n-\n-\n-\n-\n-\n-\n-"P17040"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8TBC5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P10073"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q16670"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9Y5A6"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q6NSZ9"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q3MJ62"\n-\n-\n-\n-\n-\n-\n-\n-"Q96LW9"\n-\n-\n-\n-\n-\n-\n-\n-"Q8IWY8"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q86W11"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9NX65"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O15535"\n-\n-\n-\n-\n-\n-\n-\n-"Q7Z7L9"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8NBB4"\n-\n-\n-\n-\n-\n-\n-\n-"Q9BR11"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8M6"\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8NEG5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q96MP5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9P217"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9HCJ5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"A7E2V4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q19AV6"\n-\n-\n-\n-"Q9H7M6"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q96AP4"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O43264"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9H900"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O95229"\n-\n-\n-\n-\n-\n-"P98169"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q2QGD7"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q6WRX3"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"P98168"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q9C0D3"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q15942"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"O43149"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-"Q8IYH5"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n'