diff --git a/.cproject b/.cproject
new file mode 100644
index 0000000..63da05e
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..9ac00be
--- /dev/null
+++ b/.project
@@ -0,0 +1,27 @@
+
+
+ Mobi
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.core.ccnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
new file mode 100644
index 0000000..7596dc4
--- /dev/null
+++ b/.settings/language.settings.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Biopool/APPS/pdb2secondary.cc b/Biopool/APPS/pdb2secondary.cc
index f05e856..decfec5 100644
--- a/Biopool/APPS/pdb2secondary.cc
+++ b/Biopool/APPS/pdb2secondary.cc
@@ -14,8 +14,11 @@
along with Victor. If not, see .
*/
/**
+
+
@Description */
+// Includes:
#include
#include
#include
diff --git a/Biopool/Sources/Atom.h b/Biopool/Sources/Atom.h
index 3df6f47..6f20f05 100644
--- a/Biopool/Sources/Atom.h
+++ b/Biopool/Sources/Atom.h
@@ -45,6 +45,8 @@ namespace Victor { namespace Biopool {
virtual ~Atom();
// PREDICATES:
+
+
AtomCode getCode() const;
unsigned long getNumber() const;
@@ -130,17 +132,30 @@ namespace Victor { namespace Biopool {
// -----------------x-------------------x-------------------x-----------------
// PREDICATES:
-
+ /**
+ * Return the code of the Atom
+ * @param none
+ * @return AtomCode
+ */
inline AtomCode
Atom::getCode() const {
return type;
}
-
+ /**
+ * Return the number of the Atom in the model
+ * @param none
+ * @return id, id of atom
+ */
inline unsigned long
Atom::getNumber() const {
return id;
}
+ /**
+ * Return 3D vector with coordinate 3D of the Atom
+ * @param none
+ * @return vgVector3
+ */
inline vgVector3
Atom::getCoords() {
if (!inSync())
diff --git a/Biopool/Sources/PdbLoader.h b/Biopool/Sources/PdbLoader.h
index f4c1bc9..f41505f 100644
--- a/Biopool/Sources/PdbLoader.h
+++ b/Biopool/Sources/PdbLoader.h
@@ -92,19 +92,35 @@ namespace Victor { namespace Biopool {
void setNonPermissive() {
permissive = false;
}
-
+ /**
+ You can chose if you want verbose output from this class
+ @param none
+ @return void
+ */
void setVerbose() {
verbose = true;
}
-
+ /**
+ You can chose if you want not verbose output from this class
+ @param none
+ @return void
+ */
void setNoVerbose() {
verbose = false;
}
-
+ /**
+ Set the chain that do you want load
+ @param char
+ @return void
+ */
void setChain(char _ch) {
chain = _ch;
}
-
+ /**
+ set the Model that do you want load
+ @param unsigned int
+ @return void
+ */
void setModel(unsigned int _mod) {
model = _mod;
}
diff --git a/Biopool/Sources/PdbSaver.h b/Biopool/Sources/PdbSaver.h
index c20220e..dc059a6 100644
--- a/Biopool/Sources/PdbSaver.h
+++ b/Biopool/Sources/PdbSaver.h
@@ -56,6 +56,11 @@ namespace Victor { namespace Biopool {
// PREDICATES:
+ /**
+ close the output file
+ @param none
+ @return void
+ */
void endFile() {
output << "END\n";
}
@@ -103,8 +108,6 @@ namespace Victor { namespace Biopool {
protected:
- private:
-
// HELPERS:
void writeSeqRes(Spacer& sp); // writes SEQRES entry
void writeSecondary(Spacer& sp);
diff --git a/Biopool/Sources/Protein.cc b/Biopool/Sources/Protein.cc
index 6c9dbfe..b424590 100644
--- a/Biopool/Sources/Protein.cc
+++ b/Biopool/Sources/Protein.cc
@@ -18,9 +18,9 @@
// Includes:
#include
#include
-using namespace std;
-using namespace Victor; using namespace Victor::Biopool;
+using namespace std;
+using namespace Victor;
using namespace Victor::Biopool;
// CONSTRUCTORS/DESTRUCTOR:
diff --git a/Biopool/Sources/Protein.h b/Biopool/Sources/Protein.h
index 79bcb74..d058591 100644
--- a/Biopool/Sources/Protein.h
+++ b/Biopool/Sources/Protein.h
@@ -68,7 +68,18 @@ namespace Victor { namespace Biopool {
void deleteComponent(Component* c);
void copy(const Protein& orig);
- void load(Loader& l); // data loader
+
+ /**
+ * load one model by Loader object. Use after command PdbLoader.setModel(i) , PdbLoader.checkModel();
+ * @code
+ * Loader.setModel(i);
+ Loader.checkModel();
+ this->load(Loader);
+ * @endcode
+ * @param Loader& , loader object
+ * @return void
+ */
+ virtual void load(Loader& l); // data loader
virtual Protein* clone();
diff --git a/Biopool/Sources/Spacer.cc b/Biopool/Sources/Spacer.cc
index 6c43431..4a76026 100644
--- a/Biopool/Sources/Spacer.cc
+++ b/Biopool/Sources/Spacer.cc
@@ -1664,25 +1664,29 @@ void Spacer::setDSSP(bool verbose) {
set ::iterator it = ss[i].find(turns[l]);
if (it != ss[i].end()) { // found a n-turn
char pos_s = *it;
- int pos = atoi(&(pos_s));
- set ::iterator it1 = ss[i + pos - 1].find(turns[l]);
- if (it1 != ss[i + pos - 1].end()) { // found the same n-turn after n-1 positions
- bool helixBreak = false;
- for (unsigned int m = i; m < (i + pos); m++) {
- set ::iterator it2 = ss[m].find(turns[l]);
- if (it2 == ss[m].end()) {
- helixBreak = true;
- }
- }
- if (!helixBreak) {
- for (unsigned int m = i; m < (i + pos); m++) {
- ss[m].insert(helices[l]);
- }
- }
- break;
- }
- }
- }
+ int pos = atoi(&(pos_s));
+ if(i+pos-1 >= ss.size())
+ break;
+ set::iterator it1 = ss[i + pos - 1].find(
+ turns[l]);
+ if (it1 != ss[i + pos - 1].end()) { // found the same n-turn after n-1 positions
+ bool helixBreak = false;
+ for (unsigned int m = i; m < (i + pos); m++) {
+ set::iterator it2 = ss[m].find(turns[l]);
+ if (it2 == ss[m].end()) {
+ helixBreak = true;
+ }
+ }
+ if (!helixBreak) {
+ for (unsigned int m = i; m < (i + pos); m++) {
+ ss[m].insert(helices[l]);
+ }
+ }
+ break;
+ }
+
+ }
+ }
// Set sheets (E)
set ::iterator it = ss[i].find('B');
if (it != ss[i].end()) {
diff --git a/Biopool/Sources/Spacer.h b/Biopool/Sources/Spacer.h
index 9217341..64ca3aa 100644
--- a/Biopool/Sources/Spacer.h
+++ b/Biopool/Sources/Spacer.h
@@ -160,6 +160,21 @@ namespace Victor { namespace Biopool {
void setStateFromTorsionAngles();
void setDSSP(bool verbose);
+
+ /**
+ *
+ * Return a vector of set, each set correspond whit one amino acid.
+ * Use this command after setDSSP(boool verbose) command.
+ * Each set contain many information about secondary structure of one amino acid.
+ * The first letter of the set is the secondary structure.
+ * @code
+ * Spacer.setDSSP(false);
+ * vector > = Spacer.getDSSP();
+ * @endcode
+ *
+ * @param none
+ * @return vector > , a vector of set
+ */
vector< set > getDSSP() {
return ss;
};
diff --git a/Makefile b/Makefile
index c0f7aa4..657c031 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@
# Path to project directory.
UPDIR = .
# Path to subdirectories.
-SUBDIRS = tools Energy/Sources Biopool/Sources Align2/Sources Energy/Sources/TorsionPotential Lobo/Sources Lobo/APPS Energy/APPS Biopool/APPS Align2/APPS
+SUBDIRS = tools Energy/Sources Biopool/Sources Align2/Sources Energy/Sources/TorsionPotential Lobo/Sources Lobo/APPS Energy/APPS Biopool/APPS Align2/APPS Mobi/Sources Mobi/APPS
#
# Libraries and paths (which are not defined globally).
@@ -27,8 +27,8 @@ BINPATH = bin
SOURCES =
OBJECTS =
-EXECS =
-TARGET =
+EXECS =
+TARGET =
LIBRARY =
#
diff --git a/Makefile.global b/Makefile.global
index 1f78a89..781398e 100644
--- a/Makefile.global
+++ b/Makefile.global
@@ -77,7 +77,7 @@ ifeq ($(verbose), 3)
USERFLAGS += -DVERBOSE=3
endif
-CFLAGS = $(USERFLAGS)
+CFLAGS = $(USERFLAGS)
#
# Tools
@@ -106,11 +106,13 @@ SUBDIRS += _dummy_
LIB_PATH += -L$(UPDIR)/lib
-INC_PATH += -I$(UPDIR)/tools -I$(UPDIR)/Energy/Sources -I$(UPDIR)/Biopool/Sources -I$(UPDIR)/Energy/Sources/TorsionPotential -I$(UPDIR)/Lobo/Sources -I$(UPDIR)/Align2/Sources -I$(UPDIR)/Biopool/APPS -I$(UPDIR)/Energy/APPS -I$(UPDIR)/Align2/APPS -I$(UPDIR)/Lobo/APPS
+### MODIFIED BY MOBI - ***LUCA DEMO***
+INC_PATH += -I$(UPDIR)/tools -I$(UPDIR)/Energy/Sources -I$(UPDIR)/Biopool/Sources -I$(UPDIR)/Energy/Sources/TorsionPotential -I$(UPDIR)/Lobo/Sources -I$(UPDIR)/Align2/Sources -I$(UPDIR)/Mobi/Sources -I$(UPDIR)/Biopool/APPS -I$(UPDIR)/Energy/APPS -I$(UPDIR)/Align2/APPS -I$(UPDIR)/Lobo/APPS -I$(UPDIR)/Mobi/APPS
+### MODIFIED BY MOBI - ***LUCA DEMO***
ifdef test
- INC_PATH += -I$(UPDIR)/Biopool/Tests -I$(UPDIR)/Energy/Tests -I$(UPDIR)/Align2/Tests -I$(UPDIR)/Lobo/Tests
- SUBDIRS = Biopool/Tests Energy/Tests Align2/Tests Lobo/Tests
+ INC_PATH += -I$(UPDIR)/Biopool/Tests -I$(UPDIR)/Energy/Tests -I$(UPDIR)/Align2/Tests -I$(UPDIR)/Lobo/Tests -I$(UPDIR)/Mobi/Tests
+ SUBDIRS = Biopool/Tests Energy/Tests Align2/Tests Lobo/Tests Mobi/Tests
endif
####### Implicit rules
@@ -175,6 +177,8 @@ subclean:
$(RM) -fr ./Energy/data
$(RM) -fr ./Lobo/data
$(RM) -fr ./Biopool/data
+ $(RM) -fr ./Mobi/data
+ $(RM) -fr ./Mobi/data/*
diff --git a/Mobi/APPS/Makefile b/Mobi/APPS/Makefile
new file mode 100644
index 0000000..fcd6e6d
--- /dev/null
+++ b/Mobi/APPS/Makefile
@@ -0,0 +1,54 @@
+#--*- makefile -*--------------------------------------------------------------
+#
+# Standard makefile
+#
+#------------------------------------------------------------------------------
+
+# Path to project directory.
+UPDIR = ../..
+# Path to subdirectories.
+SUBDIR=
+# Path to directory for binaries:
+BINPATH = ../../bin
+
+
+#
+# Libraries and paths (which are not defined globally).
+#
+
+LIBS = -lMobi -lBiopool -ltools
+
+LIB_PATH = -L.
+
+INC_PATH = -I. -I../../tools/ -I../../Biopool/Sources -I../../Mobi/Sources
+
+#
+# Objects and headers
+#
+
+SOURCES = mobi.cc
+
+OBJECTS = mobi.o
+
+TARGETS = mobi
+
+EXECS = mobi
+
+LIBRARY = APPSlibMobi.a
+
+#
+# Install rule
+#
+
+compile: all
+
+all: install
+install: $(LIBRARY) $(TARGETS)
+ mv $(EXECS) $(UPDIR)/bin/
+ mv $(LIBRARY) $(UPDIR)/lib/
+
+#
+# Call global Makefile to do the job.
+#
+
+include ../../Makefile.global
diff --git a/Mobi/APPS/mobi.cc b/Mobi/APPS/mobi.cc
new file mode 100644
index 0000000..3380b93
--- /dev/null
+++ b/Mobi/APPS/mobi.cc
@@ -0,0 +1,314 @@
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+/*
+ @file Mobi.cc
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* --*- C++ -*------x-----------------------------------------------------------
+ *
+ *
+ * Description: Mobi is a software that take in input .pdb file created
+ * Whit NMR technology.
+ * this file contained more models of the same protein,
+ * he take it, then he imposed all models whit all models
+ * and return mobility part of the protein in a .pdb file
+ *
+ *
+ * -----------------x-----------------------------------------------------------
+ */
+
+// Includes:
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace Victor;
+using namespace Victor::Biopool;
+using namespace Victor::Mobi;
+
+const string OUTPDB = "ResultMobi.pdb";
+
+void sShowHelp() {
+
+ cout << "NAME" << endl;
+ cout << "\t mobi" << endl;
+
+ cout << "SYNOPSIS" << endl;
+ cout << "\t mobi [FILE]... [OPTION]..." << endl;
+
+ cout << "DESCRIPTION \n" << endl;
+ cout
+ << "\t Mobi is a software that take in input a .pdb file created by NMR tecnology."
+ << endl;
+ cout
+ << "\t this file contained more models of the same protein, then Mobi imposed models and return "
+ << endl;
+ cout << "\t aminoacid's mobility." << endl;
+
+ cout << "\n" << endl;
+
+ cout << "\t -v verbose output. \n" << endl;
+ cout << "\t -o [FILE OUTPUT] Output to file (default stdout)\n" << endl;
+ cout << "\t -m load any models \n" << endl;
+
+ cout << "\t -c arg Chain identifier to read (default is first chain)\n" << endl;
+ cout << "\t -s arg Set bound everage scale distance mobility (default is 0.85)\n" << endl;
+ cout << "\t -d arg Set bound standard deviation mobility (default is 0.09)\n" << endl;
+ cout << "\t -y arg Set bound angle Phi mobility (default is 20)\n" << endl;
+ cout << "\t -x arg Set bound angle Psi mobility (default is 20)\n" << endl;
+
+ cout << "\t -h help" << endl;
+
+ exit(EXIT_SUCCESS);
+
+}
+
+int main(int argc, char* argv[]) {
+
+ bool v, models;
+ double ScalD, StandD, anglePHI, anglePSI;
+ string inputFile, outputFile, input, chainID;
+
+ //guide with -h option
+ if (getArg("h", argc, argv)) {
+ sShowHelp();
+ return 1;
+ }
+ if (argc == 1) {
+ sShowHelp();
+ return 1;
+ }
+
+ getArg("o", outputFile, argc, argv, "!");
+ getArg("c", chainID, argc, argv, "!");
+ getArg("s", ScalD ,argc, argv, 0.85);
+ getArg("d", StandD ,argc, argv, 0.09);
+ getArg("y", anglePHI ,argc, argv, 20);
+ getArg("x", anglePSI ,argc, argv, 20);
+
+ models = getArg("m",argc, argv);
+ v = getArg("v", argc, argv);
+
+
+ cout << "Welcome to Mobi!" << endl;
+
+ //loan pdb file from input
+ inputFile = argv[1];
+
+ ifstream inFile(inputFile.c_str());
+
+ if (!inFile)
+ ERROR("Error opening input .pdb file.", exception);
+
+ PdbLoader pl(inFile); // creates the PdbLoader object
+
+ ProteinModels prot;
+
+ if (v) {
+ pl.setVerbose();
+ prot.setVerbose();
+ } else
+ pl.setNoVerbose();
+
+ // --------------------------------------------------
+ // 1. ask how much models load in protein
+ // --------------------------------------------------
+
+// do {
+// cout << "This file include: ";
+// cout << pl.getMaxModels() << endl;
+//
+// cout << "Do you want load all models? [y/n]" << endl;
+// getline(cin, input);
+// // cin >> input;
+//
+// } while ((strcmp(input.c_str(), "y")) != 0
+// && (strcmp(input.c_str(), "n")) != 0);
+
+
+ // User selected chain
+ if (chainID != "!") {
+ if (chainID.size() > 1)
+ ERROR("You can choose only 1 chain", error);
+ pl.setChain(chainID[0]);
+ pl.checkAndSetChain();
+ if (v)
+ cout << "Selected chain: " << chainID[0] << endl;
+ } // First chain
+ else {
+ if (pl.getAllChains().size() > 0) {
+ pl.setChain(pl.getAllChains()[0]);
+ if (v)
+ cout << "Selected chain: " << pl.getAllChains()[0] << endl;
+ chainID = pl.getAllChains()[0];
+ } else if (v)
+ ERROR("No chains found. Quit...", exception);
+ }
+
+ if (!v)
+ cout << "\nLOAD..." << endl;
+
+ if (!models) {
+ prot.load(pl);
+ } else {
+ prot.loadSameModels(pl);
+ }
+
+ // --------------------------------------------------
+ // 2. set path to output file
+ // --------------------------------------------------
+
+ if (outputFile != "!") {
+ outputFile = "../Mobi/data/" + outputFile;
+ } else
+ outputFile = "../Mobi/data/stdout";
+
+ // --------------------------------------------------
+ // 3. method that save in separated file each models
+ // --------------------------------------------------
+
+ prot.save(outputFile);
+
+ /////////////////////////////////////////////////////////////////////
+
+ //SUPER IMPOSITION
+ unsigned int d = 0;
+
+ // ------------------------------------------------------
+ // 4. TmScore object make super imposition of each models
+ // ------------------------------------------------------
+
+ TmScore tm("../Mobi/data/TMscore", outputFile, v);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < prot.size() - 1; i++)
+ for (unsigned int j = i + 1; j < prot.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ prot.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.",
+ exeption);
+
+ prot.addModels(*(prot.getSpacer(j)));
+
+ }
+
+ // ----------------------------------------------------------------------------------------
+ // 5. Standard Deviation object calculate metrics (everage ScalD, StanDevScalD ,phi, psi)
+ // ----------------------------------------------------------------------------------------
+
+ StandardDeviation std(prot, v);
+
+ vector ever;
+
+ ever = std.get_everage_distance();
+
+ //print vector
+// cout << "AVERAGE" << endl;
+// for (vector::iterator everage = ever.begin(); everage != ever.end();
+// everage++) {
+// cout << *everage << endl;
+//
+// }
+
+ vector SD;
+ SD = std.get_standard_deviation();
+
+ //print vector
+// cout << "STANDARD DEVIATION" << endl;
+// for (vector::iterator walk = SD.begin(); walk != SD.end();
+// walk++) {
+// cout << *walk << endl;
+// }
+
+///////////////////////////////////////////////////
+
+ //ANGLE
+
+ vector ANGLE_PHI;
+ ANGLE_PHI = std.get_StandarDev_angle_PHI();
+
+// cout << "ANGLE PHI" << endl;
+// for (vector::iterator walk = ANGLE_PHI.begin(); walk != ANGLE_PHI.end();
+// walk++) {
+// cout << *walk << endl;
+//
+// }
+
+ vector ANGLE_PSI;
+ ANGLE_PSI = std.get_StandarDev_angle_PSI();
+
+// cout << "ANGLE PSI" << endl;
+// for (vector::iterator walk = ANGLE_PSI.begin(); walk != ANGLE_PSI.end();
+// walk++) {
+// cout << *walk << endl;
+//
+// }
+
+///////////////////////////////////////////////////////////////////////////////////
+
+ //SECONDARY STRUCTURE
+
+ SecondaryStructure sstr(prot, v);
+
+ vector MOB;
+ MOB = sstr.getMobilitySecondaryStructure();
+
+ //print vector
+// cout << "\nSECONDARY STRUCTURE" << endl;
+// for (vector::iterator walk = MOB.begin(); walk != MOB.end(); walk++) {
+// cout << *walk << " ";
+//
+// }
+//
+// cout << endl;
+
+/////////////////////////////////////////////////////////////////////////////////////
+
+ // --------------------------------------------------
+ // 6. MobiSaver object save mobility in output file
+ // --------------------------------------------------
+
+ string out_pdb = outputFile + OUTPDB;
+ ofstream ofstream(out_pdb.c_str(), ofstream::app);
+
+ MobiSaver* saver = new MobiSaver(prot, outputFile, ofstream, v, ScalD, StandD , anglePHI, anglePSI);
+ saver->allMobility(ever, SD, ANGLE_PHI, ANGLE_PSI, MOB);
+
+
+ prot.remove(outputFile);
+ //remove trash file
+ outputFile = outputFile + "TMScore.pdb_atm";
+ remove(outputFile.c_str());
+
+ saver-> saveProtein(prot, ever, SD);
+
+ delete saver;
+
+ return 0;
+}
diff --git a/Mobi/Sources/Makefile b/Mobi/Sources/Makefile
new file mode 100644
index 0000000..f18271c
--- /dev/null
+++ b/Mobi/Sources/Makefile
@@ -0,0 +1,62 @@
+#--*- makefile -*--------------------------------------------------------------
+#
+# Standard makefile
+#
+#------------------------------------------------------------------------------
+
+# Path to project directory.
+UPDIR = ../..
+# Path to subdirectories.
+SUBDIR = ../../tools
+# Path to directory for binaries:
+BINPATH = ../../bin
+
+
+#
+# Libraries and paths (which are not defined globally).
+#
+
+LIBS = -lBiopool -ltools
+
+LIB_PATH = -L.
+
+INC_PATH = -I. -I../../tools -I../../Biopool/Sources
+
+#
+# Objects and headers
+#
+
+
+SOURCES = ProteinModels.cc TmScore.cc StandardDeviation.cc SecondaryStructure.cc MobiSaver.cc
+
+
+OBJECTS = ProteinModels.o TmScore.o StandardDeviation.o SecondaryStructure.o MobiSaver.o
+
+
+TARGETS =
+
+EXECS =
+
+LIBRARY = libMobi.a
+
+#
+# Install rule
+#
+
+#start: subdirs
+
+compile: all
+
+allinstall: $(LIBRARY) $(TARGETS)
+ mv $(LIBRARY) $(UPDIR)/lib/
+
+
+install: subinstall allinstall
+
+all: install
+#
+# Call global Makefile to do the job.
+#
+
+include ../../Makefile.global
+
diff --git a/Mobi/Sources/MobiSaver.cc b/Mobi/Sources/MobiSaver.cc
new file mode 100644
index 0000000..79a23b7
--- /dev/null
+++ b/Mobi/Sources/MobiSaver.cc
@@ -0,0 +1,643 @@
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file MobiSaver.h
+ * @author Riccardo Zanella
+ * @date 21 lug 2015
+ * @version 0.1
+ */
+
+//Includes:
+#include "MobiSaver.h"
+
+using namespace Victor;
+using namespace Victor::Biopool;
+using namespace Victor::Mobi;
+
+const string OUT = "ResultMobi.fasta";
+
+/**
+ * Default Constructor
+ * @param ProteinModels& , object PreteinModels
+ * @param string output, path file output
+ * @param bool verbose , verbose
+ * @param double boundSD, default = 0.85
+ * @param double boundStandD, default = 0.09
+ * @param double anglePHI, default = 20
+ * @param double anglePSI, default = 20
+ */
+MobiSaver::MobiSaver(ProteinModels prot, string output, ofstream& stream,
+ bool verbose, double boundSD, double boundStandD, double anglePHI,
+ double anglePSI) :
+ PdbSaver(stream), verbose(verbose), ScalD(boundSD), StandD(boundStandD), angPHI(
+ anglePHI), angPSI(anglePSI) {
+ // TODO Auto-generated constructor stub
+
+ //if file does not exist then create and insert aminoacid sequence in head otherwise don't create file
+ out = output + OUT;
+
+ if (access(out.c_str(), F_OK) != 0) {
+
+ if (verbose)
+ cout << "\n ### Create fasta file in output ###" << endl;
+
+ ofstream fout; //stream in output
+ vector::iterator walk = prot.sequence.begin();
+
+ fout.open(out.c_str());
+ if (!fout) {
+ ERROR("Error to create file!", error);
+ } else {
+ fout << "> sequence" << endl;
+ while (walk != prot.sequence.end()) {
+ fout << *(walk);
+ walk++;
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "file success created!" << endl;
+ }
+
+ }
+
+}
+
+/**
+ * Default Deconstructor
+ *
+ */
+MobiSaver::~MobiSaver() {
+ // TODO Auto-generated destructor stub
+}
+
+// PREDICATES:
+
+/**
+ * save mobility from average scale distance vector
+ * @param vector , vector of average scale distance
+ * @return void
+ */
+void MobiSaver::mob_eveScalD(vector everageDistance) {
+
+ if (everageDistance.size() == 0)
+ ERROR("Vector everage distance empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Save mobility from average distance ###" << endl;
+
+ fout << endl;
+ fout << "> Average scale distance 0" << endl;
+
+ for (vector::iterator walk = everageDistance.begin();
+ walk != everageDistance.end(); walk++) {
+ if (*(walk) < ScalD)
+ fout << "M";
+ else
+ fout << ".";
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from average scaled distance saved!" << endl;
+
+}
+
+/**
+ * save mobility from standard deviation distance vector
+ * @param vector , vector of scale distance
+ * @return void
+ */
+void MobiSaver::mob_stanD(vector Scale_distance) {
+
+ if (Scale_distance.size() == 0)
+ ERROR("Vector standard deviation empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Mobility from standard deviation saved on file ###"
+ << endl;
+
+ fout << endl;
+ fout << "> Standard deviation distance 1" << endl;
+
+ for (vector::iterator walk = Scale_distance.begin();
+ walk != Scale_distance.end(); walk++) {
+ if (*(walk) > StandD)
+ fout << "M";
+ else
+ fout << ".";
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from standard deviation saved!" << endl;
+
+}
+
+/**
+ * save mobility from vector of phi angle
+ * @param vector , vector of scale distance
+ * @return void
+ */
+void MobiSaver::mob_aPHI(vector angle_PHI) {
+
+ if (angle_PHI.size() == 0)
+ ERROR("Vector angle PHI empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Mobility from angle phi saved on file ###" << endl;
+
+ fout << endl;
+ fout << "> Phi angle 2" << endl;
+
+ for (vector::iterator walk = angle_PHI.begin();
+ walk != angle_PHI.end(); walk++) {
+ if (*(walk) > angPHI)
+ fout << "M";
+ else
+ fout << ".";
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from angle_PHI saved!" << endl;
+
+}
+
+/**
+ * save mobility from vector of psi angle
+ * @param vector , from vector of psi angle
+ * @return void
+ */
+void MobiSaver::mob_aPSI(vector angle_PSI) {
+
+ if (angle_PSI.size() == 0)
+ ERROR("Vector angle PSI empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Mobility from angle phi saved on file ###" << endl;
+
+ fout << endl;
+ fout << "> Psi angle 3" << endl;
+
+ for (vector::iterator walk = angle_PSI.begin();
+ walk != angle_PSI.end(); walk++) {
+ if (*(walk) > angPSI)
+ fout << "M";
+ else
+ fout << ".";
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from angle_PSI saved!" << endl;
+
+}
+
+/**
+ * save mobility structure
+ * @param vector, from vector of mobility structure
+ * @return void
+ */
+void MobiSaver::mob_SecS(vector Mob_SecStructure) {
+
+ if (Mob_SecStructure.size() == 0)
+ ERROR("Vector Mob_SecStructure empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Mobility from secondary structures saved on file ###"
+ << endl;
+
+ fout << endl;
+ fout << "> Secondary structure 4" << endl;
+
+ for (vector::iterator walk = Mob_SecStructure.begin();
+ walk != Mob_SecStructure.end(); walk++)
+ fout << *(walk);
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from secondary structure saved!" << endl;
+
+}
+
+/**
+ * save mobility from average scale distance filtered by secondary structures
+ * @param vector , vector average scaled distance
+ * @param vector , vector secondary structures
+ * @return void
+ */
+void MobiSaver::mob_eveScalD_filtSecS(vector everageDistance,
+ vector mobSecS) {
+
+ if (everageDistance.size() == 0 || mobSecS.size() == 0)
+ ERROR("Exception: Vectors must be full.", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout
+ << "\n ### Save mobility from average Scale distance filtered by Secondary Structure... ###"
+ << endl;
+
+ fout << endl;
+ fout << "> Average scale distance filtered with SecStr 0" << endl;
+
+ vector::iterator everage = everageDistance.begin();
+ vector::iterator secStruct = mobSecS.begin();
+
+ //If average is fix stay fix, if average is mobile and DSSP is mobile then change
+ //to fix
+ while (everage != everageDistance.end() || secStruct != mobSecS.end()) {
+
+ if (*(everage) < ScalD && *(secStruct) != '.')
+ fout << "M";
+ else
+ fout << ".";
+
+ everage++;
+ secStruct++;
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout
+ << "Mobility from average scaled distance filtered by Secondary Structure saved!"
+ << endl;
+
+}
+
+/**
+ * save mobility from average scale distance filtered by angles and scaled distance
+ * @param vector , vector average scaled distance
+ * @param vector , angle phi
+ * @param vector , angle psi
+ * @param vector , Scaled Distance
+ * @return void
+ */
+void MobiSaver::mob_eveScalD_filteredByPHI_PSI_standD(
+ vector everageDistance, vector angle_PHI,
+ vector angle_PSI, vector Scale_distance) {
+
+ vector vettoreSupporto;
+
+ if (everageDistance.size() == 0 || angle_PHI.size() == 0
+ || angle_PSI.size() == 0 || Scale_distance.size() == 0)
+ ERROR("One vectors is empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout
+ << "\n ### Save mobility from average Scale distance filtered by PHI PSI Standard deviation... ###"
+ << endl;
+
+ fout << endl;
+ fout << "> Average scale distance filtered with PHI PSI StdD 0" << endl;
+
+ const string filter1 = "MM.";
+ const string filter2 = ".MM";
+
+ for (vector::iterator walk = everageDistance.begin();
+ walk != everageDistance.end(); walk++) {
+ if (*(walk) < ScalD)
+ vettoreSupporto.push_back("M");
+ else
+ vettoreSupporto.push_back(".");
+ }
+
+ string test;
+
+ vector::iterator mob = vettoreSupporto.begin();
+ vector::iterator phi = angle_PHI.begin();
+ vector::iterator psi = angle_PSI.begin();
+ vector::iterator stdD = Scale_distance.begin();
+
+ int i;
+ bool flag;
+ vector::iterator j;
+ vector::iterator h, s, d;
+
+ while (mob != vettoreSupporto.end()) {
+
+ i = 0;
+ flag = true;
+ test.clear();
+ j = mob;
+ h = phi;
+ s = psi;
+ d = stdD;
+
+ while (j != vettoreSupporto.end() && i < 3 && flag) {
+
+ test = test + (*(j));
+
+ if (test.compare(filter1) == 0) {
+ if (*(h) > angPHI && *(s) > angPSI && *(d) > StandD
+ && (*(s - 1) > angPSI))
+ flag = false;
+
+ } else if (test.compare(filter2) == 0) {
+
+ if (*(h - 2) > angPHI && *(s - 2) > angPSI && *(d - 2) > StandD
+ && (*(h - 1) > angPHI))
+ flag = false;
+
+ }
+
+ j++;
+ h++;
+ s++;
+ d++;
+ i++;
+ }
+
+ if (!flag) {
+
+ fout << "MMM";
+ mob = j;
+ phi = h;
+ psi = s;
+ stdD = d;
+
+ } else {
+ fout << *(mob);
+ mob++;
+ }
+
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout
+ << "Mobility from average Scale distance filtered by PHI PSI Standard deviation whith mask saved!"
+ << endl;
+
+}
+
+/**
+ * save mobility from standard deviation with mask
+ * @param vector , vector scaled distance
+ * @return void
+ */
+void MobiSaver::mob_stanD_withMask(vector Scale_distance) {
+
+ vector vettoreSupporto;
+ map map;
+
+ if (Scale_distance.size() == 0)
+ ERROR("Vector standard deviation empty!", exception);
+
+ ofstream fout(out.c_str(), ofstream::app);
+
+ if (!fout)
+ ERROR("Could not open file for writing.", error);
+
+ if (verbose)
+ cout << "\n ### Save on file standard deviation with Mask ###" << endl;
+
+ fout << endl;
+ fout << "> Standard deviation distance with mask 1" << endl;
+
+ const pair product1("M.MM", "MMMM");
+ const pair product2("MM.M", "MMMM");
+ const pair product3("M..MM", "MMMMM");
+ const pair product4("MM..M", "MMMMM");
+ const pair product5(".M.M.", ".....");
+ const pair product6("..M..", ".....");
+ const pair product7("..MM..", "......");
+
+ map.insert(product1);
+ map.insert(product2);
+ map.insert(product3);
+ map.insert(product4);
+ map.insert(product5);
+ map.insert(product6);
+ map.insert(product7);
+
+ for (vector::iterator walk = Scale_distance.begin();
+ walk != Scale_distance.end(); walk++) {
+ if (*(walk) > StandD)
+ vettoreSupporto.push_back("M");
+ else
+ vettoreSupporto.push_back(".");
+ }
+
+ string test;
+
+ vector::iterator mob = vettoreSupporto.begin();
+ std::map::iterator iter = map.begin();
+
+ int i;
+ bool flag;
+ vector::iterator j;
+
+ while (mob != vettoreSupporto.end()) {
+
+ i = 0;
+ flag = true;
+ test.clear();
+ j = mob;
+
+ while (j != vettoreSupporto.end() && i < 6 && flag) {
+
+ test = test + (*(j));
+ iter = map.find(test);
+ if (iter != map.end()) {
+ test = iter->second;
+ flag = false;
+ }
+
+ j++;
+ i++;
+ }
+
+ if (!flag) {
+ fout << test;
+ mob = j;
+ } else {
+ fout << *(mob);
+ mob++;
+ }
+
+ }
+
+ fout.close();
+
+ if (verbose)
+ cout << "Mobility from standard deviation whith mask saved!" << endl;
+
+}
+
+/**
+ * save all type of mobility
+ * @param vector , vector average scaled distance
+ * @param vector , vector Scaled Distance
+ * @param vector , angle phi
+ * @param vector , angle psi
+ * @param vector , secondary structures
+ *
+ * @return void
+ */
+void MobiSaver::allMobility(vector everageDistance,
+ vector Scale_distance, vector angle_PHI,
+ vector angle_PSI, vector Mob_SecStructure) {
+
+ mob_eveScalD(everageDistance);
+ mob_eveScalD_filtSecS(everageDistance, Mob_SecStructure);
+ mob_eveScalD_filteredByPHI_PSI_standD(everageDistance, angle_PHI, angle_PSI,
+ Scale_distance);
+ mob_stanD(Scale_distance);
+ mob_stanD_withMask(Scale_distance);
+ mob_aPHI(angle_PHI);
+ mob_aPSI(angle_PSI);
+ mob_SecS(Mob_SecStructure);
+
+}
+
+/**
+ * Method that shadow save Protein of PdbSaver, this method save in .pdb format
+ * all original models in ProteinModels with column standard deviation modified
+ * and column B factor modified with average scaled distance.
+ * @param ProteinModels , object ProteinModels
+ * @param vector , vector average scaled distance
+ * @param vector , vector standard deviation
+ * @return void
+ */
+
+void MobiSaver::saveProtein(ProteinModels prot,
+ vector everageDistance, vector Scale_distance) {
+
+ if (everageDistance.size() == 0 || Scale_distance.size() == 0)
+ ERROR("One vector is empty!", exception);
+
+ vector::iterator walk;
+ vector::iterator walk2;
+
+ if (verbose)
+ cout << "\n ### Save Pdb file with column b factor modify ###" << endl;
+
+ output << "REMARK 1 template_A_NMRMOV.pdb" << "\n"
+ << "REMARK 2 B-factors changed to averaged Scaled Distance x 100 \n"
+ << "REMARK 3 after TMScore super imposition with d0 = 4.0; Occupancy changed to SD \n";
+
+ int g;
+ for (unsigned int i = 0; i < prot.original_models.size(); i++) {
+ if (prot.original_models[i].size() > 0) {
+
+ aminoOffset = 1;
+ g = i + 1;
+ output << "MODEL " << g << endl;
+ //method of class Component. It checks how deep is the spacer
+
+ walk = everageDistance.begin();
+ walk2 = Scale_distance.begin();
+ //saving is one ammino at a time
+ for (unsigned int j = 0; j < prot.original_models[i].sizeAmino();
+ j++) {
+ AminoAcid gr = prot.original_models[i].getAmino(j);
+ gr.sync();
+
+ for (unsigned int y = 0; y < gr.size(); y++) {
+ string atName = gr[y].getType();
+
+ if (atName == "OXT") // cosmetics: OXT has to be output after
+ continue; // the sidechain and therefore goes in saveSpacer
+
+ // Added variable for correcting atom type H (last column in PDBs)
+ char atomOneLetter;
+ if (!isdigit(atName[0])) {
+ atomOneLetter = atName[0];
+ } else {
+ atomOneLetter = atName[1];
+ }
+
+ // Added control for size by Damiano Piovesan
+ // example HG12
+ if (!isdigit(atName[0]) && (atName.size() < 4))
+ atName = ' ' + atName;
+ while (atName.size() < 4)
+ atName += ' ';
+
+ output << "ATOM" << setw(7) << gr[y].getNumber() << " "
+ << atName << " " << gr.getType() << " " << chain
+ << setw(4) << aminoOffset << " " << setw(8)
+ << setprecision(3) << gr[y].getCoords().x << setw(8)
+ << setprecision(3) << gr[y].getCoords().y << setw(8)
+ << setprecision(3) << gr[y].getCoords().z << " "
+ << fixed << setprecision(2)<< *(walk2)
+ << setw(6) << fixed << setprecision(2)
+ << (*(walk) * 100) << " " << atomOneLetter << "\n";
+
+ atomOffset = gr[y].getNumber() + 1;
+
+ }
+ walk++;
+ walk2++;
+ aminoOffset++;
+ }
+
+ output << "ENDMODL\n";
+ }
+
+ }
+
+ endFile();
+
+ if (verbose)
+ cout << "Pdb file saved!" << endl;
+
+}
diff --git a/Mobi/Sources/MobiSaver.h b/Mobi/Sources/MobiSaver.h
new file mode 100644
index 0000000..5a872e3
--- /dev/null
+++ b/Mobi/Sources/MobiSaver.h
@@ -0,0 +1,78 @@
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file MobiSaver.h
+ * @author Riccardo Zanella
+ * @date 21 lug 2015
+ * @version 0.1
+ */
+
+
+#ifndef MOBI_SOURCES_MOBISAVER_H_
+#define MOBI_SOURCES_MOBISAVER_H_
+
+//Includes:
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace Victor::Biopool;
+
+namespace Victor {
+namespace Mobi {
+
+/**@brief Implements a MobiSaver.
+ * This class inherit PdbSaver class. This class allow to Saver in output file all type of vector generated from
+ * Standard Deviation and SecondaryStructure classes to have the mobility.
+ * You can save Mobility also filtered by same type of mask.
+ */
+
+class MobiSaver : public PdbSaver{
+public:
+
+ // CONSTRUCTORS/DESTRUCTOR:
+ MobiSaver(ProteinModels __protein,string __output, ofstream& __stream, bool __verbose = false, double __boundSD = 0.85, double __boundStandD = 0.09, double __anglePHI = 20, double __anglePSI = 20);
+ virtual ~MobiSaver();
+
+ // PREDICATES:
+
+ void mob_eveScalD(vector __everageDistance);
+ void mob_eveScalD_filtSecS(vector __everageDistance, vector __mobSecS);
+ void mob_eveScalD_filteredByPHI_PSI_standD(vector __everageDistance, vector __angle_PHI, vector __angle_PSI, vector __Scale_distance);
+ void mob_stanD(vector __Scale_distance);
+ void mob_stanD_withMask(vector __Scale_distance);
+ void mob_aPHI(vector __angle_PHI);
+ void mob_aPSI(vector __angle_PSI);
+ void mob_SecS(vector __Mob_SecStructure);
+ void allMobility(vector __everageDistance,
+ vector __Scale_distance, vector __angle_PHI,
+ vector __angle_PSI, vector __Mob_SecStructure);
+ virtual void saveProtein(ProteinModels __protein, vector __everageDistance, vector __StandardDeviation);
+
+private:
+ bool verbose;
+ string out;
+ double ScalD, StandD, angPHI, angPSI;
+};
+}
+}
+
+#endif /* MOBI_SOURCES_MOBISAVER_H_ */
diff --git a/Mobi/Sources/ProteinModels.cc b/Mobi/Sources/ProteinModels.cc
new file mode 100644
index 0000000..e261dfc
--- /dev/null
+++ b/Mobi/Sources/ProteinModels.cc
@@ -0,0 +1,277 @@
+/*
+ @file ProteinModels.cc
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+// Includes:
+#include
+#include
+#include
+#include
+
+using namespace Victor;
+using namespace Victor::Mobi;
+using namespace Victor::Biopool;
+
+const string PDB = ".pdb";
+
+// CONSTRUCTORS/DESTRUCTOR:
+
+/**
+ * Default Constructor
+ * @param nothing.
+ */
+ProteinModels::ProteinModels() :
+ Protein(), verbose(false) {
+}
+
+/**
+ * Constructor. Copy another Protein object.
+ *@param Protein
+ */
+ProteinModels::ProteinModels(const Protein& _orig) :
+ Protein(_orig), verbose(false) {
+}
+
+/**
+ * DESTRUCTOR
+ *@param none
+ */
+ProteinModels::~ProteinModels() {
+}
+
+// PREDICATES:
+
+/**
+ Overloading method load, this method load all models in Protein Models Object
+ @param (PdbLoader&) , object PdbLoader
+ @return void
+ */
+void ProteinModels::load(PdbLoader& pl) {
+
+ unsigned int d = 0;
+
+ if (!verbose)
+ pl.setNoVerbose();
+//Load Models
+ for (unsigned int i = 1; i <= pl.getMaxModels(); i++) {
+ if (verbose)
+ cout << ">>>model#" << i << endl;
+ pl.setModel(i);
+ pl.checkModel();
+ this->Protein::load(pl);
+ }
+
+ if (this->size() != 0) {
+ for (unsigned int i = 0; i < this->size(); i++)
+ original_models.push_back(*(this->getSpacer(i)));
+
+ for (unsigned int i = 0; i < this->getSpacer(d)->sizeAmino(); i++)
+ sequence.push_back(this->getSpacer(d)->getAmino(i).getType1L());
+
+ if (verbose)
+ cout << "\n" << "Models load in protein" << endl;
+ }
+}
+
+/**
+ Internal method
+ Chose how much models do you want loa
+ @param (PdbLoader&) , object PdbLoader
+ @return unsigned int
+ */
+unsigned int ProteinModels::selectModels(PdbLoader& pl) {
+
+ unsigned int modelNum;
+ string input;
+
+ cout << "How much do you want load? Insert a value between 2 and ";
+ cout << pl.getMaxModels() << endl;
+
+ getline(cin, input);
+
+ modelNum = stouiDEF(input);
+
+ while (modelNum > pl.getMaxModels() || modelNum < 2) {
+ cerr << "Number of models selected out of bounds! Reinput please..."
+ << endl;
+ getline(cin, input);
+ modelNum = stouiDEF(input);
+
+ }
+
+ return modelNum;
+
+}
+
+/**
+ Load same models
+ @param (PdbLoader&) , object PdbLoader
+ @return void
+ */
+void ProteinModels::loadSameModels(PdbLoader& pl) {
+
+ unsigned int d=0;
+ unsigned int modelNum = selectModels(pl);
+
+ for (unsigned int i = 1; i <= modelNum; i++) {
+ if (verbose)
+ cout << "\t>>>model#" << i << endl;
+ pl.setModel(i); //from pdb loader choose model to load in the protein
+ pl.checkModel();
+ this->Protein::load(pl); // creates the Protein object
+ }
+
+ if (this->size() != 0) {
+ for (unsigned int i = 0; i < this->size(); i++)
+ original_models.push_back(*(this->getSpacer(i)));
+
+ for (unsigned int i = 0; i < this->getSpacer(d)->sizeAmino(); i++)
+ sequence.push_back(this->getSpacer(d)->getAmino(i).getType1L());
+
+ if (verbose)
+ cout << "\n" << "Models load in protein" << endl;
+ }
+}
+
+/**
+ Save vector of models in output file
+ @param (string output) , name of output file
+ @return void
+ */
+void ProteinModels::printModels(string outputFile) {
+
+ /**stream in output*/
+ ofstream fout;
+ string outputFile_1;
+ PdbSaver ps(fout);
+ const string VECTOR = "Vector";
+
+ unsigned int i = 0;
+
+ if (verbose)
+ cout << "\n ###Save models on file ###" << endl;
+ vector::iterator walk = models.begin();
+ while (walk != models.end()) {
+
+ outputFile_1 = outputFile + VECTOR + (itosDEF(i)) + PDB;
+ if (verbose)
+ cout << outputFile_1 << endl;
+
+ fout.open(outputFile_1.c_str());
+ if (!fout) {
+ ERROR("Could not open file for writing.", exception);
+ } else {
+
+ ps.saveSpacer(*walk);
+ walk++;
+ i++;
+ ps.endFile();
+ fout.close();
+
+ if (verbose)
+ cout << "file cloased" << endl;
+ }
+ }
+
+}
+
+/**
+ Overloading method save, save models in output file
+ @param (string output) , name of output file
+ @return void
+ */
+void ProteinModels::save(string outputFile) {
+
+ /**stream in output*/
+ ofstream fout;
+ string outputFile_1;
+ PdbSaver ps(fout);
+
+ if (verbose)
+ cout << "Save models on file..." << endl;
+ // Open the proper output stream (file or stdout)
+ for (unsigned int i = 0; i < this->size(); i++) {
+
+ outputFile_1 = outputFile + (itosDEF(i)) + PDB;
+
+ if (verbose)
+ cout << outputFile_1 << endl;
+
+ fout.open(outputFile_1.c_str());
+
+ if (!fout) {
+ ERROR("Could not open file for writing.", exception);
+ } else
+ ps.saveSpacer(*(this->getSpacer(i)));
+
+ ps.endFile();
+ fout.close();
+
+ if (verbose)
+ cout << "file closed." << endl;
+ }
+ if (verbose)
+ cout << " " << endl;
+
+}
+
+/**
+ Remove file created by save method
+ @param (string output) , name of output file
+ @return void
+ */
+void ProteinModels::remove(string outputFile) {
+
+ string outputFile_1;
+
+ if (verbose)
+ cout << "Deleting file..." << endl;
+ // Open the proper output stream (file or stdout)
+ for (unsigned int i = 0; i < this->size(); i++) {
+
+ outputFile_1 = outputFile + (itosDEF(i)) + PDB;
+ if (std::remove(outputFile_1.c_str()) != 0)
+ ERROR("File don't deleted! ", exception);
+
+ }
+ if (verbose)
+ cout << " " << endl;
+
+}
+
+/**
+ Add Spacer in object ProteinModels
+ @param (Spacer&) , object Spacer
+ @return void
+ */
+void ProteinModels::addModels(Spacer& sp) {
+ this->models.push_back(sp);
+
+}
+
+/**
+ Get Spacer from Protein Models
+ @param (unsigned int) , number of Spacer (range 0/number Spacer)
+ @return Spacer
+ */
+Spacer ProteinModels::getModel(unsigned int u) {
+ return this->models[u];
+}
diff --git a/Mobi/Sources/ProteinModels.h b/Mobi/Sources/ProteinModels.h
new file mode 100644
index 0000000..05664d0
--- /dev/null
+++ b/Mobi/Sources/ProteinModels.h
@@ -0,0 +1,92 @@
+/* This file is part of Victor
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file PreteinModel.h
+ * @author Riccardo Zanella
+ * @date Lug 2015
+ * @version 0.1
+ */
+
+#ifndef MOBI_SOURCES_PROTEINMODEL_
+#define MOBI_SOURCES_PROTEINMODEL_
+
+//Includes:
+#include
+#include
+
+using namespace Victor::Biopool;
+
+namespace Victor {
+namespace Mobi {
+/**
+ * @brief Extends Protein class with functionalities related to manipulation of NMR model and models comparations.
+ * Scale Distance metric is provided.
+ */
+class ProteinModels: public Protein {
+
+public:
+
+ // CONSTRUCTORS/DESTRUCTOR:
+ ProteinModels();
+
+ ProteinModels(const Protein& _orig);
+
+ virtual ~ProteinModels();
+
+ // PREDICATES:
+
+ virtual void load(PdbLoader& pl);
+
+
+ void loadSameModels(PdbLoader& pl);
+
+
+private:
+ unsigned int selectModels(PdbLoader& pl);
+
+public:
+ // MODIFIERS:
+
+ /**
+ You can chose if you want verbose output from this class
+ @param none
+ @return void
+ */
+ void setVerbose() {
+ verbose = true;
+ }
+
+ void save(string outputFile);
+ void remove(string outputFile);
+
+ Spacer getModel(unsigned u);
+ void addModels(Spacer& sp);
+
+ void printModels(string outputFile);
+
+
+ // MODIFIERS:
+private:
+
+ bool verbose;
+
+public:
+ vector original_models;
+ vector models;
+ vector sequence;
+
+};
+}
+}
+#endif /* MOBI_SOURCES_PROTEINMODEL_ */
diff --git a/Mobi/Sources/SecondaryStructure.cc b/Mobi/Sources/SecondaryStructure.cc
new file mode 100644
index 0000000..97149b4
--- /dev/null
+++ b/Mobi/Sources/SecondaryStructure.cc
@@ -0,0 +1,171 @@
+/*
+ @file ProteinModels.cc
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+// Includes:
+#include "SecondaryStructure.h"
+
+using namespace Victor;
+using namespace Victor::Mobi;
+using namespace Victor::Biopool;
+
+// CONSTRUCTORS/DESTRUCTOR:
+
+/**
+ * Default Constructor
+ * @param ( ProteinModels& ), object PreteinModels .
+ */
+SecondaryStructure::SecondaryStructure(const ProteinModels& modelli,
+ bool verbose) :
+ verbose(verbose), models(modelli.original_models) {
+}
+
+/**
+ * Default Deconstructor
+ * @param ( ProteinModels& ), object PreteinModels .
+ */
+SecondaryStructure::~SecondaryStructure() {
+}
+
+/**
+ * get the secondary structure. Return is a vector of vector of char where vector[i][j]
+ * 'i' is a specific amino acid
+ * 'j' is a specific model
+ * and char is a letter of secondary structure of amino acid 'i' and models 'j'
+ * @return vector< vector > , return vector of vector of char.
+ */
+vector< vector > SecondaryStructure::getSecStructFromModels(){
+
+ unsigned int num_amino = 0;
+ if (models.size() != 0)
+ num_amino = models[0].sizeAmino();
+ else
+ ERROR("Nothing models in the protein, remember load models.", exception);
+
+ //create a support vector to get secondary structure
+ vector > vettore_di_supporto(num_amino, set());
+
+ //create a vector for manipulated all amiocid's structure
+ vector< vector > sec_Structures(num_amino,
+ vector(models.size()));
+
+ if (verbose) {
+ cout << "\nStart procedure select secondary structure... " << endl;
+ cout << "Model size: " << models.size() << endl;
+ }
+ //for each models
+ for (unsigned int i = 0; i < models.size(); i++) {
+
+ models[i].setDSSP(false);
+ vettore_di_supporto = models[i].getDSSP();
+ //cout << "support vector size: " << vettore_di_supporto.size() << endl;
+
+ //iteration on vector of set
+ for (unsigned int j = 0; j < num_amino; j++) {
+ //extract first char value and push it in vector char
+ sec_Structures[j][i] = (*(vettore_di_supporto[j].begin()));
+
+ }
+
+ }
+
+return sec_Structures;
+
+}
+
+/**
+ * get the mobility analyzing secondary structures
+ * @return vector , return vector of mobility from Secondary Structure
+ */
+vector SecondaryStructure::getMobilitySecondaryStructure() {
+
+ mobility.clear();
+ vector< vector > sec_Structures;
+
+ unsigned int num_amino = 0;
+ if (models.size() != 0)
+ num_amino = models[0].sizeAmino();
+ else
+ ERROR("Nothing models in the protein, remember load models.", exception);
+
+
+ sec_Structures = getSecStructFromModels();
+
+ char test;
+ bool flag;
+
+ for (unsigned int i = 0; i < num_amino; i++) {
+
+ test = sec_Structures[i][0];
+ flag = true;
+
+ //if the first letter is empty or is a S
+ if ((test != 'G') && (test != 'H') && (test != 'I') && (test != 'T')
+ && (test != 'E') && (test != 'B')) {
+ //verifing that is all S and/or empty space.
+
+ for (unsigned int j = 0; j < models.size(); j++) {
+
+ if ((sec_Structures[i][j] != 'G')
+ && (sec_Structures[i][j] != 'H')
+ && (sec_Structures[i][j] != 'I')
+ && (sec_Structures[i][j] != 'T')
+ && (sec_Structures[i][j] != 'E')
+ && (sec_Structures[i][j] != 'B')) {
+ } else {
+
+ mobility.push_back('M');
+ flag = false;
+ break;
+
+ }
+
+ }
+ if (flag) {
+ mobility.push_back('c');
+ }
+ //the first letter is the letter of Secondary Structure
+ } else {
+
+ //verifing that all letter is the same
+ for (unsigned int j = 0; j < models.size(); j++) {
+
+ if ((sec_Structures[i][j] == test)) {
+ } else {
+
+ mobility.push_back('M');
+ flag = false;
+ break;
+
+ }
+
+ }
+ if (flag) {
+ mobility.push_back('.');
+ }
+
+ }
+
+ }
+
+ return mobility;
+}
+
diff --git a/Mobi/Sources/SecondaryStructure.h b/Mobi/Sources/SecondaryStructure.h
new file mode 100644
index 0000000..813c082
--- /dev/null
+++ b/Mobi/Sources/SecondaryStructure.h
@@ -0,0 +1,56 @@
+/* This file is part of Victor
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file SecondaryStructure.h
+ * @author Riccardo Zanella
+ * @date 21 lug 2015
+ * @version 0.1
+ */
+
+// Includes:
+#ifndef MOBI_SOURCES_SECONDARYSTRUCTURE_H_
+#define MOBI_SOURCES_SECONDARYSTRUCTURE_H_
+
+#include
+
+using namespace Victor::Biopool;
+
+namespace Victor {
+namespace Mobi {
+
+/**@brief Implements a Secondary Structure.
+ * Includes methods to obtain mobility from the analyze of Secondary Structure.
+ */
+
+class SecondaryStructure {
+public:
+
+ // CONSTRUCTORS/DESTRUCTOR:
+
+ SecondaryStructure(const ProteinModels& _orig, bool _verbose = false);
+ virtual ~SecondaryStructure();
+
+ // PREDICATES:
+ vector< vector >getSecStructFromModels();
+ vector getMobilitySecondaryStructure();
+
+private:
+ bool verbose;
+ vector models;
+ vector mobility;
+
+};
+}
+}
+#endif /* MOBI_SOURCES_SECONDARYSTRUCTURE_H_ */
diff --git a/Mobi/Sources/StandardDeviation.cc b/Mobi/Sources/StandardDeviation.cc
new file mode 100644
index 0000000..942cfbc
--- /dev/null
+++ b/Mobi/Sources/StandardDeviation.cc
@@ -0,0 +1,373 @@
+/*
+ @file StandardDeviation.cc
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+// Includes:
+#include "StandardDeviation.h"
+
+using namespace Victor;
+using namespace Victor::Mobi;
+using namespace Victor::Biopool;
+
+// CONSTRUCTORS/DESTRUCTOR:
+
+/**
+ * Default Constructor
+ * @param (const ProteinModels&), object ProteinModels
+ * @param (bool verbose), verbose
+ */
+StandardDeviation::StandardDeviation(const ProteinModels& modelli, bool verbose) :
+ verbose(verbose), original_models(modelli.original_models), models(
+ modelli.models) {
+}
+
+/**
+ * DESTRUCTOR
+ *@param none
+ */
+StandardDeviation::~StandardDeviation() {
+}
+
+/**
+ * internal method, take atom from spacer
+ * @param (Spacer* s), pointer to the spacer object
+ * @param (bool flag), internal flag
+ */
+void StandardDeviation::getCaAtom(Spacer* s, bool flag) {
+
+//per un modello fissato creo il vettore di atomi
+ AminoAcid* a = new AminoAcid;
+
+ for (unsigned int u = 0; u < s->sizeAmino(); u++) {
+ a = &(s->getAmino(u));
+
+ unsigned int i = 1;
+
+ if (flag)
+ this->CaVector1.push_back(a->getAtom(i));
+ else
+ this->CaVector2.push_back(a->getAtom(i));
+
+ if (a->getAtom(i).getCode() != CA)
+ ERROR("Atom find is not CA atom.", exception);
+
+ }
+
+}
+
+/**
+ * Get average distance Scale Distance
+ * @return vector
+ *
+ */
+vector StandardDeviation::get_everage_distance() {
+
+ if (verbose)
+ cout << "### Start average distance scale distance ###" << endl;
+ /** vector average Scale Distance*/
+ dist_everage.clear();
+
+ Spacer* primo_modello = new Spacer;
+ Spacer* secondo_modello = new Spacer;
+
+ unsigned int num_atomi = 0;
+ double ScalD, distance = -1.0;
+
+ if (models.size() != 0)
+ num_atomi = models[0].sizeAmino();
+ else
+ ERROR("ProteinModels empty, remember execute TmImpose.", exception);
+
+ vector > dist_from_Ca_atoms(num_atomi, vector(0.0));
+
+ if (verbose) {
+ cout << "Number of models: " << models.size() << endl;
+ cout << "Number of CA atoms in each models: " << num_atomi << endl;
+ }
+
+ //for any models create atom's vector
+ unsigned int u = 0;
+
+ while (u < (models.size())) {
+
+ primo_modello = &models[u];
+ getCaAtom(primo_modello, true);
+ u++;
+
+ secondo_modello = &models[u];
+ getCaAtom(secondo_modello, false);
+ u++;
+
+ for (unsigned int i = 0; i < num_atomi; i++) {
+ distance = CaVector1[i].distance(CaVector2[i]);
+ ScalD = 1.0 / (1.0 + (pow((distance / 4.0), 2.0)));
+ dist_from_Ca_atoms[i].push_back(ScalD);
+ }
+
+ CaVector1.clear();
+ CaVector2.clear();
+
+ }
+
+ int count;
+ double sum;
+ for (unsigned int i = 0; i < num_atomi; i++) {
+ count = 0;
+ sum = 0;
+ vector::iterator atom = dist_from_Ca_atoms[i].begin();
+ while (atom != dist_from_Ca_atoms[i].end()) {
+
+ sum = sum + (*atom);
+
+ atom++;
+ count++;
+ }
+ dist_everage.push_back((sum / count));
+
+ }
+
+ return dist_everage;
+
+}
+
+/**
+ * Get standard deviation from Scale Distance
+ * @return vector
+ */
+vector StandardDeviation::get_standard_deviation() {
+
+ if (verbose)
+ cout << "### Start calculate standard deviation ###" << endl;
+
+ dist_everage.clear();
+ ScD.clear();
+
+ Spacer* primo_modello = new Spacer;
+ Spacer* secondo_modello = new Spacer;
+
+ unsigned int num_atomi = 0;
+ double ScalD, distance = -1.0;
+
+ if (models.size() != 0)
+ num_atomi = models[0].sizeAmino();
+ else
+ ERROR("ProteinModels empty, remember execute TmImpose.", exception);
+
+ vector > dist_from_Ca_atoms(num_atomi, vector(0.0));
+
+ if (verbose) {
+ cout << "Number of models: " << models.size() << endl;
+ cout << "Number of CA atoms in each models: " << num_atomi << endl;
+ }
+ //scorro i modelli e per ognuno creo il vettore di atomi
+ unsigned int u = 0;
+
+ while (u < (models.size())) {
+
+ primo_modello = &models[u];
+ getCaAtom(primo_modello, true);
+ u++;
+
+ secondo_modello = &models[u];
+ getCaAtom(secondo_modello, false);
+ u++;
+
+ for (unsigned int i = 0; i < num_atomi; i++) {
+ distance = CaVector1[i].distance(CaVector2[i]);
+ ScalD = 1.0 / (1.0 + (pow((distance / 4.0), 2.0)));
+ dist_from_Ca_atoms[i].push_back(ScalD);
+ }
+
+ CaVector1.clear();
+ CaVector2.clear();
+
+ }
+
+ int count;
+ double sum;
+ for (unsigned int i = 0; i < num_atomi; i++) {
+ count = 0;
+ sum = 0;
+ vector::iterator atom = dist_from_Ca_atoms[i].begin();
+ while (atom != dist_from_Ca_atoms[i].end()) {
+
+ sum = sum + (*atom);
+
+ atom++;
+ count++;
+ }
+ dist_everage.push_back((sum / count));
+
+ }
+
+ double standDev = -1;
+
+ vector::iterator everage = dist_everage.begin();
+
+ for (unsigned int i = 0; i < num_atomi; i++) {
+ sum = 0;
+ count = 0;
+ vector::iterator atom = dist_from_Ca_atoms[i].begin();
+
+ while (atom != dist_from_Ca_atoms[i].end()) {
+ sum += (pow(((*atom) - (*everage)), 2.0));
+ atom++;
+ count++;
+
+ }
+
+ standDev = sqrt(sum / count);
+
+ ScD.push_back(standDev);
+
+ everage++;
+
+ }
+
+ return ScD;
+}
+
+/**
+ * Get standard deviation from angle_PHI
+ * @return vector
+ */
+vector StandardDeviation::get_StandarDev_angle_PHI() {
+
+ if (verbose)
+ cout << "### Start calculate standard deviation from angle PHI ###" << endl;
+
+ double num_amino = 0;
+ double sum = 0;
+
+ if (original_models.size() < 2)
+ ERROR("Number of models insufficient", exception)
+ else
+ num_amino = original_models[0].sizeAmino();
+
+ if (verbose) {
+ cout << "Number of models: " << original_models.size() << endl;
+ cout << "Number of amino in each models: " << num_amino << endl;
+ }
+
+
+
+ angle_PHI.clear();
+ vector > misure_PHI(num_amino,
+ vector(original_models.size()));
+ vector everage(num_amino);
+
+//calculate angle
+ for (unsigned int i = 0; i < original_models.size(); i++)
+ for (unsigned int j = 0; j < num_amino; j++)
+ misure_PHI[j][i] = original_models[i].getAmino(j).getPhi();
+
+//calculate average angle
+ for (unsigned int j = 0; j < num_amino; j++) {
+ sum = 0;
+
+ for (unsigned int i = 0; i < original_models.size(); i++) {
+ sum = sum + misure_PHI[j][i];
+ }
+
+ everage[j] = (sum / (original_models.size()));
+
+ }
+
+ //calculate stadDev
+ double standDev = -1;
+
+ for (unsigned int j = 0; j < num_amino; j++) {
+ sum = 0;
+ for (unsigned int i = 0; i < original_models.size(); i++) {
+
+ sum += (pow((misure_PHI[j][i] - everage[j]), 2.0));
+ }
+
+ standDev = sqrt(sum / original_models.size());
+ angle_PHI.push_back(standDev);
+ }
+
+ return angle_PHI;
+
+}
+
+/**
+ * Get standard deviation from angle_PSI
+ * @return vector
+ */
+vector StandardDeviation::get_StandarDev_angle_PSI() {
+
+ if (verbose)
+ cout << "### Start calculate standard deviation from angle PSI ###" << endl;
+
+ double num_amino = 0;
+ double sum = 0;
+
+ if (original_models.size() < 2)
+ ERROR("Number of models insufficient", exception)
+ else
+ num_amino = original_models[0].sizeAmino();
+
+ if (verbose) {
+ cout << "Number of models: " << original_models.size() << endl;
+ cout << "Number of amino in each models: " << num_amino << endl;
+ }
+
+
+ angle_PSI.clear();
+ vector > misure_PSI(num_amino,
+ vector(original_models.size()));
+ vector everage(num_amino);
+
+//calcolo angoli
+ for (unsigned int i = 0; i < original_models.size(); i++)
+ for (unsigned int j = 0; j < num_amino; j++)
+ misure_PSI[j][i] = original_models[i].getAmino(j).getPsi();
+
+//calcolo media angoli
+ for (unsigned int j = 0; j < num_amino; j++) {
+ sum = 0;
+
+ for (unsigned int i = 0; i < original_models.size(); i++) {
+ sum = sum + misure_PSI[j][i];
+ }
+
+ everage[j] = (sum / (original_models.size()));
+
+ }
+
+ //calcolo stadDev
+ double standDev = -1;
+
+ for (unsigned int j = 0; j < num_amino; j++) {
+ sum = 0;
+ for (unsigned int i = 0; i < original_models.size(); i++) {
+
+ sum += (pow((misure_PSI[j][i] - everage[j]), 2.0));
+ }
+
+ standDev = sqrt(sum / original_models.size());
+ angle_PSI.push_back(standDev);
+ }
+
+ return angle_PSI;
+
+}
diff --git a/Mobi/Sources/StandardDeviation.h b/Mobi/Sources/StandardDeviation.h
new file mode 100644
index 0000000..f39318b
--- /dev/null
+++ b/Mobi/Sources/StandardDeviation.h
@@ -0,0 +1,71 @@
+/* This file is part of Victor
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file ScaleDistance.h
+ * @author Riccardo Zanella
+ * @date 11 lug 2015
+ * @version 0.1
+ */
+
+#ifndef MOBI_SOURCES_STANDARDDEVIATION_H_
+#define MOBI_SOURCES_STANDARDDEVIATION_H_
+
+#include
+#include
+#include
+#include
+
+using namespace Victor::Biopool;
+
+namespace Victor {
+namespace Mobi {
+
+class StandardDeviation {
+
+ /**
+ * @brief Extends Protein class with functionalities related to manipulation of NMR model and models comparations.
+ * Scale Distance metric is provided.
+ */
+
+public:
+
+ // CONSTRUCTORS/DESTRUCTOR:
+ StandardDeviation(const ProteinModels& _orig, bool _verbose = false);
+
+ virtual ~StandardDeviation();
+
+ vector get_everage_distance();
+ vector get_standard_deviation();
+ vector get_StandarDev_angle_PHI();
+ vector get_StandarDev_angle_PSI();
+
+private:
+ void getCaAtom(Spacer* s, bool flag);
+
+private:
+ bool verbose;
+ vector original_models;
+ vector models;
+ vector CaVector1, CaVector2;
+ vector > dist_from_Ca_atoms;
+ vector dist_everage;
+ vector ScD;
+ vector angle_PHI;
+ vector angle_PSI;
+
+};
+}
+}
+
+#endif /* MOBI_SOURCES_STANDARDDEVIATION_H_ */
diff --git a/Mobi/Sources/TmScore.cc b/Mobi/Sources/TmScore.cc
new file mode 100644
index 0000000..ed5875d
--- /dev/null
+++ b/Mobi/Sources/TmScore.cc
@@ -0,0 +1,148 @@
+/* This file is part of Victor
+
+ Victor 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.
+
+ Victor 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 Victor. If not, see .
+ */
+
+/**
+ * @file TmScore.cc
+ * @author Riccardo Zanella
+ * @date Lug 2015
+ * @version 0.1
+ */
+
+//Includes:
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace Victor::Mobi;
+using namespace Victor::Biopool;
+using namespace std;
+
+const string TMTMP_OUT = "TMScore.pdb";
+
+/**
+ * @brief Default Constructor
+ * @param _binary (string) full path to binary TMScore file, must have execution permission
+ * @param _tmp (string) full path to temp dir, must have write permission
+ * @param _tmp bool verbose
+ */
+TmScore::TmScore(string _binary, string output, bool verbose) :
+ binary(_binary), outputTmScore(output + TMTMP_OUT), verbose(verbose) {
+}
+
+//TmScore::TmScore(string _binary, string output, bool verbose) :
+// binary(_binary), tmp(output.substr(output.length() - 1, 1) == "/" ?
+// output : output + "/"), verbose(verbose) {
+//}
+
+TmScore::~TmScore() {
+}
+
+/**
+ *
+ * @param _binary (string) full path to binary TMScore file, must have execution permission
+ * @param _tmp string, path of model file, must have read permission
+ * @param _tmp string, path of native file, must have read permission
+ * @return (Protein*), return pointer to rototraslated protein
+ */
+Protein* TmScore::TmImpose(string modelFile, string nativeFile) {
+
+ Protein* prot = NULL;
+ //if have read permission
+ if (access(modelFile.c_str(), R_OK) == 0
+ && access(nativeFile.c_str(), R_OK) == 0) {
+
+ //if binary have execute permission
+ if (access(binary.c_str(), X_OK) == 0) {
+ pid_t pid;
+ //Pipeing TMS output
+ int pipefd[2];
+ pipe(pipefd);
+ //Forking child for TMS
+ pid = fork();
+ if (pid < 0) {
+ ERROR("Unable to fork child process", error);
+ } else {
+ if (pid == 0) {
+ close(pipefd[0]); //close input pipe
+ if (dup2(pipefd[1], 1) < 0)
+ ERROR("Unable to redirect output TMScore", error);//stdout
+ if (dup2(pipefd[1], 2) < 0)
+ ERROR("Unable to redirect error output TMScore", error);//stderr
+ close(pipefd[1]); //close output pipe
+ if (execl(binary.c_str(), binary.c_str(), modelFile.c_str(),
+ nativeFile.c_str(), "-o", outputTmScore.c_str(),
+ NULL))
+ ERROR("Unable to exec", error);
+ } else {
+ //Read output from child pipe
+
+ //////////////////////////////////////////////////////////////////////////
+ int status;
+
+ wait(&status);
+
+ remove(outputTmScore.c_str());
+
+ if (access((outputTmScore + "_atm").c_str(), R_OK) != 0)
+ ERROR("Cannot read pdb file to fix", exception);
+
+ ifstream inFile((outputTmScore + "_atm").c_str());
+ stringstream buffer;
+ string line;
+
+ while (inFile) {
+ line = readLine(inFile);
+ if (line.substr(0, 16) == "REMARK TM-score") {
+ buffer << line << endl;
+ buffer << "MODEL 1" << endl;
+
+ } else if (line.substr(0, 6) == "ATOM ") {
+ buffer << line << endl;
+ } else if (line.substr(0, 3) == "TER") {
+ buffer << line << endl;
+ buffer << "ENDMDL" << endl;
+ break;
+ }
+ }
+
+ buffer.clear();
+
+ //Load from memory buffer
+ PdbLoader pl(buffer);
+
+ pl.setNoVerbose();
+
+ pl.setModel(1);
+ pl.checkModel();
+
+ prot = new Protein();
+
+ pl.loadProtein(*prot);
+
+ }
+ }
+ } else
+ ERROR("No access to " + binary + " binary!", exception);
+ } else
+ ERROR("No access to pdb files " + modelFile + " or " + nativeFile,
+ exception);
+ return prot;
+}
diff --git a/Mobi/Sources/TmScore.h b/Mobi/Sources/TmScore.h
new file mode 100644
index 0000000..e3e0277
--- /dev/null
+++ b/Mobi/Sources/TmScore.h
@@ -0,0 +1,74 @@
+/* This file is part of Victor
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+/**
+ * @file TmScore.h
+ * @author Riccardo Zanella
+ * @date Lug 2015
+ * @version 0.1
+ */
+
+#ifndef MOBI_SOURCES_TMSCOREBIN_H_
+#define MOBI_SOURCES_TMSCOREBIN_H_
+
+//Include:
+#include
+#include
+#include
+
+using namespace Victor::Biopool;
+using namespace Victor::Mobi;
+using namespace std;
+
+extern const string TMTMP_OUT;
+
+namespace Victor {
+
+namespace Mobi {
+
+/**
+ * @brief TMScore functionalities through external binary.
+ */
+
+class TmScore {
+
+ // CONSTRUCTORS/DESTRUCTOR:
+public:
+
+ TmScore(string _binary = "TMScore", string output = ".", bool _verbose =
+ false);
+
+ // PREDICATES:
+ Protein* TmImpose(string modelFile, string nativeFile);
+
+ // MODIFIERS:
+ /**
+ You can chose if you want verbose output from this class
+ @param none
+ @return void
+ */
+ void setVerbose(bool v) {
+ verbose = v;
+ }
+ /**
+ * Default deconstructor
+ */
+ ~TmScore();
+
+private:
+ string binary;
+ const string outputTmScore;
+ bool verbose;
+};
+}
+}
+#endif /* MOBI_SOURCES_TMSCOREBIN_H_ */
diff --git a/Mobi/Tests/Makefile b/Mobi/Tests/Makefile
new file mode 100644
index 0000000..52cf192
--- /dev/null
+++ b/Mobi/Tests/Makefile
@@ -0,0 +1,57 @@
+#--*- makefile -*--------------------------------------------------------------
+#
+# Standard makefile
+#
+#------------------------------------------------------------------------------
+
+# Path to project directory.
+UPDIR = ../..
+# Path to subdirectories.
+SUBDIR=
+# Path to directory for binaries:
+BINPATH = ../../bin
+
+
+#
+# Libraries and paths (which are not defined globally).
+#
+
+LIBS = -lMobi -lBiopool -ltools -L/usr/lib/ -lm -ldl -lcppunit
+
+LIB_PATH = -L.
+
+INC_PATH = -I. -I../../tools/ -I../../Biopool/Sources -I../../Mobi/Sources
+
+#
+# Objects and headers
+#
+
+SOURCES = TestMobi.cc TestProteinModels.h TestStandardDeviation.h TestSaver.h
+
+OBJECTS = $(SOURCES:.cpp=.o)
+
+TARGETS = TestMobi
+
+EXECS = TestMobi
+
+LIBRARY = TESTlibMobi.a
+
+
+
+#
+# Install rule
+#
+
+compile: all
+
+all: install
+
+install: $(LIBRARY) $(TARGETS)
+ mv $(EXECS) $(UPDIR)/bin
+ mv $(LIBRARY) $(UPDIR)/lib
+
+#
+# Call global Makefile to do the job.
+#
+
+include ../../Makefile.global
\ No newline at end of file
diff --git a/Mobi/Tests/TestMobi.cc b/Mobi/Tests/TestMobi.cc
new file mode 100644
index 0000000..408bad7
--- /dev/null
+++ b/Mobi/Tests/TestMobi.cc
@@ -0,0 +1,46 @@
+/*
+ @file TestMobi.cc
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+
+using namespace Victor::Mobi;
+using namespace Victor::Biopool;
+using namespace std;
+
+int main() {
+ CppUnit::TextUi::TestRunner runner;
+
+ cout << "Creating Test Suites:" << endl;
+ runner.addTest(TestProteinModels::suite());
+ runner.addTest(TestStandardDeviation::suite());
+ runner.addTest(TestSecondaryStructure::suite());
+ runner.addTest(TestSaver::suite());
+
+ cout << "Running the unit tests. " << endl;
+ runner.run();
+ return 0;
+}
diff --git a/Mobi/Tests/TestProteinModels.h b/Mobi/Tests/TestProteinModels.h
new file mode 100644
index 0000000..4b3ae74
--- /dev/null
+++ b/Mobi/Tests/TestProteinModels.h
@@ -0,0 +1,249 @@
+/*
+ @file TestProteinModels.h
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+#ifndef MOBI_TESTS_TESTPROTEINMODELS_H_
+#define MOBI_TESTS_TESTPROTEINMODELS_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "ProteinModels.h"
+#include
+
+using namespace std;
+using namespace Victor::Mobi;
+
+
+class TestProteinModels : public CppUnit::TestFixture {
+
+public:
+ TestProteinModels() {}
+ virtual ~TestProteinModels(){}
+
+
+ static CppUnit::Test *suite() {
+ CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite(
+ "TestProteinModels");
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test1 - Populate the ProteinModels",
+ &TestProteinModels::testPopulation));
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test2 - Correct aminoacid sequence",
+ &TestProteinModels::aminoSequence));
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test3 - Correct load protein rototralated",
+ &TestProteinModels::rototraslated));
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test4 - Save protein models rototraslated",
+ &TestProteinModels::printModels));
+
+ return suiteOfTests;
+ }
+
+ /** @brief Setup method. */
+ void setUp() {
+ }
+ /** @brief Teardown method. */
+ void tearDown() {
+ }
+
+protected:
+ /** @brief Test load */
+ void testPopulation() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.load(pl);
+
+ // --------------------------------------------------
+ // 3. Test
+ // --------------------------------------------------
+ cout << endl << "Models in pdb file is: " << pl.getMaxModels() << "\n"
+ << "Models load is" << test.original_models.size() << endl;
+ CPPUNIT_ASSERT(pl.getMaxModels() == test.original_models.size());
+
+ }
+ /** @brief Test aminoSequence */
+ void aminoSequence() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned d = 0;
+ string aminoaced_sequence =
+ "GSGNSLEKHSWYHGPVSRNAAEYLLSSGINGSFLVRESESSPGQRSISLRYEGRVYHYRINTASDGKLYVSSESRFNTLAELVHHHSTVADGLITTLHYPAPKRGIHRD";
+ string amino;
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels* test = new ProteinModels;
+ test->setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ pl.setModel(1);
+ pl.checkModel();
+ test->Protein::load(pl);
+
+ for (unsigned int i = 0; i < test->getSpacer(d)->sizeAmino(); i++)
+ amino += (test->getSpacer(d)->getAmino(i).getType1L());
+
+ // --------------------------------------------------
+ // 3. Test
+ // --------------------------------------------------
+ cout << endl << "Sequence in pdb file is: " << aminoaced_sequence
+ << "\n" << "Sequence load is" << amino << endl;
+ CPPUNIT_ASSERT(aminoaced_sequence == amino);
+
+ }
+ /** @brief Test function of TmScore */
+ void rototraslated() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+
+ // --------------------------------------------------
+ // 2. Save
+ // --------------------------------------------------
+
+ test.save(outputFile);
+
+ // --------------------------------------------------
+ // 2. Rototranslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+ // --------------------------------------------------------
+ // 2. Test save model vector that contain couple of models,
+ // the first rototranslate, the second is the model
+ // --------------------------------------------------------
+ cout << endl << "Models load is: " << test.original_models.size()
+ << "\n"
+ << "Models load whit models rototranslated (all models imposed on all models) "
+ << test.models.size() << endl;
+ unsigned int test_model_size = (test.original_models.size()
+ * (test.original_models.size() - 1));
+ CPPUNIT_ASSERT(test_model_size == test.models.size());
+
+ }
+ /** @brief Test function printmodels */
+ void printModels() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+ // --------------------------------------------------
+ // 2. Save
+ // --------------------------------------------------
+ test.save(outputFile);
+ // --------------------------------------------------
+ // 2. Rototraslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+ // ------------------------------------------------------
+ // 5. save model vector that contain couple of models,
+ // the first rototranslate, the second is the model
+ // ------------------------------------------------------
+
+ test.printModels(outputFile);
+ cout << endl << "File saved in folder data: " << endl;
+
+ }
+
+};
+
+#endif /* MOBI_TESTS_TESTPROTEINMODELS_H_ */
diff --git a/Mobi/Tests/TestSaver.h b/Mobi/Tests/TestSaver.h
new file mode 100644
index 0000000..8b5324d
--- /dev/null
+++ b/Mobi/Tests/TestSaver.h
@@ -0,0 +1,253 @@
+/*
+ @file TestSaver.h
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+
+#ifndef MOBI_TESTS_TESTSAVER_H_
+#define MOBI_TESTS_TESTSAVER_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "ProteinModels.h"
+#include "StandardDeviation.h"
+#include "MobiSaver.h"
+
+using namespace std;
+using namespace Victor::Mobi;
+
+
+class TestSaver : public CppUnit::TestFixture {
+
+public:
+ TestSaver() {}
+ virtual ~TestSaver(){}
+
+
+ static CppUnit::Test *suite() {
+ CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite(
+ "TestSaver");
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test1 - Test mask average filtered with DSSP",
+ &TestSaver::testFilterDSSP));
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test2 - Test mask scaled distance filtered by logic mask",
+ &TestSaver::testFilterMask));
+ return suiteOfTests;
+ }
+
+ /** @brief Setup method. */
+ void setUp() {
+ }
+ /** @brief Teardown method. */
+ void tearDown() {
+ }
+
+protected:
+ /** @brief Test save mobility from average filtered by DSSP */
+ void testFilterDSSP() {
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+ const string OUTPDB = "ResultMobi.pdb";
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ string out_pdb = outputFile + OUTPDB;
+ ofstream ofstream(out_pdb.c_str(), ofstream::app);
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+ // --------------------------------------------------
+ // 3. Save
+ // --------------------------------------------------
+ test.save(outputFile);
+ // --------------------------------------------------
+ // 4. Rototraslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+
+ // --------------------------------------------------
+ // 5. Calculate average
+ // --------------------------------------------------
+ MobiSaver saver(test, outputFile, ofstream, true);
+
+ StandardDeviation std(test, true);
+ vector ever;
+ ever = std.get_everage_distance();
+
+ // --------------------------------------------------
+ // 6. save everage
+ // --------------------------------------------------
+ saver.mob_eveScalD(ever);
+
+ // --------------------------------------------------
+ // 7. Calculate secondary structure
+ // --------------------------------------------------
+ SecondaryStructure sstr(test, true);
+
+ vector MOB;
+ MOB = sstr.getMobilitySecondaryStructure();
+
+ // --------------------------------------------------
+ // 8. save secondary structure
+ // --------------------------------------------------
+
+ saver.mob_SecS(MOB);
+
+ // --------------------------------------------------
+ // 9. save mobility filtered
+ // --------------------------------------------------
+
+ saver.mob_eveScalD_filtSecS(ever, MOB);
+
+ // --------------------------------------------------
+ // 9. remove trash
+ // --------------------------------------------------
+
+ test.remove(outputFile);
+ remove(out_pdb.c_str());
+ string trash = outputFile + "TMScore.pdb_atm";
+ remove(trash.c_str());
+
+ }
+
+
+ /** @brief Test save mobility from standard deviation filtered whith logic mask */
+ void testFilterMask() {
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+ const string OUTPDB = "ResultMobi.pdb";
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ string out_pdb = outputFile + OUTPDB;
+ ofstream ofstream(out_pdb.c_str(), ofstream::app);
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+ // --------------------------------------------------
+ // 3. Save
+ // --------------------------------------------------
+ test.save(outputFile);
+ // --------------------------------------------------
+ // 4. Rototraslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+
+ // --------------------------------------------------
+ // 5. Calculate average
+ // --------------------------------------------------
+ MobiSaver saver(test, outputFile, ofstream, true);
+
+ StandardDeviation std(test, true);
+
+ vector SD;
+ SD = std.get_standard_deviation();
+
+
+ // --------------------------------------------------
+ // 6. save standard deviation
+ // --------------------------------------------------
+ saver.mob_stanD(SD);
+
+ // --------------------------------------------------
+ // 7. save mobility filtered with logic mask
+ // 0 = fixed
+ // 1 = mobile
+ //
+ // 1011 » 1111
+ // 1101 » 1111
+ // 10011 » 11111
+ // 11001 » 11111
+ // 01010 » 00000
+ // 00100 » 00000
+ // 001100 » 000000
+ //
+ // ---------------------------------------------------
+
+ saver.mob_stanD_withMask(SD);
+
+ // --------------------------------------------------
+ // 9. remove trash
+ // --------------------------------------------------
+
+ test.remove(outputFile);
+ remove(out_pdb.c_str());
+ string trash = outputFile + "TMScore.pdb_atm";
+ remove(trash.c_str());
+
+ }
+
+
+
+};
+
+
+
+#endif /* MOBI_TESTS_TESTSAVER_H_ */
diff --git a/Mobi/Tests/TestSecondaryStructure.h b/Mobi/Tests/TestSecondaryStructure.h
new file mode 100644
index 0000000..e4e824b
--- /dev/null
+++ b/Mobi/Tests/TestSecondaryStructure.h
@@ -0,0 +1,112 @@
+/*
+ @file TestSecondaryStructure.h
+ @author Riccardo Zanella, riccardozanella89@gmail.com
+ @version 1.0
+ */
+
+/* This file is part of Victor.
+ Victor 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.
+ Victor 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 Victor. If not, see .
+ */
+#ifndef MOBI_TESTS_TESTSECONDARYSTRUCTURE_H_
+#define MOBI_TESTS_TESTSECONDARYSTRUCTURE_H_
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "ProteinModels.h"
+#include "SecondaryStructure.h"
+
+using namespace std;
+using namespace Victor::Mobi;
+
+
+class TestSecondaryStructure : public CppUnit::TestFixture {
+
+public:
+ TestSecondaryStructure() {}
+ virtual ~TestSecondaryStructure(){}
+
+
+ static CppUnit::Test *suite() {
+ CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite(
+ "TestSecondaryStructure");
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test1 - Test Secondary Structure",
+ &TestSecondaryStructure::testStructure));
+
+ return suiteOfTests;
+ }
+
+ /** @brief Setup method. */
+ void setUp() {
+ }
+ /** @brief Teardown method. */
+ void tearDown() {
+ }
+
+protected:
+ /** @brief Test Secondary Structure */
+ void testStructure() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+
+ // --------------------------------------------------
+ // 3. Secondary Structure
+ // --------------------------------------------------
+
+ SecondaryStructure sstr(test, true);
+
+ vector< vector > sec_structures;
+ sec_structures = sstr.getSecStructFromModels();
+
+ vector MOB;
+ MOB = sstr.getMobilitySecondaryStructure();
+
+
+ // ----------------------------------------------------
+ // 4. Print vector o secondary structure for amino acid
+ // ----------------------------------------------------
+ cout << "\nSECONDARY STRUCTURE" << endl;
+ for (unsigned int i=0; i<109 ; i++){
+ cout << "Print secondary structure amino acid number #" << i << endl;
+ for (unsigned int j = 0; j < test.original_models.size(); j++)
+ cout << sec_structures[i][j] << endl;
+
+ cout << "Final valutation of amino acid #" << i << " is " << MOB[i] <.
+ */
+
+
+#ifndef MOBI_TESTS_TESTSTANDARDDEVIATION_H_
+#define MOBI_TESTS_TESTSTANDARDDEVIATION_H_
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "StandardDeviation.h"
+
+using namespace std;
+using namespace Victor::Mobi;
+
+
+class TestStandardDeviation : public CppUnit::TestFixture {
+
+public:
+ TestStandardDeviation() {}
+ virtual ~TestStandardDeviation(){}
+
+
+ static CppUnit::Test *suite() {
+ CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite(
+ "TestProteinModels");
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test1 - test everage scaled distance",
+ &TestStandardDeviation::getEverage));
+
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test2 - test standard deviation",
+ &TestStandardDeviation::getSD));
+ suiteOfTests->addTest(
+ new CppUnit::TestCaller(
+ "Test3 - test standard deviation angle PHI",
+ &TestStandardDeviation::getanglePHI));
+ return suiteOfTests;
+ }
+
+ /** @brief Setup method. */
+ void setUp() {
+ }
+ /** @brief Teardown method. */
+ void tearDown() {
+ }
+
+protected:
+ /** @brief Test for parse/write. */
+ void getEverage() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+
+ // --------------------------------------------------
+ // 2. Save
+ // --------------------------------------------------
+
+ test.save(outputFile);
+
+ // --------------------------------------------------
+ // 2. Rototranslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+
+ // --------------------------------------------------
+ // 3. everage scaled distance Test
+ // --------------------------------------------------
+
+ StandardDeviation st(test, true);
+
+ vector everage = st.get_everage_distance();
+ cout << endl << "Test first 5: " << everage[0] << " " << everage[1]
+ << " " << everage[2] << " " << everage[3] << " " << everage[4]
+ << " " << endl;
+
+ }
+
+ void getSD() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+ unsigned int d = 0;
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+
+ // --------------------------------------------------
+ // 2. Save
+ // --------------------------------------------------
+
+ test.save(outputFile);
+
+ // --------------------------------------------------
+ // 2. Rototranslation
+ // --------------------------------------------------
+ TmScore tm("../Mobi/data/TMscore", outputFile, true);
+
+ Protein* traslata = new Protein();
+
+ for (unsigned int i = 0; i < test.size() - 1; i++)
+ for (unsigned int j = i + 1; j < test.size(); j++) {
+ traslata = tm.TmImpose(outputFile + (itosDEF(i)),
+ outputFile + (itosDEF(j)));
+ if (traslata != NULL) {
+
+ test.addModels(*(traslata->getSpacer(d)));
+ } else
+ ERROR("Error in the creation of shift models.", exeption);
+
+ test.addModels(*(test.getSpacer(j)));
+
+ }
+ // --------------------------------------------------
+ // 3. StandardDeviation Test
+ // --------------------------------------------------
+ StandardDeviation st(test, true);
+
+ vector SD = st.get_standard_deviation();
+ cout << endl << "Test first 5: " << SD[0] << " " << SD[1] << " "
+ << SD[2] << " " << SD[3] << " " << SD[4] << " " << endl;
+
+ }
+
+ void getanglePHI() {
+
+ // --------------------------------------------------
+ // 1. Initialization
+ // --------------------------------------------------
+
+ ifstream inputFile("/home/riccardo/mobi/1AB2_input.pdb");
+ string outputFile = "../Mobi/data/stdout";
+ PdbLoader pl(inputFile);
+ pl.setVerbose();
+ ProteinModels test;
+ test.setVerbose();
+
+ // --------------------------------------------------
+ // 2. Load
+ // --------------------------------------------------
+ test.loadSameModels(pl);
+
+ // --------------------------------------------------
+ // 3. StandardDeviation Test
+ // --------------------------------------------------
+ StandardDeviation st(test, true);
+
+ vector SD = st.get_StandarDev_angle_PHI();
+ cout << endl << "Test first 5: " << SD[0] << " " << SD[1] << " "
+ << SD[2] << " " << SD[3] << " " << SD[4] << " " << endl;
+
+ }
+
+};
+
+#endif /* MOBI_TESTS_TESTSTANDARDDEVIATION_H_ */
diff --git a/Mobi/data/TMscore b/Mobi/data/TMscore
new file mode 100755
index 0000000..e77791c
Binary files /dev/null and b/Mobi/data/TMscore differ
diff --git a/Mobi/readme b/Mobi/readme
new file mode 100644
index 0000000..ada832e
--- /dev/null
+++ b/Mobi/readme
@@ -0,0 +1,40 @@
+
+ MOBI
+
+
+Mobi software allows to load pdb file. Pdb file must be created with NMR technology. Mobi can calculate
+amino acid's residue mobility inside protein.
+The software can load the pdb file entirely (all models of protein), or just partly (only selected models).
+The user can choose the chain to load, the default is first chain of pdb file.
+Different metrics evaluate mobility part of the protein for example the everage scale distance,
+standard deviation, scale distance, the evaluation of angle phi, psi, and various logic mask.
+
+Mobi is a Victor folder, inside are located subfolder APP which includes mobi.cc file that
+includes main.
+After compiling project the executable files are located in /Victor/bin/ with mobi's name.
+For execute Mobi launch with no option or with option -h.
+A help menu will appear showing how to use the program.
+The output file will locate in directory /Victor/Mobi/data.
+Remind that the output file must be deleted if you want rerun the program,
+if this were not the case, the output file could be added in append to the file.
+
+==Usage==
+Requirement:
+Input: NMR pdb file.
+
+Execution: ./mobi pathpdbfile (options in addition)
+
+Option:
+ -o namefile for output to personalize the name of the output file, default is “stdout”
+ -v set verbosity of all object
+ -c set chain of protein to read (default is first chain)
+ -m to load a restricted numbers of models and not all present models in the file
+ -s modify value of mobility of average scaled distance
+ -d modify value of mobility of standard deviation of scaled distance
+ -y modify value of mobility of angle PHI
+ -x modify value of mobility of angle PSI
+ -h help
+
+Output: Output is two files, the first will be a fasta file with different mobility metrics, the second will be
+ a pdb file with save models and the last columns changed with standard deviation and average scaled
+ distance x 100.
diff --git a/documentation.Doxyfile b/documentation.Doxyfile
new file mode 100644
index 0000000..589cb5c
--- /dev/null
+++ b/documentation.Doxyfile
@@ -0,0 +1,2303 @@
+# Doxyfile 1.8.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = documentation Mobi
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST = YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if ... \endif and \cond
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = .
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+#