+void shrink() {
+ int curp = 0;
+
+ for (int i = 1; i <= M; i++)
+ if (seqs[i] == "") {
+ const Transcript& transcript = transcripts.getTranscriptAt(i);
+ printf("Warning: Cannot extract transcript %s's sequence since the chromosome it locates, %s, is absent!\n", transcript.getTranscriptID().c_str(), transcript.getSeqName().c_str());
+ }
+ else {
+ ++curp;
+ transcripts.move(i, curp);
+ if (i > curp) seqs[curp] = seqs[i];
+ }
+
+ printf("%d transcripts are extracted and %d transcripts are omitted.\n", curp, M - curp);
+
+ transcripts.setM(curp);
+ M = transcripts.getM();
+ general_assert(M > 0, "The reference contains no transcripts!");
+
+ starts.clear();
+ string curgid = "", gid;
+
+ for (int i = 1; i <= M; i++) {
+ gid = transcripts.getTranscriptAt(i).getGeneID();
+ if (curgid != gid) {
+ starts.push_back(i);
+ curgid = gid;
+ }
+ }
+ starts.push_back(M + 1);
+}
+