From f1797fc040a7cebe43d5df354e067a1582164d4e Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Mon, 16 Apr 2018 14:41:46 +0200 Subject: [PATCH 01/24] improving Code Structure [makeRadsDB] -using a class (DBCreator) to contain all the functionality to make the database --- src/DBCreator.cpp | 268 ++++++++++++++++++++++++++++++++++++++++++++++ src/DBCreator.hpp | 101 +++++++++++++++++ 2 files changed, 369 insertions(+) create mode 100644 src/DBCreator.cpp create mode 100644 src/DBCreator.hpp diff --git a/src/DBCreator.cpp b/src/DBCreator.cpp new file mode 100644 index 0000000..e1e385d --- /dev/null +++ b/src/DBCreator.cpp @@ -0,0 +1,268 @@ +/* +* DBCreator.cpp +* @Author : Carsten Kemena (c.kemena@uni-muenster.de) +* @Link : +* @Date : 4/16/2018, 9:26:11 AM +*/ + +#include "DBCreator.hpp" + +#include + +#include "../libs/BioSeqDataLib/src/sequence/SequenceSet.hpp" +#include "external/Output.hpp" +#include "external/SQLiteDB.hpp" +using namespace std; + + +// static +void +DBCreator::shortenEvalue_(std::string &evalue) +{ + auto end = evalue.find('e'); + auto start = end; + if (end != std::string::npos) + { + while (evalue[--start] == '0'); + if (evalue[start] != '.') + ++start; + if (start != end) + evalue.erase(evalue.begin()+start, evalue.begin()+end); + } +} + + +void +DBCreator::cleanDA_(BSDL::DomainArrangement &da, const std::set &querySet) +{ + // in case of large overlaps of domains only one domain is kept. The importance by database is: Pfam, Superfamily, Smart, Prosite, Gene3dD + std::sort (da.begin(), da.end(), [](const BSDL::Domain &a, const BSDL::Domain &b){return a.start() < b.start();} ); + for (const string &keepName : querySet) + { + set toDelete; + bool changed = true; + while (changed) + { + size_t nDomains = da.size(); + for (size_t i=1; i dom2.start()+this->filter_threshold_) && ((dom1.accession() == keepName) || (dom2.accession() == keepName))) + { + if (dom1.accession() != dom2.accession()) + toDelete.insert(dom1.accession() == keepName ? i : i-1); + } + } + for (auto it=toDelete.rbegin(); it!=toDelete.rend(); ++it) + da.erase(da.begin() + (*it)); + + if (toDelete.empty()) + changed = false; + + toDelete.clear(); + } + } + + vector importance = {"PF", "SS", "SM", "PS", "G3"}; + for (const string &prefix : importance) + { + vector toDelete; + bool changed = true; + while (changed) + { + size_t nDomains = da.size(); + for (size_t i=1; i dom2.start()+10) && ((pre1 == prefix) || (pre2 == prefix))) + { + if (pre1 == pre2) + { + if ((dom1.end() - dom1.start()) < (dom2.end() - dom2.start())) + toDelete.push_back(i); + else + toDelete.push_back(i-1); + } + else + toDelete.push_back(pre1 == prefix ? i : i-1); + } + } + for (int i=toDelete.size()-1; i>=0; --i) + da.erase(da.begin() + toDelete[i]); + if (toDelete.empty()) + changed = false; + toDelete.clear(); + } + } +} + + +void +DBCreator::addDomainArrangement_(BSDL::DomainArrangement &da, const std::string &proteinID, const std::string &proteinLength) +{ + sort(da.begin(), da.end()); + if (this->performFiltering_) + { + std::set empty; + this->cleanDA_(da, empty); + } + string id = da[0].accession(); + stringstream stream; + stream << std::scientific << da[0].evalue(); + string eval = stream.str(); + this->shortenEvalue_(eval); + string positions = proteinID + " " + proteinLength + " " + to_string(da[0].start()) + " " + to_string(da[0].end()) + " " + eval; + size_t nDomains = da.size(); + for (size_t i=1; i shortenEvalue_(eval); + positions += " " + to_string(da[i].start()) + " " + to_string(da[i].end()) + " " + eval; + } + dbContent_[id].emplace_back(positions); + da.clear(); +} + + +void +DBCreator::readInterPro(const fs::path &interProFile, const std::set &dbNames) +{ + auto itDBEnd = dbNames.end(); + + AlgorithmPack::Input inS; + inS.open(interProFile); + + string line; + bool insertThisDomain = false; + string protein, length; + + BSDL::DomainArrangement da; + string domainAcc; + string dbName; + + // parse interpro annotation of uniprot + boost::regex protIDre("protein id=\"([^\"]+)\".*length=\"([0-9]+)\""); + boost::regex dbRe(" m; + + while (getline(inS, line)) + { + // identify protein + if (boost::regex_search(line, m, protIDre)) + { + protein = string(m[1].first, m[1].second); + length = string(m[2].first, m[2].second); + } + else + { + // identify domain + if (boost::regex_search (line, m, dbRe)) + { + string dom(m[1].first, m[1].second); + string database(m[2].first, m[2].second); + if (dbNames.find(database) != itDBEnd) + { + domainAcc = dom; + dbName = database; + insertThisDomain = true; + } + else + insertThisDomain = false; + } + else + { + // get positions of domain + if (insertThisDomain) + { + if (boost::regex_search (line, m, positionsRe)) + { + string start(m[1].first, m[1].second); + string end(m[2].first, m[2].second); + string score(m[3].first, m[3].second); + da.emplace_back(domainAcc, stoul(start), stoul(end), stod(score)); + } + } + // end of protein, store in dbContent + if ((line.find("") != string::npos) && (!da.empty())) + this->addDomainArrangement_(da, protein, length); + } + } + } + inS.close(); +} + + +void +DBCreator::readAnnotationFile(const fs::path &annotationFile, const fs::path &sequenceFile) +{ + BSDL::DomainArrangementSet domSet; + domSet.read(annotationFile); + + // sequences are only needed for the protein length. + BSDL::SequenceSet> seqSet; + if (!sequenceFile.empty()) + seqSet.read(sequenceFile); + + std::map seqLengths; + for (auto &seq : seqSet) + seqLengths[seq.name()] = seq.size(); + + // read each sequence seperately + for (auto pair : domSet) + { + string seqLength = sequenceFile.empty() ? "0" : to_string(seqLengths[pair.first]); + this->addDomainArrangement_(pair.second, pair.first, seqLength); + } +} + + +std::pair +DBCreator::write(const fs::path &prefix, const std::map &info) +{ + AlgorithmPack::Output out; + fs::path dbFile = prefix; + dbFile.replace_extension(".da"); + out.open(dbFile); + + SQLiteDB db; + dbFile.replace_extension(".db"); + db.open(dbFile); + + // Create tables + db.exec("CREATE TABLE IF NOT EXISTS domain('id' INT PRIMARY KEY, 'accession' VARCHAR(45) NULL,'position' INT NULL)"); + db.exec("CREATE TABLE IF NOT EXISTS info('id' INT PRIMARY KEY, 'argument' VARCHAR(20), 'value' VARCHAR(200) NULL)"); + db.startTransaction(); + + size_t nSeqs = 0; + for (const auto pair : info) + db.exec("INSERT INTO info VALUES(NULL,'"+ pair.first + "','" + pair.second + "')"); + for (auto &arrangements : dbContent_) + { + + std::streampos filePos = out.tellp(); + auto tokens = BSDL::split(arrangements.first, ";"); + set doms; + for (auto &token : tokens) + doms.insert(token); + for (auto &token : doms) + db.exec("INSERT INTO domain VALUES(NULL,'"+ token + "','" + to_string(filePos) + "')"); + nSeqs += arrangements.second.size(); + + out << ">" << arrangements.first << "\n"; + for (auto arrangement : arrangements.second) + out << arrangement << "\n"; + } + out.close(); + db.endTransaction(); + db.exec("CREATE INDEX IF NOT EXISTS domIdx ON domain(accession)"); + return std::pair(nSeqs, dbContent_.size()); +} diff --git a/src/DBCreator.hpp b/src/DBCreator.hpp new file mode 100644 index 0000000..480f992 --- /dev/null +++ b/src/DBCreator.hpp @@ -0,0 +1,101 @@ +/* +* DBCreator.hpp +* @Author : Carsten Kemena (c.kemena@uni-muenster.de) +* @Link : +* @Date : 4/16/2018, 9:26:11 AM +*/ + +#include +#include +#include +#include +#include + +#include + +#include "../libs/BioSeqDataLib/src/DomainModule.hpp" + +namespace BSDL = BioSeqDataLib; +namespace fs = boost::filesystem; + +class DBCreator +{ + private: + bool performFiltering_; + int filter_threshold_; + // all DAs need to be stored first as they need to be sorted according to the domain arrangement + // The key is a ';'seperated list of domain accessions, the value a string with of the form + // protein_id length start end eval + // the start end eval are repeated for as many domains as the arrangement contains + std::map > dbContent_; + + /** + * @brief Remove trainling zeros of an evalue. + * + * @param evalue The evalue to shorten. + */ + void static + shortenEvalue_(std::string &evalue); + + void + cleanDA_(BSDL::DomainArrangement &da, const std::set &querySet); + + /** + * @brief Adds a single domain Arrangement to the database + * + * @param da The DA to add + * @param proteinID The id of the protein + * @param proteinLength the length of the protein + * + */ + void addDomainArrangement_(BSDL::DomainArrangement &da, const std::string &proteinID, const std::string &proteinLength); + + public: + DBCreator() + { + performFiltering_ = false; + filter_threshold_ = 10; + } + + void + filter(bool doFilter) + { + performFiltering_ = doFilter; + } + + void + threshold(int t) + { + filter_threshold_ = t; + } + + /** + * @brief Reads a standard domain annotation file. + * + * The sequence file is needed to properly set the sequence length in the database. If none is provided the sequence length will be zero. + * @param annotationFile The annotation file + * @param sequenceFile The sequence file + */ + void + readAnnotationFile(const fs::path &annotationFile, const fs::path &sequenceFile=0); + + /** + * @brief Reads the interpro file. + * + * @param inputFile The InterPro file path + * @param dbNames The database to include + */ + void + readInterPro(const fs::path &interProFile, const std::set &dbNames); + + /** + * @brief Writes the whole database to file + * + * @param prefix The prefix used to create the database files. + * @param info Additional information that is added to the info table. + * @return + */ + std::pair + write(const fs::path &prefix, const std::map &info); + +}; -- GitLab From b1944f4ae526ff66ea3547c73f5c3e1fcc7476fc Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Thu, 19 Apr 2018 14:24:43 +0200 Subject: [PATCH 02/24] internal code improvements -moved rads non option parsing code to DBAccess class -removed now unsupported option of makedb to add several interpro databases to rads database --- CHANGELOG | 3 + CMakeLists.txt | 8 +- src/DBAccess.cpp | 147 ++++++++++++++ src/DBAccess.hpp | 78 ++++++++ src/DBCreator.cpp | 31 ++- src/DBCreator.hpp | 34 +++- src/db.cpp | 96 --------- src/db.hpp | 51 ----- src/makeRadsDB.cpp | 312 +++-------------------------- src/rads.cpp | 255 ++++++----------------- tests/CMakeLists.txt | 2 +- tests/data/match_small2.xml | 32 ++- tests/integrationTests/runTests.sh | 2 +- tests/unitTests/db_Test.hpp | 6 +- 14 files changed, 407 insertions(+), 650 deletions(-) create mode 100644 src/DBAccess.cpp create mode 100644 src/DBAccess.hpp delete mode 100644 src/db.cpp delete mode 100644 src/db.hpp diff --git a/CHANGELOG b/CHANGELOG index 3326851..263e3e9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +v. 2.2.0 +- internal code improvements + v. 2.1.3 - added gop/gep information to output file - added commandline and rads version to databse file in additional table diff --git a/CMakeLists.txt b/CMakeLists.txt index ee95ffe..9f2fb57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 2.6) project (RADS C CXX) SET(MAJOR_VERSION 2) -SET(MINOR_VERSION 1) -SET(PATCH_VERSION 3) +SET(MINOR_VERSION 2) +SET(PATCH_VERSION 0) SET(CMAKE_CXX_FLAGS_COVERAGE @@ -97,14 +97,14 @@ ${BSDL_PATH}utility/DSM.cpp ${BSDL_PATH}utility/stringHelpers.cpp ) -SET(rads_src ${PROJECT_SOURCE_DIR}/src/rads.cpp ${PROJECT_SOURCE_DIR}/src/external/SQLiteDB.cpp ${PROJECT_SOURCE_DIR}/src/db.cpp ${BSDL_src} ${BSDL_PATH}/external_interfaces/domainProgs.cpp) +SET(rads_src ${PROJECT_SOURCE_DIR}/src/rads.cpp ${PROJECT_SOURCE_DIR}/src/DBAccess.cpp ${PROJECT_SOURCE_DIR}/src/external/SQLiteDB.cpp ${BSDL_src} ${BSDL_PATH}/external_interfaces/domainProgs.cpp) SET(rads_exe rads ) ADD_EXECUTABLE(${rads_exe} ${rads_src}) target_link_libraries(${rads_exe} ${Boost_LIBRARIES} ${SQLITE3_LIBRARY} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) -SET(makeDB_src ${PROJECT_SOURCE_DIR}/src/makeRadsDB.cpp ${PROJECT_SOURCE_DIR}/src/external/SQLiteDB.cpp ${PROJECT_SOURCE_DIR}/src/db.cpp ${BSDL_src}) +SET(makeDB_src ${PROJECT_SOURCE_DIR}/src/makeRadsDB.cpp ${PROJECT_SOURCE_DIR}/src/external/SQLiteDB.cpp ${PROJECT_SOURCE_DIR}/src/DBCreator.cpp ${BSDL_src}) SET(makeDB_exe makeRadsDB) ADD_EXECUTABLE(${makeDB_exe} ${makeDB_src}) target_link_libraries(${makeDB_exe} diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp new file mode 100644 index 0000000..6019800 --- /dev/null +++ b/src/DBAccess.cpp @@ -0,0 +1,147 @@ +/* +* DBAccess.cpp +* @Author : Carsten Kemena (c.kemena@uni-muenster.de) +* @Link : +* @Date : 4/17/2018, 8:50:02 AM +* +* This file is part of RADS. +* +* RADS is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* RADS is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with RADS. If not, see . +*/ + +#include "DBAccess.hpp" + +using namespace std; + +DBAccess::DBAccess(const fs::path &prefix, const fs::path &matrix) +{ + open(prefix); + setMatrix(matrix); +} + + +void +DBAccess::setMatrix(const fs::path &matrix) +{ + similarityMatrix_.read(matrix); + similarityMatrix_.useNegative(true); +} + + +void DBAccess::open(const fs::path &prefix) +{ + // open connection to database + fs::path dbFile = prefix; + dbFile.replace_extension(".db"); + index_.open(dbFile.string(), SQLITE_OPEN_READONLY); + + dbFile.replace_extension(".da"); + arrangementDB_.open(dbFile); +} + + +void +DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::AlignmentMatrix &matrix, bool all, int scoreThres, + std::multimap > &results) +{ + string query = "Select position from domain where accession in ('" + queryDA[0].accession() + "'"; + size_t nDomains = queryDA.size(); + for (size_t i=1; i positions; + auto storePositions = std::bind([](sqlite3_stmt *stmt, std::set &positions){positions.emplace(stoul(reinterpret_cast(sqlite3_column_text(stmt, 0))));}, std::placeholders::_1, std::ref(positions)); + this->index_.exec(query, storePositions); + + std::set queryDomSet; + for (const auto &domain : queryDA) + queryDomSet.insert(domain.accession()); + size_t queryLength = queryDA.size(); + + // read the arrangements from file + //BSDL::DomainArrangementSet targetDAs; + string line; + for (auto &pos : positions) + { + // get the domain arrangement at the given position + this->arrangementDB_.seekg(pos, std::ios_base::beg); + getline(this->arrangementDB_, line); + auto domains = BSDL::split(line, ">;"); + size_t nDomains = domains.size(); + BSDL::DomainArrangement targetDA; + for (auto &domain : domains) + targetDA.emplace_back(domain, 0, 0, 0); + + // if all domains are required check for that + if (all) + { + bool containsAll = true; + auto counts = BSDL::domainCounts(targetDA); + for (auto &dom: queryDomSet) + { + if (counts.count(dom)==0) + { + containsAll = false; + break; + } + } + // if not all domains are found, go on to next domain arrangement + if (!containsAll) + continue; + } + + // calculate score for the domain arrangement + int score; + double normScore; + size_t targetLength = targetDA.size(); + matrix.gotoh(queryDA, targetDA); + score = matrix.score(); + if (score < scoreThres) + continue; + int minScore = (queryLength+targetLength) * matrix.gep(); + normScore = min((score-minScore)*1.0/(queryLength*100-minScore),(score-minScore)*1.0/(targetLength*100-minScore)); + + // read all sequences having the same domain arrangement + while(getline(this->arrangementDB_, line)) + { + if (line[0] =='>') + break; + + const char *c_line = line.c_str(); + size_t pos = line.find(' '); + string name(line.begin(), line.begin()+pos); + char *tmp; + c_line += pos; + //auto daIt = targetDAs.emplace(name, BSDL::DomainArrangement()); + + auto hitIt = results.emplace(std::piecewise_construct, std::forward_as_tuple(score), std::forward_as_tuple(name, normScore, strtoul(c_line, &tmp, 10))); + size_t start, end; + double eval; + c_line = tmp; + for (size_t i=0; isecond.da.emplace_back(domains[i], start, end, eval); + } + } + } + /*RadsHit x; + x.target_name;*/ +} diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp new file mode 100644 index 0000000..758a832 --- /dev/null +++ b/src/DBAccess.hpp @@ -0,0 +1,78 @@ +/* +* DBAccess.hpp +* @Author : Carsten Kemena (c.kemena@uni-muenster.de) +* @Link : +* @Date : 4/17/2018, 8:50:02 AM +* +* This file is part of RADS. +* +* RADS is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* RADS is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with RADS. If not, see . +*/ + +#include + +// BioSeqDataLib +#include "../libs/BioSeqDataLib/src/DomainModule.hpp" +#include "../libs/BioSeqDataLib/src/align/AlignmentMatrix.hpp" +#include "../libs/BioSeqDataLib/src/external/Input.hpp" + + +#include "external/SQLiteDB.hpp" + + +namespace BSDL = BioSeqDataLib; +namespace fs = boost::filesystem; + + +struct RadsHit +{ + + std::string targetName; + double normalized; + size_t length; + BSDL::DomainArrangement da; + + RadsHit() : targetName(""), normalized(0), length(0) + {} + + RadsHit(std::string t, double n, size_t l) : targetName(t), normalized(n), length(l) + {} +}; + + +class DBAccess +{ + private: + SQLiteDB index_; + AlgorithmPack::Input arrangementDB_; + BSDL::DSM similarityMatrix_; + + public: + DBAccess() + {} + + DBAccess(const fs::path &prefix, const fs::path&matrix); + + void + open(const fs::path &prefix); + + void + setMatrix(const fs::path &matrix); + + void + search(const BSDL::DomainArrangement &query, BSDL::AlignmentMatrix &matrix, bool all, int scoreThres, + std::multimap > &results); + + +}; diff --git a/src/DBCreator.cpp b/src/DBCreator.cpp index e1e385d..7e30b4e 100644 --- a/src/DBCreator.cpp +++ b/src/DBCreator.cpp @@ -3,6 +3,21 @@ * @Author : Carsten Kemena (c.kemena@uni-muenster.de) * @Link : * @Date : 4/16/2018, 9:26:11 AM +* +* This file is part of RADS. +* +* RADS is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* RADS is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with RADS. If not, see . */ #include "DBCreator.hpp" @@ -31,9 +46,9 @@ DBCreator::shortenEvalue_(std::string &evalue) } } - +/* void -DBCreator::cleanDA_(BSDL::DomainArrangement &da, const std::set &querySet) +DBCreator::cleanDA_(BSDL::DomainArrangement &da) { // in case of large overlaps of domains only one domain is kept. The importance by database is: Pfam, Superfamily, Smart, Prosite, Gene3dD std::sort (da.begin(), da.end(), [](const BSDL::Domain &a, const BSDL::Domain &b){return a.start() < b.start();} ); @@ -99,17 +114,17 @@ DBCreator::cleanDA_(BSDL::DomainArrangement &da, const std::set &da, const std::string &proteinID, const std::string &proteinLength) { sort(da.begin(), da.end()); - if (this->performFiltering_) + /*if (this->performFiltering_) { std::set empty; this->cleanDA_(da, empty); - } + }*/ string id = da[0].accession(); stringstream stream; stream << std::scientific << da[0].evalue(); @@ -133,9 +148,9 @@ DBCreator::addDomainArrangement_(BSDL::DomainArrangement &da, cons void -DBCreator::readInterPro(const fs::path &interProFile, const std::set &dbNames) +DBCreator::readInterPro(const fs::path &interProFile, const std::string &includeDB) { - auto itDBEnd = dbNames.end(); + //auto itDBEnd = dbNames.end(); AlgorithmPack::Input inS; inS.open(interProFile); @@ -169,7 +184,7 @@ DBCreator::readInterPro(const fs::path &interProFile, const std::set. */ #include @@ -21,8 +36,9 @@ namespace fs = boost::filesystem; class DBCreator { private: - bool performFiltering_; - int filter_threshold_; + /*bool performFiltering_; + int filter_threshold_;*/ + // all DAs need to be stored first as they need to be sorted according to the domain arrangement // The key is a ';'seperated list of domain accessions, the value a string with of the form // protein_id length start end eval @@ -37,8 +53,8 @@ class DBCreator void static shortenEvalue_(std::string &evalue); - void - cleanDA_(BSDL::DomainArrangement &da, const std::set &querySet); + //void + //cleanDA_(BSDL::DomainArrangement &da, const std::set &querySet); /** * @brief Adds a single domain Arrangement to the database @@ -53,11 +69,11 @@ class DBCreator public: DBCreator() { - performFiltering_ = false; - filter_threshold_ = 10; + // performFiltering_ = false; + //filter_threshold_ = 10; } - void + /* void filter(bool doFilter) { performFiltering_ = doFilter; @@ -67,7 +83,7 @@ class DBCreator threshold(int t) { filter_threshold_ = t; - } + }*/ /** * @brief Reads a standard domain annotation file. @@ -86,7 +102,7 @@ class DBCreator * @param dbNames The database to include */ void - readInterPro(const fs::path &interProFile, const std::set &dbNames); + readInterPro(const fs::path &interProFile, const std::string &dbName); /** * @brief Writes the whole database to file diff --git a/src/db.cpp b/src/db.cpp deleted file mode 100644 index c5f04d2..0000000 --- a/src/db.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * db.cpp - * - * Created on: Jan 25, 2016 - * Author: ckeme_01 - * Copyright: 2016 - * - * This file is part of RADS. - * - * RADS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RADS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RADS. If not, see . - */ - -#include "db.hpp" - -using namespace std; -namespace BSDL = BioSeqDataLib; - - -void -cleanDA(BSDL::DomainArrangement &da, const std::set &querySet, unsigned int threshold) -{ - // in case of large overlaps of domains only one domain is kept. The importance by database is: Pfam, Superfamily, Smart, Prosite, Gene3dD - std::sort (da.begin(), da.end(), [](const BSDL::Domain &a, const BSDL::Domain &b){return a.start() < b.start();} ); - for (const string &keepName : querySet) - { - set toDelete; - bool changed = true; - while (changed) - { - size_t nDomains = da.size(); - for (size_t i=1; i dom2.start()+threshold) && ((dom1.accession() == keepName) || (dom2.accession() == keepName))) - { - if (dom1.accession() != dom2.accession()) - toDelete.insert(dom1.accession() == keepName ? i : i-1); - } - } - for (auto it=toDelete.rbegin(); it!=toDelete.rend(); ++it) - da.erase(da.begin() + (*it)); - - if (toDelete.empty()) - changed = false; - - toDelete.clear(); - } - } - - vector importance = {"PF", "SS", "SM", "PS", "G3"}; - for (const string &prefix : importance) - { - vector toDelete; - bool changed = true; - while (changed) - { - size_t nDomains = da.size(); - for (size_t i=1; i dom2.start()+10) && ((pre1 == prefix) || (pre2 == prefix))) - { - if (pre1 == pre2) - { - if ((dom1.end() - dom1.start()) < (dom2.end() - dom2.start())) - toDelete.push_back(i); - else - toDelete.push_back(i-1); - } - else - toDelete.push_back(pre1 == prefix ? i : i-1); - } - } - for (int i=toDelete.size()-1; i>=0; --i) - da.erase(da.begin() + toDelete[i]); - if (toDelete.empty()) - changed = false; - toDelete.clear(); - } - } -} diff --git a/src/db.hpp b/src/db.hpp deleted file mode 100644 index 62e90aa..0000000 --- a/src/db.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * db.hpp - * - * Created on: Jan 25, 2016 - * Author: ckeme_01 - * Copyright: 2016 - * - * This file is part of RADS. - * - * RADS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RADS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RADS. If not, see . - */ - -#ifndef SRC_EXTERNAL_DB_HPP_ -#define SRC_EXTERNAL_DB_HPP_ -// C++ -#include -#include -#include -#include -#include -#include - -// Boost -#include -#include - -// BSDL header -#include "../libs/BioSeqDataLib/src/DomainModule.hpp" - -// other -#include "external/SQLiteDB.hpp" - - -namespace BSDL = BioSeqDataLib; - - -void -cleanDA(BSDL::DomainArrangement &da, const std::set &querySet, unsigned int threshold); - -#endif /* SRC_EXTERNAL_DB_HPP_ */ diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index 570cfac..4ee0a31 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -38,18 +38,10 @@ // Boost #include #include -#include - -// BSDL header -#include "../libs/BioSeqDataLib/src/DomainModule.hpp" -#include "../libs/BioSeqDataLib/src/sequence/SequenceSet.hpp" -#include "../libs/BioSeqDataLib/src/utility/utility.hpp" -#include "../libs/BioSeqDataLib/src/external/Input.hpp" // other -#include "db.hpp" -#include "external/Output.hpp" #include "Version.hpp" +#include "DBCreator.hpp" using namespace std; @@ -58,42 +50,6 @@ namespace fs = boost::filesystem; namespace BSDL = BioSeqDataLib; -void -readDomainList(const fs::path &inFile, unordered_set &domainList) -{ - AlgorithmPack::Input in(inFile); - string line; - while (getline(in, line)) - domainList.emplace(line); -} - -void -readGeneList(const fs::path &inFile, unordered_set &geneList) -{ - AlgorithmPack::Input in(inFile); - string line; - while (getline(in, line)) - geneList.emplace(line); -} - - -void -shortenNumber(std::string &number) -{ - auto end = number.find('e'); - auto start = end; - if (end != std::string::npos) - { - while (number[--start] == '0'); - if (number[start] != '.') - ++start; - if (start != end) - { - number.erase(number.begin()+start, number.begin()+end); - } - } -} - int main(int argc, char *argv[]) { @@ -111,8 +67,7 @@ main(int argc, char *argv[]) fs::path interProFile; vector daFiles, seqFiles; string prefix; - unsigned int threshold; - bool filter; + po::options_description general("General options"); general.add_options() ("help,h", "Produces this help message") @@ -122,12 +77,15 @@ main(int argc, char *argv[]) ("out,o", po::value(&prefix)->required(), "The output prefix") ; - std::vector databases; + //std::vector databases; + string database; + // unsigned int threshold; + // bool filter; po::options_description filterOpts("Filter options"); filterOpts.add_options() - ("databases,d", po::value >(&databases)->multitoken(), "The database to use") - ("filter,f", po::value(&filter)->default_value(false)->zero_tokens(), "Remove overlapping domains") - ("threshold,t", po::value(&threshold)->default_value(10), "Maximal number of allowed overlap") + ("databases,d", po::value(&database)->multitoken(), "The database to use") +// ("filter,f", po::value(&filter)->default_value(false)->zero_tokens(), "Remove overlapping domains") +// ("threshold,t", po::value(&threshold)->default_value(10), "Maximal number of allowed overlap") ; allOpts.add(general).add(filterOpts); @@ -143,7 +101,7 @@ main(int argc, char *argv[]) return EXIT_SUCCESS; } - if ((!interProFile.empty()) && (databases.empty())) + if ((!interProFile.empty()) && (database.empty())) throw boost::program_options::error("Error! You need to specify the database to use when providing an InterPro file!"); if (!vm.count("InterPro") && !vm.count("input")) @@ -159,246 +117,41 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } - // open connection to database - SQLiteDB db; - db.open(fs::path(prefix + ".db")); - - // Create tables - db.exec("CREATE TABLE IF NOT EXISTS domain('id' INT PRIMARY KEY, 'accession' VARCHAR(45) NULL,'position' INT NULL)"); - db.exec("CREATE TABLE IF NOT EXISTS info('id' INT PRIMARY KEY, 'version' VARCHAR(20), 'command' VARCHAR(200) NULL)"); - db.startTransaction(); - - std::set empty; - - // The output file - try { - AlgorithmPack::Output out; - try - { - out.open(fs::path(prefix + ".da"), std::ios_base::app); - } - catch (std::exception &e) - { - cerr << "Could not open File '" << prefix << ".da': " << e.what() << "\n"; - return EXIT_FAILURE; - } - - // all DAs need to be stored first as they need to be sorted according to the domain arrangement - // The key is a ';'seperated list of domain accessions, the value a string with of the form - // protein_id length start end eval - // the start end eval are repeated for as many domains as the arrangement contains - std::map > dbContent; - - // read domain annotation files + DBCreator db; + // db.filter(filter); + // db.threshold(threshold); size_t nDaFiles = daFiles.size(); for (size_t i=0; i domSet; - domSet.read(daFiles[i]); - - // sequences are only needed for the protein length. - BSDL::SequenceSet> seqSet; if (!seqFiles.empty()) - seqSet.read(seqFiles[i]); - - std::map seqLengths; - for (auto &seq : seqSet) - seqLengths[seq.name()] = seq.size(); - - // read each sequence seperately - for (auto pair : domSet) - { - auto da = pair.second; - - size_t nDomains = da.size(); - sort(da.begin(), da.end()); - if (filter) - cleanDA(da, empty, threshold); - - string id = da[0].accession(); - stringstream stream; - stream << std::scientific << da[0].evalue(); - string eval = stream.str(); - shortenNumber(eval); - string length = seqFiles.empty() ? "0" : to_string(seqLengths[pair.first]); - string positions = pair.first + " " + length + " " + to_string(da[0].start()) + " " + to_string(da[0].end()) + " " + eval; - nDomains = da.size(); - for (size_t i=1; i dbSupported; + /*set dbSupported; for (auto &db : databases) - dbSupported.emplace(std::move(db)); - auto itDBEnd = dbSupported.end(); - - AlgorithmPack::Input inS; - try - { - inS.open(interProFile); - } - catch (std::exception &e) - { - cerr << "Could not open File '" << interProFile << "': " << e.what() << "\n"; - return EXIT_FAILURE; - } - - string line; - bool insertThisDomain = false; - string protein, length; - - BSDL::DomainArrangement da; - string domainAcc; - string dbName; - - // parse interpro annotation of uniprot - boost::regex protIDre("protein id=\"([^\"]+)\".*length=\"([0-9]+)\""); - boost::regex dbRe(" m; - - while (getline(inS, line)) - { - // identify protein - if (boost::regex_search(line, m, protIDre)) - { - protein = string(m[1].first, m[1].second); - length = string(m[2].first, m[2].second); - } - else - { - // identify domain - if (boost::regex_search (line, m, dbRe)) - { - string dom(m[1].first, m[1].second); - string database(m[2].first, m[2].second); - if (dbSupported.find(database) != itDBEnd) - { - domainAcc = dom; - dbName = database; - insertThisDomain = true; - } - else - insertThisDomain = false; - } - else - { - // get positions of domain - if (insertThisDomain) - { - if (boost::regex_search (line, m, positionsRe)) - { - string start(m[1].first, m[1].second); - string end(m[2].first, m[2].second); - string score(m[3].first, m[3].second); - da.emplace_back(domainAcc, stoul(start), stoul(end), stod(score)); - } - } - // end of protein, store in dbContent - if ((line.find("") != string::npos) && (!da.empty())) - { - sort(da.begin(), da.end()); - if (filter) - cleanDA(da, empty, threshold); - string id = da[0].accession(); - stringstream stream; - stream << std::scientific << da[0].evalue(); - string eval = stream.str(); - shortenNumber(eval); - string positions = protein + " " + length + " " + to_string(da[0].start()) + " " + to_string(da[0].end()) + " " + eval; - size_t nDomains = da.size(); - for (size_t i=1; i doms; - for (auto &token : tokens) - doms.insert(token); - for (auto &token : doms) - db.exec("INSERT INTO domain VALUES(NULL,'"+ token + "','" + to_string(filePos) + "')"); - nSeqs += arrangements.second.size(); - - out << ">" << arrangements.first << "\n"; - for (auto arrangement : arrangements.second) - out << arrangement << "\n"; + dbSupported.emplace(std::move(db));*/ + db.readInterPro(interProFile, database); } - out.close(); - db.endTransaction(); - db.exec("CREATE INDEX IF NOT EXISTS domIdx ON domain(accession)"); - cout << "Number of sequences included: " << nSeqs << "\n"; - cout << "Number of distinct arrangements " << dbContent.size() << "\n"; + // output + std::map info; + info["version"] = version; + info["command"] = input_command; + auto written = db.write(prefix, info); - /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - return EXIT_SUCCESS; + cout << "Number of sequences included: " << written.first << "\n"; + cout << "Number of distinct arrangements " << written.second << "\n"; + } + catch(const std::ifstream::failure &e) + { + std::cerr << "An error occurred: " << e.what() << "\n"; + return EXIT_FAILURE; } catch(const std::exception &e) { @@ -406,6 +159,7 @@ main(int argc, char *argv[]) std::cerr << "\nRADS: " + version << "\n"; std::cerr << "If you believe the error above occured due to a bug in the program, please contact the developer (domainworld@uni-muenster.de). " "It would be very kind if you could include the used commandline, the complete error message and if possible a small input example that replicates the error." << "\n"; + return EXIT_FAILURE; } - + return EXIT_SUCCESS; } diff --git a/src/rads.cpp b/src/rads.cpp index 70f658a..036b755 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -2,10 +2,24 @@ * main.cpp * * Created on: Sep 23, 2015 - * Author: ckeme_01 + * Author: Carsten Kemena + * + * This file is part of RADS. + * + * RADS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RADS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RADS. If not, see . */ - // C++ #include #include @@ -36,9 +50,9 @@ #include "../libs/BioSeqDataLib/src/external_interfaces/domainProgs.hpp" // other +#include "DBAccess.hpp" #include "Version.hpp" -#include "db.hpp" - +#include "external/SQLiteDB.hpp" using namespace std; using std::chrono::system_clock; @@ -46,191 +60,19 @@ namespace po = boost::program_options; namespace fs = boost::filesystem; namespace BSDL = BioSeqDataLib; - -std::mutex writeMutex; - - -struct Result -{ - string targetName; - int score; - double normalized; - size_t length; - - Result(string t, int s, double n, size_t l) : targetName(t), score(s), normalized(n), length(l) - {} - - bool operator<(const Result& rhs) const - { - return score < rhs.score; - } - - bool operator>(const Result& rhs) const - { - return score > rhs.score; - } -}; - - -/** - * \brief Performs a search for a single domain arrangement - * \param queryDA The domain arrngement to nbe used as query - * \param sb The database to use - * \param daFile the domain arrangement file - * \param gop Gap opening files - * \param gep Gap extension costs - * \param all All domains are required - * \param scoreThres The minimum score an alignment should have to be reported - * \param simMat The similarity matrix - * \param matrix The marix used for the alignment - * \param outS the ouput file - */ -void -runSearch(const std::pair > queryDA, SQLiteDB &db, fs::path daFile, bool all, int scoreThres, BSDL::AlignmentMatrix &matrix, AP::Output &outS) -{ - // get the positions of all domain arrangments that contain at least one of the domains in question - string query = "Select position from domain where accession in ('" + queryDA.second[0].accession() + "'"; - size_t nDomains = queryDA.second.size(); - for (size_t i=1; i positions; - auto storePositions = std::bind([](sqlite3_stmt *stmt, std::set &positions){positions.emplace(stoul(reinterpret_cast(sqlite3_column_text(stmt, 0))));}, std::placeholders::_1, std::ref(positions)); - db.exec(query, storePositions); - - std::set queryDomSet; - for (const auto &domain : queryDA.second) - queryDomSet.insert(domain.accession()); - size_t queryLength = queryDA.second.size(); - - // read the arrangements from file - BSDL::DomainArrangementSet targetDAs; - string line; - AlgorithmPack::Input in(daFile); - std::multiset > results; - for (auto &pos : positions) - { - // get the domain arrangement at the given position - in.seekg(pos, std::ios_base::beg); - getline(in, line); - auto domains = BSDL::split(line, ">;"); - size_t nDomains = domains.size(); - BSDL::DomainArrangement targetDA; - for (auto &domain : domains) - targetDA.emplace_back(domain, 0, 0, 0); - - // if all domains are required check for that - if (all) - { - bool containsAll = true; - auto counts = BSDL::domainCounts(targetDA); - for (auto &dom: queryDomSet) - { - if (counts.count(dom)==0) - { - containsAll = false; - break; - } - } - // if not all domains are found, go on to next domain arrangement - if (!containsAll) - continue; - } - - // calculate score for the domain arrangement - int score; - double normScore; - try - { - - size_t targetLength = targetDA.size(); - matrix.gotoh(queryDA.second, targetDA); - score = matrix.score();// (matrix[0][queryLength][targetLength]).first; - if (score < scoreThres) - continue; - int minScore = (queryLength+targetLength) * matrix.gep(); - normScore = min((score-minScore)*1.0/(queryLength*100-minScore),(score-minScore)*1.0/(targetLength*100-minScore)); - } - catch (std::exception &e) - { - cout << "An error occurred for sequence'" << queryDA.first << " when aligning with DA " << line << "': " << e.what() << "\n"; - } - - // read all sequences having the same domain arrangement - while(getline(in, line)) - { - if (line[0] =='>') - break; - - const char *c_line = line.c_str(); - size_t pos = line.find(' '); - string name(line.begin(), line.begin()+pos); - char *tmp; - c_line += pos; - auto daIt = targetDAs.emplace(name, BSDL::DomainArrangement()); - - results.emplace(name, score, normScore, strtoul(c_line, &tmp, 10)); - size_t start, end; - double eval; - c_line = tmp; - for (size_t i=0; isecond.emplace_back(domains[i], start, end, eval); - } - } - } - - // results are written to a buffer first to reduce time in critical section - std::stringstream buf; - buf << "# -------------------------------------------------------------------\n"; - buf << "Results for: " << queryDA.first << "\n"; - buf << "Domain arrangement:"; - for (auto const domain : queryDA.second) - buf << " " << domain.accession(); - buf << "\n\n"; - - buf << "# score | normalized | SeqID | sequence length | domain arrangement\n"; - buf << "# -------------------------------------------------------------------\n"; - buf.setf(ios::fixed, ios::floatfield); - buf.precision(2); - for (auto &x : results) - { - buf << x.score << "\t" << x.normalized << "\t" << x.targetName << "\t" << x.length << "\t"; - const auto &da = targetDAs[x.targetName]; - size_t len = da.size(); - buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); - for (size_t i = 1; i q, domains; unsigned short nThreads; po::options_description general("General options"); general.add_options() ("help,h", "Produces this help message") - ("db,d", po::value(&prefix)->required(), "The database prefix") + ("db,d", po::value(&prefix)->required(), "The database prefix") ("out,o", po::value(&outFile)->value_name("FILE"), "The output file") ("threads,n", po::value(&nThreads)->default_value(1), "The number of threads to use") ; @@ -295,18 +137,6 @@ main(int argc, char *argv[]) BSDL::Settings settings; settings.readSettings(); - // open connection to database - SQLiteDB db; - try - { - db.open(prefix + ".db", SQLITE_OPEN_READONLY); - } - catch (std::exception &e) - { - cerr << "Unable to open database '" << prefix << ".db':" << e.what() << endl; - return EXIT_FAILURE; - } - // get settings if ( !boost::filesystem::exists(matrixName) ) { @@ -330,7 +160,7 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } - simMat.useNegative(true); + DBAccess db(prefix, matrixName); BSDL::DomainArrangementSet querySet; //read query arrangement @@ -351,10 +181,12 @@ main(int argc, char *argv[]) querySet.emplace("manual entered query", da); } + + AP::Output outS(outFile); - fs::path daFile(prefix + ".da"); + fs::path daFile = prefix; + daFile.replace_extension(".da"); vector > matrices; - //vector< BSDL::MatrixStack<3, std::pair > > matrices; for (unsigned short i=0; i > results; + db.search(it->second, matrices[omp_get_thread_num()], all, minScore, results); + + // results are written to a buffer first to reduce time in critical section + std::stringstream buf; + buf << "# -------------------------------------------------------------------\n"; + buf << "Results for: " << it->first << "\n"; + buf << "Domain arrangement:"; + for (auto const domain : it->second) + buf << " " << domain.accession(); + buf << "\n\n"; + + buf << "# score | normalized | SeqID | sequence length | domain arrangement\n"; + buf << "# -------------------------------------------------------------------\n"; + buf.setf(ios::fixed, ios::floatfield); + buf.precision(2); + for (auto &result : results) + { + const auto &hit = result.second; + buf << result.first << "\t" << hit.normalized << "\t" << hit.targetName << "\t" << hit.length << "\t"; + const auto &da = hit.da; + size_t len = da.size(); + buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); + for (size_t i = 1; i + + + + + + + + + + + + + + + + + + @@ -55,7 +73,7 @@ - + @@ -64,4 +82,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index 352ba06..b9aec40 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -55,5 +55,5 @@ run diff <(grep -v '#' test3Res.txt) <(grep -v '#' results/test3Res.txt) [ $status == 0 ] - rm interPro-test.db interPro-test.da + #rm interPro-test.db interPro-test.da } diff --git a/tests/unitTests/db_Test.hpp b/tests/unitTests/db_Test.hpp index 792c4c4..72266e9 100644 --- a/tests/unitTests/db_Test.hpp +++ b/tests/unitTests/db_Test.hpp @@ -23,7 +23,7 @@ #include -#include "../../src/db.hpp" +//#include "../../src/db.hpp" #include "../../libs/BioSeqDataLib/src/DomainModule.hpp" #ifndef DB_TEST_HPP_ @@ -32,7 +32,7 @@ BOOST_AUTO_TEST_SUITE(DB_Test) namespace BSDL=BioSeqDataLib; - +/* BOOST_AUTO_TEST_CASE( cleanDA_TEST) { BSDL::DomainArrangement da; @@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE( cleanDA_TEST) BOOST_CHECK_EQUAL(da2[0].accession(), "SSF56235"); BOOST_CHECK_EQUAL(da2[1].accession(), "PF00733"); -} +}*/ -- GitLab From 29002f008229d02e0f6d026a8c896606978c1e55 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Thu, 19 Apr 2018 17:15:06 +0200 Subject: [PATCH 03/24] removed unused header and added comments --- src/DBAccess.hpp | 37 ++++++++++++++++++++++++++---- src/makeRadsDB.cpp | 2 +- src/rads.cpp | 6 ----- tests/integrationTests/runTests.sh | 4 +++- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index 758a832..caaf5f3 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -54,25 +54,52 @@ struct RadsHit class DBAccess { private: - SQLiteDB index_; - AlgorithmPack::Input arrangementDB_; - BSDL::DSM similarityMatrix_; + SQLiteDB index_; // The object used to connect to the sqlite database. + AlgorithmPack::Input arrangementDB_; // The file object containing the domain arrangements + BSDL::DSM similarityMatrix_; // The similarity matrix to be used. public: + /** + * @brief Construct a new DBAccess object + * + */ DBAccess() {} + /** + * @brief Construct a new DBAccess object + * + * @param prefix The prefix of the database path. + * @param matrix The filename of the DSM to be used. + */ DBAccess(const fs::path &prefix, const fs::path&matrix); + /** + * @brief Opens the database + * + * @param prefix The prefix of the database to open. + */ void open(const fs::path &prefix); + /** + * @brief Set the Matrix object to be used for the alignment. + * + * @param matrix The filename of the DSM to be used. + */ void setMatrix(const fs::path &matrix); + /** + * @brief Searches in the database for matching sequences. + * + * @param query The query domain arrangement. + * @param matrix The alignment matrix. + * @param all true if all domain types have to occur in the target DA. + * @param scoreThres The minimal score for a target to be reported. + * @param results The results sorted by score + */ void search(const BSDL::DomainArrangement &query, BSDL::AlignmentMatrix &matrix, bool all, int scoreThres, std::multimap > &results); - - }; diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index 4ee0a31..d5f5341 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -83,7 +83,7 @@ main(int argc, char *argv[]) // bool filter; po::options_description filterOpts("Filter options"); filterOpts.add_options() - ("databases,d", po::value(&database)->multitoken(), "The database to use") + ("databases,d", po::value(&database), "The database to use") // ("filter,f", po::value(&filter)->default_value(false)->zero_tokens(), "Remove overlapping domains") // ("threshold,t", po::value(&threshold)->default_value(10), "Maximal number of allowed overlap") ; diff --git a/src/rads.cpp b/src/rads.cpp index 036b755..7743d22 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -22,16 +22,11 @@ // C++ #include -#include -#include #include -#include #include #include -#include #include #include -#include #include #include @@ -52,7 +47,6 @@ // other #include "DBAccess.hpp" #include "Version.hpp" -#include "external/SQLiteDB.hpp" using namespace std; using std::chrono::system_clock; diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index b9aec40..ff43f06 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -34,6 +34,7 @@ run ../../build/rads -h [ $status == 0 ] + rm test1Res.txt testQuerySeq.txt rm interPro.db interPro.da } @@ -55,5 +56,6 @@ run diff <(grep -v '#' test3Res.txt) <(grep -v '#' results/test3Res.txt) [ $status == 0 ] - #rm interPro-test.db interPro-test.da + rm interPro-test.db interPro-test.da + rm test3Res.txt test2Res.txt } -- GitLab From 1e45b525aff3a819568ae95e85f398ec1e170f96 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 20 Apr 2018 14:23:17 +0200 Subject: [PATCH 04/24] [RADS] added collapse options --- src/DBAccess.cpp | 15 +++---- src/DBAccess.hpp | 43 +++++++++++++++++-- src/DBCreator.hpp | 6 +++ src/rads.cpp | 12 ++++-- tests/data/match_small2.xml | 17 +++++++- tests/integrationTests/results/test3Res.txt | 9 +++- tests/integrationTests/results/test4Res.txt | 25 +++++++++++ tests/integrationTests/runTests.sh | 8 +++- .../{db_Test.hpp => DBAccess_Test.hpp} | 5 +++ tests/unitTests/tests.cpp | 2 +- 10 files changed, 122 insertions(+), 20 deletions(-) create mode 100644 tests/integrationTests/results/test4Res.txt rename tests/unitTests/{db_Test.hpp => DBAccess_Test.hpp} (98%) diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index 6019800..fe12a11 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -52,8 +52,8 @@ void DBAccess::open(const fs::path &prefix) void -DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::AlignmentMatrix &matrix, bool all, int scoreThres, - std::multimap > &results) +DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, + std::multimap, RadsHit, comparePairs > &results) { string query = "Select position from domain where accession in ('" + queryDA[0].accession() + "'"; size_t nDomains = queryDA.size(); @@ -71,7 +71,6 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali size_t queryLength = queryDA.size(); // read the arrangements from file - //BSDL::DomainArrangementSet targetDAs; string line; for (auto &pos : positions) { @@ -106,6 +105,10 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali int score; double normScore; size_t targetLength = targetDA.size(); + int order = targetDA.size(); + if (collapse) + targetDA.collapse(true); + order -= targetDA.size(); matrix.gotoh(queryDA, targetDA); score = matrix.score(); if (score < scoreThres) @@ -124,9 +127,7 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali string name(line.begin(), line.begin()+pos); char *tmp; c_line += pos; - //auto daIt = targetDAs.emplace(name, BSDL::DomainArrangement()); - - auto hitIt = results.emplace(std::piecewise_construct, std::forward_as_tuple(score), std::forward_as_tuple(name, normScore, strtoul(c_line, &tmp, 10))); + auto hitIt = results.emplace(std::piecewise_construct, std::forward_as_tuple(score, order), std::forward_as_tuple(name, normScore, strtoul(c_line, &tmp, 10))); size_t start, end; double eval; c_line = tmp; @@ -142,6 +143,4 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali } } } - /*RadsHit x; - x.target_name;*/ } diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index caaf5f3..7da022a 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -20,6 +20,9 @@ * along with RADS. If not, see . */ +#ifndef DBACCESS_HPP +#define DBACCESS_HPP + #include // BioSeqDataLib @@ -34,10 +37,29 @@ namespace BSDL = BioSeqDataLib; namespace fs = boost::filesystem; +/* +struct RadsOptions +{ + enum Algorithm + { + NW, NW_RASPODOM, GOTOH, GOTOH_RASPODOM + }; + + // scoring options + BSDL::DSM similarityMatrix; + int gop; + int gep; + + // domain content options + bool all; + bool collapse; + + Algorithm algo; +};*/ + struct RadsHit { - std::string targetName; double normalized; size_t length; @@ -51,6 +73,7 @@ struct RadsHit }; + class DBAccess { private: @@ -59,6 +82,16 @@ class DBAccess BSDL::DSM similarityMatrix_; // The similarity matrix to be used. public: + + struct comparePairs { + bool operator()(const std::pair& lhs, const std::pair& rhs) + { + if (lhs.first != rhs.first) + return lhs.first > rhs.first; + else + return lhs.second < rhs.second; + } + }; /** * @brief Construct a new DBAccess object * @@ -100,6 +133,10 @@ class DBAccess * @param results The results sorted by score */ void - search(const BSDL::DomainArrangement &query, BSDL::AlignmentMatrix &matrix, bool all, int scoreThres, - std::multimap > &results); + search(const BSDL::DomainArrangement &query, BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, + std::multimap, RadsHit, comparePairs > &results); + }; + + +#endif diff --git a/src/DBCreator.hpp b/src/DBCreator.hpp index d26cf7a..43a1fb9 100644 --- a/src/DBCreator.hpp +++ b/src/DBCreator.hpp @@ -20,6 +20,10 @@ * along with RADS. If not, see . */ + +#ifndef DBCREATOR_HPP +#define DBCREATOR_HPP + #include #include #include @@ -115,3 +119,5 @@ class DBCreator write(const fs::path &prefix, const std::map &info); }; + +#endif diff --git a/src/rads.cpp b/src/rads.cpp index 7743d22..8324be8 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -29,7 +29,6 @@ #include #include #include - #include // Boost @@ -89,10 +88,12 @@ main(int argc, char *argv[]) ; bool all; + bool collapse; int minScore; po::options_description filterOpts("Result filtering options"); filterOpts.add_options() ("all,a", po::value(&all)->default_value(false)->zero_tokens(), "All domain types need to occur") + ("collapse,c", po::value(&collapse)->default_value(false)->zero_tokens(), "Collapse consecutive identical domains") ("min-score,M", po::value(&minScore)->default_value(0), "The minimum alignment score to list") ; @@ -147,6 +148,7 @@ main(int argc, char *argv[]) try { simMat.read(matrixName); + simMat.useNegative(true); } catch (std::exception &e) { @@ -201,6 +203,8 @@ main(int argc, char *argv[]) << "# gap open penalty " << std::to_string(gop) << "\n" << "# gap extension penalty " << std::to_string(gep) << "\n" << "# matrix: " << print_matrix_name << "\n" + << "# all: " << (all ? "true" : "false") << "\n" + << "# collapse: " << (collapse ? "true" : "false") << "\n" << "# ******************************************************************\n" << "\n"; @@ -212,8 +216,8 @@ main(int argc, char *argv[]) auto it=querySet.begin(); for (size_t j=0; j > results; - db.search(it->second, matrices[omp_get_thread_num()], all, minScore, results); + std::multimap, RadsHit, DBAccess::comparePairs > results; + db.search(it->second, matrices[omp_get_thread_num()], all, collapse, minScore, results); // results are written to a buffer first to reduce time in critical section std::stringstream buf; @@ -231,7 +235,7 @@ main(int argc, char *argv[]) for (auto &result : results) { const auto &hit = result.second; - buf << result.first << "\t" << hit.normalized << "\t" << hit.targetName << "\t" << hit.length << "\t"; + buf << result.first.first << "\t" << hit.normalized << "\t" << hit.targetName << "\t" << hit.length << "\t"; const auto &da = hit.da; size_t len = da.size(); buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); diff --git a/tests/data/match_small2.xml b/tests/data/match_small2.xml index 5b34eeb..4a69790 100644 --- a/tests/data/match_small2.xml +++ b/tests/data/match_small2.xml @@ -52,7 +52,7 @@ - + @@ -94,4 +94,19 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/integrationTests/results/test3Res.txt b/tests/integrationTests/results/test3Res.txt index f74603e..a7d401f 100644 --- a/tests/integrationTests/results/test3Res.txt +++ b/tests/integrationTests/results/test3Res.txt @@ -1,10 +1,14 @@ -# RADS version 2.1.2 +# RADS version 2.2.0 # RADS Output v1 -# run at Thu Mar 1 17:11:58 2018 +# run at Fri Apr 20 13:50:57 2018 # # query file: - # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro-test +# gap open penalty -50 +# gap extension penalty -10 # matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: false # ****************************************************************** # ------------------------------------------------------------------- @@ -16,5 +20,6 @@ Domain arrangement: PF00001 PF00002 PF00003 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 +170 0.64 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 diff --git a/tests/integrationTests/results/test4Res.txt b/tests/integrationTests/results/test4Res.txt new file mode 100644 index 0000000..2cf8e4b --- /dev/null +++ b/tests/integrationTests/results/test4Res.txt @@ -0,0 +1,25 @@ +# RADS version 2.2.0 +# RADS Output v1 +# run at Fri Apr 20 14:19:09 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro-test +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: true +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF00001 PF00002 PF00003 + +# score | normalized | SeqID | sequence length | domain arrangement +# ------------------------------------------------------------------- +300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 +300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 +190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 +190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 + + diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index ff43f06..372ee73 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -55,7 +55,13 @@ run diff <(grep -v '#' test3Res.txt) <(grep -v '#' results/test3Res.txt) [ $status == 0 ] + + run ../../build/rads -D PF00001 PF00002 PF00003 -m pfam-31.dsm -d interPro-test -o test4Res.txt -c + [ $status == 0 ] + + run diff <(grep -v '#' test4Res.txt) <(grep -v '#' results/test4Res.txt) + [ $status == 0 ] rm interPro-test.db interPro-test.da - rm test3Res.txt test2Res.txt + rm test3Res.txt test2Res.txt test4Res.txt } diff --git a/tests/unitTests/db_Test.hpp b/tests/unitTests/DBAccess_Test.hpp similarity index 98% rename from tests/unitTests/db_Test.hpp rename to tests/unitTests/DBAccess_Test.hpp index 72266e9..9a20eb5 100644 --- a/tests/unitTests/db_Test.hpp +++ b/tests/unitTests/DBAccess_Test.hpp @@ -32,6 +32,11 @@ BOOST_AUTO_TEST_SUITE(DB_Test) namespace BSDL=BioSeqDataLib; + +BOOST_AUTO_TEST_CASE( cleanDA_TEST) +{ + +} /* BOOST_AUTO_TEST_CASE( cleanDA_TEST) { diff --git a/tests/unitTests/tests.cpp b/tests/unitTests/tests.cpp index 119ab3f..c8c5097 100644 --- a/tests/unitTests/tests.cpp +++ b/tests/unitTests/tests.cpp @@ -29,5 +29,5 @@ #include -#include "db_Test.hpp" +#include "DBAccess_Test.hpp" -- GitLab From e99789e78398bc3155ab6d50947a5bb1b36d6c5b Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 27 Apr 2018 16:56:34 +0200 Subject: [PATCH 05/24] improving options --- manual/manual.pdf | Bin 92701 -> 93605 bytes manual/manual.tex | 56 +++++++++++++++++++++++++++++----------------- src/rads.cpp | 11 +++++---- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/manual/manual.pdf b/manual/manual.pdf index 9a42517bece96c9905b1d9f907c378c4bc0597a3..bc506669e99063c314c2b5165932dc94e87446a0 100644 GIT binary patch delta 72546 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
2G6vA23)j$gB9F;-P8~;>gMvYjM&g& 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

