本文整理汇总了C++中ContigPaths::size方法的典型用法代码示例。如果您正苦于以下问题:C++ ContigPaths::size方法的具体用法?C++ ContigPaths::size怎么用?C++ ContigPaths::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ContigPaths
的用法示例。
在下文中一共展示了ContigPaths::size方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mergeSeedPaths
/** Merge the specified seed paths.
* @return the merged contig paths
*/
static ContigPaths mergeSeedPaths(const Lengths& lengths,
const ContigPathMap& paths, const ContigPaths& seedPaths)
{
if (opt::verbose > 0)
cout << "\nMerging paths\n";
ContigPaths out;
out.reserve(seedPaths.size());
for (ContigPaths::const_iterator it = seedPaths.begin();
it != seedPaths.end(); ++it)
out.push_back(mergePath(lengths, paths, *it));
return out;
}
示例2: handleEstimate
/** Find a path for the specified distance estimates.
* @param out [out] the solution path
*/
static void handleEstimate(const Graph& g,
const EstimateRecord& er, bool dirIdx,
ContigPath& out)
{
if (er.estimates[dirIdx].empty())
return;
ContigNode origin(er.refID, dirIdx);
ostringstream vout_ss;
ostream bitBucket(NULL);
ostream& vout = opt::verbose > 0 ? vout_ss : bitBucket;
vout << "\n* " << get(vertex_name, g, origin) << '\n';
unsigned minNumPairs = UINT_MAX;
// generate the reachable set
Constraints constraints;
for (Estimates::const_iterator iter
= er.estimates[dirIdx].begin();
iter != er.estimates[dirIdx].end(); ++iter) {
ContigNode v = iter->first;
const DistanceEst& ep = iter->second;
minNumPairs = min(minNumPairs, ep.numPairs);
constraints.push_back(Constraint(v,
ep.distance + allowedError(ep.stdDev)));
}
vout << "Constraints:";
printConstraints(vout, g, constraints) << '\n';
ContigPaths solutions;
unsigned numVisited = 0;
constrainedSearch(g, origin, constraints, solutions, numVisited);
bool tooComplex = numVisited >= opt::maxCost;
bool tooManySolutions = solutions.size() > opt::maxPaths;
set<ContigID> repeats = findRepeats(er.refID, solutions);
if (!repeats.empty()) {
vout << "Repeats:";
for (set<ContigID>::const_iterator it = repeats.begin();
it != repeats.end(); ++it)
vout << ' ' << get(g_contigNames, *it);
vout << '\n';
}
unsigned numPossiblePaths = solutions.size();
if (numPossiblePaths > 0)
vout << "Paths: " << numPossiblePaths << '\n';
for (ContigPaths::iterator solIter = solutions.begin();
solIter != solutions.end();) {
vout << *solIter << '\n';
// Calculate the path distance to each node and see if
// it is within the estimated distance.
map<ContigNode, int> distanceMap
= makeDistanceMap(g, origin, *solIter);
// Remove solutions whose distance estimates are not correct.
unsigned validCount = 0, invalidCount = 0, ignoredCount = 0;
for (Estimates::const_iterator iter
= er.estimates[dirIdx].begin();
iter != er.estimates[dirIdx].end(); ++iter) {
ContigNode v = iter->first;
const DistanceEst& ep = iter->second;
vout << get(vertex_name, g, v) << ',' << ep << '\t';
map<ContigNode, int>::iterator dmIter
= distanceMap.find(v);
if (dmIter == distanceMap.end()) {
// This contig is a repeat.
ignoredCount++;
vout << "ignored\n";
continue;
}
// translate distance by -overlap to match
// coordinate space used by the estimate
int actualDistance = dmIter->second;
int diff = actualDistance - ep.distance;
unsigned buffer = allowedError(ep.stdDev);
bool invalid = (unsigned)abs(diff) > buffer;
bool repeat = repeats.count(v.contigIndex()) > 0;
bool ignored = invalid && repeat;
if (ignored)
ignoredCount++;
else if (invalid)
invalidCount++;
else
validCount++;
vout << "dist: " << actualDistance
<< " diff: " << diff
<< " buffer: " << buffer
<< " n: " << ep.numPairs
<< (ignored ? " ignored" : invalid ? " invalid" : "")
<< '\n';
}
//.........这里部分代码省略.........
示例3: fillGap
/** Return the consensus sequence of the specified gap. */
static ContigPath fillGap(const Graph& g,
const AmbPathConstraint& apConstraint,
vector<bool>& seen,
ofstream& outFasta)
{
if (opt::verbose > 1)
cerr << "\n* "
<< get(vertex_name, g, apConstraint.source) << ' '
<< apConstraint.dist << "N "
<< get(vertex_name, g, apConstraint.dest) << '\n';
Constraints constraints;
constraints.push_back(Constraint(apConstraint.dest,
apConstraint.dist + opt::distanceError));
ContigPaths solutions;
unsigned numVisited = 0;
constrainedSearch(g, apConstraint.source,
constraints, solutions, numVisited);
bool tooComplex = numVisited >= opt::maxCost;
for (ContigPaths::iterator solIt = solutions.begin();
solIt != solutions.end(); solIt++)
solIt->insert(solIt->begin(), apConstraint.source);
ContigPath consensus;
bool tooManySolutions = solutions.size() > opt::numBranches;
if (tooComplex) {
stats.tooComplex++;
if (opt::verbose > 1)
cerr << solutions.size() << " paths (too complex)\n";
} else if (tooManySolutions) {
stats.numTooManySolutions++;
if (opt::verbose > 1)
cerr << solutions.size() << " paths (too many)\n";
} else if (solutions.empty()) {
stats.numNoSolutions++;
if (opt::verbose > 1)
cerr << "no paths\n";
} else if (solutions.size() == 1) {
if (opt::verbose > 1)
cerr << "1 path\n" << solutions.front() << '\n';
stats.numMerged++;
} else {
assert(solutions.size() > 1);
if (opt::verbose > 2)
copy(solutions.begin(), solutions.end(),
ostream_iterator<ContigPath>(cerr, "\n"));
else if (opt::verbose > 1)
cerr << solutions.size() << " paths\n";
consensus = align(g, solutions, outFasta);
if (!consensus.empty()) {
stats.numMerged++;
// Mark contigs that are used in a consensus.
markSeen(seen, solutions, true);
if (opt::verbose > 1)
cerr << consensus << '\n';
} else
stats.notMerged++;
}
return consensus;
}
示例4: alignPair
/* Resolve ambiguous region using pairwise alignment
* (Needleman-Wunsch) ('solutions' contain exactly two paths, from a
* source contig to a dest contig)
*/
static ContigPath alignPair(const Graph& g,
const ContigPaths& solutions, ofstream& out)
{
assert(solutions.size() == 2);
assert(solutions[0].size() > 1);
assert(solutions[1].size() > 1);
assert(solutions[0].front() == solutions[1].front());
assert(solutions[0].back() == solutions[1].back());
ContigPath fstSol(solutions[0].begin()+1, solutions[0].end()-1);
ContigPath sndSol(solutions[1].begin()+1, solutions[1].end()-1);
if (fstSol.empty() || sndSol.empty()) {
// This entire sequence may be deleted.
const ContigPath& sol(fstSol.empty() ? sndSol : fstSol);
assert(!sol.empty());
Sequence consensus(mergePath(g, sol));
assert(consensus.size() > opt::k - 1);
string::iterator first = consensus.begin() + opt::k - 1;
transform(first, consensus.end(), first, ::tolower);
unsigned match = opt::k - 1;
float identity = (float)match / consensus.size();
if (opt::verbose > 2)
cerr << consensus << '\n';
if (opt::verbose > 1)
cerr << identity
<< (identity < opt::identity ? " (too low)\n" : "\n");
if (identity < opt::identity)
return ContigPath();
unsigned coverage = calculatePathProperties(g, sol).coverage;
ContigNode u = outputNewContig(g,
solutions, 1, 1, consensus, coverage, out);
ContigPath path;
path.push_back(solutions.front().front());
path.push_back(u);
path.push_back(solutions.front().back());
return path;
}
Sequence fstPathContig(mergePath(g, fstSol));
Sequence sndPathContig(mergePath(g, sndSol));
if (fstPathContig == sndPathContig) {
// These two paths have identical sequence.
if (fstSol.size() == sndSol.size()) {
// A perfect match must be caused by palindrome.
typedef ContigPath::const_iterator It;
pair<It, It> it = mismatch(
fstSol.begin(), fstSol.end(), sndSol.begin());
assert(it.first != fstSol.end());
assert(it.second != sndSol.end());
assert(*it.first
== get(vertex_complement, g, *it.second));
assert(equal(it.first+1, It(fstSol.end()), it.second+1));
if (opt::verbose > 1)
cerr << "Palindrome: "
<< get(vertex_contig_name, g, *it.first) << '\n';
return solutions[0];
} else {
// The paths are different lengths.
cerr << PROGRAM ": warning: "
"Two paths have identical sequence, which may be "
"caused by a transitive edge in the overlap graph.\n"
<< '\t' << fstSol << '\n'
<< '\t' << sndSol << '\n';
return solutions[fstSol.size() > sndSol.size() ? 0 : 1];
}
}
unsigned minLength = min(
fstPathContig.length(), sndPathContig.length());
unsigned maxLength = max(
fstPathContig.length(), sndPathContig.length());
float lengthRatio = (float)minLength / maxLength;
if (lengthRatio < opt::identity) {
if (opt::verbose > 1)
cerr << minLength << '\t' << maxLength
<< '\t' << lengthRatio << "\t(different length)\n";
return ContigPath();
}
NWAlignment align;
unsigned match = alignGlobal(fstPathContig, sndPathContig,
align);
float identity = (float)match / align.size();
if (opt::verbose > 2)
cerr << align;
if (opt::verbose > 1)
cerr << identity
<< (identity < opt::identity ? " (too low)\n" : "\n");
if (identity < opt::identity)
return ContigPath();
unsigned coverage = calculatePathProperties(g, fstSol).coverage
+ calculatePathProperties(g, sndSol).coverage;
ContigNode u = outputNewContig(g, solutions, 1, 1,
//.........这里部分代码省略.........