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 = mass_spectrum_csp->getPrecursorSpectrumIndex();
 
   73  if(precursor_spectrum_index == std::numeric_limits<std::size_t>::max())
 
   96      if(mass_spectrum_csp->getMsLevel() <= 1)
 
   99            "msrundatasettree.cpp -- ERROR the MS level needs to be > 1 in a " 
  100            "fragmentation spectrum.");
 
  106      if(parent_node_p == 
nullptr)
 
  111                                       .arg(
"msrundatasettree.cpp -- ERROR could not find " 
  112                                            "a tree node matching the index."));
 
  123      parent_node_p->
m_children.push_back(new_node_p);
 
  127  m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
 
  128    mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
 
  137  double ion_mobility_value = -1;
 
  146      QVariant ion_mobility_variant_value =
 
  149      if(ion_mobility_variant_value.isValid())
 
  153          ion_mobility_value = ion_mobility_variant_value.toDouble(&ok);
 
  158                "The data are Bruker timsTOF data but failed to convert valid " 
  159                "QVariant 1/K0 value to double.");
 
  177          ion_mobility_variant_value = mass_spectrum_csp->getParameterValue(
 
  180          if(!ion_mobility_variant_value.isValid())
 
  183                "The data are Bruker timsTOF data but failed to get correct " 
  184                "ion mobility data. Inconsistency found.");
 
  190      ion_mobility_value = mass_spectrum_csp->getDtInMilliSeconds();
 
  193  if(ion_mobility_value != -1)
 
 
  206const std::map<std::size_t, MsRunDataSetTreeNode *> &
 
  219    throw(
"Cannot be that the node pointer is nullptr");
 
  221  std::map<std::size_t, MsRunDataSetTreeNode *>::const_iterator iterator =
 
  224                 [node](
const std::pair<std::size_t, MsRunDataSetTreeNode *> pair) {
 
  225                   return pair.second == node;
 
  229    return iterator->first;
 
  231  return std::numeric_limits<std::size_t>::max();
 
 
  244const std::vector<MsRunDataSetTreeNode *> &
 
  263      node->accept(visitor);
 
 
  270                         std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_begin_iterator,
 
  271                         std::vector<MsRunDataSetTreeNode *>::const_iterator nodes_end_iterator)
 
  277  using Iterator = std::vector<MsRunDataSetTreeNode *>::const_iterator;
 
  279  Iterator iter = nodes_begin_iterator;
 
  283  std::size_t node_count = std::distance(nodes_begin_iterator, nodes_end_iterator);
 
  287  while(iter != nodes_end_iterator)
 
  298      (*iter)->accept(visitor);
 
 
  314      if(iterNode != 
nullptr)
 
 
  332      if(iterNode != 
nullptr)
 
 
  340std::vector<MsRunDataSetTreeNode *>
 
  345  std::vector<MsRunDataSetTreeNode *> nodes;
 
  350      node->flattenedView(nodes, 
true );
 
 
  357std::vector<MsRunDataSetTreeNode *>
 
  360  std::vector<MsRunDataSetTreeNode *> nodes;
 
  374  std::size_t 
depth = 0;
 
  391          node->flattenedView(nodes, with_descendants);
 
  411      node->flattenedViewMsLevelNodes(ms_level, 
depth, nodes, with_descendants);
 
 
  429  node                       = 
