-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProForma2.h
More file actions
59 lines (49 loc) · 2.16 KB
/
ProForma2.h
File metadata and controls
59 lines (49 loc) · 2.16 KB
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
#ifndef OPENMS_CHEMISTRY_PROFORMA_H
#define OPENMS_CHEMISTRY_PROFORMA_H
#include <OpenMS/CHEMISTRY/AASequence.h>
#include <OpenMS/CHEMISTRY/ModificationDefinitionsSet.h>
#include <OpenMS/CHEMISTRY/ResidueDB.h>
#include <vector>
#include <string>
#include <unordered_map>
#include <unordered_set>
namespace OpenMS
{
struct ModificationAttributes
{
double mass_shift = 0.0;
bool ambiguous_start = false;
bool stop_position = false;
std::string modification_name;
std::pair<size_t, size_t> range = {0, 0};
};
class OPENMS_DLLAPI ProForma
{
public:
// Constructor
explicit ProForma(const AASequence& seq);
// Parse the ProForma string and populate the hash map
AASequence fromProFormaString(const std::string& proforma_str);
// Convert to ProForma string
std::string toProFormaString() const;
// Add a modification to the sequence at a specific position
void addModification(size_t position, const std::string& mod_id, double mass_shift);
// Remove a modification at a specific position
void removeModification(size_t position);
private:
AASequence sequence_;
std::unordered_map<size_t, ModificationAttributes> modifications_;
std::unordered_set<std::string> supported_cvs_{"UNIMOD", "MOD", "RESID", "XLMOD", "GNO"};
// Parsing methods
void parseCVModificationNames(const std::string& modString, size_t& pos, size_t residue_pos);
void parseStandardModification(const std::string& modString, size_t& pos, size_t residue_pos);
void parseDeltaMassNotation(const std::string& modString, size_t& pos, size_t residue_pos);
void parseNTerminalModification(const std::string& modString, size_t& pos);
void parseCTerminalModification(const std::string& modString, size_t& pos);
// NEW: Parsing method for range modifications
void parseRangeModification(const std::string& modString, size_t& pos);
void throwParseError(const std::string& message) const;
void validateCVModification(const std::string& modification);
};
}
#endif // OPENMS_CHEMISTRY_PROFORMA_H