1 /***************************************************************************
2 * Copyright (C) 2006 by Michael Andreen *
3 * andreen@student.chalmers.se *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *
19 ***************************************************************************/
21 #include "modelidentifier.h"
22 #include "genealgorithms.h"
24 #include <doublefann.h>
28 ModelIdentifier::ModelIdentifier(std::string ann){
29 _ann = fann_create_from_file(ann.c_str());
31 throw invalid_argument("Could not create network");
35 ModelIdentifier::~ModelIdentifier(){
39 std::map<ModelIdentifier::Model,double> ModelIdentifier::identify(const GeneOrder& go){
42 for (GeneOrder::iterator g = go.begin(); g != go.end(); ++g){
48 double length = go.size();
49 vector<double> input(8);
50 input[0] = pos/length;
51 input[1] = neg/length;
53 pair<int,int> seqs = longestSequences(go);
55 input[2] = seqs.first/length;
56 input[3] = seqs.second/length;
58 double cycles = countCycles(go);
59 input[4] = cycles/length;
61 vector<Component> comps = findComponents(go);
66 for (vector<Component>::iterator c = comps.begin(); c != comps.end(); ++c){
76 input[6] = pos/cycles;
77 input[7] = neg/cycles;
79 double *output = fann_run(_ann,&input[0]);
81 map<Model,double> scores;
82 scores[X] = output[0];
83 scores[Zipper] = output[1];
84 scores[Whirl] = output[2];
85 scores[FatX] = output[3];
86 scores[Cloud] = output[4];