9171b3f661fe87a3bc4f3e02c0593699510cc152 markd Wed Jun 24 05:49:12 2015 -0700 add option to gtfToGenePred to include gene and transcript version number that now part of their GTF files in the gene/transcripts ids (no redmine) diff --git src/hg/lib/genePred.c src/hg/lib/genePred.c index b5d690d..cb671bb 100644 --- src/hg/lib/genePred.c +++ src/hg/lib/genePred.c @@ -842,67 +842,75 @@ else if (stopCodonStart >= 0) { /* adjust CDS to include stop codon as in GTF */ if (group->strand == '+') { if (stopCodonEnd > cdsEnd) cdsEnd = stopCodonEnd; } else { if (stopCodonStart < cdsStart) cdsStart = stopCodonStart; } } +/* add in version numbers if requested and available */ +char geneIdToUse[512], transcriptIdToUse[512]; +geneIdToUse[0]= '\0'; +if (options & genePredGxfGeneNameAsName2) + { + if (group->lineList->geneName != NULL) + safecpy(geneIdToUse, sizeof(geneIdToUse), group->lineList->geneName); + } +else if (group->lineList->geneId != NULL) + { + if (genePredGxfIncludeVersion && (group->lineList->geneVersion != NULL)) + safef(geneIdToUse, sizeof(geneIdToUse), "%s.%s", group->lineList->geneId, group->lineList->geneVersion); + else + safecpy(geneIdToUse, sizeof(geneIdToUse), group->lineList->geneId); + } +if (genePredGxfIncludeVersion && (group->lineList->transcriptVersion != NULL)) + safef(transcriptIdToUse, sizeof(transcriptIdToUse), "%s.%s", name, group->lineList->transcriptVersion); +else + safecpy(transcriptIdToUse, sizeof(transcriptIdToUse), name); + + /* Allocate genePred and fill in values. */ AllocVar(gp); -gp->name = cloneString(name); +gp->name = cloneString(transcriptIdToUse); gp->chrom = cloneString(group->seq); gp->strand[0] = group->strand; gp->txStart = geneStart; gp->txEnd = geneEnd; if (cdsStart < cdsEnd) { gp->cdsStart = cdsStart; gp->cdsEnd = cdsEnd; } else { // no CDS, set to txEnd gp->cdsStart = gp->txEnd; gp->cdsEnd = gp->txEnd; } gp->exonStarts = AllocArray(eStarts, exonCount); gp->exonEnds = AllocArray(eEnds, exonCount); gp->optFields = optFields; if (optFields & genePredName2Fld) - { - if (options & genePredGxfGeneNameAsName2) - { - if (group->lineList->geneName != NULL) - gp->name2 = cloneString(group->lineList->geneName); - } - else - { - if (group->lineList->geneId != NULL) - gp->name2 = cloneString(group->lineList->geneId); - } - if (gp->name2 == NULL) - gp->name2 = cloneString(""); - } + gp->name2 = cloneString(geneIdToUse); if (optFields & genePredCdsStatFld) { if (cdsStart < cdsEnd) { if (!useStartStops) { /* GFF doesn't require start or stop, if not used, assume complete */ gp->cdsStartStat = cdsComplete; gp->cdsEndStat = cdsComplete; } else if (group->strand == '+') { gp->cdsStartStat = (haveStartCodon ? cdsComplete : cdsIncomplete); gp->cdsEndStat = (haveStopCodon ? cdsComplete : cdsIncomplete);; }