11 #include "../pappsoexception.h"
12 #include "../exception/exceptionnotpossible.h"
20 : mcsp_msRunId(ms_run_id_csp)
58 if(mass_spectrum_csp ==
nullptr)
59 qFatal(
"Cannot be nullptr");
61 if(mass_spectrum_csp.get() ==
nullptr)
62 qFatal(
"Cannot be nullptr");
69 std::size_t precursor_spectrum_index =
70 mass_spectrum_csp->getPrecursorSpectrumIndex();
74 if(precursor_spectrum_index == std::numeric_limits<std::size_t>::max())
95 if(mass_spectrum_csp->getMsLevel() <= 1)
98 "msrundatasettree.cpp -- ERROR the MS level needs to be > 1 in a "
99 "fragmentation spectrum.");
105 if(parent_node_p ==
nullptr)
108 "msrundatasettree.cpp -- ERROR could not find "
109 "a tree node matching the index.");
120 parent_node_p->
m_children.push_back(new_node_p);
124 m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
125 mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
131 mass_spectrum_csp->getRtInMinutes(), new_node_p,
DataKind::rt);
136 mass_spectrum_csp->getDtInMilliSeconds(), new_node_p,
DataKind::dt);
148 const std::map<std::size_t, MsRunDataSetTreeNode *> &
161 throw(
"Cannot be that the node pointer is nullptr");
163 std::map<std::size_t, MsRunDataSetTreeNode *>::const_iterator iterator =
167 [node](
const std::pair<std::size_t, MsRunDataSetTreeNode *> pair) {
168 return pair.second == node;
172 return iterator->first;
174 return std::numeric_limits<std::size_t>::max();
188 const std::vector<MsRunDataSetTreeNode *> &
207 node->accept(visitor);
215 std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_begin_iterator,
216 std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_end_iterator)
222 using Iterator = std::vector<MsRunDataSetTreeNode *>::const_iterator;
224 Iterator iter = nodes_begin_iterator;
228 std::size_t node_count =
229 std::distance(nodes_begin_iterator, nodes_end_iterator);
233 while(iter != nodes_end_iterator)
244 (*iter)->accept(visitor);
260 if(iterNode !=
nullptr)
278 if(iterNode !=
nullptr)
286 std::vector<MsRunDataSetTreeNode *>
291 std::vector<MsRunDataSetTreeNode *> nodes;
296 node->flattenedView(nodes,
true );
303 std::vector<MsRunDataSetTreeNode *>
305 bool with_descendants)
307 std::vector<MsRunDataSetTreeNode *> nodes;
314 "msrundatasettree.cpp -- ERROR the MS level cannot be 0.");
322 std::size_t
depth = 0;
339 node->flattenedView(nodes, with_descendants);
359 node->flattenedViewMsLevelNodes(ms_level,
depth, nodes, with_descendants);
368 std::size_t product_spectrum_index)
378 node =
findNode(product_spectrum_index);
386 std::vector<MsRunDataSetTreeNode *>
388 std::size_t precursor_spectrum_index)
390 std::vector<MsRunDataSetTreeNode *> nodes;
396 if(precursor_node ==
nullptr)
399 nodes.assign(precursor_node->
m_children.begin(),
406 std::vector<MsRunDataSetTreeNode *>
414 if(precision_ptr ==
nullptr)
416 "msrundatasettree.cpp -- ERROR precision_ptr cannot be nullptr.");
418 std::vector<MsRunDataSetTreeNode *> product_nodes;
426 node->productNodesByPrecursorMz(
mz, precision_ptr, product_nodes);
431 std::vector<MsRunDataSetTreeNode *> precursor_nodes;
433 for(
auto &&node : product_nodes)
435 precursor_nodes.push_back(
436 findNode(node->mcsp_massSpectrum->getPrecursorSpectrumIndex()));
439 return precursor_nodes;
450 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
452 using MapPair = std::pair<double, NodeVector>;
453 using MapIterator = DoubleNodeVectorMap::iterator;
466 qFatal(
"Programming error.");
476 MapIterator found_iterator = map_p->find(time);
478 if(found_iterator != map_p->end())
482 found_iterator->second.push_back(node_p);
492 map_p->insert(MapPair(time, node_vector));
516 if(parent_p ==
nullptr)
533 m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
534 mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
540 mass_spectrum_csp->getRtInMinutes(), new_node_p,
DataKind::rt);
545 mass_spectrum_csp->getDtInMilliSeconds(), new_node_p,
DataKind::dt);
558 std::size_t precursor_spectrum_index)
576 if(mass_spec_data_node_p ==
nullptr)
579 "msrundatasettree.cpp -- ERROR could not find a a "
580 "tree node matching the index.");
596 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
598 using MapIterator = DoubleNodeVectorMap::const_iterator;
611 qFatal(
"Programming error.");
613 std::size_t added_nodes = 0;
618 MapIterator start_iterator = map_p->lower_bound(start);
620 if(start_iterator == map_p->end())
625 MapIterator end_iterator = map_p->upper_bound(end);
630 for(MapIterator iterator = start_iterator; iterator != end_iterator;
640 for(
auto &&node_p : node_vector)
642 nodes.push_back(node_p);
656 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
657 using NodeVectorIterator = NodeVector::iterator;
660 using MapIterator = DoubleNodeVectorMap::const_iterator;
673 qFatal(
"Programming error.");
675 std::size_t removed_vector_items = 0;
684 MapIterator first_end_iterator = (*map_p).upper_bound(start);
689 for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator;
701 for(
auto &&node_p : node_vector)
703 NodeVectorIterator iterator =
704 std::find(nodes.begin(), nodes.end(), node_p);
706 if(iterator != nodes.end())
710 nodes.erase(iterator);
712 ++removed_vector_items;
724 MapIterator second_first_iterator = map_p->upper_bound(end);
725 if(second_first_iterator != map_p->begin())
726 --second_first_iterator;
728 for(MapIterator iterator = second_first_iterator; iterator != map_p->end();
738 for(
auto &&node_p : node_vector)
740 NodeVectorIterator iterator =
741 std::find(nodes.begin(), nodes.end(), node_p);
743 if(iterator != nodes.end())
747 nodes.erase(iterator);
749 ++removed_vector_items;
754 return removed_vector_items;
768 qDebug() <<
"Special case, start and end are equal:" << start;
771 using MapIterator = DoubleNodeVectorMap::const_iterator;
790 qFatal(
"Programming error.");
795 std::size_t added_mass_spectra = 0;
800 MapIterator start_iterator = map_p->lower_bound(start);
802 if(start_iterator == map_p->end())
804 qDebug() <<
"The start iterator is end()!";
813 MapIterator end_iterator = map_p->upper_bound(end);
831 for(MapIterator iterator = start_iterator; iterator != end_iterator;
841 for(
auto &&node_p : node_vector)
843 mass_spectra.push_back(node_p->getQualifiedMassSpectrum());
845 ++added_mass_spectra;
851 return added_mass_spectra;
862 using QualMassSpectraVectorIterator = QualMassSpectraVector::iterator;
865 using MapIterator = DoubleNodeVectorMap::const_iterator;
884 qFatal(
"Programming error.");
886 std::size_t removed_vector_items = 0;
898 MapIterator first_end_iterator = (*map_p).lower_bound(start);
911 for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator;
923 for(
auto &&node_p : node_vector)
925 QualMassSpectraVectorIterator iterator =
926 std::find(mass_spectra.begin(),
928 node_p->getQualifiedMassSpectrum());
930 if(iterator != mass_spectra.end())
934 mass_spectra.erase(iterator);
936 ++removed_vector_items;
949 MapIterator second_first_iterator = map_p->upper_bound(end);
957 for(MapIterator iterator = second_first_iterator; iterator != map_p->end();
967 for(
auto &&node_p : node_vector)
969 QualMassSpectraVectorIterator iterator =
970 std::find(mass_spectra.begin(),
972 node_p->getQualifiedMassSpectrum());
974 if(iterator != mass_spectra.end())
978 mass_spectra.erase(iterator);
980 ++removed_vector_items;
985 return removed_vector_items;
1004 std::size_t
depth = 1;
1005 std::size_t tmp_depth = 0;
1006 std::size_t greatest_depth = 0;
1010 tmp_depth = node->depth(
depth);
1014 if(tmp_depth > greatest_depth)
1015 greatest_depth = tmp_depth;
1018 return greatest_depth;
1026 std::size_t cumulative_node_count = 0;
1030 node->size(cumulative_node_count);
1035 return cumulative_node_count;