| 284 | } |
| 285 | |
| 286 | size_t NetworkSequenceCollection::controlErode() |
| 287 | { |
| 288 | SetState(NAS_ERODE); |
| 289 | m_comm.sendControlMessage(APC_SET_STATE, NAS_ERODE); |
| 290 | m_comm.barrier(); |
| 291 | size_t numEroded = AssemblyAlgorithms::erodeEnds(this); |
| 292 | EndState(); |
| 293 | |
| 294 | // Do not call SetState, because it clears the |
| 295 | // checkpoint information. |
| 296 | //SetState(NAS_ERODE_WAITING); |
| 297 | m_state = NAS_ERODE_WAITING; |
| 298 | |
| 299 | m_numReachedCheckpoint++; |
| 300 | while (!checkpointReached()) |
| 301 | pumpNetwork(); |
| 302 | numEroded += m_checkpointSum; |
| 303 | EndState(); |
| 304 | |
| 305 | if (numEroded == 0) { |
| 306 | SetState(NAS_WAITING); |
| 307 | m_comm.sendControlMessage(APC_WAIT); |
| 308 | m_comm.barrier(); |
| 309 | return 0; |
| 310 | } |
| 311 | |
| 312 | SetState(NAS_ERODE_COMPLETE); |
| 313 | m_comm.sendControlMessage(APC_ERODE_COMPLETE); |
| 314 | completeOperation(); |
| 315 | numEroded += m_comm.reduce( |
| 316 | AssemblyAlgorithms::getNumEroded()); |
| 317 | cout << "Eroded " << numEroded << " tips.\n"; |
| 318 | size_t removed = m_comm.reduce(m_data.cleanup()); |
| 319 | m_comm.barrier(); |
| 320 | assert(removed == numEroded); |
| 321 | (void)removed; |
| 322 | |
| 323 | SetState(NAS_WAITING); |
| 324 | return numEroded; |
| 325 | } |
| 326 | |
| 327 | /** Remove marked k-mer. |
| 328 | * @return the number of k-mer removed |
nothing calls this directly
no test coverage detected