Genomic * get_Genomic_from_Gene(Gene * gene) { Genomic * gn; char buffer[64]; /* fprintf(stdout,"Getting genomic...\n"); */ if( gene->genomic != NULL ) return gene->genomic; if( gene->parent == NULL ) { warn("Cannot get Gene, as no parent genomic region!"); return NULL; } gn = get_Genomic_from_GenomicRegion(gene->parent); if( gn == NULL) { warn("Cannot get Gene, as no sequence in genomic region!"); return NULL; } if( gn->baseseq->offset < gn->baseseq->end) { if( gene->start > gene->end ) gene->genomic = truncate_Genomic(gn,gene->start-gn->baseseq->offset+2,gene->end-gn->baseseq->offset+2); else gene->genomic = truncate_Genomic(gn,gene->start-gn->baseseq->offset+1,gene->end-gn->baseseq->offset+1); } else { gene->genomic = truncate_Genomic(gn,gn->baseseq->offset-1 - gene->start,gn->baseseq->offset-1 - gene->end); } sprintf(buffer,"%s.[%d:%d]",Genomic_name(gn),gene->start+1,gene->end); ckfree(gene->genomic->baseseq->name); gene->genomic->baseseq->name = stringalloc(buffer); return gene->genomic; }
cDNA * get_cDNA_from_Transcript(Transcript * trs) { Genomic * gn; Sequence * base; int i; char buffer[64]; if( trs->cDNA != NULL) return trs->cDNA; if( trs->parent == NULL ) { warn("Cannot get cDNA, as no parent Gene!"); return NULL; } if ( (gn = get_Genomic_from_Gene(trs->parent)) == NULL ) { warn("Cannot get cDNA, as cannot get Genomic sequence from Gene"); return NULL; } base = Sequence_alloc(); sprintf(buffer,"%s.sp",Genomic_name(gn)); base->name = stringalloc(buffer); base->seq = ckcalloc(length_Transcript(trs)+1,sizeof(char)); base->seq[0]='\0'; for(i=0;i<trs->ex_len;i++) { strncat(base->seq,gn->baseseq->seq+trs->exon[i]->start,trs->exon[i]->end-trs->exon[i]->start); } make_len_type_Sequence(base); base->type = SEQUENCE_CDNA; trs->cDNA = cDNA_from_Sequence(base); return trs->cDNA; }