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>
30 ModelIdentifier::ModelIdentifier(std::string ann){
31 _ann = fann_create_from_file(ann.c_str());
33 throw invalid_argument("Could not create network");
37 ModelIdentifier::~ModelIdentifier(){
41 priority_queue<pair<double,Model> > ModelIdentifier::identify(const GeneOrder& go){
44 for (GeneOrder::iterator g = go.begin(); g != go.end(); ++g){
50 double length = go.size();
51 vector<double> input(8);
52 input[0] = pos/length;
53 input[1] = neg/length;
55 pair<int,int> seqs = longestSequences(go);
57 input[2] = seqs.first/length;
58 input[3] = seqs.second/length;
60 double cycles = countCycles(go);
61 input[4] = cycles/length;
63 vector<Component> comps = findComponents(go);
68 for (vector<Component>::iterator c = comps.begin(); c != comps.end(); ++c){
78 input[6] = pos/cycles;
79 input[7] = neg/cycles;
81 double *output = fann_run(_ann,&input[0]);
83 priority_queue<pair<double,Model> > scores;
84 scores.push(pair<double,Model>(output[0],Model(new Models::X)));
85 scores.push(pair<double,Model>(output[1],Model(new Models::Zipper)));
86 scores.push(pair<double,Model>(output[2],Model(new Models::ModelImpl)));
87 scores.push(pair<double,Model>(output[3],Model(new Models::FatX)));
88 scores.push(pair<double,Model>(output[4],Model(new Models::Cloud)));