Repository 'sapp'
hg clone https://toolshed.g2.bx.psu.edu/repos/jjkoehorst/sapp

Changeset 3:db04e12b8779 (2015-02-21)
Previous changeset 2:89be6bd55b4c (2015-02-21) Next changeset 4:47d1b27466ee (2015-02-21)
Commit message:
Uploaded
added:
gbk2rdf/gbktordf.py
gbk2rdf/gbktordf.xml
gbk2rdf/test-data/NC_010067.gbk
removed:
gbk2rdf.zip
b
diff -r 89be6bd55b4c -r db04e12b8779 gbk2rdf.zip
b
Binary file gbk2rdf.zip has changed
b
diff -r 89be6bd55b4c -r db04e12b8779 gbk2rdf/gbktordf.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gbk2rdf/gbktordf.py Sat Feb 21 07:28:39 2015 -0500
[
b'@@ -0,0 +1,371 @@\n+#!/usr/bin/env python3.4\n+# Author: Jasper Jan Koehorst\n+# Date created: Feb 21 2015\n+# Function: generation of a RDF file from Genbank/EMBL\n+\n+import warnings\n+warnings.filterwarnings("ignore")\n+\n+def delete_galaxy():\n+\timport sys\n+\tfor index, path in enumerate(sys.path):\n+\t\tif "galaxy-dist/" in path:\n+\t\t\tsys.path[index] = \'\'\n+\n+#Some modules that are required by RDFLIB are also in galaxy, this messes up the RDF import function. This is not an elegant solution but it works for now.\n+delete_galaxy()\n+\n+from Bio import SeqIO\n+# Import RDFLib\'s default Graph implementation.\n+import os, sys\n+from Bio.Seq import Seq\n+\n+from rdflib import Graph, URIRef, Literal,Namespace,RDF,RDFS,OWL, plugin\n+from rdflib.store import Store\n+import hashlib\n+store = plugin.get(\'IOMemory\', Store)()\n+\n+global URI\n+URI = "http://csb.wur.nl/genome/"\n+global seeAlso\n+seeAlso = "rdfs:seeAlso"\n+global coreURI\n+coreURI = Namespace(URI)\n+\n+global SubClassOfDict\n+SubClassOfDict = {}\n+global SubClassOfDictRna\n+SubClassOfDictRna = {}\n+\n+def createClass(uri, root=True):\n+\tgenomeGraph.add((uri,RDF.type,OWL.Class))\n+\tif root:\n+\t\tgenomeGraph.add((uri,RDFS.subClassOf,OWL.Thing))\n+\treturn uri\n+\n+def tmp():\n+\timport time\n+\tglobal tmpFolder\n+\ttmpFolder = "/tmp/"+str(time.time())+"/"\n+\tos.mkdir(tmpFolder)\n+\n+def cleantmp():\n+\tos.system("ls "+tmpFolder)\n+\tos.system("rm -rf "+tmpFolder)\n+\n+def crawler():\n+\t#From input folder it looks for GBK file (gz files are in progress)\n+\tinput_file = sys.argv[sys.argv.index("-input")+1]\n+\tgbk_parser(input_file)\n+\n+def gbk_parser():\n+\tprevObjStart = -1\n+\tprevObjStop = -1\t\n+\tstore = plugin.get(\'IOMemory\', Store)()\n+\tglobal genomeGraph\n+\tgenomeGraph = Graph(store,URIRef(URI))\n+\tgenomeGraph.bind("ssb",coreURI)\n+\tinput_file = sys.argv[sys.argv.index("-input")+1]\n+\n+\t#CLASS definitions\n+\tgenomeClass = createClass(coreURI["Genome"], root=True)\n+\ttypeClass = createClass(coreURI["DnaObject"], root=True)\n+\tcreateClass(coreURI["Protein"], root=True)\n+\tpubmedClass = createClass(coreURI["Pubmed"], root=True)\n+\tmiscClass = createClass(coreURI["MiscFeature"], root=False)\n+\tcreateClass(coreURI["Feature"], root=True)\n+\tSubClassOfDict["MiscFeature"] = 1\n+\tSubClassOfDictRna["Trna"] = 1\n+\tSubClassOfDictRna["Rrna"] = 1\n+\tSubClassOfDictRna["Tmrna"] = 1\n+\tSubClassOfDictRna["Ncrna"] = 1\n+\n+# \tcodon = "11" #Default initialization if no CDS are present\n+\t##################\n+\tweird_chars = list(\'\'\',./?<>:;"\'|\\}]{[+=_-)(*&^%$#@!\xc2\xb1\xc2\xa7~` \'\'\')\n+\tscaf_value = 0\n+\t#Which files are already done\n+\t########\n+\tformatGBK = sys.argv[sys.argv.index("-format")+1]\n+\tfor record in SeqIO.parse(input_file, formatGBK):\n+\t\t#Read first feature for genome name and information...\n+\t\t#Ignore the empty GBK file due to the lack of features?\n+\n+\t\tfor index, feature in enumerate(record.features):\n+\t\t\tif index == 0:\n+\t\t\t\tif "-identifier" in sys.argv:\n+\t\t\t\t\tgenome = sys.argv[sys.argv.index("-identifier")+1]\n+\t\t\t\telse:\n+\t\t\t\t\ttry:\n+\t\t\t\t\t\tgenome = feature.qualifiers["organism"][0].replace(" ","_")\n+\t\t\t\t\texcept:\n+\t\t\t\t\t\t#BUG: THIS IS A TEMP FIX, USE GALAXY -IDENTIFIER TO CAPTURE THIS\n+\t\t\t\t\t\tgenome = "XNoneX"\n+\t\t\t\tfor char in weird_chars:\n+\t\t\t\t\tgenome = genome.replace(char,"_")\n+\n+\t\t\t\ttry:\n+\t\t\t\t\tgi = record.annotations["gi"]\n+\t\t\t\t\ttyp = str(gi)\n+\t\t\t\texcept:\n+\t\t\t\t\tscaf_value += 1\n+\t\t\t\t\ttyp = "scaffold_"+str(scaf_value)\n+\t\t\t\tgenomeURI = coreURI[genome]\n+\t\t\t\tgbkURI = coreURI[genome + "/" + typ]\n+\t\t\t\t#To contig connection to connect all data to it\n+\t\t\t\tgenomeGraph.add((genomeURI, coreURI["dnaobject"] , gbkURI))\n+\n+\t\t\t\t#General genome features also stored in the class...\n+\t\t\t\tif "genome" in feature.qualifiers:\n+\t\t\t\t\tgenomeGraph.add((genomeURI, coreURI["organism"],Literal(feature.qualifiers["organism"][0])))\n+\t\t\t\tif "strain" in feature.qualifiers:\n+\t\t\t\t\tgenomeGraph.add((genomeURI, coreURI["strain"],Literal(feature.qualifiers["strain"][0])))\n+\t\t\t\tif "taxonomy" in record.annotations:\n+\t\t\t\t\tfor taxon in record.annotations["taxonomy"]:\n+\t\t\t\t\t\tgenomeGraph.add((genomeURI, coreURI["taxonomy"'..b'eature.qualifiers[key]\n+\t\tif key == "translation":\n+\t\t\tpass\n+\t\telif type(values) == list:\n+\t\t\tfor v in values:\n+\t\t\t\tint_add(generalURI,coreURI[key.lower()],v)\n+\t\telse:\n+\t\t\tint_add(generalURI,coreURI[key.lower()],values)\n+\tif feature.type == "CDS":\n+\t\ttry:\n+\t\t\t#Feature is normally submitted to this function\n+\t\t\t#IF a subfeature is submitted it is submitted as a feature\n+\t\t\t#And subfeature variable will contain the superfeature\n+\t\t\tif superfeature:\n+\t\t\t\tcodon = superfeature.qualifiers["transl_table"][0]\n+# \t\t\telse:\n+# \t\t\t\tcodon = subfeature.qualifiers["transl_table"][0]\n+\t\texcept:\n+\t\t\t#Default codon table 11\n+\t\t\tcodon = "11"\n+\t\t#Protein linkage\n+\t\ttranslation = ""\n+\t\ttry:\n+\t\t\ttranslation = feature.qualifiers["translation"][0].strip("*")\n+\t\texcept KeyError:\n+\t\t\t#When protein sequence is not given...\n+\t\t\tif len(feature.location.parts) > 1:\n+\t\t\t\t#Exon boundaries?\n+\t\t\t\tseq = \'\'\n+\t\t\t\tfor loc in feature.location:\n+\t\t\t\t\tseq += record.seq[loc]\n+\t\t\t\tif int(feature.location.strand) == -1:\n+\t\t\t\t\tseq = Seq(seq).complement()\n+\t\t\t\telse:\n+\t\t\t\t\tseq = Seq(seq)\n+\t\t\t\ttranslation = str(seq.translate(feature.qualifiers["transl_table"][0]))\n+\t\t\telif int(feature.location.strand) == -1:\n+\t\t\t\tif str(record.seq[feature.location.nofuzzy_start:feature.location.nofuzzy_end].reverse_complement().translate(codon)).strip("*") != translation:\n+\t\t\t\t\tif len(str(record.seq[feature.location.nofuzzy_start:feature.location.nofuzzy_end])) % 3 == 0:\n+\t\t\t\t\t\ttranslation = str(record.seq[feature.location.nofuzzy_start:feature.location.nofuzzy_end].reverse_complement().translate(codon))\n+\t\t\t\t\telse:\n+\t\t\t\t\t\ttranslation = \'\'\n+\t\t\telif int(feature.location.strand) == +1:\n+\t\t\t\t\tif len(str(record.seq[feature.location.nofuzzy_start:feature.location.nofuzzy_end])) % 3 == 0:\n+\t\t\t\t\t\ttranslation = str(record.seq[feature.location.nofuzzy_start:feature.location.nofuzzy_end].translate(codon))\n+\t\t\t\t\telse:\n+\t\t\t\t\t\ttranslation = \'\'\n+\t\t\t\n+\t\t\tif translation:\n+\t\t\t\ttranslation = list(translation)\n+\t\t\t\ttranslation[0] = "M"\n+\t\t\t\ttranslation = \'\'.join(translation).strip("*")\n+\t\t\t\tif "*" in translation:\n+\t\t\t\t\tpass\t\t\n+\n+\t\ttranslation = translation.encode(\'utf-8\')\n+\t\tmd5_protein = hashlib.md5(translation).hexdigest()\n+\t\tproteinURI = coreURI["protein/"+md5_protein]\n+\t\tgenomeGraph.add((generalURI,coreURI["protein"],proteinURI))\n+\t\tfor key in feature.qualifiers:\n+\t\t\tfor v in feature.qualifiers[key]:\n+\t\t\t\tif key == "translation":\n+\t\t\t\t\tgenomeGraph.add((proteinURI,coreURI["md5"],Literal(md5_protein)))\n+\t\t\t\t\tgenomeGraph.add((proteinURI,coreURI["sequence"],Literal(translation)))\n+\t\t\t\t\tgenomeGraph.add((proteinURI,RDF.type,proteinClass))\n+\t\t\t\telse:\n+\t\t\t\t\tfor v in feature.qualifiers[key]:\n+\t\t\t\t\t\tint_add(generalURI,coreURI[key.lower()],v)\n+\t\n+def int_add(subject, predicate, obj):\n+\ttry:\n+\t\tobject_float = float(obj.replace(\'"\',\'\'))\n+\t\tobject_int = int(obj.replace(\'"\',\'\'))\n+\t\tif object_int == object_float:\n+\t\t\tgenomeGraph.add((subject,predicate,Literal(object_int)))\n+\t\telse:\n+\t\t\tgenomeGraph.add((subject,predicate,Literal(object_float)))\n+\texcept:\n+\t\tgenomeGraph.add((subject,predicate,Literal(obj.replace(\'"\',\'\'))))\n+\t\t\t\t\n+def save():\n+\tdata = genomeGraph.serialize(format=\'turtle\')\n+\topen(sys.argv[sys.argv.index("-output")+1],"wb").write(data)\n+\n+def subClassOfBuilder():\n+\tfor subclass in SubClassOfDict:\n+\t\tgenomeGraph.add((coreURI["Feature"],RDFS.subClassOf,OWL.Thing))\n+\t\tgenomeGraph.add((coreURI[subclass],RDFS.subClassOf,coreURI["Feature"]))\n+\n+def subClassOfBuilderRna():\n+\tfor subclass in SubClassOfDictRna:\n+\t\tgenomeGraph.add((coreURI["Feature"],RDFS.subClassOf,OWL.Thing))\n+\t\tgenomeGraph.add((coreURI["Rna"],RDFS.subClassOf,coreURI["Feature"]))\n+\t\tgenomeGraph.add((coreURI[subclass],RDFS.subClassOf,coreURI["Rna"]))\n+\t\tgenomeGraph.add((coreURI[subclass],RDFS.subClassOf,coreURI["Rna"]))\n+\t\tgenomeGraph.add((coreURI[subclass],RDF.type,OWL.Class))\n+\n+def main():\n+\ttmp()\n+\tgbk_parser()\n+\tsubClassOfBuilder()\n+\tsubClassOfBuilderRna()\n+\tsave()\n+\tcleantmp()\n+\n+if __name__ == "__main__":\n+\tmain()\n\\ No newline at end of file\n'
b
diff -r 89be6bd55b4c -r db04e12b8779 gbk2rdf/gbktordf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gbk2rdf/gbktordf.xml Sat Feb 21 07:28:39 2015 -0500
b
@@ -0,0 +1,32 @@
+<tool id="SAPP_genbank_to_ttl" name="EMBL/GBK to RDF" version="0.1">
+ <requirements>
+     <requirement type='package' version="3.4">python</requirement>
+     <requirement type='package' version="1.0">rdflib</requirement>
+ </requirements>
+ <description>Genbank to RDF conversion</description>
+ <command interpreter="python3.4">gbktordf.py '-input' '$input' -output '$output' -sourcedb "$format" -format "$format"</command>
+ <inputs>
+ <param name="input" type="data" format="gbk,gb,genbank" label="Genbank file"/>
+ <param name="format" type="select" label="EMBL/GBK">
+ <option value="genbank" selected="true"> Genbank</option>
+ <option value="embl"> EMBL </option>
+ </param>
+ </inputs>
+
+ <outputs>
+ <data format="rdf" name="output" label="GBKttl: ${input.name}" />
+ </outputs>
+
+ <tests>
+     <test>
+       <param name="input" value="test-data/NC_010067.gbk"/>
+       <output name="$output" file="NC_010067.rdf"/>
+       <output name="$format" value="genbank"/>
+       <output name="$sourcedb" value="genbank"/>
+     </test>
+  </tests>
+  
+ <help>
+ Genbank or EMBL to RDF conversion
+ </help>
+</tool>
b
diff -r 89be6bd55b4c -r db04e12b8779 gbk2rdf/test-data/NC_010067.gbk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gbk2rdf/test-data/NC_010067.gbk Sat Feb 21 07:28:39 2015 -0500
b
b"@@ -0,0 +1,259779 @@\n+LOCUS       NC_010067            4600800 bp    DNA     circular CON 20-AUG-2013\n+DEFINITION  Salmonella enterica subsp. arizonae serovar 62:z4,z23:- str.\n+            RSK2980 chromosome, complete genome.\n+ACCESSION   NC_010067\n+VERSION     NC_010067.1  GI:161501984\n+DBLINK      Project: 58191\n+            BioProject: PRJNA58191\n+KEYWORDS    .\n+SOURCE      Salmonella enterica subsp. arizonae serovar 62:z4,z23:- str.\n+            RSK2980\n+  ORGANISM  Salmonella enterica subsp. arizonae serovar 62:z4,z23:- str.\n+            RSK2980\n+            Bacteria; Proteobacteria; Gammaproteobacteria; Enterobacteriales;\n+            Enterobacteriaceae; Salmonella.\n+REFERENCE   1  (bases 1 to 4600800)\n+  CONSRTM   NCBI Genome Project\n+  TITLE     Direct Submission\n+  JOURNAL   Submitted (03-DEC-2007) National Center for Biotechnology\n+            Information, NIH, Bethesda, MD 20894, USA\n+REFERENCE   2  (bases 1 to 4600800)\n+  AUTHORS   McClelland,M., Sanderson,E.K., Porwollik,S., Spieth,J.,\n+            Clifton,W.S., Fulton,R., Chunyan,W., Wollam,A., Shah,N., Pepin,K.,\n+            Bhonagiri,V., Nash,W., Johnson,M., Thiruvilangam,P. and Wilson,R.\n+  CONSRTM   The Salmonella enterica serovar Arizonae Genome Sequencing Project\n+  TITLE     Direct Submission\n+  JOURNAL   Submitted (02-NOV-2007) Genetics, Genome Sequencing Center, 4444\n+            Forest Park Parkway, St. Louis, MO 63108, USA\n+COMMENT     PROVISIONAL REFSEQ: This record has not yet been subject to final\n+            NCBI review. The reference sequence was derived from CP000880.\n+            Salmonella enterica subspecies IIIa (Arizonae) serovar\n+            62:z4,z23:--Most bacteria in the species S. enterica belong to one\n+            of seven subspecies; all but subspecies I normally grow only in\n+            cold-blooded animals. Subspecies IIIa (S. Arizonae) is naturally\n+            found in reptiles, but also causes outbreaks of salmonellosis in\n+            turkeys and sheep and can occasionally produce both gastroenteritis\n+            and serious disseminated disease in humans. Many human infections\n+            can be traced to contact with reptiles or ingestion of various\n+            reptile products, particularly from rattlesnakes. Fewer than ten\n+            cases in humans are typically reported in the US each year.\n+            \n+            The strain of S. Arizonae (62:z4,z23:-) being sequenced is\n+            CDC346-86; it was named RSK2980 by R.K. Selander and is strain\n+            SARC5 of the Salmonella Reference C set. This serovar is of\n+            interest because of its taxonomic position. It appears to be the\n+            most divergent subspecies among the S. enterica. It can be obtained\n+            from the American Type Culture Collection as ATCC BAA-731, or the\n+            Salmonella Genetic Stock Centre as SGSC4693. The genome was\n+            sequenced to 8X coverage, using plasmid and fosmid libraries and\n+            was finished to an error rate of less than 1 per 10,000 bases.\n+            Automated annotation was performed and manual annotation will\n+            continue in the labs of Michael McClelland and Kenneth Sanderson.\n+            The National Institute of Allergy and Infectious Diseases (NIAID),\n+            National Institutes of Health (NIH) has funded this project.\n+            \n+            Coding sequences below are predicted using GeneMark v3.3 and\n+            Glimmer2  v2.13.Intergenic regions not spanned by GeneMark and\n+            Glimmer2 were blasted against NCBI's non-redundant (NR) database\n+            and predictions generated based on protein alignments. RNA genes\n+            were determined  using tRNAscan-SE 1.23 or Rfam v8.0. This sequence\n+            was finished as follows unless otherwise noted: all regions were\n+            double stranded, sequenced with an alternate chemistries or covered\n+            by high quality data(i.e., phred quality >=30);an attempt was made\n+      "..b'1 acccgtcatc gtatcgtcct tgccgcaacg cttgcggaat ttcttacaca acttaatcct\n+  4597741 cttctgtaat cgtttgccct gacaggtgtg agagatctct tacaaggtct gtaggagatc\n+  4597801 gccaggatat cagagaatac ttagctacga ctttctcctg taaatatata taaatcaatc\n+  4597861 tattaaaata ttatttcgca ctttcatata caaatttact taaggtatcg tctgtaagcg\n+  4597921 tcttgtaaga caaggtgaaa caggcgattc tatattcatc gacagggagt cgtacaacga\n+  4597981 agcgaacgtc aggaagatgg cgcttctgca ggacacgcca ggagggcgtt acatggaaag\n+  4598041 gcttcaggat gaggcaaagt ggaaagcgca ggatgcgtta aaggacacct ccaggacgga\n+  4598101 gaacgagagc cgattaggat ggtcggcggg tctggatgac cagggacgct tcgggatgaa\n+  4598161 gctatcacat cggggcgatg tgcgcaggat gcaaacgttc aggatgagca ggccgcaggg\n+  4598221 tcacaggaaa agttgtcacg gatgagcagg gagcatgaaa agtagctgga atgctgcgaa\n+  4598281 acgaaccggg agcactgttt atacagtgct cccttttttt gttattcttc gcgccagatt\n+  4598341 tccattattg aggttcttaa catgacgact catgaccgtg tgcgtcagca gttacatgcg\n+  4598401 cttgaaacgc tgctgcgtga gcatcatcac tggcggctgg atgcgccgca ggcgcacctg\n+  4598461 tttaccagca cgcagccgtt ttgtatggat accatggaac cgctggaatg gctgcaatgg\n+  4598521 gtattgatcc cgcgtatgca taccctgctt gataatgcgc agccgttacc tgaggcgttt\n+  4598581 gccgtcgccc cttattatga aatggcgctg acggcggatt atccgcagcg ggaagcgatc\n+  4598641 ctgacggttt tgcaggatct ggatgcgcta tttacccgcg ataaatcctg atgctggaga\n+  4598701 tcctctatca ggacgcgtgg ctggttgccg ttaataaacc tgcaggctgg cttgttcacc\n+  4598761 ggagctggct ggatcgcgac gaaaaagttg tggtcatgca aacggtgcgc gaccaaatcg\n+  4598821 gccagcatgt ttttaccgcc caccgtctcg acagacccac atcgggcgta ctactgatgg\n+  4598881 ggctgtccag cgaagcggga cgccgcctgg cgcagcagtt cgagcagcac catatccgta\n+  4598941 aacgttacca tgccatagtg cgcggctggc tgatggatga tgcgctactg gattatcctc\n+  4599001 tgctggaaga gcgcgataaa attgccgata agttcgcgcg tgaggataaa gcgccccagc\n+  4599061 cagccgtaac gcagtatcgc gggctggcga cggtcgaaat ggcagtgccg accgggcgtt\n+  4599121 atcccactac gcgttatggc ctggttgagc tggaaccgaa aacggggcgc aaacaccagc\n+  4599181 tccgccgtca tctggcgcat ctacgccatc ctatcatcgg cgacagtaaa cacggtgatt\n+  4599241 tgcggcaaaa ccgtagcgcg gcggaacatt ttgcttgtcg tcgcctgatg cttcatgcca\n+  4599301 gtcggcttga actgacgcat cccttcaccg gacagccatt aattattcag gccggactgg\n+  4599361 atgaaacctg gatgcaggcg ctaacacagt ttggctggcg gggacttctc cctgataatg\n+  4599421 aaagggttga gtttacgacg gcgtcccggc aggatgagtc ttatcagaca taattcaggg\n+  4599481 agatacgcat aatggcggaa attggtattt ttgtcggtac gatgtatggc aactcactgt\n+  4599541 tggtggcgga ggaagcggaa gcgatcctgg ccagacaggg ccatagcgcg actgtgtttg\n+  4599601 aagatcctga actgtccgac tggcggcaat atcaggacaa ggtggcattg gttgtcacct\n+  4599661 caacgaccgg acagggcgat ctaccggata gtattgcgcc gctctttcac ggtattaaag\n+  4599721 atacgttagg ttttcaacca aacctgcgtt acggggtgat tgcgttaggt gatagcagct\n+  4599781 accccaattt ctgtaatggc ggcaagcagt ttgatgccct gttgcaggag caaagcgcgc\n+  4599841 aacgggtggg ggaaatgtta ctcattgacg ccagcgaaca tccggagccg gagagccaat\n+  4599901 ccaatccctg ggtagaaaac tggggaacct tactttcctg aggtaaatcc ctccccctac\n+  4599961 cgggagggta ccttttcgtt tgattgcatt gccagtaagc aaaataacga cctgtatgta\n+  4600021 gtttaaagaa actgaatcgt gttagctttg tgcatatgcc tgcaaaagca gcagtttttt\n+  4600081 acgggcgttt tcatgtaatc aagcgacctg tttcacattc ttctcttttt attcctcctg\n+  4600141 cgtcgacgcc tgacgccttc tgatttcatt tccgtgaagt ggcttccact gtcctgggct\n+  4600201 tttgccacaa acaggcgtaa ttcattgcca aaatactgtg ttgttgcacg gtgagtgtgc\n+  4600261 gtgacgcgct ttttatactt ctcctgccag tgaataaaag aatgcagcat gcaaagcaaa\n+  4600321 cgacctaata aaagctgcaa caaggaaacg ttatctctga ttccctaccg gttgtgcagt\n+  4600381 tcagagtgag cgtagctaac gcgaaatttc aggagtgcaa caatgagttc attaagtcac\n+  4600441 gcggcgagta gtgcggagaa tcgcacgaac gcccgctact ggatagtggt gatgctgttt\n+  4600501 atcgtcacat cctttaacta tggcgatcgc gccacattgt ccattgccgg ctcagaaatg\n+  4600561 gccaaagata ttggtcttga cccggtaggc atgggctacg ttttctctgc gttttcatgg\n+  4600621 gcctatgtta tcggacagat ccctggcggc tggctgctgg accgctttgg ttccaaacgc\n+  4600681 gtctatttct ggtctatttt catctggtcg gtcttcaccc tgttgcaggg ttttgtcgat\n+  4600741 atttttagcg gtttcggcat tgttgtcgcc ctctttacgc ttcgtttcct ggtcggtctg\n+//\n'