]> git.donarmstrong.com Git - rsem.git/blob - Transcripts.h
2750e0c36394d3c3be5cb7d63dfb74f7ae5687a3
[rsem.git] / Transcripts.h
1 /*
2  * transcripts are numbered from 1. 0 is reserved for noise isoform
3  */
4 #ifndef TRANSCRIPTS_H_
5 #define TRANSCRIPTS_H_
6
7 #include<cstdio>
8 #include<cstdlib>
9 #include<cassert>
10 #include<fstream>
11 #include<vector>
12 #include<algorithm>
13
14 #include "Transcript.h"
15
16
17 class Transcripts {
18 public:
19         Transcripts(int type = 0) {
20                 M = 0; this->type = type;
21                 transcripts.clear();
22                 transcripts.push_back(Transcript());
23         }
24
25         int getM() { return M; }
26         int getType() { return type; }
27
28         const Transcript& getTranscriptAt(int pos) {
29                 assert(pos > 0 && pos <= M);
30                 return transcripts[pos];
31         }
32
33         void add(const Transcript& transcript) {
34                 transcripts.push_back(transcript);
35                 ++M;
36         }
37
38         void sort() {
39                 std::sort(transcripts.begin(), transcripts.end());
40         }
41
42         void readFrom(const char*);
43         void writeTo(const char*);
44
45 private:
46         int M, type; // type 0 from genome , 1 standalone transcriptome
47         std::vector<Transcript> transcripts;
48 };
49
50 void Transcripts::readFrom(const char* inpF) {
51         std::string line;
52         std::ifstream fin(inpF);
53
54         if (!fin.is_open()) { fprintf(stderr, "Cannot open %s! It may not exist.\n", inpF); exit(-1); }
55
56         fin>>M>>type;
57         getline(fin, line);
58         transcripts.clear();
59         transcripts.resize(M + 1);
60         for (int i = 1; i <= M; i++) {
61                 transcripts[i].read(fin);
62         }
63         fin.close();
64 }
65
66 void Transcripts::writeTo(const char* outF) {
67         std::ofstream fout(outF);
68         fout<<M<<" "<<type<<std::endl;
69         for (int i = 1; i <= M; i++) {
70                 transcripts[i].write(fout);
71         }
72         fout.close();
73 }
74
75 #endif /* TRANSCRIPTS_H_ */