File: proteindb.cpp

package info (click to toggle)
mothur 1.48.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,692 kB
  • sloc: cpp: 161,866; makefile: 122; sh: 31
file content (86 lines) | stat: -rw-r--r-- 2,789 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
//  proteindb.cpp
//  Mothur
//
//  Created by Sarah Westcott on 6/3/21.
//  Copyright © 2021 Schloss Lab. All rights reserved.
//

#include "proteindb.hpp"

/***********************************************************************/

ProteinDB::ProteinDB() : StorageDatabase() { }
/***********************************************************************/
//the clear function free's the memory
ProteinDB::~ProteinDB() { data.clear(); }

/***********************************************************************/

ProteinDB::ProteinDB(int newSize) : StorageDatabase() {  data.resize(newSize, Protein()); }

/***********************************************************************/

ProteinDB::ProteinDB(ifstream& filehandle) : StorageDatabase() {
    try{
        
        //read through file
        while (!filehandle.eof()) {
            
            Protein newProteinSequence(filehandle);  gobble(filehandle);
            
            if (newProteinSequence.getName() != "") {
                if (length == 0) { length = newProteinSequence.getAligned().size(); }
                if (length != newProteinSequence.getAligned().size()) { samelength = false;  }
                data.push_back(newProteinSequence);
            }
        }
        
        filehandle.close();
    }
    catch(exception& e) {
        m->errorOut(e, "ProteinDB", "ProteinDB");
        exit(1);
    }
}
/***********************************************************************/

int ProteinDB::getNumSeqs() { return data.size(); }

/***********************************************************************/
Protein ProteinDB::getProt(int index) {
    if ((index >= 0) && (index < data.size()) ) { return data[index]; }
    else { m->mothurOut("[ERROR]: invalid database index, please correct.\n"); m->setControl_pressed(true); Protein p; return p; }
}
/***********************************************************************/

void ProteinDB::push_back(Protein newProteinSequence) {
    try {
        if (length == 0) { length = newProteinSequence.getAligned().size(); }
        if (length != newProteinSequence.getAligned().size()) { samelength = false; }

        data.push_back(newProteinSequence);
    }
    catch(exception& e) {
        m->errorOut(e, "ProteinDB", "push_back");
        exit(1);
    }
}
/***********************************************************************/

void ProteinDB::print(string outputFileName) {
    try {
        ofstream out; util.openOutputFile(outputFileName, out);
        
        for (int i = 0; i < data.size(); i++) {
            data[i].printProtein(out);
        }
        out.close();
    }
    catch(exception& e) {
        m->errorOut(e, "ProteinDB", "print");
        exit(1);
    }
}
/***********************************************************************/