PageRenderTime 26ms CodeModel.GetById 33ms RepoModel.GetById 0ms app.codeStats 0ms

/bioutil/codon.go

https://bitbucket.org/mingzhi/biogo
Go | 393 lines | 368 code | 15 blank | 10 comment | 30 complexity | 60279b6189acded9f11e4f278c911e66 MD5 | raw file
  1. package bioutil
  2. // Codon tables.
  3. // These tables are based on parsing the NCBI files:
  4. // ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt.
  5. import (
  6. "bufio"
  7. "io"
  8. "regexp"
  9. "strings"
  10. )
  11. // A genetic codon table.
  12. type CodonTable struct {
  13. Id string // Table Id, defined by NCBI.
  14. Name string // Table name.
  15. AltName string // Alt-name
  16. Table map[string]string // A codon -- aa map
  17. BackTable map[string]string // A aa -- codon pattern map
  18. StopCodons []string // Stop codons in this table
  19. StartCodons []string // Start codons in this table
  20. }
  21. // ParseGC returns a list of codon tables.
  22. // This function is designed to parse gc.prt from the NCBI.
  23. func ParseGC(r io.Reader) (tables map[string]CodonTable, err error) {
  24. tables = make(map[string]CodonTable)
  25. br := bufio.NewReader(r)
  26. // regexp compile
  27. startRe, _ := regexp.Compile(`^\s{`)
  28. endRe, _ := regexp.Compile(`^\s}`)
  29. idRe, _ := regexp.Compile(`id\s(\d+)`)
  30. nameRe, _ := regexp.Compile(`name\s+\"(.+)\"`)
  31. ncbieaaRe, _ := regexp.Compile(`\sncbieaa\s+"(.+)"`)
  32. sncbieaaRe, _ := regexp.Compile(`\ssncbieaa\s+"(.+)"`)
  33. baseRe, _ := regexp.Compile(`Base\d\s+(\w+)`)
  34. var line string
  35. line, err = br.ReadString('\n')
  36. for err == nil {
  37. if startRe.MatchString(line) {
  38. var idStr, ncbieaa, sncbieaa string
  39. names := []string{}
  40. bases := []string{}
  41. line, err = br.ReadString('\n')
  42. for err == nil {
  43. if endRe.MatchString(line) {
  44. break
  45. }
  46. if idRe.MatchString(line) {
  47. idStr = idRe.FindStringSubmatch(line)[1]
  48. }
  49. if nameRe.MatchString(line) {
  50. names = append(names, nameRe.FindStringSubmatch(line)[1])
  51. }
  52. if ncbieaaRe.MatchString(line) {
  53. ncbieaa = ncbieaaRe.FindStringSubmatch(line)[1]
  54. }
  55. if sncbieaaRe.MatchString(line) {
  56. sncbieaa = sncbieaaRe.FindStringSubmatch(line)[1]
  57. }
  58. if baseRe.MatchString(line) {
  59. bases = append(bases, baseRe.FindStringSubmatch(line)[1])
  60. }
  61. line, err = br.ReadString('\n')
  62. }
  63. id := idStr
  64. var name, altname string
  65. name = names[0]
  66. if len(names) > 1 {
  67. altname = names[1]
  68. }
  69. // create a CondonTable
  70. ct := CodonTable{
  71. Id: id,
  72. Name: name,
  73. AltName: altname,
  74. }
  75. cmap := make(map[string]string)
  76. bmap := make(map[string][]string)
  77. stopCodons := []string{}
  78. startCodons := []string{}
  79. for i := 0; i < len(ncbieaa); i++ {
  80. codon := string([]byte{bases[0][i], bases[1][i], bases[2][i]})
  81. aa := string(ncbieaa[i])
  82. cmap[codon] = aa
  83. bmap[aa] = append(bmap[aa], codon)
  84. if ncbieaa[i] == '*' {
  85. stopCodons = append(stopCodons, codon)
  86. }
  87. if sncbieaa[i] == 'M' {
  88. startCodons = append(startCodons, codon)
  89. bmap[">"] = append(bmap[">"], codon)
  90. }
  91. }
  92. backTable := make(map[string]string)
  93. for aa, codons := range bmap {
  94. s := ""
  95. for i := 0; i < 3; i++ {
  96. m := make(map[byte]bool)
  97. for _, c := range codons {
  98. _, found := m[c[i]]
  99. if !found {
  100. m[c[i]] = true
  101. }
  102. }
  103. if len(m) == 4 {
  104. s += "."
  105. } else {
  106. keys := []string{}
  107. for k, _ := range m {
  108. keys = append(keys, string(k))
  109. }
  110. if len(keys) == 1 {
  111. s += keys[0]
  112. } else {
  113. s += "[" + strings.Join(keys, "|") + "]"
  114. }
  115. }
  116. }
  117. backTable[aa] = s
  118. }
  119. ct.Table = cmap
  120. ct.StartCodons = startCodons
  121. ct.StopCodons = stopCodons
  122. ct.BackTable = backTable
  123. tables[ct.Id] = ct
  124. }
  125. line, err = br.ReadString('\n')
  126. }
  127. if err == io.EOF {
  128. err = nil
  129. }
  130. return
  131. }
  132. // BuildinCodonTables returns 18 codon tables of version 3.9.
  133. // It is better to use ParseGC() to get updated codon tables.
  134. func BuildinCodonTables() map[string]CodonTable {
  135. gcContent := `--**************************************************************************
  136. -- This is the NCBI genetic code table
  137. -- Initial base data set from Andrzej Elzanowski while at PIR International
  138. -- Addition of Eubacterial and Alternative Yeast by J.Ostell at NCBI
  139. -- Base 1-3 of each codon have been added as comments to facilitate
  140. -- readability at the suggestion of Peter Rice, EMBL
  141. -- Later additions by Taxonomy Group staff at NCBI
  142. --
  143. -- Version 3.9
  144. -- Code 14 differs from code 9 only by translating UAA to Tyr rather than
  145. -- STOP. A recent study (Telford et al, 2000) has found no evidence that
  146. -- the codon UAA codes for Tyr in the flatworms, but other opinions exist.
  147. -- There are very few GenBank records that are translated with code 14,
  148. -- but a test translation shows that retranslating these records with code
  149. -- 9 can cause premature terminations. Therefore, GenBank will maintain
  150. -- code 14 until further information becomes available.
  151. --
  152. -- Version 3.8
  153. -- Added GTG start to Echinoderm mitochondrial code, code 9
  154. --
  155. -- Version 3.7
  156. -- Added code 23 Thraustochytrium mitochondrial code
  157. -- formerly OGMP code 93
  158. -- submitted by Gertraude Berger, Ph.D.
  159. --
  160. -- Version 3.6
  161. -- Added code 22 TAG-Leu, TCA-stop
  162. -- found in mitochondrial DNA of Scenedesmus obliquus
  163. -- submitted by Gertraude Berger, Ph.D.
  164. -- Organelle Genome Megasequencing Program, Univ Montreal
  165. --
  166. -- Version 3.5
  167. -- Added code 21, Trematode Mitochondrial
  168. -- (as deduced from: Garey & Wolstenholme,1989; Ohama et al, 1990)
  169. -- Added code 16, Chlorophycean Mitochondrial
  170. -- (TAG can translated to Leucine instaed to STOP in chlorophyceans
  171. -- and fungi)
  172. --
  173. -- Version 3.4
  174. -- Added CTG,TTG as allowed alternate start codons in Standard code.
  175. -- Prats et al. 1989, Hann et al. 1992
  176. --
  177. -- Version 3.3 - 10/13/95
  178. -- Added alternate intiation codon ATC to code 5
  179. -- based on complete mitochondrial genome of honeybee
  180. -- Crozier and Crozier (1993)
  181. --
  182. -- Version 3.2 - 6/24/95
  183. -- Code Comments
  184. -- 10 Alternative Ciliate Macronuclear renamed to Euplotid Macro...
  185. -- 15 Bleharisma Macro.. code added
  186. -- 5 Invertebrate Mito.. GTG allowed as alternate initiator
  187. -- 11 Eubacterial renamed to Bacterial as most alternate starts
  188. -- have been found in Achea
  189. --
  190. --
  191. -- Version 3.1 - 1995
  192. -- Updated as per Andrzej Elzanowski at NCBI
  193. -- Complete documentation in NCBI toolkit documentation
  194. -- Note: 2 genetic codes have been deleted
  195. --
  196. -- Old id Use id - Notes
  197. --
  198. -- id 7 id 4 - Kinetoplast code now merged in code id 4
  199. -- id 8 id 1 - all plant chloroplast differences due to RNA edit
  200. --
  201. --*************************************************************************
  202. Genetic-code-table ::= {
  203. {
  204. name "Standard" ,
  205. name "SGC0" ,
  206. id 1 ,
  207. ncbieaa "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  208. sncbieaa "---M---------------M---------------M----------------------------"
  209. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  210. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  211. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  212. },
  213. {
  214. name "Vertebrate Mitochondrial" ,
  215. name "SGC1" ,
  216. id 2 ,
  217. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG",
  218. sncbieaa "--------------------------------MMMM---------------M------------"
  219. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  220. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  221. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  222. },
  223. {
  224. name "Yeast Mitochondrial" ,
  225. name "SGC2" ,
  226. id 3 ,
  227. ncbieaa "FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  228. sncbieaa "----------------------------------MM----------------------------"
  229. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  230. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  231. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  232. },
  233. {
  234. name "Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate
  235. Mitochondrial; Mycoplasma; Spiroplasma" ,
  236. name "SGC3" ,
  237. id 4 ,
  238. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  239. sncbieaa "--MM---------------M------------MMMM---------------M------------"
  240. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  241. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  242. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  243. },
  244. {
  245. name "Invertebrate Mitochondrial" ,
  246. name "SGC4" ,
  247. id 5 ,
  248. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG",
  249. sncbieaa "---M----------------------------MMMM---------------M------------"
  250. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  251. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  252. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  253. },
  254. {
  255. name "Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear" ,
  256. name "SGC5" ,
  257. id 6 ,
  258. ncbieaa "FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  259. sncbieaa "-----------------------------------M----------------------------"
  260. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  261. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  262. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  263. },
  264. {
  265. name "Echinoderm Mitochondrial; Flatworm Mitochondrial" ,
  266. name "SGC8" ,
  267. id 9 ,
  268. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG",
  269. sncbieaa "-----------------------------------M---------------M------------"
  270. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  271. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  272. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  273. },
  274. {
  275. name "Euplotid Nuclear" ,
  276. name "SGC9" ,
  277. id 10 ,
  278. ncbieaa "FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  279. sncbieaa "-----------------------------------M----------------------------"
  280. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  281. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  282. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  283. },
  284. {
  285. name "Bacterial, Archaeal and Plant Plastid" ,
  286. id 11 ,
  287. ncbieaa "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  288. sncbieaa "---M---------------M------------MMMM---------------M------------"
  289. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  290. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  291. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  292. },
  293. {
  294. name "Alternative Yeast Nuclear" ,
  295. id 12 ,
  296. ncbieaa "FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  297. sncbieaa "-------------------M---------------M----------------------------"
  298. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  299. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  300. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  301. },
  302. {
  303. name "Ascidian Mitochondrial" ,
  304. id 13 ,
  305. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG",
  306. sncbieaa "---M------------------------------MM---------------M------------"
  307. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  308. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  309. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  310. },
  311. {
  312. name "Alternative Flatworm Mitochondrial" ,
  313. id 14 ,
  314. ncbieaa "FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG",
  315. sncbieaa "-----------------------------------M----------------------------"
  316. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  317. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  318. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  319. } ,
  320. {
  321. name "Blepharisma Macronuclear" ,
  322. id 15 ,
  323. ncbieaa "FFLLSSSSYY*QCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  324. sncbieaa "-----------------------------------M----------------------------"
  325. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  326. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  327. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  328. } ,
  329. {
  330. name "Chlorophycean Mitochondrial" ,
  331. id 16 ,
  332. ncbieaa "FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  333. sncbieaa "-----------------------------------M----------------------------"
  334. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  335. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  336. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  337. } ,
  338. {
  339. name "Trematode Mitochondrial" ,
  340. id 21 ,
  341. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG",
  342. sncbieaa "-----------------------------------M---------------M------------"
  343. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  344. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  345. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  346. } ,
  347. {
  348. name "Scenedesmus obliquus Mitochondrial" ,
  349. id 22 ,
  350. ncbieaa "FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  351. sncbieaa "-----------------------------------M----------------------------"
  352. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  353. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  354. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  355. } ,
  356. {
  357. name "Thraustochytrium Mitochondrial" ,
  358. id 23 ,
  359. ncbieaa "FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
  360. sncbieaa "--------------------------------M--M---------------M------------"
  361. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  362. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  363. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  364. } ,
  365. {
  366. name "Pterobranchia Mitochondrial" ,
  367. id 24 ,
  368. ncbieaa "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSSKVVVVAAAADDEEGGGG",
  369. sncbieaa "---M---------------M---------------M---------------M------------"
  370. -- Base1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  371. -- Base2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  372. -- Base3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  373. }
  374. }`
  375. tables, _ := ParseGC(strings.NewReader(gcContent))
  376. return tables
  377. }