findNode(product_spectrum_index);
 
 
  437std::vector<MsRunDataSetTreeNode *>
 
  440  std::vector<MsRunDataSetTreeNode *> nodes;
 
  446  if(precursor_node == 
nullptr)
 
 
  455std::vector<MsRunDataSetTreeNode *>
 
  462  if(precision_ptr == 
nullptr)
 
  465  std::vector<MsRunDataSetTreeNode *> product_nodes;
 
  473      node->productNodesByPrecursorMz(mz, precision_ptr, product_nodes);
 
  478  std::vector<MsRunDataSetTreeNode *> precursor_nodes;
 
  480  for(
auto &&node : product_nodes)
 
  482      precursor_nodes.push_back(
findNode(node->mcsp_massSpectrum->getPrecursorSpectrumIndex()));
 
  485  return precursor_nodes;
 
 
  496  using NodeVector          = std::vector<MsRunDataSetTreeNode *>;
 
  498  using MapPair             = std::pair<double, NodeVector>;
 
  499  using MapIterator         = DoubleNodeVectorMap::iterator;
 
  512    qFatal(
"Programming error.");
 
  522  MapIterator found_iterator = map_p->find(time);
 
  524  if(found_iterator != map_p->end())
 
  528      found_iterator->second.push_back(node_p);
 
  538      map_p->insert(MapPair(time, node_vector));
 
 
  560  if(parent_p == 
nullptr)
 
  577  m_indexNodeMap.insert(std::pair<std::size_t, MsRunDataSetTreeNode *>(
 
  578    mass_spectrum_csp->getMassSpectrumId().getSpectrumIndex(), new_node_p));
 
  587  double ion_mobility_value = -1;
 
  596      QVariant ion_mobility_variant_value =
 
  599      if(ion_mobility_variant_value.isValid())
 
  603          ion_mobility_value = ion_mobility_variant_value.toDouble(&ok);
 
  608                "The data are Bruker timsTOF data but failed to convert valid " 
  609                "QVariant 1/K0 value to double.");
 
  627          ion_mobility_variant_value = mass_spectrum_csp->getParameterValue(
 
  630          if(!ion_mobility_variant_value.isValid())
 
  633                "The data are Bruker timsTOF data but failed to get correct " 
  634                "ion mobility data. Inconsistency found.");
 
  640      ion_mobility_value = mass_spectrum_csp->getDtInMilliSeconds();
 
  643  if(ion_mobility_value != -1)
 
 
  656                                  std::size_t precursor_spectrum_index)
 
  673  if(mass_spec_data_node_p == 
nullptr)
 
  676        "msrundatasettree.cpp -- ERROR could not find a a " 
  677        "tree node matching the index.");
 
 
  693  qDebug() << 
"Adding ms run data set tree nodes" << 
"inside of [" << start << 
"-" << end << 
"]" 
  696  using NodeVector          = std::vector<MsRunDataSetTreeNode *>;
 
  698  using MapIterator         = DoubleNodeVectorMap::const_iterator;
 
  711    qFatal(
"Programming error.");
 
  713  std::size_t added_nodes = 0;
 
  718  MapIterator start_iterator = map_p->lower_bound(start);
 
  720  if(start_iterator == map_p->end())
 
  725  MapIterator end_iterator = map_p->upper_bound(end);
 
  730  for(MapIterator iterator = start_iterator; iterator != end_iterator; ++iterator)
 
  739      for(
auto &&node_p : node_vector)
 
  741          nodes.push_back(node_p);
 
 
  757  qDebug() << 
"Removing ms run data set tree nodes" << 
"outside of [" << start << 
"-" << end << 
"]" 
  760  using NodeVector         = std::vector<MsRunDataSetTreeNode *>;
 
  761  using NodeVectorIterator = NodeVector::iterator;
 
  764  using MapIterator         = DoubleNodeVectorMap::const_iterator;
 
  777    qFatal(
"Programming error.");
 
  779  std::size_t removed_vector_items = 0;
 
  788  MapIterator first_end_iterator = (*map_p).upper_bound(start);
 
  793  for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator; ++iterator)
 
  804      for(
auto &&node_p : node_vector)
 
  806          NodeVectorIterator iterator = std::find(nodes.begin(), nodes.end(), node_p);
 
  808          if(iterator != nodes.end())
 
  812              nodes.erase(iterator);
 
  814              ++removed_vector_items;
 
  826  MapIterator second_first_iterator = map_p->upper_bound(end);
 
  827  if(second_first_iterator != map_p->begin())
 
  828    --second_first_iterator;
 
  830  for(MapIterator iterator = second_first_iterator; iterator != map_p->end(); ++iterator)
 
  839      for(
auto &&node_p : node_vector)
 
  841          NodeVectorIterator iterator = std::find(nodes.begin(), nodes.end(), node_p);
 
  843          if(iterator != nodes.end())
 
  847              nodes.erase(iterator);
 
  849              ++removed_vector_items;
 
  854  return removed_vector_items;
 
 
  864  qDebug() << 