rpb-LHbRnwQ0lT|)Yx+-@ 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 u>$D!(&matrixName)->value_name("FILE"), "The domain similarity matrix") ("gop", po::value(&gop)->default_value(-50)->value_name("INT"), "Gap opening costs") ("gep", po::value(&gep)->default_value(-10)->value_name("INT"), "Gap extension costs") + ("collapse,c", po::value(&collapse)->default_value(false)->zero_tokens(), "Collapse consecutive identical domains") ; bool all; - bool collapse; int minScore; po::options_description filterOpts("Result filtering options"); filterOpts.add_options() ("all,a", po::value(&all)->default_value(false)->zero_tokens(), "All domain types need to occur") - ("collapse,c", po::value(&collapse)->default_value(false)->zero_tokens(), "Collapse consecutive identical domains") ("min-score,M", po::value(&minScore)->default_value(0), "The minimum alignment score to list") ; @@ -177,9 +177,7 @@ main(int argc, char *argv[]) querySet.emplace("manual entered query", da); } - - - AP::Output outS(outFile); + // calculate results fs::path daFile = prefix; daFile.replace_extension(".da"); vector > matrices; @@ -190,11 +188,12 @@ main(int argc, char *argv[]) std::time_t tt; tt = system_clock::to_time_t(today); + // Write results string qPath = querySeqFile.empty() ? "-" : fs::canonical(querySeqFile).string(); - string print_matrix_name = (print_filename_only) ? matrixName.stem().string() : fs::canonical(matrixName).string(); string print_db_name = (print_filename_only) ? prefix.stem().string() : fs::canonical(daFile).replace_extension("").string(); // print output header + AP::Output outS(outFile); outS << "# RADS version " + version + "\n" << "# RADS Output v1\n" << "# run at " << ctime (&tt) << "#\n" -- GitLab From ac2e56d36451cb8fad0a4dfd8a577057c8bb1ccf Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Thu, 14 Jun 2018 10:31:41 +0200 Subject: [PATCH 06/24] started alignment output --- src/DBAccess.hpp | 9 +++++++++ src/rads.cpp | 5 +++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index 7da022a..fada9f6 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -58,6 +58,15 @@ struct RadsOptions };*/ +struct RadsQueryResult +{ + BSDL::DomainArrangement queryDA; + std::string alnString1; + std::string alnString2; + + +}; + struct RadsHit { std::string targetName; diff --git a/src/rads.cpp b/src/rads.cpp index 389499b..3f5ac1e 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -57,7 +57,7 @@ int main(int argc, char *argv[]) { std::string version(std::string(STR(MAJOR_VERSION)) + "." + std::string(STR(MINOR_VERSION)) + "." + std::string(STR(PATCH_VERSION)) ); - fs::path queryDomainFile, querySeqFile, outFile, domainDB; + fs::path queryDomainFile, querySeqFile, outFile, domainDB, alignmentFile; fs::path prefix; vector q, domains; @@ -67,6 +67,7 @@ main(int argc, char *argv[]) ("help,h", "Produces this help message") ("db,d", po::value(&prefix)->required(), "The database prefix") ("out,o", po::value(&outFile)->value_name("FILE"), "The output file") + ("alignments,a", po::value(&alignmentFile)->value_name("FILE"), "File to write the alignments into") ("threads,n", po::value(&nThreads)->default_value(1), "The number of threads to use") ; @@ -143,7 +144,6 @@ main(int argc, char *argv[]) domainDB = settings["pfam_db"]; } - BioSeqDataLib::DSM simMat; try { @@ -231,6 +231,7 @@ main(int argc, char *argv[]) buf << "# -------------------------------------------------------------------\n"; buf.setf(ios::fixed, ios::floatfield); buf.precision(2); + for (auto &result : results) { const auto &hit = result.second; -- GitLab From ed735a1dfe71bc757de28ce28865b5582d168d4b Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 22 Jun 2018 17:07:37 +0200 Subject: [PATCH 07/24] adding alignment information - changed storing the results in logcial structs - adapted test to slightly different order --- libs/BioSeqDataLib | 2 +- src/DBAccess.cpp | 31 ++++++--- src/DBAccess.hpp | 70 ++++++++++++++++----- src/DBCreator.hpp | 2 +- src/rads.cpp | 38 ++++++----- tests/integrationTests/results/test4Res.txt | 6 +- 6 files changed, 102 insertions(+), 47 deletions(-) diff --git a/libs/BioSeqDataLib b/libs/BioSeqDataLib index cada623..9e07b28 160000 --- a/libs/BioSeqDataLib +++ b/libs/BioSeqDataLib @@ -1 +1 @@ -Subproject commit cada6232b356db742926226965626bb7a567eb37 +Subproject commit 9e07b28bc1fa57600877d964f7aea8bc740aedac diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index fe12a11..46c3ea5 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -22,6 +22,7 @@ #include "DBAccess.hpp" + using namespace std; DBAccess::DBAccess(const fs::path &prefix, const fs::path &matrix) @@ -52,9 +53,10 @@ void DBAccess::open(const fs::path &prefix) void -DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, - std::multimap, RadsHit, comparePairs > &results) +DBAccess::search(BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, + RadsQueryResult &results) { + auto &queryDA = results.queryDA; string query = "Select position from domain where accession in ('" + queryDA[0].accession() + "'"; size_t nDomains = queryDA.size(); for (size_t i=1; i &queryDA, BSDL::Ali } // calculate score for the domain arrangement - int score; - double normScore; size_t targetLength = targetDA.size(); int order = targetDA.size(); if (collapse) targetDA.collapse(true); order -= targetDA.size(); matrix.gotoh(queryDA, targetDA); - score = matrix.score(); + int score = matrix.score(); if (score < scoreThres) continue; + + // Store information in the Results int minScore = (queryLength+targetLength) * matrix.gep(); - normScore = min((score-minScore)*1.0/(queryLength*100-minScore),(score-minScore)*1.0/(targetLength*100-minScore)); - - // read all sequences having the same domain arrangement + double normScore = min((score-minScore)*1.0/(queryLength*100-minScore),(score-minScore)*1.0/(targetLength*100-minScore)); + auto aln = matrix.result(); + auto alnStrings = aln.alnStrings(queryDA, targetDA); + results.targets.emplace_back(std::move(targetDA), std::move(alnStrings.first), std::move(alnStrings.second), score, normScore); + + // add all sequences having the same domain arrangement while(getline(this->arrangementDB_, line)) { if (line[0] =='>') @@ -127,7 +132,8 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali string name(line.begin(), line.begin()+pos); char *tmp; c_line += pos; - auto hitIt = results.emplace(std::piecewise_construct, std::forward_as_tuple(score, order), std::forward_as_tuple(name, normScore, strtoul(c_line, &tmp, 10))); + results.targets.back().targetSequences.emplace_back(std::move(name), strtoul(c_line, &tmp, 10), order); + auto &da = results.targets.back().targetSequences.back().da; size_t start, end; double eval; c_line = tmp; @@ -139,8 +145,13 @@ DBAccess::search(const BSDL::DomainArrangement &queryDA, BSDL::Ali c_line = tmp; eval = strtod(c_line, &tmp); c_line = tmp; - hitIt->second.da.emplace_back(domains[i], start, end, eval); + da.emplace_back(domains[i], start, end, eval); } } + std::sort(results.targets.back().targetSequences.begin(), results.targets.back().targetSequences.end(), [](const TargetSequence &a, const TargetSequence &b) -> bool + { + return a.order < b.order; + }); } + results.sort(); } diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index fada9f6..4d12760 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -23,6 +23,8 @@ #ifndef DBACCESS_HPP #define DBACCESS_HPP +#include +#include #include // BioSeqDataLib @@ -57,28 +59,62 @@ struct RadsOptions Algorithm algo; };*/ - -struct RadsQueryResult +/** + * \brief Represents a single target sequence + */ +struct TargetSequence { - BSDL::DomainArrangement queryDA; - std::string alnString1; - std::string alnString2; - + std::string targetName; /// The sequence name + size_t length; /// The sequence length + int order; + BSDL::DomainArrangement da; /// The domain arrangement + + TargetSequence() : targetName(""), length(0), order(0) + {} + + TargetSequence(std::string t, size_t l, int o) : targetName(t), length(l), order(o) + {} }; +/** + * \brief A RADS hit representing a domain arrangement and all its sequences + */ struct RadsHit { - std::string targetName; - double normalized; - size_t length; - BSDL::DomainArrangement da; + BSDL::DomainArrangement da; /// The domain arrangement + std::string alnStringQuery; /// Alignment string of the query + std::string alnStringTarget; /// Alignment string og the target + + int score; /// Score of the alignment + double normalized; /// normalized score of the alignment + + std::vector targetSequences; /// The set of sequences having this arrangement - RadsHit() : targetName(""), normalized(0), length(0) + RadsHit(BSDL::DomainArrangement &&d, std::string &&alnStringQ, std::string &&alnStringT, int s, double n): + da(std::move(d)), alnStringQuery(std::move(alnStringQ)), alnStringTarget(std::move(alnStringT)), score(s), normalized(n) {} +}; - RadsHit(std::string t, double n, size_t l) : targetName(t), normalized(n), length(l) - {} + + +/** + * \brief Complete set of targets for the given query + */ +struct RadsQueryResult +{ + std::string queryName; + BSDL::DomainArrangement queryDA; /// The query + std::vector targets; + + void + sort() + { + std::sort(this->targets.begin(), this->targets.end(), [](const RadsHit &a, const RadsHit &b) -> bool + { + return a.score > b.score; + }); + } }; @@ -92,7 +128,7 @@ class DBAccess public: - struct comparePairs { + /* struct comparePairs { bool operator()(const std::pair& lhs, const std::pair& rhs) { if (lhs.first != rhs.first) @@ -100,7 +136,7 @@ class DBAccess else return lhs.second < rhs.second; } - }; + };*/ /** * @brief Construct a new DBAccess object * @@ -142,8 +178,8 @@ class DBAccess * @param results The results sorted by score */ void - search(const BSDL::DomainArrangement &query, BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, - std::multimap, RadsHit, comparePairs > &results); + search(BSDL::AlignmentMatrix &matrix, bool all, bool collapse, int scoreThres, + RadsQueryResult &results); }; diff --git a/src/DBCreator.hpp b/src/DBCreator.hpp index 43a1fb9..46260f5 100644 --- a/src/DBCreator.hpp +++ b/src/DBCreator.hpp @@ -97,7 +97,7 @@ class DBCreator * @param sequenceFile The sequence file */ void - readAnnotationFile(const fs::path &annotationFile, const fs::path &sequenceFile=0); + readAnnotationFile(const fs::path &annotationFile, const fs::path &sequenceFile=""); /** * @brief Reads the interpro file. diff --git a/src/rads.cpp b/src/rads.cpp index 3f5ac1e..d5cda2f 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -67,7 +67,7 @@ main(int argc, char *argv[]) ("help,h", "Produces this help message") ("db,d", po::value(&prefix)->required(), "The database prefix") ("out,o", po::value(&outFile)->value_name("FILE"), "The output file") - ("alignments,a", po::value(&alignmentFile)->value_name("FILE"), "File to write the alignments into") + ("alignments,f", po::value(&alignmentFile)->value_name("FILE"), "File to write the alignments into") ("threads,n", po::value(&nThreads)->default_value(1), "The number of threads to use") ; @@ -192,6 +192,7 @@ main(int argc, char *argv[]) string qPath = querySeqFile.empty() ? "-" : fs::canonical(querySeqFile).string(); string print_matrix_name = (print_filename_only) ? matrixName.stem().string() : fs::canonical(matrixName).string(); string print_db_name = (print_filename_only) ? prefix.stem().string() : fs::canonical(daFile).replace_extension("").string(); + // print output header AP::Output outS(outFile); outS << "# RADS version " + version + "\n" @@ -215,11 +216,12 @@ main(int argc, char *argv[]) auto it=querySet.begin(); for (size_t j=0; j, RadsHit, DBAccess::comparePairs > results; - db.search(it->second, matrices[omp_get_thread_num()], all, collapse, minScore, results); + RadsQueryResult results; + results.queryDA = it->second; + db.search(matrices[omp_get_thread_num()], all, collapse, minScore, results); // results are written to a buffer first to reduce time in critical section - std::stringstream buf; + std::stringstream buf, alnbuf; buf << "# -------------------------------------------------------------------\n"; buf << "Results for: " << it->first << "\n"; buf << "Domain arrangement:"; @@ -227,26 +229,32 @@ main(int argc, char *argv[]) buf << " " << domain.accession(); buf << "\n\n"; - buf << "# score | normalized | SeqID | sequence length | domain arrangement\n"; + buf << "# score | normalized | SeqID | sequence length | domain arrangement | aln\n"; buf << "# -------------------------------------------------------------------\n"; buf.setf(ios::fixed, ios::floatfield); buf.precision(2); - - for (auto &result : results) + size_t alnNumber = 0; + for (auto &hit : results.targets) { - const auto &hit = result.second; - buf << result.first.first << "\t" << hit.normalized << "\t" << hit.targetName << "\t" << hit.length << "\t"; - const auto &da = hit.da; - size_t len = da.size(); - buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); - for (size_t i = 1; i Date: Tue, 26 Jun 2018 11:21:19 +0200 Subject: [PATCH 08/24] changed to have only one output file optionally with alignments --- src/rads.cpp | 31 +++++++++++++++++++++++------- tests/integrationTests/runTests.sh | 8 +++++++- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/rads.cpp b/src/rads.cpp index d5cda2f..4761854 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -57,7 +57,8 @@ int main(int argc, char *argv[]) { std::string version(std::string(STR(MAJOR_VERSION)) + "." + std::string(STR(MINOR_VERSION)) + "." + std::string(STR(PATCH_VERSION)) ); - fs::path queryDomainFile, querySeqFile, outFile, domainDB, alignmentFile; + fs::path queryDomainFile, querySeqFile, outFile, domainDB; + bool listAlignments; fs::path prefix; vector q, domains; @@ -67,7 +68,7 @@ main(int argc, char *argv[]) ("help,h", "Produces this help message") ("db,d", po::value(&prefix)->required(), "The database prefix") ("out,o", po::value(&outFile)->value_name("FILE"), "The output file") - ("alignments,f", po::value(&alignmentFile)->value_name("FILE"), "File to write the alignments into") + ("list-alignments,l", po::value(&listAlignments)->default_value(false)->zero_tokens(), "List alignments") ("threads,n", po::value(&nThreads)->default_value(1), "The number of threads to use") ; @@ -229,7 +230,10 @@ main(int argc, char *argv[]) buf << " " << domain.accession(); buf << "\n\n"; - buf << "# score | normalized | SeqID | sequence length | domain arrangement | aln\n"; + buf << "# score | normalized | SeqID | sequence length | domain arrangement"; + if (listAlignments) + buf << " | aln"; + buf << "\n"; buf << "# -------------------------------------------------------------------\n"; buf.setf(ios::fixed, ios::floatfield); buf.precision(2); @@ -237,7 +241,8 @@ main(int argc, char *argv[]) for (auto &hit : results.targets) { ++alnNumber; - alnbuf << std::to_string(alnNumber) + "\n" + hit.alnStringQuery + "\n" + hit.alnStringTarget + "\n\n"; + if (listAlignments) + alnbuf << std::to_string(alnNumber) + ")\nQuery DA: " + hit.alnStringQuery + "\nTarget DA: " + hit.alnStringTarget + "\n\n"; for (auto &seq : hit.targetSequences) { //const auto &hit = result.; @@ -247,15 +252,27 @@ main(int argc, char *argv[]) buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); for (size_t i = 1; i Date: Tue, 26 Jun 2018 11:21:44 +0200 Subject: [PATCH 09/24] adding missing testfile --- tests/integrationTests/results/test3bRes.txt | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/integrationTests/results/test3bRes.txt diff --git a/tests/integrationTests/results/test3bRes.txt b/tests/integrationTests/results/test3bRes.txt new file mode 100644 index 0000000..df72e32 --- /dev/null +++ b/tests/integrationTests/results/test3bRes.txt @@ -0,0 +1,41 @@ +# RADS version 2.2.0 +# RADS Output v1 +# run at Tue Jun 26 11:18:33 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro-test +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: false +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF00001 PF00002 PF00003 + +# score | normalized | SeqID | sequence length | domain arrangement | aln +# ------------------------------------------------------------------- +300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 1 +300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 1 +190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 2 +170 0.64 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 3 + + +# ------------------------------------------------------------------- +List of alignments: +# ------------------------------------------------------------------- + +1) +Query DA: PF00001 PF00002 PF00003 +Target DA: PF00001 PF00002 PF00003 + +2) +Query DA: PF00001 PF00002 PF00003 +Target DA: ******* PF00002 PF00003 + +3) +Query DA: ******* PF00001 PF00002 PF00003 +Target DA: PF00001 PF00002 PF00002 ******* + -- GitLab From a6eeccc8750543e65231a6069b25fe8f94e3cd79 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Tue, 26 Jun 2018 16:06:47 +0200 Subject: [PATCH 10/24] restructure code, correct test --- CMakeLists.txt | 2 +- src/rads.cpp | 108 ++++++++++--------- tests/integrationTests/results/test3bRes.txt | 8 +- 3 files changed, 62 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f2fb57..2753319 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 2.6) project (RADS C CXX) SET(MAJOR_VERSION 2) -SET(MINOR_VERSION 2) +SET(MINOR_VERSION 3) SET(PATCH_VERSION 0) diff --git a/src/rads.cpp b/src/rads.cpp index 4761854..e035cc5 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -53,6 +53,60 @@ namespace po = boost::program_options; namespace fs = boost::filesystem; namespace BSDL = BioSeqDataLib; + +void +printResult(const RadsQueryResult &results, AP::Output &outS, bool listAlignments) +{ + // results are written to a buffer first to reduce time in critical section + std::stringstream buf, alnbuf; + buf << "# -------------------------------------------------------------------\n"; + buf << "Results for: " << results.queryName << "\n"; + buf << "Domain arrangement:"; + for (auto const domain : results.queryDA) + buf << " " << domain.accession(); + buf << "\n\n"; + + buf << "# score | normalized | SeqID | sequence length | domain arrangement"; + if (listAlignments) + buf << " | aln"; + buf << "\n"; + buf << "# -------------------------------------------------------------------\n"; + buf.setf(ios::fixed, ios::floatfield); + buf.precision(2); + size_t alnNumber = 0; + for (auto &hit : results.targets) + { + ++alnNumber; + if (listAlignments) + alnbuf << std::to_string(alnNumber) + ")\n Query DA: " + hit.alnStringQuery + "\nTarget DA: " + hit.alnStringTarget + "\n\n"; + for (auto &seq : hit.targetSequences) + { + buf << hit.score << "\t" << hit.normalized << "\t" << seq.targetName << "\t" << seq.length << "\t"; + const auto &da = seq.da; + size_t len = da.size(); + buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); + for (size_t i = 1; i(&matrixName)->value_name("FILE"), "The domain similarity matrix") ("gop", po::value(&gop)->default_value(-50)->value_name("INT"), "Gap opening costs") ("gep", po::value(&gep)->default_value(-10)->value_name("INT"), "Gap extension costs") - ("collapse,c", po::value(&collapse)->default_value(false)->zero_tokens(), "Collapse consecutive identical domains") + ("collapse,c", po::value(&collapse)->default_value(false)->zero_tokens(), "Collapse consecutive identical domains (use is recommended)") ; bool all; @@ -218,58 +272,10 @@ main(int argc, char *argv[]) for (size_t j=0; jfirst; results.queryDA = it->second; db.search(matrices[omp_get_thread_num()], all, collapse, minScore, results); - - // results are written to a buffer first to reduce time in critical section - std::stringstream buf, alnbuf; - buf << "# -------------------------------------------------------------------\n"; - buf << "Results for: " << it->first << "\n"; - buf << "Domain arrangement:"; - for (auto const domain : it->second) - buf << " " << domain.accession(); - buf << "\n\n"; - - buf << "# score | normalized | SeqID | sequence length | domain arrangement"; - if (listAlignments) - buf << " | aln"; - buf << "\n"; - buf << "# -------------------------------------------------------------------\n"; - buf.setf(ios::fixed, ios::floatfield); - buf.precision(2); - size_t alnNumber = 0; - for (auto &hit : results.targets) - { - ++alnNumber; - if (listAlignments) - alnbuf << std::to_string(alnNumber) + ")\nQuery DA: " + hit.alnStringQuery + "\nTarget DA: " + hit.alnStringTarget + "\n\n"; - for (auto &seq : hit.targetSequences) - { - //const auto &hit = result.; - buf << hit.score << "\t" << hit.normalized << "\t" << seq.targetName << "\t" << seq.length << "\t"; - const auto &da = seq.da; - size_t len = da.size(); - buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); - for (size_t i = 1; i Date: Tue, 26 Jun 2018 18:12:50 +0200 Subject: [PATCH 11/24] started writing manual --- docs/Makefile | 20 ++++ docs/source/conf.py | 157 +++++++++++++++++++++++++++++ docs/source/index.rst | 23 +++++ docs/source/usage/installation.rst | 53 ++++++++++ 4 files changed, 253 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 docs/source/usage/installation.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..9b109c6 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = RADS +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..9566da0 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'RADS' +copyright = '2018, Carsten Kemena' +author = 'Carsten Kemena' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '2.3.0' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'RADSdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + 'sphinxsetup':'VerbatimColor={rgb}{0.87,0.87,0.87},verbatimwithframe=false' + + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'RADS.tex', 'RADS Documentation', + 'Carsten Kemena', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'rads', 'RADS Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'RADS', 'RADS Documentation', + author, 'RADS', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..30e13ab --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,23 @@ +.. RADS documentation master file, created by + sphinx-quickstart on Tue Jun 26 16:47:50 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to RADS's documentation! +================================ + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + usage/installation.rst + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + + diff --git a/docs/source/usage/installation.rst b/docs/source/usage/installation.rst new file mode 100644 index 0000000..465de09 --- /dev/null +++ b/docs/source/usage/installation.rst @@ -0,0 +1,53 @@ + + +This program can perform a domain arrangement similarity search on databases. It provides tools to create your own database as well as the program to search in them. + + + +************ +Installation +************ + +------------ +Requirements +------------ + +We try to keep the dependencies as little as possible. Current dependencies are: + + * BioSeqDataLib (https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib) (can be added via git submodule) + * boost (http://www.boost.org) + * SQLite (https://www.sqlite.org) + * compiler with c++11 and OpenMP support + +-------- +Download +-------- + +You can use git to get the latest stable version of RADS: + +.. code-block:: bash + + git clone https://ebbgit.uni-muenster.de/domainWorld/RADS.git + cd RADS + git submodule init + git submodule update + + +If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. In this case you will need to additionally copy the BioSeqDataLib folder into the libs folder of RADS. + +----------- +Compilation +----------- + +Change into the RADS directory and run the following commands: + +.. code-block:: bash + + mkdir build + cd build + cmake .. + make + +***** +Usage +***** -- GitLab From 7d2c341d3776107c4a72fab8a574ef27d7a04ee6 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Wed, 27 Jun 2018 16:55:48 +0200 Subject: [PATCH 12/24] updated the manual - changed to sphinx - added description for the list-alignments option - expanded the installation/setup description --- docs/source/content/installation.rst | 63 +++++++++++ docs/source/content/makedb_usage.rst | 71 ++++++++++++ docs/source/content/rads_usage.rst | 160 +++++++++++++++++++++++++++ docs/source/content/setup.rst | 21 ++++ 4 files changed, 315 insertions(+) create mode 100644 docs/source/content/installation.rst create mode 100644 docs/source/content/makedb_usage.rst create mode 100644 docs/source/content/rads_usage.rst create mode 100644 docs/source/content/setup.rst diff --git a/docs/source/content/installation.rst b/docs/source/content/installation.rst new file mode 100644 index 0000000..e4215c2 --- /dev/null +++ b/docs/source/content/installation.rst @@ -0,0 +1,63 @@ + +.. _installation: + +************ +Installation +************ + +------------ +Requirements +------------ + +We try to keep the dependencies as little as possible. Current dependencies are: + + * BioSeqDataLib (https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib) (can be added via git submodule) + * boost (http://www.boost.org) + * SQLite (https://www.sqlite.org) + * compiler with c++11 and OpenMP support + +-------- +Download +-------- + +The easiest way to download the most current version of RADS is to use git: + +.. code-block:: bash + + git clone https://ebbgit.uni-muenster.de/domainWorld/RADS.git + cd RADS + git submodule init + git submodule update + + +If you are unable to use git you can download the source code package manually from here: If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. Below you find the commands needed to put everything necessary in its correct place. You can replace the ``wget`` command with manual downloads and copying the file to the correct position. + +.. code-block:: bash + + wget https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz + tar xfz RADS-master.tar.gz + + # The BioSeqDataLib now needs to be added manually + cd RADS-master/libs + rmdir BioSeqDataLib + wget https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib/-/archive/master/BioSeqDataLib-master.tar.gz + tar xfz BioSeqDataLib-master.tar.gz + mv BioSeqDataLib-master BioSeqDataLib + + + + +----------- +Compilation +----------- + +Change into the RADS directory and run the following commands: + +.. code-block:: bash + + mkdir build + cd build + cmake .. + make + + diff --git a/docs/source/content/makedb_usage.rst b/docs/source/content/makedb_usage.rst new file mode 100644 index 0000000..43b2635 --- /dev/null +++ b/docs/source/content/makedb_usage.rst @@ -0,0 +1,71 @@ +.. _makeradsdb: + +**************** +makeRadsDB Usage +**************** + +``makeRadsDB`` is a program to compute a data base that can be used by RADS. A database consists of two files an index file +(SQLite database) and an arrangement file (simple text file) (e.g. if the name of the data base is MyDB the +files needed are MyDB.db and MyDB.da). + +=============== +Program options +=============== + + +--------------- +General options +--------------- + + +The basic options + +.. program:: makeRadsDB + +.. option:: -h, --help + + Produces this help message + +.. option:: -i , --input + + Domain arrangement file(s) that should be turned into a database. + +.. option:: -I , --InterPro + + Used to turn the InterPro annotation file (match\_complete.xml.gz) found on https://www.ebi.ac.uk/interpro/download.html into a RADS database. This option is used to compute the precomputed InterPro databases. Use the :option:`makeRadsDB --database` option to extract the domain arrangements of a single database. + +.. option:: -s , --seqs + + Sequence files. Are used in combination with the domain arrangement files. If none is given all sequence lengths are set to 0. + +.. option:: -o , --out + + The output prefix used to produce two files in format prefix.db and prefix.da. Be aware that we currently do no support adding data to an existing data base. + + + +--------------- +Filter options +--------------- + +Some options to influence the data base construction. + +.. program:: makeRadsDB + +.. option:: -d, --database + + This options is used together with the option: :option:`makeRadsDB --InterPro`. It determines which of the supported databases to include in the RADS database. + + + +=============== +Examples +=============== + + +.. code-block:: bash + + # running makeRadsDB providing pfam annotations and sequences + makeRadsDB -i domains1.pfam domains2.pfam -s seqs1.fa ses2.fa -o myDB + + diff --git a/docs/source/content/rads_usage.rst b/docs/source/content/rads_usage.rst new file mode 100644 index 0000000..a96afa6 --- /dev/null +++ b/docs/source/content/rads_usage.rst @@ -0,0 +1,160 @@ +.. _rads: + +********** +RADS Usage +********** + + +============ +Simple Usage +============ + +This section assumes that you have installed RADS as described in :ref:`installation` and setup the RADS as described in :ref:`setup`. + +Three parameters are required, a query, the database to search in and a scoring matrix. There are three different ways to provide a query, either as a simple list of domain IDs, +a protein sequence that will be automatically annotated, or already an existing domain annotation file (e.g. the result of a run of ``pfam_scan.pl``). + +.. code-block:: bash + + # running RADS providing a manual list of domains as query + rads -D PF02758 PF05729 --db InterPro60-pfam -m pfam30.dsm + + # running RADS providing a sequence as query + rads -Q seq.fasta --db InterPro60-pfam -m pfam30.dsm + + # running RADS providing a domain annotation as query + rads -q seq.dom --db InterPro60-pfam -m pfam30.dsm + + +=============== +Program Options +=============== + + +--------------- +General options +--------------- + +The general option influence the general behaviour of RADS: + +.. program:: rads + +.. option:: -h, --help + + Prints a simple help message with a small description of all the available options. + +.. option:: -d , --db + + Prefix to the database. Can be either one of the precomputed ones downloaded from the website or self-computed (see :ref:`setup`). + +.. option:: -o , --out + + The output file. + +.. option:: -l, --list-alignments + + Report the alignments computed for the different domain arrangements. + +.. option:: -n , --threads + + The number of threads to be used by the program. Currently with this option several queries can be processed in parallel. If only one query is given, this program will still use only a single core. *Default: 1* + +-------------- +Query options +-------------- + +The query options define the different ways a query can be provided. +.. program:: rads + +.. option:: -q , --query-dom + + The domain annotation file to be used as query. This is a simple domain annotation file in one of the supported formats (e.g. the output of ``pfam_scan.pl``). + +.. option:: -Q , --query-seq + + File containing sequences to be used as queries. The file has to be in FASTA format. + +.. option:: --domain-db + + The domain database to use for automated annotation. + +.. option:: -D , --domains + + Provide a domain arrangement manually in form of space separated domain accession numbers (e.g. PF00001 PF00002). + +--------------- +Scoring options +--------------- + +These parameters influence the alignment scoring similar to the same values in a standard alignment. + +.. program:: rads + +.. option:: -m , --matrix + + The domain similarity matrix. This one needs to fit the data in the database (e.g. If you work with a database that contain Pfam domains, use the corresponding Pfam similarity matrix. +.. option:: --gop + + Gap opening penalty, These costs are applied once for each consecutive set of gaps in a domain arrangement. They are not applied to gaps at the ends of the alignment. *Default: -50* +.. option:: --gep + + Gap extension penalty. These costs are applied to each single gap character in the alignment. *Default: -10* +.. option:: -c, --collapse + + Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is, that if actually changes the domain arrangements. *Default: false* + + +Gap opening costs are only taken into account when the gap occurs in the middle of a domain arrangement. Gaps at either end of a DA are assumed only penalized using the 'gap extension' costs. + +------------------------------ +Result filtering options +------------------------------ + +These options can be used to filter the hits that are reported. + +.. program:: rads + +.. option:: -a, --all + + All of the domain IDs in the query have to appear in the target sequences as well. *Default: false* + +.. option:: -M , --min-score + + Only alignments with a score larger or equal to this value are reported. *Default: 0* + + + +=============== +Output format +=============== + +The output is in a simple text file format and contains two parts. The first part is a summary of the process containing the date of execution, The version of RADS and the parameters used. The second part of the file contains the result. The hits are listed in a table of five \emph{tab} separated columns. The first column contains the alignment score and the second the normalized version. The third column contains the the target id followed by the sequence length in the fourth column. +The table is sorted according to the first column. + +.. code-block:: text + + # RADS version 2.2.0 + # RADS Output v1 + # run at Fri Apr 20 14:19:09 2018 + # + # query file: - + # database: interPro-test + # gap open penalty -50 + # gap extension penalty -10 + # matrix: pfam-31.dsm + # all: false + # collapse: true + # ****************************************************************** + + # ------------------------------------------------------------------- + Results for: manual entered query + Domain arrangement: PF00001 PF00002 PF00003 + + # score | normalized | SeqID | sequence length | domain arrangement + # ------------------------------------------------------------------- + 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 + 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 + 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 + 190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 + + diff --git a/docs/source/content/setup.rst b/docs/source/content/setup.rst new file mode 100644 index 0000000..f732019 --- /dev/null +++ b/docs/source/content/setup.rst @@ -0,0 +1,21 @@ + +.. _setup: + +*************** +Setting up RADS +*************** + +This chapter describes how to setup RADS so it can access all the data it needs. Beside the query + + +======================= +Setting up the database +======================= + +You need a database to search in. You can use one of the databases we precomputed based on InterPro annotations available here: http://domainworld.uni-muenster.de/programs/rads/ or you can compute your own one using the the ``makeRadsDB`` program described in :ref:`makeRadsDB`. + +============================================= +Setting up the domain similarity matrix (DSM) +============================================= + +These precomputed similarity matrices should be fitting to the database you use. You can download a DSM from: http://domainworld.uni-muenster.de/data/dsm/ -- GitLab From 17d18002a4978668a3a48305a26a7f8845b4596a Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Wed, 27 Jun 2018 17:16:46 +0200 Subject: [PATCH 13/24] updated the manual - changed to sphinx - added description for the list-alignments option - expanded the installation/setup description --- CHANGELOG | 4 + README.md | 17 ++- UserManual.pdf | Bin 0 -> 194354 bytes docs/source/_static/logo.png | Bin 0 -> 85357 bytes docs/source/conf.py | 6 +- docs/source/content/installation.rst | 2 +- docs/source/content/makedb_usage.rst | 8 +- docs/source/content/rads_usage.rst | 118 +++++++++++----- docs/source/content/setup.rst | 6 +- docs/source/index.rst | 17 ++- docs/source/usage/installation.rst | 53 -------- manual/manual.pdf | Bin 93605 -> 0 bytes manual/manual.tex | 193 --------------------------- src/makeRadsDB.cpp | 8 +- src/rads.cpp | 14 +- 15 files changed, 141 insertions(+), 305 deletions(-) create mode 100644 UserManual.pdf create mode 100644 docs/source/_static/logo.png delete mode 100644 docs/source/usage/installation.rst delete mode 100644 manual/manual.pdf delete mode 100644 manual/manual.tex diff --git a/CHANGELOG b/CHANGELOG index 263e3e9..057b3ef 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +v. 2.3.0 +- added option to display computed alignments +- updated manual and changed to sphinx + v. 2.2.0 - internal code improvements diff --git a/README.md b/README.md index b92fe2b..66c31ad 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -RADS 2.1.2 (beta) +RADS 2.3.0 ==== This program can perform a domain arrangement similarity search on databases. @@ -14,9 +14,21 @@ We try to keep the dependencies as little as possible. Current dependencies are: - compiler with c++11 and OpenMP support +Download +-------- + +```bash +git clone https://ebbgit.uni-muenster.de/domainWorld/RADS.git +cd RADS +git submodule init +git submodule update +``` + + Installation ------------ + Change into the RADS directory and run the following commands: ```bash @@ -30,7 +42,8 @@ make Usage ----- -Please take a look at the wiki page (https://ebbgit.uni-muenster.de/domainWorld/RADS/wikis/home) for detailed a description +Please take a look at the file UserManual.pdf included in this program to get a detailed overview on how to install and run the program. + Problems, Bugs & Suggestions ---------------------------- diff --git a/UserManual.pdf b/UserManual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a31eaa3397de8af41d6a42924293b75938e43d4b GIT binary patch literal 194354 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�iDr=)MY&%@JQAPCxf~+zPKEEYoX>XB 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 BF8lxh literal 0 HcmV?d00001 diff --git a/docs/source/_static/logo.png b/docs/source/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe90b2607612f6979483f6f92dda86a7fe3ffb9 GIT binary patch literal 85357 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

