# Compile using GNU C++ Compiler
CC=g++
+# Output filename option
+CCO=-o
# Flags for the C++ compiler
-CCFLAGS=-Wno-deprecated -Wall -W -Wextra -fpic -I./include -Llib -O3 #-pg #-static #-DVERBOSE
+CCFLAGS=-Wno-deprecated -Wall -W -Wextra -fpic -I./include -Llib -O3 #-pg
ifdef DEBUG
CCFLAGS:=$(CCFLAGS) -g -DDAI_DEBUG
endif
matlabs : matlab/dai.$(ME) matlab/dai_readfg.$(ME) matlab/dai_writefg.$(ME) matlab/dai_potstrength.$(ME)
$(LIB)/libdai$(LE) : bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) exceptions$(OE) varset$(OE) $(OBJECTS)
+ -mkdir -p lib
ar rcus $(LIB)/libdai$(LE) bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) exceptions$(OE) varset$(OE) $(OBJECTS)
-tests : tests/test$(EE)
+tests : tests/testdai$(EE)
utils : utils/createfg$(EE) utils/fg2dot$(EE) utils/fginfo$(EE)
-testregression : tests/test
- echo Testing...this can take a while...
+testregression : tests/testdai
+ @echo Starting regression test...this can take a minute or so!
cd tests; time ./testregression; cd ..
doc : $(INC)/*.h $(SRC)/*.cpp doxygen.conf
+ -mkdir -p doc
doxygen doxygen.conf
+.PHONY : clean
clean :
- rm *$(OE) example$(EE) matlab/*.$(ME) matlab/*$(OE) tests/test$(EE) utils/fg2dot$(EE) utils/createfg$(EE) utils/fginfo$(EE) $(LIB)/libdai$(LE); echo
- rm -R doc; echo
+ -rm *$(OE)
+ -rm matlab/*.$(ME) matlab/*$(OE)
+ -rm example$(EE) tests/testdai$(EE) utils/fg2dot$(EE) utils/createfg$(EE) utils/fginfo$(EE)
+ -rm -R doc
+ -rm -R lib
-bipgraph$(OE) : $(SRC)/bipgraph.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/bipgraph.cpp
-
-daialg$(OE) : $(SRC)/daialg.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/daialg.cpp
-
-exactinf$(OE) : $(SRC)/exactinf.cpp $(INC)/exactinf.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/exactinf.cpp
-
-bp$(OE) : $(SRC)/bp.cpp $(INC)/bp.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/bp.cpp
-
-lc$(OE) : $(SRC)/lc.cpp $(INC)/lc.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/lc.cpp
-
-mf$(OE) : $(SRC)/mf.cpp $(INC)/mf.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/mf.cpp
-
-factorgraph$(OE) : $(SRC)/factorgraph.cpp $(INC)/factorgraph.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/factorgraph.cpp
-
-util$(OE) : $(SRC)/util.cpp $(INC)/util.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/util.cpp
-
-regiongraph$(OE) : $(SRC)/regiongraph.cpp $(INC)/regiongraph.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/regiongraph.cpp
-
-hak$(OE) : $(SRC)/hak.cpp $(INC)/hak.h $(HEADERS) $(INC)/regiongraph.h
- $(CC) $(CCFLAGS) -c $(SRC)/hak.cpp
-
-clustergraph$(OE) : $(SRC)/clustergraph.cpp $(INC)/clustergraph.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/clustergraph.cpp
-
-jtree$(OE) : $(SRC)/jtree.cpp $(INC)/jtree.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h
- $(CC) $(CCFLAGS) -c $(SRC)/jtree.cpp
-
-treeep$(OE) : $(SRC)/treeep.cpp $(INC)/treeep.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h $(INC)/jtree.h
- $(CC) $(CCFLAGS) -c $(SRC)/treeep.cpp
-
-weightedgraph$(OE) : $(SRC)/weightedgraph.cpp $(INC)/weightedgraph.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/weightedgraph.cpp
-
-mr$(OE) : $(SRC)/mr.cpp $(INC)/mr.h $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/mr.cpp
-
-properties$(OE) : $(SRC)/properties.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/properties.cpp
-
-exceptions$(OE) : $(SRC)/exceptions.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/exceptions.cpp
-
-alldai$(OE) : $(SRC)/alldai.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/alldai.cpp
-
-varset$(OE) : $(SRC)/varset.cpp $(HEADERS)
- $(CC) $(CCFLAGS) -c $(SRC)/varset.cpp
-
-
-# EXAMPLE
-##########
-
-example$(EE) : example.cpp $(HEADERS) $(LIB)/libdai$(LE)
- $(CC) $(CCFLAGS) -o example$(EE) example.cpp $(LIBS)
-
-# TESTS
-########
-
-tests/test$(EE) : tests/test.cpp $(HEADERS) $(LIB)/libdai$(LE)
- $(CC) $(CCFLAGS) -o tests/test$(EE) tests/test.cpp $(LIBS) $(BOOSTLIBS)
-
-
-# MATLAB INTERFACE
-###################
-
-matlab/dai.$(ME) : matlab/dai.cpp $(HEADERS) matlab/matlab$(OE) $(LIB)/libdai$(LE)
- $(MEX) $(MEXFLAGS) -o matlab/dai matlab/dai.cpp matlab/matlab$(OE) $(LIB)/libdai$(LE)
-
-matlab/dai_readfg.$(ME) : matlab/dai_readfg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)
- $(MEX) $(MEXFLAGS) -o matlab/dai_readfg matlab/dai_readfg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)
-
-matlab/dai_writefg.$(ME) : matlab/dai_writefg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)
- $(MEX) $(MEXFLAGS) -o matlab/dai_writefg matlab/dai_writefg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)
-
-matlab/dai_potstrength.$(ME) : matlab/dai_potstrength.cpp $(HEADERS) matlab/matlab$(OE) exceptions$(OE) varset$(OE)
- $(MEX) $(MEXFLAGS) -o matlab/dai_potstrength matlab/dai_potstrength.cpp matlab/matlab$(OE) exceptions$(OE) varset$(OE)
-
-matlab/matlab$(OE) : matlab/matlab.cpp matlab/matlab.h $(HEADERS)
- $(MEX) $(MEXFLAGS) -outdir matlab -c matlab/matlab.cpp
-
-
-# UTILS
-########
-
-utils/createfg$(EE) : utils/createfg.cpp $(HEADERS) $(LIB)/libdai$(LE)
- $(CC) $(CCFLAGS) -o utils/createfg utils/createfg.cpp $(LIBS) $(BOOSTLIBS)
-
-utils/fg2dot$(EE) : utils/fg2dot.cpp $(HEADERS) $(LIB)/libdai$(LE)
- $(CC) $(CCFLAGS) -o utils/fg2dot utils/fg2dot.cpp $(LIBS)
-
-utils/fginfo$(EE) : utils/fginfo.cpp $(HEADERS) $(LIB)/libdai$(LE)
- $(CC) $(CCFLAGS) -o utils/fginfo utils/fginfo.cpp $(LIBS)
+include Makefile.shared
\r
# Compile using GNU C++ Compiler\r
CC=cl\r
+# Output filename option\r
+CCO=/Fe\r
\r
# Flags for the C++ compiler\r
CCFLAGS=/I./include /IC:\boost_1_36_0 /EHsc /Ox\r
$(LIB)/libdai$(LE) : bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) exceptions$(OE) varset$(OE) $(OBJECTS)\r
lib /out:$(LIB)/libdai$(LE) bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) exceptions$(OE) varset$(OE) $(OBJECTS)\r
\r
-tests : tests/test$(EE)\r
+tests : tests/testdai$(EE)\r
\r
utils : utils/createfg$(EE) utils/fg2dot$(EE) utils/fginfo$(EE)\r
\r
-testregression : tests/test\r
+testregression : tests/testdai\r
echo Testing...this can take a while...\r
cd tests; time ./testregression; cd ..\r
\r
doxygen doxygen.conf\r
\r
clean :\r
- del *$(OE) *.ilk *.pdb *$(EE) matlab\*.$(ME) matlab\*$(OE) tests\test$(EE) tests\*.pdb tests\*.ilk utils\*$(EE) utils\*.pdb utils\*.ilk $(LIB)\libdai$(LE)\r
+ del *$(OE) *.ilk *.pdb *$(EE) matlab\*.$(ME) matlab\*$(OE) tests\testdai$(EE) tests\*.pdb tests\*.ilk utils\*$(EE) utils\*.pdb utils\*.ilk $(LIB)\libdai$(LE)\r
\r
-\r
-bipgraph$(OE) : $(SRC)/bipgraph.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/bipgraph.cpp\r
-\r
-daialg$(OE) : $(SRC)/daialg.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/daialg.cpp\r
-\r
-exactinf$(OE) : $(SRC)/exactinf.cpp $(INC)/exactinf.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/exactinf.cpp\r
-\r
-bp$(OE) : $(SRC)/bp.cpp $(INC)/bp.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/bp.cpp\r
-\r
-lc$(OE) : $(SRC)/lc.cpp $(INC)/lc.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/lc.cpp\r
-\r
-mf$(OE) : $(SRC)/mf.cpp $(INC)/mf.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/mf.cpp\r
-\r
-factorgraph$(OE) : $(SRC)/factorgraph.cpp $(INC)/factorgraph.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/factorgraph.cpp\r
-\r
-util$(OE) : $(SRC)/util.cpp $(INC)/util.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/util.cpp\r
-\r
-regiongraph$(OE) : $(SRC)/regiongraph.cpp $(INC)/regiongraph.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/regiongraph.cpp\r
-\r
-hak$(OE) : $(SRC)/hak.cpp $(INC)/hak.h $(HEADERS) $(INC)/regiongraph.h\r
- $(CC) $(CCFLAGS) -c $(SRC)/hak.cpp\r
-\r
-clustergraph$(OE) : $(SRC)/clustergraph.cpp $(INC)/clustergraph.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/clustergraph.cpp\r
-\r
-jtree$(OE) : $(SRC)/jtree.cpp $(INC)/jtree.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h\r
- $(CC) $(CCFLAGS) -c $(SRC)/jtree.cpp\r
-\r
-treeep$(OE) : $(SRC)/treeep.cpp $(INC)/treeep.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h $(INC)/jtree.h\r
- $(CC) $(CCFLAGS) -c $(SRC)/treeep.cpp\r
-\r
-weightedgraph$(OE) : $(SRC)/weightedgraph.cpp $(INC)/weightedgraph.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/weightedgraph.cpp\r
-\r
-mr$(OE) : $(SRC)/mr.cpp $(INC)/mr.h $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/mr.cpp\r
-\r
-properties$(OE) : $(SRC)/properties.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/properties.cpp\r
-\r
-exceptions$(OE) : $(SRC)/exceptions.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/exceptions.cpp\r
-\r
-alldai$(OE) : $(SRC)/alldai.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/alldai.cpp\r
-\r
-varset$(OE) : $(SRC)/varset.cpp $(HEADERS)\r
- $(CC) $(CCFLAGS) -c $(SRC)/varset.cpp\r
-\r
-\r
-# EXAMPLE\r
-##########\r
-\r
-example$(EE) : example.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
- $(CC) $(CCFLAGS) /Feexample example.cpp $(LIBS)\r
-\r
-\r
-# TESTS\r
-########\r
-\r
-tests/test$(EE) : tests/test.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
- $(CC) $(CCFLAGS) /Fetests/test tests/test.cpp $(LIBS) $(BOOSTLIBS)\r
-\r
-\r
-# MATLAB INTERFACE\r
-###################\r
-\r
-matlab/dai.$(ME) : matlab/dai.cpp $(HEADERS) matlab/matlab$(OE) $(LIB)/libdai$(LE)\r
- $(MEX) $(MEXFLAGS) -o matlab/dai matlab/dai.cpp matlab/matlab$(OE) $(LIB)/libdai$(LE)\r
-\r
-matlab/dai_readfg.$(ME) : matlab/dai_readfg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
- $(MEX) $(MEXFLAGS) -o matlab/dai_readfg matlab/dai_readfg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
-\r
-matlab/dai_writefg.$(ME) : matlab/dai_writefg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
- $(MEX) $(MEXFLAGS) -o matlab/dai_writefg matlab/dai_writefg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
-\r
-matlab/dai_potstrength.$(ME) : matlab/dai_potstrength.cpp $(HEADERS) matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
- $(MEX) $(MEXFLAGS) -o matlab/dai_potstrength matlab/dai_potstrength.cpp matlab/matlab$(OE) exceptions$(OE) varset$(OE)\r
-\r
-matlab/matlab$(OE) : matlab/matlab.cpp matlab/matlab.h $(HEADERS)\r
- $(MEX) $(MEXFLAGS) -outdir matlab -c matlab/matlab.cpp\r
-\r
-\r
-# UTILS\r
-########\r
-\r
-utils/createfg$(EE) : utils/createfg.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
- $(CC) $(CCFLAGS) /Feutils/createfg utils/createfg.cpp $(LIBS) $(BOOSTLIBS)\r
-\r
-utils/fg2dot$(EE) : utils/fg2dot.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
- $(CC) $(CCFLAGS) /Feutils/fg2dot utils/fg2dot.cpp $(LIBS)\r
-\r
-utils/fginfo$(EE) : utils/fginfo.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
- $(CC) $(CCFLAGS) /Feutils/fginfo utils/fginfo.cpp $(LIBS)\r
+!INCLUDE Makefile.shared\r
- A DAIAlg<T> should not inherit from a FactorGraph/RegionGraph, but should store a reference to it
IDEAS:
+- Use "gcc -MM" to generate dependencies for targets.
+
- Use a PropertySet as output of a DAIAlg, instead of functions like maxDiff and Iterations().
- A FactorGraph and a RegionGraph are often equipped with
if( md > maxdiff )
maxdiff = md;
}
- init();
if( props.verbose >= 1 ) {
cout << Name << "::InitCavityDists used " << toc() - tic << " seconds." << endl;
} else
_cavitydists[i] = Q[i];
}
- init();
return 0;
}
_phis[i][I.iter].randomize();
else
_phis[i][I.iter].fill(1.0);
- for( size_t i = 0; i < nrVars(); i++ ) {
- _pancakes[i] = _cavitydists[i];
-
- foreach( const Neighbor &I, nbV(i) ) {
- _pancakes[i] *= factor(I);
- if( props.updates == Properties::UpdateType::SEQRND )
- _pancakes[i] *= _phis[i][I.iter];
- }
-
- _pancakes[i].normalize();
-
- CalcBelief(i);
- }
}
if( md > _maxdiff )
_maxdiff = md;
+ for( size_t i = 0; i < nrVars(); i++ ) {
+ _pancakes[i] = _cavitydists[i];
+
+ foreach( const Neighbor &I, nbV(i) ) {
+ _pancakes[i] *= factor(I);
+ if( props.updates == Properties::UpdateType::SEQRND )
+ _pancakes[i] *= _phis[i][I.iter];
+ }
+
+ _pancakes[i].normalize();
+
+ CalcBelief(i);
+ }
+
vector<Factor> old_beliefs;
for(size_t i=0; i < nrVars(); i++ )
old_beliefs.push_back(belief(i));
+++ /dev/null
-/* Copyright (C) 2006-2008 Joris Mooij [joris dot mooij at tuebingen dot mpg dot de]
- Radboud University Nijmegen, The Netherlands /
- Max Planck Institute for Biological Cybernetics, Germany
-
- This file is part of libDAI.
-
- libDAI 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 2 of the License, or
- (at your option) any later version.
-
- libDAI 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 libDAI; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-
-#include <iostream>
-#include <fstream>
-#include <map>
-#include <numeric>
-#include <cmath>
-#include <cstdlib>
-#include <cstring>
-#include <boost/program_options.hpp>
-#include <dai/util.h>
-#include <dai/alldai.h>
-
-
-using namespace std;
-using namespace dai;
-namespace po = boost::program_options;
-
-
-class TestDAI {
- protected:
- InfAlg *obj;
- string name;
- vector<double> err;
-
- public:
- vector<Factor> q;
- double logZ;
- double maxdiff;
- double time;
- size_t iters;
- bool has_logZ;
- bool has_maxdiff;
- bool has_iters;
-
- TestDAI( const FactorGraph &fg, const string &_name, const PropertySet &opts ) : obj(NULL), name(_name), err(), q(), logZ(0.0), maxdiff(0.0), time(0), iters(0U), has_logZ(false), has_maxdiff(false), has_iters(false) {
- double tic = toc();
- if( name == "LDPC" ) {
- double zero[2] = {1.0, 0.0};
- q.clear();
- for( size_t i = 0; i < fg.nrVars(); i++ )
- q.push_back( Factor(Var(i,2), zero) );
- logZ = 0.0;
- maxdiff = 0.0;
- iters = 1;
- has_logZ = false;
- has_maxdiff = false;
- has_iters = false;
- } else
- obj = newInfAlg( name, fg, opts );
- time += toc() - tic;
- }
-
- ~TestDAI() {
- if( obj != NULL )
- delete obj;
- }
-
- string identify() {
- if( obj != NULL )
- return obj->identify();
- else
- return "NULL";
- }
-
- vector<Factor> allBeliefs() {
- vector<Factor> result;
- for( size_t i = 0; i < obj->fg().nrVars(); i++ )
- result.push_back( obj->belief( obj->fg().var(i) ) );
- return result;
- }
-
- void doDAI() {
- double tic = toc();
- if( obj != NULL ) {
- obj->init();
- obj->run();
- time += toc() - tic;
- try {
- logZ = obj->logZ();
- has_logZ = true;
- } catch( Exception &e ) {
- has_logZ = false;
- }
- try {
- maxdiff = obj->maxDiff();
- has_maxdiff = true;
- } catch( Exception &e ) {
- has_maxdiff = false;
- }
- try {
- iters = obj->Iterations();
- has_iters = true;
- } catch( Exception &e ) {
- has_iters = false;
- }
- q = allBeliefs();
- };
- }
-
- void calcErrs( const TestDAI &x ) {
- err.clear();
- err.reserve( q.size() );
- for( size_t i = 0; i < q.size(); i++ )
- err.push_back( dist( q[i], x.q[i], Prob::DISTTV ) );
- }
-
- void calcErrs( const vector<Factor> &x ) {
- err.clear();
- err.reserve( q.size() );
- for( size_t i = 0; i < q.size(); i++ )
- err.push_back( dist( q[i], x[i], Prob::DISTTV ) );
- }
-
- double maxErr() {
- return( *max_element( err.begin(), err.end() ) );
- }
-
- double avgErr() {
- return( accumulate( err.begin(), err.end(), 0.0 ) / err.size() );
- }
-};
-
-
-pair<string, PropertySet> parseMethod( const string &_s, const map<string,string> & aliases ) {
- // s = first part of _s, until '['
- string::size_type pos = _s.find_first_of('[');
- string s;
- if( pos == string::npos )
- s = _s;
- else
- s = _s.substr(0,pos);
-
- // if the first part is an alias, substitute
- if( aliases.find(s) != aliases.end() )
- s = aliases.find(s)->second;
-
- // attach second part, merging properties if necessary
- if( pos != string::npos ) {
- if( s.at(s.length()-1) == ']' ) {
- s = s.erase(s.length()-1,1) + ',' + _s.substr(pos+1);
- } else
- s = s + _s.substr(pos);
- }
-
- pair<string, PropertySet> result;
- string & name = result.first;
- PropertySet & opts = result.second;
-
- pos = s.find_first_of('[');
- if( pos == string::npos )
- throw "Malformed method";
- name = s.substr( 0, pos );
- size_t n = 0;
- for( ; strlen( DAINames[n] ) != 0; n++ )
- if( name == DAINames[n] )
- break;
- if( strlen( DAINames[n] ) == 0 && (name != "LDPC") )
- DAI_THROW(UNKNOWN_DAI_ALGORITHM);
-
- stringstream ss;
- ss << s.substr(pos,s.length());
- ss >> opts;
-
- return result;
-}
-
-
-double clipdouble( double x, double minabs ) {
- if( fabs(x) < minabs )
- return minabs;
- else
- return x;
-}
-
-
-int main( int argc, char *argv[] ) {
- try {
- string filename;
- string aliases;
- vector<string> methods;
- double tol;
- size_t maxiter;
- size_t verbose;
- bool marginals = false;
- bool report_time = true;
-
- po::options_description opts_required("Required options");
- opts_required.add_options()
- ("filename", po::value< string >(&filename), "Filename of FactorGraph")
- ("methods", po::value< vector<string> >(&methods)->multitoken(), "DAI methods to test")
- ;
-
- po::options_description opts_optional("Allowed options");
- opts_optional.add_options()
- ("help", "produce help message")
- ("aliases", po::value< string >(&aliases), "Filename for aliases")
- ("tol", po::value< double >(&tol), "Override tolerance")
- ("maxiter", po::value< size_t >(&maxiter), "Override maximum number of iterations")
- ("verbose", po::value< size_t >(&verbose), "Override verbosity")
- ("marginals", po::value< bool >(&marginals), "Output single node marginals?")
- ("report-time", po::value< bool >(&report_time), "Report calculation time")
- ;
-
- po::options_description cmdline_options;
- cmdline_options.add(opts_required).add(opts_optional);
-
- po::variables_map vm;
- po::store(po::parse_command_line(argc, argv, cmdline_options), vm);
- po::notify(vm);
-
- if( vm.count("help") || !(vm.count("filename") && vm.count("methods")) ) {
- cout << "Reads factorgraph <filename.fg> and performs the approximate" << endl;
- cout << "inference algorithms <method*>, reporting calculation time, max and average" << endl;
- cout << "error and relative logZ error (comparing with the results of" << endl;
- cout << "<method0>, the base method, for which one can use JTREE_HUGIN)." << endl << endl;
- cout << opts_required << opts_optional << endl;
- return 1;
- }
-
- // Read aliases
- map<string,string> Aliases;
- if( !aliases.empty() ) {
- ifstream infile;
- infile.open (aliases.c_str());
- if (infile.is_open()) {
- while( true ) {
- string line;
- getline(infile,line);
- if( infile.fail() )
- break;
- if( (!line.empty()) && (line[0] != '#') ) {
- string::size_type pos = line.find(':',0);
- if( pos == string::npos )
- throw "Invalid alias";
- else {
- string::size_type posl = line.substr(0, pos).find_last_not_of(" \t");
- string key = line.substr(0, posl + 1);
- string::size_type posr = line.substr(pos + 1, line.length()).find_first_not_of(" \t");
- string val = line.substr(pos + 1 + posr, line.length());
- Aliases[key] = val;
- }
- }
- }
- infile.close();
- } else
- throw "Error opening aliases file";
- }
-
- FactorGraph fg;
- fg.ReadFromFile( filename.c_str() );
-
- vector<Factor> q0;
- double logZ0 = 0.0;
-
- cout << "# " << filename << endl;
- cout.width( 40 );
- cout << left << "# METHOD" << " ";
- if( report_time ) {
- cout.width( 10 );
- cout << right << "SECONDS" << " ";
- }
- cout.width( 10 );
- cout << "MAX ERROR" << " ";
- cout.width( 10 );
- cout << "AVG ERROR" << " ";
- cout.width( 10 );
- cout << "LOGZ ERROR" << " ";
- cout.width( 10 );
- cout << "MAXDIFF" << " ";
- cout.width( 10 );
- cout << "ITERS" << endl;
-
- for( size_t m = 0; m < methods.size(); m++ ) {
- pair<string, PropertySet> meth = parseMethod( methods[m], Aliases );
-
- if( vm.count("tol") )
- meth.second.Set("tol",tol);
- if( vm.count("maxiter") )
- meth.second.Set("maxiter",maxiter);
- if( vm.count("verbose") )
- meth.second.Set("verbose",verbose);
- TestDAI piet(fg, meth.first, meth.second );
- piet.doDAI();
- if( m == 0 ) {
- q0 = piet.q;
- logZ0 = piet.logZ;
- }
- piet.calcErrs(q0);
-
- cout.width( 40 );
-// cout << left << piet.identify() << " ";
- cout << left << methods[m] << " ";
- if( report_time ) {
- cout.width( 10 );
- cout << right << piet.time << " ";
- }
-
- if( m > 0 ) {
- cout.setf( ios_base::scientific );
- cout.precision( 3 );
- cout.width( 10 );
- double me = clipdouble( piet.maxErr(), 1e-9 );
- cout << me << " ";
- cout.width( 10 );
- double ae = clipdouble( piet.avgErr(), 1e-9 );
- cout << ae << " ";
- cout.width( 10 );
- if( piet.has_logZ ) {
- double le = clipdouble( piet.logZ / logZ0 - 1.0, 1e-9 );
- cout << le << " ";
- } else {
- cout << "N/A ";
- }
- cout.width( 10 );
- if( piet.has_maxdiff ) {
- double md = clipdouble( piet.maxdiff, 1e-9 );
- if( isnan( me ) )
- md = me;
- if( isnan( ae ) )
- md = ae;
- cout << md << " ";
- } else {
- cout << "N/A ";
- }
- cout.width( 10 );
- if( piet.has_iters ) {
- cout << piet.iters << " ";
- } else {
- cout << "N/A ";
- }
- }
- cout << endl;
-
- if( marginals ) {
- for( size_t i = 0; i < piet.q.size(); i++ )
- cout << "# " << piet.q[i] << endl;
- }
- }
- } catch(const char *e) {
- cerr << "Exception: " << e << endl;
- return 1;
- } catch(exception& e) {
- cerr << "Exception: " << e.what() << endl;
- return 1;
- }
- catch(...) {
- cerr << "Exception of unknown type!" << endl;
- }
-
- return 0;
-}
#!/bin/bash
-./test --report-time false --marginals true --aliases aliases.conf --filename $1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
+./testdai --report-iters false --report-time false --marginals true --aliases aliases.conf --filename $1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
-test --report-time false --marginals true --aliases aliases.conf --filename %1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
+testdai --report-iters false --report-time false --marginals true --aliases aliases.conf --filename %1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
--- /dev/null
+/* Copyright (C) 2006-2008 Joris Mooij [joris dot mooij at tuebingen dot mpg dot de]
+ Radboud University Nijmegen, The Netherlands /
+ Max Planck Institute for Biological Cybernetics, Germany
+
+ This file is part of libDAI.
+
+ libDAI 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 2 of the License, or
+ (at your option) any later version.
+
+ libDAI 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 libDAI; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <numeric>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
+#include <boost/program_options.hpp>
+#include <dai/util.h>
+#include <dai/alldai.h>
+
+
+using namespace std;
+using namespace dai;
+namespace po = boost::program_options;
+
+
+class TestDAI {
+ protected:
+ InfAlg *obj;
+ string name;
+ vector<double> err;
+
+ public:
+ vector<Factor> q;
+ double logZ;
+ double maxdiff;
+ double time;
+ size_t iters;
+ bool has_logZ;
+ bool has_maxdiff;
+ bool has_iters;
+
+ TestDAI( const FactorGraph &fg, const string &_name, const PropertySet &opts ) : obj(NULL), name(_name), err(), q(), logZ(0.0), maxdiff(0.0), time(0), iters(0U), has_logZ(false), has_maxdiff(false), has_iters(false) {
+ double tic = toc();
+ if( name == "LDPC" ) {
+ double zero[2] = {1.0, 0.0};
+ q.clear();
+ for( size_t i = 0; i < fg.nrVars(); i++ )
+ q.push_back( Factor(Var(i,2), zero) );
+ logZ = 0.0;
+ maxdiff = 0.0;
+ iters = 1;
+ has_logZ = false;
+ has_maxdiff = false;
+ has_iters = false;
+ } else
+ obj = newInfAlg( name, fg, opts );
+ time += toc() - tic;
+ }
+
+ ~TestDAI() {
+ if( obj != NULL )
+ delete obj;
+ }
+
+ string identify() {
+ if( obj != NULL )
+ return obj->identify();
+ else
+ return "NULL";
+ }
+
+ vector<Factor> allBeliefs() {
+ vector<Factor> result;
+ for( size_t i = 0; i < obj->fg().nrVars(); i++ )
+ result.push_back( obj->belief( obj->fg().var(i) ) );
+ return result;
+ }
+
+ void doDAI() {
+ double tic = toc();
+ if( obj != NULL ) {
+ obj->init();
+ obj->run();
+ time += toc() - tic;
+ try {
+ logZ = obj->logZ();
+ has_logZ = true;
+ } catch( Exception &e ) {
+ has_logZ = false;
+ }
+ try {
+ maxdiff = obj->maxDiff();
+ has_maxdiff = true;
+ } catch( Exception &e ) {
+ has_maxdiff = false;
+ }
+ try {
+ iters = obj->Iterations();
+ has_iters = true;
+ } catch( Exception &e ) {
+ has_iters = false;
+ }
+ q = allBeliefs();
+ };
+ }
+
+ void calcErrs( const TestDAI &x ) {
+ err.clear();
+ err.reserve( q.size() );
+ for( size_t i = 0; i < q.size(); i++ )
+ err.push_back( dist( q[i], x.q[i], Prob::DISTTV ) );
+ }
+
+ void calcErrs( const vector<Factor> &x ) {
+ err.clear();
+ err.reserve( q.size() );
+ for( size_t i = 0; i < q.size(); i++ )
+ err.push_back( dist( q[i], x[i], Prob::DISTTV ) );
+ }
+
+ double maxErr() {
+ return( *max_element( err.begin(), err.end() ) );
+ }
+
+ double avgErr() {
+ return( accumulate( err.begin(), err.end(), 0.0 ) / err.size() );
+ }
+};
+
+
+pair<string, PropertySet> parseMethod( const string &_s, const map<string,string> & aliases ) {
+ // s = first part of _s, until '['
+ string::size_type pos = _s.find_first_of('[');
+ string s;
+ if( pos == string::npos )
+ s = _s;
+ else
+ s = _s.substr(0,pos);
+
+ // if the first part is an alias, substitute
+ if( aliases.find(s) != aliases.end() )
+ s = aliases.find(s)->second;
+
+ // attach second part, merging properties if necessary
+ if( pos != string::npos ) {
+ if( s.at(s.length()-1) == ']' ) {
+ s = s.erase(s.length()-1,1) + ',' + _s.substr(pos+1);
+ } else
+ s = s + _s.substr(pos);
+ }
+
+ pair<string, PropertySet> result;
+ string & name = result.first;
+ PropertySet & opts = result.second;
+
+ pos = s.find_first_of('[');
+ if( pos == string::npos )
+ throw "Malformed method";
+ name = s.substr( 0, pos );
+ size_t n = 0;
+ for( ; strlen( DAINames[n] ) != 0; n++ )
+ if( name == DAINames[n] )
+ break;
+ if( strlen( DAINames[n] ) == 0 && (name != "LDPC") )
+ DAI_THROW(UNKNOWN_DAI_ALGORITHM);
+
+ stringstream ss;
+ ss << s.substr(pos,s.length());
+ ss >> opts;
+
+ return result;
+}
+
+
+double clipdouble( double x, double minabs ) {
+ if( fabs(x) < minabs )
+ return minabs;
+ else
+ return x;
+}
+
+
+int main( int argc, char *argv[] ) {
+ try {
+ string filename;
+ string aliases;
+ vector<string> methods;
+ double tol;
+ size_t maxiter;
+ size_t verbose;
+ bool marginals = false;
+ bool report_iters = true;
+ bool report_time = true;
+
+ po::options_description opts_required("Required options");
+ opts_required.add_options()
+ ("filename", po::value< string >(&filename), "Filename of FactorGraph")
+ ("methods", po::value< vector<string> >(&methods)->multitoken(), "DAI methods to test")
+ ;
+
+ po::options_description opts_optional("Allowed options");
+ opts_optional.add_options()
+ ("help", "produce help message")
+ ("aliases", po::value< string >(&aliases), "Filename for aliases")
+ ("tol", po::value< double >(&tol), "Override tolerance")
+ ("maxiter", po::value< size_t >(&maxiter), "Override maximum number of iterations")
+ ("verbose", po::value< size_t >(&verbose), "Override verbosity")
+ ("marginals", po::value< bool >(&marginals), "Output single node marginals?")
+ ("report-time", po::value< bool >(&report_time), "Report calculation time")
+ ("report-iters", po::value< bool >(&report_iters), "Report iterations needed")
+ ;
+
+ po::options_description cmdline_options;
+ cmdline_options.add(opts_required).add(opts_optional);
+
+ po::variables_map vm;
+ po::store(po::parse_command_line(argc, argv, cmdline_options), vm);
+ po::notify(vm);
+
+ if( vm.count("help") || !(vm.count("filename") && vm.count("methods")) ) {
+ cout << "Reads factorgraph <filename.fg> and performs the approximate" << endl;
+ cout << "inference algorithms <method*>, reporting calculation time, max and average" << endl;
+ cout << "error and relative logZ error (comparing with the results of" << endl;
+ cout << "<method0>, the base method, for which one can use JTREE_HUGIN)." << endl << endl;
+ cout << opts_required << opts_optional << endl;
+ return 1;
+ }
+
+ // Read aliases
+ map<string,string> Aliases;
+ if( !aliases.empty() ) {
+ ifstream infile;
+ infile.open (aliases.c_str());
+ if (infile.is_open()) {
+ while( true ) {
+ string line;
+ getline(infile,line);
+ if( infile.fail() )
+ break;
+ if( (!line.empty()) && (line[0] != '#') ) {
+ string::size_type pos = line.find(':',0);
+ if( pos == string::npos )
+ throw "Invalid alias";
+ else {
+ string::size_type posl = line.substr(0, pos).find_last_not_of(" \t");
+ string key = line.substr(0, posl + 1);
+ string::size_type posr = line.substr(pos + 1, line.length()).find_first_not_of(" \t");
+ string val = line.substr(pos + 1 + posr, line.length());
+ Aliases[key] = val;
+ }
+ }
+ }
+ infile.close();
+ } else
+ throw "Error opening aliases file";
+ }
+
+ FactorGraph fg;
+ fg.ReadFromFile( filename.c_str() );
+
+ vector<Factor> q0;
+ double logZ0 = 0.0;
+
+ cout.setf( ios_base::scientific );
+ cout.precision( 3 );
+
+ cout << "# " << filename << endl;
+ cout.width( 40 );
+ cout << left << "# METHOD" << " ";
+ if( report_time ) {
+ cout.width( 10 );
+ cout << right << "SECONDS" << " ";
+ }
+ if( report_iters ) {
+ cout.width( 10 );
+ cout << "ITERS" << " ";
+ }
+ cout.width( 10 );
+ cout << "MAX ERROR" << " ";
+ cout.width( 10 );
+ cout << "AVG ERROR" << " ";
+ cout.width( 10 );
+ cout << "LOGZ ERROR" << " ";
+ cout.width( 10 );
+ cout << "MAXDIFF" << " ";
+ cout << endl;
+
+ for( size_t m = 0; m < methods.size(); m++ ) {
+ pair<string, PropertySet> meth = parseMethod( methods[m], Aliases );
+
+ if( vm.count("tol") )
+ meth.second.Set("tol",tol);
+ if( vm.count("maxiter") )
+ meth.second.Set("maxiter",maxiter);
+ if( vm.count("verbose") )
+ meth.second.Set("verbose",verbose);
+ TestDAI piet(fg, meth.first, meth.second );
+ piet.doDAI();
+ if( m == 0 ) {
+ q0 = piet.q;
+ logZ0 = piet.logZ;
+ }
+ piet.calcErrs(q0);
+
+ cout.width( 40 );
+ cout << left << methods[m] << " ";
+ if( report_time ) {
+ cout.width( 10 );
+ cout << right << piet.time << " ";
+ }
+ if( report_iters ) {
+ cout.width( 10 );
+ if( piet.has_iters ) {
+ cout << piet.iters << " ";
+ } else {
+ cout << "N/A ";
+ }
+ }
+
+ if( m > 0 ) {
+ cout.setf( ios_base::scientific );
+ cout.precision( 3 );
+
+ cout.width( 10 );
+ double me = clipdouble( piet.maxErr(), 1e-9 );
+ cout << me << " ";
+
+ cout.width( 10 );
+ double ae = clipdouble( piet.avgErr(), 1e-9 );
+ cout << ae << " ";
+
+ cout.width( 10 );
+ if( piet.has_logZ ) {
+ double le = clipdouble( piet.logZ / logZ0 - 1.0, 1e-9 );
+ cout << le << " ";
+ } else
+ cout << "N/A ";
+
+ cout.width( 10 );
+ if( piet.has_maxdiff ) {
+ double md = clipdouble( piet.maxdiff, 1e-9 );
+ if( isnan( me ) )
+ md = me;
+ if( isnan( ae ) )
+ md = ae;
+ cout << md << " ";
+ } else
+ cout << "N/A ";
+ }
+ cout << endl;
+
+ if( marginals ) {
+ for( size_t i = 0; i < piet.q.size(); i++ )
+ cout << "# " << piet.q[i] << endl;
+ }
+ }
+ } catch(const char *e) {
+ cerr << "Exception: " << e << endl;
+ return 1;
+ } catch(exception& e) {
+ cerr << "Exception: " << e.what() << endl;
+ return 1;
+ }
+ catch(...) {
+ cerr << "Exception of unknown type!" << endl;
+ }
+
+ return 0;
+}
# testfast.fg
-# METHOD MAX ERROR AVG ERROR LOGZ ERROR MAXDIFF ITERS
+# METHOD MAX ERROR AVG ERROR LOGZ ERROR MAXDIFF
EXACT[verbose=0]
-# ([0] <0.388774 0.611226 >)
-# ([1] <0.555571 0.444429 >)
-# ([2] <0.458706 0.541294 >)
-# ([3] <0.54801 0.45199 >)
-# ([4] <0.666005 0.333995 >)
-# ([5] <0.210731 0.789269 >)
-# ([6] <0.81782 0.18218 >)
-# ([7] <0.232711 0.767289 >)
-# ([8] <0.217101 0.782899 >)
-# ([9] <0.205196 0.794804 >)
-# ([10] <0.766453 0.233547 >)
-# ([11] <0.121723 0.878277 >)
-# ([12] <0.421411 0.578589 >)
-# ([13] <0.534838 0.465162 >)
-# ([14] <0.62914 0.37086 >)
-# ([15] <0.135686 0.864314 >)
-JTREE_HUGIN 1.000e-09 1.000e-09 1.000e-09 1.000e-09 1
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.556e-01 4.444e-01 >)
# ([2] <4.587e-01 5.413e-01 >)
# ([13] <5.348e-01 4.652e-01 >)
# ([14] <6.291e-01 3.709e-01 >)
# ([15] <1.357e-01 8.643e-01 >)
-JTREE_SHSH 1.000e-09 1.000e-09 1.000e-09 1.000e-09 1
+JTREE_HUGIN 1.000e-09 1.000e-09 1.000e-09 1.000e-09
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.556e-01 4.444e-01 >)
# ([2] <4.587e-01 5.413e-01 >)
# ([13] <5.348e-01 4.652e-01 >)
# ([14] <6.291e-01 3.709e-01 >)
# ([15] <1.357e-01 8.643e-01 >)
-BP_SEQFIX 9.483e-02 3.078e-02 1.737e-02 1.000e-09 45
+JTREE_SHSH 1.000e-09 1.000e-09 1.000e-09 1.000e-09
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.556e-01 4.444e-01 >)
+# ([2] <4.587e-01 5.413e-01 >)
+# ([3] <5.480e-01 4.520e-01 >)
+# ([4] <6.660e-01 3.340e-01 >)
+# ([5] <2.107e-01 7.893e-01 >)
+# ([6] <8.178e-01 1.822e-01 >)
+# ([7] <2.327e-01 7.673e-01 >)
+# ([8] <2.171e-01 7.829e-01 >)
+# ([9] <2.052e-01 7.948e-01 >)
+# ([10] <7.665e-01 2.335e-01 >)
+# ([11] <1.217e-01 8.783e-01 >)
+# ([12] <4.214e-01 5.786e-01 >)
+# ([13] <5.348e-01 4.652e-01 >)
+# ([14] <6.291e-01 3.709e-01 >)
+# ([15] <1.357e-01 8.643e-01 >)
+BP_SEQFIX 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_SEQRND 9.483e-02 3.078e-02 1.737e-02 1.000e-09 43
+BP_SEQRND 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_SEQMAX 9.483e-02 3.078e-02 1.737e-02 1.000e-09 13
+BP_SEQMAX 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_PARALL 9.483e-02 3.078e-02 1.737e-02 1.000e-09 71
+BP_PARALL 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_SEQFIX_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09 45
+BP_SEQFIX_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_SEQRND_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09 43
+BP_SEQRND_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_SEQMAX_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09 13
+BP_SEQMAX_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-BP_PARALL_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09 71
+BP_PARALL_LOG 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-MF_SEQRND 3.607e-01 1.904e-01 -9.409e-02 1.000e-09 58
+MF_SEQRND 3.607e-01 1.904e-01 -9.409e-02 1.000e-09
# ([0] <2.053e-01 7.947e-01 >)
# ([1] <9.163e-01 8.373e-02 >)
# ([2] <1.579e-01 8.421e-01 >)
# ([13] <8.148e-01 1.852e-01 >)
# ([14] <8.338e-01 1.662e-01 >)
# ([15] <5.661e-03 9.943e-01 >)
-TREEEP 3.268e-02 8.023e-03 6.340e-04 1.000e-09 15
+TREEEP 3.268e-02 8.023e-03 6.340e-04 1.000e-09
# ([0] <3.980e-01 6.020e-01 >)
# ([1] <5.520e-01 4.480e-01 >)
# ([2] <4.620e-01 5.380e-01 >)
# ([13] <5.293e-01 4.707e-01 >)
# ([14] <6.409e-01 3.591e-01 >)
# ([15] <1.364e-01 8.636e-01 >)
-TREEEPWC 2.356e-02 1.026e-02 4.876e-03 1.000e-09 14
+TREEEPWC 2.356e-02 1.026e-02 4.876e-03 1.000e-09
# ([0] <4.091e-01 5.909e-01 >)
# ([1] <5.429e-01 4.571e-01 >)
# ([2] <4.697e-01 5.303e-01 >)
# ([13] <5.298e-01 4.702e-01 >)
# ([14] <6.299e-01 3.701e-01 >)
# ([15] <1.384e-01 8.616e-01 >)
-GBP_MIN 9.483e-02 3.078e-02 1.737e-02 1.000e-09 44
+GBP_MIN 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-GBP_DELTA 6.291e-01 3.350e-01 -3.303e-01 1.000e-09 6
+GBP_DELTA 6.291e-01 3.350e-01 -3.303e-01 1.000e-09
# ([0] <0.000e+00 1.000e+00 >)
# ([1] <1.000e+00 0.000e+00 >)
# ([2] <0.000e+00 1.000e+00 >)
# ([13] <0.000e+00 1.000e+00 >)
# ([14] <0.000e+00 1.000e+00 >)
# ([15] <0.000e+00 1.000e+00 >)
-GBP_LOOP3 9.483e-02 3.078e-02 1.737e-02 1.000e-09 44
+GBP_LOOP3 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-GBP_LOOP4 7.893e-01 3.408e-01 -2.745e-01 1.000e-09 12
+GBP_LOOP4 7.893e-01 3.408e-01 -2.745e-01 1.000e-09
# ([0] <0.000e+00 1.000e+00 >)
# ([1] <1.000e+00 0.000e+00 >)
# ([2] <0.000e+00 1.000e+00 >)
# ([13] <1.000e+00 3.513e-118 >)
# ([14] <1.000e+00 0.000e+00 >)
# ([15] <0.000e+00 1.000e+00 >)
-GBP_LOOP5 7.893e-01 3.408e-01 -2.745e-01 1.000e-09 12
+GBP_LOOP5 7.893e-01 3.408e-01 -2.745e-01 1.000e-09
# ([0] <0.000e+00 1.000e+00 >)
# ([1] <1.000e+00 0.000e+00 >)
# ([2] <0.000e+00 1.000e+00 >)
# ([13] <1.000e+00 3.513e-118 >)
# ([14] <1.000e+00 0.000e+00 >)
# ([15] <0.000e+00 1.000e+00 >)
-GBP_LOOP6 7.948e-01 4.458e-01 -4.096e-01 1.000e-09 4
+GBP_LOOP6 7.948e-01 4.458e-01 -4.096e-01 1.000e-09
# ([0] <1.000e+00 0.000e+00 >)
# ([1] <0.000e+00 1.000e+00 >)
# ([2] <1.000e+00 0.000e+00 >)
# ([13] <1.000e+00 0.000e+00 >)
# ([14] <0.000e+00 1.000e+00 >)
# ([15] <0.000e+00 1.000e+00 >)
-GBP_LOOP7 7.948e-01 4.458e-01 -4.096e-01 1.000e-09 4
+GBP_LOOP7 7.948e-01 4.458e-01 -4.096e-01 1.000e-09
# ([0] <1.000e+00 0.000e+00 >)
# ([1] <0.000e+00 1.000e+00 >)
# ([2] <1.000e+00 0.000e+00 >)
# ([13] <1.000e+00 0.000e+00 >)
# ([14] <0.000e+00 1.000e+00 >)
# ([15] <0.000e+00 1.000e+00 >)
-HAK_MIN 9.483e-02 3.078e-02 1.737e-02 1.000e-09 618
+HAK_MIN 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-HAK_DELTA 3.684e-01 1.892e-01 9.675e-01 1.000e-09 319
+HAK_DELTA 3.684e-01 1.892e-01 9.675e-01 1.000e-09
# ([0] <4.902e-01 5.098e-01 >)
# ([1] <5.098e-01 4.902e-01 >)
# ([2] <4.902e-01 5.098e-01 >)
# ([13] <5.098e-01 4.902e-01 >)
# ([14] <5.098e-01 4.902e-01 >)
# ([15] <4.902e-01 5.098e-01 >)
-HAK_LOOP3 9.483e-02 3.078e-02 1.737e-02 1.000e-09 618
+HAK_LOOP3 9.483e-02 3.078e-02 1.737e-02 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-HAK_LOOP4 4.970e-03 1.486e-03 -2.503e-04 1.000e-09 1580
+HAK_LOOP4 4.970e-03 1.486e-03 -2.503e-04 1.000e-09
# ([0] <3.909e-01 6.091e-01 >)
# ([1] <5.556e-01 4.444e-01 >)
# ([2] <4.585e-01 5.415e-01 >)
# ([13] <5.351e-01 4.649e-01 >)
# ([14] <6.319e-01 3.681e-01 >)
# ([15] <1.307e-01 8.693e-01 >)
-HAK_LOOP5 4.970e-03 1.486e-03 -2.503e-04 1.000e-09 1580
+HAK_LOOP5 4.970e-03 1.486e-03 -2.503e-04 1.000e-09
# ([0] <3.909e-01 6.091e-01 >)
# ([1] <5.556e-01 4.444e-01 >)
# ([2] <4.585e-01 5.415e-01 >)
# ([13] <5.351e-01 4.649e-01 >)
# ([14] <6.319e-01 3.681e-01 >)
# ([15] <1.307e-01 8.693e-01 >)
-MR_RESPPROP_FULL 1.676e-02 4.933e-03 N/A 1.000e-09 45
+MR_RESPPROP_FULL 1.676e-02 4.933e-03 N/A 1.000e-09
# ([0] <3.941e-01 6.059e-01 >)
# ([1] <5.534e-01 4.466e-01 >)
# ([2] <4.602e-01 5.398e-01 >)
# ([13] <5.407e-01 4.593e-01 >)
# ([14] <6.252e-01 3.748e-01 >)
# ([15] <1.346e-01 8.654e-01 >)
-MR_CLAMPING_FULL 8.359e-03 2.508e-03 N/A 1.000e-09 45
+MR_CLAMPING_FULL 8.359e-03 2.508e-03 N/A 1.000e-09
# ([0] <3.900e-01 6.100e-01 >)
# ([1] <5.560e-01 4.440e-01 >)
# ([2] <4.589e-01 5.411e-01 >)
# ([13] <5.404e-01 4.596e-01 >)
# ([14] <6.273e-01 3.727e-01 >)
# ([15] <1.344e-01 8.656e-01 >)
-MR_EXACT_FULL 3.527e-03 1.038e-03 N/A 1.000e-09 44
+MR_EXACT_FULL 3.527e-03 1.038e-03 N/A 1.000e-09
# ([0] <3.867e-01 6.133e-01 >)
# ([1] <5.572e-01 4.428e-01 >)
# ([2] <4.585e-01 5.415e-01 >)
# ([13] <5.384e-01 4.616e-01 >)
# ([14] <6.296e-01 3.704e-01 >)
# ([15] <1.344e-01 8.656e-01 >)
-MR_RESPPROP_LINEAR 1.932e-02 5.506e-03 N/A 1.000e-09 45
+MR_RESPPROP_LINEAR 1.932e-02 5.506e-03 N/A 1.000e-09
# ([0] <3.923e-01 6.077e-01 >)
# ([1] <5.529e-01 4.471e-01 >)
# ([2] <4.608e-01 5.392e-01 >)
# ([13] <5.388e-01 4.612e-01 >)
# ([14] <6.239e-01 3.761e-01 >)
# ([15] <1.369e-01 8.631e-01 >)
-MR_CLAMPING_LINEAR 1.089e-02 3.076e-03 N/A 1.000e-09 45
+MR_CLAMPING_LINEAR 1.089e-02 3.076e-03 N/A 1.000e-09
# ([0] <3.884e-01 6.116e-01 >)
# ([1] <5.551e-01 4.449e-01 >)
# ([2] <4.598e-01 5.402e-01 >)
# ([13] <5.383e-01 4.617e-01 >)
# ([14] <6.257e-01 3.743e-01 >)
# ([15] <1.370e-01 8.630e-01 >)
-MR_EXACT_LINEAR 5.617e-03 1.742e-03 N/A 1.000e-09 44
+MR_EXACT_LINEAR 5.617e-03 1.742e-03 N/A 1.000e-09
# ([0] <3.853e-01 6.147e-01 >)
# ([1] <5.560e-01 4.440e-01 >)
# ([2] <4.596e-01 5.404e-01 >)
# ([13] <5.362e-01 4.638e-01 >)
# ([14] <6.279e-01 3.721e-01 >)
# ([15] <1.372e-01 8.628e-01 >)
-LCBP_FULLCAV_SEQFIX 1.225e-03 5.589e-04 N/A 1.000e-09 39
+LCBP_FULLCAV_SEQFIX 1.225e-03 5.589e-04 N/A 1.000e-09
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.559e-01 4.441e-01 >)
# ([2] <4.583e-01 5.417e-01 >)
# ([13] <5.358e-01 4.642e-01 >)
# ([14] <6.285e-01 3.715e-01 >)
# ([15] <1.359e-01 8.641e-01 >)
-LCBP_FULLCAVin_SEQFIX 1.225e-03 5.589e-04 N/A 1.000e-09 39
+LCBP_FULLCAVin_SEQFIX 1.225e-03 5.589e-04 N/A 1.000e-09
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.559e-01 4.441e-01 >)
# ([2] <4.583e-01 5.417e-01 >)
# ([13] <5.358e-01 4.642e-01 >)
# ([14] <6.285e-01 3.715e-01 >)
# ([15] <1.359e-01 8.641e-01 >)
-LCBP_FULLCAV_SEQRND 1.225e-03 5.589e-04 N/A 1.000e-09 36
+LCBP_FULLCAV_SEQRND 1.225e-03 5.589e-04 N/A 1.000e-09
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.559e-01 4.441e-01 >)
# ([2] <4.583e-01 5.417e-01 >)
# ([13] <5.358e-01 4.642e-01 >)
# ([14] <6.285e-01 3.715e-01 >)
# ([15] <1.359e-01 8.641e-01 >)
-LCBP_FULLCAVin_SEQRND 1.225e-03 5.589e-04 N/A 1.000e-09 35
+LCBP_FULLCAVin_SEQRND 1.225e-03 5.589e-04 N/A 1.000e-09
# ([0] <3.888e-01 6.112e-01 >)
# ([1] <5.559e-01 4.441e-01 >)
# ([2] <4.583e-01 5.417e-01 >)
# ([13] <5.358e-01 4.642e-01 >)
# ([14] <6.285e-01 3.715e-01 >)
# ([15] <1.359e-01 8.641e-01 >)
-LCBP_FULLCAV_NONE 1.318e-02 2.644e-03 N/A 1.000e+00 0
+LCBP_FULLCAV_NONE 1.318e-02 2.644e-03 N/A 1.000e+00
# ([0] <3.859e-01 6.141e-01 >)
# ([1] <5.569e-01 4.431e-01 >)
# ([2] <4.719e-01 5.281e-01 >)
# ([13] <5.350e-01 4.650e-01 >)
# ([14] <6.290e-01 3.710e-01 >)
# ([15] <1.364e-01 8.636e-01 >)
-LCBP_FULLCAVin_NONE 1.318e-02 2.644e-03 N/A 1.000e+00 0
+LCBP_FULLCAVin_NONE 1.318e-02 2.644e-03 N/A 1.000e+00
# ([0] <3.859e-01 6.141e-01 >)
# ([1] <5.569e-01 4.431e-01 >)
# ([2] <4.719e-01 5.281e-01 >)
# ([13] <5.350e-01 4.650e-01 >)
# ([14] <6.290e-01 3.710e-01 >)
# ([15] <1.364e-01 8.636e-01 >)
-LCBP_PAIRCAV_SEQFIX 1.564e-02 5.284e-03 N/A 1.000e-09 47
+LCBP_PAIRCAV_SEQFIX 1.564e-02 5.284e-03 N/A 1.000e-09
# ([0] <3.872e-01 6.128e-01 >)
# ([1] <5.540e-01 4.460e-01 >)
# ([2] <4.596e-01 5.404e-01 >)
# ([13] <5.282e-01 4.718e-01 >)
# ([14] <6.240e-01 3.760e-01 >)
# ([15] <1.409e-01 8.591e-01 >)
-LCBP_PAIRCAVin_SEQFIX 1.564e-02 5.284e-03 N/A 1.000e-09 47
+LCBP_PAIRCAVin_SEQFIX 1.564e-02 5.284e-03 N/A 1.000e-09
# ([0] <3.872e-01 6.128e-01 >)
# ([1] <5.540e-01 4.460e-01 >)
# ([2] <4.596e-01 5.404e-01 >)
# ([13] <5.282e-01 4.718e-01 >)
# ([14] <6.240e-01 3.760e-01 >)
# ([15] <1.409e-01 8.591e-01 >)
-LCBP_PAIRCAV_SEQRND 1.564e-02 5.284e-03 N/A 1.000e-09 36
+LCBP_PAIRCAV_SEQRND 1.564e-02 5.284e-03 N/A 1.000e-09
# ([0] <3.872e-01 6.128e-01 >)
# ([1] <5.540e-01 4.460e-01 >)
# ([2] <4.596e-01 5.404e-01 >)
# ([13] <5.282e-01 4.718e-01 >)
# ([14] <6.240e-01 3.760e-01 >)
# ([15] <1.409e-01 8.591e-01 >)
-LCBP_PAIRCAVin_SEQRND 1.564e-02 5.284e-03 N/A 1.000e-09 38
+LCBP_PAIRCAVin_SEQRND 1.564e-02 5.284e-03 N/A 1.000e-09
# ([0] <3.872e-01 6.128e-01 >)
# ([1] <5.540e-01 4.460e-01 >)
# ([2] <4.596e-01 5.404e-01 >)
# ([13] <5.282e-01 4.718e-01 >)
# ([14] <6.240e-01 3.760e-01 >)
# ([15] <1.409e-01 8.591e-01 >)
-LCBP_PAIRCAV_NONE 1.869e-01 6.816e-02 N/A 1.000e+00 0
+LCBP_PAIRCAV_NONE 1.869e-01 6.816e-02 N/A 1.000e+00
# ([0] <3.558e-01 6.442e-01 >)
# ([1] <5.320e-01 4.680e-01 >)
# ([2] <4.581e-01 5.419e-01 >)
# ([13] <6.323e-01 3.677e-01 >)
# ([14] <8.161e-01 1.839e-01 >)
# ([15] <1.676e-01 8.324e-01 >)
-LCBP_PAIRCAVin_NONE 1.869e-01 6.816e-02 N/A 1.000e+00 0
+LCBP_PAIRCAVin_NONE 1.869e-01 6.816e-02 N/A 1.000e+00
# ([0] <3.558e-01 6.442e-01 >)
# ([1] <5.320e-01 4.680e-01 >)
# ([2] <4.581e-01 5.419e-01 >)
# ([13] <6.323e-01 3.677e-01 >)
# ([14] <8.161e-01 1.839e-01 >)
# ([15] <1.676e-01 8.324e-01 >)
-LCBP_PAIR2CAV_SEQFIX 1.535e-02 4.445e-03 N/A 1.000e-09 47
+LCBP_PAIR2CAV_SEQFIX 1.535e-02 4.445e-03 N/A 1.000e-09
# ([0] <3.844e-01 6.156e-01 >)
# ([1] <5.557e-01 4.443e-01 >)
# ([2] <4.588e-01 5.412e-01 >)
# ([13] <5.280e-01 4.720e-01 >)
# ([14] <6.250e-01 3.750e-01 >)
# ([15] <1.411e-01 8.589e-01 >)
-LCBP_PAIR2CAVin_SEQFIX 1.535e-02 4.445e-03 N/A 1.000e-09 47
+LCBP_PAIR2CAVin_SEQFIX 1.535e-02 4.445e-03 N/A 1.000e-09
# ([0] <3.844e-01 6.156e-01 >)
# ([1] <5.557e-01 4.443e-01 >)
# ([2] <4.588e-01 5.412e-01 >)
# ([13] <5.280e-01 4.720e-01 >)
# ([14] <6.250e-01 3.750e-01 >)
# ([15] <1.411e-01 8.589e-01 >)
-LCBP_PAIR2CAV_SEQRND 1.535e-02 4.445e-03 N/A 1.000e-09 39
+LCBP_PAIR2CAV_SEQRND 1.535e-02 4.445e-03 N/A 1.000e-09
# ([0] <3.844e-01 6.156e-01 >)
# ([1] <5.557e-01 4.443e-01 >)
# ([2] <4.588e-01 5.412e-01 >)
# ([13] <5.280e-01 4.720e-01 >)
# ([14] <6.250e-01 3.750e-01 >)
# ([15] <1.411e-01 8.589e-01 >)
-LCBP_PAIR2CAVin_SEQRND 1.535e-02 4.445e-03 N/A 1.000e-09 35
+LCBP_PAIR2CAVin_SEQRND 1.535e-02 4.445e-03 N/A 1.000e-09
# ([0] <3.844e-01 6.156e-01 >)
# ([1] <5.557e-01 4.443e-01 >)
# ([2] <4.588e-01 5.412e-01 >)
# ([13] <5.280e-01 4.720e-01 >)
# ([14] <6.250e-01 3.750e-01 >)
# ([15] <1.411e-01 8.589e-01 >)
-LCBP_PAIR2CAV_NONE 1.894e-01 7.196e-02 N/A 1.000e+00 0
+LCBP_PAIR2CAV_NONE 1.894e-01 7.196e-02 N/A 1.000e+00
# ([0] <3.525e-01 6.475e-01 >)
# ([1] <5.395e-01 4.605e-01 >)
# ([2] <4.567e-01 5.433e-01 >)
# ([13] <6.444e-01 3.556e-01 >)
# ([14] <8.185e-01 1.815e-01 >)
# ([15] <1.841e-01 8.159e-01 >)
-LCBP_PAIR2CAVin_NONE 1.894e-01 7.196e-02 N/A 1.000e+00 0
+LCBP_PAIR2CAVin_NONE 1.894e-01 7.196e-02 N/A 1.000e+00
# ([0] <3.525e-01 6.475e-01 >)
# ([1] <5.395e-01 4.605e-01 >)
# ([2] <4.567e-01 5.433e-01 >)
# ([13] <6.444e-01 3.556e-01 >)
# ([14] <8.185e-01 1.815e-01 >)
# ([15] <1.841e-01 8.159e-01 >)
-LCBP_UNICAV_SEQFIX 9.483e-02 3.078e-02 N/A 1.000e-09 43
+LCBP_UNICAV_SEQFIX 9.483e-02 3.078e-02 N/A 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)
# ([13] <5.266e-01 4.734e-01 >)
# ([14] <6.033e-01 3.967e-01 >)
# ([15] <1.558e-01 8.442e-01 >)
-LCBP_UNICAV_SEQRND 9.483e-02 3.078e-02 N/A 1.000e-09 43
+LCBP_UNICAV_SEQRND 9.483e-02 3.078e-02 N/A 1.000e-09
# ([0] <4.233e-01 5.767e-01 >)
# ([1] <5.422e-01 4.578e-01 >)
# ([2] <4.662e-01 5.338e-01 >)