GtTransTable* gt_trans_table_new_standard(GtError *err) { return gt_trans_table_new(GT_STANDARD_TRANSLATION_SCHEME, err); }
void gt_outputtranslationandorf(unsigned long pglnum, const GthAGS *ags, unsigned long agsnum, unsigned long translationtable, GthInput *input, unsigned int indentlevel, GthOutput *out) { unsigned long i; unsigned int nframe; const unsigned char *gen_seq_orig; GtStr *frame[3]; char translated; GtTranslatorStatus status; GtTranslator *translator; GtTransTable *transtable; GtCodonIterator *ci; GthSplicedSeq *spliced_seq; GtArray *ranges; GtFile *outfp = out->outfp; /* output header */ if (out->xmlout) { gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "<three_phase_translation " "xmlns=\"http://www.genomethreader.org/GTH_output/" "PGL_module/predicted_gene_location/AGS_information/" "three_phase_translation/\">\n"); indentlevel++; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "<description PGL_serial=\"%lu\" " "AGS_serial=\"%lu\" gDNA_strand=\"%c\"/>\n", pglnum + OUTPUTOFFSET, agsnum + OUTPUTOFFSET, SHOWSTRAND(gth_ags_is_forward(ags))); } else { gt_file_xprintf(outfp, "3-phase translation of AGS-%lu (%cstrand):\n\n", agsnum + OUTPUTOFFSET, SHOWSTRAND(gth_ags_is_forward(ags))); } ranges = gt_array_new(sizeof (GtRange)); for (i = 0; i < gt_array_size(ags->exons); i++) gt_array_add(ranges, ((GthExonAGS*) gt_array_get(ags->exons, i))->range); /* get genomic sequence */ gen_seq_orig = gth_input_original_genomic_sequence(input, gth_ags_filenum(ags), gth_ags_is_forward(ags)); spliced_seq = gth_spliced_seq_new(gen_seq_orig, ranges); frame[0] = gt_str_new(); frame[1] = gt_str_new(); frame[2] = gt_str_new(); /* prepare for translation */ ci = gt_codon_iterator_simple_new((const char*) spliced_seq->splicedseq, spliced_seq->splicedseqlen, NULL); gt_assert(ci); transtable = gt_trans_table_new(translationtable, NULL); gt_assert(transtable); /* translate the template in all three frames */ translator = gt_translator_new_with_table(transtable, ci); status = gt_translator_next(translator, &translated, &nframe, NULL); while (status == GT_TRANSLATOR_OK) { gt_str_append_char(frame[nframe], translated); status = gt_translator_next(translator, &translated, &nframe, NULL); } gt_assert(status != GT_TRANSLATOR_ERROR); gt_translator_delete(translator); gt_trans_table_delete(transtable); gt_codon_iterator_delete(ci); /* show the translation */ showtranslation(spliced_seq, gt_str_get(frame[0]), gt_str_get(frame[1]), gt_str_get(frame[2]), ags->exons, gth_ags_is_forward(ags), gth_ags_total_length(ags), gth_ags_genomic_offset(ags), indentlevel, out); /* show the (consolidated) ORFs */ gthshowORFs(gt_str_get(frame[0]), gt_str_get(frame[1]), gt_str_get(frame[2]), gt_str_length(frame[0]), gt_str_length(frame[1]), gt_str_length(frame[2]), gth_ags_is_forward(ags), gth_ags_total_length(ags), gth_ags_genomic_offset(ags), gt_str_get(ags->gen_id), pglnum, agsnum, spliced_seq, indentlevel, out); if (out->xmlout) { indentlevel--; gth_indent(outfp, indentlevel); gt_file_xprintf(outfp, "</three_phase_translation>\n"); } gth_spliced_seq_delete(spliced_seq); gt_array_delete(ranges); gt_str_delete(frame[0]); gt_str_delete(frame[1]); gt_str_delete(frame[2]); }