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 "The MS level needs to be > 1 in a fragmentation spectrum."));
104 if(parent_node_p ==
nullptr)
107 "Could not find a a tree node matching the index."));
118 parent_node_p->
m_children.push_back(new_node_p);
122 m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
123 mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
129 mass_spectrum_csp->getRtInMinutes(), new_node_p,
DataKind::rt);
134 mass_spectrum_csp->getDtInMilliSeconds(), new_node_p,
DataKind::dt);
146 const std::map<std::size_t, MsRunDataSetTreeNode *> &
159 throw(
"Cannot be that the node pointer is nullptr");
161 std::map<std::size_t, MsRunDataSetTreeNode *>::const_iterator iterator =
165 [node](
const std::pair<std::size_t, MsRunDataSetTreeNode *> pair) {
166 return pair.second == node;
170 return iterator->first;
172 return std::numeric_limits<std::size_t>::max();
186 const std::vector<MsRunDataSetTreeNode *> &
205 node->accept(visitor);
213 std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_begin_iterator,
214 std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_end_iterator)
220 using Iterator = std::vector<MsRunDataSetTreeNode *>::const_iterator;
222 Iterator iter = nodes_begin_iterator;
226 std::size_t node_count =
227 std::distance(nodes_begin_iterator, nodes_end_iterator);
231 while(iter != nodes_end_iterator)
242 (*iter)->accept(visitor);
258 if(iterNode !=
nullptr)
276 if(iterNode !=
nullptr)
284 std::vector<MsRunDataSetTreeNode *>
289 std::vector<MsRunDataSetTreeNode *> nodes;
294 node->flattenedView(nodes,
true );
301 std::vector<MsRunDataSetTreeNode *>
303 bool with_descendants)
305 std::vector<MsRunDataSetTreeNode *> nodes;
312 "Fatal error at %s@%d -- %s(). "
313 "The MS level cannot be 0."
325 std::size_t
depth = 0;
342 node->flattenedView(nodes, with_descendants);
362 node->flattenedViewMsLevelNodes(ms_level,
depth, nodes, with_descendants);
371 std::size_t product_spectrum_index)
381 node =
findNode(product_spectrum_index);
389 std::vector<MsRunDataSetTreeNode *>
391 std::size_t precursor_spectrum_index)
393 std::vector<MsRunDataSetTreeNode *> nodes;
399 if(precursor_node ==
nullptr)
402 nodes.assign(precursor_node->
m_children.begin(),
409 std::vector<MsRunDataSetTreeNode *>
417 if(precision_ptr ==
nullptr)
419 "Fatal error at %s@%d -- %s(). "
420 "precision_ptr cannot be nullptr."
426 std::vector<MsRunDataSetTreeNode *> product_nodes;
434 node->productNodesByPrecursorMz(
mz, precision_ptr, product_nodes);
439 std::vector<MsRunDataSetTreeNode *> precursor_nodes;
441 for(
auto &&node : product_nodes)
443 precursor_nodes.push_back(
444 findNode(node->mcsp_massSpectrum->getPrecursorSpectrumIndex()));
447 return precursor_nodes;
458 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
460 using MapPair = std::pair<double, NodeVector>;
461 using MapIterator = DoubleNodeVectorMap::iterator;
474 qFatal(
"Programming error.");
484 MapIterator found_iterator = map_p->find(time);
486 if(found_iterator != map_p->end())
490 found_iterator->second.push_back(node_p);
500 map_p->insert(MapPair(time, node_vector));
524 if(parent_p ==
nullptr)
541 m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
542 mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
548 mass_spectrum_csp->getRtInMinutes(), new_node_p,
DataKind::rt);
553 mass_spectrum_csp->getDtInMilliSeconds(), new_node_p,
DataKind::dt);
566 std::size_t precursor_spectrum_index)
584 if(mass_spec_data_node_p ==
nullptr)
587 "Could not find a a tree node matching the index."));
603 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
605 using MapIterator = DoubleNodeVectorMap::const_iterator;
618 qFatal(
"Programming error.");
620 std::size_t added_nodes = 0;
625 MapIterator start_iterator = map_p->lower_bound(start);
627 if(start_iterator == map_p->end())
632 MapIterator end_iterator = map_p->upper_bound(end);
637 for(MapIterator iterator = start_iterator; iterator != end_iterator;
647 for(
auto &&node_p : node_vector)
649 nodes.push_back(node_p);
663 using NodeVector = std::vector<MsRunDataSetTreeNode *>;
664 using NodeVectorIterator = NodeVector::iterator;
667 using MapIterator = DoubleNodeVectorMap::const_iterator;
680 qFatal(
"Programming error.");
682 std::size_t removed_vector_items = 0;
691 MapIterator first_end_iterator = (*map_p).upper_bound(start);
696 for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator;
708 for(
auto &&node_p : node_vector)
710 NodeVectorIterator iterator =
711 std::find(nodes.begin(), nodes.end(), node_p);
713 if(iterator != nodes.end())
717 nodes.erase(iterator);
719 ++removed_vector_items;
731 MapIterator second_first_iterator = map_p->upper_bound(end);
732 if(second_first_iterator != map_p->begin())
733 --second_first_iterator;
735 for(MapIterator iterator = second_first_iterator; iterator != map_p->end();
745 for(
auto &&node_p : node_vector)
747 NodeVectorIterator iterator =
748 std::find(nodes.begin(), nodes.end(), node_p);
750 if(iterator != nodes.end())
754 nodes.erase(iterator);
756 ++removed_vector_items;
761 return removed_vector_items;
775 qDebug() <<
"Special case, start and end are equal:" << start;
778 using MapIterator = DoubleNodeVectorMap::const_iterator;
791 qFatal(
"Programming error.");
796 std::size_t added_mass_spectra = 0;
801 MapIterator start_iterator = map_p->lower_bound(start);
803 if(start_iterator == map_p->end())
805 qDebug() <<
"The start iterator is end()!";
814 MapIterator end_iterator = map_p->upper_bound(end);
832 for(MapIterator iterator = start_iterator; iterator != end_iterator;
842 for(
auto &&node_p : node_vector)
844 mass_spectra.push_back(node_p->getQualifiedMassSpectrum());
846 ++added_mass_spectra;
852 return added_mass_spectra;
863 using QualMassSpectraVectorIterator = QualMassSpectraVector::iterator;
866 using MapIterator = DoubleNodeVectorMap::const_iterator;
879 qFatal(
"Programming error.");
881 qDebug() <<
"The map has size:" << map_p->size() <<
"start:" << start
884 std::size_t removed_vector_items = 0;
896 MapIterator first_end_iterator = (*map_p).lower_bound(start);
904 qDebug() <<
"lower_bound for start:" << first_end_iterator->first;
909 for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator;
921 for(
auto &&node_p : node_vector)
923 QualMassSpectraVectorIterator iterator =
924 std::find(mass_spectra.begin(),
926 node_p->getQualifiedMassSpectrum());
928 if(iterator != mass_spectra.end())
932 mass_spectra.erase(iterator);
934 ++removed_vector_items;
947 MapIterator second_first_iterator = map_p->upper_bound(end);
953 qDebug() <<
"second_first_iterator for end:" << second_first_iterator->first;
955 for(MapIterator iterator = second_first_iterator; iterator != map_p->end();
965 for(
auto &&node_p : node_vector)
967 QualMassSpectraVectorIterator iterator =
968 std::find(mass_spectra.begin(),
970 node_p->getQualifiedMassSpectrum());
972 if(iterator != mass_spectra.end())
976 mass_spectra.erase(iterator);
978 ++removed_vector_items;
983 return removed_vector_items;
1002 std::size_t
depth = 1;
1003 std::size_t tmp_depth = 0;
1004 std::size_t greatest_depth = 0;
1008 tmp_depth = node->depth(
depth);
1012 if(tmp_depth > greatest_depth)
1013 greatest_depth = tmp_depth;
1016 return greatest_depth;
1024 std::size_t cumulative_node_count = 0;
1028 node->size(cumulative_node_count);
1033 return cumulative_node_count;