File size: 5,743 Bytes
8efb4bd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #include "BBContainer.h"
#include "HierarchicalFold.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <vector>
// #include <memory>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
// #include <gperftools/profiler.h>
int main(int argc, char *argv[]) {
// output arguments
for (int i = 0; i < argc; i++)
std::cout << argv[i] << " ";
std::cout << std::endl;
// input parsing
double penetrationThr;
float maxBackboneCollisionPerChain;
float minTemperatureToConsiderCollision;
unsigned int maxResultPerResSet;
std::string outFileNamePrefix;
double restraintsRatio;
double clusterRMSD;
// positional
std::string suFileName;
std::string transFilesPrefix;
int transNumToRead;
int bestK;
std::string constraintsFileName;
po::options_description desc("Usage: <subunitsFileList> <transFilesPrefix> \
<transNumToRead> <bestKeachStep> <constraintsFile>");
// optional
desc.add_options()("help,h", "Combinatoral Assembly help")("version", "CombFold 1.0 2022")(
"penetrationThr,p", po::value<double>(&penetrationThr)->default_value(-1.0),
"maximum allowed penetration between subunit surfaces (default = -1.0)")(
"restraintsRatio,r", po::value<double>(&restraintsRatio)->default_value(0.1),
"constraints ratio (default = 0.1)")("clusterRMSD,c", po::value<double>(&clusterRMSD)->default_value(5.0),
"final clustering RMSD (default = 5.0)")
("maxBackboneCollisionPerChain,b", po::value<float>(&maxBackboneCollisionPerChain)->default_value(0.1),
"Max percentage(0 to 1) of backbone atoms of a chain that can collide with another chain(default=0.1)")(
"minTemperatureToConsiderCollision,t",
po::value<float>(&minTemperatureToConsiderCollision)->default_value(0),
"Minimal Bfactor required for atom to be considered when calculating collisions(default=0)")(
"maxResultPerResSet,j", po::value<unsigned int>(&maxResultPerResSet)->default_value(0),
"number of results saved for each calculated combination of subunits (default=k)")
("outputFileNamePrefix,o", po::value<std::string>(&outFileNamePrefix)->default_value("output"),
"output file name, default name output.res");
// required options: currently 5
po::options_description hidden("Hidden options");
hidden.add_options()("SUlist", po::value<std::string>(&suFileName)->required(), "SU list file name")(
"transFilesPrefix", po::value<std::string>(&transFilesPrefix)->required(),
"Trans files prefix")("transNumToRead", po::value<int>(&transNumToRead)->required(),
"# of tranformations")("bestK", po::value<int>(&bestK)->required(), "bestK")(
"constraintsFile", po::value<std::string>(&constraintsFileName)->required(), "constraints file name");
po::options_description cmdline_options;
cmdline_options.add(desc).add(hidden);
po::positional_options_description p;
p.add("SUlist", 1);
p.add("transFilesPrefix", 1);
p.add("transNumToRead", 1);
p.add("bestK", 1);
p.add("constraintsFile", 1);
po::variables_map vm;
try {
po::store(po::command_line_parser(argc, argv).options(cmdline_options).positional(p).run(), vm);
if (vm.count("help")) {
std::cout << desc << "\n";
return 0;
}
po::notify(vm);
} catch (po::required_option &e) {
std::cout << desc << "\n";
return 0;
} catch (po::error &e) {
std::cout << desc << "\n";
return 0;
}
if (maxResultPerResSet == 0)
maxResultPerResSet = bestK;
// done parsing
auto start = std::chrono::high_resolution_clock::now();
HierarchicalFold::timerAll_.reset();
std::cerr << "Before process input" << std::endl;
std::string argv_str(argv[0]);
std::string base = argv_str.substr(0, argv_str.find_last_of("/"));
std::string chemLibFileName = base + "/chem_params.txt";
BBContainer bbContainer(suFileName, chemLibFileName, minTemperatureToConsiderCollision);
bbContainer.readTransformationFiles(transFilesPrefix, transNumToRead);
std::cout << "Starting HierarchicalFold" << std::endl;
HierarchicalFold hierarchalFold(bbContainer, bestK, maxResultPerResSet, minTemperatureToConsiderCollision,
maxBackboneCollisionPerChain, penetrationThr, restraintsRatio);
// read constraints
hierarchalFold.readConstraints(constraintsFileName);
HierarchicalFold::timer_.reset();
hierarchalFold.outputConnectivityGraph("graph.txt");
hierarchalFold.checkConnectivity();
// ProfilerStart("nameOfProfile.log");
auto startBeforeFold = std::chrono::high_resolution_clock::now();
hierarchalFold.fold(outFileNamePrefix);
// ProfilerStop();
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> diff = end - start;
std::chrono::duration<double> diffFold = end - startBeforeFold;
std::cout << "Overall time " << diff.count() << " s\n";
std::cout << "only fold time " << diffFold.count() << " s\n";
std::cerr << "countResults_ " << HierarchicalFold::countResults_ << std::endl;
std::cerr << "timer_ " << HierarchicalFold::timer_ << std::endl;
std::cerr << "timerAll_ " << HierarchicalFold::timerAll_ << std::endl;
// SuperBB::reportCounters();
return 0;
}
|