"Adding spectra" << 
"inside of [" << start << 
"-" << end << 
"]" 
  879  using MapIterator         = DoubleNodeVectorMap::const_iterator;
 
  900    qFatal(
"Programming error.");
 
  902  QString msg = QString(
"The %1/mz map has size: %2 with start : %3 and end : %4\n")
 
  910  std::size_t added_mass_spectra = 0;
 
  915  MapIterator start_iterator = map_p->lower_bound(start);
 
  917  if(start_iterator == map_p->end())
 
  923  qDebug() << 
"The start_iterator points to:" << start_iterator->first << 
"as a" 
  931  MapIterator end_iterator = map_p->upper_bound(end);
 
  934  if(!std::distance(start_iterator, end_iterator))
 
  940  if(end_iterator == map_p->end())
 
  942      qDebug() << 
"The end_iterator points to the end of the map." 
  943               << 
"The last map item is prev() at" << 
dataKindMap[data_kind]
 
  944               << 
"key value: " << std::prev(end_iterator)->first;
 
  948      qDebug() << 
"The end_iterator points to:" << end_iterator->first << 
"as a" 
  949               << 
dataKindMap[data_kind] << 
"time and the accounted key value is actually" 
  950               << std::prev(end_iterator)->first;
 
  953  qDebug() << 
"The number of time values to iterate through the" << 
dataKindMap[data_kind]
 
  954           << 
"/mz map:" << std::distance(start_iterator, end_iterator)
 
  955           << 
"with values: start: " << start_iterator->first
 
  956           << 
"and end: " << std::prev(end_iterator)->first;
 
  961  for(MapIterator iterator = start_iterator; iterator != end_iterator; ++iterator)
 
  971      for(
auto &&node_p : node_vector)
 
  974            node_p->getQualifiedMassSpectrum();
 
  979          if(qualified_mass_spectrum_csp == 
nullptr ||
 
  980             qualified_mass_spectrum_csp.get() == 
nullptr)
 
  983                "The QualifiedMassSpectrumCstSPtr cannot be nullptr.");
 
  992          mass_spectra.push_back(qualified_mass_spectrum_csp);
 
  994          ++added_mass_spectra;
 
  998  qint64 elapsed = timer.elapsed(); 
 
 1000  qDebug() << 
"Took" << elapsed << 
"ms to add" << added_mass_spectra << 
"mass spectra";
 
 1002  return added_mass_spectra;
 
 
 1010  qDebug() << 
"Removing spectra" << 
"outside of [" << start << 
"-" << end << 
"]" 
 1013  QElapsedTimer timer;
 
 1017  using MapIterator         = DoubleNodeVectorMap::const_iterator;
 
 1038    qFatal(
"Programming error.");
 
 1040  std::size_t removed_vector_items = 0;
 
 1052  MapIterator first_end_iterator = (*map_p).lower_bound(start);
 
 1066  QSet<QualifiedMassSpectrumCstSPtr> set_of_mass_spectra_to_remove;
 
 1068  for(MapIterator iterator = map_p->begin(); iterator != first_end_iterator; ++iterator)
 
 1074      for(std::size_t index = 0; index < node_vector.size(); ++index)
 
 1076          set_of_mass_spectra_to_remove.insert(node_vector.at(index)->getQualifiedMassSpectrum());
 
 1078          ++removed_vector_items;
 
 1090  MapIterator second_first_iterator = map_p->upper_bound(end);
 
 1099  for(MapIterator iterator = second_first_iterator; iterator != map_p->end(); ++iterator)
 
 1106      for(std::size_t index = 0; index < node_vector.size(); ++index)
 
 1108          set_of_mass_spectra_to_remove.insert(node_vector.at(index)->getQualifiedMassSpectrum());
 
 1110          ++removed_vector_items;
 
 1117    std::remove_if(mass_spectra.begin(),
 
 1120                     return set_of_mass_spectra_to_remove.find(ptr) !=
 
 1121                            set_of_mass_spectra_to_remove.end();
 
 1123    mass_spectra.end());
 
 1125  qint64 elapsed = timer.elapsed(); 
 
 1127  qDebug() << 
"Took" << elapsed << 
"ms to remove" << removed_vector_items << 
"mass spectra";
 
 1129  return removed_vector_items;
 
 
 1148  std::size_t 
depth          = 1;
 
 1149  std::size_t tmp_depth      = 0;
 
 1150  std::size_t greatest_depth = 0;
 
 1154      tmp_depth = node->depth(
depth);
 
 1158      if(tmp_depth > greatest_depth)
 
 1159        greatest_depth = tmp_depth;
 
 1162  return greatest_depth;
 
 
 1170  std::size_t cumulative_node_count = 0;
 
 1174      node->size(cumulative_node_count);
 
 1179  return cumulative_node_count;
 
 
virtual bool shouldStop() const =0
 
virtual void setNodesToProcessCount(std::size_t)=0
 
QualifiedMassSpectrumCstSPtr mcsp_massSpectrum
 
MsRunDataSetTreeNode * findNode(std::size_t spectrum_index)
 
std::vector< MsRunDataSetTreeNode * > m_children
 
MsRunDataSetTreeNode * findNode(QualifiedMassSpectrumCstSPtr mass_spectrum_csp) const
 
const std::vector< MsRunDataSetTreeNode * > & getRootNodes() const
 
MsRunIdCstSPtr mcsp_msRunId
 
std::vector< QualifiedMassSpectrumCstSPtr > QualMassSpectraVector
 
std::vector< MsRunDataSetTreeNode * > flattenedViewMsLevel(std::size_t ms_level, bool with_descendants=false)
 
std::size_t indexNodeMapSize() const
 
void accept(MsRunDataSetTreeNodeVisitorInterface &visitor)
 
virtual ~MsRunDataSetTree()
 
MsRunDataSetTree(MsRunIdCstSPtr ms_run_id_csp)
 
std::vector< MsRunDataSetTreeNode * > flattenedView()
 
std::size_t addDataSetQualMassSpectraInsideDtOrRtRange(double start, double end, QualMassSpectraVector &mass_spectra, Enums::DataKind data_kind) const
 
bool documentNodeInDtRtMap(double time, MsRunDataSetTreeNode *node_p, Enums::DataKind data_kind)
 
std::size_t removeDataSetTreeNodesOutsideDtOrRtRange(double start, double end, NodeVector &nodes, Enums::DataKind data_kind) const
 
std::size_t getSpectrumCount() const
 
std::map< std::size_t, MsRunDataSetTreeNode * > m_indexNodeMap
 
std::vector< MsRunDataSetTreeNode * > m_rootNodes
 
std::map< double, NodeVector > DoubleNodeVectorMap
 
std::vector< MsRunDataSetTreeNode * > precursorNodesByPrecursorMz(pappso_double mz, PrecisionPtr precision_ptr)
 
std::vector< MsRunDataSetTreeNode * > NodeVector
 
std::size_t depth() const
 
MsRunDataSetTreeNode * precursorNodeByProductSpectrumIndex(std::size_t product_spectrum_index)
 
const std::map< std::size_t, MsRunDataSetTreeNode * > & getIndexNodeMap() const
 
MsRunDataSetTreeNode * addMassSpectrum(QualifiedMassSpectrumCstSPtr mass_spectrum)
 
std::size_t massSpectrumIndex(const MsRunDataSetTreeNode *node) const
 
DoubleNodeVectorMap m_rtDoubleNodeVectorMap
 
std::vector< MsRunDataSetTreeNode * > productNodesByPrecursorSpectrumIndex(std::size_t precursor_spectrum_index)
 
std::size_t m_spectrumCount
 
DoubleNodeVectorMap m_dtDoubleNodeVectorMap
 
std::size_t addDataSetTreeNodesInsideDtOrRtRange(double start, double end, NodeVector &nodes, Enums::DataKind data_kind) const
 
std::size_t removeDataSetQualMassSpectraOutsideDtOrRtRange(double start, double end, QualMassSpectraVector &mass_spectra, Enums::DataKind data_kind) const
 
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
 
std::map< Enums::DataKind, QString > dataKindMap
 
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
 
double pappso_double
A type definition for doubles.
 
std::shared_ptr< const QualifiedMassSpectrum > QualifiedMassSpectrumCstSPtr
 
@ IonMobOneOverK0Begin
1/K0 range's begin value
 
@ IonMobOneOverK0
1/kO value
 
const PrecisionBase * PrecisionPtr