本文整理汇总了C++中ConsensusFeature::computeConsensus方法的典型用法代码示例。如果您正苦于以下问题:C++ ConsensusFeature::computeConsensus方法的具体用法?C++ ConsensusFeature::computeConsensus怎么用?C++ ConsensusFeature::computeConsensus使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ConsensusFeature
的用法示例。
在下文中一共展示了ConsensusFeature::computeConsensus方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
void SimplePairFinder::run(const std::vector<ConsensusMap> & input_maps, ConsensusMap & result_map)
{
if (input_maps.size() != 2)
throw Exception::IllegalArgument(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "exactly two input maps required");
checkIds_(input_maps);
// progress dots
Int progress_dots = 0;
if (this->param_.exists("debug::progress_dots"))
{
progress_dots = (Int) this->param_.getValue("debug:progress_dots");
}
Int number_of_considered_element_pairs = 0;
// For each element in map 0, find its best friend in map 1
std::vector<UInt> best_companion_index_0(input_maps[0].size(), UInt(-1));
std::vector<double> best_companion_quality_0(input_maps[0].size(), 0);
for (UInt fi0 = 0; fi0 < input_maps[0].size(); ++fi0)
{
double best_quality = -std::numeric_limits<double>::max();
for (UInt fi1 = 0; fi1 < input_maps[1].size(); ++fi1)
{
double quality = similarity_(input_maps[0][fi0], input_maps[1][fi1]);
if (quality > best_quality)
{
best_quality = quality;
best_companion_index_0[fi0] = fi1;
}
++number_of_considered_element_pairs;
if (progress_dots && !(number_of_considered_element_pairs % progress_dots))
{
std::cout << '-' << std::flush;
}
}
best_companion_quality_0[fi0] = best_quality;
}
// For each element in map 1, find its best friend in map 0
std::vector<UInt> best_companion_index_1(input_maps[1].size(), UInt(-1));
std::vector<double> best_companion_quality_1(input_maps[1].size(), 0);
for (UInt fi1 = 0; fi1 < input_maps[1].size(); ++fi1)
{
double best_quality = -std::numeric_limits<double>::max();
for (UInt fi0 = 0; fi0 < input_maps[0].size(); ++fi0)
{
double quality = similarity_(input_maps[0][fi0], input_maps[1][fi1]);
if (quality > best_quality)
{
best_quality = quality;
best_companion_index_1[fi1] = fi0;
}
++number_of_considered_element_pairs;
if (progress_dots && !(number_of_considered_element_pairs % progress_dots))
{
std::cout << '+' << std::flush;
}
}
best_companion_quality_1[fi1] = best_quality;
}
// And if both like each other, they become a pair.
// element_pairs_->clear();
for (UInt fi0 = 0; fi0 < input_maps[0].size(); ++fi0)
{
// fi0 likes someone ...
if (best_companion_quality_0[fi0] > pair_min_quality_)
{
// ... who likes him too ...
UInt best_companion_of_fi0 = best_companion_index_0[fi0];
if (best_companion_index_1[best_companion_of_fi0] == fi0 &&
best_companion_quality_1[best_companion_of_fi0] > pair_min_quality_
)
{
ConsensusFeature f;
f.insert(input_maps[0][fi0]);
f.insert(input_maps[1][best_companion_of_fi0]);
f.computeConsensus();
f.setQuality(best_companion_quality_0[fi0] + best_companion_quality_1[best_companion_of_fi0]);
result_map.push_back(f);
}
}
}
return;
}
示例2: makeConsensusFeature_
void QTClusterFinder::makeConsensusFeature_(list<QTCluster> & clustering,
ConsensusFeature & feature, OpenMSBoost::unordered_map<GridFeature *,
std::vector< QTCluster * > > & element_mapping)
{
// find the best cluster (a valid cluster with the highest score)
list<QTCluster>::iterator best = clustering.begin();
while (best != clustering.end() && best->isInvalid()) {++best;}
for (list<QTCluster>::iterator it = best;
it != clustering.end(); ++it)
{
if (!it->isInvalid())
{
if (it->getQuality() > best->getQuality())
{
best = it;
}
}
}
// no more clusters to process -> clear clustering and return
if (best == clustering.end())
{
clustering.clear();
return;
}
OpenMSBoost::unordered_map<Size, GridFeature *> elements;
best->getElements(elements);
// cout << "Elements: " << elements.size() << " with best " << best->getQuality() << " invalid " << best->isInvalid() << endl;
// create consensus feature from best cluster:
feature.setQuality(best->getQuality());
for (OpenMSBoost::unordered_map<Size, GridFeature *>::const_iterator it = elements.begin();
it != elements.end(); ++it)
{
feature.insert(it->first, it->second->getFeature());
}
feature.computeConsensus();
// update the clustering:
// 1. remove current "best" cluster
// 2. update all clusters accordingly and invalidate elements whose central
// element is removed
best->setInvalid();
for (OpenMSBoost::unordered_map<Size, GridFeature *>::const_iterator it = elements.begin();
it != elements.end(); ++it)
{
for (std::vector< QTCluster* >::iterator
cluster = element_mapping[&(*it->second)].begin();
cluster != element_mapping[&(*it->second)].end(); ++cluster)
{
// we do not want to update invalid features (saves time and does not
// recompute the quality)
if (!(*cluster)->isInvalid())
{
if (!(*cluster)->update(elements)) // cluster is invalid (center point removed):
{
(*cluster)->setInvalid();
}
}
}
}
}