ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/gffread/gffread.cpp
(Generate patch)
# Line 424 | Line 424
424    CDS_CHECK:
425      cdsnt=gffrec.getSpliced(faseq, true, &seqlen, NULL, NULL, &seglst);
426      if (cdsnt==NULL) trprint=false;
427 <    if (validCDSonly) {
428 <       cdsaa=translateDNA(cdsnt, aalen, seqlen);
429 <       char* p=strchr(cdsaa,'.');
430 <       hasStop=false;
431 <       if (p!=NULL) {
432 <            if (p-cdsaa>=aalen-2) { //stop found as the last codon
433 <                    *p='0';//remove it
434 <                    hasStop=true;
435 <                    if (aalen-2==p-cdsaa) {
436 <                      //previous to last codon is the stop codon
437 <                      //so correct the CDS stop accordingly
438 <                      adjust_stopcodon(gffrec,-3, &seglst);
439 <                      stopCodonAdjust=0; //clear artificial stop adjustment
440 <                      seqlen-=3;
441 <                      cdsnt[seqlen]=0;
427 >    else { //has CDS
428 >      if (validCDSonly) {
429 >         cdsaa=translateDNA(cdsnt, aalen, seqlen);
430 >         char* p=strchr(cdsaa,'.');
431 >         hasStop=false;
432 >         if (p!=NULL) {
433 >              if (p-cdsaa>=aalen-2) { //stop found as the last codon
434 >                      *p='0';//remove it
435 >                      hasStop=true;
436 >                      if (aalen-2==p-cdsaa) {
437 >                        //previous to last codon is the stop codon
438 >                        //so correct the CDS stop accordingly
439 >                        adjust_stopcodon(gffrec,-3, &seglst);
440 >                        stopCodonAdjust=0; //clear artificial stop adjustment
441 >                        seqlen-=3;
442 >                        cdsnt[seqlen]=0;
443 >                        }
444 >                      aalen=p-cdsaa;
445                        }
446 <                    aalen=p-cdsaa;
447 <                    }
448 <                 else {//stop found before the last codon
449 <                    trprint=false;
450 <                    }
451 <            }//stop codon found
452 <       if (trprint==false) { //failed CDS validity check
453 <         //in-frame stop codon found
454 <         if (altPhases && phaseNum<3) {
455 <            phaseNum++;
456 <            gffrec.CDphase = '0'+((mCDphase+phaseNum)%3);
457 <            GFREE(cdsaa);
458 <            goto CDS_CHECK;
459 <            }
460 <         if (gffrec.exons.Count()==1 && bothStrands) {
461 <            strandNum++;
462 <            phaseNum=0;
463 <            if (strandNum<2) {
464 <               GFREE(cdsaa);
465 <               gffrec.strand = (gffrec.strand=='-') ? '+':'-';
466 <               goto CDS_CHECK; //repeat the CDS check for a different frame
467 <               }
468 <            }
469 <         if (verbose) GMessage("In-frame STOP found for '%s'\n",gffrec.getID());
470 <         } //has in-frame STOP
471 <       if (fullCDSonly) {
472 <           if (!hasStop || cdsaa[0]!='M') trprint=false;
473 <           }
471 <       } // CDS check requested
446 >                   else {//stop found before the last codon
447 >                      trprint=false;
448 >                      }
449 >              }//stop codon found
450 >         if (trprint==false) { //failed CDS validity check
451 >           //in-frame stop codon found
452 >           if (altPhases && phaseNum<3) {
453 >              phaseNum++;
454 >              gffrec.CDphase = '0'+((mCDphase+phaseNum)%3);
455 >              GFREE(cdsaa);
456 >              goto CDS_CHECK;
457 >              }
458 >           if (gffrec.exons.Count()==1 && bothStrands) {
459 >              strandNum++;
460 >              phaseNum=0;
461 >              if (strandNum<2) {
462 >                 GFREE(cdsaa);
463 >                 gffrec.strand = (gffrec.strand=='-') ? '+':'-';
464 >                 goto CDS_CHECK; //repeat the CDS check for a different frame
465 >                 }
466 >              }
467 >           if (verbose) GMessage("In-frame STOP found for '%s'\n",gffrec.getID());
468 >           } //has in-frame STOP
469 >         if (fullCDSonly) {
470 >             if (!hasStop || cdsaa[0]!='M') trprint=false;
471 >             }
472 >         } // CDS check requested
473 >      } //has CDS
474      } //translation or codon check/output was requested
475    if (!trprint) {
476      GFREE(cdsnt);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines