48 #include <unordered_map>
51 #include <boost/function.hpp>
52 #include <boost/graph/adjacency_list.hpp>
53 #include <boost/graph/depth_first_search.hpp>
54 #include <boost/graph/filtered_graph.hpp>
55 #include <boost/graph/properties.hpp>
56 #include <boost/variant.hpp>
57 #include <boost/variant/detail/hash_variant.hpp>
58 #include <boost/variant/static_visitor.hpp>
62 struct ScoreToTgtDecLabelPairs;
86 #pragma clang diagnostic push
87 #pragma clang diagnostic ignored "-Wextra-semi"
90 BOOST_STRONG_TYPEDEF(boost::blank, PeptideCluster)
101 BOOST_STRONG_TYPEDEF(
String, Peptide)
104 BOOST_STRONG_TYPEDEF(
Size, RunIndex)
107 BOOST_STRONG_TYPEDEF(
int, Charge)
109 #pragma clang diagnostic pop
113 typedef boost::variant<ProteinHit*, ProteinGroup, PeptideCluster, Peptide, RunIndex, Charge, PeptideHit*>
IDPointer;
114 typedef boost::variant<const ProteinHit*, const ProteinGroup*, const PeptideCluster*, const Peptide, const RunIndex, const Charge, const PeptideHit*>
IDPointerConst;
119 typedef boost::adjacency_list <boost::setS, boost::vecS, boost::undirectedS, IDPointer>
Graph;
121 typedef boost::adjacency_list <boost::setS, boost::vecS, boost::undirectedS, IDPointer>
GraphConst;
123 typedef boost::graph_traits<Graph>::vertex_descriptor
vertex_t;
124 typedef boost::graph_traits<Graph>::edge_descriptor
edge_t;
132 public boost::default_dfs_visitor
136 : gs(vgs), curr_v(0), next_v(0), m()
139 template <
typename Vertex,
typename Graph >
143 next_v = boost::add_vertex(tg[u], gs.back());
147 template <
typename Vertex,
typename Graph >
153 template <
typename Edge,
typename Graph >
156 if (m.find(e.m_target) == m.end())
158 next_v = boost::add_vertex(tg[e.m_target], gs.back());
159 m[e.m_target] = next_v;
163 next_v = m[e.m_target];
166 boost::add_edge(m[e.m_source], next_v, gs.back());
172 std::map<vertex_t, vertex_t>
m;
178 public boost::static_visitor<OpenMS::String>
209 return "rep" +
String(ri);
214 return "chg" +
String(chg);
221 template<
class CharT>
223 public boost::static_visitor<>
238 stream_ << prot->
getAccession() <<
": " << prot << std::endl;
243 stream_ <<
"PG" << std::endl;
248 stream_ <<
"PepClust" << std::endl;
253 stream_ << peptide << std::endl;
258 stream_ <<
"rep" << ri << std::endl;
263 stream_ <<
"chg" << chg << std::endl;
273 public boost::static_visitor<>
289 pg.
score = posterior;
304 public boost::static_visitor<double>
336 public boost::static_visitor<std::pair<double,bool>>
359 return {-1.0,
false};
365 std::vector<PeptideIdentification>& idedSpectra,
368 bool best_psms_annotated,
369 const std::optional<const ExperimentalDesign>& ed = std::optional<const ExperimentalDesign>());
375 bool use_unassigned_ids,
376 bool best_psms_annotated,
377 const std::optional<const ExperimentalDesign>& ed = std::optional<const ExperimentalDesign>());
453 bool stop_at_first, std::vector<vertex_t>& result);
464 bool stop_at_first, std::vector<vertex_t>& result);
479 struct SequenceToReplicateChargeVariantHierarchy;
509 #ifdef INFERENCE_BENCH
511 std::vector<std::tuple<vertex_t, vertex_t, unsigned long, double>> sizes_and_times_{1};
529 Size nrPrefractionationGroups_ = 0;
554 std::vector<PeptideIdentification>& idedSpectra,
556 bool best_psms_annotated =
false);
561 bool use_unassigned_ids,
562 bool best_psms_annotated =
false);
568 const std::unordered_map<std::string, ProteinHit*>& accession_map,
570 bool best_psms_annotated);
574 std::unordered_map<unsigned, unsigned>& indexToPrefractionationGroup,
576 std::unordered_map<std::string, ProteinHit*>& accession_map,
589 bool use_unassigned_ids,
593 std::vector<PeptideIdentification>& idedSpectra,
601 template<
class NodeType>
604 Graph::adjacency_iterator adjIt, adjIt_end;
605 boost::tie(adjIt, adjIt_end) = boost::adjacent_vertices(start, graph);
606 for (;adjIt != adjIt_end; ++adjIt)
608 if (graph[*adjIt].type() ==
typeid(NodeType))
610 result.emplace_back(boost::get<NodeType>(graph[*adjIt]));
612 else if (graph[*adjIt].which() > graph[start].which())
614 getDownstreamNodes(*adjIt, graph, result);
619 template<
class NodeType>
622 Graph::adjacency_iterator adjIt, adjIt_end;
623 boost::tie(adjIt, adjIt_end) = boost::adjacent_vertices(start, graph);
624 for (;adjIt != adjIt_end; ++adjIt)
626 if (graph[*adjIt].type() ==
typeid(NodeType))
628 result.emplace_back(boost::get<NodeType>(graph[*adjIt]));
630 else if (graph[*adjIt].which() < graph[start].which())
632 getUpstreamNodes(*adjIt, graph, result);
String toString() const
returns the peptide as string with modifications embedded in brackets
String toUnmodifiedString() const
returns the peptide as string without any modifications or (e.g., "PEPTIDER")
A container for consensus elements.
Definition: ConsensusMap.h:90
String toString(bool full_precision=true) const
Conversion to String full_precision Controls number of fractional digits for all double types or list...
Representation of an experimental design in OpenMS. Instances can be loaded with the ExperimentalDesi...
Definition: ExperimentalDesign.h:243
Visits nodes in the boost graph (either ptrs to an ID Object or some lightweight surrogates) and depe...
Definition: IDBoostGraph.h:305
double operator()(PeptideHit *pep) const
Definition: IDBoostGraph.h:308
double operator()(ProteinHit *prot) const
Definition: IDBoostGraph.h:313
double operator()(T &) const
Definition: IDBoostGraph.h:325
double operator()(ProteinGroup &pg) const
Definition: IDBoostGraph.h:318
Visits nodes in the boost graph (either ptrs to an ID Object or some lightweight surrogates) and depe...
Definition: IDBoostGraph.h:337
std::pair< double, bool > operator()(T &) const
Definition: IDBoostGraph.h:357
std::pair< double, bool > operator()(ProteinGroup &pg) const
Definition: IDBoostGraph.h:350
std::pair< double, bool > operator()(PeptideHit *pep) const
Definition: IDBoostGraph.h:340
std::pair< double, bool > operator()(ProteinHit *prot) const
Definition: IDBoostGraph.h:345
Visits nodes in the boost graph (ptrs to an ID Object) and depending on their type creates a label e....
Definition: IDBoostGraph.h:179
OpenMS::String operator()(const Peptide &peptide) const
Definition: IDBoostGraph.h:202
OpenMS::String operator()(const Charge &chg) const
Definition: IDBoostGraph.h:212
OpenMS::String operator()(const PeptideHit *pep) const
Definition: IDBoostGraph.h:182
OpenMS::String operator()(const ProteinGroup &) const
Definition: IDBoostGraph.h:192
OpenMS::String operator()(const RunIndex &ri) const
Definition: IDBoostGraph.h:207
OpenMS::String operator()(const ProteinHit *prot) const
Definition: IDBoostGraph.h:187
OpenMS::String operator()(const PeptideCluster &) const
Definition: IDBoostGraph.h:197
Visits nodes in the boost graph (ptrs to an ID Object) and depending on their type prints the address...
Definition: IDBoostGraph.h:224
void operator()(const Charge &chg) const
Definition: IDBoostGraph.h:261
std::basic_ostream< CharT > stream_
Definition: IDBoostGraph.h:266
PrintAddressVisitor(std::basic_ostream< CharT > stream)
Definition: IDBoostGraph.h:227
void operator()(const PeptideCluster &) const
Definition: IDBoostGraph.h:246
void operator()(const RunIndex &ri) const
Definition: IDBoostGraph.h:256
void operator()(PeptideHit *pep) const
Definition: IDBoostGraph.h:231
void operator()(ProteinHit *prot) const
Definition: IDBoostGraph.h:236
void operator()(const Peptide &peptide) const
Definition: IDBoostGraph.h:251
void operator()(const ProteinGroup &) const
Definition: IDBoostGraph.h:241
Visits nodes in the boost graph (either ptrs to an ID Object or some lightweight surrogates) and depe...
Definition: IDBoostGraph.h:274
void operator()(T &, double) const
Definition: IDBoostGraph.h:294
void operator()(PeptideHit *pep, double posterior) const
Definition: IDBoostGraph.h:277
void operator()(ProteinGroup &pg, double posterior) const
Definition: IDBoostGraph.h:287
void operator()(ProteinHit *prot, double posterior) const
Definition: IDBoostGraph.h:282
A boost dfs visitor that copies connected components into a vector of graphs.
Definition: IDBoostGraph.h:133
std::map< vertex_t, vertex_t > m
A mapping from old node id to new node id to not duplicate existing ones in the new graph.
Definition: IDBoostGraph.h:172
void start_vertex(Vertex u, const Graph &tg)
Definition: IDBoostGraph.h:140
void examine_edge(Edge e, const Graph &tg)
Definition: IDBoostGraph.h:154
dfs_ccsplit_visitor(Graphs &vgs)
Definition: IDBoostGraph.h:135
vertex_t curr_v
Definition: IDBoostGraph.h:170
void discover_vertex(Vertex, const Graph &)
Definition: IDBoostGraph.h:148
Graphs & gs
Definition: IDBoostGraph.h:169
Creates and maintains a boost graph based on the OpenMS ID datastructures.
Definition: IDBoostGraph.h:81
void addPeptideIDWithAssociatedProteins_(PeptideIdentification &spectrum, std::unordered_map< IDPointer, vertex_t, boost::hash< IDPointer >> &vertex_map, const std::unordered_map< std::string, ProteinHit * > &accession_map, Size use_top_psms, bool best_psms_annotated)
Used during building.
const ProteinIdentification & getProteinIDs()
Returns the underlying protein identifications for viewing.
void buildGraphWithRunInfo_(ProteinIdentification &proteins, std::vector< PeptideIdentification > &idedSpectra, Size use_top_psms, const ExperimentalDesign &ed)
void buildGraph_(ProteinIdentification &proteins, std::vector< PeptideIdentification > &idedSpectra, Size use_top_psms, bool best_psms_annotated=false)
boost::graph_traits< Graph >::vertex_descriptor vertex_t
Definition: IDBoostGraph.h:123
std::unordered_map< vertex_t, Size > pepHitVtx_to_run_
Definition: IDBoostGraph.h:523
boost::variant< const ProteinHit *, const ProteinGroup *, const PeptideCluster *, const Peptide, const RunIndex, const Charge, const PeptideHit * > IDPointerConst
Definition: IDBoostGraph.h:114
void addPeptideAndAssociatedProteinsWithRunInfo_(PeptideIdentification &spectrum, std::unordered_map< unsigned, unsigned > &indexToPrefractionationGroup, std::unordered_map< IDPointer, vertex_t, boost::hash< IDPointer >> &vertex_map, std::unordered_map< std::string, ProteinHit * > &accession_map, Size use_top_psms)
std::vector< Graph > Graphs
Definition: IDBoostGraph.h:120
double score
Definition: IDBoostGraph.h:97
IDBoostGraph(ProteinIdentification &proteins, ConsensusMap &cmap, Size use_top_psms, bool use_run_info, bool use_unassigned_ids, bool best_psms_annotated, const std::optional< const ExperimentalDesign > &ed=std::optional< const ExperimentalDesign >())
void getDownstreamNodes(const vertex_t &start, const Graph &graph, std::vector< NodeType > &result)
Definition: IDBoostGraph.h:602
ProteinIdentification & protIDs_
Definition: IDBoostGraph.h:477
void getUpstreamNodes(const vertex_t &start, const Graph graph, std::vector< NodeType > &result)
Definition: IDBoostGraph.h:620
void computeConnectedComponents()
Splits the initialized graph into connected components and clears it.
void clusterIndistProteinsAndPeptides()
void getProteinGroupScoresAndHitchhikingTgtFraction(ScoreToTgtDecLabelPairs &scores_and_tgt_fraction)
int tgts
Definition: IDBoostGraph.h:96
Size getNrConnectedComponents()
Zero means the graph was not split yet.
void resolveGraphPeptideCentric_(Graph &fg, bool removeAssociationsInData)
see equivalent public method
void getUpstreamNodesNonRecursive(std::queue< vertex_t > &q, const Graph &graph, int lvl, bool stop_at_first, std::vector< vertex_t > &result)
Searches for all upstream nodes from a (set of) start nodes that are lower or equal than a given leve...
const Graph & getComponent(Size cc)
Returns a specific connected component of the graph as a graph itself.
void applyFunctorOnCCsST(const std::function< void(Graph &)> &functor)
Do sth on connected components single threaded (your functor object has to inherit from std::function...
Graph g
the initial boost Graph (will be cleared when split into CCs)
Definition: IDBoostGraph.h:479
void annotateIndistProteins_(const Graph &fg, bool addSingletons)
internal function to annotate the underlying ID structures based on the given Graph
void clusterIndistProteinsAndPeptidesAndExtendGraph()
std::set< IDBoostGraph::vertex_t > PeptideNodeSet
Definition: IDBoostGraph.h:127
std::set< IDBoostGraph::vertex_t > ProteinNodeSet
Definition: IDBoostGraph.h:126
void buildGraphWithRunInfo_(ProteinIdentification &proteins, ConsensusMap &cmap, Size use_top_psms, bool use_unassigned_ids, const ExperimentalDesign &ed)
boost::adjacency_list< boost::setS, boost::vecS, boost::undirectedS, IDPointer > GraphConst
Definition: IDBoostGraph.h:121
void calculateAndAnnotateIndistProteins(bool addSingletons=true)
static void printGraph(std::ostream &out, const Graph &fg)
Prints a graph (component or if not split, the full graph) in graphviz (i.e. dot) format.
void calculateAndAnnotateIndistProteins_(const Graph &fg, bool addSingletons)
boost::graph_traits< Graph >::edge_descriptor edge_t
Definition: IDBoostGraph.h:124
void annotateIndistProteins(bool addSingletons=true)
void resolveGraphPeptideCentric(bool removeAssociationsInData=true)
IDBoostGraph(ProteinIdentification &proteins, std::vector< PeptideIdentification > &idedSpectra, Size use_top_psms, bool use_run_info, bool best_psms_annotated, const std::optional< const ExperimentalDesign > &ed=std::optional< const ExperimentalDesign >())
Constructors.
void getProteinGroupScoresAndTgtFraction(ScoreToTgtDecLabelPairs &scores_and_tgt_fraction)
void buildGraph_(ProteinIdentification &proteins, ConsensusMap &cmap, Size use_top_psms, bool use_unassigned_ids, bool best_psms_annotated=false)
void getProteinScores_(ScoreToTgtDecLabelPairs &scores_and_tgt)
boost::adjacency_list< boost::setS, boost::vecS, boost::undirectedS, IDPointer > Graph
Definition: IDBoostGraph.h:119
void getDownstreamNodesNonRecursive(std::queue< vertex_t > &q, const Graph &graph, int lvl, bool stop_at_first, std::vector< vertex_t > &result)
Searches for all downstream nodes from a (set of) start nodes that are higher or equal than a given l...
boost::variant< ProteinHit *, ProteinGroup, PeptideCluster, Peptide, RunIndex, Charge, PeptideHit * > IDPointer
an (currently unmodified) peptide sequence
Definition: IDBoostGraph.h:113
void applyFunctorOnCCs(const std::function< unsigned long(Graph &, unsigned int)> &functor)
Do sth on connected components (your functor object has to inherit from std::function or be a lambda)
Graphs ccs_
the Graph split into connected components
Definition: IDBoostGraph.h:506
vertex_t addVertexWithLookup_(const IDPointer &ptr, std::unordered_map< IDPointer, vertex_t, boost::hash< IDPointer >> &vertex_map)
placeholder for peptides with the same parent proteins or protein groups
Definition: IDBoostGraph.h:94
Representation of a peptide hit.
Definition: PeptideHit.h:57
double getScore() const
returns the PSM score
const AASequence & getSequence() const
returns the peptide sequence without trailing or following spaces
Int getCharge() const
returns the charge of the peptide
void setScore(double score)
sets the PSM score
Represents the peptide hits for a spectrum.
Definition: PeptideIdentification.h:65
Representation of a protein hit.
Definition: ProteinHit.h:60
double getScore() const
returns the score of the protein hit
void setScore(const double score)
sets the score of the protein hit
const String & getAccession() const
returns the accession of the protein
Representation of a protein identification run.
Definition: ProteinIdentification.h:72
A more convenient string class.
Definition: String.h:60
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
bool operator==(const IDBoostGraph::ProteinGroup &lhs, const IDBoostGraph::ProteinGroup &rhs)
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
Definition: IDScoreGetterSetter.h:57