[med-svn] [Git][med-team/libgclib][upstream] New upstream version 0.11.3
Michael R. Crusoe
gitlab at salsa.debian.org
Thu Nov 7 12:36:58 GMT 2019
Michael R. Crusoe pushed to branch upstream at Debian Med / gclib
Commits:
b4625612 by Michael R. Crusoe at 2019-11-07T12:30:29Z
New upstream version 0.11.3
- - - - -
4 changed files:
- GBase.h
- GVec.hh
- gff.cpp
- gff.h
Changes:
=====================================
GBase.h
=====================================
@@ -1,6 +1,6 @@
#ifndef G_BASE_DEFINED
#define G_BASE_DEFINED
-#define GCLIB_VERSION "0.11.2"
+#define GCLIB_VERSION "0.11.3"
#ifdef HAVE_CONFIG_H
#include "config.h"
=====================================
GVec.hh
=====================================
@@ -64,7 +64,7 @@ template <class OBJ> class GVec {
GVec(int init_count, const OBJ init_val);
GVec(int init_count, OBJ* init_val, bool delete_initval=true); //convenience constructor for complex vectors
GVec(const GVec<OBJ>& array); //copy constructor
- const GVec<OBJ>& operator=(GVec<OBJ>& array); //copy operator
+ const GVec<OBJ>& operator=(const GVec<OBJ>& array); //copy operator
virtual ~GVec();
void Insert(int idx, OBJ item) { Insert(idx, &item); }
void Insert(int idx, OBJ* item);
@@ -148,7 +148,7 @@ template <class OBJ> class GPVec {
GPVec(bool free_elements);
GPVec(GPVec<OBJ>& list); //copy constructor?
GPVec(GPVec<OBJ>* list); //kind of a copy constructor
- const GPVec<OBJ>& operator=(GPVec<OBJ>& list);
+ const GPVec<OBJ>& operator=(const GPVec<OBJ>& list);
inline OBJ* Get(int i) {
TEST_INDEX(i);
return fList[i];
@@ -246,7 +246,7 @@ template <class OBJ> GVec<OBJ>::GVec(const GVec<OBJ>& array) { //copy constructo
this->fCount=array.fCount;
}
-template <class OBJ> const GVec<OBJ>& GVec<OBJ>::operator=(GVec<OBJ>& array) {
+template <class OBJ> const GVec<OBJ>& GVec<OBJ>::operator=(const GVec<OBJ>& array) {
if (&array==this) return *this;
Clear();
fCapacity=array.fCapacity;
@@ -580,7 +580,7 @@ template <class OBJ> GPVec<OBJ>::GPVec(GPVec* plist) { //another copy constructo
}
}
-template <class OBJ> const GPVec<OBJ>& GPVec<OBJ>::operator=(GPVec& list) {
+template <class OBJ> const GPVec<OBJ>& GPVec<OBJ>::operator=(const GPVec& list) {
if (&list!=this) {
Clear();
fFreeProc=list.fFreeProc;
=====================================
gff.cpp
=====================================
@@ -31,6 +31,7 @@ void gffnames_unref(GffNames* &n) {
if (n->numrefs==0) { delete n; n=NULL; }
}
+const int CLASSCODE_OVL_RANK = 15;
int classcode_rank(char c) {
switch (c) {
case '=': return 0; //intron chain match or full exon chain match if strict matching is enabled
@@ -42,6 +43,7 @@ int classcode_rank(char c) {
case 'j': return 6; // multi-exon transfrag with at least one junction match
case 'e': return 12; // single exon transfrag partially overlapping an intron of reference (possible pre-mRNA fragment)
case 'o': return 14; // other generic exon overlap
+ //**** >15 = no-overlaps (not on the same strand) from here on *****
case 's': return 16; //"shadow" - an intron overlaps with a ref intron on the opposite strand (wrong strand mapping?)
case 'x': return 18; // generic overlap on opposite strand (usually wrong strand mapping)
case 'i': return 20; // intra-intron (transfrag fully contained within a reference intron)
@@ -2439,6 +2441,17 @@ void GffObj::printExonList(FILE* fout) {
}
}
+void GffObj::printCDSList(FILE* fout) {
+ //print comma delimited list of CDS intervals
+ if (!hasCDS()) return;
+ GVec<GffExon> cds;
+ this->getCDSegs(cds); //also uses/prepares the CDS phase for each CDS segment
+ for (int i=0;i<cds.Count();i++) {
+ if (i>0) fprintf(fout, ",");
+ fprintf(fout, "%d-%d", cds[i].start, cds[i].end);
+ }
+}
+
void BED_addAttribute(FILE* fout, int& acc, const char* format,... ) {
++acc;
if (acc==1) fprintf(fout, "\t");
@@ -2708,6 +2721,26 @@ char* GffObj::getUnspliced(GFaSeqGet* faseq, int* rlen, GMapSegments* seglst) {
return unspliced;
}
+ void GffObj::addPadding(int padLeft, int padRight) {
+ this->start-=padLeft;
+ this->end+=padRight;
+ if (exons.Count()>0) {
+ exons[0]->start-=padLeft;
+ exons.Last()->end+=padRight;
+ }
+ covlen+=padLeft+padRight;
+ }
+
+ void GffObj::removePadding(int padLeft, int padRight) {
+ this->start+=padLeft;
+ this->end-=padRight;
+ if (exons.Count()>0) {
+ exons[0]->start+=padLeft;
+ exons.Last()->end-=padRight;
+ }
+ covlen-=padLeft+padRight;
+ }
+
char* GffObj::getSpliced(GFaSeqGet* faseq, bool CDSonly, int* rlen, uint* cds_start, uint* cds_end,
GMapSegments* seglst, bool cds_open) {
//cds_open only makes sense when CDSonly is true by overriding CDS 3'end such that the end of
@@ -2729,7 +2762,8 @@ char* GffObj::getSpliced(GFaSeqGet* faseq, bool CDSonly, int* rlen, uint* cds_st
if (gsubseq==NULL) {
GError("Error getting subseq for %s (%d..%d)!\n", gffID, start, end);
}
- if (fspan<(int)(end-start+1)) { //special case: stop coordinate was extended past the gseq length, must adjust
+ if (fspan<(int)(end-start+1)) {
+ //special case: stop coordinate was extended past the gseq length, must adjust
int endadj=end-start+1-fspan;
uint prevend=end;
end-=endadj;
@@ -2744,7 +2778,7 @@ char* GffObj::getSpliced(GFaSeqGet* faseq, bool CDSonly, int* rlen, uint* cds_st
}
}
char* spliced=NULL;
- GMALLOC(spliced, covlen+1); //allocate more here
+ GMALLOC(spliced, covlen+1); //IMPORTANT: covlen must be correct here!
uint g_start=0, g_end=0;
int cdsadj=0;
if (CDphase=='1' || CDphase=='2') {
@@ -3216,6 +3250,7 @@ void GffObj::getCDSegs(GVec<GffExon>& cds) {
cds.Add(cdseg);
} //for each exon
} // + strand
+
}
//-- transcript overlap classification functions
=====================================
gff.h
=====================================
@@ -22,7 +22,7 @@ extern int gff_fid_exon;
extern const uint GFF_MAX_LOCUS;
extern const uint GFF_MAX_EXON;
extern const uint GFF_MAX_INTRON;
-
+extern const int CLASSCODE_OVL_RANK;
//extern const uint gfo_flag_LEVEL_MSK; //hierarchical level: 0 = no parent
//extern const byte gfo_flagShift_LEVEL;
@@ -651,13 +651,18 @@ class GffExon : public GSeg {
} //constructor
+
GffExon(const GffExon& ex):GSeg(ex.start, ex.end) { //copy constructor
- (*this)=ex; //use the default copy operator
- if (ex.attrs!=NULL) {
- attrs=new GffAttrs();
- attrs->copyAttrs(ex.attrs);
+ (*this)=ex; //use the default (shallow!) copy operator
+ if (ex.attrs!=NULL) { //make a deep copy here
+ attrs=new GffAttrs();
+ attrs->copyAttrs(ex.attrs);
}
}
+
+ GffExon& operator=(const GffExon& o) = default; //prevent gcc 9 warnings:
+ //yes, I want a shallow copy here
+
~GffExon() { //destructor
if (attrs!=NULL && !sharedAttrs) delete attrs;
}
@@ -1015,6 +1020,8 @@ public:
printGxf(fout, showCDS ? pgffBoth : pgffExon, tlabel, gfparent, cvtChars);
}
void printExonList(FILE* fout); //print comma delimited list of exon intervals
+ void printCDSList(FILE* fout); //print comma delimited list of CDS intervals
+
void printBED(FILE* fout, bool cvtChars, char* dbuf, int dbuf_len);
//print a BED-12 line + GFF3 attributes in 13th field
void printSummary(FILE* fout=NULL);
@@ -1023,6 +1030,10 @@ public:
uint* cds_start=NULL, uint* cds_end=NULL, GMapSegments* seglst=NULL,
bool cds_open=false);
char* getUnspliced(GFaSeqGet* faseq, int* rlen, GMapSegments* seglst=NULL);
+
+ void addPadding(int padLeft, int padRight); //change exons to include this padding on the sides
+ void removePadding(int padLeft, int padRight);
+
//bool validCDS(GFaSeqGet* faseq); //has In-Frame Stop Codon ?
bool empty() { return (start==0); }
};
View it on GitLab: https://salsa.debian.org/med-team/libgclib/commit/b4625612b4ffccbddff1e7b34ede9b1639131e21
--
View it on GitLab: https://salsa.debian.org/med-team/libgclib/commit/b4625612b4ffccbddff1e7b34ede9b1639131e21
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20191107/218eeb2c/attachment-0001.html>
More information about the debian-med-commit
mailing list