0&NStZsP!%{ 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ÔKM!gI6?6XJV+w~GQ) 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 Qcp9Xtq@h@fGz, --InterPro - Used to turn the InterPro annotation file (match\_complete.xml.gz) found on https://www.ebi.ac.uk/interpro/download.html into a RADS database. This option is used to compute the precomputed InterPro databases. Use the :option:`makeRadsDB --database` option to extract the domain arrangements of a single database. + Used to turn the InterPro annotation file (match\_complete.xml.gz) found on https://www.ebi.ac.uk/interpro/download.html into a RADS database. This option is used to compute the precomputed InterPro databases. Use the :option:`--database` option to extract the domain arrangements of a single database. .. option:: -s , --seqs @@ -54,7 +54,7 @@ Some options to influence the data base construction. .. option:: -d, --database - This options is used together with the option: :option:`makeRadsDB --InterPro`. It determines which of the supported databases to include in the RADS database. + This options is used together with the option: :option:`--InterPro`. It determines which of the supported databases to include in the RADS database. diff --git a/docs/source/content/rads_usage.rst b/docs/source/content/rads_usage.rst index a96afa6..05c7a65 100644 --- a/docs/source/content/rads_usage.rst +++ b/docs/source/content/rads_usage.rst @@ -9,7 +9,7 @@ RADS Usage Simple Usage ============ -This section assumes that you have installed RADS as described in :ref:`installation` and setup the RADS as described in :ref:`setup`. +This section assumes that you have installed RADS as described in :ref:`installation` and setup RADS as described in :ref:`setup`. Three parameters are required, a query, the database to search in and a scoring matrix. There are three different ways to provide a query, either as a simple list of domain IDs, a protein sequence that will be automatically annotated, or already an existing domain annotation file (e.g. the result of a run of ``pfam_scan.pl``). @@ -45,7 +45,7 @@ The general option influence the general behaviour of RADS: .. option:: -d , --db - Prefix to the database. Can be either one of the precomputed ones downloaded from the website or self-computed (see :ref:`setup`). + Prefix of the database. Can be either one of the precomputed ones downloaded from the website (see :ref:`setup`) or self-computed (see :ref:`makeRadsDB`). .. option:: -o , --out @@ -95,16 +95,13 @@ These parameters influence the alignment scoring similar to the same values in a The domain similarity matrix. This one needs to fit the data in the database (e.g. If you work with a database that contain Pfam domains, use the corresponding Pfam similarity matrix. .. option:: --gop - Gap opening penalty, These costs are applied once for each consecutive set of gaps in a domain arrangement. They are not applied to gaps at the ends of the alignment. *Default: -50* + Gap opening penalty. These costs are applied once for each consecutive set of gaps in a domain arrangement. They are not applied to gaps at the ends of the alignment. *Default: -50* .. option:: --gep Gap extension penalty. These costs are applied to each single gap character in the alignment. *Default: -10* .. option:: -c, --collapse - Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is, that if actually changes the domain arrangements. *Default: false* - - -Gap opening costs are only taken into account when the gap occurs in the middle of a domain arrangement. Gaps at either end of a DA are assumed only penalized using the 'gap extension' costs. + Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is that it actually changes the domain arrangements. However, domains can often duplicate and several times the same domain in a row is not uncommon, usually without affecting the function of a protein. *Default: false* ------------------------------ Result filtering options @@ -133,28 +130,89 @@ The table is sorted according to the first column. .. code-block:: text - # RADS version 2.2.0 - # RADS Output v1 - # run at Fri Apr 20 14:19:09 2018 - # - # query file: - - # database: interPro-test - # gap open penalty -50 - # gap extension penalty -10 - # matrix: pfam-31.dsm - # all: false - # collapse: true - # ****************************************************************** - - # ------------------------------------------------------------------- - Results for: manual entered query - Domain arrangement: PF00001 PF00002 PF00003 - - # score | normalized | SeqID | sequence length | domain arrangement - # ------------------------------------------------------------------- - 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 - 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 - 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 - 190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 + # RADS version 2.2.0 + # RADS Output v1 + # run at Fri Apr 20 14:19:09 2018 + # + # query file: - + # database: interPro-test + # gap open penalty -50 + # gap extension penalty -10 + # matrix: pfam-31.dsm + # all: false + # collapse: true + # ****************************************************************** + + # ------------------------------------------------------------------- + Results for: manual entered query + Domain arrangement: PF00001 PF00002 PF00003 + + # score | normalized | SeqID | sequence length | domain arrangement + # ------------------------------------------------------------------- + 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 + 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 + 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 + 190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 + + +If you used the :option:`--list-alignments` option you will find additional output. An additional column denotes the alignment ID. The alignments can then be found at the end of the table. + +.. note:: + + Be aware that if you use additionally the :option:`--collapse` option the table will still show the original domain arrangement, the alignment though will use the collapsed version. See example below. +.. code-block:: text + + # RADS version 2.3.0 + # RADS Output v1 + # run at Wed Jun 27 15:09:15 2018 + # + # query file: - + # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro-test + # gap open penalty -50 + # gap extension penalty -10 + # matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm + # all: false + # collapse: true + # ****************************************************************** + + # ------------------------------------------------------------------- + Results for: manual entered query + Domain arrangement: PF00001 PF00002 PF00003 + + # score | normalized | SeqID | sequence length | domain arrangement | aln + # ------------------------------------------------------------------- + 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 1 + 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 1 + 190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 2 + 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 3 + + + # ------------------------------------------------------------------- + List of alignments: + # ------------------------------------------------------------------- + + 1) + Query DA: PF00001 PF00002 PF00003 + Target DA: PF00001 PF00002 PF00003 + + 2) + Query DA: PF00001 PF00002 PF00003 + Target DA: PF00001 PF00002 ******* + + 3) + Query DA: PF00001 PF00002 PF00003 + Target DA: ******* PF00002 PF00003 + + +=============== +Citation +=============== + +If you find RADS useful in your research, please cite it. + +Terrapon, Nicolas, Weiner, January, Grath, Sonja, Moore, Andrew D, Bornberg-Bauer, Erich: Rapid similarity search of proteins using alignments of domain arrangements., Bioinformatics (2014) 30 (2): 274-281. doi: 10.1093/bioinformatics/btt379 + +http://bioinformatics.oxfordjournals.org/content/30/2/274.long + diff --git a/docs/source/content/setup.rst b/docs/source/content/setup.rst index f732019..fbd88c1 100644 --- a/docs/source/content/setup.rst +++ b/docs/source/content/setup.rst @@ -5,17 +5,17 @@ Setting up RADS *************** -This chapter describes how to setup RADS so it can access all the data it needs. Beside the query +This chapter describes how to setup RADS so it can access all the data it needs. Additional to your query you will also need a RADS database and a similarity matrix. ======================= Setting up the database ======================= -You need a database to search in. You can use one of the databases we precomputed based on InterPro annotations available here: http://domainworld.uni-muenster.de/programs/rads/ or you can compute your own one using the the ``makeRadsDB`` program described in :ref:`makeRadsDB`. +You need a database to search in. You can use one of the databases we precomputed based on InterPro annotations available here: http://domainworld.uni-muenster.de/programs/rads/ or you can compute your own one using the ``makeRadsDB`` program described in :ref:`makeRadsDB`. ============================================= Setting up the domain similarity matrix (DSM) ============================================= -These precomputed similarity matrices should be fitting to the database you use. You can download a DSM from: http://domainworld.uni-muenster.de/data/dsm/ +These precomputed similarity matrices should be fitting to the domain database used, e.g. If you database contains PFAM domain, use the DSM containing the PFAM match scores. You can download DSMs for PFAM and SUPERFAMILY from: http://domainworld.uni-muenster.de/data/dsm/. diff --git a/docs/source/index.rst b/docs/source/index.rst index 30e13ab..1e074e4 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -6,18 +6,23 @@ Welcome to RADS's documentation! ================================ + .. toctree:: :maxdepth: 2 :caption: Contents: - usage/installation.rst + content/installation.rst + content/setup.rst + content/rads_usage.rst + content/makedb_usage.rst -Indices and tables -================== +.. only:: html + + Indices and tables + ================== -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` + * :ref:`genindex` + * :ref:`search` diff --git a/docs/source/usage/installation.rst b/docs/source/usage/installation.rst deleted file mode 100644 index 465de09..0000000 --- a/docs/source/usage/installation.rst +++ /dev/null @@ -1,53 +0,0 @@ - - -This program can perform a domain arrangement similarity search on databases. It provides tools to create your own database as well as the program to search in them. - - - -************ -Installation -************ - ------------- -Requirements ------------- - -We try to keep the dependencies as little as possible. Current dependencies are: - - * BioSeqDataLib (https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib) (can be added via git submodule) - * boost (http://www.boost.org) - * SQLite (https://www.sqlite.org) - * compiler with c++11 and OpenMP support - --------- -Download --------- - -You can use git to get the latest stable version of RADS: - -.. code-block:: bash - - git clone https://ebbgit.uni-muenster.de/domainWorld/RADS.git - cd RADS - git submodule init - git submodule update - - -If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. In this case you will need to additionally copy the BioSeqDataLib folder into the libs folder of RADS. - ------------ -Compilation ------------ - -Change into the RADS directory and run the following commands: - -.. code-block:: bash - - mkdir build - cd build - cmake .. - make - -***** -Usage -***** diff --git a/manual/manual.pdf b/manual/manual.pdf deleted file mode 100644 index bc506669e99063c314c2b5165932dc94e87446a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93605 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 diff --git a/manual/manual.tex b/manual/manual.tex deleted file mode 100644 index 912258d..0000000 --- a/manual/manual.tex +++ /dev/null @@ -1,193 +0,0 @@ -\documentclass{scrartcl} - - -\usepackage{hyperref} -\usepackage{xcolor} -\usepackage{listings} -\usepackage{float} - - -\begin{document} - -\title{RADS manual} -\subtitle{2.2.0} -\author{Carsten Kemena} - -\maketitle - -\tableofcontents - -\section{RADS} - - -\subsection{Introduction} - -RADS is a program to search for domain arrangements in a given database. - -\subsection{Program Options} - -\subsubsection*{General options} - -The general option influence the general behaviour of RADS: - -\begin{tabular}{llp{9.5cm}} -\hline -parameter & default & description\\\hline - -h, --help & - & Produces this help message \\ - -d, --db & - & Prefix to the database. Can be either one of the precomputed ones downloaded from the website or self-computed. \\ - -o, --out & - & The output file.\\ - -n, --threads & 1 & The number of threads to use\\ - \hline -\end{tabular} - -\subsubsection*{Query options} - -The query options define the different ways a query can be provided. - -\begin{tabular}{llp{9cm}} -\hline -parameter & default & description\\\hline - -q, --query-dom &- & The domain annotation file to be used as query. This is a simple domain annotation file in one of the supported formats.\\ - -Q, --query-seq &- & File containing sequences to be used as queries. The file has to be in FASTA format.\\ - --domaindb & - & The domain database to use for automated annotation. \\ - -D, --domains & - & Provide a domain arrangement manually in form of space separated domain accession numbers (e.g. PF00001 PF00002)\\ - \hline -\end{tabular} - - -\subsubsection*{Scoring options} - -These parameters influence the alignment scoring similar to the same values in a standard alignment. - -\begin{table}[H] -\begin{tabular}{llp{9cm}} -\hline -parameter & default & description\\\hline - -M, --matrix &- & The domain similarity matrix. This one needs to fit the data in the database (e.g. If you work with a database that contain Pfam domains, use the corresponding Pfam similarity matrix.\\ - --gop & -50 & Gap opening costs\\ - --gep & -10 & Gap extension costs\\ - -c, --collapse & false & Collapse consecutive identical domains\\ - \hline -\end{tabular} -\end{table} - -Gap opening costs are only taken into account when the gap occurs in the middle of a domain arrangement. Gaps at either end of a DA are assumed only penalized using the 'gap extension' costs. - -\subsubsection{Result filtering options} - -\begin{table}[H] -\begin{tabular}{llp{9cm}} -\hline -parameter & default & description\\\hline - -a, --all & false & All domain types need to occur\\ - -M, --min-score & =0 & The minimum alignment score to list\\ -\end{tabular} -\end{table} - -\subsection{Data bases} - -We provide a range of precomputed databases on our website. We currently provide databases based on the InterPro annotations. If you want to compute a database based on you own data you can do that very easily using the makeRadsDB program included (see Section \ref{section:makeRadsDB}). - - - -\subsection{Output format} - -The output is in a simple text file format and contains two parts. The first part is a summary of the process containing the date of execution, The version of RADS and the parameters used. The second part of the file contains the result. The hits are listed in a table of five \emph{tab} separated columns. The first column contains the alignment score and the second the normalized version. The third column contains the the target id followed by the sequence length in the fourth column. -The table is sorted according to the first column. - - -\begin{verbatim} -# RADS version 2.2.0 -# RADS Output v1 -# run at Fri Apr 20 14:19:09 2018 -# -# query file: - -# database: interPro-test -# gap open penalty -50 -# gap extension penalty -10 -# matrix: pfam-31.dsm -# all: false -# collapse: true -# ****************************************************************** - -# ------------------------------------------------------------------- -Results for: manual entered query -Domain arrangement: PF00001 PF00002 PF00003 - -# score | normalized | SeqID | sequence length | domain arrangement -# ------------------------------------------------------------------- -300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 -300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 -190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 -190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 -\end{verbatim} - - -\subsection{Examples} - -\begin{lstlisting}[language=bash,backgroundcolor = \color{lightgray}] -# running RADS providing a manual list of domains as query -rads --db InterPro60-pfam -M pfam30.dsm -D PF02758 PF05729 - -# running RADS providing a sequence as query -rads --db InterPro60-pfam -M pfam30.dsm -Q seq.fasta - -# running RADS providing a domain annotation as query -rads --db InterPro60-pfam -M pfam30.dsm -q seq.dom -\end{lstlisting} - -\newpage -\section{makeRadsDB}\label{section:makeRadsDB} - -A program to compute a data base that can be used by RADS. A database consists of two files an index file -(SQLite database) and an arrangement file (simple text file) (e.g. if the name of the data base is MyDB the -files needed are MyDB.db and MyDB.da). - -\subsection{Program options} -\subsubsection*{General options} - -The basic options - -\begin{table}[H] -\begin{tabular}{llp{9cm}} -\hline -parameter & default & description\\\hline - -h, --help & - & Produces this help message\\ - -i, --input & - & Domain arrangement file(s) that should be turned into a database. \\ - -I, --InterPro & - & Used to turn the InterPro annotation file (match\_complete.xml.gz) found on - \url{https://www.ebi.ac.uk/interpro/download.html} into a RADS database. This option is - used to compute the precomputed InterPro databases.\\ - -s, --seqs & - & Sequence files. Are used in combination with the domain arrangement files. - If none is given all sequence lengths are set to 0.\\ - -o, --out & - & The output prefix used to produce two files in format prefix.db and prefix.da. - Be aware that we currently do no support adding data to an existing data base.\\ - \hline -\end{tabular} -\end{table} - -The domain arrangement file as well as the sequence files can contain several sequences/arrangements. - - -\subsubsection*{Filter options} - -Some options to influence the data base construction. - -\begin{tabular}{llp{9cm}} -\hline -parameter & default & description\\\hline - -d, --database & - & The database to use\\ - \hline -\end{tabular} - -\subsection{Examples} - -\begin{lstlisting}[language=bash,backgroundcolor = \color{lightgray}] -# running makeRadsDB providing pfam annotations and sequences -makeRadsDB -i domains1.pfam domains2.pfam -s seqs1.fa ses2.fa \ - -o myDB -\end{lstlisting} - - - - -\end{document} diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index d5f5341..6c762f8 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -71,10 +71,10 @@ main(int argc, char *argv[]) po::options_description general("General options"); general.add_options() ("help,h", "Produces this help message") - ("input,i", po::value >(&daFiles)->multitoken(), "Domain arrangement files") - ("InterPro,I", po::value(&interProFile), "InterPro match file") - ("seqs,s", po::value >(&seqFiles)->multitoken(), "Sequence files") - ("out,o", po::value(&prefix)->required(), "The output prefix") + ("input,i", po::value >(&daFiles)->multitoken()->value_name("FILE"), "Domain arrangement files") + ("InterPro,I", po::value(&interProFile)->value_name("FILE"), "InterPro match file") + ("seqs,s", po::value >(&seqFiles)->multitoken()->value_name("FILE"), "Sequence files") + ("out,o", po::value(&prefix)->required()->value_name("FILE"), "The output prefix") ; //std::vector databases; diff --git a/src/rads.cpp b/src/rads.cpp index e035cc5..d0f05fc 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -120,18 +120,18 @@ main(int argc, char *argv[]) po::options_description general("General options"); general.add_options() ("help,h", "Produces this help message") - ("db,d", po::value(&prefix)->required(), "The database prefix") + ("db,d", po::value(&prefix)->required()->value_name("FILE"), "The database prefix") ("out,o", po::value(&outFile)->value_name("FILE"), "The output file") ("list-alignments,l", po::value(&listAlignments)->default_value(false)->zero_tokens(), "List alignments") - ("threads,n", po::value(&nThreads)->default_value(1), "The number of threads to use") + ("threads,n", po::value(&nThreads)->default_value(1)->value_name("INT"), "The number of threads to use") ; po::options_description queryOpts("Query options"); queryOpts.add_options() - ("query-dom,q", po::value(&queryDomainFile), "The domain annotation file to be used as query") - ("query-seq,Q", po::value(&querySeqFile), "File containing sequences to be used as queries") - ("domaindb", po::value(&domainDB), "The domain database to use for automated annotation") - ("domains,D", po::value >(&domains)->multitoken(), "Domain arrangement") + ("query-dom,q", po::value(&queryDomainFile)->value_name("FILE"), "The domain annotation file to be used as query") + ("query-seq,Q", po::value(&querySeqFile)->value_name("FILE"), "File containing sequences to be used as queries") + ("domain-db", po::value(&domainDB)->value_name("FILE"), "The domain database to use for automated annotation") + ("domains,D", po::value >(&domains)->multitoken()->value_name("ID(s)"), "Domain arrangement") ; int gop, gep; @@ -150,7 +150,7 @@ main(int argc, char *argv[]) po::options_description filterOpts("Result filtering options"); filterOpts.add_options() ("all,a", po::value(&all)->default_value(false)->zero_tokens(), "All domain types need to occur") - ("min-score,M", po::value(&minScore)->default_value(0), "The minimum alignment score to list") + ("min-score,M", po::value(&minScore)->default_value(0)->value_name("INT"), "The minimum alignment score to list") ; bool print_filename_only; -- GitLab From 3d7b43891d91c1c51a240967a73ca8ff134d6c67 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Thu, 28 Jun 2018 13:24:24 +0200 Subject: [PATCH 14/24] improved documentation, improved tests --- .gitignore | 4 ++ docs/source/conf.py | 2 +- docs/source/content/general.rst | 26 +++++++ docs/source/content/installation.rst | 32 ++++++--- docs/source/content/makedb_usage.rst | 22 +++--- docs/source/content/rads_usage.rst | 68 ++++++++----------- docs/source/index.rst | 5 +- src/makeRadsDB.cpp | 12 ---- tests/data/db_pfam2.dom | 44 ++++++++++++ tests/data/sort-test.xml | 68 +++++++++++++++++++ .../integrationTests/results/test-col-aln.txt | 35 ++++++++++ tests/integrationTests/results/test-order.txt | 31 +++++++++ tests/integrationTests/runTests.sh | 33 +++++++++ 13 files changed, 306 insertions(+), 76 deletions(-) create mode 100644 docs/source/content/general.rst create mode 100644 tests/data/db_pfam2.dom create mode 100644 tests/data/sort-test.xml create mode 100644 tests/integrationTests/results/test-col-aln.txt create mode 100644 tests/integrationTests/results/test-order.txt diff --git a/.gitignore b/.gitignore index 3fb7fb6..12e89e4 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,10 @@ doc/html .project .settings +# Visual studio code # +###################### +.vscode + # Packages # ############ # it's better to unpack these files and commit the raw source diff --git a/docs/source/conf.py b/docs/source/conf.py index fe376c9..3e01c72 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -109,7 +109,7 @@ htmlhelp_basename = 'RADSdoc' latex_elements = { 'sphinxsetup':'VerbatimColor={rgb}{0.87,0.87,0.87},verbatimwithframe=false', - 'classoptions': ',openany,onside' + 'classoptions': ',openany,oneside' # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', diff --git a/docs/source/content/general.rst b/docs/source/content/general.rst new file mode 100644 index 0000000..024d2ab --- /dev/null +++ b/docs/source/content/general.rst @@ -0,0 +1,26 @@ + +.. _general: + +************ +General +************ + +RADS 2.0 and newer is a complete new implementation based on the ideas in the original publication (see below). However, +the scoring scheme, options etc. have been changed. The next chapters will show you how to install and use this version. + +=============== +Contact +=============== + +If you have any problems, questions or suggestions concerning this program please contact us: domainWorld@uni-muenster.de + + +=============== +Citation +=============== + +If you find RADS useful in your research, please cite: + +Terrapon, Nicolas, Weiner, January, Grath, Sonja, Moore, Andrew D, Bornberg-Bauer, Erich: Rapid similarity search of proteins using alignments of domain arrangements., Bioinformatics (2014) 30 (2): 274-281. doi: 10.1093/bioinformatics/btt379 + +http://bioinformatics.oxfordjournals.org/content/30/2/274.long diff --git a/docs/source/content/installation.rst b/docs/source/content/installation.rst index 82990de..8943308 100644 --- a/docs/source/content/installation.rst +++ b/docs/source/content/installation.rst @@ -9,7 +9,7 @@ Installation Requirements ------------ -We try to keep the dependencies as little as possible. Current dependencies are: +We try to keep the dependencies as few as possible. Current dependencies are: * BioSeqDataLib (https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib) (can be added via git submodule) * boost (http://www.boost.org) @@ -20,7 +20,13 @@ We try to keep the dependencies as little as possible. Current dependencies are: Download -------- -The easiest way to download the most current version of RADS is to use git: +You can currently choose between two different donwnload options: ``git`` and a manual download. Using ``git`` is the recommended way but if that is +not possible you can use the manual way instead. Both ways are described in the next sections. + +Git +^^^ + +The easiest way to download the most current version of RADS is to use ``git``: .. code-block:: bash @@ -30,23 +36,35 @@ The easiest way to download the most current version of RADS is to use git: git submodule update -If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. Below you find the commands needed to put everything necessary in its correct place. You can replace the ``wget`` command with manual downloads and copying the file to the correct position. +If you want to update to a newer version you can simply run the following command: + +.. code-block:: bash + + git pull + git submodule update + +Do not forget to recombile the program after this step. + +Manual download +^^^^^^^^^^^^^^^ + +If you don't want to use git, you can download the source code from here: https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz. +Below you find the commands needed to put everything necessary in its correct place. You can replace the ``wget`` command with manual downloads and copying the +file to the correct position if you do not have an internet connection. .. code-block:: bash wget https://ebbgit.uni-muenster.de/domainWorld/RADS/-/archive/master/RADS-master.tar.gz tar xfz RADS-master.tar.gz - + # The BioSeqDataLib now needs to be added manually cd RADS-master/libs rmdir BioSeqDataLib wget https://ebbgit.uni-muenster.de/domainWorld/BioSeqDataLib/-/archive/master/BioSeqDataLib-master.tar.gz tar xfz BioSeqDataLib-master.tar.gz mv BioSeqDataLib-master BioSeqDataLib - - ----------- Compilation ----------- @@ -59,5 +77,3 @@ Change into the RADS directory and run the following commands: cd build cmake .. make - - diff --git a/docs/source/content/makedb_usage.rst b/docs/source/content/makedb_usage.rst index 71e97d7..0e86979 100644 --- a/docs/source/content/makedb_usage.rst +++ b/docs/source/content/makedb_usage.rst @@ -25,22 +25,22 @@ The basic options .. option:: -h, --help Produces this help message - + .. option:: -i , --input - Domain arrangement file(s) that should be turned into a database. - + Domain arrangement file(s) that should be turned into a database. + .. option:: -I , --InterPro - + Used to turn the InterPro annotation file (match\_complete.xml.gz) found on https://www.ebi.ac.uk/interpro/download.html into a RADS database. This option is used to compute the precomputed InterPro databases. Use the :option:`--database` option to extract the domain arrangements of a single database. .. option:: -s , --seqs - + Sequence files. Are used in combination with the domain arrangement files. If none is given all sequence lengths are set to 0. -.. option:: -o , --out - - The output prefix used to produce two files in format prefix.db and prefix.da. Be aware that we currently do no support adding data to an existing data base. +.. option:: -o , --out + + The output prefix used to produce two files in format prefix.db and prefix.da. Be aware that we currently do not support adding data to an existing data base. @@ -52,8 +52,8 @@ Some options to influence the data base construction. .. program:: makeRadsDB -.. option:: -d, --database - +.. option:: -d, --database + This options is used together with the option: :option:`--InterPro`. It determines which of the supported databases to include in the RADS database. @@ -67,5 +67,3 @@ Examples # running makeRadsDB providing pfam annotations and sequences makeRadsDB -i domains1.pfam domains2.pfam -s seqs1.fa ses2.fa -o myDB - - diff --git a/docs/source/content/rads_usage.rst b/docs/source/content/rads_usage.rst index 05c7a65..94120eb 100644 --- a/docs/source/content/rads_usage.rst +++ b/docs/source/content/rads_usage.rst @@ -17,15 +17,15 @@ a protein sequence that will be automatically annotated, or already an existing .. code-block:: bash # running RADS providing a manual list of domains as query - rads -D PF02758 PF05729 --db InterPro60-pfam -m pfam30.dsm + rads -D PF02758 PF05729 --db InterPro60-pfam -m pfam30.dsm # running RADS providing a sequence as query - rads -Q seq.fasta --db InterPro60-pfam -m pfam30.dsm + rads -Q seq.fasta --db InterPro60-pfam -m pfam30.dsm # running RADS providing a domain annotation as query - rads -q seq.dom --db InterPro60-pfam -m pfam30.dsm + rads -q seq.dom --db InterPro60-pfam -m pfam30.dsm + - =============== Program Options =============== @@ -46,15 +46,15 @@ The general option influence the general behaviour of RADS: .. option:: -d , --db Prefix of the database. Can be either one of the precomputed ones downloaded from the website (see :ref:`setup`) or self-computed (see :ref:`makeRadsDB`). - + .. option:: -o , --out The output file. - + .. option:: -l, --list-alignments Report the alignments computed for the different domain arrangements. - + .. option:: -n , --threads The number of threads to be used by the program. Currently with this option several queries can be processed in parallel. If only one query is given, this program will still use only a single core. *Default: 1* @@ -69,15 +69,15 @@ The query options define the different ways a query can be provided. .. option:: -q , --query-dom The domain annotation file to be used as query. This is a simple domain annotation file in one of the supported formats (e.g. the output of ``pfam_scan.pl``). - + .. option:: -Q , --query-seq File containing sequences to be used as queries. The file has to be in FASTA format. - + .. option:: --domain-db - The domain database to use for automated annotation. - + The domain database to use for automated annotation. + .. option:: -D , --domains Provide a domain arrangement manually in form of space separated domain accession numbers (e.g. PF00001 PF00002). @@ -92,7 +92,7 @@ These parameters influence the alignment scoring similar to the same values in a .. option:: -m , --matrix - The domain similarity matrix. This one needs to fit the data in the database (e.g. If you work with a database that contain Pfam domains, use the corresponding Pfam similarity matrix. + The domain similarity matrix. This one needs to fit the data in the database meanint, that if you work with a database that contains Pfam domains, use the corresponding Pfam similarity matrix. .. option:: --gop Gap opening penalty. These costs are applied once for each consecutive set of gaps in a domain arrangement. They are not applied to gaps at the ends of the alignment. *Default: -50* @@ -101,7 +101,7 @@ These parameters influence the alignment scoring similar to the same values in a Gap extension penalty. These costs are applied to each single gap character in the alignment. *Default: -10* .. option:: -c, --collapse - Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is that it actually changes the domain arrangements. However, domains can often duplicate and several times the same domain in a row is not uncommon, usually without affecting the function of a protein. *Default: false* + Collapse consecutive identical domains. It is **recommended to use** this option. The reason why this is not automatically done is that it actually changes the domain arrangements. However, domains can often duplicate and several repeats of the same domain in a row is not uncommon, usually without affecting the function of a protein. *Default: false* ------------------------------ Result filtering options @@ -114,13 +114,13 @@ These options can be used to filter the hits that are reported. .. option:: -a, --all All of the domain IDs in the query have to appear in the target sequences as well. *Default: false* - + .. option:: -M , --min-score Only alignments with a score larger or equal to this value are reported. *Default: 0* - + =============== Output format =============== @@ -130,15 +130,15 @@ The table is sorted according to the first column. .. code-block:: text - # RADS version 2.2.0 - # RADS Output v1 - # run at Fri Apr 20 14:19:09 2018 - # - # query file: - - # database: interPro-test - # gap open penalty -50 - # gap extension penalty -10 - # matrix: pfam-31.dsm + # RADS version 2.2.0 + # RADS Output v1 + # run at Fri Apr 20 14:19:09 2018 + # + # query file: - + # database: interPro-test + # gap open penalty -50 + # gap extension penalty -10 + # matrix: pfam-31.dsm # all: false # collapse: true # ****************************************************************** @@ -155,10 +155,10 @@ The table is sorted according to the first column. 190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 -If you used the :option:`--list-alignments` option you will find additional output. An additional column denotes the alignment ID. The alignments can then be found at the end of the table. +If you used the :option:`--list-alignments` option you will find additional output. An additional column denotes the alignment ID. The alignments can then be found at the end of the table. .. note:: - + Be aware that if you use additionally the :option:`--collapse` option the table will still show the original domain arrangement, the alignment though will use the collapsed version. See example below. @@ -176,7 +176,7 @@ If you used the :option:`--list-alignments` option you will find additional outp # all: false # collapse: true # ****************************************************************** - + # ------------------------------------------------------------------- Results for: manual entered query Domain arrangement: PF00001 PF00002 PF00003 @@ -200,19 +200,7 @@ If you used the :option:`--list-alignments` option you will find additional outp 2) Query DA: PF00001 PF00002 PF00003 Target DA: PF00001 PF00002 ******* - + 3) Query DA: PF00001 PF00002 PF00003 Target DA: ******* PF00002 PF00003 - - -=============== -Citation -=============== - -If you find RADS useful in your research, please cite it. - -Terrapon, Nicolas, Weiner, January, Grath, Sonja, Moore, Andrew D, Bornberg-Bauer, Erich: Rapid similarity search of proteins using alignments of domain arrangements., Bioinformatics (2014) 30 (2): 274-281. doi: 10.1093/bioinformatics/btt379 - -http://bioinformatics.oxfordjournals.org/content/30/2/274.long - diff --git a/docs/source/index.rst b/docs/source/index.rst index 1e074e4..2b78d73 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -11,11 +11,12 @@ Welcome to RADS's documentation! :maxdepth: 2 :caption: Contents: + content/general.rst content/installation.rst content/setup.rst content/rads_usage.rst content/makedb_usage.rst - + .. only:: html @@ -24,5 +25,3 @@ Welcome to RADS's documentation! * :ref:`genindex` * :ref:`search` - - diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index 6c762f8..ddf1e48 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -77,15 +77,10 @@ main(int argc, char *argv[]) ("out,o", po::value(&prefix)->required()->value_name("FILE"), "The output prefix") ; - //std::vector databases; string database; - // unsigned int threshold; - // bool filter; po::options_description filterOpts("Filter options"); filterOpts.add_options() ("databases,d", po::value(&database), "The database to use") -// ("filter,f", po::value(&filter)->default_value(false)->zero_tokens(), "Remove overlapping domains") -// ("threshold,t", po::value(&threshold)->default_value(10), "Maximal number of allowed overlap") ; allOpts.add(general).add(filterOpts); @@ -120,8 +115,6 @@ main(int argc, char *argv[]) try { DBCreator db; - // db.filter(filter); - // db.threshold(threshold); size_t nDaFiles = daFiles.size(); for (size_t i=0; i dbSupported; - for (auto &db : databases) - dbSupported.emplace(std::move(db));*/ db.readInterPro(interProFile, database); - } // output std::map info; diff --git a/tests/data/db_pfam2.dom b/tests/data/db_pfam2.dom new file mode 100644 index 0000000..58eaf4c --- /dev/null +++ b/tests/data/db_pfam2.dom @@ -0,0 +1,44 @@ +# pfam_scan.pl, run at Fri Dec 2 10:10:58 2016 +# +# Copyright (c) 2009 Genome Research Ltd +# Freely distributed under the GNU +# General Public License +# +# Authors: Jaina Mistry (jm14@sanger.ac.uk), John Tate (jt6@sanger.ac.uk), +# Rob Finn (rdf@sanger.ac.uk) +# +# This is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . +# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +# query sequence file: db_seqs.fa +# searching against: /global/databases/pfam/v30.0//Pfam-A.hmm, with cut off --cut_ga +# resolve clan overlaps: on +# predict active sites: off +# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +# +# + +A0A001 20 276 11 277 PF00664.21 ABC_membrane Family 12 273 274 29.9 3.7e-07 1 CL0241 +A0A001 361 504 360 506 PF00005.25 ABC_tran Domain 2 135 137 80.1 1.9e-22 1 CL0023 +A0A007 3 105 1 105 PF02310.17 B12-binding Domain 19 121 121 49.3 3.9e-13 1 CL0063 +A0A007 164 324 163 325 PF04055.19 Radical_SAM Domain 2 166 167 89.0 3.8e-25 1 CL0036 +A0A002 19 279 8 279 PF00664.21 ABC_membrane Family 12 274 274 102.4 2.9e-29 1 CL0241 +A0A002 340 489 340 489 PF00005.25 ABC_tran Domain 1 137 137 93.3 1.6e-26 1 CL0023 +A0A003 15 249 15 249 PF01370.19 Epimerase Family 1 241 241 177.3 3.1e-52 1 CL0063 +A0A000 41 381 37 381 PF00155.19 Aminotran_1_2 Domain 6 363 363 206.8 4.9e-61 1 CL0061 +A0A004 49 162 48 163 PF13537.4 GATase_7 Domain 2 123 124 41.0 1.4e-10 1 CL0052 +A0A004 240 626 239 627 PF00733.19 Asn_synthase Domain 2 354 355 277.1 2.9e-82 1 CL0039 +A0A009 362 524 361 526 PF16861.3 Carbam_trans_C Domain 2 168 170 151.4 1.5e-44 1 No_clan +A0A009 10 63 2 69 PF02543.13 Carbam_trans_N Domain 11 66 338 33.8 2.6e-08 1 CL0108 +A0A009 104 312 86 313 PF02543.13 Carbam_trans_N Domain 123 337 338 62.5 4.9e-17 1 CL0108 +A0A009DWE1 1 126 1 126 PF00873.17 ACR_tran Family 209 329 1021 109.5 9.6e-32 1 CL0322 +A0A010 10 63 2 69 PF02543.13 Carbam_trans_N Domain 11 66 338 33.8 2.6e-08 1 CL0108 +A0A010 362 524 361 526 PF16861.3 Carbam_trans_C Domain 2 168 170 151.4 1.5e-44 1 No_clan diff --git a/tests/data/sort-test.xml b/tests/data/sort-test.xml new file mode 100644 index 0000000..e294677 --- /dev/null +++ b/tests/data/sort-test.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/integrationTests/results/test-col-aln.txt b/tests/integrationTests/results/test-col-aln.txt new file mode 100644 index 0000000..769949e --- /dev/null +++ b/tests/integrationTests/results/test-col-aln.txt @@ -0,0 +1,35 @@ +# RADS version 2.3.0 +# RADS Output v1 +# run at Thu Jun 28 11:22:17 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/annotation +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: true +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF02543 PF16861 + +# score | normalized | SeqID | sequence length | domain arrangement | aln +# ------------------------------------------------------------------- +200 0.71 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 1 +200 1.00 A0A010 0 PF02543 9 62 PF16861 361 523 2 + + +# ------------------------------------------------------------------- +List of alignments: +# ------------------------------------------------------------------- + +1) + Query DA: PF02543 PF16861 +Target DA: PF02543 PF16861 + +2) + Query DA: PF02543 PF16861 +Target DA: PF02543 PF16861 + diff --git a/tests/integrationTests/results/test-order.txt b/tests/integrationTests/results/test-order.txt new file mode 100644 index 0000000..84a214c --- /dev/null +++ b/tests/integrationTests/results/test-order.txt @@ -0,0 +1,31 @@ +# RADS version 2.3.0 +# RADS Output v1 +# run at Thu Jun 28 13:18:17 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/ip_order +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: true +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF00001 + +# score | normalized | SeqID | sequence length | domain arrangement | aln +# ------------------------------------------------------------------- +80 0.35 A0A000 394 PF00001 41 60 PF00002 80 100 PF00003 125 250 1 +80 0.35 A0A001 394 PF00001 41 60 PF00002 80 100 PF00003 120 250 1 + + +# ------------------------------------------------------------------- +List of alignments: +# ------------------------------------------------------------------- + +1) + Query DA: PF00001 ******* ******* +Target DA: PF00001 PF00002 PF00003 + diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index ac4d636..5da2a2b 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -71,3 +71,36 @@ rm interPro-test.db interPro-test.da rm test3Res.txt test3bRes.txt test2Res.txt test4Res.txt } + + +@test "rads - collapse and align" { + # database based on pfam annotation files + run ../../build/makeRadsDB -i ../data/db_pfam2.dom -s ../data/db_seqs.fa -o annotation + [ $status == 0 ] + echo $output + [ "$output" == $'Number of sequences included: 9\nNumber of distinct arrangements 8' ] + + run ../../build/rads -D PF02543 PF16861 -m pfam-31.dsm -d annotation -o test-col-aln.txt -c -l + + run diff <(grep -v '#' test-col-aln.txt) <(grep -v '#' results/test-col-aln.txt) + [ $status == 0 ] + + rm annotation.db annotation.da test-col-aln.txt +} + + + +@test "rads - InterPro order" { + # database based on pfam annotation files + run ../../build/makeRadsDB -I ../data/sort-test.xml -s ../data/db_seqs.fa -o ip_order -d PFAM + [ $status == 0 ] + echo $output + [ "$output" == $'Number of sequences included: 3\nNumber of distinct arrangements 2' ] + + run ../../build/rads -D PF00001 -m pfam-31.dsm -d ip_order -o test-order.txt -c -l + + run diff <(grep -v '#' test-order.txt) <(grep -v '#' results/test-order.txt) + [ $status == 0 ] + + rm ip_order.db ip_order.da test-order.txt +} \ No newline at end of file -- GitLab From 45c6d419253c7fe9c47c62812efa8398a19a56dd Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Thu, 28 Jun 2018 17:48:56 +0200 Subject: [PATCH 15/24] fixed collapse option - query is now cllapsed as well - fixed calculation of normalized score when using collapse option --- CHANGELOG | 1 + src/DBAccess.cpp | 6 ++-- src/DBCreator.cpp | 10 +++++- src/makeRadsDB.cpp | 3 ++ tests/data/db_seqs.fa | 10 ++++++ .../integrationTests/results/test-col-aln.txt | 6 ++-- .../results/test-collapse.txt | 31 +++++++++++++++++++ tests/integrationTests/runTests.sh | 19 +++++++++++- 8 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 tests/integrationTests/results/test-collapse.txt diff --git a/CHANGELOG b/CHANGELOG index 057b3ef..3c23336 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ v. 2.3.0 - added option to display computed alignments +- added option to collapse domain repeats - updated manual and changed to sphinx v. 2.2.0 diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index 46c3ea5..faa2c26 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -57,6 +57,7 @@ DBAccess::search(BSDL::AlignmentMatrix &matrix, bool all, bool c RadsQueryResult &results) { auto &queryDA = results.queryDA; + queryDA.collapse(true); string query = "Select position from domain where accession in ('" + queryDA[0].accession() + "'"; size_t nDomains = queryDA.size(); for (size_t i=1; i &matrix, bool all, bool c } // calculate score for the domain arrangement - size_t targetLength = targetDA.size(); int order = targetDA.size(); if (collapse) targetDA.collapse(true); - order -= targetDA.size(); + size_t targetLength = targetDA.size(); + order -= targetLength; matrix.gotoh(queryDA, targetDA); int score = matrix.score(); if (score < scoreThres) @@ -152,6 +153,7 @@ DBAccess::search(BSDL::AlignmentMatrix &matrix, bool all, bool c { return a.order < b.order; }); + queryDA.reconstruct(); } results.sort(); } diff --git a/src/DBCreator.cpp b/src/DBCreator.cpp index 7e30b4e..b4be5da 100644 --- a/src/DBCreator.cpp +++ b/src/DBCreator.cpp @@ -234,7 +234,15 @@ DBCreator::readAnnotationFile(const fs::path &annotationFile, const fs::path &se // read each sequence seperately for (auto pair : domSet) { - string seqLength = sequenceFile.empty() ? "0" : to_string(seqLengths[pair.first]); + string seqLength; + if (sequenceFile.empty()) + seqLength="0"; + else + { + seqLength = to_string(seqLengths[pair.first]); + if (seqLength == "0") + cerr << "WARNING! " << pair.first << " not in sequence file. Protein length will be set to 0.\n"; + } this->addDomainArrangement_(pair.second, pair.first, seqLength); } } diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index ddf1e48..1593ddd 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -121,7 +121,10 @@ main(int argc, char *argv[]) if (!seqFiles.empty()) db.readAnnotationFile(daFiles[i], seqFiles[i]); else + { + cerr << "WARNING! No sequence file provided, protein lengths will be set to 0.\n"; db.readAnnotationFile(daFiles[i], fs::path("")); + } } if (!interProFile.empty()) diff --git a/tests/data/db_seqs.fa b/tests/data/db_seqs.fa index 3e0b7a1..bccc877 100644 --- a/tests/data/db_seqs.fa +++ b/tests/data/db_seqs.fa @@ -65,6 +65,16 @@ ACGDAGHLTGAGLYALAQVAGVKPEPFSVYRNGGGEARAAVLEAVEGAGLRAVPYDRSAV AGVLAGGGVVALTQGAAELGPRALGHRSLLGSPAVPGMRERMSEKLKRREWFRPLGAVMR DERFAGLYPGRAPSPYMLFEYRLPDGIAPEARHVNGTCRIQTLGPEEDRLYGLLAEFEEL SGVPALINTSLNGPGKPIAHTARDVLDDFARTDVDLFVFDDLMVRGAAAR +>A0A010 +MKVLSLHSAGHDTGVAYFEDGRLVFAVETERLTRVKHDHRSDVALRHVLEQECVDTDGID +LVAVSTPVRSGLLRIPDLDRAMERIGAGALHHRTVCEMLGRRVECVVVTHEVSHAALAAH +YADWEEGTVVLVNEGRGQLTRSSLFRVTGGALEWVDKDPLPWYGNGFGWTAIGYLLGFGP +SPSVAGKVMAMGGYGQPDPRIREQLLSVDPEVMNDRELAERVRADLAGRPEFAPGFETAS +QVVATFQEMFTEAVRAVLDRHVTRTDAGVGPIALGGGCALNIVANSALREEYGRDVAIPP +ACGDAGHLTGAGLYALAQVAGVKPEPFSVYRNGGGEARAAVLEAVEGAGLRAVPYDRSAV +AGVLAGGGVVALTQGAAELGPRALGHRSLLGSPAVPGMRERMSEKLKRREWFRPLGAVMR +DERFAGLYPGRAPSPYMLFEYRLPDGIAPEARHVNGTCRIQTLGPEEDRLYGLLAEFEEL +SGVPALINTSLNGPGKPIAHTARDVLDDFARTDVDLFVFDDLMVRGAAAR >A0A009DWE1 EQNIQVAAGTIGASPSNSPLQLSVNAQGRLTTEQEFADIILKTAPDGAVTRLGDVARVEL AASQYGLRSLLDNKQAVAIPIFQAPGANALQVSDQVRSTMKELSKDFPSSIKYDIVYDPT diff --git a/tests/integrationTests/results/test-col-aln.txt b/tests/integrationTests/results/test-col-aln.txt index 769949e..ddbd36a 100644 --- a/tests/integrationTests/results/test-col-aln.txt +++ b/tests/integrationTests/results/test-col-aln.txt @@ -1,6 +1,6 @@ # RADS version 2.3.0 # RADS Output v1 -# run at Thu Jun 28 11:22:17 2018 +# run at Thu Jun 28 17:15:52 2018 # # query file: - # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/annotation @@ -17,8 +17,8 @@ Domain arrangement: PF02543 PF16861 # score | normalized | SeqID | sequence length | domain arrangement | aln # ------------------------------------------------------------------- -200 0.71 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 1 -200 1.00 A0A010 0 PF02543 9 62 PF16861 361 523 2 +200 1.00 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 1 +200 1.00 A0A010 530 PF02543 9 62 PF16861 361 523 2 # ------------------------------------------------------------------- diff --git a/tests/integrationTests/results/test-collapse.txt b/tests/integrationTests/results/test-collapse.txt new file mode 100644 index 0000000..cc89934 --- /dev/null +++ b/tests/integrationTests/results/test-collapse.txt @@ -0,0 +1,31 @@ +# RADS version 2.3.0 +# RADS Output v1 +# run at Thu Jun 28 17:44:56 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/ip_order +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: true +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF00001 PF00001 + +# score | normalized | SeqID | sequence length | domain arrangement | aln +# ------------------------------------------------------------------- +80 0.35 A0A000 394 PF00001 41 60 PF00002 80 100 PF00003 125 250 1 +80 0.35 A0A001 394 PF00001 41 60 PF00002 80 100 PF00003 120 250 1 + + +# ------------------------------------------------------------------- +List of alignments: +# ------------------------------------------------------------------- + +1) + Query DA: PF00001 ******* ******* +Target DA: PF00001 PF00002 PF00003 + diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index 5da2a2b..4e2c5a0 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -103,4 +103,21 @@ [ $status == 0 ] rm ip_order.db ip_order.da test-order.txt -} \ No newline at end of file +} + + + +@test "rads - query collapse" { + # database based on pfam annotation files + run ../../build/makeRadsDB -I ../data/sort-test.xml -s ../data/db_seqs.fa -o ip_order -d PFAM + [ $status == 0 ] + echo $output + [ "$output" == $'Number of sequences included: 3\nNumber of distinct arrangements 2' ] + + run ../../build/rads -D PF00001 PF00001 -m pfam-31.dsm -d ip_order -o test-collapse.txt -c -l + + run diff <(grep -v '#' test-collapse.txt) <(grep -v '#' results/test-collapse.txt) + [ $status == 0 ] + + rm ip_order.db ip_order.da test-collapse.txt +} -- GitLab From b19337ba14cc2a9697625afb481c8f951d163b0c Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 09:10:58 +0200 Subject: [PATCH 16/24] fixed sorting my collapse state --- src/DBAccess.cpp | 73 ++++++++++--------- src/DBAccess.hpp | 49 +++---------- .../integrationTests/results/test-col-aln.txt | 6 +- tests/integrationTests/results/test4Res.txt | 8 +- 4 files changed, 57 insertions(+), 79 deletions(-) diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index faa2c26..2857caa 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -51,6 +51,38 @@ void DBAccess::open(const fs::path &prefix) arrangementDB_.open(dbFile); } +void +DBAccess::readSequences_(RadsQueryResult &results, const std::vector &domainNames) +{ + size_t nDomains = domainNames.size(); + std::string line; + while(getline(this->arrangementDB_, line)) + { + if (line[0] =='>') + break; + + const char *c_line = line.c_str(); + size_t pos = line.find(' '); + string name(line.begin(), line.begin()+pos); + char *tmp; + c_line += pos; + results.targets.back().targetSequences.emplace_back(std::move(name), strtoul(c_line, &tmp, 10)); + auto &da = results.targets.back().targetSequences.back().da; + size_t start, end; + double eval; + c_line = tmp; + for (size_t i=0; i &matrix, bool all, bool collapse, int scoreThres, @@ -81,7 +113,6 @@ DBAccess::search(BSDL::AlignmentMatrix &matrix, bool all, bool c this->arrangementDB_.seekg(pos, std::ios_base::beg); getline(this->arrangementDB_, line); auto domains = BSDL::split(line, ">;"); - size_t nDomains = domains.size(); BSDL::DomainArrangement targetDA; for (auto &domain : domains) targetDA.emplace_back(domain, 0, 0, 0); @@ -105,54 +136,26 @@ DBAccess::search(BSDL::AlignmentMatrix &matrix, bool all, bool c } // calculate score for the domain arrangement - int order = targetDA.size(); + int priority = targetDA.size(); if (collapse) targetDA.collapse(true); - size_t targetLength = targetDA.size(); - order -= targetLength; matrix.gotoh(queryDA, targetDA); int score = matrix.score(); if (score < scoreThres) continue; + size_t targetLength = targetDA.size(); + priority -= targetLength; // Store information in the Results int minScore = (queryLength+targetLength) * matrix.gep(); double normScore = min((score-minScore)*1.0/(queryLength*100-minScore),(score-minScore)*1.0/(targetLength*100-minScore)); auto aln = matrix.result(); auto alnStrings = aln.alnStrings(queryDA, targetDA); - results.targets.emplace_back(std::move(targetDA), std::move(alnStrings.first), std::move(alnStrings.second), score, normScore); + results.targets.emplace_back(std::move(targetDA), std::move(alnStrings.first), std::move(alnStrings.second), score, normScore, priority); // add all sequences having the same domain arrangement - while(getline(this->arrangementDB_, line)) - { - if (line[0] =='>') - break; - - const char *c_line = line.c_str(); - size_t pos = line.find(' '); - string name(line.begin(), line.begin()+pos); - char *tmp; - c_line += pos; - results.targets.back().targetSequences.emplace_back(std::move(name), strtoul(c_line, &tmp, 10), order); - auto &da = results.targets.back().targetSequences.back().da; - size_t start, end; - double eval; - c_line = tmp; - for (size_t i=0; i bool - { - return a.order < b.order; - }); + readSequences_(results, domains); + queryDA.reconstruct(); } results.sort(); diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index 4d12760..cb02c05 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -39,26 +39,6 @@ namespace BSDL = BioSeqDataLib; namespace fs = boost::filesystem; -/* -struct RadsOptions -{ - enum Algorithm - { - NW, NW_RASPODOM, GOTOH, GOTOH_RASPODOM - }; - - // scoring options - BSDL::DSM similarityMatrix; - int gop; - int gep; - - // domain content options - bool all; - bool collapse; - - Algorithm algo; -};*/ - /** * \brief Represents a single target sequence */ @@ -66,14 +46,13 @@ struct TargetSequence { std::string targetName; /// The sequence name size_t length; /// The sequence length - int order; BSDL::DomainArrangement da; /// The domain arrangement - TargetSequence() : targetName(""), length(0), order(0) + TargetSequence() : targetName(""), length(0) {} - TargetSequence(std::string t, size_t l, int o) : targetName(t), length(l), order(o) + TargetSequence(std::string t, size_t l) : targetName(t), length(l) {} }; @@ -88,16 +67,16 @@ struct RadsHit int score; /// Score of the alignment double normalized; /// normalized score of the alignment + int priority; /// Helps sorting the DAs if alignment score is equal. Low value, means less collapsing, listed first std::vector targetSequences; /// The set of sequences having this arrangement - RadsHit(BSDL::DomainArrangement &&d, std::string &&alnStringQ, std::string &&alnStringT, int s, double n): - da(std::move(d)), alnStringQuery(std::move(alnStringQ)), alnStringTarget(std::move(alnStringT)), score(s), normalized(n) + RadsHit(BSDL::DomainArrangement &&d, std::string &&alnStringQ, std::string &&alnStringT, int s, double n, int p): + da(std::move(d)), alnStringQuery(std::move(alnStringQ)), alnStringTarget(std::move(alnStringT)), score(s), normalized(n), priority(p) {} }; - /** * \brief Complete set of targets for the given query */ @@ -112,13 +91,15 @@ struct RadsQueryResult { std::sort(this->targets.begin(), this->targets.end(), [](const RadsHit &a, const RadsHit &b) -> bool { - return a.score > b.score; + if (a.score != b.score) + return a.score > b.score; + else // if score is equal list non collapsed domain arrangements first + return a.priority < b.priority; }); } }; - class DBAccess { private: @@ -126,17 +107,11 @@ class DBAccess AlgorithmPack::Input arrangementDB_; // The file object containing the domain arrangements BSDL::DSM similarityMatrix_; // The similarity matrix to be used. + void + readSequences_(RadsQueryResult &results, const std::vector &vectorNames); + public: - /* struct comparePairs { - bool operator()(const std::pair& lhs, const std::pair& rhs) - { - if (lhs.first != rhs.first) - return lhs.first > rhs.first; - else - return lhs.second < rhs.second; - } - };*/ /** * @brief Construct a new DBAccess object * diff --git a/tests/integrationTests/results/test-col-aln.txt b/tests/integrationTests/results/test-col-aln.txt index ddbd36a..5eb29b8 100644 --- a/tests/integrationTests/results/test-col-aln.txt +++ b/tests/integrationTests/results/test-col-aln.txt @@ -1,6 +1,6 @@ # RADS version 2.3.0 # RADS Output v1 -# run at Thu Jun 28 17:15:52 2018 +# run at Fri Jun 29 09:02:21 2018 # # query file: - # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/annotation @@ -17,8 +17,8 @@ Domain arrangement: PF02543 PF16861 # score | normalized | SeqID | sequence length | domain arrangement | aln # ------------------------------------------------------------------- -200 1.00 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 1 -200 1.00 A0A010 530 PF02543 9 62 PF16861 361 523 2 +200 1.00 A0A010 530 PF02543 9 62 PF16861 361 523 1 +200 1.00 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 2 # ------------------------------------------------------------------- diff --git a/tests/integrationTests/results/test4Res.txt b/tests/integrationTests/results/test4Res.txt index 42f8a93..b7d83af 100644 --- a/tests/integrationTests/results/test4Res.txt +++ b/tests/integrationTests/results/test4Res.txt @@ -1,6 +1,6 @@ -# RADS version 2.2.0 +# RADS version 2.3.0 # RADS Output v1 -# run at Fri Jun 22 17:06:20 2018 +# run at Fri Jun 29 09:02:21 2018 # # query file: - # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro-test @@ -15,11 +15,11 @@ Results for: manual entered query Domain arrangement: PF00001 PF00002 PF00003 -# score | normalized | SeqID | sequence length | domain arrangement | aln +# score | normalized | SeqID | sequence length | domain arrangement # ------------------------------------------------------------------- 300 1.00 test-seq1 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 300 1.00 test-seq2 530 PF00001 10 63 PF00002 104 312 PF00003 362 524 -190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 190 0.69 test-seq3 530 PF00002 104 312 PF00003 362 524 +190 0.69 test-seq5 530 PF00001 10 63 PF00002 104 312 PF00002 362 524 -- GitLab From 165a9062c93b763b60cd91543ce989b26b220edb Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 14:30:01 +0200 Subject: [PATCH 17/24] added first test, fixed -1 shift in outputs of databases build of domain annotation files --- src/DBAccess.cpp | 17 +-- src/DBAccess.hpp | 18 +-- src/DBCreator.cpp | 2 +- src/rads.cpp | 6 +- tests/CMakeLists.txt | 2 +- .../integrationTests/results/test-col-aln.txt | 6 +- tests/unitTests/DBAccess_Test.hpp | 109 ++++++------------ 7 files changed, 57 insertions(+), 103 deletions(-) diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index 2857caa..f0649cc 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -25,19 +25,12 @@ using namespace std; -DBAccess::DBAccess(const fs::path &prefix, const fs::path &matrix) +DBAccess::DBAccess(const fs::path &prefix) { open(prefix); - setMatrix(matrix); } -void -DBAccess::setMatrix(const fs::path &matrix) -{ - similarityMatrix_.read(matrix); - similarityMatrix_.useNegative(true); -} void DBAccess::open(const fs::path &prefix) @@ -52,7 +45,7 @@ void DBAccess::open(const fs::path &prefix) } void -DBAccess::readSequences_(RadsQueryResult &results, const std::vector &domainNames) +DBAccess::readSequences_(std::vector &sequences, const std::vector &domainNames) { size_t nDomains = domainNames.size(); std::string line; @@ -66,8 +59,8 @@ DBAccess::readSequences_(RadsQueryResult &results, const std::vector &matrix, bool all, bool c results.targets.emplace_back(std::move(targetDA), std::move(alnStrings.first), std::move(alnStrings.second), score, normScore, priority); // add all sequences having the same domain arrangement - readSequences_(results, domains); + readSequences_(results.targets.back().targetSequences, domains); queryDA.reconstruct(); } diff --git a/src/DBAccess.hpp b/src/DBAccess.hpp index cb02c05..ba2e6ac 100644 --- a/src/DBAccess.hpp +++ b/src/DBAccess.hpp @@ -99,16 +99,18 @@ struct RadsQueryResult } }; - +/** + * \brief Class to access a RADS database and perform searches. + * + */ class DBAccess { private: SQLiteDB index_; // The object used to connect to the sqlite database. AlgorithmPack::Input arrangementDB_; // The file object containing the domain arrangements - BSDL::DSM similarityMatrix_; // The similarity matrix to be used. void - readSequences_(RadsQueryResult &results, const std::vector &vectorNames); + readSequences_(std::vector &sequences, const std::vector &vectorNames); public: @@ -125,7 +127,7 @@ class DBAccess * @param prefix The prefix of the database path. * @param matrix The filename of the DSM to be used. */ - DBAccess(const fs::path &prefix, const fs::path&matrix); + DBAccess(const fs::path &prefix); /** * @brief Opens the database @@ -135,14 +137,6 @@ class DBAccess void open(const fs::path &prefix); - /** - * @brief Set the Matrix object to be used for the alignment. - * - * @param matrix The filename of the DSM to be used. - */ - void - setMatrix(const fs::path &matrix); - /** * @brief Searches in the database for matching sequences. * diff --git a/src/DBCreator.cpp b/src/DBCreator.cpp index b4be5da..bde305d 100644 --- a/src/DBCreator.cpp +++ b/src/DBCreator.cpp @@ -203,7 +203,7 @@ DBCreator::readInterPro(const fs::path &interProFile, const std::string &include string start(m[1].first, m[1].second); string end(m[2].first, m[2].second); string score(m[3].first, m[3].second); - da.emplace_back(domainAcc, stoul(start), stoul(end), stod(score)); + da.emplace_back(domainAcc, stoul(start)-1, stoul(end)-1, stod(score)); } } // end of protein, store in dbContent diff --git a/src/rads.cpp b/src/rads.cpp index d0f05fc..249b0bb 100644 --- a/src/rads.cpp +++ b/src/rads.cpp @@ -84,9 +84,9 @@ printResult(const RadsQueryResult &results, AP::Output &outS, bool listAlignment buf << hit.score << "\t" << hit.normalized << "\t" << seq.targetName << "\t" << seq.length << "\t"; const auto &da = seq.da; size_t len = da.size(); - buf << da[0].accession() << " " << da[0].start() << " " << da[0].end(); + buf << da[0].accession() << " " << da[0].start()+1 << " " << da[0].end()+1; for (size_t i = 1; i querySet; //read query arrangement diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8e48d41..235c71d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,7 +13,7 @@ FUNCTION(PREPEND var prefix) SET(${var} "${listVar}" PARENT_SCOPE) ENDFUNCTION(PREPEND) -SET(tests_src ./unitTests/tests.cpp ../src/external/SQLiteDB.cpp ${BSDL_src}) +SET(tests_src ./unitTests/tests.cpp ../src/DBAccess.cpp ../src/external/SQLiteDB.cpp ${BSDL_src}) SET(tests_exe tests) ADD_EXECUTABLE(${tests_exe} ${tests_src}) target_link_libraries(${tests_exe} diff --git a/tests/integrationTests/results/test-col-aln.txt b/tests/integrationTests/results/test-col-aln.txt index 5eb29b8..0348f8b 100644 --- a/tests/integrationTests/results/test-col-aln.txt +++ b/tests/integrationTests/results/test-col-aln.txt @@ -1,6 +1,6 @@ # RADS version 2.3.0 # RADS Output v1 -# run at Fri Jun 29 09:02:21 2018 +# run at Fri Jun 29 14:25:11 2018 # # query file: - # database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/annotation @@ -17,8 +17,8 @@ Domain arrangement: PF02543 PF16861 # score | normalized | SeqID | sequence length | domain arrangement | aln # ------------------------------------------------------------------- -200 1.00 A0A010 530 PF02543 9 62 PF16861 361 523 1 -200 1.00 A0A009 530 PF02543 9 62 PF02543 103 311 PF16861 361 523 2 +200 1.00 A0A010 530 PF02543 10 63 PF16861 362 524 1 +200 1.00 A0A009 530 PF02543 10 63 PF02543 104 312 PF16861 362 524 2 # ------------------------------------------------------------------- diff --git a/tests/unitTests/DBAccess_Test.hpp b/tests/unitTests/DBAccess_Test.hpp index 9a20eb5..883771c 100644 --- a/tests/unitTests/DBAccess_Test.hpp +++ b/tests/unitTests/DBAccess_Test.hpp @@ -23,87 +23,54 @@ #include -//#include "../../src/db.hpp" +#include "../../src/DBAccess.hpp" #include "../../libs/BioSeqDataLib/src/DomainModule.hpp" +#include "../../libs/BioSeqDataLib/src/utility/Settings.hpp" -#ifndef DB_TEST_HPP_ -#define DB_TEST_HPP_ +#ifndef DBACCESS_TEST_HPP_ +#define DBACCESS_TEST_HPP_ -BOOST_AUTO_TEST_SUITE(DB_Test) +BOOST_AUTO_TEST_SUITE(DBACCESS_Test) namespace BSDL=BioSeqDataLib; -BOOST_AUTO_TEST_CASE( cleanDA_TEST) +BOOST_AUTO_TEST_CASE( search_TEST) { - -} -/* -BOOST_AUTO_TEST_CASE( cleanDA_TEST) -{ - BSDL::DomainArrangement da; - da.emplace_back("G3DSA:3.40.50.620", 155, 297, 2.2e-10); - da.emplace_back("G3DSA:3.40.50.620", 357, 425, 2.2e-10); - da.emplace_back("G3DSA:3.60.20.10", 47, 139, 2.5e-12); - da.emplace_back("PF00733", 166, 412, 0.00022); - da.emplace_back("SSF52402", 154, 303, 5.5e-13); - da.emplace_back("SSF52402", 358, 422, 5.5e-13); - da.emplace_back("SSF56235", 46, 143, 7.14e-14); - BSDL::DomainArrangement da2 = da; - - std::set querySet = {"PF13537", "SSF52402"}; - cleanDA(da, querySet, 10); - BOOST_CHECK_EQUAL(da.size(), 3); - BOOST_CHECK_EQUAL(da[0].accession(), "SSF56235"); - BOOST_CHECK_EQUAL(da[1].accession(), "SSF52402"); - BOOST_CHECK_EQUAL(da[2].accession(), "SSF52402"); - - cleanDA(da2, {}, 10); - BOOST_CHECK_EQUAL(da2.size(), 2); - BOOST_CHECK_EQUAL(da2[0].accession(), "SSF56235"); - BOOST_CHECK_EQUAL(da2[1].accession(), "PF00733"); -}*/ + DBAccess db("../tests/data/test"); + BSDL::Settings settings; + settings.readSettings(); + auto matrixName = settings["dsm"] / "pfam-31.dsm"; + BioSeqDataLib::DSM simMat; + simMat.read(matrixName); + simMat.useNegative(true); + BSDL::AlignmentMatrix matrix(-50, -10, simMat); + RadsQueryResult results; + results.queryDA.emplace_back("PF00005",4,20,0); + db.search(matrix, false, false, 0, results); + + BOOST_CHECK_EQUAL(results.targets.size(),1); + auto &sequences = results.targets[0].targetSequences; + BOOST_CHECK_EQUAL(sequences.size(), 2); + BOOST_CHECK_EQUAL(sequences[0].targetName, "A0A001"); + BOOST_CHECK_EQUAL(sequences[1].targetName, "A0A002"); + auto &da = sequences[1].da; + BOOST_CHECK_EQUAL(da.size(), 2); + BOOST_CHECK_EQUAL(da[0].accession(), "PF00664"); + BOOST_CHECK_EQUAL(da[0].start(), 18); + BOOST_CHECK_EQUAL(da[0].end(), 278); + BOOST_CHECK_CLOSE(da[0].evalue(), 2.9e-29, 0.001); + BOOST_CHECK_EQUAL(da[1].accession(), "PF00005"); + BOOST_CHECK_EQUAL(da[1].start(), 339); + BOOST_CHECK_EQUAL(da[1].end(), 488); + BOOST_CHECK_CLOSE(da[1].evalue(), 1.6e-26, 0.001); + +// A0A001 591 19 275 3.7e-07 360 503 1.9e-22 +//A0A002 564 18 278 2.9e-29 339 488 1.6e-26 - - -/* -BOOST_AUTO_TEST_CASE( domainIDSearch_Test) -{ - SQLiteDB db; - db.open("../tests/test.db"); - std::map acc2ids; - std::set accs = {"PF00155"}; - - getDomIDs(db, accs, acc2ids); - BOOST_CHECK_EQUAL(acc2ids.size(), 1); - BOOST_CHECK_EQUAL(acc2ids.begin()->first, "PF00155"); - BOOST_CHECK_EQUAL(acc2ids.begin()->second, "1"); - - - std::map acc2ids2; - std::set accs2 = {"PF00155", "SSF53756"}; - - getDomIDs(db, accs2, acc2ids2); - BOOST_CHECK_EQUAL(acc2ids2.size(), 2); - BOOST_CHECK_EQUAL(acc2ids2.begin()->first, "PF00155"); - BOOST_CHECK_EQUAL(acc2ids2.begin()->second, "1"); - BOOST_CHECK_EQUAL(acc2ids2.rbegin()->first, "SSF53756"); - BOOST_CHECK_EQUAL(acc2ids2.rbegin()->second, "16"); + } -BOOST_AUTO_TEST_CASE( search_Test) -{ - SQLiteDB db; - db.open("../tests/test.db"); - std::set da = {"PF13537", "SSF52402"}; - BSDL::DomainArrangementSet result; - runDASearch(db, da, result, 1, false); - BOOST_CHECK_EQUAL(result.size(), 2); - - BSDL::DomainArrangementSet result2; - runDASearch(db, da, result2, 2); - BOOST_CHECK_EQUAL(result2.size(), 1); -}*/ BOOST_AUTO_TEST_SUITE_END() @@ -111,4 +78,4 @@ BOOST_AUTO_TEST_SUITE_END() -#endif /* TWOVALUES_TEST_HPP_ */ +#endif /* DBACCESS_TEST_HPP_ */ -- GitLab From 068a56fda38b1570a92db0195d1e11716862e572 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 14:38:53 +0200 Subject: [PATCH 18/24] fixed 1 shift in databases based on domain annotation files, added first test --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 3c23336..720994e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ v. 2.3.0 - added option to display computed alignments - added option to collapse domain repeats - updated manual and changed to sphinx +- fixed 1 shift in databases build on domain annotation files v. 2.2.0 - internal code improvements -- GitLab From 689617a710fc55a1874efb6505b2fd96257a6c46 Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 14:39:10 +0200 Subject: [PATCH 19/24] fixed 1 shift in databases based on domain annotation files, added first test --- tests/data/test.da | 17 ++++++++++++++ tests/data/test.db | Bin 0 -> 24576 bytes .../integrationTests/results/testQuerySeq.txt | 22 ++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 tests/data/test.da create mode 100644 tests/data/test.db create mode 100644 tests/integrationTests/results/testQuerySeq.txt diff --git a/tests/data/test.da b/tests/data/test.da new file mode 100644 index 0000000..85331fe --- /dev/null +++ b/tests/data/test.da @@ -0,0 +1,17 @@ +>PF00155 +A0A000 394 40 380 4.9e-61 +>PF00664;PF00005 +A0A001 591 19 275 3.7e-07 360 503 1.9e-22 +A0A002 564 18 278 2.9e-29 339 488 1.6e-26 +>PF00873 +A0A009DWE1 126 0 125 9.6e-32 +>PF01370 +A0A003 340 14 248 3.1e-52 +>PF02310;PF04055 +A0A007 407 2 104 3.9e-13 163 323 3.8e-25 +>PF02543;PF02543;PF16861 +A0A009 530 9 62 2.6e-08 103 311 4.9e-17 361 523 1.5e-44 +>PF02543;PF16861 +A0A010 530 9 62 2.6e-08 361 523 1.5e-44 +>PF13537;PF00733 +A0A004 645 48 161 1.4e-10 239 625 2.9e-82 diff --git a/tests/data/test.db b/tests/data/test.db new file mode 100644 index 0000000000000000000000000000000000000000..f97340f1fe58fc74a19c4be7c199e7b0f0311c70 GIT binary patch literal 24576 zcmeI)KWx-i90%~{v+w_zA4_zK(&0%Am#E3bj&lhT103N{BSIREfQm$Wa$*Nr6JSdb752nh)>z*1F$fd!E0(1G`h?e;p*F;&I)>HNFjdrvvP z_qi;m=l9N@SqfrbZbaLCHo^tmrD?wybDb@-Od(Xnu0jq(4Od zz&C=<(SrlGX;P&q5P$##AOHafKmY;|fB*y_@UaLS%NOdSquQ52==ooJQGe0n=mue7 zq1$P%cI4vniOv@?>5-o=bEbO7-Su^UFbJY>BGQZXkr8dT9lL9reh_X%d>QGVueOgb zbtJcpHv+GrK5kX6bQe#zyBFlC&V@487+ON8sJN|H^ zH6fSJEiFwnj6(g$h$i-iJlNV)Kb(8+PONULrqJVC^=yv$SS#|}b{F>enklU#&+%XsNZ)(ui2bdueF_E)0^(Qm;J8m4Ne@FQ-M^?o*TQ<-dgX< zhTETMs^|RW)L^)M;BO6@8?Ky+q#K4&?DGBrUjNV0yS?@QeV8C_0Rad=00Izz00bZa z0SG_<0uX?}{t5iG{+~Sm?+bcMFX8-@ifOP7r_q1Rwwb z2tWV=5P$##AOL~?wLn$pz4$ht0Z<*v%W2Lh2bf82@m~L8n)4w6m7%~-{LYnjL h|9qPB)_)_*)$s$hELUd$=oNjeobLJ0n$=+dx%XRt{E7eo literal 0 HcmV?d00001 diff --git a/tests/integrationTests/results/testQuerySeq.txt b/tests/integrationTests/results/testQuerySeq.txt new file mode 100644 index 0000000..136c5c2 --- /dev/null +++ b/tests/integrationTests/results/testQuerySeq.txt @@ -0,0 +1,22 @@ +# RADS version 2.3.0 +# RADS Output v1 +# run at Fri Jun 29 14:11:14 2018 +# +# query file: /local/home/ckeme_01/projects/domainWorld/RADS/tests/data/query_seqs.fa +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/interPro +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: false +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: tr|A0A000|A0A000_9ACTN +Domain arrangement: PF00155 + +# score | normalized | SeqID | sequence length | domain arrangement +# ------------------------------------------------------------------- +100 1.00 A0A000 394 PF00155 42 382 + + -- GitLab From 479797f2b327a0524f42a935ed3661c77421b0ed Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 16:27:14 +0200 Subject: [PATCH 20/24] added multi domain file test and errors --- src/DBCreator.cpp | 2 +- src/makeRadsDB.cpp | 12 +++ tests/data/db_pfam3.dom | 42 ++++++++ tests/data/db_seqs3.fa | 95 +++++++++++++++++++ tests/integrationTests/results/test-multi.txt | 32 +++++++ tests/integrationTests/runTests.sh | 21 +++- 6 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 tests/data/db_pfam3.dom create mode 100644 tests/data/db_seqs3.fa create mode 100644 tests/integrationTests/results/test-multi.txt diff --git a/src/DBCreator.cpp b/src/DBCreator.cpp index bde305d..d93c628 100644 --- a/src/DBCreator.cpp +++ b/src/DBCreator.cpp @@ -241,7 +241,7 @@ DBCreator::readAnnotationFile(const fs::path &annotationFile, const fs::path &se { seqLength = to_string(seqLengths[pair.first]); if (seqLength == "0") - cerr << "WARNING! " << pair.first << " not in sequence file. Protein length will be set to 0.\n"; + throw std::runtime_error("WARNING! " + pair.first + " not in sequence file.\n"); } this->addDomainArrangement_(pair.second, pair.first, seqLength); } diff --git a/src/makeRadsDB.cpp b/src/makeRadsDB.cpp index 1593ddd..edb6871 100644 --- a/src/makeRadsDB.cpp +++ b/src/makeRadsDB.cpp @@ -112,6 +112,18 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } + // check for domain annotation files + if ((daFiles.size() == 0) and (seqFiles.size() != 0)) + cerr << "WARNING! Sequence file is not needed when using InterPro. Sequence file is ignored.\n"; + else + { + if ((daFiles.size() > 0) and (!seqFiles.empty()) and (seqFiles.size() != daFiles.size())) + { + cerr << "Error! If you provide a sequence file, you have to provide one for each annotation file."; + exit(1); + } + } + try { DBCreator db; diff --git a/tests/data/db_pfam3.dom b/tests/data/db_pfam3.dom new file mode 100644 index 0000000..29ee9de --- /dev/null +++ b/tests/data/db_pfam3.dom @@ -0,0 +1,42 @@ +# pfam_scan.pl, run at Fri Dec 2 10:10:58 2016 +# +# Copyright (c) 2009 Genome Research Ltd +# Freely distributed under the GNU +# General Public License +# +# Authors: Jaina Mistry (jm14@sanger.ac.uk), John Tate (jt6@sanger.ac.uk), +# Rob Finn (rdf@sanger.ac.uk) +# +# This is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . +# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +# query sequence file: db_seqs.fa +# searching against: /global/databases/pfam/v30.0//Pfam-A.hmm, with cut off --cut_ga +# resolve clan overlaps: on +# predict active sites: off +# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +# +# + +A0A011 20 276 11 277 PF00664.21 ABC_membrane Family 12 273 274 29.9 3.7e-07 1 CL0241 +A0A011 361 504 360 506 PF00004.25 ABC_tran Domain 2 135 137 80.1 1.9e-22 1 CL0023 +A0A017 3 105 1 105 PF02310.17 B12-binding Domain 19 121 121 49.3 3.9e-13 1 CL0063 +A0A017 164 324 163 325 PF04055.19 Radical_SAM Domain 2 166 167 89.0 3.8e-25 1 CL0036 +A0A012 19 279 8 279 PF00664.21 ABC_membrane Family 12 274 274 102.4 2.9e-29 1 CL0241 +A0A012 340 489 340 489 PF00005.25 ABC_tran Domain 1 137 137 93.3 1.6e-26 1 CL0023 +A0A013 15 249 15 249 PF01370.19 Epimerase Family 1 241 241 177.3 3.1e-52 1 CL0063 +A0A010 41 381 37 381 PF00155.19 Aminotran_1_2 Domain 6 363 363 206.8 4.9e-61 1 CL0061 +A0A014 49 162 48 163 PF13537.4 GATase_7 Domain 2 123 124 41.0 1.4e-10 1 CL0052 +A0A014 240 626 239 627 PF00733.19 Asn_synthase Domain 2 354 355 277.1 2.9e-82 1 CL0039 +A0A019 10 63 2 69 PF02543.13 Carbam_trans_N Domain 11 66 338 33.8 2.6e-08 1 CL0108 +A0A019 104 312 86 313 PF02543.13 Carbam_trans_N Domain 123 337 338 62.5 4.9e-17 1 CL0108 +A0A019 362 524 361 526 PF16861.3 Carbam_trans_C Domain 2 168 170 151.4 1.5e-44 1 No_clan + diff --git a/tests/data/db_seqs3.fa b/tests/data/db_seqs3.fa new file mode 100644 index 0000000..c34c609 --- /dev/null +++ b/tests/data/db_seqs3.fa @@ -0,0 +1,95 @@ +>A0A011 +MLRGSARTYWTLTGLWVLLRAGTLVVGLLFQRLFDALGAGGGVWLIIALVAAIEAGRLFL +QFGVMINRLEPRVQYGTTARLRHALLGSALRGSEVTARTSPGESLRTVGEDVDETGFFVA +WAPTNLAHWLFVAASVTVMMRIDAVVTGALLALLVLLTLVTALAHSRFLRHRRATRAASG +EVAGALREMVGAVGAVQAAAAEPQVAAHVAGLNGARAEAAVREELYAVVQRTVIGNPAPI +GVGVVLLLVAGRMDEGTFSVGDLALFAFYLQILTEALGSIGMLSVRLQRVSVALGRITNN +LGCRLRRSLERASPPIASDAPGGTGEGAAAPDAGPEPAPPLRELAVRGLTARHPGAGHGI +EDVDLVVERHTVTVVTGRVGSGKSTLVRAVLGLLPHERGTVLWNGEPIADPASFLVAPRC +GYTPQVPCLFSGTVRENVLLGRDGAAFDEAVRLAVAEPDLAAMQDGPDTVVGPRGLRLSG +GQIQRVAIARMLVGDPELVVLDDVSSALDPETEHLLWERLLDGTRTVLAVSHRPALLRAA +DRVVVLEGGRVEASGTFEEVMAVSAEMGRIWTGAGPGGGDAGPAPQSPPAG +>A0A017 +MGYIHTALKSAGFHHVIQVDTPALGLDSEGLRKLLADFEPDLVGVSTTTPGLPGAIEACE +AAKSTGAKVILGGPHTEVYAHENLVHESIDYVGVGEGVTIMPELAEAMERGEEPEGIRGL +VTRKHDGGAAPMVNLEEVGWPERAGLPMDRYYSIMAPRPFATMISSRGCPFKCSFCFKQA +VDKKSMYRSPEDVVGEMTELKERWGVKEIMFYDDVFTLHRGRVREICGLIGETGLKVRWE +APTRVDLVPEPLLEAMAGAGCVRLRFGIEHGDSEILERMRKESDIQKIEKAVTSAHEAGI +KGFGYFIVGWLGETREQFRRTVDLACRLPLDYASFYTATPLPGTPLHTESVAAGQIPPDY +WDRFSCGASSTRGSGTWCRTRRSAPSGRTAPSSCAAPWSSRCCRTWR +>A0A012 +MRGERTAVALLALLVPAGMGLQLVAPYLLRGFIDGALSGDSRKTLLDLAAWSLAAAVGTL +VVTAGTEALSSRVAWRSTNRLRADLVEHCLSRPPGFYRKHPPGELVERMDGDVTRLAAVM +STLLLELLAQALLIVGILVALFRLEWRLALVVAPFAAGTLLLLRTLVGRAMPFVTARQRV +AADLQGFLEERLAAAEDLRVNGASRYTLRELGDRQDDLYRKARDAARASVRWPATVQGLS +AVSVVLALAVSAWLHARGQLSTGTAFASLSYAMLLRRPLLAVTTRFRELEDAAASAQRLR +DLLGHGTAAPRTGRGTLPAGLPGVRFDGVSFGYEPDEPVLRDVSFTLRPGERLGVVGRTG +SGKSTVVRLLFGLHHPGAGSVSAGGLDLTEIDPRALRSRVALVTQEVHVFHASLRDNLTF +FDRSVPDDRLRAALGEAGLGPWLRTLPDGLDTPLGAGARGMSAGEEQQLALARVFLRDPG +LVLMDEPTARLDPYSERLLMPALERLLEGRTAVVVEHRPHLLRNVDRILVLEEGKVAEEG +ERRVLAADPGSRFHALLRTAGATR +>A0A013 +MSSDTHGTDLADGDVLVTGAAGFIGSHLVTELRNSGRNVVAVDRRPLPDDLESTSPPFTG +SLREIRGDLNSLNLVDCLKNISTVFHLAALPGVRPSWTQFPEYLRCNVLATQRLMEACVQ +AGVERVVVASSSSVYGGADGVMSEDDLPRPLSPYGVTKLAAERLALAFAARGDAELSVGA +LRFFTVYGPGQRPDMFISRLIRATLRGEPVEIYGDGTQLRDFTHVSDVVRALMLTASVRD +RGSAVLNIGTGSAVSVNEVVSMTAELTGLRPCTAYGSARIGDVRSTTADVRQAQSVLGFT +ARTGLREGLATQIEWTRRSLSGAEQDTVPVGGSSVSVPRL +>A0A010 +MDFFVRLARETGDRKREFLELGRKAGRFPAASTSNGEISIWCSNDYLGMGQHPDVLDAMK +RSVDEYGGGSGGSRNTGGTNHFHVALEREPAEPHGKEDAVLFTSGYSANEGSLSVLAGAV +DDCQVFSDSANHASIIDGLRHSGARKHVFRHKDGRHLEELLAAADRDKPKFIALESVHSM +RGDIALLAEIAGLAKRYGAVTFLDEVHAVGMYGPGGAGIAARDGVHCEFTVVMGTLAKAF +GMTGGYVAGPAVLMDAVRARARSFVFTTALPPAVAAGALAAVRHLRGSDEERRRPAENAR +LTHGLLRERDIPVLSDRSPIVPVLVGEDRMCKRMSALPLERHGAYVQAIDAPSVPAGEEI +LRIAPSAVHETEEIHRFVDALDGIWSELGAARRV +>A0A014 +MCGFVGFSDAGAGQEDARVTAERMLAAVAHRGPDGSDWCHHRGVTLAHCALTFTDPDHGA +QPFVSASGATAVVFNGELYNHAVLGDGALPCAPGGDTEVPGGTLRVAGHADARPAAGHVR +LRAAGRPHRHHGAGRDRWGRAPLLTPACETDIAFASELTSLLRHPAAPRTPEVRALADYL +VLQAFCAPASAVSGVCKVRPGSYVTHRHGALDETEFWRPRLTPDRGAGRGPGRREAARRF +EELFRAAVARRMTSTDRRLGVLLSGGLDSSAVAAVAQQLLPGRPVPTFSAGFADPDFDES +DHARAVARHLGTEHHVVRIGGADLAGVVESELAVADEPLADPSLLPTRLVCRAAREHVRG +VLTGDGADELLLGYRYFQAERAIELLLRVLPAPRLEALVRLLVRRLPARSGNLPVTHALG +LLAKGLRAAPEHRFYLSTAPFGPGELPRLLTPEAGAELTGHDPFTEVSRLLRGQPGLTGV +QRSQLAVVTHFLRDVILTKTDRGGMRSSLELRSPFLDLDLVEYGNSLPTGLKLHRFTGKY +LLRQVAAGWLPPSVVQRTKLGFRAPVAALLRGELRPLLLDTLSPSSLRRGGLFDTGAVRL +LIDDHLGGRRDTSRKLWALLVYQLWFESLTAGPRALESPAYPALS +>A0A019 +MKVLSLHSAGHDTGVAYFEDGRLVFAVETERLTRVKHDHRSDVALRHVLEQECVDTDGID +LVAVSTPVRSGLLRIPDLDRAMERIGAGALHHRTVCEMLGRRVECVVVTHEVSHAALAAH +YADWEEGTVVLVNEGRGQLTRSSLFRVTGGALEWVDKDPLPWYGNGFGWTAIGYLLGFGP +SPSVAGKVMAMGGYGQPDPRIREQLLSVDPEVMNDRELAERVRADLAGRPEFAPGFETAS +QVVATFQEMFTEAVRAVLDRHVTRTDAGVGPIALGGGCALNIVANSALREEYGRDVAIPP +ACGDAGHLTGAGLYALAQVAGVKPEPFSVYRNGGGEARAAVLEAVEGAGLRAVPYDRSAV +AGVLAGGGVVALTQGAAELGPRALGHRSLLGSPAVPGMRERMSEKLKRREWFRPLGAVMR +DERFAGLYPGRAPSPYMLFEYRLPDGIAPEARHVNGTCRIQTLGPEEDRLYGLLAEFEEL +SGVPALINTSLNGPGKPIAHTARDVLDDFARTDVDLFVFDDLMVRGAAAR +>A0A010 +MKVLSLHSAGHDTGVAYFEDGRLVFAVETERLTRVKHDHRSDVALRHVLEQECVDTDGID +LVAVSTPVRSGLLRIPDLDRAMERIGAGALHHRTVCEMLGRRVECVVVTHEVSHAALAAH +YADWEEGTVVLVNEGRGQLTRSSLFRVTGGALEWVDKDPLPWYGNGFGWTAIGYLLGFGP +SPSVAGKVMAMGGYGQPDPRIREQLLSVDPEVMNDRELAERVRADLAGRPEFAPGFETAS +QVVATFQEMFTEAVRAVLDRHVTRTDAGVGPIALGGGCALNIVANSALREEYGRDVAIPP +ACGDAGHLTGAGLYALAQVAGVKPEPFSVYRNGGGEARAAVLEAVEGAGLRAVPYDRSAV +AGVLAGGGVVALTQGAAELGPRALGHRSLLGSPAVPGMRERMSEKLKRREWFRPLGAVMR +DERFAGLYPGRAPSPYMLFEYRLPDGIAPEARHVNGTCRIQTLGPEEDRLYGLLAEFEEL +SGVPALINTSLNGPGKPIAHTARDVLDDFARTDVDLFVFDDLMVRGAAAR +>A0A016 +MTVRRPAASAPRVLLTAGPDGVRVEGDGEARLGHPLTGDHLDPGPPAEGVFAGWRWDGER +LVARNDRYGVCPLFYRAGGGSLALSPDPLALLPEDGPVELDHDALAVFLRTGFFLAEDTA +FAQVRALPPAATLTWDTGGLRLRSDGPPRPGAAAMTEAQAVDGFVDLFRASVARRLPGEP +YDLPLSGGRDSRHILLELCRRGAPPRRCVSGAKFPPDPGADARVAAALAGRLGLPHTVVP +RPRSQFRAELAALPAQGMTTLDGAWTQPVLAHLRRHSRISYDGLGGGELVQNPSVEFIRA +NPYDPADLPGLADRLLAASRTGPHVEHLLSPRTNALWSRQAARRRLVTELARHADSASPL +SSFFFWNRTRRSISAAPFALGDGRVLTHTPYLDHALFDHLASVPHRFLVDGTFHDRALHR +AFPEHADLGFASSVPQRHGPVLVAHRLAYLLRFLAHATVVEPGWWRGPDRFLQRLLAAGR +GPGAPQRVSRLQPLALYLLQLEDLAVRRARRRP +>A0A015 +MAAPDRPLVQVLSPRTWGEFGNYLAATRFSRALRSVIDAEVTLLEAEPILPWIGEAGAQI +RTISLESPDAVVRNQRYMALMDRLQARFPEGFEADPTAAQRADLEPLTRHLRESAPDVVV +GTKGFVARLCVAAVRLAGTSTRVVSHVTNPGLLQLPLHRSRYPDLTLVGFPRAKEHLLAT +AGGDPERVQVVGPLVAQHDLRDFMTSETAVSEAGPWGGDSGPDRPRVIIFSNRGGDTYPE +LVRRLADRHPGIDLVFVGYGDPELARRTAAVGRPHWRFHSVLGQSEYFDYIRRASRSRYG +LLVSKAGPNTTLEAAYFGIPVLMLESGLPMERWVPGLIHEEGLGHACATPEELFRTADDW +LTRPSVIEVHKKAAVSFAASVLDQDAVTARIKAALQPLLDAR diff --git a/tests/integrationTests/results/test-multi.txt b/tests/integrationTests/results/test-multi.txt new file mode 100644 index 0000000..16f1fb9 --- /dev/null +++ b/tests/integrationTests/results/test-multi.txt @@ -0,0 +1,32 @@ +# RADS version 2.3.0 +# RADS Output v1 +# run at Fri Jun 29 16:25:28 2018 +# +# query file: - +# database: /local/home/ckeme_01/projects/domainWorld/RADS/tests/integrationTests/multi_pfam +# gap open penalty -50 +# gap extension penalty -10 +# matrix: /local/home/ckeme_01/.domainWorld/dsm/pfam-31.dsm +# all: false +# collapse: true +# ****************************************************************** + +# ------------------------------------------------------------------- +Results for: manual entered query +Domain arrangement: PF00005 + +# score | normalized | SeqID | sequence length | domain arrangement | aln +# ------------------------------------------------------------------- +90 0.52 A0A001 591 PF00664 20 276 PF00005 361 504 1 +90 0.52 A0A002 564 PF00664 19 279 PF00005 340 489 1 +90 0.52 A0A012 564 PF00664 19 279 PF00005 340 489 1 + + +# ------------------------------------------------------------------- +List of alignments: +# ------------------------------------------------------------------- + +1) + Query DA: ******* PF00005 +Target DA: PF00664 PF00005 + diff --git a/tests/integrationTests/runTests.sh b/tests/integrationTests/runTests.sh index 4e2c5a0..fa6ab57 100755 --- a/tests/integrationTests/runTests.sh +++ b/tests/integrationTests/runTests.sh @@ -91,8 +91,7 @@ @test "rads - InterPro order" { - # database based on pfam annotation files - run ../../build/makeRadsDB -I ../data/sort-test.xml -s ../data/db_seqs.fa -o ip_order -d PFAM + run ../../build/makeRadsDB -I ../data/sort-test.xml -o ip_order -d PFAM [ $status == 0 ] echo $output [ "$output" == $'Number of sequences included: 3\nNumber of distinct arrangements 2' ] @@ -108,8 +107,7 @@ @test "rads - query collapse" { - # database based on pfam annotation files - run ../../build/makeRadsDB -I ../data/sort-test.xml -s ../data/db_seqs.fa -o ip_order -d PFAM + run ../../build/makeRadsDB -I ../data/sort-test.xml -o ip_order -d PFAM [ $status == 0 ] echo $output [ "$output" == $'Number of sequences included: 3\nNumber of distinct arrangements 2' ] @@ -121,3 +119,18 @@ rm ip_order.db ip_order.da test-collapse.txt } + + +@test "rads - multi annotation files" { + run ../../build/makeRadsDB ../../build/makeRadsDB -i ../data/db_pfam.dom ../data/db_pfam3.dom -s ../data/db_seqs.fa ../data/db_seqs3.fa -o multi_pfam + [ $status == 0 ] + echo $output + [ "$output" == $'Number of sequences included: 15\nNumber of distinct arrangements 8' ] + + run ../../build/rads -D PF00005 -m pfam-31.dsm -d multi_pfam -o test-multi.txt -c -l + + run diff <(grep -v '#' test-multi.txt) <(grep -v '#' results/test-multi.txt) + [ $status == 0 ] + + rm multi_pfam.db multi_pfam.da test-multi.txt +} -- GitLab From 1777b873e65ffb4bc6469efbe2e851992d16100a Mon Sep 17 00:00:00 2001 From: Carsten Kemena Date: Fri, 29 Jun 2018 16:42:06 +0200 Subject: [PATCH 21/24] updated UserManual --- UserManual.pdf | Bin 194354 -> 197159 bytes docs/source/conf.py | 2 +- docs/source/content/makedb_usage.rst | 8 ++++++-- docs/source/content/rads_usage.rst | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/UserManual.pdf b/UserManual.pdf index a31eaa3397de8af41d6a42924293b75938e43d4b..48fa99b75a0cb9bb3606a8df8eb1895fa1a3d69f 100644 GIT binary patch delta 76908 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 z�)LACu8EHNUBNPk>SaBJ4Aw#rLwHSoU55$_&W;k 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