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;
119 };
120
136
143 {
144 size_t applied{0};
146 size_t skipped{0};
148
149 void add(size_t applied_in_entry, size_t skipped_in_entry)
150 {
151 applied += applied_in_entry;
152 if (applied_in_entry > 0) ++applied_entries;
153 skipped += skipped_in_entry;
154 if (skipped_in_entry > 0) ++skipped_entries;
155 }
156 };
157
159 bool isResidueCode(char c);
160
162 std::string positionOrUnknown(int p);
163
177 PreparedEntry prepareEntry(UniProtEntry&& e, const PtmMap& ptms, const std::string& prefix_override,
178 bool option_b, bool record_processing, bool record_aa_mods,
179 bool record_variants, bool record_isoforms, bool map_canonical_features,
180 SkippedIsoformCounts& skipped_isoforms);
181} // 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
size_t canonical_unmapped
Definition UniPEFFEntries.h:132
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:134
size_t isoform_scoped_skipped
Definition UniPEFFEntries.h:126
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
Definition UniPEFFEntries.h:118
int position
0 = unknown ('?')
Definition UniPEFFEntries.h:57
std::string cv
PEFF CV accession, e.g. "PEFF:0001021".
Definition UniPEFFEntries.h:83
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:125
std::string prefix
sp/tr or user override
Definition UniPEFFEntries.h:133
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
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, bool map_canonical_features, SkippedIsoformCounts &skipped_isoforms)
Definition UniPEFFEntries.cpp:678
std::string sequence
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
size_t canonical_mapped
-map_canonical_features: canonical annotations written to an isoform entry (counted once per isoform)
Definition UniPEFFEntries.h:128
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:123
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:122
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:143
size_t skipped_entries
Definition UniPEFFEntries.h:147
size_t skipped
Definition UniPEFFEntries.h:146
size_t applied
Definition UniPEFFEntries.h:144
size_t applied_entries
Definition UniPEFFEntries.h:145
void add(size_t applied_in_entry, size_t skipped_in_entry)
Definition UniPEFFEntries.h:149