Skip to content

Commit f3b4b11

Browse files
foleyjpgouriano
authored andcommitted
JIRA: RW-2383 Fixed asn_cleanup -K u in huge mode
git-svn-id: https://anonsvn.ncbi.nlm.nih.gov/repos/v1/trunk/c++@103490 78c7ea69-d796-4a43-9a09-de51944f1b03
1 parent 1cb9f1e commit f3b4b11

File tree

5 files changed

+54
-16
lines changed

5 files changed

+54
-16
lines changed

include/objtools/cleanup/cleanup.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,10 @@ class NCBI_CLEANUP_EXPORT CCleanup : public CObject
342342
/// @return Boolean return value indicates whether title was added
343343
static bool AddProteinTitle(CBioseq_Handle bsh);
344344

345+
/// Removes NcbiCleanup User Objects in the Seq-descr
346+
/// @return Boolean return value indicates whether object was removed
347+
static bool RemoveNcbiCleanupObject(CSeq_descr& descr);
348+
345349
/// Removes NcbiCleanup User Objects in the Seq-entry
346350
/// @param seq_entry Seq-entry to edit
347351
/// @return Boolean return value indicates whether object was removed

src/app/asn_cleanup/asn_cleanup.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,11 @@ void CCleanupApp::x_ProcessOneFile(const string& filename)
367367
options |= CCleanupHugeAsnReader::eEnableSmallGenomeSets;
368368
}
369369

370+
if (args["K"] && NStr::Find(args["K"].AsString(), "u") != NPOS) {
371+
options |= CCleanupHugeAsnReader::eRemoveNcbiUserObjects;
372+
}
373+
374+
370375
edit::CHugeFileProcess huge_process(new CCleanupHugeAsnReader(options));
371376
huge_process.OpenFile(filename);
372377

src/app/asn_cleanup/huge_file_cleanup.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ void CCleanupHugeAsnReader::x_CleanupTopLevelDescriptors()
217217
m_Changes.SetChanged(CCleanupChange::eAddNcbiCleanupObject);
218218
}
219219

220+
if (m_CleanupOptions & eRemoveNcbiUserObjects) {
221+
CCleanup::RemoveNcbiCleanupObject(m_top_entry->SetDescr());
222+
}
220223

221224
if (descriptors.empty()) {
222225
m_top_entry->SetSet().ResetDescr();

src/app/asn_cleanup/huge_file_cleanup.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class CCleanupHugeAsnReader: public edit::CHugeAsnReader
5353
eExtendedCleanup = 1,
5454
eNoNcbiUserObjects = 1<<1,
5555
eEnableSmallGenomeSets = 1<<2,
56+
eRemoveNcbiUserObjects = 1<<3,
5657
};
5758

5859
using TOptions = int;

src/objtools/cleanup/cleanup.cpp

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,50 +1895,75 @@ bool CCleanup::AddProteinTitle(CBioseq_Handle bsh)
18951895
}
18961896

18971897

1898+
1899+
static bool s_IsCleanupObject(const CSeqdesc& desc)
1900+
{
1901+
return (desc.IsUser() &&
1902+
(desc.GetUser().GetObjectType() == CUser_object::eObjectType_Cleanup));
1903+
}
1904+
1905+
1906+
bool CCleanup::RemoveNcbiCleanupObject(CSeq_descr& descr)
1907+
{
1908+
if (!descr.IsSet() || descr.Get().empty()) {
1909+
return false;
1910+
}
1911+
1912+
auto& elements = descr.Set();
1913+
auto it = elements.begin();
1914+
1915+
bool rval = false;
1916+
while (it != elements.end()) {
1917+
if (s_IsCleanupObject(**it)) {
1918+
it = elements.erase(it);
1919+
rval = true;
1920+
}
1921+
else {
1922+
++it;
1923+
}
1924+
}
1925+
return rval;
1926+
}
1927+
1928+
18981929
bool CCleanup::RemoveNcbiCleanupObject(CSeq_entry &seq_entry)
18991930
{
19001931
bool rval = false;
1932+
19011933
if (seq_entry.IsSetDescr()) {
1902-
CBioseq::TDescr::Tdata::iterator it = seq_entry.SetDescr().Set().begin();
1903-
while (it != seq_entry.SetDescr().Set().end()) {
1904-
if ((*it)->IsUser() && (*it)->GetUser().GetObjectType() == CUser_object::eObjectType_Cleanup){
1905-
it = seq_entry.SetDescr().Set().erase(it);
1906-
rval = true;
1907-
}
1908-
else {
1909-
++it;
1910-
}
1911-
}
1912-
if (seq_entry.SetDescr().Set().empty()) {
1913-
if (seq_entry.IsSeq()) {
1934+
rval = RemoveNcbiCleanupObject(seq_entry.SetDescr());
1935+
if (rval && seq_entry.GetDescr().Get().empty()) {
1936+
if (seq_entry.IsSet()) {
19141937
seq_entry.SetSeq().ResetDescr();
19151938
}
19161939
else if (seq_entry.IsSet()) {
19171940
seq_entry.SetSet().ResetDescr();
19181941
}
19191942
}
19201943
}
1944+
19211945
if (seq_entry.IsSet() && seq_entry.GetSet().IsSetSeq_set()) {
1922-
NON_CONST_ITERATE(CBioseq_set::TSeq_set, it, seq_entry.SetSet().SetSeq_set()) {
1923-
rval |= RemoveNcbiCleanupObject(**it);
1946+
for (auto pEntry : seq_entry.SetSet().SetSeq_set()) {
1947+
rval |= RemoveNcbiCleanupObject(*pEntry);
19241948
}
19251949
}
19261950
return rval;
19271951
}
19281952

1953+
19291954
void CCleanup::AddNcbiCleanupObject(int ncbi_cleanup_version, CSeq_descr& descr)
19301955
{
19311956
// update existing
19321957
if (descr.IsSet()) {
19331958
for (auto pDesc : descr.Set()) {
1934-
if (pDesc->IsUser() && pDesc->GetUser().GetObjectType() == CUser_object::eObjectType_Cleanup) {
1959+
if (s_IsCleanupObject(*pDesc)) {
19351960
pDesc->SetUser().UpdateNcbiCleanup(ncbi_cleanup_version);
19361961
return;
19371962
}
19381963
}
19391964
}
19401965

1941-
// create new
1966+
// create new cleanup object
19421967
auto pCleanupObject = Ref(new CSeqdesc());
19431968
auto& user = pCleanupObject->SetUser();
19441969
user.UpdateNcbiCleanup(ncbi_cleanup_version);

0 commit comments

Comments
 (0)