本文整理汇总了C++中ContigPath::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ ContigPath::begin方法的具体用法?C++ ContigPath::begin怎么用?C++ ContigPath::begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ContigPath
的用法示例。
在下文中一共展示了ContigPath::begin方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: makeDistanceMap
/** Return a map of contig IDs to their distance along this path.
* Repeat contigs, which would have more than one position, are not
* represented in this map.
*/
map<ContigNode, int> makeDistanceMap(const Graph& g,
const ContigNode& origin, const ContigPath& path)
{
map<ContigNode, int> distances;
int distance = 0;
for (ContigPath::const_iterator it = path.begin();
it != path.end(); ++it) {
vertex_descriptor u = it == path.begin() ? origin : *(it - 1);
vertex_descriptor v = *it;
distance += getDistance(g, u, v);
bool inserted = distances.insert(
make_pair(v, distance)).second;
if (!inserted) {
// Mark this contig as a repeat.
distances[v] = INT_MIN;
}
distance += g[v].length;
}
// Remove the repeats.
for (map<ContigNode, int>::iterator it = distances.begin();
it != distances.end();)
if (it->second == INT_MIN)
distances.erase(it++);
else
++it;
return distances;
}
示例2: addOverlapEdge
/** Add an edge if the two paths overlap.
* @param pivot the pivot at which to seed the alignment
* @return whether an overlap was found
*/
static bool addOverlapEdge(const Lengths& lengths,
PathGraph& gout, ContigNode pivot,
ContigNode seed1, const ContigPath& path1,
ContigNode seed2, const ContigPath& path2)
{
assert(seed1 != seed2);
// Determine the orientation of the overlap edge.
dir_type orientation = DIR_X;
ContigPath consensus = align(lengths,
path1, path2, pivot, orientation);
if (consensus.empty())
return false;
assert(orientation != DIR_X);
if (orientation == DIR_B) {
// One of the paths subsumes the other. Use the order of the
// seeds to determine the orientation of the edge.
orientation = find(consensus.begin(), consensus.end(), seed1)
< find(consensus.begin(), consensus.end(), seed2)
? DIR_F : DIR_R;
}
assert(orientation == DIR_F || orientation == DIR_R);
// Add the edge.
ContigNode u = orientation == DIR_F ? seed1 : seed2;
ContigNode v = orientation == DIR_F ? seed2 : seed1;
bool added = false;
#pragma omp critical(gout)
if (!edge(u, v, gout).second) {
add_edge(u, v, gout);
added = true;
}
return added;
}
示例3: startsWith
/** Check whether path starts with the sequence [first, last). */
static bool startsWith(ContigPath path, bool rc,
ContigPath::const_iterator first,
ContigPath::const_iterator last)
{
if (rc)
reverseComplement(path.begin(), path.end());
assert(*first == path.front());
assert(first < last);
return unsigned(last - first) > path.size() ? false
: equal(first, last, path.begin());
}
示例4: make_pair
/** Return a pivot suitable for aligning the two paths if one exists,
* otherwise return false.
*/
static pair<ContigNode, bool> findPivot(
const ContigPath& path1, const ContigPath& path2)
{
for (ContigPath::const_iterator it = path2.begin();
it != path2.end(); ++it) {
if (it->ambiguous())
continue;
if (count(path2.begin(), path2.end(), *it) == 1
&& count(path1.begin(), path1.end(), *it) == 1)
return make_pair(*it, true);
}
return make_pair(ContigNode(0), false);
}
示例5: findOverlaps
/** Find every path that overlaps with the specified path. */
static void findOverlaps(const Graph& g,
const Paths& paths, const SeedMap& seedMap,
const Vertex& v, Overlaps& overlaps)
{
ContigPath rc;
if (v.sense) {
rc = paths[v.id];
reverseComplement(rc.begin(), rc.end());
}
const ContigPath& path = v.sense ? rc : paths[v.id];
for (ContigPath::const_iterator it = path.begin();
it != path.end(); ++it) {
if (it->ambiguous())
continue;
pair<SeedMap::const_iterator, SeedMap::const_iterator>
range = seedMap.equal_range(*it);
for (SeedMap::const_iterator seed = range.first;
seed != range.second; ++seed) {
if (v == seed->second)
continue;
int distance = 0;
unsigned overlap = findOverlap(g, paths, it, path.end(),
seed->second, distance);
if (overlap > 0)
overlaps.push_back(Overlap(v, seed->second,
overlap, distance));
}
}
}
示例6: removeAmbiguousContigs
/** Remove ambiguous contigs from the ends of the path. */
static void removeAmbiguousContigs(ContigPath& path)
{
if (!path.empty() && path.back().ambiguous())
path.erase(path.end() - 1);
if (!path.empty() && path.front().ambiguous())
path.erase(path.begin());
}
示例7: removeContigs
/** Remove the overlapping portion of the specified contig. */
static void removeContigs(ContigPath& path,
unsigned first, unsigned last)
{
assert(first <= path.size());
assert(last <= path.size());
if (first < last) {
recordTrimmedContigs(path.begin(), path.begin() + first);
recordTrimmedContigs(path.begin() + last, path.end());
path.erase(path.begin() + last, path.end());
path.erase(path.begin(), path.begin() + first);
} else {
recordTrimmedContigs(path.begin(), path.end());
path.clear();
}
removeAmbiguousContigs(path);
}
示例8: appendToMergeQ
static void appendToMergeQ(deque<ContigNode>& mergeQ,
set<ContigNode>& seen, const ContigPath& path)
{
for (ContigPath::const_iterator it = path.begin();
it != path.end(); ++it)
if (!it->ambiguous() && seen.insert(*it).second)
mergeQ.push_back(*it);
}
示例9: markSeen
/** Mark every contig in path as seen. */
static void markSeen(vector<bool>& seen, const ContigPath& path,
bool flag)
{
for (Path::const_iterator it = path.begin();
it != path.end(); ++it)
if (!it->ambiguous() && it->id() < seen.size())
seen[it->id()] = flag;
}
示例10: getPath
/** Return the specified path. */
static ContigPath getPath(const ContigPathMap& paths, ContigNode u)
{
ContigPathMap::const_iterator it = paths.find(u.contigIndex());
assert(it != paths.end());
ContigPath path = it->second;
if (u.sense())
reverseComplement(path.begin(), path.end());
return path;
}
示例11: mergePath
/** Merge the specified path. */
static Contig mergePath(const Graph& g, const Contigs& contigs,
const ContigPath& path)
{
Sequence seq;
unsigned coverage = 0;
for (ContigPath::const_iterator it = path.begin();
it != path.end(); ++it) {
if (!it->ambiguous())
coverage += g[*it].coverage;
if (seq.empty()) {
seq = sequence(contigs, *it);
} else {
assert(it != path.begin());
mergeContigs(g, contigs, *(it-1), *it, seq, path);
}
}
ostringstream ss;
ss << seq.size() << ' ' << coverage << ' ';
pathToComment(ss, g, path);
return Contig(ss.str(), seq);
}
示例12: mergePath
/** Merge the paths of the specified seed path.
* @return the merged contig path
*/
static ContigPath mergePath(const Lengths& lengths,
const ContigPathMap& paths, const ContigPath& seedPath)
{
assert(!seedPath.empty());
ContigNode seed1 = seedPath.front();
ContigPathMap::const_iterator path1It
= paths.find(seed1.contigIndex());
assert(path1It != paths.end());
ContigPath path(path1It->second);
if (seedPath.front().sense())
reverseComplement(path.begin(), path.end());
if (opt::verbose > 1)
#pragma omp critical(cout)
cout << "\n* " << seedPath << '\n'
<< get(g_contigNames, seedPath.front())
<< '\t' << path << '\n';
for (ContigPath::const_iterator it = seedPath.begin() + 1;
it != seedPath.end(); ++it) {
ContigNode seed2 = *it;
ContigPathMap::const_iterator path2It
= paths.find(seed2.contigIndex());
assert(path2It != paths.end());
ContigPath path2 = path2It->second;
if (seed2.sense())
reverseComplement(path2.begin(), path2.end());
ContigNode pivot
= find(path.begin(), path.end(), seed2) != path.end()
? seed2 : seed1;
ContigPath consensus = align(lengths, path, path2, pivot);
if (consensus.empty()) {
// This seed could be removed from the seed path.
if (opt::verbose > 1)
#pragma omp critical(cout)
cout << get(g_contigNames, seed2)
<< '\t' << path2 << '\n'
<< "\tinvalid\n";
} else {
path.swap(consensus);
if (opt::verbose > 1)
#pragma omp critical(cout)
cout << get(g_contigNames, seed2)
<< '\t' << path2 << '\n'
<< '\t' << path << '\n';
}
seed1 = seed2;
}
return path;
}
示例13: calculatePathLength
/** Return the length of the specified path in k-mer. */
static unsigned calculatePathLength(const Graph& g,
const ContigNode& origin,
const ContigPath& path, size_t prefix = 0, size_t suffix = 0)
{
if (prefix + suffix == path.size())
return 0;
assert(prefix + suffix < path.size());
int length = addProp(g, path.begin() + prefix,
path.end() - suffix).length;
// Account for the overlap on the left.
vertex_descriptor u = prefix == 0 ? origin : path[prefix - 1];
length += getDistance(g, u, path[prefix]);
assert(length > 0);
return length;
}
示例14: mergePaths
/** Merge a sequence of overlapping paths. */
static ContigPath mergePaths(const Paths& paths,
const OverlapMap& overlaps, const ContigPath& merge)
{
assert(!merge.empty());
ContigNode u = merge.front();
ContigPath path(getPath(paths, u));
for (ContigPath::const_iterator it = merge.begin() + 1;
it != merge.end(); ++it) {
ContigNode v = *it;
ContigPath vpath(getPath(paths, v));
unsigned overlap = getOverlap(overlaps, u, v);
assert(path.size() > overlap);
assert(vpath.size() > overlap);
assert(equal(path.end() - overlap, path.end(),
vpath.begin()));
path.insert(path.end(), vpath.begin() + overlap, vpath.end());
u = v;
}
return path;
}
示例15: addDistance
/** Add distances to a path. */
static ContigPath addDistance(const Graph& g, const ContigPath& path)
{
ContigPath out;
out.reserve(path.size());
ContigNode u = path.front();
out.push_back(u);
for (ContigPath::const_iterator it = path.begin() + 1;
it != path.end(); ++it) {
ContigNode v = *it;
int distance = getDistance(g, u, v);
if (distance >= 0) {
int numN = distance + opt::k - 1; // by convention
assert(numN >= 0);
numN = max(numN, 1);
out.push_back(ContigNode(numN, 'N'));
}
out.push_back(v);
u = v;
}
return out;
}