X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fmain.cpp;h=d9bce2f37ba2f901c38470a0d0b59ab1f2e323b3;hb=43b1052d74a207fe667b75e41d0c70c1189c2cc8;hp=b6194297d7e5f0d6290e64a09cca4dbf76d528a2;hpb=e778c16651be27559e0c5a5157dd10d0f5a20242;p=germs.git diff --git a/src/main.cpp b/src/main.cpp index b619429..d9bce2f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,15 +18,23 @@ using namespace std; int main(int argc, char** argv){ string ann = "default.ann"; + Model model(0); + bool detectModel = true; + //Parse command line arguments int opt; - while ((opt = getopt(argc, argv, "n:h")) != -1) { + while ((opt = getopt(argc, argv, "m:n:h")) != -1) { switch (opt) { + case 'm': + model = Model::modelFactory(optarg); + detectModel = false; + break; case 'n': ann = optarg; break; case 'h': cout << "Usage: " << argv[0] << " [OPTION] [FILE]" << endl + << endl << " -m Specifies which model to use for sorting: Whirl, X, Zipper, FatX or Cloud " << endl << " -n Specifies which artificial neural network to use for identification. '" << ann << "' is used by default" << endl << " -h Prints this help message" << endl << endl @@ -40,6 +48,7 @@ int main(int argc, char** argv){ } } + //Open file, or stdin istream* in; ifstream file; if (optind == argc || *argv[optind] == '-'){ @@ -52,36 +61,40 @@ int main(int argc, char** argv){ } in = &file; } - //TODO: Parse + + //Parse the gene order permutation vector g; copy(istream_iterator(*in), istream_iterator(), - back_inserter(g)); + back_inserter(g)); GeneOrder go(g.begin(),g.end()); - //TODO: Identify + //Identify the model ModelIdentifier mi(ann); priority_queue > pq = mi.identify(go); - Model model = pq.top().second; - //while (pq.size() > 0){ - cout << "Model: " << model.name() << " score: " << pq.top().first << endl; - //pq.pop(); - //} + if (detectModel){ + model = pq.top().second; + } + while (pq.size() > 0){ + cout << "Model: " << pq.top().second.name() << " score: " << pq.top().first << endl; + pq.pop(); + } + cout << "Using model: " << model.name() << endl; - cout << "Distance: " << inversionDistance(go) << " : "; - copy(go.begin(), go.end(), ostream_iterator(cout, " ")); - cout << endl; + cout << "Distance: " << inversionDistance(go) << endl; + //copy(go.begin(), go.end(), ostream_iterator(cout, " ")); + //cout << endl; - //TODO: Chose a sorter + //Sort GeneSorter so; - //TODO: Sort GeneSorter::ActionList al = so.sort(go,model); + //Print the result double score = 0; for (GeneSorter::ActionList::iterator sa = al.begin(); sa != al.end(); ++sa){ cout << "Action: " << sa->toString() << " model score: " << model.score(*sa,go) << endl; score += model.score(*sa,go); } cout << "Avg score: " << score / al.size() << endl; - //TODO: Print result + return EXIT_SUCCESS; }