]> git.donarmstrong.com Git - rsem.git/blob - GroupInfo.h
install the rsem_perl_utils.pm to /usr/bin even though this is wrong
[rsem.git] / GroupInfo.h
1 #ifndef GROUPINFO_H_
2 #define GROUPINFO_H_
3
4 #include<cstdio>
5 #include<cassert>
6 #include<vector>
7
8 class GroupInfo {
9 public:
10         GroupInfo() { m = 0; starts.clear(); gids = NULL; }
11         ~GroupInfo() { m = 0; starts.clear(); if (gids != NULL) delete[] gids; }
12
13         void load(const char*);
14
15         int getm() const { return m; }
16
17         int gidAt(int sid) const {
18                 assert(sid > 0 && sid < starts.back());
19                 return gids[sid];
20         }
21
22         // sp : start position
23         int spAt(int gid) const {
24                 assert(gid >= 0 && gid <= m);
25                 return starts[gid];
26         }
27
28 private:
29         int m; // m genes
30         std::vector<int> starts; // genes' start positions
31         int *gids; // hash
32 };
33
34 void GroupInfo::load(const char* groupF) {
35         FILE *fi = fopen(groupF, "r");
36         int pos;
37
38         if (fi == NULL) { fprintf(stderr, "Cannot open %s! It may not exist.\n", groupF); exit(-1); }
39
40         starts.clear();
41         while(fscanf(fi, "%d", &pos) == 1) {
42                 starts.push_back(pos);
43         }
44         fclose(fi);
45
46         m = starts.size() - 1;
47         gids = new int[starts.back()];
48         for (int i = 0; i < m; i++) {
49                 for (int j = starts[i]; j < starts[i + 1]; j++) {
50                         gids[j] = i;
51                 }
52         }
53 }
54
55 #endif /* GROUPINFO_H_ */