]> git.donarmstrong.com Git - mothur.git/blob - groupmap.cpp
0e0be0e8cf2799527e2664bb79b1cdded09e215c
[mothur.git] / groupmap.cpp
1 /*
2  *  groupmap.cpp
3  *  Dotur
4  *
5  *  Created by Sarah Westcott on 12/1/08.
6  *  Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "groupmap.h"
11
12 /************************************************************/
13
14  GroupMap::GroupMap(string filename) {
15         m = MothurOut::getInstance();
16         groupFileName = filename;
17         m->openInputFile(filename, fileHandle);
18         index = 0;
19 }
20
21 /************************************************************/
22  GroupMap::~GroupMap(){}
23
24 /************************************************************/
25 int GroupMap::readMap() {
26                 string seqName, seqGroup;
27                 int error = 0;
28
29                 while(fileHandle){
30                         fileHandle >> seqName;  m->gobble(fileHandle);          //read from first column
31                         fileHandle >> seqGroup;                 //read from second column
32                         
33                         if (m->control_pressed) {  fileHandle.close();  return 1; }
34         
35                         setNamesOfGroups(seqGroup);
36                         
37                         it = groupmap.find(seqName);
38                         
39                         if (it != groupmap.end()) { error = 1; m->mothurOut("Your groupfile contains more than 1 sequence named " + seqName + ", sequence names must be unique. Please correct."); m->mothurOutEndLine();  }
40                         else {
41                                 groupmap[seqName] = seqGroup;   //store data in map
42                                 seqsPerGroup[seqGroup]++;  //increment number of seqs in that group
43                         }
44                         m->gobble(fileHandle);
45                 }
46                 fileHandle.close();
47                 return error;
48 }
49 /************************************************************/
50 int GroupMap::getNumGroups() { return namesOfGroups.size();     }
51 /************************************************************/
52
53 string GroupMap::getGroup(string sequenceName) {
54                         
55         it = groupmap.find(sequenceName);
56         if (it != groupmap.end()) { //sequence name was in group file
57                 return it->second;      
58         }else {
59                 return "not found";
60         }
61 }
62
63 /************************************************************/
64
65 void GroupMap::setGroup(string sequenceName, string groupN) {
66         groupmap[sequenceName] = groupN;
67 }
68
69 /************************************************************/
70 void GroupMap::setNamesOfGroups(string seqGroup) {
71         int i, count;
72         count = 0;
73         for (i=0; i<namesOfGroups.size(); i++) {
74                 if (namesOfGroups[i] != seqGroup) {
75                         count++; //you have not found this group
76                 }else {
77                         break; //you already have it
78                 }
79         }
80         if (count == namesOfGroups.size()) {
81                 namesOfGroups.push_back(seqGroup); //new group
82                 seqsPerGroup[seqGroup] = 0;
83                 groupIndex[seqGroup] = index;
84                 index++;
85         }
86 }
87 /************************************************************/
88 bool GroupMap::isValidGroup(string groupname) {
89         try {
90                 for (int i = 0; i < namesOfGroups.size(); i++) {
91                         if (groupname == namesOfGroups[i]) { return true; }
92                 }
93                 
94                 return false;
95         }
96         catch(exception& e) {
97                 m->errorOut(e, "GroupMap", "isValidGroup");
98                 exit(1);
99         }
100 }
101 /************************************************************/
102 int GroupMap::getNumSeqs(string group) {
103         try {
104                 
105                 map<string, int>::iterator itNum;
106                 
107                 itNum = seqsPerGroup.find(group);
108                 
109                 if (itNum == seqsPerGroup.end()) { return 0; }
110                 
111                 return seqsPerGroup[group];
112                 
113         }
114         catch(exception& e) {
115                 m->errorOut(e, "GroupMap", "getNumSeqs");
116                 exit(1);
117         }
118 }
119
120 /************************************************************/
121 vector<string> GroupMap::getNamesSeqs(){
122         try {
123         
124                 vector<string> names;
125                 
126                 for (it = groupmap.begin(); it != groupmap.end(); it++) {
127                         names.push_back(it->first);
128                 }
129                 
130                 return names;
131         }
132         catch(exception& e) {
133                 m->errorOut(e, "GroupMap", "getNamesSeqs");
134                 exit(1);
135         }
136 }
137 /************************************************************/
138