From b87947bf591f9300ce5e0b4023a9822976b1e43d Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 23 Aug 2023 19:17:10 -0700 Subject: [PATCH 01/59] Moved io to bio --- bio/bio.go | 23 ++++ bio/bio_test.go | 13 +++ {io => bio}/example_test.go | 12 +- {io => bio}/fasta/data/base.fasta | 0 .../fasta/data/uniprot_1mb_test.fasta.gz | Bin {io => bio}/fasta/example_test.go | 12 +- {io => bio}/fasta/fasta.go | 87 ++++++++------ {io => bio}/fasta/fasta_test.go | 51 +------- {io => bio}/fastq/data/nanosavseq.fastq | 0 {io => bio}/fastq/data/nanosavseq.fastq.gz | Bin .../fastq/data/nanosavseq_emptyseq.fastq | 0 .../fastq/data/nanosavseq_noidentifier.fastq | 0 .../fastq/data/nanosavseq_noplus.fastq | 0 .../fastq/data/nanosavseq_noquality.fastq | 0 .../fastq/data/nanosavseq_noquality2.fastq | 0 {io => bio}/fastq/data/nanosavseq_noseq.fastq | 0 bio/fastq/data/pOpen_v3.fastq.gz | Bin 0 -> 176400 bytes {io => bio}/fastq/example_test.go | 2 +- {io => bio}/fastq/fastq.go | 109 ++++++++++++------ {io => bio}/fastq/fastq_test.go | 21 ++++ {io => bio}/genbank/example_test.go | 2 +- {io => bio}/genbank/genbank.go | 0 {io => bio}/genbank/genbank_test.go | 4 +- {io => bio}/gff/example_test.go | 2 +- {io => bio}/gff/gff.go | 0 {io => bio}/gff/gff_test.go | 0 {io => bio}/pileup/data/test.pileup | 0 .../pileup/data/test_not_enough_fields.pileup | 0 .../pileup/data/test_position_non_int.pileup | 0 {io => bio}/pileup/data/test_read_off.pileup | 0 .../pileup/data/test_readcount_non_int.pileup | 0 .../pileup/data/test_unknown_rune.pileup | 0 {io => bio}/pileup/pileup.go | 0 {io => bio}/pileup/pileup_test.go | 0 {io => bio}/polyjson/example_test.go | 2 +- {io => bio}/polyjson/polyjson.go | 0 {io => bio}/polyjson/polyjson_test.go | 0 {io => bio}/rebase/data/rebase_test.txt | 0 {io => bio}/rebase/example_test.go | 2 +- {io => bio}/rebase/rebase.go | 0 {io => bio}/rebase/rebase_test.go | 0 {io => bio}/slow5/data/example.slow5 | 0 .../data/header_tests/test_header_empty.slow5 | 0 .../test_header_not_enough_attributes.slow5 | 0 .../test_header_numReadGroups_bad.slow5 | 0 .../test_header_without_tabs.slow5 | 0 .../slow5/data/read_tests/continue.slow5 | 0 .../slow5/data/read_tests/digitisation.slow5 | 0 .../slow5/data/read_tests/endReason.slow5 | 0 .../slow5/data/read_tests/end_reason.slow5 | 0 .../data/read_tests/end_reason_unknown.slow5 | 0 .../data/read_tests/len_raw_signal.slow5 | 0 .../slow5/data/read_tests/median_before.slow5 | 0 .../slow5/data/read_tests/offset.slow5 | 0 {io => bio}/slow5/data/read_tests/range.slow5 | 0 .../slow5/data/read_tests/raw_signal.slow5 | 0 .../slow5/data/read_tests/read_group.slow5 | 0 .../slow5/data/read_tests/read_number.slow5 | 0 .../slow5/data/read_tests/sampling_rate.slow5 | 0 .../slow5/data/read_tests/start_mux.slow5 | 0 .../slow5/data/read_tests/start_time.slow5 | 0 .../slow5/data/read_tests/unknown.slow5 | 0 {io => bio}/slow5/data/test_example.slow5 | 0 {io => bio}/slow5/example_test.go | 2 +- {io => bio}/slow5/slow5.go | 0 {io => bio}/slow5/slow5_test.go | 0 {io => bio}/uniprot/data/check_uniprot | 0 {io => bio}/uniprot/data/test | 0 {io => bio}/uniprot/data/uniprot.xsd | 0 .../uniprot/data/uniprot_sprot_mini.xml.gz | Bin {io => bio}/uniprot/data/xml_go_generator | 0 {io => bio}/uniprot/example_test.go | 3 +- {io => bio}/uniprot/uniprot.go | 0 {io => bio}/uniprot/uniprot_test.go | 0 {io => bio}/uniprot/xml.go | 0 {io => bio}/uniprot/xml_test.go | 0 io/io.go | 9 -- 77 files changed, 212 insertions(+), 144 deletions(-) create mode 100644 bio/bio.go create mode 100644 bio/bio_test.go rename {io => bio}/example_test.go (82%) rename {io => bio}/fasta/data/base.fasta (100%) rename {io => bio}/fasta/data/uniprot_1mb_test.fasta.gz (100%) rename {io => bio}/fasta/example_test.go (90%) rename {io => bio}/fasta/fasta.go (90%) rename {io => bio}/fasta/fasta_test.go (82%) rename {io => bio}/fastq/data/nanosavseq.fastq (100%) rename {io => bio}/fastq/data/nanosavseq.fastq.gz (100%) rename {io => bio}/fastq/data/nanosavseq_emptyseq.fastq (100%) rename {io => bio}/fastq/data/nanosavseq_noidentifier.fastq (100%) rename {io => bio}/fastq/data/nanosavseq_noplus.fastq (100%) rename {io => bio}/fastq/data/nanosavseq_noquality.fastq (100%) rename {io => bio}/fastq/data/nanosavseq_noquality2.fastq (100%) rename {io => bio}/fastq/data/nanosavseq_noseq.fastq (100%) create mode 100644 bio/fastq/data/pOpen_v3.fastq.gz rename {io => bio}/fastq/example_test.go (98%) rename {io => bio}/fastq/fastq.go (83%) rename {io => bio}/fastq/fastq_test.go (77%) rename {io => bio}/genbank/example_test.go (99%) rename {io => bio}/genbank/genbank.go (100%) rename {io => bio}/genbank/genbank_test.go (99%) rename {io => bio}/gff/example_test.go (99%) rename {io => bio}/gff/gff.go (100%) rename {io => bio}/gff/gff_test.go (100%) rename {io => bio}/pileup/data/test.pileup (100%) rename {io => bio}/pileup/data/test_not_enough_fields.pileup (100%) rename {io => bio}/pileup/data/test_position_non_int.pileup (100%) rename {io => bio}/pileup/data/test_read_off.pileup (100%) rename {io => bio}/pileup/data/test_readcount_non_int.pileup (100%) rename {io => bio}/pileup/data/test_unknown_rune.pileup (100%) rename {io => bio}/pileup/pileup.go (100%) rename {io => bio}/pileup/pileup_test.go (100%) rename {io => bio}/polyjson/example_test.go (99%) rename {io => bio}/polyjson/polyjson.go (100%) rename {io => bio}/polyjson/polyjson_test.go (100%) rename {io => bio}/rebase/data/rebase_test.txt (100%) rename {io => bio}/rebase/example_test.go (94%) rename {io => bio}/rebase/rebase.go (100%) rename {io => bio}/rebase/rebase_test.go (100%) rename {io => bio}/slow5/data/example.slow5 (100%) rename {io => bio}/slow5/data/header_tests/test_header_empty.slow5 (100%) rename {io => bio}/slow5/data/header_tests/test_header_not_enough_attributes.slow5 (100%) rename {io => bio}/slow5/data/header_tests/test_header_numReadGroups_bad.slow5 (100%) rename {io => bio}/slow5/data/header_tests/test_header_without_tabs.slow5 (100%) rename {io => bio}/slow5/data/read_tests/continue.slow5 (100%) rename {io => bio}/slow5/data/read_tests/digitisation.slow5 (100%) rename {io => bio}/slow5/data/read_tests/endReason.slow5 (100%) rename {io => bio}/slow5/data/read_tests/end_reason.slow5 (100%) rename {io => bio}/slow5/data/read_tests/end_reason_unknown.slow5 (100%) rename {io => bio}/slow5/data/read_tests/len_raw_signal.slow5 (100%) rename {io => bio}/slow5/data/read_tests/median_before.slow5 (100%) rename {io => bio}/slow5/data/read_tests/offset.slow5 (100%) rename {io => bio}/slow5/data/read_tests/range.slow5 (100%) rename {io => bio}/slow5/data/read_tests/raw_signal.slow5 (100%) rename {io => bio}/slow5/data/read_tests/read_group.slow5 (100%) rename {io => bio}/slow5/data/read_tests/read_number.slow5 (100%) rename {io => bio}/slow5/data/read_tests/sampling_rate.slow5 (100%) rename {io => bio}/slow5/data/read_tests/start_mux.slow5 (100%) rename {io => bio}/slow5/data/read_tests/start_time.slow5 (100%) rename {io => bio}/slow5/data/read_tests/unknown.slow5 (100%) rename {io => bio}/slow5/data/test_example.slow5 (100%) rename {io => bio}/slow5/example_test.go (94%) rename {io => bio}/slow5/slow5.go (100%) rename {io => bio}/slow5/slow5_test.go (100%) rename {io => bio}/uniprot/data/check_uniprot (100%) rename {io => bio}/uniprot/data/test (100%) rename {io => bio}/uniprot/data/uniprot.xsd (100%) rename {io => bio}/uniprot/data/uniprot_sprot_mini.xml.gz (100%) rename {io => bio}/uniprot/data/xml_go_generator (100%) rename {io => bio}/uniprot/example_test.go (91%) rename {io => bio}/uniprot/uniprot.go (100%) rename {io => bio}/uniprot/uniprot_test.go (100%) rename {io => bio}/uniprot/xml.go (100%) rename {io => bio}/uniprot/xml_test.go (100%) delete mode 100644 io/io.go diff --git a/bio/bio.go b/bio/bio.go new file mode 100644 index 00000000..291399c6 --- /dev/null +++ b/bio/bio.go @@ -0,0 +1,23 @@ +/* +Package bio provides utilities for reading and writing sequence data. +*/ +package bio + +import ( + "io" +) + +/* +This package is supposed to be empty and only exists to provide a doc string. +Otherwise its namespace would collide with Go's native IO package. +*/ + +type Parser[T any, TH any] interface { + Header() (TH, error) + Next() (T, error) + MaxLineCount() int64 +} + +type Writer interface { + Write(io.Writer) error +} diff --git a/bio/bio_test.go b/bio/bio_test.go new file mode 100644 index 00000000..10d43d93 --- /dev/null +++ b/bio/bio_test.go @@ -0,0 +1,13 @@ +package bio + +import ( + "testing" + + "github.com/TimothyStiles/poly/bio/fasta" + "github.com/TimothyStiles/poly/bio/fastq" +) + +func TestWriter(t *testing.T) { + var _ Writer = &fastq.Fastq{} + var _ Writer = &fasta.Fasta{} +} diff --git a/io/example_test.go b/bio/example_test.go similarity index 82% rename from io/example_test.go rename to bio/example_test.go index 6a29e39f..de10faa0 100644 --- a/io/example_test.go +++ b/bio/example_test.go @@ -1,10 +1,10 @@ -package io_test +package bio_test import ( - "github.com/TimothyStiles/poly/io/fasta" - "github.com/TimothyStiles/poly/io/genbank" - "github.com/TimothyStiles/poly/io/gff" - "github.com/TimothyStiles/poly/io/polyjson" + "github.com/TimothyStiles/poly/bio/fasta" + "github.com/TimothyStiles/poly/bio/genbank" + "github.com/TimothyStiles/poly/bio/gff" + "github.com/TimothyStiles/poly/bio/polyjson" ) // This is where the integration tests that make effed up cyclic dependencies go. @@ -22,7 +22,7 @@ func Example() { // Poly can also output these file formats. Every file format has a corresponding Write function. _ = gff.Write(gffInput, "test.gff") _ = genbank.Write(gbkInput, "test.gbk") - _ = fasta.Write(fastaInput, "test.fasta") + _ = fasta.WriteFile(fastaInput, "test.fasta") _ = polyjson.Write(jsonInput, "test.json") // Extra tips: diff --git a/io/fasta/data/base.fasta b/bio/fasta/data/base.fasta similarity index 100% rename from io/fasta/data/base.fasta rename to bio/fasta/data/base.fasta diff --git a/io/fasta/data/uniprot_1mb_test.fasta.gz b/bio/fasta/data/uniprot_1mb_test.fasta.gz similarity index 100% rename from io/fasta/data/uniprot_1mb_test.fasta.gz rename to bio/fasta/data/uniprot_1mb_test.fasta.gz diff --git a/io/fasta/example_test.go b/bio/fasta/example_test.go similarity index 90% rename from io/fasta/example_test.go rename to bio/fasta/example_test.go index e1bb6eeb..5af2a0f2 100644 --- a/io/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -7,7 +7,7 @@ import ( "os" "strings" - "github.com/TimothyStiles/poly/io/fasta" + "github.com/TimothyStiles/poly/bio/fasta" ) //go:embed data/base.fasta @@ -40,8 +40,12 @@ func ExampleParse() { // ExampleBuild shows basic usage for Build func ExampleBuild() { fastas, _ := fasta.Read("data/base.fasta") // get example data - fasta, _ := fasta.Build(fastas) // build a fasta byte array - firstLine := string(bytes.Split(fasta, []byte("\n"))[0]) + var buffer bytes.Buffer // Initialize a buffer to write fastas into + for _, fasta := range fastas { + _ = fasta.Write(&buffer) // build a fasta byte array + + } + firstLine := string(bytes.Split(buffer.Bytes(), []byte("\n"))[0]) fmt.Println(firstLine) // Output: >gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] @@ -50,7 +54,7 @@ func ExampleBuild() { // ExampleWrite shows basic usage of the writer. func ExampleWrite() { fastas, _ := fasta.Read("data/base.fasta") // get example data - _ = fasta.Write(fastas, "data/test.fasta") // write it out again + _ = fasta.WriteFile(fastas, "data/test.fasta") // write it out again testSequence, _ := fasta.Read("data/test.fasta") // read it in again os.Remove("data/test.fasta") // getting rid of test file diff --git a/io/fasta/fasta.go b/bio/fasta/fasta.go similarity index 90% rename from io/fasta/fasta.go rename to bio/fasta/fasta.go index 56bcd294..f81b935b 100644 --- a/io/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -13,7 +13,6 @@ package fasta import ( "bufio" - "bytes" "compress/gzip" "errors" "fmt" @@ -56,12 +55,6 @@ Keoni ******************************************************************************/ -var ( - gzipReaderFn = gzip.NewReader - openFn = os.Open - buildFn = Build -) - // Fasta is a struct representing a single Fasta file element with a Name and its corresponding Sequence. type Fasta struct { Name string `json:"name"` @@ -303,7 +296,7 @@ Start of Read functions // Deprecated: Use Parser.ParseNext() instead. func ReadGzConcurrent(path string, sequences chan<- Fasta) { file, _ := os.Open(path) // TODO: these errors need to be handled/logged - reader, _ := gzipReaderFn(file) + reader, _ := gzip.NewReader(file) go func() { defer file.Close() defer reader.Close() @@ -322,12 +315,12 @@ func ReadConcurrent(path string, sequences chan<- Fasta) { // ReadGz reads a gzipped file into an array of Fasta structs. func ReadGz(path string) ([]Fasta, error) { - file, err := openFn(path) + file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() - reader, err := gzipReaderFn(file) + reader, err := gzip.NewReader(file) if err != nil { return nil, err } @@ -337,7 +330,7 @@ func ReadGz(path string) ([]Fasta, error) { // Read reads a file into an array of Fasta structs func Read(path string) ([]Fasta, error) { - file, err := openFn(path) + file, err := os.Open(path) if err != nil { return nil, err } @@ -351,38 +344,58 @@ Start of Write functions ******************************************************************************/ -// Build converts a Fastas array into a byte array to be written to a file. -func Build(fastas []Fasta) ([]byte, error) { - var fastaString bytes.Buffer - fastaLength := len(fastas) - for fastaIndex, fasta := range fastas { - fastaString.WriteString(">") - fastaString.WriteString(fasta.Name) - fastaString.WriteString("\n") - - lineCount := 0 - // write the fasta sequence 80 characters at a time - for _, character := range fasta.Sequence { - - fastaString.WriteRune(character) - lineCount++ - if lineCount == 80 { - fastaString.WriteString("\n") - lineCount = 0 - } +// Write converts a Fastas array into a byte array to be written to a file. +func (fasta *Fasta) Write(w io.Writer) error { + _, err := w.Write([]byte(">")) + if err != nil { + return err + } + _, err = w.Write([]byte(fasta.Name)) + if err != nil { + return err + } + _, err = w.Write([]byte("\n")) + if err != nil { + return err + } + + lineCount := 0 + // write the fasta sequence 80 characters at a time + for _, character := range fasta.Sequence { + + _, err = w.Write([]byte{byte(character)}) + if err != nil { + return err } - if fastaIndex != fastaLength-1 { - fastaString.WriteString("\n\n") + lineCount++ + if lineCount == 80 { + _, err = w.Write([]byte("\n")) + if err != nil { + return err + } + lineCount = 0 } } - return fastaString.Bytes(), nil + _, err = w.Write([]byte("\n\n")) + if err != nil { + return err + } + return nil } -// Write writes a fasta array to a file. -func Write(fastas []Fasta, path string) error { - fastaBytes, err := buildFn(fastas) // fasta.Build returns only nil errors. +// WriteFile writes a fasta array to a file. +func WriteFile(fastas []Fasta, path string) error { + file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0644) if err != nil { return err } - return os.WriteFile(path, fastaBytes, 0644) + defer file.Close() + + for _, fasta := range fastas { + err = fasta.Write(file) + if err != nil { + return err + } + } + return nil } diff --git a/io/fasta/fasta_test.go b/bio/fasta/fasta_test.go similarity index 82% rename from io/fasta/fasta_test.go rename to bio/fasta/fasta_test.go index 7063821e..69cd564b 100644 --- a/io/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -73,63 +73,24 @@ func BenchmarkParser(b *testing.B) { func TestRead_error(t *testing.T) { t.Run("Read errors opening the file", func(t *testing.T) { - openErr := errors.New("open error") - oldOpenFn := openFn - openFn = func(name string) (*os.File, error) { - return nil, openErr - } - defer func() { - openFn = oldOpenFn - }() - _, err := Read("/tmp/file") + openErr := errors.New("open /tmp/file12345: no such file or directory") + _, err := Read("/tmp/file12345") assert.EqualError(t, err, openErr.Error()) }) t.Run("ReadGz errors opening the file", func(t *testing.T) { - openErr := errors.New("open error") - oldOpenFn := openFn - openFn = func(name string) (*os.File, error) { - return nil, openErr - } - defer func() { - openFn = oldOpenFn - }() - _, err := ReadGz("/tmp/file") + openErr := errors.New("open /tmp/file12345: no such file or directory") + _, err := ReadGz("/tmp/file12345") assert.EqualError(t, err, openErr.Error()) }) t.Run("ReadGz errors reading the file", func(t *testing.T) { - readErr := errors.New("read error") - oldOpenFn := openFn - oldGzipReaderFn := gzipReaderFn - openFn = func(name string) (*os.File, error) { - return &os.File{}, nil - } - gzipReaderFn = func(r io.Reader) (*gzip.Reader, error) { - return nil, readErr - } - defer func() { - openFn = oldOpenFn - gzipReaderFn = oldGzipReaderFn - }() - _, err := ReadGz("/tmp/file") + readErr := errors.New("open /tmp/file12345: no such file or directory") + _, err := ReadGz("/tmp/file12345") assert.EqualError(t, err, readErr.Error()) }) } -func TestWrite_error(t *testing.T) { - buildErr := errors.New("build error") - oldBuildFn := buildFn - buildFn = func(fastas []Fasta) ([]byte, error) { - return nil, buildErr - } - defer func() { - buildFn = oldBuildFn - }() - err := Write([]Fasta{}, "/tmp/file") - assert.EqualError(t, err, buildErr.Error()) -} - func TestParser(t *testing.T) { parser := NewParser(nil, 256) for testIndex, test := range []struct { diff --git a/io/fastq/data/nanosavseq.fastq b/bio/fastq/data/nanosavseq.fastq similarity index 100% rename from io/fastq/data/nanosavseq.fastq rename to bio/fastq/data/nanosavseq.fastq diff --git a/io/fastq/data/nanosavseq.fastq.gz b/bio/fastq/data/nanosavseq.fastq.gz similarity index 100% rename from io/fastq/data/nanosavseq.fastq.gz rename to bio/fastq/data/nanosavseq.fastq.gz diff --git a/io/fastq/data/nanosavseq_emptyseq.fastq b/bio/fastq/data/nanosavseq_emptyseq.fastq similarity index 100% rename from io/fastq/data/nanosavseq_emptyseq.fastq rename to bio/fastq/data/nanosavseq_emptyseq.fastq diff --git a/io/fastq/data/nanosavseq_noidentifier.fastq b/bio/fastq/data/nanosavseq_noidentifier.fastq similarity index 100% rename from io/fastq/data/nanosavseq_noidentifier.fastq rename to bio/fastq/data/nanosavseq_noidentifier.fastq diff --git a/io/fastq/data/nanosavseq_noplus.fastq b/bio/fastq/data/nanosavseq_noplus.fastq similarity index 100% rename from io/fastq/data/nanosavseq_noplus.fastq rename to bio/fastq/data/nanosavseq_noplus.fastq diff --git a/io/fastq/data/nanosavseq_noquality.fastq b/bio/fastq/data/nanosavseq_noquality.fastq similarity index 100% rename from io/fastq/data/nanosavseq_noquality.fastq rename to bio/fastq/data/nanosavseq_noquality.fastq diff --git a/io/fastq/data/nanosavseq_noquality2.fastq b/bio/fastq/data/nanosavseq_noquality2.fastq similarity index 100% rename from io/fastq/data/nanosavseq_noquality2.fastq rename to bio/fastq/data/nanosavseq_noquality2.fastq diff --git a/io/fastq/data/nanosavseq_noseq.fastq b/bio/fastq/data/nanosavseq_noseq.fastq similarity index 100% rename from io/fastq/data/nanosavseq_noseq.fastq rename to bio/fastq/data/nanosavseq_noseq.fastq diff --git a/bio/fastq/data/pOpen_v3.fastq.gz b/bio/fastq/data/pOpen_v3.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..bcd497f0c99b2ac4d0d1205709952016810a44a4 GIT binary patch literal 176400 zcmV((K;XY0iwFqLW#ME118`4pWo}<~GcIOfb98Y4?EPtXB*%6o3V!FW&?+Vnqeu8W z&*tvtLj-_K2Jcms)a$-vl6tsRox(&OaKucHk`@q z?6Xh#@|ACeq3aq}7=(r!1&;CZmFF4WFZL_@7rfdsqhF(+BFp^Q`}tSvWnczgXga^VdSzP9&ynx_`pSCc zTEDt~$I)euZ~fh`|NO82_g`N9f{(`AtB1c2E%)zU{ZnRpfA=5%^X0$)&%gZ7|NcLI z$!ybh3^O!L|6)b4<;SjnaKa$+Ov4Of)4Z<2Uta$6e}DNOuh-%`DK3?$WF;>bak|Q^(wpuzr+(O zJ_rBdxqQER0p7vi^U?fI@NsxM2X|2;P~+5Jd@UZR2BgO-I4Hil(*JT0_(8?rT=YEf zDIBF5u$m@bs2<4gh2*Q%AoSz}N25NPpY!;ce5qOs{Q>-hi~6-*JM|Ow4t{8*)=K>& zFY1FX*Fo^LoPWioyQsHFexTIPSF_{%`Ra?B+=W9F{9N_83#TnPc6>?xQmSDsyH@Eb zb4Egc5}zdbVt$ZN3w%*8<8m##c2Qfnh{Q$DUA<6mmel`Awd(waL)6m4dFh7={XW6* z2|eCr23#vWaH$@lKTs`=R8ta*09AU1O1LVuHTrFQzaE_AgE{5pcWRbmnJX7v3MEf` zz(vpLqLz{?rUhKD;y6yrqAY76`=ZE`BuVo+Pea%9Jm0lSQ52SG z+DU>J#!2hot0`e^_P49`X5$B8Sv5_TWqDeZd6vb2?|WfZ)KyiMZC#ah-E^2=UKC~9 zM-d*27kH+Z9QOOY8wNoX9rt@9f~|$1r6Jhd@1**6$?U4)puhpEO<=p~rcaeLUT*MaREk7b1^P3NYQ1IClb7&vV0(Q@bH zu-my+jfVyJ%CdknbX>oopjKStnk$VVR01yu(+r=Q^1lqPG_Zylwt+9f$ZC9!zye@v zTOrCMYwEnnv%J8YvZCN`@WwPN^P+6>G>g;B^?g6$N2f*IxQ^wxc@$s(hr_|JHk;MW zvuDq~fA;L==4Q1wcKq6GqqJz63Y$}69C$hhs-z(HJlDr&x(+73J{)%2-DZD#bBpCq zi;P1TRhlOFHqOgDh1e7szKN1JO|r_s*M7I#8@>a-u-{`WVT8|s6eZZvC{(Y{)VCr} zf`Hqaq?Dto#Iw05DaVtwOe>h|{L=6iho7ySEO`RbR*alPIXL%u;w!5|?BJO%`q)q7)w4+TyihzQ<|j-Ilv-(9r#5!w?k zo=RSAv9htWoXU+z_rC#m%U=;kUM1Do6XK@mBAolT|K=PEkEYYQJ%P1e~By z&$ukXhYCHUa?aX0>i9rN<#&`@RUw9s94hT6=_mLI9VzHANd*&+v4e_3ba1eQGZ!5? zEYT3>qI?9skWem#f3Nh!FM9459Ze|LqT(W{=d8Sm_EGBND(!rQ4ms5Pmgq#yUioFd zOb1|kC@Kh2u3mkd`lO2v5tLt6zWCAIt9`nts6)pymd zH2R0j<8}C?eZAg3^#bi7l^+*Mc+}6A0bcYbUL!(zjSDY&`J~zoy`Wl_RJeJKM0G%= z){omO)rYFp6e{#n?)w^w3BAf{X{3%>buc29m{(p`Oi7;(OPBCZN6u=^RQw>9?> zBCm0=yv9^ZysVZ%NF6g?w1B8!Uo2s|(D5z9G`(U{YT4I2Ep^bP(%$ zHgE$~T&vcYE2M-&Ewnm$ENY;HL51C%wGNK;e&|qM$9igW7ek@M{c=4HTwb3RRP0#2 zJ}v0^Uo}f;E!KjsOr;vVipABCw6)?3h5l`|NcQslYhb(t%=##F5s&6)(IdSxzd8Rb zhp_h_f7C$v$J?hLsn_fA@bh^35!J_zKk^CZA1w-6FrRSxQLF#{qtD~nhl?m)AAR0E z_b88{Y^_!{N|&-M;;n;^_8a;I%fUyjV)b}he&gIDKYiv|jy!tOeAXK$p0|%Y$^bkb z$D}@rYkgQwJMTU0Xosm*=yScLK3Fc^@*BEKy#n9LPri1O@(n+!t?N^rqDwM59#@s4Uz~v!F@5i$W~w!C5uHkJskWvnrqg$K zQfv4!Ms0T0-e>_(JF8c7F_KGMsqBn43`+2|57K7|H4XI?wK@9YaJjy#w24tyHR^H7 zeQB3`-3vVn<;NBeB$uULt~)Q+sj3I5{Z^77^bMEZw@L@9OQ@y;jYZC{mqyEZK`D}w z&qapha{HtQy3A1f39(o~C8I*kMH>R`)s}lbxy12uxpKQ)mSw*>9R1nLFZ8M`Yk#Sh zOWei&%H>BwU&USY1)ugiiMJ^@R!Ax z=#5!KZVAAYuULGHx(U|iN0|go9jgp7x{auX(<-Y9lT4)&+ zS6!;KAN}$>4)J!-rp@%%$86v5V&koVt$O=v<8vZ5`JRYPz7?{4Bw||})kiKhzIntZ zb*O%M9kYqQPRw>SX}@dCrhV#PH)i`p$o3eqDT{k~G!0TmW|bPN(B|o)FQ>%f`L&8% zZTWKDu$=sb{zRz{ri;b<2^Fm*IsrSg`UO@R}rM+UgM_b|_u}oVB zVwHCA;&PQ@@o2CwS2ui(Myf?@mMqwEg{7oWhl@JgsPrGoBYwC0?%A_vxBHFyy17|x zH%5}iaTKRf7=&3a1=BoLGqfU4!sB7L+nAnTwJIMX@+?lusvo97h+2KMvTd7T?At-q zd7ikAW0}We5X7>PV?WQ8=em|@9_=8g@zPEXUEjaxWIK1Kt`%L~wQW_FrRRC>ddBX~Ms6H<-xY50XMkJbF%(#Mm1~nq_6v z3B0ZPVJPyVxVyu8HL@zAWWRSkKZ&9^aNOF9l{t?c@y$g8^T z+A2%a@`x{;$1AE@)Do|)t1Jrw|FB-KE&CAIw#}T-;ed6$z1?iKOa(+Y4RWJZx4s>!XR0LH0a{m_wHcYHdeM2%*{5EIjY#%ZB}^f%?+__jk=B)7K4IaG58ytwTh5wu8!PJ{) z;MJ>@X?Y1I9>s|p`u4%tZ1=|_-g7j$j>ltCrxC`mH8!{E^{ee_%~{;8cB_pOW0kUs zX+eIK)jSV*UZkmG5z;rs-S!TBKQ;xJL}&=5~FRn z6k!xyQ!y#sH~5nG(1RjN^DM*guq5uzSTRM1FYKK`v4+rKn%FL^p>_N0nasAy{d%VMAs#dlQ3?A01okr2-d0m&o(008PX#nB%=6Q~@?6^A|+FFcl-&OL(d1xBu zbNlvmlI(?Jz`e3&sLcB z2IAtEHItvU5LuXpK^?<39i1>P>cDlAOmtn}bp!>#s7QfD>X9o7?XpF}LfrvXZ+Ugcc83L!?aG+Vj~fItG~gLlDME?1!!!*(MeEc57jz_#l1; z6?nZlK&(tHoY0XqM@QR+ao#dr&ylXS`~C7+J44wgSk*9xIl<0s;P^JmdT>HYoS%Jv zqlR?5SsO=A%XIjm_&YxInKCrbxEL#CzqkP3fB*f>Gvx~Qd>^dQGyG&@98EuOAq%2w zyDr9dVISJz)DOem)Cdv79hm$50p<$+7CHk*BigYW253Dz0ls5nN^?G?lSr$NH%@q^~EX}cFN1wB4PLN^Ibfvunq zf*$xq&1d_b=R=X|URY3;Du>a$e=+<3TQ#4bpVc%Gp>*xkb=`A>7DZddvaaXZG6|(f z0_uNsJWzJmei$G+F%bd5Xg2ey$NJ3*rvd+%rm-J*;oO|0gl(9Het4K+Hk#%Edw}St z#CYZ(&e)XxxxBxd@8pZBAjD^V^9%w;(SpIZ-GC5|C`B-2TV9qFafrt|7`_#XVQvXY z5uz*``5Z&<27D4X93M9J_h*T{x|?R~D*}YL!|u*=cR&1jYy^a29I@4WT!4kI^Vl@w zz(|v<&OG>C$oL_MlDsaUcr+#Qe8yg%?*}|^ewg57`tA-Z*7j46AnN|y_3b?VFu|KA z*zrM%R-EtVkuM)Rtc~P`%=7sSvkL*no}I?NC-|mG!T=V@3**dJD4)XjoDEC^q9lSp zAm=_5cyl}+5Lp~82a-*fB~QbQKe6HCaDs{av4tp(UDx8n>WX0!%tciqPE_F|razpz z88KMh{@C{Ye4fU>uHaShM>iCZucB)3Ydi%%u` zQale10A8h6nWaaNwxivH3UsA;JggZb(0IZa85UtTab8u>+E!qY6|`ioT2XRh zE&Zlw7$J_QCJ$gFj;8I?Nx&=E2o7YA2+CZouvUmH=x%6a;L8xu;$g&B;a_p;8(877 zP3_Qk;<6bqLcCC7=F>`*ahxX48Lre{mH&rMq zL`xsTzy{+j@KBi}q-z*XApR_?xWEvbULa_$nj(dVg_B0q8sjjC4-i<*szA_!&-DVV zv1uV}^nC0JbhzZ^A<_*nZ_9KT?pk>k`2i#!v0oPF&e1XvV`3=$*F3t2Ep8DG!WhGc z!ONz!Wf`my{KPFZ(+^;El~Jq0C_L<73>f^`p2O&eFgBi=T7t_kti(F5Y0dGH4OBXc zLeI%^XSEKCl%TT)>xLzVeBoqMZ_BE!D|{q24jW*up%6G-Wi|E{6914A%@>Aalhu*G zq1!ObEa7tsgb?^N&phn+79tviV%)m6iGwJfE^Wi$q%MfY!~DY->tG`=k31hongGYC zY3@%@rdhUkqAL+!BvO_N@mEx{y!%s&d6lJAU^!w4h9H)(f@B;}rJBycEHSTH<=*s>DG5kc5nl_N-o3&`OJY*E5M)~y=dFA`h9Mlx!!(|UyBR;9WJRoAdlocq!z`b}G|cmTKMxbUu&n0OYd86@Y3HnFpCR@J#h zJnGm%qEUAhGzP*h&JAYMW>7cm9Rw{1)1oO;z9flZOyOzIGeLz}8q_?ZmT?&Rfx&1; z1wv*_-HaX{<{qC4HEXDg1WGn-f#Xu-M}>Tl{V>8)w-bVIhM#c9(8hw|5&M=61w6!Q z8b(pU9i4fk<_h5t7`~a;jPo?Tz=2`BXSj>e!D}N>+NOD$EA(d+^&?{3mPl@s3^@6I#9y96;pq@31j~>u`2R{?x)VS=PR&_9Ob=M!q3Iy3wtZlvxV9MnVkr=^$Ohgz}!yYoDaKg|5X=;>x4heb8WMoNKKSr{T6 z5M1YZ{;$IsZ;>6gb)@USsXnI3Ji>bUMB^3_g6kx2;ZP;!_@ZwmB1{KL9_ECh)(MWi z)_TPl0YN?-OoY>3=OAuEbU5_tjtAq*3&?Kl7l=V-gnb+?M7k^zfuj^8852eTt&Yjh zwtGfOHyg)|k|;(1QDLFJ>Up|lPcsDT6DyTHazlByxnZA%=3NQ zUh#-cfGTX0ZP4C(Fr`}$hc<$0w=kM53>e~YACdLO3E*VvjN{6(H0x%J9cP7oSt7I> z6w;Yz9@AhHzOk&m<_#=;n{Y_5bqc=YzsYlU&DYI zr}cw?_)%K)(|CfWHwboVe(s>vUD@y=4t5s1h0wO+zTp21nQH~f%@7BMQ86)`!A`f3 zXNg}RP)rlJC5-5}MyQ76*e7j78=6%T%H#)FlC|ymRfSU%qJ{w{a!HMx5wP_WRPkZ% zpvw4~&$2(y^e_@Oc~)Bf=N?w)Jj@8O5Q5KY#B^om0@*?3`>#c*kB7QkEaH8BdeNb5emylmEm5?TM7g; zSZR0_tZA0UVSIoF_(4`GAUHGwB8s@8Ini;^-pX2>UOZsF!>`E18R6lvHqPb4fI zu<>mGDGMwcFTGvQ$E`kgdWfE39eAYO-)woXy;X;7UMa0NCW1y@Hhx#yj^{-7FFzYN z$p2!v=FhK;pWv$v=cWBi6qvt;uR>2_ilOoE1rz@sAm*ncr$2>Me%kCl4*^bGwe=Ak zxE(w16k2@%ZvCBnFBn=U89#)EejCDAEjY~TF-M{SKuAEn|I3$Q7?<3U#!fDYk;hzo^+rB^Nikj%@{jl#SuMY;mMqGGM!P~_mt^IV z5Z1XxodDFh3zdeyg4`F}=@k^H!Ol`YTD?N&rFCLPp*R+(fi6qan<1}Y8-?bm7KDg~ zAuCACg6_~*)deu1ULjxOJ~YlpYCN%)i6s}NanEWSDvi@v05Fxt`|5m@h6d@KTHxS1 zDX7;==bNh~d8{V7tlRPn4XhRmj%0y%2#vDQ;2gP(Xjxh{Z>hmJVi{?*0J$}E;G(PL zG@?bLdNfp8>&B8kQ!up4YnY=}n*|u8Q;V0S469nUZvljAZP72d=ybiVBhvsLy&JkV zZBa~dU5h2Lxd@!N?up93D=dJ9C@eW+ooLlh)Hyi0qEzj+0s_2-+iF;(&K@gyRWDzVXBwimz}hw3>k5WbaDWABt|9RnKc@v)?LqZ8 zaG{Zxmqk{zVW_kbQjp*3HQGQdz^RKiL}JNtd*6*o0k)NtMxuWG1&O;YM=^eeIzrX<61@h$zwR=zX$>MYLP_LM-uPr{&)g+IVCtB?)v0zP?k`X<}%NNw1RBzOtEEvAe z4&8qL;*&@5TY@+7R{4ppKM~ijC7Ahe&BI+n_SA6g{qfoou3Zsy-#%Qc9?^A5PJbJ!J;rHI3Dm?DLi>S8O`l@Kha)xZ`LAVU zQv7uyHVp)OPsAp#=HiQEHa)3#qPCBRZHo%O8MnO~xqVsKR$au0;vk6g=V+FOmtb!^uQ+~aY5`|M`3+wU#j^dAmKe1^^34O25@-e7(j zFXqR4LCD-xL_Q9T0zWYiyS=mD?>7qlu(G1ab3L*aFqdFE96G)~91aRewOR*J7ROPj zpXVL|PCtx@cO!C)sQ}aCj0o}Z@o~I_cU4xyW|q>}uWr>fEH4zl|9-vYRW}}`#~EO5 zUKB+EsX_Q?jDwep5p%CQOwpWqW3L!G_P$5(A@?QCk{ILUkkr2Mi$e%i5*sg5kMe>D zGq#EJ;lIAaYvuq;;krSX_#Od4UT{3_wtHr56r4%Dakt%CMD*d)@L(pmTvtul^|%w5 zBJq^!XIvD5llEIq~T1NYmE}m#PgDrgcfA8u&~@a!k&mga6KZ1 zNN!=fhwXa3IT%<RfjFN;o_(x`0Ry49>MkgaFh^WgxZ>rq$qO`zL9BfLT=N&P0 z0w z4FjTM7_N;?@RBmej#!>$S41n^w^MiOhI5%0)UQNkYoPcMZ_ZcD~;>b z3U!$##8K{u-ZQMACS}aSaGs}rWNLIAWS{5EUnv+d*>AQhOv8i_?^bL3U>?>m4NUEF ziqLRFsZ^LN4fE52dMmqOJ~K}}&i_yrWzB4&2W3yGw;_}8_=G&kqofRinzS`@)0AbB zWJ&63<&T&ZiLo6xKETGOoS@)IK)l#(Q^loMf zXqNY*oQLit`?hP_2Mq6FY=%Y%lE%=S!VVKDyRw~#cwP+{W)9GG%P7HO%(EPS=oD(U z8wNbG>!(gOvaUusGz9);v4tnx-tJcm3J&{w3#(zRZwR1U?blFQ472Q2(iwkr7?T{v zVQxF(o9=(=)UZo`mV1y6t7vh^BA4D$ig+cDFY=^}``LOzOpH6sJjKLG3qd{07><9A~6J zBx&A>uAAGopZn7|Pt$-QJWQCt+&4tL_(4VJOoLHl^yBl9$;2OL+26^T3E^&#Z9jG` zTq{$HqHQEWW6!(pejbQ^BgQlf@t1ylsM}Ko3*m>hQkeaET@mb~pf4>9PaG#AbN#yN zhq)Q%eoR8g*dJ^tHJ;s7Rr7poC+v-EJN%%)U;f*9?k^8mzezsK&(H8ZVQeYP+fg(+ zuP9~Ttu|{Iox>ig3hAoyoXNJ^8)94%3fwrf1SB-=+!8!j!AC?`s3?VS20>=qL<}i> z(tY3e7-tm63>=P3jYUx}@6XdT%?h8`%V`*}RzzVHMI7zI7;0Vi{g9F!>r9Lqv?Hr% zzcA-8#wN_I?3i(6RxO{2?du>NP2WxDb2p7sTM&6p07eq0#Se2=akYt!D}v!NUG2Ki`VABbvV@Uh(1ei`#Nc7u$NRY%JK}$ad8lLo z*L@2kk)|nhIxd@5lvS%D2GfpXMbKop6}hhp)-+%k35K^f=+R>0r3giXrD}8R=|oU; zHMgRNJHY&isOzw3@-&U@^Y#v_*~{)UOqe!!`hqE*=TB5mZ|iNXM_X$i!^4?6;8 z=2Fbl+@G1+KTmxRIhvHXbfOky^1=$S(Bxntc*62k1V_U1pCH@wun-NKJ|I8-2d zjib1ME&lT$CrP{nwzNCX_cLKG*wa=ta1&9`29Alq#&n$HdZkj(kS!GkM{W`)=59w6 zqIujY5DCnulg5g&Ou=5seb?l9-8CJiEl({&M4z*OluTHG#zn*jcfr~j#16Zq)P;VP zIRBPV#t!Qo#ryRJr;5$mIGDkl#H?A_?%~7W#cYcKNDy>=FCb0c0X`f%WVvw~rx_Ny z`*E09g}?%*Oq0pkGiS3u9vPYDjGhWbXIGQb&W3(t;lsdn7_{#QcxMd^jyqTi=*fX; z{Nn+!N~NPb1l6LZ)1Aj*f^V8978J~5i@%7LLuepZGb^dO4nCAF8G?h2AMsro#RI;B zYf6$WZN-XwXoMW@5cNTRA<|U`6{~Cbe#D_$7B4vnGKsp$a`=Y6uSM6NhQA-~#`aF0 z`~L3k#T_xae|q?@cRg#gQc}mo@u^0vFe~KpNbw(9G0%BcR!JsGkyk{N^%LX(Z@sWo zML^6HYaQ{ADYT}&+|6Cbpf>e`I4*u@8j+VC0&y%Qt3{x{fpa`4`qeNWON2wBt*|`( zY3hfPNE|6>5}J8{VI~D#oCIarH1O_ch8n$WL{%tL&@0?;#u!&I35x1& zAUX%ej=(MaAmOp-z{-IQj+4fEZM%_^)-bm4OLYa4Q4b8j;bC3B=rG8mc{uV^;SeI( z!qJ@Q$eR@B2S-K6L6Tvyk}&q==`<7hjAM9rfj&q?1x4QVGt0|L2t1B3P_^tljl@E> za>A(3^r2_&+CBe<|IVjQo?))e@UK7IkNoNVG(VruJhPn%{=;;8WzJx}PYtxii>geW z6MPGDZ1a=^`$V|BtV%?XGD>++^a6zUEQ>lgal*6H7TWJbdBea$C~R|G5Kd$4H9+>} z*7ph`fK%UBg%GN0;^uaPXaK8mdfv88b0_;6;~(3inOR=&&|MIK!=n)T43{khYocKL z)G=#^N5Cdv_l?~Fh8@FZl!UVlW8!DPGM$=7IR#JhQ2F*F@H6Gc7J(k zytKRsV&uFu!e7n6`1R*kp5vR5^^5I&kV@~H&sLG*4QE zZ$w*YdA<`7VB>zbg9WD>Mz$%dVOE|)SCJ)VL{SF2Rd8x#A(oL{+0bmv*ldV8<&MNaY-orhW=5?eatNBM$ABkn!La)hk@%{zW zN0nBKC6_3^j{E4cFsq0wPf?}!^zuc#M>=2o7W2{5h>xUrolq4|BR*0(bR{`hvbc-D zUai?{=A#c%A3bs(y+M7X^K;eba35XSk1k(CeI$QB>Z5m=k1F{j=A&xK+p9$DGMD$U z9;qGG1A02`(Uo#Y>&3^Ij~?S9{rZ}NdDohM_0AF!hYT&Jz9{w3%ch$q(?ez z(RurehDa^Z%w+*a>mXvW-Am^7i(@zy9ep5ttG2(mNL!xiPjP#x`PAoX_o^IRTAo~ls0QIsUN22S&2R`HUUg*r#p=xx{nV0SPr_BpVuFiSjMA7S8Q z&#LaeZTb_-EgRX7<9Qmod6s?Oc71;uWzQ-|Qu!2lp5X~w({#Mt&(p%+^NOPvOj~a@ zYm98md)57ZXW(ROI7yM0MVh88*y{1-R1V!Zmsu4anM{lVmC0nwj!E1X8K;r)PB-?{ zHN9x(VeaR6Nx3IYGygEnS)Oh%)Ai2awa>=3!#K+drXkpFB3CUL8j0^zVcGiBN^zDm zSCVyrcv+f7aXUNC;cz@Mr;w^Un;=P>g1iMs(_IR*ni11xDP@yjvB}YLF!%eTW%3SY zb91{RDbdp}XTnXCE zCW;^v)7aL&Te+_2An+$ut5!=BOf%)=!pQ^sppxBd!#J{@%VUN-No=mi@xbfr)icHZaeKREx>%JZ zv!aX%NZ#!7F5V16azI$Nb!4)6z25Cs>zyj`dPY)!jlmzRH*CcbrA$^bS5Bb7t*(5# zxjCAZAVnzmpBw;U+B#iiS)kB5_`DtDd!lAfs z*6YwCnh4g0z>T#sC>Z3;E#%ShVP!B0({jx{CW=oWsa8T;#hxaf4}-<3$so)M)$65Z z{?2o0i8hKqM^m3z$U+2=nm?4T1`)PAmHLrol^6 zXdJUoYYWP0?GBh1;UQ6!54C73Swf=lvxxP;Nluqg<}AI8u}&E*3hQ%y44By>10CvlLU$cTy*Cei1TMLRz7y@KzgK@er-MhnPYlUgx zd-Dt}hY;@#*Y#kET+23yw@@{ig#WPKIibnNq`3ajE!Nb#q}JIQCN@gJzlNgG^=Yy#s%kG-D5+ zhlML@SJgwq0JVZ#TBP)$-I=>tHlk@R^Kg2Y=YDK@e8?<_iKf|Urm;O#w zOVitSr}6GY&Y*$ZG~5od1)SlJ$I~S5&ckpShiO)r2}C1uKG6=0c;p>-q^u$2Nh8Tm zb2O;IJ6CawAqZ+!Xflt}H1_f|oLZ5>){|MJsS5TeN@&E(ddNsU7nue`<_N8)2!-U- z!_$H)3E^+{v@Z71^k~5Iy40i+Ow7Vd*2MjZ7d<56VU}>6-SE6GFs`zOeG1@b2H8~P zHrrAa)?vaN8)PU>%Hdw*h-HeZ>hQ(~>@mhIo4)TJh$4VvLdcUU!n7Us(J)A)WqTQ$ zZbcsaB-8H+S0XK{LXNE*lj7btewLAQRnNb zsY%LGt7u4IQX}*4?Wu2)lME1~)US)5ng`14!?YtamU|8SGA4 zG%a@uAO1r>-FGc)Qk?dpOrWaDG&e26ucn>4`Ts>83hWG4YCcV81Y-BHK?HP1wy4tt zQ`Yxcz-~J5CaQ+iSPM%*3{XdeLgPAO*W}~cRS1km0EexdV z5@)9pUKq)i$-1p$*{+vYMJ7aDjx~9S&ZOtM8&6CEws=_4ov1|h5`b7hbbOc3Euf5y_bm?s?) zQ}U+?!R>_Qg;bGo3gXzs-oZMoc6;I}_W|NCL=e6as342p`QVTyq9@NBK2sVmXKr?n@H^u!$XFkr`ERp)*p_XoZhWwjS*eoaKHTO-t-MkpY}HYbw+ z>A7eVL|Ijcxryo-#uNV-sqqlywmbLj-;bB`_yU6;i3i0#qy-F12jRI_^oB>K6ZbHr zO!hm7^0Q&=VAByxpZl&w=$1o9$qXn;-IgqA6`|9>Q%6Mf3RSvR#sNctrN$|T1_w5m zx>St~k&J@mRfKVo=d8V(I;@VY;5mcU?RVuX$9on0>bi#Wi}j1){^I;>FcoV23~PcI z&2nD-^4Sf>o?2r6{^Z>^O2oOo9jH89^pVVD_|!u8PiH6JZ7}wPb^T5!6m%`l8!5ui zFR9nnUUEqpEa}2)#nSbn>7omFKQB|bWt9!s`HDknyMwO^wpP5;-i^EspWmS0jjQ7O&_{wsy=wnR4s)= z`j%#^nl(-7cMCc`C58(w(wfw^H#P{TuYO_CSNE&l`d3; zpZezeb;3{=dR9x?Wl^*xeIp(h^uq~5@y!#4@_O0-H`OWSvP?=Y>B4WEE&QTnp>iU+ zF6zU{LUCP@W!2x;CFP>)KE?YJh1Wdcn~6fbQ}4+W>V5gTG~pkaCH&Gf;Z^G1NfqkH zR*z-ok9j-s%`%1WBnn?=3YDRe{~2?I)m0y=1$l8<5{1?8kSSbj-Q}{#=;x#gt0i$K z-pCc|Na}AVSNJyGOWP>@^skQNs%splW%-K(xz};r`@=Z#%|Txu597pVL~+_6XnvgP z3*)%=WD6I6QT-=L7QPm&e`vMtl%`z<$YnxXAT z`dYZ=M)g1-oBIuk`_?;xnU9WTItSHjf|uH=QqeGMpWM;vj-<$0X?i>udtJT5B+hM` zS*EEvb~wi%YYN`yB}tn2VOXR^caNdGIQ9L|x9z~@@6+>^cXOg*HIxwegltG7-;bl5 zxB5}!J8qVfY@8LEDp``(B@y6wS5;&w?+C-JY)DesV4mt?cOWGt69)mWY?CaFJuhax ztzT4m&FdrHP?2I9pUz4HazS>}jKyP)mzUtO%^RJHb-ew4zw=yXFdI2{yjU5|J#Sh1 zf%K+h*FUs9d7eAbRiaGOvXN!Mk7u`f1)ra)in$Wra)%@o<^%}1XNgP@vOtmDNQ^ki z%Ay%+jM~`kR5yyv#&wv};H_5~lMB@M)3kvgl@*q#l69S_GSqJB?-INKdqR@a^^MB; z-QL_D4tR`<4|9Tu|J!XgmUCodjQxJIxm5)GtGubOucGPtb|Ay|F!Z7okfW*=Vrpw4 z?__&oy-!hyGE3}yM{(ippot-cjvbaWyJDnu( zp&<@a@oC1qL(F7TqOJy$)V7(D&iF}@N-3rpK0}pp*fv|chklrQ z?mXjHaTMcMe0Q!?sO0OJ9Z`(QDL#tSysTjL{D4%dAqF41E^qH0@&-Vk$;_HFuf@A= zD0rBV0GBx;;tV2;H%>fOt&Bf zNx&=N8gEJSqN!>%TR)8RG%l|vu)!RUJ*=Q8ARF~0#Q>9( zRIGZ6Gp6M*+_ibwZnp;2Y==QGA>$v`Y|%q7!R-yHqL21=Yl_Boy}3(ZIq@UY58^E4 zwR256T-TrwWw7s&`zlybJLr(7e)niHEP^KmYTBTSA7z9=whn^dG2V+ML4wWChHOzgm zk4O;#g>YRP*4hinL=r^v%oI$Tn7h5Gn-cqG+ebI2Q7g|d|D7D0rXTC34hdyyVGCnO z?hCdfd6?&!G`?hAh(nVdL*ir}&hk8V4HO8PTbHaeOp<1PV3{1VuN_?IFtUFHdrF8F znpAMT$z1E=863}L@%p6kMkKGh^9PKkcBL(DiB1 zM405PRds#Wfej!~X?;ABfU_w9NCdza)n!-cNx5K@YgyG4MSlJpy_!CJkh z$f`05$kRbQjg6IxVQX3HhFDO}4?RQx0@n}oIZ02R|e|@AMXej(^X28 z9rhE`ZEtp4OA+W~PGTQTQ?&3_VNoP0>%c{ZFfmv8N~l|yu@HWmn=*u_w*zdg57S>D zv zRgQ&EeD3*?0nrf;vi*wX@>MlW!+FN&$br$!r%|?&opzoN@;QzfU3X$_ct4$CPWglO zJe^q@J8kKfpLuG&3USF^9}H0o!X7 zvLy~qszy=DBoV2IFe_C$>nEA#W8(dp-GVTtu9x>bqe#qQg1)sdWo%+{P|(Z$YJD)+ zbu0Egljy-4!qse7p$*}8VhVy|9j!oFkcGC!=EnI1(GU;H@MD50D(Vh;TZJAD0J=1s zZQ)j|2>q@MeUlx$9D2RbaGjrQBYcT(9XoQYFtT3$WV>IUjQm!`jJ6r6B&uZwAI_pW ze(Z&xuJ8QJB=Q$mdp>1lzq>4{*QILaqHi)@CtklK^D5pg)O;iNT3sG9jY2Lr1`DM9 z@v`HxFrK|G>{6F}QeS$?*W`veX{>LOWK~_6&90Q3IxDnL_$`-0%WdLvX|&v>U9NYJ znkDa|VeboVo&IdSCd+lV(6>g*C8N-lt;?m6N^$6Gk?Re)PWPxAnk%)Up8u6rZh3{e z_z_D|X!%fm%cnW_LZnQ6tc?xy=efb>P*GgZZEg2S_^tjTn ziY0gUF7xZxQ@@J;6x6ReQTLiCQ)l4B_3_sm`%6`QLkid>L8Va(`s1!Fi(;Oi1-6B1HbS zc)TLv@Oq6y?V+UvS!*;hdeBVzh9NTg3oyYd1m^zEta^2%j6$&yhuwAd? zJkPU&mrCRv8-~7464k5y2RRHl-`|h(c)6P-Z<5${l~){v&AKrwO{aDsFQ=as30pU} zP1WGUJ`Fq7UUa+Lo2jDD>-x5vaa>nf&X)IRn9pW&SZ}sR>tJ9)E$`CG5xTKl29nvQ8BP`qT9WQ4(fc@48MVC#A@311>-7J~H7;4e+TAk~{3n3>K zxk@SJ>ccAD>#5vj7#>(Zaq~=fD7;;*cSpt9?D|2Frfjg@)|f=Y9{WW+@B`-d^}C_!>Rjk{pEoysi%I-^P_Rg>aF#L%$ACEYi7Midb;?e7A@YO zGAF&p6b-{Z9t}I-T^O(FvVvK%I3>TK7oOR~G#0XFd%jkZ<~N5NFn<*oiX+ff4dZv% zGS`7D#vw1n(=1iRL9xn69Iys#*2|n*6i3X`R_xKo)_fJ_7-y`LBON1t+Q>#_VcFHV z>07q96^$50FXpDs@k+d>QmJY-s4Xkj3XoNl8NZMvmLyXX*aenb6*b;Hv`iGWahCG7 zNR>tIc8+^E`0PT+TqJLVeNWMUGdsN7>`hF_z|4z^{T*$lB4c&)6$A+z?^Y$7TL!#b zvMjB~R*?99n5E3Qkl5Sj&8P3VyyWE-*V0381AW`dDE zlW|fOEJ0v0!g0*~c59gGM(bF`?6QiLV+{fcmJM^WUTst|)^@`%<_HVdrfp%xwsG)7 zRollhId-{JOv5V@9vWoHU6WXpKiFud#kERdD+B^82rCMYj;n9eST&(o!g(hS%XPzC zn&FY@JPb=Rb+*I|kbSdd+Pa6jl}*)&hnn4>MPr-BmN|HQ7>oOq)g@8(VIM?fF3+*D zO*?lp%W~M}RFDyp{exLeQ?R8rdEDBrt=nlFyJ>7rZ2UZS73u4Er|mGqYadOFi?yji z4dHzld%Oh0VYx3{DvTl9a!)Ybc~M2)hHV}H%YXU)`)6y*%DXWq$|8?gY)xZRKoyd* zE9bUk_uZ7Vk!GBc%6g;9sMojZLVvT`vcWX77bWkqVbRist=vhHsHS!A8%Vn#i#AIJ z#|B#tLjf(qrl^Yc&AM(>?oCc(r}N_xq=ldf{3ptsDRRYLn0n2r&c)bJ$fJD#OU+tS zx&|}JQ>JKw3_fOW*J6?*Sr?lY`ZKgMGizfz-}QHW|9s%(^xSu+UbOR{YkHZwWvx}m z%X4TTO%A^d#mK38ly8Yq$;_0JWEmXlBsi)Lx^&rxgQLi4+d7Jv886DRWh3!2 z%VOPQohc7iq|M#AXR3xJZRAKN=`{BIUb5(Gz`XH`5ITyjsUBM1miH{EYh@U^HRL;F z-W|@Li4lw*-d@&4*^TUPA2_zMXourrw^6mqx0@Y17pPP~$x6<)!-kOO+JT_#4a*Ji zCW0)8(;zK>QowDc8H<0Zbi8X<6wnU52WK%%Y_|GJlpc+1>I zF^lT{u`OFKIH(FzkGJ6}hZ6+0;`4<6&uLikRn;viaN$II){Axhc%EOdX*aAT`vRL5 z#08dW17Bm3eR6L)9)|}tKbrVYAwF)_PzKNS%1Q*jU$bK?i;uUgAnTblu-QA*^zJ7i zu))|=m|&ueiolOKUotk((z@(QoH`a$ku`UZ=mD5)q9LFls&)>M3Kx2+tG}Cxfr(8o~|WHY(OdM}g-at)f(l4qw3yb(mBj|D*-qn3O8n2t}%@ zcAjZ8HHM)UB=07n1cR5&mh_r&bh}Ov4XTkAqKWBk-q9#Rvy^zHifNtA)EdW0i*9ap6xKO@(4LOu%kijg-L>trEi*UKyY{m+jrNHRk{e5bmq*I1l zuF5-1n{I-?v20azcUT{z{4{nNHD87>(U4WvaUTyJoH3yZEL?^jj!bloWQd(#uuHZ; zIFW>_mBO^Z>~|fj(zABNKdK-0X&|rd(4L4IknB&*7V3!At3z z<<(C=c|S$Jz6yT*f;O{3@HI)SZ{L+yrL`jaBW$H^7~9dOvsq6}M*aHhtDj%Oh#SE# zFMl=M!28K~>HT6Gj_LerTag?78iuM2P+y-^*JRX3YXCo#icTH;JY-0DAbG(QTb+N0&Rjc%UwA9&HsjmZH zUz@4Vs&vufas_=|Omzt+t82-Nmh);!{4NC*I)kGj=TeK2E)f$;sz3|V^`if>6!Gbo z>jaIyL|byxm&J7G6pqdSfUBaBWa@Iz}vIsN#ALug!<9mAbyOdVJ@S?OC?G()YUZdaHjex_U$y zRPQ1Tep4DG7c-(3N9ZKV$18)R{Qngy!OzU>$t4@BH*hKO7LN#xPcjLLYj*Zql?J^| z>*;N}-kSf8l|j{YR$o*c^et+Gs;4CPmdhXm(F%^ZVia-a7@~;>*%|LYH5^libsl@o#4Kbe->eQhQg=Q(Zo%)LVzcAF1`e ze7x9Oyz!|z>Qbk*ud4ReZxg>mt+&(wLxtj#@^OM14){A2d&{ffXg~aU)!y2w|0k;U zuAW-!eW|X8(IXX0goixJUlq>p&jqMXZl zOifg3jlnXo!7mf+tTkjp_WPTgl}akbSuHwMyds-+7E{AYPnJj-tU%aoOfz)CAWZAL zDyy~?%}L5uh_>%rR%JB}DF8?Oh&5)t93-h2&vVzcvSV_ZX?J#uYsPMDySk`aA={aG zs78o7vaRiWdrNAw?QP^I-H_)wD+e1cMP63DsvPpx>(yqv+oyRJ$DYrgs=mp7m_;c? z-;w#OpZh82E&JTIO~*pBcFYSoF<;z}SF(s%?Ng;0>kR^e4s_Gf{XQ(x)ZHu6)iv{Q zn=tC`SuHAxvikFVH=O#rEKB{nxj#=MKW@Bh1XHJqKXvb=@rEh8TVA@`wi73UUGh5H zG%dCOHCd0TKJb>auxyvN=cVsB%nesn#~djE{=-8*{V+{~oH}*`tLmIJK3GIH!+aRW zv6pisPjst3CWWi2o$lE`vAc)Tj%`kwW>uRr$PxMrt<0gxLm9FS9&gFZxv5zV zdORM?{qeZDxxHB*9nZraxsK_$8_p8zstP&D>$+QQ9oh;bN?4-kR8<81D92VXSyDCZ zfkzX?WNFpbRp5EnZnt+Fyq5&XhRH75qvR_p%m z7}l_0r>?nc+A<}2hvtE43e1NE=PN8Vd4bvgjv34Vs@1U8rp6M^15-FNYk!)iDVw$< zsd1Vr*bub344HljvI1Hx#fzbv$J1~J4R4#%d`~LGeqdg3lINiz4`h4Su;7-pt+o&A z5^l>ZV5{J^Qr$*VOueegEKXQ~52IQ`o+EaHEpp;cEV8HXR8jIOqM3w#r=<|ku&)0h zF%P@rVTTo9+4+j}$+x%PKRaM^*`(SZkE;0C4e$)1Oeze{>BKIam}ONKDbwV-f%$4p zyN2D{?hLM_=ljgMvUC_SpEE}or`huv_OgeVu_fR>kh3%yPEn zw)!8rlXctwX&TPTLa~GK%x=0}s|ta0S}D;$Z2ZJlIE=G+#N_o{ZB*QPV!1LLbS+)uDx3*@2}TzS3!smShI?jgw^<=h!#|9(VoE0a{&>#>Vb>4yi*Y_Zr(?Qf`%!|ks1eh{ct5jaFA4ecI?qY% zN?mQ)(eQ*<&7y!iZt}u0vD!2#EZY`s)ksP6On4m&z_XGrG;9eRIL&wRB*zK1kjxsU zo0NiN>VYV$BA4CNN(m)vp$ZK?f(3sMWPa}N6xbs1_T0}ED@=>j&6g#0X;JmxSyQ=>qF!^|i_t-~E` z1H4F9X0*625mFiXaPNlLgl%W~eaD9BDxVA!NM?f|h+)HKH?SOP5~-_`gsF2uYdymI zx0oZWct18pPS?G0W6h+%1U-T-0q-s$U{OGNShuR!ry16=gU}KVW*hsE=tR-6G;@@9 zQnV%8B)8a^x>^z))C4H6gje(<}~Dr&9!dp0CR69UlWEwCR?VBl|GIh6Ze8soE8=#{YrA zn<}2iPujAC(NTQixuWHuw|3nPqGvvZ=mp{jj-D0f8TQ1B(j+Qtyog|pEUSpl6UtX2 zLLY>H>u|j&D`lF5?qQ1{8|I1{(TTqCJaRS^o|UC}+g8M#2}Hd`dFuO#-W0(hQLsWP zEFivo1S!^G&+a3eon^uUG_ZjgyDKZ4WTTiUurA#RvD^IjvhIjj;^!P!YgVo%a5jw` zUo=qVwi|yW>vT_&Xhz5+Z8#dRMy9ddnQjUiVtc{~-yD6fFp?|=+1K#V$ zx&J>NppPxlEd^a%i8w?ZK6(b7Q53qA@t7@rNwjVr2$j9L$*Z9wmK3rARXt!&{E%Ko z5q=}et|Kx>kbc=|+ViLh8qQsR>RZvBVFM7f!=FnT9bljhZeX0i-eEqXW7#_WVa&$H z&`1l;e!EgkL(eGky6aq2y7iJS34+@ zBZvoSdcue;R0Ml)H;QQ{qn<$l`RD#{STXz}h9>kvYlZbojzk?AI~;6jY9TeIb@U;C z#sTin&}}hrPO|I*0VyGGmH3OIte6MraZ$sF9o7fSPGfeC4wICBc9>*_V@;8fb-S_)(MISD3|9DZfd^)0Nxu9I&4_{ao zy=2#)jwyPC2E2nQk~*LBeo&FlN{SB`MC+7@(Nn-gzeN+t55kGA z<^0QK_cuio>3r#jkVH=f5-s=CZ()fl`G_Ub3#Tu;zbTwZVT z&Psk9PE=hb={IO1of1(A4sq3|r{am0ysOH9UelUaNRha_2`SQ#)$5|ud!LCXk{Yh? z2qzLBLKCU1#=<=PDLBzJr}zXs(NgSx(LAjxyYyjP(US1}3Sf~~fJL8+ELzOU)yh2? zSfsNya!I9p5L)zzEz%Gl`8K*pEvS5LT9@6|kQ-fPtg~U_n!4BUjjK}W^qJ6Doa%Ah zDwVzDd$gg_zGm6?E22j%>F$eo&G&l+SuC$xQhUk`Ea@H%d(mECLA5Lyv};mHFWE9V z%^`BRrqC8piIxGK>RYl$l^R!dwZ&2_lD(v{G|*sSFS#0Vp^cx;wCfMi5C);AFSW5z zDZtAWI3ynPu9pQeaZMjJrWmxV=U!I(&mN018);Ib&>rCN;sWkJfQ4Z327gig>ZqqV>}#G_AMkeyn3F7leQ zR_WCx{e0Ciy(yQ)7i*n*L@sIVk=M;%e!j?4b;So=mT=~cTw?W@PLx-OgLdI><`ebi zREz0;?OVm8{}kfw%%WH_)k`>W)wKmHr7;;&W2G+IJLn|8lF6#NikFaIzy_jywq6vS zNxnW{31zM*s!FFwzmCvG%ByYqqR>s_!Q~az@M?wik7#gl zMT38C^tKq~-vtS-(R5!OyvYTzxB#s_4+^e9Oz#ihmc?EmsLPstDvA?})lqA>#Bmz; z^9Ckdd>9n|y9IJziVJ^oAooTb_f{BJE!eOH)LktwtfvKW)zy@X_khCRj^K2(@)jyw zd=)DE|yCIyAR~+g`BRFx@ zfVU&Kw*xp06MI?|S6!~qu1Xt3v4CN<4f|*mS7`%qy?oGM!8f8f@n#gKy}t%dS6BG$ z?-R#~uMXrESE?YBk9R0bB)7zHPY&dkUHsxe?kRDcuEBa=ASXT$$X(+&p)Ktjf!t-e zx%qGu_ih*`7XagD#c@{%=9__>wj`A{eDC1H-i_iu6~`^tXzvN+WFz+=AZMjAa)|la(pa%@)jAh zhAf&7!rgA?dLbMAGKrHEWthZ)nYzc_!FI{{Kq{96BWH7QLXZx;Fi-dsmFss|0dIRQ z-k(HdyV>2|t~R@!V;l}?;;~t->$;rAYGrR!4vMw#p3kz}oQc{nN@S&&i#_7mj%1B^ z_KdU?mg^PdNcWi3;36?cq}q3<1tDZj%gke4Rpd{w9TsM9{eT!H1Y8C>Ut!rw$q#E}>wCV2ei>;mYC$f4G99qLbUO$p z4YMo`0z-X?T4U+t3+z=$>ijq%$FyTxPLPVRC(%oskp0GE>v!8?wq(0y7x&xM-t{(= z4Twx!VxUvkk6A)U6!xvE*q)ov#5ik3J4`<)fLl9sZ7*x)ji<6_cT=*a_~ucyB)Mf$ zZxeEjUB}(;$zifPGT+s)h40W-HA(ZUvLr=z%DgKXU`p9_ke7^&2I^Xb5JYkj;IG)O z!+y6j*p!4x4;#xJg|>S4r1KZkeRqu86wO{$Sw^l&Lq@6+DCW_Jqzf?3%X_6B5*-JJn!GlS{L*}NCL?sZv z!%C5wuh;nug>JeD+sd?B%@lslUM#WiJEpZagG@Hqkg&|stf;H9sTF&DQSJwbqT^qYJok} z!#*4~6zIb-EyyD9j5Gin)A9VEU<-q;8rp<8sV4H1v?v=AJV}hKvJb|Qq)O}Up2_%x zEjnDAOQYCb@SJDc9lIS9AA2UJ2us_2|De;VFiTrvfHrG`iO5Q^MoHB;neYnvVm`}& z&B1+3WuSK03p{&Wq!5C(Bk~qDL$dpCH%Qr&J;7CdtQ+Bbp0#pFl|}XniA}j5Cy8%r z$a>MWCppb{)6kITy%Bv!(19GfG>NDqT|4%}fZy!4TRUS1fwq~tSyJ4qrtjGpoAf%W zEepGl?98K?kW!_nRjY16zIHSRfjNeAg+g9F&=47&uUQ7cF?$q%Z!id;X9$8PM} zmhHFwxTOrhZgdq}V|Q|BJ2{aei>6^7x;zN-xrNxW)ky(cd4#|pEZ0q`U@bAaUELA7 zL@;Zo`fE?KpbfH}qoJBU9PBu6YDLrH3ha^ZI6jduakyDubBo&}^WABd#11pHw$0>s znm15AjJ>2Gz_OAH=w_pUFng*QmSxMFr0o@{4*`NGljq2`Y{v?)<5r%r4Fv^^6kJT{ zx(Xy^IazEd1H=B&G-^9d#K30r5GIP%db1%AX%jbaNW(l#vmDL}{X+(qnXuY23r_jXDSx_Z-fX~-4TmC=!+KaTN>o6Y9nYy#i$JnTPg zP3UvpheIjv=Yd_>h3IlN;DO;RlhE954Fz6~V*)+787_RB>ZDTF10e@xoy=imgl=55 zf)Dl}@ld8H7g-E@m_}`@nm0(|poa5!*Fm!3%g#hiL)Q)Lpw*J=XB-DY8({o@yqo3oj{1@3RXvg(CS&}-wk(!w znt2IT#1@em%h@hK6*jv~0VSP^JF5a&SN4h)v+ zR5x{&xz?WO_YI6^UJ`c#Z-$R1w2~`MFW)H&|AAokE-tZCQ9Lu%FSsuqDfanvLOoe# z&=MmM2ca4G##&p9%?{=nA4npvz;#H%LOgiavNQSIK&ZNLZs%AFmsWo z8SQ-ysS6{UI3W_cY+Zx4`)12HDyW9j*sng7`J8FR-BWjjXuzE%xiBLc5U0PkLGdbl1{}7=9!4vh;&!S9etn? zYA?DG`Fkl9M4m`lcJ&P9An6m?zaqKaVn86zSd zk}es5*vMmdJZO`Jpu_dqQU!Y5G}vt-kXi*2+o{k%mvWF4tLl3Ap97`_OHh}ITN6|p zgjjep1ko2TG2ga6>&K4ah$m1G0e@tz(K|H4Hlt`3pIf*f0n*4mO?*c~GYb#Y%TnJfBqaTZHEa z3qh@o!y{Cg%i<$UX0H%TbRY|rgyQs)^jkP>HEcyxx;WmMMcNPD12z6mej;Wo3Sf#5dU#Nm{lTP~x_(YM%raHIvV(*; zjJes2>&TOeAEl&o3&W|u>;HoBo!bs(lzo5{WcvWiaZk4Z|>yhL%Pwz5BwVJq^E z&R!6Dk01vNktH@x8&0yce&l}Us%4{#{SP@;EFNOVEQMaf-m2;mC8DcMlw>@Jw}dKF zA`kF$_XxKWgkgDc?)qVB7=Iwj#){|`hqvrvv(@ytG#n25&1{tM;IGx+Hs*f4;XOmd zA`pW5)LBsWchi|nf9LshMu2lMC>~6PDXgR_HLL?WJN_x(IHHqrV)-TS13?| z`{%Jc4QU+zz3Kusb#kVRAf^~*s7n^-r}>Qc&-0I}5l=sfeuhs&90$YIFrw?Qkay$Q z&!VSGf_7p40V2~VpiDV#fb#~(^R1kbB8raV4IS8#937K-KlLbi4l=p*TS68 zOe<%njJ;ipK`e8%`5r+voT5{JbrAYQ%>n zgS`KT3vumdxZ#ntcpYPeB;M=5n>4pkfxx06m7ZtY6ab#tb_qNSKBqX4(9>X$us^I; zr99z7hPh!=q3$HAQ>XCw+trQ$(Jdj9s&$aD*%0Dd2-%P$vMWX26UsQ`332W)YvhtW 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%0D5mxvEd+sZ<5uV*5UssM1-6ugg>Y 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 literal 0 HcmV?d00001 diff --git a/io/fastq/example_test.go b/bio/fastq/example_test.go similarity index 98% rename from io/fastq/example_test.go rename to bio/fastq/example_test.go index 498b1e38..8a007c80 100644 --- a/io/fastq/example_test.go +++ b/bio/fastq/example_test.go @@ -6,7 +6,7 @@ import ( "os" "strings" - "github.com/TimothyStiles/poly/io/fastq" + "github.com/TimothyStiles/poly/bio/fastq" ) //go:embed data/nanosavseq.fastq diff --git a/io/fastq/fastq.go b/bio/fastq/fastq.go similarity index 83% rename from io/fastq/fastq.go rename to bio/fastq/fastq.go index 30ee2ee5..de682597 100644 --- a/io/fastq/fastq.go +++ b/bio/fastq/fastq.go @@ -13,7 +13,6 @@ package fastq import ( "bufio" - "bytes" "compress/gzip" "errors" "fmt" @@ -36,12 +35,6 @@ Keoni ******************************************************************************/ -var ( - gzipReaderFn = gzip.NewReader - openFn = os.Open - buildFn = Build -) - // Fastq is a struct representing a single Fastq file element with an Identifier, its corresponding sequence, its quality score, and any optional pieces of data. type Fastq struct { Identifier string `json:"identifier"` @@ -177,6 +170,13 @@ func (parser *Parser) ParseNext() (Fastq, int64, error) { return Fastq{}, totalRead, fmt.Errorf("empty fastq sequence for %q, got to line %d: %w", seqIdentifier, parser.line, err) } sequence = line[:len(line)-1] // Exclude newline delimiter. + var newSequence []byte + for _, char := range sequence { + newSequence = append(newSequence, char) + if !strings.Contains("ATGCN", string(char)) { + return Fastq{}, totalRead, errors.New("Only letters ATGCN are allowed for DNA/RNA in fastq file. Got letter: " + string(char)) + } + } // skip + _, err = parser.reader.ReadSlice('\n') @@ -206,7 +206,7 @@ func (parser *Parser) ParseNext() (Fastq, int64, error) { Identifier: seqIdentifier, Optionals: optionals, Quality: quality, - Sequence: string(sequence), // Stdlib strings.Builder.String() does this so it *should* be safe. + Sequence: string(newSequence), } // Gotten to this point err is non-nil only in EOF case. // We report this error to note the fastq may be incomplete/corrupt @@ -228,12 +228,12 @@ Start of Read functions // ReadGz reads a gzipped file into an array of Fastq structs. func ReadGz(path string) ([]Fastq, error) { - file, err := openFn(path) + file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() - reader, err := gzipReaderFn(file) + reader, err := gzip.NewReader(file) if err != nil { return nil, err } @@ -243,7 +243,7 @@ func ReadGz(path string) ([]Fastq, error) { // Read reads a file into an array of Fastq structs func Read(path string) ([]Fastq, error) { - file, err := openFn(path) + file, err := os.Open(path) if err != nil { return nil, err } @@ -257,33 +257,74 @@ Start of Write functions ******************************************************************************/ -// Build converts a Fastqs array into a byte array to be written to a file. -func Build(fastqs []Fastq) ([]byte, error) { - var fastqString bytes.Buffer - for _, fastq := range fastqs { - fastqString.WriteString("@") - fastqString.WriteString(fastq.Identifier) - for key, val := range fastq.Optionals { - fastqString.WriteString(" ") - fastqString.WriteString(key) - fastqString.WriteString("=") - fastqString.WriteString(val) +func (fastq *Fastq) Write(w io.Writer) error { + var err error + _, err = w.Write([]byte("@")) + if err != nil { + return err + } + _, err = w.Write([]byte(fastq.Identifier)) + if err != nil { + return err + } + for key, val := range fastq.Optionals { + _, err = w.Write([]byte(" ")) + if err != nil { + return err + } + _, err = w.Write([]byte(key)) + if err != nil { + return err + } + _, err = w.Write([]byte("=")) + if err != nil { + return err + } + _, err = w.Write([]byte(val)) + if err != nil { + return err } - fastqString.WriteString("\n") - - // fastq doesn't limit at 80 characters, since it is - // mainly reading big ole' sequencing files without - // human input. - fastqString.WriteString(fastq.Sequence) - fastqString.WriteString("\n+\n") - fastqString.WriteString(fastq.Quality) - fastqString.WriteString("\n") } - return fastqString.Bytes(), nil + _, err = w.Write([]byte("\n")) + if err != nil { + return err + } + + // fastq doesn't limit at 80 characters, since it is + // mainly reading big ole' sequencing files without + // human input. + _, err = w.Write([]byte(fastq.Sequence)) + if err != nil { + return err + } + _, err = w.Write([]byte("\n+\n")) + if err != nil { + return err + } + _, err = w.Write([]byte(fastq.Quality)) + if err != nil { + return err + } + _, err = w.Write([]byte("\n")) + if err != nil { + return err + } + return nil } // Write writes a fastq array to a file. func Write(fastqs []Fastq, path string) error { - fastqBytes, _ := buildFn(fastqs) // fastq.Build returns only nil errors. - return os.WriteFile(path, fastqBytes, 0644) + file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + return err + } + defer file.Close() + + for _, fastq := range fastqs { + err := fastq.Write(file) + if err != nil { + return err + } + } + return nil } diff --git a/io/fastq/fastq_test.go b/bio/fastq/fastq_test.go similarity index 77% rename from io/fastq/fastq_test.go rename to bio/fastq/fastq_test.go index cc0f4350..d9fd1f40 100644 --- a/io/fastq/fastq_test.go +++ b/bio/fastq/fastq_test.go @@ -1,7 +1,10 @@ package fastq import ( + "errors" + "fmt" "os" + "strings" "testing" ) @@ -64,3 +67,21 @@ func TestParseExceptions(t *testing.T) { testException(t, "data/nanosavseq_noplus.fastq", "no plus EOF") testException(t, "data/nanosavseq_noquality2.fastq", "no quality EOF") } + +func TestGzpOpen(t *testing.T) { + fastqs, err := ReadGz("data/pOpen_v3.fastq.gz") + if err != nil { + t.Errorf("Failed to open pOpen_v3: %s", err) + } + for _, read := range fastqs { + id := read.Identifier + sequence := read.Sequence + quality := read.Quality + for _, char := range sequence { + if !strings.Contains("ATGCYRSWKMBDHVNZ", string(char)) { + fmt.Println(id, sequence, quality) + t.Fatalf("%s", errors.New("Only letters ATUGCYRSWKMBDHVNZ are allowed for DNA/RNA. Got letter: "+string(char))) + } + } + } +} diff --git a/io/genbank/example_test.go b/bio/genbank/example_test.go similarity index 99% rename from io/genbank/example_test.go rename to bio/genbank/example_test.go index 8fd52d0b..82ee5a67 100644 --- a/io/genbank/example_test.go +++ b/bio/genbank/example_test.go @@ -6,7 +6,7 @@ import ( "os" "path/filepath" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" ) // This example shows how to open a genbank file and search for a gene given diff --git a/io/genbank/genbank.go b/bio/genbank/genbank.go similarity index 100% rename from io/genbank/genbank.go rename to bio/genbank/genbank.go diff --git a/io/genbank/genbank_test.go b/bio/genbank/genbank_test.go similarity index 99% rename from io/genbank/genbank_test.go rename to bio/genbank/genbank_test.go index cb88a819..03aab265 100644 --- a/io/genbank/genbank_test.go +++ b/bio/genbank/genbank_test.go @@ -703,7 +703,7 @@ func Test_generateWhiteSpace(t *testing.T) { } func TestRead_error(t *testing.T) { - readErr := errors.New("open /tmp/file: no such file or directory") + readErr := errors.New("open /tmp/file12345: no such file or directory") oldReadFileFn := readFileFn readFileFn = func(filename string) ([]byte, error) { return nil, readErr @@ -711,7 +711,7 @@ func TestRead_error(t *testing.T) { defer func() { readFileFn = oldReadFileFn }() - _, err := Read("/tmp/file") + _, err := Read("/tmp/file12345") assert.EqualError(t, err, readErr.Error()) } diff --git a/io/gff/example_test.go b/bio/gff/example_test.go similarity index 99% rename from io/gff/example_test.go rename to bio/gff/example_test.go index e5361434..fff9d8e8 100644 --- a/io/gff/example_test.go +++ b/bio/gff/example_test.go @@ -7,7 +7,7 @@ import ( "path/filepath" "testing" - "github.com/TimothyStiles/poly/io/gff" + "github.com/TimothyStiles/poly/bio/gff" "github.com/TimothyStiles/poly/transform" ) diff --git a/io/gff/gff.go b/bio/gff/gff.go similarity index 100% rename from io/gff/gff.go rename to bio/gff/gff.go diff --git a/io/gff/gff_test.go b/bio/gff/gff_test.go similarity index 100% rename from io/gff/gff_test.go rename to bio/gff/gff_test.go diff --git a/io/pileup/data/test.pileup b/bio/pileup/data/test.pileup similarity index 100% rename from io/pileup/data/test.pileup rename to bio/pileup/data/test.pileup diff --git a/io/pileup/data/test_not_enough_fields.pileup b/bio/pileup/data/test_not_enough_fields.pileup similarity index 100% rename from io/pileup/data/test_not_enough_fields.pileup rename to bio/pileup/data/test_not_enough_fields.pileup diff --git a/io/pileup/data/test_position_non_int.pileup b/bio/pileup/data/test_position_non_int.pileup similarity index 100% rename from io/pileup/data/test_position_non_int.pileup rename to bio/pileup/data/test_position_non_int.pileup diff --git a/io/pileup/data/test_read_off.pileup b/bio/pileup/data/test_read_off.pileup similarity index 100% rename from io/pileup/data/test_read_off.pileup rename to bio/pileup/data/test_read_off.pileup diff --git a/io/pileup/data/test_readcount_non_int.pileup b/bio/pileup/data/test_readcount_non_int.pileup similarity index 100% rename from io/pileup/data/test_readcount_non_int.pileup rename to bio/pileup/data/test_readcount_non_int.pileup diff --git a/io/pileup/data/test_unknown_rune.pileup b/bio/pileup/data/test_unknown_rune.pileup similarity index 100% rename from io/pileup/data/test_unknown_rune.pileup rename to bio/pileup/data/test_unknown_rune.pileup diff --git a/io/pileup/pileup.go b/bio/pileup/pileup.go similarity index 100% rename from io/pileup/pileup.go rename to bio/pileup/pileup.go diff --git a/io/pileup/pileup_test.go b/bio/pileup/pileup_test.go similarity index 100% rename from io/pileup/pileup_test.go rename to bio/pileup/pileup_test.go diff --git a/io/polyjson/example_test.go b/bio/polyjson/example_test.go similarity index 99% rename from io/polyjson/example_test.go rename to bio/polyjson/example_test.go index 37989fb3..c937c445 100644 --- a/io/polyjson/example_test.go +++ b/bio/polyjson/example_test.go @@ -6,7 +6,7 @@ import ( "path/filepath" "time" - "github.com/TimothyStiles/poly/io/polyjson" + "github.com/TimothyStiles/poly/bio/polyjson" "github.com/TimothyStiles/poly/seqhash" ) diff --git a/io/polyjson/polyjson.go b/bio/polyjson/polyjson.go similarity index 100% rename from io/polyjson/polyjson.go rename to bio/polyjson/polyjson.go diff --git a/io/polyjson/polyjson_test.go b/bio/polyjson/polyjson_test.go similarity index 100% rename from io/polyjson/polyjson_test.go rename to bio/polyjson/polyjson_test.go diff --git a/io/rebase/data/rebase_test.txt b/bio/rebase/data/rebase_test.txt similarity index 100% rename from io/rebase/data/rebase_test.txt rename to bio/rebase/data/rebase_test.txt diff --git a/io/rebase/example_test.go b/bio/rebase/example_test.go similarity index 94% rename from io/rebase/example_test.go rename to bio/rebase/example_test.go index 313da658..a6814a22 100644 --- a/io/rebase/example_test.go +++ b/bio/rebase/example_test.go @@ -3,7 +3,7 @@ package rebase_test import ( "fmt" - "github.com/TimothyStiles/poly/io/rebase" + "github.com/TimothyStiles/poly/bio/rebase" ) // This example reads rebase into an enzymeMap and returns the AarI recognition diff --git a/io/rebase/rebase.go b/bio/rebase/rebase.go similarity index 100% rename from io/rebase/rebase.go rename to bio/rebase/rebase.go diff --git a/io/rebase/rebase_test.go b/bio/rebase/rebase_test.go similarity index 100% rename from io/rebase/rebase_test.go rename to bio/rebase/rebase_test.go diff --git a/io/slow5/data/example.slow5 b/bio/slow5/data/example.slow5 similarity index 100% rename from io/slow5/data/example.slow5 rename to bio/slow5/data/example.slow5 diff --git a/io/slow5/data/header_tests/test_header_empty.slow5 b/bio/slow5/data/header_tests/test_header_empty.slow5 similarity index 100% rename from io/slow5/data/header_tests/test_header_empty.slow5 rename to bio/slow5/data/header_tests/test_header_empty.slow5 diff --git a/io/slow5/data/header_tests/test_header_not_enough_attributes.slow5 b/bio/slow5/data/header_tests/test_header_not_enough_attributes.slow5 similarity index 100% rename from io/slow5/data/header_tests/test_header_not_enough_attributes.slow5 rename to bio/slow5/data/header_tests/test_header_not_enough_attributes.slow5 diff --git a/io/slow5/data/header_tests/test_header_numReadGroups_bad.slow5 b/bio/slow5/data/header_tests/test_header_numReadGroups_bad.slow5 similarity index 100% rename from io/slow5/data/header_tests/test_header_numReadGroups_bad.slow5 rename to bio/slow5/data/header_tests/test_header_numReadGroups_bad.slow5 diff --git a/io/slow5/data/header_tests/test_header_without_tabs.slow5 b/bio/slow5/data/header_tests/test_header_without_tabs.slow5 similarity index 100% rename from io/slow5/data/header_tests/test_header_without_tabs.slow5 rename to bio/slow5/data/header_tests/test_header_without_tabs.slow5 diff --git a/io/slow5/data/read_tests/continue.slow5 b/bio/slow5/data/read_tests/continue.slow5 similarity index 100% rename from io/slow5/data/read_tests/continue.slow5 rename to bio/slow5/data/read_tests/continue.slow5 diff --git a/io/slow5/data/read_tests/digitisation.slow5 b/bio/slow5/data/read_tests/digitisation.slow5 similarity index 100% rename from io/slow5/data/read_tests/digitisation.slow5 rename to bio/slow5/data/read_tests/digitisation.slow5 diff --git a/io/slow5/data/read_tests/endReason.slow5 b/bio/slow5/data/read_tests/endReason.slow5 similarity index 100% rename from io/slow5/data/read_tests/endReason.slow5 rename to bio/slow5/data/read_tests/endReason.slow5 diff --git a/io/slow5/data/read_tests/end_reason.slow5 b/bio/slow5/data/read_tests/end_reason.slow5 similarity index 100% rename from io/slow5/data/read_tests/end_reason.slow5 rename to bio/slow5/data/read_tests/end_reason.slow5 diff --git a/io/slow5/data/read_tests/end_reason_unknown.slow5 b/bio/slow5/data/read_tests/end_reason_unknown.slow5 similarity index 100% rename from io/slow5/data/read_tests/end_reason_unknown.slow5 rename to bio/slow5/data/read_tests/end_reason_unknown.slow5 diff --git a/io/slow5/data/read_tests/len_raw_signal.slow5 b/bio/slow5/data/read_tests/len_raw_signal.slow5 similarity index 100% rename from io/slow5/data/read_tests/len_raw_signal.slow5 rename to bio/slow5/data/read_tests/len_raw_signal.slow5 diff --git a/io/slow5/data/read_tests/median_before.slow5 b/bio/slow5/data/read_tests/median_before.slow5 similarity index 100% rename from io/slow5/data/read_tests/median_before.slow5 rename to bio/slow5/data/read_tests/median_before.slow5 diff --git a/io/slow5/data/read_tests/offset.slow5 b/bio/slow5/data/read_tests/offset.slow5 similarity index 100% rename from io/slow5/data/read_tests/offset.slow5 rename to bio/slow5/data/read_tests/offset.slow5 diff --git a/io/slow5/data/read_tests/range.slow5 b/bio/slow5/data/read_tests/range.slow5 similarity index 100% rename from io/slow5/data/read_tests/range.slow5 rename to bio/slow5/data/read_tests/range.slow5 diff --git a/io/slow5/data/read_tests/raw_signal.slow5 b/bio/slow5/data/read_tests/raw_signal.slow5 similarity index 100% rename from io/slow5/data/read_tests/raw_signal.slow5 rename to bio/slow5/data/read_tests/raw_signal.slow5 diff --git a/io/slow5/data/read_tests/read_group.slow5 b/bio/slow5/data/read_tests/read_group.slow5 similarity index 100% rename from io/slow5/data/read_tests/read_group.slow5 rename to bio/slow5/data/read_tests/read_group.slow5 diff --git a/io/slow5/data/read_tests/read_number.slow5 b/bio/slow5/data/read_tests/read_number.slow5 similarity index 100% rename from io/slow5/data/read_tests/read_number.slow5 rename to bio/slow5/data/read_tests/read_number.slow5 diff --git a/io/slow5/data/read_tests/sampling_rate.slow5 b/bio/slow5/data/read_tests/sampling_rate.slow5 similarity index 100% rename from io/slow5/data/read_tests/sampling_rate.slow5 rename to bio/slow5/data/read_tests/sampling_rate.slow5 diff --git a/io/slow5/data/read_tests/start_mux.slow5 b/bio/slow5/data/read_tests/start_mux.slow5 similarity index 100% rename from io/slow5/data/read_tests/start_mux.slow5 rename to bio/slow5/data/read_tests/start_mux.slow5 diff --git a/io/slow5/data/read_tests/start_time.slow5 b/bio/slow5/data/read_tests/start_time.slow5 similarity index 100% rename from io/slow5/data/read_tests/start_time.slow5 rename to bio/slow5/data/read_tests/start_time.slow5 diff --git a/io/slow5/data/read_tests/unknown.slow5 b/bio/slow5/data/read_tests/unknown.slow5 similarity index 100% rename from io/slow5/data/read_tests/unknown.slow5 rename to bio/slow5/data/read_tests/unknown.slow5 diff --git a/io/slow5/data/test_example.slow5 b/bio/slow5/data/test_example.slow5 similarity index 100% rename from io/slow5/data/test_example.slow5 rename to bio/slow5/data/test_example.slow5 diff --git a/io/slow5/example_test.go b/bio/slow5/example_test.go similarity index 94% rename from io/slow5/example_test.go rename to bio/slow5/example_test.go index f51d44b2..d30e45dc 100644 --- a/io/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -4,7 +4,7 @@ import ( "fmt" "os" - "github.com/TimothyStiles/poly/io/slow5" + "github.com/TimothyStiles/poly/bio/slow5" ) func ExampleNewParser() { diff --git a/io/slow5/slow5.go b/bio/slow5/slow5.go similarity index 100% rename from io/slow5/slow5.go rename to bio/slow5/slow5.go diff --git a/io/slow5/slow5_test.go b/bio/slow5/slow5_test.go similarity index 100% rename from io/slow5/slow5_test.go rename to bio/slow5/slow5_test.go diff --git a/io/uniprot/data/check_uniprot b/bio/uniprot/data/check_uniprot similarity index 100% rename from io/uniprot/data/check_uniprot rename to bio/uniprot/data/check_uniprot diff --git a/io/uniprot/data/test b/bio/uniprot/data/test similarity index 100% rename from io/uniprot/data/test rename to bio/uniprot/data/test diff --git a/io/uniprot/data/uniprot.xsd b/bio/uniprot/data/uniprot.xsd similarity index 100% rename from io/uniprot/data/uniprot.xsd rename to bio/uniprot/data/uniprot.xsd diff --git a/io/uniprot/data/uniprot_sprot_mini.xml.gz b/bio/uniprot/data/uniprot_sprot_mini.xml.gz similarity index 100% rename from io/uniprot/data/uniprot_sprot_mini.xml.gz rename to bio/uniprot/data/uniprot_sprot_mini.xml.gz diff --git a/io/uniprot/data/xml_go_generator b/bio/uniprot/data/xml_go_generator similarity index 100% rename from io/uniprot/data/xml_go_generator rename to bio/uniprot/data/xml_go_generator diff --git a/io/uniprot/example_test.go b/bio/uniprot/example_test.go similarity index 91% rename from io/uniprot/example_test.go rename to bio/uniprot/example_test.go index 003ed0d7..069352f7 100644 --- a/io/uniprot/example_test.go +++ b/bio/uniprot/example_test.go @@ -2,7 +2,8 @@ package uniprot_test import ( "fmt" - "github.com/TimothyStiles/poly/io/uniprot" + + "github.com/TimothyStiles/poly/bio/uniprot" ) // This example shows how to open a uniprot data dump file and read the results diff --git a/io/uniprot/uniprot.go b/bio/uniprot/uniprot.go similarity index 100% rename from io/uniprot/uniprot.go rename to bio/uniprot/uniprot.go diff --git a/io/uniprot/uniprot_test.go b/bio/uniprot/uniprot_test.go similarity index 100% rename from io/uniprot/uniprot_test.go rename to bio/uniprot/uniprot_test.go diff --git a/io/uniprot/xml.go b/bio/uniprot/xml.go similarity index 100% rename from io/uniprot/xml.go rename to bio/uniprot/xml.go diff --git a/io/uniprot/xml_test.go b/bio/uniprot/xml_test.go similarity index 100% rename from io/uniprot/xml_test.go rename to bio/uniprot/xml_test.go diff --git a/io/io.go b/io/io.go deleted file mode 100644 index fbdfac75..00000000 --- a/io/io.go +++ /dev/null @@ -1,9 +0,0 @@ -/* -Package io provides utilities for reading and writing sequence data. -*/ -package io - -/* -This package is supposed to be empty and only exists to provide a doc string. -Otherwise its namespace would collide with Go's native IO package. -*/ From 5c887a37cb520aeb41eee65b80fd7f12d368b1ce Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 23 Aug 2023 19:23:52 -0700 Subject: [PATCH 02/59] fixed io imports --- seqhash/example_test.go | 2 +- seqhash/seqhash_test.go | 2 +- synthesis/codon/codon_test.go | 2 +- synthesis/codon/example_test.go | 2 +- tutorials/001_input_output_test.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/seqhash/example_test.go b/seqhash/example_test.go index 02629c85..4f1cf002 100644 --- a/seqhash/example_test.go +++ b/seqhash/example_test.go @@ -3,7 +3,7 @@ package seqhash_test import ( "fmt" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/seqhash" ) diff --git a/seqhash/seqhash_test.go b/seqhash/seqhash_test.go index a980b98b..099b238c 100644 --- a/seqhash/seqhash_test.go +++ b/seqhash/seqhash_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/sergi/go-diff/diffmatchpatch" ) diff --git a/synthesis/codon/codon_test.go b/synthesis/codon/codon_test.go index 6c49c618..73fb1f58 100644 --- a/synthesis/codon/codon_test.go +++ b/synthesis/codon/codon_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/google/go-cmp/cmp" weightedRand "github.com/mroth/weightedrand" "github.com/stretchr/testify/assert" diff --git a/synthesis/codon/example_test.go b/synthesis/codon/example_test.go index 448d5e3c..c2226059 100644 --- a/synthesis/codon/example_test.go +++ b/synthesis/codon/example_test.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/synthesis/codon" ) diff --git a/tutorials/001_input_output_test.go b/tutorials/001_input_output_test.go index c44eee48..e9dc5ccb 100644 --- a/tutorials/001_input_output_test.go +++ b/tutorials/001_input_output_test.go @@ -7,7 +7,7 @@ import ( "path/filepath" "testing" - "github.com/TimothyStiles/poly/io/genbank" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" ) From d8f4b389d3a21bf8ed6648a0c2efc869f3f43a32 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 30 Aug 2023 20:26:59 -0700 Subject: [PATCH 03/59] Add more generic definitions to bio --- bio/bio.go | 171 ++++++++++++++++- bio/bio_test.go | 8 +- bio/example_test.go | 5 +- bio/fasta/example_test.go | 212 +++++++++++---------- bio/fasta/fasta.go | 381 +++++++++++++++++++------------------- bio/fasta/fasta_test.go | 379 ++++++++++++++++++------------------- 6 files changed, 647 insertions(+), 509 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 291399c6..44b72964 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -4,20 +4,173 @@ Package bio provides utilities for reading and writing sequence data. package bio import ( + "bufio" "io" + "os" + + "github.com/TimothyStiles/poly/bio/fasta" ) -/* -This package is supposed to be empty and only exists to provide a doc string. -Otherwise its namespace would collide with Go's native IO package. -*/ +type Format int + +const ( + Fasta Format = iota + Fastq + Gff + Genbank + Slow5 + Pileup + Uniprot + Rebase +) + +// DefaultMaxLineLength variables are defined for performance reasons. While +// parsing, reading byte-by-byte takes far, far longer than reading many bytes +// into a buffer. In golang, this buffer in bufio is usually 64kb. However, +// many files, especially slow5 files, can contain single lines that are much +// longer. We use the default maxLineLength from bufio unless there is a +// particular reason to use a different number. +const defaultMaxLineLength int = bufio.MaxScanTokenSize // 64kB is a magic number often used by the Go stdlib for parsing. +var ( + Fasta_DefaultMaxLineLength = defaultMaxLineLength + Fastq_DefaultMaxLineLength = 8 * 1024 * 1024 // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. + Gff_DefaultMaxLineLength = defaultMaxLineLength + Genbank_DefaultMaxLineLength = defaultMaxLineLength + Slow5_DefaultMaxLineLength = 128 * 1024 * 1024 // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. + Pileup_DefaultMaxLineLength = defaultMaxLineLength + Uniprot_DefaultMaxLineLength = defaultMaxLineLength + Rebase_DefaultMaxLineLength = defaultMaxLineLength +) -type Parser[T any, TH any] interface { - Header() (TH, error) - Next() (T, error) - MaxLineCount() int64 +/****************************************************************************** +Aug 30, 2023 + +Lower level interfaces + +******************************************************************************/ + +type LowLevelParser[DataType fasta.Fasta, DataTypeHeader fasta.Header] interface { + Header() (DataTypeHeader, int64, error) + Next() (DataType, int64, error) } type Writer interface { - Write(io.Writer) error + Write(io.Writer) (int, error) +} + +/****************************************************************************** + +Higher level parse + +******************************************************************************/ + +type Parser[DataType fasta.Fasta, DataTypeHeader fasta.Header] struct { + LowLevelParser LowLevelParser[DataType, DataTypeHeader] +} + +var emptyParser Parser[fasta.Fasta, fasta.Header] = Parser[fasta.Fasta, fasta.Header]{} + +func NewParser(format Format, r io.Reader) (*Parser[fasta.Fasta, fasta.Header], error) { + var maxLineLength int + switch format { + case Fasta: + maxLineLength = Fasta_DefaultMaxLineLength + } + return NewParserWithMaxLine(format, r, maxLineLength) +} + +func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (*Parser[fasta.Fasta, fasta.Header], error) { + switch format { + case Fasta: + return &Parser[fasta.Fasta, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil + } + return nil, nil +} + +/****************************************************************************** + +Parser read functions + +******************************************************************************/ + +func ReadWithMaxLine(format Format, path string, maxLineLength int) (*Parser[fasta.Fasta, fasta.Header], error) { + file, err := os.Open(path) + if err != nil { + return &emptyParser, err + } + return NewParserWithMaxLine(format, file, maxLineLength) +} + +func Read(format Format, path string) (*Parser[fasta.Fasta, fasta.Header], error) { + file, err := os.Open(path) + if err != nil { + return &emptyParser, err + } + return NewParser(format, file) +} + +/****************************************************************************** + +Parser higher-level functions + +******************************************************************************/ + +func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, int64, error) { + return p.LowLevelParser.Next() +} + +func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, int64, error) { + return p.LowLevelParser.Header() +} + +func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { + return nil, nil +} + +func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { + return nil, nil +} + +func (p *Parser[DataType, DataTypeHeader]) ParseAll() ([]DataType, DataTypeHeader, error) { + header, _, err := p.Header() + if err != nil { + return []DataType{}, DataTypeHeader{}, err + } + data, err := p.Parse() + if err != nil { + return []DataType{}, DataTypeHeader{}, err + } + return data, header, nil +} + +func (p *Parser[DataType, DataTypeHeader]) ParseConcurrent(channel chan<- DataType) error { + return nil +} + +/****************************************************************************** + +Writer functions + +******************************************************************************/ + +func WriteAll(data []Writer, header Writer, w io.Writer) error { + _, err := header.Write(w) + if err != nil { + return err + } + for _, datum := range data { + _, err = datum.Write(w) + if err != nil { + return err + } + } + return nil +} + +func WriteFile(data []Writer, header Writer, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + return WriteAll(data, header, file) } diff --git a/bio/bio_test.go b/bio/bio_test.go index 10d43d93..4637ffd0 100644 --- a/bio/bio_test.go +++ b/bio/bio_test.go @@ -1,13 +1,13 @@ -package bio +package bio_test import ( "testing" + "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/bio/fasta" - "github.com/TimothyStiles/poly/bio/fastq" ) func TestWriter(t *testing.T) { - var _ Writer = &fastq.Fastq{} - var _ Writer = &fasta.Fasta{} + var _ bio.LowLevelParser[fasta.Fasta, fasta.Header] = &fasta.Parser{} + var _ bio.Writer = &fasta.Fasta{} } diff --git a/bio/example_test.go b/bio/example_test.go index de10faa0..ece11d65 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -1,7 +1,6 @@ package bio_test import ( - "github.com/TimothyStiles/poly/bio/fasta" "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/bio/gff" "github.com/TimothyStiles/poly/bio/polyjson" @@ -16,13 +15,13 @@ func Example() { gffInput, _ := gff.Read("../data/ecoli-mg1655-short.gff") gbkInput, _ := genbank.Read("../data/puc19.gbk") - fastaInput, _ := fasta.Read("fasta/data/base.fasta") + //fastaInput, _ := fasta.Read("fasta/data/base.fasta") jsonInput, _ := polyjson.Read("../data/cat.json") // Poly can also output these file formats. Every file format has a corresponding Write function. _ = gff.Write(gffInput, "test.gff") _ = genbank.Write(gbkInput, "test.gbk") - _ = fasta.WriteFile(fastaInput, "test.fasta") + //_ = fasta.WriteFile(fastaInput, "test.fasta") _ = polyjson.Write(jsonInput, "test.json") // Extra tips: diff --git a/bio/fasta/example_test.go b/bio/fasta/example_test.go index 5af2a0f2..e99accda 100644 --- a/bio/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -1,118 +1,112 @@ package fasta_test import ( - "bytes" _ "embed" - "fmt" - "os" - "strings" - - "github.com/TimothyStiles/poly/bio/fasta" ) //go:embed data/base.fasta var baseFasta string -// This example shows how to open a file with the fasta parser. The sequences -// within that file can then be analyzed further with different software. -func Example_basic() { - fastas, _ := fasta.Read("data/base.fasta") - fmt.Println(fastas[1].Sequence) - // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* -} - -// ExampleRead shows basic usage for Read. -func ExampleRead() { - fastas, _ := fasta.Read("data/base.fasta") - fmt.Println(fastas[0].Name) - // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -} - -// ExampleParse shows basic usage for Parse. -func ExampleParse() { - file, _ := os.Open("data/base.fasta") - fastas, _ := fasta.Parse(file) - - fmt.Println(fastas[0].Name) - // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -} - -// ExampleBuild shows basic usage for Build -func ExampleBuild() { - fastas, _ := fasta.Read("data/base.fasta") // get example data - var buffer bytes.Buffer // Initialize a buffer to write fastas into - for _, fasta := range fastas { - _ = fasta.Write(&buffer) // build a fasta byte array - - } - firstLine := string(bytes.Split(buffer.Bytes(), []byte("\n"))[0]) - - fmt.Println(firstLine) - // Output: >gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -} - -// ExampleWrite shows basic usage of the writer. -func ExampleWrite() { - fastas, _ := fasta.Read("data/base.fasta") // get example data - _ = fasta.WriteFile(fastas, "data/test.fasta") // write it out again - testSequence, _ := fasta.Read("data/test.fasta") // read it in again - - os.Remove("data/test.fasta") // getting rid of test file - - fmt.Println(testSequence[0].Name) - // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -} - -// ExampleReadGz shows basic usage for ReadGz on a gzip'd file. -func ExampleReadGz() { - fastas, _ := fasta.ReadGz("data/uniprot_1mb_test.fasta.gz") - var name string - for _, fasta := range fastas { - name = fasta.Name - } - - fmt.Println(name) - // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 -} - -// ExampleReadGzConcurrent shows how to use the concurrent parser for larger files. -func ExampleReadGzConcurrent() { - fastas := make(chan fasta.Fasta, 1000) - go fasta.ReadGzConcurrent("data/uniprot_1mb_test.fasta.gz", fastas) - var name string - for fasta := range fastas { - name = fasta.Name - } - - fmt.Println(name) - // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 -} - -// ExampleReadConcurrent shows how to use the concurrent parser for decompressed fasta files. -func ExampleReadConcurrent() { - fastas := make(chan fasta.Fasta, 100) - go fasta.ReadConcurrent("data/base.fasta", fastas) - var name string - for fasta := range fastas { - name = fasta.Name - } - - fmt.Println(name) - // Output: MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken -} - -func ExampleParser() { - parser := fasta.NewParser(strings.NewReader(baseFasta), 256) - for { - fasta, _, err := parser.ParseNext() - if err != nil { - fmt.Println(err) - break - } - fmt.Println(fasta.Name) - } - //Output: - // gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] - // MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken - // EOF -} +//// This example shows how to open a file with the fasta parser. The sequences +//// within that file can then be analyzed further with different software. +//func Example_basic() { +// fastas, _ := fasta.Read("data/base.fasta") +// fmt.Println(fastas[1].Sequence) +// // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +//} +// +//// ExampleRead shows basic usage for Read. +//func ExampleRead() { +// fastas, _ := fasta.Read("data/base.fasta") +// fmt.Println(fastas[0].Name) +// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +//} +// +//// ExampleParse shows basic usage for Parse. +//func ExampleParse() { +// file, _ := os.Open("data/base.fasta") +// fastas, _ := fasta.Parse(file) +// +// fmt.Println(fastas[0].Name) +// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +//} +// +//// ExampleBuild shows basic usage for Build +//func ExampleBuild() { +// fastas, _ := fasta.Read("data/base.fasta") // get example data +// var buffer bytes.Buffer // Initialize a buffer to write fastas into +// for _, fasta := range fastas { +// _ = fasta.Write(&buffer) // build a fasta byte array +// +// } +// firstLine := string(bytes.Split(buffer.Bytes(), []byte("\n"))[0]) +// +// fmt.Println(firstLine) +// // Output: >gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +//} +// +//// ExampleWrite shows basic usage of the writer. +//func ExampleWrite() { +// fastas, _ := fasta.Read("data/base.fasta") // get example data +// _ = fasta.WriteFile(fastas, "data/test.fasta") // write it out again +// testSequence, _ := fasta.Read("data/test.fasta") // read it in again +// +// os.Remove("data/test.fasta") // getting rid of test file +// +// fmt.Println(testSequence[0].Name) +// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +//} +// +//// ExampleReadGz shows basic usage for ReadGz on a gzip'd file. +//func ExampleReadGz() { +// fastas, _ := fasta.ReadGz("data/uniprot_1mb_test.fasta.gz") +// var name string +// for _, fasta := range fastas { +// name = fasta.Name +// } +// +// fmt.Println(name) +// // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 +//} +// +//// ExampleReadGzConcurrent shows how to use the concurrent parser for larger files. +//func ExampleReadGzConcurrent() { +// fastas := make(chan fasta.Fasta, 1000) +// go fasta.ReadGzConcurrent("data/uniprot_1mb_test.fasta.gz", fastas) +// var name string +// for fasta := range fastas { +// name = fasta.Name +// } +// +// fmt.Println(name) +// // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 +//} +// +//// ExampleReadConcurrent shows how to use the concurrent parser for decompressed fasta files. +//func ExampleReadConcurrent() { +// fastas := make(chan fasta.Fasta, 100) +// go fasta.ReadConcurrent("data/base.fasta", fastas) +// var name string +// for fasta := range fastas { +// name = fasta.Name +// } +// +// fmt.Println(name) +// // Output: MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +//} +// +//func ExampleParser() { +// parser := fasta.NewParser(strings.NewReader(baseFasta), 256) +// for { +// fasta, _, err := parser.Next() +// if err != nil { +// fmt.Println(err) +// break +// } +// fmt.Println(fasta.Name) +// } +// //Output: +// // gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +// // MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +// // EOF +//} diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index f81b935b..a0830502 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -13,13 +13,9 @@ package fasta import ( "bufio" - "compress/gzip" "errors" "fmt" "io" - "math" - "os" - "strings" "unsafe" ) @@ -61,13 +57,15 @@ type Fasta struct { Sequence string `json:"sequence"` } -// Parse parses a given Fasta file into an array of Fasta structs. Internally, it uses ParseFastaConcurrent. -func Parse(r io.Reader) ([]Fasta, error) { - // 32kB is a magic number often used by the Go stdlib for parsing. We multiply it by two. - const maxLineSize = 2 * 32 * 1024 - parser := NewParser(r, maxLineSize) - return parser.ParseAll() -} +type Header struct{} + +//// Parse parses a given Fasta file into an array of Fasta structs. Internally, it uses ParseFastaConcurrent. +//func Parse(r io.Reader) ([]Fasta, error) { +// // 32kB is a magic number often used by the Go stdlib for parsing. We multiply it by two. +// const maxLineSize = 2 * 32 * 1024 +// parser := NewParser(r, maxLineSize) +// return parser.ParseAll() +//} // Parser is a flexible parser that provides ample // control over reading fasta-formatted sequences. @@ -78,6 +76,10 @@ type Parser struct { line uint } +func (p *Parser) Header() (Header, int64, error) { + return Header{}, 0, nil +} + // NewParser returns a Parser that uses r as the source // from which to parse fasta formatted sequences. func NewParser(r io.Reader, maxLineSize int) *Parser { @@ -86,50 +88,50 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { } } -// ParseAll parses all sequences in underlying reader only returning non-EOF errors. -// It returns all valid fasta sequences up to error if encountered. -func (parser *Parser) ParseAll() ([]Fasta, error) { - return parser.ParseN(math.MaxInt) -} - -// ParseN parses up to maxSequences fasta sequences from the Parser's underlying reader. -// ParseN does not return EOF if encountered. -// If an non-EOF error is encountered it returns it and all correctly parsed sequences up to then. -func (parser *Parser) ParseN(maxSequences int) (fastas []Fasta, err error) { - for counter := 0; counter < maxSequences; counter++ { - fasta, _, err := parser.ParseNext() - if err != nil { - if errors.Is(err, io.EOF) { - err = nil // EOF not treated as parsing error. - } - return fastas, err - } - fastas = append(fastas, fasta) - } - return fastas, nil -} - -// ParseByteLimited parses fastas until byte limit is reached. -// This is NOT a hard limit. To set a hard limit on bytes read use a -// io.LimitReader to wrap the reader passed to the Parser. -func (parser *Parser) ParseByteLimited(byteLimit int64) (fastas []Fasta, bytesRead int64, err error) { - for bytesRead < byteLimit { - fasta, n, err := parser.ParseNext() - bytesRead += n - if err != nil { - if errors.Is(err, io.EOF) { - err = nil // EOF not treated as parsing error. - } - return fastas, bytesRead, err - } - fastas = append(fastas, fasta) - } - return fastas, bytesRead, nil -} - -// ParseNext reads next fasta genome in underlying reader and returns the result +//// ParseAll parses all sequences in underlying reader only returning non-EOF errors. +//// It returns all valid fasta sequences up to error if encountered. +//func (parser *Parser) ParseAll() ([]Fasta, error) { +// return parser.ParseN(math.MaxInt) +//} +// +//// ParseN parses up to maxSequences fasta sequences from the Parser's underlying reader. +//// ParseN does not return EOF if encountered. +//// If an non-EOF error is encountered it returns it and all correctly parsed sequences up to then. +//func (parser *Parser) ParseN(maxSequences int) (fastas []Fasta, err error) { +// for counter := 0; counter < maxSequences; counter++ { +// fasta, newWrittenBytes, err := parser.Next() +// if err != nil { +// if errors.Is(err, io.EOF) { +// err = nil // EOF not treated as parsing error. +// } +// return fastas, err +// } +// fastas = append(fastas, fasta) +// } +// return fastas, nil +//} +// +//// ParseByteLimited parses fastas until byte limit is reached. +//// This is NOT a hard limit. To set a hard limit on bytes read use a +//// io.LimitReader to wrap the reader passed to the Parser. +//func (parser *Parser) ParseByteLimited(byteLimit int64) (fastas []Fasta, bytesRead int64, err error) { +// for bytesRead < byteLimit { +// fasta, n, err := parser.Next() +// bytesRead += n +// if err != nil { +// if errors.Is(err, io.EOF) { +// err = nil // EOF not treated as parsing error. +// } +// return fastas, bytesRead, err +// } +// fastas = append(fastas, fasta) +// } +// return fastas, bytesRead, nil +//} + +// Next reads next fasta genome in underlying reader and returns the result // and the amount of bytes read during the call. -// ParseNext only returns an error if it: +// Next only returns an error if it: // - Attempts to read and fails to find a valid fasta sequence. // - Returns reader's EOF if called after reader has been exhausted. // - If a EOF is encountered immediately after a sequence with no newline ending. @@ -138,7 +140,7 @@ func (parser *Parser) ParseByteLimited(byteLimit int64) (fastas []Fasta, bytesRe // It is worth noting the amount of bytes read are always right up to before // the next fasta starts which means this function can effectively be used // to index where fastas start in a file or string. -func (parser *Parser) ParseNext() (Fasta, int64, error) { +func (parser *Parser) Next() (Fasta, int64, error) { if _, err := parser.reader.Peek(1); err != nil { // Early return on error. Probably will be EOF. return Fasta{}, 0, err @@ -233,58 +235,52 @@ func (parser *Parser) ParseNext() (Fasta, int64, error) { return fasta, totalRead, err } -// Reset discards all data in buffer and resets state. -func (parser *Parser) Reset(r io.Reader) { - parser.reader.Reset(r) - parser.line = 0 -} - -// ParseConcurrent concurrently parses a given Fasta file in an io.Reader into a channel of Fasta structs. -func ParseConcurrent(r io.Reader, sequences chan<- Fasta) { - // Initialize necessary variables - var sequenceLines []string - var name string - start := true - - // Start the scanner - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := scanner.Text() - switch { - // if there's nothing on this line skip this iteration of the loop - case len(line) == 0: - continue - // if it's a comment skip this line - case line[0:1] == ";": - continue - // start of a fasta line - case line[0:1] != ">": - sequenceLines = append(sequenceLines, line) - // Process normal new lines - case line[0:1] == ">" && !start: - sequence := strings.Join(sequenceLines, "") - newFasta := Fasta{ - Name: name, - Sequence: sequence} - // Reset sequence lines - sequenceLines = []string{} - // New name - name = line[1:] - sequences <- newFasta - // Process first line of file - case line[0:1] == ">" && start: - name = line[1:] - start = false - } - } - // Add final sequence in file to channel - sequence := strings.Join(sequenceLines, "") - newFasta := Fasta{ - Name: name, - Sequence: sequence} - sequences <- newFasta - close(sequences) -} +//// ParseConcurrent concurrently parses a given Fasta file in an io.Reader into a channel of Fasta structs. +//func ParseConcurrent(r io.Reader, sequences chan<- Fasta) { +// // Initialize necessary variables +// var sequenceLines []string +// var name string +// start := true +// +// // Start the scanner +// scanner := bufio.NewScanner(r) +// for scanner.Scan() { +// line := scanner.Text() +// switch { +// // if there's nothing on this line skip this iteration of the loop +// case len(line) == 0: +// continue +// // if it's a comment skip this line +// case line[0:1] == ";": +// continue +// // start of a fasta line +// case line[0:1] != ">": +// sequenceLines = append(sequenceLines, line) +// // Process normal new lines +// case line[0:1] == ">" && !start: +// sequence := strings.Join(sequenceLines, "") +// newFasta := Fasta{ +// Name: name, +// Sequence: sequence} +// // Reset sequence lines +// sequenceLines = []string{} +// // New name +// name = line[1:] +// sequences <- newFasta +// // Process first line of file +// case line[0:1] == ">" && start: +// name = line[1:] +// start = false +// } +// } +// // Add final sequence in file to channel +// sequence := strings.Join(sequenceLines, "") +// newFasta := Fasta{ +// Name: name, +// Sequence: sequence} +// sequences <- newFasta +// close(sequences) +//} /****************************************************************************** @@ -292,110 +288,117 @@ Start of Read functions ******************************************************************************/ -// ReadGzConcurrent concurrently reads a gzipped Fasta file into a Fasta channel. -// Deprecated: Use Parser.ParseNext() instead. -func ReadGzConcurrent(path string, sequences chan<- Fasta) { - file, _ := os.Open(path) // TODO: these errors need to be handled/logged - reader, _ := gzip.NewReader(file) - go func() { - defer file.Close() - defer reader.Close() - ParseConcurrent(reader, sequences) - }() -} - -// ReadConcurrent concurrently reads a flat Fasta file into a Fasta channel. -func ReadConcurrent(path string, sequences chan<- Fasta) { - file, _ := os.Open(path) // TODO: these errors need to be handled/logged - go func() { - defer file.Close() - ParseConcurrent(file, sequences) - }() -} - -// ReadGz reads a gzipped file into an array of Fasta structs. -func ReadGz(path string) ([]Fasta, error) { - file, err := os.Open(path) - if err != nil { - return nil, err - } - defer file.Close() - reader, err := gzip.NewReader(file) - if err != nil { - return nil, err - } - defer reader.Close() - return Parse(reader) -} - -// Read reads a file into an array of Fasta structs -func Read(path string) ([]Fasta, error) { - file, err := os.Open(path) - if err != nil { - return nil, err - } - defer file.Close() - return Parse(file) -} - -/****************************************************************************** - -Start of Write functions - -******************************************************************************/ +//// ReadGzConcurrent concurrently reads a gzipped Fasta file into a Fasta channel. +//// Deprecated: Use Parser.Next() instead. +//func ReadGzConcurrent(path string, sequences chan<- Fasta) { +// file, _ := os.Open(path) // TODO: these errors need to be handled/logged +// reader, _ := gzip.NewReader(file) +// go func() { +// defer file.Close() +// defer reader.Close() +// ParseConcurrent(reader, sequences) +// }() +//} +// +//// ReadConcurrent concurrently reads a flat Fasta file into a Fasta channel. +//func ReadConcurrent(path string, sequences chan<- Fasta) { +// file, _ := os.Open(path) // TODO: these errors need to be handled/logged +// go func() { +// defer file.Close() +// ParseConcurrent(file, sequences) +// }() +//} +// +//// ReadGz reads a gzipped file into an array of Fasta structs. +//func ReadGz(path string) ([]Fasta, error) { +// file, err := os.Open(path) +// if err != nil { +// return nil, err +// } +// defer file.Close() +// reader, err := gzip.NewReader(file) +// if err != nil { +// return nil, err +// } +// defer reader.Close() +// return Parse(reader) +//} +// +//// Read reads a file into an array of Fasta structs +//func Read(path string) ([]Fasta, error) { +// file, err := os.Open(path) +// if err != nil { +// return nil, err +// } +// defer file.Close() +// return Parse(file) +//} +// +///****************************************************************************** +// +//Start of Write functions +// +//******************************************************************************/ // Write converts a Fastas array into a byte array to be written to a file. -func (fasta *Fasta) Write(w io.Writer) error { - _, err := w.Write([]byte(">")) +func (fasta *Fasta) Write(w io.Writer) (int, error) { + var writtenBytes int + var newWrittenBytes int + newWrittenBytes, err := w.Write([]byte(">")) if err != nil { - return err + return writtenBytes, err } - _, err = w.Write([]byte(fasta.Name)) + writtenBytes += newWrittenBytes + newWrittenBytes, err = w.Write([]byte(fasta.Name)) if err != nil { - return err + return writtenBytes, err } - _, err = w.Write([]byte("\n")) + writtenBytes += newWrittenBytes + newWrittenBytes, err = w.Write([]byte("\n")) if err != nil { - return err + return writtenBytes, err } + writtenBytes += newWrittenBytes lineCount := 0 // write the fasta sequence 80 characters at a time for _, character := range fasta.Sequence { - - _, err = w.Write([]byte{byte(character)}) + newWrittenBytes, err = w.Write([]byte{byte(character)}) if err != nil { - return err + return writtenBytes, err } + writtenBytes += newWrittenBytes lineCount++ if lineCount == 80 { - _, err = w.Write([]byte("\n")) + newWrittenBytes, err = w.Write([]byte("\n")) if err != nil { - return err + return writtenBytes, err } + writtenBytes += newWrittenBytes lineCount = 0 } } - _, err = w.Write([]byte("\n\n")) + newWrittenBytes, err = w.Write([]byte("\n\n")) if err != nil { - return err + return writtenBytes, err } - return nil + writtenBytes += newWrittenBytes + return writtenBytes, nil } -// WriteFile writes a fasta array to a file. -func WriteFile(fastas []Fasta, path string) error { - file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - return err - } - defer file.Close() - - for _, fasta := range fastas { - err = fasta.Write(file) - if err != nil { - return err - } - } - return nil -} +//// WriteFile writes a fasta array to a file. +//func WriteFile(fastas []Fasta, path string) error { +// file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0644) +// if err != nil { +// return err +// } +// defer file.Close() +// +// for _, fasta := range fastas { +// err = fasta.Write(file) +// if err != nil { +// return err +// } +// } +// return nil +//} diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index 69cd564b..be016768 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -1,202 +1,191 @@ package fasta -import ( - "compress/gzip" - "errors" - "io" - "os" - "strings" - "testing" - - "github.com/stretchr/testify/assert" -) - const ( // This fasta stream contains no Fasta. emptyFasta = "testing\natagtagtagtagtagatgatgatgatgagatg\n\n\n\n\n\n\n\n\n\n\n" ) -// Initialized at TestMain. -var uniprotFasta string - -func TestMain(m *testing.M) { - const uniprotFastaGzFilePath = "data/uniprot_1mb_test.fasta.gz" - // unzip uniprot data and create uniprotFasta string for benchmarks and testing. - uniprotFastaGzFile, err := os.Open(uniprotFastaGzFilePath) - if err != nil { - panic(uniprotFastaGzFilePath + " required for tests!") - } - defer uniprotFastaGzFile.Close() - - uniprotFastaGzReader, _ := gzip.NewReader(uniprotFastaGzFile) - defer uniprotFastaGzReader.Close() - - uniprotFastaBytes, err := io.ReadAll(uniprotFastaGzReader) - if err != nil { - panic(err) - } - - uniprotFasta = string(uniprotFastaBytes) - m.Run() -} - -func BenchmarkFastaLegacy(b *testing.B) { - var fastas []Fasta - var err error - for i := 0; i < b.N; i++ { - fastas, err = Parse(strings.NewReader(uniprotFasta)) - if err != nil { - b.Fatal(err) - } - } - _ = fastas -} - -func BenchmarkParser(b *testing.B) { - var fastaRecords []Fasta - for i := 0; i < b.N; i++ { - parser := NewParser(strings.NewReader(uniprotFasta), 256) - for { - fasta, _, err := parser.ParseNext() - if err != nil { - if !errors.Is(err, io.EOF) { - b.Fatal(err) - } - break - } - fastaRecords = append(fastaRecords, fasta) - } - fastaRecords = nil // Reset memory - } - _ = fastaRecords -} - -func TestRead_error(t *testing.T) { - t.Run("Read errors opening the file", func(t *testing.T) { - openErr := errors.New("open /tmp/file12345: no such file or directory") - _, err := Read("/tmp/file12345") - assert.EqualError(t, err, openErr.Error()) - }) - - t.Run("ReadGz errors opening the file", func(t *testing.T) { - openErr := errors.New("open /tmp/file12345: no such file or directory") - _, err := ReadGz("/tmp/file12345") - assert.EqualError(t, err, openErr.Error()) - }) - - t.Run("ReadGz errors reading the file", func(t *testing.T) { - readErr := errors.New("open /tmp/file12345: no such file or directory") - _, err := ReadGz("/tmp/file12345") - assert.EqualError(t, err, readErr.Error()) - }) -} - -func TestParser(t *testing.T) { - parser := NewParser(nil, 256) - for testIndex, test := range []struct { - content string - expected []Fasta - }{ - { - content: ">humen\nGATTACA\nCATGAT", // EOF-ended Fasta not valid - expected: []Fasta{}, - }, - { - content: ">humen\nGATTACA\nCATGAT\n", - expected: []Fasta{{Name: "humen", Sequence: "GATTACACATGAT"}}, - }, - { - content: ">doggy or something\nGATTACA\n\nCATGAT\n" + - ">homunculus\nAAAA\n", - expected: []Fasta{ - {Name: "doggy or something", Sequence: "GATTACACATGAT"}, - {Name: "homunculus", Sequence: "AAAA"}, - }, - }, - } { - parser.Reset(strings.NewReader(test.content)) - fastas, err := parser.ParseAll() - if err != nil { - t.Fatal(err) - } - if len(fastas) != len(test.expected) { - t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) - continue - } - for index, gotFasta := range fastas { - expected := test.expected[index] - if expected != gotFasta { - t.Errorf("got!=expected: %+v != %+v", gotFasta, expected) - } - } - } -} - -func TestParseBytes(t *testing.T) { - // Partial read test. - const testFasta = ">0\nGAT\n>1\nCAC\n" - p := NewParser(strings.NewReader(testFasta), 256) - result1, bytesRead, err := p.ParseByteLimited(1) - if err != nil { - t.Fatal(err) - } - if len(result1) != 1 { - t.Error("expected result of length 1 (partial read)") - } - expectBytesRead := 1 + strings.Index(testFasta[1:], ">") - if int(bytesRead) != expectBytesRead { - t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) - } - - // Full read test. - p.Reset(strings.NewReader(testFasta)) - result1, bytesRead, err = p.ParseByteLimited(100) - if err != nil { - t.Fatal(err) - } - if len(result1) != 2 { - t.Error("expected result of length 2 (full read)") - } - expectBytesRead = len(testFasta) - if int(bytesRead) != expectBytesRead { - t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) - } -} - -// TestReadEmptyFasta tests that an empty fasta file is parsed correctly. -func TestReadEmptyFasta(t *testing.T) { - fastas, err := Parse(strings.NewReader(emptyFasta)) - if err == nil { - t.Errorf("expected error reading empty fasta stream") - } - if len(fastas) != 0 { - t.Errorf("expected 1 fastas, got %d", len(fastas)) - } -} - -// TestParseBufferFail tests that the parser fails when the buffer is too small. -func TestParseBufferFail(t *testing.T) { - // Error only triggered when there is a line greater than 16 bytes in length. - // This is because the underlying implementation uses bufio.Reader, which auto-sets - // the buffer to 16, the minimum length permissible for the implementation. - // We should not test for this anyways because we may change from using - // bufio.Reader.ReadSlice to bufio.Reader.ReadLine, which allows for incomplete - // line parsing, though this makes parsing more difficult. - const testFasta = ">0\n0123456789ABCDEF\n>1\nCAC\n" - parser := NewParser(strings.NewReader(testFasta), 2) - fasta, err := parser.ParseAll() - _ = fasta - if err == nil { - t.Error("expected error, got nil") - } -} - -func TestParseEOFAfterName(t *testing.T) { - const testFasta = ">OK Fasta\nABGABA\n>NotOKFasta\n" - parser := NewParser(strings.NewReader(testFasta), 2) - fasta, err := parser.ParseAll() - _ = fasta - if err == nil { - t.Error("expected error, got nil") - } -} +//// Initialized at TestMain. +//var uniprotFasta string +// +//func TestMain(m *testing.M) { +// const uniprotFastaGzFilePath = "data/uniprot_1mb_test.fasta.gz" +// // unzip uniprot data and create uniprotFasta string for benchmarks and testing. +// uniprotFastaGzFile, err := os.Open(uniprotFastaGzFilePath) +// if err != nil { +// panic(uniprotFastaGzFilePath + " required for tests!") +// } +// defer uniprotFastaGzFile.Close() +// +// uniprotFastaGzReader, _ := gzip.NewReader(uniprotFastaGzFile) +// defer uniprotFastaGzReader.Close() +// +// uniprotFastaBytes, err := io.ReadAll(uniprotFastaGzReader) +// if err != nil { +// panic(err) +// } +// +// uniprotFasta = string(uniprotFastaBytes) +// m.Run() +//} +// +//func BenchmarkFastaLegacy(b *testing.B) { +// var fastas []Fasta +// var err error +// for i := 0; i < b.N; i++ { +// fastas, err = Parse(strings.NewReader(uniprotFasta)) +// if err != nil { +// b.Fatal(err) +// } +// } +// _ = fastas +//} +// +//func BenchmarkParser(b *testing.B) { +// var fastaRecords []Fasta +// for i := 0; i < b.N; i++ { +// parser := NewParser(strings.NewReader(uniprotFasta), 256) +// for { +// fasta, _, err := parser.Next() +// if err != nil { +// if !errors.Is(err, io.EOF) { +// b.Fatal(err) +// } +// break +// } +// fastaRecords = append(fastaRecords, fasta) +// } +// fastaRecords = nil // Reset memory +// } +// _ = fastaRecords +//} +// +//func TestRead_error(t *testing.T) { +// t.Run("Read errors opening the file", func(t *testing.T) { +// openErr := errors.New("open /tmp/file12345: no such file or directory") +// _, err := Read("/tmp/file12345") +// assert.EqualError(t, err, openErr.Error()) +// }) +// +// t.Run("ReadGz errors opening the file", func(t *testing.T) { +// openErr := errors.New("open /tmp/file12345: no such file or directory") +// _, err := ReadGz("/tmp/file12345") +// assert.EqualError(t, err, openErr.Error()) +// }) +// +// t.Run("ReadGz errors reading the file", func(t *testing.T) { +// readErr := errors.New("open /tmp/file12345: no such file or directory") +// _, err := ReadGz("/tmp/file12345") +// assert.EqualError(t, err, readErr.Error()) +// }) +//} +// +//func TestParser(t *testing.T) { +// parser := NewParser(nil, 256) +// for testIndex, test := range []struct { +// content string +// expected []Fasta +// }{ +// { +// content: ">humen\nGATTACA\nCATGAT", // EOF-ended Fasta not valid +// expected: []Fasta{}, +// }, +// { +// content: ">humen\nGATTACA\nCATGAT\n", +// expected: []Fasta{{Name: "humen", Sequence: "GATTACACATGAT"}}, +// }, +// { +// content: ">doggy or something\nGATTACA\n\nCATGAT\n" + +// ">homunculus\nAAAA\n", +// expected: []Fasta{ +// {Name: "doggy or something", Sequence: "GATTACACATGAT"}, +// {Name: "homunculus", Sequence: "AAAA"}, +// }, +// }, +// } { +// parser.Reset(strings.NewReader(test.content)) +// fastas, err := parser.ParseAll() +// if err != nil { +// t.Fatal(err) +// } +// if len(fastas) != len(test.expected) { +// t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) +// continue +// } +// for index, gotFasta := range fastas { +// expected := test.expected[index] +// if expected != gotFasta { +// t.Errorf("got!=expected: %+v != %+v", gotFasta, expected) +// } +// } +// } +//} +// +//func TestParseBytes(t *testing.T) { +// // Partial read test. +// const testFasta = ">0\nGAT\n>1\nCAC\n" +// p := NewParser(strings.NewReader(testFasta), 256) +// result1, bytesRead, err := p.ParseByteLimited(1) +// if err != nil { +// t.Fatal(err) +// } +// if len(result1) != 1 { +// t.Error("expected result of length 1 (partial read)") +// } +// expectBytesRead := 1 + strings.Index(testFasta[1:], ">") +// if int(bytesRead) != expectBytesRead { +// t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) +// } +// +// // Full read test. +// p.Reset(strings.NewReader(testFasta)) +// result1, bytesRead, err = p.ParseByteLimited(100) +// if err != nil { +// t.Fatal(err) +// } +// if len(result1) != 2 { +// t.Error("expected result of length 2 (full read)") +// } +// expectBytesRead = len(testFasta) +// if int(bytesRead) != expectBytesRead { +// t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) +// } +//} +// +//// TestReadEmptyFasta tests that an empty fasta file is parsed correctly. +//func TestReadEmptyFasta(t *testing.T) { +// fastas, err := Parse(strings.NewReader(emptyFasta)) +// if err == nil { +// t.Errorf("expected error reading empty fasta stream") +// } +// if len(fastas) != 0 { +// t.Errorf("expected 1 fastas, got %d", len(fastas)) +// } +//} +// +//// TestParseBufferFail tests that the parser fails when the buffer is too small. +//func TestParseBufferFail(t *testing.T) { +// // Error only triggered when there is a line greater than 16 bytes in length. +// // This is because the underlying implementation uses bufio.Reader, which auto-sets +// // the buffer to 16, the minimum length permissible for the implementation. +// // We should not test for this anyways because we may change from using +// // bufio.Reader.ReadSlice to bufio.Reader.ReadLine, which allows for incomplete +// // line parsing, though this makes parsing more difficult. +// const testFasta = ">0\n0123456789ABCDEF\n>1\nCAC\n" +// parser := NewParser(strings.NewReader(testFasta), 2) +// fasta, err := parser.ParseAll() +// _ = fasta +// if err == nil { +// t.Error("expected error, got nil") +// } +//} +// +//func TestParseEOFAfterName(t *testing.T) { +// const testFasta = ">OK Fasta\nABGABA\n>NotOKFasta\n" +// parser := NewParser(strings.NewReader(testFasta), 2) +// fasta, err := parser.ParseAll() +// _ = fasta +// if err == nil { +// t.Error("expected error, got nil") +// } +//} From 4fb41ff1d140e98b4a65511f148ad2501cbc1f54 Mon Sep 17 00:00:00 2001 From: Koeng101 Date: Fri, 1 Sep 2023 15:59:40 -0700 Subject: [PATCH 04/59] Update bio/fastq/fastq.go Co-authored-by: Willow Carretero Chavez --- bio/fastq/fastq.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/fastq/fastq.go b/bio/fastq/fastq.go index de682597..d0b352a6 100644 --- a/bio/fastq/fastq.go +++ b/bio/fastq/fastq.go @@ -173,7 +173,7 @@ func (parser *Parser) ParseNext() (Fastq, int64, error) { var newSequence []byte for _, char := range sequence { newSequence = append(newSequence, char) - if !strings.Contains("ATGCN", string(char)) { + if !strings.ContainsRune("ATGCN", rune(char)) { return Fastq{}, totalRead, errors.New("Only letters ATGCN are allowed for DNA/RNA in fastq file. Got letter: " + string(char)) } } From 24522821d208220342bb7516a31ac05fbd59e5d2 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 16:00:04 -0700 Subject: [PATCH 05/59] update fasta --- bio/bio.go | 28 ++- bio/bio_test.go | 5 +- bio/fasta/example_test.go | 156 ++++++----------- bio/fasta/fasta.go | 350 +++++++++---------------------------- bio/fasta/fasta_test.go | 357 ++++++++++++++++++-------------------- 5 files changed, 322 insertions(+), 574 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 44b72964..64e771cf 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -49,28 +49,24 @@ Lower level interfaces ******************************************************************************/ -type LowLevelParser[DataType fasta.Fasta, DataTypeHeader fasta.Header] interface { +type LowLevelParser[DataType fasta.Record, DataTypeHeader fasta.Header] interface { Header() (DataTypeHeader, int64, error) Next() (DataType, int64, error) } -type Writer interface { - Write(io.Writer) (int, error) -} - /****************************************************************************** Higher level parse ******************************************************************************/ -type Parser[DataType fasta.Fasta, DataTypeHeader fasta.Header] struct { +type Parser[DataType fasta.Record, DataTypeHeader fasta.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } -var emptyParser Parser[fasta.Fasta, fasta.Header] = Parser[fasta.Fasta, fasta.Header]{} +var emptyParser Parser[fasta.Record, fasta.Header] = Parser[fasta.Record, fasta.Header]{} -func NewParser(format Format, r io.Reader) (*Parser[fasta.Fasta, fasta.Header], error) { +func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { var maxLineLength int switch format { case Fasta: @@ -79,10 +75,10 @@ func NewParser(format Format, r io.Reader) (*Parser[fasta.Fasta, fasta.Header], return NewParserWithMaxLine(format, r, maxLineLength) } -func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (*Parser[fasta.Fasta, fasta.Header], error) { +func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { switch format { case Fasta: - return &Parser[fasta.Fasta, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil + return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil } return nil, nil } @@ -93,7 +89,7 @@ Parser read functions ******************************************************************************/ -func ReadWithMaxLine(format Format, path string, maxLineLength int) (*Parser[fasta.Fasta, fasta.Header], error) { +func ReadWithMaxLine(format Format, path string, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { file, err := os.Open(path) if err != nil { return &emptyParser, err @@ -101,7 +97,7 @@ func ReadWithMaxLine(format Format, path string, maxLineLength int) (*Parser[fas return NewParserWithMaxLine(format, file, maxLineLength) } -func Read(format Format, path string) (*Parser[fasta.Fasta, fasta.Header], error) { +func Read(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { file, err := os.Open(path) if err != nil { return &emptyParser, err @@ -153,13 +149,13 @@ Writer functions ******************************************************************************/ -func WriteAll(data []Writer, header Writer, w io.Writer) error { - _, err := header.Write(w) +func WriteAll(data []io.WriterTo, header io.WriterTo, w io.Writer) error { + _, err := header.WriteTo(w) if err != nil { return err } for _, datum := range data { - _, err = datum.Write(w) + _, err = datum.WriteTo(w) if err != nil { return err } @@ -167,7 +163,7 @@ func WriteAll(data []Writer, header Writer, w io.Writer) error { return nil } -func WriteFile(data []Writer, header Writer, path string) error { +func WriteFile(data []io.WriterTo, header io.WriterTo, path string) error { file, err := os.Open(path) if err != nil { return err diff --git a/bio/bio_test.go b/bio/bio_test.go index 4637ffd0..976acda8 100644 --- a/bio/bio_test.go +++ b/bio/bio_test.go @@ -1,6 +1,7 @@ package bio_test import ( + "io" "testing" "github.com/TimothyStiles/poly/bio" @@ -8,6 +9,6 @@ import ( ) func TestWriter(t *testing.T) { - var _ bio.LowLevelParser[fasta.Fasta, fasta.Header] = &fasta.Parser{} - var _ bio.Writer = &fasta.Fasta{} + var _ bio.LowLevelParser[fasta.Record, fasta.Header] = &fasta.Parser{} + var _ io.WriterTo = &fasta.Record{} } diff --git a/bio/fasta/example_test.go b/bio/fasta/example_test.go index e99accda..ce642fcf 100644 --- a/bio/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -2,111 +2,61 @@ package fasta_test import ( _ "embed" + "errors" + "fmt" + "io" + "os" + "strings" + + "github.com/TimothyStiles/poly/bio/fasta" ) //go:embed data/base.fasta var baseFasta string -//// This example shows how to open a file with the fasta parser. The sequences -//// within that file can then be analyzed further with different software. -//func Example_basic() { -// fastas, _ := fasta.Read("data/base.fasta") -// fmt.Println(fastas[1].Sequence) -// // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* -//} -// -//// ExampleRead shows basic usage for Read. -//func ExampleRead() { -// fastas, _ := fasta.Read("data/base.fasta") -// fmt.Println(fastas[0].Name) -// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -//} -// -//// ExampleParse shows basic usage for Parse. -//func ExampleParse() { -// file, _ := os.Open("data/base.fasta") -// fastas, _ := fasta.Parse(file) -// -// fmt.Println(fastas[0].Name) -// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -//} -// -//// ExampleBuild shows basic usage for Build -//func ExampleBuild() { -// fastas, _ := fasta.Read("data/base.fasta") // get example data -// var buffer bytes.Buffer // Initialize a buffer to write fastas into -// for _, fasta := range fastas { -// _ = fasta.Write(&buffer) // build a fasta byte array -// -// } -// firstLine := string(bytes.Split(buffer.Bytes(), []byte("\n"))[0]) -// -// fmt.Println(firstLine) -// // Output: >gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -//} -// -//// ExampleWrite shows basic usage of the writer. -//func ExampleWrite() { -// fastas, _ := fasta.Read("data/base.fasta") // get example data -// _ = fasta.WriteFile(fastas, "data/test.fasta") // write it out again -// testSequence, _ := fasta.Read("data/test.fasta") // read it in again -// -// os.Remove("data/test.fasta") // getting rid of test file -// -// fmt.Println(testSequence[0].Name) -// // Output: gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -//} -// -//// ExampleReadGz shows basic usage for ReadGz on a gzip'd file. -//func ExampleReadGz() { -// fastas, _ := fasta.ReadGz("data/uniprot_1mb_test.fasta.gz") -// var name string -// for _, fasta := range fastas { -// name = fasta.Name -// } -// -// fmt.Println(name) -// // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 -//} -// -//// ExampleReadGzConcurrent shows how to use the concurrent parser for larger files. -//func ExampleReadGzConcurrent() { -// fastas := make(chan fasta.Fasta, 1000) -// go fasta.ReadGzConcurrent("data/uniprot_1mb_test.fasta.gz", fastas) -// var name string -// for fasta := range fastas { -// name = fasta.Name -// } -// -// fmt.Println(name) -// // Output: sp|P86857|AGP_MYTCA Alanine and glycine-rich protein (Fragment) OS=Mytilus californianus OX=6549 PE=1 SV=1 -//} -// -//// ExampleReadConcurrent shows how to use the concurrent parser for decompressed fasta files. -//func ExampleReadConcurrent() { -// fastas := make(chan fasta.Fasta, 100) -// go fasta.ReadConcurrent("data/base.fasta", fastas) -// var name string -// for fasta := range fastas { -// name = fasta.Name -// } -// -// fmt.Println(name) -// // Output: MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken -//} -// -//func ExampleParser() { -// parser := fasta.NewParser(strings.NewReader(baseFasta), 256) -// for { -// fasta, _, err := parser.Next() -// if err != nil { -// fmt.Println(err) -// break -// } -// fmt.Println(fasta.Name) -// } -// //Output: -// // gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -// // MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken -// // EOF -//} +// This example shows how to open a file with the fasta parser. The sequences +// within that file can then be analyzed further with different software. +func Example_basic() { + fastaString := ">testing\nATGC\n" + file := strings.NewReader(fastaString) // this "file" can be replaced with os.Open + parser := fasta.NewParser(file, 32*1024) // Initialize a parser for this file + var records []fasta.Record + for { + record, _, err := parser.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + break + } + records = append(records, record) + } + fmt.Println(records[0].Sequence) + // Output: ATGC +} + +// ExampleWrite shows basic usage of the writer. +func ExampleWrite() { + // Get a fasta record + fastaString := ">testing\nATGC\n" + fakeFile := strings.NewReader(fastaString) + parser := fasta.NewParser(fakeFile, 32*1024) + record, _, _ := parser.Next() + + // Write it to a file + file, _ := os.Create("data/test.fasta") + _, _ = record.WriteTo(file) + file.Close() + + // Read that file + file2, _ := os.Open("data/test.fasta") + parser = fasta.NewParser(file2, 32*1024) + newRecord, _, _ := parser.Next() + file2.Close() + + // Remove the test file + os.Remove("data/test.fasta") + + fmt.Println(newRecord.Identifier) + // Output: testing +} diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index a0830502..885eafad 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -13,10 +13,9 @@ package fasta import ( "bufio" - "errors" + "bytes" "fmt" "io" - "unsafe" ) /****************************************************************************** @@ -51,31 +50,30 @@ Keoni ******************************************************************************/ -// Fasta is a struct representing a single Fasta file element with a Name and its corresponding Sequence. -type Fasta struct { - Name string `json:"name"` - Sequence string `json:"sequence"` +// Record is a struct representing a single Record file element with a Identifier and its corresponding Sequence. +type Record struct { + Identifier string `json:"identifier"` + Sequence string `json:"sequence"` } +// Header is a blank struct, needed for compatibility with bio parsers. It contains nothing. type Header struct{} -//// Parse parses a given Fasta file into an array of Fasta structs. Internally, it uses ParseFastaConcurrent. -//func Parse(r io.Reader) ([]Fasta, error) { -// // 32kB is a magic number often used by the Go stdlib for parsing. We multiply it by two. -// const maxLineSize = 2 * 32 * 1024 -// parser := NewParser(r, maxLineSize) -// return parser.ParseAll() -//} - // Parser is a flexible parser that provides ample // control over reading fasta-formatted sequences. // It is initialized with NewParser. type Parser struct { // reader keeps state of current reader. - reader bufio.Reader - line uint + reader bufio.Scanner + buff bytes.Buffer + identifier string + start bool + line uint + more bool + position int64 } +// Header returns a identifier with nothing, 0, and nil. func (p *Parser) Header() (Header, int64, error) { return Header{}, 0, nil } @@ -83,52 +81,16 @@ func (p *Parser) Header() (Header, int64, error) { // NewParser returns a Parser that uses r as the source // from which to parse fasta formatted sequences. func NewParser(r io.Reader, maxLineSize int) *Parser { + scanner := bufio.NewScanner(r) + buf := make([]byte, maxLineSize) + scanner.Buffer(buf, maxLineSize) return &Parser{ - reader: *bufio.NewReaderSize(r, maxLineSize), + reader: *scanner, + start: true, + more: true, } } -//// ParseAll parses all sequences in underlying reader only returning non-EOF errors. -//// It returns all valid fasta sequences up to error if encountered. -//func (parser *Parser) ParseAll() ([]Fasta, error) { -// return parser.ParseN(math.MaxInt) -//} -// -//// ParseN parses up to maxSequences fasta sequences from the Parser's underlying reader. -//// ParseN does not return EOF if encountered. -//// If an non-EOF error is encountered it returns it and all correctly parsed sequences up to then. -//func (parser *Parser) ParseN(maxSequences int) (fastas []Fasta, err error) { -// for counter := 0; counter < maxSequences; counter++ { -// fasta, newWrittenBytes, err := parser.Next() -// if err != nil { -// if errors.Is(err, io.EOF) { -// err = nil // EOF not treated as parsing error. -// } -// return fastas, err -// } -// fastas = append(fastas, fasta) -// } -// return fastas, nil -//} -// -//// ParseByteLimited parses fastas until byte limit is reached. -//// This is NOT a hard limit. To set a hard limit on bytes read use a -//// io.LimitReader to wrap the reader passed to the Parser. -//func (parser *Parser) ParseByteLimited(byteLimit int64) (fastas []Fasta, bytesRead int64, err error) { -// for bytesRead < byteLimit { -// fasta, n, err := parser.Next() -// bytesRead += n -// if err != nil { -// if errors.Is(err, io.EOF) { -// err = nil // EOF not treated as parsing error. -// } -// return fastas, bytesRead, err -// } -// fastas = append(fastas, fasta) -// } -// return fastas, bytesRead, nil -//} - // Next reads next fasta genome in underlying reader and returns the result // and the amount of bytes read during the call. // Next only returns an error if it: @@ -140,241 +102,108 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // It is worth noting the amount of bytes read are always right up to before // the next fasta starts which means this function can effectively be used // to index where fastas start in a file or string. -func (parser *Parser) Next() (Fasta, int64, error) { - if _, err := parser.reader.Peek(1); err != nil { - // Early return on error. Probably will be EOF. - return Fasta{}, 0, err +func (p *Parser) Next() (Record, int64, error) { + if p.more == false { + return Record{}, 0, io.EOF } - // Initialization of parser state variables. - var ( - // Parser looks for a line starting with '>' (U+003E) - // that contains the next fasta sequence name. - lookingForName = true - seqName string - sequence, line []byte - err error - totalRead int64 - ) - - // parse loop begins here. - for { - line, err = parser.reader.ReadSlice('\n') - isSkippable := len(line) <= 1 || line[0] == ';' // OR short circuits so no panic here. - totalRead += int64(len(line)) - parser.line++ - - // More general case of error handling. - if err != nil { - isEOF := errors.Is(err, io.EOF) - if isSkippable { - if isEOF { - // got EOF on a empty or commented line. - err = nil - } - break - } else if errors.Is(err, bufio.ErrBufferFull) { - // Buffer size too small to read fasta line. - return Fasta{}, totalRead, fmt.Errorf("line %d too large for buffer, use larger maxLineSize: %w", parser.line+1, err) - } else if !isEOF { - return Fasta{}, totalRead, err // Unexpected error. - } - - // So got to this point the line is probably OK, we will return a Fasta. - // with the EOF error. - sequence = append(sequence, line...) + for p.reader.Scan() { + line := p.reader.Bytes() + p.position += int64(len(line)) + if p.reader.Err() != nil { break } - - line = line[:len(line)-1] // Exclude newline delimiter. - peek, _ := parser.reader.Peek(1) - if !lookingForName && len(peek) == 1 && peek[0] == '>' { - // We are currently parsing a fasta and next line contains a new fasta. - // We handle this situation by appending current line to sequence if not a comment - // and ending the current fasta parsing. - if !isSkippable { - sequence = append(sequence, line...) - } - break - } else if isSkippable { + p.line++ + switch { + // if there's nothing on this line skip this iteration of the loop + case len(line) == 0: continue - } - - if lookingForName { - if line[0] == '>' { - // We got the start of a fasta. - seqName = string(line[1:]) - lookingForName = false - } - // This continue will also skip line if we are looking for name - // and the current line does not contain the name. + // if it's a comment skip this line + case line[0] == ';': continue + // start of file with no identifier, error + case line[0] != '>' && p.start: + err := fmt.Errorf("invalid input: missing sequence identifier for sequence starting at line %d", p.line) + record, _ := p.newRecord() + return record, p.position, err + // start of a fasta line + case line[0] != '>': + p.buff.Write(line) + // Process normal new lines + case line[0] == '>' && !p.start: + record, err := p.newRecord() + // New name + p.identifier = string(line[1:]) + return record, p.position, err + // Process first line of file + case line[0] == '>' && p.start: + p.identifier = string(line[1:]) + p.start = false } - // If we got to this point we are currently inside of the fasta - // sequence contents. We append line to what we found of sequence so far. - sequence = append(sequence, line...) - } // parse loop ends here. - - // Parsing ended. Check for inconsistencies. - if lookingForName { - return Fasta{}, totalRead, fmt.Errorf("did not find fasta start '>', got to line %d: %w", parser.line, err) - } - if !lookingForName && len(sequence) == 0 { - // We found a fasta name but no sequence to go with it. - return Fasta{}, totalRead, fmt.Errorf("empty fasta sequence for %q, got to line %d: %w", seqName, parser.line, err) } - fasta := Fasta{ - Name: seqName, - Sequence: *(*string)(unsafe.Pointer(&sequence)), // Stdlib strings.Builder.String() does this so it *should* be safe. + p.more = false + // Add final sequence in file + record, err := p.newRecord() + if err != nil { + return record, p.position, err } - // Gotten to this point err is non-nil only in EOF case. - // We report this error to note the fasta may be incomplete/corrupt - // like in the case of using an io.LimitReader wrapping the underlying reader. - // We return the fasta as well since some libraries generate fastas with no - // ending newline i.e Zymo. It is up to the user to decide whether they want - // an EOF-ended fasta or not, the rest of this library discards EOF-ended fastas. - return fasta, totalRead, err + return record, p.position, p.reader.Err() } -//// ParseConcurrent concurrently parses a given Fasta file in an io.Reader into a channel of Fasta structs. -//func ParseConcurrent(r io.Reader, sequences chan<- Fasta) { -// // Initialize necessary variables -// var sequenceLines []string -// var name string -// start := true -// -// // Start the scanner -// scanner := bufio.NewScanner(r) -// for scanner.Scan() { -// line := scanner.Text() -// switch { -// // if there's nothing on this line skip this iteration of the loop -// case len(line) == 0: -// continue -// // if it's a comment skip this line -// case line[0:1] == ";": -// continue -// // start of a fasta line -// case line[0:1] != ">": -// sequenceLines = append(sequenceLines, line) -// // Process normal new lines -// case line[0:1] == ">" && !start: -// sequence := strings.Join(sequenceLines, "") -// newFasta := Fasta{ -// Name: name, -// Sequence: sequence} -// // Reset sequence lines -// sequenceLines = []string{} -// // New name -// name = line[1:] -// sequences <- newFasta -// // Process first line of file -// case line[0:1] == ">" && start: -// name = line[1:] -// start = false -// } -// } -// // Add final sequence in file to channel -// sequence := strings.Join(sequenceLines, "") -// newFasta := Fasta{ -// Name: name, -// Sequence: sequence} -// sequences <- newFasta -// close(sequences) -//} - -/****************************************************************************** - -Start of Read functions - -******************************************************************************/ +func (p *Parser) newRecord() (Record, error) { + sequence := p.buff.String() + if sequence == "" { + return Record{}, fmt.Errorf("%s has no sequence", p.identifier) + } + record := Record{ + Identifier: p.identifier, + Sequence: sequence, + } + // Reset sequence buffer + p.buff.Reset() + return record, nil +} -//// ReadGzConcurrent concurrently reads a gzipped Fasta file into a Fasta channel. -//// Deprecated: Use Parser.Next() instead. -//func ReadGzConcurrent(path string, sequences chan<- Fasta) { -// file, _ := os.Open(path) // TODO: these errors need to be handled/logged -// reader, _ := gzip.NewReader(file) -// go func() { -// defer file.Close() -// defer reader.Close() -// ParseConcurrent(reader, sequences) -// }() -//} -// -//// ReadConcurrent concurrently reads a flat Fasta file into a Fasta channel. -//func ReadConcurrent(path string, sequences chan<- Fasta) { -// file, _ := os.Open(path) // TODO: these errors need to be handled/logged -// go func() { -// defer file.Close() -// ParseConcurrent(file, sequences) -// }() -//} -// -//// ReadGz reads a gzipped file into an array of Fasta structs. -//func ReadGz(path string) ([]Fasta, error) { -// file, err := os.Open(path) -// if err != nil { -// return nil, err -// } -// defer file.Close() -// reader, err := gzip.NewReader(file) -// if err != nil { -// return nil, err -// } -// defer reader.Close() -// return Parse(reader) -//} -// -//// Read reads a file into an array of Fasta structs -//func Read(path string) ([]Fasta, error) { -// file, err := os.Open(path) -// if err != nil { -// return nil, err -// } -// defer file.Close() -// return Parse(file) -//} -// ///****************************************************************************** // //Start of Write functions // //******************************************************************************/ -// Write converts a Fastas array into a byte array to be written to a file. -func (fasta *Fasta) Write(w io.Writer) (int, error) { - var writtenBytes int +// WriteTo implements the io.WriterTo interface for fasta records. +func (record *Record) WriteTo(w io.Writer) (int64, error) { + var writtenBytes int64 var newWrittenBytes int newWrittenBytes, err := w.Write([]byte(">")) if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes - newWrittenBytes, err = w.Write([]byte(fasta.Name)) + writtenBytes += int64(newWrittenBytes) + newWrittenBytes, err = w.Write([]byte(record.Identifier)) if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes + writtenBytes += int64(newWrittenBytes) newWrittenBytes, err = w.Write([]byte("\n")) if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes + writtenBytes += int64(newWrittenBytes) lineCount := 0 // write the fasta sequence 80 characters at a time - for _, character := range fasta.Sequence { + for _, character := range record.Sequence { newWrittenBytes, err = w.Write([]byte{byte(character)}) if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes + writtenBytes += int64(newWrittenBytes) lineCount++ if lineCount == 80 { newWrittenBytes, err = w.Write([]byte("\n")) if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes + writtenBytes += int64(newWrittenBytes) lineCount = 0 } } @@ -382,23 +211,6 @@ func (fasta *Fasta) Write(w io.Writer) (int, error) { if err != nil { return writtenBytes, err } - writtenBytes += newWrittenBytes + writtenBytes += int64(newWrittenBytes) return writtenBytes, nil } - -//// WriteFile writes a fasta array to a file. -//func WriteFile(fastas []Fasta, path string) error { -// file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0644) -// if err != nil { -// return err -// } -// defer file.Close() -// -// for _, fasta := range fastas { -// err = fasta.Write(file) -// if err != nil { -// return err -// } -// } -// return nil -//} diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index be016768..a12395bc 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -1,191 +1,180 @@ package fasta +import ( + "bytes" + "errors" + "io" + "strings" + "testing" +) + const ( // This fasta stream contains no Fasta. emptyFasta = "testing\natagtagtagtagtagatgatgatgatgagatg\n\n\n\n\n\n\n\n\n\n\n" ) -//// Initialized at TestMain. -//var uniprotFasta string -// -//func TestMain(m *testing.M) { -// const uniprotFastaGzFilePath = "data/uniprot_1mb_test.fasta.gz" -// // unzip uniprot data and create uniprotFasta string for benchmarks and testing. -// uniprotFastaGzFile, err := os.Open(uniprotFastaGzFilePath) -// if err != nil { -// panic(uniprotFastaGzFilePath + " required for tests!") -// } -// defer uniprotFastaGzFile.Close() -// -// uniprotFastaGzReader, _ := gzip.NewReader(uniprotFastaGzFile) -// defer uniprotFastaGzReader.Close() -// -// uniprotFastaBytes, err := io.ReadAll(uniprotFastaGzReader) -// if err != nil { -// panic(err) -// } -// -// uniprotFasta = string(uniprotFastaBytes) -// m.Run() -//} -// -//func BenchmarkFastaLegacy(b *testing.B) { -// var fastas []Fasta -// var err error -// for i := 0; i < b.N; i++ { -// fastas, err = Parse(strings.NewReader(uniprotFasta)) -// if err != nil { -// b.Fatal(err) -// } -// } -// _ = fastas -//} -// -//func BenchmarkParser(b *testing.B) { -// var fastaRecords []Fasta -// for i := 0; i < b.N; i++ { -// parser := NewParser(strings.NewReader(uniprotFasta), 256) -// for { -// fasta, _, err := parser.Next() -// if err != nil { -// if !errors.Is(err, io.EOF) { -// b.Fatal(err) -// } -// break -// } -// fastaRecords = append(fastaRecords, fasta) -// } -// fastaRecords = nil // Reset memory -// } -// _ = fastaRecords -//} -// -//func TestRead_error(t *testing.T) { -// t.Run("Read errors opening the file", func(t *testing.T) { -// openErr := errors.New("open /tmp/file12345: no such file or directory") -// _, err := Read("/tmp/file12345") -// assert.EqualError(t, err, openErr.Error()) -// }) -// -// t.Run("ReadGz errors opening the file", func(t *testing.T) { -// openErr := errors.New("open /tmp/file12345: no such file or directory") -// _, err := ReadGz("/tmp/file12345") -// assert.EqualError(t, err, openErr.Error()) -// }) -// -// t.Run("ReadGz errors reading the file", func(t *testing.T) { -// readErr := errors.New("open /tmp/file12345: no such file or directory") -// _, err := ReadGz("/tmp/file12345") -// assert.EqualError(t, err, readErr.Error()) -// }) -//} -// -//func TestParser(t *testing.T) { -// parser := NewParser(nil, 256) -// for testIndex, test := range []struct { -// content string -// expected []Fasta -// }{ -// { -// content: ">humen\nGATTACA\nCATGAT", // EOF-ended Fasta not valid -// expected: []Fasta{}, -// }, -// { -// content: ">humen\nGATTACA\nCATGAT\n", -// expected: []Fasta{{Name: "humen", Sequence: "GATTACACATGAT"}}, -// }, -// { -// content: ">doggy or something\nGATTACA\n\nCATGAT\n" + -// ">homunculus\nAAAA\n", -// expected: []Fasta{ -// {Name: "doggy or something", Sequence: "GATTACACATGAT"}, -// {Name: "homunculus", Sequence: "AAAA"}, -// }, -// }, -// } { -// parser.Reset(strings.NewReader(test.content)) -// fastas, err := parser.ParseAll() -// if err != nil { -// t.Fatal(err) -// } -// if len(fastas) != len(test.expected) { -// t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) -// continue -// } -// for index, gotFasta := range fastas { -// expected := test.expected[index] -// if expected != gotFasta { -// t.Errorf("got!=expected: %+v != %+v", gotFasta, expected) -// } -// } -// } -//} -// -//func TestParseBytes(t *testing.T) { -// // Partial read test. -// const testFasta = ">0\nGAT\n>1\nCAC\n" -// p := NewParser(strings.NewReader(testFasta), 256) -// result1, bytesRead, err := p.ParseByteLimited(1) -// if err != nil { -// t.Fatal(err) -// } -// if len(result1) != 1 { -// t.Error("expected result of length 1 (partial read)") -// } -// expectBytesRead := 1 + strings.Index(testFasta[1:], ">") -// if int(bytesRead) != expectBytesRead { -// t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) -// } -// -// // Full read test. -// p.Reset(strings.NewReader(testFasta)) -// result1, bytesRead, err = p.ParseByteLimited(100) -// if err != nil { -// t.Fatal(err) -// } -// if len(result1) != 2 { -// t.Error("expected result of length 2 (full read)") -// } -// expectBytesRead = len(testFasta) -// if int(bytesRead) != expectBytesRead { -// t.Errorf("expected %d bytes read, got %d bytes read", expectBytesRead, bytesRead) -// } -//} -// -//// TestReadEmptyFasta tests that an empty fasta file is parsed correctly. -//func TestReadEmptyFasta(t *testing.T) { -// fastas, err := Parse(strings.NewReader(emptyFasta)) -// if err == nil { -// t.Errorf("expected error reading empty fasta stream") -// } -// if len(fastas) != 0 { -// t.Errorf("expected 1 fastas, got %d", len(fastas)) -// } -//} -// -//// TestParseBufferFail tests that the parser fails when the buffer is too small. -//func TestParseBufferFail(t *testing.T) { -// // Error only triggered when there is a line greater than 16 bytes in length. -// // This is because the underlying implementation uses bufio.Reader, which auto-sets -// // the buffer to 16, the minimum length permissible for the implementation. -// // We should not test for this anyways because we may change from using -// // bufio.Reader.ReadSlice to bufio.Reader.ReadLine, which allows for incomplete -// // line parsing, though this makes parsing more difficult. -// const testFasta = ">0\n0123456789ABCDEF\n>1\nCAC\n" -// parser := NewParser(strings.NewReader(testFasta), 2) -// fasta, err := parser.ParseAll() -// _ = fasta -// if err == nil { -// t.Error("expected error, got nil") -// } -//} -// -//func TestParseEOFAfterName(t *testing.T) { -// const testFasta = ">OK Fasta\nABGABA\n>NotOKFasta\n" -// parser := NewParser(strings.NewReader(testFasta), 2) -// fasta, err := parser.ParseAll() -// _ = fasta -// if err == nil { -// t.Error("expected error, got nil") -// } -//} +func TestHeader(t *testing.T) { + _, _, err := NewParser(nil, 256).Header() + if err != nil { + t.Errorf("Header should never be nil") + } +} + +func TestParser(t *testing.T) { + for testIndex, test := range []struct { + content string + expected []Record + }{ + { + content: ">humen\nGATTACA\nCATGAT", // EOF-ended Fasta is valid + expected: []Record{{Identifier: "humen", Sequence: "GATTACACATGAT"}}, + }, + { + content: ">humen\nGATTACA\nCATGAT\n", + expected: []Record{{Identifier: "humen", Sequence: "GATTACACATGAT"}}, + }, + { + content: ">doggy or something\nGATTACA\n\nCATGAT\n\n;a fun comment\n" + + ">homunculus\nAAAA\n", + expected: []Record{ + {Identifier: "doggy or something", Sequence: "GATTACACATGAT"}, + {Identifier: "homunculus", Sequence: "AAAA"}, + }, + }, + } { + var fastas []Record + parser := NewParser(strings.NewReader(test.content), 256) + for { + fa, _, err := parser.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } else { + t.Errorf("Got error: %s", err) + } + break + } + fastas = append(fastas, fa) + } + if len(fastas) != len(test.expected) { + t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) + continue + } + for index, gotFasta := range fastas { + expected := test.expected[index] + if expected != gotFasta { + t.Errorf("got!=expected: %+v != %+v", gotFasta, expected) + } + } + } +} + +// TestReadEmptyFasta tests that an empty fasta file is parsed correctly. +func TestReadEmptyFasta(t *testing.T) { + var fastas []Record + var targetError error + emptyFasta := "testing\natagtagtagtagtagatgatgatgatgagatg\n\n\n\n\n\n\n\n\n\n\n" + parser := NewParser(strings.NewReader(emptyFasta), 256) + for { + fa, _, err := parser.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + targetError = err + break + } + fastas = append(fastas, fa) + } + if targetError == nil { + t.Errorf("expected error reading empty fasta stream") + } + if len(fastas) != 0 { + t.Errorf("expected 1 fastas, got %d", len(fastas)) + } +} + +func TestReadEmptySequence(t *testing.T) { + var fastas []Record + var targetError error + emptyFasta := ">testing\natagtagtagtagtagatgatgatgatgagatg\n>testing2\n\n\n\n\n\n\n\n\n\n" + parser := NewParser(strings.NewReader(emptyFasta), 256) + for { + fa, _, err := parser.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + targetError = err + break + } + fastas = append(fastas, fa) + } + if targetError == nil { + t.Errorf("expected error reading empty fasta sequence stream: %s", targetError) + } +} + +func TestBufferSmall(t *testing.T) { + var fastas []Record + var targetError error + emptyFasta := ">test\natagtagtagtagtagatgatgatgatgagatg\n>test\n\n\n\n\n\n\n\n\n\n" + parser := NewParser(strings.NewReader(emptyFasta), 8) + for { + fa, _, err := parser.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + targetError = err + break + } + fastas = append(fastas, fa) + } + if targetError == nil { + t.Errorf("expected error with too small of a buffer") + } +} + +// The following functions help test for writing with a limit in order to get +// that sweet sweet test coverage. +// LimitedWriter wraps another io.Writer and returns an error if more than maxSize bytes are written. +type LimitedWriter struct { + w io.Writer + written int64 + maxSize int64 +} + +func NewLimitedWriter(w io.Writer, maxSize int64) *LimitedWriter { + return &LimitedWriter{ + w: w, + written: 0, + maxSize: maxSize, + } +} + +func (lw *LimitedWriter) Write(p []byte) (int, error) { + if int64(len(p)) > (lw.maxSize - lw.written) { + return 0, errors.New("write exceeds maximum size") + } + n, err := lw.w.Write(p) + lw.written += int64(n) + return n, err +} + +func TestWrite(t *testing.T) { + // 81 polyA + s := ">test\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" + parser := NewParser(strings.NewReader(s), 1024) + fa, _, err := parser.Next() + if err != nil { + t.Errorf("Failed to read polyA: %s", err) + } + byteSizes := []int{0, 1, 5, 6, 7, 85, 86, 87, 89, 128} + for _, i := range byteSizes { + var buf bytes.Buffer + writer := NewLimitedWriter(&buf, int64(i)) + _, _ = fa.WriteTo(writer) + } + +} From 16fbcbdcce04aaec21a180fc114ed0135646aebd Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 16:09:18 -0700 Subject: [PATCH 06/59] add fasta updates and parser --- bio/bio.go | 51 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 64e771cf..cd6b2caa 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -5,7 +5,9 @@ package bio import ( "bufio" + "errors" "io" + "math" "os" "github.com/TimothyStiles/poly/bio/fasta" @@ -31,16 +33,16 @@ const ( // longer. We use the default maxLineLength from bufio unless there is a // particular reason to use a different number. const defaultMaxLineLength int = bufio.MaxScanTokenSize // 64kB is a magic number often used by the Go stdlib for parsing. -var ( - Fasta_DefaultMaxLineLength = defaultMaxLineLength - Fastq_DefaultMaxLineLength = 8 * 1024 * 1024 // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. - Gff_DefaultMaxLineLength = defaultMaxLineLength - Genbank_DefaultMaxLineLength = defaultMaxLineLength - Slow5_DefaultMaxLineLength = 128 * 1024 * 1024 // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. - Pileup_DefaultMaxLineLength = defaultMaxLineLength - Uniprot_DefaultMaxLineLength = defaultMaxLineLength - Rebase_DefaultMaxLineLength = defaultMaxLineLength -) +var DefaultMaxLengths = map[Format]int{ + Fasta: defaultMaxLineLength, + Fastq: 8 * 1024 * 1024, // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. + Gff: defaultMaxLineLength, + Genbank: defaultMaxLineLength, + Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. + Pileup: defaultMaxLineLength, + Uniprot: defaultMaxLineLength, + Rebase: defaultMaxLineLength, +} /****************************************************************************** Aug 30, 2023 @@ -70,7 +72,7 @@ func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], var maxLineLength int switch format { case Fasta: - maxLineLength = Fasta_DefaultMaxLineLength + maxLineLength = DefaultMaxLengths[format] } return NewParserWithMaxLine(format, r, maxLineLength) } @@ -120,11 +122,22 @@ func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, int64, erro } func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { - return nil, nil + var records []DataType + for counter := 0; counter < countN; counter++ { + record, _, err := p.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + return records, err + } + records = append(records, record) + } + return records, nil } func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { - return nil, nil + return p.ParseN(math.MaxInt) } func (p *Parser[DataType, DataTypeHeader]) ParseAll() ([]DataType, DataTypeHeader, error) { @@ -140,7 +153,17 @@ func (p *Parser[DataType, DataTypeHeader]) ParseAll() ([]DataType, DataTypeHeade } func (p *Parser[DataType, DataTypeHeader]) ParseConcurrent(channel chan<- DataType) error { - return nil + for { + record, _, err := p.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + close(channel) + return err + } + channel <- record + } } /****************************************************************************** From 382a014ef5ab9b2e52197b7eb25e036313e8bf6b Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 19:34:10 -0700 Subject: [PATCH 07/59] made readability improvements --- bio/bio.go | 12 ++++++------ bio/fasta/fasta.go | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index cd6b2caa..41581150 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -6,6 +6,7 @@ package bio import ( "bufio" "errors" + "fmt" "io" "math" "os" @@ -69,10 +70,9 @@ type Parser[DataType fasta.Record, DataTypeHeader fasta.Header] struct { var emptyParser Parser[fasta.Record, fasta.Header] = Parser[fasta.Record, fasta.Header]{} func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { - var maxLineLength int - switch format { - case Fasta: - maxLineLength = DefaultMaxLengths[format] + maxLineLength, ok := DefaultMaxLengths[format] + if !ok { + return fmt.Errorf("did not find format in default lengths") } return NewParserWithMaxLine(format, r, maxLineLength) } @@ -152,14 +152,14 @@ func (p *Parser[DataType, DataTypeHeader]) ParseAll() ([]DataType, DataTypeHeade return data, header, nil } -func (p *Parser[DataType, DataTypeHeader]) ParseConcurrent(channel chan<- DataType) error { +// Parse to channel parses a +func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataType) error { for { record, _, err := p.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. } - close(channel) return err } channel <- record diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index 885eafad..7f699ed4 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -63,8 +63,8 @@ type Header struct{} // control over reading fasta-formatted sequences. // It is initialized with NewParser. type Parser struct { - // reader keeps state of current reader. - reader bufio.Scanner + // scanner keeps state of current reader. + scanner bufio.Scanner buff bytes.Buffer identifier string start bool @@ -85,9 +85,9 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { buf := make([]byte, maxLineSize) scanner.Buffer(buf, maxLineSize) return &Parser{ - reader: *scanner, - start: true, - more: true, + scanner: *scanner, + start: true, + more: true, } } @@ -106,10 +106,10 @@ func (p *Parser) Next() (Record, int64, error) { if p.more == false { return Record{}, 0, io.EOF } - for p.reader.Scan() { - line := p.reader.Bytes() + for p.scanner.Scan() { + line := p.scanner.Bytes() p.position += int64(len(line)) - if p.reader.Err() != nil { + if p.scanner.Err() != nil { break } p.line++ @@ -146,7 +146,7 @@ func (p *Parser) Next() (Record, int64, error) { if err != nil { return record, p.position, err } - return record, p.position, p.reader.Err() + return record, p.position, p.scanner.Err() } func (p *Parser) newRecord() (Record, error) { From 0bbd05eedf70d7ec6e788a9b6e8ec3e2a700fed8 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 19:36:08 -0700 Subject: [PATCH 08/59] changed ParseWithHeader --- bio/bio.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 41581150..d25a8139 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -72,7 +72,7 @@ var emptyParser Parser[fasta.Record, fasta.Header] = Parser[fasta.Record, fasta. func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { maxLineLength, ok := DefaultMaxLengths[format] if !ok { - return fmt.Errorf("did not find format in default lengths") + return &Parser[fasta.Record, fasta.Header]{}, fmt.Errorf("did not find format in default lengths") } return NewParserWithMaxLine(format, r, maxLineLength) } @@ -140,7 +140,7 @@ func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { return p.ParseN(math.MaxInt) } -func (p *Parser[DataType, DataTypeHeader]) ParseAll() ([]DataType, DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { header, _, err := p.Header() if err != nil { return []DataType{}, DataTypeHeader{}, err From eb68f8189f2de851bae8b6cbec962681a65111fe Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 19:41:25 -0700 Subject: [PATCH 09/59] removed int64 in reads --- bio/bio.go | 14 +++++++------- bio/fasta/example_test.go | 6 +++--- bio/fasta/fasta.go | 19 +++++++++---------- bio/fasta/fasta_test.go | 12 ++++++------ 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index d25a8139..7423d20c 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -53,8 +53,8 @@ Lower level interfaces ******************************************************************************/ type LowLevelParser[DataType fasta.Record, DataTypeHeader fasta.Header] interface { - Header() (DataTypeHeader, int64, error) - Next() (DataType, int64, error) + Header() (DataTypeHeader, error) + Next() (DataType, error) } /****************************************************************************** @@ -113,18 +113,18 @@ Parser higher-level functions ******************************************************************************/ -func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, int64, error) { +func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, error) { return p.LowLevelParser.Next() } -func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, int64, error) { +func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, error) { return p.LowLevelParser.Header() } func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { var records []DataType for counter := 0; counter < countN; counter++ { - record, _, err := p.Next() + record, err := p.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -141,7 +141,7 @@ func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { } func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { - header, _, err := p.Header() + header, err := p.Header() if err != nil { return []DataType{}, DataTypeHeader{}, err } @@ -155,7 +155,7 @@ func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTy // Parse to channel parses a func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataType) error { for { - record, _, err := p.Next() + record, err := p.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. diff --git a/bio/fasta/example_test.go b/bio/fasta/example_test.go index ce642fcf..4ea16727 100644 --- a/bio/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -22,7 +22,7 @@ func Example_basic() { parser := fasta.NewParser(file, 32*1024) // Initialize a parser for this file var records []fasta.Record for { - record, _, err := parser.Next() + record, err := parser.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -41,7 +41,7 @@ func ExampleWrite() { fastaString := ">testing\nATGC\n" fakeFile := strings.NewReader(fastaString) parser := fasta.NewParser(fakeFile, 32*1024) - record, _, _ := parser.Next() + record, _ := parser.Next() // Write it to a file file, _ := os.Create("data/test.fasta") @@ -51,7 +51,7 @@ func ExampleWrite() { // Read that file file2, _ := os.Open("data/test.fasta") parser = fasta.NewParser(file2, 32*1024) - newRecord, _, _ := parser.Next() + newRecord, _ := parser.Next() file2.Close() // Remove the test file diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index 7f699ed4..afc639e5 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -73,9 +73,9 @@ type Parser struct { position int64 } -// Header returns a identifier with nothing, 0, and nil. -func (p *Parser) Header() (Header, int64, error) { - return Header{}, 0, nil +// Header returns a identifier with nothing and nil. +func (p *Parser) Header() (Header, error) { + return Header{}, nil } // NewParser returns a Parser that uses r as the source @@ -102,13 +102,12 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // It is worth noting the amount of bytes read are always right up to before // the next fasta starts which means this function can effectively be used // to index where fastas start in a file or string. -func (p *Parser) Next() (Record, int64, error) { +func (p *Parser) Next() (Record, error) { if p.more == false { - return Record{}, 0, io.EOF + return Record{}, io.EOF } for p.scanner.Scan() { line := p.scanner.Bytes() - p.position += int64(len(line)) if p.scanner.Err() != nil { break } @@ -124,7 +123,7 @@ func (p *Parser) Next() (Record, int64, error) { case line[0] != '>' && p.start: err := fmt.Errorf("invalid input: missing sequence identifier for sequence starting at line %d", p.line) record, _ := p.newRecord() - return record, p.position, err + return record, err // start of a fasta line case line[0] != '>': p.buff.Write(line) @@ -133,7 +132,7 @@ func (p *Parser) Next() (Record, int64, error) { record, err := p.newRecord() // New name p.identifier = string(line[1:]) - return record, p.position, err + return record, err // Process first line of file case line[0] == '>' && p.start: p.identifier = string(line[1:]) @@ -144,9 +143,9 @@ func (p *Parser) Next() (Record, int64, error) { // Add final sequence in file record, err := p.newRecord() if err != nil { - return record, p.position, err + return record, err } - return record, p.position, p.scanner.Err() + return record, p.scanner.Err() } func (p *Parser) newRecord() (Record, error) { diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index a12395bc..4f901d95 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -14,7 +14,7 @@ const ( ) func TestHeader(t *testing.T) { - _, _, err := NewParser(nil, 256).Header() + _, err := NewParser(nil, 256).Header() if err != nil { t.Errorf("Header should never be nil") } @@ -45,7 +45,7 @@ func TestParser(t *testing.T) { var fastas []Record parser := NewParser(strings.NewReader(test.content), 256) for { - fa, _, err := parser.Next() + fa, err := parser.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -76,7 +76,7 @@ func TestReadEmptyFasta(t *testing.T) { emptyFasta := "testing\natagtagtagtagtagatgatgatgatgagatg\n\n\n\n\n\n\n\n\n\n\n" parser := NewParser(strings.NewReader(emptyFasta), 256) for { - fa, _, err := parser.Next() + fa, err := parser.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -100,7 +100,7 @@ func TestReadEmptySequence(t *testing.T) { emptyFasta := ">testing\natagtagtagtagtagatgatgatgatgagatg\n>testing2\n\n\n\n\n\n\n\n\n\n" parser := NewParser(strings.NewReader(emptyFasta), 256) for { - fa, _, err := parser.Next() + fa, err := parser.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -121,7 +121,7 @@ func TestBufferSmall(t *testing.T) { emptyFasta := ">test\natagtagtagtagtagatgatgatgatgagatg\n>test\n\n\n\n\n\n\n\n\n\n" parser := NewParser(strings.NewReader(emptyFasta), 8) for { - fa, _, err := parser.Next() + fa, err := parser.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. @@ -166,7 +166,7 @@ func TestWrite(t *testing.T) { // 81 polyA s := ">test\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" parser := NewParser(strings.NewReader(s), 1024) - fa, _, err := parser.Next() + fa, err := parser.Next() if err != nil { t.Errorf("Failed to read polyA: %s", err) } From 344220c479d152be39c561c614d125f9e67cd0cf Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 20:40:32 -0700 Subject: [PATCH 10/59] add more example tests --- bio/example_test.go | 117 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/bio/example_test.go b/bio/example_test.go index ece11d65..b5d86103 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -1,6 +1,13 @@ package bio_test import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "strings" + + "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/bio/gff" "github.com/TimothyStiles/poly/bio/polyjson" @@ -30,3 +37,113 @@ func Example() { // 2. If you want to convert from one format to another (e.g. genbank to polyjson), you can easily do so with a for-loop and some field mapping. // 3. Every file format is unique but they all share a common interface so you can use them with almost every native function in Poly. } + +// ExampleRead shows an example of reading a file from disk. +func ExampleRead() { + // Read lets you read files from disk into a parser. + parser, _ := bio.Read(bio.Fasta, "fasta/data/base.fasta") + records, _ := parser.Parse() + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleReadGz() { + // ReadGz lets you read gzipped files into a parser. + parser, _ := bio.ReadGz(bio.Fasta, "fasta/data/base.fasta.gz") + records, _ := parser.Parse() + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleReadCompressed() { + // Sometimes you have files with a different compression algorithms. Here + // is how you would read a compressed file without ReadGz. + + // We first make a decoderFunc with a compatible function type + decoderFunc := func(r io.Reader) (io.Reader, error) { + return gzip.NewReader(r) + } + parser, _ := bio.ReadCompressed(bio.Fasta, "fasta/data/base.fasta.gz", decoderFunc) + records, _ := parser.Parse() + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleNewParserGz() { + // First, lets make a file that is gzip'd, represented by this + // buffer. + var file bytes.Buffer + zw := gzip.NewWriter(&file) + _, _ = zw.Write([]byte(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV +EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG +LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL +GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX +IENY + +>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID +FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA +DIDGDGQVNYEEFVQMMTAK*`)) + zw.Close() + + parser, _ := bio.NewParserGz(bio.Fasta, &file) // Make a parser with the gz file + records, _ := parser.Parse() // Parse all data records from file + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleNewParserCompressed() { + // First, lets make a file that is compressed, represented by this + // buffer. + var file bytes.Buffer + zw := gzip.NewWriter(&file) + _, _ = zw.Write([]byte(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV +EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG +LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL +GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX +IENY + +>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID +FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA +DIDGDGQVNYEEFVQMMTAK*`)) + zw.Close() + + // Next, lets make a decoderFunc with a compatible function type + decoderFunc := func(r io.Reader) (io.Reader, error) { + return gzip.NewReader(r) + } + + parser, _ := bio.NewParserCompressed(bio.Fasta, &file, decoderFunc) // Make a parser with the compressed file + records, _ := parser.Parse() // Parse all data records from file + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleFasta() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV +EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG +LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL +GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX +IENY + +>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID +FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA +DIDGDGQVNYEEFVQMMTAK*`) + parser, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file + records, _ := parser.Parse() // Parse all data records from file + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} From 03f8b6839c5b7b5a138f395c5963e57c96d11a43 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Fri, 1 Sep 2023 20:41:17 -0700 Subject: [PATCH 11/59] gotta update this for this tests! --- bio/bio.go | 33 ++++++++++++++++++++++++--------- bio/fasta/data/base.fasta.gz | Bin 0 -> 437 bytes 2 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 bio/fasta/data/base.fasta.gz diff --git a/bio/bio.go b/bio/bio.go index 7423d20c..19e47115 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -5,6 +5,7 @@ package bio import ( "bufio" + "compress/gzip" "errors" "fmt" "io" @@ -67,12 +68,10 @@ type Parser[DataType fasta.Record, DataTypeHeader fasta.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } -var emptyParser Parser[fasta.Record, fasta.Header] = Parser[fasta.Record, fasta.Header]{} - func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { maxLineLength, ok := DefaultMaxLengths[format] if !ok { - return &Parser[fasta.Record, fasta.Header]{}, fmt.Errorf("did not find format in default lengths") + return nil, fmt.Errorf("did not find format in default lengths") } return NewParserWithMaxLine(format, r, maxLineLength) } @@ -85,26 +84,42 @@ func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (*Parse return nil, nil } +func NewParserGz(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { + return NewParserCompressed(format, r, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) +} + +func NewParserCompressed(format Format, r io.Reader, decoderFunc func(io.Reader) (io.Reader, error)) (*Parser[fasta.Record, fasta.Header], error) { + decodedReader, err := decoderFunc(r) + if err != nil { + return nil, err + } + return NewParser(format, decodedReader) +} + /****************************************************************************** Parser read functions ******************************************************************************/ -func ReadWithMaxLine(format Format, path string, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { +func Read(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { file, err := os.Open(path) if err != nil { - return &emptyParser, err + return nil, err } - return NewParserWithMaxLine(format, file, maxLineLength) + return NewParser(format, file) } -func Read(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { +func ReadGz(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { + return ReadCompressed(format, path, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) +} + +func ReadCompressed(format Format, path string, decoderFunc func(io.Reader) (io.Reader, error)) (*Parser[fasta.Record, fasta.Header], error) { file, err := os.Open(path) if err != nil { - return &emptyParser, err + return nil, err } - return NewParser(format, file) + return NewParserCompressed(format, file, decoderFunc) } /****************************************************************************** diff --git a/bio/fasta/data/base.fasta.gz b/bio/fasta/data/base.fasta.gz new file mode 100644 index 0000000000000000000000000000000000000000..ed2fb33210d4ee9cf9cd051e5c4a848448a8cf90 GIT binary patch literal 437 zcmV;m0ZRTKiwFpnJ!ND717cxwWiDo6b97++b|5h`&alpbOTbPJr*D$iY7z} zvc<_2h8^rQXpH4!=$c^z^5duUF!De?kbI8>pI(>i!^8dhezm&3&Q}1lUauY>zpSq9 z_V4?7yMH?$ckSGM!^7_9e)`oOr$5W_@;`oWWFtj8rXg@Cl!}yuItC^7BEsrH!FnoL z;z+$ub|lcu8pI~xSeR;>8ytBgvMCz}Dq*k|Y-d@bRi8nCawlq~L!}f#6cSA)8OPCf zu@q%ztWZ-GtA7}Xq-ea5i6(SDf{79|O2;nZSgcqmz%ry9gA<}$C#)pSEDec|RZNrX zhUC2rQBq&aql$VXQp3oU`k1lAD$eyXNG!!BW&taafu0-2P@3k+Z@RDT=XNt4j^~%l zVL4UMU5?Y~u6>*4d3nEU=kxF7w7cO7rqfHi-7ni8yHf+E7e(wD&^iR0#2RPFkg}>n zA literal 0 HcmV?d00001 From 6199c437df3765471dea89e9ba190b95cf02de7e Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 4 Sep 2023 20:28:23 -0700 Subject: [PATCH 12/59] integrate slow5 --- bio/bio.go | 45 ++++++++----- bio/example_test.go | 47 ++++++++++--- bio/fasta/fasta.go | 5 ++ bio/slow5/example_test.go | 4 +- bio/slow5/slow5.go | 134 ++++++++++++++++++++++++-------------- bio/slow5/slow5_test.go | 67 +++++++++++++------ 6 files changed, 207 insertions(+), 95 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 19e47115..d868a174 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -13,6 +13,7 @@ import ( "os" "github.com/TimothyStiles/poly/bio/fasta" + "github.com/TimothyStiles/poly/bio/slow5" ) type Format int @@ -25,9 +26,11 @@ const ( Slow5 Pileup Uniprot - Rebase ) +type FastaParser = *Parser[fasta.Record, fasta.Header] +type Slow5Parser = *Parser[slow5.Read, slow5.Header] + // DefaultMaxLineLength variables are defined for performance reasons. While // parsing, reading byte-by-byte takes far, far longer than reading many bytes // into a buffer. In golang, this buffer in bufio is usually 64kb. However, @@ -43,7 +46,6 @@ var DefaultMaxLengths = map[Format]int{ Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. Pileup: defaultMaxLineLength, Uniprot: defaultMaxLineLength, - Rebase: defaultMaxLineLength, } /****************************************************************************** @@ -53,22 +55,30 @@ Lower level interfaces ******************************************************************************/ -type LowLevelParser[DataType fasta.Record, DataTypeHeader fasta.Header] interface { +type LowLevelParser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] interface { Header() (DataTypeHeader, error) Next() (DataType, error) } +type Record interface { + WriteTo(w io.Writer) (n int64, err error) +} + +type Header interface { + WriteTo(w io.Writer) (n int64, err error) +} + /****************************************************************************** Higher level parse ******************************************************************************/ -type Parser[DataType fasta.Record, DataTypeHeader fasta.Header] struct { +type Parser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } -func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { +func NewParser(format Format, r io.Reader) (interface{}, error) { maxLineLength, ok := DefaultMaxLengths[format] if !ok { return nil, fmt.Errorf("did not find format in default lengths") @@ -76,19 +86,22 @@ func NewParser(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], return NewParserWithMaxLine(format, r, maxLineLength) } -func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { +func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (interface{}, error) { switch format { case Fasta: return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil + case Slow5: + parser, err := slow5.NewParser(r, maxLineLength) + return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err } return nil, nil } -func NewParserGz(format Format, r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { +func NewParserGz(format Format, r io.Reader) (interface{}, error) { return NewParserCompressed(format, r, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) } -func NewParserCompressed(format Format, r io.Reader, decoderFunc func(io.Reader) (io.Reader, error)) (*Parser[fasta.Record, fasta.Header], error) { +func NewParserCompressed(format Format, r io.Reader, decoderFunc func(io.Reader) (io.Reader, error)) (interface{}, error) { decodedReader, err := decoderFunc(r) if err != nil { return nil, err @@ -102,7 +115,7 @@ Parser read functions ******************************************************************************/ -func Read(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { +func Read(format Format, path string) (interface{}, error) { file, err := os.Open(path) if err != nil { return nil, err @@ -110,11 +123,11 @@ func Read(format Format, path string) (*Parser[fasta.Record, fasta.Header], erro return NewParser(format, file) } -func ReadGz(format Format, path string) (*Parser[fasta.Record, fasta.Header], error) { +func ReadGz(format Format, path string) (interface{}, error) { return ReadCompressed(format, path, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) } -func ReadCompressed(format Format, path string, decoderFunc func(io.Reader) (io.Reader, error)) (*Parser[fasta.Record, fasta.Header], error) { +func ReadCompressed(format Format, path string, decoderFunc func(io.Reader) (io.Reader, error)) (interface{}, error) { file, err := os.Open(path) if err != nil { return nil, err @@ -156,13 +169,13 @@ func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { } func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { - header, err := p.Header() - if err != nil { - return []DataType{}, DataTypeHeader{}, err - } + header, headerErr := p.Header() data, err := p.Parse() + if headerErr != nil { + return data, header, err + } if err != nil { - return []DataType{}, DataTypeHeader{}, err + return data, header, err } return data, header, nil } diff --git a/bio/example_test.go b/bio/example_test.go index b5d86103..954f25ae 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -5,6 +5,7 @@ import ( "compress/gzip" "fmt" "io" + "log" "strings" "github.com/TimothyStiles/poly/bio" @@ -41,7 +42,9 @@ func Example() { // ExampleRead shows an example of reading a file from disk. func ExampleRead() { // Read lets you read files from disk into a parser. - parser, _ := bio.Read(bio.Fasta, "fasta/data/base.fasta") + parserInterface, _ := bio.Read(bio.Fasta, "fasta/data/base.fasta") + parser := parserInterface.(bio.FastaParser) + records, _ := parser.Parse() fmt.Println(records[1].Sequence) @@ -50,7 +53,8 @@ func ExampleRead() { func ExampleReadGz() { // ReadGz lets you read gzipped files into a parser. - parser, _ := bio.ReadGz(bio.Fasta, "fasta/data/base.fasta.gz") + parserInterface, _ := bio.ReadGz(bio.Fasta, "fasta/data/base.fasta.gz") + parser := parserInterface.(bio.FastaParser) records, _ := parser.Parse() fmt.Println(records[1].Sequence) @@ -65,7 +69,8 @@ func ExampleReadCompressed() { decoderFunc := func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) } - parser, _ := bio.ReadCompressed(bio.Fasta, "fasta/data/base.fasta.gz", decoderFunc) + parserInterface, _ := bio.ReadCompressed(bio.Fasta, "fasta/data/base.fasta.gz", decoderFunc) + parser := parserInterface.(bio.FastaParser) records, _ := parser.Parse() fmt.Println(records[1].Sequence) @@ -90,8 +95,9 @@ FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`)) zw.Close() - parser, _ := bio.NewParserGz(bio.Fasta, &file) // Make a parser with the gz file - records, _ := parser.Parse() // Parse all data records from file + parserInterface, _ := bio.NewParserGz(bio.Fasta, &file) // Make a parser with the gz file + parser := parserInterface.(bio.FastaParser) + records, _ := parser.Parse() // Parse all data records from file fmt.Println(records[1].Sequence) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* @@ -120,8 +126,9 @@ DIDGDGQVNYEEFVQMMTAK*`)) return gzip.NewReader(r) } - parser, _ := bio.NewParserCompressed(bio.Fasta, &file, decoderFunc) // Make a parser with the compressed file - records, _ := parser.Parse() // Parse all data records from file + parserInterface, _ := bio.NewParserCompressed(bio.Fasta, &file, decoderFunc) // Make a parser with the compressed file + parser := parserInterface.(bio.FastaParser) + records, _ := parser.Parse() // Parse all data records from file fmt.Println(records[1].Sequence) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* @@ -141,9 +148,31 @@ IENY ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`) - parser, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file - records, _ := parser.Parse() // Parse all data records from file + parserInterface, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file + parser := parserInterface.(bio.FastaParser) + records, _ := parser.Parse() // Parse all data records from file fmt.Println(records[1].Sequence) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } + +func ExampleSlow5() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`#slow5_version 0.2.0 +#num_read_groups 1 +@asic_id 4175987214 +#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} char* +#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number +0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 +`) + parserInterface, err := bio.NewParser(bio.Slow5, file) // Make a parser with the file + if err != nil { + log.Fatalf("%s", err) + } + parser := parserInterface.(bio.Slow5Parser) + reads, _ := parser.Parse() // Parse all data records from file + + fmt.Println(reads[0].RawSignal) + // Output: [430 472 463] +} diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index afc639e5..f7a2df3c 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -59,6 +59,11 @@ type Record struct { // Header is a blank struct, needed for compatibility with bio parsers. It contains nothing. type Header struct{} +// WriteTo is a blank function, needed for compatibility with bio parsers. It doesn't do anything. +func (header *Header) WriteTo(w io.Writer) (int64, error) { + return 0, nil +} + // Parser is a flexible parser that provides ample // control over reading fasta-formatted sequences. // It is initialized with NewParser. diff --git a/bio/slow5/example_test.go b/bio/slow5/example_test.go index d30e45dc..232217d6 100644 --- a/bio/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -15,11 +15,11 @@ func ExampleNewParser() { // Set maxLineSize to 64kb. If you expect longer reads, // make maxLineSize longer! const maxLineSize = 2 * 32 * 1024 - parser, _, _ := slow5.NewParser(file, maxLineSize) + parser, _ := slow5.NewParser(file, maxLineSize) var outputReads []slow5.Read for { - read, err := parser.ParseNext() + read, err := parser.Next() if err != nil { // Break at EOF break diff --git a/bio/slow5/slow5.go b/bio/slow5/slow5.go index 58cbd7b1..2b8286eb 100644 --- a/bio/slow5/slow5.go +++ b/bio/slow5/slow5.go @@ -57,6 +57,10 @@ Keoni // Header contains metadata about the sequencing run in general. type Header struct { + HeaderValues []HeaderValue +} + +type HeaderValue struct { ReadGroupID uint32 Slow5Version string Attributes map[string]string @@ -82,7 +86,8 @@ type Read struct { StartTime uint64 EndReason string // enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} - Error error // in case there is an error while parsing! + Error error // in case there is an error while parsing! + EndReasonMap map[string]int // Used for writing } var knownEndReasons = map[string]bool{"unknown": true, @@ -99,19 +104,27 @@ var knownEndReasons = map[string]bool{"unknown": true, // It is initialized with NewParser. type Parser struct { // reader keeps state of current reader. - reader bufio.Reader - line uint - headerMap map[int]string - endReasonMap map[int]string + reader bufio.Reader + line uint + headerMap map[int]string + endReasonMap map[int]string + endReasonHeaderMap map[string]int + header Header + hitEOF bool +} + +// Header returns the header +func (p *Parser) Header() (Header, error) { + return p.header, nil } // NewParser parsers a slow5 file. -func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { +func NewParser(r io.Reader, maxLineSize int) (*Parser, error) { parser := &Parser{ reader: *bufio.NewReaderSize(r, maxLineSize), line: 0, } - var headers []Header + var headers []HeaderValue var slow5Version string var numReadGroups uint32 headerMap := make(map[int]string) @@ -121,13 +134,14 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { for { lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { - return parser, []Header{}, err + return parser, err } line := strings.TrimSpace(string(lineBytes)) parser.line++ values := strings.Split(line, "\t") if len(values) < 2 { - return parser, []Header{}, fmt.Errorf("Got following line without tabs: %s", line) + + return parser, fmt.Errorf("Got following line without tabs: %s", line) } // First, we need to identify the number of read groups. This number will be the length of our @@ -139,11 +153,11 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { case "#num_read_groups": numReadGroupsUint, err := strconv.ParseUint(values[1], 10, 32) if err != nil { - return parser, []Header{}, err + return parser, err } numReadGroups = uint32(numReadGroupsUint) for id := uint32(0); id < numReadGroups; id++ { - headers = append(headers, Header{Slow5Version: slow5Version, ReadGroupID: id, Attributes: make(map[string]string)}) + headers = append(headers, HeaderValue{Slow5Version: slow5Version, ReadGroupID: id, Attributes: make(map[string]string)}) } } continue @@ -159,7 +173,7 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { for endReasonIndex, endReason := range endReasons { if _, ok := knownEndReasons[endReason]; !ok { - return parser, headers, fmt.Errorf("unknown end reason '%s' found in end_reason enum. Please report", endReason) + return parser, fmt.Errorf("unknown end reason '%s' found in end_reason enum. Please report", endReason) } endReasonMap[endReasonIndex] = endReason endReasonHeaderMap[endReason] = endReasonIndex @@ -184,7 +198,7 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { // Check to make sure we have the right amount of information for the num_read_groups if len(values) != int(numReadGroups+1) { - return parser, []Header{}, fmt.Errorf("Improper amount of information for read groups. Needed %d, got %d, in line: %s", numReadGroups+1, len(values), line) + return parser, fmt.Errorf("Improper amount of information for read groups. Needed %d, got %d, in line: %s", numReadGroups+1, len(values), line) } for id := 0; id < int(numReadGroups); id++ { headers[id].Attributes[values[0]] = values[id+1] @@ -193,14 +207,27 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, []Header, error) { } parser.headerMap = headerMap parser.endReasonMap = endReasonMap - return parser, headers, nil + parser.endReasonHeaderMap = endReasonHeaderMap + parser.header = Header{HeaderValues: headers} + return parser, nil } -// ParseNext parses the next read from a parser. -func (parser *Parser) ParseNext() (Read, error) { +// Next parses the next read from a parser. +func (parser *Parser) Next() (Read, error) { + if parser.hitEOF { + return Read{}, io.EOF + } lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { - return Read{}, err + if err == io.EOF { + parser.hitEOF = true + if strings.TrimSpace(string(lineBytes)) == "" { + // If EOF line is empty, return. If not, continue! + return Read{}, io.EOF + } + } else { + return Read{}, err + } } parser.line++ line := strings.TrimSpace(string(lineBytes)) @@ -209,6 +236,7 @@ func (parser *Parser) ParseNext() (Read, error) { // Reads have started. // Once we have the read headers, start to parse the actual reads var newRead Read + newRead.EndReasonMap = parser.endReasonHeaderMap for valueIndex := 0; valueIndex < len(values); valueIndex++ { fieldValue := parser.headerMap[valueIndex] if values[valueIndex] == "." { @@ -326,19 +354,22 @@ Keoni ******************************************************************************/ -// Write writes a list of headers and a channel of reads to an output. -func Write(headers []Header, reads <-chan Read, output io.Writer) error { +func (header *Header) WriteTo(w io.Writer) (int64, error) { + headers := header.HeaderValues + var written int64 // First, write the slow5 version number slow5Version := headers[0].Slow5Version endReasonHeaderMap := headers[0].EndReasonHeaderMap - _, err := fmt.Fprintf(output, "#slow5_version\t%s\n", slow5Version) + newWriteN, err := fmt.Fprintf(w, "#slow5_version\t%s\n", slow5Version) + written += int64(newWriteN) if err != nil { - return err + return written, err } // Then, write the number of read groups (ie, the number of headers) - _, err = fmt.Fprintf(output, "#num_read_groups\t%d\n", len(headers)) + newWriteN, err = fmt.Fprintf(w, "#num_read_groups\t%d\n", len(headers)) + written += int64(newWriteN) if err != nil { - return err + return written, err } // Next, we need a map of what attribute values are available possibleAttributeKeys := make(map[string]bool) @@ -378,9 +409,10 @@ func Write(headers []Header, reads <-chan Read, output io.Writer) error { // Write the header attribute strings to the output for _, headerAttributeString := range headerAttributeStrings { - _, err = fmt.Fprintf(output, "%s\n", headerAttributeString) + newWriteN, err = fmt.Fprintf(w, "%s\n", headerAttributeString) + written += int64(newWriteN) if err != nil { - return err + return written, err } } @@ -404,37 +436,41 @@ func Write(headers []Header, reads <-chan Read, output io.Writer) error { // Write the read headers // These are according to the slow5 specifications - _, err = fmt.Fprintf(output, "#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{%s} char*\n", endReasonString) + newWriteN, err = fmt.Fprintf(w, "#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{%s} char*\n", endReasonString) + written += int64(newWriteN) if err != nil { - return err + return written, err } - _, err = fmt.Fprintln(output, "#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number") + newWriteN, err = fmt.Fprintln(w, "#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number") + written += int64(newWriteN) if err != nil { - return err + return written, err } + return written, nil +} - // Iterate over reads. This is reading from a channel, and will end - // when the channel is closed. - for read := range reads { - // converts []int16 to string - var rawSignalStringBuilder strings.Builder - for signalIndex, signal := range read.RawSignal { - _, err = fmt.Fprint(&rawSignalStringBuilder, signal) +func (read *Read) WriteTo(w io.Writer) (int64, error) { + var err error + var written int64 + // converts []int16 to string + var rawSignalStringBuilder strings.Builder + for signalIndex, signal := range read.RawSignal { + _, err = fmt.Fprint(&rawSignalStringBuilder, signal) + if err != nil { + return written, err + } + if signalIndex != len(read.RawSignal)-1 { // Don't add a comma to last number + _, err = fmt.Fprint(&rawSignalStringBuilder, ",") if err != nil { - return err - } - if signalIndex != len(read.RawSignal)-1 { // Don't add a comma to last number - _, err = fmt.Fprint(&rawSignalStringBuilder, ",") - if err != nil { - return err - } + return written, err } } - // Look at above output.Write("#read_id ... for the values here. - _, err = fmt.Fprintf(output, "%s\t%d\t%g\t%g\t%g\t%g\t%d\t%s\t%d\t%d\t%d\t%g\t%d\t%s\n", read.ReadID, read.ReadGroupID, read.Digitisation, read.Offset, read.Range, read.SamplingRate, read.LenRawSignal, rawSignalStringBuilder.String(), read.StartTime, read.ReadNumber, read.StartMux, read.MedianBefore, endReasonHeaderMap[read.EndReason], read.ChannelNumber) - if err != nil { - return err - } } - return nil + // Look at above output.Write("#read_id ... for the values here. + newWriteN, err := fmt.Fprintf(w, "%s\t%d\t%g\t%g\t%g\t%g\t%d\t%s\t%d\t%d\t%d\t%g\t%d\t%s\n", read.ReadID, read.ReadGroupID, read.Digitisation, read.Offset, read.Range, read.SamplingRate, read.LenRawSignal, rawSignalStringBuilder.String(), read.StartTime, read.ReadNumber, read.StartMux, read.MedianBefore, read.EndReasonMap[read.EndReason], read.ChannelNumber) + written += int64(newWriteN) + if err != nil { + return written, err + } + return written, nil } diff --git a/bio/slow5/slow5_test.go b/bio/slow5/slow5_test.go index 65027bfc..21535aad 100644 --- a/bio/slow5/slow5_test.go +++ b/bio/slow5/slow5_test.go @@ -5,6 +5,7 @@ import ( "io" "io/ioutil" "os" + "strings" "testing" ) @@ -15,22 +16,23 @@ func TestParse(t *testing.T) { if err != nil { t.Errorf("Failed to open example.slow5: %s", err) } - parser, headers, err := NewParser(file, maxLineSize) + parser, err := NewParser(file, maxLineSize) if err != nil { t.Errorf("Failed to parse headers of file: %s", err) } // Test headers - if len(headers) != 1 { - t.Errorf("There should only be 1 read group. Got: %d", len(headers)) + headers, _ := parser.Header() + if len(headers.HeaderValues) != 1 { + t.Errorf("There should only be 1 read group. Got: %d", len(headers.HeaderValues)) } - if headers[0].Attributes["@asic_id"] != "4175987214" { - t.Errorf("Expected AsicId 4175987214. Got: %s", headers[0].Attributes["asic_id"]) + if headers.HeaderValues[0].Attributes["@asic_id"] != "4175987214" { + t.Errorf("Expected AsicId 4175987214. Got: %s", headers.HeaderValues[0].Attributes["asic_id"]) } // Test reads var outputReads []Read for { - read, err := parser.ParseNext() + read, err := parser.Next() if err != nil { if !errors.Is(err, io.EOF) { t.Errorf("Got unknown error: %s", err) @@ -50,7 +52,7 @@ func TestParseImproperHeaders(t *testing.T) { if err != nil { t.Errorf("Failed to open file with error: %s", err) } - _, _, err = NewParser(file, maxLineSize) + _, err = NewParser(file, maxLineSize) if err == nil { t.Errorf("Test should have failed if header line doesn't have any tabs") } @@ -59,7 +61,7 @@ func TestParseImproperHeaders(t *testing.T) { if err != nil { t.Errorf("Failed to open file with error: %s", err) } - _, _, err = NewParser(file, maxLineSize) + _, err = NewParser(file, maxLineSize) if err == nil { t.Errorf("Test should have failed if numReadGroup can't be converted to an int") } @@ -68,7 +70,7 @@ func TestParseImproperHeaders(t *testing.T) { if err != nil { t.Errorf("Failed to open file with error: %s", err) } - _, _, err = NewParser(file, maxLineSize) + _, err = NewParser(file, maxLineSize) if err == nil { t.Errorf("Test should have failed if the header doesn't have enough attributes for numReadGroup") } @@ -77,7 +79,7 @@ func TestParseImproperHeaders(t *testing.T) { if err != nil { t.Errorf("Failed to open file with error: %s", err) } - _, _, err = NewParser(file, maxLineSize) + _, err = NewParser(file, maxLineSize) if err == nil { t.Errorf("Test should have failed if the file is empty") } @@ -88,10 +90,10 @@ func testParseReadsHelper(t *testing.T, fileTarget string, errorMessage string) if err != nil { t.Errorf("Failed to open file with error: %s", err) } - parser, _, _ := NewParser(file, maxLineSize) + parser, _ := NewParser(file, maxLineSize) var targetErr []error for { - read, err := parser.ParseNext() + read, err := parser.Next() if err != nil { if !errors.Is(err, io.EOF) { t.Errorf("Got unknown error: %s", err) @@ -113,11 +115,11 @@ func TestParseReads(t *testing.T) { if err != nil { t.Errorf("Failed to open file with error: %s", err) } - parser, _, _ := NewParser(file, maxLineSize) + parser, _ := NewParser(file, maxLineSize) var outputReads []Read for { - read, err := parser.ParseNext() + read, err := parser.Next() if err != nil { if !errors.Is(err, io.EOF) { t.Errorf("Got unknown error: %s", err) @@ -159,7 +161,7 @@ func TestWrite(t *testing.T) { t.Errorf("Failed to open file with error: %s", err) } // Parse headers - parser, headers, err := NewParser(file, maxLineSize) + parser, err := NewParser(file, maxLineSize) if err != nil { t.Errorf("Failed to parse headers with error: %s", err) } @@ -173,7 +175,7 @@ func TestWrite(t *testing.T) { reads := make(chan Read) go func() { for { - read, err := parser.ParseNext() + read, err := parser.Next() if err != nil { // Break at EOF break @@ -183,10 +185,18 @@ func TestWrite(t *testing.T) { close(reads) }() - // Write - err = Write(headers, reads, testFile) + // Write header + headers, _ := parser.Header() + _, err = headers.WriteTo(testFile) if err != nil { - t.Errorf("Failed to write slow5 file. Got error: %s", err) + t.Errorf("Failed to write slow5 header. Got error: %s", err) + } + for read := range reads { + _, err = read.WriteTo(testFile) + if err != nil { + + t.Errorf("Failed to write slow5 read. Got error: %s", err) + } } // Compare both files @@ -204,3 +214,22 @@ func TestWrite(t *testing.T) { t.Errorf("Example and test write are different") } } + +func TestSimpleExample(t *testing.T) { + file := strings.NewReader(`#slow5_version 0.2.0 +#num_read_groups 1 +@asic_id 4175987214 +#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} char* +#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number +0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10`) + parser, err := NewParser(file, maxLineSize) + if err != nil { + t.Errorf("failed: %s", err) + + } + read, _ := parser.Next() + if read.RawSignal[0] != 430 { + t.Errorf("Should have gotten 430. Got: %d", read.RawSignal[0]) + } + +} From 65f0539c85136718b0bf573bbe860077c6e57b6a Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 4 Sep 2023 22:52:11 -0700 Subject: [PATCH 13/59] have examples covering most of changes --- bio/bio.go | 55 +++++-------------------- bio/example_test.go | 87 ++++++++++++++++++++++++++++++++++++--- bio/fasta/example_test.go | 2 +- bio/fasta/fasta.go | 16 +++---- bio/fasta/fasta_test.go | 8 ++-- bio/slow5/example_test.go | 2 +- bio/slow5/slow5.go | 43 ++++++++++--------- bio/slow5/slow5_test.go | 18 +++----- 8 files changed, 132 insertions(+), 99 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index d868a174..96ea038d 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -56,16 +56,8 @@ Lower level interfaces ******************************************************************************/ type LowLevelParser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] interface { - Header() (DataTypeHeader, error) - Next() (DataType, error) -} - -type Record interface { - WriteTo(w io.Writer) (n int64, err error) -} - -type Header interface { - WriteTo(w io.Writer) (n int64, err error) + Header() (*DataTypeHeader, error) + Next() (*DataType, error) } /****************************************************************************** @@ -141,16 +133,16 @@ Parser higher-level functions ******************************************************************************/ -func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { return p.LowLevelParser.Next() } -func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { return p.LowLevelParser.Header() } -func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { - var records []DataType +func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, error) { + var records []*DataType for counter := 0; counter < countN; counter++ { record, err := p.Next() if err != nil { @@ -164,11 +156,11 @@ func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error return records, nil } -func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Parse() ([]*DataType, error) { return p.ParseN(math.MaxInt) } -func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *DataTypeHeader, error) { header, headerErr := p.Header() data, err := p.Parse() if headerErr != nil { @@ -188,36 +180,9 @@ func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataTyp if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. } + close(channel) return err } - channel <- record - } -} - -/****************************************************************************** - -Writer functions - -******************************************************************************/ - -func WriteAll(data []io.WriterTo, header io.WriterTo, w io.Writer) error { - _, err := header.WriteTo(w) - if err != nil { - return err - } - for _, datum := range data { - _, err = datum.WriteTo(w) - if err != nil { - return err - } - } - return nil -} - -func WriteFile(data []io.WriterTo, header io.WriterTo, path string) error { - file, err := os.Open(path) - if err != nil { - return err + channel <- *record } - return WriteAll(data, header, file) } diff --git a/bio/example_test.go b/bio/example_test.go index 954f25ae..83fb0f84 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -5,10 +5,10 @@ import ( "compress/gzip" "fmt" "io" - "log" "strings" "github.com/TimothyStiles/poly/bio" + "github.com/TimothyStiles/poly/bio/fasta" "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/bio/gff" "github.com/TimothyStiles/poly/bio/polyjson" @@ -134,6 +134,86 @@ DIDGDGQVNYEEFVQMMTAK*`)) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } +func ExampleParseWithHeader() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`#slow5_version 0.2.0 +#num_read_groups 1 +@asic_id 4175987214 +#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} char* +#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number +0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 +`) + parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file + parser := parserInterface.(bio.Slow5Parser) + reads, header, _ := parser.ParseWithHeader() // Parse all data records from file + + fmt.Printf("%s, %s\n", header.HeaderValues[0].Slow5Version, reads[0].ReadID) + // Output: 0.2.0, 0026631e-33a3-49ab-aa22-3ab157d71f8b +} + +func ExampleParseToChannel() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV +EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG +LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL +GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX +IENY + +>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID +FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA +DIDGDGQVNYEEFVQMMTAK*`) + parserInterface, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file + parser := parserInterface.(bio.FastaParser) + + channel := make(chan fasta.Record) + go parser.ParseToChannel(channel) + + var records []fasta.Record + for record := range channel { + records = append(records, record) + } + + fmt.Println(records[1].Sequence) + // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* +} + +func ExampleWriteAll() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`#slow5_version 0.2.0 +#num_read_groups 1 +@asic_id 4175987214 +#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} char* +#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number +0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 +`) + parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file + parser := parserInterface.(bio.Slow5Parser) + reads, header, _ := parser.ParseWithHeader() // Parse all data records from file + + // Write the files to an io.Writer. + // All headers and all records implement io.WriterTo interfaces. + var buffer bytes.Buffer + _, _ = header.WriteTo(&buffer) + for _, read := range reads { + read.WriteTo(&buffer) + } + + fmt.Println(string(buffer.Bytes())) + // Output: #slow5_version 0.2.0 + //#num_read_groups 1 + //@asic_id 4175987214 + //#char* uint32_t double double double double uint64_t int16_t* uint64_t int32_t uint8_t double enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} char* + //#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number + //0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 + // + // +} + func ExampleFasta() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. @@ -166,10 +246,7 @@ func ExampleSlow5() { #read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number 0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 `) - parserInterface, err := bio.NewParser(bio.Slow5, file) // Make a parser with the file - if err != nil { - log.Fatalf("%s", err) - } + parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file parser := parserInterface.(bio.Slow5Parser) reads, _ := parser.Parse() // Parse all data records from file diff --git a/bio/fasta/example_test.go b/bio/fasta/example_test.go index 4ea16727..794b13e0 100644 --- a/bio/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -29,7 +29,7 @@ func Example_basic() { } break } - records = append(records, record) + records = append(records, *record) } fmt.Println(records[0].Sequence) // Output: ATGC diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index f7a2df3c..1785a08a 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -79,8 +79,8 @@ type Parser struct { } // Header returns a identifier with nothing and nil. -func (p *Parser) Header() (Header, error) { - return Header{}, nil +func (p *Parser) Header() (*Header, error) { + return &Header{}, nil } // NewParser returns a Parser that uses r as the source @@ -107,9 +107,9 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // It is worth noting the amount of bytes read are always right up to before // the next fasta starts which means this function can effectively be used // to index where fastas start in a file or string. -func (p *Parser) Next() (Record, error) { +func (p *Parser) Next() (*Record, error) { if p.more == false { - return Record{}, io.EOF + return &Record{}, io.EOF } for p.scanner.Scan() { line := p.scanner.Bytes() @@ -128,7 +128,7 @@ func (p *Parser) Next() (Record, error) { case line[0] != '>' && p.start: err := fmt.Errorf("invalid input: missing sequence identifier for sequence starting at line %d", p.line) record, _ := p.newRecord() - return record, err + return &record, err // start of a fasta line case line[0] != '>': p.buff.Write(line) @@ -137,7 +137,7 @@ func (p *Parser) Next() (Record, error) { record, err := p.newRecord() // New name p.identifier = string(line[1:]) - return record, err + return &record, err // Process first line of file case line[0] == '>' && p.start: p.identifier = string(line[1:]) @@ -148,9 +148,9 @@ func (p *Parser) Next() (Record, error) { // Add final sequence in file record, err := p.newRecord() if err != nil { - return record, err + return &record, err } - return record, p.scanner.Err() + return &record, p.scanner.Err() } func (p *Parser) newRecord() (Record, error) { diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index 4f901d95..79ced77b 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -54,7 +54,7 @@ func TestParser(t *testing.T) { } break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if len(fastas) != len(test.expected) { t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) @@ -84,7 +84,7 @@ func TestReadEmptyFasta(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error reading empty fasta stream") @@ -108,7 +108,7 @@ func TestReadEmptySequence(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error reading empty fasta sequence stream: %s", targetError) @@ -129,7 +129,7 @@ func TestBufferSmall(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error with too small of a buffer") diff --git a/bio/slow5/example_test.go b/bio/slow5/example_test.go index 232217d6..3f83b5b8 100644 --- a/bio/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -24,7 +24,7 @@ func ExampleNewParser() { // Break at EOF break } - outputReads = append(outputReads, read) + outputReads = append(outputReads, *read) } fmt.Println(outputReads[0].RawSignal[0:10]) diff --git a/bio/slow5/slow5.go b/bio/slow5/slow5.go index 2b8286eb..3be78288 100644 --- a/bio/slow5/slow5.go +++ b/bio/slow5/slow5.go @@ -86,7 +86,6 @@ type Read struct { StartTime uint64 EndReason string // enum{unknown,partial,mux_change,unblock_mux_change,data_service_unblock_mux_change,signal_positive,signal_negative} - Error error // in case there is an error while parsing! EndReasonMap map[string]int // Used for writing } @@ -114,8 +113,8 @@ type Parser struct { } // Header returns the header -func (p *Parser) Header() (Header, error) { - return p.header, nil +func (p *Parser) Header() (*Header, error) { + return &p.header, nil } // NewParser parsers a slow5 file. @@ -213,9 +212,9 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, error) { } // Next parses the next read from a parser. -func (parser *Parser) Next() (Read, error) { +func (parser *Parser) Next() (*Read, error) { if parser.hitEOF { - return Read{}, io.EOF + return &Read{}, io.EOF } lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { @@ -223,10 +222,10 @@ func (parser *Parser) Next() (Read, error) { parser.hitEOF = true if strings.TrimSpace(string(lineBytes)) == "" { // If EOF line is empty, return. If not, continue! - return Read{}, io.EOF + return &Read{}, io.EOF } } else { - return Read{}, err + return &Read{}, err } } parser.line++ @@ -248,37 +247,37 @@ func (parser *Parser) Next() (Read, error) { case "read_group": readGroupID, err := strconv.ParseUint(values[valueIndex], 10, 32) if err != nil { - newRead.Error = fmt.Errorf("Failed convert read_group '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed convert read_group '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.ReadGroupID = uint32(readGroupID) case "digitisation": digitisation, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert digitisation '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert digitisation '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Digitisation = digitisation case "offset": offset, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert offset '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert offset '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Offset = offset case "range": nanoporeRange, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert range '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert range '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Range = nanoporeRange case "sampling_rate": samplingRate, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert sampling_rate '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert sampling_rate '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.SamplingRate = samplingRate case "len_raw_signal": lenRawSignal, err := strconv.ParseUint(values[valueIndex], 10, 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert len_raw_signal '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert len_raw_signal '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.LenRawSignal = lenRawSignal case "raw_signal": @@ -286,7 +285,7 @@ func (parser *Parser) Next() (Read, error) { for rawSignalIndex, rawSignalString := range strings.Split(values[valueIndex], ",") { rawSignal, err := strconv.ParseInt(rawSignalString, 10, 16) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert raw signal '%s' to int on line %d, signal index %d. Got Error: %w", rawSignalString, parser.line, rawSignalIndex, err) + return &Read{}, fmt.Errorf("Failed to convert raw signal '%s' to int on line %d, signal index %d. Got Error: %w", rawSignalString, parser.line, rawSignalIndex, err) } rawSignals = append(rawSignals, int16(rawSignal)) } @@ -294,44 +293,44 @@ func (parser *Parser) Next() (Read, error) { case "start_time": startTime, err := strconv.ParseUint(values[valueIndex], 10, 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert start_time '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert start_time '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.StartTime = startTime case "read_number": readNumber, err := strconv.ParseInt(values[valueIndex], 10, 32) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert read_number '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert read_number '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.ReadNumber = int32(readNumber) case "start_mux": startMux, err := strconv.ParseUint(values[valueIndex], 10, 8) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert start_mux '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert start_mux '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.StartMux = uint8(startMux) case "median_before": medianBefore, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert median_before '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert median_before '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.MedianBefore = medianBefore case "end_reason": endReasonIndex, err := strconv.ParseInt(values[valueIndex], 10, 64) if err != nil { - newRead.Error = fmt.Errorf("Failed to convert end_reason '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return &Read{}, fmt.Errorf("Failed to convert end_reason '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) } if _, ok := parser.endReasonMap[int(endReasonIndex)]; !ok { - newRead.Error = fmt.Errorf("End reason out of range. Got '%d' on line %d. Cannot find valid enum reason", int(endReasonIndex), parser.line) + return &Read{}, fmt.Errorf("End reason out of range. Got '%d' on line %d. Cannot find valid enum reason", int(endReasonIndex), parser.line) } newRead.EndReason = parser.endReasonMap[int(endReasonIndex)] case "channel_number": // For whatever reason, this is a string. newRead.ChannelNumber = values[valueIndex] default: - newRead.Error = fmt.Errorf("Unknown field to parser '%s' found on line %d. Please report to github.com/TimothyStiles/poly", fieldValue, parser.line) + return &Read{}, fmt.Errorf("Unknown field to parser '%s' found on line %d. Please report to github.com/TimothyStiles/poly", fieldValue, parser.line) } } - return newRead, nil + return &newRead, nil } /****************************************************************************** diff --git a/bio/slow5/slow5_test.go b/bio/slow5/slow5_test.go index 21535aad..47f26f8f 100644 --- a/bio/slow5/slow5_test.go +++ b/bio/slow5/slow5_test.go @@ -39,7 +39,7 @@ func TestParse(t *testing.T) { } break } - outputReads = append(outputReads, read) + outputReads = append(outputReads, *read) } if outputReads[0].RawSignal[0] != 430 { t.Errorf("Expected first outputRead to have a raw_signal of 430. Got: %d", outputReads[0].RawSignal[0]) @@ -93,17 +93,13 @@ func testParseReadsHelper(t *testing.T, fileTarget string, errorMessage string) parser, _ := NewParser(file, maxLineSize) var targetErr []error for { - read, err := parser.Next() + _, err := parser.Next() if err != nil { if !errors.Is(err, io.EOF) { - t.Errorf("Got unknown error: %s", err) + targetErr = append(targetErr, err) } break } - err = read.Error - if err != nil { - targetErr = append(targetErr, err) - } } if len(targetErr) == 0 { t.Errorf(errorMessage) @@ -126,11 +122,7 @@ func TestParseReads(t *testing.T) { } break } - err = read.Error - if err != nil { - t.Errorf("Failed ParseReads with error: %s", err) - } - outputReads = append(outputReads, read) + outputReads = append(outputReads, *read) } if outputReads[0].ReadID != "0026631e-33a3-49ab-aa22-3ab157d71f8b" { t.Errorf("First read id should be 0026631e-33a3-49ab-aa22-3ab157d71f8b. Got: %s", outputReads[0].ReadID) @@ -180,7 +172,7 @@ func TestWrite(t *testing.T) { // Break at EOF break } - reads <- read + reads <- *read } close(reads) }() From 8ff6da4ee2566614aabd4bbb88620d37cee8e4bc Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 4 Sep 2023 22:56:48 -0700 Subject: [PATCH 14/59] removed interfaces --- bio/bio.go | 18 ++++++++--------- bio/fasta/example_test.go | 2 +- bio/fasta/fasta.go | 16 +++++++-------- bio/fasta/fasta_test.go | 8 ++++---- bio/slow5/example_test.go | 2 +- bio/slow5/slow5.go | 42 +++++++++++++++++++-------------------- bio/slow5/slow5_test.go | 6 +++--- 7 files changed, 47 insertions(+), 47 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 96ea038d..595119c5 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -56,8 +56,8 @@ Lower level interfaces ******************************************************************************/ type LowLevelParser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] interface { - Header() (*DataTypeHeader, error) - Next() (*DataType, error) + Header() (DataTypeHeader, error) + Next() (DataType, error) } /****************************************************************************** @@ -133,16 +133,16 @@ Parser higher-level functions ******************************************************************************/ -func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, error) { return p.LowLevelParser.Next() } -func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, error) { return p.LowLevelParser.Header() } -func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, error) { - var records []*DataType +func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { + var records []DataType for counter := 0; counter < countN; counter++ { record, err := p.Next() if err != nil { @@ -156,11 +156,11 @@ func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, erro return records, nil } -func (p *Parser[DataType, DataTypeHeader]) Parse() ([]*DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { return p.ParseN(math.MaxInt) } -func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { header, headerErr := p.Header() data, err := p.Parse() if headerErr != nil { @@ -183,6 +183,6 @@ func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataTyp close(channel) return err } - channel <- *record + channel <- record } } diff --git a/bio/fasta/example_test.go b/bio/fasta/example_test.go index 794b13e0..4ea16727 100644 --- a/bio/fasta/example_test.go +++ b/bio/fasta/example_test.go @@ -29,7 +29,7 @@ func Example_basic() { } break } - records = append(records, *record) + records = append(records, record) } fmt.Println(records[0].Sequence) // Output: ATGC diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index 1785a08a..f7a2df3c 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -79,8 +79,8 @@ type Parser struct { } // Header returns a identifier with nothing and nil. -func (p *Parser) Header() (*Header, error) { - return &Header{}, nil +func (p *Parser) Header() (Header, error) { + return Header{}, nil } // NewParser returns a Parser that uses r as the source @@ -107,9 +107,9 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // It is worth noting the amount of bytes read are always right up to before // the next fasta starts which means this function can effectively be used // to index where fastas start in a file or string. -func (p *Parser) Next() (*Record, error) { +func (p *Parser) Next() (Record, error) { if p.more == false { - return &Record{}, io.EOF + return Record{}, io.EOF } for p.scanner.Scan() { line := p.scanner.Bytes() @@ -128,7 +128,7 @@ func (p *Parser) Next() (*Record, error) { case line[0] != '>' && p.start: err := fmt.Errorf("invalid input: missing sequence identifier for sequence starting at line %d", p.line) record, _ := p.newRecord() - return &record, err + return record, err // start of a fasta line case line[0] != '>': p.buff.Write(line) @@ -137,7 +137,7 @@ func (p *Parser) Next() (*Record, error) { record, err := p.newRecord() // New name p.identifier = string(line[1:]) - return &record, err + return record, err // Process first line of file case line[0] == '>' && p.start: p.identifier = string(line[1:]) @@ -148,9 +148,9 @@ func (p *Parser) Next() (*Record, error) { // Add final sequence in file record, err := p.newRecord() if err != nil { - return &record, err + return record, err } - return &record, p.scanner.Err() + return record, p.scanner.Err() } func (p *Parser) newRecord() (Record, error) { diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index 79ced77b..4f901d95 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -54,7 +54,7 @@ func TestParser(t *testing.T) { } break } - fastas = append(fastas, *fa) + fastas = append(fastas, fa) } if len(fastas) != len(test.expected) { t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) @@ -84,7 +84,7 @@ func TestReadEmptyFasta(t *testing.T) { targetError = err break } - fastas = append(fastas, *fa) + fastas = append(fastas, fa) } if targetError == nil { t.Errorf("expected error reading empty fasta stream") @@ -108,7 +108,7 @@ func TestReadEmptySequence(t *testing.T) { targetError = err break } - fastas = append(fastas, *fa) + fastas = append(fastas, fa) } if targetError == nil { t.Errorf("expected error reading empty fasta sequence stream: %s", targetError) @@ -129,7 +129,7 @@ func TestBufferSmall(t *testing.T) { targetError = err break } - fastas = append(fastas, *fa) + fastas = append(fastas, fa) } if targetError == nil { t.Errorf("expected error with too small of a buffer") diff --git a/bio/slow5/example_test.go b/bio/slow5/example_test.go index 3f83b5b8..232217d6 100644 --- a/bio/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -24,7 +24,7 @@ func ExampleNewParser() { // Break at EOF break } - outputReads = append(outputReads, *read) + outputReads = append(outputReads, read) } fmt.Println(outputReads[0].RawSignal[0:10]) diff --git a/bio/slow5/slow5.go b/bio/slow5/slow5.go index 3be78288..df2a32e2 100644 --- a/bio/slow5/slow5.go +++ b/bio/slow5/slow5.go @@ -113,8 +113,8 @@ type Parser struct { } // Header returns the header -func (p *Parser) Header() (*Header, error) { - return &p.header, nil +func (p *Parser) Header() (Header, error) { + return p.header, nil } // NewParser parsers a slow5 file. @@ -212,9 +212,9 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, error) { } // Next parses the next read from a parser. -func (parser *Parser) Next() (*Read, error) { +func (parser *Parser) Next() (Read, error) { if parser.hitEOF { - return &Read{}, io.EOF + return Read{}, io.EOF } lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { @@ -222,10 +222,10 @@ func (parser *Parser) Next() (*Read, error) { parser.hitEOF = true if strings.TrimSpace(string(lineBytes)) == "" { // If EOF line is empty, return. If not, continue! - return &Read{}, io.EOF + return Read{}, io.EOF } } else { - return &Read{}, err + return Read{}, err } } parser.line++ @@ -247,37 +247,37 @@ func (parser *Parser) Next() (*Read, error) { case "read_group": readGroupID, err := strconv.ParseUint(values[valueIndex], 10, 32) if err != nil { - return &Read{}, fmt.Errorf("Failed convert read_group '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed convert read_group '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.ReadGroupID = uint32(readGroupID) case "digitisation": digitisation, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert digitisation '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert digitisation '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Digitisation = digitisation case "offset": offset, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert offset '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert offset '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Offset = offset case "range": nanoporeRange, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert range '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert range '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.Range = nanoporeRange case "sampling_rate": samplingRate, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert sampling_rate '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert sampling_rate '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.SamplingRate = samplingRate case "len_raw_signal": lenRawSignal, err := strconv.ParseUint(values[valueIndex], 10, 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert len_raw_signal '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert len_raw_signal '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.LenRawSignal = lenRawSignal case "raw_signal": @@ -285,7 +285,7 @@ func (parser *Parser) Next() (*Read, error) { for rawSignalIndex, rawSignalString := range strings.Split(values[valueIndex], ",") { rawSignal, err := strconv.ParseInt(rawSignalString, 10, 16) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert raw signal '%s' to int on line %d, signal index %d. Got Error: %w", rawSignalString, parser.line, rawSignalIndex, err) + return Read{}, fmt.Errorf("Failed to convert raw signal '%s' to int on line %d, signal index %d. Got Error: %w", rawSignalString, parser.line, rawSignalIndex, err) } rawSignals = append(rawSignals, int16(rawSignal)) } @@ -293,44 +293,44 @@ func (parser *Parser) Next() (*Read, error) { case "start_time": startTime, err := strconv.ParseUint(values[valueIndex], 10, 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert start_time '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert start_time '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.StartTime = startTime case "read_number": readNumber, err := strconv.ParseInt(values[valueIndex], 10, 32) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert read_number '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert read_number '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.ReadNumber = int32(readNumber) case "start_mux": startMux, err := strconv.ParseUint(values[valueIndex], 10, 8) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert start_mux '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert start_mux '%s' to uint on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.StartMux = uint8(startMux) case "median_before": medianBefore, err := strconv.ParseFloat(values[valueIndex], 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert median_before '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert median_before '%s' to float on line %d. Got Error: %w", values[valueIndex], parser.line, err) } newRead.MedianBefore = medianBefore case "end_reason": endReasonIndex, err := strconv.ParseInt(values[valueIndex], 10, 64) if err != nil { - return &Read{}, fmt.Errorf("Failed to convert end_reason '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) + return Read{}, fmt.Errorf("Failed to convert end_reason '%s' to int on line %d. Got Error: %w", values[valueIndex], parser.line, err) } if _, ok := parser.endReasonMap[int(endReasonIndex)]; !ok { - return &Read{}, fmt.Errorf("End reason out of range. Got '%d' on line %d. Cannot find valid enum reason", int(endReasonIndex), parser.line) + return Read{}, fmt.Errorf("End reason out of range. Got '%d' on line %d. Cannot find valid enum reason", int(endReasonIndex), parser.line) } newRead.EndReason = parser.endReasonMap[int(endReasonIndex)] case "channel_number": // For whatever reason, this is a string. newRead.ChannelNumber = values[valueIndex] default: - return &Read{}, fmt.Errorf("Unknown field to parser '%s' found on line %d. Please report to github.com/TimothyStiles/poly", fieldValue, parser.line) + return Read{}, fmt.Errorf("Unknown field to parser '%s' found on line %d. Please report to github.com/TimothyStiles/poly", fieldValue, parser.line) } } - return &newRead, nil + return newRead, nil } /****************************************************************************** diff --git a/bio/slow5/slow5_test.go b/bio/slow5/slow5_test.go index 47f26f8f..5903f3e4 100644 --- a/bio/slow5/slow5_test.go +++ b/bio/slow5/slow5_test.go @@ -39,7 +39,7 @@ func TestParse(t *testing.T) { } break } - outputReads = append(outputReads, *read) + outputReads = append(outputReads, read) } if outputReads[0].RawSignal[0] != 430 { t.Errorf("Expected first outputRead to have a raw_signal of 430. Got: %d", outputReads[0].RawSignal[0]) @@ -122,7 +122,7 @@ func TestParseReads(t *testing.T) { } break } - outputReads = append(outputReads, *read) + outputReads = append(outputReads, read) } if outputReads[0].ReadID != "0026631e-33a3-49ab-aa22-3ab157d71f8b" { t.Errorf("First read id should be 0026631e-33a3-49ab-aa22-3ab157d71f8b. Got: %s", outputReads[0].ReadID) @@ -172,7 +172,7 @@ func TestWrite(t *testing.T) { // Break at EOF break } - reads <- *read + reads <- read } close(reads) }() From 00732a4bb0c136d68f7ab87a206878a4876b68a3 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 6 Sep 2023 20:16:26 -0700 Subject: [PATCH 15/59] updated with NewXXXParser --- bio/bio.go | 65 ++++++-------------------------------- bio/example_test.go | 77 ++++++++------------------------------------- 2 files changed, 22 insertions(+), 120 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 595119c5..bebfcd99 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -5,12 +5,9 @@ package bio import ( "bufio" - "compress/gzip" "errors" - "fmt" "io" "math" - "os" "github.com/TimothyStiles/poly/bio/fasta" "github.com/TimothyStiles/poly/bio/slow5" @@ -28,9 +25,6 @@ const ( Uniprot ) -type FastaParser = *Parser[fasta.Record, fasta.Header] -type Slow5Parser = *Parser[slow5.Read, slow5.Header] - // DefaultMaxLineLength variables are defined for performance reasons. While // parsing, reading byte-by-byte takes far, far longer than reading many bytes // into a buffer. In golang, this buffer in bufio is usually 64kb. However, @@ -70,61 +64,21 @@ type Parser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | sl LowLevelParser LowLevelParser[DataType, DataTypeHeader] } -func NewParser(format Format, r io.Reader) (interface{}, error) { - maxLineLength, ok := DefaultMaxLengths[format] - if !ok { - return nil, fmt.Errorf("did not find format in default lengths") - } - return NewParserWithMaxLine(format, r, maxLineLength) -} - -func NewParserWithMaxLine(format Format, r io.Reader, maxLineLength int) (interface{}, error) { - switch format { - case Fasta: - return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil - case Slow5: - parser, err := slow5.NewParser(r, maxLineLength) - return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err - } - return nil, nil -} - -func NewParserGz(format Format, r io.Reader) (interface{}, error) { - return NewParserCompressed(format, r, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) -} - -func NewParserCompressed(format Format, r io.Reader, decoderFunc func(io.Reader) (io.Reader, error)) (interface{}, error) { - decodedReader, err := decoderFunc(r) - if err != nil { - return nil, err - } - return NewParser(format, decodedReader) +func NewFastaParser(r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { + return NewFastaParserWithMaxLineLength(r, DefaultMaxLengths[Fasta]) } -/****************************************************************************** - -Parser read functions - -******************************************************************************/ - -func Read(format Format, path string) (interface{}, error) { - file, err := os.Open(path) - if err != nil { - return nil, err - } - return NewParser(format, file) +func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { + return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil } -func ReadGz(format Format, path string) (interface{}, error) { - return ReadCompressed(format, path, func(r io.Reader) (io.Reader, error) { return gzip.NewReader(r) }) +func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { + return NewSlow5ParserWithMaxLineLength(r, DefaultMaxLengths[Slow5]) } -func ReadCompressed(format Format, path string, decoderFunc func(io.Reader) (io.Reader, error)) (interface{}, error) { - file, err := os.Open(path) - if err != nil { - return nil, err - } - return NewParserCompressed(format, file, decoderFunc) +func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[slow5.Read, slow5.Header], error) { + parser, err := slow5.NewParser(r, maxLineLength) + return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err } /****************************************************************************** @@ -172,7 +126,6 @@ func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTy return data, header, nil } -// Parse to channel parses a func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataType) error { for { record, err := p.Next() diff --git a/bio/example_test.go b/bio/example_test.go index 83fb0f84..d8fd7b6e 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -4,7 +4,7 @@ import ( "bytes" "compress/gzip" "fmt" - "io" + "os" "strings" "github.com/TimothyStiles/poly/bio" @@ -42,8 +42,8 @@ func Example() { // ExampleRead shows an example of reading a file from disk. func ExampleRead() { // Read lets you read files from disk into a parser. - parserInterface, _ := bio.Read(bio.Fasta, "fasta/data/base.fasta") - parser := parserInterface.(bio.FastaParser) + file, _ := os.Open("fasta/data/base.fasta") + parser, _ := bio.NewFastaParser(file) records, _ := parser.Parse() @@ -53,24 +53,9 @@ func ExampleRead() { func ExampleReadGz() { // ReadGz lets you read gzipped files into a parser. - parserInterface, _ := bio.ReadGz(bio.Fasta, "fasta/data/base.fasta.gz") - parser := parserInterface.(bio.FastaParser) - records, _ := parser.Parse() - - fmt.Println(records[1].Sequence) - // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* -} - -func ExampleReadCompressed() { - // Sometimes you have files with a different compression algorithms. Here - // is how you would read a compressed file without ReadGz. - - // We first make a decoderFunc with a compatible function type - decoderFunc := func(r io.Reader) (io.Reader, error) { - return gzip.NewReader(r) - } - parserInterface, _ := bio.ReadCompressed(bio.Fasta, "fasta/data/base.fasta.gz", decoderFunc) - parser := parserInterface.(bio.FastaParser) + fileGz, _ := os.Open("fasta/data/base.fasta.gz") + file, _ := gzip.NewReader(fileGz) + parser, _ := bio.NewFastaParser(file) records, _ := parser.Parse() fmt.Println(records[1].Sequence) @@ -95,39 +80,8 @@ FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`)) zw.Close() - parserInterface, _ := bio.NewParserGz(bio.Fasta, &file) // Make a parser with the gz file - parser := parserInterface.(bio.FastaParser) - records, _ := parser.Parse() // Parse all data records from file - - fmt.Println(records[1].Sequence) - // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* -} - -func ExampleNewParserCompressed() { - // First, lets make a file that is compressed, represented by this - // buffer. - var file bytes.Buffer - zw := gzip.NewWriter(&file) - _, _ = zw.Write([]byte(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] -LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV -EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG -LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL -GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX -IENY - ->MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken -ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID -FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA -DIDGDGQVNYEEFVQMMTAK*`)) - zw.Close() - - // Next, lets make a decoderFunc with a compatible function type - decoderFunc := func(r io.Reader) (io.Reader, error) { - return gzip.NewReader(r) - } - - parserInterface, _ := bio.NewParserCompressed(bio.Fasta, &file, decoderFunc) // Make a parser with the compressed file - parser := parserInterface.(bio.FastaParser) + fileDecompressed, _ := gzip.NewReader(&file) // Decompress the file + parser, _ := bio.NewFastaParser(fileDecompressed) records, _ := parser.Parse() // Parse all data records from file fmt.Println(records[1].Sequence) @@ -144,8 +98,7 @@ func ExampleParseWithHeader() { #read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number 0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 `) - parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file - parser := parserInterface.(bio.Slow5Parser) + parser, _ := bio.NewSlow5Parser(file) reads, header, _ := parser.ParseWithHeader() // Parse all data records from file fmt.Printf("%s, %s\n", header.HeaderValues[0].Slow5Version, reads[0].ReadID) @@ -166,8 +119,7 @@ IENY ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`) - parserInterface, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file - parser := parserInterface.(bio.FastaParser) + parser, _ := bio.NewFastaParser(file) channel := make(chan fasta.Record) go parser.ParseToChannel(channel) @@ -191,8 +143,7 @@ func ExampleWriteAll() { #read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number 0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 `) - parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file - parser := parserInterface.(bio.Slow5Parser) + parser, _ := bio.NewSlow5Parser(file) reads, header, _ := parser.ParseWithHeader() // Parse all data records from file // Write the files to an io.Writer. @@ -228,8 +179,7 @@ IENY ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`) - parserInterface, _ := bio.NewParser(bio.Fasta, file) // Make a parser with the file - parser := parserInterface.(bio.FastaParser) + parser, _ := bio.NewFastaParser(file) records, _ := parser.Parse() // Parse all data records from file fmt.Println(records[1].Sequence) @@ -246,8 +196,7 @@ func ExampleSlow5() { #read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal start_time read_number start_mux median_before end_reason channel_number 0026631e-33a3-49ab-aa22-3ab157d71f8b 0 8192 16 1489.52832 4000 5347 430,472,463 8318394 5383 1 219.133423 5 10 `) - parserInterface, _ := bio.NewParser(bio.Slow5, file) // Make a parser with the file - parser := parserInterface.(bio.Slow5Parser) + parser, _ := bio.NewSlow5Parser(file) reads, _ := parser.Parse() // Parse all data records from file fmt.Println(reads[0].RawSignal) From 3ce81090f42f19bc232c7be6ff73b11ed3481f2c Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 6 Sep 2023 21:15:53 -0700 Subject: [PATCH 16/59] added 3 parsers --- bio/bio.go | 34 ++++-- bio/example_test.go | 16 ++- bio/fasta/example_test.go | 2 +- bio/fasta/fasta.go | 16 +-- bio/fasta/fasta_test.go | 8 +- bio/fastq/example_test.go | 36 +------ bio/fastq/fastq.go | 216 +++++++++----------------------------- bio/fastq/fastq_test.go | 71 +++---------- bio/slow5/example_test.go | 2 +- bio/slow5/slow5.go | 42 ++++---- bio/slow5/slow5_test.go | 6 +- 11 files changed, 142 insertions(+), 307 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index bebfcd99..21048e9b 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -10,6 +10,7 @@ import ( "math" "github.com/TimothyStiles/poly/bio/fasta" + "github.com/TimothyStiles/poly/bio/fastq" "github.com/TimothyStiles/poly/bio/slow5" ) @@ -49,9 +50,9 @@ Lower level interfaces ******************************************************************************/ -type LowLevelParser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] interface { - Header() (DataTypeHeader, error) - Next() (DataType, error) +type LowLevelParser[DataType fasta.Record | fastq.Read | slow5.Read, DataTypeHeader fasta.Header | fastq.Header | slow5.Header] interface { + Header() (*DataTypeHeader, error) + Next() (*DataType, error) } /****************************************************************************** @@ -60,7 +61,7 @@ Higher level parse ******************************************************************************/ -type Parser[DataType fasta.Record | slow5.Read, DataTypeHeader fasta.Header | slow5.Header] struct { +type Parser[DataType fasta.Record | fastq.Read | slow5.Read, DataTypeHeader fasta.Header | fastq.Header | slow5.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } @@ -72,6 +73,14 @@ func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fa return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil } +func NewFastqParser(r io.Reader) (*Parser[fastq.Read, fastq.Header], error) { + return NewFastqParserWithMaxLineLength(r, DefaultMaxLengths[Fastq]) +} + +func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fastq.Read, fastq.Header], error) { + return &Parser[fastq.Read, fastq.Header]{LowLevelParser: fastq.NewParser(r, maxLineLength)}, nil +} + func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { return NewSlow5ParserWithMaxLineLength(r, DefaultMaxLengths[Slow5]) } @@ -87,22 +96,25 @@ Parser higher-level functions ******************************************************************************/ -func (p *Parser[DataType, DataTypeHeader]) Next() (DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { return p.LowLevelParser.Next() } -func (p *Parser[DataType, DataTypeHeader]) Header() (DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { return p.LowLevelParser.Header() } -func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error) { - var records []DataType +func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, error) { + var records []*DataType for counter := 0; counter < countN; counter++ { record, err := p.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. } + if record != nil { + records = append(records, record) + } return records, err } records = append(records, record) @@ -110,11 +122,11 @@ func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]DataType, error return records, nil } -func (p *Parser[DataType, DataTypeHeader]) Parse() ([]DataType, error) { +func (p *Parser[DataType, DataTypeHeader]) Parse() ([]*DataType, error) { return p.ParseN(math.MaxInt) } -func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]DataType, DataTypeHeader, error) { +func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *DataTypeHeader, error) { header, headerErr := p.Header() data, err := p.Parse() if headerErr != nil { @@ -136,6 +148,6 @@ func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataTyp close(channel) return err } - channel <- record + channel <- *record } } diff --git a/bio/example_test.go b/bio/example_test.go index d8fd7b6e..cf21baea 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -151,7 +151,7 @@ func ExampleWriteAll() { var buffer bytes.Buffer _, _ = header.WriteTo(&buffer) for _, read := range reads { - read.WriteTo(&buffer) + _, _ = read.WriteTo(&buffer) } fmt.Println(string(buffer.Bytes())) @@ -186,6 +186,20 @@ DIDGDGQVNYEEFVQMMTAK*`) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } +func ExampleFastq() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`@e3cc70d5-90ef-49b6-bbe1-cfef99537d73 runid=99790f25859e24307203c25273f3a8be8283e7eb read=13956 ch=53 start_time=2020-11-11T01:49:01Z flow_cell_id=AEI083 protocol_group_id=NanoSav2 sample_id=nanosavseq2 +GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAAACAGATGCAAGTCTGGTGTGATTAACTTCACCAAAGGGCTGGTTGTAATATTAGGAAATCTAACAATAGATTCTGTTGGTTGGACTCTAAAATTAGAAATTTGATAGATTCCTTTTCCCAAATGAAAGTTTAACGTACACTTTGTTTCTAAAGGAAGGTCAAATTACAGTCTACAGCATCGTAATGGTTCATTTTCATTTATATTTTAATACTAGAAAAGTCCTAGGTTGAAGATAACCACATAATAAGCTGCAACTTCAGCTGTCCCAACCTGAAGAAGAATCGCAGGAGTCGAAATAACTTCTGTAAAGCAAGTAGTTTGAACCTATTGATGTTTCAACATGAGCAATACGTAACT ++ +$$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0-+3558,/)+&)'&&%&$$'%'%'&*/5978<9;**'3*'&&A?99:;:97:278?=9B?CLJHGG=9<@AC@@=>?=>D>=3<>=>3362$%/((+/%&+//.-,%-4:+..000,&$#%$$%+*)&*0%.//*?<<;>DE>.8942&&//074&$033)*&&&%**)%)962133-%'&*99><<=1144??6.027639.011/-)($#$(/422*4;:=122>?@6964:.5'8:52)*675=:4@;323&&##'.-57*4597)+0&:7<7-550REGB21/0+*79/&/6538())+)+23665+(''$$$'-2(&&*-.-#$&%%$$,-)&$$#$'&,);;' && p.start: p.identifier = string(line[1:]) @@ -148,9 +148,9 @@ func (p *Parser) Next() (Record, error) { // Add final sequence in file record, err := p.newRecord() if err != nil { - return record, err + return &record, err } - return record, p.scanner.Err() + return &record, p.scanner.Err() } func (p *Parser) newRecord() (Record, error) { diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index 4f901d95..79ced77b 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -54,7 +54,7 @@ func TestParser(t *testing.T) { } break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if len(fastas) != len(test.expected) { t.Errorf("case index %d: got %d fastas, expected %d", testIndex, len(fastas), len(test.expected)) @@ -84,7 +84,7 @@ func TestReadEmptyFasta(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error reading empty fasta stream") @@ -108,7 +108,7 @@ func TestReadEmptySequence(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error reading empty fasta sequence stream: %s", targetError) @@ -129,7 +129,7 @@ func TestBufferSmall(t *testing.T) { targetError = err break } - fastas = append(fastas, fa) + fastas = append(fastas, *fa) } if targetError == nil { t.Errorf("expected error with too small of a buffer") diff --git a/bio/fastq/example_test.go b/bio/fastq/example_test.go index 8a007c80..22b59786 100644 --- a/bio/fastq/example_test.go +++ b/bio/fastq/example_test.go @@ -3,7 +3,6 @@ package fastq_test import ( _ "embed" "fmt" - "os" "strings" "github.com/TimothyStiles/poly/bio/fastq" @@ -12,43 +11,10 @@ import ( //go:embed data/nanosavseq.fastq var baseFastq string -// ExampleRead shows basic usage for Read. -func ExampleRead() { - fastqs, _ := fastq.Read("data/nanosavseq.fastq") - fmt.Println(fastqs[0].Identifier) - //Output: - //e3cc70d5-90ef-49b6-bbe1-cfef99537d73 -} - -// ExampleReadGz shows basic usage for ReadGz. -func ExampleReadGz() { - fastqs, _ := fastq.ReadGz("data/nanosavseq.fastq.gz") - fmt.Println(fastqs[0].Identifier) - //Output: - //e3cc70d5-90ef-49b6-bbe1-cfef99537d73 -} - -// ExampleWrite shows basic usage of the writer. -func ExampleWrite() { - fastqs, _ := fastq.Read("data/nanosavseq.fastq") // get example data - _ = fastq.Write(fastqs, "data/test.fastq") // write it out again - testSequence, _ := fastq.Read("data/test.fastq") // read it in again - - os.Remove("data/test.fastq") // getting rid of test file - - fmt.Println(testSequence[0].Identifier) - fmt.Println(testSequence[0].Sequence) - fmt.Println(testSequence[0].Quality) - //Output: - //e3cc70d5-90ef-49b6-bbe1-cfef99537d73 - //GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAAACAGATGCAAGTCTGGTGTGATTAACTTCACCAAAGGGCTGGTTGTAATATTAGGAAATCTAACAATAGATTCTGTTGGTTGGACTCTAAAATTAGAAATTTGATAGATTCCTTTTCCCAAATGAAAGTTTAACGTACACTTTGTTTCTAAAGGAAGGTCAAATTACAGTCTACAGCATCGTAATGGTTCATTTTCATTTATATTTTAATACTAGAAAAGTCCTAGGTTGAAGATAACCACATAATAAGCTGCAACTTCAGCTGTCCCAACCTGAAGAAGAATCGCAGGAGTCGAAATAACTTCTGTAAAGCAAGTAGTTTGAACCTATTGATGTTTCAACATGAGCAATACGTAACT - //$$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0-+3558,/)+&)'&&%&$$'%'%'&*/5978<9;**'3*'&&A?99:;:97:278?=9B?CLJHGG=9<@AC@@=>?=>D>=3<>=>3362$%/((+/%&+//.-,%-4:+..000,&$#%$$%+*)&*0%.//*?<<;>DE>.8942&&//074&$033)*&&&%**)%)962133-%'&*99><<=1144??6.027639.011/-)($#$(/422*4;:=122>?@6964:.5'8:52)*675=:4@;323&&##'.-57*4597)+0&:7<7-550REGB21/0+*79/&/6538())+)+23665+(''$$$'-2(&&*-.-#$&%%$$,-)&$$#$'&,);;?=>D>=3<>=>3362$%/((+/%&+//.-,%-4:+..000,&$#%$$%+*)&*0%.//*?<<;>DE>.8942&&//074&$033)*&&&%**)%)962133-%'&*99><<=1144??6.027639.011/-)($#$(/422*4;:=122>?@6964:.5'8:52)*675=:4@;323&&##'.-57*4597)+0&:7<7-550REGB21/0+*79/&/6538())+)+23665+(''$$$'-2(&&*-.-#$&%%$$,-)&$$#$'&,);; Date: Wed, 6 Sep 2023 21:39:12 -0700 Subject: [PATCH 17/59] added pileup --- bio/bio.go | 13 +++- bio/example_test.go | 16 +++++ bio/pileup/pileup.go | 141 ++++++++++---------------------------- bio/pileup/pileup_test.go | 84 +++-------------------- 4 files changed, 72 insertions(+), 182 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 21048e9b..c006aaa9 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -11,6 +11,7 @@ import ( "github.com/TimothyStiles/poly/bio/fasta" "github.com/TimothyStiles/poly/bio/fastq" + "github.com/TimothyStiles/poly/bio/pileup" "github.com/TimothyStiles/poly/bio/slow5" ) @@ -50,7 +51,7 @@ Lower level interfaces ******************************************************************************/ -type LowLevelParser[DataType fasta.Record | fastq.Read | slow5.Read, DataTypeHeader fasta.Header | fastq.Header | slow5.Header] interface { +type LowLevelParser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] interface { Header() (*DataTypeHeader, error) Next() (*DataType, error) } @@ -61,7 +62,7 @@ Higher level parse ******************************************************************************/ -type Parser[DataType fasta.Record | fastq.Read | slow5.Read, DataTypeHeader fasta.Header | fastq.Header | slow5.Header] struct { +type Parser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } @@ -90,6 +91,14 @@ func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[sl return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err } +func NewPileupParser(r io.Reader) (*Parser[pileup.Line, pileup.Header], error) { + return NewPileupParserWithMaxLineLength(r, DefaultMaxLengths[Pileup]) +} + +func NewPileupParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[pileup.Line, pileup.Header], error) { + return &Parser[pileup.Line, pileup.Header]{LowLevelParser: pileup.NewParser(r, maxLineLength)}, nil +} + /****************************************************************************** Parser higher-level functions diff --git a/bio/example_test.go b/bio/example_test.go index cf21baea..95d01f51 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -216,3 +216,19 @@ func ExampleSlow5() { fmt.Println(reads[0].RawSignal) // Output: [430 472 463] } + +func ExamplePileup() { + file := strings.NewReader(`seq1 272 T 24 ,.$.....,,.,.,...,,,.,..^+. <<<+;<<<<<<<<<<<=<;<;7<& +seq1 273 T 23 ,.....,,.,.,...,,,.,..A <<<;<<<<<<<<<3<=<<<;<<+ +seq1 274 T 23 ,.$....,,.,.,...,,,.,... 7<7;<;<<<<<<<<<=<;<;<<6 +seq1 275 A 23 ,$....,,.,.,...,,,.,...^l. <+;9*<<<<<<<<<=<<:;<<<< +seq1 276 G 22 ...T,,.,.,...,,,.,.... 33;+<<7=7<<7<&<<1;<<6< +seq1 277 T 22 ....,,.,.,.C.,,,.,..G. +7<;<<<<<<<&<=<<:;<<&< +seq1 278 G 23 ....,,.,.,...,,,.,....^k. %38*<<;<7<<7<=<<<;<<<<< +seq1 279 C 23 A..T,,.,.,...,,,.,..... 75&<<<<<<<<<=<<<9<<:<<<`) + parser, _ := bio.NewPileupParser(file) + lines, _ := parser.Parse() // Parse all lines from file + + fmt.Println(lines[1].Quality) + // Output: <<<;<<<<<<<<<3<=<<<;<<+ +} diff --git a/bio/pileup/pileup.go b/bio/pileup/pileup.go index 0f714169..0b5ad4df 100644 --- a/bio/pileup/pileup.go +++ b/bio/pileup/pileup.go @@ -30,34 +30,24 @@ wikipedia (https://en.wikipedia.org/wiki/Pileup_format) is shown below: 6. Quality: Phred quality scores associated with each base This package provides a parser and writer for working with pileup files. + +Wikipedia reference: https://en.wikipedia.org/wiki/Pileup_format */ package pileup import ( "bufio" - "bytes" - "compress/gzip" - "errors" "fmt" "io" - "math" - "os" "strconv" "strings" "unicode" ) -// https://en.wikipedia.org/wiki/Pileup_format - -var ( - gzipReaderFn = gzip.NewReader - openFn = os.Open -) - -// Pileup struct is a single position in a pileup file. Pileup files "pile" +// Line struct is a single line in a pileup file. Pileup files "pile" // a bunch of separate bam/sam alignments into something more readable at a per // base pair level, so are only useful as a grouping. -type Pileup struct { +type Line struct { Sequence string `json:"sequence"` Position uint `json:"position"` ReferenceBase string `json:"reference_base"` @@ -66,12 +56,12 @@ type Pileup struct { Quality string `json:"quality"` } -// Parse parses a given Pileup file into an array of Pileup structs. -func Parse(r io.Reader) ([]Pileup, error) { - // 32kB is a magic number often used by the Go stdlib for parsing. We multiply it by two. - const maxLineSize = 2 * 32 * 1024 - parser := NewParser(r, maxLineSize) - return parser.ParseAll() +// Header is a blank struct, needed for compatibility with bio parsers. It contains nothing. +type Header struct{} + +// WriteTo is a blank function, needed for compatibility with bio parsers. It doesn't do anything. +func (header *Header) WriteTo(w io.Writer) (int64, error) { + return 0, nil } // Parser is a pileup parser. @@ -80,6 +70,11 @@ type Parser struct { line uint } +// Header returns a identifier with nothing and nil. +func (p *Parser) Header() (*Header, error) { + return nil, nil +} + // NewParser creates a parser from an io.Reader for pileup data. func NewParser(r io.Reader, maxLineSize int) *Parser { return &Parser{ @@ -87,38 +82,14 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { } } -// ParseAll parses all sequences in underlying reader only returning non-EOF errors. -// It returns all valid pileup sequences up to error if encountered. -func (parser *Parser) ParseAll() ([]Pileup, error) { - return parser.ParseN(math.MaxInt) -} - -// ParseN parses up to maxRows pileup sequences from the Parser's underlying reader. -// ParseN does not return EOF if encountered. -// If an non-EOF error is encountered it returns it and all correctly parsed sequences up to then. -func (parser *Parser) ParseN(maxRows int) (pileups []Pileup, err error) { - for counter := 0; counter < maxRows; counter++ { - pileup, err := parser.ParseNext() - if err != nil { - if errors.Is(err, io.EOF) { - err = nil // EOF not treated as parsing error. - } - return pileups, err - } - pileups = append(pileups, pileup) - } - return pileups, nil -} - -// ParseNext parses the next pileup row in a pileup file. -// ParseNext returns an EOF if encountered. -func (parser *Parser) ParseNext() (Pileup, error) { - if _, err := parser.reader.Peek(1); err != nil { - // Early return on error. Probably will be EOF. - return Pileup{}, err - } +// Next parses the next pileup row in a pileup file. +// Next returns an EOF if encountered. +func (parser *Parser) Next() (*Line, error) { // Parse out a single line lineBytes, err := parser.reader.ReadSlice('\n') + if err != nil { + return nil, err + } parser.line++ line := string(lineBytes) line = line[:len(line)-1] // Exclude newline delimiter. @@ -126,17 +97,17 @@ func (parser *Parser) ParseNext() (Pileup, error) { // Check that there are 6 values, as defined by the pileup format values := strings.Split(line, "\t") if len(values) != 6 { - return Pileup{}, fmt.Errorf("Error on line %d: Got %d values, expected 6.", parser.line, len(values)) + return nil, fmt.Errorf("Error on line %d: Got %d values, expected 6.", parser.line, len(values)) } // Convert Position and ReadCount to integers - positionInteger, err := strconv.Atoi(values[1]) + positionInteger, err := strconv.Atoi(strings.TrimSpace(values[1])) if err != nil { - return Pileup{}, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) + return nil, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) } - readCountInteger, err := strconv.Atoi(values[3]) + readCountInteger, err := strconv.Atoi(strings.TrimSpace(values[3])) if err != nil { - return Pileup{}, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) + return nil, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) } // Parse ReadResults @@ -153,6 +124,8 @@ func (parser *Parser) ParseNext() (Pileup, error) { } resultRune := resultsString[resultIndex] switch resultRune { + case ' ': + continue case '^': starts = starts + 1 skip = skip + 2 @@ -182,40 +155,18 @@ func (parser *Parser) ParseNext() (Pileup, error) { case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'T', 'G', 'C', 'N', 'a', 't', 'g', 'c', 'n', '-', '+': continue default: - return Pileup{}, fmt.Errorf("Rune within +,- not found on line %d. Got %c: only runes allowed are: [0 1 2 3 4 5 6 7 8 9 A T G C N a t g c n - +]", parser.line, letter) + return nil, fmt.Errorf("Rune within +,- not found on line %d. Got %c: only runes allowed are: [0 1 2 3 4 5 6 7 8 9 A T G C N a t g c n - +]", parser.line, letter) } } readResults = append(readResults, readResult) skip = skip + regularExpressionInt + len(numberOfJumps) // The 1 makes sure to include the regularExpressionInt in readResult string default: - return Pileup{}, fmt.Errorf("Rune not found on line %d. Got %c: only runes allowed are: [^ $ . , * A T G C N a t g c n - +]", parser.line, resultRune) + return nil, fmt.Errorf("Rune not found on line %d. Got %c: only runes allowed are: [^ $ . , * A T G C N a t g c n - +]", parser.line, resultRune) } readCount = readCount + 1 } - return Pileup{Sequence: values[0], Position: uint(positionInteger), ReferenceBase: values[2], ReadCount: uint(readCountInteger), ReadResults: readResults, Quality: values[5]}, nil -} - -// Reset discards all data in buffer and resets state. -func (parser *Parser) Reset(r io.Reader) { - parser.reader.Reset(r) - parser.line = 0 -} - -/****************************************************************************** - -Start of Read functions - -******************************************************************************/ - -// Read reads a file into an array of Pileup structs -func Read(path string) ([]Pileup, error) { - file, err := openFn(path) - if err != nil { - return nil, err - } - defer file.Close() - return Parse(file) + return &Line{Sequence: values[0], Position: uint(positionInteger), ReferenceBase: values[2], ReadCount: uint(readCountInteger), ReadResults: readResults, Quality: values[5]}, nil } /****************************************************************************** @@ -224,29 +175,11 @@ Start of Write functions ******************************************************************************/ -// WritePileup writes a pileup array to an io.Writer -func WritePileup(pileups []Pileup, w io.Writer) { - for _, pileup := range pileups { - w.Write([]byte(pileup.Sequence)) - w.Write([]byte("\t")) - w.Write([]byte(strconv.FormatUint(uint64(pileup.Position), 10))) - w.Write([]byte("\t")) - w.Write([]byte(pileup.ReferenceBase)) - w.Write([]byte("\t")) - w.Write([]byte(strconv.FormatUint(uint64(pileup.ReadCount), 10))) - w.Write([]byte("\t")) - for _, readResult := range pileup.ReadResults { - w.Write([]byte(readResult)) - } - w.Write([]byte("\t")) - w.Write([]byte(pileup.Quality)) - w.Write([]byte("\n")) +func (line *Line) WriteTo(w io.Writer) (int64, error) { + var buffer strings.Builder + for _, readResult := range line.ReadResults { + buffer.WriteString(readResult) } -} - -// Write writes a pileup array to a file -func Write(pileups []Pileup, path string) error { - var b bytes.Buffer - WritePileup(pileups, &b) - return os.WriteFile(path, b.Bytes(), 0644) + written, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n", line.Sequence, strconv.FormatUint(uint64(line.Position), 10), line.ReferenceBase, strconv.FormatUint(uint64(line.ReadCount), 10), buffer.String(), line.Quality) + return int64(written), err } diff --git a/bio/pileup/pileup_test.go b/bio/pileup/pileup_test.go index 38c95f47..dccb62ca 100644 --- a/bio/pileup/pileup_test.go +++ b/bio/pileup/pileup_test.go @@ -1,7 +1,6 @@ package pileup import ( - "bytes" "errors" "fmt" "io" @@ -18,16 +17,16 @@ func TestParse(t *testing.T) { defer file.Close() const maxLineSize = 2 * 32 * 1024 parser := NewParser(file, maxLineSize) - var pileupReads []Pileup + var pileupReads []Line for { - pileupRead, err := parser.ParseNext() + pileupRead, err := parser.Next() if err != nil { if !errors.Is(err, io.EOF) { t.Errorf("Got unknown error: %s", err) } break } - pileupReads = append(pileupReads, pileupRead) + pileupReads = append(pileupReads, *pileupRead) } if pileupReads[2].ReadCount != 1401 { t.Errorf("Expected 1401 read counts. Got: %d", pileupReads[2].ReadCount) @@ -41,7 +40,7 @@ func TestParse(t *testing.T) { defer file2.Close() parser = NewParser(file2, maxLineSize) for { - _, err = parser.ParseNext() + _, err = parser.Next() if err != nil { if !strings.Contains(fmt.Sprint(err), "values, expected 6.") { t.Errorf("Got unknown error: %s", err) @@ -58,7 +57,7 @@ func TestParse(t *testing.T) { defer file3.Close() parser = NewParser(file3, maxLineSize) for { - _, err = parser.ParseNext() + _, err = parser.Next() if err != nil { if !strings.Contains(fmt.Sprint(err), "Error on line") { t.Errorf("Got unknown error: %s", err) @@ -75,7 +74,7 @@ func TestParse(t *testing.T) { defer file4.Close() parser = NewParser(file4, maxLineSize) for { - _, err = parser.ParseNext() + _, err = parser.Next() if err != nil { if !strings.Contains(fmt.Sprint(err), "Error on line") { t.Errorf("Got unknown error: %s", err) @@ -92,7 +91,7 @@ func TestParse(t *testing.T) { defer file5.Close() parser = NewParser(file5, maxLineSize) for { - _, err = parser.ParseNext() + _, err = parser.Next() if err != nil { if !strings.Contains(fmt.Sprint(err), "Rune within +,- not found on line") { t.Errorf("Got unknown error: %s", err) @@ -109,7 +108,7 @@ func TestParse(t *testing.T) { defer file6.Close() parser = NewParser(file6, maxLineSize) for { - _, err = parser.ParseNext() + _, err = parser.Next() if err != nil { if !strings.Contains(fmt.Sprint(err), "Rune not found on line") { t.Errorf("Got unknown error: %s", err) @@ -117,71 +116,4 @@ func TestParse(t *testing.T) { break } } - - // Test ParseN - file7, err := os.Open("data/test.pileup") - if err != nil { - t.Errorf("Failed to open test.pileup: %s", err) - } - defer file7.Close() - parser = NewParser(file7, maxLineSize) - _, err = parser.ParseN(2) - if err != nil { - t.Errorf("Got unknown error: %s", err) - } -} - -func TestBuild(t *testing.T) { - file, err := os.Open("data/test.pileup") - if err != nil { - t.Errorf("Failed to open test.pileup: %s", err) - } - const maxLineSize = 2 * 32 * 1024 - parser := NewParser(file, maxLineSize) - pileups, err := parser.ParseAll() // Parse all - if err != nil { - t.Errorf("Failed to parse pileup: %s", err) - } - parser.Reset(file) - var b bytes.Buffer - WritePileup(pileups, &b) - newBody := b.Bytes() - file.Close() - - // Open file again, read all - file, err = os.Open("data/test.pileup") - if err != nil { - t.Errorf("Failed to open test.pileup: %s", err) - } - body, err := io.ReadAll(file) // Read them bytes - if err != nil { - t.Errorf("Failed to readall: %s", err) - } - if string(body) != string(newBody) { - t.Errorf("input bytes do not equal output bytes of build") - } - -} - -func TestRead(t *testing.T) { - _, err := Read("data/DOESNT_EXIST.pileup") - if err == nil { - t.Errorf("Should have failed on empty file") - } - _, err = Read("data/test.pileup") - if err != nil { - t.Errorf("Should have succeeded in reading pileup file") - } -} - -func TestWrite(t *testing.T) { - pileups, _ := Read("data/test.pileup") - err := Write(pileups, "tmp.pileup") - if err != nil { - t.Errorf("Failed to write temporary pileup") - } - err = os.Remove("tmp.pileup") - if err != nil { - t.Errorf("Failed to delete temporary pileup") - } } From df98fe3272883bb957a91e327d33885c22e43a7d Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Sat, 9 Sep 2023 10:48:22 -0700 Subject: [PATCH 18/59] add concurrent functions plus better documentation --- bio/bio.go | 181 +++++++++++++++++++++++++++++++++++++++----- bio/example_test.go | 12 +-- go.mod | 1 + go.sum | 2 + 4 files changed, 173 insertions(+), 23 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index c006aaa9..e306caf2 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -1,10 +1,17 @@ /* Package bio provides utilities for reading and writing sequence data. + +There are many different biological file formats for different applications. +The poly bio package provides a consistent way to work with each of these file +formats. The underlying data returned by each parser is as raw as we can return +while still being easy to use for downstream applications, and should be +immediately recognizable as the original format. */ package bio import ( "bufio" + "context" "errors" "io" "math" @@ -13,18 +20,17 @@ import ( "github.com/TimothyStiles/poly/bio/fastq" "github.com/TimothyStiles/poly/bio/pileup" "github.com/TimothyStiles/poly/bio/slow5" + "golang.org/x/sync/errgroup" ) +// Format is a enum of different parser formats. type Format int const ( Fasta Format = iota Fastq - Gff - Genbank Slow5 Pileup - Uniprot ) // DefaultMaxLineLength variables are defined for performance reasons. While @@ -35,13 +41,10 @@ const ( // particular reason to use a different number. const defaultMaxLineLength int = bufio.MaxScanTokenSize // 64kB is a magic number often used by the Go stdlib for parsing. var DefaultMaxLengths = map[Format]int{ - Fasta: defaultMaxLineLength, - Fastq: 8 * 1024 * 1024, // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. - Gff: defaultMaxLineLength, - Genbank: defaultMaxLineLength, - Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. - Pileup: defaultMaxLineLength, - Uniprot: defaultMaxLineLength, + Fasta: defaultMaxLineLength, + Fastq: 8 * 1024 * 1024, // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. + Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. + Pileup: defaultMaxLineLength, } /****************************************************************************** @@ -51,50 +54,87 @@ Lower level interfaces ******************************************************************************/ +// LowLevelParser is a generic interface that all parsers must support. It is +// very simple, only requiring two functions, Header() and Next(). Header() +// returns the header of the file if there is one: most files, like fasta, +// fastq, and pileup do not contain headers, while others like sam and slow5 do +// have headers. Next() returns a record/read/line from the file format, and +// terminates on an io.EOF error. +// +// Next() may terminate with an io.EOF error with a nil DataType or with a +// full DataType, depending on where the EOF is in the actual file. A check +// for this is needed at the last Next(), when it returns an io.EOF error. A +// pointer is used to represent the difference between a null DataType and an +// empty DataType. type LowLevelParser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] interface { Header() (*DataTypeHeader, error) Next() (*DataType, error) } +// The following checks that all DataType and DataTypeHeaders implement the io.WriteTo interface. +var _ io.WriterTo = (*fasta.Record)(nil) +var _ io.WriterTo = (*fastq.Read)(nil) +var _ io.WriterTo = (*slow5.Read)(nil) +var _ io.WriterTo = (*pileup.Line)(nil) +var _ io.WriterTo = (*fasta.Header)(nil) +var _ io.WriterTo = (*fastq.Header)(nil) +var _ io.WriterTo = (*slow5.Header)(nil) +var _ io.WriterTo = (*pileup.Header)(nil) + /****************************************************************************** Higher level parse ******************************************************************************/ +// Parser is generic bioinformatics file parser. It contains a LowerLevelParser +// and implements useful functions on top of it: such as Parse(), ParseToChannel(), and +// ParseWithHeader(). type Parser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] struct { LowLevelParser LowLevelParser[DataType, DataTypeHeader] } +// NewFastaParser initiates a new FASTA parser from an io.Reader. func NewFastaParser(r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { return NewFastaParserWithMaxLineLength(r, DefaultMaxLengths[Fasta]) } +// NewFastaParserWithMaxLineLength initiates a new FASTA parser from an +// io.Reader and a user-given maxLineLength. func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil } +// NewFastqParser initiates a new FASTQ parser from an io.Reader. func NewFastqParser(r io.Reader) (*Parser[fastq.Read, fastq.Header], error) { return NewFastqParserWithMaxLineLength(r, DefaultMaxLengths[Fastq]) } +// NewFastqParserWithMaxLineLength initiates a new FASTQ parser from an +// io.Reader and a user-given maxLineLength. func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fastq.Read, fastq.Header], error) { return &Parser[fastq.Read, fastq.Header]{LowLevelParser: fastq.NewParser(r, maxLineLength)}, nil } +// NewSlow5Parser initiates a new SLOW5 parser from an io.Reader. func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { return NewSlow5ParserWithMaxLineLength(r, DefaultMaxLengths[Slow5]) } +// NewSlow5ParserWithMaxLineLength initiates a new SLOW5 parser from an +// io.Reader and a user-given maxLineLength. func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[slow5.Read, slow5.Header], error) { parser, err := slow5.NewParser(r, maxLineLength) return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err } +// NewPileupParser initiates a new Pileup parser from an io.Reader. func NewPileupParser(r io.Reader) (*Parser[pileup.Line, pileup.Header], error) { return NewPileupParserWithMaxLineLength(r, DefaultMaxLengths[Pileup]) } +// NewPileupParserWithMaxLineLength initiates a new Pileup parser from an +// io.Reader and a user-given maxLineLength. func NewPileupParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[pileup.Line, pileup.Header], error) { return &Parser[pileup.Line, pileup.Header]{LowLevelParser: pileup.NewParser(r, maxLineLength)}, nil } @@ -105,14 +145,37 @@ Parser higher-level functions ******************************************************************************/ +// Next is a parsing primitive that should be used when low-level control is +// needed. It returns the next record/read/line from the parser. On EOF, it +// returns an io.EOF error, though the returned FASTA/FASTQ/SLOW5/Pileup may or +// may not be nil, depending on where the io.EOF is. This should be checked by +// downstream software. Next can only be called as many times as there are +// records in a file, as the parser reads the underlying io.Reader in a +// straight line. func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { return p.LowLevelParser.Next() } +// Header is a parsing primitive that should be used when low-level control is +// needed. It returns the header of the parser, which is usually parsed prior +// to the parser being returned by the "NewXXXParser" functions. Unlike the +// Next() function, Header() can be called as many times as needed. Sometimes +// files have useful headers, while other times they do not. +// +// The following file formats do not have a useful header: +// +// FASTA +// FASTQ +// Pileup +// +// The following file formats do have a useful header: +// +// SLOW5 func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { return p.LowLevelParser.Header() } +// ParseN returns a countN number of records/reads/lines from the parser. func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, error) { var records []*DataType for counter := 0; counter < countN; counter++ { @@ -131,10 +194,16 @@ func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, erro return records, nil } +// Parse returns all records/reads/lines from the parser, but does not include +// the header. It can only be called once on a given parser because it will +// read all the input from the underlying io.Reader before exiting. func (p *Parser[DataType, DataTypeHeader]) Parse() ([]*DataType, error) { return p.ParseN(math.MaxInt) } +// ParseWithHeader returns all records/reads/lines, plus the header, from the +// parser. It can only be called once on a given parser because it will read +// all the input from the underlying io.Reader before exiting. func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *DataTypeHeader, error) { header, headerErr := p.Header() data, err := p.Parse() @@ -147,16 +216,92 @@ func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *Data return data, header, nil } -func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(channel chan<- DataType) error { +/****************************************************************************** + +Concurrent higher-level functions + +******************************************************************************/ + +// ParseToChannel pipes all records/reads/lines from a parser into a channel, +// then optionally closes that channel. If parsing a single file, +// "keepChannelOpen" should be set to false, which will close the channel once +// parsing is complete. If many files are being parsed to a single channel, +// keepChannelOpen should be set to true, so that an external function will +// close channel once all are done parsing. +// +// Context can be used to close the parser in the middle of parsing - for +// example, if an error is found in another parser elsewhere and all files +// need to close. +func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(ctx context.Context, channel chan<- DataType, keepChannelOpen bool) error { for { - record, err := p.Next() - if err != nil { - if errors.Is(err, io.EOF) { - err = nil // EOF not treated as parsing error. + select { + case <-ctx.Done(): + return ctx.Err() + default: + record, err := p.Next() + if err != nil { + if errors.Is(err, io.EOF) { + err = nil // EOF not treated as parsing error. + } + if record != nil { + channel <- *record + } + if !keepChannelOpen { + close(channel) + } + return err } - close(channel) - return err + channel <- *record } - channel <- *record } } + +// ManyFastaToChannel takes a list of FASTA parsers and pipes all +// records/reads/lines to a single channel. +func ManyFastaToChannel(ctx context.Context, parsers []*Parser[fasta.Record, fasta.Header], channel chan<- fasta.Record) error { + return manyToChannel[fasta.Record, fasta.Header](ctx, parsers, channel) +} + +// ManyFastqToChannel takes a list of FASTQ parsers and pipes all +// records/reads/lines to a single channel. +func ManyFastqToChannel(ctx context.Context, parsers []*Parser[fastq.Read, fastq.Header], channel chan<- fastq.Read) error { + return manyToChannel[fastq.Read, fastq.Header](ctx, parsers, channel) +} + +// ManySlow5ToChannel takes a list of SLOW5 parsers and pipes all +// records/reads/lines to a single channel. +func ManySlow5ToChannel(ctx context.Context, parsers []*Parser[slow5.Read, slow5.Header], channel chan<- slow5.Read) error { + return manyToChannel[slow5.Read, slow5.Header](ctx, parsers, channel) +} + +// ManyPileupToChannel takes a list of pileup parsers and pipes all +// records/reads/lines to a single channel. +func ManyPileupToChannel(ctx context.Context, parsers []*Parser[pileup.Line, pileup.Header], channel chan<- pileup.Line) error { + return manyToChannel[pileup.Line, pileup.Header](ctx, parsers, channel) +} + +// manyToChannel is a generic function that implements the ManyXXXToChannel +// functions. It properly does concurrent parsing of many parsers to a +// single channel, then closes that channel. If any of the files fail to +// parse, the entire pipeline exits and returns. +func manyToChannel[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header](ctx context.Context, parsers []*Parser[DataType, DataTypeHeader], channel chan<- DataType) error { + errorGroup, ctx := errgroup.WithContext(ctx) + // For each parser, start a new goroutine to parse data to the channel + for _, p := range parsers { + parser := p // Copy to local variable to avoid loop variable scope issues + errorGroup.Go(func() error { + // Use the context to exit early if another goroutine fails + select { + case <-ctx.Done(): + return ctx.Err() + default: + // Use the parser's ParseToChannel function, but keep the channel open + return parser.ParseToChannel(ctx, channel, true) + } + }) + } + // Wait for all parsers to complete + err := errorGroup.Wait() + close(channel) + return err +} diff --git a/bio/example_test.go b/bio/example_test.go index 95d01f51..6589ef37 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -3,6 +3,7 @@ package bio_test import ( "bytes" "compress/gzip" + "context" "fmt" "os" "strings" @@ -122,7 +123,8 @@ DIDGDGQVNYEEFVQMMTAK*`) parser, _ := bio.NewFastaParser(file) channel := make(chan fasta.Record) - go parser.ParseToChannel(channel) + ctx := context.Background() + go parser.ParseToChannel(ctx, channel, false) var records []fasta.Record for record := range channel { @@ -165,7 +167,7 @@ func ExampleWriteAll() { // } -func ExampleFasta() { +func ExampleNewFastaParser() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. file := strings.NewReader(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] @@ -186,7 +188,7 @@ DIDGDGQVNYEEFVQMMTAK*`) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } -func ExampleFastq() { +func ExampleNewFastqParser() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. file := strings.NewReader(`@e3cc70d5-90ef-49b6-bbe1-cfef99537d73 runid=99790f25859e24307203c25273f3a8be8283e7eb read=13956 ch=53 start_time=2020-11-11T01:49:01Z flow_cell_id=AEI083 protocol_group_id=NanoSav2 sample_id=nanosavseq2 @@ -200,7 +202,7 @@ $$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0 // Output:GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAAACAGATGCAAGTCTGGTGTGATTAACTTCACCAAAGGGCTGGTTGTAATATTAGGAAATCTAACAATAGATTCTGTTGGTTGGACTCTAAAATTAGAAATTTGATAGATTCCTTTTCCCAAATGAAAGTTTAACGTACACTTTGTTTCTAAAGGAAGGTCAAATTACAGTCTACAGCATCGTAATGGTTCATTTTCATTTATATTTTAATACTAGAAAAGTCCTAGGTTGAAGATAACCACATAATAAGCTGCAACTTCAGCTGTCCCAACCTGAAGAAGAATCGCAGGAGTCGAAATAACTTCTGTAAAGCAAGTAGTTTGAACCTATTGATGTTTCAACATGAGCAATACGTAACT } -func ExampleSlow5() { +func ExampleNewSlow5Parser() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. file := strings.NewReader(`#slow5_version 0.2.0 @@ -217,7 +219,7 @@ func ExampleSlow5() { // Output: [430 472 463] } -func ExamplePileup() { +func ExampleNewPileupParser() { file := strings.NewReader(`seq1 272 T 24 ,.$.....,,.,.,...,,,.,..^+. <<<+;<<<<<<<<<<<=<;<;7<& seq1 273 T 23 ,.....,,.,.,...,,,.,..A <<<;<<<<<<<<<3<=<<<;<<+ seq1 274 T 23 ,.$....,,.,.,...,,,.,... 7<7;<;<<<<<<<<<=<;<;<<6 diff --git a/go.mod b/go.mod index 0d403922..f0965ad8 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/mattn/go-sqlite3 v1.14.13 // indirect + golang.org/x/sync v0.3.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 16976009..e46500fa 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From fa4d29a81991f9231e5948360debbc7fc5535ef3 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 11 Sep 2023 09:12:57 -0700 Subject: [PATCH 19/59] moved svb to ioToBio --- bio/slow5/example_test.go | 1 + bio/slow5/slow5.go | 49 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/bio/slow5/example_test.go b/bio/slow5/example_test.go index 3f83b5b8..e0dacd06 100644 --- a/bio/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -12,6 +12,7 @@ func ExampleNewParser() { // run where I was testing using nanopore for doing COVID testing. It // contains real nanopore data. file, _ := os.Open("data/example.slow5") + defer file.Close() // Set maxLineSize to 64kb. If you expect longer reads, // make maxLineSize longer! const maxLineSize = 2 * 32 * 1024 diff --git a/bio/slow5/slow5.go b/bio/slow5/slow5.go index 3ebe8436..f0375f40 100644 --- a/bio/slow5/slow5.go +++ b/bio/slow5/slow5.go @@ -25,6 +25,8 @@ import ( "sort" "strconv" "strings" + + "github.com/koeng101/svb" ) /****************************************************************************** @@ -473,3 +475,50 @@ func (read *Read) WriteTo(w io.Writer) (int64, error) { } return written, nil } + +/****************************************************************************** +Aug 15, 2023 + +StreamVByte (svb) compression of raw signal strength is used to decrease the +overall size of records in blow5 files. In my tests using a SQLite database +that contained both slow5 and fastq files, switching from raw signal TEXT to +svb compressed BLOBs brought the total database size from 12GB to 7.1GB, a +~40% reduction in size. + +This is the primary method that can be used to decrease the size of storing +slow5 records in alternative datastores to blow5 (SQL databases, etc). + +svb is an integer compression algorithm, which are specialized in compressing +integer arrays, which perfectly fits raw signal strength data. When converting +from slow5 to blow5, files are additionally compressed with zstd or zlib on top +of raw signal compression with svb. Still, svb compression is where most the +data size saving comes from. + +Stream VByte paper: https://doi.org/10.48550/arXiv.1709.08990 + +Keoni + +******************************************************************************/ + +// SvbCompressRawSignal takes a read and converts its raw signal field to two +// arrays: a mask array and a data array. Both are needed for decompression. +func SvbCompressRawSignal(rawSignal []int16) (mask, data []byte) { + rawSignalUint32 := make([]uint32, len(rawSignal)) + for idx := range rawSignal { + rawSignalUint32[idx] = uint32(rawSignal[idx]) + } + return svb.Uint32Encode(rawSignalUint32) +} + +// SvbDecompressRawSignal decompresses raw signal back to a []int16. It +// requires not only the mask array and data array returned by +// SvbCompressRawSignal, but also the length of the raw signals. +func SvbDecompressRawSignal(lenRawSignal int, mask, data []byte) []int16 { + rawSignalUint32 := make([]uint32, lenRawSignal) + rawSignal := make([]int16, lenRawSignal) + svb.Uint32Decode32(mask, data, rawSignalUint32) + for idx := 0; idx < lenRawSignal; idx++ { + rawSignal[idx] = int16(rawSignalUint32[idx]) + } + return rawSignal +} From f80b317632a475fca2676d86dcd2ae93b68eb1da Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 11 Sep 2023 09:24:34 -0700 Subject: [PATCH 20/59] Improve tests --- bio/slow5/example_test.go | 31 +++++++++++++++++++++++++++++++ bio/slow5/slow5_test.go | 29 +++++++++++++++++++++++++++++ go.mod | 2 ++ go.sum | 24 ++++++++++++++++++++++++ 4 files changed, 86 insertions(+) diff --git a/bio/slow5/example_test.go b/bio/slow5/example_test.go index e0dacd06..1683448f 100644 --- a/bio/slow5/example_test.go +++ b/bio/slow5/example_test.go @@ -31,3 +31,34 @@ func ExampleNewParser() { fmt.Println(outputReads[0].RawSignal[0:10]) // Output: [430 472 463 467 454 465 463 450 450 449] } + +func ExampleSvbCompressRawSignal() { + // example.slow5 is a file I generated using slow5tools from nanopore fast5 + // run where I was testing using nanopore for doing COVID testing. It + // contains real nanopore data. + file, _ := os.Open("data/example.slow5") + defer file.Close() + // Set maxLineSize to 64kb. If you expect longer reads, + // make maxLineSize longer! + const maxLineSize = 2 * 32 * 1024 + parser, _ := slow5.NewParser(file, maxLineSize) + read, _ := parser.Next() + + // Get the raw signal from a read + rawSignal := read.RawSignal + + // Compress that raw signal into a mask and data + mask, data := slow5.SvbCompressRawSignal(rawSignal) + + // Decompress mask and data back into raw signal + rawSignalDecompressed := slow5.SvbDecompressRawSignal(len(rawSignal), mask, data) + + for idx := range rawSignal { + if rawSignal[idx] != rawSignalDecompressed[idx] { + fmt.Println("Compression failed!") + } + } + fmt.Println(data[:10]) + + // Output: [174 1 216 1 207 1 211 1 198 1] +} diff --git a/bio/slow5/slow5_test.go b/bio/slow5/slow5_test.go index 47f26f8f..eb2cad2f 100644 --- a/bio/slow5/slow5_test.go +++ b/bio/slow5/slow5_test.go @@ -225,3 +225,32 @@ func TestSimpleExample(t *testing.T) { } } + +func TestSvb(t *testing.T) { + file, _ := os.Open("data/example.slow5") + defer file.Close() + const maxLineSize = 2 * 32 * 1024 + parser, _ := NewParser(file, maxLineSize) + var outputReads []Read + for { + read, err := parser.Next() + if err != nil { + if !errors.Is(err, io.EOF) { + t.Errorf("Got unknown error: %s", err) + } + break + } + outputReads = append(outputReads, *read) + } + + for readNum, read := range outputReads { + rawSignal := read.RawSignal + mask, data := SvbCompressRawSignal(rawSignal) + rawSignalDecompressed := SvbDecompressRawSignal(len(rawSignal), mask, data) + for idx := range rawSignal { + if rawSignal[idx] != rawSignalDecompressed[idx] { + t.Errorf("Read signal at readNum %d idx %d didn't match decompressed signal %d", readNum, rawSignal[idx], rawSignalDecompressed[idx]) + } + } + } +} diff --git a/go.mod b/go.mod index f0965ad8..9df4d4b4 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,8 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 // indirect + github.com/koeng101/svb v0.0.0-20230815034912-d6737f9ed8b8 // indirect github.com/mattn/go-sqlite3 v1.14.13 // indirect golang.org/x/sync v0.3.0 // indirect ) diff --git a/go.sum b/go.sum index e46500fa..6d0578e2 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 h1:XboatR7lasl05yel5hNXF7kQBw2oFUGdMztcgisfhNU= +github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6/go.mod h1:RmeVYf9XrPRbRc3XIx0gLYA8qOFvNoPOfaEZduRlEp4= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/koeng101/svb v0.0.0-20230815034912-d6737f9ed8b8 h1:oaPrvMY8VJEYfJ/r/VTKh2zshX/SxYHcImJRPZ++JPI= +github.com/koeng101/svb v0.0.0-20230815034912-d6737f9ed8b8/go.mod h1:/zIPMIRhcEjka8JxY3mo7jexMl4ncHLRUnv9RIiAS9E= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -16,6 +20,7 @@ github.com/mattn/go-sqlite3 v1.14.13 h1:1tj15ngiFfcZzii7yd82foL+ks+ouQcj8j/TPq3f github.com/mattn/go-sqlite3 v1.14.13/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mmcloughlin/avo v0.0.0-20200504053806-fa88270b07e4/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6YyI= github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -25,10 +30,28 @@ github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -38,3 +61,4 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= lukechampine.com/blake3 v1.1.5 h1:hsACfxWvLdGmjYbWGrumQIphOvO+ZruZehWtgd2fxoM= lukechampine.com/blake3 v1.1.5/go.mod h1:hE8RpzdO8ttZ7446CXEwDP1eu2V4z7stv0Urj1El20g= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= From 37859a8001f693e957142423c954935e99d23a3b Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Mon, 11 Sep 2023 15:07:42 -0700 Subject: [PATCH 21/59] make better docs for header --- bio/fasta/fasta.go | 2 +- bio/fastq/fastq.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index 24517b09..c07421a1 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -78,7 +78,7 @@ type Parser struct { position int64 } -// Header returns a identifier with nothing and nil. +// Header returns nil,nil. func (p *Parser) Header() (*Header, error) { return nil, nil } diff --git a/bio/fastq/fastq.go b/bio/fastq/fastq.go index 5492653e..1e907e34 100644 --- a/bio/fastq/fastq.go +++ b/bio/fastq/fastq.go @@ -57,7 +57,7 @@ type Parser struct { line uint } -// Header returns a identifier with nothing and nil. +// Header returns nil,nil. func (p *Parser) Header() (*Header, error) { return nil, nil } From e24801b4607edaf14f07f527960b87d1bcf1b3a2 Mon Sep 17 00:00:00 2001 From: Koeng101 Date: Tue, 12 Sep 2023 12:58:49 -0700 Subject: [PATCH 22/59] Update bio/fasta/fasta_test.go Co-authored-by: Willow Carretero Chavez --- bio/fasta/fasta_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/fasta/fasta_test.go b/bio/fasta/fasta_test.go index 79ced77b..348939c8 100644 --- a/bio/fasta/fasta_test.go +++ b/bio/fasta/fasta_test.go @@ -16,7 +16,7 @@ const ( func TestHeader(t *testing.T) { _, err := NewParser(nil, 256).Header() if err != nil { - t.Errorf("Header should never be nil") + t.Errorf("Unexpected error while parsing header: %v", err) } } From 584b73eda5e497685ce509f856aa5760e418dd5f Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 13:03:07 -0700 Subject: [PATCH 23/59] changed name of LowLevelParser to parserInterface --- bio/bio.go | 18 +++++++++--------- bio/bio_test.go | 14 -------------- 2 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 bio/bio_test.go diff --git a/bio/bio.go b/bio/bio.go index e306caf2..b2698092 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -54,7 +54,7 @@ Lower level interfaces ******************************************************************************/ -// LowLevelParser is a generic interface that all parsers must support. It is +// parserInterface is a generic interface that all parsers must support. It is // very simple, only requiring two functions, Header() and Next(). Header() // returns the header of the file if there is one: most files, like fasta, // fastq, and pileup do not contain headers, while others like sam and slow5 do @@ -66,7 +66,7 @@ Lower level interfaces // for this is needed at the last Next(), when it returns an io.EOF error. A // pointer is used to represent the difference between a null DataType and an // empty DataType. -type LowLevelParser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] interface { +type parserInterface[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] interface { Header() (*DataTypeHeader, error) Next() (*DataType, error) } @@ -91,7 +91,7 @@ Higher level parse // and implements useful functions on top of it: such as Parse(), ParseToChannel(), and // ParseWithHeader(). type Parser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] struct { - LowLevelParser LowLevelParser[DataType, DataTypeHeader] + parserInterface parserInterface[DataType, DataTypeHeader] } // NewFastaParser initiates a new FASTA parser from an io.Reader. @@ -102,7 +102,7 @@ func NewFastaParser(r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { // NewFastaParserWithMaxLineLength initiates a new FASTA parser from an // io.Reader and a user-given maxLineLength. func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { - return &Parser[fasta.Record, fasta.Header]{LowLevelParser: fasta.NewParser(r, maxLineLength)}, nil + return &Parser[fasta.Record, fasta.Header]{parserInterface: fasta.NewParser(r, maxLineLength)}, nil } // NewFastqParser initiates a new FASTQ parser from an io.Reader. @@ -113,7 +113,7 @@ func NewFastqParser(r io.Reader) (*Parser[fastq.Read, fastq.Header], error) { // NewFastqParserWithMaxLineLength initiates a new FASTQ parser from an // io.Reader and a user-given maxLineLength. func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fastq.Read, fastq.Header], error) { - return &Parser[fastq.Read, fastq.Header]{LowLevelParser: fastq.NewParser(r, maxLineLength)}, nil + return &Parser[fastq.Read, fastq.Header]{parserInterface: fastq.NewParser(r, maxLineLength)}, nil } // NewSlow5Parser initiates a new SLOW5 parser from an io.Reader. @@ -125,7 +125,7 @@ func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { // io.Reader and a user-given maxLineLength. func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[slow5.Read, slow5.Header], error) { parser, err := slow5.NewParser(r, maxLineLength) - return &Parser[slow5.Read, slow5.Header]{LowLevelParser: parser}, err + return &Parser[slow5.Read, slow5.Header]{parserInterface: parser}, err } // NewPileupParser initiates a new Pileup parser from an io.Reader. @@ -136,7 +136,7 @@ func NewPileupParser(r io.Reader) (*Parser[pileup.Line, pileup.Header], error) { // NewPileupParserWithMaxLineLength initiates a new Pileup parser from an // io.Reader and a user-given maxLineLength. func NewPileupParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[pileup.Line, pileup.Header], error) { - return &Parser[pileup.Line, pileup.Header]{LowLevelParser: pileup.NewParser(r, maxLineLength)}, nil + return &Parser[pileup.Line, pileup.Header]{parserInterface: pileup.NewParser(r, maxLineLength)}, nil } /****************************************************************************** @@ -153,7 +153,7 @@ Parser higher-level functions // records in a file, as the parser reads the underlying io.Reader in a // straight line. func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { - return p.LowLevelParser.Next() + return p.parserInterface.Next() } // Header is a parsing primitive that should be used when low-level control is @@ -172,7 +172,7 @@ func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { // // SLOW5 func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { - return p.LowLevelParser.Header() + return p.parserInterface.Header() } // ParseN returns a countN number of records/reads/lines from the parser. diff --git a/bio/bio_test.go b/bio/bio_test.go deleted file mode 100644 index 976acda8..00000000 --- a/bio/bio_test.go +++ /dev/null @@ -1,14 +0,0 @@ -package bio_test - -import ( - "io" - "testing" - - "github.com/TimothyStiles/poly/bio" - "github.com/TimothyStiles/poly/bio/fasta" -) - -func TestWriter(t *testing.T) { - var _ bio.LowLevelParser[fasta.Record, fasta.Header] = &fasta.Parser{} - var _ io.WriterTo = &fasta.Record{} -} From 5e6204f86ea321f9204ae2f3e5c7ed392f4afc00 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 16:34:40 -0700 Subject: [PATCH 24/59] zw -> zipWriter --- bio/example_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bio/example_test.go b/bio/example_test.go index b4df7953..d0696af4 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -65,8 +65,8 @@ func Example_newParserGz() { // First, lets make a file that is gzip'd, represented by this // buffer. var file bytes.Buffer - zw := gzip.NewWriter(&file) - _, _ = zw.Write([]byte(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] + zipWriter := gzip.NewWriter(&file) + _, _ = zipWriter.Write([]byte(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL @@ -77,7 +77,7 @@ IENY ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`)) - zw.Close() + zipWriter.Close() fileDecompressed, _ := gzip.NewReader(&file) // Decompress the file parser, _ := bio.NewFastaParser(fileDecompressed) From 90316d32fa861ab246a4ed5db0c23a43c420924e Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 16:36:01 -0700 Subject: [PATCH 25/59] remove a identifier from pileup --- bio/pileup/pileup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio/pileup/pileup.go b/bio/pileup/pileup.go index 4e2f0932..0ce8b5e3 100644 --- a/bio/pileup/pileup.go +++ b/bio/pileup/pileup.go @@ -70,7 +70,7 @@ type Parser struct { line uint } -// Header returns a identifier with nothing and nil. +// Header returns nil,nil. func (parser *Parser) Header() (*Header, error) { return &Header{}, nil } From 7b2cd5215c879dfef75db39e89dd742c2932fb41 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 20:12:38 -0700 Subject: [PATCH 26/59] genbank parser now compatible --- bio/bio.go | 30 +- bio/example_test.go | 82 ++-- bio/genbank/example_test.go | 168 -------- bio/genbank/genbank.go | 295 ++++++-------- bio/genbank/genbank_test.go | 777 ------------------------------------ 5 files changed, 194 insertions(+), 1158 deletions(-) delete mode 100644 bio/genbank/example_test.go delete mode 100644 bio/genbank/genbank_test.go diff --git a/bio/bio.go b/bio/bio.go index b2698092..101ad5fb 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -18,6 +18,7 @@ import ( "github.com/TimothyStiles/poly/bio/fasta" "github.com/TimothyStiles/poly/bio/fastq" + "github.com/TimothyStiles/poly/bio/genbank" "github.com/TimothyStiles/poly/bio/pileup" "github.com/TimothyStiles/poly/bio/slow5" "golang.org/x/sync/errgroup" @@ -29,6 +30,7 @@ type Format int const ( Fasta Format = iota Fastq + Genbank Slow5 Pileup ) @@ -41,10 +43,11 @@ const ( // particular reason to use a different number. const defaultMaxLineLength int = bufio.MaxScanTokenSize // 64kB is a magic number often used by the Go stdlib for parsing. var DefaultMaxLengths = map[Format]int{ - Fasta: defaultMaxLineLength, - Fastq: 8 * 1024 * 1024, // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. - Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. - Pileup: defaultMaxLineLength, + Fasta: defaultMaxLineLength, + Fastq: 8 * 1024 * 1024, // The longest single nanopore sequencing read so far is 4Mb. A 8mb buffer should be large enough for any sequencing. + Genbank: defaultMaxLineLength, + Slow5: 128 * 1024 * 1024, // 128mb is used because slow5 lines can be massive, since a single read can be many millions of base pairs. + Pileup: defaultMaxLineLength, } /****************************************************************************** @@ -66,7 +69,7 @@ Lower level interfaces // for this is needed at the last Next(), when it returns an io.EOF error. A // pointer is used to represent the difference between a null DataType and an // empty DataType. -type parserInterface[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] interface { +type parserInterface[DataType fasta.Record | fastq.Read | genbank.Genbank | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | genbank.Header | slow5.Header | pileup.Header] interface { Header() (*DataTypeHeader, error) Next() (*DataType, error) } @@ -74,10 +77,14 @@ type parserInterface[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Li // The following checks that all DataType and DataTypeHeaders implement the io.WriteTo interface. var _ io.WriterTo = (*fasta.Record)(nil) var _ io.WriterTo = (*fastq.Read)(nil) + +// genbank var _ io.WriterTo = (*slow5.Read)(nil) var _ io.WriterTo = (*pileup.Line)(nil) var _ io.WriterTo = (*fasta.Header)(nil) var _ io.WriterTo = (*fastq.Header)(nil) + +// genbank var _ io.WriterTo = (*slow5.Header)(nil) var _ io.WriterTo = (*pileup.Header)(nil) @@ -90,7 +97,7 @@ Higher level parse // Parser is generic bioinformatics file parser. It contains a LowerLevelParser // and implements useful functions on top of it: such as Parse(), ParseToChannel(), and // ParseWithHeader(). -type Parser[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header] struct { +type Parser[DataType fasta.Record | fastq.Read | genbank.Genbank | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | genbank.Header | slow5.Header | pileup.Header] struct { parserInterface parserInterface[DataType, DataTypeHeader] } @@ -116,6 +123,17 @@ func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fa return &Parser[fastq.Read, fastq.Header]{parserInterface: fastq.NewParser(r, maxLineLength)}, nil } +// NewGenbankParser initiates a new Genbank parser form an io.Reader. +func NewGenbankParser(r io.Reader) (*Parser[genbank.Genbank, genbank.Header], error) { + return NewGenbankParserWithMaxLineLength(r, DefaultMaxLengths[Genbank]) +} + +// NewGenbankParserWithMaxLineLength initiates a new Genbank parser from an +// io.Reader and a user-given maxLineLength. +func NewGenbankParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[genbank.Genbank, genbank.Header], error) { + return &Parser[genbank.Genbank, genbank.Header]{parserInterface: genbank.NewParser(r, maxLineLength)}, nil +} + // NewSlow5Parser initiates a new SLOW5 parser from an io.Reader. func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { return NewSlow5ParserWithMaxLineLength(r, DefaultMaxLengths[Slow5]) diff --git a/bio/example_test.go b/bio/example_test.go index d0696af4..3a7ef220 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -10,34 +10,8 @@ import ( "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/bio/fasta" - "github.com/TimothyStiles/poly/bio/genbank" - "github.com/TimothyStiles/poly/bio/gff" - "github.com/TimothyStiles/poly/bio/polyjson" ) -// This is where the integration tests that make effed up cyclic dependencies go. -func Example() { - // Poly can take in basic gff, gbk, fasta, and JSON. - // We call the json package "pson" (poly JSON) to prevent namespace collision with Go's standard json package. - - gffInput, _ := gff.Read("../data/ecoli-mg1655-short.gff") - gbkInput, _ := genbank.Read("../data/puc19.gbk") - //fastaInput, _ := fasta.Read("fasta/data/base.fasta") - jsonInput, _ := polyjson.Read("../data/cat.json") - - // Poly can also output these file formats. Every file format has a corresponding Write function. - _ = gff.Write(gffInput, "test.gff") - _ = genbank.Write(gbkInput, "test.gbk") - //_ = fasta.WriteFile(fastaInput, "test.fasta") - _ = polyjson.Write(jsonInput, "test.json") - - // Extra tips: - - // 1. All of these file formats can be read and written in JSON format using their native schemas. - // 2. If you want to convert from one format to another (e.g. genbank to polyjson), you can easily do so with a for-loop and some field mapping. - // 3. Every file format is unique but they all share a common interface so you can use them with almost every native function in Poly. -} - // ExampleRead shows an example of reading a file from disk. func ExampleRead() { // Read lets you read files from disk into a parser. @@ -50,8 +24,8 @@ func ExampleRead() { // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } +// Example_readGz shows an example of reading and parsing a gzipped file. func Example_readGz() { - // ReadGz lets you read gzipped files into a parser. fileGz, _ := os.Open("fasta/data/base.fasta.gz") file, _ := gzip.NewReader(fileGz) parser, _ := bio.NewFastaParser(file) @@ -200,6 +174,60 @@ $$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0 // Output:GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAAACAGATGCAAGTCTGGTGTGATTAACTTCACCAAAGGGCTGGTTGTAATATTAGGAAATCTAACAATAGATTCTGTTGGTTGGACTCTAAAATTAGAAATTTGATAGATTCCTTTTCCCAAATGAAAGTTTAACGTACACTTTGTTTCTAAAGGAAGGTCAAATTACAGTCTACAGCATCGTAATGGTTCATTTTCATTTATATTTTAATACTAGAAAAGTCCTAGGTTGAAGATAACCACATAATAAGCTGCAACTTCAGCTGTCCCAACCTGAAGAAGAATCGCAGGAGTCGAAATAACTTCTGTAAAGCAAGTAGTTTGAACCTATTGATGTTTCAACATGAGCAATACGTAACT } +func ExampleGenbankParser() { + // The following can be replaced with a any io.Reader. For example, + // `file, err := os.Open(path)` for file would also work. + file := strings.NewReader(`LOCUS pUC19_lacZ 336 bp DNA linear UNA 12-SEP-2023 +DEFINITION natural linear DNA +ACCESSION . +VERSION . +KEYWORDS . +SOURCE natural DNA sequence + ORGANISM unspecified +REFERENCE 1 (bases 1 to 336) + AUTHORS Keoni Gandall + TITLE Direct Submission + JOURNAL Exported Sep 12, 2023 from SnapGene 6.2.2 + https://www.snapgene.com +FEATURES Location/Qualifiers + source 1..336 + /mol_type="genomic DNA" + /organism="unspecified" + primer_bind 1..17 + /label=M13 rev + /note="common sequencing primer, one of multiple similar + variants" + CDS 13..336 + /codon_start=1 + /gene="lacZ" + /product="LacZ-alpha fragment of beta-galactosidase" + /label=lacZ-alpha + /translation="MTMITPSLHACRSTLEDPRVPSSNSLAVVLQRRDWENPGVTQLNR + LAAHPPFASWRNSEEARTDRPSQQLRSLNGEWRLMRYFLLTHLCGISHRIWCTLSTICS + DAA" + misc_feature 30..86 + /label=MCS + /note="pUC19 multiple cloning site" + primer_bind complement(87..103) + /label=M13 fwd + /note="common sequencing primer, one of multiple similar + variants" +ORIGIN + 1 caggaaacag ctatgaccat gattacgcca agcttgcatg cctgcaggtc gactctagag + 61 gatccccggg taccgagctc gaattcactg gccgtcgttt tacaacgtcg tgactgggaa + 121 aaccctggcg ttacccaact taatcgcctt gcagcacatc cccctttcgc cagctggcgt + 181 aatagcgaag aggcccgcac cgatcgccct tcccaacagt tgcgcagcct gaatggcgaa + 241 tggcgcctga tgcggtattt tctccttacg catctgtgcg gtatttcaca ccgcatatgg + 301 tgcactctca gtacaatctg ctctgatgcc gcatag +// +`) + parser, _ := bio.NewGenbankParser(file) + records, _ := parser.Parse() + + fmt.Println(records[0].Features[2].Attributes["translation"]) + // Output: MTMITPSLHACRSTLEDPRVPSSNSLAVVLQRRDWENPGVTQLNRLAAHPPFASWRNSEEARTDRPSQQLRSLNGEWRLMRYFLLTHLCGISHRIWCTLSTICSDAA +} + func ExampleNewSlow5Parser() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. diff --git a/bio/genbank/example_test.go b/bio/genbank/example_test.go deleted file mode 100644 index 8caa5a21..00000000 --- a/bio/genbank/example_test.go +++ /dev/null @@ -1,168 +0,0 @@ -package genbank_test - -import ( - "bytes" - "fmt" - "os" - "path/filepath" - - "github.com/TimothyStiles/poly/bio/genbank" -) - -// This example shows how to open a genbank file and search for a gene given -// its name. After finding it, notes about the particular gene are read. -func Example_basic() { - sequences, _ := genbank.Read("../../data/puc19.gbk") - for _, feature := range sequences.Features { - if feature.Attributes["gene"] == "bla" { - fmt.Println(feature.Attributes["note"]) - } - } - // Output: confers resistance to ampicillin, carbenicillin, andrelated antibiotics -} - -func ExampleRead() { - sequence, _ := genbank.Read("../../data/puc19.gbk") - fmt.Println(sequence.Meta.Locus.ModificationDate) - // Output: 22-OCT-2019 -} - -func ExampleWrite() { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - fmt.Println(err.Error()) - } - defer os.RemoveAll(tmpDataDir) - - sequences, _ := genbank.Read("../../data/puc19.gbk") - - tmpGbkFilePath := filepath.Join(tmpDataDir, "puc19.gbk") - _ = genbank.Write(sequences, tmpGbkFilePath) - - testSequence, _ := genbank.Read(tmpGbkFilePath) - - fmt.Println(testSequence.Meta.Locus.ModificationDate) - // Output: 22-OCT-2019 -} - -func ExampleBuild() { - sequences, _ := genbank.Read("../../data/puc19.gbk") - gbkBytes, _ := genbank.Build(sequences) - testSequence, _ := genbank.Parse(bytes.NewReader(gbkBytes)) - - fmt.Println(testSequence.Meta.Locus.ModificationDate) - // Output: 22-OCT-2019 -} - -func ExampleParse() { - file, _ := os.Open("../../data/puc19.gbk") - sequence, _ := genbank.Parse(file) - - fmt.Println(sequence.Meta.Locus.ModificationDate) - // Output: 22-OCT-2019 -} - -func ExampleReadMulti() { - sequences, err := genbank.ReadMulti("../../data/multiGbk_test.seq") - if err != nil { - fmt.Println(err.Error()) - } - - fmt.Println(sequences[1].Meta.Locus.ModificationDate) - // Output: 05-FEB-1999 -} - -func ExampleWriteMulti() { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - fmt.Println(err.Error()) - } - - sequences, _ := genbank.ReadMulti("../../data/multiGbk_test.seq") - tmpGbkFilePath := filepath.Join(tmpDataDir, "multiGbk_test.seq") - - err = genbank.WriteMulti(sequences, tmpGbkFilePath) - - if err != nil { - fmt.Println(err.Error()) - } - - testSequences, _ := genbank.ReadMulti(tmpGbkFilePath) - isEqual := sequences[1].Meta.Locus.ModificationDate == testSequences[1].Meta.Locus.ModificationDate - fmt.Println(isEqual) - // Output: true -} - -func ExampleBuildMulti() { - sequences, _ := genbank.ReadMulti("../../data/multiGbk_test.seq") - gbkBytes, _ := genbank.BuildMulti(sequences) - testSequences, _ := genbank.ParseMulti(bytes.NewReader(gbkBytes)) - - isEqual := sequences[1].Meta.Locus.ModificationDate == testSequences[1].Meta.Locus.ModificationDate - fmt.Println(isEqual) - // Output: true -} - -func ExampleParseMulti() { - file, _ := os.Open("../../data/multiGbk_test.seq") - sequences, _ := genbank.ParseMulti(file) - fmt.Println(sequences[1].Meta.Locus.ModificationDate) - // Output: 05-FEB-1999 -} - -func ExampleGenbank_AddFeature() { - // Sequence for greenflourescent protein (GFP) that we're using as test data for this example. - gfpSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" - - // initialize sequence and feature structs. - var sequence genbank.Genbank - var feature genbank.Feature - - // set the initialized sequence struct's sequence. - sequence.Sequence = gfpSequence - - // Set the initialized feature name and sequence location. - feature.Description = "Green Fluorescent Protein" - feature.Location = genbank.Location{} - feature.Location.Start = 0 - feature.Location.End = len(sequence.Sequence) - - // Add the GFP feature to the sequence struct. - _ = sequence.AddFeature(&feature) - - // get the GFP feature sequence string from the sequence struct. - featureSequence, _ := feature.GetSequence() - - // check to see if the feature was inserted properly into the sequence. - fmt.Println(gfpSequence == featureSequence) - - // Output: true -} - -func ExampleFeature_GetSequence() { - // Sequence for greenflourescent protein (GFP) that we're using as test data for this example. - gfpSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" - - // initialize sequence and feature structs. - var sequence genbank.Genbank - var feature genbank.Feature - - // set the initialized sequence struct's sequence. - sequence.Sequence = gfpSequence - - // Set the initialized feature name and sequence location. - feature.Description = "Green Fluorescent Protein" - feature.Location.Start = 0 - feature.Location.End = len(sequence.Sequence) - - // Add the GFP feature to the sequence struct. - _ = sequence.AddFeature(&feature) - - // get the GFP feature sequence string from the sequence struct. - featureSequence, _ := feature.GetSequence() - - // check to see if the feature was inserted properly into the sequence. - fmt.Println(gfpSequence == featureSequence) - - // Output: true -} diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 34062b36..02ed8087 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -15,7 +15,6 @@ import ( "bytes" "fmt" "io" - "os" "regexp" "strconv" "strings" @@ -31,12 +30,6 @@ GBK specific IO related things begin here. ******************************************************************************/ -var ( - readFileFn = os.ReadFile - parseMultiNthFn = ParseMultiNth - parseReferencesFn = parseReferences -) - // Genbank is the main struct for the Genbank file format. type Genbank struct { Meta Meta @@ -156,65 +149,6 @@ func getFeatureSequence(feature Feature, location Location) (string, error) { return sequenceString, nil } -// Read reads a GBK file from path and returns a Genbank struct. -func Read(path string) (Genbank, error) { - genbankSlice, err := ReadMultiNth(path, 1) - if err != nil { - return Genbank{}, err - } - genbank := genbankSlice[0] - return genbank, err -} - -// ReadMulti reads a multi Gbk from path and parses it into a slice of Genbank structs. -func ReadMulti(path string) ([]Genbank, error) { - return ReadMultiNth(path, -1) -} - -// ReadMultiNth reads a multi Gbk from path and parses N entries into a slice of Genbank structs. -func ReadMultiNth(path string, count int) ([]Genbank, error) { - file, err := os.Open(path) - if err != nil { - return []Genbank{}, err - } - - sequence, err := parseMultiNthFn(file, count) - if err != nil { - return []Genbank{}, err - } - - return sequence, nil -} - -// Write takes an Genbank list and a path string and writes out a genbank record to that path. -func Write(sequences Genbank, path string) error { - // build function always returns nil error. - // This is for API consistency in case we need to - // add error handling in the future. - gbk, _ := Build(sequences) - - err := os.WriteFile(path, gbk, 0644) - return err -} - -// WriteMulti takes a slice of Genbank structs and a path string and writes out a multi genbank record to that path. -func WriteMulti(sequences []Genbank, path string) error { - // buildmulti function always returns nil error. - // This is for API consistency in case we need to - // add error handling in the future. - gbk, _ := BuildMulti(sequences) - - err := os.WriteFile(path, gbk, 0644) - return err -} - -// Build builds a GBK byte slice to be written out to db or file. -func Build(gbk Genbank) ([]byte, error) { - gbkSlice := []Genbank{gbk} - multiGBK, err := BuildMulti(gbkSlice) - return multiGBK, err -} - // BuildMulti builds a MultiGBK byte slice to be written out to db or file. func BuildMulti(sequences []Genbank) ([]byte, error) { var gbkString bytes.Buffer @@ -348,28 +282,6 @@ func BuildMulti(sequences []Genbank) ([]byte, error) { return gbkString.Bytes(), nil } -// Parse takes in a reader representing a single gbk/gb/genbank file and parses it into a Genbank struct. -func Parse(r io.Reader) (Genbank, error) { - genbankSlice, err := parseMultiNthFn(r, 1) - - if err != nil { - return Genbank{}, err - } - - return genbankSlice[0], err -} - -// ParseMulti takes in a reader representing a multi gbk/gb/genbank file and parses it into a slice of Genbank structs. -func ParseMulti(r io.Reader) ([]Genbank, error) { - genbankSlice, err := parseMultiNthFn(r, -1) - - if err != nil { - return []Genbank{}, err - } - - return genbankSlice, err -} - type parseLoopParameters struct { newLocation bool quoteActive bool @@ -398,119 +310,142 @@ func (params *parseLoopParameters) init() { params.genbank.Meta.Other = make(map[string]string) } -// ParseMultiNth takes in a reader representing a multi gbk/gb/genbank file and parses the first n records into a slice of Genbank structs. -func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { - scanner := bufio.NewScanner(r) - var genbanks []Genbank +// Header is a blank struct, needed for compatibility with bio parsers. It contains nothing. +type Header struct{} + +// WriteTo is a blank function, needed for compatibility with bio parsers. It doesn't do anything. +func (header *Header) WriteTo(w io.Writer) (int64, error) { + return 0, nil +} + +// Parser is a genbank parser created on an io.Reader. +type Parser struct { + scanner bufio.Scanner + parameters parseLoopParameters +} - // Sequence setup +// Header returns nil,nil. +func (parser *Parser) Header() (*Header, error) { + return &Header{}, nil +} - var parameters parseLoopParameters - parameters.init() +// NewParser returns a Parser that uses r as the source +// from which to parse genbank formatted sequences. +func NewParser(r io.Reader, maxLineSize int) *Parser { + scanner := bufio.NewScanner(r) + buf := make([]byte, maxLineSize) + scanner.Buffer(buf, maxLineSize) + return &Parser{ + scanner: *scanner, + } +} +// ParseMultiNth takes in a reader representing a multi gbk/gb/genbank file and parses the first n records into a slice of Genbank structs. +func (parser *Parser) Next() (*Genbank, error) { + parser.parameters.init() // Loop through each line of the file - for lineNum := 0; scanner.Scan(); lineNum++ { + for lineNum := 0; parser.scanner.Scan(); lineNum++ { // get line from scanner and split it - line := scanner.Text() + line := parser.scanner.Text() splitLine := strings.Split(strings.TrimSpace(line), " ") - prevline := parameters.currentLine - parameters.currentLine = line - parameters.prevline = prevline + prevline := parser.parameters.currentLine + parser.parameters.currentLine = line + parser.parameters.prevline = prevline // keep scanning until we find the start of the first record - if !parameters.genbankStarted { + if !parser.parameters.genbankStarted { // We detect the beginning of a new genbank file with "LOCUS" locusFlag := strings.Contains(line, "LOCUS") if locusFlag { - parameters = parseLoopParameters{} - parameters.init() - parameters.genbank.Meta.Locus = parseLocus(line) - parameters.genbankStarted = true + parser.parameters = parseLoopParameters{} + parser.parameters.init() + parser.parameters.genbank.Meta.Locus = parseLocus(line) + parser.parameters.genbankStarted = true } continue } - switch parameters.parseStep { + switch parser.parameters.parseStep { case "metadata": // Handle empty lines if len(line) == 0 { - return genbanks, fmt.Errorf("Empty metadata line on line %d", lineNum) + return nil, fmt.Errorf("Empty metadata line on line %d", lineNum) } // If we are currently reading a line, we need to figure out if it is a new meta line. - if string(line[0]) != " " || parameters.metadataTag == "FEATURES" { + if string(line[0]) != " " || parser.parameters.metadataTag == "FEATURES" { // If this is true, it means we are beginning a new meta tag. In that case, let's save // the older data, and then continue along. - switch parameters.metadataTag { + switch parser.parameters.metadataTag { case "DEFINITION": - parameters.genbank.Meta.Definition = parseMetadata(parameters.metadataData) + parser.parameters.genbank.Meta.Definition = parseMetadata(parser.parameters.metadataData) case "ACCESSION": - parameters.genbank.Meta.Accession = parseMetadata(parameters.metadataData) + parser.parameters.genbank.Meta.Accession = parseMetadata(parser.parameters.metadataData) case "VERSION": - parameters.genbank.Meta.Version = parseMetadata(parameters.metadataData) + parser.parameters.genbank.Meta.Version = parseMetadata(parser.parameters.metadataData) case "KEYWORDS": - parameters.genbank.Meta.Keywords = parseMetadata(parameters.metadataData) + parser.parameters.genbank.Meta.Keywords = parseMetadata(parser.parameters.metadataData) case "SOURCE": - parameters.genbank.Meta.Source, parameters.genbank.Meta.Organism, parameters.genbank.Meta.Taxonomy = getSourceOrganism(parameters.metadataData) + parser.parameters.genbank.Meta.Source, parser.parameters.genbank.Meta.Organism, parser.parameters.genbank.Meta.Taxonomy = getSourceOrganism(parser.parameters.metadataData) case "REFERENCE": - reference, err := parseReferencesFn(parameters.metadataData) + reference, err := parseReferences(parser.parameters.metadataData) if err != nil { - return []Genbank{}, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) + return nil, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) } - parameters.genbank.Meta.References = append(parameters.genbank.Meta.References, reference) + parser.parameters.genbank.Meta.References = append(parser.parameters.genbank.Meta.References, reference) case "FEATURES": - parameters.parseStep = "features" + parser.parameters.parseStep = "features" // We know that we are now parsing features, so lets initialize our first feature - parameters.feature.Type = strings.TrimSpace(splitLine[0]) - parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) - parameters.newLocation = true + parser.parameters.feature.Type = strings.TrimSpace(splitLine[0]) + parser.parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) + parser.parameters.newLocation = true continue default: - if parameters.metadataTag != "" { - parameters.genbank.Meta.Other[parameters.metadataTag] = parseMetadata(parameters.metadataData) + if parser.parameters.metadataTag != "" { + parser.parameters.genbank.Meta.Other[parser.parameters.metadataTag] = parseMetadata(parser.parameters.metadataData) } } - parameters.metadataTag = strings.TrimSpace(splitLine[0]) - parameters.metadataData = []string{strings.TrimSpace(line[len(parameters.metadataTag):])} + parser.parameters.metadataTag = strings.TrimSpace(splitLine[0]) + parser.parameters.metadataData = []string{strings.TrimSpace(line[len(parser.parameters.metadataTag):])} } else { - parameters.metadataData = append(parameters.metadataData, line) + parser.parameters.metadataData = append(parser.parameters.metadataData, line) } case "features": // Switch to sequence parsing originFlag := strings.Contains(line, "ORIGIN") // we detect the beginning of the sequence with "ORIGIN" if originFlag { - parameters.parseStep = "sequence" + parser.parameters.parseStep = "sequence" // save our completed attribute / qualifier string to the current feature - if parameters.attributeValue != "" { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue - parameters.features = append(parameters.features, parameters.feature) - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + if parser.parameters.attributeValue != "" { + parser.parameters.feature.Attributes[parser.parameters.attribute] = parser.parameters.attributeValue + parser.parameters.features = append(parser.parameters.features, parser.parameters.feature) + parser.parameters.attributeValue = "" + parser.parameters.attribute = "" + parser.parameters.feature = Feature{} + parser.parameters.feature.Attributes = make(map[string]string) } else { - parameters.features = append(parameters.features, parameters.feature) + parser.parameters.features = append(parser.parameters.features, parser.parameters.feature) } // add our features to the genbank - for _, feature := range parameters.features { + for _, feature := range parser.parameters.features { location, err := parseLocation(feature.Location.GbkLocationString) if err != nil { - return []Genbank{}, err + return nil, err } feature.Location = location - err = parameters.genbank.AddFeature(&feature) + err = parser.parameters.genbank.AddFeature(&feature) if err != nil { - return []Genbank{}, err + return nil, err } } continue @@ -523,90 +458,90 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } // determine if current line is a new top level feature - if countLeadingSpaces(parameters.currentLine) < countLeadingSpaces(parameters.prevline) || parameters.prevline == "FEATURES" { + if countLeadingSpaces(parser.parameters.currentLine) < countLeadingSpaces(parser.parameters.prevline) || parser.parameters.prevline == "FEATURES" { // save our completed attribute / qualifier string to the current feature - if parameters.attributeValue != "" { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue - parameters.features = append(parameters.features, parameters.feature) - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + if parser.parameters.attributeValue != "" { + parser.parameters.feature.Attributes[parser.parameters.attribute] = parser.parameters.attributeValue + parser.parameters.features = append(parser.parameters.features, parser.parameters.feature) + parser.parameters.attributeValue = "" + parser.parameters.attribute = "" + parser.parameters.feature = Feature{} + parser.parameters.feature.Attributes = make(map[string]string) } // } // checks for empty types - if parameters.feature.Type != "" { - parameters.features = append(parameters.features, parameters.feature) + if parser.parameters.feature.Type != "" { + parser.parameters.features = append(parser.parameters.features, parser.parameters.feature) } - parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + parser.parameters.feature = Feature{} + parser.parameters.feature.Attributes = make(map[string]string) // An initial feature line looks like this: `source 1..2686` with a type separated by its location if len(splitLine) < 2 { - return genbanks, fmt.Errorf("Feature line malformed on line %d. Got line: %s", lineNum, line) + return nil, fmt.Errorf("Feature line malformed on line %d. Got line: %s", lineNum, line) } - parameters.feature.Type = strings.TrimSpace(splitLine[0]) - parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) - parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier - } else if !strings.Contains(parameters.currentLine, "/") { // current line is continuation of a feature or qualifier (sub-constituent of a feature) + parser.parameters.feature.Type = strings.TrimSpace(splitLine[0]) + parser.parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) + parser.parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier + } else if !strings.Contains(parser.parameters.currentLine, "/") { // current line is continuation of a feature or qualifier (sub-constituent of a feature) // if it's a continuation of the current feature, add it to the location - if !strings.Contains(parameters.currentLine, "\"") && (countLeadingSpaces(parameters.currentLine) > countLeadingSpaces(parameters.prevline) || parameters.multiLineFeature) { - parameters.feature.Location.GbkLocationString += strings.TrimSpace(line) - parameters.multiLineFeature = true // without this we can't tell if something is a multiline feature or multiline qualifier + if !strings.Contains(parser.parameters.currentLine, "\"") && (countLeadingSpaces(parser.parameters.currentLine) > countLeadingSpaces(parser.parameters.prevline) || parser.parameters.multiLineFeature) { + parser.parameters.feature.Location.GbkLocationString += strings.TrimSpace(line) + parser.parameters.multiLineFeature = true // without this we can't tell if something is a multiline feature or multiline qualifier } else { // it's a continued line of a qualifier removeAttributeValueQuotes := strings.Replace(trimmedLine, "\"", "", -1) - parameters.attributeValue = parameters.attributeValue + removeAttributeValueQuotes + parser.parameters.attributeValue = parser.parameters.attributeValue + removeAttributeValueQuotes } - } else if strings.Contains(parameters.currentLine, "/") { // current line is a new qualifier - trimmedCurrentLine := strings.TrimSpace(parameters.currentLine) + } else if strings.Contains(parser.parameters.currentLine, "/") { // current line is a new qualifier + trimmedCurrentLine := strings.TrimSpace(parser.parameters.currentLine) if trimmedCurrentLine[0] != '/' { // if we have an exception case, like (adenine(1518)-N(6)/adenine(1519)-N(6))- - parameters.attributeValue = parameters.attributeValue + trimmedCurrentLine + parser.parameters.attributeValue = parser.parameters.attributeValue + trimmedCurrentLine continue } // save our completed attribute / qualifier string to the current feature - if parameters.attributeValue != "" || parameters.emptyAttribute { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue - parameters.emptyAttribute = false + if parser.parameters.attributeValue != "" || parser.parameters.emptyAttribute { + parser.parameters.feature.Attributes[parser.parameters.attribute] = parser.parameters.attributeValue + parser.parameters.emptyAttribute = false } - parameters.attributeValue = "" + parser.parameters.attributeValue = "" splitAttribute := strings.Split(line, "=") trimmedSpaceAttribute := strings.TrimSpace(splitAttribute[0]) removedForwardSlashAttribute := strings.Replace(trimmedSpaceAttribute, "/", "", 1) - parameters.attribute = removedForwardSlashAttribute + parser.parameters.attribute = removedForwardSlashAttribute var removeAttributeValueQuotes string if len(splitAttribute) == 1 { // handle case of ` /pseudo `, which has no text removeAttributeValueQuotes = "" - parameters.emptyAttribute = true + parser.parameters.emptyAttribute = true } else { // this is normally triggered removeAttributeValueQuotes = strings.Replace(splitAttribute[1], "\"", "", -1) } - parameters.attributeValue = removeAttributeValueQuotes - parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier + parser.parameters.attributeValue = removeAttributeValueQuotes + parser.parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier } case "sequence": if len(line) < 2 { // throw error if line is malformed - return genbanks, fmt.Errorf("Too short line found while parsing genbank sequence on line %d. Got line: %s", lineNum, line) + return nil, fmt.Errorf("Too short line found while parsing genbank sequence on line %d. Got line: %s", lineNum, line) } else if line[0:2] == "//" { // end of sequence - parameters.genbank.Sequence = parameters.sequenceBuilder.String() + parser.parameters.genbank.Sequence = parser.parameters.sequenceBuilder.String() - genbanks = append(genbanks, parameters.genbank) - parameters.genbankStarted = false - parameters.sequenceBuilder.Reset() + parser.parameters.genbankStarted = false + parser.parameters.sequenceBuilder.Reset() + return &parser.parameters.genbank, nil } else { // add line to total sequence - parameters.sequenceBuilder.WriteString(sequenceRegex.ReplaceAllString(line, "")) + parser.parameters.sequenceBuilder.WriteString(sequenceRegex.ReplaceAllString(line, "")) } default: - log.Warnf("Unknown parse step: %s", parameters.parseStep) - parameters.genbankStarted = false + log.Warnf("Unknown parse step: %s", parser.parameters.parseStep) + parser.parameters.genbankStarted = false } } - return genbanks, nil + return nil, io.EOF } func countLeadingSpaces(line string) int { diff --git a/bio/genbank/genbank_test.go b/bio/genbank/genbank_test.go deleted file mode 100644 index 4c894870..00000000 --- a/bio/genbank/genbank_test.go +++ /dev/null @@ -1,777 +0,0 @@ -package genbank - -import ( - "errors" - "io" - "os" - "path/filepath" - "strings" - "testing" - - "reflect" - - "github.com/TimothyStiles/poly/transform" - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - "github.com/stretchr/testify/assert" -) - -/****************************************************************************** - -Gbk/gb/genbank related benchmarks begin here. - -******************************************************************************/ - -var singleGbkPaths = []string{ - "../../data/t4_intron.gb", - "../../data/puc19.gbk", - "../../data/puc19_snapgene.gb", - "../../data/benchling.gb", - "../../data/phix174.gb", - "../../data/sample.gbk", - // "../../data/pichia_chr1_head.gb", -} - -func TestGbkIO(t *testing.T) { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - t.Error(err) - } - defer os.RemoveAll(tmpDataDir) - - // test single gbk read, write, build, parse - for _, gbkPath := range singleGbkPaths { - gbk, _ := Read(gbkPath) - - tmpGbkFilePath := filepath.Join(tmpDataDir, filepath.Base(gbkPath)) - _ = Write(gbk, tmpGbkFilePath) - - writeTestGbk, _ := Read(tmpGbkFilePath) - if diff := cmp.Diff(gbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { - t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) - } - } // end test single gbk read, write, build, parse -} - -func TestMultiLineFeatureParse(t *testing.T) { - pichia, _ := Read("../../data/pichia_chr1_head.gb") - var multilineOutput string - for _, feature := range pichia.Features { - multilineOutput = feature.Location.GbkLocationString - } - - if multilineOutput != "join(<459260..459456,459556..459637,459685..459739,459810..>460126)" { - t.Errorf("Failed to parse multiline genbank feature string") - } -} - -func TestMultiGenbankIO(t *testing.T) { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - t.Error(err) - } - defer os.RemoveAll(tmpDataDir) - - // Test multiline Genbank features - gbkPath := "../../data/multiGbk_test.seq" - multiGbk, _ := ReadMulti(gbkPath) - tmpGbkFilePath := filepath.Join(tmpDataDir, filepath.Base(gbkPath)) - _ = WriteMulti(multiGbk, tmpGbkFilePath) - - writeTestGbk, _ := ReadMulti(tmpGbkFilePath) - - if diff := cmp.Diff(multiGbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { - t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) - } -} - -func TestGbkLocationStringBuilder(t *testing.T) { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - t.Error(err) - } - defer os.RemoveAll(tmpDataDir) - - scrubbedGbk, err := Read("../../data/sample.gbk") - if err != nil { - t.Error(err) - } - - // removing gbkLocationString from features to allow testing for gbkLocationBuilder - for featureIndex := range scrubbedGbk.Features { - scrubbedGbk.Features[featureIndex].Location.GbkLocationString = "" - } - - tmpGbkFilePath := filepath.Join(tmpDataDir, "sample.gbk") - _ = Write(scrubbedGbk, tmpGbkFilePath) - - testInputGbk, _ := Read("../../data/sample.gbk") - testOutputGbk, _ := Read(tmpGbkFilePath) - - if diff := cmp.Diff(testInputGbk, testOutputGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { - t.Errorf("Issue with partial location building. Parsing the output of Build() does not produce the same output as parsing the original file read with Read(). Got this diff:\n%s", diff) - } -} - -func TestGbLocationStringBuilder(t *testing.T) { - tmpDataDir, err := os.MkdirTemp("", "data-*") - if err != nil { - t.Error(err) - } - defer os.RemoveAll(tmpDataDir) - - scrubbedGb, _ := Read("../../data/t4_intron.gb") - - // removing gbkLocationString from features to allow testing for gbkLocationBuilder - for featureIndex := range scrubbedGb.Features { - scrubbedGb.Features[featureIndex].Location.GbkLocationString = "" - } - - tmpGbFilePath := filepath.Join(tmpDataDir, "t4_intron_test.gb") - _ = Write(scrubbedGb, tmpGbFilePath) - - testInputGb, _ := Read("../../data/t4_intron.gb") - testOutputGb, _ := Read(tmpGbFilePath) - - if diff := cmp.Diff(testInputGb, testOutputGb, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { - t.Errorf("Issue with either Join or complement location building. Parsing the output of Build() does not produce the same output as parsing the original file read with Read(). Got this diff:\n%s", diff) - } -} - -func TestPartialLocationParseRegression(t *testing.T) { - gbk, _ := Read("../../data/sample.gbk") - - for _, feature := range gbk.Features { - if feature.Location.GbkLocationString == "687..3158>" && (feature.Location.Start != 686 || feature.Location.End != 3158) { - t.Errorf("Partial location for three prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with Read()") - } - } - gbk, err := Read("../../data/sample.gbk") - if err != nil { - t.Errorf("Failed to read sample.gbk. Got err: %s", err) - } - - for _, feature := range gbk.Features { - if feature.Location.GbkLocationString == "687..3158>" && (feature.Location.Start != 686 || feature.Location.End != 3158) { - t.Errorf("Partial location for three prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with Read(). Got location start %d and location end %d. Expected 687..3158>.", feature.Location.Start, feature.Location.End) - } else if feature.Location.GbkLocationString == "<1..206" && (feature.Location.Start != 0 || feature.Location.End != 206) { - t.Errorf("Partial location for five prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with Read().") - } - } -} - -func TestSnapgeneGenbankRegression(t *testing.T) { - snapgene, err := Read("../../data/puc19_snapgene.gb") - - if snapgene.Sequence == "" { - t.Errorf("Parsing snapgene returned an empty string. Got error: %s", err) - } -} - -func TestGetSequenceMethod(t *testing.T) { - gbk, _ := Read("../../data/t4_intron.gb") - - // Check to see if GetSequence method works on Features struct - feature, _ := gbk.Features[1].GetSequence() - seq := "atgagattacaacgccagagcatcaaagattcagaagttagaggtaaatggtattttaatatcatcggtaaagattctgaacttgttgaaaaagctgaacatcttttacgtgatatgggatgggaagatgaatgcgatggatgtcctctttatgaagacggagaaagcgcaggattttggatttaccattctgacgtcgagcagtttaaagctgattggaaaattgtgaaaaagtctgtttga" - if feature != seq { - t.Errorf("Feature GetSequence method has failed. Got this:\n%s instead of \n%s", feature, seq) - } -} - -func TestLocationParser(t *testing.T) { - gbk, _ := Read("../../data/t4_intron.gb") - - // Read 1..243 - feature, _ := gbk.Features[1].GetSequence() - seq := "atgagattacaacgccagagcatcaaagattcagaagttagaggtaaatggtattttaatatcatcggtaaagattctgaacttgttgaaaaagctgaacatcttttacgtgatatgggatgggaagatgaatgcgatggatgtcctctttatgaagacggagaaagcgcaggattttggatttaccattctgacgtcgagcagtttaaagctgattggaaaattgtgaaaaagtctgtttga" - if feature != seq { - t.Errorf("Feature sequence parser has changed on test '1..243'. Got this:\n%s instead of \n%s", feature, seq) - } - - // Read join(893..1441,2459..2770) - featureJoin, _ := gbk.Features[6].GetSequence() - seqJoin := "atgaaacaataccaagatttaattaaagacatttttgaaaatggttatgaaaccgatgatcgtacaggcacaggaacaattgctctgttcggatctaaattacgctgggatttaactaaaggttttcctgcggtaacaactaagaagctcgcctggaaagcttgcattgctgagctaatatggtttttatcaggaagcacaaatgtcaatgatttacgattaattcaacacgattcgttaatccaaggcaaaacagtctgggatgaaaattacgaaaatcaagcaaaagatttaggataccatagcggtgaacttggtccaatttatggaaaacagtggcgtgattttggtggtgtagaccaaattatagaagttattgatcgtattaaaaaactgccaaatgataggcgtcaaattgtttctgcatggaatccagctgaacttaaatatatggcattaccgccttgtcatatgttctatcagtttaatgtgcgtaatggctatttggatttgcagtggtatcaacgctcagtagatgttttcttgggtctaccgtttaatattgcgtcatatgctacgttagttcatattgtagctaagatgtgtaatcttattccaggggatttgatattttctggtggtaatactcatatctatatgaatcacgtagaacaatgtaaagaaattttgaggcgtgaacctaaagagctttgtgagctggtaataagtggtctaccttataaattccgatatctttctactaaagaacaattaaaatatgttcttaaacttaggcctaaagatttcgttcttaacaactatgtatcacaccctcctattaaaggaaagatggcggtgtaa" - if featureJoin != seqJoin { - t.Errorf("Feature sequence parser has changed on test 'join(893..1441,2459..2770)'. Got this:\n%s instead of \n%s", featureJoin, seqJoin) - } - - // Read complement(2791..3054) - featureComplement, _ := gbk.Features[10].GetSequence() - seqComplement := "ttattcactacccggcatagacggcccacgctggaataattcgtcatattgtttttccgttaaaacagtaatatcgtagtaacagtcagaagaagttttaactgtggaaattttattatcaaaatactcacgagtcattttatgagtatagtattttttaccataaatggtaataggctgttctggtcctggaacttctaactcgcttgggttaggaagtgtaaaaagaactacaccagaagtatctttaaatcgtaaaatcat" - if featureComplement != seqComplement { - t.Errorf("Feature sequence parser has changed on test 'complement(2791..3054)'. Got this:\n%s instead of \n%s", featureComplement, seqComplement) - } - - // Read join(complement(315..330),complement(339..896)) - // Note: it is known that some software, like Snapgene, assumes that since both strands are in the reverse direction - // that the first sequence should be appended to the reverse sequence, instead of the second sequence - // getting appended to the first. Biopython appends the second sequence to the first, and that is logically - // the most obvious thing to do, so we are implementing it that way. - featureJoinComplement, _ := gbk.Features[3].GetSequence() - seqJoinComplement := "ataccaatttaatcattcatttatatactgattccgtaagggttgttacttcatctattttataccaatgcgtttcaaccatttcacgcttgcttatatcatcaagaaaacttgcgtctaattgaactgttgaattaacacgatgccttttaacgatgcgagaaacaactacttcatctgcataaggtaatgcagcatataacagagcaggcccgccaattacacttactttagaattctgatcaagcatagtttcgaatggtgcattagggcttgacacttgaatttcgccgccagaaatgtaagttatatattgctcccaagtaatatagaaatgtgctaaatcgccgtctttagttacaggataatcacgcgcaaggtcacacaccacaatatggctacgaccaggaagtaatgtaggcaatgactggaacgttttagcacccataatcataattgtgccttcagtacgagctttaaaattctggaggtcctttttaactcgtccccatggtaaaccatcacctaaaccgaatgctaattcattaaagccgtcgaccgttttagttggaga" - if featureJoinComplement != seqJoinComplement { - t.Errorf("Feature sequence parser has changed on test 'join(complement(315..330),complement(339..896))'. Got this:\n%s instead of \n%s", featureJoinComplement, seqJoinComplement) - } - - // Read complement(join(893..1098,1101..2770)) - featureComplementJoin, _ := gbk.Features[5].GetSequence() - seqComplementJoin := "ttacaccgccatctttcctttaataggagggtgtgatacatagttgttaagaacgaaatctttaggcctaagtttaagaacatattttaattgttctttagtagaaagatatcggaatttataaggtagaccacttattaccagctcacaaagctctttaggttcacgcctcaaaatttctttacattgttctacgtgattcatatagatatgagtattaccaccagaaaatatcaaatcccctggaataagattacacatcttagctacaatatgaactaacgtagcatatgacgcaatattaaacggtagcattatgttcagataaggtcgttaatcttaccccggaattatatccagctgcatgtcaccatgcagagcagactatatctccaacttgttaaagcaagttgtctatcgtttcgagtcacttgaccctactccccaaagggatagtcgttaggcatttatgtagaaccaattccatttatcagattttacacgataagtaactaatccagacgaaattttaaaatgtctagctgcatctgctgcacaatcaaaaataaccccatcacatgaaatctttttaatattactaggctttttacctttcatcttttctgatattttagatttagttatgtctgaatgcttatgattaaagaatgaattattttcacctgaacgatttctgcatttactacaagtataagcagaagtttgtatgcgaacaccgcacttacaaaacttatgggtttctggattccaacgcccgtttttacttccgggtttactgtaaagagctttccgaccatcaggtccaagtttaagcatcttagctttaacagtttcagaacgtttcttaataatttcttcttttaatggatgcgtagaacatgtatcaccaaacgttgcatcagcaatattgtatccattaattttagaattaagctctttaatccaaaaattttctcgttcaataatcaaatctttctcatatggaatttcttccaaaatagaacattcaaacacattaccatgtttgttaaaagacctctgaagttttatagaagaatggcatcctttttctaaatctttaaaatgcctcttccatctcttttcaaaatctttagcacttcctacatatactttattgtttaaagtatttttaatctgataaattccgcttttcataaatacctctttaaatatagaagtatttattaaagggcaagtcctacaatttagcacgggattgtctactagagaggttccccgtttagatagattacaagtataagtcaccttatactcaggcctcaattaacccaagaaaacatctactgagcgttgataccactgcaaatccaaatagccattacgcacattaaactgatagaacatatgacaaggcggtaatgccatatatttaagttcagctggattccatgcagaaacaatttgacgcctatcatttggcagttttttaatacgatcaataacttctataatttggtctacaccaccaaaatcacgccactgttttccataaattggaccaagttcaccgctatggtatcctaaatcttttgcttgattttcgtaattttcatcccagactgttttgccttggattaacgaatcgtgttgaattaatcgtaaatcatacatttgtgcttcctgataaaaaccatattagctcagcaatgcaagctttccaggcgagcttcttagttgttaccgcaggaaaacctttagttaaatcccagcgtaatttagatccgaacagagcaattgttcctgtgcctgtacgatcatcggtttcataaccattttcaaaaatgtctttaattaaatcttggtattgtttcat" - if featureComplementJoin != seqComplementJoin { - t.Errorf("Feature sequence parser has changed on test 'complement(join(893..1098,1101..2770))'. Got this:\n%s instead of \n%s", featureComplementJoin, seqComplementJoin) - } -} - -func TestGenbankNewlineParsingRegression(t *testing.T) { - gbk, _ := Read("../../data/puc19.gbk") - - for _, feature := range gbk.Features { - if feature.Location.Start == 410 && feature.Location.End == 1750 && feature.Type == "CDS" { - if feature.Attributes["product"] != "chromosomal replication initiator informational ATPase" { - t.Errorf("Newline parsing has failed.") - } - break - } - } -} - -func BenchmarkRead(b *testing.B) { - for i := 0; i < b.N; i++ { - _, _ = Read("../../data/bsub.gbk") - } -} - -func BenchmarkRead1(b *testing.B) { BenchmarkRead(b) } -func BenchmarkRead10(b *testing.B) { BenchmarkRead(b) } -func BenchmarkRead100(b *testing.B) { BenchmarkRead(b) } -func BenchmarkRead1000(b *testing.B) { BenchmarkRead(b) } -func BenchmarkRead10000(b *testing.B) { BenchmarkRead(b) } - -/****************************************************************************** - -Gbk/gb/genbank related benchmarks end here. - -******************************************************************************/ - -func TestBenchlingGenbank(t *testing.T) { - sequence, _ := Read("../../data/benchling.gb") - - if len(sequence.Features) != 17 { - t.Errorf("Parsing benchling genbank file not returned the correct quantity of features") - } -} - -func TestParse(t *testing.T) { - type args struct { - r io.Reader - } - tests := []struct { - name string - args args - want Genbank - wantErr bool - }{ - // TODO: Add test cases. - // empty line in genbank meta data - // { - - // name: "empty line in genbank meta data", - // args: args{r: strings.NewReader("LOCUS puc19.gbk 2686 bp DNA circular 22-OCT-2019")}, - // wantErr: true, - // }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := Parse(tt.args.r) - if (err != nil) != tt.wantErr { - t.Errorf("Parse() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Parse() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestParseMulti(t *testing.T) { - type args struct { - r io.Reader - } - tests := []struct { - name string - args args - want []Genbank - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := ParseMulti(tt.args.r) - if (err != nil) != tt.wantErr { - t.Errorf("ParseMulti() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("ParseMulti() = %v, want %v", got, tt.want) - } - }) - } -} - -// this was hand-written and tests the same as the above suite. -func TestFeature_GetSequence_Legacy(t *testing.T) { - // This test is a little too complex and contrived for an example function. - // Essentially, it's testing GetSequence()'s ability to parse and retrieve sequences from complex location structures. - // This was originally covered in the old package system it was not covered in the new package system so I decided to include it here. - - // Sequence for greenflourescent protein (GFP) that we're using as test data for this example. - gfpSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" - - sequenceLength := len(gfpSequence) - - // Splitting the sequence into two parts to make a multi-location feature. - sequenceFirstHalf := gfpSequence[:sequenceLength/2] - sequenceSecondHalf := transform.ReverseComplement(gfpSequence[sequenceLength/2:]) // This feature is reverse complemented. - - // rejoining the two halves into a single string where the second half of the sequence is reverse complemented. - gfpSequenceModified := sequenceFirstHalf + sequenceSecondHalf - - // initialize sequence and feature structs. - var sequence Genbank - var feature Feature - - // set the initialized sequence struct's sequence. - sequence.Sequence = gfpSequenceModified - // initialize sublocations to be usedin the feature. - - var subLocation Location - var subLocationReverseComplemented Location - - subLocation.Start = 0 - subLocation.End = sequenceLength / 2 - - subLocationReverseComplemented.Start = sequenceLength / 2 - subLocationReverseComplemented.End = sequenceLength - subLocationReverseComplemented.Complement = true // According to genbank complement means reverse complement. What a country. - - feature.Description = "Green Fluorescent Protein" - feature.Location.SubLocations = []Location{subLocation, subLocationReverseComplemented} - - // Add the GFP feature to the sequence struct. - _ = sequence.AddFeature(&feature) - - // get the GFP feature sequence string from the sequence struct. - featureSequence, _ := feature.GetSequence() - - // check to see if the feature was inserted properly into the sequence. - if gfpSequence != featureSequence { - t.Error("Feature sequence was not properly retrieved.") - } -} - -func Test_parseLoopParameters_init(t *testing.T) { - type fields struct { - newLocation bool - quoteActive bool - attribute string - attributeValue string - sequenceBuilder strings.Builder - parseStep string - genbank Genbank - feature Feature - features []Feature - metadataTag string - metadataData []string - genbankStarted bool - } - tests := []struct { - name string - fields fields - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - params := &parseLoopParameters{ - newLocation: tt.fields.newLocation, - quoteActive: tt.fields.quoteActive, - attribute: tt.fields.attribute, - attributeValue: tt.fields.attributeValue, - sequenceBuilder: tt.fields.sequenceBuilder, - parseStep: tt.fields.parseStep, - genbank: tt.fields.genbank, - feature: tt.fields.feature, - features: tt.fields.features, - metadataTag: tt.fields.metadataTag, - metadataData: tt.fields.metadataData, - genbankStarted: tt.fields.genbankStarted, - } - params.init() - }) - } -} - -func TestParseMultiNth(t *testing.T) { - type args struct { - r io.Reader - count int - } - tests := []struct { - name string - args args - want []Genbank - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := ParseMultiNth(tt.args.r, tt.args.count) - if (err != nil) != tt.wantErr { - t.Errorf("ParseMultiNth() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("ParseMultiNth() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_parseMetadata(t *testing.T) { - type args struct { - metadataData []string - } - tests := []struct { - name string - args args - want string - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := parseMetadata(tt.args.metadataData); got != tt.want { - t.Errorf("parseMetadata() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_parseReferences(t *testing.T) { - type args struct { - metadataData []string - } - tests := []struct { - name string - args args - want Reference - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := parseReferences(tt.args.metadataData) - if (err != nil) != tt.wantErr { - t.Errorf("parseReferences() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("parseReferences() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestReference_addKey(t *testing.T) { - type fields struct { - Authors string - Title string - Journal string - PubMed string - Remark string - Range string - } - type args struct { - referenceKey string - referenceValue string - } - tests := []struct { - name string - fields fields - args args - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - reference := &Reference{ - Authors: tt.fields.Authors, - Title: tt.fields.Title, - Journal: tt.fields.Journal, - PubMed: tt.fields.PubMed, - Remark: tt.fields.Remark, - Range: tt.fields.Range, - } - if err := reference.addKey(tt.args.referenceKey, tt.args.referenceValue); (err != nil) != tt.wantErr { - t.Errorf("Reference.addKey() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_parseLocus(t *testing.T) { - type args struct { - locusString string - } - tests := []struct { - name string - args args - want Locus - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := parseLocus(tt.args.locusString); !reflect.DeepEqual(got, tt.want) { - t.Errorf("parseLocus() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestRead(t *testing.T) { - type args struct { - path string - } - tests := []struct { - name string - args args - want Genbank - wantErr bool - }{ - // TODO: Add test cases. - { - name: "error on missing file", - args: args{ - path: "../../afdaljhdfa.txt", - }, - wantErr: true, - }, - { - name: "error on malformed file", - args: args{ - path: "../../data/malformed_read_test.gbk", - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := Read(tt.args.path) - if (err != nil) != tt.wantErr { - t.Errorf("Read() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Read() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestReadMulti(t *testing.T) { - type args struct { - path string - } - tests := []struct { - name string - args args - want []Genbank - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := ReadMulti(tt.args.path) - if (err != nil) != tt.wantErr { - t.Errorf("ReadMulti() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("ReadMulti() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_parseLocation(t *testing.T) { - type args struct { - locationString string - } - tests := []struct { - name string - args args - want Location - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := parseLocation(tt.args.locationString) - if (err != nil) != tt.wantErr { - t.Errorf("parseLocation() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("parseLocation() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_buildMetaString(t *testing.T) { - type args struct { - name string - data string - } - tests := []struct { - name string - args args - want string - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := buildMetaString(tt.args.name, tt.args.data); got != tt.want { - t.Errorf("buildMetaString() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestBuildLocationString(t *testing.T) { - type args struct { - location Location - } - tests := []struct { - name string - args args - want string - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := BuildLocationString(tt.args.location); got != tt.want { - t.Errorf("BuildLocationString() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_generateWhiteSpace(t *testing.T) { - type args struct { - length int - } - tests := []struct { - name string - args args - want string - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := generateWhiteSpace(tt.args.length); got != tt.want { - t.Errorf("generateWhiteSpace() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestRead_error(t *testing.T) { - readErr := errors.New("open /tmp/file12345: no such file or directory") - oldReadFileFn := readFileFn - readFileFn = func(filename string) ([]byte, error) { - return nil, readErr - } - defer func() { - readFileFn = oldReadFileFn - }() - _, err := Read("/tmp/file12345") - assert.EqualError(t, err, readErr.Error()) -} - -func TestBuildFeatureString(t *testing.T) { - feature := Feature{ - Type: "test type", - Description: "a description", - Location: Location{ - GbkLocationString: "gbk location", - }, - } - str := BuildFeatureString(feature) - assert.Equal(t, str, " test type gbk location\n") -} - -func TestParse_error(t *testing.T) { - parseMultiErr := errors.New("parse error") - oldParseMultiNthFn := parseMultiNthFn - parseMultiNthFn = func(r io.Reader, count int) ([]Genbank, error) { - return nil, parseMultiErr - } - defer func() { - parseMultiNthFn = oldParseMultiNthFn - }() - _, err := Parse(strings.NewReader("")) - assert.EqualError(t, err, parseMultiErr.Error()) - - _, err = ParseMulti(strings.NewReader("")) - assert.EqualError(t, err, parseMultiErr.Error()) -} - -func TestParseReferences_error(t *testing.T) { - parseReferencesErr := errors.New("Failed in parsing reference above line 13. Got error: ") - oldParseReferencesFn := parseReferencesFn - parseReferencesFn = func(metadataData []string) (Reference, error) { - return Reference{}, errors.New("") - } - defer func() { - parseReferencesFn = oldParseReferencesFn - }() - file, _ := os.Open("../../data/puc19.gbk") - _, err := parseMultiNthFn(file, 1) - assert.EqualError(t, err, parseReferencesErr.Error()) -} - -func TestIssue303Regression(t *testing.T) { - seq, _ := Read("../../data/puc19_303_regression.gbk") - expectedAttribute := "16S rRNA(adenine(1518)-N(6)/adenine(1519)-N(6))-dimethyltransferase" - for _, feature := range seq.Features { - if feature.Attributes["locus_tag"] == "JCVISYN3A_0004" && feature.Type == "CDS" { - if feature.Attributes["product"] != expectedAttribute { - t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes["product"], expectedAttribute) - } - } - if feature.Attributes["locus_tag"] == "JCVISYN3A_0051" && feature.Type == "CDS" { - if _, ok := feature.Attributes["pseudo"]; !ok { - t.Errorf("pseudo should be in attributes") - } - } - } -} - -func TestConsortiumRegression(t *testing.T) { - _, err := Read("../../data/puc19_consrtm.gbk") - if err != nil { - t.Errorf("Failed to read consrtm. Got err: %s", err) - } -} From 9b55fda437cf0c800b7158f6e8e8e413d9680d5c Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 20:31:02 -0700 Subject: [PATCH 27/59] writeTo interface now fulfilled --- bio/bio.go | 6 +- bio/genbank/genbank.go | 297 ++++++++++++++++++++++++++++------------- 2 files changed, 203 insertions(+), 100 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 101ad5fb..5f8d64c1 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -77,14 +77,12 @@ type parserInterface[DataType fasta.Record | fastq.Read | genbank.Genbank | slow // The following checks that all DataType and DataTypeHeaders implement the io.WriteTo interface. var _ io.WriterTo = (*fasta.Record)(nil) var _ io.WriterTo = (*fastq.Read)(nil) - -// genbank +var _ io.WriterTo = (*genbank.Genbank)(nil) var _ io.WriterTo = (*slow5.Read)(nil) var _ io.WriterTo = (*pileup.Line)(nil) var _ io.WriterTo = (*fasta.Header)(nil) var _ io.WriterTo = (*fastq.Header)(nil) - -// genbank +var _ io.WriterTo = (*genbank.Header)(nil) var _ io.WriterTo = (*slow5.Header)(nil) var _ io.WriterTo = (*pileup.Header)(nil) diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 02ed8087..1ca3993e 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -149,137 +149,242 @@ func getFeatureSequence(feature Feature, location Location) (string, error) { return sequenceString, nil } -// BuildMulti builds a MultiGBK byte slice to be written out to db or file. -func BuildMulti(sequences []Genbank) ([]byte, error) { - var gbkString bytes.Buffer - for _, sequence := range sequences { - locus := sequence.Meta.Locus - var shape string - - if locus.Circular { - shape = "circular" - } else { - shape = "linear" - } +// WriteTo implements the io.WriterTo interface on genbank records. +func (sequence *Genbank) WriteTo(w io.Writer) (int64, error) { + var writtenBytes int64 + var newWrittenBytes int + var err error - fivespace := generateWhiteSpace(subMetaIndex) + locus := sequence.Meta.Locus + var shape string - // building locus - locusData := locus.Name + fivespace + locus.SequenceLength + " bp" + fivespace + locus.MoleculeType + fivespace + shape + fivespace + locus.GenbankDivision + fivespace + locus.ModificationDate - locusString := "LOCUS " + locusData + "\n" - gbkString.WriteString(locusString) + if locus.Circular { + shape = "circular" + } else { + shape = "linear" + } - // building other standard meta features - definitionString := buildMetaString("DEFINITION", sequence.Meta.Definition) - gbkString.WriteString(definitionString) + fivespace := generateWhiteSpace(subMetaIndex) - accessionString := buildMetaString("ACCESSION", sequence.Meta.Accession) - gbkString.WriteString(accessionString) + // building locus + locusData := locus.Name + fivespace + locus.SequenceLength + " bp" + fivespace + locus.MoleculeType + fivespace + shape + fivespace + locus.GenbankDivision + fivespace + locus.ModificationDate + locusString := "LOCUS " + locusData + "\n" + newWrittenBytes, err = w.Write([]byte(locusString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - versionString := buildMetaString("VERSION", sequence.Meta.Version) - gbkString.WriteString(versionString) + // building other standard meta features + definitionString := buildMetaString("DEFINITION", sequence.Meta.Definition) + newWrittenBytes, err = w.Write([]byte(definitionString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - keywordsString := buildMetaString("KEYWORDS", sequence.Meta.Keywords) - gbkString.WriteString(keywordsString) + accessionString := buildMetaString("ACCESSION", sequence.Meta.Accession) + newWrittenBytes, err = w.Write([]byte(accessionString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - sourceString := buildMetaString("SOURCE", sequence.Meta.Source) - gbkString.WriteString(sourceString) + versionString := buildMetaString("VERSION", sequence.Meta.Version) + newWrittenBytes, err = w.Write([]byte(versionString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - organismString := buildMetaString(" ORGANISM", sequence.Meta.Organism) - gbkString.WriteString(organismString) + keywordsString := buildMetaString("KEYWORDS", sequence.Meta.Keywords) + newWrittenBytes, err = w.Write([]byte(keywordsString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - if len(sequence.Meta.Taxonomy) > 0 { - var taxonomyString strings.Builder - for i, taxonomyData := range sequence.Meta.Taxonomy { - taxonomyString.WriteString(taxonomyData) - if len(sequence.Meta.Taxonomy) == i+1 { - taxonomyString.WriteString(".") - } else { - taxonomyString.WriteString("; ") - } + sourceString := buildMetaString("SOURCE", sequence.Meta.Source) + newWrittenBytes, err = w.Write([]byte(sourceString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + + organismString := buildMetaString(" ORGANISM", sequence.Meta.Organism) + newWrittenBytes, err = w.Write([]byte(organismString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + + if len(sequence.Meta.Taxonomy) > 0 { + var taxonomyString strings.Builder + for i, taxonomyData := range sequence.Meta.Taxonomy { + taxonomyString.WriteString(taxonomyData) + if len(sequence.Meta.Taxonomy) == i+1 { + taxonomyString.WriteString(".") + } else { + taxonomyString.WriteString("; ") } - gbkString.WriteString(buildMetaString("", taxonomyString.String())) } + newWrittenBytes, err = w.Write([]byte(buildMetaString("", taxonomyString.String()))) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + } - // building references - // TODO: could use reflection to get keys and make more general. - for referenceIndex, reference := range sequence.Meta.References { - referenceString := buildMetaString("REFERENCE", fmt.Sprintf("%d %s", referenceIndex+1, reference.Range)) - gbkString.WriteString(referenceString) + // building references + // TODO: could use reflection to get keys and make more general. + for referenceIndex, reference := range sequence.Meta.References { + referenceString := buildMetaString("REFERENCE", fmt.Sprintf("%d %s", referenceIndex+1, reference.Range)) + newWrittenBytes, err = w.Write([]byte(referenceString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - if reference.Authors != "" { - authorsString := buildMetaString(" AUTHORS", reference.Authors) - gbkString.WriteString(authorsString) + if reference.Authors != "" { + authorsString := buildMetaString(" AUTHORS", reference.Authors) + newWrittenBytes, err = w.Write([]byte(authorsString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } + } - if reference.Title != "" { - titleString := buildMetaString(" TITLE", reference.Title) - gbkString.WriteString(titleString) + if reference.Title != "" { + titleString := buildMetaString(" TITLE", reference.Title) + newWrittenBytes, err = w.Write([]byte(titleString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } + } - if reference.Journal != "" { - journalString := buildMetaString(" JOURNAL", reference.Journal) - gbkString.WriteString(journalString) + if reference.Journal != "" { + journalString := buildMetaString(" JOURNAL", reference.Journal) + newWrittenBytes, err = w.Write([]byte(journalString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } + } - if reference.PubMed != "" { - pubMedString := buildMetaString(" PUBMED", reference.PubMed) - gbkString.WriteString(pubMedString) + if reference.PubMed != "" { + pubMedString := buildMetaString(" PUBMED", reference.PubMed) + newWrittenBytes, err = w.Write([]byte(pubMedString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } - if reference.Consortium != "" { - consrtmString := buildMetaString(" CONSRTM", reference.Consortium) - gbkString.WriteString(consrtmString) + } + if reference.Consortium != "" { + consrtmString := buildMetaString(" CONSRTM", reference.Consortium) + newWrittenBytes, err = w.Write([]byte(consrtmString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } } + } - // building other meta fields that are catch all - otherKeys := make([]string, 0, len(sequence.Meta.Other)) - for key := range sequence.Meta.Other { - otherKeys = append(otherKeys, key) - } + // building other meta fields that are catch all + otherKeys := make([]string, 0, len(sequence.Meta.Other)) + for key := range sequence.Meta.Other { + otherKeys = append(otherKeys, key) + } - for _, otherKey := range otherKeys { - otherString := buildMetaString(otherKey, sequence.Meta.Other[otherKey]) - gbkString.WriteString(otherString) + for _, otherKey := range otherKeys { + otherString := buildMetaString(otherKey, sequence.Meta.Other[otherKey]) + newWrittenBytes, err = w.Write([]byte(otherString)) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } + } - // start writing features section. - gbkString.WriteString("FEATURES Location/Qualifiers\n") - for _, feature := range sequence.Features { - gbkString.WriteString(BuildFeatureString(feature)) + // start writing features section. + newWrittenBytes, err = w.Write([]byte("FEATURES Location/Qualifiers\n")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + for _, feature := range sequence.Features { + newWrittenBytes, err = w.Write([]byte(BuildFeatureString(feature))) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } + } - // start writing sequence section. - gbkString.WriteString("ORIGIN\n") + // start writing sequence section. + newWrittenBytes, err = w.Write([]byte("ORIGIN\n")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } - // iterate over every character in sequence range. - for index, base := range sequence.Sequence { - // if 60th character add newline then whitespace and index number and space before adding next base. - if index%60 == 0 { - if index != 0 { - gbkString.WriteString("\n") + // iterate over every character in sequence range. + for index, base := range sequence.Sequence { + // if 60th character add newline then whitespace and index number and space before adding next base. + if index%60 == 0 { + if index != 0 { + newWrittenBytes, err = w.Write([]byte("\n")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } - lineNumberString := strconv.Itoa(index + 1) // genbank indexes at 1 for some reason - leadingWhiteSpaceLength := 9 - len(lineNumberString) // <- I wish I was kidding - for i := 0; i < leadingWhiteSpaceLength; i++ { - gbkString.WriteString(" ") + } + lineNumberString := strconv.Itoa(index + 1) // genbank indexes at 1 for some reason + leadingWhiteSpaceLength := 9 - len(lineNumberString) // <- I wish I was kidding + for i := 0; i < leadingWhiteSpaceLength; i++ { + newWrittenBytes, err = w.Write([]byte(" ")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } - gbkString.WriteString(lineNumberString + " ") - gbkString.WriteRune(base) - // if base index is divisible by ten add a space (genbank convention) - } else if index%10 == 0 { - gbkString.WriteString(" ") - gbkString.WriteRune(base) - // else just add the base. - } else { - gbkString.WriteRune(base) + } + newWrittenBytes, err = w.Write([]byte(lineNumberString + " ")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + newWrittenBytes, err = w.Write([]byte{byte(base)}) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + // if base index is divisible by ten add a space (genbank convention) + } else if index%10 == 0 { + newWrittenBytes, err = w.Write([]byte(" ")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + newWrittenBytes, err = w.Write([]byte{byte(base)}) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + // else just add the base. + } else { + newWrittenBytes, err = w.Write([]byte{byte(base)}) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } } - // finish genbank file with "//" on newline (again a genbank convention) - gbkString.WriteString("\n//\n") + } + // finish genbank file with "//" on newline (again a genbank convention) + newWrittenBytes, err = w.Write([]byte("\n//\n")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err } - return gbkString.Bytes(), nil + return writtenBytes, nil } type parseLoopParameters struct { From 66555659632ebdda80621802ef7813b05209be63 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Tue, 12 Sep 2023 20:32:23 -0700 Subject: [PATCH 28/59] make linter happy :) --- bio/example_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bio/example_test.go b/bio/example_test.go index 3a7ef220..7c3e7d36 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -12,8 +12,8 @@ import ( "github.com/TimothyStiles/poly/bio/fasta" ) -// ExampleRead shows an example of reading a file from disk. -func ExampleRead() { +// Example_read shows an example of reading a file from disk. +func Example_read() { // Read lets you read files from disk into a parser. file, _ := os.Open("fasta/data/base.fasta") parser, _ := bio.NewFastaParser(file) @@ -174,7 +174,7 @@ $$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0 // Output:GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAAACAGATGCAAGTCTGGTGTGATTAACTTCACCAAAGGGCTGGTTGTAATATTAGGAAATCTAACAATAGATTCTGTTGGTTGGACTCTAAAATTAGAAATTTGATAGATTCCTTTTCCCAAATGAAAGTTTAACGTACACTTTGTTTCTAAAGGAAGGTCAAATTACAGTCTACAGCATCGTAATGGTTCATTTTCATTTATATTTTAATACTAGAAAAGTCCTAGGTTGAAGATAACCACATAATAAGCTGCAACTTCAGCTGTCCCAACCTGAAGAAGAATCGCAGGAGTCGAAATAACTTCTGTAAAGCAAGTAGTTTGAACCTATTGATGTTTCAACATGAGCAATACGTAACT } -func ExampleGenbankParser() { +func ExampleNewGenbankParser() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. file := strings.NewReader(`LOCUS pUC19_lacZ 336 bp DNA linear UNA 12-SEP-2023 From 11972ae4998e9f7b64c8ed0f9569035d2facd04b Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 13 Sep 2023 22:10:35 -0700 Subject: [PATCH 29/59] convert all types to io.WriterTo --- bio/bio.go | 100 ++++++++++++++++++---------------------- bio/example_test.go | 4 +- bio/fasta/fasta.go | 4 +- bio/fastq/fastq.go | 19 +++++--- bio/fastq/fastq_test.go | 1 + bio/genbank/genbank.go | 15 +++--- bio/pileup/pileup.go | 19 +++++--- bio/slow5/slow5.go | 2 +- 8 files changed, 82 insertions(+), 82 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 5f8d64c1..6488c0d5 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -64,17 +64,17 @@ Lower level interfaces // have headers. Next() returns a record/read/line from the file format, and // terminates on an io.EOF error. // -// Next() may terminate with an io.EOF error with a nil DataType or with a -// full DataType, depending on where the EOF is in the actual file. A check +// Next() may terminate with an io.EOF error with a nil Data or with a +// full Data, depending on where the EOF is in the actual file. A check // for this is needed at the last Next(), when it returns an io.EOF error. A -// pointer is used to represent the difference between a null DataType and an -// empty DataType. -type parserInterface[DataType fasta.Record | fastq.Read | genbank.Genbank | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | genbank.Header | slow5.Header | pileup.Header] interface { - Header() (*DataTypeHeader, error) - Next() (*DataType, error) +// pointer is used to represent the difference between a null Data and an +// empty Data. +type parserInterface[Data io.WriterTo, Header io.WriterTo] interface { + Header() (Header, error) + Next() (Data, error) } -// The following checks that all DataType and DataTypeHeaders implement the io.WriteTo interface. +// The following checks that all Data and Headers implement the io.WriteTo interface. var _ io.WriterTo = (*fasta.Record)(nil) var _ io.WriterTo = (*fastq.Read)(nil) var _ io.WriterTo = (*genbank.Genbank)(nil) @@ -95,64 +95,64 @@ Higher level parse // Parser is generic bioinformatics file parser. It contains a LowerLevelParser // and implements useful functions on top of it: such as Parse(), ParseToChannel(), and // ParseWithHeader(). -type Parser[DataType fasta.Record | fastq.Read | genbank.Genbank | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | genbank.Header | slow5.Header | pileup.Header] struct { - parserInterface parserInterface[DataType, DataTypeHeader] +type Parser[Data io.WriterTo, Header io.WriterTo] struct { + parserInterface parserInterface[Data, Header] } // NewFastaParser initiates a new FASTA parser from an io.Reader. -func NewFastaParser(r io.Reader) (*Parser[fasta.Record, fasta.Header], error) { +func NewFastaParser(r io.Reader) (*Parser[*fasta.Record, *fasta.Header], error) { return NewFastaParserWithMaxLineLength(r, DefaultMaxLengths[Fasta]) } // NewFastaParserWithMaxLineLength initiates a new FASTA parser from an // io.Reader and a user-given maxLineLength. -func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fasta.Record, fasta.Header], error) { - return &Parser[fasta.Record, fasta.Header]{parserInterface: fasta.NewParser(r, maxLineLength)}, nil +func NewFastaParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[*fasta.Record, *fasta.Header], error) { + return &Parser[*fasta.Record, *fasta.Header]{parserInterface: fasta.NewParser(r, maxLineLength)}, nil } // NewFastqParser initiates a new FASTQ parser from an io.Reader. -func NewFastqParser(r io.Reader) (*Parser[fastq.Read, fastq.Header], error) { +func NewFastqParser(r io.Reader) (*Parser[*fastq.Read, *fastq.Header], error) { return NewFastqParserWithMaxLineLength(r, DefaultMaxLengths[Fastq]) } // NewFastqParserWithMaxLineLength initiates a new FASTQ parser from an // io.Reader and a user-given maxLineLength. -func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[fastq.Read, fastq.Header], error) { - return &Parser[fastq.Read, fastq.Header]{parserInterface: fastq.NewParser(r, maxLineLength)}, nil +func NewFastqParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[*fastq.Read, *fastq.Header], error) { + return &Parser[*fastq.Read, *fastq.Header]{parserInterface: fastq.NewParser(r, maxLineLength)}, nil } // NewGenbankParser initiates a new Genbank parser form an io.Reader. -func NewGenbankParser(r io.Reader) (*Parser[genbank.Genbank, genbank.Header], error) { +func NewGenbankParser(r io.Reader) (*Parser[*genbank.Genbank, *genbank.Header], error) { return NewGenbankParserWithMaxLineLength(r, DefaultMaxLengths[Genbank]) } // NewGenbankParserWithMaxLineLength initiates a new Genbank parser from an // io.Reader and a user-given maxLineLength. -func NewGenbankParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[genbank.Genbank, genbank.Header], error) { - return &Parser[genbank.Genbank, genbank.Header]{parserInterface: genbank.NewParser(r, maxLineLength)}, nil +func NewGenbankParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[*genbank.Genbank, *genbank.Header], error) { + return &Parser[*genbank.Genbank, *genbank.Header]{parserInterface: genbank.NewParser(r, maxLineLength)}, nil } // NewSlow5Parser initiates a new SLOW5 parser from an io.Reader. -func NewSlow5Parser(r io.Reader) (*Parser[slow5.Read, slow5.Header], error) { +func NewSlow5Parser(r io.Reader) (*Parser[*slow5.Read, *slow5.Header], error) { return NewSlow5ParserWithMaxLineLength(r, DefaultMaxLengths[Slow5]) } // NewSlow5ParserWithMaxLineLength initiates a new SLOW5 parser from an // io.Reader and a user-given maxLineLength. -func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[slow5.Read, slow5.Header], error) { +func NewSlow5ParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[*slow5.Read, *slow5.Header], error) { parser, err := slow5.NewParser(r, maxLineLength) - return &Parser[slow5.Read, slow5.Header]{parserInterface: parser}, err + return &Parser[*slow5.Read, *slow5.Header]{parserInterface: parser}, err } // NewPileupParser initiates a new Pileup parser from an io.Reader. -func NewPileupParser(r io.Reader) (*Parser[pileup.Line, pileup.Header], error) { +func NewPileupParser(r io.Reader) (*Parser[*pileup.Line, *pileup.Header], error) { return NewPileupParserWithMaxLineLength(r, DefaultMaxLengths[Pileup]) } // NewPileupParserWithMaxLineLength initiates a new Pileup parser from an // io.Reader and a user-given maxLineLength. -func NewPileupParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[pileup.Line, pileup.Header], error) { - return &Parser[pileup.Line, pileup.Header]{parserInterface: pileup.NewParser(r, maxLineLength)}, nil +func NewPileupParserWithMaxLineLength(r io.Reader, maxLineLength int) (*Parser[*pileup.Line, *pileup.Header], error) { + return &Parser[*pileup.Line, *pileup.Header]{parserInterface: pileup.NewParser(r, maxLineLength)}, nil } /****************************************************************************** @@ -168,7 +168,7 @@ Parser higher-level functions // downstream software. Next can only be called as many times as there are // records in a file, as the parser reads the underlying io.Reader in a // straight line. -func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { +func (p *Parser[Data, Header]) Next() (Data, error) { return p.parserInterface.Next() } @@ -187,22 +187,19 @@ func (p *Parser[DataType, DataTypeHeader]) Next() (*DataType, error) { // The following file formats do have a useful header: // // SLOW5 -func (p *Parser[DataType, DataTypeHeader]) Header() (*DataTypeHeader, error) { +func (p *Parser[Data, Header]) Header() (Header, error) { return p.parserInterface.Header() } // ParseN returns a countN number of records/reads/lines from the parser. -func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, error) { - var records []*DataType +func (p *Parser[Data, Header]) ParseN(countN int) ([]Data, error) { + var records []Data for counter := 0; counter < countN; counter++ { record, err := p.Next() if err != nil { if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. } - if record != nil { - records = append(records, record) - } return records, err } records = append(records, record) @@ -213,14 +210,14 @@ func (p *Parser[DataType, DataTypeHeader]) ParseN(countN int) ([]*DataType, erro // Parse returns all records/reads/lines from the parser, but does not include // the header. It can only be called once on a given parser because it will // read all the input from the underlying io.Reader before exiting. -func (p *Parser[DataType, DataTypeHeader]) Parse() ([]*DataType, error) { +func (p *Parser[Data, Header]) Parse() ([]Data, error) { return p.ParseN(math.MaxInt) } // ParseWithHeader returns all records/reads/lines, plus the header, from the // parser. It can only be called once on a given parser because it will read // all the input from the underlying io.Reader before exiting. -func (p *Parser[DataType, DataTypeHeader]) ParseWithHeader() ([]*DataType, *DataTypeHeader, error) { +func (p *Parser[Data, Header]) ParseWithHeader() ([]Data, Header, error) { header, headerErr := p.Header() data, err := p.Parse() if headerErr != nil { @@ -248,7 +245,7 @@ Concurrent higher-level functions // Context can be used to close the parser in the middle of parsing - for // example, if an error is found in another parser elsewhere and all files // need to close. -func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(ctx context.Context, channel chan<- DataType, keepChannelOpen bool) error { +func (p *Parser[Data, Header]) ParseToChannel(ctx context.Context, channel chan<- Data, keepChannelOpen bool) error { for { select { case <-ctx.Done(): @@ -259,61 +256,52 @@ func (p *Parser[DataType, DataTypeHeader]) ParseToChannel(ctx context.Context, c if errors.Is(err, io.EOF) { err = nil // EOF not treated as parsing error. } - if record != nil { - channel <- *record - } if !keepChannelOpen { close(channel) } return err } - channel <- *record + channel <- record } } } // ManyFastaToChannel takes a list of FASTA parsers and pipes all // records/reads/lines to a single channel. -func ManyFastaToChannel(ctx context.Context, parsers []*Parser[fasta.Record, fasta.Header], channel chan<- fasta.Record) error { - return manyToChannel[fasta.Record, fasta.Header](ctx, parsers, channel) +func ManyFastaToChannel(ctx context.Context, parsers []*Parser[*fasta.Record, *fasta.Header], channel chan<- *fasta.Record) error { + return manyToChannel[*fasta.Record, *fasta.Header](ctx, parsers, channel) } // ManyFastqToChannel takes a list of FASTQ parsers and pipes all // records/reads/lines to a single channel. -func ManyFastqToChannel(ctx context.Context, parsers []*Parser[fastq.Read, fastq.Header], channel chan<- fastq.Read) error { - return manyToChannel[fastq.Read, fastq.Header](ctx, parsers, channel) +func ManyFastqToChannel(ctx context.Context, parsers []*Parser[*fastq.Read, *fastq.Header], channel chan<- *fastq.Read) error { + return manyToChannel[*fastq.Read, *fastq.Header](ctx, parsers, channel) } // ManySlow5ToChannel takes a list of SLOW5 parsers and pipes all // records/reads/lines to a single channel. -func ManySlow5ToChannel(ctx context.Context, parsers []*Parser[slow5.Read, slow5.Header], channel chan<- slow5.Read) error { - return manyToChannel[slow5.Read, slow5.Header](ctx, parsers, channel) +func ManySlow5ToChannel(ctx context.Context, parsers []*Parser[*slow5.Read, *slow5.Header], channel chan<- *slow5.Read) error { + return manyToChannel[*slow5.Read, *slow5.Header](ctx, parsers, channel) } // ManyPileupToChannel takes a list of pileup parsers and pipes all // records/reads/lines to a single channel. -func ManyPileupToChannel(ctx context.Context, parsers []*Parser[pileup.Line, pileup.Header], channel chan<- pileup.Line) error { - return manyToChannel[pileup.Line, pileup.Header](ctx, parsers, channel) +func ManyPileupToChannel(ctx context.Context, parsers []*Parser[*pileup.Line, *pileup.Header], channel chan<- *pileup.Line) error { + return manyToChannel[*pileup.Line, *pileup.Header](ctx, parsers, channel) } // manyToChannel is a generic function that implements the ManyXXXToChannel // functions. It properly does concurrent parsing of many parsers to a // single channel, then closes that channel. If any of the files fail to // parse, the entire pipeline exits and returns. -func manyToChannel[DataType fasta.Record | fastq.Read | slow5.Read | pileup.Line, DataTypeHeader fasta.Header | fastq.Header | slow5.Header | pileup.Header](ctx context.Context, parsers []*Parser[DataType, DataTypeHeader], channel chan<- DataType) error { +func manyToChannel[Data io.WriterTo, Header io.WriterTo](ctx context.Context, parsers []*Parser[Data, Header], channel chan<- Data) error { errorGroup, ctx := errgroup.WithContext(ctx) // For each parser, start a new goroutine to parse data to the channel for _, p := range parsers { parser := p // Copy to local variable to avoid loop variable scope issues errorGroup.Go(func() error { - // Use the context to exit early if another goroutine fails - select { - case <-ctx.Done(): - return ctx.Err() - default: - // Use the parser's ParseToChannel function, but keep the channel open - return parser.ParseToChannel(ctx, channel, true) - } + // Use the parser's ParseToChannel function, but keep the channel open + return parser.ParseToChannel(ctx, channel, true) }) } // Wait for all parsers to complete diff --git a/bio/example_test.go b/bio/example_test.go index 7c3e7d36..baf7e45e 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -94,11 +94,11 @@ FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK*`) parser, _ := bio.NewFastaParser(file) - channel := make(chan fasta.Record) + channel := make(chan *fasta.Record) ctx := context.Background() go func() { _ = parser.ParseToChannel(ctx, channel, false) }() - var records []fasta.Record + var records []*fasta.Record for record := range channel { records = append(records, record) } diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index f790df2b..28e72305 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -108,7 +108,7 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // to index where fastas start in a file or string. func (p *Parser) Next() (*Record, error) { if !p.more { - return nil, io.EOF + return &Record{}, io.EOF } for p.scanner.Scan() { line := p.scanner.Bytes() @@ -149,7 +149,7 @@ func (p *Parser) Next() (*Record, error) { if err != nil { return &record, err } - return &record, p.scanner.Err() + return &record, nil } func (p *Parser) newRecord() (Record, error) { diff --git a/bio/fastq/fastq.go b/bio/fastq/fastq.go index 8a966e74..45f92c25 100644 --- a/bio/fastq/fastq.go +++ b/bio/fastq/fastq.go @@ -55,6 +55,7 @@ type Parser struct { // reader keeps state of current reader. reader bufio.Reader line uint + atEof bool } // Header returns nil,nil. @@ -87,6 +88,9 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // a line limit of 80 like fasta files have. So instead of a for loop, you // can just parse 4 lines at once. func (parser *Parser) Next() (*Read, error) { + if parser.atEof { + return &Read{}, io.EOF + } // Initialization of parser state variables. var ( // Parser looks for a line starting with '@' @@ -102,7 +106,7 @@ func (parser *Parser) Next() (*Read, error) { line, err = parser.reader.ReadSlice('\n') parser.line++ if err != nil { - return nil, err + return &Read{}, err } line = line[:len(line)-1] // Exclude newline delimiter. @@ -123,7 +127,7 @@ func (parser *Parser) Next() (*Read, error) { line, err = parser.reader.ReadSlice('\n') parser.line++ if err != nil { - return nil, err + return &Read{}, err } if len(line) <= 1 { // newline delimiter - actually checking for empty line return &Read{}, fmt.Errorf("empty fastq sequence for %q, got to line %d: %w", seqIdentifier, parser.line, err) @@ -141,7 +145,7 @@ func (parser *Parser) Next() (*Read, error) { _, err = parser.reader.ReadSlice('\n') parser.line++ if err != nil { - return nil, err + return &Read{}, err } // parse quality @@ -150,17 +154,18 @@ func (parser *Parser) Next() (*Read, error) { if err != nil { // If the line is EOF, just continue and finish off returning the new read. if err != io.EOF { - return nil, err + return &Read{}, nil } + parser.atEof = true } if len(line) <= 1 { // newline delimiter - actually checking for empty line - return nil, fmt.Errorf("empty quality sequence for %q, got to line %d: %w", seqIdentifier, parser.line, err) + return &Read{}, fmt.Errorf("empty quality sequence for %q, got to line %d: %w", seqIdentifier, parser.line, err) } quality = string(line[:len(line)-1]) // Parsing ended. Check for inconsistencies. if lookingForIdentifier { - return nil, fmt.Errorf("did not find fastq start '@', got to line %d: %w", parser.line, err) + return &Read{}, fmt.Errorf("did not find fastq start '@', got to line %d: %w", parser.line, err) } fastq := Read{ Identifier: seqIdentifier, @@ -171,7 +176,7 @@ func (parser *Parser) Next() (*Read, error) { // Gotten to this point err is non-nil only in EOF case. // We report this error to note the fastq may be incomplete/corrupt // like in the case of using an io.LimitReader wrapping the underlying reader. - return &fastq, err + return &fastq, nil } // Reset discards all data in buffer and resets state. diff --git a/bio/fastq/fastq_test.go b/bio/fastq/fastq_test.go index 26577652..cbe3eb6b 100644 --- a/bio/fastq/fastq_test.go +++ b/bio/fastq/fastq_test.go @@ -39,6 +39,7 @@ $$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0 const maxLineSize = 2 * 32 * 1024 parser := NewParser(file, maxLineSize) read, err := parser.Next() + _, err = parser.Next() if err != io.EOF { t.Errorf("Parser got unknown error: %s", err) } diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 1ca3993e..3636ef96 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -389,7 +389,6 @@ func (sequence *Genbank) WriteTo(w io.Writer) (int64, error) { type parseLoopParameters struct { newLocation bool - quoteActive bool attribute string attributeValue string emptyAttribute bool @@ -476,7 +475,7 @@ func (parser *Parser) Next() (*Genbank, error) { case "metadata": // Handle empty lines if len(line) == 0 { - return nil, fmt.Errorf("Empty metadata line on line %d", lineNum) + return &Genbank{}, fmt.Errorf("Empty metadata line on line %d", lineNum) } // If we are currently reading a line, we need to figure out if it is a new meta line. @@ -497,7 +496,7 @@ func (parser *Parser) Next() (*Genbank, error) { case "REFERENCE": reference, err := parseReferences(parser.parameters.metadataData) if err != nil { - return nil, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) + return &Genbank{}, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) } parser.parameters.genbank.Meta.References = append(parser.parameters.genbank.Meta.References, reference) @@ -545,12 +544,12 @@ func (parser *Parser) Next() (*Genbank, error) { for _, feature := range parser.parameters.features { location, err := parseLocation(feature.Location.GbkLocationString) if err != nil { - return nil, err + return &Genbank{}, err } feature.Location = location err = parser.parameters.genbank.AddFeature(&feature) if err != nil { - return nil, err + return &Genbank{}, err } } continue @@ -585,7 +584,7 @@ func (parser *Parser) Next() (*Genbank, error) { // An initial feature line looks like this: `source 1..2686` with a type separated by its location if len(splitLine) < 2 { - return nil, fmt.Errorf("Feature line malformed on line %d. Got line: %s", lineNum, line) + return &Genbank{}, fmt.Errorf("Feature line malformed on line %d. Got line: %s", lineNum, line) } parser.parameters.feature.Type = strings.TrimSpace(splitLine[0]) parser.parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) @@ -631,7 +630,7 @@ func (parser *Parser) Next() (*Genbank, error) { case "sequence": if len(line) < 2 { // throw error if line is malformed - return nil, fmt.Errorf("Too short line found while parsing genbank sequence on line %d. Got line: %s", lineNum, line) + return &Genbank{}, fmt.Errorf("Too short line found while parsing genbank sequence on line %d. Got line: %s", lineNum, line) } else if line[0:2] == "//" { // end of sequence parser.parameters.genbank.Sequence = parser.parameters.sequenceBuilder.String() @@ -646,7 +645,7 @@ func (parser *Parser) Next() (*Genbank, error) { parser.parameters.genbankStarted = false } } - return nil, io.EOF + return &Genbank{}, io.EOF } func countLeadingSpaces(line string) int { diff --git a/bio/pileup/pileup.go b/bio/pileup/pileup.go index 0ce8b5e3..a7f943f1 100644 --- a/bio/pileup/pileup.go +++ b/bio/pileup/pileup.go @@ -68,6 +68,7 @@ func (header *Header) WriteTo(w io.Writer) (int64, error) { type Parser struct { reader bufio.Reader line uint + atEof bool } // Header returns nil,nil. @@ -85,10 +86,16 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // Next parses the next pileup row in a pileup file. // Next returns an EOF if encountered. func (parser *Parser) Next() (*Line, error) { + if parser.atEof { + return &Line{}, io.EOF + } // Parse out a single line lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { - return nil, err + if err != io.EOF { + return &Line{}, err + } + parser.atEof = true } parser.line++ line := string(lineBytes) @@ -97,17 +104,17 @@ func (parser *Parser) Next() (*Line, error) { // Check that there are 6 values, as defined by the pileup format values := strings.Split(line, "\t") if len(values) != 6 { - return nil, fmt.Errorf("Error on line %d: Got %d values, expected 6.", parser.line, len(values)) + return &Line{}, fmt.Errorf("Error on line %d: Got %d values, expected 6.", parser.line, len(values)) } // Convert Position and ReadCount to integers positionInteger, err := strconv.Atoi(strings.TrimSpace(values[1])) if err != nil { - return nil, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) + return &Line{}, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) } readCountInteger, err := strconv.Atoi(strings.TrimSpace(values[3])) if err != nil { - return nil, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) + return &Line{}, fmt.Errorf("Error on line %d. Got error: %w", parser.line, err) } // Parse ReadResults @@ -155,13 +162,13 @@ func (parser *Parser) Next() (*Line, error) { case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'T', 'G', 'C', 'N', 'a', 't', 'g', 'c', 'n', '-', '+': continue default: - return nil, fmt.Errorf("Rune within +,- not found on line %d. Got %c: only runes allowed are: [0 1 2 3 4 5 6 7 8 9 A T G C N a t g c n - +]", parser.line, letter) + return &Line{}, fmt.Errorf("Rune within +,- not found on line %d. Got %c: only runes allowed are: [0 1 2 3 4 5 6 7 8 9 A T G C N a t g c n - +]", parser.line, letter) } } readResults = append(readResults, readResult) skip = skip + regularExpressionInt + len(numberOfJumps) // The 1 makes sure to include the regularExpressionInt in readResult string default: - return nil, fmt.Errorf("Rune not found on line %d. Got %c: only runes allowed are: [^ $ . , * A T G C N a t g c n - +]", parser.line, resultRune) + return &Line{}, fmt.Errorf("Rune not found on line %d. Got %c: only runes allowed are: [^ $ . , * A T G C N a t g c n - +]", parser.line, resultRune) } readCount = readCount + 1 } diff --git a/bio/slow5/slow5.go b/bio/slow5/slow5.go index f74301bb..5a5d7ba9 100644 --- a/bio/slow5/slow5.go +++ b/bio/slow5/slow5.go @@ -213,7 +213,7 @@ func NewParser(r io.Reader, maxLineSize int) (*Parser, error) { // Next parses the next read from a parser. func (parser *Parser) Next() (*Read, error) { if parser.hitEOF { - return nil, io.EOF + return &Read{}, io.EOF } lineBytes, err := parser.reader.ReadSlice('\n') if err != nil { From 12a4b48e5b0fe46442729c70773849f13caff2aa Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 13 Sep 2023 22:20:37 -0700 Subject: [PATCH 30/59] fixed linter issues --- bio/bio.go | 28 ++-------------------------- bio/example_test.go | 28 ++++++++++++++++++++++++++++ bio/fastq/fastq.go | 6 +++--- bio/fastq/fastq_test.go | 4 ++-- bio/pileup/pileup.go | 6 +++--- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 6488c0d5..3240db03 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -266,35 +266,11 @@ func (p *Parser[Data, Header]) ParseToChannel(ctx context.Context, channel chan< } } -// ManyFastaToChannel takes a list of FASTA parsers and pipes all -// records/reads/lines to a single channel. -func ManyFastaToChannel(ctx context.Context, parsers []*Parser[*fasta.Record, *fasta.Header], channel chan<- *fasta.Record) error { - return manyToChannel[*fasta.Record, *fasta.Header](ctx, parsers, channel) -} - -// ManyFastqToChannel takes a list of FASTQ parsers and pipes all -// records/reads/lines to a single channel. -func ManyFastqToChannel(ctx context.Context, parsers []*Parser[*fastq.Read, *fastq.Header], channel chan<- *fastq.Read) error { - return manyToChannel[*fastq.Read, *fastq.Header](ctx, parsers, channel) -} - -// ManySlow5ToChannel takes a list of SLOW5 parsers and pipes all -// records/reads/lines to a single channel. -func ManySlow5ToChannel(ctx context.Context, parsers []*Parser[*slow5.Read, *slow5.Header], channel chan<- *slow5.Read) error { - return manyToChannel[*slow5.Read, *slow5.Header](ctx, parsers, channel) -} - -// ManyPileupToChannel takes a list of pileup parsers and pipes all -// records/reads/lines to a single channel. -func ManyPileupToChannel(ctx context.Context, parsers []*Parser[*pileup.Line, *pileup.Header], channel chan<- *pileup.Line) error { - return manyToChannel[*pileup.Line, *pileup.Header](ctx, parsers, channel) -} - -// manyToChannel is a generic function that implements the ManyXXXToChannel +// ManyToChannel is a generic function that implements the ManyXXXToChannel // functions. It properly does concurrent parsing of many parsers to a // single channel, then closes that channel. If any of the files fail to // parse, the entire pipeline exits and returns. -func manyToChannel[Data io.WriterTo, Header io.WriterTo](ctx context.Context, parsers []*Parser[Data, Header], channel chan<- Data) error { +func ManyToChannel[Data io.WriterTo, Header io.WriterTo](ctx context.Context, channel chan<- Data, parsers ...*Parser[Data, Header]) error { errorGroup, ctx := errgroup.WithContext(ctx) // For each parser, start a new goroutine to parse data to the channel for _, p := range parsers { diff --git a/bio/example_test.go b/bio/example_test.go index baf7e45e..5dc43638 100644 --- a/bio/example_test.go +++ b/bio/example_test.go @@ -107,6 +107,34 @@ DIDGDGQVNYEEFVQMMTAK*`) // Output: ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTIDFPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREADIDGDGQVNYEEFVQMMTAK* } +func ExampleManyToChannel() { + file1 := strings.NewReader(`>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] +LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV +EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG +LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL +GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX +IENY +`) + file2 := strings.NewReader(`>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken +ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID +FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA +DIDGDGQVNYEEFVQMMTAK*`) + parser1, _ := bio.NewFastaParser(file1) + parser2, _ := bio.NewFastaParser(file2) + + channel := make(chan *fasta.Record) + ctx := context.Background() + go func() { _ = bio.ManyToChannel(ctx, channel, parser1, parser2) }() + + var records []*fasta.Record + for record := range channel { + records = append(records, record) + } + + fmt.Println(len(records)) // Records come out in a stochastic order, so we just make sure there are 2 + // Output: 2 +} + func Example_writeAll() { // The following can be replaced with a any io.Reader. For example, // `file, err := os.Open(path)` for file would also work. diff --git a/bio/fastq/fastq.go b/bio/fastq/fastq.go index 45f92c25..c5ef5312 100644 --- a/bio/fastq/fastq.go +++ b/bio/fastq/fastq.go @@ -55,7 +55,7 @@ type Parser struct { // reader keeps state of current reader. reader bufio.Reader line uint - atEof bool + atEOF bool } // Header returns nil,nil. @@ -88,7 +88,7 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { // a line limit of 80 like fasta files have. So instead of a for loop, you // can just parse 4 lines at once. func (parser *Parser) Next() (*Read, error) { - if parser.atEof { + if parser.atEOF { return &Read{}, io.EOF } // Initialization of parser state variables. @@ -156,7 +156,7 @@ func (parser *Parser) Next() (*Read, error) { if err != io.EOF { return &Read{}, nil } - parser.atEof = true + parser.atEOF = true } if len(line) <= 1 { // newline delimiter - actually checking for empty line return &Read{}, fmt.Errorf("empty quality sequence for %q, got to line %d: %w", seqIdentifier, parser.line, err) diff --git a/bio/fastq/fastq_test.go b/bio/fastq/fastq_test.go index cbe3eb6b..223c7be0 100644 --- a/bio/fastq/fastq_test.go +++ b/bio/fastq/fastq_test.go @@ -38,8 +38,8 @@ GATGTGCGCCGTTCCAGTTGCGACGTACTATAATCCCCGGCAACACGGTGCTGATTCTCTTCCTGTTCCAGAAAGCATAA $$&%&%#$)*59;/767C378411,***,('11<;:,0039/0&()&'2(/*((4.1.09751).601+'#&&&,-**/0-+3558,/)+&)'&&%&$$'%'%'&*/5978<9;**'3*'&&A?99:;:97:278?=9B?CLJHGG=9<@AC@@=>?=>D>=3<>=>3362$%/((+/%&+//.-,%-4:+..000,&$#%$$%+*)&*0%.//*?<<;>DE>.8942&&//074&$033)*&&&%**)%)962133-%'&*99><<=1144??6.027639.011/-)($#$(/422*4;:=122>?@6964:.5'8:52)*675=:4@;323&&##'.-57*4597)+0&:7<7-550REGB21/0+*79/&/6538())+)+23665+(''$$$'-2(&&*-.-#$&%%$$,-)&$$#$'&,);; Date: Wed, 13 Sep 2023 22:26:06 -0700 Subject: [PATCH 31/59] handle EOF better --- bio/pileup/pileup.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bio/pileup/pileup.go b/bio/pileup/pileup.go index 4624feda..5e1aaff4 100644 --- a/bio/pileup/pileup.go +++ b/bio/pileup/pileup.go @@ -99,6 +99,13 @@ func (parser *Parser) Next() (*Line, error) { } parser.line++ line := string(lineBytes) + + // In this case, the file has ended on a newline. Just return + // with an io.EOF + if len(strings.TrimSpace(line)) == 0 && parser.atEOF { + return &Line{}, io.EOF + } + line = line[:len(line)-1] // Exclude newline delimiter. // Check that there are 6 values, as defined by the pileup format From f44721cd17a3a6b4fc4823d0a0d492687389cd39 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 13 Sep 2023 22:41:29 -0700 Subject: [PATCH 32/59] fixed tutorial --- tutorials/001_input_output_test.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tutorials/001_input_output_test.go b/tutorials/001_input_output_test.go index e9dc5ccb..08278295 100644 --- a/tutorials/001_input_output_test.go +++ b/tutorials/001_input_output_test.go @@ -7,6 +7,7 @@ import ( "path/filepath" "testing" + "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/bio/genbank" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -53,7 +54,10 @@ func TestFileIOTutorial(t *testing.T) { // backbone puc19. Plasmids are super small rings of "Circular DNA" that are // between 1 and 10 kilobases in length. - puc19, _ := genbank.Read("../data/puc19.gbk") + file, _ := os.Open("../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + puc19, _ := parser.Next() // A plasmid backbone is an empty template designed so that we // can easily insert genes into it to be expressed in our organism of choice. @@ -154,13 +158,18 @@ func TestFileIOTutorial(t *testing.T) { // write the modified plasmid to a GenBank file puc19Path := filepath.Join(tmpDataDir, "pUC19_modified.gb") - err = genbank.Write(puc19, puc19Path) + writeFile, _ := os.OpenFile(puc19Path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + defer writeFile.Close() + _, err = puc19.WriteTo(writeFile) if err != nil { t.Error(err) } // read the plasmid back in from the GenBank file and make sure it's the same as the original - puc19Copy, err := genbank.Read(puc19Path) + fileCopy, _ := os.Open(puc19Path) + defer fileCopy.Close() + parser2, _ := bio.NewGenbankParser(fileCopy) + puc19Copy, err := parser2.Next() if err != nil { t.Error(err) } @@ -173,7 +182,7 @@ func TestFileIOTutorial(t *testing.T) { // write the modified plasmid to a JSON file puc19JSONPath := filepath.Join(tmpDataDir, "pUC19_modified.json") - marshaledPuc19, err := json.MarshalIndent(puc19, "", " ") + marshaledPuc19, err := json.MarshalIndent(*puc19, "", " ") if err != nil { t.Error(err) } @@ -190,7 +199,7 @@ func TestFileIOTutorial(t *testing.T) { if err := json.Unmarshal(jsonContent, &unmarshaledPuc19); err != nil { t.Error(err) } - if diff := cmp.Diff(puc19, unmarshaledPuc19, []cmp.Option{cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(puc19, &unmarshaledPuc19, []cmp.Option{cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence")}...); diff != "" { t.Errorf("Parsing the JSON does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(puc19Path), diff) } From b192fda4fd8bd470e5adb72e48ddb7d6e5299486 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 13 Sep 2023 22:49:53 -0700 Subject: [PATCH 33/59] fix genbank read error --- seqhash/example_test.go | 9 ++++++-- seqhash/seqhash_test.go | 8 +++++-- synthesis/codon/codon_test.go | 41 ++++++++++++++++++++++++--------- synthesis/codon/example_test.go | 28 +++++++++++++++++----- 4 files changed, 65 insertions(+), 21 deletions(-) diff --git a/seqhash/example_test.go b/seqhash/example_test.go index 4f1cf002..718d8376 100644 --- a/seqhash/example_test.go +++ b/seqhash/example_test.go @@ -2,8 +2,9 @@ package seqhash_test import ( "fmt" + "os" - "github.com/TimothyStiles/poly/bio/genbank" + "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/seqhash" ) @@ -31,7 +32,11 @@ func ExampleHash() { } func ExampleRotateSequence() { - sequence, _ := genbank.Read("../data/puc19.gbk") + file, _ := os.Open("../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() + sequenceLength := len(sequence.Sequence) testSequence := sequence.Sequence[sequenceLength/2:] + sequence.Sequence[0:sequenceLength/2] diff --git a/seqhash/seqhash_test.go b/seqhash/seqhash_test.go index ee0a1de0..27da9535 100644 --- a/seqhash/seqhash_test.go +++ b/seqhash/seqhash_test.go @@ -3,9 +3,10 @@ package seqhash import ( "bytes" "fmt" + "os" "testing" - "github.com/TimothyStiles/poly/bio/genbank" + "github.com/TimothyStiles/poly/bio" "github.com/sergi/go-diff/diffmatchpatch" ) @@ -66,7 +67,10 @@ func TestHash(t *testing.T) { } func TestLeastRotation(t *testing.T) { - sequence, _ := genbank.Read("../data/puc19.gbk") + file, _ := os.Open("../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() var sequenceBuffer bytes.Buffer sequenceBuffer.WriteString(sequence.Sequence) diff --git a/synthesis/codon/codon_test.go b/synthesis/codon/codon_test.go index 383dd5ad..067e11a6 100644 --- a/synthesis/codon/codon_test.go +++ b/synthesis/codon/codon_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/TimothyStiles/poly/bio/genbank" + "github.com/TimothyStiles/poly/bio" "github.com/google/go-cmp/cmp" weightedRand "github.com/mroth/weightedrand" "github.com/stretchr/testify/assert" @@ -77,7 +77,11 @@ func TestTranslationLowerCase(t *testing.T) { func TestOptimize(t *testing.T) { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() + codonTable := GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -107,7 +111,10 @@ func TestOptimize(t *testing.T) { func TestOptimizeSameSeed(t *testing.T) { var gfpTranslation = "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - var sequence, _ = genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() var codonTable = GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -137,7 +144,10 @@ func TestOptimizeSameSeed(t *testing.T) { func TestOptimizeDifferentSeed(t *testing.T) { var gfpTranslation = "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - var sequence, _ = genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() var codonTable = GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -273,12 +283,12 @@ JSON related tests begin here. ******************************************************************************/ func TestWriteCodonJSON(t *testing.T) { - testCodonTable := ReadCodonJSON("../../data/bsub_codon_test.json") - WriteCodonJSON(testCodonTable, "../../data/codon_test1.json") - readTestCodonTable := ReadCodonJSON("../../data/codon_test1.json") + testCodonTable := ReadCodonJSON("../../../data/bsub_codon_test.json") + WriteCodonJSON(testCodonTable, "../../../data/codon_test1.json") + readTestCodonTable := ReadCodonJSON("../../../data/codon_test1.json") // cleaning up test data - os.Remove("../../data/codon_test1.json") + os.Remove("../../../data/codon_test1.json") if diff := cmp.Diff(testCodonTable, readTestCodonTable); diff != "" { t.Errorf(" mismatch (-want +got):\n%s", diff) @@ -293,7 +303,10 @@ Codon Compromise + Add related tests begin here. ***************************************************************************** */ func TestCompromiseCodonTable(t *testing.T) { - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() codonTable := GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -313,7 +326,10 @@ func TestCompromiseCodonTable(t *testing.T) { // weight our codon optimization table using the regions we collected from the genbank file above optimizationTable := codonTable.OptimizeTable(codingRegions) - sequence2, _ := genbank.Read("../../data/phix174.gb") + file2, _ := os.Open("../../data/phix174.gb") + defer file2.Close() + parser2, _ := bio.NewGenbankParser(file2) + sequence2, _ := parser2.Next() codonTable2 := GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -361,7 +377,10 @@ func TestCapitalizationRegression(t *testing.T) { // Tests to make sure that amino acids are capitalized gfpTranslation := "MaSKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() codonTable := GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions diff --git a/synthesis/codon/example_test.go b/synthesis/codon/example_test.go index f47d6e3d..b794289f 100644 --- a/synthesis/codon/example_test.go +++ b/synthesis/codon/example_test.go @@ -5,7 +5,7 @@ import ( "os" "strings" - "github.com/TimothyStiles/poly/bio/genbank" + "github.com/TimothyStiles/poly/bio" "github.com/TimothyStiles/poly/synthesis/codon" ) @@ -21,7 +21,10 @@ func ExampleTranslate() { func ExampleOptimize() { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() codonTable := codon.GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -99,7 +102,10 @@ func ExampleWriteCodonJSON() { } func ExampleCompromiseCodonTable() { - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() codonTable := codon.GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -119,7 +125,11 @@ func ExampleCompromiseCodonTable() { // weight our codon optimization table using the regions we collected from the genbank file above optimizationTable := codonTable.OptimizeTable(codingRegions) - sequence2, _ := genbank.Read("../../data/phix174.gb") + file2, _ := os.Open("../../data/phix174.gb") + defer file2.Close() + parser2, _ := bio.NewGenbankParser(file2) + sequence2, _ := parser2.Next() + codonTable2 := codon.GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions var codingRegionsBuilder2 strings.Builder @@ -150,7 +160,10 @@ func ExampleCompromiseCodonTable() { } func ExampleAddCodonTable() { - sequence, _ := genbank.Read("../../data/puc19.gbk") + file, _ := os.Open("../../data/puc19.gbk") + defer file.Close() + parser, _ := bio.NewGenbankParser(file) + sequence, _ := parser.Next() codonTable := codon.GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions @@ -170,7 +183,10 @@ func ExampleAddCodonTable() { // weight our codon optimization table using the regions we collected from the genbank file above optimizationTable := codonTable.OptimizeTable(codingRegions) - sequence2, _ := genbank.Read("../../data/phix174.gb") + file2, _ := os.Open("../../data/phix174.gb") + defer file2.Close() + parser2, _ := bio.NewGenbankParser(file2) + sequence2, _ := parser2.Next() codonTable2 := codon.GetCodonTable(11) // a string builder to build a single concatenated string of all coding regions From 3eab1f951f0a086e074c45aa9a2315e4fbeea8d6 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Wed, 13 Sep 2023 22:53:37 -0700 Subject: [PATCH 34/59] remove io.WriterTo checks --- bio/bio.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/bio/bio.go b/bio/bio.go index 3240db03..628e189b 100644 --- a/bio/bio.go +++ b/bio/bio.go @@ -74,18 +74,6 @@ type parserInterface[Data io.WriterTo, Header io.WriterTo] interface { Next() (Data, error) } -// The following checks that all Data and Headers implement the io.WriteTo interface. -var _ io.WriterTo = (*fasta.Record)(nil) -var _ io.WriterTo = (*fastq.Read)(nil) -var _ io.WriterTo = (*genbank.Genbank)(nil) -var _ io.WriterTo = (*slow5.Read)(nil) -var _ io.WriterTo = (*pileup.Line)(nil) -var _ io.WriterTo = (*fasta.Header)(nil) -var _ io.WriterTo = (*fastq.Header)(nil) -var _ io.WriterTo = (*genbank.Header)(nil) -var _ io.WriterTo = (*slow5.Header)(nil) -var _ io.WriterTo = (*pileup.Header)(nil) - /****************************************************************************** Higher level parse From 0edfd1c4db4c6b23a0f4f398276cbab8cea69e8c Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Sat, 16 Sep 2023 10:46:42 -0700 Subject: [PATCH 35/59] fix with cmp.Equal --- bio/slow5/slow5_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bio/slow5/slow5_test.go b/bio/slow5/slow5_test.go index eb2cad2f..0f7f1ed6 100644 --- a/bio/slow5/slow5_test.go +++ b/bio/slow5/slow5_test.go @@ -7,6 +7,8 @@ import ( "os" "strings" "testing" + + "github.com/google/go-cmp/cmp" ) const maxLineSize = 2 * 32 * 1024 @@ -247,10 +249,8 @@ func TestSvb(t *testing.T) { rawSignal := read.RawSignal mask, data := SvbCompressRawSignal(rawSignal) rawSignalDecompressed := SvbDecompressRawSignal(len(rawSignal), mask, data) - for idx := range rawSignal { - if rawSignal[idx] != rawSignalDecompressed[idx] { - t.Errorf("Read signal at readNum %d idx %d didn't match decompressed signal %d", readNum, rawSignal[idx], rawSignalDecompressed[idx]) - } + if !cmp.Equal(rawSignal, rawSignalDecompressed) { + t.Errorf("Read signal at readNum %d (%v) didn't match decompressed signal %v", readNum, rawSignal, rawSignalDecompressed) } } } From 4c61c225b5be58a4263900427cd8e8e7b4feb48f Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Sat, 28 Oct 2023 15:26:34 -0700 Subject: [PATCH 36/59] genbank tests merged --- bio/genbank/genbank.go | 84 +++- bio/genbank/genbank_test.go | 831 ++++++++++++++++++++++++++++++++++++ 2 files changed, 900 insertions(+), 15 deletions(-) create mode 100644 bio/genbank/genbank_test.go diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 3636ef96..260d8862 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -50,12 +50,19 @@ type Meta struct { Origin string `json:"origin"` Locus Locus `json:"locus"` References []Reference `json:"references"` + BaseCount []BaseCount `json:"base_count"` Other map[string]string `json:"other"` Name string `json:"name"` SequenceHash string `json:"sequence_hash"` SequenceHashFunction string `json:"hash_function"` } +// BaseCount is a struct that holds the base counts for a sequence. +type BaseCount struct { + Base string + Count int +} + // Feature holds the information for a feature in a Genbank file and other annotated sequence files. type Feature struct { Type string `json:"type"` @@ -319,6 +326,27 @@ func (sequence *Genbank) WriteTo(w io.Writer) (int64, error) { } } + // start writing base count + if len(sequence.Meta.BaseCount) > 0 { + newWrittenBytes, err = w.Write([]byte("BASE COUNT ")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + for _, baseCount := range sequence.Meta.BaseCount { + newWrittenBytes, err = w.Write([]byte(strconv.Itoa(baseCount.Count) + " " + baseCount.Base + " ")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + } + newWrittenBytes, err = w.Write([]byte("\n")) + writtenBytes += int64(newWrittenBytes) + if err != nil { + return writtenBytes, err + } + } + // start writing sequence section. newWrittenBytes, err = w.Write([]byte("ORIGIN\n")) writtenBytes += int64(newWrittenBytes) @@ -394,7 +422,7 @@ type parseLoopParameters struct { emptyAttribute bool sequenceBuilder strings.Builder parseStep string - genbank Genbank // since we are scanning lines we need a Genbank struct to store the data outside the loop.// since we are scanning lines we need a Genbank struct to store the data outside the loop. + genbank Genbank // since we are scanning lines we need a Genbank struct to store the data outside the loop. feature Feature features []Feature metadataTag string @@ -444,7 +472,7 @@ func NewParser(r io.Reader, maxLineSize int) *Parser { } } -// ParseMultiNth takes in a reader representing a multi gbk/gb/genbank file and parses the first n records into a slice of Genbank structs. +// Next takes in a reader representing a multi gbk/gb/genbank file and outputs the next record func (parser *Parser) Next() (*Genbank, error) { parser.parameters.init() // Loop through each line of the file @@ -494,7 +522,8 @@ func (parser *Parser) Next() (*Genbank, error) { case "SOURCE": parser.parameters.genbank.Meta.Source, parser.parameters.genbank.Meta.Organism, parser.parameters.genbank.Meta.Taxonomy = getSourceOrganism(parser.parameters.metadataData) case "REFERENCE": - reference, err := parseReferences(parser.parameters.metadataData) + // parseReferencesFn = parseReferences in genbank_test. We use Fn for testing purposes. + reference, err := parseReferencesFn(parser.parameters.metadataData) if err != nil { return &Genbank{}, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) } @@ -522,6 +551,23 @@ func (parser *Parser) Next() (*Genbank, error) { parser.parameters.metadataData = append(parser.parameters.metadataData, line) } case "features": + baseCountFlag := strings.Contains(line, "BASE COUNT") // example string for BASE COUNT: "BASE COUNT 67070277 a 48055043 c 48111528 g 67244164 t 18475410 n" + if baseCountFlag { + fields := strings.Fields(line) + for countIndex := 2; countIndex < len(fields)-1; countIndex += 2 { // starts at two because we don't want to include "BASE COUNT" in our fields + count, err := strconv.Atoi(fields[countIndex]) + if err != nil { + return &Genbank{}, err + } + + baseCount := BaseCount{ + Base: fields[countIndex+1], + Count: count, + } + parser.parameters.genbank.Meta.BaseCount = append(parser.parameters.genbank.Meta.BaseCount, baseCount) + } + break + } // Switch to sequence parsing originFlag := strings.Contains(line, "ORIGIN") // we detect the beginning of the sequence with "ORIGIN" @@ -880,26 +926,34 @@ func parseLocation(locationString string) (Location, error) { if strings.ContainsAny(expression, "(") { firstInnerParentheses := strings.Index(expression, "(") ParenthesesCount := 1 - comma := 0 - for i := 1; ParenthesesCount > 0; i++ { // "(" is at 0, so we start at 1 - comma = i - switch expression[firstInnerParentheses+i] { - case []byte("(")[0]: + prevSubLocationStart := 0 + for i := firstInnerParentheses + 1; i < len(expression); i++ { // "(" is at 0, so we start at 1 + switch expression[i] { + case '(': ParenthesesCount++ - case []byte(")")[0]: + case ')': ParenthesesCount-- + case ',': + if ParenthesesCount == 0 { + parsedSubLocation, err := parseLocation(expression[prevSubLocationStart:i]) + if err != nil { + return Location{}, err + } + parsedSubLocation.GbkLocationString = locationString + location.SubLocations = append(location.SubLocations, parsedSubLocation) + prevSubLocationStart = i + 1 + } } } - parseLeftLocation, err := parseLocation(expression[:firstInnerParentheses+comma+1]) - if err != nil { - return Location{}, err + if ParenthesesCount != 0 { + return Location{}, fmt.Errorf("Unbalanced parentheses") } - parseRightLocation, err := parseLocation(expression[2+firstInnerParentheses+comma:]) + parsedSubLocation, err := parseLocation(expression[prevSubLocationStart:]) if err != nil { return Location{}, err } - - location.SubLocations = append(location.SubLocations, parseLeftLocation, parseRightLocation) + parsedSubLocation.GbkLocationString = locationString + location.SubLocations = append(location.SubLocations, parsedSubLocation) } else { // This is the default join(x..x,x..x) for _, numberRange := range strings.Split(expression, ",") { joinLocation, err := parseLocation(numberRange) diff --git a/bio/genbank/genbank_test.go b/bio/genbank/genbank_test.go new file mode 100644 index 00000000..ca9ae3f7 --- /dev/null +++ b/bio/genbank/genbank_test.go @@ -0,0 +1,831 @@ +package genbank + +import ( + "bufio" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "testing" + + "reflect" + + "github.com/TimothyStiles/poly/transform" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/stretchr/testify/assert" +) + +/****************************************************************************** + +Gbk/gb/genbank related benchmarks begin here. + +******************************************************************************/ + +var ( + readFileFn = os.ReadFile + parseMultiNthFn = parseMultiNth + parseReferencesFn = parseReferences +) + +// read reads a GBK file from path and returns a Genbank struct. +func read(path string) (Genbank, error) { + genbankSlice, err := readMultiNth(path, 1) + if err != nil { + return Genbank{}, err + } + genbank := genbankSlice[0] + return genbank, err +} + +// readMulti reads a multi Gbk from path and parses it into a slice of Genbank structs. +func readMulti(path string) ([]Genbank, error) { + return readMultiNth(path, -1) +} + +// readMultiNth reads a multi Gbk from path and parses N entries into a slice of Genbank structs. +func readMultiNth(path string, count int) ([]Genbank, error) { + file, err := os.Open(path) + if err != nil { + return []Genbank{}, err + } + + sequence, err := parseMultiNthFn(file, count) + if err != nil { + return []Genbank{}, err + } + + return sequence, nil +} + +func parseMultiNth(r io.Reader, count int) ([]Genbank, error) { + parser := NewParser(r, bufio.MaxScanTokenSize) + var genbanks []Genbank + for i := 0; i < count; i++ { + gb, err := parser.Next() + if err != nil { + return genbanks, err + } + genbanks = append(genbanks, *gb) + } + return genbanks, nil +} + +func parse(r io.Reader) (Genbank, error) { + parser := NewParser(r, bufio.MaxScanTokenSize) + gb, err := parser.Next() + return *gb, err +} + +func write(gb Genbank, path string) error { + file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer file.Close() + _, err = gb.WriteTo(file) + return err +} + +func writeMulti(gbs []Genbank, path string) error { + file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer file.Close() + for _, gb := range gbs { + _, err = gb.WriteTo(file) + if err != nil { + return err + } + } + return nil +} + +/****************************************************************************** + +Gbk/gb/genbank related benchmarks begin here. + +******************************************************************************/ + +var singleGbkPaths = []string{ + "../../data/t4_intron.gb", + "../../data/puc19.gbk", + "../../data/puc19_snapgene.gb", + "../../data/benchling.gb", + "../../data/phix174.gb", + "../../data/sample.gbk", + // "../../data/pichia_chr1_head.gb", +} + +func TestGbkIO(t *testing.T) { + tmpDataDir, err := os.MkdirTemp("", "data-*") + if err != nil { + t.Error(err) + } + defer os.RemoveAll(tmpDataDir) + + // test single gbk read, write, build, parse + for _, gbkPath := range singleGbkPaths { + gbk, _ := read(gbkPath) + + tmpGbkFilePath := filepath.Join(tmpDataDir, filepath.Base(gbkPath)) + _ = write(gbk, tmpGbkFilePath) + + writeTestGbk, _ := read(tmpGbkFilePath) + if diff := cmp.Diff(gbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) + } + } // end test single gbk read, write, build, parse +} + +func TestMultiLineFeatureParse(t *testing.T) { + pichia, _ := read("../../data/pichia_chr1_head.gb") + var multilineOutput string + for _, feature := range pichia.Features { + multilineOutput = feature.Location.GbkLocationString + } + + if multilineOutput != "join(<459260..459456,459556..459637,459685..459739,459810..>460126)" { + t.Errorf("Failed to parse multiline genbank feature string") + } +} + +func TestMultiGenbankIO(t *testing.T) { + tmpDataDir, err := os.MkdirTemp("", "data-*") + if err != nil { + t.Error(err) + } + defer os.RemoveAll(tmpDataDir) + + // Test multiline Genbank features + gbkPath := "../../data/multiGbk_test.seq" + multiGbk, _ := readMulti(gbkPath) + tmpGbkFilePath := filepath.Join(tmpDataDir, filepath.Base(gbkPath)) + _ = writeMulti(multiGbk, tmpGbkFilePath) + + writeTestGbk, _ := readMulti(tmpGbkFilePath) + + if diff := cmp.Diff(multiGbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) + } +} + +func TestGbkLocationStringBuilder(t *testing.T) { + tmpDataDir, err := os.MkdirTemp("", "data-*") + if err != nil { + t.Error(err) + } + defer os.RemoveAll(tmpDataDir) + + scrubbedGbk, err := read("../../data/sample.gbk") + if err != nil { + t.Error(err) + } + + // removing gbkLocationString from features to allow testing for gbkLocationBuilder + for featureIndex := range scrubbedGbk.Features { + scrubbedGbk.Features[featureIndex].Location.GbkLocationString = "" + } + + tmpGbkFilePath := filepath.Join(tmpDataDir, "sample.gbk") + _ = write(scrubbedGbk, tmpGbkFilePath) + + testInputGbk, _ := read("../../data/sample.gbk") + testOutputGbk, _ := read(tmpGbkFilePath) + + if diff := cmp.Diff(testInputGbk, testOutputGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + t.Errorf("Issue with partial location building. Parsing the output of Build() does not produce the same output as parsing the original file read with read(). Got this diff:\n%s", diff) + } +} + +func TestGbLocationStringBuilder(t *testing.T) { + tmpDataDir, err := os.MkdirTemp("", "data-*") + if err != nil { + t.Error(err) + } + defer os.RemoveAll(tmpDataDir) + + scrubbedGb, _ := read("../../data/t4_intron.gb") + + // removing gbkLocationString from features to allow testing for gbkLocationBuilder + for featureIndex := range scrubbedGb.Features { + scrubbedGb.Features[featureIndex].Location.GbkLocationString = "" + } + + tmpGbFilePath := filepath.Join(tmpDataDir, "t4_intron_test.gb") + _ = write(scrubbedGb, tmpGbFilePath) + + testInputGb, _ := read("../../data/t4_intron.gb") + testOutputGb, _ := read(tmpGbFilePath) + + if diff := cmp.Diff(testInputGb, testOutputGb, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + t.Errorf("Issue with either Join or complement location building. Parsing the output of Build() does not produce the same output as parsing the original file read with read(). Got this diff:\n%s", diff) + } +} + +func TestPartialLocationParseRegression(t *testing.T) { + gbk, _ := read("../../data/sample.gbk") + + for _, feature := range gbk.Features { + if feature.Location.GbkLocationString == "687..3158>" && (feature.Location.Start != 686 || feature.Location.End != 3158) { + t.Errorf("Partial location for three prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with read()") + } + } + gbk, err := read("../../data/sample.gbk") + if err != nil { + t.Errorf("Failed to read sample.gbk. Got err: %s", err) + } + + for _, feature := range gbk.Features { + if feature.Location.GbkLocationString == "687..3158>" && (feature.Location.Start != 686 || feature.Location.End != 3158) { + t.Errorf("Partial location for three prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with read(). Got location start %d and location end %d. Expected 687..3158>.", feature.Location.Start, feature.Location.End) + } else if feature.Location.GbkLocationString == "<1..206" && (feature.Location.Start != 0 || feature.Location.End != 206) { + t.Errorf("Partial location for five prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with read().") + } + } +} + +func TestSubLocationStringParseRegression(t *testing.T) { + location := "join(complement(5306942..5307394),complement(5304401..5305029),complement(5303328..5303393),complement(5301928..5302004))" + parsedLocation, err := parseLocation(location) + if err != nil { + t.Errorf("Failed to parse location string. Got err: %s", err) + } + jsonFile, err := os.Open("../../data/parseLocationRegressionTest.json") + // if we os.Open returns an error then handle it + if err != nil { + fmt.Println(err) + } + defer jsonFile.Close() + + byteValue, _ := io.ReadAll(jsonFile) + var testParsedLocation Location + err = json.Unmarshal(byteValue, &testParsedLocation) + if err != nil { + t.Errorf("Failed to unmarshal json. Got err: %s", err) + } + + if diff := cmp.Diff(parsedLocation, testParsedLocation); diff != "" { + t.Errorf("Failed to parse sublocation string. Got this diff:\n%s", diff) + } +} + +func TestSnapgeneGenbankRegression(t *testing.T) { + snapgene, err := read("../../data/puc19_snapgene.gb") + + if snapgene.Sequence == "" { + t.Errorf("Parsing snapgene returned an empty string. Got error: %s", err) + } +} + +func TestGetSequenceMethod(t *testing.T) { + gbk, _ := read("../../data/t4_intron.gb") + + // Check to see if GetSequence method works on Features struct + feature, _ := gbk.Features[1].GetSequence() + seq := "atgagattacaacgccagagcatcaaagattcagaagttagaggtaaatggtattttaatatcatcggtaaagattctgaacttgttgaaaaagctgaacatcttttacgtgatatgggatgggaagatgaatgcgatggatgtcctctttatgaagacggagaaagcgcaggattttggatttaccattctgacgtcgagcagtttaaagctgattggaaaattgtgaaaaagtctgtttga" + if feature != seq { + t.Errorf("Feature GetSequence method has failed. Got this:\n%s instead of \n%s", feature, seq) + } +} + +func TestLocationParser(t *testing.T) { + gbk, _ := read("../../data/t4_intron.gb") + + // read 1..243 + feature, _ := gbk.Features[1].GetSequence() + seq := "atgagattacaacgccagagcatcaaagattcagaagttagaggtaaatggtattttaatatcatcggtaaagattctgaacttgttgaaaaagctgaacatcttttacgtgatatgggatgggaagatgaatgcgatggatgtcctctttatgaagacggagaaagcgcaggattttggatttaccattctgacgtcgagcagtttaaagctgattggaaaattgtgaaaaagtctgtttga" + if feature != seq { + t.Errorf("Feature sequence parser has changed on test '1..243'. Got this:\n%s instead of \n%s", feature, seq) + } + + // read join(893..1441,2459..2770) + featureJoin, _ := gbk.Features[6].GetSequence() + seqJoin := "atgaaacaataccaagatttaattaaagacatttttgaaaatggttatgaaaccgatgatcgtacaggcacaggaacaattgctctgttcggatctaaattacgctgggatttaactaaaggttttcctgcggtaacaactaagaagctcgcctggaaagcttgcattgctgagctaatatggtttttatcaggaagcacaaatgtcaatgatttacgattaattcaacacgattcgttaatccaaggcaaaacagtctgggatgaaaattacgaaaatcaagcaaaagatttaggataccatagcggtgaacttggtccaatttatggaaaacagtggcgtgattttggtggtgtagaccaaattatagaagttattgatcgtattaaaaaactgccaaatgataggcgtcaaattgtttctgcatggaatccagctgaacttaaatatatggcattaccgccttgtcatatgttctatcagtttaatgtgcgtaatggctatttggatttgcagtggtatcaacgctcagtagatgttttcttgggtctaccgtttaatattgcgtcatatgctacgttagttcatattgtagctaagatgtgtaatcttattccaggggatttgatattttctggtggtaatactcatatctatatgaatcacgtagaacaatgtaaagaaattttgaggcgtgaacctaaagagctttgtgagctggtaataagtggtctaccttataaattccgatatctttctactaaagaacaattaaaatatgttcttaaacttaggcctaaagatttcgttcttaacaactatgtatcacaccctcctattaaaggaaagatggcggtgtaa" + if featureJoin != seqJoin { + t.Errorf("Feature sequence parser has changed on test 'join(893..1441,2459..2770)'. Got this:\n%s instead of \n%s", featureJoin, seqJoin) + } + + // read complement(2791..3054) + featureComplement, _ := gbk.Features[10].GetSequence() + seqComplement := "ttattcactacccggcatagacggcccacgctggaataattcgtcatattgtttttccgttaaaacagtaatatcgtagtaacagtcagaagaagttttaactgtggaaattttattatcaaaatactcacgagtcattttatgagtatagtattttttaccataaatggtaataggctgttctggtcctggaacttctaactcgcttgggttaggaagtgtaaaaagaactacaccagaagtatctttaaatcgtaaaatcat" + if featureComplement != seqComplement { + t.Errorf("Feature sequence parser has changed on test 'complement(2791..3054)'. Got this:\n%s instead of \n%s", featureComplement, seqComplement) + } + + // read join(complement(315..330),complement(339..896)) + // Note: it is known that some software, like Snapgene, assumes that since both strands are in the reverse direction + // that the first sequence should be appended to the reverse sequence, instead of the second sequence + // getting appended to the first. Biopython appends the second sequence to the first, and that is logically + // the most obvious thing to do, so we are implementing it that way. + featureJoinComplement, _ := gbk.Features[3].GetSequence() + seqJoinComplement := "ataccaatttaatcattcatttatatactgattccgtaagggttgttacttcatctattttataccaatgcgtttcaaccatttcacgcttgcttatatcatcaagaaaacttgcgtctaattgaactgttgaattaacacgatgccttttaacgatgcgagaaacaactacttcatctgcataaggtaatgcagcatataacagagcaggcccgccaattacacttactttagaattctgatcaagcatagtttcgaatggtgcattagggcttgacacttgaatttcgccgccagaaatgtaagttatatattgctcccaagtaatatagaaatgtgctaaatcgccgtctttagttacaggataatcacgcgcaaggtcacacaccacaatatggctacgaccaggaagtaatgtaggcaatgactggaacgttttagcacccataatcataattgtgccttcagtacgagctttaaaattctggaggtcctttttaactcgtccccatggtaaaccatcacctaaaccgaatgctaattcattaaagccgtcgaccgttttagttggaga" + if featureJoinComplement != seqJoinComplement { + t.Errorf("Feature sequence parser has changed on test 'join(complement(315..330),complement(339..896))'. Got this:\n%s instead of \n%s", featureJoinComplement, seqJoinComplement) + } + + // read complement(join(893..1098,1101..2770)) + featureComplementJoin, _ := gbk.Features[5].GetSequence() + seqComplementJoin := "ttacaccgccatctttcctttaataggagggtgtgatacatagttgttaagaacgaaatctttaggcctaagtttaagaacatattttaattgttctttagtagaaagatatcggaatttataaggtagaccacttattaccagctcacaaagctctttaggttcacgcctcaaaatttctttacattgttctacgtgattcatatagatatgagtattaccaccagaaaatatcaaatcccctggaataagattacacatcttagctacaatatgaactaacgtagcatatgacgcaatattaaacggtagcattatgttcagataaggtcgttaatcttaccccggaattatatccagctgcatgtcaccatgcagagcagactatatctccaacttgttaaagcaagttgtctatcgtttcgagtcacttgaccctactccccaaagggatagtcgttaggcatttatgtagaaccaattccatttatcagattttacacgataagtaactaatccagacgaaattttaaaatgtctagctgcatctgctgcacaatcaaaaataaccccatcacatgaaatctttttaatattactaggctttttacctttcatcttttctgatattttagatttagttatgtctgaatgcttatgattaaagaatgaattattttcacctgaacgatttctgcatttactacaagtataagcagaagtttgtatgcgaacaccgcacttacaaaacttatgggtttctggattccaacgcccgtttttacttccgggtttactgtaaagagctttccgaccatcaggtccaagtttaagcatcttagctttaacagtttcagaacgtttcttaataatttcttcttttaatggatgcgtagaacatgtatcaccaaacgttgcatcagcaatattgtatccattaattttagaattaagctctttaatccaaaaattttctcgttcaataatcaaatctttctcatatggaatttcttccaaaatagaacattcaaacacattaccatgtttgttaaaagacctctgaagttttatagaagaatggcatcctttttctaaatctttaaaatgcctcttccatctcttttcaaaatctttagcacttcctacatatactttattgtttaaagtatttttaatctgataaattccgcttttcataaatacctctttaaatatagaagtatttattaaagggcaagtcctacaatttagcacgggattgtctactagagaggttccccgtttagatagattacaagtataagtcaccttatactcaggcctcaattaacccaagaaaacatctactgagcgttgataccactgcaaatccaaatagccattacgcacattaaactgatagaacatatgacaaggcggtaatgccatatatttaagttcagctggattccatgcagaaacaatttgacgcctatcatttggcagttttttaatacgatcaataacttctataatttggtctacaccaccaaaatcacgccactgttttccataaattggaccaagttcaccgctatggtatcctaaatcttttgcttgattttcgtaattttcatcccagactgttttgccttggattaacgaatcgtgttgaattaatcgtaaatcatacatttgtgcttcctgataaaaaccatattagctcagcaatgcaagctttccaggcgagcttcttagttgttaccgcaggaaaacctttagttaaatcccagcgtaatttagatccgaacagagcaattgttcctgtgcctgtacgatcatcggtttcataaccattttcaaaaatgtctttaattaaatcttggtattgtttcat" + if featureComplementJoin != seqComplementJoin { + t.Errorf("Feature sequence parser has changed on test 'complement(join(893..1098,1101..2770))'. Got this:\n%s instead of \n%s", featureComplementJoin, seqComplementJoin) + } +} + +func TestGenbankNewlineParsingRegression(t *testing.T) { + gbk, _ := read("../../data/puc19.gbk") + + for _, feature := range gbk.Features { + if feature.Location.Start == 410 && feature.Location.End == 1750 && feature.Type == "CDS" { + if feature.Attributes["product"] != "chromosomal replication initiator informational ATPase" { + t.Errorf("Newline parsing has failed.") + } + break + } + } +} + +func Benchmarkread(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _ = read("../../data/bsub.gbk") + } +} + +func Benchmarkread1(b *testing.B) { Benchmarkread(b) } +func Benchmarkread10(b *testing.B) { Benchmarkread(b) } +func Benchmarkread100(b *testing.B) { Benchmarkread(b) } +func Benchmarkread1000(b *testing.B) { Benchmarkread(b) } +func Benchmarkread10000(b *testing.B) { Benchmarkread(b) } + +/****************************************************************************** + +Gbk/gb/genbank related benchmarks end here. + +******************************************************************************/ + +func TestBenchlingGenbank(t *testing.T) { + sequence, _ := read("../../data/benchling.gb") + + if len(sequence.Features) != 17 { + t.Errorf("Parsing benchling genbank file not returned the correct quantity of features") + } +} + +// this was hand-written and tests the same as the above suite. +func TestFeature_GetSequence_Legacy(t *testing.T) { + // This test is a little too complex and contrived for an example function. + // Essentially, it's testing GetSequence()'s ability to parse and retrieve sequences from complex location structures. + // This was originally covered in the old package system it was not covered in the new package system so I decided to include it here. + + // Sequence for greenflourescent protein (GFP) that we're using as test data for this example. + gfpSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" + + sequenceLength := len(gfpSequence) + + // Splitting the sequence into two parts to make a multi-location feature. + sequenceFirstHalf := gfpSequence[:sequenceLength/2] + sequenceSecondHalf := transform.ReverseComplement(gfpSequence[sequenceLength/2:]) // This feature is reverse complemented. + + // rejoining the two halves into a single string where the second half of the sequence is reverse complemented. + gfpSequenceModified := sequenceFirstHalf + sequenceSecondHalf + + // initialize sequence and feature structs. + var sequence Genbank + var feature Feature + + // set the initialized sequence struct's sequence. + sequence.Sequence = gfpSequenceModified + // initialize sublocations to be usedin the feature. + + var subLocation Location + var subLocationReverseComplemented Location + + subLocation.Start = 0 + subLocation.End = sequenceLength / 2 + + subLocationReverseComplemented.Start = sequenceLength / 2 + subLocationReverseComplemented.End = sequenceLength + subLocationReverseComplemented.Complement = true // According to genbank complement means reverse complement. What a country. + + feature.Description = "Green Fluorescent Protein" + feature.Location.SubLocations = []Location{subLocation, subLocationReverseComplemented} + + // Add the GFP feature to the sequence struct. + _ = sequence.AddFeature(&feature) + + // get the GFP feature sequence string from the sequence struct. + featureSequence, _ := feature.GetSequence() + + // check to see if the feature was inserted properly into the sequence. + if gfpSequence != featureSequence { + t.Error("Feature sequence was not properly retrieved.") + } +} + +func Test_parseLoopParameters_init(t *testing.T) { + type fields struct { + newLocation bool + quoteActive bool + attribute string + attributeValue string + sequenceBuilder strings.Builder + parseStep string + genbank Genbank + feature Feature + features []Feature + metadataTag string + metadataData []string + genbankStarted bool + } + tests := []struct { + name string + fields fields + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + params := &parseLoopParameters{ + newLocation: tt.fields.newLocation, + attribute: tt.fields.attribute, + attributeValue: tt.fields.attributeValue, + sequenceBuilder: tt.fields.sequenceBuilder, + parseStep: tt.fields.parseStep, + genbank: tt.fields.genbank, + feature: tt.fields.feature, + features: tt.fields.features, + metadataTag: tt.fields.metadataTag, + metadataData: tt.fields.metadataData, + genbankStarted: tt.fields.genbankStarted, + } + params.init() + }) + } +} + +func TestParseMultiNth(t *testing.T) { + type args struct { + r io.Reader + count int + } + tests := []struct { + name string + args args + want []Genbank + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parseMultiNthFn(tt.args.r, tt.args.count) + if (err != nil) != tt.wantErr { + t.Errorf("ParseMultiNth() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("ParseMultiNth() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseMetadata(t *testing.T) { + type args struct { + metadataData []string + } + tests := []struct { + name string + args args + want string + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseMetadata(tt.args.metadataData); got != tt.want { + t.Errorf("parseMetadata() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseReferences(t *testing.T) { + type args struct { + metadataData []string + } + tests := []struct { + name string + args args + want Reference + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parseReferences(tt.args.metadataData) + if (err != nil) != tt.wantErr { + t.Errorf("parseReferences() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseReferences() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestReference_addKey(t *testing.T) { + type fields struct { + Authors string + Title string + Journal string + PubMed string + Remark string + Range string + } + type args struct { + referenceKey string + referenceValue string + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + reference := &Reference{ + Authors: tt.fields.Authors, + Title: tt.fields.Title, + Journal: tt.fields.Journal, + PubMed: tt.fields.PubMed, + Remark: tt.fields.Remark, + Range: tt.fields.Range, + } + if err := reference.addKey(tt.args.referenceKey, tt.args.referenceValue); (err != nil) != tt.wantErr { + t.Errorf("Reference.addKey() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_parseLocus(t *testing.T) { + type args struct { + locusString string + } + tests := []struct { + name string + args args + want Locus + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseLocus(tt.args.locusString); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseLocus() = %v, want %v", got, tt.want) + } + }) + } +} + +func Testread(t *testing.T) { + type args struct { + path string + } + tests := []struct { + name string + args args + want Genbank + wantErr bool + }{ + // TODO: Add test cases. + { + name: "error on missing file", + args: args{ + path: "../../afdaljhdfa.txt", + }, + wantErr: true, + }, + { + name: "error on malformed file", + args: args{ + path: "../../data/malformed_read_test.gbk", + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := read(tt.args.path) + if (err != nil) != tt.wantErr { + t.Errorf("read() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("read() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestreadMulti(t *testing.T) { + type args struct { + path string + } + tests := []struct { + name string + args args + want []Genbank + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := readMulti(tt.args.path) + if (err != nil) != tt.wantErr { + t.Errorf("readMulti() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("readMulti() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseLocation(t *testing.T) { + type args struct { + locationString string + } + tests := []struct { + name string + args args + want Location + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parseLocation(tt.args.locationString) + if (err != nil) != tt.wantErr { + t.Errorf("parseLocation() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseLocation() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_buildMetaString(t *testing.T) { + type args struct { + name string + data string + } + tests := []struct { + name string + args args + want string + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := buildMetaString(tt.args.name, tt.args.data); got != tt.want { + t.Errorf("buildMetaString() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestBuildLocationString(t *testing.T) { + type args struct { + location Location + } + tests := []struct { + name string + args args + want string + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := BuildLocationString(tt.args.location); got != tt.want { + t.Errorf("BuildLocationString() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_generateWhiteSpace(t *testing.T) { + type args struct { + length int + } + tests := []struct { + name string + args args + want string + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := generateWhiteSpace(tt.args.length); got != tt.want { + t.Errorf("generateWhiteSpace() = %v, want %v", got, tt.want) + } + }) + } +} + +func Testread_error(t *testing.T) { + readErr := errors.New("open /tmp/file: no such file or directory") + oldreadFileFn := readFileFn + readFileFn = func(filename string) ([]byte, error) { + return nil, readErr + } + defer func() { + readFileFn = oldreadFileFn + }() + _, err := read("/tmp/file") + assert.EqualError(t, err, readErr.Error()) +} + +func TestBuildFeatureString(t *testing.T) { + feature := Feature{ + Type: "test type", + Description: "a description", + Location: Location{ + GbkLocationString: "gbk location", + }, + } + str := BuildFeatureString(feature) + assert.Equal(t, str, " test type gbk location\n") +} + +func TestParse_error(t *testing.T) { + parseMultiErr := io.EOF + oldParseMultiNthFn := parseMultiNthFn + parseMultiNthFn = func(r io.Reader, count int) ([]Genbank, error) { + return nil, parseMultiErr + } + defer func() { + parseMultiNthFn = oldParseMultiNthFn + }() + _, err := parse(strings.NewReader("")) + assert.EqualError(t, err, parseMultiErr.Error()) + + _, err = parseMultiNth(strings.NewReader(""), 10000) + assert.EqualError(t, err, parseMultiErr.Error()) +} + +func TestParseReferences_error(t *testing.T) { + parseReferencesErr := errors.New("Failed in parsing reference above line 13. Got error: ") + oldParseReferencesFn := parseReferencesFn + parseReferencesFn = func(metadataData []string) (Reference, error) { + return Reference{}, errors.New("") + } + defer func() { + parseReferencesFn = oldParseReferencesFn + }() + file, _ := os.Open("../../data/puc19.gbk") + _, err := parseMultiNthFn(file, 1) + assert.EqualError(t, err, parseReferencesErr.Error()) +} + +func TestIssue303Regression(t *testing.T) { + seq, _ := read("../../data/puc19_303_regression.gbk") + expectedAttribute := "16S rRNA(adenine(1518)-N(6)/adenine(1519)-N(6))-dimethyltransferase" + for _, feature := range seq.Features { + if feature.Attributes["locus_tag"] == "JCVISYN3A_0004" && feature.Type == "CDS" { + if feature.Attributes["product"] != expectedAttribute { + t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes["product"], expectedAttribute) + } + } + if feature.Attributes["locus_tag"] == "JCVISYN3A_0051" && feature.Type == "CDS" { + if _, ok := feature.Attributes["pseudo"]; !ok { + t.Errorf("pseudo should be in attributes") + } + } + } +} + +func TestConsortiumRegression(t *testing.T) { + _, err := read("../../data/puc19_consrtm.gbk") + if err != nil { + t.Errorf("Failed to read consrtm. Got err: %s", err) + } +} From 1d23668d94ca61730d78ae2ab28d6f953e7ea90a Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Sat, 28 Oct 2023 15:28:55 -0700 Subject: [PATCH 37/59] sample merge --- data/sample.gbk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/sample.gbk b/data/sample.gbk index 5854e5d6..ad755cf4 100644 --- a/data/sample.gbk +++ b/data/sample.gbk @@ -77,6 +77,7 @@ FEATURES Location/Qualifiers KDDQIITETEVFDEFRSSLNSLIMHLEKLPKVNDDTITFEAVINAIELELGHKLDRNR RVDSLEEKAEIERDSNWVKCQEDENLPDNNGFQPPKIKLTSLVGSDVGPLIIHQFSEK LISGDDKILNGVYSQYEEGESIFGSLF" +BASE COUNT 67070277 a 48055043 c 48111528 g 67244164 t 18475410 n ORIGIN 1 gatcctccat atacaacggt atctccacct caggtttaga tctcaacaac ggaaccattg 61 ccgacatgag acagttaggt atcgtcgaga gttacaagct aaaacgagca gtagtcagct @@ -162,4 +163,4 @@ ORIGIN 4861 ttctccactt cactgtcgag ttgctcgttt ttagcggaca aagatttaat ctcgttttct 4921 ttttcagtgt tagattgctc taattctttg agctgttctc tcagctcctc atatttttct 4981 tgccatgact cagattctaa ttttaagcta ttcaatttct ctttgatc -// \ No newline at end of file +// From 956d26e573e3db666c3f47b1fe10863b1c694ece Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Sat, 28 Oct 2023 15:38:45 -0700 Subject: [PATCH 38/59] make linter happy --- bio/genbank/genbank.go | 90 ++++++++++++++++++++++++++++++ bio/genbank/genbank_test.go | 106 +++--------------------------------- 2 files changed, 99 insertions(+), 97 deletions(-) diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 2e32120d..55b3d61e 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -15,6 +15,7 @@ import ( "bytes" "fmt" "io" + "os" "regexp" "strconv" "strings" @@ -30,6 +31,12 @@ GBK specific IO related things begin here. ******************************************************************************/ +var ( + readFileFn = os.ReadFile + parseMultiNthFn = parseMultiNth + parseReferencesFn = parseReferences +) + // Genbank is the main struct for the Genbank file format. type Genbank struct { Meta Meta @@ -1079,3 +1086,86 @@ func generateWhiteSpace(length int) string { GBK specific IO related things end here. ******************************************************************************/ + +/****************************************************************************** + +Old functions for testing here. + +We used to have integrated read files, before we had the generic parser +interface. These are still here because of the need to switch over our tests. + +******************************************************************************/ + +// read reads a GBK file from path and returns a Genbank struct. +func read(path string) (Genbank, error) { + genbankSlice, err := readMultiNth(path, 1) + if err != nil { + return Genbank{}, err + } + genbank := genbankSlice[0] + return genbank, err +} + +// readMulti reads a multi Gbk from path and parses it into a slice of Genbank structs. +func readMulti(path string) ([]Genbank, error) { + return readMultiNth(path, -1) +} + +// readMultiNth reads a multi Gbk from path and parses N entries into a slice of Genbank structs. +func readMultiNth(path string, count int) ([]Genbank, error) { + file, err := os.Open(path) + if err != nil { + return []Genbank{}, err + } + + sequence, err := parseMultiNthFn(file, count) + if err != nil { + return []Genbank{}, err + } + + return sequence, nil +} + +func parseMultiNth(r io.Reader, count int) ([]Genbank, error) { + parser := NewParser(r, bufio.MaxScanTokenSize) + var genbanks []Genbank + for i := 0; i < count; i++ { + gb, err := parser.Next() + if err != nil { + return genbanks, err + } + genbanks = append(genbanks, *gb) + } + return genbanks, nil +} + +func parse(r io.Reader) (Genbank, error) { + parser := NewParser(r, bufio.MaxScanTokenSize) + gb, err := parser.Next() + return *gb, err +} + +func write(gb Genbank, path string) error { + file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer file.Close() + _, err = gb.WriteTo(file) + return err +} + +func writeMulti(gbs []Genbank, path string) error { + file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer file.Close() + for _, gb := range gbs { + _, err = gb.WriteTo(file) + if err != nil { + return err + } + } + return nil +} diff --git a/bio/genbank/genbank_test.go b/bio/genbank/genbank_test.go index ca9ae3f7..c74ed9ad 100644 --- a/bio/genbank/genbank_test.go +++ b/bio/genbank/genbank_test.go @@ -1,7 +1,6 @@ package genbank import ( - "bufio" "encoding/json" "errors" "fmt" @@ -25,92 +24,6 @@ Gbk/gb/genbank related benchmarks begin here. ******************************************************************************/ -var ( - readFileFn = os.ReadFile - parseMultiNthFn = parseMultiNth - parseReferencesFn = parseReferences -) - -// read reads a GBK file from path and returns a Genbank struct. -func read(path string) (Genbank, error) { - genbankSlice, err := readMultiNth(path, 1) - if err != nil { - return Genbank{}, err - } - genbank := genbankSlice[0] - return genbank, err -} - -// readMulti reads a multi Gbk from path and parses it into a slice of Genbank structs. -func readMulti(path string) ([]Genbank, error) { - return readMultiNth(path, -1) -} - -// readMultiNth reads a multi Gbk from path and parses N entries into a slice of Genbank structs. -func readMultiNth(path string, count int) ([]Genbank, error) { - file, err := os.Open(path) - if err != nil { - return []Genbank{}, err - } - - sequence, err := parseMultiNthFn(file, count) - if err != nil { - return []Genbank{}, err - } - - return sequence, nil -} - -func parseMultiNth(r io.Reader, count int) ([]Genbank, error) { - parser := NewParser(r, bufio.MaxScanTokenSize) - var genbanks []Genbank - for i := 0; i < count; i++ { - gb, err := parser.Next() - if err != nil { - return genbanks, err - } - genbanks = append(genbanks, *gb) - } - return genbanks, nil -} - -func parse(r io.Reader) (Genbank, error) { - parser := NewParser(r, bufio.MaxScanTokenSize) - gb, err := parser.Next() - return *gb, err -} - -func write(gb Genbank, path string) error { - file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return err - } - defer file.Close() - _, err = gb.WriteTo(file) - return err -} - -func writeMulti(gbs []Genbank, path string) error { - file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return err - } - defer file.Close() - for _, gb := range gbs { - _, err = gb.WriteTo(file) - if err != nil { - return err - } - } - return nil -} - -/****************************************************************************** - -Gbk/gb/genbank related benchmarks begin here. - -******************************************************************************/ - var singleGbkPaths = []string{ "../../data/t4_intron.gb", "../../data/puc19.gbk", @@ -349,17 +262,17 @@ func TestGenbankNewlineParsingRegression(t *testing.T) { } } -func Benchmarkread(b *testing.B) { +func BenchmarkRead(b *testing.B) { for i := 0; i < b.N; i++ { _, _ = read("../../data/bsub.gbk") } } -func Benchmarkread1(b *testing.B) { Benchmarkread(b) } -func Benchmarkread10(b *testing.B) { Benchmarkread(b) } -func Benchmarkread100(b *testing.B) { Benchmarkread(b) } -func Benchmarkread1000(b *testing.B) { Benchmarkread(b) } -func Benchmarkread10000(b *testing.B) { Benchmarkread(b) } +func BenchmarkRead1(b *testing.B) { BenchmarkRead(b) } +func BenchmarkRead10(b *testing.B) { BenchmarkRead(b) } +func BenchmarkRead100(b *testing.B) { BenchmarkRead(b) } +func BenchmarkRead1000(b *testing.B) { BenchmarkRead(b) } +func BenchmarkRead10000(b *testing.B) { BenchmarkRead(b) } /****************************************************************************** @@ -429,7 +342,6 @@ func TestFeature_GetSequence_Legacy(t *testing.T) { func Test_parseLoopParameters_init(t *testing.T) { type fields struct { newLocation bool - quoteActive bool attribute string attributeValue string sequenceBuilder strings.Builder @@ -598,7 +510,7 @@ func Test_parseLocus(t *testing.T) { } } -func Testread(t *testing.T) { +func TestRead(t *testing.T) { type args struct { path string } @@ -638,7 +550,7 @@ func Testread(t *testing.T) { } } -func TestreadMulti(t *testing.T) { +func TestReadMulti(t *testing.T) { type args struct { path string } @@ -751,7 +663,7 @@ func Test_generateWhiteSpace(t *testing.T) { } } -func Testread_error(t *testing.T) { +func TestRead_error(t *testing.T) { readErr := errors.New("open /tmp/file: no such file or directory") oldreadFileFn := readFileFn readFileFn = func(filename string) ([]byte, error) { From 158fcf1734877ef77cb6e683fb4991dd6eb9e201 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 02:52:53 -0700 Subject: [PATCH 39/59] Added generic collections module --- go.mod | 2 ++ go.sum | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/go.mod b/go.mod index 41892465..acc7d7dd 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,9 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/mattn/go-sqlite3 v1.14.13 // indirect + github.com/segmentio/fasthash v1.0.3 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/zyedidia/generic v1.2.1 // indirect ) require ( diff --git a/go.sum b/go.sum index d47c80d5..3d6532e9 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6 github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= +github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= @@ -27,6 +29,8 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XDc= +github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 8862a6c6b25d08ff0195f99de00cd1225f238f84 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 02:53:38 -0700 Subject: [PATCH 40/59] Switched Feature.Attributes to use multimap --- io/genbank/genbank.go | 110 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 94 insertions(+), 16 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 468e17cf..f053c429 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -19,10 +19,12 @@ import ( "regexp" "strconv" "strings" + "encoding/json" "github.com/TimothyStiles/poly/transform" "github.com/lunny/log" "github.com/mitchellh/go-wordwrap" + "github.com/zyedidia/generic/multimap" ) /****************************************************************************** @@ -66,14 +68,24 @@ type Meta struct { // Feature holds the information for a feature in a Genbank file and other annotated sequence files. type Feature struct { + Type string + Description string + Attributes multimap.MultiMap[string, string] + SequenceHash string + SequenceHashFunction string + Sequence string + Location Location + ParentSequence *Genbank +} + +type FeatureJSON struct { Type string `json:"type"` Description string `json:"description"` - Attributes map[string]string `json:"attributes"` + Attributes map[string][]string `json:"attributes"` SequenceHash string `json:"sequence_hash"` SequenceHashFunction string `json:"hash_function"` Sequence string `json:"sequence"` Location Location `json:"location"` - ParentSequence *Genbank `json:"-"` } // Reference holds information for one reference in a Meta struct. @@ -137,6 +149,43 @@ func (feature Feature) GetSequence() (string, error) { return getFeatureSequence(feature, feature.Location) } +func (feature Feature) MarshalJSON() ([]byte, error) { + attributes := make(map[string][]string) + feature.Attributes.EachAssociation(func (key string, values []string) { + attributes[key] = values + }) + return json.Marshal(FeatureJSON{ + Type: feature.Type, + Description: feature.Description, + Attributes: attributes, + SequenceHash: feature.SequenceHash, + SequenceHashFunction: feature.SequenceHashFunction, + Sequence: feature.Sequence, + Location: feature.Location, + }) +} + +// UnmarshalJSON implements the custom JSON unmarshaling for CustomStruct +func (feature *Feature) UnmarshalJSON(data []byte) error { + var aux FeatureJSON + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + feature.Type = aux.Type + feature.Description = aux.Description + feature.Attributes = multimap.NewMapSlice[string, string]() + for key, values := range aux.Attributes { + for _, value := range values { + feature.Attributes.Put(key, value) + } + } + feature.SequenceHash = aux.SequenceHash + feature.SequenceHashFunction = aux.SequenceHashFunction + feature.Sequence = aux.Sequence + feature.Location = aux.Location + return nil +} + // getFeatureSequence takes a feature and location object and returns a sequence string. func getFeatureSequence(feature Feature, location Location) (string, error) { var sequenceBuffer bytes.Buffer @@ -406,7 +455,7 @@ type parseLoopParameters struct { // method to init loop parameters func (params *parseLoopParameters) init() { params.newLocation = true - params.feature.Attributes = make(map[string]string) + params.feature.Attributes = multimap.NewMapSlice[string, string]() params.parseStep = "metadata" params.genbankStarted = false params.genbank.Meta.Other = make(map[string]string) @@ -522,12 +571,12 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { // save our completed attribute / qualifier string to the current feature if parameters.attributeValue != "" { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue + parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) parameters.features = append(parameters.features, parameters.feature) parameters.attributeValue = "" parameters.attribute = "" parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + parameters.feature.Attributes = multimap.NewMapSlice[string, string]() } else { parameters.features = append(parameters.features, parameters.feature) } @@ -557,12 +606,12 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { if countLeadingSpaces(parameters.currentLine) < countLeadingSpaces(parameters.prevline) || parameters.prevline == "FEATURES" { // save our completed attribute / qualifier string to the current feature if parameters.attributeValue != "" { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue + parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) parameters.features = append(parameters.features, parameters.feature) parameters.attributeValue = "" parameters.attribute = "" parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + parameters.feature.Attributes = multimap.NewMapSlice[string, string]() } // } @@ -572,7 +621,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } parameters.feature = Feature{} - parameters.feature.Attributes = make(map[string]string) + parameters.feature.Attributes = multimap.NewMapSlice[string, string]() // An initial feature line looks like this: `source 1..2686` with a type separated by its location if len(splitLine) < 2 { @@ -599,7 +648,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } // save our completed attribute / qualifier string to the current feature if parameters.attributeValue != "" || parameters.emptyAttribute { - parameters.feature.Attributes[parameters.attribute] = parameters.attributeValue + parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) parameters.emptyAttribute = false } parameters.attributeValue = "" @@ -1000,13 +1049,10 @@ func BuildFeatureString(feature Feature) string { featureHeader := generateWhiteSpace(subMetaIndex) + feature.Type + whiteSpaceTrail + location + "\n" returnString := featureHeader - qualifierKeys := make([]string, 0, len(feature.Attributes)) - for key := range feature.Attributes { - qualifierKeys = append(qualifierKeys, key) - } - - for _, qualifier := range qualifierKeys { - returnString += generateWhiteSpace(qualifierIndex) + "/" + qualifier + "=\"" + feature.Attributes[qualifier] + "\"\n" + if feature.Attributes != nil { + feature.Attributes.Each(func (key string, value string) { + returnString += generateWhiteSpace(qualifierIndex) + "/" + key + "=\"" + value + "\"\n" + }) } return returnString } @@ -1026,3 +1072,35 @@ func generateWhiteSpace(length int) string { GBK specific IO related things end here. ******************************************************************************/ + +// utility functions when comparing Feature.Attributes +func EqualMultiMaps(this, other multimap.MultiMap[string, string]) bool { + if this.Size() != other.Size() { + return false + } + var allEqual bool = true + this.EachAssociation(func (key string, values []string) { + allEqual = allEqual && EqualSlices(values, other.Get(key)) + }) + if !allEqual { + return false + } + other.EachAssociation(func (key string, values []string) { + allEqual = allEqual && EqualSlices(values, this.Get(key)) + }) + return allEqual +} + +func EqualSlices[V comparable](this, other []V) bool { + if this == nil && other == nil { + return true + } else if this == nil || other == nil { + return false + } + for i, v := range this { + if v != other[i] { + return false + } + } + return true +} \ No newline at end of file From ef07e94b355ec4ae25a12e84941fe6df4e81669f Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 02:53:48 -0700 Subject: [PATCH 41/59] Fixed tests --- io/genbank/example_test.go | 4 ++-- io/genbank/genbank_test.go | 27 +++++++++++++++++---------- tutorials/001_input_output_test.go | 11 +++++++++-- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/io/genbank/example_test.go b/io/genbank/example_test.go index 0bc8433e..fac0c2d2 100644 --- a/io/genbank/example_test.go +++ b/io/genbank/example_test.go @@ -14,8 +14,8 @@ import ( func Example_basic() { sequences, _ := genbank.Read("../../data/puc19.gbk") for _, feature := range sequences.Features { - if feature.Attributes["gene"] == "bla" { - fmt.Println(feature.Attributes["note"]) + if feature.Type == "CDS" && feature.Attributes.Has("gene") && feature.Attributes.Get("gene")[0] == "bla" { + fmt.Println(feature.Attributes.Get("note")[0]) } } // Output: confers resistance to ampicillin, carbenicillin, andrelated antibiotics diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index 9466c6b1..7a29240f 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -34,6 +34,13 @@ var singleGbkPaths = []string{ // "../../data/pichia_chr1_head.gb", } +func CmpOptions() []cmp.Option { + return []cmp.Option{ + cmpopts.IgnoreFields(Feature{}, "ParentSequence"), + cmp.Comparer(EqualMultiMaps), + } +} + func TestGbkIO(t *testing.T) { tmpDataDir, err := os.MkdirTemp("", "data-*") if err != nil { @@ -49,7 +56,7 @@ func TestGbkIO(t *testing.T) { _ = Write(gbk, tmpGbkFilePath) writeTestGbk, _ := Read(tmpGbkFilePath) - if diff := cmp.Diff(gbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(gbk, writeTestGbk, CmpOptions()...); diff != "" { t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) } } // end test single gbk read, write, build, parse @@ -82,7 +89,7 @@ func TestMultiGenbankIO(t *testing.T) { writeTestGbk, _ := ReadMulti(tmpGbkFilePath) - if diff := cmp.Diff(multiGbk, writeTestGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(multiGbk, writeTestGbk, CmpOptions()...); diff != "" { t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(gbkPath), diff) } } @@ -110,7 +117,7 @@ func TestGbkLocationStringBuilder(t *testing.T) { testInputGbk, _ := Read("../../data/sample.gbk") testOutputGbk, _ := Read(tmpGbkFilePath) - if diff := cmp.Diff(testInputGbk, testOutputGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(testInputGbk, testOutputGbk, CmpOptions()...); diff != "" { t.Errorf("Issue with partial location building. Parsing the output of Build() does not produce the same output as parsing the original file read with Read(). Got this diff:\n%s", diff) } } @@ -135,7 +142,7 @@ func TestGbLocationStringBuilder(t *testing.T) { testInputGb, _ := Read("../../data/t4_intron.gb") testOutputGb, _ := Read(tmpGbFilePath) - if diff := cmp.Diff(testInputGb, testOutputGb, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(testInputGb, testOutputGb, CmpOptions()...); diff != "" { t.Errorf("Issue with either Join or complement location building. Parsing the output of Build() does not produce the same output as parsing the original file read with Read(). Got this diff:\n%s", diff) } } @@ -254,7 +261,7 @@ func TestGenbankNewlineParsingRegression(t *testing.T) { for _, feature := range gbk.Features { if feature.Location.Start == 410 && feature.Location.End == 1750 && feature.Type == "CDS" { - if feature.Attributes["product"] != "chromosomal replication initiator informational ATPase" { + if feature.Attributes.Get("product")[0] != "chromosomal replication initiator informational ATPase" { t.Errorf("Newline parsing has failed.") } break @@ -783,13 +790,13 @@ func TestIssue303Regression(t *testing.T) { seq, _ := Read("../../data/puc19_303_regression.gbk") expectedAttribute := "16S rRNA(adenine(1518)-N(6)/adenine(1519)-N(6))-dimethyltransferase" for _, feature := range seq.Features { - if feature.Attributes["locus_tag"] == "JCVISYN3A_0004" && feature.Type == "CDS" { - if feature.Attributes["product"] != expectedAttribute { - t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes["product"], expectedAttribute) + if feature.Attributes.Has("locus_tag") && feature.Attributes.Get("locus_tag")[0] == "JCVISYN3A_0004" && feature.Type == "CDS" { + if feature.Attributes.Get("product")[0] != expectedAttribute { + t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes.Get("product")[0], expectedAttribute) } } - if feature.Attributes["locus_tag"] == "JCVISYN3A_0051" && feature.Type == "CDS" { - if _, ok := feature.Attributes["pseudo"]; !ok { + if feature.Attributes.Has("locus_tag") && feature.Attributes.Get("locus_tag")[0] == "JCVISYN3A_0051" && feature.Type == "CDS" { + if ok := feature.Attributes.Has("pseudo"); !ok { t.Errorf("pseudo should be in attributes") } } diff --git a/tutorials/001_input_output_test.go b/tutorials/001_input_output_test.go index c44eee48..cbb9c5e2 100644 --- a/tutorials/001_input_output_test.go +++ b/tutorials/001_input_output_test.go @@ -46,6 +46,13 @@ TTFN, Tim ******************************************************************************/ +func CmpOptions() []cmp.Option { + return []cmp.Option{ + cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence"), + cmp.Comparer(genbank.EqualMultiMaps), + } +} + // if you're using VS-CODE you should see a DEBUG TEST button right below this // comment. Please set break points and use it early and often. func TestFileIOTutorial(t *testing.T) { @@ -167,7 +174,7 @@ func TestFileIOTutorial(t *testing.T) { // compare our read-in plasmid to the the one we wrote out. // Ignore ParentSequence as that's a pointer which can't be serialized. - if diff := cmp.Diff(puc19, puc19Copy, []cmp.Option{cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(puc19, puc19Copy, CmpOptions()...); diff != "" { t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(puc19Path), diff) } @@ -190,7 +197,7 @@ func TestFileIOTutorial(t *testing.T) { if err := json.Unmarshal(jsonContent, &unmarshaledPuc19); err != nil { t.Error(err) } - if diff := cmp.Diff(puc19, unmarshaledPuc19, []cmp.Option{cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence")}...); diff != "" { + if diff := cmp.Diff(puc19, unmarshaledPuc19, CmpOptions()...); diff != "" { t.Errorf("Parsing the JSON does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(puc19Path), diff) } From cac1e554b8c2452db94b32421f029281165ec649 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 03:14:36 -0700 Subject: [PATCH 42/59] Ran linter --- CONTRIBUTING.md | 12 ++++++++++++ io/genbank/genbank.go | 38 +++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d4bcb86..b29dc2a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -93,6 +93,18 @@ In order to simplify the development experience, and environment setup, the poly Whether you're a beginner with Go or you're an experienced developer, You should see the suggestions popup automatically when you goto the *Plugins* tab in VSCode. Using these plugins can help accelerate the development experience and also allow you to work more collaboratively with other poly developers. +## Local Checks + +Poly runs numerous CI/CD checks via Github Actions before a PR can be merged. In order to make your PR mergeable, your PR must pass all of these checks. + +A quick way to check your PR will pass is to run: + +```sh +gofmt -s -w . && go test ./... +``` + +Additionally, you may want to [install](https://golangci-lint.run/usage/install/#local-installation) and run the linter. + # How to report a bug ### Security disclosures diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index f053c429..59070926 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -13,13 +13,13 @@ package genbank import ( "bufio" "bytes" + "encoding/json" "fmt" "io" "os" "regexp" "strconv" "strings" - "encoding/json" "github.com/TimothyStiles/poly/transform" "github.com/lunny/log" @@ -79,13 +79,13 @@ type Feature struct { } type FeatureJSON struct { - Type string `json:"type"` - Description string `json:"description"` + Type string `json:"type"` + Description string `json:"description"` Attributes map[string][]string `json:"attributes"` - SequenceHash string `json:"sequence_hash"` - SequenceHashFunction string `json:"hash_function"` - Sequence string `json:"sequence"` - Location Location `json:"location"` + SequenceHash string `json:"sequence_hash"` + SequenceHashFunction string `json:"hash_function"` + Sequence string `json:"sequence"` + Location Location `json:"location"` } // Reference holds information for one reference in a Meta struct. @@ -151,17 +151,17 @@ func (feature Feature) GetSequence() (string, error) { func (feature Feature) MarshalJSON() ([]byte, error) { attributes := make(map[string][]string) - feature.Attributes.EachAssociation(func (key string, values []string) { + feature.Attributes.EachAssociation(func(key string, values []string) { attributes[key] = values }) return json.Marshal(FeatureJSON{ - Type: feature.Type, - Description: feature.Description, - Attributes: attributes, - SequenceHash: feature.SequenceHash, + Type: feature.Type, + Description: feature.Description, + Attributes: attributes, + SequenceHash: feature.SequenceHash, SequenceHashFunction: feature.SequenceHashFunction, - Sequence: feature.Sequence, - Location: feature.Location, + Sequence: feature.Sequence, + Location: feature.Location, }) } @@ -1050,7 +1050,7 @@ func BuildFeatureString(feature Feature) string { returnString := featureHeader if feature.Attributes != nil { - feature.Attributes.Each(func (key string, value string) { + feature.Attributes.Each(func(key string, value string) { returnString += generateWhiteSpace(qualifierIndex) + "/" + key + "=\"" + value + "\"\n" }) } @@ -1078,14 +1078,14 @@ func EqualMultiMaps(this, other multimap.MultiMap[string, string]) bool { if this.Size() != other.Size() { return false } - var allEqual bool = true - this.EachAssociation(func (key string, values []string) { + allEqual := true + this.EachAssociation(func(key string, values []string) { allEqual = allEqual && EqualSlices(values, other.Get(key)) }) if !allEqual { return false } - other.EachAssociation(func (key string, values []string) { + other.EachAssociation(func(key string, values []string) { allEqual = allEqual && EqualSlices(values, this.Get(key)) }) return allEqual @@ -1103,4 +1103,4 @@ func EqualSlices[V comparable](this, other []V) bool { } } return true -} \ No newline at end of file +} From 8025bc2dafda0f62bdae1279b3190b9d09836902 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 04:01:48 -0700 Subject: [PATCH 43/59] Added copy methods --- io/genbank/genbank.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 59070926..03dd9901 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -138,6 +138,11 @@ var ( ) // AddFeature adds a feature to a Genbank struct. +// NOTE: This method assumes feature is not referenced in another location +// as this only creates a shallow copy. +// If you intend to duplicate a feature from another Genbank and plan +// to modify in either location, it is reocmmended you first call feature.Copy() +// before passing as input to save yourself trouble. func (sequence *Genbank) AddFeature(feature *Feature) error { feature.ParentSequence = sequence sequence.Features = append(sequence.Features, *feature) @@ -186,6 +191,41 @@ func (feature *Feature) UnmarshalJSON(data []byte) error { return nil } +// Creates deep copy of Feature, which supports safe duplication +func (feature *Feature) Copy() Feature { + attributes = multimap.NewMapSlice[string, string]() + feature.Attributes.Each(func(key string, value string) { + attributes.Put(key, value) + }) + return Feature{ + Type: feature.Type, + Description: feature.Description, + Attributes: attributes, + SequenceHash: feature.SequenceHash, + SequenceHashFunction: feature.SequenceHashFunction, + Sequence: feature.Sequence, + Location: feature.Location.Copy(), + } +} + +// Creates deep copy of Location, which supports safe duplication +func (location *Location) Copy() Location { + sublocations := make([]Location, len(location.SubLocations)) + for i, s := range location.SubLocations { + sublocations[i] = location.SubLocations[i].Copy() + } + return Location{ + Start: location.Start, + End: location.End, + Complement: location.Complement, + Join: location.Join, + FivePrimePartial: location.FivePrimePartial, + ThreePrimePartial: location.ThreePrimePartial, + GbkLocationString: location.GbkLocationString, + SubLocations: sublocations, + } +} + // getFeatureSequence takes a feature and location object and returns a sequence string. func getFeatureSequence(feature Feature, location Location) (string, error) { var sequenceBuffer bytes.Buffer From 1f49f9dd746b607fe50fa12dc2513ed2cc41f5d8 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 07:05:29 -0700 Subject: [PATCH 44/59] Adds new functional test that addresses case where there is a partial on an implicit range, standardizes parse error format for clarity --- data/NC_001141.2.gb | 10207 +++++++++++++++++++++++++++++++++++ io/genbank/genbank.go | 88 +- io/genbank/genbank_test.go | 8 +- 3 files changed, 10263 insertions(+), 40 deletions(-) create mode 100644 data/NC_001141.2.gb diff --git a/data/NC_001141.2.gb b/data/NC_001141.2.gb new file mode 100644 index 00000000..19937f03 --- /dev/null +++ b/data/NC_001141.2.gb @@ -0,0 +1,10207 @@ +LOCUS NC_001141 439888 bp DNA linear CON 15-SEP-2023 +DEFINITION Saccharomyces cerevisiae S288C chromosome IX, complete sequence. +ACCESSION NC_001141 +VERSION NC_001141.2 +DBLINK BioProject: PRJNA128 + Assembly: GCF_000146045.2 +KEYWORDS RefSeq. +SOURCE Saccharomyces cerevisiae S288C + ORGANISM Saccharomyces cerevisiae S288C + Eukaryota; Fungi; Dikarya; Ascomycota; Saccharomycotina; + Saccharomycetes; Saccharomycetales; Saccharomycetaceae; + Saccharomyces. +REFERENCE 1 (bases 1 to 439888) + AUTHORS Engel,S.R., Wong,E.D., Nash,R.S., Aleksander,S., Alexander,M., + Douglass,E., Karra,K., Miyasato,S.R., Simison,M., Skrzypek,M.S., + Weng,S. and Cherry,J.M. + TITLE New data and collaborations at the Saccharomyces Genome Database: + updated reference genome, alleles, and the Alliance of Genome + Resources + JOURNAL Genetics 220 (4) (2022) + PUBMED 34897464 +REFERENCE 2 (bases 1 to 439888) + AUTHORS Churcher,C., Bowman,S., Badcock,K., Bankier,A., Brown,D., + Chillingworth,T., Connor,R., Devlin,K., Gentles,S., Hamlin,N., + Harris,D., Horsnell,T., Hunt,S., Jagels,K., Jones,M., Lye,G., + Moule,S., Odell,C., Pearson,D., Rajandream,M., Rice,P., Rowley,N., + Skelton,J., Smith,V., Barrell,B. et al. + TITLE The nucleotide sequence of Saccharomyces cerevisiae chromosome IX + JOURNAL Nature 387 (6632 SUPPL), 84-87 (1997) + PUBMED 9169870 +REFERENCE 3 (bases 1 to 439888) + AUTHORS Goffeau,A., Barrell,B.G., Bussey,H., Davis,R.W., Dujon,B., + Feldmann,H., Galibert,F., Hoheisel,J.D., Jacq,C., Johnston,M., + Louis,E.J., Mewes,H.W., Murakami,Y., Philippsen,P., Tettelin,H. and + Oliver,S.G. + TITLE Life with 6000 genes + JOURNAL Science 274 (5287), 546 (1996) + PUBMED 8849441 +REFERENCE 4 (bases 1 to 439888) + CONSRTM NCBI Genome Project + TITLE Direct Submission + JOURNAL Submitted (14-SEP-2023) National Center for Biotechnology + Information, NIH, Bethesda, MD 20894, USA +REFERENCE 5 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (04-MAY-2012) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA + REMARK Protein update by submitter +REFERENCE 6 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (31-MAR-2011) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA + REMARK Sequence update by submitter +REFERENCE 7 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (14-DEC-2009) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA +COMMENT REVIEWED REFSEQ: This record has been curated by SGD. The reference + sequence is identical to BK006942. + + On Apr 26, 2011 this sequence version replaced NC_001141.1. + + ##Genome-Annotation-Data-START## + Annotation Provider :: SGD + Annotation Status :: Full Annotation + Annotation Version :: R64-4-1 + URL :: http://www.yeastgenome.org/ + ##Genome-Annotation-Data-END## + COMPLETENESS: full length. +FEATURES Location/Qualifiers + source 1..439888 + /organism="Saccharomyces cerevisiae S288C" + /mol_type="genomic DNA" + /strain="S288C" + /db_xref="taxon:559292" + /chromosome="IX" + telomere complement(1..7784) + /note="TEL09L; Telomeric region on the left arm of + Chromosome IX; composed of an X element core sequence, X + element combinatorial repeats, a long Y' element, and a + short terminal stretch of telomeric repeats" + /db_xref="SGD:S000028896" + gene complement(<483..>6147) + /locus_tag="YIL177C" + /db_xref="GeneID:854630" + mRNA complement(join(<483..4598,4987..>6147)) + /locus_tag="YIL177C" + /product="Y' element ATP-dependent helicase" + /transcript_id="NM_001179522.1" + /db_xref="GeneID:854630" + CDS complement(join(483..4598,4987..6147)) + /locus_tag="YIL177C" + /EC_number="3.6.4.12" + /note="Putative Y' element ATP-dependent helicase" + /codon_start=1 + /product="Y' element ATP-dependent helicase" + /protein_id="NP_012092.1" + /db_xref="GeneID:854630" + /db_xref="SGD:S000001439" + /translation="MKVSDRRKFEKANFDEFESALNNKNDLVHCPSITLFESIPTEVR + SFYEDEKSGLIKVVKFRTGAMDRKRSFEKVVISVMVGKNVKKFLTFVEDEPDFQGGPI + PSKYLIPKKINLMVYTLFQVHTLKFNRKDYDTLSLFYLNRGYYNELSFRVLERCHEIA + SARPNDSSTMRTFTDFVSGAPIVRSLQKSTIRKYGYNLAPYMFLLLHVDELSIFSAYQ + ASLPGEKKVDTERLKRDLCPRKPIEIKYFSQICNDMMNKKDRLGDILHIILRACALNF + GAGPRGGAGDEEDRSITNEEPIIPSVDEHGLKVCKLRSPNTPRRLRKTLDAVKALLVS + SCACTARDLDIFDDNNGVAMWKWIKILYHEVAQETTLKDSYRITLVPSSDGISLLAFA + GPQRNVYVDDTTRRIQLYTDYNKNGSSEPRLKTLDGLTSDYVFYFVTVLRQMQICALG + NSYDAFNHDPWMDVVGFEDPNQVTNRDISRIVLYSYMFLNTAKGCLVEYATFRQYMRE + LPKNAPQKLNFREMRQGLIALGRHCVGSRFETDLYESATSELMANHSVQTGRNIYGVD + SFSLTSVSGTTATLLQERASERWIQWLGLESDYHCSFSSTRNAEDVVAGEAASSNHHQ + KISRVTRKRPREPKSTNDILVAGQKLFGSSFEFRDLHQLRLCYEIYMADTPSVAVQAP + PGYGKTELFHLPLIALASKGDVEYVSFLFVPYTVLLANCMIRLGRCGCLNVAPVRNFI + EEGYDGVTDLYVGIYDDLASTNFTDRIAAWENIVECTFRTNNVKLGYLIVDEFHNFET + EVYRQSQFGGITNLDFDAFEKAIFLSGTAPEAVADAALQRIGLTGLAKKSMDINELKR + SEDLSRGLSSYPTRMFNLIKEKSEVPLGHVHKIRKKVESQPEEALKLLLALFESEPES + KAIVVASTTNEVEELACSWRKYFRVVWIHGKLGAAEKVSRTKEFVTDGSMQVLIGTKL + VTEGIDIKQLMMVIMLDNRLNIIELIQGVGRLRDGGLCYLLSRKNSWAARNRKGELPP + IKEGCITEQVREFYGLESKKGKKGQHVGCCGSRTDLSADTVELIERMDRLAEKQATAS + MSIVALPSSFQESNSSDRYRKYCSSDEDSNTCIHGSANASTNASTNAITTASTNVRTN + ATTNASTNATTNASTNASTNATTNASTNATTNSSTNATTTASTNVRTSATTTASINVR + TSATTTESTNSSTNATTTESTNSSTNATTTESTNSNTSATTTASINVRTSATTTESTN + SSTSATTTASINVRTSATTTKSINSSTNATTTESTNSNTNATTTESTNSSTNATTTES + TNSSTNATTTESTNSNTSAATTESTNSNTSATTTESTNASAKEDANKDGNAEDNRFHP + VTDINKESYKRKGSQMVLLERKKLKAQFPNTSENMNVLQFLGFRSDEIKHLFLYGIDI + YFCPEGVFTQYGLCKGCQKMFELCVCWAGQKVSYRRIAWEALAVERMLRNDEEYKEYL + EDIEPYHGDPVGYLKYFSVKRREIYSQIQRNYAWYLAITRRRETISVLDSTRGKQGSQ + VFRMSGRQIKELYFKVWSNLRESKTEVLQYFLNWDEKKCQEEWEAKDDTVVVEALEKG + GVFQRLRSMTSAGLQGPQYVKLQFSRHHRQLRSRYELSLGMHLRDQIALGVTPSKVPH + WTAFLSMLIGLFYNKTFRQKLEYLLEQISEVWLLPHWLDLANVEVLAADDTRVPLYML + MVAVHKELDSDDVPDGRFDILLCRDSSREVGE" + rep_origin 7470..8793 + /note="ARS902; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130156" + gene complement(<8793..>9155) + /gene="PAU14" + /locus_tag="YIL176C" + /db_xref="GeneID:854631" + mRNA complement(<8793..>9155) + /gene="PAU14" + /locus_tag="YIL176C" + /product="seripauperin PAU14" + /transcript_id="NM_001179521.1" + /db_xref="GeneID:854631" + CDS complement(8793..9155) + /gene="PAU14" + /locus_tag="YIL176C" + /note="hypothetical protein; member of the seripauperin + multigene family encoded mainly in subtelomeric regions; + identical to Pau1p" + /codon_start=1 + /product="seripauperin PAU14" + /protein_id="NP_012093.1" + /db_xref="GeneID:854631" + /db_xref="SGD:S000001438" + /translation="MVKLTSIAAGVAAIAATASATTTLAQSDERVNLVELGVYVSDIR + AHLAQYYMFQAAHPTETYPVEVAEAVFNYGDFTTMLTGISPDQVTRMITGVPWYSSRL + KPAISSALSKDGIYTIAN" + gene 9183..9500 + /locus_tag="YIL175W" + /note="hypothetical protein; classified as pseudogene + because there is no ATG at the beginning of this ORF" + /pseudo + /db_xref="GeneID:854632" + /db_xref="SGD:S000001437" + mRNA 9183..9500 + /locus_tag="YIL175W" + /pseudo + /db_xref="GeneID:854632" + /db_xref="SGD:S000001437" + gene 9469..9696 + /locus_tag="YIL174W" + /note="hypothetical protein" + /pseudo + /db_xref="GeneID:854633" + /db_xref="SGD:S000001436" + mRNA 9469..9696 + /locus_tag="YIL174W" + /pseudo + /db_xref="GeneID:854633" + /db_xref="SGD:S000001436" + gene <11492..>16141 + /gene="VTH1" + /locus_tag="YIL173W" + /db_xref="GeneID:854634" + mRNA <11492..>16141 + /gene="VTH1" + /locus_tag="YIL173W" + /product="signal sequence-binding protein" + /transcript_id="NM_001179519.1" + /db_xref="GeneID:854634" + CDS 11492..16141 + /gene="VTH1" + /locus_tag="YIL173W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005768 endosome + [PMID:14562095]" + /experiment="EXISTENCE:genetic interaction:GO:0005048 + signal sequence binding [PMID:8662642]" + /experiment="EXISTENCE:genetic interaction:GO:0006896 + Golgi to vacuole transport [PMID:8662642]" + /note="Putative membrane glycoprotein; has strong + similarity to Vth2p and Pep1p/Vps10p; may be involved in + vacuolar protein sorting" + /codon_start=1 + /product="signal sequence-binding protein" + /protein_id="NP_012095.1" + /db_xref="GeneID:854634" + /db_xref="SGD:S000001435" + /translation="MALFRALYIIWVFLLIPLSNAEEFTPKVTRTLSRYVFDIVNFDD + SNTLIRAEEDSVEISFDAGENWKTIDEIEEPIESFVVDPFRGHDRAFAFVKTAPKFYV + TDDQGKSWRPLTIPISEKASNYFCDVTTHPIKKKHLIIRCDLLTIKNSGLMYVGREIY + TTNDGVSFSQVKPSFGKIDGHISTARCDFIKSSEDSDLGGNDASILCLFRNTEYIEST + GSTIDKSELILSADGGETFKELVQFKDKVVSRYEILKHHVIVLTQDDMYNEMSSTNIW + ISNDVSTFQVARTPTKIRHVNMGQIHEDSIGRIVLPVSRERDDEDSNQPGAAEVLISD + SEGLKFLPINWIPNNQFGYINVAYPGFLKGTFFGSFHPFIEYSDRKRKYSRQKVREET + KVSVDNGLTWTNLKVVDRENVDLFGCDVTKPERCSLQTHFYDLRNLNPSAGIMMISGI + VGDGSAYNWKEEKTFISRDSGLTWRLVHNSTGLYTTGDLGNIIMYIPYRSNENGDVPS + KFYYSLDQGKTWGEYDLIMPIYPYRLVSTISDGSGSKFILTGTSITEDPIFITYSIDF + SAVFDYKSCEEGDFEDWNLADGKCVNGAKYKYRRRKQDAQCLVKKAFKDLSLDETPCN + SCTGSDYECSFEFVRDAKGDCIPDYNLIALSDICDKSKGKSVLVKPLQLIKGDKCKTP + MKIESVDIPCDEIPKEGSSDKEIVTTENKFDFEIKFYQYFDTVADESLVMLNSIGDAY + ISHDGGQTIKRFDTDGEKIVEIVFNPYFNSSAYLFGSKGNIFLTHDRGYSFMIAKLPE + ARQLGMPLDFSAKAQDTFIYYGGKNCESILSPECHAVAYLTKDGGETFTEMLDNAIHC + EFAGTLFKYPSNDDMVMCQVKEKFSQTRSLVSSTDFFQDDRKTVFENIIGYLSTGGYI + IVAVPHEDNELRAYVTNDGAEFTEAKFPYDEDIGKQDAFTILGSEEGSIFLHLATNLE + SGHDFGNLLKSNSNGTSFVTLEHAVNRNTFGYVDFEKVQGLEGIIITNIVSNSEKVGE + NKEDEQLKTKITFNDGSDWNFLKPPKKDSEGKKFPCDSVSLDKCSLHLHGYTERKDIR + DTYSSGSALGMMFGVGNVGDRLLPYEECSTFLTTDGGETWTEVKKGPHQWEYGDHGGV + LVLVPENAETDSISYSTDFGKTWKDYKFCGDKVLVKDIITVPRDSALRFLLFGEAKNM + GSGSFRTYTIDFRNIFERQCEFDITGRKRADFKYSPLGSRTGCLFGHKTEFLRKTDEK + CFIGNIPLSEFSRNVKNCPCTRQDFECDYNFYKASDGTCKLVKGLSSANGADICKKEP + DLIEYYDSSGYRKIPLSTCKGGLKLDAHLAPHPCPGKEKAFREKYSINTGAYALVFVT + ILLVIFFVAWFVYDRGIRRNGGFSRFEEIRLGDDGLIENNRTDRVVNIIVRLGLCISL + ITKSAFQRAKAGTAQLSSKFRARFGNKKGATYSSLLHDQLSDEPDGFHEDSNDLSSFR + GQGSNSEIEQEDVDTSQQEHTLRTDLLGASNIPDALPARSASHESDLAAARSEDK" + rep_origin 16141..16784 + /note="ARS904; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130157" + gene complement(<16784..>18553) + /gene="IMA3" + /locus_tag="YIL172C" + /db_xref="GeneID:854635" + mRNA complement(<16784..>18553) + /gene="IMA3" + /locus_tag="YIL172C" + /product="oligo-1,6-glucosidase IMA3" + /transcript_id="NM_001179518.1" + /db_xref="GeneID:854635" + CDS complement(16784..18553) + /gene="IMA3" + /locus_tag="YIL172C" + /EC_number="3.2.1.10" + /experiment="EXISTENCE:direct assay:GO:0004574 + oligo-1,6-glucosidase activity [PMID:20471265]" + /experiment="EXISTENCE:direct assay:GO:0004575 sucrose + alpha-glucosidase activity [PMID:24649402]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:genetic interaction:GO:0046352 + disaccharide catabolic process + [PMID:20562106|PMID:20471265]" + /experiment="EXISTENCE:mutant phenotype:GO:0004574 + oligo-1,6-glucosidase activity [PMID:20562106]" + /note="Alpha-glucosidase; weak, but broad substrate + specificity for alpha-1,4- and alpha-1,6-glucosides; + member of IMA isomaltase family; not required for + isomaltose utilization, but Ima3p overexpression allows + the ima1 null mutant to grow on isomaltose; lower + activitiy and thermostability in vitro than Ima2p despite + sequence difference of only 3 amino acids; cleaves + alpha-1,3 linkage of nigerose and turanose, but not + alpha-1,5 of leucrose; identical to IMA4" + /codon_start=1 + /product="oligo-1,6-glucosidase IMA3" + /protein_id="NP_012096.1" + /db_xref="GeneID:854635" + /db_xref="SGD:S000001434" + /translation="MTISSAHPETEPKWWKEATIYQIYPASFKDSNNDGWGDMKGIAS + KLEYIKELGTDAIWISPFYDSPQDDMGYDIANYEKVWPTYGTNEDCFALIEKTHKLGM + KFITDLVINHCSSEHEWFKESRSSKTNPKRDWFFWRPPKGYDAEGKPIPPNNWRSYFG + GSAWTFDEKTQEFYLRLFCSTQPDLNWENEDCRKAIYESAVGYWLDHGVDGFRIDVGS + LYSKVAGLPDAPVIDENSKWQLSDPFTMNGPRIHEFHQEMNKFIRNRVKDGREIMTVG + EMRHATDETKRLYTSASRHELSELFNFSHTDVGTSPKFRQNLIPYELKDWKVALAELF + RYVNGTDCWSTIYLENHDQPRSITRFGDDSPKNRVISGKLLSVLLVSLSGTLYVYQGQ + ELGEINFKNWPIEKYEDVEVRNNYDAIKEEHGENSKEMKRFLEAIALISRDHARTPMQ + WSREEPNAGFSGPNAKPWFYLNESFREGINAEDESKDPNSVLNFWKEALRFRKAHKDI + TVYGYDFEFIDLDNKKLFSFTKKYDNKTLFAALNFSSDSIDFTIPNNSSSFKLEFGNY + PRSEVDASSRTLKPWEGRIYISE" + gene 19515..19844 + /locus_tag="YIL171W" + /gene_synonym="HXT12" + /note="Possible pseudogene in strain S288C; YIL171W and + the adjacent ORF, YIL170W/HXT12, together encode a + non-functional member of the hexose transporter family" + /pseudo + /db_xref="GeneID:2827704" + /db_xref="SGD:S000001433" + mRNA 19515..19844 + /locus_tag="YIL171W" + /gene_synonym="HXT12" + /pseudo + /db_xref="GeneID:2827704" + /db_xref="SGD:S000001433" + gene 19847..21220 + /gene="HXT12" + /locus_tag="YIL170W" + /note="Possible pseudogene in strain S288C; YIL170W/HXT12 + and the adjacent ORF, YIL171W, together encode a + non-functional member of the hexose transporter family" + /pseudo + /db_xref="GeneID:854636" + /db_xref="SGD:S000001432" + mRNA 19847..21220 + /gene="HXT12" + /locus_tag="YIL170W" + /pseudo + /db_xref="GeneID:854636" + /db_xref="SGD:S000001432" + gene complement(<23119..>26106) + /gene="CSS1" + /locus_tag="YIL169C" + /db_xref="GeneID:854637" + mRNA complement(<23119..>26106) + /gene="CSS1" + /locus_tag="YIL169C" + /product="Css1p" + /transcript_id="NM_001179517.1" + /db_xref="GeneID:854637" + CDS complement(23119..26106) + /gene="CSS1" + /locus_tag="YIL169C" + /experiment="EXISTENCE:direct assay:GO:0005576 + extracellular region [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /note="hypothetical protein, secreted when constitutively + expressed; SWAT-GFP, seamless-GFP and mCherry fusion + proteins localize to the cell periphery, SWAT-GFP fusion + also localizes to the extracellular region, and mCherry + fusion also localizes to the vacuole; S/T rich and highly + similar to YOL155C, a putative glucan + alpha-1,4-glucosidase; transcript is induced in both high + and low pH environments; non-essential gene" + /codon_start=1 + /product="Css1p" + /protein_id="NP_012097.1" + /db_xref="GeneID:854637" + /db_xref="SGD:S000001431" + /translation="MFNRLNKFQAALALALYSQSALGQYYSNSTSISSNSSSTSVVSS + SSGSVSISSSIAETSSSATDILSSITQSASSTSGVSSSVGPSSSSVVSSSVSQSSSSV + SDVSSSVSQSSSSASDVSSSVSQSASSTSDVSSSVSQSSSSASDVSSSVSQSSSSASD + VSSSVSQSASSASDVSSSVSQSASSTSDVSSSVSQSSSSASDVSSSVSQSSSSASDVS + SSVSQSASSTSDVSSSVSQSASSTSGVSSSGSQSVSSASGSSSSFPQSTSSASTASGS + ATSNSLSSITSSASSASATASNSLSSSDGTIYLPTTTISGDLTLTGKVIATEGVVVAA + GAKLTLLDGDKYSFSADLKVYGDLLVKKSKETYPGTEFDISGENFDVTGNFNAEESAA + TSASIYSFTPSSFDNSGDISLSLSKSKKGEVTFSPYSNSGAFSFSNAILNGGSVSGLQ + RRDDTEGSVNNGEINLDNGSTYVIVEPVSGKGTVNIISGNLYLHYPDTFTGQTVVFKG + EGVLAVDPTETNATPIPVVGYTGKNQIAITADITALSYDGTTGVLTATQGNRQFSFAI + GTGFSSSDFSVSEGIFAGAYAYYLNYNGVVATSAASSSTASGASASVTGSTSFGASVT + GSTASTSFGASVTGSTASTSFGASVTGSTSVYTTTLDYVNATSTVVVSCSETTDSNGN + VYTITTTVPCSSTTATITSCDETGCHVSTSTGAVVTETVSSKSYTTATVTHCDDNGCN + TKTVTSECSKETSATTASPKSYTTVTVTHCDDNGCNTKTVTSEAPEATTTTTVSSQSY + TTATVTHCDDNGCKTKTVTSEAPEATTTTVSPKTYTTATVTQCDDNGCSTKTVTSECP + EETSATTTSPKSYTTVTVTHCDDNGCNTKTVTSEAPEATTTTVSPKTYTTATVTQCDD + NGCSTKTVTSEAPKETSETSETSAAPKDIHYCHWLLNGDDNGCNVKIITSKIPEATST + VTQLVLLQSHTLLSLLRVLKQPH" + gene 29032..30048 + /gene="SDL1" + /locus_tag="YIL167W" + /gene_synonym="YIL168W" + /pseudo + /db_xref="GeneID:854639" + CDS 29032..30048 + /gene="SDL1" + /locus_tag="YIL167W" + /gene_synonym="YIL168W" + /note="Blocked reading frame otherwise encoding L-serine + dehydratase" + /pseudo + /codon_start=1 + /db_xref="GeneID:854639" + /db_xref="SGD:S000001429" + gene complement(<30938..>32566) + /gene="SOA1" + /locus_tag="YIL166C" + /db_xref="GeneID:854640" + mRNA complement(<30938..>32566) + /gene="SOA1" + /locus_tag="YIL166C" + /product="Soa1p" + /transcript_id="NM_001179514.1" + /db_xref="GeneID:854640" + CDS complement(30938..32566) + /gene="SOA1" + /locus_tag="YIL166C" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:genetic interaction:GO:0000316 + sulfite transport [PMID:28165463]" + /experiment="EXISTENCE:genetic interaction:GO:0008272 + sulfate transport [PMID:28165463]" + /experiment="EXISTENCE:mutant phenotype:GO:0015116 sulfate + transmembrane transporter activity [PMID:28165463]" + /experiment="EXISTENCE:mutant phenotype:GO:0072348 sulfur + compound transport [PMID:28165463]" + /experiment="EXISTENCE:mutant phenotype:GO:1901682 sulfur + compound transmembrane transporter activity + [PMID:28165463]" + /note="Sulfonate and inorganic sulfur transporter; low + affinity sulfate, high affinity sulfite, thiosulfite and + major sulfonate transporter; functions as a an H+ + symporter; similar to the allantoate permease (Dal5p) + subfamily of the major facilitator superfamily; mRNA + expression is elevated by sulfur limitation; non-essential + gene" + /codon_start=1 + /product="Soa1p" + /protein_id="NP_012100.1" + /db_xref="GeneID:854640" + /db_xref="SGD:S000001428" + /translation="MSVQKEEYDIVEKAQLSVSAESLTSDSESISHNPFDDFHKAERW + RKVYESSGYEGLSKFDPEFTWTKDEEKKLVRKMDLKIFLWVFIMFAFLDLIRKNIARA + VSDNFIVDLKMNTNDYNLGQTVYLVIFLASELPGNLLSKRFGPERVIPVQIVLWSVIC + ITQAGLKNRGQFIATRCLLGMVQGGFIPDNILYLSYYYTGAELTFRLSFFWCAIPLFQ + ILGSLLASGIIEMRGIHNLAGWQYLFIIEGFLSLSVGVASFYLMRRGPTQTGESAFHK + GKSLFTEYEEKIMVNRILRDDPSKGDMSNRQPVTFKEILYTLTEFDLWPLFIQGITAF + ISLQTVGSYLSLILKSLNYSTFLSNILAIPGQALLLINLPLAALLSRKLKEKSLCVGI + ANVWVLPFIVSLVALPTDTNPWIKYILLTGILGLPYTHSILAGWVSEISNSVRSRTVG + TALYNMSAQVGAIIASNMYRNDDKPYYTRGNKILLGFTCFNICMAVATKFYYISRNKY + KDRKWNSMTKEEQINYLDTTKDKGMKRLDYRFIH" + gene complement(<33718..>34077) + /locus_tag="YIL165C" + /db_xref="GeneID:854641" + mRNA complement(<33718..>34077) + /locus_tag="YIL165C" + /product="uncharacterized protein" + /transcript_id="NM_001179513.1" + /db_xref="GeneID:854641" + CDS complement(33718..34077) + /locus_tag="YIL165C" + /experiment="EXISTENCE:mutant phenotype:GO:0000422 + autophagy of mitochondrion [PMID:19793921]" + /experiment="EXISTENCE:mutant phenotype:GO:0016236 + macroautophagy [PMID:19793921]" + /note="hypothetical protein; mutant exhibits mitophagy + defects; in closely related species and other S. + cerevisiae strain backgrounds YIL165C and adjacent ORF, + YIL164C, likely constitute a single ORF encoding a + nitrilase gene" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012101.1" + /db_xref="GeneID:854641" + /db_xref="SGD:S000001427" + /translation="MKNIAYEGRLFLISAVQFMPDATAMGFGEIIDQATGKRKLPGWP + SADDNCINGGSVIIDPYGEIIAGPLLGQEGLLTAEINTDLIAEARFDLDPVGHYARGD + VFQLTVNERSHDVKFTK" + gene complement(<34087..>34686) + /gene="NIT1" + /locus_tag="YIL164C" + /db_xref="GeneID:854642" + mRNA complement(<34087..>34686) + /gene="NIT1" + /locus_tag="YIL164C" + /product="Nit1p" + /transcript_id="NM_001179512.1" + /db_xref="GeneID:854642" + CDS complement(34087..34686) + /gene="NIT1" + /locus_tag="YIL164C" + /note="Nitrilase; member of the nitrilase branch of the + nitrilase superfamily; in closely related species and + other S. cerevisiae strain backgrounds YIL164C and + adjacent ORF, YIL165C, likely constitute a single ORF + encoding a nitrilase gene" + /codon_start=1 + /product="Nit1p" + /protein_id="NP_012102.1" + /db_xref="GeneID:854642" + /db_xref="SGD:S000001426" + /translation="MAKHIVAALQIGSCPGSTKDTLKKILSYEKEIKESGAKLVVIPE + ATLGGYPKGSNFGVYLGYRLQEGREEYAKYLAEAIEIGNGEKYPEISQLCALSKATDA + SLCVGCIERDGTTLYCTMVYIDPKDGYVGKHRKLMPTAGERLIWGQGDGSTLPVVDTA + AGKIGGAICWENMMPLLRYAMYKKGVEIWCAPTVDARPI" + gene complement(<36899..>37252) + /locus_tag="YIL163C" + /db_xref="GeneID:854643" + mRNA complement(<36899..>37252) + /locus_tag="YIL163C" + /product="uncharacterized protein" + /transcript_id="NM_001270749.1" + /db_xref="GeneID:854643" + CDS complement(36899..37252) + /locus_tag="YIL163C" + /note="hypothetical protein; mRNA identified as translated + by ribosome profiling data" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001257678.1" + /db_xref="GeneID:854643" + /db_xref="SGD:S000001425" + /translation="MFLFRRKDYRIEIQKKKVVKSFFQMVYYRALRQHFCQTKSFKHS + SKRNVSMMVIGKHRAYLKSLRHHIKGFIITFLVSFSRNLHGKTLDVGSINATRISSPP + DNFLNWVFSFYSCSE" + gene <37385..>38983 + /gene="SUC2" + /locus_tag="YIL162W" + /db_xref="GeneID:854644" + mRNA <37385..>38983 + /gene="SUC2" + /locus_tag="YIL162W" + /product="beta-fructofuranosidase SUC2" + /transcript_id="NM_001179510.1" + /db_xref="GeneID:854644" + CDS 37385..38983 + /gene="SUC2" + /locus_tag="YIL162W" + /EC_number="3.2.1.26" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0004564 + beta-fructofuranosidase activity + [PMID:363706|PMID:3902817]" + /experiment="EXISTENCE:direct assay:GO:0005576 + extracellular region [PMID:6341817]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:6341817]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005987 sucrose + catabolic process [PMID:363706|PMID:3902817]" + /experiment="EXISTENCE:direct assay:GO:0051670 inulinase + activity [PMID:23104410]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:1902927 inulin + catabolic process [PMID:23104410]" + /experiment="EXISTENCE:mutant phenotype:GO:0004564 + beta-fructofuranosidase activity [PMID:2834091]" + /experiment="EXISTENCE:mutant phenotype:GO:0005987 sucrose + catabolic process [PMID:2834091]" + /experiment="EXISTENCE:mutant phenotype:GO:0010147 fructan + catabolic process [PMID:23339519]" + /experiment="EXISTENCE:mutant phenotype:GO:0034484 + raffinose catabolic process [PMID:23339519]" + /note="Invertase; sucrose hydrolyzing enzyme; a secreted, + glycosylated form is regulated by glucose repression, and + an intracellular, nonglycosylated enzyme is produced + constitutively" + /codon_start=1 + /product="beta-fructofuranosidase SUC2" + /protein_id="NP_012104.1" + /db_xref="GeneID:854644" + /db_xref="SGD:S000001424" + /translation="MLLQAFLFLLAGFAAKISASMTNETSDRPLVHFTPNKGWMNDPN + GLWYDEKDAKWHLYFQYNPNDTVWGTPLFWGHATSDDLTNWEDQPIAIAPKRNDSGAF + SGSMVVDYNNTSGFFNDTIDPRQRCVAIWTYNTPESEEQYISYSLDGGYTFTEYQKNP + VLAANSTQFRDPKVFWYEPSQKWIMTAAKSQDYKIEIYSSDDLKSWKLESAFANEGFL + GYQYECPGLIEVPTEQDPSKSYWVMFISINPGAPAGGSFNQYFVGSFNGTHFEAFDNQ + SRVVDFGKDYYALQTFFNTDPTYGSALGIAWASNWEYSAFVPTNPWRSSMSLVRKFSL + NTEYQANPETELINLKAEPILNISNAGPWSRFATNTTLTKANSYNVDLSNSTGTLEFE + LVYAVNTTQTISKSVFADLSLWFKGLEDPEEYLRMGFEVSASSFFLDRGNSKVKFVKE + NPYFTNRMSVNNQPFKSENDLSYYKVYGLLDQNILELYFNDGDVVSTNTYFMTTGNAL + GSVNMTTGVDNLFYIDKFQVREVK" + gene <39433..>40140 + /gene="SMU2" + /locus_tag="YIL161W" + /db_xref="GeneID:854645" + mRNA <39433..>40140 + /gene="SMU2" + /locus_tag="YIL161W" + /product="Smu2p" + /transcript_id="NM_001179509.1" + /db_xref="GeneID:854645" + CDS 39433..40140 + /gene="SMU2" + /locus_tag="YIL161W" + /experiment="EXISTENCE:direct assay:GO:0005515 protein + binding [PMID:36113412]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:36113412]" + /experiment="EXISTENCE:direct assay:GO:0070651 + nonfunctional rRNA decay [PMID:36113412]" + /note="Protein involved in removal of stalled ribosomes; + acts as cofactor for Fap1p and Fpr1p in ubiquitination of + stalled monosomes and subsequent degradation; green + fluorescent protein (GFP)-fusion protein localizes to the + cytoplasm; mRNA is enriched in Scp160p-associated mRNPs; + YIL161W is a non-essential gene" + /codon_start=1 + /product="Smu2p" + /protein_id="NP_012105.1" + /db_xref="GeneID:854645" + /db_xref="SGD:S000001423" + /translation="MDTKLSVTGAKKSQGKASGLGNEGTPIGNEESTNKAKNGNKKRN + KNRNRNKKTETKEQNEPKPVTGGEEVRVEKSQAKNRRRKNNNGANKKNTLHYSKEINV + EERKQIAKRQEEIEQCIHTLSDFKLFKKGKHVTSYGYRISPMTDSGKISLKILFNIPL + DYPKAPIKLTMKSNEEVSSYMDTVIANFNWKARQLVKEDWRILSQINYLVSELEILKM + ENYKQIDKLRNSFYKTI" + gene complement(<40191..>41444) + /gene="POT1" + /locus_tag="YIL160C" + /gene_synonym="FOX3; POX3" + /db_xref="GeneID:854646" + mRNA complement(<40191..>41444) + /gene="POT1" + /locus_tag="YIL160C" + /gene_synonym="FOX3; POX3" + /product="acetyl-CoA C-acyltransferase" + /transcript_id="NM_001179508.1" + /db_xref="GeneID:854646" + CDS complement(40191..41444) + /gene="POT1" + /locus_tag="YIL160C" + /gene_synonym="FOX3; POX3" + /EC_number="2.3.1.16" + /experiment="EXISTENCE:direct assay:GO:0003729 mRNA + binding [PMID:21124907]" + /experiment="EXISTENCE:direct assay:GO:0003988 acetyl-CoA + C-acyltransferase activity [PMID:7754706]" + /experiment="EXISTENCE:direct assay:GO:0005758 + mitochondrial intermembrane space [PMID:22984289]" + /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome + [PMID:19470242]" + /experiment="EXISTENCE:direct assay:GO:0005782 peroxisomal + matrix [PMID:7754706|PMID:8125978]" + /experiment="EXISTENCE:mutant phenotype:GO:0005782 + peroxisomal matrix [PMID:8125978]" + /experiment="EXISTENCE:mutant phenotype:GO:0006635 fatty + acid beta-oxidation [PMID:12819196]" + /note="3-ketoacyl-CoA thiolase with broad chain length + specificity; cleaves 3-ketoacyl-CoA into acyl-CoA and + acetyl-CoA during beta-oxidation of fatty acids" + /codon_start=1 + /product="acetyl-CoA C-acyltransferase" + /protein_id="NP_012106.1" + /db_xref="GeneID:854646" + /db_xref="SGD:S000001422" + /translation="MSQRLQSIKDHLVESAMGKGESKRKNSLLEKRPEDVVIVAANRS + AIGKGFKGAFKDVNTDYLLYNFLNEFIGRFPEPLRADLNLIEEVACGNVLNVGAGATE + HRAACLASGIPYSTPFVALNRQCSSGLTAVNDIANKIKVGQIDIGLALGVESMTNNYK + NVNPLGMISSEELQKNREAKKCLIPMGITNENVAANFKISRKDQDEFAANSYQKAYKA + KNEGLFEDEILPIKLPDGSICQSDEGPRPNVTAESLSSIRPAFIKDRGTTTAGNASQV + SDGVAGVLLARRSVANQLNLPVLGRYIDFQTVGVPPEIMGVGPAYAIPKVLEATGLQV + QDIDIFEINEAFAAQALYCIHKLGIDLNKVNPRGGAIALGHPLGCTGARQVATILREL + KKDQIGVVSMCIGTGMGAAAIFIKE" + gene <41825..>45952 + /gene="BNR1" + /locus_tag="YIL159W" + /db_xref="GeneID:854647" + mRNA <41825..>45952 + /gene="BNR1" + /locus_tag="YIL159W" + /product="formin BNR1" + /transcript_id="NM_001179507.1" + /db_xref="GeneID:854647" + CDS 41825..45952 + /gene="BNR1" + /locus_tag="YIL159W" + /experiment="EXISTENCE:direct assay:GO:0005522 profilin + binding [PMID:15923184]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:9774458]" + /experiment="EXISTENCE:direct assay:GO:0032153 cell + division site [PMID:26771880]" + /experiment="EXISTENCE:direct assay:GO:0045010 actin + nucleation [PMID:30076201]" + /experiment="EXISTENCE:direct assay:GO:0051016 barbed-end + actin filament capping [PMID:15923184]" + /experiment="EXISTENCE:direct assay:GO:0051017 actin + filament bundle assembly [PMID:15923184]" + /experiment="EXISTENCE:direct assay:GO:0070649 + formin-nucleated actin cable assembly [PMID:15923184]" + /experiment="EXISTENCE:genetic interaction:GO:0032956 + regulation of actin cytoskeleton organization + [PMID:17237521]" + /experiment="EXISTENCE:genetic interaction:GO:0051017 + actin filament bundle assembly [PMID:23671312]" + /experiment="EXISTENCE:genetic interaction:GO:0070649 + formin-nucleated actin cable assembly [PMID:11740491]" + /experiment="EXISTENCE:genetic interaction:GO:1903475 + mitotic actomyosin contractile ring assembly + [PMID:12419188]" + /experiment="EXISTENCE:mutant phenotype:GO:0005522 + profilin binding [PMID:15923184]" + /experiment="EXISTENCE:mutant phenotype:GO:0051017 actin + filament bundle assembly [PMID:23671312]" + /experiment="EXISTENCE:mutant phenotype:GO:0070649 + formin-nucleated actin cable assembly [PMID:15371545]" + /note="Formin; nucleates the formation of linear actin + filaments; involved in processes such as budding and + mitotic spindle orientation which require the formation of + polarized actin cables; activity is regulated by Hof1p and + by the Bud14p-Kel1p-Kel2p complex; dephosphorylated and + delocalized from the division site in a + Glc7p/Ref2p-dependent manner; functionally redundant with + BNI1" + /codon_start=1 + /product="formin BNR1" + /protein_id="NP_012107.1" + /db_xref="GeneID:854647" + /db_xref="SGD:S000001421" + /translation="MDSSPNKKTYRYPRRSLSLHARDRVSEARKLEELNLNDGLVAAG + LQLVGVALEKQGTGSHIYMKQKNFSANDVSSSPMVSEEVNGSEMDFNPKCMPQDASLV + ERMFDELLKDGTFFWGAAYKNLQNISLRRKWLLICKIRSSNHWGKKKVTSSTTYSTHL + ATNELAENAHFLDGLVRNLSTGGMKLSKALYKLEKFLRKQSFLQLFLKDEIYLTTLIE + KTLPLISKELQFVYLRCFKILMNNPLARIRALHSEPLIRWFTELLTDQNSNLKCQLLS + MELLLLLTYVEGSTGCELIWDQLSILFTDWLEWFDKILADDIAIHSSLYLNWNQLKID + YSTTFLLLINSILQGFNNKTALEILNFLKKNNIHNTITFLELAYKDDPNSVVIMEQIK + QFKSKESAIFDSMIKTTNDTNSLHPTKDIARIESEPLCLENCLLLKAKDSPVEAPINE + IIQSLWKILDSQKPYSESIKLLKLINSLLFYLIDSFQVSTNPSFDETLESAENVDYVF + QDSVNKLLDSLQSDEIARRAVTEIDDLNAKISHLNEKLNLVENHDKDHLIAKLDESES + LISLKTKEIENLKLQLKATKKRLDQITTHQRLYDQPPSLASSNLSIAGSIIKNNSHGN + IIFQNLAKKQQQQQKISLPKRSTSLLKSKRVTSLSSYLTDANNENESQNESEDKSKDS + LFQRSTSTINFNIPSMKNITNMQNVSLNSILSELEFSNSLGTQPNYQSSPVLSSVSSS + PKLFPRLSSDSLDNGIQLVPEVVKLPQLPPPPPPPPPPPLPQSLLTEAEAKPDGVSCI + AAPAPPPLPDLFKTKTCGAVPPPPPPPPLPESLSMNKGPSNHDLVTPPAPPLPNGLLS + SSSVSINPTTTDLKPPPTEKRLKQIHWDKVEDIKDTLWEDTFQRQETIKELQTDGIFS + QIEDIFKMKSPTKIANKRNAESSIALSSNNGKSSNELKKISFLSRDLAQQFGINLHMF + SQLSDMEFVMKVLNCDNDIVQNVNILKFFCKEELVNIPKSMLNKYEPYSQGKDGKAVS + DLQRADRIFLELCINLRFYWNARSKSLLTLSTYERDYYDLIFKLQKIDDAISHLNRSP + KFKSLMFIITEIGNHMNKRIVKGIKLKSLTKLAFVRSSIDQNVSFLHFIEKVIRIKYP + DIYGFVDDLKNIEDLGKISLEHVESECHEFHKKIEDLVTQFQVGKLSKEENLDPRDQI + IKKVKFKINRAKTKSELLIGQCKLTLIDLNKLMKYYGEDPKDKESKNEFFQPFIEFLA + MFKKCAKENIEKEEMERVYEQRKSLLDMRTSSNKKSNGSDENDGEKVNRDAVDLLISK + LREVKKDPEPLRRRKSTKLNEIAINVHEGDVKTRKDEDHVLLERTHAMLNDIQNI" + gene <46201..>46815 + /gene="AIM20" + /locus_tag="YIL158W" + /db_xref="GeneID:854648" + mRNA <46201..>46815 + /gene="AIM20" + /locus_tag="YIL158W" + /product="Aim20p" + /transcript_id="NM_001179506.3" + /db_xref="GeneID:854648" + CDS 46201..46815 + /gene="AIM20" + /locus_tag="YIL158W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:22842922]" + /note="hypothetical protein; overexpression causes cell + cycle delay or arrest; green fluorescent protein + (GFP)-fusion protein localizes to vacuole; null mutant + displays elevated frequency of mitochondrial genome loss; + relocalizes from nucleus to cytoplasm upon DNA replication + stress; AIM20 has a paralog, SKG1, that arose from the + whole genome duplication" + /codon_start=1 + /product="Aim20p" + /protein_id="NP_012108.3" + /db_xref="GeneID:854648" + /db_xref="SGD:S000001420" + /translation="MGNVSVAVGTAVGIPIAVGVIIALIFWCKLQRRYKKEEIRDADL + EKMVMEEVAVSVYDGFKAEINSSSEASTINEKEANQDLKPCQEKTAKAGYTPAYRRQL + NASMGTLRPKKQSTAYTNVPVIFSGEKVNYGMVRDPSYSFMYPLTLSRKETSSLRSAS + TSNLSSSTENTALHEEIKLDDPYENDFTNYTVNKREFIDSLRPH" + gene complement(<46949..>47542) + /gene="COA1" + /locus_tag="YIL157C" + /db_xref="GeneID:854649" + mRNA complement(<46949..>47542) + /gene="COA1" + /locus_tag="YIL157C" + /product="Coa1p" + /transcript_id="NM_001179505.1" + /db_xref="GeneID:854649" + CDS complement(46949..47542) + /gene="COA1" + /locus_tag="YIL157C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005743 + mitochondrial inner membrane [PMID:17882259]" + /experiment="EXISTENCE:direct assay:GO:0031966 + mitochondrial membrane [PMID:17882260]" + /experiment="EXISTENCE:mutant phenotype:GO:0033617 + mitochondrial cytochrome c oxidase assembly + [PMID:17882259|PMID:17882260]" + /experiment="EXISTENCE:physical interaction:GO:0033617 + mitochondrial cytochrome c oxidase assembly + [PMID:17882259]" + /note="Mitochondrial inner membrane protein; required for + assembly of the cytochrome c oxidase complex (complex IV); + interacts with complex IV assembly factor Shy1p during the + early stages of assembly" + /codon_start=1 + /product="Coa1p" + /protein_id="NP_012109.1" + /db_xref="GeneID:854649" + /db_xref="SGD:S000001419" + /translation="MMLRLVTKGLPKVTPSAAKAVLVRGSLLHSFSTSARFNNSVAED + EAKIVLKDKNRPLRIDRELPDPTTERRKRIAGFLLFSVAIGSALSLIFNYEKTESPII + SNTLYYIRRSPATKNILGESIEFDGIIPWVYGELNSVKGRINITFYIKGDKNVTGTVR + LVADRNTHDEEFLIHEWSVTAAGQKIDLLAENTKTPI" + gene <47690..>47973 + /gene="ATG44" + /locus_tag="YIL156W-B" + /gene_synonym="MCO8; MDI1" + /db_xref="GeneID:3628034" + mRNA join(<47690..47698,47761..>47973) + /gene="ATG44" + /locus_tag="YIL156W-B" + /gene_synonym="MCO8; MDI1" + /product="mitofissin" + /transcript_id="NM_001184521.1" + /db_xref="GeneID:3628034" + CDS join(47690..47698,47761..47973) + /gene="ATG44" + /locus_tag="YIL156W-B" + /gene_synonym="MCO8; MDI1" + /experiment="EXISTENCE:direct assay:GO:0005758 + mitochondrial intermembrane space [PMID:37192628]" + /experiment="EXISTENCE:direct assay:GO:0008289 lipid + binding [PMID:37192628]" + /experiment="EXISTENCE:mutant phenotype:GO:0000266 + mitochondrial fission [PMID:37192628]" + /experiment="EXISTENCE:mutant phenotype:GO:0000423 + mitophagy [PMID:37192628]" + /note="Mitochondrial fission factor (mitofissin) essential + for mitophagy; directly binds to lipid membranes and + brings about lipid membrane fragility to facilitate + membrane fission; S. pombe homolog complements null + mutant" + /codon_start=1 + /product="mitofissin" + /protein_id="NP_001027534.1" + /db_xref="GeneID:3628034" + /db_xref="SGD:S000028511" + /translation="MTLVGKLVHISIDLVLVSTCLAGIKRNTGLTPKLETLDNQTMRN + YMKRYLNLGESVYDYSVATCGSSTYFARK" + gene <48091..>51306 + /gene="UBP7" + /locus_tag="YIL156W" + /db_xref="GeneID:854650" + mRNA <48091..>51306 + /gene="UBP7" + /locus_tag="YIL156W" + /product="ubiquitin-specific protease UBP7" + /transcript_id="NM_001179504.1" + /db_xref="GeneID:854650" + CDS 48091..51306 + /gene="UBP7" + /locus_tag="YIL156W" + /EC_number="3.4.19.12" + /experiment="EXISTENCE:curator inference:GO:0005737 + cytoplasm [PMID:8982460]" + /experiment="EXISTENCE:direct assay:GO:0004843 + cysteine-type deubiquitinase activity [PMID:24746795]" + /experiment="EXISTENCE:direct assay:GO:0016579 protein + deubiquitination [PMID:24746795]" + /note="Ubiquitin-specific protease that cleaves + ubiquitin-protein fusions; involved in cell cycle + progression through S phase; UBP7 has a paralog, UBP11, + that arose from the whole genome duplication" + /codon_start=1 + /product="ubiquitin-specific protease UBP7" + /protein_id="NP_012110.1" + /db_xref="GeneID:854650" + /db_xref="SGD:S000001418" + /translation="MLDDDKGTAMHPHITPFTPEYSNELLRRVQDLYHEDIKHYYPQL + KLEKLLDLLEHTEYLFELYLDSIHHDRPNDALTAFIIGCYYVFLIIPQSLQFQTRNKS + YSIYTDLKKMYENEMNMTNVVLMVKKEIGVVLDESVKHGAGIEHRITKKRAFSVPADD + LSGQVASLSLDTAAPQDHGLKGTFTEDDAEQSSPVWTAPNLEPNDQLKLALLPEVIPT + PAFREPERKTSVPVRPSVLLEDVPSIYHEDDTSFASLNPPFREITADRSVTHRKDSYH + SVYMVDSGNLKEDNDDLFNVENDGFIQSLDILQKQSIITAPELFSILSNRVEREKVLL + IDLRIPQRSAINHIVAPNLVNVDPNLLWDKQTNTPIYKDDILEHLLKENENFINRNKF + DYIVYYTDVKTFMTINFDYAFIFFYLMLTSQKTPLTTVPTTLLGGYEKWKKTLHSYAQ + EYHISIEDYLYRPYSQKARLQQEQQQQQQQPDSQDSFSAKESSTKVPEPPSWKPPDLP + IRLRKRPPPPPPVSMPTTPEIPPPLPPKIMVHSQVSSISRKPPIPAKQHVKKEQLNSN + EIIQRKRQHQHQHYDQQILQPQRAYNIPTIERSPNVYVSLSITGLRNLGNTCYINSMI + QCLFAAKTFRTLFISSKYKSYLQPIRSNGSHYSPKLSNSLSMLFNKMYLNGGCSVVPT + GFLKVINQLRPDLKIPDDQQDTQEFLMILLDRLHDELSDQQHVANDYPNLLLYNADAL + KVSNNEYKHWFDKNVIGNGISPIDDIFQGQMENSLQCKRCGYTTFNYSTFYVLSLAIP + RRSMKLSKLGRSTEKRVKLEDCINMFTSDEVLSGENAWDCPRCGPTASVSTSVSALEN + EPSIVKSKKKKSRFFTLHTGTKRRHLDFFGDGITEGHNSNNNNTTIFERERSRSPFRM + LGGSGKRSSSSTPFSTGGNDSNNSSDYKNKKLTTVKTINFVTLPKILVIHLSRFYYDL + TKKNNTVVTYPLILNIILKNNDTMKYKLFGVVNHTGTLISGHYTSLVNKDLEHNVNIG + RSKWYYFDDEVVKADRKHGSDKNLKISSSDVYVLFYERVYD" + gene complement(<51759..>53708) + /gene="GUT2" + /locus_tag="YIL155C" + /db_xref="GeneID:854651" + mRNA complement(<51759..>53708) + /gene="GUT2" + /locus_tag="YIL155C" + /product="glycerol-3-phosphate dehydrogenase" + /transcript_id="NM_001179503.1" + /db_xref="GeneID:854651" + CDS complement(51759..53708) + /gene="GUT2" + /locus_tag="YIL155C" + /EC_number="1.1.5.3" + /experiment="EXISTENCE:direct assay:GO:0004368 + glycerol-3-phosphate dehydrogenase (quinone) activity + [PMID:12032156]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:11502169|PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane [PMID:16689936]" + /experiment="EXISTENCE:direct assay:GO:0006116 NADH + oxidation [PMID:12032156]" + /experiment="EXISTENCE:mutant phenotype:GO:0004368 + glycerol-3-phosphate dehydrogenase (quinone) activity + [PMID:8256521]" + /experiment="EXISTENCE:mutant phenotype:GO:0005739 + mitochondrion [PMID:8256521]" + /experiment="EXISTENCE:mutant phenotype:GO:0006071 + glycerol metabolic process [PMID:8256521]" + /note="Mitochondrial glycerol-3-phosphate dehydrogenase; + expression is repressed by both glucose and cAMP and + derepressed by non-fermentable carbon sources in a Snf1p, + Rsf1p, Hap2/3/4/5 complex dependent manner" + /codon_start=1 + /product="glycerol-3-phosphate dehydrogenase" + /protein_id="NP_012111.1" + /db_xref="GeneID:854651" + /db_xref="SGD:S000001417" + /translation="MFSVTRRRAAGAAAAMATATGTLYWMTSQGDRPLVHNDPSYMVQ + FPTAAPPQVSRRDLLDRLAKTHQFDVLIIGGGATGTGCALDAATRGLNVALVEKGDFA + SGTSSKSTKMIHGGVRYLEKAFWEFSKAQLDLVIEALNERKHLINTAPHLCTVLPILI + PIYSTWQVPYIYMGCKFYDFFAGSQNLKKSYLLSKSATVEKAPMLTTDNLKASLVYHD + GSFNDSRLNATLAITAVENGATVLNYVEVQKLIKDPTSGKVIGAEARDVETNELVRIN + AKCVVNATGPYSDAILQMDRNPSGLPDSPLNDNSKIKSTFNQIAVMDPKMVIPSIGVH + IVLPSFYCPKDMGLLDVRTSDGRVMFFLPWQGKVLAGTTDIPLKQVPENPMPTEADIQ + DILKELQHYIEFPVKREDVLSAWAGVRPLVRDPRTIPADGKKGSATQGVVRSHFLFTS + DNGLITIAGGKWTTYRQMAEETVDKVVEVGGFHNLKPCHTRDIKLAGAEEWTQNYVAL + LAQNYHLSSKMSNYLVQNYGTRSSIICEFFKESMENKLPLSLADKENNVIYSSEENNL + VNFDTFRYPFTIGELKYSMQYEYCRTPLDFLLRRTRFAFLDAKEALNAVHATVKVMGD + EFNWSEKKRQWELEKTVNFIKTFGV" + gene complement(<53981..>55021) + /gene="IMP21" + /locus_tag="YIL154C" + /gene_synonym="IMP2" + /db_xref="GeneID:854652" + mRNA complement(<53981..>55021) + /gene="IMP21" + /locus_tag="YIL154C" + /gene_synonym="IMP2" + /product="Imp21p" + /transcript_id="NM_001179502.3" + /db_xref="GeneID:854652" + CDS complement(53981..55021) + /gene="IMP21" + /locus_tag="YIL154C" + /gene_synonym="IMP2" + /experiment="EXISTENCE:direct assay:GO:0003713 + transcription coactivator activity [PMID:8628275]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0000429 carbon + catabolite regulation of transcription from RNA polymerase + II promoter [PMID:7496532]" + /note="Transcriptional activator involved in maintenance + of ion homeostasis; also involved in protection against + DNA damage caused by bleomycin and other oxidants; + contains a C-terminal leucine-rich repeat" + /codon_start=1 + /product="Imp21p" + /protein_id="NP_012112.3" + /db_xref="GeneID:854652" + /db_xref="SGD:S000001416" + /translation="MQKSILLTKPDGTQSNLHSIKTETPTTVEFDSEQMERGHRERGR + SKKKRGERDSNVSSLSRSRSRASSRSRVREEEFLKWTVLRQDPSMRLRVVDVDSEEEG + EGNDEDDDDGDGDDMDEEESDEEQVSDIENDLEIDEEFHYDLGMKVLPNFCTSINEVL + DSSKPWIAKYEISIRGHENEDVSLEQLDGGYVRAMQLLTKGAGAEAGNQRSFILYTDL + SSESTYALTYLMGAAVNQGDTVYIVHWEPSKPTDDSQMFANVARIRKHVMHLFDCVAG + VLDDLDVVVLSLTHPYPKHLLNEMIHGLKPVALCCSLSVILSTLQNFVCSVPILAVRK + KLKRAKRKGISE" + gene <55198..>56379 + /gene="RRD1" + /locus_tag="YIL153W" + /gene_synonym="YPA1" + /db_xref="GeneID:854653" + mRNA <55198..>56379 + /gene="RRD1" + /locus_tag="YIL153W" + /gene_synonym="YPA1" + /product="peptidylprolyl isomerase RRD1" + /transcript_id="NM_001179501.1" + /db_xref="GeneID:854653" + CDS 55198..56379 + /gene="RRD1" + /locus_tag="YIL153W" + /gene_synonym="YPA1" + /EC_number="5.2.1.8" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:21129186]" + /experiment="EXISTENCE:direct assay:GO:0003755 + peptidyl-prolyl cis-trans isomerase activity + [PMID:16380387]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:15150670]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:15150670]" + /experiment="EXISTENCE:mutant phenotype:GO:0006281 DNA + repair [PMID:9705277|PMID:15150670]" + /experiment="EXISTENCE:mutant phenotype:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:21129186]" + /experiment="EXISTENCE:mutant phenotype:GO:0006914 + autophagy [PMID:31962153]" + /experiment="EXISTENCE:mutant phenotype:GO:0007052 mitotic + spindle organization [PMID:11262194]" + /experiment="EXISTENCE:mutant phenotype:GO:0019888 protein + phosphatase regulator activity [PMID:12952889]" + /experiment="EXISTENCE:physical interaction:GO:0000082 + G1/S transition of mitotic cell cycle [PMID:11134337]" + /experiment="EXISTENCE:physical interaction:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:21129186]" + /note="Peptidyl-prolyl cis/trans-isomerase; activator of + the phosphotyrosyl phosphatase activity of PP2A; involved + in G1 phase progression, microtubule dynamics, bud + morphogenesis and DNA repair; required for rapid reduction + of Sgs1p levels in response to rapamycin; subunit of the + Tap42p-Sit4p-Rrd1p complex; protein increases in abundance + and relative distribution to the nucleus increases upon + DNA replication stress" + /codon_start=1 + /product="peptidylprolyl isomerase RRD1" + /protein_id="NP_012113.1" + /db_xref="GeneID:854653" + /db_xref="SGD:S000001415" + /translation="MSLDRVDWPHATFSTPVKRIFDTQTTLDFQSSLAIHRIKYHLHK + YTTLISHCSDPDPHATASSIAMVNGLMGVLDKLAHLIDETPPLPGPRRYGNLACREWH + HKLDERLPQWLQEMLPSEYHEVVPELQYYLGNSFGSSTRLDYGTGHELSFMATVAALD + MLGMFPHMRGADVFLLFNKYYTIMRRLILTYTLEPAGSHGVWGLDDHFHLVYILGSSQ + WQLLDAQAPLQPREILDKSLVREYKDTNFYCQGINFINEVKMGPFEEHSPILYDIAVT + VPRWSKVCKGLLKMYSVEVLKKFPVVQHFWFGTGFFPWVNIQNGTDLPVFEEKEEESI + EQANAGSPGREQTSTRFPTSTSMPPPGVPPSGNNINYLLSHQNQSHRNQTSFSRDRLR + R" + gene <56545..>57252 + /gene="VPR1" + /locus_tag="YIL152W" + /db_xref="GeneID:854654" + mRNA <56545..>57252 + /gene="VPR1" + /locus_tag="YIL152W" + /product="Vpr1p" + /transcript_id="NM_001179500.1" + /db_xref="GeneID:854654" + CDS 56545..57252 + /gene="VPR1" + /locus_tag="YIL152W" + /note="hypothetical protein" + /codon_start=1 + /product="Vpr1p" + /protein_id="NP_012114.1" + /db_xref="GeneID:854654" + /db_xref="SGD:S000001414" + /translation="MSHKRRGLVIYQDQKQQQQHPPGQSLSSISWSPTRRPHHPLKQQ + STNSFSEILSKSSVQPNVQHDGNHMPISLLVLKQEHHKQQQQQQQRQNIRSQNSTPPL + RQLVQESQWTSSASNSSLKKQEKQPQTFYNTDSKLVSQLHSSVKDLDAIIQTHKPKFD + TIIRDFSQATILSSNELLIKLPKDQTIILHSRAPKINAEWLQNKVNDPSASLVIDSRS + FLTLCNNIKWYLHWKFI" + gene complement(<57338..>60694) + /gene="ESL1" + /locus_tag="YIL151C" + /db_xref="GeneID:854655" + mRNA complement(<57338..>60694) + /gene="ESL1" + /locus_tag="YIL151C" + /product="Esl1p" + /transcript_id="NM_001179499.1" + /db_xref="GeneID:854655" + CDS complement(57338..60694) + /gene="ESL1" + /locus_tag="YIL151C" + /note="hEST1A/B (SMG5/6)-like protein; contributes to + environment-sensing adaptive gene expression responses; + Esl1p and Esl2p contain a 14-3-3-like domain and a + putative PilT N-terminus ribonuclease domain; ESL1 has a + paralog, ESL2, that arose from the whole genome + duplication" + /codon_start=1 + /product="Esl1p" + /protein_id="NP_012115.1" + /db_xref="GeneID:854655" + /db_xref="SGD:S000001413" + /translation="MVDLMVPANDDPSNETDYSRSNNNHTHIVSDMRPTSAAFLHQKR + HSSSSHNDTPESSFAKRRVPGIVDPVGKGFIDGITNSQISAQNTPSKTDDASRRPSIS + RKVMESTPQVKTSSIPTMDVPKSPYYVNRTMLARNMKVVSRDTYEDNANPQMRADEPL + VASNGIYSNSQPQSQVTLSDIRRAPVVAASPPPMIRQLPSAQPNQTFIKKLQEIYKII + VVQETELQQRCLYLTTSQTTELKSLWAIYRLNTELIKNYINFIITALLTTQPINDLIM + GQEILDIYRIEKRLWVYGIITFLDVLKNFSNFMDPEVCCQFIIYAFISVSNMLEDIPL + KYSILWRQRLGDLSRMAISLYPSGFIDWRLSAEYWYTESMKYIYGCGKLYYHIATVQQ + NSLEAFVNLGKSVFCQDPFTPSQQTLQLLIENIYQSAFIDRSSGSANNNEIAHRNSQL + IDYLKHTEVMLLPSFLENMDLQHVVLMYFKDKFGKDFNGNDVFDTKDMFCQNPESLRY + YFRHAPAFAESQLLQLIGFGNPKNPFALLFQLPKYLKLKKDKREKKRSEATETSSYTD + PFDVQISSESYFQNIDALNSSFNDIPTNLNIWLDSLNHINMTSIQCSIHVLTKFLHAP + LVVALPHFLTWLHFIVAILKKLEMVNSKQVVAFWIHFLRRTMPWNSIVTLGNVLVCYM + LDNLHPFLKKELEKFYSLELDDLIEYYNENENLPEIWKCWGTLWFDAIKKCDVMEIPG + VQDHLFFDSPLDGIVFDEKDEVGEKFWMRSVRAVLLLKGIAKKFPDLGLKVSFQASVF + CRRNDIPPDYFLKNLTFKLDAYDEDNYNDNNELDDLYDTIEINEEIEAVNMDPQATPN + LSVVSGESIFEYTGYTRLAPDYHCFDKNGGFNSAFIYSQWSNVGNGVTLDVSGESIYD + VANNNLSLHWEKIFFDKIAAASKGSDENYNCTLYFVIDATSWLRHFAHIFKLAKNNTL + KFAICLTTFQELRYLRGSKDDTVVEAATRSVITIRQLYDEKKIIPMRFTGNIATHVEE + NLEFEEQITWKTHVDEFVIDAIAKLNQRFQAERLTDENKNKGKEFAVLVTDDDNMNQK + AKDRMIKTCNTKYLFSLGSKLGINSGLCTN" + gene complement(<61013..>62728) + /gene="MCM10" + /locus_tag="YIL150C" + /gene_synonym="DNA43" + /db_xref="GeneID:854656" + mRNA complement(<61013..>62728) + /gene="MCM10" + /locus_tag="YIL150C" + /gene_synonym="DNA43" + /product="Mcm10p" + /transcript_id="NM_001179498.1" + /db_xref="GeneID:854656" + CDS complement(61013..62728) + /gene="MCM10" + /locus_tag="YIL150C" + /gene_synonym="DNA43" + /experiment="EXISTENCE:direct assay:GO:0003688 DNA + replication origin binding [PMID:15494305|PMID:10783164]" + /experiment="EXISTENCE:direct assay:GO:0003690 + double-stranded DNA binding [PMID:19605346]" + /experiment="EXISTENCE:direct assay:GO:0003697 + single-stranded DNA binding [PMID:19605346|PMID:27751725]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:11168584|PMID:13680157|PMID:9154825]" + /experiment="EXISTENCE:direct assay:GO:0031298 replication + fork protection complex [PMID:16531994]" + /experiment="EXISTENCE:genetic interaction:GO:0006270 DNA + replication initiation [PMID:10783164]" + /experiment="EXISTENCE:genetic interaction:GO:0006271 DNA + strand elongation involved in DNA replication + [PMID:10783164|PMID:11168584]" + /experiment="EXISTENCE:mutant phenotype:GO:0000727 + double-strand break repair via break-induced replication + [PMID:20516198]" + /experiment="EXISTENCE:mutant phenotype:GO:0005657 + replication fork [PMID:15494305]" + /experiment="EXISTENCE:mutant phenotype:GO:0006270 DNA + replication initiation [PMID:10783164|PMID:9154825]" + /experiment="EXISTENCE:mutant phenotype:GO:0006271 DNA + strand elongation involved in DNA replication + [PMID:10783164|PMID:11168584|PMID:9154825]" + /experiment="EXISTENCE:mutant phenotype:GO:0030466 silent + mating-type cassette heterochromatin formation + [PMID:16085704|PMID:16328881]" + /experiment="EXISTENCE:mutant phenotype:GO:0031509 + subtelomeric heterochromatin formation [PMID:16085704]" + /note="Essential chromatin-associated protein; involved in + initiation of DNA replication; required for association of + MCM2-7 complex with replication origins; required to + stabilize catalytic subunit of DNA polymerase-alpha; + coordinates function of replication fork helicase; + self-associates through its N-terminal domain" + /codon_start=1 + /product="Mcm10p" + /protein_id="NP_012116.1" + /db_xref="GeneID:854656" + /db_xref="SGD:S000001412" + /translation="MNDPREILAVDPYNNITSDEEDEQAIARELEFMERKRQALVERL + KRKQEFKKPQDPNFEAIEVPQSPTKNRVKVGSHNATQQGTKFEGSNINEVRLSQLQQQ + PKPPASTTTYFMEKFQNAKKNEDKQIAKFESMMNARVHTFSTDEKKYVPIITNELESF + SNLWVKKRYIPEDDLKRALHEIKILRLGKLFAKIRPPKFQEPEYANWATVGLISHKSD + IKFTSSEKPVKFFMFTITDFQHTLDVYIFGKKGVERYYNLRLGDVIAILNPEVLPWRP + SGRGNFIKSFNLRISHDFKCILEIGSSRDLGWCPIVNKKTHKKCGSPINISLHKCCDY + HREVQFRGTSAKRIELNGGYALGAPTKVDSQPSLYKAKGENGFNIIKGTRKRLSEEEE + RLKKSSHNFTNSNSAKAFFDEKFQNPDMLANLDNKRRKIIETKKSTALSRELGKIMRR + RESSGLEDKSVGERQKMKRTTESALQTGLIQRLGFDPTHGKISQVLKSSVSGSEPKNN + LLGKKKTVINDLLHYKKEKVILAPSKNEWFKKRSHREEVWQKHFGSKETKETSDGSAS + DLEII" + gene complement(<63028..>68067) + /gene="MLP2" + /locus_tag="YIL149C" + /db_xref="GeneID:854657" + mRNA complement(<63028..>68067) + /gene="MLP2" + /locus_tag="YIL149C" + /product="Mlp2p" + /transcript_id="NM_001179497.3" + /db_xref="GeneID:854657" + CDS complement(63028..68067) + /gene="MLP2" + /locus_tag="YIL149C" + /experiment="EXISTENCE:direct assay:GO:0005635 nuclear + envelope [PMID:10085285]" + /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm + [PMID:10085285]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005816 spindle + pole body [PMID:16027220]" + /experiment="EXISTENCE:direct assay:GO:0044615 nuclear + pore nuclear basket [PMID:24152732]" + /experiment="EXISTENCE:genetic interaction:GO:0006355 + regulation of DNA-templated transcription [PMID:15692572]" + /experiment="EXISTENCE:genetic interaction:GO:0006606 + protein import into nucleus [PMID:10085285]" + /experiment="EXISTENCE:genetic interaction:GO:0034398 + telomere tethering at nuclear periphery [PMID:10638763]" + /experiment="EXISTENCE:genetic interaction:GO:0043021 + ribonucleoprotein complex binding [PMID:15692572]" + /experiment="EXISTENCE:genetic interaction:GO:1901925 + negative regulation of protein import into nucleus during + spindle assembly checkpoint [PMID:23177738]" + /experiment="EXISTENCE:mutant phenotype:GO:0000972 + transcription-dependent tethering of RNA polymerase II + gene DNA at nuclear periphery [PMID:20932479]" + /experiment="EXISTENCE:mutant phenotype:GO:0000973 + post-transcriptional tethering of RNA polymerase II gene + DNA at nuclear periphery [PMID:20932479]" + /experiment="EXISTENCE:mutant phenotype:GO:0016973 + poly(A)+ mRNA export from nucleus [PMID:21036941]" + /experiment="EXISTENCE:mutant phenotype:GO:0051300 spindle + pole body organization [PMID:16027220]" + /experiment="EXISTENCE:physical interaction:GO:0005816 + spindle pole body [PMID:16027220]" + /experiment="EXISTENCE:physical interaction:GO:0043021 + ribonucleoprotein complex binding [PMID:15692572]" + /note="Myosin-like protein associated with the nuclear + envelope; nuclear basket protein that connects the nuclear + pore complex with the nuclear interior; involved in the + Tel1p pathway that controls telomere length; MLP2 has a + paralog, MLP1, that arose from the whole genome + duplication" + /codon_start=1 + /product="Mlp2p" + /protein_id="NP_012117.3" + /db_xref="GeneID:854657" + /db_xref="SGD:S000001411" + /translation="MEDKISEFLNVPFESLQGVTYPVLRKLYKKIAKFERSEEEVTKL + NVLVDEIKSQYYSRISKLKQLLDESSEQKNTAKEELNGLKDQLNEERSRYRREIDALK + KQLHVSHEAMREVNDEKRVKEEYDIWQSRDQGNDSLNDDLNKENKLLRRKLMEMENIL + QRCKSNAISLQLKYDTSVQEKELMLQSKKLIEEKLSSFSKKTLTEEVTKSSHVENLEE + KLYQMQSNYESVFTYNKFLLNQNKQLSQSVEEKVLEMKNLKDTASVEKAEFSKEMTLQ + KNMNDLLRSQLTSLEKDCSLRAIEKNDDNSCRNPEHTDVIDELIDTKLRLEKSKNECQ + RLQNIVMDCTKEEEATMTTSAVSPTVGKLFSDIKVLKRQLIKERNQKFQLQNQLEDFI + LELEHKTPELISFKERTKSLEHELKRSTELLETVSLTKRKQEREITSLRQKINGCEAN + IHSLVKQRLDLARQVKLLLLNTSAIQETASPLSQDELISLRKILESSNIVNENDSQAI + ITERLVEFSNVNELQEKNVELLNCIRILADKLENYEGKQDKTLQKVENQTIKEAKDAI + IELENINAKMETRINILLRERDSYKLLASTEENKANTNSVTSMEAAREKKIRELEAEL + SSTKVENSAIIQNLRKELLIYKKSQCKKKTTLEDFENFKGLAKEKERMLEEAIDHLKA + ELEKQKSWVPSYIHVEKERASTELSQSRIKIKSLEYEISKLKKETASFIPTKESLTRD + FEQCCKEKKELQMRLKESEISHNENKMDFSSKEGQYKAKIKELENNLERLRSDLQSKI + QEIESIRSCKDSQLKWAQNTIDDTEMKMKSLLTELSNKETTIEKLSSEIENLDKELRK + TKFQYKFLDQNSDASTLEPTLRKELEQIQVQLKDANSQIQAYEEIISSNENALIELKN + ELAKTKENYDAKIELEKKEKWAREEDLSRLRGELGEIRALQPKLKEGALHFVQQSEKL + RNEVERIQKMIEKIEKMSTIVQLCKKKEMSQYQSTMKENKDLSELVIRLEKDAADCQA + ELTKTKSSLYSAQDLLDKHERKWMEEKADYERELISNIEQTESLRVENSVLIEKVDDT + AANNGDKDHLKLVSLFSNLRHERNSLETKLTTCKRELAFVKQKNDSLEKTINDLQRTQ + TLSEKEYQCSAVIIDEFKDITKEVTQVNILKENNAILQKSLKNVTEKNREIYKQLNDR + QEEISRLQRDLIQTKEQVSINSNKILVYESEMEQCKQRYQDLSQQQKDAQKKDIEKLT + NEISDLKGKLSSAENANADLENKFNRLKKQAHEKLDASKKQQAALTNELNELKAIKDK + LEQDLHFENAKVIDLDTKLKAHELQSEDVSRDHEKDTYRTLMEEIESLKKELQIFKTA + NSSSDAFEKLKVNMEKEKDRIIDERTKEFEKKLQETLNKSTSSEAEYSKDIETLKKEW + LKEYEDETLRRIKEAEENLKKRIRLPSEERIQKIISKRKEELEEEFRKKLKENAGSLT + FLDNKGSGEDAEEELWNSPSKGNSERPSAVAGFINQKNLKPQEQLKNVKNDVSFNDSQ + SMVTNKENNIVDSSAAGNKAIPTFSFGKPFFSSNTSSLQSFQNPFTASQSNINTNAPL + RTLNIQPEVAVKAAINFSNVTDLTNNSTDGAKITEIGSTSKRPIESGTSSDPDTKKVK + ESPANDQASNE" + gene <68708..>69528 + /gene="RPL40A" + /locus_tag="YIL148W" + /gene_synonym="CEP52A; UB11; UBI1" + /db_xref="GeneID:854658" + mRNA join(<68708..68715,69150..>69528) + /gene="RPL40A" + /locus_tag="YIL148W" + /gene_synonym="CEP52A; UB11; UBI1" + /product="ubiquitin-ribosomal 60S subunit protein L40A + fusion protein" + /transcript_id="NM_001179496.1" + /db_xref="GeneID:854658" + CDS join(68708..68715,69150..69528) + /gene="RPL40A" + /locus_tag="YIL148W" + /gene_synonym="CEP52A; UB11; UBI1" + /experiment="EXISTENCE:curator inference:GO:0002181 + cytoplasmic translation [PMID:22096102]" + /experiment="EXISTENCE:curator inference:GO:0003735 + structural constituent of ribosome [PMID:22096102]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic + large ribosomal subunit [PMID:22096102]" + /experiment="EXISTENCE:direct assay:GO:0042254 ribosome + biogenesis [PMID:2538753]" + /experiment="EXISTENCE:mutant phenotype:GO:0000027 + ribosomal large subunit assembly [PMID:22995916]" + /experiment="EXISTENCE:mutant phenotype:GO:0000055 + ribosomal large subunit export from nucleus + [PMID:22995916]" + /experiment="EXISTENCE:mutant phenotype:GO:0016567 protein + ubiquitination [PMID:8035826]" + /note="Ubiquitin-ribosomal 60S subunit protein L40A fusion + protein; cleaved to yield ubiquitin and ribosomal protein + L40A; ubiquitin may facilitate assembly of the ribosomal + protein into ribosomes; homologous to mammalian ribosomal + protein L40, no bacterial homolog; RPL40A has a paralog, + RPL40B, that arose from the whole genome duplication; + relative distribution to the nucleus increases upon DNA + replication stress" + /codon_start=1 + /product="ubiquitin-ribosomal 60S subunit protein L40A + fusion protein" + /protein_id="NP_012118.1" + /db_xref="GeneID:854658" + /db_xref="SGD:S000001410" + /translation="MQIFVKTLTGKTITLEVESSDTIDNVKSKIQDKEGIPPDQQRLI + FAGKQLEDGRTLSDYNIQKESTLHLVLRLRGGIIEPSLKALASKYNCDKSVCRKCYAR + LPPRATNCRKRKCGHTNQLRPKKKLK" + gene complement(<69791..>73453) + /gene="SLN1" + /locus_tag="YIL147C" + /gene_synonym="YPD2" + /db_xref="GeneID:854659" + mRNA complement(<69791..>73453) + /gene="SLN1" + /locus_tag="YIL147C" + /gene_synonym="YPD2" + /product="histidine kinase" + /transcript_id="NM_001179495.1" + /db_xref="GeneID:854659" + CDS complement(69791..73453) + /gene="SLN1" + /locus_tag="YIL147C" + /gene_synonym="YPD2" + /EC_number="2.7.13.3" + /experiment="EXISTENCE:direct assay:GO:0004673 protein + histidine kinase activity [PMID:8808622]" + /experiment="EXISTENCE:direct assay:GO:0005034 osmosensor + activity [PMID:12821642]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:10198019|PMID:14665464]" + /experiment="EXISTENCE:direct assay:GO:0007234 osmosensory + signaling via phosphorelay pathway [PMID:8808622]" + /experiment="EXISTENCE:direct assay:GO:0009927 histidine + phosphotransfer kinase activity [PMID:12455952]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0009927 + histidine phosphotransfer kinase activity [PMID:12455952]" + /note="Transmembrane histidine phosphotransfer kinase and + osmosensor; regulates MAP kinase cascade; transmembrane + protein with an intracellular kinase domain that signals + to Ypd1p and Ssk1p, thereby forming a phosphorelay system + similar to bacterial two-component regulators" + /codon_start=1 + /product="histidine kinase" + /protein_id="NP_012119.1" + /db_xref="GeneID:854659" + /db_xref="SGD:S000001409" + /translation="MRFGLPSKLELTPPFRIGIRTQLTALVSIVALGSLIILAVTTGV + YFTSNYKNLRSDRLYIAAQLKSSQIDQTLNYLYYQAYYLASRDALQSSLTSYVAGNKS + ADNWVDSLSVIQKFLSSSNLFYVAKVYDSSFNAVLNATNNGTGDLIPEDVLDSLFPLS + TDTPLPSSLETIGILTDPVLNSTDYLMSMSLPIFANPSIILTDSRVYGYITIIMSAEG + LKSVFNDTTALEHSTIAIISAVYNSQGKASGYHFVFPPYGSRSDLPQKVFSIKNDTFI + SSAFRNGKGGSLKQTNILSTRNTALGYSPCSFNLVNWVAIVSQPESVFLSPATKLAKI + ITGTVIAIGVFVILLTLPLAHWAVQPIVRLQKATELITEGRGLRPSTPRTISRASSFK + RGFSSGFAVPSSLLQFNTAEAGSTTSVSGHGGSGHGSGAAFSANSSMKSAINLGNEKM + SPPEEENKIPNNHTDAKISMDGSLNHDLLGPHSLRHNDTDRSSNRSHILTTSANLTEA + RLPDYRRLFSDELSDLTETFNTMTDALDQHYALLEERVRARTKQLEAAKIEAEAANEA + KTVFIANISHELRTPLNGILGMTAISMEETDVNKIRNSLKLIFRSGELLLHILTELLT + FSKNVLQRTKLEKRDFCITDVALQIKSIFGKVAKDQRVRLSISLFPNLIRTMVLWGDS + NRIIQIVMNLVSNALKFTPVDGTVDVRMKLLGEYDKELSEKKQYKEVYIKKGTEVTEN + LETTDKYDLPTLSNHRKSVDLESSATSLGSNRDTSTIQEEITKRNTVANESIYKKVND + REKASNDDVSSIVSTTTSSYDNAIFNSQFNKAPGSDDEEGGNLGRPIENPKTWVISIE + VEDTGPGIDPSLQESVFHPFVQGDQTLSRQYGGTGLGLSICRQLANMMHGTMKLESKV + GVGSKFTFTLPLNQTKEISFADMEFPFEDEFNPESRKNRRVKFSVAKSIKSRQSTSSV + ATPATNRSSLTNDVLPEVRSKGKHETKDVGNPNMGREEKNDNGGLEQLQEKNIKPSIC + LTGAEVNEQNSLSSKHRSRHEGLGSVNLDRPFLQSTGTATSSRNIPTVKDDDKNETSV + KILVVEDNHVNQEVIKRMLNLEGIENIELACDGQEAFDKVKELTSKGENYNMIFMDVQ + MPKVDGLLSTKMIRRDLGYTSPIVALTAFADDSNIKECLESGMNGFLSKPIKRPKLKT + ILTEFCAAYQGKKNNK" + rep_origin 73820..73991 + /note="ARS907; Autonomously replicating sequence" + /db_xref="SGD:S000178111" + gene complement(<74184..>75773) + /gene="ATG32" + /locus_tag="YIL146C" + /gene_synonym="ECM37" + /db_xref="GeneID:854660" + mRNA complement(<74184..>75773) + /gene="ATG32" + /locus_tag="YIL146C" + /gene_synonym="ECM37" + /product="mitophagy protein ATG32" + /transcript_id="NM_001179494.1" + /db_xref="GeneID:854660" + CDS complement(74184..75773) + /gene="ATG32" + /locus_tag="YIL146C" + /gene_synonym="ECM37" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:29673596]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane + [PMID:19619494|PMID:19619495]" + /experiment="EXISTENCE:genetic interaction:GO:0031930 + mitochondria-nucleus signaling pathway [PMID:30298458]" + /experiment="EXISTENCE:mutant phenotype:GO:0000422 + autophagy of mitochondrion [PMID:19619494|PMID:19619495]" + /note="Mitochondrial outer membrane protein required to + initiate mitophagy; recruits the autophagy adaptor protein + Atg11p and the ubiquitin-like protein Atg8p to the + mitochondrial surface to initiate mitophagy, the selective + vacuolar degradation of mitochondria in response to + starvation; can promote pexophagy when placed ectopically + in the peroxisomal membrane; regulates mitophagy and + ethanol production during alcoholic fermentation" + /codon_start=1 + /product="mitophagy protein ATG32" + /protein_id="NP_012120.1" + /db_xref="GeneID:854660" + /db_xref="SGD:S000001408" + /translation="MVLEYQQREGKGSSSKSMPPDSSSTTIHTCSEAQTGEDKGLLDP + HLSVLELLSKTGHSPSPMGQNLVTSIDISGNHNVNDSISGSWQAIQPLDLGASFIPER + CSSQTTNGSILSSSDTSEEEQELLQAPAADIINIIKQGQEGANVVSPSHPFKQLQKII + SLPLPGKEKTPFNEQDDDGDEDEAFEEDSVTITKSLTSSTNSFVMPKLSLTQKNPVFR + LLILGRTGSSFYQSIPKEYQSLFELPKYHDSATFPQYTGIVIIFQELREMVSLLNRIV + QYSQGKPVIPICQPGQVIQVKNVLKSFLRNKLVKLLFPPVVVTNKRDLKKMFQRLQDL + SLEYGEDVNEEDNDDEAIHTKSRSYCRNKKAENSKKKSPKSNKKPKRKKQKFFTSWFT + WGISITIGISFGCCVTYFVTAAYEHQTVKSLSLRPSILASLLSLDSSSDTINTPATAS + PSSTEQFLWFDKGTLQINFHSDGFIMKSLTIIKETWGKMNTFVLHALSKPLKFLENLN + KSSEFSIDESNRILALGYILL" + gene complement(<76354..>77283) + /gene="PAN6" + /locus_tag="YIL145C" + /db_xref="GeneID:854661" + mRNA complement(<76354..>77283) + /gene="PAN6" + /locus_tag="YIL145C" + /product="pantoate--beta-alanine ligase PAN6" + /transcript_id="NM_001179493.1" + /db_xref="GeneID:854661" + CDS complement(76354..77283) + /gene="PAN6" + /locus_tag="YIL145C" + /EC_number="6.3.2.1" + /experiment="EXISTENCE:direct assay:GO:0004592 + pantoate-beta-alanine ligase activity [PMID:10417331]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0015940 + pantothenate biosynthetic process [PMID:11154694]" + /note="Pantothenate synthase; also known as + pantoate-beta-alanine ligase, required for pantothenic + acid biosynthesis, deletion causes pantothenic acid + auxotrophy, homologous to E. coli panC" + /codon_start=1 + /product="pantoate--beta-alanine ligase PAN6" + /protein_id="NP_012121.2" + /db_xref="GeneID:854661" + /db_xref="SGD:S000001407" + /translation="MKIFHTVEEVVQWRTQELRETRFRETIGFVPTMGCLHSGHASLI + SQSVKENTYTVVSIFVNPSQFAPTEDLDNYPRTLPDDIKLLESLKVDVLFAPNAHVMY + PQGIPLDIEEQKGPFVSVLGLSEKLEGKTRPNFFRGVATVVTKLFNIVMADVAYFGQK + DIQQFIVLQCMVDELFVNTRLQMMPIVRNNNGLALSSRNKYLCPESLKISENLYRGLK + AAENAIRRLAPGGRLSRSEIIDTVTQIWAPYVDSHDFKIDYVSLADFKTLDELSDVEN + TSEQQPIVISCAVYVTDREKPDTVVRLIDNIVI" + gene <78074..>80149 + /gene="NDC80" + /locus_tag="YIL144W" + /gene_synonym="HEC1; TID3" + /db_xref="GeneID:854662" + mRNA <78074..>80149 + /gene="NDC80" + /locus_tag="YIL144W" + /gene_synonym="HEC1; TID3" + /product="kinetochore-associated Ndc80 complex subunit + NDC80" + /transcript_id="NM_001179492.3" + /db_xref="GeneID:854662" + CDS 78074..80149 + /gene="NDC80" + /locus_tag="YIL144W" + /gene_synonym="HEC1; TID3" + /experiment="EXISTENCE:direct assay:GO:0000776 kinetochore + [PMID:11511347|PMID:27170178]" + /experiment="EXISTENCE:direct assay:GO:0000779 condensed + chromosome, centromeric region [PMID:11266451]" + /experiment="EXISTENCE:direct assay:GO:0008017 microtubule + binding [PMID:17195848]" + /experiment="EXISTENCE:direct assay:GO:0031262 Ndc80 + complex [PMID:11266451|PMID:11179222]" + /experiment="EXISTENCE:mutant phenotype:GO:0000776 + kinetochore [PMID:11179222]" + /experiment="EXISTENCE:mutant phenotype:GO:0007059 + chromosome segregation [PMID:11266451]" + /experiment="EXISTENCE:mutant phenotype:GO:0034501 protein + localization to kinetochore [PMID:19893618|PMID:19952112]" + /experiment="EXISTENCE:physical interaction:GO:0031262 + Ndc80 complex [PMID:11179222]" + /note="Component of the kinetochore-associated Ndc80 + complex; conserved coiled-coil protein involved in + chromosome segregation, spindle checkpoint activity, and + kinetochore assembly and clustering; evolutionarily + conserved; complex members include Ndc80p, Nuf2p, Scp24p, + and Spc25p; modified by sumoylation" + /codon_start=1 + /product="kinetochore-associated Ndc80 complex subunit + NDC80" + /protein_id="NP_012122.3" + /db_xref="GeneID:854662" + /db_xref="SGD:S000001406" + /translation="MQSSTSTDQHVLHHMDPHRFTSQIPTATSSQLRRRNSTNQGLTD + MINKSIARNTISGTGIPTGGINKNKRTRSTVAGGTNGTALALNDKSNSRNSVSRLSIN + QLGSLQQHLSNRDPRPLRDKNFQSAIQEEIYDYLKKNKFDIETNHPISIKFLKQPTQK + GFIIIFKWLYLRLDPGYGFTKSIENEIYQILKNLRYPFLESINKSQISAVGGSNWHKF + LGMLHWMVRTNIKLDMCLNKVDRSLINQNTQEITILSQPLKTLDEQDQRQERYELMVE + KLLIDYFTESYKSFLKLEDNYEPSMQELKLGFEKFVHIINTDIANLQTQNDNLYEKYQ + EVMKISQKIKTTREKWKALKSDSNKYENYVNAMKQKSQEWPGKLEKMKSECELKEEEI + KALQSNISELHKILRKKGISTEQFELQNQEREKLTRELDKINIQSDKLTSSIKSRKLE + AEGIFKSLLDTLRQYDSSIQNLTRSRSQLGHNVNDSSLKINISENLLDRDFHEGISYE + QLFPKGSGINESIKKSILKLNDEIQERIKTIEKDNITLEKDIKNLKHDINEKTQINEK + LELELSEANSKFELSKQENERLLVAQRIEIEKMEKKINDSNLLMKTKISDAEELVTST + ELKLEELKVDLNRKRYKLHQQVIHVIDITSKFKINIQSSLENSENELGNVIEELRNLE + FETEHNVTN" + gene complement(<80510..>83041) + /gene="SSL2" + /locus_tag="YIL143C" + /gene_synonym="LOM3; RAD25" + /db_xref="GeneID:854663" + mRNA complement(<80510..>83041) + /gene="SSL2" + /locus_tag="YIL143C" + /gene_synonym="LOM3; RAD25" + /product="TFIIH/NER complex ATPase/helicase subunit SSL2" + /transcript_id="NM_001179491.1" + /db_xref="GeneID:854663" + CDS complement(80510..83041) + /gene="SSL2" + /locus_tag="YIL143C" + /gene_synonym="LOM3; RAD25" + /EC_number="3.6.4.12" + /experiment="EXISTENCE:direct assay:GO:0000112 + nucleotide-excision repair factor 3 complex + [PMID:8855246]" + /experiment="EXISTENCE:direct assay:GO:0000439 + transcription factor TFIIH core complex [PMID:7961739]" + /experiment="EXISTENCE:direct assay:GO:0003678 DNA + helicase activity [PMID:8202161]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0005675 + transcription factor TFIIH holo complex + [PMID:19818408|PMID:27381459]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0006289 + nucleotide-excision repair [PMID:8631896]" + /experiment="EXISTENCE:direct assay:GO:0006366 + transcription by RNA polymerase II [PMID:19818408]" + /experiment="EXISTENCE:direct assay:GO:0032508 DNA duplex + unwinding [PMID:22751016]" + /experiment="EXISTENCE:direct assay:GO:0097550 + transcription preinitiation complex [PMID:22751016]" + /experiment="EXISTENCE:mutant phenotype:GO:0000019 + regulation of mitotic recombination [PMID:10713167]" + /experiment="EXISTENCE:mutant phenotype:GO:0001111 RNA + polymerase II promoter clearance [PMID:10713451]" + /experiment="EXISTENCE:mutant phenotype:GO:0001113 + transcription open complex formation at RNA polymerase II + promoter [PMID:10409754]" + /experiment="EXISTENCE:mutant phenotype:GO:0001174 + transcriptional start site selection at RNA polymerase II + promoter [PMID:34652274]" + /experiment="EXISTENCE:mutant phenotype:GO:0006367 + transcription initiation at RNA polymerase II promoter + [PMID:25775526]" + /experiment="EXISTENCE:mutant phenotype:GO:0010525 + regulation of transposition, RNA-mediated [PMID:10713167]" + /experiment="EXISTENCE:mutant phenotype:GO:0015616 DNA + translocase activity [PMID:25775526]" + /experiment="EXISTENCE:mutant phenotype:GO:0016973 + poly(A)+ mRNA export from nucleus [PMID:17212653]" + /note="Component of RNA polymerase transcription factor + TFIIH holoenzyme; acts as dsDNA-dependent translocase in + context of TFIIH, unwinds DNA strands during initiation + and promotes transcription start site (TSS) scanning; has + DNA-dependent ATPase/helicase activity; interacts + functionally with TFIIB, has roles in TSS selection and + gene looping to juxtapose initiation and termination + regions; involved in DNA repair; relocalizes to cytosol + under hypoxia; homolog of human ERCC3" + /codon_start=1 + /product="TFIIH/NER complex ATPase/helicase subunit SSL2" + /protein_id="NP_012123.1" + /db_xref="GeneID:854663" + /db_xref="SGD:S000001405" + /translation="MTDVEGYQPKSKGKIFPDMGESFFSSDEDSPATDAEIDENYDDN + RETSEGRGERDTGAMVTGLKKPRKKTKSSRHTAADSSMNQMDAKDKALLQDTNSDIPA + DFVPDSVSGMFRSHDFSYLRLRPDHASRPLWISPSDGRIILESFSPLAEQAQDFLVTI + AEPISRPSHIHEYKITAYSLYAAVSVGLETDDIISVLDRLSKVPVAESIINFIKGATI + SYGKVKLVIKHNRYFVETTQADILQMLLNDSVIGPLRIDSDHQVQPPEDVLQQQLQQT + AGKPATNVNPNDVEAVFSAVIGGDNEREEEDDDIDAVHSFEIANESVEVVKKRCQEID + YPVLEEYDFRNDHRNPDLDIDLKPSTQIRPYQEKSLSKMFGNGRARSGIIVLPCGAGK + TLVGITAACTIKKSVIVLCTSSVSVMQWRQQFLQWCTLQPENCAVFTSDNKEMFQTES + GLVVSTYSMVANTRNRSHDSQKVMDFLTGREWGFIILDEVHVVPAAMFRRVVSTIAAH + AKLGLTATLVREDDKIGDLNFLIGPKLYEANWMELSQKGHIANVQCAEVWCPMTAEFY + QEYLRETARKRMLLYIMNPTKFQACQFLIQYHERRGDKIIVFSDNVYALQEYALKMGK + PFIYGSTPQQERMNILQNFQYNDQINTIFLSKVGDTSIDLPEATCLIQISSHYGSRRQ + EAQRLGRILRAKRRNDEGFNAFFYSLVSKDTQEMYYSTKRQAFLVDQGYAFKVITHLH + GMENIPNLAYASPRERRELLQEVLLKNEEAAGIEVGDDADNSVGRGSNGHKRFKSKAV + RGEGSLSGLAGGEDMAYMEYSTNKNKELKEHHPLIRKMYYKNLKK" + gene <83302..>84885 + /gene="CCT2" + /locus_tag="YIL142W" + /gene_synonym="BIN3; TCP2" + /db_xref="GeneID:854664" + mRNA <83302..>84885 + /gene="CCT2" + /locus_tag="YIL142W" + /gene_synonym="BIN3; TCP2" + /product="chaperonin-containing T-complex subunit CCT2" + /transcript_id="NM_001179490.1" + /db_xref="GeneID:854664" + CDS 83302..84885 + /gene="CCT2" + /locus_tag="YIL142W" + /gene_synonym="BIN3; TCP2" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276]" + /experiment="EXISTENCE:direct assay:GO:0005832 + chaperonin-containing T-complex [PMID:16762366]" + /experiment="EXISTENCE:direct assay:GO:0006457 protein + folding [PMID:16762366]" + /experiment="EXISTENCE:direct assay:GO:0051082 unfolded + protein binding [PMID:16762366]" + /experiment="EXISTENCE:physical interaction:GO:0005832 + chaperonin-containing T-complex [PMID:15704212]" + /note="Subunit beta of the cytosolic chaperonin Cct ring + complex; related to Tcp1p, required for the assembly of + actin and tubulins in vivo" + /codon_start=1 + /product="chaperonin-containing T-complex subunit CCT2" + /protein_id="NP_012124.1" + /db_xref="GeneID:854664" + /db_xref="SGD:S000001404" + /translation="MSVQIFGDQVTEERAENARLSAFVGAIAVGDLVKSTLGPKGMDK + LLQSASSNTCMVTNDGATILKSIPLDNPAAKVLVNISKVQDDEVGDGTTSVTVLSAEL + LREAEKLIDQSKIHPQTIIEGYRLASAAALDALTKAAVDNSHDKTMFREDLIHIAKTT + LSSKILSQDKDHFAELATNAILRLKGSTNLEHIQIIKILGGKLSDSFLDEGFILAKKF + GNNQPKRIENAKILIANTTLDTDKVKIFGTKFKVDSTAKLAQLEKAEREKMKNKIAKI + SKFGINTFINRQLIYDYPEQLFTDLGINSIEHADFEGVERLALVTGGEVVSTFDEPSK + CKLGECDVIEEIMLGEQPFLKFSGCKAGEACTIVLRGATDQTLDEAERSLHDALSVLS + QTTKETRTVLGGGCAEMVMSKAVDTEAQNIDGKKSLAVEAFARALRQLPTILADNAGF + DSSELVSKLRSSIYNGISTSGLDLNNGTIADMRQLGIVESYKLKRAVVSSASEAAEVL + LRVDNIIRARPRTANRQHM" + gene <85366..>87837 + /gene="AXL2" + /locus_tag="YIL140W" + /gene_synonym="BUD10; SRO4" + /db_xref="GeneID:854666" + mRNA <85366..>87837 + /gene="AXL2" + /locus_tag="YIL140W" + /gene_synonym="BUD10; SRO4" + /product="Axl2p" + /transcript_id="NM_001179488.1" + /db_xref="GeneID:854666" + CDS 85366..87837 + /gene="AXL2" + /locus_tag="YIL140W" + /gene_synonym="BUD10; SRO4" + /experiment="EXISTENCE:direct assay:GO:0000131 incipient + cellular bud site [PMID:8846915]" + /experiment="EXISTENCE:direct assay:GO:0000144 cellular + bud neck septin ring [PMID:8846915]" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:8846915]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:15282802]" + /experiment="EXISTENCE:direct assay:GO:0032153 cell + division site [PMID:8846915]" + /experiment="EXISTENCE:mutant phenotype:GO:0007120 axial + cellular bud site selection [PMID:8846915]" + /note="Integral plasma membrane protein; required for + axial budding in haploid cells; localizes to the incipient + bud site and bud neck; glycosylated by Pmt4p; potential + Cdc28p substrate" + /codon_start=1 + /product="Axl2p" + /protein_id="NP_012126.1" + /db_xref="GeneID:854666" + /db_xref="SGD:S000001402" + /translation="MTQLQISLLLTATISLLHLVVATPYEAYPIGKQYPPVARVNESF + TFQISNDTYKSSVDKTAQITYNCFDLPSWLSFDSSSRTFSGEPSSDLLSDANTTLYFN + VILEGTDSADSTSLNNTYQFVVTNRPSISLSSDFNLLALLKNYGYTNGKNALKLDPNE + VFNVTFDRSMFTNEESIVSYYGRSQLYNAPLPNWLFFDSGELKFTGTAPVINSAIAPE + TSYSFVIIATDIEGFSAVEVEFELVIGAHQLTTSIQNSLIINVTDTGNVSYDLPLNYV + YLDDDPISSDKLGSINLLDAPDWVALDNATISGSVPDELLGKNSNPANFSVSIYDTYG + DVIYFNFEVVSTTDLFAISSLPNINATRGEWFSYYFLPSQFTDYVNTNVSLEFTNSSQ + DHDWVKFQSSNLTLAGEVPKNFDKLSLGLKANQGSQSQELYFNIIGMDSKITHSNHSA + NATSTRSSHHSTSTSSYTSSTYTAKISSTSAAATSSAPAALPAANKTSSHNKKAVAIA + CGVAIPLGVILVALICFLIFWRRRRENPDDENLPHAISGPDLNNPANKPNQENATPLN + NPFDDDASSYDDTSIARRLAALNTLKLDNHSATESDISSVDEKRDSLSGMNTYNDQFQ + SQSKEELLAKPPVQPPESPFFDPQNRSSSVYMDSEPAVNKSWRYTGNLSPVSDIVRDS + YGSQKTVDTEKLFDLEAPEKEKRTSRDVTMSSLDPWNSNISPSPVRKSVTPSPYNVTK + HRNRHLQNIQDSQSGKNGITPTTMSTSSSDDFVPVKDGENFCWVHSMEPDRRPSKKRL + VDFSNKSNVNVGQVKDIHGRIPEML" + gene complement(<87979..>88716) + /gene="REV7" + /locus_tag="YIL139C" + /db_xref="GeneID:854667" + mRNA complement(<87979..>88716) + /gene="REV7" + /locus_tag="YIL139C" + /product="Rev7p" + /transcript_id="NM_001179487.1" + /db_xref="GeneID:854667" + CDS complement(87979..88716) + /gene="REV7" + /locus_tag="YIL139C" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:16546083]" + /experiment="EXISTENCE:direct assay:GO:0003887 + DNA-directed DNA polymerase activity [PMID:8658138]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16452144]" + /experiment="EXISTENCE:direct assay:GO:0016035 zeta DNA + polymerase complex + [PMID:8658138|PMID:23066099|PMID:22711820]" + /experiment="EXISTENCE:direct assay:GO:0042276 error-prone + translesion synthesis [PMID:11313481]" + /experiment="EXISTENCE:direct assay:GO:0070987 error-free + translesion synthesis [PMID:12514101]" + /experiment="EXISTENCE:genetic interaction:GO:0042276 + error-prone translesion synthesis [PMID:9765213]" + /experiment="EXISTENCE:mutant phenotype:GO:0042276 + error-prone translesion synthesis [PMID:3897795]" + /note="Accessory subunit of DNA polymerase zeta (pol + zeta); involved in translesion synthesis during + post-replication repair; required for mutagenesis induced + by DNA damage; involved in double-strand break repair; may + be involved in meiosis; forms a complex with Rev3p, Pol31p + and Pol32p" + /codon_start=1 + /product="Rev7p" + /protein_id="NP_012127.1" + /db_xref="GeneID:854667" + /db_xref="SGD:S000001401" + /translation="MNRWVEKWLRVYLKCYINLILFYRNVYPPQSFDYTTYQSFNLPQ + FVPINRHPALIDYIEELILDVLSKLTHVYRFSICIINKKNDLCIEKYVLDFSELQHVD + KDDQIITETEVFDEFRSSLNSLIMHLEKLPKVNDDTITFEAVINAIELELGHKLDRNR + RVDSLEEKAEIERDSNWVKCQEDENLPDNNGFQPPKIKLTSLVGSDVGPLIIHQFSEK + LISGDDKILNGVYSQYEEGESIFGSLF" + gene complement(<89230..>89715) + /gene="TPM2" + /locus_tag="YIL138C" + /db_xref="GeneID:854668" + mRNA complement(<89230..>89715) + /gene="TPM2" + /locus_tag="YIL138C" + /product="tropomyosin TPM2" + /transcript_id="NM_001179486.3" + /db_xref="GeneID:854668" + CDS complement(89230..89715) + /gene="TPM2" + /locus_tag="YIL138C" + /experiment="EXISTENCE:direct assay:GO:0000142 cellular + bud neck contractile ring [PMID:9864365]" + /experiment="EXISTENCE:direct assay:GO:0003786 actin + lateral binding [PMID:11457840]" + /experiment="EXISTENCE:direct assay:GO:0005884 actin + filament [PMID:7844152]" + /experiment="EXISTENCE:direct assay:GO:0032432 actin + filament bundle [PMID:9864365]" + /experiment="EXISTENCE:direct assay:GO:1904530 negative + regulation of actin filament binding [PMID:7844152]" + /experiment="EXISTENCE:genetic interaction:GO:0051017 + actin filament bundle assembly [PMID:9864365]" + /experiment="EXISTENCE:genetic interaction:GO:1903475 + mitotic actomyosin contractile ring assembly + [PMID:12419188]" + /experiment="EXISTENCE:mutant phenotype:GO:0000282 + cellular bud site selection [PMID:7844152]" + /note="Minor isoform of tropomyosin; binds to and + stabilizes actin cables and filaments, which direct + polarized cell growth and the distribution of several + organelles; appears to have distinct and also overlapping + functions with Tpm1p; TPM2 has a paralog, TPM1, that arose + from the whole genome duplication" + /codon_start=1 + /product="tropomyosin TPM2" + /protein_id="NP_012128.3" + /db_xref="GeneID:854668" + /db_xref="SGD:S000001400" + /translation="MEKIKEKLNSLKLESESWQEKYEELREQLKELEQSNTEKENEIK + SLSAKNEQLDSEVEKLESQLSDTKQLAEDSNNLRSNNENYTKKNQDLEQQLEDSEAKL + KEAMDKLKEADLNSEQMGRRIVALEEERDEWEKKCEEFQSKYEEAQKELDEIANSLEN + L" + gene complement(<89948..>92788) + /gene="TMA108" + /locus_tag="YIL137C" + /gene_synonym="TAE3" + /db_xref="GeneID:854669" + mRNA complement(<89948..>92788) + /gene="TMA108" + /locus_tag="YIL137C" + /gene_synonym="TAE3" + /product="Tma108p" + /transcript_id="NM_001179485.1" + /db_xref="GeneID:854669" + CDS complement(89948..92788) + /gene="TMA108" + /locus_tag="YIL137C" + /gene_synonym="TAE3" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005854 nascent + polypeptide-associated complex [PMID:27580715]" + /experiment="EXISTENCE:direct assay:GO:1990593 nascent + polypeptide-associated complex binding [PMID:27580715]" + /experiment="EXISTENCE:genetic interaction:GO:0042254 + ribosome biogenesis [PMID:20691087]" + /experiment="EXISTENCE:mutant phenotype:GO:0042254 + ribosome biogenesis [PMID:20691087]" + /experiment="EXISTENCE:mutant phenotype:GO:2000765 + regulation of cytoplasmic translation [PMID:27580715]" + /note="Ribosome-associated, nascent chain binding factor; + binds N-terminal region of nascent peptides during + translation; recognizes target proteins via its putative + metallopeptidase peptide-binding pocket" + /codon_start=1 + /product="Tma108p" + /protein_id="NP_012129.1" + /db_xref="GeneID:854669" + /db_xref="SGD:S000001399" + /translation="MSDNLLSLENPVVPSHYELRLEIDPKQSSPNFKGSAIIHLKFNP + NSTTLASIEDSFTQFKLHSKDLIVLSAHATIGSTKFDLKISQDTGKHLSIFNSESPIQ + LSNDCPLILSVQYVGKIRDIKTHHDKTFGIFKTNFMDRKTGTANNHVVATHCQPFSAS + NIFPCIDEPSNKSTFQLNIATDAQYKAVSNTPVEMVEALDSSQKHLVKFAKTPLMTTS + VFGFSIGDLEFLKTEIKLEGDRTIPVSIYAPWDIANAAFTLDTVQKYLPLLESYFKCP + YPLPKLDFVLLPYLSDMAMENFGMITIQLNHLLIPPNALANETVREQAQQLIVHELVH + QWMGNYISFDSWESLWFNESFATWLACHILEQNGDLSHYWTSEPYLLQQVEPTMCRDA + ADVNGRSIFQIAQRNTGIDSQTSDIFDPEAYTKGIIMLRSLQLATGESHLQKGLESVF + EDTKTFHARSVKPMDIWNHIGKFLKSQNITNFVSSWTRTPGLPVVKVEVEEKDGKTQT + KLTQHRFINQLSTEEKDQLEDVPYQVPLFGVLPDGKMDTKNVLLTDRTLKFDYPILVI + NHLAQGYYRVSYESEECYALINDKITEETLSEIDLRKIFLDLSQFIGDEGFQNSIHLH + GLFKILNHIASPSTKIASKYWDPLSKGLEVLQTIDRASLTSSKLQSFLKKKIVIPLFN + KIDWPHGEFDKSTNPHELKVMSQVLFLNKNSAKCAELCQIYFKHLLQGPRSSVPLELV + NSILVVVSQHCANIKQWKKIFDLVKRSSCTGITNHVINMYDQNSSETAMLIQNGAIES + LGFCLDSDIVKKTLNFITSNIESEGMELALFGFNYNFKKRLNKNEKPQDQVVRETIWE + WYMGNFDQWARKATRKGTTTGDHLHKALRSISLIIFQMFVADEPQKIEKFINLEKEKL + GQSLLSLDDIWASVQQDEESRKTIRRDLASLV" + gene <93619..>94800 + /gene="OM45" + /locus_tag="YIL136W" + /db_xref="GeneID:854670" + mRNA <93619..>94800 + /gene="OM45" + /locus_tag="YIL136W" + /product="Om45p" + /transcript_id="NM_001179484.1" + /db_xref="GeneID:854670" + CDS 93619..94800 + /gene="OM45" + /locus_tag="YIL136W" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:11502169|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane + [PMID:11179417|PMID:16407407|PMID:16689936]" + /note="Mitochondrial outer membrane hypothetical protein; + major constituent of the outer membrane, extending into + the intermembrane space; interacts with porin (Por1p) and + with Om14p; imported via the presequence pathway involving + the TOM and TIM23 complexes, then assembled in the outer + membrane by Mim1p; protein abundance increases in response + to DNA replication stress" + /codon_start=1 + /product="Om45p" + /protein_id="NP_012130.1" + /db_xref="GeneID:854670" + /db_xref="SGD:S000001398" + /translation="MSSRIIVGSAALAAAITASIMVREQKAKGQRREGNVSAYYNGQE + YGSSAPPQLGKLHNIKQGIKEDALSLKDALLGVSQKAREEAPKVTKRVISPEEDAQTR + KQLGQKAKDSSSQSIFNWGFSEAERRKAIAIGEFDTAKKRFEEAVDRNEKELLSTVMR + EKKAALDRASIEYERYGRARDFNELSDKLDQQERNSNPLKRLLKNNTGDANTEEAAAR + SVQGWGDTAQEFGREELEEAKRNASSEPSEAQKRLDELKKIKEKGWFGYNKGEQSEQQ + IAERVARGLEGWGETAAQLSKDEMDDLRWNYENSKKQLDKNVSDAMDSLSKAKEDLKQ + YGSHWWSGWTSKVDNDKQALKDEAQKKYDEALKKYDEAKNKFKEWNDKGDGKFWSSKK + D" + gene complement(<95065..>96375) + /gene="VHS2" + /locus_tag="YIL135C" + /db_xref="GeneID:854671" + mRNA complement(<95065..>96375) + /gene="VHS2" + /locus_tag="YIL135C" + /product="Vhs2p" + /transcript_id="NM_001179483.1" + /db_xref="GeneID:854671" + CDS complement(95065..96375) + /gene="VHS2" + /locus_tag="YIL135C" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095|PMID:16816427]" + /experiment="EXISTENCE:genetic interaction:GO:0030950 + establishment or maintenance of actin cytoskeleton + polarity [PMID:16816427]" + /experiment="EXISTENCE:genetic interaction:GO:0032186 + cellular bud neck septin ring organization + [PMID:24646733]" + /experiment="EXISTENCE:mutant phenotype:GO:0032186 + cellular bud neck septin ring organization + [PMID:24646733]" + /note="Regulator of septin dynamics; involved in the + regulation of septin dynamics at bud neck after mitotic + entry, likely by stabilizing septin structure; regulated + at post-translational level by cell cycle dependent + phosphorylation; likely phosphorylated by Cdc28p and + dephosphorylated by Cdc14p before cytokinesis; high-copy + suppressor of synthetic lethality of sis2 sit4 double + mutant; VHS2 has a paralog, MLF3, that arose from the + whole genome duplication" + /codon_start=1 + /product="Vhs2p" + /protein_id="NP_012131.1" + /db_xref="GeneID:854671" + /db_xref="SGD:S000001397" + /translation="MDTSNHNQDHDSHVAAQRENDNNYMPPSPSMSESSMIFERNVED + PSYLYKTVSNNAANSLSRQSSRTSLFNHNNSSNRNFHNLSQRSSAVNLHLQPSRTNES + IASYQTYNPDFVVQTPLDHRRTLENFVPPALDAGCSIVTDDTTGLDDVDMVYSRRPST + IGLDRALGRTRSLSSQSFDNETSPAHPRSPNDHGSRLLRFYSYADMLSDDNNNNVSNA + TSTSSTANPLRRPPMQGHYSFSSSLLNSPSHLPSPPSASASPPQHMNFTNPFIISRRY + SNTTINNANGGTSAGSTTGAALSRSPSNQQYLLKQQRSPSGSARSRRNSNRPGSAANI + MIGKPKSKFHMESSGSEGFSSEEEDNTMIERDKLNLKQKLQSQLAQPPSIANMVNDNH + NNTNKHKNTINNNIKNSPAFTNSNPSSKSNSNSTITSMNPDTTK" + gene complement(<96522..>96725) + /locus_tag="YIL134C-A" + /db_xref="GeneID:1466491" + mRNA complement(<96522..>96725) + /locus_tag="YIL134C-A" + /product="uncharacterized protein" + /transcript_id="NM_001184555.1" + /db_xref="GeneID:1466491" + CDS complement(96522..96725) + /locus_tag="YIL134C-A" + /note="hypothetical protein; identified by fungal homology + and RT-PCR" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_878096.1" + /db_xref="GeneID:1466491" + /db_xref="SGD:S000028556" + /translation="MVVGSEFNNTADVDVVAILLTLLNADYFVIKQRLVSACFTKRIK + WYFIYAIALLSLFSSRNTVCAPY" + gene 97111..97246 + /gene="SNR68" + /locus_tag="YNCI0001W" + /db_xref="GeneID:9164907" + ncRNA 97111..97246 + /ncRNA_class="snoRNA" + /gene="SNR68" + /locus_tag="YNCI0001W" + /product="SNR68" + /experiment="EXISTENCE:curator inference:GO:0005730 + nucleolus [PMID:10024243]" + /experiment="EXISTENCE:curator inference:GO:0031428 box + C/D RNP complex [PMID:10024243]" + /experiment="EXISTENCE:mutant phenotype:GO:0030562 rRNA + 2'-O-ribose methylation guide activity [PMID:10024243]" + /experiment="EXISTENCE:mutant phenotype:GO:0031167 rRNA + methylation [PMID:10024243]" + /note="C/D box small nucleolar RNA (snoRNA); guides + 2'-O-methylation of large subunit (LSU) rRNA at position + A2640" + /transcript_id="NR_132190.1" + /db_xref="GeneID:9164907" + /db_xref="SGD:S000006459" + gene <97395..>98330 + /gene="FLX1" + /locus_tag="YIL134W" + /db_xref="GeneID:854672" + mRNA <97395..>98330 + /gene="FLX1" + /locus_tag="YIL134W" + /product="flavin adenine dinucleotide transporter FLX1" + /transcript_id="NM_001179482.3" + /db_xref="GeneID:854672" + CDS 97395..98330 + /gene="FLX1" + /locus_tag="YIL134W" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:14576278|PMID:16823961|PMID:26928762|PMID:8631763]" + /experiment="EXISTENCE:mutant phenotype:GO:0015230 FAD + transmembrane transporter activity + [PMID:14555654|PMID:8631763]" + /experiment="EXISTENCE:mutant phenotype:GO:0015883 FAD + transport [PMID:14555654]" + /note="Mitochondrial flavin adenine dinucleotide + transporter; FAD is a synthesis product of riboflavin; + human homolog SLC25A32 is implicated in multiple acyl-CoA + dehydrogenase deficiency (MADD) or glutaric aciduria type + II (GAII), and can complement yeast null mutant" + /codon_start=1 + /product="flavin adenine dinucleotide transporter FLX1" + /protein_id="NP_012132.3" + /db_xref="GeneID:854672" + /db_xref="SGD:S000001396" + /translation="MVDHQWTPLQKEVISGLSAGSVTTLVVHPLDLLKVRLQLSATSA + QKAHYGPFMVIKEIIRSSANSGRSVTNELYRGLSINLFGNAIAWGVYFGLYGVTKELI + YKSVAKPGETQLKGVGNDHKMNSLIYLSAGASSGLMTAILTNPIWVIKTRIMSTSKGA + QGAYTSMYNGVQQLLRTDGFQGLWKGLVPALFGVSQGALYFAVYDTLKQRKLRRKREN + GLDIHLTNLETIEITSLGKMVSVTLVYPFQLLKSNLQSFRANEQKFRLFPLIKLIIAN + DGFVGLYKGLSANLVRAIPSTCITFCVYENLKHRL" + gene complement(<98527..>99416) + /gene="RPL16A" + /locus_tag="YIL133C" + /gene_synonym="RPL13" + /db_xref="GeneID:854673" + mRNA complement(join(<98527..99095,99386..>99416)) + /gene="RPL16A" + /locus_tag="YIL133C" + /gene_synonym="RPL13" + /product="ribosomal 60S subunit protein L16A" + /transcript_id="NM_001179481.1" + /db_xref="GeneID:854673" + CDS complement(join(98527..99095,99386..99416)) + /gene="RPL16A" + /locus_tag="YIL133C" + /gene_synonym="RPL13" + /experiment="EXISTENCE:curator inference:GO:0002181 + cytoplasmic translation [PMID:11983894]" + /experiment="EXISTENCE:curator inference:GO:0003735 + structural constituent of ribosome [PMID:11983894]" + /experiment="EXISTENCE:direct assay:GO:0003723 RNA binding + [PMID:6337137]" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:27374275]" + /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic + large ribosomal subunit [PMID:11983894]" + /experiment="EXISTENCE:mutant phenotype:GO:0000470 + maturation of LSU-rRNA [PMID:27374275]" + /note="Ribosomal 60S subunit protein L16A; N-terminally + acetylated, binds 5.8 S rRNA; transcriptionally regulated + by Rap1p; homologous to mammalian ribosomal protein L13A + and bacterial L13; RPL16A has a paralog, RPL16B, that + arose from the whole genome duplication; protein abundance + increases in response to DNA replication stress" + /codon_start=1 + /product="ribosomal 60S subunit protein L16A" + /protein_id="NP_012133.1" + /db_xref="GeneID:854673" + /db_xref="SGD:S000001395" + /translation="MSVEPVVVIDGKGHLVGRLASVVAKQLLNGQKIVVVRAEELNIS + GEFFRNKLKYHDFLRKATAFNKTRGPFHFRAPSRIFYKALRGMVSHKTARGKAALERL + KVFEGIPPPYDKKKRVVVPQALRVLRLKPGRKYTTLGKLSTSVGWKYEDVVAKLEAKR + KVSSAEYYAKKRAFTKKVASANATAAESDVAKQLAALGY" + gene complement(<99860..>100501) + /gene="CSM2" + /locus_tag="YIL132C" + /db_xref="GeneID:854674" + mRNA complement(<99860..>100501) + /gene="CSM2" + /locus_tag="YIL132C" + /product="Csm2p" + /transcript_id="NM_001179480.1" + /db_xref="GeneID:854674" + CDS complement(99860..100501) + /gene="CSM2" + /locus_tag="YIL132C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0097196 Shu complex + [PMID:23575680]" + /experiment="EXISTENCE:genetic interaction:GO:0000725 + recombinational repair [PMID:15654096]" + /experiment="EXISTENCE:genetic interaction:GO:0043007 + maintenance of rDNA [PMID:21372173]" + /experiment="EXISTENCE:mutant phenotype:GO:0000725 + recombinational repair [PMID:23575680]" + /experiment="EXISTENCE:mutant phenotype:GO:0000730 DNA + recombinase assembly [PMID:23575680]" + /experiment="EXISTENCE:mutant phenotype:GO:0035861 site of + double-strand break [PMID:23575680]" + /experiment="EXISTENCE:mutant phenotype:GO:0045132 meiotic + chromosome segregation [PMID:11470404]" + /experiment="EXISTENCE:physical interaction:GO:0097196 Shu + complex [PMID:15654096]" + /note="Subunit of the Shu complex (aka PCSS complex); Shu + complex also includes Psy3, Shu1, Shu2, and promotes + error-free DNA repair; Shu complex mediates inhibition of + Srs2p anti-recombinase function; promotes formation of + Rad51p filaments; Psy3p and Csm2p contain similar + DNA-binding regions which work together to form a single + DNA binding site; required for accurate chromosome + segregation during meiosis" + /codon_start=1 + /product="Csm2p" + /protein_id="NP_012134.1" + /db_xref="GeneID:854674" + /db_xref="SGD:S000001394" + /translation="MEYEDLELITIWPSPTKNKLCQFIKQNLSKEHVVTQLFFIDATS + SFPLSQFQKLVPPTLPENVRIYENIRINTCLDLEELSAITVKLLQILSMNKINAQRGT + EDAVTEPLKIILYINGLEVMFRNSQFKSSPQRSHELLRDTLLKLRVMGNDENENASIR + TLLEFPKEQLLDYYLKKNNNTRTSSVRSKRRRIKNGDSLAEYIWKYYADSLFE" + gene complement(<100781..>102235) + /gene="FKH1" + /locus_tag="YIL131C" + /db_xref="GeneID:854675" + mRNA complement(<100781..>102235) + /gene="FKH1" + /locus_tag="YIL131C" + /product="forkhead family transcription factor FKH1" + /transcript_id="NM_001179479.1" + /db_xref="GeneID:854675" + CDS complement(100781..102235) + /gene="FKH1" + /locus_tag="YIL131C" + /experiment="EXISTENCE:direct assay:GO:0000978 RNA + polymerase II cis-regulatory region sequence-specific DNA + binding [PMID:10894548|PMID:11562353]" + /experiment="EXISTENCE:direct assay:GO:0001227 DNA-binding + transcription repressor activity, RNA polymerase + II-specific [PMID:10894548]" + /experiment="EXISTENCE:direct assay:GO:0001228 DNA-binding + transcription activator activity, RNA polymerase + II-specific [PMID:10894548|PMID:11562353]" + /experiment="EXISTENCE:direct assay:GO:0003682 chromatin + binding [PMID:24504085]" + /experiment="EXISTENCE:direct assay:GO:0003688 DNA + replication origin binding [PMID:22265405|PMID:24504085]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10747051|PMID:20847055|PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0019237 centromeric + DNA binding [PMID:10683251]" + /experiment="EXISTENCE:direct assay:GO:0043565 + sequence-specific DNA binding + [PMID:24504085|PMID:19158363]" + /experiment="EXISTENCE:genetic interaction:GO:0001227 + DNA-binding transcription repressor activity, RNA + polymerase II-specific [PMID:10894548]" + /experiment="EXISTENCE:genetic interaction:GO:0001228 + DNA-binding transcription activator activity, RNA + polymerase II-specific [PMID:10894548|PMID:11562353]" + /experiment="EXISTENCE:genetic interaction:GO:0006338 + chromatin remodeling [PMID:17283050]" + /experiment="EXISTENCE:genetic interaction:GO:0006369 + termination of RNA polymerase II transcription + [PMID:12702877]" + /experiment="EXISTENCE:genetic interaction:GO:0007535 + donor selection [PMID:12183363|PMID:16809780]" + /experiment="EXISTENCE:genetic interaction:GO:0034244 + negative regulation of transcription elongation by RNA + polymerase II [PMID:12702877]" + /experiment="EXISTENCE:genetic interaction:GO:0071930 + negative regulation of transcription involved in G1/S + transition of mitotic cell cycle + [PMID:10894548|PMID:17898805]" + /experiment="EXISTENCE:genetic interaction:GO:0090055 + positive regulation of silent mating-type cassette + heterochromatin formation [PMID:10747051|PMID:18045995]" + /experiment="EXISTENCE:genetic interaction:GO:0090282 + positive regulation of transcription involved in G2/M + transition of mitotic cell cycle + [PMID:11562353|PMID:10747051|PMID:10894548|PMID:10959837]" + /experiment="EXISTENCE:genetic interaction:GO:2000221 + negative regulation of pseudohyphal growth + [PMID:10747051|PMID:10894548]" + /experiment="EXISTENCE:mutant phenotype:GO:0006338 + chromatin remodeling [PMID:17283050]" + /experiment="EXISTENCE:mutant phenotype:GO:0006369 + termination of RNA polymerase II transcription + [PMID:12702877]" + /experiment="EXISTENCE:mutant phenotype:GO:0007535 donor + selection [PMID:12183363|PMID:16809780|PMID:27257873]" + /experiment="EXISTENCE:mutant phenotype:GO:0031124 mRNA + 3'-end processing [PMID:12702877]" + /experiment="EXISTENCE:mutant phenotype:GO:0032298 + positive regulation of DNA-templated DNA replication + initiation [PMID:22265405]" + /experiment="EXISTENCE:mutant phenotype:GO:0034244 + negative regulation of transcription elongation by RNA + polymerase II [PMID:12702877]" + /experiment="EXISTENCE:mutant phenotype:GO:0090055 + positive regulation of silent mating-type cassette + heterochromatin formation [PMID:10747051]" + /experiment="EXISTENCE:mutant phenotype:GO:0090419 + negative regulation of transcription involved in G2/M + transition of mitotic cell cycle + [PMID:10747051|PMID:18045995]" + /experiment="EXISTENCE:mutant phenotype:GO:1903468 + positive regulation of DNA replication initiation + [PMID:26728715]" + /note="Forkhead family transcription factor; rate-limiting + replication origin activator; evolutionarily conserved + lifespan regulator; binds multiple chromosomal elements + with distinct specificities, cell cycle dynamics; + regulates transcription elongation, chromatin silencing at + mating loci, expression of G2/M phase genes; facilitates + clustering, activation of early-firing replication + origins; binds HML recombination enhancer, regulates donor + preference during mating-type switching" + /codon_start=1 + /product="forkhead family transcription factor FKH1" + /protein_id="NP_012135.1" + /db_xref="GeneID:854675" + /db_xref="SGD:S000001393" + /translation="MSVTSREQKFSGKYSSYTAQDRQGLVNAVTCVLSSSSDPVAVSS + DYSNSLSIAREVNAYAKIAGCDWTYYVQKLEVTIGRNTDSLNLNAVPGTVVKKNIDID + LGPAKIVSRKHAAIRFNLESGSWELQIFGRNGAKVNFRRIPTGPDSPPTVLQSGCIID + IGGVQMIFILPEQETIISDYCLNHLMPKLLSTYGTNGNNNPLLRNIIEGSTYLREQRL + QEEARLQQLDHLHTPLSSSSDVNPIGDPHGDTIMMEEDEEDENYTRGGIRPNTYTSSS + NNAVTNGNVPHIENPSDLSLDENRYIKPPQSYASMITQAILSTPEGSISLADIYKFIS + DNYAFYRFSQMAWQNSVRHNLSLNKAFEKVPKRAGQQGKGMNWKISDEVRRDFLNKWN + AGKLSKIRRGASVTRQLQLHMSKFGEIPAPESSSIDPRGIKAQKVKKSLQATSSILGE + SAPQLQRTQLTGQISTTTSMDVTTNANVNNSSLS" + gene <102782..>105676 + /gene="ASG1" + /locus_tag="YIL130W" + /db_xref="GeneID:854676" + mRNA <102782..>105676 + /gene="ASG1" + /locus_tag="YIL130W" + /product="Asg1p" + /transcript_id="NM_001179478.1" + /db_xref="GeneID:854676" + CDS 102782..105676 + /gene="ASG1" + /locus_tag="YIL130W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0043565 + sequence-specific DNA binding + [PMID:19111667|PMID:19158363]" + /note="Zinc cluster protein proposed to be a + transcriptional regulator; regulator involved in the + stress response; regulates utilization of fatty acids and + accumulation of lipids" + /codon_start=1 + /product="Asg1p" + /protein_id="NP_012136.1" + /db_xref="GeneID:854676" + /db_xref="SGD:S000001392" + /translation="MPEQAQQGEQSVKRRRVTRACDECRKKKVKCDGQQPCIHCTVYS + YECTYKKPTKRTQNSGNSGVLTLGNVTTGPSSSTVVAAAASNPNKLLSNIKTERAILP + GASTIPASNNPSKPRKYKTKSTRLQSKIDRYKQIFDEVFPQLPDIDNLDIPVFLQIFH + NFKRDSQSFLDDTVKEYTLIVNDSSSPIQPVLSSNSKNSTPDEFLPNMKSDSNSASSN + REQDSVDTYSNIPVGREIKIILPPKAIALQFVKSTWEHCCVLLRFYHRPSFIRQLDEL + YETDPNNYTSKQMQFLPLCYAAIAVGALFSKSIVSNDSSREKFLQDEGYKYFIAARKL + IDITNARDLNSIQAILMLIIFLQCSARLSTCYTYIGVAMRSALRAGFHRKLSPNSGFS + PIEIEMRKRLFYTIYKLDVYINAMLGLPRSISPDDFDQTLPLDLSDENITEVAYLPEN + QHSVLSSTGISNEHTKLFLILNEIISELYPIKKTSNIISHETVTSLELKLRNWLDSLP + KELIPNAENIDPEYERANRLLHLSFLHVQIILYRPFIHYLSRNMNAENVDPLCYRRAR + NSIAVARTVIKLAKEMVSNNLLTGSYWYACYTIFYSVAGLLFYIHEAQLPDKDSAREY + YDILKDAETGRSVLIQLKDSSMAASRTYNLLNQIFEKLNSKTIQLTALHSSPSNESAF + LVTNNSSALKPHLGDSLQPPVFFSSQDTKNSFSLAKSEESTNDYAMANYLNNTPISEN + PLNEAQQQDQVSQGTTNMSNERDPNNFLSIDIRLDNNGQSNILDATDDVFIRNDGDIP + TNSAFDFSSSKSNASNNSNPDTINNNYNNVSGKNNNNNNITNNSNNNHNNNNNDNNNN + NNNNNNNNNNNNNSGNSSNNNNNNNNNKNNNDFGIKIDNNSPSYEGFPQLQIPLSQDN + LNIEDKEEMSPNIEIKNEQNMTDSNDILGVFDQLDAQLFGKYLPLNYPSE" + rep_origin 105870..106053 + /note="ARS909; Autonomously Replicating Sequence" + /db_xref="SGD:S000118394" + gene complement(<106107..>113237) + /gene="TAO3" + /locus_tag="YIL129C" + /gene_synonym="PAG1" + /db_xref="GeneID:854677" + mRNA complement(<106107..>113237) + /gene="TAO3" + /locus_tag="YIL129C" + /gene_synonym="PAG1" + /product="Tao3p" + /transcript_id="NM_001179477.3" + /db_xref="GeneID:854677" + CDS complement(106107..113237) + /gene="TAO3" + /locus_tag="YIL129C" + /gene_synonym="PAG1" + /experiment="EXISTENCE:direct assay:GO:0000131 incipient + cellular bud site [PMID:11854408]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005933 cellular + bud [PMID:12972564]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:12972564]" + /experiment="EXISTENCE:genetic interaction:GO:0007118 + budding cell apical bud growth [PMID:12972564]" + /experiment="EXISTENCE:mutant phenotype:GO:0000902 cell + morphogenesis [PMID:11854408]" + /experiment="EXISTENCE:mutant phenotype:GO:0007114 cell + budding [PMID:11854408]" + /experiment="EXISTENCE:mutant phenotype:GO:0007118 budding + cell apical bud growth [PMID:12972564]" + /note="Component of the RAM signaling network; is involved + in regulation of Ace2p activity and cellular + morphogenesis, interacts with protein kinase Cbk1p and + also with Kic1p" + /codon_start=1 + /product="Tao3p" + /protein_id="NP_012137.3" + /db_xref="GeneID:854677" + /db_xref="SGD:S000001391" + /translation="MASRFTFPPQRDQGIGFTFPPTNKAEGSSNNNQISIDIDPSGQD + VLEEINEAPLNTFPLHQSVTDAPIIDIPSPTDMSEGTSLNNQLLLRQQQQQGTGEGQA + LPPTFVEEQSDQNKISMLLPEQKQQRMQESAPPDITAKSVAEDYVTTLRQQMATDWKS + PSEYALHILFTKFIRYAENKLNMCLQQLDMAEPPIVEILGEGVDPSFDEIIKSLGHIA + KKKPKPVIDAMMFWRKTKSEAANSASEEMEKLLKEYEFEKAHPSQAHFLMNRRLSRSS + SNTTSKYKHNNNTNNLPGMKRHVSSSFNNKVPLIKASSSNNSATSSPSIANSQLKSLE + NTIEVAKEEAFLADRKSLISIYILCRVLNEIVKQASSNEEEDLSDKLEEIVFTQLKTT + DPLSISTSLIKSSNWNSFAELLGSMSEKKFLSVSDRFIADLEKIPAYIPPELEPSTHL + LILGMRYLKLRNYPLEKFEESADFMKSLSKFFAKTENFPVCLAYAEVTNQLLLPLAGS + LTAEVNHPTWVEAMSTLLNTAKRLQADSKYWVSGFKLTVSILCASPPDLFSKQWLSLL + EANASKVKSKSLNERIIFAVGLSRLVWVYLYRCPETLNNTTRTLTKLLQLYLNTRKKE + NWITGDFGLLNPLTDALISIGFLHPNFLMEQALIPLIRQSFNGSNLENINYEKLILTI + NTYKGLLVTKERPRFPEDDNRLYELNLNNITVNQVQEASSINHTEISDYFYKLFLLLD + SSIGSEVWSPENQHQKQSSNAFSPFGFSFSNDNDSSKNKSLYVILFGTIIEAIPCCLS + ISRTIPYKSTIEILSRNAVHSEVIISSSSQNALRALASKKNPYTLITWFAKYSFDFDE + KTQSSYNMSYLSSKEYNRLLILYVELLECWLEEFQSSNKEENKKETGLDGIRLLPIDA + EQEESNETEKLEWKNTVTVIEEVEGNGLFFLCSHDAKIRRLGIQILRIIFKFDEAMME + KTEKLSNGHSRSSSHFAADRGTRLIDLLNECNTTTLINPHKATLSAVEKTRFSRLNSK + YKRGLLIKLAESEYGVDAALWQRAFPKLLALVFKTCPMAMALCRSIVCIRLVQVHEII + LRVANDVDFKLKNVLPETIVNQWKLYLIAACTSLTSTFDQKLHIPSNIPQHGRKKSQQ + IFTVQHQKIKSAKSIFKMVLPLLNAKYIMIRDAIITGLSSMNINIFKAYVEAIDVFLV + AWKEGSSNNQIRVEMFHILTILSPYLKSDMIFNDEWILRKLSEFLQKTKQFLEKDSVQ + ISYEYQSLRSYFAGLILSYYMAVREHPLIDELFPFQARASCFNFLKEWCGYGEYEPIS + EERYAIMIKNTESGRDRTAITTGIEFQKNRLQMIVLETMVVLCSDPITQTLDDDLELP + IVISFDTEDLLAWIEALFDSDNTTVKNLGVRALENLLDKNRENFKLFRDVAFQCVSHH + SHPSVAVLYYTTLCKSVLKLDNLVLDEDELVSLGLYGLVADKEDTRTFAVDLLSAVET + KLHNSSYTKVFKERLANSSKTVYKSTAKEISSIFAELLSQDLCLRIFSSLVRILDLFP + FEIKRDLLVLMVPWVNKFTLKSLEELDTFMVLNNLFYITIDLNDSLPNEVEQLWISLG + KGNSFQNIHVSLEYIINSSMNHCNPLFVQYARDIVLYLANIPGGIGLLDTLLNNLEPK + YMVPLAKHTFNEPMNNNKYSFLGNIWERLNYNGKRIIFSKAQLSIIFLVNLLTNLSES + VKAKIPLLLHMSICLLDHYVPLIHESACKIASTLIFGLAPSHEKSEETVKLLRNKHAL + WSYDNLMKKGARSPKTMDLLIRNIISIFSDLDEFQVTWQRIALKWATTCSVRHIACRS + FQIFRSLLTFLDQEMLRDMLHRLSNTISDGNVDIQGFAMQILMTLNAIMAELDPTNLI + SFPQLFWSITACLSSIHEQEFIEVLSCLSKFISKIDLDSPDTVQCLVAIFPSNWEGRF + DGLQQIVMTGLRSANSLEITWKFLDKLNLLKDSRIIANTESRLLFALIANLPRFLNAM + DRKDFTGIQVAADSLIELANAYKQPSLSRLIDSLAKNKFRSKKDFMSQVVSFISRNYF + PSYSAQTLVFLLGLLFNKIGWIRVQTLEILKYVFPLIDLRRPEFIGVGADLISPLLRL + LFTEYEAKALEVLDCVPNVSGSKMDKDVLRITMGNKDVKDGDNATTTLFGLPEDSGWS + VPMPTMTAATTRHNVHAVFMTCGTGKSDEVSAHGSDDMDAVIEFHADGDYELGRMDTI + VEFHADGDYDLGRMDTNDSISVAEEKDASLSHMWAELDNLDSFFTKDTNVPNISSKMG + MGIPHGRSDSIETTRTDQTFSFESAPQLYDKKVSVILNRSLSRTPSNVSFKTHLADSF + AVKINRNGKPRI" + rep_origin 113237..113806 + /note="ARS910; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130158" + gene <113806..>116904 + /gene="MET18" + /locus_tag="YIL128W" + /gene_synonym="MMS19" + /db_xref="GeneID:854678" + mRNA <113806..>116904 + /gene="MET18" + /locus_tag="YIL128W" + /gene_synonym="MMS19" + /product="Met18p" + /transcript_id="NM_001179476.1" + /db_xref="GeneID:854678" + CDS 113806..116904 + /gene="MET18" + /locus_tag="YIL128W" + /gene_synonym="MMS19" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0097361 CIA complex + [PMID:22678362]" + /experiment="EXISTENCE:mutant phenotype:GO:0097428 protein + maturation by iron-sulfur cluster transfer + [PMID:22678362]" + /note="Component of cytosolic iron-sulfur protein assembly + (CIA) machinery; acts at a late step of Fe-S cluster + assembly; forms the CIA targeting complex with Cia1p and + Cia2p that directs Fe-S cluster incorporation and + maturation of a subset of cytosolic and nuclear proteins + involved in methionine biosynthesis, DNA replication and + repair, transcription, and telomere maintenance; ortholog + of human MMS19" + /codon_start=1 + /product="Met18p" + /protein_id="NP_012138.1" + /db_xref="GeneID:854678" + /db_xref="SGD:S000001390" + /translation="MTPDELNSAVVTFMANLNIDDSKANETASTVTDSIVHRSIKLLE + VVVALKDYFLSENEVERKKALTCLTTILAKTPKDHLSKNECSVIFQFYQSKLDDQALA + KEVLEGFAALAPMKYVSINEIAQLLRLLLDNYQQGQHLASTRLWPFKILRKIFDRFFV + NGSSTEQVKRINDLFIETFLHVANGEKDPRNLLLSFALNKSITSSLQNVENFKEDLFD + VLFCYFPITFKPPKHDPYKISNQDLKTALRSAITATPLFAEDAYSNLLDKLTASSPVV + KNDTLLTLLECVRKFGGSSILENWTLLWNALKFEIMQNSEGNENTLLNPYNKDQQSDD + VGQYTNYDACLKIINLMALQLYNFDKVSFEKFFTHVLDELKPNFKYEKDLKQTCQILS + AIGSGNVEIFNKVISSTFPLFLINTSEVAKLKLLIMNFSFFVDSYIDLFGRTSKESLG + TPVPNNKMAEYKDEIIMILSMALTRSSKAEVTIRTLSVIQFTKMIKMKGFLTPEEVSL + IIQYFTEEILTDNNKNIYYACLEGLKTISEIYEDLVFEISLKKLLDLLPDCFEEKIRV + NDEENIHIETILKIILDFTTSRHILVKESITFLATKLNRVAKISKSREYCFLLISTIY + SLFNNNNQNENVLNEEDALALKNAIEPKLFEIITQESAIVSDNYNLTLLSNVLFFTNL + KIPQAAHQEELDRYNELFISEGKIRILDTPNVLAISYAKILSALNKNCQFPQKFTVLF + GTVQLLKKHAPRMTETEKLGYLELLLVLSNKFVSEKDVIGLFDWKDLSVINLEVMVWL + TKGLIMQNSLESSEIAKKFIDLLSNEEIGSLVSKLFEVFVMDISSLKKFKGISWNNNV + KILYKQKFFGDIFQTLVSNYKNTVDMTIKCNYLTALSLVLKHTPSQSVGPFINDLFPL + LLQALDMPDPEVRVSALETLKDTTDKHHTLITEHVSTIVPLLLSLSLPHKYNSVSVRL + IALQLLEMITTVVPLNYCLSYQDDVLSALIPVLSDKKRIIRKQCVDTRQVYYELGQIP + FE" + gene complement(<117024..>117644) + /gene="RRT14" + /locus_tag="YIL127C" + /db_xref="GeneID:854679" + mRNA complement(<117024..>117644) + /gene="RRT14" + /locus_tag="YIL127C" + /product="Rrt14p" + /transcript_id="NM_001179475.1" + /db_xref="GeneID:854679" + CDS complement(117024..117644) + /gene="RRT14" + /locus_tag="YIL127C" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:14562095]" + /note="hypothetical protein; identified in a screen for + mutants with decreased levels of rDNA transcription; green + fluorescent protein (GFP)-fusion protein localizes to the + nucleolus; predicted to be involved in ribosome + biogenesis" + /codon_start=1 + /product="Rrt14p" + /protein_id="NP_012139.1" + /db_xref="GeneID:854679" + /db_xref="SGD:S000001389" + /translation="MSSSLSQTSKYQATSVVNGLLSNLLPGVPKIRANNGKTSVNNGS + KAQLIDRNLKKRVQLQNRDVHKIKKKCKLVKKKKVKKHKLDKEQLEQLAKHQVLKKHQ + HEGTLTDHERKYLNKLIKRNSQNLRSWDLEEEVRDELEDIQQSILKDTVSTANTDRSK + RRRFKRKQFKEDIKESDFVKDHRYPGLTPGLAPVGLSDEEDSSEED" + gene <117992..>122071 + /gene="STH1" + /locus_tag="YIL126W" + /gene_synonym="NPS1" + /db_xref="GeneID:854680" + mRNA <117992..>122071 + /gene="STH1" + /locus_tag="YIL126W" + /gene_synonym="NPS1" + /product="RSC chromatin remodeling complex ATPase subunit + STH1" + /transcript_id="NM_001179474.1" + /db_xref="GeneID:854680" + CDS 117992..122071 + /gene="STH1" + /locus_tag="YIL126W" + /gene_synonym="NPS1" + /EC_number="3.6.4.12" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:1396591|PMID:1549132]" + /experiment="EXISTENCE:direct assay:GO:0006337 nucleosome + disassembly [PMID:16492771]" + /experiment="EXISTENCE:direct assay:GO:0006338 chromatin + remodeling [PMID:8980231]" + /experiment="EXISTENCE:direct assay:GO:0006368 + transcription elongation by RNA polymerase II + [PMID:17081996]" + /experiment="EXISTENCE:direct assay:GO:0015616 DNA + translocase activity [PMID:12183366]" + /experiment="EXISTENCE:direct assay:GO:0016586 RSC-type + complex [PMID:10619019|PMID:12183366]" + /experiment="EXISTENCE:direct assay:GO:0070577 + lysine-acetylated histone binding [PMID:20126658]" + /experiment="EXISTENCE:direct assay:GO:0140658 + ATP-dependent chromatin remodeler activity + [PMID:9799253|PMID:12183366]" + /experiment="EXISTENCE:genetic interaction:GO:0007059 + chromosome segregation [PMID:12697820]" + /experiment="EXISTENCE:mutant phenotype:GO:0006284 + base-excision repair [PMID:24674626]" + /experiment="EXISTENCE:mutant phenotype:GO:0006302 + double-strand break repair [PMID:16024655]" + /experiment="EXISTENCE:mutant phenotype:GO:0007010 + cytoskeleton organization [PMID:12072455]" + /experiment="EXISTENCE:mutant phenotype:GO:0031055 + chromatin remodeling at centromere [PMID:12697820]" + /experiment="EXISTENCE:mutant phenotype:GO:0051321 meiotic + cell cycle [PMID:10320476]" + /note="ATPase component of the RSC chromatin remodeling + complex; required for expression of early meiotic genes; + promotes base excision repair in chromatin; essential + helicase-related protein homologous to Snf2p" + /codon_start=1 + /product="RSC chromatin remodeling complex ATPase subunit + STH1" + /protein_id="NP_012140.1" + /db_xref="GeneID:854680" + /db_xref="SGD:S000001388" + /translation="MLQEQSELMSTVMNNTPTTVAALAAVAAASETNGKLGSEEQPEI + TIPKPRSSAQLEQLLYRYRAIQNHPKENKLEIKAIEDTFRNISRDQDIYETKLDTLRK + SIDKGFQYDEDLLNKHLVALQLLEKDTDVPDYFLDLPDTKNDNTTAIEVDYSEKKPIK + ISADFNAKAKSLGLESKFSNATKTALGDPDTEIRISARISNRINELERLPANLGTYSL + DDCLEFITKDDLSSRMDTFKIKALVELKSLKLLTKQKSIRQKLINNVASQAHHNIPYL + RDSPFTAAAQRSVQIRSKVIVPQTVRLAEELERQQLLEKRKKERNLHLQKINSIIDFI + KERQSEQWSRQERCFQFGRLGASLHNQMEKDEQKRIERTAKQRLAALKSNDEEAYLKL + LDQTKDTRITQLLRQTNSFLDSLSEAVRAQQNEAKILHGEEVQPITDEEREKTDYYEV + AHRIKEKIDKQPSILVGGTLKEYQLRGLEWMVSLYNNHLNGILADEMGLGKTIQSISL + ITYLYEVKKDIGPFLVIVPLSTITNWTLEFEKWAPSLNTIIYKGTPNQRHSLQHQIRV + GNFDVLLTTYEYIIKDKSLLSKHDWAHMIIDEGHRMKNAQSKLSFTISHYYRTRNRLI + LTGTPLQNNLPELWALLNFVLPKIFNSAKTFEDWFNTPFANTGTQEKLELTEEETLLI + IRRLHKVLRPFLLRRLKKEVEKDLPDKVEKVIKCKLSGLQQQLYQQMLKHNALFVGAG + TEGATKGGIKGLNNKIMQLRKICNHPFVFDEVEGVVNPSRGNSDLLFRVAGKFELLDR + VLPKFKASGHRVLMFFQMTQVMDIMEDFLRMKDLKYMRLDGSTKTEERTEMLNAFNAP + DSDYFCFLLSTRAGGLGLNLQTADTVIIFDTDWNPHQDLQAQDRAHRIGQKNEVRILR + LITTDSVEEVILERAMQKLDIDGKVIQAGKFDNKSTAEEQEAFLRRLIESETNRDDDD + KAELDDDELNDTLARSADEKILFDKIDKERMNQERADAKAQGLRVPPPRLIQLDELPK + VFREDIEEHFKKEDSEPLGRIRQKKRVYYDDGLTEEQFLEAVEDDNMSLEDAIKKRRE + ARERRRLRQNGTKENEIETLENTPEASETSLIENNSFTAAVDEETNADKETTASRSKR + RSSRKKRTISIVTAEDKENTQEESTSQENGGAKVEEEVKSSSVEIINGSESKKKKPKL + TVKIKLNKTTVLENNDGKRAEEKPESKSPAKKTAAKKTKTKSKSLGIFPTVEKLVEEM + REQLDEVDSHPRTSIFEKLPSKRDYPDYFKVIEKPMAIDIILKNCKNGTYKTLEEVRQ + ALQTMFENARFYNEEGSWVYVDADKLNEFTDEWFKEHSS" + gene <122689..>125733 + /gene="KGD1" + /locus_tag="YIL125W" + /gene_synonym="OGD1" + /db_xref="GeneID:854681" + mRNA <122689..>125733 + /gene="KGD1" + /locus_tag="YIL125W" + /gene_synonym="OGD1" + /product="alpha-ketoglutarate dehydrogenase KGD1" + /transcript_id="NM_001179473.1" + /db_xref="GeneID:854681" + CDS 122689..125733 + /gene="KGD1" + /locus_tag="YIL125W" + /gene_synonym="OGD1" + /EC_number="1.2.4.2" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0009353 + mitochondrial oxoglutarate dehydrogenase complex + [PMID:2072900]" + /experiment="EXISTENCE:direct assay:GO:0042645 + mitochondrial nucleoid [PMID:11926067|PMID:15692048]" + /note="Subunit of the mitochondrial alpha-ketoglutarate + dehydrogenase complex; catalyzes a key step in the + tricarboxylic acid (TCA) cycle, the oxidative + decarboxylation of alpha-ketoglutarate to form + succinyl-CoA" + /codon_start=1 + /product="alpha-ketoglutarate dehydrogenase KGD1" + /protein_id="NP_012141.1" + /db_xref="GeneID:854681" + /db_xref="SGD:S000001387" + /translation="MLRFVSSQTCRYSSRGLLKTSLLKNASTVKIVGRGLATTGTDNF + LSTSNATYIDEMYQAWQKDPSSVHVSWDAYFKNMSNPKIPATKAFQAPPSISNFPQGT + EAAPLGTAMTGSVDENVSIHLKVQLLCRAYQVRGHLKAHIDPLGISFGSNKNNPVPPE + LTLDYYGFSKHDLDKEINLGPGILPRFARDGKSKMSLKEIVDHLEKLYCSSYGVQYTH + IPSKQKCDWLRERIEIPEPYQYTVDQKRQILDRLTWATSFESFLSTKFPNDKRFGLEG + LESVVPGIKTLVDRSVELGVEDIVLGMAHRGRLNVLSNVVRKPNESIFSEFKGSSARD + DIEGSGDVKYHLGMNYQRPTTSGKYVNLSLVANPSHLESQDPVVLGRTRALLHAKNDL + KEKTKALGVLLHGDAAFAGQGVVYETMGFLTLPEYSTGGTIHVITNNQIGFTTDPRFA + RSTPYPSDLAKAIDAPIFHVNANDVEAVTFIFNLAAEWRHKFHTDAIIDVVGWRKHGH + NETDQPSFTQPLMYKKIAKQKSVIDVYTEKLISEGTFSKKDIDEHKKWVWNLFEDAFE + KAKDYVPSQREWLTAAWEGFKSPKELATEILPHEPTNVPESTLKELGKVLSSWPEGFE + VHKNLKRILKNRGKSIETGEGIDWATGEALAFGTLVLDGQNVRVSGEDVERGTFSQRH + AVLHDQQSEAIYTPLSTLNNEKADFTIANSSLSEYGVMGFEYGYSLTSPDYLVMWEAQ + FGDFANTAQVIIDQFIAGGEQKWKQRSGLVLSLPHGYDGQGPEHSSGRLERFLQLANE + DPRYFPSEEKLQRQHQDCNFQVVYPTTPANLFHILRRQQHRQFRKPLALFFSKQLLRH + PLARSSLSEFTEGGFQWIIEDIEHGKSIGTKEETKRLVLLSGQVYTALHKRRESLGDK + TTAFLKIEQLHPFPFAQLRDSLNSYPNLEEIVWCQEEPLNMGSWAYTEPRLHTTLKET + DKYKDFKVRYCGRNPSGAVAAGSKSLHLAEEDAFLKDVFQQS" + gene <126204..>127097 + /gene="AYR1" + /locus_tag="YIL124W" + /gene_synonym="GBG1" + /db_xref="GeneID:854682" + mRNA <126204..>127097 + /gene="AYR1" + /locus_tag="YIL124W" + /gene_synonym="GBG1" + /product="acylglycerone-phosphate reductase" + /transcript_id="NM_001179472.3" + /db_xref="GeneID:854682" + CDS 126204..127097 + /gene="AYR1" + /locus_tag="YIL124W" + /gene_synonym="GBG1" + /EC_number="1.1.1.101" + /EC_number="3.1.1.3" + /experiment="EXISTENCE:direct assay:GO:0004806 + triglyceride lipase activity [PMID:24187129]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane [PMID:16407407]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:10617610|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005811 lipid + droplet [PMID:10617610|PMID:24868093]" + /experiment="EXISTENCE:genetic interaction:GO:0004806 + triglyceride lipase activity [PMID:24187129]" + /experiment="EXISTENCE:genetic interaction:GO:0019433 + triglyceride catabolic process [PMID:24187129]" + /experiment="EXISTENCE:mutant phenotype:GO:0000140 + acylglycerone-phosphate reductase activity + [PMID:10617610]" + /experiment="EXISTENCE:mutant phenotype:GO:0004806 + triglyceride lipase activity [PMID:24187129]" + /experiment="EXISTENCE:mutant phenotype:GO:0006654 + phosphatidic acid biosynthetic process [PMID:10617610]" + /note="Bifunctional triacylglycerol lipase and 1-acyl DHAP + reductase; NADPH-dependent 1-acyl dihydroxyacetone + phosphate reductase involved in phosphatidic acid + biosynthesis; lipid droplet triacylglycerol lipase + involved in mobilization of non-polar lipids; found in + lipid particles, endoplasmic reticulum and mitochondrial + outer membrane; forms NADPH-regulated channel in + mitochondrial outer membrane; required for spore + germination; role in cell wall biosynthesis; capable of + metabolizing steroid hormones" + /codon_start=1 + /product="acylglycerone-phosphate reductase" + /protein_id="NP_012142.3" + /db_xref="GeneID:854682" + /db_xref="SGD:S000001386" + /translation="MSELQSQPKKIAVVTGASGGIGYEVTKELARNGYLVYACARRLE + PMAQLAIQFGNDSIKPYKLDISKPEEIVTFSGFLRANLPDGKLDLLYNNAGQSCTFPA + LDATDAAVEQCFKVNVFGHINMCRELSEFLIKAKGTIVFTGSLAGVVSFPFGSIYSAS + KAAIHQYARGLHLEMKPFNVRVINAITGGVATDIADKRPLPETSIYNFPEGREAFNSR + KTMAKDNKPMPADAYAKQLVKDILSTSDPVDVYRGTFANIMRFVMIFVPYWLLEKGLS + KKFKLDKVNNALKSKQKNKDD" + gene <128151..>129581 + /gene="SIM1" + /locus_tag="YIL123W" + /db_xref="GeneID:854683" + mRNA <128151..>129581 + /gene="SIM1" + /locus_tag="YIL123W" + /product="putative glucosidase SIM1" + /transcript_id="NM_001179471.2" + /db_xref="GeneID:854683" + CDS 128151..129581 + /gene="SIM1" + /locus_tag="YIL123W" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type + cell wall [PMID:11958935]" + /experiment="EXISTENCE:mutant phenotype:GO:0031505 + fungal-type cell wall organization [PMID:15972461]" + /note="Protein of the SUN family (Sim1p, Uth1p, Nca3p, + Sun4p); may participate in DNA replication; promoter + contains SCB regulation box at -300 bp indicating that + expression may be cell cycle-regulated; SIM1 has a + paralog, SUN4, that arose from the whole genome + duplication" + /codon_start=1 + /product="putative glucosidase SIM1" + /protein_id="NP_012143.2" + /db_xref="GeneID:854683" + /db_xref="SGD:S000001385" + /translation="MKFSTAVTTLISSGAIVSALPHVDVHQEDAHQHKRAVAYKYVYE + TVVVDSDGHTVTPAASEVATAATSAIITTSVLAPTSSAAAADSSASIAVSSAALAKNE + KISDAAASATASTSQGASSSSSSSSATSTLESSSVSSSSEEAAPTSTVVSTSSATQSS + ASSATKSSTSSTSPSTSTSTSTSSTSSSSSSSSSSSSSSSGSGSIYGDLADFSGPSEK + FQDGTIPCDKFPSGQGVISIDWIGEGGWSGVENTDTSTGGSCKEGSYCSYSCQPGMSK + TQWPSDQPSDGRSVGGLLCKNGYLYRSNTDADYLCEWGVEAAYVVSKLSKGVAICRTD + YPGTENMVIPTYVEGGSSLPLTVVDQDTYFTWEGKKTSAQYYVNNAGVSVEDGCIWGT + SGSGIGNWAPLNFGAGSTGGVTYLSLIPNPNNSDALNYNVKIVAADDSSNVIGECVYE + NGEFSGGADGCTVSVTSGKAHFVLYN" + gene <130610..>131665 + /gene="POG1" + /locus_tag="YIL122W" + /db_xref="GeneID:854684" + mRNA <130610..>131665 + /gene="POG1" + /locus_tag="YIL122W" + /product="Pog1p" + /transcript_id="NM_001179470.1" + /db_xref="GeneID:854684" + CDS 130610..131665 + /gene="POG1" + /locus_tag="YIL122W" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:12464632]" + /experiment="EXISTENCE:direct assay:GO:0000978 RNA + polymerase II cis-regulatory region sequence-specific DNA + binding [PMID:22959267]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:11914276]" + /experiment="EXISTENCE:genetic interaction:GO:0000321 + re-entry into mitotic cell cycle after pheromone arrest + [PMID:9927449]" + /experiment="EXISTENCE:mutant phenotype:GO:0000321 + re-entry into mitotic cell cycle after pheromone arrest + [PMID:9927449]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:22959267|PMID:9927449]" + /note="DNA-binding transcriptional activator; involved in + cell cycle regulation; overexpression promotes recovery + from pheromone induced arrest via CLN1/2 transcription, + induction of of IME1 during sporulation, and suppression + of stress sensitivity resulting from mutation of the E3 + ubiquitin ligase Rsp5p; binds upstream of BAR1 and cell + cycle-related genes; phosphorylated form may be + ubiquitinated by Dma2p; potential Cdc28p substrate; + regulated by Swi4/6 cell-cycle box binding factor (SBF)" + /codon_start=1 + /product="Pog1p" + /protein_id="NP_012144.1" + /db_xref="GeneID:854684" + /db_xref="SGD:S000001384" + /translation="MKQEPHRQSEEKEKPKGPMAVEREQHTSLSSGTTVTASTGDEST + NSRPVESSQTEKSLSLRIRILKQLGFDDIQELNACDTGLVEQFLNVRLINDTKELEKI + RESNLAKLNQIIDKCMESDKISDSTLNKILDMSMNRDTNNDNNNHLTIPSPITTKKRK + INASELASPRGHRRYRSDIPTVSEVETGVGYPQIHQQPGAYTLPMPANQWMSNPYMQP + PQPQVQQIMPQYLYPPGMGPQAQLPTMSSNSESQTPVMSSQFLSLNQHGLYQQNIGAH + PVMSMGPQANIYGQQHQLQPGQERDQSRKSFSHRRSQSANISMANFRSPMRNPQPASS + QRPVNFLIHTPKHPPPT" + gene <132244..>133872 + /gene="QDR2" + /locus_tag="YIL121W" + /db_xref="GeneID:854685" + mRNA <132244..>133872 + /gene="QDR2" + /locus_tag="YIL121W" + /product="cation transporter" + /transcript_id="NM_001179469.1" + /db_xref="GeneID:854685" + CDS 132244..133872 + /gene="QDR2" + /locus_tag="YIL121W" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:34887841|PMID:15215105]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:genetic interaction:GO:1990573 + potassium ion import across plasma membrane + [PMID:17189489]" + /experiment="EXISTENCE:mutant phenotype:GO:0008324 + monoatomic cation transmembrane transporter activity + [PMID:23106982]" + /experiment="EXISTENCE:mutant phenotype:GO:0015565 + threonine efflux transmembrane transporter activity + [PMID:34887841]" + /experiment="EXISTENCE:mutant phenotype:GO:0032973 amino + acid export across plasma membrane [PMID:34887841]" + /experiment="EXISTENCE:mutant phenotype:GO:0042910 + xenobiotic transmembrane transporter activity + [PMID:15215105|PMID:15649438]" + /experiment="EXISTENCE:mutant phenotype:GO:0055085 + transmembrane transport [PMID:15215105|PMID:15649438]" + /experiment="EXISTENCE:mutant phenotype:GO:0060003 copper + ion export [PMID:23106982]" + /experiment="EXISTENCE:mutant phenotype:GO:1990573 + potassium ion import across plasma membrane + [PMID:17189489]" + /note="Plasma membrane transporter of the major + facilitator superfamily; member of the 12-spanner + drug:H(+) antiporter DHA1 family; exports copper; has + broad substrate specificity and can transport many mono- + and divalent cations; transports a variety of drugs and is + required for resistance to quinidine, barban, cisplatin, + and bleomycin; contributes to potassium homeostasis; + expression is regulated by copper" + /codon_start=1 + /product="cation transporter" + /protein_id="NP_012145.1" + /db_xref="GeneID:854685" + /db_xref="SGD:S000001383" + /translation="MAGATSSIIRENDFEDELAESMQSYNRETADKLALTRTESVKPE + PEITAPPHSRFSRSFKTVLIAQCAFTGFFSTIAGAIYYPVLSVIERKFDIDEELVNVT + VVVYFVFQGLAPTFMGGFADSLGRRPVVLVAIVIYFGACIGLACAQTYAQIIVLRCLQ + AAGISPVIAINSGIMGDVTTRAERGGYVGYVAGFQVLGSAFGALIGAGLSSRWGWRAI + FWFLAIGSGICFLASFLILPETKRNISGNGSVTPKSYLNRAPILVLPTVRKSLHLDNP + DYETLELPTQLNLLAPFKILKAYEICILMLVAGLQFAMYTTHLTALSTALSKQYHLTV + AKVGLCYLPSGICTLCSIVIAGRYLNWNYRRRLKYYQNWLGKKRSKLLEEHDNDLNLV + QRIIENDPKYTFNIFKARLQPAFVTLLLSSSGFCAYGWCITVKAPLAAVLCMSGFASL + FSNCILTFSTTLIVDLFPTKTSTATGCLNLFRCILSAVFIAALSKMVEKMKFGGVFTF + LGALTSSSSILLFILLRKGKELAFKRKKQELGVN" + gene <134417..>136108 + /gene="QDR1" + /locus_tag="YIL120W" + /db_xref="GeneID:854686" + mRNA <134417..>136108 + /gene="QDR1" + /locus_tag="YIL120W" + /product="multidrug transporter" + /transcript_id="NM_001179468.1" + /db_xref="GeneID:854686" + CDS 134417..136108 + /gene="QDR1" + /locus_tag="YIL120W" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:11302822]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:genetic interaction:GO:0030476 + ascospore wall assembly [PMID:23966878]" + /experiment="EXISTENCE:mutant phenotype:GO:0015562 efflux + transmembrane transporter activity [PMID:15649438]" + /experiment="EXISTENCE:mutant phenotype:GO:0055085 + transmembrane transport [PMID:15649438]" + /note="Multidrug transporter of the major facilitator + superfamily; member of the 12-spanner drug:H(+) antiporter + DHA1 family; involved in spore wall assembly; sequence + similarity to DTR1 and QDR3, and the triple mutant dtr1 + qdr1 qdr3 exhibits reduced dityrosine fluorescence + relative to the single mutants; required for resistance to + quinidine, ketoconazole, fluconazole, and barban; QDR1 has + a paralog, AQR1, that arose from the whole genome + duplication" + /codon_start=1 + /product="multidrug transporter" + /protein_id="NP_012146.1" + /db_xref="GeneID:854686" + /db_xref="SGD:S000001382" + /translation="MTKQQTSVMRNASIAKEEREGSDNNNVDRSSSDAISDNDAERSN + SHSEIDNESNFDMVPYSRFSHKQKMLLVVQCAFTGFFSTVAGSIYYPVLTIIERKFNI + TEELANVTIVVYFIFQGVAPSIMGGLADTFGRRPIVLWAILAYFCACIGLACAHNYAQ + ILALRCLQAAGISPVIAINSGIMGDVTTKVERGGYVGLVAGFQVVGTAFGALIGAGLS + SKWGWRAIFWFLAIGSGICLVFSTLLMPETKRTLVGNGSVTPRSFLNRSLILHVGSVK + KTLHLDDPDPETLEPRTSVDFLAPLKILHIREIDILLSIAGLQFSTWTTHQTALTIVL + SKKYNLSVAKIGLCFLPAGISTLTSIISAGRYLNWSYRTRKVKYNRWIKEQELQLMEK + YKGDKNKVAELIHSNSHYAFNLVEARLHPAFVTLLLSSIGFTAFGWCISVKTPLAAVL + CTSAFASLFSNCILTFSTTLIVDLFPSKASTATGCLNLFRCLLSAIFIAALTKMVEKM + RYGGVFTFLSAITSSSSLLLFYLLKNGKQLSFDRIRANDKSAGRSVGKNSEKVST" + rep_origin 136098..136338 + /note="ARS911; Autonomously Replicating Sequence" + /db_xref="SGD:S000118395" + gene complement(<136654..>137877) + /gene="RPI1" + /locus_tag="YIL119C" + /db_xref="GeneID:854687" + mRNA complement(<136654..>137877) + /gene="RPI1" + /locus_tag="YIL119C" + /product="Rpi1p" + /transcript_id="NM_001179467.3" + /db_xref="GeneID:854687" + CDS complement(136654..137877) + /gene="RPI1" + /locus_tag="YIL119C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:12455971]" + /experiment="EXISTENCE:genetic interaction:GO:0009272 + fungal-type cell wall biogenesis [PMID:12455971]" + /experiment="EXISTENCE:mutant phenotype:GO:0007265 Ras + protein signal transduction [PMID:1649384]" + /experiment="EXISTENCE:mutant phenotype:GO:0009272 + fungal-type cell wall biogenesis [PMID:12455971]" + /experiment="EXISTENCE:mutant phenotype:GO:0030695 GTPase + regulator activity [PMID:1649384]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:12455971]" + /note="Transcription factor, allelic differences between + S288C and Sigma1278b; mediates fermentation stress + tolerance by modulating cell wall integrity; + overexpression suppresses heat shock sensitivity of + wild-type RAS2 overexpression and also suppresses cell + lysis defect of mpk1 mutation; allele from S288c can + confer fMAPK pathway independent transcription of FLO11; + S288C and Sigma1278b alleles differ in number of tandem + repeats within ORF" + /codon_start=1 + /product="Rpi1p" + /protein_id="NP_012147.3" + /db_xref="GeneID:854687" + /db_xref="SGD:S000001381" + /translation="MYLEYLQPKLNLMDESSTISKNFPDYSPNLNTPITSNFNEETGS + DCSLVTPRIISSSNSNSNSNSNSNSNSNSGSIDENELNNSNSSSSSARQIRKKWKEPE + DIAFITTIMNNSQLLTFVEYFKPMKNFWKKISKILFQQYGYERNSRQCHDRFKVLYTK + SLKVHPSKKSKQKKKKSKQEAGSNLNFDPSKLSRMQYLLVQLQNTFSFVNGNIILKSQ + KTLKPNKNGTNDNINNHYYNNCNNNNNNINNSNNSNNNNSNNINRNSNHSTNVFSTPE + HIQSSINLDKLESLPALDTKGEPSFISPAQFSLLSSAPADNLILQTPPSPFFQQTMPI + QLPRDAQQEQISPVFSTDVIYMWQTMFNTIENLKEQVNCLKNEVKQLNHKFYQQNKPL + HNMSTSDSENFMQQH" + gene <139752..>140447 + /gene="RHO3" + /locus_tag="YIL118W" + /db_xref="GeneID:854688" + mRNA <139752..>140447 + /gene="RHO3" + /locus_tag="YIL118W" + /product="Rho family GTPase RHO3" + /transcript_id="NM_001179466.1" + /db_xref="GeneID:854688" + CDS 139752..140447 + /gene="RHO3" + /locus_tag="YIL118W" + /experiment="EXISTENCE:direct assay:GO:0003924 GTPase + activity [PMID:10526184]" + /experiment="EXISTENCE:direct assay:GO:0005525 GTP binding + [PMID:10207081]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:10207081]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:16622836]" + /experiment="EXISTENCE:direct assay:GO:0005933 cellular + bud [PMID:10207081]" + /experiment="EXISTENCE:genetic interaction:GO:0045921 + positive regulation of exocytosis + [PMID:8852836|PMID:19955214]" + /experiment="EXISTENCE:genetic interaction:GO:0090338 + positive regulation of formin-nucleated actin cable + assembly [PMID:12810699]" + /experiment="EXISTENCE:mutant phenotype:GO:0030950 + establishment or maintenance of actin cytoskeleton + polarity [PMID:10588647|PMID:8852836]" + /experiment="EXISTENCE:mutant phenotype:GO:0045921 + positive regulation of exocytosis [PMID:10588647]" + /experiment="EXISTENCE:mutant phenotype:GO:0090338 + positive regulation of formin-nucleated actin cable + assembly [PMID:12810699]" + /experiment="EXISTENCE:physical interaction:GO:0045921 + positive regulation of exocytosis [PMID:19955214]" + /note="Non-essential small GTPase of the Rho/Rac family of + Ras-like proteins; involved in the establishment of cell + polarity; GTPase activity positively regulated by the + GTPase activating protein (GAP) Rgd1p" + /codon_start=1 + /product="Rho family GTPase RHO3" + /protein_id="NP_012148.1" + /db_xref="GeneID:854688" + /db_xref="SGD:S000001380" + /translation="MSFLCGSASTSNKPIERKIVILGDGACGKTSLLNVFTRGYFPEV + YEPTVFENYIHDIFVDSKHITLSLWDTAGQEEFDRLRSLSYSDTQCIMLCFSIDSRDS + LENVQNKWVGEITDHCEGVKLVLVALKCDLRNNENESNAITPNNIQQDNSVSNDNGNN + INSTSNGKNLISYEEGLAMAKKIGALRYLECSAKLNKGVNEAFTEAARVALTAGPVAT + EVKSDSGSSCTIM" + gene complement(<140613..>141569) + /gene="PRM5" + /locus_tag="YIL117C" + /db_xref="GeneID:854689" + mRNA complement(<140613..>141569) + /gene="PRM5" + /locus_tag="YIL117C" + /product="pheromone-regulated protein PRM5" + /transcript_id="NM_001179465.1" + /db_xref="GeneID:854689" + CDS complement(140613..141569) + /gene="PRM5" + /locus_tag="YIL117C" + /note="Pheromone-regulated protein, predicted to have 1 + transmembrane segment; induced during cell integrity + signaling; PRM5 has a paralog, YNL058C, that arose from + the whole genome duplication" + /codon_start=1 + /product="pheromone-regulated protein PRM5" + /protein_id="NP_012149.1" + /db_xref="GeneID:854689" + /db_xref="SGD:S000001379" + /translation="MTVITIAKRGLPKLTTSTSSTTTASSSSTITSVASSSSSLPLLS + NSTSSSIIPSITPPSRNGNPYILDSGDMPNGTVFIVVGGIAGVIFLAILLWWVITTYS + SHRLTRSVQDYESKMFSTQHTQFYGDSPYMDYPAKENFQDQVHISESDISPGNKDESV + KDALVSHTNNEKPFLSNFERPLFSLASESNRNSLFISPTGDILYKTRLSKLYQESPRL + LQKPVIMTSDNVSTNSLVSTISSSSASSLDNGNEKEVGEDIRKPAKIASSPSRKLLNS + PESDGSVNRNHSKGNLLVVQSKRKPTPSTYLEHMLEGKEQDE" + gene <142928..>144085 + /gene="HIS5" + /locus_tag="YIL116W" + /db_xref="GeneID:854690" + mRNA <142928..>144085 + /gene="HIS5" + /locus_tag="YIL116W" + /product="histidinol-phosphate transaminase" + /transcript_id="NM_001179464.1" + /db_xref="GeneID:854690" + CDS 142928..144085 + /gene="HIS5" + /locus_tag="YIL116W" + /EC_number="2.6.1.9" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0000105 + histidine biosynthetic process [PMID:14190241]" + /experiment="EXISTENCE:mutant phenotype:GO:0004400 + histidinol-phosphate transaminase activity + [PMID:14190241]" + /note="Histidinol-phosphate aminotransferase; catalyzes + the seventh step in histidine biosynthesis; responsive to + general control of amino acid biosynthesis; mutations + cause histidine auxotrophy and sensitivity to Cu, Co, and + Ni salts" + /codon_start=1 + /product="histidinol-phosphate transaminase" + /protein_id="NP_012150.1" + /db_xref="GeneID:854690" + /db_xref="SGD:S000001378" + /translation="MVFDLKRIVRPKIYNLEPYRCARDDFTEGILLDANENAHGPTPV + ELSKTNLHRYPDPHQLEFKTAMTKYRNKTSSYANDPEVKPLTADNLCLGVGSDESIDA + IIRACCVPGKEKILVLPPTYSMYSVCANINDIEVVQCPLTVSDGSFQMDTEAVLTILK + NDSLIKLMFVTSPGNPTGAKIKTSLIEKVLQNWDNGLVVVDEAYVDFCGGSTAPLVTK + YPNLVTLQTLSKSFGLAGIRLGMTYATAELARILNAMKAPYNISSLASEYALKAVQDS + NLKKMEATSKIINEEKMRLLKELTALDYVDDQYVGGLDANFLLIRINGGDNVLAKKLY + YQLATQSGVVVRFRGNELGCSGCLRITVGTHEENTHLIKYFKETLYKLANE" + gene complement(<144327..>148709) + /gene="NUP159" + /locus_tag="YIL115C" + /gene_synonym="NUP158; RAT7" + /db_xref="GeneID:854691" + mRNA complement(<144327..>148709) + /gene="NUP159" + /locus_tag="YIL115C" + /gene_synonym="NUP158; RAT7" + /product="FG-nucleoporin NUP159" + /transcript_id="NM_001179463.1" + /db_xref="GeneID:854691" + CDS complement(144327..148709) + /gene="NUP159" + /locus_tag="YIL115C" + /gene_synonym="NUP158; RAT7" + /experiment="EXISTENCE:direct assay:GO:0000774 + adenyl-nucleotide exchange factor activity + [PMID:21576266]" + /experiment="EXISTENCE:direct assay:GO:0005643 nuclear + pore [PMID:10684247|PMID:7642562|PMID:7744966]" + /experiment="EXISTENCE:direct assay:GO:0044613 nuclear + pore central transport channel [PMID:18046406]" + /experiment="EXISTENCE:direct assay:GO:0044614 nuclear + pore cytoplasmic filaments [PMID:10684247|PMID:14960378]" + /experiment="EXISTENCE:direct assay:GO:0061912 selective + autophagy [PMID:32029894]" + /experiment="EXISTENCE:genetic interaction:GO:0006607 + NLS-bearing protein import into nucleus [PMID:15039779]" + /experiment="EXISTENCE:genetic interaction:GO:0016973 + poly(A)+ mRNA export from nucleus [PMID:10952996]" + /experiment="EXISTENCE:mutant phenotype:GO:0000055 + ribosomal large subunit export from nucleus + [PMID:11071906|PMID:11739405]" + /experiment="EXISTENCE:mutant phenotype:GO:0000056 + ribosomal small subunit export from nucleus + [PMID:11739405]" + /experiment="EXISTENCE:mutant phenotype:GO:0000774 + adenyl-nucleotide exchange factor activity + [PMID:21576266]" + /experiment="EXISTENCE:mutant phenotype:GO:0006611 protein + export from nucleus [PMID:17347149]" + /experiment="EXISTENCE:mutant phenotype:GO:0016973 + poly(A)+ mRNA export from nucleus + [PMID:27385342|PMID:7744966|PMID:9359887|PMID:9802895|PMID + :15574330]" + /experiment="EXISTENCE:mutant phenotype:GO:0051664 nuclear + pore localization [PMID:9359887|PMID:7744966]" + /experiment="EXISTENCE:mutant phenotype:GO:0097064 ncRNA + export from nucleus [PMID:11352936]" + /experiment="EXISTENCE:physical interaction:GO:0017056 + structural constituent of nuclear pore [PMID:17418788]" + /note="FG-nucleoporin component of central core of the + nuclear pore complex; also part of the nuclear pore + complex (NPC) cytoplasmic filaments; contributes directly + to nucleocytoplasmic transport; regulates ADP release from + the ATP-dependent RNA helicase Dbp5p; forms a stable + association with Nup82p, Gle2p and two other + FG-nucleoporins (Nsp1p and Nup116p)" + /codon_start=1 + /product="FG-nucleoporin NUP159" + /protein_id="NP_012151.1" + /db_xref="GeneID:854691" + /db_xref="SGD:S000001377" + /translation="MSSLKDEVPTETSEDFGFKFLGQKQILPSFNEKLPFASLQNLDI + SNSKSLFVAASGSKAVVGELQLLRDHITSDSTPLTFKWEKEIPDVIFVCFHGDQVLVS + TRNALYSLDLEELSEFRTVTSFEKPVFQLKNVNNTLVILNSVNDLSALDLRTKSTKQL + AQNVTSFDVTNSQLAVLLKDRSFQSFAWRNGEMEKQFEFSLPSELEELPVEEYSPLSV + TILSPQDFLAVFGNVISETDDEVSYDQKMYIIKHIDGSASFQETFDITPPFGQIVRFP + YMYKVTLSGLIEPDANVNVLASSCSSEVSIWDSKQVIEPSQDSERAVLPISEETDKDT + NPIGVAVDVVTSGTILEPCSGVDTIERLPLVYILNNEGSLQIVGLFHVAAIKSGHYSI + NLESLEHEKSLSPTSEKIPIAGQEQEEKKKNNESSKALSENPFTSANTSGFTFLKTQP + AAANSLQSQSSSTFGAPSFGSSAFKIDLPSVSSTSTGVASSEQDATDPASAKPVFGKP + AFGAIAKEPSTSEYAFGKPSFGAPSFGSGKSSVESPASGSAFGKPSFGTPSFGSGNSS + VEPPASGSAFGKPSFGTPSFGSGNSSAEPPASGSAFGKPSFGTSAFGTASSNETNSGS + IFGKAAFGSSSFAPANNELFGSNFTISKPTVDSPKEVDSTSPFPSSGDQSEDESKSDV + DSSSTPFGTKPNTSTKPKTNAFDFGSSSFGSGFSKALESVGSDTTFKFGTQASPFSSQ + LGNKSPFSSFTKDDTENGSLSKGSTSEINDDNEEHESNGPNVSGNDLTDSTVEQTSST + RLPETPSDEDGEVVEEEAQKSPIGKLTETIKKSANIDMAGLKNPVFGNHVKAKSESPF + SAFATNITKPSSTTPAFSFGNSTMNKSNTSTVSPMEEADTKETSEKGPITLKSVENPF + LPAKEERTGESSKKDHNDDPKDGYVSGSEISVRTSESAFDTTANEEIPKSQDVNNHEK + SETDPKYSQHAVVDHDNKSKEMNETSKNNERSGQPNHGVQGDGIALKKDNEKENFDSN + MAIKQFEDHQSSEEDASEKDSRQSSEVKESDDNMSLNSDRDESISESYDKLEDINTDE + LPHGGEAFKAREVSASADFDVQTSLEDNYAESGIQTDLSESSKENEVQTDAIPVKHNS + TQTVKKEAVDNGLQTEPVETCNFSVQTFEGDENYLAEQCKPKQLKEYYTSAKVSNIPF + VSQNSTLRLIESTFQTVEAEFTVLMENIRNMDTFFTDQSSIPLVKRTVRSINNLYTWR + IPEAEILLNIQNNIKCEQMQITNANIQDLKEKVTDYVRKDIAQITEDVANAKEEYLFL + MHFDDASSGYVKDLSTHQFRMQKTLRQKLFDVSAKINHTEELLNILKLFTVKNKRLDD + NPLVAKLAKESLARDGLLKEIKLLREQVSRLQLEEKGKKASSFDASSSITKDMKGFKV + VEVGLAMNTKKQIGDFFKNLNMAK" + gene complement(<149143..>149988) + /gene="POR2" + /locus_tag="YIL114C" + /db_xref="GeneID:854692" + mRNA complement(<149143..>149988) + /gene="POR2" + /locus_tag="YIL114C" + /product="putative porin POR2" + /transcript_id="NM_001179462.3" + /db_xref="GeneID:854692" + CDS complement(149143..149988) + /gene="POR2" + /locus_tag="YIL114C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:11914276|PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane [PMID:16407407|PMID:9315631]" + /experiment="EXISTENCE:mutant phenotype:GO:0045454 cell + redox homeostasis [PMID:18768136]" + /experiment="EXISTENCE:mutant phenotype:GO:0051027 DNA + transport [PMID:19056337]" + /note="Putative mitochondrial porin (voltage-dependent + anion channel); not required for mitochondrial membrane + permeability or mitochondrial osmotic stability; POR2 has + a paralog, POR1, that arose from the whole genome + duplication" + /codon_start=1 + /product="putative porin POR2" + /protein_id="NP_012152.3" + /db_xref="GeneID:854692" + /db_xref="SGD:S000001376" + /translation="MALRFFNDISRDVNGLFNRDFFHTNPLSLNISTTTENGVNFTLK + AKQGVTEGPIQTSVEGRFYDRKEGVSLSQSWSNQNRLNTRIEFSKIAPGWKGDVNAFL + TPQSIKNAKFNLSYAQKSFAARTSIDILQPKDFVGSVTLGHRGFVGGTDIAYDTAAGL + CARYAMSIGYLAREYSFILSTNNRQCATASFFQNVNRYLQVGTKATLQSKTSSNMNIE + FVTRYVPDSISQVKAKIADSGLTTLSYKRNLNKDISLGVGMSFNALQLTEPVHKFGWS + LSFSP" + gene <150559..>151188 + /gene="SDP1" + /locus_tag="YIL113W" + /db_xref="GeneID:854693" + mRNA <150559..>151188 + /gene="SDP1" + /locus_tag="YIL113W" + /product="mitogen-activated protein kinase tyrosine + protein phosphatase SDP1" + /transcript_id="NM_001179461.1" + /db_xref="GeneID:854693" + CDS 150559..151188 + /gene="SDP1" + /locus_tag="YIL113W" + /EC_number="3.1.3.48" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:11923319]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11923319]" + /experiment="EXISTENCE:direct assay:GO:0017017 MAP kinase + tyrosine/serine/threonine phosphatase activity + [PMID:12220658]" + /experiment="EXISTENCE:direct assay:GO:0033550 MAP kinase + tyrosine phosphatase activity + [PMID:11923319|PMID:17495930]" + /experiment="EXISTENCE:genetic interaction:GO:0000196 cell + wall integrity MAPK cascade [PMID:11923319]" + /note="Stress-inducible dual-specificity MAP kinase + phosphatase; negatively regulates Slt2p MAP kinase by + direct dephosphorylation, diffuse localization under + normal conditions shifts to punctate localization after + heat shock; SDP1 has a paralog, MSG5, that arose from the + whole genome duplication" + /codon_start=1 + /product="mitogen-activated protein kinase tyrosine + protein phosphatase SDP1" + /protein_id="NP_012153.1" + /db_xref="GeneID:854693" + /db_xref="SGD:S000001375" + /translation="MNIYTSPTRTPNIAPKSGQRPSLPMLATDERSTDKESPNEDREF + VPCSSLDVRRIYPKGPLLVLPEKIYLYSEPTVKELLPFDVVINVAEEANDLRMQVPAV + EYHHYRWEHDSQIALDLPSLTSIIHAATTKREKILIHCQCGLSRSATLIIAYIMKYHN + LSLRHSYDLLKSRADKINPSIGLIFQLMEWEVALNAKTNVQANSYRKVP" + gene <151595..>154846 + /gene="HOS4" + /locus_tag="YIL112W" + /db_xref="GeneID:854694" + mRNA <151595..>154846 + /gene="HOS4" + /locus_tag="YIL112W" + /product="Hos4p" + /transcript_id="NM_001179460.1" + /db_xref="GeneID:854694" + CDS 151595..154846 + /gene="HOS4" + /locus_tag="YIL112W" + /experiment="EXISTENCE:direct assay:GO:0006338 chromatin + remodeling [PMID:11711434]" + /experiment="EXISTENCE:direct assay:GO:0034967 Set3 + complex [PMID:11711434]" + /note="Subunit of the Set3 complex; complex is a + meiotic-specific repressor of sporulation specific genes + that contains deacetylase activity; potential Cdc28p + substrate" + /codon_start=1 + /product="Hos4p" + /protein_id="NP_012154.1" + /db_xref="GeneID:854694" + /db_xref="SGD:S000001374" + /translation="MNETTTKQPLKKRSLSSYLSNVSTRREELEKISKQETSEEEDTA + GKHEQRETLSEEVSDKFPENVASFRSQTTSVHQATQNNLNAKESEDLAHKNDASSHEG + EVNGDSRPDDVPETNEKISQAIRAKISSSSSSPNVRNVDIQNHQPFSRDQLRAMLKEP + KRKTVDDFIEEEGLGAVEEEDLSDEVLEKNTTEPENVEKDIEYSDSDKDTDDVGSDDP + TAPNSPIKLGRRKLVRGDQLDATTSSMFNNESDSELSDIDDSKNIALSSSLFRGGSSP + VKETNNNLSNMNSSPAQNPKRGSVSRSNDSNKSSHIAVSKRPKQKKGIYRDSGGRTRL + QIACDKGKYDVVKKMIEEGGYDINDQDNAGNTALHEAALQGHIEIVELLIENGADVNI + KSIEMFGDTPLIDASANGHLDVVKYLLKNGADPTIRNAKGLTAFESVDDESEFDDEED + QKILREIKKRLSIAAKKWTNRAGIHNDKSKNGNNAHTIDQPPFDNTTKAKNEKAADSP + SMASNIDEKAPEEEFYWTDVTSRAGKEKLFKASKEGHLPYVGTYVENGGKIDLRSFFE + SVKCGHEDITSIFLAFGFPVNQTSRDNKTSALMVAVGRGHLGTVKLLLEAGADPTKRD + KKGRTALYYAKNSIMGITNSEEIQLIENAINNYLKKHSEDNNDDDDDDDNNNETYKHE + KKREKTQSPILASRRSATPRIEDEEDDTRMLNLADDDFNNDRDVKESTTSDSRKRLDD + NENVGTQYSLDWKKRKTNALQDEEKLKSISPLSMEPHSPKKAKSVEISKIHEETAAER + EARLKEEEEYRKKRLEKKRKKEQELLQKLAEDEKKRIEEQEKQKVLEMERLEKATLEK + ARKMEREKEMEEISYRRAVRDLYPLGLKIINFNDKLDYKRFLPLYYFVDEKNDKFVLD + LQVMILLKDIDLLSKDNQPTSEKIPVDPSHLTPLWNMLKFIFLYGGSYDDKKNNMENK + RYVVNFDGVDLDTKIGYELLEYKKFVSLPMAWIKWDNVVIENHAKRKEIEGNMIQISI + NEFARWRNDKLNKAQQPTRKQRSLKIPRELPVKFQHRMSISSVLQQTSKEPFW" + gene <155222..>155765 + /gene="COX5B" + /locus_tag="YIL111W" + /db_xref="GeneID:854695" + mRNA join(<155222,155311..>155765) + /gene="COX5B" + /locus_tag="YIL111W" + /product="cytochrome c oxidase subunit Vb" + /transcript_id="NM_001179459.1" + /db_xref="GeneID:854695" + CDS join(155222,155311..155765) + /gene="COX5B" + /locus_tag="YIL111W" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005751 + mitochondrial respiratory chain complex IV [PMID:2986105]" + /experiment="EXISTENCE:direct assay:GO:0006123 + mitochondrial electron transport, cytochrome c to oxygen + [PMID:1331058]" + /experiment="EXISTENCE:mutant phenotype:GO:0004129 + cytochrome-c oxidase activity [PMID:2986105]" + /experiment="EXISTENCE:mutant phenotype:GO:0050421 nitrite + reductase (NO-forming) activity [PMID:18388202]" + /note="Subunit Vb of cytochrome c oxidase; cytochrome c + oxidase is the terminal member of the mitochondrial inner + membrane electron transport chain; Cox5Bp is predominantly + expressed during anaerobic growth while its isoform Va + (Cox5Ap) is expressed during aerobic growth; COX5B has a + paralog, COX5A, that arose from the whole genome + duplication" + /codon_start=1 + /product="cytochrome c oxidase subunit Vb" + /protein_id="NP_012155.1" + /db_xref="GeneID:854695" + /db_xref="SGD:S000001373" + /translation="MLRTSLTKGARLTGTRFVQTKALSKATLTDLPERWENMPNLEQK + EIADNLTERQKLPWKTLNNEEIKAAWYISYGEWGPRRPVHGKGDVAFITKGVFLGLGI + SFGLFGLVRLLANPETPKTMNREWQLKSDEYLKSKNANPWGGYSQVQSK" + gene <156045..>157178 + /gene="HPM1" + /locus_tag="YIL110W" + /gene_synonym="MNI1" + /db_xref="GeneID:854696" + mRNA <156045..>157178 + /gene="HPM1" + /locus_tag="YIL110W" + /gene_synonym="MNI1" + /product="protein-histidine N-methyltransferase" + /transcript_id="NM_001179458.1" + /db_xref="GeneID:854696" + CDS 156045..157178 + /gene="HPM1" + /locus_tag="YIL110W" + /gene_synonym="MNI1" + /EC_number="2.1.1.85" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0000027 + ribosomal large subunit assembly + [PMID:24865971|PMID:26826131]" + /experiment="EXISTENCE:mutant phenotype:GO:0018064 + protein-L-histidine N-tele-methyltransferase activity + [PMID:20864530]" + /experiment="EXISTENCE:mutant phenotype:GO:0042038 + peptidyl-histidine methylation, to form + tele-methylhistidine [PMID:20864530]" + /experiment="EXISTENCE:mutant phenotype:GO:0045903 + positive regulation of translational fidelity + [PMID:24865971]" + /note="AdoMet-dependent methyltransferase; involved in a + novel 3-methylhistidine modification of multiple proteins, + including ribosomal protein Rpl3p; seven beta-strand MTase + family member; null mutant exhibits a weak vacuolar + protein sorting defect and caspofungin resistance" + /codon_start=1 + /product="protein-histidine N-methyltransferase" + /protein_id="NP_012156.1" + /db_xref="GeneID:854696" + /db_xref="SGD:S000001372" + /translation="MSFSFGFTSNDFDDDELVAQPETFVESSKENENTTAYINPLDSD + FLSQAGVVQPNVEDLGTILESLKDVRLTFEEFQSPIYRKPLIKRELFDVKHQLMLETD + AQSNNNSTELDILLGDTSEDLRKNIYEGGLKSWECSYDLVDLLSENVDRISNDIDAVV + EIGCGTALPSEFLFRSALLRNDRSKGLKFVLTDYNASVLRLVTIPNLVITWAKTVLTK + EQWYALQKDECEDIPINNEELLLTSKLLAAFYDDVQSRNISVTLISGSWGRKFSNLIH + EVLSGSQKVLSLSSETIYQPDNLPVIAETILDIHNLPQTDVKTYVAAKDIYFGVGGSI + TEFEAYLDDKINSEHLPIHSERFKVNSGLKRSIICIETNKAIR" + gene complement(<157385..>160165) + /gene="SEC24" + /locus_tag="YIL109C" + /gene_synonym="ANU1" + /db_xref="GeneID:854697" + mRNA complement(<157385..>160165) + /gene="SEC24" + /locus_tag="YIL109C" + /gene_synonym="ANU1" + /product="COPII subunit SEC24" + /transcript_id="NM_001179457.3" + /db_xref="GeneID:854697" + CDS complement(157385..160165) + /gene="SEC24" + /locus_tag="YIL109C" + /gene_synonym="ANU1" + /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type + vacuole membrane [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0030127 COPII + vesicle coat [PMID:8004676]" + /experiment="EXISTENCE:direct assay:GO:0090110 + COPII-coated vesicle cargo loading + [PMID:12941277|PMID:14627716|PMID:15665868]" + /experiment="EXISTENCE:mutant phenotype:GO:0005048 signal + sequence binding [PMID:12941277]" + /experiment="EXISTENCE:mutant phenotype:GO:0016236 + macroautophagy [PMID:11694599]" + /note="Component of the Sec23p-Sec24p heterodimer of the + COPII vesicle coat; required for cargo selection during + vesicle formation in ER to Golgi transport; homologous to + Sfb3p; SEC24 has a paralog, SFB2, that arose from the + whole genome duplication" + /codon_start=1 + /product="COPII subunit SEC24" + /protein_id="NP_012157.3" + /db_xref="GeneID:854697" + /db_xref="SGD:S000001371" + /translation="MSHHKKRVYPQAQLQYGQNATPLQQPAQFMPPQDPAAAGMSYGQ + MGMPPQGAVPSMGQQQFLTPAQEQLHQQIDQATTSMNDMHLHNVPLVDPNAYMQPQVP + VQMGTPLQQQQQPMAAPAYGQPSAAMGQNMRPMNQLYPIDLLTELPPPITDLTLPPPP + LVIPPERMLVPSELSNASPDYIRSTLNAVPKNSSLLKKSKLPFGLVIRPYQHLYDDID + PPPLNEDGLIVRCRRCRSYMNPFVTFIEQGRRWRCNFCRLANDVPMQMDQSDPNDPKS + RYDRNEIKCAVMEYMAPKEYTLRQPPPATYCFLIDVSQSSIKSGLLATTINTLLQNLD + SIPNHDERTRISILCVDNAIHYFKIPLDSENNEESADQINMMDIADLEEPFLPRPNSM + VVSLKACRQNIETLLTKIPQIFQSNLITNFALGPALKSAYHLIGGVGGKIIVVSGTLP + NLGIGKLQRRNESGVVNTSKETAQLLSCQDSFYKNFTIDCSKVQITVDLFLASEDYMD + VASLSNLSRFTAGQTHFYPGFSGKNPNDIVKFSTEFAKHISMDFCMETVMRARGSTGL + RMSRFYGHFFNRSSDLCAFSTMPRDQSYLFEVNVDESIMADYCYVQVAVLLSLNNSQR + RIRIITLAMPTTESLAEVYASADQLAIASFYNSKAVEKALNSSLDDARVLINKSVQDI + LATYKKEIVVSNTAGGAPLRLCANLRMFPLLMHSLTKHMAFRSGIVPSDHRASALNNL + ESLPLKYLIKNIYPDVYSLHDMADEAGLPVQTEDGEATGTIVLPQPINATSSLFERYG + LYLIDNGNELFLWMGGDAVPALVFDVFGTQDIFDIPIGKQEIPVVENSEFNQRVRNII + NQLRNHDDVITYQSLYIVRGASLSEPVNHASAREVATLRLWASSTLVEDKILNNESYR + EFLQIMKARISK" + gene <160887..>162977 + /locus_tag="YIL108W" + /db_xref="GeneID:854698" + mRNA <160887..>162977 + /locus_tag="YIL108W" + /product="putative metalloendopeptidase" + /transcript_id="NM_001179456.1" + /db_xref="GeneID:854698" + CDS 160887..162977 + /locus_tag="YIL108W" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095|PMID:22842922]" + /note="Putative metalloendopeptidase; forms cytoplasmic + foci upon DNA replication stress" + /codon_start=1 + /product="putative metalloendopeptidase" + /protein_id="NP_012158.1" + /db_xref="GeneID:854698" + /db_xref="SGD:S000001370" + /translation="MVGSKDIDLFNLRENEQIVSPCLIVHGKCNKQNGAKTVQVQHPQ + LPPITYPIHNQFFKATVILTPGENKLTFVTDTNTARTIVCYYTPLTQNPPVHLCLILA + KDSPLQFDSPREQKDREGGNGLELAIKKLRLGARLMQAYTNEQMLRNSMGNRTFPFVE + EFTWDTLFERPAMRNTIKIHVVRSEKTVKEIQDPDIAQQNSKGKNTGALFGIAMDALK + SYGGPFTNNEKPVQAACMFLDTHWDGKLIRGHAALGGGDDSIKLAIFGSHGLYSWPTC + LEQLVPYFTDETRSSTSEVANDCNECGTYWECLTITLGAFMHEIGHLLGCPHQESGVM + LRGYTTLNRSFLTKEAYSVRTNSTGASPPIFPKEECTWNRLDTVRFLYHPSFTLPQDY + YDPSFMRPTKLGGYPNIKHSVYPLGNGSCRILSPTGIYLIEIICDDLARGHIEYLPVS + LGGQGPQREVIVTLDDLRARLPKNELAKFGNTFKLKILSVNAPETEFDKFPSLLDVQP + LDMSKYGFSKNVQGIKSPLYGRSDGGNAVGVVAFDVRLVTAVRIYHGYALDGVRFYYK + EKPTGTKDAPASKPSVPPRNYFSKITHSIKNHASINEENLKSVLFGHETQNFTDATLE + PGEIIIGFNLRCGAWVDAIQIITSHGRMTDMFGNKDGGGFAELQPPNGQYILGVTGRV + GQWVDAFGIIYGAL" + gene complement(<163278..>165761) + /gene="PFK26" + /locus_tag="YIL107C" + /db_xref="GeneID:854699" + mRNA complement(<163278..>165761) + /gene="PFK26" + /locus_tag="YIL107C" + /product="6-phosphofructo-2-kinase" + /transcript_id="NM_001179455.1" + /db_xref="GeneID:854699" + CDS complement(163278..165761) + /gene="PFK26" + /locus_tag="YIL107C" + /EC_number="2.7.1.105" + /experiment="EXISTENCE:curator inference:GO:0005737 + cytoplasm [PMID:1657152]" + /experiment="EXISTENCE:direct assay:GO:0003873 + 6-phosphofructo-2-kinase activity [PMID:1322693]" + /experiment="EXISTENCE:mutant phenotype:GO:0003873 + 6-phosphofructo-2-kinase activity [PMID:1657152]" + /experiment="EXISTENCE:mutant phenotype:GO:0006003 + fructose 2,6-bisphosphate metabolic process + [PMID:1657152]" + /note="6-phosphofructo-2-kinase; inhibited by + phosphoenolpyruvate and sn-glycerol 3-phosphate; has + negligible fructose-2,6-bisphosphatase activity; + transcriptional regulation involves protein kinase A" + /codon_start=1 + /product="6-phosphofructo-2-kinase" + /protein_id="NP_012159.1" + /db_xref="GeneID:854699" + /db_xref="SGD:S000001369" + /translation="MFKPVDFSETSPVPPDIDLAPTQSPHHVAPSQDSSYDLLSRSSD + DKIDAEKGPHDELSKHLPLFQKRPLSDTPISSNWNSPGITEENTPSDSPENSATNLKS + LHRLHINDETQLKNAKIPTNDTTDYMPPSDGANEVTRIDLKDIKSPTRHHKRRPTTID + VPGLTKSKTSPDGLISKEDSGSKLVIVMVGLPATGKSFITNKLSRFLNYSLYYCKVFN + VGNTRRKFAKEHGLKDQDSKFFEPKNADSTRLRDKWAMDTLDELLDYLLEGSGSVGIF + DATNTSRERRKNVLARIRKRSPHLKVLFLESVCSDHALVQKNIRLKLFGPDYKGKDPE + SSLKDFKSRLANYLKAYEPIEDDENLQYIKMIDVGKKVIAYNIQGFLASQTVYYLLNF + NLADRQIWITRSGESEDNVSGRIGGNSHLTPRGLRFAKSLPKFIARQREIFYQNLMQQ + KKNNENTDGNIYNDFFVWTSMRARTIGTAQYFNEDDYPIKQMKMLDELSAGDYDGMTY + PEIKNNFPEEFEKRQKDKLRYRYPGIGGESYMDVINRLRPVITELERIEDNVLIITHR + VVARALLGYFMNLSMGIIANLDVPLHCVYCLEPKPYGITWSLWEYDEASDSFSKVPQT + DLNTTRVKEVGLVYNERRYSVIPTAPPSARSSFASDFLSRKRSNPTSASSSQSELSEQ + PKNSVSAQTGSNNTTLIGSNFNIKNENGDSRIPLSAPLMATNTSNNILDGGGTSISIH + RPRVVPNQNNVNPLLANNNKAASNVPNVKKSAATPRQIFEIDKVDEKLSMLKNKSFLL + HGKDYPNNADNNDNEDIRAKTMNRSQSHV" + gene <166415..>167444 + /gene="MOB1" + /locus_tag="YIL106W" + /db_xref="GeneID:854700" + mRNA join(<166415..166434,166520..>167444) + /gene="MOB1" + /locus_tag="YIL106W" + /product="Mob1p" + /transcript_id="NM_001179454.1" + /db_xref="GeneID:854700" + CDS join(166415..166434,166520..167444) + /gene="MOB1" + /locus_tag="YIL106W" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0005816 spindle + pole body [PMID:11434459]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:11434459|PMID:11564880]" + /experiment="EXISTENCE:direct assay:GO:0019207 kinase + regulator activity [PMID:11404483]" + /experiment="EXISTENCE:direct assay:GO:0034399 nuclear + periphery [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0034973 Sid2-Mob1 + complex [PMID:9528782]" + /experiment="EXISTENCE:direct assay:GO:0044732 mitotic + spindle pole body [PMID:11564880]" + /experiment="EXISTENCE:genetic interaction:GO:0007096 + regulation of exit from mitosis [PMID:9436989]" + /experiment="EXISTENCE:mutant phenotype:GO:0000281 mitotic + cytokinesis [PMID:11564880]" + /experiment="EXISTENCE:mutant phenotype:GO:0007096 + regulation of exit from mitosis [PMID:9436989]" + /experiment="EXISTENCE:physical interaction:GO:0034973 + Sid2-Mob1 complex [PMID:9528782]" + /note="Component of the mitotic exit network; associates + with and is required for the activation and + Cdc15p-dependent phosphorylation of the Dbf2p kinase; + required for cytokinesis and cell separation; component of + the CCR4 transcriptional complex; relocalizes from + cytoplasm to the nuclear periphery upon DNA replication + stress" + /codon_start=1 + /product="Mob1p" + /protein_id="NP_012160.2" + /db_xref="GeneID:854700" + /db_xref="SGD:S000001368" + /translation="MSFLQNFHISPGQTIRSTRGFKWNTANAANNAGSVSPTKATPHN + NTINGNNNNANTINNRADFTNNPVNGYNESDHGRMSPVLTTPKRHAPPPEQLQNVTDF + NYTPSHQKPFLQPQAGTTVTTHQDIKQIVEMTLGSEGVLNQAVKLPRGEDENEWLAVH + CVDFYNQINMLYGSITEFCSPQTCPRMIATNEYEYLWAFQKGQPPVSVSAPKYVECLM + RWCQDQFDDESLFPSKVTGTFPEGFIQRVIQPILRRLFRVYAHIYCHHFNEILELNLQ + TVLNTSFRHFCLFAQEFELLRPADFGPLLELVMELRDR" + gene complement(<167581..>169641) + /gene="SLM1" + /locus_tag="YIL105C" + /gene_synonym="LIT2" + /db_xref="GeneID:854701" + mRNA complement(<167581..>169641) + /gene="SLM1" + /locus_tag="YIL105C" + /gene_synonym="LIT2" + /product="phosphatidylinositol 4,5-bisphosphate-binding + protein" + /transcript_id="NM_001179453.1" + /db_xref="GeneID:854701" + CDS complement(167581..169641) + /gene="SLM1" + /locus_tag="YIL105C" + /gene_synonym="LIT2" + /experiment="EXISTENCE:direct assay:GO:0005546 + phosphatidylinositol-4,5-bisphosphate binding + [PMID:15689497|PMID:21119626]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane + [PMID:15372071|PMID:15689497|PMID:16622836|PMID:17101780]" + /experiment="EXISTENCE:direct assay:GO:0032126 eisosome + [PMID:19064668|PMID:21451250]" + /experiment="EXISTENCE:direct assay:GO:0046625 + sphingolipid binding [PMID:21119626]" + /experiment="EXISTENCE:genetic interaction:GO:0001558 + regulation of cell growth [PMID:15689497]" + /experiment="EXISTENCE:genetic interaction:GO:0016197 + endosomal transport [PMID:21451250]" + /experiment="EXISTENCE:genetic interaction:GO:0030036 + actin cytoskeleton organization + [PMID:15372071|PMID:15689497]" + /experiment="EXISTENCE:genetic interaction:GO:0051017 + actin filament bundle assembly [PMID:15689497]" + /experiment="EXISTENCE:genetic interaction:GO:0070941 + eisosome assembly [PMID:21451250]" + /experiment="EXISTENCE:genetic interaction:GO:0072659 + protein localization to plasma membrane [PMID:22307609]" + /experiment="EXISTENCE:physical interaction:GO:0001558 + regulation of cell growth [PMID:15689497]" + /experiment="EXISTENCE:physical interaction:GO:0030950 + establishment or maintenance of actin cytoskeleton + polarity [PMID:15689497]" + /experiment="EXISTENCE:physical interaction:GO:0031929 TOR + signaling [PMID:15689497]" + /note="Phosphoinositide PI4,5P(2) binding protein, forms a + complex with Slm2p; acts downstream of Mss4p in a pathway + regulating actin cytoskeleton organization in response to + stress; TORC2 complex substrate and effector; protein + abundance increases in response to DNA replication stress; + SLM1 has a paralog, SLM2, that arose from the whole genome + duplication" + /codon_start=1 + /product="phosphatidylinositol 4,5-bisphosphate-binding + protein" + /protein_id="NP_012161.1" + /db_xref="GeneID:854701" + /db_xref="SGD:S000001367" + /translation="MSKNNTMTSAVSDMLSQQQLNLQHLHNLQQHTRSMTSADHANVL + QQQQQQQQQQQQQQQQQQQSASFQNGSLTSDINQQSYLNGQPVPSTSNSTFQNNRTLT + MNSGGLQGIISNGSPNIDSNTNVTIAVPDPNNNNGKQLQGKNSLTNTSILSRARSSLQ + RQRLAQQQQQQQDPRSPLVILVPTAAQPTDILAARFSAWRNVIKSVIVYLTEIASIQD + EIVRQQLRLSHAVQFPFFSIENQYQPSSQEDKSVQKFFLPLGNGSIQDLPTILNQYHE + SLASSASKASRELTNDVIPRLEDLRRDLIVKIKEIKSLQSDFKNSCSKELQQTKQAMK + QFQESLKDARYSVPKQDPFLTKLALDRQIKKQLQEENFLHEAFDNLETSGAELEKIVV + MEIQNSLTIYARLLGQEAQLVFDILISKLDSGFFNVDPQFEWDNFISRDPNFLLPNLP + MRTFKEIVYKYQFDPLTYEIKSGFLERRSKFLKSYSKGYYVLTPNFLHEFKTADRKKD + LVPVMSLALSECTVTEHSRKNSTSSPNSTGSDAKFVLHAKQNGIIRRGHNWVFKADSY + ESMMSWFDNLKILTSTSNIQDKYKFITQKLNLNSDGKPKLTNNHTSINKYQLSNANST + MVENDENDDINSNYVGSTVTPKLDNQTNTNTSMSSLPDTNDSELQDQVPNIYIQTPIN + DFKS" + gene <167664..>167804 + /locus_tag="YIL105W-A" + /db_xref="GeneID:13393613" + mRNA <167664..>167804 + /locus_tag="YIL105W-A" + /product="uncharacterized protein" + /transcript_id="NM_001270750.1" + /db_xref="GeneID:13393613" + CDS 167664..167804 + /locus_tag="YIL105W-A" + /note="hypothetical protein; completely overlaps the + verified gene SLM1; identified by gene-trapping, + microarray-based expression analysis, and genome-wide + homology searching; mRNA identified as translated by + ribosome profiling data" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001257679.1" + /db_xref="GeneID:13393613" + /db_xref="SGD:S000028657" + /translation="MKTWMYSYLFDCPILVLPWTPHNYYLYHRFHHFLPLCYWHYSAD + TY" + gene complement(<169982..>171505) + /gene="SHQ1" + /locus_tag="YIL104C" + /db_xref="GeneID:854702" + mRNA complement(<169982..>171505) + /gene="SHQ1" + /locus_tag="YIL104C" + /product="Hsp90 cochaperone SHQ1" + /transcript_id="NM_001179452.3" + /db_xref="GeneID:854702" + CDS complement(169982..171505) + /gene="SHQ1" + /locus_tag="YIL104C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm + [PMID:12228251]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0051082 unfolded + protein binding [PMID:19426738]" + /experiment="EXISTENCE:mutant phenotype:GO:0000493 box + H/ACA snoRNP assembly [PMID:12228251]" + /experiment="EXISTENCE:physical interaction:GO:0000493 box + H/ACA snoRNP assembly [PMID:12228251]" + /note="Chaperone protein; required for the assembly of box + H/ACA snoRNPs and thus for pre-rRNA processing; functions + as an RNA mimic; forms a complex with Naf1p and interacts + with H/ACA snoRNP components Nhp2p and Cbf5p; homology + with known Hsp90p cochaperones; relocalizes to the cytosol + in response to hypoxia" + /codon_start=1 + /product="Hsp90 cochaperone SHQ1" + /protein_id="NP_012162.3" + /db_xref="GeneID:854702" + /db_xref="SGD:S000001366" + /translation="MITPRFSITQDEEFIFLKIFISNIRFSAVGLEIIIQENMIIFHL + SPYYLRLRFPHELIDDERSTAQYDSKDECINVKVAKLNKNEYFEDLDLPTKLLARQGD + LAGADALTENTDAKKTQKPLIQEVETDGVSNNIKDDVKTIGQMGEGFNWEIEQKMDSS + TNNGILKTKYGFDNLYDTVISVSTSNGNDINELDDPEHTDANDRVIERLRKENLKFDP + EYYVSEYMTHKYGNEEDLEINGIKELLKFTPSIVKQYLQWYKDSTNPNLVMPIEFTDE + EQKQMQDNLPKKSYLVEDIKPLYVTILSVLFSYVFEQIENEGTHTTESAWTMGKLCPQ + ISFLDQQLKQVNELQDGMKEISKVNKDSSLIKIAIITGIRRALSYPLHRNYDLAMKAW + TFVYYILRGGKRLVIRALLDIHETFRFHDVYYVYDKVLLDDLTAWFISQGSENVIRSL + ALEMRKEQESLSKQDIEFECIASFNEQTGEPEWETLNIREMEILAESEYREQQQNPQ" + gene <171751..>173028 + /gene="DPH1" + /locus_tag="YIL103W" + /db_xref="GeneID:854703" + mRNA <171751..>173028 + /gene="DPH1" + /locus_tag="YIL103W" + /product="2-(3-amino-3-carboxypropyl)histidine synthase" + /transcript_id="NM_001179451.1" + /db_xref="GeneID:854703" + CDS 171751..173028 + /gene="DPH1" + /locus_tag="YIL103W" + /EC_number="2.5.1.108" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276|PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0017183 protein + histidyl modification to diphthamide [PMID:15485916]" + /note="Protein required for synthesis of diphthamide; + required along with Dph2p, Kti11p, Jjj3p, and Dph5p; + diphthamide is a modified histidine residue of translation + elongation factor 2 (Eft1p or Eft2p); forms a complex with + Dph2p that catalyzes the first step of diphthamide + biosynthesis" + /codon_start=1 + /product="2-(3-amino-3-carboxypropyl)histidine synthase" + /protein_id="NP_012163.1" + /db_xref="GeneID:854703" + /db_xref="SGD:S000001365" + /translation="MSGSTESKKQPRRRFIGRKSGNSNNDKLTTVAENGNEIIHKQKS + RIALGRSVNHVPEDILNDKELNEAIKLLPSNYNFEIHKTVWNIRKYNAKRIALQMPEG + LLIYSLIISDILEQFCGVETLVMGDVSYGACCIDDFTARALDCDFIVHYAHSCLVPID + VTKIKVLYVFVTINIQEDHIIKTLQKNFPKGSRIATFGTIQFNPAVHSVRDKLLNDEE + HMLYIIPPQIKPLSRGEVLGCTSERLDKEQYDAMVFIGDGRFHLESAMIHNPEIPAFK + YDPYNRKFTREGYDQKQLVEVRAEAIEVARKGKVFGLILGALGRQGNLNTVKNLEKNL + IAAGKTVVKIILSEVFPQKLAMFDQIDVFVQVACPRLSIDWGYAFNKPLLTPYEASVL + LKKDVMFSEKYYPMDYYEAKGYGRGETPKHAIE" + gene complement(<173365..>173592) + /locus_tag="YIL102C-A" + /db_xref="GeneID:3799974" + mRNA complement(<173365..>173592) + /locus_tag="YIL102C-A" + /product="uncharacterized protein" + /transcript_id="NM_001184686.1" + /db_xref="GeneID:3799974" + CDS complement(173365..173592) + /locus_tag="YIL102C-A" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /note="Regulatory subunit of dolichyl phosphate mannose + (DPM) synthase; identified based on comparisons of the + genome sequences of six Saccharomyces species; SWAT-GFP, + seamless-GFP and mCherry fusion proteins localize to the + endoplasmic reticulum" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001032579.1" + /db_xref="GeneID:3799974" + /db_xref="SGD:S000113587" + /translation="MNRFVIICLLFTYYVIWSLLPIFEIENSNPVVSLLFPISSNVAI + FLPIFLLLIGFTLTGSVLGVLLIRSDKKKKV" + gene complement(<174582..>174887) + /locus_tag="YIL102C" + /db_xref="GeneID:854704" + mRNA complement(<174582..>174887) + /locus_tag="YIL102C" + /product="uncharacterized protein" + /transcript_id="NM_001179450.1" + /db_xref="GeneID:854704" + CDS complement(174582..174887) + /locus_tag="YIL102C" + /note="hypothetical protein" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012164.1" + /db_xref="GeneID:854704" + /db_xref="SGD:S000001364" + /translation="MLKVEKFKKLKRFEVYYCLKNSFLEEVDIEMKYSCSITTIMSNG + SASLLMNWEELTPGHCFTSYTTNPIAGDYGLNASAIDGHTEELVATHPAGTLENATQ" + gene 175031..175103 + /locus_tag="YNCI0002W" + /db_xref="GeneID:854705" + tRNA 175031..175103 + /locus_tag="YNCI0002W" + /product="tRNA-Thr" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Threonine tRNA (tRNA-Thr), predicted by tRNAscan-SE + analysis" + /db_xref="GeneID:854705" + /db_xref="SGD:S000006741" + rep_origin 175038..175358 + /note="ARS912; Autonomously Replicating Sequence" + /db_xref="SGD:S000118396" + gene complement(<175307..>177250) + /gene="XBP1" + /locus_tag="YIL101C" + /db_xref="GeneID:854706" + mRNA complement(<175307..>177250) + /gene="XBP1" + /locus_tag="YIL101C" + /product="Xbp1p" + /transcript_id="NM_001179449.1" + /db_xref="GeneID:854706" + CDS complement(175307..177250) + /gene="XBP1" + /locus_tag="YIL101C" + /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding + transcription factor activity, RNA polymerase II-specific + [PMID:10611226]" + /experiment="EXISTENCE:direct assay:GO:0003700 DNA-binding + transcription factor activity [PMID:9343412]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22842922|PMID:9343412]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0043565 + sequence-specific DNA binding [PMID:19158363]" + /experiment="EXISTENCE:mutant phenotype:GO:0000122 + negative regulation of transcription by RNA polymerase II + [PMID:10611226|PMID:11340165|PMID:24204289|PMID:9343412]" + /note="Transcriptional repressor; binds promoter sequences + of cyclin genes, CYS3, and SMF2; not expressed during log + phase of growth, but induced by stress or starvation + during mitosis, and late in meiosis; represses 15% of all + yeast genes as cells transition to quiescence; important + for maintaining G1 arrest and for longevity of quiescent + cells; member of Swi4p/Mbp1p family; phosphorylated by + Cdc28p; relative distribution to nucleus increases upon + DNA replication stress" + /codon_start=1 + /product="Xbp1p" + /protein_id="NP_012165.1" + /db_xref="GeneID:854706" + /db_xref="SGD:S000001363" + /translation="MKYPAFSINSDTVHLTDNPLDDYQRLYLVSVLDRDSPPASFSAG + LNIRKVNYKSSIAAQFTHPNFIISARDAGNGEEAAAQNVLNCFEYQFPNLQTIQSLVH + EQTLLSQLASSATPHSALHLHDKNILMGKIILPSRSNKTPVSASPTKQEKKALSTASR + ENATSSLTKNQQFKLTKMDHNLINDKLINPNNCVIWSHDSGYVFMTGIWRLYQDVMKG + LINLPRGDSVSTSQQQFFCKAEFEKILSFCFYNHSSFTSEESSSVLLSSSTSSPPKRR + TSTGSTFLDANASSSSTSSTQANNYIDFHWNNIKPELRDLICQSYKDFLINELGPDQI + DLPNLNPANFTKRIRGGYIKIQGTWLPMEISRLLCLRFCFPIRYFLVPIFGPDFPKDC + ESWYLAHQNVTFASSTTGAGAATAATAAANTSTNFTSTAVARPRQKPRPRPRQRSTSM + SHSKAQKLVIEDALPSFDSFVENLGLSSNDKNFIKKNSKRQKSSTYTSQTSSPIGPRD + PTVQILSNLASFYNTHGHRYSYPGNIYIPQQRYSLPPPNQLSSPQRQLNYTYDHIHPV + PSQYQSPRHYNVPSSPIAPAPPTFPQPYGDDHYHFLKYASEVYKQQNQRPAHNTNTNM + DTSFSPRANNSLNNFKFKTNSKQ" + gene <178004..>179653 + /gene="SGA1" + /locus_tag="YIL099W" + /db_xref="GeneID:854708" + mRNA <178004..>179653 + /gene="SGA1" + /locus_tag="YIL099W" + /product="glucan 1,4-alpha-glucosidase" + /transcript_id="NM_001179447.3" + /db_xref="GeneID:854708" + CDS 178004..179653 + /gene="SGA1" + /locus_tag="YIL099W" + /EC_number="3.2.1.3" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:2493265|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0004339 glucan + 1,4-alpha-glucosidase activity [PMID:2493265]" + /experiment="EXISTENCE:direct assay:GO:0005628 prospore + membrane [PMID:24390141]" + /experiment="EXISTENCE:mutant phenotype:GO:0005980 + glycogen catabolic process [PMID:11486014]" + /note="Intracellular sporulation-specific glucoamylase; + involved in glycogen degradation; induced during + starvation of a/a diploids late in sporulation, but + dispensable for sporulation" + /codon_start=1 + /product="glucan 1,4-alpha-glucosidase" + /protein_id="NP_012167.3" + /db_xref="GeneID:854708" + /db_xref="SGD:S000001361" + /translation="MARQKMFYNKLLGMLSVGFGFAWALENITIYEFDFGKGILDQSY + GGVFSNNGPSQVQLRDAVLMNGTVVYDSNGAWDSSALEEWLQGQKKVSIEKIFENIGP + SAVYPSISPGVVIASPSQTHPDYFYQWIRDSALTINSIVSHSAGPAIETLLQYLNVSF + HLQRSNNTLGAGIGYTNDTVALGDPKWNVDNTAFTEDWGRPQNDGPALRSIAILKIID + YIKQSGTDLGAKYPFQSTADIFDDIVRWDLRFIIDHWNSSGFDLWEEVNGMHFFTLLV + QLSAVDKSLSYFNASERSSPFVEELRQTRRDISKFLVDPANGFINGKYNYIVGTPMIA + DTLRSGLDISTLLAANTVHDAPSASHLPFDINDPAVLNTLHHLMLHMRSIYPINDSSK + NATGIALGRYPEDVYDGYGFGEGNPWVLATCTASTTLYQLIYRHISEQHDLVVPMNND + CSNAFWSELVFSNLTTLGNDEGYLILEFNTPAFNQTIQKIFQLADSFLVKLKAHVGTD + GELSEQFNKYTGFMQGAQHLTWSYTSFWDAYQIRQEVLQSL" + gene complement(<179772..>180239) + /gene="FMC1" + /locus_tag="YIL098C" + /db_xref="GeneID:854709" + mRNA complement(<179772..>180239) + /gene="FMC1" + /locus_tag="YIL098C" + /product="Fmc1p" + /transcript_id="NM_001179446.3" + /db_xref="GeneID:854709" + CDS complement(179772..180239) + /gene="FMC1" + /locus_tag="YIL098C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005759 + mitochondrial matrix [PMID:11096112]" + /experiment="EXISTENCE:genetic interaction:GO:0033615 + mitochondrial proton-transporting ATP synthase complex + assembly [PMID:11096112]" + /experiment="EXISTENCE:mutant phenotype:GO:0016236 + macroautophagy [PMID:19793921]" + /experiment="EXISTENCE:mutant phenotype:GO:0033615 + mitochondrial proton-transporting ATP synthase complex + assembly [PMID:11096112]" + /note="Mitochondrial matrix protein; required for assembly + or stability at high temperature of the F1 sector of + mitochondrial F1F0 ATP synthase; null mutant temperature + sensitive growth on glycerol is suppressed by multicopy + expression of Odc1p" + /codon_start=1 + /product="Fmc1p" + /protein_id="NP_012168.3" + /db_xref="GeneID:854709" + /db_xref="SGD:S000001360" + /translation="MDRPRTLRTYRGLIRAILKYERPSKIVNWGNLRKAMITKLEYAK + KQNQRDSHENINRQLEKWKKLDPVSDRSLNLFIADSKSLRSILQNDIKWEKKVAQGQN + VDEIFEHALDIIKFLDNQREYEELVDRYNPGNKLTQDEKVKRTANVVGLDVPT" + gene <180427..>181977 + /gene="FYV10" + /locus_tag="YIL097W" + /gene_synonym="GID9" + /db_xref="GeneID:854710" + mRNA <180427..>181977 + /gene="FYV10" + /locus_tag="YIL097W" + /gene_synonym="GID9" + /product="glucose-induced degradation complex subunit + FYV10" + /transcript_id="NM_001179445.1" + /db_xref="GeneID:854710" + CDS 180427..181977 + /gene="FYV10" + /locus_tag="YIL097W" + /gene_synonym="GID9" + /EC_number="2.3.2.27" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0034657 GID complex + [PMID:16872538|PMID:18508925]" + /experiment="EXISTENCE:mutant phenotype:GO:0043066 + negative regulation of apoptotic process [PMID:18355271]" + /experiment="EXISTENCE:mutant phenotype:GO:0043161 + proteasome-mediated ubiquitin-dependent protein catabolic + process [PMID:12686616]" + /experiment="EXISTENCE:mutant phenotype:GO:0045721 + negative regulation of gluconeogenesis [PMID:12686616]" + /experiment="EXISTENCE:mutant phenotype:GO:0061630 + ubiquitin protein ligase activity [PMID:22044534]" + /note="Subunit of GID complex; involved in + proteasome-dependent catabolite inactivation of + gluconeogenic enzymes FBPase, PEPCK, and c-MDH; forms + dimer with Rmd5p that is then recruited to GID Complex by + Gid8p; contains a degenerate RING finger motif needed for + GID complex ubiquitin ligase activity in vivo, as well as + CTLH and CRA domains; plays role in anti-apoptosis; + required for survival upon exposure to K1 killer toxin" + /codon_start=1 + /product="glucose-induced degradation complex subunit + FYV10" + /protein_id="NP_012169.1" + /db_xref="GeneID:854710" + /db_xref="SGD:S000001359" + /translation="MAEKSIFNEPDVDFHLKLNQQLFHIPYELLSKRIKHTQAVINKE + TKSLHEHTAALNQIFEHNDVEHDELALAKITEMIRKVDHIERFLNTQIKSYCQILNRI + KKRLEFFHELKDIKSQNSGTSHNGNNEGTRTKLIQWYQSYTNILIGDYLTRNNPIKYN + SETKDHWNSGVVFLKQSQLDDLIDYDVLLEANRISTSLLHERNLLPLISWINENKKTL + TKKSSILEFQARLQEYIELLKVDNYTDAIVCFQRFLLPFVKSNFTDLKLASGLLIFIK + YCNDQKPTSSTSSGFDTEEIKSQSLPMKKDRIFQHFFHKSLPRITSKPAVNTTDYDKS + SLINLQSGDFERYLNLLDDQRWSVLNDLFLSDFYSMYGISQNDPLLIYLSLGISSLKT + RDCLHPSDDENGNQETETATTAEKEVEDLQLFTLHSLKRKNCPVCSETFKPITQALPF + AHHIQSQLFENPILLPNGNVYDSKKLKKLAKTLKKQNLISLNPGQIMDPVDMKIFCES + DSIKMYPT" + gene complement(<182117..>183127) + /gene="BMT5" + /locus_tag="YIL096C" + /db_xref="GeneID:854711" + mRNA complement(<182117..>183127) + /gene="BMT5" + /locus_tag="YIL096C" + /product="25S rRNA (uracil2634-N3)-methyltransferase" + /transcript_id="NM_001179444.1" + /db_xref="GeneID:854711" + CDS complement(182117..183127) + /gene="BMT5" + /locus_tag="YIL096C" + /EC_number="2.1.1.313" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:14562095|PMID:24335083]" + /experiment="EXISTENCE:direct assay:GO:0008757 + S-adenosylmethionine-dependent methyltransferase activity + [PMID:21858014]" + /experiment="EXISTENCE:mutant phenotype:GO:0070042 rRNA + (uridine-N3-)-methyltransferase activity [PMID:24335083]" + /experiment="EXISTENCE:mutant phenotype:GO:0070475 rRNA + base methylation [PMID:24335083]" + /note="Methyltransferase required for m3U2634 methylation + of the 25S rRNA; S-adenosylmethionine-dependent; + associates with precursors of the 60S ribosomal subunit; + predicted to be involved in ribosome biogenesis" + /codon_start=1 + /product="25S rRNA (uracil2634-N3)-methyltransferase" + /protein_id="NP_012170.1" + /db_xref="GeneID:854711" + /db_xref="SGD:S000001358" + /translation="MARKLKGKIGSKGLKGALLRHKAKVKLVRNIESKQKHELRKKNS + SANNKTVKRNQEFQKLNQGKVMPFEKDETLMLCGEGDFSFARSIVEQNYIESDNLIIT + SYDNSVNELKLKYPHTFEENYQYLKDLNIPIFFQIDVTKLVKSFKISKNNTWFKIINR + LSDHRWGNKPLQNIVFNFPHNGKGIKDQERNIREHQDLIFNFFQNSLQLFNLINTKIQ + NDTLRYTQGYDLNEDTPQAKKLTAEGYGNIILSLFDGEPYDSWQIKLLAKKNGLTLSR + SSKFQWENFPGYHHRRTNSEQDTTKPAKERDARFYIFSKYVSNSSKHNRKSKKDTDSD + SD" + gene complement(183440..183513) + /locus_tag="YNCI0003C" + /db_xref="GeneID:854712" + tRNA complement(183440..183513) + /locus_tag="YNCI0003C" + /product="tRNA-Ile" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Isoleucine tRNA (tRNA-Ile), predicted by + tRNAscan-SE analysis" + /db_xref="GeneID:854712" + /db_xref="SGD:S000006605" + gene <183937..>186369 + /gene="PRK1" + /locus_tag="YIL095W" + /gene_synonym="PAK1" + /db_xref="GeneID:854713" + mRNA <183937..>186369 + /gene="PRK1" + /locus_tag="YIL095W" + /gene_synonym="PAK1" + /product="serine/threonine protein kinase PRK1" + /transcript_id="NM_001179443.1" + /db_xref="GeneID:854713" + CDS 183937..186369 + /gene="PRK1" + /locus_tag="YIL095W" + /gene_synonym="PAK1" + /EC_number="2.7.11.1" + /experiment="EXISTENCE:direct assay:GO:0004672 protein + kinase activity [PMID:16319894]" + /experiment="EXISTENCE:direct assay:GO:0004674 protein + serine/threonine kinase activity + [PMID:17978096|PMID:9885245|PMID:11739778|PMID:13679512|PM + ID:12956961]" + /experiment="EXISTENCE:direct assay:GO:0030479 actin + cortical patch [PMID:10087264|PMID:9885245]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:19053807]" + /experiment="EXISTENCE:genetic interaction:GO:0120133 + negative regulation of actin cortical patch assembly + [PMID:9885245]" + /experiment="EXISTENCE:genetic interaction:GO:1900186 + negative regulation of clathrin-dependent endocytosis + [PMID:13679512]" + /experiment="EXISTENCE:mutant phenotype:GO:0000147 actin + cortical patch assembly [PMID:12952930]" + /experiment="EXISTENCE:mutant phenotype:GO:0031333 + negative regulation of protein-containing complex assembly + [PMID:11739778]" + /experiment="EXISTENCE:mutant phenotype:GO:1900186 + negative regulation of clathrin-dependent endocytosis + [PMID:12956961]" + /note="Ser/Thr protein kinase; regulates the organization + and function of the actin cytoskeleton; inhibits + clathrin-mediated endocytosis; phosphorylates the Pan1p + and Sla1p subunits of the Pan1p-Sla1p-End3p complex, + resulting in inhibition of complex formation; inhibits + Scd5p through phosphorylation; phosphorylates + Pan1p-interacting proteins, Ent1/2 and Yap1801/2; + negatively regulated through autophosphorylation; + functional overlap with ARK1" + /codon_start=1 + /product="serine/threonine protein kinase PRK1" + /protein_id="NP_012171.1" + /db_xref="GeneID:854713" + /db_xref="SGD:S000001357" + /translation="MNTPQISLYEPGTILTVGSHHAKIIKYLTSGGFAQVYTAEISPP + DPYSNANIACLKRVIVPHKQGLNTLRAEVDAMKLLRNNKHVVSYIDSHAARSVNGIAY + EVFVLMEFCERGGLIDFMNTRLQNRLQESEILEIMSQTVQGITAMHALQPPLIHRDIK + IENVLISHDGLYKVCDFGSVSGVIRPPRNTQEFNYVQHDILTNTTAQYRSPEMIDLYR + GLPIDEKSDIWALGVFLYKICYYTTPFEKSGEAGILHARYQYPSFPQYSDRLKNLIRL + MLMEAPSQRPNICQVLEEVSRLQNKPCPIRNFYLLRAMNQNANTQLAGEPSSTTYVPT + QKFIPVQSLQSINQPPNMMPVTHVSTTPNLGTFPISINDNNKTEVTAHAGLQVGSHSN + LTSPLMKTKSVPLSDEFASLYYKELHPFQKSQTFKSVESFQSPQRKSMPPLSLTPVNN + DIFDRVSAINRPNNYVDSETQTIDNMAVPNLKLSPTITSKSLSSTKEIAAPDNINGSK + IVRSLSSKLKKVITGESRGNSPIKSRQNTGDSIRSAFGKLRHGFTGNSVNNSRSASFD + NNNVNGNGNNTNRRLVSSSTSSFPKFNSDTKRKEESDKNQRLEKRRSMPPSILSDFDQ + HERNNSRTGSRDYYRSHSPVKKTQASAKTTSKPTLIPDNGNVNINQEKKESIQRRVHN + LLKSSDDPVTYKSASGYGKYTDIGTETSNRHSSVRITPITEEKFKKTLKDGVLDIKTK + SNGKDKSRPPRPPPKPLHLRTEIQKIRNFSRLQSKKLPIERISSEATETIVDVNVDDL + EADFRKRFPSKV" + gene complement(<186517..>187632) + /gene="LYS12" + /locus_tag="YIL094C" + /gene_synonym="LYS10; LYS11" + /db_xref="GeneID:854714" + mRNA complement(<186517..>187632) + /gene="LYS12" + /locus_tag="YIL094C" + /gene_synonym="LYS10; LYS11" + /product="homoisocitrate dehydrogenase" + /transcript_id="NM_001179442.1" + /db_xref="GeneID:854714" + CDS complement(186517..187632) + /gene="LYS12" + /locus_tag="YIL094C" + /gene_synonym="LYS10; LYS11" + /EC_number="1.1.1.87" + /experiment="EXISTENCE:curator inference:GO:0009085 lysine + biosynthetic process [PMID:17223711]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:11914276|PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0047046 + homoisocitrate dehydrogenase activity [PMID:17223711]" + /note="Homo-isocitrate dehydrogenase; an NAD-linked + mitochondrial enzyme required for the fourth step in the + biosynthesis of lysine, in which homo-isocitrate is + oxidatively decarboxylated to alpha-ketoadipate" + /codon_start=1 + /product="homoisocitrate dehydrogenase" + /protein_id="NP_012172.1" + /db_xref="GeneID:854714" + /db_xref="SGD:S000001356" + /translation="MFRSVATRLSACRGLASNAARKSLTIGLIPGDGIGKEVIPAGKQ + VLENLNSKHGLSFNFIDLYAGFQTFQETGKALPDETVKVLKEQCQGALFGAVQSPTTK + VEGYSSPIVALRREMGLFANVRPVKSVEGEKGKPIDMVIVRENTEDLYIKIEKTYIDK + ATGTRVADATKRISEIATRRIATIALDIALKRLQTRGQATLTVTHKSNVLSQSDGLFR + EICKEVYESNKDKYGQIKYNEQIVDSMVYRLFREPQCFDVIVAPNLYGDILSDGAAAL + VGSLGVVPSANVGPEIVIGEPCHGSAPDIAGKGIANPIATIRSTALMLEFLGHNEAAQ + DIYKAVDANLREGSIKTPDLGGKASTQQVVDDVLSRL" + gene complement(<187990..>188784) + /gene="RSM25" + /locus_tag="YIL093C" + /gene_synonym="mS23" + /db_xref="GeneID:854715" + mRNA complement(<187990..>188784) + /gene="RSM25" + /locus_tag="YIL093C" + /gene_synonym="mS23" + /product="mitochondrial 37S ribosomal protein RSM25" + /transcript_id="NM_001179441.3" + /db_xref="GeneID:854715" + CDS complement(187990..188784) + /gene="RSM25" + /locus_tag="YIL093C" + /gene_synonym="mS23" + /experiment="EXISTENCE:curator inference:GO:0032543 + mitochondrial translation [PMID:11278769]" + /experiment="EXISTENCE:direct assay:GO:0003735 structural + constituent of ribosome [PMID:11278769]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005763 + mitochondrial small ribosomal subunit [PMID:11278769]" + /note="Mitochondrial ribosomal protein of the small + subunit" + /codon_start=1 + /product="mitochondrial 37S ribosomal protein RSM25" + /protein_id="NP_012173.3" + /db_xref="GeneID:854715" + /db_xref="SGD:S000001355" + /translation="MKIQTNAVNVLQRTSAYLKSGLLKETPAWYNVVASIPPSTKFTR + EPRFKNPSNGHIIGKLVDVTEQPHANNKGLYKTRPNSSDKRVGVKRLYRPPKLTYVED + RLRSLFYKQHPWELSRPKILVENEIGDENYDWSHMLQIGRPLDGESVIQRTMYLIKTK + QYGDMVEAYDHARYEFYALRMQEETEQQVALEEAEMFGSLFGVSAIEHGIQKEQEVLD + VWEKKVVEETELMAARTSNPAGSWKDDTTLNTAQEEESTTSENLHF" + gene <189066..>190967 + /locus_tag="YIL092W" + /db_xref="GeneID:854716" + mRNA <189066..>190967 + /locus_tag="YIL092W" + /product="uncharacterized protein" + /transcript_id="NM_001179440.3" + /db_xref="GeneID:854716" + CDS 189066..190967 + /locus_tag="YIL092W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /note="hypothetical protein; green fluorescent protein + (GFP)-fusion protein localizes to the cytoplasm and to the + nucleus" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012174.3" + /db_xref="GeneID:854716" + /db_xref="SGD:S000001354" + /translation="MVQMRSKNMAYESGTNNYSDTIANGNTLPPRSKKGHSGRRKRSE + TLPIACNNFCVTRQIDDDEQAFKMLDKVSHLKKFSAEDGDDNNIFVQWADDITDILFG + LCCTGTFLKLLISSALSGRAKTWFDSTTEGIDDHVIKAYSFEKFLALLSEEFDGARSL + RREIFTELLTLSIDSEKSLEAFAHKSGRLTPYYLSSGAALDLFLTKLEPQLQKQLENC + AFPMTLNLALLITACEFAKRASNHKKYRYKNTRDSDICTPKSKNTAIVSKLSNTKTIS + KNKVIEKSDKKNYFDKNSQHIPDPKRRKQNEPGMRLFLVMDEEKNILTSRNVSANAYT + SKNGHTNLSDLHTNLKNSKSQQCAVEPISILNSGSLVTGTINIDLINDEVLGTKEETT + TYDERMDGNSRSLNERCCAVKKNSLQPITSNIFQKNAEIQGTKIGSVLDSGISNSFSS + TEYMFPPTSSATVSNPVKKNEISKSSQVKDIAQFNPFMTNEKEKKLNPSESFKSPGVS + MEINRLSRIAGLRNIPGNIYEDSKMLNLKTRKCYPLHNFAVRTRSAHFNDRPSNYISP + HETINATLRSPASFDSIQCITRSKRVDAETNKATGSAKSENIETKSRKFPEVINPFLV + NTTNKKESD" + gene complement(<191030..>193195) + /gene="UTP25" + /locus_tag="YIL091C" + /db_xref="GeneID:854717" + mRNA complement(<191030..>193195) + /gene="UTP25" + /locus_tag="YIL091C" + /product="rRNA-binding ribosome biosynthesis protein + UTP25" + /transcript_id="NM_001179439.1" + /db_xref="GeneID:854717" + CDS complement(191030..193195) + /gene="UTP25" + /locus_tag="YIL091C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095|PMID:14690591|PMID:20528918]" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:14562095|PMID:14690591|PMID:20528918]" + /experiment="EXISTENCE:direct assay:GO:0019843 rRNA + binding [PMID:20528918]" + /experiment="EXISTENCE:direct assay:GO:0032040 + small-subunit processome [PMID:20884785]" + /experiment="EXISTENCE:direct assay:GO:0034511 U3 snoRNA + binding [PMID:20528918]" + /experiment="EXISTENCE:mutant phenotype:GO:0000462 + maturation of SSU-rRNA from tricistronic rRNA transcript + (SSU-rRNA, 5.8S rRNA, LSU-rRNA) + [PMID:20884785|PMID:20528918]" + /experiment="EXISTENCE:mutant phenotype:GO:0042274 + ribosomal small subunit biogenesis + [PMID:20884785|PMID:19806183|PMID:20528918]" + /experiment="EXISTENCE:physical interaction:GO:0032040 + small-subunit processome [PMID:20528918]" + /note="Nucleolar protein; required for 35S pre-RNA + processing and 40S ribosomal subunit biogenesis" + /codon_start=1 + /product="rRNA-binding ribosome biosynthesis protein + UTP25" + /protein_id="NP_012175.1" + /db_xref="GeneID:854717" + /db_xref="SGD:S000001353" + /translation="MSDSSVREKNDNFRGYRKRGRQELRKIKRSSARTEGGSTETLED + VAEDIDHRSDEDEVSDVDSGDDFDIEDEEGKKEKVYDALLTILKSEHPEPKRRRREAD + ESNKAPAEVGEDEHENTEHGPVDDQLEIENGLLGNHEDDNDDDSSGDEKDIDSEDEQD + PFESHFNQVPEKFVDKLSNAFKTKSVKYKSVKGSLSDSESYIYAKPVVIGEEALVESP + YRSSSIYSYFLKQRLKVQNGLLDKKTDPLTALQKKLVDPMFQYKDILYEYDSYEKDED + EYRDLYALHVLNHIYKTRDRILKNNQRLQDNPDTEHLDQGFTRPKVLIVVPTREVAYR + VVDKIISKSGIDQVDKKGKFYDQFRDDSLPPKSKPKSFQHIFRGNTNDFFVVGLKFTR + KAIKLYSNFYQSDIIVCSPLGIQMILENTDKKKRQDDFLSSIELMVIDQLHSIEYQNI + SHIFTIFDHLNKIPDQQHEADFSRIRMWYINEQAKLFRQTMVFTKYISPAANSLINGR + CRNMAGRWKNHKVIGSENSSIGQSGLKIRQIFQRFDIIGNSIIEEPDYRFKFFTSVII + PGIVKSTGYEDGILIYIPDYTDFIRIRNYMKEKTTILFGDINEYSSQRQLNANRSLFQ + QGRLKVMLYTERLHHYRRYEIKGVKSVVFYKPPNNPEFYNEVVRFIGKNAFLGNTDLN + ISTVRCIYSKLDGLSLERIVGTKRAAVLSHAQKEIYEFK" + gene <193595..>195070 + /gene="ICE2" + /locus_tag="YIL090W" + /db_xref="GeneID:854718" + mRNA <193595..>195070 + /gene="ICE2" + /locus_tag="YIL090W" + /product="Ice2p" + /transcript_id="NM_001179438.1" + /db_xref="GeneID:854718" + CDS 193595..195070 + /gene="ICE2" + /locus_tag="YIL090W" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:14562095|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:15585575]" + /experiment="EXISTENCE:direct assay:GO:0032541 cortical + endoplasmic reticulum [PMID:15585575]" + /experiment="EXISTENCE:direct assay:GO:0097038 perinuclear + endoplasmic reticulum [PMID:15585575]" + /experiment="EXISTENCE:genetic interaction:GO:0000921 + septin ring assembly [PMID:17984322]" + /experiment="EXISTENCE:genetic interaction:GO:0004865 + protein serine/threonine phosphatase inhibitor activity + [PMID:34617598]" + /experiment="EXISTENCE:genetic interaction:GO:0160031 + endoplasmic reticulum membrane biogenesis [PMID:34617598]" + /experiment="EXISTENCE:mutant phenotype:GO:0000921 septin + ring assembly [PMID:17984322]" + /experiment="EXISTENCE:mutant phenotype:GO:0004865 protein + serine/threonine phosphatase inhibitor activity + [PMID:34617598]" + /experiment="EXISTENCE:mutant phenotype:GO:0006882 + intracellular zinc ion homeostasis [PMID:22685415]" + /experiment="EXISTENCE:mutant phenotype:GO:0031204 + post-translational protein targeting to membrane, + translocation [PMID:32513868]" + /experiment="EXISTENCE:mutant phenotype:GO:0036228 protein + localization to nuclear inner membrane [PMID:15911569]" + /experiment="EXISTENCE:mutant phenotype:GO:0048309 + endoplasmic reticulum inheritance + [PMID:15585575|PMID:17984322]" + /experiment="EXISTENCE:mutant phenotype:GO:0160031 + endoplasmic reticulum membrane biogenesis [PMID:34617598]" + /note="Integral ER membrane protein with type-III + transmembrane domains; promotes ER membrane expansion by + inhibiting the Nem1-Spo7 phosphatase complex, resulting in + reduced dephosphorylation and activation of Pah1p; + maintains homeostasis during ER stress; required for + post-translational SRP-independent protein translocation + into the ER; necessary for efficient targeting of the + Trm1p to the inner nuclear membrane; mutations cause + defects in cortical ER morphology; member of the SERINC + superfamily" + /codon_start=1 + /product="Ice2p" + /protein_id="NP_012176.1" + /db_xref="GeneID:854718" + /db_xref="SGD:S000001352" + /translation="MTSLSKSFMQSGRICAACFYLLFTLLSIPISFKVGGLECGLSFT + VTLFTLYFITTTLNVLARRHGGRLYIFFTNCLYYSQHFIIASLLYLFLSGFSNDELGN + VLKNKYNESESFLEALKNSLNSNQINYVLYYYYYRFVVQPWQFVLTKSTPFFTLSEGF + FTILAIQAVGETNRWLSNDLNSNTWIISSLLTSGGVITASLYYLYRIYVTPIWPLSIQ + TASLLGLVLSMVCGLGLYGIVSQKGSVIESSLFFAYIVRCIYEISPKLATTATDEILN + LFKDVWQKHQRNLPTADNLLCYFHNVILKNAEVLWGSFIPRGRKKTGDFHDKLISILS + FEKVSLISKPFWKFFKNFTFSVPLSINEFCQVTIKMASESVSPAIVINLCFRVLMFYS + ATRIIPALQRKNDKQLRKSRRIMKGLYWYSPCILIAMYTHLILQYSGELKKDLCIWGC + SEKWFGVDQPEIIVDSWGFWNWCNIFCTILVYATELIGSGS" + gene <195599..>196216 + /locus_tag="YIL089W" + /db_xref="GeneID:854719" + mRNA <195599..>196216 + /locus_tag="YIL089W" + /product="uncharacterized protein" + /transcript_id="NM_001179437.1" + /db_xref="GeneID:854719" + CDS 195599..196216 + /locus_tag="YIL089W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0000328 fungal-type + vacuole lumen [PMID:21777356]" + /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome + [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:21777356]" + /note="hypothetical protein found in the ER and vacuole + lumen; overexpression of YIL089W affects endocytic protein + trafficking" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012177.1" + /db_xref="GeneID:854719" + /db_xref="SGD:S000001351" + /translation="MQRTRELESSVAIDQTEVPRSRFFIMVKKLSRVADIVYIVDTFL + IPPLHPLKKQHPKVAKFLKVQLVFDLISLFIFATHQLLLLEDGNFGKHYFKRKTKRCS + KFSCSRCNANAHHPKWFKFKHSLLCLGTFCFGVYSLVKINKFFKTDQTVDLNRLLELF + FWQLNAILNMKLFAFYGDHLESHSAPLDVYEDSFANKSSSGGDEV" + repeat_region complement(196653..197023) + /note="Ty4 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007015" + repeat_region complement(197140..197488) + /note="Ty1 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007011" + gene 197592..197663 + /locus_tag="YNCI0004W" + /db_xref="GeneID:854720" + tRNA 197592..197663 + /locus_tag="YNCI0004W" + /product="tRNA-Glu" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Glutamate tRNA (tRNA-Glu), predicted by tRNAscan-SE + analysis" + /db_xref="GeneID:854720" + /db_xref="SGD:S000006547" + gene complement(<197931..>199403) + /gene="AVT7" + /locus_tag="YIL088C" + /db_xref="GeneID:854721" + mRNA complement(<197931..>199403) + /gene="AVT7" + /locus_tag="YIL088C" + /product="Avt7p" + /transcript_id="NM_001179436.1" + /db_xref="GeneID:854721" + CDS complement(197931..199403) + /gene="AVT7" + /locus_tag="YIL088C" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:11274162|PMID:26928762|PMID:27246536]" + /experiment="EXISTENCE:direct assay:GO:0005774 vacuolar + membrane [PMID:25266154]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:11274162]" + /experiment="EXISTENCE:mutant phenotype:GO:0006865 amino + acid transport [PMID:25266154]" + /experiment="EXISTENCE:mutant phenotype:GO:0043937 + regulation of sporulation [PMID:25266154]" + /note="Vacuolar amino acid transporter; member of a family + of seven S. cerevisiae genes (AVT1-7) related to vesicular + GABA-glycine transporters" + /codon_start=1 + /product="Avt7p" + /protein_id="NP_012178.1" + /db_xref="GeneID:854721" + /db_xref="SGD:S000001350" + /translation="MEATSSALSSTANLVKTIVGAGTLAIPYSFKSDGVLVGVILTLL + AAVTSGLGLFVLSKCSKTLINPRNSSFFTLCMLTYPTLAPIFDLAMIVQCFGVGLSYL + VLIGDLFPGLFGGERNYWIIASAVIIIPLCLVKKLDQLKYSSILGLFALAYISILVFS + HFVFELGKGELTNILRNDICWWKIHDFKGLLSTFSIIIFAFTGSMNLFPMINELKDNS + MENITFVINNSISLSTALFLIVGLSGYLTFGNETLGNLMLNYDPNSIWIVIGKFCLGS + MLILSFPLLFHPLRIAVNNVIIWIEITYGGANPEEDPQVSEYTRASNLRPISMTVEDP + AQPSDALDATSYNEQECLLPNGNFDNGSIESQENNNDERGTMAVAGDNEHHAPFVKSR + FYWITALLLISMYTLALSVQSFALVLSFVGATGSTSISFTLPGLLGYKLIGLDSLAIG + KMIPPKDRFYKRCSLLLVFYGLSVMFLSLYVTVFNRSDEA" + gene complement(<199646..>200119) + /gene="AIM19" + /locus_tag="YIL087C" + /db_xref="GeneID:854722" + mRNA complement(<199646..>200119) + /gene="AIM19" + /locus_tag="YIL087C" + /product="Aim19p" + /transcript_id="NM_001179435.3" + /db_xref="GeneID:854722" + CDS complement(199646..200119) + /gene="AIM19" + /locus_tag="YIL087C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:physical interaction:GO:0005739 + mitochondrion [PMID:25124039]" + /note="hypothetical protein; mitochondrial protein that + physically interacts with Tim23p; null mutant displays + reduced respiratory growth" + /codon_start=1 + /product="Aim19p" + /protein_id="NP_012179.3" + /db_xref="GeneID:854722" + /db_xref="SGD:S000001349" + /translation="MSAKPATDDAKDELLSPFRRLYALTRTPYPALANAALLASTPVL + SPSFKVPPTQSPALSIPMSRVFSKSSTARIGITTKTALFFSTMQAIGAYMIYDNDLEN + GAGFIATWSALYLIVGGKKSFSALRYGRTWPLVLSSVSLANAVLYGQRFLATGFQ" + gene complement(<200153..>200461) + /locus_tag="YIL086C" + /db_xref="GeneID:854723" + mRNA complement(<200153..>200461) + /locus_tag="YIL086C" + /product="uncharacterized protein" + /transcript_id="NM_001348844.1" + /db_xref="GeneID:854723" + CDS complement(200153..200461) + /locus_tag="YIL086C" + /note="hypothetical protein; conserved across S. + cerevisiae strains" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001335784.1" + /db_xref="GeneID:854723" + /db_xref="SGD:S000001348" + /translation="MNKIIKESTNFSRYLRTGGVLNSLRTTSKFVYINNNSYLTHGGF + DGNVATIFNISEFNYINSSAKGSLLTYKSITFFCPRYFKKRPLGRHAKGKGKSDEKIL + " + gene complement(<200490..>202043) + /gene="KTR7" + /locus_tag="YIL085C" + /db_xref="GeneID:854724" + mRNA complement(<200490..>202043) + /gene="KTR7" + /locus_tag="YIL085C" + /product="putative mannosyltransferase" + /transcript_id="NM_001179433.3" + /db_xref="GeneID:854724" + CDS complement(200490..202043) + /gene="KTR7" + /locus_tag="YIL085C" + /experiment="EXISTENCE:mutant phenotype:GO:0031505 + fungal-type cell wall organization [PMID:9090056]" + /note="Putative mannosyltransferase involved in protein + glycosylation; member of the KRE2/MNT1 mannosyltransferase + family; KTR7 has a paralog, KTR5, that arose from the + whole genome duplication" + /codon_start=1 + /product="putative mannosyltransferase" + /protein_id="NP_012181.3" + /db_xref="GeneID:854724" + /db_xref="SGD:S000001347" + /translation="MAIRLNPKVRRFLLDKCRQKRYGFLFLGCIFAILYCMGTWPFFA + KDIVHDPNNLPYSLQDYSTDKDEPFFRGCTDTKLYLQNPAYSKMNASFVMLTRNEEIE + DVLKTMRSIEGHFNKWFKYPYVFLNDDPFTDHFKDQIQAATNATVEFGTVDEIMWEFP + AKVRNSLQFKASLEDQNDRGIMYGNMESYHKMCRFYSGIFYKHPLVSKYEWYWRIEPD + VDFFCDISYDPFFEMAKHNKKYGFTVLITELYWTVPNLFRTTKSFIKKTAGLKENLGT + LWKLFTFNYNILDTDDEEISRWVNFPWDAKPKLTEKLMVDFLLENHGQVNNEEDLEGI + QYLVERARSKVPMLEDSLEGEDYNLCHFWSNFEIARVDLFDNEIYNAYFKFLEESGGF + WTERWGDAPIHSIGLGMTLDLEDVHYFRDIGYRHSSLQHCPKNALQSQENLNTFDEGY + NFGCGCRCVCPKKGEDIEDHSTPCMDIFFELLHGREYEKEFPGCYKPSIKDKDVIEEI + RRENFRVIE" + gene complement(<202276..>203259) + /gene="SDS3" + /locus_tag="YIL084C" + /db_xref="GeneID:854725" + mRNA complement(<202276..>203259) + /gene="SDS3" + /locus_tag="YIL084C" + /product="Sds3p" + /transcript_id="NM_001179432.1" + /db_xref="GeneID:854725" + CDS complement(202276..203259) + /gene="SDS3" + /locus_tag="YIL084C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0033698 Rpd3L + complex + [PMID:16286007|PMID:16286008|PMID:16314178|PMID:19040720]" + /experiment="EXISTENCE:direct assay:GO:0070210 + Rpd3L-Expanded complex [PMID:19040720]" + /experiment="EXISTENCE:mutant phenotype:GO:0000122 + negative regulation of transcription by RNA polymerase II + [PMID:24358376]" + /experiment="EXISTENCE:mutant phenotype:GO:0004407 histone + deacetylase activity [PMID:11024051]" + /experiment="EXISTENCE:mutant phenotype:GO:0031507 + heterochromatin formation [PMID:11024051]" + /experiment="EXISTENCE:mutant phenotype:GO:0043709 cell + adhesion involved in single-species biofilm formation + [PMID:18202364]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:17210643|PMID:20398213]" + /experiment="EXISTENCE:mutant phenotype:GO:0061186 + negative regulation of silent mating-type cassette + heterochromatin formation [PMID:16286008]" + /experiment="EXISTENCE:mutant phenotype:GO:0061188 + negative regulation of rDNA heterochromatin formation + [PMID:16286008]" + /experiment="EXISTENCE:mutant phenotype:GO:0061408 + positive regulation of transcription from RNA polymerase + II promoter in response to heat stress [PMID:20398213]" + /experiment="EXISTENCE:mutant phenotype:GO:2000217 + regulation of invasive growth in response to glucose + limitation [PMID:18202364]" + /note="Component of the Rpd3L histone deacetylase complex; + required for its structural integrity and catalytic + activity, involved in transcriptional silencing and + required for sporulation; relocalizes to the cytosol in + response to hypoxia; cells defective in SDS3 display + pleiotropic phenotypes" + /codon_start=1 + /product="Sds3p" + /protein_id="NP_012182.1" + /db_xref="GeneID:854725" + /db_xref="SGD:S000001346" + /translation="MAIQKVSNKDLSRKDKRRFNIESKVNKIYQNFYSERDNQYKDRL + TALQTDLTSLHQGDNGQYARQVRDLEEERDLELVRLRLFEEYRVSRSGIEFQEDIEKA + KAEHEKLIKLCKERLYSSIEQKIKKLQEERLLMDVANVHSYAMNYSRPQYQKNTRSHT + VSGWDSSSNEYGRDTANESATDTGAGNDRRTLRRRNASKDTRGNNNNQDESDFQTGNG + SGSNGHGSRQGSQFPHFNNLTYKSGMNSDSDFLQGINEGTDLYAFLFGEKNPKDNANG + NEKKKNRGAQRYSTKTAPPLQSLKPDEVTEDISLIRELTGQPPAPFRLRSD" + gene complement(<203556..>204653) + /gene="CAB2" + /locus_tag="YIL083C" + /db_xref="GeneID:854726" + mRNA complement(<203556..>204653) + /gene="CAB2" + /locus_tag="YIL083C" + /product="phosphopantothenate--cysteine ligase CAB2" + /transcript_id="NM_001179431.2" + /db_xref="GeneID:854726" + CDS complement(203556..204653) + /gene="CAB2" + /locus_tag="YIL083C" + /EC_number="6.3.2.5" + /experiment="EXISTENCE:direct assay:GO:0004632 + phosphopantothenate--cysteine ligase activity + [PMID:30653991]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14690591]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14690591]" + /experiment="EXISTENCE:direct assay:GO:1990143 + CoA-synthesizing protein complex [PMID:23789928]" + /experiment="EXISTENCE:genetic interaction:GO:0015937 + coenzyme A biosynthetic process [PMID:19266201]" + /note="Phosphopantothenoylcysteine synthetase (PPCS); + catalyzes the second step of coenzyme A biosynthesis from + pantothenate; subunit of the CoA-Synthesizing Protein + Complex (CoA-SPC) that contains: Cab2p, Cab3p, Cab4p, + Cab5p, Sis2p and Vhs3p subunits; null mutant lethality is + complemented by human homolog PPCS and by E. coli coaBC, a + bifunctional enzyme with PPCS activity" + /codon_start=1 + /product="phosphopantothenate--cysteine ligase CAB2" + /protein_id="NP_012183.2" + /db_xref="GeneID:854726" + /db_xref="SGD:S000001345" + /translation="MPPLPVLNRPQIHTSVTEISHAIDRTIKEELFPVAYTTEEEQYF + KTNPKPAYIDELIKDAKEFIDLQYSLKRNKIVLITSGGTTVPLENNTVRFIDNFSAGT + RGASSAEQFLANGYSVIFLHREFSLTPYNRSFSHSINTLFLDYIDSEGKIKPEFAENV + LKNKKLYDKYMEKEEKLLLLPFTTVNQYLWSLKSIAKLLNNSGCLFYLAAAVSDFFVP + YSRLPQHKIQSGDNGKMGANNDTEGTTRTTPDGKLIVNLDPVPKFLRRLVESWATQAM + IVSFKLETDESMLLYKCTQALDRYNHQLVIGNLLQTRNKQVIFVSPENRKGDWVRLDE + KHHSIEEMIIPEVIARHDKWVAHSKTKLATK" + mobile_element 205220..210647 + /note="YILWTy3-1; Ty3 element, LTR retrotransposon of the + Gypsy (Metaviridae) group; contains co-transcribed genes + TYA Gag and TYB Pol, encoding proteins involved in + structure and function of virus-like particles, flanked by + two direct repeats; transposition is induced upon exposure + to mating pheromone" + /mobile_element_type="retrotransposon:YILWTy3-1" + /db_xref="SGD:S000007020" + repeat_region 205220..205559 + /note="Ty3 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007017" + gene <205635..>210132 + /locus_tag="YIL082W-A" + /db_xref="GeneID:854728" + mRNA <205635..>210132 + /locus_tag="YIL082W-A" + /product="gag-pol fusion protein" + /transcript_id="NM_001181434.4" + /db_xref="GeneID:854728" + CDS join(205635..206485,206487..210132) + /locus_tag="YIL082W-A" + /EC_number="2.7.7.7" + /EC_number="2.7.7.49" + /EC_number="3.1.26.4" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:9448009]" + /ribosomal_slippage + /note="Retrotransposon TYA Gag and TYB Pol genes; + transcribed/translated as one unit; polyprotein is + processed to make a nucleocapsid-like protein (Gag), + reverse transcriptase (RT), protease (PR), and integrase + (IN); similar to retroviral genes" + /codon_start=1 + /product="gag-pol fusion protein" + /protein_id="NP_012184.1" + /db_xref="GeneID:854728" + /db_xref="SGD:S000003537" + /translation="MSFMDQIPGGGNYPKLPVECLPNFPIQPSLTFRGRNDSHKLKNF + ISEIMLNMSMISWPNDASRIVYCRRHLLNPAAQWANDFVQEQGILEITFDTFIQGLYQ + HFYKPPDINKIFNAITQLSEAKLGIERLNQRFRKIWDRMPPDFMTEKAAIMTYTRLLT + KETYNIVRMHKPETLKDAMEEAYQTTALTERFFPGFELDADGDTIIGATTHLQEEYDS + DYDSEDNLTQNRYVHTVRTRRSYNKPMSNHRNRRNNNASREECIKNRLCFYCKKEGHR + LNECRARKRVLTDLELESKDQQTLFIKTLPIVHYIAIPEMDNTAEKTIKIQNTKVKTL + FDSGSPTSFIRRDIVELLKYEIYETPPLRFRGFVATKSAVTSEAVTIDLKINDLQITL + AAYILDNMDYQLLIGNPILRRYPKILHTVLNTRESPDSLKPKTYRSETVNNVRTYSAG + NRGNPRNIKLSFAPTILEATDPKSAGNRGNPRNTKLSLAPTILEATDPKSAGNRGDSR + TKTLSLATTTPAAIDPLTTLDNPGSTQSTFAQFPIPEEASILEEDGKYSNVVSTIQSV + EPNATDHSNKDTFCTLPVWLQQKYREIIRNDLPPRPADINNIPVKHDIEIKPGARLPR + LQPYHVTEKNEQEINKIVQKLLDNKFIVPSKSPCSSPVVLVPKKDGTFRLCVDYRTLN + KATISDPFPLPRIDNLLSRIGNAQIFTTLDLHSGYHQIPMEPKDRYKTAFVTPSGKYE + YTVMPFGLVNAPSTFARYMADTFRDLRFVNVYLDDILIFSESPEEHWKHLDTVLERLK + NENLIVKKKKCKFASEETEFLGYSIGIQKIAPLQHKCAAIRDFPTPKTVKQAQRFLGM + INYYRRFIPNCSKIAQPIQLFICDKSQWTEKQDKAIEKLKAALCNSPVLVPFNNKANY + RLTTDASKDGIGAVLEEVDNKNKLVGVVGYFSKSLESAQKNYPAGELELLGIIKALHH + FRYMLHGKHFTLRTDHISLLSLQNKNEPARRVQRWLDDLATYDFTLEYLAGPKNVVAD + AISRAIYTITPETSRPIDTESWKSYYKSDPLCSAVLIHMKELTQHNVTPEDMSAFRSY + QKKLELSETFRKNYSLEDEMIYYQDRLVVPIKQQNAVMRLYHDHTLFGGHFGVTVTLA + KISPIYYWPKLQHSIIQYIRTCVQCQLIKSHRPRLHGLLQPLPIAEGRWLDISMDFVT + GLPPTSNNLNMILVVVDRFSKRAHFIATRKTLDATQLIDLLFRYIFSYHGFPRTITSD + RDVRMTADKYQELTKRLGIKSTMSSANHPQTDGQSERTIQTLNRLLRAYVSTNIQNWH + VYLPQIEFVYNSTPTRTLGKSPFEIDLGYLPNTPAIKSDDEVNARSFTAVELAKHLKA + LTIQTKEQLEHAQIEMETNNNQRRKPLLLNIGDHVLVHRDAYFKKGAYMKVQQIYVGP + FRVVKKINDNAYELDLNSHKKKHRVINVQFLKSLYTVQTRTQRINQSAPLRELREHTK + LLHS" + repeat_region 210308..210647 + /note="Ty3 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007018" + gene 210665..210738 + /locus_tag="YNCI0005W" + /db_xref="GeneID:854730" + tRNA 210665..210738 + /locus_tag="YNCI0005W" + /product="tRNA-Ile" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Isoleucine tRNA (tRNA-Ile), predicted by + tRNAscan-SE analysis" + /db_xref="GeneID:854730" + /db_xref="SGD:S000006606" + gene complement(<210923..>212005) + /gene="AIR1" + /locus_tag="YIL079C" + /db_xref="GeneID:854731" + mRNA complement(<210923..>212005) + /gene="AIR1" + /locus_tag="YIL079C" + /product="TRAMP complex RNA-binding subunit" + /transcript_id="NM_001179429.1" + /db_xref="GeneID:854731" + CDS complement(210923..212005) + /gene="AIR1" + /locus_tag="YIL079C" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:11489916]" + /experiment="EXISTENCE:direct assay:GO:0031499 TRAMP + complex [PMID:15828860|PMID:15935759]" + /experiment="EXISTENCE:direct assay:GO:0071038 nuclear + polyadenylation-dependent tRNA catabolic process + [PMID:15828860|PMID:17643380]" + /experiment="EXISTENCE:direct assay:GO:1990817 poly(A) RNA + polymerase activity [PMID:15935759]" + /experiment="EXISTENCE:genetic interaction:GO:0071031 + nuclear mRNA surveillance of mRNA 3'-end processing + [PMID:17410208]" + /experiment="EXISTENCE:genetic interaction:GO:0071035 + nuclear polyadenylation-dependent rRNA catabolic process + [PMID:15935758|PMID:18007593]" + /experiment="EXISTENCE:genetic interaction:GO:0071036 + nuclear polyadenylation-dependent snoRNA catabolic process + [PMID:15935758]" + /experiment="EXISTENCE:genetic interaction:GO:0071037 + nuclear polyadenylation-dependent snRNA catabolic process + [PMID:15935758]" + /experiment="EXISTENCE:genetic interaction:GO:0071039 + nuclear polyadenylation-dependent CUT catabolic process + [PMID:18591258]" + /experiment="EXISTENCE:genetic interaction:GO:1990817 + poly(A) RNA polymerase activity [PMID:15935759]" + /note="Zinc knuckle protein; involved in nuclear RNA + processing and degradation as a component of the TRAMP + complex; stimulates the poly(A) polymerase activity of + Pap2p in vitro; AIR1 has a paralog, AIR2, that arose from + the whole genome duplication; although Air1p and Air2p are + homologous TRAMP subunits, they have nonredundant roles in + regulation of substrate specificity of the exosome" + /codon_start=1 + /product="TRAMP complex RNA-binding subunit" + /protein_id="NP_012186.1" + /db_xref="GeneID:854731" + /db_xref="SGD:S000001341" + /translation="MSTLLSEVESIDTLPYVKDTTPTGSDSSSFNKLLAPSIEDVDAN + PEELRTLRGQGRYFGITDYDSNGAIMEAEPKCNNCSQRGHLKRNCPHVICTYCGFMDD + HYSQHCPKAIICTNCNANGHYKSQCPHKWKKVFCTLCNSKRHSRERCPSIWRSYLLKT + KDANQGDFDFQTVFCYNCGNAGHFGDDCAERRSSRVPNTDGSAFCGDNLATKFKQHYF + NQLKDYKREASQRQHFDNEHEFNLLDYEYNDDAYDLPGSRTYRDKMKWKGKVQSTRNK + NSSNNRYESSNNRKKKSPFSAQNYKVTKNKRVQTHPLDFPRSSQNNRTNDYSSQFSYN + RDDFPKGPKNKRGRSSSNKSQRNGRY" + gene <212499..>214703 + /gene="THS1" + /locus_tag="YIL078W" + /db_xref="GeneID:854732" + mRNA <212499..>214703 + /gene="THS1" + /locus_tag="YIL078W" + /product="threonine--tRNA ligase THS1" + /transcript_id="NM_001179428.3" + /db_xref="GeneID:854732" + CDS 212499..214703 + /gene="THS1" + /locus_tag="YIL078W" + /EC_number="6.1.1.3" + /experiment="EXISTENCE:direct assay:GO:0004829 + threonine-tRNA ligase activity [PMID:8143729]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0006435 + threonyl-tRNA aminoacylation [PMID:8143729]" + /experiment="EXISTENCE:direct assay:GO:1990825 + sequence-specific mRNA binding [PMID:34039240]" + /experiment="EXISTENCE:mutant phenotype:GO:0005737 + cytoplasm [PMID:2995918]" + /note="Threonyl-tRNA synthetase involved in tRNA + aminoacylation; mRNA binding protein that preferentially + binds to the mRNA of RNAPI subunits and DNA binding + proteins; binds to an anticodon stem loop-like structure + in RPC10 and impacts its translation; cytoplasmic protein; + human homolog TARS can complement a yeast null mutant" + /codon_start=1 + /product="threonine--tRNA ligase THS1" + /protein_id="NP_116578.3" + /db_xref="GeneID:854732" + /db_xref="SGD:S000001340" + /translation="MSASEAGVTEQVKKLSVKDSSNDAVKPNKKENKKSKQQSLYLDP + EPTFIEERIEMFDRLQKEYNDKVASMPRVPLKIVLKDGAVKEATSWETTPMDIAKGIS + KSLADRLCISKVNGQLWDLDRPFEGEANEEIKLELLDFESDEGKKVFWHSSAHVLGES + CECHLGAHICLGPPTDDGFFYEMAVRDSMKDISESPERTVSQADFPGLEGVAKNVIKQ + KQKFERLVMSKEDLLKMFHYSKYKTYLVQTKVPDGGATTVYRCGKLIDLCVGPHIPHT + GRIKAFKLLKNSSCYFLGDATNDSLQRVYGISFPDKKLMDAHLKFLAEASMRDHRKIG + KEQELFLFNEMSPGSCFWLPHGTRIYNTLVDLLRTEYRKRGYEEVITPNMYNSKLWET + SGHWANYKENMFTFEVEKETFGLKPMNCPGHCLMFKSRERSYRELPWRVADFGVIHRN + EFSGALSGLTRVRRFQQDDAHIFCTHDQIESEIENIFNFLQYIYGVFGFEFKMELSTR + PEKYVGKIETWDAAESKLESALKKWGGNWEINAGDGAFYGPKIDIMISDALRRWHQCA + TIQLDFQLPNRFELEFKSKDQDSESYERPVMIHRAILGSVERMTAILTEHFAGKWPFW + LSPRQVLVVPVGVKYQGYAEDVRNKLHDAGFYADVDLTGNTLQKKVRNGQMLKYNFIF + IVGEQEMNEKSVNIRNRDVMEQQGKNATVSVEEVLKQLRNLKDEKRGDNVLA" + rep_origin 214624..214754 + /note="ARS901; Autonomously Replicating Sequence" + /db_xref="SGD:S000007644" + gene complement(<214991..>215953) + /gene="RCI37" + /locus_tag="YIL077C" + /gene_synonym="MRX17" + /db_xref="GeneID:854733" + mRNA complement(<214991..>215953) + /gene="RCI37" + /locus_tag="YIL077C" + /gene_synonym="MRX17" + /product="Rci37p" + /transcript_id="NM_001179427.3" + /db_xref="GeneID:854733" + CDS complement(214991..215953) + /gene="RCI37" + /locus_tag="YIL077C" + /gene_synonym="MRX17" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14562095|PMID:16823961]" + /note="Protein that associates with the large + mitoribosomal subunit; the authentic, non-tagged protein + is detected in highly purified mitochondria in + high-throughput studies; deletion confers sensitivity to + 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO)" + /codon_start=1 + /product="Rci37p" + /protein_id="NP_012188.3" + /db_xref="GeneID:854733" + /db_xref="SGD:S000001339" + /translation="MLGKEEEQQYGQNGKGMENELPFMKRPWFKKAYENAIEFHEKDE + LLDARDRLELSKAYRSIAKAEMWGGWLGFSAVFLTPFAYRYYKTKAIKGVKVPRNFVL + GVMALFFATNFAGRSMYTRQLNERDPTGVLKDNYSNKYGDNDFGAFQHDQTKEIPRNQ + RQYNMMRLLDSGSPSRWSMYFYITYQNPERRLPDPKVKLQQMKKGGVFNGSPFMNQRD + PIGLYRNKGRKSPDPIEGEQNDSPVLSSWEKIRNGDNSSSSSWENIRNTSRDQSQESD + ASVDHESDIFISGFSDDGNATDNSSSDDKYQRLLQSGRYGGNRS" + gene <216658..>217548 + /gene="SEC28" + /locus_tag="YIL076W" + /gene_synonym="ANU2" + /db_xref="GeneID:854734" + mRNA <216658..>217548 + /gene="SEC28" + /locus_tag="YIL076W" + /gene_synonym="ANU2" + /product="coatomer subunit epsilon" + /transcript_id="NM_001179426.1" + /db_xref="GeneID:854734" + CDS 216658..217548 + /gene="SEC28" + /locus_tag="YIL076W" + /gene_synonym="ANU2" + /experiment="EXISTENCE:direct assay:GO:0005768 endosome + [PMID:17101773]" + /experiment="EXISTENCE:direct assay:GO:0030126 COPI + vesicle coat [PMID:21435344]" + /experiment="EXISTENCE:direct assay:GO:1990841 + promoter-specific chromatin binding [PMID:27184763]" + /experiment="EXISTENCE:mutant phenotype:GO:0006888 + endoplasmic reticulum to Golgi vesicle-mediated transport + [PMID:10532354]" + /experiment="EXISTENCE:mutant phenotype:GO:0006901 vesicle + coating [PMID:9463377]" + /experiment="EXISTENCE:mutant phenotype:GO:0030126 COPI + vesicle coat [PMID:9463377]" + /experiment="EXISTENCE:mutant phenotype:GO:0032511 late + endosome to vacuole transport via multivesicular body + sorting pathway [PMID:17101773]" + /experiment="EXISTENCE:physical interaction:GO:0032511 + late endosome to vacuole transport via multivesicular body + sorting pathway [PMID:17101773]" + /note="Epsilon-COP subunit of the coatomer; regulates + retrograde Golgi-to-ER protein traffic; stabilizes Cop1p, + the alpha-COP and the coatomer complex; non-essential for + cell growth; protein abundance increases in response to + DNA replication stress" + /codon_start=1 + /product="coatomer subunit epsilon" + /protein_id="NP_012189.2" + /db_xref="GeneID:854734" + /db_xref="SGD:S000001338" + /translation="MDYFNIKQNYYTGNFVQCLQEIEKFSKVTDNTLLFYKAKTLLAL + GQYQSQDPTSKLGKVLDLYVQFLDTKNIEELENLLKDKQNSPYELYLLATAQAILGDL + DKSLETCVEGIDNDEAEGTTELLLLAIEVALLNNNVSTASTIFDNYTNAIEDTVSGDN + EMILNLAESYIKFATNKETATSNFYYYEELSQTFPTWKTQLGLLNLHLQQRNIAEAQG + IVELLLSDYYSVEQKENAVLYKPTFLANQITLALMQGLDTEDLTNQLVKLDHEHAFIK + HHQEIDAKFDELVRKYDTSN" + gene complement(<217863..>220700) + /gene="RPN2" + /locus_tag="YIL075C" + /gene_synonym="SEN3" + /db_xref="GeneID:854735" + mRNA complement(<217863..>220700) + /gene="RPN2" + /locus_tag="YIL075C" + /gene_synonym="SEN3" + /product="proteasome regulatory particle base subunit + RPN2" + /transcript_id="NM_001179425.1" + /db_xref="GeneID:854735" + CDS complement(217863..220700) + /gene="RPN2" + /locus_tag="YIL075C" + /gene_synonym="SEN3" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:15210724|PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0008540 proteasome + regulatory particle, base subcomplex [PMID:9741626]" + /experiment="EXISTENCE:direct assay:GO:0034515 proteasome + storage granule [PMID:18504300]" + /experiment="EXISTENCE:genetic interaction:GO:0043248 + proteasome assembly [PMID:17911101]" + /experiment="EXISTENCE:mutant phenotype:GO:0004175 + endopeptidase activity [PMID:7565784]" + /experiment="EXISTENCE:mutant phenotype:GO:0006511 + ubiquitin-dependent protein catabolic process + [PMID:7565784]" + /experiment="EXISTENCE:physical interaction:GO:0031625 + ubiquitin protein ligase binding [PMID:10688918]" + /note="Subunit of the 26S proteasome; substrate of the + N-acetyltransferase Nat1p; protein abundance increases in + response to DNA replication stress" + /codon_start=1 + /product="proteasome regulatory particle base subunit + RPN2" + /protein_id="NP_012190.1" + /db_xref="GeneID:854735" + /db_xref="SGD:S000001337" + /translation="MSLTTAAPLLALLRENQDSVKTYALESINNVVDQLWSEISNELP + DIEALYDDDTFSDREMAALIASKVYYNLGEYESAVKYALAAKDRFDIDEKSQFVETIV + SKSIEMYVQEASKQYTKDEQFYTKDIIDPKLTSIFERMIEKCLKASELKLALGIALEG + YRLDIIESALKSKLDQDSTSENVKIINYLLTLAITTVTNSKFRSSILRKSFDFLMNMP + NCDYLTLNKVVVNLNDAGLALQLFKKLKEENDEGLSAQIAFDLVSSASQQLLEILVTE + LTAQGYDPALLNILSGLPTCDYYNTFLLNNKNIDIGLLNKSKSSLDGKFSLFHTAVSV + ANGFMHAGTTDNSFIKANLPWLGKAQNWAKFTATASLGVIHKGNLLEGKKVMAPYLPG + SRASSRFIKGGSLYGLGLIYAGFGRDTTDYLKNIIVENSGTSGDEDVDVLLHGASLGI + GLAAMGSANIEVYEALKEVLYNDSATSGEAAALGMGLCMLGTGKPEAIHDMFTYSQET + QHGNITRGLAVGLALINYGRQELADDLITKMLASDESLLRYGGAFTIALAYAGTGNNS + AVKRLLHVAVSDSNDDVRRAAVIALGFVLLRDYTTVPRIVQLLSKSHNAHVRCGTAFA + LGIACAGKGLQSAIDVLDPLTKDPVDFVRQAAMIALSMILIQQTEKLNPQVADINKNF + LSVITNKHQEGLAKFGACVAQGIMNAGGRNVTIQLENADTGTLDTKSVVGLVMFSQFW + YWFPLAHFLSLSFTPTTVIGIRGSDQAIPKFQMNCYAKEDAFSYPRMYEEASGKEVEK + VATAVLSTTARAKARAKKTKKEKGPNEEEKKKEHEEKEKERETNKKGIKETKENDEEF + YKNKYSSKPYKVDNMTRILPQQSRYISFIKDDRFVPVRKFKGNNGVVVLRDREPKEPV + ALIETVRQMKDVNAPLPTPFKVDDNVDFPSA" + gene complement(<221081..>222490) + /gene="SER33" + /locus_tag="YIL074C" + /db_xref="GeneID:854736" + mRNA complement(<221081..>222490) + /gene="SER33" + /locus_tag="YIL074C" + /product="phosphoglycerate dehydrogenase SER33" + /transcript_id="NM_001179424.1" + /db_xref="GeneID:854736" + CDS complement(221081..222490) + /gene="SER33" + /locus_tag="YIL074C" + /EC_number="1.1.1.95" + /EC_number="1.1.1.399" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0061759 + alpha-ketoglutarate reductase activity [PMID:26774271]" + /experiment="EXISTENCE:genetic interaction:GO:0061759 + alpha-ketoglutarate reductase activity [PMID:26774271]" + /experiment="EXISTENCE:mutant phenotype:GO:0004617 + phosphoglycerate dehydrogenase activity [PMID:12525494]" + /experiment="EXISTENCE:mutant phenotype:GO:0009070 serine + family amino acid biosynthetic process [PMID:12525494]" + /experiment="EXISTENCE:mutant phenotype:GO:0061759 + alpha-ketoglutarate reductase activity [PMID:26774271]" + /note="3-phosphoglycerate dehydrogenase and + alpha-ketoglutarate reductase; 3PG dehydrogenase that + catalyzes the first step in serine and glycine + biosynthesis; also functions as an alpha-ketoglutarate + reductase, converting alpha-ketoglutarate to + D-2-hydroxyglutarate (D-2HG); localizes to the cytoplasm; + SER33 has a paralog, SER3, that arose from the whole + genome duplication" + /codon_start=1 + /product="phosphoglycerate dehydrogenase SER33" + /protein_id="NP_012191.1" + /db_xref="GeneID:854736" + /db_xref="SGD:S000001336" + /translation="MSYSAADNLQDSFQRAMNFSGSPGAVSTSPTQSFMNTLPRRVSI + TKQPKALKPFSTGDMNILLLENVNATAIKIFKDQGYQVEFHKSSLPEDELIEKIKDVH + AIGIRSKTRLTEKILQHARNLVCIGCFCIGTNQVDLKYAASKGIAVFNSPFSNSRSVA + ELVIGEIISLARQLGDRSIELHTGTWNKVAARCWEVRGKTLGIIGYGHIGSQLSVLAE + AMGLHVLYYDIVTIMALGTARQVSTLDELLNKSDFVTLHVPATPETEKMLSAPQFAAM + KDGAYVINASRGTVVDIPSLIQAVKANKIAGAALDVYPHEPAKNGEGSFNDELNSWTS + ELVSLPNIILTPHIGGSTEEAQSSIGIEVATALSKYINEGNSVGSVNFPEVSLKSLDY + DQENTVRVLYIHRNVPGVLKTVNDILSDHNIEKQFSDSHGEIAYLMADISSVNQSEIK + DIYEKLNQTSAKVSIRLLY" + gene complement(<222937..>225954) + /gene="SPO22" + /locus_tag="YIL073C" + /gene_synonym="ZIP4" + /db_xref="GeneID:854737" + mRNA complement(join(<222937..225809,225900..>225954)) + /gene="SPO22" + /locus_tag="YIL073C" + /gene_synonym="ZIP4" + /product="Spo22p" + /transcript_id="NM_001179423.1" + /db_xref="GeneID:854737" + CDS complement(join(222937..225809,225900..225954)) + /gene="SPO22" + /locus_tag="YIL073C" + /gene_synonym="ZIP4" + /experiment="EXISTENCE:direct assay:GO:0000794 condensed + nuclear chromosome [PMID:16740482]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:24390141]" + /experiment="EXISTENCE:mutant phenotype:GO:0033235 + positive regulation of protein sumoylation + [PMID:23326245]" + /experiment="EXISTENCE:mutant phenotype:GO:0090173 + regulation of synaptonemal complex assembly + [PMID:16740482]" + /note="Meiosis-specific protein essential for chromosome + synapsis; involved in completion of nuclear divisions + during meiosis; induced early in meiosis" + /codon_start=1 + /product="Spo22p" + /protein_id="NP_012192.2" + /db_xref="GeneID:854737" + /db_xref="SGD:S000001335" + /translation="MSDHNVNSTFRKTLVELCETATWITSQVYAAKNLEKNDLITVDN + KISALYPIAEKYDRSFRTTTVILDEELILKLENAASSLWNSLTIAMKAEKASDKYFNE + VFCKCKIFATKLLSIHEALFRTNTNLLRNFKCYISSFKSASEYRFDDLITNTQQHSEK + YLQIINENVESFSNEEKTEFKKLTFEFYLVNFQLYLSENDLDTANIYTAKVNITDNSK + YMDADLLIELCRMIYNSTVMLKEINNPETQLVDVNIISFLKDVEKYLELPVENLKSHT + DYSNLKYSVLIFMANCLVEGHPQASELEQCDHYLSLLQNEYPNKVDPFILAINLTKRR + NIVNPAETIEEILMRMIMSVDVISNFQAVIASINDLSKMNTKFSIVCLDYLLINKLNS + KNDSKFLGKAICSRFLITTQSKTMNDSEIAESLENFSTQMERIVSEPLTKHAISCIIT + LLWNTGKKLEKMEKYVVSIRFYKLALKDIISQNYSDRGKIQRALQVVYNKIEDYSNTV + RVYQDMDEVDRQSPLCQLLMLQSFLADDKTEEALTCLQKIKSSEDEKSTDALILAVAE + CKRKTDLSVQGLLMIFDKLQSKSNSQTISSTSSSQTLSILRYTLQMIVKVSEEEPLET + FINYLPTVQKLLQKAVEFLKTVKLLNQLPPDVEKEAIYQQSVAVNEIEWFASFSYNVA + VKCLVDQSCESISEFPQYCIQFIDLIPVQDFTFPKMYHFTYWRFKATILQLIIAKEKA + KQDQHQKDWDIYEKSEELVNSINVMKKSSEFKDGSSLEDRNTLHECFLEALTIHLESA + LMMPDQTRILDILKKTELYQDSRVDALLIDISSNMEDLPKGVLIEILETVLKRNMGPE + VKERELCSWLRILLENAINLNHEVELRILDRVLKILNINQSSLQDTDGVLQTELETIA + TYCWNIGVNYIIKDNKSNGIVWCKHSMGFANMVNEGLQEQLYSLWESLASSANIDINS + IAK" + gene <226602..>228419 + /gene="HOP1" + /locus_tag="YIL072W" + /db_xref="GeneID:854738" + mRNA <226602..>228419 + /gene="HOP1" + /locus_tag="YIL072W" + /product="Hop1p" + /transcript_id="NM_001179422.3" + /db_xref="GeneID:854738" + CDS 226602..228419 + /gene="HOP1" + /locus_tag="YIL072W" + /experiment="EXISTENCE:direct assay:GO:0000400 four-way + junction DNA binding [PMID:17027027]" + /experiment="EXISTENCE:direct assay:GO:0000794 condensed + nuclear chromosome [PMID:2107981]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:23841450|PMID:24390141]" + /experiment="EXISTENCE:genetic interaction:GO:0051598 + meiotic recombination checkpoint signaling + [PMID:10848609]" + /experiment="EXISTENCE:mutant phenotype:GO:0007129 + homologous chromosome pairing at meiosis + [PMID:2107981|PMID:8207053]" + /experiment="EXISTENCE:mutant phenotype:GO:0007130 + synaptonemal complex assembly [PMID:2653960]" + /experiment="EXISTENCE:physical interaction:GO:0000800 + lateral element [PMID:9060462]" + /note="Meiosis-specific protein required for chromosome + synapsis; displays Red1p dependent localization to the + unsynapsed axial-lateral elements of the synaptonemal + complex; required for chiasma formation; in vitro, + displays the ability to promote intra- and intermolecular + synapsis between double-stranded DNA molecules and to fold + DNA into rigid protein-DNA filaments" + /codon_start=1 + /product="Hop1p" + /protein_id="NP_012193.3" + /db_xref="GeneID:854738" + /db_xref="SGD:S000001334" + /translation="MSNKQLVKPKTETKTEITTEQSQKLLQTMLTMSFGCLAFLRGLF + PDDIFVDQRFVPEKVEKNYNKQNTSQNNSIKIKTLIRGKSAQADLLLDWLEKGVFKSI + RLKCLKALSLGIFLEDPTDLLENYIFSFDYDEENNVNINVNLSGNKKGSKNADPENET + ISLLDSRRMVQQLMRRFIIITQSLEPLPQKKFLTMRLMFNDNVDEDYQPELFKDATFD + KRATLKVPTNLDNDAIDVGTLNTKHHKVALSVLSAATSSMEKAGNTNFIRVDPFDLIL + QQQEENKLEESVPTKPQNFVTSQTTNVLGNLLNSSQASIQPTQFVSNNPVTGICSCEC + GLEVPKAATVLKTCKSCRKTLHGICYGNFLHSSIEKCFTCIFGPSLDTKWSKFQDLMM + IRKVFRFLVRKKKGFPASITELIDSFINVEDQNNEVKERVAFALFVFFLDETLCLDNG + GKPSQTIRYVTSSVLVDVKGIVIPNTRKQLNVNHEYKWHFTTSSPKAESFYQEVLPNS + RKQVESWLQDITNLRKVYSEALSPSSTLQELDLNSSLPTQDPIISGQKRRRYDLDEYL + EEDKSSVVNDTIKAKDFDESVPAKIRKISVSKKTLKSNW" + gene complement(<228660..>229994) + /gene="PCI8" + /locus_tag="YIL071C" + /gene_synonym="CSN11; YIH1; YIL071W" + /db_xref="GeneID:854739" + mRNA complement(<228660..>229994) + /gene="PCI8" + /locus_tag="YIL071C" + /gene_synonym="CSN11; YIH1; YIL071W" + /product="Pci8p" + /transcript_id="NM_001179421.3" + /db_xref="GeneID:854739" + CDS complement(228660..229994) + /gene="PCI8" + /locus_tag="YIL071C" + /gene_synonym="CSN11; YIH1; YIL071W" + /experiment="EXISTENCE:direct assay:GO:0008180 COP9 + signalosome [PMID:12446563]" + /experiment="EXISTENCE:mutant phenotype:GO:0000338 protein + deneddylation [PMID:12186635|PMID:12446563]" + /note="Possible shared subunit of Cop9 signalosome (CSN) + and eIF3; binds eIF3b subunit Prt1p, has possible dual + functions in transcriptional and translational control, + contains a PCI (Proteasome-COP9 signalosome (CSN)-eIF3) + domain" + /codon_start=1 + /product="Pci8p" + /protein_id="NP_085069.3" + /db_xref="GeneID:854739" + /db_xref="SGD:S000001333" + /translation="MFHGAKGPLLIERIGHLLSINYGEKEERKRWAMQGISYLQEVQC + TSTPYLEILVEESGLRPVSLLNSQLVGKPHFSLLGGFDENIARDIISHNFQNAIFQME + SEEVPLTKRYQHLEKITQISLLCKNFKGIEEIEYNVKNIIQGRKNFDMLNSMEKDRIS + HEVVQDDSFSLLRIQMLLCVSYFLQERYFDCCTKFFTMMTSEPLTLKVLSEHLDCMNF + ISKEEFIMMVNISVLISIPLDNYDDFIYLSDLKQFFQMTPLLVNCLELLINTNFNKFF + KIWHGEINKICMESLFLEPSWSSSAAVIMRCKIYFFYLRISKKLQFSYLSSTLGIDLE + DIKEELTKLIISGQLNFEIDGDVIHFEDSSILQSIVNEISRNGTMINEVIDKLKNENT + DLKDIIQGNPLMYSGGNNTATIINNESSDDMDIDEVNDRSDISDSEGGLFEC" + gene complement(<230272..>231072) + /gene="MAM33" + /locus_tag="YIL070C" + /db_xref="GeneID:854740" + mRNA complement(<230272..>231072) + /gene="MAM33" + /locus_tag="YIL070C" + /product="Mam33p" + /transcript_id="NM_001179420.1" + /db_xref="GeneID:854740" + CDS complement(230272..231072) + /gene="MAM33" + /locus_tag="YIL070C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005759 + mitochondrial matrix [PMID:9305894]" + /experiment="EXISTENCE:direct assay:GO:0097177 + mitochondrial ribosome binding [PMID:31053642]" + /experiment="EXISTENCE:mutant phenotype:GO:0009060 aerobic + respiration [PMID:9305894]" + /experiment="EXISTENCE:mutant phenotype:GO:0061668 + mitochondrial ribosome assembly [PMID:31053642]" + /note="Acidic protein of the mitochondrial matrix; binds + unassembled large subunit proteins during ribosome + assembly; subunit of a complex containing Mrx6p, Pim1p, + and Pet20p that may regulate mtDNA replication; related to + the human complement receptor gC1q-R" + /codon_start=1 + /product="Mam33p" + /protein_id="NP_012194.1" + /db_xref="GeneID:854740" + /db_xref="SGD:S000001332" + /translation="MFLRSVNRAVTRSILTTPKPAVVKSSWRVFTVANSKRCFTPAAI + MRNQETQRVGDILQSELKIEKETLPESTSLDSFNDFLNKYKFSLVETPGKNEAEIVRR + TESGETVHVFFDVAQIANLPYNNAMDENTEQNEDGINEDDFDALSDNFANVNVVISKE + SASEPAVSFELLMNLQEGSFYVDSATPYPSVDAALNQSAEAEITRELVYHGPPFSNLD + EELQESLEAYLESRGVNEELASFISAYSEFKENNEYISWLEKMKKFFH" + gene complement(<231553..>232369) + /gene="RPS24B" + /locus_tag="YIL069C" + /gene_synonym="RPS24EB" + /db_xref="GeneID:854741" + mRNA complement(join(<231553..231957,232367..>232369)) + /gene="RPS24B" + /locus_tag="YIL069C" + /gene_synonym="RPS24EB" + /product="ribosomal 40S subunit protein S24B" + /transcript_id="NM_001179419.1" + /db_xref="GeneID:854741" + CDS complement(join(231553..231957,232367..232369)) + /gene="RPS24B" + /locus_tag="YIL069C" + /gene_synonym="RPS24EB" + /experiment="EXISTENCE:genetic interaction:GO:0000462 + maturation of SSU-rRNA from tricistronic rRNA transcript + (SSU-rRNA, 5.8S rRNA, LSU-rRNA) [PMID:16246728]" + /note="Protein component of the small (40S) ribosomal + subunit; homologous to mammalian ribosomal protein S24, no + bacterial homolog; RPS24B has a paralog, RPS24A, that + arose from the whole genome duplication" + /codon_start=1 + /product="ribosomal 40S subunit protein S24B" + /protein_id="NP_012195.1" + /db_xref="GeneID:854741" + /db_xref="SGD:S000001331" + /translation="MSDAVTIRTRKVISNPLLARKQFVVDVLHPNRANVSKDELREKL + AEVYKAEKDAVSVFGFRTQFGGGKSVGFGLVYNSVAEAKKFEPTYRLVRYGLAEKVEK + ASRQQRKQKKNRDKKIFGTGKRLAKKVARRNAD" + gene complement(<233057..>235474) + /gene="SEC6" + /locus_tag="YIL068C" + /db_xref="GeneID:854742" + mRNA complement(<233057..>235474) + /gene="SEC6" + /locus_tag="YIL068C" + /product="SNARE-binding exocyst subunit SEC6" + /transcript_id="NM_001179418.1" + /db_xref="GeneID:854742" + CDS complement(233057..235474) + /gene="SEC6" + /locus_tag="YIL068C" + /experiment="EXISTENCE:direct assay:GO:0000145 exocyst + [PMID:7615633|PMID:8978675]" + /experiment="EXISTENCE:direct assay:GO:0000149 SNARE + binding [PMID:15835919|PMID:22114349]" + /experiment="EXISTENCE:direct assay:GO:0005628 prospore + membrane [PMID:24390141]" + /experiment="EXISTENCE:direct assay:GO:0005934 cellular + bud tip [PMID:19073882]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:19073882|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0035544 negative + regulation of SNARE complex assembly + [PMID:15835919|PMID:22114349]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:19053807]" + /experiment="EXISTENCE:genetic interaction:GO:0006893 + Golgi to plasma membrane transport [PMID:7026045]" + /experiment="EXISTENCE:genetic interaction:GO:0035544 + negative regulation of SNARE complex assembly + [PMID:22114349]" + /experiment="EXISTENCE:mutant phenotype:GO:0006887 + exocytosis [PMID:6996832]" + /experiment="EXISTENCE:mutant phenotype:GO:0006893 Golgi + to plasma membrane transport [PMID:7026045]" + /experiment="EXISTENCE:mutant phenotype:GO:0051601 exocyst + localization [PMID:19073882]" + /experiment="EXISTENCE:physical interaction:GO:0000149 + SNARE binding [PMID:15835919|PMID:22114349]" + /experiment="EXISTENCE:physical interaction:GO:0035544 + negative regulation of SNARE complex assembly + [PMID:15835919|PMID:22114349]" + /note="Essential 88kDa subunit of the exocyst complex; the + exocyst mediates polarized targeting and tethering of + post-Golgi secretory vesicles to active sites of + exocytosis at the plasma membrane prior to SNARE-mediated + fusion; anchors the assembled complex to sites of + secretion; interacts with SM-like protein and SNARE + regulator Sec1p and may recruit it to sites of secretion; + binds to SNARE complexes binteracting with Sec9p" + /codon_start=1 + /product="SNARE-binding exocyst subunit SEC6" + /protein_id="NP_012196.1" + /db_xref="GeneID:854742" + /db_xref="SGD:S000001330" + /translation="MSSDPLQQVCDLIKGDLSLERVRDIKEQLLKEKSVVEYQLNKES + DKYYGEVEESLKLLNLSKNSVTSIKQQINEVNKLGNDNRFAINRYDILFRATKLYETV + NTTSSIYDRIYNFVALMEHIERLLVAELAEDALETGCPHLLEIHFLLTSARDFQEQVV + VMAKEATEDAQRTVMKLFSRLSGIISKFDKLLDGLTYDIVEMARAEQISLAIRLFKIY + DLEEREDLRIEAIRNIIKKKEIEIEKSSIKKLPNSKNTARLQDETPKVIEYPTNKGLY + QEIMSGTISTRTAPRGYKHFLINGINNSISEMFGEMREKYVGDQKFDVLDNMDWIFNE + LIIVKEHIANCCPPHWNIFEVYFDQYYKELHSLITDLVESEPETIIILDILAFDKTFQ + DTLKQDFGFTKSEVKSVIGDKEKETLFKDYLNLIVVKMTEWIGNLEKAEFDVFLERST + PPHSDSDGLLFLDGTKTCFQMFTQQVEVAAGTNQAKILVGVVERFSDLLTKRQKNWIS + KISEEIKKQINYNHKYDIDPESITPEDECPGGLVEYLIAVSNDQMKAADYAVAISSKY + GKLVSKVYEKQITNHLEGTLDGFAEVAQCSSLGLITLMFDDLRKPYQEIFSKTWYMGS + QAQQIADTLDEYLLDIKPQMNSVLFVNFIDNVIGETIIKFLTALSFEHSFKNKNNKFL + EAMKRDFEIFYQLFVKVLDGNESKDTLITQNFTVMEFFMDLSCEPIDSILDIWQKYLE + VYWDSRIDLLVGILKCRKDVSSSERKKIVQQATEMLHEYRRNMEANGVDREPTLMRRF + VLEFEKQ" + gene complement(<235724..>237760) + /locus_tag="YIL067C" + /db_xref="GeneID:854743" + mRNA complement(<235724..>237760) + /locus_tag="YIL067C" + /product="uncharacterized protein" + /transcript_id="NM_001179417.1" + /db_xref="GeneID:854743" + CDS complement(235724..237760) + /locus_tag="YIL067C" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:14562095]" + /note="Uncharacterized hypothetical protein" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012197.1" + /db_xref="GeneID:854743" + /db_xref="SGD:S000001329" + /translation="MGVHFDDNANTTWEATDPGVSSDCDGQHRVTESIQLQNFSNTDM + ESMLDEEGRENSKSKWLLLKRKHPIQKFIERVWNGPVEPSDEPPSFPKRWGWLKKIDD + FPQTTFKTKIPSKLIRLLLLIVYCCFWMRIFYSLIYPYLIKPPYFHPNDGSEKIPILS + LSCNSYLNWEGTNNECGLNAKNCGPLDNKEYMIRCPALCDRGGWTYSAIAVGNRRVKY + TGYEIGGGALFSEEDPMVVSYPYRSDSFPCASAVHAGVISPFYGGCTKVSMQGAQNSF + PSKKGMYNTGFSVAFNSFFPGSYSFRDIQGGILSGCYDPRAAVVALNMLFGLPIFYLY + DSIYGYWINTIVGYWTLVLSLDPPLLTDAHDPASVYELFSVGFQRLLPLCFVLYVVWK + SAVKRTLENGSPIAKVILWYPTFWLGISNNVTFDRLPVDRLTTTDLKEQAGALTAVGS + IAATILTCAVIQAYSLWKSGRFKKYFKIYICFIGGLIALGSLPGLNLRIHHYILGSIL + VPGCATRGSSAYLFQGILVGLILSGVARWDFASIVETDTALLRGEAGASLKPPILDFN + DDQNHSLSWHLNATDPVIDQIGNIDGFSLLLNDVEVYVGKNETVSIDVLRMENPALAQ + MMDDALDASNGTIDLYLRVARASVRSPTNRGDYTNAGVLQWPNGMWQKPEPGVS" + gene complement(<238099..>240708) + /gene="RNR3" + /locus_tag="YIL066C" + /gene_synonym="DIN1; RIR3" + /db_xref="GeneID:854744" + mRNA complement(<238099..>240708) + /gene="RNR3" + /locus_tag="YIL066C" + /gene_synonym="DIN1; RIR3" + /product="ribonucleotide-diphosphate reductase subunit + RNR3" + /transcript_id="NM_001179416.3" + /db_xref="GeneID:854744" + CDS complement(238099..240708) + /gene="RNR3" + /locus_tag="YIL066C" + /gene_synonym="DIN1; RIR3" + /EC_number="1.17.4.1" + /experiment="EXISTENCE:direct assay:GO:0004748 + ribonucleoside-diphosphate reductase activity, thioredoxin + disulfide as acceptor [PMID:11893751]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:12732713]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0009263 + deoxyribonucleotide biosynthetic process [PMID:5459124]" + /note="Minor isoform of large subunit of + ribonucleotide-diphosphate reductase; the RNR complex + catalyzes rate-limiting step in dNTP synthesis, regulated + by DNA replication and DNA damage checkpoint pathways via + localization of small subunits; RNR3 has a paralog, RNR1, + that arose from the whole genome duplication" + /codon_start=1 + /product="ribonucleotide-diphosphate reductase subunit + RNR3" + /protein_id="NP_012198.3" + /db_xref="GeneID:854744" + /db_xref="SGD:S000001328" + /translation="MYVIKRDGRKEPVQFDKITSRITRLSYGLDPNRIDAVKVTQRII + SGVYSGVTTVELDNLAAETCAYMTTVHPDYATLAARIAISNLHKQTTKQFSKVIEDLH + DWINPATGKHAPMISDEIYNIVMENKDTLNSAIVYDRDFQYTYFGFKTLERSYLLRLN + GEVAERPQHLVMRVALGIHGSDIESVLKTYNLMSLRYFTHASPTLFNAGTPHPQMSSC + FLIAMKDDSIEGIYDTLKECAMISKTAGGVGLHINNIRSTGSYIAGTNGTSNGLIPMI + RVFNNTARYVDQGGNKRPGAFALFLEPWHADIFDFVDIRKTHGKEEIRARDLFPALWI + PDLFMKRVQEDGPWTLFSPSAAPGLDDVWGDEFEELYTRYEREGRGKTIKAQKLWYAI + LQAQTETGTPFMVYKDACNRKTNQQNLGTIKSSNLCCEIVEYSSPDETAVCNLASIAL + PAFVEVSEDGKTASYNFERLHEIAKVITHNLNRVIDRNYYPVPEARNSNMKHRPIALG + VQGLADTYMMLRLPFESEEAQTLNKQIFETIYHATLEASCELAQKEGKYSTFEGSPAS + KGILQFDMWNAKPFGMWDWETLRKDIVKHGLRNSLTMAPMPTASTSQILGYNECFEPV + TSNMYSRRVLSGEFQVVNPYLLRDLVDLGIWDDSMKQYLITQNGSIQGLPNVPQELKE + LYKTVWEISQKTIINMAADRAIYIDQSHSLNLFLQAPSMGKITSMHFYGWKKGLKTGM + YYLRTQAASAAIQFTIDQEVADQAATHIASVSELDRPVYVPKGTKFSEQKAASALTES + SDNEKDASPVPSEQSSVSSAMSNVKLEDSVAPAVPTETIKEDSDEKKCDIYNEKVIAC + TAPTPEACESCSG" + gene complement(<241308..>241775) + /gene="FIS1" + /locus_tag="YIL065C" + /gene_synonym="MDV2" + /db_xref="GeneID:854745" + mRNA complement(<241308..>241775) + /gene="FIS1" + /locus_tag="YIL065C" + /gene_synonym="MDV2" + /product="Fis1p" + /transcript_id="NM_001179415.3" + /db_xref="GeneID:854745" + CDS complement(241308..241775) + /gene="FIS1" + /locus_tag="YIL065C" + /gene_synonym="MDV2" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane + [PMID:11038183|PMID:15809300|PMID:16407407]" + /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome + [PMID:16968746]" + /experiment="EXISTENCE:genetic interaction:GO:0016559 + peroxisome fission [PMID:18445678]" + /experiment="EXISTENCE:mutant phenotype:GO:0000266 + mitochondrial fission [PMID:11038182|PMID:11038183]" + /experiment="EXISTENCE:mutant phenotype:GO:0007031 + peroxisome organization [PMID:16968746]" + /note="Protein involved in mitochondrial fission and + peroxisome abundance; may have a distinct role in + tethering protein aggregates to mitochondria in order to + retain them in the mother cell; required for localization + of Dnm1p and Mdv1p during mitochondrial division; mediates + ethanol-induced apoptosis and ethanol-induced + mitochondrial fragmentation" + /codon_start=1 + /product="Fis1p" + /protein_id="NP_012199.3" + /db_xref="GeneID:854745" + /db_xref="SGD:S000001327" + /translation="MTKVDFWPTLKDAYEPLYPQQLEILRQQVVSEGGPTATIQSRFN + YAWGLIKSTDVNDERLGVKILTDIYKEAESRRRECLYYLTIGCYKLGEYSMAKRYVDT + LFEHERNNKQVGALKSMVEDKIQKETLKGVVVAGGVLAGAVAVASFFLRNKRR" + gene <241943..>242716 + /gene="EFM4" + /locus_tag="YIL064W" + /gene_synonym="SEE1" + /db_xref="GeneID:854746" + mRNA <241943..>242716 + /gene="EFM4" + /locus_tag="YIL064W" + /gene_synonym="SEE1" + /product="Efm4p" + /transcript_id="NM_001179414.1" + /db_xref="GeneID:854746" + CDS 241943..242716 + /gene="EFM4" + /locus_tag="YIL064W" + /gene_synonym="SEE1" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0016279 + protein-lysine N-methyltransferase activity + [PMID:20510667]" + /experiment="EXISTENCE:mutant phenotype:GO:0016192 + vesicle-mediated transport [PMID:19160456]" + /note="Lysine methyltransferase; involved in the + dimethylation of eEF1A (Tef1p/Tef2p) at lysine 316; + sequence similarity to S-adenosylmethionine-dependent + methyltransferases of the seven beta-strand family; role + in vesicular transport" + /codon_start=1 + /product="Efm4p" + /protein_id="NP_012200.1" + /db_xref="GeneID:854746" + /db_xref="SGD:S000001326" + /translation="MKRSEKKSMSSALKNGIMERTQPEKVVQMQGTADLSTSKLGTKK + YWDELYALELENFRRNPQDTGDCWFSDSDAEQKMIDFLVDNIGAYRISENASVVDLGT + GNGHMLFELHQTEFQGKLVGIDYSEESVKLASNIAEATGVDNFISFQQADIFSGDWKP + GKYDIVLDKGTLDAISLSGMKINGKLDVVDVYAGVVERILKKDGIFLITSCNFTQDEL + VKIIETDNLKMWKTIKYPVFQFGGVQGATICSVAFVKQN" + gene complement(<242761..>243744) + /gene="YRB2" + /locus_tag="YIL063C" + /db_xref="GeneID:854747" + mRNA complement(<242761..>243744) + /gene="YRB2" + /locus_tag="YIL063C" + /product="Yrb2p" + /transcript_id="NM_001179413.1" + /db_xref="GeneID:854747" + CDS complement(242761..243744) + /gene="YRB2" + /locus_tag="YIL063C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10684247|PMID:22932476|PMID:9121474|PMID:9395535]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:mutant phenotype:GO:0000056 + ribosomal small subunit export from nucleus + [PMID:12082158]" + /experiment="EXISTENCE:mutant phenotype:GO:0006611 protein + export from nucleus [PMID:9636166]" + /note="hypothetical protein; involved in nuclear processes + of the Ran-GTPase cycle; involved in nuclear protein + export; contains Ran Binding Domain and FxFG repeats; + interacts with Srm1p, GTP-Gsp1p, Rna1p and Crm1p; + relocalizes to the cytosol in response to hypoxia; not + essential for viability" + /codon_start=1 + /product="Yrb2p" + /protein_id="NP_012201.1" + /db_xref="GeneID:854747" + /db_xref="SGD:S000001325" + /translation="MSETNGGNAARENSEVKQTAVENPIDKLDGTPKRPREKDQDEQA + EETSDKSEAPNKNDEEKKEEGKKDQEPSHKKIKVDDGKTVESGIVEDDKKEDKFVFGA + ASKFGTGFGVAKKDTKDGDATTSTESLPASDSKTKKPFAFGSGLSFGSGFNILKNKTE + NNSESEKKATDVDKDKVHSGSEQLANASEDTKDKPKPLKLQKQEVKSGEESEECIYQV + NAKLYQLSNIKEGWKERGVGIIKINKSKDDVEKTRIVMRSRGILKVILNIQLVKGFTV + QKGFTGSLQSEKFIRLLAVDDNGDPAQYAIKTGKKETTDELYNIIVKSVPK" + gene complement(<243998..>244462) + /gene="ARC15" + /locus_tag="YIL062C" + /db_xref="GeneID:854748" + mRNA complement(<243998..>244462) + /gene="ARC15" + /locus_tag="YIL062C" + /product="Arc15p" + /transcript_id="NM_001179412.1" + /db_xref="GeneID:854748" + CDS complement(243998..244462) + /gene="ARC15" + /locus_tag="YIL062C" + /experiment="EXISTENCE:direct assay:GO:0003729 mRNA + binding [PMID:20844764]" + /experiment="EXISTENCE:direct assay:GO:0005885 Arp2/3 + protein complex [PMID:10377407|PMID:9210376]" + /experiment="EXISTENCE:mutant phenotype:GO:0000001 + mitochondrion inheritance [PMID:11248049]" + /experiment="EXISTENCE:mutant phenotype:GO:0030674 + protein-macromolecule adaptor activity [PMID:10377407]" + /experiment="EXISTENCE:mutant phenotype:GO:0044396 actin + cortical patch organization [PMID:10377407]" + /note="Subunit of the ARP2/3 complex; ARP2/3 is required + for the motility and integrity of cortical actin patches; + has mRNA binding activity" + /codon_start=1 + /product="Arc15p" + /protein_id="NP_012202.1" + /db_xref="GeneID:854748" + /db_xref="SGD:S000001324" + /translation="MEADWRRIDIDAFDPESGRLTAADLVPPYETTVTLQELQPRMNQ + LRSLATSGDSLGAVQLLTTDPPYSADAPTKEQYFKSVLEALTQVRQADIGNVIKNLSD + SQRDVLVKYLYKGMSVPQGQKQGGVLLAWLERITQVSGVTPIVHYISDRRTV" + gene complement(<244657..>245559) + /gene="SNP1" + /locus_tag="YIL061C" + /db_xref="GeneID:854749" + mRNA complement(<244657..>245559) + /gene="SNP1" + /locus_tag="YIL061C" + /product="U1 snRNP complex subunit SNP1" + /transcript_id="NM_001179411.1" + /db_xref="GeneID:854749" + CDS complement(244657..245559) + /gene="SNP1" + /locus_tag="YIL061C" + /experiment="EXISTENCE:direct assay:GO:0005685 U1 snRNP + [PMID:9630245]" + /experiment="EXISTENCE:direct assay:GO:0071004 U2-type + prespliceosome [PMID:16618970]" + /experiment="EXISTENCE:physical interaction:GO:0000243 + commitment complex [PMID:10072386]" + /experiment="EXISTENCE:physical interaction:GO:0000398 + mRNA splicing, via spliceosome [PMID:10072386]" + /experiment="EXISTENCE:physical interaction:GO:0003729 + mRNA binding [PMID:10072386]" + /experiment="EXISTENCE:physical interaction:GO:0030619 U1 + snRNA binding [PMID:1387202]" + /note="Component of U1 snRNP required for mRNA splicing + via spliceosome; substrate of arginine methyltransferase + Hmt1p; may interact with poly(A) polymerase to regulate + polyadenylation; homolog of human U1-70K, which has been + linked to several types of autoimmune and + neurodegenerative diseases" + /codon_start=1 + /product="U1 snRNP complex subunit SNP1" + /protein_id="NP_012203.1" + /db_xref="GeneID:854749" + /db_xref="SGD:S000001323" + /translation="MNYNLSKYPDDVSRLFKPRPPLSYKRPTDYPYAKRQTNPNITGV + ANLLSTSLKHYMEEFPEGSPNNHLQRYEDIKLSKIKNAQLLDRRLQNWNPNVDPHIKD + TDPYRTIFIGRLPYDLDEIELQKYFVKFGEIEKIRIVKDKITQKSKGYAFIVFKDPIS + SKMAFKEIGVHRGIQIKDRICIVDIERGRTVKYFKPRRLGGGLGGRGYSNRDSRLPGR + FASASTSNPAERNYAPRLPRRETSSSAYSADRYGSSTLDARYRGNRPLLSAATPTAAV + TSVYKSRNSRTRESQPAPKEAPDY" + rep_origin 245756..245925 + /note="ARS923; Autonomously Replicating Sequence" + /db_xref="SGD:S000119034" + repeat_region 246220..246552 + /note="Ty2 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007012" + gene <246392..>246826 + /locus_tag="YIL060W" + /db_xref="GeneID:854750" + mRNA <246392..>246826 + /locus_tag="YIL060W" + /product="uncharacterized protein" + /transcript_id="NM_001179410.3" + /db_xref="GeneID:854750" + CDS 246392..246826 + /locus_tag="YIL060W" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:24360837]" + /note="Mitochondrial hypothetical protein; required for + respiratory growth; mutant accumulates less glycogen than + does wild type; null mutation results in a decrease in + plasma membrane electron transport; YIL060W is not an + essential gene" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012204.3" + /db_xref="GeneID:854750" + /db_xref="SGD:S000001322" + /translation="MMIIIFIELCRIADSLLWIPKSSRRTSSTFYIPNIIALLKMESQ + QLSQNSPTLHIHTCGSKIGTLFLRFTKVAIGTSLIVGAGVAMEVSVPLPPQPLYSRSE + VPSVELCGIVAICRSPPSVYPTCRPISLSKKIVSGLVRTNSS" + rep_origin 247705..247760 + /note="ARS914; Autonomously Replicating Sequence" + /db_xref="SGD:S000118397" + gene complement(<247902..>248396) + /gene="RGI2" + /locus_tag="YIL057C" + /db_xref="GeneID:854753" + mRNA complement(<247902..>248396) + /gene="RGI2" + /locus_tag="YIL057C" + /product="Rgi2p" + /transcript_id="NM_001179407.3" + /db_xref="GeneID:854753" + CDS complement(247902..248396) + /gene="RGI2" + /locus_tag="YIL057C" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0006112 energy + reserve metabolic process [PMID:20567505]" + /note="hypothetical protein; involved in energy metabolism + under respiratory conditions; expression induced under + carbon limitation and repressed under high glucose; RGI2 + has a paralog, RGI1, that arose from the whole genome + duplication" + /codon_start=1 + /product="Rgi2p" + /protein_id="NP_012207.3" + /db_xref="GeneID:854753" + /db_xref="SGD:S000001319" + /translation="MTKKDKKAKGPKMSTITTKSGESLKVFEDLHDFETYLKGETEDQ + EFDHVHCQLKYYPPFVLHDAHDDPEKIKETANSHSKKFVRHLHQHVEKHLLKDIKTAI + NKPELKFHDKKKQESFDRIVWNYGEETELNAKKFKVSVEVVCKHDGAMVDVDYKTEPL + QPLI" + rep_origin 248396..248850 + /note="ARS915; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130159" + gene 248850..248931 + /gene="SUP17" + /locus_tag="YNCI0006W" + /db_xref="GeneID:854754" + tRNA 248850..248931 + /gene="SUP17" + /locus_tag="YNCI0006W" + /product="tRNA-Ser" + /experiment="EXISTENCE:curator inference:GO:0002181 + cytoplasmic translation [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Serine tRNA (tRNA-Ser), predicted by tRNAscan-SE + analysis; can mutate to suppress ochre nonsense mutations" + /db_xref="GeneID:854754" + /db_xref="SGD:S000006735" + gene <249991..>251913 + /gene="VHR1" + /locus_tag="YIL056W" + /db_xref="GeneID:854755" + mRNA <249991..>251913 + /gene="VHR1" + /locus_tag="YIL056W" + /product="Vhr1p" + /transcript_id="NM_001179406.1" + /db_xref="GeneID:854755" + CDS 249991..251913 + /gene="VHR1" + /locus_tag="YIL056W" + /experiment="EXISTENCE:direct assay:GO:0000977 RNA + polymerase II transcription regulatory region + sequence-specific DNA binding [PMID:16533810]" + /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding + transcription factor activity, RNA polymerase II-specific + [PMID:21278159]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095|PMID:16533810]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0000981 + DNA-binding transcription factor activity, RNA polymerase + II-specific [PMID:21278159]" + /experiment="EXISTENCE:mutant phenotype:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:16533810|PMID:21278159]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:16533810]" + /note="Transcriptional activator; required for the vitamin + H-responsive element (VHRE) mediated induction of VHT1 + (Vitamin H transporter) and BIO5 (biotin biosynthesis + intermediate transporter) in response to low biotin + concentrations; VHR1 has a paralog, VHR2, that arose from + the whole genome duplication" + /codon_start=1 + /product="Vhr1p" + /protein_id="NP_012208.1" + /db_xref="GeneID:854755" + /db_xref="SGD:S000001318" + /translation="MNGPPTFTQYRINKFSGNGATHKIRELLNFNDEKKWKQFSSRRL + ELIDKFQLSQYKASEQDQNIKQIATILRTEFGYPVSCSKEFEKLVTAAVQSVRRNRKR + SKKRYALSIANGSGGNVNNSISSNSTSDDEISPSIYQRSNSDFLPSSNYAADFQFSNK + FQPLMSHQSHNGTIFPTVGTQNDSSPSVTSTQQKYNDIVTMLVHDLVTNVVPLSEQAL + KDPYTGPNLSHFATSSLSQQPNITTNIPIDSTVPFFLREKLLLQIQRSRTCQDISQAA + GSIDIYANLEILGEMSIRMSIAFVIERFFSNLVSSSMKYITAKTCSPENLALLSQRLF + GAATRHNLSHFPAAQVQLRLLYLVIGGIVKDFGFDPTLYPLSEIIHHIVMVQYPLASS + CASEPPSSSPNKRVKRSPPVVSSDVMLNNNNTLSNRATLLTTLPMKPQSANKDVNRRV + IIRFNDREQAFTFHQLSNGPPTVSEVLENCKNLFNIINKNKNFGIFHNDNLLNDESLA + KLFDSFSTSEIHLVIKDISTIPLQDAKIPVPITLPKMSCIGENPSMPSIPLVPQEKDD + PKKSSLTAFDNILNRISKSPMNEENSNTTLNTGTSTSNTNNNDHNESVPAPYVTKNKN + SFQNGNLPQPVFQPLL" + gene complement(<252042..>253925) + /locus_tag="YIL055C" + /db_xref="GeneID:854756" + mRNA complement(<252042..>253925) + /locus_tag="YIL055C" + /product="uncharacterized protein" + /transcript_id="NM_001179405.1" + /db_xref="GeneID:854756" + CDS complement(252042..253925) + /locus_tag="YIL055C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:24390141]" + /note="hypothetical protein" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012209.1" + /db_xref="GeneID:854756" + /db_xref="SGD:S000001317" + /translation="MTLEPHYSAKSAASASAFVARSATESSTASTKAAPRKKTYSQSN + GIPIRIDNLPPGKTWAQVKYLIGGIIYHTNILQVKMLPPMTSMVPPFITFQSCIVILK + NSIDNESLENLLLTLNTYQWDYHDLFVYLLPYTNDSPSLRYPEISDSNNDVRSAPDET + KRSISPRYASHVSSVTPQPPSASTPPSQFFSFSPEVSLRKNENITPLPTPVPVPVGVP + PLAPPPHGPFSTSMLPMLGAPPGTVPNMQMPYQTTLPSPTAAATAGGPLASPTHYPRR + RHFYHQNQSQFQKYMHNSPRNPDTGTGPRLSQQHHLSLRNNKINPSYNEISALYNLNM + ASNSNNNGNIPTTSTNGDDRALQAKNGGTITPSQTQINHKRLKHIFNEKSFRKQMTNR + GMWQLKIINFPPYIPIEFLEKLSESDFNELMNQEKFTVIEIKEKGQLEKFGRLRWTVL + KDFIKLKCPKLLRLQERQFLQQQNEASLLNESMDALKISENENTNGSANNSTYTNGGP + RTSINNTREFYVGVYEDHEEATLLRFELPEDELEEFNRNLPTTFAQSGNVSDSEGDSK + AKYFKVSTIVYNAIVGFHDKELSDLTFESLQDQEYSLGYKIHVMELPPFDEDEFENQR + QQF" + gene <254543..>254860 + /locus_tag="YIL054W" + /db_xref="GeneID:854757" + mRNA <254543..>254860 + /locus_tag="YIL054W" + /product="uncharacterized protein" + /transcript_id="NM_001270751.1" + /db_xref="GeneID:854757" + CDS 254543..254860 + /locus_tag="YIL054W" + /note="hypothetical protein; expressed at both mRNA and + protein levels" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001257680.1" + /db_xref="GeneID:854757" + /db_xref="SGD:S000001316" + /translation="MAPKAFFVCLPWVLPRHALIVRQAGNPYHFLAYTNPRAPGKLQD + SHCPVFFMGIIIITIITVTLAIIIINIIFLTLFDDGMCFYCSLLTFSFVSFNFDHFDH + FDL" + gene <255115..>255867 + /gene="GPP1" + /locus_tag="YIL053W" + /gene_synonym="RHR2" + /db_xref="GeneID:854758" + mRNA <255115..>255867 + /gene="GPP1" + /locus_tag="YIL053W" + /gene_synonym="RHR2" + /product="glycerol-1-phosphatase RHR2" + /transcript_id="NM_001179403.1" + /db_xref="GeneID:854758" + CDS 255115..255867 + /gene="GPP1" + /locus_tag="YIL053W" + /gene_synonym="RHR2" + /EC_number="3.1.3.21" + /experiment="EXISTENCE:direct assay:GO:0000121 + glycerol-1-phosphatase activity [PMID:8662716]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095|PMID:27385335]" + /experiment="EXISTENCE:mutant phenotype:GO:0006114 + glycerol biosynthetic process [PMID:11058591]" + /note="Constitutively expressed DL-glycerol-3-phosphate + phosphatase; also known as glycerol-1-phosphatase; + involved in glycerol biosynthesis, induced in response to + both anaerobic and osmotic stress; GPP1 has a paralog, + GPP2, that arose from the whole genome duplication" + /codon_start=1 + /product="glycerol-1-phosphatase RHR2" + /protein_id="NP_012211.2" + /db_xref="GeneID:854758" + /db_xref="SGD:S000001315" + /translation="MPLTTKPLSLKINAALFDVDGTIIISQPAIAAFWRDFGKDKPYF + DAEHVIHISHGWRTYDAIAKFAPDFADEEYVNKLEGEIPEKYGEHSIEVPGAVKLCNA + LNALPKEKWAVATSGTRDMAKKWFDILKIKRPEYFITANDVKQGKPHPEPYLKGRNGL + GFPINEQDPSKSKVVVFEDAPAGIAAGKAAGCKIVGIATTFDLDFLKEKGCDIIVKNH + ESIRVGEYNAETDEVELIFDDYLYAKDDLLKW" + gene complement(<256226..>257063) + /gene="RPL34B" + /locus_tag="YIL052C" + /db_xref="GeneID:854759" + mRNA complement(join(<256226..256554,257027..>257063)) + /gene="RPL34B" + /locus_tag="YIL052C" + /product="ribosomal 60S subunit protein L34B" + /transcript_id="NM_001179402.1" + /db_xref="GeneID:854759" + CDS complement(join(256226..256554,257027..257063)) + /gene="RPL34B" + /locus_tag="YIL052C" + /experiment="EXISTENCE:curator inference:GO:0002181 + cytoplasmic translation [PMID:11983894]" + /experiment="EXISTENCE:curator inference:GO:0003735 + structural constituent of ribosome [PMID:11983894]" + /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic + large ribosomal subunit [PMID:11983894]" + /note="Ribosomal 60S subunit protein L34B; homologous to + mammalian ribosomal protein L34, no bacterial homolog; + RPL34B has a paralog, RPL34A, that arose from the whole + genome duplication" + /codon_start=1 + /product="ribosomal 60S subunit protein L34B" + /protein_id="NP_012212.1" + /db_xref="GeneID:854759" + /db_xref="SGD:S000001314" + /translation="MAQRVTFRRRNPYNTRSNKIKVVKTPGGILRAQHVKKLATRPKC + GDCGSALQGISTLRPRQYATVSKTHKTVSRAYGGSRCANCVKERIVRAFLIEEQKIVK + KVVKEQTEAAKKSEKKSKK" + gene complement(<257843..>258280) + /gene="MMF1" + /locus_tag="YIL051C" + /gene_synonym="IBM1" + /db_xref="GeneID:854760" + mRNA complement(<257843..>258280) + /gene="MMF1" + /locus_tag="YIL051C" + /gene_synonym="IBM1" + /product="isoleucine biosynthesis protein MMF1" + /transcript_id="NM_001179401.3" + /db_xref="GeneID:854760" + CDS complement(257843..258280) + /gene="MMF1" + /locus_tag="YIL051C" + /gene_synonym="IBM1" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005759 + mitochondrial matrix [PMID:11003673]" + /experiment="EXISTENCE:genetic interaction:GO:0032543 + mitochondrial translation [PMID:15164357]" + /experiment="EXISTENCE:mutant phenotype:GO:0009097 + isoleucine biosynthetic process [PMID:11442631]" + /note="Mitochondrial protein required for transamination + of isoleucine; but not of valine or leucine; may regulate + specificity of branched-chain transaminases Bat1p and + Bat2p; induction of expression in response to stress is + mediated by a Hog1p-regulated antisense RNA and gene + looping; interacts genetically with mitochondrial + ribosomal protein genes; MMF1 has a paralog, HMF1, that + arose from the whole genome duplication" + /codon_start=1 + /product="isoleucine biosynthesis protein MMF1" + /protein_id="NP_012213.3" + /db_xref="GeneID:854760" + /db_xref="SGD:S000001313" + /translation="MFLRNSVLRTAPVLRRGITTLTPVSTKLAPPAAASYSQAMKANN + FVYVSGQIPYTPDNKPVQGSISEKAEQVFQNVKNILAESNSSLDNIVKVNVFLADMKN + FAEFNSVYAKHFHTHKPARSCVGVASLPLNVDLEMEVIAVEKN" + gene <258913..>259770 + /gene="PCL7" + /locus_tag="YIL050W" + /db_xref="GeneID:854761" + mRNA <258913..>259770 + /gene="PCL7" + /locus_tag="YIL050W" + /product="Pcl7p" + /transcript_id="NM_001179400.3" + /db_xref="GeneID:854761" + CDS 258913..259770 + /gene="PCL7" + /locus_tag="YIL050W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:16611745]" + /experiment="EXISTENCE:direct assay:GO:0016538 + cyclin-dependent protein serine/threonine kinase regulator + activity [PMID:12407105]" + /experiment="EXISTENCE:genetic interaction:GO:0005979 + regulation of glycogen biosynthetic process + [PMID:11602261]" + /experiment="EXISTENCE:genetic interaction:GO:0005981 + regulation of glycogen catabolic process [PMID:11602261]" + /experiment="EXISTENCE:mutant phenotype:GO:0031647 + regulation of protein stability [PMID:16611745]" + /experiment="EXISTENCE:physical interaction:GO:0000307 + cyclin-dependent protein kinase holoenzyme complex + [PMID:16611745]" + /note="Pho85p cyclin of the Pho80p subfamily; forms a + functional kinase complex with Pho85p which phosphorylates + Mmr1p and is regulated by Pho81p; involved in glycogen + metabolism, expression is cell-cycle regulated; PCL7 has a + paralog, PCL6, that arose from the whole genome + duplication" + /codon_start=1 + /product="Pcl7p" + /protein_id="NP_012214.3" + /db_xref="GeneID:854761" + /db_xref="SGD:S000001312" + /translation="MELSSPSKKTTTSPINIPGGNRDNLIIGPHSHSFKTDPFSSNNS + SLLSKISTNPSLESPFSSKSLLDCSPVQAVKKSLESEAKTHSLDEETNEQTDVKILNI + ADFPTDELILMISALLNRIITANDETTDVSQQVSDETEDELLTPILAFYGKNVPEIAV + VQYLERIQKYCPTTNDIFLSLLVYFDRISKNYGHSSERNGCAKQLFVMDSGNIHRLLI + TGVTICTKFLSDFFYSNSRYAKVGGISLQELNHLELQFLILCDFKLLVSVEEMQKYAN + LLYKFWNDQ" + gene <260158..>260919 + /gene="DFG10" + /locus_tag="YIL049W" + /db_xref="GeneID:854762" + mRNA <260158..>260919 + /gene="DFG10" + /locus_tag="YIL049W" + /product="putative polyprenol reductase" + /transcript_id="NM_001179399.1" + /db_xref="GeneID:854762" + CDS 260158..260919 + /gene="DFG10" + /locus_tag="YIL049W" + /EC_number="1.3.1.94" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0006488 + dolichol-linked oligosaccharide biosynthetic process + [PMID:20637498]" + /experiment="EXISTENCE:mutant phenotype:GO:0007124 + pseudohyphal growth [PMID:9055077]" + /experiment="EXISTENCE:mutant phenotype:GO:0019408 + dolichol biosynthetic process [PMID:20637498]" + /note="Probable polyprenol reductase; catalyzes conversion + of polyprenol to dolichol, the precursor for + N-glycosylation; involved in filamentous growth; mutations + in human homolog SRD5A3 confer CDG (Congenital Disorders + of Glycosylation); human SRD5A3 can complement yeast null + mutant" + /codon_start=1 + /product="putative polyprenol reductase" + /protein_id="NP_012215.1" + /db_xref="GeneID:854762" + /db_xref="SGD:S000001311" + /translation="MYFDEEQLLKYTIYAYRLSFFVGICSLFIAKSCLPEFLQYGKTY + RPKENSKYSSILERIKKFTVPKAYFSHFYYLATFLSLVTLYFYPKFPIVWIIFGHSLR + RLYETLYVLHYTSNSRMNWSHYLVGIWFYSVLLLILNISLYKNSIPNTLNMNAFIIFC + IASWDQYKNHVILANLVKYSLPTGRLFRLVCCPHYLDEIIIYSTLLPYEQEFYLTLVW + VITSLTISALETKNYYRHKFKDNHVAPYAIIPFII" + gene <261437..>264892 + /gene="NEO1" + /locus_tag="YIL048W" + /db_xref="GeneID:854763" + mRNA <261437..>264892 + /gene="NEO1" + /locus_tag="YIL048W" + /product="putative aminophospholipid-translocating P4-type + ATPase NEO1" + /transcript_id="NM_001179398.1" + /db_xref="GeneID:854763" + CDS 261437..264892 + /gene="NEO1" + /locus_tag="YIL048W" + /EC_number="7.6.2.1" + /experiment="EXISTENCE:direct assay:GO:0000139 Golgi + membrane [PMID:12960419]" + /experiment="EXISTENCE:direct assay:GO:0005768 endosome + [PMID:15314152]" + /experiment="EXISTENCE:direct assay:GO:0005770 late + endosome [PMID:30981741]" + /experiment="EXISTENCE:direct assay:GO:0005794 Golgi + apparatus [PMID:15314152]" + /experiment="EXISTENCE:direct assay:GO:0005802 trans-Golgi + network [PMID:30981741]" + /experiment="EXISTENCE:direct assay:GO:0030137 COPI-coated + vesicle [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0006890 + retrograde vesicle-mediated transport, Golgi to + endoplasmic reticulum [PMID:12960419]" + /experiment="EXISTENCE:mutant phenotype:GO:0006897 + endocytosis [PMID:15314152]" + /experiment="EXISTENCE:mutant phenotype:GO:0007033 vacuole + organization [PMID:15314152]" + /experiment="EXISTENCE:mutant phenotype:GO:0045332 + phospholipid translocation [PMID:27235400]" + /note="Phospholipid translocase (flippase); involved in + generating phospholipid asymmetry in plasma membrane; + involved in endocytosis, vacuolar biogenesis and + Golgi-to-ER vesicle-mediated transport; localizes to + endosomes and Golgi apparatus; targeted to vacuole via + AP-3 pathway" + /codon_start=1 + /product="putative aminophospholipid-translocating P4-type + ATPase NEO1" + /protein_id="NP_012216.1" + /db_xref="GeneID:854763" + /db_xref="SGD:S000001310" + /translation="MPNPPSFKSHKQNLFNSNNNQHANSVDSFDLHLDDSFDAALDSL + QINNNPEPLSKHNTVGDRESFEMRTVDDLDNFSNHSSDSHRKSSNTDTHPLMYDNRLS + QDDNFKFTNIASSPPSSSNNIFSKALSYLKVSNTKNWSKFGSPIELSDQHIEREIHPD + TTPVYDRNRYVSNELSNAKYNAVTFVPTLLYEQFKFFYNLYFLVVALSQAVPALRIGY + LSSYIVPLAFVLTVTMAKEAIDDIQRRRRDRESNNELYHVITRNRSIPSKDLKVGDLI + KVHKGDRIPADLVLLQSSEPSGESFIKTDQLDGETDWKLRVACPLTQNLSENDLINRI + SITASAPEKSIHKFLGKVTYKDSTSNPLSVDNTLWANTVLASSGFCIACVVYTGRDTR + QAMNTTTAKVKTGLLELEINSISKILCACVFALSILLVAFAGFHNDDWYIDILRYLIL + FSTIIPVSLRVNLDLAKSVYAHQIEHDKTIPETIVRTSTIPEDLGRIEYLLSDKTGTL + TQNDMQLKKIHLGTVSYTSETLDIVSDYVQSLVSSKNDSLNNSKVALSTTRKDMSFRV + RDMILTLAICHNVTPTFEDDELTYQAASPDEIAIVKFTESVGLSLFKRDRHSISLLHE + HSGKTLNYEILQVFPFNSDSKRMGIIVRDEQLDEYWFMQKGADTVMSKIVESNDWLEE + ETGNMAREGLRTLVIGRKKLNKKIYEQFQKEYNDASLSMLNRDQQMSQVITKYLEHDL + ELLGLTGVEDKLQKDVKSSIELLRNAGIKIWMLTGDKVETARCVSISAKLISRGQYVH + TITKVTRPEGAFNQLEYLKINRNACLLIDGESLGMFLKHYEQEFFDVVVHLPTVIACR + CTPQQKADVALVIRKMTGKRVCCIGDGGNDVSMIQCADVGVGIVGKEGKQASLAADFS + ITQFCHLTELLLWHGRNSYKRSAKLAQFVMHRGLIIAICQAVYSICSLFEPIALYQGW + LMVGYATCYTMAPVFSLTLDHDIEESLTKIYPELYKELTEGKSLSYKTFFVWVLLSLF + QGSVIQLFSQAFTSLLDTDFTRMVAISFTALVVNELIMVALEIYTWNKTMLVTEIATL + LFYIVSVPFLGDYFDLGYMTTVNYYAGLLVILLISIFPVWTAKAIYRRLHPPSYAKVQ + EFATP" + gene complement(<265115..>267823) + /gene="SYG1" + /locus_tag="YIL047C" + /db_xref="GeneID:854764" + mRNA complement(<265115..>267823) + /gene="SYG1" + /locus_tag="YIL047C" + /product="Syg1p" + /transcript_id="NM_001179397.3" + /db_xref="GeneID:854764" + CDS complement(265115..267823) + /gene="SYG1" + /locus_tag="YIL047C" + /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type + vacuole membrane [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:7592711]" + /experiment="EXISTENCE:mutant phenotype:GO:0007165 signal + transduction [PMID:7592711]" + /note="Plasma membrane hypothetical protein; targeted to + vacuole via AP-3 pathway; truncation and overexpression + suppresses lethality of G-alpha protein deficiency" + /codon_start=1 + /product="Syg1p" + /protein_id="NP_012217.3" + /db_xref="GeneID:854764" + /db_xref="SGD:S000001309" + /translation="MKFADHLTESAIPEWRDKYIDYKVGKKKLRRYKEKLDAEEEQSS + SYRSWMPSVSVYQTAFQQREPGKSRSDGDYRSGPAFKKDYSALQREFVADFIEDWLIS + FQLSKCNEFYLWLLKECDKKFEVLQSQLHYYSLQKNYERDNLNRSSSNVDMSTSLYAA + GLAGRSDSRVNSIDSDSRSVMYGSMPCTKEAKKPRLSLLAYCQKVLKDNRLLPSWPKR + GFSLLQDLRQDASSRGRETFAFGASFLETMTTTQARNLLSNAIIEYYLYLQLVKSFRD + INVTGFRKMVKKFDKTCHTRELTTFMSYARTHYTLFKHADANVQLVAQKMQQITSSQP + TPTSELSSAQRDKEPITWLETQITEWFTTALTNSPKDRKHNTHKLKKLTIQYSISEQM + VHRNNRSIVQMLVVGLGIGVSMTLITYTLYLGISSEETSFTHKILFPLWGGWYMVLLI + AFLFLVNCFIWHRTGINYRFIMLGEIQSKNGTQFFNNDFATSKIPLKLYFLTFFIVPC + AVCSMLSFALEKLTPLGFLYIGIVSFLFLCPSGLIPYWDKVVHTRKWLVVTLIRLMMS + GFFPVEFGDFFLGDIICSLTYSIADIAMFFCVYSHTPNNLCGSSHSRAMGVLSCLPSY + WRFMQCLRRFADSGDWFPHLLNAAKYTLGIAYNATLCAYRLSDRSEQRRTPFIVCATL + NSILTSAWDLVMDWSFAHNTTSYNWLLRDDLYLAGKKNWENGSYSFSRKLVYYFAMIW + DILIRFEWIVYAIAPQTIQQSAVTSFILALLEVLRRFVWIIFRVENEHVANVHLFRVT + GDAPLPYPIAQVGDDSMDSSDLGSKAFSSLNDIPITPSHDNNPHSFAEPMPAYRGTFR + RRSSVFENISRSIPWAHATDFQRPTVNTVDDRSPETDSESEVESIM" + gene <268309..>268473 + /locus_tag="YIL046W-A" + /db_xref="GeneID:1466492" + mRNA <268309..>268473 + /locus_tag="YIL046W-A" + /product="uncharacterized protein" + /transcript_id="NM_001184654.1" + /db_xref="GeneID:1466492" + CDS 268309..268473 + /locus_tag="YIL046W-A" + /note="hypothetical protein; identified by expression + profiling and mass spectrometry" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_878097.1" + /db_xref="GeneID:1466492" + /db_xref="SGD:S000028836" + /translation="MMCVCIPKKKLMDWRVYYIYSYVVCLYMCGSDCACICVLACVVQ + CVCFNVEMRL" + gene <268651..>270573 + /gene="MET30" + /locus_tag="YIL046W" + /gene_synonym="ZRG11" + /db_xref="GeneID:854765" + mRNA <268651..>270573 + /gene="MET30" + /locus_tag="YIL046W" + /gene_synonym="ZRG11" + /product="ubiquitin-binding SDF ubiquitin ligase complex + subunit MET30" + /transcript_id="NM_001179396.1" + /db_xref="GeneID:854765" + CDS 268651..270573 + /gene="MET30" + /locus_tag="YIL046W" + /gene_synonym="ZRG11" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10637232]" + /experiment="EXISTENCE:direct assay:GO:0019005 SCF + ubiquitin ligase complex [PMID:9716410]" + /experiment="EXISTENCE:direct assay:GO:0043130 ubiquitin + binding [PMID:21070969]" + /experiment="EXISTENCE:direct assay:GO:0043224 nuclear SCF + ubiquitin ligase complex [PMID:10637232]" + /experiment="EXISTENCE:direct assay:GO:0046685 response to + arsenic-containing substance [PMID:15689486]" + /experiment="EXISTENCE:direct assay:GO:0046686 response to + cadmium ion [PMID:15689486]" + /experiment="EXISTENCE:genetic interaction:GO:0031146 + SCF-dependent proteasomal ubiquitin-dependent protein + catabolic process [PMID:9716410]" + /experiment="EXISTENCE:mutant phenotype:GO:0000082 G1/S + transition of mitotic cell cycle [PMID:15870262]" + /experiment="EXISTENCE:mutant phenotype:GO:0000083 + regulation of transcription involved in G1/S transition of + mitotic cell cycle [PMID:15870262]" + /experiment="EXISTENCE:mutant phenotype:GO:0000209 protein + polyubiquitination [PMID:9716410]" + /note="F-box protein containing five copies of the WD40 + motif; controls cell cycle function, sulfur metabolism, + and methionine biosynthesis as part of the ubiquitin + ligase complex; interacts with and regulates Met4p, + localizes within the nucleus; dissociation of Met30p from + SCF complex in response to cadmium stress is regulated by + Cdc48p" + /codon_start=1 + /product="ubiquitin-binding SDF ubiquitin ligase complex + subunit MET30" + /protein_id="NP_012218.1" + /db_xref="GeneID:854765" + /db_xref="SGD:S000001308" + /translation="MRRERQRMMSFEDKDKDDLDNSNSNNSSEMTDTAMMPPLKRLLI + TGSSDDLAQGSSGKKKMTMATRSPSSSPDLATNDSGTRVQPLPEYNFTKFCYRHNPDI + QFSPTHTACYKQDLKRTQEINANIAKLPLQEQSDIHHIISKYSNSNDKIRKLILDGIL + STSCFPQLSYISSLVTHMIKIDFISILPQELSLKILSYLDCQSLCNATRVCRKWQKLA + DDDRVWYHMCEQHIDRKCPNCGWGLPLLHMKRARIQQNSTGSSSNADIQTQTTRPWKV + IYRERFKVESNWRKGHCRIQEFKGHMDGVLTLQFNYRLLFTGSYDSTIGIWDLFTGKL + IRRLSGHSDGVKTLYFDDRKLITGSLDKTIRVWNYITGECISTYRGHSDSVLSVDSYQ + KVIVSGSADKTVKVWHVESRTCYTLRGHTEWVNCVKLHPKSFSCFSCSDDTTIRMWDI + RTNSCLKVFRGHVGQVQKIIPLTIKDVENLATDNTSDGSSPQDDPTMTDGADESDTPS + NEQETVLDENIPYPTHLLSCGLDNTIKLWDVKTGKCIRTQFGHVEGVWDIAADNFRII + SGSHDGSIKVWDLQSGKCMHTFNGRRLQRETQHTQTQSLGDKVAPIACVCIGDSECFS + GDEFGCVKMYKFDLND" + gene <271161..>272777 + /gene="PIG2" + /locus_tag="YIL045W" + /db_xref="GeneID:854766" + mRNA <271161..>272777 + /gene="PIG2" + /locus_tag="YIL045W" + /product="putative protein phosphatase regulator PIG2" + /transcript_id="NM_001179395.3" + /db_xref="GeneID:854766" + CDS 271161..272777 + /gene="PIG2" + /locus_tag="YIL045W" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:physical interaction:GO:0005979 + regulation of glycogen biosynthetic process + [PMID:9046081]" + /note="Putative type-1 protein phosphatase targeting + subunit; tethers Glc7p type-1 protein phosphatase to Gsy2p + glycogen synthase; PIG2 has a paralog, GIP2, that arose + from the whole genome duplication" + /codon_start=1 + /product="putative protein phosphatase regulator PIG2" + /protein_id="NP_012219.3" + /db_xref="GeneID:854766" + /db_xref="SGD:S000001307" + /translation="MATTTQPQNILMDEPLNLPNNSAHNNNYGNINANIRTFAGMSMH + MHPARLNSLEFLHKPRRLSNVKLHRLPQDELQRNTDMNKGMYFNGKQVHAHHPFINSG + ANFNAHHQDVSKLGEEEDEISPLSHDNFQYESEENGNPSPPIYKKSGELVKSSLKRRS + KSLPITPKSIFNKTGSKSKHVNLDHVDTRLLQRSKSVHFDRVLPIKLFNENEKPIDVG + KQMVQQDVLNFKHKPLTRLSALNGGSDSVPIEDLLSENNQNEYGDTWLQNPKGVFLFG + TNSNNRRNKKKKFKLSDDDSDIENDNDSDDAINRLVRQQDKDQAHLAHGLKNLLINDD + DDYLETRTNSAKSGANLFIGNSKRIVGLYNKNFPILSDRNRKSLKLNIFLNLSRGRPV + FLQEITLLTGFHNMVIIGKVFVKNIYFDKKIIVRYTWDAWRTFHESECVYFSNANGIL + PGSNMDIFKFSIDDIHNPNDKDSNISQLEFCIQYLTWGVDRSRKEYWDNNDSANYKID + VVTNETRTGPTTDVNDNYEMKHSLFRNPFH" + gene complement(<272950..>273846) + /gene="AGE2" + /locus_tag="YIL044C" + /gene_synonym="SAT2" + /db_xref="GeneID:854767" + mRNA complement(<272950..>273846) + /gene="AGE2" + /locus_tag="YIL044C" + /gene_synonym="SAT2" + /product="GTPase-activating protein AGE2" + /transcript_id="NM_001179394.3" + /db_xref="GeneID:854767" + CDS complement(272950..273846) + /gene="AGE2" + /locus_tag="YIL044C" + /gene_synonym="SAT2" + /experiment="EXISTENCE:direct assay:GO:0005096 GTPase + activator activity [PMID:12627398]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0030136 + clathrin-coated vesicle [PMID:14562095]" + /experiment="EXISTENCE:genetic interaction:GO:0006888 + endoplasmic reticulum to Golgi vesicle-mediated transport + [PMID:9677411]" + /experiment="EXISTENCE:genetic interaction:GO:0006891 + intra-Golgi vesicle-mediated transport [PMID:9677411]" + /note="ADP-ribosylation factor (ARF) GTPase activating + protein (GAP) effector; involved in Trans-Golgi-Network + (TGN) transport; contains C2C2H2 cysteine/histidine motif" + /codon_start=1 + /product="GTPase-activating protein AGE2" + /protein_id="NP_012220.3" + /db_xref="GeneID:854767" + /db_xref="SGD:S000001306" + /translation="MSTSVPVKKALSALLRDPGNSHCADCKAQLHPRWASWSLGVFIC + IKCAGIHRSLGTHISKVKSVDLDTWKEEHLVKLIQFKNNLRANSYYEATLADELKQRK + ITDTSSLQNFIKNKYEYKKWIGDLSSIEGLNDSTEPVLHKPSANHSLPASNARLDQSS + NSLQKTQTQPPSHLLSTSRSNTSLLNLQVSSLSKTTSNTSVTSSATSIGAANTKTGNR + VGEFGQRNDLKKSILSLYSKPSAQTQSQNSFFTSTTPQPCNTPSPFVNTGITATNNNS + MNSNSSSNISLDDNELFKNVWS" + gene complement(<274072..>274926) + /gene="CBR1" + /locus_tag="YIL043C" + /gene_synonym="CBR5" + /db_xref="GeneID:854768" + mRNA complement(<274072..>274926) + /gene="CBR1" + /locus_tag="YIL043C" + /gene_synonym="CBR5" + /product="cytochrome-b5 reductase" + /transcript_id="NM_001179393.1" + /db_xref="GeneID:854768" + CDS complement(274072..274926) + /gene="CBR1" + /locus_tag="YIL043C" + /gene_synonym="CBR5" + /EC_number="1.6.2.2" + /experiment="EXISTENCE:direct assay:GO:0004128 + cytochrome-b5 reductase activity, acting on NAD(P)H + [PMID:14930|PMID:27694803]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane [PMID:16407407]" + /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA + wobble uridine modification [PMID:27694803]" + /note="Cytochrome b reductase and NADH-dependent reductase + for Dph3p; required for diphthamide synthesis and tRNA + wobble uridine modification; also detected in + mitochondria; mutation in conserved NADH binding domain of + the human ortholog results in type I methemoglobinemia" + /codon_start=1 + /product="cytochrome-b5 reductase" + /protein_id="NP_012221.2" + /db_xref="GeneID:854768" + /db_xref="SGD:S000001305" + /translation="MAIDAQKLVVVIVIVVVPLLFKFIIGPKTKPVLDPKRNDFQSFP + LVEKTILTHNTSMYKFGLPHADDVLGLPIGQHIVIKANINGKDITRSYTPTSLDGDTK + GNFELLVKSYPTGNVSKMIGELKIGDSIQIKGPRGNYHYERNCRSHLGMIAGGTGIAP + MYQIMKAIAMDPHDTTKVSLVFGNVHEEDILLKKELEALVAMKPSQFKIVYYLDSPDR + EDWTGGVGYITKDVIKEHLPAATMDNVQILICGPPAMVASVRRSTVDLGFRRSKPLSK + MEDQVFVF" + gene complement(<275108..>276292) + /gene="PKP1" + /locus_tag="YIL042C" + /db_xref="GeneID:854769" + mRNA complement(<275108..>276292) + /gene="PKP1" + /locus_tag="YIL042C" + /product="protein kinase PKP1" + /transcript_id="NM_001179392.1" + /db_xref="GeneID:854769" + CDS complement(275108..276292) + /gene="PKP1" + /locus_tag="YIL042C" + /EC_number="2.7.11.2" + /experiment="EXISTENCE:direct assay:GO:0004672 protein + kinase activity [PMID:17918780]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:16643908|PMID:16823961|PMID:17918780|PMID:24769239]" + /experiment="EXISTENCE:mutant phenotype:GO:0004740 + pyruvate dehydrogenase (acetyl-transferring) kinase + activity [PMID:18180296|PMID:16643908]" + /experiment="EXISTENCE:mutant phenotype:GO:0065003 + protein-containing complex assembly [PMID:16643908]" + /experiment="EXISTENCE:mutant phenotype:GO:1901524 + regulation of mitophagy [PMID:31548421]" + /note="Mitochondrial protein kinase; involved in negative + regulation of pyruvate dehydrogenase complex activity by + phosphorylating the ser-133 residue of the Pda1p subunit; + acts in concert with kinase Pkp2p and phosphatases Ptc5p + and Ptc6p" + /codon_start=1 + /product="protein kinase PKP1" + /protein_id="NP_012222.1" + /db_xref="GeneID:854769" + /db_xref="SGD:S000001304" + /translation="MWKIMRSWKCGGMRWAHRQRPSHELLSQLSFDQHYKIRSNIELL + IQDYASKPIAPLNYEYFLQYRPPLTKKEEYMLTIKTINLLLSLTCKRLNAIQRLPYNA + VINPHIERTNSLYLKSLQTLLSIAYPYELHNPPKIQAKFTELLDDHEDAIVVLAKGLQ + EIQSCYPKFQISQFLNFHLKERITMKLLVTHYLSLMAQNKGDTNKRMIGILHRDLPIA + QLIKHVSDYVNDICFVKFNTQRTPVLIHPPSQDITFTCIPPILEYIMTEVFKNAFEAQ + IALGKEHMPIEINLLKPDDDELYLRIRDHGGGITPEVEALMFNYSYSTHTQQSADSES + TDLPGEQINNVSGMGFGLPMCKTYLELFGGKIDVQSLLGWGTDVYIKLKGPSKTALLS + KK" + gene <276525..>277505 + /gene="GVP36" + /locus_tag="YIL041W" + /db_xref="GeneID:854770" + mRNA <276525..>277505 + /gene="GVP36" + /locus_tag="YIL041W" + /product="Gvp36p" + /transcript_id="NM_001179391.3" + /db_xref="GeneID:854770" + CDS 276525..277505 + /gene="GVP36" + /locus_tag="YIL041W" + /experiment="EXISTENCE:direct assay:GO:0000139 Golgi + membrane [PMID:16107716]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0006897 + endocytosis [PMID:18156177]" + /experiment="EXISTENCE:mutant phenotype:GO:0007033 vacuole + organization [PMID:18156177]" + /experiment="EXISTENCE:mutant phenotype:GO:0030950 + establishment or maintenance of actin cytoskeleton + polarity [PMID:18156177]" + /note="BAR domain protein that localizes to early and late + Golgi vesicles; required for adaptation to varying + nutrient concentrations, fluid-phase endocytosis, + polarization of the actin cytoskeleton, and vacuole + biogenesis" + /codon_start=1 + /product="Gvp36p" + /protein_id="NP_012223.3" + /db_xref="GeneID:854770" + /db_xref="SGD:S000001303" + /translation="MSFNAFASSLSKKLQEISTSVSEKTQELPSLAQSTQRMVQERLG + QVTDISQLPREYTELEDKVDTIKLIYNHFLGVTAIYENGSYDYPKYINESVNEFSRSV + ASKLTELTHATSASEAQNILVAPGPIKEPKTLNYALSKVALNSSECLNKMFPTEEQPL + ASALLQFSDVQAKIAQARIQQDTLIQTKFNKNLRERLSFEIGKADKCRKDVHSMRLRY + DVARTNLANNKKPEKEASLRVQMETLEDQFAQVTEDATVCLQEVISHANFSEDLKELA + KAQAEYFETSAGLMKEFLSNSFAEEPEAKPEVAEEEKPQTAISMNDEDDA" + gene <277723..>278139 + /gene="APQ12" + /locus_tag="YIL040W" + /db_xref="GeneID:854771" + mRNA <277723..>278139 + /gene="APQ12" + /locus_tag="YIL040W" + /product="Apq12p" + /transcript_id="NM_001179390.1" + /db_xref="GeneID:854771" + CDS 277723..278139 + /gene="APQ12" + /locus_tag="YIL040W" + /experiment="EXISTENCE:direct assay:GO:0005635 nuclear + envelope [PMID:15273328|PMID:26432634]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum + [PMID:14562095|PMID:15273328|PMID:26432634|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0016020 membrane + [PMID:17724120]" + /experiment="EXISTENCE:genetic interaction:GO:0055088 + lipid homeostasis [PMID:20016074|PMID:26432634]" + /experiment="EXISTENCE:mutant phenotype:GO:0006998 nuclear + envelope organization [PMID:17724120|PMID:20016074]" + /experiment="EXISTENCE:mutant phenotype:GO:0055088 lipid + homeostasis [PMID:20016074|PMID:26432634]" + /note="Nuclear envelope/ER integral membrane protein; + interacts and functions with Brr6p and Brl1p in lipid + homeostasis; mutants are defective in nuclear pore complex + biogenesis, nuclear envelope morphology, mRNA export from + the nucleus and are sensitive to sterol biosynthesis + inhibitors and membrane fluidizing agents; exhibits + synthetic lethal genetic interactions with genes involved + in lipid metabolism" + /codon_start=1 + /product="Apq12p" + /protein_id="NP_012224.1" + /db_xref="GeneID:854771" + /db_xref="SGD:S000001302" + /translation="MDATQPQYELSVVTQCLKSAIDVIQWLIPTITKFSQSHPLVFQL + LFIFFTFYVFYKLLMNFITLVKRFLYLTLVVTCIGIYMRGSQQFLTVDLLNFYNFVMS + NRYYAFKIYTLFINALEREINTVYHLAQMKMEQLLK" + gene <278426..>279847 + /gene="TED1" + /locus_tag="YIL039W" + /db_xref="GeneID:854772" + mRNA <278426..>279847 + /gene="TED1" + /locus_tag="YIL039W" + /product="Ted1p" + /transcript_id="NM_001179389.1" + /db_xref="GeneID:854772" + CDS 278426..279847 + /gene="TED1" + /locus_tag="YIL039W" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:14562095|PMID:26928762]" + /experiment="EXISTENCE:genetic interaction:GO:0006888 + endoplasmic reticulum to Golgi vesicle-mediated transport + [PMID:17989219]" + /experiment="EXISTENCE:mutant phenotype:GO:0006888 + endoplasmic reticulum to Golgi vesicle-mediated transport + [PMID:17989219]" + /note="GPI-glycan remodelase; conserved phosphoesterase + domain-containing protein; acts together with + Emp24p/Erv25p in cargo exit from the ER; functional + ortholog of mammalian GPI-glycan remodelase PGAP5; + deletion confers sensitivity to + 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO)" + /codon_start=1 + /product="Ted1p" + /protein_id="NP_012225.1" + /db_xref="GeneID:854772" + /db_xref="SGD:S000001301" + /translation="MLRCAVKKFAYFATFLTIVANIYIYTYPSFHPEQCSWNCSNKNA + PLQKDLTFVDKVKNYFSDVREQWHGSHASAGNDEDIHILAFGDPQIKGIWPKTPYVSR + LDTYGNDYYLGHIYDMMQQRLKPQVVTVMGDLFSSQWIGDSEFHNRTKRYISRIFKRD + PTSIENIKQQNLDEKGQYKANWPEWGDRFNEILDNVKENEADNQELSFGFGYENIHSW + NPDLEDFLIINITGNHDVGYSGDATYQHMTRFHDLFGKDNYWIEYETNTTHPWRIVVL + NDLLLEGPALQPEFVEATWIFLNQLNERKFNGSTVLLTHVPFYKREGLCVDGPDTRYY + PDAHAPESYKSGLLRSQNHLSESVSNQVLNMIFENGKPGIILTGHDHEGCETVYNKKS + TSTWEATKNIESDVFVKEITVKSMMGEFNGNTGLVTGHFNTDSMTWEWTFSLCPFAIQ + HVWWFAKVSLLVTIFTWSSLLFV" + gene complement(<280142..>282652) + /gene="NOT3" + /locus_tag="YIL038C" + /db_xref="GeneID:854773" + mRNA complement(<280142..>282652) + /gene="NOT3" + /locus_tag="YIL038C" + /product="CCR4-NOT core subunit NOT3" + /transcript_id="NM_001179388.3" + /db_xref="GeneID:854773" + CDS complement(280142..282652) + /gene="NOT3" + /locus_tag="YIL038C" + /experiment="EXISTENCE:direct assay:GO:0000289 + nuclear-transcribed mRNA poly(A) tail shortening + [PMID:11889048]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11889048]" + /experiment="EXISTENCE:direct assay:GO:0032968 positive + regulation of transcription elongation by RNA polymerase + II [PMID:21406554]" + /experiment="EXISTENCE:mutant phenotype:GO:0000290 + deadenylation-dependent decapping of nuclear-transcribed + mRNA [PMID:26952104]" + /experiment="EXISTENCE:mutant phenotype:GO:0016567 protein + ubiquitination [PMID:16926149]" + /experiment="EXISTENCE:physical interaction:GO:0005515 + protein binding [PMID:26952104]" + /experiment="EXISTENCE:physical interaction:GO:0030015 + CCR4-NOT core complex [PMID:10490603]" + /note="Component of the CCR4-NOT core complex, involved in + mRNA decapping; involved in transcription initiation and + elongation and in mRNA degradation; conserved lysine in + human homolog of Not3p and Not5p is mutated in cancers" + /codon_start=1 + /product="CCR4-NOT core subunit NOT3" + /protein_id="NP_012226.3" + /db_xref="GeneID:854773" + /db_xref="SGD:S000001300" + /translation="MAHRKLQQEVDRVFKKINEGLEIFNSYYERHESCTNNPSQKDKL + ESDLKREVKKLQRLREQIKSWQSSPDIKDKDSLLDYRRSVEIAMEKYKAVEKASKEKA + YSNISLKKSETLDPQERERRDISEYLSQMIDELERQYDSLQVEIDKLLLLNKKKKTSS + TTNDEKKEQYKRFQARYRWHQQQMELALRLLANEELDPQDVKNVQDDINYFVESNQDP + DFVEDETIYDGLNLQSNEAIAHEVAQYFASQNAEDNNTSDANESLQDISKLSKKEQRK + LEREAKKAAKLAAKNATGAAIPVAGPSSTPSPVIPVADASKETERSPSSSPIHNATKP + EEAVKTSIKSPRSSADNLLPSLQKSPSSATPETPTNVHTHIHQTPNGITGATTLKPAT + LPAKPAGELKWAVAASQAVEKDRKVTSASSTISNTSTKTPTTAAATTTSSNANSRIGS + ALNTPKLSTSSLSLQPDNTGASSSAATAAAVLAAGAAAVHQNNQAFYRNMSSSHHPLV + SLATNPKSEHEVATTVNQNGPENTTKKVMEQKEEESPEERNKLQVPTFGVFDDDFESD + RDSETEPEEEEQPSTPKYLSLEQREAKTNEIKKEFVSDFETLLLPSGVQEFIMSSELY + NSQIESKITYKRSRDMCEISRLVEVPQGVNPPSPLDAFRSTQQWDVMRCSLRDIIIGS + ERLKEDSSSIYAKILENFRTLEMFSLFYNYYFAITPLEREIAYKILNERDWKVSKDGT + MWFLRQGEVKFFNEICEVGDYKIFKLDDWTVIDKINFRLDYSFLQPPVDTASEVRDVS + VDNNNVNDQSNVTLEQQKQEISHGKQLLKQLKQGKISV" + gene complement(<283029..>284999) + /gene="PRM2" + /locus_tag="YIL037C" + /db_xref="GeneID:854774" + mRNA complement(<283029..>284999) + /gene="PRM2" + /locus_tag="YIL037C" + /product="pheromone-regulated protein PRM2" + /transcript_id="NM_001179387.3" + /db_xref="GeneID:854774" + CDS complement(283029..284999) + /gene="PRM2" + /locus_tag="YIL037C" + /experiment="EXISTENCE:mutant phenotype:GO:0000742 + karyogamy involved in conjugation with cellular fusion + [PMID:17101777]" + /note="Pheromone-regulated protein; predicted to have 4 + transmembrane segments and a coiled coil domain; regulated + by Ste12p; required for efficient nuclear fusion" + /codon_start=1 + /product="pheromone-regulated protein PRM2" + /protein_id="NP_012227.3" + /db_xref="GeneID:854774" + /db_xref="SGD:S000001299" + /translation="MNNVHIIKPLSLPQRFFSCIFHPLLLIFFTSVILTIWGSFSVID + ITMAKMSHAQVKRNDTVSTFASISTATATATTTATTTATMTAVTTQHAIYSANSYSLN + KTFIDNTIDQYFESKLRSIESTVGTDMQEKFKSYTDDILDNKQKLINDQISLETELIK + EVLEVNNTIFNELLTKSQLINDTWNEISEDAMTIDKDSISQMASNLLLNYSMFDSIFG + NYSRKLKSLQNFNGTITDFSTQLDTSSTLSLNFLRNSTDWLQLKRNFTANLQNEISIL + SGGSTEVTSSTSIIKRSLKTNSEENSVLSAVKNHVFRKCKRMTIIFTVMYFAFVILLM + AIERILFQLENQQVNLVMSQINGLTGQTNFTKYNKVLKSLITTLNLSTLYPIPYQLTK + LINQKIFKREPEKIDDKKVKKSKLFYCNWWIISNGAHLWLFGFLMLLIHWQIVTRLTN + FEVPSLPTFHKRAGPSLYKREVWTDGNITTTIEGFINDSVSLLCENFQMEVNEKFITA + NLSLQTDPNLKVQSTDILNLWVNDTNTQFEKYLNESSQNWQGIDLQVEPLLGSDSINE + FLGQYFLPTYEVTNTNSSFALDIQKYGIINRGINITNASVAALSSLSKRQIKDKEQKQ + TYFLHTVYKWGLLAVCLTILFHHMLIFIILKL" + gene <285666..>287429 + /gene="CST6" + /locus_tag="YIL036W" + /gene_synonym="ACA2; SHF1" + /db_xref="GeneID:854775" + mRNA <285666..>287429 + /gene="CST6" + /locus_tag="YIL036W" + /gene_synonym="ACA2; SHF1" + /product="Cst6p" + /transcript_id="NM_001179386.1" + /db_xref="GeneID:854775" + CDS 285666..287429 + /gene="CST6" + /locus_tag="YIL036W" + /gene_synonym="ACA2; SHF1" + /experiment="EXISTENCE:direct assay:GO:0001228 DNA-binding + transcription activator activity, RNA polymerase + II-specific [PMID:10825197]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0006357 regulation + of transcription by RNA polymerase II [PMID:27143390]" + /experiment="EXISTENCE:direct assay:GO:0043565 + sequence-specific DNA binding + [PMID:10825197|PMID:27143390]" + /experiment="EXISTENCE:direct assay:GO:0045944 positive + regulation of transcription by RNA polymerase II + [PMID:10825197]" + /experiment="EXISTENCE:mutant phenotype:GO:0061429 + positive regulation of transcription from RNA polymerase + II promoter by oleic acid [PMID:20395639]" + /experiment="EXISTENCE:mutant phenotype:GO:0071244 + cellular response to carbon dioxide [PMID:22253597]" + /experiment="EXISTENCE:mutant phenotype:GO:0071400 + cellular response to oleic acid [PMID:20395639]" + /note="Basic leucine zipper (bZIP) transcription factor + from ATF/CREB family involved in stress-responsive + regulatory network; mediates transcriptional activation of + NCE103 in response to low CO2 levels; proposed to be a + regulator of oleate responsive genes; involved in + utilization of non-optimal carbon sources and chromosome + stability; relocalizes to the cytosol in response to + hypoxia; CST6 has a paralog, ACA1, that arose from the + whole genome duplication" + /codon_start=1 + /product="Cst6p" + /protein_id="NP_012228.1" + /db_xref="GeneID:854775" + /db_xref="SGD:S000001298" + /translation="MFTGQEYHSVDSNSNKQKDNNKRGIDDTSKILNNKIPHSVSDTS + AAATTTSTMNNSALSRSLDPTDINYSTNMAGVVDQIHDYTTSNRNSLTPQYSIAAGNV + NSHDRVVKPSANSNYQQAAYLRQQQQQDQRQQSPSMKTEEESQLYGDILMNSGVVQDM + HQNLATHTNLSQLSSTRKSAPNDSTTAPTNASNIANTASVNKQMYFMNMNMNNNPHAL + NDPSILETLSPFFQPFGVDVAHLPMTNPPIFQSSLPGCDEPIRRRRISISNGQISQLG + EDIETLENLHNTQPPPMPNFHNYNGLSQTRNVSNKPVFNQAVPVSSIPQYNAKKVINP + TKDSALGDQSVIYSKSQQRNFVNAPSKNTPAESISDLEGMTTFAPTTGGENRGKSALR + ESHSNPSFTPKSQGSHLNLAANTQGNPIPGTTAWKRARLLERNRIAASKCRQRKKVAQ + LQLQKEFNEIKDENRILLKKLNYYEKLISKFKKFSKIHLREHEKLNKDSDNNVNGTNS + SNKNESMTVDSLKIIEELLMIDSDVTEVDKDTGKIIAIKHEPYSQRFGSDTDDDDIDL + KPVEGGKDPDNQSLPNSEKIK" + gene complement(<287790..>288908) + /gene="CKA1" + /locus_tag="YIL035C" + /db_xref="GeneID:854776" + mRNA complement(<287790..>288908) + /gene="CKA1" + /locus_tag="YIL035C" + /product="casein kinase 2 catalytic subunit CKA1" + /transcript_id="NM_001179385.1" + /db_xref="GeneID:854776" + CDS complement(287790..288908) + /gene="CKA1" + /locus_tag="YIL035C" + /EC_number="2.7.11.1" + /experiment="EXISTENCE:direct assay:GO:0004672 protein + kinase activity [PMID:16319894]" + /experiment="EXISTENCE:direct assay:GO:0004674 protein + serine/threonine kinase activity [PMID:8226802]" + /experiment="EXISTENCE:direct assay:GO:0005956 protein + kinase CK2 complex [PMID:8135547]" + /experiment="EXISTENCE:direct assay:GO:0006356 regulation + of transcription by RNA polymerase I [PMID:11551505]" + /experiment="EXISTENCE:direct assay:GO:0006359 regulation + of transcription by RNA polymerase III [PMID:11551505]" + /experiment="EXISTENCE:direct assay:GO:0006974 DNA damage + response [PMID:11551505]" + /experiment="EXISTENCE:direct assay:GO:0034456 UTP-C + complex [PMID:17515605]" + /experiment="EXISTENCE:genetic interaction:GO:0007535 + donor selection [PMID:22496671]" + /note="Alpha catalytic subunit of casein kinase 2 (CK2); a + Ser/Thr protein kinase with roles in cell growth and + proliferation; CK2, comprised of CKA1, CKA2, CKB1 and + CKB2, has many substrates including transcription factors + and all RNA polymerases; regulates Fkh1p-mediated donor + preference during mating-type switching" + /codon_start=1 + /product="casein kinase 2 catalytic subunit CKA1" + /protein_id="NP_012229.1" + /db_xref="GeneID:854776" + /db_xref="SGD:S000001297" + /translation="MKCRVWSEARVYTNINKQRTEEYWDYENTVIDWSTNTKDYEIEN + KVGRGKYSEVFQGVKLDSKVKIVIKMLKPVKKKKIKREIKILTDLSNEKVPPTTLPFQ + KDQYYTNQKEDVLKFIRPYIFDQPHNGHANIIHLFDIIKDPISKTPALVFEYVDNVDF + RILYPKLTDLEIRFYMFELLKALDYCHSMGIMHRDVKPHNVMIDHKNKKLRLIDWGLA + EFYHVNMEYNVRVASRFFKGPELLVDYRMYDYSLDLWSFGTMLASMIFKREPFFHGTS + NTDQLVKIVKVLGTSDFEKYLLKYEITLPREFYDMDQYIRKPWHRFINDGNKHLSGND + EIIDLIDNLLRYDHQERLTAKEAMGHPWFAPIREQIEK" + gene complement(<289226..>290089) + /gene="CAP2" + /locus_tag="YIL034C" + /db_xref="GeneID:854777" + mRNA complement(<289226..>290089) + /gene="CAP2" + /locus_tag="YIL034C" + /product="F-actin-capping protein subunit beta" + /transcript_id="NM_001179384.3" + /db_xref="GeneID:854777" + CDS complement(289226..290089) + /gene="CAP2" + /locus_tag="YIL034C" + /experiment="EXISTENCE:direct assay:GO:0000131 incipient + cellular bud site [PMID:1315784]" + /experiment="EXISTENCE:direct assay:GO:0000142 cellular + bud neck contractile ring [PMID:36729023]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0005934 cellular + bud tip [PMID:1315784|PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0008290 F-actin + capping protein complex [PMID:14769858]" + /experiment="EXISTENCE:direct assay:GO:0030479 actin + cortical patch [PMID:14769858]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:19053807]" + /experiment="EXISTENCE:direct assay:GO:0051016 barbed-end + actin filament capping [PMID:14769858|PMID:1315784]" + /experiment="EXISTENCE:mutant phenotype:GO:0008290 F-actin + capping protein complex [PMID:14769858]" + /experiment="EXISTENCE:mutant phenotype:GO:0030447 + filamentous growth [PMID:15645503]" + /experiment="EXISTENCE:mutant phenotype:GO:0051015 actin + filament binding [PMID:14769858]" + /note="Beta subunit of the capping protein heterodimer + (Cap1p and Cap2p); capping protein (CP) binds to the + barbed ends of actin filaments preventing further + polymerization; localized predominantly to cortical actin + patches and the cytokinetic contractile ring; protein + increases in abundance and relocalizes from bud neck to + plasma membrane upon DNA replication stress" + /codon_start=1 + /product="F-actin-capping protein subunit beta" + /protein_id="NP_012230.3" + /db_xref="GeneID:854777" + /db_xref="SGD:S000001296" + /translation="MSDAQFDAALDLLRRLNPTTLQENLNNLIELQPNLAQDLLSSVD + VPLSTQKDSADSNREYLCCDYNRDIDSFRSPWSNTYYPELSPKDLQDSPFPSAPLRKL + EILANDSFDVYRDLYYEGGISSVYLWDLNEEDFNGHDFAGVVLFKKNQSDHSNWDSIH + VFEVTTSPSSPDSFNYRVTTTIILHLDKTKTDQNSHMMLSGNLTRQTEKDIAIDMSRP + LDVIFTSHVANLGSLIEDIESQMRNLLETVYFEKTRDIFHQTKNAAIASSAEEANKDA + QAEVIRGLQSL" + gene complement(<290419..>291669) + /gene="BCY1" + /locus_tag="YIL033C" + /gene_synonym="SRA1" + /db_xref="GeneID:854778" + mRNA complement(<290419..>291669) + /gene="BCY1" + /locus_tag="YIL033C" + /gene_synonym="SRA1" + /product="cAMP-dependent protein kinase regulatory subunit + BCY1" + /transcript_id="NM_001179383.1" + /db_xref="GeneID:854778" + CDS complement(290419..291669) + /gene="BCY1" + /locus_tag="YIL033C" + /gene_synonym="SRA1" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:26403272]" + /experiment="EXISTENCE:direct assay:GO:0004862 + cAMP-dependent protein kinase inhibitor activity + [PMID:3037314]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:11134339|PMID:11914276|PMID:18417610|PMID:22842922|P + MID:3288487]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11134339|PMID:11914276|PMID:22842922]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:2831892]" + /experiment="EXISTENCE:direct assay:GO:0046580 negative + regulation of Ras protein signal transduction + [PMID:3037314]" + /experiment="EXISTENCE:genetic interaction:GO:0097271 + protein localization to bud neck [PMID:12782684]" + /experiment="EXISTENCE:mutant phenotype:GO:0004862 + cAMP-dependent protein kinase inhibitor activity + [PMID:6292221]" + /experiment="EXISTENCE:mutant phenotype:GO:0010603 + regulation of cytoplasmic mRNA processing body assembly + [PMID:21925385]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:26947009]" + /experiment="EXISTENCE:mutant phenotype:GO:0046580 + negative regulation of Ras protein signal transduction + [PMID:3037314]" + /note="Regulatory subunit of the cyclic AMP-dependent + protein kinase (PKA); PKA is a component of a signaling + pathway that controls a variety of cellular processes, + including metabolism, cell cycle, stress response, + stationary phase, and sporulation; regulator of meiotic + commitment" + /codon_start=1 + /product="cAMP-dependent protein kinase regulatory subunit + BCY1" + /protein_id="NP_012231.1" + /db_xref="GeneID:854778" + /db_xref="SGD:S000001295" + /translation="MVSSLPKESQAELQLFQNEINAANPSDFLQFSANYFNKRLEQQR + AFLKAREPEFKAKNIVLFPEPEESFSRPQSAQSQSRSRSSVMFKSPFVNEDPHSNVFK + SGFNLDPHEQDTHQQAQEEQQHTREKTSTPPLPMHFNAQRRTSVSGETLQPNNFDDWT + PDHYKEKSEQQLQRLEKSIRNNFLFNKLDSDSKRLVINCLEEKSVPKGATIIKQGDQG + DYFYVVEKGTVDFYVNDNKVNSSGPGSSFGELALMYNSPRAATVVATSDCLLWALDRL + TFRKILLGSSFKKRLMYDDLLKSMPVLKSLTTYDRAKLADALDTKIYQPGETIIREGD + QGENFYLIEYGAVDVSKKGQGVINKLKDHDYFGEVALLNDLPRQATVTATKRTKVATL + GKSGFQRLLGPAVDVLKLNDPTRH" + gene <292633..>295737 + /gene="ULP2" + /locus_tag="YIL031W" + /gene_synonym="SMT4" + /db_xref="GeneID:854780" + mRNA <292633..>295737 + /gene="ULP2" + /locus_tag="YIL031W" + /gene_synonym="SMT4" + /product="SUMO protease ULP2" + /transcript_id="NM_001179381.1" + /db_xref="GeneID:854780" + CDS 292633..295737 + /gene="ULP2" + /locus_tag="YIL031W" + /gene_synonym="SMT4" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:30575729]" + /experiment="EXISTENCE:direct assay:GO:0003711 + transcription elongation factor activity [PMID:31313851]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10713161]" + /experiment="EXISTENCE:direct assay:GO:0008234 + cysteine-type peptidase activity [PMID:10713161]" + /experiment="EXISTENCE:direct assay:GO:0016926 protein + desumoylation [PMID:10713161]" + /experiment="EXISTENCE:direct assay:GO:0016929 deSUMOylase + activity [PMID:10713161]" + /experiment="EXISTENCE:mutant phenotype:GO:0006276 plasmid + maintenance [PMID:10713161|PMID:11333221]" + /experiment="EXISTENCE:mutant phenotype:GO:0007094 mitotic + spindle assembly checkpoint signaling [PMID:10713162]" + /experiment="EXISTENCE:mutant phenotype:GO:0016926 protein + desumoylation [PMID:10713161]" + /experiment="EXISTENCE:mutant phenotype:GO:0016929 + deSUMOylase activity [PMID:10713161]" + /experiment="EXISTENCE:mutant phenotype:GO:0030261 + chromosome condensation [PMID:11333221]" + /note="Peptidase that deconjugates Smt3/SUMO-1 peptides + from proteins; plays a role in chromosome cohesion at + centromeric regions and recovery from checkpoint arrest + induced by DNA damage or DNA replication defects; + potential Cdc28p substrate; human homolog PML implicated + in promyelocytic leukemia can partially complement yeast + null mutant" + /codon_start=1 + /product="SUMO protease ULP2" + /protein_id="NP_012233.1" + /db_xref="GeneID:854780" + /db_xref="SGD:S000001293" + /translation="MSARKRKFNSLKPLDTLNSSRASSPRSSASLPPKRYNTFRKDPK + IVDHLNNASTKDFLPVLSMNSESKRQIELSDNDVDNNDEGEGVNSGCSDQDFEPLQSS + PLKRHSSLKSTSNGLLFQMSNNLGNGSPEPAVASTSPNGSIISTKLNLNGQFSCVDSK + TLRIYRHKAPCIMTFVSDHNHPKFSLYFQQSVIYNSQVNLLDDVELIILDKKNSFMAI + ILKDLKKVKMILDVNNSSININTNILIWSTASSASNKKIKSIKRFLLMSYSSSIKVEI + LDHKEQILERLKHLIHPISSSSPSLNMERAINSTKNAFDSLRLKKTKLSTNDDESPQI + HTHFLSNKPHGLQSLTKRTRIASLGKKEHSISVPKSNISPSDFYNTNGTETLQSHAVS + QLRRSNRFKDVSDPANSNSNSEFDDATTEFETPELFKPSLCYKFNDGSSYTITNQDFK + CLFNKDWVNDSILDFFTKFYIESSIEKSIIKREQVHLMSSFFYTKLISNPADYYSNVK + KWVNNTDLFSKKYVVIPINISYHWFSCIITNLDAILDFHQNKDKNDAINSDEISINNP + LVNILTFDSLRQTHSREIDPIKEFLISYALDKYSIQLDKTQIKMKTCPVPQQPNMSDC + GVHVILNIRKFFENPVETIDVWKNSKIKSKHFTAKMINKYFDKNERNSARKNLRHTLK + LLQLNYISYLKKENLYEEVMQMEEKKSTNINNNENYDDDDEEIQIIENIDQSSKDNNA + QLTSEPPCSRSSSISTTEREPTELHNSVVRQPTGEIITDNEDPVRAASPETASVSPPI + RHNILKSSSPFISESANETEQEEFTSPYFGRPSLKTRAKQFEGVSSPIKNDQALSSTH + DIMMPSPKPKRIYPSKKIPQLSSHVQSLSTDSMERQSSPNNTNIVISDTEQDSRLGVN + SESKNTSGIVNRDDSDVNLIGSSLPNVAEKNHDNTQESNGNNDSLGKILQNVDKELNE + KLVDIDDVAFSSPTRGIPRTSATSKGSNAQLLSNYGDENNQSQDSVWDEGRDNPILLE + DEDP" + gene complement(<296050..>300009) + /gene="SSM4" + /locus_tag="YIL030C" + /gene_synonym="DOA10; KIS3" + /db_xref="GeneID:854781" + mRNA complement(<296050..>300009) + /gene="SSM4" + /locus_tag="YIL030C" + /gene_synonym="DOA10; KIS3" + /product="E3 ubiquitin-protein ligase SSM4" + /transcript_id="NM_001179380.3" + /db_xref="GeneID:854781" + CDS complement(296050..300009) + /gene="SSM4" + /locus_tag="YIL030C" + /gene_synonym="DOA10; KIS3" + /EC_number="2.3.2.27" + /experiment="EXISTENCE:direct assay:GO:0000837 Doa10p + ubiquitin ligase complex [PMID:16873066]" + /experiment="EXISTENCE:direct assay:GO:0004842 + ubiquitin-protein transferase activity [PMID:11641273]" + /experiment="EXISTENCE:direct assay:GO:0005635 nuclear + envelope [PMID:11641273]" + /experiment="EXISTENCE:direct assay:GO:0005637 nuclear + inner membrane [PMID:17051211]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:11641273]" + /experiment="EXISTENCE:direct assay:GO:0030970 retrograde + protein transport, ER to cytosol [PMID:32588820]" + /experiment="EXISTENCE:direct assay:GO:0061630 ubiquitin + protein ligase activity [PMID:25918226]" + /experiment="EXISTENCE:mutant phenotype:GO:0030433 + ubiquitin-dependent ERAD pathway + [PMID:11641273|PMID:15252059]" + /experiment="EXISTENCE:mutant phenotype:GO:0030970 + retrograde protein transport, ER to cytosol + [PMID:32588820]" + /note="Membrane-embedded ubiquitin-protein ligase and + retrotranslocase; ER and inner nuclear membrane localized + RING-CH domain E3 ligase involved in ER-associated protein + degradation (ERAD); aids Cdc48p in the extraction of + faulty membrane proteins; targets misfolded + cytosolic/nucleoplasmic domains of soluble and membrane + embedded proteins (ERAD-C) and Sbh2p, a transmembrane + domain-containing substrate (ERAD-M); C-terminal element, + conserved in human ortholog MARCH6, determines substrate + selectivity" + /codon_start=1 + /product="E3 ubiquitin-protein ligase SSM4" + /protein_id="NP_012234.3" + /db_xref="GeneID:854781" + /db_xref="SGD:S000001292" + /translation="MDVDSDVNVSRLRDELHKVANEETDTATFNDDAPSGATCRICRG + EATEDNPLFHPCKCRGSIKYMHESCLLEWVASKNIDISKPGADVKCDICHYPIQFKTI + YAENMPEKIPFSLLLSKSILTFFEKARLALTIGLAAVLYIIGVPLVWNMFGKLYTMML + DGSSPYPGDFLKSLIYGYDQSATPELTTRAIFYQLLQNHSFTSLQFIMIVILHIALYF + QYDMIVREDVFSKMVFHKIGPRLSPKDLKSRLKERFPMMDDRMVEYLAREMRAHDENR + QEQGHDRLNMPAAAADNNNNVINPRNDNVPPQDPNDHRNFENLRHVDELDHDEATEEH + ENNDSDNSLPSGDDSSRILPGSSSDNEEDEEAEGQQQQQQPEEEADYRDHIEPNPIDM + WANRRAQNEFDDLIAAQQNAINRPNAPVFIPPPAQNRAGNVDQDEQDFGAAVGVPPAQ + ANPDDQGQGPLVINLKLKLLNVIAYFIIAVVFTAIYLAISYLFPTFIGFGLLKIYFGI + FKVILRGLCHLYYLSGAHIAYNGLTKLVPKVDVAMSWISDHLIHDIIYLYNGYTENTM + KHSIFIRALPALTTYLTSVSIVCASSNLVSRGYGRENGMSNPTRRLIFQILFALKCTF + KVFTLFFIELAGFPILAGVMLDFSLFCPILASNSRMLWVPSICAIWPPFSLFVYWTIG + TLYMYWFAKYIGMIRKNIIRPGVLFFIRSPEDPNIKILHDSLIHPMSIQLSRLCLSMF + IYAIFIVLGFGFHTRIFFPFMLKSNLLSVPEAYKPTSIISWKFNTILLTLYFTKRILE + SSSYVKPLLERYWKTIFKLCSRKLRLSSFILGKDTPTERGHIVYRNLFYKYIAAKNAE + WSNQELFTKPKTLEQAEELFGQVRDVHAYFVPDGVLMRVPSSDIVSRNYVQTMFVPVT + KDDKLLKPLDLERIKERNKRAAGEFGYLDEQNTEYDQYYIVYVPPDFRLRYMTLLGLV + WLFASILMLGVTFISQALINFVCSFGFLPVVKLLLGERNKVYVAWKELSDISYSYLNI + YYVCVGSVCLSKIAKDILHFTEGQNTLDEHAVDENEVEEVEHDIPERDINNAPVNNIN + NVEEGQGIFMAIFNSIFDSMLVKYNLMVFIAIMIAVIRTMVSWVVLTDGILACYNYLT + IRVFGNSSYTIGNSKWFKYDESLLFVVWIISSMVNFGTGYKSLKLFFRNRNTSKLNFL + KTMALELFKQGFLHMVIYVLPIIILSLVFLRDVSTKQIIDISHGSRSFTLSLNESFPT + WTRMQDIYFGLLIALESFTFFFQATVLFIQWFKSTVQNVKDEVYTKGRALENLPDES" + gene complement(300228..300300) + /locus_tag="YNCI0007C" + /db_xref="GeneID:854782" + tRNA complement(300228..300300) + /locus_tag="YNCI0007C" + /product="tRNA-Lys" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:8915539]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:8915539]" + /experiment="EXISTENCE:mutant phenotype:GO:0030533 triplet + codon-amino acid adaptor activity [PMID:17560369]" + /experiment="EXISTENCE:mutant phenotype:GO:0032543 + mitochondrial translation [PMID:17560369]" + /note="Lysine tRNA (tRNA-Lys), predicted by tRNAscan-SE + analysis; a small portion is imported into mitochondria + via interaction with mt lysyl-tRNA synthetase Msk1p and is + necessary to decode AAG codons at high temperature, when + base modification of mt-encoded tRNA-Lys is reduced" + /db_xref="GeneID:854782" + /db_xref="SGD:S000006624" + repeat_region complement(300409..300727) + /note="Ty1 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007013" + gene complement(<300829..>301257) + /gene="EMA17" + /locus_tag="YIL029C" + /db_xref="GeneID:854783" + mRNA complement(<300829..>301257) + /gene="EMA17" + /locus_tag="YIL029C" + /product="Ema17p" + /transcript_id="NM_001179379.3" + /db_xref="GeneID:854783" + CDS complement(300829..301257) + /gene="EMA17" + /locus_tag="YIL029C" + /note="Protein involved in targeting mitochondrial + membrane protein precursors to mitochondrial translocation + system; deletion confers sensitivity to + 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO); + YIL029C has a paralog, YPR071W, that arose from a + single-locus duplication" + /codon_start=1 + /product="Ema17p" + /protein_id="NP_012235.3" + /db_xref="GeneID:854783" + /db_xref="SGD:S000001291" + /translation="MRLIFIAKMLQYSFLPFSPFNLLNFDNSISVSWFITYSVIVSIW + GFAVWIEGAYRNKINLQLPRCTKIKCSRYNTRIKSPKWFNCKNWMHFFLLYLFLTASN + LIVQLAYFSKEMCSQGINVPGTKKPGNRVYLSVIILMGNG" + gene complement(<303679..>304104) + /gene="EMC5" + /locus_tag="YIL027C" + /gene_synonym="KRE27" + /db_xref="GeneID:854785" + mRNA complement(<303679..>304104) + /gene="EMC5" + /locus_tag="YIL027C" + /gene_synonym="KRE27" + /product="Emc5p" + /transcript_id="NM_001179377.1" + /db_xref="GeneID:854785" + CDS complement(303679..304104) + /gene="EMC5" + /locus_tag="YIL027C" + /gene_synonym="KRE27" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:14562095|PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0072546 EMC complex + [PMID:19325107]" + /experiment="EXISTENCE:genetic interaction:GO:0034975 + protein folding in endoplasmic reticulum [PMID:19325107]" + /note="Member of conserved ER transmembrane complex; + required for efficient folding of proteins in the ER; null + mutant displays induction of the unfolded protein + response, and also shows K1 killer toxin resistance; + homologous to worm B0334.15/EMC-5, fly CG15168, human + MMGT" + /codon_start=1 + /product="Emc5p" + /protein_id="NP_012237.1" + /db_xref="GeneID:854785" + /db_xref="SGD:S000001289" + /translation="MSFVSKLLYTVSALVLFHSGFSSYEFHHLLKLNSLNNAQGAISK + LPKDIMYETYAGLILFVLAVFTSFEKLQYLPIESNDGKIISQGNYLKEIALNKATNVD + NLIGSNPNGEIIFTPSFVDVHMKRKICREWASNTVKKEK" + gene complement(<304477..>307929) + /gene="IRR1" + /locus_tag="YIL026C" + /gene_synonym="SCC3" + /db_xref="GeneID:854786" + mRNA complement(<304477..>307929) + /gene="IRR1" + /locus_tag="YIL026C" + /gene_synonym="SCC3" + /product="Irr1p" + /transcript_id="NM_001179376.1" + /db_xref="GeneID:854786" + CDS complement(304477..307929) + /gene="IRR1" + /locus_tag="YIL026C" + /gene_synonym="SCC3" + /experiment="EXISTENCE:direct assay:GO:0003682 chromatin + binding [PMID:9990856]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10028182|PMID:22932476|PMID:28077952]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:28077952]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:22932476]" + /experiment="EXISTENCE:direct assay:GO:0030892 mitotic + cohesin complex [PMID:9990856]" + /experiment="EXISTENCE:mutant phenotype:GO:0007064 mitotic + sister chromatid cohesion [PMID:9990856]" + /note="Subunit of the cohesin complex; which is required + for sister chromatid cohesion during mitosis and meiosis + and interacts with centromeres and chromosome arms; + relocalizes to the cytosol in response to hypoxia; + essential for viability" + /codon_start=1 + /product="Irr1p" + /protein_id="NP_012238.1" + /db_xref="GeneID:854786" + /db_xref="SGD:S000001288" + /translation="MTAVRRSTRIRTKSQVIEEDYDDEQNTSAQHVESDKITAKTQHE + EEEEQDTGESEESSSEDDYEDQDDDDYVDTATAKRKSRKRKPKSASNTSSKRQKKKPT + SAQKSAVSHAPAYHRSKKDQDQYLEIAKDFQPTELFDILSTSEDVSIEELLREWLETY + SENRDKFLQEFINLLLNCCGSVARVEDHDVHSNESSNETIGEIQLLFQRQKLHEFYLL + ISKENKKRKNFKMGPLYQNFAEFMTKLLEVANDLQLLYVESDEDDTQIVTGNLVLDLL + TWLSSFSVCKIRCFRYISTLTLYLFQDYLTQQAVNLEKNYLAKLSKQLSLEEKKKRPN + NKTLEKLESTIAETQGSKVVIDSIIDNIVKLCFVHRYKDVSDLIRSESMLHLSIWIKN + YPEYFLKVTFLKYFGWLLSDNSVSVRLQVTKILPHLIIQNHNSKSTDNSAIRQVFERF + KTKILEVAIRDVNLDVRIHSIQVLTEASSLGYLDDSEILIISSLMFDEEFDPFKTSSF + NKRSKFLSTVAKFLARVIKEKFDEFIKTHEDLPKEVDGLEVGPVVQVGIFIKILNDSL + IYHLKDCAEVDSRTKIRMLTQAAEFLSPYISTHLKTICNLLISDTESNELIQKLQNSA + NNNSDDEDVDDEELDITPLFPIDRNSTILYLNVFHGLCAGANNPKIQTKDSVKEIVLP + LFYDLLNAASIESADILCPLLESFITFSLDDWISIGYETELKKITDKTIKAFMDSTIG + NSKVDMKYDIFAKFIHHIHHFEKKELQEKFLNQIATLKIHLKKFLQEKMDPNNSRDDY + KDLTCSLYELYINKLTILGRDYPIEVDEELLQLFLNNFVSRIPIMFQDFDDSTAQEIN + FKMLVLLATWNLEKWREIIEKVRDYENSISKDLRSVWKPIAAIIGRLNTLVISLAATN + ETFENINSLFYLKWSACTSLMDIIVAIKIFELKLPADATTWRYSMSEQFPFYLHDNAS + KVLLKIFLYLESLFAKQVDVQLERVADEDANLNDLPETGFFENIETEFLLFTVKLKGL + MKLNILDERFASRVALNKEKLGPLFKKIVDDTIMENPEPNKKNIQKAKSNQTQREKAP + LQPNSERETDHANTENNDPDIPMTIDLEPIEESSQNNSELAPIEEHPTVVDAIDNSDE + ITQD" + gene complement(<308602..>309171) + /locus_tag="YIL024C" + /db_xref="GeneID:854788" + mRNA complement(<308602..>309171) + /locus_tag="YIL024C" + /product="uncharacterized protein" + /transcript_id="NM_001179374.3" + /db_xref="GeneID:854788" + CDS complement(308602..309171) + /locus_tag="YIL024C" + /note="hypothetical protein; non-essential gene; + expression directly regulated by the metabolic and meiotic + transcriptional regulator Ume6p" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012240.3" + /db_xref="GeneID:854788" + /db_xref="SGD:S000001286" + /translation="MSNFLLVIPEDVIKGCSKADKLVVTGEFDNWRHSDYVLQYDGST + QNYRVQIPRRKGQRSTMFKVVINDKKWVTLNYFDTVTDKSGYTNNILHFKDNEASQLM + DIPLSPHTRSNTAKGKPEDDSLNDYVNLSSHSDLSSTEEIVCWNSDMEDENMDATIQC + DFHQAFNSRKESLNGLMCIAKKVKTYWNK" + gene complement(<309386..>310426) + /gene="YKE4" + /locus_tag="YIL023C" + /db_xref="GeneID:854789" + mRNA complement(<309386..>310426) + /gene="YKE4" + /locus_tag="YIL023C" + /product="Zn(2+) transporter YKE4" + /transcript_id="NM_001179373.1" + /db_xref="GeneID:854789" + CDS complement(309386..310426) + /gene="YKE4" + /locus_tag="YIL023C" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:16760462|PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0005385 zinc + ion transmembrane transporter activity [PMID:16760462]" + /experiment="EXISTENCE:mutant phenotype:GO:0006829 zinc + ion transport [PMID:16760462]" + /note="Zinc transporter; localizes to the ER; null mutant + is sensitive to calcofluor white, leads to zinc + accumulation in cytosol; ortholog of the mouse KE4 and + member of the ZIP (ZRT, IRT-like Protein) family" + /codon_start=1 + /product="Zn(2+) transporter YKE4" + /protein_id="NP_012241.1" + /db_xref="GeneID:854789" + /db_xref="SGD:S000001285" + /translation="MKASHICSYLLSIAPLVVSHGVHHNRDHGHEANHESKQSFLILK + QESIFYSLVCFLQNHLFVLGPRYNAIVAILIIQLMPCLFVLFVPGLRKNDRASLTLSL + LVSFSLGTLLGDILLHVIPESLSGVTDVTMVGGAIFLGFISFLTLDKTMRILSGTSND + DGSIHSHSHSHTPQQTAEKKAGFNMSAYLNVISGIAHHITDGIALATSFYSSTQVGIM + TSIAVTFHEIPHELGDFAILLSSGFTFPQAIRAQAVTAFGAVVGTSIGCWMNEIGNNS + HKATSSSANASELMLPFTAGGLIYIATTSVVPQILHSSAPDSKLREFKKWALQLVFIF + VGFAVMALMDEH" + gene <311165..>312460 + /gene="TIM44" + /locus_tag="YIL022W" + /gene_synonym="ISP45; MIM44; MPI1" + /db_xref="GeneID:854790" + mRNA <311165..>312460 + /gene="TIM44" + /locus_tag="YIL022W" + /gene_synonym="ISP45; MIM44; MPI1" + /product="protein translocase subunit TIM44" + /transcript_id="NM_001179372.1" + /db_xref="GeneID:854790" + CDS 311165..312460 + /gene="TIM44" + /locus_tag="YIL022W" + /gene_synonym="ISP45; MIM44; MPI1" + /experiment="EXISTENCE:direct assay:GO:0001405 PAM + complex, Tim23 associated import motor + [PMID:14517234|PMID:14638855]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:mutant phenotype:GO:0030150 protein + import into mitochondrial matrix + [PMID:1396562|PMID:18400944]" + /experiment="EXISTENCE:mutant phenotype:GO:0030674 + protein-macromolecule adaptor activity + [PMID:10824101|PMID:11344168]" + /experiment="EXISTENCE:mutant phenotype:GO:0051087 + protein-folding chaperone binding [PMID:11344168]" + /experiment="EXISTENCE:physical interaction:GO:0051087 + protein-folding chaperone binding [PMID:7809127]" + /note="Essential component of the TIM23 complex; tethers + the import motor and regulatory factors (PAM complex) to + the translocation channel (Tim23p-Tim17p core complex); + TIM23 complex is short for the translocase of the inner + mitochondrial membrane" + /codon_start=1 + /product="protein translocase subunit TIM44" + /protein_id="NP_012242.1" + /db_xref="GeneID:854790" + /db_xref="SGD:S000001284" + /translation="MHRSTFIRTSGTSSRTLTARYRSQYTGLLVARVLFSTSTTRAQG + GNPRSPLQIFRDTFKKEWEKSQELQENIKTLQDASGKLGESEAYKKAREAYLKAQRGS + TIVGKTLKKTGETMEHIATKAWESELGKNTRKAAAATAKKLDESFEPVRQTKIYKEVS + EVIDDGESSRYGGFITKEQRRLKRERDLASGKRHRAVKSNEDAGTAVVATNIESKESF + GKKVEDFKEKTVVGRSIQSLKNKLWDESENPLIVVMRKITNKVGGFFAETESSRVYSQ + FKLMDPTFSNESFTRHLREYIVPEILEAYVKGDVKVLKKWFSEAPFNVYAAQQKIFKE + QDVYADGRILDIRGVEIVSAKLLAPQDIPVLVVGCRAQEINLYRKKKTGEIAAGDEAN + ILMSSYAMVFTRDPEQIDDDETEGWKILEFVRGGSRQFT" + gene <312905..>313861 + /gene="RPB3" + /locus_tag="YIL021W" + /db_xref="GeneID:854791" + mRNA <312905..>313861 + /gene="RPB3" + /locus_tag="YIL021W" + /product="DNA-directed RNA polymerase II core subunit + RPB3" + /transcript_id="NM_001179371.3" + /db_xref="GeneID:854791" + CDS 312905..313861 + /gene="RPB3" + /locus_tag="YIL021W" + /experiment="EXISTENCE:direct assay:GO:0001055 RNA + polymerase II activity [PMID:8288647]" + /experiment="EXISTENCE:direct assay:GO:0003968 + RNA-dependent RNA polymerase activity [PMID:18004386]" + /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm + [PMID:15520468]" + /experiment="EXISTENCE:direct assay:GO:0005665 RNA + polymerase II, core complex + [PMID:1331084|PMID:2186966|PMID:2183013]" + /experiment="EXISTENCE:mutant phenotype:GO:0006366 + transcription by RNA polymerase II [PMID:2685562]" + /experiment="EXISTENCE:mutant phenotype:GO:0006369 + termination of RNA polymerase II transcription + [PMID:16537912]" + /note="RNA polymerase II third largest subunit B44; part + of central core; similar to prokaryotic alpha subunit" + /codon_start=1 + /product="DNA-directed RNA polymerase II core subunit + RPB3" + /protein_id="NP_012243.3" + /db_xref="GeneID:854791" + /db_xref="SGD:S000001283" + /translation="MSEEGPQVKIREASKDNVDFILSNVDLAMANSLRRVMIAEIPTL + AIDSVEVETNTTVLADEFIAHRLGLIPLQSMDIEQLEYSRDCFCEDHCDKCSVVLTLQ + AFGESESTTNVYSKDLVIVSNLMGRNIGHPIIQDKEGNGVLICKLRKGQELKLTCVAK + KGIAKEHAKWGPAAAIEFEYDPWNKLKHTDYWYEQDSAKEWPQSKNCEYEDPPNEGDP + FDYKAQADTFYMNVESVGSIPVDQVVVRGIDTLQKKVASILLALTQMDQDKVNFASGD + NNTASNMLGSNEDVMMTGAEQDPYSNASQMGNTGSGGYDNAW" + rep_origin 313861..314035 + /note="ARS918; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130160" + gene complement(<314035..>314820) + /gene="HIS6" + /locus_tag="YIL020C" + /db_xref="GeneID:854792" + mRNA complement(<314035..>314820) + /gene="HIS6" + /locus_tag="YIL020C" + /product="1-(5-phosphoribosyl)-5- + ((5-phosphoribosylamino)methylideneamino)imidazole-4- + carboxamide isomerase HIS6" + /transcript_id="NM_001179370.3" + /db_xref="GeneID:854792" + CDS complement(314035..314820) + /gene="HIS6" + /locus_tag="YIL020C" + /EC_number="5.3.1.16" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:genetic interaction:GO:0000105 + histidine biosynthetic process [PMID:9332345]" + /experiment="EXISTENCE:genetic interaction:GO:0003949 + 1-(5-phosphoribosyl)-5-[(5- + phosphoribosylamino)methylideneamino]imidazole-4- + carboxamide isomerase activity [PMID:9332345]" + /experiment="EXISTENCE:mutant phenotype:GO:0000105 + histidine biosynthetic process + [PMID:14190241|PMID:9332345]" + /note="Enzyme that catalyzes the fourth step in the + histidine pathway; + Phosphoribosylformimino-5-aminoimidazole carboxamide + ribotide isomerase; mutations cause histidine auxotrophy + and sensitivity to Cu, Co, and Ni salts" + /codon_start=1 + /product="1-(5-phosphoribosyl)-5- + ((5-phosphoribosylamino)methylideneamino)imidazole-4- + carboxamide isomerase HIS6" + /protein_id="NP_012244.3" + /db_xref="GeneID:854792" + /db_xref="SGD:S000001282" + /translation="MTKFIGCIDLHNGEVKQIVGGTLTSKKEDVPKTNFVSQHPSSYY + AKLYKDRDVQGCHVIKLGPNNDDAAREALQESPQFLQVGGGINDTNCLEWLKWASKVI + VTSWLFTKEGHFQLKRLERLTELCGKDRIVVDLSCRKTQDGRWIVAMNKWQTLTDLEL + NADTFRELRKYTNEFLIHAADVEGLCGGIDELLVSKLFEWTKDYDDLKIVYAGGAKSV + DDLKLVDELSHGKVDLTFGSSLDIFGGNLVKFEDCCRWNEKQG" + gene <315093..>316133 + /gene="FAF1" + /locus_tag="YIL019W" + /db_xref="GeneID:854793" + mRNA <315093..>316133 + /gene="FAF1" + /locus_tag="YIL019W" + /product="Faf1p" + /transcript_id="NM_001179369.1" + /db_xref="GeneID:854793" + CDS 315093..316133 + /gene="FAF1" + /locus_tag="YIL019W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus + [PMID:15078877|PMID:15178413]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:mutant phenotype:GO:0000462 + maturation of SSU-rRNA from tricistronic rRNA transcript + (SSU-rRNA, 5.8S rRNA, LSU-rRNA) + [PMID:15078877|PMID:15178413]" + /note="Protein required for pre-rRNA processing; also + required for 40S ribosomal subunit assembly" + /codon_start=1 + /product="Faf1p" + /protein_id="NP_012245.1" + /db_xref="GeneID:854793" + /db_xref="SGD:S000001281" + /translation="MTLDDDDYIKQMELQRKAFESQFGSLESMGFEDKTKNIRTEVDT + RDSSGDEIDNSDHGSDFKDGTIESSNSSDEDSGNETAEENNQDSKPKTQPKVIRFNGP + SDVYVPPSKKTQKLLRSGKTLTQINKKLESTEAKEEKEDETLEAENLQNDLELQQFLR + ESHLLSAFNNGGSGSTNSGVSLTLQSMGGGNDDGIVYQDDQVIGKARSRTLEMRLNRL + SRVNGHQDKINKLEKVPMHIRRGMIDKHVKRIKKYEQEAAEGGIVLSKVKKGQFRKIE + STYKKDIERRIGGSIKARDKEKATKRERGLKISSVGRSTRNGLIVSKRDIARISGGER + SGKFNGKKKSRR" + gene <316768..>317932 + /gene="RPL2B" + /locus_tag="YIL018W" + /gene_synonym="LOT2; RPL5A" + /db_xref="GeneID:854794" + mRNA join(<316768..316771,317172..>317932) + /gene="RPL2B" + /locus_tag="YIL018W" + /gene_synonym="LOT2; RPL5A" + /product="ribosomal 60S subunit protein L2B" + /transcript_id="NM_001179368.1" + /db_xref="GeneID:854794" + CDS join(316768..316771,317172..317932) + /gene="RPL2B" + /locus_tag="YIL018W" + /gene_synonym="LOT2; RPL5A" + /experiment="EXISTENCE:direct assay:GO:0002181 cytoplasmic + translation [PMID:18782943]" + /experiment="EXISTENCE:direct assay:GO:0003735 structural + constituent of ribosome [PMID:18782943]" + /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic + large ribosomal subunit [PMID:18782943]" + /note="Ribosomal 60S subunit protein L2B; homologous to + mammalian ribosomal protein L2 and bacterial L2; RPL2B has + a paralog, RPL2A, that arose from the whole genome + duplication; expression is upregulated at low + temperatures" + /codon_start=1 + /product="ribosomal 60S subunit protein L2B" + /protein_id="NP_012246.1" + /db_xref="GeneID:854794" + /db_xref="SGD:S000001280" + /translation="MGRVIRNQRKGAGSIFTSHTRLRQGAAKLRTLDYAERHGYIRGI + VKQIVHDSGRGAPLAKVVFRDPYKYRLREEIFIANEGVHTGQFIYAGKKASLNVGNVL + PLGSVPEGTIVSNVEEKPGDRGALARASGNYVIIIGHNPDENKTRVRLPSGAKKVISS + DARGVIGVIAGGGRVDKPLLKAGRAFHKYRLKRNSWPKTRGVAMNPVDHPHGGGNHQH + IGKASTISRGAVSGQKAGLIAARRTGLLRGSQKTQD" + gene complement(<318200..>320965) + /gene="VID28" + /locus_tag="YIL017C" + /gene_synonym="GID5; YIL017W" + /db_xref="GeneID:854795" + mRNA complement(<318200..>320965) + /gene="VID28" + /locus_tag="YIL017C" + /gene_synonym="GID5; YIL017W" + /product="glucose-induced degradation complex subunit + VID28" + /transcript_id="NM_001179367.3" + /db_xref="GeneID:854795" + CDS complement(318200..320965) + /gene="VID28" + /locus_tag="YIL017C" + /gene_synonym="GID5; YIL017W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0034657 GID complex + [PMID:16872538|PMID:18508925]" + /experiment="EXISTENCE:mutant phenotype:GO:0007039 protein + catabolic process in the vacuole [PMID:15358789]" + /experiment="EXISTENCE:mutant phenotype:GO:0030437 + ascospore formation [PMID:12586695]" + /experiment="EXISTENCE:mutant phenotype:GO:0043161 + proteasome-mediated ubiquitin-dependent protein catabolic + process [PMID:12686616|PMID:15358789]" + /experiment="EXISTENCE:mutant phenotype:GO:0045721 + negative regulation of gluconeogenesis [PMID:12686616]" + /note="GID Complex subunit, serves as adaptor for + regulatory subunit Vid24p; protein involved in + proteasome-dependent catabolite degradation of + fructose-1,6-bisphosphatase (FBPase); localized to the + nucleus and the cytoplasm" + /codon_start=1 + /product="glucose-induced degradation complex subunit + VID28" + /protein_id="NP_012247.3" + /db_xref="GeneID:854795" + /db_xref="SGD:S000001279" + /translation="MTVAYSLENLKKISNSLVGDQLAKVDYFLAPKCQIFQCLLSIEQ + SDGVELKNAKLDLLYTLLHLEPQQRDIVGTYYFDIVSAIYKSMSLASSFTKNNSSTNY + KYIKLLNLCAGVYPNCGFPDLQYLQNGFIQLVNHKFLRSKCKIDEVVTIIELLKLFLL + VDEKNCSDFNKSKFMEEEREVTETSHYQDFKMAESLEHIIVKISSKYLDQISLKYIVR + LKVSRPASPSSVKNDPFDNKGVDCTRAIPKKINISNMYDSSLLSLALLLYLRYHYMIP + GDRKLRNDATFKMFVLGLLKSNDVNIRCVALKFLLQPYFTEDKKWEDTRTLEKILPYL + VKSFNYDPLPWWFDPFDMLDSLIVLYNEITPMNNPVLTTLAHTNVIFCILSRFAQCLS + LPQHNEATLKTTTKFIKICASFAASDEKYRLLLLNDTLLLNHLEYGLESHITLIQDFI + SLKDEIKETTTESHSMCLPPIYDHDFVAAWLLLLKSFSRSVSALRTTLKRNKIAQLLL + QILSKTYTLTKECYFAGQDFMKPEIMIMGITLGSICNFVVEFSNLQSFMLRNGIIDII + EKMLTDPLFNSKKAWDDNEDERRIALQGIPVHEVKANSLWVLRHLMYNCQNEEKFQLL + AKIPMNLILDFINDPCWAVQAQCFQLLRNLTCNSRKIVNILLEKFKDVEYKIDPQTGN + KISIGSTYLFEFLAKKMRLLNPLDTQQKKAMEGILYIIVNLAAVNENKKQLVIEQDEI + LNIMSEILVETTTDSSSNGNDSNLKLACLWVLNNLLWNSSVSHYTQYAIENGLEPGHS + PSDSENPQSTVTIGYNESVAGGYSRGKYYDEPDGDDSSSNANDDEDDDNDEGDDEGDE + FVRTPAAKGSTSNVQVTRATVERCRKLVEVGLYDLVRKNITDESLSVREKARTLLYHM + DLLLKVK" + gene <321454..>321933 + /gene="SNL1" + /locus_tag="YIL016W" + /db_xref="GeneID:854796" + mRNA <321454..>321933 + /gene="SNL1" + /locus_tag="YIL016W" + /product="Snl1p" + /transcript_id="NM_001179366.1" + /db_xref="GeneID:854796" + CDS 321454..321933 + /gene="SNL1" + /locus_tag="YIL016W" + /experiment="EXISTENCE:direct assay:GO:0005635 nuclear + envelope [PMID:9450961]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:9450961]" + /experiment="EXISTENCE:direct assay:GO:0043022 ribosome + binding [PMID:22635919]" + /experiment="EXISTENCE:genetic interaction:GO:0006999 + nuclear pore organization [PMID:9450961]" + /experiment="EXISTENCE:physical interaction:GO:0006457 + protein folding [PMID:12105220]" + /note="Ribosome-associated protein; proposed to act in + protein synthesis, nuclear pore complex biogenesis and + maintenance as well as protein folding and prion + maintenance; has similarity to the mammalian BAG-1 + protein" + /codon_start=1 + /product="Snl1p" + /protein_id="NP_012248.1" + /db_xref="GeneID:854796" + /db_xref="SGD:S000001278" + /translation="MSHNAMEHWKSKLSKTSTSTYVLLAVIAVVFLVTIRRPNGSKGK + SSKKRASKKNKKGKNQFEKAPVPLTLEEQIDNVSLRYGNELEGRSKDLINRFDVEDEK + DIYERNYCNEMLLKLLIELDSIDLINVDESLRRPLKEKRKGVIKEIQAMLKSLDSLK" + gene <322342..>324105 + /gene="BAR1" + /locus_tag="YIL015W" + /gene_synonym="SST1" + /db_xref="GeneID:854797" + mRNA <322342..>324105 + /gene="BAR1" + /locus_tag="YIL015W" + /gene_synonym="SST1" + /product="aspartyl protease BAR1" + /transcript_id="NM_001179365.1" + /db_xref="GeneID:854797" + CDS 322342..324105 + /gene="BAR1" + /locus_tag="YIL015W" + /gene_synonym="SST1" + /EC_number="3.4.23.35" + /experiment="EXISTENCE:direct assay:GO:0000754 adaptation + of signaling pathway by response to pheromone involved in + conjugation with cellular fusion [PMID:6345506]" + /experiment="EXISTENCE:direct assay:GO:0004190 + aspartic-type endopeptidase activity [PMID:9249020]" + /experiment="EXISTENCE:direct assay:GO:0005576 + extracellular region [PMID:3124102]" + /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type + cell wall [PMID:10438739]" + /experiment="EXISTENCE:direct assay:GO:0043171 peptide + catabolic process [PMID:9249020]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0000754 + adaptation of signaling pathway by response to pheromone + involved in conjugation with cellular fusion + [PMID:7050666]" + /note="Aspartyl protease secreted to periplasmic space of + mating type a cell; helps cells monitor availability of + mating partners; cleaves and inactivates alpha factor + allowing cells to recover from alpha-factor-induced cell + cycle arrest" + /codon_start=1 + /product="aspartyl protease BAR1" + /protein_id="NP_012249.1" + /db_xref="GeneID:854797" + /db_xref="SGD:S000001277" + /translation="MSAINHLCLKLILASFAIINTITALTNDGTGHLEFLLQHEEEMY + YATTLDIGTPSQSLTVLFDTGSADFWVMDSSNPFCLPNSNTSSYSNATYNGEEVKPSI + DCRSMSTYNEHRSSTYQYLENGRFYITYADGTFADGSWGTETVSINGIDIPNIQFGVA + KYATTPVSGVLGIGFPRRESVKGYEGAPNEYYPNFPQILKSEKIIDVVAYSLFLNSPD + SGTGSIVFGAIDESKFSGDLFTFPMVNEYPTIVDAPATLAMTIQGLGAQNKSSCEHET + FTTTKYPVLLDSGTSLLNAPKVIADKMASFVNASYSEEEGIYILDCPVSVGDVEYNFD + FGDLQISVPLSSLILSPETEGSYCGFAVQPTNDSMVLGDVFLSSAYVVFDLDNYKISL + AQANWNASEVSKKLVNIQTDGSISGAKIATAEPWSTNEPFTVTSDIYSSTGCKSRPFL + QSSTASSLIAETNVQSRNCSTKMPGTRSTTVLSKPTQNSAMHQSTGAVTQTSNETKLE + LSSTMANSGSVSLPTSNSIDKEFEHSKSQTTSDPSVAEHSTFNQTFVHETKYRPTHKT + VITETVTKYSTVLINVCKPTY" + gene complement(324303..324374) + /locus_tag="YNCI0008C" + /db_xref="GeneID:854798" + tRNA complement(324303..324374) + /locus_tag="YNCI0008C" + /product="tRNA-Asp" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Aspartate tRNA (tRNA-Asp), predicted by tRNAscan-SE + analysis" + /db_xref="GeneID:854798" + /db_xref="SGD:S000006534" + repeat_region 324391..324734 + /note="Ty3 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007019" + repeat_region 324831..325164 + /note="Ty1 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007016" + gene complement(<325212..>325526) + /locus_tag="YIL014C-A" + /gene_synonym="YIL015C-A" + /db_xref="GeneID:854799" + mRNA complement(<325212..>325526) + /locus_tag="YIL014C-A" + /gene_synonym="YIL015C-A" + /product="uncharacterized protein" + /transcript_id="NM_001181433.3" + /db_xref="GeneID:854799" + CDS complement(325212..325526) + /locus_tag="YIL014C-A" + /gene_synonym="YIL015C-A" + /note="hypothetical protein; null mutant shows improved + incorporation efficiency of noncanonical amino acids in + place of amber stop codon" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012250.3" + /db_xref="GeneID:854799" + /db_xref="SGD:S000003536" + /translation="MDIDMNYPSITTLMSNESANLLIIWGNATPDISYLSYTTNPMLG + DYVLNVSAINGCTEELIATHLVPTLENATQWVYDAGEYWDNYSFTDESTPLPGLSWPF + NE" + gene 325748..325820 + /locus_tag="YNCI0009W" + /db_xref="GeneID:854800" + tRNA 325748..325820 + /locus_tag="YNCI0009W" + /product="tRNA-Thr" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Threonine tRNA (tRNA-Thr), predicted by tRNAscan-SE + analysis" + /db_xref="GeneID:854800" + /db_xref="SGD:S000006742" + gene <326103..>327995 + /gene="MNT3" + /locus_tag="YIL014W" + /db_xref="GeneID:854801" + mRNA <326103..>327995 + /gene="MNT3" + /locus_tag="YIL014W" + /product="alpha-1,3-mannosyltransferase MNT3" + /transcript_id="NM_001179364.3" + /db_xref="GeneID:854801" + CDS 326103..327995 + /gene="MNT3" + /locus_tag="YIL014W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005794 Golgi + apparatus [PMID:30700649]" + /experiment="EXISTENCE:genetic interaction:GO:0000033 + alpha-1,3-mannosyltransferase activity [PMID:10521541]" + /experiment="EXISTENCE:genetic interaction:GO:0006493 + protein O-linked glycosylation [PMID:10521541]" + /experiment="EXISTENCE:mutant phenotype:GO:0000033 + alpha-1,3-mannosyltransferase activity [PMID:10521541]" + /experiment="EXISTENCE:mutant phenotype:GO:0006493 protein + O-linked glycosylation [PMID:10521541]" + /note="Alpha-1,3-mannosyltransferase; adds the fourth and + fifth alpha-1,3-linked mannose residues to O-linked + glycans during protein O-glycosylation" + /codon_start=1 + /product="alpha-1,3-mannosyltransferase MNT3" + /protein_id="NP_012251.3" + /db_xref="GeneID:854801" + /db_xref="SGD:S000001276" + /translation="MLKSLKSRRLILKRLVTLLLSLFFSYLIFSASRNVTSSNKLNNH + ASERTAVESSAFNWIEKRQHQVRSENLMNRLSAYFLPFLSRSSHKERVLLRQLGNNEI + AKSDKCRYIFEVLYKIDPDWDNAQTAKFYNVDGVDNTLASLLGERLRSYDYCFLSGQL + DPTAIFANSTVNPHDLQNRMFPFLKKINEESKTVMWPIITDMTTGEAVPAPEVDMESS + NFNGNFWSNWNRLSKGRGFVLTIAEKDVPLFLKQLKVMEFSKNELPFQIVSTGNELSA + ESIAKISETAKETEQRVYLVDCSTVLDTNFANTYISFFQNKWVATLFNTFEEYILLDA + DVVPFVGSDYFFDSPSYRESGILLFKDRVMENEQTFQYCIEMLNEVEPSAQERRFIGS + RLVFDSSLPFSSETSEEASVYYNFFKKLRLHHVDSGLVVVNKLEKLNGLLMSFMLNLD + GKLQRCVYGDKEIFWLGQLYAGQDYSINPVDGSIIGPVNEEPENDDGHKSGMYYICST + QIAHSDSKNRLLWVNGGLKTCKISNSAEDDFGREPEYFKSRYGDISKLKRIYDASLNV + EGLIVPDVSVHPWMQIKECSNYMYCAYATGDGHTNSELDEGRLITFTEKELRYINDIS + RTWNAN" + gene complement(<328207..>332442) + /gene="PDR11" + /locus_tag="YIL013C" + /db_xref="GeneID:854802" + mRNA complement(<328207..>332442) + /gene="PDR11" + /locus_tag="YIL013C" + /product="ATP-binding cassette multidrug transporter + PDR11" + /transcript_id="NM_001179363.1" + /db_xref="GeneID:854802" + CDS complement(328207..332442) + /gene="PDR11" + /locus_tag="YIL013C" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:33375075]" + /experiment="EXISTENCE:direct assay:GO:0042626 + ATPase-coupled transmembrane transporter activity + [PMID:28922409]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:genetic interaction:GO:0035376 + sterol import [PMID:12077145|PMID:21110944]" + /experiment="EXISTENCE:mutant phenotype:GO:0035376 sterol + import [PMID:12077145]" + /experiment="EXISTENCE:mutant phenotype:GO:0042626 + ATPase-coupled transmembrane transporter activity + [PMID:28922409]" + /note="ATP-binding cassette (ABC) transporter; multidrug + transporter involved in multiple drug resistance; mediates + sterol uptake when sterol biosynthesis is compromised; + regulated by Pdr1p; required for anaerobic growth; PDR11 + has a paralog, AUS1, that arose from the whole genome + duplication" + /codon_start=1 + /product="ATP-binding cassette multidrug transporter + PDR11" + /protein_id="NP_012252.1" + /db_xref="GeneID:854802" + /db_xref="SGD:S000001275" + /translation="MSLSKYFNPIPDASVTFDGATVQLEESLGAVQNDEESASEFKNV + GHLEISDITFRANEGEVVLVLGNPTSALFKGLFHGHKHLKYSPEGSIRFKDNEYKQFA + SKCPHQIIYNNEQDIHFPYLTVEQTIDFALSCKFHIPKQERIEMRDELLKEFGLSHVK + KTYVGNDYVRGVSGGERKRISIIETFIANGSVYLWDNSTKGLDSATALEFLSITQKMA + KATRSVNFVKISQASDKIVSKFDKILMLGDSFQVFYGTMEECLTHFHDTLQIKKNPND + CIIEYLTSILNFKFKETSNSIVGLDTPSVVSEENQALNINNETDLHTLWIQSPYYKHW + KAITSKTVQECTRKDVNPDDISPIFSIPLKTQLKTCTVRAFERIIGDRNYLISQFVSV + VVQSLVIGSLFYNIPLTTIGSFSRGSLTFFSILFFTFLSLADMPASFQRQPVVRKHVQ + LHFYYNWVETLATNFFDCCSKFILVVIFTIILYFLAHLQYNAARFFIFLLFLSVYNFC + MVSLFALTALIAPTLSMANLLAGILLLAIAMYASYVIYMKDMHPWFIWIAYLNPAMFA + MEAILSNELFNLKLDCHESIIPRGEYYDNISFSHKACAWQGATLGNDYVRGRDYLKSG + LKYTYHHVWRNFGIIIGFLCFFLFCSLLAAEYITPLFTRENLLRWNNYLKRYCPFLNS + QKKNNKSAITNNDGVCTPKTPIANFSTSSSSVPSVSHQYDTDYNIKHPDETVNNHTKE + SVAMETQKHVISWKNINYTIGDKKLINDASGYISSGLTALMGESGAGKTTLLNVLSQR + TESGVVTGELLIDGQPLTNIDAFRRSIGFVQQQDVHLELLTVRESLEISCVLRGDGDR + DYLGVVSNLLRLPSEKLVADLSPTQRKLLSIGVELVTKPSLLLFLDEPTSGLDAEAAL + TIVQFLKKLSMQGQAILCTIHQPSKSVISYFDNIYLLKRGGECVYFGSLPNACDYFVA + HDRRLTFDREMDNPADFVIDVVGSGSTNIPMDDAEKPTSSKIDEPVSYHKQSDSINWA + ELWQSSPEKVRVADDLLLLEEEARKSGVDFTTSVWSPPSYMEQIKLITKRQYICTKRD + MTYVFAKYALNAGAGLFIGFSFWRTKHNINGLQDAIFLCFMMLCVSSPLINQVQDKAL + QSKEVYIAREARSNTYHWTVLLIAQTIVELPLAISSSTLFFLCCYFCCGFETSARVAG + VFYLNYILFSMYYLSFGLWLLYSAPDLQTAAVFVAFLYSFTASFCGVMQPYSLFPRFW + TFMYRVSPYTYFIETFVSLLLHDREVNCSTSEMVPSQPVMGQTCGQFMKPFIDEFGGK + LHINNTYTVCAYCMYTVGDDFLAQENMSYHHRWRNFGFEWVFVCFNIAAMFVGFYLTY + IKKIWPSVIDGIKKCIPSMRRSKTSHNPNEQSV" + gene <333011..>333352 + /locus_tag="YIL012W" + /db_xref="GeneID:854803" + mRNA <333011..>333352 + /locus_tag="YIL012W" + /product="uncharacterized protein" + /transcript_id="NM_001348845.1" + /db_xref="GeneID:854803" + CDS 333011..333352 + /locus_tag="YIL012W" + /note="hypothetical protein; conserved across S. + cerevisiae strains" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001335785.1" + /db_xref="GeneID:854803" + /db_xref="SGD:S000001274" + /translation="MCLGKLYFEQLILVRCIKGRQSGNITTGESRCVSWNVYCTTSMI + GLFSWRKMLLFQHFSYTQRENRQIGGKTWSLISSLFHLNETLASALHHPYETLALYEA + YFALREKKFLL" + gene <333727..>334536 + /gene="TIR3" + /locus_tag="YIL011W" + /gene_synonym="YIB1" + /db_xref="GeneID:854804" + mRNA <333727..>334536 + /gene="TIR3" + /locus_tag="YIL011W" + /gene_synonym="YIB1" + /product="Tir3p" + /transcript_id="NM_001179361.1" + /db_xref="GeneID:854804" + CDS 333727..334536 + /gene="TIR3" + /locus_tag="YIL011W" + /gene_synonym="YIB1" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type + cell wall [PMID:10383953]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /note="Cell wall mannoprotein; member of Srp1p/Tip1p + family of serine-alanine-rich proteins; expressed under + anaerobic conditions and required for anaerobic growth; + TIR3 has a paralog, TIR2, that arose from the whole genome + duplication" + /codon_start=1 + /product="Tir3p" + /protein_id="NP_012254.1" + /db_xref="GeneID:854804" + /db_xref="SGD:S000001273" + /translation="MSFTKIAALLAVAAASTQLVSAEVGQYEIVEFDAILADVKANLE + QYMSLAMNNPDFTLPSGVLDVYQHMTTATDDSYTSYFTEMDFAQITTAMVQVPWYSSR + LEPEIIAALQSAGISITSLGQTVSESGSESATASSDASSASESSSAASSSASESSSAA + SSSASESSSAASSSASESSSAASSSASEAAKSSSSAKSSGSSAASSAASSASSKASSA + ASSSAKASSSAEKSTNSSSSATSKNAGAAMDMGFFSAGVGAAIAGAAAMLL" + gene <334882..>335529 + /gene="DOT5" + /locus_tag="YIL010W" + /db_xref="GeneID:854805" + mRNA <334882..>335529 + /gene="DOT5" + /locus_tag="YIL010W" + /product="thioredoxin peroxidase DOT5" + /transcript_id="NM_001179360.3" + /db_xref="GeneID:854805" + CDS 334882..335529 + /gene="DOT5" + /locus_tag="YIL010W" + /EC_number="1.11.1.24" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10681558|PMID:2408019]" + /experiment="EXISTENCE:direct assay:GO:0008379 thioredoxin + peroxidase activity [PMID:10681558]" + /experiment="EXISTENCE:direct assay:GO:0045454 cell redox + homeostasis [PMID:10681558]" + /experiment="EXISTENCE:genetic interaction:GO:0034599 + cellular response to oxidative stress [PMID:15051715]" + /experiment="EXISTENCE:mutant phenotype:GO:0008379 + thioredoxin peroxidase activity [PMID:10681558]" + /experiment="EXISTENCE:mutant phenotype:GO:0045454 cell + redox homeostasis [PMID:10681558]" + /note="Nuclear thiol peroxidase; functions as an + alkyl-hydroperoxide reductase during post-diauxic growth" + /codon_start=1 + /product="thioredoxin peroxidase DOT5" + /protein_id="NP_012255.3" + /db_xref="GeneID:854805" + /db_xref="SGD:S000001272" + /translation="MGEALRRSTRIAISKRMLEEEESKLAPISTPEVPKKKIKTGPKH + NANQAVVQEANRSSDVNELEIGDPIPDLSLLNEDNDSISLKKITENNRVVVFFVYPRA + STPGCTRQACGFRDNYQELKKYAAVFGLSADSVTSQKKFQSKQNLPYHLLSDPKREFI + GLLGAKKTPLSGSIRSHFIFVDGKLKFKRVKISPEVSVNDAKKEVLEVAEKFKEE" + gene complement(<335666..>336212) + /gene="EST3" + /locus_tag="YIL009C-A" + /db_xref="GeneID:854806" + mRNA complement(<335666..>336212) + /gene="EST3" + /locus_tag="YIL009C-A" + /product="telomerase subunit EST3" + /transcript_id="NM_001184306.2" + /db_xref="GeneID:854806" + CDS complement(join(335666..335935,335937..336212)) + /gene="EST3" + /locus_tag="YIL009C-A" + /experiment="EXISTENCE:direct assay:GO:0003924 GTPase + activity [PMID:20884318]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:12101098]" + /experiment="EXISTENCE:direct assay:GO:0005697 telomerase + holoenzyme complex [PMID:10898986]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0007004 telomere + maintenance via telomerase [PMID:10898986]" + /experiment="EXISTENCE:direct assay:GO:0033677 DNA/RNA + helicase activity [PMID:16884717]" + /experiment="EXISTENCE:direct assay:GO:0042162 telomeric + DNA binding [PMID:16884717]" + /experiment="EXISTENCE:mutant phenotype:GO:0003924 GTPase + activity [PMID:20884318]" + /experiment="EXISTENCE:mutant phenotype:GO:0007004 + telomere maintenance via telomerase [PMID:8978029]" + /ribosomal_slippage + /note="Component of the telomerase holoenzyme; involved in + telomere replication; synthesis of the full-length protein + results from a programmed +1 ribosomal frameshift" + /codon_start=1 + /product="telomerase subunit EST3" + /protein_id="NP_012256.1" + /db_xref="GeneID:854806" + /db_xref="SGD:S000006432" + /translation="MPKVILESHSKPTDSVFLQPWIKALIEDNSEHDQYHPSGHVIPS + LTKQDLALPHMSPTILTNPCHFAKITKFYNVCDYKVYASIRDSSHQILVEFSQECVSN + FERTHNCRITSETTNCLMIIGDADLVYVTNSRAMSHFKICLSNISSKEIVPVLNVNQA + TIFDIDQVGSLSTFPFVYKYL" + gene complement(336349..336420) + /locus_tag="YNCI0010C" + /db_xref="GeneID:854807" + tRNA complement(336349..336420) + /locus_tag="YNCI0010C" + /product="tRNA-Asp" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Aspartate tRNA (tRNA-Asp), predicted by tRNAscan-SE + analysis" + /db_xref="GeneID:854807" + /db_xref="SGD:S000006535" + repeat_region complement(336708..336897) + /note="Ty1 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007014" + gene <339344..>341428 + /gene="FAA3" + /locus_tag="YIL009W" + /db_xref="GeneID:854808" + mRNA <339344..>341428 + /gene="FAA3" + /locus_tag="YIL009W" + /product="long-chain fatty acid-CoA ligase FAA3" + /transcript_id="NM_001179359.1" + /db_xref="GeneID:854808" + CDS 339344..341428 + /gene="FAA3" + /locus_tag="YIL009W" + /EC_number="6.2.1.3" + /experiment="EXISTENCE:direct assay:GO:0004467 long-chain + fatty acid-CoA ligase activity [PMID:8206942]" + /experiment="EXISTENCE:direct assay:GO:0031957 very + long-chain fatty acid-CoA ligase activity [PMID:8206942]" + /experiment="EXISTENCE:genetic interaction:GO:0001676 + long-chain fatty acid metabolic process [PMID:7962057]" + /note="Long chain fatty acyl-CoA synthetase; activates + imported fatty acids with a preference for C16:0-C18:0 + chain lengths; green fluorescent protein (GFP)-fusion + protein localizes to the cell periphery" + /codon_start=1 + /product="long-chain fatty acid-CoA ligase FAA3" + /protein_id="NP_012257.1" + /db_xref="GeneID:854808" + /db_xref="SGD:S000001271" + /translation="MSEQHSVAVGKAANEHETAPRRNVRVKKRPLIRPLNSSASTLYE + FALECFNKGGKRDGMAWRDVIEIHETKKTIVRKVDGKDKSIEKTWLYYEMSPYKMMTY + QELIWVMHDMGRGLAKIGIKPNGEHKFHIFASTSHKWMKIFLGCISQGIPVVTAYDTL + GESGLIHSMVETESAAIFTDNQLLAKMIVPLQSAKDIKFLIHNEPIDPNDRRQNGKLY + KAAKDAINKIREVRPDIKIYSFEEVVKIGKKSKDEVKLHPPEPKDLACIMYTSGSISA + PKGVVLTHYNIVSGIAGVGHNVFGWIGSTDRVLSFLPLAHIFELVFEFEAFYWNGILG + YGSVKTLTNTSTRNCKGDLVEFKPTIMIGVAAVWETVRKAILEKISDLTPVLQKIFWS + AYSMKEKSVPCTGFLSRMVFKKVRQATGGHLKYIMNGGSAISIDAQKFFSIVLCPMII + GYGLTETVANACVLEPDHFEYGIVGDLVGSVTAKLVDVKDLGYYAKNNQGELLLKGAP + VCSEYYKNPIETAVSFTYDGWFRTGDIVEWTPKGQLKIIDRRKNLVKTLNGEYIALEK + LESVYRSNSYVKNICVYADESRVKPVGIVVPNPGPLSKFAVKLRIMKKGEDIENYIHD + KALRNAVFKEMIATAKSQGLVGIELLCGIVFFDEEWTPENGFVTSAQKLKRREILAAV + KSEVERVYKENS" + rep_origin 341976..342045 + /note="ARS919; Autonomously Replicating Sequence" + /db_xref="SGD:S000118398" + gene <342536..>342835 + /gene="URM1" + /locus_tag="YIL008W" + /db_xref="GeneID:854809" + mRNA <342536..>342835 + /gene="URM1" + /locus_tag="YIL008W" + /product="ubiquitin-related modifier URM1" + /transcript_id="NM_001179358.3" + /db_xref="GeneID:854809" + CDS 342536..342835 + /gene="URM1" + /locus_tag="YIL008W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14551258|PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0031386 protein tag + activity [PMID:14551258|PMID:10713047]" + /experiment="EXISTENCE:direct assay:GO:0032447 protein + urmylation [PMID:10713047|PMID:14555475]" + /experiment="EXISTENCE:direct assay:GO:0034599 cellular + response to oxidative stress [PMID:21209336]" + /experiment="EXISTENCE:genetic interaction:GO:0001403 + invasive growth in response to glucose limitation + [PMID:14551258]" + /experiment="EXISTENCE:genetic interaction:GO:0007114 cell + budding [PMID:14551258]" + /experiment="EXISTENCE:mutant phenotype:GO:0001403 + invasive growth in response to glucose limitation + [PMID:14551258]" + /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA + wobble uridine modification [PMID:18755837]" + /experiment="EXISTENCE:mutant phenotype:GO:0002143 tRNA + wobble position uridine thiolation + [PMID:19145231|PMID:18664566|PMID:19151091]" + /experiment="EXISTENCE:mutant phenotype:GO:0031386 protein + tag activity [PMID:14551258]" + /experiment="EXISTENCE:mutant phenotype:GO:0032447 protein + urmylation [PMID:14555475]" + /experiment="EXISTENCE:mutant phenotype:GO:0034599 + cellular response to oxidative stress [PMID:14555475]" + /note="Ubiquitin-like protein involved in thiolation of + cytoplasmic tRNAs; receives sulfur from the E1-like enzyme + Uba4p and transfers it to tRNA; also functions as a + protein tag with roles in nutrient sensing and oxidative + stress response" + /codon_start=1 + /product="ubiquitin-related modifier URM1" + /protein_id="NP_012258.3" + /db_xref="GeneID:854809" + /db_xref="SGD:S000001270" + /translation="MVNVKVEFLGGLDAIFGKQRVHKIKMDKEDPVTVGDLIDHIVST + MINNPNDVSIFIEDDSIRPGIITLINDTDWELEGEKDYILEDGDIISFTSTLHGG" + gene complement(<342994..>343656) + /gene="NAS2" + /locus_tag="YIL007C" + /db_xref="GeneID:854810" + mRNA complement(<342994..>343656) + /gene="NAS2" + /locus_tag="YIL007C" + /product="Nas2p" + /transcript_id="NM_001179357.3" + /db_xref="GeneID:854810" + CDS complement(342994..343656) + /gene="NAS2" + /locus_tag="YIL007C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:19446323]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11489916]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:19446323]" + /experiment="EXISTENCE:direct assay:GO:0070682 proteasome + regulatory particle assembly [PMID:19446322]" + /experiment="EXISTENCE:genetic interaction:GO:0070682 + proteasome regulatory particle assembly + [PMID:19446322|PMID:19446323]" + /experiment="EXISTENCE:mutant phenotype:GO:0070682 + proteasome regulatory particle assembly + [PMID:19446322|PMID:19446323]" + /note="Evolutionarily conserved 19S regulatory particle + assembly-chaperone; involved in assembly of the base + subcomplex of the 19S proteasomal regulatory particle + (RP); non-essential gene; interacts with Rpn4p; protein + abundance increases in response to DNA replication stress; + ortholog of human p27" + /codon_start=1 + /product="Nas2p" + /protein_id="NP_012259.3" + /db_xref="GeneID:854810" + /db_xref="SGD:S000001269" + /translation="MEEEELSKLLANVKIDPSLTSRISQIDSFKLSELMVLKTDIETQ + LEAYFSVLEQQGIGMDSALVTPDGYPRSDVDVLQVTMIRKNVNMLKNDLNHLLQRSHV + LLNQHFDNMNVKSNQDARRNNDDQAIQYTIPFAFISEVVPGSPSDKADIKVDDKLISI + GNVHAANHSKLQNIQMVVMKNEDRPLPVLLLREGQILKTSLTPSRNWNGRGLLGCRIQ + EL" + gene <344062..>345183 + /gene="YIA6" + /locus_tag="YIL006W" + /gene_synonym="NDT1" + /db_xref="GeneID:854811" + mRNA <344062..>345183 + /gene="YIA6" + /locus_tag="YIL006W" + /gene_synonym="NDT1" + /product="NAD+ transporter" + /transcript_id="NM_001179356.1" + /db_xref="GeneID:854811" + CDS 344062..345183 + /gene="YIA6" + /locus_tag="YIL006W" + /gene_synonym="NDT1" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:16291748|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0035352 NAD + transmembrane transport [PMID:16291748]" + /experiment="EXISTENCE:direct assay:GO:0051724 NAD + transmembrane transporter activity [PMID:16291748]" + /experiment="EXISTENCE:genetic interaction:GO:0035352 NAD + transmembrane transport [PMID:16291748]" + /experiment="EXISTENCE:genetic interaction:GO:0051724 NAD + transmembrane transporter activity [PMID:16291748]" + /experiment="EXISTENCE:mutant phenotype:GO:0005477 + pyruvate secondary active transmembrane transporter + activity [PMID:12887330]" + /experiment="EXISTENCE:mutant phenotype:GO:0006850 + mitochondrial pyruvate transmembrane transport + [PMID:12887330]" + /experiment="EXISTENCE:mutant phenotype:GO:0035352 NAD + transmembrane transport [PMID:16291748]" + /experiment="EXISTENCE:mutant phenotype:GO:0051724 NAD + transmembrane transporter activity [PMID:16291748]" + /note="Mitochondrial NAD+ transporter; involved in the + transport of NAD+ into the mitochondria (see also YEA6); + member of the mitochondrial carrier subfamily; disputed + role as a pyruvate transporter; has putative mouse and + human orthologs; YIA6 has a paralog, YEA6, that arose from + the whole genome duplication; human NAD+ transporter + MCART1/SLC25A51 functionally complements the yia6 yea6 + double null mutant, and yeast YIA6 reciprocally + complements defects in MCART1/SLC25A51 null cells" + /codon_start=1 + /product="NAD+ transporter" + /protein_id="NP_012260.1" + /db_xref="GeneID:854811" + /db_xref="SGD:S000001268" + /translation="MTQTDNPVPNCGLLPEQQYCSADHEEPLLLHEEQLIFPDHSSQL + SSADIIEPIKMNSSTESIIGTTLRKKWVPLSSTQITALSGAFAGFLSGVAVCPLDVAK + TRLQAQGLQTRFENPYYRGIMGTLSTIVRDEGPRGLYKGLVPIVLGYFPTWMIYFSVY + EFSKKFFHGIFPQFDFVAQSCAAITAGAASTTLTNPIWVVKTRLMLQSNLGEHPTHYK + GTFDAFRKLFYQEGFKALYAGLVPSLLGLFHVAIHFPIYEDLKVRFHCYSRENNTNSI + NLQRLIMASSVSKMIASAVTYPHEILRTRMQLKSDIPDSIQRRLFPLIKATYAQEGLK + GFYSGFTTNLVRTIPASAITLVSFEYFRNRLENISTMVI" + gene <345692..>347797 + /gene="EPS1" + /locus_tag="YIL005W" + /db_xref="GeneID:854812" + mRNA <345692..>347797 + /gene="EPS1" + /locus_tag="YIL005W" + /product="protein disulfide isomerase EPS1" + /transcript_id="NM_001179355.1" + /db_xref="GeneID:854812" + CDS 345692..347797 + /gene="EPS1" + /locus_tag="YIL005W" + /EC_number="5.3.4.1" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:10545109]" + /experiment="EXISTENCE:direct assay:GO:0019153 + protein-disulfide reductase (glutathione) activity + [PMID:16002399]" + /experiment="EXISTENCE:direct assay:GO:0051082 unfolded + protein binding [PMID:16002399]" + /experiment="EXISTENCE:mutant phenotype:GO:0003756 protein + disulfide isomerase activity [PMID:11157982]" + /experiment="EXISTENCE:mutant phenotype:GO:0006621 protein + retention in ER lumen [PMID:10545109]" + /experiment="EXISTENCE:mutant phenotype:GO:0030433 + ubiquitin-dependent ERAD pathway [PMID:12881414]" + /experiment="EXISTENCE:physical interaction:GO:0005515 + protein binding [PMID:16002399]" + /note="ER protein with chaperone and co-chaperone + activity; involved in retention of resident ER proteins; + has a role in recognizing proteins targeted for + ER-associated degradation (ERAD), member of the protein + disulfide isomerase family" + /codon_start=1 + /product="protein disulfide isomerase EPS1" + /protein_id="NP_012261.1" + /db_xref="GeneID:854812" + /db_xref="SGD:S000001267" + /translation="MKMNLKRLVVTFFSCITFLLKFTIAAAEPPEGFPEPLNPTNFKE + ELSKGLHIIDFYSPYCPHCKHLAPVWMETWEEFKEESKTLNITFSQVNCIESADLCGD + ENIEYFPEIRLYNPSGYIKSFTETPRTKESLIAFARRESMDPNNLDTDLDSAKSESQY + LEGFDFLELIAGKATRPHLVSFWPTKDMKNSDDSLEFKNCDKCHEFQRTWKIISRQLA + VDDINTGHVNCESNPTICEELGFGDLVKITNHRADREPKVALVLPNKTSNNLFDYPNG + YSAKSDGYVDFARRTFTNSKFPNITEGELEKKANRDIDFLQERGRVTNNDIHLVFSYD + PETVVIEDFDILEYLIEPLSKIPNIYLHQIDKNLINLSRNLFGRMYEKINYDASQTQK + VFNKEYFTMNTVTQLPTFFMFKDGDPISYVFPGYSTTEMRNIDAIMDWVKKYSNPLVT + EVDSSNLKKLISFQTKSYSDLAIQLISSTDHKHIKGSNKLIKNLLLASWEYEHIRMEN + NFEEINERRARKADGIKKIKEKKAPANKIVDKMREEIPHMDQKKLLLGYLDISKEKNF + FRKYGITGEYKIGDVIIIDKSNNYYYNKDNFGNSLTSNNPQLLREAFVSLNIPSKALY + SSKLKGRLINSPFHNVLSFLDIIHGNGMPGYLIVIVLFIAILKGPSIYRRYKVRKHYR + AKRNAVGILGNMEKKKNQD" + gene complement(<347946..>348505) + /gene="BET1" + /locus_tag="YIL004C" + /gene_synonym="SLY12" + /db_xref="GeneID:854813" + mRNA complement(join(<347946..348363,348495..>348505)) + /gene="BET1" + /locus_tag="YIL004C" + /gene_synonym="SLY12" + /product="Bet1p" + /transcript_id="NM_001179354.3" + /db_xref="GeneID:854813" + CDS complement(join(347946..348363,348495..348505)) + /gene="BET1" + /locus_tag="YIL004C" + /gene_synonym="SLY12" + /experiment="EXISTENCE:direct assay:GO:0005484 SNAP + receptor activity [PMID:11001058]" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:1396561]" + /experiment="EXISTENCE:direct assay:GO:0006890 retrograde + vesicle-mediated transport, Golgi to endoplasmic reticulum + [PMID:9813082]" + /experiment="EXISTENCE:direct assay:GO:0006906 vesicle + fusion [PMID:11001046]" + /experiment="EXISTENCE:direct assay:GO:0016020 membrane + [PMID:1396561]" + /experiment="EXISTENCE:direct assay:GO:0030134 + COPII-coated ER to Golgi transport vesicle + [PMID:11157978]" + /experiment="EXISTENCE:direct assay:GO:0031201 SNARE + complex [PMID:11001058]" + /experiment="EXISTENCE:mutant phenotype:GO:0005484 SNAP + receptor activity [PMID:3312234]" + /experiment="EXISTENCE:mutant phenotype:GO:0006888 + endoplasmic reticulum to Golgi vesicle-mediated transport + [PMID:3312234]" + /note="Type II membrane protein required for vesicular + transport; required for vesicular transport between the + endoplasmic reticulum and Golgi complex; v-SNARE with + similarity to synaptobrevins" + /codon_start=1 + /product="Bet1p" + /protein_id="NP_012262.3" + /db_xref="GeneID:854813" + /db_xref="SGD:S000001266" + /translation="MSSRFAGGNAYQRDTGRTQLFGPADGSNSLDDNVSSALGSTDKL + DYSQSTLASLESQSEEQMGAMGQRIKALKSLSLKMGDEIRGSNQTIDQLGDTFHNTSV + KLKRTFGNMMEMARRSGISIKTWLIIFFMVGVLFFWVWIT" + gene <349122..>350003 + /gene="CFD1" + /locus_tag="YIL003W" + /gene_synonym="DRE3" + /db_xref="GeneID:854814" + mRNA <349122..>350003 + /gene="CFD1" + /locus_tag="YIL003W" + /gene_synonym="DRE3" + /product="iron-sulfur cluster assembly protein CFD1" + /transcript_id="NM_001179353.1" + /db_xref="GeneID:854814" + CDS 349122..350003 + /gene="CFD1" + /locus_tag="YIL003W" + /gene_synonym="DRE3" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:12970194]" + /experiment="EXISTENCE:direct assay:GO:0016226 iron-sulfur + cluster assembly [PMID:17401378]" + /experiment="EXISTENCE:direct assay:GO:0016887 ATP + hydrolysis activity [PMID:26195633]" + /experiment="EXISTENCE:direct assay:GO:0051539 4 iron, 4 + sulfur cluster binding [PMID:17401378]" + /experiment="EXISTENCE:direct assay:GO:1904564 Nbp35-Cfd1 + ATPase complex [PMID:26195633]" + /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA + wobble uridine modification [PMID:18755837]" + /experiment="EXISTENCE:mutant phenotype:GO:0016226 + iron-sulfur cluster assembly [PMID:12970194]" + /note="Highly conserved iron-sulfur cluster binding + protein; localized in the cytoplasm; forms a complex with + Nbp35p that is involved in iron-sulfur protein assembly in + the cytosol" + /codon_start=1 + /product="iron-sulfur cluster assembly protein CFD1" + /protein_id="NP_012263.1" + /db_xref="GeneID:854814" + /db_xref="SGD:S000001265" + /translation="MEEQEIGVPAASLAGIKHIILILSGKGGVGKSSVTTQTALTLCS + MGFKVGVLDIDLTGPSLPRMFGLENESIYQGPEGWQPVKVETNSTGSLSVISLGFLLG + DRGNSVIWRGPKKTSMIKQFISDVAWGELDYLLIDTPPGTSDEHISIAEELRYSKPDG + GIVVTTPQSVATADVKKEINFCKKVDLKILGIIENMSGFVCPHCAECTNIFSSGGGKR + LSEQFSVPYLGNVPIDPKFVEMIENQVSSKKTLVEMYRESSLCPIFEEIMKKLRKQDT + TTPVVDKHEQPQIESPK" + gene <350301..>350510 + /gene="CMI7" + /locus_tag="YIL002W-A" + /db_xref="GeneID:1466493" + mRNA <350301..>350510 + /gene="CMI7" + /locus_tag="YIL002W-A" + /product="Cmi7p" + /transcript_id="NM_001184653.1" + /db_xref="GeneID:1466493" + CDS 350301..350510 + /gene="CMI7" + /locus_tag="YIL002W-A" + /note="Putative mitochondrial hypothetical protein; + identified by expression profiling and mass spectrometry" + /codon_start=1 + /product="Cmi7p" + /protein_id="NP_878098.1" + /db_xref="GeneID:1466493" + /db_xref="SGD:S000028835" + /translation="MTRDTPEDVSTAGAKDILDVLNLLKGGEEKISEVELKLDEMEKK + MDSLLVQLEDLHRDNNDLAKSSSQK" + gene complement(<350591..>353431) + /gene="INP51" + /locus_tag="YIL002C" + /gene_synonym="SJL1" + /db_xref="GeneID:854815" + mRNA complement(<350591..>353431) + /gene="INP51" + /locus_tag="YIL002C" + /gene_synonym="SJL1" + /product="phosphoinositide 5-phosphatase INP51" + /transcript_id="NM_001179352.3" + /db_xref="GeneID:854815" + CDS complement(350591..353431) + /gene="INP51" + /locus_tag="YIL002C" + /gene_synonym="SJL1" + /EC_number="3.1.3.36" + /experiment="EXISTENCE:direct assay:GO:0004439 + phosphatidylinositol-4,5-bisphosphate 5-phosphatase + activity [PMID:9565610|PMID:10224048]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:17452534]" + /experiment="EXISTENCE:direct assay:GO:0016020 membrane + [PMID:9560389]" + /experiment="EXISTENCE:direct assay:GO:0046856 + phosphatidylinositol dephosphorylation [PMID:10224048]" + /experiment="EXISTENCE:mutant phenotype:GO:0004439 + phosphatidylinositol-4,5-bisphosphate 5-phosphatase + activity [PMID:9438131|PMID:9565610]" + /experiment="EXISTENCE:mutant phenotype:GO:0046856 + phosphatidylinositol dephosphorylation + [PMID:9438131|PMID:9560389]" + /note="Phosphatidylinositol 4,5-bisphosphate + 5-phosphatase; synaptojanin-like protein with an + N-terminal Sac1 domain, plays a role in + phosphatidylinositol 4,5-bisphosphate homeostasis and in + endocytosis; null mutation confers cold-tolerant growth" + /codon_start=1 + /product="phosphoinositide 5-phosphatase INP51" + /protein_id="NP_012264.3" + /db_xref="GeneID:854815" + /db_xref="SGD:S000001264" + /translation="MRLFIGRRSRSIVISSNNYCLSFQRLRSIPGASSQQRQLSKTPS + VTIKSYPDTDLSSDSNYLEVKSCIFNGLLGLVCLNGDIYVAVISGVQNVGFPRWKLID + HQVRPSESIYKVLDVDFYSLENDVFDYLLCERSEQNYDKLIHEHPCGPLKKLFSDGTF + YYSRDFDISNIVKNHGLSHNLEYTVDNQDLSFIWNANLASEVINWRSKISNEEKQLFA + NAGFLTFVIRGYCKTALIEDGPNTASITIISRISTESKQDTLELEGISEDGRVSLFVE + TEIVVTTEKFIFSYTQVNGSIPLFWESVESQLLYGKKIKVTKDSIEAQGAFDRHFDNL + TSKYGVVSIVNIIKPKSESQEKLALTYKDCAESKGIKITNIEYSSSVLTKSPHKLLYL + LKQDIYEFGAFAYDISRGIYFAKQTGVLRISAFDSIEKPNTVERLVSKEVLELTTNEI + DVFELTSPFLDAHDKLWSENYYWLDRTYTKHTKNSGKYTKVYSKLFGSRVRLYDPLHI + YISQYLKQLRSKYTFEKDISIFAGTFNISGKIPKDDIKDWIFPKSMSKEDEMADLYVI + GLEEVVELTPGHMLATDPYVRQFWEKKILTLLNGPGRKKKYIRLWSTQLGGILLLLFM + NETEYSKVKHIEGDVKKTGFGGMASNKGAVAVSFKYSATRFCVLVSHLAAGLENVEQR + HNDYKTIAKSIRFSKGLRIKDHDAIIWMGDFNYRILMSNEDVRRKIVSKEYASLFEKD + QLNQQMIAGESFPYFHEMAIDFPPTYKFDPGTKNYDTSEKMRIPAWTDRILSRGEVLE + QLEYKCCEDILFSDHRPVYAIFRARVTVVDEQKKTTLGTQIYEKIMERLEGLDDDEKI + AVLSDDAFVIESFEGSDSIAGPTHSPTPIPEPKRGRKLPPPSSDLKKWWIGSGKQVKV + VLDVDPAVYMINPKRDPNPFVENEDEPLFIER" + gene <353940..>355481 + /locus_tag="YIL001W" + /db_xref="GeneID:854816" + mRNA <353940..>355481 + /locus_tag="YIL001W" + /product="uncharacterized protein" + /transcript_id="NM_001179351.3" + /db_xref="GeneID:854816" + CDS 353940..355481 + /locus_tag="YIL001W" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /note="hypothetical protein; contains a BTB/POZ domain + which generally function in protein interactions; deletion + slightly improved competitive fitness in rich media; + GFP-tagged protein is localized to the cytoplasm" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012265.3" + /db_xref="GeneID:854816" + /db_xref="SGD:S000001263" + /translation="MADKLMDKNFEELCYSCRTGDMDNVDRLISTGVNVNSVDKFDNS + PLFLASLCGHEAVVKLLLQRGAVCDRDRYEGARCIYGALTDTIRDTLLSYDISKAVDV + KQPFATHISSMYNDEGFLKRDITFRVSNGKLFTAHKFLLCARSEILAEKMVNEWAKHE + IVSLEVRPDIFDIFLKFLYLIPILHQIEPGQYEELIELSSKFDIELLPEFLDKARHTA + DPTEKSRLMSDYQYKFTEVARSQLLIFVNNCIFRSTVDLANSERRVFSLMNCPAYPDV + QLMVKNRNGAIRIYPCHLAVLSRAEYFKVMFTNNFKEKVTYIKAKHVTGKYNSIIPQL + TLPNCEFEVAEIILRYLYADNTDIPWMYAVDVLLLADILLEDRLKTIASTIITQSKEF + IQQYNVFDVLYLSWEIGVERLEQFAAKFIAIHLQELYKDPEIKRAIMLSSQRISLRQE + TDTIELVDDIRYYLLRKYSFEPDDVELFENQDDLEYLKQVGYLEYRKDMGMLDNILAD + LELDV" + centromere 355629..355745 + /note="CEN9; Chromosome IX centromere" + /db_xref="SGD:S000006470" + centromere 355629..355638 + /note="CEN9_CDEI of CEN9" + centromere 355639..355720 + /note="CEN9_CDEII of CEN9" + centromere 355721..355745 + /note="CEN9_CDEIII of CEN9" + gene complement(<356143..>356895) + /gene="SGN1" + /locus_tag="YIR001C" + /gene_synonym="RBP1; RBP29" + /db_xref="GeneID:854817" + mRNA complement(<356143..>356895) + /gene="SGN1" + /locus_tag="YIR001C" + /gene_synonym="RBP1; RBP29" + /product="Sgn1p" + /transcript_id="NM_001179523.1" + /db_xref="GeneID:854817" + CDS complement(356143..356895) + /gene="SGN1" + /locus_tag="YIR001C" + /gene_synonym="RBP1; RBP29" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:10764794]" + /experiment="EXISTENCE:direct assay:GO:0008143 poly(A) + binding [PMID:10764794]" + /experiment="EXISTENCE:genetic interaction:GO:0016071 mRNA + metabolic process [PMID:10764794]" + /experiment="EXISTENCE:physical interaction:GO:0016071 + mRNA metabolic process [PMID:10764794]" + /note="Cytoplasmic RNA-binding protein; contains an RNA + recognition motif (RRM); may have a role in mRNA + translation, as suggested by genetic interactions with + genes encoding proteins involved in translational + initiation" + /codon_start=1 + /product="Sgn1p" + /protein_id="NP_012266.1" + /db_xref="GeneID:854817" + /db_xref="SGD:S000001440" + /translation="MSQEEKVDAKATLKTEISNNKKNDKQELELDELVGKLSIEGTPQ + VSQKLSKEEKHAHQLEADSRSIFVGNITPDVTPEQIEDHFKDCGQIKRITLLYDRNTG + TPKGYGYIEFESPAYREKALQLNGGELKGKKIAVSRKRTNIPGFNRHYNSQNQYFQQW + QWNYPLMAYPNPDTFPYYPPYPPNQSPNQNFGYNKNNYYRSPYNNKNRTFQKKHFNSA + KDSTKNIRSTSQKPVVMPSDNVKSSTQEKDSK" + rep_origin 357160..357396 + /note="ARS920; Autonomously Replicating Sequence" + /db_xref="SGD:S000118399" + gene complement(<357415..>360396) + /gene="MPH1" + /locus_tag="YIR002C" + /db_xref="GeneID:854818" + mRNA complement(<357415..>360396) + /gene="MPH1" + /locus_tag="YIR002C" + /product="3'-5' DNA helicase" + /transcript_id="NM_001179524.1" + /db_xref="GeneID:854818" + CDS complement(357415..360396) + /gene="MPH1" + /locus_tag="YIR002C" + /EC_number="3.6.4.12" + /experiment="EXISTENCE:direct assay:GO:0000781 chromosome, + telomeric region [PMID:26966248]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10880470|PMID:19995966]" + /experiment="EXISTENCE:direct assay:GO:0033677 DNA/RNA + helicase activity [PMID:26966248]" + /experiment="EXISTENCE:direct assay:GO:0043138 3'-5' DNA + helicase activity [PMID:15634678]" + /experiment="EXISTENCE:direct assay:GO:0060543 negative + regulation of strand invasion [PMID:19136626]" + /experiment="EXISTENCE:direct assay:GO:0070336 + flap-structured DNA binding [PMID:19181670]" + /experiment="EXISTENCE:genetic interaction:GO:0033567 DNA + replication, Okazaki fragment processing [PMID:19181670]" + /experiment="EXISTENCE:genetic interaction:GO:0036297 + interstrand cross-link repair [PMID:22912599]" + /experiment="EXISTENCE:mutant phenotype:GO:0000725 + recombinational repair [PMID:19995966]" + /experiment="EXISTENCE:mutant phenotype:GO:0007535 donor + selection [PMID:27257873]" + /experiment="EXISTENCE:mutant phenotype:GO:0060543 + negative regulation of strand invasion [PMID:19136626]" + /experiment="EXISTENCE:physical interaction:GO:0007535 + donor selection [PMID:27257873]" + /note="3'-5' DNA helicase involved in error-free bypass of + DNA lesions; binds flap DNA, stimulates activity of Rad27p + and Dna2p; prevents crossovers between ectopic sequences + by removing substrates for Mus81-Mms4 or Rad1-Rad10 + cleavage; homolog of human FANCM Fanconi anemia protein + that is involved in stabilizing and remodeling blocked + replication forks; member of SF2 DExD/H superfamily of + helicases; nonsense or missense mutations in FANCM can + make people more likely to get cancer" + /codon_start=1 + /product="3'-5' DNA helicase" + /protein_id="NP_012267.1" + /db_xref="GeneID:854818" + /db_xref="SGD:S000001441" + /translation="MASADDYFSDFEDDELDKLYEKAINKSVKETITRRAVPVQKDLH + DNVLPGQKTVYEEIQRDVSFGPTHHELDYDALSFYVYPTNYEVRDYQYTIVHKSLFQN + TLCAIPTGMGKTFIASTVMLNYFRWTKKAKIIFTAPTRPLVAQQIKACLGITGIPSDQ + TAILLDKSRKNREEIWANKRVFFATPQVVENDLKRGVLDPKDIVCLVIDEAHRATGSS + AYTNVVKFIDRFNSSYRLLALTATPASDLEGVQEVVNNLDISKIEIRTEESMDIVKYM + KKRKKEKIEVPLLLEIEDIIEQLGMAVKPVLQQAIELGIYEECDPSQINAFKAMQQSQ + KIIANPTIPEGIKWRNFFILQLLNNVGQMLKRLKIYGIRTFFNYFQNKCTEFTTKYNL + KKSTNKIAAEFYYHPILKNIKNQCENYLSDPKFVGHGKLQCVRDELMDFFQKRGSDSR + VIIFTELRESALEIVKFIDSVADDQIRPHIFIGQARAKEGFDEVKYTRKHAPKGRKKV + ERLHRQEQEKFLEAERTKRAANDKLERSARRTGSSEEAQISGMNQKMQKEVIHNFKKG + EYNVLVCTSIGEEGLDIGEVDLIICYDTTSSPIKNIQRMGRTGRKRDGKIVLLFSSNE + SYKFERAMEDYSTLQALISKQCIDYKKSDRIIPEDIIPECHETLITINDENEIINEME + DVDEVIRYATQCMMGKKVKPKKAITKKKRVQENKKPKKFFMPDNVETSIVSASTLINK + FLVNESGGKQLVTSNENPSKKRKIFKALDNLENDSTEEASSSLETEDEEVSDDNNVFI + AEGQNGCQKDLETAIIRTGESLTTLKPLHNFERPNMALFVNDCGLPTKIEKNVKDIRG + NQHNLEKEKSCTVDKNNMVLSLDDWNFFRNRYIPEGVSFDVEPNFVQYTKGVKVPHCH + KVSKIITLFNDESNDNKKRTIDMNYTKCLARGMLRDEKKFVKVNDKSQVDNNSVNHDS + SQSFTLSNAELDDILGSDSDF" + gene <360885..>362924 + /gene="AIM21" + /locus_tag="YIR003W" + /db_xref="GeneID:854819" + mRNA <360885..>362924 + /gene="AIM21" + /locus_tag="YIR003W" + /product="Aim21p" + /transcript_id="NM_001179525.3" + /db_xref="GeneID:854819" + CDS 360885..362924 + /gene="AIM21" + /locus_tag="YIR003W" + /experiment="EXISTENCE:direct assay:GO:0015629 actin + cytoskeleton [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0030479 actin + cortical patch [PMID:28706108|PMID:29467252]" + /experiment="EXISTENCE:direct assay:GO:0030837 negative + regulation of actin filament polymerization + [PMID:29467252]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:19053807]" + /experiment="EXISTENCE:direct assay:GO:0051015 actin + filament binding [PMID:29467252]" + /experiment="EXISTENCE:mutant phenotype:GO:0034642 + mitochondrion migration along actin filament + [PMID:19300474]" + /experiment="EXISTENCE:physical interaction:GO:0110131 + Aim21-Tda2 complex [PMID:28706108|PMID:29467252]" + /note="Subunit of a complex that associates with actin + filaments; forms a complex with Tda2p that inhibits barbed + end F-actin assembly; elevates actin monomer pools to + increase endocytotic efficiency and to regulate the + distribution of actin between cables and patches; + Aim21p/Tda2p forms a larger complex with actin capping + proteins Cap1p and Cap2p; involved in mitochondrial + migration along actin filaments; recruited to cortical + actin patches by SH3 domain-containing proteins Bbc1p and + Abp1p" + /codon_start=1 + /product="Aim21p" + /protein_id="NP_012268.3" + /db_xref="GeneID:854819" + /db_xref="SGD:S000001442" + /translation="MPSEVTPKVPERPSRRKTSELFPLSGSESGDIKANSEPPTPAGT + PNVPTRRPILKAKTMTSFESGMDQESLPKVPLQRPVRRSTTEELNNVMNNTSKELEEI + ESLISKHNIHNVSRKKSPTSVEEGKVAAIHQNGQRSASDNKTSTNPSPLEKNEHEGAE + GNESAISPSNLVNKSNNEVTEHSDSEDLTEKQKVHAALDNEAGDRSHFEEKLIPGDMK + VQVDVSKDVEEGSLNALPPSGITESDDKAEKFTKHPESSLEELQKHQEQQEEKIFQNP + TDEESTTSLNEKQEGKDNMEVNSQPQGPSDTETVIAATSSNVPSQIASEEENDVPVIP + RSRPKKDFEAHVQKEELPNTQEKRVSEECDSTLISTEEESKIPKIPSERPKRRAPPPV + PKKPSSRIAAFQEMLQKQQQQDLHNNGNSSATTASADIAKKHTDSSITSDTTKADFTS + KLNGLFALPGMVNPGQLPPSLEKKLSSPDTESKLGPQDQSQAKTGPLGGTRRGRGPRG + RKLPSKVASVEKIEEDDNTNKIEIFNNWNVSSSFSKEKVLIDTTPGEQAERALDEKSK + SIPEEQREQSPNKMEAALCPFELDEKEKLPANAESDPLSQLPQTNAVGNRKAISEESL + SPSEAIANRDQNDTTEIQEQQMEDQMEVDMERELSGGYEDVDSALHSEEASFHSL" + rep_origin 362924..363221 + /note="ARS921; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130161" + gene <363221..>364519 + /gene="DJP1" + /locus_tag="YIR004W" + /gene_synonym="ICS1; PAS22" + /db_xref="GeneID:854820" + mRNA <363221..>364519 + /gene="DJP1" + /locus_tag="YIR004W" + /gene_synonym="ICS1; PAS22" + /product="Djp1p" + /transcript_id="NM_001179526.1" + /db_xref="GeneID:854820" + CDS 363221..364519 + /gene="DJP1" + /locus_tag="YIR004W" + /gene_synonym="ICS1; PAS22" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:9679141]" + /experiment="EXISTENCE:direct assay:GO:0005933 cellular + bud [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0006626 protein + targeting to mitochondrion [PMID:30213914]" + /experiment="EXISTENCE:mutant phenotype:GO:0016558 protein + import into peroxisome matrix [PMID:9679141]" + /experiment="EXISTENCE:mutant phenotype:GO:0045040 protein + insertion into mitochondrial outer membrane + [PMID:23959800]" + /note="ER-associated chaperone involved in protein + targeting; redirects mitochondrial membrane protein + precursors to mitochondrial translocation system; required + for peroxisomal protein import and involved in peroxisome + assembly; facilitates import of Mim1p and Mim2p into the + mitochondrial outer membrane; homologous to E. coli DnaJ" + /codon_start=1 + /product="Djp1p" + /protein_id="NP_012269.1" + /db_xref="GeneID:854820" + /db_xref="SGD:S000001443" + /translation="MVVDTEYYDLLGVSTTASSIEIKKAYRKKSIQEHPDKNPNDPTA + TERFQAISEAYQVLGDDDLRAKYDKYGRKEAIPQGGFEDAAEQFSVIFGGDAFASYIG + ELMLLKNLQKTEELNAEDEAEKEKENVETMEESPADGKTNGTTNAVDAALGNTNEKDD + KNKARTTSGNLTVHDGNKKNEQVGAEAKKKKTKLEQFEEEQEVEKQKRVDQLSKTLIE + RLSILTESVYDDACKDSFKKKFEEEANLLKMESFGLDILHTIGDVYYEKAEIFLASQN + LFGMGGIFHSMKAKGGVFMDTLRTVSAAIDAQNTMKELEKMKEASTNNEPLFDKDGNE + QIKPTTEELAQQEQLLMGKVLSAAWHGSKYEITSTLRGVCKKVLEDDSVSKKTLIRRA + EAMKLLGEVFKKTFRTKVEQEEAQIFEELVAEATKKKRHT" + gene <364889..>365335 + /gene="IST3" + /locus_tag="YIR005W" + /gene_synonym="SNU17" + /db_xref="GeneID:854821" + mRNA <364889..>365335 + /gene="IST3" + /locus_tag="YIR005W" + /gene_synonym="SNU17" + /product="U2 snRNP complex subunit IST3" + /transcript_id="NM_001179527.1" + /db_xref="GeneID:854821" + CDS 364889..365335 + /gene="IST3" + /locus_tag="YIR005W" + /gene_synonym="SNU17" + /experiment="EXISTENCE:direct assay:GO:0000384 first + spliceosomal transesterification activity [PMID:11287609]" + /experiment="EXISTENCE:direct assay:GO:0000398 mRNA + splicing, via spliceosome [PMID:15565172]" + /experiment="EXISTENCE:direct assay:GO:0005686 U2 snRNP + [PMID:16314500]" + /experiment="EXISTENCE:direct assay:GO:0070274 RES complex + [PMID:15565172]" + /experiment="EXISTENCE:mutant phenotype:GO:0000245 + spliceosomal complex assembly [PMID:11287609]" + /experiment="EXISTENCE:mutant phenotype:GO:0000349 + generation of catalytic spliceosome for first + transesterification step [PMID:11287609]" + /experiment="EXISTENCE:mutant phenotype:GO:0000384 first + spliceosomal transesterification activity [PMID:11287609]" + /experiment="EXISTENCE:mutant phenotype:GO:0006406 mRNA + export from nucleus [PMID:15565172]" + /note="Component of the U2 snRNP; required for the first + catalytic step of splicing and for spliceosomal assembly; + interacts with Rds3p and is required for Mer1p-activated + splicing; diploid mutants have a specific defect in MATa1 + pre-mRNA splicing which leads to haploid gene expression + in diploids" + /codon_start=1 + /product="U2 snRNP complex subunit IST3" + /protein_id="NP_012270.1" + /db_xref="GeneID:854821" + /db_xref="SGD:S000001444" + /translation="MNKIQQINDKELQSGILSPHQSWHNEYKDNAYIYIGNLNRELTE + GDILTVFSEYGVPVDVILSRDENTGESQGFAYLKYEDQRSTILAVDNLNGFKIGGRAL + KIDHTFYRPKRSLQKYYEAVKEELDRDIVSKNNAEKLILAKKDQPN" + gene complement(<365466..>369908) + /gene="PAN1" + /locus_tag="YIR006C" + /gene_synonym="DIM2; MDP3; MIP3" + /db_xref="GeneID:854822" + mRNA complement(<365466..>369908) + /gene="PAN1" + /locus_tag="YIR006C" + /gene_synonym="DIM2; MDP3; MIP3" + /product="Pan1p" + /transcript_id="NM_001179528.3" + /db_xref="GeneID:854822" + CDS complement(365466..369908) + /gene="PAN1" + /locus_tag="YIR006C" + /gene_synonym="DIM2; MDP3; MIP3" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:17967424]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:17967424]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:11914276]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0030479 actin + cortical patch [PMID:14622601|PMID:16824951]" + /experiment="EXISTENCE:direct assay:GO:0043332 mating + projection tip [PMID:19053807]" + /experiment="EXISTENCE:direct assay:GO:0071933 Arp2/3 + complex binding [PMID:11433303]" + /experiment="EXISTENCE:direct assay:GO:1990964 actin + cytoskeleton-regulatory complex + [PMID:10594004|PMID:17151356]" + /experiment="EXISTENCE:direct assay:GO:2000601 positive + regulation of Arp2/3 complex-mediated actin nucleation + [PMID:16824951|PMID:11433303|PMID:17151356]" + /experiment="EXISTENCE:genetic interaction:GO:0061709 + reticulophagy [PMID:35101986]" + /experiment="EXISTENCE:mutant phenotype:GO:0000147 actin + cortical patch assembly [PMID:18177206]" + /experiment="EXISTENCE:mutant phenotype:GO:0006897 + endocytosis [PMID:8978817]" + /experiment="EXISTENCE:mutant phenotype:GO:0007120 axial + cellular bud site selection [PMID:8756649]" + /experiment="EXISTENCE:mutant phenotype:GO:0007121 bipolar + cellular bud site selection [PMID:8756649]" + /experiment="EXISTENCE:physical interaction:GO:1990964 + actin cytoskeleton-regulatory complex [PMID:17151356]" + /note="Part of actin cytoskeleton-regulatory complex + Pan1p-Sla1p-End3p; associates with actin patches on cell + cortex; promotes protein-protein interactions essential + for endocytosis; regulates late stages of endocytosis; + binds to and activates Arp2/3 complex in vitro; + phosphorylation of Thr-1225 is regulated by MAPK Hog1p in + response to osmotic stress" + /codon_start=1 + /product="Pan1p" + /protein_id="NP_012271.3" + /db_xref="GeneID:854822" + /db_xref="SGD:S000001445" + /translation="MYNPYQQQGMGYQQQQQQQQQQPNGFYPQQQQGQSSNQPQGQPQ + PQQQMAFNQPQATGIGGMPQSFGNSFSSMPQQPQTGYNNNGNNGSVYGNGNFGQQPQQ + QQQQAKPQHTGYVPNSSMPMMNTTGTMPPPNPAQQPQLQSIQPQGTGYYQAANTANVH + SVQPLQSQGTGYYVSTPNLISSNQTQQPLQAQGTGYYQSQPQQVPPPQQAQSLQPLKP + QQTGFYLQPQNQAPLEPLKPTATGFVNSFANNGLNNDIKIPAIRLSFITAQDQAKFET + LFRSIVTNGSNTVSGANCRKILMRSGLPPSQLARIWTLCDTSKAGELLFPEFALAMHL + INDVLQGDTIPYELDSKTKNEVSSFIDAINLSIANQDSSANDAPKTPFDEFITAGVQN + LQPQPTGYMPQTSFGIPLQSQITGGGVASALNPQSTGFMAPTTFNMSMNTGTPGLNPQ + ITGGAPASMQPNITGNALQPQTTGMMPQTTGMMPQTTGMMPQTSFGVNLGPQLTGGAL + QSQYTGGYGSVMPQQSGPASMPNLSFNQQGLQSQLTGLQPQPTGFLPPSNFSATMPLT + AQKTGFGNNEIYTKSNFNNNLIDNSSQDKISTEEKSLFYKIFETFDTQNKGLLDSPTA + VEIFRKSGLNRADLEQIWNLCDINNTGQLNKQEFALGMHLVYGKLNGKPIPNVLPSSL + IPSSTKLLDNLKNQLKTEPTTTKEKPSFGKIDALSYKNNDDDVLPNYRNRRKVYSAKN + EEQSSFSSPSAKSVNHSSSTLQTDDISVDKTVEKKTAKPKYAGFSREINLKNIASLEN + EIKNISNPENCYDSSIPSDLTSRFDAIIAKLPNLFNEISTIDNEITNAKIQLYRKKNP + SSIIGSGPNGEITENDRKKAKSRALLRARMSALTGKSTESEDSLSMEDEQQSAEIKRI + QQENGKNQEIIKDIRSSISDISASLKSTMTGSNMISNQEFERWEFGIGLEDGVREFLD + DLKSNSNKSVTESSPFVPSSTPTPVDDRSSSPSYSQFKTAEERAAYLKEQAKKRMKEK + LAKFDKNRRNVTQSSRSISSENSREQPQQIAGSSNLVEPRATPFQEEKYVEVAQPTQP + VQSTQPVQPTQPVQPTQPVQPTQPVQPTQPVQPTQPVQNVYNAKQESDDEDEDDEEKR + LQEELKRLKLKKKADKEKRLAALRKQIEDAQNESDEEETNGKDNFGGHVNVPQAAPVA + PSAAFSQNSTNAPRSVHAAVTPAAGKNSTGLPSTTMGHNPYFKDASASSTSTFDARAA + EMQRRIQRGLDEDEDDGWSDEDESNNRVAVDNKVEEAKIGHPDHARAPPVTAAPLPSV + TPVPPAVPVPQANTSNEKSSPIPIAPIPPSVTQEPPVPLAPPLPAVDGFQEPPIPSAP + AIATAVQKSGSSTPALAGGVLPPPPPLPTQQASTSEPIIAHVDNYNGAEKGTGAYGSD + SDDDVLSIPESVGTDEEEEGAQPVSTAGIPSIPPAGIPPPPPLP" + gene 370417..370488 + /locus_tag="YNCI0011W" + /db_xref="GeneID:854823" + tRNA 370417..370488 + /locus_tag="YNCI0011W" + /product="tRNA-Glu" + /experiment="EXISTENCE:curator inference:GO:0005829 + cytosol [PMID:9023104]" + /experiment="EXISTENCE:curator inference:GO:0006414 + translational elongation [PMID:9023104]" + /note="Glutamate tRNA (tRNA-Glu), predicted by tRNAscan-SE + analysis; thiolation of uridine at wobble position (34) + requires Ncs6p" + /db_xref="GeneID:854823" + /db_xref="SGD:S000006556" + gene <370704..>372998 + /gene="EGH1" + /locus_tag="YIR007W" + /db_xref="GeneID:854824" + mRNA <370704..>372998 + /gene="EGH1" + /locus_tag="YIR007W" + /product="hydrolase" + /transcript_id="NM_001179529.3" + /db_xref="GeneID:854824" + CDS 370704..372998 + /gene="EGH1" + /locus_tag="YIR007W" + /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type + vacuole membrane [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26116408]" + /experiment="EXISTENCE:direct assay:GO:0050295 + steryl-beta-glucosidase activity [PMID:26116408]" + /experiment="EXISTENCE:mutant phenotype:GO:1904462 + ergosteryl 3-beta-D-glucoside catabolic process + [PMID:26116408]" + /note="Steryl-beta-glucosidase with broad specificity for + aglycones; has a role in ergosteryl-beta-glucoside + catabolism; required for normal vacuolar morphology; has + similarity to the C. neoformans + ergosteryl-beta-glucosidase EGCrP2; localizes to the + cytosol" + /codon_start=1 + /product="hydrolase" + /protein_id="NP_012272.3" + /db_xref="GeneID:854824" + /db_xref="SGD:S000001446" + /translation="MPAKIHISADGQFCDKDGNEIQLRGVNLDPSVKIPAKPFLSTHA + PIENDTFFEDADKVSFINHPLVLDDIEQHIIRLKSLGYNTIRLPFTWESLEHAGPGQY + DFDYMDYIVEVLTRINSVQQGMYIYLDPHQDVWSRFSGGSGAPLWTLYCAGFQPANFL + ATDAAILHNYYIDPKTGREVGKDEESYPKMVWPTNYFKLACQTMFTLFFGGKQYAPKC + TINGENIQDYLQGRFNDAIMTLCARIKEKAPELFESNCIIGLESMNEPNCGYIGETNL + DVIPKERNLKLGKTPTAFQSFMLGEGIECTIDQYKRTFFGFSKGKPCTINPKGKKAWL + SAEERDAIDAKYNWERNPEWKPDTCIWKLHGVWEIQNGKRPVLLKPNYFSQPDATVFI + NNHFVDYYTGIYNKFREFDQELFIIIQPPVMKPPPNLQNSKILDNRTICACHFYDGMT + LMYKTWNKRIGIDTYGLVNKKYSNPAFAVVLGENNIRKCIRKQLSEMQKDAKSMLGKK + VPVFFTEIGIPFDMDDKKAYITNDYSSQTAALDALGFALEGSNLSYTLWCYCSINSHI + WGDNWNNEDFSIWSPDDKPLYHDTRAKTPTPEPSPASTVASVSTSTSKSGSSQPPSFI + KPDNHLDLDSPSCTLKSDLSGFRALDAIMRPFPIQIHGRFEFAEFNLCNKSYLLKLVG + KTTPEQITVPTYIFIPRHHFTPSRLSIRSSSGHYTYNTDYQVLEWFHEPGHQFIEICA + KSKSRPNTPGSDTSNDLPAECVIS" + gene complement(<373077..>374306) + /gene="PRI1" + /locus_tag="YIR008C" + /db_xref="GeneID:854825" + mRNA complement(<373077..>374306) + /gene="PRI1" + /locus_tag="YIR008C" + /product="DNA primase subunit PRI1" + /transcript_id="NM_001179530.1" + /db_xref="GeneID:854825" + CDS complement(373077..374306) + /gene="PRI1" + /locus_tag="YIR008C" + /experiment="EXISTENCE:direct assay:GO:0003697 + single-stranded DNA binding [PMID:20404922]" + /experiment="EXISTENCE:direct assay:GO:0003896 DNA primase + activity [PMID:3888995|PMID:2644256|PMID:3061469]" + /experiment="EXISTENCE:direct assay:GO:0005658 alpha DNA + polymerase:primase complex [PMID:3888995|PMID:22593576]" + /experiment="EXISTENCE:direct assay:GO:0006269 DNA + replication, synthesis of RNA primer [PMID:2644256]" + /experiment="EXISTENCE:direct assay:GO:0043596 nuclear + replication fork [PMID:16103218]" + /experiment="EXISTENCE:genetic interaction:GO:0003896 DNA + primase activity [PMID:8436268]" + /experiment="EXISTENCE:mutant phenotype:GO:0003896 DNA + primase activity [PMID:8436268]" + /experiment="EXISTENCE:mutant phenotype:GO:0006260 DNA + replication [PMID:2023935]" + /note="Subunit of DNA primase; DNA primase is required for + DNA synthesis and double-strand break repair" + /codon_start=1 + /product="DNA primase subunit PRI1" + /protein_id="NP_012273.1" + /db_xref="GeneID:854825" + /db_xref="SGD:S000001447" + /translation="MTNSVKTNGPSSSDMEYYYKSLYPFKHIFNWLNHSPKPSRDMIN + REFAMAFRSGAYKRYNSFNSVQDFKAQIEKANPDRFEIGAIYNKPPRERDTLLKSELK + ALEKELVFDIDMDDYDAFRTCCSGAQVCSKCWKFISLAMKITNTALREDFGYKDFIWV + FSGRRGAHCWVSDKRARALTDVQRRNVLDYVNVIRDRNTDKRLALKRPYHPHLARSLE + QLKPFFVSIMLEEQNPWEDDQHAIQTLLPALYDKQLIDSLKKYWLDNPRRSSKEKWND + IDQIATSLFKGPKQDSHIIKLRECKEDLVLMTLYPKLDVEVTKQTIHLLKAPFCIHPA + TGNVCVPIDESFAPEKAPKLIDLQTEMEKNNDVSLTALQPFINQFQAYVSSLLKNELG + SVKREREDDDEPASLDF" + gene <374525..>374860 + /gene="MSL1" + /locus_tag="YIR009W" + /gene_synonym="YIB9" + /db_xref="GeneID:854826" + mRNA <374525..>374860 + /gene="MSL1" + /locus_tag="YIR009W" + /gene_synonym="YIB9" + /product="U2 snRNP complex subunit MSL1" + /transcript_id="NM_001179531.1" + /db_xref="GeneID:854826" + CDS 374525..374860 + /gene="MSL1" + /locus_tag="YIR009W" + /gene_synonym="YIB9" + /experiment="EXISTENCE:direct assay:GO:0071004 U2-type + prespliceosome [PMID:16618970]" + /experiment="EXISTENCE:mutant phenotype:GO:0000398 mRNA + splicing, via spliceosome [PMID:9799242]" + /experiment="EXISTENCE:physical interaction:GO:0030620 U2 + snRNA binding [PMID:8649387]" + /note="U2B component of U2 snRNP; involved in splicing, + binds the U2 snRNA stem-loop IV in vitro but requires + association of Lea1p for in vivo binding; does not contain + the conserved C-terminal RNA binding domain found in other + family members" + /codon_start=1 + /product="U2 snRNP complex subunit MSL1" + /protein_id="NP_012274.1" + /db_xref="GeneID:854826" + /db_xref="SGD:S000001448" + /translation="MVEPARKKQRIDRDTHHTVAEPVTEAKNTLYVSQLNEKINMQRL + RVNLFLLFATFGEVLKVSMNFKKQRGQAFITMRTIDQASLAQISLNGERFFGKPLKVE + FSKSETKTL" + gene <375431..>377161 + /gene="DSN1" + /locus_tag="YIR010W" + /db_xref="GeneID:854827" + mRNA <375431..>377161 + /gene="DSN1" + /locus_tag="YIR010W" + /product="MIND complex subunit DSN1" + /transcript_id="NM_001179532.3" + /db_xref="GeneID:854827" + CDS 375431..377161 + /gene="DSN1" + /locus_tag="YIR010W" + /experiment="EXISTENCE:direct assay:GO:0000444 MIS12/MIND + type complex [PMID:14633972]" + /experiment="EXISTENCE:direct assay:GO:0000776 kinetochore + [PMID:14657030|PMID:24402315]" + /experiment="EXISTENCE:direct assay:GO:0000922 spindle + pole [PMID:12455957]" + /experiment="EXISTENCE:direct assay:GO:0007059 chromosome + segregation [PMID:12455957]" + /experiment="EXISTENCE:genetic interaction:GO:0051455 + spindle attachment to meiosis I kinetochore + [PMID:23861669]" + /note="Essential component of the outer kinetochore MIND + complex; joins kinetochore subunits contacting DNA to + those contacting microtubules; phosphorylation promotes + interaction between outer and inner kinetochore proteins; + kinetochore receptor for monopolin, via interaction with + Csm1p; essential for both meiotic and mitotic chromosome + segregation; MIND complex consists of Mtw1p, Nnf1p, Nsl1p + and Dsn1p; phosphorylated by monopolin subunit, Hrr25p and + Aurora kinase, Ipl1p; modified by sumoylation" + /codon_start=1 + /product="MIND complex subunit DSN1" + /protein_id="NP_012275.3" + /db_xref="GeneID:854827" + /db_xref="SGD:S000001449" + /translation="MSLEPTQTVSGTPPMLHQRTHKQVYPLRMETIPILESDSKATLQ + SNEPTQKDEEETEYFENKQSVSNLSPDLKFKRHKNKHIQGFPTLGERLDNLQDIKKAK + RVENFNSSAPIADDNHSGDATANATANATANATANVNASAMPAPYMPYYYYYHPMNAP + TPAMIPYPGSPMHSIMPNSSLQPFYSQPTAAGGPDMTTPQNISSSQQLLPAPQLFPYG + SFHQQQLQQPHYIQRTRERKKSIGSQRGRRLSMLASQANGGSTIISPHKDIPEEDFYT + VVGNASFGKNLQIRQLFNWCLMRSLHKLELKAKNQEEEGELEHLTKKSKLESTKAETD + YVDPKRLAMVIIKEFVDDLKKDHIAIDWEDEEKYEDEDEEKILDNTENYDDTELRQLF + QENDDDDDDDDEVDYSEIQRSRRKFSERRKALPKEPKKLLPNSKNVENTKNLSILTSK + VNAIKNEVKEWAVTLDTSRPDLEWQELTSFSSQPLEPLSDTEEPDLAIADVETKLETK + VDELRYQSHILNSHSLALNEITNSKVNKLNIETMRKISSETDDDHSQVINPQQLLKGL + SLSFSKKLDL" + gene complement(<377287..>378246) + /gene="STS1" + /locus_tag="YIR011C" + /gene_synonym="DBF8; SSM5" + /db_xref="GeneID:854828" + mRNA complement(<377287..>378246) + /gene="STS1" + /locus_tag="YIR011C" + /gene_synonym="DBF8; SSM5" + /product="Sts1p" + /transcript_id="NM_001179533.1" + /db_xref="GeneID:854828" + CDS complement(377287..378246) + /gene="STS1" + /locus_tag="YIR011C" + /gene_synonym="DBF8; SSM5" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:10913188]" + /experiment="EXISTENCE:direct assay:GO:0070628 proteasome + binding [PMID:17916559]" + /experiment="EXISTENCE:mutant phenotype:GO:0007059 + chromosome segregation [PMID:8065366]" + /experiment="EXISTENCE:mutant phenotype:GO:0031144 + proteasome localization [PMID:21075847]" + /experiment="EXISTENCE:mutant phenotype:GO:0071630 nuclear + protein quality control by the ubiquitin-proteasome system + [PMID:21075847]" + /note="Protein required for localizing proteasomes to the + nucleus; involved in cotranslational protein degradation; + mediates interaction between nuclear import factor Srp1p + and the proteasome; Sts1p and Srp1p couple proteasomes to + nascent polypeptides emerging from the ribosome for + cotranslational degradation; involved in + ubiquitin-mediated protein degradation" + /codon_start=1 + /product="Sts1p" + /protein_id="NP_012276.1" + /db_xref="GeneID:854828" + /db_xref="SGD:S000001450" + /translation="MMGFEWGFKPSSKITQSTVSSQGTGNVMIPTAGVKQKRRYANEE + QEEEELPRNKNVMKYGGVSKRRPQPGSLIRGQPLPLQRGMELMNKNQLQQLLVDLMTK + HPEIQQSVHTRVIGLDFSIQKCLDMLKQKSEAVYQSIPYNRSYESNKLDDYAFVRMKP + QILEFLNCLVDFILDNIPPRLENLHASLKFLDICTELVIKLPRFELASNNYYYDKCIE + QLSHVWCTLIEHVARDRIILLADNSSVWKSHMTRLQVYNEHSNGLLERPLQLFKSLDM + GSPSAASSSTLSLQESIIYHHDTMTANENNNNSGSAATDSPFN" + gene <378486..>379781 + /gene="SQT1" + /locus_tag="YIR012W" + /db_xref="GeneID:854829" + mRNA <378486..>379781 + /gene="SQT1" + /locus_tag="YIR012W" + /product="Sqt1p" + /transcript_id="NM_001179534.1" + /db_xref="GeneID:854829" + CDS 378486..379781 + /gene="SQT1" + /locus_tag="YIR012W" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:9271392]" + /experiment="EXISTENCE:direct assay:GO:0051082 unfolded + protein binding [PMID:26112308]" + /experiment="EXISTENCE:mutant phenotype:GO:0000027 + ribosomal large subunit assembly [PMID:9271392]" + /experiment="EXISTENCE:mutant phenotype:GO:0042273 + ribosomal large subunit biogenesis [PMID:26112308]" + /note="Specific assembly chaperone for ribosomal protein + Rpl10p; co-translationally associates with nascent Rpl10p, + preventing aggregation; involved in biogenesis of the + ribosomal large subunit; contains multiple WD repeats; + interacts genetically and physically with Qsr1p; protein + abundance increases in response to DNA replication stress" + /codon_start=1 + /product="Sqt1p" + /protein_id="NP_012277.1" + /db_xref="GeneID:854829" + /db_xref="SGD:S000001451" + /translation="MEPQEEFITTEEVEQEIVPTVEVEQDVPVDIEGENDDDDEMMND + DEEALEVDMSNNSLTYFDKHTDSVFAIGHHPNLPLVCTGGGDNLAHLWTSHSQPPKFA + GTLTGYGESVISCSFTSEGGFLVTADMSGKVLVHMGQKGGAQWKLASQMQEVEEIVWL + KTHPTIARTFAFGATDGSVWCYQINEQDGSLEQLMSGFVHQQDCSMGEFINTDKGENT + LELVTCSLDSTIVAWNCFTGQQLFKITQAEIKGLEAPWISLSLAPETLTKGNSGVVAC + GSNNGLLAVINCNNGGAILHLSTVIELKPEQDELDASIESISWSSKFSLMAIGLVCGE + ILLYDTSAWRVRHKFVLEDSVTKLMFDNDDLFASCINGKVYQFNARTGQEKFVCVGHN + MGVLDFILLHPVANTGTEQKRKVITAGDEGVSLVFEVPN" + gene complement(<380019..>380384) + /gene="GAT4" + /locus_tag="YIR013C" + /db_xref="GeneID:854830" + mRNA complement(<380019..>380384) + /gene="GAT4" + /locus_tag="YIR013C" + /product="Gat4p" + /transcript_id="NM_001179535.3" + /db_xref="GeneID:854830" + CDS complement(380019..380384) + /gene="GAT4" + /locus_tag="YIR013C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:24390141]" + /experiment="EXISTENCE:direct assay:GO:0043565 + sequence-specific DNA binding [PMID:19158363]" + /experiment="EXISTENCE:direct assay:GO:0045944 positive + regulation of transcription by RNA polymerase II + [PMID:10392447]" + /note="Protein containing GATA family zinc finger motifs; + involved in spore wall assembly; sequence similarity to + GAT3, and the double mutant gat3 gat4 exhibits reduced + dityrosine fluorescence relative to the single mutants" + /codon_start=1 + /product="Gat4p" + /protein_id="NP_012278.3" + /db_xref="GeneID:854830" + /db_xref="SGD:S000001452" + /translation="MSTKLPIVISNGTAFKKVPVQLLLNSGSEAQHGLPRNADSQPAR + PRTGITRTCGQCGEIKTSLQWREGPNGAACLCNACGLFFRKLILRFGRAAAKRYMEQI + KGTGTKRRIPKELTGTVRF" + gene <381086..>381814 + /gene="VLD1" + /locus_tag="YIR014W" + /db_xref="GeneID:854831" + mRNA <381086..>381814 + /gene="VLD1" + /locus_tag="YIR014W" + /product="Vld1p" + /transcript_id="NM_001179536.3" + /db_xref="GeneID:854831" + CDS 381086..381814 + /gene="VLD1" + /locus_tag="YIR014W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0044695 Dsc E3 + ubiquitin ligase complex [PMID:29355480]" + /experiment="EXISTENCE:mutant phenotype:GO:0031503 + protein-containing complex localization [PMID:29355480]" + /note="Component of Dsc E3 ligase complex in vacuolar + membranes; green fluorescent protein (GFP)-fusion protein + localizes to the vacuole; expression directly regulated by + the metabolic and meiotic transcriptional regulator Ume6p; + YIR014W is a non-essential gene" + /codon_start=1 + /product="Vld1p" + /protein_id="NP_012279.4" + /db_xref="GeneID:854831" + /db_xref="SGD:S000001453" + /translation="MLHLEDDNGRQRSVIANLQKFVYCCLYLRFIKDGSLFLILLGWI + ISSLCDFIQELTLRYLKKNYLEVGRDNDQEDDESLAIRGLETPIVRMIINKAIRYYQG + LILLETAYCIVYHIRLDVSRDICSKPYGFVIMLLIREFTCPVPTAFPSKLLLVLLDIL + LLFCQIVIINGSLSSSLQNVKLIVKELNAEEEGALNILKLNTWHMDATGPELIVLKNH + DKSIPQQADGDDATEITPLLNIAE" + gene <381948..>382382 + /gene="RPR2" + /locus_tag="YIR015W" + /db_xref="GeneID:854832" + mRNA <381948..>382382 + /gene="RPR2" + /locus_tag="YIR015W" + /product="ribonuclease P protein subunit RPR2" + /transcript_id="NM_001179537.1" + /db_xref="GeneID:854832" + CDS 381948..382382 + /gene="RPR2" + /locus_tag="YIR015W" + /EC_number="3.1.26.5" + /experiment="EXISTENCE:direct assay:GO:0004526 + ribonuclease P activity [PMID:19095620]" + /experiment="EXISTENCE:direct assay:GO:0005655 nucleolar + ribonuclease P complex [PMID:19095620|PMID:9620854]" + /experiment="EXISTENCE:direct assay:GO:0034965 intronic + box C/D RNA processing [PMID:18713869]" + /experiment="EXISTENCE:mutant phenotype:GO:0008033 tRNA + processing [PMID:9620854]" + /note="Subunit of nuclear RNase P; nuclear RNase P cleaves + tRNA precursors to generate mature 5' ends and facilitates + turnover of nuclear RNAs; not shared between RNase MRP and + RNase P, in contrast to all other RNase P protein + subunits; increases the activity and thermal stability of + the complex, along with Pop2p; protein abundance increases + in response to DNA replication stress" + /codon_start=1 + /product="ribonuclease P protein subunit RPR2" + /protein_id="NP_012280.1" + /db_xref="GeneID:854832" + /db_xref="SGD:S000001454" + /translation="MGKKAHGGKMKPEIDENGTLLVPPPRTIANQDHFHRLNYLYQIS + AYQTRARQKARTDAHTPLARNYIKSMDLISKKTKTSLLPTIKRTICKKCHRLLWTPKK + LEITSDGALSVMCGCGTVKRFNIGADPNYRTYSEREGNLLNS" + gene <382628..>383425 + /locus_tag="YIR016W" + /db_xref="GeneID:854833" + mRNA <382628..>383425 + /locus_tag="YIR016W" + /product="uncharacterized protein" + /transcript_id="NM_001179538.1" + /db_xref="GeneID:854833" + CDS 382628..383425 + /locus_tag="YIR016W" + /note="hypothetical protein; expression directly regulated + by the metabolic and meiotic transcriptional regulator + Ume6p; overexpression causes a cell cycle delay or arrest; + non-essential gene; YIR016W has a paralog, YOL036W, that + arose from the whole genome duplication" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012281.1" + /db_xref="GeneID:854833" + /db_xref="SGD:S000001455" + /translation="MSGTRCLLGVGLPVDVTATETLTHDEQGPGVEPGPCSRGSSIDG + LLPSLLGPHDDVDDDSAAFHKYMTLSRDGAGAIHAPSLVEDASRNDDDDDDEDDDDSS + MSRDLSKALDMSSSSSSSPRVQSRRHRSSVSAISAILHQGKSGREDITGSLSVPAEQE + KLSFLAKASSIFFRRNSMPRDKHTHSVCPASRPDSERFIVTSAAAQSLRRQQQLEDAQ + YARVITNFRTIGWCSPSEIESVEYKRSLINAEWDEKISLLSHAQCYK" + gene complement(<383556..>384119) + /gene="MET28" + /locus_tag="YIR017C" + /db_xref="GeneID:854834" + mRNA complement(<383556..>384119) + /gene="MET28" + /locus_tag="YIR017C" + /product="Met28p" + /transcript_id="NM_001179539.3" + /db_xref="GeneID:854834" + CDS complement(383556..384119) + /gene="MET28" + /locus_tag="YIR017C" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0061629 RNA + polymerase II-specific DNA-binding transcription factor + binding [PMID:8665859]" + /experiment="EXISTENCE:direct assay:GO:0089713 + Cbf1-Met4-Met28 complex [PMID:8665859|PMID:9171357]" + /experiment="EXISTENCE:direct assay:GO:2000679 positive + regulation of transcription regulatory region DNA binding + [PMID:9171357]" + /experiment="EXISTENCE:mutant phenotype:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:8665859]" + /experiment="EXISTENCE:mutant phenotype:GO:0031335 + regulation of sulfur amino acid metabolic process + [PMID:8665859]" + /experiment="EXISTENCE:physical interaction:GO:0061629 RNA + polymerase II-specific DNA-binding transcription factor + binding [PMID:8665859]" + /note="bZIP transcriptional activator in the + Cbf1p-Met4p-Met28p complex; participates in the regulation + of sulfur metabolism" + /codon_start=1 + /product="Met28p" + /protein_id="NP_012282.3" + /db_xref="GeneID:854834" + /db_xref="SGD:S000001456" + /translation="MSAKQGWEKKSTNIDIASRKGMNVNNLSEHLQNLISSDSELGSR + LLSLLLVSSGNAEELISMINNGQDVSQFKKLREPRKGKVAATTAVVVKEEEAPVSTSN + ELDKIKQERRRKNTEASQRFRIRKKQKNFENMNKLQNLNTQINKLRDRIEQLNKENEF + WKAKLNDINEIKSLKLLNDIKRRNMGR" + gene <384609..>385346 + /gene="YAP5" + /locus_tag="YIR018W" + /db_xref="GeneID:854835" + mRNA <384609..>385346 + /gene="YAP5" + /locus_tag="YIR018W" + /product="Yap5p" + /transcript_id="NM_001179540.1" + /db_xref="GeneID:854835" + CDS 384609..385346 + /gene="YAP5" + /locus_tag="YIR018W" + /experiment="EXISTENCE:direct assay:GO:0000785 chromatin + [PMID:12464632]" + /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding + transcription factor activity, RNA polymerase II-specific + [PMID:18287073]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:18070921]" + /experiment="EXISTENCE:direct assay:GO:0045944 positive + regulation of transcription by RNA polymerase II + [PMID:9372930]" + /experiment="EXISTENCE:mutant phenotype:GO:0000122 + negative regulation of transcription by RNA polymerase II + [PMID:18287073]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:18287073|PMID:18070921]" + /note="Basic leucine zipper (bZIP) iron-sensing + transcription factor; senses high-iron conditions via two + Fe/S clusters bound to its activator domain; involved in + diauxic shift; YAP5 has a paralog, YAP7, that arose from + the whole genome duplication" + /codon_start=1 + /product="Yap5p" + /protein_id="NP_012283.1" + /db_xref="GeneID:854835" + /db_xref="SGD:S000001457" + /translation="MALPLIKPKESEESHLALLSKIHVSKNWKLPPRLPHRAAQRRKR + VHRLHEDYETEENDEELQKKKRQNRDAQRAYRERKNNKLQVLEETIESLSKVVKNYET + KLNRLQNELQAKESENHALKQKLETLTLKQASVPAQDPILQNLIENFKPMKAIPIKYN + TAIKRHQHSTELPSSVKCGFCNDNTTCVCKELETDHRKSDDGVATEQKDMSMPHAECN + NKDNPNGLCSNCTNIDKSCIDIRSIIH" + gene complement(<385564..>385701) + /locus_tag="YIR018C-A" + /db_xref="GeneID:1466494" + mRNA complement(<385564..>385701) + /locus_tag="YIR018C-A" + /product="uncharacterized protein" + /transcript_id="NM_001184655.1" + /db_xref="GeneID:1466494" + CDS complement(385564..385701) + /locus_tag="YIR018C-A" + /note="hypothetical protein; identified by expression + profiling and mass spectrometry" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_878099.1" + /db_xref="GeneID:1466494" + /db_xref="SGD:S000028837" + /translation="MPSDYTSHYPVILIKKKKKKIAGMYRHSKRYLEIMSTASAQFVG + N" + gene complement(<389572..>393675) + /gene="FLO11" + /locus_tag="YIR019C" + /gene_synonym="MUC1; STA4" + /db_xref="GeneID:854836" + mRNA complement(<389572..>393675) + /gene="FLO11" + /locus_tag="YIR019C" + /gene_synonym="MUC1; STA4" + /product="Flo11p" + /transcript_id="NM_001179541.3" + /db_xref="GeneID:854836" + CDS complement(389572..393675) + /gene="FLO11" + /locus_tag="YIR019C" + /gene_synonym="MUC1; STA4" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005576 + extracellular region [PMID:20619652]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:11027318]" + /experiment="EXISTENCE:direct assay:GO:0005935 cellular + bud neck [PMID:19799621]" + /experiment="EXISTENCE:direct assay:GO:0030447 filamentous + growth [PMID:12072450]" + /experiment="EXISTENCE:mutant phenotype:GO:0000128 + flocculation [PMID:19160455]" + /experiment="EXISTENCE:mutant phenotype:GO:0001403 + invasive growth in response to glucose limitation + [PMID:12150916|PMID:19087208|PMID:8710886]" + /experiment="EXISTENCE:mutant phenotype:GO:0007124 + pseudohyphal growth [PMID:8710886]" + /experiment="EXISTENCE:mutant phenotype:GO:0043709 cell + adhesion involved in single-species biofilm formation + [PMID:11157168]" + /experiment="EXISTENCE:mutant phenotype:GO:0090606 + single-species surface biofilm formation + [PMID:12024013|PMID:19160455]" + /experiment="EXISTENCE:mutant phenotype:GO:0098609 + cell-cell adhesion [PMID:19160455|PMID:21875945]" + /note="GPI-anchored cell surface glycoprotein (flocculin); + required for pseudohyphal and invasive growth, + flocculation, and biofilm formation; major determinant of + colony morphology; QTL that controls chronological life + span; carries intragenic tandem repeats that are expanded + in different strains; required for formation of fibrous + interconnections between cells; role in co-flocculation + with other yeast species; cleaved and shed from cells, + contributing to their surface properties" + /codon_start=1 + /product="Flo11p" + /protein_id="NP_012284.3" + /db_xref="GeneID:854836" + /db_xref="SGD:S000001458" + /translation="MQRPFLLAYLVLSLLFNSALGFPTALVPRGSSEGTSCNSIVNGC + PNLDFNWHMDQQNIMQYTLDVTSVSWVQDNTYQITIHVKGKENIDLKYLWSLKIIGVT + GPKGTVQLYGYNENTYLIDNPTDFTATFEVYATQDVNSCQVWMPNFQIQFEYLQGSAA + QYASSWQWGTTSFDLSTGCNNYDNQGHSQTDFPGFYWNIDCDNNCGGTKSSTTTSSTS + ESSTTTSSTSESSTTTSSTSESSTTTSSTSESSTSSSTTAPATPTTTSCTKEKPTPPT + TTSCTKEKPTPPHHDTTPCTKKKTTTSKTCTKKTTTPVPTPSSSTTESSSAPVPTPSS + STTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVTSSTTESSSAPVTSSTTESSS + APVPTPSSSTTESSSAPVTSSTTESSSAPVTSSTTESSSAPVTSSTTESSSAPVTSST + TESSSAPVPTPSSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVTSSTTESS + SAPVPTPSSSTTESSSAPAPTPSSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSS + TPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPAPTPSSSTTESSSA + PVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAP + VTSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTP + SSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTPS + SSTTESSVAPVPTPSSSSNITSSAPSSTPFSSSTESSSVPVPTPSSSTTESSSAPVSS + STTESSVAPVPTPSSSSNITSSAPSSIPFSSTTESFSTGTTVTPSSSKYPGSQTETSV + SSTTETTIVPTKTTTSVTTPSTTTITTTVCSTGTNSAGETTSGCSPKTVTTTVPTTTT + TSVTTSSTTTITTTVCSTGTNSAGETTSGCSPKTITTTVPCSTSPSETASESTTTSPT + TPVTTVVSTTVVTTEYSTSTKPGGEITTTFVTKNIPTTYLTTIAPTPSVTTVTNFTPT + TITTTVCSTGTNSAGETTSGCSPKTVTTTVPCSTGTGEYTTEATTLVTTAVTTTVVTT + ESSTGTNSAGKTTTGYTTKSVPTTYVTTLAPSAPVTPATNAVPTTITTTECSAATNAA + GETTSVCSAKTIVSSASAGENTAPSATTPVTTAIPTTVITTESSVGTNSAGETTTGYT + TKSIPTTYITTLIPGSNGAKNYETVATATNPISIKTTSQLATTASASSVAPVVTSPSL + TGPLQSASGSAVATYSVPSISSTYQGAANIKVLGNFMWLLLALPVVF" + regulatory complement(393718..393732) + /regulatory_class="other" + /note="Upstream open reading frame (uORF) in 5' + untranslated region of FLO11 gene, regulate translation" + gene complement(393884..397082) + /gene="ICR1" + /locus_tag="YNCI0012" + /db_xref="GeneID:9164906" + ncRNA complement(393884..397082) + /ncRNA_class="other" + /gene="ICR1" + /locus_tag="YNCI0012" + /product="ICR1" + /experiment="EXISTENCE:curator inference:GO:0005634 + nucleus [PMID:19805129]" + /experiment="EXISTENCE:direct assay:GO:0006357 regulation + of transcription by RNA polymerase II [PMID:19805129]" + /experiment="EXISTENCE:genetic interaction:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:19805129]" + /experiment="EXISTENCE:mutant phenotype:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:19805129]" + /note="Long intergenic regulatory ncRNA; has a key role in + regulating transcription of the nearby protein-coding ORF + FLO11; initiated far upstream from FLO11 and transcribed + across much of the large promoter of FLO11, repressing + FLO11 transcription in cis" + /transcript_id="NR_132191.1" + /db_xref="GeneID:9164906" + /db_xref="SGD:S000132612" + gene complement(<394255..>394557) + /locus_tag="YIR020C" + /db_xref="GeneID:854837" + mRNA complement(<394255..>394557) + /locus_tag="YIR020C" + /product="uncharacterized protein" + /transcript_id="NM_001270752.1" + /db_xref="GeneID:854837" + CDS complement(394255..394557) + /locus_tag="YIR020C" + /note="hypothetical protein; mRNA identified as translated + by ribosome profiling data; SWAT-GFP fusion protein + localizes to the endoplasmic reticulum" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_001257681.1" + /db_xref="GeneID:854837" + /db_xref="SGD:S000001459" + /translation="MTFFLKRKISFFLSGIAQTFLFLPILLNRSVIHVVFLTVVLGHR + IPWDSVIRCNNTGTTHSAVSSRTELLLPIGGVINNWKRRAWNGFSIQWIWRYSFVY" + gene 395999..396939 + /gene="PWR1" + /locus_tag="YNCI0013W" + /db_xref="GeneID:9164905" + ncRNA 395999..396939 + /ncRNA_class="other" + /gene="PWR1" + /locus_tag="YNCI0013W" + /product="PWR1" + /experiment="EXISTENCE:curator inference:GO:0005634 + nucleus [PMID:19805129]" + /experiment="EXISTENCE:direct assay:GO:0006357 regulation + of transcription by RNA polymerase II [PMID:19805129]" + /experiment="EXISTENCE:mutant phenotype:GO:0006357 + regulation of transcription by RNA polymerase II + [PMID:19805129]" + /note="Intergenic regulatory ncRNA; one of two long ncRNAs + that play key roles in regulating transcription of the + nearby protein-coding ORF FLO11; PWR1 promotes FLO11 + transcription by interfering with ncRNA ICR1, which is + transcribed across the FLO11 promoter" + /transcript_id="NR_132192.1" + /db_xref="GeneID:9164905" + /db_xref="SGD:S000132614" + gene <397294..>398385 + /gene="MRS1" + /locus_tag="YIR021W" + /gene_synonym="PET157" + /db_xref="GeneID:854839" + mRNA <397294..>398385 + /gene="MRS1" + /locus_tag="YIR021W" + /gene_synonym="PET157" + /product="Mrs1p" + /transcript_id="NM_001179543.3" + /db_xref="GeneID:854839" + CDS 397294..398385 + /gene="MRS1" + /locus_tag="YIR021W" + /gene_synonym="PET157" + /experiment="EXISTENCE:direct assay:GO:0000372 Group I + intron splicing [PMID:11773622]" + /experiment="EXISTENCE:direct assay:GO:0003723 RNA binding + [PMID:11773622]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion + [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:1990904 + ribonucleoprotein complex [PMID:12924947]" + /experiment="EXISTENCE:mutant phenotype:GO:0000963 + mitochondrial RNA processing [PMID:2443348]" + /note="Splicing protein; required for splicing of two + mitochondrial group I introns (BI3 in COB and AI5beta in + COX1); forms a splicing complex, containing four subunits + of Mrs1p and two subunits of the BI3-encoded maturase, + that binds to the BI3 RNA; MRS1 has a paralog, CCE1, that + arose from the whole genome duplication" + /codon_start=1 + /product="Mrs1p" + /protein_id="NP_012287.3" + /db_xref="GeneID:854839" + /db_xref="SGD:S000001460" + /translation="MSPKNITRSVIPAIDLYCRKANFKTLKSLSMILGSKKEWYDTKK + APLRTFLVSRCGIFEQLRGRLVEDGKVNLFSVFLTNDSFSFCKMTVDDKFNTSLVDWQ + KIPFDSTFATDRRQNISLLPVDTLFATEKIISILGVSPNMTNLVSIERERSDLVDFNC + KLQSNILEHLLYAKCQGVYVTSTNEKARLLAAVCNPEFIDTFWCELTPIRVSLKENPS + ISVPREYQMYDPVVRATIKEVVTKRLLRSAFDNDIDPLMCLHLDKGWKLKFPILSSTT + GLNFSLKDCLSLDTGKDASDMTEVFLATMESSKVLRTYSNLVDIVMKDNGRLDSGVLK + QFNDYVKQEKLNLQHFQAGSSKFLKGAKI" + gene <398514..>398726 + /locus_tag="YIR021W-A" + /db_xref="GeneID:1466495" + mRNA <398514..>398726 + /locus_tag="YIR021W-A" + /product="uncharacterized protein" + /transcript_id="NM_001184656.1" + /db_xref="GeneID:1466495" + CDS 398514..398726 + /locus_tag="YIR021W-A" + /note="hypothetical protein; identified by expression + profiling and mass spectrometry" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_878100.1" + /db_xref="GeneID:1466495" + /db_xref="SGD:S000028838" + /translation="MSFSVSCKTPKTTKLLVSSISESAVALIIITIRILFSIGKSDFK + KIISKEINGAETIYYRNIPESKPQGS" + gene <398733..>399236 + /gene="SEC11" + /locus_tag="YIR022W" + /db_xref="GeneID:854840" + mRNA <398733..>399236 + /gene="SEC11" + /locus_tag="YIR022W" + /product="signal peptidase complex catalytic subunit + SEC11" + /transcript_id="NM_001179544.1" + /db_xref="GeneID:854840" + CDS 398733..399236 + /gene="SEC11" + /locus_tag="YIR022W" + /EC_number="3.4.21.89" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:11058593]" + /experiment="EXISTENCE:direct assay:GO:0005787 signal + peptidase complex [PMID:8910564|PMID:1846444]" + /experiment="EXISTENCE:direct assay:GO:0006465 signal + peptide processing [PMID:10206957]" + /experiment="EXISTENCE:mutant phenotype:GO:0006465 signal + peptide processing [PMID:10206957|PMID:3283143]" + /experiment="EXISTENCE:mutant phenotype:GO:0008233 + peptidase activity [PMID:10206957]" + /experiment="EXISTENCE:mutant phenotype:GO:0045047 protein + targeting to ER [PMID:3283143]" + /note="18kDa catalytic subunit of the Signal Peptidase + Complex (SPC); the Signal Peptidase Complex cleaves the + signal sequence of proteins targeted to the endoplasmic + reticulum; other members are Spc1p, Spc2p, Spc3p, and + Sec11p" + /codon_start=1 + /product="signal peptidase complex catalytic subunit + SEC11" + /protein_id="NP_012288.1" + /db_xref="GeneID:854840" + /db_xref="SGD:S000001461" + /translation="MNLRFELQKLLNVCFLFASAYMFWQGLAIATNSASPIVVVLSGS + MEPAFQRGDILFLWNRNTFNQVGDVVVYEVEGKQIPIVHRVLRQHNNHADKQFLLTKG + DNNAGNDISLYANKKIYLNKSKEIVGTVKGYFPQLGYITIWISENKYAKFALLGMLGL + SALLGGE" + gene <399777..>402689 + /gene="DAL81" + /locus_tag="YIR023W" + /gene_synonym="UGA35" + /db_xref="GeneID:854841" + mRNA <399777..>402689 + /gene="DAL81" + /locus_tag="YIR023W" + /gene_synonym="UGA35" + /product="Dal81p" + /transcript_id="NM_001179545.3" + /db_xref="GeneID:854841" + CDS 399777..402689 + /gene="DAL81" + /locus_tag="YIR023W" + /gene_synonym="UGA35" + /experiment="EXISTENCE:curator inference:GO:0005634 + nucleus [PMID:21515579]" + /experiment="EXISTENCE:direct assay:GO:0003713 + transcription coactivator activity [PMID:21515579]" + /experiment="EXISTENCE:direct assay:GO:0051123 RNA + polymerase II preinitiation complex assembly + [PMID:21515579]" + /experiment="EXISTENCE:mutant phenotype:GO:0001080 + nitrogen catabolite activation of transcription from RNA + polymerase II promoter [PMID:7899074]" + /experiment="EXISTENCE:mutant phenotype:GO:0003713 + transcription coactivator activity [PMID:21515579]" + /experiment="EXISTENCE:mutant phenotype:GO:0051123 RNA + polymerase II preinitiation complex assembly + [PMID:21515579]" + /experiment="EXISTENCE:mutant phenotype:GO:1901714 + positive regulation of urea catabolic process + [PMID:2406136]" + /experiment="EXISTENCE:mutant phenotype:GO:1901717 + positive regulation of gamma-aminobutyric acid catabolic + process [PMID:2406136]" + /experiment="EXISTENCE:physical interaction:GO:0001080 + nitrogen catabolite activation of transcription from RNA + polymerase II promoter [PMID:10906145]" + /note="Positive regulator of genes in multiple nitrogen + degradation pathways; contains DNA binding domain but does + not appear to bind the dodecanucleotide sequence present + in the promoter region of many genes involved in allantoin + catabolism" + /codon_start=1 + /product="Dal81p" + /protein_id="NP_012289.3" + /db_xref="GeneID:854841" + /db_xref="SGD:S000001462" + /translation="MDPHQSPADNAASPTKSVKATTKNSSTNNNVNSNNSNNNSNHDI + LNFNDNYTTILQHLANDHPNILREKGGSQQQQHQQQQQQQQQQQQQQQQQSLDTLLHH + YQSLLSKSDNAIAFDDNVSNSADHNGSNSNNNNNNNDISSPGNLMGSCNQCRLKKTKC + NYFPDLGNCLECETSRTKCTFSIAPNYLKRTSSGANNNMPTSSNSKRMKNFEDYSNRL + PSSMLYRHQQQQQQQQQQQRIQYPRSSFFVGPASVFDLNLTKHVRLDNVDQIQLSKTL + SLRKVSPTAQFILQDDFDTTLHSKQEYEVDLVENLVHPHGHLLVEIFFKLIHPFLPIL + HERVFLEKYSRSYRELTAPLLASIYSLALQYWDFHPALLGFPKPDVTAQLNNIALETF + YARVGRPKLSIIQTGLLILQCRSECHNNWVLCSSVVALAEELGLGVECNDWKLPKWEK + DLRKRLAWAVWLMDKWCALNEGRQSHLILGRNWMIKLLNFDDFPLNSPTILNSLQNDQ + SGSSPSSSNDVKNHQIAFGNLPIFNINPTLEDFKNGTLMFQQMVSLSIILGEIMDTFY + TQGSMTINKSIEQVLKLAKPLQLKLREWYHSLPKNLSMSYATPQKLNSNSTLTLAYFA + TEITLHRKIICALNPQTPKELVQVCRTAARTRLVAAIEFIRDLKNEHINAFWYNCSTG + NLMLIGTFAALLYVTSATKEEAMIFRDYVRNYTWVLKIGSKYFDKLSNALNNMHLLFA + QIPGLLTDEPVVVSPNSNINSVNPQRSGVQSQIPIQFNVGSPAMTEQGSPLNQWKNLP + QEILQQLNSFPNGTTSTTTPVNPTSRQTQLESQGSPAINSANNNSNNTPLPFAPNKSS + KKTSQSSPNVTPSHMSRHPPSNTSSPRVNSSTNVNSNTQMNASPLTSINETRQESGDA + ADEKTAGRERTANEESSTELKDDNPNSNQETSATGNQTIKMNDDKNVTINTRETPL" + gene complement(<402841..>403491) + /gene="INA22" + /locus_tag="YIR024C" + /db_xref="GeneID:854842" + mRNA complement(<402841..>403491) + /gene="INA22" + /locus_tag="YIR024C" + /product="Ina22p" + /transcript_id="NM_001179546.1" + /db_xref="GeneID:854842" + CDS complement(402841..403491) + /gene="INA22" + /locus_tag="YIR024C" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14562095|PMID:14576278|PMID:16823961]" + /experiment="EXISTENCE:direct assay:GO:0005743 + mitochondrial inner membrane [PMID:24942160]" + /experiment="EXISTENCE:direct assay:GO:1990524 INA complex + [PMID:24942160]" + /experiment="EXISTENCE:genetic interaction:GO:0033615 + mitochondrial proton-transporting ATP synthase complex + assembly [PMID:24942160]" + /experiment="EXISTENCE:mutant phenotype:GO:0033615 + mitochondrial proton-transporting ATP synthase complex + assembly [PMID:24942160]" + /experiment="EXISTENCE:physical interaction:GO:1990524 INA + complex [PMID:24942160]" + /note="F1F0 ATP synthase peripheral stalk assembly factor; + subunit of the matrix-exposed inner mitochondrial membrane + localized INA complex (Ina22p-Ina17p) involved in assembly + of the F1F0 peripheral stalk; co-purifies with Aim43p, ATP + synthase subunits, and cytochrome bc1 complex assembly + factors; interacts with Arh1p, a mitochondrial + oxidoreductase; deletion mutant has a respiratory growth + defect" + /codon_start=1 + /product="Ina22p" + /protein_id="NP_012290.1" + /db_xref="GeneID:854842" + /db_xref="SGD:S000001463" + /translation="MFMARQVLRNGLFLRSLAPIKITARTVASANAGIKRKSRFDKTM + IKPLLLVMIFGSILNAVIAEKRNIIDMERKYKLKLDKLKELIRRVHDNNGKVDFDADD + ELKLVNLRLGIVGKNATGMKEDETDIVVPKEESLEEIWQSIIDEAKKEVIEKTPDAGV + KNKEGIVTDLNVLKDLEKSKKEDEKVYLSGDVHMMMNQPGDLNEIAKEHDKIPKFL" + gene <403659..>404765 + /gene="MND2" + /locus_tag="YIR025W" + /db_xref="GeneID:854843" + mRNA <403659..>404765 + /gene="MND2" + /locus_tag="YIR025W" + /product="Mnd2p" + /transcript_id="NM_001179547.1" + /db_xref="GeneID:854843" + CDS 403659..404765 + /gene="MND2" + /locus_tag="YIR025W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:15797380]" + /experiment="EXISTENCE:direct assay:GO:0005680 + anaphase-promoting complex [PMID:12609981|PMID:12574115]" + /experiment="EXISTENCE:direct assay:GO:1902499 positive + regulation of protein autoubiquitination [PMID:22940250]" + /experiment="EXISTENCE:direct assay:GO:1990948 ubiquitin + ligase inhibitor activity [PMID:15797379]" + /experiment="EXISTENCE:genetic interaction:GO:1905785 + negative regulation of anaphase-promoting + complex-dependent catabolic process [PMID:15797380]" + /experiment="EXISTENCE:mutant phenotype:GO:0000070 mitotic + sister chromatid segregation [PMID:15797379]" + /experiment="EXISTENCE:mutant phenotype:GO:0007131 + reciprocal meiotic recombination [PMID:11470404]" + /experiment="EXISTENCE:mutant phenotype:GO:0030071 + regulation of mitotic metaphase/anaphase transition + [PMID:12609981]" + /experiment="EXISTENCE:mutant phenotype:GO:1902426 + deactivation of mitotic spindle assembly checkpoint + [PMID:22940250]" + /experiment="EXISTENCE:mutant phenotype:GO:1902499 + positive regulation of protein autoubiquitination + [PMID:22940250]" + /experiment="EXISTENCE:physical interaction:GO:0005680 + anaphase-promoting complex [PMID:15797379]" + /note="Subunit of the Anaphase-Promoting Complex/Cyclosome + (APC/C); necessary for maintaining sister chromatid + cohesion in prophase I of meiosis by inhibiting premature + ubiquitination and subsequent degradation of substrates by + the APC(Ama1) ubiquitin ligase" + /codon_start=1 + /product="Mnd2p" + /protein_id="NP_012291.1" + /db_xref="GeneID:854843" + /db_xref="SGD:S000001464" + /translation="MARALRDISLFNDIRKDQNSAGAKHERYNMRDLRSKKNQHVNGI + DDYEDDSLDRFIRRKKSRVVKYIPSLSAYNVFNEFPYYPTSASQLLDGKLDEFLMLSE + QYKSRLPKIRKLGWNRFKPIGINKTMYELEMLRSRARAQNAEGNNEEDFRQHDSREED + PRNNGSIGRVILPHILQENEEYDTGEGVTGLHSMPNDSMAILANNSANNSQNEEVSEE + DEISYDYDAEFDHVVDEDDNEEGEVPGEGVEGIEVQRERIVPDDLLMRPTSLSRSLQQ + FVEEAHHLDRNPYDIDSDNDGEDSKVELDMNPDFEDDVGREHDYNSEYSQEPTSYGGI + TPDLASNWRNWTRERITSLDELMERRARQQRGQD" + gene complement(<404873..>405967) + /gene="YVH1" + /locus_tag="YIR026C" + /db_xref="GeneID:854844" + mRNA complement(<404873..>405967) + /gene="YVH1" + /locus_tag="YIR026C" + /product="tyrosine protein phosphatase YVH1" + /transcript_id="NM_001179548.3" + /db_xref="GeneID:854844" + CDS complement(404873..405967) + /gene="YVH1" + /locus_tag="YIR026C" + /EC_number="3.1.3.48" + /experiment="EXISTENCE:direct assay:GO:0004725 protein + tyrosine phosphatase activity [PMID:1334559]" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:19797078|PMID:19797079]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095|PMID:19797078|PMID:19797079]" + /experiment="EXISTENCE:direct assay:GO:0010494 cytoplasmic + stress granule [PMID:26777405]" + /experiment="EXISTENCE:direct assay:GO:1990275 preribosome + binding [PMID:19797078]" + /experiment="EXISTENCE:genetic interaction:GO:0000027 + ribosomal large subunit assembly [PMID:19797078]" + /experiment="EXISTENCE:genetic interaction:GO:0000055 + ribosomal large subunit export from nucleus + [PMID:19797079]" + /experiment="EXISTENCE:genetic interaction:GO:0030476 + ascospore wall assembly [PMID:10464190]" + /experiment="EXISTENCE:mutant phenotype:GO:0000027 + ribosomal large subunit assembly + [PMID:19114459|PMID:19797078]" + /experiment="EXISTENCE:mutant phenotype:GO:0000055 + ribosomal large subunit export from nucleus + [PMID:19797079]" + /experiment="EXISTENCE:mutant phenotype:GO:0030476 + ascospore wall assembly [PMID:10464190]" + /experiment="EXISTENCE:mutant phenotype:GO:0051321 meiotic + cell cycle [PMID:8896280]" + /experiment="EXISTENCE:mutant phenotype:GO:2000786 + positive regulation of autophagosome assembly + [PMID:26125457]" + /note="Dual specificity protein phosphatase; regulates + growth, sporulation, and glycogen accumulation in a + cAMP-dependent protein kinase cascade dependent manner; + mutants are defective in 60S ribosome assembly; positively + regulates pre-autophagosomal structure (PAS) formation + upon nitrogen starvation or rapamycin treatment" + /codon_start=1 + /product="tyrosine protein phosphatase YVH1" + /protein_id="NP_012292.3" + /db_xref="GeneID:854844" + /db_xref="SGD:S000001465" + /translation="MAGNANSVDEEVTRILGGIYLGGIRPIIDHRPLGAEFNITHILS + VIKFQVIPEYLIRKGYTLKNIPIDDDDVTDVLQYFDETNRFIDQCLFPNEVEYSPRLV + DFKKKPQRGAVFAHCQAGLSRSVTFIVAYLMYRYGLSLSMAMHAVKRKKPSVEPNENF + MEQLHLFEKMGGDFVDFDNPAYKQWKLKQSIKLDPSGSELVSNSGMFKDSESSQDLDK + LTEAEKSKVTAVRCKKCRTKLALSTSFIAHDPPSKESSEGHFIKRAANSHRIIDIQES + QANCSHFFIEPLKWMQPELQGKQELEGKFSCPGCSSKVGGYNWKGSRCSCGKWVIPAI + HLQTSKVDQFPLQSTALPNMVNFESEKVNR" + gene complement(<406260..>407642) + /gene="DAL1" + /locus_tag="YIR027C" + /db_xref="GeneID:854845" + mRNA complement(<406260..>407642) + /gene="DAL1" + /locus_tag="YIR027C" + /product="allantoinase" + /transcript_id="NM_001179549.3" + /db_xref="GeneID:854845" + CDS complement(406260..407642) + /gene="DAL1" + /locus_tag="YIR027C" + /EC_number="3.5.2.5" + /experiment="EXISTENCE:mutant phenotype:GO:0004038 + allantoinase activity [PMID:4604238|PMID:1803816]" + /experiment="EXISTENCE:mutant phenotype:GO:0009442 + allantoin assimilation pathway + [PMID:1803816|PMID:4604238]" + /note="Allantoinase; converts allantoin to allantoate in + the first step of allantoin degradation; expression + sensitive to nitrogen catabolite repression" + /codon_start=1 + /product="allantoinase" + /protein_id="NP_012293.3" + /db_xref="GeneID:854845" + /db_xref="SGD:S000001466" + /translation="MPINAITSDHVIINGANKPATIVYSTESGTILDVLEGSVVMEKT + EITKYEIHTLENVSPCTILPGLVDSHVHLNEPGRTSWEGFETGTQAAISGGVTTVVDM + PLNAIPPTTNVENFRIKLEAAEGQMWCDVGFWGGLVPHNLPDLIPLVKAGVRGFKGFL + LDSGVEEFPPIGKEYIEEALKVLAEEDTMMMFHAELPKAHEDQQQPEQSHREYSSFLS + SRPDSFEIDAINLILECLRARNGPVPPVHIVHLASMKAIPLIRKARASGLPVTTETCF + HYLCIAAEQIPDGATYFKCCPPIRSESNRQGLWDALREGVIGSVVSDHSPCTPELKNL + QKGDFFDSWGGIASVGLGLPLMFTQGCSLVDIVTWCCKNTSHQVGLSHQKGTIAPGYD + ADLVVFDTASKHKISNSSVYFKNKLTAYNGMTVKGTVLKTILRGQVVYTNANGVSKTP + LGQTLLDSRR" + gene <408468..>410375 + /gene="DAL4" + /locus_tag="YIR028W" + /db_xref="GeneID:854846" + mRNA <408468..>410375 + /gene="DAL4" + /locus_tag="YIR028W" + /product="allantoin permease" + /transcript_id="NM_001179550.3" + /db_xref="GeneID:854846" + CDS 408468..410375 + /gene="DAL4" + /locus_tag="YIR028W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0000256 + allantoin catabolic process [PMID:385448]" + /experiment="EXISTENCE:mutant phenotype:GO:0005274 + allantoin:proton symporter activity [PMID:385448]" + /experiment="EXISTENCE:mutant phenotype:GO:0015720 + allantoin transport [PMID:3549700|PMID:385448]" + /note="Allantoin permease; expression sensitive to + nitrogen catabolite repression and induced by allophanate, + an intermediate in allantoin degradation" + /codon_start=1 + /product="allantoin permease" + /protein_id="NP_012294.3" + /db_xref="GeneID:854846" + /db_xref="SGD:S000001467" + /translation="MANDALSAIFSNPSRKGVQPSTSIVSYTNNEDDIIDVENGKFNK + NKNINTNVYVDNSSIEESEVVPLPETKSIWSKIYYDFIVLDKTTLNVSLKESFLYNRD + LKPVEEERRCWSWFNYLYFWLADCFNINTWQIAGTGLQLGLNWWQCWLTVWIGYTFAG + IFVVLNSRFGSAYHLSFPITVRASFGIFFSMWPIINRVVMAIVWYAVQAWLGATPVAL + MLKSIFGKNLEDRIPNHFGSPNSTTFEFMCFFIFWVVSIPFVLVAPHKIRHLFTVKAA + LIPFAAFGFLIWALKKSHGKIELGTLNDYSPHGSEFSWIFVRSLMACVANFAALIINA + PDFGRFAKNPQASLWPQLVAIPLFFAITCLIGIIVTAAGYHLYGVNYWSPLDVLGQFL + ETTYTRGTRAGVFLISFVFALAQLGTNISANSLACGADMTALFPRYINIRRGSLFCVA + MALCICPWNLMASSSKFTSALGAYAIFLSSIAGVICADYFVVRRGYVKLTHLFLAQKG + SFYMFGNKFGANWRAFVAYICGIAPNLPGFIGDVGAPKITVSEGAMRLYYLGYPVGFF + ISAVIYLILCYFFPVPGTPVTNFLTEKGWFQRWAYVEDFEQDWKNELRRDDLCDDTVS + IYDGTEEKIVY" + gene <410807..>411838 + /gene="DAL2" + /locus_tag="YIR029W" + /gene_synonym="ALC1" + /db_xref="GeneID:854847" + mRNA <410807..>411838 + /gene="DAL2" + /locus_tag="YIR029W" + /gene_synonym="ALC1" + /product="allantoicase" + /transcript_id="NM_001179551.1" + /db_xref="GeneID:854847" + CDS 410807..411838 + /gene="DAL2" + /locus_tag="YIR029W" + /gene_synonym="ALC1" + /EC_number="3.5.3.4" + /experiment="EXISTENCE:direct assay:GO:0004037 + allantoicase activity [PMID:3915539]" + /experiment="EXISTENCE:mutant phenotype:GO:0000256 + allantoin catabolic process [PMID:1916277]" + /note="Allantoicase; converts allantoate to urea and + ureidoglycolate in the second step of allantoin + degradation; expression sensitive to nitrogen catabolite + repression and induced by allophanate, an intermediate in + allantoin degradation" + /codon_start=1 + /product="allantoicase" + /protein_id="NP_012295.1" + /db_xref="GeneID:854847" + /db_xref="SGD:S000001468" + /translation="MKFFSLADEAEFKSIIISKNKAVDVIGSKLGGQVVSFSDEWFAS + AENLIQPTAPIRDPTRFVHSGAWYDGWETRRHNEMEYDWVIIKMGVAAAHIIGGEIDT + AFFNGNHAPFVSIEALYDEGEEGNIVEDDSRWVEIVEKFECGPSQRHLFVRGNGLTKE + RFTHIKLKMYPDGGIARFRLYGRVVPPELKTKDHIIDLAYVCNGAVALKYSDQHFGSV + DNLLLPGRGHDMSDGWETKRSRQPGHTDWAVIQLGRESSFIEKIIVDTAHFRGNFPQF + ITVEGCLKESESSENTGEGTWVELVGKSKTGPDKEHVYEIRKSIRVSHVKLTIIPDGG + VKRIRVWGY" + rep_origin 411935..412011 + /note="ARS922; Autonomously Replicating Sequence" + /db_xref="SGD:S000118400" + gene complement(<412036..>412770) + /gene="DCG1" + /locus_tag="YIR030C" + /db_xref="GeneID:854848" + mRNA complement(<412036..>412770) + /gene="DCG1" + /locus_tag="YIR030C" + /product="Dcg1p" + /transcript_id="NM_001179552.1" + /db_xref="GeneID:854848" + CDS complement(412036..412770) + /gene="DCG1" + /locus_tag="YIR030C" + /experiment="EXISTENCE:expression pattern:GO:0006807 + nitrogen compound metabolic process [PMID:1916277]" + /note="hypothetical protein; expression is sensitive to + nitrogen catabolite repression and regulated by Dal80p; + contains transmembrane domain" + /codon_start=1 + /product="Dcg1p" + /protein_id="NP_012296.1" + /db_xref="GeneID:854848" + /db_xref="SGD:S000001469" + /translation="METRILVVNPNSSKSMTVSLRETIEKTFSMESCKISYFTGPDTS + PPQIDGQETSIKSMEACLPLLIDDQESVYYFQKFNGILIACFSDHPLVAKIKDRAAKE + KADVSIVGLLDSSINYCNLVGKKFSIITSNKEWIPILNNSVESKFLTGNTVNKNLWKG + TVSTDLQVLDLHSPENFQQIAEIIYRENIKKLDSDIVILGCAGFSGLQNKLAKTFQRD + GTLFLDTIEIGLQILITMIRFVNSQK" + gene complement(<413015..>414679) + /gene="DAL7" + /locus_tag="YIR031C" + /gene_synonym="MLS2; MSL2" + /db_xref="GeneID:854849" + mRNA complement(<413015..>414679) + /gene="DAL7" + /locus_tag="YIR031C" + /gene_synonym="MLS2; MSL2" + /product="malate synthase DAL7" + /transcript_id="NM_001179553.3" + /db_xref="GeneID:854849" + CDS complement(413015..414679) + /gene="DAL7" + /locus_tag="YIR031C" + /gene_synonym="MLS2; MSL2" + /EC_number="2.3.3.9" + /experiment="EXISTENCE:direct assay:GO:0000256 allantoin + catabolic process [PMID:8462696]" + /experiment="EXISTENCE:direct assay:GO:0004474 malate + synthase activity [PMID:8462696]" + /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome + [PMID:27678487]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0004474 malate + synthase activity [PMID:23642236]" + /note="Malate synthase; can accept butyryl-CoA as acyl-CoA + donor in addition to traditional substrate acetyl-CoA; + recycles glyoxylate generated during allantoin + degradation; SWAT-GFP and mCherry fusion proteins localize + to the cytosol; expression sensitive to nitrogen + catabolite repression and induced by allophanate, an + intermediate in allantoin degradation" + /codon_start=1 + /product="malate synthase DAL7" + /protein_id="NP_012297.3" + /db_xref="GeneID:854849" + /db_xref="SGD:S000001470" + /translation="MVKISLDNTALYADIDTTPQFEPSKTTVADILTKDALEFIVLLH + RTFNSTRKQLLANRSNLQSKLDSGEYRFDFLPETEQIRNDPTWQGAIPAPGLINRSSE + ITGPPLRNMLVNALNAEVTTYMTDFEDSSSPTWENMIYGQVNLYDAIRNQIDFKTPRK + EYRLKDDISRLPTLIVRPRGWHMVEKHLYIDDEPISASIFDFGLYFYHNAKELVKIGK + GPYFYLPKMEHHMEVKLWNDIFCVAQDFIGMPRGTIRATVLIETLPAAFQMEEIIYQI + REHSSGLNCGRWDYIFSTIKKLRNLPEHVLPNRDLVTMTSPFMDAYVKRLINTCHRRG + VHAMGGMAAQIPIKDDPKANEAAMNKVRNDKIREMKNGHDGSWVAHPALAPICNEVFS + NMGTANQIYFVPDVHVTSSDLLNTKIQDAQVTTEGIRVNLDIGLQYMEAWLRGSGCVP + INHLMEDAATAEVSRCQLYQWVKHGVVLSDTGDKVTPELTAKILNEETAKLASASPLG + EKNKFALAAKYFLPEVTGKIFSDFLTTLLYDEIIKPSAKPVDLSKL" + gene complement(<415030..>415617) + /gene="DAL3" + /locus_tag="YIR032C" + /db_xref="GeneID:854850" + mRNA complement(<415030..>415617) + /gene="DAL3" + /locus_tag="YIR032C" + /product="ureidoglycolate hydrolase" + /transcript_id="NM_001179554.1" + /db_xref="GeneID:854850" + CDS complement(415030..415617) + /gene="DAL3" + /locus_tag="YIR032C" + /EC_number="4.3.2.3" + /experiment="EXISTENCE:curator inference:GO:0000256 + allantoin catabolic process [PMID:3915539]" + /experiment="EXISTENCE:direct assay:GO:0050385 + ureidoglycolate lyase activity [PMID:5965980]" + /experiment="EXISTENCE:mutant phenotype:GO:0050385 + ureidoglycolate lyase activity [PMID:3915539]" + /note="Ureidoglycolate lyase; converts ureidoglycolate to + glyoxylate and urea in the third step of allantoin + degradation; expression is sensitive to nitrogen + catabolite repression; this enzyme is sometimes referred + to 'ureidoglycolate hydrolase' but should not be confused + with the Arabidopsis thaliana ureidoglycolate hydrolase + enzyme which converts ureidoglycolate to glyoxylate, + ammonia and carbon dioxide" + /codon_start=1 + /product="ureidoglycolate hydrolase" + /protein_id="NP_012298.1" + /db_xref="GeneID:854850" + /db_xref="SGD:S000001471" + /translation="MVTVVAETLTKESFEEYGTIISPDEEISRMQNLEKGANQGTAIK + LLQVSQVENKSTSKVPNWNLFRCFPQPHLNRVFTQGSNQAISHSIKVLEKHPCSTQTF + VPMGRTSAEVAYLVVVAKEIGNKPDLSTLRAFTCLGNQAVTYGLGTWHAPMIVLGKEE + HLDFSVLIYESLDPDRPEKDCVEEHYSDGDVCIII" + gene <416124..>419465 + /gene="MGA2" + /locus_tag="YIR033W" + /db_xref="GeneID:854851" + mRNA <416124..>419465 + /gene="MGA2" + /locus_tag="YIR033W" + /product="Mga2p" + /transcript_id="NM_001179555.1" + /db_xref="GeneID:854851" + CDS 416124..419465 + /gene="MGA2" + /locus_tag="YIR033W" + /experiment="EXISTENCE:direct assay:GO:0005634 nucleus + [PMID:19061897]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic + reticulum membrane [PMID:11007476]" + /experiment="EXISTENCE:genetic interaction:GO:0030466 + silent mating-type cassette heterochromatin formation + [PMID:11063674]" + /experiment="EXISTENCE:genetic interaction:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:9927444]" + /experiment="EXISTENCE:mutant phenotype:GO:0045944 + positive regulation of transcription by RNA polymerase II + [PMID:11557770|PMID:29627385|PMID:11509659]" + /experiment="EXISTENCE:mutant phenotype:GO:0048255 mRNA + stabilization [PMID:15220333]" + /note="ER membrane protein involved in regulation of OLE1 + transcription; inactive ER form dimerizes and one subunit + is then activated by ubiquitin/proteasome-dependent + processing followed by nuclear targeting; MGA2 has a + paralog, SPT23, that arose from the whole genome + duplication" + /codon_start=1 + /product="Mga2p" + /protein_id="NP_012299.1" + /db_xref="GeneID:854851" + /db_xref="SGD:S000001472" + /translation="MQQNSEFLTETPGSDPHISQLHANSVMESQLLDDFLLNGSPMYQ + DDSMAHINIDEGANFQNFIKTDEGDSPNLLSFEGIGNNTHVNQNVSTPLEEEMESNRA + LKEEEEDEHENKVFNEKNIGNPAHDEIVFGRKETIQSVYINPLDYLKVNAAQLPLDVE + VSGLPQVSRVENQLKLKVKITSETPLNQSMLYLPSDSISREKFYLKKNIEDFSEDFKK + NLLYINAFVLCAVSNRTTNVCTKCVKREQRRAARRKSGIADNLLWCNNINRRLVVFNN + KQVFPIMKTFDNVKEFELTTRLVCYCRHHKANNGFVILFTITDWQNRLLGKFTTTPIM + ITDRKPANMDTTKFNNTTTSSRRQLTEEESTTEYYSTDNNQLSKDENMPFQYTYQHNP + YDNDSQMNNIPLKDKNVPFPYSISQQTDLLQNNNLSLNLSLPNQHIPSPTSMSEEGSE + SFNYHHRDNDNPVRTISLTNIEQQSQLNQRKRARNNLENDIGKPLFKHSFSNSISATN + TMNPALHSMQDFSMKNNNNNLPSINRVIPSQGPINGGIEVTLLGCNFKDGLSVKFGSN + LALSTQCWSETTIVTYLPPAAYAGQVFVSITDTNNENNNDDLPQEIEINDNKKAIFTY + VDDTDRQLIELALQIVGLKMNGKLEDARNIAKRIVGNDSPDSGTNGNSCSKSTGPSPN + QHSMNLNTSVLYSDEVLIQKVIKSLNINSNISICDSLGRTLLHLACLKNYSSLVYTLI + KKGARVNDIDSFGLTPLHFACISGDPKIIKMLLNCKVNYSLRSHNGLTAREVFIANHI + HSKEIDKKQDNRDNHKFVHNDTYISEVLSLFEEFQNGTKFTDSVETDSNYSISRKYSQ + SSFNSSLLDNESLNENLFESQSMINPTSMEIQHPTLQLFENSSYSEYDQSDFEEDGDE + DLFVTDEVEKPGVACREEQSELLDIGSSANEPEEDNGSTSLWNRVLHRINDDLPKYED + LFPLSWGKDDKLKTTNQDSIVEQSASNIENSENSEEEDYEEEEEFLKKQFNRFFQNKQ + NFRNDKMLIFFWIPLTLLLLTWFIMYKFGNQDSSINHISELISEYLRIALAKFLLGNE + RMKTAFRSKLSNLQTTRMLNDLIVS" + gene complement(<419615..>420736) + /gene="LYS1" + /locus_tag="YIR034C" + /db_xref="GeneID:854852" + mRNA complement(<419615..>420736) + /gene="LYS1" + /locus_tag="YIR034C" + /product="saccharopine dehydrogenase (NAD+, + L-lysine-forming)" + /transcript_id="NM_001179556.3" + /db_xref="GeneID:854852" + CDS complement(419615..420736) + /gene="LYS1" + /locus_tag="YIR034C" + /EC_number="1.5.1.7" + /experiment="EXISTENCE:direct assay:GO:0003729 mRNA + binding [PMID:20844764]" + /experiment="EXISTENCE:direct assay:GO:0004754 + saccharopine dehydrogenase (NAD+, L-lysine-forming) + activity [PMID:17002315]" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276]" + /experiment="EXISTENCE:mutant phenotype:GO:0009085 lysine + biosynthetic process [PMID:17247984]" + /experiment="EXISTENCE:mutant phenotype:GO:0016558 protein + import into peroxisome matrix [PMID:35563734]" + /note="Saccharopine dehydrogenase (NAD+, + L-lysine-forming); catalyzes the conversion of + saccharopine to L-lysine, which is the final step in the + lysine biosynthesis pathway; contains mRNA binding + activity; required for targeting of Pls1p to the + peroxisomal matrix in the absence of lysine" + /codon_start=1 + /product="saccharopine dehydrogenase (NAD+, + L-lysine-forming)" + /protein_id="NP_012300.3" + /db_xref="GeneID:854852" + /db_xref="SGD:S000001473" + /translation="MAAVTLHLRAETKPLEARAALTPTTVKKLIAKGFKIYVEDSPQS + TFNINEYRQAGAIIVPAGSWKTAPRDRIIIGLKEMPETDTFPLVHEHIQFAHCYKDQA + GWQNVLMRFIKGHGTLYDLEFLENDQGRRVAAFGFYAGFAGAALGVRDWAFKQTHSDD + EDLPAVSPYPNEKALVKDVTKDYKEALATGARKPTVLIIGALGRCGSGAIDLLHKVGI + PDANILKWDIKETSRGGPFDEIPQADIFINCIYLSKPIAPFTNMEKLNNPNRRLRTVV + DVSADTTNPHNPIPIYTVATVFNKPTVLVPTTAGPKLSVISIDHLPSLLPREASEFFS + HDLLPSLELLPQRKTAPVWVRAKKLFDRHCARVKRSSRL" + gene complement(<421026..>421790) + /gene="NRE1" + /locus_tag="YIR035C" + /db_xref="GeneID:854853" + mRNA complement(<421026..>421790) + /gene="NRE1" + /locus_tag="YIR035C" + /product="sepiapterin reductase family protein" + /transcript_id="NM_001179557.3" + /db_xref="GeneID:854853" + CDS complement(421026..421790) + /gene="NRE1" + /locus_tag="YIR035C" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:11914276|PMID:14562095]" + /note="Putative cytoplasmic short-chain + dehydrogenase/reductase" + /codon_start=1 + /product="sepiapterin reductase family protein" + /protein_id="NP_012301.3" + /db_xref="GeneID:854853" + /db_xref="SGD:S000001474" + /translation="MGKVILVTGVSRGIGKSIVDVLFSLDKDTVVYGVARSEAPLKKL + KEKYGDRFFYVVGDITEDSVLKQLVNAAVKGHGKIDSLVANAGVLEPVQNVNEIDVNA + WKKLYDINFFSIVSLVGIALPELKKTNGNVVFVSSDACNMYFSSWGAYGSSKAALNHF + AMTLANEERQVKAIAVAPGIVDTDMQVNIRENVGPSSMSAEQLKMFRGLKENNQLLDS + SVPATVYAKLALHGIPDGVNGQYLSYNDPALADFMP" + gene complement(<422074..>422865) + /gene="IRC24" + /locus_tag="YIR036C" + /db_xref="GeneID:854854" + mRNA complement(<422074..>422865) + /gene="IRC24" + /locus_tag="YIR036C" + /product="sepiapterin reductase family protein IRC24" + /transcript_id="NM_001179558.3" + /db_xref="GeneID:854854" + CDS complement(422074..422865) + /gene="IRC24" + /locus_tag="YIR036C" + /EC_number="1.1.1.320" + /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm + [PMID:14562095]" + /experiment="EXISTENCE:direct assay:GO:0050664 + oxidoreductase activity, acting on NAD(P)H, oxygen as + acceptor [PMID:11796169]" + /note="Putative benzil reductase;(GFP)-fusion protein + localizes to the cytoplasm and is induced by the + DNA-damaging agent MMS; sequence similarity with + short-chain dehydrogenase/reductases; null mutant has + increased spontaneous Rad52p foci" + /codon_start=1 + /product="sepiapterin reductase family protein IRC24" + /protein_id="NP_012302.3" + /db_xref="GeneID:854854" + /db_xref="SGD:S000001475" + /translation="MGKVILITGASRGIGLQLVKTVIEEDDECIVYGVARTEAGLQSL + QREYGADKFVYRVLDITDRSRMEALVEEIRQKHGKLDGIVANAGMLEPVKSISQSNSE + HDIKQWERLFDVNFFSIVSLVALCLPLLKSSPFVGNIVFVSSGASVKPYNGWSAYGCS + KAALNHFAMDIASEEPSDKVRAVCIAPGVVDTQMQKDIRETLGPQGMTPKALERFTQL + YKTSSLLDPKVPAAVLAQLVLKGIPDSLNGQYLRYNDERLGPVQG" + gene <423128..>423619 + /gene="HYR1" + /locus_tag="YIR037W" + /gene_synonym="GPX3; ORP1" + /db_xref="GeneID:854855" + mRNA <423128..>423619 + /gene="HYR1" + /locus_tag="YIR037W" + /gene_synonym="GPX3; ORP1" + /product="peroxiredoxin HYR1" + /transcript_id="NM_001179559.1" + /db_xref="GeneID:854855" + CDS 423128..423619 + /gene="HYR1" + /locus_tag="YIR037W" + /gene_synonym="GPX3; ORP1" + /EC_number="1.11.1.24" + /experiment="EXISTENCE:direct assay:GO:0004602 glutathione + peroxidase activity [PMID:19755417]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005758 + mitochondrial intermembrane space [PMID:22984289]" + /experiment="EXISTENCE:direct assay:GO:0005782 peroxisomal + matrix [PMID:22659048]" + /experiment="EXISTENCE:direct assay:GO:0005829 cytosol + [PMID:26928762]" + /experiment="EXISTENCE:direct assay:GO:0047066 + phospholipid-hydroperoxide glutathione peroxidase activity + [PMID:11445588]" + /experiment="EXISTENCE:mutant phenotype:GO:0004602 + glutathione peroxidase activity [PMID:10480913]" + /experiment="EXISTENCE:mutant phenotype:GO:0034599 + cellular response to oxidative stress [PMID:11445588]" + /experiment="EXISTENCE:mutant phenotype:GO:0047066 + phospholipid-hydroperoxide glutathione peroxidase activity + [PMID:11445588]" + /note="Glutathione peroxidase; functions as hydroperoxide + receptor to sense intracellular hydroperoxide levels and + transduce redox signal to Yap1p transcription factor; + glutathione peroxidase activity is neuroprotective in + models of Huntington's disease; HYR1 has a paralog, GPX1, + that arose from the whole genome duplication" + /codon_start=1 + /product="peroxiredoxin HYR1" + /protein_id="NP_012303.1" + /db_xref="GeneID:854855" + /db_xref="SGD:S000001476" + /translation="MSEFYKLAPVDKKGQPFPFDQLKGKVVLIVNVASKCGFTPQYKE + LEALYKRYKDEGFTIIGFPCNQFGHQEPGSDEEIAQFCQLNYGVTFPIMKKIDVNGGN + EDPVYKFLKSQKSGMLGLRGIKWNFEKFLVDKKGKVYERYSSLTKPSSLSETIEELLK + EVE" + gene complement(<423809..>424513) + /gene="GTT1" + /locus_tag="YIR038C" + /db_xref="GeneID:854856" + mRNA complement(<423809..>424513) + /gene="GTT1" + /locus_tag="YIR038C" + /product="bifunctional glutathione transferase/peroxidase" + /transcript_id="NM_001179560.1" + /db_xref="GeneID:854856" + CDS complement(423809..424513) + /gene="GTT1" + /locus_tag="YIR038C" + /EC_number="2.5.1.18" + /experiment="EXISTENCE:direct assay:GO:0004364 glutathione + transferase activity [PMID:9792709]" + /experiment="EXISTENCE:direct assay:GO:0004602 glutathione + peroxidase activity [PMID:16709151]" + /experiment="EXISTENCE:direct assay:GO:0005739 + mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" + /experiment="EXISTENCE:direct assay:GO:0005741 + mitochondrial outer membrane [PMID:16407407]" + /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic + reticulum [PMID:26928762|PMID:9792709]" + /experiment="EXISTENCE:direct assay:GO:0005886 plasma + membrane [PMID:16622836]" + /experiment="EXISTENCE:direct assay:GO:0006749 glutathione + metabolic process [PMID:9792709]" + /experiment="EXISTENCE:direct assay:GO:0071944 cell + periphery [PMID:26928762]" + /experiment="EXISTENCE:mutant phenotype:GO:0010731 protein + glutathionylation [PMID:27708136]" + /note="ER associated glutathione S-transferase; capable of + homodimerization; glutathione transferase for Yvc1p + vacuolar cation channel; expression induced during the + diauxic shift and throughout stationary phase; functional + overlap with Gtt2p, Grx1p, and Grx2p" + /codon_start=1 + /product="bifunctional glutathione transferase/peroxidase" + /protein_id="NP_012304.1" + /db_xref="GeneID:854856" + /db_xref="SGD:S000001477" + /translation="MSLPIIKVHWLDHSRAFRLLWLLDHLNLEYEIVPYKRDANFRAP + PELKKIHPLGRSPLLEVQDRETGKKKILAESGFIFQYVLQHFDHSHVLMSEDADIADQ + INYYLFYVEGSLQPPLMIEFILSKVKDSGMPFPISYLARKVADKISQAYSSGEVKNQF + DFVEGEISKNNGYLVDGKLSGADILMSFPLQMAFERKFAAPEDYPAISKWLKTITSEE + SYAASKEKARALGSNF" + repeat_region complement(426201..426425) + /note="Ty1 LTR" + /rpt_type=long_terminal_repeat + /db_xref="SGD:S000007021" + gene complement(<430498..>432111) + /gene="YPS6" + /locus_tag="YIR039C" + /db_xref="GeneID:854857" + mRNA complement(<430498..>432111) + /gene="YPS6" + /locus_tag="YIR039C" + /product="aspartyl protease" + /transcript_id="NM_001179561.3" + /db_xref="GeneID:854857" + CDS complement(430498..432111) + /gene="YPS6" + /locus_tag="YIR039C" + /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type + cell wall [PMID:10383953]" + /experiment="EXISTENCE:genetic interaction:GO:0031505 + fungal-type cell wall organization [PMID:16087741]" + /note="Putative GPI-anchored aspartic protease; member of + the yapsin family of proteases involved in cell wall + growth and maintenance" + /codon_start=1 + /product="aspartyl protease" + /protein_id="NP_012305.3" + /db_xref="GeneID:854857" + /db_xref="SGD:S000001478" + /translation="MQLISILSLLSSLMCSLTVLGSSASSYVKFPVQKLADIINICTQ + DVSTVFKRNEVLNTTVINGIGVYVVKMEIGTPPQTLYLQLDTGSSDMIVNNADIAYCK + SMSDGSDYASTDNYELTATFNGLPSTTISSEAYNTLCSYWGTFDASNSSTFENNATFF + NNTYGDGTYYAGTYGTDVVSFENITLNDFTFGVSNDTIGNPSGILGISLPIAEFTDGI + EYALALNRTPFIYDNFPMELKNQGKINKIAYSLFLNGPDAHFGSILFGAVDKSKYTGQ + LYTLPMLQAFNTLGSNPGMIITAQSVAILDSESGNKTVSDIQFPVMLDSGTTFSYLPT + EIAEAIGKSFDGEYSSDDQGYIFDCSKVNDTLLSVDFGGFNISANISNFVTSAKDRCV + LNVKQSESTYMLGDAFLVDAYVVYDLENYEISIAQASFNNQEEDIEVISDTVPGATPA + PGYFSTWVYKPGSPIGTGDFINVSWTSYSEFSQYKSLLATAAQSDDASSFSSSGGSSE + STTKKQNAGYKYRSSFSFSLLSFISYFLL" + gene <433929..>434303 + /gene="PAU15" + /locus_tag="YIR041W" + /db_xref="GeneID:854859" + mRNA <433929..>434303 + /gene="PAU15" + /locus_tag="YIR041W" + /product="seripauperin PAU15" + /transcript_id="NM_001179563.1" + /db_xref="GeneID:854859" + CDS 433929..434303 + /gene="PAU15" + /locus_tag="YIR041W" + /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type + vacuole [PMID:26928762]" + /note="hypothetical protein; member of the seripauperin + multigene family encoded mainly in subtelomeric regions; + SWAT-GFP and mCherry fusion proteins localize to the + vacuole" + /codon_start=1 + /product="seripauperin PAU15" + /protein_id="NP_012307.1" + /db_xref="GeneID:854859" + /db_xref="SGD:S000001480" + /translation="MVKLTSIAAGVAAIAAGVAAAPATTTLSPSDERVNLVELGVYVS + DIRAHLAQYYLFQAAHPSETYPVEIAEAVFNYGDFTTMLTGIPAEQVTRVITGVPWYS + TRLRPAISSALSKDGIYTAIPK" + gene complement(<435273..>435983) + /locus_tag="YIR042C" + /db_xref="GeneID:854860" + mRNA complement(<435273..>435983) + /locus_tag="YIR042C" + /product="uncharacterized protein" + /transcript_id="NM_001179564.1" + /db_xref="GeneID:854860" + CDS complement(435273..435983) + /locus_tag="YIR042C" + /note="hypothetical protein; YIR042C is a non-essential + gene" + /codon_start=1 + /product="uncharacterized protein" + /protein_id="NP_012308.1" + /db_xref="GeneID:854860" + /db_xref="SGD:S000001481" + /translation="MANLNIFGQEVGADVEGWTTRAFPEKVVLKGNTCRLEPLDRERH + GSELFSAYSEAGQKLWTYLPAGPFTNLEEYLEFIKELNETKDTVPFAIINKETERAVG + TLCLIRIDEANGSLEVGYVVFSPELQKTIIATEAQFLLMKYVFDDLQYRRYEWKCDSL + NGPSRRAAMRLGFKYEGTFRQVVVYKGRTRDTQWFSIIDKEWLRIRKTFEEWLDKTNF + ENGKQKRGIAAIRESLSN" + gene complement(437043..438179) + /locus_tag="YIR043C" + /gene_synonym="YIR044C" + /pseudo + /db_xref="GeneID:854861" + CDS complement(437043..438179) + /locus_tag="YIR043C" + /gene_synonym="YIR044C" + /note="Blocked reading frame; may encode a non-functional + member of the conserved, often subtelomerically-encoded + Cos protein family" + /pseudo + /codon_start=1 + /db_xref="GeneID:854861" + /db_xref="SGD:S000001482" + telomere 439068..439888 + /note="TEL09R; Telomeric region on the right arm of + Chromosome IX; composed of an X element core sequence, X + element combinatorial repeats, and a short terminal + stretch of telomeric repeats" + /db_xref="SGD:S000028970" +CONTIG join(BK006942.2:1..439888) +// + diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 03dd9901..55a6b0be 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -193,7 +193,7 @@ func (feature *Feature) UnmarshalJSON(data []byte) error { // Creates deep copy of Feature, which supports safe duplication func (feature *Feature) Copy() Feature { - attributes = multimap.NewMapSlice[string, string]() + attributes := multimap.NewMapSlice[string, string]() feature.Attributes.Each(func(key string, value string) { attributes.Put(key, value) }) @@ -211,7 +211,7 @@ func (feature *Feature) Copy() Feature { // Creates deep copy of Location, which supports safe duplication func (location *Location) Copy() Location { sublocations := make([]Location, len(location.SubLocations)) - for i, s := range location.SubLocations { + for i, _ := range location.SubLocations { sublocations[i] = location.SubLocations[i].Copy() } return Location{ @@ -501,6 +501,14 @@ func (params *parseLoopParameters) init() { params.genbank.Meta.Other = make(map[string]string) } +func parseError(line string, lineNum int, err error, info string) error { + if err == nil { + return fmt.Errorf("Line %d malformed (%s): %s", lineNum, info, line) + } else { + return fmt.Errorf("Line %d malformed (%s): %s\n%v", lineNum, info, line, err) + } +} + // ParseMultiNth takes in a reader representing a multi gbk/gb/genbank file and parses the first n records into a slice of Genbank structs. func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { scanner := bufio.NewScanner(r) @@ -511,6 +519,23 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { var parameters parseLoopParameters parameters.init() + // save our completed attribute / qualifier string to the current feature + saveAttribute := func() { + newValue := parameters.attributeValue != "" + emptyType := parameters.feature.Type != "" + if newValue || emptyType { + if newValue { + parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) + } + parameters.features = append(parameters.features, parameters.feature) + + parameters.attributeValue = "" + parameters.attribute = "" + parameters.feature = Feature{} + parameters.feature.Attributes = multimap.NewMapSlice[string, string]() + } + } + // Loop through each line of the file for lineNum := 0; scanner.Scan(); lineNum++ { // get line from scanner and split it @@ -539,7 +564,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { case "metadata": // Handle empty lines if len(line) == 0 { - return genbanks, fmt.Errorf("Empty metadata line on line %d", lineNum) + return genbanks, parseError(line, lineNum, nil, "empty metadata line") } // If we are currently reading a line, we need to figure out if it is a new meta line. @@ -560,7 +585,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { case "REFERENCE": reference, err := parseReferencesFn(parameters.metadataData) if err != nil { - return []Genbank{}, fmt.Errorf("Failed in parsing reference above line %d. Got error: %s", lineNum, err) + return []Genbank{}, parseError(line, lineNum, err, "reference") } parameters.genbank.Meta.References = append(parameters.genbank.Meta.References, reference) @@ -593,7 +618,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { for countIndex := 2; countIndex < len(fields)-1; countIndex += 2 { // starts at two because we don't want to include "BASE COUNT" in our fields count, err := strconv.Atoi(fields[countIndex]) if err != nil { - return []Genbank{}, err + return []Genbank{}, parseError(line, lineNum, err, "base count") } baseCount := BaseCount{ @@ -606,23 +631,15 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } // Switch to sequence parsing originFlag := strings.Contains(line, "ORIGIN") // we detect the beginning of the sequence with "ORIGIN" - if originFlag { + contigFlag := strings.Contains(line, "CONTIG") + if originFlag || contigFlag { parameters.parseStep = "sequence" - // save our completed attribute / qualifier string to the current feature - if parameters.attributeValue != "" { - parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) - parameters.features = append(parameters.features, parameters.feature) - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = multimap.NewMapSlice[string, string]() - } else { - parameters.features = append(parameters.features, parameters.feature) - } + saveAttribute() // add our features to the genbank for _, feature := range parameters.features { + // TODO: parse location when line is read, or track line number so error is localized location, err := parseLocation(feature.Location.GbkLocationString) if err != nil { return []Genbank{}, err @@ -633,39 +650,32 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { return []Genbank{}, err } } + + if contigFlag { + parameters.genbank.Meta.Other["CONTIG"] = parseMetadata(splitLine[1:]) + } continue - } // end sequence parsing flag logic + } // check if current line contains anything but whitespace trimmedLine := strings.TrimSpace(line) - if len(trimmedLine) < 1 { + if len(trimmedLine) == 0 { continue } + indent := countLeadingSpaces(parameters.currentLine) // determine if current line is a new top level feature - if countLeadingSpaces(parameters.currentLine) < countLeadingSpaces(parameters.prevline) || parameters.prevline == "FEATURES" { - // save our completed attribute / qualifier string to the current feature - if parameters.attributeValue != "" { - parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) - parameters.features = append(parameters.features, parameters.feature) - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = multimap.NewMapSlice[string, string]() - } - - // } - // checks for empty types - if parameters.feature.Type != "" { - parameters.features = append(parameters.features, parameters.feature) - } + if indent == 0 { + return genbanks, parseError(line, lineNum, nil, "unexpected metadata when parsing feature") + } else if indent < countLeadingSpaces(parameters.prevline) || parameters.prevline == "FEATURES" { + saveAttribute() parameters.feature = Feature{} parameters.feature.Attributes = multimap.NewMapSlice[string, string]() // An initial feature line looks like this: `source 1..2686` with a type separated by its location if len(splitLine) < 2 { - return genbanks, fmt.Errorf("Feature line malformed on line %d. Got line: %s", lineNum, line) + return genbanks, parseError(line, lineNum, nil, "feature") } parameters.feature.Type = strings.TrimSpace(splitLine[0]) parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) @@ -707,11 +717,13 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } parameters.attributeValue = removeAttributeValueQuotes parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier + } else { + return genbanks, parseError(line, lineNum, nil, "feature line") } case "sequence": if len(line) < 2 { // throw error if line is malformed - return genbanks, fmt.Errorf("Too short line found while parsing genbank sequence on line %d. Got line: %s", lineNum, line) + return genbanks, parseError(line, lineNum, nil, "too short line found while parsing genbank sequence") } else if line[0:2] == "//" { // end of sequence parameters.genbank.Sequence = parameters.sequenceBuilder.String() @@ -933,7 +945,7 @@ func parseLocation(locationString string) (Location, error) { location.GbkLocationString = locationString if !strings.ContainsAny(locationString, "(") { // Case checks for simple expression of x..x if !strings.ContainsAny(locationString, ".") { //Case checks for simple expression x - position, err := strconv.Atoi(locationString) + position, err := strconv.Atoi(partialRegex.ReplaceAllString(locationString, "")) if err != nil { return Location{}, err } diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index 7a29240f..f22d3ee4 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -773,7 +773,6 @@ func TestParse_error(t *testing.T) { } func TestParseReferences_error(t *testing.T) { - parseReferencesErr := errors.New("Failed in parsing reference above line 13. Got error: ") oldParseReferencesFn := parseReferencesFn parseReferencesFn = func(metadataData []string) (Reference, error) { return Reference{}, errors.New("") @@ -783,7 +782,7 @@ func TestParseReferences_error(t *testing.T) { }() file, _ := os.Open("../../data/puc19.gbk") _, err := parseMultiNthFn(file, 1) - assert.EqualError(t, err, parseReferencesErr.Error()) + assert.Error(t, err) } func TestIssue303Regression(t *testing.T) { @@ -809,3 +808,8 @@ func TestConsortiumRegression(t *testing.T) { t.Errorf("Failed to read consrtm. Got err: %s", err) } } + +func TestParseS288C_IX(t *testing.T) { + _, err := ReadMulti("../../data/NC_001141.2.gb") + assert.Nil(t, err) +} From 8112866f3ccdbaee010416565bdfd9ee3ae1df48 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 07:06:00 -0700 Subject: [PATCH 45/59] Ran linter --- io/genbank/genbank.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 55a6b0be..c35d55db 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -211,7 +211,7 @@ func (feature *Feature) Copy() Feature { // Creates deep copy of Location, which supports safe duplication func (location *Location) Copy() Location { sublocations := make([]Location, len(location.SubLocations)) - for i, _ := range location.SubLocations { + for i := range location.SubLocations { sublocations[i] = location.SubLocations[i].Copy() } return Location{ From fec8796b3f90059bb9931f091a374eb65470c58f Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 09:58:22 -0700 Subject: [PATCH 46/59] Add capability to compute sequence features and marshal en masse --- io/genbank/genbank.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index c35d55db..0cddba6d 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -137,6 +137,16 @@ var ( sequenceRegex = regexp.MustCompile("[^a-zA-Z]+") ) +func (sequence *Genbank) MarshalWithFeatureSequences() ([]byte, error) { + for _, f := range sequence.Features { + _, err := f.GetSequence(true) + if err != nil { + return []byte{}, err + } + } + return json.Marshal(sequence) +} + // AddFeature adds a feature to a Genbank struct. // NOTE: This method assumes feature is not referenced in another location // as this only creates a shallow copy. @@ -150,8 +160,17 @@ func (sequence *Genbank) AddFeature(feature *Feature) error { } // GetSequence returns the sequence of a feature. -func (feature Feature) GetSequence() (string, error) { - return getFeatureSequence(feature, feature.Location) +// If store is true, will store the result in feature.Sequence. +// TODO: compute SequenceHash +func (feature Feature) GetSequence(store bool) (string, error) { + if feature.Sequence != "" { + return feature.Sequence, nil + } + seq, err := getFeatureSequence(feature, feature.Location) + if err != nil && store { + feature.Sequence = seq + } + return seq, err } func (feature Feature) MarshalJSON() ([]byte, error) { From 9ce9f4f6ea582559b8c7cae3ca9ee04bab32992d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 13:59:45 -0700 Subject: [PATCH 47/59] Add methods to convert polyjson -> genbank --- io/genbank/genbank.go | 13 ++++--- io/polyjson/polyjson.go | 68 ++++++++++++++++++++++++++++++++++++ io/polyjson/polyjson_test.go | 6 ++++ 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 0cddba6d..01b9d3f6 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -139,7 +139,7 @@ var ( func (sequence *Genbank) MarshalWithFeatureSequences() ([]byte, error) { for _, f := range sequence.Features { - _, err := f.GetSequence(true) + _, err := f.StoreSequence() if err != nil { return []byte{}, err } @@ -160,14 +160,19 @@ func (sequence *Genbank) AddFeature(feature *Feature) error { } // GetSequence returns the sequence of a feature. -// If store is true, will store the result in feature.Sequence. +func (feature Feature) GetSequence() (string, error) { + return getFeatureSequence(feature, feature.Location) +} + +// GetSequence returns the sequence of a feature. +// This version will store the result in feature.Sequence. // TODO: compute SequenceHash -func (feature Feature) GetSequence(store bool) (string, error) { +func (feature Feature) StoreSequence() (string, error) { if feature.Sequence != "" { return feature.Sequence, nil } seq, err := getFeatureSequence(feature, feature.Location) - if err != nil && store { + if err != nil { feature.Sequence = seq } return seq, err diff --git a/io/polyjson/polyjson.go b/io/polyjson/polyjson.go index 81370480..22719139 100644 --- a/io/polyjson/polyjson.go +++ b/io/polyjson/polyjson.go @@ -13,7 +13,9 @@ import ( "os" "time" + "github.com/TimothyStiles/poly/io/genbank" "github.com/TimothyStiles/poly/transform" + "github.com/zyedidia/generic/multimap" ) /****************************************************************************** @@ -153,6 +155,72 @@ func Write(sequence Poly, path string) error { return os.WriteFile(path, file, 0644) } +// convert -> genbank +// TODO add convert <- genbank methods + +func (sequence *Poly) ToGenbank() genbank.Genbank { + gb := genbank.Genbank{ + Meta: sequence.Meta.ToGenbank(), + Features: make([]genbank.Feature, len(sequence.Features)), + Sequence: sequence.Sequence, + } + for i, f := range sequence.Features { + gb.Features[i] = f.ToGenbank() + gb.Features[i].ParentSequence = &gb + } + return gb +} + +func (meta *Meta) ToGenbank() genbank.Meta { + other := make(map[string]string) + other["URL"] = meta.URL + other["CreatedBy"] = meta.CreatedBy + other["CreatedWith"] = meta.CreatedWith + other["CreatedOn"] = meta.CreatedOn.String() + other["Schema"] = meta.Schema + return genbank.Meta{ + Definition: meta.Description, + Source: meta.CreatedBy, + Origin: meta.CreatedWith, + Name: meta.Name, + SequenceHash: meta.Hash, + } +} + +func (feature *Feature) ToGenbank() genbank.Feature { + attributes := multimap.NewMapSlice[string, string]() + for key, value := range feature.Tags { + attributes.Put(key, value) + } + attributes.Put("Name", feature.Name) + + return genbank.Feature{ + Type: feature.Type, + Description: feature.Description, + Attributes: attributes, + SequenceHash: feature.Hash, + Sequence: feature.Sequence, + Location: feature.Location.ToGenbank(), + } +} + +func (location *Location) ToGenbank() genbank.Location { + sublocations := make([]genbank.Location, len(location.SubLocations)) + for i, s := range location.SubLocations { + sublocations[i] = s.ToGenbank() + } + return genbank.Location{ + Start: location.Start, + End: location.End, + Complement: location.Complement, + Join: location.Join, + FivePrimePartial: location.FivePrimePartial, + ThreePrimePartial: location.ThreePrimePartial, + GbkLocationString: "", + SubLocations: sublocations, + } +} + /****************************************************************************** JSON specific IO related things end here. diff --git a/io/polyjson/polyjson_test.go b/io/polyjson/polyjson_test.go index eaee25b1..dedd7039 100644 --- a/io/polyjson/polyjson_test.go +++ b/io/polyjson/polyjson_test.go @@ -104,3 +104,9 @@ func TestWrite_error(t *testing.T) { err := Write(Poly{}, "/tmp/file") assert.EqualError(t, err, marshalIndentErr.Error()) } + +func TestConvert(t *testing.T) { + sequence, err := Read("../../data/cat.json") + assert.NoError(t, err) + sequence.ToGenbank() +} From 89a2ba4c33176f36a9af2bcabcb2c4e48e9b1edc Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 16:40:56 -0700 Subject: [PATCH 48/59] Removed generic collections library in favor of hand-rolled multimap, with the added benefit of better cmp interop --- go.mod | 4 +-- go.sum | 4 --- io/genbank/multimap.go | 55 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 io/genbank/multimap.go diff --git a/go.mod b/go.mod index acc7d7dd..60fc07d4 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/mroth/weightedrand v0.4.1 github.com/pmezard/go-difflib v1.0.0 github.com/sergi/go-diff v1.2.0 + github.com/spaolacci/murmur3 v1.1.0 golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 lukechampine.com/blake3 v1.1.5 ) @@ -16,9 +17,6 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/mattn/go-sqlite3 v1.14.13 // indirect - github.com/segmentio/fasthash v1.0.3 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/zyedidia/generic v1.2.1 // indirect ) require ( diff --git a/go.sum b/go.sum index 3d6532e9..d47c80d5 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,6 @@ github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6 github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= @@ -29,8 +27,6 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XDc= -github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/io/genbank/multimap.go b/io/genbank/multimap.go new file mode 100644 index 00000000..641539c7 --- /dev/null +++ b/io/genbank/multimap.go @@ -0,0 +1,55 @@ +package genbank + +// defines a new MultiMap type which can store multiple values for a single key +// useful for when we expect repeated keys, while preserving O(1) lookup +// does not make uniqueness guarantees for values (you can repeat key-value pairs) +type MultiMap[K, V comparable] map[K][]V + +// create a new empty multimap +func NewMultiMap[K, V comparable]() MultiMap[K, V] { + return make(map[K][]V) +} + +// adds a key-value pair to the multimap +func Put[K, V comparable](m MultiMap[K, V], k K, v V) { + if _, ok := m[k]; !ok { + m[k] = []V{v} + } else { + m[k] = append(m[k], v) + } +} + +// iterates over the multimap, once for each key +func ForEachKey[K, V comparable](m MultiMap[K, V], do func(K, []V)) { + for k, values := range m { + do(k, values) + } +} + +// iterates over the multimap, once for each value +func ForEachValue[K, V comparable](m MultiMap[K, V], do func(K, V)) { + ForEachKey(m, func(k K, values []V) { + for _, v := range values { + do(k, v) + } + }) +} + +// returns number of unique keys +func KeyCount[K, V comparable](m MultiMap[K, V]) int { + return len(m) +} + +// efficiently each element of a slice to create a new slice +func MapSlice[X any, Y any](slice []X, mapper func(X) Y) []Y { + y := make([]Y, len(slice)) + for i, x := range slice { + y[i] = mapper(x) + } + return y +} + +// the identity function which returns its input, useful for using MapSlice to do a shallow copy +func identity[X any](x X) X { + return x +} From b88d7b86896bbb9c4f470098a8d46c19fcc7e81e Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 16:55:09 -0700 Subject: [PATCH 49/59] Propogate handrolled multimap to test files --- io/genbank/example_test.go | 4 ++-- io/genbank/genbank_test.go | 19 ++++++++++--------- io/polyjson/polyjson.go | 12 ++++++------ tutorials/001_input_output_test.go | 3 +-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/io/genbank/example_test.go b/io/genbank/example_test.go index fac0c2d2..aad96753 100644 --- a/io/genbank/example_test.go +++ b/io/genbank/example_test.go @@ -14,8 +14,8 @@ import ( func Example_basic() { sequences, _ := genbank.Read("../../data/puc19.gbk") for _, feature := range sequences.Features { - if feature.Type == "CDS" && feature.Attributes.Has("gene") && feature.Attributes.Get("gene")[0] == "bla" { - fmt.Println(feature.Attributes.Get("note")[0]) + if gene, ok := feature.Attributes["gene"]; feature.Type == "CDS" && ok && gene[0] == "bla" { + fmt.Println(feature.Attributes["note"][0]) } } // Output: confers resistance to ampicillin, carbenicillin, andrelated antibiotics diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index f22d3ee4..de313d38 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -34,10 +34,10 @@ var singleGbkPaths = []string{ // "../../data/pichia_chr1_head.gb", } +// Ignore ParentSequence as that's a pointer which can't be serialized. func CmpOptions() []cmp.Option { return []cmp.Option{ cmpopts.IgnoreFields(Feature{}, "ParentSequence"), - cmp.Comparer(EqualMultiMaps), } } @@ -261,7 +261,7 @@ func TestGenbankNewlineParsingRegression(t *testing.T) { for _, feature := range gbk.Features { if feature.Location.Start == 410 && feature.Location.End == 1750 && feature.Type == "CDS" { - if feature.Attributes.Get("product")[0] != "chromosomal replication initiator informational ATPase" { + if feature.Attributes["product"][0] != "chromosomal replication initiator informational ATPase" { t.Errorf("Newline parsing has failed.") } break @@ -757,9 +757,9 @@ func TestBuildFeatureString(t *testing.T) { } func TestParse_error(t *testing.T) { - parseMultiErr := errors.New("parse error") + parseMultiErr := &ParseError{info: "parse error"} oldParseMultiNthFn := parseMultiNthFn - parseMultiNthFn = func(r io.Reader, count int) ([]Genbank, error) { + parseMultiNthFn = func(r io.Reader, count int) ([]Genbank, *ParseError) { return nil, parseMultiErr } defer func() { @@ -789,13 +789,14 @@ func TestIssue303Regression(t *testing.T) { seq, _ := Read("../../data/puc19_303_regression.gbk") expectedAttribute := "16S rRNA(adenine(1518)-N(6)/adenine(1519)-N(6))-dimethyltransferase" for _, feature := range seq.Features { - if feature.Attributes.Has("locus_tag") && feature.Attributes.Get("locus_tag")[0] == "JCVISYN3A_0004" && feature.Type == "CDS" { - if feature.Attributes.Get("product")[0] != expectedAttribute { - t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes.Get("product")[0], expectedAttribute) + locus, ok := feature.Attributes["locus_tag"] + if ok && locus[0] == "JCVISYN3A_0004" && feature.Type == "CDS" { + if feature.Attributes["product"][0] != expectedAttribute { + t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes["product"][0], expectedAttribute) } } - if feature.Attributes.Has("locus_tag") && feature.Attributes.Get("locus_tag")[0] == "JCVISYN3A_0051" && feature.Type == "CDS" { - if ok := feature.Attributes.Has("pseudo"); !ok { + if ok && locus[0] == "JCVISYN3A_0051" && feature.Type == "CDS" { + if _, ok = feature.Attributes["pseudo"]; !ok { t.Errorf("pseudo should be in attributes") } } diff --git a/io/polyjson/polyjson.go b/io/polyjson/polyjson.go index 22719139..7740c824 100644 --- a/io/polyjson/polyjson.go +++ b/io/polyjson/polyjson.go @@ -15,7 +15,6 @@ import ( "github.com/TimothyStiles/poly/io/genbank" "github.com/TimothyStiles/poly/transform" - "github.com/zyedidia/generic/multimap" ) /****************************************************************************** @@ -188,11 +187,11 @@ func (meta *Meta) ToGenbank() genbank.Meta { } func (feature *Feature) ToGenbank() genbank.Feature { - attributes := multimap.NewMapSlice[string, string]() + attributes := genbank.NewMultiMap[string, string]() for key, value := range feature.Tags { - attributes.Put(key, value) + genbank.Put(attributes, key, value) } - attributes.Put("Name", feature.Name) + genbank.Put(attributes, "Name", feature.Name) return genbank.Feature{ Type: feature.Type, @@ -209,16 +208,17 @@ func (location *Location) ToGenbank() genbank.Location { for i, s := range location.SubLocations { sublocations[i] = s.ToGenbank() } - return genbank.Location{ + loc := genbank.Location{ Start: location.Start, End: location.End, Complement: location.Complement, Join: location.Join, FivePrimePartial: location.FivePrimePartial, ThreePrimePartial: location.ThreePrimePartial, - GbkLocationString: "", SubLocations: sublocations, } + loc.GbkLocationString = genbank.BuildLocationString(loc) + return loc } /****************************************************************************** diff --git a/tutorials/001_input_output_test.go b/tutorials/001_input_output_test.go index cbb9c5e2..aeecce81 100644 --- a/tutorials/001_input_output_test.go +++ b/tutorials/001_input_output_test.go @@ -46,10 +46,10 @@ TTFN, Tim ******************************************************************************/ +// Ignore ParentSequence as that's a pointer which can't be serialized. func CmpOptions() []cmp.Option { return []cmp.Option{ cmpopts.IgnoreFields(genbank.Feature{}, "ParentSequence"), - cmp.Comparer(genbank.EqualMultiMaps), } } @@ -173,7 +173,6 @@ func TestFileIOTutorial(t *testing.T) { } // compare our read-in plasmid to the the one we wrote out. - // Ignore ParentSequence as that's a pointer which can't be serialized. if diff := cmp.Diff(puc19, puc19Copy, CmpOptions()...); diff != "" { t.Errorf("Parsing the output of Build() does not produce the same output as parsing the original file, \"%s\", read with Read(). Got this diff:\n%s", filepath.Base(puc19Path), diff) } From b4c3a37071509c4e1519fd7a669c589d77359310 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 16:55:34 -0700 Subject: [PATCH 50/59] Responded to more comments --- io/genbank/genbank.go | 234 +++++++++++++++--------------------------- 1 file changed, 80 insertions(+), 154 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 01b9d3f6..667d56c4 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -24,7 +24,6 @@ import ( "github.com/TimothyStiles/poly/transform" "github.com/lunny/log" "github.com/mitchellh/go-wordwrap" - "github.com/zyedidia/generic/multimap" ) /****************************************************************************** @@ -68,17 +67,6 @@ type Meta struct { // Feature holds the information for a feature in a Genbank file and other annotated sequence files. type Feature struct { - Type string - Description string - Attributes multimap.MultiMap[string, string] - SequenceHash string - SequenceHashFunction string - Sequence string - Location Location - ParentSequence *Genbank -} - -type FeatureJSON struct { Type string `json:"type"` Description string `json:"description"` Attributes map[string][]string `json:"attributes"` @@ -86,6 +74,7 @@ type FeatureJSON struct { SequenceHashFunction string `json:"hash_function"` Sequence string `json:"sequence"` Location Location `json:"location"` + ParentSequence *Genbank `json:"-"` } // Reference holds information for one reference in a Meta struct. @@ -137,6 +126,7 @@ var ( sequenceRegex = regexp.MustCompile("[^a-zA-Z]+") ) +// MarshalWithFeatureSequences calls StoreSequence on all features then marshals to JSON func (sequence *Genbank) MarshalWithFeatureSequences() ([]byte, error) { for _, f := range sequence.Features { _, err := f.StoreSequence() @@ -151,7 +141,7 @@ func (sequence *Genbank) MarshalWithFeatureSequences() ([]byte, error) { // NOTE: This method assumes feature is not referenced in another location // as this only creates a shallow copy. // If you intend to duplicate a feature from another Genbank and plan -// to modify in either location, it is reocmmended you first call feature.Copy() +// to modify in either location, it is recommended you first call feature.Copy() // before passing as input to save yourself trouble. func (sequence *Genbank) AddFeature(feature *Feature) error { feature.ParentSequence = sequence @@ -164,9 +154,8 @@ func (feature Feature) GetSequence() (string, error) { return getFeatureSequence(feature, feature.Location) } -// GetSequence returns the sequence of a feature. -// This version will store the result in feature.Sequence. -// TODO: compute SequenceHash +// StoreSequence infers and assigns the value of feature.Sequence +// if currently an empty string func (feature Feature) StoreSequence() (string, error) { if feature.Sequence != "" { return feature.Sequence, nil @@ -178,76 +167,21 @@ func (feature Feature) StoreSequence() (string, error) { return seq, err } -func (feature Feature) MarshalJSON() ([]byte, error) { - attributes := make(map[string][]string) - feature.Attributes.EachAssociation(func(key string, values []string) { - attributes[key] = values - }) - return json.Marshal(FeatureJSON{ - Type: feature.Type, - Description: feature.Description, - Attributes: attributes, - SequenceHash: feature.SequenceHash, - SequenceHashFunction: feature.SequenceHashFunction, - Sequence: feature.Sequence, - Location: feature.Location, - }) -} - -// UnmarshalJSON implements the custom JSON unmarshaling for CustomStruct -func (feature *Feature) UnmarshalJSON(data []byte) error { - var aux FeatureJSON - if err := json.Unmarshal(data, &aux); err != nil { - return err - } - feature.Type = aux.Type - feature.Description = aux.Description - feature.Attributes = multimap.NewMapSlice[string, string]() - for key, values := range aux.Attributes { - for _, value := range values { - feature.Attributes.Put(key, value) - } - } - feature.SequenceHash = aux.SequenceHash - feature.SequenceHashFunction = aux.SequenceHashFunction - feature.Sequence = aux.Sequence - feature.Location = aux.Location - return nil -} - -// Creates deep copy of Feature, which supports safe duplication +// Creates deep copy of Feature, which supports safe duplication. func (feature *Feature) Copy() Feature { - attributes := multimap.NewMapSlice[string, string]() - feature.Attributes.Each(func(key string, value string) { - attributes.Put(key, value) + copy := *feature + copy.Location = CopyLocation(feature.Location) + copy.Attributes = NewMultiMap[string, string]() + ForEachKey(feature.Attributes, func(k string, v []string) { + copy.Attributes[k] = MapSlice[string](v, identity[string]) }) - return Feature{ - Type: feature.Type, - Description: feature.Description, - Attributes: attributes, - SequenceHash: feature.SequenceHash, - SequenceHashFunction: feature.SequenceHashFunction, - Sequence: feature.Sequence, - Location: feature.Location.Copy(), - } + return copy } // Creates deep copy of Location, which supports safe duplication -func (location *Location) Copy() Location { - sublocations := make([]Location, len(location.SubLocations)) - for i := range location.SubLocations { - sublocations[i] = location.SubLocations[i].Copy() - } - return Location{ - Start: location.Start, - End: location.End, - Complement: location.Complement, - Join: location.Join, - FivePrimePartial: location.FivePrimePartial, - ThreePrimePartial: location.ThreePrimePartial, - GbkLocationString: location.GbkLocationString, - SubLocations: sublocations, - } +func CopyLocation(location Location) Location { + location.SubLocations = MapSlice(location.SubLocations, CopyLocation) + return location } // getFeatureSequence takes a feature and location object and returns a sequence string. @@ -298,9 +232,10 @@ func ReadMultiNth(path string, count int) ([]Genbank, error) { return []Genbank{}, err } - sequence, err := parseMultiNthFn(file, count) - if err != nil { - return []Genbank{}, err + sequence, perr := parseMultiNthFn(file, count) + if perr != nil { + perr.file = path + return []Genbank{}, perr } return sequence, nil @@ -497,6 +432,35 @@ func ParseMulti(r io.Reader) ([]Genbank, error) { return genbankSlice, err } +// an error struct to represent failures encountered while parsing +type ParseError struct { + file string // the file origin + line string // the offending line + before bool // whether the error occured before or on this line + lineNo int // the line number, 0 indexed + info string `default:"syntax error"` // description of the error type + wraps error // stores the error that led to this, if any +} + +func (e *ParseError) Error() string { + var out, loc string + if e.file == "" { + loc = fmt.Sprintf("line %d", e.lineNo) + } else { + loc = fmt.Sprintf("%s:%d", e.file, e.lineNo) + } + if e.before { + out = fmt.Sprintf("%s before %s", e.info, loc) + } else { + out = fmt.Sprintf("%s on %s: %s", e.info, loc, e.line) + } + if e.wraps != nil { + out = fmt.Sprintf("%s\nfrom %v", out, e.wraps) + } + return out +} + +// defines state for the parser, and utility methods to modify type parseLoopParameters struct { newLocation bool quoteActive bool @@ -519,22 +483,32 @@ type parseLoopParameters struct { // method to init loop parameters func (params *parseLoopParameters) init() { params.newLocation = true - params.feature.Attributes = multimap.NewMapSlice[string, string]() + params.feature.Attributes = NewMultiMap[string, string]() params.parseStep = "metadata" params.genbankStarted = false params.genbank.Meta.Other = make(map[string]string) } -func parseError(line string, lineNum int, err error, info string) error { - if err == nil { - return fmt.Errorf("Line %d malformed (%s): %s", lineNum, info, line) - } else { - return fmt.Errorf("Line %d malformed (%s): %s\n%v", lineNum, info, line, err) +// save our completed attribute / qualifier string to the current feature +// useful as a wrap-up step from multiple states +func (parameters *parseLoopParameters) saveLastAttribute() { + newValue := parameters.attributeValue != "" + emptyType := parameters.feature.Type != "" + if newValue || emptyType { + if newValue { + Put(parameters.feature.Attributes, parameters.attribute, parameters.attributeValue) + } + parameters.features = append(parameters.features, parameters.feature) + + parameters.attributeValue = "" + parameters.attribute = "" + parameters.feature = Feature{} + parameters.feature.Attributes = NewMultiMap[string, string]() } } // ParseMultiNth takes in a reader representing a multi gbk/gb/genbank file and parses the first n records into a slice of Genbank structs. -func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { +func ParseMultiNth(r io.Reader, count int) ([]Genbank, *ParseError) { scanner := bufio.NewScanner(r) var genbanks []Genbank @@ -543,23 +517,6 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { var parameters parseLoopParameters parameters.init() - // save our completed attribute / qualifier string to the current feature - saveAttribute := func() { - newValue := parameters.attributeValue != "" - emptyType := parameters.feature.Type != "" - if newValue || emptyType { - if newValue { - parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) - } - parameters.features = append(parameters.features, parameters.feature) - - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = multimap.NewMapSlice[string, string]() - } - } - // Loop through each line of the file for lineNum := 0; scanner.Scan(); lineNum++ { // get line from scanner and split it @@ -584,11 +541,12 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { continue } + // define parser state machine switch parameters.parseStep { case "metadata": // Handle empty lines if len(line) == 0 { - return genbanks, parseError(line, lineNum, nil, "empty metadata line") + return genbanks, &ParseError{line: line, lineNo: lineNum, info: "unexpected empty metadata"} } // If we are currently reading a line, we need to figure out if it is a new meta line. @@ -609,7 +567,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { case "REFERENCE": reference, err := parseReferencesFn(parameters.metadataData) if err != nil { - return []Genbank{}, parseError(line, lineNum, err, "reference") + return []Genbank{}, &ParseError{line: line, lineNo: lineNum, wraps: err, info: "invalid reference"} } parameters.genbank.Meta.References = append(parameters.genbank.Meta.References, reference) @@ -642,7 +600,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { for countIndex := 2; countIndex < len(fields)-1; countIndex += 2 { // starts at two because we don't want to include "BASE COUNT" in our fields count, err := strconv.Atoi(fields[countIndex]) if err != nil { - return []Genbank{}, parseError(line, lineNum, err, "base count") + return []Genbank{}, &ParseError{line: line, lineNo: lineNum, wraps: err, info: "invalid base count"} } baseCount := BaseCount{ @@ -659,19 +617,19 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { if originFlag || contigFlag { parameters.parseStep = "sequence" - saveAttribute() + parameters.saveLastAttribute() // add our features to the genbank for _, feature := range parameters.features { // TODO: parse location when line is read, or track line number so error is localized location, err := parseLocation(feature.Location.GbkLocationString) if err != nil { - return []Genbank{}, err + return []Genbank{}, &ParseError{before: true, line: line, lineNo: lineNum, wraps: err, info: "invalid feature location"} } feature.Location = location err = parameters.genbank.AddFeature(&feature) if err != nil { - return []Genbank{}, err + return []Genbank{}, &ParseError{before: true, line: line, lineNo: lineNum, wraps: err, info: "problem adding feature"} } } @@ -690,16 +648,16 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { indent := countLeadingSpaces(parameters.currentLine) // determine if current line is a new top level feature if indent == 0 { - return genbanks, parseError(line, lineNum, nil, "unexpected metadata when parsing feature") + return genbanks, &ParseError{line: line, lineNo: lineNum, info: "unexpected metadata when parsing feature"} } else if indent < countLeadingSpaces(parameters.prevline) || parameters.prevline == "FEATURES" { - saveAttribute() + parameters.saveLastAttribute() parameters.feature = Feature{} - parameters.feature.Attributes = multimap.NewMapSlice[string, string]() + parameters.feature.Attributes = NewMultiMap[string, string]() // An initial feature line looks like this: `source 1..2686` with a type separated by its location if len(splitLine) < 2 { - return genbanks, parseError(line, lineNum, nil, "feature") + return genbanks, &ParseError{line: line, lineNo: lineNum, info: "invalid feature"} } parameters.feature.Type = strings.TrimSpace(splitLine[0]) parameters.feature.Location.GbkLocationString = strings.TrimSpace(splitLine[len(splitLine)-1]) @@ -722,7 +680,7 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { } // save our completed attribute / qualifier string to the current feature if parameters.attributeValue != "" || parameters.emptyAttribute { - parameters.feature.Attributes.Put(parameters.attribute, parameters.attributeValue) + Put(parameters.feature.Attributes, parameters.attribute, parameters.attributeValue) parameters.emptyAttribute = false } parameters.attributeValue = "" @@ -742,12 +700,12 @@ func ParseMultiNth(r io.Reader, count int) ([]Genbank, error) { parameters.attributeValue = removeAttributeValueQuotes parameters.multiLineFeature = false // without this we can't tell if something is a multiline feature or multiline qualifier } else { - return genbanks, parseError(line, lineNum, nil, "feature line") + return genbanks, &ParseError{line: line, lineNo: lineNum, info: "invalid feature"} } case "sequence": if len(line) < 2 { // throw error if line is malformed - return genbanks, parseError(line, lineNum, nil, "too short line found while parsing genbank sequence") + return genbanks, &ParseError{line: line, lineNo: lineNum, info: "too short line found while parsing genbank sequence"} } else if line[0:2] == "//" { // end of sequence parameters.genbank.Sequence = parameters.sequenceBuilder.String() @@ -1126,7 +1084,7 @@ func BuildFeatureString(feature Feature) string { returnString := featureHeader if feature.Attributes != nil { - feature.Attributes.Each(func(key string, value string) { + ForEachValue(feature.Attributes, func(key string, value string) { returnString += generateWhiteSpace(qualifierIndex) + "/" + key + "=\"" + value + "\"\n" }) } @@ -1148,35 +1106,3 @@ func generateWhiteSpace(length int) string { GBK specific IO related things end here. ******************************************************************************/ - -// utility functions when comparing Feature.Attributes -func EqualMultiMaps(this, other multimap.MultiMap[string, string]) bool { - if this.Size() != other.Size() { - return false - } - allEqual := true - this.EachAssociation(func(key string, values []string) { - allEqual = allEqual && EqualSlices(values, other.Get(key)) - }) - if !allEqual { - return false - } - other.EachAssociation(func(key string, values []string) { - allEqual = allEqual && EqualSlices(values, this.Get(key)) - }) - return allEqual -} - -func EqualSlices[V comparable](this, other []V) bool { - if this == nil && other == nil { - return true - } else if this == nil || other == nil { - return false - } - for i, v := range this { - if v != other[i] { - return false - } - } - return true -} From 8b82d7ba009d44be79361f17f6b88e5aa3334543 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 17:12:01 -0700 Subject: [PATCH 51/59] Reduced new example genbank file --- data/NC_001141.2.gb | 10207 ----------------------------------- data/NC_001141.2_redux.gb | 147 + io/genbank/genbank_test.go | 5 +- 3 files changed, 151 insertions(+), 10208 deletions(-) delete mode 100644 data/NC_001141.2.gb create mode 100644 data/NC_001141.2_redux.gb diff --git a/data/NC_001141.2.gb b/data/NC_001141.2.gb deleted file mode 100644 index 19937f03..00000000 --- a/data/NC_001141.2.gb +++ /dev/null @@ -1,10207 +0,0 @@ -LOCUS NC_001141 439888 bp DNA linear CON 15-SEP-2023 -DEFINITION Saccharomyces cerevisiae S288C chromosome IX, complete sequence. -ACCESSION NC_001141 -VERSION NC_001141.2 -DBLINK BioProject: PRJNA128 - Assembly: GCF_000146045.2 -KEYWORDS RefSeq. -SOURCE Saccharomyces cerevisiae S288C - ORGANISM Saccharomyces cerevisiae S288C - Eukaryota; Fungi; Dikarya; Ascomycota; Saccharomycotina; - Saccharomycetes; Saccharomycetales; Saccharomycetaceae; - Saccharomyces. -REFERENCE 1 (bases 1 to 439888) - AUTHORS Engel,S.R., Wong,E.D., Nash,R.S., Aleksander,S., Alexander,M., - Douglass,E., Karra,K., Miyasato,S.R., Simison,M., Skrzypek,M.S., - Weng,S. and Cherry,J.M. - TITLE New data and collaborations at the Saccharomyces Genome Database: - updated reference genome, alleles, and the Alliance of Genome - Resources - JOURNAL Genetics 220 (4) (2022) - PUBMED 34897464 -REFERENCE 2 (bases 1 to 439888) - AUTHORS Churcher,C., Bowman,S., Badcock,K., Bankier,A., Brown,D., - Chillingworth,T., Connor,R., Devlin,K., Gentles,S., Hamlin,N., - Harris,D., Horsnell,T., Hunt,S., Jagels,K., Jones,M., Lye,G., - Moule,S., Odell,C., Pearson,D., Rajandream,M., Rice,P., Rowley,N., - Skelton,J., Smith,V., Barrell,B. et al. - TITLE The nucleotide sequence of Saccharomyces cerevisiae chromosome IX - JOURNAL Nature 387 (6632 SUPPL), 84-87 (1997) - PUBMED 9169870 -REFERENCE 3 (bases 1 to 439888) - AUTHORS Goffeau,A., Barrell,B.G., Bussey,H., Davis,R.W., Dujon,B., - Feldmann,H., Galibert,F., Hoheisel,J.D., Jacq,C., Johnston,M., - Louis,E.J., Mewes,H.W., Murakami,Y., Philippsen,P., Tettelin,H. and - Oliver,S.G. - TITLE Life with 6000 genes - JOURNAL Science 274 (5287), 546 (1996) - PUBMED 8849441 -REFERENCE 4 (bases 1 to 439888) - CONSRTM NCBI Genome Project - TITLE Direct Submission - JOURNAL Submitted (14-SEP-2023) National Center for Biotechnology - Information, NIH, Bethesda, MD 20894, USA -REFERENCE 5 (bases 1 to 439888) - CONSRTM Saccharomyces Genome Database - TITLE Direct Submission - JOURNAL Submitted (04-MAY-2012) Department of Genetics, Stanford - University, Stanford, CA 94305-5120, USA - REMARK Protein update by submitter -REFERENCE 6 (bases 1 to 439888) - CONSRTM Saccharomyces Genome Database - TITLE Direct Submission - JOURNAL Submitted (31-MAR-2011) Department of Genetics, Stanford - University, Stanford, CA 94305-5120, USA - REMARK Sequence update by submitter -REFERENCE 7 (bases 1 to 439888) - CONSRTM Saccharomyces Genome Database - TITLE Direct Submission - JOURNAL Submitted (14-DEC-2009) Department of Genetics, Stanford - University, Stanford, CA 94305-5120, USA -COMMENT REVIEWED REFSEQ: This record has been curated by SGD. The reference - sequence is identical to BK006942. - - On Apr 26, 2011 this sequence version replaced NC_001141.1. - - ##Genome-Annotation-Data-START## - Annotation Provider :: SGD - Annotation Status :: Full Annotation - Annotation Version :: R64-4-1 - URL :: http://www.yeastgenome.org/ - ##Genome-Annotation-Data-END## - COMPLETENESS: full length. -FEATURES Location/Qualifiers - source 1..439888 - /organism="Saccharomyces cerevisiae S288C" - /mol_type="genomic DNA" - /strain="S288C" - /db_xref="taxon:559292" - /chromosome="IX" - telomere complement(1..7784) - /note="TEL09L; Telomeric region on the left arm of - Chromosome IX; composed of an X element core sequence, X - element combinatorial repeats, a long Y' element, and a - short terminal stretch of telomeric repeats" - /db_xref="SGD:S000028896" - gene complement(<483..>6147) - /locus_tag="YIL177C" - /db_xref="GeneID:854630" - mRNA complement(join(<483..4598,4987..>6147)) - /locus_tag="YIL177C" - /product="Y' element ATP-dependent helicase" - /transcript_id="NM_001179522.1" - /db_xref="GeneID:854630" - CDS complement(join(483..4598,4987..6147)) - /locus_tag="YIL177C" - /EC_number="3.6.4.12" - /note="Putative Y' element ATP-dependent helicase" - /codon_start=1 - /product="Y' element ATP-dependent helicase" - /protein_id="NP_012092.1" - /db_xref="GeneID:854630" - /db_xref="SGD:S000001439" - /translation="MKVSDRRKFEKANFDEFESALNNKNDLVHCPSITLFESIPTEVR - SFYEDEKSGLIKVVKFRTGAMDRKRSFEKVVISVMVGKNVKKFLTFVEDEPDFQGGPI - PSKYLIPKKINLMVYTLFQVHTLKFNRKDYDTLSLFYLNRGYYNELSFRVLERCHEIA - SARPNDSSTMRTFTDFVSGAPIVRSLQKSTIRKYGYNLAPYMFLLLHVDELSIFSAYQ - ASLPGEKKVDTERLKRDLCPRKPIEIKYFSQICNDMMNKKDRLGDILHIILRACALNF - GAGPRGGAGDEEDRSITNEEPIIPSVDEHGLKVCKLRSPNTPRRLRKTLDAVKALLVS - SCACTARDLDIFDDNNGVAMWKWIKILYHEVAQETTLKDSYRITLVPSSDGISLLAFA - GPQRNVYVDDTTRRIQLYTDYNKNGSSEPRLKTLDGLTSDYVFYFVTVLRQMQICALG - NSYDAFNHDPWMDVVGFEDPNQVTNRDISRIVLYSYMFLNTAKGCLVEYATFRQYMRE - LPKNAPQKLNFREMRQGLIALGRHCVGSRFETDLYESATSELMANHSVQTGRNIYGVD - SFSLTSVSGTTATLLQERASERWIQWLGLESDYHCSFSSTRNAEDVVAGEAASSNHHQ - KISRVTRKRPREPKSTNDILVAGQKLFGSSFEFRDLHQLRLCYEIYMADTPSVAVQAP - PGYGKTELFHLPLIALASKGDVEYVSFLFVPYTVLLANCMIRLGRCGCLNVAPVRNFI - EEGYDGVTDLYVGIYDDLASTNFTDRIAAWENIVECTFRTNNVKLGYLIVDEFHNFET - EVYRQSQFGGITNLDFDAFEKAIFLSGTAPEAVADAALQRIGLTGLAKKSMDINELKR - SEDLSRGLSSYPTRMFNLIKEKSEVPLGHVHKIRKKVESQPEEALKLLLALFESEPES - KAIVVASTTNEVEELACSWRKYFRVVWIHGKLGAAEKVSRTKEFVTDGSMQVLIGTKL - VTEGIDIKQLMMVIMLDNRLNIIELIQGVGRLRDGGLCYLLSRKNSWAARNRKGELPP - IKEGCITEQVREFYGLESKKGKKGQHVGCCGSRTDLSADTVELIERMDRLAEKQATAS - MSIVALPSSFQESNSSDRYRKYCSSDEDSNTCIHGSANASTNASTNAITTASTNVRTN - ATTNASTNATTNASTNASTNATTNASTNATTNSSTNATTTASTNVRTSATTTASINVR - TSATTTESTNSSTNATTTESTNSSTNATTTESTNSNTSATTTASINVRTSATTTESTN - SSTSATTTASINVRTSATTTKSINSSTNATTTESTNSNTNATTTESTNSSTNATTTES - TNSSTNATTTESTNSNTSAATTESTNSNTSATTTESTNASAKEDANKDGNAEDNRFHP - VTDINKESYKRKGSQMVLLERKKLKAQFPNTSENMNVLQFLGFRSDEIKHLFLYGIDI - YFCPEGVFTQYGLCKGCQKMFELCVCWAGQKVSYRRIAWEALAVERMLRNDEEYKEYL - EDIEPYHGDPVGYLKYFSVKRREIYSQIQRNYAWYLAITRRRETISVLDSTRGKQGSQ - VFRMSGRQIKELYFKVWSNLRESKTEVLQYFLNWDEKKCQEEWEAKDDTVVVEALEKG - GVFQRLRSMTSAGLQGPQYVKLQFSRHHRQLRSRYELSLGMHLRDQIALGVTPSKVPH - WTAFLSMLIGLFYNKTFRQKLEYLLEQISEVWLLPHWLDLANVEVLAADDTRVPLYML - MVAVHKELDSDDVPDGRFDILLCRDSSREVGE" - rep_origin 7470..8793 - /note="ARS902; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130156" - gene complement(<8793..>9155) - /gene="PAU14" - /locus_tag="YIL176C" - /db_xref="GeneID:854631" - mRNA complement(<8793..>9155) - /gene="PAU14" - /locus_tag="YIL176C" - /product="seripauperin PAU14" - /transcript_id="NM_001179521.1" - /db_xref="GeneID:854631" - CDS complement(8793..9155) - /gene="PAU14" - /locus_tag="YIL176C" - /note="hypothetical protein; member of the seripauperin - multigene family encoded mainly in subtelomeric regions; - identical to Pau1p" - /codon_start=1 - /product="seripauperin PAU14" - /protein_id="NP_012093.1" - /db_xref="GeneID:854631" - /db_xref="SGD:S000001438" - /translation="MVKLTSIAAGVAAIAATASATTTLAQSDERVNLVELGVYVSDIR - AHLAQYYMFQAAHPTETYPVEVAEAVFNYGDFTTMLTGISPDQVTRMITGVPWYSSRL - KPAISSALSKDGIYTIAN" - gene 9183..9500 - /locus_tag="YIL175W" - /note="hypothetical protein; classified as pseudogene - because there is no ATG at the beginning of this ORF" - /pseudo - /db_xref="GeneID:854632" - /db_xref="SGD:S000001437" - mRNA 9183..9500 - /locus_tag="YIL175W" - /pseudo - /db_xref="GeneID:854632" - /db_xref="SGD:S000001437" - gene 9469..9696 - /locus_tag="YIL174W" - /note="hypothetical protein" - /pseudo - /db_xref="GeneID:854633" - /db_xref="SGD:S000001436" - mRNA 9469..9696 - /locus_tag="YIL174W" - /pseudo - /db_xref="GeneID:854633" - /db_xref="SGD:S000001436" - gene <11492..>16141 - /gene="VTH1" - /locus_tag="YIL173W" - /db_xref="GeneID:854634" - mRNA <11492..>16141 - /gene="VTH1" - /locus_tag="YIL173W" - /product="signal sequence-binding protein" - /transcript_id="NM_001179519.1" - /db_xref="GeneID:854634" - CDS 11492..16141 - /gene="VTH1" - /locus_tag="YIL173W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005768 endosome - [PMID:14562095]" - /experiment="EXISTENCE:genetic interaction:GO:0005048 - signal sequence binding [PMID:8662642]" - /experiment="EXISTENCE:genetic interaction:GO:0006896 - Golgi to vacuole transport [PMID:8662642]" - /note="Putative membrane glycoprotein; has strong - similarity to Vth2p and Pep1p/Vps10p; may be involved in - vacuolar protein sorting" - /codon_start=1 - /product="signal sequence-binding protein" - /protein_id="NP_012095.1" - /db_xref="GeneID:854634" - /db_xref="SGD:S000001435" - /translation="MALFRALYIIWVFLLIPLSNAEEFTPKVTRTLSRYVFDIVNFDD - SNTLIRAEEDSVEISFDAGENWKTIDEIEEPIESFVVDPFRGHDRAFAFVKTAPKFYV - TDDQGKSWRPLTIPISEKASNYFCDVTTHPIKKKHLIIRCDLLTIKNSGLMYVGREIY - TTNDGVSFSQVKPSFGKIDGHISTARCDFIKSSEDSDLGGNDASILCLFRNTEYIEST - GSTIDKSELILSADGGETFKELVQFKDKVVSRYEILKHHVIVLTQDDMYNEMSSTNIW - ISNDVSTFQVARTPTKIRHVNMGQIHEDSIGRIVLPVSRERDDEDSNQPGAAEVLISD - SEGLKFLPINWIPNNQFGYINVAYPGFLKGTFFGSFHPFIEYSDRKRKYSRQKVREET - KVSVDNGLTWTNLKVVDRENVDLFGCDVTKPERCSLQTHFYDLRNLNPSAGIMMISGI - VGDGSAYNWKEEKTFISRDSGLTWRLVHNSTGLYTTGDLGNIIMYIPYRSNENGDVPS - KFYYSLDQGKTWGEYDLIMPIYPYRLVSTISDGSGSKFILTGTSITEDPIFITYSIDF - SAVFDYKSCEEGDFEDWNLADGKCVNGAKYKYRRRKQDAQCLVKKAFKDLSLDETPCN - SCTGSDYECSFEFVRDAKGDCIPDYNLIALSDICDKSKGKSVLVKPLQLIKGDKCKTP - MKIESVDIPCDEIPKEGSSDKEIVTTENKFDFEIKFYQYFDTVADESLVMLNSIGDAY - ISHDGGQTIKRFDTDGEKIVEIVFNPYFNSSAYLFGSKGNIFLTHDRGYSFMIAKLPE - ARQLGMPLDFSAKAQDTFIYYGGKNCESILSPECHAVAYLTKDGGETFTEMLDNAIHC - EFAGTLFKYPSNDDMVMCQVKEKFSQTRSLVSSTDFFQDDRKTVFENIIGYLSTGGYI - IVAVPHEDNELRAYVTNDGAEFTEAKFPYDEDIGKQDAFTILGSEEGSIFLHLATNLE - SGHDFGNLLKSNSNGTSFVTLEHAVNRNTFGYVDFEKVQGLEGIIITNIVSNSEKVGE - NKEDEQLKTKITFNDGSDWNFLKPPKKDSEGKKFPCDSVSLDKCSLHLHGYTERKDIR - DTYSSGSALGMMFGVGNVGDRLLPYEECSTFLTTDGGETWTEVKKGPHQWEYGDHGGV - LVLVPENAETDSISYSTDFGKTWKDYKFCGDKVLVKDIITVPRDSALRFLLFGEAKNM - GSGSFRTYTIDFRNIFERQCEFDITGRKRADFKYSPLGSRTGCLFGHKTEFLRKTDEK - CFIGNIPLSEFSRNVKNCPCTRQDFECDYNFYKASDGTCKLVKGLSSANGADICKKEP - DLIEYYDSSGYRKIPLSTCKGGLKLDAHLAPHPCPGKEKAFREKYSINTGAYALVFVT - ILLVIFFVAWFVYDRGIRRNGGFSRFEEIRLGDDGLIENNRTDRVVNIIVRLGLCISL - ITKSAFQRAKAGTAQLSSKFRARFGNKKGATYSSLLHDQLSDEPDGFHEDSNDLSSFR - GQGSNSEIEQEDVDTSQQEHTLRTDLLGASNIPDALPARSASHESDLAAARSEDK" - rep_origin 16141..16784 - /note="ARS904; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130157" - gene complement(<16784..>18553) - /gene="IMA3" - /locus_tag="YIL172C" - /db_xref="GeneID:854635" - mRNA complement(<16784..>18553) - /gene="IMA3" - /locus_tag="YIL172C" - /product="oligo-1,6-glucosidase IMA3" - /transcript_id="NM_001179518.1" - /db_xref="GeneID:854635" - CDS complement(16784..18553) - /gene="IMA3" - /locus_tag="YIL172C" - /EC_number="3.2.1.10" - /experiment="EXISTENCE:direct assay:GO:0004574 - oligo-1,6-glucosidase activity [PMID:20471265]" - /experiment="EXISTENCE:direct assay:GO:0004575 sucrose - alpha-glucosidase activity [PMID:24649402]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:genetic interaction:GO:0046352 - disaccharide catabolic process - [PMID:20562106|PMID:20471265]" - /experiment="EXISTENCE:mutant phenotype:GO:0004574 - oligo-1,6-glucosidase activity [PMID:20562106]" - /note="Alpha-glucosidase; weak, but broad substrate - specificity for alpha-1,4- and alpha-1,6-glucosides; - member of IMA isomaltase family; not required for - isomaltose utilization, but Ima3p overexpression allows - the ima1 null mutant to grow on isomaltose; lower - activitiy and thermostability in vitro than Ima2p despite - sequence difference of only 3 amino acids; cleaves - alpha-1,3 linkage of nigerose and turanose, but not - alpha-1,5 of leucrose; identical to IMA4" - /codon_start=1 - /product="oligo-1,6-glucosidase IMA3" - /protein_id="NP_012096.1" - /db_xref="GeneID:854635" - /db_xref="SGD:S000001434" - /translation="MTISSAHPETEPKWWKEATIYQIYPASFKDSNNDGWGDMKGIAS - KLEYIKELGTDAIWISPFYDSPQDDMGYDIANYEKVWPTYGTNEDCFALIEKTHKLGM - KFITDLVINHCSSEHEWFKESRSSKTNPKRDWFFWRPPKGYDAEGKPIPPNNWRSYFG - GSAWTFDEKTQEFYLRLFCSTQPDLNWENEDCRKAIYESAVGYWLDHGVDGFRIDVGS - LYSKVAGLPDAPVIDENSKWQLSDPFTMNGPRIHEFHQEMNKFIRNRVKDGREIMTVG - EMRHATDETKRLYTSASRHELSELFNFSHTDVGTSPKFRQNLIPYELKDWKVALAELF - RYVNGTDCWSTIYLENHDQPRSITRFGDDSPKNRVISGKLLSVLLVSLSGTLYVYQGQ - ELGEINFKNWPIEKYEDVEVRNNYDAIKEEHGENSKEMKRFLEAIALISRDHARTPMQ - WSREEPNAGFSGPNAKPWFYLNESFREGINAEDESKDPNSVLNFWKEALRFRKAHKDI - TVYGYDFEFIDLDNKKLFSFTKKYDNKTLFAALNFSSDSIDFTIPNNSSSFKLEFGNY - PRSEVDASSRTLKPWEGRIYISE" - gene 19515..19844 - /locus_tag="YIL171W" - /gene_synonym="HXT12" - /note="Possible pseudogene in strain S288C; YIL171W and - the adjacent ORF, YIL170W/HXT12, together encode a - non-functional member of the hexose transporter family" - /pseudo - /db_xref="GeneID:2827704" - /db_xref="SGD:S000001433" - mRNA 19515..19844 - /locus_tag="YIL171W" - /gene_synonym="HXT12" - /pseudo - /db_xref="GeneID:2827704" - /db_xref="SGD:S000001433" - gene 19847..21220 - /gene="HXT12" - /locus_tag="YIL170W" - /note="Possible pseudogene in strain S288C; YIL170W/HXT12 - and the adjacent ORF, YIL171W, together encode a - non-functional member of the hexose transporter family" - /pseudo - /db_xref="GeneID:854636" - /db_xref="SGD:S000001432" - mRNA 19847..21220 - /gene="HXT12" - /locus_tag="YIL170W" - /pseudo - /db_xref="GeneID:854636" - /db_xref="SGD:S000001432" - gene complement(<23119..>26106) - /gene="CSS1" - /locus_tag="YIL169C" - /db_xref="GeneID:854637" - mRNA complement(<23119..>26106) - /gene="CSS1" - /locus_tag="YIL169C" - /product="Css1p" - /transcript_id="NM_001179517.1" - /db_xref="GeneID:854637" - CDS complement(23119..26106) - /gene="CSS1" - /locus_tag="YIL169C" - /experiment="EXISTENCE:direct assay:GO:0005576 - extracellular region [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /note="hypothetical protein, secreted when constitutively - expressed; SWAT-GFP, seamless-GFP and mCherry fusion - proteins localize to the cell periphery, SWAT-GFP fusion - also localizes to the extracellular region, and mCherry - fusion also localizes to the vacuole; S/T rich and highly - similar to YOL155C, a putative glucan - alpha-1,4-glucosidase; transcript is induced in both high - and low pH environments; non-essential gene" - /codon_start=1 - /product="Css1p" - /protein_id="NP_012097.1" - /db_xref="GeneID:854637" - /db_xref="SGD:S000001431" - /translation="MFNRLNKFQAALALALYSQSALGQYYSNSTSISSNSSSTSVVSS - SSGSVSISSSIAETSSSATDILSSITQSASSTSGVSSSVGPSSSSVVSSSVSQSSSSV - SDVSSSVSQSSSSASDVSSSVSQSASSTSDVSSSVSQSSSSASDVSSSVSQSSSSASD - VSSSVSQSASSASDVSSSVSQSASSTSDVSSSVSQSSSSASDVSSSVSQSSSSASDVS - SSVSQSASSTSDVSSSVSQSASSTSGVSSSGSQSVSSASGSSSSFPQSTSSASTASGS - ATSNSLSSITSSASSASATASNSLSSSDGTIYLPTTTISGDLTLTGKVIATEGVVVAA - GAKLTLLDGDKYSFSADLKVYGDLLVKKSKETYPGTEFDISGENFDVTGNFNAEESAA - TSASIYSFTPSSFDNSGDISLSLSKSKKGEVTFSPYSNSGAFSFSNAILNGGSVSGLQ - RRDDTEGSVNNGEINLDNGSTYVIVEPVSGKGTVNIISGNLYLHYPDTFTGQTVVFKG - EGVLAVDPTETNATPIPVVGYTGKNQIAITADITALSYDGTTGVLTATQGNRQFSFAI - GTGFSSSDFSVSEGIFAGAYAYYLNYNGVVATSAASSSTASGASASVTGSTSFGASVT - GSTASTSFGASVTGSTASTSFGASVTGSTSVYTTTLDYVNATSTVVVSCSETTDSNGN - VYTITTTVPCSSTTATITSCDETGCHVSTSTGAVVTETVSSKSYTTATVTHCDDNGCN - TKTVTSECSKETSATTASPKSYTTVTVTHCDDNGCNTKTVTSEAPEATTTTTVSSQSY - TTATVTHCDDNGCKTKTVTSEAPEATTTTVSPKTYTTATVTQCDDNGCSTKTVTSECP - EETSATTTSPKSYTTVTVTHCDDNGCNTKTVTSEAPEATTTTVSPKTYTTATVTQCDD - NGCSTKTVTSEAPKETSETSETSAAPKDIHYCHWLLNGDDNGCNVKIITSKIPEATST - VTQLVLLQSHTLLSLLRVLKQPH" - gene 29032..30048 - /gene="SDL1" - /locus_tag="YIL167W" - /gene_synonym="YIL168W" - /pseudo - /db_xref="GeneID:854639" - CDS 29032..30048 - /gene="SDL1" - /locus_tag="YIL167W" - /gene_synonym="YIL168W" - /note="Blocked reading frame otherwise encoding L-serine - dehydratase" - /pseudo - /codon_start=1 - /db_xref="GeneID:854639" - /db_xref="SGD:S000001429" - gene complement(<30938..>32566) - /gene="SOA1" - /locus_tag="YIL166C" - /db_xref="GeneID:854640" - mRNA complement(<30938..>32566) - /gene="SOA1" - /locus_tag="YIL166C" - /product="Soa1p" - /transcript_id="NM_001179514.1" - /db_xref="GeneID:854640" - CDS complement(30938..32566) - /gene="SOA1" - /locus_tag="YIL166C" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:genetic interaction:GO:0000316 - sulfite transport [PMID:28165463]" - /experiment="EXISTENCE:genetic interaction:GO:0008272 - sulfate transport [PMID:28165463]" - /experiment="EXISTENCE:mutant phenotype:GO:0015116 sulfate - transmembrane transporter activity [PMID:28165463]" - /experiment="EXISTENCE:mutant phenotype:GO:0072348 sulfur - compound transport [PMID:28165463]" - /experiment="EXISTENCE:mutant phenotype:GO:1901682 sulfur - compound transmembrane transporter activity - [PMID:28165463]" - /note="Sulfonate and inorganic sulfur transporter; low - affinity sulfate, high affinity sulfite, thiosulfite and - major sulfonate transporter; functions as a an H+ - symporter; similar to the allantoate permease (Dal5p) - subfamily of the major facilitator superfamily; mRNA - expression is elevated by sulfur limitation; non-essential - gene" - /codon_start=1 - /product="Soa1p" - /protein_id="NP_012100.1" - /db_xref="GeneID:854640" - /db_xref="SGD:S000001428" - /translation="MSVQKEEYDIVEKAQLSVSAESLTSDSESISHNPFDDFHKAERW - RKVYESSGYEGLSKFDPEFTWTKDEEKKLVRKMDLKIFLWVFIMFAFLDLIRKNIARA - VSDNFIVDLKMNTNDYNLGQTVYLVIFLASELPGNLLSKRFGPERVIPVQIVLWSVIC - ITQAGLKNRGQFIATRCLLGMVQGGFIPDNILYLSYYYTGAELTFRLSFFWCAIPLFQ - ILGSLLASGIIEMRGIHNLAGWQYLFIIEGFLSLSVGVASFYLMRRGPTQTGESAFHK - GKSLFTEYEEKIMVNRILRDDPSKGDMSNRQPVTFKEILYTLTEFDLWPLFIQGITAF - ISLQTVGSYLSLILKSLNYSTFLSNILAIPGQALLLINLPLAALLSRKLKEKSLCVGI - ANVWVLPFIVSLVALPTDTNPWIKYILLTGILGLPYTHSILAGWVSEISNSVRSRTVG - TALYNMSAQVGAIIASNMYRNDDKPYYTRGNKILLGFTCFNICMAVATKFYYISRNKY - KDRKWNSMTKEEQINYLDTTKDKGMKRLDYRFIH" - gene complement(<33718..>34077) - /locus_tag="YIL165C" - /db_xref="GeneID:854641" - mRNA complement(<33718..>34077) - /locus_tag="YIL165C" - /product="uncharacterized protein" - /transcript_id="NM_001179513.1" - /db_xref="GeneID:854641" - CDS complement(33718..34077) - /locus_tag="YIL165C" - /experiment="EXISTENCE:mutant phenotype:GO:0000422 - autophagy of mitochondrion [PMID:19793921]" - /experiment="EXISTENCE:mutant phenotype:GO:0016236 - macroautophagy [PMID:19793921]" - /note="hypothetical protein; mutant exhibits mitophagy - defects; in closely related species and other S. - cerevisiae strain backgrounds YIL165C and adjacent ORF, - YIL164C, likely constitute a single ORF encoding a - nitrilase gene" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012101.1" - /db_xref="GeneID:854641" - /db_xref="SGD:S000001427" - /translation="MKNIAYEGRLFLISAVQFMPDATAMGFGEIIDQATGKRKLPGWP - SADDNCINGGSVIIDPYGEIIAGPLLGQEGLLTAEINTDLIAEARFDLDPVGHYARGD - VFQLTVNERSHDVKFTK" - gene complement(<34087..>34686) - /gene="NIT1" - /locus_tag="YIL164C" - /db_xref="GeneID:854642" - mRNA complement(<34087..>34686) - /gene="NIT1" - /locus_tag="YIL164C" - /product="Nit1p" - /transcript_id="NM_001179512.1" - /db_xref="GeneID:854642" - CDS complement(34087..34686) - /gene="NIT1" - /locus_tag="YIL164C" - /note="Nitrilase; member of the nitrilase branch of the - nitrilase superfamily; in closely related species and - other S. cerevisiae strain backgrounds YIL164C and - adjacent ORF, YIL165C, likely constitute a single ORF - encoding a nitrilase gene" - /codon_start=1 - /product="Nit1p" - /protein_id="NP_012102.1" - /db_xref="GeneID:854642" - /db_xref="SGD:S000001426" - /translation="MAKHIVAALQIGSCPGSTKDTLKKILSYEKEIKESGAKLVVIPE - ATLGGYPKGSNFGVYLGYRLQEGREEYAKYLAEAIEIGNGEKYPEISQLCALSKATDA - SLCVGCIERDGTTLYCTMVYIDPKDGYVGKHRKLMPTAGERLIWGQGDGSTLPVVDTA - AGKIGGAICWENMMPLLRYAMYKKGVEIWCAPTVDARPI" - gene complement(<36899..>37252) - /locus_tag="YIL163C" - /db_xref="GeneID:854643" - mRNA complement(<36899..>37252) - /locus_tag="YIL163C" - /product="uncharacterized protein" - /transcript_id="NM_001270749.1" - /db_xref="GeneID:854643" - CDS complement(36899..37252) - /locus_tag="YIL163C" - /note="hypothetical protein; mRNA identified as translated - by ribosome profiling data" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001257678.1" - /db_xref="GeneID:854643" - /db_xref="SGD:S000001425" - /translation="MFLFRRKDYRIEIQKKKVVKSFFQMVYYRALRQHFCQTKSFKHS - SKRNVSMMVIGKHRAYLKSLRHHIKGFIITFLVSFSRNLHGKTLDVGSINATRISSPP - DNFLNWVFSFYSCSE" - gene <37385..>38983 - /gene="SUC2" - /locus_tag="YIL162W" - /db_xref="GeneID:854644" - mRNA <37385..>38983 - /gene="SUC2" - /locus_tag="YIL162W" - /product="beta-fructofuranosidase SUC2" - /transcript_id="NM_001179510.1" - /db_xref="GeneID:854644" - CDS 37385..38983 - /gene="SUC2" - /locus_tag="YIL162W" - /EC_number="3.2.1.26" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0004564 - beta-fructofuranosidase activity - [PMID:363706|PMID:3902817]" - /experiment="EXISTENCE:direct assay:GO:0005576 - extracellular region [PMID:6341817]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:6341817]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005987 sucrose - catabolic process [PMID:363706|PMID:3902817]" - /experiment="EXISTENCE:direct assay:GO:0051670 inulinase - activity [PMID:23104410]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:1902927 inulin - catabolic process [PMID:23104410]" - /experiment="EXISTENCE:mutant phenotype:GO:0004564 - beta-fructofuranosidase activity [PMID:2834091]" - /experiment="EXISTENCE:mutant phenotype:GO:0005987 sucrose - catabolic process [PMID:2834091]" - /experiment="EXISTENCE:mutant phenotype:GO:0010147 fructan - catabolic process [PMID:23339519]" - /experiment="EXISTENCE:mutant phenotype:GO:0034484 - raffinose catabolic process [PMID:23339519]" - /note="Invertase; sucrose hydrolyzing enzyme; a secreted, - glycosylated form is regulated by glucose repression, and - an intracellular, nonglycosylated enzyme is produced - constitutively" - /codon_start=1 - /product="beta-fructofuranosidase SUC2" - /protein_id="NP_012104.1" - /db_xref="GeneID:854644" - /db_xref="SGD:S000001424" - /translation="MLLQAFLFLLAGFAAKISASMTNETSDRPLVHFTPNKGWMNDPN - GLWYDEKDAKWHLYFQYNPNDTVWGTPLFWGHATSDDLTNWEDQPIAIAPKRNDSGAF - SGSMVVDYNNTSGFFNDTIDPRQRCVAIWTYNTPESEEQYISYSLDGGYTFTEYQKNP - VLAANSTQFRDPKVFWYEPSQKWIMTAAKSQDYKIEIYSSDDLKSWKLESAFANEGFL - GYQYECPGLIEVPTEQDPSKSYWVMFISINPGAPAGGSFNQYFVGSFNGTHFEAFDNQ - SRVVDFGKDYYALQTFFNTDPTYGSALGIAWASNWEYSAFVPTNPWRSSMSLVRKFSL - NTEYQANPETELINLKAEPILNISNAGPWSRFATNTTLTKANSYNVDLSNSTGTLEFE - LVYAVNTTQTISKSVFADLSLWFKGLEDPEEYLRMGFEVSASSFFLDRGNSKVKFVKE - NPYFTNRMSVNNQPFKSENDLSYYKVYGLLDQNILELYFNDGDVVSTNTYFMTTGNAL - GSVNMTTGVDNLFYIDKFQVREVK" - gene <39433..>40140 - /gene="SMU2" - /locus_tag="YIL161W" - /db_xref="GeneID:854645" - mRNA <39433..>40140 - /gene="SMU2" - /locus_tag="YIL161W" - /product="Smu2p" - /transcript_id="NM_001179509.1" - /db_xref="GeneID:854645" - CDS 39433..40140 - /gene="SMU2" - /locus_tag="YIL161W" - /experiment="EXISTENCE:direct assay:GO:0005515 protein - binding [PMID:36113412]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:36113412]" - /experiment="EXISTENCE:direct assay:GO:0070651 - nonfunctional rRNA decay [PMID:36113412]" - /note="Protein involved in removal of stalled ribosomes; - acts as cofactor for Fap1p and Fpr1p in ubiquitination of - stalled monosomes and subsequent degradation; green - fluorescent protein (GFP)-fusion protein localizes to the - cytoplasm; mRNA is enriched in Scp160p-associated mRNPs; - YIL161W is a non-essential gene" - /codon_start=1 - /product="Smu2p" - /protein_id="NP_012105.1" - /db_xref="GeneID:854645" - /db_xref="SGD:S000001423" - /translation="MDTKLSVTGAKKSQGKASGLGNEGTPIGNEESTNKAKNGNKKRN - KNRNRNKKTETKEQNEPKPVTGGEEVRVEKSQAKNRRRKNNNGANKKNTLHYSKEINV - EERKQIAKRQEEIEQCIHTLSDFKLFKKGKHVTSYGYRISPMTDSGKISLKILFNIPL - DYPKAPIKLTMKSNEEVSSYMDTVIANFNWKARQLVKEDWRILSQINYLVSELEILKM - ENYKQIDKLRNSFYKTI" - gene complement(<40191..>41444) - /gene="POT1" - /locus_tag="YIL160C" - /gene_synonym="FOX3; POX3" - /db_xref="GeneID:854646" - mRNA complement(<40191..>41444) - /gene="POT1" - /locus_tag="YIL160C" - /gene_synonym="FOX3; POX3" - /product="acetyl-CoA C-acyltransferase" - /transcript_id="NM_001179508.1" - /db_xref="GeneID:854646" - CDS complement(40191..41444) - /gene="POT1" - /locus_tag="YIL160C" - /gene_synonym="FOX3; POX3" - /EC_number="2.3.1.16" - /experiment="EXISTENCE:direct assay:GO:0003729 mRNA - binding [PMID:21124907]" - /experiment="EXISTENCE:direct assay:GO:0003988 acetyl-CoA - C-acyltransferase activity [PMID:7754706]" - /experiment="EXISTENCE:direct assay:GO:0005758 - mitochondrial intermembrane space [PMID:22984289]" - /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome - [PMID:19470242]" - /experiment="EXISTENCE:direct assay:GO:0005782 peroxisomal - matrix [PMID:7754706|PMID:8125978]" - /experiment="EXISTENCE:mutant phenotype:GO:0005782 - peroxisomal matrix [PMID:8125978]" - /experiment="EXISTENCE:mutant phenotype:GO:0006635 fatty - acid beta-oxidation [PMID:12819196]" - /note="3-ketoacyl-CoA thiolase with broad chain length - specificity; cleaves 3-ketoacyl-CoA into acyl-CoA and - acetyl-CoA during beta-oxidation of fatty acids" - /codon_start=1 - /product="acetyl-CoA C-acyltransferase" - /protein_id="NP_012106.1" - /db_xref="GeneID:854646" - /db_xref="SGD:S000001422" - /translation="MSQRLQSIKDHLVESAMGKGESKRKNSLLEKRPEDVVIVAANRS - AIGKGFKGAFKDVNTDYLLYNFLNEFIGRFPEPLRADLNLIEEVACGNVLNVGAGATE - HRAACLASGIPYSTPFVALNRQCSSGLTAVNDIANKIKVGQIDIGLALGVESMTNNYK - NVNPLGMISSEELQKNREAKKCLIPMGITNENVAANFKISRKDQDEFAANSYQKAYKA - KNEGLFEDEILPIKLPDGSICQSDEGPRPNVTAESLSSIRPAFIKDRGTTTAGNASQV - SDGVAGVLLARRSVANQLNLPVLGRYIDFQTVGVPPEIMGVGPAYAIPKVLEATGLQV - QDIDIFEINEAFAAQALYCIHKLGIDLNKVNPRGGAIALGHPLGCTGARQVATILREL - KKDQIGVVSMCIGTGMGAAAIFIKE" - gene <41825..>45952 - /gene="BNR1" - /locus_tag="YIL159W" - /db_xref="GeneID:854647" - mRNA <41825..>45952 - /gene="BNR1" - /locus_tag="YIL159W" - /product="formin BNR1" - /transcript_id="NM_001179507.1" - /db_xref="GeneID:854647" - CDS 41825..45952 - /gene="BNR1" - /locus_tag="YIL159W" - /experiment="EXISTENCE:direct assay:GO:0005522 profilin - binding [PMID:15923184]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:9774458]" - /experiment="EXISTENCE:direct assay:GO:0032153 cell - division site [PMID:26771880]" - /experiment="EXISTENCE:direct assay:GO:0045010 actin - nucleation [PMID:30076201]" - /experiment="EXISTENCE:direct assay:GO:0051016 barbed-end - actin filament capping [PMID:15923184]" - /experiment="EXISTENCE:direct assay:GO:0051017 actin - filament bundle assembly [PMID:15923184]" - /experiment="EXISTENCE:direct assay:GO:0070649 - formin-nucleated actin cable assembly [PMID:15923184]" - /experiment="EXISTENCE:genetic interaction:GO:0032956 - regulation of actin cytoskeleton organization - [PMID:17237521]" - /experiment="EXISTENCE:genetic interaction:GO:0051017 - actin filament bundle assembly [PMID:23671312]" - /experiment="EXISTENCE:genetic interaction:GO:0070649 - formin-nucleated actin cable assembly [PMID:11740491]" - /experiment="EXISTENCE:genetic interaction:GO:1903475 - mitotic actomyosin contractile ring assembly - [PMID:12419188]" - /experiment="EXISTENCE:mutant phenotype:GO:0005522 - profilin binding [PMID:15923184]" - /experiment="EXISTENCE:mutant phenotype:GO:0051017 actin - filament bundle assembly [PMID:23671312]" - /experiment="EXISTENCE:mutant phenotype:GO:0070649 - formin-nucleated actin cable assembly [PMID:15371545]" - /note="Formin; nucleates the formation of linear actin - filaments; involved in processes such as budding and - mitotic spindle orientation which require the formation of - polarized actin cables; activity is regulated by Hof1p and - by the Bud14p-Kel1p-Kel2p complex; dephosphorylated and - delocalized from the division site in a - Glc7p/Ref2p-dependent manner; functionally redundant with - BNI1" - /codon_start=1 - /product="formin BNR1" - /protein_id="NP_012107.1" - /db_xref="GeneID:854647" - /db_xref="SGD:S000001421" - /translation="MDSSPNKKTYRYPRRSLSLHARDRVSEARKLEELNLNDGLVAAG - LQLVGVALEKQGTGSHIYMKQKNFSANDVSSSPMVSEEVNGSEMDFNPKCMPQDASLV - ERMFDELLKDGTFFWGAAYKNLQNISLRRKWLLICKIRSSNHWGKKKVTSSTTYSTHL - ATNELAENAHFLDGLVRNLSTGGMKLSKALYKLEKFLRKQSFLQLFLKDEIYLTTLIE - KTLPLISKELQFVYLRCFKILMNNPLARIRALHSEPLIRWFTELLTDQNSNLKCQLLS - MELLLLLTYVEGSTGCELIWDQLSILFTDWLEWFDKILADDIAIHSSLYLNWNQLKID - YSTTFLLLINSILQGFNNKTALEILNFLKKNNIHNTITFLELAYKDDPNSVVIMEQIK - QFKSKESAIFDSMIKTTNDTNSLHPTKDIARIESEPLCLENCLLLKAKDSPVEAPINE - IIQSLWKILDSQKPYSESIKLLKLINSLLFYLIDSFQVSTNPSFDETLESAENVDYVF - QDSVNKLLDSLQSDEIARRAVTEIDDLNAKISHLNEKLNLVENHDKDHLIAKLDESES - LISLKTKEIENLKLQLKATKKRLDQITTHQRLYDQPPSLASSNLSIAGSIIKNNSHGN - IIFQNLAKKQQQQQKISLPKRSTSLLKSKRVTSLSSYLTDANNENESQNESEDKSKDS - LFQRSTSTINFNIPSMKNITNMQNVSLNSILSELEFSNSLGTQPNYQSSPVLSSVSSS - PKLFPRLSSDSLDNGIQLVPEVVKLPQLPPPPPPPPPPPLPQSLLTEAEAKPDGVSCI - AAPAPPPLPDLFKTKTCGAVPPPPPPPPLPESLSMNKGPSNHDLVTPPAPPLPNGLLS - SSSVSINPTTTDLKPPPTEKRLKQIHWDKVEDIKDTLWEDTFQRQETIKELQTDGIFS - QIEDIFKMKSPTKIANKRNAESSIALSSNNGKSSNELKKISFLSRDLAQQFGINLHMF - SQLSDMEFVMKVLNCDNDIVQNVNILKFFCKEELVNIPKSMLNKYEPYSQGKDGKAVS - DLQRADRIFLELCINLRFYWNARSKSLLTLSTYERDYYDLIFKLQKIDDAISHLNRSP - KFKSLMFIITEIGNHMNKRIVKGIKLKSLTKLAFVRSSIDQNVSFLHFIEKVIRIKYP - DIYGFVDDLKNIEDLGKISLEHVESECHEFHKKIEDLVTQFQVGKLSKEENLDPRDQI - IKKVKFKINRAKTKSELLIGQCKLTLIDLNKLMKYYGEDPKDKESKNEFFQPFIEFLA - MFKKCAKENIEKEEMERVYEQRKSLLDMRTSSNKKSNGSDENDGEKVNRDAVDLLISK - LREVKKDPEPLRRRKSTKLNEIAINVHEGDVKTRKDEDHVLLERTHAMLNDIQNI" - gene <46201..>46815 - /gene="AIM20" - /locus_tag="YIL158W" - /db_xref="GeneID:854648" - mRNA <46201..>46815 - /gene="AIM20" - /locus_tag="YIL158W" - /product="Aim20p" - /transcript_id="NM_001179506.3" - /db_xref="GeneID:854648" - CDS 46201..46815 - /gene="AIM20" - /locus_tag="YIL158W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:22842922]" - /note="hypothetical protein; overexpression causes cell - cycle delay or arrest; green fluorescent protein - (GFP)-fusion protein localizes to vacuole; null mutant - displays elevated frequency of mitochondrial genome loss; - relocalizes from nucleus to cytoplasm upon DNA replication - stress; AIM20 has a paralog, SKG1, that arose from the - whole genome duplication" - /codon_start=1 - /product="Aim20p" - /protein_id="NP_012108.3" - /db_xref="GeneID:854648" - /db_xref="SGD:S000001420" - /translation="MGNVSVAVGTAVGIPIAVGVIIALIFWCKLQRRYKKEEIRDADL - EKMVMEEVAVSVYDGFKAEINSSSEASTINEKEANQDLKPCQEKTAKAGYTPAYRRQL - NASMGTLRPKKQSTAYTNVPVIFSGEKVNYGMVRDPSYSFMYPLTLSRKETSSLRSAS - TSNLSSSTENTALHEEIKLDDPYENDFTNYTVNKREFIDSLRPH" - gene complement(<46949..>47542) - /gene="COA1" - /locus_tag="YIL157C" - /db_xref="GeneID:854649" - mRNA complement(<46949..>47542) - /gene="COA1" - /locus_tag="YIL157C" - /product="Coa1p" - /transcript_id="NM_001179505.1" - /db_xref="GeneID:854649" - CDS complement(46949..47542) - /gene="COA1" - /locus_tag="YIL157C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005743 - mitochondrial inner membrane [PMID:17882259]" - /experiment="EXISTENCE:direct assay:GO:0031966 - mitochondrial membrane [PMID:17882260]" - /experiment="EXISTENCE:mutant phenotype:GO:0033617 - mitochondrial cytochrome c oxidase assembly - [PMID:17882259|PMID:17882260]" - /experiment="EXISTENCE:physical interaction:GO:0033617 - mitochondrial cytochrome c oxidase assembly - [PMID:17882259]" - /note="Mitochondrial inner membrane protein; required for - assembly of the cytochrome c oxidase complex (complex IV); - interacts with complex IV assembly factor Shy1p during the - early stages of assembly" - /codon_start=1 - /product="Coa1p" - /protein_id="NP_012109.1" - /db_xref="GeneID:854649" - /db_xref="SGD:S000001419" - /translation="MMLRLVTKGLPKVTPSAAKAVLVRGSLLHSFSTSARFNNSVAED - EAKIVLKDKNRPLRIDRELPDPTTERRKRIAGFLLFSVAIGSALSLIFNYEKTESPII - SNTLYYIRRSPATKNILGESIEFDGIIPWVYGELNSVKGRINITFYIKGDKNVTGTVR - LVADRNTHDEEFLIHEWSVTAAGQKIDLLAENTKTPI" - gene <47690..>47973 - /gene="ATG44" - /locus_tag="YIL156W-B" - /gene_synonym="MCO8; MDI1" - /db_xref="GeneID:3628034" - mRNA join(<47690..47698,47761..>47973) - /gene="ATG44" - /locus_tag="YIL156W-B" - /gene_synonym="MCO8; MDI1" - /product="mitofissin" - /transcript_id="NM_001184521.1" - /db_xref="GeneID:3628034" - CDS join(47690..47698,47761..47973) - /gene="ATG44" - /locus_tag="YIL156W-B" - /gene_synonym="MCO8; MDI1" - /experiment="EXISTENCE:direct assay:GO:0005758 - mitochondrial intermembrane space [PMID:37192628]" - /experiment="EXISTENCE:direct assay:GO:0008289 lipid - binding [PMID:37192628]" - /experiment="EXISTENCE:mutant phenotype:GO:0000266 - mitochondrial fission [PMID:37192628]" - /experiment="EXISTENCE:mutant phenotype:GO:0000423 - mitophagy [PMID:37192628]" - /note="Mitochondrial fission factor (mitofissin) essential - for mitophagy; directly binds to lipid membranes and - brings about lipid membrane fragility to facilitate - membrane fission; S. pombe homolog complements null - mutant" - /codon_start=1 - /product="mitofissin" - /protein_id="NP_001027534.1" - /db_xref="GeneID:3628034" - /db_xref="SGD:S000028511" - /translation="MTLVGKLVHISIDLVLVSTCLAGIKRNTGLTPKLETLDNQTMRN - YMKRYLNLGESVYDYSVATCGSSTYFARK" - gene <48091..>51306 - /gene="UBP7" - /locus_tag="YIL156W" - /db_xref="GeneID:854650" - mRNA <48091..>51306 - /gene="UBP7" - /locus_tag="YIL156W" - /product="ubiquitin-specific protease UBP7" - /transcript_id="NM_001179504.1" - /db_xref="GeneID:854650" - CDS 48091..51306 - /gene="UBP7" - /locus_tag="YIL156W" - /EC_number="3.4.19.12" - /experiment="EXISTENCE:curator inference:GO:0005737 - cytoplasm [PMID:8982460]" - /experiment="EXISTENCE:direct assay:GO:0004843 - cysteine-type deubiquitinase activity [PMID:24746795]" - /experiment="EXISTENCE:direct assay:GO:0016579 protein - deubiquitination [PMID:24746795]" - /note="Ubiquitin-specific protease that cleaves - ubiquitin-protein fusions; involved in cell cycle - progression through S phase; UBP7 has a paralog, UBP11, - that arose from the whole genome duplication" - /codon_start=1 - /product="ubiquitin-specific protease UBP7" - /protein_id="NP_012110.1" - /db_xref="GeneID:854650" - /db_xref="SGD:S000001418" - /translation="MLDDDKGTAMHPHITPFTPEYSNELLRRVQDLYHEDIKHYYPQL - KLEKLLDLLEHTEYLFELYLDSIHHDRPNDALTAFIIGCYYVFLIIPQSLQFQTRNKS - YSIYTDLKKMYENEMNMTNVVLMVKKEIGVVLDESVKHGAGIEHRITKKRAFSVPADD - LSGQVASLSLDTAAPQDHGLKGTFTEDDAEQSSPVWTAPNLEPNDQLKLALLPEVIPT - PAFREPERKTSVPVRPSVLLEDVPSIYHEDDTSFASLNPPFREITADRSVTHRKDSYH - SVYMVDSGNLKEDNDDLFNVENDGFIQSLDILQKQSIITAPELFSILSNRVEREKVLL - IDLRIPQRSAINHIVAPNLVNVDPNLLWDKQTNTPIYKDDILEHLLKENENFINRNKF - DYIVYYTDVKTFMTINFDYAFIFFYLMLTSQKTPLTTVPTTLLGGYEKWKKTLHSYAQ - EYHISIEDYLYRPYSQKARLQQEQQQQQQQPDSQDSFSAKESSTKVPEPPSWKPPDLP - IRLRKRPPPPPPVSMPTTPEIPPPLPPKIMVHSQVSSISRKPPIPAKQHVKKEQLNSN - EIIQRKRQHQHQHYDQQILQPQRAYNIPTIERSPNVYVSLSITGLRNLGNTCYINSMI - QCLFAAKTFRTLFISSKYKSYLQPIRSNGSHYSPKLSNSLSMLFNKMYLNGGCSVVPT - GFLKVINQLRPDLKIPDDQQDTQEFLMILLDRLHDELSDQQHVANDYPNLLLYNADAL - KVSNNEYKHWFDKNVIGNGISPIDDIFQGQMENSLQCKRCGYTTFNYSTFYVLSLAIP - RRSMKLSKLGRSTEKRVKLEDCINMFTSDEVLSGENAWDCPRCGPTASVSTSVSALEN - EPSIVKSKKKKSRFFTLHTGTKRRHLDFFGDGITEGHNSNNNNTTIFERERSRSPFRM - LGGSGKRSSSSTPFSTGGNDSNNSSDYKNKKLTTVKTINFVTLPKILVIHLSRFYYDL - TKKNNTVVTYPLILNIILKNNDTMKYKLFGVVNHTGTLISGHYTSLVNKDLEHNVNIG - RSKWYYFDDEVVKADRKHGSDKNLKISSSDVYVLFYERVYD" - gene complement(<51759..>53708) - /gene="GUT2" - /locus_tag="YIL155C" - /db_xref="GeneID:854651" - mRNA complement(<51759..>53708) - /gene="GUT2" - /locus_tag="YIL155C" - /product="glycerol-3-phosphate dehydrogenase" - /transcript_id="NM_001179503.1" - /db_xref="GeneID:854651" - CDS complement(51759..53708) - /gene="GUT2" - /locus_tag="YIL155C" - /EC_number="1.1.5.3" - /experiment="EXISTENCE:direct assay:GO:0004368 - glycerol-3-phosphate dehydrogenase (quinone) activity - [PMID:12032156]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:11502169|PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane [PMID:16689936]" - /experiment="EXISTENCE:direct assay:GO:0006116 NADH - oxidation [PMID:12032156]" - /experiment="EXISTENCE:mutant phenotype:GO:0004368 - glycerol-3-phosphate dehydrogenase (quinone) activity - [PMID:8256521]" - /experiment="EXISTENCE:mutant phenotype:GO:0005739 - mitochondrion [PMID:8256521]" - /experiment="EXISTENCE:mutant phenotype:GO:0006071 - glycerol metabolic process [PMID:8256521]" - /note="Mitochondrial glycerol-3-phosphate dehydrogenase; - expression is repressed by both glucose and cAMP and - derepressed by non-fermentable carbon sources in a Snf1p, - Rsf1p, Hap2/3/4/5 complex dependent manner" - /codon_start=1 - /product="glycerol-3-phosphate dehydrogenase" - /protein_id="NP_012111.1" - /db_xref="GeneID:854651" - /db_xref="SGD:S000001417" - /translation="MFSVTRRRAAGAAAAMATATGTLYWMTSQGDRPLVHNDPSYMVQ - FPTAAPPQVSRRDLLDRLAKTHQFDVLIIGGGATGTGCALDAATRGLNVALVEKGDFA - SGTSSKSTKMIHGGVRYLEKAFWEFSKAQLDLVIEALNERKHLINTAPHLCTVLPILI - PIYSTWQVPYIYMGCKFYDFFAGSQNLKKSYLLSKSATVEKAPMLTTDNLKASLVYHD - GSFNDSRLNATLAITAVENGATVLNYVEVQKLIKDPTSGKVIGAEARDVETNELVRIN - AKCVVNATGPYSDAILQMDRNPSGLPDSPLNDNSKIKSTFNQIAVMDPKMVIPSIGVH - IVLPSFYCPKDMGLLDVRTSDGRVMFFLPWQGKVLAGTTDIPLKQVPENPMPTEADIQ - DILKELQHYIEFPVKREDVLSAWAGVRPLVRDPRTIPADGKKGSATQGVVRSHFLFTS - DNGLITIAGGKWTTYRQMAEETVDKVVEVGGFHNLKPCHTRDIKLAGAEEWTQNYVAL - LAQNYHLSSKMSNYLVQNYGTRSSIICEFFKESMENKLPLSLADKENNVIYSSEENNL - VNFDTFRYPFTIGELKYSMQYEYCRTPLDFLLRRTRFAFLDAKEALNAVHATVKVMGD - EFNWSEKKRQWELEKTVNFIKTFGV" - gene complement(<53981..>55021) - /gene="IMP21" - /locus_tag="YIL154C" - /gene_synonym="IMP2" - /db_xref="GeneID:854652" - mRNA complement(<53981..>55021) - /gene="IMP21" - /locus_tag="YIL154C" - /gene_synonym="IMP2" - /product="Imp21p" - /transcript_id="NM_001179502.3" - /db_xref="GeneID:854652" - CDS complement(53981..55021) - /gene="IMP21" - /locus_tag="YIL154C" - /gene_synonym="IMP2" - /experiment="EXISTENCE:direct assay:GO:0003713 - transcription coactivator activity [PMID:8628275]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0000429 carbon - catabolite regulation of transcription from RNA polymerase - II promoter [PMID:7496532]" - /note="Transcriptional activator involved in maintenance - of ion homeostasis; also involved in protection against - DNA damage caused by bleomycin and other oxidants; - contains a C-terminal leucine-rich repeat" - /codon_start=1 - /product="Imp21p" - /protein_id="NP_012112.3" - /db_xref="GeneID:854652" - /db_xref="SGD:S000001416" - /translation="MQKSILLTKPDGTQSNLHSIKTETPTTVEFDSEQMERGHRERGR - SKKKRGERDSNVSSLSRSRSRASSRSRVREEEFLKWTVLRQDPSMRLRVVDVDSEEEG - EGNDEDDDDGDGDDMDEEESDEEQVSDIENDLEIDEEFHYDLGMKVLPNFCTSINEVL - DSSKPWIAKYEISIRGHENEDVSLEQLDGGYVRAMQLLTKGAGAEAGNQRSFILYTDL - SSESTYALTYLMGAAVNQGDTVYIVHWEPSKPTDDSQMFANVARIRKHVMHLFDCVAG - VLDDLDVVVLSLTHPYPKHLLNEMIHGLKPVALCCSLSVILSTLQNFVCSVPILAVRK - KLKRAKRKGISE" - gene <55198..>56379 - /gene="RRD1" - /locus_tag="YIL153W" - /gene_synonym="YPA1" - /db_xref="GeneID:854653" - mRNA <55198..>56379 - /gene="RRD1" - /locus_tag="YIL153W" - /gene_synonym="YPA1" - /product="peptidylprolyl isomerase RRD1" - /transcript_id="NM_001179501.1" - /db_xref="GeneID:854653" - CDS 55198..56379 - /gene="RRD1" - /locus_tag="YIL153W" - /gene_synonym="YPA1" - /EC_number="5.2.1.8" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:21129186]" - /experiment="EXISTENCE:direct assay:GO:0003755 - peptidyl-prolyl cis-trans isomerase activity - [PMID:16380387]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:15150670]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:15150670]" - /experiment="EXISTENCE:mutant phenotype:GO:0006281 DNA - repair [PMID:9705277|PMID:15150670]" - /experiment="EXISTENCE:mutant phenotype:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:21129186]" - /experiment="EXISTENCE:mutant phenotype:GO:0006914 - autophagy [PMID:31962153]" - /experiment="EXISTENCE:mutant phenotype:GO:0007052 mitotic - spindle organization [PMID:11262194]" - /experiment="EXISTENCE:mutant phenotype:GO:0019888 protein - phosphatase regulator activity [PMID:12952889]" - /experiment="EXISTENCE:physical interaction:GO:0000082 - G1/S transition of mitotic cell cycle [PMID:11134337]" - /experiment="EXISTENCE:physical interaction:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:21129186]" - /note="Peptidyl-prolyl cis/trans-isomerase; activator of - the phosphotyrosyl phosphatase activity of PP2A; involved - in G1 phase progression, microtubule dynamics, bud - morphogenesis and DNA repair; required for rapid reduction - of Sgs1p levels in response to rapamycin; subunit of the - Tap42p-Sit4p-Rrd1p complex; protein increases in abundance - and relative distribution to the nucleus increases upon - DNA replication stress" - /codon_start=1 - /product="peptidylprolyl isomerase RRD1" - /protein_id="NP_012113.1" - /db_xref="GeneID:854653" - /db_xref="SGD:S000001415" - /translation="MSLDRVDWPHATFSTPVKRIFDTQTTLDFQSSLAIHRIKYHLHK - YTTLISHCSDPDPHATASSIAMVNGLMGVLDKLAHLIDETPPLPGPRRYGNLACREWH - HKLDERLPQWLQEMLPSEYHEVVPELQYYLGNSFGSSTRLDYGTGHELSFMATVAALD - MLGMFPHMRGADVFLLFNKYYTIMRRLILTYTLEPAGSHGVWGLDDHFHLVYILGSSQ - WQLLDAQAPLQPREILDKSLVREYKDTNFYCQGINFINEVKMGPFEEHSPILYDIAVT - VPRWSKVCKGLLKMYSVEVLKKFPVVQHFWFGTGFFPWVNIQNGTDLPVFEEKEEESI - EQANAGSPGREQTSTRFPTSTSMPPPGVPPSGNNINYLLSHQNQSHRNQTSFSRDRLR - R" - gene <56545..>57252 - /gene="VPR1" - /locus_tag="YIL152W" - /db_xref="GeneID:854654" - mRNA <56545..>57252 - /gene="VPR1" - /locus_tag="YIL152W" - /product="Vpr1p" - /transcript_id="NM_001179500.1" - /db_xref="GeneID:854654" - CDS 56545..57252 - /gene="VPR1" - /locus_tag="YIL152W" - /note="hypothetical protein" - /codon_start=1 - /product="Vpr1p" - /protein_id="NP_012114.1" - /db_xref="GeneID:854654" - /db_xref="SGD:S000001414" - /translation="MSHKRRGLVIYQDQKQQQQHPPGQSLSSISWSPTRRPHHPLKQQ - STNSFSEILSKSSVQPNVQHDGNHMPISLLVLKQEHHKQQQQQQQRQNIRSQNSTPPL - RQLVQESQWTSSASNSSLKKQEKQPQTFYNTDSKLVSQLHSSVKDLDAIIQTHKPKFD - TIIRDFSQATILSSNELLIKLPKDQTIILHSRAPKINAEWLQNKVNDPSASLVIDSRS - FLTLCNNIKWYLHWKFI" - gene complement(<57338..>60694) - /gene="ESL1" - /locus_tag="YIL151C" - /db_xref="GeneID:854655" - mRNA complement(<57338..>60694) - /gene="ESL1" - /locus_tag="YIL151C" - /product="Esl1p" - /transcript_id="NM_001179499.1" - /db_xref="GeneID:854655" - CDS complement(57338..60694) - /gene="ESL1" - /locus_tag="YIL151C" - /note="hEST1A/B (SMG5/6)-like protein; contributes to - environment-sensing adaptive gene expression responses; - Esl1p and Esl2p contain a 14-3-3-like domain and a - putative PilT N-terminus ribonuclease domain; ESL1 has a - paralog, ESL2, that arose from the whole genome - duplication" - /codon_start=1 - /product="Esl1p" - /protein_id="NP_012115.1" - /db_xref="GeneID:854655" - /db_xref="SGD:S000001413" - /translation="MVDLMVPANDDPSNETDYSRSNNNHTHIVSDMRPTSAAFLHQKR - HSSSSHNDTPESSFAKRRVPGIVDPVGKGFIDGITNSQISAQNTPSKTDDASRRPSIS - RKVMESTPQVKTSSIPTMDVPKSPYYVNRTMLARNMKVVSRDTYEDNANPQMRADEPL - VASNGIYSNSQPQSQVTLSDIRRAPVVAASPPPMIRQLPSAQPNQTFIKKLQEIYKII - VVQETELQQRCLYLTTSQTTELKSLWAIYRLNTELIKNYINFIITALLTTQPINDLIM - GQEILDIYRIEKRLWVYGIITFLDVLKNFSNFMDPEVCCQFIIYAFISVSNMLEDIPL - KYSILWRQRLGDLSRMAISLYPSGFIDWRLSAEYWYTESMKYIYGCGKLYYHIATVQQ - NSLEAFVNLGKSVFCQDPFTPSQQTLQLLIENIYQSAFIDRSSGSANNNEIAHRNSQL - IDYLKHTEVMLLPSFLENMDLQHVVLMYFKDKFGKDFNGNDVFDTKDMFCQNPESLRY - YFRHAPAFAESQLLQLIGFGNPKNPFALLFQLPKYLKLKKDKREKKRSEATETSSYTD - PFDVQISSESYFQNIDALNSSFNDIPTNLNIWLDSLNHINMTSIQCSIHVLTKFLHAP - LVVALPHFLTWLHFIVAILKKLEMVNSKQVVAFWIHFLRRTMPWNSIVTLGNVLVCYM - LDNLHPFLKKELEKFYSLELDDLIEYYNENENLPEIWKCWGTLWFDAIKKCDVMEIPG - VQDHLFFDSPLDGIVFDEKDEVGEKFWMRSVRAVLLLKGIAKKFPDLGLKVSFQASVF - CRRNDIPPDYFLKNLTFKLDAYDEDNYNDNNELDDLYDTIEINEEIEAVNMDPQATPN - LSVVSGESIFEYTGYTRLAPDYHCFDKNGGFNSAFIYSQWSNVGNGVTLDVSGESIYD - VANNNLSLHWEKIFFDKIAAASKGSDENYNCTLYFVIDATSWLRHFAHIFKLAKNNTL - KFAICLTTFQELRYLRGSKDDTVVEAATRSVITIRQLYDEKKIIPMRFTGNIATHVEE - NLEFEEQITWKTHVDEFVIDAIAKLNQRFQAERLTDENKNKGKEFAVLVTDDDNMNQK - AKDRMIKTCNTKYLFSLGSKLGINSGLCTN" - gene complement(<61013..>62728) - /gene="MCM10" - /locus_tag="YIL150C" - /gene_synonym="DNA43" - /db_xref="GeneID:854656" - mRNA complement(<61013..>62728) - /gene="MCM10" - /locus_tag="YIL150C" - /gene_synonym="DNA43" - /product="Mcm10p" - /transcript_id="NM_001179498.1" - /db_xref="GeneID:854656" - CDS complement(61013..62728) - /gene="MCM10" - /locus_tag="YIL150C" - /gene_synonym="DNA43" - /experiment="EXISTENCE:direct assay:GO:0003688 DNA - replication origin binding [PMID:15494305|PMID:10783164]" - /experiment="EXISTENCE:direct assay:GO:0003690 - double-stranded DNA binding [PMID:19605346]" - /experiment="EXISTENCE:direct assay:GO:0003697 - single-stranded DNA binding [PMID:19605346|PMID:27751725]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:11168584|PMID:13680157|PMID:9154825]" - /experiment="EXISTENCE:direct assay:GO:0031298 replication - fork protection complex [PMID:16531994]" - /experiment="EXISTENCE:genetic interaction:GO:0006270 DNA - replication initiation [PMID:10783164]" - /experiment="EXISTENCE:genetic interaction:GO:0006271 DNA - strand elongation involved in DNA replication - [PMID:10783164|PMID:11168584]" - /experiment="EXISTENCE:mutant phenotype:GO:0000727 - double-strand break repair via break-induced replication - [PMID:20516198]" - /experiment="EXISTENCE:mutant phenotype:GO:0005657 - replication fork [PMID:15494305]" - /experiment="EXISTENCE:mutant phenotype:GO:0006270 DNA - replication initiation [PMID:10783164|PMID:9154825]" - /experiment="EXISTENCE:mutant phenotype:GO:0006271 DNA - strand elongation involved in DNA replication - [PMID:10783164|PMID:11168584|PMID:9154825]" - /experiment="EXISTENCE:mutant phenotype:GO:0030466 silent - mating-type cassette heterochromatin formation - [PMID:16085704|PMID:16328881]" - /experiment="EXISTENCE:mutant phenotype:GO:0031509 - subtelomeric heterochromatin formation [PMID:16085704]" - /note="Essential chromatin-associated protein; involved in - initiation of DNA replication; required for association of - MCM2-7 complex with replication origins; required to - stabilize catalytic subunit of DNA polymerase-alpha; - coordinates function of replication fork helicase; - self-associates through its N-terminal domain" - /codon_start=1 - /product="Mcm10p" - /protein_id="NP_012116.1" - /db_xref="GeneID:854656" - /db_xref="SGD:S000001412" - /translation="MNDPREILAVDPYNNITSDEEDEQAIARELEFMERKRQALVERL - KRKQEFKKPQDPNFEAIEVPQSPTKNRVKVGSHNATQQGTKFEGSNINEVRLSQLQQQ - PKPPASTTTYFMEKFQNAKKNEDKQIAKFESMMNARVHTFSTDEKKYVPIITNELESF - SNLWVKKRYIPEDDLKRALHEIKILRLGKLFAKIRPPKFQEPEYANWATVGLISHKSD - IKFTSSEKPVKFFMFTITDFQHTLDVYIFGKKGVERYYNLRLGDVIAILNPEVLPWRP - SGRGNFIKSFNLRISHDFKCILEIGSSRDLGWCPIVNKKTHKKCGSPINISLHKCCDY - HREVQFRGTSAKRIELNGGYALGAPTKVDSQPSLYKAKGENGFNIIKGTRKRLSEEEE - RLKKSSHNFTNSNSAKAFFDEKFQNPDMLANLDNKRRKIIETKKSTALSRELGKIMRR - RESSGLEDKSVGERQKMKRTTESALQTGLIQRLGFDPTHGKISQVLKSSVSGSEPKNN - LLGKKKTVINDLLHYKKEKVILAPSKNEWFKKRSHREEVWQKHFGSKETKETSDGSAS - DLEII" - gene complement(<63028..>68067) - /gene="MLP2" - /locus_tag="YIL149C" - /db_xref="GeneID:854657" - mRNA complement(<63028..>68067) - /gene="MLP2" - /locus_tag="YIL149C" - /product="Mlp2p" - /transcript_id="NM_001179497.3" - /db_xref="GeneID:854657" - CDS complement(63028..68067) - /gene="MLP2" - /locus_tag="YIL149C" - /experiment="EXISTENCE:direct assay:GO:0005635 nuclear - envelope [PMID:10085285]" - /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm - [PMID:10085285]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005816 spindle - pole body [PMID:16027220]" - /experiment="EXISTENCE:direct assay:GO:0044615 nuclear - pore nuclear basket [PMID:24152732]" - /experiment="EXISTENCE:genetic interaction:GO:0006355 - regulation of DNA-templated transcription [PMID:15692572]" - /experiment="EXISTENCE:genetic interaction:GO:0006606 - protein import into nucleus [PMID:10085285]" - /experiment="EXISTENCE:genetic interaction:GO:0034398 - telomere tethering at nuclear periphery [PMID:10638763]" - /experiment="EXISTENCE:genetic interaction:GO:0043021 - ribonucleoprotein complex binding [PMID:15692572]" - /experiment="EXISTENCE:genetic interaction:GO:1901925 - negative regulation of protein import into nucleus during - spindle assembly checkpoint [PMID:23177738]" - /experiment="EXISTENCE:mutant phenotype:GO:0000972 - transcription-dependent tethering of RNA polymerase II - gene DNA at nuclear periphery [PMID:20932479]" - /experiment="EXISTENCE:mutant phenotype:GO:0000973 - post-transcriptional tethering of RNA polymerase II gene - DNA at nuclear periphery [PMID:20932479]" - /experiment="EXISTENCE:mutant phenotype:GO:0016973 - poly(A)+ mRNA export from nucleus [PMID:21036941]" - /experiment="EXISTENCE:mutant phenotype:GO:0051300 spindle - pole body organization [PMID:16027220]" - /experiment="EXISTENCE:physical interaction:GO:0005816 - spindle pole body [PMID:16027220]" - /experiment="EXISTENCE:physical interaction:GO:0043021 - ribonucleoprotein complex binding [PMID:15692572]" - /note="Myosin-like protein associated with the nuclear - envelope; nuclear basket protein that connects the nuclear - pore complex with the nuclear interior; involved in the - Tel1p pathway that controls telomere length; MLP2 has a - paralog, MLP1, that arose from the whole genome - duplication" - /codon_start=1 - /product="Mlp2p" - /protein_id="NP_012117.3" - /db_xref="GeneID:854657" - /db_xref="SGD:S000001411" - /translation="MEDKISEFLNVPFESLQGVTYPVLRKLYKKIAKFERSEEEVTKL - NVLVDEIKSQYYSRISKLKQLLDESSEQKNTAKEELNGLKDQLNEERSRYRREIDALK - KQLHVSHEAMREVNDEKRVKEEYDIWQSRDQGNDSLNDDLNKENKLLRRKLMEMENIL - QRCKSNAISLQLKYDTSVQEKELMLQSKKLIEEKLSSFSKKTLTEEVTKSSHVENLEE - KLYQMQSNYESVFTYNKFLLNQNKQLSQSVEEKVLEMKNLKDTASVEKAEFSKEMTLQ - KNMNDLLRSQLTSLEKDCSLRAIEKNDDNSCRNPEHTDVIDELIDTKLRLEKSKNECQ - RLQNIVMDCTKEEEATMTTSAVSPTVGKLFSDIKVLKRQLIKERNQKFQLQNQLEDFI - LELEHKTPELISFKERTKSLEHELKRSTELLETVSLTKRKQEREITSLRQKINGCEAN - IHSLVKQRLDLARQVKLLLLNTSAIQETASPLSQDELISLRKILESSNIVNENDSQAI - ITERLVEFSNVNELQEKNVELLNCIRILADKLENYEGKQDKTLQKVENQTIKEAKDAI - IELENINAKMETRINILLRERDSYKLLASTEENKANTNSVTSMEAAREKKIRELEAEL - SSTKVENSAIIQNLRKELLIYKKSQCKKKTTLEDFENFKGLAKEKERMLEEAIDHLKA - ELEKQKSWVPSYIHVEKERASTELSQSRIKIKSLEYEISKLKKETASFIPTKESLTRD - FEQCCKEKKELQMRLKESEISHNENKMDFSSKEGQYKAKIKELENNLERLRSDLQSKI - QEIESIRSCKDSQLKWAQNTIDDTEMKMKSLLTELSNKETTIEKLSSEIENLDKELRK - TKFQYKFLDQNSDASTLEPTLRKELEQIQVQLKDANSQIQAYEEIISSNENALIELKN - ELAKTKENYDAKIELEKKEKWAREEDLSRLRGELGEIRALQPKLKEGALHFVQQSEKL - RNEVERIQKMIEKIEKMSTIVQLCKKKEMSQYQSTMKENKDLSELVIRLEKDAADCQA - ELTKTKSSLYSAQDLLDKHERKWMEEKADYERELISNIEQTESLRVENSVLIEKVDDT - AANNGDKDHLKLVSLFSNLRHERNSLETKLTTCKRELAFVKQKNDSLEKTINDLQRTQ - TLSEKEYQCSAVIIDEFKDITKEVTQVNILKENNAILQKSLKNVTEKNREIYKQLNDR - QEEISRLQRDLIQTKEQVSINSNKILVYESEMEQCKQRYQDLSQQQKDAQKKDIEKLT - NEISDLKGKLSSAENANADLENKFNRLKKQAHEKLDASKKQQAALTNELNELKAIKDK - LEQDLHFENAKVIDLDTKLKAHELQSEDVSRDHEKDTYRTLMEEIESLKKELQIFKTA - NSSSDAFEKLKVNMEKEKDRIIDERTKEFEKKLQETLNKSTSSEAEYSKDIETLKKEW - LKEYEDETLRRIKEAEENLKKRIRLPSEERIQKIISKRKEELEEEFRKKLKENAGSLT - FLDNKGSGEDAEEELWNSPSKGNSERPSAVAGFINQKNLKPQEQLKNVKNDVSFNDSQ - SMVTNKENNIVDSSAAGNKAIPTFSFGKPFFSSNTSSLQSFQNPFTASQSNINTNAPL - RTLNIQPEVAVKAAINFSNVTDLTNNSTDGAKITEIGSTSKRPIESGTSSDPDTKKVK - ESPANDQASNE" - gene <68708..>69528 - /gene="RPL40A" - /locus_tag="YIL148W" - /gene_synonym="CEP52A; UB11; UBI1" - /db_xref="GeneID:854658" - mRNA join(<68708..68715,69150..>69528) - /gene="RPL40A" - /locus_tag="YIL148W" - /gene_synonym="CEP52A; UB11; UBI1" - /product="ubiquitin-ribosomal 60S subunit protein L40A - fusion protein" - /transcript_id="NM_001179496.1" - /db_xref="GeneID:854658" - CDS join(68708..68715,69150..69528) - /gene="RPL40A" - /locus_tag="YIL148W" - /gene_synonym="CEP52A; UB11; UBI1" - /experiment="EXISTENCE:curator inference:GO:0002181 - cytoplasmic translation [PMID:22096102]" - /experiment="EXISTENCE:curator inference:GO:0003735 - structural constituent of ribosome [PMID:22096102]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic - large ribosomal subunit [PMID:22096102]" - /experiment="EXISTENCE:direct assay:GO:0042254 ribosome - biogenesis [PMID:2538753]" - /experiment="EXISTENCE:mutant phenotype:GO:0000027 - ribosomal large subunit assembly [PMID:22995916]" - /experiment="EXISTENCE:mutant phenotype:GO:0000055 - ribosomal large subunit export from nucleus - [PMID:22995916]" - /experiment="EXISTENCE:mutant phenotype:GO:0016567 protein - ubiquitination [PMID:8035826]" - /note="Ubiquitin-ribosomal 60S subunit protein L40A fusion - protein; cleaved to yield ubiquitin and ribosomal protein - L40A; ubiquitin may facilitate assembly of the ribosomal - protein into ribosomes; homologous to mammalian ribosomal - protein L40, no bacterial homolog; RPL40A has a paralog, - RPL40B, that arose from the whole genome duplication; - relative distribution to the nucleus increases upon DNA - replication stress" - /codon_start=1 - /product="ubiquitin-ribosomal 60S subunit protein L40A - fusion protein" - /protein_id="NP_012118.1" - /db_xref="GeneID:854658" - /db_xref="SGD:S000001410" - /translation="MQIFVKTLTGKTITLEVESSDTIDNVKSKIQDKEGIPPDQQRLI - FAGKQLEDGRTLSDYNIQKESTLHLVLRLRGGIIEPSLKALASKYNCDKSVCRKCYAR - LPPRATNCRKRKCGHTNQLRPKKKLK" - gene complement(<69791..>73453) - /gene="SLN1" - /locus_tag="YIL147C" - /gene_synonym="YPD2" - /db_xref="GeneID:854659" - mRNA complement(<69791..>73453) - /gene="SLN1" - /locus_tag="YIL147C" - /gene_synonym="YPD2" - /product="histidine kinase" - /transcript_id="NM_001179495.1" - /db_xref="GeneID:854659" - CDS complement(69791..73453) - /gene="SLN1" - /locus_tag="YIL147C" - /gene_synonym="YPD2" - /EC_number="2.7.13.3" - /experiment="EXISTENCE:direct assay:GO:0004673 protein - histidine kinase activity [PMID:8808622]" - /experiment="EXISTENCE:direct assay:GO:0005034 osmosensor - activity [PMID:12821642]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:10198019|PMID:14665464]" - /experiment="EXISTENCE:direct assay:GO:0007234 osmosensory - signaling via phosphorelay pathway [PMID:8808622]" - /experiment="EXISTENCE:direct assay:GO:0009927 histidine - phosphotransfer kinase activity [PMID:12455952]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0009927 - histidine phosphotransfer kinase activity [PMID:12455952]" - /note="Transmembrane histidine phosphotransfer kinase and - osmosensor; regulates MAP kinase cascade; transmembrane - protein with an intracellular kinase domain that signals - to Ypd1p and Ssk1p, thereby forming a phosphorelay system - similar to bacterial two-component regulators" - /codon_start=1 - /product="histidine kinase" - /protein_id="NP_012119.1" - /db_xref="GeneID:854659" - /db_xref="SGD:S000001409" - /translation="MRFGLPSKLELTPPFRIGIRTQLTALVSIVALGSLIILAVTTGV - YFTSNYKNLRSDRLYIAAQLKSSQIDQTLNYLYYQAYYLASRDALQSSLTSYVAGNKS - ADNWVDSLSVIQKFLSSSNLFYVAKVYDSSFNAVLNATNNGTGDLIPEDVLDSLFPLS - TDTPLPSSLETIGILTDPVLNSTDYLMSMSLPIFANPSIILTDSRVYGYITIIMSAEG - LKSVFNDTTALEHSTIAIISAVYNSQGKASGYHFVFPPYGSRSDLPQKVFSIKNDTFI - SSAFRNGKGGSLKQTNILSTRNTALGYSPCSFNLVNWVAIVSQPESVFLSPATKLAKI - ITGTVIAIGVFVILLTLPLAHWAVQPIVRLQKATELITEGRGLRPSTPRTISRASSFK - RGFSSGFAVPSSLLQFNTAEAGSTTSVSGHGGSGHGSGAAFSANSSMKSAINLGNEKM - SPPEEENKIPNNHTDAKISMDGSLNHDLLGPHSLRHNDTDRSSNRSHILTTSANLTEA - RLPDYRRLFSDELSDLTETFNTMTDALDQHYALLEERVRARTKQLEAAKIEAEAANEA - KTVFIANISHELRTPLNGILGMTAISMEETDVNKIRNSLKLIFRSGELLLHILTELLT - FSKNVLQRTKLEKRDFCITDVALQIKSIFGKVAKDQRVRLSISLFPNLIRTMVLWGDS - NRIIQIVMNLVSNALKFTPVDGTVDVRMKLLGEYDKELSEKKQYKEVYIKKGTEVTEN - LETTDKYDLPTLSNHRKSVDLESSATSLGSNRDTSTIQEEITKRNTVANESIYKKVND - REKASNDDVSSIVSTTTSSYDNAIFNSQFNKAPGSDDEEGGNLGRPIENPKTWVISIE - VEDTGPGIDPSLQESVFHPFVQGDQTLSRQYGGTGLGLSICRQLANMMHGTMKLESKV - GVGSKFTFTLPLNQTKEISFADMEFPFEDEFNPESRKNRRVKFSVAKSIKSRQSTSSV - ATPATNRSSLTNDVLPEVRSKGKHETKDVGNPNMGREEKNDNGGLEQLQEKNIKPSIC - LTGAEVNEQNSLSSKHRSRHEGLGSVNLDRPFLQSTGTATSSRNIPTVKDDDKNETSV - KILVVEDNHVNQEVIKRMLNLEGIENIELACDGQEAFDKVKELTSKGENYNMIFMDVQ - MPKVDGLLSTKMIRRDLGYTSPIVALTAFADDSNIKECLESGMNGFLSKPIKRPKLKT - ILTEFCAAYQGKKNNK" - rep_origin 73820..73991 - /note="ARS907; Autonomously replicating sequence" - /db_xref="SGD:S000178111" - gene complement(<74184..>75773) - /gene="ATG32" - /locus_tag="YIL146C" - /gene_synonym="ECM37" - /db_xref="GeneID:854660" - mRNA complement(<74184..>75773) - /gene="ATG32" - /locus_tag="YIL146C" - /gene_synonym="ECM37" - /product="mitophagy protein ATG32" - /transcript_id="NM_001179494.1" - /db_xref="GeneID:854660" - CDS complement(74184..75773) - /gene="ATG32" - /locus_tag="YIL146C" - /gene_synonym="ECM37" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:29673596]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane - [PMID:19619494|PMID:19619495]" - /experiment="EXISTENCE:genetic interaction:GO:0031930 - mitochondria-nucleus signaling pathway [PMID:30298458]" - /experiment="EXISTENCE:mutant phenotype:GO:0000422 - autophagy of mitochondrion [PMID:19619494|PMID:19619495]" - /note="Mitochondrial outer membrane protein required to - initiate mitophagy; recruits the autophagy adaptor protein - Atg11p and the ubiquitin-like protein Atg8p to the - mitochondrial surface to initiate mitophagy, the selective - vacuolar degradation of mitochondria in response to - starvation; can promote pexophagy when placed ectopically - in the peroxisomal membrane; regulates mitophagy and - ethanol production during alcoholic fermentation" - /codon_start=1 - /product="mitophagy protein ATG32" - /protein_id="NP_012120.1" - /db_xref="GeneID:854660" - /db_xref="SGD:S000001408" - /translation="MVLEYQQREGKGSSSKSMPPDSSSTTIHTCSEAQTGEDKGLLDP - HLSVLELLSKTGHSPSPMGQNLVTSIDISGNHNVNDSISGSWQAIQPLDLGASFIPER - CSSQTTNGSILSSSDTSEEEQELLQAPAADIINIIKQGQEGANVVSPSHPFKQLQKII - SLPLPGKEKTPFNEQDDDGDEDEAFEEDSVTITKSLTSSTNSFVMPKLSLTQKNPVFR - LLILGRTGSSFYQSIPKEYQSLFELPKYHDSATFPQYTGIVIIFQELREMVSLLNRIV - QYSQGKPVIPICQPGQVIQVKNVLKSFLRNKLVKLLFPPVVVTNKRDLKKMFQRLQDL - SLEYGEDVNEEDNDDEAIHTKSRSYCRNKKAENSKKKSPKSNKKPKRKKQKFFTSWFT - WGISITIGISFGCCVTYFVTAAYEHQTVKSLSLRPSILASLLSLDSSSDTINTPATAS - PSSTEQFLWFDKGTLQINFHSDGFIMKSLTIIKETWGKMNTFVLHALSKPLKFLENLN - KSSEFSIDESNRILALGYILL" - gene complement(<76354..>77283) - /gene="PAN6" - /locus_tag="YIL145C" - /db_xref="GeneID:854661" - mRNA complement(<76354..>77283) - /gene="PAN6" - /locus_tag="YIL145C" - /product="pantoate--beta-alanine ligase PAN6" - /transcript_id="NM_001179493.1" - /db_xref="GeneID:854661" - CDS complement(76354..77283) - /gene="PAN6" - /locus_tag="YIL145C" - /EC_number="6.3.2.1" - /experiment="EXISTENCE:direct assay:GO:0004592 - pantoate-beta-alanine ligase activity [PMID:10417331]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0015940 - pantothenate biosynthetic process [PMID:11154694]" - /note="Pantothenate synthase; also known as - pantoate-beta-alanine ligase, required for pantothenic - acid biosynthesis, deletion causes pantothenic acid - auxotrophy, homologous to E. coli panC" - /codon_start=1 - /product="pantoate--beta-alanine ligase PAN6" - /protein_id="NP_012121.2" - /db_xref="GeneID:854661" - /db_xref="SGD:S000001407" - /translation="MKIFHTVEEVVQWRTQELRETRFRETIGFVPTMGCLHSGHASLI - SQSVKENTYTVVSIFVNPSQFAPTEDLDNYPRTLPDDIKLLESLKVDVLFAPNAHVMY - PQGIPLDIEEQKGPFVSVLGLSEKLEGKTRPNFFRGVATVVTKLFNIVMADVAYFGQK - DIQQFIVLQCMVDELFVNTRLQMMPIVRNNNGLALSSRNKYLCPESLKISENLYRGLK - AAENAIRRLAPGGRLSRSEIIDTVTQIWAPYVDSHDFKIDYVSLADFKTLDELSDVEN - TSEQQPIVISCAVYVTDREKPDTVVRLIDNIVI" - gene <78074..>80149 - /gene="NDC80" - /locus_tag="YIL144W" - /gene_synonym="HEC1; TID3" - /db_xref="GeneID:854662" - mRNA <78074..>80149 - /gene="NDC80" - /locus_tag="YIL144W" - /gene_synonym="HEC1; TID3" - /product="kinetochore-associated Ndc80 complex subunit - NDC80" - /transcript_id="NM_001179492.3" - /db_xref="GeneID:854662" - CDS 78074..80149 - /gene="NDC80" - /locus_tag="YIL144W" - /gene_synonym="HEC1; TID3" - /experiment="EXISTENCE:direct assay:GO:0000776 kinetochore - [PMID:11511347|PMID:27170178]" - /experiment="EXISTENCE:direct assay:GO:0000779 condensed - chromosome, centromeric region [PMID:11266451]" - /experiment="EXISTENCE:direct assay:GO:0008017 microtubule - binding [PMID:17195848]" - /experiment="EXISTENCE:direct assay:GO:0031262 Ndc80 - complex [PMID:11266451|PMID:11179222]" - /experiment="EXISTENCE:mutant phenotype:GO:0000776 - kinetochore [PMID:11179222]" - /experiment="EXISTENCE:mutant phenotype:GO:0007059 - chromosome segregation [PMID:11266451]" - /experiment="EXISTENCE:mutant phenotype:GO:0034501 protein - localization to kinetochore [PMID:19893618|PMID:19952112]" - /experiment="EXISTENCE:physical interaction:GO:0031262 - Ndc80 complex [PMID:11179222]" - /note="Component of the kinetochore-associated Ndc80 - complex; conserved coiled-coil protein involved in - chromosome segregation, spindle checkpoint activity, and - kinetochore assembly and clustering; evolutionarily - conserved; complex members include Ndc80p, Nuf2p, Scp24p, - and Spc25p; modified by sumoylation" - /codon_start=1 - /product="kinetochore-associated Ndc80 complex subunit - NDC80" - /protein_id="NP_012122.3" - /db_xref="GeneID:854662" - /db_xref="SGD:S000001406" - /translation="MQSSTSTDQHVLHHMDPHRFTSQIPTATSSQLRRRNSTNQGLTD - MINKSIARNTISGTGIPTGGINKNKRTRSTVAGGTNGTALALNDKSNSRNSVSRLSIN - QLGSLQQHLSNRDPRPLRDKNFQSAIQEEIYDYLKKNKFDIETNHPISIKFLKQPTQK - GFIIIFKWLYLRLDPGYGFTKSIENEIYQILKNLRYPFLESINKSQISAVGGSNWHKF - LGMLHWMVRTNIKLDMCLNKVDRSLINQNTQEITILSQPLKTLDEQDQRQERYELMVE - KLLIDYFTESYKSFLKLEDNYEPSMQELKLGFEKFVHIINTDIANLQTQNDNLYEKYQ - EVMKISQKIKTTREKWKALKSDSNKYENYVNAMKQKSQEWPGKLEKMKSECELKEEEI - KALQSNISELHKILRKKGISTEQFELQNQEREKLTRELDKINIQSDKLTSSIKSRKLE - AEGIFKSLLDTLRQYDSSIQNLTRSRSQLGHNVNDSSLKINISENLLDRDFHEGISYE - QLFPKGSGINESIKKSILKLNDEIQERIKTIEKDNITLEKDIKNLKHDINEKTQINEK - LELELSEANSKFELSKQENERLLVAQRIEIEKMEKKINDSNLLMKTKISDAEELVTST - ELKLEELKVDLNRKRYKLHQQVIHVIDITSKFKINIQSSLENSENELGNVIEELRNLE - FETEHNVTN" - gene complement(<80510..>83041) - /gene="SSL2" - /locus_tag="YIL143C" - /gene_synonym="LOM3; RAD25" - /db_xref="GeneID:854663" - mRNA complement(<80510..>83041) - /gene="SSL2" - /locus_tag="YIL143C" - /gene_synonym="LOM3; RAD25" - /product="TFIIH/NER complex ATPase/helicase subunit SSL2" - /transcript_id="NM_001179491.1" - /db_xref="GeneID:854663" - CDS complement(80510..83041) - /gene="SSL2" - /locus_tag="YIL143C" - /gene_synonym="LOM3; RAD25" - /EC_number="3.6.4.12" - /experiment="EXISTENCE:direct assay:GO:0000112 - nucleotide-excision repair factor 3 complex - [PMID:8855246]" - /experiment="EXISTENCE:direct assay:GO:0000439 - transcription factor TFIIH core complex [PMID:7961739]" - /experiment="EXISTENCE:direct assay:GO:0003678 DNA - helicase activity [PMID:8202161]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0005675 - transcription factor TFIIH holo complex - [PMID:19818408|PMID:27381459]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0006289 - nucleotide-excision repair [PMID:8631896]" - /experiment="EXISTENCE:direct assay:GO:0006366 - transcription by RNA polymerase II [PMID:19818408]" - /experiment="EXISTENCE:direct assay:GO:0032508 DNA duplex - unwinding [PMID:22751016]" - /experiment="EXISTENCE:direct assay:GO:0097550 - transcription preinitiation complex [PMID:22751016]" - /experiment="EXISTENCE:mutant phenotype:GO:0000019 - regulation of mitotic recombination [PMID:10713167]" - /experiment="EXISTENCE:mutant phenotype:GO:0001111 RNA - polymerase II promoter clearance [PMID:10713451]" - /experiment="EXISTENCE:mutant phenotype:GO:0001113 - transcription open complex formation at RNA polymerase II - promoter [PMID:10409754]" - /experiment="EXISTENCE:mutant phenotype:GO:0001174 - transcriptional start site selection at RNA polymerase II - promoter [PMID:34652274]" - /experiment="EXISTENCE:mutant phenotype:GO:0006367 - transcription initiation at RNA polymerase II promoter - [PMID:25775526]" - /experiment="EXISTENCE:mutant phenotype:GO:0010525 - regulation of transposition, RNA-mediated [PMID:10713167]" - /experiment="EXISTENCE:mutant phenotype:GO:0015616 DNA - translocase activity [PMID:25775526]" - /experiment="EXISTENCE:mutant phenotype:GO:0016973 - poly(A)+ mRNA export from nucleus [PMID:17212653]" - /note="Component of RNA polymerase transcription factor - TFIIH holoenzyme; acts as dsDNA-dependent translocase in - context of TFIIH, unwinds DNA strands during initiation - and promotes transcription start site (TSS) scanning; has - DNA-dependent ATPase/helicase activity; interacts - functionally with TFIIB, has roles in TSS selection and - gene looping to juxtapose initiation and termination - regions; involved in DNA repair; relocalizes to cytosol - under hypoxia; homolog of human ERCC3" - /codon_start=1 - /product="TFIIH/NER complex ATPase/helicase subunit SSL2" - /protein_id="NP_012123.1" - /db_xref="GeneID:854663" - /db_xref="SGD:S000001405" - /translation="MTDVEGYQPKSKGKIFPDMGESFFSSDEDSPATDAEIDENYDDN - RETSEGRGERDTGAMVTGLKKPRKKTKSSRHTAADSSMNQMDAKDKALLQDTNSDIPA - DFVPDSVSGMFRSHDFSYLRLRPDHASRPLWISPSDGRIILESFSPLAEQAQDFLVTI - AEPISRPSHIHEYKITAYSLYAAVSVGLETDDIISVLDRLSKVPVAESIINFIKGATI - SYGKVKLVIKHNRYFVETTQADILQMLLNDSVIGPLRIDSDHQVQPPEDVLQQQLQQT - AGKPATNVNPNDVEAVFSAVIGGDNEREEEDDDIDAVHSFEIANESVEVVKKRCQEID - YPVLEEYDFRNDHRNPDLDIDLKPSTQIRPYQEKSLSKMFGNGRARSGIIVLPCGAGK - TLVGITAACTIKKSVIVLCTSSVSVMQWRQQFLQWCTLQPENCAVFTSDNKEMFQTES - GLVVSTYSMVANTRNRSHDSQKVMDFLTGREWGFIILDEVHVVPAAMFRRVVSTIAAH - AKLGLTATLVREDDKIGDLNFLIGPKLYEANWMELSQKGHIANVQCAEVWCPMTAEFY - QEYLRETARKRMLLYIMNPTKFQACQFLIQYHERRGDKIIVFSDNVYALQEYALKMGK - PFIYGSTPQQERMNILQNFQYNDQINTIFLSKVGDTSIDLPEATCLIQISSHYGSRRQ - EAQRLGRILRAKRRNDEGFNAFFYSLVSKDTQEMYYSTKRQAFLVDQGYAFKVITHLH - GMENIPNLAYASPRERRELLQEVLLKNEEAAGIEVGDDADNSVGRGSNGHKRFKSKAV - RGEGSLSGLAGGEDMAYMEYSTNKNKELKEHHPLIRKMYYKNLKK" - gene <83302..>84885 - /gene="CCT2" - /locus_tag="YIL142W" - /gene_synonym="BIN3; TCP2" - /db_xref="GeneID:854664" - mRNA <83302..>84885 - /gene="CCT2" - /locus_tag="YIL142W" - /gene_synonym="BIN3; TCP2" - /product="chaperonin-containing T-complex subunit CCT2" - /transcript_id="NM_001179490.1" - /db_xref="GeneID:854664" - CDS 83302..84885 - /gene="CCT2" - /locus_tag="YIL142W" - /gene_synonym="BIN3; TCP2" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276]" - /experiment="EXISTENCE:direct assay:GO:0005832 - chaperonin-containing T-complex [PMID:16762366]" - /experiment="EXISTENCE:direct assay:GO:0006457 protein - folding [PMID:16762366]" - /experiment="EXISTENCE:direct assay:GO:0051082 unfolded - protein binding [PMID:16762366]" - /experiment="EXISTENCE:physical interaction:GO:0005832 - chaperonin-containing T-complex [PMID:15704212]" - /note="Subunit beta of the cytosolic chaperonin Cct ring - complex; related to Tcp1p, required for the assembly of - actin and tubulins in vivo" - /codon_start=1 - /product="chaperonin-containing T-complex subunit CCT2" - /protein_id="NP_012124.1" - /db_xref="GeneID:854664" - /db_xref="SGD:S000001404" - /translation="MSVQIFGDQVTEERAENARLSAFVGAIAVGDLVKSTLGPKGMDK - LLQSASSNTCMVTNDGATILKSIPLDNPAAKVLVNISKVQDDEVGDGTTSVTVLSAEL - LREAEKLIDQSKIHPQTIIEGYRLASAAALDALTKAAVDNSHDKTMFREDLIHIAKTT - LSSKILSQDKDHFAELATNAILRLKGSTNLEHIQIIKILGGKLSDSFLDEGFILAKKF - GNNQPKRIENAKILIANTTLDTDKVKIFGTKFKVDSTAKLAQLEKAEREKMKNKIAKI - SKFGINTFINRQLIYDYPEQLFTDLGINSIEHADFEGVERLALVTGGEVVSTFDEPSK - CKLGECDVIEEIMLGEQPFLKFSGCKAGEACTIVLRGATDQTLDEAERSLHDALSVLS - QTTKETRTVLGGGCAEMVMSKAVDTEAQNIDGKKSLAVEAFARALRQLPTILADNAGF - DSSELVSKLRSSIYNGISTSGLDLNNGTIADMRQLGIVESYKLKRAVVSSASEAAEVL - LRVDNIIRARPRTANRQHM" - gene <85366..>87837 - /gene="AXL2" - /locus_tag="YIL140W" - /gene_synonym="BUD10; SRO4" - /db_xref="GeneID:854666" - mRNA <85366..>87837 - /gene="AXL2" - /locus_tag="YIL140W" - /gene_synonym="BUD10; SRO4" - /product="Axl2p" - /transcript_id="NM_001179488.1" - /db_xref="GeneID:854666" - CDS 85366..87837 - /gene="AXL2" - /locus_tag="YIL140W" - /gene_synonym="BUD10; SRO4" - /experiment="EXISTENCE:direct assay:GO:0000131 incipient - cellular bud site [PMID:8846915]" - /experiment="EXISTENCE:direct assay:GO:0000144 cellular - bud neck septin ring [PMID:8846915]" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:8846915]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:15282802]" - /experiment="EXISTENCE:direct assay:GO:0032153 cell - division site [PMID:8846915]" - /experiment="EXISTENCE:mutant phenotype:GO:0007120 axial - cellular bud site selection [PMID:8846915]" - /note="Integral plasma membrane protein; required for - axial budding in haploid cells; localizes to the incipient - bud site and bud neck; glycosylated by Pmt4p; potential - Cdc28p substrate" - /codon_start=1 - /product="Axl2p" - /protein_id="NP_012126.1" - /db_xref="GeneID:854666" - /db_xref="SGD:S000001402" - /translation="MTQLQISLLLTATISLLHLVVATPYEAYPIGKQYPPVARVNESF - TFQISNDTYKSSVDKTAQITYNCFDLPSWLSFDSSSRTFSGEPSSDLLSDANTTLYFN - VILEGTDSADSTSLNNTYQFVVTNRPSISLSSDFNLLALLKNYGYTNGKNALKLDPNE - VFNVTFDRSMFTNEESIVSYYGRSQLYNAPLPNWLFFDSGELKFTGTAPVINSAIAPE - TSYSFVIIATDIEGFSAVEVEFELVIGAHQLTTSIQNSLIINVTDTGNVSYDLPLNYV - YLDDDPISSDKLGSINLLDAPDWVALDNATISGSVPDELLGKNSNPANFSVSIYDTYG - DVIYFNFEVVSTTDLFAISSLPNINATRGEWFSYYFLPSQFTDYVNTNVSLEFTNSSQ - DHDWVKFQSSNLTLAGEVPKNFDKLSLGLKANQGSQSQELYFNIIGMDSKITHSNHSA - NATSTRSSHHSTSTSSYTSSTYTAKISSTSAAATSSAPAALPAANKTSSHNKKAVAIA - CGVAIPLGVILVALICFLIFWRRRRENPDDENLPHAISGPDLNNPANKPNQENATPLN - NPFDDDASSYDDTSIARRLAALNTLKLDNHSATESDISSVDEKRDSLSGMNTYNDQFQ - SQSKEELLAKPPVQPPESPFFDPQNRSSSVYMDSEPAVNKSWRYTGNLSPVSDIVRDS - YGSQKTVDTEKLFDLEAPEKEKRTSRDVTMSSLDPWNSNISPSPVRKSVTPSPYNVTK - HRNRHLQNIQDSQSGKNGITPTTMSTSSSDDFVPVKDGENFCWVHSMEPDRRPSKKRL - VDFSNKSNVNVGQVKDIHGRIPEML" - gene complement(<87979..>88716) - /gene="REV7" - /locus_tag="YIL139C" - /db_xref="GeneID:854667" - mRNA complement(<87979..>88716) - /gene="REV7" - /locus_tag="YIL139C" - /product="Rev7p" - /transcript_id="NM_001179487.1" - /db_xref="GeneID:854667" - CDS complement(87979..88716) - /gene="REV7" - /locus_tag="YIL139C" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:16546083]" - /experiment="EXISTENCE:direct assay:GO:0003887 - DNA-directed DNA polymerase activity [PMID:8658138]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16452144]" - /experiment="EXISTENCE:direct assay:GO:0016035 zeta DNA - polymerase complex - [PMID:8658138|PMID:23066099|PMID:22711820]" - /experiment="EXISTENCE:direct assay:GO:0042276 error-prone - translesion synthesis [PMID:11313481]" - /experiment="EXISTENCE:direct assay:GO:0070987 error-free - translesion synthesis [PMID:12514101]" - /experiment="EXISTENCE:genetic interaction:GO:0042276 - error-prone translesion synthesis [PMID:9765213]" - /experiment="EXISTENCE:mutant phenotype:GO:0042276 - error-prone translesion synthesis [PMID:3897795]" - /note="Accessory subunit of DNA polymerase zeta (pol - zeta); involved in translesion synthesis during - post-replication repair; required for mutagenesis induced - by DNA damage; involved in double-strand break repair; may - be involved in meiosis; forms a complex with Rev3p, Pol31p - and Pol32p" - /codon_start=1 - /product="Rev7p" - /protein_id="NP_012127.1" - /db_xref="GeneID:854667" - /db_xref="SGD:S000001401" - /translation="MNRWVEKWLRVYLKCYINLILFYRNVYPPQSFDYTTYQSFNLPQ - FVPINRHPALIDYIEELILDVLSKLTHVYRFSICIINKKNDLCIEKYVLDFSELQHVD - KDDQIITETEVFDEFRSSLNSLIMHLEKLPKVNDDTITFEAVINAIELELGHKLDRNR - RVDSLEEKAEIERDSNWVKCQEDENLPDNNGFQPPKIKLTSLVGSDVGPLIIHQFSEK - LISGDDKILNGVYSQYEEGESIFGSLF" - gene complement(<89230..>89715) - /gene="TPM2" - /locus_tag="YIL138C" - /db_xref="GeneID:854668" - mRNA complement(<89230..>89715) - /gene="TPM2" - /locus_tag="YIL138C" - /product="tropomyosin TPM2" - /transcript_id="NM_001179486.3" - /db_xref="GeneID:854668" - CDS complement(89230..89715) - /gene="TPM2" - /locus_tag="YIL138C" - /experiment="EXISTENCE:direct assay:GO:0000142 cellular - bud neck contractile ring [PMID:9864365]" - /experiment="EXISTENCE:direct assay:GO:0003786 actin - lateral binding [PMID:11457840]" - /experiment="EXISTENCE:direct assay:GO:0005884 actin - filament [PMID:7844152]" - /experiment="EXISTENCE:direct assay:GO:0032432 actin - filament bundle [PMID:9864365]" - /experiment="EXISTENCE:direct assay:GO:1904530 negative - regulation of actin filament binding [PMID:7844152]" - /experiment="EXISTENCE:genetic interaction:GO:0051017 - actin filament bundle assembly [PMID:9864365]" - /experiment="EXISTENCE:genetic interaction:GO:1903475 - mitotic actomyosin contractile ring assembly - [PMID:12419188]" - /experiment="EXISTENCE:mutant phenotype:GO:0000282 - cellular bud site selection [PMID:7844152]" - /note="Minor isoform of tropomyosin; binds to and - stabilizes actin cables and filaments, which direct - polarized cell growth and the distribution of several - organelles; appears to have distinct and also overlapping - functions with Tpm1p; TPM2 has a paralog, TPM1, that arose - from the whole genome duplication" - /codon_start=1 - /product="tropomyosin TPM2" - /protein_id="NP_012128.3" - /db_xref="GeneID:854668" - /db_xref="SGD:S000001400" - /translation="MEKIKEKLNSLKLESESWQEKYEELREQLKELEQSNTEKENEIK - SLSAKNEQLDSEVEKLESQLSDTKQLAEDSNNLRSNNENYTKKNQDLEQQLEDSEAKL - KEAMDKLKEADLNSEQMGRRIVALEEERDEWEKKCEEFQSKYEEAQKELDEIANSLEN - L" - gene complement(<89948..>92788) - /gene="TMA108" - /locus_tag="YIL137C" - /gene_synonym="TAE3" - /db_xref="GeneID:854669" - mRNA complement(<89948..>92788) - /gene="TMA108" - /locus_tag="YIL137C" - /gene_synonym="TAE3" - /product="Tma108p" - /transcript_id="NM_001179485.1" - /db_xref="GeneID:854669" - CDS complement(89948..92788) - /gene="TMA108" - /locus_tag="YIL137C" - /gene_synonym="TAE3" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005854 nascent - polypeptide-associated complex [PMID:27580715]" - /experiment="EXISTENCE:direct assay:GO:1990593 nascent - polypeptide-associated complex binding [PMID:27580715]" - /experiment="EXISTENCE:genetic interaction:GO:0042254 - ribosome biogenesis [PMID:20691087]" - /experiment="EXISTENCE:mutant phenotype:GO:0042254 - ribosome biogenesis [PMID:20691087]" - /experiment="EXISTENCE:mutant phenotype:GO:2000765 - regulation of cytoplasmic translation [PMID:27580715]" - /note="Ribosome-associated, nascent chain binding factor; - binds N-terminal region of nascent peptides during - translation; recognizes target proteins via its putative - metallopeptidase peptide-binding pocket" - /codon_start=1 - /product="Tma108p" - /protein_id="NP_012129.1" - /db_xref="GeneID:854669" - /db_xref="SGD:S000001399" - /translation="MSDNLLSLENPVVPSHYELRLEIDPKQSSPNFKGSAIIHLKFNP - NSTTLASIEDSFTQFKLHSKDLIVLSAHATIGSTKFDLKISQDTGKHLSIFNSESPIQ - LSNDCPLILSVQYVGKIRDIKTHHDKTFGIFKTNFMDRKTGTANNHVVATHCQPFSAS - NIFPCIDEPSNKSTFQLNIATDAQYKAVSNTPVEMVEALDSSQKHLVKFAKTPLMTTS - VFGFSIGDLEFLKTEIKLEGDRTIPVSIYAPWDIANAAFTLDTVQKYLPLLESYFKCP - YPLPKLDFVLLPYLSDMAMENFGMITIQLNHLLIPPNALANETVREQAQQLIVHELVH - QWMGNYISFDSWESLWFNESFATWLACHILEQNGDLSHYWTSEPYLLQQVEPTMCRDA - ADVNGRSIFQIAQRNTGIDSQTSDIFDPEAYTKGIIMLRSLQLATGESHLQKGLESVF - EDTKTFHARSVKPMDIWNHIGKFLKSQNITNFVSSWTRTPGLPVVKVEVEEKDGKTQT - KLTQHRFINQLSTEEKDQLEDVPYQVPLFGVLPDGKMDTKNVLLTDRTLKFDYPILVI - NHLAQGYYRVSYESEECYALINDKITEETLSEIDLRKIFLDLSQFIGDEGFQNSIHLH - GLFKILNHIASPSTKIASKYWDPLSKGLEVLQTIDRASLTSSKLQSFLKKKIVIPLFN - KIDWPHGEFDKSTNPHELKVMSQVLFLNKNSAKCAELCQIYFKHLLQGPRSSVPLELV - NSILVVVSQHCANIKQWKKIFDLVKRSSCTGITNHVINMYDQNSSETAMLIQNGAIES - LGFCLDSDIVKKTLNFITSNIESEGMELALFGFNYNFKKRLNKNEKPQDQVVRETIWE - WYMGNFDQWARKATRKGTTTGDHLHKALRSISLIIFQMFVADEPQKIEKFINLEKEKL - GQSLLSLDDIWASVQQDEESRKTIRRDLASLV" - gene <93619..>94800 - /gene="OM45" - /locus_tag="YIL136W" - /db_xref="GeneID:854670" - mRNA <93619..>94800 - /gene="OM45" - /locus_tag="YIL136W" - /product="Om45p" - /transcript_id="NM_001179484.1" - /db_xref="GeneID:854670" - CDS 93619..94800 - /gene="OM45" - /locus_tag="YIL136W" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:11502169|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane - [PMID:11179417|PMID:16407407|PMID:16689936]" - /note="Mitochondrial outer membrane hypothetical protein; - major constituent of the outer membrane, extending into - the intermembrane space; interacts with porin (Por1p) and - with Om14p; imported via the presequence pathway involving - the TOM and TIM23 complexes, then assembled in the outer - membrane by Mim1p; protein abundance increases in response - to DNA replication stress" - /codon_start=1 - /product="Om45p" - /protein_id="NP_012130.1" - /db_xref="GeneID:854670" - /db_xref="SGD:S000001398" - /translation="MSSRIIVGSAALAAAITASIMVREQKAKGQRREGNVSAYYNGQE - YGSSAPPQLGKLHNIKQGIKEDALSLKDALLGVSQKAREEAPKVTKRVISPEEDAQTR - KQLGQKAKDSSSQSIFNWGFSEAERRKAIAIGEFDTAKKRFEEAVDRNEKELLSTVMR - EKKAALDRASIEYERYGRARDFNELSDKLDQQERNSNPLKRLLKNNTGDANTEEAAAR - SVQGWGDTAQEFGREELEEAKRNASSEPSEAQKRLDELKKIKEKGWFGYNKGEQSEQQ - IAERVARGLEGWGETAAQLSKDEMDDLRWNYENSKKQLDKNVSDAMDSLSKAKEDLKQ - YGSHWWSGWTSKVDNDKQALKDEAQKKYDEALKKYDEAKNKFKEWNDKGDGKFWSSKK - D" - gene complement(<95065..>96375) - /gene="VHS2" - /locus_tag="YIL135C" - /db_xref="GeneID:854671" - mRNA complement(<95065..>96375) - /gene="VHS2" - /locus_tag="YIL135C" - /product="Vhs2p" - /transcript_id="NM_001179483.1" - /db_xref="GeneID:854671" - CDS complement(95065..96375) - /gene="VHS2" - /locus_tag="YIL135C" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095|PMID:16816427]" - /experiment="EXISTENCE:genetic interaction:GO:0030950 - establishment or maintenance of actin cytoskeleton - polarity [PMID:16816427]" - /experiment="EXISTENCE:genetic interaction:GO:0032186 - cellular bud neck septin ring organization - [PMID:24646733]" - /experiment="EXISTENCE:mutant phenotype:GO:0032186 - cellular bud neck septin ring organization - [PMID:24646733]" - /note="Regulator of septin dynamics; involved in the - regulation of septin dynamics at bud neck after mitotic - entry, likely by stabilizing septin structure; regulated - at post-translational level by cell cycle dependent - phosphorylation; likely phosphorylated by Cdc28p and - dephosphorylated by Cdc14p before cytokinesis; high-copy - suppressor of synthetic lethality of sis2 sit4 double - mutant; VHS2 has a paralog, MLF3, that arose from the - whole genome duplication" - /codon_start=1 - /product="Vhs2p" - /protein_id="NP_012131.1" - /db_xref="GeneID:854671" - /db_xref="SGD:S000001397" - /translation="MDTSNHNQDHDSHVAAQRENDNNYMPPSPSMSESSMIFERNVED - PSYLYKTVSNNAANSLSRQSSRTSLFNHNNSSNRNFHNLSQRSSAVNLHLQPSRTNES - IASYQTYNPDFVVQTPLDHRRTLENFVPPALDAGCSIVTDDTTGLDDVDMVYSRRPST - IGLDRALGRTRSLSSQSFDNETSPAHPRSPNDHGSRLLRFYSYADMLSDDNNNNVSNA - TSTSSTANPLRRPPMQGHYSFSSSLLNSPSHLPSPPSASASPPQHMNFTNPFIISRRY - SNTTINNANGGTSAGSTTGAALSRSPSNQQYLLKQQRSPSGSARSRRNSNRPGSAANI - MIGKPKSKFHMESSGSEGFSSEEEDNTMIERDKLNLKQKLQSQLAQPPSIANMVNDNH - NNTNKHKNTINNNIKNSPAFTNSNPSSKSNSNSTITSMNPDTTK" - gene complement(<96522..>96725) - /locus_tag="YIL134C-A" - /db_xref="GeneID:1466491" - mRNA complement(<96522..>96725) - /locus_tag="YIL134C-A" - /product="uncharacterized protein" - /transcript_id="NM_001184555.1" - /db_xref="GeneID:1466491" - CDS complement(96522..96725) - /locus_tag="YIL134C-A" - /note="hypothetical protein; identified by fungal homology - and RT-PCR" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_878096.1" - /db_xref="GeneID:1466491" - /db_xref="SGD:S000028556" - /translation="MVVGSEFNNTADVDVVAILLTLLNADYFVIKQRLVSACFTKRIK - WYFIYAIALLSLFSSRNTVCAPY" - gene 97111..97246 - /gene="SNR68" - /locus_tag="YNCI0001W" - /db_xref="GeneID:9164907" - ncRNA 97111..97246 - /ncRNA_class="snoRNA" - /gene="SNR68" - /locus_tag="YNCI0001W" - /product="SNR68" - /experiment="EXISTENCE:curator inference:GO:0005730 - nucleolus [PMID:10024243]" - /experiment="EXISTENCE:curator inference:GO:0031428 box - C/D RNP complex [PMID:10024243]" - /experiment="EXISTENCE:mutant phenotype:GO:0030562 rRNA - 2'-O-ribose methylation guide activity [PMID:10024243]" - /experiment="EXISTENCE:mutant phenotype:GO:0031167 rRNA - methylation [PMID:10024243]" - /note="C/D box small nucleolar RNA (snoRNA); guides - 2'-O-methylation of large subunit (LSU) rRNA at position - A2640" - /transcript_id="NR_132190.1" - /db_xref="GeneID:9164907" - /db_xref="SGD:S000006459" - gene <97395..>98330 - /gene="FLX1" - /locus_tag="YIL134W" - /db_xref="GeneID:854672" - mRNA <97395..>98330 - /gene="FLX1" - /locus_tag="YIL134W" - /product="flavin adenine dinucleotide transporter FLX1" - /transcript_id="NM_001179482.3" - /db_xref="GeneID:854672" - CDS 97395..98330 - /gene="FLX1" - /locus_tag="YIL134W" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:14576278|PMID:16823961|PMID:26928762|PMID:8631763]" - /experiment="EXISTENCE:mutant phenotype:GO:0015230 FAD - transmembrane transporter activity - [PMID:14555654|PMID:8631763]" - /experiment="EXISTENCE:mutant phenotype:GO:0015883 FAD - transport [PMID:14555654]" - /note="Mitochondrial flavin adenine dinucleotide - transporter; FAD is a synthesis product of riboflavin; - human homolog SLC25A32 is implicated in multiple acyl-CoA - dehydrogenase deficiency (MADD) or glutaric aciduria type - II (GAII), and can complement yeast null mutant" - /codon_start=1 - /product="flavin adenine dinucleotide transporter FLX1" - /protein_id="NP_012132.3" - /db_xref="GeneID:854672" - /db_xref="SGD:S000001396" - /translation="MVDHQWTPLQKEVISGLSAGSVTTLVVHPLDLLKVRLQLSATSA - QKAHYGPFMVIKEIIRSSANSGRSVTNELYRGLSINLFGNAIAWGVYFGLYGVTKELI - YKSVAKPGETQLKGVGNDHKMNSLIYLSAGASSGLMTAILTNPIWVIKTRIMSTSKGA - QGAYTSMYNGVQQLLRTDGFQGLWKGLVPALFGVSQGALYFAVYDTLKQRKLRRKREN - GLDIHLTNLETIEITSLGKMVSVTLVYPFQLLKSNLQSFRANEQKFRLFPLIKLIIAN - DGFVGLYKGLSANLVRAIPSTCITFCVYENLKHRL" - gene complement(<98527..>99416) - /gene="RPL16A" - /locus_tag="YIL133C" - /gene_synonym="RPL13" - /db_xref="GeneID:854673" - mRNA complement(join(<98527..99095,99386..>99416)) - /gene="RPL16A" - /locus_tag="YIL133C" - /gene_synonym="RPL13" - /product="ribosomal 60S subunit protein L16A" - /transcript_id="NM_001179481.1" - /db_xref="GeneID:854673" - CDS complement(join(98527..99095,99386..99416)) - /gene="RPL16A" - /locus_tag="YIL133C" - /gene_synonym="RPL13" - /experiment="EXISTENCE:curator inference:GO:0002181 - cytoplasmic translation [PMID:11983894]" - /experiment="EXISTENCE:curator inference:GO:0003735 - structural constituent of ribosome [PMID:11983894]" - /experiment="EXISTENCE:direct assay:GO:0003723 RNA binding - [PMID:6337137]" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:27374275]" - /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic - large ribosomal subunit [PMID:11983894]" - /experiment="EXISTENCE:mutant phenotype:GO:0000470 - maturation of LSU-rRNA [PMID:27374275]" - /note="Ribosomal 60S subunit protein L16A; N-terminally - acetylated, binds 5.8 S rRNA; transcriptionally regulated - by Rap1p; homologous to mammalian ribosomal protein L13A - and bacterial L13; RPL16A has a paralog, RPL16B, that - arose from the whole genome duplication; protein abundance - increases in response to DNA replication stress" - /codon_start=1 - /product="ribosomal 60S subunit protein L16A" - /protein_id="NP_012133.1" - /db_xref="GeneID:854673" - /db_xref="SGD:S000001395" - /translation="MSVEPVVVIDGKGHLVGRLASVVAKQLLNGQKIVVVRAEELNIS - GEFFRNKLKYHDFLRKATAFNKTRGPFHFRAPSRIFYKALRGMVSHKTARGKAALERL - KVFEGIPPPYDKKKRVVVPQALRVLRLKPGRKYTTLGKLSTSVGWKYEDVVAKLEAKR - KVSSAEYYAKKRAFTKKVASANATAAESDVAKQLAALGY" - gene complement(<99860..>100501) - /gene="CSM2" - /locus_tag="YIL132C" - /db_xref="GeneID:854674" - mRNA complement(<99860..>100501) - /gene="CSM2" - /locus_tag="YIL132C" - /product="Csm2p" - /transcript_id="NM_001179480.1" - /db_xref="GeneID:854674" - CDS complement(99860..100501) - /gene="CSM2" - /locus_tag="YIL132C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0097196 Shu complex - [PMID:23575680]" - /experiment="EXISTENCE:genetic interaction:GO:0000725 - recombinational repair [PMID:15654096]" - /experiment="EXISTENCE:genetic interaction:GO:0043007 - maintenance of rDNA [PMID:21372173]" - /experiment="EXISTENCE:mutant phenotype:GO:0000725 - recombinational repair [PMID:23575680]" - /experiment="EXISTENCE:mutant phenotype:GO:0000730 DNA - recombinase assembly [PMID:23575680]" - /experiment="EXISTENCE:mutant phenotype:GO:0035861 site of - double-strand break [PMID:23575680]" - /experiment="EXISTENCE:mutant phenotype:GO:0045132 meiotic - chromosome segregation [PMID:11470404]" - /experiment="EXISTENCE:physical interaction:GO:0097196 Shu - complex [PMID:15654096]" - /note="Subunit of the Shu complex (aka PCSS complex); Shu - complex also includes Psy3, Shu1, Shu2, and promotes - error-free DNA repair; Shu complex mediates inhibition of - Srs2p anti-recombinase function; promotes formation of - Rad51p filaments; Psy3p and Csm2p contain similar - DNA-binding regions which work together to form a single - DNA binding site; required for accurate chromosome - segregation during meiosis" - /codon_start=1 - /product="Csm2p" - /protein_id="NP_012134.1" - /db_xref="GeneID:854674" - /db_xref="SGD:S000001394" - /translation="MEYEDLELITIWPSPTKNKLCQFIKQNLSKEHVVTQLFFIDATS - SFPLSQFQKLVPPTLPENVRIYENIRINTCLDLEELSAITVKLLQILSMNKINAQRGT - EDAVTEPLKIILYINGLEVMFRNSQFKSSPQRSHELLRDTLLKLRVMGNDENENASIR - TLLEFPKEQLLDYYLKKNNNTRTSSVRSKRRRIKNGDSLAEYIWKYYADSLFE" - gene complement(<100781..>102235) - /gene="FKH1" - /locus_tag="YIL131C" - /db_xref="GeneID:854675" - mRNA complement(<100781..>102235) - /gene="FKH1" - /locus_tag="YIL131C" - /product="forkhead family transcription factor FKH1" - /transcript_id="NM_001179479.1" - /db_xref="GeneID:854675" - CDS complement(100781..102235) - /gene="FKH1" - /locus_tag="YIL131C" - /experiment="EXISTENCE:direct assay:GO:0000978 RNA - polymerase II cis-regulatory region sequence-specific DNA - binding [PMID:10894548|PMID:11562353]" - /experiment="EXISTENCE:direct assay:GO:0001227 DNA-binding - transcription repressor activity, RNA polymerase - II-specific [PMID:10894548]" - /experiment="EXISTENCE:direct assay:GO:0001228 DNA-binding - transcription activator activity, RNA polymerase - II-specific [PMID:10894548|PMID:11562353]" - /experiment="EXISTENCE:direct assay:GO:0003682 chromatin - binding [PMID:24504085]" - /experiment="EXISTENCE:direct assay:GO:0003688 DNA - replication origin binding [PMID:22265405|PMID:24504085]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10747051|PMID:20847055|PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0019237 centromeric - DNA binding [PMID:10683251]" - /experiment="EXISTENCE:direct assay:GO:0043565 - sequence-specific DNA binding - [PMID:24504085|PMID:19158363]" - /experiment="EXISTENCE:genetic interaction:GO:0001227 - DNA-binding transcription repressor activity, RNA - polymerase II-specific [PMID:10894548]" - /experiment="EXISTENCE:genetic interaction:GO:0001228 - DNA-binding transcription activator activity, RNA - polymerase II-specific [PMID:10894548|PMID:11562353]" - /experiment="EXISTENCE:genetic interaction:GO:0006338 - chromatin remodeling [PMID:17283050]" - /experiment="EXISTENCE:genetic interaction:GO:0006369 - termination of RNA polymerase II transcription - [PMID:12702877]" - /experiment="EXISTENCE:genetic interaction:GO:0007535 - donor selection [PMID:12183363|PMID:16809780]" - /experiment="EXISTENCE:genetic interaction:GO:0034244 - negative regulation of transcription elongation by RNA - polymerase II [PMID:12702877]" - /experiment="EXISTENCE:genetic interaction:GO:0071930 - negative regulation of transcription involved in G1/S - transition of mitotic cell cycle - [PMID:10894548|PMID:17898805]" - /experiment="EXISTENCE:genetic interaction:GO:0090055 - positive regulation of silent mating-type cassette - heterochromatin formation [PMID:10747051|PMID:18045995]" - /experiment="EXISTENCE:genetic interaction:GO:0090282 - positive regulation of transcription involved in G2/M - transition of mitotic cell cycle - [PMID:11562353|PMID:10747051|PMID:10894548|PMID:10959837]" - /experiment="EXISTENCE:genetic interaction:GO:2000221 - negative regulation of pseudohyphal growth - [PMID:10747051|PMID:10894548]" - /experiment="EXISTENCE:mutant phenotype:GO:0006338 - chromatin remodeling [PMID:17283050]" - /experiment="EXISTENCE:mutant phenotype:GO:0006369 - termination of RNA polymerase II transcription - [PMID:12702877]" - /experiment="EXISTENCE:mutant phenotype:GO:0007535 donor - selection [PMID:12183363|PMID:16809780|PMID:27257873]" - /experiment="EXISTENCE:mutant phenotype:GO:0031124 mRNA - 3'-end processing [PMID:12702877]" - /experiment="EXISTENCE:mutant phenotype:GO:0032298 - positive regulation of DNA-templated DNA replication - initiation [PMID:22265405]" - /experiment="EXISTENCE:mutant phenotype:GO:0034244 - negative regulation of transcription elongation by RNA - polymerase II [PMID:12702877]" - /experiment="EXISTENCE:mutant phenotype:GO:0090055 - positive regulation of silent mating-type cassette - heterochromatin formation [PMID:10747051]" - /experiment="EXISTENCE:mutant phenotype:GO:0090419 - negative regulation of transcription involved in G2/M - transition of mitotic cell cycle - [PMID:10747051|PMID:18045995]" - /experiment="EXISTENCE:mutant phenotype:GO:1903468 - positive regulation of DNA replication initiation - [PMID:26728715]" - /note="Forkhead family transcription factor; rate-limiting - replication origin activator; evolutionarily conserved - lifespan regulator; binds multiple chromosomal elements - with distinct specificities, cell cycle dynamics; - regulates transcription elongation, chromatin silencing at - mating loci, expression of G2/M phase genes; facilitates - clustering, activation of early-firing replication - origins; binds HML recombination enhancer, regulates donor - preference during mating-type switching" - /codon_start=1 - /product="forkhead family transcription factor FKH1" - /protein_id="NP_012135.1" - /db_xref="GeneID:854675" - /db_xref="SGD:S000001393" - /translation="MSVTSREQKFSGKYSSYTAQDRQGLVNAVTCVLSSSSDPVAVSS - DYSNSLSIAREVNAYAKIAGCDWTYYVQKLEVTIGRNTDSLNLNAVPGTVVKKNIDID - LGPAKIVSRKHAAIRFNLESGSWELQIFGRNGAKVNFRRIPTGPDSPPTVLQSGCIID - IGGVQMIFILPEQETIISDYCLNHLMPKLLSTYGTNGNNNPLLRNIIEGSTYLREQRL - QEEARLQQLDHLHTPLSSSSDVNPIGDPHGDTIMMEEDEEDENYTRGGIRPNTYTSSS - NNAVTNGNVPHIENPSDLSLDENRYIKPPQSYASMITQAILSTPEGSISLADIYKFIS - DNYAFYRFSQMAWQNSVRHNLSLNKAFEKVPKRAGQQGKGMNWKISDEVRRDFLNKWN - AGKLSKIRRGASVTRQLQLHMSKFGEIPAPESSSIDPRGIKAQKVKKSLQATSSILGE - SAPQLQRTQLTGQISTTTSMDVTTNANVNNSSLS" - gene <102782..>105676 - /gene="ASG1" - /locus_tag="YIL130W" - /db_xref="GeneID:854676" - mRNA <102782..>105676 - /gene="ASG1" - /locus_tag="YIL130W" - /product="Asg1p" - /transcript_id="NM_001179478.1" - /db_xref="GeneID:854676" - CDS 102782..105676 - /gene="ASG1" - /locus_tag="YIL130W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0043565 - sequence-specific DNA binding - [PMID:19111667|PMID:19158363]" - /note="Zinc cluster protein proposed to be a - transcriptional regulator; regulator involved in the - stress response; regulates utilization of fatty acids and - accumulation of lipids" - /codon_start=1 - /product="Asg1p" - /protein_id="NP_012136.1" - /db_xref="GeneID:854676" - /db_xref="SGD:S000001392" - /translation="MPEQAQQGEQSVKRRRVTRACDECRKKKVKCDGQQPCIHCTVYS - YECTYKKPTKRTQNSGNSGVLTLGNVTTGPSSSTVVAAAASNPNKLLSNIKTERAILP - GASTIPASNNPSKPRKYKTKSTRLQSKIDRYKQIFDEVFPQLPDIDNLDIPVFLQIFH - NFKRDSQSFLDDTVKEYTLIVNDSSSPIQPVLSSNSKNSTPDEFLPNMKSDSNSASSN - REQDSVDTYSNIPVGREIKIILPPKAIALQFVKSTWEHCCVLLRFYHRPSFIRQLDEL - YETDPNNYTSKQMQFLPLCYAAIAVGALFSKSIVSNDSSREKFLQDEGYKYFIAARKL - IDITNARDLNSIQAILMLIIFLQCSARLSTCYTYIGVAMRSALRAGFHRKLSPNSGFS - PIEIEMRKRLFYTIYKLDVYINAMLGLPRSISPDDFDQTLPLDLSDENITEVAYLPEN - QHSVLSSTGISNEHTKLFLILNEIISELYPIKKTSNIISHETVTSLELKLRNWLDSLP - KELIPNAENIDPEYERANRLLHLSFLHVQIILYRPFIHYLSRNMNAENVDPLCYRRAR - NSIAVARTVIKLAKEMVSNNLLTGSYWYACYTIFYSVAGLLFYIHEAQLPDKDSAREY - YDILKDAETGRSVLIQLKDSSMAASRTYNLLNQIFEKLNSKTIQLTALHSSPSNESAF - LVTNNSSALKPHLGDSLQPPVFFSSQDTKNSFSLAKSEESTNDYAMANYLNNTPISEN - PLNEAQQQDQVSQGTTNMSNERDPNNFLSIDIRLDNNGQSNILDATDDVFIRNDGDIP - TNSAFDFSSSKSNASNNSNPDTINNNYNNVSGKNNNNNNITNNSNNNHNNNNNDNNNN - NNNNNNNNNNNNNSGNSSNNNNNNNNNKNNNDFGIKIDNNSPSYEGFPQLQIPLSQDN - LNIEDKEEMSPNIEIKNEQNMTDSNDILGVFDQLDAQLFGKYLPLNYPSE" - rep_origin 105870..106053 - /note="ARS909; Autonomously Replicating Sequence" - /db_xref="SGD:S000118394" - gene complement(<106107..>113237) - /gene="TAO3" - /locus_tag="YIL129C" - /gene_synonym="PAG1" - /db_xref="GeneID:854677" - mRNA complement(<106107..>113237) - /gene="TAO3" - /locus_tag="YIL129C" - /gene_synonym="PAG1" - /product="Tao3p" - /transcript_id="NM_001179477.3" - /db_xref="GeneID:854677" - CDS complement(106107..113237) - /gene="TAO3" - /locus_tag="YIL129C" - /gene_synonym="PAG1" - /experiment="EXISTENCE:direct assay:GO:0000131 incipient - cellular bud site [PMID:11854408]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005933 cellular - bud [PMID:12972564]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:12972564]" - /experiment="EXISTENCE:genetic interaction:GO:0007118 - budding cell apical bud growth [PMID:12972564]" - /experiment="EXISTENCE:mutant phenotype:GO:0000902 cell - morphogenesis [PMID:11854408]" - /experiment="EXISTENCE:mutant phenotype:GO:0007114 cell - budding [PMID:11854408]" - /experiment="EXISTENCE:mutant phenotype:GO:0007118 budding - cell apical bud growth [PMID:12972564]" - /note="Component of the RAM signaling network; is involved - in regulation of Ace2p activity and cellular - morphogenesis, interacts with protein kinase Cbk1p and - also with Kic1p" - /codon_start=1 - /product="Tao3p" - /protein_id="NP_012137.3" - /db_xref="GeneID:854677" - /db_xref="SGD:S000001391" - /translation="MASRFTFPPQRDQGIGFTFPPTNKAEGSSNNNQISIDIDPSGQD - VLEEINEAPLNTFPLHQSVTDAPIIDIPSPTDMSEGTSLNNQLLLRQQQQQGTGEGQA - LPPTFVEEQSDQNKISMLLPEQKQQRMQESAPPDITAKSVAEDYVTTLRQQMATDWKS - PSEYALHILFTKFIRYAENKLNMCLQQLDMAEPPIVEILGEGVDPSFDEIIKSLGHIA - KKKPKPVIDAMMFWRKTKSEAANSASEEMEKLLKEYEFEKAHPSQAHFLMNRRLSRSS - SNTTSKYKHNNNTNNLPGMKRHVSSSFNNKVPLIKASSSNNSATSSPSIANSQLKSLE - NTIEVAKEEAFLADRKSLISIYILCRVLNEIVKQASSNEEEDLSDKLEEIVFTQLKTT - DPLSISTSLIKSSNWNSFAELLGSMSEKKFLSVSDRFIADLEKIPAYIPPELEPSTHL - LILGMRYLKLRNYPLEKFEESADFMKSLSKFFAKTENFPVCLAYAEVTNQLLLPLAGS - LTAEVNHPTWVEAMSTLLNTAKRLQADSKYWVSGFKLTVSILCASPPDLFSKQWLSLL - EANASKVKSKSLNERIIFAVGLSRLVWVYLYRCPETLNNTTRTLTKLLQLYLNTRKKE - NWITGDFGLLNPLTDALISIGFLHPNFLMEQALIPLIRQSFNGSNLENINYEKLILTI - NTYKGLLVTKERPRFPEDDNRLYELNLNNITVNQVQEASSINHTEISDYFYKLFLLLD - SSIGSEVWSPENQHQKQSSNAFSPFGFSFSNDNDSSKNKSLYVILFGTIIEAIPCCLS - ISRTIPYKSTIEILSRNAVHSEVIISSSSQNALRALASKKNPYTLITWFAKYSFDFDE - KTQSSYNMSYLSSKEYNRLLILYVELLECWLEEFQSSNKEENKKETGLDGIRLLPIDA - EQEESNETEKLEWKNTVTVIEEVEGNGLFFLCSHDAKIRRLGIQILRIIFKFDEAMME - KTEKLSNGHSRSSSHFAADRGTRLIDLLNECNTTTLINPHKATLSAVEKTRFSRLNSK - YKRGLLIKLAESEYGVDAALWQRAFPKLLALVFKTCPMAMALCRSIVCIRLVQVHEII - LRVANDVDFKLKNVLPETIVNQWKLYLIAACTSLTSTFDQKLHIPSNIPQHGRKKSQQ - IFTVQHQKIKSAKSIFKMVLPLLNAKYIMIRDAIITGLSSMNINIFKAYVEAIDVFLV - AWKEGSSNNQIRVEMFHILTILSPYLKSDMIFNDEWILRKLSEFLQKTKQFLEKDSVQ - ISYEYQSLRSYFAGLILSYYMAVREHPLIDELFPFQARASCFNFLKEWCGYGEYEPIS - EERYAIMIKNTESGRDRTAITTGIEFQKNRLQMIVLETMVVLCSDPITQTLDDDLELP - IVISFDTEDLLAWIEALFDSDNTTVKNLGVRALENLLDKNRENFKLFRDVAFQCVSHH - SHPSVAVLYYTTLCKSVLKLDNLVLDEDELVSLGLYGLVADKEDTRTFAVDLLSAVET - KLHNSSYTKVFKERLANSSKTVYKSTAKEISSIFAELLSQDLCLRIFSSLVRILDLFP - FEIKRDLLVLMVPWVNKFTLKSLEELDTFMVLNNLFYITIDLNDSLPNEVEQLWISLG - KGNSFQNIHVSLEYIINSSMNHCNPLFVQYARDIVLYLANIPGGIGLLDTLLNNLEPK - YMVPLAKHTFNEPMNNNKYSFLGNIWERLNYNGKRIIFSKAQLSIIFLVNLLTNLSES - VKAKIPLLLHMSICLLDHYVPLIHESACKIASTLIFGLAPSHEKSEETVKLLRNKHAL - WSYDNLMKKGARSPKTMDLLIRNIISIFSDLDEFQVTWQRIALKWATTCSVRHIACRS - FQIFRSLLTFLDQEMLRDMLHRLSNTISDGNVDIQGFAMQILMTLNAIMAELDPTNLI - SFPQLFWSITACLSSIHEQEFIEVLSCLSKFISKIDLDSPDTVQCLVAIFPSNWEGRF - DGLQQIVMTGLRSANSLEITWKFLDKLNLLKDSRIIANTESRLLFALIANLPRFLNAM - DRKDFTGIQVAADSLIELANAYKQPSLSRLIDSLAKNKFRSKKDFMSQVVSFISRNYF - PSYSAQTLVFLLGLLFNKIGWIRVQTLEILKYVFPLIDLRRPEFIGVGADLISPLLRL - LFTEYEAKALEVLDCVPNVSGSKMDKDVLRITMGNKDVKDGDNATTTLFGLPEDSGWS - VPMPTMTAATTRHNVHAVFMTCGTGKSDEVSAHGSDDMDAVIEFHADGDYELGRMDTI - VEFHADGDYDLGRMDTNDSISVAEEKDASLSHMWAELDNLDSFFTKDTNVPNISSKMG - MGIPHGRSDSIETTRTDQTFSFESAPQLYDKKVSVILNRSLSRTPSNVSFKTHLADSF - AVKINRNGKPRI" - rep_origin 113237..113806 - /note="ARS910; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130158" - gene <113806..>116904 - /gene="MET18" - /locus_tag="YIL128W" - /gene_synonym="MMS19" - /db_xref="GeneID:854678" - mRNA <113806..>116904 - /gene="MET18" - /locus_tag="YIL128W" - /gene_synonym="MMS19" - /product="Met18p" - /transcript_id="NM_001179476.1" - /db_xref="GeneID:854678" - CDS 113806..116904 - /gene="MET18" - /locus_tag="YIL128W" - /gene_synonym="MMS19" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0097361 CIA complex - [PMID:22678362]" - /experiment="EXISTENCE:mutant phenotype:GO:0097428 protein - maturation by iron-sulfur cluster transfer - [PMID:22678362]" - /note="Component of cytosolic iron-sulfur protein assembly - (CIA) machinery; acts at a late step of Fe-S cluster - assembly; forms the CIA targeting complex with Cia1p and - Cia2p that directs Fe-S cluster incorporation and - maturation of a subset of cytosolic and nuclear proteins - involved in methionine biosynthesis, DNA replication and - repair, transcription, and telomere maintenance; ortholog - of human MMS19" - /codon_start=1 - /product="Met18p" - /protein_id="NP_012138.1" - /db_xref="GeneID:854678" - /db_xref="SGD:S000001390" - /translation="MTPDELNSAVVTFMANLNIDDSKANETASTVTDSIVHRSIKLLE - VVVALKDYFLSENEVERKKALTCLTTILAKTPKDHLSKNECSVIFQFYQSKLDDQALA - KEVLEGFAALAPMKYVSINEIAQLLRLLLDNYQQGQHLASTRLWPFKILRKIFDRFFV - NGSSTEQVKRINDLFIETFLHVANGEKDPRNLLLSFALNKSITSSLQNVENFKEDLFD - VLFCYFPITFKPPKHDPYKISNQDLKTALRSAITATPLFAEDAYSNLLDKLTASSPVV - KNDTLLTLLECVRKFGGSSILENWTLLWNALKFEIMQNSEGNENTLLNPYNKDQQSDD - VGQYTNYDACLKIINLMALQLYNFDKVSFEKFFTHVLDELKPNFKYEKDLKQTCQILS - AIGSGNVEIFNKVISSTFPLFLINTSEVAKLKLLIMNFSFFVDSYIDLFGRTSKESLG - TPVPNNKMAEYKDEIIMILSMALTRSSKAEVTIRTLSVIQFTKMIKMKGFLTPEEVSL - IIQYFTEEILTDNNKNIYYACLEGLKTISEIYEDLVFEISLKKLLDLLPDCFEEKIRV - NDEENIHIETILKIILDFTTSRHILVKESITFLATKLNRVAKISKSREYCFLLISTIY - SLFNNNNQNENVLNEEDALALKNAIEPKLFEIITQESAIVSDNYNLTLLSNVLFFTNL - KIPQAAHQEELDRYNELFISEGKIRILDTPNVLAISYAKILSALNKNCQFPQKFTVLF - GTVQLLKKHAPRMTETEKLGYLELLLVLSNKFVSEKDVIGLFDWKDLSVINLEVMVWL - TKGLIMQNSLESSEIAKKFIDLLSNEEIGSLVSKLFEVFVMDISSLKKFKGISWNNNV - KILYKQKFFGDIFQTLVSNYKNTVDMTIKCNYLTALSLVLKHTPSQSVGPFINDLFPL - LLQALDMPDPEVRVSALETLKDTTDKHHTLITEHVSTIVPLLLSLSLPHKYNSVSVRL - IALQLLEMITTVVPLNYCLSYQDDVLSALIPVLSDKKRIIRKQCVDTRQVYYELGQIP - FE" - gene complement(<117024..>117644) - /gene="RRT14" - /locus_tag="YIL127C" - /db_xref="GeneID:854679" - mRNA complement(<117024..>117644) - /gene="RRT14" - /locus_tag="YIL127C" - /product="Rrt14p" - /transcript_id="NM_001179475.1" - /db_xref="GeneID:854679" - CDS complement(117024..117644) - /gene="RRT14" - /locus_tag="YIL127C" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:14562095]" - /note="hypothetical protein; identified in a screen for - mutants with decreased levels of rDNA transcription; green - fluorescent protein (GFP)-fusion protein localizes to the - nucleolus; predicted to be involved in ribosome - biogenesis" - /codon_start=1 - /product="Rrt14p" - /protein_id="NP_012139.1" - /db_xref="GeneID:854679" - /db_xref="SGD:S000001389" - /translation="MSSSLSQTSKYQATSVVNGLLSNLLPGVPKIRANNGKTSVNNGS - KAQLIDRNLKKRVQLQNRDVHKIKKKCKLVKKKKVKKHKLDKEQLEQLAKHQVLKKHQ - HEGTLTDHERKYLNKLIKRNSQNLRSWDLEEEVRDELEDIQQSILKDTVSTANTDRSK - RRRFKRKQFKEDIKESDFVKDHRYPGLTPGLAPVGLSDEEDSSEED" - gene <117992..>122071 - /gene="STH1" - /locus_tag="YIL126W" - /gene_synonym="NPS1" - /db_xref="GeneID:854680" - mRNA <117992..>122071 - /gene="STH1" - /locus_tag="YIL126W" - /gene_synonym="NPS1" - /product="RSC chromatin remodeling complex ATPase subunit - STH1" - /transcript_id="NM_001179474.1" - /db_xref="GeneID:854680" - CDS 117992..122071 - /gene="STH1" - /locus_tag="YIL126W" - /gene_synonym="NPS1" - /EC_number="3.6.4.12" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:1396591|PMID:1549132]" - /experiment="EXISTENCE:direct assay:GO:0006337 nucleosome - disassembly [PMID:16492771]" - /experiment="EXISTENCE:direct assay:GO:0006338 chromatin - remodeling [PMID:8980231]" - /experiment="EXISTENCE:direct assay:GO:0006368 - transcription elongation by RNA polymerase II - [PMID:17081996]" - /experiment="EXISTENCE:direct assay:GO:0015616 DNA - translocase activity [PMID:12183366]" - /experiment="EXISTENCE:direct assay:GO:0016586 RSC-type - complex [PMID:10619019|PMID:12183366]" - /experiment="EXISTENCE:direct assay:GO:0070577 - lysine-acetylated histone binding [PMID:20126658]" - /experiment="EXISTENCE:direct assay:GO:0140658 - ATP-dependent chromatin remodeler activity - [PMID:9799253|PMID:12183366]" - /experiment="EXISTENCE:genetic interaction:GO:0007059 - chromosome segregation [PMID:12697820]" - /experiment="EXISTENCE:mutant phenotype:GO:0006284 - base-excision repair [PMID:24674626]" - /experiment="EXISTENCE:mutant phenotype:GO:0006302 - double-strand break repair [PMID:16024655]" - /experiment="EXISTENCE:mutant phenotype:GO:0007010 - cytoskeleton organization [PMID:12072455]" - /experiment="EXISTENCE:mutant phenotype:GO:0031055 - chromatin remodeling at centromere [PMID:12697820]" - /experiment="EXISTENCE:mutant phenotype:GO:0051321 meiotic - cell cycle [PMID:10320476]" - /note="ATPase component of the RSC chromatin remodeling - complex; required for expression of early meiotic genes; - promotes base excision repair in chromatin; essential - helicase-related protein homologous to Snf2p" - /codon_start=1 - /product="RSC chromatin remodeling complex ATPase subunit - STH1" - /protein_id="NP_012140.1" - /db_xref="GeneID:854680" - /db_xref="SGD:S000001388" - /translation="MLQEQSELMSTVMNNTPTTVAALAAVAAASETNGKLGSEEQPEI - TIPKPRSSAQLEQLLYRYRAIQNHPKENKLEIKAIEDTFRNISRDQDIYETKLDTLRK - SIDKGFQYDEDLLNKHLVALQLLEKDTDVPDYFLDLPDTKNDNTTAIEVDYSEKKPIK - ISADFNAKAKSLGLESKFSNATKTALGDPDTEIRISARISNRINELERLPANLGTYSL - DDCLEFITKDDLSSRMDTFKIKALVELKSLKLLTKQKSIRQKLINNVASQAHHNIPYL - RDSPFTAAAQRSVQIRSKVIVPQTVRLAEELERQQLLEKRKKERNLHLQKINSIIDFI - KERQSEQWSRQERCFQFGRLGASLHNQMEKDEQKRIERTAKQRLAALKSNDEEAYLKL - LDQTKDTRITQLLRQTNSFLDSLSEAVRAQQNEAKILHGEEVQPITDEEREKTDYYEV - AHRIKEKIDKQPSILVGGTLKEYQLRGLEWMVSLYNNHLNGILADEMGLGKTIQSISL - ITYLYEVKKDIGPFLVIVPLSTITNWTLEFEKWAPSLNTIIYKGTPNQRHSLQHQIRV - GNFDVLLTTYEYIIKDKSLLSKHDWAHMIIDEGHRMKNAQSKLSFTISHYYRTRNRLI - LTGTPLQNNLPELWALLNFVLPKIFNSAKTFEDWFNTPFANTGTQEKLELTEEETLLI - IRRLHKVLRPFLLRRLKKEVEKDLPDKVEKVIKCKLSGLQQQLYQQMLKHNALFVGAG - TEGATKGGIKGLNNKIMQLRKICNHPFVFDEVEGVVNPSRGNSDLLFRVAGKFELLDR - VLPKFKASGHRVLMFFQMTQVMDIMEDFLRMKDLKYMRLDGSTKTEERTEMLNAFNAP - DSDYFCFLLSTRAGGLGLNLQTADTVIIFDTDWNPHQDLQAQDRAHRIGQKNEVRILR - LITTDSVEEVILERAMQKLDIDGKVIQAGKFDNKSTAEEQEAFLRRLIESETNRDDDD - KAELDDDELNDTLARSADEKILFDKIDKERMNQERADAKAQGLRVPPPRLIQLDELPK - VFREDIEEHFKKEDSEPLGRIRQKKRVYYDDGLTEEQFLEAVEDDNMSLEDAIKKRRE - ARERRRLRQNGTKENEIETLENTPEASETSLIENNSFTAAVDEETNADKETTASRSKR - RSSRKKRTISIVTAEDKENTQEESTSQENGGAKVEEEVKSSSVEIINGSESKKKKPKL - TVKIKLNKTTVLENNDGKRAEEKPESKSPAKKTAAKKTKTKSKSLGIFPTVEKLVEEM - REQLDEVDSHPRTSIFEKLPSKRDYPDYFKVIEKPMAIDIILKNCKNGTYKTLEEVRQ - ALQTMFENARFYNEEGSWVYVDADKLNEFTDEWFKEHSS" - gene <122689..>125733 - /gene="KGD1" - /locus_tag="YIL125W" - /gene_synonym="OGD1" - /db_xref="GeneID:854681" - mRNA <122689..>125733 - /gene="KGD1" - /locus_tag="YIL125W" - /gene_synonym="OGD1" - /product="alpha-ketoglutarate dehydrogenase KGD1" - /transcript_id="NM_001179473.1" - /db_xref="GeneID:854681" - CDS 122689..125733 - /gene="KGD1" - /locus_tag="YIL125W" - /gene_synonym="OGD1" - /EC_number="1.2.4.2" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0009353 - mitochondrial oxoglutarate dehydrogenase complex - [PMID:2072900]" - /experiment="EXISTENCE:direct assay:GO:0042645 - mitochondrial nucleoid [PMID:11926067|PMID:15692048]" - /note="Subunit of the mitochondrial alpha-ketoglutarate - dehydrogenase complex; catalyzes a key step in the - tricarboxylic acid (TCA) cycle, the oxidative - decarboxylation of alpha-ketoglutarate to form - succinyl-CoA" - /codon_start=1 - /product="alpha-ketoglutarate dehydrogenase KGD1" - /protein_id="NP_012141.1" - /db_xref="GeneID:854681" - /db_xref="SGD:S000001387" - /translation="MLRFVSSQTCRYSSRGLLKTSLLKNASTVKIVGRGLATTGTDNF - LSTSNATYIDEMYQAWQKDPSSVHVSWDAYFKNMSNPKIPATKAFQAPPSISNFPQGT - EAAPLGTAMTGSVDENVSIHLKVQLLCRAYQVRGHLKAHIDPLGISFGSNKNNPVPPE - LTLDYYGFSKHDLDKEINLGPGILPRFARDGKSKMSLKEIVDHLEKLYCSSYGVQYTH - IPSKQKCDWLRERIEIPEPYQYTVDQKRQILDRLTWATSFESFLSTKFPNDKRFGLEG - LESVVPGIKTLVDRSVELGVEDIVLGMAHRGRLNVLSNVVRKPNESIFSEFKGSSARD - DIEGSGDVKYHLGMNYQRPTTSGKYVNLSLVANPSHLESQDPVVLGRTRALLHAKNDL - KEKTKALGVLLHGDAAFAGQGVVYETMGFLTLPEYSTGGTIHVITNNQIGFTTDPRFA - RSTPYPSDLAKAIDAPIFHVNANDVEAVTFIFNLAAEWRHKFHTDAIIDVVGWRKHGH - NETDQPSFTQPLMYKKIAKQKSVIDVYTEKLISEGTFSKKDIDEHKKWVWNLFEDAFE - KAKDYVPSQREWLTAAWEGFKSPKELATEILPHEPTNVPESTLKELGKVLSSWPEGFE - VHKNLKRILKNRGKSIETGEGIDWATGEALAFGTLVLDGQNVRVSGEDVERGTFSQRH - AVLHDQQSEAIYTPLSTLNNEKADFTIANSSLSEYGVMGFEYGYSLTSPDYLVMWEAQ - FGDFANTAQVIIDQFIAGGEQKWKQRSGLVLSLPHGYDGQGPEHSSGRLERFLQLANE - DPRYFPSEEKLQRQHQDCNFQVVYPTTPANLFHILRRQQHRQFRKPLALFFSKQLLRH - PLARSSLSEFTEGGFQWIIEDIEHGKSIGTKEETKRLVLLSGQVYTALHKRRESLGDK - TTAFLKIEQLHPFPFAQLRDSLNSYPNLEEIVWCQEEPLNMGSWAYTEPRLHTTLKET - DKYKDFKVRYCGRNPSGAVAAGSKSLHLAEEDAFLKDVFQQS" - gene <126204..>127097 - /gene="AYR1" - /locus_tag="YIL124W" - /gene_synonym="GBG1" - /db_xref="GeneID:854682" - mRNA <126204..>127097 - /gene="AYR1" - /locus_tag="YIL124W" - /gene_synonym="GBG1" - /product="acylglycerone-phosphate reductase" - /transcript_id="NM_001179472.3" - /db_xref="GeneID:854682" - CDS 126204..127097 - /gene="AYR1" - /locus_tag="YIL124W" - /gene_synonym="GBG1" - /EC_number="1.1.1.101" - /EC_number="3.1.1.3" - /experiment="EXISTENCE:direct assay:GO:0004806 - triglyceride lipase activity [PMID:24187129]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane [PMID:16407407]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:10617610|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005811 lipid - droplet [PMID:10617610|PMID:24868093]" - /experiment="EXISTENCE:genetic interaction:GO:0004806 - triglyceride lipase activity [PMID:24187129]" - /experiment="EXISTENCE:genetic interaction:GO:0019433 - triglyceride catabolic process [PMID:24187129]" - /experiment="EXISTENCE:mutant phenotype:GO:0000140 - acylglycerone-phosphate reductase activity - [PMID:10617610]" - /experiment="EXISTENCE:mutant phenotype:GO:0004806 - triglyceride lipase activity [PMID:24187129]" - /experiment="EXISTENCE:mutant phenotype:GO:0006654 - phosphatidic acid biosynthetic process [PMID:10617610]" - /note="Bifunctional triacylglycerol lipase and 1-acyl DHAP - reductase; NADPH-dependent 1-acyl dihydroxyacetone - phosphate reductase involved in phosphatidic acid - biosynthesis; lipid droplet triacylglycerol lipase - involved in mobilization of non-polar lipids; found in - lipid particles, endoplasmic reticulum and mitochondrial - outer membrane; forms NADPH-regulated channel in - mitochondrial outer membrane; required for spore - germination; role in cell wall biosynthesis; capable of - metabolizing steroid hormones" - /codon_start=1 - /product="acylglycerone-phosphate reductase" - /protein_id="NP_012142.3" - /db_xref="GeneID:854682" - /db_xref="SGD:S000001386" - /translation="MSELQSQPKKIAVVTGASGGIGYEVTKELARNGYLVYACARRLE - PMAQLAIQFGNDSIKPYKLDISKPEEIVTFSGFLRANLPDGKLDLLYNNAGQSCTFPA - LDATDAAVEQCFKVNVFGHINMCRELSEFLIKAKGTIVFTGSLAGVVSFPFGSIYSAS - KAAIHQYARGLHLEMKPFNVRVINAITGGVATDIADKRPLPETSIYNFPEGREAFNSR - KTMAKDNKPMPADAYAKQLVKDILSTSDPVDVYRGTFANIMRFVMIFVPYWLLEKGLS - KKFKLDKVNNALKSKQKNKDD" - gene <128151..>129581 - /gene="SIM1" - /locus_tag="YIL123W" - /db_xref="GeneID:854683" - mRNA <128151..>129581 - /gene="SIM1" - /locus_tag="YIL123W" - /product="putative glucosidase SIM1" - /transcript_id="NM_001179471.2" - /db_xref="GeneID:854683" - CDS 128151..129581 - /gene="SIM1" - /locus_tag="YIL123W" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type - cell wall [PMID:11958935]" - /experiment="EXISTENCE:mutant phenotype:GO:0031505 - fungal-type cell wall organization [PMID:15972461]" - /note="Protein of the SUN family (Sim1p, Uth1p, Nca3p, - Sun4p); may participate in DNA replication; promoter - contains SCB regulation box at -300 bp indicating that - expression may be cell cycle-regulated; SIM1 has a - paralog, SUN4, that arose from the whole genome - duplication" - /codon_start=1 - /product="putative glucosidase SIM1" - /protein_id="NP_012143.2" - /db_xref="GeneID:854683" - /db_xref="SGD:S000001385" - /translation="MKFSTAVTTLISSGAIVSALPHVDVHQEDAHQHKRAVAYKYVYE - TVVVDSDGHTVTPAASEVATAATSAIITTSVLAPTSSAAAADSSASIAVSSAALAKNE - KISDAAASATASTSQGASSSSSSSSATSTLESSSVSSSSEEAAPTSTVVSTSSATQSS - ASSATKSSTSSTSPSTSTSTSTSSTSSSSSSSSSSSSSSSGSGSIYGDLADFSGPSEK - FQDGTIPCDKFPSGQGVISIDWIGEGGWSGVENTDTSTGGSCKEGSYCSYSCQPGMSK - TQWPSDQPSDGRSVGGLLCKNGYLYRSNTDADYLCEWGVEAAYVVSKLSKGVAICRTD - YPGTENMVIPTYVEGGSSLPLTVVDQDTYFTWEGKKTSAQYYVNNAGVSVEDGCIWGT - SGSGIGNWAPLNFGAGSTGGVTYLSLIPNPNNSDALNYNVKIVAADDSSNVIGECVYE - NGEFSGGADGCTVSVTSGKAHFVLYN" - gene <130610..>131665 - /gene="POG1" - /locus_tag="YIL122W" - /db_xref="GeneID:854684" - mRNA <130610..>131665 - /gene="POG1" - /locus_tag="YIL122W" - /product="Pog1p" - /transcript_id="NM_001179470.1" - /db_xref="GeneID:854684" - CDS 130610..131665 - /gene="POG1" - /locus_tag="YIL122W" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:12464632]" - /experiment="EXISTENCE:direct assay:GO:0000978 RNA - polymerase II cis-regulatory region sequence-specific DNA - binding [PMID:22959267]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:11914276]" - /experiment="EXISTENCE:genetic interaction:GO:0000321 - re-entry into mitotic cell cycle after pheromone arrest - [PMID:9927449]" - /experiment="EXISTENCE:mutant phenotype:GO:0000321 - re-entry into mitotic cell cycle after pheromone arrest - [PMID:9927449]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:22959267|PMID:9927449]" - /note="DNA-binding transcriptional activator; involved in - cell cycle regulation; overexpression promotes recovery - from pheromone induced arrest via CLN1/2 transcription, - induction of of IME1 during sporulation, and suppression - of stress sensitivity resulting from mutation of the E3 - ubiquitin ligase Rsp5p; binds upstream of BAR1 and cell - cycle-related genes; phosphorylated form may be - ubiquitinated by Dma2p; potential Cdc28p substrate; - regulated by Swi4/6 cell-cycle box binding factor (SBF)" - /codon_start=1 - /product="Pog1p" - /protein_id="NP_012144.1" - /db_xref="GeneID:854684" - /db_xref="SGD:S000001384" - /translation="MKQEPHRQSEEKEKPKGPMAVEREQHTSLSSGTTVTASTGDEST - NSRPVESSQTEKSLSLRIRILKQLGFDDIQELNACDTGLVEQFLNVRLINDTKELEKI - RESNLAKLNQIIDKCMESDKISDSTLNKILDMSMNRDTNNDNNNHLTIPSPITTKKRK - INASELASPRGHRRYRSDIPTVSEVETGVGYPQIHQQPGAYTLPMPANQWMSNPYMQP - PQPQVQQIMPQYLYPPGMGPQAQLPTMSSNSESQTPVMSSQFLSLNQHGLYQQNIGAH - PVMSMGPQANIYGQQHQLQPGQERDQSRKSFSHRRSQSANISMANFRSPMRNPQPASS - QRPVNFLIHTPKHPPPT" - gene <132244..>133872 - /gene="QDR2" - /locus_tag="YIL121W" - /db_xref="GeneID:854685" - mRNA <132244..>133872 - /gene="QDR2" - /locus_tag="YIL121W" - /product="cation transporter" - /transcript_id="NM_001179469.1" - /db_xref="GeneID:854685" - CDS 132244..133872 - /gene="QDR2" - /locus_tag="YIL121W" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:34887841|PMID:15215105]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:genetic interaction:GO:1990573 - potassium ion import across plasma membrane - [PMID:17189489]" - /experiment="EXISTENCE:mutant phenotype:GO:0008324 - monoatomic cation transmembrane transporter activity - [PMID:23106982]" - /experiment="EXISTENCE:mutant phenotype:GO:0015565 - threonine efflux transmembrane transporter activity - [PMID:34887841]" - /experiment="EXISTENCE:mutant phenotype:GO:0032973 amino - acid export across plasma membrane [PMID:34887841]" - /experiment="EXISTENCE:mutant phenotype:GO:0042910 - xenobiotic transmembrane transporter activity - [PMID:15215105|PMID:15649438]" - /experiment="EXISTENCE:mutant phenotype:GO:0055085 - transmembrane transport [PMID:15215105|PMID:15649438]" - /experiment="EXISTENCE:mutant phenotype:GO:0060003 copper - ion export [PMID:23106982]" - /experiment="EXISTENCE:mutant phenotype:GO:1990573 - potassium ion import across plasma membrane - [PMID:17189489]" - /note="Plasma membrane transporter of the major - facilitator superfamily; member of the 12-spanner - drug:H(+) antiporter DHA1 family; exports copper; has - broad substrate specificity and can transport many mono- - and divalent cations; transports a variety of drugs and is - required for resistance to quinidine, barban, cisplatin, - and bleomycin; contributes to potassium homeostasis; - expression is regulated by copper" - /codon_start=1 - /product="cation transporter" - /protein_id="NP_012145.1" - /db_xref="GeneID:854685" - /db_xref="SGD:S000001383" - /translation="MAGATSSIIRENDFEDELAESMQSYNRETADKLALTRTESVKPE - PEITAPPHSRFSRSFKTVLIAQCAFTGFFSTIAGAIYYPVLSVIERKFDIDEELVNVT - VVVYFVFQGLAPTFMGGFADSLGRRPVVLVAIVIYFGACIGLACAQTYAQIIVLRCLQ - AAGISPVIAINSGIMGDVTTRAERGGYVGYVAGFQVLGSAFGALIGAGLSSRWGWRAI - FWFLAIGSGICFLASFLILPETKRNISGNGSVTPKSYLNRAPILVLPTVRKSLHLDNP - DYETLELPTQLNLLAPFKILKAYEICILMLVAGLQFAMYTTHLTALSTALSKQYHLTV - AKVGLCYLPSGICTLCSIVIAGRYLNWNYRRRLKYYQNWLGKKRSKLLEEHDNDLNLV - QRIIENDPKYTFNIFKARLQPAFVTLLLSSSGFCAYGWCITVKAPLAAVLCMSGFASL - FSNCILTFSTTLIVDLFPTKTSTATGCLNLFRCILSAVFIAALSKMVEKMKFGGVFTF - LGALTSSSSILLFILLRKGKELAFKRKKQELGVN" - gene <134417..>136108 - /gene="QDR1" - /locus_tag="YIL120W" - /db_xref="GeneID:854686" - mRNA <134417..>136108 - /gene="QDR1" - /locus_tag="YIL120W" - /product="multidrug transporter" - /transcript_id="NM_001179468.1" - /db_xref="GeneID:854686" - CDS 134417..136108 - /gene="QDR1" - /locus_tag="YIL120W" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:11302822]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:genetic interaction:GO:0030476 - ascospore wall assembly [PMID:23966878]" - /experiment="EXISTENCE:mutant phenotype:GO:0015562 efflux - transmembrane transporter activity [PMID:15649438]" - /experiment="EXISTENCE:mutant phenotype:GO:0055085 - transmembrane transport [PMID:15649438]" - /note="Multidrug transporter of the major facilitator - superfamily; member of the 12-spanner drug:H(+) antiporter - DHA1 family; involved in spore wall assembly; sequence - similarity to DTR1 and QDR3, and the triple mutant dtr1 - qdr1 qdr3 exhibits reduced dityrosine fluorescence - relative to the single mutants; required for resistance to - quinidine, ketoconazole, fluconazole, and barban; QDR1 has - a paralog, AQR1, that arose from the whole genome - duplication" - /codon_start=1 - /product="multidrug transporter" - /protein_id="NP_012146.1" - /db_xref="GeneID:854686" - /db_xref="SGD:S000001382" - /translation="MTKQQTSVMRNASIAKEEREGSDNNNVDRSSSDAISDNDAERSN - SHSEIDNESNFDMVPYSRFSHKQKMLLVVQCAFTGFFSTVAGSIYYPVLTIIERKFNI - TEELANVTIVVYFIFQGVAPSIMGGLADTFGRRPIVLWAILAYFCACIGLACAHNYAQ - ILALRCLQAAGISPVIAINSGIMGDVTTKVERGGYVGLVAGFQVVGTAFGALIGAGLS - SKWGWRAIFWFLAIGSGICLVFSTLLMPETKRTLVGNGSVTPRSFLNRSLILHVGSVK - KTLHLDDPDPETLEPRTSVDFLAPLKILHIREIDILLSIAGLQFSTWTTHQTALTIVL - SKKYNLSVAKIGLCFLPAGISTLTSIISAGRYLNWSYRTRKVKYNRWIKEQELQLMEK - YKGDKNKVAELIHSNSHYAFNLVEARLHPAFVTLLLSSIGFTAFGWCISVKTPLAAVL - CTSAFASLFSNCILTFSTTLIVDLFPSKASTATGCLNLFRCLLSAIFIAALTKMVEKM - RYGGVFTFLSAITSSSSLLLFYLLKNGKQLSFDRIRANDKSAGRSVGKNSEKVST" - rep_origin 136098..136338 - /note="ARS911; Autonomously Replicating Sequence" - /db_xref="SGD:S000118395" - gene complement(<136654..>137877) - /gene="RPI1" - /locus_tag="YIL119C" - /db_xref="GeneID:854687" - mRNA complement(<136654..>137877) - /gene="RPI1" - /locus_tag="YIL119C" - /product="Rpi1p" - /transcript_id="NM_001179467.3" - /db_xref="GeneID:854687" - CDS complement(136654..137877) - /gene="RPI1" - /locus_tag="YIL119C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:12455971]" - /experiment="EXISTENCE:genetic interaction:GO:0009272 - fungal-type cell wall biogenesis [PMID:12455971]" - /experiment="EXISTENCE:mutant phenotype:GO:0007265 Ras - protein signal transduction [PMID:1649384]" - /experiment="EXISTENCE:mutant phenotype:GO:0009272 - fungal-type cell wall biogenesis [PMID:12455971]" - /experiment="EXISTENCE:mutant phenotype:GO:0030695 GTPase - regulator activity [PMID:1649384]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:12455971]" - /note="Transcription factor, allelic differences between - S288C and Sigma1278b; mediates fermentation stress - tolerance by modulating cell wall integrity; - overexpression suppresses heat shock sensitivity of - wild-type RAS2 overexpression and also suppresses cell - lysis defect of mpk1 mutation; allele from S288c can - confer fMAPK pathway independent transcription of FLO11; - S288C and Sigma1278b alleles differ in number of tandem - repeats within ORF" - /codon_start=1 - /product="Rpi1p" - /protein_id="NP_012147.3" - /db_xref="GeneID:854687" - /db_xref="SGD:S000001381" - /translation="MYLEYLQPKLNLMDESSTISKNFPDYSPNLNTPITSNFNEETGS - DCSLVTPRIISSSNSNSNSNSNSNSNSNSGSIDENELNNSNSSSSSARQIRKKWKEPE - DIAFITTIMNNSQLLTFVEYFKPMKNFWKKISKILFQQYGYERNSRQCHDRFKVLYTK - SLKVHPSKKSKQKKKKSKQEAGSNLNFDPSKLSRMQYLLVQLQNTFSFVNGNIILKSQ - KTLKPNKNGTNDNINNHYYNNCNNNNNNINNSNNSNNNNSNNINRNSNHSTNVFSTPE - HIQSSINLDKLESLPALDTKGEPSFISPAQFSLLSSAPADNLILQTPPSPFFQQTMPI - QLPRDAQQEQISPVFSTDVIYMWQTMFNTIENLKEQVNCLKNEVKQLNHKFYQQNKPL - HNMSTSDSENFMQQH" - gene <139752..>140447 - /gene="RHO3" - /locus_tag="YIL118W" - /db_xref="GeneID:854688" - mRNA <139752..>140447 - /gene="RHO3" - /locus_tag="YIL118W" - /product="Rho family GTPase RHO3" - /transcript_id="NM_001179466.1" - /db_xref="GeneID:854688" - CDS 139752..140447 - /gene="RHO3" - /locus_tag="YIL118W" - /experiment="EXISTENCE:direct assay:GO:0003924 GTPase - activity [PMID:10526184]" - /experiment="EXISTENCE:direct assay:GO:0005525 GTP binding - [PMID:10207081]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:10207081]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:16622836]" - /experiment="EXISTENCE:direct assay:GO:0005933 cellular - bud [PMID:10207081]" - /experiment="EXISTENCE:genetic interaction:GO:0045921 - positive regulation of exocytosis - [PMID:8852836|PMID:19955214]" - /experiment="EXISTENCE:genetic interaction:GO:0090338 - positive regulation of formin-nucleated actin cable - assembly [PMID:12810699]" - /experiment="EXISTENCE:mutant phenotype:GO:0030950 - establishment or maintenance of actin cytoskeleton - polarity [PMID:10588647|PMID:8852836]" - /experiment="EXISTENCE:mutant phenotype:GO:0045921 - positive regulation of exocytosis [PMID:10588647]" - /experiment="EXISTENCE:mutant phenotype:GO:0090338 - positive regulation of formin-nucleated actin cable - assembly [PMID:12810699]" - /experiment="EXISTENCE:physical interaction:GO:0045921 - positive regulation of exocytosis [PMID:19955214]" - /note="Non-essential small GTPase of the Rho/Rac family of - Ras-like proteins; involved in the establishment of cell - polarity; GTPase activity positively regulated by the - GTPase activating protein (GAP) Rgd1p" - /codon_start=1 - /product="Rho family GTPase RHO3" - /protein_id="NP_012148.1" - /db_xref="GeneID:854688" - /db_xref="SGD:S000001380" - /translation="MSFLCGSASTSNKPIERKIVILGDGACGKTSLLNVFTRGYFPEV - YEPTVFENYIHDIFVDSKHITLSLWDTAGQEEFDRLRSLSYSDTQCIMLCFSIDSRDS - LENVQNKWVGEITDHCEGVKLVLVALKCDLRNNENESNAITPNNIQQDNSVSNDNGNN - INSTSNGKNLISYEEGLAMAKKIGALRYLECSAKLNKGVNEAFTEAARVALTAGPVAT - EVKSDSGSSCTIM" - gene complement(<140613..>141569) - /gene="PRM5" - /locus_tag="YIL117C" - /db_xref="GeneID:854689" - mRNA complement(<140613..>141569) - /gene="PRM5" - /locus_tag="YIL117C" - /product="pheromone-regulated protein PRM5" - /transcript_id="NM_001179465.1" - /db_xref="GeneID:854689" - CDS complement(140613..141569) - /gene="PRM5" - /locus_tag="YIL117C" - /note="Pheromone-regulated protein, predicted to have 1 - transmembrane segment; induced during cell integrity - signaling; PRM5 has a paralog, YNL058C, that arose from - the whole genome duplication" - /codon_start=1 - /product="pheromone-regulated protein PRM5" - /protein_id="NP_012149.1" - /db_xref="GeneID:854689" - /db_xref="SGD:S000001379" - /translation="MTVITIAKRGLPKLTTSTSSTTTASSSSTITSVASSSSSLPLLS - NSTSSSIIPSITPPSRNGNPYILDSGDMPNGTVFIVVGGIAGVIFLAILLWWVITTYS - SHRLTRSVQDYESKMFSTQHTQFYGDSPYMDYPAKENFQDQVHISESDISPGNKDESV - KDALVSHTNNEKPFLSNFERPLFSLASESNRNSLFISPTGDILYKTRLSKLYQESPRL - LQKPVIMTSDNVSTNSLVSTISSSSASSLDNGNEKEVGEDIRKPAKIASSPSRKLLNS - PESDGSVNRNHSKGNLLVVQSKRKPTPSTYLEHMLEGKEQDE" - gene <142928..>144085 - /gene="HIS5" - /locus_tag="YIL116W" - /db_xref="GeneID:854690" - mRNA <142928..>144085 - /gene="HIS5" - /locus_tag="YIL116W" - /product="histidinol-phosphate transaminase" - /transcript_id="NM_001179464.1" - /db_xref="GeneID:854690" - CDS 142928..144085 - /gene="HIS5" - /locus_tag="YIL116W" - /EC_number="2.6.1.9" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0000105 - histidine biosynthetic process [PMID:14190241]" - /experiment="EXISTENCE:mutant phenotype:GO:0004400 - histidinol-phosphate transaminase activity - [PMID:14190241]" - /note="Histidinol-phosphate aminotransferase; catalyzes - the seventh step in histidine biosynthesis; responsive to - general control of amino acid biosynthesis; mutations - cause histidine auxotrophy and sensitivity to Cu, Co, and - Ni salts" - /codon_start=1 - /product="histidinol-phosphate transaminase" - /protein_id="NP_012150.1" - /db_xref="GeneID:854690" - /db_xref="SGD:S000001378" - /translation="MVFDLKRIVRPKIYNLEPYRCARDDFTEGILLDANENAHGPTPV - ELSKTNLHRYPDPHQLEFKTAMTKYRNKTSSYANDPEVKPLTADNLCLGVGSDESIDA - IIRACCVPGKEKILVLPPTYSMYSVCANINDIEVVQCPLTVSDGSFQMDTEAVLTILK - NDSLIKLMFVTSPGNPTGAKIKTSLIEKVLQNWDNGLVVVDEAYVDFCGGSTAPLVTK - YPNLVTLQTLSKSFGLAGIRLGMTYATAELARILNAMKAPYNISSLASEYALKAVQDS - NLKKMEATSKIINEEKMRLLKELTALDYVDDQYVGGLDANFLLIRINGGDNVLAKKLY - YQLATQSGVVVRFRGNELGCSGCLRITVGTHEENTHLIKYFKETLYKLANE" - gene complement(<144327..>148709) - /gene="NUP159" - /locus_tag="YIL115C" - /gene_synonym="NUP158; RAT7" - /db_xref="GeneID:854691" - mRNA complement(<144327..>148709) - /gene="NUP159" - /locus_tag="YIL115C" - /gene_synonym="NUP158; RAT7" - /product="FG-nucleoporin NUP159" - /transcript_id="NM_001179463.1" - /db_xref="GeneID:854691" - CDS complement(144327..148709) - /gene="NUP159" - /locus_tag="YIL115C" - /gene_synonym="NUP158; RAT7" - /experiment="EXISTENCE:direct assay:GO:0000774 - adenyl-nucleotide exchange factor activity - [PMID:21576266]" - /experiment="EXISTENCE:direct assay:GO:0005643 nuclear - pore [PMID:10684247|PMID:7642562|PMID:7744966]" - /experiment="EXISTENCE:direct assay:GO:0044613 nuclear - pore central transport channel [PMID:18046406]" - /experiment="EXISTENCE:direct assay:GO:0044614 nuclear - pore cytoplasmic filaments [PMID:10684247|PMID:14960378]" - /experiment="EXISTENCE:direct assay:GO:0061912 selective - autophagy [PMID:32029894]" - /experiment="EXISTENCE:genetic interaction:GO:0006607 - NLS-bearing protein import into nucleus [PMID:15039779]" - /experiment="EXISTENCE:genetic interaction:GO:0016973 - poly(A)+ mRNA export from nucleus [PMID:10952996]" - /experiment="EXISTENCE:mutant phenotype:GO:0000055 - ribosomal large subunit export from nucleus - [PMID:11071906|PMID:11739405]" - /experiment="EXISTENCE:mutant phenotype:GO:0000056 - ribosomal small subunit export from nucleus - [PMID:11739405]" - /experiment="EXISTENCE:mutant phenotype:GO:0000774 - adenyl-nucleotide exchange factor activity - [PMID:21576266]" - /experiment="EXISTENCE:mutant phenotype:GO:0006611 protein - export from nucleus [PMID:17347149]" - /experiment="EXISTENCE:mutant phenotype:GO:0016973 - poly(A)+ mRNA export from nucleus - [PMID:27385342|PMID:7744966|PMID:9359887|PMID:9802895|PMID - :15574330]" - /experiment="EXISTENCE:mutant phenotype:GO:0051664 nuclear - pore localization [PMID:9359887|PMID:7744966]" - /experiment="EXISTENCE:mutant phenotype:GO:0097064 ncRNA - export from nucleus [PMID:11352936]" - /experiment="EXISTENCE:physical interaction:GO:0017056 - structural constituent of nuclear pore [PMID:17418788]" - /note="FG-nucleoporin component of central core of the - nuclear pore complex; also part of the nuclear pore - complex (NPC) cytoplasmic filaments; contributes directly - to nucleocytoplasmic transport; regulates ADP release from - the ATP-dependent RNA helicase Dbp5p; forms a stable - association with Nup82p, Gle2p and two other - FG-nucleoporins (Nsp1p and Nup116p)" - /codon_start=1 - /product="FG-nucleoporin NUP159" - /protein_id="NP_012151.1" - /db_xref="GeneID:854691" - /db_xref="SGD:S000001377" - /translation="MSSLKDEVPTETSEDFGFKFLGQKQILPSFNEKLPFASLQNLDI - SNSKSLFVAASGSKAVVGELQLLRDHITSDSTPLTFKWEKEIPDVIFVCFHGDQVLVS - TRNALYSLDLEELSEFRTVTSFEKPVFQLKNVNNTLVILNSVNDLSALDLRTKSTKQL - AQNVTSFDVTNSQLAVLLKDRSFQSFAWRNGEMEKQFEFSLPSELEELPVEEYSPLSV - TILSPQDFLAVFGNVISETDDEVSYDQKMYIIKHIDGSASFQETFDITPPFGQIVRFP - YMYKVTLSGLIEPDANVNVLASSCSSEVSIWDSKQVIEPSQDSERAVLPISEETDKDT - NPIGVAVDVVTSGTILEPCSGVDTIERLPLVYILNNEGSLQIVGLFHVAAIKSGHYSI - NLESLEHEKSLSPTSEKIPIAGQEQEEKKKNNESSKALSENPFTSANTSGFTFLKTQP - AAANSLQSQSSSTFGAPSFGSSAFKIDLPSVSSTSTGVASSEQDATDPASAKPVFGKP - AFGAIAKEPSTSEYAFGKPSFGAPSFGSGKSSVESPASGSAFGKPSFGTPSFGSGNSS - VEPPASGSAFGKPSFGTPSFGSGNSSAEPPASGSAFGKPSFGTSAFGTASSNETNSGS - IFGKAAFGSSSFAPANNELFGSNFTISKPTVDSPKEVDSTSPFPSSGDQSEDESKSDV - DSSSTPFGTKPNTSTKPKTNAFDFGSSSFGSGFSKALESVGSDTTFKFGTQASPFSSQ - LGNKSPFSSFTKDDTENGSLSKGSTSEINDDNEEHESNGPNVSGNDLTDSTVEQTSST - RLPETPSDEDGEVVEEEAQKSPIGKLTETIKKSANIDMAGLKNPVFGNHVKAKSESPF - SAFATNITKPSSTTPAFSFGNSTMNKSNTSTVSPMEEADTKETSEKGPITLKSVENPF - LPAKEERTGESSKKDHNDDPKDGYVSGSEISVRTSESAFDTTANEEIPKSQDVNNHEK - SETDPKYSQHAVVDHDNKSKEMNETSKNNERSGQPNHGVQGDGIALKKDNEKENFDSN - MAIKQFEDHQSSEEDASEKDSRQSSEVKESDDNMSLNSDRDESISESYDKLEDINTDE - LPHGGEAFKAREVSASADFDVQTSLEDNYAESGIQTDLSESSKENEVQTDAIPVKHNS - TQTVKKEAVDNGLQTEPVETCNFSVQTFEGDENYLAEQCKPKQLKEYYTSAKVSNIPF - VSQNSTLRLIESTFQTVEAEFTVLMENIRNMDTFFTDQSSIPLVKRTVRSINNLYTWR - IPEAEILLNIQNNIKCEQMQITNANIQDLKEKVTDYVRKDIAQITEDVANAKEEYLFL - MHFDDASSGYVKDLSTHQFRMQKTLRQKLFDVSAKINHTEELLNILKLFTVKNKRLDD - NPLVAKLAKESLARDGLLKEIKLLREQVSRLQLEEKGKKASSFDASSSITKDMKGFKV - VEVGLAMNTKKQIGDFFKNLNMAK" - gene complement(<149143..>149988) - /gene="POR2" - /locus_tag="YIL114C" - /db_xref="GeneID:854692" - mRNA complement(<149143..>149988) - /gene="POR2" - /locus_tag="YIL114C" - /product="putative porin POR2" - /transcript_id="NM_001179462.3" - /db_xref="GeneID:854692" - CDS complement(149143..149988) - /gene="POR2" - /locus_tag="YIL114C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:11914276|PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane [PMID:16407407|PMID:9315631]" - /experiment="EXISTENCE:mutant phenotype:GO:0045454 cell - redox homeostasis [PMID:18768136]" - /experiment="EXISTENCE:mutant phenotype:GO:0051027 DNA - transport [PMID:19056337]" - /note="Putative mitochondrial porin (voltage-dependent - anion channel); not required for mitochondrial membrane - permeability or mitochondrial osmotic stability; POR2 has - a paralog, POR1, that arose from the whole genome - duplication" - /codon_start=1 - /product="putative porin POR2" - /protein_id="NP_012152.3" - /db_xref="GeneID:854692" - /db_xref="SGD:S000001376" - /translation="MALRFFNDISRDVNGLFNRDFFHTNPLSLNISTTTENGVNFTLK - AKQGVTEGPIQTSVEGRFYDRKEGVSLSQSWSNQNRLNTRIEFSKIAPGWKGDVNAFL - TPQSIKNAKFNLSYAQKSFAARTSIDILQPKDFVGSVTLGHRGFVGGTDIAYDTAAGL - CARYAMSIGYLAREYSFILSTNNRQCATASFFQNVNRYLQVGTKATLQSKTSSNMNIE - FVTRYVPDSISQVKAKIADSGLTTLSYKRNLNKDISLGVGMSFNALQLTEPVHKFGWS - LSFSP" - gene <150559..>151188 - /gene="SDP1" - /locus_tag="YIL113W" - /db_xref="GeneID:854693" - mRNA <150559..>151188 - /gene="SDP1" - /locus_tag="YIL113W" - /product="mitogen-activated protein kinase tyrosine - protein phosphatase SDP1" - /transcript_id="NM_001179461.1" - /db_xref="GeneID:854693" - CDS 150559..151188 - /gene="SDP1" - /locus_tag="YIL113W" - /EC_number="3.1.3.48" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:11923319]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11923319]" - /experiment="EXISTENCE:direct assay:GO:0017017 MAP kinase - tyrosine/serine/threonine phosphatase activity - [PMID:12220658]" - /experiment="EXISTENCE:direct assay:GO:0033550 MAP kinase - tyrosine phosphatase activity - [PMID:11923319|PMID:17495930]" - /experiment="EXISTENCE:genetic interaction:GO:0000196 cell - wall integrity MAPK cascade [PMID:11923319]" - /note="Stress-inducible dual-specificity MAP kinase - phosphatase; negatively regulates Slt2p MAP kinase by - direct dephosphorylation, diffuse localization under - normal conditions shifts to punctate localization after - heat shock; SDP1 has a paralog, MSG5, that arose from the - whole genome duplication" - /codon_start=1 - /product="mitogen-activated protein kinase tyrosine - protein phosphatase SDP1" - /protein_id="NP_012153.1" - /db_xref="GeneID:854693" - /db_xref="SGD:S000001375" - /translation="MNIYTSPTRTPNIAPKSGQRPSLPMLATDERSTDKESPNEDREF - VPCSSLDVRRIYPKGPLLVLPEKIYLYSEPTVKELLPFDVVINVAEEANDLRMQVPAV - EYHHYRWEHDSQIALDLPSLTSIIHAATTKREKILIHCQCGLSRSATLIIAYIMKYHN - LSLRHSYDLLKSRADKINPSIGLIFQLMEWEVALNAKTNVQANSYRKVP" - gene <151595..>154846 - /gene="HOS4" - /locus_tag="YIL112W" - /db_xref="GeneID:854694" - mRNA <151595..>154846 - /gene="HOS4" - /locus_tag="YIL112W" - /product="Hos4p" - /transcript_id="NM_001179460.1" - /db_xref="GeneID:854694" - CDS 151595..154846 - /gene="HOS4" - /locus_tag="YIL112W" - /experiment="EXISTENCE:direct assay:GO:0006338 chromatin - remodeling [PMID:11711434]" - /experiment="EXISTENCE:direct assay:GO:0034967 Set3 - complex [PMID:11711434]" - /note="Subunit of the Set3 complex; complex is a - meiotic-specific repressor of sporulation specific genes - that contains deacetylase activity; potential Cdc28p - substrate" - /codon_start=1 - /product="Hos4p" - /protein_id="NP_012154.1" - /db_xref="GeneID:854694" - /db_xref="SGD:S000001374" - /translation="MNETTTKQPLKKRSLSSYLSNVSTRREELEKISKQETSEEEDTA - GKHEQRETLSEEVSDKFPENVASFRSQTTSVHQATQNNLNAKESEDLAHKNDASSHEG - EVNGDSRPDDVPETNEKISQAIRAKISSSSSSPNVRNVDIQNHQPFSRDQLRAMLKEP - KRKTVDDFIEEEGLGAVEEEDLSDEVLEKNTTEPENVEKDIEYSDSDKDTDDVGSDDP - TAPNSPIKLGRRKLVRGDQLDATTSSMFNNESDSELSDIDDSKNIALSSSLFRGGSSP - VKETNNNLSNMNSSPAQNPKRGSVSRSNDSNKSSHIAVSKRPKQKKGIYRDSGGRTRL - QIACDKGKYDVVKKMIEEGGYDINDQDNAGNTALHEAALQGHIEIVELLIENGADVNI - KSIEMFGDTPLIDASANGHLDVVKYLLKNGADPTIRNAKGLTAFESVDDESEFDDEED - QKILREIKKRLSIAAKKWTNRAGIHNDKSKNGNNAHTIDQPPFDNTTKAKNEKAADSP - SMASNIDEKAPEEEFYWTDVTSRAGKEKLFKASKEGHLPYVGTYVENGGKIDLRSFFE - SVKCGHEDITSIFLAFGFPVNQTSRDNKTSALMVAVGRGHLGTVKLLLEAGADPTKRD - KKGRTALYYAKNSIMGITNSEEIQLIENAINNYLKKHSEDNNDDDDDDDNNNETYKHE - KKREKTQSPILASRRSATPRIEDEEDDTRMLNLADDDFNNDRDVKESTTSDSRKRLDD - NENVGTQYSLDWKKRKTNALQDEEKLKSISPLSMEPHSPKKAKSVEISKIHEETAAER - EARLKEEEEYRKKRLEKKRKKEQELLQKLAEDEKKRIEEQEKQKVLEMERLEKATLEK - ARKMEREKEMEEISYRRAVRDLYPLGLKIINFNDKLDYKRFLPLYYFVDEKNDKFVLD - LQVMILLKDIDLLSKDNQPTSEKIPVDPSHLTPLWNMLKFIFLYGGSYDDKKNNMENK - RYVVNFDGVDLDTKIGYELLEYKKFVSLPMAWIKWDNVVIENHAKRKEIEGNMIQISI - NEFARWRNDKLNKAQQPTRKQRSLKIPRELPVKFQHRMSISSVLQQTSKEPFW" - gene <155222..>155765 - /gene="COX5B" - /locus_tag="YIL111W" - /db_xref="GeneID:854695" - mRNA join(<155222,155311..>155765) - /gene="COX5B" - /locus_tag="YIL111W" - /product="cytochrome c oxidase subunit Vb" - /transcript_id="NM_001179459.1" - /db_xref="GeneID:854695" - CDS join(155222,155311..155765) - /gene="COX5B" - /locus_tag="YIL111W" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005751 - mitochondrial respiratory chain complex IV [PMID:2986105]" - /experiment="EXISTENCE:direct assay:GO:0006123 - mitochondrial electron transport, cytochrome c to oxygen - [PMID:1331058]" - /experiment="EXISTENCE:mutant phenotype:GO:0004129 - cytochrome-c oxidase activity [PMID:2986105]" - /experiment="EXISTENCE:mutant phenotype:GO:0050421 nitrite - reductase (NO-forming) activity [PMID:18388202]" - /note="Subunit Vb of cytochrome c oxidase; cytochrome c - oxidase is the terminal member of the mitochondrial inner - membrane electron transport chain; Cox5Bp is predominantly - expressed during anaerobic growth while its isoform Va - (Cox5Ap) is expressed during aerobic growth; COX5B has a - paralog, COX5A, that arose from the whole genome - duplication" - /codon_start=1 - /product="cytochrome c oxidase subunit Vb" - /protein_id="NP_012155.1" - /db_xref="GeneID:854695" - /db_xref="SGD:S000001373" - /translation="MLRTSLTKGARLTGTRFVQTKALSKATLTDLPERWENMPNLEQK - EIADNLTERQKLPWKTLNNEEIKAAWYISYGEWGPRRPVHGKGDVAFITKGVFLGLGI - SFGLFGLVRLLANPETPKTMNREWQLKSDEYLKSKNANPWGGYSQVQSK" - gene <156045..>157178 - /gene="HPM1" - /locus_tag="YIL110W" - /gene_synonym="MNI1" - /db_xref="GeneID:854696" - mRNA <156045..>157178 - /gene="HPM1" - /locus_tag="YIL110W" - /gene_synonym="MNI1" - /product="protein-histidine N-methyltransferase" - /transcript_id="NM_001179458.1" - /db_xref="GeneID:854696" - CDS 156045..157178 - /gene="HPM1" - /locus_tag="YIL110W" - /gene_synonym="MNI1" - /EC_number="2.1.1.85" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0000027 - ribosomal large subunit assembly - [PMID:24865971|PMID:26826131]" - /experiment="EXISTENCE:mutant phenotype:GO:0018064 - protein-L-histidine N-tele-methyltransferase activity - [PMID:20864530]" - /experiment="EXISTENCE:mutant phenotype:GO:0042038 - peptidyl-histidine methylation, to form - tele-methylhistidine [PMID:20864530]" - /experiment="EXISTENCE:mutant phenotype:GO:0045903 - positive regulation of translational fidelity - [PMID:24865971]" - /note="AdoMet-dependent methyltransferase; involved in a - novel 3-methylhistidine modification of multiple proteins, - including ribosomal protein Rpl3p; seven beta-strand MTase - family member; null mutant exhibits a weak vacuolar - protein sorting defect and caspofungin resistance" - /codon_start=1 - /product="protein-histidine N-methyltransferase" - /protein_id="NP_012156.1" - /db_xref="GeneID:854696" - /db_xref="SGD:S000001372" - /translation="MSFSFGFTSNDFDDDELVAQPETFVESSKENENTTAYINPLDSD - FLSQAGVVQPNVEDLGTILESLKDVRLTFEEFQSPIYRKPLIKRELFDVKHQLMLETD - AQSNNNSTELDILLGDTSEDLRKNIYEGGLKSWECSYDLVDLLSENVDRISNDIDAVV - EIGCGTALPSEFLFRSALLRNDRSKGLKFVLTDYNASVLRLVTIPNLVITWAKTVLTK - EQWYALQKDECEDIPINNEELLLTSKLLAAFYDDVQSRNISVTLISGSWGRKFSNLIH - EVLSGSQKVLSLSSETIYQPDNLPVIAETILDIHNLPQTDVKTYVAAKDIYFGVGGSI - TEFEAYLDDKINSEHLPIHSERFKVNSGLKRSIICIETNKAIR" - gene complement(<157385..>160165) - /gene="SEC24" - /locus_tag="YIL109C" - /gene_synonym="ANU1" - /db_xref="GeneID:854697" - mRNA complement(<157385..>160165) - /gene="SEC24" - /locus_tag="YIL109C" - /gene_synonym="ANU1" - /product="COPII subunit SEC24" - /transcript_id="NM_001179457.3" - /db_xref="GeneID:854697" - CDS complement(157385..160165) - /gene="SEC24" - /locus_tag="YIL109C" - /gene_synonym="ANU1" - /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type - vacuole membrane [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0030127 COPII - vesicle coat [PMID:8004676]" - /experiment="EXISTENCE:direct assay:GO:0090110 - COPII-coated vesicle cargo loading - [PMID:12941277|PMID:14627716|PMID:15665868]" - /experiment="EXISTENCE:mutant phenotype:GO:0005048 signal - sequence binding [PMID:12941277]" - /experiment="EXISTENCE:mutant phenotype:GO:0016236 - macroautophagy [PMID:11694599]" - /note="Component of the Sec23p-Sec24p heterodimer of the - COPII vesicle coat; required for cargo selection during - vesicle formation in ER to Golgi transport; homologous to - Sfb3p; SEC24 has a paralog, SFB2, that arose from the - whole genome duplication" - /codon_start=1 - /product="COPII subunit SEC24" - /protein_id="NP_012157.3" - /db_xref="GeneID:854697" - /db_xref="SGD:S000001371" - /translation="MSHHKKRVYPQAQLQYGQNATPLQQPAQFMPPQDPAAAGMSYGQ - MGMPPQGAVPSMGQQQFLTPAQEQLHQQIDQATTSMNDMHLHNVPLVDPNAYMQPQVP - VQMGTPLQQQQQPMAAPAYGQPSAAMGQNMRPMNQLYPIDLLTELPPPITDLTLPPPP - LVIPPERMLVPSELSNASPDYIRSTLNAVPKNSSLLKKSKLPFGLVIRPYQHLYDDID - PPPLNEDGLIVRCRRCRSYMNPFVTFIEQGRRWRCNFCRLANDVPMQMDQSDPNDPKS - RYDRNEIKCAVMEYMAPKEYTLRQPPPATYCFLIDVSQSSIKSGLLATTINTLLQNLD - SIPNHDERTRISILCVDNAIHYFKIPLDSENNEESADQINMMDIADLEEPFLPRPNSM - VVSLKACRQNIETLLTKIPQIFQSNLITNFALGPALKSAYHLIGGVGGKIIVVSGTLP - NLGIGKLQRRNESGVVNTSKETAQLLSCQDSFYKNFTIDCSKVQITVDLFLASEDYMD - VASLSNLSRFTAGQTHFYPGFSGKNPNDIVKFSTEFAKHISMDFCMETVMRARGSTGL - RMSRFYGHFFNRSSDLCAFSTMPRDQSYLFEVNVDESIMADYCYVQVAVLLSLNNSQR - RIRIITLAMPTTESLAEVYASADQLAIASFYNSKAVEKALNSSLDDARVLINKSVQDI - LATYKKEIVVSNTAGGAPLRLCANLRMFPLLMHSLTKHMAFRSGIVPSDHRASALNNL - ESLPLKYLIKNIYPDVYSLHDMADEAGLPVQTEDGEATGTIVLPQPINATSSLFERYG - LYLIDNGNELFLWMGGDAVPALVFDVFGTQDIFDIPIGKQEIPVVENSEFNQRVRNII - NQLRNHDDVITYQSLYIVRGASLSEPVNHASAREVATLRLWASSTLVEDKILNNESYR - EFLQIMKARISK" - gene <160887..>162977 - /locus_tag="YIL108W" - /db_xref="GeneID:854698" - mRNA <160887..>162977 - /locus_tag="YIL108W" - /product="putative metalloendopeptidase" - /transcript_id="NM_001179456.1" - /db_xref="GeneID:854698" - CDS 160887..162977 - /locus_tag="YIL108W" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095|PMID:22842922]" - /note="Putative metalloendopeptidase; forms cytoplasmic - foci upon DNA replication stress" - /codon_start=1 - /product="putative metalloendopeptidase" - /protein_id="NP_012158.1" - /db_xref="GeneID:854698" - /db_xref="SGD:S000001370" - /translation="MVGSKDIDLFNLRENEQIVSPCLIVHGKCNKQNGAKTVQVQHPQ - LPPITYPIHNQFFKATVILTPGENKLTFVTDTNTARTIVCYYTPLTQNPPVHLCLILA - KDSPLQFDSPREQKDREGGNGLELAIKKLRLGARLMQAYTNEQMLRNSMGNRTFPFVE - EFTWDTLFERPAMRNTIKIHVVRSEKTVKEIQDPDIAQQNSKGKNTGALFGIAMDALK - SYGGPFTNNEKPVQAACMFLDTHWDGKLIRGHAALGGGDDSIKLAIFGSHGLYSWPTC - LEQLVPYFTDETRSSTSEVANDCNECGTYWECLTITLGAFMHEIGHLLGCPHQESGVM - LRGYTTLNRSFLTKEAYSVRTNSTGASPPIFPKEECTWNRLDTVRFLYHPSFTLPQDY - YDPSFMRPTKLGGYPNIKHSVYPLGNGSCRILSPTGIYLIEIICDDLARGHIEYLPVS - LGGQGPQREVIVTLDDLRARLPKNELAKFGNTFKLKILSVNAPETEFDKFPSLLDVQP - LDMSKYGFSKNVQGIKSPLYGRSDGGNAVGVVAFDVRLVTAVRIYHGYALDGVRFYYK - EKPTGTKDAPASKPSVPPRNYFSKITHSIKNHASINEENLKSVLFGHETQNFTDATLE - PGEIIIGFNLRCGAWVDAIQIITSHGRMTDMFGNKDGGGFAELQPPNGQYILGVTGRV - GQWVDAFGIIYGAL" - gene complement(<163278..>165761) - /gene="PFK26" - /locus_tag="YIL107C" - /db_xref="GeneID:854699" - mRNA complement(<163278..>165761) - /gene="PFK26" - /locus_tag="YIL107C" - /product="6-phosphofructo-2-kinase" - /transcript_id="NM_001179455.1" - /db_xref="GeneID:854699" - CDS complement(163278..165761) - /gene="PFK26" - /locus_tag="YIL107C" - /EC_number="2.7.1.105" - /experiment="EXISTENCE:curator inference:GO:0005737 - cytoplasm [PMID:1657152]" - /experiment="EXISTENCE:direct assay:GO:0003873 - 6-phosphofructo-2-kinase activity [PMID:1322693]" - /experiment="EXISTENCE:mutant phenotype:GO:0003873 - 6-phosphofructo-2-kinase activity [PMID:1657152]" - /experiment="EXISTENCE:mutant phenotype:GO:0006003 - fructose 2,6-bisphosphate metabolic process - [PMID:1657152]" - /note="6-phosphofructo-2-kinase; inhibited by - phosphoenolpyruvate and sn-glycerol 3-phosphate; has - negligible fructose-2,6-bisphosphatase activity; - transcriptional regulation involves protein kinase A" - /codon_start=1 - /product="6-phosphofructo-2-kinase" - /protein_id="NP_012159.1" - /db_xref="GeneID:854699" - /db_xref="SGD:S000001369" - /translation="MFKPVDFSETSPVPPDIDLAPTQSPHHVAPSQDSSYDLLSRSSD - DKIDAEKGPHDELSKHLPLFQKRPLSDTPISSNWNSPGITEENTPSDSPENSATNLKS - LHRLHINDETQLKNAKIPTNDTTDYMPPSDGANEVTRIDLKDIKSPTRHHKRRPTTID - VPGLTKSKTSPDGLISKEDSGSKLVIVMVGLPATGKSFITNKLSRFLNYSLYYCKVFN - VGNTRRKFAKEHGLKDQDSKFFEPKNADSTRLRDKWAMDTLDELLDYLLEGSGSVGIF - DATNTSRERRKNVLARIRKRSPHLKVLFLESVCSDHALVQKNIRLKLFGPDYKGKDPE - SSLKDFKSRLANYLKAYEPIEDDENLQYIKMIDVGKKVIAYNIQGFLASQTVYYLLNF - NLADRQIWITRSGESEDNVSGRIGGNSHLTPRGLRFAKSLPKFIARQREIFYQNLMQQ - KKNNENTDGNIYNDFFVWTSMRARTIGTAQYFNEDDYPIKQMKMLDELSAGDYDGMTY - PEIKNNFPEEFEKRQKDKLRYRYPGIGGESYMDVINRLRPVITELERIEDNVLIITHR - VVARALLGYFMNLSMGIIANLDVPLHCVYCLEPKPYGITWSLWEYDEASDSFSKVPQT - DLNTTRVKEVGLVYNERRYSVIPTAPPSARSSFASDFLSRKRSNPTSASSSQSELSEQ - PKNSVSAQTGSNNTTLIGSNFNIKNENGDSRIPLSAPLMATNTSNNILDGGGTSISIH - RPRVVPNQNNVNPLLANNNKAASNVPNVKKSAATPRQIFEIDKVDEKLSMLKNKSFLL - HGKDYPNNADNNDNEDIRAKTMNRSQSHV" - gene <166415..>167444 - /gene="MOB1" - /locus_tag="YIL106W" - /db_xref="GeneID:854700" - mRNA join(<166415..166434,166520..>167444) - /gene="MOB1" - /locus_tag="YIL106W" - /product="Mob1p" - /transcript_id="NM_001179454.1" - /db_xref="GeneID:854700" - CDS join(166415..166434,166520..167444) - /gene="MOB1" - /locus_tag="YIL106W" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0005816 spindle - pole body [PMID:11434459]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:11434459|PMID:11564880]" - /experiment="EXISTENCE:direct assay:GO:0019207 kinase - regulator activity [PMID:11404483]" - /experiment="EXISTENCE:direct assay:GO:0034399 nuclear - periphery [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0034973 Sid2-Mob1 - complex [PMID:9528782]" - /experiment="EXISTENCE:direct assay:GO:0044732 mitotic - spindle pole body [PMID:11564880]" - /experiment="EXISTENCE:genetic interaction:GO:0007096 - regulation of exit from mitosis [PMID:9436989]" - /experiment="EXISTENCE:mutant phenotype:GO:0000281 mitotic - cytokinesis [PMID:11564880]" - /experiment="EXISTENCE:mutant phenotype:GO:0007096 - regulation of exit from mitosis [PMID:9436989]" - /experiment="EXISTENCE:physical interaction:GO:0034973 - Sid2-Mob1 complex [PMID:9528782]" - /note="Component of the mitotic exit network; associates - with and is required for the activation and - Cdc15p-dependent phosphorylation of the Dbf2p kinase; - required for cytokinesis and cell separation; component of - the CCR4 transcriptional complex; relocalizes from - cytoplasm to the nuclear periphery upon DNA replication - stress" - /codon_start=1 - /product="Mob1p" - /protein_id="NP_012160.2" - /db_xref="GeneID:854700" - /db_xref="SGD:S000001368" - /translation="MSFLQNFHISPGQTIRSTRGFKWNTANAANNAGSVSPTKATPHN - NTINGNNNNANTINNRADFTNNPVNGYNESDHGRMSPVLTTPKRHAPPPEQLQNVTDF - NYTPSHQKPFLQPQAGTTVTTHQDIKQIVEMTLGSEGVLNQAVKLPRGEDENEWLAVH - CVDFYNQINMLYGSITEFCSPQTCPRMIATNEYEYLWAFQKGQPPVSVSAPKYVECLM - RWCQDQFDDESLFPSKVTGTFPEGFIQRVIQPILRRLFRVYAHIYCHHFNEILELNLQ - TVLNTSFRHFCLFAQEFELLRPADFGPLLELVMELRDR" - gene complement(<167581..>169641) - /gene="SLM1" - /locus_tag="YIL105C" - /gene_synonym="LIT2" - /db_xref="GeneID:854701" - mRNA complement(<167581..>169641) - /gene="SLM1" - /locus_tag="YIL105C" - /gene_synonym="LIT2" - /product="phosphatidylinositol 4,5-bisphosphate-binding - protein" - /transcript_id="NM_001179453.1" - /db_xref="GeneID:854701" - CDS complement(167581..169641) - /gene="SLM1" - /locus_tag="YIL105C" - /gene_synonym="LIT2" - /experiment="EXISTENCE:direct assay:GO:0005546 - phosphatidylinositol-4,5-bisphosphate binding - [PMID:15689497|PMID:21119626]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane - [PMID:15372071|PMID:15689497|PMID:16622836|PMID:17101780]" - /experiment="EXISTENCE:direct assay:GO:0032126 eisosome - [PMID:19064668|PMID:21451250]" - /experiment="EXISTENCE:direct assay:GO:0046625 - sphingolipid binding [PMID:21119626]" - /experiment="EXISTENCE:genetic interaction:GO:0001558 - regulation of cell growth [PMID:15689497]" - /experiment="EXISTENCE:genetic interaction:GO:0016197 - endosomal transport [PMID:21451250]" - /experiment="EXISTENCE:genetic interaction:GO:0030036 - actin cytoskeleton organization - [PMID:15372071|PMID:15689497]" - /experiment="EXISTENCE:genetic interaction:GO:0051017 - actin filament bundle assembly [PMID:15689497]" - /experiment="EXISTENCE:genetic interaction:GO:0070941 - eisosome assembly [PMID:21451250]" - /experiment="EXISTENCE:genetic interaction:GO:0072659 - protein localization to plasma membrane [PMID:22307609]" - /experiment="EXISTENCE:physical interaction:GO:0001558 - regulation of cell growth [PMID:15689497]" - /experiment="EXISTENCE:physical interaction:GO:0030950 - establishment or maintenance of actin cytoskeleton - polarity [PMID:15689497]" - /experiment="EXISTENCE:physical interaction:GO:0031929 TOR - signaling [PMID:15689497]" - /note="Phosphoinositide PI4,5P(2) binding protein, forms a - complex with Slm2p; acts downstream of Mss4p in a pathway - regulating actin cytoskeleton organization in response to - stress; TORC2 complex substrate and effector; protein - abundance increases in response to DNA replication stress; - SLM1 has a paralog, SLM2, that arose from the whole genome - duplication" - /codon_start=1 - /product="phosphatidylinositol 4,5-bisphosphate-binding - protein" - /protein_id="NP_012161.1" - /db_xref="GeneID:854701" - /db_xref="SGD:S000001367" - /translation="MSKNNTMTSAVSDMLSQQQLNLQHLHNLQQHTRSMTSADHANVL - QQQQQQQQQQQQQQQQQQQSASFQNGSLTSDINQQSYLNGQPVPSTSNSTFQNNRTLT - MNSGGLQGIISNGSPNIDSNTNVTIAVPDPNNNNGKQLQGKNSLTNTSILSRARSSLQ - RQRLAQQQQQQQDPRSPLVILVPTAAQPTDILAARFSAWRNVIKSVIVYLTEIASIQD - EIVRQQLRLSHAVQFPFFSIENQYQPSSQEDKSVQKFFLPLGNGSIQDLPTILNQYHE - SLASSASKASRELTNDVIPRLEDLRRDLIVKIKEIKSLQSDFKNSCSKELQQTKQAMK - QFQESLKDARYSVPKQDPFLTKLALDRQIKKQLQEENFLHEAFDNLETSGAELEKIVV - MEIQNSLTIYARLLGQEAQLVFDILISKLDSGFFNVDPQFEWDNFISRDPNFLLPNLP - MRTFKEIVYKYQFDPLTYEIKSGFLERRSKFLKSYSKGYYVLTPNFLHEFKTADRKKD - LVPVMSLALSECTVTEHSRKNSTSSPNSTGSDAKFVLHAKQNGIIRRGHNWVFKADSY - ESMMSWFDNLKILTSTSNIQDKYKFITQKLNLNSDGKPKLTNNHTSINKYQLSNANST - MVENDENDDINSNYVGSTVTPKLDNQTNTNTSMSSLPDTNDSELQDQVPNIYIQTPIN - DFKS" - gene <167664..>167804 - /locus_tag="YIL105W-A" - /db_xref="GeneID:13393613" - mRNA <167664..>167804 - /locus_tag="YIL105W-A" - /product="uncharacterized protein" - /transcript_id="NM_001270750.1" - /db_xref="GeneID:13393613" - CDS 167664..167804 - /locus_tag="YIL105W-A" - /note="hypothetical protein; completely overlaps the - verified gene SLM1; identified by gene-trapping, - microarray-based expression analysis, and genome-wide - homology searching; mRNA identified as translated by - ribosome profiling data" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001257679.1" - /db_xref="GeneID:13393613" - /db_xref="SGD:S000028657" - /translation="MKTWMYSYLFDCPILVLPWTPHNYYLYHRFHHFLPLCYWHYSAD - TY" - gene complement(<169982..>171505) - /gene="SHQ1" - /locus_tag="YIL104C" - /db_xref="GeneID:854702" - mRNA complement(<169982..>171505) - /gene="SHQ1" - /locus_tag="YIL104C" - /product="Hsp90 cochaperone SHQ1" - /transcript_id="NM_001179452.3" - /db_xref="GeneID:854702" - CDS complement(169982..171505) - /gene="SHQ1" - /locus_tag="YIL104C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm - [PMID:12228251]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0051082 unfolded - protein binding [PMID:19426738]" - /experiment="EXISTENCE:mutant phenotype:GO:0000493 box - H/ACA snoRNP assembly [PMID:12228251]" - /experiment="EXISTENCE:physical interaction:GO:0000493 box - H/ACA snoRNP assembly [PMID:12228251]" - /note="Chaperone protein; required for the assembly of box - H/ACA snoRNPs and thus for pre-rRNA processing; functions - as an RNA mimic; forms a complex with Naf1p and interacts - with H/ACA snoRNP components Nhp2p and Cbf5p; homology - with known Hsp90p cochaperones; relocalizes to the cytosol - in response to hypoxia" - /codon_start=1 - /product="Hsp90 cochaperone SHQ1" - /protein_id="NP_012162.3" - /db_xref="GeneID:854702" - /db_xref="SGD:S000001366" - /translation="MITPRFSITQDEEFIFLKIFISNIRFSAVGLEIIIQENMIIFHL - SPYYLRLRFPHELIDDERSTAQYDSKDECINVKVAKLNKNEYFEDLDLPTKLLARQGD - LAGADALTENTDAKKTQKPLIQEVETDGVSNNIKDDVKTIGQMGEGFNWEIEQKMDSS - TNNGILKTKYGFDNLYDTVISVSTSNGNDINELDDPEHTDANDRVIERLRKENLKFDP - EYYVSEYMTHKYGNEEDLEINGIKELLKFTPSIVKQYLQWYKDSTNPNLVMPIEFTDE - EQKQMQDNLPKKSYLVEDIKPLYVTILSVLFSYVFEQIENEGTHTTESAWTMGKLCPQ - ISFLDQQLKQVNELQDGMKEISKVNKDSSLIKIAIITGIRRALSYPLHRNYDLAMKAW - TFVYYILRGGKRLVIRALLDIHETFRFHDVYYVYDKVLLDDLTAWFISQGSENVIRSL - ALEMRKEQESLSKQDIEFECIASFNEQTGEPEWETLNIREMEILAESEYREQQQNPQ" - gene <171751..>173028 - /gene="DPH1" - /locus_tag="YIL103W" - /db_xref="GeneID:854703" - mRNA <171751..>173028 - /gene="DPH1" - /locus_tag="YIL103W" - /product="2-(3-amino-3-carboxypropyl)histidine synthase" - /transcript_id="NM_001179451.1" - /db_xref="GeneID:854703" - CDS 171751..173028 - /gene="DPH1" - /locus_tag="YIL103W" - /EC_number="2.5.1.108" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276|PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0017183 protein - histidyl modification to diphthamide [PMID:15485916]" - /note="Protein required for synthesis of diphthamide; - required along with Dph2p, Kti11p, Jjj3p, and Dph5p; - diphthamide is a modified histidine residue of translation - elongation factor 2 (Eft1p or Eft2p); forms a complex with - Dph2p that catalyzes the first step of diphthamide - biosynthesis" - /codon_start=1 - /product="2-(3-amino-3-carboxypropyl)histidine synthase" - /protein_id="NP_012163.1" - /db_xref="GeneID:854703" - /db_xref="SGD:S000001365" - /translation="MSGSTESKKQPRRRFIGRKSGNSNNDKLTTVAENGNEIIHKQKS - RIALGRSVNHVPEDILNDKELNEAIKLLPSNYNFEIHKTVWNIRKYNAKRIALQMPEG - LLIYSLIISDILEQFCGVETLVMGDVSYGACCIDDFTARALDCDFIVHYAHSCLVPID - VTKIKVLYVFVTINIQEDHIIKTLQKNFPKGSRIATFGTIQFNPAVHSVRDKLLNDEE - HMLYIIPPQIKPLSRGEVLGCTSERLDKEQYDAMVFIGDGRFHLESAMIHNPEIPAFK - YDPYNRKFTREGYDQKQLVEVRAEAIEVARKGKVFGLILGALGRQGNLNTVKNLEKNL - IAAGKTVVKIILSEVFPQKLAMFDQIDVFVQVACPRLSIDWGYAFNKPLLTPYEASVL - LKKDVMFSEKYYPMDYYEAKGYGRGETPKHAIE" - gene complement(<173365..>173592) - /locus_tag="YIL102C-A" - /db_xref="GeneID:3799974" - mRNA complement(<173365..>173592) - /locus_tag="YIL102C-A" - /product="uncharacterized protein" - /transcript_id="NM_001184686.1" - /db_xref="GeneID:3799974" - CDS complement(173365..173592) - /locus_tag="YIL102C-A" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /note="Regulatory subunit of dolichyl phosphate mannose - (DPM) synthase; identified based on comparisons of the - genome sequences of six Saccharomyces species; SWAT-GFP, - seamless-GFP and mCherry fusion proteins localize to the - endoplasmic reticulum" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001032579.1" - /db_xref="GeneID:3799974" - /db_xref="SGD:S000113587" - /translation="MNRFVIICLLFTYYVIWSLLPIFEIENSNPVVSLLFPISSNVAI - FLPIFLLLIGFTLTGSVLGVLLIRSDKKKKV" - gene complement(<174582..>174887) - /locus_tag="YIL102C" - /db_xref="GeneID:854704" - mRNA complement(<174582..>174887) - /locus_tag="YIL102C" - /product="uncharacterized protein" - /transcript_id="NM_001179450.1" - /db_xref="GeneID:854704" - CDS complement(174582..174887) - /locus_tag="YIL102C" - /note="hypothetical protein" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012164.1" - /db_xref="GeneID:854704" - /db_xref="SGD:S000001364" - /translation="MLKVEKFKKLKRFEVYYCLKNSFLEEVDIEMKYSCSITTIMSNG - SASLLMNWEELTPGHCFTSYTTNPIAGDYGLNASAIDGHTEELVATHPAGTLENATQ" - gene 175031..175103 - /locus_tag="YNCI0002W" - /db_xref="GeneID:854705" - tRNA 175031..175103 - /locus_tag="YNCI0002W" - /product="tRNA-Thr" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Threonine tRNA (tRNA-Thr), predicted by tRNAscan-SE - analysis" - /db_xref="GeneID:854705" - /db_xref="SGD:S000006741" - rep_origin 175038..175358 - /note="ARS912; Autonomously Replicating Sequence" - /db_xref="SGD:S000118396" - gene complement(<175307..>177250) - /gene="XBP1" - /locus_tag="YIL101C" - /db_xref="GeneID:854706" - mRNA complement(<175307..>177250) - /gene="XBP1" - /locus_tag="YIL101C" - /product="Xbp1p" - /transcript_id="NM_001179449.1" - /db_xref="GeneID:854706" - CDS complement(175307..177250) - /gene="XBP1" - /locus_tag="YIL101C" - /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding - transcription factor activity, RNA polymerase II-specific - [PMID:10611226]" - /experiment="EXISTENCE:direct assay:GO:0003700 DNA-binding - transcription factor activity [PMID:9343412]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22842922|PMID:9343412]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0043565 - sequence-specific DNA binding [PMID:19158363]" - /experiment="EXISTENCE:mutant phenotype:GO:0000122 - negative regulation of transcription by RNA polymerase II - [PMID:10611226|PMID:11340165|PMID:24204289|PMID:9343412]" - /note="Transcriptional repressor; binds promoter sequences - of cyclin genes, CYS3, and SMF2; not expressed during log - phase of growth, but induced by stress or starvation - during mitosis, and late in meiosis; represses 15% of all - yeast genes as cells transition to quiescence; important - for maintaining G1 arrest and for longevity of quiescent - cells; member of Swi4p/Mbp1p family; phosphorylated by - Cdc28p; relative distribution to nucleus increases upon - DNA replication stress" - /codon_start=1 - /product="Xbp1p" - /protein_id="NP_012165.1" - /db_xref="GeneID:854706" - /db_xref="SGD:S000001363" - /translation="MKYPAFSINSDTVHLTDNPLDDYQRLYLVSVLDRDSPPASFSAG - LNIRKVNYKSSIAAQFTHPNFIISARDAGNGEEAAAQNVLNCFEYQFPNLQTIQSLVH - EQTLLSQLASSATPHSALHLHDKNILMGKIILPSRSNKTPVSASPTKQEKKALSTASR - ENATSSLTKNQQFKLTKMDHNLINDKLINPNNCVIWSHDSGYVFMTGIWRLYQDVMKG - LINLPRGDSVSTSQQQFFCKAEFEKILSFCFYNHSSFTSEESSSVLLSSSTSSPPKRR - TSTGSTFLDANASSSSTSSTQANNYIDFHWNNIKPELRDLICQSYKDFLINELGPDQI - DLPNLNPANFTKRIRGGYIKIQGTWLPMEISRLLCLRFCFPIRYFLVPIFGPDFPKDC - ESWYLAHQNVTFASSTTGAGAATAATAAANTSTNFTSTAVARPRQKPRPRPRQRSTSM - SHSKAQKLVIEDALPSFDSFVENLGLSSNDKNFIKKNSKRQKSSTYTSQTSSPIGPRD - PTVQILSNLASFYNTHGHRYSYPGNIYIPQQRYSLPPPNQLSSPQRQLNYTYDHIHPV - PSQYQSPRHYNVPSSPIAPAPPTFPQPYGDDHYHFLKYASEVYKQQNQRPAHNTNTNM - DTSFSPRANNSLNNFKFKTNSKQ" - gene <178004..>179653 - /gene="SGA1" - /locus_tag="YIL099W" - /db_xref="GeneID:854708" - mRNA <178004..>179653 - /gene="SGA1" - /locus_tag="YIL099W" - /product="glucan 1,4-alpha-glucosidase" - /transcript_id="NM_001179447.3" - /db_xref="GeneID:854708" - CDS 178004..179653 - /gene="SGA1" - /locus_tag="YIL099W" - /EC_number="3.2.1.3" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:2493265|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0004339 glucan - 1,4-alpha-glucosidase activity [PMID:2493265]" - /experiment="EXISTENCE:direct assay:GO:0005628 prospore - membrane [PMID:24390141]" - /experiment="EXISTENCE:mutant phenotype:GO:0005980 - glycogen catabolic process [PMID:11486014]" - /note="Intracellular sporulation-specific glucoamylase; - involved in glycogen degradation; induced during - starvation of a/a diploids late in sporulation, but - dispensable for sporulation" - /codon_start=1 - /product="glucan 1,4-alpha-glucosidase" - /protein_id="NP_012167.3" - /db_xref="GeneID:854708" - /db_xref="SGD:S000001361" - /translation="MARQKMFYNKLLGMLSVGFGFAWALENITIYEFDFGKGILDQSY - GGVFSNNGPSQVQLRDAVLMNGTVVYDSNGAWDSSALEEWLQGQKKVSIEKIFENIGP - SAVYPSISPGVVIASPSQTHPDYFYQWIRDSALTINSIVSHSAGPAIETLLQYLNVSF - HLQRSNNTLGAGIGYTNDTVALGDPKWNVDNTAFTEDWGRPQNDGPALRSIAILKIID - YIKQSGTDLGAKYPFQSTADIFDDIVRWDLRFIIDHWNSSGFDLWEEVNGMHFFTLLV - QLSAVDKSLSYFNASERSSPFVEELRQTRRDISKFLVDPANGFINGKYNYIVGTPMIA - DTLRSGLDISTLLAANTVHDAPSASHLPFDINDPAVLNTLHHLMLHMRSIYPINDSSK - NATGIALGRYPEDVYDGYGFGEGNPWVLATCTASTTLYQLIYRHISEQHDLVVPMNND - CSNAFWSELVFSNLTTLGNDEGYLILEFNTPAFNQTIQKIFQLADSFLVKLKAHVGTD - GELSEQFNKYTGFMQGAQHLTWSYTSFWDAYQIRQEVLQSL" - gene complement(<179772..>180239) - /gene="FMC1" - /locus_tag="YIL098C" - /db_xref="GeneID:854709" - mRNA complement(<179772..>180239) - /gene="FMC1" - /locus_tag="YIL098C" - /product="Fmc1p" - /transcript_id="NM_001179446.3" - /db_xref="GeneID:854709" - CDS complement(179772..180239) - /gene="FMC1" - /locus_tag="YIL098C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005759 - mitochondrial matrix [PMID:11096112]" - /experiment="EXISTENCE:genetic interaction:GO:0033615 - mitochondrial proton-transporting ATP synthase complex - assembly [PMID:11096112]" - /experiment="EXISTENCE:mutant phenotype:GO:0016236 - macroautophagy [PMID:19793921]" - /experiment="EXISTENCE:mutant phenotype:GO:0033615 - mitochondrial proton-transporting ATP synthase complex - assembly [PMID:11096112]" - /note="Mitochondrial matrix protein; required for assembly - or stability at high temperature of the F1 sector of - mitochondrial F1F0 ATP synthase; null mutant temperature - sensitive growth on glycerol is suppressed by multicopy - expression of Odc1p" - /codon_start=1 - /product="Fmc1p" - /protein_id="NP_012168.3" - /db_xref="GeneID:854709" - /db_xref="SGD:S000001360" - /translation="MDRPRTLRTYRGLIRAILKYERPSKIVNWGNLRKAMITKLEYAK - KQNQRDSHENINRQLEKWKKLDPVSDRSLNLFIADSKSLRSILQNDIKWEKKVAQGQN - VDEIFEHALDIIKFLDNQREYEELVDRYNPGNKLTQDEKVKRTANVVGLDVPT" - gene <180427..>181977 - /gene="FYV10" - /locus_tag="YIL097W" - /gene_synonym="GID9" - /db_xref="GeneID:854710" - mRNA <180427..>181977 - /gene="FYV10" - /locus_tag="YIL097W" - /gene_synonym="GID9" - /product="glucose-induced degradation complex subunit - FYV10" - /transcript_id="NM_001179445.1" - /db_xref="GeneID:854710" - CDS 180427..181977 - /gene="FYV10" - /locus_tag="YIL097W" - /gene_synonym="GID9" - /EC_number="2.3.2.27" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0034657 GID complex - [PMID:16872538|PMID:18508925]" - /experiment="EXISTENCE:mutant phenotype:GO:0043066 - negative regulation of apoptotic process [PMID:18355271]" - /experiment="EXISTENCE:mutant phenotype:GO:0043161 - proteasome-mediated ubiquitin-dependent protein catabolic - process [PMID:12686616]" - /experiment="EXISTENCE:mutant phenotype:GO:0045721 - negative regulation of gluconeogenesis [PMID:12686616]" - /experiment="EXISTENCE:mutant phenotype:GO:0061630 - ubiquitin protein ligase activity [PMID:22044534]" - /note="Subunit of GID complex; involved in - proteasome-dependent catabolite inactivation of - gluconeogenic enzymes FBPase, PEPCK, and c-MDH; forms - dimer with Rmd5p that is then recruited to GID Complex by - Gid8p; contains a degenerate RING finger motif needed for - GID complex ubiquitin ligase activity in vivo, as well as - CTLH and CRA domains; plays role in anti-apoptosis; - required for survival upon exposure to K1 killer toxin" - /codon_start=1 - /product="glucose-induced degradation complex subunit - FYV10" - /protein_id="NP_012169.1" - /db_xref="GeneID:854710" - /db_xref="SGD:S000001359" - /translation="MAEKSIFNEPDVDFHLKLNQQLFHIPYELLSKRIKHTQAVINKE - TKSLHEHTAALNQIFEHNDVEHDELALAKITEMIRKVDHIERFLNTQIKSYCQILNRI - KKRLEFFHELKDIKSQNSGTSHNGNNEGTRTKLIQWYQSYTNILIGDYLTRNNPIKYN - SETKDHWNSGVVFLKQSQLDDLIDYDVLLEANRISTSLLHERNLLPLISWINENKKTL - TKKSSILEFQARLQEYIELLKVDNYTDAIVCFQRFLLPFVKSNFTDLKLASGLLIFIK - YCNDQKPTSSTSSGFDTEEIKSQSLPMKKDRIFQHFFHKSLPRITSKPAVNTTDYDKS - SLINLQSGDFERYLNLLDDQRWSVLNDLFLSDFYSMYGISQNDPLLIYLSLGISSLKT - RDCLHPSDDENGNQETETATTAEKEVEDLQLFTLHSLKRKNCPVCSETFKPITQALPF - AHHIQSQLFENPILLPNGNVYDSKKLKKLAKTLKKQNLISLNPGQIMDPVDMKIFCES - DSIKMYPT" - gene complement(<182117..>183127) - /gene="BMT5" - /locus_tag="YIL096C" - /db_xref="GeneID:854711" - mRNA complement(<182117..>183127) - /gene="BMT5" - /locus_tag="YIL096C" - /product="25S rRNA (uracil2634-N3)-methyltransferase" - /transcript_id="NM_001179444.1" - /db_xref="GeneID:854711" - CDS complement(182117..183127) - /gene="BMT5" - /locus_tag="YIL096C" - /EC_number="2.1.1.313" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:14562095|PMID:24335083]" - /experiment="EXISTENCE:direct assay:GO:0008757 - S-adenosylmethionine-dependent methyltransferase activity - [PMID:21858014]" - /experiment="EXISTENCE:mutant phenotype:GO:0070042 rRNA - (uridine-N3-)-methyltransferase activity [PMID:24335083]" - /experiment="EXISTENCE:mutant phenotype:GO:0070475 rRNA - base methylation [PMID:24335083]" - /note="Methyltransferase required for m3U2634 methylation - of the 25S rRNA; S-adenosylmethionine-dependent; - associates with precursors of the 60S ribosomal subunit; - predicted to be involved in ribosome biogenesis" - /codon_start=1 - /product="25S rRNA (uracil2634-N3)-methyltransferase" - /protein_id="NP_012170.1" - /db_xref="GeneID:854711" - /db_xref="SGD:S000001358" - /translation="MARKLKGKIGSKGLKGALLRHKAKVKLVRNIESKQKHELRKKNS - SANNKTVKRNQEFQKLNQGKVMPFEKDETLMLCGEGDFSFARSIVEQNYIESDNLIIT - SYDNSVNELKLKYPHTFEENYQYLKDLNIPIFFQIDVTKLVKSFKISKNNTWFKIINR - LSDHRWGNKPLQNIVFNFPHNGKGIKDQERNIREHQDLIFNFFQNSLQLFNLINTKIQ - NDTLRYTQGYDLNEDTPQAKKLTAEGYGNIILSLFDGEPYDSWQIKLLAKKNGLTLSR - SSKFQWENFPGYHHRRTNSEQDTTKPAKERDARFYIFSKYVSNSSKHNRKSKKDTDSD - SD" - gene complement(183440..183513) - /locus_tag="YNCI0003C" - /db_xref="GeneID:854712" - tRNA complement(183440..183513) - /locus_tag="YNCI0003C" - /product="tRNA-Ile" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Isoleucine tRNA (tRNA-Ile), predicted by - tRNAscan-SE analysis" - /db_xref="GeneID:854712" - /db_xref="SGD:S000006605" - gene <183937..>186369 - /gene="PRK1" - /locus_tag="YIL095W" - /gene_synonym="PAK1" - /db_xref="GeneID:854713" - mRNA <183937..>186369 - /gene="PRK1" - /locus_tag="YIL095W" - /gene_synonym="PAK1" - /product="serine/threonine protein kinase PRK1" - /transcript_id="NM_001179443.1" - /db_xref="GeneID:854713" - CDS 183937..186369 - /gene="PRK1" - /locus_tag="YIL095W" - /gene_synonym="PAK1" - /EC_number="2.7.11.1" - /experiment="EXISTENCE:direct assay:GO:0004672 protein - kinase activity [PMID:16319894]" - /experiment="EXISTENCE:direct assay:GO:0004674 protein - serine/threonine kinase activity - [PMID:17978096|PMID:9885245|PMID:11739778|PMID:13679512|PM - ID:12956961]" - /experiment="EXISTENCE:direct assay:GO:0030479 actin - cortical patch [PMID:10087264|PMID:9885245]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:19053807]" - /experiment="EXISTENCE:genetic interaction:GO:0120133 - negative regulation of actin cortical patch assembly - [PMID:9885245]" - /experiment="EXISTENCE:genetic interaction:GO:1900186 - negative regulation of clathrin-dependent endocytosis - [PMID:13679512]" - /experiment="EXISTENCE:mutant phenotype:GO:0000147 actin - cortical patch assembly [PMID:12952930]" - /experiment="EXISTENCE:mutant phenotype:GO:0031333 - negative regulation of protein-containing complex assembly - [PMID:11739778]" - /experiment="EXISTENCE:mutant phenotype:GO:1900186 - negative regulation of clathrin-dependent endocytosis - [PMID:12956961]" - /note="Ser/Thr protein kinase; regulates the organization - and function of the actin cytoskeleton; inhibits - clathrin-mediated endocytosis; phosphorylates the Pan1p - and Sla1p subunits of the Pan1p-Sla1p-End3p complex, - resulting in inhibition of complex formation; inhibits - Scd5p through phosphorylation; phosphorylates - Pan1p-interacting proteins, Ent1/2 and Yap1801/2; - negatively regulated through autophosphorylation; - functional overlap with ARK1" - /codon_start=1 - /product="serine/threonine protein kinase PRK1" - /protein_id="NP_012171.1" - /db_xref="GeneID:854713" - /db_xref="SGD:S000001357" - /translation="MNTPQISLYEPGTILTVGSHHAKIIKYLTSGGFAQVYTAEISPP - DPYSNANIACLKRVIVPHKQGLNTLRAEVDAMKLLRNNKHVVSYIDSHAARSVNGIAY - EVFVLMEFCERGGLIDFMNTRLQNRLQESEILEIMSQTVQGITAMHALQPPLIHRDIK - IENVLISHDGLYKVCDFGSVSGVIRPPRNTQEFNYVQHDILTNTTAQYRSPEMIDLYR - GLPIDEKSDIWALGVFLYKICYYTTPFEKSGEAGILHARYQYPSFPQYSDRLKNLIRL - MLMEAPSQRPNICQVLEEVSRLQNKPCPIRNFYLLRAMNQNANTQLAGEPSSTTYVPT - QKFIPVQSLQSINQPPNMMPVTHVSTTPNLGTFPISINDNNKTEVTAHAGLQVGSHSN - LTSPLMKTKSVPLSDEFASLYYKELHPFQKSQTFKSVESFQSPQRKSMPPLSLTPVNN - DIFDRVSAINRPNNYVDSETQTIDNMAVPNLKLSPTITSKSLSSTKEIAAPDNINGSK - IVRSLSSKLKKVITGESRGNSPIKSRQNTGDSIRSAFGKLRHGFTGNSVNNSRSASFD - NNNVNGNGNNTNRRLVSSSTSSFPKFNSDTKRKEESDKNQRLEKRRSMPPSILSDFDQ - HERNNSRTGSRDYYRSHSPVKKTQASAKTTSKPTLIPDNGNVNINQEKKESIQRRVHN - LLKSSDDPVTYKSASGYGKYTDIGTETSNRHSSVRITPITEEKFKKTLKDGVLDIKTK - SNGKDKSRPPRPPPKPLHLRTEIQKIRNFSRLQSKKLPIERISSEATETIVDVNVDDL - EADFRKRFPSKV" - gene complement(<186517..>187632) - /gene="LYS12" - /locus_tag="YIL094C" - /gene_synonym="LYS10; LYS11" - /db_xref="GeneID:854714" - mRNA complement(<186517..>187632) - /gene="LYS12" - /locus_tag="YIL094C" - /gene_synonym="LYS10; LYS11" - /product="homoisocitrate dehydrogenase" - /transcript_id="NM_001179442.1" - /db_xref="GeneID:854714" - CDS complement(186517..187632) - /gene="LYS12" - /locus_tag="YIL094C" - /gene_synonym="LYS10; LYS11" - /EC_number="1.1.1.87" - /experiment="EXISTENCE:curator inference:GO:0009085 lysine - biosynthetic process [PMID:17223711]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:11914276|PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0047046 - homoisocitrate dehydrogenase activity [PMID:17223711]" - /note="Homo-isocitrate dehydrogenase; an NAD-linked - mitochondrial enzyme required for the fourth step in the - biosynthesis of lysine, in which homo-isocitrate is - oxidatively decarboxylated to alpha-ketoadipate" - /codon_start=1 - /product="homoisocitrate dehydrogenase" - /protein_id="NP_012172.1" - /db_xref="GeneID:854714" - /db_xref="SGD:S000001356" - /translation="MFRSVATRLSACRGLASNAARKSLTIGLIPGDGIGKEVIPAGKQ - VLENLNSKHGLSFNFIDLYAGFQTFQETGKALPDETVKVLKEQCQGALFGAVQSPTTK - VEGYSSPIVALRREMGLFANVRPVKSVEGEKGKPIDMVIVRENTEDLYIKIEKTYIDK - ATGTRVADATKRISEIATRRIATIALDIALKRLQTRGQATLTVTHKSNVLSQSDGLFR - EICKEVYESNKDKYGQIKYNEQIVDSMVYRLFREPQCFDVIVAPNLYGDILSDGAAAL - VGSLGVVPSANVGPEIVIGEPCHGSAPDIAGKGIANPIATIRSTALMLEFLGHNEAAQ - DIYKAVDANLREGSIKTPDLGGKASTQQVVDDVLSRL" - gene complement(<187990..>188784) - /gene="RSM25" - /locus_tag="YIL093C" - /gene_synonym="mS23" - /db_xref="GeneID:854715" - mRNA complement(<187990..>188784) - /gene="RSM25" - /locus_tag="YIL093C" - /gene_synonym="mS23" - /product="mitochondrial 37S ribosomal protein RSM25" - /transcript_id="NM_001179441.3" - /db_xref="GeneID:854715" - CDS complement(187990..188784) - /gene="RSM25" - /locus_tag="YIL093C" - /gene_synonym="mS23" - /experiment="EXISTENCE:curator inference:GO:0032543 - mitochondrial translation [PMID:11278769]" - /experiment="EXISTENCE:direct assay:GO:0003735 structural - constituent of ribosome [PMID:11278769]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005763 - mitochondrial small ribosomal subunit [PMID:11278769]" - /note="Mitochondrial ribosomal protein of the small - subunit" - /codon_start=1 - /product="mitochondrial 37S ribosomal protein RSM25" - /protein_id="NP_012173.3" - /db_xref="GeneID:854715" - /db_xref="SGD:S000001355" - /translation="MKIQTNAVNVLQRTSAYLKSGLLKETPAWYNVVASIPPSTKFTR - EPRFKNPSNGHIIGKLVDVTEQPHANNKGLYKTRPNSSDKRVGVKRLYRPPKLTYVED - RLRSLFYKQHPWELSRPKILVENEIGDENYDWSHMLQIGRPLDGESVIQRTMYLIKTK - QYGDMVEAYDHARYEFYALRMQEETEQQVALEEAEMFGSLFGVSAIEHGIQKEQEVLD - VWEKKVVEETELMAARTSNPAGSWKDDTTLNTAQEEESTTSENLHF" - gene <189066..>190967 - /locus_tag="YIL092W" - /db_xref="GeneID:854716" - mRNA <189066..>190967 - /locus_tag="YIL092W" - /product="uncharacterized protein" - /transcript_id="NM_001179440.3" - /db_xref="GeneID:854716" - CDS 189066..190967 - /locus_tag="YIL092W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /note="hypothetical protein; green fluorescent protein - (GFP)-fusion protein localizes to the cytoplasm and to the - nucleus" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012174.3" - /db_xref="GeneID:854716" - /db_xref="SGD:S000001354" - /translation="MVQMRSKNMAYESGTNNYSDTIANGNTLPPRSKKGHSGRRKRSE - TLPIACNNFCVTRQIDDDEQAFKMLDKVSHLKKFSAEDGDDNNIFVQWADDITDILFG - LCCTGTFLKLLISSALSGRAKTWFDSTTEGIDDHVIKAYSFEKFLALLSEEFDGARSL - RREIFTELLTLSIDSEKSLEAFAHKSGRLTPYYLSSGAALDLFLTKLEPQLQKQLENC - AFPMTLNLALLITACEFAKRASNHKKYRYKNTRDSDICTPKSKNTAIVSKLSNTKTIS - KNKVIEKSDKKNYFDKNSQHIPDPKRRKQNEPGMRLFLVMDEEKNILTSRNVSANAYT - SKNGHTNLSDLHTNLKNSKSQQCAVEPISILNSGSLVTGTINIDLINDEVLGTKEETT - TYDERMDGNSRSLNERCCAVKKNSLQPITSNIFQKNAEIQGTKIGSVLDSGISNSFSS - TEYMFPPTSSATVSNPVKKNEISKSSQVKDIAQFNPFMTNEKEKKLNPSESFKSPGVS - MEINRLSRIAGLRNIPGNIYEDSKMLNLKTRKCYPLHNFAVRTRSAHFNDRPSNYISP - HETINATLRSPASFDSIQCITRSKRVDAETNKATGSAKSENIETKSRKFPEVINPFLV - NTTNKKESD" - gene complement(<191030..>193195) - /gene="UTP25" - /locus_tag="YIL091C" - /db_xref="GeneID:854717" - mRNA complement(<191030..>193195) - /gene="UTP25" - /locus_tag="YIL091C" - /product="rRNA-binding ribosome biosynthesis protein - UTP25" - /transcript_id="NM_001179439.1" - /db_xref="GeneID:854717" - CDS complement(191030..193195) - /gene="UTP25" - /locus_tag="YIL091C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095|PMID:14690591|PMID:20528918]" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:14562095|PMID:14690591|PMID:20528918]" - /experiment="EXISTENCE:direct assay:GO:0019843 rRNA - binding [PMID:20528918]" - /experiment="EXISTENCE:direct assay:GO:0032040 - small-subunit processome [PMID:20884785]" - /experiment="EXISTENCE:direct assay:GO:0034511 U3 snoRNA - binding [PMID:20528918]" - /experiment="EXISTENCE:mutant phenotype:GO:0000462 - maturation of SSU-rRNA from tricistronic rRNA transcript - (SSU-rRNA, 5.8S rRNA, LSU-rRNA) - [PMID:20884785|PMID:20528918]" - /experiment="EXISTENCE:mutant phenotype:GO:0042274 - ribosomal small subunit biogenesis - [PMID:20884785|PMID:19806183|PMID:20528918]" - /experiment="EXISTENCE:physical interaction:GO:0032040 - small-subunit processome [PMID:20528918]" - /note="Nucleolar protein; required for 35S pre-RNA - processing and 40S ribosomal subunit biogenesis" - /codon_start=1 - /product="rRNA-binding ribosome biosynthesis protein - UTP25" - /protein_id="NP_012175.1" - /db_xref="GeneID:854717" - /db_xref="SGD:S000001353" - /translation="MSDSSVREKNDNFRGYRKRGRQELRKIKRSSARTEGGSTETLED - VAEDIDHRSDEDEVSDVDSGDDFDIEDEEGKKEKVYDALLTILKSEHPEPKRRRREAD - ESNKAPAEVGEDEHENTEHGPVDDQLEIENGLLGNHEDDNDDDSSGDEKDIDSEDEQD - PFESHFNQVPEKFVDKLSNAFKTKSVKYKSVKGSLSDSESYIYAKPVVIGEEALVESP - YRSSSIYSYFLKQRLKVQNGLLDKKTDPLTALQKKLVDPMFQYKDILYEYDSYEKDED - EYRDLYALHVLNHIYKTRDRILKNNQRLQDNPDTEHLDQGFTRPKVLIVVPTREVAYR - VVDKIISKSGIDQVDKKGKFYDQFRDDSLPPKSKPKSFQHIFRGNTNDFFVVGLKFTR - KAIKLYSNFYQSDIIVCSPLGIQMILENTDKKKRQDDFLSSIELMVIDQLHSIEYQNI - SHIFTIFDHLNKIPDQQHEADFSRIRMWYINEQAKLFRQTMVFTKYISPAANSLINGR - CRNMAGRWKNHKVIGSENSSIGQSGLKIRQIFQRFDIIGNSIIEEPDYRFKFFTSVII - PGIVKSTGYEDGILIYIPDYTDFIRIRNYMKEKTTILFGDINEYSSQRQLNANRSLFQ - QGRLKVMLYTERLHHYRRYEIKGVKSVVFYKPPNNPEFYNEVVRFIGKNAFLGNTDLN - ISTVRCIYSKLDGLSLERIVGTKRAAVLSHAQKEIYEFK" - gene <193595..>195070 - /gene="ICE2" - /locus_tag="YIL090W" - /db_xref="GeneID:854718" - mRNA <193595..>195070 - /gene="ICE2" - /locus_tag="YIL090W" - /product="Ice2p" - /transcript_id="NM_001179438.1" - /db_xref="GeneID:854718" - CDS 193595..195070 - /gene="ICE2" - /locus_tag="YIL090W" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:14562095|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:15585575]" - /experiment="EXISTENCE:direct assay:GO:0032541 cortical - endoplasmic reticulum [PMID:15585575]" - /experiment="EXISTENCE:direct assay:GO:0097038 perinuclear - endoplasmic reticulum [PMID:15585575]" - /experiment="EXISTENCE:genetic interaction:GO:0000921 - septin ring assembly [PMID:17984322]" - /experiment="EXISTENCE:genetic interaction:GO:0004865 - protein serine/threonine phosphatase inhibitor activity - [PMID:34617598]" - /experiment="EXISTENCE:genetic interaction:GO:0160031 - endoplasmic reticulum membrane biogenesis [PMID:34617598]" - /experiment="EXISTENCE:mutant phenotype:GO:0000921 septin - ring assembly [PMID:17984322]" - /experiment="EXISTENCE:mutant phenotype:GO:0004865 protein - serine/threonine phosphatase inhibitor activity - [PMID:34617598]" - /experiment="EXISTENCE:mutant phenotype:GO:0006882 - intracellular zinc ion homeostasis [PMID:22685415]" - /experiment="EXISTENCE:mutant phenotype:GO:0031204 - post-translational protein targeting to membrane, - translocation [PMID:32513868]" - /experiment="EXISTENCE:mutant phenotype:GO:0036228 protein - localization to nuclear inner membrane [PMID:15911569]" - /experiment="EXISTENCE:mutant phenotype:GO:0048309 - endoplasmic reticulum inheritance - [PMID:15585575|PMID:17984322]" - /experiment="EXISTENCE:mutant phenotype:GO:0160031 - endoplasmic reticulum membrane biogenesis [PMID:34617598]" - /note="Integral ER membrane protein with type-III - transmembrane domains; promotes ER membrane expansion by - inhibiting the Nem1-Spo7 phosphatase complex, resulting in - reduced dephosphorylation and activation of Pah1p; - maintains homeostasis during ER stress; required for - post-translational SRP-independent protein translocation - into the ER; necessary for efficient targeting of the - Trm1p to the inner nuclear membrane; mutations cause - defects in cortical ER morphology; member of the SERINC - superfamily" - /codon_start=1 - /product="Ice2p" - /protein_id="NP_012176.1" - /db_xref="GeneID:854718" - /db_xref="SGD:S000001352" - /translation="MTSLSKSFMQSGRICAACFYLLFTLLSIPISFKVGGLECGLSFT - VTLFTLYFITTTLNVLARRHGGRLYIFFTNCLYYSQHFIIASLLYLFLSGFSNDELGN - VLKNKYNESESFLEALKNSLNSNQINYVLYYYYYRFVVQPWQFVLTKSTPFFTLSEGF - FTILAIQAVGETNRWLSNDLNSNTWIISSLLTSGGVITASLYYLYRIYVTPIWPLSIQ - TASLLGLVLSMVCGLGLYGIVSQKGSVIESSLFFAYIVRCIYEISPKLATTATDEILN - LFKDVWQKHQRNLPTADNLLCYFHNVILKNAEVLWGSFIPRGRKKTGDFHDKLISILS - FEKVSLISKPFWKFFKNFTFSVPLSINEFCQVTIKMASESVSPAIVINLCFRVLMFYS - ATRIIPALQRKNDKQLRKSRRIMKGLYWYSPCILIAMYTHLILQYSGELKKDLCIWGC - SEKWFGVDQPEIIVDSWGFWNWCNIFCTILVYATELIGSGS" - gene <195599..>196216 - /locus_tag="YIL089W" - /db_xref="GeneID:854719" - mRNA <195599..>196216 - /locus_tag="YIL089W" - /product="uncharacterized protein" - /transcript_id="NM_001179437.1" - /db_xref="GeneID:854719" - CDS 195599..196216 - /locus_tag="YIL089W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0000328 fungal-type - vacuole lumen [PMID:21777356]" - /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome - [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:21777356]" - /note="hypothetical protein found in the ER and vacuole - lumen; overexpression of YIL089W affects endocytic protein - trafficking" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012177.1" - /db_xref="GeneID:854719" - /db_xref="SGD:S000001351" - /translation="MQRTRELESSVAIDQTEVPRSRFFIMVKKLSRVADIVYIVDTFL - IPPLHPLKKQHPKVAKFLKVQLVFDLISLFIFATHQLLLLEDGNFGKHYFKRKTKRCS - KFSCSRCNANAHHPKWFKFKHSLLCLGTFCFGVYSLVKINKFFKTDQTVDLNRLLELF - FWQLNAILNMKLFAFYGDHLESHSAPLDVYEDSFANKSSSGGDEV" - repeat_region complement(196653..197023) - /note="Ty4 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007015" - repeat_region complement(197140..197488) - /note="Ty1 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007011" - gene 197592..197663 - /locus_tag="YNCI0004W" - /db_xref="GeneID:854720" - tRNA 197592..197663 - /locus_tag="YNCI0004W" - /product="tRNA-Glu" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Glutamate tRNA (tRNA-Glu), predicted by tRNAscan-SE - analysis" - /db_xref="GeneID:854720" - /db_xref="SGD:S000006547" - gene complement(<197931..>199403) - /gene="AVT7" - /locus_tag="YIL088C" - /db_xref="GeneID:854721" - mRNA complement(<197931..>199403) - /gene="AVT7" - /locus_tag="YIL088C" - /product="Avt7p" - /transcript_id="NM_001179436.1" - /db_xref="GeneID:854721" - CDS complement(197931..199403) - /gene="AVT7" - /locus_tag="YIL088C" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:11274162|PMID:26928762|PMID:27246536]" - /experiment="EXISTENCE:direct assay:GO:0005774 vacuolar - membrane [PMID:25266154]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:11274162]" - /experiment="EXISTENCE:mutant phenotype:GO:0006865 amino - acid transport [PMID:25266154]" - /experiment="EXISTENCE:mutant phenotype:GO:0043937 - regulation of sporulation [PMID:25266154]" - /note="Vacuolar amino acid transporter; member of a family - of seven S. cerevisiae genes (AVT1-7) related to vesicular - GABA-glycine transporters" - /codon_start=1 - /product="Avt7p" - /protein_id="NP_012178.1" - /db_xref="GeneID:854721" - /db_xref="SGD:S000001350" - /translation="MEATSSALSSTANLVKTIVGAGTLAIPYSFKSDGVLVGVILTLL - AAVTSGLGLFVLSKCSKTLINPRNSSFFTLCMLTYPTLAPIFDLAMIVQCFGVGLSYL - VLIGDLFPGLFGGERNYWIIASAVIIIPLCLVKKLDQLKYSSILGLFALAYISILVFS - HFVFELGKGELTNILRNDICWWKIHDFKGLLSTFSIIIFAFTGSMNLFPMINELKDNS - MENITFVINNSISLSTALFLIVGLSGYLTFGNETLGNLMLNYDPNSIWIVIGKFCLGS - MLILSFPLLFHPLRIAVNNVIIWIEITYGGANPEEDPQVSEYTRASNLRPISMTVEDP - AQPSDALDATSYNEQECLLPNGNFDNGSIESQENNNDERGTMAVAGDNEHHAPFVKSR - FYWITALLLISMYTLALSVQSFALVLSFVGATGSTSISFTLPGLLGYKLIGLDSLAIG - KMIPPKDRFYKRCSLLLVFYGLSVMFLSLYVTVFNRSDEA" - gene complement(<199646..>200119) - /gene="AIM19" - /locus_tag="YIL087C" - /db_xref="GeneID:854722" - mRNA complement(<199646..>200119) - /gene="AIM19" - /locus_tag="YIL087C" - /product="Aim19p" - /transcript_id="NM_001179435.3" - /db_xref="GeneID:854722" - CDS complement(199646..200119) - /gene="AIM19" - /locus_tag="YIL087C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:physical interaction:GO:0005739 - mitochondrion [PMID:25124039]" - /note="hypothetical protein; mitochondrial protein that - physically interacts with Tim23p; null mutant displays - reduced respiratory growth" - /codon_start=1 - /product="Aim19p" - /protein_id="NP_012179.3" - /db_xref="GeneID:854722" - /db_xref="SGD:S000001349" - /translation="MSAKPATDDAKDELLSPFRRLYALTRTPYPALANAALLASTPVL - SPSFKVPPTQSPALSIPMSRVFSKSSTARIGITTKTALFFSTMQAIGAYMIYDNDLEN - GAGFIATWSALYLIVGGKKSFSALRYGRTWPLVLSSVSLANAVLYGQRFLATGFQ" - gene complement(<200153..>200461) - /locus_tag="YIL086C" - /db_xref="GeneID:854723" - mRNA complement(<200153..>200461) - /locus_tag="YIL086C" - /product="uncharacterized protein" - /transcript_id="NM_001348844.1" - /db_xref="GeneID:854723" - CDS complement(200153..200461) - /locus_tag="YIL086C" - /note="hypothetical protein; conserved across S. - cerevisiae strains" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001335784.1" - /db_xref="GeneID:854723" - /db_xref="SGD:S000001348" - /translation="MNKIIKESTNFSRYLRTGGVLNSLRTTSKFVYINNNSYLTHGGF - DGNVATIFNISEFNYINSSAKGSLLTYKSITFFCPRYFKKRPLGRHAKGKGKSDEKIL - " - gene complement(<200490..>202043) - /gene="KTR7" - /locus_tag="YIL085C" - /db_xref="GeneID:854724" - mRNA complement(<200490..>202043) - /gene="KTR7" - /locus_tag="YIL085C" - /product="putative mannosyltransferase" - /transcript_id="NM_001179433.3" - /db_xref="GeneID:854724" - CDS complement(200490..202043) - /gene="KTR7" - /locus_tag="YIL085C" - /experiment="EXISTENCE:mutant phenotype:GO:0031505 - fungal-type cell wall organization [PMID:9090056]" - /note="Putative mannosyltransferase involved in protein - glycosylation; member of the KRE2/MNT1 mannosyltransferase - family; KTR7 has a paralog, KTR5, that arose from the - whole genome duplication" - /codon_start=1 - /product="putative mannosyltransferase" - /protein_id="NP_012181.3" - /db_xref="GeneID:854724" - /db_xref="SGD:S000001347" - /translation="MAIRLNPKVRRFLLDKCRQKRYGFLFLGCIFAILYCMGTWPFFA - KDIVHDPNNLPYSLQDYSTDKDEPFFRGCTDTKLYLQNPAYSKMNASFVMLTRNEEIE - DVLKTMRSIEGHFNKWFKYPYVFLNDDPFTDHFKDQIQAATNATVEFGTVDEIMWEFP - AKVRNSLQFKASLEDQNDRGIMYGNMESYHKMCRFYSGIFYKHPLVSKYEWYWRIEPD - VDFFCDISYDPFFEMAKHNKKYGFTVLITELYWTVPNLFRTTKSFIKKTAGLKENLGT - LWKLFTFNYNILDTDDEEISRWVNFPWDAKPKLTEKLMVDFLLENHGQVNNEEDLEGI - QYLVERARSKVPMLEDSLEGEDYNLCHFWSNFEIARVDLFDNEIYNAYFKFLEESGGF - WTERWGDAPIHSIGLGMTLDLEDVHYFRDIGYRHSSLQHCPKNALQSQENLNTFDEGY - NFGCGCRCVCPKKGEDIEDHSTPCMDIFFELLHGREYEKEFPGCYKPSIKDKDVIEEI - RRENFRVIE" - gene complement(<202276..>203259) - /gene="SDS3" - /locus_tag="YIL084C" - /db_xref="GeneID:854725" - mRNA complement(<202276..>203259) - /gene="SDS3" - /locus_tag="YIL084C" - /product="Sds3p" - /transcript_id="NM_001179432.1" - /db_xref="GeneID:854725" - CDS complement(202276..203259) - /gene="SDS3" - /locus_tag="YIL084C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0033698 Rpd3L - complex - [PMID:16286007|PMID:16286008|PMID:16314178|PMID:19040720]" - /experiment="EXISTENCE:direct assay:GO:0070210 - Rpd3L-Expanded complex [PMID:19040720]" - /experiment="EXISTENCE:mutant phenotype:GO:0000122 - negative regulation of transcription by RNA polymerase II - [PMID:24358376]" - /experiment="EXISTENCE:mutant phenotype:GO:0004407 histone - deacetylase activity [PMID:11024051]" - /experiment="EXISTENCE:mutant phenotype:GO:0031507 - heterochromatin formation [PMID:11024051]" - /experiment="EXISTENCE:mutant phenotype:GO:0043709 cell - adhesion involved in single-species biofilm formation - [PMID:18202364]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:17210643|PMID:20398213]" - /experiment="EXISTENCE:mutant phenotype:GO:0061186 - negative regulation of silent mating-type cassette - heterochromatin formation [PMID:16286008]" - /experiment="EXISTENCE:mutant phenotype:GO:0061188 - negative regulation of rDNA heterochromatin formation - [PMID:16286008]" - /experiment="EXISTENCE:mutant phenotype:GO:0061408 - positive regulation of transcription from RNA polymerase - II promoter in response to heat stress [PMID:20398213]" - /experiment="EXISTENCE:mutant phenotype:GO:2000217 - regulation of invasive growth in response to glucose - limitation [PMID:18202364]" - /note="Component of the Rpd3L histone deacetylase complex; - required for its structural integrity and catalytic - activity, involved in transcriptional silencing and - required for sporulation; relocalizes to the cytosol in - response to hypoxia; cells defective in SDS3 display - pleiotropic phenotypes" - /codon_start=1 - /product="Sds3p" - /protein_id="NP_012182.1" - /db_xref="GeneID:854725" - /db_xref="SGD:S000001346" - /translation="MAIQKVSNKDLSRKDKRRFNIESKVNKIYQNFYSERDNQYKDRL - TALQTDLTSLHQGDNGQYARQVRDLEEERDLELVRLRLFEEYRVSRSGIEFQEDIEKA - KAEHEKLIKLCKERLYSSIEQKIKKLQEERLLMDVANVHSYAMNYSRPQYQKNTRSHT - VSGWDSSSNEYGRDTANESATDTGAGNDRRTLRRRNASKDTRGNNNNQDESDFQTGNG - SGSNGHGSRQGSQFPHFNNLTYKSGMNSDSDFLQGINEGTDLYAFLFGEKNPKDNANG - NEKKKNRGAQRYSTKTAPPLQSLKPDEVTEDISLIRELTGQPPAPFRLRSD" - gene complement(<203556..>204653) - /gene="CAB2" - /locus_tag="YIL083C" - /db_xref="GeneID:854726" - mRNA complement(<203556..>204653) - /gene="CAB2" - /locus_tag="YIL083C" - /product="phosphopantothenate--cysteine ligase CAB2" - /transcript_id="NM_001179431.2" - /db_xref="GeneID:854726" - CDS complement(203556..204653) - /gene="CAB2" - /locus_tag="YIL083C" - /EC_number="6.3.2.5" - /experiment="EXISTENCE:direct assay:GO:0004632 - phosphopantothenate--cysteine ligase activity - [PMID:30653991]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14690591]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14690591]" - /experiment="EXISTENCE:direct assay:GO:1990143 - CoA-synthesizing protein complex [PMID:23789928]" - /experiment="EXISTENCE:genetic interaction:GO:0015937 - coenzyme A biosynthetic process [PMID:19266201]" - /note="Phosphopantothenoylcysteine synthetase (PPCS); - catalyzes the second step of coenzyme A biosynthesis from - pantothenate; subunit of the CoA-Synthesizing Protein - Complex (CoA-SPC) that contains: Cab2p, Cab3p, Cab4p, - Cab5p, Sis2p and Vhs3p subunits; null mutant lethality is - complemented by human homolog PPCS and by E. coli coaBC, a - bifunctional enzyme with PPCS activity" - /codon_start=1 - /product="phosphopantothenate--cysteine ligase CAB2" - /protein_id="NP_012183.2" - /db_xref="GeneID:854726" - /db_xref="SGD:S000001345" - /translation="MPPLPVLNRPQIHTSVTEISHAIDRTIKEELFPVAYTTEEEQYF - KTNPKPAYIDELIKDAKEFIDLQYSLKRNKIVLITSGGTTVPLENNTVRFIDNFSAGT - RGASSAEQFLANGYSVIFLHREFSLTPYNRSFSHSINTLFLDYIDSEGKIKPEFAENV - LKNKKLYDKYMEKEEKLLLLPFTTVNQYLWSLKSIAKLLNNSGCLFYLAAAVSDFFVP - YSRLPQHKIQSGDNGKMGANNDTEGTTRTTPDGKLIVNLDPVPKFLRRLVESWATQAM - IVSFKLETDESMLLYKCTQALDRYNHQLVIGNLLQTRNKQVIFVSPENRKGDWVRLDE - KHHSIEEMIIPEVIARHDKWVAHSKTKLATK" - mobile_element 205220..210647 - /note="YILWTy3-1; Ty3 element, LTR retrotransposon of the - Gypsy (Metaviridae) group; contains co-transcribed genes - TYA Gag and TYB Pol, encoding proteins involved in - structure and function of virus-like particles, flanked by - two direct repeats; transposition is induced upon exposure - to mating pheromone" - /mobile_element_type="retrotransposon:YILWTy3-1" - /db_xref="SGD:S000007020" - repeat_region 205220..205559 - /note="Ty3 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007017" - gene <205635..>210132 - /locus_tag="YIL082W-A" - /db_xref="GeneID:854728" - mRNA <205635..>210132 - /locus_tag="YIL082W-A" - /product="gag-pol fusion protein" - /transcript_id="NM_001181434.4" - /db_xref="GeneID:854728" - CDS join(205635..206485,206487..210132) - /locus_tag="YIL082W-A" - /EC_number="2.7.7.7" - /EC_number="2.7.7.49" - /EC_number="3.1.26.4" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:9448009]" - /ribosomal_slippage - /note="Retrotransposon TYA Gag and TYB Pol genes; - transcribed/translated as one unit; polyprotein is - processed to make a nucleocapsid-like protein (Gag), - reverse transcriptase (RT), protease (PR), and integrase - (IN); similar to retroviral genes" - /codon_start=1 - /product="gag-pol fusion protein" - /protein_id="NP_012184.1" - /db_xref="GeneID:854728" - /db_xref="SGD:S000003537" - /translation="MSFMDQIPGGGNYPKLPVECLPNFPIQPSLTFRGRNDSHKLKNF - ISEIMLNMSMISWPNDASRIVYCRRHLLNPAAQWANDFVQEQGILEITFDTFIQGLYQ - HFYKPPDINKIFNAITQLSEAKLGIERLNQRFRKIWDRMPPDFMTEKAAIMTYTRLLT - KETYNIVRMHKPETLKDAMEEAYQTTALTERFFPGFELDADGDTIIGATTHLQEEYDS - DYDSEDNLTQNRYVHTVRTRRSYNKPMSNHRNRRNNNASREECIKNRLCFYCKKEGHR - LNECRARKRVLTDLELESKDQQTLFIKTLPIVHYIAIPEMDNTAEKTIKIQNTKVKTL - FDSGSPTSFIRRDIVELLKYEIYETPPLRFRGFVATKSAVTSEAVTIDLKINDLQITL - AAYILDNMDYQLLIGNPILRRYPKILHTVLNTRESPDSLKPKTYRSETVNNVRTYSAG - NRGNPRNIKLSFAPTILEATDPKSAGNRGNPRNTKLSLAPTILEATDPKSAGNRGDSR - TKTLSLATTTPAAIDPLTTLDNPGSTQSTFAQFPIPEEASILEEDGKYSNVVSTIQSV - EPNATDHSNKDTFCTLPVWLQQKYREIIRNDLPPRPADINNIPVKHDIEIKPGARLPR - LQPYHVTEKNEQEINKIVQKLLDNKFIVPSKSPCSSPVVLVPKKDGTFRLCVDYRTLN - KATISDPFPLPRIDNLLSRIGNAQIFTTLDLHSGYHQIPMEPKDRYKTAFVTPSGKYE - YTVMPFGLVNAPSTFARYMADTFRDLRFVNVYLDDILIFSESPEEHWKHLDTVLERLK - NENLIVKKKKCKFASEETEFLGYSIGIQKIAPLQHKCAAIRDFPTPKTVKQAQRFLGM - INYYRRFIPNCSKIAQPIQLFICDKSQWTEKQDKAIEKLKAALCNSPVLVPFNNKANY - RLTTDASKDGIGAVLEEVDNKNKLVGVVGYFSKSLESAQKNYPAGELELLGIIKALHH - FRYMLHGKHFTLRTDHISLLSLQNKNEPARRVQRWLDDLATYDFTLEYLAGPKNVVAD - AISRAIYTITPETSRPIDTESWKSYYKSDPLCSAVLIHMKELTQHNVTPEDMSAFRSY - QKKLELSETFRKNYSLEDEMIYYQDRLVVPIKQQNAVMRLYHDHTLFGGHFGVTVTLA - KISPIYYWPKLQHSIIQYIRTCVQCQLIKSHRPRLHGLLQPLPIAEGRWLDISMDFVT - GLPPTSNNLNMILVVVDRFSKRAHFIATRKTLDATQLIDLLFRYIFSYHGFPRTITSD - RDVRMTADKYQELTKRLGIKSTMSSANHPQTDGQSERTIQTLNRLLRAYVSTNIQNWH - VYLPQIEFVYNSTPTRTLGKSPFEIDLGYLPNTPAIKSDDEVNARSFTAVELAKHLKA - LTIQTKEQLEHAQIEMETNNNQRRKPLLLNIGDHVLVHRDAYFKKGAYMKVQQIYVGP - FRVVKKINDNAYELDLNSHKKKHRVINVQFLKSLYTVQTRTQRINQSAPLRELREHTK - LLHS" - repeat_region 210308..210647 - /note="Ty3 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007018" - gene 210665..210738 - /locus_tag="YNCI0005W" - /db_xref="GeneID:854730" - tRNA 210665..210738 - /locus_tag="YNCI0005W" - /product="tRNA-Ile" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Isoleucine tRNA (tRNA-Ile), predicted by - tRNAscan-SE analysis" - /db_xref="GeneID:854730" - /db_xref="SGD:S000006606" - gene complement(<210923..>212005) - /gene="AIR1" - /locus_tag="YIL079C" - /db_xref="GeneID:854731" - mRNA complement(<210923..>212005) - /gene="AIR1" - /locus_tag="YIL079C" - /product="TRAMP complex RNA-binding subunit" - /transcript_id="NM_001179429.1" - /db_xref="GeneID:854731" - CDS complement(210923..212005) - /gene="AIR1" - /locus_tag="YIL079C" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:11489916]" - /experiment="EXISTENCE:direct assay:GO:0031499 TRAMP - complex [PMID:15828860|PMID:15935759]" - /experiment="EXISTENCE:direct assay:GO:0071038 nuclear - polyadenylation-dependent tRNA catabolic process - [PMID:15828860|PMID:17643380]" - /experiment="EXISTENCE:direct assay:GO:1990817 poly(A) RNA - polymerase activity [PMID:15935759]" - /experiment="EXISTENCE:genetic interaction:GO:0071031 - nuclear mRNA surveillance of mRNA 3'-end processing - [PMID:17410208]" - /experiment="EXISTENCE:genetic interaction:GO:0071035 - nuclear polyadenylation-dependent rRNA catabolic process - [PMID:15935758|PMID:18007593]" - /experiment="EXISTENCE:genetic interaction:GO:0071036 - nuclear polyadenylation-dependent snoRNA catabolic process - [PMID:15935758]" - /experiment="EXISTENCE:genetic interaction:GO:0071037 - nuclear polyadenylation-dependent snRNA catabolic process - [PMID:15935758]" - /experiment="EXISTENCE:genetic interaction:GO:0071039 - nuclear polyadenylation-dependent CUT catabolic process - [PMID:18591258]" - /experiment="EXISTENCE:genetic interaction:GO:1990817 - poly(A) RNA polymerase activity [PMID:15935759]" - /note="Zinc knuckle protein; involved in nuclear RNA - processing and degradation as a component of the TRAMP - complex; stimulates the poly(A) polymerase activity of - Pap2p in vitro; AIR1 has a paralog, AIR2, that arose from - the whole genome duplication; although Air1p and Air2p are - homologous TRAMP subunits, they have nonredundant roles in - regulation of substrate specificity of the exosome" - /codon_start=1 - /product="TRAMP complex RNA-binding subunit" - /protein_id="NP_012186.1" - /db_xref="GeneID:854731" - /db_xref="SGD:S000001341" - /translation="MSTLLSEVESIDTLPYVKDTTPTGSDSSSFNKLLAPSIEDVDAN - PEELRTLRGQGRYFGITDYDSNGAIMEAEPKCNNCSQRGHLKRNCPHVICTYCGFMDD - HYSQHCPKAIICTNCNANGHYKSQCPHKWKKVFCTLCNSKRHSRERCPSIWRSYLLKT - KDANQGDFDFQTVFCYNCGNAGHFGDDCAERRSSRVPNTDGSAFCGDNLATKFKQHYF - NQLKDYKREASQRQHFDNEHEFNLLDYEYNDDAYDLPGSRTYRDKMKWKGKVQSTRNK - NSSNNRYESSNNRKKKSPFSAQNYKVTKNKRVQTHPLDFPRSSQNNRTNDYSSQFSYN - RDDFPKGPKNKRGRSSSNKSQRNGRY" - gene <212499..>214703 - /gene="THS1" - /locus_tag="YIL078W" - /db_xref="GeneID:854732" - mRNA <212499..>214703 - /gene="THS1" - /locus_tag="YIL078W" - /product="threonine--tRNA ligase THS1" - /transcript_id="NM_001179428.3" - /db_xref="GeneID:854732" - CDS 212499..214703 - /gene="THS1" - /locus_tag="YIL078W" - /EC_number="6.1.1.3" - /experiment="EXISTENCE:direct assay:GO:0004829 - threonine-tRNA ligase activity [PMID:8143729]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0006435 - threonyl-tRNA aminoacylation [PMID:8143729]" - /experiment="EXISTENCE:direct assay:GO:1990825 - sequence-specific mRNA binding [PMID:34039240]" - /experiment="EXISTENCE:mutant phenotype:GO:0005737 - cytoplasm [PMID:2995918]" - /note="Threonyl-tRNA synthetase involved in tRNA - aminoacylation; mRNA binding protein that preferentially - binds to the mRNA of RNAPI subunits and DNA binding - proteins; binds to an anticodon stem loop-like structure - in RPC10 and impacts its translation; cytoplasmic protein; - human homolog TARS can complement a yeast null mutant" - /codon_start=1 - /product="threonine--tRNA ligase THS1" - /protein_id="NP_116578.3" - /db_xref="GeneID:854732" - /db_xref="SGD:S000001340" - /translation="MSASEAGVTEQVKKLSVKDSSNDAVKPNKKENKKSKQQSLYLDP - EPTFIEERIEMFDRLQKEYNDKVASMPRVPLKIVLKDGAVKEATSWETTPMDIAKGIS - KSLADRLCISKVNGQLWDLDRPFEGEANEEIKLELLDFESDEGKKVFWHSSAHVLGES - CECHLGAHICLGPPTDDGFFYEMAVRDSMKDISESPERTVSQADFPGLEGVAKNVIKQ - KQKFERLVMSKEDLLKMFHYSKYKTYLVQTKVPDGGATTVYRCGKLIDLCVGPHIPHT - GRIKAFKLLKNSSCYFLGDATNDSLQRVYGISFPDKKLMDAHLKFLAEASMRDHRKIG - KEQELFLFNEMSPGSCFWLPHGTRIYNTLVDLLRTEYRKRGYEEVITPNMYNSKLWET - SGHWANYKENMFTFEVEKETFGLKPMNCPGHCLMFKSRERSYRELPWRVADFGVIHRN - EFSGALSGLTRVRRFQQDDAHIFCTHDQIESEIENIFNFLQYIYGVFGFEFKMELSTR - PEKYVGKIETWDAAESKLESALKKWGGNWEINAGDGAFYGPKIDIMISDALRRWHQCA - TIQLDFQLPNRFELEFKSKDQDSESYERPVMIHRAILGSVERMTAILTEHFAGKWPFW - LSPRQVLVVPVGVKYQGYAEDVRNKLHDAGFYADVDLTGNTLQKKVRNGQMLKYNFIF - IVGEQEMNEKSVNIRNRDVMEQQGKNATVSVEEVLKQLRNLKDEKRGDNVLA" - rep_origin 214624..214754 - /note="ARS901; Autonomously Replicating Sequence" - /db_xref="SGD:S000007644" - gene complement(<214991..>215953) - /gene="RCI37" - /locus_tag="YIL077C" - /gene_synonym="MRX17" - /db_xref="GeneID:854733" - mRNA complement(<214991..>215953) - /gene="RCI37" - /locus_tag="YIL077C" - /gene_synonym="MRX17" - /product="Rci37p" - /transcript_id="NM_001179427.3" - /db_xref="GeneID:854733" - CDS complement(214991..215953) - /gene="RCI37" - /locus_tag="YIL077C" - /gene_synonym="MRX17" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14562095|PMID:16823961]" - /note="Protein that associates with the large - mitoribosomal subunit; the authentic, non-tagged protein - is detected in highly purified mitochondria in - high-throughput studies; deletion confers sensitivity to - 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO)" - /codon_start=1 - /product="Rci37p" - /protein_id="NP_012188.3" - /db_xref="GeneID:854733" - /db_xref="SGD:S000001339" - /translation="MLGKEEEQQYGQNGKGMENELPFMKRPWFKKAYENAIEFHEKDE - LLDARDRLELSKAYRSIAKAEMWGGWLGFSAVFLTPFAYRYYKTKAIKGVKVPRNFVL - GVMALFFATNFAGRSMYTRQLNERDPTGVLKDNYSNKYGDNDFGAFQHDQTKEIPRNQ - RQYNMMRLLDSGSPSRWSMYFYITYQNPERRLPDPKVKLQQMKKGGVFNGSPFMNQRD - PIGLYRNKGRKSPDPIEGEQNDSPVLSSWEKIRNGDNSSSSSWENIRNTSRDQSQESD - ASVDHESDIFISGFSDDGNATDNSSSDDKYQRLLQSGRYGGNRS" - gene <216658..>217548 - /gene="SEC28" - /locus_tag="YIL076W" - /gene_synonym="ANU2" - /db_xref="GeneID:854734" - mRNA <216658..>217548 - /gene="SEC28" - /locus_tag="YIL076W" - /gene_synonym="ANU2" - /product="coatomer subunit epsilon" - /transcript_id="NM_001179426.1" - /db_xref="GeneID:854734" - CDS 216658..217548 - /gene="SEC28" - /locus_tag="YIL076W" - /gene_synonym="ANU2" - /experiment="EXISTENCE:direct assay:GO:0005768 endosome - [PMID:17101773]" - /experiment="EXISTENCE:direct assay:GO:0030126 COPI - vesicle coat [PMID:21435344]" - /experiment="EXISTENCE:direct assay:GO:1990841 - promoter-specific chromatin binding [PMID:27184763]" - /experiment="EXISTENCE:mutant phenotype:GO:0006888 - endoplasmic reticulum to Golgi vesicle-mediated transport - [PMID:10532354]" - /experiment="EXISTENCE:mutant phenotype:GO:0006901 vesicle - coating [PMID:9463377]" - /experiment="EXISTENCE:mutant phenotype:GO:0030126 COPI - vesicle coat [PMID:9463377]" - /experiment="EXISTENCE:mutant phenotype:GO:0032511 late - endosome to vacuole transport via multivesicular body - sorting pathway [PMID:17101773]" - /experiment="EXISTENCE:physical interaction:GO:0032511 - late endosome to vacuole transport via multivesicular body - sorting pathway [PMID:17101773]" - /note="Epsilon-COP subunit of the coatomer; regulates - retrograde Golgi-to-ER protein traffic; stabilizes Cop1p, - the alpha-COP and the coatomer complex; non-essential for - cell growth; protein abundance increases in response to - DNA replication stress" - /codon_start=1 - /product="coatomer subunit epsilon" - /protein_id="NP_012189.2" - /db_xref="GeneID:854734" - /db_xref="SGD:S000001338" - /translation="MDYFNIKQNYYTGNFVQCLQEIEKFSKVTDNTLLFYKAKTLLAL - GQYQSQDPTSKLGKVLDLYVQFLDTKNIEELENLLKDKQNSPYELYLLATAQAILGDL - DKSLETCVEGIDNDEAEGTTELLLLAIEVALLNNNVSTASTIFDNYTNAIEDTVSGDN - EMILNLAESYIKFATNKETATSNFYYYEELSQTFPTWKTQLGLLNLHLQQRNIAEAQG - IVELLLSDYYSVEQKENAVLYKPTFLANQITLALMQGLDTEDLTNQLVKLDHEHAFIK - HHQEIDAKFDELVRKYDTSN" - gene complement(<217863..>220700) - /gene="RPN2" - /locus_tag="YIL075C" - /gene_synonym="SEN3" - /db_xref="GeneID:854735" - mRNA complement(<217863..>220700) - /gene="RPN2" - /locus_tag="YIL075C" - /gene_synonym="SEN3" - /product="proteasome regulatory particle base subunit - RPN2" - /transcript_id="NM_001179425.1" - /db_xref="GeneID:854735" - CDS complement(217863..220700) - /gene="RPN2" - /locus_tag="YIL075C" - /gene_synonym="SEN3" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:15210724|PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0008540 proteasome - regulatory particle, base subcomplex [PMID:9741626]" - /experiment="EXISTENCE:direct assay:GO:0034515 proteasome - storage granule [PMID:18504300]" - /experiment="EXISTENCE:genetic interaction:GO:0043248 - proteasome assembly [PMID:17911101]" - /experiment="EXISTENCE:mutant phenotype:GO:0004175 - endopeptidase activity [PMID:7565784]" - /experiment="EXISTENCE:mutant phenotype:GO:0006511 - ubiquitin-dependent protein catabolic process - [PMID:7565784]" - /experiment="EXISTENCE:physical interaction:GO:0031625 - ubiquitin protein ligase binding [PMID:10688918]" - /note="Subunit of the 26S proteasome; substrate of the - N-acetyltransferase Nat1p; protein abundance increases in - response to DNA replication stress" - /codon_start=1 - /product="proteasome regulatory particle base subunit - RPN2" - /protein_id="NP_012190.1" - /db_xref="GeneID:854735" - /db_xref="SGD:S000001337" - /translation="MSLTTAAPLLALLRENQDSVKTYALESINNVVDQLWSEISNELP - DIEALYDDDTFSDREMAALIASKVYYNLGEYESAVKYALAAKDRFDIDEKSQFVETIV - SKSIEMYVQEASKQYTKDEQFYTKDIIDPKLTSIFERMIEKCLKASELKLALGIALEG - YRLDIIESALKSKLDQDSTSENVKIINYLLTLAITTVTNSKFRSSILRKSFDFLMNMP - NCDYLTLNKVVVNLNDAGLALQLFKKLKEENDEGLSAQIAFDLVSSASQQLLEILVTE - LTAQGYDPALLNILSGLPTCDYYNTFLLNNKNIDIGLLNKSKSSLDGKFSLFHTAVSV - ANGFMHAGTTDNSFIKANLPWLGKAQNWAKFTATASLGVIHKGNLLEGKKVMAPYLPG - SRASSRFIKGGSLYGLGLIYAGFGRDTTDYLKNIIVENSGTSGDEDVDVLLHGASLGI - GLAAMGSANIEVYEALKEVLYNDSATSGEAAALGMGLCMLGTGKPEAIHDMFTYSQET - QHGNITRGLAVGLALINYGRQELADDLITKMLASDESLLRYGGAFTIALAYAGTGNNS - AVKRLLHVAVSDSNDDVRRAAVIALGFVLLRDYTTVPRIVQLLSKSHNAHVRCGTAFA - LGIACAGKGLQSAIDVLDPLTKDPVDFVRQAAMIALSMILIQQTEKLNPQVADINKNF - LSVITNKHQEGLAKFGACVAQGIMNAGGRNVTIQLENADTGTLDTKSVVGLVMFSQFW - YWFPLAHFLSLSFTPTTVIGIRGSDQAIPKFQMNCYAKEDAFSYPRMYEEASGKEVEK - VATAVLSTTARAKARAKKTKKEKGPNEEEKKKEHEEKEKERETNKKGIKETKENDEEF - YKNKYSSKPYKVDNMTRILPQQSRYISFIKDDRFVPVRKFKGNNGVVVLRDREPKEPV - ALIETVRQMKDVNAPLPTPFKVDDNVDFPSA" - gene complement(<221081..>222490) - /gene="SER33" - /locus_tag="YIL074C" - /db_xref="GeneID:854736" - mRNA complement(<221081..>222490) - /gene="SER33" - /locus_tag="YIL074C" - /product="phosphoglycerate dehydrogenase SER33" - /transcript_id="NM_001179424.1" - /db_xref="GeneID:854736" - CDS complement(221081..222490) - /gene="SER33" - /locus_tag="YIL074C" - /EC_number="1.1.1.95" - /EC_number="1.1.1.399" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0061759 - alpha-ketoglutarate reductase activity [PMID:26774271]" - /experiment="EXISTENCE:genetic interaction:GO:0061759 - alpha-ketoglutarate reductase activity [PMID:26774271]" - /experiment="EXISTENCE:mutant phenotype:GO:0004617 - phosphoglycerate dehydrogenase activity [PMID:12525494]" - /experiment="EXISTENCE:mutant phenotype:GO:0009070 serine - family amino acid biosynthetic process [PMID:12525494]" - /experiment="EXISTENCE:mutant phenotype:GO:0061759 - alpha-ketoglutarate reductase activity [PMID:26774271]" - /note="3-phosphoglycerate dehydrogenase and - alpha-ketoglutarate reductase; 3PG dehydrogenase that - catalyzes the first step in serine and glycine - biosynthesis; also functions as an alpha-ketoglutarate - reductase, converting alpha-ketoglutarate to - D-2-hydroxyglutarate (D-2HG); localizes to the cytoplasm; - SER33 has a paralog, SER3, that arose from the whole - genome duplication" - /codon_start=1 - /product="phosphoglycerate dehydrogenase SER33" - /protein_id="NP_012191.1" - /db_xref="GeneID:854736" - /db_xref="SGD:S000001336" - /translation="MSYSAADNLQDSFQRAMNFSGSPGAVSTSPTQSFMNTLPRRVSI - TKQPKALKPFSTGDMNILLLENVNATAIKIFKDQGYQVEFHKSSLPEDELIEKIKDVH - AIGIRSKTRLTEKILQHARNLVCIGCFCIGTNQVDLKYAASKGIAVFNSPFSNSRSVA - ELVIGEIISLARQLGDRSIELHTGTWNKVAARCWEVRGKTLGIIGYGHIGSQLSVLAE - AMGLHVLYYDIVTIMALGTARQVSTLDELLNKSDFVTLHVPATPETEKMLSAPQFAAM - KDGAYVINASRGTVVDIPSLIQAVKANKIAGAALDVYPHEPAKNGEGSFNDELNSWTS - ELVSLPNIILTPHIGGSTEEAQSSIGIEVATALSKYINEGNSVGSVNFPEVSLKSLDY - DQENTVRVLYIHRNVPGVLKTVNDILSDHNIEKQFSDSHGEIAYLMADISSVNQSEIK - DIYEKLNQTSAKVSIRLLY" - gene complement(<222937..>225954) - /gene="SPO22" - /locus_tag="YIL073C" - /gene_synonym="ZIP4" - /db_xref="GeneID:854737" - mRNA complement(join(<222937..225809,225900..>225954)) - /gene="SPO22" - /locus_tag="YIL073C" - /gene_synonym="ZIP4" - /product="Spo22p" - /transcript_id="NM_001179423.1" - /db_xref="GeneID:854737" - CDS complement(join(222937..225809,225900..225954)) - /gene="SPO22" - /locus_tag="YIL073C" - /gene_synonym="ZIP4" - /experiment="EXISTENCE:direct assay:GO:0000794 condensed - nuclear chromosome [PMID:16740482]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:24390141]" - /experiment="EXISTENCE:mutant phenotype:GO:0033235 - positive regulation of protein sumoylation - [PMID:23326245]" - /experiment="EXISTENCE:mutant phenotype:GO:0090173 - regulation of synaptonemal complex assembly - [PMID:16740482]" - /note="Meiosis-specific protein essential for chromosome - synapsis; involved in completion of nuclear divisions - during meiosis; induced early in meiosis" - /codon_start=1 - /product="Spo22p" - /protein_id="NP_012192.2" - /db_xref="GeneID:854737" - /db_xref="SGD:S000001335" - /translation="MSDHNVNSTFRKTLVELCETATWITSQVYAAKNLEKNDLITVDN - KISALYPIAEKYDRSFRTTTVILDEELILKLENAASSLWNSLTIAMKAEKASDKYFNE - VFCKCKIFATKLLSIHEALFRTNTNLLRNFKCYISSFKSASEYRFDDLITNTQQHSEK - YLQIINENVESFSNEEKTEFKKLTFEFYLVNFQLYLSENDLDTANIYTAKVNITDNSK - YMDADLLIELCRMIYNSTVMLKEINNPETQLVDVNIISFLKDVEKYLELPVENLKSHT - DYSNLKYSVLIFMANCLVEGHPQASELEQCDHYLSLLQNEYPNKVDPFILAINLTKRR - NIVNPAETIEEILMRMIMSVDVISNFQAVIASINDLSKMNTKFSIVCLDYLLINKLNS - KNDSKFLGKAICSRFLITTQSKTMNDSEIAESLENFSTQMERIVSEPLTKHAISCIIT - LLWNTGKKLEKMEKYVVSIRFYKLALKDIISQNYSDRGKIQRALQVVYNKIEDYSNTV - RVYQDMDEVDRQSPLCQLLMLQSFLADDKTEEALTCLQKIKSSEDEKSTDALILAVAE - CKRKTDLSVQGLLMIFDKLQSKSNSQTISSTSSSQTLSILRYTLQMIVKVSEEEPLET - FINYLPTVQKLLQKAVEFLKTVKLLNQLPPDVEKEAIYQQSVAVNEIEWFASFSYNVA - VKCLVDQSCESISEFPQYCIQFIDLIPVQDFTFPKMYHFTYWRFKATILQLIIAKEKA - KQDQHQKDWDIYEKSEELVNSINVMKKSSEFKDGSSLEDRNTLHECFLEALTIHLESA - LMMPDQTRILDILKKTELYQDSRVDALLIDISSNMEDLPKGVLIEILETVLKRNMGPE - VKERELCSWLRILLENAINLNHEVELRILDRVLKILNINQSSLQDTDGVLQTELETIA - TYCWNIGVNYIIKDNKSNGIVWCKHSMGFANMVNEGLQEQLYSLWESLASSANIDINS - IAK" - gene <226602..>228419 - /gene="HOP1" - /locus_tag="YIL072W" - /db_xref="GeneID:854738" - mRNA <226602..>228419 - /gene="HOP1" - /locus_tag="YIL072W" - /product="Hop1p" - /transcript_id="NM_001179422.3" - /db_xref="GeneID:854738" - CDS 226602..228419 - /gene="HOP1" - /locus_tag="YIL072W" - /experiment="EXISTENCE:direct assay:GO:0000400 four-way - junction DNA binding [PMID:17027027]" - /experiment="EXISTENCE:direct assay:GO:0000794 condensed - nuclear chromosome [PMID:2107981]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:23841450|PMID:24390141]" - /experiment="EXISTENCE:genetic interaction:GO:0051598 - meiotic recombination checkpoint signaling - [PMID:10848609]" - /experiment="EXISTENCE:mutant phenotype:GO:0007129 - homologous chromosome pairing at meiosis - [PMID:2107981|PMID:8207053]" - /experiment="EXISTENCE:mutant phenotype:GO:0007130 - synaptonemal complex assembly [PMID:2653960]" - /experiment="EXISTENCE:physical interaction:GO:0000800 - lateral element [PMID:9060462]" - /note="Meiosis-specific protein required for chromosome - synapsis; displays Red1p dependent localization to the - unsynapsed axial-lateral elements of the synaptonemal - complex; required for chiasma formation; in vitro, - displays the ability to promote intra- and intermolecular - synapsis between double-stranded DNA molecules and to fold - DNA into rigid protein-DNA filaments" - /codon_start=1 - /product="Hop1p" - /protein_id="NP_012193.3" - /db_xref="GeneID:854738" - /db_xref="SGD:S000001334" - /translation="MSNKQLVKPKTETKTEITTEQSQKLLQTMLTMSFGCLAFLRGLF - PDDIFVDQRFVPEKVEKNYNKQNTSQNNSIKIKTLIRGKSAQADLLLDWLEKGVFKSI - RLKCLKALSLGIFLEDPTDLLENYIFSFDYDEENNVNINVNLSGNKKGSKNADPENET - ISLLDSRRMVQQLMRRFIIITQSLEPLPQKKFLTMRLMFNDNVDEDYQPELFKDATFD - KRATLKVPTNLDNDAIDVGTLNTKHHKVALSVLSAATSSMEKAGNTNFIRVDPFDLIL - QQQEENKLEESVPTKPQNFVTSQTTNVLGNLLNSSQASIQPTQFVSNNPVTGICSCEC - GLEVPKAATVLKTCKSCRKTLHGICYGNFLHSSIEKCFTCIFGPSLDTKWSKFQDLMM - IRKVFRFLVRKKKGFPASITELIDSFINVEDQNNEVKERVAFALFVFFLDETLCLDNG - GKPSQTIRYVTSSVLVDVKGIVIPNTRKQLNVNHEYKWHFTTSSPKAESFYQEVLPNS - RKQVESWLQDITNLRKVYSEALSPSSTLQELDLNSSLPTQDPIISGQKRRRYDLDEYL - EEDKSSVVNDTIKAKDFDESVPAKIRKISVSKKTLKSNW" - gene complement(<228660..>229994) - /gene="PCI8" - /locus_tag="YIL071C" - /gene_synonym="CSN11; YIH1; YIL071W" - /db_xref="GeneID:854739" - mRNA complement(<228660..>229994) - /gene="PCI8" - /locus_tag="YIL071C" - /gene_synonym="CSN11; YIH1; YIL071W" - /product="Pci8p" - /transcript_id="NM_001179421.3" - /db_xref="GeneID:854739" - CDS complement(228660..229994) - /gene="PCI8" - /locus_tag="YIL071C" - /gene_synonym="CSN11; YIH1; YIL071W" - /experiment="EXISTENCE:direct assay:GO:0008180 COP9 - signalosome [PMID:12446563]" - /experiment="EXISTENCE:mutant phenotype:GO:0000338 protein - deneddylation [PMID:12186635|PMID:12446563]" - /note="Possible shared subunit of Cop9 signalosome (CSN) - and eIF3; binds eIF3b subunit Prt1p, has possible dual - functions in transcriptional and translational control, - contains a PCI (Proteasome-COP9 signalosome (CSN)-eIF3) - domain" - /codon_start=1 - /product="Pci8p" - /protein_id="NP_085069.3" - /db_xref="GeneID:854739" - /db_xref="SGD:S000001333" - /translation="MFHGAKGPLLIERIGHLLSINYGEKEERKRWAMQGISYLQEVQC - TSTPYLEILVEESGLRPVSLLNSQLVGKPHFSLLGGFDENIARDIISHNFQNAIFQME - SEEVPLTKRYQHLEKITQISLLCKNFKGIEEIEYNVKNIIQGRKNFDMLNSMEKDRIS - HEVVQDDSFSLLRIQMLLCVSYFLQERYFDCCTKFFTMMTSEPLTLKVLSEHLDCMNF - ISKEEFIMMVNISVLISIPLDNYDDFIYLSDLKQFFQMTPLLVNCLELLINTNFNKFF - KIWHGEINKICMESLFLEPSWSSSAAVIMRCKIYFFYLRISKKLQFSYLSSTLGIDLE - DIKEELTKLIISGQLNFEIDGDVIHFEDSSILQSIVNEISRNGTMINEVIDKLKNENT - DLKDIIQGNPLMYSGGNNTATIINNESSDDMDIDEVNDRSDISDSEGGLFEC" - gene complement(<230272..>231072) - /gene="MAM33" - /locus_tag="YIL070C" - /db_xref="GeneID:854740" - mRNA complement(<230272..>231072) - /gene="MAM33" - /locus_tag="YIL070C" - /product="Mam33p" - /transcript_id="NM_001179420.1" - /db_xref="GeneID:854740" - CDS complement(230272..231072) - /gene="MAM33" - /locus_tag="YIL070C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005759 - mitochondrial matrix [PMID:9305894]" - /experiment="EXISTENCE:direct assay:GO:0097177 - mitochondrial ribosome binding [PMID:31053642]" - /experiment="EXISTENCE:mutant phenotype:GO:0009060 aerobic - respiration [PMID:9305894]" - /experiment="EXISTENCE:mutant phenotype:GO:0061668 - mitochondrial ribosome assembly [PMID:31053642]" - /note="Acidic protein of the mitochondrial matrix; binds - unassembled large subunit proteins during ribosome - assembly; subunit of a complex containing Mrx6p, Pim1p, - and Pet20p that may regulate mtDNA replication; related to - the human complement receptor gC1q-R" - /codon_start=1 - /product="Mam33p" - /protein_id="NP_012194.1" - /db_xref="GeneID:854740" - /db_xref="SGD:S000001332" - /translation="MFLRSVNRAVTRSILTTPKPAVVKSSWRVFTVANSKRCFTPAAI - MRNQETQRVGDILQSELKIEKETLPESTSLDSFNDFLNKYKFSLVETPGKNEAEIVRR - TESGETVHVFFDVAQIANLPYNNAMDENTEQNEDGINEDDFDALSDNFANVNVVISKE - SASEPAVSFELLMNLQEGSFYVDSATPYPSVDAALNQSAEAEITRELVYHGPPFSNLD - EELQESLEAYLESRGVNEELASFISAYSEFKENNEYISWLEKMKKFFH" - gene complement(<231553..>232369) - /gene="RPS24B" - /locus_tag="YIL069C" - /gene_synonym="RPS24EB" - /db_xref="GeneID:854741" - mRNA complement(join(<231553..231957,232367..>232369)) - /gene="RPS24B" - /locus_tag="YIL069C" - /gene_synonym="RPS24EB" - /product="ribosomal 40S subunit protein S24B" - /transcript_id="NM_001179419.1" - /db_xref="GeneID:854741" - CDS complement(join(231553..231957,232367..232369)) - /gene="RPS24B" - /locus_tag="YIL069C" - /gene_synonym="RPS24EB" - /experiment="EXISTENCE:genetic interaction:GO:0000462 - maturation of SSU-rRNA from tricistronic rRNA transcript - (SSU-rRNA, 5.8S rRNA, LSU-rRNA) [PMID:16246728]" - /note="Protein component of the small (40S) ribosomal - subunit; homologous to mammalian ribosomal protein S24, no - bacterial homolog; RPS24B has a paralog, RPS24A, that - arose from the whole genome duplication" - /codon_start=1 - /product="ribosomal 40S subunit protein S24B" - /protein_id="NP_012195.1" - /db_xref="GeneID:854741" - /db_xref="SGD:S000001331" - /translation="MSDAVTIRTRKVISNPLLARKQFVVDVLHPNRANVSKDELREKL - AEVYKAEKDAVSVFGFRTQFGGGKSVGFGLVYNSVAEAKKFEPTYRLVRYGLAEKVEK - ASRQQRKQKKNRDKKIFGTGKRLAKKVARRNAD" - gene complement(<233057..>235474) - /gene="SEC6" - /locus_tag="YIL068C" - /db_xref="GeneID:854742" - mRNA complement(<233057..>235474) - /gene="SEC6" - /locus_tag="YIL068C" - /product="SNARE-binding exocyst subunit SEC6" - /transcript_id="NM_001179418.1" - /db_xref="GeneID:854742" - CDS complement(233057..235474) - /gene="SEC6" - /locus_tag="YIL068C" - /experiment="EXISTENCE:direct assay:GO:0000145 exocyst - [PMID:7615633|PMID:8978675]" - /experiment="EXISTENCE:direct assay:GO:0000149 SNARE - binding [PMID:15835919|PMID:22114349]" - /experiment="EXISTENCE:direct assay:GO:0005628 prospore - membrane [PMID:24390141]" - /experiment="EXISTENCE:direct assay:GO:0005934 cellular - bud tip [PMID:19073882]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:19073882|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0035544 negative - regulation of SNARE complex assembly - [PMID:15835919|PMID:22114349]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:19053807]" - /experiment="EXISTENCE:genetic interaction:GO:0006893 - Golgi to plasma membrane transport [PMID:7026045]" - /experiment="EXISTENCE:genetic interaction:GO:0035544 - negative regulation of SNARE complex assembly - [PMID:22114349]" - /experiment="EXISTENCE:mutant phenotype:GO:0006887 - exocytosis [PMID:6996832]" - /experiment="EXISTENCE:mutant phenotype:GO:0006893 Golgi - to plasma membrane transport [PMID:7026045]" - /experiment="EXISTENCE:mutant phenotype:GO:0051601 exocyst - localization [PMID:19073882]" - /experiment="EXISTENCE:physical interaction:GO:0000149 - SNARE binding [PMID:15835919|PMID:22114349]" - /experiment="EXISTENCE:physical interaction:GO:0035544 - negative regulation of SNARE complex assembly - [PMID:15835919|PMID:22114349]" - /note="Essential 88kDa subunit of the exocyst complex; the - exocyst mediates polarized targeting and tethering of - post-Golgi secretory vesicles to active sites of - exocytosis at the plasma membrane prior to SNARE-mediated - fusion; anchors the assembled complex to sites of - secretion; interacts with SM-like protein and SNARE - regulator Sec1p and may recruit it to sites of secretion; - binds to SNARE complexes binteracting with Sec9p" - /codon_start=1 - /product="SNARE-binding exocyst subunit SEC6" - /protein_id="NP_012196.1" - /db_xref="GeneID:854742" - /db_xref="SGD:S000001330" - /translation="MSSDPLQQVCDLIKGDLSLERVRDIKEQLLKEKSVVEYQLNKES - DKYYGEVEESLKLLNLSKNSVTSIKQQINEVNKLGNDNRFAINRYDILFRATKLYETV - NTTSSIYDRIYNFVALMEHIERLLVAELAEDALETGCPHLLEIHFLLTSARDFQEQVV - VMAKEATEDAQRTVMKLFSRLSGIISKFDKLLDGLTYDIVEMARAEQISLAIRLFKIY - DLEEREDLRIEAIRNIIKKKEIEIEKSSIKKLPNSKNTARLQDETPKVIEYPTNKGLY - QEIMSGTISTRTAPRGYKHFLINGINNSISEMFGEMREKYVGDQKFDVLDNMDWIFNE - LIIVKEHIANCCPPHWNIFEVYFDQYYKELHSLITDLVESEPETIIILDILAFDKTFQ - DTLKQDFGFTKSEVKSVIGDKEKETLFKDYLNLIVVKMTEWIGNLEKAEFDVFLERST - PPHSDSDGLLFLDGTKTCFQMFTQQVEVAAGTNQAKILVGVVERFSDLLTKRQKNWIS - KISEEIKKQINYNHKYDIDPESITPEDECPGGLVEYLIAVSNDQMKAADYAVAISSKY - GKLVSKVYEKQITNHLEGTLDGFAEVAQCSSLGLITLMFDDLRKPYQEIFSKTWYMGS - QAQQIADTLDEYLLDIKPQMNSVLFVNFIDNVIGETIIKFLTALSFEHSFKNKNNKFL - EAMKRDFEIFYQLFVKVLDGNESKDTLITQNFTVMEFFMDLSCEPIDSILDIWQKYLE - VYWDSRIDLLVGILKCRKDVSSSERKKIVQQATEMLHEYRRNMEANGVDREPTLMRRF - VLEFEKQ" - gene complement(<235724..>237760) - /locus_tag="YIL067C" - /db_xref="GeneID:854743" - mRNA complement(<235724..>237760) - /locus_tag="YIL067C" - /product="uncharacterized protein" - /transcript_id="NM_001179417.1" - /db_xref="GeneID:854743" - CDS complement(235724..237760) - /locus_tag="YIL067C" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:14562095]" - /note="Uncharacterized hypothetical protein" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012197.1" - /db_xref="GeneID:854743" - /db_xref="SGD:S000001329" - /translation="MGVHFDDNANTTWEATDPGVSSDCDGQHRVTESIQLQNFSNTDM - ESMLDEEGRENSKSKWLLLKRKHPIQKFIERVWNGPVEPSDEPPSFPKRWGWLKKIDD - FPQTTFKTKIPSKLIRLLLLIVYCCFWMRIFYSLIYPYLIKPPYFHPNDGSEKIPILS - LSCNSYLNWEGTNNECGLNAKNCGPLDNKEYMIRCPALCDRGGWTYSAIAVGNRRVKY - TGYEIGGGALFSEEDPMVVSYPYRSDSFPCASAVHAGVISPFYGGCTKVSMQGAQNSF - PSKKGMYNTGFSVAFNSFFPGSYSFRDIQGGILSGCYDPRAAVVALNMLFGLPIFYLY - DSIYGYWINTIVGYWTLVLSLDPPLLTDAHDPASVYELFSVGFQRLLPLCFVLYVVWK - SAVKRTLENGSPIAKVILWYPTFWLGISNNVTFDRLPVDRLTTTDLKEQAGALTAVGS - IAATILTCAVIQAYSLWKSGRFKKYFKIYICFIGGLIALGSLPGLNLRIHHYILGSIL - VPGCATRGSSAYLFQGILVGLILSGVARWDFASIVETDTALLRGEAGASLKPPILDFN - DDQNHSLSWHLNATDPVIDQIGNIDGFSLLLNDVEVYVGKNETVSIDVLRMENPALAQ - MMDDALDASNGTIDLYLRVARASVRSPTNRGDYTNAGVLQWPNGMWQKPEPGVS" - gene complement(<238099..>240708) - /gene="RNR3" - /locus_tag="YIL066C" - /gene_synonym="DIN1; RIR3" - /db_xref="GeneID:854744" - mRNA complement(<238099..>240708) - /gene="RNR3" - /locus_tag="YIL066C" - /gene_synonym="DIN1; RIR3" - /product="ribonucleotide-diphosphate reductase subunit - RNR3" - /transcript_id="NM_001179416.3" - /db_xref="GeneID:854744" - CDS complement(238099..240708) - /gene="RNR3" - /locus_tag="YIL066C" - /gene_synonym="DIN1; RIR3" - /EC_number="1.17.4.1" - /experiment="EXISTENCE:direct assay:GO:0004748 - ribonucleoside-diphosphate reductase activity, thioredoxin - disulfide as acceptor [PMID:11893751]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:12732713]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0009263 - deoxyribonucleotide biosynthetic process [PMID:5459124]" - /note="Minor isoform of large subunit of - ribonucleotide-diphosphate reductase; the RNR complex - catalyzes rate-limiting step in dNTP synthesis, regulated - by DNA replication and DNA damage checkpoint pathways via - localization of small subunits; RNR3 has a paralog, RNR1, - that arose from the whole genome duplication" - /codon_start=1 - /product="ribonucleotide-diphosphate reductase subunit - RNR3" - /protein_id="NP_012198.3" - /db_xref="GeneID:854744" - /db_xref="SGD:S000001328" - /translation="MYVIKRDGRKEPVQFDKITSRITRLSYGLDPNRIDAVKVTQRII - SGVYSGVTTVELDNLAAETCAYMTTVHPDYATLAARIAISNLHKQTTKQFSKVIEDLH - DWINPATGKHAPMISDEIYNIVMENKDTLNSAIVYDRDFQYTYFGFKTLERSYLLRLN - GEVAERPQHLVMRVALGIHGSDIESVLKTYNLMSLRYFTHASPTLFNAGTPHPQMSSC - FLIAMKDDSIEGIYDTLKECAMISKTAGGVGLHINNIRSTGSYIAGTNGTSNGLIPMI - RVFNNTARYVDQGGNKRPGAFALFLEPWHADIFDFVDIRKTHGKEEIRARDLFPALWI - PDLFMKRVQEDGPWTLFSPSAAPGLDDVWGDEFEELYTRYEREGRGKTIKAQKLWYAI - LQAQTETGTPFMVYKDACNRKTNQQNLGTIKSSNLCCEIVEYSSPDETAVCNLASIAL - PAFVEVSEDGKTASYNFERLHEIAKVITHNLNRVIDRNYYPVPEARNSNMKHRPIALG - VQGLADTYMMLRLPFESEEAQTLNKQIFETIYHATLEASCELAQKEGKYSTFEGSPAS - KGILQFDMWNAKPFGMWDWETLRKDIVKHGLRNSLTMAPMPTASTSQILGYNECFEPV - TSNMYSRRVLSGEFQVVNPYLLRDLVDLGIWDDSMKQYLITQNGSIQGLPNVPQELKE - LYKTVWEISQKTIINMAADRAIYIDQSHSLNLFLQAPSMGKITSMHFYGWKKGLKTGM - YYLRTQAASAAIQFTIDQEVADQAATHIASVSELDRPVYVPKGTKFSEQKAASALTES - SDNEKDASPVPSEQSSVSSAMSNVKLEDSVAPAVPTETIKEDSDEKKCDIYNEKVIAC - TAPTPEACESCSG" - gene complement(<241308..>241775) - /gene="FIS1" - /locus_tag="YIL065C" - /gene_synonym="MDV2" - /db_xref="GeneID:854745" - mRNA complement(<241308..>241775) - /gene="FIS1" - /locus_tag="YIL065C" - /gene_synonym="MDV2" - /product="Fis1p" - /transcript_id="NM_001179415.3" - /db_xref="GeneID:854745" - CDS complement(241308..241775) - /gene="FIS1" - /locus_tag="YIL065C" - /gene_synonym="MDV2" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane - [PMID:11038183|PMID:15809300|PMID:16407407]" - /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome - [PMID:16968746]" - /experiment="EXISTENCE:genetic interaction:GO:0016559 - peroxisome fission [PMID:18445678]" - /experiment="EXISTENCE:mutant phenotype:GO:0000266 - mitochondrial fission [PMID:11038182|PMID:11038183]" - /experiment="EXISTENCE:mutant phenotype:GO:0007031 - peroxisome organization [PMID:16968746]" - /note="Protein involved in mitochondrial fission and - peroxisome abundance; may have a distinct role in - tethering protein aggregates to mitochondria in order to - retain them in the mother cell; required for localization - of Dnm1p and Mdv1p during mitochondrial division; mediates - ethanol-induced apoptosis and ethanol-induced - mitochondrial fragmentation" - /codon_start=1 - /product="Fis1p" - /protein_id="NP_012199.3" - /db_xref="GeneID:854745" - /db_xref="SGD:S000001327" - /translation="MTKVDFWPTLKDAYEPLYPQQLEILRQQVVSEGGPTATIQSRFN - YAWGLIKSTDVNDERLGVKILTDIYKEAESRRRECLYYLTIGCYKLGEYSMAKRYVDT - LFEHERNNKQVGALKSMVEDKIQKETLKGVVVAGGVLAGAVAVASFFLRNKRR" - gene <241943..>242716 - /gene="EFM4" - /locus_tag="YIL064W" - /gene_synonym="SEE1" - /db_xref="GeneID:854746" - mRNA <241943..>242716 - /gene="EFM4" - /locus_tag="YIL064W" - /gene_synonym="SEE1" - /product="Efm4p" - /transcript_id="NM_001179414.1" - /db_xref="GeneID:854746" - CDS 241943..242716 - /gene="EFM4" - /locus_tag="YIL064W" - /gene_synonym="SEE1" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0016279 - protein-lysine N-methyltransferase activity - [PMID:20510667]" - /experiment="EXISTENCE:mutant phenotype:GO:0016192 - vesicle-mediated transport [PMID:19160456]" - /note="Lysine methyltransferase; involved in the - dimethylation of eEF1A (Tef1p/Tef2p) at lysine 316; - sequence similarity to S-adenosylmethionine-dependent - methyltransferases of the seven beta-strand family; role - in vesicular transport" - /codon_start=1 - /product="Efm4p" - /protein_id="NP_012200.1" - /db_xref="GeneID:854746" - /db_xref="SGD:S000001326" - /translation="MKRSEKKSMSSALKNGIMERTQPEKVVQMQGTADLSTSKLGTKK - YWDELYALELENFRRNPQDTGDCWFSDSDAEQKMIDFLVDNIGAYRISENASVVDLGT - GNGHMLFELHQTEFQGKLVGIDYSEESVKLASNIAEATGVDNFISFQQADIFSGDWKP - GKYDIVLDKGTLDAISLSGMKINGKLDVVDVYAGVVERILKKDGIFLITSCNFTQDEL - VKIIETDNLKMWKTIKYPVFQFGGVQGATICSVAFVKQN" - gene complement(<242761..>243744) - /gene="YRB2" - /locus_tag="YIL063C" - /db_xref="GeneID:854747" - mRNA complement(<242761..>243744) - /gene="YRB2" - /locus_tag="YIL063C" - /product="Yrb2p" - /transcript_id="NM_001179413.1" - /db_xref="GeneID:854747" - CDS complement(242761..243744) - /gene="YRB2" - /locus_tag="YIL063C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10684247|PMID:22932476|PMID:9121474|PMID:9395535]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:mutant phenotype:GO:0000056 - ribosomal small subunit export from nucleus - [PMID:12082158]" - /experiment="EXISTENCE:mutant phenotype:GO:0006611 protein - export from nucleus [PMID:9636166]" - /note="hypothetical protein; involved in nuclear processes - of the Ran-GTPase cycle; involved in nuclear protein - export; contains Ran Binding Domain and FxFG repeats; - interacts with Srm1p, GTP-Gsp1p, Rna1p and Crm1p; - relocalizes to the cytosol in response to hypoxia; not - essential for viability" - /codon_start=1 - /product="Yrb2p" - /protein_id="NP_012201.1" - /db_xref="GeneID:854747" - /db_xref="SGD:S000001325" - /translation="MSETNGGNAARENSEVKQTAVENPIDKLDGTPKRPREKDQDEQA - EETSDKSEAPNKNDEEKKEEGKKDQEPSHKKIKVDDGKTVESGIVEDDKKEDKFVFGA - ASKFGTGFGVAKKDTKDGDATTSTESLPASDSKTKKPFAFGSGLSFGSGFNILKNKTE - NNSESEKKATDVDKDKVHSGSEQLANASEDTKDKPKPLKLQKQEVKSGEESEECIYQV - NAKLYQLSNIKEGWKERGVGIIKINKSKDDVEKTRIVMRSRGILKVILNIQLVKGFTV - QKGFTGSLQSEKFIRLLAVDDNGDPAQYAIKTGKKETTDELYNIIVKSVPK" - gene complement(<243998..>244462) - /gene="ARC15" - /locus_tag="YIL062C" - /db_xref="GeneID:854748" - mRNA complement(<243998..>244462) - /gene="ARC15" - /locus_tag="YIL062C" - /product="Arc15p" - /transcript_id="NM_001179412.1" - /db_xref="GeneID:854748" - CDS complement(243998..244462) - /gene="ARC15" - /locus_tag="YIL062C" - /experiment="EXISTENCE:direct assay:GO:0003729 mRNA - binding [PMID:20844764]" - /experiment="EXISTENCE:direct assay:GO:0005885 Arp2/3 - protein complex [PMID:10377407|PMID:9210376]" - /experiment="EXISTENCE:mutant phenotype:GO:0000001 - mitochondrion inheritance [PMID:11248049]" - /experiment="EXISTENCE:mutant phenotype:GO:0030674 - protein-macromolecule adaptor activity [PMID:10377407]" - /experiment="EXISTENCE:mutant phenotype:GO:0044396 actin - cortical patch organization [PMID:10377407]" - /note="Subunit of the ARP2/3 complex; ARP2/3 is required - for the motility and integrity of cortical actin patches; - has mRNA binding activity" - /codon_start=1 - /product="Arc15p" - /protein_id="NP_012202.1" - /db_xref="GeneID:854748" - /db_xref="SGD:S000001324" - /translation="MEADWRRIDIDAFDPESGRLTAADLVPPYETTVTLQELQPRMNQ - LRSLATSGDSLGAVQLLTTDPPYSADAPTKEQYFKSVLEALTQVRQADIGNVIKNLSD - SQRDVLVKYLYKGMSVPQGQKQGGVLLAWLERITQVSGVTPIVHYISDRRTV" - gene complement(<244657..>245559) - /gene="SNP1" - /locus_tag="YIL061C" - /db_xref="GeneID:854749" - mRNA complement(<244657..>245559) - /gene="SNP1" - /locus_tag="YIL061C" - /product="U1 snRNP complex subunit SNP1" - /transcript_id="NM_001179411.1" - /db_xref="GeneID:854749" - CDS complement(244657..245559) - /gene="SNP1" - /locus_tag="YIL061C" - /experiment="EXISTENCE:direct assay:GO:0005685 U1 snRNP - [PMID:9630245]" - /experiment="EXISTENCE:direct assay:GO:0071004 U2-type - prespliceosome [PMID:16618970]" - /experiment="EXISTENCE:physical interaction:GO:0000243 - commitment complex [PMID:10072386]" - /experiment="EXISTENCE:physical interaction:GO:0000398 - mRNA splicing, via spliceosome [PMID:10072386]" - /experiment="EXISTENCE:physical interaction:GO:0003729 - mRNA binding [PMID:10072386]" - /experiment="EXISTENCE:physical interaction:GO:0030619 U1 - snRNA binding [PMID:1387202]" - /note="Component of U1 snRNP required for mRNA splicing - via spliceosome; substrate of arginine methyltransferase - Hmt1p; may interact with poly(A) polymerase to regulate - polyadenylation; homolog of human U1-70K, which has been - linked to several types of autoimmune and - neurodegenerative diseases" - /codon_start=1 - /product="U1 snRNP complex subunit SNP1" - /protein_id="NP_012203.1" - /db_xref="GeneID:854749" - /db_xref="SGD:S000001323" - /translation="MNYNLSKYPDDVSRLFKPRPPLSYKRPTDYPYAKRQTNPNITGV - ANLLSTSLKHYMEEFPEGSPNNHLQRYEDIKLSKIKNAQLLDRRLQNWNPNVDPHIKD - TDPYRTIFIGRLPYDLDEIELQKYFVKFGEIEKIRIVKDKITQKSKGYAFIVFKDPIS - SKMAFKEIGVHRGIQIKDRICIVDIERGRTVKYFKPRRLGGGLGGRGYSNRDSRLPGR - FASASTSNPAERNYAPRLPRRETSSSAYSADRYGSSTLDARYRGNRPLLSAATPTAAV - TSVYKSRNSRTRESQPAPKEAPDY" - rep_origin 245756..245925 - /note="ARS923; Autonomously Replicating Sequence" - /db_xref="SGD:S000119034" - repeat_region 246220..246552 - /note="Ty2 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007012" - gene <246392..>246826 - /locus_tag="YIL060W" - /db_xref="GeneID:854750" - mRNA <246392..>246826 - /locus_tag="YIL060W" - /product="uncharacterized protein" - /transcript_id="NM_001179410.3" - /db_xref="GeneID:854750" - CDS 246392..246826 - /locus_tag="YIL060W" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:24360837]" - /note="Mitochondrial hypothetical protein; required for - respiratory growth; mutant accumulates less glycogen than - does wild type; null mutation results in a decrease in - plasma membrane electron transport; YIL060W is not an - essential gene" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012204.3" - /db_xref="GeneID:854750" - /db_xref="SGD:S000001322" - /translation="MMIIIFIELCRIADSLLWIPKSSRRTSSTFYIPNIIALLKMESQ - QLSQNSPTLHIHTCGSKIGTLFLRFTKVAIGTSLIVGAGVAMEVSVPLPPQPLYSRSE - VPSVELCGIVAICRSPPSVYPTCRPISLSKKIVSGLVRTNSS" - rep_origin 247705..247760 - /note="ARS914; Autonomously Replicating Sequence" - /db_xref="SGD:S000118397" - gene complement(<247902..>248396) - /gene="RGI2" - /locus_tag="YIL057C" - /db_xref="GeneID:854753" - mRNA complement(<247902..>248396) - /gene="RGI2" - /locus_tag="YIL057C" - /product="Rgi2p" - /transcript_id="NM_001179407.3" - /db_xref="GeneID:854753" - CDS complement(247902..248396) - /gene="RGI2" - /locus_tag="YIL057C" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0006112 energy - reserve metabolic process [PMID:20567505]" - /note="hypothetical protein; involved in energy metabolism - under respiratory conditions; expression induced under - carbon limitation and repressed under high glucose; RGI2 - has a paralog, RGI1, that arose from the whole genome - duplication" - /codon_start=1 - /product="Rgi2p" - /protein_id="NP_012207.3" - /db_xref="GeneID:854753" - /db_xref="SGD:S000001319" - /translation="MTKKDKKAKGPKMSTITTKSGESLKVFEDLHDFETYLKGETEDQ - EFDHVHCQLKYYPPFVLHDAHDDPEKIKETANSHSKKFVRHLHQHVEKHLLKDIKTAI - NKPELKFHDKKKQESFDRIVWNYGEETELNAKKFKVSVEVVCKHDGAMVDVDYKTEPL - QPLI" - rep_origin 248396..248850 - /note="ARS915; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130159" - gene 248850..248931 - /gene="SUP17" - /locus_tag="YNCI0006W" - /db_xref="GeneID:854754" - tRNA 248850..248931 - /gene="SUP17" - /locus_tag="YNCI0006W" - /product="tRNA-Ser" - /experiment="EXISTENCE:curator inference:GO:0002181 - cytoplasmic translation [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Serine tRNA (tRNA-Ser), predicted by tRNAscan-SE - analysis; can mutate to suppress ochre nonsense mutations" - /db_xref="GeneID:854754" - /db_xref="SGD:S000006735" - gene <249991..>251913 - /gene="VHR1" - /locus_tag="YIL056W" - /db_xref="GeneID:854755" - mRNA <249991..>251913 - /gene="VHR1" - /locus_tag="YIL056W" - /product="Vhr1p" - /transcript_id="NM_001179406.1" - /db_xref="GeneID:854755" - CDS 249991..251913 - /gene="VHR1" - /locus_tag="YIL056W" - /experiment="EXISTENCE:direct assay:GO:0000977 RNA - polymerase II transcription regulatory region - sequence-specific DNA binding [PMID:16533810]" - /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding - transcription factor activity, RNA polymerase II-specific - [PMID:21278159]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095|PMID:16533810]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0000981 - DNA-binding transcription factor activity, RNA polymerase - II-specific [PMID:21278159]" - /experiment="EXISTENCE:mutant phenotype:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:16533810|PMID:21278159]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:16533810]" - /note="Transcriptional activator; required for the vitamin - H-responsive element (VHRE) mediated induction of VHT1 - (Vitamin H transporter) and BIO5 (biotin biosynthesis - intermediate transporter) in response to low biotin - concentrations; VHR1 has a paralog, VHR2, that arose from - the whole genome duplication" - /codon_start=1 - /product="Vhr1p" - /protein_id="NP_012208.1" - /db_xref="GeneID:854755" - /db_xref="SGD:S000001318" - /translation="MNGPPTFTQYRINKFSGNGATHKIRELLNFNDEKKWKQFSSRRL - ELIDKFQLSQYKASEQDQNIKQIATILRTEFGYPVSCSKEFEKLVTAAVQSVRRNRKR - SKKRYALSIANGSGGNVNNSISSNSTSDDEISPSIYQRSNSDFLPSSNYAADFQFSNK - FQPLMSHQSHNGTIFPTVGTQNDSSPSVTSTQQKYNDIVTMLVHDLVTNVVPLSEQAL - KDPYTGPNLSHFATSSLSQQPNITTNIPIDSTVPFFLREKLLLQIQRSRTCQDISQAA - GSIDIYANLEILGEMSIRMSIAFVIERFFSNLVSSSMKYITAKTCSPENLALLSQRLF - GAATRHNLSHFPAAQVQLRLLYLVIGGIVKDFGFDPTLYPLSEIIHHIVMVQYPLASS - CASEPPSSSPNKRVKRSPPVVSSDVMLNNNNTLSNRATLLTTLPMKPQSANKDVNRRV - IIRFNDREQAFTFHQLSNGPPTVSEVLENCKNLFNIINKNKNFGIFHNDNLLNDESLA - KLFDSFSTSEIHLVIKDISTIPLQDAKIPVPITLPKMSCIGENPSMPSIPLVPQEKDD - PKKSSLTAFDNILNRISKSPMNEENSNTTLNTGTSTSNTNNNDHNESVPAPYVTKNKN - SFQNGNLPQPVFQPLL" - gene complement(<252042..>253925) - /locus_tag="YIL055C" - /db_xref="GeneID:854756" - mRNA complement(<252042..>253925) - /locus_tag="YIL055C" - /product="uncharacterized protein" - /transcript_id="NM_001179405.1" - /db_xref="GeneID:854756" - CDS complement(252042..253925) - /locus_tag="YIL055C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:24390141]" - /note="hypothetical protein" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012209.1" - /db_xref="GeneID:854756" - /db_xref="SGD:S000001317" - /translation="MTLEPHYSAKSAASASAFVARSATESSTASTKAAPRKKTYSQSN - GIPIRIDNLPPGKTWAQVKYLIGGIIYHTNILQVKMLPPMTSMVPPFITFQSCIVILK - NSIDNESLENLLLTLNTYQWDYHDLFVYLLPYTNDSPSLRYPEISDSNNDVRSAPDET - KRSISPRYASHVSSVTPQPPSASTPPSQFFSFSPEVSLRKNENITPLPTPVPVPVGVP - PLAPPPHGPFSTSMLPMLGAPPGTVPNMQMPYQTTLPSPTAAATAGGPLASPTHYPRR - RHFYHQNQSQFQKYMHNSPRNPDTGTGPRLSQQHHLSLRNNKINPSYNEISALYNLNM - ASNSNNNGNIPTTSTNGDDRALQAKNGGTITPSQTQINHKRLKHIFNEKSFRKQMTNR - GMWQLKIINFPPYIPIEFLEKLSESDFNELMNQEKFTVIEIKEKGQLEKFGRLRWTVL - KDFIKLKCPKLLRLQERQFLQQQNEASLLNESMDALKISENENTNGSANNSTYTNGGP - RTSINNTREFYVGVYEDHEEATLLRFELPEDELEEFNRNLPTTFAQSGNVSDSEGDSK - AKYFKVSTIVYNAIVGFHDKELSDLTFESLQDQEYSLGYKIHVMELPPFDEDEFENQR - QQF" - gene <254543..>254860 - /locus_tag="YIL054W" - /db_xref="GeneID:854757" - mRNA <254543..>254860 - /locus_tag="YIL054W" - /product="uncharacterized protein" - /transcript_id="NM_001270751.1" - /db_xref="GeneID:854757" - CDS 254543..254860 - /locus_tag="YIL054W" - /note="hypothetical protein; expressed at both mRNA and - protein levels" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001257680.1" - /db_xref="GeneID:854757" - /db_xref="SGD:S000001316" - /translation="MAPKAFFVCLPWVLPRHALIVRQAGNPYHFLAYTNPRAPGKLQD - SHCPVFFMGIIIITIITVTLAIIIINIIFLTLFDDGMCFYCSLLTFSFVSFNFDHFDH - FDL" - gene <255115..>255867 - /gene="GPP1" - /locus_tag="YIL053W" - /gene_synonym="RHR2" - /db_xref="GeneID:854758" - mRNA <255115..>255867 - /gene="GPP1" - /locus_tag="YIL053W" - /gene_synonym="RHR2" - /product="glycerol-1-phosphatase RHR2" - /transcript_id="NM_001179403.1" - /db_xref="GeneID:854758" - CDS 255115..255867 - /gene="GPP1" - /locus_tag="YIL053W" - /gene_synonym="RHR2" - /EC_number="3.1.3.21" - /experiment="EXISTENCE:direct assay:GO:0000121 - glycerol-1-phosphatase activity [PMID:8662716]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095|PMID:27385335]" - /experiment="EXISTENCE:mutant phenotype:GO:0006114 - glycerol biosynthetic process [PMID:11058591]" - /note="Constitutively expressed DL-glycerol-3-phosphate - phosphatase; also known as glycerol-1-phosphatase; - involved in glycerol biosynthesis, induced in response to - both anaerobic and osmotic stress; GPP1 has a paralog, - GPP2, that arose from the whole genome duplication" - /codon_start=1 - /product="glycerol-1-phosphatase RHR2" - /protein_id="NP_012211.2" - /db_xref="GeneID:854758" - /db_xref="SGD:S000001315" - /translation="MPLTTKPLSLKINAALFDVDGTIIISQPAIAAFWRDFGKDKPYF - DAEHVIHISHGWRTYDAIAKFAPDFADEEYVNKLEGEIPEKYGEHSIEVPGAVKLCNA - LNALPKEKWAVATSGTRDMAKKWFDILKIKRPEYFITANDVKQGKPHPEPYLKGRNGL - GFPINEQDPSKSKVVVFEDAPAGIAAGKAAGCKIVGIATTFDLDFLKEKGCDIIVKNH - ESIRVGEYNAETDEVELIFDDYLYAKDDLLKW" - gene complement(<256226..>257063) - /gene="RPL34B" - /locus_tag="YIL052C" - /db_xref="GeneID:854759" - mRNA complement(join(<256226..256554,257027..>257063)) - /gene="RPL34B" - /locus_tag="YIL052C" - /product="ribosomal 60S subunit protein L34B" - /transcript_id="NM_001179402.1" - /db_xref="GeneID:854759" - CDS complement(join(256226..256554,257027..257063)) - /gene="RPL34B" - /locus_tag="YIL052C" - /experiment="EXISTENCE:curator inference:GO:0002181 - cytoplasmic translation [PMID:11983894]" - /experiment="EXISTENCE:curator inference:GO:0003735 - structural constituent of ribosome [PMID:11983894]" - /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic - large ribosomal subunit [PMID:11983894]" - /note="Ribosomal 60S subunit protein L34B; homologous to - mammalian ribosomal protein L34, no bacterial homolog; - RPL34B has a paralog, RPL34A, that arose from the whole - genome duplication" - /codon_start=1 - /product="ribosomal 60S subunit protein L34B" - /protein_id="NP_012212.1" - /db_xref="GeneID:854759" - /db_xref="SGD:S000001314" - /translation="MAQRVTFRRRNPYNTRSNKIKVVKTPGGILRAQHVKKLATRPKC - GDCGSALQGISTLRPRQYATVSKTHKTVSRAYGGSRCANCVKERIVRAFLIEEQKIVK - KVVKEQTEAAKKSEKKSKK" - gene complement(<257843..>258280) - /gene="MMF1" - /locus_tag="YIL051C" - /gene_synonym="IBM1" - /db_xref="GeneID:854760" - mRNA complement(<257843..>258280) - /gene="MMF1" - /locus_tag="YIL051C" - /gene_synonym="IBM1" - /product="isoleucine biosynthesis protein MMF1" - /transcript_id="NM_001179401.3" - /db_xref="GeneID:854760" - CDS complement(257843..258280) - /gene="MMF1" - /locus_tag="YIL051C" - /gene_synonym="IBM1" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005759 - mitochondrial matrix [PMID:11003673]" - /experiment="EXISTENCE:genetic interaction:GO:0032543 - mitochondrial translation [PMID:15164357]" - /experiment="EXISTENCE:mutant phenotype:GO:0009097 - isoleucine biosynthetic process [PMID:11442631]" - /note="Mitochondrial protein required for transamination - of isoleucine; but not of valine or leucine; may regulate - specificity of branched-chain transaminases Bat1p and - Bat2p; induction of expression in response to stress is - mediated by a Hog1p-regulated antisense RNA and gene - looping; interacts genetically with mitochondrial - ribosomal protein genes; MMF1 has a paralog, HMF1, that - arose from the whole genome duplication" - /codon_start=1 - /product="isoleucine biosynthesis protein MMF1" - /protein_id="NP_012213.3" - /db_xref="GeneID:854760" - /db_xref="SGD:S000001313" - /translation="MFLRNSVLRTAPVLRRGITTLTPVSTKLAPPAAASYSQAMKANN - FVYVSGQIPYTPDNKPVQGSISEKAEQVFQNVKNILAESNSSLDNIVKVNVFLADMKN - FAEFNSVYAKHFHTHKPARSCVGVASLPLNVDLEMEVIAVEKN" - gene <258913..>259770 - /gene="PCL7" - /locus_tag="YIL050W" - /db_xref="GeneID:854761" - mRNA <258913..>259770 - /gene="PCL7" - /locus_tag="YIL050W" - /product="Pcl7p" - /transcript_id="NM_001179400.3" - /db_xref="GeneID:854761" - CDS 258913..259770 - /gene="PCL7" - /locus_tag="YIL050W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:16611745]" - /experiment="EXISTENCE:direct assay:GO:0016538 - cyclin-dependent protein serine/threonine kinase regulator - activity [PMID:12407105]" - /experiment="EXISTENCE:genetic interaction:GO:0005979 - regulation of glycogen biosynthetic process - [PMID:11602261]" - /experiment="EXISTENCE:genetic interaction:GO:0005981 - regulation of glycogen catabolic process [PMID:11602261]" - /experiment="EXISTENCE:mutant phenotype:GO:0031647 - regulation of protein stability [PMID:16611745]" - /experiment="EXISTENCE:physical interaction:GO:0000307 - cyclin-dependent protein kinase holoenzyme complex - [PMID:16611745]" - /note="Pho85p cyclin of the Pho80p subfamily; forms a - functional kinase complex with Pho85p which phosphorylates - Mmr1p and is regulated by Pho81p; involved in glycogen - metabolism, expression is cell-cycle regulated; PCL7 has a - paralog, PCL6, that arose from the whole genome - duplication" - /codon_start=1 - /product="Pcl7p" - /protein_id="NP_012214.3" - /db_xref="GeneID:854761" - /db_xref="SGD:S000001312" - /translation="MELSSPSKKTTTSPINIPGGNRDNLIIGPHSHSFKTDPFSSNNS - SLLSKISTNPSLESPFSSKSLLDCSPVQAVKKSLESEAKTHSLDEETNEQTDVKILNI - ADFPTDELILMISALLNRIITANDETTDVSQQVSDETEDELLTPILAFYGKNVPEIAV - VQYLERIQKYCPTTNDIFLSLLVYFDRISKNYGHSSERNGCAKQLFVMDSGNIHRLLI - TGVTICTKFLSDFFYSNSRYAKVGGISLQELNHLELQFLILCDFKLLVSVEEMQKYAN - LLYKFWNDQ" - gene <260158..>260919 - /gene="DFG10" - /locus_tag="YIL049W" - /db_xref="GeneID:854762" - mRNA <260158..>260919 - /gene="DFG10" - /locus_tag="YIL049W" - /product="putative polyprenol reductase" - /transcript_id="NM_001179399.1" - /db_xref="GeneID:854762" - CDS 260158..260919 - /gene="DFG10" - /locus_tag="YIL049W" - /EC_number="1.3.1.94" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0006488 - dolichol-linked oligosaccharide biosynthetic process - [PMID:20637498]" - /experiment="EXISTENCE:mutant phenotype:GO:0007124 - pseudohyphal growth [PMID:9055077]" - /experiment="EXISTENCE:mutant phenotype:GO:0019408 - dolichol biosynthetic process [PMID:20637498]" - /note="Probable polyprenol reductase; catalyzes conversion - of polyprenol to dolichol, the precursor for - N-glycosylation; involved in filamentous growth; mutations - in human homolog SRD5A3 confer CDG (Congenital Disorders - of Glycosylation); human SRD5A3 can complement yeast null - mutant" - /codon_start=1 - /product="putative polyprenol reductase" - /protein_id="NP_012215.1" - /db_xref="GeneID:854762" - /db_xref="SGD:S000001311" - /translation="MYFDEEQLLKYTIYAYRLSFFVGICSLFIAKSCLPEFLQYGKTY - RPKENSKYSSILERIKKFTVPKAYFSHFYYLATFLSLVTLYFYPKFPIVWIIFGHSLR - RLYETLYVLHYTSNSRMNWSHYLVGIWFYSVLLLILNISLYKNSIPNTLNMNAFIIFC - IASWDQYKNHVILANLVKYSLPTGRLFRLVCCPHYLDEIIIYSTLLPYEQEFYLTLVW - VITSLTISALETKNYYRHKFKDNHVAPYAIIPFII" - gene <261437..>264892 - /gene="NEO1" - /locus_tag="YIL048W" - /db_xref="GeneID:854763" - mRNA <261437..>264892 - /gene="NEO1" - /locus_tag="YIL048W" - /product="putative aminophospholipid-translocating P4-type - ATPase NEO1" - /transcript_id="NM_001179398.1" - /db_xref="GeneID:854763" - CDS 261437..264892 - /gene="NEO1" - /locus_tag="YIL048W" - /EC_number="7.6.2.1" - /experiment="EXISTENCE:direct assay:GO:0000139 Golgi - membrane [PMID:12960419]" - /experiment="EXISTENCE:direct assay:GO:0005768 endosome - [PMID:15314152]" - /experiment="EXISTENCE:direct assay:GO:0005770 late - endosome [PMID:30981741]" - /experiment="EXISTENCE:direct assay:GO:0005794 Golgi - apparatus [PMID:15314152]" - /experiment="EXISTENCE:direct assay:GO:0005802 trans-Golgi - network [PMID:30981741]" - /experiment="EXISTENCE:direct assay:GO:0030137 COPI-coated - vesicle [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0006890 - retrograde vesicle-mediated transport, Golgi to - endoplasmic reticulum [PMID:12960419]" - /experiment="EXISTENCE:mutant phenotype:GO:0006897 - endocytosis [PMID:15314152]" - /experiment="EXISTENCE:mutant phenotype:GO:0007033 vacuole - organization [PMID:15314152]" - /experiment="EXISTENCE:mutant phenotype:GO:0045332 - phospholipid translocation [PMID:27235400]" - /note="Phospholipid translocase (flippase); involved in - generating phospholipid asymmetry in plasma membrane; - involved in endocytosis, vacuolar biogenesis and - Golgi-to-ER vesicle-mediated transport; localizes to - endosomes and Golgi apparatus; targeted to vacuole via - AP-3 pathway" - /codon_start=1 - /product="putative aminophospholipid-translocating P4-type - ATPase NEO1" - /protein_id="NP_012216.1" - /db_xref="GeneID:854763" - /db_xref="SGD:S000001310" - /translation="MPNPPSFKSHKQNLFNSNNNQHANSVDSFDLHLDDSFDAALDSL - QINNNPEPLSKHNTVGDRESFEMRTVDDLDNFSNHSSDSHRKSSNTDTHPLMYDNRLS - QDDNFKFTNIASSPPSSSNNIFSKALSYLKVSNTKNWSKFGSPIELSDQHIEREIHPD - TTPVYDRNRYVSNELSNAKYNAVTFVPTLLYEQFKFFYNLYFLVVALSQAVPALRIGY - LSSYIVPLAFVLTVTMAKEAIDDIQRRRRDRESNNELYHVITRNRSIPSKDLKVGDLI - KVHKGDRIPADLVLLQSSEPSGESFIKTDQLDGETDWKLRVACPLTQNLSENDLINRI - SITASAPEKSIHKFLGKVTYKDSTSNPLSVDNTLWANTVLASSGFCIACVVYTGRDTR - QAMNTTTAKVKTGLLELEINSISKILCACVFALSILLVAFAGFHNDDWYIDILRYLIL - FSTIIPVSLRVNLDLAKSVYAHQIEHDKTIPETIVRTSTIPEDLGRIEYLLSDKTGTL - TQNDMQLKKIHLGTVSYTSETLDIVSDYVQSLVSSKNDSLNNSKVALSTTRKDMSFRV - RDMILTLAICHNVTPTFEDDELTYQAASPDEIAIVKFTESVGLSLFKRDRHSISLLHE - HSGKTLNYEILQVFPFNSDSKRMGIIVRDEQLDEYWFMQKGADTVMSKIVESNDWLEE - ETGNMAREGLRTLVIGRKKLNKKIYEQFQKEYNDASLSMLNRDQQMSQVITKYLEHDL - ELLGLTGVEDKLQKDVKSSIELLRNAGIKIWMLTGDKVETARCVSISAKLISRGQYVH - TITKVTRPEGAFNQLEYLKINRNACLLIDGESLGMFLKHYEQEFFDVVVHLPTVIACR - CTPQQKADVALVIRKMTGKRVCCIGDGGNDVSMIQCADVGVGIVGKEGKQASLAADFS - ITQFCHLTELLLWHGRNSYKRSAKLAQFVMHRGLIIAICQAVYSICSLFEPIALYQGW - LMVGYATCYTMAPVFSLTLDHDIEESLTKIYPELYKELTEGKSLSYKTFFVWVLLSLF - QGSVIQLFSQAFTSLLDTDFTRMVAISFTALVVNELIMVALEIYTWNKTMLVTEIATL - LFYIVSVPFLGDYFDLGYMTTVNYYAGLLVILLISIFPVWTAKAIYRRLHPPSYAKVQ - EFATP" - gene complement(<265115..>267823) - /gene="SYG1" - /locus_tag="YIL047C" - /db_xref="GeneID:854764" - mRNA complement(<265115..>267823) - /gene="SYG1" - /locus_tag="YIL047C" - /product="Syg1p" - /transcript_id="NM_001179397.3" - /db_xref="GeneID:854764" - CDS complement(265115..267823) - /gene="SYG1" - /locus_tag="YIL047C" - /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type - vacuole membrane [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:7592711]" - /experiment="EXISTENCE:mutant phenotype:GO:0007165 signal - transduction [PMID:7592711]" - /note="Plasma membrane hypothetical protein; targeted to - vacuole via AP-3 pathway; truncation and overexpression - suppresses lethality of G-alpha protein deficiency" - /codon_start=1 - /product="Syg1p" - /protein_id="NP_012217.3" - /db_xref="GeneID:854764" - /db_xref="SGD:S000001309" - /translation="MKFADHLTESAIPEWRDKYIDYKVGKKKLRRYKEKLDAEEEQSS - SYRSWMPSVSVYQTAFQQREPGKSRSDGDYRSGPAFKKDYSALQREFVADFIEDWLIS - FQLSKCNEFYLWLLKECDKKFEVLQSQLHYYSLQKNYERDNLNRSSSNVDMSTSLYAA - GLAGRSDSRVNSIDSDSRSVMYGSMPCTKEAKKPRLSLLAYCQKVLKDNRLLPSWPKR - GFSLLQDLRQDASSRGRETFAFGASFLETMTTTQARNLLSNAIIEYYLYLQLVKSFRD - INVTGFRKMVKKFDKTCHTRELTTFMSYARTHYTLFKHADANVQLVAQKMQQITSSQP - TPTSELSSAQRDKEPITWLETQITEWFTTALTNSPKDRKHNTHKLKKLTIQYSISEQM - VHRNNRSIVQMLVVGLGIGVSMTLITYTLYLGISSEETSFTHKILFPLWGGWYMVLLI - AFLFLVNCFIWHRTGINYRFIMLGEIQSKNGTQFFNNDFATSKIPLKLYFLTFFIVPC - AVCSMLSFALEKLTPLGFLYIGIVSFLFLCPSGLIPYWDKVVHTRKWLVVTLIRLMMS - GFFPVEFGDFFLGDIICSLTYSIADIAMFFCVYSHTPNNLCGSSHSRAMGVLSCLPSY - WRFMQCLRRFADSGDWFPHLLNAAKYTLGIAYNATLCAYRLSDRSEQRRTPFIVCATL - NSILTSAWDLVMDWSFAHNTTSYNWLLRDDLYLAGKKNWENGSYSFSRKLVYYFAMIW - DILIRFEWIVYAIAPQTIQQSAVTSFILALLEVLRRFVWIIFRVENEHVANVHLFRVT - GDAPLPYPIAQVGDDSMDSSDLGSKAFSSLNDIPITPSHDNNPHSFAEPMPAYRGTFR - RRSSVFENISRSIPWAHATDFQRPTVNTVDDRSPETDSESEVESIM" - gene <268309..>268473 - /locus_tag="YIL046W-A" - /db_xref="GeneID:1466492" - mRNA <268309..>268473 - /locus_tag="YIL046W-A" - /product="uncharacterized protein" - /transcript_id="NM_001184654.1" - /db_xref="GeneID:1466492" - CDS 268309..268473 - /locus_tag="YIL046W-A" - /note="hypothetical protein; identified by expression - profiling and mass spectrometry" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_878097.1" - /db_xref="GeneID:1466492" - /db_xref="SGD:S000028836" - /translation="MMCVCIPKKKLMDWRVYYIYSYVVCLYMCGSDCACICVLACVVQ - CVCFNVEMRL" - gene <268651..>270573 - /gene="MET30" - /locus_tag="YIL046W" - /gene_synonym="ZRG11" - /db_xref="GeneID:854765" - mRNA <268651..>270573 - /gene="MET30" - /locus_tag="YIL046W" - /gene_synonym="ZRG11" - /product="ubiquitin-binding SDF ubiquitin ligase complex - subunit MET30" - /transcript_id="NM_001179396.1" - /db_xref="GeneID:854765" - CDS 268651..270573 - /gene="MET30" - /locus_tag="YIL046W" - /gene_synonym="ZRG11" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10637232]" - /experiment="EXISTENCE:direct assay:GO:0019005 SCF - ubiquitin ligase complex [PMID:9716410]" - /experiment="EXISTENCE:direct assay:GO:0043130 ubiquitin - binding [PMID:21070969]" - /experiment="EXISTENCE:direct assay:GO:0043224 nuclear SCF - ubiquitin ligase complex [PMID:10637232]" - /experiment="EXISTENCE:direct assay:GO:0046685 response to - arsenic-containing substance [PMID:15689486]" - /experiment="EXISTENCE:direct assay:GO:0046686 response to - cadmium ion [PMID:15689486]" - /experiment="EXISTENCE:genetic interaction:GO:0031146 - SCF-dependent proteasomal ubiquitin-dependent protein - catabolic process [PMID:9716410]" - /experiment="EXISTENCE:mutant phenotype:GO:0000082 G1/S - transition of mitotic cell cycle [PMID:15870262]" - /experiment="EXISTENCE:mutant phenotype:GO:0000083 - regulation of transcription involved in G1/S transition of - mitotic cell cycle [PMID:15870262]" - /experiment="EXISTENCE:mutant phenotype:GO:0000209 protein - polyubiquitination [PMID:9716410]" - /note="F-box protein containing five copies of the WD40 - motif; controls cell cycle function, sulfur metabolism, - and methionine biosynthesis as part of the ubiquitin - ligase complex; interacts with and regulates Met4p, - localizes within the nucleus; dissociation of Met30p from - SCF complex in response to cadmium stress is regulated by - Cdc48p" - /codon_start=1 - /product="ubiquitin-binding SDF ubiquitin ligase complex - subunit MET30" - /protein_id="NP_012218.1" - /db_xref="GeneID:854765" - /db_xref="SGD:S000001308" - /translation="MRRERQRMMSFEDKDKDDLDNSNSNNSSEMTDTAMMPPLKRLLI - TGSSDDLAQGSSGKKKMTMATRSPSSSPDLATNDSGTRVQPLPEYNFTKFCYRHNPDI - QFSPTHTACYKQDLKRTQEINANIAKLPLQEQSDIHHIISKYSNSNDKIRKLILDGIL - STSCFPQLSYISSLVTHMIKIDFISILPQELSLKILSYLDCQSLCNATRVCRKWQKLA - DDDRVWYHMCEQHIDRKCPNCGWGLPLLHMKRARIQQNSTGSSSNADIQTQTTRPWKV - IYRERFKVESNWRKGHCRIQEFKGHMDGVLTLQFNYRLLFTGSYDSTIGIWDLFTGKL - IRRLSGHSDGVKTLYFDDRKLITGSLDKTIRVWNYITGECISTYRGHSDSVLSVDSYQ - KVIVSGSADKTVKVWHVESRTCYTLRGHTEWVNCVKLHPKSFSCFSCSDDTTIRMWDI - RTNSCLKVFRGHVGQVQKIIPLTIKDVENLATDNTSDGSSPQDDPTMTDGADESDTPS - NEQETVLDENIPYPTHLLSCGLDNTIKLWDVKTGKCIRTQFGHVEGVWDIAADNFRII - SGSHDGSIKVWDLQSGKCMHTFNGRRLQRETQHTQTQSLGDKVAPIACVCIGDSECFS - GDEFGCVKMYKFDLND" - gene <271161..>272777 - /gene="PIG2" - /locus_tag="YIL045W" - /db_xref="GeneID:854766" - mRNA <271161..>272777 - /gene="PIG2" - /locus_tag="YIL045W" - /product="putative protein phosphatase regulator PIG2" - /transcript_id="NM_001179395.3" - /db_xref="GeneID:854766" - CDS 271161..272777 - /gene="PIG2" - /locus_tag="YIL045W" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:physical interaction:GO:0005979 - regulation of glycogen biosynthetic process - [PMID:9046081]" - /note="Putative type-1 protein phosphatase targeting - subunit; tethers Glc7p type-1 protein phosphatase to Gsy2p - glycogen synthase; PIG2 has a paralog, GIP2, that arose - from the whole genome duplication" - /codon_start=1 - /product="putative protein phosphatase regulator PIG2" - /protein_id="NP_012219.3" - /db_xref="GeneID:854766" - /db_xref="SGD:S000001307" - /translation="MATTTQPQNILMDEPLNLPNNSAHNNNYGNINANIRTFAGMSMH - MHPARLNSLEFLHKPRRLSNVKLHRLPQDELQRNTDMNKGMYFNGKQVHAHHPFINSG - ANFNAHHQDVSKLGEEEDEISPLSHDNFQYESEENGNPSPPIYKKSGELVKSSLKRRS - KSLPITPKSIFNKTGSKSKHVNLDHVDTRLLQRSKSVHFDRVLPIKLFNENEKPIDVG - KQMVQQDVLNFKHKPLTRLSALNGGSDSVPIEDLLSENNQNEYGDTWLQNPKGVFLFG - TNSNNRRNKKKKFKLSDDDSDIENDNDSDDAINRLVRQQDKDQAHLAHGLKNLLINDD - DDYLETRTNSAKSGANLFIGNSKRIVGLYNKNFPILSDRNRKSLKLNIFLNLSRGRPV - FLQEITLLTGFHNMVIIGKVFVKNIYFDKKIIVRYTWDAWRTFHESECVYFSNANGIL - PGSNMDIFKFSIDDIHNPNDKDSNISQLEFCIQYLTWGVDRSRKEYWDNNDSANYKID - VVTNETRTGPTTDVNDNYEMKHSLFRNPFH" - gene complement(<272950..>273846) - /gene="AGE2" - /locus_tag="YIL044C" - /gene_synonym="SAT2" - /db_xref="GeneID:854767" - mRNA complement(<272950..>273846) - /gene="AGE2" - /locus_tag="YIL044C" - /gene_synonym="SAT2" - /product="GTPase-activating protein AGE2" - /transcript_id="NM_001179394.3" - /db_xref="GeneID:854767" - CDS complement(272950..273846) - /gene="AGE2" - /locus_tag="YIL044C" - /gene_synonym="SAT2" - /experiment="EXISTENCE:direct assay:GO:0005096 GTPase - activator activity [PMID:12627398]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0030136 - clathrin-coated vesicle [PMID:14562095]" - /experiment="EXISTENCE:genetic interaction:GO:0006888 - endoplasmic reticulum to Golgi vesicle-mediated transport - [PMID:9677411]" - /experiment="EXISTENCE:genetic interaction:GO:0006891 - intra-Golgi vesicle-mediated transport [PMID:9677411]" - /note="ADP-ribosylation factor (ARF) GTPase activating - protein (GAP) effector; involved in Trans-Golgi-Network - (TGN) transport; contains C2C2H2 cysteine/histidine motif" - /codon_start=1 - /product="GTPase-activating protein AGE2" - /protein_id="NP_012220.3" - /db_xref="GeneID:854767" - /db_xref="SGD:S000001306" - /translation="MSTSVPVKKALSALLRDPGNSHCADCKAQLHPRWASWSLGVFIC - IKCAGIHRSLGTHISKVKSVDLDTWKEEHLVKLIQFKNNLRANSYYEATLADELKQRK - ITDTSSLQNFIKNKYEYKKWIGDLSSIEGLNDSTEPVLHKPSANHSLPASNARLDQSS - NSLQKTQTQPPSHLLSTSRSNTSLLNLQVSSLSKTTSNTSVTSSATSIGAANTKTGNR - VGEFGQRNDLKKSILSLYSKPSAQTQSQNSFFTSTTPQPCNTPSPFVNTGITATNNNS - MNSNSSSNISLDDNELFKNVWS" - gene complement(<274072..>274926) - /gene="CBR1" - /locus_tag="YIL043C" - /gene_synonym="CBR5" - /db_xref="GeneID:854768" - mRNA complement(<274072..>274926) - /gene="CBR1" - /locus_tag="YIL043C" - /gene_synonym="CBR5" - /product="cytochrome-b5 reductase" - /transcript_id="NM_001179393.1" - /db_xref="GeneID:854768" - CDS complement(274072..274926) - /gene="CBR1" - /locus_tag="YIL043C" - /gene_synonym="CBR5" - /EC_number="1.6.2.2" - /experiment="EXISTENCE:direct assay:GO:0004128 - cytochrome-b5 reductase activity, acting on NAD(P)H - [PMID:14930|PMID:27694803]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane [PMID:16407407]" - /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA - wobble uridine modification [PMID:27694803]" - /note="Cytochrome b reductase and NADH-dependent reductase - for Dph3p; required for diphthamide synthesis and tRNA - wobble uridine modification; also detected in - mitochondria; mutation in conserved NADH binding domain of - the human ortholog results in type I methemoglobinemia" - /codon_start=1 - /product="cytochrome-b5 reductase" - /protein_id="NP_012221.2" - /db_xref="GeneID:854768" - /db_xref="SGD:S000001305" - /translation="MAIDAQKLVVVIVIVVVPLLFKFIIGPKTKPVLDPKRNDFQSFP - LVEKTILTHNTSMYKFGLPHADDVLGLPIGQHIVIKANINGKDITRSYTPTSLDGDTK - GNFELLVKSYPTGNVSKMIGELKIGDSIQIKGPRGNYHYERNCRSHLGMIAGGTGIAP - MYQIMKAIAMDPHDTTKVSLVFGNVHEEDILLKKELEALVAMKPSQFKIVYYLDSPDR - EDWTGGVGYITKDVIKEHLPAATMDNVQILICGPPAMVASVRRSTVDLGFRRSKPLSK - MEDQVFVF" - gene complement(<275108..>276292) - /gene="PKP1" - /locus_tag="YIL042C" - /db_xref="GeneID:854769" - mRNA complement(<275108..>276292) - /gene="PKP1" - /locus_tag="YIL042C" - /product="protein kinase PKP1" - /transcript_id="NM_001179392.1" - /db_xref="GeneID:854769" - CDS complement(275108..276292) - /gene="PKP1" - /locus_tag="YIL042C" - /EC_number="2.7.11.2" - /experiment="EXISTENCE:direct assay:GO:0004672 protein - kinase activity [PMID:17918780]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:16643908|PMID:16823961|PMID:17918780|PMID:24769239]" - /experiment="EXISTENCE:mutant phenotype:GO:0004740 - pyruvate dehydrogenase (acetyl-transferring) kinase - activity [PMID:18180296|PMID:16643908]" - /experiment="EXISTENCE:mutant phenotype:GO:0065003 - protein-containing complex assembly [PMID:16643908]" - /experiment="EXISTENCE:mutant phenotype:GO:1901524 - regulation of mitophagy [PMID:31548421]" - /note="Mitochondrial protein kinase; involved in negative - regulation of pyruvate dehydrogenase complex activity by - phosphorylating the ser-133 residue of the Pda1p subunit; - acts in concert with kinase Pkp2p and phosphatases Ptc5p - and Ptc6p" - /codon_start=1 - /product="protein kinase PKP1" - /protein_id="NP_012222.1" - /db_xref="GeneID:854769" - /db_xref="SGD:S000001304" - /translation="MWKIMRSWKCGGMRWAHRQRPSHELLSQLSFDQHYKIRSNIELL - IQDYASKPIAPLNYEYFLQYRPPLTKKEEYMLTIKTINLLLSLTCKRLNAIQRLPYNA - VINPHIERTNSLYLKSLQTLLSIAYPYELHNPPKIQAKFTELLDDHEDAIVVLAKGLQ - EIQSCYPKFQISQFLNFHLKERITMKLLVTHYLSLMAQNKGDTNKRMIGILHRDLPIA - QLIKHVSDYVNDICFVKFNTQRTPVLIHPPSQDITFTCIPPILEYIMTEVFKNAFEAQ - IALGKEHMPIEINLLKPDDDELYLRIRDHGGGITPEVEALMFNYSYSTHTQQSADSES - TDLPGEQINNVSGMGFGLPMCKTYLELFGGKIDVQSLLGWGTDVYIKLKGPSKTALLS - KK" - gene <276525..>277505 - /gene="GVP36" - /locus_tag="YIL041W" - /db_xref="GeneID:854770" - mRNA <276525..>277505 - /gene="GVP36" - /locus_tag="YIL041W" - /product="Gvp36p" - /transcript_id="NM_001179391.3" - /db_xref="GeneID:854770" - CDS 276525..277505 - /gene="GVP36" - /locus_tag="YIL041W" - /experiment="EXISTENCE:direct assay:GO:0000139 Golgi - membrane [PMID:16107716]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0006897 - endocytosis [PMID:18156177]" - /experiment="EXISTENCE:mutant phenotype:GO:0007033 vacuole - organization [PMID:18156177]" - /experiment="EXISTENCE:mutant phenotype:GO:0030950 - establishment or maintenance of actin cytoskeleton - polarity [PMID:18156177]" - /note="BAR domain protein that localizes to early and late - Golgi vesicles; required for adaptation to varying - nutrient concentrations, fluid-phase endocytosis, - polarization of the actin cytoskeleton, and vacuole - biogenesis" - /codon_start=1 - /product="Gvp36p" - /protein_id="NP_012223.3" - /db_xref="GeneID:854770" - /db_xref="SGD:S000001303" - /translation="MSFNAFASSLSKKLQEISTSVSEKTQELPSLAQSTQRMVQERLG - QVTDISQLPREYTELEDKVDTIKLIYNHFLGVTAIYENGSYDYPKYINESVNEFSRSV - ASKLTELTHATSASEAQNILVAPGPIKEPKTLNYALSKVALNSSECLNKMFPTEEQPL - ASALLQFSDVQAKIAQARIQQDTLIQTKFNKNLRERLSFEIGKADKCRKDVHSMRLRY - DVARTNLANNKKPEKEASLRVQMETLEDQFAQVTEDATVCLQEVISHANFSEDLKELA - KAQAEYFETSAGLMKEFLSNSFAEEPEAKPEVAEEEKPQTAISMNDEDDA" - gene <277723..>278139 - /gene="APQ12" - /locus_tag="YIL040W" - /db_xref="GeneID:854771" - mRNA <277723..>278139 - /gene="APQ12" - /locus_tag="YIL040W" - /product="Apq12p" - /transcript_id="NM_001179390.1" - /db_xref="GeneID:854771" - CDS 277723..278139 - /gene="APQ12" - /locus_tag="YIL040W" - /experiment="EXISTENCE:direct assay:GO:0005635 nuclear - envelope [PMID:15273328|PMID:26432634]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum - [PMID:14562095|PMID:15273328|PMID:26432634|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0016020 membrane - [PMID:17724120]" - /experiment="EXISTENCE:genetic interaction:GO:0055088 - lipid homeostasis [PMID:20016074|PMID:26432634]" - /experiment="EXISTENCE:mutant phenotype:GO:0006998 nuclear - envelope organization [PMID:17724120|PMID:20016074]" - /experiment="EXISTENCE:mutant phenotype:GO:0055088 lipid - homeostasis [PMID:20016074|PMID:26432634]" - /note="Nuclear envelope/ER integral membrane protein; - interacts and functions with Brr6p and Brl1p in lipid - homeostasis; mutants are defective in nuclear pore complex - biogenesis, nuclear envelope morphology, mRNA export from - the nucleus and are sensitive to sterol biosynthesis - inhibitors and membrane fluidizing agents; exhibits - synthetic lethal genetic interactions with genes involved - in lipid metabolism" - /codon_start=1 - /product="Apq12p" - /protein_id="NP_012224.1" - /db_xref="GeneID:854771" - /db_xref="SGD:S000001302" - /translation="MDATQPQYELSVVTQCLKSAIDVIQWLIPTITKFSQSHPLVFQL - LFIFFTFYVFYKLLMNFITLVKRFLYLTLVVTCIGIYMRGSQQFLTVDLLNFYNFVMS - NRYYAFKIYTLFINALEREINTVYHLAQMKMEQLLK" - gene <278426..>279847 - /gene="TED1" - /locus_tag="YIL039W" - /db_xref="GeneID:854772" - mRNA <278426..>279847 - /gene="TED1" - /locus_tag="YIL039W" - /product="Ted1p" - /transcript_id="NM_001179389.1" - /db_xref="GeneID:854772" - CDS 278426..279847 - /gene="TED1" - /locus_tag="YIL039W" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:14562095|PMID:26928762]" - /experiment="EXISTENCE:genetic interaction:GO:0006888 - endoplasmic reticulum to Golgi vesicle-mediated transport - [PMID:17989219]" - /experiment="EXISTENCE:mutant phenotype:GO:0006888 - endoplasmic reticulum to Golgi vesicle-mediated transport - [PMID:17989219]" - /note="GPI-glycan remodelase; conserved phosphoesterase - domain-containing protein; acts together with - Emp24p/Erv25p in cargo exit from the ER; functional - ortholog of mammalian GPI-glycan remodelase PGAP5; - deletion confers sensitivity to - 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO)" - /codon_start=1 - /product="Ted1p" - /protein_id="NP_012225.1" - /db_xref="GeneID:854772" - /db_xref="SGD:S000001301" - /translation="MLRCAVKKFAYFATFLTIVANIYIYTYPSFHPEQCSWNCSNKNA - PLQKDLTFVDKVKNYFSDVREQWHGSHASAGNDEDIHILAFGDPQIKGIWPKTPYVSR - LDTYGNDYYLGHIYDMMQQRLKPQVVTVMGDLFSSQWIGDSEFHNRTKRYISRIFKRD - PTSIENIKQQNLDEKGQYKANWPEWGDRFNEILDNVKENEADNQELSFGFGYENIHSW - NPDLEDFLIINITGNHDVGYSGDATYQHMTRFHDLFGKDNYWIEYETNTTHPWRIVVL - NDLLLEGPALQPEFVEATWIFLNQLNERKFNGSTVLLTHVPFYKREGLCVDGPDTRYY - PDAHAPESYKSGLLRSQNHLSESVSNQVLNMIFENGKPGIILTGHDHEGCETVYNKKS - TSTWEATKNIESDVFVKEITVKSMMGEFNGNTGLVTGHFNTDSMTWEWTFSLCPFAIQ - HVWWFAKVSLLVTIFTWSSLLFV" - gene complement(<280142..>282652) - /gene="NOT3" - /locus_tag="YIL038C" - /db_xref="GeneID:854773" - mRNA complement(<280142..>282652) - /gene="NOT3" - /locus_tag="YIL038C" - /product="CCR4-NOT core subunit NOT3" - /transcript_id="NM_001179388.3" - /db_xref="GeneID:854773" - CDS complement(280142..282652) - /gene="NOT3" - /locus_tag="YIL038C" - /experiment="EXISTENCE:direct assay:GO:0000289 - nuclear-transcribed mRNA poly(A) tail shortening - [PMID:11889048]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11889048]" - /experiment="EXISTENCE:direct assay:GO:0032968 positive - regulation of transcription elongation by RNA polymerase - II [PMID:21406554]" - /experiment="EXISTENCE:mutant phenotype:GO:0000290 - deadenylation-dependent decapping of nuclear-transcribed - mRNA [PMID:26952104]" - /experiment="EXISTENCE:mutant phenotype:GO:0016567 protein - ubiquitination [PMID:16926149]" - /experiment="EXISTENCE:physical interaction:GO:0005515 - protein binding [PMID:26952104]" - /experiment="EXISTENCE:physical interaction:GO:0030015 - CCR4-NOT core complex [PMID:10490603]" - /note="Component of the CCR4-NOT core complex, involved in - mRNA decapping; involved in transcription initiation and - elongation and in mRNA degradation; conserved lysine in - human homolog of Not3p and Not5p is mutated in cancers" - /codon_start=1 - /product="CCR4-NOT core subunit NOT3" - /protein_id="NP_012226.3" - /db_xref="GeneID:854773" - /db_xref="SGD:S000001300" - /translation="MAHRKLQQEVDRVFKKINEGLEIFNSYYERHESCTNNPSQKDKL - ESDLKREVKKLQRLREQIKSWQSSPDIKDKDSLLDYRRSVEIAMEKYKAVEKASKEKA - YSNISLKKSETLDPQERERRDISEYLSQMIDELERQYDSLQVEIDKLLLLNKKKKTSS - TTNDEKKEQYKRFQARYRWHQQQMELALRLLANEELDPQDVKNVQDDINYFVESNQDP - DFVEDETIYDGLNLQSNEAIAHEVAQYFASQNAEDNNTSDANESLQDISKLSKKEQRK - LEREAKKAAKLAAKNATGAAIPVAGPSSTPSPVIPVADASKETERSPSSSPIHNATKP - EEAVKTSIKSPRSSADNLLPSLQKSPSSATPETPTNVHTHIHQTPNGITGATTLKPAT - LPAKPAGELKWAVAASQAVEKDRKVTSASSTISNTSTKTPTTAAATTTSSNANSRIGS - ALNTPKLSTSSLSLQPDNTGASSSAATAAAVLAAGAAAVHQNNQAFYRNMSSSHHPLV - SLATNPKSEHEVATTVNQNGPENTTKKVMEQKEEESPEERNKLQVPTFGVFDDDFESD - RDSETEPEEEEQPSTPKYLSLEQREAKTNEIKKEFVSDFETLLLPSGVQEFIMSSELY - NSQIESKITYKRSRDMCEISRLVEVPQGVNPPSPLDAFRSTQQWDVMRCSLRDIIIGS - ERLKEDSSSIYAKILENFRTLEMFSLFYNYYFAITPLEREIAYKILNERDWKVSKDGT - MWFLRQGEVKFFNEICEVGDYKIFKLDDWTVIDKINFRLDYSFLQPPVDTASEVRDVS - VDNNNVNDQSNVTLEQQKQEISHGKQLLKQLKQGKISV" - gene complement(<283029..>284999) - /gene="PRM2" - /locus_tag="YIL037C" - /db_xref="GeneID:854774" - mRNA complement(<283029..>284999) - /gene="PRM2" - /locus_tag="YIL037C" - /product="pheromone-regulated protein PRM2" - /transcript_id="NM_001179387.3" - /db_xref="GeneID:854774" - CDS complement(283029..284999) - /gene="PRM2" - /locus_tag="YIL037C" - /experiment="EXISTENCE:mutant phenotype:GO:0000742 - karyogamy involved in conjugation with cellular fusion - [PMID:17101777]" - /note="Pheromone-regulated protein; predicted to have 4 - transmembrane segments and a coiled coil domain; regulated - by Ste12p; required for efficient nuclear fusion" - /codon_start=1 - /product="pheromone-regulated protein PRM2" - /protein_id="NP_012227.3" - /db_xref="GeneID:854774" - /db_xref="SGD:S000001299" - /translation="MNNVHIIKPLSLPQRFFSCIFHPLLLIFFTSVILTIWGSFSVID - ITMAKMSHAQVKRNDTVSTFASISTATATATTTATTTATMTAVTTQHAIYSANSYSLN - KTFIDNTIDQYFESKLRSIESTVGTDMQEKFKSYTDDILDNKQKLINDQISLETELIK - EVLEVNNTIFNELLTKSQLINDTWNEISEDAMTIDKDSISQMASNLLLNYSMFDSIFG - NYSRKLKSLQNFNGTITDFSTQLDTSSTLSLNFLRNSTDWLQLKRNFTANLQNEISIL - SGGSTEVTSSTSIIKRSLKTNSEENSVLSAVKNHVFRKCKRMTIIFTVMYFAFVILLM - AIERILFQLENQQVNLVMSQINGLTGQTNFTKYNKVLKSLITTLNLSTLYPIPYQLTK - LINQKIFKREPEKIDDKKVKKSKLFYCNWWIISNGAHLWLFGFLMLLIHWQIVTRLTN - FEVPSLPTFHKRAGPSLYKREVWTDGNITTTIEGFINDSVSLLCENFQMEVNEKFITA - NLSLQTDPNLKVQSTDILNLWVNDTNTQFEKYLNESSQNWQGIDLQVEPLLGSDSINE - FLGQYFLPTYEVTNTNSSFALDIQKYGIINRGINITNASVAALSSLSKRQIKDKEQKQ - TYFLHTVYKWGLLAVCLTILFHHMLIFIILKL" - gene <285666..>287429 - /gene="CST6" - /locus_tag="YIL036W" - /gene_synonym="ACA2; SHF1" - /db_xref="GeneID:854775" - mRNA <285666..>287429 - /gene="CST6" - /locus_tag="YIL036W" - /gene_synonym="ACA2; SHF1" - /product="Cst6p" - /transcript_id="NM_001179386.1" - /db_xref="GeneID:854775" - CDS 285666..287429 - /gene="CST6" - /locus_tag="YIL036W" - /gene_synonym="ACA2; SHF1" - /experiment="EXISTENCE:direct assay:GO:0001228 DNA-binding - transcription activator activity, RNA polymerase - II-specific [PMID:10825197]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0006357 regulation - of transcription by RNA polymerase II [PMID:27143390]" - /experiment="EXISTENCE:direct assay:GO:0043565 - sequence-specific DNA binding - [PMID:10825197|PMID:27143390]" - /experiment="EXISTENCE:direct assay:GO:0045944 positive - regulation of transcription by RNA polymerase II - [PMID:10825197]" - /experiment="EXISTENCE:mutant phenotype:GO:0061429 - positive regulation of transcription from RNA polymerase - II promoter by oleic acid [PMID:20395639]" - /experiment="EXISTENCE:mutant phenotype:GO:0071244 - cellular response to carbon dioxide [PMID:22253597]" - /experiment="EXISTENCE:mutant phenotype:GO:0071400 - cellular response to oleic acid [PMID:20395639]" - /note="Basic leucine zipper (bZIP) transcription factor - from ATF/CREB family involved in stress-responsive - regulatory network; mediates transcriptional activation of - NCE103 in response to low CO2 levels; proposed to be a - regulator of oleate responsive genes; involved in - utilization of non-optimal carbon sources and chromosome - stability; relocalizes to the cytosol in response to - hypoxia; CST6 has a paralog, ACA1, that arose from the - whole genome duplication" - /codon_start=1 - /product="Cst6p" - /protein_id="NP_012228.1" - /db_xref="GeneID:854775" - /db_xref="SGD:S000001298" - /translation="MFTGQEYHSVDSNSNKQKDNNKRGIDDTSKILNNKIPHSVSDTS - AAATTTSTMNNSALSRSLDPTDINYSTNMAGVVDQIHDYTTSNRNSLTPQYSIAAGNV - NSHDRVVKPSANSNYQQAAYLRQQQQQDQRQQSPSMKTEEESQLYGDILMNSGVVQDM - HQNLATHTNLSQLSSTRKSAPNDSTTAPTNASNIANTASVNKQMYFMNMNMNNNPHAL - NDPSILETLSPFFQPFGVDVAHLPMTNPPIFQSSLPGCDEPIRRRRISISNGQISQLG - EDIETLENLHNTQPPPMPNFHNYNGLSQTRNVSNKPVFNQAVPVSSIPQYNAKKVINP - TKDSALGDQSVIYSKSQQRNFVNAPSKNTPAESISDLEGMTTFAPTTGGENRGKSALR - ESHSNPSFTPKSQGSHLNLAANTQGNPIPGTTAWKRARLLERNRIAASKCRQRKKVAQ - LQLQKEFNEIKDENRILLKKLNYYEKLISKFKKFSKIHLREHEKLNKDSDNNVNGTNS - SNKNESMTVDSLKIIEELLMIDSDVTEVDKDTGKIIAIKHEPYSQRFGSDTDDDDIDL - KPVEGGKDPDNQSLPNSEKIK" - gene complement(<287790..>288908) - /gene="CKA1" - /locus_tag="YIL035C" - /db_xref="GeneID:854776" - mRNA complement(<287790..>288908) - /gene="CKA1" - /locus_tag="YIL035C" - /product="casein kinase 2 catalytic subunit CKA1" - /transcript_id="NM_001179385.1" - /db_xref="GeneID:854776" - CDS complement(287790..288908) - /gene="CKA1" - /locus_tag="YIL035C" - /EC_number="2.7.11.1" - /experiment="EXISTENCE:direct assay:GO:0004672 protein - kinase activity [PMID:16319894]" - /experiment="EXISTENCE:direct assay:GO:0004674 protein - serine/threonine kinase activity [PMID:8226802]" - /experiment="EXISTENCE:direct assay:GO:0005956 protein - kinase CK2 complex [PMID:8135547]" - /experiment="EXISTENCE:direct assay:GO:0006356 regulation - of transcription by RNA polymerase I [PMID:11551505]" - /experiment="EXISTENCE:direct assay:GO:0006359 regulation - of transcription by RNA polymerase III [PMID:11551505]" - /experiment="EXISTENCE:direct assay:GO:0006974 DNA damage - response [PMID:11551505]" - /experiment="EXISTENCE:direct assay:GO:0034456 UTP-C - complex [PMID:17515605]" - /experiment="EXISTENCE:genetic interaction:GO:0007535 - donor selection [PMID:22496671]" - /note="Alpha catalytic subunit of casein kinase 2 (CK2); a - Ser/Thr protein kinase with roles in cell growth and - proliferation; CK2, comprised of CKA1, CKA2, CKB1 and - CKB2, has many substrates including transcription factors - and all RNA polymerases; regulates Fkh1p-mediated donor - preference during mating-type switching" - /codon_start=1 - /product="casein kinase 2 catalytic subunit CKA1" - /protein_id="NP_012229.1" - /db_xref="GeneID:854776" - /db_xref="SGD:S000001297" - /translation="MKCRVWSEARVYTNINKQRTEEYWDYENTVIDWSTNTKDYEIEN - KVGRGKYSEVFQGVKLDSKVKIVIKMLKPVKKKKIKREIKILTDLSNEKVPPTTLPFQ - KDQYYTNQKEDVLKFIRPYIFDQPHNGHANIIHLFDIIKDPISKTPALVFEYVDNVDF - RILYPKLTDLEIRFYMFELLKALDYCHSMGIMHRDVKPHNVMIDHKNKKLRLIDWGLA - EFYHVNMEYNVRVASRFFKGPELLVDYRMYDYSLDLWSFGTMLASMIFKREPFFHGTS - NTDQLVKIVKVLGTSDFEKYLLKYEITLPREFYDMDQYIRKPWHRFINDGNKHLSGND - EIIDLIDNLLRYDHQERLTAKEAMGHPWFAPIREQIEK" - gene complement(<289226..>290089) - /gene="CAP2" - /locus_tag="YIL034C" - /db_xref="GeneID:854777" - mRNA complement(<289226..>290089) - /gene="CAP2" - /locus_tag="YIL034C" - /product="F-actin-capping protein subunit beta" - /transcript_id="NM_001179384.3" - /db_xref="GeneID:854777" - CDS complement(289226..290089) - /gene="CAP2" - /locus_tag="YIL034C" - /experiment="EXISTENCE:direct assay:GO:0000131 incipient - cellular bud site [PMID:1315784]" - /experiment="EXISTENCE:direct assay:GO:0000142 cellular - bud neck contractile ring [PMID:36729023]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0005934 cellular - bud tip [PMID:1315784|PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0008290 F-actin - capping protein complex [PMID:14769858]" - /experiment="EXISTENCE:direct assay:GO:0030479 actin - cortical patch [PMID:14769858]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:19053807]" - /experiment="EXISTENCE:direct assay:GO:0051016 barbed-end - actin filament capping [PMID:14769858|PMID:1315784]" - /experiment="EXISTENCE:mutant phenotype:GO:0008290 F-actin - capping protein complex [PMID:14769858]" - /experiment="EXISTENCE:mutant phenotype:GO:0030447 - filamentous growth [PMID:15645503]" - /experiment="EXISTENCE:mutant phenotype:GO:0051015 actin - filament binding [PMID:14769858]" - /note="Beta subunit of the capping protein heterodimer - (Cap1p and Cap2p); capping protein (CP) binds to the - barbed ends of actin filaments preventing further - polymerization; localized predominantly to cortical actin - patches and the cytokinetic contractile ring; protein - increases in abundance and relocalizes from bud neck to - plasma membrane upon DNA replication stress" - /codon_start=1 - /product="F-actin-capping protein subunit beta" - /protein_id="NP_012230.3" - /db_xref="GeneID:854777" - /db_xref="SGD:S000001296" - /translation="MSDAQFDAALDLLRRLNPTTLQENLNNLIELQPNLAQDLLSSVD - VPLSTQKDSADSNREYLCCDYNRDIDSFRSPWSNTYYPELSPKDLQDSPFPSAPLRKL - EILANDSFDVYRDLYYEGGISSVYLWDLNEEDFNGHDFAGVVLFKKNQSDHSNWDSIH - VFEVTTSPSSPDSFNYRVTTTIILHLDKTKTDQNSHMMLSGNLTRQTEKDIAIDMSRP - LDVIFTSHVANLGSLIEDIESQMRNLLETVYFEKTRDIFHQTKNAAIASSAEEANKDA - QAEVIRGLQSL" - gene complement(<290419..>291669) - /gene="BCY1" - /locus_tag="YIL033C" - /gene_synonym="SRA1" - /db_xref="GeneID:854778" - mRNA complement(<290419..>291669) - /gene="BCY1" - /locus_tag="YIL033C" - /gene_synonym="SRA1" - /product="cAMP-dependent protein kinase regulatory subunit - BCY1" - /transcript_id="NM_001179383.1" - /db_xref="GeneID:854778" - CDS complement(290419..291669) - /gene="BCY1" - /locus_tag="YIL033C" - /gene_synonym="SRA1" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:26403272]" - /experiment="EXISTENCE:direct assay:GO:0004862 - cAMP-dependent protein kinase inhibitor activity - [PMID:3037314]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:11134339|PMID:11914276|PMID:18417610|PMID:22842922|P - MID:3288487]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11134339|PMID:11914276|PMID:22842922]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:2831892]" - /experiment="EXISTENCE:direct assay:GO:0046580 negative - regulation of Ras protein signal transduction - [PMID:3037314]" - /experiment="EXISTENCE:genetic interaction:GO:0097271 - protein localization to bud neck [PMID:12782684]" - /experiment="EXISTENCE:mutant phenotype:GO:0004862 - cAMP-dependent protein kinase inhibitor activity - [PMID:6292221]" - /experiment="EXISTENCE:mutant phenotype:GO:0010603 - regulation of cytoplasmic mRNA processing body assembly - [PMID:21925385]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:26947009]" - /experiment="EXISTENCE:mutant phenotype:GO:0046580 - negative regulation of Ras protein signal transduction - [PMID:3037314]" - /note="Regulatory subunit of the cyclic AMP-dependent - protein kinase (PKA); PKA is a component of a signaling - pathway that controls a variety of cellular processes, - including metabolism, cell cycle, stress response, - stationary phase, and sporulation; regulator of meiotic - commitment" - /codon_start=1 - /product="cAMP-dependent protein kinase regulatory subunit - BCY1" - /protein_id="NP_012231.1" - /db_xref="GeneID:854778" - /db_xref="SGD:S000001295" - /translation="MVSSLPKESQAELQLFQNEINAANPSDFLQFSANYFNKRLEQQR - AFLKAREPEFKAKNIVLFPEPEESFSRPQSAQSQSRSRSSVMFKSPFVNEDPHSNVFK - SGFNLDPHEQDTHQQAQEEQQHTREKTSTPPLPMHFNAQRRTSVSGETLQPNNFDDWT - PDHYKEKSEQQLQRLEKSIRNNFLFNKLDSDSKRLVINCLEEKSVPKGATIIKQGDQG - DYFYVVEKGTVDFYVNDNKVNSSGPGSSFGELALMYNSPRAATVVATSDCLLWALDRL - TFRKILLGSSFKKRLMYDDLLKSMPVLKSLTTYDRAKLADALDTKIYQPGETIIREGD - QGENFYLIEYGAVDVSKKGQGVINKLKDHDYFGEVALLNDLPRQATVTATKRTKVATL - GKSGFQRLLGPAVDVLKLNDPTRH" - gene <292633..>295737 - /gene="ULP2" - /locus_tag="YIL031W" - /gene_synonym="SMT4" - /db_xref="GeneID:854780" - mRNA <292633..>295737 - /gene="ULP2" - /locus_tag="YIL031W" - /gene_synonym="SMT4" - /product="SUMO protease ULP2" - /transcript_id="NM_001179381.1" - /db_xref="GeneID:854780" - CDS 292633..295737 - /gene="ULP2" - /locus_tag="YIL031W" - /gene_synonym="SMT4" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:30575729]" - /experiment="EXISTENCE:direct assay:GO:0003711 - transcription elongation factor activity [PMID:31313851]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10713161]" - /experiment="EXISTENCE:direct assay:GO:0008234 - cysteine-type peptidase activity [PMID:10713161]" - /experiment="EXISTENCE:direct assay:GO:0016926 protein - desumoylation [PMID:10713161]" - /experiment="EXISTENCE:direct assay:GO:0016929 deSUMOylase - activity [PMID:10713161]" - /experiment="EXISTENCE:mutant phenotype:GO:0006276 plasmid - maintenance [PMID:10713161|PMID:11333221]" - /experiment="EXISTENCE:mutant phenotype:GO:0007094 mitotic - spindle assembly checkpoint signaling [PMID:10713162]" - /experiment="EXISTENCE:mutant phenotype:GO:0016926 protein - desumoylation [PMID:10713161]" - /experiment="EXISTENCE:mutant phenotype:GO:0016929 - deSUMOylase activity [PMID:10713161]" - /experiment="EXISTENCE:mutant phenotype:GO:0030261 - chromosome condensation [PMID:11333221]" - /note="Peptidase that deconjugates Smt3/SUMO-1 peptides - from proteins; plays a role in chromosome cohesion at - centromeric regions and recovery from checkpoint arrest - induced by DNA damage or DNA replication defects; - potential Cdc28p substrate; human homolog PML implicated - in promyelocytic leukemia can partially complement yeast - null mutant" - /codon_start=1 - /product="SUMO protease ULP2" - /protein_id="NP_012233.1" - /db_xref="GeneID:854780" - /db_xref="SGD:S000001293" - /translation="MSARKRKFNSLKPLDTLNSSRASSPRSSASLPPKRYNTFRKDPK - IVDHLNNASTKDFLPVLSMNSESKRQIELSDNDVDNNDEGEGVNSGCSDQDFEPLQSS - PLKRHSSLKSTSNGLLFQMSNNLGNGSPEPAVASTSPNGSIISTKLNLNGQFSCVDSK - TLRIYRHKAPCIMTFVSDHNHPKFSLYFQQSVIYNSQVNLLDDVELIILDKKNSFMAI - ILKDLKKVKMILDVNNSSININTNILIWSTASSASNKKIKSIKRFLLMSYSSSIKVEI - LDHKEQILERLKHLIHPISSSSPSLNMERAINSTKNAFDSLRLKKTKLSTNDDESPQI - HTHFLSNKPHGLQSLTKRTRIASLGKKEHSISVPKSNISPSDFYNTNGTETLQSHAVS - QLRRSNRFKDVSDPANSNSNSEFDDATTEFETPELFKPSLCYKFNDGSSYTITNQDFK - CLFNKDWVNDSILDFFTKFYIESSIEKSIIKREQVHLMSSFFYTKLISNPADYYSNVK - KWVNNTDLFSKKYVVIPINISYHWFSCIITNLDAILDFHQNKDKNDAINSDEISINNP - LVNILTFDSLRQTHSREIDPIKEFLISYALDKYSIQLDKTQIKMKTCPVPQQPNMSDC - GVHVILNIRKFFENPVETIDVWKNSKIKSKHFTAKMINKYFDKNERNSARKNLRHTLK - LLQLNYISYLKKENLYEEVMQMEEKKSTNINNNENYDDDDEEIQIIENIDQSSKDNNA - QLTSEPPCSRSSSISTTEREPTELHNSVVRQPTGEIITDNEDPVRAASPETASVSPPI - RHNILKSSSPFISESANETEQEEFTSPYFGRPSLKTRAKQFEGVSSPIKNDQALSSTH - DIMMPSPKPKRIYPSKKIPQLSSHVQSLSTDSMERQSSPNNTNIVISDTEQDSRLGVN - SESKNTSGIVNRDDSDVNLIGSSLPNVAEKNHDNTQESNGNNDSLGKILQNVDKELNE - KLVDIDDVAFSSPTRGIPRTSATSKGSNAQLLSNYGDENNQSQDSVWDEGRDNPILLE - DEDP" - gene complement(<296050..>300009) - /gene="SSM4" - /locus_tag="YIL030C" - /gene_synonym="DOA10; KIS3" - /db_xref="GeneID:854781" - mRNA complement(<296050..>300009) - /gene="SSM4" - /locus_tag="YIL030C" - /gene_synonym="DOA10; KIS3" - /product="E3 ubiquitin-protein ligase SSM4" - /transcript_id="NM_001179380.3" - /db_xref="GeneID:854781" - CDS complement(296050..300009) - /gene="SSM4" - /locus_tag="YIL030C" - /gene_synonym="DOA10; KIS3" - /EC_number="2.3.2.27" - /experiment="EXISTENCE:direct assay:GO:0000837 Doa10p - ubiquitin ligase complex [PMID:16873066]" - /experiment="EXISTENCE:direct assay:GO:0004842 - ubiquitin-protein transferase activity [PMID:11641273]" - /experiment="EXISTENCE:direct assay:GO:0005635 nuclear - envelope [PMID:11641273]" - /experiment="EXISTENCE:direct assay:GO:0005637 nuclear - inner membrane [PMID:17051211]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:11641273]" - /experiment="EXISTENCE:direct assay:GO:0030970 retrograde - protein transport, ER to cytosol [PMID:32588820]" - /experiment="EXISTENCE:direct assay:GO:0061630 ubiquitin - protein ligase activity [PMID:25918226]" - /experiment="EXISTENCE:mutant phenotype:GO:0030433 - ubiquitin-dependent ERAD pathway - [PMID:11641273|PMID:15252059]" - /experiment="EXISTENCE:mutant phenotype:GO:0030970 - retrograde protein transport, ER to cytosol - [PMID:32588820]" - /note="Membrane-embedded ubiquitin-protein ligase and - retrotranslocase; ER and inner nuclear membrane localized - RING-CH domain E3 ligase involved in ER-associated protein - degradation (ERAD); aids Cdc48p in the extraction of - faulty membrane proteins; targets misfolded - cytosolic/nucleoplasmic domains of soluble and membrane - embedded proteins (ERAD-C) and Sbh2p, a transmembrane - domain-containing substrate (ERAD-M); C-terminal element, - conserved in human ortholog MARCH6, determines substrate - selectivity" - /codon_start=1 - /product="E3 ubiquitin-protein ligase SSM4" - /protein_id="NP_012234.3" - /db_xref="GeneID:854781" - /db_xref="SGD:S000001292" - /translation="MDVDSDVNVSRLRDELHKVANEETDTATFNDDAPSGATCRICRG - EATEDNPLFHPCKCRGSIKYMHESCLLEWVASKNIDISKPGADVKCDICHYPIQFKTI - YAENMPEKIPFSLLLSKSILTFFEKARLALTIGLAAVLYIIGVPLVWNMFGKLYTMML - DGSSPYPGDFLKSLIYGYDQSATPELTTRAIFYQLLQNHSFTSLQFIMIVILHIALYF - QYDMIVREDVFSKMVFHKIGPRLSPKDLKSRLKERFPMMDDRMVEYLAREMRAHDENR - QEQGHDRLNMPAAAADNNNNVINPRNDNVPPQDPNDHRNFENLRHVDELDHDEATEEH - ENNDSDNSLPSGDDSSRILPGSSSDNEEDEEAEGQQQQQQPEEEADYRDHIEPNPIDM - WANRRAQNEFDDLIAAQQNAINRPNAPVFIPPPAQNRAGNVDQDEQDFGAAVGVPPAQ - ANPDDQGQGPLVINLKLKLLNVIAYFIIAVVFTAIYLAISYLFPTFIGFGLLKIYFGI - FKVILRGLCHLYYLSGAHIAYNGLTKLVPKVDVAMSWISDHLIHDIIYLYNGYTENTM - KHSIFIRALPALTTYLTSVSIVCASSNLVSRGYGRENGMSNPTRRLIFQILFALKCTF - KVFTLFFIELAGFPILAGVMLDFSLFCPILASNSRMLWVPSICAIWPPFSLFVYWTIG - TLYMYWFAKYIGMIRKNIIRPGVLFFIRSPEDPNIKILHDSLIHPMSIQLSRLCLSMF - IYAIFIVLGFGFHTRIFFPFMLKSNLLSVPEAYKPTSIISWKFNTILLTLYFTKRILE - SSSYVKPLLERYWKTIFKLCSRKLRLSSFILGKDTPTERGHIVYRNLFYKYIAAKNAE - WSNQELFTKPKTLEQAEELFGQVRDVHAYFVPDGVLMRVPSSDIVSRNYVQTMFVPVT - KDDKLLKPLDLERIKERNKRAAGEFGYLDEQNTEYDQYYIVYVPPDFRLRYMTLLGLV - WLFASILMLGVTFISQALINFVCSFGFLPVVKLLLGERNKVYVAWKELSDISYSYLNI - YYVCVGSVCLSKIAKDILHFTEGQNTLDEHAVDENEVEEVEHDIPERDINNAPVNNIN - NVEEGQGIFMAIFNSIFDSMLVKYNLMVFIAIMIAVIRTMVSWVVLTDGILACYNYLT - IRVFGNSSYTIGNSKWFKYDESLLFVVWIISSMVNFGTGYKSLKLFFRNRNTSKLNFL - KTMALELFKQGFLHMVIYVLPIIILSLVFLRDVSTKQIIDISHGSRSFTLSLNESFPT - WTRMQDIYFGLLIALESFTFFFQATVLFIQWFKSTVQNVKDEVYTKGRALENLPDES" - gene complement(300228..300300) - /locus_tag="YNCI0007C" - /db_xref="GeneID:854782" - tRNA complement(300228..300300) - /locus_tag="YNCI0007C" - /product="tRNA-Lys" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:8915539]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:8915539]" - /experiment="EXISTENCE:mutant phenotype:GO:0030533 triplet - codon-amino acid adaptor activity [PMID:17560369]" - /experiment="EXISTENCE:mutant phenotype:GO:0032543 - mitochondrial translation [PMID:17560369]" - /note="Lysine tRNA (tRNA-Lys), predicted by tRNAscan-SE - analysis; a small portion is imported into mitochondria - via interaction with mt lysyl-tRNA synthetase Msk1p and is - necessary to decode AAG codons at high temperature, when - base modification of mt-encoded tRNA-Lys is reduced" - /db_xref="GeneID:854782" - /db_xref="SGD:S000006624" - repeat_region complement(300409..300727) - /note="Ty1 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007013" - gene complement(<300829..>301257) - /gene="EMA17" - /locus_tag="YIL029C" - /db_xref="GeneID:854783" - mRNA complement(<300829..>301257) - /gene="EMA17" - /locus_tag="YIL029C" - /product="Ema17p" - /transcript_id="NM_001179379.3" - /db_xref="GeneID:854783" - CDS complement(300829..301257) - /gene="EMA17" - /locus_tag="YIL029C" - /note="Protein involved in targeting mitochondrial - membrane protein precursors to mitochondrial translocation - system; deletion confers sensitivity to - 4-(N-(S-glutathionylacetyl)amino) phenylarsenoxide (GSAO); - YIL029C has a paralog, YPR071W, that arose from a - single-locus duplication" - /codon_start=1 - /product="Ema17p" - /protein_id="NP_012235.3" - /db_xref="GeneID:854783" - /db_xref="SGD:S000001291" - /translation="MRLIFIAKMLQYSFLPFSPFNLLNFDNSISVSWFITYSVIVSIW - GFAVWIEGAYRNKINLQLPRCTKIKCSRYNTRIKSPKWFNCKNWMHFFLLYLFLTASN - LIVQLAYFSKEMCSQGINVPGTKKPGNRVYLSVIILMGNG" - gene complement(<303679..>304104) - /gene="EMC5" - /locus_tag="YIL027C" - /gene_synonym="KRE27" - /db_xref="GeneID:854785" - mRNA complement(<303679..>304104) - /gene="EMC5" - /locus_tag="YIL027C" - /gene_synonym="KRE27" - /product="Emc5p" - /transcript_id="NM_001179377.1" - /db_xref="GeneID:854785" - CDS complement(303679..304104) - /gene="EMC5" - /locus_tag="YIL027C" - /gene_synonym="KRE27" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:14562095|PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0072546 EMC complex - [PMID:19325107]" - /experiment="EXISTENCE:genetic interaction:GO:0034975 - protein folding in endoplasmic reticulum [PMID:19325107]" - /note="Member of conserved ER transmembrane complex; - required for efficient folding of proteins in the ER; null - mutant displays induction of the unfolded protein - response, and also shows K1 killer toxin resistance; - homologous to worm B0334.15/EMC-5, fly CG15168, human - MMGT" - /codon_start=1 - /product="Emc5p" - /protein_id="NP_012237.1" - /db_xref="GeneID:854785" - /db_xref="SGD:S000001289" - /translation="MSFVSKLLYTVSALVLFHSGFSSYEFHHLLKLNSLNNAQGAISK - LPKDIMYETYAGLILFVLAVFTSFEKLQYLPIESNDGKIISQGNYLKEIALNKATNVD - NLIGSNPNGEIIFTPSFVDVHMKRKICREWASNTVKKEK" - gene complement(<304477..>307929) - /gene="IRR1" - /locus_tag="YIL026C" - /gene_synonym="SCC3" - /db_xref="GeneID:854786" - mRNA complement(<304477..>307929) - /gene="IRR1" - /locus_tag="YIL026C" - /gene_synonym="SCC3" - /product="Irr1p" - /transcript_id="NM_001179376.1" - /db_xref="GeneID:854786" - CDS complement(304477..307929) - /gene="IRR1" - /locus_tag="YIL026C" - /gene_synonym="SCC3" - /experiment="EXISTENCE:direct assay:GO:0003682 chromatin - binding [PMID:9990856]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10028182|PMID:22932476|PMID:28077952]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:28077952]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:22932476]" - /experiment="EXISTENCE:direct assay:GO:0030892 mitotic - cohesin complex [PMID:9990856]" - /experiment="EXISTENCE:mutant phenotype:GO:0007064 mitotic - sister chromatid cohesion [PMID:9990856]" - /note="Subunit of the cohesin complex; which is required - for sister chromatid cohesion during mitosis and meiosis - and interacts with centromeres and chromosome arms; - relocalizes to the cytosol in response to hypoxia; - essential for viability" - /codon_start=1 - /product="Irr1p" - /protein_id="NP_012238.1" - /db_xref="GeneID:854786" - /db_xref="SGD:S000001288" - /translation="MTAVRRSTRIRTKSQVIEEDYDDEQNTSAQHVESDKITAKTQHE - EEEEQDTGESEESSSEDDYEDQDDDDYVDTATAKRKSRKRKPKSASNTSSKRQKKKPT - SAQKSAVSHAPAYHRSKKDQDQYLEIAKDFQPTELFDILSTSEDVSIEELLREWLETY - SENRDKFLQEFINLLLNCCGSVARVEDHDVHSNESSNETIGEIQLLFQRQKLHEFYLL - ISKENKKRKNFKMGPLYQNFAEFMTKLLEVANDLQLLYVESDEDDTQIVTGNLVLDLL - TWLSSFSVCKIRCFRYISTLTLYLFQDYLTQQAVNLEKNYLAKLSKQLSLEEKKKRPN - NKTLEKLESTIAETQGSKVVIDSIIDNIVKLCFVHRYKDVSDLIRSESMLHLSIWIKN - YPEYFLKVTFLKYFGWLLSDNSVSVRLQVTKILPHLIIQNHNSKSTDNSAIRQVFERF - KTKILEVAIRDVNLDVRIHSIQVLTEASSLGYLDDSEILIISSLMFDEEFDPFKTSSF - NKRSKFLSTVAKFLARVIKEKFDEFIKTHEDLPKEVDGLEVGPVVQVGIFIKILNDSL - IYHLKDCAEVDSRTKIRMLTQAAEFLSPYISTHLKTICNLLISDTESNELIQKLQNSA - NNNSDDEDVDDEELDITPLFPIDRNSTILYLNVFHGLCAGANNPKIQTKDSVKEIVLP - LFYDLLNAASIESADILCPLLESFITFSLDDWISIGYETELKKITDKTIKAFMDSTIG - NSKVDMKYDIFAKFIHHIHHFEKKELQEKFLNQIATLKIHLKKFLQEKMDPNNSRDDY - KDLTCSLYELYINKLTILGRDYPIEVDEELLQLFLNNFVSRIPIMFQDFDDSTAQEIN - FKMLVLLATWNLEKWREIIEKVRDYENSISKDLRSVWKPIAAIIGRLNTLVISLAATN - ETFENINSLFYLKWSACTSLMDIIVAIKIFELKLPADATTWRYSMSEQFPFYLHDNAS - KVLLKIFLYLESLFAKQVDVQLERVADEDANLNDLPETGFFENIETEFLLFTVKLKGL - MKLNILDERFASRVALNKEKLGPLFKKIVDDTIMENPEPNKKNIQKAKSNQTQREKAP - LQPNSERETDHANTENNDPDIPMTIDLEPIEESSQNNSELAPIEEHPTVVDAIDNSDE - ITQD" - gene complement(<308602..>309171) - /locus_tag="YIL024C" - /db_xref="GeneID:854788" - mRNA complement(<308602..>309171) - /locus_tag="YIL024C" - /product="uncharacterized protein" - /transcript_id="NM_001179374.3" - /db_xref="GeneID:854788" - CDS complement(308602..309171) - /locus_tag="YIL024C" - /note="hypothetical protein; non-essential gene; - expression directly regulated by the metabolic and meiotic - transcriptional regulator Ume6p" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012240.3" - /db_xref="GeneID:854788" - /db_xref="SGD:S000001286" - /translation="MSNFLLVIPEDVIKGCSKADKLVVTGEFDNWRHSDYVLQYDGST - QNYRVQIPRRKGQRSTMFKVVINDKKWVTLNYFDTVTDKSGYTNNILHFKDNEASQLM - DIPLSPHTRSNTAKGKPEDDSLNDYVNLSSHSDLSSTEEIVCWNSDMEDENMDATIQC - DFHQAFNSRKESLNGLMCIAKKVKTYWNK" - gene complement(<309386..>310426) - /gene="YKE4" - /locus_tag="YIL023C" - /db_xref="GeneID:854789" - mRNA complement(<309386..>310426) - /gene="YKE4" - /locus_tag="YIL023C" - /product="Zn(2+) transporter YKE4" - /transcript_id="NM_001179373.1" - /db_xref="GeneID:854789" - CDS complement(309386..310426) - /gene="YKE4" - /locus_tag="YIL023C" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:16760462|PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0005385 zinc - ion transmembrane transporter activity [PMID:16760462]" - /experiment="EXISTENCE:mutant phenotype:GO:0006829 zinc - ion transport [PMID:16760462]" - /note="Zinc transporter; localizes to the ER; null mutant - is sensitive to calcofluor white, leads to zinc - accumulation in cytosol; ortholog of the mouse KE4 and - member of the ZIP (ZRT, IRT-like Protein) family" - /codon_start=1 - /product="Zn(2+) transporter YKE4" - /protein_id="NP_012241.1" - /db_xref="GeneID:854789" - /db_xref="SGD:S000001285" - /translation="MKASHICSYLLSIAPLVVSHGVHHNRDHGHEANHESKQSFLILK - QESIFYSLVCFLQNHLFVLGPRYNAIVAILIIQLMPCLFVLFVPGLRKNDRASLTLSL - LVSFSLGTLLGDILLHVIPESLSGVTDVTMVGGAIFLGFISFLTLDKTMRILSGTSND - DGSIHSHSHSHTPQQTAEKKAGFNMSAYLNVISGIAHHITDGIALATSFYSSTQVGIM - TSIAVTFHEIPHELGDFAILLSSGFTFPQAIRAQAVTAFGAVVGTSIGCWMNEIGNNS - HKATSSSANASELMLPFTAGGLIYIATTSVVPQILHSSAPDSKLREFKKWALQLVFIF - VGFAVMALMDEH" - gene <311165..>312460 - /gene="TIM44" - /locus_tag="YIL022W" - /gene_synonym="ISP45; MIM44; MPI1" - /db_xref="GeneID:854790" - mRNA <311165..>312460 - /gene="TIM44" - /locus_tag="YIL022W" - /gene_synonym="ISP45; MIM44; MPI1" - /product="protein translocase subunit TIM44" - /transcript_id="NM_001179372.1" - /db_xref="GeneID:854790" - CDS 311165..312460 - /gene="TIM44" - /locus_tag="YIL022W" - /gene_synonym="ISP45; MIM44; MPI1" - /experiment="EXISTENCE:direct assay:GO:0001405 PAM - complex, Tim23 associated import motor - [PMID:14517234|PMID:14638855]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:mutant phenotype:GO:0030150 protein - import into mitochondrial matrix - [PMID:1396562|PMID:18400944]" - /experiment="EXISTENCE:mutant phenotype:GO:0030674 - protein-macromolecule adaptor activity - [PMID:10824101|PMID:11344168]" - /experiment="EXISTENCE:mutant phenotype:GO:0051087 - protein-folding chaperone binding [PMID:11344168]" - /experiment="EXISTENCE:physical interaction:GO:0051087 - protein-folding chaperone binding [PMID:7809127]" - /note="Essential component of the TIM23 complex; tethers - the import motor and regulatory factors (PAM complex) to - the translocation channel (Tim23p-Tim17p core complex); - TIM23 complex is short for the translocase of the inner - mitochondrial membrane" - /codon_start=1 - /product="protein translocase subunit TIM44" - /protein_id="NP_012242.1" - /db_xref="GeneID:854790" - /db_xref="SGD:S000001284" - /translation="MHRSTFIRTSGTSSRTLTARYRSQYTGLLVARVLFSTSTTRAQG - GNPRSPLQIFRDTFKKEWEKSQELQENIKTLQDASGKLGESEAYKKAREAYLKAQRGS - TIVGKTLKKTGETMEHIATKAWESELGKNTRKAAAATAKKLDESFEPVRQTKIYKEVS - EVIDDGESSRYGGFITKEQRRLKRERDLASGKRHRAVKSNEDAGTAVVATNIESKESF - GKKVEDFKEKTVVGRSIQSLKNKLWDESENPLIVVMRKITNKVGGFFAETESSRVYSQ - FKLMDPTFSNESFTRHLREYIVPEILEAYVKGDVKVLKKWFSEAPFNVYAAQQKIFKE - QDVYADGRILDIRGVEIVSAKLLAPQDIPVLVVGCRAQEINLYRKKKTGEIAAGDEAN - ILMSSYAMVFTRDPEQIDDDETEGWKILEFVRGGSRQFT" - gene <312905..>313861 - /gene="RPB3" - /locus_tag="YIL021W" - /db_xref="GeneID:854791" - mRNA <312905..>313861 - /gene="RPB3" - /locus_tag="YIL021W" - /product="DNA-directed RNA polymerase II core subunit - RPB3" - /transcript_id="NM_001179371.3" - /db_xref="GeneID:854791" - CDS 312905..313861 - /gene="RPB3" - /locus_tag="YIL021W" - /experiment="EXISTENCE:direct assay:GO:0001055 RNA - polymerase II activity [PMID:8288647]" - /experiment="EXISTENCE:direct assay:GO:0003968 - RNA-dependent RNA polymerase activity [PMID:18004386]" - /experiment="EXISTENCE:direct assay:GO:0005654 nucleoplasm - [PMID:15520468]" - /experiment="EXISTENCE:direct assay:GO:0005665 RNA - polymerase II, core complex - [PMID:1331084|PMID:2186966|PMID:2183013]" - /experiment="EXISTENCE:mutant phenotype:GO:0006366 - transcription by RNA polymerase II [PMID:2685562]" - /experiment="EXISTENCE:mutant phenotype:GO:0006369 - termination of RNA polymerase II transcription - [PMID:16537912]" - /note="RNA polymerase II third largest subunit B44; part - of central core; similar to prokaryotic alpha subunit" - /codon_start=1 - /product="DNA-directed RNA polymerase II core subunit - RPB3" - /protein_id="NP_012243.3" - /db_xref="GeneID:854791" - /db_xref="SGD:S000001283" - /translation="MSEEGPQVKIREASKDNVDFILSNVDLAMANSLRRVMIAEIPTL - AIDSVEVETNTTVLADEFIAHRLGLIPLQSMDIEQLEYSRDCFCEDHCDKCSVVLTLQ - AFGESESTTNVYSKDLVIVSNLMGRNIGHPIIQDKEGNGVLICKLRKGQELKLTCVAK - KGIAKEHAKWGPAAAIEFEYDPWNKLKHTDYWYEQDSAKEWPQSKNCEYEDPPNEGDP - FDYKAQADTFYMNVESVGSIPVDQVVVRGIDTLQKKVASILLALTQMDQDKVNFASGD - NNTASNMLGSNEDVMMTGAEQDPYSNASQMGNTGSGGYDNAW" - rep_origin 313861..314035 - /note="ARS918; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130160" - gene complement(<314035..>314820) - /gene="HIS6" - /locus_tag="YIL020C" - /db_xref="GeneID:854792" - mRNA complement(<314035..>314820) - /gene="HIS6" - /locus_tag="YIL020C" - /product="1-(5-phosphoribosyl)-5- - ((5-phosphoribosylamino)methylideneamino)imidazole-4- - carboxamide isomerase HIS6" - /transcript_id="NM_001179370.3" - /db_xref="GeneID:854792" - CDS complement(314035..314820) - /gene="HIS6" - /locus_tag="YIL020C" - /EC_number="5.3.1.16" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:genetic interaction:GO:0000105 - histidine biosynthetic process [PMID:9332345]" - /experiment="EXISTENCE:genetic interaction:GO:0003949 - 1-(5-phosphoribosyl)-5-[(5- - phosphoribosylamino)methylideneamino]imidazole-4- - carboxamide isomerase activity [PMID:9332345]" - /experiment="EXISTENCE:mutant phenotype:GO:0000105 - histidine biosynthetic process - [PMID:14190241|PMID:9332345]" - /note="Enzyme that catalyzes the fourth step in the - histidine pathway; - Phosphoribosylformimino-5-aminoimidazole carboxamide - ribotide isomerase; mutations cause histidine auxotrophy - and sensitivity to Cu, Co, and Ni salts" - /codon_start=1 - /product="1-(5-phosphoribosyl)-5- - ((5-phosphoribosylamino)methylideneamino)imidazole-4- - carboxamide isomerase HIS6" - /protein_id="NP_012244.3" - /db_xref="GeneID:854792" - /db_xref="SGD:S000001282" - /translation="MTKFIGCIDLHNGEVKQIVGGTLTSKKEDVPKTNFVSQHPSSYY - AKLYKDRDVQGCHVIKLGPNNDDAAREALQESPQFLQVGGGINDTNCLEWLKWASKVI - VTSWLFTKEGHFQLKRLERLTELCGKDRIVVDLSCRKTQDGRWIVAMNKWQTLTDLEL - NADTFRELRKYTNEFLIHAADVEGLCGGIDELLVSKLFEWTKDYDDLKIVYAGGAKSV - DDLKLVDELSHGKVDLTFGSSLDIFGGNLVKFEDCCRWNEKQG" - gene <315093..>316133 - /gene="FAF1" - /locus_tag="YIL019W" - /db_xref="GeneID:854793" - mRNA <315093..>316133 - /gene="FAF1" - /locus_tag="YIL019W" - /product="Faf1p" - /transcript_id="NM_001179369.1" - /db_xref="GeneID:854793" - CDS 315093..316133 - /gene="FAF1" - /locus_tag="YIL019W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005730 nucleolus - [PMID:15078877|PMID:15178413]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:mutant phenotype:GO:0000462 - maturation of SSU-rRNA from tricistronic rRNA transcript - (SSU-rRNA, 5.8S rRNA, LSU-rRNA) - [PMID:15078877|PMID:15178413]" - /note="Protein required for pre-rRNA processing; also - required for 40S ribosomal subunit assembly" - /codon_start=1 - /product="Faf1p" - /protein_id="NP_012245.1" - /db_xref="GeneID:854793" - /db_xref="SGD:S000001281" - /translation="MTLDDDDYIKQMELQRKAFESQFGSLESMGFEDKTKNIRTEVDT - RDSSGDEIDNSDHGSDFKDGTIESSNSSDEDSGNETAEENNQDSKPKTQPKVIRFNGP - SDVYVPPSKKTQKLLRSGKTLTQINKKLESTEAKEEKEDETLEAENLQNDLELQQFLR - ESHLLSAFNNGGSGSTNSGVSLTLQSMGGGNDDGIVYQDDQVIGKARSRTLEMRLNRL - SRVNGHQDKINKLEKVPMHIRRGMIDKHVKRIKKYEQEAAEGGIVLSKVKKGQFRKIE - STYKKDIERRIGGSIKARDKEKATKRERGLKISSVGRSTRNGLIVSKRDIARISGGER - SGKFNGKKKSRR" - gene <316768..>317932 - /gene="RPL2B" - /locus_tag="YIL018W" - /gene_synonym="LOT2; RPL5A" - /db_xref="GeneID:854794" - mRNA join(<316768..316771,317172..>317932) - /gene="RPL2B" - /locus_tag="YIL018W" - /gene_synonym="LOT2; RPL5A" - /product="ribosomal 60S subunit protein L2B" - /transcript_id="NM_001179368.1" - /db_xref="GeneID:854794" - CDS join(316768..316771,317172..317932) - /gene="RPL2B" - /locus_tag="YIL018W" - /gene_synonym="LOT2; RPL5A" - /experiment="EXISTENCE:direct assay:GO:0002181 cytoplasmic - translation [PMID:18782943]" - /experiment="EXISTENCE:direct assay:GO:0003735 structural - constituent of ribosome [PMID:18782943]" - /experiment="EXISTENCE:direct assay:GO:0022625 cytosolic - large ribosomal subunit [PMID:18782943]" - /note="Ribosomal 60S subunit protein L2B; homologous to - mammalian ribosomal protein L2 and bacterial L2; RPL2B has - a paralog, RPL2A, that arose from the whole genome - duplication; expression is upregulated at low - temperatures" - /codon_start=1 - /product="ribosomal 60S subunit protein L2B" - /protein_id="NP_012246.1" - /db_xref="GeneID:854794" - /db_xref="SGD:S000001280" - /translation="MGRVIRNQRKGAGSIFTSHTRLRQGAAKLRTLDYAERHGYIRGI - VKQIVHDSGRGAPLAKVVFRDPYKYRLREEIFIANEGVHTGQFIYAGKKASLNVGNVL - PLGSVPEGTIVSNVEEKPGDRGALARASGNYVIIIGHNPDENKTRVRLPSGAKKVISS - DARGVIGVIAGGGRVDKPLLKAGRAFHKYRLKRNSWPKTRGVAMNPVDHPHGGGNHQH - IGKASTISRGAVSGQKAGLIAARRTGLLRGSQKTQD" - gene complement(<318200..>320965) - /gene="VID28" - /locus_tag="YIL017C" - /gene_synonym="GID5; YIL017W" - /db_xref="GeneID:854795" - mRNA complement(<318200..>320965) - /gene="VID28" - /locus_tag="YIL017C" - /gene_synonym="GID5; YIL017W" - /product="glucose-induced degradation complex subunit - VID28" - /transcript_id="NM_001179367.3" - /db_xref="GeneID:854795" - CDS complement(318200..320965) - /gene="VID28" - /locus_tag="YIL017C" - /gene_synonym="GID5; YIL017W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0034657 GID complex - [PMID:16872538|PMID:18508925]" - /experiment="EXISTENCE:mutant phenotype:GO:0007039 protein - catabolic process in the vacuole [PMID:15358789]" - /experiment="EXISTENCE:mutant phenotype:GO:0030437 - ascospore formation [PMID:12586695]" - /experiment="EXISTENCE:mutant phenotype:GO:0043161 - proteasome-mediated ubiquitin-dependent protein catabolic - process [PMID:12686616|PMID:15358789]" - /experiment="EXISTENCE:mutant phenotype:GO:0045721 - negative regulation of gluconeogenesis [PMID:12686616]" - /note="GID Complex subunit, serves as adaptor for - regulatory subunit Vid24p; protein involved in - proteasome-dependent catabolite degradation of - fructose-1,6-bisphosphatase (FBPase); localized to the - nucleus and the cytoplasm" - /codon_start=1 - /product="glucose-induced degradation complex subunit - VID28" - /protein_id="NP_012247.3" - /db_xref="GeneID:854795" - /db_xref="SGD:S000001279" - /translation="MTVAYSLENLKKISNSLVGDQLAKVDYFLAPKCQIFQCLLSIEQ - SDGVELKNAKLDLLYTLLHLEPQQRDIVGTYYFDIVSAIYKSMSLASSFTKNNSSTNY - KYIKLLNLCAGVYPNCGFPDLQYLQNGFIQLVNHKFLRSKCKIDEVVTIIELLKLFLL - VDEKNCSDFNKSKFMEEEREVTETSHYQDFKMAESLEHIIVKISSKYLDQISLKYIVR - LKVSRPASPSSVKNDPFDNKGVDCTRAIPKKINISNMYDSSLLSLALLLYLRYHYMIP - GDRKLRNDATFKMFVLGLLKSNDVNIRCVALKFLLQPYFTEDKKWEDTRTLEKILPYL - VKSFNYDPLPWWFDPFDMLDSLIVLYNEITPMNNPVLTTLAHTNVIFCILSRFAQCLS - LPQHNEATLKTTTKFIKICASFAASDEKYRLLLLNDTLLLNHLEYGLESHITLIQDFI - SLKDEIKETTTESHSMCLPPIYDHDFVAAWLLLLKSFSRSVSALRTTLKRNKIAQLLL - QILSKTYTLTKECYFAGQDFMKPEIMIMGITLGSICNFVVEFSNLQSFMLRNGIIDII - EKMLTDPLFNSKKAWDDNEDERRIALQGIPVHEVKANSLWVLRHLMYNCQNEEKFQLL - AKIPMNLILDFINDPCWAVQAQCFQLLRNLTCNSRKIVNILLEKFKDVEYKIDPQTGN - KISIGSTYLFEFLAKKMRLLNPLDTQQKKAMEGILYIIVNLAAVNENKKQLVIEQDEI - LNIMSEILVETTTDSSSNGNDSNLKLACLWVLNNLLWNSSVSHYTQYAIENGLEPGHS - PSDSENPQSTVTIGYNESVAGGYSRGKYYDEPDGDDSSSNANDDEDDDNDEGDDEGDE - FVRTPAAKGSTSNVQVTRATVERCRKLVEVGLYDLVRKNITDESLSVREKARTLLYHM - DLLLKVK" - gene <321454..>321933 - /gene="SNL1" - /locus_tag="YIL016W" - /db_xref="GeneID:854796" - mRNA <321454..>321933 - /gene="SNL1" - /locus_tag="YIL016W" - /product="Snl1p" - /transcript_id="NM_001179366.1" - /db_xref="GeneID:854796" - CDS 321454..321933 - /gene="SNL1" - /locus_tag="YIL016W" - /experiment="EXISTENCE:direct assay:GO:0005635 nuclear - envelope [PMID:9450961]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:9450961]" - /experiment="EXISTENCE:direct assay:GO:0043022 ribosome - binding [PMID:22635919]" - /experiment="EXISTENCE:genetic interaction:GO:0006999 - nuclear pore organization [PMID:9450961]" - /experiment="EXISTENCE:physical interaction:GO:0006457 - protein folding [PMID:12105220]" - /note="Ribosome-associated protein; proposed to act in - protein synthesis, nuclear pore complex biogenesis and - maintenance as well as protein folding and prion - maintenance; has similarity to the mammalian BAG-1 - protein" - /codon_start=1 - /product="Snl1p" - /protein_id="NP_012248.1" - /db_xref="GeneID:854796" - /db_xref="SGD:S000001278" - /translation="MSHNAMEHWKSKLSKTSTSTYVLLAVIAVVFLVTIRRPNGSKGK - SSKKRASKKNKKGKNQFEKAPVPLTLEEQIDNVSLRYGNELEGRSKDLINRFDVEDEK - DIYERNYCNEMLLKLLIELDSIDLINVDESLRRPLKEKRKGVIKEIQAMLKSLDSLK" - gene <322342..>324105 - /gene="BAR1" - /locus_tag="YIL015W" - /gene_synonym="SST1" - /db_xref="GeneID:854797" - mRNA <322342..>324105 - /gene="BAR1" - /locus_tag="YIL015W" - /gene_synonym="SST1" - /product="aspartyl protease BAR1" - /transcript_id="NM_001179365.1" - /db_xref="GeneID:854797" - CDS 322342..324105 - /gene="BAR1" - /locus_tag="YIL015W" - /gene_synonym="SST1" - /EC_number="3.4.23.35" - /experiment="EXISTENCE:direct assay:GO:0000754 adaptation - of signaling pathway by response to pheromone involved in - conjugation with cellular fusion [PMID:6345506]" - /experiment="EXISTENCE:direct assay:GO:0004190 - aspartic-type endopeptidase activity [PMID:9249020]" - /experiment="EXISTENCE:direct assay:GO:0005576 - extracellular region [PMID:3124102]" - /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type - cell wall [PMID:10438739]" - /experiment="EXISTENCE:direct assay:GO:0043171 peptide - catabolic process [PMID:9249020]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0000754 - adaptation of signaling pathway by response to pheromone - involved in conjugation with cellular fusion - [PMID:7050666]" - /note="Aspartyl protease secreted to periplasmic space of - mating type a cell; helps cells monitor availability of - mating partners; cleaves and inactivates alpha factor - allowing cells to recover from alpha-factor-induced cell - cycle arrest" - /codon_start=1 - /product="aspartyl protease BAR1" - /protein_id="NP_012249.1" - /db_xref="GeneID:854797" - /db_xref="SGD:S000001277" - /translation="MSAINHLCLKLILASFAIINTITALTNDGTGHLEFLLQHEEEMY - YATTLDIGTPSQSLTVLFDTGSADFWVMDSSNPFCLPNSNTSSYSNATYNGEEVKPSI - DCRSMSTYNEHRSSTYQYLENGRFYITYADGTFADGSWGTETVSINGIDIPNIQFGVA - KYATTPVSGVLGIGFPRRESVKGYEGAPNEYYPNFPQILKSEKIIDVVAYSLFLNSPD - SGTGSIVFGAIDESKFSGDLFTFPMVNEYPTIVDAPATLAMTIQGLGAQNKSSCEHET - FTTTKYPVLLDSGTSLLNAPKVIADKMASFVNASYSEEEGIYILDCPVSVGDVEYNFD - FGDLQISVPLSSLILSPETEGSYCGFAVQPTNDSMVLGDVFLSSAYVVFDLDNYKISL - AQANWNASEVSKKLVNIQTDGSISGAKIATAEPWSTNEPFTVTSDIYSSTGCKSRPFL - QSSTASSLIAETNVQSRNCSTKMPGTRSTTVLSKPTQNSAMHQSTGAVTQTSNETKLE - LSSTMANSGSVSLPTSNSIDKEFEHSKSQTTSDPSVAEHSTFNQTFVHETKYRPTHKT - VITETVTKYSTVLINVCKPTY" - gene complement(324303..324374) - /locus_tag="YNCI0008C" - /db_xref="GeneID:854798" - tRNA complement(324303..324374) - /locus_tag="YNCI0008C" - /product="tRNA-Asp" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Aspartate tRNA (tRNA-Asp), predicted by tRNAscan-SE - analysis" - /db_xref="GeneID:854798" - /db_xref="SGD:S000006534" - repeat_region 324391..324734 - /note="Ty3 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007019" - repeat_region 324831..325164 - /note="Ty1 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007016" - gene complement(<325212..>325526) - /locus_tag="YIL014C-A" - /gene_synonym="YIL015C-A" - /db_xref="GeneID:854799" - mRNA complement(<325212..>325526) - /locus_tag="YIL014C-A" - /gene_synonym="YIL015C-A" - /product="uncharacterized protein" - /transcript_id="NM_001181433.3" - /db_xref="GeneID:854799" - CDS complement(325212..325526) - /locus_tag="YIL014C-A" - /gene_synonym="YIL015C-A" - /note="hypothetical protein; null mutant shows improved - incorporation efficiency of noncanonical amino acids in - place of amber stop codon" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012250.3" - /db_xref="GeneID:854799" - /db_xref="SGD:S000003536" - /translation="MDIDMNYPSITTLMSNESANLLIIWGNATPDISYLSYTTNPMLG - DYVLNVSAINGCTEELIATHLVPTLENATQWVYDAGEYWDNYSFTDESTPLPGLSWPF - NE" - gene 325748..325820 - /locus_tag="YNCI0009W" - /db_xref="GeneID:854800" - tRNA 325748..325820 - /locus_tag="YNCI0009W" - /product="tRNA-Thr" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Threonine tRNA (tRNA-Thr), predicted by tRNAscan-SE - analysis" - /db_xref="GeneID:854800" - /db_xref="SGD:S000006742" - gene <326103..>327995 - /gene="MNT3" - /locus_tag="YIL014W" - /db_xref="GeneID:854801" - mRNA <326103..>327995 - /gene="MNT3" - /locus_tag="YIL014W" - /product="alpha-1,3-mannosyltransferase MNT3" - /transcript_id="NM_001179364.3" - /db_xref="GeneID:854801" - CDS 326103..327995 - /gene="MNT3" - /locus_tag="YIL014W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005794 Golgi - apparatus [PMID:30700649]" - /experiment="EXISTENCE:genetic interaction:GO:0000033 - alpha-1,3-mannosyltransferase activity [PMID:10521541]" - /experiment="EXISTENCE:genetic interaction:GO:0006493 - protein O-linked glycosylation [PMID:10521541]" - /experiment="EXISTENCE:mutant phenotype:GO:0000033 - alpha-1,3-mannosyltransferase activity [PMID:10521541]" - /experiment="EXISTENCE:mutant phenotype:GO:0006493 protein - O-linked glycosylation [PMID:10521541]" - /note="Alpha-1,3-mannosyltransferase; adds the fourth and - fifth alpha-1,3-linked mannose residues to O-linked - glycans during protein O-glycosylation" - /codon_start=1 - /product="alpha-1,3-mannosyltransferase MNT3" - /protein_id="NP_012251.3" - /db_xref="GeneID:854801" - /db_xref="SGD:S000001276" - /translation="MLKSLKSRRLILKRLVTLLLSLFFSYLIFSASRNVTSSNKLNNH - ASERTAVESSAFNWIEKRQHQVRSENLMNRLSAYFLPFLSRSSHKERVLLRQLGNNEI - AKSDKCRYIFEVLYKIDPDWDNAQTAKFYNVDGVDNTLASLLGERLRSYDYCFLSGQL - DPTAIFANSTVNPHDLQNRMFPFLKKINEESKTVMWPIITDMTTGEAVPAPEVDMESS - NFNGNFWSNWNRLSKGRGFVLTIAEKDVPLFLKQLKVMEFSKNELPFQIVSTGNELSA - ESIAKISETAKETEQRVYLVDCSTVLDTNFANTYISFFQNKWVATLFNTFEEYILLDA - DVVPFVGSDYFFDSPSYRESGILLFKDRVMENEQTFQYCIEMLNEVEPSAQERRFIGS - RLVFDSSLPFSSETSEEASVYYNFFKKLRLHHVDSGLVVVNKLEKLNGLLMSFMLNLD - GKLQRCVYGDKEIFWLGQLYAGQDYSINPVDGSIIGPVNEEPENDDGHKSGMYYICST - QIAHSDSKNRLLWVNGGLKTCKISNSAEDDFGREPEYFKSRYGDISKLKRIYDASLNV - EGLIVPDVSVHPWMQIKECSNYMYCAYATGDGHTNSELDEGRLITFTEKELRYINDIS - RTWNAN" - gene complement(<328207..>332442) - /gene="PDR11" - /locus_tag="YIL013C" - /db_xref="GeneID:854802" - mRNA complement(<328207..>332442) - /gene="PDR11" - /locus_tag="YIL013C" - /product="ATP-binding cassette multidrug transporter - PDR11" - /transcript_id="NM_001179363.1" - /db_xref="GeneID:854802" - CDS complement(328207..332442) - /gene="PDR11" - /locus_tag="YIL013C" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:33375075]" - /experiment="EXISTENCE:direct assay:GO:0042626 - ATPase-coupled transmembrane transporter activity - [PMID:28922409]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:genetic interaction:GO:0035376 - sterol import [PMID:12077145|PMID:21110944]" - /experiment="EXISTENCE:mutant phenotype:GO:0035376 sterol - import [PMID:12077145]" - /experiment="EXISTENCE:mutant phenotype:GO:0042626 - ATPase-coupled transmembrane transporter activity - [PMID:28922409]" - /note="ATP-binding cassette (ABC) transporter; multidrug - transporter involved in multiple drug resistance; mediates - sterol uptake when sterol biosynthesis is compromised; - regulated by Pdr1p; required for anaerobic growth; PDR11 - has a paralog, AUS1, that arose from the whole genome - duplication" - /codon_start=1 - /product="ATP-binding cassette multidrug transporter - PDR11" - /protein_id="NP_012252.1" - /db_xref="GeneID:854802" - /db_xref="SGD:S000001275" - /translation="MSLSKYFNPIPDASVTFDGATVQLEESLGAVQNDEESASEFKNV - GHLEISDITFRANEGEVVLVLGNPTSALFKGLFHGHKHLKYSPEGSIRFKDNEYKQFA - SKCPHQIIYNNEQDIHFPYLTVEQTIDFALSCKFHIPKQERIEMRDELLKEFGLSHVK - KTYVGNDYVRGVSGGERKRISIIETFIANGSVYLWDNSTKGLDSATALEFLSITQKMA - KATRSVNFVKISQASDKIVSKFDKILMLGDSFQVFYGTMEECLTHFHDTLQIKKNPND - CIIEYLTSILNFKFKETSNSIVGLDTPSVVSEENQALNINNETDLHTLWIQSPYYKHW - KAITSKTVQECTRKDVNPDDISPIFSIPLKTQLKTCTVRAFERIIGDRNYLISQFVSV - VVQSLVIGSLFYNIPLTTIGSFSRGSLTFFSILFFTFLSLADMPASFQRQPVVRKHVQ - LHFYYNWVETLATNFFDCCSKFILVVIFTIILYFLAHLQYNAARFFIFLLFLSVYNFC - MVSLFALTALIAPTLSMANLLAGILLLAIAMYASYVIYMKDMHPWFIWIAYLNPAMFA - MEAILSNELFNLKLDCHESIIPRGEYYDNISFSHKACAWQGATLGNDYVRGRDYLKSG - LKYTYHHVWRNFGIIIGFLCFFLFCSLLAAEYITPLFTRENLLRWNNYLKRYCPFLNS - QKKNNKSAITNNDGVCTPKTPIANFSTSSSSVPSVSHQYDTDYNIKHPDETVNNHTKE - SVAMETQKHVISWKNINYTIGDKKLINDASGYISSGLTALMGESGAGKTTLLNVLSQR - TESGVVTGELLIDGQPLTNIDAFRRSIGFVQQQDVHLELLTVRESLEISCVLRGDGDR - DYLGVVSNLLRLPSEKLVADLSPTQRKLLSIGVELVTKPSLLLFLDEPTSGLDAEAAL - TIVQFLKKLSMQGQAILCTIHQPSKSVISYFDNIYLLKRGGECVYFGSLPNACDYFVA - HDRRLTFDREMDNPADFVIDVVGSGSTNIPMDDAEKPTSSKIDEPVSYHKQSDSINWA - ELWQSSPEKVRVADDLLLLEEEARKSGVDFTTSVWSPPSYMEQIKLITKRQYICTKRD - MTYVFAKYALNAGAGLFIGFSFWRTKHNINGLQDAIFLCFMMLCVSSPLINQVQDKAL - QSKEVYIAREARSNTYHWTVLLIAQTIVELPLAISSSTLFFLCCYFCCGFETSARVAG - VFYLNYILFSMYYLSFGLWLLYSAPDLQTAAVFVAFLYSFTASFCGVMQPYSLFPRFW - TFMYRVSPYTYFIETFVSLLLHDREVNCSTSEMVPSQPVMGQTCGQFMKPFIDEFGGK - LHINNTYTVCAYCMYTVGDDFLAQENMSYHHRWRNFGFEWVFVCFNIAAMFVGFYLTY - IKKIWPSVIDGIKKCIPSMRRSKTSHNPNEQSV" - gene <333011..>333352 - /locus_tag="YIL012W" - /db_xref="GeneID:854803" - mRNA <333011..>333352 - /locus_tag="YIL012W" - /product="uncharacterized protein" - /transcript_id="NM_001348845.1" - /db_xref="GeneID:854803" - CDS 333011..333352 - /locus_tag="YIL012W" - /note="hypothetical protein; conserved across S. - cerevisiae strains" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001335785.1" - /db_xref="GeneID:854803" - /db_xref="SGD:S000001274" - /translation="MCLGKLYFEQLILVRCIKGRQSGNITTGESRCVSWNVYCTTSMI - GLFSWRKMLLFQHFSYTQRENRQIGGKTWSLISSLFHLNETLASALHHPYETLALYEA - YFALREKKFLL" - gene <333727..>334536 - /gene="TIR3" - /locus_tag="YIL011W" - /gene_synonym="YIB1" - /db_xref="GeneID:854804" - mRNA <333727..>334536 - /gene="TIR3" - /locus_tag="YIL011W" - /gene_synonym="YIB1" - /product="Tir3p" - /transcript_id="NM_001179361.1" - /db_xref="GeneID:854804" - CDS 333727..334536 - /gene="TIR3" - /locus_tag="YIL011W" - /gene_synonym="YIB1" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type - cell wall [PMID:10383953]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /note="Cell wall mannoprotein; member of Srp1p/Tip1p - family of serine-alanine-rich proteins; expressed under - anaerobic conditions and required for anaerobic growth; - TIR3 has a paralog, TIR2, that arose from the whole genome - duplication" - /codon_start=1 - /product="Tir3p" - /protein_id="NP_012254.1" - /db_xref="GeneID:854804" - /db_xref="SGD:S000001273" - /translation="MSFTKIAALLAVAAASTQLVSAEVGQYEIVEFDAILADVKANLE - QYMSLAMNNPDFTLPSGVLDVYQHMTTATDDSYTSYFTEMDFAQITTAMVQVPWYSSR - LEPEIIAALQSAGISITSLGQTVSESGSESATASSDASSASESSSAASSSASESSSAA - SSSASESSSAASSSASESSSAASSSASEAAKSSSSAKSSGSSAASSAASSASSKASSA - ASSSAKASSSAEKSTNSSSSATSKNAGAAMDMGFFSAGVGAAIAGAAAMLL" - gene <334882..>335529 - /gene="DOT5" - /locus_tag="YIL010W" - /db_xref="GeneID:854805" - mRNA <334882..>335529 - /gene="DOT5" - /locus_tag="YIL010W" - /product="thioredoxin peroxidase DOT5" - /transcript_id="NM_001179360.3" - /db_xref="GeneID:854805" - CDS 334882..335529 - /gene="DOT5" - /locus_tag="YIL010W" - /EC_number="1.11.1.24" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10681558|PMID:2408019]" - /experiment="EXISTENCE:direct assay:GO:0008379 thioredoxin - peroxidase activity [PMID:10681558]" - /experiment="EXISTENCE:direct assay:GO:0045454 cell redox - homeostasis [PMID:10681558]" - /experiment="EXISTENCE:genetic interaction:GO:0034599 - cellular response to oxidative stress [PMID:15051715]" - /experiment="EXISTENCE:mutant phenotype:GO:0008379 - thioredoxin peroxidase activity [PMID:10681558]" - /experiment="EXISTENCE:mutant phenotype:GO:0045454 cell - redox homeostasis [PMID:10681558]" - /note="Nuclear thiol peroxidase; functions as an - alkyl-hydroperoxide reductase during post-diauxic growth" - /codon_start=1 - /product="thioredoxin peroxidase DOT5" - /protein_id="NP_012255.3" - /db_xref="GeneID:854805" - /db_xref="SGD:S000001272" - /translation="MGEALRRSTRIAISKRMLEEEESKLAPISTPEVPKKKIKTGPKH - NANQAVVQEANRSSDVNELEIGDPIPDLSLLNEDNDSISLKKITENNRVVVFFVYPRA - STPGCTRQACGFRDNYQELKKYAAVFGLSADSVTSQKKFQSKQNLPYHLLSDPKREFI - GLLGAKKTPLSGSIRSHFIFVDGKLKFKRVKISPEVSVNDAKKEVLEVAEKFKEE" - gene complement(<335666..>336212) - /gene="EST3" - /locus_tag="YIL009C-A" - /db_xref="GeneID:854806" - mRNA complement(<335666..>336212) - /gene="EST3" - /locus_tag="YIL009C-A" - /product="telomerase subunit EST3" - /transcript_id="NM_001184306.2" - /db_xref="GeneID:854806" - CDS complement(join(335666..335935,335937..336212)) - /gene="EST3" - /locus_tag="YIL009C-A" - /experiment="EXISTENCE:direct assay:GO:0003924 GTPase - activity [PMID:20884318]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:12101098]" - /experiment="EXISTENCE:direct assay:GO:0005697 telomerase - holoenzyme complex [PMID:10898986]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0007004 telomere - maintenance via telomerase [PMID:10898986]" - /experiment="EXISTENCE:direct assay:GO:0033677 DNA/RNA - helicase activity [PMID:16884717]" - /experiment="EXISTENCE:direct assay:GO:0042162 telomeric - DNA binding [PMID:16884717]" - /experiment="EXISTENCE:mutant phenotype:GO:0003924 GTPase - activity [PMID:20884318]" - /experiment="EXISTENCE:mutant phenotype:GO:0007004 - telomere maintenance via telomerase [PMID:8978029]" - /ribosomal_slippage - /note="Component of the telomerase holoenzyme; involved in - telomere replication; synthesis of the full-length protein - results from a programmed +1 ribosomal frameshift" - /codon_start=1 - /product="telomerase subunit EST3" - /protein_id="NP_012256.1" - /db_xref="GeneID:854806" - /db_xref="SGD:S000006432" - /translation="MPKVILESHSKPTDSVFLQPWIKALIEDNSEHDQYHPSGHVIPS - LTKQDLALPHMSPTILTNPCHFAKITKFYNVCDYKVYASIRDSSHQILVEFSQECVSN - FERTHNCRITSETTNCLMIIGDADLVYVTNSRAMSHFKICLSNISSKEIVPVLNVNQA - TIFDIDQVGSLSTFPFVYKYL" - gene complement(336349..336420) - /locus_tag="YNCI0010C" - /db_xref="GeneID:854807" - tRNA complement(336349..336420) - /locus_tag="YNCI0010C" - /product="tRNA-Asp" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Aspartate tRNA (tRNA-Asp), predicted by tRNAscan-SE - analysis" - /db_xref="GeneID:854807" - /db_xref="SGD:S000006535" - repeat_region complement(336708..336897) - /note="Ty1 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007014" - gene <339344..>341428 - /gene="FAA3" - /locus_tag="YIL009W" - /db_xref="GeneID:854808" - mRNA <339344..>341428 - /gene="FAA3" - /locus_tag="YIL009W" - /product="long-chain fatty acid-CoA ligase FAA3" - /transcript_id="NM_001179359.1" - /db_xref="GeneID:854808" - CDS 339344..341428 - /gene="FAA3" - /locus_tag="YIL009W" - /EC_number="6.2.1.3" - /experiment="EXISTENCE:direct assay:GO:0004467 long-chain - fatty acid-CoA ligase activity [PMID:8206942]" - /experiment="EXISTENCE:direct assay:GO:0031957 very - long-chain fatty acid-CoA ligase activity [PMID:8206942]" - /experiment="EXISTENCE:genetic interaction:GO:0001676 - long-chain fatty acid metabolic process [PMID:7962057]" - /note="Long chain fatty acyl-CoA synthetase; activates - imported fatty acids with a preference for C16:0-C18:0 - chain lengths; green fluorescent protein (GFP)-fusion - protein localizes to the cell periphery" - /codon_start=1 - /product="long-chain fatty acid-CoA ligase FAA3" - /protein_id="NP_012257.1" - /db_xref="GeneID:854808" - /db_xref="SGD:S000001271" - /translation="MSEQHSVAVGKAANEHETAPRRNVRVKKRPLIRPLNSSASTLYE - FALECFNKGGKRDGMAWRDVIEIHETKKTIVRKVDGKDKSIEKTWLYYEMSPYKMMTY - QELIWVMHDMGRGLAKIGIKPNGEHKFHIFASTSHKWMKIFLGCISQGIPVVTAYDTL - GESGLIHSMVETESAAIFTDNQLLAKMIVPLQSAKDIKFLIHNEPIDPNDRRQNGKLY - KAAKDAINKIREVRPDIKIYSFEEVVKIGKKSKDEVKLHPPEPKDLACIMYTSGSISA - PKGVVLTHYNIVSGIAGVGHNVFGWIGSTDRVLSFLPLAHIFELVFEFEAFYWNGILG - YGSVKTLTNTSTRNCKGDLVEFKPTIMIGVAAVWETVRKAILEKISDLTPVLQKIFWS - AYSMKEKSVPCTGFLSRMVFKKVRQATGGHLKYIMNGGSAISIDAQKFFSIVLCPMII - GYGLTETVANACVLEPDHFEYGIVGDLVGSVTAKLVDVKDLGYYAKNNQGELLLKGAP - VCSEYYKNPIETAVSFTYDGWFRTGDIVEWTPKGQLKIIDRRKNLVKTLNGEYIALEK - LESVYRSNSYVKNICVYADESRVKPVGIVVPNPGPLSKFAVKLRIMKKGEDIENYIHD - KALRNAVFKEMIATAKSQGLVGIELLCGIVFFDEEWTPENGFVTSAQKLKRREILAAV - KSEVERVYKENS" - rep_origin 341976..342045 - /note="ARS919; Autonomously Replicating Sequence" - /db_xref="SGD:S000118398" - gene <342536..>342835 - /gene="URM1" - /locus_tag="YIL008W" - /db_xref="GeneID:854809" - mRNA <342536..>342835 - /gene="URM1" - /locus_tag="YIL008W" - /product="ubiquitin-related modifier URM1" - /transcript_id="NM_001179358.3" - /db_xref="GeneID:854809" - CDS 342536..342835 - /gene="URM1" - /locus_tag="YIL008W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14551258|PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0031386 protein tag - activity [PMID:14551258|PMID:10713047]" - /experiment="EXISTENCE:direct assay:GO:0032447 protein - urmylation [PMID:10713047|PMID:14555475]" - /experiment="EXISTENCE:direct assay:GO:0034599 cellular - response to oxidative stress [PMID:21209336]" - /experiment="EXISTENCE:genetic interaction:GO:0001403 - invasive growth in response to glucose limitation - [PMID:14551258]" - /experiment="EXISTENCE:genetic interaction:GO:0007114 cell - budding [PMID:14551258]" - /experiment="EXISTENCE:mutant phenotype:GO:0001403 - invasive growth in response to glucose limitation - [PMID:14551258]" - /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA - wobble uridine modification [PMID:18755837]" - /experiment="EXISTENCE:mutant phenotype:GO:0002143 tRNA - wobble position uridine thiolation - [PMID:19145231|PMID:18664566|PMID:19151091]" - /experiment="EXISTENCE:mutant phenotype:GO:0031386 protein - tag activity [PMID:14551258]" - /experiment="EXISTENCE:mutant phenotype:GO:0032447 protein - urmylation [PMID:14555475]" - /experiment="EXISTENCE:mutant phenotype:GO:0034599 - cellular response to oxidative stress [PMID:14555475]" - /note="Ubiquitin-like protein involved in thiolation of - cytoplasmic tRNAs; receives sulfur from the E1-like enzyme - Uba4p and transfers it to tRNA; also functions as a - protein tag with roles in nutrient sensing and oxidative - stress response" - /codon_start=1 - /product="ubiquitin-related modifier URM1" - /protein_id="NP_012258.3" - /db_xref="GeneID:854809" - /db_xref="SGD:S000001270" - /translation="MVNVKVEFLGGLDAIFGKQRVHKIKMDKEDPVTVGDLIDHIVST - MINNPNDVSIFIEDDSIRPGIITLINDTDWELEGEKDYILEDGDIISFTSTLHGG" - gene complement(<342994..>343656) - /gene="NAS2" - /locus_tag="YIL007C" - /db_xref="GeneID:854810" - mRNA complement(<342994..>343656) - /gene="NAS2" - /locus_tag="YIL007C" - /product="Nas2p" - /transcript_id="NM_001179357.3" - /db_xref="GeneID:854810" - CDS complement(342994..343656) - /gene="NAS2" - /locus_tag="YIL007C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:19446323]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11489916]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:19446323]" - /experiment="EXISTENCE:direct assay:GO:0070682 proteasome - regulatory particle assembly [PMID:19446322]" - /experiment="EXISTENCE:genetic interaction:GO:0070682 - proteasome regulatory particle assembly - [PMID:19446322|PMID:19446323]" - /experiment="EXISTENCE:mutant phenotype:GO:0070682 - proteasome regulatory particle assembly - [PMID:19446322|PMID:19446323]" - /note="Evolutionarily conserved 19S regulatory particle - assembly-chaperone; involved in assembly of the base - subcomplex of the 19S proteasomal regulatory particle - (RP); non-essential gene; interacts with Rpn4p; protein - abundance increases in response to DNA replication stress; - ortholog of human p27" - /codon_start=1 - /product="Nas2p" - /protein_id="NP_012259.3" - /db_xref="GeneID:854810" - /db_xref="SGD:S000001269" - /translation="MEEEELSKLLANVKIDPSLTSRISQIDSFKLSELMVLKTDIETQ - LEAYFSVLEQQGIGMDSALVTPDGYPRSDVDVLQVTMIRKNVNMLKNDLNHLLQRSHV - LLNQHFDNMNVKSNQDARRNNDDQAIQYTIPFAFISEVVPGSPSDKADIKVDDKLISI - GNVHAANHSKLQNIQMVVMKNEDRPLPVLLLREGQILKTSLTPSRNWNGRGLLGCRIQ - EL" - gene <344062..>345183 - /gene="YIA6" - /locus_tag="YIL006W" - /gene_synonym="NDT1" - /db_xref="GeneID:854811" - mRNA <344062..>345183 - /gene="YIA6" - /locus_tag="YIL006W" - /gene_synonym="NDT1" - /product="NAD+ transporter" - /transcript_id="NM_001179356.1" - /db_xref="GeneID:854811" - CDS 344062..345183 - /gene="YIA6" - /locus_tag="YIL006W" - /gene_synonym="NDT1" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:16291748|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0035352 NAD - transmembrane transport [PMID:16291748]" - /experiment="EXISTENCE:direct assay:GO:0051724 NAD - transmembrane transporter activity [PMID:16291748]" - /experiment="EXISTENCE:genetic interaction:GO:0035352 NAD - transmembrane transport [PMID:16291748]" - /experiment="EXISTENCE:genetic interaction:GO:0051724 NAD - transmembrane transporter activity [PMID:16291748]" - /experiment="EXISTENCE:mutant phenotype:GO:0005477 - pyruvate secondary active transmembrane transporter - activity [PMID:12887330]" - /experiment="EXISTENCE:mutant phenotype:GO:0006850 - mitochondrial pyruvate transmembrane transport - [PMID:12887330]" - /experiment="EXISTENCE:mutant phenotype:GO:0035352 NAD - transmembrane transport [PMID:16291748]" - /experiment="EXISTENCE:mutant phenotype:GO:0051724 NAD - transmembrane transporter activity [PMID:16291748]" - /note="Mitochondrial NAD+ transporter; involved in the - transport of NAD+ into the mitochondria (see also YEA6); - member of the mitochondrial carrier subfamily; disputed - role as a pyruvate transporter; has putative mouse and - human orthologs; YIA6 has a paralog, YEA6, that arose from - the whole genome duplication; human NAD+ transporter - MCART1/SLC25A51 functionally complements the yia6 yea6 - double null mutant, and yeast YIA6 reciprocally - complements defects in MCART1/SLC25A51 null cells" - /codon_start=1 - /product="NAD+ transporter" - /protein_id="NP_012260.1" - /db_xref="GeneID:854811" - /db_xref="SGD:S000001268" - /translation="MTQTDNPVPNCGLLPEQQYCSADHEEPLLLHEEQLIFPDHSSQL - SSADIIEPIKMNSSTESIIGTTLRKKWVPLSSTQITALSGAFAGFLSGVAVCPLDVAK - TRLQAQGLQTRFENPYYRGIMGTLSTIVRDEGPRGLYKGLVPIVLGYFPTWMIYFSVY - EFSKKFFHGIFPQFDFVAQSCAAITAGAASTTLTNPIWVVKTRLMLQSNLGEHPTHYK - GTFDAFRKLFYQEGFKALYAGLVPSLLGLFHVAIHFPIYEDLKVRFHCYSRENNTNSI - NLQRLIMASSVSKMIASAVTYPHEILRTRMQLKSDIPDSIQRRLFPLIKATYAQEGLK - GFYSGFTTNLVRTIPASAITLVSFEYFRNRLENISTMVI" - gene <345692..>347797 - /gene="EPS1" - /locus_tag="YIL005W" - /db_xref="GeneID:854812" - mRNA <345692..>347797 - /gene="EPS1" - /locus_tag="YIL005W" - /product="protein disulfide isomerase EPS1" - /transcript_id="NM_001179355.1" - /db_xref="GeneID:854812" - CDS 345692..347797 - /gene="EPS1" - /locus_tag="YIL005W" - /EC_number="5.3.4.1" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:10545109]" - /experiment="EXISTENCE:direct assay:GO:0019153 - protein-disulfide reductase (glutathione) activity - [PMID:16002399]" - /experiment="EXISTENCE:direct assay:GO:0051082 unfolded - protein binding [PMID:16002399]" - /experiment="EXISTENCE:mutant phenotype:GO:0003756 protein - disulfide isomerase activity [PMID:11157982]" - /experiment="EXISTENCE:mutant phenotype:GO:0006621 protein - retention in ER lumen [PMID:10545109]" - /experiment="EXISTENCE:mutant phenotype:GO:0030433 - ubiquitin-dependent ERAD pathway [PMID:12881414]" - /experiment="EXISTENCE:physical interaction:GO:0005515 - protein binding [PMID:16002399]" - /note="ER protein with chaperone and co-chaperone - activity; involved in retention of resident ER proteins; - has a role in recognizing proteins targeted for - ER-associated degradation (ERAD), member of the protein - disulfide isomerase family" - /codon_start=1 - /product="protein disulfide isomerase EPS1" - /protein_id="NP_012261.1" - /db_xref="GeneID:854812" - /db_xref="SGD:S000001267" - /translation="MKMNLKRLVVTFFSCITFLLKFTIAAAEPPEGFPEPLNPTNFKE - ELSKGLHIIDFYSPYCPHCKHLAPVWMETWEEFKEESKTLNITFSQVNCIESADLCGD - ENIEYFPEIRLYNPSGYIKSFTETPRTKESLIAFARRESMDPNNLDTDLDSAKSESQY - LEGFDFLELIAGKATRPHLVSFWPTKDMKNSDDSLEFKNCDKCHEFQRTWKIISRQLA - VDDINTGHVNCESNPTICEELGFGDLVKITNHRADREPKVALVLPNKTSNNLFDYPNG - YSAKSDGYVDFARRTFTNSKFPNITEGELEKKANRDIDFLQERGRVTNNDIHLVFSYD - PETVVIEDFDILEYLIEPLSKIPNIYLHQIDKNLINLSRNLFGRMYEKINYDASQTQK - VFNKEYFTMNTVTQLPTFFMFKDGDPISYVFPGYSTTEMRNIDAIMDWVKKYSNPLVT - EVDSSNLKKLISFQTKSYSDLAIQLISSTDHKHIKGSNKLIKNLLLASWEYEHIRMEN - NFEEINERRARKADGIKKIKEKKAPANKIVDKMREEIPHMDQKKLLLGYLDISKEKNF - FRKYGITGEYKIGDVIIIDKSNNYYYNKDNFGNSLTSNNPQLLREAFVSLNIPSKALY - SSKLKGRLINSPFHNVLSFLDIIHGNGMPGYLIVIVLFIAILKGPSIYRRYKVRKHYR - AKRNAVGILGNMEKKKNQD" - gene complement(<347946..>348505) - /gene="BET1" - /locus_tag="YIL004C" - /gene_synonym="SLY12" - /db_xref="GeneID:854813" - mRNA complement(join(<347946..348363,348495..>348505)) - /gene="BET1" - /locus_tag="YIL004C" - /gene_synonym="SLY12" - /product="Bet1p" - /transcript_id="NM_001179354.3" - /db_xref="GeneID:854813" - CDS complement(join(347946..348363,348495..348505)) - /gene="BET1" - /locus_tag="YIL004C" - /gene_synonym="SLY12" - /experiment="EXISTENCE:direct assay:GO:0005484 SNAP - receptor activity [PMID:11001058]" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:1396561]" - /experiment="EXISTENCE:direct assay:GO:0006890 retrograde - vesicle-mediated transport, Golgi to endoplasmic reticulum - [PMID:9813082]" - /experiment="EXISTENCE:direct assay:GO:0006906 vesicle - fusion [PMID:11001046]" - /experiment="EXISTENCE:direct assay:GO:0016020 membrane - [PMID:1396561]" - /experiment="EXISTENCE:direct assay:GO:0030134 - COPII-coated ER to Golgi transport vesicle - [PMID:11157978]" - /experiment="EXISTENCE:direct assay:GO:0031201 SNARE - complex [PMID:11001058]" - /experiment="EXISTENCE:mutant phenotype:GO:0005484 SNAP - receptor activity [PMID:3312234]" - /experiment="EXISTENCE:mutant phenotype:GO:0006888 - endoplasmic reticulum to Golgi vesicle-mediated transport - [PMID:3312234]" - /note="Type II membrane protein required for vesicular - transport; required for vesicular transport between the - endoplasmic reticulum and Golgi complex; v-SNARE with - similarity to synaptobrevins" - /codon_start=1 - /product="Bet1p" - /protein_id="NP_012262.3" - /db_xref="GeneID:854813" - /db_xref="SGD:S000001266" - /translation="MSSRFAGGNAYQRDTGRTQLFGPADGSNSLDDNVSSALGSTDKL - DYSQSTLASLESQSEEQMGAMGQRIKALKSLSLKMGDEIRGSNQTIDQLGDTFHNTSV - KLKRTFGNMMEMARRSGISIKTWLIIFFMVGVLFFWVWIT" - gene <349122..>350003 - /gene="CFD1" - /locus_tag="YIL003W" - /gene_synonym="DRE3" - /db_xref="GeneID:854814" - mRNA <349122..>350003 - /gene="CFD1" - /locus_tag="YIL003W" - /gene_synonym="DRE3" - /product="iron-sulfur cluster assembly protein CFD1" - /transcript_id="NM_001179353.1" - /db_xref="GeneID:854814" - CDS 349122..350003 - /gene="CFD1" - /locus_tag="YIL003W" - /gene_synonym="DRE3" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:12970194]" - /experiment="EXISTENCE:direct assay:GO:0016226 iron-sulfur - cluster assembly [PMID:17401378]" - /experiment="EXISTENCE:direct assay:GO:0016887 ATP - hydrolysis activity [PMID:26195633]" - /experiment="EXISTENCE:direct assay:GO:0051539 4 iron, 4 - sulfur cluster binding [PMID:17401378]" - /experiment="EXISTENCE:direct assay:GO:1904564 Nbp35-Cfd1 - ATPase complex [PMID:26195633]" - /experiment="EXISTENCE:mutant phenotype:GO:0002098 tRNA - wobble uridine modification [PMID:18755837]" - /experiment="EXISTENCE:mutant phenotype:GO:0016226 - iron-sulfur cluster assembly [PMID:12970194]" - /note="Highly conserved iron-sulfur cluster binding - protein; localized in the cytoplasm; forms a complex with - Nbp35p that is involved in iron-sulfur protein assembly in - the cytosol" - /codon_start=1 - /product="iron-sulfur cluster assembly protein CFD1" - /protein_id="NP_012263.1" - /db_xref="GeneID:854814" - /db_xref="SGD:S000001265" - /translation="MEEQEIGVPAASLAGIKHIILILSGKGGVGKSSVTTQTALTLCS - MGFKVGVLDIDLTGPSLPRMFGLENESIYQGPEGWQPVKVETNSTGSLSVISLGFLLG - DRGNSVIWRGPKKTSMIKQFISDVAWGELDYLLIDTPPGTSDEHISIAEELRYSKPDG - GIVVTTPQSVATADVKKEINFCKKVDLKILGIIENMSGFVCPHCAECTNIFSSGGGKR - LSEQFSVPYLGNVPIDPKFVEMIENQVSSKKTLVEMYRESSLCPIFEEIMKKLRKQDT - TTPVVDKHEQPQIESPK" - gene <350301..>350510 - /gene="CMI7" - /locus_tag="YIL002W-A" - /db_xref="GeneID:1466493" - mRNA <350301..>350510 - /gene="CMI7" - /locus_tag="YIL002W-A" - /product="Cmi7p" - /transcript_id="NM_001184653.1" - /db_xref="GeneID:1466493" - CDS 350301..350510 - /gene="CMI7" - /locus_tag="YIL002W-A" - /note="Putative mitochondrial hypothetical protein; - identified by expression profiling and mass spectrometry" - /codon_start=1 - /product="Cmi7p" - /protein_id="NP_878098.1" - /db_xref="GeneID:1466493" - /db_xref="SGD:S000028835" - /translation="MTRDTPEDVSTAGAKDILDVLNLLKGGEEKISEVELKLDEMEKK - MDSLLVQLEDLHRDNNDLAKSSSQK" - gene complement(<350591..>353431) - /gene="INP51" - /locus_tag="YIL002C" - /gene_synonym="SJL1" - /db_xref="GeneID:854815" - mRNA complement(<350591..>353431) - /gene="INP51" - /locus_tag="YIL002C" - /gene_synonym="SJL1" - /product="phosphoinositide 5-phosphatase INP51" - /transcript_id="NM_001179352.3" - /db_xref="GeneID:854815" - CDS complement(350591..353431) - /gene="INP51" - /locus_tag="YIL002C" - /gene_synonym="SJL1" - /EC_number="3.1.3.36" - /experiment="EXISTENCE:direct assay:GO:0004439 - phosphatidylinositol-4,5-bisphosphate 5-phosphatase - activity [PMID:9565610|PMID:10224048]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:17452534]" - /experiment="EXISTENCE:direct assay:GO:0016020 membrane - [PMID:9560389]" - /experiment="EXISTENCE:direct assay:GO:0046856 - phosphatidylinositol dephosphorylation [PMID:10224048]" - /experiment="EXISTENCE:mutant phenotype:GO:0004439 - phosphatidylinositol-4,5-bisphosphate 5-phosphatase - activity [PMID:9438131|PMID:9565610]" - /experiment="EXISTENCE:mutant phenotype:GO:0046856 - phosphatidylinositol dephosphorylation - [PMID:9438131|PMID:9560389]" - /note="Phosphatidylinositol 4,5-bisphosphate - 5-phosphatase; synaptojanin-like protein with an - N-terminal Sac1 domain, plays a role in - phosphatidylinositol 4,5-bisphosphate homeostasis and in - endocytosis; null mutation confers cold-tolerant growth" - /codon_start=1 - /product="phosphoinositide 5-phosphatase INP51" - /protein_id="NP_012264.3" - /db_xref="GeneID:854815" - /db_xref="SGD:S000001264" - /translation="MRLFIGRRSRSIVISSNNYCLSFQRLRSIPGASSQQRQLSKTPS - VTIKSYPDTDLSSDSNYLEVKSCIFNGLLGLVCLNGDIYVAVISGVQNVGFPRWKLID - HQVRPSESIYKVLDVDFYSLENDVFDYLLCERSEQNYDKLIHEHPCGPLKKLFSDGTF - YYSRDFDISNIVKNHGLSHNLEYTVDNQDLSFIWNANLASEVINWRSKISNEEKQLFA - NAGFLTFVIRGYCKTALIEDGPNTASITIISRISTESKQDTLELEGISEDGRVSLFVE - TEIVVTTEKFIFSYTQVNGSIPLFWESVESQLLYGKKIKVTKDSIEAQGAFDRHFDNL - TSKYGVVSIVNIIKPKSESQEKLALTYKDCAESKGIKITNIEYSSSVLTKSPHKLLYL - LKQDIYEFGAFAYDISRGIYFAKQTGVLRISAFDSIEKPNTVERLVSKEVLELTTNEI - DVFELTSPFLDAHDKLWSENYYWLDRTYTKHTKNSGKYTKVYSKLFGSRVRLYDPLHI - YISQYLKQLRSKYTFEKDISIFAGTFNISGKIPKDDIKDWIFPKSMSKEDEMADLYVI - GLEEVVELTPGHMLATDPYVRQFWEKKILTLLNGPGRKKKYIRLWSTQLGGILLLLFM - NETEYSKVKHIEGDVKKTGFGGMASNKGAVAVSFKYSATRFCVLVSHLAAGLENVEQR - HNDYKTIAKSIRFSKGLRIKDHDAIIWMGDFNYRILMSNEDVRRKIVSKEYASLFEKD - QLNQQMIAGESFPYFHEMAIDFPPTYKFDPGTKNYDTSEKMRIPAWTDRILSRGEVLE - QLEYKCCEDILFSDHRPVYAIFRARVTVVDEQKKTTLGTQIYEKIMERLEGLDDDEKI - AVLSDDAFVIESFEGSDSIAGPTHSPTPIPEPKRGRKLPPPSSDLKKWWIGSGKQVKV - VLDVDPAVYMINPKRDPNPFVENEDEPLFIER" - gene <353940..>355481 - /locus_tag="YIL001W" - /db_xref="GeneID:854816" - mRNA <353940..>355481 - /locus_tag="YIL001W" - /product="uncharacterized protein" - /transcript_id="NM_001179351.3" - /db_xref="GeneID:854816" - CDS 353940..355481 - /locus_tag="YIL001W" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /note="hypothetical protein; contains a BTB/POZ domain - which generally function in protein interactions; deletion - slightly improved competitive fitness in rich media; - GFP-tagged protein is localized to the cytoplasm" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012265.3" - /db_xref="GeneID:854816" - /db_xref="SGD:S000001263" - /translation="MADKLMDKNFEELCYSCRTGDMDNVDRLISTGVNVNSVDKFDNS - PLFLASLCGHEAVVKLLLQRGAVCDRDRYEGARCIYGALTDTIRDTLLSYDISKAVDV - KQPFATHISSMYNDEGFLKRDITFRVSNGKLFTAHKFLLCARSEILAEKMVNEWAKHE - IVSLEVRPDIFDIFLKFLYLIPILHQIEPGQYEELIELSSKFDIELLPEFLDKARHTA - DPTEKSRLMSDYQYKFTEVARSQLLIFVNNCIFRSTVDLANSERRVFSLMNCPAYPDV - QLMVKNRNGAIRIYPCHLAVLSRAEYFKVMFTNNFKEKVTYIKAKHVTGKYNSIIPQL - TLPNCEFEVAEIILRYLYADNTDIPWMYAVDVLLLADILLEDRLKTIASTIITQSKEF - IQQYNVFDVLYLSWEIGVERLEQFAAKFIAIHLQELYKDPEIKRAIMLSSQRISLRQE - TDTIELVDDIRYYLLRKYSFEPDDVELFENQDDLEYLKQVGYLEYRKDMGMLDNILAD - LELDV" - centromere 355629..355745 - /note="CEN9; Chromosome IX centromere" - /db_xref="SGD:S000006470" - centromere 355629..355638 - /note="CEN9_CDEI of CEN9" - centromere 355639..355720 - /note="CEN9_CDEII of CEN9" - centromere 355721..355745 - /note="CEN9_CDEIII of CEN9" - gene complement(<356143..>356895) - /gene="SGN1" - /locus_tag="YIR001C" - /gene_synonym="RBP1; RBP29" - /db_xref="GeneID:854817" - mRNA complement(<356143..>356895) - /gene="SGN1" - /locus_tag="YIR001C" - /gene_synonym="RBP1; RBP29" - /product="Sgn1p" - /transcript_id="NM_001179523.1" - /db_xref="GeneID:854817" - CDS complement(356143..356895) - /gene="SGN1" - /locus_tag="YIR001C" - /gene_synonym="RBP1; RBP29" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:10764794]" - /experiment="EXISTENCE:direct assay:GO:0008143 poly(A) - binding [PMID:10764794]" - /experiment="EXISTENCE:genetic interaction:GO:0016071 mRNA - metabolic process [PMID:10764794]" - /experiment="EXISTENCE:physical interaction:GO:0016071 - mRNA metabolic process [PMID:10764794]" - /note="Cytoplasmic RNA-binding protein; contains an RNA - recognition motif (RRM); may have a role in mRNA - translation, as suggested by genetic interactions with - genes encoding proteins involved in translational - initiation" - /codon_start=1 - /product="Sgn1p" - /protein_id="NP_012266.1" - /db_xref="GeneID:854817" - /db_xref="SGD:S000001440" - /translation="MSQEEKVDAKATLKTEISNNKKNDKQELELDELVGKLSIEGTPQ - VSQKLSKEEKHAHQLEADSRSIFVGNITPDVTPEQIEDHFKDCGQIKRITLLYDRNTG - TPKGYGYIEFESPAYREKALQLNGGELKGKKIAVSRKRTNIPGFNRHYNSQNQYFQQW - QWNYPLMAYPNPDTFPYYPPYPPNQSPNQNFGYNKNNYYRSPYNNKNRTFQKKHFNSA - KDSTKNIRSTSQKPVVMPSDNVKSSTQEKDSK" - rep_origin 357160..357396 - /note="ARS920; Autonomously Replicating Sequence" - /db_xref="SGD:S000118399" - gene complement(<357415..>360396) - /gene="MPH1" - /locus_tag="YIR002C" - /db_xref="GeneID:854818" - mRNA complement(<357415..>360396) - /gene="MPH1" - /locus_tag="YIR002C" - /product="3'-5' DNA helicase" - /transcript_id="NM_001179524.1" - /db_xref="GeneID:854818" - CDS complement(357415..360396) - /gene="MPH1" - /locus_tag="YIR002C" - /EC_number="3.6.4.12" - /experiment="EXISTENCE:direct assay:GO:0000781 chromosome, - telomeric region [PMID:26966248]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10880470|PMID:19995966]" - /experiment="EXISTENCE:direct assay:GO:0033677 DNA/RNA - helicase activity [PMID:26966248]" - /experiment="EXISTENCE:direct assay:GO:0043138 3'-5' DNA - helicase activity [PMID:15634678]" - /experiment="EXISTENCE:direct assay:GO:0060543 negative - regulation of strand invasion [PMID:19136626]" - /experiment="EXISTENCE:direct assay:GO:0070336 - flap-structured DNA binding [PMID:19181670]" - /experiment="EXISTENCE:genetic interaction:GO:0033567 DNA - replication, Okazaki fragment processing [PMID:19181670]" - /experiment="EXISTENCE:genetic interaction:GO:0036297 - interstrand cross-link repair [PMID:22912599]" - /experiment="EXISTENCE:mutant phenotype:GO:0000725 - recombinational repair [PMID:19995966]" - /experiment="EXISTENCE:mutant phenotype:GO:0007535 donor - selection [PMID:27257873]" - /experiment="EXISTENCE:mutant phenotype:GO:0060543 - negative regulation of strand invasion [PMID:19136626]" - /experiment="EXISTENCE:physical interaction:GO:0007535 - donor selection [PMID:27257873]" - /note="3'-5' DNA helicase involved in error-free bypass of - DNA lesions; binds flap DNA, stimulates activity of Rad27p - and Dna2p; prevents crossovers between ectopic sequences - by removing substrates for Mus81-Mms4 or Rad1-Rad10 - cleavage; homolog of human FANCM Fanconi anemia protein - that is involved in stabilizing and remodeling blocked - replication forks; member of SF2 DExD/H superfamily of - helicases; nonsense or missense mutations in FANCM can - make people more likely to get cancer" - /codon_start=1 - /product="3'-5' DNA helicase" - /protein_id="NP_012267.1" - /db_xref="GeneID:854818" - /db_xref="SGD:S000001441" - /translation="MASADDYFSDFEDDELDKLYEKAINKSVKETITRRAVPVQKDLH - DNVLPGQKTVYEEIQRDVSFGPTHHELDYDALSFYVYPTNYEVRDYQYTIVHKSLFQN - TLCAIPTGMGKTFIASTVMLNYFRWTKKAKIIFTAPTRPLVAQQIKACLGITGIPSDQ - TAILLDKSRKNREEIWANKRVFFATPQVVENDLKRGVLDPKDIVCLVIDEAHRATGSS - AYTNVVKFIDRFNSSYRLLALTATPASDLEGVQEVVNNLDISKIEIRTEESMDIVKYM - KKRKKEKIEVPLLLEIEDIIEQLGMAVKPVLQQAIELGIYEECDPSQINAFKAMQQSQ - KIIANPTIPEGIKWRNFFILQLLNNVGQMLKRLKIYGIRTFFNYFQNKCTEFTTKYNL - KKSTNKIAAEFYYHPILKNIKNQCENYLSDPKFVGHGKLQCVRDELMDFFQKRGSDSR - VIIFTELRESALEIVKFIDSVADDQIRPHIFIGQARAKEGFDEVKYTRKHAPKGRKKV - ERLHRQEQEKFLEAERTKRAANDKLERSARRTGSSEEAQISGMNQKMQKEVIHNFKKG - EYNVLVCTSIGEEGLDIGEVDLIICYDTTSSPIKNIQRMGRTGRKRDGKIVLLFSSNE - SYKFERAMEDYSTLQALISKQCIDYKKSDRIIPEDIIPECHETLITINDENEIINEME - DVDEVIRYATQCMMGKKVKPKKAITKKKRVQENKKPKKFFMPDNVETSIVSASTLINK - FLVNESGGKQLVTSNENPSKKRKIFKALDNLENDSTEEASSSLETEDEEVSDDNNVFI - AEGQNGCQKDLETAIIRTGESLTTLKPLHNFERPNMALFVNDCGLPTKIEKNVKDIRG - NQHNLEKEKSCTVDKNNMVLSLDDWNFFRNRYIPEGVSFDVEPNFVQYTKGVKVPHCH - KVSKIITLFNDESNDNKKRTIDMNYTKCLARGMLRDEKKFVKVNDKSQVDNNSVNHDS - SQSFTLSNAELDDILGSDSDF" - gene <360885..>362924 - /gene="AIM21" - /locus_tag="YIR003W" - /db_xref="GeneID:854819" - mRNA <360885..>362924 - /gene="AIM21" - /locus_tag="YIR003W" - /product="Aim21p" - /transcript_id="NM_001179525.3" - /db_xref="GeneID:854819" - CDS 360885..362924 - /gene="AIM21" - /locus_tag="YIR003W" - /experiment="EXISTENCE:direct assay:GO:0015629 actin - cytoskeleton [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0030479 actin - cortical patch [PMID:28706108|PMID:29467252]" - /experiment="EXISTENCE:direct assay:GO:0030837 negative - regulation of actin filament polymerization - [PMID:29467252]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:19053807]" - /experiment="EXISTENCE:direct assay:GO:0051015 actin - filament binding [PMID:29467252]" - /experiment="EXISTENCE:mutant phenotype:GO:0034642 - mitochondrion migration along actin filament - [PMID:19300474]" - /experiment="EXISTENCE:physical interaction:GO:0110131 - Aim21-Tda2 complex [PMID:28706108|PMID:29467252]" - /note="Subunit of a complex that associates with actin - filaments; forms a complex with Tda2p that inhibits barbed - end F-actin assembly; elevates actin monomer pools to - increase endocytotic efficiency and to regulate the - distribution of actin between cables and patches; - Aim21p/Tda2p forms a larger complex with actin capping - proteins Cap1p and Cap2p; involved in mitochondrial - migration along actin filaments; recruited to cortical - actin patches by SH3 domain-containing proteins Bbc1p and - Abp1p" - /codon_start=1 - /product="Aim21p" - /protein_id="NP_012268.3" - /db_xref="GeneID:854819" - /db_xref="SGD:S000001442" - /translation="MPSEVTPKVPERPSRRKTSELFPLSGSESGDIKANSEPPTPAGT - PNVPTRRPILKAKTMTSFESGMDQESLPKVPLQRPVRRSTTEELNNVMNNTSKELEEI - ESLISKHNIHNVSRKKSPTSVEEGKVAAIHQNGQRSASDNKTSTNPSPLEKNEHEGAE - GNESAISPSNLVNKSNNEVTEHSDSEDLTEKQKVHAALDNEAGDRSHFEEKLIPGDMK - VQVDVSKDVEEGSLNALPPSGITESDDKAEKFTKHPESSLEELQKHQEQQEEKIFQNP - TDEESTTSLNEKQEGKDNMEVNSQPQGPSDTETVIAATSSNVPSQIASEEENDVPVIP - RSRPKKDFEAHVQKEELPNTQEKRVSEECDSTLISTEEESKIPKIPSERPKRRAPPPV - PKKPSSRIAAFQEMLQKQQQQDLHNNGNSSATTASADIAKKHTDSSITSDTTKADFTS - KLNGLFALPGMVNPGQLPPSLEKKLSSPDTESKLGPQDQSQAKTGPLGGTRRGRGPRG - RKLPSKVASVEKIEEDDNTNKIEIFNNWNVSSSFSKEKVLIDTTPGEQAERALDEKSK - SIPEEQREQSPNKMEAALCPFELDEKEKLPANAESDPLSQLPQTNAVGNRKAISEESL - SPSEAIANRDQNDTTEIQEQQMEDQMEVDMERELSGGYEDVDSALHSEEASFHSL" - rep_origin 362924..363221 - /note="ARS921; Putative replication origin; identified in - multiple array studies, not yet confirmed by plasmid-based - assay" - /db_xref="SGD:S000130161" - gene <363221..>364519 - /gene="DJP1" - /locus_tag="YIR004W" - /gene_synonym="ICS1; PAS22" - /db_xref="GeneID:854820" - mRNA <363221..>364519 - /gene="DJP1" - /locus_tag="YIR004W" - /gene_synonym="ICS1; PAS22" - /product="Djp1p" - /transcript_id="NM_001179526.1" - /db_xref="GeneID:854820" - CDS 363221..364519 - /gene="DJP1" - /locus_tag="YIR004W" - /gene_synonym="ICS1; PAS22" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:9679141]" - /experiment="EXISTENCE:direct assay:GO:0005933 cellular - bud [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0006626 protein - targeting to mitochondrion [PMID:30213914]" - /experiment="EXISTENCE:mutant phenotype:GO:0016558 protein - import into peroxisome matrix [PMID:9679141]" - /experiment="EXISTENCE:mutant phenotype:GO:0045040 protein - insertion into mitochondrial outer membrane - [PMID:23959800]" - /note="ER-associated chaperone involved in protein - targeting; redirects mitochondrial membrane protein - precursors to mitochondrial translocation system; required - for peroxisomal protein import and involved in peroxisome - assembly; facilitates import of Mim1p and Mim2p into the - mitochondrial outer membrane; homologous to E. coli DnaJ" - /codon_start=1 - /product="Djp1p" - /protein_id="NP_012269.1" - /db_xref="GeneID:854820" - /db_xref="SGD:S000001443" - /translation="MVVDTEYYDLLGVSTTASSIEIKKAYRKKSIQEHPDKNPNDPTA - TERFQAISEAYQVLGDDDLRAKYDKYGRKEAIPQGGFEDAAEQFSVIFGGDAFASYIG - ELMLLKNLQKTEELNAEDEAEKEKENVETMEESPADGKTNGTTNAVDAALGNTNEKDD - KNKARTTSGNLTVHDGNKKNEQVGAEAKKKKTKLEQFEEEQEVEKQKRVDQLSKTLIE - RLSILTESVYDDACKDSFKKKFEEEANLLKMESFGLDILHTIGDVYYEKAEIFLASQN - LFGMGGIFHSMKAKGGVFMDTLRTVSAAIDAQNTMKELEKMKEASTNNEPLFDKDGNE - QIKPTTEELAQQEQLLMGKVLSAAWHGSKYEITSTLRGVCKKVLEDDSVSKKTLIRRA - EAMKLLGEVFKKTFRTKVEQEEAQIFEELVAEATKKKRHT" - gene <364889..>365335 - /gene="IST3" - /locus_tag="YIR005W" - /gene_synonym="SNU17" - /db_xref="GeneID:854821" - mRNA <364889..>365335 - /gene="IST3" - /locus_tag="YIR005W" - /gene_synonym="SNU17" - /product="U2 snRNP complex subunit IST3" - /transcript_id="NM_001179527.1" - /db_xref="GeneID:854821" - CDS 364889..365335 - /gene="IST3" - /locus_tag="YIR005W" - /gene_synonym="SNU17" - /experiment="EXISTENCE:direct assay:GO:0000384 first - spliceosomal transesterification activity [PMID:11287609]" - /experiment="EXISTENCE:direct assay:GO:0000398 mRNA - splicing, via spliceosome [PMID:15565172]" - /experiment="EXISTENCE:direct assay:GO:0005686 U2 snRNP - [PMID:16314500]" - /experiment="EXISTENCE:direct assay:GO:0070274 RES complex - [PMID:15565172]" - /experiment="EXISTENCE:mutant phenotype:GO:0000245 - spliceosomal complex assembly [PMID:11287609]" - /experiment="EXISTENCE:mutant phenotype:GO:0000349 - generation of catalytic spliceosome for first - transesterification step [PMID:11287609]" - /experiment="EXISTENCE:mutant phenotype:GO:0000384 first - spliceosomal transesterification activity [PMID:11287609]" - /experiment="EXISTENCE:mutant phenotype:GO:0006406 mRNA - export from nucleus [PMID:15565172]" - /note="Component of the U2 snRNP; required for the first - catalytic step of splicing and for spliceosomal assembly; - interacts with Rds3p and is required for Mer1p-activated - splicing; diploid mutants have a specific defect in MATa1 - pre-mRNA splicing which leads to haploid gene expression - in diploids" - /codon_start=1 - /product="U2 snRNP complex subunit IST3" - /protein_id="NP_012270.1" - /db_xref="GeneID:854821" - /db_xref="SGD:S000001444" - /translation="MNKIQQINDKELQSGILSPHQSWHNEYKDNAYIYIGNLNRELTE - GDILTVFSEYGVPVDVILSRDENTGESQGFAYLKYEDQRSTILAVDNLNGFKIGGRAL - KIDHTFYRPKRSLQKYYEAVKEELDRDIVSKNNAEKLILAKKDQPN" - gene complement(<365466..>369908) - /gene="PAN1" - /locus_tag="YIR006C" - /gene_synonym="DIM2; MDP3; MIP3" - /db_xref="GeneID:854822" - mRNA complement(<365466..>369908) - /gene="PAN1" - /locus_tag="YIR006C" - /gene_synonym="DIM2; MDP3; MIP3" - /product="Pan1p" - /transcript_id="NM_001179528.3" - /db_xref="GeneID:854822" - CDS complement(365466..369908) - /gene="PAN1" - /locus_tag="YIR006C" - /gene_synonym="DIM2; MDP3; MIP3" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:17967424]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:17967424]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:11914276]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0030479 actin - cortical patch [PMID:14622601|PMID:16824951]" - /experiment="EXISTENCE:direct assay:GO:0043332 mating - projection tip [PMID:19053807]" - /experiment="EXISTENCE:direct assay:GO:0071933 Arp2/3 - complex binding [PMID:11433303]" - /experiment="EXISTENCE:direct assay:GO:1990964 actin - cytoskeleton-regulatory complex - [PMID:10594004|PMID:17151356]" - /experiment="EXISTENCE:direct assay:GO:2000601 positive - regulation of Arp2/3 complex-mediated actin nucleation - [PMID:16824951|PMID:11433303|PMID:17151356]" - /experiment="EXISTENCE:genetic interaction:GO:0061709 - reticulophagy [PMID:35101986]" - /experiment="EXISTENCE:mutant phenotype:GO:0000147 actin - cortical patch assembly [PMID:18177206]" - /experiment="EXISTENCE:mutant phenotype:GO:0006897 - endocytosis [PMID:8978817]" - /experiment="EXISTENCE:mutant phenotype:GO:0007120 axial - cellular bud site selection [PMID:8756649]" - /experiment="EXISTENCE:mutant phenotype:GO:0007121 bipolar - cellular bud site selection [PMID:8756649]" - /experiment="EXISTENCE:physical interaction:GO:1990964 - actin cytoskeleton-regulatory complex [PMID:17151356]" - /note="Part of actin cytoskeleton-regulatory complex - Pan1p-Sla1p-End3p; associates with actin patches on cell - cortex; promotes protein-protein interactions essential - for endocytosis; regulates late stages of endocytosis; - binds to and activates Arp2/3 complex in vitro; - phosphorylation of Thr-1225 is regulated by MAPK Hog1p in - response to osmotic stress" - /codon_start=1 - /product="Pan1p" - /protein_id="NP_012271.3" - /db_xref="GeneID:854822" - /db_xref="SGD:S000001445" - /translation="MYNPYQQQGMGYQQQQQQQQQQPNGFYPQQQQGQSSNQPQGQPQ - PQQQMAFNQPQATGIGGMPQSFGNSFSSMPQQPQTGYNNNGNNGSVYGNGNFGQQPQQ - QQQQAKPQHTGYVPNSSMPMMNTTGTMPPPNPAQQPQLQSIQPQGTGYYQAANTANVH - SVQPLQSQGTGYYVSTPNLISSNQTQQPLQAQGTGYYQSQPQQVPPPQQAQSLQPLKP - QQTGFYLQPQNQAPLEPLKPTATGFVNSFANNGLNNDIKIPAIRLSFITAQDQAKFET - LFRSIVTNGSNTVSGANCRKILMRSGLPPSQLARIWTLCDTSKAGELLFPEFALAMHL - INDVLQGDTIPYELDSKTKNEVSSFIDAINLSIANQDSSANDAPKTPFDEFITAGVQN - LQPQPTGYMPQTSFGIPLQSQITGGGVASALNPQSTGFMAPTTFNMSMNTGTPGLNPQ - ITGGAPASMQPNITGNALQPQTTGMMPQTTGMMPQTTGMMPQTSFGVNLGPQLTGGAL - QSQYTGGYGSVMPQQSGPASMPNLSFNQQGLQSQLTGLQPQPTGFLPPSNFSATMPLT - AQKTGFGNNEIYTKSNFNNNLIDNSSQDKISTEEKSLFYKIFETFDTQNKGLLDSPTA - VEIFRKSGLNRADLEQIWNLCDINNTGQLNKQEFALGMHLVYGKLNGKPIPNVLPSSL - IPSSTKLLDNLKNQLKTEPTTTKEKPSFGKIDALSYKNNDDDVLPNYRNRRKVYSAKN - EEQSSFSSPSAKSVNHSSSTLQTDDISVDKTVEKKTAKPKYAGFSREINLKNIASLEN - EIKNISNPENCYDSSIPSDLTSRFDAIIAKLPNLFNEISTIDNEITNAKIQLYRKKNP - SSIIGSGPNGEITENDRKKAKSRALLRARMSALTGKSTESEDSLSMEDEQQSAEIKRI - QQENGKNQEIIKDIRSSISDISASLKSTMTGSNMISNQEFERWEFGIGLEDGVREFLD - DLKSNSNKSVTESSPFVPSSTPTPVDDRSSSPSYSQFKTAEERAAYLKEQAKKRMKEK - LAKFDKNRRNVTQSSRSISSENSREQPQQIAGSSNLVEPRATPFQEEKYVEVAQPTQP - VQSTQPVQPTQPVQPTQPVQPTQPVQPTQPVQPTQPVQNVYNAKQESDDEDEDDEEKR - LQEELKRLKLKKKADKEKRLAALRKQIEDAQNESDEEETNGKDNFGGHVNVPQAAPVA - PSAAFSQNSTNAPRSVHAAVTPAAGKNSTGLPSTTMGHNPYFKDASASSTSTFDARAA - EMQRRIQRGLDEDEDDGWSDEDESNNRVAVDNKVEEAKIGHPDHARAPPVTAAPLPSV - TPVPPAVPVPQANTSNEKSSPIPIAPIPPSVTQEPPVPLAPPLPAVDGFQEPPIPSAP - AIATAVQKSGSSTPALAGGVLPPPPPLPTQQASTSEPIIAHVDNYNGAEKGTGAYGSD - SDDDVLSIPESVGTDEEEEGAQPVSTAGIPSIPPAGIPPPPPLP" - gene 370417..370488 - /locus_tag="YNCI0011W" - /db_xref="GeneID:854823" - tRNA 370417..370488 - /locus_tag="YNCI0011W" - /product="tRNA-Glu" - /experiment="EXISTENCE:curator inference:GO:0005829 - cytosol [PMID:9023104]" - /experiment="EXISTENCE:curator inference:GO:0006414 - translational elongation [PMID:9023104]" - /note="Glutamate tRNA (tRNA-Glu), predicted by tRNAscan-SE - analysis; thiolation of uridine at wobble position (34) - requires Ncs6p" - /db_xref="GeneID:854823" - /db_xref="SGD:S000006556" - gene <370704..>372998 - /gene="EGH1" - /locus_tag="YIR007W" - /db_xref="GeneID:854824" - mRNA <370704..>372998 - /gene="EGH1" - /locus_tag="YIR007W" - /product="hydrolase" - /transcript_id="NM_001179529.3" - /db_xref="GeneID:854824" - CDS 370704..372998 - /gene="EGH1" - /locus_tag="YIR007W" - /experiment="EXISTENCE:direct assay:GO:0000329 fungal-type - vacuole membrane [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26116408]" - /experiment="EXISTENCE:direct assay:GO:0050295 - steryl-beta-glucosidase activity [PMID:26116408]" - /experiment="EXISTENCE:mutant phenotype:GO:1904462 - ergosteryl 3-beta-D-glucoside catabolic process - [PMID:26116408]" - /note="Steryl-beta-glucosidase with broad specificity for - aglycones; has a role in ergosteryl-beta-glucoside - catabolism; required for normal vacuolar morphology; has - similarity to the C. neoformans - ergosteryl-beta-glucosidase EGCrP2; localizes to the - cytosol" - /codon_start=1 - /product="hydrolase" - /protein_id="NP_012272.3" - /db_xref="GeneID:854824" - /db_xref="SGD:S000001446" - /translation="MPAKIHISADGQFCDKDGNEIQLRGVNLDPSVKIPAKPFLSTHA - PIENDTFFEDADKVSFINHPLVLDDIEQHIIRLKSLGYNTIRLPFTWESLEHAGPGQY - DFDYMDYIVEVLTRINSVQQGMYIYLDPHQDVWSRFSGGSGAPLWTLYCAGFQPANFL - ATDAAILHNYYIDPKTGREVGKDEESYPKMVWPTNYFKLACQTMFTLFFGGKQYAPKC - TINGENIQDYLQGRFNDAIMTLCARIKEKAPELFESNCIIGLESMNEPNCGYIGETNL - DVIPKERNLKLGKTPTAFQSFMLGEGIECTIDQYKRTFFGFSKGKPCTINPKGKKAWL - SAEERDAIDAKYNWERNPEWKPDTCIWKLHGVWEIQNGKRPVLLKPNYFSQPDATVFI - NNHFVDYYTGIYNKFREFDQELFIIIQPPVMKPPPNLQNSKILDNRTICACHFYDGMT - LMYKTWNKRIGIDTYGLVNKKYSNPAFAVVLGENNIRKCIRKQLSEMQKDAKSMLGKK - VPVFFTEIGIPFDMDDKKAYITNDYSSQTAALDALGFALEGSNLSYTLWCYCSINSHI - WGDNWNNEDFSIWSPDDKPLYHDTRAKTPTPEPSPASTVASVSTSTSKSGSSQPPSFI - KPDNHLDLDSPSCTLKSDLSGFRALDAIMRPFPIQIHGRFEFAEFNLCNKSYLLKLVG - KTTPEQITVPTYIFIPRHHFTPSRLSIRSSSGHYTYNTDYQVLEWFHEPGHQFIEICA - KSKSRPNTPGSDTSNDLPAECVIS" - gene complement(<373077..>374306) - /gene="PRI1" - /locus_tag="YIR008C" - /db_xref="GeneID:854825" - mRNA complement(<373077..>374306) - /gene="PRI1" - /locus_tag="YIR008C" - /product="DNA primase subunit PRI1" - /transcript_id="NM_001179530.1" - /db_xref="GeneID:854825" - CDS complement(373077..374306) - /gene="PRI1" - /locus_tag="YIR008C" - /experiment="EXISTENCE:direct assay:GO:0003697 - single-stranded DNA binding [PMID:20404922]" - /experiment="EXISTENCE:direct assay:GO:0003896 DNA primase - activity [PMID:3888995|PMID:2644256|PMID:3061469]" - /experiment="EXISTENCE:direct assay:GO:0005658 alpha DNA - polymerase:primase complex [PMID:3888995|PMID:22593576]" - /experiment="EXISTENCE:direct assay:GO:0006269 DNA - replication, synthesis of RNA primer [PMID:2644256]" - /experiment="EXISTENCE:direct assay:GO:0043596 nuclear - replication fork [PMID:16103218]" - /experiment="EXISTENCE:genetic interaction:GO:0003896 DNA - primase activity [PMID:8436268]" - /experiment="EXISTENCE:mutant phenotype:GO:0003896 DNA - primase activity [PMID:8436268]" - /experiment="EXISTENCE:mutant phenotype:GO:0006260 DNA - replication [PMID:2023935]" - /note="Subunit of DNA primase; DNA primase is required for - DNA synthesis and double-strand break repair" - /codon_start=1 - /product="DNA primase subunit PRI1" - /protein_id="NP_012273.1" - /db_xref="GeneID:854825" - /db_xref="SGD:S000001447" - /translation="MTNSVKTNGPSSSDMEYYYKSLYPFKHIFNWLNHSPKPSRDMIN - REFAMAFRSGAYKRYNSFNSVQDFKAQIEKANPDRFEIGAIYNKPPRERDTLLKSELK - ALEKELVFDIDMDDYDAFRTCCSGAQVCSKCWKFISLAMKITNTALREDFGYKDFIWV - FSGRRGAHCWVSDKRARALTDVQRRNVLDYVNVIRDRNTDKRLALKRPYHPHLARSLE - QLKPFFVSIMLEEQNPWEDDQHAIQTLLPALYDKQLIDSLKKYWLDNPRRSSKEKWND - IDQIATSLFKGPKQDSHIIKLRECKEDLVLMTLYPKLDVEVTKQTIHLLKAPFCIHPA - TGNVCVPIDESFAPEKAPKLIDLQTEMEKNNDVSLTALQPFINQFQAYVSSLLKNELG - SVKREREDDDEPASLDF" - gene <374525..>374860 - /gene="MSL1" - /locus_tag="YIR009W" - /gene_synonym="YIB9" - /db_xref="GeneID:854826" - mRNA <374525..>374860 - /gene="MSL1" - /locus_tag="YIR009W" - /gene_synonym="YIB9" - /product="U2 snRNP complex subunit MSL1" - /transcript_id="NM_001179531.1" - /db_xref="GeneID:854826" - CDS 374525..374860 - /gene="MSL1" - /locus_tag="YIR009W" - /gene_synonym="YIB9" - /experiment="EXISTENCE:direct assay:GO:0071004 U2-type - prespliceosome [PMID:16618970]" - /experiment="EXISTENCE:mutant phenotype:GO:0000398 mRNA - splicing, via spliceosome [PMID:9799242]" - /experiment="EXISTENCE:physical interaction:GO:0030620 U2 - snRNA binding [PMID:8649387]" - /note="U2B component of U2 snRNP; involved in splicing, - binds the U2 snRNA stem-loop IV in vitro but requires - association of Lea1p for in vivo binding; does not contain - the conserved C-terminal RNA binding domain found in other - family members" - /codon_start=1 - /product="U2 snRNP complex subunit MSL1" - /protein_id="NP_012274.1" - /db_xref="GeneID:854826" - /db_xref="SGD:S000001448" - /translation="MVEPARKKQRIDRDTHHTVAEPVTEAKNTLYVSQLNEKINMQRL - RVNLFLLFATFGEVLKVSMNFKKQRGQAFITMRTIDQASLAQISLNGERFFGKPLKVE - FSKSETKTL" - gene <375431..>377161 - /gene="DSN1" - /locus_tag="YIR010W" - /db_xref="GeneID:854827" - mRNA <375431..>377161 - /gene="DSN1" - /locus_tag="YIR010W" - /product="MIND complex subunit DSN1" - /transcript_id="NM_001179532.3" - /db_xref="GeneID:854827" - CDS 375431..377161 - /gene="DSN1" - /locus_tag="YIR010W" - /experiment="EXISTENCE:direct assay:GO:0000444 MIS12/MIND - type complex [PMID:14633972]" - /experiment="EXISTENCE:direct assay:GO:0000776 kinetochore - [PMID:14657030|PMID:24402315]" - /experiment="EXISTENCE:direct assay:GO:0000922 spindle - pole [PMID:12455957]" - /experiment="EXISTENCE:direct assay:GO:0007059 chromosome - segregation [PMID:12455957]" - /experiment="EXISTENCE:genetic interaction:GO:0051455 - spindle attachment to meiosis I kinetochore - [PMID:23861669]" - /note="Essential component of the outer kinetochore MIND - complex; joins kinetochore subunits contacting DNA to - those contacting microtubules; phosphorylation promotes - interaction between outer and inner kinetochore proteins; - kinetochore receptor for monopolin, via interaction with - Csm1p; essential for both meiotic and mitotic chromosome - segregation; MIND complex consists of Mtw1p, Nnf1p, Nsl1p - and Dsn1p; phosphorylated by monopolin subunit, Hrr25p and - Aurora kinase, Ipl1p; modified by sumoylation" - /codon_start=1 - /product="MIND complex subunit DSN1" - /protein_id="NP_012275.3" - /db_xref="GeneID:854827" - /db_xref="SGD:S000001449" - /translation="MSLEPTQTVSGTPPMLHQRTHKQVYPLRMETIPILESDSKATLQ - SNEPTQKDEEETEYFENKQSVSNLSPDLKFKRHKNKHIQGFPTLGERLDNLQDIKKAK - RVENFNSSAPIADDNHSGDATANATANATANATANVNASAMPAPYMPYYYYYHPMNAP - TPAMIPYPGSPMHSIMPNSSLQPFYSQPTAAGGPDMTTPQNISSSQQLLPAPQLFPYG - SFHQQQLQQPHYIQRTRERKKSIGSQRGRRLSMLASQANGGSTIISPHKDIPEEDFYT - VVGNASFGKNLQIRQLFNWCLMRSLHKLELKAKNQEEEGELEHLTKKSKLESTKAETD - YVDPKRLAMVIIKEFVDDLKKDHIAIDWEDEEKYEDEDEEKILDNTENYDDTELRQLF - QENDDDDDDDDEVDYSEIQRSRRKFSERRKALPKEPKKLLPNSKNVENTKNLSILTSK - VNAIKNEVKEWAVTLDTSRPDLEWQELTSFSSQPLEPLSDTEEPDLAIADVETKLETK - VDELRYQSHILNSHSLALNEITNSKVNKLNIETMRKISSETDDDHSQVINPQQLLKGL - SLSFSKKLDL" - gene complement(<377287..>378246) - /gene="STS1" - /locus_tag="YIR011C" - /gene_synonym="DBF8; SSM5" - /db_xref="GeneID:854828" - mRNA complement(<377287..>378246) - /gene="STS1" - /locus_tag="YIR011C" - /gene_synonym="DBF8; SSM5" - /product="Sts1p" - /transcript_id="NM_001179533.1" - /db_xref="GeneID:854828" - CDS complement(377287..378246) - /gene="STS1" - /locus_tag="YIR011C" - /gene_synonym="DBF8; SSM5" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:10913188]" - /experiment="EXISTENCE:direct assay:GO:0070628 proteasome - binding [PMID:17916559]" - /experiment="EXISTENCE:mutant phenotype:GO:0007059 - chromosome segregation [PMID:8065366]" - /experiment="EXISTENCE:mutant phenotype:GO:0031144 - proteasome localization [PMID:21075847]" - /experiment="EXISTENCE:mutant phenotype:GO:0071630 nuclear - protein quality control by the ubiquitin-proteasome system - [PMID:21075847]" - /note="Protein required for localizing proteasomes to the - nucleus; involved in cotranslational protein degradation; - mediates interaction between nuclear import factor Srp1p - and the proteasome; Sts1p and Srp1p couple proteasomes to - nascent polypeptides emerging from the ribosome for - cotranslational degradation; involved in - ubiquitin-mediated protein degradation" - /codon_start=1 - /product="Sts1p" - /protein_id="NP_012276.1" - /db_xref="GeneID:854828" - /db_xref="SGD:S000001450" - /translation="MMGFEWGFKPSSKITQSTVSSQGTGNVMIPTAGVKQKRRYANEE - QEEEELPRNKNVMKYGGVSKRRPQPGSLIRGQPLPLQRGMELMNKNQLQQLLVDLMTK - HPEIQQSVHTRVIGLDFSIQKCLDMLKQKSEAVYQSIPYNRSYESNKLDDYAFVRMKP - QILEFLNCLVDFILDNIPPRLENLHASLKFLDICTELVIKLPRFELASNNYYYDKCIE - QLSHVWCTLIEHVARDRIILLADNSSVWKSHMTRLQVYNEHSNGLLERPLQLFKSLDM - GSPSAASSSTLSLQESIIYHHDTMTANENNNNSGSAATDSPFN" - gene <378486..>379781 - /gene="SQT1" - /locus_tag="YIR012W" - /db_xref="GeneID:854829" - mRNA <378486..>379781 - /gene="SQT1" - /locus_tag="YIR012W" - /product="Sqt1p" - /transcript_id="NM_001179534.1" - /db_xref="GeneID:854829" - CDS 378486..379781 - /gene="SQT1" - /locus_tag="YIR012W" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:9271392]" - /experiment="EXISTENCE:direct assay:GO:0051082 unfolded - protein binding [PMID:26112308]" - /experiment="EXISTENCE:mutant phenotype:GO:0000027 - ribosomal large subunit assembly [PMID:9271392]" - /experiment="EXISTENCE:mutant phenotype:GO:0042273 - ribosomal large subunit biogenesis [PMID:26112308]" - /note="Specific assembly chaperone for ribosomal protein - Rpl10p; co-translationally associates with nascent Rpl10p, - preventing aggregation; involved in biogenesis of the - ribosomal large subunit; contains multiple WD repeats; - interacts genetically and physically with Qsr1p; protein - abundance increases in response to DNA replication stress" - /codon_start=1 - /product="Sqt1p" - /protein_id="NP_012277.1" - /db_xref="GeneID:854829" - /db_xref="SGD:S000001451" - /translation="MEPQEEFITTEEVEQEIVPTVEVEQDVPVDIEGENDDDDEMMND - DEEALEVDMSNNSLTYFDKHTDSVFAIGHHPNLPLVCTGGGDNLAHLWTSHSQPPKFA - GTLTGYGESVISCSFTSEGGFLVTADMSGKVLVHMGQKGGAQWKLASQMQEVEEIVWL - KTHPTIARTFAFGATDGSVWCYQINEQDGSLEQLMSGFVHQQDCSMGEFINTDKGENT - LELVTCSLDSTIVAWNCFTGQQLFKITQAEIKGLEAPWISLSLAPETLTKGNSGVVAC - GSNNGLLAVINCNNGGAILHLSTVIELKPEQDELDASIESISWSSKFSLMAIGLVCGE - ILLYDTSAWRVRHKFVLEDSVTKLMFDNDDLFASCINGKVYQFNARTGQEKFVCVGHN - MGVLDFILLHPVANTGTEQKRKVITAGDEGVSLVFEVPN" - gene complement(<380019..>380384) - /gene="GAT4" - /locus_tag="YIR013C" - /db_xref="GeneID:854830" - mRNA complement(<380019..>380384) - /gene="GAT4" - /locus_tag="YIR013C" - /product="Gat4p" - /transcript_id="NM_001179535.3" - /db_xref="GeneID:854830" - CDS complement(380019..380384) - /gene="GAT4" - /locus_tag="YIR013C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:24390141]" - /experiment="EXISTENCE:direct assay:GO:0043565 - sequence-specific DNA binding [PMID:19158363]" - /experiment="EXISTENCE:direct assay:GO:0045944 positive - regulation of transcription by RNA polymerase II - [PMID:10392447]" - /note="Protein containing GATA family zinc finger motifs; - involved in spore wall assembly; sequence similarity to - GAT3, and the double mutant gat3 gat4 exhibits reduced - dityrosine fluorescence relative to the single mutants" - /codon_start=1 - /product="Gat4p" - /protein_id="NP_012278.3" - /db_xref="GeneID:854830" - /db_xref="SGD:S000001452" - /translation="MSTKLPIVISNGTAFKKVPVQLLLNSGSEAQHGLPRNADSQPAR - PRTGITRTCGQCGEIKTSLQWREGPNGAACLCNACGLFFRKLILRFGRAAAKRYMEQI - KGTGTKRRIPKELTGTVRF" - gene <381086..>381814 - /gene="VLD1" - /locus_tag="YIR014W" - /db_xref="GeneID:854831" - mRNA <381086..>381814 - /gene="VLD1" - /locus_tag="YIR014W" - /product="Vld1p" - /transcript_id="NM_001179536.3" - /db_xref="GeneID:854831" - CDS 381086..381814 - /gene="VLD1" - /locus_tag="YIR014W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0044695 Dsc E3 - ubiquitin ligase complex [PMID:29355480]" - /experiment="EXISTENCE:mutant phenotype:GO:0031503 - protein-containing complex localization [PMID:29355480]" - /note="Component of Dsc E3 ligase complex in vacuolar - membranes; green fluorescent protein (GFP)-fusion protein - localizes to the vacuole; expression directly regulated by - the metabolic and meiotic transcriptional regulator Ume6p; - YIR014W is a non-essential gene" - /codon_start=1 - /product="Vld1p" - /protein_id="NP_012279.4" - /db_xref="GeneID:854831" - /db_xref="SGD:S000001453" - /translation="MLHLEDDNGRQRSVIANLQKFVYCCLYLRFIKDGSLFLILLGWI - ISSLCDFIQELTLRYLKKNYLEVGRDNDQEDDESLAIRGLETPIVRMIINKAIRYYQG - LILLETAYCIVYHIRLDVSRDICSKPYGFVIMLLIREFTCPVPTAFPSKLLLVLLDIL - LLFCQIVIINGSLSSSLQNVKLIVKELNAEEEGALNILKLNTWHMDATGPELIVLKNH - DKSIPQQADGDDATEITPLLNIAE" - gene <381948..>382382 - /gene="RPR2" - /locus_tag="YIR015W" - /db_xref="GeneID:854832" - mRNA <381948..>382382 - /gene="RPR2" - /locus_tag="YIR015W" - /product="ribonuclease P protein subunit RPR2" - /transcript_id="NM_001179537.1" - /db_xref="GeneID:854832" - CDS 381948..382382 - /gene="RPR2" - /locus_tag="YIR015W" - /EC_number="3.1.26.5" - /experiment="EXISTENCE:direct assay:GO:0004526 - ribonuclease P activity [PMID:19095620]" - /experiment="EXISTENCE:direct assay:GO:0005655 nucleolar - ribonuclease P complex [PMID:19095620|PMID:9620854]" - /experiment="EXISTENCE:direct assay:GO:0034965 intronic - box C/D RNA processing [PMID:18713869]" - /experiment="EXISTENCE:mutant phenotype:GO:0008033 tRNA - processing [PMID:9620854]" - /note="Subunit of nuclear RNase P; nuclear RNase P cleaves - tRNA precursors to generate mature 5' ends and facilitates - turnover of nuclear RNAs; not shared between RNase MRP and - RNase P, in contrast to all other RNase P protein - subunits; increases the activity and thermal stability of - the complex, along with Pop2p; protein abundance increases - in response to DNA replication stress" - /codon_start=1 - /product="ribonuclease P protein subunit RPR2" - /protein_id="NP_012280.1" - /db_xref="GeneID:854832" - /db_xref="SGD:S000001454" - /translation="MGKKAHGGKMKPEIDENGTLLVPPPRTIANQDHFHRLNYLYQIS - AYQTRARQKARTDAHTPLARNYIKSMDLISKKTKTSLLPTIKRTICKKCHRLLWTPKK - LEITSDGALSVMCGCGTVKRFNIGADPNYRTYSEREGNLLNS" - gene <382628..>383425 - /locus_tag="YIR016W" - /db_xref="GeneID:854833" - mRNA <382628..>383425 - /locus_tag="YIR016W" - /product="uncharacterized protein" - /transcript_id="NM_001179538.1" - /db_xref="GeneID:854833" - CDS 382628..383425 - /locus_tag="YIR016W" - /note="hypothetical protein; expression directly regulated - by the metabolic and meiotic transcriptional regulator - Ume6p; overexpression causes a cell cycle delay or arrest; - non-essential gene; YIR016W has a paralog, YOL036W, that - arose from the whole genome duplication" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012281.1" - /db_xref="GeneID:854833" - /db_xref="SGD:S000001455" - /translation="MSGTRCLLGVGLPVDVTATETLTHDEQGPGVEPGPCSRGSSIDG - LLPSLLGPHDDVDDDSAAFHKYMTLSRDGAGAIHAPSLVEDASRNDDDDDDEDDDDSS - MSRDLSKALDMSSSSSSSPRVQSRRHRSSVSAISAILHQGKSGREDITGSLSVPAEQE - KLSFLAKASSIFFRRNSMPRDKHTHSVCPASRPDSERFIVTSAAAQSLRRQQQLEDAQ - YARVITNFRTIGWCSPSEIESVEYKRSLINAEWDEKISLLSHAQCYK" - gene complement(<383556..>384119) - /gene="MET28" - /locus_tag="YIR017C" - /db_xref="GeneID:854834" - mRNA complement(<383556..>384119) - /gene="MET28" - /locus_tag="YIR017C" - /product="Met28p" - /transcript_id="NM_001179539.3" - /db_xref="GeneID:854834" - CDS complement(383556..384119) - /gene="MET28" - /locus_tag="YIR017C" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0061629 RNA - polymerase II-specific DNA-binding transcription factor - binding [PMID:8665859]" - /experiment="EXISTENCE:direct assay:GO:0089713 - Cbf1-Met4-Met28 complex [PMID:8665859|PMID:9171357]" - /experiment="EXISTENCE:direct assay:GO:2000679 positive - regulation of transcription regulatory region DNA binding - [PMID:9171357]" - /experiment="EXISTENCE:mutant phenotype:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:8665859]" - /experiment="EXISTENCE:mutant phenotype:GO:0031335 - regulation of sulfur amino acid metabolic process - [PMID:8665859]" - /experiment="EXISTENCE:physical interaction:GO:0061629 RNA - polymerase II-specific DNA-binding transcription factor - binding [PMID:8665859]" - /note="bZIP transcriptional activator in the - Cbf1p-Met4p-Met28p complex; participates in the regulation - of sulfur metabolism" - /codon_start=1 - /product="Met28p" - /protein_id="NP_012282.3" - /db_xref="GeneID:854834" - /db_xref="SGD:S000001456" - /translation="MSAKQGWEKKSTNIDIASRKGMNVNNLSEHLQNLISSDSELGSR - LLSLLLVSSGNAEELISMINNGQDVSQFKKLREPRKGKVAATTAVVVKEEEAPVSTSN - ELDKIKQERRRKNTEASQRFRIRKKQKNFENMNKLQNLNTQINKLRDRIEQLNKENEF - WKAKLNDINEIKSLKLLNDIKRRNMGR" - gene <384609..>385346 - /gene="YAP5" - /locus_tag="YIR018W" - /db_xref="GeneID:854835" - mRNA <384609..>385346 - /gene="YAP5" - /locus_tag="YIR018W" - /product="Yap5p" - /transcript_id="NM_001179540.1" - /db_xref="GeneID:854835" - CDS 384609..385346 - /gene="YAP5" - /locus_tag="YIR018W" - /experiment="EXISTENCE:direct assay:GO:0000785 chromatin - [PMID:12464632]" - /experiment="EXISTENCE:direct assay:GO:0000981 DNA-binding - transcription factor activity, RNA polymerase II-specific - [PMID:18287073]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:18070921]" - /experiment="EXISTENCE:direct assay:GO:0045944 positive - regulation of transcription by RNA polymerase II - [PMID:9372930]" - /experiment="EXISTENCE:mutant phenotype:GO:0000122 - negative regulation of transcription by RNA polymerase II - [PMID:18287073]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:18287073|PMID:18070921]" - /note="Basic leucine zipper (bZIP) iron-sensing - transcription factor; senses high-iron conditions via two - Fe/S clusters bound to its activator domain; involved in - diauxic shift; YAP5 has a paralog, YAP7, that arose from - the whole genome duplication" - /codon_start=1 - /product="Yap5p" - /protein_id="NP_012283.1" - /db_xref="GeneID:854835" - /db_xref="SGD:S000001457" - /translation="MALPLIKPKESEESHLALLSKIHVSKNWKLPPRLPHRAAQRRKR - VHRLHEDYETEENDEELQKKKRQNRDAQRAYRERKNNKLQVLEETIESLSKVVKNYET - KLNRLQNELQAKESENHALKQKLETLTLKQASVPAQDPILQNLIENFKPMKAIPIKYN - TAIKRHQHSTELPSSVKCGFCNDNTTCVCKELETDHRKSDDGVATEQKDMSMPHAECN - NKDNPNGLCSNCTNIDKSCIDIRSIIH" - gene complement(<385564..>385701) - /locus_tag="YIR018C-A" - /db_xref="GeneID:1466494" - mRNA complement(<385564..>385701) - /locus_tag="YIR018C-A" - /product="uncharacterized protein" - /transcript_id="NM_001184655.1" - /db_xref="GeneID:1466494" - CDS complement(385564..385701) - /locus_tag="YIR018C-A" - /note="hypothetical protein; identified by expression - profiling and mass spectrometry" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_878099.1" - /db_xref="GeneID:1466494" - /db_xref="SGD:S000028837" - /translation="MPSDYTSHYPVILIKKKKKKIAGMYRHSKRYLEIMSTASAQFVG - N" - gene complement(<389572..>393675) - /gene="FLO11" - /locus_tag="YIR019C" - /gene_synonym="MUC1; STA4" - /db_xref="GeneID:854836" - mRNA complement(<389572..>393675) - /gene="FLO11" - /locus_tag="YIR019C" - /gene_synonym="MUC1; STA4" - /product="Flo11p" - /transcript_id="NM_001179541.3" - /db_xref="GeneID:854836" - CDS complement(389572..393675) - /gene="FLO11" - /locus_tag="YIR019C" - /gene_synonym="MUC1; STA4" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005576 - extracellular region [PMID:20619652]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:11027318]" - /experiment="EXISTENCE:direct assay:GO:0005935 cellular - bud neck [PMID:19799621]" - /experiment="EXISTENCE:direct assay:GO:0030447 filamentous - growth [PMID:12072450]" - /experiment="EXISTENCE:mutant phenotype:GO:0000128 - flocculation [PMID:19160455]" - /experiment="EXISTENCE:mutant phenotype:GO:0001403 - invasive growth in response to glucose limitation - [PMID:12150916|PMID:19087208|PMID:8710886]" - /experiment="EXISTENCE:mutant phenotype:GO:0007124 - pseudohyphal growth [PMID:8710886]" - /experiment="EXISTENCE:mutant phenotype:GO:0043709 cell - adhesion involved in single-species biofilm formation - [PMID:11157168]" - /experiment="EXISTENCE:mutant phenotype:GO:0090606 - single-species surface biofilm formation - [PMID:12024013|PMID:19160455]" - /experiment="EXISTENCE:mutant phenotype:GO:0098609 - cell-cell adhesion [PMID:19160455|PMID:21875945]" - /note="GPI-anchored cell surface glycoprotein (flocculin); - required for pseudohyphal and invasive growth, - flocculation, and biofilm formation; major determinant of - colony morphology; QTL that controls chronological life - span; carries intragenic tandem repeats that are expanded - in different strains; required for formation of fibrous - interconnections between cells; role in co-flocculation - with other yeast species; cleaved and shed from cells, - contributing to their surface properties" - /codon_start=1 - /product="Flo11p" - /protein_id="NP_012284.3" - /db_xref="GeneID:854836" - /db_xref="SGD:S000001458" - /translation="MQRPFLLAYLVLSLLFNSALGFPTALVPRGSSEGTSCNSIVNGC - PNLDFNWHMDQQNIMQYTLDVTSVSWVQDNTYQITIHVKGKENIDLKYLWSLKIIGVT - GPKGTVQLYGYNENTYLIDNPTDFTATFEVYATQDVNSCQVWMPNFQIQFEYLQGSAA - QYASSWQWGTTSFDLSTGCNNYDNQGHSQTDFPGFYWNIDCDNNCGGTKSSTTTSSTS - ESSTTTSSTSESSTTTSSTSESSTTTSSTSESSTSSSTTAPATPTTTSCTKEKPTPPT - TTSCTKEKPTPPHHDTTPCTKKKTTTSKTCTKKTTTPVPTPSSSTTESSSAPVPTPSS - STTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVTSSTTESSSAPVTSSTTESSS - APVPTPSSSTTESSSAPVTSSTTESSSAPVTSSTTESSSAPVTSSTTESSSAPVTSST - TESSSAPVPTPSSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVTSSTTESS - SAPVPTPSSSTTESSSAPAPTPSSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSS - TPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPAPTPSSSTTESSSA - PVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAP - VTSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTP - SSSTTESSSAPVTSSTTESSSAPVPTPSSSTTESSSAPVPTPSSSTTESSSAPVPTPS - SSTTESSVAPVPTPSSSSNITSSAPSSTPFSSSTESSSVPVPTPSSSTTESSSAPVSS - STTESSVAPVPTPSSSSNITSSAPSSIPFSSTTESFSTGTTVTPSSSKYPGSQTETSV - SSTTETTIVPTKTTTSVTTPSTTTITTTVCSTGTNSAGETTSGCSPKTVTTTVPTTTT - TSVTTSSTTTITTTVCSTGTNSAGETTSGCSPKTITTTVPCSTSPSETASESTTTSPT - TPVTTVVSTTVVTTEYSTSTKPGGEITTTFVTKNIPTTYLTTIAPTPSVTTVTNFTPT - TITTTVCSTGTNSAGETTSGCSPKTVTTTVPCSTGTGEYTTEATTLVTTAVTTTVVTT - ESSTGTNSAGKTTTGYTTKSVPTTYVTTLAPSAPVTPATNAVPTTITTTECSAATNAA - GETTSVCSAKTIVSSASAGENTAPSATTPVTTAIPTTVITTESSVGTNSAGETTTGYT - TKSIPTTYITTLIPGSNGAKNYETVATATNPISIKTTSQLATTASASSVAPVVTSPSL - TGPLQSASGSAVATYSVPSISSTYQGAANIKVLGNFMWLLLALPVVF" - regulatory complement(393718..393732) - /regulatory_class="other" - /note="Upstream open reading frame (uORF) in 5' - untranslated region of FLO11 gene, regulate translation" - gene complement(393884..397082) - /gene="ICR1" - /locus_tag="YNCI0012" - /db_xref="GeneID:9164906" - ncRNA complement(393884..397082) - /ncRNA_class="other" - /gene="ICR1" - /locus_tag="YNCI0012" - /product="ICR1" - /experiment="EXISTENCE:curator inference:GO:0005634 - nucleus [PMID:19805129]" - /experiment="EXISTENCE:direct assay:GO:0006357 regulation - of transcription by RNA polymerase II [PMID:19805129]" - /experiment="EXISTENCE:genetic interaction:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:19805129]" - /experiment="EXISTENCE:mutant phenotype:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:19805129]" - /note="Long intergenic regulatory ncRNA; has a key role in - regulating transcription of the nearby protein-coding ORF - FLO11; initiated far upstream from FLO11 and transcribed - across much of the large promoter of FLO11, repressing - FLO11 transcription in cis" - /transcript_id="NR_132191.1" - /db_xref="GeneID:9164906" - /db_xref="SGD:S000132612" - gene complement(<394255..>394557) - /locus_tag="YIR020C" - /db_xref="GeneID:854837" - mRNA complement(<394255..>394557) - /locus_tag="YIR020C" - /product="uncharacterized protein" - /transcript_id="NM_001270752.1" - /db_xref="GeneID:854837" - CDS complement(394255..394557) - /locus_tag="YIR020C" - /note="hypothetical protein; mRNA identified as translated - by ribosome profiling data; SWAT-GFP fusion protein - localizes to the endoplasmic reticulum" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_001257681.1" - /db_xref="GeneID:854837" - /db_xref="SGD:S000001459" - /translation="MTFFLKRKISFFLSGIAQTFLFLPILLNRSVIHVVFLTVVLGHR - IPWDSVIRCNNTGTTHSAVSSRTELLLPIGGVINNWKRRAWNGFSIQWIWRYSFVY" - gene 395999..396939 - /gene="PWR1" - /locus_tag="YNCI0013W" - /db_xref="GeneID:9164905" - ncRNA 395999..396939 - /ncRNA_class="other" - /gene="PWR1" - /locus_tag="YNCI0013W" - /product="PWR1" - /experiment="EXISTENCE:curator inference:GO:0005634 - nucleus [PMID:19805129]" - /experiment="EXISTENCE:direct assay:GO:0006357 regulation - of transcription by RNA polymerase II [PMID:19805129]" - /experiment="EXISTENCE:mutant phenotype:GO:0006357 - regulation of transcription by RNA polymerase II - [PMID:19805129]" - /note="Intergenic regulatory ncRNA; one of two long ncRNAs - that play key roles in regulating transcription of the - nearby protein-coding ORF FLO11; PWR1 promotes FLO11 - transcription by interfering with ncRNA ICR1, which is - transcribed across the FLO11 promoter" - /transcript_id="NR_132192.1" - /db_xref="GeneID:9164905" - /db_xref="SGD:S000132614" - gene <397294..>398385 - /gene="MRS1" - /locus_tag="YIR021W" - /gene_synonym="PET157" - /db_xref="GeneID:854839" - mRNA <397294..>398385 - /gene="MRS1" - /locus_tag="YIR021W" - /gene_synonym="PET157" - /product="Mrs1p" - /transcript_id="NM_001179543.3" - /db_xref="GeneID:854839" - CDS 397294..398385 - /gene="MRS1" - /locus_tag="YIR021W" - /gene_synonym="PET157" - /experiment="EXISTENCE:direct assay:GO:0000372 Group I - intron splicing [PMID:11773622]" - /experiment="EXISTENCE:direct assay:GO:0003723 RNA binding - [PMID:11773622]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion - [PMID:14562095|PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:1990904 - ribonucleoprotein complex [PMID:12924947]" - /experiment="EXISTENCE:mutant phenotype:GO:0000963 - mitochondrial RNA processing [PMID:2443348]" - /note="Splicing protein; required for splicing of two - mitochondrial group I introns (BI3 in COB and AI5beta in - COX1); forms a splicing complex, containing four subunits - of Mrs1p and two subunits of the BI3-encoded maturase, - that binds to the BI3 RNA; MRS1 has a paralog, CCE1, that - arose from the whole genome duplication" - /codon_start=1 - /product="Mrs1p" - /protein_id="NP_012287.3" - /db_xref="GeneID:854839" - /db_xref="SGD:S000001460" - /translation="MSPKNITRSVIPAIDLYCRKANFKTLKSLSMILGSKKEWYDTKK - APLRTFLVSRCGIFEQLRGRLVEDGKVNLFSVFLTNDSFSFCKMTVDDKFNTSLVDWQ - KIPFDSTFATDRRQNISLLPVDTLFATEKIISILGVSPNMTNLVSIERERSDLVDFNC - KLQSNILEHLLYAKCQGVYVTSTNEKARLLAAVCNPEFIDTFWCELTPIRVSLKENPS - ISVPREYQMYDPVVRATIKEVVTKRLLRSAFDNDIDPLMCLHLDKGWKLKFPILSSTT - GLNFSLKDCLSLDTGKDASDMTEVFLATMESSKVLRTYSNLVDIVMKDNGRLDSGVLK - QFNDYVKQEKLNLQHFQAGSSKFLKGAKI" - gene <398514..>398726 - /locus_tag="YIR021W-A" - /db_xref="GeneID:1466495" - mRNA <398514..>398726 - /locus_tag="YIR021W-A" - /product="uncharacterized protein" - /transcript_id="NM_001184656.1" - /db_xref="GeneID:1466495" - CDS 398514..398726 - /locus_tag="YIR021W-A" - /note="hypothetical protein; identified by expression - profiling and mass spectrometry" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_878100.1" - /db_xref="GeneID:1466495" - /db_xref="SGD:S000028838" - /translation="MSFSVSCKTPKTTKLLVSSISESAVALIIITIRILFSIGKSDFK - KIISKEINGAETIYYRNIPESKPQGS" - gene <398733..>399236 - /gene="SEC11" - /locus_tag="YIR022W" - /db_xref="GeneID:854840" - mRNA <398733..>399236 - /gene="SEC11" - /locus_tag="YIR022W" - /product="signal peptidase complex catalytic subunit - SEC11" - /transcript_id="NM_001179544.1" - /db_xref="GeneID:854840" - CDS 398733..399236 - /gene="SEC11" - /locus_tag="YIR022W" - /EC_number="3.4.21.89" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:11058593]" - /experiment="EXISTENCE:direct assay:GO:0005787 signal - peptidase complex [PMID:8910564|PMID:1846444]" - /experiment="EXISTENCE:direct assay:GO:0006465 signal - peptide processing [PMID:10206957]" - /experiment="EXISTENCE:mutant phenotype:GO:0006465 signal - peptide processing [PMID:10206957|PMID:3283143]" - /experiment="EXISTENCE:mutant phenotype:GO:0008233 - peptidase activity [PMID:10206957]" - /experiment="EXISTENCE:mutant phenotype:GO:0045047 protein - targeting to ER [PMID:3283143]" - /note="18kDa catalytic subunit of the Signal Peptidase - Complex (SPC); the Signal Peptidase Complex cleaves the - signal sequence of proteins targeted to the endoplasmic - reticulum; other members are Spc1p, Spc2p, Spc3p, and - Sec11p" - /codon_start=1 - /product="signal peptidase complex catalytic subunit - SEC11" - /protein_id="NP_012288.1" - /db_xref="GeneID:854840" - /db_xref="SGD:S000001461" - /translation="MNLRFELQKLLNVCFLFASAYMFWQGLAIATNSASPIVVVLSGS - MEPAFQRGDILFLWNRNTFNQVGDVVVYEVEGKQIPIVHRVLRQHNNHADKQFLLTKG - DNNAGNDISLYANKKIYLNKSKEIVGTVKGYFPQLGYITIWISENKYAKFALLGMLGL - SALLGGE" - gene <399777..>402689 - /gene="DAL81" - /locus_tag="YIR023W" - /gene_synonym="UGA35" - /db_xref="GeneID:854841" - mRNA <399777..>402689 - /gene="DAL81" - /locus_tag="YIR023W" - /gene_synonym="UGA35" - /product="Dal81p" - /transcript_id="NM_001179545.3" - /db_xref="GeneID:854841" - CDS 399777..402689 - /gene="DAL81" - /locus_tag="YIR023W" - /gene_synonym="UGA35" - /experiment="EXISTENCE:curator inference:GO:0005634 - nucleus [PMID:21515579]" - /experiment="EXISTENCE:direct assay:GO:0003713 - transcription coactivator activity [PMID:21515579]" - /experiment="EXISTENCE:direct assay:GO:0051123 RNA - polymerase II preinitiation complex assembly - [PMID:21515579]" - /experiment="EXISTENCE:mutant phenotype:GO:0001080 - nitrogen catabolite activation of transcription from RNA - polymerase II promoter [PMID:7899074]" - /experiment="EXISTENCE:mutant phenotype:GO:0003713 - transcription coactivator activity [PMID:21515579]" - /experiment="EXISTENCE:mutant phenotype:GO:0051123 RNA - polymerase II preinitiation complex assembly - [PMID:21515579]" - /experiment="EXISTENCE:mutant phenotype:GO:1901714 - positive regulation of urea catabolic process - [PMID:2406136]" - /experiment="EXISTENCE:mutant phenotype:GO:1901717 - positive regulation of gamma-aminobutyric acid catabolic - process [PMID:2406136]" - /experiment="EXISTENCE:physical interaction:GO:0001080 - nitrogen catabolite activation of transcription from RNA - polymerase II promoter [PMID:10906145]" - /note="Positive regulator of genes in multiple nitrogen - degradation pathways; contains DNA binding domain but does - not appear to bind the dodecanucleotide sequence present - in the promoter region of many genes involved in allantoin - catabolism" - /codon_start=1 - /product="Dal81p" - /protein_id="NP_012289.3" - /db_xref="GeneID:854841" - /db_xref="SGD:S000001462" - /translation="MDPHQSPADNAASPTKSVKATTKNSSTNNNVNSNNSNNNSNHDI - LNFNDNYTTILQHLANDHPNILREKGGSQQQQHQQQQQQQQQQQQQQQQQSLDTLLHH - YQSLLSKSDNAIAFDDNVSNSADHNGSNSNNNNNNNDISSPGNLMGSCNQCRLKKTKC - NYFPDLGNCLECETSRTKCTFSIAPNYLKRTSSGANNNMPTSSNSKRMKNFEDYSNRL - PSSMLYRHQQQQQQQQQQQRIQYPRSSFFVGPASVFDLNLTKHVRLDNVDQIQLSKTL - SLRKVSPTAQFILQDDFDTTLHSKQEYEVDLVENLVHPHGHLLVEIFFKLIHPFLPIL - HERVFLEKYSRSYRELTAPLLASIYSLALQYWDFHPALLGFPKPDVTAQLNNIALETF - YARVGRPKLSIIQTGLLILQCRSECHNNWVLCSSVVALAEELGLGVECNDWKLPKWEK - DLRKRLAWAVWLMDKWCALNEGRQSHLILGRNWMIKLLNFDDFPLNSPTILNSLQNDQ - SGSSPSSSNDVKNHQIAFGNLPIFNINPTLEDFKNGTLMFQQMVSLSIILGEIMDTFY - TQGSMTINKSIEQVLKLAKPLQLKLREWYHSLPKNLSMSYATPQKLNSNSTLTLAYFA - TEITLHRKIICALNPQTPKELVQVCRTAARTRLVAAIEFIRDLKNEHINAFWYNCSTG - NLMLIGTFAALLYVTSATKEEAMIFRDYVRNYTWVLKIGSKYFDKLSNALNNMHLLFA - QIPGLLTDEPVVVSPNSNINSVNPQRSGVQSQIPIQFNVGSPAMTEQGSPLNQWKNLP - QEILQQLNSFPNGTTSTTTPVNPTSRQTQLESQGSPAINSANNNSNNTPLPFAPNKSS - KKTSQSSPNVTPSHMSRHPPSNTSSPRVNSSTNVNSNTQMNASPLTSINETRQESGDA - ADEKTAGRERTANEESSTELKDDNPNSNQETSATGNQTIKMNDDKNVTINTRETPL" - gene complement(<402841..>403491) - /gene="INA22" - /locus_tag="YIR024C" - /db_xref="GeneID:854842" - mRNA complement(<402841..>403491) - /gene="INA22" - /locus_tag="YIR024C" - /product="Ina22p" - /transcript_id="NM_001179546.1" - /db_xref="GeneID:854842" - CDS complement(402841..403491) - /gene="INA22" - /locus_tag="YIR024C" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14562095|PMID:14576278|PMID:16823961]" - /experiment="EXISTENCE:direct assay:GO:0005743 - mitochondrial inner membrane [PMID:24942160]" - /experiment="EXISTENCE:direct assay:GO:1990524 INA complex - [PMID:24942160]" - /experiment="EXISTENCE:genetic interaction:GO:0033615 - mitochondrial proton-transporting ATP synthase complex - assembly [PMID:24942160]" - /experiment="EXISTENCE:mutant phenotype:GO:0033615 - mitochondrial proton-transporting ATP synthase complex - assembly [PMID:24942160]" - /experiment="EXISTENCE:physical interaction:GO:1990524 INA - complex [PMID:24942160]" - /note="F1F0 ATP synthase peripheral stalk assembly factor; - subunit of the matrix-exposed inner mitochondrial membrane - localized INA complex (Ina22p-Ina17p) involved in assembly - of the F1F0 peripheral stalk; co-purifies with Aim43p, ATP - synthase subunits, and cytochrome bc1 complex assembly - factors; interacts with Arh1p, a mitochondrial - oxidoreductase; deletion mutant has a respiratory growth - defect" - /codon_start=1 - /product="Ina22p" - /protein_id="NP_012290.1" - /db_xref="GeneID:854842" - /db_xref="SGD:S000001463" - /translation="MFMARQVLRNGLFLRSLAPIKITARTVASANAGIKRKSRFDKTM - IKPLLLVMIFGSILNAVIAEKRNIIDMERKYKLKLDKLKELIRRVHDNNGKVDFDADD - ELKLVNLRLGIVGKNATGMKEDETDIVVPKEESLEEIWQSIIDEAKKEVIEKTPDAGV - KNKEGIVTDLNVLKDLEKSKKEDEKVYLSGDVHMMMNQPGDLNEIAKEHDKIPKFL" - gene <403659..>404765 - /gene="MND2" - /locus_tag="YIR025W" - /db_xref="GeneID:854843" - mRNA <403659..>404765 - /gene="MND2" - /locus_tag="YIR025W" - /product="Mnd2p" - /transcript_id="NM_001179547.1" - /db_xref="GeneID:854843" - CDS 403659..404765 - /gene="MND2" - /locus_tag="YIR025W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:15797380]" - /experiment="EXISTENCE:direct assay:GO:0005680 - anaphase-promoting complex [PMID:12609981|PMID:12574115]" - /experiment="EXISTENCE:direct assay:GO:1902499 positive - regulation of protein autoubiquitination [PMID:22940250]" - /experiment="EXISTENCE:direct assay:GO:1990948 ubiquitin - ligase inhibitor activity [PMID:15797379]" - /experiment="EXISTENCE:genetic interaction:GO:1905785 - negative regulation of anaphase-promoting - complex-dependent catabolic process [PMID:15797380]" - /experiment="EXISTENCE:mutant phenotype:GO:0000070 mitotic - sister chromatid segregation [PMID:15797379]" - /experiment="EXISTENCE:mutant phenotype:GO:0007131 - reciprocal meiotic recombination [PMID:11470404]" - /experiment="EXISTENCE:mutant phenotype:GO:0030071 - regulation of mitotic metaphase/anaphase transition - [PMID:12609981]" - /experiment="EXISTENCE:mutant phenotype:GO:1902426 - deactivation of mitotic spindle assembly checkpoint - [PMID:22940250]" - /experiment="EXISTENCE:mutant phenotype:GO:1902499 - positive regulation of protein autoubiquitination - [PMID:22940250]" - /experiment="EXISTENCE:physical interaction:GO:0005680 - anaphase-promoting complex [PMID:15797379]" - /note="Subunit of the Anaphase-Promoting Complex/Cyclosome - (APC/C); necessary for maintaining sister chromatid - cohesion in prophase I of meiosis by inhibiting premature - ubiquitination and subsequent degradation of substrates by - the APC(Ama1) ubiquitin ligase" - /codon_start=1 - /product="Mnd2p" - /protein_id="NP_012291.1" - /db_xref="GeneID:854843" - /db_xref="SGD:S000001464" - /translation="MARALRDISLFNDIRKDQNSAGAKHERYNMRDLRSKKNQHVNGI - DDYEDDSLDRFIRRKKSRVVKYIPSLSAYNVFNEFPYYPTSASQLLDGKLDEFLMLSE - QYKSRLPKIRKLGWNRFKPIGINKTMYELEMLRSRARAQNAEGNNEEDFRQHDSREED - PRNNGSIGRVILPHILQENEEYDTGEGVTGLHSMPNDSMAILANNSANNSQNEEVSEE - DEISYDYDAEFDHVVDEDDNEEGEVPGEGVEGIEVQRERIVPDDLLMRPTSLSRSLQQ - FVEEAHHLDRNPYDIDSDNDGEDSKVELDMNPDFEDDVGREHDYNSEYSQEPTSYGGI - TPDLASNWRNWTRERITSLDELMERRARQQRGQD" - gene complement(<404873..>405967) - /gene="YVH1" - /locus_tag="YIR026C" - /db_xref="GeneID:854844" - mRNA complement(<404873..>405967) - /gene="YVH1" - /locus_tag="YIR026C" - /product="tyrosine protein phosphatase YVH1" - /transcript_id="NM_001179548.3" - /db_xref="GeneID:854844" - CDS complement(404873..405967) - /gene="YVH1" - /locus_tag="YIR026C" - /EC_number="3.1.3.48" - /experiment="EXISTENCE:direct assay:GO:0004725 protein - tyrosine phosphatase activity [PMID:1334559]" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:19797078|PMID:19797079]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095|PMID:19797078|PMID:19797079]" - /experiment="EXISTENCE:direct assay:GO:0010494 cytoplasmic - stress granule [PMID:26777405]" - /experiment="EXISTENCE:direct assay:GO:1990275 preribosome - binding [PMID:19797078]" - /experiment="EXISTENCE:genetic interaction:GO:0000027 - ribosomal large subunit assembly [PMID:19797078]" - /experiment="EXISTENCE:genetic interaction:GO:0000055 - ribosomal large subunit export from nucleus - [PMID:19797079]" - /experiment="EXISTENCE:genetic interaction:GO:0030476 - ascospore wall assembly [PMID:10464190]" - /experiment="EXISTENCE:mutant phenotype:GO:0000027 - ribosomal large subunit assembly - [PMID:19114459|PMID:19797078]" - /experiment="EXISTENCE:mutant phenotype:GO:0000055 - ribosomal large subunit export from nucleus - [PMID:19797079]" - /experiment="EXISTENCE:mutant phenotype:GO:0030476 - ascospore wall assembly [PMID:10464190]" - /experiment="EXISTENCE:mutant phenotype:GO:0051321 meiotic - cell cycle [PMID:8896280]" - /experiment="EXISTENCE:mutant phenotype:GO:2000786 - positive regulation of autophagosome assembly - [PMID:26125457]" - /note="Dual specificity protein phosphatase; regulates - growth, sporulation, and glycogen accumulation in a - cAMP-dependent protein kinase cascade dependent manner; - mutants are defective in 60S ribosome assembly; positively - regulates pre-autophagosomal structure (PAS) formation - upon nitrogen starvation or rapamycin treatment" - /codon_start=1 - /product="tyrosine protein phosphatase YVH1" - /protein_id="NP_012292.3" - /db_xref="GeneID:854844" - /db_xref="SGD:S000001465" - /translation="MAGNANSVDEEVTRILGGIYLGGIRPIIDHRPLGAEFNITHILS - VIKFQVIPEYLIRKGYTLKNIPIDDDDVTDVLQYFDETNRFIDQCLFPNEVEYSPRLV - DFKKKPQRGAVFAHCQAGLSRSVTFIVAYLMYRYGLSLSMAMHAVKRKKPSVEPNENF - MEQLHLFEKMGGDFVDFDNPAYKQWKLKQSIKLDPSGSELVSNSGMFKDSESSQDLDK - LTEAEKSKVTAVRCKKCRTKLALSTSFIAHDPPSKESSEGHFIKRAANSHRIIDIQES - QANCSHFFIEPLKWMQPELQGKQELEGKFSCPGCSSKVGGYNWKGSRCSCGKWVIPAI - HLQTSKVDQFPLQSTALPNMVNFESEKVNR" - gene complement(<406260..>407642) - /gene="DAL1" - /locus_tag="YIR027C" - /db_xref="GeneID:854845" - mRNA complement(<406260..>407642) - /gene="DAL1" - /locus_tag="YIR027C" - /product="allantoinase" - /transcript_id="NM_001179549.3" - /db_xref="GeneID:854845" - CDS complement(406260..407642) - /gene="DAL1" - /locus_tag="YIR027C" - /EC_number="3.5.2.5" - /experiment="EXISTENCE:mutant phenotype:GO:0004038 - allantoinase activity [PMID:4604238|PMID:1803816]" - /experiment="EXISTENCE:mutant phenotype:GO:0009442 - allantoin assimilation pathway - [PMID:1803816|PMID:4604238]" - /note="Allantoinase; converts allantoin to allantoate in - the first step of allantoin degradation; expression - sensitive to nitrogen catabolite repression" - /codon_start=1 - /product="allantoinase" - /protein_id="NP_012293.3" - /db_xref="GeneID:854845" - /db_xref="SGD:S000001466" - /translation="MPINAITSDHVIINGANKPATIVYSTESGTILDVLEGSVVMEKT - EITKYEIHTLENVSPCTILPGLVDSHVHLNEPGRTSWEGFETGTQAAISGGVTTVVDM - PLNAIPPTTNVENFRIKLEAAEGQMWCDVGFWGGLVPHNLPDLIPLVKAGVRGFKGFL - LDSGVEEFPPIGKEYIEEALKVLAEEDTMMMFHAELPKAHEDQQQPEQSHREYSSFLS - SRPDSFEIDAINLILECLRARNGPVPPVHIVHLASMKAIPLIRKARASGLPVTTETCF - HYLCIAAEQIPDGATYFKCCPPIRSESNRQGLWDALREGVIGSVVSDHSPCTPELKNL - QKGDFFDSWGGIASVGLGLPLMFTQGCSLVDIVTWCCKNTSHQVGLSHQKGTIAPGYD - ADLVVFDTASKHKISNSSVYFKNKLTAYNGMTVKGTVLKTILRGQVVYTNANGVSKTP - LGQTLLDSRR" - gene <408468..>410375 - /gene="DAL4" - /locus_tag="YIR028W" - /db_xref="GeneID:854846" - mRNA <408468..>410375 - /gene="DAL4" - /locus_tag="YIR028W" - /product="allantoin permease" - /transcript_id="NM_001179550.3" - /db_xref="GeneID:854846" - CDS 408468..410375 - /gene="DAL4" - /locus_tag="YIR028W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0000256 - allantoin catabolic process [PMID:385448]" - /experiment="EXISTENCE:mutant phenotype:GO:0005274 - allantoin:proton symporter activity [PMID:385448]" - /experiment="EXISTENCE:mutant phenotype:GO:0015720 - allantoin transport [PMID:3549700|PMID:385448]" - /note="Allantoin permease; expression sensitive to - nitrogen catabolite repression and induced by allophanate, - an intermediate in allantoin degradation" - /codon_start=1 - /product="allantoin permease" - /protein_id="NP_012294.3" - /db_xref="GeneID:854846" - /db_xref="SGD:S000001467" - /translation="MANDALSAIFSNPSRKGVQPSTSIVSYTNNEDDIIDVENGKFNK - NKNINTNVYVDNSSIEESEVVPLPETKSIWSKIYYDFIVLDKTTLNVSLKESFLYNRD - LKPVEEERRCWSWFNYLYFWLADCFNINTWQIAGTGLQLGLNWWQCWLTVWIGYTFAG - IFVVLNSRFGSAYHLSFPITVRASFGIFFSMWPIINRVVMAIVWYAVQAWLGATPVAL - MLKSIFGKNLEDRIPNHFGSPNSTTFEFMCFFIFWVVSIPFVLVAPHKIRHLFTVKAA - LIPFAAFGFLIWALKKSHGKIELGTLNDYSPHGSEFSWIFVRSLMACVANFAALIINA - PDFGRFAKNPQASLWPQLVAIPLFFAITCLIGIIVTAAGYHLYGVNYWSPLDVLGQFL - ETTYTRGTRAGVFLISFVFALAQLGTNISANSLACGADMTALFPRYINIRRGSLFCVA - MALCICPWNLMASSSKFTSALGAYAIFLSSIAGVICADYFVVRRGYVKLTHLFLAQKG - SFYMFGNKFGANWRAFVAYICGIAPNLPGFIGDVGAPKITVSEGAMRLYYLGYPVGFF - ISAVIYLILCYFFPVPGTPVTNFLTEKGWFQRWAYVEDFEQDWKNELRRDDLCDDTVS - IYDGTEEKIVY" - gene <410807..>411838 - /gene="DAL2" - /locus_tag="YIR029W" - /gene_synonym="ALC1" - /db_xref="GeneID:854847" - mRNA <410807..>411838 - /gene="DAL2" - /locus_tag="YIR029W" - /gene_synonym="ALC1" - /product="allantoicase" - /transcript_id="NM_001179551.1" - /db_xref="GeneID:854847" - CDS 410807..411838 - /gene="DAL2" - /locus_tag="YIR029W" - /gene_synonym="ALC1" - /EC_number="3.5.3.4" - /experiment="EXISTENCE:direct assay:GO:0004037 - allantoicase activity [PMID:3915539]" - /experiment="EXISTENCE:mutant phenotype:GO:0000256 - allantoin catabolic process [PMID:1916277]" - /note="Allantoicase; converts allantoate to urea and - ureidoglycolate in the second step of allantoin - degradation; expression sensitive to nitrogen catabolite - repression and induced by allophanate, an intermediate in - allantoin degradation" - /codon_start=1 - /product="allantoicase" - /protein_id="NP_012295.1" - /db_xref="GeneID:854847" - /db_xref="SGD:S000001468" - /translation="MKFFSLADEAEFKSIIISKNKAVDVIGSKLGGQVVSFSDEWFAS - AENLIQPTAPIRDPTRFVHSGAWYDGWETRRHNEMEYDWVIIKMGVAAAHIIGGEIDT - AFFNGNHAPFVSIEALYDEGEEGNIVEDDSRWVEIVEKFECGPSQRHLFVRGNGLTKE - RFTHIKLKMYPDGGIARFRLYGRVVPPELKTKDHIIDLAYVCNGAVALKYSDQHFGSV - DNLLLPGRGHDMSDGWETKRSRQPGHTDWAVIQLGRESSFIEKIIVDTAHFRGNFPQF - ITVEGCLKESESSENTGEGTWVELVGKSKTGPDKEHVYEIRKSIRVSHVKLTIIPDGG - VKRIRVWGY" - rep_origin 411935..412011 - /note="ARS922; Autonomously Replicating Sequence" - /db_xref="SGD:S000118400" - gene complement(<412036..>412770) - /gene="DCG1" - /locus_tag="YIR030C" - /db_xref="GeneID:854848" - mRNA complement(<412036..>412770) - /gene="DCG1" - /locus_tag="YIR030C" - /product="Dcg1p" - /transcript_id="NM_001179552.1" - /db_xref="GeneID:854848" - CDS complement(412036..412770) - /gene="DCG1" - /locus_tag="YIR030C" - /experiment="EXISTENCE:expression pattern:GO:0006807 - nitrogen compound metabolic process [PMID:1916277]" - /note="hypothetical protein; expression is sensitive to - nitrogen catabolite repression and regulated by Dal80p; - contains transmembrane domain" - /codon_start=1 - /product="Dcg1p" - /protein_id="NP_012296.1" - /db_xref="GeneID:854848" - /db_xref="SGD:S000001469" - /translation="METRILVVNPNSSKSMTVSLRETIEKTFSMESCKISYFTGPDTS - PPQIDGQETSIKSMEACLPLLIDDQESVYYFQKFNGILIACFSDHPLVAKIKDRAAKE - KADVSIVGLLDSSINYCNLVGKKFSIITSNKEWIPILNNSVESKFLTGNTVNKNLWKG - TVSTDLQVLDLHSPENFQQIAEIIYRENIKKLDSDIVILGCAGFSGLQNKLAKTFQRD - GTLFLDTIEIGLQILITMIRFVNSQK" - gene complement(<413015..>414679) - /gene="DAL7" - /locus_tag="YIR031C" - /gene_synonym="MLS2; MSL2" - /db_xref="GeneID:854849" - mRNA complement(<413015..>414679) - /gene="DAL7" - /locus_tag="YIR031C" - /gene_synonym="MLS2; MSL2" - /product="malate synthase DAL7" - /transcript_id="NM_001179553.3" - /db_xref="GeneID:854849" - CDS complement(413015..414679) - /gene="DAL7" - /locus_tag="YIR031C" - /gene_synonym="MLS2; MSL2" - /EC_number="2.3.3.9" - /experiment="EXISTENCE:direct assay:GO:0000256 allantoin - catabolic process [PMID:8462696]" - /experiment="EXISTENCE:direct assay:GO:0004474 malate - synthase activity [PMID:8462696]" - /experiment="EXISTENCE:direct assay:GO:0005777 peroxisome - [PMID:27678487]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0004474 malate - synthase activity [PMID:23642236]" - /note="Malate synthase; can accept butyryl-CoA as acyl-CoA - donor in addition to traditional substrate acetyl-CoA; - recycles glyoxylate generated during allantoin - degradation; SWAT-GFP and mCherry fusion proteins localize - to the cytosol; expression sensitive to nitrogen - catabolite repression and induced by allophanate, an - intermediate in allantoin degradation" - /codon_start=1 - /product="malate synthase DAL7" - /protein_id="NP_012297.3" - /db_xref="GeneID:854849" - /db_xref="SGD:S000001470" - /translation="MVKISLDNTALYADIDTTPQFEPSKTTVADILTKDALEFIVLLH - RTFNSTRKQLLANRSNLQSKLDSGEYRFDFLPETEQIRNDPTWQGAIPAPGLINRSSE - ITGPPLRNMLVNALNAEVTTYMTDFEDSSSPTWENMIYGQVNLYDAIRNQIDFKTPRK - EYRLKDDISRLPTLIVRPRGWHMVEKHLYIDDEPISASIFDFGLYFYHNAKELVKIGK - GPYFYLPKMEHHMEVKLWNDIFCVAQDFIGMPRGTIRATVLIETLPAAFQMEEIIYQI - REHSSGLNCGRWDYIFSTIKKLRNLPEHVLPNRDLVTMTSPFMDAYVKRLINTCHRRG - VHAMGGMAAQIPIKDDPKANEAAMNKVRNDKIREMKNGHDGSWVAHPALAPICNEVFS - NMGTANQIYFVPDVHVTSSDLLNTKIQDAQVTTEGIRVNLDIGLQYMEAWLRGSGCVP - INHLMEDAATAEVSRCQLYQWVKHGVVLSDTGDKVTPELTAKILNEETAKLASASPLG - EKNKFALAAKYFLPEVTGKIFSDFLTTLLYDEIIKPSAKPVDLSKL" - gene complement(<415030..>415617) - /gene="DAL3" - /locus_tag="YIR032C" - /db_xref="GeneID:854850" - mRNA complement(<415030..>415617) - /gene="DAL3" - /locus_tag="YIR032C" - /product="ureidoglycolate hydrolase" - /transcript_id="NM_001179554.1" - /db_xref="GeneID:854850" - CDS complement(415030..415617) - /gene="DAL3" - /locus_tag="YIR032C" - /EC_number="4.3.2.3" - /experiment="EXISTENCE:curator inference:GO:0000256 - allantoin catabolic process [PMID:3915539]" - /experiment="EXISTENCE:direct assay:GO:0050385 - ureidoglycolate lyase activity [PMID:5965980]" - /experiment="EXISTENCE:mutant phenotype:GO:0050385 - ureidoglycolate lyase activity [PMID:3915539]" - /note="Ureidoglycolate lyase; converts ureidoglycolate to - glyoxylate and urea in the third step of allantoin - degradation; expression is sensitive to nitrogen - catabolite repression; this enzyme is sometimes referred - to 'ureidoglycolate hydrolase' but should not be confused - with the Arabidopsis thaliana ureidoglycolate hydrolase - enzyme which converts ureidoglycolate to glyoxylate, - ammonia and carbon dioxide" - /codon_start=1 - /product="ureidoglycolate hydrolase" - /protein_id="NP_012298.1" - /db_xref="GeneID:854850" - /db_xref="SGD:S000001471" - /translation="MVTVVAETLTKESFEEYGTIISPDEEISRMQNLEKGANQGTAIK - LLQVSQVENKSTSKVPNWNLFRCFPQPHLNRVFTQGSNQAISHSIKVLEKHPCSTQTF - VPMGRTSAEVAYLVVVAKEIGNKPDLSTLRAFTCLGNQAVTYGLGTWHAPMIVLGKEE - HLDFSVLIYESLDPDRPEKDCVEEHYSDGDVCIII" - gene <416124..>419465 - /gene="MGA2" - /locus_tag="YIR033W" - /db_xref="GeneID:854851" - mRNA <416124..>419465 - /gene="MGA2" - /locus_tag="YIR033W" - /product="Mga2p" - /transcript_id="NM_001179555.1" - /db_xref="GeneID:854851" - CDS 416124..419465 - /gene="MGA2" - /locus_tag="YIR033W" - /experiment="EXISTENCE:direct assay:GO:0005634 nucleus - [PMID:19061897]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0005789 endoplasmic - reticulum membrane [PMID:11007476]" - /experiment="EXISTENCE:genetic interaction:GO:0030466 - silent mating-type cassette heterochromatin formation - [PMID:11063674]" - /experiment="EXISTENCE:genetic interaction:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:9927444]" - /experiment="EXISTENCE:mutant phenotype:GO:0045944 - positive regulation of transcription by RNA polymerase II - [PMID:11557770|PMID:29627385|PMID:11509659]" - /experiment="EXISTENCE:mutant phenotype:GO:0048255 mRNA - stabilization [PMID:15220333]" - /note="ER membrane protein involved in regulation of OLE1 - transcription; inactive ER form dimerizes and one subunit - is then activated by ubiquitin/proteasome-dependent - processing followed by nuclear targeting; MGA2 has a - paralog, SPT23, that arose from the whole genome - duplication" - /codon_start=1 - /product="Mga2p" - /protein_id="NP_012299.1" - /db_xref="GeneID:854851" - /db_xref="SGD:S000001472" - /translation="MQQNSEFLTETPGSDPHISQLHANSVMESQLLDDFLLNGSPMYQ - DDSMAHINIDEGANFQNFIKTDEGDSPNLLSFEGIGNNTHVNQNVSTPLEEEMESNRA - LKEEEEDEHENKVFNEKNIGNPAHDEIVFGRKETIQSVYINPLDYLKVNAAQLPLDVE - VSGLPQVSRVENQLKLKVKITSETPLNQSMLYLPSDSISREKFYLKKNIEDFSEDFKK - NLLYINAFVLCAVSNRTTNVCTKCVKREQRRAARRKSGIADNLLWCNNINRRLVVFNN - KQVFPIMKTFDNVKEFELTTRLVCYCRHHKANNGFVILFTITDWQNRLLGKFTTTPIM - ITDRKPANMDTTKFNNTTTSSRRQLTEEESTTEYYSTDNNQLSKDENMPFQYTYQHNP - YDNDSQMNNIPLKDKNVPFPYSISQQTDLLQNNNLSLNLSLPNQHIPSPTSMSEEGSE - SFNYHHRDNDNPVRTISLTNIEQQSQLNQRKRARNNLENDIGKPLFKHSFSNSISATN - TMNPALHSMQDFSMKNNNNNLPSINRVIPSQGPINGGIEVTLLGCNFKDGLSVKFGSN - LALSTQCWSETTIVTYLPPAAYAGQVFVSITDTNNENNNDDLPQEIEINDNKKAIFTY - VDDTDRQLIELALQIVGLKMNGKLEDARNIAKRIVGNDSPDSGTNGNSCSKSTGPSPN - QHSMNLNTSVLYSDEVLIQKVIKSLNINSNISICDSLGRTLLHLACLKNYSSLVYTLI - KKGARVNDIDSFGLTPLHFACISGDPKIIKMLLNCKVNYSLRSHNGLTAREVFIANHI - HSKEIDKKQDNRDNHKFVHNDTYISEVLSLFEEFQNGTKFTDSVETDSNYSISRKYSQ - SSFNSSLLDNESLNENLFESQSMINPTSMEIQHPTLQLFENSSYSEYDQSDFEEDGDE - DLFVTDEVEKPGVACREEQSELLDIGSSANEPEEDNGSTSLWNRVLHRINDDLPKYED - LFPLSWGKDDKLKTTNQDSIVEQSASNIENSENSEEEDYEEEEEFLKKQFNRFFQNKQ - NFRNDKMLIFFWIPLTLLLLTWFIMYKFGNQDSSINHISELISEYLRIALAKFLLGNE - RMKTAFRSKLSNLQTTRMLNDLIVS" - gene complement(<419615..>420736) - /gene="LYS1" - /locus_tag="YIR034C" - /db_xref="GeneID:854852" - mRNA complement(<419615..>420736) - /gene="LYS1" - /locus_tag="YIR034C" - /product="saccharopine dehydrogenase (NAD+, - L-lysine-forming)" - /transcript_id="NM_001179556.3" - /db_xref="GeneID:854852" - CDS complement(419615..420736) - /gene="LYS1" - /locus_tag="YIR034C" - /EC_number="1.5.1.7" - /experiment="EXISTENCE:direct assay:GO:0003729 mRNA - binding [PMID:20844764]" - /experiment="EXISTENCE:direct assay:GO:0004754 - saccharopine dehydrogenase (NAD+, L-lysine-forming) - activity [PMID:17002315]" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276]" - /experiment="EXISTENCE:mutant phenotype:GO:0009085 lysine - biosynthetic process [PMID:17247984]" - /experiment="EXISTENCE:mutant phenotype:GO:0016558 protein - import into peroxisome matrix [PMID:35563734]" - /note="Saccharopine dehydrogenase (NAD+, - L-lysine-forming); catalyzes the conversion of - saccharopine to L-lysine, which is the final step in the - lysine biosynthesis pathway; contains mRNA binding - activity; required for targeting of Pls1p to the - peroxisomal matrix in the absence of lysine" - /codon_start=1 - /product="saccharopine dehydrogenase (NAD+, - L-lysine-forming)" - /protein_id="NP_012300.3" - /db_xref="GeneID:854852" - /db_xref="SGD:S000001473" - /translation="MAAVTLHLRAETKPLEARAALTPTTVKKLIAKGFKIYVEDSPQS - TFNINEYRQAGAIIVPAGSWKTAPRDRIIIGLKEMPETDTFPLVHEHIQFAHCYKDQA - GWQNVLMRFIKGHGTLYDLEFLENDQGRRVAAFGFYAGFAGAALGVRDWAFKQTHSDD - EDLPAVSPYPNEKALVKDVTKDYKEALATGARKPTVLIIGALGRCGSGAIDLLHKVGI - PDANILKWDIKETSRGGPFDEIPQADIFINCIYLSKPIAPFTNMEKLNNPNRRLRTVV - DVSADTTNPHNPIPIYTVATVFNKPTVLVPTTAGPKLSVISIDHLPSLLPREASEFFS - HDLLPSLELLPQRKTAPVWVRAKKLFDRHCARVKRSSRL" - gene complement(<421026..>421790) - /gene="NRE1" - /locus_tag="YIR035C" - /db_xref="GeneID:854853" - mRNA complement(<421026..>421790) - /gene="NRE1" - /locus_tag="YIR035C" - /product="sepiapterin reductase family protein" - /transcript_id="NM_001179557.3" - /db_xref="GeneID:854853" - CDS complement(421026..421790) - /gene="NRE1" - /locus_tag="YIR035C" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:11914276|PMID:14562095]" - /note="Putative cytoplasmic short-chain - dehydrogenase/reductase" - /codon_start=1 - /product="sepiapterin reductase family protein" - /protein_id="NP_012301.3" - /db_xref="GeneID:854853" - /db_xref="SGD:S000001474" - /translation="MGKVILVTGVSRGIGKSIVDVLFSLDKDTVVYGVARSEAPLKKL - KEKYGDRFFYVVGDITEDSVLKQLVNAAVKGHGKIDSLVANAGVLEPVQNVNEIDVNA - WKKLYDINFFSIVSLVGIALPELKKTNGNVVFVSSDACNMYFSSWGAYGSSKAALNHF - AMTLANEERQVKAIAVAPGIVDTDMQVNIRENVGPSSMSAEQLKMFRGLKENNQLLDS - SVPATVYAKLALHGIPDGVNGQYLSYNDPALADFMP" - gene complement(<422074..>422865) - /gene="IRC24" - /locus_tag="YIR036C" - /db_xref="GeneID:854854" - mRNA complement(<422074..>422865) - /gene="IRC24" - /locus_tag="YIR036C" - /product="sepiapterin reductase family protein IRC24" - /transcript_id="NM_001179558.3" - /db_xref="GeneID:854854" - CDS complement(422074..422865) - /gene="IRC24" - /locus_tag="YIR036C" - /EC_number="1.1.1.320" - /experiment="EXISTENCE:direct assay:GO:0005737 cytoplasm - [PMID:14562095]" - /experiment="EXISTENCE:direct assay:GO:0050664 - oxidoreductase activity, acting on NAD(P)H, oxygen as - acceptor [PMID:11796169]" - /note="Putative benzil reductase;(GFP)-fusion protein - localizes to the cytoplasm and is induced by the - DNA-damaging agent MMS; sequence similarity with - short-chain dehydrogenase/reductases; null mutant has - increased spontaneous Rad52p foci" - /codon_start=1 - /product="sepiapterin reductase family protein IRC24" - /protein_id="NP_012302.3" - /db_xref="GeneID:854854" - /db_xref="SGD:S000001475" - /translation="MGKVILITGASRGIGLQLVKTVIEEDDECIVYGVARTEAGLQSL - QREYGADKFVYRVLDITDRSRMEALVEEIRQKHGKLDGIVANAGMLEPVKSISQSNSE - HDIKQWERLFDVNFFSIVSLVALCLPLLKSSPFVGNIVFVSSGASVKPYNGWSAYGCS - KAALNHFAMDIASEEPSDKVRAVCIAPGVVDTQMQKDIRETLGPQGMTPKALERFTQL - YKTSSLLDPKVPAAVLAQLVLKGIPDSLNGQYLRYNDERLGPVQG" - gene <423128..>423619 - /gene="HYR1" - /locus_tag="YIR037W" - /gene_synonym="GPX3; ORP1" - /db_xref="GeneID:854855" - mRNA <423128..>423619 - /gene="HYR1" - /locus_tag="YIR037W" - /gene_synonym="GPX3; ORP1" - /product="peroxiredoxin HYR1" - /transcript_id="NM_001179559.1" - /db_xref="GeneID:854855" - CDS 423128..423619 - /gene="HYR1" - /locus_tag="YIR037W" - /gene_synonym="GPX3; ORP1" - /EC_number="1.11.1.24" - /experiment="EXISTENCE:direct assay:GO:0004602 glutathione - peroxidase activity [PMID:19755417]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005758 - mitochondrial intermembrane space [PMID:22984289]" - /experiment="EXISTENCE:direct assay:GO:0005782 peroxisomal - matrix [PMID:22659048]" - /experiment="EXISTENCE:direct assay:GO:0005829 cytosol - [PMID:26928762]" - /experiment="EXISTENCE:direct assay:GO:0047066 - phospholipid-hydroperoxide glutathione peroxidase activity - [PMID:11445588]" - /experiment="EXISTENCE:mutant phenotype:GO:0004602 - glutathione peroxidase activity [PMID:10480913]" - /experiment="EXISTENCE:mutant phenotype:GO:0034599 - cellular response to oxidative stress [PMID:11445588]" - /experiment="EXISTENCE:mutant phenotype:GO:0047066 - phospholipid-hydroperoxide glutathione peroxidase activity - [PMID:11445588]" - /note="Glutathione peroxidase; functions as hydroperoxide - receptor to sense intracellular hydroperoxide levels and - transduce redox signal to Yap1p transcription factor; - glutathione peroxidase activity is neuroprotective in - models of Huntington's disease; HYR1 has a paralog, GPX1, - that arose from the whole genome duplication" - /codon_start=1 - /product="peroxiredoxin HYR1" - /protein_id="NP_012303.1" - /db_xref="GeneID:854855" - /db_xref="SGD:S000001476" - /translation="MSEFYKLAPVDKKGQPFPFDQLKGKVVLIVNVASKCGFTPQYKE - LEALYKRYKDEGFTIIGFPCNQFGHQEPGSDEEIAQFCQLNYGVTFPIMKKIDVNGGN - EDPVYKFLKSQKSGMLGLRGIKWNFEKFLVDKKGKVYERYSSLTKPSSLSETIEELLK - EVE" - gene complement(<423809..>424513) - /gene="GTT1" - /locus_tag="YIR038C" - /db_xref="GeneID:854856" - mRNA complement(<423809..>424513) - /gene="GTT1" - /locus_tag="YIR038C" - /product="bifunctional glutathione transferase/peroxidase" - /transcript_id="NM_001179560.1" - /db_xref="GeneID:854856" - CDS complement(423809..424513) - /gene="GTT1" - /locus_tag="YIR038C" - /EC_number="2.5.1.18" - /experiment="EXISTENCE:direct assay:GO:0004364 glutathione - transferase activity [PMID:9792709]" - /experiment="EXISTENCE:direct assay:GO:0004602 glutathione - peroxidase activity [PMID:16709151]" - /experiment="EXISTENCE:direct assay:GO:0005739 - mitochondrion [PMID:14576278|PMID:16823961|PMID:24769239]" - /experiment="EXISTENCE:direct assay:GO:0005741 - mitochondrial outer membrane [PMID:16407407]" - /experiment="EXISTENCE:direct assay:GO:0005783 endoplasmic - reticulum [PMID:26928762|PMID:9792709]" - /experiment="EXISTENCE:direct assay:GO:0005886 plasma - membrane [PMID:16622836]" - /experiment="EXISTENCE:direct assay:GO:0006749 glutathione - metabolic process [PMID:9792709]" - /experiment="EXISTENCE:direct assay:GO:0071944 cell - periphery [PMID:26928762]" - /experiment="EXISTENCE:mutant phenotype:GO:0010731 protein - glutathionylation [PMID:27708136]" - /note="ER associated glutathione S-transferase; capable of - homodimerization; glutathione transferase for Yvc1p - vacuolar cation channel; expression induced during the - diauxic shift and throughout stationary phase; functional - overlap with Gtt2p, Grx1p, and Grx2p" - /codon_start=1 - /product="bifunctional glutathione transferase/peroxidase" - /protein_id="NP_012304.1" - /db_xref="GeneID:854856" - /db_xref="SGD:S000001477" - /translation="MSLPIIKVHWLDHSRAFRLLWLLDHLNLEYEIVPYKRDANFRAP - PELKKIHPLGRSPLLEVQDRETGKKKILAESGFIFQYVLQHFDHSHVLMSEDADIADQ - INYYLFYVEGSLQPPLMIEFILSKVKDSGMPFPISYLARKVADKISQAYSSGEVKNQF - DFVEGEISKNNGYLVDGKLSGADILMSFPLQMAFERKFAAPEDYPAISKWLKTITSEE - SYAASKEKARALGSNF" - repeat_region complement(426201..426425) - /note="Ty1 LTR" - /rpt_type=long_terminal_repeat - /db_xref="SGD:S000007021" - gene complement(<430498..>432111) - /gene="YPS6" - /locus_tag="YIR039C" - /db_xref="GeneID:854857" - mRNA complement(<430498..>432111) - /gene="YPS6" - /locus_tag="YIR039C" - /product="aspartyl protease" - /transcript_id="NM_001179561.3" - /db_xref="GeneID:854857" - CDS complement(430498..432111) - /gene="YPS6" - /locus_tag="YIR039C" - /experiment="EXISTENCE:direct assay:GO:0009277 fungal-type - cell wall [PMID:10383953]" - /experiment="EXISTENCE:genetic interaction:GO:0031505 - fungal-type cell wall organization [PMID:16087741]" - /note="Putative GPI-anchored aspartic protease; member of - the yapsin family of proteases involved in cell wall - growth and maintenance" - /codon_start=1 - /product="aspartyl protease" - /protein_id="NP_012305.3" - /db_xref="GeneID:854857" - /db_xref="SGD:S000001478" - /translation="MQLISILSLLSSLMCSLTVLGSSASSYVKFPVQKLADIINICTQ - DVSTVFKRNEVLNTTVINGIGVYVVKMEIGTPPQTLYLQLDTGSSDMIVNNADIAYCK - SMSDGSDYASTDNYELTATFNGLPSTTISSEAYNTLCSYWGTFDASNSSTFENNATFF - NNTYGDGTYYAGTYGTDVVSFENITLNDFTFGVSNDTIGNPSGILGISLPIAEFTDGI - EYALALNRTPFIYDNFPMELKNQGKINKIAYSLFLNGPDAHFGSILFGAVDKSKYTGQ - LYTLPMLQAFNTLGSNPGMIITAQSVAILDSESGNKTVSDIQFPVMLDSGTTFSYLPT - EIAEAIGKSFDGEYSSDDQGYIFDCSKVNDTLLSVDFGGFNISANISNFVTSAKDRCV - LNVKQSESTYMLGDAFLVDAYVVYDLENYEISIAQASFNNQEEDIEVISDTVPGATPA - PGYFSTWVYKPGSPIGTGDFINVSWTSYSEFSQYKSLLATAAQSDDASSFSSSGGSSE - STTKKQNAGYKYRSSFSFSLLSFISYFLL" - gene <433929..>434303 - /gene="PAU15" - /locus_tag="YIR041W" - /db_xref="GeneID:854859" - mRNA <433929..>434303 - /gene="PAU15" - /locus_tag="YIR041W" - /product="seripauperin PAU15" - /transcript_id="NM_001179563.1" - /db_xref="GeneID:854859" - CDS 433929..434303 - /gene="PAU15" - /locus_tag="YIR041W" - /experiment="EXISTENCE:direct assay:GO:0000324 fungal-type - vacuole [PMID:26928762]" - /note="hypothetical protein; member of the seripauperin - multigene family encoded mainly in subtelomeric regions; - SWAT-GFP and mCherry fusion proteins localize to the - vacuole" - /codon_start=1 - /product="seripauperin PAU15" - /protein_id="NP_012307.1" - /db_xref="GeneID:854859" - /db_xref="SGD:S000001480" - /translation="MVKLTSIAAGVAAIAAGVAAAPATTTLSPSDERVNLVELGVYVS - DIRAHLAQYYLFQAAHPSETYPVEIAEAVFNYGDFTTMLTGIPAEQVTRVITGVPWYS - TRLRPAISSALSKDGIYTAIPK" - gene complement(<435273..>435983) - /locus_tag="YIR042C" - /db_xref="GeneID:854860" - mRNA complement(<435273..>435983) - /locus_tag="YIR042C" - /product="uncharacterized protein" - /transcript_id="NM_001179564.1" - /db_xref="GeneID:854860" - CDS complement(435273..435983) - /locus_tag="YIR042C" - /note="hypothetical protein; YIR042C is a non-essential - gene" - /codon_start=1 - /product="uncharacterized protein" - /protein_id="NP_012308.1" - /db_xref="GeneID:854860" - /db_xref="SGD:S000001481" - /translation="MANLNIFGQEVGADVEGWTTRAFPEKVVLKGNTCRLEPLDRERH - GSELFSAYSEAGQKLWTYLPAGPFTNLEEYLEFIKELNETKDTVPFAIINKETERAVG - TLCLIRIDEANGSLEVGYVVFSPELQKTIIATEAQFLLMKYVFDDLQYRRYEWKCDSL - NGPSRRAAMRLGFKYEGTFRQVVVYKGRTRDTQWFSIIDKEWLRIRKTFEEWLDKTNF - ENGKQKRGIAAIRESLSN" - gene complement(437043..438179) - /locus_tag="YIR043C" - /gene_synonym="YIR044C" - /pseudo - /db_xref="GeneID:854861" - CDS complement(437043..438179) - /locus_tag="YIR043C" - /gene_synonym="YIR044C" - /note="Blocked reading frame; may encode a non-functional - member of the conserved, often subtelomerically-encoded - Cos protein family" - /pseudo - /codon_start=1 - /db_xref="GeneID:854861" - /db_xref="SGD:S000001482" - telomere 439068..439888 - /note="TEL09R; Telomeric region on the right arm of - Chromosome IX; composed of an X element core sequence, X - element combinatorial repeats, and a short terminal - stretch of telomeric repeats" - /db_xref="SGD:S000028970" -CONTIG join(BK006942.2:1..439888) -// - diff --git a/data/NC_001141.2_redux.gb b/data/NC_001141.2_redux.gb new file mode 100644 index 00000000..6a45765c --- /dev/null +++ b/data/NC_001141.2_redux.gb @@ -0,0 +1,147 @@ +LOCUS NC_001141 439888 bp DNA linear CON 15-SEP-2023 +DEFINITION Saccharomyces cerevisiae S288C chromosome IX, complete sequence. +ACCESSION NC_001141 +VERSION NC_001141.2 +DBLINK BioProject: PRJNA128 + Assembly: GCF_000146045.2 +KEYWORDS RefSeq. +SOURCE Saccharomyces cerevisiae S288C + ORGANISM Saccharomyces cerevisiae S288C + Eukaryota; Fungi; Dikarya; Ascomycota; Saccharomycotina; + Saccharomycetes; Saccharomycetales; Saccharomycetaceae; + Saccharomyces. +REFERENCE 1 (bases 1 to 439888) + AUTHORS Engel,S.R., Wong,E.D., Nash,R.S., Aleksander,S., Alexander,M., + Douglass,E., Karra,K., Miyasato,S.R., Simison,M., Skrzypek,M.S., + Weng,S. and Cherry,J.M. + TITLE New data and collaborations at the Saccharomyces Genome Database: + updated reference genome, alleles, and the Alliance of Genome + Resources + JOURNAL Genetics 220 (4) (2022) + PUBMED 34897464 +REFERENCE 2 (bases 1 to 439888) + AUTHORS Churcher,C., Bowman,S., Badcock,K., Bankier,A., Brown,D., + Chillingworth,T., Connor,R., Devlin,K., Gentles,S., Hamlin,N., + Harris,D., Horsnell,T., Hunt,S., Jagels,K., Jones,M., Lye,G., + Moule,S., Odell,C., Pearson,D., Rajandream,M., Rice,P., Rowley,N., + Skelton,J., Smith,V., Barrell,B. et al. + TITLE The nucleotide sequence of Saccharomyces cerevisiae chromosome IX + JOURNAL Nature 387 (6632 SUPPL), 84-87 (1997) + PUBMED 9169870 +REFERENCE 3 (bases 1 to 439888) + AUTHORS Goffeau,A., Barrell,B.G., Bussey,H., Davis,R.W., Dujon,B., + Feldmann,H., Galibert,F., Hoheisel,J.D., Jacq,C., Johnston,M., + Louis,E.J., Mewes,H.W., Murakami,Y., Philippsen,P., Tettelin,H. and + Oliver,S.G. + TITLE Life with 6000 genes + JOURNAL Science 274 (5287), 546 (1996) + PUBMED 8849441 +REFERENCE 4 (bases 1 to 439888) + CONSRTM NCBI Genome Project + TITLE Direct Submission + JOURNAL Submitted (14-SEP-2023) National Center for Biotechnology + Information, NIH, Bethesda, MD 20894, USA +REFERENCE 5 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (04-MAY-2012) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA + REMARK Protein update by submitter +REFERENCE 6 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (31-MAR-2011) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA + REMARK Sequence update by submitter +REFERENCE 7 (bases 1 to 439888) + CONSRTM Saccharomyces Genome Database + TITLE Direct Submission + JOURNAL Submitted (14-DEC-2009) Department of Genetics, Stanford + University, Stanford, CA 94305-5120, USA +COMMENT REVIEWED REFSEQ: This record has been curated by SGD. The reference + sequence is identical to BK006942. + + On Apr 26, 2011 this sequence version replaced NC_001141.1. + + ##Genome-Annotation-Data-START## + Annotation Provider :: SGD + Annotation Status :: Full Annotation + Annotation Version :: R64-4-1 + URL :: http://www.yeastgenome.org/ + ##Genome-Annotation-Data-END## + COMPLETENESS: full length. +FEATURES Location/Qualifiers + source 1..439888 + /organism="Saccharomyces cerevisiae S288C" + /mol_type="genomic DNA" + /strain="S288C" + /db_xref="taxon:559292" + /chromosome="IX" + telomere complement(1..7784) + /note="TEL09L; Telomeric region on the left arm of + Chromosome IX; composed of an X element core sequence, X + element combinatorial repeats, a long Y' element, and a + short terminal stretch of telomeric repeats" + /db_xref="SGD:S000028896" + gene complement(<483..>6147) + /locus_tag="YIL177C" + /db_xref="GeneID:854630" + mRNA complement(join(<483..4598,4987..>6147)) + /locus_tag="YIL177C" + /product="Y' element ATP-dependent helicase" + /transcript_id="NM_001179522.1" + /db_xref="GeneID:854630" + CDS complement(join(483..4598,4987..6147)) + /locus_tag="YIL177C" + /EC_number="3.6.4.12" + /note="Putative Y' element ATP-dependent helicase" + /codon_start=1 + /product="Y' element ATP-dependent helicase" + /protein_id="NP_012092.1" + /db_xref="GeneID:854630" + /db_xref="SGD:S000001439" + /translation="MKVSDRRKFEKANFDEFESALNNKNDLVHCPSITLFESIPTEVR + SFYEDEKSGLIKVVKFRTGAMDRKRSFEKVVISVMVGKNVKKFLTFVEDEPDFQGGPI + PSKYLIPKKINLMVYTLFQVHTLKFNRKDYDTLSLFYLNRGYYNELSFRVLERCHEIA + SARPNDSSTMRTFTDFVSGAPIVRSLQKSTIRKYGYNLAPYMFLLLHVDELSIFSAYQ + ASLPGEKKVDTERLKRDLCPRKPIEIKYFSQICNDMMNKKDRLGDILHIILRACALNF + GAGPRGGAGDEEDRSITNEEPIIPSVDEHGLKVCKLRSPNTPRRLRKTLDAVKALLVS + SCACTARDLDIFDDNNGVAMWKWIKILYHEVAQETTLKDSYRITLVPSSDGISLLAFA + GPQRNVYVDDTTRRIQLYTDYNKNGSSEPRLKTLDGLTSDYVFYFVTVLRQMQICALG + NSYDAFNHDPWMDVVGFEDPNQVTNRDISRIVLYSYMFLNTAKGCLVEYATFRQYMRE + LPKNAPQKLNFREMRQGLIALGRHCVGSRFETDLYESATSELMANHSVQTGRNIYGVD + SFSLTSVSGTTATLLQERASERWIQWLGLESDYHCSFSSTRNAEDVVAGEAASSNHHQ + KISRVTRKRPREPKSTNDILVAGQKLFGSSFEFRDLHQLRLCYEIYMADTPSVAVQAP + PGYGKTELFHLPLIALASKGDVEYVSFLFVPYTVLLANCMIRLGRCGCLNVAPVRNFI + EEGYDGVTDLYVGIYDDLASTNFTDRIAAWENIVECTFRTNNVKLGYLIVDEFHNFET + EVYRQSQFGGITNLDFDAFEKAIFLSGTAPEAVADAALQRIGLTGLAKKSMDINELKR + SEDLSRGLSSYPTRMFNLIKEKSEVPLGHVHKIRKKVESQPEEALKLLLALFESEPES + KAIVVASTTNEVEELACSWRKYFRVVWIHGKLGAAEKVSRTKEFVTDGSMQVLIGTKL + VTEGIDIKQLMMVIMLDNRLNIIELIQGVGRLRDGGLCYLLSRKNSWAARNRKGELPP + IKEGCITEQVREFYGLESKKGKKGQHVGCCGSRTDLSADTVELIERMDRLAEKQATAS + MSIVALPSSFQESNSSDRYRKYCSSDEDSNTCIHGSANASTNASTNAITTASTNVRTN + ATTNASTNATTNASTNASTNATTNASTNATTNSSTNATTTASTNVRTSATTTASINVR + TSATTTESTNSSTNATTTESTNSSTNATTTESTNSNTSATTTASINVRTSATTTESTN + SSTSATTTASINVRTSATTTKSINSSTNATTTESTNSNTNATTTESTNSSTNATTTES + TNSSTNATTTESTNSNTSAATTESTNSNTSATTTESTNASAKEDANKDGNAEDNRFHP + VTDINKESYKRKGSQMVLLERKKLKAQFPNTSENMNVLQFLGFRSDEIKHLFLYGIDI + YFCPEGVFTQYGLCKGCQKMFELCVCWAGQKVSYRRIAWEALAVERMLRNDEEYKEYL + EDIEPYHGDPVGYLKYFSVKRREIYSQIQRNYAWYLAITRRRETISVLDSTRGKQGSQ + VFRMSGRQIKELYFKVWSNLRESKTEVLQYFLNWDEKKCQEEWEAKDDTVVVEALEKG + GVFQRLRSMTSAGLQGPQYVKLQFSRHHRQLRSRYELSLGMHLRDQIALGVTPSKVPH + WTAFLSMLIGLFYNKTFRQKLEYLLEQISEVWLLPHWLDLANVEVLAADDTRVPLYML + MVAVHKELDSDDVPDGRFDILLCRDSSREVGE" + rep_origin 7470..8793 + /note="ARS902; Putative replication origin; identified in + multiple array studies, not yet confirmed by plasmid-based + assay" + /db_xref="SGD:S000130156" + mRNA join(<155222,155311..>155765) + /gene="COX5B" + /locus_tag="YIL111W" + /product="cytochrome c oxidase subunit Vb" + /transcript_id="NM_001179459.1" + /db_xref="GeneID:854695" +CONTIG join(BK006942.2:1..439888) +// + diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index de313d38..9aa1a074 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -810,7 +810,10 @@ func TestConsortiumRegression(t *testing.T) { } } +// testcase for subset of unusual file +// includes implicit genome range with partial +// and origin is replaced with contig func TestParseS288C_IX(t *testing.T) { - _, err := ReadMulti("../../data/NC_001141.2.gb") + _, err := ReadMulti("../../data/NC_001141.2_redux.gb") assert.Nil(t, err) } From f5236515464a02fb03eeabaca19a0e571cc9a5c6 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 18:18:53 -0700 Subject: [PATCH 52/59] Resolved lint errors, added test StoreFeatureSequences and fixed uncovered bug --- io/genbank/genbank.go | 55 ++++++++++++++++++++------------------ io/genbank/genbank_test.go | 16 ++++++----- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index 667d56c4..def2ed74 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -13,7 +13,6 @@ package genbank import ( "bufio" "bytes" - "encoding/json" "fmt" "io" "os" @@ -126,15 +125,17 @@ var ( sequenceRegex = regexp.MustCompile("[^a-zA-Z]+") ) -// MarshalWithFeatureSequences calls StoreSequence on all features then marshals to JSON -func (sequence *Genbank) MarshalWithFeatureSequences() ([]byte, error) { - for _, f := range sequence.Features { - _, err := f.StoreSequence() +// StoreFeatureSequences calls StoreSequence on all features. +// The resulting JSON is guaranteed to have useful Feature.Sequence values. +// Useful when exporting for downstream analysis, such as with json.Marshal. +func (sequence *Genbank) StoreFeatureSequences() error { + for i := range sequence.Features { + _, err := sequence.Features[i].StoreSequence() if err != nil { - return []byte{}, err + return err } } - return json.Marshal(sequence) + return nil } // AddFeature adds a feature to a Genbank struct. @@ -155,13 +156,13 @@ func (feature Feature) GetSequence() (string, error) { } // StoreSequence infers and assigns the value of feature.Sequence -// if currently an empty string -func (feature Feature) StoreSequence() (string, error) { +// if currently an empty string. +func (feature *Feature) StoreSequence() (string, error) { if feature.Sequence != "" { return feature.Sequence, nil } - seq, err := getFeatureSequence(feature, feature.Location) - if err != nil { + seq, err := getFeatureSequence(*feature, feature.Location) + if err == nil { feature.Sequence = seq } return seq, err @@ -187,24 +188,25 @@ func CopyLocation(location Location) Location { // getFeatureSequence takes a feature and location object and returns a sequence string. func getFeatureSequence(feature Feature, location Location) (string, error) { var sequenceBuffer bytes.Buffer - var sequenceString string parentSequence := feature.ParentSequence.Sequence if len(location.SubLocations) == 0 { sequenceBuffer.WriteString(parentSequence[location.Start:location.End]) } else { for _, subLocation := range location.SubLocations { - sequence, _ := getFeatureSequence(feature, subLocation) + sequence, err := getFeatureSequence(feature, subLocation) + if err != nil { + return "", err + } sequenceBuffer.WriteString(sequence) } } // reverse complements resulting string if needed. + sequenceString := sequenceBuffer.String() if location.Complement { - sequenceString = transform.ReverseComplement(sequenceBuffer.String()) - } else { - sequenceString = sequenceBuffer.String() + sequenceString = transform.ReverseComplement(sequenceString) } return sequenceString, nil @@ -436,7 +438,7 @@ func ParseMulti(r io.Reader) ([]Genbank, error) { type ParseError struct { file string // the file origin line string // the offending line - before bool // whether the error occured before or on this line + before bool // whether the error occurred before or on this line lineNo int // the line number, 0 indexed info string `default:"syntax error"` // description of the error type wraps error // stores the error that led to this, if any @@ -491,19 +493,20 @@ func (params *parseLoopParameters) init() { // save our completed attribute / qualifier string to the current feature // useful as a wrap-up step from multiple states -func (parameters *parseLoopParameters) saveLastAttribute() { - newValue := parameters.attributeValue != "" - emptyType := parameters.feature.Type != "" +func (params *parseLoopParameters) saveLastAttribute() { + newValue := params.attributeValue != "" + emptyType := params.feature.Type != "" if newValue || emptyType { if newValue { - Put(parameters.feature.Attributes, parameters.attribute, parameters.attributeValue) + Put(params.feature.Attributes, params.attribute, params.attributeValue) } - parameters.features = append(parameters.features, parameters.feature) + params.features = append(params.features, params.feature) - parameters.attributeValue = "" - parameters.attribute = "" - parameters.feature = Feature{} - parameters.feature.Attributes = NewMultiMap[string, string]() + // reset attribute state + params.attributeValue = "" + params.attribute = "" + params.feature = Feature{} + params.feature.Attributes = NewMultiMap[string, string]() } } diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index 9aa1a074..20a9ad3f 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -214,24 +214,28 @@ func TestGetSequenceMethod(t *testing.T) { } func TestLocationParser(t *testing.T) { - gbk, _ := Read("../../data/t4_intron.gb") + gbk, err := Read("../../data/t4_intron.gb") + assert.NoError(t, err) + + err = gbk.StoreFeatureSequences() + assert.NoError(t, err) // Read 1..243 - feature, _ := gbk.Features[1].GetSequence() + feature := gbk.Features[1].Sequence seq := "atgagattacaacgccagagcatcaaagattcagaagttagaggtaaatggtattttaatatcatcggtaaagattctgaacttgttgaaaaagctgaacatcttttacgtgatatgggatgggaagatgaatgcgatggatgtcctctttatgaagacggagaaagcgcaggattttggatttaccattctgacgtcgagcagtttaaagctgattggaaaattgtgaaaaagtctgtttga" if feature != seq { t.Errorf("Feature sequence parser has changed on test '1..243'. Got this:\n%s instead of \n%s", feature, seq) } // Read join(893..1441,2459..2770) - featureJoin, _ := gbk.Features[6].GetSequence() + featureJoin := gbk.Features[6].Sequence seqJoin := "atgaaacaataccaagatttaattaaagacatttttgaaaatggttatgaaaccgatgatcgtacaggcacaggaacaattgctctgttcggatctaaattacgctgggatttaactaaaggttttcctgcggtaacaactaagaagctcgcctggaaagcttgcattgctgagctaatatggtttttatcaggaagcacaaatgtcaatgatttacgattaattcaacacgattcgttaatccaaggcaaaacagtctgggatgaaaattacgaaaatcaagcaaaagatttaggataccatagcggtgaacttggtccaatttatggaaaacagtggcgtgattttggtggtgtagaccaaattatagaagttattgatcgtattaaaaaactgccaaatgataggcgtcaaattgtttctgcatggaatccagctgaacttaaatatatggcattaccgccttgtcatatgttctatcagtttaatgtgcgtaatggctatttggatttgcagtggtatcaacgctcagtagatgttttcttgggtctaccgtttaatattgcgtcatatgctacgttagttcatattgtagctaagatgtgtaatcttattccaggggatttgatattttctggtggtaatactcatatctatatgaatcacgtagaacaatgtaaagaaattttgaggcgtgaacctaaagagctttgtgagctggtaataagtggtctaccttataaattccgatatctttctactaaagaacaattaaaatatgttcttaaacttaggcctaaagatttcgttcttaacaactatgtatcacaccctcctattaaaggaaagatggcggtgtaa" if featureJoin != seqJoin { t.Errorf("Feature sequence parser has changed on test 'join(893..1441,2459..2770)'. Got this:\n%s instead of \n%s", featureJoin, seqJoin) } // Read complement(2791..3054) - featureComplement, _ := gbk.Features[10].GetSequence() + featureComplement := gbk.Features[10].Sequence seqComplement := "ttattcactacccggcatagacggcccacgctggaataattcgtcatattgtttttccgttaaaacagtaatatcgtagtaacagtcagaagaagttttaactgtggaaattttattatcaaaatactcacgagtcattttatgagtatagtattttttaccataaatggtaataggctgttctggtcctggaacttctaactcgcttgggttaggaagtgtaaaaagaactacaccagaagtatctttaaatcgtaaaatcat" if featureComplement != seqComplement { t.Errorf("Feature sequence parser has changed on test 'complement(2791..3054)'. Got this:\n%s instead of \n%s", featureComplement, seqComplement) @@ -242,14 +246,14 @@ func TestLocationParser(t *testing.T) { // that the first sequence should be appended to the reverse sequence, instead of the second sequence // getting appended to the first. Biopython appends the second sequence to the first, and that is logically // the most obvious thing to do, so we are implementing it that way. - featureJoinComplement, _ := gbk.Features[3].GetSequence() + featureJoinComplement := gbk.Features[3].Sequence seqJoinComplement := "ataccaatttaatcattcatttatatactgattccgtaagggttgttacttcatctattttataccaatgcgtttcaaccatttcacgcttgcttatatcatcaagaaaacttgcgtctaattgaactgttgaattaacacgatgccttttaacgatgcgagaaacaactacttcatctgcataaggtaatgcagcatataacagagcaggcccgccaattacacttactttagaattctgatcaagcatagtttcgaatggtgcattagggcttgacacttgaatttcgccgccagaaatgtaagttatatattgctcccaagtaatatagaaatgtgctaaatcgccgtctttagttacaggataatcacgcgcaaggtcacacaccacaatatggctacgaccaggaagtaatgtaggcaatgactggaacgttttagcacccataatcataattgtgccttcagtacgagctttaaaattctggaggtcctttttaactcgtccccatggtaaaccatcacctaaaccgaatgctaattcattaaagccgtcgaccgttttagttggaga" if featureJoinComplement != seqJoinComplement { t.Errorf("Feature sequence parser has changed on test 'join(complement(315..330),complement(339..896))'. Got this:\n%s instead of \n%s", featureJoinComplement, seqJoinComplement) } // Read complement(join(893..1098,1101..2770)) - featureComplementJoin, _ := gbk.Features[5].GetSequence() + featureComplementJoin := gbk.Features[5].Sequence seqComplementJoin := "ttacaccgccatctttcctttaataggagggtgtgatacatagttgttaagaacgaaatctttaggcctaagtttaagaacatattttaattgttctttagtagaaagatatcggaatttataaggtagaccacttattaccagctcacaaagctctttaggttcacgcctcaaaatttctttacattgttctacgtgattcatatagatatgagtattaccaccagaaaatatcaaatcccctggaataagattacacatcttagctacaatatgaactaacgtagcatatgacgcaatattaaacggtagcattatgttcagataaggtcgttaatcttaccccggaattatatccagctgcatgtcaccatgcagagcagactatatctccaacttgttaaagcaagttgtctatcgtttcgagtcacttgaccctactccccaaagggatagtcgttaggcatttatgtagaaccaattccatttatcagattttacacgataagtaactaatccagacgaaattttaaaatgtctagctgcatctgctgcacaatcaaaaataaccccatcacatgaaatctttttaatattactaggctttttacctttcatcttttctgatattttagatttagttatgtctgaatgcttatgattaaagaatgaattattttcacctgaacgatttctgcatttactacaagtataagcagaagtttgtatgcgaacaccgcacttacaaaacttatgggtttctggattccaacgcccgtttttacttccgggtttactgtaaagagctttccgaccatcaggtccaagtttaagcatcttagctttaacagtttcagaacgtttcttaataatttcttcttttaatggatgcgtagaacatgtatcaccaaacgttgcatcagcaatattgtatccattaattttagaattaagctctttaatccaaaaattttctcgttcaataatcaaatctttctcatatggaatttcttccaaaatagaacattcaaacacattaccatgtttgttaaaagacctctgaagttttatagaagaatggcatcctttttctaaatctttaaaatgcctcttccatctcttttcaaaatctttagcacttcctacatatactttattgtttaaagtatttttaatctgataaattccgcttttcataaatacctctttaaatatagaagtatttattaaagggcaagtcctacaatttagcacgggattgtctactagagaggttccccgtttagatagattacaagtataagtcaccttatactcaggcctcaattaacccaagaaaacatctactgagcgttgataccactgcaaatccaaatagccattacgcacattaaactgatagaacatatgacaaggcggtaatgccatatatttaagttcagctggattccatgcagaaacaatttgacgcctatcatttggcagttttttaatacgatcaataacttctataatttggtctacaccaccaaaatcacgccactgttttccataaattggaccaagttcaccgctatggtatcctaaatcttttgcttgattttcgtaattttcatcccagactgttttgccttggattaacgaatcgtgttgaattaatcgtaaatcatacatttgtgcttcctgataaaaaccatattagctcagcaatgcaagctttccaggcgagcttcttagttgttaccgcaggaaaacctttagttaaatcccagcgtaatttagatccgaacagagcaattgttcctgtgcctgtacgatcatcggtttcataaccattttcaaaaatgtctttaattaaatcttggtattgtttcat" if featureComplementJoin != seqComplementJoin { t.Errorf("Feature sequence parser has changed on test 'complement(join(893..1098,1101..2770))'. Got this:\n%s instead of \n%s", featureComplementJoin, seqComplementJoin) From 1270ec897b80b80513d49caae031057fdc5d9a33 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 04:37:04 -0700 Subject: [PATCH 53/59] Added multimap.go file doc --- io/genbank/multimap.go | 33 ++++++++++++++++++++------------- io/polyjson/polyjson.go | 31 ++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/io/genbank/multimap.go b/io/genbank/multimap.go index 641539c7..58a97b42 100644 --- a/io/genbank/multimap.go +++ b/io/genbank/multimap.go @@ -1,8 +1,20 @@ +/* +This file provides utilities for working with a MultiMap, +which is simply a map which can store multiple values for a single key instead +of the usual one. + +Useful for when we expect to encounter repeated keys but we want to keep all pairs, +not just the latest one, while preserving O(1) time lookup cost. +Does not make uniqueness quarantees for key value pairs. +This may end up being useful for other parsers which allow for repeated keys, in which case +this should be made into its own module. +*/ package genbank -// defines a new MultiMap type which can store multiple values for a single key -// useful for when we expect repeated keys, while preserving O(1) lookup -// does not make uniqueness guarantees for values (you can repeat key-value pairs) +// defined as a simple type alias over a map of slices +// while not ideal (eg computing total number of items takes O(N)) +// this has the advantage of being compatible with json.Marshal, cmp.Diff, +// pretty printing, and bracket indexing out of the box. type MultiMap[K, V comparable] map[K][]V // create a new empty multimap @@ -11,15 +23,15 @@ func NewMultiMap[K, V comparable]() MultiMap[K, V] { } // adds a key-value pair to the multimap -func Put[K, V comparable](m MultiMap[K, V], k K, v V) { +func Put[K, V comparable](m MultiMap[K, V], k K, v ...V) { if _, ok := m[k]; !ok { - m[k] = []V{v} + m[k] = v } else { - m[k] = append(m[k], v) + m[k] = append(m[k], v...) } } -// iterates over the multimap, once for each key +// iterates over the multimap, once for each key with all values passed as a slice func ForEachKey[K, V comparable](m MultiMap[K, V], do func(K, []V)) { for k, values := range m { do(k, values) @@ -35,12 +47,7 @@ func ForEachValue[K, V comparable](m MultiMap[K, V], do func(K, V)) { }) } -// returns number of unique keys -func KeyCount[K, V comparable](m MultiMap[K, V]) int { - return len(m) -} - -// efficiently each element of a slice to create a new slice +// efficiently apply a transformation to each element of a slice to create a new slice func MapSlice[X any, Y any](slice []X, mapper func(X) Y) []Y { y := make([]Y, len(slice)) for i, x := range slice { diff --git a/io/polyjson/polyjson.go b/io/polyjson/polyjson.go index 7740c824..d723dfdb 100644 --- a/io/polyjson/polyjson.go +++ b/io/polyjson/polyjson.go @@ -154,8 +154,9 @@ func Write(sequence Poly, path string) error { return os.WriteFile(path, file, 0644) } -// convert -> genbank -// TODO add convert <- genbank methods +// Utilities to convert polyjson objects -> their genbank equivalents +// TODO add convert <- genbank methods, which is currently difficult as most +// genbank Meta values are discarded due to lack of support for wildcard metadata in polyjson. func (sequence *Poly) ToGenbank() genbank.Genbank { gb := genbank.Genbank{ @@ -172,17 +173,26 @@ func (sequence *Poly) ToGenbank() genbank.Genbank { func (meta *Meta) ToGenbank() genbank.Meta { other := make(map[string]string) - other["URL"] = meta.URL - other["CreatedBy"] = meta.CreatedBy - other["CreatedWith"] = meta.CreatedWith + if meta.URL != "" { + other["URL"] = meta.URL + } + if meta.CreatedBy != "" { + other["CreatedBy"] = meta.CreatedBy + } + if meta.CreatedWith != "" { + other["CreatedWith"] = meta.CreatedWith + } other["CreatedOn"] = meta.CreatedOn.String() - other["Schema"] = meta.Schema + if meta.Schema != "" { + other["Schema"] = meta.Schema + } return genbank.Meta{ Definition: meta.Description, Source: meta.CreatedBy, Origin: meta.CreatedWith, Name: meta.Name, SequenceHash: meta.Hash, + Other: other, } } @@ -204,10 +214,6 @@ func (feature *Feature) ToGenbank() genbank.Feature { } func (location *Location) ToGenbank() genbank.Location { - sublocations := make([]genbank.Location, len(location.SubLocations)) - for i, s := range location.SubLocations { - sublocations[i] = s.ToGenbank() - } loc := genbank.Location{ Start: location.Start, End: location.End, @@ -215,7 +221,10 @@ func (location *Location) ToGenbank() genbank.Location { Join: location.Join, FivePrimePartial: location.FivePrimePartial, ThreePrimePartial: location.ThreePrimePartial, - SubLocations: sublocations, + SubLocations: genbank.MapSlice( + location.SubLocations, + func(s Location) genbank.Location { return s.ToGenbank() }, + ), } loc.GbkLocationString = genbank.BuildLocationString(loc) return loc From 9c322f662098644a1baf536d720def53b537b189 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 12:36:05 -0700 Subject: [PATCH 54/59] Responded to more comments --- io/genbank/genbank.go | 9 +++++---- io/genbank/genbank_test.go | 8 +++++++- io/genbank/multimap.go | 29 ++++++++++++++++------------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/io/genbank/genbank.go b/io/genbank/genbank.go index def2ed74..dec78d59 100644 --- a/io/genbank/genbank.go +++ b/io/genbank/genbank.go @@ -168,18 +168,18 @@ func (feature *Feature) StoreSequence() (string, error) { return seq, err } -// Creates deep copy of Feature, which supports safe duplication. +// Copy creates deep copy of Feature, which supports safe duplication. func (feature *Feature) Copy() Feature { copy := *feature copy.Location = CopyLocation(feature.Location) copy.Attributes = NewMultiMap[string, string]() ForEachKey(feature.Attributes, func(k string, v []string) { - copy.Attributes[k] = MapSlice[string](v, identity[string]) + copy.Attributes[k] = MapSlice(v, identity[string]) }) return copy } -// Creates deep copy of Location, which supports safe duplication +// CopyLocation creates deep copy of Location, which supports safe duplication func CopyLocation(location Location) Location { location.SubLocations = MapSlice(location.SubLocations, CopyLocation) return location @@ -434,7 +434,8 @@ func ParseMulti(r io.Reader) ([]Genbank, error) { return genbankSlice, err } -// an error struct to represent failures encountered while parsing +// ParseError represents failures encountered while parsing, +// and pointers to it are fully compatable with the error interface. type ParseError struct { file string // the file origin line string // the offending line diff --git a/io/genbank/genbank_test.go b/io/genbank/genbank_test.go index 20a9ad3f..3bc472a2 100644 --- a/io/genbank/genbank_test.go +++ b/io/genbank/genbank_test.go @@ -273,6 +273,12 @@ func TestGenbankNewlineParsingRegression(t *testing.T) { } } +func TestDuplicateFeatureAttributes(t *testing.T) { + seq, _ := Read("../../data/bsub.gbk") + + assert.Equal(t, len(seq.Features[2].Attributes["db_xref"]), 15) +} + func BenchmarkRead(b *testing.B) { for i := 0; i < b.N; i++ { _, _ = Read("../../data/bsub.gbk") @@ -817,7 +823,7 @@ func TestConsortiumRegression(t *testing.T) { // testcase for subset of unusual file // includes implicit genome range with partial // and origin is replaced with contig -func TestParseS288C_IX(t *testing.T) { +func TestParseS288C_IX_Regression(t *testing.T) { _, err := ReadMulti("../../data/NC_001141.2_redux.gb") assert.Nil(t, err) } diff --git a/io/genbank/multimap.go b/io/genbank/multimap.go index 58a97b42..3f067272 100644 --- a/io/genbank/multimap.go +++ b/io/genbank/multimap.go @@ -3,26 +3,25 @@ This file provides utilities for working with a MultiMap, which is simply a map which can store multiple values for a single key instead of the usual one. -Useful for when we expect to encounter repeated keys but we want to keep all pairs, -not just the latest one, while preserving O(1) time lookup cost. +Useful for when we expect to encounter repeated keys but we want to store all pairs, +not just the last-inserted one. This implementation has the advantage of being compatible with +json.Marshal, cmp.Diff, pretty printing, and bracket indexing out of the box. Does not make uniqueness quarantees for key value pairs. -This may end up being useful for other parsers which allow for repeated keys, in which case +Currently only used in genbank.Feature.Attributes, however his may end up +being useful for other parsers which allow for repeated keys, in which case this should be made into its own module. */ package genbank -// defined as a simple type alias over a map of slices -// while not ideal (eg computing total number of items takes O(N)) -// this has the advantage of being compatible with json.Marshal, cmp.Diff, -// pretty printing, and bracket indexing out of the box. +// MultiMap is defined as a simple type alias over a map of slices. type MultiMap[K, V comparable] map[K][]V -// create a new empty multimap +// NewMultiMap creates a new empty multimap. func NewMultiMap[K, V comparable]() MultiMap[K, V] { return make(map[K][]V) } -// adds a key-value pair to the multimap +// Put adds a key-value pair to the multimap. func Put[K, V comparable](m MultiMap[K, V], k K, v ...V) { if _, ok := m[k]; !ok { m[k] = v @@ -31,14 +30,18 @@ func Put[K, V comparable](m MultiMap[K, V], k K, v ...V) { } } -// iterates over the multimap, once for each key with all values passed as a slice +// ForEachKey iterates over the multimap, once for each key with all values passed as a slice. +// do is a callback that takes the key, values slice for that key +// This exists purely as a convenience function, if your use case would benefit from +// early break/return, it is recommended you do the usual range iteration operator. func ForEachKey[K, V comparable](m MultiMap[K, V], do func(K, []V)) { for k, values := range m { do(k, values) } } -// iterates over the multimap, once for each value +// ForEachValue iterates over the multimap, once for each value +// do is a callback that takes and a key and value. func ForEachValue[K, V comparable](m MultiMap[K, V], do func(K, V)) { ForEachKey(m, func(k K, values []V) { for _, v := range values { @@ -47,7 +50,7 @@ func ForEachValue[K, V comparable](m MultiMap[K, V], do func(K, V)) { }) } -// efficiently apply a transformation to each element of a slice to create a new slice +// MapSlice efficiently applies a transformation to each element of a slice to create a new slice func MapSlice[X any, Y any](slice []X, mapper func(X) Y) []Y { y := make([]Y, len(slice)) for i, x := range slice { @@ -56,7 +59,7 @@ func MapSlice[X any, Y any](slice []X, mapper func(X) Y) []Y { return y } -// the identity function which returns its input, useful for using MapSlice to do a shallow copy +// identity returns its input, useful for using MapSlice to do a shallow copy func identity[X any](x X) X { return x } From 98b69844b5de918755e84c3a3335d8f0582cb484 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Nov 2023 16:07:39 -0700 Subject: [PATCH 55/59] Fixed deref issue --- bio/genbank/genbank.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 009ae65d..2cb77d14 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -1201,13 +1201,13 @@ func parseMultiNth(r io.Reader, count int) ([]Genbank, *ParseError) { for i := 0; i < count; i++ { gb, err := parser.Next() if err != nil { - var perr ParseError + var perr *ParseError if err == io.EOF { - perr = ParseError{wraps: io.EOF} - } else { - perr = err.(ParseError) + perr = &ParseError{wraps: io.EOF} + } else if err != nil { + perr = err.(*ParseError) } - return genbanks, &perr + return genbanks, perr } genbanks = append(genbanks, *gb) } From 25e0f61b0fd9afe9274f71743e3272c1ccd8e368 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Nov 2023 16:45:23 -0700 Subject: [PATCH 56/59] Fixed tests, moved genbank files --- .../genbank/data}/NC_001141.2_redux.gb | 0 {data => bio/genbank/data}/benchling.gb | 0 {data => bio/genbank/data}/bsub.gbk | 0 {data => bio/genbank/data}/flatGbk_test.seq | 0 .../genbank/data}/flatGbk_test.seq.gz | Bin {data => bio/genbank/data}/long_comment.seq | 0 .../genbank/data}/malformed_read_test.gbk | 0 {data => bio/genbank/data}/multiGbk_test.seq | 0 {data => bio/genbank/data}/phix174.gb | 0 .../genbank/data}/pichia_chr1_head.gb | 0 {data => bio/genbank/data}/puc19.gbk | 0 .../genbank/data}/puc19_303_regression.gbk | 0 {data => bio/genbank/data}/puc19_consrtm.gbk | 0 {data => bio/genbank/data}/puc19_snapgene.gb | 0 {data => bio/genbank/data}/sample.gbk | 0 {data => bio/genbank/data}/t4_intron.gb | 0 bio/genbank/genbank.go | 2 +- bio/genbank/genbank_test.go | 61 +++++++++--------- synthesis/codon/codon_test.go | 12 ++-- synthesis/codon/example_test.go | 13 ++-- tutorials/001_input_output_test.go | 2 +- 21 files changed, 47 insertions(+), 43 deletions(-) rename {data => bio/genbank/data}/NC_001141.2_redux.gb (100%) rename {data => bio/genbank/data}/benchling.gb (100%) rename {data => bio/genbank/data}/bsub.gbk (100%) rename {data => bio/genbank/data}/flatGbk_test.seq (100%) rename {data => bio/genbank/data}/flatGbk_test.seq.gz (100%) rename {data => bio/genbank/data}/long_comment.seq (100%) rename {data => bio/genbank/data}/malformed_read_test.gbk (100%) rename {data => bio/genbank/data}/multiGbk_test.seq (100%) rename {data => bio/genbank/data}/phix174.gb (100%) rename {data => bio/genbank/data}/pichia_chr1_head.gb (100%) rename {data => bio/genbank/data}/puc19.gbk (100%) rename {data => bio/genbank/data}/puc19_303_regression.gbk (100%) rename {data => bio/genbank/data}/puc19_consrtm.gbk (100%) rename {data => bio/genbank/data}/puc19_snapgene.gb (100%) rename {data => bio/genbank/data}/sample.gbk (100%) rename {data => bio/genbank/data}/t4_intron.gb (100%) diff --git a/data/NC_001141.2_redux.gb b/bio/genbank/data/NC_001141.2_redux.gb similarity index 100% rename from data/NC_001141.2_redux.gb rename to bio/genbank/data/NC_001141.2_redux.gb diff --git a/data/benchling.gb b/bio/genbank/data/benchling.gb similarity index 100% rename from data/benchling.gb rename to bio/genbank/data/benchling.gb diff --git a/data/bsub.gbk b/bio/genbank/data/bsub.gbk similarity index 100% rename from data/bsub.gbk rename to bio/genbank/data/bsub.gbk diff --git a/data/flatGbk_test.seq b/bio/genbank/data/flatGbk_test.seq similarity index 100% rename from data/flatGbk_test.seq rename to bio/genbank/data/flatGbk_test.seq diff --git a/data/flatGbk_test.seq.gz b/bio/genbank/data/flatGbk_test.seq.gz similarity index 100% rename from data/flatGbk_test.seq.gz rename to bio/genbank/data/flatGbk_test.seq.gz diff --git a/data/long_comment.seq b/bio/genbank/data/long_comment.seq similarity index 100% rename from data/long_comment.seq rename to bio/genbank/data/long_comment.seq diff --git a/data/malformed_read_test.gbk b/bio/genbank/data/malformed_read_test.gbk similarity index 100% rename from data/malformed_read_test.gbk rename to bio/genbank/data/malformed_read_test.gbk diff --git a/data/multiGbk_test.seq b/bio/genbank/data/multiGbk_test.seq similarity index 100% rename from data/multiGbk_test.seq rename to bio/genbank/data/multiGbk_test.seq diff --git a/data/phix174.gb b/bio/genbank/data/phix174.gb similarity index 100% rename from data/phix174.gb rename to bio/genbank/data/phix174.gb diff --git a/data/pichia_chr1_head.gb b/bio/genbank/data/pichia_chr1_head.gb similarity index 100% rename from data/pichia_chr1_head.gb rename to bio/genbank/data/pichia_chr1_head.gb diff --git a/data/puc19.gbk b/bio/genbank/data/puc19.gbk similarity index 100% rename from data/puc19.gbk rename to bio/genbank/data/puc19.gbk diff --git a/data/puc19_303_regression.gbk b/bio/genbank/data/puc19_303_regression.gbk similarity index 100% rename from data/puc19_303_regression.gbk rename to bio/genbank/data/puc19_303_regression.gbk diff --git a/data/puc19_consrtm.gbk b/bio/genbank/data/puc19_consrtm.gbk similarity index 100% rename from data/puc19_consrtm.gbk rename to bio/genbank/data/puc19_consrtm.gbk diff --git a/data/puc19_snapgene.gb b/bio/genbank/data/puc19_snapgene.gb similarity index 100% rename from data/puc19_snapgene.gb rename to bio/genbank/data/puc19_snapgene.gb diff --git a/data/sample.gbk b/bio/genbank/data/sample.gbk similarity index 100% rename from data/sample.gbk rename to bio/genbank/data/sample.gbk diff --git a/data/t4_intron.gb b/bio/genbank/data/t4_intron.gb similarity index 100% rename from data/t4_intron.gb rename to bio/genbank/data/t4_intron.gb diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index 83260373..c7f84a60 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -486,7 +486,7 @@ func (e ParseError) Error() string { var out, loc string if e.wraps == io.EOF { out = "unexpected EOF" - if e.file == "" { + if e.file != "" { return fmt.Sprintf("%s in %s", out, e.file) } else { return out diff --git a/bio/genbank/genbank_test.go b/bio/genbank/genbank_test.go index 3236af05..8e148c5c 100644 --- a/bio/genbank/genbank_test.go +++ b/bio/genbank/genbank_test.go @@ -25,13 +25,13 @@ Gbk/gb/genbank related benchmarks begin here. ******************************************************************************/ var singleGbkPaths = []string{ - "../../data/t4_intron.gb", - "../../data/puc19.gbk", - "../../data/puc19_snapgene.gb", - "../../data/benchling.gb", - "../../data/phix174.gb", - "../../data/sample.gbk", - // "../../data/pichia_chr1_head.gb", + "data/t4_intron.gb", + "data/puc19.gbk", + "data/puc19_snapgene.gb", + "data/benchling.gb", + "data/phix174.gb", + "data/sample.gbk", + // "data/pichia_chr1_head.gb", } func TestGbkIO(t *testing.T) { @@ -56,7 +56,7 @@ func TestGbkIO(t *testing.T) { } func TestMultiLineFeatureParse(t *testing.T) { - pichia, _ := read("../../data/pichia_chr1_head.gb") + pichia, _ := read("data/pichia_chr1_head.gb") var multilineOutput string for _, feature := range pichia.Features { multilineOutput = feature.Location.GbkLocationString @@ -75,7 +75,7 @@ func TestMultiGenbankIO(t *testing.T) { defer os.RemoveAll(tmpDataDir) // Test multiline Genbank features - gbkPath := "../../data/multiGbk_test.seq" + gbkPath := "data/multiGbk_test.seq" multiGbk, _ := readMulti(gbkPath) tmpGbkFilePath := filepath.Join(tmpDataDir, filepath.Base(gbkPath)) _ = writeMulti(multiGbk, tmpGbkFilePath) @@ -94,7 +94,7 @@ func TestGbkLocationStringBuilder(t *testing.T) { } defer os.RemoveAll(tmpDataDir) - scrubbedGbk, err := read("../../data/sample.gbk") + scrubbedGbk, err := read("data/sample.gbk") if err != nil { t.Error(err) } @@ -107,7 +107,7 @@ func TestGbkLocationStringBuilder(t *testing.T) { tmpGbkFilePath := filepath.Join(tmpDataDir, "sample.gbk") _ = write(scrubbedGbk, tmpGbkFilePath) - testInputGbk, _ := read("../../data/sample.gbk") + testInputGbk, _ := read("data/sample.gbk") testOutputGbk, _ := read(tmpGbkFilePath) if diff := cmp.Diff(testInputGbk, testOutputGbk, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { @@ -122,7 +122,7 @@ func TestGbLocationStringBuilder(t *testing.T) { } defer os.RemoveAll(tmpDataDir) - scrubbedGb, _ := read("../../data/t4_intron.gb") + scrubbedGb, _ := read("data/t4_intron.gb") // removing gbkLocationString from features to allow testing for gbkLocationBuilder for featureIndex := range scrubbedGb.Features { @@ -132,7 +132,7 @@ func TestGbLocationStringBuilder(t *testing.T) { tmpGbFilePath := filepath.Join(tmpDataDir, "t4_intron_test.gb") _ = write(scrubbedGb, tmpGbFilePath) - testInputGb, _ := read("../../data/t4_intron.gb") + testInputGb, _ := read("data/t4_intron.gb") testOutputGb, _ := read(tmpGbFilePath) if diff := cmp.Diff(testInputGb, testOutputGb, []cmp.Option{cmpopts.IgnoreFields(Feature{}, "ParentSequence")}...); diff != "" { @@ -141,14 +141,14 @@ func TestGbLocationStringBuilder(t *testing.T) { } func TestPartialLocationParseRegression(t *testing.T) { - gbk, _ := read("../../data/sample.gbk") + gbk, _ := read("data/sample.gbk") for _, feature := range gbk.Features { if feature.Location.GbkLocationString == "687..3158>" && (feature.Location.Start != 686 || feature.Location.End != 3158) { t.Errorf("Partial location for three prime location parsing has failed. Parsing the output of Build() does not produce the same output as parsing the original file read with read()") } } - gbk, err := read("../../data/sample.gbk") + gbk, err := read("data/sample.gbk") if err != nil { t.Errorf("Failed to read sample.gbk. Got err: %s", err) } @@ -188,7 +188,7 @@ func TestSubLocationStringParseRegression(t *testing.T) { } func TestSnapgeneGenbankRegression(t *testing.T) { - snapgene, err := read("../../data/puc19_snapgene.gb") + snapgene, err := read("data/puc19_snapgene.gb") if snapgene.Sequence == "" { t.Errorf("Parsing snapgene returned an empty string. Got error: %s", err) @@ -196,7 +196,7 @@ func TestSnapgeneGenbankRegression(t *testing.T) { } func TestGetSequenceMethod(t *testing.T) { - gbk, _ := read("../../data/t4_intron.gb") + gbk, _ := read("data/t4_intron.gb") // Check to see if GetSequence method works on Features struct feature, _ := gbk.Features[1].GetSequence() @@ -207,7 +207,7 @@ func TestGetSequenceMethod(t *testing.T) { } func TestLocationParser(t *testing.T) { - gbk, _ := read("../../data/t4_intron.gb") + gbk, _ := read("data/t4_intron.gb") // read 1..243 feature, _ := gbk.Features[1].GetSequence() @@ -250,7 +250,7 @@ func TestLocationParser(t *testing.T) { } func TestGenbankNewlineParsingRegression(t *testing.T) { - gbk, _ := read("../../data/puc19.gbk") + gbk, _ := read("data/puc19.gbk") for _, feature := range gbk.Features { if feature.Location.Start == 410 && feature.Location.End == 1750 && feature.Type == "CDS" { @@ -264,7 +264,7 @@ func TestGenbankNewlineParsingRegression(t *testing.T) { func BenchmarkRead(b *testing.B) { for i := 0; i < b.N; i++ { - _, _ = read("../../data/bsub.gbk") + _, _ = read("data/bsub.gbk") } } @@ -281,7 +281,7 @@ Gbk/gb/genbank related benchmarks end here. ******************************************************************************/ func TestBenchlingGenbank(t *testing.T) { - sequence, _ := read("../../data/benchling.gb") + sequence, _ := read("data/benchling.gb") if len(sequence.Features) != 17 { t.Errorf("Parsing benchling genbank file not returned the correct quantity of features") @@ -531,7 +531,7 @@ func TestRead(t *testing.T) { { name: "error on malformed file", args: args{ - path: "../../data/malformed_read_test.gbk", + path: "data/malformed_read_test.gbk", }, wantErr: true, }, @@ -698,14 +698,13 @@ func TestParse_error(t *testing.T) { parseMultiNthFn = oldParseMultiNthFn }() _, err := parse(strings.NewReader("")) - assert.EqualError(t, err, parseMultiErr.Error()) + assert.Equal(t, err, parseMultiErr.wraps) _, err = parseMultiNth(strings.NewReader(""), 10000) - assert.EqualError(t, err, parseMultiErr.Error()) + assert.Equal(t, err, parseMultiErr) } func TestParseReferences_error(t *testing.T) { - parseReferencesErr := errors.New("Failed in parsing reference above line 13. Got error: ") oldParseReferencesFn := parseReferencesFn parseReferencesFn = func(metadataData []string) (Reference, error) { return Reference{}, errors.New("") @@ -713,21 +712,21 @@ func TestParseReferences_error(t *testing.T) { defer func() { parseReferencesFn = oldParseReferencesFn }() - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open("data/puc19.gbk") _, err := parseMultiNthFn(file, 1) - assert.EqualError(t, err, parseReferencesErr.Error()) + assert.Equal(t, err.info, "failed in parsing reference") } func TestIssue303Regression(t *testing.T) { - seq, _ := read("../../data/puc19_303_regression.gbk") + seq, _ := read("data/puc19_303_regression.gbk") expectedAttribute := []string{"16S rRNA(adenine(1518)-N(6)/adenine(1519)-N(6))-dimethyltransferase"} for _, feature := range seq.Features { - if feature.Attributes["locus_tag"][0] == "JCVISYN3A_0004" && feature.Type == "CDS" { + if cmp.Equal(feature.Attributes["locus_tag"], []string{"JCVISYN3A_0004"}) && feature.Type == "CDS" { if !cmp.Equal(feature.Attributes["product"], expectedAttribute) { t.Errorf("Failed to get proper expected attribute. Got: %s Expected: %s", feature.Attributes["product"], expectedAttribute) } } - if feature.Attributes["locus_tag"][0] == "JCVISYN3A_0051" && feature.Type == "CDS" { + if cmp.Equal(feature.Attributes["locus_tag"], []string{"JCVISYN3A_0051"}) && feature.Type == "CDS" { if _, ok := feature.Attributes["pseudo"]; !ok { t.Errorf("pseudo should be in attributes") } @@ -736,7 +735,7 @@ func TestIssue303Regression(t *testing.T) { } func TestConsortiumRegression(t *testing.T) { - _, err := read("../../data/puc19_consrtm.gbk") + _, err := read("data/puc19_consrtm.gbk") if err != nil { t.Errorf("Failed to read consrtm. Got err: %s", err) } diff --git a/synthesis/codon/codon_test.go b/synthesis/codon/codon_test.go index 067e11a6..0374e799 100644 --- a/synthesis/codon/codon_test.go +++ b/synthesis/codon/codon_test.go @@ -12,6 +12,8 @@ import ( "github.com/stretchr/testify/assert" ) +const puc19path = "../../bio/genbank/data/puc19.gbk" + func TestTranslation(t *testing.T) { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" gfpDnaSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" @@ -77,7 +79,7 @@ func TestTranslationLowerCase(t *testing.T) { func TestOptimize(t *testing.T) { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open("../../bio/genbank/data/puc19.gbk") defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -111,7 +113,7 @@ func TestOptimize(t *testing.T) { func TestOptimizeSameSeed(t *testing.T) { var gfpTranslation = "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -144,7 +146,7 @@ func TestOptimizeSameSeed(t *testing.T) { func TestOptimizeDifferentSeed(t *testing.T) { var gfpTranslation = "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -303,7 +305,7 @@ Codon Compromise + Add related tests begin here. ***************************************************************************** */ func TestCompromiseCodonTable(t *testing.T) { - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -377,7 +379,7 @@ func TestCapitalizationRegression(t *testing.T) { // Tests to make sure that amino acids are capitalized gfpTranslation := "MaSKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() diff --git a/synthesis/codon/example_test.go b/synthesis/codon/example_test.go index b794289f..213ce650 100644 --- a/synthesis/codon/example_test.go +++ b/synthesis/codon/example_test.go @@ -9,6 +9,9 @@ import ( "github.com/TimothyStiles/poly/synthesis/codon" ) +const puc19path = "../../bio/genbank/data/puc19.gbk" +const phix174path = "../../bio/genbank/data/phix174.gb" + func ExampleTranslate() { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" gfpDnaSequence := "ATGGCTAGCAAAGGAGAAGAACTTTTCACTGGAGTTGTCCCAATTCTTGTTGAATTAGATGGTGATGTTAATGGGCACAAATTTTCTGTCAGTGGAGAGGGTGAAGGTGATGCTACATACGGAAAGCTTACCCTTAAATTTATTTGCACTACTGGAAAACTACCTGTTCCATGGCCAACACTTGTCACTACTTTCTCTTATGGTGTTCAATGCTTTTCCCGTTATCCGGATCATATGAAACGGCATGACTTTTTCAAGAGTGCCATGCCCGAAGGTTATGTACAGGAACGCACTATATCTTTCAAAGATGACGGGAACTACAAGACGCGTGCTGAAGTCAAGTTTGAAGGTGATACCCTTGTTAATCGTATCGAGTTAAAAGGTATTGATTTTAAAGAAGATGGAAACATTCTCGGACACAAACTCGAGTACAACTATAACTCACACAATGTATACATCACGGCAGACAAACAAAAGAATGGAATCAAAGCTAACTTCAAAATTCGCCACAACATTGAAGATGGATCCGTTCAACTAGCAGACCATTATCAACAAAATACTCCAATTGGCGATGGCCCTGTCCTTTTACCAGACAACCATTACCTGTCGACACAATCTGCCCTTTCGAAAGATCCCAACGAAAAGCGTGACCACATGGTCCTTCTTGAGTTTGTAACTGCTGCTGGGATTACACATGGCATGGATGAGCTCTACAAATAA" @@ -21,7 +24,7 @@ func ExampleTranslate() { func ExampleOptimize() { gfpTranslation := "MASKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKRHDFFKSAMPEGYVQERTISFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYITADKQKNGIKANFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK*" - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -102,7 +105,7 @@ func ExampleWriteCodonJSON() { } func ExampleCompromiseCodonTable() { - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -125,7 +128,7 @@ func ExampleCompromiseCodonTable() { // weight our codon optimization table using the regions we collected from the genbank file above optimizationTable := codonTable.OptimizeTable(codingRegions) - file2, _ := os.Open("../../data/phix174.gb") + file2, _ := os.Open(phix174path) defer file2.Close() parser2, _ := bio.NewGenbankParser(file2) sequence2, _ := parser2.Next() @@ -160,7 +163,7 @@ func ExampleCompromiseCodonTable() { } func ExampleAddCodonTable() { - file, _ := os.Open("../../data/puc19.gbk") + file, _ := os.Open(puc19path) defer file.Close() parser, _ := bio.NewGenbankParser(file) sequence, _ := parser.Next() @@ -183,7 +186,7 @@ func ExampleAddCodonTable() { // weight our codon optimization table using the regions we collected from the genbank file above optimizationTable := codonTable.OptimizeTable(codingRegions) - file2, _ := os.Open("../../data/phix174.gb") + file2, _ := os.Open(phix174path) defer file2.Close() parser2, _ := bio.NewGenbankParser(file2) sequence2, _ := parser2.Next() diff --git a/tutorials/001_input_output_test.go b/tutorials/001_input_output_test.go index ddb2eabe..b0d25200 100644 --- a/tutorials/001_input_output_test.go +++ b/tutorials/001_input_output_test.go @@ -61,7 +61,7 @@ func TestFileIOTutorial(t *testing.T) { // backbone puc19. Plasmids are super small rings of "Circular DNA" that are // between 1 and 10 kilobases in length. - file, _ := os.Open("../data/puc19.gbk") + file, _ := os.Open("../bio/genbank/data/puc19.gbk") defer file.Close() parser, _ := bio.NewGenbankParser(file) puc19, _ := parser.Next() From 60abf6dd19932cb9e72432f027e5d456c81d5d17 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Nov 2023 16:58:57 -0700 Subject: [PATCH 57/59] Fixed fasta docs --- bio/fasta/fasta.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bio/fasta/fasta.go b/bio/fasta/fasta.go index 28e72305..416cbf36 100644 --- a/bio/fasta/fasta.go +++ b/bio/fasta/fasta.go @@ -26,15 +26,15 @@ Fasta Parser begins here Many thanks to Jordan Campbell (https://github.com/0x106) for building the first parser for Poly and thanks to Tim Stiles (https://github.com/TimothyStiles) for helping complete that PR. This work expands on the previous work by allowing -for concurrent parsing and giving Poly a specific parser subpackage, +for concurrent parsing and giving Poly a specific parser subpackage, as well as few bug fixes. Fasta is a very simple file format for working with DNA, RNA, or protein sequences. It was first released in 1985 and is still widely used in bioinformatics. -https://en.wikipedia.org/wiki/_format +https://en.wikipedia.org/wiki/FASTA_format -One interesting use of the concurrent parser is working with the Uniprot +One interesting use of the concurrent parser is working with the Uniprot fasta dump files, which are far too large to fit into RAM. This parser is able to easily handle those files by doing computation actively while the data dump is getting parsed. From 7e3c812f425f105ded33a864d948c6ddf6a2e3e5 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Nov 2023 20:11:59 -0700 Subject: [PATCH 58/59] Added changelog --- CHANGELOG.md | 9 +++++++++ bio/genbank/genbank.go | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2fe0c05..e2a4c4b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Alternative start codons can now be used in the `synthesis/codon` DNA -> protein translation package (#305) - Added a parser and writer for the `pileup` sequence alignment format (#329) +- Created copy methods for Feature and Location to address concerns raised by [(#342)](https://github.com/TimothyStiles/poly/issues/342) +- Created new methods to convert polyjson -> genbank. +- Created new `Feature.StoreSequence` method to enable [(#388)](https://github.com/TimothyStiles/poly/issues/388) + +### Changed +- **Breaking**: Genbank parser uses new custom multimap for `Feature.Attributes`, which allows for duplicate keys. This changes the type of Features.Attributes from `map[string]string` to `MultiMap[string, string]`, an alias for `map[string]string` defined in `multimap.go`. [(#383)](https://github.com/TimothyStiles/poly/issues/383) +- Improves error reporting for genbank parse errors via a new `ParseError` struct. ### Fixed - `fastq` parser no longer becomes de-aligned when reading (#325) - `fastq` now handles optionals correctly (#323) +- Adds functional test and fix for [(#313)](https://github.com/TimothyStiles/poly/issues/313). +- In addition to expanding the set of genbank files which can be validly parsed, the parser is more vocal when it encounters unusual syntax in the "feature" section. This "fail fast" approach is better as there were cases where inputs triggered a codepath which would neither return a valid Genbank object nor an error, and should help with debugging. ## [0.26.0] - 2023-07-22 Oops, we weren't keeping a changelog before this tag! diff --git a/bio/genbank/genbank.go b/bio/genbank/genbank.go index c7f84a60..f2152b23 100644 --- a/bio/genbank/genbank.go +++ b/bio/genbank/genbank.go @@ -498,9 +498,9 @@ func (e ParseError) Error() string { loc = fmt.Sprintf("%s:%d", e.file, e.lineNo) } if e.before { - out = fmt.Sprintf("%s before %s", e.info, loc) + out = fmt.Sprintf("%s encountered before %s", e.info, loc) } else { - out = fmt.Sprintf("%s on %s: %s", e.info, loc, e.line) + out = fmt.Sprintf("%s encountered on %s: %s", e.info, loc, e.line) } if e.wraps != nil { out = fmt.Sprintf("%s\nfrom %v", out, e.wraps) From 433df00d2e214c6a60ee24d6e7b14539be9b41a5 Mon Sep 17 00:00:00 2001 From: Keoni Gandall Date: Thu, 9 Nov 2023 23:20:38 -0800 Subject: [PATCH 59/59] added to changelog --- CHANGELOG.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a4c4b1..78bfc0a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added -- Alternative start codons can now be used in the `synthesis/codon` DNA -> protein translation package (#305) -- Added a parser and writer for the `pileup` sequence alignment format (#329) +- Generic parser is now implemented across all parsers for consistent interactions. [(#339)](https://github.com/TimothyStiles/poly/issues/339) +- Alternative start codons can now be used in the `synthesis/codon` DNA -> protein translation package [(#305)](https://github.com/TimothyStiles/poly/issues/305) +- Added a parser and writer for the `pileup` sequence alignment format [(#329)](https://github.com/TimothyStiles/poly/issues/329) - Created copy methods for Feature and Location to address concerns raised by [(#342)](https://github.com/TimothyStiles/poly/issues/342) - Created new methods to convert polyjson -> genbank. - Created new `Feature.StoreSequence` method to enable [(#388)](https://github.com/TimothyStiles/poly/issues/388) @@ -19,8 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improves error reporting for genbank parse errors via a new `ParseError` struct. ### Fixed -- `fastq` parser no longer becomes de-aligned when reading (#325) -- `fastq` now handles optionals correctly (#323) +- `fastq` parser no longer becomes de-aligned when reading [(#325)](https://github.com/TimothyStiles/poly/issues/325) +- `fastq` now handles optionals correctly [(#323)](https://github.com/TimothyStiles/poly/issues/323) - Adds functional test and fix for [(#313)](https://github.com/TimothyStiles/poly/issues/313). - In addition to expanding the set of genbank files which can be validly parsed, the parser is more vocal when it encounters unusual syntax in the "feature" section. This "fail fast" approach is better as there were cases where inputs triggered a codepath which would neither return a valid Genbank object nor an error, and should help with debugging. @@ -28,4 +29,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Oops, we weren't keeping a changelog before this tag! [unreleased]: https://github.com/TimothyStiles/poly/compare/v0.26.0...main -[0.26.0]: https://github.com/TimothyStiles/poly/releases/tag/v0.26.0 \ No newline at end of file +[0.26.0]: https://github.com/TimothyStiles/poly/releases/tag/v0.26.0