OpenMS
Loading...
Searching...
No Matches
UniPEFFEntries.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: Timo Sachsenberg $
6// $Authors: Timo Sachsenberg $
7// --------------------------------------------------------------------------
8
9#pragma once
10
11#include "UniProtXMLFile.h"
12
13#include <cstdint>
14#include <limits>
15#include <map>
16#include <string>
17#include <unordered_map>
18#include <vector>
19
28{
29 // ──────────────────────────────────────────────────────────────────
30 // ptmlist.txt — UniProt PTM controlled vocabulary
31 // ──────────────────────────────────────────────────────────────────
32
33 struct PtmEntry
34 {
35 std::string id;
36 std::string accession;
37 std::string psi_mod;
38 std::string unimod;
39 };
40
41 using PtmMap = std::unordered_map<std::string, PtmEntry>;
42
46 using SkippedIsoformCounts = std::map<std::string, size_t>;
47
48 // ──────────────────────────────────────────────────────────────────
49 // Intermediate annotation structures (built per UniProtEntry)
50 // ──────────────────────────────────────────────────────────────────
51
53 constexpr uint32_t kNoId = std::numeric_limits<uint32_t>::max();
54
56 {
57 int position{0};
58 bool is_halfcys{false};
59 const PtmEntry* ptm{nullptr};
60 std::string name;
61 uint32_t annotation_id{kNoId};
62 };
63
65 {
66 int position{0};
67 char new_aa{'?'};
68 uint32_t annotation_id{kNoId};
69 };
70
72 {
73 int begin{0};
74 int end{0};
75 std::string new_seq;
76 uint32_t annotation_id{kNoId};
77 };
78
80 {
81 int begin{0};
82 int end{0};
83 std::string cv;
84 std::string type_name;
85 uint32_t annotation_id{kNoId};
86 };
87
89 {
91 size_t idx_a{0};
92 size_t idx_b{0};
93 bool valid{false};
94 uint32_t annotation_id{kNoId};
95 };
96
98 {
99 std::vector<ModResItem> regular_mods;
100 std::vector<ModResItem> halfcys;
101 std::vector<DisulfidePairItem> disulfides;
102 std::vector<VariantSimpleItem> simple_variants;
103 std::vector<VariantComplexItem> complex_variants;
104 std::vector<ProcessedItem> processed;
105
107 std::vector<ModResItem> mods;
108 };
109
112 {
113 std::string accession;
114 std::string name;
115 std::string sequence;
117 };
118
128
133 {
134 size_t applied{0};
136 size_t skipped{0};
138
139 void add(size_t applied_in_entry, size_t skipped_in_entry)
140 {
141 applied += applied_in_entry;
142 if (applied_in_entry > 0) ++applied_entries;
143 skipped += skipped_in_entry;
144 if (skipped_in_entry > 0) ++skipped_entries;
145 }
146 };
147
149 bool isResidueCode(char c);
150
152 std::string positionOrUnknown(int p);
153
160 PreparedEntry prepareEntry(UniProtEntry&& e, const PtmMap& ptms, const std::string& prefix_override,
161 bool option_b, bool record_processing, bool record_aa_mods,
162 bool record_variants, bool record_isoforms,
163 SkippedIsoformCounts& skipped_isoforms);
164} // namespace OpenMS::UniPEFFEntries
The annotations of the PEFF entries that UniPEFF writes for a UniProtKB entry: its canonical entry an...
Definition UniPEFFEntries.h:28
std::vector< DisulfidePairItem > disulfides
indices reference halfcys before merge, mods after merge
Definition UniPEFFEntries.h:101
std::vector< ModResItem > mods
Final merged + sorted list (built by classifyAndMerge).
Definition UniPEFFEntries.h:107
std::string type_name
human name, e.g. "signal peptide"
Definition UniPEFFEntries.h:84
std::vector< IsoformEntry > isoforms
reconstructed alternative products (emitted after the entry)
Definition UniPEFFEntries.h:126
size_t isoform_scoped_skipped
isoform-scoped features left out (isoform not written) that would otherwise have become annotations
Definition UniPEFFEntries.h:124
bool valid
true when both endpoints come from a <begin>/<end> location; cleared by invalidateOutOfRangeDisulfide...
Definition UniPEFFEntries.h:93
char new_aa
Definition UniPEFFEntries.h:67
std::vector< VariantSimpleItem > simple_variants
Definition UniPEFFEntries.h:102
std::unordered_map< std::string, PtmEntry > PtmMap
Definition UniPEFFEntries.h:41
bool is_halfcys
for stable tie-break on merge
Definition UniPEFFEntries.h:58
EntryAnnotations annotations
features UniProt annotates on this isoform (<location sequence="...">)
Definition UniPEFFEntries.h:116
int position
0 = unknown ('?')
Definition UniPEFFEntries.h:57
std::string cv
PEFF CV accession, e.g. "PEFF:0001021".
Definition UniPEFFEntries.h:83
PreparedEntry prepareEntry(UniProtEntry &&e, const PtmMap &ptms, const std::string &prefix_override, bool option_b, bool record_processing, bool record_aa_mods, bool record_variants, bool record_isoforms, SkippedIsoformCounts &skipped_isoforms)
Definition UniPEFFEntries.cpp:502
std::vector< VariantComplexItem > complex_variants
Definition UniPEFFEntries.h:103
std::vector< ModResItem > regular_mods
Definition UniPEFFEntries.h:99
std::map< std::string, size_t > SkippedIsoformCounts
Definition UniPEFFEntries.h:46
std::vector< ProcessedItem > processed
Definition UniPEFFEntries.h:104
size_t isoform_scoped_applied
isoform-scoped features written to their isoform's entry
Definition UniPEFFEntries.h:123
std::string prefix
sp/tr or user override
Definition UniPEFFEntries.h:125
bool isResidueCode(char c)
PEFF VariantSimple newAA must be an amino-acid letter (or '*').
Definition UniPEFFEntries.cpp:23
uint32_t annotation_id
0-based; all tuples in Option B, paired half-cystines in default mode
Definition UniPEFFEntries.h:61
const PtmEntry * ptm
nullptr = generic (no accession), description in name
Definition UniPEFFEntries.h:59
size_t idx_a
Indices into EntryAnnotations::mods after merge — resolved to annotation_ids during emission.
Definition UniPEFFEntries.h:91
size_t idx_b
Definition UniPEFFEntries.h:92
int begin
Definition UniPEFFEntries.h:73
std::string sequence
canonical sequence with the referenced splice variants applied
Definition UniPEFFEntries.h:115
std::string name
display name (UniProt PTM ID or fallback description)
Definition UniPEFFEntries.h:60
int end
Definition UniPEFFEntries.h:74
std::string psi_mod
"MOD:xxxxx" or empty
Definition UniPEFFEntries.h:37
std::string unimod
"N" (numeric Unimod id) or empty (NOT prefixed with "UNIMOD:")
Definition UniPEFFEntries.h:38
UniProtEntry source
Definition UniPEFFEntries.h:121
std::string positionOrUnknown(int p)
0 → "?", else decimal.
Definition UniPEFFEntries.cpp:29
std::string accession
UniProt internal accession, e.g. "PTM-0253".
Definition UniPEFFEntries.h:36
std::vector< ModResItem > halfcys
Definition UniPEFFEntries.h:100
constexpr uint32_t kNoId
Sentinel for "no annotation identifier assigned": the tuple is emitted without an id: prefix.
Definition UniPEFFEntries.h:53
std::string id
UniProt PTM name (the lookup key from feature/@description)
Definition UniPEFFEntries.h:35
std::string new_seq
Definition UniPEFFEntries.h:75
Definition UniPEFFEntries.h:89
Definition UniPEFFEntries.h:98
One reconstructed isoform, ready for emission as its own PEFF entry.
Definition UniPEFFEntries.h:112
Definition UniPEFFEntries.h:56
Definition UniPEFFEntries.h:120
Definition UniPEFFEntries.h:80
Definition UniPEFFEntries.h:34
Definition UniPEFFEntries.h:72
Definition UniPEFFEntries.h:65
A single <entry> from a UniProtKB XML file, in a parser-neutral form.
Definition UniProtXMLFile.h:69
Definition UniPEFFEntries.h:133
size_t skipped_entries
Definition UniPEFFEntries.h:137
size_t skipped
Definition UniPEFFEntries.h:136
size_t applied
Definition UniPEFFEntries.h:134
size_t applied_entries
Definition UniPEFFEntries.h:135
void add(size_t applied_in_entry, size_t skipped_in_entry)
Definition UniPEFFEntries.h:139