From 4c765c02154e2a9c1485a444f1f9c3be9535bb13 Mon Sep 17 00:00:00 2001 From: PyP0 Date: Fri, 21 Aug 2015 08:27:33 +0200 Subject: [PATCH 01/12] global configs and Test push --- Biopool/Tests/TestBiopool.cc | 4 + Biopool/Tests/TestKabsch.h | 192 ++ Biopool/Tests/TestStructuralSuperimposition.h | 123 + Makefile.global | 396 +-- doxyconf | 2864 ++++++++--------- 5 files changed, 1949 insertions(+), 1630 deletions(-) create mode 100644 Biopool/Tests/TestKabsch.h create mode 100644 Biopool/Tests/TestStructuralSuperimposition.h diff --git a/Biopool/Tests/TestBiopool.cc b/Biopool/Tests/TestBiopool.cc index 51222fb..9c63ffa 100644 --- a/Biopool/Tests/TestBiopool.cc +++ b/Biopool/Tests/TestBiopool.cc @@ -13,6 +13,8 @@ #include #include #include +#include +#include using namespace std; @@ -24,6 +26,8 @@ int main() { runner.addTest(TestGroup::suite()); runner.addTest(TestAminoAcid::suite()); runner.addTest(TestSpacer::suite()); + runner.addTest(TestKabsch::suite()); + runner.addTest(TestStructuralSuperimposition::suite()); cout<< "Running the unit tests."<. + */ + + +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std; +using namespace Victor::Biopool; + +class TestKabsch : public CppUnit::TestFixture +{ + private: + + public: + + // SETUP METHOD + void setUp() + {} + + /// TEARDOWN METHOD + + void tearDown() + {} + + + + void testRotoTranslation() + { + KabschAlgorithm kb= KabschAlgorithm(); + Eigen::Matrix A, B; + A(0,0)= 10.5; + A(0,1)= 14.7; + A(0,2)= 20.5; + + A(1,0)= -10.2; + A(1,1)= 30.1; + A(1,2)= -8.6; + + A(2,0)= -31; + A(2,1)= -10; + A(2,2)= 2; + + A(3,0)= 26.1; + A(3,1)= 15.0; + A(3,2)= -2.1; + + A(4,0)= 20.5 ; + A(4,1)= 41.0; + A(4,2)= 3.6; + + A(5,0)= 5.5 ; + A(5,1)= 4.1; + A(5,2)= -8.3; + + A(6,0)= 0.8 ; + A(6,1)= 4.3; + A(6,2)= 10.7; + + A(7,0)= 10.2 ; + A(7,1)= 6.3; + A(7,2)= -1.5; + + A(8,0)= 50.2 ; + A(8,1)= 10.6 ; + A(8,2)= -9.3 ; + + A(9,0)= 45.1; + A(9,1)= -1.0; + A(9,2)= 47.2; + + B(0,0)= 0.5; + B(0,1)= 24.7; + B(0,2)= 0.5; + + B(1,0)= 11.2; + B(1,1)= 50.1; + B(1,2)= -0.6; + + B(2,0)= 3.5; + B(2,1)= 0.0; + B(2,2)= -4; + + B(3,0)= 16.1; + B(3,1)= 2.0; + B(3,2)= -10.1; + + B(4,0)= 10.5 ; + B(4,1)= 31.0; + B(4,2)= -3.6; + + B(5,0)= 8.5 ; + B(5,1)= 6.1; + B(5,2)= -1.3; + + B(6,0)= -0.8 ; + B(6,1)= 14.3; + B(6,2)= 0.7; + + B(7,0)= 20.2 ; + B(7,1)= 16.3; + B(7,2)= -11.5; + + B(8,0)= 10.2 ; + B(8,1)= -10.6 ; + B(8,2)= -9.3 ; + + B(9,0)= 25.1; + B(9,1)= -11.0; + B(9,2)= 27.2; + + bool test= kb.kabschTest(A,B,0.001); + CPPUNIT_ASSERT(test == true); + } + + void testIdentity() + { + KabschAlgorithm kb= KabschAlgorithm(); + Eigen::Matrix A, B; + A(0,0)= 10.5; + A(0,1)= 14.7; + A(0,2)= 20.5; + + A(1,0)= -10.2; + A(1,1)= 30.1; + A(1,2)= -8.6; + + A(2,0)= -31; + A(2,1)= -10; + A(2,2)= 2; + + A(3,0)= 26.1; + A(3,1)= 15.0; + A(3,2)= -2.1; + + A(4,0)= 20.5 ; + A(4,1)= 41.0; + A(4,2)= 3.6; + + A(5,0)= 5.5 ; + A(5,1)= 4.1; + A(5,2)= -8.3; + + A(6,0)= 0.8 ; + A(6,1)= 4.3; + A(6,2)= 10.7; + + A(7,0)= 10.2 ; + A(7,1)= 6.3; + A(7,2)= -1.5; + + A(8,0)= 50.2 ; + A(8,1)= 10.6 ; + A(8,2)= -9.3 ; + + A(9,0)= 45.1; + A(9,1)= -1.0; + A(9,2)= 47.2; + + B=A; + + bool test= kb.kabschTest(A,B,0.001); + CPPUNIT_ASSERT(test == true); + + } + + + static CppUnit::Test *suite() + { + CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "TestKabsch" ); + suiteOfTests->addTest( new CppUnit::TestCaller("testRotoTranslation",&TestKabsch::testRotoTranslation ) ); + suiteOfTests->addTest( new CppUnit::TestCaller("testIdentity",&TestKabsch::testIdentity ) ); + return suiteOfTests; + } + }; \ No newline at end of file diff --git a/Biopool/Tests/TestStructuralSuperimposition.h b/Biopool/Tests/TestStructuralSuperimposition.h new file mode 100644 index 0000000..d32a91b --- /dev/null +++ b/Biopool/Tests/TestStructuralSuperimposition.h @@ -0,0 +1,123 @@ +/* This file is part of Victor. + Victor 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 3 of the License, or + (at your option) any later version. + Victor 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 Victor. If not, see . + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std; +using namespace Victor::Biopool; + +class TestStructuralSuperimposition : public CppUnit::TestFixture +{ + private: + + public: + + // SETUP METHOD + void setUp() + {} + + /// TEARDOWN METHOD + + void tearDown() + {} + + + void testScores() + { + int L=4; + double d0=3.5; + + double computedTMscore=0.932606; + double computedGDTscore=0.767476; + double computedRMSDscore=1.58475; + double computedMaxSubscore=0.857753; + + char *pPath = getenv("VICTOR_ROOT"); + if(pPath==NULL) + { + ERROR("\"VICTOR_ROOT\" not set.", exception); + } + string path(pPath); + + string inputFile1= path + "Biopool/Tests/data/15C8_H_input.pdb"; + string inputFile2= path + "Biopool/Tests/data/25C8_H_input.pdb"; + + ifstream inFile1(inputFile1.c_str()); + + ifstream inFile2(inputFile2.c_str()); + + if(!inFile1 || !inFile2) + ERROR("Files not found.", exception); + + Protein prot1, prot2; + Spacer *sp1, *sp2; + + PdbLoader pl1(inFile1); + PdbLoader pl2(inFile2); + + pl1.setNoVerbose(); + pl2.setNoVerbose(); + pl1.setNoHAtoms(); + pl2.setNoHAtoms(); + + + prot1.load(pl1); + prot2.load(pl2); + + + vector chain1 = prot1.getAllChains(); + vector chain2 = prot2.getAllChains(); + + sp1=prot1.getSpacer(chain1[0]); + sp2=prot2.getSpacer(chain2[0]); + + StructuralSuperimposition s1, s2= StructuralSuperimposition(); + + Eigen::Matrix A=StructuralSuperimposition::convertSpacerToEigen(sp1); + + Eigen::Matrix B=StructuralSuperimposition::convertSpacerToEigen(sp2); + + StructuralSuperimposition ssi= StructuralSuperimposition(); + + double rmsdscore= ssi.getRmsdScore(A,B,L,d0); + + double tmscore= ssi.getTMScore(A, B, L); + + double msscore= ssi.getMaxSubScore(A, B, L, d0); + + double gdttsscore= ssi.getGDTTSScore(A,B,L); + + double threshold=0.0001; + CPPUNIT_ASSERT( fabs(computedTMscore - tmscore) <= threshold ); + CPPUNIT_ASSERT( fabs(computedGDTscore - gdttsscore) <= threshold ); + CPPUNIT_ASSERT( fabs(computedMaxSubscore - msscore) <= threshold ); + CPPUNIT_ASSERT( fabs(computedRMSDscore - rmsdscore) <= threshold ); + } + + static CppUnit::Test *suite() + { + CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "TestStructuralSuperimposition" ); + suiteOfTests->addTest( new CppUnit::TestCaller("testScores",&TestStructuralSuperimposition::testScores ) ); + return suiteOfTests; + } + }; diff --git a/Makefile.global b/Makefile.global index 1f78a89..a025ca9 100644 --- a/Makefile.global +++ b/Makefile.global @@ -1,199 +1,199 @@ -#--*- makefile -*-------------------------------------------------------------- -# -# Standard makefile - global information -# -# This file should be included in all other Makefiles -# used in the project. It contains such important -# information as which compiler to use etc. -# -# The idea is, that the user may call in his makefile: -# * "make" or -# "make debug=1" to make a debug version of the project -# * "make fast=1" to make a fast version without debug information -# * "make profile=1" to make a version with profiling information -# * "make verbose=1" to make with different levels of verbosity -# "make verbose=2" -# "make verbose=3" -# "make test=1" to compile unit tests as well -#------------------------------------------------------------------------------ - - -# -# Compiler and path to compiler -# -# specifies the version of the compiler to use -# - - CC=g++ - - -# -# Important compile flags -# - -# These flags should always be used. -STANDARDFLAGS = -Wall -ansi -pedantic -DNEXCEPTIONS -DLINUX -c - -DEBUGFLAGS = -g - -NORMALFLAGS = $(DEBUGFLAGS) - -FASTFLAGS = -O3 -ffast-math -DNDEBUG -ftemplate-depth-36 - -QUICKFLAGS = -DNDEBUG - -USERFLAGS = $(STANDARDFLAGS) $(NORMALFLAGS) - -ifdef profile - PROFILE = -pg -fno-inline -DNDEBUG - USERFLAGS = $(STANDARDFLAGS) $(DEBUGFLAGS) $(PROFILE) -else -ifdef fast - USERFLAGS = $(STANDARDFLAGS) $(FASTFLAGS) -else -ifdef debug - USERFLAGS = $(STANDARDFLAGS) $(DEBUGFLAGS) -else -ifdef nopost - USERFLAGS += -DNOPOST -else - USERFLAGS = $(STANDARDFLAGS) $(FASTFLAGS) -endif -endif -endif -endif - -ifdef static - USERFLAGS += -static -endif - -ifeq ($(verbose), 1) - USERFLAGS += -DVERBOSE=1 -endif -ifeq ($(verbose), 2) - USERFLAGS += -DVERBOSE=2 -endif -ifeq ($(verbose), 3) - USERFLAGS += -DVERBOSE=3 -endif - -CFLAGS = $(USERFLAGS) - -# -# Tools -# - -ARCHIVER = ar -ARCHIVEFLAGS = rvs - -MAKE = make - -MAKEDEPEND = $(CC) -M - -# -# Remove -# - -RM = /bin/rm -f -RMDIR = /bin/rm -rf - -# -# Global libraries and paths -# - -# Path to subdirectories. -SUBDIRS += _dummy_ - -LIB_PATH += -L$(UPDIR)/lib - -INC_PATH += -I$(UPDIR)/tools -I$(UPDIR)/Energy/Sources -I$(UPDIR)/Biopool/Sources -I$(UPDIR)/Energy/Sources/TorsionPotential -I$(UPDIR)/Lobo/Sources -I$(UPDIR)/Align2/Sources -I$(UPDIR)/Biopool/APPS -I$(UPDIR)/Energy/APPS -I$(UPDIR)/Align2/APPS -I$(UPDIR)/Lobo/APPS - -ifdef test - INC_PATH += -I$(UPDIR)/Biopool/Tests -I$(UPDIR)/Energy/Tests -I$(UPDIR)/Align2/Tests -I$(UPDIR)/Lobo/Tests - SUBDIRS = Biopool/Tests Energy/Tests Align2/Tests Lobo/Tests -endif - -####### Implicit rules - -.SUFFIXES: .c .cc .cpp -.cc.o: - $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing -.c.o: - $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing -.cpp.o: - $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing - -######## Build rules - -all: $(LIBRARY) $(TARGETS) - -$(TARGETS): %: %.o $(LIBRARY) - $(CC) $(PROFILE) $@.o -o $@ $(LIB_PATH) $(LIBS) -Wno-reorder -Wno-uninitialized -Wno-write-strings - -$(LIBRARY): $(OBJECTS) - $(ARCHIVER) $(ARCHIVEFLAGS) $(LIBRARY) $(OBJECTS) - -.PHONY: clean -clean: - $(RM) *~ *.bak *.o *.a core $(TARGETS) - -Depend: - touch Depend - -depend: - $(MAKEDEPEND) $(CFLAGS) $(INC_PATH) $(SOURCES) > Depend - -subdirs: - @for i in $(SUBDIRS) ; do \ - if [ $$i = "_dummy_" ]; then \ - continue ; \ - fi; \ - $(MAKE) -C $$i "SUBDIR = $$i"; \ - done - -subdepend: - @for i in $(SUBDIRS) ; do \ - if [ $$i = "_dummy_" ]; then \ - continue ; \ - fi; \ - echo $$i; \ - $(MAKE) -C $$i "SUBDIR = $$i" depend; \ - done - -subclean: - @for i in $(SUBDIRS) ; do \ - if [ $$i = "_dummy_" ]; then \ - continue ; \ - fi; \ - $(MAKE) -C $$i "SUBDIR = $$i" clean; \ - done - $(RM) -rf lib - $(RM) -rf bin - $(RM) -f ./Biopool/data/* - $(RM) -f ./Energy/data/* - $(RM) -fr ./Lobo/data/* - $(RM) -fr ./Energy/data - $(RM) -fr ./Lobo/data - $(RM) -fr ./Biopool/data - - - -subinstall: - @for i in $(SUBDIRS) ; do \ - if [ $$i = "_dummy_" ]; then \ - continue ; \ - fi; \ - $(MAKE) -C $$i "SUBDIR = $$i" install; \ - done - - - - -# -# Export all variables to sub-makes by default -# - -# -# Include dependencies -# +#--*- makefile -*-------------------------------------------------------------- +# +# Standard makefile - global information +# +# This file should be included in all other Makefiles +# used in the project. It contains such important +# information as which compiler to use etc. +# +# The idea is, that the user may call in his makefile: +# * "make" or +# "make debug=1" to make a debug version of the project +# * "make fast=1" to make a fast version without debug information +# * "make profile=1" to make a version with profiling information +# * "make verbose=1" to make with different levels of verbosity +# "make verbose=2" +# "make verbose=3" +# "make test=1" to compile unit tests as well +#------------------------------------------------------------------------------ + + +# +# Compiler and path to compiler +# +# specifies the version of the compiler to use +# + + CC=g++ + + +# +# Important compile flags +# + +# These flags should always be used. +STANDARDFLAGS = -Wall -ansi -pedantic -DNEXCEPTIONS -DLINUX -c + +DEBUGFLAGS = -g + +NORMALFLAGS = $(DEBUGFLAGS) + +FASTFLAGS = -O3 -ffast-math -DNDEBUG -ftemplate-depth-40 + +QUICKFLAGS = -DNDEBUG + +USERFLAGS = $(STANDARDFLAGS) $(NORMALFLAGS) + +ifdef profile + PROFILE = -pg -fno-inline -DNDEBUG + USERFLAGS = $(STANDARDFLAGS) $(DEBUGFLAGS) $(PROFILE) +else +ifdef fast + USERFLAGS = $(STANDARDFLAGS) $(FASTFLAGS) +else +ifdef debug + USERFLAGS = $(STANDARDFLAGS) $(DEBUGFLAGS) +else +ifdef nopost + USERFLAGS += -DNOPOST +else + USERFLAGS = $(STANDARDFLAGS) $(FASTFLAGS) +endif +endif +endif +endif + +ifdef static + USERFLAGS += -static +endif + +ifeq ($(verbose), 1) + USERFLAGS += -DVERBOSE=1 +endif +ifeq ($(verbose), 2) + USERFLAGS += -DVERBOSE=2 +endif +ifeq ($(verbose), 3) + USERFLAGS += -DVERBOSE=3 +endif + +CFLAGS = $(USERFLAGS) + +# +# Tools +# + +ARCHIVER = ar +ARCHIVEFLAGS = rvs + +MAKE = make + +MAKEDEPEND = $(CC) -M + +# +# Remove +# + +RM = /bin/rm -f +RMDIR = /bin/rm -rf + +# +# Global libraries and paths +# + +# Path to subdirectories. +SUBDIRS += _dummy_ + +LIB_PATH += -L$(UPDIR)/lib + +INC_PATH += -I$(UPDIR)/tools -I$(UPDIR)/Energy/Sources -I$(UPDIR)/Biopool/Sources -I$(UPDIR)/Energy/Sources/TorsionPotential -I$(UPDIR)/Lobo/Sources -I$(UPDIR)/Align2/Sources -I$(UPDIR)/Biopool/APPS -I$(UPDIR)/Energy/APPS -I$(UPDIR)/Align2/APPS -I$(UPDIR)/Lobo/APPS + +ifdef test + INC_PATH += -I$(UPDIR)/Biopool/Tests -I$(UPDIR)/Energy/Tests -I$(UPDIR)/Align2/Tests -I$(UPDIR)/Lobo/Tests + SUBDIRS = Biopool/Tests Energy/Tests Align2/Tests Lobo/Tests +endif + +####### Implicit rules + +.SUFFIXES: .c .cc .cpp +.cc.o: + $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing +.c.o: + $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing +.cpp.o: + $(CC) $(CFLAGS) $(INC_PATH) -c $< -o $*.o -Wno-reorder -Wno-uninitialized -Wno-write-strings -Wno-narrowing + +######## Build rules + +all: $(LIBRARY) $(TARGETS) + +$(TARGETS): %: %.o $(LIBRARY) + $(CC) $(PROFILE) $@.o -o $@ $(LIB_PATH) $(LIBS) -Wno-reorder -Wno-uninitialized -Wno-write-strings + +$(LIBRARY): $(OBJECTS) + $(ARCHIVER) $(ARCHIVEFLAGS) $(LIBRARY) $(OBJECTS) + +.PHONY: clean +clean: + $(RM) *~ *.bak *.o *.a core $(TARGETS) + +Depend: + touch Depend + +depend: + $(MAKEDEPEND) $(CFLAGS) $(INC_PATH) $(SOURCES) > Depend + +subdirs: + @for i in $(SUBDIRS) ; do \ + if [ $$i = "_dummy_" ]; then \ + continue ; \ + fi; \ + $(MAKE) -C $$i "SUBDIR = $$i"; \ + done + +subdepend: + @for i in $(SUBDIRS) ; do \ + if [ $$i = "_dummy_" ]; then \ + continue ; \ + fi; \ + echo $$i; \ + $(MAKE) -C $$i "SUBDIR = $$i" depend; \ + done + +subclean: + @for i in $(SUBDIRS) ; do \ + if [ $$i = "_dummy_" ]; then \ + continue ; \ + fi; \ + $(MAKE) -C $$i "SUBDIR = $$i" clean; \ + done + $(RM) -rf lib + $(RM) -rf bin + $(RM) -f ./Biopool/data/* + $(RM) -f ./Energy/data/* + $(RM) -fr ./Lobo/data/* + $(RM) -fr ./Energy/data + $(RM) -fr ./Lobo/data + $(RM) -fr ./Biopool/data + + + +subinstall: + @for i in $(SUBDIRS) ; do \ + if [ $$i = "_dummy_" ]; then \ + continue ; \ + fi; \ + $(MAKE) -C $$i "SUBDIR = $$i" install; \ + done + + + + +# +# Export all variables to sub-makes by default +# + +# +# Include dependencies +# \ No newline at end of file diff --git a/doxyconf b/doxyconf index b100b53..fe22578 100644 --- a/doxyconf +++ b/doxyconf @@ -1,1432 +1,1432 @@ -# Doxyfile 1.6.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Victor - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = YES - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = NO - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = YES - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = YES - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = NO - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = NO - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = NO - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= NO - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS =*.h *.cc - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = Biopool/Tests/ Energy/Tests/ Lobo/Tests/ Align2/Tests/ tools/ - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 20 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = YES - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES +# Doxyfile 1.6.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = Victor + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = NO + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = YES + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= NO + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS =*.h *.cc + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = Biopool/Tests/ Energy/Tests/ Lobo/Tests/ Align2/Tests/ tools/ Biopool/Sources/Eigen/ + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 20 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = YES + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES From 247890d8ce04056d265b6969a8a239404fceb3f4 Mon Sep 17 00:00:00 2001 From: PyP0 Date: Fri, 21 Aug 2015 08:30:08 +0200 Subject: [PATCH 02/12] Test proteins added --- Biopool/Tests/data/15C8_H_input.pdb | 2148 ++++++++++++++++++++++++ Biopool/Tests/data/25C8_H_input.pdb | 2369 +++++++++++++++++++++++++++ 2 files changed, 4517 insertions(+) create mode 100644 Biopool/Tests/data/15C8_H_input.pdb create mode 100644 Biopool/Tests/data/25C8_H_input.pdb diff --git a/Biopool/Tests/data/15C8_H_input.pdb b/Biopool/Tests/data/15C8_H_input.pdb new file mode 100644 index 0000000..6da317c --- /dev/null +++ b/Biopool/Tests/data/15C8_H_input.pdb @@ -0,0 +1,2148 @@ +HEADER CATALYTIC ANTIBODY 18-MAR-98 15C8 +TITLE CATALYTIC ANTIBODY 5C8, FREE FAB +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: IGG 5C8 FAB (LIGHT CHAIN); +COMPND 3 CHAIN: L; +COMPND 4 FRAGMENT: FAB; +COMPND 5 MOL_ID: 2; +COMPND 6 MOLECULE: IGG 5C8 FAB (HEAVY CHAIN); +COMPND 7 CHAIN: H; +COMPND 8 FRAGMENT: FAB +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: MUS MUSCULUS; +SOURCE 3 ORGANISM_COMMON: HOUSE MOUSE; +SOURCE 4 ORGANISM_TAXID: 10090; +SOURCE 5 MOL_ID: 2; +SOURCE 6 ORGANISM_SCIENTIFIC: MUS MUSCULUS; +SOURCE 7 ORGANISM_COMMON: HOUSE MOUSE; +SOURCE 8 ORGANISM_TAXID: 10090 +KEYWDS CATALYTIC ANTIBODY, FAB, RING CLOSURE REACTION +EXPDTA X-RAY DIFFRACTION +AUTHOR K.GRUBER,I.A.WILSON +REVDAT 2 24-FEB-09 15C8 1 VERSN +REVDAT 1 23-MAR-99 15C8 0 +JRNL AUTH K.GRUBER,A.HEINE,E.A.STURA,C.G.SHEVLIN,I.A.WILSON +JRNL TITL LIGAND-INDUCED CONFORMATIONAL CHANGES IN A +JRNL TITL 2 CATALYTIC ANTIBODY: COMPARISON OF THE BOUND AND +JRNL TITL 3 UNBOUND STRUCTURE OF FAB 5C8 +JRNL REF TO BE PUBLISHED +JRNL REFN +REMARK 1 +REMARK 1 REFERENCE 1 +REMARK 1 AUTH K.GRUBER,B.ZHOU,K.N.HOUK,R.A.LERNER,C.G.SHEVLIN, +REMARK 1 AUTH 2 I.A.WILSON +REMARK 1 TITL STRUCTURAL BASIS FOR ANTIBODY CATALYSIS OF A +REMARK 1 TITL 2 HIGHLY DISFAVORED RING CLOSURE REACTION +REMARK 1 REF TO BE PUBLISHED +REMARK 1 REFN +REMARK 2 +REMARK 2 RESOLUTION. 2.50 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : X-PLOR 3.851 +REMARK 3 AUTHORS : BRUNGER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.50 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 30.00 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL +REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 90.0 +REMARK 3 NUMBER OF REFLECTIONS : 19358 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : THROUGHOUT +REMARK 3 FREE R VALUE TEST SET SELECTION : RANDOM +REMARK 3 R VALUE (WORKING SET) : 0.190 +REMARK 3 FREE R VALUE : 0.251 +REMARK 3 FREE R VALUE TEST SET SIZE (%) : 7.400 +REMARK 3 FREE R VALUE TEST SET COUNT : 1428 +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : 0.007 +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : 10 +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : 2.50 +REMARK 3 BIN RESOLUTION RANGE LOW (A) : 2.59 +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : 63.00 +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : 1341 +REMARK 3 BIN R VALUE (WORKING SET) : 0.3390 +REMARK 3 BIN FREE R VALUE : 0.3850 +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : 7.70 +REMARK 3 BIN FREE R VALUE TEST SET COUNT : 110 +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : 0.034 +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 3259 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 0 +REMARK 3 SOLVENT ATOMS : 91 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : 28.30 +REMARK 3 MEAN B VALUE (OVERALL, A**2) : 36.80 +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : 3.77000 +REMARK 3 B22 (A**2) : 7.95000 +REMARK 3 B33 (A**2) : 5.71000 +REMARK 3 B12 (A**2) : 0.00000 +REMARK 3 B13 (A**2) : 1.79000 +REMARK 3 B23 (A**2) : 0.00000 +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : 0.27 +REMARK 3 ESD FROM SIGMAA (A) : 0.42 +REMARK 3 LOW RESOLUTION CUTOFF (A) : 5.00 +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : 0.36 +REMARK 3 ESD FROM C-V SIGMAA (A) : 0.48 +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.006 +REMARK 3 BOND ANGLES (DEGREES) : 1.30 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 30.00 +REMARK 3 IMPROPER ANGLES (DEGREES) : 0.60 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : RESTRAINED +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA +REMARK 3 MAIN-CHAIN BOND (A**2) : 3.090 ; 1.500 +REMARK 3 MAIN-CHAIN ANGLE (A**2) : 4.910 ; 2.000 +REMARK 3 SIDE-CHAIN BOND (A**2) : 4.960 ; 2.000 +REMARK 3 SIDE-CHAIN ANGLE (A**2) : 6.780 ; 2.500 +REMARK 3 +REMARK 3 NCS MODEL : NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT +REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL +REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 PARAMETER FILE 1 : PARHCSDX.PRO +REMARK 3 PARAMETER FILE 2 : NULL +REMARK 3 PARAMETER FILE 3 : NULL +REMARK 3 TOPOLOGY FILE 1 : TOPHCSDX.PRO +REMARK 3 TOPOLOGY FILE 2 : TOPH19.SOL +REMARK 3 TOPOLOGY FILE 3 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: BULK SOLVENT MODEL USED +REMARK 4 +REMARK 4 15C8 COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : NOV-96 +REMARK 200 TEMPERATURE (KELVIN) : 293 +REMARK 200 PH : 5.5 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : N +REMARK 200 RADIATION SOURCE : ROTATING ANODE +REMARK 200 BEAMLINE : NULL +REMARK 200 X-RAY GENERATOR MODEL : MACSCIENCE M06X +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 1.5418 +REMARK 200 MONOCHROMATOR : NULL +REMARK 200 OPTICS : SHORT SUPPER MIRRORS +REMARK 200 +REMARK 200 DETECTOR TYPE : AREA DETECTOR +REMARK 200 DETECTOR MANUFACTURER : SIEMENS +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : XENGEN +REMARK 200 DATA SCALING SOFTWARE : XENGEN +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 20624 +REMARK 200 RESOLUTION RANGE HIGH (A) : 2.500 +REMARK 200 RESOLUTION RANGE LOW (A) : 30.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : -3.000 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 95.6 +REMARK 200 DATA REDUNDANCY : 2.300 +REMARK 200 R MERGE (I) : NULL +REMARK 200 R SYM (I) : 0.06600 +REMARK 200 FOR THE DATA SET : 17.7000 +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 2.50 +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : 2.59 +REMARK 200 COMPLETENESS FOR SHELL (%) : 84.1 +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : NULL +REMARK 200 R SYM FOR SHELL (I) : 0.25900 +REMARK 200 FOR SHELL : 1.600 +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: AMORE, MERLOT +REMARK 200 STARTING MODEL: PDB ENTRY 1DBB +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 63.00 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 3.40 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: PH 5.5 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: C 1 2 1 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X,Y,-Z +REMARK 290 3555 X+1/2,Y+1/2,Z +REMARK 290 4555 -X+1/2,Y+1/2,-Z +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY1 3 1.000000 0.000000 0.000000 100.50000 +REMARK 290 SMTRY2 3 0.000000 1.000000 0.000000 40.25000 +REMARK 290 SMTRY3 3 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 4 -1.000000 0.000000 0.000000 100.50000 +REMARK 290 SMTRY2 4 0.000000 1.000000 0.000000 40.25000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: DIMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 TOTAL BURIED SURFACE AREA: 3470 ANGSTROM**2 +REMARK 350 SURFACE AREA OF THE COMPLEX: 19300 ANGSTROM**2 +REMARK 350 CHANGE IN SOLVENT FREE ENERGY: -22.0 KCAL/MOL +REMARK 350 APPLY THE FOLLOWING TO CHAINS: L, H +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 475 +REMARK 475 ZERO OCCUPANCY RESIDUES +REMARK 475 THE FOLLOWING RESIDUES WERE MODELED WITH ZERO OCCUPANCY. +REMARK 475 THE LOCATION AND PROPERTIES OF THESE RESIDUES MAY NOT +REMARK 475 BE RELIABLE. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 475 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE) +REMARK 475 M RES C SSEQI +REMARK 475 SER H 128 +REMARK 475 ALA H 129 +REMARK 475 ALA H 130 +REMARK 475 GLN H 133 +REMARK 475 THR H 134 +REMARK 475 ASN H 135 +REMARK 475 SER H 136 +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 TRP L 47 -61.04 -101.48 +REMARK 500 THR L 51 -43.78 70.50 +REMARK 500 SER L 67 164.08 177.01 +REMARK 500 ALA L 84 -165.47 -174.89 +REMARK 500 PRO L 120 175.15 -58.98 +REMARK 500 ASN L 138 77.66 34.84 +REMARK 500 ASP L 184 -80.51 -67.05 +REMARK 500 GLU L 185 -6.07 -52.98 +REMARK 500 THR L 200 -5.62 -52.96 +REMARK 500 PRO H 52A -9.34 -53.85 +REMARK 500 ALA H 88 178.58 172.65 +REMARK 500 TYR H 98 88.90 -150.62 +REMARK 500 SER H 128 91.29 62.55 +REMARK 500 ALA H 129 133.84 -176.47 +REMARK 500 ALA H 130 86.76 -67.53 +REMARK 500 ASN H 135 -100.97 35.72 +REMARK 500 SER H 136 -64.40 -102.90 +REMARK 500 MET H 137 159.07 -43.19 +REMARK 500 PHE H 148 137.32 -171.61 +REMARK 500 SER H 163 -8.05 66.87 +REMARK 500 SER H 180 41.30 71.83 +REMARK 500 ASP H 183 -3.16 77.94 +REMARK 500 SER H 202 -81.06 -42.26 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 999 +REMARK 999 SEQUENCE +REMARK 999 +REMARK 999 RESIDUE NUMBERING ACCORDING TO KABAT & WU +DBREF 15C8 L 2 212 UNP P01837 KAC_MOUSE 24 235 +DBREF 15C8 H 2 226 UNP P01869 IGH1M_MOUSE 2 217 +SEQADV 15C8 ASN L 32 UNP P01837 TYR 55 CONFLICT +SEQADV 15C8 SER L 94 UNP P01837 PHE 117 CONFLICT +SEQADV 15C8 TYR L 96 UNP P01837 HIS 119 CONFLICT +SEQADV 15C8 GLN H 3 UNP P01869 LYS 3 CONFLICT +SEQADV 15C8 GLN H 5 UNP P01869 LEU 5 CONFLICT +SEQADV 15C8 GLN H 6 UNP P01869 GLU 6 CONFLICT +SEQADV 15C8 PRO H 14 UNP P01869 SER 14 CONFLICT +SEQADV 15C8 LYS H 40 UNP P01869 ARG 40 CONFLICT +SEQADV 15C8 ALA H 49 UNP P01869 GLY 49 CONFLICT +SEQADV 15C8 GLN H 50 UNP P01869 ARG 50 CONFLICT +SEQADV 15C8 ASN H 56 UNP P01869 GLU 57 CONFLICT +SEQADV 15C8 THR H 57 UNP P01869 ILE 58 CONFLICT +SEQADV 15C8 LYS H 66 UNP P01869 THR 67 CONFLICT +SEQADV 15C8 SER H 75 UNP P01869 THR 76 CONFLICT +SEQADV 15C8 HIS H 81 UNP P01869 GLN 82 CONFLICT +SEQADV 15C8 SER H 87 UNP P01869 THR 91 CONFLICT +SEQADV 15C8 ALA H 93 UNP P01869 VAL 97 CONFLICT +SEQADV 15C8 ALA H 94 UNP P01869 ARG 98 CONFLICT +SEQADV 15C8 ASP H 95 UNP P01869 ARG 99 CONFLICT +SEQADV 15C8 PRO H 96 UNP P01869 GLY 100 CONFLICT +SEQADV 15C8 PRO H 97 UNP P01869 TYR 101 CONFLICT +SEQADV 15C8 TYR H 98 UNP P01869 GLY 102 CONFLICT +SEQADV 15C8 TYR H 99 UNP P01869 SER 103 CONFLICT +SEQADV 15C8 GLY H 100 UNP P01869 SER 104 CONFLICT +SEQADV 15C8 HIS H 100A UNP P01869 GLN 105 CONFLICT +SEQADV 15C8 GLY H 100B UNP P01869 GLU 106 CONFLICT +SEQADV 15C8 ASP H 101 UNP P01869 PRO 107 CONFLICT +SEQRES 1 L 213 ASP ILE VAL LEU THR GLN SER PRO ALA ILE MET SER ALA +SEQRES 2 L 213 SER LEU GLY GLU ARG VAL THR MET THR CYS THR ALA SER +SEQRES 3 L 213 SER SER VAL SER SER SER ASN LEU HIS TRP TYR GLN GLN +SEQRES 4 L 213 LYS PRO GLY SER SER PRO LYS LEU TRP ILE TYR SER THR +SEQRES 5 L 213 SER ASN LEU ALA SER GLY VAL PRO ALA ARG PHE SER GLY +SEQRES 6 L 213 SER GLY SER GLY THR SER TYR SER LEU THR ILE SER SER +SEQRES 7 L 213 MET GLU ALA GLU ASP ALA ALA THR TYR TYR CYS HIS GLN +SEQRES 8 L 213 TYR HIS ARG SER PRO TYR THR PHE GLY GLY GLY THR LYS +SEQRES 9 L 213 LEU GLU ILE LYS ARG ALA ASP ALA ALA PRO THR VAL SER +SEQRES 10 L 213 ILE PHE PRO PRO SER SER GLU GLN LEU THR SER GLY GLY +SEQRES 11 L 213 ALA SER VAL VAL CYS PHE LEU ASN ASN PHE TYR PRO LYS +SEQRES 12 L 213 ASP ILE ASN VAL LYS TRP LYS ILE ASP GLY SER GLU ARG +SEQRES 13 L 213 GLN ASN GLY VAL LEU ASN SER TRP THR ASP GLN ASP SER +SEQRES 14 L 213 LYS ASP SER THR TYR SER MET SER SER THR LEU THR LEU +SEQRES 15 L 213 THR LYS ASP GLU TYR GLU ARG HIS ASN SER TYR THR CYS +SEQRES 16 L 213 GLU ALA THR HIS LYS THR SER THR SER PRO ILE VAL LYS +SEQRES 17 L 213 SER PHE ASN ARG ASN +SEQRES 1 H 217 GLU VAL GLN LEU GLN GLN SER GLY ALA GLU LEU VAL LYS +SEQRES 2 H 217 PRO GLY ALA SER VAL LYS LEU SER CYS THR ALA SER GLY +SEQRES 3 H 217 PHE ASN ILE LYS ASP THR TYR MET HIS TRP VAL LYS GLN +SEQRES 4 H 217 LYS PRO GLU GLN GLY LEU GLU TRP ILE ALA GLN ILE ASP +SEQRES 5 H 217 PRO ALA ASN GLY ASN THR LYS TYR ASP PRO LYS PHE GLN +SEQRES 6 H 217 GLY LYS ALA THR ILE THR ALA ASP THR SER SER ASN THR +SEQRES 7 H 217 ALA TYR LEU HIS LEU SER SER LEU THR SER GLU ASP SER +SEQRES 8 H 217 ALA VAL TYR TYR CYS ALA ALA ASP PRO PRO TYR TYR GLY +SEQRES 9 H 217 HIS GLY ASP TYR TRP GLY GLN GLY THR THR LEU THR VAL +SEQRES 10 H 217 SER SER ALA LYS THR THR PRO PRO SER VAL TYR PRO LEU +SEQRES 11 H 217 ALA PRO GLY SER ALA ALA GLN THR ASN SER MET VAL THR +SEQRES 12 H 217 LEU GLY CYS LEU VAL LYS GLY TYR PHE PRO GLU PRO VAL +SEQRES 13 H 217 THR VAL THR TRP ASN SER GLY SER LEU SER SER GLY VAL +SEQRES 14 H 217 HIS THR PHE PRO ALA VAL LEU GLN SER ASP LEU TYR THR +SEQRES 15 H 217 LEU SER SER SER VAL THR VAL PRO SER SER THR TRP PRO +SEQRES 16 H 217 SER GLU THR VAL THR CYS ASN VAL ALA HIS PRO ALA SER +SEQRES 17 H 217 SER THR LYS VAL ASP LYS LYS ILE VAL +FORMUL 3 HOH *91(H2 O) +HELIX 1 3 SER L 122 SER L 127 1 6 +HELIX 2 4 ASP L 184 GLU L 187 1 4 +SHEET 1 A 4 LEU L 4 SER L 7 0 +SHEET 2 A 4 VAL L 19 ALA L 25 -1 N THR L 24 O THR L 5 +SHEET 3 A 4 SER L 70 ILE L 75 -1 N ILE L 75 O VAL L 19 +SHEET 4 A 4 PHE L 62 SER L 67 -1 N SER L 67 O SER L 70 +SHEET 1 B 5 ILE L 10 ALA L 13 0 +SHEET 2 B 5 THR L 102 ILE L 106 1 N LYS L 103 O MET L 11 +SHEET 3 B 5 ALA L 84 GLN L 90 -1 N TYR L 86 O THR L 102 +SHEET 4 B 5 LEU L 33 GLN L 38 -1 N GLN L 38 O THR L 85 +SHEET 5 B 5 LYS L 45 ILE L 48 -1 N ILE L 48 O TRP L 35 +SHEET 1 C 4 THR L 114 PHE L 118 0 +SHEET 2 C 4 GLY L 129 ASN L 137 -1 N ASN L 137 O THR L 114 +SHEET 3 C 4 MET L 175 THR L 182 -1 N LEU L 181 O ALA L 130 +SHEET 4 C 4 VAL L 159 TRP L 163 -1 N SER L 162 O SER L 176 +SHEET 1 D 4 SER L 153 ARG L 155 0 +SHEET 2 D 4 ASN L 145 ILE L 150 -1 N ILE L 150 O SER L 153 +SHEET 3 D 4 SER L 191 THR L 197 -1 N THR L 197 O ASN L 145 +SHEET 4 D 4 ILE L 205 ASN L 210 -1 N PHE L 209 O TYR L 192 +SHEET 1 E 4 GLN H 3 GLN H 6 0 +SHEET 2 E 4 VAL H 18 SER H 25 -1 N SER H 25 O GLN H 3 +SHEET 3 E 4 THR H 77 LEU H 82 -1 N LEU H 82 O VAL H 18 +SHEET 4 E 4 ALA H 67 ASP H 72 -1 N ASP H 72 O THR H 77 +SHEET 1 F 6 GLU H 10 VAL H 12 0 +SHEET 2 F 6 THR H 107 VAL H 111 1 N THR H 110 O GLU H 10 +SHEET 3 F 6 ALA H 88 ASP H 95 -1 N TYR H 90 O THR H 107 +SHEET 4 F 6 TYR H 33 GLN H 39 -1 N GLN H 39 O VAL H 89 +SHEET 5 F 6 LEU H 45 ASP H 52 -1 N ILE H 51 O MET H 34 +SHEET 6 F 6 ASN H 56 TYR H 59 -1 N LYS H 58 O GLN H 50 +SHEET 1 G 4 SER H 120 LEU H 124 0 +SHEET 2 G 4 VAL H 138 LYS H 145 -1 N LYS H 145 O SER H 120 +SHEET 3 G 4 LEU H 187 VAL H 193 -1 N VAL H 193 O VAL H 138 +SHEET 4 G 4 VAL H 171 THR H 173 -1 N HIS H 172 O SER H 190 +SHEET 1 H 3 THR H 153 TRP H 157 0 +SHEET 2 H 3 THR H 206 HIS H 212 -1 N ALA H 211 O THR H 153 +SHEET 3 H 3 THR H 217 LYS H 222 -1 N LYS H 221 O CYS H 208 +SHEET 1 I 2 VAL H 177 GLN H 179 0 +SHEET 2 I 2 LEU H 184 THR H 186 -1 N THR H 186 O VAL H 177 +SSBOND 1 CYS L 23 CYS L 88 1555 1555 2.03 +SSBOND 2 CYS L 134 CYS L 194 1555 1555 2.03 +SSBOND 3 CYS H 22 CYS H 92 1555 1555 2.02 +SSBOND 4 CYS H 142 CYS H 208 1555 1555 2.03 +CISPEP 1 SER L 7 PRO L 8 0 0.06 +CISPEP 2 SER L 94 PRO L 95 0 0.09 +CISPEP 3 TYR L 140 PRO L 141 0 0.16 +CISPEP 4 PHE H 148 PRO H 149 0 -0.12 +CISPEP 5 GLU H 150 PRO H 151 0 -0.35 +CISPEP 6 TRP H 199 PRO H 200 0 -0.12 +CRYST1 201.000 80.500 39.300 90.00 98.70 90.00 C 1 2 1 4 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.004975 0.000000 0.000761 0.00000 +SCALE2 0.000000 0.012422 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.025741 0.00000 +ATOM 1635 N GLU H 1 30.520 17.322 53.409 1.00 75.98 N +ATOM 1636 CA GLU H 1 29.620 16.479 52.570 1.00 75.63 C +ATOM 1637 C GLU H 1 30.332 16.038 51.294 1.00 69.30 C +ATOM 1638 O GLU H 1 30.026 14.985 50.733 1.00 68.85 O +ATOM 1639 CB GLU H 1 28.350 17.262 52.214 1.00 81.99 C +ATOM 1640 CG GLU H 1 27.703 17.978 53.400 1.00 90.63 C +ATOM 1641 CD GLU H 1 26.211 17.688 53.528 1.00 95.52 C +ATOM 1642 OE1 GLU H 1 25.437 18.149 52.661 1.00 99.00 O +ATOM 1643 OE2 GLU H 1 25.809 17.003 54.495 1.00 97.42 O +ATOM 1644 N VAL H 2 31.283 16.854 50.848 1.00 62.73 N +ATOM 1645 CA VAL H 2 32.060 16.572 49.644 1.00 57.08 C +ATOM 1646 C VAL H 2 33.142 15.529 49.944 1.00 53.67 C +ATOM 1647 O VAL H 2 33.883 15.658 50.917 1.00 49.11 O +ATOM 1648 CB VAL H 2 32.727 17.869 49.105 1.00 54.57 C +ATOM 1649 CG1 VAL H 2 33.909 17.530 48.214 1.00 51.47 C +ATOM 1650 CG2 VAL H 2 31.707 18.696 48.336 1.00 51.81 C +ATOM 1651 N GLN H 3 33.225 14.491 49.113 1.00 53.77 N +ATOM 1652 CA GLN H 3 34.228 13.448 49.316 1.00 51.89 C +ATOM 1653 C GLN H 3 34.465 12.524 48.109 1.00 45.29 C +ATOM 1654 O GLN H 3 33.530 12.151 47.397 1.00 36.59 O +ATOM 1655 CB GLN H 3 33.870 12.625 50.559 1.00 58.07 C +ATOM 1656 CG GLN H 3 33.263 11.260 50.283 1.00 70.47 C +ATOM 1657 CD GLN H 3 33.621 10.244 51.355 1.00 75.89 C +ATOM 1658 OE1 GLN H 3 34.164 10.596 52.408 1.00 78.39 O +ATOM 1659 NE2 GLN H 3 33.320 8.975 51.091 1.00 79.51 N +ATOM 1660 N LEU H 4 35.735 12.177 47.898 1.00 38.30 N +ATOM 1661 CA LEU H 4 36.159 11.310 46.805 1.00 32.80 C +ATOM 1662 C LEU H 4 36.700 9.998 47.359 1.00 31.89 C +ATOM 1663 O LEU H 4 37.717 9.983 48.046 1.00 34.35 O +ATOM 1664 CB LEU H 4 37.266 11.974 45.989 1.00 29.02 C +ATOM 1665 CG LEU H 4 37.007 13.292 45.274 1.00 28.03 C +ATOM 1666 CD1 LEU H 4 38.233 13.644 44.467 1.00 29.48 C +ATOM 1667 CD2 LEU H 4 35.797 13.180 44.371 1.00 33.80 C +ATOM 1668 N GLN H 5 36.026 8.898 47.049 1.00 30.36 N +ATOM 1669 CA GLN H 5 36.455 7.594 47.522 1.00 31.96 C +ATOM 1670 C GLN H 5 37.125 6.829 46.389 1.00 25.47 C +ATOM 1671 O GLN H 5 36.566 6.703 45.301 1.00 24.66 O +ATOM 1672 CB GLN H 5 35.252 6.807 48.060 1.00 42.78 C +ATOM 1673 CG GLN H 5 35.608 5.481 48.750 1.00 55.74 C +ATOM 1674 CD GLN H 5 36.295 5.672 50.100 1.00 65.72 C +ATOM 1675 OE1 GLN H 5 36.112 6.694 50.768 1.00 70.56 O +ATOM 1676 NE2 GLN H 5 37.091 4.682 50.505 1.00 67.73 N +ATOM 1677 N GLN H 6 38.327 6.328 46.650 1.00 22.05 N +ATOM 1678 CA GLN H 6 39.076 5.578 45.652 1.00 20.85 C +ATOM 1679 C GLN H 6 39.056 4.079 45.930 1.00 21.56 C +ATOM 1680 O GLN H 6 38.868 3.641 47.070 1.00 17.83 O +ATOM 1681 CB GLN H 6 40.529 6.066 45.599 1.00 19.91 C +ATOM 1682 CG GLN H 6 40.672 7.571 45.431 1.00 17.11 C +ATOM 1683 CD GLN H 6 42.082 8.003 45.083 1.00 17.83 C +ATOM 1684 OE1 GLN H 6 42.478 9.131 45.366 1.00 20.98 O +ATOM 1685 NE2 GLN H 6 42.848 7.111 44.466 1.00 13.98 N +ATOM 1686 N SER H 7 39.255 3.302 44.869 1.00 22.15 N +ATOM 1687 CA SER H 7 39.282 1.845 44.952 1.00 16.79 C +ATOM 1688 C SER H 7 40.454 1.391 45.831 1.00 18.37 C +ATOM 1689 O SER H 7 41.383 2.159 46.083 1.00 20.80 O +ATOM 1690 CB SER H 7 39.413 1.256 43.546 1.00 13.74 C +ATOM 1691 OG SER H 7 40.566 1.761 42.886 1.00 9.93 O +ATOM 1692 N GLY H 8 40.417 0.137 46.272 1.00 17.16 N +ATOM 1693 CA GLY H 8 41.455 -0.384 47.147 1.00 9.75 C +ATOM 1694 C GLY H 8 42.839 -0.621 46.585 1.00 11.07 C +ATOM 1695 O GLY H 8 43.043 -0.630 45.369 1.00 12.17 O +ATOM 1696 N ALA H 9 43.790 -0.826 47.499 1.00 8.89 N +ATOM 1697 CA ALA H 9 45.189 -1.073 47.167 1.00 7.97 C +ATOM 1698 C ALA H 9 45.269 -2.168 46.134 1.00 11.47 C +ATOM 1699 O ALA H 9 44.458 -3.092 46.147 1.00 14.77 O +ATOM 1700 CB ALA H 9 45.962 -1.490 48.416 1.00 5.00 C +ATOM 1701 N GLU H 10 46.262 -2.082 45.257 1.00 10.28 N +ATOM 1702 CA GLU H 10 46.410 -3.075 44.209 1.00 10.19 C +ATOM 1703 C GLU H 10 47.800 -3.680 44.121 1.00 17.53 C +ATOM 1704 O GLU H 10 48.819 -2.992 44.267 1.00 19.22 O +ATOM 1705 CB GLU H 10 46.036 -2.465 42.858 1.00 5.00 C +ATOM 1706 CG GLU H 10 44.623 -1.900 42.805 1.00 11.69 C +ATOM 1707 CD GLU H 10 43.646 -2.844 42.123 1.00 20.87 C +ATOM 1708 OE1 GLU H 10 44.041 -3.998 41.836 1.00 21.24 O +ATOM 1709 OE2 GLU H 10 42.487 -2.438 41.875 1.00 13.51 O +ATOM 1710 N LEU H 11 47.817 -4.986 43.889 1.00 20.39 N +ATOM 1711 CA LEU H 11 49.038 -5.763 43.729 1.00 19.79 C +ATOM 1712 C LEU H 11 48.856 -6.397 42.356 1.00 16.57 C +ATOM 1713 O LEU H 11 47.885 -7.105 42.119 1.00 20.40 O +ATOM 1714 CB LEU H 11 49.118 -6.841 44.801 1.00 22.22 C +ATOM 1715 CG LEU H 11 50.461 -6.992 45.503 1.00 27.92 C +ATOM 1716 CD1 LEU H 11 50.382 -8.147 46.490 1.00 29.51 C +ATOM 1717 CD2 LEU H 11 51.562 -7.228 44.469 1.00 32.65 C +ATOM 1718 N VAL H 12 49.782 -6.139 41.449 1.00 13.46 N +ATOM 1719 CA VAL H 12 49.654 -6.651 40.101 1.00 12.82 C +ATOM 1720 C VAL H 12 50.984 -7.163 39.583 1.00 17.70 C +ATOM 1721 O VAL H 12 52.043 -6.779 40.082 1.00 20.98 O +ATOM 1722 CB VAL H 12 49.131 -5.533 39.176 1.00 17.25 C +ATOM 1723 CG1 VAL H 12 48.697 -6.097 37.844 1.00 26.55 C +ATOM 1724 CG2 VAL H 12 47.963 -4.836 39.847 1.00 17.87 C +ATOM 1725 N LYS H 13 50.928 -8.037 38.588 1.00 16.43 N +ATOM 1726 CA LYS H 13 52.140 -8.593 38.009 1.00 21.04 C +ATOM 1727 C LYS H 13 52.606 -7.755 36.824 1.00 20.56 C +ATOM 1728 O LYS H 13 51.796 -7.173 36.103 1.00 18.41 O +ATOM 1729 CB LYS H 13 51.894 -10.047 37.575 1.00 24.17 C +ATOM 1730 CG LYS H 13 52.077 -11.034 38.720 1.00 39.43 C +ATOM 1731 CD LYS H 13 51.694 -12.456 38.369 1.00 47.08 C +ATOM 1732 CE LYS H 13 51.929 -13.353 39.579 1.00 55.73 C +ATOM 1733 NZ LYS H 13 51.572 -14.770 39.314 1.00 61.79 N +ATOM 1734 N PRO H 14 53.926 -7.666 36.617 1.00 18.37 N +ATOM 1735 CA PRO H 14 54.399 -6.873 35.483 1.00 22.72 C +ATOM 1736 C PRO H 14 53.777 -7.398 34.190 1.00 26.44 C +ATOM 1737 O PRO H 14 53.544 -8.602 34.049 1.00 32.93 O +ATOM 1738 CB PRO H 14 55.915 -7.068 35.510 1.00 21.62 C +ATOM 1739 CG PRO H 14 56.235 -7.504 36.891 1.00 17.05 C +ATOM 1740 CD PRO H 14 55.036 -8.261 37.380 1.00 21.93 C +ATOM 1741 N GLY H 15 53.500 -6.496 33.254 1.00 25.63 N +ATOM 1742 CA GLY H 15 52.922 -6.901 31.986 1.00 17.87 C +ATOM 1743 C GLY H 15 51.418 -6.765 31.958 1.00 17.33 C +ATOM 1744 O GLY H 15 50.817 -6.581 30.895 1.00 20.32 O +ATOM 1745 N ALA H 16 50.802 -6.855 33.130 1.00 14.00 N +ATOM 1746 CA ALA H 16 49.357 -6.745 33.224 1.00 15.91 C +ATOM 1747 C ALA H 16 48.880 -5.293 33.146 1.00 21.37 C +ATOM 1748 O ALA H 16 49.659 -4.367 32.900 1.00 23.30 O +ATOM 1749 CB ALA H 16 48.881 -7.371 34.514 1.00 16.68 C +ATOM 1750 N SER H 17 47.586 -5.108 33.358 1.00 15.89 N +ATOM 1751 CA SER H 17 46.999 -3.790 33.334 1.00 13.09 C +ATOM 1752 C SER H 17 46.025 -3.728 34.502 1.00 14.33 C +ATOM 1753 O SER H 17 45.653 -4.758 35.052 1.00 18.56 O +ATOM 1754 CB SER H 17 46.261 -3.576 32.021 1.00 8.22 C +ATOM 1755 OG SER H 17 44.933 -4.040 32.137 1.00 14.29 O +ATOM 1756 N VAL H 18 45.619 -2.522 34.878 1.00 14.03 N +ATOM 1757 CA VAL H 18 44.692 -2.339 35.983 1.00 12.51 C +ATOM 1758 C VAL H 18 43.849 -1.082 35.763 1.00 9.04 C +ATOM 1759 O VAL H 18 44.256 -0.171 35.057 1.00 14.67 O +ATOM 1760 CB VAL H 18 45.462 -2.234 37.325 1.00 7.81 C +ATOM 1761 CG1 VAL H 18 46.178 -0.920 37.400 1.00 13.90 C +ATOM 1762 CG2 VAL H 18 44.511 -2.406 38.498 1.00 5.00 C +ATOM 1763 N LYS H 19 42.668 -1.040 36.364 1.00 9.02 N +ATOM 1764 CA LYS H 19 41.793 0.103 36.220 1.00 9.45 C +ATOM 1765 C LYS H 19 41.352 0.611 37.584 1.00 13.87 C +ATOM 1766 O LYS H 19 40.563 -0.037 38.277 1.00 19.71 O +ATOM 1767 CB LYS H 19 40.576 -0.276 35.381 1.00 12.55 C +ATOM 1768 CG LYS H 19 39.649 0.894 35.058 1.00 17.22 C +ATOM 1769 CD LYS H 19 39.051 0.746 33.674 1.00 13.96 C +ATOM 1770 CE LYS H 19 37.699 1.415 33.584 1.00 17.15 C +ATOM 1771 NZ LYS H 19 36.901 0.868 32.440 1.00 28.03 N +ATOM 1772 N LEU H 20 41.869 1.779 37.958 1.00 17.38 N +ATOM 1773 CA LEU H 20 41.552 2.406 39.239 1.00 17.56 C +ATOM 1774 C LEU H 20 40.276 3.228 39.142 1.00 16.46 C +ATOM 1775 O LEU H 20 39.941 3.731 38.077 1.00 21.33 O +ATOM 1776 CB LEU H 20 42.698 3.319 39.680 1.00 17.48 C +ATOM 1777 CG LEU H 20 44.124 2.790 39.558 1.00 14.57 C +ATOM 1778 CD1 LEU H 20 45.095 3.785 40.165 1.00 18.33 C +ATOM 1779 CD2 LEU H 20 44.224 1.456 40.262 1.00 22.51 C +ATOM 1780 N SER H 21 39.571 3.376 40.256 1.00 16.27 N +ATOM 1781 CA SER H 21 38.336 4.149 40.253 1.00 20.60 C +ATOM 1782 C SER H 21 38.317 5.209 41.358 1.00 22.28 C +ATOM 1783 O SER H 21 38.960 5.062 42.395 1.00 20.97 O +ATOM 1784 CB SER H 21 37.132 3.216 40.392 1.00 15.33 C +ATOM 1785 OG SER H 21 37.009 2.772 41.730 1.00 30.53 O +ATOM 1786 N CYS H 22 37.561 6.275 41.116 1.00 25.28 N +ATOM 1787 CA CYS H 22 37.445 7.399 42.039 1.00 23.96 C +ATOM 1788 C CYS H 22 35.987 7.843 42.038 1.00 25.01 C +ATOM 1789 O CYS H 22 35.544 8.513 41.106 1.00 28.70 O +ATOM 1790 CB CYS H 22 38.361 8.532 41.545 1.00 20.83 C +ATOM 1791 SG CYS H 22 38.158 10.180 42.303 1.00 13.19 S +ATOM 1792 N THR H 23 35.234 7.460 43.066 1.00 24.08 N +ATOM 1793 CA THR H 23 33.821 7.829 43.129 1.00 25.72 C +ATOM 1794 C THR H 23 33.587 9.068 43.977 1.00 30.20 C +ATOM 1795 O THR H 23 33.949 9.112 45.158 1.00 28.65 O +ATOM 1796 CB THR H 23 32.959 6.691 43.687 1.00 26.27 C +ATOM 1797 OG1 THR H 23 33.227 5.485 42.962 1.00 29.96 O +ATOM 1798 CG2 THR H 23 31.489 7.033 43.545 1.00 22.56 C +ATOM 1799 N ALA H 24 32.959 10.066 43.361 1.00 28.91 N +ATOM 1800 CA ALA H 24 32.683 11.334 44.017 1.00 30.07 C +ATOM 1801 C ALA H 24 31.360 11.365 44.759 1.00 29.83 C +ATOM 1802 O ALA H 24 30.344 10.880 44.271 1.00 34.61 O +ATOM 1803 CB ALA H 24 32.724 12.458 42.994 1.00 32.31 C +ATOM 1804 N SER H 25 31.382 11.953 45.946 1.00 33.11 N +ATOM 1805 CA SER H 25 30.188 12.062 46.765 1.00 39.04 C +ATOM 1806 C SER H 25 29.950 13.510 47.193 1.00 39.13 C +ATOM 1807 O SER H 25 30.893 14.286 47.353 1.00 38.48 O +ATOM 1808 CB SER H 25 30.329 11.177 48.000 1.00 40.73 C +ATOM 1809 OG SER H 25 29.076 10.629 48.361 1.00 53.01 O +ATOM 1810 N GLY H 26 28.682 13.870 47.361 1.00 40.59 N +ATOM 1811 CA GLY H 26 28.347 15.214 47.786 1.00 42.21 C +ATOM 1812 C GLY H 26 28.407 16.250 46.685 1.00 42.74 C +ATOM 1813 O GLY H 26 28.217 17.440 46.938 1.00 44.59 O +ATOM 1814 N PHE H 27 28.682 15.809 45.462 1.00 42.10 N +ATOM 1815 CA PHE H 27 28.745 16.726 44.333 1.00 39.74 C +ATOM 1816 C PHE H 27 28.825 15.983 43.006 1.00 40.56 C +ATOM 1817 O PHE H 27 29.328 14.864 42.942 1.00 43.03 O +ATOM 1818 CB PHE H 27 29.928 17.696 44.498 1.00 38.91 C +ATOM 1819 CG PHE H 27 31.246 17.169 43.985 1.00 38.88 C +ATOM 1820 CD1 PHE H 27 31.635 17.397 42.665 1.00 38.18 C +ATOM 1821 CD2 PHE H 27 32.114 16.479 44.830 1.00 32.39 C +ATOM 1822 CE1 PHE H 27 32.871 16.948 42.191 1.00 35.58 C +ATOM 1823 CE2 PHE H 27 33.350 16.027 44.368 1.00 33.90 C +ATOM 1824 CZ PHE H 27 33.730 16.263 43.044 1.00 31.54 C +ATOM 1825 N ASN H 28 28.314 16.614 41.955 1.00 41.66 N +ATOM 1826 CA ASN H 28 28.301 16.036 40.614 1.00 44.69 C +ATOM 1827 C ASN H 28 29.605 16.328 39.847 1.00 41.40 C +ATOM 1828 O ASN H 28 29.995 17.483 39.688 1.00 41.11 O +ATOM 1829 CB ASN H 28 27.091 16.591 39.847 1.00 49.32 C +ATOM 1830 CG ASN H 28 26.703 15.733 38.655 1.00 59.90 C +ATOM 1831 OD1 ASN H 28 27.507 14.947 38.144 1.00 64.86 O +ATOM 1832 ND2 ASN H 28 25.463 15.885 38.200 1.00 63.90 N +ATOM 1833 N ILE H 29 30.270 15.281 39.366 1.00 36.10 N +ATOM 1834 CA ILE H 29 31.523 15.448 38.632 1.00 34.80 C +ATOM 1835 C ILE H 29 31.335 16.057 37.252 1.00 33.05 C +ATOM 1836 O ILE H 29 32.305 16.416 36.587 1.00 33.93 O +ATOM 1837 CB ILE H 29 32.268 14.105 38.448 1.00 33.82 C +ATOM 1838 CG1 ILE H 29 31.403 13.132 37.644 1.00 33.05 C +ATOM 1839 CG2 ILE H 29 32.631 13.524 39.793 1.00 31.09 C +ATOM 1840 CD1 ILE H 29 32.188 12.022 36.985 1.00 28.78 C +ATOM 1841 N LYS H 30 30.090 16.164 36.815 1.00 35.68 N +ATOM 1842 CA LYS H 30 29.799 16.733 35.508 1.00 37.50 C +ATOM 1843 C LYS H 30 30.135 18.229 35.513 1.00 36.56 C +ATOM 1844 O LYS H 30 30.549 18.792 34.499 1.00 28.58 O +ATOM 1845 CB LYS H 30 28.319 16.513 35.183 1.00 47.18 C +ATOM 1846 CG LYS H 30 27.817 17.220 33.932 1.00 57.84 C +ATOM 1847 CD LYS H 30 26.452 17.866 34.171 1.00 64.77 C +ATOM 1848 CE LYS H 30 25.820 18.337 32.864 1.00 72.23 C +ATOM 1849 NZ LYS H 30 25.824 19.824 32.718 1.00 73.81 N +ATOM 1850 N ASP H 31 29.972 18.850 36.679 1.00 37.66 N +ATOM 1851 CA ASP H 31 30.226 20.277 36.871 1.00 38.58 C +ATOM 1852 C ASP H 31 31.673 20.621 37.204 1.00 41.51 C +ATOM 1853 O ASP H 31 31.945 21.711 37.706 1.00 44.71 O +ATOM 1854 CB ASP H 31 29.351 20.813 38.007 1.00 40.17 C +ATOM 1855 CG ASP H 31 27.884 20.520 37.806 1.00 39.21 C +ATOM 1856 OD1 ASP H 31 27.396 20.686 36.670 1.00 42.89 O +ATOM 1857 OD2 ASP H 31 27.219 20.127 38.788 1.00 43.06 O +ATOM 1858 N THR H 32 32.606 19.719 36.930 1.00 39.60 N +ATOM 1859 CA THR H 32 33.987 20.000 37.274 1.00 34.75 C +ATOM 1860 C THR H 32 35.000 19.305 36.372 1.00 34.09 C +ATOM 1861 O THR H 32 34.664 18.811 35.298 1.00 35.85 O +ATOM 1862 CB THR H 32 34.244 19.597 38.740 1.00 34.43 C +ATOM 1863 OG1 THR H 32 35.567 19.971 39.120 1.00 43.16 O +ATOM 1864 CG2 THR H 32 34.089 18.104 38.913 1.00 36.67 C +ATOM 1865 N TYR H 33 36.252 19.299 36.814 1.00 32.52 N +ATOM 1866 CA TYR H 33 37.338 18.658 36.092 1.00 27.77 C +ATOM 1867 C TYR H 33 37.937 17.613 37.023 1.00 25.82 C +ATOM 1868 O TYR H 33 38.217 17.900 38.189 1.00 22.70 O +ATOM 1869 CB TYR H 33 38.414 19.672 35.734 1.00 29.36 C +ATOM 1870 CG TYR H 33 38.054 20.570 34.585 1.00 30.05 C +ATOM 1871 CD1 TYR H 33 37.404 21.780 34.803 1.00 31.42 C +ATOM 1872 CD2 TYR H 33 38.398 20.229 33.279 1.00 33.82 C +ATOM 1873 CE1 TYR H 33 37.107 22.637 33.750 1.00 35.11 C +ATOM 1874 CE2 TYR H 33 38.108 21.077 32.215 1.00 36.63 C +ATOM 1875 CZ TYR H 33 37.464 22.281 32.459 1.00 38.27 C +ATOM 1876 OH TYR H 33 37.193 23.132 31.413 1.00 42.28 O +ATOM 1877 N MET H 34 38.119 16.403 36.509 1.00 23.47 N +ATOM 1878 CA MET H 34 38.694 15.320 37.292 1.00 17.91 C +ATOM 1879 C MET H 34 40.149 15.162 36.903 1.00 15.25 C +ATOM 1880 O MET H 34 40.508 15.288 35.733 1.00 19.76 O +ATOM 1881 CB MET H 34 37.935 14.021 37.033 1.00 22.32 C +ATOM 1882 CG MET H 34 36.485 14.056 37.504 1.00 19.56 C +ATOM 1883 SD MET H 34 36.321 14.491 39.247 1.00 28.31 S +ATOM 1884 CE MET H 34 36.934 13.005 40.028 1.00 23.90 C +ATOM 1885 N HIS H 35 40.985 14.889 37.893 1.00 12.58 N +ATOM 1886 CA HIS H 35 42.413 14.730 37.678 1.00 8.90 C +ATOM 1887 C HIS H 35 42.933 13.493 38.384 1.00 14.18 C +ATOM 1888 O HIS H 35 42.357 13.036 39.374 1.00 7.88 O +ATOM 1889 CB HIS H 35 43.170 15.933 38.245 1.00 13.52 C +ATOM 1890 CG HIS H 35 42.847 17.225 37.565 1.00 18.38 C +ATOM 1891 ND1 HIS H 35 43.626 17.747 36.554 1.00 19.18 N +ATOM 1892 CD2 HIS H 35 41.803 18.072 37.714 1.00 14.64 C +ATOM 1893 CE1 HIS H 35 43.072 18.860 36.108 1.00 16.79 C +ATOM 1894 NE2 HIS H 35 41.965 19.079 36.795 1.00 18.70 N +ATOM 1895 N TRP H 36 44.031 12.958 37.864 1.00 13.31 N +ATOM 1896 CA TRP H 36 44.684 11.816 38.471 1.00 9.70 C +ATOM 1897 C TRP H 36 46.113 12.279 38.631 1.00 12.08 C +ATOM 1898 O TRP H 36 46.710 12.831 37.702 1.00 10.65 O +ATOM 1899 CB TRP H 36 44.632 10.582 37.569 1.00 9.38 C +ATOM 1900 CG TRP H 36 43.346 9.850 37.673 1.00 6.46 C +ATOM 1901 CD1 TRP H 36 42.253 10.000 36.868 1.00 8.49 C +ATOM 1902 CD2 TRP H 36 42.973 8.907 38.684 1.00 11.65 C +ATOM 1903 NE1 TRP H 36 41.217 9.214 37.319 1.00 7.61 N +ATOM 1904 CE2 TRP H 36 41.631 8.533 38.434 1.00 10.00 C +ATOM 1905 CE3 TRP H 36 43.639 8.344 39.781 1.00 15.08 C +ATOM 1906 CZ2 TRP H 36 40.943 7.618 39.240 1.00 6.53 C +ATOM 1907 CZ3 TRP H 36 42.951 7.433 40.585 1.00 13.46 C +ATOM 1908 CH2 TRP H 36 41.617 7.082 40.306 1.00 9.13 C +ATOM 1909 N VAL H 37 46.646 12.083 39.826 1.00 7.89 N +ATOM 1910 CA VAL H 37 48.005 12.474 40.125 1.00 8.19 C +ATOM 1911 C VAL H 37 48.716 11.241 40.651 1.00 8.57 C +ATOM 1912 O VAL H 37 48.130 10.429 41.371 1.00 8.76 O +ATOM 1913 CB VAL H 37 48.023 13.584 41.201 1.00 11.33 C +ATOM 1914 CG1 VAL H 37 49.434 14.078 41.429 1.00 5.00 C +ATOM 1915 CG2 VAL H 37 47.116 14.726 40.771 1.00 5.00 C +ATOM 1916 N LYS H 38 49.975 11.099 40.278 1.00 6.36 N +ATOM 1917 CA LYS H 38 50.769 9.971 40.718 1.00 8.64 C +ATOM 1918 C LYS H 38 51.915 10.488 41.580 1.00 16.49 C +ATOM 1919 O LYS H 38 52.466 11.560 41.330 1.00 20.44 O +ATOM 1920 CB LYS H 38 51.327 9.217 39.505 1.00 5.09 C +ATOM 1921 CG LYS H 38 52.644 8.502 39.767 1.00 12.48 C +ATOM 1922 CD LYS H 38 53.246 7.940 38.493 1.00 13.78 C +ATOM 1923 CE LYS H 38 54.407 7.012 38.815 1.00 13.55 C +ATOM 1924 NZ LYS H 38 54.868 6.267 37.607 1.00 19.38 N +ATOM 1925 N GLN H 39 52.273 9.728 42.604 1.00 18.25 N +ATOM 1926 CA GLN H 39 53.364 10.122 43.469 1.00 14.59 C +ATOM 1927 C GLN H 39 54.219 8.893 43.733 1.00 19.52 C +ATOM 1928 O GLN H 39 53.754 7.945 44.365 1.00 22.02 O +ATOM 1929 CB GLN H 39 52.822 10.668 44.784 1.00 8.95 C +ATOM 1930 CG GLN H 39 53.854 10.666 45.899 1.00 8.40 C +ATOM 1931 CD GLN H 39 53.506 11.621 47.017 1.00 10.83 C +ATOM 1932 OE1 GLN H 39 52.462 11.492 47.670 1.00 15.14 O +ATOM 1933 NE2 GLN H 39 54.382 12.587 47.251 1.00 14.36 N +ATOM 1934 N LYS H 40 55.453 8.900 43.237 1.00 19.62 N +ATOM 1935 CA LYS H 40 56.348 7.771 43.444 1.00 29.24 C +ATOM 1936 C LYS H 40 56.818 7.800 44.893 1.00 40.29 C +ATOM 1937 O LYS H 40 56.740 8.838 45.558 1.00 39.48 O +ATOM 1938 CB LYS H 40 57.551 7.843 42.495 1.00 24.67 C +ATOM 1939 CG LYS H 40 57.364 7.054 41.207 1.00 26.00 C +ATOM 1940 CD LYS H 40 58.685 6.827 40.483 1.00 33.71 C +ATOM 1941 CE LYS H 40 59.379 5.532 40.938 1.00 40.17 C +ATOM 1942 NZ LYS H 40 58.446 4.482 41.476 1.00 36.87 N +ATOM 1943 N PRO H 41 57.309 6.658 45.407 1.00 49.45 N +ATOM 1944 CA PRO H 41 57.777 6.615 46.798 1.00 51.40 C +ATOM 1945 C PRO H 41 58.938 7.571 47.040 1.00 52.21 C +ATOM 1946 O PRO H 41 59.994 7.464 46.410 1.00 50.08 O +ATOM 1947 CB PRO H 41 58.177 5.152 47.012 1.00 51.31 C +ATOM 1948 CG PRO H 41 57.546 4.395 45.870 1.00 51.93 C +ATOM 1949 CD PRO H 41 57.471 5.358 44.729 1.00 51.07 C +ATOM 1950 N GLU H 42 58.728 8.508 47.956 1.00 57.10 N +ATOM 1951 CA GLU H 42 59.741 9.496 48.303 1.00 60.91 C +ATOM 1952 C GLU H 42 59.972 10.503 47.179 1.00 58.29 C +ATOM 1953 O GLU H 42 60.807 11.397 47.303 1.00 61.56 O +ATOM 1954 CB GLU H 42 61.058 8.800 48.657 1.00 67.39 C +ATOM 1955 CG GLU H 42 60.879 7.431 49.296 1.00 76.78 C +ATOM 1956 CD GLU H 42 61.795 7.213 50.478 1.00 81.12 C +ATOM 1957 OE1 GLU H 42 63.027 7.337 50.305 1.00 82.19 O +ATOM 1958 OE2 GLU H 42 61.282 6.918 51.580 1.00 86.02 O +ATOM 1959 N GLN H 43 59.238 10.356 46.080 1.00 54.68 N +ATOM 1960 CA GLN H 43 59.371 11.280 44.959 1.00 49.39 C +ATOM 1961 C GLN H 43 58.335 12.395 45.090 1.00 43.54 C +ATOM 1962 O GLN H 43 57.669 12.520 46.125 1.00 40.13 O +ATOM 1963 CB GLN H 43 59.184 10.545 43.626 1.00 53.55 C +ATOM 1964 CG GLN H 43 60.478 10.319 42.862 1.00 56.25 C +ATOM 1965 CD GLN H 43 61.472 9.493 43.658 1.00 62.81 C +ATOM 1966 OE1 GLN H 43 61.779 8.353 43.299 1.00 66.90 O +ATOM 1967 NE2 GLN H 43 61.979 10.063 44.750 1.00 60.64 N +ATOM 1968 N GLY H 44 58.198 13.201 44.042 1.00 35.08 N +ATOM 1969 CA GLY H 44 57.243 14.288 44.087 1.00 26.55 C +ATOM 1970 C GLY H 44 55.946 13.926 43.404 1.00 26.15 C +ATOM 1971 O GLY H 44 55.780 12.815 42.907 1.00 29.40 O +ATOM 1972 N LEU H 45 55.021 14.877 43.382 1.00 20.60 N +ATOM 1973 CA LEU H 45 53.738 14.681 42.751 1.00 12.55 C +ATOM 1974 C LEU H 45 53.856 14.926 41.248 1.00 17.82 C +ATOM 1975 O LEU H 45 54.553 15.839 40.810 1.00 20.57 O +ATOM 1976 CB LEU H 45 52.730 15.637 43.355 1.00 8.08 C +ATOM 1977 CG LEU H 45 52.483 15.419 44.839 1.00 11.99 C +ATOM 1978 CD1 LEU H 45 52.002 16.707 45.506 1.00 7.33 C +ATOM 1979 CD2 LEU H 45 51.452 14.305 44.987 1.00 9.69 C +ATOM 1980 N GLU H 46 53.168 14.100 40.468 1.00 16.36 N +ATOM 1981 CA GLU H 46 53.178 14.194 39.017 1.00 15.22 C +ATOM 1982 C GLU H 46 51.757 14.159 38.491 1.00 12.90 C +ATOM 1983 O GLU H 46 51.046 13.176 38.684 1.00 18.50 O +ATOM 1984 CB GLU H 46 53.916 13.009 38.411 1.00 18.35 C +ATOM 1985 CG GLU H 46 55.408 13.048 38.508 1.00 28.09 C +ATOM 1986 CD GLU H 46 56.043 11.863 37.800 1.00 38.09 C +ATOM 1987 OE1 GLU H 46 56.229 10.813 38.454 1.00 41.40 O +ATOM 1988 OE2 GLU H 46 56.348 11.981 36.590 1.00 43.00 O +ATOM 1989 N TRP H 47 51.340 15.225 37.826 1.00 12.39 N +ATOM 1990 CA TRP H 47 50.003 15.266 37.255 1.00 11.00 C +ATOM 1991 C TRP H 47 50.023 14.338 36.044 1.00 12.01 C +ATOM 1992 O TRP H 47 50.966 14.359 35.236 1.00 11.84 O +ATOM 1993 CB TRP H 47 49.659 16.689 36.820 1.00 10.65 C +ATOM 1994 CG TRP H 47 48.390 16.805 36.031 1.00 5.00 C +ATOM 1995 CD1 TRP H 47 47.126 16.876 36.523 1.00 6.92 C +ATOM 1996 CD2 TRP H 47 48.275 16.914 34.609 1.00 5.64 C +ATOM 1997 NE1 TRP H 47 46.220 17.025 35.496 1.00 9.75 N +ATOM 1998 CE2 TRP H 47 46.904 17.053 34.310 1.00 5.14 C +ATOM 1999 CE3 TRP H 47 49.202 16.908 33.555 1.00 8.07 C +ATOM 2000 CZ2 TRP H 47 46.432 17.187 33.002 1.00 5.00 C +ATOM 2001 CZ3 TRP H 47 48.730 17.042 32.254 1.00 11.70 C +ATOM 2002 CH2 TRP H 47 47.355 17.180 31.993 1.00 5.00 C +ATOM 2003 N ILE H 48 48.982 13.526 35.912 1.00 10.18 N +ATOM 2004 CA ILE H 48 48.908 12.587 34.804 1.00 9.37 C +ATOM 2005 C ILE H 48 47.947 12.988 33.699 1.00 7.42 C +ATOM 2006 O ILE H 48 48.319 13.040 32.528 1.00 16.86 O +ATOM 2007 CB ILE H 48 48.485 11.195 35.294 1.00 6.77 C +ATOM 2008 CG1 ILE H 48 49.529 10.643 36.264 1.00 12.33 C +ATOM 2009 CG2 ILE H 48 48.314 10.257 34.105 1.00 11.88 C +ATOM 2010 CD1 ILE H 48 48.988 9.521 37.149 1.00 17.45 C +ATOM 2011 N ALA H 49 46.704 13.256 34.069 1.00 5.57 N +ATOM 2012 CA ALA H 49 45.693 13.609 33.092 1.00 6.05 C +ATOM 2013 C ALA H 49 44.487 14.273 33.721 1.00 7.35 C +ATOM 2014 O ALA H 49 44.300 14.234 34.935 1.00 7.56 O +ATOM 2015 CB ALA H 49 45.248 12.359 32.345 1.00 12.22 C +ATOM 2016 N GLN H 50 43.662 14.865 32.866 1.00 11.95 N +ATOM 2017 CA GLN H 50 42.448 15.544 33.291 1.00 15.39 C +ATOM 2018 C GLN H 50 41.334 15.233 32.294 1.00 15.58 C +ATOM 2019 O GLN H 50 41.589 14.972 31.118 1.00 13.16 O +ATOM 2020 CB GLN H 50 42.705 17.059 33.360 1.00 23.94 C +ATOM 2021 CG GLN H 50 41.573 17.951 32.857 1.00 27.83 C +ATOM 2022 CD GLN H 50 42.050 19.354 32.499 1.00 32.59 C +ATOM 2023 OE1 GLN H 50 42.148 19.707 31.327 1.00 37.61 O +ATOM 2024 NE2 GLN H 50 42.348 20.155 33.512 1.00 31.59 N +ATOM 2025 N ILE H 51 40.099 15.241 32.770 1.00 14.60 N +ATOM 2026 CA ILE H 51 38.977 14.977 31.896 1.00 18.46 C +ATOM 2027 C ILE H 51 37.777 15.833 32.286 1.00 19.67 C +ATOM 2028 O ILE H 51 37.621 16.211 33.443 1.00 20.60 O +ATOM 2029 CB ILE H 51 38.555 13.468 31.928 1.00 19.36 C +ATOM 2030 CG1 ILE H 51 37.475 13.211 30.867 1.00 15.94 C +ATOM 2031 CG2 ILE H 51 38.017 13.091 33.291 1.00 6.88 C +ATOM 2032 CD1 ILE H 51 36.731 11.926 31.041 1.00 23.48 C +ATOM 2033 N ASP H 52 36.948 16.148 31.300 1.00 18.31 N +ATOM 2034 CA ASP H 52 35.742 16.920 31.523 1.00 22.63 C +ATOM 2035 C ASP H 52 34.621 15.887 31.446 1.00 23.61 C +ATOM 2036 O ASP H 52 34.170 15.518 30.360 1.00 26.54 O +ATOM 2037 CB ASP H 52 35.580 17.969 30.419 1.00 27.37 C +ATOM 2038 CG ASP H 52 34.420 18.906 30.669 1.00 24.13 C +ATOM 2039 OD1 ASP H 52 33.625 18.645 31.593 1.00 26.16 O +ATOM 2040 OD2 ASP H 52 34.303 19.907 29.938 1.00 26.58 O +ATOM 2041 N PRO H 52A 34.163 15.397 32.603 1.00 23.70 N +ATOM 2042 CA PRO H 52A 33.094 14.394 32.633 1.00 29.67 C +ATOM 2043 C PRO H 52A 31.848 14.825 31.860 1.00 37.63 C +ATOM 2044 O PRO H 52A 30.928 14.033 31.641 1.00 42.39 O +ATOM 2045 CB PRO H 52A 32.809 14.214 34.127 1.00 27.38 C +ATOM 2046 CG PRO H 52A 34.052 14.653 34.800 1.00 22.83 C +ATOM 2047 CD PRO H 52A 34.601 15.771 33.956 1.00 22.58 C +ATOM 2048 N ALA H 53 31.824 16.085 31.446 1.00 40.30 N +ATOM 2049 CA ALA H 53 30.689 16.609 30.711 1.00 41.07 C +ATOM 2050 C ALA H 53 30.739 16.227 29.238 1.00 42.61 C +ATOM 2051 O ALA H 53 29.709 15.905 28.645 1.00 45.10 O +ATOM 2052 CB ALA H 53 30.637 18.120 30.856 1.00 44.64 C +ATOM 2053 N ASN H 54 31.928 16.256 28.645 1.00 39.31 N +ATOM 2054 CA ASN H 54 32.050 15.922 27.236 1.00 39.16 C +ATOM 2055 C ASN H 54 33.130 14.889 26.944 1.00 41.56 C +ATOM 2056 O ASN H 54 33.415 14.587 25.786 1.00 46.79 O +ATOM 2057 CB ASN H 54 32.312 17.190 26.423 1.00 40.87 C +ATOM 2058 CG ASN H 54 33.524 17.956 26.911 1.00 45.44 C +ATOM 2059 OD1 ASN H 54 34.534 17.364 27.297 1.00 46.05 O +ATOM 2060 ND2 ASN H 54 33.431 19.283 26.893 1.00 45.46 N +ATOM 2061 N GLY H 55 33.734 14.348 27.992 1.00 41.59 N +ATOM 2062 CA GLY H 55 34.766 13.351 27.789 1.00 40.64 C +ATOM 2063 C GLY H 55 36.073 13.901 27.259 1.00 38.86 C +ATOM 2064 O GLY H 55 36.989 13.136 26.966 1.00 38.17 O +ATOM 2065 N ASN H 56 36.175 15.219 27.125 1.00 39.19 N +ATOM 2066 CA ASN H 56 37.415 15.812 26.635 1.00 39.54 C +ATOM 2067 C ASN H 56 38.512 15.489 27.628 1.00 35.35 C +ATOM 2068 O ASN H 56 38.322 15.618 28.837 1.00 37.62 O +ATOM 2069 CB ASN H 56 37.277 17.323 26.505 1.00 46.42 C +ATOM 2070 CG ASN H 56 36.771 17.739 25.153 1.00 49.32 C +ATOM 2071 OD1 ASN H 56 36.513 18.917 24.914 1.00 56.11 O +ATOM 2072 ND2 ASN H 56 36.622 16.771 24.252 1.00 52.03 N +ATOM 2073 N THR H 57 39.669 15.090 27.122 1.00 32.41 N +ATOM 2074 CA THR H 57 40.764 14.716 28.000 1.00 29.31 C +ATOM 2075 C THR H 57 42.095 15.378 27.672 1.00 29.21 C +ATOM 2076 O THR H 57 42.377 15.692 26.520 1.00 32.63 O +ATOM 2077 CB THR H 57 40.960 13.196 27.968 1.00 27.78 C +ATOM 2078 OG1 THR H 57 41.191 12.783 26.616 1.00 28.09 O +ATOM 2079 CG2 THR H 57 39.712 12.487 28.495 1.00 19.14 C +ATOM 2080 N LYS H 58 42.904 15.582 28.707 1.00 30.19 N +ATOM 2081 CA LYS H 58 44.231 16.183 28.582 1.00 29.00 C +ATOM 2082 C LYS H 58 45.188 15.224 29.274 1.00 26.60 C +ATOM 2083 O LYS H 58 44.880 14.731 30.356 1.00 33.22 O +ATOM 2084 CB LYS H 58 44.277 17.535 29.292 1.00 30.17 C +ATOM 2085 CG LYS H 58 44.380 18.722 28.369 1.00 32.50 C +ATOM 2086 CD LYS H 58 43.471 19.841 28.841 1.00 35.25 C +ATOM 2087 CE LYS H 58 44.166 21.188 28.775 1.00 40.39 C +ATOM 2088 NZ LYS H 58 43.307 22.262 29.346 1.00 50.74 N +ATOM 2089 N TYR H 59 46.336 14.965 28.658 1.00 21.15 N +ATOM 2090 CA TYR H 59 47.331 14.055 29.217 1.00 19.96 C +ATOM 2091 C TYR H 59 48.695 14.701 29.238 1.00 21.13 C +ATOM 2092 O TYR H 59 48.956 15.655 28.517 1.00 22.86 O +ATOM 2093 CB TYR H 59 47.471 12.791 28.364 1.00 23.52 C +ATOM 2094 CG TYR H 59 46.274 11.883 28.356 1.00 23.95 C +ATOM 2095 CD1 TYR H 59 45.218 12.105 27.484 1.00 17.24 C +ATOM 2096 CD2 TYR H 59 46.194 10.803 29.230 1.00 27.03 C +ATOM 2097 CE1 TYR H 59 44.108 11.277 27.483 1.00 24.18 C +ATOM 2098 CE2 TYR H 59 45.089 9.968 29.237 1.00 24.85 C +ATOM 2099 CZ TYR H 59 44.050 10.210 28.363 1.00 22.21 C +ATOM 2100 OH TYR H 59 42.952 9.388 28.368 1.00 24.60 O +ATOM 2101 N ASP H 60 49.573 14.163 30.067 1.00 19.46 N +ATOM 2102 CA ASP H 60 50.929 14.649 30.112 1.00 22.07 C +ATOM 2103 C ASP H 60 51.598 13.672 29.157 1.00 26.33 C +ATOM 2104 O ASP H 60 51.520 12.462 29.343 1.00 28.47 O +ATOM 2105 CB ASP H 60 51.498 14.518 31.515 1.00 23.97 C +ATOM 2106 CG ASP H 60 52.956 14.875 31.578 1.00 22.34 C +ATOM 2107 OD1 ASP H 60 53.703 14.468 30.666 1.00 31.14 O +ATOM 2108 OD2 ASP H 60 53.358 15.561 32.542 1.00 39.69 O +ATOM 2109 N PRO H 61 52.252 14.184 28.113 1.00 31.22 N +ATOM 2110 CA PRO H 61 52.935 13.368 27.102 1.00 32.39 C +ATOM 2111 C PRO H 61 53.599 12.077 27.587 1.00 33.04 C +ATOM 2112 O PRO H 61 53.450 11.023 26.952 1.00 36.09 O +ATOM 2113 CB PRO H 61 53.945 14.335 26.472 1.00 32.87 C +ATOM 2114 CG PRO H 61 53.783 15.657 27.227 1.00 37.37 C +ATOM 2115 CD PRO H 61 52.421 15.617 27.844 1.00 33.38 C +ATOM 2116 N LYS H 62 54.323 12.144 28.701 1.00 26.33 N +ATOM 2117 CA LYS H 62 55.003 10.957 29.208 1.00 27.16 C +ATOM 2118 C LYS H 62 54.056 9.847 29.689 1.00 25.47 C +ATOM 2119 O LYS H 62 54.476 8.708 29.896 1.00 28.05 O +ATOM 2120 CB LYS H 62 55.989 11.336 30.325 1.00 26.55 C +ATOM 2121 CG LYS H 62 55.388 12.075 31.494 1.00 33.90 C +ATOM 2122 CD LYS H 62 56.432 12.321 32.574 1.00 43.84 C +ATOM 2123 CE LYS H 62 56.487 13.798 32.973 1.00 52.05 C +ATOM 2124 NZ LYS H 62 56.352 14.733 31.804 1.00 53.93 N +ATOM 2125 N PHE H 63 52.781 10.167 29.852 1.00 20.98 N +ATOM 2126 CA PHE H 63 51.827 9.172 30.296 1.00 21.62 C +ATOM 2127 C PHE H 63 50.928 8.780 29.145 1.00 30.41 C +ATOM 2128 O PHE H 63 50.247 7.760 29.188 1.00 33.35 O +ATOM 2129 CB PHE H 63 51.009 9.717 31.463 1.00 16.95 C +ATOM 2130 CG PHE H 63 51.777 9.763 32.750 1.00 20.45 C +ATOM 2131 CD1 PHE H 63 52.203 8.584 33.360 1.00 15.00 C +ATOM 2132 CD2 PHE H 63 52.129 10.981 33.324 1.00 18.73 C +ATOM 2133 CE1 PHE H 63 52.973 8.619 34.518 1.00 21.71 C +ATOM 2134 CE2 PHE H 63 52.898 11.027 34.483 1.00 19.61 C +ATOM 2135 CZ PHE H 63 53.323 9.845 35.081 1.00 22.56 C +ATOM 2136 N GLN H 64 50.931 9.607 28.110 1.00 38.59 N +ATOM 2137 CA GLN H 64 50.132 9.347 26.927 1.00 41.01 C +ATOM 2138 C GLN H 64 50.458 7.930 26.460 1.00 38.96 C +ATOM 2139 O GLN H 64 51.620 7.524 26.463 1.00 39.38 O +ATOM 2140 CB GLN H 64 50.498 10.360 25.850 1.00 50.38 C +ATOM 2141 CG GLN H 64 49.356 10.752 24.967 1.00 69.39 C +ATOM 2142 CD GLN H 64 49.487 10.137 23.599 1.00 82.40 C +ATOM 2143 OE1 GLN H 64 48.549 9.518 23.091 1.00 92.64 O +ATOM 2144 NE2 GLN H 64 50.661 10.295 22.990 1.00 85.55 N +ATOM 2145 N GLY H 65 49.436 7.174 26.075 1.00 34.37 N +ATOM 2146 CA GLY H 65 49.669 5.812 25.627 1.00 35.15 C +ATOM 2147 C GLY H 65 49.543 4.790 26.744 1.00 37.33 C +ATOM 2148 O GLY H 65 48.837 3.790 26.606 1.00 43.72 O +ATOM 2149 N LYS H 66 50.229 5.041 27.854 1.00 31.80 N +ATOM 2150 CA LYS H 66 50.202 4.153 29.010 1.00 24.23 C +ATOM 2151 C LYS H 66 48.955 4.333 29.876 1.00 20.61 C +ATOM 2152 O LYS H 66 48.429 3.369 30.428 1.00 19.62 O +ATOM 2153 CB LYS H 66 51.445 4.394 29.869 1.00 25.94 C +ATOM 2154 CG LYS H 66 51.372 3.821 31.274 1.00 26.15 C +ATOM 2155 CD LYS H 66 52.756 3.420 31.767 1.00 22.27 C +ATOM 2156 CE LYS H 66 52.864 1.917 31.978 1.00 19.54 C +ATOM 2157 NZ LYS H 66 54.247 1.413 31.724 1.00 27.94 N +ATOM 2158 N ALA H 67 48.481 5.568 29.995 1.00 16.57 N +ATOM 2159 CA ALA H 67 47.320 5.846 30.822 1.00 12.65 C +ATOM 2160 C ALA H 67 46.100 6.299 30.034 1.00 16.35 C +ATOM 2161 O ALA H 67 46.216 7.001 29.035 1.00 23.40 O +ATOM 2162 CB ALA H 67 47.677 6.886 31.859 1.00 14.74 C +ATOM 2163 N THR H 68 44.925 5.895 30.499 1.00 14.50 N +ATOM 2164 CA THR H 68 43.683 6.263 29.854 1.00 15.31 C +ATOM 2165 C THR H 68 42.706 6.701 30.925 1.00 18.98 C +ATOM 2166 O THR H 68 42.374 5.929 31.826 1.00 20.29 O +ATOM 2167 CB THR H 68 43.070 5.078 29.084 1.00 18.09 C +ATOM 2168 OG1 THR H 68 43.842 4.820 27.908 1.00 23.25 O +ATOM 2169 CG2 THR H 68 41.655 5.394 28.668 1.00 9.12 C +ATOM 2170 N ILE H 69 42.252 7.945 30.823 1.00 18.43 N +ATOM 2171 CA ILE H 69 41.312 8.485 31.784 1.00 18.38 C +ATOM 2172 C ILE H 69 39.918 8.468 31.164 1.00 19.48 C +ATOM 2173 O ILE H 69 39.741 8.798 29.994 1.00 24.47 O +ATOM 2174 CB ILE H 69 41.722 9.934 32.222 1.00 19.82 C +ATOM 2175 CG1 ILE H 69 40.740 10.469 33.274 1.00 23.61 C +ATOM 2176 CG2 ILE H 69 41.781 10.858 31.019 1.00 19.80 C +ATOM 2177 CD1 ILE H 69 41.297 11.606 34.135 1.00 17.13 C +ATOM 2178 N THR H 70 38.936 8.045 31.952 1.00 15.27 N +ATOM 2179 CA THR H 70 37.558 7.967 31.502 1.00 13.76 C +ATOM 2180 C THR H 70 36.685 8.343 32.680 1.00 15.49 C +ATOM 2181 O THR H 70 37.164 8.443 33.806 1.00 22.20 O +ATOM 2182 CB THR H 70 37.181 6.540 31.050 1.00 16.03 C +ATOM 2183 OG1 THR H 70 37.451 5.609 32.107 1.00 19.66 O +ATOM 2184 CG2 THR H 70 37.977 6.152 29.830 1.00 8.24 C +ATOM 2185 N ALA H 71 35.403 8.546 32.428 1.00 14.25 N +ATOM 2186 CA ALA H 71 34.495 8.925 33.491 1.00 17.86 C +ATOM 2187 C ALA H 71 33.084 8.481 33.165 1.00 19.87 C +ATOM 2188 O ALA H 71 32.688 8.437 32.005 1.00 19.70 O +ATOM 2189 CB ALA H 71 34.539 10.425 33.684 1.00 22.94 C +ATOM 2190 N ASP H 72 32.334 8.147 34.203 1.00 26.73 N +ATOM 2191 CA ASP H 72 30.960 7.704 34.054 1.00 33.04 C +ATOM 2192 C ASP H 72 30.122 8.589 34.965 1.00 34.94 C +ATOM 2193 O ASP H 72 29.937 8.296 36.145 1.00 32.60 O +ATOM 2194 CB ASP H 72 30.836 6.234 34.465 1.00 37.45 C +ATOM 2195 CG ASP H 72 29.411 5.731 34.406 1.00 45.99 C +ATOM 2196 OD1 ASP H 72 28.736 5.987 33.386 1.00 52.68 O +ATOM 2197 OD2 ASP H 72 28.965 5.080 35.377 1.00 48.72 O +ATOM 2198 N THR H 73 29.629 9.687 34.409 1.00 38.25 N +ATOM 2199 CA THR H 73 28.830 10.628 35.177 1.00 44.14 C +ATOM 2200 C THR H 73 27.585 9.987 35.781 1.00 43.68 C +ATOM 2201 O THR H 73 27.134 10.394 36.852 1.00 45.14 O +ATOM 2202 CB THR H 73 28.413 11.829 34.310 1.00 47.46 C +ATOM 2203 OG1 THR H 73 27.478 12.637 35.036 1.00 56.04 O +ATOM 2204 CG2 THR H 73 27.789 11.357 33.009 1.00 46.48 C +ATOM 2205 N SER H 74 27.035 8.987 35.095 1.00 43.38 N +ATOM 2206 CA SER H 74 25.850 8.283 35.577 1.00 42.18 C +ATOM 2207 C SER H 74 26.115 7.711 36.974 1.00 42.69 C +ATOM 2208 O SER H 74 25.274 7.817 37.873 1.00 43.78 O +ATOM 2209 CB SER H 74 25.480 7.157 34.608 1.00 42.94 C +ATOM 2210 OG SER H 74 24.929 6.049 35.296 1.00 46.10 O +ATOM 2211 N SER H 75 27.290 7.109 37.149 1.00 38.67 N +ATOM 2212 CA SER H 75 27.677 6.542 38.437 1.00 35.83 C +ATOM 2213 C SER H 75 28.543 7.537 39.207 1.00 33.34 C +ATOM 2214 O SER H 75 29.041 7.227 40.290 1.00 33.92 O +ATOM 2215 CB SER H 75 28.453 5.234 38.233 1.00 37.11 C +ATOM 2216 OG SER H 75 29.764 5.472 37.741 1.00 33.44 O +ATOM 2217 N ASN H 76 28.712 8.731 38.635 1.00 32.35 N +ATOM 2218 CA ASN H 76 29.520 9.798 39.235 1.00 30.69 C +ATOM 2219 C ASN H 76 30.909 9.270 39.566 1.00 27.82 C +ATOM 2220 O ASN H 76 31.415 9.475 40.668 1.00 25.56 O +ATOM 2221 CB ASN H 76 28.857 10.310 40.513 1.00 32.57 C +ATOM 2222 CG ASN H 76 29.055 11.799 40.716 1.00 35.87 C +ATOM 2223 OD1 ASN H 76 29.433 12.519 39.791 1.00 36.40 O +ATOM 2224 ND2 ASN H 76 28.798 12.269 41.930 1.00 35.16 N +ATOM 2225 N THR H 77 31.529 8.608 38.596 1.00 23.66 N +ATOM 2226 CA THR H 77 32.835 8.005 38.817 1.00 19.88 C +ATOM 2227 C THR H 77 33.839 8.262 37.705 1.00 18.73 C +ATOM 2228 O THR H 77 33.482 8.322 36.520 1.00 16.80 O +ATOM 2229 CB THR H 77 32.672 6.475 39.013 1.00 14.90 C +ATOM 2230 OG1 THR H 77 32.008 6.233 40.257 1.00 17.97 O +ATOM 2231 CG2 THR H 77 34.008 5.771 39.013 1.00 5.00 C +ATOM 2232 N ALA H 78 35.099 8.408 38.114 1.00 13.52 N +ATOM 2233 CA ALA H 78 36.219 8.643 37.200 1.00 15.56 C +ATOM 2234 C ALA H 78 37.206 7.485 37.319 1.00 15.70 C +ATOM 2235 O ALA H 78 37.507 7.021 38.423 1.00 14.31 O +ATOM 2236 CB ALA H 78 36.923 9.954 37.544 1.00 13.45 C +ATOM 2237 N TYR H 79 37.718 7.024 36.186 1.00 13.27 N +ATOM 2238 CA TYR H 79 38.653 5.914 36.207 1.00 12.78 C +ATOM 2239 C TYR H 79 39.981 6.277 35.601 1.00 11.64 C +ATOM 2240 O TYR H 79 40.096 7.241 34.854 1.00 13.34 O +ATOM 2241 CB TYR H 79 38.095 4.722 35.426 1.00 14.42 C +ATOM 2242 CG TYR H 79 36.677 4.337 35.769 1.00 15.54 C +ATOM 2243 CD1 TYR H 79 35.594 4.925 35.107 1.00 9.09 C +ATOM 2244 CD2 TYR H 79 36.413 3.355 36.736 1.00 8.60 C +ATOM 2245 CE1 TYR H 79 34.273 4.540 35.397 1.00 13.05 C +ATOM 2246 CE2 TYR H 79 35.102 2.967 37.031 1.00 8.46 C +ATOM 2247 CZ TYR H 79 34.038 3.559 36.358 1.00 8.52 C +ATOM 2248 OH TYR H 79 32.744 3.165 36.637 1.00 17.40 O +ATOM 2249 N LEU H 80 40.982 5.477 35.933 1.00 11.59 N +ATOM 2250 CA LEU H 80 42.317 5.633 35.398 1.00 14.35 C +ATOM 2251 C LEU H 80 42.773 4.214 35.050 1.00 19.47 C +ATOM 2252 O LEU H 80 42.801 3.329 35.913 1.00 20.10 O +ATOM 2253 CB LEU H 80 43.244 6.252 36.437 1.00 11.18 C +ATOM 2254 CG LEU H 80 44.726 6.237 36.059 1.00 15.59 C +ATOM 2255 CD1 LEU H 80 44.964 7.204 34.911 1.00 11.07 C +ATOM 2256 CD2 LEU H 80 45.575 6.611 37.267 1.00 13.27 C +ATOM 2257 N HIS H 81 43.097 3.987 33.783 1.00 13.97 N +ATOM 2258 CA HIS H 81 43.540 2.674 33.352 1.00 13.75 C +ATOM 2259 C HIS H 81 45.015 2.723 33.012 1.00 16.52 C +ATOM 2260 O HIS H 81 45.463 3.593 32.271 1.00 19.50 O +ATOM 2261 CB HIS H 81 42.736 2.215 32.131 1.00 21.11 C +ATOM 2262 CG HIS H 81 43.101 0.844 31.650 1.00 25.79 C +ATOM 2263 ND1 HIS H 81 43.837 0.629 30.505 1.00 30.25 N +ATOM 2264 CD2 HIS H 81 42.852 -0.380 32.171 1.00 28.97 C +ATOM 2265 CE1 HIS H 81 44.027 -0.669 30.343 1.00 29.57 C +ATOM 2266 NE2 HIS H 81 43.440 -1.303 31.341 1.00 25.94 N +ATOM 2267 N LEU H 82 45.778 1.793 33.569 1.00 18.17 N +ATOM 2268 CA LEU H 82 47.206 1.733 33.307 1.00 14.27 C +ATOM 2269 C LEU H 82 47.510 0.398 32.647 1.00 17.34 C +ATOM 2270 O LEU H 82 47.083 -0.649 33.133 1.00 19.82 O +ATOM 2271 CB LEU H 82 47.980 1.868 34.609 1.00 12.52 C +ATOM 2272 CG LEU H 82 47.753 3.182 35.352 1.00 17.92 C +ATOM 2273 CD1 LEU H 82 48.553 3.177 36.643 1.00 8.57 C +ATOM 2274 CD2 LEU H 82 48.179 4.354 34.472 1.00 18.84 C +ATOM 2275 N SER H 82A 48.256 0.435 31.547 1.00 15.78 N +ATOM 2276 CA SER H 82A 48.582 -0.770 30.802 1.00 14.61 C +ATOM 2277 C SER H 82A 50.062 -1.117 30.818 1.00 17.51 C +ATOM 2278 O SER H 82A 50.888 -0.306 31.214 1.00 24.00 O +ATOM 2279 CB SER H 82A 48.110 -0.603 29.362 1.00 18.72 C +ATOM 2280 OG SER H 82A 48.936 0.321 28.675 1.00 24.69 O +ATOM 2281 N SER H 82B 50.386 -2.333 30.384 1.00 21.04 N +ATOM 2282 CA SER H 82B 51.769 -2.805 30.325 1.00 22.21 C +ATOM 2283 C SER H 82B 52.598 -2.383 31.530 1.00 20.34 C +ATOM 2284 O SER H 82B 53.697 -1.845 31.390 1.00 23.32 O +ATOM 2285 CB SER H 82B 52.442 -2.296 29.049 1.00 27.25 C +ATOM 2286 OG SER H 82B 51.695 -2.666 27.901 1.00 44.21 O +ATOM 2287 N LEU H 82C 52.076 -2.662 32.714 1.00 19.62 N +ATOM 2288 CA LEU H 82C 52.734 -2.304 33.963 1.00 16.50 C +ATOM 2289 C LEU H 82C 54.179 -2.741 34.139 1.00 20.41 C +ATOM 2290 O LEU H 82C 54.589 -3.787 33.645 1.00 25.60 O +ATOM 2291 CB LEU H 82C 51.911 -2.839 35.120 1.00 11.97 C +ATOM 2292 CG LEU H 82C 50.564 -2.135 35.216 1.00 9.20 C +ATOM 2293 CD1 LEU H 82C 49.722 -2.777 36.299 1.00 10.46 C +ATOM 2294 CD2 LEU H 82C 50.806 -0.653 35.512 1.00 14.15 C +ATOM 2295 N THR H 83 54.941 -1.912 34.854 1.00 22.52 N +ATOM 2296 CA THR H 83 56.346 -2.161 35.172 1.00 18.66 C +ATOM 2297 C THR H 83 56.549 -1.624 36.590 1.00 20.61 C +ATOM 2298 O THR H 83 55.645 -1.009 37.150 1.00 24.33 O +ATOM 2299 CB THR H 83 57.304 -1.435 34.204 1.00 19.14 C +ATOM 2300 OG1 THR H 83 57.330 -0.032 34.503 1.00 24.81 O +ATOM 2301 CG2 THR H 83 56.864 -1.639 32.775 1.00 21.76 C +ATOM 2302 N SER H 84 57.717 -1.845 37.177 1.00 20.16 N +ATOM 2303 CA SER H 84 57.950 -1.389 38.545 1.00 27.59 C +ATOM 2304 C SER H 84 57.911 0.128 38.704 1.00 27.06 C +ATOM 2305 O SER H 84 57.638 0.643 39.784 1.00 29.56 O +ATOM 2306 CB SER H 84 59.289 -1.922 39.062 1.00 26.11 C +ATOM 2307 OG SER H 84 60.369 -1.453 38.271 1.00 37.34 O +ATOM 2308 N GLU H 85 58.171 0.841 37.622 1.00 25.03 N +ATOM 2309 CA GLU H 85 58.184 2.288 37.675 1.00 29.04 C +ATOM 2310 C GLU H 85 56.763 2.849 37.769 1.00 27.99 C +ATOM 2311 O GLU H 85 56.566 4.045 37.993 1.00 26.95 O +ATOM 2312 CB GLU H 85 58.959 2.803 36.458 1.00 34.60 C +ATOM 2313 CG GLU H 85 58.353 3.925 35.667 1.00 49.76 C +ATOM 2314 CD GLU H 85 59.419 4.706 34.899 1.00 62.05 C +ATOM 2315 OE1 GLU H 85 60.462 4.111 34.534 1.00 62.35 O +ATOM 2316 OE2 GLU H 85 59.218 5.918 34.664 1.00 66.47 O +ATOM 2317 N ASP H 86 55.776 1.967 37.626 1.00 19.82 N +ATOM 2318 CA ASP H 86 54.375 2.358 37.722 1.00 17.53 C +ATOM 2319 C ASP H 86 53.941 2.224 39.187 1.00 13.98 C +ATOM 2320 O ASP H 86 52.868 2.673 39.581 1.00 12.35 O +ATOM 2321 CB ASP H 86 53.493 1.461 36.841 1.00 16.94 C +ATOM 2322 CG ASP H 86 53.703 1.700 35.355 1.00 26.90 C +ATOM 2323 OD1 ASP H 86 53.703 2.875 34.932 1.00 28.02 O +ATOM 2324 OD2 ASP H 86 53.865 0.712 34.601 1.00 27.49 O +ATOM 2325 N SER H 87 54.776 1.590 39.996 1.00 12.50 N +ATOM 2326 CA SER H 87 54.450 1.433 41.403 1.00 13.55 C +ATOM 2327 C SER H 87 54.506 2.826 42.005 1.00 9.84 C +ATOM 2328 O SER H 87 55.496 3.537 41.843 1.00 14.69 O +ATOM 2329 CB SER H 87 55.460 0.510 42.080 1.00 17.79 C +ATOM 2330 OG SER H 87 55.343 -0.808 41.571 1.00 18.97 O +ATOM 2331 N ALA H 88 53.438 3.209 42.692 1.00 7.68 N +ATOM 2332 CA ALA H 88 53.331 4.525 43.296 1.00 5.38 C +ATOM 2333 C ALA H 88 51.917 4.686 43.840 1.00 9.22 C +ATOM 2334 O ALA H 88 51.094 3.783 43.700 1.00 12.24 O +ATOM 2335 CB ALA H 88 53.595 5.594 42.247 1.00 5.00 C +ATOM 2336 N VAL H 89 51.635 5.830 44.462 1.00 10.06 N +ATOM 2337 CA VAL H 89 50.297 6.094 44.982 1.00 6.75 C +ATOM 2338 C VAL H 89 49.575 6.961 43.952 1.00 5.00 C +ATOM 2339 O VAL H 89 50.157 7.857 43.354 1.00 13.91 O +ATOM 2340 CB VAL H 89 50.351 6.805 46.360 1.00 7.10 C +ATOM 2341 CG1 VAL H 89 48.946 7.077 46.878 1.00 5.00 C +ATOM 2342 CG2 VAL H 89 51.080 5.924 47.355 1.00 5.00 C +ATOM 2343 N TYR H 90 48.309 6.676 43.717 1.00 7.77 N +ATOM 2344 CA TYR H 90 47.567 7.434 42.738 1.00 5.42 C +ATOM 2345 C TYR H 90 46.444 8.153 43.411 1.00 6.24 C +ATOM 2346 O TYR H 90 45.655 7.553 44.140 1.00 7.24 O +ATOM 2347 CB TYR H 90 47.025 6.511 41.655 1.00 7.21 C +ATOM 2348 CG TYR H 90 48.124 5.966 40.794 1.00 8.07 C +ATOM 2349 CD1 TYR H 90 48.891 4.885 41.219 1.00 8.32 C +ATOM 2350 CD2 TYR H 90 48.436 6.562 39.579 1.00 5.00 C +ATOM 2351 CE1 TYR H 90 49.948 4.416 40.453 1.00 14.32 C +ATOM 2352 CE2 TYR H 90 49.493 6.101 38.803 1.00 5.00 C +ATOM 2353 CZ TYR H 90 50.245 5.035 39.246 1.00 8.07 C +ATOM 2354 OH TYR H 90 51.323 4.613 38.504 1.00 11.26 O +ATOM 2355 N TYR H 91 46.385 9.453 43.160 1.00 6.28 N +ATOM 2356 CA TYR H 91 45.356 10.286 43.737 1.00 7.05 C +ATOM 2357 C TYR H 91 44.462 10.787 42.642 1.00 7.08 C +ATOM 2358 O TYR H 91 44.913 11.049 41.531 1.00 11.31 O +ATOM 2359 CB TYR H 91 45.962 11.516 44.415 1.00 8.79 C +ATOM 2360 CG TYR H 91 46.858 11.233 45.585 1.00 6.22 C +ATOM 2361 CD1 TYR H 91 46.321 10.921 46.840 1.00 5.49 C +ATOM 2362 CD2 TYR H 91 48.242 11.265 45.444 1.00 5.00 C +ATOM 2363 CE1 TYR H 91 47.145 10.643 47.925 1.00 5.00 C +ATOM 2364 CE2 TYR H 91 49.081 10.988 46.533 1.00 10.22 C +ATOM 2365 CZ TYR H 91 48.518 10.677 47.767 1.00 5.00 C +ATOM 2366 OH TYR H 91 49.334 10.394 48.839 1.00 17.03 O +ATOM 2367 N CYS H 92 43.188 10.925 42.955 1.00 8.76 N +ATOM 2368 CA CYS H 92 42.273 11.490 42.000 1.00 13.12 C +ATOM 2369 C CYS H 92 41.901 12.811 42.663 1.00 13.81 C +ATOM 2370 O CYS H 92 41.789 12.895 43.884 1.00 11.36 O +ATOM 2371 CB CYS H 92 41.063 10.596 41.801 1.00 15.70 C +ATOM 2372 SG CYS H 92 39.934 10.528 43.208 1.00 22.91 S +ATOM 2373 N ALA H 93 41.735 13.849 41.863 1.00 15.16 N +ATOM 2374 CA ALA H 93 41.432 15.152 42.410 1.00 12.71 C +ATOM 2375 C ALA H 93 40.383 15.862 41.596 1.00 14.71 C +ATOM 2376 O ALA H 93 40.317 15.721 40.374 1.00 16.33 O +ATOM 2377 CB ALA H 93 42.701 15.982 42.459 1.00 11.80 C +ATOM 2378 N ALA H 94 39.554 16.626 42.287 1.00 21.68 N +ATOM 2379 CA ALA H 94 38.504 17.383 41.632 1.00 25.75 C +ATOM 2380 C ALA H 94 38.859 18.851 41.726 1.00 31.93 C +ATOM 2381 O ALA H 94 39.217 19.346 42.800 1.00 30.07 O +ATOM 2382 CB ALA H 94 37.173 17.132 42.308 1.00 24.42 C +ATOM 2383 N ASP H 95 38.791 19.536 40.591 1.00 36.91 N +ATOM 2384 CA ASP H 95 39.067 20.961 40.539 1.00 38.30 C +ATOM 2385 C ASP H 95 37.757 21.539 41.072 1.00 37.38 C +ATOM 2386 O ASP H 95 36.713 21.445 40.441 1.00 35.85 O +ATOM 2387 CB ASP H 95 39.366 21.349 39.090 1.00 42.60 C +ATOM 2388 CG ASP H 95 38.953 22.749 38.755 1.00 51.85 C +ATOM 2389 OD1 ASP H 95 37.898 23.201 39.237 1.00 60.36 O +ATOM 2390 OD2 ASP H 95 39.686 23.405 37.991 1.00 56.48 O +ATOM 2391 N PRO H 96 37.798 22.143 42.263 1.00 43.00 N +ATOM 2392 CA PRO H 96 36.562 22.688 42.813 1.00 45.02 C +ATOM 2393 C PRO H 96 35.997 23.903 42.136 1.00 51.67 C +ATOM 2394 O PRO H 96 36.717 24.742 41.593 1.00 51.28 O +ATOM 2395 CB PRO H 96 36.909 22.981 44.265 1.00 43.15 C +ATOM 2396 CG PRO H 96 38.364 23.268 44.237 1.00 46.70 C +ATOM 2397 CD PRO H 96 38.951 22.404 43.142 1.00 45.21 C +ATOM 2398 N PRO H 97 34.671 23.989 42.134 1.00 58.71 N +ATOM 2399 CA PRO H 97 33.950 25.112 41.540 1.00 60.58 C +ATOM 2400 C PRO H 97 34.076 26.272 42.539 1.00 59.97 C +ATOM 2401 O PRO H 97 33.824 27.427 42.203 1.00 58.95 O +ATOM 2402 CB PRO H 97 32.511 24.598 41.409 1.00 62.04 C +ATOM 2403 CG PRO H 97 32.550 23.125 41.825 1.00 62.96 C +ATOM 2404 CD PRO H 97 33.767 22.957 42.668 1.00 60.81 C +ATOM 2405 N TYR H 98 34.502 25.934 43.759 1.00 58.87 N +ATOM 2406 CA TYR H 98 34.669 26.890 44.853 1.00 62.76 C +ATOM 2407 C TYR H 98 35.786 26.432 45.813 1.00 64.12 C +ATOM 2408 O TYR H 98 35.526 25.743 46.804 1.00 63.57 O +ATOM 2409 CB TYR H 98 33.343 27.014 45.611 1.00 69.22 C +ATOM 2410 CG TYR H 98 33.303 28.126 46.634 1.00 76.43 C +ATOM 2411 CD1 TYR H 98 33.735 27.911 47.948 1.00 77.58 C +ATOM 2412 CD2 TYR H 98 32.837 29.399 46.294 1.00 78.76 C +ATOM 2413 CE1 TYR H 98 33.706 28.936 48.896 1.00 79.62 C +ATOM 2414 CE2 TYR H 98 32.804 30.433 47.234 1.00 80.97 C +ATOM 2415 CZ TYR H 98 33.241 30.194 48.533 1.00 81.13 C +ATOM 2416 OH TYR H 98 33.219 31.211 49.462 1.00 81.22 O +ATOM 2417 N TYR H 99 37.021 26.839 45.520 1.00 64.98 N +ATOM 2418 CA TYR H 99 38.208 26.467 46.308 1.00 64.51 C +ATOM 2419 C TYR H 99 38.100 26.561 47.829 1.00 63.54 C +ATOM 2420 O TYR H 99 38.482 25.636 48.548 1.00 65.37 O +ATOM 2421 CB TYR H 99 39.411 27.312 45.882 1.00 63.91 C +ATOM 2422 CG TYR H 99 39.810 27.177 44.432 1.00 64.18 C +ATOM 2423 CD1 TYR H 99 40.408 26.009 43.958 1.00 60.45 C +ATOM 2424 CD2 TYR H 99 39.599 28.223 43.533 1.00 63.45 C +ATOM 2425 CE1 TYR H 99 40.786 25.884 42.625 1.00 63.51 C +ATOM 2426 CE2 TYR H 99 39.973 28.109 42.198 1.00 65.58 C +ATOM 2427 CZ TYR H 99 40.565 26.937 41.750 1.00 65.28 C +ATOM 2428 OH TYR H 99 40.926 26.812 40.427 1.00 66.85 O +ATOM 2429 N GLY H 100 37.604 27.699 48.300 1.00 63.53 N +ATOM 2430 CA GLY H 100 37.475 27.956 49.724 1.00 63.15 C +ATOM 2431 C GLY H 100 37.211 26.798 50.664 1.00 65.35 C +ATOM 2432 O GLY H 100 38.031 26.488 51.534 1.00 65.50 O +ATOM 2433 N HIS H 100A 36.068 26.151 50.480 1.00 66.98 N +ATOM 2434 CA HIS H 100A 35.647 25.048 51.333 1.00 65.31 C +ATOM 2435 C HIS H 100A 35.721 23.664 50.675 1.00 61.55 C +ATOM 2436 O HIS H 100A 35.446 23.515 49.479 1.00 60.63 O +ATOM 2437 CB HIS H 100A 34.221 25.346 51.811 1.00 69.75 C +ATOM 2438 CG HIS H 100A 33.524 24.183 52.440 1.00 74.72 C +ATOM 2439 ND1 HIS H 100A 32.483 23.522 51.825 1.00 78.40 N +ATOM 2440 CD2 HIS H 100A 33.695 23.584 53.642 1.00 77.59 C +ATOM 2441 CE1 HIS H 100A 32.042 22.564 52.622 1.00 81.13 C +ATOM 2442 NE2 HIS H 100A 32.760 22.581 53.730 1.00 81.51 N +ATOM 2443 N GLY H 100B 36.111 22.666 51.470 1.00 56.95 N +ATOM 2444 CA GLY H 100B 36.196 21.294 50.987 1.00 54.11 C +ATOM 2445 C GLY H 100B 37.555 20.710 50.618 1.00 51.51 C +ATOM 2446 O GLY H 100B 38.441 21.408 50.123 1.00 51.36 O +ATOM 2447 N ASP H 101 37.715 19.412 50.871 1.00 47.21 N +ATOM 2448 CA ASP H 101 38.945 18.699 50.536 1.00 46.27 C +ATOM 2449 C ASP H 101 38.637 17.874 49.294 1.00 43.69 C +ATOM 2450 O ASP H 101 38.092 16.770 49.391 1.00 42.60 O +ATOM 2451 CB ASP H 101 39.367 17.763 51.667 1.00 46.62 C +ATOM 2452 CG ASP H 101 40.517 16.856 51.265 1.00 49.61 C +ATOM 2453 OD1 ASP H 101 41.519 17.375 50.717 1.00 53.26 O +ATOM 2454 OD2 ASP H 101 40.419 15.630 51.492 1.00 46.84 O +ATOM 2455 N TYR H 102 38.995 18.407 48.131 1.00 38.54 N +ATOM 2456 CA TYR H 102 38.708 17.747 46.865 1.00 35.35 C +ATOM 2457 C TYR H 102 39.726 16.716 46.359 1.00 32.96 C +ATOM 2458 O TYR H 102 39.819 16.459 45.155 1.00 31.44 O +ATOM 2459 CB TYR H 102 38.457 18.819 45.797 1.00 41.68 C +ATOM 2460 CG TYR H 102 37.118 19.534 45.943 1.00 44.93 C +ATOM 2461 CD1 TYR H 102 36.931 20.530 46.907 1.00 43.22 C +ATOM 2462 CD2 TYR H 102 36.038 19.208 45.119 1.00 48.33 C +ATOM 2463 CE1 TYR H 102 35.701 21.181 47.044 1.00 47.52 C +ATOM 2464 CE2 TYR H 102 34.807 19.853 45.248 1.00 51.28 C +ATOM 2465 CZ TYR H 102 34.645 20.836 46.210 1.00 50.77 C +ATOM 2466 OH TYR H 102 33.430 21.477 46.323 1.00 50.87 O +ATOM 2467 N TRP H 103 40.477 16.117 47.276 1.00 28.57 N +ATOM 2468 CA TRP H 103 41.453 15.102 46.909 1.00 22.97 C +ATOM 2469 C TRP H 103 40.987 13.755 47.453 1.00 26.58 C +ATOM 2470 O TRP H 103 40.223 13.687 48.424 1.00 22.61 O +ATOM 2471 CB TRP H 103 42.831 15.433 47.491 1.00 22.88 C +ATOM 2472 CG TRP H 103 43.645 16.339 46.619 1.00 25.12 C +ATOM 2473 CD1 TRP H 103 43.337 17.621 46.260 1.00 25.88 C +ATOM 2474 CD2 TRP H 103 44.887 16.031 45.975 1.00 21.13 C +ATOM 2475 NE1 TRP H 103 44.308 18.129 45.431 1.00 21.65 N +ATOM 2476 CE2 TRP H 103 45.272 17.177 45.239 1.00 20.15 C +ATOM 2477 CE3 TRP H 103 45.713 14.899 45.946 1.00 22.46 C +ATOM 2478 CZ2 TRP H 103 46.453 17.226 44.478 1.00 20.37 C +ATOM 2479 CZ3 TRP H 103 46.891 14.946 45.186 1.00 26.27 C +ATOM 2480 CH2 TRP H 103 47.246 16.105 44.464 1.00 23.30 C +ATOM 2481 N GLY H 104 41.439 12.683 46.816 1.00 22.47 N +ATOM 2482 CA GLY H 104 41.071 11.363 47.268 1.00 21.01 C +ATOM 2483 C GLY H 104 42.131 10.869 48.224 1.00 20.91 C +ATOM 2484 O GLY H 104 43.199 11.473 48.331 1.00 25.88 O +ATOM 2485 N GLN H 105 41.841 9.769 48.913 1.00 20.67 N +ATOM 2486 CA GLN H 105 42.770 9.173 49.876 1.00 20.16 C +ATOM 2487 C GLN H 105 44.004 8.600 49.189 1.00 18.87 C +ATOM 2488 O GLN H 105 45.066 8.472 49.798 1.00 19.76 O +ATOM 2489 CB GLN H 105 42.065 8.056 50.644 1.00 25.30 C +ATOM 2490 CG GLN H 105 40.715 7.669 50.039 1.00 36.99 C +ATOM 2491 CD GLN H 105 40.692 6.264 49.472 1.00 38.14 C +ATOM 2492 OE1 GLN H 105 39.642 5.769 49.068 1.00 43.14 O +ATOM 2493 NE2 GLN H 105 41.851 5.612 49.440 1.00 46.16 N +ATOM 2494 N GLY H 106 43.851 8.254 47.918 1.00 12.87 N +ATOM 2495 CA GLY H 106 44.952 7.683 47.176 1.00 13.63 C +ATOM 2496 C GLY H 106 44.806 6.173 47.129 1.00 15.13 C +ATOM 2497 O GLY H 106 44.150 5.572 47.983 1.00 13.14 O +ATOM 2498 N THR H 107 45.417 5.562 46.125 1.00 11.94 N +ATOM 2499 CA THR H 107 45.368 4.120 45.957 1.00 11.96 C +ATOM 2500 C THR H 107 46.788 3.668 45.699 1.00 14.69 C +ATOM 2501 O THR H 107 47.465 4.212 44.826 1.00 17.21 O +ATOM 2502 CB THR H 107 44.501 3.721 44.744 1.00 12.41 C +ATOM 2503 OG1 THR H 107 43.135 4.082 44.989 1.00 16.11 O +ATOM 2504 CG2 THR H 107 44.590 2.219 44.496 1.00 11.39 C +ATOM 2505 N THR H 108 47.252 2.688 46.464 1.00 12.82 N +ATOM 2506 CA THR H 108 48.605 2.191 46.272 1.00 10.93 C +ATOM 2507 C THR H 108 48.609 1.137 45.188 1.00 11.09 C +ATOM 2508 O THR H 108 47.749 0.259 45.160 1.00 14.61 O +ATOM 2509 CB THR H 108 49.168 1.546 47.548 1.00 14.70 C +ATOM 2510 OG1 THR H 108 49.117 2.490 48.625 1.00 31.29 O +ATOM 2511 CG2 THR H 108 50.609 1.113 47.329 1.00 14.05 C +ATOM 2512 N LEU H 109 49.578 1.228 44.291 1.00 11.30 N +ATOM 2513 CA LEU H 109 49.700 0.258 43.224 1.00 12.81 C +ATOM 2514 C LEU H 109 51.099 -0.299 43.300 1.00 14.10 C +ATOM 2515 O LEU H 109 52.069 0.441 43.138 1.00 20.04 O +ATOM 2516 CB LEU H 109 49.486 0.906 41.855 1.00 14.13 C +ATOM 2517 CG LEU H 109 49.862 -0.008 40.678 1.00 11.58 C +ATOM 2518 CD1 LEU H 109 49.006 -1.253 40.719 1.00 15.70 C +ATOM 2519 CD2 LEU H 109 49.664 0.710 39.354 1.00 10.94 C +ATOM 2520 N THR H 110 51.207 -1.599 43.564 1.00 14.48 N +ATOM 2521 CA THR H 110 52.510 -2.255 43.644 1.00 10.62 C +ATOM 2522 C THR H 110 52.657 -3.262 42.512 1.00 14.64 C +ATOM 2523 O THR H 110 51.804 -4.136 42.344 1.00 18.13 O +ATOM 2524 CB THR H 110 52.673 -3.016 44.951 1.00 9.84 C +ATOM 2525 OG1 THR H 110 52.034 -2.298 46.012 1.00 10.87 O +ATOM 2526 CG2 THR H 110 54.137 -3.197 45.259 1.00 12.95 C +ATOM 2527 N VAL H 111 53.731 -3.144 41.739 1.00 15.56 N +ATOM 2528 CA VAL H 111 53.961 -4.062 40.629 1.00 17.86 C +ATOM 2529 C VAL H 111 55.118 -4.982 40.951 1.00 20.07 C +ATOM 2530 O VAL H 111 56.269 -4.560 41.025 1.00 27.34 O +ATOM 2531 CB VAL H 111 54.280 -3.321 39.331 1.00 17.42 C +ATOM 2532 CG1 VAL H 111 54.423 -4.316 38.201 1.00 14.90 C +ATOM 2533 CG2 VAL H 111 53.177 -2.329 39.018 1.00 21.79 C +ATOM 2534 N SER H 112 54.800 -6.254 41.131 1.00 24.22 N +ATOM 2535 CA SER H 112 55.798 -7.249 41.473 1.00 25.51 C +ATOM 2536 C SER H 112 55.404 -8.613 40.915 1.00 26.36 C +ATOM 2537 O SER H 112 54.225 -8.887 40.693 1.00 30.57 O +ATOM 2538 CB SER H 112 55.917 -7.325 42.997 1.00 19.19 C +ATOM 2539 OG SER H 112 57.093 -7.996 43.393 1.00 26.29 O +ATOM 2540 N SER H 113 56.392 -9.465 40.673 1.00 28.33 N +ATOM 2541 CA SER H 113 56.105 -10.807 40.185 1.00 31.21 C +ATOM 2542 C SER H 113 56.337 -11.766 41.350 1.00 29.36 C +ATOM 2543 O SER H 113 56.182 -12.974 41.211 1.00 32.68 O +ATOM 2544 CB SER H 113 57.021 -11.167 39.016 1.00 33.36 C +ATOM 2545 OG SER H 113 58.233 -10.439 39.074 1.00 40.11 O +ATOM 2546 N ALA H 114 56.695 -11.202 42.502 1.00 24.37 N +ATOM 2547 CA ALA H 114 56.967 -11.967 43.713 1.00 23.33 C +ATOM 2548 C ALA H 114 55.713 -12.587 44.328 1.00 25.53 C +ATOM 2549 O ALA H 114 54.617 -12.048 44.195 1.00 28.29 O +ATOM 2550 CB ALA H 114 57.666 -11.067 44.744 1.00 15.15 C +ATOM 2551 N LYS H 115 55.887 -13.724 45.002 1.00 27.57 N +ATOM 2552 CA LYS H 115 54.785 -14.422 45.661 1.00 24.12 C +ATOM 2553 C LYS H 115 54.854 -14.127 47.150 1.00 27.91 C +ATOM 2554 O LYS H 115 55.911 -13.763 47.667 1.00 26.16 O +ATOM 2555 CB LYS H 115 54.903 -15.936 45.473 1.00 28.02 C +ATOM 2556 CG LYS H 115 55.059 -16.409 44.033 1.00 35.37 C +ATOM 2557 CD LYS H 115 55.891 -17.692 43.946 1.00 35.88 C +ATOM 2558 CE LYS H 115 55.171 -18.886 44.561 1.00 34.53 C +ATOM 2559 NZ LYS H 115 55.875 -20.162 44.253 1.00 34.13 N +ATOM 2560 N THR H 116 53.730 -14.291 47.841 1.00 28.95 N +ATOM 2561 CA THR H 116 53.693 -14.066 49.279 1.00 30.51 C +ATOM 2562 C THR H 116 54.785 -14.926 49.895 1.00 34.61 C +ATOM 2563 O THR H 116 54.822 -16.138 49.678 1.00 38.22 O +ATOM 2564 CB THR H 116 52.347 -14.490 49.872 1.00 34.09 C +ATOM 2565 OG1 THR H 116 51.293 -13.802 49.189 1.00 38.08 O +ATOM 2566 CG2 THR H 116 52.293 -14.171 51.363 1.00 28.49 C +ATOM 2567 N THR H 117 55.671 -14.301 50.660 1.00 32.55 N +ATOM 2568 CA THR H 117 56.772 -15.020 51.277 1.00 29.11 C +ATOM 2569 C THR H 117 56.915 -14.599 52.728 1.00 32.49 C +ATOM 2570 O THR H 117 57.109 -13.424 53.017 1.00 31.27 O +ATOM 2571 CB THR H 117 58.092 -14.718 50.546 1.00 31.26 C +ATOM 2572 OG1 THR H 117 57.924 -14.935 49.137 1.00 23.33 O +ATOM 2573 CG2 THR H 117 59.204 -15.599 51.078 1.00 26.71 C +ATOM 2574 N PRO H 118 56.832 -15.558 53.664 1.00 34.47 N +ATOM 2575 CA PRO H 118 56.962 -15.205 55.080 1.00 33.28 C +ATOM 2576 C PRO H 118 58.367 -14.702 55.370 1.00 31.36 C +ATOM 2577 O PRO H 118 59.334 -15.114 54.730 1.00 34.41 O +ATOM 2578 CB PRO H 118 56.639 -16.504 55.813 1.00 33.24 C +ATOM 2579 CG PRO H 118 56.958 -17.572 54.834 1.00 31.53 C +ATOM 2580 CD PRO H 118 56.641 -17.005 53.475 1.00 35.71 C +ATOM 2581 N PRO H 119 58.494 -13.799 56.342 1.00 27.60 N +ATOM 2582 CA PRO H 119 59.791 -13.237 56.705 1.00 31.51 C +ATOM 2583 C PRO H 119 60.688 -14.182 57.483 1.00 36.06 C +ATOM 2584 O PRO H 119 60.211 -14.970 58.301 1.00 41.75 O +ATOM 2585 CB PRO H 119 59.419 -12.020 57.537 1.00 32.91 C +ATOM 2586 CG PRO H 119 58.150 -12.425 58.196 1.00 31.90 C +ATOM 2587 CD PRO H 119 57.410 -13.247 57.171 1.00 29.45 C +ATOM 2588 N SER H 120 61.989 -14.095 57.217 1.00 35.45 N +ATOM 2589 CA SER H 120 62.976 -14.898 57.925 1.00 34.08 C +ATOM 2590 C SER H 120 63.445 -13.964 59.027 1.00 34.63 C +ATOM 2591 O SER H 120 64.077 -12.946 58.749 1.00 39.35 O +ATOM 2592 CB SER H 120 64.147 -15.253 57.006 1.00 36.30 C +ATOM 2593 OG SER H 120 63.782 -16.232 56.049 1.00 36.62 O +ATOM 2594 N VAL H 121 63.120 -14.293 60.271 1.00 31.20 N +ATOM 2595 CA VAL H 121 63.496 -13.451 61.398 1.00 30.68 C +ATOM 2596 C VAL H 121 64.778 -13.915 62.085 1.00 34.83 C +ATOM 2597 O VAL H 121 64.879 -15.053 62.547 1.00 38.42 O +ATOM 2598 CB VAL H 121 62.353 -13.394 62.437 1.00 30.80 C +ATOM 2599 CG1 VAL H 121 62.552 -12.217 63.384 1.00 28.98 C +ATOM 2600 CG2 VAL H 121 61.018 -13.284 61.724 1.00 25.59 C +ATOM 2601 N TYR H 122 65.756 -13.019 62.149 1.00 36.57 N +ATOM 2602 CA TYR H 122 67.038 -13.319 62.768 1.00 35.30 C +ATOM 2603 C TYR H 122 67.319 -12.365 63.924 1.00 38.40 C +ATOM 2604 O TYR H 122 67.319 -11.147 63.750 1.00 38.13 O +ATOM 2605 CB TYR H 122 68.160 -13.196 61.740 1.00 35.65 C +ATOM 2606 CG TYR H 122 68.015 -14.090 60.529 1.00 35.16 C +ATOM 2607 CD1 TYR H 122 67.843 -15.468 60.664 1.00 33.43 C +ATOM 2608 CD2 TYR H 122 68.074 -13.557 59.242 1.00 38.50 C +ATOM 2609 CE1 TYR H 122 67.735 -16.296 59.541 1.00 34.05 C +ATOM 2610 CE2 TYR H 122 67.967 -14.374 58.113 1.00 39.42 C +ATOM 2611 CZ TYR H 122 67.798 -15.738 58.270 1.00 37.72 C +ATOM 2612 OH TYR H 122 67.695 -16.534 57.154 1.00 41.45 O +ATOM 2613 N PRO H 123 67.572 -12.912 65.124 1.00 42.42 N +ATOM 2614 CA PRO H 123 67.859 -12.104 66.314 1.00 43.68 C +ATOM 2615 C PRO H 123 69.233 -11.444 66.245 1.00 45.57 C +ATOM 2616 O PRO H 123 70.197 -12.046 65.779 1.00 46.54 O +ATOM 2617 CB PRO H 123 67.775 -13.110 67.451 1.00 43.98 C +ATOM 2618 CG PRO H 123 68.176 -14.405 66.808 1.00 45.39 C +ATOM 2619 CD PRO H 123 67.599 -14.356 65.424 1.00 44.11 C +ATOM 2620 N LEU H 124 69.321 -10.206 66.716 1.00 47.94 N +ATOM 2621 CA LEU H 124 70.583 -9.482 66.702 1.00 50.31 C +ATOM 2622 C LEU H 124 71.059 -9.215 68.125 1.00 54.48 C +ATOM 2623 O LEU H 124 70.477 -8.392 68.837 1.00 55.24 O +ATOM 2624 CB LEU H 124 70.421 -8.156 65.960 1.00 48.66 C +ATOM 2625 CG LEU H 124 70.236 -8.230 64.446 1.00 48.83 C +ATOM 2626 CD1 LEU H 124 70.046 -6.829 63.902 1.00 49.45 C +ATOM 2627 CD2 LEU H 124 71.438 -8.889 63.802 1.00 48.18 C +ATOM 2628 N ALA H 125 72.115 -9.914 68.534 1.00 55.56 N +ATOM 2629 CA ALA H 125 72.667 -9.745 69.873 1.00 57.04 C +ATOM 2630 C ALA H 125 74.057 -9.116 69.810 1.00 61.51 C +ATOM 2631 O ALA H 125 74.812 -9.352 68.868 1.00 62.66 O +ATOM 2632 CB ALA H 125 72.729 -11.084 70.577 1.00 54.46 C +ATOM 2633 N PRO H 126 74.410 -8.303 70.819 1.00 65.24 N +ATOM 2634 CA PRO H 126 75.709 -7.622 70.902 1.00 71.69 C +ATOM 2635 C PRO H 126 76.899 -8.557 71.126 1.00 79.10 C +ATOM 2636 O PRO H 126 76.901 -9.360 72.064 1.00 82.28 O +ATOM 2637 CB PRO H 126 75.526 -6.654 72.067 1.00 70.48 C +ATOM 2638 CG PRO H 126 74.501 -7.310 72.925 1.00 67.41 C +ATOM 2639 CD PRO H 126 73.553 -7.980 71.972 1.00 65.30 C +ATOM 2640 N GLY H 127 77.914 -8.435 70.272 1.00 83.99 N +ATOM 2641 CA GLY H 127 79.096 -9.274 70.391 1.00 88.95 C +ATOM 2642 C GLY H 127 79.999 -8.989 71.575 1.00 91.27 C +ATOM 2643 O GLY H 127 81.223 -9.135 71.499 1.00 93.15 O +ATOM 2644 N SER H 128 79.431 -8.624 72.678 0.00 99.00 N +ATOM 2645 CA SER H 128 80.253 -8.337 73.848 0.00 99.00 C +ATOM 2646 C SER H 128 81.171 -7.152 73.538 0.00 99.00 C +ATOM 2647 O SER H 128 82.288 -7.315 73.024 0.00 99.00 O +ATOM 2648 CB SER H 128 81.113 -9.563 74.197 0.00 99.00 C +ATOM 2649 OG SER H 128 82.261 -9.624 73.358 0.00 99.00 O +ATOM 2650 N ALA H 129 80.658 -5.982 73.861 0.00 99.00 N +ATOM 2651 CA ALA H 129 81.374 -4.720 73.658 0.00 99.00 C +ATOM 2652 C ALA H 129 80.554 -3.560 74.210 0.00 99.00 C +ATOM 2653 O ALA H 129 79.351 -3.469 73.965 0.00 99.00 O +ATOM 2654 CB ALA H 129 81.624 -4.492 72.166 0.00 99.00 C +ATOM 2655 N ALA H 130 81.209 -2.677 74.957 0.00 99.00 N +ATOM 2656 CA ALA H 130 80.536 -1.522 75.540 0.00 99.00 C +ATOM 2657 C ALA H 130 80.100 -0.557 74.444 0.00 99.00 C +ATOM 2658 O ALA H 130 80.821 0.382 74.107 0.00 99.00 O +ATOM 2659 CB ALA H 130 81.467 -0.818 76.520 0.00 99.00 C +ATOM 2660 N GLN H 133 78.914 -0.794 73.893 0.00 99.00 N +ATOM 2661 CA GLN H 133 78.381 0.049 72.830 0.00 99.00 C +ATOM 2662 C GLN H 133 78.106 1.469 73.312 0.00 99.00 C +ATOM 2663 O GLN H 133 78.355 2.436 72.592 0.00 99.00 O +ATOM 2664 CB GLN H 133 77.096 -0.565 72.266 0.00 99.00 C +ATOM 2665 CG GLN H 133 75.976 -0.714 73.281 0.00 99.00 C +ATOM 2666 CD GLN H 133 74.636 -0.261 72.737 0.00 99.00 C +ATOM 2667 OE1 GLN H 133 74.382 -0.344 71.536 0.00 99.00 O +ATOM 2668 NE2 GLN H 133 73.771 0.223 73.620 0.00 99.00 N +ATOM 2669 N THR H 134 77.591 1.594 74.539 0.00 99.00 N +ATOM 2670 CA THR H 134 77.286 2.897 75.103 0.00 99.00 C +ATOM 2671 C THR H 134 77.283 2.834 76.620 0.00 99.00 C +ATOM 2672 O THR H 134 76.349 2.310 77.232 0.00 99.00 O +ATOM 2673 CB THR H 134 75.940 3.423 74.605 0.00 99.00 C +ATOM 2674 OG1 THR H 134 74.894 2.537 75.021 0.00 99.00 O +ATOM 2675 CG2 THR H 134 75.943 3.538 73.088 0.00 99.00 C +ATOM 2676 N ASN H 135 78.326 3.386 77.247 0.00 99.00 N +ATOM 2677 CA ASN H 135 78.474 3.419 78.685 0.00 99.00 C +ATOM 2678 C ASN H 135 77.926 2.153 79.310 0.00 99.00 C +ATOM 2679 O ASN H 135 78.585 1.101 79.336 0.00 99.00 O +ATOM 2680 CB ASN H 135 77.849 4.692 79.245 0.00 99.00 C +ATOM 2681 CG ASN H 135 78.526 5.930 78.687 0.00 99.00 C +ATOM 2682 OD1 ASN H 135 79.751 5.971 78.551 0.00 99.00 O +ATOM 2683 ND2 ASN H 135 77.735 6.943 78.359 0.00 99.00 N +ATOM 2684 N SER H 136 76.725 2.250 79.849 0.00 99.00 N +ATOM 2685 CA SER H 136 76.085 1.109 80.508 0.00 99.00 C +ATOM 2686 C SER H 136 75.022 0.495 79.602 0.00 99.00 C +ATOM 2687 O SER H 136 75.137 -0.651 79.158 0.00 99.00 O +ATOM 2688 CB SER H 136 75.433 1.545 81.825 0.00 99.00 C +ATOM 2689 OG SER H 136 74.612 2.683 81.621 0.00 99.00 O +ATOM 2690 N MET H 137 74.022 1.279 79.343 1.00 94.23 N +ATOM 2691 CA MET H 137 72.875 0.853 78.554 1.00 93.57 C +ATOM 2692 C MET H 137 73.248 0.050 77.317 1.00 90.01 C +ATOM 2693 O MET H 137 74.374 0.143 76.822 1.00 92.27 O +ATOM 2694 CB MET H 137 72.089 2.067 78.088 1.00 95.69 C +ATOM 2695 CG MET H 137 71.592 2.910 79.252 1.00 98.90 C +ATOM 2696 SD MET H 137 70.649 4.316 78.731 1.00 99.00 S +ATOM 2697 CE MET H 137 71.087 5.719 79.728 1.00 99.00 C +ATOM 2698 N VAL H 138 72.286 -0.718 76.807 1.00 82.91 N +ATOM 2699 CA VAL H 138 72.518 -1.560 75.636 1.00 77.28 C +ATOM 2700 C VAL H 138 71.462 -1.436 74.536 1.00 72.64 C +ATOM 2701 O VAL H 138 70.384 -0.886 74.752 1.00 71.71 O +ATOM 2702 CB VAL H 138 72.609 -3.042 76.047 1.00 77.09 C +ATOM 2703 CG1 VAL H 138 71.228 -3.566 76.398 1.00 75.04 C +ATOM 2704 CG2 VAL H 138 73.232 -3.861 74.921 1.00 77.53 C +ATOM 2705 N THR H 139 71.790 -1.966 73.358 1.00 66.53 N +ATOM 2706 CA THR H 139 70.897 -1.935 72.204 1.00 59.77 C +ATOM 2707 C THR H 139 70.798 -3.302 71.536 1.00 56.46 C +ATOM 2708 O THR H 139 71.810 -3.931 71.228 1.00 56.09 O +ATOM 2709 CB THR H 139 71.388 -0.927 71.146 1.00 59.93 C +ATOM 2710 OG1 THR H 139 71.251 0.404 71.654 1.00 64.36 O +ATOM 2711 CG2 THR H 139 70.577 -1.058 69.864 1.00 56.24 C +ATOM 2712 N LEU H 140 69.570 -3.755 71.308 1.00 50.24 N +ATOM 2713 CA LEU H 140 69.339 -5.037 70.660 1.00 45.89 C +ATOM 2714 C LEU H 140 68.664 -4.792 69.325 1.00 43.70 C +ATOM 2715 O LEU H 140 68.198 -3.687 69.053 1.00 44.41 O +ATOM 2716 CB LEU H 140 68.437 -5.912 71.514 1.00 49.34 C +ATOM 2717 CG LEU H 140 69.121 -6.683 72.636 1.00 53.03 C +ATOM 2718 CD1 LEU H 140 68.935 -5.929 73.945 1.00 52.24 C +ATOM 2719 CD2 LEU H 140 68.532 -8.083 72.723 1.00 53.72 C +ATOM 2720 N GLY H 141 68.601 -5.828 68.499 1.00 39.34 N +ATOM 2721 CA GLY H 141 67.978 -5.680 67.202 1.00 37.57 C +ATOM 2722 C GLY H 141 67.406 -6.974 66.673 1.00 36.03 C +ATOM 2723 O GLY H 141 67.687 -8.050 67.197 1.00 35.59 O +ATOM 2724 N CYS H 142 66.587 -6.856 65.635 1.00 35.30 N +ATOM 2725 CA CYS H 142 65.966 -8.005 64.995 1.00 34.96 C +ATOM 2726 C CYS H 142 65.994 -7.748 63.499 1.00 32.55 C +ATOM 2727 O CYS H 142 65.687 -6.644 63.050 1.00 32.84 O +ATOM 2728 CB CYS H 142 64.517 -8.174 65.473 1.00 40.69 C +ATOM 2729 SG CYS H 142 64.237 -9.714 66.411 1.00 51.76 S +ATOM 2730 N LEU H 143 66.383 -8.757 62.730 1.00 27.76 N +ATOM 2731 CA LEU H 143 66.438 -8.616 61.286 1.00 27.07 C +ATOM 2732 C LEU H 143 65.316 -9.413 60.620 1.00 31.06 C +ATOM 2733 O LEU H 143 65.225 -10.632 60.776 1.00 33.09 O +ATOM 2734 CB LEU H 143 67.800 -9.084 60.763 1.00 24.47 C +ATOM 2735 CG LEU H 143 68.002 -9.000 59.245 1.00 25.10 C +ATOM 2736 CD1 LEU H 143 67.893 -7.564 58.778 1.00 21.92 C +ATOM 2737 CD2 LEU H 143 69.356 -9.564 58.883 1.00 17.66 C +ATOM 2738 N VAL H 144 64.460 -8.709 59.887 1.00 29.38 N +ATOM 2739 CA VAL H 144 63.334 -9.319 59.183 1.00 27.13 C +ATOM 2740 C VAL H 144 63.672 -9.344 57.699 1.00 24.74 C +ATOM 2741 O VAL H 144 63.511 -8.345 56.998 1.00 26.46 O +ATOM 2742 CB VAL H 144 62.052 -8.501 59.409 1.00 26.28 C +ATOM 2743 CG1 VAL H 144 60.824 -9.355 59.129 1.00 24.12 C +ATOM 2744 CG2 VAL H 144 62.025 -7.992 60.838 1.00 19.88 C +ATOM 2745 N LYS H 145 64.128 -10.493 57.215 1.00 24.50 N +ATOM 2746 CA LYS H 145 64.537 -10.598 55.823 1.00 27.83 C +ATOM 2747 C LYS H 145 63.653 -11.387 54.873 1.00 27.00 C +ATOM 2748 O LYS H 145 62.892 -12.261 55.278 1.00 34.28 O +ATOM 2749 CB LYS H 145 65.955 -11.168 55.760 1.00 31.70 C +ATOM 2750 CG LYS H 145 66.808 -10.602 54.634 1.00 39.58 C +ATOM 2751 CD LYS H 145 68.188 -11.243 54.601 1.00 41.83 C +ATOM 2752 CE LYS H 145 68.490 -11.820 53.229 1.00 47.42 C +ATOM 2753 NZ LYS H 145 69.951 -11.959 52.984 1.00 54.70 N +ATOM 2754 N GLY H 146 63.787 -11.056 53.594 1.00 25.42 N +ATOM 2755 CA GLY H 146 63.056 -11.718 52.524 1.00 29.83 C +ATOM 2756 C GLY H 146 61.576 -12.012 52.685 1.00 31.46 C +ATOM 2757 O GLY H 146 61.178 -13.179 52.672 1.00 35.53 O +ATOM 2758 N TYR H 147 60.756 -10.972 52.830 1.00 29.50 N +ATOM 2759 CA TYR H 147 59.317 -11.170 52.963 1.00 27.68 C +ATOM 2760 C TYR H 147 58.578 -10.408 51.874 1.00 29.57 C +ATOM 2761 O TYR H 147 59.146 -9.534 51.219 1.00 30.06 O +ATOM 2762 CB TYR H 147 58.823 -10.736 54.349 1.00 25.26 C +ATOM 2763 CG TYR H 147 58.888 -9.255 54.614 1.00 27.75 C +ATOM 2764 CD1 TYR H 147 57.867 -8.406 54.189 1.00 33.08 C +ATOM 2765 CD2 TYR H 147 59.956 -8.699 55.311 1.00 29.73 C +ATOM 2766 CE1 TYR H 147 57.907 -7.037 54.453 1.00 31.13 C +ATOM 2767 CE2 TYR H 147 60.005 -7.329 55.581 1.00 31.18 C +ATOM 2768 CZ TYR H 147 58.976 -6.508 55.148 1.00 30.60 C +ATOM 2769 OH TYR H 147 59.015 -5.160 55.408 1.00 40.08 O +ATOM 2770 N PHE H 148 57.312 -10.755 51.677 1.00 33.20 N +ATOM 2771 CA PHE H 148 56.487 -10.118 50.663 1.00 35.12 C +ATOM 2772 C PHE H 148 55.031 -10.558 50.790 1.00 37.34 C +ATOM 2773 O PHE H 148 54.749 -11.741 51.001 1.00 38.43 O +ATOM 2774 CB PHE H 148 56.999 -10.472 49.269 1.00 35.59 C +ATOM 2775 CG PHE H 148 56.342 -9.692 48.175 1.00 39.21 C +ATOM 2776 CD1 PHE H 148 56.760 -8.399 47.885 1.00 41.26 C +ATOM 2777 CD2 PHE H 148 55.287 -10.234 47.454 1.00 39.90 C +ATOM 2778 CE1 PHE H 148 56.135 -7.653 46.892 1.00 43.37 C +ATOM 2779 CE2 PHE H 148 54.651 -9.497 46.456 1.00 44.84 C +ATOM 2780 CZ PHE H 148 55.077 -8.202 46.174 1.00 44.51 C +ATOM 2781 N PRO H 149 54.087 -9.610 50.662 1.00 34.74 N +ATOM 2782 CA PRO H 149 54.337 -8.187 50.413 1.00 32.31 C +ATOM 2783 C PRO H 149 54.390 -7.436 51.728 1.00 30.69 C +ATOM 2784 O PRO H 149 54.299 -8.040 52.800 1.00 28.34 O +ATOM 2785 CB PRO H 149 53.129 -7.767 49.598 1.00 31.02 C +ATOM 2786 CG PRO H 149 52.019 -8.591 50.199 1.00 32.56 C +ATOM 2787 CD PRO H 149 52.643 -9.882 50.730 1.00 32.16 C +ATOM 2788 N GLU H 150 54.538 -6.120 51.648 1.00 25.80 N +ATOM 2789 CA GLU H 150 54.561 -5.314 52.857 1.00 23.81 C +ATOM 2790 C GLU H 150 53.121 -5.361 53.338 1.00 21.46 C +ATOM 2791 O GLU H 150 52.221 -5.667 52.555 1.00 20.28 O +ATOM 2792 CB GLU H 150 54.956 -3.872 52.536 1.00 20.85 C +ATOM 2793 CG GLU H 150 56.449 -3.592 52.625 1.00 29.25 C +ATOM 2794 CD GLU H 150 56.827 -2.864 53.906 1.00 34.35 C +ATOM 2795 OE1 GLU H 150 56.557 -3.396 55.007 1.00 29.03 O +ATOM 2796 OE2 GLU H 150 57.395 -1.755 53.811 1.00 37.90 O +ATOM 2797 N PRO H 151 52.883 -5.099 54.630 1.00 22.44 N +ATOM 2798 CA PRO H 151 53.834 -4.768 55.693 1.00 27.31 C +ATOM 2799 C PRO H 151 53.997 -5.911 56.716 1.00 24.67 C +ATOM 2800 O PRO H 151 53.458 -7.005 56.543 1.00 27.72 O +ATOM 2801 CB PRO H 151 53.187 -3.556 56.341 1.00 25.08 C +ATOM 2802 CG PRO H 151 51.653 -3.867 56.193 1.00 23.68 C +ATOM 2803 CD PRO H 151 51.510 -4.974 55.140 1.00 21.31 C +ATOM 2804 N VAL H 152 54.742 -5.627 57.778 1.00 21.30 N +ATOM 2805 CA VAL H 152 54.973 -6.566 58.867 1.00 26.51 C +ATOM 2806 C VAL H 152 54.897 -5.753 60.156 1.00 31.53 C +ATOM 2807 O VAL H 152 55.113 -4.538 60.151 1.00 34.09 O +ATOM 2808 CB VAL H 152 56.379 -7.225 58.803 1.00 28.42 C +ATOM 2809 CG1 VAL H 152 56.538 -8.003 57.512 1.00 30.49 C +ATOM 2810 CG2 VAL H 152 57.463 -6.167 58.928 1.00 23.66 C +ATOM 2811 N THR H 153 54.592 -6.419 61.261 1.00 36.40 N +ATOM 2812 CA THR H 153 54.500 -5.732 62.540 1.00 39.14 C +ATOM 2813 C THR H 153 55.585 -6.248 63.473 1.00 35.04 C +ATOM 2814 O THR H 153 55.673 -7.445 63.732 1.00 36.66 O +ATOM 2815 CB THR H 153 53.118 -5.948 63.182 1.00 42.14 C +ATOM 2816 OG1 THR H 153 52.102 -5.515 62.270 1.00 44.08 O +ATOM 2817 CG2 THR H 153 52.998 -5.156 64.480 1.00 43.57 C +ATOM 2818 N VAL H 154 56.411 -5.332 63.964 1.00 34.99 N +ATOM 2819 CA VAL H 154 57.502 -5.681 64.860 1.00 37.43 C +ATOM 2820 C VAL H 154 57.297 -5.073 66.240 1.00 41.76 C +ATOM 2821 O VAL H 154 57.417 -3.858 66.437 1.00 39.42 O +ATOM 2822 CB VAL H 154 58.861 -5.214 64.294 1.00 33.69 C +ATOM 2823 CG1 VAL H 154 59.998 -5.666 65.199 1.00 30.46 C +ATOM 2824 CG2 VAL H 154 59.049 -5.777 62.898 1.00 34.71 C +ATOM 2825 N THR H 156 56.978 -5.945 67.190 1.00 46.33 N +ATOM 2826 CA THR H 156 56.752 -5.548 68.568 1.00 48.90 C +ATOM 2827 C THR H 156 57.812 -6.199 69.440 1.00 51.32 C +ATOM 2828 O THR H 156 58.366 -7.237 69.082 1.00 50.90 O +ATOM 2829 CB THR H 156 55.370 -6.005 69.055 1.00 46.06 C +ATOM 2830 OG1 THR H 156 54.711 -6.735 68.012 1.00 49.70 O +ATOM 2831 CG2 THR H 156 54.529 -4.807 69.435 1.00 47.10 C +ATOM 2832 N TRP H 157 58.100 -5.582 70.578 1.00 53.29 N +ATOM 2833 CA TRP H 157 59.088 -6.125 71.492 1.00 57.26 C +ATOM 2834 C TRP H 157 58.399 -6.549 72.789 1.00 63.76 C +ATOM 2835 O TRP H 157 57.760 -5.739 73.471 1.00 64.34 O +ATOM 2836 CB TRP H 157 60.178 -5.087 71.762 1.00 55.85 C +ATOM 2837 CG TRP H 157 61.078 -4.858 70.578 1.00 52.51 C +ATOM 2838 CD1 TRP H 157 60.944 -3.892 69.620 1.00 52.57 C +ATOM 2839 CD2 TRP H 157 62.241 -5.615 70.221 1.00 49.26 C +ATOM 2840 NE1 TRP H 157 61.949 -4.001 68.691 1.00 49.95 N +ATOM 2841 CE2 TRP H 157 62.759 -5.051 69.035 1.00 49.49 C +ATOM 2842 CE3 TRP H 157 62.895 -6.716 70.789 1.00 47.39 C +ATOM 2843 CZ2 TRP H 157 63.904 -5.551 68.404 1.00 47.80 C +ATOM 2844 CZ3 TRP H 157 64.033 -7.214 70.161 1.00 45.12 C +ATOM 2845 CH2 TRP H 157 64.525 -6.630 68.980 1.00 46.17 C +ATOM 2846 N ASN H 162 58.533 -7.833 73.113 1.00 67.87 N +ATOM 2847 CA ASN H 162 57.920 -8.412 74.303 1.00 69.19 C +ATOM 2848 C ASN H 162 56.407 -8.307 74.154 1.00 71.75 C +ATOM 2849 O ASN H 162 55.681 -8.049 75.116 1.00 72.85 O +ATOM 2850 CB ASN H 162 58.402 -7.684 75.564 1.00 67.63 C +ATOM 2851 CG ASN H 162 59.792 -8.137 76.005 1.00 67.38 C +ATOM 2852 OD1 ASN H 162 60.455 -8.917 75.311 1.00 61.99 O +ATOM 2853 ND2 ASN H 162 60.238 -7.648 77.162 1.00 63.34 N +ATOM 2854 N SER H 163 55.951 -8.503 72.919 1.00 73.18 N +ATOM 2855 CA SER H 163 54.535 -8.454 72.578 1.00 74.19 C +ATOM 2856 C SER H 163 53.910 -7.069 72.719 1.00 73.97 C +ATOM 2857 O SER H 163 52.764 -6.861 72.316 1.00 76.84 O +ATOM 2858 CB SER H 163 53.765 -9.463 73.427 1.00 74.59 C +ATOM 2859 OG SER H 163 54.420 -10.719 73.421 1.00 76.88 O +ATOM 2860 N GLY H 164 54.658 -6.125 73.281 1.00 70.83 N +ATOM 2861 CA GLY H 164 54.138 -4.780 73.445 1.00 68.34 C +ATOM 2862 C GLY H 164 54.685 -4.095 74.677 1.00 66.77 C +ATOM 2863 O GLY H 164 54.793 -2.870 74.723 1.00 63.77 O +ATOM 2864 N SER H 165 55.035 -4.895 75.677 1.00 67.79 N +ATOM 2865 CA SER H 165 55.576 -4.375 76.923 1.00 69.36 C +ATOM 2866 C SER H 165 56.801 -3.513 76.672 1.00 70.45 C +ATOM 2867 O SER H 165 57.223 -2.745 77.535 1.00 69.95 O +ATOM 2868 CB SER H 165 55.933 -5.527 77.857 1.00 69.50 C +ATOM 2869 OG SER H 165 54.761 -6.222 78.246 1.00 72.13 O +ATOM 2870 N LEU H 166 57.375 -3.639 75.485 1.00 72.78 N +ATOM 2871 CA LEU H 166 58.540 -2.841 75.146 1.00 75.94 C +ATOM 2872 C LEU H 166 58.257 -1.987 73.920 1.00 77.95 C +ATOM 2873 O LEU H 166 58.379 -2.446 72.783 1.00 79.39 O +ATOM 2874 CB LEU H 166 59.749 -3.742 74.898 1.00 74.10 C +ATOM 2875 CG LEU H 166 60.719 -3.857 76.077 1.00 72.81 C +ATOM 2876 CD1 LEU H 166 61.919 -4.672 75.651 1.00 72.09 C +ATOM 2877 CD2 LEU H 166 61.152 -2.472 76.549 1.00 70.70 C +ATOM 2878 N SER H 167 57.865 -0.742 74.164 1.00 79.10 N +ATOM 2879 CA SER H 167 57.558 0.188 73.088 1.00 79.84 C +ATOM 2880 C SER H 167 58.296 1.496 73.332 1.00 77.75 C +ATOM 2881 O SER H 167 57.896 2.556 72.847 1.00 78.88 O +ATOM 2882 CB SER H 167 56.046 0.432 73.014 1.00 83.92 C +ATOM 2883 OG SER H 167 55.614 1.346 74.007 1.00 87.89 O +ATOM 2884 N SER H 168 59.380 1.406 74.093 1.00 75.72 N +ATOM 2885 CA SER H 168 60.201 2.567 74.413 1.00 75.57 C +ATOM 2886 C SER H 168 61.592 2.377 73.819 1.00 72.44 C +ATOM 2887 O SER H 168 62.168 1.295 73.913 1.00 75.66 O +ATOM 2888 CB SER H 168 60.306 2.734 75.932 1.00 77.43 C +ATOM 2889 OG SER H 168 61.331 3.650 76.282 1.00 81.60 O +ATOM 2890 N GLY H 169 62.129 3.428 73.207 1.00 67.69 N +ATOM 2891 CA GLY H 169 63.452 3.332 72.615 1.00 59.99 C +ATOM 2892 C GLY H 169 63.490 2.357 71.455 1.00 54.71 C +ATOM 2893 O GLY H 169 64.518 1.742 71.178 1.00 55.64 O +ATOM 2894 N VAL H 171 62.362 2.212 70.772 1.00 48.19 N +ATOM 2895 CA VAL H 171 62.287 1.308 69.642 1.00 42.72 C +ATOM 2896 C VAL H 171 62.407 2.076 68.335 1.00 42.92 C +ATOM 2897 O VAL H 171 61.855 3.163 68.183 1.00 44.50 O +ATOM 2898 CB VAL H 171 60.966 0.529 69.644 1.00 41.49 C +ATOM 2899 CG1 VAL H 171 60.909 -0.397 68.441 1.00 45.30 C +ATOM 2900 CG2 VAL H 171 60.843 -0.274 70.925 1.00 39.82 C +ATOM 2901 N HIS H 172 63.144 1.501 67.396 1.00 44.89 N +ATOM 2902 CA HIS H 172 63.346 2.109 66.091 1.00 43.95 C +ATOM 2903 C HIS H 172 63.182 1.045 65.021 1.00 42.44 C +ATOM 2904 O HIS H 172 64.046 0.182 64.856 1.00 44.67 O +ATOM 2905 CB HIS H 172 64.751 2.706 65.983 1.00 44.05 C +ATOM 2906 CG HIS H 172 64.934 3.962 66.772 1.00 52.26 C +ATOM 2907 ND1 HIS H 172 63.887 4.613 67.388 1.00 59.11 N +ATOM 2908 CD2 HIS H 172 66.042 4.688 67.046 1.00 55.13 C +ATOM 2909 CE1 HIS H 172 64.342 5.687 68.007 1.00 60.49 C +ATOM 2910 NE2 HIS H 172 65.648 5.756 67.816 1.00 58.66 N +ATOM 2911 N THR H 173 62.065 1.088 64.310 1.00 37.47 N +ATOM 2912 CA THR H 173 61.845 0.133 63.239 1.00 32.94 C +ATOM 2913 C THR H 173 62.101 0.892 61.947 1.00 31.57 C +ATOM 2914 O THR H 173 61.443 1.892 61.660 1.00 33.70 O +ATOM 2915 CB THR H 173 60.412 -0.410 63.247 1.00 33.03 C +ATOM 2916 OG1 THR H 173 60.202 -1.180 64.439 1.00 35.13 O +ATOM 2917 CG2 THR H 173 60.175 -1.292 62.033 1.00 29.39 C +ATOM 2918 N PHE H 174 63.075 0.426 61.175 1.00 30.23 N +ATOM 2919 CA PHE H 174 63.428 1.086 59.928 1.00 30.00 C +ATOM 2920 C PHE H 174 62.566 0.691 58.737 1.00 26.72 C +ATOM 2921 O PHE H 174 62.154 -0.460 58.596 1.00 27.64 O +ATOM 2922 CB PHE H 174 64.904 0.835 59.614 1.00 26.75 C +ATOM 2923 CG PHE H 174 65.822 1.383 60.648 1.00 29.47 C +ATOM 2924 CD1 PHE H 174 66.222 2.710 60.598 1.00 32.15 C +ATOM 2925 CD2 PHE H 174 66.232 0.594 61.716 1.00 34.54 C +ATOM 2926 CE1 PHE H 174 67.013 3.251 61.601 1.00 35.83 C +ATOM 2927 CE2 PHE H 174 67.025 1.125 62.726 1.00 36.44 C +ATOM 2928 CZ PHE H 174 67.415 2.457 62.669 1.00 37.53 C +ATOM 2929 N PRO H 175 62.270 1.663 57.868 1.00 25.03 N +ATOM 2930 CA PRO H 175 61.449 1.412 56.679 1.00 25.61 C +ATOM 2931 C PRO H 175 62.005 0.263 55.844 1.00 25.70 C +ATOM 2932 O PRO H 175 63.220 0.130 55.683 1.00 26.79 O +ATOM 2933 CB PRO H 175 61.475 2.743 55.927 1.00 23.80 C +ATOM 2934 CG PRO H 175 62.572 3.558 56.580 1.00 25.27 C +ATOM 2935 CD PRO H 175 62.687 3.070 57.977 1.00 20.81 C +ATOM 2936 N ALA H 176 61.110 -0.574 55.329 1.00 27.66 N +ATOM 2937 CA ALA H 176 61.511 -1.712 54.517 1.00 26.18 C +ATOM 2938 C ALA H 176 62.234 -1.235 53.278 1.00 29.14 C +ATOM 2939 O ALA H 176 62.017 -0.119 52.812 1.00 32.98 O +ATOM 2940 CB ALA H 176 60.293 -2.521 54.118 1.00 25.56 C +ATOM 2941 N VAL H 177 63.100 -2.089 52.747 1.00 31.53 N +ATOM 2942 CA VAL H 177 63.850 -1.771 51.543 1.00 32.15 C +ATOM 2943 C VAL H 177 63.923 -3.029 50.683 1.00 31.06 C +ATOM 2944 O VAL H 177 64.138 -4.126 51.197 1.00 31.22 O +ATOM 2945 CB VAL H 177 65.279 -1.269 51.877 1.00 34.65 C +ATOM 2946 CG1 VAL H 177 65.983 -2.246 52.804 1.00 36.27 C +ATOM 2947 CG2 VAL H 177 66.075 -1.086 50.592 1.00 36.57 C +ATOM 2948 N LEU H 178 63.728 -2.859 49.378 1.00 33.72 N +ATOM 2949 CA LEU H 178 63.745 -3.966 48.429 1.00 37.39 C +ATOM 2950 C LEU H 178 65.125 -4.548 48.158 1.00 43.39 C +ATOM 2951 O LEU H 178 66.071 -3.834 47.828 1.00 47.56 O +ATOM 2952 CB LEU H 178 63.120 -3.526 47.109 1.00 38.10 C +ATOM 2953 CG LEU H 178 62.126 -4.533 46.535 1.00 45.47 C +ATOM 2954 CD1 LEU H 178 60.847 -4.517 47.360 1.00 47.21 C +ATOM 2955 CD2 LEU H 178 61.838 -4.199 45.084 1.00 50.06 C +ATOM 2956 N GLN H 179 65.224 -5.863 48.283 1.00 47.89 N +ATOM 2957 CA GLN H 179 66.478 -6.559 48.061 1.00 52.62 C +ATOM 2958 C GLN H 179 66.184 -7.880 47.351 1.00 54.79 C +ATOM 2959 O GLN H 179 65.845 -8.883 47.986 1.00 53.83 O +ATOM 2960 CB GLN H 179 67.170 -6.788 49.412 1.00 57.73 C +ATOM 2961 CG GLN H 179 68.034 -8.032 49.514 1.00 66.83 C +ATOM 2962 CD GLN H 179 69.088 -7.926 50.605 1.00 69.52 C +ATOM 2963 OE1 GLN H 179 68.787 -8.030 51.799 1.00 70.07 O +ATOM 2964 NE2 GLN H 179 70.335 -7.717 50.195 1.00 71.72 N +ATOM 2965 N SER H 180 66.294 -7.854 46.023 1.00 56.30 N +ATOM 2966 CA SER H 180 66.053 -9.026 45.185 1.00 56.85 C +ATOM 2967 C SER H 180 64.575 -9.387 45.114 1.00 54.33 C +ATOM 2968 O SER H 180 64.215 -10.566 45.171 1.00 52.31 O +ATOM 2969 CB SER H 180 66.851 -10.230 45.703 1.00 61.70 C +ATOM 2970 OG SER H 180 67.696 -10.759 44.694 1.00 65.22 O +ATOM 2971 N ASP H 183 63.730 -8.364 44.996 1.00 52.39 N +ATOM 2972 CA ASP H 183 62.278 -8.534 44.901 1.00 51.12 C +ATOM 2973 C ASP H 183 61.554 -8.821 46.213 1.00 44.00 C +ATOM 2974 O ASP H 183 60.334 -8.935 46.233 1.00 41.02 O +ATOM 2975 CB ASP H 183 61.936 -9.638 43.900 1.00 61.65 C +ATOM 2976 CG ASP H 183 61.982 -9.156 42.469 1.00 71.44 C +ATOM 2977 OD1 ASP H 183 61.100 -8.357 42.083 1.00 74.46 O +ATOM 2978 OD2 ASP H 183 62.905 -9.576 41.734 1.00 79.66 O +ATOM 2979 N LEU H 184 62.299 -8.955 47.303 1.00 40.16 N +ATOM 2980 CA LEU H 184 61.689 -9.213 48.601 1.00 33.65 C +ATOM 2981 C LEU H 184 62.071 -8.075 49.529 1.00 32.28 C +ATOM 2982 O LEU H 184 63.047 -7.369 49.278 1.00 32.55 O +ATOM 2983 CB LEU H 184 62.181 -10.541 49.177 1.00 31.58 C +ATOM 2984 CG LEU H 184 61.910 -11.794 48.344 1.00 28.67 C +ATOM 2985 CD1 LEU H 184 62.332 -13.011 49.147 1.00 29.29 C +ATOM 2986 CD2 LEU H 184 60.431 -11.873 47.969 1.00 23.69 C +ATOM 2987 N TYR H 185 61.309 -7.899 50.600 1.00 27.21 N +ATOM 2988 CA TYR H 185 61.582 -6.827 51.538 1.00 23.78 C +ATOM 2989 C TYR H 185 62.449 -7.284 52.678 1.00 24.03 C +ATOM 2990 O TYR H 185 62.448 -8.456 53.044 1.00 27.73 O +ATOM 2991 CB TYR H 185 60.282 -6.280 52.114 1.00 27.21 C +ATOM 2992 CG TYR H 185 59.478 -5.486 51.128 1.00 32.06 C +ATOM 2993 CD1 TYR H 185 59.784 -4.151 50.866 1.00 33.21 C +ATOM 2994 CD2 TYR H 185 58.433 -6.078 50.425 1.00 35.18 C +ATOM 2995 CE1 TYR H 185 59.073 -3.427 49.924 1.00 34.42 C +ATOM 2996 CE2 TYR H 185 57.714 -5.365 49.480 1.00 37.97 C +ATOM 2997 CZ TYR H 185 58.040 -4.040 49.231 1.00 40.63 C +ATOM 2998 OH TYR H 185 57.344 -3.341 48.271 1.00 45.40 O +ATOM 2999 N THR H 186 63.192 -6.340 53.235 1.00 22.63 N +ATOM 3000 CA THR H 186 64.043 -6.599 54.384 1.00 21.52 C +ATOM 3001 C THR H 186 63.890 -5.381 55.273 1.00 22.33 C +ATOM 3002 O THR H 186 63.825 -4.251 54.793 1.00 18.64 O +ATOM 3003 CB THR H 186 65.523 -6.726 54.015 1.00 21.28 C +ATOM 3004 OG1 THR H 186 65.716 -7.836 53.128 1.00 26.02 O +ATOM 3005 CG2 THR H 186 66.335 -6.943 55.264 1.00 15.04 C +ATOM 3006 N LEU H 187 63.832 -5.606 56.573 1.00 24.23 N +ATOM 3007 CA LEU H 187 63.674 -4.508 57.502 1.00 23.19 C +ATOM 3008 C LEU H 187 64.355 -4.879 58.812 1.00 27.38 C +ATOM 3009 O LEU H 187 64.649 -6.047 59.057 1.00 30.16 O +ATOM 3010 CB LEU H 187 62.181 -4.250 57.696 1.00 25.64 C +ATOM 3011 CG LEU H 187 61.636 -3.767 59.033 1.00 31.43 C +ATOM 3012 CD1 LEU H 187 60.323 -3.030 58.790 1.00 33.36 C +ATOM 3013 CD2 LEU H 187 61.433 -4.949 59.968 1.00 23.60 C +ATOM 3014 N SER H 188 64.628 -3.889 59.650 1.00 27.96 N +ATOM 3015 CA SER H 188 65.274 -4.156 60.920 1.00 29.06 C +ATOM 3016 C SER H 188 64.710 -3.238 61.979 1.00 32.83 C +ATOM 3017 O SER H 188 64.366 -2.091 61.704 1.00 32.64 O +ATOM 3018 CB SER H 188 66.790 -3.956 60.807 1.00 32.87 C +ATOM 3019 OG SER H 188 67.124 -2.583 60.692 1.00 36.27 O +ATOM 3020 N SER H 189 64.609 -3.755 63.195 1.00 35.09 N +ATOM 3021 CA SER H 189 64.092 -2.981 64.304 1.00 37.63 C +ATOM 3022 C SER H 189 65.081 -3.068 65.453 1.00 39.82 C +ATOM 3023 O SER H 189 65.527 -4.155 65.819 1.00 41.90 O +ATOM 3024 CB SER H 189 62.735 -3.531 64.744 1.00 37.37 C +ATOM 3025 OG SER H 189 62.236 -2.812 65.858 1.00 39.10 O +ATOM 3026 N SER H 190 65.438 -1.921 66.010 1.00 39.23 N +ATOM 3027 CA SER H 190 66.366 -1.895 67.126 1.00 40.57 C +ATOM 3028 C SER H 190 65.590 -1.548 68.388 1.00 42.19 C +ATOM 3029 O SER H 190 64.513 -0.956 68.317 1.00 41.91 O +ATOM 3030 CB SER H 190 67.458 -0.855 66.881 1.00 39.71 C +ATOM 3031 OG SER H 190 66.951 0.456 67.050 1.00 45.91 O +ATOM 3032 N VAL H 191 66.128 -1.935 69.540 1.00 45.60 N +ATOM 3033 CA VAL H 191 65.486 -1.643 70.817 1.00 50.09 C +ATOM 3034 C VAL H 191 66.536 -1.307 71.866 1.00 51.07 C +ATOM 3035 O VAL H 191 67.501 -2.042 72.058 1.00 51.45 O +ATOM 3036 CB VAL H 191 64.622 -2.830 71.311 1.00 50.70 C +ATOM 3037 CG1 VAL H 191 65.504 -3.987 71.734 1.00 51.19 C +ATOM 3038 CG2 VAL H 191 63.737 -2.379 72.462 1.00 49.52 C +ATOM 3039 N THR H 192 66.342 -0.179 72.534 1.00 54.53 N +ATOM 3040 CA THR H 192 67.267 0.283 73.555 1.00 57.31 C +ATOM 3041 C THR H 192 66.690 0.090 74.954 1.00 60.50 C +ATOM 3042 O THR H 192 65.551 0.476 75.226 1.00 60.07 O +ATOM 3043 CB THR H 192 67.594 1.773 73.345 1.00 57.44 C +ATOM 3044 OG1 THR H 192 68.449 1.914 72.204 1.00 58.30 O +ATOM 3045 CG2 THR H 192 68.278 2.356 74.572 1.00 59.75 C +ATOM 3046 N VAL H 193 67.484 -0.509 75.836 1.00 64.09 N +ATOM 3047 CA VAL H 193 67.064 -0.751 77.211 1.00 67.07 C +ATOM 3048 C VAL H 193 68.229 -0.601 78.186 1.00 73.08 C +ATOM 3049 O VAL H 193 69.355 -1.009 77.891 1.00 75.65 O +ATOM 3050 CB VAL H 193 66.480 -2.165 77.377 1.00 62.00 C +ATOM 3051 CG1 VAL H 193 65.180 -2.285 76.599 1.00 58.65 C +ATOM 3052 CG2 VAL H 193 67.486 -3.196 76.908 1.00 58.92 C +ATOM 3053 N PRO H 194 67.972 -0.002 79.361 1.00 78.07 N +ATOM 3054 CA PRO H 194 68.999 0.202 80.390 1.00 79.40 C +ATOM 3055 C PRO H 194 69.802 -1.067 80.676 1.00 80.28 C +ATOM 3056 O PRO H 194 69.236 -2.151 80.849 1.00 77.33 O +ATOM 3057 CB PRO H 194 68.197 0.663 81.604 1.00 80.06 C +ATOM 3058 CG PRO H 194 66.998 1.327 81.015 1.00 78.42 C +ATOM 3059 CD PRO H 194 66.666 0.543 79.775 1.00 78.65 C +ATOM 3060 N SER H 195 71.123 -0.917 80.730 1.00 82.19 N +ATOM 3061 CA SER H 195 72.021 -2.041 80.974 1.00 85.98 C +ATOM 3062 C SER H 195 71.605 -2.917 82.153 1.00 86.70 C +ATOM 3063 O SER H 195 72.006 -4.075 82.236 1.00 87.73 O +ATOM 3064 CB SER H 195 73.457 -1.534 81.190 1.00 85.76 C +ATOM 3065 OG SER H 195 73.509 -0.507 82.168 1.00 87.29 O +ATOM 3066 N SER H 196 70.786 -2.375 83.048 1.00 86.81 N +ATOM 3067 CA SER H 196 70.351 -3.113 84.229 1.00 87.06 C +ATOM 3068 C SER H 196 69.330 -4.232 84.011 1.00 87.76 C +ATOM 3069 O SER H 196 69.263 -5.168 84.805 1.00 88.34 O +ATOM 3070 CB SER H 196 69.810 -2.131 85.274 1.00 87.25 C +ATOM 3071 OG SER H 196 68.545 -1.616 84.897 1.00 87.59 O +ATOM 3072 N THR H 198 68.548 -4.155 82.938 1.00 88.76 N +ATOM 3073 CA THR H 198 67.517 -5.164 82.682 1.00 89.60 C +ATOM 3074 C THR H 198 67.899 -6.329 81.771 1.00 87.51 C +ATOM 3075 O THR H 198 67.144 -7.298 81.648 1.00 84.75 O +ATOM 3076 CB THR H 198 66.251 -4.508 82.104 1.00 92.97 C +ATOM 3077 OG1 THR H 198 66.607 -3.670 80.996 1.00 94.04 O +ATOM 3078 CG2 THR H 198 65.560 -3.667 83.169 1.00 95.96 C +ATOM 3079 N TRP H 199 69.058 -6.233 81.128 1.00 85.82 N +ATOM 3080 CA TRP H 199 69.523 -7.291 80.235 1.00 83.93 C +ATOM 3081 C TRP H 199 70.983 -7.627 80.534 1.00 84.68 C +ATOM 3082 O TRP H 199 71.770 -6.745 80.883 1.00 85.10 O +ATOM 3083 CB TRP H 199 69.380 -6.854 78.769 1.00 79.45 C +ATOM 3084 CG TRP H 199 69.357 -8.005 77.785 1.00 74.49 C +ATOM 3085 CD1 TRP H 199 68.319 -8.867 77.549 1.00 72.36 C +ATOM 3086 CD2 TRP H 199 70.432 -8.434 76.935 1.00 69.80 C +ATOM 3087 NE1 TRP H 199 68.682 -9.805 76.607 1.00 68.95 N +ATOM 3088 CE2 TRP H 199 69.972 -9.564 76.214 1.00 67.03 C +ATOM 3089 CE3 TRP H 199 71.738 -7.976 76.712 1.00 66.80 C +ATOM 3090 CZ2 TRP H 199 70.773 -10.241 75.288 1.00 64.72 C +ATOM 3091 CZ3 TRP H 199 72.535 -8.651 75.789 1.00 65.99 C +ATOM 3092 CH2 TRP H 199 72.047 -9.772 75.090 1.00 65.11 C +ATOM 3093 N PRO H 200 71.365 -8.912 80.405 1.00 84.41 N +ATOM 3094 CA PRO H 200 70.514 -10.041 80.004 1.00 83.26 C +ATOM 3095 C PRO H 200 69.589 -10.518 81.119 1.00 82.61 C +ATOM 3096 O PRO H 200 69.025 -11.615 81.048 1.00 81.82 O +ATOM 3097 CB PRO H 200 71.515 -11.126 79.582 1.00 84.69 C +ATOM 3098 CG PRO H 200 72.895 -10.490 79.690 1.00 84.07 C +ATOM 3099 CD PRO H 200 72.752 -9.342 80.638 1.00 84.54 C +ATOM 3100 N SER H 202 69.445 -9.685 82.146 1.00 81.80 N +ATOM 3101 CA SER H 202 68.590 -9.991 83.283 1.00 82.86 C +ATOM 3102 C SER H 202 67.282 -10.607 82.798 1.00 85.70 C +ATOM 3103 O SER H 202 67.115 -11.830 82.808 1.00 84.92 O +ATOM 3104 CB SER H 202 68.298 -8.714 84.072 1.00 79.96 C +ATOM 3105 OG SER H 202 68.641 -8.869 85.435 1.00 77.23 O +ATOM 3106 N GLU H 203 66.362 -9.751 82.366 1.00 88.09 N +ATOM 3107 CA GLU H 203 65.067 -10.198 81.871 1.00 90.27 C +ATOM 3108 C GLU H 203 65.172 -10.541 80.389 1.00 89.91 C +ATOM 3109 O GLU H 203 65.948 -9.922 79.663 1.00 91.03 O +ATOM 3110 CB GLU H 203 64.024 -9.100 82.081 1.00 93.57 C +ATOM 3111 CG GLU H 203 64.043 -8.500 83.480 1.00 97.31 C +ATOM 3112 CD GLU H 203 63.511 -7.079 83.518 1.00 99.00 C +ATOM 3113 OE1 GLU H 203 62.989 -6.609 82.483 1.00 99.00 O +ATOM 3114 OE2 GLU H 203 63.614 -6.432 84.586 1.00 99.00 O +ATOM 3115 N THR H 204 64.393 -11.528 79.947 1.00 86.81 N +ATOM 3116 CA THR H 204 64.413 -11.950 78.548 1.00 82.94 C +ATOM 3117 C THR H 204 63.682 -10.967 77.631 1.00 80.30 C +ATOM 3118 O THR H 204 62.654 -10.394 78.002 1.00 79.70 O +ATOM 3119 CB THR H 204 63.788 -13.357 78.372 1.00 82.90 C +ATOM 3120 OG1 THR H 204 62.424 -13.342 78.812 1.00 81.17 O +ATOM 3121 CG2 THR H 204 64.570 -14.390 79.173 1.00 84.14 C +ATOM 3122 N VAL H 205 64.229 -10.781 76.430 1.00 75.15 N +ATOM 3123 CA VAL H 205 63.662 -9.873 75.438 1.00 67.35 C +ATOM 3124 C VAL H 205 63.385 -10.603 74.133 1.00 62.77 C +ATOM 3125 O VAL H 205 64.285 -11.203 73.549 1.00 60.71 O +ATOM 3126 CB VAL H 205 64.627 -8.716 75.134 1.00 66.93 C +ATOM 3127 CG1 VAL H 205 64.205 -8.014 73.863 1.00 69.29 C +ATOM 3128 CG2 VAL H 205 64.651 -7.742 76.292 1.00 68.11 C +ATOM 3129 N THR H 206 62.140 -10.543 73.674 1.00 60.31 N +ATOM 3130 CA THR H 206 61.759 -11.199 72.427 1.00 59.98 C +ATOM 3131 C THR H 206 61.158 -10.194 71.458 1.00 58.85 C +ATOM 3132 O THR H 206 60.520 -9.229 71.874 1.00 62.36 O +ATOM 3133 CB THR H 206 60.709 -12.302 72.662 1.00 61.27 C +ATOM 3134 OG1 THR H 206 61.173 -13.199 73.677 1.00 65.93 O +ATOM 3135 CG2 THR H 206 60.459 -13.082 71.377 1.00 61.08 C +ATOM 3136 N CYS H 208 61.367 -10.415 70.165 1.00 54.76 N +ATOM 3137 CA CYS H 208 60.806 -9.525 69.160 1.00 50.77 C +ATOM 3138 C CYS H 208 59.741 -10.315 68.400 1.00 49.97 C +ATOM 3139 O CYS H 208 59.984 -11.441 67.968 1.00 49.06 O +ATOM 3140 CB CYS H 208 61.919 -8.989 68.235 1.00 50.44 C +ATOM 3141 SG CYS H 208 62.227 -9.844 66.654 1.00 47.39 S +ATOM 3142 N ASN H 209 58.547 -9.737 68.276 1.00 49.10 N +ATOM 3143 CA ASN H 209 57.440 -10.405 67.595 1.00 47.35 C +ATOM 3144 C ASN H 209 57.115 -9.797 66.241 1.00 45.70 C +ATOM 3145 O ASN H 209 56.678 -8.650 66.147 1.00 43.05 O +ATOM 3146 CB ASN H 209 56.175 -10.381 68.464 1.00 48.00 C +ATOM 3147 CG ASN H 209 56.460 -10.035 69.919 1.00 46.27 C +ATOM 3148 OD1 ASN H 209 56.487 -8.861 70.299 1.00 44.23 O +ATOM 3149 ND2 ASN H 209 56.664 -11.060 70.741 1.00 44.20 N +ATOM 3150 N VAL H 210 57.324 -10.586 65.194 1.00 44.72 N +ATOM 3151 CA VAL H 210 57.048 -10.149 63.834 1.00 43.85 C +ATOM 3152 C VAL H 210 55.784 -10.833 63.346 1.00 43.23 C +ATOM 3153 O VAL H 210 55.557 -12.003 63.639 1.00 44.90 O +ATOM 3154 CB VAL H 210 58.198 -10.518 62.875 1.00 39.72 C +ATOM 3155 CG1 VAL H 210 57.974 -9.870 61.520 1.00 35.99 C +ATOM 3156 CG2 VAL H 210 59.522 -10.081 63.464 1.00 38.77 C +ATOM 3157 N ALA H 211 54.963 -10.097 62.603 1.00 43.18 N +ATOM 3158 CA ALA H 211 53.725 -10.642 62.062 1.00 38.20 C +ATOM 3159 C ALA H 211 53.581 -10.225 60.601 1.00 37.31 C +ATOM 3160 O ALA H 211 53.679 -9.044 60.268 1.00 37.62 O +ATOM 3161 CB ALA H 211 52.532 -10.149 62.876 1.00 34.11 C +ATOM 3162 N HIS H 212 53.363 -11.205 59.731 1.00 35.94 N +ATOM 3163 CA HIS H 212 53.202 -10.939 58.312 1.00 32.31 C +ATOM 3164 C HIS H 212 51.804 -11.346 57.868 1.00 37.71 C +ATOM 3165 O HIS H 212 51.596 -12.463 57.400 1.00 38.02 O +ATOM 3166 CB HIS H 212 54.236 -11.714 57.510 1.00 28.07 C +ATOM 3167 CG HIS H 212 54.307 -11.307 56.075 1.00 22.08 C +ATOM 3168 ND1 HIS H 212 54.322 -12.219 55.043 1.00 20.90 N +ATOM 3169 CD2 HIS H 212 54.354 -10.084 55.498 1.00 18.61 C +ATOM 3170 CE1 HIS H 212 54.374 -11.576 53.891 1.00 20.98 C +ATOM 3171 NE2 HIS H 212 54.394 -10.279 54.138 1.00 22.70 N +ATOM 3172 N PRO H 213 50.828 -10.429 58.002 1.00 41.56 N +ATOM 3173 CA PRO H 213 49.429 -10.659 57.629 1.00 41.79 C +ATOM 3174 C PRO H 213 49.254 -11.454 56.341 1.00 43.24 C +ATOM 3175 O PRO H 213 48.608 -12.500 56.330 1.00 44.35 O +ATOM 3176 CB PRO H 213 48.857 -9.250 57.511 1.00 42.22 C +ATOM 3177 CG PRO H 213 49.659 -8.451 58.477 1.00 41.62 C +ATOM 3178 CD PRO H 213 51.035 -9.063 58.522 1.00 40.86 C +ATOM 3179 N ALA H 214 49.834 -10.953 55.258 1.00 45.01 N +ATOM 3180 CA ALA H 214 49.728 -11.613 53.964 1.00 45.25 C +ATOM 3181 C ALA H 214 50.001 -13.117 54.041 1.00 47.06 C +ATOM 3182 O ALA H 214 49.368 -13.904 53.331 1.00 45.05 O +ATOM 3183 CB ALA H 214 50.679 -10.960 52.975 1.00 42.63 C +ATOM 3184 N SER H 215 50.941 -13.515 54.895 1.00 47.26 N +ATOM 3185 CA SER H 215 51.274 -14.929 55.039 1.00 49.30 C +ATOM 3186 C SER H 215 50.690 -15.529 56.321 1.00 50.18 C +ATOM 3187 O SER H 215 50.896 -16.706 56.615 1.00 52.15 O +ATOM 3188 CB SER H 215 52.796 -15.123 55.004 1.00 44.89 C +ATOM 3189 OG SER H 215 53.432 -14.476 56.092 1.00 50.08 O +ATOM 3190 N SER H 216 49.954 -14.715 57.071 1.00 50.29 N +ATOM 3191 CA SER H 216 49.331 -15.151 58.318 1.00 53.71 C +ATOM 3192 C SER H 216 50.317 -15.823 59.260 1.00 53.25 C +ATOM 3193 O SER H 216 49.948 -16.725 60.015 1.00 55.19 O +ATOM 3194 CB SER H 216 48.173 -16.108 58.029 1.00 55.02 C +ATOM 3195 OG SER H 216 46.936 -15.422 58.086 1.00 60.06 O +ATOM 3196 N THR H 217 51.570 -15.383 59.207 1.00 51.53 N +ATOM 3197 CA THR H 217 52.610 -15.928 60.068 1.00 48.84 C +ATOM 3198 C THR H 217 53.004 -14.908 61.124 1.00 48.69 C +ATOM 3199 O THR H 217 52.999 -13.700 60.882 1.00 45.79 O +ATOM 3200 CB THR H 217 53.895 -16.290 59.289 1.00 46.44 C +ATOM 3201 OG1 THR H 217 54.441 -15.108 58.694 1.00 49.58 O +ATOM 3202 CG2 THR H 217 53.606 -17.312 58.211 1.00 45.02 C +ATOM 3203 N LYS H 218 53.330 -15.409 62.306 1.00 46.99 N +ATOM 3204 CA LYS H 218 53.768 -14.560 63.394 1.00 48.95 C +ATOM 3205 C LYS H 218 54.894 -15.331 64.051 1.00 52.18 C +ATOM 3206 O LYS H 218 54.702 -16.460 64.503 1.00 53.90 O +ATOM 3207 CB LYS H 218 52.641 -14.311 64.398 1.00 46.38 C +ATOM 3208 CG LYS H 218 53.108 -14.313 65.843 1.00 43.87 C +ATOM 3209 CD LYS H 218 52.689 -13.063 66.576 1.00 45.34 C +ATOM 3210 CE LYS H 218 52.807 -13.278 68.078 1.00 49.02 C +ATOM 3211 NZ LYS H 218 53.019 -12.002 68.815 1.00 50.26 N +ATOM 3212 N VAL H 219 56.073 -14.722 64.079 1.00 55.17 N +ATOM 3213 CA VAL H 219 57.242 -15.346 64.670 1.00 53.36 C +ATOM 3214 C VAL H 219 57.664 -14.615 65.932 1.00 53.43 C +ATOM 3215 O VAL H 219 57.344 -13.443 66.132 1.00 53.68 O +ATOM 3216 CB VAL H 219 58.433 -15.343 63.691 1.00 56.63 C +ATOM 3217 CG1 VAL H 219 59.493 -16.322 64.165 1.00 58.54 C +ATOM 3218 CG2 VAL H 219 57.960 -15.700 62.287 1.00 59.50 C +ATOM 3219 N ASP H 220 58.376 -15.329 66.789 1.00 55.63 N +ATOM 3220 CA ASP H 220 58.879 -14.769 68.029 1.00 57.44 C +ATOM 3221 C ASP H 220 60.331 -15.212 68.110 1.00 58.30 C +ATOM 3222 O ASP H 220 60.650 -16.380 67.881 1.00 60.48 O +ATOM 3223 CB ASP H 220 58.093 -15.307 69.228 1.00 60.21 C +ATOM 3224 CG ASP H 220 56.774 -14.579 69.440 1.00 63.80 C +ATOM 3225 OD1 ASP H 220 56.794 -13.349 69.655 1.00 62.13 O +ATOM 3226 OD2 ASP H 220 55.716 -15.242 69.395 1.00 68.20 O +ATOM 3227 N LYS H 221 61.216 -14.275 68.413 1.00 56.98 N +ATOM 3228 CA LYS H 221 62.624 -14.595 68.504 1.00 52.24 C +ATOM 3229 C LYS H 221 63.213 -13.981 69.752 1.00 52.49 C +ATOM 3230 O LYS H 221 63.124 -12.774 69.972 1.00 47.15 O +ATOM 3231 CB LYS H 221 63.366 -14.082 67.270 1.00 51.53 C +ATOM 3232 CG LYS H 221 64.157 -15.147 66.536 1.00 51.24 C +ATOM 3233 CD LYS H 221 63.299 -15.839 65.494 1.00 53.83 C +ATOM 3234 CE LYS H 221 63.665 -17.309 65.366 1.00 56.99 C +ATOM 3235 NZ LYS H 221 62.571 -18.116 64.751 1.00 56.14 N +ATOM 3236 N LYS H 222 63.805 -14.835 70.574 1.00 57.10 N +ATOM 3237 CA LYS H 222 64.435 -14.400 71.806 1.00 64.59 C +ATOM 3238 C LYS H 222 65.892 -14.092 71.481 1.00 66.06 C +ATOM 3239 O LYS H 222 66.470 -14.697 70.580 1.00 64.87 O +ATOM 3240 CB LYS H 222 64.347 -15.513 72.854 1.00 69.49 C +ATOM 3241 CG LYS H 222 63.315 -16.592 72.524 1.00 76.75 C +ATOM 3242 CD LYS H 222 63.546 -17.866 73.335 1.00 84.22 C +ATOM 3243 CE LYS H 222 63.036 -17.729 74.770 1.00 87.80 C +ATOM 3244 NZ LYS H 222 62.042 -18.784 75.135 1.00 89.10 N +ATOM 3245 N ILE H 223 66.481 -13.145 72.201 1.00 68.73 N +ATOM 3246 CA ILE H 223 67.873 -12.778 71.968 1.00 74.04 C +ATOM 3247 C ILE H 223 68.738 -13.261 73.133 1.00 80.06 C +ATOM 3248 O ILE H 223 68.376 -13.070 74.296 1.00 79.67 O +ATOM 3249 CB ILE H 223 68.027 -11.245 71.812 1.00 71.78 C +ATOM 3250 CG1 ILE H 223 66.730 -10.637 71.258 1.00 66.87 C +ATOM 3251 CG2 ILE H 223 69.220 -10.934 70.910 1.00 71.27 C +ATOM 3252 CD1 ILE H 223 66.624 -10.631 69.739 1.00 59.57 C +ATOM 3253 N VAL H 226 69.879 -13.877 72.819 1.00 86.06 N +ATOM 3254 CA VAL H 226 70.781 -14.409 73.848 1.00 92.17 C +ATOM 3255 C VAL H 226 72.168 -13.758 73.920 1.00 94.43 C +ATOM 3256 O VAL H 226 72.712 -13.664 75.044 1.00 93.40 O +ATOM 3257 CB VAL H 226 70.969 -15.940 73.673 1.00 93.55 C +ATOM 3258 CG1 VAL H 226 69.727 -16.543 73.022 1.00 92.82 C +ATOM 3259 CG2 VAL H 226 72.217 -16.233 72.832 1.00 95.33 C +ATOM 3260 OXT VAL H 226 72.701 -13.364 72.860 1.00 98.06 O +TER 3261 VAL H 226 +HETATM 3262 O HOH L 213 51.954 32.327 47.494 1.00 8.15 O +HETATM 3263 O HOH L 214 58.908 26.230 48.680 1.00 9.92 O +HETATM 3264 O HOH L 215 53.144 23.819 31.534 1.00 9.91 O +HETATM 3265 O HOH L 216 55.208 18.210 38.102 1.00 18.98 O +HETATM 3266 O HOH L 217 57.052 17.101 42.753 1.00 19.34 O +HETATM 3267 O HOH L 218 52.759 17.473 36.934 1.00 19.06 O +HETATM 3268 O HOH L 219 57.736 21.678 38.103 1.00 19.76 O +HETATM 3269 O HOH L 220 48.509 15.101 54.318 1.00 21.81 O +HETATM 3270 O HOH L 221 62.798 21.240 45.633 1.00 21.41 O +HETATM 3271 O HOH L 222 61.769 22.361 43.016 1.00 21.73 O +HETATM 3272 O HOH L 223 61.560 27.345 37.483 1.00 21.65 O +HETATM 3273 O HOH L 224 48.649 17.720 55.565 1.00 23.13 O +HETATM 3274 O HOH L 225 50.315 37.040 37.886 1.00 22.99 O +HETATM 3275 O HOH L 226 42.650 33.879 53.810 1.00 23.56 O +HETATM 3276 O HOH L 227 52.198 29.912 66.355 1.00 24.88 O +HETATM 3277 O HOH L 228 46.936 35.118 56.244 1.00 24.58 O +HETATM 3278 O HOH L 229 50.014 22.813 60.137 1.00 25.49 O +HETATM 3279 O HOH L 230 51.140 35.238 32.501 1.00 26.36 O +HETATM 3280 O HOH L 231 52.295 34.298 57.978 1.00 28.59 O +HETATM 3281 O HOH L 232 40.565 30.791 39.079 1.00 28.22 O +HETATM 3282 O HOH L 233 58.771 17.128 57.672 1.00 29.85 O +HETATM 3283 O HOH L 234 64.522 4.469 54.116 1.00 31.36 O +HETATM 3284 O HOH L 235 57.490 15.505 55.467 1.00 33.76 O +HETATM 3285 O HOH L 236 51.756 8.426 59.263 1.00 34.21 O +HETATM 3286 O HOH L 237 52.453 25.355 25.677 1.00 33.53 O +HETATM 3287 O HOH L 238 58.732 27.899 30.616 1.00 34.53 O +HETATM 3288 O HOH L 239 41.437 22.887 32.388 1.00 34.43 O +HETATM 3289 O HOH L 240 49.526 31.476 66.285 1.00 35.13 O +HETATM 3290 O HOH L 241 52.886 23.590 27.915 1.00 35.73 O +HETATM 3291 O HOH L 242 62.964 31.547 56.664 1.00 36.83 O +HETATM 3292 O HOH L 243 60.210 24.579 30.459 1.00 36.91 O +HETATM 3293 O HOH L 244 54.616 35.514 52.428 1.00 37.98 O +HETATM 3294 O HOH L 245 51.575 29.918 29.329 1.00 39.61 O +HETATM 3295 O HOH L 246 57.814 38.170 39.027 1.00 40.31 O +HETATM 3296 O HOH L 247 58.643 19.051 40.175 1.00 40.39 O +HETATM 3297 O HOH L 248 48.579 19.134 65.861 1.00 40.13 O +HETATM 3298 O HOH L 249 44.044 20.956 40.281 1.00 39.85 O +HETATM 3299 O HOH L 250 43.520 34.043 34.528 1.00 40.22 O +HETATM 3300 O HOH L 251 59.526 15.352 50.534 1.00 40.50 O +HETATM 3301 O HOH L 252 48.015 34.970 52.893 1.00 41.15 O +HETATM 3302 O HOH L 253 40.925 33.160 56.271 1.00 41.70 O +HETATM 3303 O HOH L 254 62.193 31.881 36.639 1.00 42.83 O +HETATM 3304 O HOH L 255 61.818 18.176 48.826 1.00 43.86 O +HETATM 3305 O HOH L 256 61.153 21.307 39.531 1.00 45.12 O +HETATM 3306 O HOH L 257 62.492 30.718 30.916 1.00 45.10 O +HETATM 3307 O HOH L 258 58.339 18.170 27.626 1.00 45.09 O +HETATM 3308 O HOH L 259 48.472 30.054 64.236 1.00 45.30 O +HETATM 3309 O HOH L 260 50.192 35.170 59.035 1.00 46.54 O +HETATM 3310 O HOH L 261 57.521 11.861 49.566 1.00 47.19 O +HETATM 3311 O HOH L 262 75.825 -12.772 67.118 1.00 47.92 O +HETATM 3312 O HOH L 263 51.729 16.670 63.343 1.00 48.12 O +HETATM 3313 O HOH L 264 69.507 -1.645 56.642 1.00 49.39 O +HETATM 3314 O HOH L 265 44.952 29.879 64.014 1.00 49.94 O +HETATM 3315 O HOH L 266 55.954 14.032 50.713 1.00 53.45 O +HETATM 3316 O HOH H 227 42.029 -0.294 42.906 1.00 6.09 O +HETATM 3317 O HOH H 228 52.619 5.137 36.114 1.00 8.09 O +HETATM 3318 O HOH H 229 42.603 2.729 48.318 1.00 12.81 O +HETATM 3319 O HOH H 230 39.455 -2.256 31.749 1.00 14.31 O +HETATM 3320 O HOH H 231 43.412 27.453 39.355 1.00 15.77 O +HETATM 3321 O HOH H 232 40.037 4.480 31.971 1.00 17.99 O +HETATM 3322 O HOH H 233 40.857 -2.925 39.581 1.00 20.32 O +HETATM 3323 O HOH H 234 48.429 8.447 50.755 1.00 21.50 O +HETATM 3324 O HOH H 235 49.751 -2.018 47.060 1.00 21.85 O +HETATM 3325 O HOH H 236 35.492 3.417 31.633 1.00 27.50 O +HETATM 3326 O HOH H 237 42.435 -4.036 33.487 1.00 26.48 O +HETATM 3327 O HOH H 238 41.995 9.038 26.002 1.00 28.39 O +HETATM 3328 O HOH H 239 45.935 2.658 29.289 1.00 29.20 O +HETATM 3329 O HOH H 240 58.984 -6.884 44.511 1.00 29.09 O +HETATM 3330 O HOH H 241 65.584 -1.752 56.532 1.00 30.01 O +HETATM 3331 O HOH H 242 55.588 -4.905 31.136 1.00 30.65 O +HETATM 3332 O HOH H 243 34.761 9.087 29.495 1.00 31.01 O +HETATM 3333 O HOH H 244 41.064 20.390 48.454 1.00 32.70 O +HETATM 3334 O HOH H 245 74.355 -10.542 66.588 1.00 35.29 O +HETATM 3335 O HOH H 246 51.575 -11.696 46.953 1.00 35.14 O +HETATM 3336 O HOH H 247 35.859 3.309 28.492 1.00 35.60 O +HETATM 3337 O HOH H 248 37.661 14.070 49.830 1.00 36.34 O +HETATM 3338 O HOH H 249 46.819 7.789 26.662 1.00 36.30 O +HETATM 3339 O HOH H 250 56.583 -2.498 57.677 1.00 37.89 O +HETATM 3340 O HOH H 251 54.285 -4.817 49.106 1.00 37.91 O +HETATM 3341 O HOH H 252 45.062 5.504 51.092 1.00 38.98 O +HETATM 3342 O HOH H 253 55.732 9.450 49.445 1.00 39.23 O +HETATM 3343 O HOH H 254 40.142 18.901 29.076 1.00 39.73 O +HETATM 3344 O HOH H 255 40.357 -3.577 43.543 1.00 39.97 O +HETATM 3345 O HOH H 256 37.716 -1.792 45.480 1.00 41.21 O +HETATM 3346 O HOH H 257 37.496 26.444 32.944 1.00 41.62 O +HETATM 3347 O HOH H 258 65.906 -13.271 76.037 1.00 42.31 O +HETATM 3348 O HOH H 259 36.777 29.778 45.878 1.00 43.24 O +HETATM 3349 O HOH H 260 57.026 -18.376 48.894 1.00 45.41 O +HETATM 3350 O HOH H 261 35.383 3.948 43.604 1.00 47.13 O +HETATM 3351 O HOH H 262 31.648 11.312 31.584 1.00 50.60 O +HETATM 3352 O HOH H 263 45.225 -3.286 28.782 1.00 54.30 O +CONECT 165 653 +CONECT 653 165 +CONECT 994 1491 +CONECT 1491 994 +CONECT 1791 2372 +CONECT 2372 1791 +CONECT 2729 3141 +CONECT 3141 2729 +MASTER 272 0 0 2 36 0 0 6 3350 2 8 34 +END diff --git a/Biopool/Tests/data/25C8_H_input.pdb b/Biopool/Tests/data/25C8_H_input.pdb new file mode 100644 index 0000000..f4f0a47 --- /dev/null +++ b/Biopool/Tests/data/25C8_H_input.pdb @@ -0,0 +1,2369 @@ +HEADER CATALYTIC ANTIBODY 18-MAR-98 25C8 +TITLE CATALYTIC ANTIBODY 5C8, FAB-HAPTEN COMPLEX +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: IGG 5C8; +COMPND 3 CHAIN: L; +COMPND 4 FRAGMENT: FAB; +COMPND 5 MOL_ID: 2; +COMPND 6 MOLECULE: IGG 5C8; +COMPND 7 CHAIN: H; +COMPND 8 FRAGMENT: FAB +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: MUS MUSCULUS; +SOURCE 3 ORGANISM_COMMON: HOUSE MOUSE; +SOURCE 4 ORGANISM_TAXID: 10090; +SOURCE 5 MOL_ID: 2; +SOURCE 6 ORGANISM_SCIENTIFIC: MUS MUSCULUS; +SOURCE 7 ORGANISM_COMMON: HOUSE MOUSE; +SOURCE 8 ORGANISM_TAXID: 10090 +KEYWDS CATALYTIC ANTIBODY, FAB, RING CLOSURE REACTION +EXPDTA X-RAY DIFFRACTION +AUTHOR K.GRUBER,I.A.WILSON +REVDAT 3 24-FEB-09 25C8 1 VERSN +REVDAT 2 09-JUL-99 25C8 1 JRNL +REVDAT 1 23-MAR-99 25C8 0 +JRNL AUTH K.GRUBER,B.ZHOU,K.N.HOUK,R.A.LERNER,C.G.SHEVLIN, +JRNL AUTH 2 I.A.WILSON +JRNL TITL STRUCTURAL BASIS FOR ANTIBODY CATALYSIS OF A +JRNL TITL 2 DISFAVORED RING CLOSURE REACTION. +JRNL REF BIOCHEMISTRY V. 38 7062 1999 +JRNL REFN ISSN 0006-2960 +JRNL PMID 10353817 +JRNL DOI 10.1021/BI990210S +REMARK 1 +REMARK 1 REFERENCE 1 +REMARK 1 AUTH K.GRUBER,A.HEINE,E.A.STURA,C.G.SHEVLIN,I.A.WILSON +REMARK 1 TITL LIGAND-INDUCED CONFORMATIONAL CHANGES IN A +REMARK 1 TITL 2 CATALYTIC ANTIBODY: COMPARISON OF THE BOUND AND +REMARK 1 TITL 3 UNBOUND STRUCTURE OF FAB 5C8 +REMARK 1 REF TO BE PUBLISHED +REMARK 1 REFN +REMARK 2 +REMARK 2 RESOLUTION. 2.00 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : X-PLOR 3.851 +REMARK 3 AUTHORS : BRUNGER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.00 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 25.00 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL +REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 96.7 +REMARK 3 NUMBER OF REFLECTIONS : 33080 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : THROUGHOUT +REMARK 3 FREE R VALUE TEST SET SELECTION : RANDOM +REMARK 3 R VALUE (WORKING SET) : 0.229 +REMARK 3 FREE R VALUE : 0.292 +REMARK 3 FREE R VALUE TEST SET SIZE (%) : 7.600 +REMARK 3 FREE R VALUE TEST SET COUNT : 2505 +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : 0.006 +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : 20 +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : 2.00 +REMARK 3 BIN RESOLUTION RANGE LOW (A) : 2.03 +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : 93.40 +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : 1473 +REMARK 3 BIN R VALUE (WORKING SET) : 0.3500 +REMARK 3 BIN FREE R VALUE : 0.3710 +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : 7.90 +REMARK 3 BIN FREE R VALUE TEST SET COUNT : 117 +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : 0.037 +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 3251 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 24 +REMARK 3 SOLVENT ATOMS : 232 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : 29.20 +REMARK 3 MEAN B VALUE (OVERALL, A**2) : 39.60 +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : 3.72000 +REMARK 3 B22 (A**2) : 7.70000 +REMARK 3 B33 (A**2) : 10.93000 +REMARK 3 B12 (A**2) : 0.00000 +REMARK 3 B13 (A**2) : 5.84000 +REMARK 3 B23 (A**2) : 0.00000 +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : 0.29 +REMARK 3 ESD FROM SIGMAA (A) : 0.33 +REMARK 3 LOW RESOLUTION CUTOFF (A) : 5.00 +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : 0.36 +REMARK 3 ESD FROM C-V SIGMAA (A) : 0.32 +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.007 +REMARK 3 BOND ANGLES (DEGREES) : 1.40 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 30.00 +REMARK 3 IMPROPER ANGLES (DEGREES) : 0.70 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : RESTRAINED +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA +REMARK 3 MAIN-CHAIN BOND (A**2) : 2.530 ; 1.500 +REMARK 3 MAIN-CHAIN ANGLE (A**2) : 4.050 ; 2.000 +REMARK 3 SIDE-CHAIN BOND (A**2) : 3.290 ; 2.000 +REMARK 3 SIDE-CHAIN ANGLE (A**2) : 4.690 ; 2.500 +REMARK 3 +REMARK 3 NCS MODEL : NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT +REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL +REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 PARAMETER FILE 1 : PARHCSDX.PRO +REMARK 3 PARAMETER FILE 2 : NME.PAR +REMARK 3 PARAMETER FILE 3 : NULL +REMARK 3 PARAMETER FILE 4 : NULL +REMARK 3 TOPOLOGY FILE 1 : TOPHCSDX.PRO +REMARK 3 TOPOLOGY FILE 2 : TOPH19.SOL +REMARK 3 TOPOLOGY FILE 3 : NME.TOP +REMARK 3 TOPOLOGY FILE 4 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: BULK SOLVENT MODEL USED +REMARK 4 +REMARK 4 25C8 COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : DEC-96 +REMARK 200 TEMPERATURE (KELVIN) : 97 +REMARK 200 PH : 5.5 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : Y +REMARK 200 RADIATION SOURCE : SSRL +REMARK 200 BEAMLINE : BL7-1 +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 1.08 +REMARK 200 MONOCHROMATOR : SI(111) +REMARK 200 OPTICS : PT COATED FUSED SILICA MIRROR +REMARK 200 +REMARK 200 DETECTOR TYPE : IMAGE PLATE +REMARK 200 DETECTOR MANUFACTURER : MARRESEARCH +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : DENZO +REMARK 200 DATA SCALING SOFTWARE : SCALEPACK +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 33080 +REMARK 200 RESOLUTION RANGE HIGH (A) : 2.000 +REMARK 200 RESOLUTION RANGE LOW (A) : 25.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : -3.000 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 96.7 +REMARK 200 DATA REDUNDANCY : 7.000 +REMARK 200 R MERGE (I) : NULL +REMARK 200 R SYM (I) : 0.05700 +REMARK 200 FOR THE DATA SET : 16.9000 +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 2.00 +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : 2.03 +REMARK 200 COMPLETENESS FOR SHELL (%) : 93.4 +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : NULL +REMARK 200 R SYM FOR SHELL (I) : 0.30400 +REMARK 200 FOR SHELL : 2.900 +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: AMORE +REMARK 200 STARTING MODEL: FREE FAB 5C8 +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 54.00 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.70 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: PH 5.5 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: C 1 2 1 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X,Y,-Z +REMARK 290 3555 X+1/2,Y+1/2,Z +REMARK 290 4555 -X+1/2,Y+1/2,-Z +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY1 3 1.000000 0.000000 0.000000 56.00000 +REMARK 290 SMTRY2 3 0.000000 1.000000 0.000000 40.00000 +REMARK 290 SMTRY3 3 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 4 -1.000000 0.000000 0.000000 56.00000 +REMARK 290 SMTRY2 4 0.000000 1.000000 0.000000 40.00000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: DIMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 TOTAL BURIED SURFACE AREA: 4070 ANGSTROM**2 +REMARK 350 SURFACE AREA OF THE COMPLEX: 19220 ANGSTROM**2 +REMARK 350 CHANGE IN SOLVENT FREE ENERGY: -17.0 KCAL/MOL +REMARK 350 APPLY THE FOLLOWING TO CHAINS: L, H +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 375 +REMARK 375 SPECIAL POSITION +REMARK 375 THE FOLLOWING ATOMS ARE FOUND TO BE WITHIN 0.15 ANGSTROMS +REMARK 375 OF A SYMMETRY RELATED ATOM AND ARE ASSUMED TO BE ON SPECIAL +REMARK 375 POSITIONS. +REMARK 375 +REMARK 375 ATOM RES CSSEQI +REMARK 375 HOH L 213 LIES ON A SPECIAL POSITION. +REMARK 475 +REMARK 475 ZERO OCCUPANCY RESIDUES +REMARK 475 THE FOLLOWING RESIDUES WERE MODELED WITH ZERO OCCUPANCY. +REMARK 475 THE LOCATION AND PROPERTIES OF THESE RESIDUES MAY NOT +REMARK 475 BE RELIABLE. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 475 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE) +REMARK 475 M RES C SSEQI +REMARK 475 SER H 128 +REMARK 475 ALA H 129 +REMARK 475 ALA H 130 +REMARK 475 GLN H 133 +REMARK 475 THR H 134 +REMARK 475 ASN H 135 +REMARK 475 SER H 136 +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 THR L 51 -52.77 73.57 +REMARK 500 ALA L 84 -168.14 -177.40 +REMARK 500 ASP L 110 153.74 -49.71 +REMARK 500 SER L 116 115.88 -160.21 +REMARK 500 ASN L 138 80.82 41.40 +REMARK 500 PRO L 141 -167.69 -68.92 +REMARK 500 GLU L 154 128.92 -37.54 +REMARK 500 LYS L 169 -61.32 -90.87 +REMARK 500 GLU L 185 -38.62 -35.83 +REMARK 500 THR H 32 -159.06 -143.68 +REMARK 500 GLN H 43 -160.32 -122.25 +REMARK 500 ILE H 48 -60.55 -100.67 +REMARK 500 PHE H 63 45.97 -100.18 +REMARK 500 GLN H 64 100.82 -52.57 +REMARK 500 ALA H 88 -176.89 173.17 +REMARK 500 SER H 128 -90.03 32.28 +REMARK 500 THR H 134 -40.24 -163.04 +REMARK 500 ASN H 135 137.83 64.93 +REMARK 500 SER H 136 -35.85 70.21 +REMARK 500 SER H 163 61.21 39.53 +REMARK 500 ASP H 183 -10.74 73.80 +REMARK 500 SER H 195 11.35 -62.86 +REMARK 500 PRO H 200 32.18 -84.85 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 525 +REMARK 525 SOLVENT +REMARK 525 +REMARK 525 THE SOLVENT MOLECULES HAVE CHAIN IDENTIFIERS THAT +REMARK 525 INDICATE THE POLYMER CHAIN WITH WHICH THEY ARE MOST +REMARK 525 CLOSELY ASSOCIATED. THE REMARK LISTS ALL THE SOLVENT +REMARK 525 MOLECULES WHICH ARE MORE THAN 5A AWAY FROM THE +REMARK 525 NEAREST POLYMER CHAIN (M = MODEL NUMBER; +REMARK 525 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE +REMARK 525 NUMBER; I=INSERTION CODE): +REMARK 525 +REMARK 525 M RES CSSEQI +REMARK 525 HOH L 213 DISTANCE = 5.82 ANGSTROMS +REMARK 800 +REMARK 800 SITE +REMARK 800 SITE_IDENTIFIER: AC1 +REMARK 800 EVIDENCE_CODE: SOFTWARE +REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE GEP L 212 +DBREF 25C8 L 2 211 UNP P01837 KAC_MOUSE 24 234 +DBREF 25C8 H 2 226 UNP P01869 IGH1M_MOUSE 2 217 +SEQADV 25C8 ASN L 32 UNP P01837 TYR 55 CONFLICT +SEQADV 25C8 SER L 94 UNP P01837 PHE 117 CONFLICT +SEQADV 25C8 TYR L 96 UNP P01837 HIS 119 CONFLICT +SEQADV 25C8 GLN H 3 UNP P01869 LYS 3 CONFLICT +SEQADV 25C8 GLN H 5 UNP P01869 LEU 5 CONFLICT +SEQADV 25C8 GLN H 6 UNP P01869 GLU 6 CONFLICT +SEQADV 25C8 PRO H 14 UNP P01869 SER 14 CONFLICT +SEQADV 25C8 LYS H 40 UNP P01869 ARG 40 CONFLICT +SEQADV 25C8 ALA H 49 UNP P01869 GLY 49 CONFLICT +SEQADV 25C8 GLN H 50 UNP P01869 ARG 50 CONFLICT +SEQADV 25C8 ASN H 56 UNP P01869 GLU 57 CONFLICT +SEQADV 25C8 THR H 57 UNP P01869 ILE 58 CONFLICT +SEQADV 25C8 LYS H 66 UNP P01869 THR 67 CONFLICT +SEQADV 25C8 SER H 75 UNP P01869 THR 76 CONFLICT +SEQADV 25C8 HIS H 81 UNP P01869 GLN 82 CONFLICT +SEQADV 25C8 SER H 87 UNP P01869 THR 91 CONFLICT +SEQADV 25C8 ALA H 93 UNP P01869 VAL 97 CONFLICT +SEQADV 25C8 ALA H 94 UNP P01869 ARG 98 CONFLICT +SEQADV 25C8 ASP H 95 UNP P01869 ARG 99 CONFLICT +SEQADV 25C8 PRO H 96 UNP P01869 GLY 100 CONFLICT +SEQADV 25C8 PRO H 97 UNP P01869 TYR 101 CONFLICT +SEQADV 25C8 TYR H 98 UNP P01869 GLY 102 CONFLICT +SEQADV 25C8 TYR H 99 UNP P01869 SER 103 CONFLICT +SEQADV 25C8 GLY H 100 UNP P01869 SER 104 CONFLICT +SEQADV 25C8 HIS H 100A UNP P01869 GLN 105 CONFLICT +SEQADV 25C8 GLY H 100B UNP P01869 GLU 106 CONFLICT +SEQADV 25C8 ASP H 101 UNP P01869 PRO 107 CONFLICT +SEQRES 1 L 212 ASP ILE VAL LEU THR GLN SER PRO ALA ILE MET SER ALA +SEQRES 2 L 212 SER LEU GLY GLU ARG VAL THR MET THR CYS THR ALA SER +SEQRES 3 L 212 SER SER VAL SER SER SER ASN LEU HIS TRP TYR GLN GLN +SEQRES 4 L 212 LYS PRO GLY SER SER PRO LYS LEU TRP ILE TYR SER THR +SEQRES 5 L 212 SER ASN LEU ALA SER GLY VAL PRO ALA ARG PHE SER GLY +SEQRES 6 L 212 SER GLY SER GLY THR SER TYR SER LEU THR ILE SER SER +SEQRES 7 L 212 MET GLU ALA GLU ASP ALA ALA THR TYR TYR CYS HIS GLN +SEQRES 8 L 212 TYR HIS ARG SER PRO TYR THR PHE GLY GLY GLY THR LYS +SEQRES 9 L 212 LEU GLU ILE LYS ARG ALA ASP ALA ALA PRO THR VAL SER +SEQRES 10 L 212 ILE PHE PRO PRO SER SER GLU GLN LEU THR SER GLY GLY +SEQRES 11 L 212 ALA SER VAL VAL CYS PHE LEU ASN ASN PHE TYR PRO LYS +SEQRES 12 L 212 ASP ILE ASN VAL LYS TRP LYS ILE ASP GLY SER GLU ARG +SEQRES 13 L 212 GLN ASN GLY VAL LEU ASN SER TRP THR ASP GLN ASP SER +SEQRES 14 L 212 LYS ASP SER THR TYR SER MET SER SER THR LEU THR LEU +SEQRES 15 L 212 THR LYS ASP GLU TYR GLU ARG HIS ASN SER TYR THR CYS +SEQRES 16 L 212 GLU ALA THR HIS LYS THR SER THR SER PRO ILE VAL LYS +SEQRES 17 L 212 SER PHE ASN ARG +SEQRES 1 H 217 GLU VAL GLN LEU GLN GLN SER GLY ALA GLU LEU VAL LYS +SEQRES 2 H 217 PRO GLY ALA SER VAL LYS LEU SER CYS THR ALA SER GLY +SEQRES 3 H 217 PHE ASN ILE LYS ASP THR TYR MET HIS TRP VAL LYS GLN +SEQRES 4 H 217 LYS PRO GLU GLN GLY LEU GLU TRP ILE ALA GLN ILE ASP +SEQRES 5 H 217 PRO ALA ASN GLY ASN THR LYS TYR ASP PRO LYS PHE GLN +SEQRES 6 H 217 GLY LYS ALA THR ILE THR ALA ASP THR SER SER ASN THR +SEQRES 7 H 217 ALA TYR LEU HIS LEU SER SER LEU THR SER GLU ASP SER +SEQRES 8 H 217 ALA VAL TYR TYR CYS ALA ALA ASP PRO PRO TYR TYR GLY +SEQRES 9 H 217 HIS GLY ASP TYR TRP GLY GLN GLY THR THR LEU THR VAL +SEQRES 10 H 217 SER SER ALA LYS THR THR PRO PRO SER VAL TYR PRO LEU +SEQRES 11 H 217 ALA PRO GLY SER ALA ALA GLN THR ASN SER MET VAL THR +SEQRES 12 H 217 LEU GLY CYS LEU VAL LYS GLY TYR PHE PRO GLU PRO VAL +SEQRES 13 H 217 THR VAL THR TRP ASN SER GLY SER LEU SER SER GLY VAL +SEQRES 14 H 217 HIS THR PHE PRO ALA VAL LEU GLN SER ASP LEU TYR THR +SEQRES 15 H 217 LEU SER SER SER VAL THR VAL PRO SER SER THR TRP PRO +SEQRES 16 H 217 SER GLU THR VAL THR CYS ASN VAL ALA HIS PRO ALA SER +SEQRES 17 H 217 SER THR LYS VAL ASP LYS LYS ILE VAL +HET GEP L 212 24 +HETNAM GEP N-METHYL-N-(PARA-GLUTARAMIDOPHENYL-ETHYL)- +HETNAM 2 GEP PIPERIDINIUM ION +FORMUL 3 GEP C19 H29 N2 O3 1+ +FORMUL 4 HOH *232(H2 O) +HELIX 1 1 SER L 122 SER L 127 1 6 +HELIX 2 2 ASP L 184 GLU L 187 1 4 +SHEET 1 A 4 LEU L 4 SER L 7 0 +SHEET 2 A 4 VAL L 19 ALA L 25 -1 N THR L 24 O THR L 5 +SHEET 3 A 4 SER L 70 ILE L 75 -1 N ILE L 75 O VAL L 19 +SHEET 4 A 4 PHE L 62 SER L 67 -1 N SER L 67 O SER L 70 +SHEET 1 B 5 ILE L 10 ALA L 13 0 +SHEET 2 B 5 THR L 102 ILE L 106 1 N LYS L 103 O MET L 11 +SHEET 3 B 5 ALA L 84 GLN L 90 -1 N TYR L 86 O THR L 102 +SHEET 4 B 5 LEU L 33 GLN L 38 -1 N GLN L 38 O THR L 85 +SHEET 5 B 5 LYS L 45 ILE L 48 -1 N ILE L 48 O TRP L 35 +SHEET 1 C 4 THR L 114 PHE L 118 0 +SHEET 2 C 4 GLY L 129 ASN L 137 -1 N ASN L 137 O THR L 114 +SHEET 3 C 4 MET L 175 THR L 182 -1 N LEU L 181 O ALA L 130 +SHEET 4 C 4 VAL L 159 TRP L 163 -1 N SER L 162 O SER L 176 +SHEET 1 D 4 SER L 153 ARG L 155 0 +SHEET 2 D 4 ILE L 144 ILE L 150 -1 N ILE L 150 O SER L 153 +SHEET 3 D 4 SER L 191 HIS L 198 -1 N THR L 197 O ASN L 145 +SHEET 4 D 4 ILE L 205 ASN L 210 -1 N PHE L 209 O TYR L 192 +SHEET 1 E 4 GLN H 3 GLN H 6 0 +SHEET 2 E 4 VAL H 18 SER H 25 -1 N SER H 25 O GLN H 3 +SHEET 3 E 4 THR H 77 LEU H 82 -1 N LEU H 82 O VAL H 18 +SHEET 4 E 4 ALA H 67 ASP H 72 -1 N ASP H 72 O THR H 77 +SHEET 1 F 6 GLU H 10 VAL H 12 0 +SHEET 2 F 6 THR H 107 VAL H 111 1 N THR H 110 O GLU H 10 +SHEET 3 F 6 ALA H 88 ALA H 94 -1 N TYR H 90 O THR H 107 +SHEET 4 F 6 MET H 34 GLN H 39 -1 N GLN H 39 O VAL H 89 +SHEET 5 F 6 LEU H 45 ASP H 52 -1 N ILE H 51 O MET H 34 +SHEET 6 F 6 ASN H 56 TYR H 59 -1 N LYS H 58 O GLN H 50 +SHEET 1 G 4 SER H 120 LEU H 124 0 +SHEET 2 G 4 MET H 137 TYR H 147 -1 N LYS H 145 O SER H 120 +SHEET 3 G 4 TYR H 185 PRO H 194 -1 N VAL H 193 O VAL H 138 +SHEET 4 G 4 VAL H 171 THR H 173 -1 N HIS H 172 O SER H 190 +SHEET 1 H 3 VAL H 152 TRP H 157 0 +SHEET 2 H 3 VAL H 205 HIS H 212 -1 N ALA H 211 O THR H 153 +SHEET 3 H 3 THR H 217 ILE H 223 -1 N ILE H 223 O VAL H 205 +SSBOND 1 CYS L 23 CYS L 88 1555 1555 2.04 +SSBOND 2 CYS L 134 CYS L 194 1555 1555 2.04 +SSBOND 3 CYS H 22 CYS H 92 1555 1555 2.03 +SSBOND 4 CYS H 142 CYS H 208 1555 1555 2.03 +CISPEP 1 SER L 7 PRO L 8 0 -0.23 +CISPEP 2 SER L 94 PRO L 95 0 0.11 +CISPEP 3 TYR L 140 PRO L 141 0 -0.03 +CISPEP 4 PHE H 148 PRO H 149 0 -0.26 +CISPEP 5 GLU H 150 PRO H 151 0 -0.34 +CISPEP 6 TRP H 199 PRO H 200 0 0.28 +SITE 1 AC1 12 HIS H 35 ALA H 93 ASP H 95 PRO H 96 +SITE 2 AC1 12 GLY H 100 HIS H 100A GLY H 100B ASP H 101 +SITE 3 AC1 12 TYR L 36 LEU L 46 TYR L 49 TYR L 91 +CRYST1 112.000 80.000 64.900 90.00 118.00 90.00 C 1 2 1 4 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.008929 0.000000 0.004747 0.00000 +SCALE2 0.000000 0.012500 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.017451 0.00000 +ATOM 1627 N GLU H 1 40.545 -7.360 -18.036 1.00 57.91 N +ATOM 1628 CA GLU H 1 40.539 -7.596 -16.563 1.00 57.15 C +ATOM 1629 C GLU H 1 39.145 -7.451 -15.971 1.00 52.54 C +ATOM 1630 O GLU H 1 38.543 -6.380 -16.029 1.00 54.86 O +ATOM 1631 CB GLU H 1 41.479 -6.610 -15.856 1.00 61.03 C +ATOM 1632 CG GLU H 1 42.116 -7.155 -14.584 1.00 69.30 C +ATOM 1633 CD GLU H 1 43.437 -7.862 -14.851 1.00 74.66 C +ATOM 1634 OE1 GLU H 1 43.455 -8.801 -15.676 1.00 77.74 O +ATOM 1635 OE2 GLU H 1 44.457 -7.479 -14.237 1.00 78.65 O +ATOM 1636 N VAL H 2 38.621 -8.535 -15.419 1.00 45.62 N +ATOM 1637 CA VAL H 2 37.325 -8.459 -14.787 1.00 39.22 C +ATOM 1638 C VAL H 2 37.599 -7.604 -13.558 1.00 39.25 C +ATOM 1639 O VAL H 2 38.585 -7.838 -12.850 1.00 38.59 O +ATOM 1640 CB VAL H 2 36.846 -9.839 -14.315 1.00 36.28 C +ATOM 1641 CG1 VAL H 2 35.446 -9.732 -13.757 1.00 34.11 C +ATOM 1642 CG2 VAL H 2 36.905 -10.836 -15.461 1.00 37.89 C +ATOM 1643 N GLN H 3 36.778 -6.590 -13.312 1.00 37.84 N +ATOM 1644 CA GLN H 3 36.991 -5.786 -12.116 1.00 34.97 C +ATOM 1645 C GLN H 3 35.837 -4.901 -11.705 1.00 30.46 C +ATOM 1646 O GLN H 3 35.020 -4.502 -12.522 1.00 30.67 O +ATOM 1647 CB GLN H 3 38.281 -4.968 -12.221 1.00 36.91 C +ATOM 1648 CG GLN H 3 38.284 -3.816 -13.186 1.00 48.70 C +ATOM 1649 CD GLN H 3 39.641 -3.114 -13.199 1.00 53.88 C +ATOM 1650 OE1 GLN H 3 40.494 -3.373 -12.345 1.00 57.00 O +ATOM 1651 NE2 GLN H 3 39.846 -2.225 -14.167 1.00 58.84 N +ATOM 1652 N LEU H 4 35.778 -4.632 -10.403 1.00 30.93 N +ATOM 1653 CA LEU H 4 34.738 -3.811 -9.809 1.00 28.08 C +ATOM 1654 C LEU H 4 35.318 -2.456 -9.416 1.00 26.42 C +ATOM 1655 O LEU H 4 36.234 -2.365 -8.605 1.00 27.46 O +ATOM 1656 CB LEU H 4 34.155 -4.520 -8.578 1.00 27.66 C +ATOM 1657 CG LEU H 4 33.331 -5.798 -8.784 1.00 25.89 C +ATOM 1658 CD1 LEU H 4 32.735 -6.286 -7.459 1.00 21.91 C +ATOM 1659 CD2 LEU H 4 32.222 -5.501 -9.772 1.00 25.18 C +ATOM 1660 N GLN H 5 34.775 -1.406 -10.013 1.00 28.21 N +ATOM 1661 CA GLN H 5 35.213 -0.039 -9.759 1.00 30.19 C +ATOM 1662 C GLN H 5 34.198 0.699 -8.890 1.00 27.60 C +ATOM 1663 O GLN H 5 33.025 0.812 -9.250 1.00 28.49 O +ATOM 1664 CB GLN H 5 35.374 0.694 -11.087 1.00 35.52 C +ATOM 1665 CG GLN H 5 36.346 1.841 -11.031 1.00 50.52 C +ATOM 1666 CD GLN H 5 37.777 1.363 -10.920 1.00 58.54 C +ATOM 1667 OE1 GLN H 5 38.539 1.834 -10.069 1.00 64.26 O +ATOM 1668 NE2 GLN H 5 38.153 0.416 -11.782 1.00 61.81 N +ATOM 1669 N GLN H 6 34.653 1.204 -7.747 1.00 27.73 N +ATOM 1670 CA GLN H 6 33.780 1.927 -6.823 1.00 25.15 C +ATOM 1671 C GLN H 6 34.039 3.424 -6.867 1.00 22.47 C +ATOM 1672 O GLN H 6 35.125 3.855 -7.234 1.00 20.33 O +ATOM 1673 CB GLN H 6 34.003 1.427 -5.402 1.00 26.07 C +ATOM 1674 CG GLN H 6 33.659 -0.033 -5.202 1.00 25.36 C +ATOM 1675 CD GLN H 6 33.772 -0.451 -3.759 1.00 25.47 C +ATOM 1676 OE1 GLN H 6 34.396 -1.464 -3.452 1.00 26.83 O +ATOM 1677 NE2 GLN H 6 33.168 0.328 -2.858 1.00 22.93 N +ATOM 1678 N SER H 7 33.036 4.211 -6.491 1.00 22.31 N +ATOM 1679 CA SER H 7 33.178 5.660 -6.486 1.00 21.46 C +ATOM 1680 C SER H 7 34.201 6.077 -5.437 1.00 24.16 C +ATOM 1681 O SER H 7 34.632 5.258 -4.614 1.00 26.43 O +ATOM 1682 CB SER H 7 31.828 6.338 -6.219 1.00 19.51 C +ATOM 1683 OG SER H 7 31.034 5.600 -5.309 1.00 21.51 O +ATOM 1684 N GLY H 8 34.579 7.353 -5.469 1.00 23.56 N +ATOM 1685 CA GLY H 8 35.576 7.878 -4.546 1.00 24.22 C +ATOM 1686 C GLY H 8 35.251 8.056 -3.070 1.00 21.90 C +ATOM 1687 O GLY H 8 34.112 7.886 -2.639 1.00 21.24 O +ATOM 1688 N ALA H 9 36.278 8.415 -2.301 1.00 23.35 N +ATOM 1689 CA ALA H 9 36.164 8.620 -0.856 1.00 25.30 C +ATOM 1690 C ALA H 9 35.087 9.626 -0.494 1.00 27.55 C +ATOM 1691 O ALA H 9 34.912 10.636 -1.173 1.00 28.93 O +ATOM 1692 CB ALA H 9 37.498 9.067 -0.290 1.00 26.36 C +ATOM 1693 N GLU H 10 34.363 9.346 0.584 1.00 27.50 N +ATOM 1694 CA GLU H 10 33.288 10.230 1.016 1.00 28.38 C +ATOM 1695 C GLU H 10 33.537 10.832 2.385 1.00 28.24 C +ATOM 1696 O GLU H 10 34.003 10.154 3.302 1.00 27.02 O +ATOM 1697 CB GLU H 10 31.949 9.479 1.056 1.00 25.34 C +ATOM 1698 CG GLU H 10 31.457 8.977 -0.290 1.00 24.51 C +ATOM 1699 CD GLU H 10 30.904 10.083 -1.164 1.00 25.08 C +ATOM 1700 OE1 GLU H 10 30.589 11.163 -0.628 1.00 27.81 O +ATOM 1701 OE2 GLU H 10 30.785 9.872 -2.389 1.00 25.78 O +ATOM 1702 N LEU H 11 33.233 12.116 2.506 1.00 26.94 N +ATOM 1703 CA LEU H 11 33.361 12.822 3.774 1.00 27.55 C +ATOM 1704 C LEU H 11 32.006 13.501 3.931 1.00 27.47 C +ATOM 1705 O LEU H 11 31.705 14.471 3.233 1.00 26.26 O +ATOM 1706 CB LEU H 11 34.487 13.862 3.727 1.00 28.79 C +ATOM 1707 CG LEU H 11 34.622 14.741 4.982 1.00 27.10 C +ATOM 1708 CD1 LEU H 11 34.768 13.879 6.215 1.00 25.93 C +ATOM 1709 CD2 LEU H 11 35.826 15.654 4.845 1.00 30.51 C +ATOM 1710 N VAL H 12 31.183 12.968 4.829 1.00 26.91 N +ATOM 1711 CA VAL H 12 29.846 13.498 5.036 1.00 28.13 C +ATOM 1712 C VAL H 12 29.602 13.898 6.472 1.00 28.38 C +ATOM 1713 O VAL H 12 30.254 13.394 7.378 1.00 27.96 O +ATOM 1714 CB VAL H 12 28.782 12.459 4.644 1.00 27.01 C +ATOM 1715 CG1 VAL H 12 27.421 13.119 4.555 1.00 31.62 C +ATOM 1716 CG2 VAL H 12 29.146 11.825 3.315 1.00 30.63 C +ATOM 1717 N LYS H 13 28.651 14.807 6.669 1.00 29.51 N +ATOM 1718 CA LYS H 13 28.290 15.279 8.003 1.00 28.69 C +ATOM 1719 C LYS H 13 27.150 14.409 8.521 1.00 25.40 C +ATOM 1720 O LYS H 13 26.334 13.926 7.743 1.00 26.20 O +ATOM 1721 CB LYS H 13 27.826 16.741 7.943 1.00 30.72 C +ATOM 1722 CG LYS H 13 28.909 17.741 7.549 1.00 32.53 C +ATOM 1723 CD LYS H 13 29.554 18.348 8.786 1.00 35.91 C +ATOM 1724 CE LYS H 13 29.646 19.868 8.709 1.00 39.43 C +ATOM 1725 NZ LYS H 13 29.519 20.501 10.064 1.00 40.31 N +ATOM 1726 N PRO H 14 27.082 14.187 9.842 1.00 26.15 N +ATOM 1727 CA PRO H 14 25.993 13.358 10.364 1.00 27.04 C +ATOM 1728 C PRO H 14 24.617 13.922 9.993 1.00 28.77 C +ATOM 1729 O PRO H 14 24.444 15.136 9.853 1.00 30.11 O +ATOM 1730 CB PRO H 14 26.239 13.350 11.873 1.00 24.06 C +ATOM 1731 CG PRO H 14 27.676 13.717 12.030 1.00 23.09 C +ATOM 1732 CD PRO H 14 27.978 14.656 10.914 1.00 25.35 C +ATOM 1733 N GLY H 15 23.640 13.038 9.830 1.00 29.18 N +ATOM 1734 CA GLY H 15 22.310 13.487 9.467 1.00 26.25 C +ATOM 1735 C GLY H 15 22.144 13.530 7.959 1.00 25.09 C +ATOM 1736 O GLY H 15 21.024 13.500 7.444 1.00 25.76 O +ATOM 1737 N ALA H 16 23.262 13.602 7.245 1.00 22.03 N +ATOM 1738 CA ALA H 16 23.223 13.629 5.792 1.00 24.78 C +ATOM 1739 C ALA H 16 23.137 12.203 5.249 1.00 25.06 C +ATOM 1740 O ALA H 16 23.129 11.233 6.012 1.00 25.69 O +ATOM 1741 CB ALA H 16 24.465 14.306 5.257 1.00 23.70 C +ATOM 1742 N SER H 17 23.058 12.077 3.928 1.00 25.27 N +ATOM 1743 CA SER H 17 23.001 10.762 3.305 1.00 24.63 C +ATOM 1744 C SER H 17 24.032 10.716 2.188 1.00 22.92 C +ATOM 1745 O SER H 17 24.547 11.748 1.764 1.00 21.56 O +ATOM 1746 CB SER H 17 21.590 10.467 2.778 1.00 23.04 C +ATOM 1747 OG SER H 17 21.316 11.151 1.578 1.00 26.93 O +ATOM 1748 N VAL H 18 24.363 9.521 1.724 1.00 21.58 N +ATOM 1749 CA VAL H 18 25.349 9.414 0.673 1.00 20.91 C +ATOM 1750 C VAL H 18 25.076 8.168 -0.156 1.00 22.85 C +ATOM 1751 O VAL H 18 24.653 7.153 0.385 1.00 23.11 O +ATOM 1752 CB VAL H 18 26.773 9.373 1.292 1.00 19.75 C +ATOM 1753 CG1 VAL H 18 27.097 7.973 1.804 1.00 21.86 C +ATOM 1754 CG2 VAL H 18 27.793 9.824 0.281 1.00 17.44 C +ATOM 1755 N LYS H 19 25.281 8.254 -1.471 1.00 21.89 N +ATOM 1756 CA LYS H 19 25.081 7.105 -2.357 1.00 22.23 C +ATOM 1757 C LYS H 19 26.403 6.676 -3.008 1.00 21.14 C +ATOM 1758 O LYS H 19 27.035 7.450 -3.722 1.00 21.51 O +ATOM 1759 CB LYS H 19 24.052 7.428 -3.442 1.00 22.65 C +ATOM 1760 CG LYS H 19 23.625 6.207 -4.260 1.00 21.24 C +ATOM 1761 CD LYS H 19 22.138 6.225 -4.536 1.00 22.10 C +ATOM 1762 CE LYS H 19 21.828 5.719 -5.917 1.00 22.34 C +ATOM 1763 NZ LYS H 19 20.379 5.831 -6.222 1.00 24.43 N +ATOM 1764 N LEU H 20 26.819 5.441 -2.739 1.00 22.39 N +ATOM 1765 CA LEU H 20 28.061 4.886 -3.284 1.00 22.30 C +ATOM 1766 C LEU H 20 27.776 4.039 -4.537 1.00 21.73 C +ATOM 1767 O LEU H 20 26.722 3.417 -4.643 1.00 22.51 O +ATOM 1768 CB LEU H 20 28.753 4.020 -2.223 1.00 18.62 C +ATOM 1769 CG LEU H 20 28.832 4.540 -0.781 1.00 21.10 C +ATOM 1770 CD1 LEU H 20 29.599 3.525 0.074 1.00 15.23 C +ATOM 1771 CD2 LEU H 20 29.509 5.906 -0.741 1.00 16.32 C +ATOM 1772 N SER H 21 28.705 4.003 -5.484 1.00 21.48 N +ATOM 1773 CA SER H 21 28.473 3.219 -6.689 1.00 21.39 C +ATOM 1774 C SER H 21 29.585 2.218 -7.009 1.00 21.10 C +ATOM 1775 O SER H 21 30.756 2.416 -6.656 1.00 21.29 O +ATOM 1776 CB SER H 21 28.205 4.152 -7.885 1.00 19.92 C +ATOM 1777 OG SER H 21 29.394 4.542 -8.541 1.00 27.51 O +ATOM 1778 N CYS H 22 29.194 1.136 -7.676 1.00 21.82 N +ATOM 1779 CA CYS H 22 30.113 0.061 -8.043 1.00 25.18 C +ATOM 1780 C CYS H 22 29.831 -0.404 -9.480 1.00 23.23 C +ATOM 1781 O CYS H 22 28.753 -0.919 -9.785 1.00 20.59 O +ATOM 1782 CB CYS H 22 29.942 -1.096 -7.042 1.00 30.47 C +ATOM 1783 SG CYS H 22 30.842 -2.641 -7.395 1.00 31.36 S +ATOM 1784 N THR H 23 30.808 -0.216 -10.361 1.00 22.96 N +ATOM 1785 CA THR H 23 30.644 -0.594 -11.757 1.00 24.94 C +ATOM 1786 C THR H 23 31.494 -1.786 -12.163 1.00 23.91 C +ATOM 1787 O THR H 23 32.718 -1.771 -12.029 1.00 26.00 O +ATOM 1788 CB THR H 23 30.977 0.587 -12.683 1.00 28.73 C +ATOM 1789 OG1 THR H 23 30.141 1.698 -12.341 1.00 31.04 O +ATOM 1790 CG2 THR H 23 30.746 0.207 -14.151 1.00 26.72 C +ATOM 1791 N ALA H 24 30.835 -2.815 -12.679 1.00 24.07 N +ATOM 1792 CA ALA H 24 31.520 -4.022 -13.102 1.00 23.39 C +ATOM 1793 C ALA H 24 31.946 -3.952 -14.556 1.00 25.64 C +ATOM 1794 O ALA H 24 31.247 -3.394 -15.396 1.00 30.83 O +ATOM 1795 CB ALA H 24 30.617 -5.219 -12.900 1.00 21.89 C +ATOM 1796 N SER H 25 33.109 -4.509 -14.849 1.00 24.05 N +ATOM 1797 CA SER H 25 33.595 -4.565 -16.213 1.00 22.86 C +ATOM 1798 C SER H 25 34.152 -5.974 -16.347 1.00 22.03 C +ATOM 1799 O SER H 25 34.843 -6.457 -15.459 1.00 24.16 O +ATOM 1800 CB SER H 25 34.673 -3.508 -16.450 1.00 23.31 C +ATOM 1801 OG SER H 25 35.851 -3.798 -15.735 1.00 34.10 O +ATOM 1802 N GLY H 26 33.815 -6.655 -17.432 1.00 21.37 N +ATOM 1803 CA GLY H 26 34.303 -8.009 -17.609 1.00 21.43 C +ATOM 1804 C GLY H 26 33.192 -9.039 -17.497 1.00 21.58 C +ATOM 1805 O GLY H 26 33.368 -10.202 -17.855 1.00 24.05 O +ATOM 1806 N PHE H 27 32.048 -8.611 -16.977 1.00 20.00 N +ATOM 1807 CA PHE H 27 30.891 -9.478 -16.834 1.00 18.52 C +ATOM 1808 C PHE H 27 29.681 -8.584 -16.632 1.00 18.48 C +ATOM 1809 O PHE H 27 29.834 -7.393 -16.366 1.00 23.56 O +ATOM 1810 CB PHE H 27 31.068 -10.446 -15.647 1.00 23.94 C +ATOM 1811 CG PHE H 27 31.051 -9.779 -14.279 1.00 26.98 C +ATOM 1812 CD1 PHE H 27 32.204 -9.197 -13.754 1.00 25.70 C +ATOM 1813 CD2 PHE H 27 29.881 -9.749 -13.512 1.00 25.67 C +ATOM 1814 CE1 PHE H 27 32.193 -8.594 -12.485 1.00 23.77 C +ATOM 1815 CE2 PHE H 27 29.863 -9.150 -12.247 1.00 20.49 C +ATOM 1816 CZ PHE H 27 31.021 -8.572 -11.738 1.00 18.12 C +ATOM 1817 N ASN H 28 28.487 -9.139 -16.799 1.00 20.18 N +ATOM 1818 CA ASN H 28 27.264 -8.373 -16.604 1.00 21.56 C +ATOM 1819 C ASN H 28 26.785 -8.669 -15.203 1.00 23.50 C +ATOM 1820 O ASN H 28 26.670 -9.829 -14.809 1.00 22.54 O +ATOM 1821 CB ASN H 28 26.162 -8.795 -17.575 1.00 25.03 C +ATOM 1822 CG ASN H 28 26.545 -8.610 -19.023 1.00 32.16 C +ATOM 1823 OD1 ASN H 28 27.325 -7.709 -19.352 1.00 36.62 O +ATOM 1824 ND2 ASN H 28 26.003 -9.455 -19.900 1.00 31.57 N +ATOM 1825 N ILE H 29 26.485 -7.625 -14.449 1.00 23.77 N +ATOM 1826 CA ILE H 29 26.019 -7.823 -13.092 1.00 24.43 C +ATOM 1827 C ILE H 29 24.667 -8.545 -13.064 1.00 23.88 C +ATOM 1828 O ILE H 29 24.272 -9.107 -12.050 1.00 25.56 O +ATOM 1829 CB ILE H 29 25.943 -6.472 -12.352 1.00 23.24 C +ATOM 1830 CG1 ILE H 29 24.946 -5.535 -13.049 1.00 24.54 C +ATOM 1831 CG2 ILE H 29 27.335 -5.847 -12.316 1.00 15.54 C +ATOM 1832 CD1 ILE H 29 24.367 -4.443 -12.133 1.00 21.05 C +ATOM 1833 N LYS H 30 23.970 -8.556 -14.190 1.00 23.07 N +ATOM 1834 CA LYS H 30 22.681 -9.223 -14.254 1.00 23.96 C +ATOM 1835 C LYS H 30 22.834 -10.749 -14.180 1.00 21.60 C +ATOM 1836 O LYS H 30 21.859 -11.466 -13.959 1.00 21.55 O +ATOM 1837 CB LYS H 30 21.960 -8.837 -15.551 1.00 28.35 C +ATOM 1838 CG LYS H 30 22.033 -9.911 -16.636 1.00 35.62 C +ATOM 1839 CD LYS H 30 21.671 -9.375 -18.009 1.00 43.20 C +ATOM 1840 CE LYS H 30 22.479 -10.078 -19.097 1.00 47.70 C +ATOM 1841 NZ LYS H 30 21.619 -10.785 -20.089 1.00 51.50 N +ATOM 1842 N ASP H 31 24.054 -11.244 -14.351 1.00 21.08 N +ATOM 1843 CA ASP H 31 24.284 -12.679 -14.333 1.00 22.51 C +ATOM 1844 C ASP H 31 24.807 -13.223 -13.020 1.00 24.57 C +ATOM 1845 O ASP H 31 25.142 -14.403 -12.925 1.00 28.84 O +ATOM 1846 CB ASP H 31 25.235 -13.069 -15.455 1.00 23.49 C +ATOM 1847 CG ASP H 31 24.706 -12.684 -16.825 1.00 27.30 C +ATOM 1848 OD1 ASP H 31 23.477 -12.814 -17.053 1.00 30.99 O +ATOM 1849 OD2 ASP H 31 25.523 -12.248 -17.668 1.00 25.87 O +ATOM 1850 N THR H 32 24.872 -12.368 -12.005 1.00 24.16 N +ATOM 1851 CA THR H 32 25.340 -12.788 -10.694 1.00 19.15 C +ATOM 1852 C THR H 32 24.556 -12.070 -9.599 1.00 17.81 C +ATOM 1853 O THR H 32 23.432 -11.611 -9.828 1.00 19.95 O +ATOM 1854 CB THR H 32 26.853 -12.519 -10.550 1.00 19.82 C +ATOM 1855 OG1 THR H 32 27.338 -13.134 -9.351 1.00 18.48 O +ATOM 1856 CG2 THR H 32 27.134 -11.024 -10.526 1.00 19.90 C +ATOM 1857 N TYR H 33 25.130 -12.012 -8.402 1.00 18.98 N +ATOM 1858 CA TYR H 33 24.511 -11.331 -7.268 1.00 16.13 C +ATOM 1859 C TYR H 33 25.484 -10.250 -6.842 1.00 19.05 C +ATOM 1860 O TYR H 33 26.694 -10.478 -6.821 1.00 19.46 O +ATOM 1861 CB TYR H 33 24.296 -12.290 -6.091 1.00 16.62 C +ATOM 1862 CG TYR H 33 23.121 -13.214 -6.257 1.00 19.14 C +ATOM 1863 CD1 TYR H 33 21.828 -12.781 -5.992 1.00 20.01 C +ATOM 1864 CD2 TYR H 33 23.295 -14.515 -6.726 1.00 19.47 C +ATOM 1865 CE1 TYR H 33 20.735 -13.616 -6.196 1.00 18.77 C +ATOM 1866 CE2 TYR H 33 22.207 -15.358 -6.933 1.00 19.45 C +ATOM 1867 CZ TYR H 33 20.934 -14.902 -6.667 1.00 20.71 C +ATOM 1868 OH TYR H 33 19.851 -15.730 -6.881 1.00 23.66 O +ATOM 1869 N MET H 34 24.969 -9.071 -6.510 1.00 20.34 N +ATOM 1870 CA MET H 34 25.839 -7.983 -6.071 1.00 20.84 C +ATOM 1871 C MET H 34 25.660 -7.660 -4.577 1.00 16.08 C +ATOM 1872 O MET H 34 24.548 -7.628 -4.060 1.00 16.59 O +ATOM 1873 CB MET H 34 25.598 -6.749 -6.944 1.00 21.27 C +ATOM 1874 CG MET H 34 26.021 -6.954 -8.401 1.00 19.46 C +ATOM 1875 SD MET H 34 27.784 -7.300 -8.632 1.00 22.19 S +ATOM 1876 CE MET H 34 28.463 -5.747 -8.189 1.00 20.08 C +ATOM 1877 N HIS H 35 26.761 -7.446 -3.872 1.00 16.65 N +ATOM 1878 CA HIS H 35 26.655 -7.154 -2.451 1.00 19.26 C +ATOM 1879 C HIS H 35 27.502 -5.983 -2.029 1.00 19.27 C +ATOM 1880 O HIS H 35 28.361 -5.508 -2.773 1.00 18.54 O +ATOM 1881 CB HIS H 35 27.087 -8.345 -1.575 1.00 17.26 C +ATOM 1882 CG HIS H 35 26.510 -9.665 -1.981 1.00 16.31 C +ATOM 1883 ND1 HIS H 35 25.452 -10.250 -1.319 1.00 19.00 N +ATOM 1884 CD2 HIS H 35 26.890 -10.547 -2.935 1.00 15.98 C +ATOM 1885 CE1 HIS H 35 25.207 -11.436 -1.845 1.00 19.84 C +ATOM 1886 NE2 HIS H 35 26.065 -11.639 -2.828 1.00 17.50 N +ATOM 1887 N TRP H 36 27.244 -5.545 -0.800 1.00 22.09 N +ATOM 1888 CA TRP H 36 27.979 -4.460 -0.173 1.00 21.87 C +ATOM 1889 C TRP H 36 28.394 -4.968 1.213 1.00 22.31 C +ATOM 1890 O TRP H 36 27.569 -5.500 1.966 1.00 22.30 O +ATOM 1891 CB TRP H 36 27.099 -3.210 -0.060 1.00 19.00 C +ATOM 1892 CG TRP H 36 27.015 -2.419 -1.350 1.00 19.71 C +ATOM 1893 CD1 TRP H 36 25.996 -2.441 -2.259 1.00 18.75 C +ATOM 1894 CD2 TRP H 36 27.991 -1.501 -1.866 1.00 21.05 C +ATOM 1895 NE1 TRP H 36 26.275 -1.598 -3.308 1.00 19.75 N +ATOM 1896 CE2 TRP H 36 27.493 -1.008 -3.093 1.00 20.85 C +ATOM 1897 CE3 TRP H 36 29.239 -1.048 -1.412 1.00 18.67 C +ATOM 1898 CZ2 TRP H 36 28.197 -0.084 -3.870 1.00 18.54 C +ATOM 1899 CZ3 TRP H 36 29.939 -0.128 -2.182 1.00 17.28 C +ATOM 1900 CH2 TRP H 36 29.415 0.343 -3.401 1.00 19.26 C +ATOM 1901 N VAL H 37 29.683 -4.853 1.522 1.00 23.04 N +ATOM 1902 CA VAL H 37 30.206 -5.291 2.813 1.00 22.68 C +ATOM 1903 C VAL H 37 30.848 -4.082 3.473 1.00 21.44 C +ATOM 1904 O VAL H 37 31.435 -3.235 2.796 1.00 21.05 O +ATOM 1905 CB VAL H 37 31.266 -6.411 2.663 1.00 21.22 C +ATOM 1906 CG1 VAL H 37 31.794 -6.806 4.023 1.00 15.80 C +ATOM 1907 CG2 VAL H 37 30.662 -7.616 1.970 1.00 19.75 C +ATOM 1908 N LYS H 38 30.733 -4.019 4.795 1.00 21.42 N +ATOM 1909 CA LYS H 38 31.263 -2.908 5.581 1.00 23.91 C +ATOM 1910 C LYS H 38 32.383 -3.321 6.544 1.00 24.55 C +ATOM 1911 O LYS H 38 32.327 -4.384 7.170 1.00 24.54 O +ATOM 1912 CB LYS H 38 30.106 -2.268 6.356 1.00 23.89 C +ATOM 1913 CG LYS H 38 30.486 -1.201 7.344 1.00 26.53 C +ATOM 1914 CD LYS H 38 29.384 -1.037 8.386 1.00 27.64 C +ATOM 1915 CE LYS H 38 29.599 0.216 9.214 1.00 27.73 C +ATOM 1916 NZ LYS H 38 28.360 0.643 9.913 1.00 30.74 N +ATOM 1917 N GLN H 39 33.410 -2.483 6.647 1.00 25.98 N +ATOM 1918 CA GLN H 39 34.524 -2.750 7.555 1.00 25.54 C +ATOM 1919 C GLN H 39 34.862 -1.488 8.342 1.00 25.95 C +ATOM 1920 O GLN H 39 35.382 -0.520 7.787 1.00 22.03 O +ATOM 1921 CB GLN H 39 35.765 -3.224 6.789 1.00 23.77 C +ATOM 1922 CG GLN H 39 37.000 -3.387 7.676 1.00 21.92 C +ATOM 1923 CD GLN H 39 38.010 -4.366 7.122 1.00 25.13 C +ATOM 1924 OE1 GLN H 39 38.350 -4.325 5.943 1.00 25.73 O +ATOM 1925 NE2 GLN H 39 38.503 -5.252 7.975 1.00 23.06 N +ATOM 1926 N LYS H 40 34.558 -1.505 9.636 1.00 30.67 N +ATOM 1927 CA LYS H 40 34.833 -0.363 10.503 1.00 33.08 C +ATOM 1928 C LYS H 40 36.330 -0.295 10.801 1.00 37.80 C +ATOM 1929 O LYS H 40 37.019 -1.320 10.781 1.00 37.10 O +ATOM 1930 CB LYS H 40 34.038 -0.480 11.805 1.00 32.21 C +ATOM 1931 CG LYS H 40 32.545 -0.190 11.654 1.00 32.85 C +ATOM 1932 CD LYS H 40 32.035 0.689 12.784 1.00 37.11 C +ATOM 1933 CE LYS H 40 31.442 -0.148 13.903 1.00 43.42 C +ATOM 1934 NZ LYS H 40 30.172 -0.814 13.495 1.00 46.57 N +ATOM 1935 N PRO H 41 36.856 0.918 11.073 1.00 41.77 N +ATOM 1936 CA PRO H 41 38.288 1.071 11.365 1.00 44.35 C +ATOM 1937 C PRO H 41 38.836 -0.014 12.302 1.00 45.82 C +ATOM 1938 O PRO H 41 38.252 -0.309 13.343 1.00 44.32 O +ATOM 1939 CB PRO H 41 38.398 2.485 11.955 1.00 44.81 C +ATOM 1940 CG PRO H 41 36.973 3.008 12.068 1.00 44.19 C +ATOM 1941 CD PRO H 41 36.144 2.208 11.124 1.00 40.04 C +ATOM 1942 N GLU H 42 39.958 -0.605 11.905 1.00 51.10 N +ATOM 1943 CA GLU H 42 40.606 -1.674 12.663 1.00 58.08 C +ATOM 1944 C GLU H 42 39.587 -2.656 13.257 1.00 59.14 C +ATOM 1945 O GLU H 42 39.750 -3.132 14.382 1.00 61.21 O +ATOM 1946 CB GLU H 42 41.506 -1.088 13.769 1.00 62.38 C +ATOM 1947 CG GLU H 42 42.647 -0.176 13.257 1.00 69.98 C +ATOM 1948 CD GLU H 42 44.061 -0.687 13.592 1.00 74.53 C +ATOM 1949 OE1 GLU H 42 44.373 -1.863 13.302 1.00 78.18 O +ATOM 1950 OE2 GLU H 42 44.872 0.095 14.141 1.00 75.96 O +ATOM 1951 N GLN H 43 38.545 -2.963 12.482 1.00 59.18 N +ATOM 1952 CA GLN H 43 37.492 -3.893 12.904 1.00 56.37 C +ATOM 1953 C GLN H 43 37.324 -5.090 11.945 1.00 51.13 C +ATOM 1954 O GLN H 43 38.230 -5.408 11.166 1.00 49.12 O +ATOM 1955 CB GLN H 43 36.162 -3.142 13.035 1.00 59.46 C +ATOM 1956 CG GLN H 43 36.006 -2.390 14.349 1.00 64.87 C +ATOM 1957 CD GLN H 43 35.684 -3.313 15.507 1.00 68.65 C +ATOM 1958 OE1 GLN H 43 34.522 -3.660 15.736 1.00 70.04 O +ATOM 1959 NE2 GLN H 43 36.714 -3.718 16.245 1.00 69.21 N +ATOM 1960 N GLY H 44 36.163 -5.745 12.013 1.00 46.19 N +ATOM 1961 CA GLY H 44 35.888 -6.895 11.161 1.00 39.38 C +ATOM 1962 C GLY H 44 34.993 -6.600 9.968 1.00 35.13 C +ATOM 1963 O GLY H 44 34.724 -5.443 9.651 1.00 34.54 O +ATOM 1964 N LEU H 45 34.512 -7.648 9.307 1.00 31.69 N +ATOM 1965 CA LEU H 45 33.663 -7.477 8.130 1.00 28.08 C +ATOM 1966 C LEU H 45 32.176 -7.775 8.370 1.00 27.04 C +ATOM 1967 O LEU H 45 31.829 -8.738 9.056 1.00 28.68 O +ATOM 1968 CB LEU H 45 34.191 -8.358 6.995 1.00 24.67 C +ATOM 1969 CG LEU H 45 35.662 -8.201 6.597 1.00 21.70 C +ATOM 1970 CD1 LEU H 45 36.088 -9.407 5.778 1.00 22.10 C +ATOM 1971 CD2 LEU H 45 35.848 -6.925 5.800 1.00 16.20 C +ATOM 1972 N GLU H 46 31.304 -6.941 7.803 1.00 23.91 N +ATOM 1973 CA GLU H 46 29.856 -7.117 7.943 1.00 23.29 C +ATOM 1974 C GLU H 46 29.123 -7.008 6.612 1.00 22.81 C +ATOM 1975 O GLU H 46 29.228 -5.998 5.917 1.00 24.55 O +ATOM 1976 CB GLU H 46 29.255 -6.063 8.878 1.00 26.01 C +ATOM 1977 CG GLU H 46 29.902 -5.940 10.249 1.00 31.58 C +ATOM 1978 CD GLU H 46 29.452 -4.683 10.986 1.00 33.96 C +ATOM 1979 OE1 GLU H 46 28.237 -4.543 11.246 1.00 31.81 O +ATOM 1980 OE2 GLU H 46 30.314 -3.835 11.302 1.00 37.12 O +ATOM 1981 N TRP H 47 28.363 -8.041 6.267 1.00 20.47 N +ATOM 1982 CA TRP H 47 27.586 -8.035 5.035 1.00 19.41 C +ATOM 1983 C TRP H 47 26.387 -7.106 5.258 1.00 19.53 C +ATOM 1984 O TRP H 47 25.719 -7.189 6.282 1.00 20.57 O +ATOM 1985 CB TRP H 47 27.123 -9.455 4.723 1.00 18.45 C +ATOM 1986 CG TRP H 47 26.108 -9.548 3.649 1.00 16.28 C +ATOM 1987 CD1 TRP H 47 26.335 -9.511 2.313 1.00 14.91 C +ATOM 1988 CD2 TRP H 47 24.690 -9.704 3.817 1.00 17.28 C +ATOM 1989 NE1 TRP H 47 25.150 -9.633 1.631 1.00 16.52 N +ATOM 1990 CE2 TRP H 47 24.125 -9.753 2.530 1.00 13.23 C +ATOM 1991 CE3 TRP H 47 23.846 -9.806 4.934 1.00 18.03 C +ATOM 1992 CZ2 TRP H 47 22.746 -9.900 2.318 1.00 16.33 C +ATOM 1993 CZ3 TRP H 47 22.472 -9.950 4.726 1.00 13.11 C +ATOM 1994 CH2 TRP H 47 21.940 -9.996 3.425 1.00 14.68 C +ATOM 1995 N ILE H 48 26.115 -6.221 4.306 1.00 18.96 N +ATOM 1996 CA ILE H 48 25.003 -5.291 4.453 1.00 18.93 C +ATOM 1997 C ILE H 48 23.761 -5.694 3.690 1.00 18.04 C +ATOM 1998 O ILE H 48 22.712 -5.880 4.272 1.00 19.12 O +ATOM 1999 CB ILE H 48 25.373 -3.871 3.982 1.00 20.37 C +ATOM 2000 CG1 ILE H 48 26.686 -3.425 4.627 1.00 19.31 C +ATOM 2001 CG2 ILE H 48 24.229 -2.918 4.295 1.00 18.80 C +ATOM 2002 CD1 ILE H 48 27.372 -2.269 3.915 1.00 22.25 C +ATOM 2003 N ALA H 49 23.872 -5.802 2.375 1.00 20.39 N +ATOM 2004 CA ALA H 49 22.726 -6.172 1.559 1.00 20.41 C +ATOM 2005 C ALA H 49 23.173 -6.920 0.320 1.00 19.98 C +ATOM 2006 O ALA H 49 24.343 -6.873 -0.061 1.00 20.25 O +ATOM 2007 CB ALA H 49 21.943 -4.930 1.155 1.00 18.10 C +ATOM 2008 N GLN H 50 22.219 -7.604 -0.297 1.00 20.40 N +ATOM 2009 CA GLN H 50 22.446 -8.383 -1.501 1.00 20.35 C +ATOM 2010 C GLN H 50 21.357 -8.023 -2.514 1.00 21.76 C +ATOM 2011 O GLN H 50 20.231 -7.695 -2.131 1.00 22.43 O +ATOM 2012 CB GLN H 50 22.368 -9.875 -1.163 1.00 17.93 C +ATOM 2013 CG GLN H 50 22.122 -10.791 -2.356 1.00 22.13 C +ATOM 2014 CD GLN H 50 21.646 -12.174 -1.938 1.00 19.07 C +ATOM 2015 OE1 GLN H 50 20.554 -12.591 -2.293 1.00 21.66 O +ATOM 2016 NE2 GLN H 50 22.476 -12.891 -1.185 1.00 18.08 N +ATOM 2017 N ILE H 51 21.698 -8.051 -3.801 1.00 20.24 N +ATOM 2018 CA ILE H 51 20.713 -7.779 -4.847 1.00 18.55 C +ATOM 2019 C ILE H 51 20.923 -8.620 -6.091 1.00 16.32 C +ATOM 2020 O ILE H 51 22.049 -8.868 -6.515 1.00 15.85 O +ATOM 2021 CB ILE H 51 20.671 -6.278 -5.289 1.00 18.57 C +ATOM 2022 CG1 ILE H 51 19.339 -6.001 -6.001 1.00 17.24 C +ATOM 2023 CG2 ILE H 51 21.826 -5.952 -6.211 1.00 15.81 C +ATOM 2024 CD1 ILE H 51 19.165 -4.592 -6.504 1.00 16.62 C +ATOM 2025 N ASP H 52 19.817 -9.076 -6.657 1.00 19.45 N +ATOM 2026 CA ASP H 52 19.838 -9.857 -7.886 1.00 20.62 C +ATOM 2027 C ASP H 52 19.432 -8.876 -8.997 1.00 21.93 C +ATOM 2028 O ASP H 52 18.249 -8.596 -9.180 1.00 25.24 O +ATOM 2029 CB ASP H 52 18.832 -10.999 -7.779 1.00 21.11 C +ATOM 2030 CG ASP H 52 18.764 -11.825 -9.032 1.00 25.20 C +ATOM 2031 OD1 ASP H 52 19.487 -11.490 -9.995 1.00 29.91 O +ATOM 2032 OD2 ASP H 52 17.984 -12.803 -9.055 1.00 25.33 O +ATOM 2033 N PRO H 52A 20.412 -8.334 -9.744 1.00 20.78 N +ATOM 2034 CA PRO H 52A 20.156 -7.376 -10.826 1.00 21.65 C +ATOM 2035 C PRO H 52A 19.193 -7.832 -11.920 1.00 26.13 C +ATOM 2036 O PRO H 52A 18.676 -7.008 -12.684 1.00 25.95 O +ATOM 2037 CB PRO H 52A 21.548 -7.078 -11.371 1.00 19.53 C +ATOM 2038 CG PRO H 52A 22.465 -7.420 -10.251 1.00 16.19 C +ATOM 2039 CD PRO H 52A 21.850 -8.609 -9.606 1.00 15.87 C +ATOM 2040 N ALA H 53 18.947 -9.137 -11.991 1.00 27.20 N +ATOM 2041 CA ALA H 53 18.043 -9.679 -12.993 1.00 27.59 C +ATOM 2042 C ALA H 53 16.576 -9.409 -12.659 1.00 27.54 C +ATOM 2043 O ALA H 53 15.750 -9.287 -13.560 1.00 27.65 O +ATOM 2044 CB ALA H 53 18.276 -11.171 -13.152 1.00 30.41 C +ATOM 2045 N ASN H 54 16.237 -9.324 -11.376 1.00 27.22 N +ATOM 2046 CA ASN H 54 14.856 -9.041 -11.022 1.00 27.74 C +ATOM 2047 C ASN H 54 14.694 -7.964 -9.952 1.00 29.88 C +ATOM 2048 O ASN H 54 13.582 -7.660 -9.529 1.00 31.60 O +ATOM 2049 CB ASN H 54 14.124 -10.328 -10.619 1.00 31.47 C +ATOM 2050 CG ASN H 54 14.794 -11.051 -9.494 1.00 34.68 C +ATOM 2051 OD1 ASN H 54 15.497 -10.446 -8.694 1.00 40.57 O +ATOM 2052 ND2 ASN H 54 14.580 -12.358 -9.418 1.00 35.76 N +ATOM 2053 N GLY H 55 15.805 -7.374 -9.526 1.00 30.15 N +ATOM 2054 CA GLY H 55 15.747 -6.316 -8.535 1.00 28.67 C +ATOM 2055 C GLY H 55 15.468 -6.749 -7.108 1.00 32.66 C +ATOM 2056 O GLY H 55 15.250 -5.902 -6.233 1.00 33.32 O +ATOM 2057 N ASN H 56 15.479 -8.056 -6.857 1.00 32.83 N +ATOM 2058 CA ASN H 56 15.216 -8.565 -5.514 1.00 31.56 C +ATOM 2059 C ASN H 56 16.402 -8.333 -4.594 1.00 29.60 C +ATOM 2060 O ASN H 56 17.550 -8.501 -5.001 1.00 25.73 O +ATOM 2061 CB ASN H 56 14.871 -10.050 -5.568 1.00 35.79 C +ATOM 2062 CG ASN H 56 13.472 -10.298 -6.089 1.00 39.57 C +ATOM 2063 OD1 ASN H 56 12.586 -9.444 -5.970 1.00 43.41 O +ATOM 2064 ND2 ASN H 56 13.263 -11.471 -6.676 1.00 44.20 N +ATOM 2065 N THR H 57 16.105 -7.958 -3.349 1.00 30.13 N +ATOM 2066 CA THR H 57 17.127 -7.653 -2.356 1.00 28.01 C +ATOM 2067 C THR H 57 17.000 -8.406 -1.039 1.00 29.41 C +ATOM 2068 O THR H 57 15.929 -8.900 -0.691 1.00 29.69 O +ATOM 2069 CB THR H 57 17.109 -6.162 -2.007 1.00 25.40 C +ATOM 2070 OG1 THR H 57 15.815 -5.813 -1.509 1.00 24.60 O +ATOM 2071 CG2 THR H 57 17.399 -5.327 -3.221 1.00 23.69 C +ATOM 2072 N LYS H 58 18.119 -8.471 -0.321 1.00 29.24 N +ATOM 2073 CA LYS H 58 18.225 -9.101 0.998 1.00 29.17 C +ATOM 2074 C LYS H 58 19.009 -8.113 1.870 1.00 26.47 C +ATOM 2075 O LYS H 58 19.984 -7.523 1.416 1.00 28.29 O +ATOM 2076 CB LYS H 58 19.009 -10.415 0.919 1.00 32.27 C +ATOM 2077 CG LYS H 58 18.217 -11.621 0.439 1.00 36.61 C +ATOM 2078 CD LYS H 58 19.101 -12.865 0.412 1.00 40.96 C +ATOM 2079 CE LYS H 58 18.317 -14.119 0.051 1.00 42.83 C +ATOM 2080 NZ LYS H 58 18.979 -15.340 0.596 1.00 45.83 N +ATOM 2081 N TYR H 59 18.585 -7.929 3.113 1.00 24.88 N +ATOM 2082 CA TYR H 59 19.262 -7.006 4.013 1.00 25.54 C +ATOM 2083 C TYR H 59 19.506 -7.631 5.376 1.00 26.49 C +ATOM 2084 O TYR H 59 18.716 -8.439 5.852 1.00 28.99 O +ATOM 2085 CB TYR H 59 18.413 -5.744 4.247 1.00 26.27 C +ATOM 2086 CG TYR H 59 18.249 -4.825 3.064 1.00 25.43 C +ATOM 2087 CD1 TYR H 59 19.202 -3.853 2.768 1.00 25.05 C +ATOM 2088 CD2 TYR H 59 17.142 -4.932 2.233 1.00 23.67 C +ATOM 2089 CE1 TYR H 59 19.053 -3.006 1.659 1.00 22.20 C +ATOM 2090 CE2 TYR H 59 16.985 -4.096 1.129 1.00 25.73 C +ATOM 2091 CZ TYR H 59 17.939 -3.140 0.846 1.00 19.00 C +ATOM 2092 OH TYR H 59 17.773 -2.335 -0.258 1.00 20.78 O +ATOM 2093 N ASP H 60 20.605 -7.259 6.013 1.00 27.11 N +ATOM 2094 CA ASP H 60 20.844 -7.744 7.352 1.00 30.02 C +ATOM 2095 C ASP H 60 19.927 -6.836 8.172 1.00 32.32 C +ATOM 2096 O ASP H 60 20.005 -5.612 8.068 1.00 33.51 O +ATOM 2097 CB ASP H 60 22.292 -7.532 7.769 1.00 27.97 C +ATOM 2098 CG ASP H 60 22.578 -8.104 9.137 1.00 30.71 C +ATOM 2099 OD1 ASP H 60 21.710 -7.971 10.021 1.00 34.87 O +ATOM 2100 OD2 ASP H 60 23.658 -8.693 9.331 1.00 33.03 O +ATOM 2101 N PRO H 61 19.033 -7.420 8.981 1.00 33.87 N +ATOM 2102 CA PRO H 61 18.101 -6.643 9.808 1.00 35.73 C +ATOM 2103 C PRO H 61 18.723 -5.481 10.599 1.00 35.34 C +ATOM 2104 O PRO H 61 18.032 -4.522 10.943 1.00 33.14 O +ATOM 2105 CB PRO H 61 17.472 -7.695 10.730 1.00 37.23 C +ATOM 2106 CG PRO H 61 18.324 -8.931 10.566 1.00 35.17 C +ATOM 2107 CD PRO H 61 18.855 -8.865 9.180 1.00 31.97 C +ATOM 2108 N LYS H 62 20.019 -5.577 10.885 1.00 35.49 N +ATOM 2109 CA LYS H 62 20.726 -4.542 11.634 1.00 35.56 C +ATOM 2110 C LYS H 62 20.815 -3.233 10.848 1.00 37.36 C +ATOM 2111 O LYS H 62 20.909 -2.161 11.438 1.00 37.67 O +ATOM 2112 CB LYS H 62 22.129 -5.032 12.006 1.00 36.02 C +ATOM 2113 CG LYS H 62 22.131 -6.080 13.114 1.00 40.81 C +ATOM 2114 CD LYS H 62 23.052 -7.249 12.791 1.00 44.59 C +ATOM 2115 CE LYS H 62 22.373 -8.596 13.058 1.00 47.24 C +ATOM 2116 NZ LYS H 62 23.224 -9.749 12.614 1.00 49.11 N +ATOM 2117 N PHE H 63 20.796 -3.324 9.519 1.00 40.27 N +ATOM 2118 CA PHE H 63 20.847 -2.141 8.658 1.00 42.60 C +ATOM 2119 C PHE H 63 19.411 -1.887 8.222 1.00 47.68 C +ATOM 2120 O PHE H 63 19.100 -1.651 7.051 1.00 47.15 O +ATOM 2121 CB PHE H 63 21.756 -2.393 7.452 1.00 36.85 C +ATOM 2122 CG PHE H 63 23.182 -2.685 7.826 1.00 28.24 C +ATOM 2123 CD1 PHE H 63 24.051 -1.656 8.153 1.00 23.83 C +ATOM 2124 CD2 PHE H 63 23.643 -3.994 7.885 1.00 23.95 C +ATOM 2125 CE1 PHE H 63 25.359 -1.927 8.538 1.00 24.09 C +ATOM 2126 CE2 PHE H 63 24.943 -4.272 8.265 1.00 19.55 C +ATOM 2127 CZ PHE H 63 25.805 -3.239 8.594 1.00 25.80 C +ATOM 2128 N GLN H 64 18.543 -1.957 9.220 1.00 53.44 N +ATOM 2129 CA GLN H 64 17.112 -1.771 9.070 1.00 54.74 C +ATOM 2130 C GLN H 64 16.746 -0.485 8.361 1.00 50.87 C +ATOM 2131 O GLN H 64 16.754 0.586 8.959 1.00 51.83 O +ATOM 2132 CB GLN H 64 16.453 -1.787 10.451 1.00 59.94 C +ATOM 2133 CG GLN H 64 17.449 -1.820 11.613 1.00 64.89 C +ATOM 2134 CD GLN H 64 17.691 -0.454 12.228 1.00 69.88 C +ATOM 2135 OE1 GLN H 64 17.958 -0.335 13.425 1.00 73.28 O +ATOM 2136 NE2 GLN H 64 17.597 0.589 11.407 1.00 71.38 N +ATOM 2137 N GLY H 65 16.424 -0.596 7.082 1.00 48.72 N +ATOM 2138 CA GLY H 65 16.023 0.577 6.332 1.00 48.88 C +ATOM 2139 C GLY H 65 16.835 1.829 6.592 1.00 46.31 C +ATOM 2140 O GLY H 65 16.297 2.893 6.902 1.00 47.12 O +ATOM 2141 N LYS H 66 18.147 1.682 6.501 1.00 42.56 N +ATOM 2142 CA LYS H 66 19.066 2.791 6.650 1.00 36.27 C +ATOM 2143 C LYS H 66 19.923 2.621 5.400 1.00 32.72 C +ATOM 2144 O LYS H 66 20.478 3.577 4.857 1.00 27.32 O +ATOM 2145 CB LYS H 66 19.902 2.642 7.916 1.00 40.24 C +ATOM 2146 CG LYS H 66 19.804 3.846 8.844 1.00 43.49 C +ATOM 2147 CD LYS H 66 21.148 4.166 9.509 1.00 48.50 C +ATOM 2148 CE LYS H 66 20.966 4.531 10.986 1.00 49.03 C +ATOM 2149 NZ LYS H 66 21.761 5.726 11.396 1.00 51.33 N +ATOM 2150 N ALA H 67 19.984 1.374 4.940 1.00 28.00 N +ATOM 2151 CA ALA H 67 20.726 1.005 3.746 1.00 26.18 C +ATOM 2152 C ALA H 67 19.726 0.562 2.689 1.00 25.14 C +ATOM 2153 O ALA H 67 18.781 -0.165 2.990 1.00 26.09 O +ATOM 2154 CB ALA H 67 21.692 -0.128 4.058 1.00 24.46 C +ATOM 2155 N THR H 68 19.921 1.030 1.460 1.00 25.72 N +ATOM 2156 CA THR H 68 19.058 0.669 0.333 1.00 26.05 C +ATOM 2157 C THR H 68 19.966 0.273 -0.815 1.00 26.40 C +ATOM 2158 O THR H 68 20.765 1.079 -1.281 1.00 25.92 O +ATOM 2159 CB THR H 68 18.169 1.851 -0.180 1.00 25.94 C +ATOM 2160 OG1 THR H 68 17.240 2.255 0.834 1.00 23.45 O +ATOM 2161 CG2 THR H 68 17.379 1.418 -1.413 1.00 23.80 C +ATOM 2162 N ILE H 69 19.845 -0.968 -1.269 1.00 27.65 N +ATOM 2163 CA ILE H 69 20.664 -1.447 -2.381 1.00 27.28 C +ATOM 2164 C ILE H 69 19.846 -1.447 -3.684 1.00 24.93 C +ATOM 2165 O ILE H 69 18.672 -1.823 -3.690 1.00 23.93 O +ATOM 2166 CB ILE H 69 21.225 -2.877 -2.067 1.00 28.18 C +ATOM 2167 CG1 ILE H 69 22.419 -3.191 -2.969 1.00 27.27 C +ATOM 2168 CG2 ILE H 69 20.129 -3.920 -2.202 1.00 25.16 C +ATOM 2169 CD1 ILE H 69 23.136 -4.483 -2.603 1.00 22.69 C +ATOM 2170 N THR H 70 20.452 -0.967 -4.771 1.00 25.19 N +ATOM 2171 CA THR H 70 19.795 -0.929 -6.084 1.00 25.92 C +ATOM 2172 C THR H 70 20.815 -1.302 -7.165 1.00 25.37 C +ATOM 2173 O THR H 70 22.008 -1.391 -6.896 1.00 28.92 O +ATOM 2174 CB THR H 70 19.177 0.480 -6.423 1.00 25.00 C +ATOM 2175 OG1 THR H 70 20.145 1.510 -6.204 1.00 23.32 O +ATOM 2176 CG2 THR H 70 17.940 0.758 -5.570 1.00 18.86 C +ATOM 2177 N ALA H 71 20.357 -1.542 -8.385 1.00 25.62 N +ATOM 2178 CA ALA H 71 21.286 -1.902 -9.449 1.00 26.25 C +ATOM 2179 C ALA H 71 20.745 -1.494 -10.802 1.00 28.02 C +ATOM 2180 O ALA H 71 19.533 -1.482 -11.010 1.00 30.62 O +ATOM 2181 CB ALA H 71 21.543 -3.403 -9.432 1.00 22.51 C +ATOM 2182 N ASP H 72 21.638 -1.153 -11.722 1.00 27.91 N +ATOM 2183 CA ASP H 72 21.210 -0.782 -13.057 1.00 30.41 C +ATOM 2184 C ASP H 72 21.968 -1.604 -14.072 1.00 28.52 C +ATOM 2185 O ASP H 72 23.140 -1.341 -14.337 1.00 31.50 O +ATOM 2186 CB ASP H 72 21.467 0.690 -13.327 1.00 34.17 C +ATOM 2187 CG ASP H 72 21.061 1.081 -14.720 1.00 38.45 C +ATOM 2188 OD1 ASP H 72 19.843 1.170 -14.972 1.00 40.66 O +ATOM 2189 OD2 ASP H 72 21.954 1.279 -15.565 1.00 41.54 O +ATOM 2190 N THR H 73 21.297 -2.597 -14.643 1.00 27.70 N +ATOM 2191 CA THR H 73 21.935 -3.462 -15.622 1.00 28.79 C +ATOM 2192 C THR H 73 22.460 -2.694 -16.827 1.00 30.96 C +ATOM 2193 O THR H 73 23.482 -3.077 -17.400 1.00 32.20 O +ATOM 2194 CB THR H 73 20.978 -4.569 -16.110 1.00 24.38 C +ATOM 2195 OG1 THR H 73 19.728 -3.991 -16.491 1.00 29.89 O +ATOM 2196 CG2 THR H 73 20.732 -5.579 -15.014 1.00 25.74 C +ATOM 2197 N SER H 74 21.792 -1.601 -17.204 1.00 35.76 N +ATOM 2198 CA SER H 74 22.228 -0.822 -18.370 1.00 37.16 C +ATOM 2199 C SER H 74 23.612 -0.202 -18.193 1.00 36.79 C +ATOM 2200 O SER H 74 24.386 -0.125 -19.151 1.00 36.25 O +ATOM 2201 CB SER H 74 21.209 0.270 -18.733 1.00 41.43 C +ATOM 2202 OG SER H 74 20.391 0.627 -17.634 1.00 53.29 O +ATOM 2203 N SER H 75 23.936 0.239 -16.979 1.00 33.71 N +ATOM 2204 CA SER H 75 25.258 0.814 -16.741 1.00 28.96 C +ATOM 2205 C SER H 75 26.152 -0.210 -16.048 1.00 25.41 C +ATOM 2206 O SER H 75 27.303 0.075 -15.743 1.00 25.92 O +ATOM 2207 CB SER H 75 25.159 2.081 -15.889 1.00 25.37 C +ATOM 2208 OG SER H 75 24.066 2.012 -14.999 1.00 28.77 O +ATOM 2209 N ASN H 76 25.618 -1.405 -15.811 1.00 25.08 N +ATOM 2210 CA ASN H 76 26.380 -2.465 -15.161 1.00 23.43 C +ATOM 2211 C ASN H 76 26.857 -1.949 -13.821 1.00 21.70 C +ATOM 2212 O ASN H 76 27.989 -2.203 -13.405 1.00 20.06 O +ATOM 2213 CB ASN H 76 27.591 -2.840 -16.015 1.00 23.09 C +ATOM 2214 CG ASN H 76 27.858 -4.324 -16.024 1.00 21.66 C +ATOM 2215 OD1 ASN H 76 26.937 -5.131 -15.936 1.00 23.97 O +ATOM 2216 ND2 ASN H 76 29.124 -4.694 -16.137 1.00 22.61 N +ATOM 2217 N THR H 77 25.977 -1.239 -13.133 1.00 22.19 N +ATOM 2218 CA THR H 77 26.344 -0.643 -11.859 1.00 21.82 C +ATOM 2219 C THR H 77 25.420 -0.970 -10.699 1.00 22.20 C +ATOM 2220 O THR H 77 24.197 -1.041 -10.863 1.00 24.85 O +ATOM 2221 CB THR H 77 26.414 0.892 -12.002 1.00 20.42 C +ATOM 2222 OG1 THR H 77 27.438 1.235 -12.938 1.00 23.09 O +ATOM 2223 CG2 THR H 77 26.729 1.544 -10.676 1.00 20.32 C +ATOM 2224 N ALA H 78 26.023 -1.171 -9.529 1.00 21.02 N +ATOM 2225 CA ALA H 78 25.283 -1.447 -8.291 1.00 23.18 C +ATOM 2226 C ALA H 78 25.505 -0.263 -7.328 1.00 23.00 C +ATOM 2227 O ALA H 78 26.595 0.327 -7.292 1.00 24.77 O +ATOM 2228 CB ALA H 78 25.767 -2.752 -7.650 1.00 17.96 C +ATOM 2229 N TYR H 79 24.480 0.076 -6.551 1.00 22.16 N +ATOM 2230 CA TYR H 79 24.569 1.201 -5.628 1.00 19.80 C +ATOM 2231 C TYR H 79 24.253 0.870 -4.185 1.00 17.84 C +ATOM 2232 O TYR H 79 23.576 -0.109 -3.887 1.00 23.83 O +ATOM 2233 CB TYR H 79 23.614 2.309 -6.068 1.00 22.47 C +ATOM 2234 CG TYR H 79 23.701 2.680 -7.527 1.00 23.62 C +ATOM 2235 CD1 TYR H 79 22.968 1.982 -8.484 1.00 24.16 C +ATOM 2236 CD2 TYR H 79 24.498 3.746 -7.949 1.00 23.81 C +ATOM 2237 CE1 TYR H 79 23.020 2.334 -9.837 1.00 28.63 C +ATOM 2238 CE2 TYR H 79 24.559 4.109 -9.298 1.00 30.28 C +ATOM 2239 CZ TYR H 79 23.814 3.397 -10.236 1.00 30.83 C +ATOM 2240 OH TYR H 79 23.853 3.760 -11.567 1.00 34.74 O +ATOM 2241 N LEU H 80 24.752 1.712 -3.290 1.00 18.23 N +ATOM 2242 CA LEU H 80 24.491 1.570 -1.865 1.00 15.91 C +ATOM 2243 C LEU H 80 24.121 2.954 -1.353 1.00 18.37 C +ATOM 2244 O LEU H 80 24.935 3.866 -1.384 1.00 19.35 O +ATOM 2245 CB LEU H 80 25.727 1.058 -1.115 1.00 16.54 C +ATOM 2246 CG LEU H 80 25.609 0.966 0.409 1.00 16.24 C +ATOM 2247 CD1 LEU H 80 24.676 -0.167 0.793 1.00 21.35 C +ATOM 2248 CD2 LEU H 80 26.973 0.755 1.015 1.00 17.07 C +ATOM 2249 N HIS H 81 22.878 3.109 -0.911 1.00 20.67 N +ATOM 2250 CA HIS H 81 22.406 4.374 -0.372 1.00 19.73 C +ATOM 2251 C HIS H 81 22.305 4.249 1.147 1.00 18.59 C +ATOM 2252 O HIS H 81 21.700 3.309 1.653 1.00 20.60 O +ATOM 2253 CB HIS H 81 21.036 4.716 -0.949 1.00 21.94 C +ATOM 2254 CG HIS H 81 20.491 6.022 -0.461 1.00 27.40 C +ATOM 2255 ND1 HIS H 81 19.692 6.125 0.658 1.00 29.87 N +ATOM 2256 CD2 HIS H 81 20.661 7.284 -0.918 1.00 26.57 C +ATOM 2257 CE1 HIS H 81 19.396 7.394 0.868 1.00 27.29 C +ATOM 2258 NE2 HIS H 81 19.972 8.117 -0.074 1.00 24.60 N +ATOM 2259 N LEU H 82 22.899 5.195 1.864 1.00 18.08 N +ATOM 2260 CA LEU H 82 22.886 5.194 3.326 1.00 18.51 C +ATOM 2261 C LEU H 82 22.313 6.503 3.860 1.00 22.03 C +ATOM 2262 O LEU H 82 22.845 7.575 3.579 1.00 24.55 O +ATOM 2263 CB LEU H 82 24.304 5.013 3.857 1.00 17.55 C +ATOM 2264 CG LEU H 82 25.070 3.799 3.339 1.00 19.30 C +ATOM 2265 CD1 LEU H 82 26.575 4.035 3.464 1.00 16.60 C +ATOM 2266 CD2 LEU H 82 24.647 2.576 4.134 1.00 15.86 C +ATOM 2267 N SER H 82A 21.234 6.411 4.634 1.00 24.39 N +ATOM 2268 CA SER H 82A 20.578 7.589 5.193 1.00 25.39 C +ATOM 2269 C SER H 82A 20.869 7.805 6.683 1.00 27.99 C +ATOM 2270 O SER H 82A 21.389 6.920 7.365 1.00 26.42 O +ATOM 2271 CB SER H 82A 19.065 7.497 4.976 1.00 21.92 C +ATOM 2272 OG SER H 82A 18.474 6.516 5.815 1.00 25.84 O +ATOM 2273 N SER H 82B 20.531 8.999 7.170 1.00 29.47 N +ATOM 2274 CA SER H 82B 20.732 9.373 8.570 1.00 26.92 C +ATOM 2275 C SER H 82B 22.116 8.972 9.039 1.00 24.32 C +ATOM 2276 O SER H 82B 22.266 8.249 10.021 1.00 24.32 O +ATOM 2277 CB SER H 82B 19.668 8.709 9.447 1.00 24.99 C +ATOM 2278 OG SER H 82B 18.365 9.043 8.996 1.00 27.80 O +ATOM 2279 N LEU H 82C 23.131 9.454 8.335 1.00 26.18 N +ATOM 2280 CA LEU H 82C 24.502 9.104 8.673 1.00 25.08 C +ATOM 2281 C LEU H 82C 24.940 9.521 10.066 1.00 27.38 C +ATOM 2282 O LEU H 82C 24.716 10.651 10.494 1.00 28.26 O +ATOM 2283 CB LEU H 82C 25.459 9.676 7.633 1.00 20.83 C +ATOM 2284 CG LEU H 82C 25.285 9.055 6.246 1.00 16.68 C +ATOM 2285 CD1 LEU H 82C 26.125 9.805 5.244 1.00 16.16 C +ATOM 2286 CD2 LEU H 82C 25.677 7.582 6.289 1.00 17.01 C +ATOM 2287 N THR H 83 25.541 8.565 10.770 1.00 28.38 N +ATOM 2288 CA THR H 83 26.075 8.767 12.111 1.00 31.57 C +ATOM 2289 C THR H 83 27.536 8.298 12.062 1.00 29.36 C +ATOM 2290 O THR H 83 27.987 7.798 11.036 1.00 26.44 O +ATOM 2291 CB THR H 83 25.284 7.960 13.179 1.00 32.47 C +ATOM 2292 OG1 THR H 83 25.727 6.597 13.188 1.00 38.39 O +ATOM 2293 CG2 THR H 83 23.787 8.007 12.888 1.00 35.90 C +ATOM 2294 N SER H 84 28.275 8.462 13.152 1.00 28.63 N +ATOM 2295 CA SER H 84 29.672 8.056 13.164 1.00 31.72 C +ATOM 2296 C SER H 84 29.878 6.544 13.103 1.00 34.08 C +ATOM 2297 O SER H 84 30.943 6.082 12.690 1.00 34.31 O +ATOM 2298 CB SER H 84 30.377 8.617 14.402 1.00 33.45 C +ATOM 2299 OG SER H 84 29.982 7.927 15.573 1.00 34.77 O +ATOM 2300 N GLU H 85 28.875 5.772 13.519 1.00 34.73 N +ATOM 2301 CA GLU H 85 28.986 4.316 13.492 1.00 37.88 C +ATOM 2302 C GLU H 85 28.968 3.856 12.041 1.00 37.50 C +ATOM 2303 O GLU H 85 29.244 2.695 11.734 1.00 34.80 O +ATOM 2304 CB GLU H 85 27.823 3.682 14.251 1.00 45.86 C +ATOM 2305 CG GLU H 85 27.732 4.112 15.708 1.00 59.84 C +ATOM 2306 CD GLU H 85 27.412 2.951 16.640 1.00 66.85 C +ATOM 2307 OE1 GLU H 85 27.470 1.787 16.177 1.00 70.98 O +ATOM 2308 OE2 GLU H 85 27.103 3.201 17.830 1.00 70.17 O +ATOM 2309 N ASP H 86 28.646 4.798 11.156 1.00 35.93 N +ATOM 2310 CA ASP H 86 28.579 4.560 9.720 1.00 32.96 C +ATOM 2311 C ASP H 86 29.933 4.781 9.030 1.00 32.19 C +ATOM 2312 O ASP H 86 30.123 4.359 7.887 1.00 35.09 O +ATOM 2313 CB ASP H 86 27.512 5.466 9.093 1.00 30.48 C +ATOM 2314 CG ASP H 86 26.095 4.997 9.395 1.00 29.45 C +ATOM 2315 OD1 ASP H 86 25.834 3.789 9.283 1.00 33.83 O +ATOM 2316 OD2 ASP H 86 25.234 5.827 9.743 1.00 31.56 O +ATOM 2317 N SER H 87 30.868 5.443 9.710 1.00 28.20 N +ATOM 2318 CA SER H 87 32.197 5.667 9.133 1.00 28.80 C +ATOM 2319 C SER H 87 32.852 4.302 8.949 1.00 30.80 C +ATOM 2320 O SER H 87 32.878 3.486 9.875 1.00 31.83 O +ATOM 2321 CB SER H 87 33.073 6.518 10.059 1.00 27.36 C +ATOM 2322 OG SER H 87 32.468 7.766 10.331 1.00 27.19 O +ATOM 2323 N ALA H 88 33.376 4.051 7.756 1.00 28.50 N +ATOM 2324 CA ALA H 88 34.015 2.776 7.478 1.00 28.28 C +ATOM 2325 C ALA H 88 34.380 2.673 6.008 1.00 26.61 C +ATOM 2326 O ALA H 88 34.202 3.624 5.241 1.00 24.62 O +ATOM 2327 CB ALA H 88 33.077 1.625 7.861 1.00 26.19 C +ATOM 2328 N VAL H 89 34.914 1.512 5.638 1.00 27.14 N +ATOM 2329 CA VAL H 89 35.288 1.219 4.256 1.00 25.31 C +ATOM 2330 C VAL H 89 34.167 0.341 3.713 1.00 21.77 C +ATOM 2331 O VAL H 89 33.791 -0.651 4.339 1.00 22.72 O +ATOM 2332 CB VAL H 89 36.636 0.437 4.167 1.00 22.52 C +ATOM 2333 CG1 VAL H 89 36.998 0.189 2.720 1.00 20.22 C +ATOM 2334 CG2 VAL H 89 37.751 1.221 4.850 1.00 21.67 C +ATOM 2335 N TYR H 90 33.609 0.714 2.570 1.00 19.99 N +ATOM 2336 CA TYR H 90 32.546 -0.079 1.997 1.00 19.14 C +ATOM 2337 C TYR H 90 33.030 -0.778 0.746 1.00 19.67 C +ATOM 2338 O TYR H 90 33.543 -0.147 -0.180 1.00 22.26 O +ATOM 2339 CB TYR H 90 31.328 0.798 1.687 1.00 17.65 C +ATOM 2340 CG TYR H 90 30.603 1.237 2.934 1.00 15.90 C +ATOM 2341 CD1 TYR H 90 31.128 2.234 3.742 1.00 18.73 C +ATOM 2342 CD2 TYR H 90 29.424 0.615 3.341 1.00 21.36 C +ATOM 2343 CE1 TYR H 90 30.510 2.598 4.923 1.00 18.07 C +ATOM 2344 CE2 TYR H 90 28.791 0.976 4.530 1.00 18.00 C +ATOM 2345 CZ TYR H 90 29.345 1.969 5.312 1.00 19.95 C +ATOM 2346 OH TYR H 90 28.740 2.350 6.489 1.00 24.62 O +ATOM 2347 N TYR H 91 32.870 -2.095 0.725 1.00 19.93 N +ATOM 2348 CA TYR H 91 33.281 -2.881 -0.429 1.00 22.10 C +ATOM 2349 C TYR H 91 32.067 -3.449 -1.140 1.00 24.46 C +ATOM 2350 O TYR H 91 31.116 -3.890 -0.493 1.00 26.17 O +ATOM 2351 CB TYR H 91 34.153 -4.074 -0.014 1.00 20.52 C +ATOM 2352 CG TYR H 91 35.464 -3.752 0.669 1.00 18.95 C +ATOM 2353 CD1 TYR H 91 36.579 -3.349 -0.064 1.00 16.04 C +ATOM 2354 CD2 TYR H 91 35.603 -3.908 2.048 1.00 17.92 C +ATOM 2355 CE1 TYR H 91 37.805 -3.111 0.559 1.00 18.93 C +ATOM 2356 CE2 TYR H 91 36.820 -3.672 2.681 1.00 19.43 C +ATOM 2357 CZ TYR H 91 37.919 -3.274 1.938 1.00 21.19 C +ATOM 2358 OH TYR H 91 39.117 -3.035 2.584 1.00 23.50 O +ATOM 2359 N CYS H 92 32.078 -3.415 -2.470 1.00 25.54 N +ATOM 2360 CA CYS H 92 31.004 -4.048 -3.212 1.00 27.65 C +ATOM 2361 C CYS H 92 31.707 -5.343 -3.650 1.00 25.22 C +ATOM 2362 O CYS H 92 32.916 -5.358 -3.896 1.00 18.58 O +ATOM 2363 CB CYS H 92 30.560 -3.217 -4.420 1.00 29.80 C +ATOM 2364 SG CYS H 92 31.843 -3.044 -5.679 1.00 41.91 S +ATOM 2365 N ALA H 93 30.955 -6.432 -3.701 1.00 24.28 N +ATOM 2366 CA ALA H 93 31.517 -7.717 -4.062 1.00 21.06 C +ATOM 2367 C ALA H 93 30.551 -8.473 -4.931 1.00 18.42 C +ATOM 2368 O ALA H 93 29.337 -8.407 -4.729 1.00 19.45 O +ATOM 2369 CB ALA H 93 31.804 -8.526 -2.800 1.00 19.51 C +ATOM 2370 N ALA H 94 31.095 -9.200 -5.895 1.00 15.55 N +ATOM 2371 CA ALA H 94 30.280 -10.008 -6.785 1.00 15.53 C +ATOM 2372 C ALA H 94 30.525 -11.489 -6.513 1.00 10.89 C +ATOM 2373 O ALA H 94 31.638 -11.892 -6.205 1.00 14.56 O +ATOM 2374 CB ALA H 94 30.616 -9.687 -8.249 1.00 12.74 C +ATOM 2375 N ASP H 95 29.469 -12.285 -6.597 1.00 17.07 N +ATOM 2376 CA ASP H 95 29.580 -13.735 -6.443 1.00 19.49 C +ATOM 2377 C ASP H 95 30.346 -14.112 -7.703 1.00 21.58 C +ATOM 2378 O ASP H 95 30.238 -13.422 -8.716 1.00 26.94 O +ATOM 2379 CB ASP H 95 28.202 -14.402 -6.520 1.00 16.00 C +ATOM 2380 CG ASP H 95 27.427 -14.322 -5.227 1.00 18.14 C +ATOM 2381 OD1 ASP H 95 27.953 -13.775 -4.234 1.00 20.69 O +ATOM 2382 OD2 ASP H 95 26.277 -14.813 -5.205 1.00 19.31 O +ATOM 2383 N PRO H 96 31.118 -15.204 -7.676 1.00 22.97 N +ATOM 2384 CA PRO H 96 31.859 -15.583 -8.892 1.00 22.92 C +ATOM 2385 C PRO H 96 31.021 -15.475 -10.189 1.00 22.30 C +ATOM 2386 O PRO H 96 30.042 -16.193 -10.382 1.00 21.90 O +ATOM 2387 CB PRO H 96 32.290 -17.018 -8.609 1.00 21.88 C +ATOM 2388 CG PRO H 96 32.359 -17.087 -7.131 1.00 19.33 C +ATOM 2389 CD PRO H 96 31.349 -16.142 -6.566 1.00 18.43 C +ATOM 2390 N PRO H 97 31.405 -14.575 -11.097 1.00 22.25 N +ATOM 2391 CA PRO H 97 30.651 -14.418 -12.347 1.00 28.25 C +ATOM 2392 C PRO H 97 30.840 -15.555 -13.366 1.00 30.26 C +ATOM 2393 O PRO H 97 29.941 -15.825 -14.173 1.00 27.65 O +ATOM 2394 CB PRO H 97 31.147 -13.078 -12.895 1.00 27.98 C +ATOM 2395 CG PRO H 97 32.559 -12.977 -12.380 1.00 25.89 C +ATOM 2396 CD PRO H 97 32.560 -13.661 -11.023 1.00 25.59 C +ATOM 2397 N TYR H 98 32.011 -16.197 -13.317 1.00 31.04 N +ATOM 2398 CA TYR H 98 32.374 -17.290 -14.219 1.00 31.19 C +ATOM 2399 C TYR H 98 32.856 -18.542 -13.510 1.00 32.49 C +ATOM 2400 O TYR H 98 33.450 -18.476 -12.431 1.00 34.28 O +ATOM 2401 CB TYR H 98 33.496 -16.857 -15.161 1.00 33.45 C +ATOM 2402 CG TYR H 98 33.126 -15.717 -16.066 1.00 37.26 C +ATOM 2403 CD1 TYR H 98 32.049 -15.825 -16.948 1.00 34.94 C +ATOM 2404 CD2 TYR H 98 33.838 -14.513 -16.024 1.00 37.15 C +ATOM 2405 CE1 TYR H 98 31.685 -14.766 -17.763 1.00 35.04 C +ATOM 2406 CE2 TYR H 98 33.484 -13.446 -16.836 1.00 35.75 C +ATOM 2407 CZ TYR H 98 32.406 -13.579 -17.703 1.00 36.85 C +ATOM 2408 OH TYR H 98 32.058 -12.526 -18.516 1.00 39.13 O +ATOM 2409 N TYR H 99 32.618 -19.682 -14.151 1.00 33.70 N +ATOM 2410 CA TYR H 99 33.053 -20.975 -13.637 1.00 33.17 C +ATOM 2411 C TYR H 99 34.563 -21.003 -13.787 1.00 32.95 C +ATOM 2412 O TYR H 99 35.090 -20.725 -14.862 1.00 32.44 O +ATOM 2413 CB TYR H 99 32.437 -22.107 -14.461 1.00 34.60 C +ATOM 2414 CG TYR H 99 33.048 -23.470 -14.222 1.00 33.98 C +ATOM 2415 CD1 TYR H 99 34.140 -23.904 -14.959 1.00 35.32 C +ATOM 2416 CD2 TYR H 99 32.515 -24.330 -13.274 1.00 35.44 C +ATOM 2417 CE1 TYR H 99 34.683 -25.161 -14.759 1.00 41.25 C +ATOM 2418 CE2 TYR H 99 33.048 -25.588 -13.065 1.00 38.60 C +ATOM 2419 CZ TYR H 99 34.129 -26.000 -13.810 1.00 39.99 C +ATOM 2420 OH TYR H 99 34.651 -27.257 -13.610 1.00 45.35 O +ATOM 2421 N GLY H 100 35.261 -21.335 -12.710 1.00 32.72 N +ATOM 2422 CA GLY H 100 36.702 -21.372 -12.789 1.00 32.57 C +ATOM 2423 C GLY H 100 37.327 -20.282 -11.951 1.00 32.90 C +ATOM 2424 O GLY H 100 38.538 -20.281 -11.747 1.00 36.29 O +ATOM 2425 N HIS H 100A 36.533 -19.331 -11.476 1.00 32.72 N +ATOM 2426 CA HIS H 100A 37.130 -18.313 -10.633 1.00 35.12 C +ATOM 2427 C HIS H 100A 36.350 -17.892 -9.406 1.00 29.72 C +ATOM 2428 O HIS H 100A 35.162 -18.170 -9.273 1.00 32.54 O +ATOM 2429 CB HIS H 100A 37.523 -17.068 -11.427 1.00 43.95 C +ATOM 2430 CG HIS H 100A 38.644 -16.304 -10.787 1.00 51.54 C +ATOM 2431 ND1 HIS H 100A 38.449 -15.460 -9.712 1.00 54.04 N +ATOM 2432 CD2 HIS H 100A 39.981 -16.337 -11.000 1.00 52.90 C +ATOM 2433 CE1 HIS H 100A 39.615 -15.008 -9.290 1.00 52.73 C +ATOM 2434 NE2 HIS H 100A 40.561 -15.525 -10.054 1.00 56.08 N +ATOM 2435 N GLY H 100B 37.062 -17.221 -8.508 1.00 26.14 N +ATOM 2436 CA GLY H 100B 36.492 -16.759 -7.270 1.00 21.90 C +ATOM 2437 C GLY H 100B 35.641 -15.527 -7.421 1.00 20.38 C +ATOM 2438 O GLY H 100B 35.215 -15.167 -8.526 1.00 20.27 O +ATOM 2439 N ASP H 101 35.385 -14.881 -6.292 1.00 19.71 N +ATOM 2440 CA ASP H 101 34.565 -13.691 -6.287 1.00 20.44 C +ATOM 2441 C ASP H 101 35.348 -12.432 -6.618 1.00 20.72 C +ATOM 2442 O ASP H 101 36.566 -12.472 -6.833 1.00 20.13 O +ATOM 2443 CB ASP H 101 33.839 -13.540 -4.946 1.00 19.26 C +ATOM 2444 CG ASP H 101 34.782 -13.480 -3.746 1.00 23.36 C +ATOM 2445 OD1 ASP H 101 36.019 -13.544 -3.900 1.00 23.45 O +ATOM 2446 OD2 ASP H 101 34.262 -13.362 -2.620 1.00 24.31 O +ATOM 2447 N TYR H 102 34.625 -11.319 -6.678 1.00 19.43 N +ATOM 2448 CA TYR H 102 35.224 -10.037 -7.001 1.00 22.15 C +ATOM 2449 C TYR H 102 34.844 -8.970 -5.992 1.00 18.12 C +ATOM 2450 O TYR H 102 33.672 -8.792 -5.665 1.00 17.77 O +ATOM 2451 CB TYR H 102 34.806 -9.603 -8.414 1.00 23.63 C +ATOM 2452 CG TYR H 102 35.487 -10.408 -9.493 1.00 26.84 C +ATOM 2453 CD1 TYR H 102 36.778 -10.100 -9.901 1.00 27.51 C +ATOM 2454 CD2 TYR H 102 34.866 -11.520 -10.058 1.00 30.27 C +ATOM 2455 CE1 TYR H 102 37.437 -10.881 -10.842 1.00 32.65 C +ATOM 2456 CE2 TYR H 102 35.518 -12.309 -11.002 1.00 32.42 C +ATOM 2457 CZ TYR H 102 36.804 -11.984 -11.388 1.00 33.22 C +ATOM 2458 OH TYR H 102 37.461 -12.758 -12.319 1.00 35.60 O +ATOM 2459 N TRP H 103 35.861 -8.266 -5.506 1.00 18.54 N +ATOM 2460 CA TRP H 103 35.689 -7.201 -4.534 1.00 17.96 C +ATOM 2461 C TRP H 103 36.238 -5.893 -5.099 1.00 20.35 C +ATOM 2462 O TRP H 103 37.258 -5.893 -5.792 1.00 21.54 O +ATOM 2463 CB TRP H 103 36.452 -7.524 -3.252 1.00 15.76 C +ATOM 2464 CG TRP H 103 35.854 -8.592 -2.406 1.00 14.01 C +ATOM 2465 CD1 TRP H 103 35.668 -9.902 -2.743 1.00 12.00 C +ATOM 2466 CD2 TRP H 103 35.446 -8.467 -1.039 1.00 15.05 C +ATOM 2467 NE1 TRP H 103 35.175 -10.602 -1.669 1.00 14.62 N +ATOM 2468 CE2 TRP H 103 35.030 -9.744 -0.609 1.00 17.25 C +ATOM 2469 CE3 TRP H 103 35.396 -7.398 -0.132 1.00 15.34 C +ATOM 2470 CZ2 TRP H 103 34.566 -9.982 0.692 1.00 18.82 C +ATOM 2471 CZ3 TRP H 103 34.937 -7.635 1.159 1.00 16.77 C +ATOM 2472 CH2 TRP H 103 34.528 -8.916 1.558 1.00 18.65 C +ATOM 2473 N GLY H 104 35.562 -4.785 -4.792 1.00 22.91 N +ATOM 2474 CA GLY H 104 36.008 -3.483 -5.251 1.00 23.97 C +ATOM 2475 C GLY H 104 37.220 -3.022 -4.457 1.00 26.75 C +ATOM 2476 O GLY H 104 37.646 -3.702 -3.524 1.00 28.20 O +ATOM 2477 N GLN H 105 37.778 -1.870 -4.820 1.00 26.84 N +ATOM 2478 CA GLN H 105 38.949 -1.340 -4.130 1.00 29.65 C +ATOM 2479 C GLN H 105 38.568 -0.816 -2.749 1.00 27.57 C +ATOM 2480 O GLN H 105 39.428 -0.582 -1.895 1.00 26.91 O +ATOM 2481 CB GLN H 105 39.594 -0.217 -4.964 1.00 34.74 C +ATOM 2482 CG GLN H 105 38.880 1.139 -4.908 1.00 36.59 C +ATOM 2483 CD GLN H 105 37.967 1.393 -6.103 1.00 40.85 C +ATOM 2484 OE1 GLN H 105 37.437 0.457 -6.717 1.00 37.97 O +ATOM 2485 NE2 GLN H 105 37.777 2.668 -6.437 1.00 40.31 N +ATOM 2486 N GLY H 106 37.267 -0.645 -2.544 1.00 25.21 N +ATOM 2487 CA GLY H 106 36.776 -0.142 -1.280 1.00 24.58 C +ATOM 2488 C GLY H 106 36.535 1.352 -1.361 1.00 26.63 C +ATOM 2489 O GLY H 106 37.247 2.067 -2.061 1.00 26.19 O +ATOM 2490 N THR H 107 35.505 1.821 -0.668 1.00 27.44 N +ATOM 2491 CA THR H 107 35.197 3.242 -0.631 1.00 26.88 C +ATOM 2492 C THR H 107 35.168 3.641 0.834 1.00 27.42 C +ATOM 2493 O THR H 107 34.378 3.108 1.608 1.00 27.23 O +ATOM 2494 CB THR H 107 33.835 3.556 -1.260 1.00 24.47 C +ATOM 2495 OG1 THR H 107 33.902 3.344 -2.680 1.00 27.64 O +ATOM 2496 CG2 THR H 107 33.452 5.012 -0.984 1.00 22.66 C +ATOM 2497 N THR H 108 36.049 4.560 1.214 1.00 27.70 N +ATOM 2498 CA THR H 108 36.116 5.024 2.592 1.00 27.47 C +ATOM 2499 C THR H 108 35.119 6.143 2.844 1.00 27.07 C +ATOM 2500 O THR H 108 35.099 7.154 2.130 1.00 27.09 O +ATOM 2501 CB THR H 108 37.527 5.531 2.949 1.00 29.57 C +ATOM 2502 OG1 THR H 108 38.489 4.504 2.675 1.00 30.46 O +ATOM 2503 CG2 THR H 108 37.599 5.909 4.429 1.00 30.68 C +ATOM 2504 N LEU H 109 34.280 5.942 3.858 1.00 25.09 N +ATOM 2505 CA LEU H 109 33.288 6.928 4.232 1.00 24.47 C +ATOM 2506 C LEU H 109 33.603 7.394 5.636 1.00 25.07 C +ATOM 2507 O LEU H 109 33.746 6.588 6.547 1.00 26.47 O +ATOM 2508 CB LEU H 109 31.865 6.346 4.199 1.00 20.33 C +ATOM 2509 CG LEU H 109 30.816 7.253 4.870 1.00 19.50 C +ATOM 2510 CD1 LEU H 109 30.690 8.561 4.097 1.00 15.25 C +ATOM 2511 CD2 LEU H 109 29.484 6.557 4.946 1.00 14.01 C +ATOM 2512 N THR H 110 33.722 8.705 5.798 1.00 26.42 N +ATOM 2513 CA THR H 110 34.001 9.291 7.097 1.00 24.92 C +ATOM 2514 C THR H 110 32.852 10.239 7.446 1.00 25.73 C +ATOM 2515 O THR H 110 32.559 11.167 6.696 1.00 28.07 O +ATOM 2516 CB THR H 110 35.334 10.080 7.076 1.00 23.96 C +ATOM 2517 OG1 THR H 110 36.397 9.230 6.625 1.00 24.94 O +ATOM 2518 CG2 THR H 110 35.671 10.588 8.461 1.00 23.75 C +ATOM 2519 N VAL H 111 32.178 9.981 8.561 1.00 25.45 N +ATOM 2520 CA VAL H 111 31.081 10.831 9.016 1.00 25.13 C +ATOM 2521 C VAL H 111 31.585 11.567 10.263 1.00 27.86 C +ATOM 2522 O VAL H 111 31.860 10.953 11.296 1.00 28.87 O +ATOM 2523 CB VAL H 111 29.808 10.001 9.365 1.00 23.35 C +ATOM 2524 CG1 VAL H 111 28.627 10.921 9.624 1.00 18.88 C +ATOM 2525 CG2 VAL H 111 29.476 9.058 8.225 1.00 20.41 C +ATOM 2526 N SER H 112 31.720 12.887 10.141 1.00 29.94 N +ATOM 2527 CA SER H 112 32.207 13.745 11.220 1.00 29.73 C +ATOM 2528 C SER H 112 31.607 15.140 11.090 1.00 28.21 C +ATOM 2529 O SER H 112 31.280 15.582 9.992 1.00 25.29 O +ATOM 2530 CB SER H 112 33.735 13.851 11.146 1.00 32.33 C +ATOM 2531 OG SER H 112 34.258 14.653 12.193 1.00 33.92 O +ATOM 2532 N SER H 113 31.468 15.838 12.209 1.00 31.51 N +ATOM 2533 CA SER H 113 30.926 17.193 12.172 1.00 35.00 C +ATOM 2534 C SER H 113 32.073 18.186 12.033 1.00 32.54 C +ATOM 2535 O SER H 113 31.877 19.335 11.635 1.00 34.24 O +ATOM 2536 CB SER H 113 30.126 17.486 13.449 1.00 38.02 C +ATOM 2537 OG SER H 113 30.688 16.837 14.575 1.00 41.80 O +ATOM 2538 N ALA H 114 33.277 17.712 12.345 1.00 33.17 N +ATOM 2539 CA ALA H 114 34.495 18.519 12.289 1.00 30.31 C +ATOM 2540 C ALA H 114 34.693 19.288 10.987 1.00 30.16 C +ATOM 2541 O ALA H 114 34.257 18.855 9.924 1.00 33.09 O +ATOM 2542 CB ALA H 114 35.709 17.641 12.555 1.00 24.85 C +ATOM 2543 N LYS H 115 35.353 20.438 11.099 1.00 29.47 N +ATOM 2544 CA LYS H 115 35.663 21.302 9.968 1.00 30.01 C +ATOM 2545 C LYS H 115 37.070 20.963 9.522 1.00 30.87 C +ATOM 2546 O LYS H 115 37.813 20.282 10.233 1.00 31.76 O +ATOM 2547 CB LYS H 115 35.621 22.781 10.373 1.00 23.85 C +ATOM 2548 CG LYS H 115 34.300 23.460 10.086 1.00 25.19 C +ATOM 2549 CD LYS H 115 34.065 24.639 11.010 1.00 22.22 C +ATOM 2550 CE LYS H 115 34.943 25.803 10.638 1.00 19.24 C +ATOM 2551 NZ LYS H 115 34.693 27.004 11.473 1.00 19.04 N +ATOM 2552 N THR H 116 37.427 21.444 8.342 1.00 32.28 N +ATOM 2553 CA THR H 116 38.747 21.216 7.791 1.00 36.91 C +ATOM 2554 C THR H 116 39.716 22.042 8.626 1.00 37.81 C +ATOM 2555 O THR H 116 39.548 23.257 8.761 1.00 38.97 O +ATOM 2556 CB THR H 116 38.784 21.646 6.300 1.00 38.03 C +ATOM 2557 OG1 THR H 116 38.305 20.563 5.490 1.00 37.23 O +ATOM 2558 CG2 THR H 116 40.187 22.011 5.870 1.00 35.78 C +ATOM 2559 N THR H 117 40.709 21.371 9.204 1.00 39.22 N +ATOM 2560 CA THR H 117 41.709 22.026 10.043 1.00 38.94 C +ATOM 2561 C THR H 117 43.113 21.550 9.679 1.00 41.34 C +ATOM 2562 O THR H 117 43.347 20.355 9.505 1.00 41.17 O +ATOM 2563 CB THR H 117 41.480 21.715 11.533 1.00 35.71 C +ATOM 2564 OG1 THR H 117 40.083 21.761 11.828 1.00 31.18 O +ATOM 2565 CG2 THR H 117 42.194 22.727 12.394 1.00 36.97 C +ATOM 2566 N PRO H 118 44.065 22.486 9.549 1.00 44.15 N +ATOM 2567 CA PRO H 118 45.442 22.111 9.203 1.00 45.01 C +ATOM 2568 C PRO H 118 46.206 21.545 10.403 1.00 44.59 C +ATOM 2569 O PRO H 118 45.987 21.962 11.539 1.00 44.16 O +ATOM 2570 CB PRO H 118 46.055 23.417 8.701 1.00 45.77 C +ATOM 2571 CG PRO H 118 45.294 24.489 9.421 1.00 48.15 C +ATOM 2572 CD PRO H 118 43.904 23.945 9.698 1.00 45.80 C +ATOM 2573 N PRO H 119 47.115 20.587 10.160 1.00 43.14 N +ATOM 2574 CA PRO H 119 47.881 20.005 11.258 1.00 42.12 C +ATOM 2575 C PRO H 119 48.974 20.957 11.682 1.00 43.73 C +ATOM 2576 O PRO H 119 49.506 21.696 10.858 1.00 46.83 O +ATOM 2577 CB PRO H 119 48.463 18.739 10.652 1.00 40.19 C +ATOM 2578 CG PRO H 119 48.655 19.093 9.229 1.00 40.32 C +ATOM 2579 CD PRO H 119 47.498 19.997 8.867 1.00 42.63 C +ATOM 2580 N SER H 120 49.290 20.944 12.974 1.00 44.44 N +ATOM 2581 CA SER H 120 50.349 21.768 13.535 1.00 40.94 C +ATOM 2582 C SER H 120 51.493 20.791 13.727 1.00 43.47 C +ATOM 2583 O SER H 120 51.339 19.786 14.421 1.00 44.70 O +ATOM 2584 CB SER H 120 49.922 22.343 14.877 1.00 39.16 C +ATOM 2585 OG SER H 120 48.549 22.674 14.861 1.00 42.45 O +ATOM 2586 N VAL H 121 52.630 21.073 13.097 1.00 44.44 N +ATOM 2587 CA VAL H 121 53.790 20.190 13.170 1.00 44.74 C +ATOM 2588 C VAL H 121 54.858 20.721 14.110 1.00 44.27 C +ATOM 2589 O VAL H 121 55.282 21.868 13.996 1.00 44.78 O +ATOM 2590 CB VAL H 121 54.423 19.978 11.764 1.00 44.09 C +ATOM 2591 CG1 VAL H 121 55.312 18.749 11.768 1.00 42.36 C +ATOM 2592 CG2 VAL H 121 53.332 19.818 10.718 1.00 43.41 C +ATOM 2593 N TYR H 122 55.284 19.875 15.044 1.00 43.91 N +ATOM 2594 CA TYR H 122 56.310 20.244 16.007 1.00 41.47 C +ATOM 2595 C TYR H 122 57.482 19.283 15.913 1.00 41.81 C +ATOM 2596 O TYR H 122 57.310 18.087 15.670 1.00 41.37 O +ATOM 2597 CB TYR H 122 55.744 20.231 17.422 1.00 40.07 C +ATOM 2598 CG TYR H 122 54.562 21.149 17.619 1.00 38.42 C +ATOM 2599 CD1 TYR H 122 54.691 22.529 17.483 1.00 40.41 C +ATOM 2600 CD2 TYR H 122 53.313 20.637 17.956 1.00 40.60 C +ATOM 2601 CE1 TYR H 122 53.596 23.381 17.683 1.00 42.12 C +ATOM 2602 CE2 TYR H 122 52.212 21.477 18.159 1.00 41.97 C +ATOM 2603 CZ TYR H 122 52.358 22.845 18.024 1.00 42.63 C +ATOM 2604 OH TYR H 122 51.266 23.665 18.238 1.00 43.23 O +ATOM 2605 N PRO H 123 58.701 19.802 16.102 1.00 43.16 N +ATOM 2606 CA PRO H 123 59.899 18.965 16.031 1.00 44.39 C +ATOM 2607 C PRO H 123 60.235 18.273 17.359 1.00 44.66 C +ATOM 2608 O PRO H 123 60.067 18.843 18.449 1.00 40.89 O +ATOM 2609 CB PRO H 123 60.981 19.948 15.599 1.00 42.83 C +ATOM 2610 CG PRO H 123 60.533 21.268 16.207 1.00 44.37 C +ATOM 2611 CD PRO H 123 59.030 21.209 16.398 1.00 43.08 C +ATOM 2612 N LEU H 124 60.707 17.036 17.257 1.00 44.68 N +ATOM 2613 CA LEU H 124 61.075 16.275 18.438 1.00 45.88 C +ATOM 2614 C LEU H 124 62.554 15.919 18.375 1.00 48.03 C +ATOM 2615 O LEU H 124 62.954 15.022 17.632 1.00 48.14 O +ATOM 2616 CB LEU H 124 60.223 15.003 18.537 1.00 41.57 C +ATOM 2617 CG LEU H 124 58.697 15.184 18.483 1.00 38.42 C +ATOM 2618 CD1 LEU H 124 58.021 13.856 18.746 1.00 35.24 C +ATOM 2619 CD2 LEU H 124 58.244 16.215 19.502 1.00 36.71 C +ATOM 2620 N ALA H 125 63.360 16.643 19.149 1.00 53.23 N +ATOM 2621 CA ALA H 125 64.805 16.410 19.212 1.00 58.16 C +ATOM 2622 C ALA H 125 65.254 16.242 20.671 1.00 61.34 C +ATOM 2623 O ALA H 125 64.625 16.777 21.591 1.00 61.23 O +ATOM 2624 CB ALA H 125 65.555 17.567 18.559 1.00 56.38 C +ATOM 2625 N PRO H 126 66.357 15.498 20.896 1.00 66.04 N +ATOM 2626 CA PRO H 126 66.914 15.238 22.236 1.00 69.53 C +ATOM 2627 C PRO H 126 67.153 16.494 23.082 1.00 73.12 C +ATOM 2628 O PRO H 126 67.584 17.524 22.568 1.00 75.77 O +ATOM 2629 CB PRO H 126 68.217 14.489 21.948 1.00 68.81 C +ATOM 2630 CG PRO H 126 68.040 13.909 20.579 1.00 66.38 C +ATOM 2631 CD PRO H 126 67.156 14.860 19.832 1.00 66.30 C +ATOM 2632 N GLY H 127 66.888 16.397 24.382 1.00 76.15 N +ATOM 2633 CA GLY H 127 67.071 17.540 25.266 1.00 79.70 C +ATOM 2634 C GLY H 127 68.481 17.805 25.782 1.00 80.80 C +ATOM 2635 O GLY H 127 69.129 16.922 26.346 1.00 82.61 O +ATOM 2636 N SER H 128 68.944 19.039 25.595 0.00 99.00 N +ATOM 2637 CA SER H 128 70.272 19.456 26.040 0.00 99.00 C +ATOM 2638 C SER H 128 71.278 18.312 25.979 0.00 99.00 C +ATOM 2639 O SER H 128 71.941 18.109 24.962 0.00 99.00 O +ATOM 2640 CB SER H 128 70.198 20.001 27.469 0.00 99.00 C +ATOM 2641 OG SER H 128 69.982 21.401 27.471 0.00 99.00 O +ATOM 2642 N ALA H 129 71.385 17.568 27.076 0.00 99.00 N +ATOM 2643 CA ALA H 129 72.301 16.437 27.151 0.00 99.00 C +ATOM 2644 C ALA H 129 71.936 15.395 26.099 0.00 99.00 C +ATOM 2645 O ALA H 129 70.936 15.533 25.394 0.00 99.00 O +ATOM 2646 CB ALA H 129 72.248 15.817 28.542 0.00 99.00 C +ATOM 2647 N ALA H 130 72.752 14.352 25.996 0.00 99.00 N +ATOM 2648 CA ALA H 130 72.513 13.288 25.029 0.00 99.00 C +ATOM 2649 C ALA H 130 73.446 12.116 25.297 0.00 99.00 C +ATOM 2650 O ALA H 130 74.623 12.307 25.604 0.00 99.00 O +ATOM 2651 CB ALA H 130 72.723 13.812 23.614 0.00 99.00 C +ATOM 2652 N GLN H 133 72.918 10.902 25.180 0.00 99.00 N +ATOM 2653 CA GLN H 133 73.717 9.707 25.414 0.00 99.00 C +ATOM 2654 C GLN H 133 73.142 8.475 24.724 0.00 99.00 C +ATOM 2655 O GLN H 133 72.075 7.983 25.091 0.00 99.00 O +ATOM 2656 CB GLN H 133 73.839 9.440 26.916 0.00 99.00 C +ATOM 2657 CG GLN H 133 75.213 8.952 27.351 0.00 99.00 C +ATOM 2658 CD GLN H 133 75.846 8.012 26.343 0.00 99.00 C +ATOM 2659 OE1 GLN H 133 75.552 6.816 26.322 0.00 99.00 O +ATOM 2660 NE2 GLN H 133 76.720 8.549 25.500 0.00 99.00 N +ATOM 2661 N THR H 134 73.863 7.986 23.721 0.00 99.00 N +ATOM 2662 CA THR H 134 73.457 6.805 22.968 0.00 99.00 C +ATOM 2663 C THR H 134 74.660 6.269 22.202 0.00 99.00 C +ATOM 2664 O THR H 134 74.865 5.058 22.115 0.00 99.00 O +ATOM 2665 CB THR H 134 72.341 7.130 21.957 0.00 99.00 C +ATOM 2666 OG1 THR H 134 71.218 7.697 22.644 0.00 99.00 O +ATOM 2667 CG2 THR H 134 71.901 5.865 21.236 0.00 99.00 C +ATOM 2668 N ASN H 135 75.448 7.186 21.650 0.00 99.00 N +ATOM 2669 CA ASN H 135 76.643 6.837 20.892 0.00 99.00 C +ATOM 2670 C ASN H 135 76.325 6.069 19.613 0.00 99.00 C +ATOM 2671 O ASN H 135 75.474 5.179 19.603 0.00 99.00 O +ATOM 2672 CB ASN H 135 77.597 6.011 21.761 0.00 99.00 C +ATOM 2673 CG ASN H 135 79.055 6.263 21.430 0.00 99.00 C +ATOM 2674 OD1 ASN H 135 79.374 7.029 20.520 0.00 99.00 O +ATOM 2675 ND2 ASN H 135 79.949 5.619 22.170 0.00 99.00 N +ATOM 2676 N SER H 136 77.018 6.429 18.537 0.00 99.00 N +ATOM 2677 CA SER H 136 76.849 5.789 17.237 0.00 99.00 C +ATOM 2678 C SER H 136 75.520 6.097 16.551 0.00 99.00 C +ATOM 2679 O SER H 136 75.469 6.222 15.328 0.00 99.00 O +ATOM 2680 CB SER H 136 77.014 4.271 17.371 0.00 99.00 C +ATOM 2681 OG SER H 136 75.757 3.618 17.377 0.00 99.00 O +ATOM 2682 N MET H 137 74.447 6.219 17.328 1.00 63.33 N +ATOM 2683 CA MET H 137 73.133 6.502 16.748 1.00 62.50 C +ATOM 2684 C MET H 137 72.243 7.408 17.598 1.00 62.74 C +ATOM 2685 O MET H 137 72.398 7.480 18.824 1.00 65.47 O +ATOM 2686 CB MET H 137 72.386 5.198 16.479 1.00 64.64 C +ATOM 2687 CG MET H 137 73.136 4.223 15.604 1.00 69.12 C +ATOM 2688 SD MET H 137 72.554 4.270 13.907 1.00 75.16 S +ATOM 2689 CE MET H 137 71.007 3.356 14.020 1.00 74.07 C +ATOM 2690 N VAL H 138 71.301 8.082 16.930 1.00 59.39 N +ATOM 2691 CA VAL H 138 70.356 9.004 17.573 1.00 54.94 C +ATOM 2692 C VAL H 138 68.949 8.951 16.945 1.00 53.18 C +ATOM 2693 O VAL H 138 68.793 8.696 15.750 1.00 51.57 O +ATOM 2694 CB VAL H 138 70.872 10.458 17.500 1.00 52.46 C +ATOM 2695 CG1 VAL H 138 70.912 10.925 16.048 1.00 51.16 C +ATOM 2696 CG2 VAL H 138 69.993 11.365 18.344 1.00 50.84 C +ATOM 2697 N THR H 139 67.929 9.211 17.757 1.00 51.93 N +ATOM 2698 CA THR H 139 66.540 9.173 17.296 1.00 49.67 C +ATOM 2699 C THR H 139 65.835 10.522 17.418 1.00 49.16 C +ATOM 2700 O THR H 139 65.876 11.164 18.476 1.00 48.47 O +ATOM 2701 CB THR H 139 65.721 8.117 18.091 1.00 48.30 C +ATOM 2702 OG1 THR H 139 66.058 6.807 17.620 1.00 48.22 O +ATOM 2703 CG2 THR H 139 64.215 8.346 17.925 1.00 46.34 C +ATOM 2704 N LEU H 140 65.175 10.931 16.333 1.00 46.43 N +ATOM 2705 CA LEU H 140 64.451 12.199 16.294 1.00 42.59 C +ATOM 2706 C LEU H 140 63.002 11.985 15.863 1.00 40.08 C +ATOM 2707 O LEU H 140 62.689 11.009 15.187 1.00 41.04 O +ATOM 2708 CB LEU H 140 65.155 13.156 15.336 1.00 42.75 C +ATOM 2709 CG LEU H 140 66.679 13.182 15.507 1.00 43.71 C +ATOM 2710 CD1 LEU H 140 67.346 13.332 14.143 1.00 42.90 C +ATOM 2711 CD2 LEU H 140 67.076 14.321 16.449 1.00 39.30 C +ATOM 2712 N GLY H 141 62.118 12.898 16.249 1.00 36.59 N +ATOM 2713 CA GLY H 141 60.723 12.739 15.884 1.00 38.32 C +ATOM 2714 C GLY H 141 59.986 13.980 15.419 1.00 41.78 C +ATOM 2715 O GLY H 141 60.557 15.072 15.295 1.00 43.77 O +ATOM 2716 N CYS H 142 58.693 13.806 15.166 1.00 41.06 N +ATOM 2717 CA CYS H 142 57.846 14.893 14.708 1.00 41.65 C +ATOM 2718 C CYS H 142 56.445 14.679 15.250 1.00 36.61 C +ATOM 2719 O CYS H 142 55.937 13.564 15.217 1.00 33.80 O +ATOM 2720 CB CYS H 142 57.797 14.896 13.178 1.00 53.04 C +ATOM 2721 SG CYS H 142 58.132 16.484 12.340 1.00 66.73 S +ATOM 2722 N LEU H 143 55.826 15.750 15.735 1.00 34.83 N +ATOM 2723 CA LEU H 143 54.469 15.689 16.273 1.00 34.99 C +ATOM 2724 C LEU H 143 53.474 16.427 15.377 1.00 35.63 C +ATOM 2725 O LEU H 143 53.547 17.645 15.245 1.00 36.23 O +ATOM 2726 CB LEU H 143 54.426 16.308 17.676 1.00 36.39 C +ATOM 2727 CG LEU H 143 53.067 16.417 18.390 1.00 36.07 C +ATOM 2728 CD1 LEU H 143 52.557 15.026 18.742 1.00 36.39 C +ATOM 2729 CD2 LEU H 143 53.203 17.257 19.649 1.00 33.66 C +ATOM 2730 N VAL H 144 52.548 15.687 14.769 1.00 35.92 N +ATOM 2731 CA VAL H 144 51.522 16.271 13.896 1.00 36.89 C +ATOM 2732 C VAL H 144 50.206 16.251 14.675 1.00 35.79 C +ATOM 2733 O VAL H 144 49.589 15.200 14.840 1.00 36.92 O +ATOM 2734 CB VAL H 144 51.377 15.456 12.593 1.00 37.50 C +ATOM 2735 CG1 VAL H 144 50.834 16.347 11.484 1.00 38.70 C +ATOM 2736 CG2 VAL H 144 52.736 14.865 12.192 1.00 36.96 C +ATOM 2737 N LYS H 145 49.761 17.419 15.127 1.00 34.81 N +ATOM 2738 CA LYS H 145 48.576 17.479 15.967 1.00 34.39 C +ATOM 2739 C LYS H 145 47.409 18.378 15.578 1.00 34.11 C +ATOM 2740 O LYS H 145 47.595 19.457 15.027 1.00 36.40 O +ATOM 2741 CB LYS H 145 49.034 17.839 17.389 1.00 36.89 C +ATOM 2742 CG LYS H 145 47.923 17.999 18.414 1.00 37.92 C +ATOM 2743 CD LYS H 145 48.493 18.123 19.815 1.00 41.37 C +ATOM 2744 CE LYS H 145 47.620 17.388 20.820 1.00 45.83 C +ATOM 2745 NZ LYS H 145 48.146 16.020 21.129 1.00 50.89 N +ATOM 2746 N GLY H 146 46.203 17.909 15.903 1.00 33.76 N +ATOM 2747 CA GLY H 146 44.973 18.652 15.664 1.00 31.81 C +ATOM 2748 C GLY H 146 44.560 18.924 14.237 1.00 30.58 C +ATOM 2749 O GLY H 146 44.232 20.062 13.891 1.00 29.21 O +ATOM 2750 N TYR H 147 44.552 17.877 13.417 1.00 32.48 N +ATOM 2751 CA TYR H 147 44.184 18.012 12.014 1.00 31.14 C +ATOM 2752 C TYR H 147 42.962 17.193 11.590 1.00 32.69 C +ATOM 2753 O TYR H 147 42.657 16.146 12.171 1.00 31.61 O +ATOM 2754 CB TYR H 147 45.386 17.656 11.124 1.00 28.84 C +ATOM 2755 CG TYR H 147 45.764 16.187 11.098 1.00 24.54 C +ATOM 2756 CD1 TYR H 147 45.136 15.306 10.228 1.00 26.05 C +ATOM 2757 CD2 TYR H 147 46.768 15.686 11.925 1.00 24.10 C +ATOM 2758 CE1 TYR H 147 45.490 13.961 10.179 1.00 25.03 C +ATOM 2759 CE2 TYR H 147 47.133 14.342 11.885 1.00 23.50 C +ATOM 2760 CZ TYR H 147 46.486 13.487 11.008 1.00 26.37 C +ATOM 2761 OH TYR H 147 46.821 12.154 10.958 1.00 30.63 O +ATOM 2762 N PHE H 148 42.263 17.702 10.574 1.00 33.28 N +ATOM 2763 CA PHE H 148 41.088 17.051 10.010 1.00 33.55 C +ATOM 2764 C PHE H 148 40.850 17.573 8.596 1.00 35.25 C +ATOM 2765 O PHE H 148 41.007 18.767 8.329 1.00 34.80 O +ATOM 2766 CB PHE H 148 39.837 17.321 10.850 1.00 30.32 C +ATOM 2767 CG PHE H 148 38.613 16.576 10.367 1.00 32.76 C +ATOM 2768 CD1 PHE H 148 37.808 17.104 9.356 1.00 34.21 C +ATOM 2769 CD2 PHE H 148 38.283 15.330 10.897 1.00 31.51 C +ATOM 2770 CE1 PHE H 148 36.694 16.399 8.877 1.00 31.65 C +ATOM 2771 CE2 PHE H 148 37.168 14.616 10.427 1.00 31.13 C +ATOM 2772 CZ PHE H 148 36.377 15.154 9.415 1.00 29.74 C +ATOM 2773 N PRO H 149 40.505 16.672 7.661 1.00 38.04 N +ATOM 2774 CA PRO H 149 40.344 15.235 7.883 1.00 40.29 C +ATOM 2775 C PRO H 149 41.627 14.517 7.511 1.00 43.98 C +ATOM 2776 O PRO H 149 42.624 15.150 7.172 1.00 45.27 O +ATOM 2777 CB PRO H 149 39.205 14.853 6.945 1.00 40.49 C +ATOM 2778 CG PRO H 149 39.158 15.964 5.903 1.00 40.85 C +ATOM 2779 CD PRO H 149 40.155 17.029 6.280 1.00 38.84 C +ATOM 2780 N GLU H 150 41.604 13.194 7.581 1.00 46.96 N +ATOM 2781 CA GLU H 150 42.776 12.423 7.207 1.00 49.87 C +ATOM 2782 C GLU H 150 42.990 12.593 5.700 1.00 53.06 C +ATOM 2783 O GLU H 150 42.055 12.895 4.952 1.00 54.48 O +ATOM 2784 CB GLU H 150 42.567 10.940 7.528 1.00 48.96 C +ATOM 2785 CG GLU H 150 42.766 10.585 8.984 1.00 50.22 C +ATOM 2786 CD GLU H 150 43.888 9.586 9.198 1.00 52.07 C +ATOM 2787 OE1 GLU H 150 44.997 9.816 8.667 1.00 53.04 O +ATOM 2788 OE2 GLU H 150 43.661 8.572 9.900 1.00 51.71 O +ATOM 2789 N PRO H 151 44.224 12.383 5.233 1.00 53.93 N +ATOM 2790 CA PRO H 151 45.385 12.013 6.035 1.00 52.77 C +ATOM 2791 C PRO H 151 46.411 13.137 5.994 1.00 51.51 C +ATOM 2792 O PRO H 151 46.133 14.227 5.492 1.00 48.98 O +ATOM 2793 CB PRO H 151 45.898 10.781 5.310 1.00 53.80 C +ATOM 2794 CG PRO H 151 45.493 11.075 3.792 1.00 57.11 C +ATOM 2795 CD PRO H 151 44.567 12.301 3.807 1.00 55.10 C +ATOM 2796 N VAL H 152 47.586 12.861 6.551 1.00 51.20 N +ATOM 2797 CA VAL H 152 48.705 13.795 6.523 1.00 50.80 C +ATOM 2798 C VAL H 152 49.823 12.961 5.921 1.00 52.64 C +ATOM 2799 O VAL H 152 49.830 11.736 6.052 1.00 52.59 O +ATOM 2800 CB VAL H 152 49.163 14.261 7.917 1.00 47.56 C +ATOM 2801 CG1 VAL H 152 48.361 15.462 8.347 1.00 46.40 C +ATOM 2802 CG2 VAL H 152 49.055 13.127 8.911 1.00 43.44 C +ATOM 2803 N THR H 153 50.759 13.612 5.250 1.00 54.50 N +ATOM 2804 CA THR H 153 51.854 12.880 4.639 1.00 58.91 C +ATOM 2805 C THR H 153 53.175 13.273 5.257 1.00 56.76 C +ATOM 2806 O THR H 153 53.624 14.414 5.127 1.00 54.32 O +ATOM 2807 CB THR H 153 51.920 13.127 3.114 1.00 64.31 C +ATOM 2808 OG1 THR H 153 50.669 12.762 2.518 1.00 66.17 O +ATOM 2809 CG2 THR H 153 53.035 12.292 2.482 1.00 66.12 C +ATOM 2810 N VAL H 154 53.792 12.316 5.938 1.00 57.24 N +ATOM 2811 CA VAL H 154 55.073 12.569 6.573 1.00 59.26 C +ATOM 2812 C VAL H 154 56.184 11.761 5.917 1.00 58.61 C +ATOM 2813 O VAL H 154 56.043 10.563 5.646 1.00 58.11 O +ATOM 2814 CB VAL H 154 55.047 12.247 8.096 1.00 57.58 C +ATOM 2815 CG1 VAL H 154 56.287 12.842 8.779 1.00 53.54 C +ATOM 2816 CG2 VAL H 154 53.778 12.803 8.726 1.00 55.35 C +ATOM 2817 N THR H 156 57.282 12.455 5.649 1.00 57.11 N +ATOM 2818 CA THR H 156 58.463 11.868 5.048 1.00 53.92 C +ATOM 2819 C THR H 156 59.627 12.622 5.669 1.00 53.07 C +ATOM 2820 O THR H 156 59.466 13.757 6.136 1.00 49.40 O +ATOM 2821 CB THR H 156 58.491 12.068 3.517 1.00 52.81 C +ATOM 2822 OG1 THR H 156 58.335 13.459 3.212 1.00 49.09 O +ATOM 2823 CG2 THR H 156 57.373 11.280 2.854 1.00 52.47 C +ATOM 2824 N TRP H 157 60.791 11.984 5.693 1.00 54.47 N +ATOM 2825 CA TRP H 157 61.980 12.607 6.255 1.00 55.65 C +ATOM 2826 C TRP H 157 62.949 12.912 5.118 1.00 57.38 C +ATOM 2827 O TRP H 157 63.498 12.005 4.497 1.00 57.04 O +ATOM 2828 CB TRP H 157 62.621 11.675 7.293 1.00 53.15 C +ATOM 2829 CG TRP H 157 61.851 11.619 8.608 1.00 49.46 C +ATOM 2830 CD1 TRP H 157 60.936 10.670 8.989 1.00 46.79 C +ATOM 2831 CD2 TRP H 157 61.915 12.567 9.687 1.00 43.43 C +ATOM 2832 NE1 TRP H 157 60.430 10.973 10.231 1.00 44.99 N +ATOM 2833 CE2 TRP H 157 61.011 12.131 10.681 1.00 43.34 C +ATOM 2834 CE3 TRP H 157 62.645 13.741 9.906 1.00 37.83 C +ATOM 2835 CZ2 TRP H 157 60.820 12.830 11.879 1.00 40.66 C +ATOM 2836 CZ3 TRP H 157 62.454 14.435 11.096 1.00 39.65 C +ATOM 2837 CH2 TRP H 157 61.548 13.977 12.067 1.00 39.23 C +ATOM 2838 N ASN H 162 63.138 14.199 4.843 1.00 60.22 N +ATOM 2839 CA ASN H 162 64.019 14.637 3.768 1.00 62.94 C +ATOM 2840 C ASN H 162 63.573 14.075 2.425 1.00 64.03 C +ATOM 2841 O ASN H 162 64.328 13.378 1.755 1.00 65.29 O +ATOM 2842 CB ASN H 162 65.455 14.208 4.054 1.00 63.91 C +ATOM 2843 CG ASN H 162 66.105 15.062 5.107 1.00 63.56 C +ATOM 2844 OD1 ASN H 162 65.741 16.223 5.282 1.00 60.60 O +ATOM 2845 ND2 ASN H 162 67.070 14.494 5.820 1.00 63.88 N +ATOM 2846 N SER H 163 62.338 14.381 2.045 1.00 66.75 N +ATOM 2847 CA SER H 163 61.763 13.932 0.779 1.00 68.58 C +ATOM 2848 C SER H 163 62.125 12.503 0.393 1.00 71.16 C +ATOM 2849 O SER H 163 62.746 12.275 -0.644 1.00 72.64 O +ATOM 2850 CB SER H 163 62.187 14.876 -0.346 1.00 66.00 C +ATOM 2851 OG SER H 163 62.103 16.226 0.068 1.00 67.24 O +ATOM 2852 N GLY H 164 61.737 11.541 1.224 1.00 73.30 N +ATOM 2853 CA GLY H 164 62.030 10.149 0.927 1.00 73.58 C +ATOM 2854 C GLY H 164 63.493 9.756 1.046 1.00 73.95 C +ATOM 2855 O GLY H 164 63.853 8.619 0.740 1.00 72.58 O +ATOM 2856 N SER H 165 64.338 10.689 1.478 1.00 75.44 N +ATOM 2857 CA SER H 165 65.764 10.411 1.647 1.00 76.03 C +ATOM 2858 C SER H 165 65.930 9.314 2.699 1.00 75.25 C +ATOM 2859 O SER H 165 66.643 8.329 2.491 1.00 75.99 O +ATOM 2860 CB SER H 165 66.509 11.672 2.104 1.00 77.14 C +ATOM 2861 OG SER H 165 66.991 12.418 1.000 1.00 78.64 O +ATOM 2862 N LEU H 166 65.260 9.497 3.832 1.00 72.89 N +ATOM 2863 CA LEU H 166 65.308 8.539 4.925 1.00 68.21 C +ATOM 2864 C LEU H 166 64.123 7.590 4.808 1.00 68.34 C +ATOM 2865 O LEU H 166 62.984 7.963 5.089 1.00 69.02 O +ATOM 2866 CB LEU H 166 65.265 9.277 6.263 1.00 63.64 C +ATOM 2867 CG LEU H 166 66.494 10.135 6.556 1.00 57.77 C +ATOM 2868 CD1 LEU H 166 66.094 11.540 6.959 1.00 54.78 C +ATOM 2869 CD2 LEU H 166 67.280 9.473 7.649 1.00 61.18 C +ATOM 2870 N SER H 167 64.396 6.367 4.370 1.00 69.00 N +ATOM 2871 CA SER H 167 63.354 5.360 4.219 1.00 70.73 C +ATOM 2872 C SER H 167 63.707 4.127 5.050 1.00 69.70 C +ATOM 2873 O SER H 167 63.184 3.033 4.831 1.00 70.40 O +ATOM 2874 CB SER H 167 63.193 4.983 2.742 1.00 70.02 C +ATOM 2875 OG SER H 167 64.333 4.296 2.263 1.00 75.46 O +ATOM 2876 N SER H 168 64.602 4.322 6.011 1.00 68.51 N +ATOM 2877 CA SER H 168 65.032 3.251 6.898 1.00 66.96 C +ATOM 2878 C SER H 168 65.089 3.793 8.326 1.00 64.67 C +ATOM 2879 O SER H 168 65.466 4.949 8.548 1.00 64.62 O +ATOM 2880 CB SER H 168 66.403 2.730 6.461 1.00 67.37 C +ATOM 2881 OG SER H 168 66.431 2.507 5.059 1.00 66.33 O +ATOM 2882 N GLY H 169 64.703 2.962 9.290 1.00 61.27 N +ATOM 2883 CA GLY H 169 64.711 3.399 10.673 1.00 57.99 C +ATOM 2884 C GLY H 169 63.680 4.486 10.921 1.00 57.72 C +ATOM 2885 O GLY H 169 63.869 5.351 11.774 1.00 57.41 O +ATOM 2886 N VAL H 171 62.586 4.449 10.164 1.00 57.89 N +ATOM 2887 CA VAL H 171 61.514 5.433 10.308 1.00 55.95 C +ATOM 2888 C VAL H 171 60.256 4.799 10.900 1.00 54.55 C +ATOM 2889 O VAL H 171 59.850 3.694 10.519 1.00 52.39 O +ATOM 2890 CB VAL H 171 61.157 6.096 8.947 1.00 56.22 C +ATOM 2891 CG1 VAL H 171 59.699 6.555 8.937 1.00 54.98 C +ATOM 2892 CG2 VAL H 171 62.073 7.285 8.699 1.00 56.92 C +ATOM 2893 N HIS H 172 59.648 5.511 11.842 1.00 53.82 N +ATOM 2894 CA HIS H 172 58.440 5.038 12.497 1.00 51.07 C +ATOM 2895 C HIS H 172 57.385 6.130 12.560 1.00 49.99 C +ATOM 2896 O HIS H 172 57.445 7.010 13.419 1.00 51.69 O +ATOM 2897 CB HIS H 172 58.758 4.556 13.915 1.00 48.53 C +ATOM 2898 CG HIS H 172 59.558 3.292 13.952 1.00 48.92 C +ATOM 2899 ND1 HIS H 172 59.203 2.167 13.237 1.00 49.93 N +ATOM 2900 CD2 HIS H 172 60.705 2.980 14.600 1.00 46.74 C +ATOM 2901 CE1 HIS H 172 60.099 1.217 13.444 1.00 47.45 C +ATOM 2902 NE2 HIS H 172 61.020 1.685 14.266 1.00 45.42 N +ATOM 2903 N THR H 173 56.437 6.083 11.626 1.00 48.36 N +ATOM 2904 CA THR H 173 55.339 7.040 11.604 1.00 44.40 C +ATOM 2905 C THR H 173 54.165 6.247 12.149 1.00 42.17 C +ATOM 2906 O THR H 173 53.727 5.255 11.553 1.00 40.54 O +ATOM 2907 CB THR H 173 55.029 7.530 10.190 1.00 44.96 C +ATOM 2908 OG1 THR H 173 55.960 8.557 9.831 1.00 42.44 O +ATOM 2909 CG2 THR H 173 53.622 8.098 10.128 1.00 45.07 C +ATOM 2910 N PHE H 174 53.677 6.688 13.300 1.00 39.20 N +ATOM 2911 CA PHE H 174 52.596 6.014 13.993 1.00 35.34 C +ATOM 2912 C PHE H 174 51.189 6.358 13.516 1.00 34.00 C +ATOM 2913 O PHE H 174 50.925 7.467 13.038 1.00 34.26 O +ATOM 2914 CB PHE H 174 52.738 6.279 15.499 1.00 32.95 C +ATOM 2915 CG PHE H 174 54.068 5.844 16.060 1.00 31.36 C +ATOM 2916 CD1 PHE H 174 54.256 4.540 16.506 1.00 28.42 C +ATOM 2917 CD2 PHE H 174 55.148 6.719 16.088 1.00 29.44 C +ATOM 2918 CE1 PHE H 174 55.494 4.113 16.965 1.00 26.43 C +ATOM 2919 CE2 PHE H 174 56.388 6.300 16.544 1.00 28.43 C +ATOM 2920 CZ PHE H 174 56.561 4.991 16.982 1.00 27.82 C +ATOM 2921 N PRO H 175 50.266 5.391 13.622 1.00 32.00 N +ATOM 2922 CA PRO H 175 48.875 5.594 13.208 1.00 33.06 C +ATOM 2923 C PRO H 175 48.233 6.754 13.984 1.00 36.20 C +ATOM 2924 O PRO H 175 48.318 6.814 15.213 1.00 38.29 O +ATOM 2925 CB PRO H 175 48.210 4.254 13.520 1.00 32.42 C +ATOM 2926 CG PRO H 175 49.331 3.272 13.602 1.00 29.82 C +ATOM 2927 CD PRO H 175 50.498 4.027 14.131 1.00 30.52 C +ATOM 2928 N ALA H 176 47.595 7.676 13.268 1.00 36.77 N +ATOM 2929 CA ALA H 176 46.962 8.825 13.905 1.00 38.45 C +ATOM 2930 C ALA H 176 45.923 8.412 14.944 1.00 41.21 C +ATOM 2931 O ALA H 176 45.484 7.263 14.977 1.00 43.12 O +ATOM 2932 CB ALA H 176 46.320 9.716 12.846 1.00 35.01 C +ATOM 2933 N VAL H 177 45.546 9.349 15.809 1.00 42.66 N +ATOM 2934 CA VAL H 177 44.541 9.080 16.833 1.00 42.46 C +ATOM 2935 C VAL H 177 43.529 10.220 16.914 1.00 42.87 C +ATOM 2936 O VAL H 177 43.882 11.395 16.800 1.00 40.93 O +ATOM 2937 CB VAL H 177 45.182 8.876 18.212 1.00 43.36 C +ATOM 2938 CG1 VAL H 177 44.115 8.472 19.226 1.00 43.01 C +ATOM 2939 CG2 VAL H 177 46.263 7.808 18.122 1.00 41.40 C +ATOM 2940 N LEU H 178 42.263 9.865 17.102 1.00 43.69 N +ATOM 2941 CA LEU H 178 41.205 10.860 17.175 1.00 45.36 C +ATOM 2942 C LEU H 178 40.962 11.321 18.603 1.00 47.77 C +ATOM 2943 O LEU H 178 40.551 10.540 19.459 1.00 48.19 O +ATOM 2944 CB LEU H 178 39.911 10.289 16.586 1.00 44.23 C +ATOM 2945 CG LEU H 178 38.774 11.275 16.288 1.00 46.73 C +ATOM 2946 CD1 LEU H 178 39.201 12.250 15.209 1.00 44.83 C +ATOM 2947 CD2 LEU H 178 37.531 10.512 15.847 1.00 49.51 C +ATOM 2948 N GLN H 179 41.230 12.593 18.858 1.00 49.97 N +ATOM 2949 CA GLN H 179 41.008 13.149 20.183 1.00 54.37 C +ATOM 2950 C GLN H 179 40.036 14.317 20.083 1.00 53.57 C +ATOM 2951 O GLN H 179 40.432 15.463 19.851 1.00 53.36 O +ATOM 2952 CB GLN H 179 42.326 13.605 20.812 1.00 59.21 C +ATOM 2953 CG GLN H 179 43.176 14.524 19.952 1.00 65.50 C +ATOM 2954 CD GLN H 179 44.368 15.067 20.720 1.00 69.52 C +ATOM 2955 OE1 GLN H 179 45.474 15.179 20.186 1.00 71.16 O +ATOM 2956 NE2 GLN H 179 44.147 15.404 21.988 1.00 71.83 N +ATOM 2957 N SER H 180 38.756 14.003 20.245 1.00 52.40 N +ATOM 2958 CA SER H 180 37.699 14.996 20.175 1.00 50.31 C +ATOM 2959 C SER H 180 37.518 15.555 18.762 1.00 47.02 C +ATOM 2960 O SER H 180 37.662 16.754 18.533 1.00 46.68 O +ATOM 2961 CB SER H 180 37.986 16.131 21.159 1.00 52.94 C +ATOM 2962 OG SER H 180 37.183 17.263 20.872 1.00 62.23 O +ATOM 2963 N ASP H 183 37.205 14.672 17.819 1.00 42.95 N +ATOM 2964 CA ASP H 183 36.974 15.056 16.428 1.00 40.44 C +ATOM 2965 C ASP H 183 38.207 15.426 15.605 1.00 37.16 C +ATOM 2966 O ASP H 183 38.110 15.560 14.385 1.00 36.79 O +ATOM 2967 CB ASP H 183 35.960 16.201 16.364 1.00 43.73 C +ATOM 2968 CG ASP H 183 34.565 15.765 16.772 1.00 47.95 C +ATOM 2969 OD1 ASP H 183 34.398 14.594 17.183 1.00 52.42 O +ATOM 2970 OD2 ASP H 183 33.636 16.594 16.685 1.00 50.85 O +ATOM 2971 N LEU H 184 39.357 15.585 16.257 1.00 33.02 N +ATOM 2972 CA LEU H 184 40.595 15.927 15.557 1.00 29.54 C +ATOM 2973 C LEU H 184 41.631 14.808 15.652 1.00 29.20 C +ATOM 2974 O LEU H 184 41.661 14.057 16.632 1.00 31.90 O +ATOM 2975 CB LEU H 184 41.191 17.214 16.125 1.00 29.01 C +ATOM 2976 CG LEU H 184 40.517 18.547 15.788 1.00 30.21 C +ATOM 2977 CD1 LEU H 184 41.518 19.651 16.042 1.00 32.55 C +ATOM 2978 CD2 LEU H 184 40.037 18.591 14.339 1.00 28.36 C +ATOM 2979 N TYR H 185 42.481 14.698 14.634 1.00 29.07 N +ATOM 2980 CA TYR H 185 43.519 13.665 14.610 1.00 28.00 C +ATOM 2981 C TYR H 185 44.861 14.224 15.048 1.00 25.75 C +ATOM 2982 O TYR H 185 45.127 15.418 14.915 1.00 27.35 O +ATOM 2983 CB TYR H 185 43.689 13.085 13.202 1.00 31.58 C +ATOM 2984 CG TYR H 185 42.546 12.228 12.715 1.00 34.49 C +ATOM 2985 CD1 TYR H 185 42.471 10.878 13.046 1.00 35.51 C +ATOM 2986 CD2 TYR H 185 41.533 12.774 11.918 1.00 38.33 C +ATOM 2987 CE1 TYR H 185 41.410 10.090 12.599 1.00 39.74 C +ATOM 2988 CE2 TYR H 185 40.474 11.999 11.469 1.00 38.52 C +ATOM 2989 CZ TYR H 185 40.414 10.660 11.813 1.00 40.05 C +ATOM 2990 OH TYR H 185 39.345 9.898 11.390 1.00 45.63 O +ATOM 2991 N THR H 186 45.705 13.340 15.556 1.00 23.07 N +ATOM 2992 CA THR H 186 47.038 13.698 16.011 1.00 27.33 C +ATOM 2993 C THR H 186 47.905 12.484 15.766 1.00 28.19 C +ATOM 2994 O THR H 186 47.486 11.356 16.031 1.00 31.53 O +ATOM 2995 CB THR H 186 47.073 14.011 17.524 1.00 26.64 C +ATOM 2996 OG1 THR H 186 46.461 15.284 17.772 1.00 32.14 O +ATOM 2997 CG2 THR H 186 48.496 14.034 18.024 1.00 23.93 C +ATOM 2998 N LEU H 187 49.114 12.711 15.273 1.00 28.97 N +ATOM 2999 CA LEU H 187 50.030 11.617 14.995 1.00 30.75 C +ATOM 3000 C LEU H 187 51.470 12.085 15.202 1.00 30.98 C +ATOM 3001 O LEU H 187 51.728 13.278 15.316 1.00 31.88 O +ATOM 3002 CB LEU H 187 49.798 11.144 13.555 1.00 34.84 C +ATOM 3003 CG LEU H 187 50.903 10.664 12.611 1.00 39.94 C +ATOM 3004 CD1 LEU H 187 50.240 10.007 11.408 1.00 40.46 C +ATOM 3005 CD2 LEU H 187 51.786 11.820 12.155 1.00 37.17 C +ATOM 3006 N SER H 188 52.405 11.147 15.273 1.00 32.79 N +ATOM 3007 CA SER H 188 53.806 11.509 15.444 1.00 35.73 C +ATOM 3008 C SER H 188 54.694 10.555 14.653 1.00 37.17 C +ATOM 3009 O SER H 188 54.307 9.424 14.339 1.00 36.50 O +ATOM 3010 CB SER H 188 54.195 11.499 16.926 1.00 34.70 C +ATOM 3011 OG SER H 188 54.192 10.179 17.431 1.00 44.70 O +ATOM 3012 N SER H 189 55.890 11.026 14.323 1.00 38.54 N +ATOM 3013 CA SER H 189 56.827 10.228 13.555 1.00 38.00 C +ATOM 3014 C SER H 189 58.238 10.356 14.130 1.00 37.20 C +ATOM 3015 O SER H 189 58.604 11.392 14.689 1.00 35.38 O +ATOM 3016 CB SER H 189 56.785 10.681 12.088 1.00 39.15 C +ATOM 3017 OG SER H 189 57.977 10.367 11.394 1.00 44.15 O +ATOM 3018 N SER H 190 59.013 9.285 14.001 1.00 36.84 N +ATOM 3019 CA SER H 190 60.379 9.251 14.493 1.00 36.10 C +ATOM 3020 C SER H 190 61.263 8.590 13.451 1.00 37.72 C +ATOM 3021 O SER H 190 60.797 7.781 12.652 1.00 38.50 O +ATOM 3022 CB SER H 190 60.454 8.443 15.783 1.00 34.79 C +ATOM 3023 OG SER H 190 60.296 7.065 15.499 1.00 34.24 O +ATOM 3024 N VAL H 191 62.543 8.936 13.467 1.00 39.83 N +ATOM 3025 CA VAL H 191 63.505 8.361 12.538 1.00 42.67 C +ATOM 3026 C VAL H 191 64.847 8.291 13.246 1.00 44.86 C +ATOM 3027 O VAL H 191 65.151 9.143 14.086 1.00 45.24 O +ATOM 3028 CB VAL H 191 63.653 9.220 11.257 1.00 41.49 C +ATOM 3029 CG1 VAL H 191 64.177 10.611 11.619 1.00 38.10 C +ATOM 3030 CG2 VAL H 191 64.581 8.520 10.263 1.00 37.05 C +ATOM 3031 N THR H 192 65.638 7.274 12.911 1.00 50.21 N +ATOM 3032 CA THR H 192 66.961 7.091 13.513 1.00 55.76 C +ATOM 3033 C THR H 192 68.093 7.090 12.471 1.00 59.73 C +ATOM 3034 O THR H 192 68.033 6.403 11.439 1.00 59.15 O +ATOM 3035 CB THR H 192 67.023 5.784 14.348 1.00 55.04 C +ATOM 3036 OG1 THR H 192 65.846 5.680 15.161 1.00 54.27 O +ATOM 3037 CG2 THR H 192 68.254 5.783 15.253 1.00 52.85 C +ATOM 3038 N VAL H 193 69.126 7.875 12.762 1.00 64.95 N +ATOM 3039 CA VAL H 193 70.274 8.020 11.876 1.00 69.49 C +ATOM 3040 C VAL H 193 71.578 7.991 12.670 1.00 72.59 C +ATOM 3041 O VAL H 193 71.605 8.377 13.843 1.00 73.74 O +ATOM 3042 CB VAL H 193 70.206 9.369 11.123 1.00 70.08 C +ATOM 3043 CG1 VAL H 193 68.931 9.444 10.302 1.00 69.13 C +ATOM 3044 CG2 VAL H 193 70.257 10.528 12.125 1.00 68.36 C +ATOM 3045 N PRO H 194 72.680 7.543 12.038 1.00 74.66 N +ATOM 3046 CA PRO H 194 73.967 7.497 12.747 1.00 76.12 C +ATOM 3047 C PRO H 194 74.365 8.917 13.140 1.00 77.20 C +ATOM 3048 O PRO H 194 74.174 9.849 12.361 1.00 77.53 O +ATOM 3049 CB PRO H 194 74.927 6.893 11.721 1.00 75.32 C +ATOM 3050 CG PRO H 194 74.285 7.154 10.394 1.00 76.20 C +ATOM 3051 CD PRO H 194 72.803 7.077 10.645 1.00 75.30 C +ATOM 3052 N SER H 195 74.907 9.089 14.341 1.00 78.21 N +ATOM 3053 CA SER H 195 75.302 10.419 14.797 1.00 80.18 C +ATOM 3054 C SER H 195 76.412 11.046 13.928 1.00 80.54 C +ATOM 3055 O SER H 195 77.000 12.074 14.289 1.00 82.34 O +ATOM 3056 CB SER H 195 75.744 10.361 16.267 1.00 81.47 C +ATOM 3057 OG SER H 195 75.548 9.069 16.827 1.00 84.93 O +ATOM 3058 N SER H 196 76.686 10.426 12.781 1.00 79.33 N +ATOM 3059 CA SER H 196 77.698 10.917 11.841 1.00 76.55 C +ATOM 3060 C SER H 196 77.050 11.753 10.721 1.00 76.01 C +ATOM 3061 O SER H 196 77.716 12.563 10.069 1.00 74.56 O +ATOM 3062 CB SER H 196 78.487 9.735 11.244 1.00 74.32 C +ATOM 3063 OG SER H 196 77.900 9.234 10.053 1.00 68.25 O +ATOM 3064 N THR H 198 75.750 11.546 10.511 1.00 73.98 N +ATOM 3065 CA THR H 198 74.991 12.279 9.500 1.00 70.09 C +ATOM 3066 C THR H 198 74.237 13.440 10.189 1.00 70.19 C +ATOM 3067 O THR H 198 73.676 14.307 9.521 1.00 71.94 O +ATOM 3068 CB THR H 198 73.979 11.327 8.749 1.00 67.69 C +ATOM 3069 OG1 THR H 198 74.700 10.403 7.919 1.00 61.22 O +ATOM 3070 CG2 THR H 198 73.028 12.121 7.861 1.00 64.21 C +ATOM 3071 N TRP H 199 74.250 13.458 11.526 1.00 68.05 N +ATOM 3072 CA TRP H 199 73.580 14.497 12.328 1.00 64.91 C +ATOM 3073 C TRP H 199 74.369 14.724 13.627 1.00 62.51 C +ATOM 3074 O TRP H 199 74.921 13.782 14.198 1.00 62.44 O +ATOM 3075 CB TRP H 199 72.139 14.056 12.661 1.00 64.97 C +ATOM 3076 CG TRP H 199 71.155 15.163 13.060 1.00 61.54 C +ATOM 3077 CD1 TRP H 199 70.309 15.853 12.229 1.00 61.93 C +ATOM 3078 CD2 TRP H 199 70.868 15.630 14.390 1.00 59.96 C +ATOM 3079 NE1 TRP H 199 69.515 16.710 12.959 1.00 56.93 N +ATOM 3080 CE2 TRP H 199 69.838 16.591 14.285 1.00 58.56 C +ATOM 3081 CE3 TRP H 199 71.380 15.325 15.660 1.00 59.97 C +ATOM 3082 CZ2 TRP H 199 69.313 17.250 15.404 1.00 57.15 C +ATOM 3083 CZ3 TRP H 199 70.853 15.981 16.771 1.00 57.37 C +ATOM 3084 CH2 TRP H 199 69.831 16.932 16.633 1.00 57.33 C +ATOM 3085 N PRO H 200 74.420 15.975 14.121 1.00 60.61 N +ATOM 3086 CA PRO H 200 73.810 17.207 13.594 1.00 60.60 C +ATOM 3087 C PRO H 200 74.570 18.004 12.511 1.00 61.78 C +ATOM 3088 O PRO H 200 74.454 19.232 12.453 1.00 60.29 O +ATOM 3089 CB PRO H 200 73.580 18.055 14.847 1.00 57.50 C +ATOM 3090 CG PRO H 200 74.426 17.423 15.939 1.00 59.15 C +ATOM 3091 CD PRO H 200 75.140 16.229 15.377 1.00 58.23 C +ATOM 3092 N SER H 202 75.328 17.327 11.651 1.00 63.26 N +ATOM 3093 CA SER H 202 76.074 18.027 10.604 1.00 63.73 C +ATOM 3094 C SER H 202 75.266 18.121 9.313 1.00 64.33 C +ATOM 3095 O SER H 202 75.268 19.151 8.633 1.00 62.16 O +ATOM 3096 CB SER H 202 77.408 17.324 10.329 1.00 64.38 C +ATOM 3097 OG SER H 202 77.406 15.992 10.809 1.00 67.22 O +ATOM 3098 N GLU H 203 74.588 17.031 8.974 1.00 65.37 N +ATOM 3099 CA GLU H 203 73.754 16.989 7.785 1.00 66.53 C +ATOM 3100 C GLU H 203 72.309 17.152 8.261 1.00 67.55 C +ATOM 3101 O GLU H 203 71.865 16.457 9.175 1.00 65.13 O +ATOM 3102 CB GLU H 203 73.950 15.660 7.042 1.00 66.16 C +ATOM 3103 CG GLU H 203 75.074 15.697 6.007 1.00 68.37 C +ATOM 3104 CD GLU H 203 75.834 14.379 5.886 1.00 70.95 C +ATOM 3105 OE1 GLU H 203 75.293 13.431 5.268 1.00 73.79 O +ATOM 3106 OE2 GLU H 203 76.975 14.295 6.401 1.00 67.79 O +ATOM 3107 N THR H 204 71.588 18.086 7.649 1.00 69.98 N +ATOM 3108 CA THR H 204 70.207 18.370 8.028 1.00 72.88 C +ATOM 3109 C THR H 204 69.225 17.220 7.825 1.00 73.03 C +ATOM 3110 O THR H 204 69.260 16.514 6.813 1.00 72.86 O +ATOM 3111 CB THR H 204 69.656 19.603 7.270 1.00 73.77 C +ATOM 3112 OG1 THR H 204 69.471 19.273 5.888 1.00 76.84 O +ATOM 3113 CG2 THR H 204 70.620 20.775 7.381 1.00 74.05 C +ATOM 3114 N VAL H 205 68.352 17.046 8.813 1.00 72.74 N +ATOM 3115 CA VAL H 205 67.321 16.018 8.783 1.00 71.37 C +ATOM 3116 C VAL H 205 65.994 16.775 8.845 1.00 70.88 C +ATOM 3117 O VAL H 205 65.683 17.431 9.846 1.00 68.98 O +ATOM 3118 CB VAL H 205 67.460 15.050 9.990 1.00 69.20 C +ATOM 3119 CG1 VAL H 205 66.104 14.497 10.383 1.00 68.57 C +ATOM 3120 CG2 VAL H 205 68.412 13.911 9.632 1.00 67.18 C +ATOM 3121 N THR H 206 65.222 16.694 7.763 1.00 70.42 N +ATOM 3122 CA THR H 206 63.949 17.403 7.682 1.00 68.72 C +ATOM 3123 C THR H 206 62.695 16.539 7.764 1.00 64.48 C +ATOM 3124 O THR H 206 62.663 15.388 7.322 1.00 61.74 O +ATOM 3125 CB THR H 206 63.871 18.260 6.385 1.00 71.64 C +ATOM 3126 OG1 THR H 206 65.065 19.045 6.261 1.00 74.89 O +ATOM 3127 CG2 THR H 206 62.657 19.198 6.419 1.00 68.98 C +ATOM 3128 N CYS H 208 61.661 17.140 8.337 1.00 61.55 N +ATOM 3129 CA CYS H 208 60.366 16.509 8.512 1.00 58.72 C +ATOM 3130 C CYS H 208 59.376 17.226 7.609 1.00 54.56 C +ATOM 3131 O CYS H 208 59.158 18.430 7.734 1.00 48.56 O +ATOM 3132 CB CYS H 208 59.937 16.641 9.970 1.00 62.23 C +ATOM 3133 SG CYS H 208 58.315 15.945 10.389 1.00 59.43 S +ATOM 3134 N ASN H 209 58.776 16.480 6.696 1.00 53.95 N +ATOM 3135 CA ASN H 209 57.829 17.074 5.774 1.00 54.39 C +ATOM 3136 C ASN H 209 56.425 16.494 5.914 1.00 54.97 C +ATOM 3137 O ASN H 209 56.148 15.358 5.509 1.00 53.25 O +ATOM 3138 CB ASN H 209 58.343 16.907 4.343 1.00 52.06 C +ATOM 3139 CG ASN H 209 59.831 16.607 4.295 1.00 47.87 C +ATOM 3140 OD1 ASN H 209 60.231 15.457 4.124 1.00 46.64 O +ATOM 3141 ND2 ASN H 209 60.657 17.641 4.452 1.00 41.73 N +ATOM 3142 N VAL H 210 55.544 17.298 6.502 1.00 56.76 N +ATOM 3143 CA VAL H 210 54.156 16.908 6.710 1.00 55.88 C +ATOM 3144 C VAL H 210 53.247 17.762 5.839 1.00 55.38 C +ATOM 3145 O VAL H 210 53.306 18.996 5.864 1.00 52.82 O +ATOM 3146 CB VAL H 210 53.741 17.080 8.177 1.00 54.40 C +ATOM 3147 CG1 VAL H 210 52.268 16.750 8.339 1.00 55.99 C +ATOM 3148 CG2 VAL H 210 54.588 16.179 9.051 1.00 54.85 C +ATOM 3149 N ALA H 211 52.408 17.090 5.065 1.00 54.60 N +ATOM 3150 CA ALA H 211 51.495 17.780 4.181 1.00 54.70 C +ATOM 3151 C ALA H 211 50.068 17.307 4.392 1.00 55.56 C +ATOM 3152 O ALA H 211 49.795 16.107 4.490 1.00 53.10 O +ATOM 3153 CB ALA H 211 51.911 17.553 2.735 1.00 54.06 C +ATOM 3154 N HIS H 212 49.153 18.261 4.475 1.00 56.38 N +ATOM 3155 CA HIS H 212 47.759 17.916 4.640 1.00 57.08 C +ATOM 3156 C HIS H 212 47.026 18.114 3.308 1.00 61.21 C +ATOM 3157 O HIS H 212 46.896 19.239 2.815 1.00 61.18 O +ATOM 3158 CB HIS H 212 47.123 18.771 5.729 1.00 49.72 C +ATOM 3159 CG HIS H 212 45.834 18.215 6.239 1.00 43.54 C +ATOM 3160 ND1 HIS H 212 44.798 19.013 6.674 1.00 42.37 N +ATOM 3161 CD2 HIS H 212 45.403 16.938 6.361 1.00 42.43 C +ATOM 3162 CE1 HIS H 212 43.784 18.251 7.041 1.00 40.12 C +ATOM 3163 NE2 HIS H 212 44.125 16.988 6.860 1.00 40.46 N +ATOM 3164 N PRO H 213 46.562 17.009 2.698 1.00 63.87 N +ATOM 3165 CA PRO H 213 45.841 17.034 1.421 1.00 66.99 C +ATOM 3166 C PRO H 213 44.564 17.876 1.440 1.00 69.60 C +ATOM 3167 O PRO H 213 44.261 18.575 0.477 1.00 73.58 O +ATOM 3168 CB PRO H 213 45.539 15.557 1.142 1.00 66.00 C +ATOM 3169 CG PRO H 213 46.497 14.795 1.986 1.00 66.01 C +ATOM 3170 CD PRO H 213 46.732 15.636 3.203 1.00 65.85 C +ATOM 3171 N ALA H 214 43.820 17.815 2.538 1.00 70.44 N +ATOM 3172 CA ALA H 214 42.572 18.560 2.641 1.00 69.86 C +ATOM 3173 C ALA H 214 42.712 20.075 2.792 1.00 70.03 C +ATOM 3174 O ALA H 214 42.193 20.834 1.975 1.00 70.53 O +ATOM 3175 CB ALA H 214 41.748 18.008 3.777 1.00 71.17 C +ATOM 3176 N SER H 215 43.396 20.524 3.836 1.00 69.71 N +ATOM 3177 CA SER H 215 43.550 21.957 4.051 1.00 71.75 C +ATOM 3178 C SER H 215 44.606 22.546 3.132 1.00 74.73 C +ATOM 3179 O SER H 215 44.883 23.748 3.176 1.00 75.02 O +ATOM 3180 CB SER H 215 43.912 22.242 5.514 1.00 69.94 C +ATOM 3181 OG SER H 215 45.201 21.753 5.838 1.00 68.49 O +ATOM 3182 N SER H 216 45.186 21.693 2.292 1.00 77.47 N +ATOM 3183 CA SER H 216 46.224 22.114 1.356 1.00 80.64 C +ATOM 3184 C SER H 216 47.388 22.809 2.065 1.00 80.11 C +ATOM 3185 O SER H 216 47.839 23.878 1.643 1.00 80.56 O +ATOM 3186 CB SER H 216 45.636 23.049 0.294 1.00 82.50 C +ATOM 3187 OG SER H 216 44.548 22.434 -0.371 1.00 87.17 O +ATOM 3188 N THR H 217 47.861 22.202 3.151 1.00 79.55 N +ATOM 3189 CA THR H 217 48.989 22.752 3.894 1.00 78.55 C +ATOM 3190 C THR H 217 50.207 21.882 3.638 1.00 76.99 C +ATOM 3191 O THR H 217 50.110 20.656 3.558 1.00 76.06 O +ATOM 3192 CB THR H 217 48.748 22.778 5.429 1.00 78.04 C +ATOM 3193 OG1 THR H 217 48.170 21.536 5.846 1.00 78.10 O +ATOM 3194 CG2 THR H 217 47.832 23.927 5.816 1.00 77.97 C +ATOM 3195 N LYS H 218 51.352 22.530 3.491 1.00 75.55 N +ATOM 3196 CA LYS H 218 52.603 21.830 3.270 1.00 73.90 C +ATOM 3197 C LYS H 218 53.604 22.504 4.187 1.00 74.13 C +ATOM 3198 O LYS H 218 53.966 23.661 3.974 1.00 73.06 O +ATOM 3199 CB LYS H 218 53.051 21.960 1.813 1.00 72.29 C +ATOM 3200 CG LYS H 218 53.812 20.749 1.284 1.00 70.12 C +ATOM 3201 CD LYS H 218 55.232 20.687 1.841 1.00 67.44 C +ATOM 3202 CE LYS H 218 55.942 19.390 1.445 1.00 66.15 C +ATOM 3203 NZ LYS H 218 56.212 18.484 2.605 1.00 56.93 N +ATOM 3204 N VAL H 219 54.028 21.788 5.225 1.00 75.02 N +ATOM 3205 CA VAL H 219 54.990 22.336 6.170 1.00 74.88 C +ATOM 3206 C VAL H 219 56.185 21.414 6.391 1.00 74.09 C +ATOM 3207 O VAL H 219 56.049 20.192 6.448 1.00 72.16 O +ATOM 3208 CB VAL H 219 54.331 22.641 7.528 1.00 74.50 C +ATOM 3209 CG1 VAL H 219 55.069 23.789 8.206 1.00 74.27 C +ATOM 3210 CG2 VAL H 219 52.861 22.989 7.329 1.00 73.40 C +ATOM 3211 N ASP H 220 57.358 22.023 6.507 1.00 75.34 N +ATOM 3212 CA ASP H 220 58.598 21.291 6.715 1.00 77.58 C +ATOM 3213 C ASP H 220 59.166 21.669 8.072 1.00 78.97 C +ATOM 3214 O ASP H 220 59.311 22.856 8.378 1.00 79.40 O +ATOM 3215 CB ASP H 220 59.614 21.650 5.625 1.00 78.15 C +ATOM 3216 CG ASP H 220 59.378 20.894 4.332 1.00 79.07 C +ATOM 3217 OD1 ASP H 220 59.124 19.675 4.394 1.00 80.17 O +ATOM 3218 OD2 ASP H 220 59.447 21.517 3.253 1.00 78.99 O +ATOM 3219 N LYS H 221 59.482 20.666 8.888 1.00 78.69 N +ATOM 3220 CA LYS H 221 60.050 20.926 10.203 1.00 77.87 C +ATOM 3221 C LYS H 221 61.479 20.421 10.292 1.00 77.49 C +ATOM 3222 O LYS H 221 61.734 19.217 10.253 1.00 74.85 O +ATOM 3223 CB LYS H 221 59.207 20.282 11.300 1.00 77.79 C +ATOM 3224 CG LYS H 221 58.947 21.217 12.463 1.00 77.63 C +ATOM 3225 CD LYS H 221 58.287 22.500 11.987 1.00 80.02 C +ATOM 3226 CE LYS H 221 58.975 23.726 12.562 1.00 83.40 C +ATOM 3227 NZ LYS H 221 58.236 24.979 12.223 1.00 88.64 N +ATOM 3228 N LYS H 222 62.410 21.361 10.409 1.00 79.22 N +ATOM 3229 CA LYS H 222 63.822 21.030 10.496 1.00 81.10 C +ATOM 3230 C LYS H 222 64.180 20.648 11.923 1.00 82.04 C +ATOM 3231 O LYS H 222 63.960 21.426 12.860 1.00 81.53 O +ATOM 3232 CB LYS H 222 64.672 22.223 10.038 1.00 81.85 C +ATOM 3233 CG LYS H 222 66.119 22.189 10.511 1.00 84.61 C +ATOM 3234 CD LYS H 222 67.103 22.341 9.358 1.00 87.09 C +ATOM 3235 CE LYS H 222 68.517 21.938 9.782 1.00 88.25 C +ATOM 3236 NZ LYS H 222 68.622 20.487 10.138 1.00 87.71 N +ATOM 3237 N ILE H 223 64.718 19.440 12.078 1.00 82.44 N +ATOM 3238 CA ILE H 223 65.127 18.939 13.387 1.00 82.16 C +ATOM 3239 C ILE H 223 66.521 19.495 13.691 1.00 82.24 C +ATOM 3240 O ILE H 223 67.483 19.220 12.961 1.00 80.21 O +ATOM 3241 CB ILE H 223 65.160 17.390 13.408 1.00 81.09 C +ATOM 3242 CG1 ILE H 223 63.892 16.827 12.744 1.00 80.02 C +ATOM 3243 CG2 ILE H 223 65.305 16.894 14.841 1.00 82.23 C +ATOM 3244 CD1 ILE H 223 62.638 16.824 13.620 1.00 75.34 C +ATOM 3245 N VAL H 226 66.611 20.278 14.770 1.00 82.32 N +ATOM 3246 CA VAL H 226 67.861 20.923 15.184 1.00 81.62 C +ATOM 3247 C VAL H 226 68.415 20.497 16.555 1.00 81.88 C +ATOM 3248 O VAL H 226 67.737 20.737 17.577 1.00 83.87 O +ATOM 3249 CB VAL H 226 67.682 22.454 15.195 1.00 81.19 C +ATOM 3250 CG1 VAL H 226 67.609 22.980 13.770 1.00 80.24 C +ATOM 3251 CG2 VAL H 226 66.415 22.820 15.959 1.00 80.82 C +ATOM 3252 OXT VAL H 226 69.537 19.945 16.598 1.00 79.18 O +TER 3253 VAL H 226 +HETATM 3254 N1 GEP L 212 30.452 -13.021 -1.552 1.00 24.17 N +HETATM 3255 C2 GEP L 212 31.387 -12.584 -0.415 1.00 22.06 C +HETATM 3256 C3 GEP L 212 30.840 -11.319 0.244 1.00 19.83 C +HETATM 3257 C4 GEP L 212 29.456 -11.555 0.824 1.00 20.79 C +HETATM 3258 C5 GEP L 212 28.485 -12.136 -0.205 1.00 21.69 C +HETATM 3259 C6 GEP L 212 29.061 -13.344 -0.977 1.00 22.70 C +HETATM 3260 C7 GEP L 212 30.348 -11.888 -2.579 1.00 24.46 C +HETATM 3261 C8 GEP L 212 31.033 -14.252 -2.283 1.00 24.56 C +HETATM 3262 C9 GEP L 212 30.868 -15.555 -1.491 1.00 19.97 C +HETATM 3263 C10 GEP L 212 31.385 -16.672 -2.357 1.00 20.94 C +HETATM 3264 C11 GEP L 212 32.751 -16.820 -2.576 1.00 20.86 C +HETATM 3265 C12 GEP L 212 33.242 -17.815 -3.433 1.00 23.00 C +HETATM 3266 C13 GEP L 212 32.365 -18.693 -4.090 1.00 20.49 C +HETATM 3267 C14 GEP L 212 30.988 -18.551 -3.858 1.00 22.80 C +HETATM 3268 C15 GEP L 212 30.511 -17.545 -2.997 1.00 18.38 C +HETATM 3269 N16 GEP L 212 32.851 -19.654 -5.101 1.00 25.06 N +HETATM 3270 C17 GEP L 212 34.182 -19.738 -5.478 1.00 26.61 C +HETATM 3271 O18 GEP L 212 35.022 -18.992 -4.990 1.00 29.64 O +HETATM 3272 C19 GEP L 212 34.614 -20.744 -6.523 1.00 31.98 C +HETATM 3273 C20 GEP L 212 36.015 -20.445 -7.081 1.00 35.90 C +HETATM 3274 C21 GEP L 212 36.396 -21.403 -8.218 1.00 35.74 C +HETATM 3275 C22 GEP L 212 37.903 -21.524 -8.420 1.00 39.17 C +HETATM 3276 O23 GEP L 212 38.660 -20.653 -7.929 1.00 38.08 O +HETATM 3277 O24 GEP L 212 38.329 -22.498 -9.077 1.00 42.90 O +HETATM 3278 O HOH L 213 40.778 6.991 28.649 0.50 37.01 O +HETATM 3279 O HOH L 214 38.119 -29.969 -2.347 1.00 19.32 O +HETATM 3280 O HOH L 215 37.966 -24.817 6.001 1.00 19.90 O +HETATM 3281 O HOH L 216 42.918 -27.429 7.855 1.00 21.55 O +HETATM 3282 O HOH L 217 34.526 -9.871 11.357 1.00 21.93 O +HETATM 3283 O HOH L 218 42.012 -7.139 8.649 1.00 22.56 O +HETATM 3284 O HOH L 219 29.051 -20.343 -1.464 1.00 23.63 O +HETATM 3285 O HOH L 220 40.561 -19.121 12.398 1.00 24.25 O +HETATM 3286 O HOH L 221 22.876 -16.236 9.353 1.00 24.63 O +HETATM 3287 O HOH L 222 34.258 -32.792 9.412 1.00 24.71 O +HETATM 3288 O HOH L 223 44.424 -7.827 1.525 1.00 24.79 O +HETATM 3289 O HOH L 224 35.471 -14.691 16.097 1.00 25.36 O +HETATM 3290 O HOH L 225 48.806 -7.850 9.083 1.00 25.56 O +HETATM 3291 O HOH L 226 42.552 -26.921 -4.084 1.00 26.22 O +HETATM 3292 O HOH L 227 29.620 -14.209 13.092 1.00 26.59 O +HETATM 3293 O HOH L 228 43.820 -29.157 6.393 1.00 27.09 O +HETATM 3294 O HOH L 229 38.536 -14.039 16.560 1.00 27.13 O +HETATM 3295 O HOH L 230 43.135 -7.608 -2.164 1.00 27.44 O +HETATM 3296 O HOH L 231 59.758 -21.353 5.856 1.00 27.78 O +HETATM 3297 O HOH L 232 45.876 -10.168 0.877 1.00 27.89 O +HETATM 3298 O HOH L 233 46.201 -7.708 9.336 1.00 28.20 O +HETATM 3299 O HOH L 234 28.294 -29.583 6.393 1.00 28.58 O +HETATM 3300 O HOH L 235 59.345 -1.585 14.955 1.00 29.15 O +HETATM 3301 O HOH L 236 27.536 -19.912 -3.890 1.00 29.48 O +HETATM 3302 O HOH L 237 48.399 -27.505 4.599 1.00 29.51 O +HETATM 3303 O HOH L 238 19.993 -17.675 9.247 1.00 29.70 O +HETATM 3304 O HOH L 239 27.520 -10.083 8.119 1.00 29.71 O +HETATM 3305 O HOH L 240 29.463 -11.143 10.617 1.00 29.98 O +HETATM 3306 O HOH L 241 33.950 -29.203 1.018 1.00 30.56 O +HETATM 3307 O HOH L 242 45.704 -27.795 0.200 1.00 31.35 O +HETATM 3308 O HOH L 243 49.927 -9.905 11.213 1.00 31.41 O +HETATM 3309 O HOH L 244 37.047 -21.639 16.560 1.00 31.60 O +HETATM 3310 O HOH L 245 22.763 -15.970 -2.479 1.00 31.65 O +HETATM 3311 O HOH L 246 28.233 -23.869 -4.116 1.00 32.33 O +HETATM 3312 O HOH L 247 49.234 -28.486 2.250 1.00 32.53 O +HETATM 3313 O HOH L 248 44.405 -6.723 7.834 1.00 33.72 O +HETATM 3314 O HOH L 249 22.405 -20.176 14.845 1.00 33.75 O +HETATM 3315 O HOH L 250 26.583 -23.740 -2.389 1.00 33.76 O +HETATM 3316 O HOH L 251 39.823 -31.764 3.406 1.00 33.84 O +HETATM 3317 O HOH L 252 57.250 -1.804 8.003 1.00 33.85 O +HETATM 3318 O HOH L 253 63.056 -3.737 29.039 1.00 34.16 O +HETATM 3319 O HOH L 254 44.786 5.338 23.329 1.00 34.55 O +HETATM 3320 O HOH L 255 47.869 -17.549 20.181 1.00 34.56 O +HETATM 3321 O HOH L 256 40.327 -27.706 -5.519 1.00 34.77 O +HETATM 3322 O HOH L 257 52.905 -10.192 5.003 1.00 34.91 O +HETATM 3323 O HOH L 258 42.069 -15.017 -4.276 1.00 35.60 O +HETATM 3324 O HOH L 259 42.504 -10.549 15.872 1.00 36.83 O +HETATM 3325 O HOH L 260 56.404 2.235 10.445 1.00 36.87 O +HETATM 3326 O HOH L 261 53.248 -8.841 9.640 1.00 37.35 O +HETATM 3327 O HOH L 262 49.045 -23.741 14.814 1.00 37.45 O +HETATM 3328 O HOH L 263 40.685 -30.675 -5.996 1.00 37.50 O +HETATM 3329 O HOH L 264 63.025 0.653 11.453 1.00 37.62 O +HETATM 3330 O HOH L 265 39.957 -17.893 -7.068 1.00 37.83 O +HETATM 3331 O HOH L 266 47.381 -23.394 17.443 1.00 37.94 O +HETATM 3332 O HOH L 267 59.573 -23.345 4.729 1.00 38.51 O +HETATM 3333 O HOH L 268 50.337 -13.558 0.226 1.00 38.71 O +HETATM 3334 O HOH L 269 49.914 -8.633 7.016 1.00 38.72 O +HETATM 3335 O HOH L 270 53.031 -29.640 8.627 1.00 38.89 O +HETATM 3336 O HOH L 271 50.192 -10.152 -0.234 1.00 38.94 O +HETATM 3337 O HOH L 272 22.950 -16.764 17.026 1.00 39.18 O +HETATM 3338 O HOH L 273 40.129 -33.074 1.030 1.00 39.29 O +HETATM 3339 O HOH L 274 53.914 -11.251 17.061 1.00 39.59 O +HETATM 3340 O HOH L 275 28.220 -18.774 18.400 1.00 40.44 O +HETATM 3341 O HOH L 276 26.602 -30.437 12.105 1.00 40.46 O +HETATM 3342 O HOH L 277 44.367 -14.663 21.259 1.00 40.46 O +HETATM 3343 O HOH L 278 34.454 -8.018 14.279 1.00 41.22 O +HETATM 3344 O HOH L 279 41.088 -9.939 14.046 1.00 41.33 O +HETATM 3345 O HOH L 280 65.979 -2.780 19.660 1.00 41.53 O +HETATM 3346 O HOH L 281 50.596 -18.149 19.400 1.00 41.66 O +HETATM 3347 O HOH L 282 16.920 -12.683 4.560 1.00 42.00 O +HETATM 3348 O HOH L 283 23.749 -18.452 -0.824 1.00 42.02 O +HETATM 3349 O HOH L 284 44.624 2.349 3.538 1.00 42.03 O +HETATM 3350 O HOH L 285 43.341 -32.371 4.483 1.00 42.21 O +HETATM 3351 O HOH L 286 42.892 -3.618 6.989 1.00 42.30 O +HETATM 3352 O HOH L 287 57.325 -0.001 10.952 1.00 42.58 O +HETATM 3353 O HOH L 288 42.782 -1.972 4.721 1.00 42.77 O +HETATM 3354 O HOH L 289 24.074 -29.311 6.866 1.00 43.02 O +HETATM 3355 O HOH L 290 54.506 -6.051 29.872 1.00 43.30 O +HETATM 3356 O HOH L 291 29.192 -32.531 9.461 1.00 43.51 O +HETATM 3357 O HOH L 292 61.539 -14.242 10.844 1.00 43.86 O +HETATM 3358 O HOH L 293 51.282 9.084 20.837 1.00 44.70 O +HETATM 3359 O HOH L 294 38.222 -29.373 11.164 1.00 44.95 O +HETATM 3360 O HOH L 295 34.235 -12.982 17.495 1.00 45.57 O +HETATM 3361 O HOH L 296 57.407 -22.610 20.347 1.00 46.14 O +HETATM 3362 O HOH L 297 26.619 -31.589 7.229 1.00 46.55 O +HETATM 3363 O HOH L 298 38.464 -16.317 19.772 1.00 46.63 O +HETATM 3364 O HOH L 299 23.034 -18.163 -3.913 1.00 47.11 O +HETATM 3365 O HOH L 300 30.867 -22.093 -4.209 1.00 48.31 O +HETATM 3366 O HOH L 301 56.698 -1.576 13.137 1.00 48.33 O +HETATM 3367 O HOH L 302 50.962 -6.430 12.626 1.00 48.60 O +HETATM 3368 O HOH L 303 64.288 3.788 18.393 1.00 48.75 O +HETATM 3369 O HOH L 304 36.332 -21.879 19.014 1.00 49.45 O +HETATM 3370 O HOH L 305 23.276 -26.673 7.020 1.00 49.73 O +HETATM 3371 O HOH L 306 55.191 -14.170 20.890 1.00 49.83 O +HETATM 3372 O HOH L 307 30.030 -30.317 13.226 1.00 50.29 O +HETATM 3373 O HOH L 308 48.314 -4.164 1.415 1.00 50.40 O +HETATM 3374 O HOH L 309 49.026 -29.999 5.981 1.00 50.87 O +HETATM 3375 O HOH L 310 62.073 22.325 24.955 1.00 51.27 O +HETATM 3376 O HOH L 311 66.040 10.481 31.119 1.00 52.74 O +HETATM 3377 O HOH L 312 63.741 -21.686 7.975 1.00 55.53 O +HETATM 3378 O HOH L 313 64.842 8.841 36.173 1.00 55.72 O +HETATM 3379 O HOH L 314 29.733 -25.667 17.456 1.00 56.10 O +HETATM 3380 O HOH L 315 45.185 -29.978 10.369 1.00 56.91 O +HETATM 3381 O HOH L 316 56.987 16.598 22.787 1.00 57.70 O +HETATM 3382 O HOH L 317 40.776 -4.483 -4.469 1.00 57.78 O +HETATM 3383 O HOH L 318 64.200 -11.988 11.989 1.00 58.23 O +HETATM 3384 O HOH L 319 30.549 -21.160 17.962 1.00 58.44 O +HETATM 3385 O HOH L 320 42.236 -29.990 2.212 1.00 58.69 O +HETATM 3386 O HOH L 321 21.350 -18.904 -6.231 1.00 60.16 O +HETATM 3387 O HOH L 322 47.827 -2.537 15.308 1.00 63.82 O +HETATM 3388 O HOH L 323 51.971 -6.647 5.119 1.00 64.37 O +HETATM 3389 O HOH L 324 58.850 12.559 39.739 1.00 65.84 O +HETATM 3390 O HOH L 325 55.570 -10.024 6.192 1.00 66.68 O +HETATM 3391 O HOH L 326 59.280 -8.068 34.923 1.00 69.45 O +HETATM 3392 O HOH L 327 65.315 0.341 36.714 1.00 72.64 O +HETATM 3393 O HOH L 328 52.686 -22.106 15.312 1.00 75.17 O +HETATM 3394 O HOH L 329 20.763 -26.196 1.029 1.00 77.12 O +HETATM 3395 O HOH L 330 22.030 -21.034 -0.139 1.00 80.32 O +HETATM 3396 O HOH L 331 65.859 11.209 23.355 1.00 82.69 O +HETATM 3397 O HOH L 332 35.791 -15.175 20.310 1.00 83.00 O +HETATM 3398 O HOH L 333 40.931 10.098 33.908 1.00 87.92 O +HETATM 3399 O HOH H 227 31.398 7.252 -3.145 1.00 19.80 O +HETATM 3400 O HOH H 228 15.592 -3.123 -6.564 1.00 20.64 O +HETATM 3401 O HOH H 229 26.692 1.471 8.149 1.00 20.83 O +HETATM 3402 O HOH H 230 28.188 -12.095 -17.537 1.00 21.18 O +HETATM 3403 O HOH H 231 20.601 2.442 -3.637 1.00 21.21 O +HETATM 3404 O HOH H 232 33.158 17.057 8.177 1.00 21.50 O +HETATM 3405 O HOH H 233 38.345 -12.139 -3.701 1.00 22.07 O +HETATM 3406 O HOH H 234 37.010 4.531 -3.726 1.00 22.13 O +HETATM 3407 O HOH H 235 27.963 9.995 -3.521 1.00 22.28 O +HETATM 3408 O HOH H 236 25.826 -7.890 8.971 1.00 22.34 O +HETATM 3409 O HOH H 237 19.693 11.332 6.026 1.00 23.34 O +HETATM 3410 O HOH H 238 36.713 9.542 3.849 1.00 23.71 O +HETATM 3411 O HOH H 239 26.068 17.543 11.546 1.00 24.64 O +HETATM 3412 O HOH H 240 38.793 -8.995 -6.184 1.00 25.86 O +HETATM 3413 O HOH H 241 37.892 5.458 -0.846 1.00 26.55 O +HETATM 3414 O HOH H 242 20.158 -14.192 -13.968 1.00 26.89 O +HETATM 3415 O HOH H 243 36.326 13.660 13.641 1.00 27.29 O +HETATM 3416 O HOH H 244 19.607 3.546 -7.728 1.00 27.36 O +HETATM 3417 O HOH H 245 31.929 11.168 -4.425 1.00 28.61 O +HETATM 3418 O HOH H 246 32.949 3.611 12.903 1.00 29.13 O +HETATM 3419 O HOH H 247 16.108 -1.715 -4.067 1.00 29.22 O +HETATM 3420 O HOH H 248 17.916 -2.229 -13.880 1.00 29.31 O +HETATM 3421 O HOH H 249 33.999 9.267 -7.266 1.00 29.55 O +HETATM 3422 O HOH H 250 31.551 3.708 -10.231 1.00 30.46 O +HETATM 3423 O HOH H 251 24.075 -6.729 -16.342 1.00 30.52 O +HETATM 3424 O HOH H 252 34.185 -28.925 -11.573 1.00 30.55 O +HETATM 3425 O HOH H 253 17.397 -1.832 -8.070 1.00 31.05 O +HETATM 3426 O HOH H 254 67.601 9.733 20.496 1.00 31.33 O +HETATM 3427 O HOH H 255 37.552 -6.275 -8.532 1.00 31.39 O +HETATM 3428 O HOH H 256 18.734 -10.987 6.579 1.00 31.55 O +HETATM 3429 O HOH H 257 18.658 -11.703 -3.658 1.00 32.66 O +HETATM 3430 O HOH H 258 42.294 -1.224 -2.317 1.00 32.77 O +HETATM 3431 O HOH H 259 12.351 -7.140 -3.382 1.00 32.91 O +HETATM 3432 O HOH H 260 17.920 4.408 -3.474 1.00 33.14 O +HETATM 3433 O HOH H 261 31.542 -9.444 11.821 1.00 33.15 O +HETATM 3434 O HOH H 262 31.498 -5.132 -19.596 1.00 33.28 O +HETATM 3435 O HOH H 263 17.134 -4.089 -10.509 1.00 33.33 O +HETATM 3436 O HOH H 264 19.307 -17.546 2.139 1.00 33.37 O +HETATM 3437 O HOH H 265 36.093 -15.216 -13.336 1.00 33.84 O +HETATM 3438 O HOH H 266 38.959 8.294 -3.476 1.00 34.27 O +HETATM 3439 O HOH H 267 32.064 -1.650 -17.749 1.00 34.34 O +HETATM 3440 O HOH H 268 39.469 11.591 8.375 1.00 34.92 O +HETATM 3441 O HOH H 269 14.545 -2.647 3.695 1.00 34.94 O +HETATM 3442 O HOH H 270 40.984 -1.716 1.272 1.00 35.16 O +HETATM 3443 O HOH H 271 38.158 1.271 7.772 1.00 35.25 O +HETATM 3444 O HOH H 272 19.724 -15.230 -2.371 1.00 35.68 O +HETATM 3445 O HOH H 273 20.819 9.519 -3.346 1.00 35.77 O +HETATM 3446 O HOH H 274 63.339 4.915 14.304 1.00 36.13 O +HETATM 3447 O HOH H 275 18.647 8.144 -4.265 1.00 36.56 O +HETATM 3448 O HOH H 276 19.001 4.206 2.391 1.00 36.67 O +HETATM 3449 O HOH H 277 37.244 5.039 7.845 1.00 36.69 O +HETATM 3450 O HOH H 278 17.052 -12.236 8.516 1.00 37.12 O +HETATM 3451 O HOH H 279 17.912 -14.713 -13.377 1.00 37.22 O +HETATM 3452 O HOH H 280 26.505 -3.771 -19.685 1.00 37.87 O +HETATM 3453 O HOH H 281 26.009 -17.204 -6.166 1.00 38.52 O +HETATM 3454 O HOH H 282 15.471 -0.367 2.795 1.00 38.80 O +HETATM 3455 O HOH H 283 17.377 -14.561 -7.369 1.00 39.50 O +HETATM 3456 O HOH H 284 35.765 8.258 11.716 1.00 39.76 O +HETATM 3457 O HOH H 285 40.525 0.207 -8.134 1.00 40.18 O +HETATM 3458 O HOH H 286 35.666 -30.573 -12.930 1.00 40.61 O +HETATM 3459 O HOH H 287 26.970 -1.233 -19.535 1.00 40.65 O +HETATM 3460 O HOH H 288 16.896 -14.172 -10.756 1.00 40.75 O +HETATM 3461 O HOH H 289 32.503 13.128 -0.815 1.00 40.82 O +HETATM 3462 O HOH H 290 15.245 -3.107 -1.781 1.00 41.57 O +HETATM 3463 O HOH H 291 46.754 7.282 10.818 1.00 42.49 O +HETATM 3464 O HOH H 292 32.717 -3.445 10.863 1.00 42.64 O +HETATM 3465 O HOH H 293 13.673 -6.564 0.405 1.00 42.68 O +HETATM 3466 O HOH H 294 26.377 -16.461 -10.153 1.00 43.93 O +HETATM 3467 O HOH H 295 16.406 1.072 -9.931 1.00 44.02 O +HETATM 3468 O HOH H 296 36.008 21.225 14.235 1.00 44.77 O +HETATM 3469 O HOH H 297 38.415 22.514 13.595 1.00 46.05 O +HETATM 3470 O HOH H 298 30.318 -19.320 -15.959 1.00 47.31 O +HETATM 3471 O HOH H 299 30.734 5.292 16.207 1.00 47.42 O +HETATM 3472 O HOH H 300 41.318 -4.966 10.477 1.00 47.94 O +HETATM 3473 O HOH H 301 20.164 -13.483 -16.579 1.00 48.27 O +HETATM 3474 O HOH H 302 16.764 11.818 10.555 1.00 49.04 O +HETATM 3475 O HOH H 303 40.601 2.645 -1.118 1.00 49.14 O +HETATM 3476 O HOH H 304 77.494 11.621 4.412 1.00 49.24 O +HETATM 3477 O HOH H 305 18.486 -6.057 14.605 1.00 50.41 O +HETATM 3478 O HOH H 306 71.151 20.055 11.678 1.00 50.62 O +HETATM 3479 O HOH H 307 14.508 -2.115 -10.918 1.00 50.83 O +HETATM 3480 O HOH H 308 69.565 13.102 -0.002 1.00 51.23 O +HETATM 3481 O HOH H 309 40.460 1.257 1.309 1.00 51.61 O +HETATM 3482 O HOH H 310 40.734 -0.987 9.249 1.00 52.62 O +HETATM 3483 O HOH H 311 63.478 16.954 1.953 1.00 53.10 O +HETATM 3484 O HOH H 312 18.616 13.130 9.020 1.00 54.12 O +HETATM 3485 O HOH H 313 28.410 -18.478 -13.134 1.00 54.31 O +HETATM 3486 O HOH H 314 40.690 3.791 -4.354 1.00 56.34 O +HETATM 3487 O HOH H 315 35.565 19.701 16.824 1.00 57.45 O +HETATM 3488 O HOH H 316 52.239 25.626 4.346 1.00 58.34 O +HETATM 3489 O HOH H 317 30.497 -7.474 -20.243 1.00 58.36 O +HETATM 3490 O HOH H 318 40.435 4.788 5.242 1.00 58.96 O +HETATM 3491 O HOH H 319 45.240 -3.548 10.561 1.00 59.02 O +HETATM 3492 O HOH H 320 18.062 -9.958 -20.676 1.00 60.18 O +HETATM 3493 O HOH H 321 10.935 -9.088 -8.722 1.00 61.71 O +HETATM 3494 O HOH H 322 32.517 22.504 14.822 1.00 63.61 O +HETATM 3495 O HOH H 323 45.551 19.732 23.075 1.00 64.65 O +HETATM 3496 O HOH H 324 39.597 8.199 7.179 1.00 65.66 O +HETATM 3497 O HOH H 325 33.532 0.329 -16.476 1.00 65.82 O +HETATM 3498 O HOH H 326 43.173 -2.217 17.519 1.00 65.89 O +HETATM 3499 O HOH H 327 42.203 -4.697 13.756 1.00 65.98 O +HETATM 3500 O HOH H 328 72.235 19.907 16.381 1.00 71.43 O +HETATM 3501 O HOH H 329 14.540 -11.146 -15.885 1.00 71.47 O +HETATM 3502 O HOH H 330 69.138 6.644 20.888 1.00 71.89 O +HETATM 3503 O HOH H 331 15.390 2.139 3.797 1.00 71.92 O +HETATM 3504 O HOH H 332 13.244 -13.611 -12.311 1.00 72.75 O +HETATM 3505 O HOH H 333 24.535 3.474 11.855 1.00 75.97 O +HETATM 3506 O HOH H 334 47.878 9.548 2.771 1.00 77.36 O +HETATM 3507 O HOH H 335 61.228 6.922 -0.216 1.00 81.54 O +HETATM 3508 O HOH H 336 43.877 -0.548 9.499 1.00 91.54 O +HETATM 3509 O HOH H 337 38.519 -2.615 -16.251 1.00 93.99 O +CONECT 165 653 +CONECT 653 165 +CONECT 994 1491 +CONECT 1491 994 +CONECT 1783 2364 +CONECT 2364 1783 +CONECT 2721 3133 +CONECT 3133 2721 +CONECT 3254 3255 3259 3260 3261 +CONECT 3255 3254 3256 +CONECT 3256 3255 3257 +CONECT 3257 3256 3258 +CONECT 3258 3257 3259 +CONECT 3259 3254 3258 +CONECT 3260 3254 +CONECT 3261 3254 3262 +CONECT 3262 3261 3263 +CONECT 3263 3262 3264 3268 +CONECT 3264 3263 3265 +CONECT 3265 3264 3266 +CONECT 3266 3265 3267 3269 +CONECT 3267 3266 3268 +CONECT 3268 3263 3267 +CONECT 3269 3266 3270 +CONECT 3270 3269 3271 3272 +CONECT 3271 3270 +CONECT 3272 3270 3273 +CONECT 3273 3272 3274 +CONECT 3274 3273 3275 +CONECT 3275 3274 3276 3277 +CONECT 3276 3275 +CONECT 3277 3275 +MASTER 296 0 1 2 34 0 3 6 3507 2 32 34 +END From ee85223733a4295243642ae922f16dd76ba02cd8 Mon Sep 17 00:00:00 2001 From: PyP0 Date: Fri, 21 Aug 2015 08:34:28 +0200 Subject: [PATCH 03/12] Eigen Library added --- Biopool/Sources/Eigen/Array | 11 + Biopool/Sources/Eigen/CMakeLists.txt | 19 + Biopool/Sources/Eigen/Cholesky | 32 + Biopool/Sources/Eigen/CholmodSupport | 45 + Biopool/Sources/Eigen/Core | 381 +++++ Biopool/Sources/Eigen/Dense | 7 + Biopool/Sources/Eigen/Eigen | 2 + Biopool/Sources/Eigen/Eigen2Support | 97 ++ Biopool/Sources/Eigen/Eigenvalues | 46 + Biopool/Sources/Eigen/Geometry | 63 + Biopool/Sources/Eigen/Householder | 23 + Biopool/Sources/Eigen/IterativeLinearSolvers | 40 + Biopool/Sources/Eigen/Jacobi | 26 + Biopool/Sources/Eigen/LU | 41 + Biopool/Sources/Eigen/LeastSquares | 32 + Biopool/Sources/Eigen/OrderingMethods | 23 + Biopool/Sources/Eigen/PaStiXSupport | 46 + Biopool/Sources/Eigen/PardisoSupport | 30 + Biopool/Sources/Eigen/QR | 45 + Biopool/Sources/Eigen/QtAlignedMalloc | 34 + Biopool/Sources/Eigen/SVD | 37 + Biopool/Sources/Eigen/Sparse | 23 + Biopool/Sources/Eigen/SparseCholesky | 30 + Biopool/Sources/Eigen/SparseCore | 66 + Biopool/Sources/Eigen/StdDeque | 42 + Biopool/Sources/Eigen/StdList | 41 + Biopool/Sources/Eigen/StdVector | 42 + Biopool/Sources/Eigen/SuperLUSupport | 59 + Biopool/Sources/Eigen/UmfPackSupport | 36 + Biopool/Sources/Eigen/src/CMakeLists.txt | 7 + .../Sources/Eigen/src/Cholesky/CMakeLists.txt | 6 + Biopool/Sources/Eigen/src/Cholesky/LDLT.h | 607 +++++++ Biopool/Sources/Eigen/src/Cholesky/LLT.h | 503 ++++++ Biopool/Sources/Eigen/src/Cholesky/LLT_MKL.h | 102 ++ .../Eigen/src/CholmodSupport/CMakeLists.txt | 6 + .../Eigen/src/CholmodSupport/CholmodSupport.h | 594 +++++++ Biopool/Sources/Eigen/src/Core/Array.h | 323 ++++ Biopool/Sources/Eigen/src/Core/ArrayBase.h | 243 +++ Biopool/Sources/Eigen/src/Core/ArrayWrapper.h | 255 +++ Biopool/Sources/Eigen/src/Core/Assign.h | 598 +++++++ Biopool/Sources/Eigen/src/Core/Assign_MKL.h | 224 +++ Biopool/Sources/Eigen/src/Core/BandMatrix.h | 349 ++++ Biopool/Sources/Eigen/src/Core/Block.h | 372 +++++ Biopool/Sources/Eigen/src/Core/BooleanRedux.h | 153 ++ Biopool/Sources/Eigen/src/Core/CMakeLists.txt | 10 + .../Sources/Eigen/src/Core/CommaInitializer.h | 154 ++ .../Sources/Eigen/src/Core/CwiseBinaryOp.h | 244 +++ .../Sources/Eigen/src/Core/CwiseNullaryOp.h | 879 ++++++++++ Biopool/Sources/Eigen/src/Core/CwiseUnaryOp.h | 141 ++ .../Sources/Eigen/src/Core/CwiseUnaryView.h | 150 ++ Biopool/Sources/Eigen/src/Core/DenseBase.h | 548 +++++++ .../Sources/Eigen/src/Core/DenseCoeffsBase.h | 769 +++++++++ Biopool/Sources/Eigen/src/Core/DenseStorage.h | 318 ++++ Biopool/Sources/Eigen/src/Core/Diagonal.h | 252 +++ .../Sources/Eigen/src/Core/DiagonalMatrix.h | 310 ++++ .../Sources/Eigen/src/Core/DiagonalProduct.h | 138 ++ Biopool/Sources/Eigen/src/Core/Dot.h | 276 ++++ Biopool/Sources/Eigen/src/Core/EigenBase.h | 175 ++ Biopool/Sources/Eigen/src/Core/Flagged.h | 155 ++ .../Eigen/src/Core/ForceAlignedAccess.h | 161 ++ Biopool/Sources/Eigen/src/Core/Functors.h | 1004 ++++++++++++ Biopool/Sources/Eigen/src/Core/Fuzzy.h | 165 ++ .../Sources/Eigen/src/Core/GeneralProduct.h | 628 +++++++ .../Eigen/src/Core/GenericPacketMath.h | 343 ++++ .../Sources/Eigen/src/Core/GlobalFunctions.h | 118 ++ Biopool/Sources/Eigen/src/Core/IO.h | 264 +++ Biopool/Sources/Eigen/src/Core/Map.h | 207 +++ Biopool/Sources/Eigen/src/Core/MapBase.h | 257 +++ .../Sources/Eigen/src/Core/MathFunctions.h | 857 ++++++++++ Biopool/Sources/Eigen/src/Core/Matrix.h | 420 +++++ Biopool/Sources/Eigen/src/Core/MatrixBase.h | 526 ++++++ Biopool/Sources/Eigen/src/Core/NestByValue.h | 126 ++ Biopool/Sources/Eigen/src/Core/NoAlias.h | 140 ++ Biopool/Sources/Eigen/src/Core/NumTraits.h | 162 ++ .../Eigen/src/Core/PermutationMatrix.h | 702 ++++++++ .../Sources/Eigen/src/Core/PlainObjectBase.h | 782 +++++++++ Biopool/Sources/Eigen/src/Core/Product.h | 113 ++ Biopool/Sources/Eigen/src/Core/ProductBase.h | 293 ++++ Biopool/Sources/Eigen/src/Core/Random.h | 167 ++ Biopool/Sources/Eigen/src/Core/Redux.h | 421 +++++ Biopool/Sources/Eigen/src/Core/Replicate.h | 192 +++ .../Sources/Eigen/src/Core/ReturnByValue.h | 103 ++ Biopool/Sources/Eigen/src/Core/Reverse.h | 239 +++ Biopool/Sources/Eigen/src/Core/Select.h | 177 ++ .../Sources/Eigen/src/Core/SelfAdjointView.h | 329 ++++ .../Eigen/src/Core/SelfCwiseBinaryOp.h | 209 +++ .../Sources/Eigen/src/Core/SolveTriangular.h | 275 ++++ Biopool/Sources/Eigen/src/Core/StableNorm.h | 194 +++ Biopool/Sources/Eigen/src/Core/Stride.h | 123 ++ Biopool/Sources/Eigen/src/Core/Swap.h | 141 ++ Biopool/Sources/Eigen/src/Core/Transpose.h | 429 +++++ .../Sources/Eigen/src/Core/Transpositions.h | 451 +++++ .../Sources/Eigen/src/Core/TriangularMatrix.h | 842 ++++++++++ Biopool/Sources/Eigen/src/Core/VectorBlock.h | 299 ++++ Biopool/Sources/Eigen/src/Core/VectorwiseOp.h | 613 +++++++ Biopool/Sources/Eigen/src/Core/Visitor.h | 252 +++ .../src/Core/arch/AltiVec/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/AltiVec/Complex.h | 232 +++ .../Eigen/src/Core/arch/AltiVec/PacketMath.h | 513 ++++++ .../Eigen/src/Core/arch/CMakeLists.txt | 4 + .../src/Core/arch/Default/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/Default/Settings.h | 64 + .../Eigen/src/Core/arch/NEON/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/NEON/Complex.h | 274 ++++ .../Eigen/src/Core/arch/NEON/PacketMath.h | 439 +++++ .../Eigen/src/Core/arch/SSE/CMakeLists.txt | 6 + .../Sources/Eigen/src/Core/arch/SSE/Complex.h | 451 +++++ .../Eigen/src/Core/arch/SSE/MathFunctions.h | 399 +++++ .../Eigen/src/Core/arch/SSE/PacketMath.h | 647 ++++++++ .../Eigen/src/Core/products/CMakeLists.txt | 6 + .../src/Core/products/CoeffBasedProduct.h | 456 ++++++ .../Core/products/GeneralBlockPanelKernel.h | 1334 +++++++++++++++ .../src/Core/products/GeneralMatrixMatrix.h | 443 +++++ .../products/GeneralMatrixMatrixTriangular.h | 229 +++ .../GeneralMatrixMatrixTriangular_MKL.h | 146 ++ .../Core/products/GeneralMatrixMatrix_MKL.h | 118 ++ .../src/Core/products/GeneralMatrixVector.h | 563 +++++++ .../Core/products/GeneralMatrixVector_MKL.h | 131 ++ .../Eigen/src/Core/products/Parallelizer.h | 174 ++ .../Core/products/SelfadjointMatrixMatrix.h | 431 +++++ .../products/SelfadjointMatrixMatrix_MKL.h | 295 ++++ .../Core/products/SelfadjointMatrixVector.h | 289 ++++ .../products/SelfadjointMatrixVector_MKL.h | 114 ++ .../src/Core/products/SelfadjointProduct.h | 140 ++ .../Core/products/SelfadjointRank2Update.h | 108 ++ .../Core/products/TriangularMatrixMatrix.h | 406 +++++ .../products/TriangularMatrixMatrix_MKL.h | 309 ++++ .../Core/products/TriangularMatrixVector.h | 353 ++++ .../products/TriangularMatrixVector_MKL.h | 247 +++ .../Core/products/TriangularSolverMatrix.h | 332 ++++ .../products/TriangularSolverMatrix_MKL.h | 155 ++ .../Core/products/TriangularSolverVector.h | 154 ++ .../Sources/Eigen/src/Core/util/BlasUtil.h | 279 ++++ .../Eigen/src/Core/util/CMakeLists.txt | 6 + .../Sources/Eigen/src/Core/util/Constants.h | 446 +++++ .../src/Core/util/DisableStupidWarnings.h | 40 + .../Eigen/src/Core/util/ForwardDeclarations.h | 313 ++++ .../Sources/Eigen/src/Core/util/MKL_support.h | 109 ++ Biopool/Sources/Eigen/src/Core/util/Macros.h | 425 +++++ Biopool/Sources/Eigen/src/Core/util/Memory.h | 967 +++++++++++ Biopool/Sources/Eigen/src/Core/util/Meta.h | 246 +++ .../src/Core/util/ReenableStupidWarnings.h | 14 + .../Eigen/src/Core/util/StaticAssert.h | 220 +++ .../Sources/Eigen/src/Core/util/XprHelper.h | 462 ++++++ .../Sources/Eigen/src/Eigen2Support/Block.h | 141 ++ .../Eigen/src/Eigen2Support/CMakeLists.txt | 8 + .../Sources/Eigen/src/Eigen2Support/Cwise.h | 207 +++ .../Eigen/src/Eigen2Support/CwiseOperators.h | 313 ++++ .../src/Eigen2Support/Geometry/AlignedBox.h | 174 ++ .../Eigen/src/Eigen2Support/Geometry/All.h | 115 ++ .../src/Eigen2Support/Geometry/AngleAxis.h | 229 +++ .../src/Eigen2Support/Geometry/CMakeLists.txt | 6 + .../src/Eigen2Support/Geometry/Hyperplane.h | 269 +++ .../Eigen2Support/Geometry/ParametrizedLine.h | 156 ++ .../src/Eigen2Support/Geometry/Quaternion.h | 510 ++++++ .../src/Eigen2Support/Geometry/Rotation2D.h | 160 ++ .../src/Eigen2Support/Geometry/RotationBase.h | 138 ++ .../src/Eigen2Support/Geometry/Scaling.h | 182 ++ .../src/Eigen2Support/Geometry/Transform.h | 801 +++++++++ .../src/Eigen2Support/Geometry/Translation.h | 199 +++ Biopool/Sources/Eigen/src/Eigen2Support/LU.h | 135 ++ .../Sources/Eigen/src/Eigen2Support/Lazy.h | 86 + .../Eigen/src/Eigen2Support/LeastSquares.h | 185 +++ .../Sources/Eigen/src/Eigen2Support/Macros.h | 35 + .../Eigen/src/Eigen2Support/MathFunctions.h | 72 + .../Sources/Eigen/src/Eigen2Support/Memory.h | 60 + .../Sources/Eigen/src/Eigen2Support/Meta.h | 90 + .../Sources/Eigen/src/Eigen2Support/Minor.h | 132 ++ Biopool/Sources/Eigen/src/Eigen2Support/QR.h | 82 + Biopool/Sources/Eigen/src/Eigen2Support/SVD.h | 653 ++++++++ .../src/Eigen2Support/TriangularSolver.h | 57 + .../Eigen/src/Eigen2Support/VectorBlock.h | 109 ++ .../Eigen/src/Eigenvalues/CMakeLists.txt | 6 + .../src/Eigenvalues/ComplexEigenSolver.h | 334 ++++ .../Eigen/src/Eigenvalues/ComplexSchur.h | 411 +++++ .../Eigen/src/Eigenvalues/ComplexSchur_MKL.h | 94 ++ .../Eigen/src/Eigenvalues/EigenSolver.h | 594 +++++++ .../GeneralizedSelfAdjointEigenSolver.h | 242 +++ .../src/Eigenvalues/HessenbergDecomposition.h | 388 +++++ .../src/Eigenvalues/MatrixBaseEigenvalues.h | 174 ++ .../Sources/Eigen/src/Eigenvalues/RealSchur.h | 479 ++++++ .../Eigen/src/Eigenvalues/RealSchur_MKL.h | 83 + .../src/Eigenvalues/SelfAdjointEigenSolver.h | 804 +++++++++ .../Eigenvalues/SelfAdjointEigenSolver_MKL.h | 92 ++ .../src/Eigenvalues/Tridiagonalization.h | 572 +++++++ .../Sources/Eigen/src/Geometry/AlignedBox.h | 390 +++++ .../Sources/Eigen/src/Geometry/AngleAxis.h | 245 +++ .../Sources/Eigen/src/Geometry/CMakeLists.txt | 8 + .../Sources/Eigen/src/Geometry/EulerAngles.h | 99 ++ .../Sources/Eigen/src/Geometry/Homogeneous.h | 322 ++++ .../Sources/Eigen/src/Geometry/Hyperplane.h | 284 ++++ .../Sources/Eigen/src/Geometry/OrthoMethods.h | 233 +++ .../Eigen/src/Geometry/ParametrizedLine.h | 210 +++ .../Sources/Eigen/src/Geometry/Quaternion.h | 793 +++++++++ .../Sources/Eigen/src/Geometry/Rotation2D.h | 169 ++ .../Sources/Eigen/src/Geometry/RotationBase.h | 221 +++ Biopool/Sources/Eigen/src/Geometry/Scaling.h | 186 +++ .../Sources/Eigen/src/Geometry/Transform.h | 1458 +++++++++++++++++ .../Sources/Eigen/src/Geometry/Translation.h | 221 +++ Biopool/Sources/Eigen/src/Geometry/Umeyama.h | 187 +++ .../Eigen/src/Geometry/arch/CMakeLists.txt | 6 + .../Eigen/src/Geometry/arch/Geometry_SSE.h | 130 ++ .../Eigen/src/Householder/BlockHouseholder.h | 83 + .../Eigen/src/Householder/CMakeLists.txt | 6 + .../Eigen/src/Householder/Householder.h | 183 +++ .../src/Householder/HouseholderSequence.h | 456 ++++++ .../BasicPreconditioners.h | 163 ++ .../src/IterativeLinearSolvers/BiCGSTAB.h | 269 +++ .../src/IterativeLinearSolvers/CMakeLists.txt | 6 + .../ConjugateGradient.h | 266 +++ .../IterativeLinearSolvers/IncompleteLUT.h | 476 ++++++ .../IterativeSolverBase.h | 269 +++ .../Sources/Eigen/src/Jacobi/CMakeLists.txt | 6 + Biopool/Sources/Eigen/src/Jacobi/Jacobi.h | 435 +++++ Biopool/Sources/Eigen/src/LU/CMakeLists.txt | 8 + Biopool/Sources/Eigen/src/LU/Determinant.h | 116 ++ Biopool/Sources/Eigen/src/LU/FullPivLU.h | 751 +++++++++ Biopool/Sources/Eigen/src/LU/Inverse.h | 411 +++++ Biopool/Sources/Eigen/src/LU/PartialPivLU.h | 513 ++++++ .../Sources/Eigen/src/LU/PartialPivLU_MKL.h | 85 + .../Sources/Eigen/src/LU/arch/CMakeLists.txt | 6 + .../Sources/Eigen/src/LU/arch/Inverse_SSE.h | 344 ++++ .../Sources/Eigen/src/OrderingMethods/Amd.h | 452 +++++ .../Eigen/src/OrderingMethods/CMakeLists.txt | 6 + .../Eigen/src/PaStiXSupport/CMakeLists.txt | 6 + .../Eigen/src/PaStiXSupport/PaStiXSupport.h | 757 +++++++++ .../Eigen/src/PardisoSupport/CMakeLists.txt | 6 + .../Eigen/src/PardisoSupport/PardisoSupport.h | 614 +++++++ Biopool/Sources/Eigen/src/QR/CMakeLists.txt | 6 + .../Eigen/src/QR/ColPivHouseholderQR.h | 535 ++++++ .../Eigen/src/QR/ColPivHouseholderQR_MKL.h | 98 ++ .../Eigen/src/QR/FullPivHouseholderQR.h | 609 +++++++ Biopool/Sources/Eigen/src/QR/HouseholderQR.h | 358 ++++ .../Sources/Eigen/src/QR/HouseholderQR_MKL.h | 69 + Biopool/Sources/Eigen/src/SVD/CMakeLists.txt | 6 + Biopool/Sources/Eigen/src/SVD/JacobiSVD.h | 882 ++++++++++ Biopool/Sources/Eigen/src/SVD/JacobiSVD_MKL.h | 92 ++ .../Eigen/src/SVD/UpperBidiagonalization.h | 163 ++ .../Eigen/src/SparseCholesky/CMakeLists.txt | 6 + .../src/SparseCholesky/SimplicialCholesky.h | 886 ++++++++++ .../Sources/Eigen/src/SparseCore/AmbiVector.h | 386 +++++ .../Eigen/src/SparseCore/CMakeLists.txt | 6 + .../Eigen/src/SparseCore/CompressedStorage.h | 248 +++ .../ConservativeSparseSparseProduct.h | 260 +++ .../Eigen/src/SparseCore/CoreIterators.h | 76 + .../Eigen/src/SparseCore/MappedSparseMatrix.h | 194 +++ .../Eigen/src/SparseCore/SparseAssign.h | 0 .../Eigen/src/SparseCore/SparseBlock.h | 402 +++++ .../src/SparseCore/SparseCwiseBinaryOp.h | 339 ++++ .../Eigen/src/SparseCore/SparseCwiseUnaryOp.h | 178 ++ .../Eigen/src/SparseCore/SparseDenseProduct.h | 315 ++++ .../src/SparseCore/SparseDiagonalProduct.h | 199 +++ .../Sources/Eigen/src/SparseCore/SparseDot.h | 109 ++ .../Eigen/src/SparseCore/SparseFuzzy.h | 41 + .../Eigen/src/SparseCore/SparseMatrix.h | 1127 +++++++++++++ .../Eigen/src/SparseCore/SparseMatrixBase.h | 473 ++++++ .../Eigen/src/SparseCore/SparsePermutation.h | 163 ++ .../Eigen/src/SparseCore/SparseProduct.h | 201 +++ .../Eigen/src/SparseCore/SparseRedux.h | 60 + .../src/SparseCore/SparseSelfAdjointView.h | 495 ++++++ .../SparseSparseProductWithPruning.h | 164 ++ .../Eigen/src/SparseCore/SparseTranspose.h | 76 + .../src/SparseCore/SparseTriangularView.h | 179 ++ .../Sources/Eigen/src/SparseCore/SparseUtil.h | 188 +++ .../Eigen/src/SparseCore/SparseVector.h | 413 +++++ .../Sources/Eigen/src/SparseCore/SparseView.h | 113 ++ .../Eigen/src/SparseCore/TriangularSolver.h | 349 ++++ .../Eigen/src/StlSupport/CMakeLists.txt | 6 + .../Sources/Eigen/src/StlSupport/StdDeque.h | 149 ++ .../Sources/Eigen/src/StlSupport/StdList.h | 129 ++ .../Sources/Eigen/src/StlSupport/StdVector.h | 141 ++ .../Sources/Eigen/src/StlSupport/details.h | 99 ++ .../Eigen/src/SuperLUSupport/CMakeLists.txt | 6 + .../Eigen/src/SuperLUSupport/SuperLUSupport.h | 1040 ++++++++++++ .../Eigen/src/UmfPackSupport/CMakeLists.txt | 6 + .../Eigen/src/UmfPackSupport/UmfPackSupport.h | 446 +++++ Biopool/Sources/Eigen/src/misc/CMakeLists.txt | 6 + Biopool/Sources/Eigen/src/misc/Image.h | 99 ++ Biopool/Sources/Eigen/src/misc/Kernel.h | 96 ++ Biopool/Sources/Eigen/src/misc/Solve.h | 91 + Biopool/Sources/Eigen/src/misc/SparseSolve.h | 126 ++ Biopool/Sources/Eigen/src/misc/blas.h | 658 ++++++++ .../Eigen/src/plugins/ArrayCwiseBinaryOps.h | 199 +++ .../Eigen/src/plugins/ArrayCwiseUnaryOps.h | 202 +++ .../Sources/Eigen/src/plugins/BlockMethods.h | 595 +++++++ .../Sources/Eigen/src/plugins/CMakeLists.txt | 6 + .../Eigen/src/plugins/CommonCwiseBinaryOps.h | 61 + .../Eigen/src/plugins/CommonCwiseUnaryOps.h | 187 +++ .../Eigen/src/plugins/MatrixCwiseBinaryOps.h | 141 ++ .../Eigen/src/plugins/MatrixCwiseUnaryOps.h | 82 + 290 files changed, 72978 insertions(+) create mode 100644 Biopool/Sources/Eigen/Array create mode 100644 Biopool/Sources/Eigen/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/Cholesky create mode 100644 Biopool/Sources/Eigen/CholmodSupport create mode 100644 Biopool/Sources/Eigen/Core create mode 100644 Biopool/Sources/Eigen/Dense create mode 100644 Biopool/Sources/Eigen/Eigen create mode 100644 Biopool/Sources/Eigen/Eigen2Support create mode 100644 Biopool/Sources/Eigen/Eigenvalues create mode 100644 Biopool/Sources/Eigen/Geometry create mode 100644 Biopool/Sources/Eigen/Householder create mode 100644 Biopool/Sources/Eigen/IterativeLinearSolvers create mode 100644 Biopool/Sources/Eigen/Jacobi create mode 100644 Biopool/Sources/Eigen/LU create mode 100644 Biopool/Sources/Eigen/LeastSquares create mode 100644 Biopool/Sources/Eigen/OrderingMethods create mode 100644 Biopool/Sources/Eigen/PaStiXSupport create mode 100644 Biopool/Sources/Eigen/PardisoSupport create mode 100644 Biopool/Sources/Eigen/QR create mode 100644 Biopool/Sources/Eigen/QtAlignedMalloc create mode 100644 Biopool/Sources/Eigen/SVD create mode 100644 Biopool/Sources/Eigen/Sparse create mode 100644 Biopool/Sources/Eigen/SparseCholesky create mode 100644 Biopool/Sources/Eigen/SparseCore create mode 100644 Biopool/Sources/Eigen/StdDeque create mode 100644 Biopool/Sources/Eigen/StdList create mode 100644 Biopool/Sources/Eigen/StdVector create mode 100644 Biopool/Sources/Eigen/SuperLUSupport create mode 100644 Biopool/Sources/Eigen/UmfPackSupport create mode 100644 Biopool/Sources/Eigen/src/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Cholesky/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Cholesky/LDLT.h create mode 100644 Biopool/Sources/Eigen/src/Cholesky/LLT.h create mode 100644 Biopool/Sources/Eigen/src/Cholesky/LLT_MKL.h create mode 100644 Biopool/Sources/Eigen/src/CholmodSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/CholmodSupport/CholmodSupport.h create mode 100644 Biopool/Sources/Eigen/src/Core/Array.h create mode 100644 Biopool/Sources/Eigen/src/Core/ArrayBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/ArrayWrapper.h create mode 100644 Biopool/Sources/Eigen/src/Core/Assign.h create mode 100644 Biopool/Sources/Eigen/src/Core/Assign_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/BandMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/Block.h create mode 100644 Biopool/Sources/Eigen/src/Core/BooleanRedux.h create mode 100644 Biopool/Sources/Eigen/src/Core/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/CommaInitializer.h create mode 100644 Biopool/Sources/Eigen/src/Core/CwiseBinaryOp.h create mode 100644 Biopool/Sources/Eigen/src/Core/CwiseNullaryOp.h create mode 100644 Biopool/Sources/Eigen/src/Core/CwiseUnaryOp.h create mode 100644 Biopool/Sources/Eigen/src/Core/CwiseUnaryView.h create mode 100644 Biopool/Sources/Eigen/src/Core/DenseBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/DenseCoeffsBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/DenseStorage.h create mode 100644 Biopool/Sources/Eigen/src/Core/Diagonal.h create mode 100644 Biopool/Sources/Eigen/src/Core/DiagonalMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/DiagonalProduct.h create mode 100644 Biopool/Sources/Eigen/src/Core/Dot.h create mode 100644 Biopool/Sources/Eigen/src/Core/EigenBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/Flagged.h create mode 100644 Biopool/Sources/Eigen/src/Core/ForceAlignedAccess.h create mode 100644 Biopool/Sources/Eigen/src/Core/Functors.h create mode 100644 Biopool/Sources/Eigen/src/Core/Fuzzy.h create mode 100644 Biopool/Sources/Eigen/src/Core/GeneralProduct.h create mode 100644 Biopool/Sources/Eigen/src/Core/GenericPacketMath.h create mode 100644 Biopool/Sources/Eigen/src/Core/GlobalFunctions.h create mode 100644 Biopool/Sources/Eigen/src/Core/IO.h create mode 100644 Biopool/Sources/Eigen/src/Core/Map.h create mode 100644 Biopool/Sources/Eigen/src/Core/MapBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/MathFunctions.h create mode 100644 Biopool/Sources/Eigen/src/Core/Matrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/MatrixBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/NestByValue.h create mode 100644 Biopool/Sources/Eigen/src/Core/NoAlias.h create mode 100644 Biopool/Sources/Eigen/src/Core/NumTraits.h create mode 100644 Biopool/Sources/Eigen/src/Core/PermutationMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/PlainObjectBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/Product.h create mode 100644 Biopool/Sources/Eigen/src/Core/ProductBase.h create mode 100644 Biopool/Sources/Eigen/src/Core/Random.h create mode 100644 Biopool/Sources/Eigen/src/Core/Redux.h create mode 100644 Biopool/Sources/Eigen/src/Core/Replicate.h create mode 100644 Biopool/Sources/Eigen/src/Core/ReturnByValue.h create mode 100644 Biopool/Sources/Eigen/src/Core/Reverse.h create mode 100644 Biopool/Sources/Eigen/src/Core/Select.h create mode 100644 Biopool/Sources/Eigen/src/Core/SelfAdjointView.h create mode 100644 Biopool/Sources/Eigen/src/Core/SelfCwiseBinaryOp.h create mode 100644 Biopool/Sources/Eigen/src/Core/SolveTriangular.h create mode 100644 Biopool/Sources/Eigen/src/Core/StableNorm.h create mode 100644 Biopool/Sources/Eigen/src/Core/Stride.h create mode 100644 Biopool/Sources/Eigen/src/Core/Swap.h create mode 100644 Biopool/Sources/Eigen/src/Core/Transpose.h create mode 100644 Biopool/Sources/Eigen/src/Core/Transpositions.h create mode 100644 Biopool/Sources/Eigen/src/Core/TriangularMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/VectorBlock.h create mode 100644 Biopool/Sources/Eigen/src/Core/VectorwiseOp.h create mode 100644 Biopool/Sources/Eigen/src/Core/Visitor.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/AltiVec/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/arch/AltiVec/Complex.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/AltiVec/PacketMath.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/arch/Default/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/arch/Default/Settings.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/NEON/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/arch/NEON/Complex.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/NEON/PacketMath.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/SSE/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/arch/SSE/Complex.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/SSE/MathFunctions.h create mode 100644 Biopool/Sources/Eigen/src/Core/arch/SSE/PacketMath.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/products/CoeffBasedProduct.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralBlockPanelKernel.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixVector.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/GeneralMatrixVector_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/Parallelizer.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointMatrixMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointMatrixVector.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointProduct.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/SelfadjointRank2Update.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularMatrixMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularMatrixVector.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularMatrixVector_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularSolverMatrix.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Core/products/TriangularSolverVector.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/BlasUtil.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Core/util/Constants.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/DisableStupidWarnings.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/ForwardDeclarations.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/MKL_support.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/Macros.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/Memory.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/Meta.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/ReenableStupidWarnings.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/StaticAssert.h create mode 100644 Biopool/Sources/Eigen/src/Core/util/XprHelper.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Block.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Cwise.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/CwiseOperators.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/AlignedBox.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/All.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/AngleAxis.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Hyperplane.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Quaternion.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Rotation2D.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/RotationBase.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Scaling.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Transform.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Geometry/Translation.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/LU.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Lazy.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/LeastSquares.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Macros.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/MathFunctions.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Memory.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Meta.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/Minor.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/QR.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/SVD.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/TriangularSolver.h create mode 100644 Biopool/Sources/Eigen/src/Eigen2Support/VectorBlock.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/ComplexEigenSolver.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/ComplexSchur.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/ComplexSchur_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/EigenSolver.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/HessenbergDecomposition.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/RealSchur.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/RealSchur_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h create mode 100644 Biopool/Sources/Eigen/src/Eigenvalues/Tridiagonalization.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/AlignedBox.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/AngleAxis.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Geometry/EulerAngles.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Homogeneous.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Hyperplane.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/OrthoMethods.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/ParametrizedLine.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Quaternion.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Rotation2D.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/RotationBase.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Scaling.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Transform.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Translation.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/Umeyama.h create mode 100644 Biopool/Sources/Eigen/src/Geometry/arch/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Geometry/arch/Geometry_SSE.h create mode 100644 Biopool/Sources/Eigen/src/Householder/BlockHouseholder.h create mode 100644 Biopool/Sources/Eigen/src/Householder/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Householder/Householder.h create mode 100644 Biopool/Sources/Eigen/src/Householder/HouseholderSequence.h create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h create mode 100644 Biopool/Sources/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h create mode 100644 Biopool/Sources/Eigen/src/Jacobi/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/Jacobi/Jacobi.h create mode 100644 Biopool/Sources/Eigen/src/LU/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/LU/Determinant.h create mode 100644 Biopool/Sources/Eigen/src/LU/FullPivLU.h create mode 100644 Biopool/Sources/Eigen/src/LU/Inverse.h create mode 100644 Biopool/Sources/Eigen/src/LU/PartialPivLU.h create mode 100644 Biopool/Sources/Eigen/src/LU/PartialPivLU_MKL.h create mode 100644 Biopool/Sources/Eigen/src/LU/arch/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/LU/arch/Inverse_SSE.h create mode 100644 Biopool/Sources/Eigen/src/OrderingMethods/Amd.h create mode 100644 Biopool/Sources/Eigen/src/OrderingMethods/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/PaStiXSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/PaStiXSupport/PaStiXSupport.h create mode 100644 Biopool/Sources/Eigen/src/PardisoSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/PardisoSupport/PardisoSupport.h create mode 100644 Biopool/Sources/Eigen/src/QR/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/QR/ColPivHouseholderQR.h create mode 100644 Biopool/Sources/Eigen/src/QR/ColPivHouseholderQR_MKL.h create mode 100644 Biopool/Sources/Eigen/src/QR/FullPivHouseholderQR.h create mode 100644 Biopool/Sources/Eigen/src/QR/HouseholderQR.h create mode 100644 Biopool/Sources/Eigen/src/QR/HouseholderQR_MKL.h create mode 100644 Biopool/Sources/Eigen/src/SVD/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/SVD/JacobiSVD.h create mode 100644 Biopool/Sources/Eigen/src/SVD/JacobiSVD_MKL.h create mode 100644 Biopool/Sources/Eigen/src/SVD/UpperBidiagonalization.h create mode 100644 Biopool/Sources/Eigen/src/SparseCholesky/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/SparseCholesky/SimplicialCholesky.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/AmbiVector.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/SparseCore/CompressedStorage.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/CoreIterators.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/MappedSparseMatrix.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseAssign.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseBlock.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseCwiseBinaryOp.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseCwiseUnaryOp.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseDenseProduct.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseDiagonalProduct.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseDot.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseFuzzy.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseMatrix.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseMatrixBase.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparsePermutation.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseProduct.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseRedux.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseSelfAdjointView.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseSparseProductWithPruning.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseTranspose.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseTriangularView.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseUtil.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseVector.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/SparseView.h create mode 100644 Biopool/Sources/Eigen/src/SparseCore/TriangularSolver.h create mode 100644 Biopool/Sources/Eigen/src/StlSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/StlSupport/StdDeque.h create mode 100644 Biopool/Sources/Eigen/src/StlSupport/StdList.h create mode 100644 Biopool/Sources/Eigen/src/StlSupport/StdVector.h create mode 100644 Biopool/Sources/Eigen/src/StlSupport/details.h create mode 100644 Biopool/Sources/Eigen/src/SuperLUSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/SuperLUSupport/SuperLUSupport.h create mode 100644 Biopool/Sources/Eigen/src/UmfPackSupport/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/UmfPackSupport/UmfPackSupport.h create mode 100644 Biopool/Sources/Eigen/src/misc/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/misc/Image.h create mode 100644 Biopool/Sources/Eigen/src/misc/Kernel.h create mode 100644 Biopool/Sources/Eigen/src/misc/Solve.h create mode 100644 Biopool/Sources/Eigen/src/misc/SparseSolve.h create mode 100644 Biopool/Sources/Eigen/src/misc/blas.h create mode 100644 Biopool/Sources/Eigen/src/plugins/ArrayCwiseBinaryOps.h create mode 100644 Biopool/Sources/Eigen/src/plugins/ArrayCwiseUnaryOps.h create mode 100644 Biopool/Sources/Eigen/src/plugins/BlockMethods.h create mode 100644 Biopool/Sources/Eigen/src/plugins/CMakeLists.txt create mode 100644 Biopool/Sources/Eigen/src/plugins/CommonCwiseBinaryOps.h create mode 100644 Biopool/Sources/Eigen/src/plugins/CommonCwiseUnaryOps.h create mode 100644 Biopool/Sources/Eigen/src/plugins/MatrixCwiseBinaryOps.h create mode 100644 Biopool/Sources/Eigen/src/plugins/MatrixCwiseUnaryOps.h diff --git a/Biopool/Sources/Eigen/Array b/Biopool/Sources/Eigen/Array new file mode 100644 index 0000000..3d004fb --- /dev/null +++ b/Biopool/Sources/Eigen/Array @@ -0,0 +1,11 @@ +#ifndef EIGEN_ARRAY_MODULE_H +#define EIGEN_ARRAY_MODULE_H + +// include Core first to handle Eigen2 support macros +#include "Core" + +#ifndef EIGEN2_SUPPORT + #error The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core. +#endif + +#endif // EIGEN_ARRAY_MODULE_H diff --git a/Biopool/Sources/Eigen/CMakeLists.txt b/Biopool/Sources/Eigen/CMakeLists.txt new file mode 100644 index 0000000..a92dd6f --- /dev/null +++ b/Biopool/Sources/Eigen/CMakeLists.txt @@ -0,0 +1,19 @@ +include(RegexUtils) +test_escape_string_as_regex() + +file(GLOB Eigen_directory_files "*") + +escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + +foreach(f ${Eigen_directory_files}) + if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src") + list(APPEND Eigen_directory_files_to_install ${f}) + endif() +endforeach(f ${Eigen_directory_files}) + +install(FILES + ${Eigen_directory_files_to_install} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel + ) + +add_subdirectory(src) diff --git a/Biopool/Sources/Eigen/Cholesky b/Biopool/Sources/Eigen/Cholesky new file mode 100644 index 0000000..f727f5d --- /dev/null +++ b/Biopool/Sources/Eigen/Cholesky @@ -0,0 +1,32 @@ +#ifndef EIGEN_CHOLESKY_MODULE_H +#define EIGEN_CHOLESKY_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup Cholesky_Module Cholesky module + * + * + * + * This module provides two variants of the Cholesky decomposition for selfadjoint (hermitian) matrices. + * Those decompositions are accessible via the following MatrixBase methods: + * - MatrixBase::llt(), + * - MatrixBase::ldlt() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/Cholesky/LLT.h" +#include "src/Cholesky/LDLT.h" +#ifdef EIGEN_USE_LAPACKE +#include "src/Cholesky/LLT_MKL.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_CHOLESKY_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/CholmodSupport b/Biopool/Sources/Eigen/CholmodSupport new file mode 100644 index 0000000..745b884 --- /dev/null +++ b/Biopool/Sources/Eigen/CholmodSupport @@ -0,0 +1,45 @@ +#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H +#define EIGEN_CHOLMODSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +extern "C" { + #include +} + +/** \ingroup Support_modules + * \defgroup CholmodSupport_Module CholmodSupport module + * + * This module provides an interface to the Cholmod library which is part of the suitesparse package. + * It provides the two following main factorization classes: + * - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization. + * - class CholmodDecomposiiton: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of the underlying factorization method (supernodal or simplicial). + * + * For the sake of completeness, this module also propose the two following classes: + * - class CholmodSimplicialLLT + * - class CholmodSimplicialLDLT + * Note that these classes does not bring any particular advantage compared to the built-in + * SimplicialLLT and SimplicialLDLT factorization classes. + * + * \code + * #include + * \endcode + * + * In order to use this module, the cholmod headers must be accessible from the include paths, and your binary must be linked to the cholmod library and its dependencies. + * The dependencies depend on how cholmod has been compiled. + * For a cmake based project, you can use our FindCholmod.cmake module to help you in this task. + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/CholmodSupport/CholmodSupport.h" + + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_CHOLMODSUPPORT_MODULE_H + diff --git a/Biopool/Sources/Eigen/Core b/Biopool/Sources/Eigen/Core new file mode 100644 index 0000000..0cf1016 --- /dev/null +++ b/Biopool/Sources/Eigen/Core @@ -0,0 +1,381 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2007-2011 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CORE_H +#define EIGEN_CORE_H + +// first thing Eigen does: stop the compiler from committing suicide +#include "src/Core/util/DisableStupidWarnings.h" + +// then include this file where all our macros are defined. It's really important to do it first because +// it's where we do all the alignment settings (platform detection and honoring the user's will if he +// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization. +#include "src/Core/util/Macros.h" + +#include + +// this include file manages BLAS and MKL related macros +// and inclusion of their respective header files +#include "src/Core/util/MKL_support.h" + +// if alignment is disabled, then disable vectorization. Note: EIGEN_ALIGN is the proper check, it takes into +// account both the user's will (EIGEN_DONT_ALIGN) and our own platform checks +#if !EIGEN_ALIGN + #ifndef EIGEN_DONT_VECTORIZE + #define EIGEN_DONT_VECTORIZE + #endif +#endif + +#ifdef _MSC_VER + #include // for _aligned_malloc -- need it regardless of whether vectorization is enabled + #if (_MSC_VER >= 1500) // 2008 or later + // Remember that usage of defined() in a #define is undefined by the standard. + // a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP. + #if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(_M_X64) + #define EIGEN_SSE2_ON_MSVC_2008_OR_LATER + #endif + #endif +#else + // Remember that usage of defined() in a #define is undefined by the standard + #if (defined __SSE2__) && ( (!defined __GNUC__) || EIGEN_GNUC_AT_LEAST(4,2) ) + #define EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC + #endif +#endif + +#ifndef EIGEN_DONT_VECTORIZE + + #if defined (EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER) + + // Defines symbols for compile-time detection of which instructions are + // used. + // EIGEN_VECTORIZE_YY is defined if and only if the instruction set YY is used + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_SSE + #define EIGEN_VECTORIZE_SSE2 + + // Detect sse3/ssse3/sse4: + // gcc and icc defines __SSE3__, ... + // there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you + // want to force the use of those instructions with msvc. + #ifdef __SSE3__ + #define EIGEN_VECTORIZE_SSE3 + #endif + #ifdef __SSSE3__ + #define EIGEN_VECTORIZE_SSSE3 + #endif + #ifdef __SSE4_1__ + #define EIGEN_VECTORIZE_SSE4_1 + #endif + #ifdef __SSE4_2__ + #define EIGEN_VECTORIZE_SSE4_2 + #endif + + // include files + + // This extern "C" works around a MINGW-w64 compilation issue + // https://sourceforge.net/tracker/index.php?func=detail&aid=3018394&group_id=202880&atid=983354 + // In essence, intrin.h is included by windows.h and also declares intrinsics (just as emmintrin.h etc. below do). + // However, intrin.h uses an extern "C" declaration, and g++ thus complains of duplicate declarations + // with conflicting linkage. The linkage for intrinsics doesn't matter, but at that stage the compiler doesn't know; + // so, to avoid compile errors when windows.h is included after Eigen/Core, ensure intrinsics are extern "C" here too. + // notice that since these are C headers, the extern "C" is theoretically needed anyways. + extern "C" { + #include + #include + #ifdef EIGEN_VECTORIZE_SSE3 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSSE3 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSE4_1 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSE4_2 + #include + #endif + } // end extern "C" + #elif defined __ALTIVEC__ + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_ALTIVEC + #include + // We need to #undef all these ugly tokens defined in + // => use __vector instead of vector + #undef bool + #undef vector + #undef pixel + #elif defined __ARM_NEON__ + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_NEON + #include + #endif +#endif + +#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE) + #define EIGEN_HAS_OPENMP +#endif + +#ifdef EIGEN_HAS_OPENMP +#include +#endif + +// MSVC for windows mobile does not have the errno.h file +#if !(defined(_MSC_VER) && defined(_WIN32_WCE)) && !defined(__ARMCC_VERSION) +#define EIGEN_HAS_ERRNO +#endif + +#ifdef EIGEN_HAS_ERRNO +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for CHAR_BIT +// for min/max: +#include + +// for outputting debug info +#ifdef EIGEN_DEBUG_ASSIGN +#include +#endif + +// required for __cpuid, needs to be included after cmath +#if defined(_MSC_VER) && (defined(_M_IX86)||defined(_M_X64)) + #include +#endif + +#if defined(_CPPUNWIND) || defined(__EXCEPTIONS) + #define EIGEN_EXCEPTIONS +#endif + +#ifdef EIGEN_EXCEPTIONS + #include +#endif + +/** \brief Namespace containing all symbols from the %Eigen library. */ +namespace Eigen { + +inline static const char *SimdInstructionSetsInUse(void) { +#if defined(EIGEN_VECTORIZE_SSE4_2) + return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; +#elif defined(EIGEN_VECTORIZE_SSE4_1) + return "SSE, SSE2, SSE3, SSSE3, SSE4.1"; +#elif defined(EIGEN_VECTORIZE_SSSE3) + return "SSE, SSE2, SSE3, SSSE3"; +#elif defined(EIGEN_VECTORIZE_SSE3) + return "SSE, SSE2, SSE3"; +#elif defined(EIGEN_VECTORIZE_SSE2) + return "SSE, SSE2"; +#elif defined(EIGEN_VECTORIZE_ALTIVEC) + return "AltiVec"; +#elif defined(EIGEN_VECTORIZE_NEON) + return "ARM NEON"; +#else + return "None"; +#endif +} + +} // end namespace Eigen + +#define STAGE10_FULL_EIGEN2_API 10 +#define STAGE20_RESOLVE_API_CONFLICTS 20 +#define STAGE30_FULL_EIGEN3_API 30 +#define STAGE40_FULL_EIGEN3_STRICTNESS 40 +#define STAGE99_NO_EIGEN2_SUPPORT 99 + +#if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE40_FULL_EIGEN3_STRICTNESS +#elif defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API +#elif defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE20_RESOLVE_API_CONFLICTS +#elif defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE10_FULL_EIGEN2_API +#elif defined EIGEN2_SUPPORT + // default to stage 3, that's what it's always meant + #define EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API + #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API +#else + #define EIGEN2_SUPPORT_STAGE STAGE99_NO_EIGEN2_SUPPORT +#endif + +#ifdef EIGEN2_SUPPORT +#undef minor +#endif + +// we use size_t frequently and we'll never remember to prepend it with std:: everytime just to +// ensure QNX/QCC support +using std::size_t; +// gcc 4.6.0 wants std:: for ptrdiff_t +using std::ptrdiff_t; + +/** \defgroup Core_Module Core module + * This is the main module of Eigen providing dense matrix and vector support + * (both fixed and dynamic size) with all the features corresponding to a BLAS library + * and much more... + * + * \code + * #include + * \endcode + */ + +/** \defgroup Support_modules Support modules [category] + * Category of modules which add support for external libraries. + */ + +#include "src/Core/util/Constants.h" +#include "src/Core/util/ForwardDeclarations.h" +#include "src/Core/util/Meta.h" +#include "src/Core/util/XprHelper.h" +#include "src/Core/util/StaticAssert.h" +#include "src/Core/util/Memory.h" + +#include "src/Core/NumTraits.h" +#include "src/Core/MathFunctions.h" +#include "src/Core/GenericPacketMath.h" + +#if defined EIGEN_VECTORIZE_SSE + #include "src/Core/arch/SSE/PacketMath.h" + #include "src/Core/arch/SSE/MathFunctions.h" + #include "src/Core/arch/SSE/Complex.h" +#elif defined EIGEN_VECTORIZE_ALTIVEC + #include "src/Core/arch/AltiVec/PacketMath.h" + #include "src/Core/arch/AltiVec/Complex.h" +#elif defined EIGEN_VECTORIZE_NEON + #include "src/Core/arch/NEON/PacketMath.h" + #include "src/Core/arch/NEON/Complex.h" +#endif + +#include "src/Core/arch/Default/Settings.h" + +#include "src/Core/Functors.h" +#include "src/Core/DenseCoeffsBase.h" +#include "src/Core/DenseBase.h" +#include "src/Core/MatrixBase.h" +#include "src/Core/EigenBase.h" + +#ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874 + // at least confirmed with Doxygen 1.5.5 and 1.5.6 + #include "src/Core/Assign.h" +#endif + +#include "src/Core/util/BlasUtil.h" +#include "src/Core/DenseStorage.h" +#include "src/Core/NestByValue.h" +#include "src/Core/ForceAlignedAccess.h" +#include "src/Core/ReturnByValue.h" +#include "src/Core/NoAlias.h" +#include "src/Core/PlainObjectBase.h" +#include "src/Core/Matrix.h" +#include "src/Core/Array.h" +#include "src/Core/CwiseBinaryOp.h" +#include "src/Core/CwiseUnaryOp.h" +#include "src/Core/CwiseNullaryOp.h" +#include "src/Core/CwiseUnaryView.h" +#include "src/Core/SelfCwiseBinaryOp.h" +#include "src/Core/Dot.h" +#include "src/Core/StableNorm.h" +#include "src/Core/MapBase.h" +#include "src/Core/Stride.h" +#include "src/Core/Map.h" +#include "src/Core/Block.h" +#include "src/Core/VectorBlock.h" +#include "src/Core/Transpose.h" +#include "src/Core/DiagonalMatrix.h" +#include "src/Core/Diagonal.h" +#include "src/Core/DiagonalProduct.h" +#include "src/Core/PermutationMatrix.h" +#include "src/Core/Transpositions.h" +#include "src/Core/Redux.h" +#include "src/Core/Visitor.h" +#include "src/Core/Fuzzy.h" +#include "src/Core/IO.h" +#include "src/Core/Swap.h" +#include "src/Core/CommaInitializer.h" +#include "src/Core/Flagged.h" +#include "src/Core/ProductBase.h" +#include "src/Core/GeneralProduct.h" +#include "src/Core/TriangularMatrix.h" +#include "src/Core/SelfAdjointView.h" +#include "src/Core/products/GeneralBlockPanelKernel.h" +#include "src/Core/products/Parallelizer.h" +#include "src/Core/products/CoeffBasedProduct.h" +#include "src/Core/products/GeneralMatrixVector.h" +#include "src/Core/products/GeneralMatrixMatrix.h" +#include "src/Core/SolveTriangular.h" +#include "src/Core/products/GeneralMatrixMatrixTriangular.h" +#include "src/Core/products/SelfadjointMatrixVector.h" +#include "src/Core/products/SelfadjointMatrixMatrix.h" +#include "src/Core/products/SelfadjointProduct.h" +#include "src/Core/products/SelfadjointRank2Update.h" +#include "src/Core/products/TriangularMatrixVector.h" +#include "src/Core/products/TriangularMatrixMatrix.h" +#include "src/Core/products/TriangularSolverMatrix.h" +#include "src/Core/products/TriangularSolverVector.h" +#include "src/Core/BandMatrix.h" + +#include "src/Core/BooleanRedux.h" +#include "src/Core/Select.h" +#include "src/Core/VectorwiseOp.h" +#include "src/Core/Random.h" +#include "src/Core/Replicate.h" +#include "src/Core/Reverse.h" +#include "src/Core/ArrayBase.h" +#include "src/Core/ArrayWrapper.h" + +#ifdef EIGEN_USE_BLAS +#include "src/Core/products/GeneralMatrixMatrix_MKL.h" +#include "src/Core/products/GeneralMatrixVector_MKL.h" +#include "src/Core/products/GeneralMatrixMatrixTriangular_MKL.h" +#include "src/Core/products/SelfadjointMatrixMatrix_MKL.h" +#include "src/Core/products/SelfadjointMatrixVector_MKL.h" +#include "src/Core/products/TriangularMatrixMatrix_MKL.h" +#include "src/Core/products/TriangularMatrixVector_MKL.h" +#include "src/Core/products/TriangularSolverMatrix_MKL.h" +#endif // EIGEN_USE_BLAS + +#ifdef EIGEN_USE_MKL_VML +#include "src/Core/Assign_MKL.h" +#endif + +#include "src/Core/GlobalFunctions.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#ifdef EIGEN2_SUPPORT +#include "Eigen2Support" +#endif + +#endif // EIGEN_CORE_H diff --git a/Biopool/Sources/Eigen/Dense b/Biopool/Sources/Eigen/Dense new file mode 100644 index 0000000..5768910 --- /dev/null +++ b/Biopool/Sources/Eigen/Dense @@ -0,0 +1,7 @@ +#include "Core" +#include "LU" +#include "Cholesky" +#include "QR" +#include "SVD" +#include "Geometry" +#include "Eigenvalues" diff --git a/Biopool/Sources/Eigen/Eigen b/Biopool/Sources/Eigen/Eigen new file mode 100644 index 0000000..19b40ea --- /dev/null +++ b/Biopool/Sources/Eigen/Eigen @@ -0,0 +1,2 @@ +#include "Dense" +//#include "Sparse" diff --git a/Biopool/Sources/Eigen/Eigen2Support b/Biopool/Sources/Eigen/Eigen2Support new file mode 100644 index 0000000..c2aa2f6 --- /dev/null +++ b/Biopool/Sources/Eigen/Eigen2Support @@ -0,0 +1,97 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN2SUPPORT_H +#define EIGEN2SUPPORT_H + +#if (!defined(EIGEN2_SUPPORT)) || (!defined(EIGEN_CORE_H)) +#error Eigen2 support must be enabled by defining EIGEN2_SUPPORT before including any Eigen header +#endif + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \ingroup Support_modules + * \defgroup Eigen2Support_Module Eigen2 support module + * This module provides a couple of deprecated functions improving the compatibility with Eigen2. + * + * To use it, define EIGEN2_SUPPORT before including any Eigen header + * \code + * #define EIGEN2_SUPPORT + * \endcode + * + */ + +#include "src/Eigen2Support/Macros.h" +#include "src/Eigen2Support/Memory.h" +#include "src/Eigen2Support/Meta.h" +#include "src/Eigen2Support/Lazy.h" +#include "src/Eigen2Support/Cwise.h" +#include "src/Eigen2Support/CwiseOperators.h" +#include "src/Eigen2Support/TriangularSolver.h" +#include "src/Eigen2Support/Block.h" +#include "src/Eigen2Support/VectorBlock.h" +#include "src/Eigen2Support/Minor.h" +#include "src/Eigen2Support/MathFunctions.h" + + +#include "src/Core/util/ReenableStupidWarnings.h" + +// Eigen2 used to include iostream +#include + +#define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ +using Eigen::Matrix##SizeSuffix##TypeSuffix; \ +using Eigen::Vector##SizeSuffix##TypeSuffix; \ +using Eigen::RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(TypeSuffix) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \ + +#define EIGEN_USING_MATRIX_TYPEDEFS \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(i) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(f) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(d) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(cf) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(cd) + +#define USING_PART_OF_NAMESPACE_EIGEN \ +EIGEN_USING_MATRIX_TYPEDEFS \ +using Eigen::Matrix; \ +using Eigen::MatrixBase; \ +using Eigen::ei_random; \ +using Eigen::ei_real; \ +using Eigen::ei_imag; \ +using Eigen::ei_conj; \ +using Eigen::ei_abs; \ +using Eigen::ei_abs2; \ +using Eigen::ei_sqrt; \ +using Eigen::ei_exp; \ +using Eigen::ei_log; \ +using Eigen::ei_sin; \ +using Eigen::ei_cos; + +#endif // EIGEN2SUPPORT_H diff --git a/Biopool/Sources/Eigen/Eigenvalues b/Biopool/Sources/Eigen/Eigenvalues new file mode 100644 index 0000000..af99ccd --- /dev/null +++ b/Biopool/Sources/Eigen/Eigenvalues @@ -0,0 +1,46 @@ +#ifndef EIGEN_EIGENVALUES_MODULE_H +#define EIGEN_EIGENVALUES_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Cholesky" +#include "Jacobi" +#include "Householder" +#include "LU" +#include "Geometry" + +/** \defgroup Eigenvalues_Module Eigenvalues module + * + * + * + * This module mainly provides various eigenvalue solvers. + * This module also provides some MatrixBase methods, including: + * - MatrixBase::eigenvalues(), + * - MatrixBase::operatorNorm() + * + * \code + * #include + * \endcode + */ + +#include "src/Eigenvalues/Tridiagonalization.h" +#include "src/Eigenvalues/RealSchur.h" +#include "src/Eigenvalues/EigenSolver.h" +#include "src/Eigenvalues/SelfAdjointEigenSolver.h" +#include "src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h" +#include "src/Eigenvalues/HessenbergDecomposition.h" +#include "src/Eigenvalues/ComplexSchur.h" +#include "src/Eigenvalues/ComplexEigenSolver.h" +#include "src/Eigenvalues/MatrixBaseEigenvalues.h" +#ifdef EIGEN_USE_LAPACKE +#include "src/Eigenvalues/RealSchur_MKL.h" +#include "src/Eigenvalues/ComplexSchur_MKL.h" +#include "src/Eigenvalues/SelfAdjointEigenSolver_MKL.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_EIGENVALUES_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/Geometry b/Biopool/Sources/Eigen/Geometry new file mode 100644 index 0000000..efd9d45 --- /dev/null +++ b/Biopool/Sources/Eigen/Geometry @@ -0,0 +1,63 @@ +#ifndef EIGEN_GEOMETRY_MODULE_H +#define EIGEN_GEOMETRY_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "SVD" +#include "LU" +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/** \defgroup Geometry_Module Geometry module + * + * + * + * This module provides support for: + * - fixed-size homogeneous transformations + * - translation, scaling, 2D and 3D rotations + * - quaternions + * - \ref MatrixBase::cross() "cross product" + * - \ref MatrixBase::unitOrthogonal() "orthognal vector generation" + * - some linear components: parametrized-lines and hyperplanes + * + * \code + * #include + * \endcode + */ + +#include "src/Geometry/OrthoMethods.h" +#include "src/Geometry/EulerAngles.h" + +#if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + #include "src/Geometry/Homogeneous.h" + #include "src/Geometry/RotationBase.h" + #include "src/Geometry/Rotation2D.h" + #include "src/Geometry/Quaternion.h" + #include "src/Geometry/AngleAxis.h" + #include "src/Geometry/Transform.h" + #include "src/Geometry/Translation.h" + #include "src/Geometry/Scaling.h" + #include "src/Geometry/Hyperplane.h" + #include "src/Geometry/ParametrizedLine.h" + #include "src/Geometry/AlignedBox.h" + #include "src/Geometry/Umeyama.h" + + #if defined EIGEN_VECTORIZE_SSE + #include "src/Geometry/arch/Geometry_SSE.h" + #endif +#endif + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/Geometry/All.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_GEOMETRY_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ + diff --git a/Biopool/Sources/Eigen/Householder b/Biopool/Sources/Eigen/Householder new file mode 100644 index 0000000..6e348db --- /dev/null +++ b/Biopool/Sources/Eigen/Householder @@ -0,0 +1,23 @@ +#ifndef EIGEN_HOUSEHOLDER_MODULE_H +#define EIGEN_HOUSEHOLDER_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup Householder_Module Householder module + * This module provides Householder transformations. + * + * \code + * #include + * \endcode + */ + +#include "src/Householder/Householder.h" +#include "src/Householder/HouseholderSequence.h" +#include "src/Householder/BlockHouseholder.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_HOUSEHOLDER_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/IterativeLinearSolvers b/Biopool/Sources/Eigen/IterativeLinearSolvers new file mode 100644 index 0000000..315c2dd --- /dev/null +++ b/Biopool/Sources/Eigen/IterativeLinearSolvers @@ -0,0 +1,40 @@ +#ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H +#define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H + +#include "SparseCore" +#include "OrderingMethods" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \ingroup Sparse_modules + * \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module + * + * This module currently provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a squared matrix, usually very large and sparse. + * Those solvers are accessible via the following classes: + * - ConjugateGradient for selfadjoint (hermitian) matrices, + * - BiCGSTAB for general square matrices. + * + * These iterative solvers are associated with some preconditioners: + * - IdentityPreconditioner - not really useful + * - DiagonalPreconditioner - also called JAcobi preconditioner, work very well on diagonal dominant matrices. + * - IncompleteILUT - incomplete LU factorization with dual thresholding + * + * Such problems can also be solved using the direct sparse decomposition modules: SparseCholesky, CholmodSupport, UmfPackSupport, SuperLUSupport. + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/IterativeLinearSolvers/IterativeSolverBase.h" +#include "src/IterativeLinearSolvers/BasicPreconditioners.h" +#include "src/IterativeLinearSolvers/ConjugateGradient.h" +#include "src/IterativeLinearSolvers/BiCGSTAB.h" +#include "src/IterativeLinearSolvers/IncompleteLUT.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_ITERATIVELINEARSOLVERS_MODULE_H diff --git a/Biopool/Sources/Eigen/Jacobi b/Biopool/Sources/Eigen/Jacobi new file mode 100644 index 0000000..ba8a4dc --- /dev/null +++ b/Biopool/Sources/Eigen/Jacobi @@ -0,0 +1,26 @@ +#ifndef EIGEN_JACOBI_MODULE_H +#define EIGEN_JACOBI_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup Jacobi_Module Jacobi module + * This module provides Jacobi and Givens rotations. + * + * \code + * #include + * \endcode + * + * In addition to listed classes, it defines the two following MatrixBase methods to apply a Jacobi or Givens rotation: + * - MatrixBase::applyOnTheLeft() + * - MatrixBase::applyOnTheRight(). + */ + +#include "src/Jacobi/Jacobi.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_JACOBI_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ + diff --git a/Biopool/Sources/Eigen/LU b/Biopool/Sources/Eigen/LU new file mode 100644 index 0000000..db57955 --- /dev/null +++ b/Biopool/Sources/Eigen/LU @@ -0,0 +1,41 @@ +#ifndef EIGEN_LU_MODULE_H +#define EIGEN_LU_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup LU_Module LU module + * This module includes %LU decomposition and related notions such as matrix inversion and determinant. + * This module defines the following MatrixBase methods: + * - MatrixBase::inverse() + * - MatrixBase::determinant() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/misc/Kernel.h" +#include "src/misc/Image.h" +#include "src/LU/FullPivLU.h" +#include "src/LU/PartialPivLU.h" +#ifdef EIGEN_USE_LAPACKE +#include "src/LU/PartialPivLU_MKL.h" +#endif +#include "src/LU/Determinant.h" +#include "src/LU/Inverse.h" + +#if defined EIGEN_VECTORIZE_SSE + #include "src/LU/arch/Inverse_SSE.h" +#endif + +#ifdef EIGEN2_SUPPORT + #include "src/Eigen2Support/LU.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_LU_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/LeastSquares b/Biopool/Sources/Eigen/LeastSquares new file mode 100644 index 0000000..35137c2 --- /dev/null +++ b/Biopool/Sources/Eigen/LeastSquares @@ -0,0 +1,32 @@ +#ifndef EIGEN_REGRESSION_MODULE_H +#define EIGEN_REGRESSION_MODULE_H + +#ifndef EIGEN2_SUPPORT +#error LeastSquares is only available in Eigen2 support mode (define EIGEN2_SUPPORT) +#endif + +// exclude from normal eigen3-only documentation +#ifdef EIGEN2_SUPPORT + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Eigenvalues" +#include "Geometry" + +/** \defgroup LeastSquares_Module LeastSquares module + * This module provides linear regression and related features. + * + * \code + * #include + * \endcode + */ + +#include "src/Eigen2Support/LeastSquares.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN2_SUPPORT + +#endif // EIGEN_REGRESSION_MODULE_H diff --git a/Biopool/Sources/Eigen/OrderingMethods b/Biopool/Sources/Eigen/OrderingMethods new file mode 100644 index 0000000..1e2d874 --- /dev/null +++ b/Biopool/Sources/Eigen/OrderingMethods @@ -0,0 +1,23 @@ +#ifndef EIGEN_ORDERINGMETHODS_MODULE_H +#define EIGEN_ORDERINGMETHODS_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \ingroup Sparse_modules + * \defgroup OrderingMethods_Module OrderingMethods module + * + * This module is currently for internal use only. + * + * + * \code + * #include + * \endcode + */ + +#include "src/OrderingMethods/Amd.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_ORDERINGMETHODS_MODULE_H diff --git a/Biopool/Sources/Eigen/PaStiXSupport b/Biopool/Sources/Eigen/PaStiXSupport new file mode 100644 index 0000000..7c616ee --- /dev/null +++ b/Biopool/Sources/Eigen/PaStiXSupport @@ -0,0 +1,46 @@ +#ifndef EIGEN_PASTIXSUPPORT_MODULE_H +#define EIGEN_PASTIXSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include +extern "C" { +#include +#include +} + +#ifdef complex +#undef complex +#endif + +/** \ingroup Support_modules + * \defgroup PaStiXSupport_Module PaStiXSupport module + * + * This module provides an interface to the PaSTiX library. + * PaSTiX is a general \b supernodal, \b parallel and \b opensource sparse solver. + * It provides the two following main factorization classes: + * - class PastixLLT : a supernodal, parallel LLt Cholesky factorization. + * - class PastixLDLT: a supernodal, parallel LDLt Cholesky factorization. + * - class PastixLU : a supernodal, parallel LU factorization (optimized for a symmetric pattern). + * + * \code + * #include + * \endcode + * + * In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. + * The dependencies depend on how PaSTiX has been compiled. + * For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/PaStiXSupport/PaStiXSupport.h" + + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_PASTIXSUPPORT_MODULE_H diff --git a/Biopool/Sources/Eigen/PardisoSupport b/Biopool/Sources/Eigen/PardisoSupport new file mode 100644 index 0000000..99330ce --- /dev/null +++ b/Biopool/Sources/Eigen/PardisoSupport @@ -0,0 +1,30 @@ +#ifndef EIGEN_PARDISOSUPPORT_MODULE_H +#define EIGEN_PARDISOSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include + +#include + +/** \ingroup Support_modules + * \defgroup PardisoSupport_Module PardisoSupport module + * + * This module brings support for the Intel(R) MKL PARDISO direct sparse solvers. + * + * \code + * #include + * \endcode + * + * In order to use this module, the MKL headers must be accessible from the include paths, and your binary must be linked to the MKL library and its dependencies. + * See this \ref TopicUsingIntelMKL "page" for more information on MKL-Eigen integration. + * + */ + +#include "src/PardisoSupport/PardisoSupport.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_PARDISOSUPPORT_MODULE_H diff --git a/Biopool/Sources/Eigen/QR b/Biopool/Sources/Eigen/QR new file mode 100644 index 0000000..ac5b026 --- /dev/null +++ b/Biopool/Sources/Eigen/QR @@ -0,0 +1,45 @@ +#ifndef EIGEN_QR_MODULE_H +#define EIGEN_QR_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Cholesky" +#include "Jacobi" +#include "Householder" + +/** \defgroup QR_Module QR module + * + * + * + * This module provides various QR decompositions + * This module also provides some MatrixBase methods, including: + * - MatrixBase::qr(), + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/QR/HouseholderQR.h" +#include "src/QR/FullPivHouseholderQR.h" +#include "src/QR/ColPivHouseholderQR.h" +#ifdef EIGEN_USE_LAPACKE +#include "src/QR/HouseholderQR_MKL.h" +#include "src/QR/ColPivHouseholderQR_MKL.h" +#endif + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/QR.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#ifdef EIGEN2_SUPPORT +#include "Eigenvalues" +#endif + +#endif // EIGEN_QR_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/QtAlignedMalloc b/Biopool/Sources/Eigen/QtAlignedMalloc new file mode 100644 index 0000000..46f7d83 --- /dev/null +++ b/Biopool/Sources/Eigen/QtAlignedMalloc @@ -0,0 +1,34 @@ + +#ifndef EIGEN_QTMALLOC_MODULE_H +#define EIGEN_QTMALLOC_MODULE_H + +#include "Core" + +#if (!EIGEN_MALLOC_ALREADY_ALIGNED) + +#include "src/Core/util/DisableStupidWarnings.h" + +void *qMalloc(size_t size) +{ + return Eigen::internal::aligned_malloc(size); +} + +void qFree(void *ptr) +{ + Eigen::internal::aligned_free(ptr); +} + +void *qRealloc(void *ptr, size_t size) +{ + void* newPtr = Eigen::internal::aligned_malloc(size); + memcpy(newPtr, ptr, size); + Eigen::internal::aligned_free(ptr); + return newPtr; +} + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif + +#endif // EIGEN_QTMALLOC_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/SVD b/Biopool/Sources/Eigen/SVD new file mode 100644 index 0000000..fd31001 --- /dev/null +++ b/Biopool/Sources/Eigen/SVD @@ -0,0 +1,37 @@ +#ifndef EIGEN_SVD_MODULE_H +#define EIGEN_SVD_MODULE_H + +#include "QR" +#include "Householder" +#include "Jacobi" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup SVD_Module SVD module + * + * + * + * This module provides SVD decomposition for matrices (both real and complex). + * This decomposition is accessible via the following MatrixBase method: + * - MatrixBase::jacobiSvd() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/SVD/JacobiSVD.h" +#if defined(EIGEN_USE_LAPACKE) && !defined(EIGEN_USE_LAPACKE_STRICT) +#include "src/SVD/JacobiSVD_MKL.h" +#endif +#include "src/SVD/UpperBidiagonalization.h" + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/SVD.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SVD_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Biopool/Sources/Eigen/Sparse b/Biopool/Sources/Eigen/Sparse new file mode 100644 index 0000000..2d17571 --- /dev/null +++ b/Biopool/Sources/Eigen/Sparse @@ -0,0 +1,23 @@ +#ifndef EIGEN_SPARSE_MODULE_H +#define EIGEN_SPARSE_MODULE_H + +/** \defgroup Sparse_modules Sparse modules + * + * Meta-module including all related modules: + * - SparseCore + * - OrderingMethods + * - SparseCholesky + * - IterativeLinearSolvers + * + * \code + * #include + * \endcode + */ + +#include "SparseCore" +#include "OrderingMethods" +#include "SparseCholesky" +#include "IterativeLinearSolvers" + +#endif // EIGEN_SPARSE_MODULE_H + diff --git a/Biopool/Sources/Eigen/SparseCholesky b/Biopool/Sources/Eigen/SparseCholesky new file mode 100644 index 0000000..5f82742 --- /dev/null +++ b/Biopool/Sources/Eigen/SparseCholesky @@ -0,0 +1,30 @@ +#ifndef EIGEN_SPARSECHOLESKY_MODULE_H +#define EIGEN_SPARSECHOLESKY_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \ingroup Sparse_modules + * \defgroup SparseCholesky_Module SparseCholesky module + * + * This module currently provides two variants of the direct sparse Cholesky decomposition for selfadjoint (hermitian) matrices. + * Those decompositions are accessible via the following classes: + * - SimplicialLLt, + * - SimplicialLDLt + * + * Such problems can also be solved using the ConjugateGradient solver from the IterativeLinearSolvers module. + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/SparseCholesky/SimplicialCholesky.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SPARSECHOLESKY_MODULE_H diff --git a/Biopool/Sources/Eigen/SparseCore b/Biopool/Sources/Eigen/SparseCore new file mode 100644 index 0000000..41d28c9 --- /dev/null +++ b/Biopool/Sources/Eigen/SparseCore @@ -0,0 +1,66 @@ +#ifndef EIGEN_SPARSECORE_MODULE_H +#define EIGEN_SPARSECORE_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include +#include +#include +#include +#include + +/** \ingroup Sparse_modules + * \defgroup SparseCore_Module SparseCore module + * + * This module provides a sparse matrix representation, and basic associatd matrix manipulations + * and operations. + * + * See the \ref TutorialSparse "Sparse tutorial" + * + * \code + * #include + * \endcode + * + * This module depends on: Core. + */ + +namespace Eigen { + +/** The type used to identify a general sparse storage. */ +struct Sparse {}; + +} + +#include "src/SparseCore/SparseUtil.h" +#include "src/SparseCore/SparseMatrixBase.h" +#include "src/SparseCore/CompressedStorage.h" +#include "src/SparseCore/AmbiVector.h" +#include "src/SparseCore/SparseMatrix.h" +#include "src/SparseCore/MappedSparseMatrix.h" +#include "src/SparseCore/SparseVector.h" +#include "src/SparseCore/CoreIterators.h" +#include "src/SparseCore/SparseBlock.h" +#include "src/SparseCore/SparseTranspose.h" +#include "src/SparseCore/SparseCwiseUnaryOp.h" +#include "src/SparseCore/SparseCwiseBinaryOp.h" +#include "src/SparseCore/SparseDot.h" +#include "src/SparseCore/SparsePermutation.h" +#include "src/SparseCore/SparseAssign.h" +#include "src/SparseCore/SparseRedux.h" +#include "src/SparseCore/SparseFuzzy.h" +#include "src/SparseCore/ConservativeSparseSparseProduct.h" +#include "src/SparseCore/SparseSparseProductWithPruning.h" +#include "src/SparseCore/SparseProduct.h" +#include "src/SparseCore/SparseDenseProduct.h" +#include "src/SparseCore/SparseDiagonalProduct.h" +#include "src/SparseCore/SparseTriangularView.h" +#include "src/SparseCore/SparseSelfAdjointView.h" +#include "src/SparseCore/TriangularSolver.h" +#include "src/SparseCore/SparseView.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SPARSECORE_MODULE_H + diff --git a/Biopool/Sources/Eigen/StdDeque b/Biopool/Sources/Eigen/StdDeque new file mode 100644 index 0000000..a4f9623 --- /dev/null +++ b/Biopool/Sources/Eigen/StdDeque @@ -0,0 +1,42 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDDEQUE_MODULE_H +#define EIGEN_STDDEQUE_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdDeque.h" + +#endif + +#endif // EIGEN_STDDEQUE_MODULE_H diff --git a/Biopool/Sources/Eigen/StdList b/Biopool/Sources/Eigen/StdList new file mode 100644 index 0000000..d914ded --- /dev/null +++ b/Biopool/Sources/Eigen/StdList @@ -0,0 +1,41 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDLIST_MODULE_H +#define EIGEN_STDLIST_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdList.h" + +#endif + +#endif // EIGEN_STDLIST_MODULE_H diff --git a/Biopool/Sources/Eigen/StdVector b/Biopool/Sources/Eigen/StdVector new file mode 100644 index 0000000..3d8995e --- /dev/null +++ b/Biopool/Sources/Eigen/StdVector @@ -0,0 +1,42 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDVECTOR_MODULE_H +#define EIGEN_STDVECTOR_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdVector.h" + +#endif + +#endif // EIGEN_STDVECTOR_MODULE_H diff --git a/Biopool/Sources/Eigen/SuperLUSupport b/Biopool/Sources/Eigen/SuperLUSupport new file mode 100644 index 0000000..575e14f --- /dev/null +++ b/Biopool/Sources/Eigen/SuperLUSupport @@ -0,0 +1,59 @@ +#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H +#define EIGEN_SUPERLUSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +#ifdef EMPTY +#define EIGEN_EMPTY_WAS_ALREADY_DEFINED +#endif + +typedef int int_t; +#include +#include +#include + +// slu_util.h defines a preprocessor token named EMPTY which is really polluting, +// so we remove it in favor of a SUPERLU_EMPTY token. +// If EMPTY was already defined then we don't undef it. + +#if defined(EIGEN_EMPTY_WAS_ALREADY_DEFINED) +# undef EIGEN_EMPTY_WAS_ALREADY_DEFINED +#elif defined(EMPTY) +# undef EMPTY +#endif + +#define SUPERLU_EMPTY (-1) + +namespace Eigen { struct SluMatrix; } + +/** \ingroup Support_modules + * \defgroup SuperLUSupport_Module SuperLUSupport module + * + * This module provides an interface to the SuperLU library. + * It provides the following factorization class: + * - class SuperLU: a supernodal sequential LU factorization. + * - class SuperILU: a supernodal sequential incomplete LU factorization (to be used as a preconditioner for iterative methods). + * + * \warning When including this module, you have to use SUPERLU_EMPTY instead of EMPTY which is no longer defined because it is too polluting. + * + * \code + * #include + * \endcode + * + * In order to use this module, the superlu headers must be accessible from the include paths, and your binary must be linked to the superlu library and its dependencies. + * The dependencies depend on how superlu has been compiled. + * For a cmake based project, you can use our FindSuperLU.cmake module to help you in this task. + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/SuperLUSupport/SuperLUSupport.h" + + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SUPERLUSUPPORT_MODULE_H diff --git a/Biopool/Sources/Eigen/UmfPackSupport b/Biopool/Sources/Eigen/UmfPackSupport new file mode 100644 index 0000000..984f64a --- /dev/null +++ b/Biopool/Sources/Eigen/UmfPackSupport @@ -0,0 +1,36 @@ +#ifndef EIGEN_UMFPACKSUPPORT_MODULE_H +#define EIGEN_UMFPACKSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +extern "C" { +#include +} + +/** \ingroup Support_modules + * \defgroup UmfPackSupport_Module UmfPackSupport module + * + * This module provides an interface to the UmfPack library which is part of the suitesparse package. + * It provides the following factorization class: + * - class UmfPackLU: a multifrontal sequential LU factorization. + * + * \code + * #include + * \endcode + * + * In order to use this module, the umfpack headers must be accessible from the include paths, and your binary must be linked to the umfpack library and its dependencies. + * The dependencies depend on how umfpack has been compiled. + * For a cmake based project, you can use our FindUmfPack.cmake module to help you in this task. + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "src/UmfPackSupport/UmfPackSupport.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_UMFPACKSUPPORT_MODULE_H diff --git a/Biopool/Sources/Eigen/src/CMakeLists.txt b/Biopool/Sources/Eigen/src/CMakeLists.txt new file mode 100644 index 0000000..c326f37 --- /dev/null +++ b/Biopool/Sources/Eigen/src/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB Eigen_src_subdirectories "*") +escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +foreach(f ${Eigen_src_subdirectories}) + if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" ) + add_subdirectory(${f}) + endif() +endforeach() diff --git a/Biopool/Sources/Eigen/src/Cholesky/CMakeLists.txt b/Biopool/Sources/Eigen/src/Cholesky/CMakeLists.txt new file mode 100644 index 0000000..d01488b --- /dev/null +++ b/Biopool/Sources/Eigen/src/Cholesky/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB Eigen_Cholesky_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Cholesky_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/Cholesky COMPONENT Devel + ) diff --git a/Biopool/Sources/Eigen/src/Cholesky/LDLT.h b/Biopool/Sources/Eigen/src/Cholesky/LDLT.h new file mode 100644 index 0000000..a5e3d54 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Cholesky/LDLT.h @@ -0,0 +1,607 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2011 Gael Guennebaud +// Copyright (C) 2009 Keir Mierle +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2011 Timothy E. Holy +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_LDLT_H +#define EIGEN_LDLT_H + +namespace Eigen { + +namespace internal { +template struct LDLT_Traits; +} + +/** \ingroup Cholesky_Module + * + * \class LDLT + * + * \brief Robust Cholesky decomposition of a matrix with pivoting + * + * \param MatrixType the type of the matrix of which to compute the LDL^T Cholesky decomposition + * \param UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper. + * The other triangular part won't be read. + * + * Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite + * matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L + * is lower triangular with a unit diagonal and D is a diagonal matrix. + * + * The decomposition uses pivoting to ensure stability, so that L will have + * zeros in the bottom right rank(A) - n submatrix. Avoiding the square root + * on D also stabilizes the computation. + * + * Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky + * decomposition to determine whether a system of equations has a solution. + * + * \sa MatrixBase::ldlt(), class LLT + */ +template class LDLT +{ + public: + typedef _MatrixType MatrixType; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + Options = MatrixType::Options & ~RowMajorBit, // these are the options for the TmpMatrixType, we need a ColMajor matrix here! + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + UpLo = _UpLo + }; + typedef typename MatrixType::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + typedef typename MatrixType::Index Index; + typedef Matrix TmpMatrixType; + + typedef Transpositions TranspositionType; + typedef PermutationMatrix PermutationType; + + typedef internal::LDLT_Traits Traits; + + /** \brief Default Constructor. + * + * The default constructor is useful in cases in which the user intends to + * perform decompositions via LDLT::compute(const MatrixType&). + */ + LDLT() : m_matrix(), m_transpositions(), m_isInitialized(false) {} + + /** \brief Default Constructor with memory preallocation + * + * Like the default constructor but with preallocation of the internal data + * according to the specified problem \a size. + * \sa LDLT() + */ + LDLT(Index size) + : m_matrix(size, size), + m_transpositions(size), + m_temporary(size), + m_isInitialized(false) + {} + + /** \brief Constructor with decomposition + * + * This calculates the decomposition for the input \a matrix. + * \sa LDLT(Index size) + */ + LDLT(const MatrixType& matrix) + : m_matrix(matrix.rows(), matrix.cols()), + m_transpositions(matrix.rows()), + m_temporary(matrix.rows()), + m_isInitialized(false) + { + compute(matrix); + } + + /** Clear any existing decomposition + * \sa rankUpdate(w,sigma) + */ + void setZero() + { + m_isInitialized = false; + } + + /** \returns a view of the upper triangular matrix U */ + inline typename Traits::MatrixU matrixU() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return Traits::getU(m_matrix); + } + + /** \returns a view of the lower triangular matrix L */ + inline typename Traits::MatrixL matrixL() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return Traits::getL(m_matrix); + } + + /** \returns the permutation matrix P as a transposition sequence. + */ + inline const TranspositionType& transpositionsP() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_transpositions; + } + + /** \returns the coefficients of the diagonal matrix D */ + inline Diagonal vectorD() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_matrix.diagonal(); + } + + /** \returns true if the matrix is positive (semidefinite) */ + inline bool isPositive() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_sign == 1; + } + + #ifdef EIGEN2_SUPPORT + inline bool isPositiveDefinite() const + { + return isPositive(); + } + #endif + + /** \returns true if the matrix is negative (semidefinite) */ + inline bool isNegative(void) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_sign == -1; + } + + /** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * This function also supports in-place solves using the syntax x = decompositionObject.solve(x) . + * + * \note_about_checking_solutions + * + * More precisely, this method solves \f$ A x = b \f$ using the decomposition \f$ A = P^T L D L^* P \f$ + * by solving the systems \f$ P^T y_1 = b \f$, \f$ L y_2 = y_1 \f$, \f$ D y_3 = y_2 \f$, + * \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then + * \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the + * least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function + * computes the least-square solution of \f$ A x = b \f$ is \f$ A \f$ is singular. + * + * \sa MatrixBase::ldlt() + */ + template + inline const internal::solve_retval + solve(const MatrixBase& b) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + eigen_assert(m_matrix.rows()==b.rows() + && "LDLT::solve(): invalid number of rows of the right hand side matrix b"); + return internal::solve_retval(*this, b.derived()); + } + + #ifdef EIGEN2_SUPPORT + template + bool solve(const MatrixBase& b, ResultType *result) const + { + *result = this->solve(b); + return true; + } + #endif + + template + bool solveInPlace(MatrixBase &bAndX) const; + + LDLT& compute(const MatrixType& matrix); + + template + LDLT& rankUpdate(const MatrixBase& w,RealScalar alpha=1); + + /** \returns the internal LDLT decomposition matrix + * + * TODO: document the storage layout + */ + inline const MatrixType& matrixLDLT() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_matrix; + } + + MatrixType reconstructedMatrix() const; + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + /** \brief Reports whether previous computation was successful. + * + * \returns \c Success if computation was succesful, + * \c NumericalIssue if the matrix.appears to be negative. + */ + ComputationInfo info() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return Success; + } + + protected: + + /** \internal + * Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U. + * The strict upper part is used during the decomposition, the strict lower + * part correspond to the coefficients of L (its diagonal is equal to 1 and + * is not stored), and the diagonal entries correspond to D. + */ + MatrixType m_matrix; + TranspositionType m_transpositions; + TmpMatrixType m_temporary; + int m_sign; + bool m_isInitialized; +}; + +namespace internal { + +template struct ldlt_inplace; + +template<> struct ldlt_inplace +{ + template + static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, int* sign=0) + { + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef typename MatrixType::Index Index; + eigen_assert(mat.rows()==mat.cols()); + const Index size = mat.rows(); + + if (size <= 1) + { + transpositions.setIdentity(); + if(sign) + *sign = real(mat.coeff(0,0))>0 ? 1:-1; + return true; + } + + RealScalar cutoff(0), biggest_in_corner; + + for (Index k = 0; k < size; ++k) + { + // Find largest diagonal element + Index index_of_biggest_in_corner; + biggest_in_corner = mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner); + index_of_biggest_in_corner += k; + + if(k == 0) + { + // The biggest overall is the point of reference to which further diagonals + // are compared; if any diagonal is negligible compared + // to the largest overall, the algorithm bails. + cutoff = abs(NumTraits::epsilon() * biggest_in_corner); + + if(sign) + *sign = real(mat.diagonal().coeff(index_of_biggest_in_corner)) > 0 ? 1 : -1; + } + + // Finish early if the matrix is not full rank. + if(biggest_in_corner < cutoff) + { + for(Index i = k; i < size; i++) transpositions.coeffRef(i) = i; + break; + } + + transpositions.coeffRef(k) = index_of_biggest_in_corner; + if(k != index_of_biggest_in_corner) + { + // apply the transposition while taking care to consider only + // the lower triangular part + Index s = size-index_of_biggest_in_corner-1; // trailing size after the biggest element + mat.row(k).head(k).swap(mat.row(index_of_biggest_in_corner).head(k)); + mat.col(k).tail(s).swap(mat.col(index_of_biggest_in_corner).tail(s)); + std::swap(mat.coeffRef(k,k),mat.coeffRef(index_of_biggest_in_corner,index_of_biggest_in_corner)); + for(int i=k+1;i::IsComplex) + mat.coeffRef(index_of_biggest_in_corner,k) = conj(mat.coeff(index_of_biggest_in_corner,k)); + } + + // partition the matrix: + // A00 | - | - + // lu = A10 | A11 | - + // A20 | A21 | A22 + Index rs = size - k - 1; + Block A21(mat,k+1,k,rs,1); + Block A10(mat,k,0,1,k); + Block A20(mat,k+1,0,rs,k); + + if(k>0) + { + temp.head(k) = mat.diagonal().head(k).asDiagonal() * A10.adjoint(); + mat.coeffRef(k,k) -= (A10 * temp.head(k)).value(); + if(rs>0) + A21.noalias() -= A20 * temp.head(k); + } + if((rs>0) && (abs(mat.coeffRef(k,k)) > cutoff)) + A21 /= mat.coeffRef(k,k); + } + + return true; + } + + // Reference for the algorithm: Davis and Hager, "Multiple Rank + // Modifications of a Sparse Cholesky Factorization" (Algorithm 1) + // Trivial rearrangements of their computations (Timothy E. Holy) + // allow their algorithm to work for rank-1 updates even if the + // original matrix is not of full rank. + // Here only rank-1 updates are implemented, to reduce the + // requirement for intermediate storage and improve accuracy + template + static bool updateInPlace(MatrixType& mat, MatrixBase& w, typename MatrixType::RealScalar sigma=1) + { + using internal::isfinite; + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef typename MatrixType::Index Index; + + const Index size = mat.rows(); + eigen_assert(mat.cols() == size && w.size()==size); + + RealScalar alpha = 1; + + // Apply the update + for (Index j = 0; j < size; j++) + { + // Check for termination due to an original decomposition of low-rank + if (!isfinite(alpha)) + break; + + // Update the diagonal terms + RealScalar dj = real(mat.coeff(j,j)); + Scalar wj = w.coeff(j); + RealScalar swj2 = sigma*abs2(wj); + RealScalar gamma = dj*alpha + swj2; + + mat.coeffRef(j,j) += swj2/alpha; + alpha += swj2/dj; + + + // Update the terms of L + Index rs = size-j-1; + w.tail(rs) -= wj * mat.col(j).tail(rs); + if(gamma != 0) + mat.col(j).tail(rs) += (sigma*conj(wj)/gamma)*w.tail(rs); + } + return true; + } + + template + static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w, typename MatrixType::RealScalar sigma=1) + { + // Apply the permutation to the input w + tmp = transpositions * w; + + return ldlt_inplace::updateInPlace(mat,tmp,sigma); + } +}; + +template<> struct ldlt_inplace +{ + template + static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, int* sign=0) + { + Transpose matt(mat); + return ldlt_inplace::unblocked(matt, transpositions, temp, sign); + } + + template + static EIGEN_STRONG_INLINE bool update(MatrixType& mat, TranspositionType& transpositions, Workspace& tmp, WType& w, typename MatrixType::RealScalar sigma=1) + { + Transpose matt(mat); + return ldlt_inplace::update(matt, transpositions, tmp, w.conjugate(), sigma); + } +}; + +template struct LDLT_Traits +{ + typedef const TriangularView MatrixL; + typedef const TriangularView MatrixU; + static inline MatrixL getL(const MatrixType& m) { return m; } + static inline MatrixU getU(const MatrixType& m) { return m.adjoint(); } +}; + +template struct LDLT_Traits +{ + typedef const TriangularView MatrixL; + typedef const TriangularView MatrixU; + static inline MatrixL getL(const MatrixType& m) { return m.adjoint(); } + static inline MatrixU getU(const MatrixType& m) { return m; } +}; + +} // end namespace internal + +/** Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of \a matrix + */ +template +LDLT& LDLT::compute(const MatrixType& a) +{ + eigen_assert(a.rows()==a.cols()); + const Index size = a.rows(); + + m_matrix = a; + + m_transpositions.resize(size); + m_isInitialized = false; + m_temporary.resize(size); + + internal::ldlt_inplace::unblocked(m_matrix, m_transpositions, m_temporary, &m_sign); + + m_isInitialized = true; + return *this; +} + +/** Update the LDLT decomposition: given A = L D L^T, efficiently compute the decomposition of A + sigma w w^T. + * \param w a vector to be incorporated into the decomposition. + * \param sigma a scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column vectors. Optional; default value is +1. + * \sa setZero() + */ +template +template +LDLT& LDLT::rankUpdate(const MatrixBase& w,typename NumTraits::Real sigma) +{ + const Index size = w.rows(); + if (m_isInitialized) + { + eigen_assert(m_matrix.rows()==size); + } + else + { + m_matrix.resize(size,size); + m_matrix.setZero(); + m_transpositions.resize(size); + for (Index i = 0; i < size; i++) + m_transpositions.coeffRef(i) = i; + m_temporary.resize(size); + m_sign = sigma>=0 ? 1 : -1; + m_isInitialized = true; + } + + internal::ldlt_inplace::update(m_matrix, m_transpositions, m_temporary, w, sigma); + + return *this; +} + +namespace internal { +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef LDLT<_MatrixType,_UpLo> LDLTType; + EIGEN_MAKE_SOLVE_HELPERS(LDLTType,Rhs) + + template void evalTo(Dest& dst) const + { + eigen_assert(rhs().rows() == dec().matrixLDLT().rows()); + // dst = P b + dst = dec().transpositionsP() * rhs(); + + // dst = L^-1 (P b) + dec().matrixL().solveInPlace(dst); + + // dst = D^-1 (L^-1 P b) + // more precisely, use pseudo-inverse of D (see bug 241) + using std::abs; + using std::max; + typedef typename LDLTType::MatrixType MatrixType; + typedef typename LDLTType::Scalar Scalar; + typedef typename LDLTType::RealScalar RealScalar; + const Diagonal vectorD = dec().vectorD(); + RealScalar tolerance = (max)(vectorD.array().abs().maxCoeff() * NumTraits::epsilon(), + RealScalar(1) / NumTraits::highest()); // motivated by LAPACK's xGELSS + for (Index i = 0; i < vectorD.size(); ++i) { + if(abs(vectorD(i)) > tolerance) + dst.row(i) /= vectorD(i); + else + dst.row(i).setZero(); + } + + // dst = L^-T (D^-1 L^-1 P b) + dec().matrixU().solveInPlace(dst); + + // dst = P^-1 (L^-T D^-1 L^-1 P b) = A^-1 b + dst = dec().transpositionsP().transpose() * dst; + } +}; +} + +/** \internal use x = ldlt_object.solve(x); + * + * This is the \em in-place version of solve(). + * + * \param bAndX represents both the right-hand side matrix b and result x. + * + * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD. + * + * This version avoids a copy when the right hand side matrix b is not + * needed anymore. + * + * \sa LDLT::solve(), MatrixBase::ldlt() + */ +template +template +bool LDLT::solveInPlace(MatrixBase &bAndX) const +{ + eigen_assert(m_isInitialized && "LDLT is not initialized."); + const Index size = m_matrix.rows(); + eigen_assert(size == bAndX.rows()); + + bAndX = this->solve(bAndX); + + return true; +} + +/** \returns the matrix represented by the decomposition, + * i.e., it returns the product: P^T L D L^* P. + * This function is provided for debug purpose. */ +template +MatrixType LDLT::reconstructedMatrix() const +{ + eigen_assert(m_isInitialized && "LDLT is not initialized."); + const Index size = m_matrix.rows(); + MatrixType res(size,size); + + // P + res.setIdentity(); + res = transpositionsP() * res; + // L^* P + res = matrixU() * res; + // D(L^*P) + res = vectorD().asDiagonal() * res; + // L(DL^*P) + res = matrixL() * res; + // P^T (LDL^*P) + res = transpositionsP().transpose() * res; + + return res; +} + +/** \cholesky_module + * \returns the Cholesky decomposition with full pivoting without square root of \c *this + */ +template +inline const LDLT::PlainObject, UpLo> +SelfAdjointView::ldlt() const +{ + return LDLT(m_matrix); +} + +/** \cholesky_module + * \returns the Cholesky decomposition with full pivoting without square root of \c *this + */ +template +inline const LDLT::PlainObject> +MatrixBase::ldlt() const +{ + return LDLT(derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_LDLT_H diff --git a/Biopool/Sources/Eigen/src/Cholesky/LLT.h b/Biopool/Sources/Eigen/src/Cholesky/LLT.h new file mode 100644 index 0000000..17c6d6b --- /dev/null +++ b/Biopool/Sources/Eigen/src/Cholesky/LLT.h @@ -0,0 +1,503 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_LLT_H +#define EIGEN_LLT_H + +namespace Eigen { + +namespace internal{ +template struct LLT_Traits; +} + +/** \ingroup Cholesky_Module + * + * \class LLT + * + * \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features + * + * \param MatrixType the type of the matrix of which we are computing the LL^T Cholesky decomposition + * \param UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper. + * The other triangular part won't be read. + * + * This class performs a LL^T Cholesky decomposition of a symmetric, positive definite + * matrix A such that A = LL^* = U^*U, where L is lower triangular. + * + * While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b, + * for that purpose, we recommend the Cholesky decomposition without square root which is more stable + * and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other + * situations like generalised eigen problems with hermitian matrices. + * + * Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices, + * use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations + * has a solution. + * + * Example: \include LLT_example.cpp + * Output: \verbinclude LLT_example.out + * + * \sa MatrixBase::llt(), class LDLT + */ + /* HEY THIS DOX IS DISABLED BECAUSE THERE's A BUG EITHER HERE OR IN LDLT ABOUT THAT (OR BOTH) + * Note that during the decomposition, only the upper triangular part of A is considered. Therefore, + * the strict lower part does not have to store correct values. + */ +template class LLT +{ + public: + typedef _MatrixType MatrixType; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + Options = MatrixType::Options, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime + }; + typedef typename MatrixType::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + typedef typename MatrixType::Index Index; + + enum { + PacketSize = internal::packet_traits::size, + AlignmentMask = int(PacketSize)-1, + UpLo = _UpLo + }; + + typedef internal::LLT_Traits Traits; + + /** + * \brief Default Constructor. + * + * The default constructor is useful in cases in which the user intends to + * perform decompositions via LLT::compute(const MatrixType&). + */ + LLT() : m_matrix(), m_isInitialized(false) {} + + /** \brief Default Constructor with memory preallocation + * + * Like the default constructor but with preallocation of the internal data + * according to the specified problem \a size. + * \sa LLT() + */ + LLT(Index size) : m_matrix(size, size), + m_isInitialized(false) {} + + LLT(const MatrixType& matrix) + : m_matrix(matrix.rows(), matrix.cols()), + m_isInitialized(false) + { + compute(matrix); + } + + /** \returns a view of the upper triangular matrix U */ + inline typename Traits::MatrixU matrixU() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return Traits::getU(m_matrix); + } + + /** \returns a view of the lower triangular matrix L */ + inline typename Traits::MatrixL matrixL() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return Traits::getL(m_matrix); + } + + /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * Since this LLT class assumes anyway that the matrix A is invertible, the solution + * theoretically exists and is unique regardless of b. + * + * Example: \include LLT_solve.cpp + * Output: \verbinclude LLT_solve.out + * + * \sa solveInPlace(), MatrixBase::llt() + */ + template + inline const internal::solve_retval + solve(const MatrixBase& b) const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(m_matrix.rows()==b.rows() + && "LLT::solve(): invalid number of rows of the right hand side matrix b"); + return internal::solve_retval(*this, b.derived()); + } + + #ifdef EIGEN2_SUPPORT + template + bool solve(const MatrixBase& b, ResultType *result) const + { + *result = this->solve(b); + return true; + } + + bool isPositiveDefinite() const { return true; } + #endif + + template + void solveInPlace(MatrixBase &bAndX) const; + + LLT& compute(const MatrixType& matrix); + + /** \returns the LLT decomposition matrix + * + * TODO: document the storage layout + */ + inline const MatrixType& matrixLLT() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return m_matrix; + } + + MatrixType reconstructedMatrix() const; + + + /** \brief Reports whether previous computation was successful. + * + * \returns \c Success if computation was succesful, + * \c NumericalIssue if the matrix.appears to be negative. + */ + ComputationInfo info() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return m_info; + } + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + template + LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1); + + protected: + /** \internal + * Used to compute and store L + * The strict upper part is not used and even not initialized. + */ + MatrixType m_matrix; + bool m_isInitialized; + ComputationInfo m_info; +}; + +namespace internal { + +template struct llt_inplace; + +template +static typename MatrixType::Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) +{ + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef typename MatrixType::Index Index; + typedef typename MatrixType::ColXpr ColXpr; + typedef typename internal::remove_all::type ColXprCleaned; + typedef typename ColXprCleaned::SegmentReturnType ColXprSegment; + typedef Matrix TempVectorType; + typedef typename TempVectorType::SegmentReturnType TempVecSegment; + + int n = mat.cols(); + eigen_assert(mat.rows()==n && vec.size()==n); + + TempVectorType temp; + + if(sigma>0) + { + // This version is based on Givens rotations. + // It is faster than the other one below, but only works for updates, + // i.e., for sigma > 0 + temp = sqrt(sigma) * vec; + + for(int i=0; i g; + g.makeGivens(mat(i,i), -temp(i), &mat(i,i)); + + int rs = n-i-1; + if(rs>0) + { + ColXprSegment x(mat.col(i).tail(rs)); + TempVecSegment y(temp.tail(rs)); + apply_rotation_in_the_plane(x, y, g); + } + } + } + else + { + temp = vec; + RealScalar beta = 1; + for(int j=0; j struct llt_inplace +{ + typedef typename NumTraits::Real RealScalar; + template + static typename MatrixType::Index unblocked(MatrixType& mat) + { + typedef typename MatrixType::Index Index; + + eigen_assert(mat.rows()==mat.cols()); + const Index size = mat.rows(); + for(Index k = 0; k < size; ++k) + { + Index rs = size-k-1; // remaining size + + Block A21(mat,k+1,k,rs,1); + Block A10(mat,k,0,1,k); + Block A20(mat,k+1,0,rs,k); + + RealScalar x = real(mat.coeff(k,k)); + if (k>0) x -= A10.squaredNorm(); + if (x<=RealScalar(0)) + return k; + mat.coeffRef(k,k) = x = sqrt(x); + if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint(); + if (rs>0) A21 *= RealScalar(1)/x; + } + return -1; + } + + template + static typename MatrixType::Index blocked(MatrixType& m) + { + typedef typename MatrixType::Index Index; + eigen_assert(m.rows()==m.cols()); + Index size = m.rows(); + if(size<32) + return unblocked(m); + + Index blockSize = size/8; + blockSize = (blockSize/16)*16; + blockSize = (std::min)((std::max)(blockSize,Index(8)), Index(128)); + + for (Index k=0; k A11(m,k, k, bs,bs); + Block A21(m,k+bs,k, rs,bs); + Block A22(m,k+bs,k+bs,rs,rs); + + Index ret; + if((ret=unblocked(A11))>=0) return k+ret; + if(rs>0) A11.adjoint().template triangularView().template solveInPlace(A21); + if(rs>0) A22.template selfadjointView().rankUpdate(A21,-1); // bottleneck + } + return -1; + } + + template + static typename MatrixType::Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) + { + return Eigen::internal::llt_rank_update_lower(mat, vec, sigma); + } +}; + +template struct llt_inplace +{ + typedef typename NumTraits::Real RealScalar; + + template + static EIGEN_STRONG_INLINE typename MatrixType::Index unblocked(MatrixType& mat) + { + Transpose matt(mat); + return llt_inplace::unblocked(matt); + } + template + static EIGEN_STRONG_INLINE typename MatrixType::Index blocked(MatrixType& mat) + { + Transpose matt(mat); + return llt_inplace::blocked(matt); + } + template + static typename MatrixType::Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) + { + Transpose matt(mat); + return llt_inplace::rankUpdate(matt, vec.conjugate(), sigma); + } +}; + +template struct LLT_Traits +{ + typedef const TriangularView MatrixL; + typedef const TriangularView MatrixU; + static inline MatrixL getL(const MatrixType& m) { return m; } + static inline MatrixU getU(const MatrixType& m) { return m.adjoint(); } + static bool inplace_decomposition(MatrixType& m) + { return llt_inplace::blocked(m)==-1; } +}; + +template struct LLT_Traits +{ + typedef const TriangularView MatrixL; + typedef const TriangularView MatrixU; + static inline MatrixL getL(const MatrixType& m) { return m.adjoint(); } + static inline MatrixU getU(const MatrixType& m) { return m; } + static bool inplace_decomposition(MatrixType& m) + { return llt_inplace::blocked(m)==-1; } +}; + +} // end namespace internal + +/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix + * + * \returns a reference to *this + * + * Example: \include TutorialLinAlgComputeTwice.cpp + * Output: \verbinclude TutorialLinAlgComputeTwice.out + */ +template +LLT& LLT::compute(const MatrixType& a) +{ + eigen_assert(a.rows()==a.cols()); + const Index size = a.rows(); + m_matrix.resize(size, size); + m_matrix = a; + + m_isInitialized = true; + bool ok = Traits::inplace_decomposition(m_matrix); + m_info = ok ? Success : NumericalIssue; + + return *this; +} + +/** Performs a rank one update (or dowdate) of the current decomposition. + * If A = LL^* before the rank one update, + * then after it we have LL^* = A + sigma * v v^* where \a v must be a vector + * of same dimension. + */ +template +template +LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType); + eigen_assert(v.size()==m_matrix.cols()); + eigen_assert(m_isInitialized); + if(internal::llt_inplace::rankUpdate(m_matrix,v,sigma)>=0) + m_info = NumericalIssue; + else + m_info = Success; + + return *this; +} + +namespace internal { +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef LLT<_MatrixType,UpLo> LLTType; + EIGEN_MAKE_SOLVE_HELPERS(LLTType,Rhs) + + template void evalTo(Dest& dst) const + { + dst = rhs(); + dec().solveInPlace(dst); + } +}; +} + +/** \internal use x = llt_object.solve(x); + * + * This is the \em in-place version of solve(). + * + * \param bAndX represents both the right-hand side matrix b and result x. + * + * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD. + * + * This version avoids a copy when the right hand side matrix b is not + * needed anymore. + * + * \sa LLT::solve(), MatrixBase::llt() + */ +template +template +void LLT::solveInPlace(MatrixBase &bAndX) const +{ + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(m_matrix.rows()==bAndX.rows()); + matrixL().solveInPlace(bAndX); + matrixU().solveInPlace(bAndX); +} + +/** \returns the matrix represented by the decomposition, + * i.e., it returns the product: L L^*. + * This function is provided for debug purpose. */ +template +MatrixType LLT::reconstructedMatrix() const +{ + eigen_assert(m_isInitialized && "LLT is not initialized."); + return matrixL() * matrixL().adjoint().toDenseMatrix(); +} + +/** \cholesky_module + * \returns the LLT decomposition of \c *this + */ +template +inline const LLT::PlainObject> +MatrixBase::llt() const +{ + return LLT(derived()); +} + +/** \cholesky_module + * \returns the LLT decomposition of \c *this + */ +template +inline const LLT::PlainObject, UpLo> +SelfAdjointView::llt() const +{ + return LLT(m_matrix); +} + +} // end namespace Eigen + +#endif // EIGEN_LLT_H diff --git a/Biopool/Sources/Eigen/src/Cholesky/LLT_MKL.h b/Biopool/Sources/Eigen/src/Cholesky/LLT_MKL.h new file mode 100644 index 0000000..64daa44 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Cholesky/LLT_MKL.h @@ -0,0 +1,102 @@ +/* + Copyright (c) 2011, Intel Corporation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Intel Corporation nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ******************************************************************************** + * Content : Eigen bindings to Intel(R) MKL + * LLt decomposition based on LAPACKE_?potrf function. + ******************************************************************************** +*/ + +#ifndef EIGEN_LLT_MKL_H +#define EIGEN_LLT_MKL_H + +#include "Eigen/src/Core/util/MKL_support.h" +#include + +namespace Eigen { + +namespace internal { + +template struct mkl_llt; + +#define EIGEN_MKL_LLT(EIGTYPE, MKLTYPE, MKLPREFIX) \ +template<> struct mkl_llt \ +{ \ + template \ + static inline typename MatrixType::Index potrf(MatrixType& m, char uplo) \ + { \ + lapack_int matrix_order; \ + lapack_int size, lda, info, StorageOrder; \ + EIGTYPE* a; \ + eigen_assert(m.rows()==m.cols()); \ + /* Set up parameters for ?potrf */ \ + size = m.rows(); \ + StorageOrder = MatrixType::Flags&RowMajorBit?RowMajor:ColMajor; \ + matrix_order = StorageOrder==RowMajor ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \ + a = &(m.coeffRef(0,0)); \ + lda = m.outerStride(); \ +\ + info = LAPACKE_##MKLPREFIX##potrf( matrix_order, uplo, size, (MKLTYPE*)a, lda ); \ + info = (info==0) ? Success : NumericalIssue; \ + return info; \ + } \ +}; \ +template<> struct llt_inplace \ +{ \ + template \ + static typename MatrixType::Index blocked(MatrixType& m) \ + { \ + return mkl_llt::potrf(m, 'L'); \ + } \ + template \ + static typename MatrixType::Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \ + { return Eigen::internal::llt_rank_update_lower(mat, vec, sigma); } \ +}; \ +template<> struct llt_inplace \ +{ \ + template \ + static typename MatrixType::Index blocked(MatrixType& m) \ + { \ + return mkl_llt::potrf(m, 'U'); \ + } \ + template \ + static typename MatrixType::Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \ + { \ + Transpose matt(mat); \ + return llt_inplace::rankUpdate(matt, vec.conjugate(), sigma); \ + } \ +}; + +EIGEN_MKL_LLT(double, double, d) +EIGEN_MKL_LLT(float, float, s) +EIGEN_MKL_LLT(dcomplex, MKL_Complex16, z) +EIGEN_MKL_LLT(scomplex, MKL_Complex8, c) + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_LLT_MKL_H diff --git a/Biopool/Sources/Eigen/src/CholmodSupport/CMakeLists.txt b/Biopool/Sources/Eigen/src/CholmodSupport/CMakeLists.txt new file mode 100644 index 0000000..814dfa6 --- /dev/null +++ b/Biopool/Sources/Eigen/src/CholmodSupport/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB Eigen_CholmodSupport_SRCS "*.h") + +INSTALL(FILES + ${Eigen_CholmodSupport_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/CholmodSupport COMPONENT Devel + ) diff --git a/Biopool/Sources/Eigen/src/CholmodSupport/CholmodSupport.h b/Biopool/Sources/Eigen/src/CholmodSupport/CholmodSupport.h new file mode 100644 index 0000000..a06c429 --- /dev/null +++ b/Biopool/Sources/Eigen/src/CholmodSupport/CholmodSupport.h @@ -0,0 +1,594 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CHOLMODSUPPORT_H +#define EIGEN_CHOLMODSUPPORT_H + +namespace Eigen { + +namespace internal { + +template +void cholmod_configure_matrix(CholmodType& mat) +{ + if (internal::is_same::value) + { + mat.xtype = CHOLMOD_REAL; + mat.dtype = CHOLMOD_SINGLE; + } + else if (internal::is_same::value) + { + mat.xtype = CHOLMOD_REAL; + mat.dtype = CHOLMOD_DOUBLE; + } + else if (internal::is_same >::value) + { + mat.xtype = CHOLMOD_COMPLEX; + mat.dtype = CHOLMOD_SINGLE; + } + else if (internal::is_same >::value) + { + mat.xtype = CHOLMOD_COMPLEX; + mat.dtype = CHOLMOD_DOUBLE; + } + else + { + eigen_assert(false && "Scalar type not supported by CHOLMOD"); + } +} + +} // namespace internal + +/** Wraps the Eigen sparse matrix \a mat into a Cholmod sparse matrix object. + * Note that the data are shared. + */ +template +cholmod_sparse viewAsCholmod(SparseMatrix<_Scalar,_Options,_Index>& mat) +{ + typedef SparseMatrix<_Scalar,_Options,_Index> MatrixType; + cholmod_sparse res; + res.nzmax = mat.nonZeros(); + res.nrow = mat.rows();; + res.ncol = mat.cols(); + res.p = mat.outerIndexPtr(); + res.i = mat.innerIndexPtr(); + res.x = mat.valuePtr(); + res.sorted = 1; + if(mat.isCompressed()) + { + res.packed = 1; + } + else + { + res.packed = 0; + res.nz = mat.innerNonZeroPtr(); + } + + res.dtype = 0; + res.stype = -1; + + if (internal::is_same<_Index,int>::value) + { + res.itype = CHOLMOD_INT; + } + else + { + eigen_assert(false && "Index type different than int is not supported yet"); + } + + // setup res.xtype + internal::cholmod_configure_matrix<_Scalar>(res); + + res.stype = 0; + + return res; +} + +template +const cholmod_sparse viewAsCholmod(const SparseMatrix<_Scalar,_Options,_Index>& mat) +{ + cholmod_sparse res = viewAsCholmod(mat.const_cast_derived()); + return res; +} + +/** Returns a view of the Eigen sparse matrix \a mat as Cholmod sparse matrix. + * The data are not copied but shared. */ +template +cholmod_sparse viewAsCholmod(const SparseSelfAdjointView, UpLo>& mat) +{ + cholmod_sparse res = viewAsCholmod(mat.matrix().const_cast_derived()); + + if(UpLo==Upper) res.stype = 1; + if(UpLo==Lower) res.stype = -1; + + return res; +} + +/** Returns a view of the Eigen \b dense matrix \a mat as Cholmod dense matrix. + * The data are not copied but shared. */ +template +cholmod_dense viewAsCholmod(MatrixBase& mat) +{ + EIGEN_STATIC_ASSERT((internal::traits::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES); + typedef typename Derived::Scalar Scalar; + + cholmod_dense res; + res.nrow = mat.rows(); + res.ncol = mat.cols(); + res.nzmax = res.nrow * res.ncol; + res.d = Derived::IsVectorAtCompileTime ? mat.derived().size() : mat.derived().outerStride(); + res.x = mat.derived().data(); + res.z = 0; + + internal::cholmod_configure_matrix(res); + + return res; +} + +/** Returns a view of the Cholmod sparse matrix \a cm as an Eigen sparse matrix. + * The data are not copied but shared. */ +template +MappedSparseMatrix viewAsEigen(cholmod_sparse& cm) +{ + return MappedSparseMatrix + (cm.nrow, cm.ncol, reinterpret_cast(cm.p)[cm.ncol], + reinterpret_cast(cm.p), reinterpret_cast(cm.i),reinterpret_cast(cm.x) ); +} + +enum CholmodMode { + CholmodAuto, CholmodSimplicialLLt, CholmodSupernodalLLt, CholmodLDLt +}; + + +/** \ingroup CholmodSupport_Module + * \class CholmodBase + * \brief The base class for the direct Cholesky factorization of Cholmod + * \sa class CholmodSupernodalLLT, class CholmodSimplicialLDLT, class CholmodSimplicialLLT + */ +template +class CholmodBase : internal::noncopyable +{ + public: + typedef _MatrixType MatrixType; + enum { UpLo = _UpLo }; + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef MatrixType CholMatrixType; + typedef typename MatrixType::Index Index; + + public: + + CholmodBase() + : m_cholmodFactor(0), m_info(Success), m_isInitialized(false) + { + cholmod_start(&m_cholmod); + } + + CholmodBase(const MatrixType& matrix) + : m_cholmodFactor(0), m_info(Success), m_isInitialized(false) + { + cholmod_start(&m_cholmod); + compute(matrix); + } + + ~CholmodBase() + { + if(m_cholmodFactor) + cholmod_free_factor(&m_cholmodFactor, &m_cholmod); + cholmod_finish(&m_cholmod); + } + + inline Index cols() const { return m_cholmodFactor->n; } + inline Index rows() const { return m_cholmodFactor->n; } + + Derived& derived() { return *static_cast(this); } + const Derived& derived() const { return *static_cast(this); } + + /** \brief Reports whether previous computation was successful. + * + * \returns \c Success if computation was succesful, + * \c NumericalIssue if the matrix.appears to be negative. + */ + ComputationInfo info() const + { + eigen_assert(m_isInitialized && "Decomposition is not initialized."); + return m_info; + } + + /** Computes the sparse Cholesky decomposition of \a matrix */ + Derived& compute(const MatrixType& matrix) + { + analyzePattern(matrix); + factorize(matrix); + return derived(); + } + + /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * \sa compute() + */ + template + inline const internal::solve_retval + solve(const MatrixBase& b) const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(rows()==b.rows() + && "CholmodDecomposition::solve(): invalid number of rows of the right hand side matrix b"); + return internal::solve_retval(*this, b.derived()); + } + + /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * \sa compute() + */ + template + inline const internal::sparse_solve_retval + solve(const SparseMatrixBase& b) const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(rows()==b.rows() + && "CholmodDecomposition::solve(): invalid number of rows of the right hand side matrix b"); + return internal::sparse_solve_retval(*this, b.derived()); + } + + /** Performs a symbolic decomposition on the sparcity of \a matrix. + * + * This function is particularly useful when solving for several problems having the same structure. + * + * \sa factorize() + */ + void analyzePattern(const MatrixType& matrix) + { + if(m_cholmodFactor) + { + cholmod_free_factor(&m_cholmodFactor, &m_cholmod); + m_cholmodFactor = 0; + } + cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView()); + m_cholmodFactor = cholmod_analyze(&A, &m_cholmod); + + this->m_isInitialized = true; + this->m_info = Success; + m_analysisIsOk = true; + m_factorizationIsOk = false; + } + + /** Performs a numeric decomposition of \a matrix + * + * The given matrix must has the same sparcity than the matrix on which the symbolic decomposition has been performed. + * + * \sa analyzePattern() + */ + void factorize(const MatrixType& matrix) + { + eigen_assert(m_analysisIsOk && "You must first call analyzePattern()"); + cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView()); + cholmod_factorize(&A, m_cholmodFactor, &m_cholmod); + + this->m_info = Success; + m_factorizationIsOk = true; + } + + /** Returns a reference to the Cholmod's configuration structure to get a full control over the performed operations. + * See the Cholmod user guide for details. */ + cholmod_common& cholmod() { return m_cholmod; } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal */ + template + void _solve(const MatrixBase &b, MatrixBase &dest) const + { + eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()"); + const Index size = m_cholmodFactor->n; + eigen_assert(size==b.rows()); + + // note: cd stands for Cholmod Dense + cholmod_dense b_cd = viewAsCholmod(b.const_cast_derived()); + cholmod_dense* x_cd = cholmod_solve(CHOLMOD_A, m_cholmodFactor, &b_cd, &m_cholmod); + if(!x_cd) + { + this->m_info = NumericalIssue; + } + // TODO optimize this copy by swapping when possible (be carreful with alignment, etc.) + dest = Matrix::Map(reinterpret_cast(x_cd->x),b.rows(),b.cols()); + cholmod_free_dense(&x_cd, &m_cholmod); + } + + /** \internal */ + template + void _solve(const SparseMatrix &b, SparseMatrix &dest) const + { + eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()"); + const Index size = m_cholmodFactor->n; + eigen_assert(size==b.rows()); + + // note: cs stands for Cholmod Sparse + cholmod_sparse b_cs = viewAsCholmod(b); + cholmod_sparse* x_cs = cholmod_spsolve(CHOLMOD_A, m_cholmodFactor, &b_cs, &m_cholmod); + if(!x_cs) + { + this->m_info = NumericalIssue; + } + // TODO optimize this copy by swapping when possible (be carreful with alignment, etc.) + dest = viewAsEigen(*x_cs); + cholmod_free_sparse(&x_cs, &m_cholmod); + } + #endif // EIGEN_PARSED_BY_DOXYGEN + + template + void dumpMemory(Stream& s) + {} + + protected: + mutable cholmod_common m_cholmod; + cholmod_factor* m_cholmodFactor; + mutable ComputationInfo m_info; + bool m_isInitialized; + int m_factorizationIsOk; + int m_analysisIsOk; +}; + +/** \ingroup CholmodSupport_Module + * \class CholmodSimplicialLLT + * \brief A simplicial direct Cholesky (LLT) factorization and solver based on Cholmod + * + * This class allows to solve for A.X = B sparse linear problems via a simplicial LL^T Cholesky factorization + * using the Cholmod library. + * This simplicial variant is equivalent to Eigen's built-in SimplicialLLT class. Thefore, it has little practical interest. + * The sparse matrix A must be selfajoint and positive definite. The vectors or matrices + * X and B can be either dense or sparse. + * + * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<> + * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower + * or Upper. Default is Lower. + * + * This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed. + * + * \sa \ref TutorialSparseDirectSolvers, class CholmodSupernodalLLT, class SimplicialLLT + */ +template +class CholmodSimplicialLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT<_MatrixType, _UpLo> > +{ + typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT> Base; + using Base::m_cholmod; + + public: + + typedef _MatrixType MatrixType; + + CholmodSimplicialLLT() : Base() { init(); } + + CholmodSimplicialLLT(const MatrixType& matrix) : Base() + { + init(); + compute(matrix); + } + + ~CholmodSimplicialLLT() {} + protected: + void init() + { + m_cholmod.final_asis = 0; + m_cholmod.supernodal = CHOLMOD_SIMPLICIAL; + m_cholmod.final_ll = 1; + } +}; + + +/** \ingroup CholmodSupport_Module + * \class CholmodSimplicialLDLT + * \brief A simplicial direct Cholesky (LDLT) factorization and solver based on Cholmod + * + * This class allows to solve for A.X = B sparse linear problems via a simplicial LDL^T Cholesky factorization + * using the Cholmod library. + * This simplicial variant is equivalent to Eigen's built-in SimplicialLDLT class. Thefore, it has little practical interest. + * The sparse matrix A must be selfajoint and positive definite. The vectors or matrices + * X and B can be either dense or sparse. + * + * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<> + * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower + * or Upper. Default is Lower. + * + * This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed. + * + * \sa \ref TutorialSparseDirectSolvers, class CholmodSupernodalLLT, class SimplicialLDLT + */ +template +class CholmodSimplicialLDLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT<_MatrixType, _UpLo> > +{ + typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT> Base; + using Base::m_cholmod; + + public: + + typedef _MatrixType MatrixType; + + CholmodSimplicialLDLT() : Base() { init(); } + + CholmodSimplicialLDLT(const MatrixType& matrix) : Base() + { + init(); + compute(matrix); + } + + ~CholmodSimplicialLDLT() {} + protected: + void init() + { + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_SIMPLICIAL; + } +}; + +/** \ingroup CholmodSupport_Module + * \class CholmodSupernodalLLT + * \brief A supernodal Cholesky (LLT) factorization and solver based on Cholmod + * + * This class allows to solve for A.X = B sparse linear problems via a supernodal LL^T Cholesky factorization + * using the Cholmod library. + * This supernodal variant performs best on dense enough problems, e.g., 3D FEM, or very high order 2D FEM. + * The sparse matrix A must be selfajoint and positive definite. The vectors or matrices + * X and B can be either dense or sparse. + * + * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<> + * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower + * or Upper. Default is Lower. + * + * This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed. + * + * \sa \ref TutorialSparseDirectSolvers + */ +template +class CholmodSupernodalLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT<_MatrixType, _UpLo> > +{ + typedef CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT> Base; + using Base::m_cholmod; + + public: + + typedef _MatrixType MatrixType; + + CholmodSupernodalLLT() : Base() { init(); } + + CholmodSupernodalLLT(const MatrixType& matrix) : Base() + { + init(); + compute(matrix); + } + + ~CholmodSupernodalLLT() {} + protected: + void init() + { + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_SUPERNODAL; + } +}; + +/** \ingroup CholmodSupport_Module + * \class CholmodDecomposition + * \brief A general Cholesky factorization and solver based on Cholmod + * + * This class allows to solve for A.X = B sparse linear problems via a LL^T or LDL^T Cholesky factorization + * using the Cholmod library. The sparse matrix A must be selfajoint and positive definite. The vectors or matrices + * X and B can be either dense or sparse. + * + * This variant permits to change the underlying Cholesky method at runtime. + * On the other hand, it does not provide access to the result of the factorization. + * The default is to let Cholmod automatically choose between a simplicial and supernodal factorization. + * + * \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<> + * \tparam _UpLo the triangular part that will be used for the computations. It can be Lower + * or Upper. Default is Lower. + * + * This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed. + * + * \sa \ref TutorialSparseDirectSolvers + */ +template +class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecomposition<_MatrixType, _UpLo> > +{ + typedef CholmodBase<_MatrixType, _UpLo, CholmodDecomposition> Base; + using Base::m_cholmod; + + public: + + typedef _MatrixType MatrixType; + + CholmodDecomposition() : Base() { init(); } + + CholmodDecomposition(const MatrixType& matrix) : Base() + { + init(); + compute(matrix); + } + + ~CholmodDecomposition() {} + + void setMode(CholmodMode mode) + { + switch(mode) + { + case CholmodAuto: + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_AUTO; + break; + case CholmodSimplicialLLt: + m_cholmod.final_asis = 0; + m_cholmod.supernodal = CHOLMOD_SIMPLICIAL; + m_cholmod.final_ll = 1; + break; + case CholmodSupernodalLLt: + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_SUPERNODAL; + break; + case CholmodLDLt: + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_SIMPLICIAL; + break; + default: + break; + } + } + protected: + void init() + { + m_cholmod.final_asis = 1; + m_cholmod.supernodal = CHOLMOD_AUTO; + } +}; + +namespace internal { + +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef CholmodBase<_MatrixType,_UpLo,Derived> Dec; + EIGEN_MAKE_SOLVE_HELPERS(Dec,Rhs) + + template void evalTo(Dest& dst) const + { + dec()._solve(rhs(),dst); + } +}; + +template +struct sparse_solve_retval, Rhs> + : sparse_solve_retval_base, Rhs> +{ + typedef CholmodBase<_MatrixType,_UpLo,Derived> Dec; + EIGEN_MAKE_SPARSE_SOLVE_HELPERS(Dec,Rhs) + + template void evalTo(Dest& dst) const + { + dec()._solve(rhs(),dst); + } +}; + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_CHOLMODSUPPORT_H diff --git a/Biopool/Sources/Eigen/src/Core/Array.h b/Biopool/Sources/Eigen/src/Core/Array.h new file mode 100644 index 0000000..4762933 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Array.h @@ -0,0 +1,323 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAY_H +#define EIGEN_ARRAY_H + +namespace Eigen { + +/** \class Array + * \ingroup Core_Module + * + * \brief General-purpose arrays with easy API for coefficient-wise operations + * + * The %Array class is very similar to the Matrix class. It provides + * general-purpose one- and two-dimensional arrays. The difference between the + * %Array and the %Matrix class is primarily in the API: the API for the + * %Array class provides easy access to coefficient-wise operations, while the + * API for the %Matrix class provides easy access to linear-algebra + * operations. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_ARRAY_PLUGIN. + * + * \sa \ref TutorialArrayClass, \ref TopicClassHierarchy + */ +namespace internal { +template +struct traits > : traits > +{ + typedef ArrayXpr XprKind; + typedef ArrayBase > XprBase; +}; +} + +template +class Array + : public PlainObjectBase > +{ + public: + + typedef PlainObjectBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Array) + + enum { Options = _Options }; + typedef typename Base::PlainObject PlainObject; + + protected: + template + friend struct internal::conservative_resize_like_impl; + + using Base::m_storage; + + public: + + using Base::base; + using Base::coeff; + using Base::coeffRef; + + /** + * The usage of + * using Base::operator=; + * fails on MSVC. Since the code below is working with GCC and MSVC, we skipped + * the usage of 'using'. This should be done only for operator=. + */ + template + EIGEN_STRONG_INLINE Array& operator=(const EigenBase &other) + { + return Base::operator=(other); + } + + /** Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE Array& operator=(const ArrayBase& other) + { + return Base::_set(other); + } + + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + EIGEN_STRONG_INLINE Array& operator=(const Array& other) + { + return Base::_set(other); + } + + /** Default constructor. + * + * For fixed-size matrices, does nothing. + * + * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix + * is called a null matrix. This constructor is the unique way to create null matrices: resizing + * a matrix to 0 is not supported. + * + * \sa resize(Index,Index) + */ + EIGEN_STRONG_INLINE explicit Array() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + // FIXME is it still needed ?? + /** \internal */ + Array(internal::constructor_without_unaligned_array_assert) + : Base(internal::constructor_without_unaligned_array_assert()) + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } +#endif + + /** Constructs a vector or row-vector with given dimension. \only_for_vectors + * + * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, + * it is redundant to pass the dimension here, so it makes more sense to use the default + * constructor Matrix() instead. + */ + EIGEN_STRONG_INLINE explicit Array(Index dim) + : Base(dim, RowsAtCompileTime == 1 ? 1 : dim, ColsAtCompileTime == 1 ? 1 : dim) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Array) + eigen_assert(dim >= 0); + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == dim); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE Array(const T0& x, const T1& y) + { + Base::_check_template_params(); + this->template _init2(x, y); + } + #else + /** constructs an uninitialized matrix with \a rows rows and \a cols columns. + * + * This is useful for dynamic-size matrices. For fixed-size matrices, + * it is redundant to pass these parameters, so one should use the default constructor + * Matrix() instead. */ + Array(Index rows, Index cols); + /** constructs an initialized 2D vector with given coefficients */ + Array(const Scalar& x, const Scalar& y); + #endif + + /** constructs an initialized 3D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& x, const Scalar& y, const Scalar& z) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + } + /** constructs an initialized 4D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + m_storage.data()[3] = w; + } + + explicit Array(const Scalar *data); + + /** Constructor copying the value of the expression \a other */ + template + EIGEN_STRONG_INLINE Array(const ArrayBase& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** Copy constructor */ + EIGEN_STRONG_INLINE Array(const Array& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** Copy constructor with in-place evaluation */ + template + EIGEN_STRONG_INLINE Array(const ReturnByValue& other) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + other.evalTo(*this); + } + + /** \sa MatrixBase::operator=(const EigenBase&) */ + template + EIGEN_STRONG_INLINE Array(const EigenBase &other) + : Base(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + *this = other; + } + + /** Override MatrixBase::swap() since for dynamic-sized matrices of same type it is enough to swap the + * data pointers. + */ + template + void swap(ArrayBase const & other) + { this->_swap(other.derived()); } + + inline Index innerStride() const { return 1; } + inline Index outerStride() const { return this->innerSize(); } + + #ifdef EIGEN_ARRAY_PLUGIN + #include EIGEN_ARRAY_PLUGIN + #endif + + private: + + template + friend struct internal::matrix_swap_impl; +}; + +/** \defgroup arraytypedefs Global array typedefs + * \ingroup Core_Module + * + * Eigen defines several typedef shortcuts for most common 1D and 2D array types. + * + * The general patterns are the following: + * + * \c ArrayRowsColsType where \c Rows and \c Cols can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size, + * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd + * for complex double. + * + * For example, \c Array33d is a fixed-size 3x3 array type of doubles, and \c ArrayXXf is a dynamic-size matrix of floats. + * + * There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is + * a fixed-size 1D array of 4 complex floats. + * + * \sa class Array + */ + +#define EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##SizeSuffix##SizeSuffix##TypeSuffix; \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##SizeSuffix##TypeSuffix; + +#define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##Size##X##TypeSuffix; \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##X##Size##TypeSuffix; + +#define EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 2, 2) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 3, 3) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 4, 4) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 4) + +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(int, i) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(float, f) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(double, d) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex, cf) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex, cd) + +#undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES +#undef EIGEN_MAKE_ARRAY_TYPEDEFS + +#undef EIGEN_MAKE_ARRAY_TYPEDEFS_LARGE + +#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ +using Eigen::Matrix##SizeSuffix##TypeSuffix; \ +using Eigen::Vector##SizeSuffix##TypeSuffix; \ +using Eigen::RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(TypeSuffix) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \ + +#define EIGEN_USING_ARRAY_TYPEDEFS \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(i) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(f) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(d) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cf) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cd) + +} // end namespace Eigen + +#endif // EIGEN_ARRAY_H diff --git a/Biopool/Sources/Eigen/src/Core/ArrayBase.h b/Biopool/Sources/Eigen/src/Core/ArrayBase.h new file mode 100644 index 0000000..ec3a4be --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/ArrayBase.h @@ -0,0 +1,243 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAYBASE_H +#define EIGEN_ARRAYBASE_H + +namespace Eigen { + +template class MatrixWrapper; + +/** \class ArrayBase + * \ingroup Core_Module + * + * \brief Base class for all 1D and 2D array, and related expressions + * + * An array is similar to a dense vector or matrix. While matrices are mathematical + * objects with well defined linear algebra operators, an array is just a collection + * of scalar values arranged in a one or two dimensionnal fashion. As the main consequence, + * all operations applied to an array are performed coefficient wise. Furthermore, + * arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient + * constructors allowing to easily write generic code working for both scalar values + * and arrays. + * + * This class is the base that is inherited by all array expression types. + * + * \tparam Derived is the derived type, e.g., an array or an expression type. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_ARRAYBASE_PLUGIN. + * + * \sa class MatrixBase, \ref TopicClassHierarchy + */ +template class ArrayBase + : public DenseBase +{ + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** The base class for a given storage type. */ + typedef ArrayBase StorageBaseType; + + typedef ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl; + + using internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real>::operator*; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseBase Base; + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::CoeffReadCost; + + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::operator=; + using Base::operator+=; + using Base::operator-=; + using Base::operator*=; + using Base::operator/=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal the plain matrix type corresponding to this expression. Note that is not necessarily + * exactly the return type of eval(): in the case of plain matrices, the return type of eval() is a const + * reference to a matrix, not a matrix! It is however guaranteed that the return type of eval() is either + * PlainObject or const PlainObject&. + */ + typedef Array::Scalar, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime, + AutoAlign | (internal::traits::Flags&RowMajorBit ? RowMajor : ColMajor), + internal::traits::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime + > PlainObject; + + + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase +# include "../plugins/CommonCwiseUnaryOps.h" +# include "../plugins/MatrixCwiseUnaryOps.h" +# include "../plugins/ArrayCwiseUnaryOps.h" +# include "../plugins/CommonCwiseBinaryOps.h" +# include "../plugins/MatrixCwiseBinaryOps.h" +# include "../plugins/ArrayCwiseBinaryOps.h" +# ifdef EIGEN_ARRAYBASE_PLUGIN +# include EIGEN_ARRAYBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const ArrayBase& other) + { + return internal::assign_selector::run(derived(), other.derived()); + } + + Derived& operator+=(const Scalar& scalar) + { return *this = derived() + scalar; } + Derived& operator-=(const Scalar& scalar) + { return *this = derived() - scalar; } + + template + Derived& operator+=(const ArrayBase& other); + template + Derived& operator-=(const ArrayBase& other); + + template + Derived& operator*=(const ArrayBase& other); + + template + Derived& operator/=(const ArrayBase& other); + + public: + ArrayBase& array() { return *this; } + const ArrayBase& array() const { return *this; } + + /** \returns an \link MatrixBase Matrix \endlink expression of this array + * \sa MatrixBase::array() */ + MatrixWrapper matrix() { return derived(); } + const MatrixWrapper matrix() const { return derived(); } + +// template +// inline void evalTo(Dest& dst) const { dst = matrix(); } + + protected: + ArrayBase() : Base() {} + + private: + explicit ArrayBase(Index); + ArrayBase(Index,Index); + template explicit ArrayBase(const ArrayBase&); + protected: + // mixing arrays and matrices is not legal + template Derived& operator+=(const MatrixBase& ) + {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;} + // mixing arrays and matrices is not legal + template Derived& operator-=(const MatrixBase& ) + {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;} +}; + +/** replaces \c *this by \c *this - \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator-=(const ArrayBase &other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this + \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator+=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this * \a other coefficient wise. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator*=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this / \a other coefficient wise. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator/=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_ARRAYBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/ArrayWrapper.h b/Biopool/Sources/Eigen/src/Core/ArrayWrapper.h new file mode 100644 index 0000000..f8a442c --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/ArrayWrapper.h @@ -0,0 +1,255 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAYWRAPPER_H +#define EIGEN_ARRAYWRAPPER_H + +namespace Eigen { + +/** \class ArrayWrapper + * \ingroup Core_Module + * + * \brief Expression of a mathematical vector or matrix as an array object + * + * This class is the return type of MatrixBase::array(), and most of the time + * this is the only way it is use. + * + * \sa MatrixBase::array(), class MatrixWrapper + */ + +namespace internal { +template +struct traits > + : public traits::type > +{ + typedef ArrayXpr XprKind; +}; +} + +template +class ArrayWrapper : public ArrayBase > +{ + public: + typedef ArrayBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper) + + typedef typename internal::conditional< + internal::is_lvalue::value, + Scalar, + const Scalar + >::type ScalarWithConstIfNotLvalue; + + typedef typename internal::nested::type NestedExpressionType; + + inline ArrayWrapper(ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); } + inline const Scalar* data() const { return m_expression.data(); } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + template + inline void evalTo(Dest& dst) const { dst = m_expression; } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_expression; + } + + protected: + NestedExpressionType m_expression; +}; + +/** \class MatrixWrapper + * \ingroup Core_Module + * + * \brief Expression of an array as a mathematical vector or matrix + * + * This class is the return type of ArrayBase::matrix(), and most of the time + * this is the only way it is use. + * + * \sa MatrixBase::matrix(), class ArrayWrapper + */ + +namespace internal { +template +struct traits > + : public traits::type > +{ + typedef MatrixXpr XprKind; +}; +} + +template +class MatrixWrapper : public MatrixBase > +{ + public: + typedef MatrixBase > Base; + EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper) + + typedef typename internal::conditional< + internal::is_lvalue::value, + Scalar, + const Scalar + >::type ScalarWithConstIfNotLvalue; + + typedef typename internal::nested::type NestedExpressionType; + + inline MatrixWrapper(ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); } + inline const Scalar* data() const { return m_expression.data(); } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_expression.derived().coeffRef(row, col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_expression; + } + + protected: + NestedExpressionType m_expression; +}; + +} // end namespace Eigen + +#endif // EIGEN_ARRAYWRAPPER_H diff --git a/Biopool/Sources/Eigen/src/Core/Assign.h b/Biopool/Sources/Eigen/src/Core/Assign.h new file mode 100644 index 0000000..75390ac --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Assign.h @@ -0,0 +1,598 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007 Michael Olbrich +// Copyright (C) 2006-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ASSIGN_H +#define EIGEN_ASSIGN_H + +namespace Eigen { + +namespace internal { + +/*************************************************************************** +* Part 1 : the logic deciding a strategy for traversal and unrolling * +***************************************************************************/ + +template +struct assign_traits +{ +public: + enum { + DstIsAligned = Derived::Flags & AlignedBit, + DstHasDirectAccess = Derived::Flags & DirectAccessBit, + SrcIsAligned = OtherDerived::Flags & AlignedBit, + JointAlignment = bool(DstIsAligned) && bool(SrcIsAligned) ? Aligned : Unaligned + }; + +private: + enum { + InnerSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::SizeAtCompileTime) + : int(Derived::Flags)&RowMajorBit ? int(Derived::ColsAtCompileTime) + : int(Derived::RowsAtCompileTime), + InnerMaxSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::MaxSizeAtCompileTime) + : int(Derived::Flags)&RowMajorBit ? int(Derived::MaxColsAtCompileTime) + : int(Derived::MaxRowsAtCompileTime), + MaxSizeAtCompileTime = Derived::SizeAtCompileTime, + PacketSize = packet_traits::size + }; + + enum { + StorageOrdersAgree = (int(Derived::IsRowMajor) == int(OtherDerived::IsRowMajor)), + MightVectorize = StorageOrdersAgree + && (int(Derived::Flags) & int(OtherDerived::Flags) & ActualPacketAccessBit), + MayInnerVectorize = MightVectorize && int(InnerSize)!=Dynamic && int(InnerSize)%int(PacketSize)==0 + && int(DstIsAligned) && int(SrcIsAligned), + MayLinearize = StorageOrdersAgree && (int(Derived::Flags) & int(OtherDerived::Flags) & LinearAccessBit), + MayLinearVectorize = MightVectorize && MayLinearize && DstHasDirectAccess + && (DstIsAligned || MaxSizeAtCompileTime == Dynamic), + /* If the destination isn't aligned, we have to do runtime checks and we don't unroll, + so it's only good for large enough sizes. */ + MaySliceVectorize = MightVectorize && DstHasDirectAccess + && (int(InnerMaxSize)==Dynamic || int(InnerMaxSize)>=3*PacketSize) + /* slice vectorization can be slow, so we only want it if the slices are big, which is + indicated by InnerMaxSize rather than InnerSize, think of the case of a dynamic block + in a fixed-size matrix */ + }; + +public: + enum { + Traversal = int(MayInnerVectorize) ? int(InnerVectorizedTraversal) + : int(MayLinearVectorize) ? int(LinearVectorizedTraversal) + : int(MaySliceVectorize) ? int(SliceVectorizedTraversal) + : int(MayLinearize) ? int(LinearTraversal) + : int(DefaultTraversal), + Vectorized = int(Traversal) == InnerVectorizedTraversal + || int(Traversal) == LinearVectorizedTraversal + || int(Traversal) == SliceVectorizedTraversal + }; + +private: + enum { + UnrollingLimit = EIGEN_UNROLLING_LIMIT * (Vectorized ? int(PacketSize) : 1), + MayUnrollCompletely = int(Derived::SizeAtCompileTime) != Dynamic + && int(OtherDerived::CoeffReadCost) != Dynamic + && int(Derived::SizeAtCompileTime) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit), + MayUnrollInner = int(InnerSize) != Dynamic + && int(OtherDerived::CoeffReadCost) != Dynamic + && int(InnerSize) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit) + }; + +public: + enum { + Unrolling = (int(Traversal) == int(InnerVectorizedTraversal) || int(Traversal) == int(DefaultTraversal)) + ? ( + int(MayUnrollCompletely) ? int(CompleteUnrolling) + : int(MayUnrollInner) ? int(InnerUnrolling) + : int(NoUnrolling) + ) + : int(Traversal) == int(LinearVectorizedTraversal) + ? ( bool(MayUnrollCompletely) && bool(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) ) + : int(Traversal) == int(LinearTraversal) + ? ( bool(MayUnrollCompletely) ? int(CompleteUnrolling) : int(NoUnrolling) ) + : int(NoUnrolling) + }; + +#ifdef EIGEN_DEBUG_ASSIGN + static void debug() + { + EIGEN_DEBUG_VAR(DstIsAligned) + EIGEN_DEBUG_VAR(SrcIsAligned) + EIGEN_DEBUG_VAR(JointAlignment) + EIGEN_DEBUG_VAR(InnerSize) + EIGEN_DEBUG_VAR(InnerMaxSize) + EIGEN_DEBUG_VAR(PacketSize) + EIGEN_DEBUG_VAR(StorageOrdersAgree) + EIGEN_DEBUG_VAR(MightVectorize) + EIGEN_DEBUG_VAR(MayLinearize) + EIGEN_DEBUG_VAR(MayInnerVectorize) + EIGEN_DEBUG_VAR(MayLinearVectorize) + EIGEN_DEBUG_VAR(MaySliceVectorize) + EIGEN_DEBUG_VAR(Traversal) + EIGEN_DEBUG_VAR(UnrollingLimit) + EIGEN_DEBUG_VAR(MayUnrollCompletely) + EIGEN_DEBUG_VAR(MayUnrollInner) + EIGEN_DEBUG_VAR(Unrolling) + } +#endif +}; + +/*************************************************************************** +* Part 2 : meta-unrollers +***************************************************************************/ + +/************************ +*** Default traversal *** +************************/ + +template +struct assign_DefaultTraversal_CompleteUnrolling +{ + enum { + outer = Index / Derived1::InnerSizeAtCompileTime, + inner = Index % Derived1::InnerSizeAtCompileTime + }; + + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + dst.copyCoeffByOuterInner(outer, inner, src); + assign_DefaultTraversal_CompleteUnrolling::run(dst, src); + } +}; + +template +struct assign_DefaultTraversal_CompleteUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {} +}; + +template +struct assign_DefaultTraversal_InnerUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src, int outer) + { + dst.copyCoeffByOuterInner(outer, Index, src); + assign_DefaultTraversal_InnerUnrolling::run(dst, src, outer); + } +}; + +template +struct assign_DefaultTraversal_InnerUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &, int) {} +}; + +/*********************** +*** Linear traversal *** +***********************/ + +template +struct assign_LinearTraversal_CompleteUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + dst.copyCoeff(Index, src); + assign_LinearTraversal_CompleteUnrolling::run(dst, src); + } +}; + +template +struct assign_LinearTraversal_CompleteUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {} +}; + +/************************** +*** Inner vectorization *** +**************************/ + +template +struct assign_innervec_CompleteUnrolling +{ + enum { + outer = Index / Derived1::InnerSizeAtCompileTime, + inner = Index % Derived1::InnerSizeAtCompileTime, + JointAlignment = assign_traits::JointAlignment + }; + + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + dst.template copyPacketByOuterInner(outer, inner, src); + assign_innervec_CompleteUnrolling::size, Stop>::run(dst, src); + } +}; + +template +struct assign_innervec_CompleteUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {} +}; + +template +struct assign_innervec_InnerUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src, int outer) + { + dst.template copyPacketByOuterInner(outer, Index, src); + assign_innervec_InnerUnrolling::size, Stop>::run(dst, src, outer); + } +}; + +template +struct assign_innervec_InnerUnrolling +{ + static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &, int) {} +}; + +/*************************************************************************** +* Part 3 : implementation of all cases +***************************************************************************/ + +template::Traversal, + int Unrolling = assign_traits::Unrolling, + int Version = Specialized> +struct assign_impl; + +/************************ +*** Default traversal *** +************************/ + +template +struct assign_impl +{ + static inline void run(Derived1 &, const Derived2 &) { } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static inline void run(Derived1 &dst, const Derived2 &src) + { + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + for(Index inner = 0; inner < innerSize; ++inner) + dst.copyCoeffByOuterInner(outer, inner, src); + } +}; + +template +struct assign_impl +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + assign_DefaultTraversal_CompleteUnrolling + ::run(dst, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + assign_DefaultTraversal_InnerUnrolling + ::run(dst, src, outer); + } +}; + +/*********************** +*** Linear traversal *** +***********************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static inline void run(Derived1 &dst, const Derived2 &src) + { + const Index size = dst.size(); + for(Index i = 0; i < size; ++i) + dst.copyCoeff(i, src); + } +}; + +template +struct assign_impl +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + assign_LinearTraversal_CompleteUnrolling + ::run(dst, src); + } +}; + +/************************** +*** Inner vectorization *** +**************************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static inline void run(Derived1 &dst, const Derived2 &src) + { + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + const Index packetSize = packet_traits::size; + for(Index outer = 0; outer < outerSize; ++outer) + for(Index inner = 0; inner < innerSize; inner+=packetSize) + dst.template copyPacketByOuterInner(outer, inner, src); + } +}; + +template +struct assign_impl +{ + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + assign_innervec_CompleteUnrolling + ::run(dst, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + assign_innervec_InnerUnrolling + ::run(dst, src, outer); + } +}; + +/*************************** +*** Linear vectorization *** +***************************/ + +template +struct unaligned_assign_impl +{ + template + static EIGEN_STRONG_INLINE void run(const Derived&, OtherDerived&, typename Derived::Index, typename Derived::Index) {} +}; + +template <> +struct unaligned_assign_impl +{ + // MSVC must not inline this functions. If it does, it fails to optimize the + // packet access path. +#ifdef _MSC_VER + template + static EIGEN_DONT_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end) +#else + template + static EIGEN_STRONG_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end) +#endif + { + for (typename Derived::Index index = start; index < end; ++index) + dst.copyCoeff(index, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + const Index size = dst.size(); + typedef packet_traits PacketTraits; + enum { + packetSize = PacketTraits::size, + dstAlignment = PacketTraits::AlignedOnScalar ? Aligned : int(assign_traits::DstIsAligned) , + srcAlignment = assign_traits::JointAlignment + }; + const Index alignedStart = assign_traits::DstIsAligned ? 0 + : internal::first_aligned(&dst.coeffRef(0), size); + const Index alignedEnd = alignedStart + ((size-alignedStart)/packetSize)*packetSize; + + unaligned_assign_impl::DstIsAligned!=0>::run(src,dst,0,alignedStart); + + for(Index index = alignedStart; index < alignedEnd; index += packetSize) + { + dst.template copyPacket(index, src); + } + + unaligned_assign_impl<>::run(src,dst,alignedEnd,size); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) + { + enum { size = Derived1::SizeAtCompileTime, + packetSize = packet_traits::size, + alignedSize = (size/packetSize)*packetSize }; + + assign_innervec_CompleteUnrolling::run(dst, src); + assign_DefaultTraversal_CompleteUnrolling::run(dst, src); + } +}; + +/************************** +*** Slice vectorization *** +***************************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + static inline void run(Derived1 &dst, const Derived2 &src) + { + typedef packet_traits PacketTraits; + enum { + packetSize = PacketTraits::size, + alignable = PacketTraits::AlignedOnScalar, + dstAlignment = alignable ? Aligned : int(assign_traits::DstIsAligned) , + srcAlignment = assign_traits::JointAlignment + }; + const Index packetAlignedMask = packetSize - 1; + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + const Index alignedStep = alignable ? (packetSize - dst.outerStride() % packetSize) & packetAlignedMask : 0; + Index alignedStart = ((!alignable) || assign_traits::DstIsAligned) ? 0 + : internal::first_aligned(&dst.coeffRef(0,0), innerSize); + + for(Index outer = 0; outer < outerSize; ++outer) + { + const Index alignedEnd = alignedStart + ((innerSize-alignedStart) & ~packetAlignedMask); + // do the non-vectorizable part of the assignment + for(Index inner = 0; inner(outer, inner, src); + + // do the non-vectorizable part of the assignment + for(Index inner = alignedEnd; inner((alignedStart+alignedStep)%packetSize, innerSize); + } + } +}; + +} // end namespace internal + +/*************************************************************************** +* Part 4 : implementation of DenseBase methods +***************************************************************************/ + +template +template +EIGEN_STRONG_INLINE Derived& DenseBase + ::lazyAssign(const DenseBase& other) +{ + enum{ + SameType = internal::is_same::value + }; + + EIGEN_STATIC_ASSERT_LVALUE(Derived) + EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived) + EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + +#ifdef EIGEN_DEBUG_ASSIGN + internal::assign_traits::debug(); +#endif + eigen_assert(rows() == other.rows() && cols() == other.cols()); + internal::assign_impl::Traversal) + : int(InvalidTraversal)>::run(derived(),other.derived()); +#ifndef EIGEN_NO_DEBUG + checkTransposeAliasing(other.derived()); +#endif + return derived(); +} + +namespace internal { + +template +struct assign_selector; + +template +struct assign_selector { + static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.derived()); } +}; +template +struct assign_selector { + static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.eval()); } +}; +template +struct assign_selector { + static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose()); } +}; +template +struct assign_selector { + static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose().eval()); } +}; + +} // end namespace internal + +template +template +EIGEN_STRONG_INLINE Derived& DenseBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +EIGEN_STRONG_INLINE Derived& DenseBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const MatrixBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const EigenBase& other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_ASSIGN_H diff --git a/Biopool/Sources/Eigen/src/Core/Assign_MKL.h b/Biopool/Sources/Eigen/src/Core/Assign_MKL.h new file mode 100644 index 0000000..428c636 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Assign_MKL.h @@ -0,0 +1,224 @@ +/* + Copyright (c) 2011, Intel Corporation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Intel Corporation nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ******************************************************************************** + * Content : Eigen bindings to Intel(R) MKL + * MKL VML support for coefficient-wise unary Eigen expressions like a=b.sin() + ******************************************************************************** +*/ + +#ifndef EIGEN_ASSIGN_VML_H +#define EIGEN_ASSIGN_VML_H + +namespace Eigen { + +namespace internal { + +template struct vml_call +{ enum { IsSupported = 0 }; }; + +template +class vml_assign_traits +{ + private: + enum { + DstHasDirectAccess = Dst::Flags & DirectAccessBit, + SrcHasDirectAccess = Src::Flags & DirectAccessBit, + + StorageOrdersAgree = (int(Dst::IsRowMajor) == int(Src::IsRowMajor)), + InnerSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::SizeAtCompileTime) + : int(Dst::Flags)&RowMajorBit ? int(Dst::ColsAtCompileTime) + : int(Dst::RowsAtCompileTime), + InnerMaxSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime) + : int(Dst::Flags)&RowMajorBit ? int(Dst::MaxColsAtCompileTime) + : int(Dst::MaxRowsAtCompileTime), + MaxSizeAtCompileTime = Dst::SizeAtCompileTime, + + MightEnableVml = vml_call::IsSupported && StorageOrdersAgree && DstHasDirectAccess && SrcHasDirectAccess + && Src::InnerStrideAtCompileTime==1 && Dst::InnerStrideAtCompileTime==1, + MightLinearize = MightEnableVml && (int(Dst::Flags) & int(Src::Flags) & LinearAccessBit), + VmlSize = MightLinearize ? MaxSizeAtCompileTime : InnerMaxSize, + LargeEnough = VmlSize==Dynamic || VmlSize>=EIGEN_MKL_VML_THRESHOLD, + MayEnableVml = MightEnableVml && LargeEnough, + MayLinearize = MayEnableVml && MightLinearize + }; + public: + enum { + Traversal = MayLinearize ? LinearVectorizedTraversal + : MayEnableVml ? InnerVectorizedTraversal + : DefaultTraversal + }; +}; + +template::Traversal > +struct vml_assign_impl + : assign_impl,Traversal,Unrolling,BuiltIn> +{ +}; + +template +struct vml_assign_impl +{ + typedef typename Derived1::Scalar Scalar; + typedef typename Derived1::Index Index; + static inline void run(Derived1& dst, const CwiseUnaryOp& src) + { + // in case we want to (or have to) skip VML at runtime we can call: + // assign_impl,Traversal,Unrolling,BuiltIn>::run(dst,src); + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) { + const Scalar *src_ptr = src.IsRowMajor ? &(src.nestedExpression().coeffRef(outer,0)) : + &(src.nestedExpression().coeffRef(0, outer)); + Scalar *dst_ptr = dst.IsRowMajor ? &(dst.coeffRef(outer,0)) : &(dst.coeffRef(0, outer)); + vml_call::run(src.functor(), innerSize, src_ptr, dst_ptr ); + } + } +}; + +template +struct vml_assign_impl +{ + static inline void run(Derived1& dst, const CwiseUnaryOp& src) + { + // in case we want to (or have to) skip VML at runtime we can call: + // assign_impl,Traversal,Unrolling,BuiltIn>::run(dst,src); + vml_call::run(src.functor(), dst.size(), src.nestedExpression().data(), dst.data() ); + } +}; + +// Macroses + +#define EIGEN_MKL_VML_SPECIALIZE_ASSIGN(TRAVERSAL,UNROLLING) \ + template \ + struct assign_impl, TRAVERSAL, UNROLLING, Specialized> { \ + static inline void run(Derived1 &dst, const Eigen::CwiseUnaryOp &src) { \ + vml_assign_impl::run(dst, src); \ + } \ + }; + +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,NoUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,CompleteUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(DefaultTraversal,InnerUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearTraversal,NoUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearTraversal,CompleteUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,NoUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,CompleteUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(InnerVectorizedTraversal,InnerUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearVectorizedTraversal,CompleteUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(LinearVectorizedTraversal,NoUnrolling) +EIGEN_MKL_VML_SPECIALIZE_ASSIGN(SliceVectorizedTraversal,NoUnrolling) + + +#if !defined (EIGEN_FAST_MATH) || (EIGEN_FAST_MATH != 1) +#define EIGEN_MKL_VML_MODE VML_HA +#else +#define EIGEN_MKL_VML_MODE VML_LA +#endif + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE) \ + template<> struct vml_call< scalar_##EIGENOP##_op > { \ + enum { IsSupported = 1 }; \ + static inline void run( const scalar_##EIGENOP##_op& /*func*/, \ + int size, const EIGENTYPE* src, EIGENTYPE* dst) { \ + VMLOP(size, (const VMLTYPE*)src, (VMLTYPE*)dst); \ + } \ + }; + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE) \ + template<> struct vml_call< scalar_##EIGENOP##_op > { \ + enum { IsSupported = 1 }; \ + static inline void run( const scalar_##EIGENOP##_op& /*func*/, \ + int size, const EIGENTYPE* src, EIGENTYPE* dst) { \ + MKL_INT64 vmlMode = EIGEN_MKL_VML_MODE; \ + VMLOP(size, (const VMLTYPE*)src, (VMLTYPE*)dst, vmlMode); \ + } \ + }; + +#define EIGEN_MKL_VML_DECLARE_POW_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE) \ + template<> struct vml_call< scalar_##EIGENOP##_op > { \ + enum { IsSupported = 1 }; \ + static inline void run( const scalar_##EIGENOP##_op& func, \ + int size, const EIGENTYPE* src, EIGENTYPE* dst) { \ + EIGENTYPE exponent = func.m_exponent; \ + MKL_INT64 vmlMode = EIGEN_MKL_VML_MODE; \ + VMLOP(&size, (const VMLTYPE*)src, (const VMLTYPE*)&exponent, \ + (VMLTYPE*)dst, &vmlMode); \ + } \ + }; + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vs##VMLOP, float, float) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vd##VMLOP, double, double) + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vc##VMLOP, scomplex, MKL_Complex8) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vz##VMLOP, dcomplex, MKL_Complex16) + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX(EIGENOP, VMLOP) + + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL_LA(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vms##VMLOP, float, float) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmd##VMLOP, double, double) + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX_LA(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmc##VMLOP, scomplex, MKL_Complex8) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmz##VMLOP, dcomplex, MKL_Complex16) + +#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL_LA(EIGENOP, VMLOP) \ + EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX_LA(EIGENOP, VMLOP) + + +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(sin, Sin) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(asin, Asin) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(cos, Cos) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(acos, Acos) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(tan, Tan) +//EIGEN_MKL_VML_DECLARE_UNARY_CALLS(abs, Abs) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(exp, Exp) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(log, Ln) +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(sqrt, Sqrt) + +EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(square, Sqr) + +// The vm*powx functions are not avaibale in the windows version of MKL. +#ifdef _WIN32 +EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmspowx_, float, float) +EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmdpowx_, double, double) +EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmcpowx_, scomplex, MKL_Complex8) +EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmzpowx_, dcomplex, MKL_Complex16) +#endif + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_ASSIGN_VML_H diff --git a/Biopool/Sources/Eigen/src/Core/BandMatrix.h b/Biopool/Sources/Eigen/src/Core/BandMatrix.h new file mode 100644 index 0000000..8ef917d --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/BandMatrix.h @@ -0,0 +1,349 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_BANDMATRIX_H +#define EIGEN_BANDMATRIX_H + +namespace Eigen { + +namespace internal { + +template +class BandMatrixBase : public EigenBase +{ + public: + + enum { + Flags = internal::traits::Flags, + CoeffReadCost = internal::traits::CoeffReadCost, + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + MaxRowsAtCompileTime = internal::traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = internal::traits::MaxColsAtCompileTime, + Supers = internal::traits::Supers, + Subs = internal::traits::Subs, + Options = internal::traits::Options + }; + typedef typename internal::traits::Scalar Scalar; + typedef Matrix DenseMatrixType; + typedef typename DenseMatrixType::Index Index; + typedef typename internal::traits::CoefficientsType CoefficientsType; + typedef EigenBase Base; + + protected: + enum { + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) + ? 1 + Supers + Subs + : Dynamic, + SizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime) + }; + + public: + + using Base::derived; + using Base::rows; + using Base::cols; + + /** \returns the number of super diagonals */ + inline Index supers() const { return derived().supers(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return derived().subs(); } + + /** \returns an expression of the underlying coefficient matrix */ + inline const CoefficientsType& coeffs() const { return derived().coeffs(); } + + /** \returns an expression of the underlying coefficient matrix */ + inline CoefficientsType& coeffs() { return derived().coeffs(); } + + /** \returns a vector expression of the \a i -th column, + * only the meaningful part is returned. + * \warning the internal storage must be column major. */ + inline Block col(Index i) + { + EIGEN_STATIC_ASSERT((Options&RowMajor)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES); + Index start = 0; + Index len = coeffs().rows(); + if (i<=supers()) + { + start = supers()-i; + len = (std::min)(rows(),std::max(0,coeffs().rows() - (supers()-i))); + } + else if (i>=rows()-subs()) + len = std::max(0,coeffs().rows() - (i + 1 - rows() + subs())); + return Block(coeffs(), start, i, len, 1); + } + + /** \returns a vector expression of the main diagonal */ + inline Block diagonal() + { return Block(coeffs(),supers(),0,1,(std::min)(rows(),cols())); } + + /** \returns a vector expression of the main diagonal (const version) */ + inline const Block diagonal() const + { return Block(coeffs(),supers(),0,1,(std::min)(rows(),cols())); } + + template struct DiagonalIntReturnType { + enum { + ReturnOpposite = (Options&SelfAdjoint) && (((Index)>0 && Supers==0) || ((Index)<0 && Subs==0)), + Conjugate = ReturnOpposite && NumTraits::IsComplex, + ActualIndex = ReturnOpposite ? -Index : Index, + DiagonalSize = (RowsAtCompileTime==Dynamic || ColsAtCompileTime==Dynamic) + ? Dynamic + : (ActualIndex<0 + ? EIGEN_SIZE_MIN_PREFER_DYNAMIC(ColsAtCompileTime, RowsAtCompileTime + ActualIndex) + : EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime, ColsAtCompileTime - ActualIndex)) + }; + typedef Block BuildType; + typedef typename internal::conditional,BuildType >, + BuildType>::type Type; + }; + + /** \returns a vector expression of the \a N -th sub or super diagonal */ + template inline typename DiagonalIntReturnType::Type diagonal() + { + return typename DiagonalIntReturnType::BuildType(coeffs(), supers()-N, (std::max)(0,N), 1, diagonalLength(N)); + } + + /** \returns a vector expression of the \a N -th sub or super diagonal */ + template inline const typename DiagonalIntReturnType::Type diagonal() const + { + return typename DiagonalIntReturnType::BuildType(coeffs(), supers()-N, (std::max)(0,N), 1, diagonalLength(N)); + } + + /** \returns a vector expression of the \a i -th sub or super diagonal */ + inline Block diagonal(Index i) + { + eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers())); + return Block(coeffs(), supers()-i, std::max(0,i), 1, diagonalLength(i)); + } + + /** \returns a vector expression of the \a i -th sub or super diagonal */ + inline const Block diagonal(Index i) const + { + eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers())); + return Block(coeffs(), supers()-i, std::max(0,i), 1, diagonalLength(i)); + } + + template inline void evalTo(Dest& dst) const + { + dst.resize(rows(),cols()); + dst.setZero(); + dst.diagonal() = diagonal(); + for (Index i=1; i<=supers();++i) + dst.diagonal(i) = diagonal(i); + for (Index i=1; i<=subs();++i) + dst.diagonal(-i) = diagonal(-i); + } + + DenseMatrixType toDenseMatrix() const + { + DenseMatrixType res(rows(),cols()); + evalTo(res); + return res; + } + + protected: + + inline Index diagonalLength(Index i) const + { return i<0 ? (std::min)(cols(),rows()+i) : (std::min)(rows(),cols()-i); } +}; + +/** + * \class BandMatrix + * \ingroup Core_Module + * + * \brief Represents a rectangular matrix with a banded storage + * + * \param _Scalar Numeric type, i.e. float, double, int + * \param Rows Number of rows, or \b Dynamic + * \param Cols Number of columns, or \b Dynamic + * \param Supers Number of super diagonal + * \param Subs Number of sub diagonal + * \param _Options A combination of either \b #RowMajor or \b #ColMajor, and of \b #SelfAdjoint + * The former controls \ref TopicStorageOrders "storage order", and defaults to + * column-major. The latter controls whether the matrix represents a selfadjoint + * matrix in which case either Supers of Subs have to be null. + * + * \sa class TridiagonalMatrix + */ + +template +struct traits > +{ + typedef _Scalar Scalar; + typedef Dense StorageKind; + typedef DenseIndex Index; + enum { + CoeffReadCost = NumTraits::ReadCost, + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _Rows, + MaxColsAtCompileTime = _Cols, + Flags = LvalueBit, + Supers = _Supers, + Subs = _Subs, + Options = _Options, + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic + }; + typedef Matrix CoefficientsType; +}; + +template +class BandMatrix : public BandMatrixBase > +{ + public: + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::CoefficientsType CoefficientsType; + + inline BandMatrix(Index rows=Rows, Index cols=Cols, Index supers=Supers, Index subs=Subs) + : m_coeffs(1+supers+subs,cols), + m_rows(rows), m_supers(supers), m_subs(subs) + { + } + + /** \returns the number of columns */ + inline Index rows() const { return m_rows.value(); } + + /** \returns the number of rows */ + inline Index cols() const { return m_coeffs.cols(); } + + /** \returns the number of super diagonals */ + inline Index supers() const { return m_supers.value(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return m_subs.value(); } + + inline const CoefficientsType& coeffs() const { return m_coeffs; } + inline CoefficientsType& coeffs() { return m_coeffs; } + + protected: + + CoefficientsType m_coeffs; + internal::variable_if_dynamic m_rows; + internal::variable_if_dynamic m_supers; + internal::variable_if_dynamic m_subs; +}; + +template +class BandMatrixWrapper; + +template +struct traits > +{ + typedef typename _CoefficientsType::Scalar Scalar; + typedef typename _CoefficientsType::StorageKind StorageKind; + typedef typename _CoefficientsType::Index Index; + enum { + CoeffReadCost = internal::traits<_CoefficientsType>::CoeffReadCost, + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _Rows, + MaxColsAtCompileTime = _Cols, + Flags = LvalueBit, + Supers = _Supers, + Subs = _Subs, + Options = _Options, + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic + }; + typedef _CoefficientsType CoefficientsType; +}; + +template +class BandMatrixWrapper : public BandMatrixBase > +{ + public: + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::traits::CoefficientsType CoefficientsType; + typedef typename internal::traits::Index Index; + + inline BandMatrixWrapper(const CoefficientsType& coeffs, Index rows=_Rows, Index cols=_Cols, Index supers=_Supers, Index subs=_Subs) + : m_coeffs(coeffs), + m_rows(rows), m_supers(supers), m_subs(subs) + { + EIGEN_UNUSED_VARIABLE(cols); + //internal::assert(coeffs.cols()==cols() && (supers()+subs()+1)==coeffs.rows()); + } + + /** \returns the number of columns */ + inline Index rows() const { return m_rows.value(); } + + /** \returns the number of rows */ + inline Index cols() const { return m_coeffs.cols(); } + + /** \returns the number of super diagonals */ + inline Index supers() const { return m_supers.value(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return m_subs.value(); } + + inline const CoefficientsType& coeffs() const { return m_coeffs; } + + protected: + + const CoefficientsType& m_coeffs; + internal::variable_if_dynamic m_rows; + internal::variable_if_dynamic m_supers; + internal::variable_if_dynamic m_subs; +}; + +/** + * \class TridiagonalMatrix + * \ingroup Core_Module + * + * \brief Represents a tridiagonal matrix with a compact banded storage + * + * \param _Scalar Numeric type, i.e. float, double, int + * \param Size Number of rows and cols, or \b Dynamic + * \param _Options Can be 0 or \b SelfAdjoint + * + * \sa class BandMatrix + */ +template +class TridiagonalMatrix : public BandMatrix +{ + typedef BandMatrix Base; + typedef typename Base::Index Index; + public: + TridiagonalMatrix(Index size = Size) : Base(size,size,Options&SelfAdjoint?0:1,1) {} + + inline typename Base::template DiagonalIntReturnType<1>::Type super() + { return Base::template diagonal<1>(); } + inline const typename Base::template DiagonalIntReturnType<1>::Type super() const + { return Base::template diagonal<1>(); } + inline typename Base::template DiagonalIntReturnType<-1>::Type sub() + { return Base::template diagonal<-1>(); } + inline const typename Base::template DiagonalIntReturnType<-1>::Type sub() const + { return Base::template diagonal<-1>(); } + protected: +}; + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_BANDMATRIX_H diff --git a/Biopool/Sources/Eigen/src/Core/Block.h b/Biopool/Sources/Eigen/src/Core/Block.h new file mode 100644 index 0000000..84ad9b6 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Block.h @@ -0,0 +1,372 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_BLOCK_H +#define EIGEN_BLOCK_H + +namespace Eigen { + +/** \class Block + * \ingroup Core_Module + * + * \brief Expression of a fixed-size or dynamic-size block + * + * \param XprType the type of the expression in which we are taking a block + * \param BlockRows the number of rows of the block we are taking at compile time (optional) + * \param BlockCols the number of columns of the block we are taking at compile time (optional) + * \param _DirectAccessStatus \internal used for partial specialization + * + * This class represents an expression of either a fixed-size or dynamic-size block. It is the return + * type of DenseBase::block(Index,Index,Index,Index) and DenseBase::block(Index,Index) and + * most of the time this is the only way it is used. + * + * However, if you want to directly maniputate block expressions, + * for instance if you want to write a function returning such an expression, you + * will need to use this class. + * + * Here is an example illustrating the dynamic case: + * \include class_Block.cpp + * Output: \verbinclude class_Block.out + * + * \note Even though this expression has dynamic size, in the case where \a XprType + * has fixed size, this expression inherits a fixed maximal size which means that evaluating + * it does not cause a dynamic memory allocation. + * + * Here is an example illustrating the fixed-size case: + * \include class_FixedBlock.cpp + * Output: \verbinclude class_FixedBlock.out + * + * \sa DenseBase::block(Index,Index,Index,Index), DenseBase::block(Index,Index), class VectorBlock + */ + +namespace internal { +template +struct traits > : traits +{ + typedef typename traits::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename nested::type XprTypeNested; + typedef typename remove_reference::type _XprTypeNested; + enum{ + MatrixRows = traits::RowsAtCompileTime, + MatrixCols = traits::ColsAtCompileTime, + RowsAtCompileTime = MatrixRows == 0 ? 0 : BlockRows, + ColsAtCompileTime = MatrixCols == 0 ? 0 : BlockCols, + MaxRowsAtCompileTime = BlockRows==0 ? 0 + : RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime) + : int(traits::MaxRowsAtCompileTime), + MaxColsAtCompileTime = BlockCols==0 ? 0 + : ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime) + : int(traits::MaxColsAtCompileTime), + XprTypeIsRowMajor = (int(traits::Flags)&RowMajorBit) != 0, + IsRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1 + : (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0 + : XprTypeIsRowMajor, + HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor), + InnerSize = IsRowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime), + InnerStrideAtCompileTime = HasSameStorageOrderAsXprType + ? int(inner_stride_at_compile_time::ret) + : int(outer_stride_at_compile_time::ret), + OuterStrideAtCompileTime = HasSameStorageOrderAsXprType + ? int(outer_stride_at_compile_time::ret) + : int(inner_stride_at_compile_time::ret), + MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits::size) == 0) + && (InnerStrideAtCompileTime == 1) + ? PacketAccessBit : 0, + MaskAlignedBit = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic) && (((OuterStrideAtCompileTime * int(sizeof(Scalar))) % 16) == 0)) ? AlignedBit : 0, + FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0, + FlagsLvalueBit = is_lvalue::value ? LvalueBit : 0, + FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0, + Flags0 = traits::Flags & ( (HereditaryBits & ~RowMajorBit) | + DirectAccessBit | + MaskPacketAccessBit | + MaskAlignedBit), + Flags = Flags0 | FlagsLinearAccessBit | FlagsLvalueBit | FlagsRowMajorBit + }; +}; +} + +template class Block + : public internal::dense_xpr_base >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Block) + + class InnerIterator; + + /** Column or Row constructor + */ + inline Block(XprType& xpr, Index i) + : m_xpr(xpr), + // It is a row if and only if BlockRows==1 and BlockCols==XprType::ColsAtCompileTime, + // and it is a column if and only if BlockRows==XprType::RowsAtCompileTime and BlockCols==1, + // all other cases are invalid. + // The case a 1x1 matrix seems ambiguous, but the result is the same anyway. + m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0), + m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0), + m_blockRows(BlockRows==1 ? 1 : xpr.rows()), + m_blockCols(BlockCols==1 ? 1 : xpr.cols()) + { + eigen_assert( (i>=0) && ( + ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i= 0 && BlockRows >= 1 && startRow + BlockRows <= xpr.rows() + && startCol >= 0 && BlockCols >= 1 && startCol + BlockCols <= xpr.cols()); + } + + /** Dynamic-size constructor + */ + inline Block(XprType& xpr, + Index startRow, Index startCol, + Index blockRows, Index blockCols) + : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol), + m_blockRows(blockRows), m_blockCols(blockCols) + { + eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows) + && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols)); + eigen_assert(startRow >= 0 && blockRows >= 0 && startRow + blockRows <= xpr.rows() + && startCol >= 0 && blockCols >= 0 && startCol + blockCols <= xpr.cols()); + } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) + + inline Index rows() const { return m_blockRows.value(); } + inline Index cols() const { return m_blockCols.value(); } + + inline Scalar& coeffRef(Index row, Index col) + { + EIGEN_STATIC_ASSERT_LVALUE(XprType) + return m_xpr.const_cast_derived() + .coeffRef(row + m_startRow.value(), col + m_startCol.value()); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_xpr.derived() + .coeffRef(row + m_startRow.value(), col + m_startCol.value()); + } + + EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index row, Index col) const + { + return m_xpr.coeff(row + m_startRow.value(), col + m_startCol.value()); + } + + inline Scalar& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_LVALUE(XprType) + return m_xpr.const_cast_derived() + .coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_xpr.const_cast_derived() + .coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_xpr + .coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + template + inline PacketScalar packet(Index row, Index col) const + { + return m_xpr.template packet + (row + m_startRow.value(), col + m_startCol.value()); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket + (row + m_startRow.value(), col + m_startCol.value(), x); + } + + template + inline PacketScalar packet(Index index) const + { + return m_xpr.template packet + (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket + (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), x); + } + + #ifdef EIGEN_PARSED_BY_DOXYGEN + /** \sa MapBase::data() */ + inline const Scalar* data() const; + inline Index innerStride() const; + inline Index outerStride() const; + #endif + + const typename internal::remove_all::type& nestedExpression() const + { + return m_xpr; + } + + Index startRow() const + { + return m_startRow.value(); + } + + Index startCol() const + { + return m_startCol.value(); + } + + protected: + + const typename XprType::Nested m_xpr; + const internal::variable_if_dynamic m_startRow; + const internal::variable_if_dynamic m_startCol; + const internal::variable_if_dynamic m_blockRows; + const internal::variable_if_dynamic m_blockCols; +}; + +/** \internal */ +template +class Block + : public MapBase > +{ + public: + + typedef MapBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Block) + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) + + /** Column or Row constructor + */ + inline Block(XprType& xpr, Index i) + : Base(internal::const_cast_ptr(&xpr.coeffRef( + (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0, + (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0)), + BlockRows==1 ? 1 : xpr.rows(), + BlockCols==1 ? 1 : xpr.cols()), + m_xpr(xpr) + { + eigen_assert( (i>=0) && ( + ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i= 0 && BlockRows >= 1 && startRow + BlockRows <= xpr.rows() + && startCol >= 0 && BlockCols >= 1 && startCol + BlockCols <= xpr.cols()); + init(); + } + + /** Dynamic-size constructor + */ + inline Block(XprType& xpr, + Index startRow, Index startCol, + Index blockRows, Index blockCols) + : Base(internal::const_cast_ptr(&xpr.coeffRef(startRow,startCol)), blockRows, blockCols), + m_xpr(xpr) + { + eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows) + && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols)); + eigen_assert(startRow >= 0 && blockRows >= 0 && startRow + blockRows <= xpr.rows() + && startCol >= 0 && blockCols >= 0 && startCol + blockCols <= xpr.cols()); + init(); + } + + const typename internal::remove_all::type& nestedExpression() const + { + return m_xpr; + } + + /** \sa MapBase::innerStride() */ + inline Index innerStride() const + { + return internal::traits::HasSameStorageOrderAsXprType + ? m_xpr.innerStride() + : m_xpr.outerStride(); + } + + /** \sa MapBase::outerStride() */ + inline Index outerStride() const + { + return m_outerStride; + } + + #ifndef __SUNPRO_CC + // FIXME sunstudio is not friendly with the above friend... + // META-FIXME there is no 'friend' keyword around here. Is this obsolete? + protected: + #endif + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal used by allowAligned() */ + inline Block(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols) + : Base(data, blockRows, blockCols), m_xpr(xpr) + { + init(); + } + #endif + + protected: + void init() + { + m_outerStride = internal::traits::HasSameStorageOrderAsXprType + ? m_xpr.outerStride() + : m_xpr.innerStride(); + } + + typename XprType::Nested m_xpr; + Index m_outerStride; +}; + +} // end namespace Eigen + +#endif // EIGEN_BLOCK_H diff --git a/Biopool/Sources/Eigen/src/Core/BooleanRedux.h b/Biopool/Sources/Eigen/src/Core/BooleanRedux.h new file mode 100644 index 0000000..2c554a5 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/BooleanRedux.h @@ -0,0 +1,153 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ALLANDANY_H +#define EIGEN_ALLANDANY_H + +namespace Eigen { + +namespace internal { + +template +struct all_unroller +{ + enum { + col = (UnrollCount-1) / Derived::RowsAtCompileTime, + row = (UnrollCount-1) % Derived::RowsAtCompileTime + }; + + static inline bool run(const Derived &mat) + { + return all_unroller::run(mat) && mat.coeff(row, col); + } +}; + +template +struct all_unroller +{ + static inline bool run(const Derived &mat) { return mat.coeff(0, 0); } +}; + +template +struct all_unroller +{ + static inline bool run(const Derived &) { return false; } +}; + +template +struct any_unroller +{ + enum { + col = (UnrollCount-1) / Derived::RowsAtCompileTime, + row = (UnrollCount-1) % Derived::RowsAtCompileTime + }; + + static inline bool run(const Derived &mat) + { + return any_unroller::run(mat) || mat.coeff(row, col); + } +}; + +template +struct any_unroller +{ + static inline bool run(const Derived &mat) { return mat.coeff(0, 0); } +}; + +template +struct any_unroller +{ + static inline bool run(const Derived &) { return false; } +}; + +} // end namespace internal + +/** \returns true if all coefficients are true + * + * Example: \include MatrixBase_all.cpp + * Output: \verbinclude MatrixBase_all.out + * + * \sa any(), Cwise::operator<() + */ +template +inline bool DenseBase::all() const +{ + enum { + unroll = SizeAtCompileTime != Dynamic + && CoeffReadCost != Dynamic + && NumTraits::AddCost != Dynamic + && SizeAtCompileTime * (CoeffReadCost + NumTraits::AddCost) <= EIGEN_UNROLLING_LIMIT + }; + if(unroll) + return internal::all_unroller::run(derived()); + else + { + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if (!coeff(i, j)) return false; + return true; + } +} + +/** \returns true if at least one coefficient is true + * + * \sa all() + */ +template +inline bool DenseBase::any() const +{ + enum { + unroll = SizeAtCompileTime != Dynamic + && CoeffReadCost != Dynamic + && NumTraits::AddCost != Dynamic + && SizeAtCompileTime * (CoeffReadCost + NumTraits::AddCost) <= EIGEN_UNROLLING_LIMIT + }; + if(unroll) + return internal::any_unroller::run(derived()); + else + { + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if (coeff(i, j)) return true; + return false; + } +} + +/** \returns the number of coefficients which evaluate to true + * + * \sa all(), any() + */ +template +inline typename DenseBase::Index DenseBase::count() const +{ + return derived().template cast().template cast().sum(); +} + +} // end namespace Eigen + +#endif // EIGEN_ALLANDANY_H diff --git a/Biopool/Sources/Eigen/src/Core/CMakeLists.txt b/Biopool/Sources/Eigen/src/Core/CMakeLists.txt new file mode 100644 index 0000000..2346fc2 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CMakeLists.txt @@ -0,0 +1,10 @@ +FILE(GLOB Eigen_Core_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Core_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/Core COMPONENT Devel + ) + +ADD_SUBDIRECTORY(products) +ADD_SUBDIRECTORY(util) +ADD_SUBDIRECTORY(arch) diff --git a/Biopool/Sources/Eigen/src/Core/CommaInitializer.h b/Biopool/Sources/Eigen/src/Core/CommaInitializer.h new file mode 100644 index 0000000..f9ec1d5 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CommaInitializer.h @@ -0,0 +1,154 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_COMMAINITIALIZER_H +#define EIGEN_COMMAINITIALIZER_H + +namespace Eigen { + +/** \class CommaInitializer + * \ingroup Core_Module + * + * \brief Helper class used by the comma initializer operator + * + * This class is internally used to implement the comma initializer feature. It is + * the return type of MatrixBase::operator<<, and most of the time this is the only + * way it is used. + * + * \sa \ref MatrixBaseCommaInitRef "MatrixBase::operator<<", CommaInitializer::finished() + */ +template +struct CommaInitializer +{ + typedef typename XprType::Scalar Scalar; + typedef typename XprType::Index Index; + + inline CommaInitializer(XprType& xpr, const Scalar& s) + : m_xpr(xpr), m_row(0), m_col(1), m_currentBlockRows(1) + { + m_xpr.coeffRef(0,0) = s; + } + + template + inline CommaInitializer(XprType& xpr, const DenseBase& other) + : m_xpr(xpr), m_row(0), m_col(other.cols()), m_currentBlockRows(other.rows()) + { + m_xpr.block(0, 0, other.rows(), other.cols()) = other; + } + + /* inserts a scalar value in the target matrix */ + CommaInitializer& operator,(const Scalar& s) + { + if (m_col==m_xpr.cols()) + { + m_row+=m_currentBlockRows; + m_col = 0; + m_currentBlockRows = 1; + eigen_assert(m_row + CommaInitializer& operator,(const DenseBase& other) + { + if (m_col==m_xpr.cols()) + { + m_row+=m_currentBlockRows; + m_col = 0; + m_currentBlockRows = other.rows(); + eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows() + && "Too many rows passed to comma initializer (operator<<)"); + } + eigen_assert(m_col + (m_row, m_col) = other; + else + m_xpr.block(m_row, m_col, other.rows(), other.cols()) = other; + m_col += other.cols(); + return *this; + } + + inline ~CommaInitializer() + { + eigen_assert((m_row+m_currentBlockRows) == m_xpr.rows() + && m_col == m_xpr.cols() + && "Too few coefficients passed to comma initializer (operator<<)"); + } + + /** \returns the built matrix once all its coefficients have been set. + * Calling finished is 100% optional. Its purpose is to write expressions + * like this: + * \code + * quaternion.fromRotationMatrix((Matrix3f() << axis0, axis1, axis2).finished()); + * \endcode + */ + inline XprType& finished() { return m_xpr; } + + XprType& m_xpr; // target expression + Index m_row; // current row id + Index m_col; // current col id + Index m_currentBlockRows; // current block height +}; + +/** \anchor MatrixBaseCommaInitRef + * Convenient operator to set the coefficients of a matrix. + * + * The coefficients must be provided in a row major order and exactly match + * the size of the matrix. Otherwise an assertion is raised. + * + * Example: \include MatrixBase_set.cpp + * Output: \verbinclude MatrixBase_set.out + * + * \sa CommaInitializer::finished(), class CommaInitializer + */ +template +inline CommaInitializer DenseBase::operator<< (const Scalar& s) +{ + return CommaInitializer(*static_cast(this), s); +} + +/** \sa operator<<(const Scalar&) */ +template +template +inline CommaInitializer +DenseBase::operator<<(const DenseBase& other) +{ + return CommaInitializer(*static_cast(this), other); +} + +} // end namespace Eigen + +#endif // EIGEN_COMMAINITIALIZER_H diff --git a/Biopool/Sources/Eigen/src/Core/CwiseBinaryOp.h b/Biopool/Sources/Eigen/src/Core/CwiseBinaryOp.h new file mode 100644 index 0000000..32599a7 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CwiseBinaryOp.h @@ -0,0 +1,244 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2009 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_BINARY_OP_H +#define EIGEN_CWISE_BINARY_OP_H + +namespace Eigen { + +/** \class CwiseBinaryOp + * \ingroup Core_Module + * + * \brief Generic expression where a coefficient-wise binary operator is applied to two expressions + * + * \param BinaryOp template functor implementing the operator + * \param Lhs the type of the left-hand side + * \param Rhs the type of the right-hand side + * + * This class represents an expression where a coefficient-wise binary operator is applied to two expressions. + * It is the return type of binary operators, by which we mean only those binary operators where + * both the left-hand side and the right-hand side are Eigen expressions. + * For example, the return type of matrix1+matrix2 is a CwiseBinaryOp. + * + * Most of the time, this is the only way that it is used, so you typically don't have to name + * CwiseBinaryOp types explicitly. + * + * \sa MatrixBase::binaryExpr(const MatrixBase &,const CustomBinaryOp &) const, class CwiseUnaryOp, class CwiseNullaryOp + */ + +namespace internal { +template +struct traits > +{ + // we must not inherit from traits since it has + // the potential to cause problems with MSVC + typedef typename remove_all::type Ancestor; + typedef typename traits::XprKind XprKind; + enum { + RowsAtCompileTime = traits::RowsAtCompileTime, + ColsAtCompileTime = traits::ColsAtCompileTime, + MaxRowsAtCompileTime = traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = traits::MaxColsAtCompileTime + }; + + // even though we require Lhs and Rhs to have the same scalar type (see CwiseBinaryOp constructor), + // we still want to handle the case when the result type is different. + typedef typename result_of< + BinaryOp( + typename Lhs::Scalar, + typename Rhs::Scalar + ) + >::type Scalar; + typedef typename promote_storage_type::StorageKind, + typename traits::StorageKind>::ret StorageKind; + typedef typename promote_index_type::Index, + typename traits::Index>::type Index; + typedef typename Lhs::Nested LhsNested; + typedef typename Rhs::Nested RhsNested; + typedef typename remove_reference::type _LhsNested; + typedef typename remove_reference::type _RhsNested; + enum { + LhsCoeffReadCost = _LhsNested::CoeffReadCost, + RhsCoeffReadCost = _RhsNested::CoeffReadCost, + LhsFlags = _LhsNested::Flags, + RhsFlags = _RhsNested::Flags, + SameType = is_same::value, + StorageOrdersAgree = (int(Lhs::Flags)&RowMajorBit)==(int(Rhs::Flags)&RowMajorBit), + Flags0 = (int(LhsFlags) | int(RhsFlags)) & ( + HereditaryBits + | (int(LhsFlags) & int(RhsFlags) & + ( AlignedBit + | (StorageOrdersAgree ? LinearAccessBit : 0) + | (functor_traits::PacketAccess && StorageOrdersAgree && SameType ? PacketAccessBit : 0) + ) + ) + ), + Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit), + CoeffReadCost = LhsCoeffReadCost + RhsCoeffReadCost + functor_traits::Cost + }; +}; +} // end namespace internal + +// we require Lhs and Rhs to have the same scalar type. Currently there is no example of a binary functor +// that would take two operands of different types. If there were such an example, then this check should be +// moved to the BinaryOp functors, on a per-case basis. This would however require a change in the BinaryOp functors, as +// currently they take only one typename Scalar template parameter. +// It is tempting to always allow mixing different types but remember that this is often impossible in the vectorized paths. +// So allowing mixing different types gives very unexpected errors when enabling vectorization, when the user tries to +// add together a float matrix and a double matrix. +#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \ + EIGEN_STATIC_ASSERT((internal::functor_allows_mixing_real_and_complex::ret \ + ? int(internal::is_same::Real, typename NumTraits::Real>::value) \ + : int(internal::is_same::value)), \ + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + +template +class CwiseBinaryOpImpl; + +template +class CwiseBinaryOp : internal::no_assignment_operator, + public CwiseBinaryOpImpl< + BinaryOp, Lhs, Rhs, + typename internal::promote_storage_type::StorageKind, + typename internal::traits::StorageKind>::ret> +{ + public: + + typedef typename CwiseBinaryOpImpl< + BinaryOp, Lhs, Rhs, + typename internal::promote_storage_type::StorageKind, + typename internal::traits::StorageKind>::ret>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseBinaryOp) + + typedef typename internal::nested::type LhsNested; + typedef typename internal::nested::type RhsNested; + typedef typename internal::remove_reference::type _LhsNested; + typedef typename internal::remove_reference::type _RhsNested; + + EIGEN_STRONG_INLINE CwiseBinaryOp(const Lhs& lhs, const Rhs& rhs, const BinaryOp& func = BinaryOp()) + : m_lhs(lhs), m_rhs(rhs), m_functor(func) + { + EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar); + // require the sizes to match + EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs) + eigen_assert(lhs.rows() == rhs.rows() && lhs.cols() == rhs.cols()); + } + + EIGEN_STRONG_INLINE Index rows() const { + // return the fixed size type if available to enable compile time optimizations + if (internal::traits::type>::RowsAtCompileTime==Dynamic) + return m_rhs.rows(); + else + return m_lhs.rows(); + } + EIGEN_STRONG_INLINE Index cols() const { + // return the fixed size type if available to enable compile time optimizations + if (internal::traits::type>::ColsAtCompileTime==Dynamic) + return m_rhs.cols(); + else + return m_lhs.cols(); + } + + /** \returns the left hand side nested expression */ + const _LhsNested& lhs() const { return m_lhs; } + /** \returns the right hand side nested expression */ + const _RhsNested& rhs() const { return m_rhs; } + /** \returns the functor representing the binary operation */ + const BinaryOp& functor() const { return m_functor; } + + protected: + LhsNested m_lhs; + RhsNested m_rhs; + const BinaryOp m_functor; +}; + +template +class CwiseBinaryOpImpl + : public internal::dense_xpr_base >::type +{ + typedef CwiseBinaryOp Derived; + public: + + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE( Derived ) + + EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const + { + return derived().functor()(derived().lhs().coeff(row, col), + derived().rhs().coeff(row, col)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return derived().functor().packetOp(derived().lhs().template packet(row, col), + derived().rhs().template packet(row, col)); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return derived().functor()(derived().lhs().coeff(index), + derived().rhs().coeff(index)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return derived().functor().packetOp(derived().lhs().template packet(index), + derived().rhs().template packet(index)); + } +}; + +/** replaces \c *this by \c *this - \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +MatrixBase::operator-=(const MatrixBase &other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this + \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +MatrixBase::operator+=(const MatrixBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_CWISE_BINARY_OP_H diff --git a/Biopool/Sources/Eigen/src/Core/CwiseNullaryOp.h b/Biopool/Sources/Eigen/src/Core/CwiseNullaryOp.h new file mode 100644 index 0000000..a6d5e09 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CwiseNullaryOp.h @@ -0,0 +1,879 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_NULLARY_OP_H +#define EIGEN_CWISE_NULLARY_OP_H + +namespace Eigen { + +/** \class CwiseNullaryOp + * \ingroup Core_Module + * + * \brief Generic expression of a matrix where all coefficients are defined by a functor + * + * \param NullaryOp template functor implementing the operator + * \param PlainObjectType the underlying plain matrix/array type + * + * This class represents an expression of a generic nullary operator. + * It is the return type of the Ones(), Zero(), Constant(), Identity() and Random() methods, + * and most of the time this is the only way it is used. + * + * However, if you want to write a function returning such an expression, you + * will need to use this class. + * + * \sa class CwiseUnaryOp, class CwiseBinaryOp, DenseBase::NullaryExpr() + */ + +namespace internal { +template +struct traits > : traits +{ + enum { + Flags = (traits::Flags + & ( HereditaryBits + | (functor_has_linear_access::ret ? LinearAccessBit : 0) + | (functor_traits::PacketAccess ? PacketAccessBit : 0))) + | (functor_traits::IsRepeatable ? 0 : EvalBeforeNestingBit), + CoeffReadCost = functor_traits::Cost + }; +}; +} + +template +class CwiseNullaryOp : internal::no_assignment_operator, + public internal::dense_xpr_base< CwiseNullaryOp >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(CwiseNullaryOp) + + CwiseNullaryOp(Index rows, Index cols, const NullaryOp& func = NullaryOp()) + : m_rows(rows), m_cols(cols), m_functor(func) + { + eigen_assert(rows >= 0 + && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 + && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); + } + + EIGEN_STRONG_INLINE Index rows() const { return m_rows.value(); } + EIGEN_STRONG_INLINE Index cols() const { return m_cols.value(); } + + EIGEN_STRONG_INLINE const Scalar coeff(Index rows, Index cols) const + { + return m_functor(rows, cols); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return m_functor.packetOp(row, col); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return m_functor(index); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return m_functor.packetOp(index); + } + + /** \returns the functor representing the nullary operation */ + const NullaryOp& functor() const { return m_functor; } + + protected: + const internal::variable_if_dynamic m_rows; + const internal::variable_if_dynamic m_cols; + const NullaryOp m_functor; +}; + + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func) +{ + return CwiseNullaryOp(rows, cols, func); +} + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(Index size, const CustomNullaryOp& func) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + if(RowsAtCompileTime == 1) return CwiseNullaryOp(1, size, func); + else return CwiseNullaryOp(size, 1, func); +} + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * This variant is only for fixed-size DenseBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(const CustomNullaryOp& func) +{ + return CwiseNullaryOp(RowsAtCompileTime, ColsAtCompileTime, func); +} + +/** \returns an expression of a constant matrix of value \a value + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this DenseBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(Index rows, Index cols, const Scalar& value) +{ + return DenseBase::NullaryExpr(rows, cols, internal::scalar_constant_op(value)); +} + +/** \returns an expression of a constant matrix of value \a value + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this DenseBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(Index size, const Scalar& value) +{ + return DenseBase::NullaryExpr(size, internal::scalar_constant_op(value)); +} + +/** \returns an expression of a constant matrix of value \a value + * + * This variant is only for fixed-size DenseBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(const Scalar& value) +{ + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_constant_op(value)); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * This particular version of LinSpaced() uses sequential access, i.e. vector access is + * assumed to be a(0), a(1), ..., a(size). This assumption allows for better vectorization + * and yields faster code than the random access version. + * + * When size is set to 1, a vector of length 1 containing 'high' is returned. + * + * \only_for_vectors + * + * Example: \include DenseBase_LinSpaced_seq.cpp + * Output: \verbinclude DenseBase_LinSpaced_seq.out + * + * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Index,Scalar,Scalar), CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::SequentialLinSpacedReturnType +DenseBase::LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return DenseBase::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +/** + * \copydoc DenseBase::LinSpaced(Sequential_t, Index, const Scalar&, const Scalar&) + * Special version for fixed size types which does not require the size parameter. + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::SequentialLinSpacedReturnType +DenseBase::LinSpaced(Sequential_t, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op(low,high,Derived::SizeAtCompileTime)); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * When size is set to 1, a vector of length 1 containing 'high' is returned. + * + * \only_for_vectors + * + * Example: \include DenseBase_LinSpaced.cpp + * Output: \verbinclude DenseBase_LinSpaced.out + * + * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Sequential_t,Index,const Scalar&,const Scalar&,Index), CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::RandomAccessLinSpacedReturnType +DenseBase::LinSpaced(Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return DenseBase::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +/** + * \copydoc DenseBase::LinSpaced(Index, const Scalar&, const Scalar&) + * Special version for fixed size types which does not require the size parameter. + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::RandomAccessLinSpacedReturnType +DenseBase::LinSpaced(const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op(low,high,Derived::SizeAtCompileTime)); +} + +/** \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */ +template +bool DenseBase::isApproxToConstant +(const Scalar& value, RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if(!internal::isApprox(this->coeff(i, j), value, prec)) + return false; + return true; +} + +/** This is just an alias for isApproxToConstant(). + * + * \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */ +template +bool DenseBase::isConstant +(const Scalar& value, RealScalar prec) const +{ + return isApproxToConstant(value, prec); +} + +/** Alias for setConstant(): sets all coefficients in this expression to \a value. + * + * \sa setConstant(), Constant(), class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE void DenseBase::fill(const Scalar& value) +{ + setConstant(value); +} + +/** Sets all coefficients in this expression to \a value. + * + * \sa fill(), setConstant(Index,const Scalar&), setConstant(Index,Index,const Scalar&), setZero(), setOnes(), Constant(), class CwiseNullaryOp, setZero(), setOnes() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setConstant(const Scalar& value) +{ + return derived() = Constant(rows(), cols(), value); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to the given \a value. + * + * \only_for_vectors + * + * Example: \include Matrix_setConstant_int.cpp + * Output: \verbinclude Matrix_setConstant_int.out + * + * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setConstant(Index size, const Scalar& value) +{ + resize(size); + return setConstant(value); +} + +/** Resizes to the given size, and sets all coefficients in this expression to the given \a value. + * + * \param rows the new number of rows + * \param cols the new number of columns + * \param value the value to which all coefficients are set + * + * Example: \include Matrix_setConstant_int_int.cpp + * Output: \verbinclude Matrix_setConstant_int_int.out + * + * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setConstant(Index rows, Index cols, const Scalar& value) +{ + resize(rows, cols); + return setConstant(value); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * When size is set to 1, a vector of length 1 containing 'high' is returned. + * + * \only_for_vectors + * + * Example: \include DenseBase_setLinSpaced.cpp + * Output: \verbinclude DenseBase_setLinSpaced.out + * + * \sa CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setLinSpaced(Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return derived() = Derived::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +/** + * \brief Sets a linearly space vector. + * + * The function fill *this with equally spaced values in the closed interval [low,high]. + * When size is set to 1, a vector of length 1 containing 'high' is returned. + * + * \only_for_vectors + * + * \sa setLinSpaced(Index, const Scalar&, const Scalar&), CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setLinSpaced(const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return setLinSpaced(size(), low, high); +} + +// zero: + +/** \returns an expression of a zero matrix. + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * Example: \include MatrixBase_zero_int_int.cpp + * Output: \verbinclude MatrixBase_zero_int_int.out + * + * \sa Zero(), Zero(Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero(Index rows, Index cols) +{ + return Constant(rows, cols, Scalar(0)); +} + +/** \returns an expression of a zero vector. + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * Example: \include MatrixBase_zero_int.cpp + * Output: \verbinclude MatrixBase_zero_int.out + * + * \sa Zero(), Zero(Index,Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero(Index size) +{ + return Constant(size, Scalar(0)); +} + +/** \returns an expression of a fixed-size zero matrix or vector. + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_zero.cpp + * Output: \verbinclude MatrixBase_zero.out + * + * \sa Zero(Index), Zero(Index,Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero() +{ + return Constant(Scalar(0)); +} + +/** \returns true if *this is approximately equal to the zero matrix, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isZero.cpp + * Output: \verbinclude MatrixBase_isZero.out + * + * \sa class CwiseNullaryOp, Zero() + */ +template +bool DenseBase::isZero(RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast(1), prec)) + return false; + return true; +} + +/** Sets all coefficients in this expression to zero. + * + * Example: \include MatrixBase_setZero.cpp + * Output: \verbinclude MatrixBase_setZero.out + * + * \sa class CwiseNullaryOp, Zero() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setZero() +{ + return setConstant(Scalar(0)); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to zero. + * + * \only_for_vectors + * + * Example: \include Matrix_setZero_int.cpp + * Output: \verbinclude Matrix_setZero_int.out + * + * \sa DenseBase::setZero(), setZero(Index,Index), class CwiseNullaryOp, DenseBase::Zero() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setZero(Index size) +{ + resize(size); + return setConstant(Scalar(0)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to zero. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setZero_int_int.cpp + * Output: \verbinclude Matrix_setZero_int_int.out + * + * \sa DenseBase::setZero(), setZero(Index), class CwiseNullaryOp, DenseBase::Zero() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setZero(Index rows, Index cols) +{ + resize(rows, cols); + return setConstant(Scalar(0)); +} + +// ones: + +/** \returns an expression of a matrix where all coefficients equal one. + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Ones() should be used + * instead. + * + * Example: \include MatrixBase_ones_int_int.cpp + * Output: \verbinclude MatrixBase_ones_int_int.out + * + * \sa Ones(), Ones(Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones(Index rows, Index cols) +{ + return Constant(rows, cols, Scalar(1)); +} + +/** \returns an expression of a vector where all coefficients equal one. + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Ones() should be used + * instead. + * + * Example: \include MatrixBase_ones_int.cpp + * Output: \verbinclude MatrixBase_ones_int.out + * + * \sa Ones(), Ones(Index,Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones(Index size) +{ + return Constant(size, Scalar(1)); +} + +/** \returns an expression of a fixed-size matrix or vector where all coefficients equal one. + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_ones.cpp + * Output: \verbinclude MatrixBase_ones.out + * + * \sa Ones(Index), Ones(Index,Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones() +{ + return Constant(Scalar(1)); +} + +/** \returns true if *this is approximately equal to the matrix where all coefficients + * are equal to 1, within the precision given by \a prec. + * + * Example: \include MatrixBase_isOnes.cpp + * Output: \verbinclude MatrixBase_isOnes.out + * + * \sa class CwiseNullaryOp, Ones() + */ +template +bool DenseBase::isOnes +(RealScalar prec) const +{ + return isApproxToConstant(Scalar(1), prec); +} + +/** Sets all coefficients in this expression to one. + * + * Example: \include MatrixBase_setOnes.cpp + * Output: \verbinclude MatrixBase_setOnes.out + * + * \sa class CwiseNullaryOp, Ones() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setOnes() +{ + return setConstant(Scalar(1)); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to one. + * + * \only_for_vectors + * + * Example: \include Matrix_setOnes_int.cpp + * Output: \verbinclude Matrix_setOnes_int.out + * + * \sa MatrixBase::setOnes(), setOnes(Index,Index), class CwiseNullaryOp, MatrixBase::Ones() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setOnes(Index size) +{ + resize(size); + return setConstant(Scalar(1)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to one. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setOnes_int_int.cpp + * Output: \verbinclude Matrix_setOnes_int_int.out + * + * \sa MatrixBase::setOnes(), setOnes(Index), class CwiseNullaryOp, MatrixBase::Ones() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setOnes(Index rows, Index cols) +{ + resize(rows, cols); + return setConstant(Scalar(1)); +} + +// Identity: + +/** \returns an expression of the identity matrix (not necessarily square). + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Identity() should be used + * instead. + * + * Example: \include MatrixBase_identity_int_int.cpp + * Output: \verbinclude MatrixBase_identity_int_int.out + * + * \sa Identity(), setIdentity(), isIdentity() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType +MatrixBase::Identity(Index rows, Index cols) +{ + return DenseBase::NullaryExpr(rows, cols, internal::scalar_identity_op()); +} + +/** \returns an expression of the identity matrix (not necessarily square). + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variant taking size arguments. + * + * Example: \include MatrixBase_identity.cpp + * Output: \verbinclude MatrixBase_identity.out + * + * \sa Identity(Index,Index), setIdentity(), isIdentity() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType +MatrixBase::Identity() +{ + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return MatrixBase::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_identity_op()); +} + +/** \returns true if *this is approximately equal to the identity matrix + * (not necessarily square), + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isIdentity.cpp + * Output: \verbinclude MatrixBase_isIdentity.out + * + * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), setIdentity() + */ +template +bool MatrixBase::isIdentity +(RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + { + for(Index i = 0; i < rows(); ++i) + { + if(i == j) + { + if(!internal::isApprox(this->coeff(i, j), static_cast(1), prec)) + return false; + } + else + { + if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast(1), prec)) + return false; + } + } + } + return true; +} + +namespace internal { + +template=16)> +struct setIdentity_impl +{ + static EIGEN_STRONG_INLINE Derived& run(Derived& m) + { + return m = Derived::Identity(m.rows(), m.cols()); + } +}; + +template +struct setIdentity_impl +{ + typedef typename Derived::Index Index; + static EIGEN_STRONG_INLINE Derived& run(Derived& m) + { + m.setZero(); + const Index size = (std::min)(m.rows(), m.cols()); + for(Index i = 0; i < size; ++i) m.coeffRef(i,i) = typename Derived::Scalar(1); + return m; + } +}; + +} // end namespace internal + +/** Writes the identity expression (not necessarily square) into *this. + * + * Example: \include MatrixBase_setIdentity.cpp + * Output: \verbinclude MatrixBase_setIdentity.out + * + * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), isIdentity() + */ +template +EIGEN_STRONG_INLINE Derived& MatrixBase::setIdentity() +{ + return internal::setIdentity_impl::run(derived()); +} + +/** \brief Resizes to the given size, and writes the identity expression (not necessarily square) into *this. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setIdentity_int_int.cpp + * Output: \verbinclude Matrix_setIdentity_int_int.out + * + * \sa MatrixBase::setIdentity(), class CwiseNullaryOp, MatrixBase::Identity() + */ +template +EIGEN_STRONG_INLINE Derived& MatrixBase::setIdentity(Index rows, Index cols) +{ + derived().resize(rows, cols); + return setIdentity(); +} + +/** \returns an expression of the i-th unit (basis) vector. + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(Index size, Index i) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return BasisReturnType(SquareMatrixType::Identity(size,size), i); +} + +/** \returns an expression of the i-th unit (basis) vector. + * + * \only_for_vectors + * + * This variant is for fixed-size vector only. + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(Index i) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return BasisReturnType(SquareMatrixType::Identity(),i); +} + +/** \returns an expression of the X axis unit vector (1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitX() +{ return Derived::Unit(0); } + +/** \returns an expression of the Y axis unit vector (0,1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitY() +{ return Derived::Unit(1); } + +/** \returns an expression of the Z axis unit vector (0,0,1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitZ() +{ return Derived::Unit(2); } + +/** \returns an expression of the W axis unit vector (0,0,0,1) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitW() +{ return Derived::Unit(3); } + +} // end namespace Eigen + +#endif // EIGEN_CWISE_NULLARY_OP_H diff --git a/Biopool/Sources/Eigen/src/Core/CwiseUnaryOp.h b/Biopool/Sources/Eigen/src/Core/CwiseUnaryOp.h new file mode 100644 index 0000000..9110c98 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CwiseUnaryOp.h @@ -0,0 +1,141 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_UNARY_OP_H +#define EIGEN_CWISE_UNARY_OP_H + +namespace Eigen { + +/** \class CwiseUnaryOp + * \ingroup Core_Module + * + * \brief Generic expression where a coefficient-wise unary operator is applied to an expression + * + * \param UnaryOp template functor implementing the operator + * \param XprType the type of the expression to which we are applying the unary operator + * + * This class represents an expression where a unary operator is applied to an expression. + * It is the return type of all operations taking exactly 1 input expression, regardless of the + * presence of other inputs such as scalars. For example, the operator* in the expression 3*matrix + * is considered unary, because only the right-hand side is an expression, and its + * return type is a specialization of CwiseUnaryOp. + * + * Most of the time, this is the only way that it is used, so you typically don't have to name + * CwiseUnaryOp types explicitly. + * + * \sa MatrixBase::unaryExpr(const CustomUnaryOp &) const, class CwiseBinaryOp, class CwiseNullaryOp + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename result_of< + UnaryOp(typename XprType::Scalar) + >::type Scalar; + typedef typename XprType::Nested XprTypeNested; + typedef typename remove_reference::type _XprTypeNested; + enum { + Flags = _XprTypeNested::Flags & ( + HereditaryBits | LinearAccessBit | AlignedBit + | (functor_traits::PacketAccess ? PacketAccessBit : 0)), + CoeffReadCost = _XprTypeNested::CoeffReadCost + functor_traits::Cost + }; +}; +} + +template +class CwiseUnaryOpImpl; + +template +class CwiseUnaryOp : internal::no_assignment_operator, + public CwiseUnaryOpImpl::StorageKind> +{ + public: + + typedef typename CwiseUnaryOpImpl::StorageKind>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseUnaryOp) + + inline CwiseUnaryOp(const XprType& xpr, const UnaryOp& func = UnaryOp()) + : m_xpr(xpr), m_functor(func) {} + + EIGEN_STRONG_INLINE Index rows() const { return m_xpr.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_xpr.cols(); } + + /** \returns the functor representing the unary operation */ + const UnaryOp& functor() const { return m_functor; } + + /** \returns the nested expression */ + const typename internal::remove_all::type& + nestedExpression() const { return m_xpr; } + + /** \returns the nested expression */ + typename internal::remove_all::type& + nestedExpression() { return m_xpr.const_cast_derived(); } + + protected: + typename XprType::Nested m_xpr; + const UnaryOp m_functor; +}; + +// This is the generic implementation for dense storage. +// It can be used for any expression types implementing the dense concept. +template +class CwiseUnaryOpImpl + : public internal::dense_xpr_base >::type +{ + public: + + typedef CwiseUnaryOp Derived; + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) + + EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const + { + return derived().functor()(derived().nestedExpression().coeff(row, col)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return derived().functor().packetOp(derived().nestedExpression().template packet(row, col)); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return derived().functor()(derived().nestedExpression().coeff(index)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return derived().functor().packetOp(derived().nestedExpression().template packet(index)); + } +}; + +} // end namespace Eigen + +#endif // EIGEN_CWISE_UNARY_OP_H diff --git a/Biopool/Sources/Eigen/src/Core/CwiseUnaryView.h b/Biopool/Sources/Eigen/src/Core/CwiseUnaryView.h new file mode 100644 index 0000000..bf16243 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/CwiseUnaryView.h @@ -0,0 +1,150 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_UNARY_VIEW_H +#define EIGEN_CWISE_UNARY_VIEW_H + +namespace Eigen { + +/** \class CwiseUnaryView + * \ingroup Core_Module + * + * \brief Generic lvalue expression of a coefficient-wise unary operator of a matrix or a vector + * + * \param ViewOp template functor implementing the view + * \param MatrixType the type of the matrix we are applying the unary operator + * + * This class represents a lvalue expression of a generic unary view operator of a matrix or a vector. + * It is the return type of real() and imag(), and most of the time this is the only way it is used. + * + * \sa MatrixBase::unaryViewExpr(const CustomUnaryOp &) const, class CwiseUnaryOp + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename result_of< + ViewOp(typename traits::Scalar) + >::type Scalar; + typedef typename MatrixType::Nested MatrixTypeNested; + typedef typename remove_all::type _MatrixTypeNested; + enum { + Flags = (traits<_MatrixTypeNested>::Flags & (HereditaryBits | LvalueBit | LinearAccessBit | DirectAccessBit)), + CoeffReadCost = traits<_MatrixTypeNested>::CoeffReadCost + functor_traits::Cost, + MatrixTypeInnerStride = inner_stride_at_compile_time::ret, + // need to cast the sizeof's from size_t to int explicitly, otherwise: + // "error: no integral type can represent all of the enumerator values + InnerStrideAtCompileTime = MatrixTypeInnerStride == Dynamic + ? int(Dynamic) + : int(MatrixTypeInnerStride) + * int(sizeof(typename traits::Scalar) / sizeof(Scalar)), + OuterStrideAtCompileTime = outer_stride_at_compile_time::ret + }; +}; +} + +template +class CwiseUnaryViewImpl; + +template +class CwiseUnaryView : internal::no_assignment_operator, + public CwiseUnaryViewImpl::StorageKind> +{ + public: + + typedef typename CwiseUnaryViewImpl::StorageKind>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseUnaryView) + + inline CwiseUnaryView(const MatrixType& mat, const ViewOp& func = ViewOp()) + : m_matrix(mat), m_functor(func) {} + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(CwiseUnaryView) + + EIGEN_STRONG_INLINE Index rows() const { return m_matrix.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_matrix.cols(); } + + /** \returns the functor representing unary operation */ + const ViewOp& functor() const { return m_functor; } + + /** \returns the nested expression */ + const typename internal::remove_all::type& + nestedExpression() const { return m_matrix; } + + /** \returns the nested expression */ + typename internal::remove_all::type& + nestedExpression() { return m_matrix.const_cast_derived(); } + + protected: + // FIXME changed from MatrixType::Nested because of a weird compilation error with sun CC + typename internal::nested::type m_matrix; + ViewOp m_functor; +}; + +template +class CwiseUnaryViewImpl + : public internal::dense_xpr_base< CwiseUnaryView >::type +{ + public: + + typedef CwiseUnaryView Derived; + typedef typename internal::dense_xpr_base< CwiseUnaryView >::type Base; + + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) + + inline Index innerStride() const + { + return derived().nestedExpression().innerStride() * sizeof(typename internal::traits::Scalar) / sizeof(Scalar); + } + + inline Index outerStride() const + { + return derived().nestedExpression().outerStride(); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const + { + return derived().functor()(derived().nestedExpression().coeff(row, col)); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const + { + return derived().functor()(derived().nestedExpression().coeff(index)); + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + return derived().functor()(const_cast_derived().nestedExpression().coeffRef(row, col)); + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) + { + return derived().functor()(const_cast_derived().nestedExpression().coeffRef(index)); + } +}; + +} // end namespace Eigen + +#endif // EIGEN_CWISE_UNARY_VIEW_H diff --git a/Biopool/Sources/Eigen/src/Core/DenseBase.h b/Biopool/Sources/Eigen/src/Core/DenseBase.h new file mode 100644 index 0000000..1882dcc --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/DenseBase.h @@ -0,0 +1,548 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSEBASE_H +#define EIGEN_DENSEBASE_H + +namespace Eigen { + +/** \class DenseBase + * \ingroup Core_Module + * + * \brief Base class for all dense matrices, vectors, and arrays + * + * This class is the base that is inherited by all dense objects (matrix, vector, arrays, + * and related expression types). The common Eigen API for dense objects is contained in this class. + * + * \tparam Derived is the derived type, e.g., a matrix type or an expression. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_DENSEBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +template class DenseBase +#ifndef EIGEN_PARSED_BY_DOXYGEN + : public internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real> +#else + : public DenseCoeffsBase +#endif // not EIGEN_PARSED_BY_DOXYGEN +{ + public: + using internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real>::operator*; + + class InnerIterator; + + typedef typename internal::traits::StorageKind StorageKind; + + /** \brief The type of indices + * \details To change this, \c \#define the preprocessor symbol \c EIGEN_DEFAULT_DENSE_INDEX_TYPE. + * \sa \ref TopicPreprocessorDirectives. + */ + typedef typename internal::traits::Index Index; + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseCoeffsBase Base; + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::rowIndexByOuterInner; + using Base::colIndexByOuterInner; + using Base::coeff; + using Base::coeffByOuterInner; + using Base::packet; + using Base::packetByOuterInner; + using Base::writePacket; + using Base::writePacketByOuterInner; + using Base::coeffRef; + using Base::coeffRefByOuterInner; + using Base::copyCoeff; + using Base::copyCoeffByOuterInner; + using Base::copyPacket; + using Base::copyPacketByOuterInner; + using Base::operator(); + using Base::operator[]; + using Base::x; + using Base::y; + using Base::z; + using Base::w; + using Base::stride; + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + typedef typename Base::CoeffReturnType CoeffReturnType; + + enum { + + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + /**< The number of rows at compile-time. This is just a copy of the value provided + * by the \a Derived type. If a value is not known at compile-time, + * it is set to the \a Dynamic constant. + * \sa MatrixBase::rows(), MatrixBase::cols(), ColsAtCompileTime, SizeAtCompileTime */ + + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + /**< The number of columns at compile-time. This is just a copy of the value provided + * by the \a Derived type. If a value is not known at compile-time, + * it is set to the \a Dynamic constant. + * \sa MatrixBase::rows(), MatrixBase::cols(), RowsAtCompileTime, SizeAtCompileTime */ + + + SizeAtCompileTime = (internal::size_at_compile_time::RowsAtCompileTime, + internal::traits::ColsAtCompileTime>::ret), + /**< This is equal to the number of coefficients, i.e. the number of + * rows times the number of columns, or to \a Dynamic if this is not + * known at compile-time. \sa RowsAtCompileTime, ColsAtCompileTime */ + + MaxRowsAtCompileTime = internal::traits::MaxRowsAtCompileTime, + /**< This value is equal to the maximum possible number of rows that this expression + * might have. If this expression might have an arbitrarily high number of rows, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa RowsAtCompileTime, MaxColsAtCompileTime, MaxSizeAtCompileTime + */ + + MaxColsAtCompileTime = internal::traits::MaxColsAtCompileTime, + /**< This value is equal to the maximum possible number of columns that this expression + * might have. If this expression might have an arbitrarily high number of columns, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa ColsAtCompileTime, MaxRowsAtCompileTime, MaxSizeAtCompileTime + */ + + MaxSizeAtCompileTime = (internal::size_at_compile_time::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime>::ret), + /**< This value is equal to the maximum possible number of coefficients that this expression + * might have. If this expression might have an arbitrarily high number of coefficients, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa SizeAtCompileTime, MaxRowsAtCompileTime, MaxColsAtCompileTime + */ + + IsVectorAtCompileTime = internal::traits::MaxRowsAtCompileTime == 1 + || internal::traits::MaxColsAtCompileTime == 1, + /**< This is set to true if either the number of rows or the number of + * columns is known at compile-time to be equal to 1. Indeed, in that case, + * we are dealing with a column-vector (if there is only one column) or with + * a row-vector (if there is only one row). */ + + Flags = internal::traits::Flags, + /**< This stores expression \ref flags flags which may or may not be inherited by new expressions + * constructed from this one. See the \ref flags "list of flags". + */ + + IsRowMajor = int(Flags) & RowMajorBit, /**< True if this expression has row-major storage order. */ + + InnerSizeAtCompileTime = int(IsVectorAtCompileTime) ? int(SizeAtCompileTime) + : int(IsRowMajor) ? int(ColsAtCompileTime) : int(RowsAtCompileTime), + + CoeffReadCost = internal::traits::CoeffReadCost, + /**< This is a rough measure of how expensive it is to read one coefficient from + * this expression. + */ + + InnerStrideAtCompileTime = internal::inner_stride_at_compile_time::ret, + OuterStrideAtCompileTime = internal::outer_stride_at_compile_time::ret + }; + + enum { ThisConstantIsPrivateInPlainObjectBase }; + + /** \returns the number of nonzero coefficients which is in practice the number + * of stored coefficients. */ + inline Index nonZeros() const { return size(); } + /** \returns true if either the number of rows or the number of columns is equal to 1. + * In other words, this function returns + * \code rows()==1 || cols()==1 \endcode + * \sa rows(), cols(), IsVectorAtCompileTime. */ + + /** \returns the outer size. + * + * \note For a vector, this returns just 1. For a matrix (non-vector), this is the major dimension + * with respect to the \ref TopicStorageOrders "storage order", i.e., the number of columns for a + * column-major matrix, and the number of rows for a row-major matrix. */ + Index outerSize() const + { + return IsVectorAtCompileTime ? 1 + : int(IsRowMajor) ? this->rows() : this->cols(); + } + + /** \returns the inner size. + * + * \note For a vector, this is just the size. For a matrix (non-vector), this is the minor dimension + * with respect to the \ref TopicStorageOrders "storage order", i.e., the number of rows for a + * column-major matrix, and the number of columns for a row-major matrix. */ + Index innerSize() const + { + return IsVectorAtCompileTime ? this->size() + : int(IsRowMajor) ? this->cols() : this->rows(); + } + + /** Only plain matrices/arrays, not expressions, may be resized; therefore the only useful resize methods are + * Matrix::resize() and Array::resize(). The present method only asserts that the new size equals the old size, and does + * nothing else. + */ + void resize(Index size) + { + EIGEN_ONLY_USED_FOR_DEBUG(size); + eigen_assert(size == this->size() + && "DenseBase::resize() does not actually allow to resize."); + } + /** Only plain matrices/arrays, not expressions, may be resized; therefore the only useful resize methods are + * Matrix::resize() and Array::resize(). The present method only asserts that the new size equals the old size, and does + * nothing else. + */ + void resize(Index rows, Index cols) + { + EIGEN_ONLY_USED_FOR_DEBUG(rows); + EIGEN_ONLY_USED_FOR_DEBUG(cols); + eigen_assert(rows == this->rows() && cols == this->cols() + && "DenseBase::resize() does not actually allow to resize."); + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; + /** \internal Represents a vector with linearly spaced coefficients that allows sequential access only. */ + typedef CwiseNullaryOp,Derived> SequentialLinSpacedReturnType; + /** \internal Represents a vector with linearly spaced coefficients that allows random access. */ + typedef CwiseNullaryOp,Derived> RandomAccessLinSpacedReturnType; + /** \internal the return type of MatrixBase::eigenvalues() */ + typedef Matrix::Scalar>::Real, internal::traits::ColsAtCompileTime, 1> EigenvaluesReturnType; + +#endif // not EIGEN_PARSED_BY_DOXYGEN + + /** Copies \a other into *this. \returns a reference to *this. */ + template + Derived& operator=(const DenseBase& other); + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const DenseBase& other); + + template + Derived& operator=(const EigenBase &other); + + template + Derived& operator+=(const EigenBase &other); + + template + Derived& operator-=(const EigenBase &other); + + template + Derived& operator=(const ReturnByValue& func); + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** Copies \a other into *this without evaluating other. \returns a reference to *this. */ + template + Derived& lazyAssign(const DenseBase& other); +#endif // not EIGEN_PARSED_BY_DOXYGEN + + CommaInitializer operator<< (const Scalar& s); + + template + const Flagged flagged() const; + + template + CommaInitializer operator<< (const DenseBase& other); + + Eigen::Transpose transpose(); + typedef const Transpose ConstTransposeReturnType; + ConstTransposeReturnType transpose() const; + void transposeInPlace(); +#ifndef EIGEN_NO_DEBUG + protected: + template + void checkTransposeAliasing(const OtherDerived& other) const; + public: +#endif + + typedef VectorBlock SegmentReturnType; + typedef const VectorBlock ConstSegmentReturnType; + template struct FixedSegmentReturnType { typedef VectorBlock Type; }; + template struct ConstFixedSegmentReturnType { typedef const VectorBlock Type; }; + + // Note: The "DenseBase::" prefixes are added to help MSVC9 to match these declarations with the later implementations. + SegmentReturnType segment(Index start, Index size); + typename DenseBase::ConstSegmentReturnType segment(Index start, Index size) const; + + SegmentReturnType head(Index size); + typename DenseBase::ConstSegmentReturnType head(Index size) const; + + SegmentReturnType tail(Index size); + typename DenseBase::ConstSegmentReturnType tail(Index size) const; + + template typename FixedSegmentReturnType::Type head(); + template typename ConstFixedSegmentReturnType::Type head() const; + + template typename FixedSegmentReturnType::Type tail(); + template typename ConstFixedSegmentReturnType::Type tail() const; + + template typename FixedSegmentReturnType::Type segment(Index start); + template typename ConstFixedSegmentReturnType::Type segment(Index start) const; + + static const ConstantReturnType + Constant(Index rows, Index cols, const Scalar& value); + static const ConstantReturnType + Constant(Index size, const Scalar& value); + static const ConstantReturnType + Constant(const Scalar& value); + + static const SequentialLinSpacedReturnType + LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high); + static const RandomAccessLinSpacedReturnType + LinSpaced(Index size, const Scalar& low, const Scalar& high); + static const SequentialLinSpacedReturnType + LinSpaced(Sequential_t, const Scalar& low, const Scalar& high); + static const RandomAccessLinSpacedReturnType + LinSpaced(const Scalar& low, const Scalar& high); + + template + static const CwiseNullaryOp + NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func); + template + static const CwiseNullaryOp + NullaryExpr(Index size, const CustomNullaryOp& func); + template + static const CwiseNullaryOp + NullaryExpr(const CustomNullaryOp& func); + + static const ConstantReturnType Zero(Index rows, Index cols); + static const ConstantReturnType Zero(Index size); + static const ConstantReturnType Zero(); + static const ConstantReturnType Ones(Index rows, Index cols); + static const ConstantReturnType Ones(Index size); + static const ConstantReturnType Ones(); + + void fill(const Scalar& value); + Derived& setConstant(const Scalar& value); + Derived& setLinSpaced(Index size, const Scalar& low, const Scalar& high); + Derived& setLinSpaced(const Scalar& low, const Scalar& high); + Derived& setZero(); + Derived& setOnes(); + Derived& setRandom(); + + template + bool isApprox(const DenseBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + bool isMuchSmallerThan(const RealScalar& other, + RealScalar prec = NumTraits::dummy_precision()) const; + template + bool isMuchSmallerThan(const DenseBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + + bool isApproxToConstant(const Scalar& value, RealScalar prec = NumTraits::dummy_precision()) const; + bool isConstant(const Scalar& value, RealScalar prec = NumTraits::dummy_precision()) const; + bool isZero(RealScalar prec = NumTraits::dummy_precision()) const; + bool isOnes(RealScalar prec = NumTraits::dummy_precision()) const; + + inline Derived& operator*=(const Scalar& other); + inline Derived& operator/=(const Scalar& other); + + typedef typename internal::add_const_on_value_type::type>::type EvalReturnType; + /** \returns the matrix or vector obtained by evaluating this expression. + * + * Notice that in the case of a plain matrix or vector (not an expression) this function just returns + * a const reference, in order to avoid a useless copy. + */ + EIGEN_STRONG_INLINE EvalReturnType eval() const + { + // Even though MSVC does not honor strong inlining when the return type + // is a dynamic matrix, we desperately need strong inlining for fixed + // size types on MSVC. + return typename internal::eval::type(derived()); + } + + /** swaps *this with the expression \a other. + * + */ + template + void swap(const DenseBase& other, + int = OtherDerived::ThisConstantIsPrivateInPlainObjectBase) + { + SwapWrapper(derived()).lazyAssign(other.derived()); + } + + /** swaps *this with the matrix or array \a other. + * + */ + template + void swap(PlainObjectBase& other) + { + SwapWrapper(derived()).lazyAssign(other.derived()); + } + + + inline const NestByValue nestByValue() const; + inline const ForceAlignedAccess forceAlignedAccess() const; + inline ForceAlignedAccess forceAlignedAccess(); + template inline const typename internal::conditional,Derived&>::type forceAlignedAccessIf() const; + template inline typename internal::conditional,Derived&>::type forceAlignedAccessIf(); + + Scalar sum() const; + Scalar mean() const; + Scalar trace() const; + + Scalar prod() const; + + typename internal::traits::Scalar minCoeff() const; + typename internal::traits::Scalar maxCoeff() const; + + template + typename internal::traits::Scalar minCoeff(IndexType* row, IndexType* col) const; + template + typename internal::traits::Scalar maxCoeff(IndexType* row, IndexType* col) const; + template + typename internal::traits::Scalar minCoeff(IndexType* index) const; + template + typename internal::traits::Scalar maxCoeff(IndexType* index) const; + + template + typename internal::result_of::Scalar)>::type + redux(const BinaryOp& func) const; + + template + void visit(Visitor& func) const; + + inline const WithFormat format(const IOFormat& fmt) const; + + /** \returns the unique coefficient of a 1x1 expression */ + CoeffReturnType value() const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeff(0,0); + } + +/////////// Array module /////////// + + bool all(void) const; + bool any(void) const; + Index count() const; + + typedef VectorwiseOp RowwiseReturnType; + typedef const VectorwiseOp ConstRowwiseReturnType; + typedef VectorwiseOp ColwiseReturnType; + typedef const VectorwiseOp ConstColwiseReturnType; + + ConstRowwiseReturnType rowwise() const; + RowwiseReturnType rowwise(); + ConstColwiseReturnType colwise() const; + ColwiseReturnType colwise(); + + static const CwiseNullaryOp,Derived> Random(Index rows, Index cols); + static const CwiseNullaryOp,Derived> Random(Index size); + static const CwiseNullaryOp,Derived> Random(); + + template + const Select + select(const DenseBase& thenMatrix, + const DenseBase& elseMatrix) const; + + template + inline const Select + select(const DenseBase& thenMatrix, typename ThenDerived::Scalar elseScalar) const; + + template + inline const Select + select(typename ElseDerived::Scalar thenScalar, const DenseBase& elseMatrix) const; + + template RealScalar lpNorm() const; + + template + const Replicate replicate() const; + const Replicate replicate(Index rowFacor,Index colFactor) const; + + typedef Reverse ReverseReturnType; + typedef const Reverse ConstReverseReturnType; + ReverseReturnType reverse(); + ConstReverseReturnType reverse() const; + void reverseInPlace(); + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::DenseBase +# include "../plugins/BlockMethods.h" +# ifdef EIGEN_DENSEBASE_PLUGIN +# include EIGEN_DENSEBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + +#ifdef EIGEN2_SUPPORT + + Block corner(CornerType type, Index cRows, Index cCols); + const Block corner(CornerType type, Index cRows, Index cCols) const; + template + Block corner(CornerType type); + template + const Block corner(CornerType type) const; + +#endif // EIGEN2_SUPPORT + + + // disable the use of evalTo for dense objects with a nice compilation error + template inline void evalTo(Dest& ) const + { + EIGEN_STATIC_ASSERT((internal::is_same::value),THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS); + } + + protected: + /** Default constructor. Do nothing. */ + DenseBase() + { + /* Just checks for self-consistency of the flags. + * Only do it when debugging Eigen, as this borders on paranoiac and could slow compilation down + */ +#ifdef EIGEN_INTERNAL_DEBUGGING + EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, int(IsRowMajor)) + && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, int(!IsRowMajor))), + INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION) +#endif + } + + private: + explicit DenseBase(int); + DenseBase(int,int); + template explicit DenseBase(const DenseBase&); +}; + +} // end namespace Eigen + +#endif // EIGEN_DENSEBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/DenseCoeffsBase.h b/Biopool/Sources/Eigen/src/Core/DenseCoeffsBase.h new file mode 100644 index 0000000..e1aa1a5 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/DenseCoeffsBase.h @@ -0,0 +1,769 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSECOEFFSBASE_H +#define EIGEN_DENSECOEFFSBASE_H + +namespace Eigen { + +namespace internal { +template struct add_const_on_value_type_if_arithmetic +{ + typedef typename conditional::value, T, typename add_const_on_value_type::type>::type type; +}; +} + +/** \brief Base class providing read-only coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam #ReadOnlyAccessors Constant indicating read-only access + * + * This class defines the \c operator() \c const function and friends, which can be used to read specific + * entries of a matrix or array. + * + * \sa DenseCoeffsBase, DenseCoeffsBase, + * \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public EigenBase +{ + public: + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + + // Explanation for this CoeffReturnType typedef. + // - This is the return type of the coeff() method. + // - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references + // to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value). + // - The is_artihmetic check is required since "const int", "const double", etc. will cause warnings on some systems + // while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is + // not possible, since the underlying expressions might not offer a valid address the reference could be referring to. + typedef typename internal::conditional::Flags&LvalueBit), + const Scalar&, + typename internal::conditional::value, Scalar, const Scalar>::type + >::type CoeffReturnType; + + typedef typename internal::add_const_on_value_type_if_arithmetic< + typename internal::packet_traits::type + >::type PacketReturnType; + + typedef EigenBase Base; + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner) const + { + return int(Derived::RowsAtCompileTime) == 1 ? 0 + : int(Derived::ColsAtCompileTime) == 1 ? inner + : int(Derived::Flags)&RowMajorBit ? outer + : inner; + } + + EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner) const + { + return int(Derived::ColsAtCompileTime) == 1 ? 0 + : int(Derived::RowsAtCompileTime) == 1 ? inner + : int(Derived::Flags)&RowMajorBit ? inner + : outer; + } + + /** Short version: don't use this function, use + * \link operator()(Index,Index) const \endlink instead. + * + * Long version: this function is similar to + * \link operator()(Index,Index) const \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator()(Index,Index) const \endlink. + * + * \sa operator()(Index,Index) const, coeffRef(Index,Index), coeff(Index) const + */ + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeff(row, col); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeffByOuterInner(Index outer, Index inner) const + { + return coeff(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \returns the coefficient at given the given row and column. + * + * \sa operator()(Index,Index), operator[](Index) + */ + EIGEN_STRONG_INLINE CoeffReturnType operator()(Index row, Index col) const + { + eigen_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeff(row, col); + } + + /** Short version: don't use this function, use + * \link operator[](Index) const \endlink instead. + * + * Long version: this function is similar to + * \link operator[](Index) const \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameter \a index is in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator[](Index) const \endlink. + * + * \sa operator[](Index) const, coeffRef(Index), coeff(Index,Index) const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + coeff(Index index) const + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + + /** \returns the coefficient at given index. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const, + * z() const, w() const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + operator[](Index index) const + { + #ifndef EIGEN2_SUPPORT + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) + #endif + eigen_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + /** \returns the coefficient at given index. + * + * This is synonymous to operator[](Index) const. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const, + * z() const, w() const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + operator()(Index index) const + { + eigen_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + /** equivalent to operator[](0). */ + + EIGEN_STRONG_INLINE CoeffReturnType + x() const { return (*this)[0]; } + + /** equivalent to operator[](1). */ + + EIGEN_STRONG_INLINE CoeffReturnType + y() const { return (*this)[1]; } + + /** equivalent to operator[](2). */ + + EIGEN_STRONG_INLINE CoeffReturnType + z() const { return (*this)[2]; } + + /** equivalent to operator[](3). */ + + EIGEN_STRONG_INLINE CoeffReturnType + w() const { return (*this)[3]; } + + /** \internal + * \returns the packet of coefficients starting at the given row and column. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit. + * + * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE PacketReturnType packet(Index row, Index col) const + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().template packet(row,col); + } + + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketReturnType packetByOuterInner(Index outer, Index inner) const + { + return packet(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \internal + * \returns the packet of coefficients starting at the given index. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit and the LinearAccessBit. + * + * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().template packet(index); + } + + protected: + // explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase. + // But some methods are only available in the DirectAccess case. + // So we add dummy methods here with these names, so that "using... " doesn't fail. + // It's not private so that the child class DenseBase can access them, and it's not public + // either since it's an implementation detail, so has to be protected. + void coeffRef(); + void coeffRefByOuterInner(); + void writePacket(); + void writePacketByOuterInner(); + void copyCoeff(); + void copyCoeffByOuterInner(); + void copyPacket(); + void copyPacketByOuterInner(); + void stride(); + void innerStride(); + void outerStride(); + void rowStride(); + void colStride(); +}; + +/** \brief Base class providing read/write coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam #WriteAccessors Constant indicating read/write access + * + * This class defines the non-const \c operator() function and friends, which can be used to write specific + * entries of a matrix or array. This class inherits DenseCoeffsBase which + * defines the const variant for reading specific entries. + * + * \sa DenseCoeffsBase, \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + using Base::coeff; + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + using Base::rowIndexByOuterInner; + using Base::colIndexByOuterInner; + using Base::operator[]; + using Base::operator(); + using Base::x; + using Base::y; + using Base::z; + using Base::w; + + /** Short version: don't use this function, use + * \link operator()(Index,Index) \endlink instead. + * + * Long version: this function is similar to + * \link operator()(Index,Index) \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator()(Index,Index) \endlink. + * + * \sa operator()(Index,Index), coeff(Index, Index) const, coeffRef(Index) + */ + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeffRef(row, col); + } + + EIGEN_STRONG_INLINE Scalar& + coeffRefByOuterInner(Index outer, Index inner) + { + return coeffRef(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \returns a reference to the coefficient at given the given row and column. + * + * \sa operator[](Index) + */ + + EIGEN_STRONG_INLINE Scalar& + operator()(Index row, Index col) + { + eigen_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeffRef(row, col); + } + + + /** Short version: don't use this function, use + * \link operator[](Index) \endlink instead. + * + * Long version: this function is similar to + * \link operator[](Index) \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator[](Index) \endlink. + * + * \sa operator[](Index), coeff(Index) const, coeffRef(Index,Index) + */ + + EIGEN_STRONG_INLINE Scalar& + coeffRef(Index index) + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** \returns a reference to the coefficient at given index. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w() + */ + + EIGEN_STRONG_INLINE Scalar& + operator[](Index index) + { + #ifndef EIGEN2_SUPPORT + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) + #endif + eigen_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** \returns a reference to the coefficient at given index. + * + * This is synonymous to operator[](Index). + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w() + */ + + EIGEN_STRONG_INLINE Scalar& + operator()(Index index) + { + eigen_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** equivalent to operator[](0). */ + + EIGEN_STRONG_INLINE Scalar& + x() { return (*this)[0]; } + + /** equivalent to operator[](1). */ + + EIGEN_STRONG_INLINE Scalar& + y() { return (*this)[1]; } + + /** equivalent to operator[](2). */ + + EIGEN_STRONG_INLINE Scalar& + z() { return (*this)[2]; } + + /** equivalent to operator[](3). */ + + EIGEN_STRONG_INLINE Scalar& + w() { return (*this)[3]; } + + /** \internal + * Stores the given packet of coefficients, at the given row and column of this expression. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit. + * + * The \a LoadMode parameter may have the value \a #Aligned or \a #Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE void writePacket + (Index row, Index col, const typename internal::packet_traits::type& x) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().template writePacket(row,col,x); + } + + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacketByOuterInner + (Index outer, Index inner, const typename internal::packet_traits::type& x) + { + writePacket(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner), + x); + } + + /** \internal + * Stores the given packet of coefficients, at the given index in this expression. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit and the LinearAccessBit. + * + * The \a LoadMode parameter may have the value \a Aligned or \a Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + template + EIGEN_STRONG_INLINE void writePacket + (Index index, const typename internal::packet_traits::type& x) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().template writePacket(index,x); + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + + /** \internal Copies the coefficient at position (row,col) of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyCoeff(Index row, Index col, const DenseBase& other) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().coeffRef(row, col) = other.derived().coeff(row, col); + } + + /** \internal Copies the coefficient at the given index of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyCoeff(Index index, const DenseBase& other) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().coeffRef(index) = other.derived().coeff(index); + } + + + template + EIGEN_STRONG_INLINE void copyCoeffByOuterInner(Index outer, Index inner, const DenseBase& other) + { + const Index row = rowIndexByOuterInner(outer,inner); + const Index col = colIndexByOuterInner(outer,inner); + // derived() is important here: copyCoeff() may be reimplemented in Derived! + derived().copyCoeff(row, col, other); + } + + /** \internal Copies the packet at position (row,col) of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyPacket(Index row, Index col, const DenseBase& other) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().template writePacket(row, col, + other.derived().template packet(row, col)); + } + + /** \internal Copies the packet at the given index of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyPacket(Index index, const DenseBase& other) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().template writePacket(index, + other.derived().template packet(index)); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void copyPacketByOuterInner(Index outer, Index inner, const DenseBase& other) + { + const Index row = rowIndexByOuterInner(outer,inner); + const Index col = colIndexByOuterInner(outer,inner); + // derived() is important here: copyCoeff() may be reimplemented in Derived! + derived().template copyPacket< OtherDerived, StoreMode, LoadMode>(row, col, other); + } +#endif + +}; + +/** \brief Base class providing direct read-only coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam #DirectAccessors Constant indicating direct access + * + * This class defines functions to work with strides which can be used to access entries directly. This class + * inherits DenseCoeffsBase which defines functions to access entries read-only using + * \c operator() . + * + * \sa \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + /** \returns the pointer increment between two consecutive elements within a slice in the inner direction. + * + * \sa outerStride(), rowStride(), colStride() + */ + inline Index innerStride() const + { + return derived().innerStride(); + } + + /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns + * in a column-major matrix). + * + * \sa innerStride(), rowStride(), colStride() + */ + inline Index outerStride() const + { + return derived().outerStride(); + } + + // FIXME shall we remove it ? + inline Index stride() const + { + return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); + } + + /** \returns the pointer increment between two consecutive rows. + * + * \sa innerStride(), outerStride(), colStride() + */ + inline Index rowStride() const + { + return Derived::IsRowMajor ? outerStride() : innerStride(); + } + + /** \returns the pointer increment between two consecutive columns. + * + * \sa innerStride(), outerStride(), rowStride() + */ + inline Index colStride() const + { + return Derived::IsRowMajor ? innerStride() : outerStride(); + } +}; + +/** \brief Base class providing direct read/write coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam #DirectWriteAccessors Constant indicating direct access + * + * This class defines functions to work with strides which can be used to access entries directly. This class + * inherits DenseCoeffsBase which defines functions to access entries read/write using + * \c operator(). + * + * \sa \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase + : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + /** \returns the pointer increment between two consecutive elements within a slice in the inner direction. + * + * \sa outerStride(), rowStride(), colStride() + */ + inline Index innerStride() const + { + return derived().innerStride(); + } + + /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns + * in a column-major matrix). + * + * \sa innerStride(), rowStride(), colStride() + */ + inline Index outerStride() const + { + return derived().outerStride(); + } + + // FIXME shall we remove it ? + inline Index stride() const + { + return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); + } + + /** \returns the pointer increment between two consecutive rows. + * + * \sa innerStride(), outerStride(), colStride() + */ + inline Index rowStride() const + { + return Derived::IsRowMajor ? outerStride() : innerStride(); + } + + /** \returns the pointer increment between two consecutive columns. + * + * \sa innerStride(), outerStride(), rowStride() + */ + inline Index colStride() const + { + return Derived::IsRowMajor ? innerStride() : outerStride(); + } +}; + +namespace internal { + +template +struct first_aligned_impl +{ + static inline typename Derived::Index run(const Derived&) + { return 0; } +}; + +template +struct first_aligned_impl +{ + static inline typename Derived::Index run(const Derived& m) + { + return internal::first_aligned(&m.const_cast_derived().coeffRef(0,0), m.size()); + } +}; + +/** \internal \returns the index of the first element of the array that is well aligned for vectorization. + * + * There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more + * documentation. + */ +template +static inline typename Derived::Index first_aligned(const Derived& m) +{ + return first_aligned_impl + + ::run(m); +} + +template::ret> +struct inner_stride_at_compile_time +{ + enum { ret = traits::InnerStrideAtCompileTime }; +}; + +template +struct inner_stride_at_compile_time +{ + enum { ret = 0 }; +}; + +template::ret> +struct outer_stride_at_compile_time +{ + enum { ret = traits::OuterStrideAtCompileTime }; +}; + +template +struct outer_stride_at_compile_time +{ + enum { ret = 0 }; +}; + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_DENSECOEFFSBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/DenseStorage.h b/Biopool/Sources/Eigen/src/Core/DenseStorage.h new file mode 100644 index 0000000..0ea05bc --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/DenseStorage.h @@ -0,0 +1,318 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2009 Benoit Jacob +// Copyright (C) 2010 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIXSTORAGE_H +#define EIGEN_MATRIXSTORAGE_H + +#ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN EIGEN_DENSE_STORAGE_CTOR_PLUGIN; +#else + #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN +#endif + +namespace Eigen { + +namespace internal { + +struct constructor_without_unaligned_array_assert {}; + +/** \internal + * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned: + * to 16 bytes boundary if the total size is a multiple of 16 bytes. + */ +template +struct plain_array +{ + T array[Size]; + plain_array() {} + plain_array(constructor_without_unaligned_array_assert) {} +}; + +#ifdef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) +#else + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \ + eigen_assert((reinterpret_cast(array) & sizemask) == 0 \ + && "this assertion is explained here: " \ + "http://eigen.tuxfamily.org/dox-devel/TopicUnalignedArrayAssert.html" \ + " **** READ THIS WEB PAGE !!! ****"); +#endif + +template +struct plain_array +{ + EIGEN_USER_ALIGN16 T array[Size]; + plain_array() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf) } + plain_array(constructor_without_unaligned_array_assert) {} +}; + +template +struct plain_array +{ + EIGEN_USER_ALIGN16 T array[1]; + plain_array() {} + plain_array(constructor_without_unaligned_array_assert) {} +}; + +} // end namespace internal + +/** \internal + * + * \class DenseStorage + * \ingroup Core_Module + * + * \brief Stores the data of a matrix + * + * This class stores the data of fixed-size, dynamic-size or mixed matrices + * in a way as compact as possible. + * + * \sa Matrix + */ +template class DenseStorage; + +// purely fixed-size matrix +template class DenseStorage +{ + internal::plain_array m_data; + public: + inline explicit DenseStorage() {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()) {} + inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); } + static inline DenseIndex rows(void) {return _Rows;} + static inline DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + inline void resize(DenseIndex,DenseIndex,DenseIndex) {} + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// null matrix +template class DenseStorage +{ + public: + inline explicit DenseStorage() {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) {} + inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + inline void swap(DenseStorage& ) {} + static inline DenseIndex rows(void) {return _Rows;} + static inline DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + inline void resize(DenseIndex,DenseIndex,DenseIndex) {} + inline const T *data() const { return 0; } + inline T *data() { return 0; } +}; + +// more specializations for null matrices; these are necessary to resolve ambiguities +template class DenseStorage +: public DenseStorage { }; + +template class DenseStorage +: public DenseStorage { }; + +template class DenseStorage +: public DenseStorage { }; + +// dynamic-size matrix with fixed-size storage +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_rows; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_rows(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {} + inline DenseStorage(DenseIndex, DenseIndex rows, DenseIndex cols) : m_rows(rows), m_cols(cols) {} + inline void swap(DenseStorage& other) + { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex, DenseIndex rows, DenseIndex cols) { m_rows = rows; m_cols = cols; } + inline void resize(DenseIndex, DenseIndex rows, DenseIndex cols) { m_rows = rows; m_cols = cols; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// dynamic-size matrix with fixed-size storage and fixed width +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_rows; + public: + inline explicit DenseStorage() : m_rows(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {} + inline DenseStorage(DenseIndex, DenseIndex rows, DenseIndex) : m_rows(rows) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return _Cols;} + inline void conservativeResize(DenseIndex, DenseIndex rows, DenseIndex) { m_rows = rows; } + inline void resize(DenseIndex, DenseIndex rows, DenseIndex) { m_rows = rows; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// dynamic-size matrix with fixed-size storage and fixed height +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {} + inline DenseStorage(DenseIndex, DenseIndex, DenseIndex cols) : m_cols(cols) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return _Rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex, DenseIndex, DenseIndex cols) { m_cols = cols; } + inline void resize(DenseIndex, DenseIndex, DenseIndex cols) { m_cols = cols; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// purely dynamic matrix. +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_data(0), m_rows(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(0), m_rows(0), m_cols(0) {} + inline DenseStorage(DenseIndex size, DenseIndex rows, DenseIndex cols) + : m_data(internal::conditional_aligned_new_auto(size)), m_rows(rows), m_cols(cols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); } + inline void swap(DenseStorage& other) + { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex size, DenseIndex rows, DenseIndex cols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*m_cols); + m_rows = rows; + m_cols = cols; + } + void resize(DenseIndex size, DenseIndex rows, DenseIndex cols) + { + if(size != m_rows*m_cols) + { + internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_rows = rows; + m_cols = cols; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +// matrix with dynamic width and fixed height (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_data(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {} + inline DenseStorage(DenseIndex size, DenseIndex, DenseIndex cols) : m_data(internal::conditional_aligned_new_auto(size)), m_cols(cols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); } + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + static inline DenseIndex rows(void) {return _Rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex size, DenseIndex, DenseIndex cols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, _Rows*m_cols); + m_cols = cols; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex, DenseIndex cols) + { + if(size != _Rows*m_cols) + { + internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_cols = cols; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +// matrix with dynamic height and fixed width (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + public: + inline explicit DenseStorage() : m_data(0), m_rows(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {} + inline DenseStorage(DenseIndex size, DenseIndex rows, DenseIndex) : m_data(internal::conditional_aligned_new_auto(size)), m_rows(rows) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); } + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + inline DenseIndex rows(void) const {return m_rows;} + static inline DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex size, DenseIndex rows, DenseIndex) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*_Cols); + m_rows = rows; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex rows, DenseIndex) + { + if(size != m_rows*_Cols) + { + internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_rows = rows; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +} // end namespace Eigen + +#endif // EIGEN_MATRIX_H diff --git a/Biopool/Sources/Eigen/src/Core/Diagonal.h b/Biopool/Sources/Eigen/src/Core/Diagonal.h new file mode 100644 index 0000000..77b765f --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Diagonal.h @@ -0,0 +1,252 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2009 Benoit Jacob +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONAL_H +#define EIGEN_DIAGONAL_H + +namespace Eigen { + +/** \class Diagonal + * \ingroup Core_Module + * + * \brief Expression of a diagonal/subdiagonal/superdiagonal in a matrix + * + * \param MatrixType the type of the object in which we are taking a sub/main/super diagonal + * \param DiagIndex the index of the sub/super diagonal. The default is 0 and it means the main diagonal. + * A positive value means a superdiagonal, a negative value means a subdiagonal. + * You can also use Dynamic so the index can be set at runtime. + * + * The matrix is not required to be square. + * + * This class represents an expression of the main diagonal, or any sub/super diagonal + * of a square matrix. It is the return type of MatrixBase::diagonal() and MatrixBase::diagonal(Index) and most of the + * time this is the only way it is used. + * + * \sa MatrixBase::diagonal(), MatrixBase::diagonal(Index) + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + typedef typename MatrixType::StorageKind StorageKind; + enum { + AbsDiagIndex = DiagIndex<0 ? -DiagIndex : DiagIndex, // only used if DiagIndex != Dynamic + // FIXME these computations are broken in the case where the matrix is rectangular and DiagIndex!=0 + RowsAtCompileTime = (int(DiagIndex) == Dynamic || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic + : (EIGEN_SIZE_MIN_PREFER_DYNAMIC(MatrixType::RowsAtCompileTime, + MatrixType::ColsAtCompileTime) - AbsDiagIndex), + ColsAtCompileTime = 1, + MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic + : DiagIndex == Dynamic ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime, + MatrixType::MaxColsAtCompileTime) + : (EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime) - AbsDiagIndex), + MaxColsAtCompileTime = 1, + MaskLvalueBit = is_lvalue::value ? LvalueBit : 0, + Flags = (unsigned int)_MatrixTypeNested::Flags & (HereditaryBits | LinearAccessBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit, + CoeffReadCost = _MatrixTypeNested::CoeffReadCost, + MatrixTypeOuterStride = outer_stride_at_compile_time::ret, + InnerStrideAtCompileTime = MatrixTypeOuterStride == Dynamic ? Dynamic : MatrixTypeOuterStride+1, + OuterStrideAtCompileTime = 0 + }; +}; +} + +template class Diagonal + : public internal::dense_xpr_base< Diagonal >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal) + + inline Diagonal(MatrixType& matrix, Index index = DiagIndex) : m_matrix(matrix), m_index(index) {} + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal) + + inline Index rows() const + { return m_index.value()<0 ? (std::min)(m_matrix.cols(),m_matrix.rows()+m_index.value()) : (std::min)(m_matrix.rows(),m_matrix.cols()-m_index.value()); } + + inline Index cols() const { return 1; } + + inline Index innerStride() const + { + return m_matrix.outerStride() + 1; + } + + inline Index outerStride() const + { + return 0; + } + + typedef typename internal::conditional< + internal::is_lvalue::value, + Scalar, + const Scalar + >::type ScalarWithConstIfNotLvalue; + + inline ScalarWithConstIfNotLvalue* data() { return &(m_matrix.const_cast_derived().coeffRef(rowOffset(), colOffset())); } + inline const Scalar* data() const { return &(m_matrix.const_cast_derived().coeffRef(rowOffset(), colOffset())); } + + inline Scalar& coeffRef(Index row, Index) + { + EIGEN_STATIC_ASSERT_LVALUE(MatrixType) + return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset()); + } + + inline const Scalar& coeffRef(Index row, Index) const + { + return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset()); + } + + inline CoeffReturnType coeff(Index row, Index) const + { + return m_matrix.coeff(row+rowOffset(), row+colOffset()); + } + + inline Scalar& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_LVALUE(MatrixType) + return m_matrix.const_cast_derived().coeffRef(index+rowOffset(), index+colOffset()); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_matrix.const_cast_derived().coeffRef(index+rowOffset(), index+colOffset()); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(index+rowOffset(), index+colOffset()); + } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_matrix; + } + + int index() const + { + return m_index.value(); + } + + protected: + typename MatrixType::Nested m_matrix; + const internal::variable_if_dynamic m_index; + + private: + // some compilers may fail to optimize std::max etc in case of compile-time constants... + EIGEN_STRONG_INLINE Index absDiagIndex() const { return m_index.value()>0 ? m_index.value() : -m_index.value(); } + EIGEN_STRONG_INLINE Index rowOffset() const { return m_index.value()>0 ? 0 : -m_index.value(); } + EIGEN_STRONG_INLINE Index colOffset() const { return m_index.value()>0 ? m_index.value() : 0; } + // triger a compile time error is someone try to call packet + template typename MatrixType::PacketReturnType packet(Index) const; + template typename MatrixType::PacketReturnType packet(Index,Index) const; +}; + +/** \returns an expression of the main diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * Example: \include MatrixBase_diagonal.cpp + * Output: \verbinclude MatrixBase_diagonal.out + * + * \sa class Diagonal */ +template +inline typename MatrixBase::DiagonalReturnType +MatrixBase::diagonal() +{ + return derived(); +} + +/** This is the const version of diagonal(). */ +template +inline const typename MatrixBase::ConstDiagonalReturnType +MatrixBase::diagonal() const +{ + return ConstDiagonalReturnType(derived()); +} + +/** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0 + * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal. + * + * Example: \include MatrixBase_diagonal_int.cpp + * Output: \verbinclude MatrixBase_diagonal_int.out + * + * \sa MatrixBase::diagonal(), class Diagonal */ +template +inline typename MatrixBase::template DiagonalIndexReturnType::Type +MatrixBase::diagonal(Index index) +{ + return typename DiagonalIndexReturnType::Type(derived(), index); +} + +/** This is the const version of diagonal(Index). */ +template +inline typename MatrixBase::template ConstDiagonalIndexReturnType::Type +MatrixBase::diagonal(Index index) const +{ + return typename ConstDiagonalIndexReturnType::Type(derived(), index); +} + +/** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0 + * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal. + * + * Example: \include MatrixBase_diagonal_template_int.cpp + * Output: \verbinclude MatrixBase_diagonal_template_int.out + * + * \sa MatrixBase::diagonal(), class Diagonal */ +template +template +inline typename MatrixBase::template DiagonalIndexReturnType::Type +MatrixBase::diagonal() +{ + return derived(); +} + +/** This is the const version of diagonal(). */ +template +template +inline typename MatrixBase::template ConstDiagonalIndexReturnType::Type +MatrixBase::diagonal() const +{ + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_DIAGONAL_H diff --git a/Biopool/Sources/Eigen/src/Core/DiagonalMatrix.h b/Biopool/Sources/Eigen/src/Core/DiagonalMatrix.h new file mode 100644 index 0000000..844f986 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/DiagonalMatrix.h @@ -0,0 +1,310 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2007-2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONALMATRIX_H +#define EIGEN_DIAGONALMATRIX_H + +namespace Eigen { + +#ifndef EIGEN_PARSED_BY_DOXYGEN +template +class DiagonalBase : public EigenBase +{ + public: + typedef typename internal::traits::DiagonalVectorType DiagonalVectorType; + typedef typename DiagonalVectorType::Scalar Scalar; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + + enum { + RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime, + MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime, + IsVectorAtCompileTime = 0, + Flags = 0 + }; + + typedef Matrix DenseMatrixType; + typedef DenseMatrixType DenseType; + typedef DiagonalMatrix PlainObject; + + inline const Derived& derived() const { return *static_cast(this); } + inline Derived& derived() { return *static_cast(this); } + + DenseMatrixType toDenseMatrix() const { return derived(); } + template + void evalTo(MatrixBase &other) const; + template + void addTo(MatrixBase &other) const + { other.diagonal() += diagonal(); } + template + void subTo(MatrixBase &other) const + { other.diagonal() -= diagonal(); } + + inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); } + inline DiagonalVectorType& diagonal() { return derived().diagonal(); } + + inline Index rows() const { return diagonal().size(); } + inline Index cols() const { return diagonal().size(); } + + template + const DiagonalProduct + operator*(const MatrixBase &matrix) const; + + inline const DiagonalWrapper, const DiagonalVectorType> > + inverse() const + { + return diagonal().cwiseInverse(); + } + + #ifdef EIGEN2_SUPPORT + template + bool isApprox(const DiagonalBase& other, typename NumTraits::Real precision = NumTraits::dummy_precision()) const + { + return diagonal().isApprox(other.diagonal(), precision); + } + template + bool isApprox(const MatrixBase& other, typename NumTraits::Real precision = NumTraits::dummy_precision()) const + { + return toDenseMatrix().isApprox(other, precision); + } + #endif +}; + +template +template +void DiagonalBase::evalTo(MatrixBase &other) const +{ + other.setZero(); + other.diagonal() = diagonal(); +} +#endif + +/** \class DiagonalMatrix + * \ingroup Core_Module + * + * \brief Represents a diagonal matrix with its storage + * + * \param _Scalar the type of coefficients + * \param SizeAtCompileTime the dimension of the matrix, or Dynamic + * \param MaxSizeAtCompileTime the dimension of the matrix, or Dynamic. This parameter is optional and defaults + * to SizeAtCompileTime. Most of the time, you do not need to specify it. + * + * \sa class DiagonalWrapper + */ + +namespace internal { +template +struct traits > + : traits > +{ + typedef Matrix<_Scalar,SizeAtCompileTime,1,0,MaxSizeAtCompileTime,1> DiagonalVectorType; + typedef Dense StorageKind; + typedef DenseIndex Index; + enum { + Flags = LvalueBit + }; +}; +} +template +class DiagonalMatrix + : public DiagonalBase > +{ + public: + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename internal::traits::DiagonalVectorType DiagonalVectorType; + typedef const DiagonalMatrix& Nested; + typedef _Scalar Scalar; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + #endif + + protected: + + DiagonalVectorType m_diagonal; + + public: + + /** const version of diagonal(). */ + inline const DiagonalVectorType& diagonal() const { return m_diagonal; } + /** \returns a reference to the stored vector of diagonal coefficients. */ + inline DiagonalVectorType& diagonal() { return m_diagonal; } + + /** Default constructor without initialization */ + inline DiagonalMatrix() {} + + /** Constructs a diagonal matrix with given dimension */ + inline DiagonalMatrix(Index dim) : m_diagonal(dim) {} + + /** 2D constructor. */ + inline DiagonalMatrix(const Scalar& x, const Scalar& y) : m_diagonal(x,y) {} + + /** 3D constructor. */ + inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x,y,z) {} + + /** Copy constructor. */ + template + inline DiagonalMatrix(const DiagonalBase& other) : m_diagonal(other.diagonal()) {} + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** copy constructor. prevent a default copy constructor from hiding the other templated constructor */ + inline DiagonalMatrix(const DiagonalMatrix& other) : m_diagonal(other.diagonal()) {} + #endif + + /** generic constructor from expression of the diagonal coefficients */ + template + explicit inline DiagonalMatrix(const MatrixBase& other) : m_diagonal(other) + {} + + /** Copy operator. */ + template + DiagonalMatrix& operator=(const DiagonalBase& other) + { + m_diagonal = other.diagonal(); + return *this; + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + DiagonalMatrix& operator=(const DiagonalMatrix& other) + { + m_diagonal = other.diagonal(); + return *this; + } + #endif + + /** Resizes to given size. */ + inline void resize(Index size) { m_diagonal.resize(size); } + /** Sets all coefficients to zero. */ + inline void setZero() { m_diagonal.setZero(); } + /** Resizes and sets all coefficients to zero. */ + inline void setZero(Index size) { m_diagonal.setZero(size); } + /** Sets this matrix to be the identity matrix of the current size. */ + inline void setIdentity() { m_diagonal.setOnes(); } + /** Sets this matrix to be the identity matrix of the given size. */ + inline void setIdentity(Index size) { m_diagonal.setOnes(size); } +}; + +/** \class DiagonalWrapper + * \ingroup Core_Module + * + * \brief Expression of a diagonal matrix + * + * \param _DiagonalVectorType the type of the vector of diagonal coefficients + * + * This class is an expression of a diagonal matrix, but not storing its own vector of diagonal coefficients, + * instead wrapping an existing vector expression. It is the return type of MatrixBase::asDiagonal() + * and most of the time this is the only way that it is used. + * + * \sa class DiagonalMatrix, class DiagonalBase, MatrixBase::asDiagonal() + */ + +namespace internal { +template +struct traits > +{ + typedef _DiagonalVectorType DiagonalVectorType; + typedef typename DiagonalVectorType::Scalar Scalar; + typedef typename DiagonalVectorType::Index Index; + typedef typename DiagonalVectorType::StorageKind StorageKind; + enum { + RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxRowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + Flags = traits::Flags & LvalueBit + }; +}; +} + +template +class DiagonalWrapper + : public DiagonalBase >, internal::no_assignment_operator +{ + public: + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef _DiagonalVectorType DiagonalVectorType; + typedef DiagonalWrapper Nested; + #endif + + /** Constructor from expression of diagonal coefficients to wrap. */ + inline DiagonalWrapper(DiagonalVectorType& diagonal) : m_diagonal(diagonal) {} + + /** \returns a const reference to the wrapped expression of diagonal coefficients. */ + const DiagonalVectorType& diagonal() const { return m_diagonal; } + + protected: + typename DiagonalVectorType::Nested m_diagonal; +}; + +/** \returns a pseudo-expression of a diagonal matrix with *this as vector of diagonal coefficients + * + * \only_for_vectors + * + * Example: \include MatrixBase_asDiagonal.cpp + * Output: \verbinclude MatrixBase_asDiagonal.out + * + * \sa class DiagonalWrapper, class DiagonalMatrix, diagonal(), isDiagonal() + **/ +template +inline const DiagonalWrapper +MatrixBase::asDiagonal() const +{ + return derived(); +} + +/** \returns true if *this is approximately equal to a diagonal matrix, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isDiagonal.cpp + * Output: \verbinclude MatrixBase_isDiagonal.out + * + * \sa asDiagonal() + */ +template +bool MatrixBase::isDiagonal(RealScalar prec) const +{ + if(cols() != rows()) return false; + RealScalar maxAbsOnDiagonal = static_cast(-1); + for(Index j = 0; j < cols(); ++j) + { + RealScalar absOnDiagonal = internal::abs(coeff(j,j)); + if(absOnDiagonal > maxAbsOnDiagonal) maxAbsOnDiagonal = absOnDiagonal; + } + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < j; ++i) + { + if(!internal::isMuchSmallerThan(coeff(i, j), maxAbsOnDiagonal, prec)) return false; + if(!internal::isMuchSmallerThan(coeff(j, i), maxAbsOnDiagonal, prec)) return false; + } + return true; +} + +} // end namespace Eigen + +#endif // EIGEN_DIAGONALMATRIX_H diff --git a/Biopool/Sources/Eigen/src/Core/DiagonalProduct.h b/Biopool/Sources/Eigen/src/Core/DiagonalProduct.h new file mode 100644 index 0000000..9f6a998 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/DiagonalProduct.h @@ -0,0 +1,138 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2007-2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONALPRODUCT_H +#define EIGEN_DIAGONALPRODUCT_H + +namespace Eigen { + +namespace internal { +template +struct traits > + : traits +{ + typedef typename scalar_product_traits::ReturnType Scalar; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + + _StorageOrder = MatrixType::Flags & RowMajorBit ? RowMajor : ColMajor, + _PacketOnDiag = !((int(_StorageOrder) == RowMajor && int(ProductOrder) == OnTheLeft) + ||(int(_StorageOrder) == ColMajor && int(ProductOrder) == OnTheRight)), + _SameTypes = is_same::value, + // FIXME currently we need same types, but in the future the next rule should be the one + //_Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && ((!_PacketOnDiag) || (_SameTypes && bool(int(DiagonalType::Flags)&PacketAccessBit))), + _Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && _SameTypes && ((!_PacketOnDiag) || (bool(int(DiagonalType::Flags)&PacketAccessBit))), + + Flags = (HereditaryBits & (unsigned int)(MatrixType::Flags)) | (_Vectorizable ? PacketAccessBit : 0), + CoeffReadCost = NumTraits::MulCost + MatrixType::CoeffReadCost + DiagonalType::DiagonalVectorType::CoeffReadCost + }; +}; +} + +template +class DiagonalProduct : internal::no_assignment_operator, + public MatrixBase > +{ + public: + + typedef MatrixBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(DiagonalProduct) + + inline DiagonalProduct(const MatrixType& matrix, const DiagonalType& diagonal) + : m_matrix(matrix), m_diagonal(diagonal) + { + eigen_assert(diagonal.diagonal().size() == (ProductOrder == OnTheLeft ? matrix.rows() : matrix.cols())); + } + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + const Scalar coeff(Index row, Index col) const + { + return m_diagonal.diagonal().coeff(ProductOrder == OnTheLeft ? row : col) * m_matrix.coeff(row, col); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + enum { + StorageOrder = Flags & RowMajorBit ? RowMajor : ColMajor + }; + const Index indexInDiagonalVector = ProductOrder == OnTheLeft ? row : col; + + return packet_impl(row,col,indexInDiagonalVector,typename internal::conditional< + ((int(StorageOrder) == RowMajor && int(ProductOrder) == OnTheLeft) + ||(int(StorageOrder) == ColMajor && int(ProductOrder) == OnTheRight)), internal::true_type, internal::false_type>::type()); + } + + protected: + template + EIGEN_STRONG_INLINE PacketScalar packet_impl(Index row, Index col, Index id, internal::true_type) const + { + return internal::pmul(m_matrix.template packet(row, col), + internal::pset1(m_diagonal.diagonal().coeff(id))); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet_impl(Index row, Index col, Index id, internal::false_type) const + { + enum { + InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime, + DiagonalVectorPacketLoadMode = (LoadMode == Aligned && ((InnerSize%16) == 0)) ? Aligned : Unaligned + }; + return internal::pmul(m_matrix.template packet(row, col), + m_diagonal.diagonal().template packet(id)); + } + + typename MatrixType::Nested m_matrix; + typename DiagonalType::Nested m_diagonal; +}; + +/** \returns the diagonal matrix product of \c *this by the diagonal matrix \a diagonal. + */ +template +template +inline const DiagonalProduct +MatrixBase::operator*(const DiagonalBase &diagonal) const +{ + return DiagonalProduct(derived(), diagonal.derived()); +} + +/** \returns the diagonal matrix product of \c *this by the matrix \a matrix. + */ +template +template +inline const DiagonalProduct +DiagonalBase::operator*(const MatrixBase &matrix) const +{ + return DiagonalProduct(matrix.derived(), derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_DIAGONALPRODUCT_H diff --git a/Biopool/Sources/Eigen/src/Core/Dot.h b/Biopool/Sources/Eigen/src/Core/Dot.h new file mode 100644 index 0000000..67dbbf8 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Dot.h @@ -0,0 +1,276 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008, 2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DOT_H +#define EIGEN_DOT_H + +namespace Eigen { + +namespace internal { + +// helper function for dot(). The problem is that if we put that in the body of dot(), then upon calling dot +// with mismatched types, the compiler emits errors about failing to instantiate cwiseProduct BEFORE +// looking at the static assertions. Thus this is a trick to get better compile errors. +template +struct dot_nocheck +{ + typedef typename scalar_product_traits::Scalar,typename traits::Scalar>::ReturnType ResScalar; + static inline ResScalar run(const MatrixBase& a, const MatrixBase& b) + { + return a.template binaryExpr::Scalar,typename traits::Scalar> >(b).sum(); + } +}; + +template +struct dot_nocheck +{ + typedef typename scalar_product_traits::Scalar,typename traits::Scalar>::ReturnType ResScalar; + static inline ResScalar run(const MatrixBase& a, const MatrixBase& b) + { + return a.transpose().template binaryExpr::Scalar,typename traits::Scalar> >(b).sum(); + } +}; + +} // end namespace internal + +/** \returns the dot product of *this with other. + * + * \only_for_vectors + * + * \note If the scalar type is complex numbers, then this function returns the hermitian + * (sesquilinear) dot product, conjugate-linear in the first variable and linear in the + * second variable. + * + * \sa squaredNorm(), norm() + */ +template +template +typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType +MatrixBase::dot(const MatrixBase& other) const +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived) + EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived) + typedef internal::scalar_conj_product_op func; + EIGEN_CHECK_BINARY_COMPATIBILIY(func,Scalar,typename OtherDerived::Scalar); + + eigen_assert(size() == other.size()); + + return internal::dot_nocheck::run(*this, other); +} + +#ifdef EIGEN2_SUPPORT +/** \returns the dot product of *this with other, with the Eigen2 convention that the dot product is linear in the first variable + * (conjugating the second variable). Of course this only makes a difference in the complex case. + * + * This method is only available in EIGEN2_SUPPORT mode. + * + * \only_for_vectors + * + * \sa dot() + */ +template +template +typename internal::traits::Scalar +MatrixBase::eigen2_dot(const MatrixBase& other) const +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived) + EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived) + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + eigen_assert(size() == other.size()); + + return internal::dot_nocheck::run(other,*this); +} +#endif + + +//---------- implementation of L2 norm and related functions ---------- + +/** \returns, for vectors, the squared \em l2 norm of \c *this, and for matrices the Frobenius norm. + * In both cases, it consists in the sum of the square of all the matrix entries. + * For vectors, this is also equals to the dot product of \c *this with itself. + * + * \sa dot(), norm() + */ +template +EIGEN_STRONG_INLINE typename NumTraits::Scalar>::Real MatrixBase::squaredNorm() const +{ + return internal::real((*this).cwiseAbs2().sum()); +} + +/** \returns, for vectors, the \em l2 norm of \c *this, and for matrices the Frobenius norm. + * In both cases, it consists in the square root of the sum of the square of all the matrix entries. + * For vectors, this is also equals to the square root of the dot product of \c *this with itself. + * + * \sa dot(), squaredNorm() + */ +template +inline typename NumTraits::Scalar>::Real MatrixBase::norm() const +{ + return internal::sqrt(squaredNorm()); +} + +/** \returns an expression of the quotient of *this by its own norm. + * + * \only_for_vectors + * + * \sa norm(), normalize() + */ +template +inline const typename MatrixBase::PlainObject +MatrixBase::normalized() const +{ + typedef typename internal::nested::type Nested; + typedef typename internal::remove_reference::type _Nested; + _Nested n(derived()); + return n / n.norm(); +} + +/** Normalizes the vector, i.e. divides it by its own norm. + * + * \only_for_vectors + * + * \sa norm(), normalized() + */ +template +inline void MatrixBase::normalize() +{ + *this /= norm(); +} + +//---------- implementation of other norms ---------- + +namespace internal { + +template +struct lpNorm_selector +{ + typedef typename NumTraits::Scalar>::Real RealScalar; + static inline RealScalar run(const MatrixBase& m) + { + return pow(m.cwiseAbs().array().pow(p).sum(), RealScalar(1)/p); + } +}; + +template +struct lpNorm_selector +{ + static inline typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.cwiseAbs().sum(); + } +}; + +template +struct lpNorm_selector +{ + static inline typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.norm(); + } +}; + +template +struct lpNorm_selector +{ + static inline typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.cwiseAbs().maxCoeff(); + } +}; + +} // end namespace internal + +/** \returns the \f$ \ell^p \f$ norm of *this, that is, returns the p-th root of the sum of the p-th powers of the absolute values + * of the coefficients of *this. If \a p is the special value \a Eigen::Infinity, this function returns the \f$ \ell^\infty \f$ + * norm, that is the maximum of the absolute values of the coefficients of *this. + * + * \sa norm() + */ +template +template +inline typename NumTraits::Scalar>::Real +MatrixBase::lpNorm() const +{ + return internal::lpNorm_selector::run(*this); +} + +//---------- implementation of isOrthogonal / isUnitary ---------- + +/** \returns true if *this is approximately orthogonal to \a other, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isOrthogonal.cpp + * Output: \verbinclude MatrixBase_isOrthogonal.out + */ +template +template +bool MatrixBase::isOrthogonal +(const MatrixBase& other, RealScalar prec) const +{ + typename internal::nested::type nested(derived()); + typename internal::nested::type otherNested(other.derived()); + return internal::abs2(nested.dot(otherNested)) <= prec * prec * nested.squaredNorm() * otherNested.squaredNorm(); +} + +/** \returns true if *this is approximately an unitary matrix, + * within the precision given by \a prec. In the case where the \a Scalar + * type is real numbers, a unitary matrix is an orthogonal matrix, whence the name. + * + * \note This can be used to check whether a family of vectors forms an orthonormal basis. + * Indeed, \c m.isUnitary() returns true if and only if the columns (equivalently, the rows) of m form an + * orthonormal basis. + * + * Example: \include MatrixBase_isUnitary.cpp + * Output: \verbinclude MatrixBase_isUnitary.out + */ +template +bool MatrixBase::isUnitary(RealScalar prec) const +{ + typename Derived::Nested nested(derived()); + for(Index i = 0; i < cols(); ++i) + { + if(!internal::isApprox(nested.col(i).squaredNorm(), static_cast(1), prec)) + return false; + for(Index j = 0; j < i; ++j) + if(!internal::isMuchSmallerThan(nested.col(i).dot(nested.col(j)), static_cast(1), prec)) + return false; + } + return true; +} + +} // end namespace Eigen + +#endif // EIGEN_DOT_H diff --git a/Biopool/Sources/Eigen/src/Core/EigenBase.h b/Biopool/Sources/Eigen/src/Core/EigenBase.h new file mode 100644 index 0000000..77d4c25 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/EigenBase.h @@ -0,0 +1,175 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_EIGENBASE_H +#define EIGEN_EIGENBASE_H + +namespace Eigen { + +/** Common base class for all classes T such that MatrixBase has an operator=(T) and a constructor MatrixBase(T). + * + * In other words, an EigenBase object is an object that can be copied into a MatrixBase. + * + * Besides MatrixBase-derived classes, this also includes special matrix classes such as diagonal matrices, etc. + * + * Notice that this class is trivial, it is only used to disambiguate overloaded functions. + * + * \sa \ref TopicClassHierarchy + */ +template struct EigenBase +{ +// typedef typename internal::plain_matrix_type::type PlainObject; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + + /** \returns a reference to the derived object */ + Derived& derived() { return *static_cast(this); } + /** \returns a const reference to the derived object */ + const Derived& derived() const { return *static_cast(this); } + + inline Derived& const_cast_derived() const + { return *static_cast(const_cast(this)); } + inline const Derived& const_derived() const + { return *static_cast(this); } + + /** \returns the number of rows. \sa cols(), RowsAtCompileTime */ + inline Index rows() const { return derived().rows(); } + /** \returns the number of columns. \sa rows(), ColsAtCompileTime*/ + inline Index cols() const { return derived().cols(); } + /** \returns the number of coefficients, which is rows()*cols(). + * \sa rows(), cols(), SizeAtCompileTime. */ + inline Index size() const { return rows() * cols(); } + + /** \internal Don't use it, but do the equivalent: \code dst = *this; \endcode */ + template inline void evalTo(Dest& dst) const + { derived().evalTo(dst); } + + /** \internal Don't use it, but do the equivalent: \code dst += *this; \endcode */ + template inline void addTo(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + typename Dest::PlainObject res(rows(),cols()); + evalTo(res); + dst += res; + } + + /** \internal Don't use it, but do the equivalent: \code dst -= *this; \endcode */ + template inline void subTo(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + typename Dest::PlainObject res(rows(),cols()); + evalTo(res); + dst -= res; + } + + /** \internal Don't use it, but do the equivalent: \code dst.applyOnTheRight(*this); \endcode */ + template inline void applyThisOnTheRight(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + dst = dst * this->derived(); + } + + /** \internal Don't use it, but do the equivalent: \code dst.applyOnTheLeft(*this); \endcode */ + template inline void applyThisOnTheLeft(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + dst = this->derived() * dst; + } + +}; + +/*************************************************************************** +* Implementation of matrix base methods +***************************************************************************/ + +/** \brief Copies the generic expression \a other into *this. + * + * \details The expression must provide a (templated) evalTo(Derived& dst) const + * function which does the actual job. In practice, this allows any user to write + * its own special matrix without having to modify MatrixBase + * + * \returns a reference to *this. + */ +template +template +Derived& DenseBase::operator=(const EigenBase &other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +template +template +Derived& DenseBase::operator+=(const EigenBase &other) +{ + other.derived().addTo(derived()); + return derived(); +} + +template +template +Derived& DenseBase::operator-=(const EigenBase &other) +{ + other.derived().subTo(derived()); + return derived(); +} + +/** replaces \c *this by \c *this * \a other. + * + * \returns a reference to \c *this + */ +template +template +inline Derived& +MatrixBase::operator*=(const EigenBase &other) +{ + other.derived().applyThisOnTheRight(derived()); + return derived(); +} + +/** replaces \c *this by \c *this * \a other. It is equivalent to MatrixBase::operator*=() */ +template +template +inline void MatrixBase::applyOnTheRight(const EigenBase &other) +{ + other.derived().applyThisOnTheRight(derived()); +} + +/** replaces \c *this by \c *this * \a other. */ +template +template +inline void MatrixBase::applyOnTheLeft(const EigenBase &other) +{ + other.derived().applyThisOnTheLeft(derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_EIGENBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/Flagged.h b/Biopool/Sources/Eigen/src/Core/Flagged.h new file mode 100644 index 0000000..47f411b --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Flagged.h @@ -0,0 +1,155 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FLAGGED_H +#define EIGEN_FLAGGED_H + +namespace Eigen { + +/** \class Flagged + * \ingroup Core_Module + * + * \brief Expression with modified flags + * + * \param ExpressionType the type of the object of which we are modifying the flags + * \param Added the flags added to the expression + * \param Removed the flags removed from the expression (has priority over Added). + * + * This class represents an expression whose flags have been modified. + * It is the return type of MatrixBase::flagged() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::flagged() + */ + +namespace internal { +template +struct traits > : traits +{ + enum { Flags = (ExpressionType::Flags | Added) & ~Removed }; +}; +} + +template class Flagged + : public MatrixBase > +{ + public: + + typedef MatrixBase Base; + + EIGEN_DENSE_PUBLIC_INTERFACE(Flagged) + typedef typename internal::conditional::ret, + ExpressionType, const ExpressionType&>::type ExpressionTypeNested; + typedef typename ExpressionType::InnerIterator InnerIterator; + + inline Flagged(const ExpressionType& matrix) : m_matrix(matrix) {} + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + inline Index outerStride() const { return m_matrix.outerStride(); } + inline Index innerStride() const { return m_matrix.innerStride(); } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_matrix.coeff(row, col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(index); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_matrix.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_matrix.const_cast_derived().coeffRef(index); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_matrix.const_cast_derived().coeffRef(row, col); + } + + inline Scalar& coeffRef(Index index) + { + return m_matrix.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_matrix.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_matrix.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(index, x); + } + + const ExpressionType& _expression() const { return m_matrix; } + + template + typename ExpressionType::PlainObject solveTriangular(const MatrixBase& other) const; + + template + void solveTriangularInPlace(const MatrixBase& other) const; + + protected: + ExpressionTypeNested m_matrix; +}; + +/** \returns an expression of *this with added and removed flags + * + * This is mostly for internal use. + * + * \sa class Flagged + */ +template +template +inline const Flagged +DenseBase::flagged() const +{ + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_FLAGGED_H diff --git a/Biopool/Sources/Eigen/src/Core/ForceAlignedAccess.h b/Biopool/Sources/Eigen/src/Core/ForceAlignedAccess.h new file mode 100644 index 0000000..238b7b7 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/ForceAlignedAccess.h @@ -0,0 +1,161 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FORCEALIGNEDACCESS_H +#define EIGEN_FORCEALIGNEDACCESS_H + +namespace Eigen { + +/** \class ForceAlignedAccess + * \ingroup Core_Module + * + * \brief Enforce aligned packet loads and stores regardless of what is requested + * + * \param ExpressionType the type of the object of which we are forcing aligned packet access + * + * This class is the return type of MatrixBase::forceAlignedAccess() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::forceAlignedAccess() + */ + +namespace internal { +template +struct traits > : public traits +{}; +} + +template class ForceAlignedAccess + : public internal::dense_xpr_base< ForceAlignedAccess >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ForceAlignedAccess) + + inline ForceAlignedAccess(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + operator const ExpressionType&() const { return m_expression; } + + protected: + const ExpressionType& m_expression; + + private: + ForceAlignedAccess& operator=(const ForceAlignedAccess&); +}; + +/** \returns an expression of *this with forced aligned access + * \sa forceAlignedAccessIf(),class ForceAlignedAccess + */ +template +inline const ForceAlignedAccess +MatrixBase::forceAlignedAccess() const +{ + return ForceAlignedAccess(derived()); +} + +/** \returns an expression of *this with forced aligned access + * \sa forceAlignedAccessIf(), class ForceAlignedAccess + */ +template +inline ForceAlignedAccess +MatrixBase::forceAlignedAccess() +{ + return ForceAlignedAccess(derived()); +} + +/** \returns an expression of *this with forced aligned access if \a Enable is true. + * \sa forceAlignedAccess(), class ForceAlignedAccess + */ +template +template +inline typename internal::add_const_on_value_type,Derived&>::type>::type +MatrixBase::forceAlignedAccessIf() const +{ + return derived(); +} + +/** \returns an expression of *this with forced aligned access if \a Enable is true. + * \sa forceAlignedAccess(), class ForceAlignedAccess + */ +template +template +inline typename internal::conditional,Derived&>::type +MatrixBase::forceAlignedAccessIf() +{ + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_FORCEALIGNEDACCESS_H diff --git a/Biopool/Sources/Eigen/src/Core/Functors.h b/Biopool/Sources/Eigen/src/Core/Functors.h new file mode 100644 index 0000000..f33f636 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Functors.h @@ -0,0 +1,1004 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FUNCTORS_H +#define EIGEN_FUNCTORS_H + +namespace Eigen { + +namespace internal { + +// associative functors: + +/** \internal + * \brief Template functor to compute the sum of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, MatrixBase::sum() + */ +template struct scalar_sum_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a + b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::padd(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasAdd + }; +}; + +/** \internal + * \brief Template functor to compute the product of two scalars + * + * \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux() + */ +template struct scalar_product_op { + enum { + // TODO vectorize mixed product + Vectorizable = is_same::value && packet_traits::HasMul && packet_traits::HasMul + }; + typedef typename scalar_product_traits::ReturnType result_type; + EIGEN_EMPTY_STRUCT_CTOR(scalar_product_op) + EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a * b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmul(a,b); } + template + EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const + { return internal::predux_mul(a); } +}; +template +struct functor_traits > { + enum { + Cost = (NumTraits::MulCost + NumTraits::MulCost)/2, // rough estimate! + PacketAccess = scalar_product_op::Vectorizable + }; +}; + +/** \internal + * \brief Template functor to compute the conjugate product of two scalars + * + * This is a short cut for conj(x) * y which is needed for optimization purpose; in Eigen2 support mode, this becomes x * conj(y) + */ +template struct scalar_conj_product_op { + + enum { + Conj = NumTraits::IsComplex + }; + + typedef typename scalar_product_traits::ReturnType result_type; + + EIGEN_EMPTY_STRUCT_CTOR(scalar_conj_product_op) + EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const + { return conj_helper().pmul(a,b); } + + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return conj_helper().pmul(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::MulCost, + PacketAccess = internal::is_same::value && packet_traits::HasMul + }; +}; + +/** \internal + * \brief Template functor to compute the min of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff() + */ +template struct scalar_min_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_min_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { using std::min; return (min)(a, b); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmin(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux_min(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasMin + }; +}; + +/** \internal + * \brief Template functor to compute the max of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff() + */ +template struct scalar_max_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_max_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { using std::max; return (max)(a, b); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmax(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux_max(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasMax + }; +}; + +/** \internal + * \brief Template functor to compute the hypot of two scalars + * + * \sa MatrixBase::stableNorm(), class Redux + */ +template struct scalar_hypot_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_hypot_op) +// typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& _x, const Scalar& _y) const + { + using std::max; + using std::min; + Scalar p = (max)(_x, _y); + Scalar q = (min)(_x, _y); + Scalar qp = q/p; + return p * sqrt(Scalar(1) + qp*qp); + } +}; +template +struct functor_traits > { + enum { Cost = 5 * NumTraits::MulCost, PacketAccess=0 }; +}; + +/** \internal + * \brief Template functor to compute the pow of two scalars + */ +template struct scalar_binary_pow_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_binary_pow_op) + inline Scalar operator() (const Scalar& a, const OtherScalar& b) const { return internal::pow(a, b); } +}; +template +struct functor_traits > { + enum { Cost = 5 * NumTraits::MulCost, PacketAccess = false }; +}; + +// other binary functors: + +/** \internal + * \brief Template functor to compute the difference of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::operator- + */ +template struct scalar_difference_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_difference_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a - b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::psub(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasSub + }; +}; + +/** \internal + * \brief Template functor to compute the quotient of two scalars + * + * \sa class CwiseBinaryOp, Cwise::operator/() + */ +template struct scalar_quotient_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_quotient_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a / b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pdiv(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = 2 * NumTraits::MulCost, + PacketAccess = packet_traits::HasDiv + }; +}; + +/** \internal + * \brief Template functor to compute the and of two booleans + * + * \sa class CwiseBinaryOp, ArrayBase::operator&& + */ +struct scalar_boolean_and_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_and_op) + EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a && b; } +}; +template<> struct functor_traits { + enum { + Cost = NumTraits::AddCost, + PacketAccess = false + }; +}; + +/** \internal + * \brief Template functor to compute the or of two booleans + * + * \sa class CwiseBinaryOp, ArrayBase::operator|| + */ +struct scalar_boolean_or_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_or_op) + EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a || b; } +}; +template<> struct functor_traits { + enum { + Cost = NumTraits::AddCost, + PacketAccess = false + }; +}; + +// unary functors: + +/** \internal + * \brief Template functor to compute the opposite of a scalar + * + * \sa class CwiseUnaryOp, MatrixBase::operator- + */ +template struct scalar_opposite_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_opposite_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return -a; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pnegate(a); } +}; +template +struct functor_traits > +{ enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasNegate }; +}; + +/** \internal + * \brief Template functor to compute the absolute value of a scalar + * + * \sa class CwiseUnaryOp, Cwise::abs + */ +template struct scalar_abs_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_abs_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return internal::abs(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pabs(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasAbs + }; +}; + +/** \internal + * \brief Template functor to compute the squared absolute value of a scalar + * + * \sa class CwiseUnaryOp, Cwise::abs2 + */ +template struct scalar_abs2_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_abs2_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return internal::abs2(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a,a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasAbs2 }; }; + +/** \internal + * \brief Template functor to compute the conjugate of a complex value + * + * \sa class CwiseUnaryOp, MatrixBase::conjugate() + */ +template struct scalar_conjugate_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_conjugate_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return internal::conj(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { return internal::pconj(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = NumTraits::IsComplex ? NumTraits::AddCost : 0, + PacketAccess = packet_traits::HasConj + }; +}; + +/** \internal + * \brief Template functor to cast a scalar to another type + * + * \sa class CwiseUnaryOp, MatrixBase::cast() + */ +template +struct scalar_cast_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cast_op) + typedef NewType result_type; + EIGEN_STRONG_INLINE const NewType operator() (const Scalar& a) const { return cast(a); } +}; +template +struct functor_traits > +{ enum { Cost = is_same::value ? 0 : NumTraits::AddCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the real part of a complex + * + * \sa class CwiseUnaryOp, MatrixBase::real() + */ +template +struct scalar_real_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_real_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return internal::real(a); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the imaginary part of a complex + * + * \sa class CwiseUnaryOp, MatrixBase::imag() + */ +template +struct scalar_imag_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_imag_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return internal::imag(a); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the real part of a complex as a reference + * + * \sa class CwiseUnaryOp, MatrixBase::real() + */ +template +struct scalar_real_ref_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_real_ref_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return internal::real_ref(*const_cast(&a)); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the imaginary part of a complex as a reference + * + * \sa class CwiseUnaryOp, MatrixBase::imag() + */ +template +struct scalar_imag_ref_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_imag_ref_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return internal::imag_ref(*const_cast(&a)); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * + * \brief Template functor to compute the exponential of a scalar + * + * \sa class CwiseUnaryOp, Cwise::exp() + */ +template struct scalar_exp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_exp_op) + inline const Scalar operator() (const Scalar& a) const { return internal::exp(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pexp(a); } +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = packet_traits::HasExp }; }; + +/** \internal + * + * \brief Template functor to compute the logarithm of a scalar + * + * \sa class CwiseUnaryOp, Cwise::log() + */ +template struct scalar_log_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_log_op) + inline const Scalar operator() (const Scalar& a) const { return internal::log(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::plog(a); } +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = packet_traits::HasLog }; }; + +/** \internal + * \brief Template functor to multiply a scalar by a fixed other one + * + * \sa class CwiseUnaryOp, MatrixBase::operator*, MatrixBase::operator/ + */ +/* NOTE why doing the pset1() in packetOp *is* an optimization ? + * indeed it seems better to declare m_other as a Packet and do the pset1() once + * in the constructor. However, in practice: + * - GCC does not like m_other as a Packet and generate a load every time it needs it + * - on the other hand GCC is able to moves the pset1() away the loop :) + * - simpler code ;) + * (ICC and gcc 4.4 seems to perform well in both cases, the issue is visible with y = a*x + b*y) + */ +template +struct scalar_multiple_op { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_multiple_op(const scalar_multiple_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_multiple_op(const Scalar& other) : m_other(other) { } + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a, pset1(m_other)); } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +template +struct scalar_multiple2_op { + typedef typename scalar_product_traits::ReturnType result_type; + EIGEN_STRONG_INLINE scalar_multiple2_op(const scalar_multiple2_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_multiple2_op(const Scalar2& other) : m_other(other) { } + EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct scalar_quotient1_impl { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_quotient1_impl(const scalar_quotient1_impl& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_quotient1_impl(const Scalar& other) : m_other(static_cast(1) / other) {} + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a, pset1(m_other)); } + const Scalar m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +template +struct scalar_quotient1_impl { + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_quotient1_impl(const scalar_quotient1_impl& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_quotient1_impl(const Scalar& other) : m_other(other) {} + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = 2 * NumTraits::MulCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to divide a scalar by a fixed other one + * + * This functor is used to implement the quotient of a matrix by + * a scalar where the scalar type is not necessarily a floating point type. + * + * \sa class CwiseUnaryOp, MatrixBase::operator/ + */ +template +struct scalar_quotient1_op : scalar_quotient1_impl::IsInteger > { + EIGEN_STRONG_INLINE scalar_quotient1_op(const Scalar& other) + : scalar_quotient1_impl::IsInteger >(other) {} +}; +template +struct functor_traits > +: functor_traits::IsInteger> > +{}; + +// nullary functors + +template +struct scalar_constant_op { + typedef typename packet_traits::type Packet; + EIGEN_STRONG_INLINE scalar_constant_op(const scalar_constant_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_constant_op(const Scalar& other) : m_other(other) { } + template + EIGEN_STRONG_INLINE const Scalar operator() (Index, Index = 0) const { return m_other; } + template + EIGEN_STRONG_INLINE const Packet packetOp(Index, Index = 0) const { return internal::pset1(m_other); } + const Scalar m_other; +}; +template +struct functor_traits > +// FIXME replace this packet test by a safe one +{ enum { Cost = 1, PacketAccess = packet_traits::Vectorizable, IsRepeatable = true }; }; + +template struct scalar_identity_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_identity_op) + template + EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const { return row==col ? Scalar(1) : Scalar(0); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false, IsRepeatable = true }; }; + +template struct linspaced_op_impl; + +// linear access for packet ops: +// 1) initialization +// base = [low, ..., low] + ([step, ..., step] * [-size, ..., 0]) +// 2) each step +// base += [size*step, ..., size*step] +template +struct linspaced_op_impl +{ + typedef typename packet_traits::type Packet; + + linspaced_op_impl(Scalar low, Scalar step) : + m_low(low), m_step(step), + m_packetStep(pset1(packet_traits::size*step)), + m_base(padd(pset1(low),pmul(pset1(step),plset(-packet_traits::size)))) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return m_low+i*m_step; } + template + EIGEN_STRONG_INLINE const Packet packetOp(Index) const { return m_base = padd(m_base,m_packetStep); } + + const Scalar m_low; + const Scalar m_step; + const Packet m_packetStep; + mutable Packet m_base; +}; + +// random access for packet ops: +// 1) each step +// [low, ..., low] + ( [step, ..., step] * ( [i, ..., i] + [0, ..., size] ) ) +template +struct linspaced_op_impl +{ + typedef typename packet_traits::type Packet; + + linspaced_op_impl(Scalar low, Scalar step) : + m_low(low), m_step(step), + m_lowPacket(pset1(m_low)), m_stepPacket(pset1(m_step)), m_interPacket(plset(0)) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return m_low+i*m_step; } + + template + EIGEN_STRONG_INLINE const Packet packetOp(Index i) const + { return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1(i),m_interPacket))); } + + const Scalar m_low; + const Scalar m_step; + const Packet m_lowPacket; + const Packet m_stepPacket; + const Packet m_interPacket; +}; + +// ----- Linspace functor ---------------------------------------------------------------- + +// Forward declaration (we default to random access which does not really give +// us a speed gain when using packet access but it allows to use the functor in +// nested expressions). +template struct linspaced_op; +template struct functor_traits< linspaced_op > +{ enum { Cost = 1, PacketAccess = packet_traits::HasSetLinear, IsRepeatable = true }; }; +template struct linspaced_op +{ + typedef typename packet_traits::type Packet; + linspaced_op(Scalar low, Scalar high, int num_steps) : impl((num_steps==1 ? high : low), (num_steps==1 ? Scalar() : (high-low)/(num_steps-1))) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return impl(i); } + + // We need this function when assigning e.g. a RowVectorXd to a MatrixXd since + // there row==0 and col is used for the actual iteration. + template + EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const + { + eigen_assert(col==0 || row==0); + return impl(col + row); + } + + template + EIGEN_STRONG_INLINE const Packet packetOp(Index i) const { return impl.packetOp(i); } + + // We need this function when assigning e.g. a RowVectorXd to a MatrixXd since + // there row==0 and col is used for the actual iteration. + template + EIGEN_STRONG_INLINE const Packet packetOp(Index row, Index col) const + { + eigen_assert(col==0 || row==0); + return impl.packetOp(col + row); + } + + // This proxy object handles the actual required temporaries, the different + // implementations (random vs. sequential access) as well as the + // correct piping to size 2/4 packet operations. + const linspaced_op_impl impl; +}; + +// all functors allow linear access, except scalar_identity_op. So we fix here a quick meta +// to indicate whether a functor allows linear access, just always answering 'yes' except for +// scalar_identity_op. +// FIXME move this to functor_traits adding a functor_default +template struct functor_has_linear_access { enum { ret = 1 }; }; +template struct functor_has_linear_access > { enum { ret = 0 }; }; + +// in CwiseBinaryOp, we require the Lhs and Rhs to have the same scalar type, except for multiplication +// where we only require them to have the same _real_ scalar type so one may multiply, say, float by complex. +// FIXME move this to functor_traits adding a functor_default +template struct functor_allows_mixing_real_and_complex { enum { ret = 0 }; }; +template struct functor_allows_mixing_real_and_complex > { enum { ret = 1 }; }; +template struct functor_allows_mixing_real_and_complex > { enum { ret = 1 }; }; + + +/** \internal + * \brief Template functor to add a scalar to a fixed other one + * \sa class CwiseUnaryOp, Array::operator+ + */ +/* If you wonder why doing the pset1() in packetOp() is an optimization check scalar_multiple_op */ +template +struct scalar_add_op { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + inline scalar_add_op(const scalar_add_op& other) : m_other(other.m_other) { } + inline scalar_add_op(const Scalar& other) : m_other(other) { } + inline Scalar operator() (const Scalar& a) const { return a + m_other; } + inline const Packet packetOp(const Packet& a) const + { return internal::padd(a, pset1(m_other)); } + const Scalar m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = packet_traits::HasAdd }; }; + +/** \internal + * \brief Template functor to compute the square root of a scalar + * \sa class CwiseUnaryOp, Cwise::sqrt() + */ +template struct scalar_sqrt_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sqrt_op) + inline const Scalar operator() (const Scalar& a) const { return internal::sqrt(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::psqrt(a); } +}; +template +struct functor_traits > +{ enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasSqrt + }; +}; + +/** \internal + * \brief Template functor to compute the cosine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::cos() + */ +template struct scalar_cos_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cos_op) + inline Scalar operator() (const Scalar& a) const { return internal::cos(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pcos(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasCos + }; +}; + +/** \internal + * \brief Template functor to compute the sine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::sin() + */ +template struct scalar_sin_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sin_op) + inline const Scalar operator() (const Scalar& a) const { return internal::sin(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::psin(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasSin + }; +}; + + +/** \internal + * \brief Template functor to compute the tan of a scalar + * \sa class CwiseUnaryOp, ArrayBase::tan() + */ +template struct scalar_tan_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_tan_op) + inline const Scalar operator() (const Scalar& a) const { return internal::tan(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::ptan(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasTan + }; +}; + +/** \internal + * \brief Template functor to compute the arc cosine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::acos() + */ +template struct scalar_acos_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_acos_op) + inline const Scalar operator() (const Scalar& a) const { return internal::acos(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pacos(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasACos + }; +}; + +/** \internal + * \brief Template functor to compute the arc sine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::asin() + */ +template struct scalar_asin_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_asin_op) + inline const Scalar operator() (const Scalar& a) const { return internal::asin(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pasin(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasASin + }; +}; + +/** \internal + * \brief Template functor to raise a scalar to a power + * \sa class CwiseUnaryOp, Cwise::pow + */ +template +struct scalar_pow_op { + // FIXME default copy constructors seems bugged with std::complex<> + inline scalar_pow_op(const scalar_pow_op& other) : m_exponent(other.m_exponent) { } + inline scalar_pow_op(const Scalar& exponent) : m_exponent(exponent) {} + inline Scalar operator() (const Scalar& a) const { return internal::pow(a, m_exponent); } + const Scalar m_exponent; +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to compute the quotient between a scalar and array entries. + * \sa class CwiseUnaryOp, Cwise::inverse() + */ +template +struct scalar_inverse_mult_op { + scalar_inverse_mult_op(const Scalar& other) : m_other(other) {} + inline Scalar operator() (const Scalar& a) const { return m_other / a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pdiv(pset1(m_other),a); } + Scalar m_other; +}; + +/** \internal + * \brief Template functor to compute the inverse of a scalar + * \sa class CwiseUnaryOp, Cwise::inverse() + */ +template +struct scalar_inverse_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_inverse_op) + inline Scalar operator() (const Scalar& a) const { return Scalar(1)/a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pdiv(pset1(Scalar(1)),a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasDiv }; }; + +/** \internal + * \brief Template functor to compute the square of a scalar + * \sa class CwiseUnaryOp, Cwise::square() + */ +template +struct scalar_square_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_square_op) + inline Scalar operator() (const Scalar& a) const { return a*a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pmul(a,a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +/** \internal + * \brief Template functor to compute the cube of a scalar + * \sa class CwiseUnaryOp, Cwise::cube() + */ +template +struct scalar_cube_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cube_op) + inline Scalar operator() (const Scalar& a) const { return a*a*a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pmul(a,pmul(a,a)); } +}; +template +struct functor_traits > +{ enum { Cost = 2*NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +// default functor traits for STL functors: + +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1 + functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1 + functor_traits::Cost, PacketAccess = false }; }; + +#ifdef EIGEN_STDEXT_SUPPORT + +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost + functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost + functor_traits::Cost + functor_traits::Cost, PacketAccess = false }; }; + +#endif // EIGEN_STDEXT_SUPPORT + +// allow to add new functors and specializations of functor_traits from outside Eigen. +// this macro is really needed because functor_traits must be specialized after it is declared but before it is used... +#ifdef EIGEN_FUNCTORS_PLUGIN +#include EIGEN_FUNCTORS_PLUGIN +#endif + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_FUNCTORS_H diff --git a/Biopool/Sources/Eigen/src/Core/Fuzzy.h b/Biopool/Sources/Eigen/src/Core/Fuzzy.h new file mode 100644 index 0000000..8876411 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Fuzzy.h @@ -0,0 +1,165 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FUZZY_H +#define EIGEN_FUZZY_H + +namespace Eigen { + +namespace internal +{ + +template::IsInteger> +struct isApprox_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar prec) + { + using std::min; + typename internal::nested::type nested(x); + typename internal::nested::type otherNested(y); + return (nested - otherNested).cwiseAbs2().sum() <= prec * prec * (min)(nested.cwiseAbs2().sum(), otherNested.cwiseAbs2().sum()); + } +}; + +template +struct isApprox_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar) + { + return x.matrix() == y.matrix(); + } +}; + +template::IsInteger> +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar prec) + { + return x.cwiseAbs2().sum() <= abs2(prec) * y.cwiseAbs2().sum(); + } +}; + +template +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived&, typename Derived::RealScalar) + { + return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix(); + } +}; + +template::IsInteger> +struct isMuchSmallerThan_scalar_selector +{ + static bool run(const Derived& x, const typename Derived::RealScalar& y, typename Derived::RealScalar prec) + { + return x.cwiseAbs2().sum() <= abs2(prec * y); + } +}; + +template +struct isMuchSmallerThan_scalar_selector +{ + static bool run(const Derived& x, const typename Derived::RealScalar&, typename Derived::RealScalar) + { + return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix(); + } +}; + +} // end namespace internal + + +/** \returns \c true if \c *this is approximately equal to \a other, within the precision + * determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. Two vectors \f$ v \f$ and \f$ w \f$ + * are considered to be approximately equal within precision \f$ p \f$ if + * \f[ \Vert v - w \Vert \leqslant p\,\min(\Vert v\Vert, \Vert w\Vert). \f] + * For matrices, the comparison is done using the Hilbert-Schmidt norm (aka Frobenius norm + * L2 norm). + * + * \note Because of the multiplicativeness of this comparison, one can't use this function + * to check whether \c *this is approximately equal to the zero matrix or vector. + * Indeed, \c isApprox(zero) returns false unless \c *this itself is exactly the zero matrix + * or vector. If you want to test whether \c *this is zero, use internal::isMuchSmallerThan(const + * RealScalar&, RealScalar) instead. + * + * \sa internal::isMuchSmallerThan(const RealScalar&, RealScalar) const + */ +template +template +bool DenseBase::isApprox( + const DenseBase& other, + RealScalar prec +) const +{ + return internal::isApprox_selector::run(derived(), other.derived(), prec); +} + +/** \returns \c true if the norm of \c *this is much smaller than \a other, + * within the precision determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. A vector \f$ v \f$ is + * considered to be much smaller than \f$ x \f$ within precision \f$ p \f$ if + * \f[ \Vert v \Vert \leqslant p\,\vert x\vert. \f] + * + * For matrices, the comparison is done using the Hilbert-Schmidt norm. For this reason, + * the value of the reference scalar \a other should come from the Hilbert-Schmidt norm + * of a reference matrix of same dimensions. + * + * \sa isApprox(), isMuchSmallerThan(const DenseBase&, RealScalar) const + */ +template +bool DenseBase::isMuchSmallerThan( + const typename NumTraits::Real& other, + RealScalar prec +) const +{ + return internal::isMuchSmallerThan_scalar_selector::run(derived(), other, prec); +} + +/** \returns \c true if the norm of \c *this is much smaller than the norm of \a other, + * within the precision determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. A vector \f$ v \f$ is + * considered to be much smaller than a vector \f$ w \f$ within precision \f$ p \f$ if + * \f[ \Vert v \Vert \leqslant p\,\Vert w\Vert. \f] + * For matrices, the comparison is done using the Hilbert-Schmidt norm. + * + * \sa isApprox(), isMuchSmallerThan(const RealScalar&, RealScalar) const + */ +template +template +bool DenseBase::isMuchSmallerThan( + const DenseBase& other, + RealScalar prec +) const +{ + return internal::isMuchSmallerThan_object_selector::run(derived(), other.derived(), prec); +} + +} // end namespace Eigen + +#endif // EIGEN_FUZZY_H diff --git a/Biopool/Sources/Eigen/src/Core/GeneralProduct.h b/Biopool/Sources/Eigen/src/Core/GeneralProduct.h new file mode 100644 index 0000000..4fbe1f1 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/GeneralProduct.h @@ -0,0 +1,628 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008-2011 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_GENERAL_PRODUCT_H +#define EIGEN_GENERAL_PRODUCT_H + +namespace Eigen { + +/** \class GeneralProduct + * \ingroup Core_Module + * + * \brief Expression of the product of two general matrices or vectors + * + * \param LhsNested the type used to store the left-hand side + * \param RhsNested the type used to store the right-hand side + * \param ProductMode the type of the product + * + * This class represents an expression of the product of two general matrices. + * We call a general matrix, a dense matrix with full storage. For instance, + * This excludes triangular, selfadjoint, and sparse matrices. + * It is the return type of the operator* between general matrices. Its template + * arguments are determined automatically by ProductReturnType. Therefore, + * GeneralProduct should never be used direclty. To determine the result type of a + * function which involves a matrix product, use ProductReturnType::Type. + * + * \sa ProductReturnType, MatrixBase::operator*(const MatrixBase&) + */ +template::value> +class GeneralProduct; + +enum { + Large = 2, + Small = 3 +}; + +namespace internal { + +template struct product_type_selector; + +template struct product_size_category +{ + enum { is_large = MaxSize == Dynamic || + Size >= EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD, + value = is_large ? Large + : Size == 1 ? 1 + : Small + }; +}; + +template struct product_type +{ + typedef typename remove_all::type _Lhs; + typedef typename remove_all::type _Rhs; + enum { + MaxRows = _Lhs::MaxRowsAtCompileTime, + Rows = _Lhs::RowsAtCompileTime, + MaxCols = _Rhs::MaxColsAtCompileTime, + Cols = _Rhs::ColsAtCompileTime, + MaxDepth = EIGEN_SIZE_MIN_PREFER_FIXED(_Lhs::MaxColsAtCompileTime, + _Rhs::MaxRowsAtCompileTime), + Depth = EIGEN_SIZE_MIN_PREFER_FIXED(_Lhs::ColsAtCompileTime, + _Rhs::RowsAtCompileTime), + LargeThreshold = EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD + }; + + // the splitting into different lines of code here, introducing the _select enums and the typedef below, + // is to work around an internal compiler error with gcc 4.1 and 4.2. +private: + enum { + rows_select = product_size_category::value, + cols_select = product_size_category::value, + depth_select = product_size_category::value + }; + typedef product_type_selector selector; + +public: + enum { + value = selector::ret + }; +#ifdef EIGEN_DEBUG_PRODUCT + static void debug() + { + EIGEN_DEBUG_VAR(Rows); + EIGEN_DEBUG_VAR(Cols); + EIGEN_DEBUG_VAR(Depth); + EIGEN_DEBUG_VAR(rows_select); + EIGEN_DEBUG_VAR(cols_select); + EIGEN_DEBUG_VAR(depth_select); + EIGEN_DEBUG_VAR(value); + } +#endif +}; + + +/* The following allows to select the kind of product at compile time + * based on the three dimensions of the product. + * This is a compile time mapping from {1,Small,Large}^3 -> {product types} */ +// FIXME I'm not sure the current mapping is the ideal one. +template struct product_type_selector { enum { ret = OuterProduct }; }; +template struct product_type_selector<1, 1, Depth> { enum { ret = InnerProduct }; }; +template<> struct product_type_selector<1, 1, 1> { enum { ret = InnerProduct }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Small,Small> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Large,Small> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Large,Large> { enum { ret = GemvProduct }; }; +template<> struct product_type_selector<1, Small,Large> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = GemvProduct }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; + +} // end namespace internal + +/** \class ProductReturnType + * \ingroup Core_Module + * + * \brief Helper class to get the correct and optimized returned type of operator* + * + * \param Lhs the type of the left-hand side + * \param Rhs the type of the right-hand side + * \param ProductMode the type of the product (determined automatically by internal::product_mode) + * + * This class defines the typename Type representing the optimized product expression + * between two matrix expressions. In practice, using ProductReturnType::Type + * is the recommended way to define the result type of a function returning an expression + * which involve a matrix product. The class Product should never be + * used directly. + * + * \sa class Product, MatrixBase::operator*(const MatrixBase&) + */ +template +struct ProductReturnType +{ + // TODO use the nested type to reduce instanciations ???? +// typedef typename internal::nested::type LhsNested; +// typedef typename internal::nested::type RhsNested; + + typedef GeneralProduct Type; +}; + +template +struct ProductReturnType +{ + typedef typename internal::nested::type >::type LhsNested; + typedef typename internal::nested::type >::type RhsNested; + typedef CoeffBasedProduct Type; +}; + +template +struct ProductReturnType +{ + typedef typename internal::nested::type >::type LhsNested; + typedef typename internal::nested::type >::type RhsNested; + typedef CoeffBasedProduct Type; +}; + +// this is a workaround for sun CC +template +struct LazyProductReturnType : public ProductReturnType +{}; + +/*********************************************************************** +* Implementation of Inner Vector Vector Product +***********************************************************************/ + +// FIXME : maybe the "inner product" could return a Scalar +// instead of a 1x1 matrix ?? +// Pro: more natural for the user +// Cons: this could be a problem if in a meta unrolled algorithm a matrix-matrix +// product ends up to a row-vector times col-vector product... To tackle this use +// case, we could have a specialization for Block with: operator=(Scalar x); + +namespace internal { + +template +struct traits > + : traits::ReturnType,1,1> > +{}; + +} + +template +class GeneralProduct + : internal::no_assignment_operator, + public Matrix::ReturnType,1,1> +{ + typedef Matrix::ReturnType,1,1> Base; + public: + GeneralProduct(const Lhs& lhs, const Rhs& rhs) + { + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + Base::coeffRef(0,0) = (lhs.transpose().cwiseProduct(rhs)).sum(); + } + + /** Convertion to scalar */ + operator const typename Base::Scalar() const { + return Base::coeff(0,0); + } +}; + +/*********************************************************************** +* Implementation of Outer Vector Vector Product +***********************************************************************/ + +namespace internal { +template struct outer_product_selector; + +template +struct traits > + : traits, Lhs, Rhs> > +{}; + +} + +template +class GeneralProduct + : public ProductBase, Lhs, Rhs> +{ + public: + EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) + + GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) + { + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + } + + template void scaleAndAddTo(Dest& dest, Scalar alpha) const + { + internal::outer_product_selector<(int(Dest::Flags)&RowMajorBit) ? RowMajor : ColMajor>::run(*this, dest, alpha); + } +}; + +namespace internal { + +template<> struct outer_product_selector { + template + static EIGEN_DONT_INLINE void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) { + typedef typename Dest::Index Index; + // FIXME make sure lhs is sequentially stored + // FIXME not very good if rhs is real and lhs complex while alpha is real too + const Index cols = dest.cols(); + for (Index j=0; j struct outer_product_selector { + template + static EIGEN_DONT_INLINE void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) { + typedef typename Dest::Index Index; + // FIXME make sure rhs is sequentially stored + // FIXME not very good if lhs is real and rhs complex while alpha is real too + const Index rows = dest.rows(); + for (Index i=0; i call fast BLAS-like colmajor routine + * 2 - the matrix is row-major, BLAS compatible and N is large => call fast BLAS-like rowmajor routine + * 3 - all other cases are handled using a simple loop along the outer-storage direction. + * Therefore we need a lower level meta selector. + * Furthermore, if the matrix is the rhs, then the product has to be transposed. + */ +namespace internal { + +template +struct traits > + : traits, Lhs, Rhs> > +{}; + +template +struct gemv_selector; + +} // end namespace internal + +template +class GeneralProduct + : public ProductBase, Lhs, Rhs> +{ + public: + EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) + + typedef typename Lhs::Scalar LhsScalar; + typedef typename Rhs::Scalar RhsScalar; + + GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) + { +// EIGEN_STATIC_ASSERT((internal::is_same::value), +// YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + } + + enum { Side = Lhs::IsVectorAtCompileTime ? OnTheLeft : OnTheRight }; + typedef typename internal::conditional::type MatrixType; + + template void scaleAndAddTo(Dest& dst, Scalar alpha) const + { + eigen_assert(m_lhs.rows() == dst.rows() && m_rhs.cols() == dst.cols()); + internal::gemv_selector::HasUsableDirectAccess)>::run(*this, dst, alpha); + } +}; + +namespace internal { + +// The vector is on the left => transposition +template +struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + Transpose destT(dest); + enum { OtherStorageOrder = StorageOrder == RowMajor ? ColMajor : RowMajor }; + gemv_selector + ::run(GeneralProduct,Transpose, GemvProduct> + (prod.rhs().transpose(), prod.lhs().transpose()), destT, alpha); + } +}; + +template struct gemv_static_vector_if; + +template +struct gemv_static_vector_if +{ + EIGEN_STRONG_INLINE Scalar* data() { eigen_internal_assert(false && "should never be called"); return 0; } +}; + +template +struct gemv_static_vector_if +{ + EIGEN_STRONG_INLINE Scalar* data() { return 0; } +}; + +template +struct gemv_static_vector_if +{ + #if EIGEN_ALIGN_STATICALLY + internal::plain_array m_data; + EIGEN_STRONG_INLINE Scalar* data() { return m_data.array; } + #else + // Some architectures cannot align on the stack, + // => let's manually enforce alignment by allocating more data and return the address of the first aligned element. + enum { + ForceAlignment = internal::packet_traits::Vectorizable, + PacketSize = internal::packet_traits::size + }; + internal::plain_array m_data; + EIGEN_STRONG_INLINE Scalar* data() { + return ForceAlignment + ? reinterpret_cast((reinterpret_cast(m_data.array) & ~(size_t(15))) + 16) + : m_data.array; + } + #endif +}; + +template<> struct gemv_selector +{ + template + static inline void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename ProductType::Index Index; + typedef typename ProductType::LhsScalar LhsScalar; + typedef typename ProductType::RhsScalar RhsScalar; + typedef typename ProductType::Scalar ResScalar; + typedef typename ProductType::RealScalar RealScalar; + typedef typename ProductType::ActualLhsType ActualLhsType; + typedef typename ProductType::ActualRhsType ActualRhsType; + typedef typename ProductType::LhsBlasTraits LhsBlasTraits; + typedef typename ProductType::RhsBlasTraits RhsBlasTraits; + typedef Map, Aligned> MappedDest; + + ActualLhsType actualLhs = LhsBlasTraits::extract(prod.lhs()); + ActualRhsType actualRhs = RhsBlasTraits::extract(prod.rhs()); + + ResScalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(prod.lhs()) + * RhsBlasTraits::extractScalarFactor(prod.rhs()); + + enum { + // FIXME find a way to allow an inner stride on the result if packet_traits::size==1 + // on, the other hand it is good for the cache to pack the vector anyways... + EvalToDestAtCompileTime = Dest::InnerStrideAtCompileTime==1, + ComplexByReal = (NumTraits::IsComplex) && (!NumTraits::IsComplex), + MightCannotUseDest = (Dest::InnerStrideAtCompileTime!=1) || ComplexByReal + }; + + gemv_static_vector_if static_dest; + + bool alphaIsCompatible = (!ComplexByReal) || (imag(actualAlpha)==RealScalar(0)); + bool evalToDest = EvalToDestAtCompileTime && alphaIsCompatible; + + RhsScalar compatibleAlpha = get_factor::run(actualAlpha); + + ei_declare_aligned_stack_constructed_variable(ResScalar,actualDestPtr,dest.size(), + evalToDest ? dest.data() : static_dest.data()); + + if(!evalToDest) + { + #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + int size = dest.size(); + EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #endif + if(!alphaIsCompatible) + { + MappedDest(actualDestPtr, dest.size()).setZero(); + compatibleAlpha = RhsScalar(1); + } + else + MappedDest(actualDestPtr, dest.size()) = dest; + } + + general_matrix_vector_product + ::run( + actualLhs.rows(), actualLhs.cols(), + actualLhs.data(), actualLhs.outerStride(), + actualRhs.data(), actualRhs.innerStride(), + actualDestPtr, 1, + compatibleAlpha); + + if (!evalToDest) + { + if(!alphaIsCompatible) + dest += actualAlpha * MappedDest(actualDestPtr, dest.size()); + else + dest = MappedDest(actualDestPtr, dest.size()); + } + } +}; + +template<> struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename ProductType::LhsScalar LhsScalar; + typedef typename ProductType::RhsScalar RhsScalar; + typedef typename ProductType::Scalar ResScalar; + typedef typename ProductType::Index Index; + typedef typename ProductType::ActualLhsType ActualLhsType; + typedef typename ProductType::ActualRhsType ActualRhsType; + typedef typename ProductType::_ActualRhsType _ActualRhsType; + typedef typename ProductType::LhsBlasTraits LhsBlasTraits; + typedef typename ProductType::RhsBlasTraits RhsBlasTraits; + + typename add_const::type actualLhs = LhsBlasTraits::extract(prod.lhs()); + typename add_const::type actualRhs = RhsBlasTraits::extract(prod.rhs()); + + ResScalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(prod.lhs()) + * RhsBlasTraits::extractScalarFactor(prod.rhs()); + + enum { + // FIXME find a way to allow an inner stride on the result if packet_traits::size==1 + // on, the other hand it is good for the cache to pack the vector anyways... + DirectlyUseRhs = _ActualRhsType::InnerStrideAtCompileTime==1 + }; + + gemv_static_vector_if static_rhs; + + ei_declare_aligned_stack_constructed_variable(RhsScalar,actualRhsPtr,actualRhs.size(), + DirectlyUseRhs ? const_cast(actualRhs.data()) : static_rhs.data()); + + if(!DirectlyUseRhs) + { + #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + int size = actualRhs.size(); + EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #endif + Map(actualRhsPtr, actualRhs.size()) = actualRhs; + } + + general_matrix_vector_product + ::run( + actualLhs.rows(), actualLhs.cols(), + actualLhs.data(), actualLhs.outerStride(), + actualRhsPtr, 1, + dest.data(), dest.innerStride(), + actualAlpha); + } +}; + +template<> struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename Dest::Index Index; + // TODO makes sure dest is sequentially stored in memory, otherwise use a temp + const Index size = prod.rhs().rows(); + for(Index k=0; k struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename Dest::Index Index; + // TODO makes sure rhs is sequentially stored in memory, otherwise use a temp + const Index rows = prod.rows(); + for(Index i=0; i +template +inline const typename ProductReturnType::Type +MatrixBase::operator*(const MatrixBase &other) const +{ + // A note regarding the function declaration: In MSVC, this function will sometimes + // not be inlined since DenseStorage is an unwindable object for dynamic + // matrices and product types are holding a member to store the result. + // Thus it does not help tagging this function with EIGEN_STRONG_INLINE. + enum { + ProductIsValid = Derived::ColsAtCompileTime==Dynamic + || OtherDerived::RowsAtCompileTime==Dynamic + || int(Derived::ColsAtCompileTime)==int(OtherDerived::RowsAtCompileTime), + AreVectors = Derived::IsVectorAtCompileTime && OtherDerived::IsVectorAtCompileTime, + SameSizes = EIGEN_PREDICATE_SAME_MATRIX_SIZE(Derived,OtherDerived) + }; + // note to the lost user: + // * for a dot product use: v1.dot(v2) + // * for a coeff-wise product use: v1.cwiseProduct(v2) + EIGEN_STATIC_ASSERT(ProductIsValid || !(AreVectors && SameSizes), + INVALID_VECTOR_VECTOR_PRODUCT__IF_YOU_WANTED_A_DOT_OR_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTIONS) + EIGEN_STATIC_ASSERT(ProductIsValid || !(SameSizes && !AreVectors), + INVALID_MATRIX_PRODUCT__IF_YOU_WANTED_A_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTION) + EIGEN_STATIC_ASSERT(ProductIsValid || SameSizes, INVALID_MATRIX_PRODUCT) +#ifdef EIGEN_DEBUG_PRODUCT + internal::product_type::debug(); +#endif + return typename ProductReturnType::Type(derived(), other.derived()); +} + +/** \returns an expression of the matrix product of \c *this and \a other without implicit evaluation. + * + * The returned product will behave like any other expressions: the coefficients of the product will be + * computed once at a time as requested. This might be useful in some extremely rare cases when only + * a small and no coherent fraction of the result's coefficients have to be computed. + * + * \warning This version of the matrix product can be much much slower. So use it only if you know + * what you are doing and that you measured a true speed improvement. + * + * \sa operator*(const MatrixBase&) + */ +template +template +const typename LazyProductReturnType::Type +MatrixBase::lazyProduct(const MatrixBase &other) const +{ + enum { + ProductIsValid = Derived::ColsAtCompileTime==Dynamic + || OtherDerived::RowsAtCompileTime==Dynamic + || int(Derived::ColsAtCompileTime)==int(OtherDerived::RowsAtCompileTime), + AreVectors = Derived::IsVectorAtCompileTime && OtherDerived::IsVectorAtCompileTime, + SameSizes = EIGEN_PREDICATE_SAME_MATRIX_SIZE(Derived,OtherDerived) + }; + // note to the lost user: + // * for a dot product use: v1.dot(v2) + // * for a coeff-wise product use: v1.cwiseProduct(v2) + EIGEN_STATIC_ASSERT(ProductIsValid || !(AreVectors && SameSizes), + INVALID_VECTOR_VECTOR_PRODUCT__IF_YOU_WANTED_A_DOT_OR_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTIONS) + EIGEN_STATIC_ASSERT(ProductIsValid || !(SameSizes && !AreVectors), + INVALID_MATRIX_PRODUCT__IF_YOU_WANTED_A_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTION) + EIGEN_STATIC_ASSERT(ProductIsValid || SameSizes, INVALID_MATRIX_PRODUCT) + + return typename LazyProductReturnType::Type(derived(), other.derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_PRODUCT_H diff --git a/Biopool/Sources/Eigen/src/Core/GenericPacketMath.h b/Biopool/Sources/Eigen/src/Core/GenericPacketMath.h new file mode 100644 index 0000000..d92ac95 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/GenericPacketMath.h @@ -0,0 +1,343 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_GENERIC_PACKET_MATH_H +#define EIGEN_GENERIC_PACKET_MATH_H + +namespace Eigen { + +namespace internal { + +/** \internal + * \file GenericPacketMath.h + * + * Default implementation for types not supported by the vectorization. + * In practice these functions are provided to make easier the writing + * of generic vectorized code. + */ + +#ifndef EIGEN_DEBUG_ALIGNED_LOAD +#define EIGEN_DEBUG_ALIGNED_LOAD +#endif + +#ifndef EIGEN_DEBUG_UNALIGNED_LOAD +#define EIGEN_DEBUG_UNALIGNED_LOAD +#endif + +#ifndef EIGEN_DEBUG_ALIGNED_STORE +#define EIGEN_DEBUG_ALIGNED_STORE +#endif + +#ifndef EIGEN_DEBUG_UNALIGNED_STORE +#define EIGEN_DEBUG_UNALIGNED_STORE +#endif + +struct default_packet_traits +{ + enum { + HasAdd = 1, + HasSub = 1, + HasMul = 1, + HasNegate = 1, + HasAbs = 1, + HasAbs2 = 1, + HasMin = 1, + HasMax = 1, + HasConj = 1, + HasSetLinear = 1, + + HasDiv = 0, + HasSqrt = 0, + HasExp = 0, + HasLog = 0, + HasPow = 0, + + HasSin = 0, + HasCos = 0, + HasTan = 0, + HasASin = 0, + HasACos = 0, + HasATan = 0 + }; +}; + +template struct packet_traits : default_packet_traits +{ + typedef T type; + enum { + Vectorizable = 0, + size = 1, + AlignedOnScalar = 0 + }; + enum { + HasAdd = 0, + HasSub = 0, + HasMul = 0, + HasNegate = 0, + HasAbs = 0, + HasAbs2 = 0, + HasMin = 0, + HasMax = 0, + HasConj = 0, + HasSetLinear = 0 + }; +}; + +/** \internal \returns a + b (coeff-wise) */ +template inline Packet +padd(const Packet& a, + const Packet& b) { return a+b; } + +/** \internal \returns a - b (coeff-wise) */ +template inline Packet +psub(const Packet& a, + const Packet& b) { return a-b; } + +/** \internal \returns -a (coeff-wise) */ +template inline Packet +pnegate(const Packet& a) { return -a; } + +/** \internal \returns conj(a) (coeff-wise) */ +template inline Packet +pconj(const Packet& a) { return conj(a); } + +/** \internal \returns a * b (coeff-wise) */ +template inline Packet +pmul(const Packet& a, + const Packet& b) { return a*b; } + +/** \internal \returns a / b (coeff-wise) */ +template inline Packet +pdiv(const Packet& a, + const Packet& b) { return a/b; } + +/** \internal \returns the min of \a a and \a b (coeff-wise) */ +template inline Packet +pmin(const Packet& a, + const Packet& b) { using std::min; return (min)(a, b); } + +/** \internal \returns the max of \a a and \a b (coeff-wise) */ +template inline Packet +pmax(const Packet& a, + const Packet& b) { using std::max; return (max)(a, b); } + +/** \internal \returns the absolute value of \a a */ +template inline Packet +pabs(const Packet& a) { return abs(a); } + +/** \internal \returns the bitwise and of \a a and \a b */ +template inline Packet +pand(const Packet& a, const Packet& b) { return a & b; } + +/** \internal \returns the bitwise or of \a a and \a b */ +template inline Packet +por(const Packet& a, const Packet& b) { return a | b; } + +/** \internal \returns the bitwise xor of \a a and \a b */ +template inline Packet +pxor(const Packet& a, const Packet& b) { return a ^ b; } + +/** \internal \returns the bitwise andnot of \a a and \a b */ +template inline Packet +pandnot(const Packet& a, const Packet& b) { return a & (!b); } + +/** \internal \returns a packet version of \a *from, from must be 16 bytes aligned */ +template inline Packet +pload(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet version of \a *from, (un-aligned load) */ +template inline Packet +ploadu(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet with elements of \a *from duplicated, e.g.: (from[0],from[0],from[1],from[1]) */ +template inline Packet +ploaddup(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet with constant coefficients \a a, e.g.: (a,a,a,a) */ +template inline Packet +pset1(const typename unpacket_traits::type& a) { return a; } + +/** \internal \brief Returns a packet with coefficients (a,a+1,...,a+packet_size-1). */ +template inline typename packet_traits::type +plset(const Scalar& a) { return a; } + +/** \internal copy the packet \a from to \a *to, \a to must be 16 bytes aligned */ +template inline void pstore(Scalar* to, const Packet& from) +{ (*to) = from; } + +/** \internal copy the packet \a from to \a *to, (un-aligned store) */ +template inline void pstoreu(Scalar* to, const Packet& from) +{ (*to) = from; } + +/** \internal tries to do cache prefetching of \a addr */ +template inline void prefetch(const Scalar* addr) +{ +#if !defined(_MSC_VER) +__builtin_prefetch(addr); +#endif +} + +/** \internal \returns the first element of a packet */ +template inline typename unpacket_traits::type pfirst(const Packet& a) +{ return a; } + +/** \internal \returns a packet where the element i contains the sum of the packet of \a vec[i] */ +template inline Packet +preduxp(const Packet* vecs) { return vecs[0]; } + +/** \internal \returns the sum of the elements of \a a*/ +template inline typename unpacket_traits::type predux(const Packet& a) +{ return a; } + +/** \internal \returns the product of the elements of \a a*/ +template inline typename unpacket_traits::type predux_mul(const Packet& a) +{ return a; } + +/** \internal \returns the min of the elements of \a a*/ +template inline typename unpacket_traits::type predux_min(const Packet& a) +{ return a; } + +/** \internal \returns the max of the elements of \a a*/ +template inline typename unpacket_traits::type predux_max(const Packet& a) +{ return a; } + +/** \internal \returns the reversed elements of \a a*/ +template inline Packet preverse(const Packet& a) +{ return a; } + + +/** \internal \returns \a a with real and imaginary part flipped (for complex type only) */ +template inline Packet pcplxflip(const Packet& a) +{ return Packet(imag(a),real(a)); } + +/************************** +* Special math functions +***************************/ + +/** \internal \returns the sine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet psin(const Packet& a) { return sin(a); } + +/** \internal \returns the cosine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pcos(const Packet& a) { return cos(a); } + +/** \internal \returns the tan of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet ptan(const Packet& a) { return tan(a); } + +/** \internal \returns the arc sine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pasin(const Packet& a) { return asin(a); } + +/** \internal \returns the arc cosine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pacos(const Packet& a) { return acos(a); } + +/** \internal \returns the exp of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pexp(const Packet& a) { return exp(a); } + +/** \internal \returns the log of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet plog(const Packet& a) { return log(a); } + +/** \internal \returns the square-root of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet psqrt(const Packet& a) { return sqrt(a); } + +/*************************************************************************** +* The following functions might not have to be overwritten for vectorized types +***************************************************************************/ + +/** \internal copy a packet with constant coeficient \a a (e.g., [a,a,a,a]) to \a *to. \a to must be 16 bytes aligned */ +// NOTE: this function must really be templated on the packet type (think about different packet types for the same scalar type) +template +inline void pstore1(typename unpacket_traits::type* to, const typename unpacket_traits::type& a) +{ + pstore(to, pset1(a)); +} + +/** \internal \returns a * b + c (coeff-wise) */ +template inline Packet +pmadd(const Packet& a, + const Packet& b, + const Packet& c) +{ return padd(pmul(a, b),c); } + +/** \internal \returns a packet version of \a *from. + * If LoadMode equals #Aligned, \a from must be 16 bytes aligned */ +template +inline Packet ploadt(const typename unpacket_traits::type* from) +{ + if(LoadMode == Aligned) + return pload(from); + else + return ploadu(from); +} + +/** \internal copy the packet \a from to \a *to. + * If StoreMode equals #Aligned, \a to must be 16 bytes aligned */ +template +inline void pstoret(Scalar* to, const Packet& from) +{ + if(LoadMode == Aligned) + pstore(to, from); + else + pstoreu(to, from); +} + +/** \internal default implementation of palign() allowing partial specialization */ +template +struct palign_impl +{ + // by default data are aligned, so there is nothing to be done :) + static inline void run(PacketType&, const PacketType&) {} +}; + +/** \internal update \a first using the concatenation of the \a Offset last elements + * of \a first and packet_size minus \a Offset first elements of \a second */ +template +inline void palign(PacketType& first, const PacketType& second) +{ + palign_impl::run(first,second); +} + +/*************************************************************************** +* Fast complex products (GCC generates a function call which is very slow) +***************************************************************************/ + +template<> inline std::complex pmul(const std::complex& a, const std::complex& b) +{ return std::complex(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); } + +template<> inline std::complex pmul(const std::complex& a, const std::complex& b) +{ return std::complex(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); } + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_GENERIC_PACKET_MATH_H + diff --git a/Biopool/Sources/Eigen/src/Core/GlobalFunctions.h b/Biopool/Sources/Eigen/src/Core/GlobalFunctions.h new file mode 100644 index 0000000..9460525 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/GlobalFunctions.h @@ -0,0 +1,118 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2010 Gael Guennebaud +// Copyright (C) 2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_GLOBAL_FUNCTIONS_H +#define EIGEN_GLOBAL_FUNCTIONS_H + +#define EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(NAME,FUNCTOR) \ + template \ + inline const Eigen::CwiseUnaryOp, const Derived> \ + NAME(const Eigen::ArrayBase& x) { \ + return x.derived(); \ + } + +#define EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(NAME,FUNCTOR) \ + \ + template \ + struct NAME##_retval > \ + { \ + typedef const Eigen::CwiseUnaryOp, const Derived> type; \ + }; \ + template \ + struct NAME##_impl > \ + { \ + static inline typename NAME##_retval >::type run(const Eigen::ArrayBase& x) \ + { \ + return x.derived(); \ + } \ + }; + + +namespace std +{ + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(real,scalar_real_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(imag,scalar_imag_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sin,scalar_sin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(cos,scalar_cos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(asin,scalar_asin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(acos,scalar_acos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(tan,scalar_tan_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(exp,scalar_exp_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(log,scalar_log_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(abs,scalar_abs_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sqrt,scalar_sqrt_op) + + template + inline const Eigen::CwiseUnaryOp, const Derived> + pow(const Eigen::ArrayBase& x, const typename Derived::Scalar& exponent) { + return x.derived().pow(exponent); + } + + template + inline const Eigen::CwiseBinaryOp, const Derived, const Derived> + pow(const Eigen::ArrayBase& x, const Eigen::ArrayBase& exponents) + { + return Eigen::CwiseBinaryOp, const Derived, const Derived>( + x.derived(), + exponents.derived() + ); + } +} + +namespace Eigen +{ + /** + * \brief Component-wise division of a scalar by array elements. + **/ + template + inline const Eigen::CwiseUnaryOp, const Derived> + operator/(typename Derived::Scalar s, const Eigen::ArrayBase& a) + { + return Eigen::CwiseUnaryOp, const Derived>( + a.derived(), + Eigen::internal::scalar_inverse_mult_op(s) + ); + } + + namespace internal + { + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(real,scalar_real_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(imag,scalar_imag_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(sin,scalar_sin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(cos,scalar_cos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(asin,scalar_asin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(acos,scalar_acos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(tan,scalar_tan_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(exp,scalar_exp_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(log,scalar_log_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(abs,scalar_abs_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(abs2,scalar_abs2_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(sqrt,scalar_sqrt_op) + } +} + +// TODO: cleanly disable those functions that are not supported on Array (internal::real_ref, internal::random, internal::isApprox...) + +#endif // EIGEN_GLOBAL_FUNCTIONS_H diff --git a/Biopool/Sources/Eigen/src/Core/IO.h b/Biopool/Sources/Eigen/src/Core/IO.h new file mode 100644 index 0000000..2f1906f --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/IO.h @@ -0,0 +1,264 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_IO_H +#define EIGEN_IO_H + +namespace Eigen { + +enum { DontAlignCols = 1 }; +enum { StreamPrecision = -1, + FullPrecision = -2 }; + +namespace internal { +template +std::ostream & print_matrix(std::ostream & s, const Derived& _m, const IOFormat& fmt); +} + +/** \class IOFormat + * \ingroup Core_Module + * + * \brief Stores a set of parameters controlling the way matrices are printed + * + * List of available parameters: + * - \b precision number of digits for floating point values, or one of the special constants \c StreamPrecision and \c FullPrecision. + * The default is the special value \c StreamPrecision which means to use the + * stream's own precision setting, as set for instance using \c cout.precision(3). The other special value + * \c FullPrecision means that the number of digits will be computed to match the full precision of each floating-point + * type. + * - \b flags an OR-ed combination of flags, the default value is 0, the only currently available flag is \c DontAlignCols which + * allows to disable the alignment of columns, resulting in faster code. + * - \b coeffSeparator string printed between two coefficients of the same row + * - \b rowSeparator string printed between two rows + * - \b rowPrefix string printed at the beginning of each row + * - \b rowSuffix string printed at the end of each row + * - \b matPrefix string printed at the beginning of the matrix + * - \b matSuffix string printed at the end of the matrix + * + * Example: \include IOFormat.cpp + * Output: \verbinclude IOFormat.out + * + * \sa DenseBase::format(), class WithFormat + */ +struct IOFormat +{ + /** Default contructor, see class IOFormat for the meaning of the parameters */ + IOFormat(int _precision = StreamPrecision, int _flags = 0, + const std::string& _coeffSeparator = " ", + const std::string& _rowSeparator = "\n", const std::string& _rowPrefix="", const std::string& _rowSuffix="", + const std::string& _matPrefix="", const std::string& _matSuffix="") + : matPrefix(_matPrefix), matSuffix(_matSuffix), rowPrefix(_rowPrefix), rowSuffix(_rowSuffix), rowSeparator(_rowSeparator), + coeffSeparator(_coeffSeparator), precision(_precision), flags(_flags) + { + rowSpacer = ""; + int i = int(matSuffix.length())-1; + while (i>=0 && matSuffix[i]!='\n') + { + rowSpacer += ' '; + i--; + } + } + std::string matPrefix, matSuffix; + std::string rowPrefix, rowSuffix, rowSeparator, rowSpacer; + std::string coeffSeparator; + int precision; + int flags; +}; + +/** \class WithFormat + * \ingroup Core_Module + * + * \brief Pseudo expression providing matrix output with given format + * + * \param ExpressionType the type of the object on which IO stream operations are performed + * + * This class represents an expression with stream operators controlled by a given IOFormat. + * It is the return type of DenseBase::format() + * and most of the time this is the only way it is used. + * + * See class IOFormat for some examples. + * + * \sa DenseBase::format(), class IOFormat + */ +template +class WithFormat +{ + public: + + WithFormat(const ExpressionType& matrix, const IOFormat& format) + : m_matrix(matrix), m_format(format) + {} + + friend std::ostream & operator << (std::ostream & s, const WithFormat& wf) + { + return internal::print_matrix(s, wf.m_matrix.eval(), wf.m_format); + } + + protected: + const typename ExpressionType::Nested m_matrix; + IOFormat m_format; +}; + +/** \returns a WithFormat proxy object allowing to print a matrix the with given + * format \a fmt. + * + * See class IOFormat for some examples. + * + * \sa class IOFormat, class WithFormat + */ +template +inline const WithFormat +DenseBase::format(const IOFormat& fmt) const +{ + return WithFormat(derived(), fmt); +} + +namespace internal { + +template +struct significant_decimals_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline int run() + { + using std::ceil; + return cast(ceil(-log(NumTraits::epsilon())/log(RealScalar(10)))); + } +}; + +template +struct significant_decimals_default_impl +{ + static inline int run() + { + return 0; + } +}; + +template +struct significant_decimals_impl + : significant_decimals_default_impl::IsInteger> +{}; + +/** \internal + * print the matrix \a _m to the output stream \a s using the output format \a fmt */ +template +std::ostream & print_matrix(std::ostream & s, const Derived& _m, const IOFormat& fmt) +{ + if(_m.size() == 0) + { + s << fmt.matPrefix << fmt.matSuffix; + return s; + } + + typename Derived::Nested m = _m; + typedef typename Derived::Scalar Scalar; + typedef typename Derived::Index Index; + + Index width = 0; + + std::streamsize explicit_precision; + if(fmt.precision == StreamPrecision) + { + explicit_precision = 0; + } + else if(fmt.precision == FullPrecision) + { + if (NumTraits::IsInteger) + { + explicit_precision = 0; + } + else + { + explicit_precision = significant_decimals_impl::run(); + } + } + else + { + explicit_precision = fmt.precision; + } + + bool align_cols = !(fmt.flags & DontAlignCols); + if(align_cols) + { + // compute the largest width + for(Index j = 1; j < m.cols(); ++j) + for(Index i = 0; i < m.rows(); ++i) + { + std::stringstream sstr; + if(explicit_precision) sstr.precision(explicit_precision); + sstr << m.coeff(i,j); + width = std::max(width, Index(sstr.str().length())); + } + } + std::streamsize old_precision = 0; + if(explicit_precision) old_precision = s.precision(explicit_precision); + s << fmt.matPrefix; + for(Index i = 0; i < m.rows(); ++i) + { + if (i) + s << fmt.rowSpacer; + s << fmt.rowPrefix; + if(width) s.width(width); + s << m.coeff(i, 0); + for(Index j = 1; j < m.cols(); ++j) + { + s << fmt.coeffSeparator; + if (width) s.width(width); + s << m.coeff(i, j); + } + s << fmt.rowSuffix; + if( i < m.rows() - 1) + s << fmt.rowSeparator; + } + s << fmt.matSuffix; + if(explicit_precision) s.precision(old_precision); + return s; +} + +} // end namespace internal + +/** \relates DenseBase + * + * Outputs the matrix, to the given stream. + * + * If you wish to print the matrix with a format different than the default, use DenseBase::format(). + * + * It is also possible to change the default format by defining EIGEN_DEFAULT_IO_FORMAT before including Eigen headers. + * If not defined, this will automatically be defined to Eigen::IOFormat(), that is the Eigen::IOFormat with default parameters. + * + * \sa DenseBase::format() + */ +template +std::ostream & operator << +(std::ostream & s, + const DenseBase & m) +{ + return internal::print_matrix(s, m.eval(), EIGEN_DEFAULT_IO_FORMAT); +} + +} // end namespace Eigen + +#endif // EIGEN_IO_H diff --git a/Biopool/Sources/Eigen/src/Core/Map.h b/Biopool/Sources/Eigen/src/Core/Map.h new file mode 100644 index 0000000..360a228 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Map.h @@ -0,0 +1,207 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MAP_H +#define EIGEN_MAP_H + +namespace Eigen { + +/** \class Map + * \ingroup Core_Module + * + * \brief A matrix or vector expression mapping an existing array of data. + * + * \tparam PlainObjectType the equivalent matrix type of the mapped data + * \tparam MapOptions specifies whether the pointer is \c #Aligned, or \c #Unaligned. + * The default is \c #Unaligned. + * \tparam StrideType optionally specifies strides. By default, Map assumes the memory layout + * of an ordinary, contiguous array. This can be overridden by specifying strides. + * The type passed here must be a specialization of the Stride template, see examples below. + * + * This class represents a matrix or vector expression mapping an existing array of data. + * It can be used to let Eigen interface without any overhead with non-Eigen data structures, + * such as plain C arrays or structures from other libraries. By default, it assumes that the + * data is laid out contiguously in memory. You can however override this by explicitly specifying + * inner and outer strides. + * + * Here's an example of simply mapping a contiguous array as a \ref TopicStorageOrders "column-major" matrix: + * \include Map_simple.cpp + * Output: \verbinclude Map_simple.out + * + * If you need to map non-contiguous arrays, you can do so by specifying strides: + * + * Here's an example of mapping an array as a vector, specifying an inner stride, that is, the pointer + * increment between two consecutive coefficients. Here, we're specifying the inner stride as a compile-time + * fixed value. + * \include Map_inner_stride.cpp + * Output: \verbinclude Map_inner_stride.out + * + * Here's an example of mapping an array while specifying an outer stride. Here, since we're mapping + * as a column-major matrix, 'outer stride' means the pointer increment between two consecutive columns. + * Here, we're specifying the outer stride as a runtime parameter. Note that here \c OuterStride<> is + * a short version of \c OuterStride because the default template parameter of OuterStride + * is \c Dynamic + * \include Map_outer_stride.cpp + * Output: \verbinclude Map_outer_stride.out + * + * For more details and for an example of specifying both an inner and an outer stride, see class Stride. + * + * \b Tip: to change the array of data mapped by a Map object, you can use the C++ + * placement new syntax: + * + * Example: \include Map_placement_new.cpp + * Output: \verbinclude Map_placement_new.out + * + * This class is the return type of PlainObjectBase::Map() but can also be used directly. + * + * \sa PlainObjectBase::Map(), \ref TopicStorageOrders + */ + +namespace internal { +template +struct traits > + : public traits +{ + typedef traits TraitsBase; + typedef typename PlainObjectType::Index Index; + typedef typename PlainObjectType::Scalar Scalar; + enum { + InnerStrideAtCompileTime = StrideType::InnerStrideAtCompileTime == 0 + ? int(PlainObjectType::InnerStrideAtCompileTime) + : int(StrideType::InnerStrideAtCompileTime), + OuterStrideAtCompileTime = StrideType::OuterStrideAtCompileTime == 0 + ? int(PlainObjectType::OuterStrideAtCompileTime) + : int(StrideType::OuterStrideAtCompileTime), + HasNoInnerStride = InnerStrideAtCompileTime == 1, + HasNoOuterStride = StrideType::OuterStrideAtCompileTime == 0, + HasNoStride = HasNoInnerStride && HasNoOuterStride, + IsAligned = bool(EIGEN_ALIGN) && ((int(MapOptions)&Aligned)==Aligned), + IsDynamicSize = PlainObjectType::SizeAtCompileTime==Dynamic, + KeepsPacketAccess = bool(HasNoInnerStride) + && ( bool(IsDynamicSize) + || HasNoOuterStride + || ( OuterStrideAtCompileTime!=Dynamic + && ((static_cast(sizeof(Scalar))*OuterStrideAtCompileTime)%16)==0 ) ), + Flags0 = TraitsBase::Flags & (~NestByRefBit), + Flags1 = IsAligned ? (int(Flags0) | AlignedBit) : (int(Flags0) & ~AlignedBit), + Flags2 = (bool(HasNoStride) || bool(PlainObjectType::IsVectorAtCompileTime)) + ? int(Flags1) : int(Flags1 & ~LinearAccessBit), + Flags3 = is_lvalue::value ? int(Flags2) : (int(Flags2) & ~LvalueBit), + Flags = KeepsPacketAccess ? int(Flags3) : (int(Flags3) & ~PacketAccessBit) + }; +private: + enum { Options }; // Expressions don't have Options +}; +} + +template class Map + : public MapBase > +{ + public: + + typedef MapBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Map) + + typedef typename Base::PointerType PointerType; +#if EIGEN2_SUPPORT_STAGE <= STAGE30_FULL_EIGEN3_API + typedef const Scalar* PointerArgType; + inline PointerType cast_to_pointer_type(PointerArgType ptr) { return const_cast(ptr); } +#else + typedef PointerType PointerArgType; + inline PointerType cast_to_pointer_type(PointerArgType ptr) { return ptr; } +#endif + + inline Index innerStride() const + { + return StrideType::InnerStrideAtCompileTime != 0 ? m_stride.inner() : 1; + } + + inline Index outerStride() const + { + return StrideType::OuterStrideAtCompileTime != 0 ? m_stride.outer() + : IsVectorAtCompileTime ? this->size() + : int(Flags)&RowMajorBit ? this->cols() + : this->rows(); + } + + /** Constructor in the fixed-size case. + * + * \param data pointer to the array to map + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data)), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size vector case. + * + * \param data pointer to the array to map + * \param size the size of the vector expression + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, Index size, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data), size), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size matrix case. + * + * \param data pointer to the array to map + * \param rows the number of rows of the matrix expression + * \param cols the number of columns of the matrix expression + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, Index rows, Index cols, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data), rows, cols), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map) + + protected: + StrideType m_stride; +}; + +template +inline Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> + ::Array(const Scalar *data) +{ + this->_set_noalias(Eigen::Map(data)); +} + +template +inline Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> + ::Matrix(const Scalar *data) +{ + this->_set_noalias(Eigen::Map(data)); +} + +} // end namespace Eigen + +#endif // EIGEN_MAP_H diff --git a/Biopool/Sources/Eigen/src/Core/MapBase.h b/Biopool/Sources/Eigen/src/Core/MapBase.h new file mode 100644 index 0000000..2b736cb --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/MapBase.h @@ -0,0 +1,257 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MAPBASE_H +#define EIGEN_MAPBASE_H + +#define EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) \ + EIGEN_STATIC_ASSERT((int(internal::traits::Flags) & LinearAccessBit) || Derived::IsVectorAtCompileTime, \ + YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT) + +namespace Eigen { + +/** \class MapBase + * \ingroup Core_Module + * + * \brief Base class for Map and Block expression with direct access + * + * \sa class Map, class Block + */ +template class MapBase + : public internal::dense_xpr_base::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + enum { + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + SizeAtCompileTime = Base::SizeAtCompileTime + }; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + typedef typename internal::conditional< + bool(internal::is_lvalue::value), + Scalar *, + const Scalar *>::type + PointerType; + + using Base::derived; +// using Base::RowsAtCompileTime; +// using Base::ColsAtCompileTime; +// using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::IsRowMajor; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::eval; + + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + + // bug 217 - compile error on ICC 11.1 + using Base::operator=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + + inline Index rows() const { return m_rows.value(); } + inline Index cols() const { return m_cols.value(); } + + /** Returns a pointer to the first coefficient of the matrix or vector. + * + * \note When addressing this data, make sure to honor the strides returned by innerStride() and outerStride(). + * + * \sa innerStride(), outerStride() + */ + inline const Scalar* data() const { return m_data; } + + inline const Scalar& coeff(Index row, Index col) const + { + return m_data[col * colStride() + row * rowStride()]; + } + + inline const Scalar& coeff(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return m_data[index * innerStride()]; + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return this->m_data[col * colStride() + row * rowStride()]; + } + + inline const Scalar& coeffRef(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return this->m_data[index * innerStride()]; + } + + template + inline PacketScalar packet(Index row, Index col) const + { + return internal::ploadt + (m_data + (col * colStride() + row * rowStride())); + } + + template + inline PacketScalar packet(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return internal::ploadt(m_data + index * innerStride()); + } + + inline MapBase(PointerType data) : m_data(data), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime) + { + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + checkSanity(); + } + + inline MapBase(PointerType data, Index size) + : m_data(data), + m_rows(RowsAtCompileTime == Dynamic ? size : Index(RowsAtCompileTime)), + m_cols(ColsAtCompileTime == Dynamic ? size : Index(ColsAtCompileTime)) + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + eigen_assert(size >= 0); + eigen_assert(data == 0 || SizeAtCompileTime == Dynamic || SizeAtCompileTime == size); + checkSanity(); + } + + inline MapBase(PointerType data, Index rows, Index cols) + : m_data(data), m_rows(rows), m_cols(cols) + { + eigen_assert( (data == 0) + || ( rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols))); + checkSanity(); + } + + protected: + + void checkSanity() const + { + EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(internal::traits::Flags&PacketAccessBit, + internal::inner_stride_at_compile_time::ret==1), + PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1); + eigen_assert(EIGEN_IMPLIES(internal::traits::Flags&AlignedBit, (size_t(m_data) % 16) == 0) + && "data is not aligned"); + } + + PointerType m_data; + const internal::variable_if_dynamic m_rows; + const internal::variable_if_dynamic m_cols; +}; + +template class MapBase + : public MapBase +{ + public: + + typedef MapBase Base; + + typedef typename Base::Scalar Scalar; + typedef typename Base::PacketScalar PacketScalar; + typedef typename Base::Index Index; + typedef typename Base::PointerType PointerType; + + using Base::derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + + typedef typename internal::conditional< + internal::is_lvalue::value, + Scalar, + const Scalar + >::type ScalarWithConstIfNotLvalue; + + inline const Scalar* data() const { return this->m_data; } + inline ScalarWithConstIfNotLvalue* data() { return this->m_data; } // no const-cast here so non-const-correct code will give a compile error + + inline ScalarWithConstIfNotLvalue& coeffRef(Index row, Index col) + { + return this->m_data[col * colStride() + row * rowStride()]; + } + + inline ScalarWithConstIfNotLvalue& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return this->m_data[index * innerStride()]; + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + internal::pstoret + (this->m_data + (col * colStride() + row * rowStride()), x); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + internal::pstoret + (this->m_data + index * innerStride(), x); + } + + explicit inline MapBase(PointerType data) : Base(data) {} + inline MapBase(PointerType data, Index size) : Base(data, size) {} + inline MapBase(PointerType data, Index rows, Index cols) : Base(data, rows, cols) {} + + Derived& operator=(const MapBase& other) + { + Base::Base::operator=(other); + return derived(); + } + + using Base::Base::operator=; +}; + +} // end namespace Eigen + +#endif // EIGEN_MAPBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/MathFunctions.h b/Biopool/Sources/Eigen/src/Core/MathFunctions.h new file mode 100644 index 0000000..ab153c1 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/MathFunctions.h @@ -0,0 +1,857 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATHFUNCTIONS_H +#define EIGEN_MATHFUNCTIONS_H + +namespace Eigen { + +namespace internal { + +/** \internal \struct global_math_functions_filtering_base + * + * What it does: + * Defines a typedef 'type' as follows: + * - if type T has a member typedef Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl, then + * global_math_functions_filtering_base::type is a typedef for it. + * - otherwise, global_math_functions_filtering_base::type is a typedef for T. + * + * How it's used: + * To allow to defined the global math functions (like sin...) in certain cases, like the Array expressions. + * When you do sin(array1+array2), the object array1+array2 has a complicated expression type, all what you want to know + * is that it inherits ArrayBase. So we implement a partial specialization of sin_impl for ArrayBase. + * So we must make sure to use sin_impl > and not sin_impl, otherwise our partial specialization + * won't be used. How does sin know that? That's exactly what global_math_functions_filtering_base tells it. + * + * How it's implemented: + * SFINAE in the style of enable_if. Highly susceptible of breaking compilers. With GCC, it sure does work, but if you replace + * the typename dummy by an integer template parameter, it doesn't work anymore! + */ + +template +struct global_math_functions_filtering_base +{ + typedef T type; +}; + +template struct always_void { typedef void type; }; + +template +struct global_math_functions_filtering_base + ::type + > +{ + typedef typename T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl type; +}; + +#define EIGEN_MATHFUNC_IMPL(func, scalar) func##_impl::type> +#define EIGEN_MATHFUNC_RETVAL(func, scalar) typename func##_retval::type>::type + + +/**************************************************************************** +* Implementation of real * +****************************************************************************/ + +template +struct real_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x; + } +}; + +template +struct real_impl > +{ + static inline RealScalar run(const std::complex& x) + { + using std::real; + return real(x); + } +}; + +template +struct real_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(real, Scalar) real(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(real, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of imag * +****************************************************************************/ + +template +struct imag_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar&) + { + return RealScalar(0); + } +}; + +template +struct imag_impl > +{ + static inline RealScalar run(const std::complex& x) + { + using std::imag; + return imag(x); + } +}; + +template +struct imag_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(imag, Scalar) imag(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(imag, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of real_ref * +****************************************************************************/ + +template +struct real_ref_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar& run(Scalar& x) + { + return reinterpret_cast(&x)[0]; + } + static inline const RealScalar& run(const Scalar& x) + { + return reinterpret_cast(&x)[0]; + } +}; + +template +struct real_ref_retval +{ + typedef typename NumTraits::Real & type; +}; + +template +inline typename add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) >::type real_ref(const Scalar& x) +{ + return real_ref_impl::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) real_ref(Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(real_ref, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of imag_ref * +****************************************************************************/ + +template +struct imag_ref_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar& run(Scalar& x) + { + return reinterpret_cast(&x)[1]; + } + static inline const RealScalar& run(const Scalar& x) + { + return reinterpret_cast(&x)[1]; + } +}; + +template +struct imag_ref_default_impl +{ + static inline Scalar run(Scalar&) + { + return Scalar(0); + } + static inline const Scalar run(const Scalar&) + { + return Scalar(0); + } +}; + +template +struct imag_ref_impl : imag_ref_default_impl::IsComplex> {}; + +template +struct imag_ref_retval +{ + typedef typename NumTraits::Real & type; +}; + +template +inline typename add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) >::type imag_ref(const Scalar& x) +{ + return imag_ref_impl::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) imag_ref(Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(imag_ref, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of conj * +****************************************************************************/ + +template +struct conj_impl +{ + static inline Scalar run(const Scalar& x) + { + return x; + } +}; + +template +struct conj_impl > +{ + static inline std::complex run(const std::complex& x) + { + using std::conj; + return conj(x); + } +}; + +template +struct conj_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(conj, Scalar) conj(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(conj, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of abs * +****************************************************************************/ + +template +struct abs_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + using std::abs; + return abs(x); + } +}; + +template +struct abs_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(abs, Scalar) abs(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(abs, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of abs2 * +****************************************************************************/ + +template +struct abs2_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x*x; + } +}; + +template +struct abs2_impl > +{ + static inline RealScalar run(const std::complex& x) + { + return real(x)*real(x) + imag(x)*imag(x); + } +}; + +template +struct abs2_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(abs2, Scalar) abs2(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(abs2, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of norm1 * +****************************************************************************/ + +template +struct norm1_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return abs(real(x)) + abs(imag(x)); + } +}; + +template +struct norm1_default_impl +{ + static inline Scalar run(const Scalar& x) + { + return abs(x); + } +}; + +template +struct norm1_impl : norm1_default_impl::IsComplex> {}; + +template +struct norm1_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(norm1, Scalar) norm1(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(norm1, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of hypot * +****************************************************************************/ + +template +struct hypot_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x, const Scalar& y) + { + using std::max; + using std::min; + RealScalar _x = abs(x); + RealScalar _y = abs(y); + RealScalar p = (max)(_x, _y); + RealScalar q = (min)(_x, _y); + RealScalar qp = q/p; + return p * sqrt(RealScalar(1) + qp*qp); + } +}; + +template +struct hypot_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(hypot, Scalar) hypot(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of cast * +****************************************************************************/ + +template +struct cast_impl +{ + static inline NewType run(const OldType& x) + { + return static_cast(x); + } +}; + +// here, for once, we're plainly returning NewType: we don't want cast to do weird things. + +template +inline NewType cast(const OldType& x) +{ + return cast_impl::run(x); +} + +/**************************************************************************** +* Implementation of sqrt * +****************************************************************************/ + +template +struct sqrt_default_impl +{ + static inline Scalar run(const Scalar& x) + { + using std::sqrt; + return sqrt(x); + } +}; + +template +struct sqrt_default_impl +{ + static inline Scalar run(const Scalar&) + { +#ifdef EIGEN2_SUPPORT + eigen_assert(!NumTraits::IsInteger); +#else + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) +#endif + return Scalar(0); + } +}; + +template +struct sqrt_impl : sqrt_default_impl::IsInteger> {}; + +template +struct sqrt_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(sqrt, Scalar) sqrt(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(sqrt, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of standard unary real functions (exp, log, sin, cos, ... * +****************************************************************************/ + +// This macro instanciate all the necessary template mechanism which is common to all unary real functions. +#define EIGEN_MATHFUNC_STANDARD_REAL_UNARY(NAME) \ + template struct NAME##_default_impl { \ + static inline Scalar run(const Scalar& x) { using std::NAME; return NAME(x); } \ + }; \ + template struct NAME##_default_impl { \ + static inline Scalar run(const Scalar&) { \ + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) \ + return Scalar(0); \ + } \ + }; \ + template struct NAME##_impl \ + : NAME##_default_impl::IsInteger> \ + {}; \ + template struct NAME##_retval { typedef Scalar type; }; \ + template \ + inline EIGEN_MATHFUNC_RETVAL(NAME, Scalar) NAME(const Scalar& x) { \ + return EIGEN_MATHFUNC_IMPL(NAME, Scalar)::run(x); \ + } + +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(exp) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(log) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(sin) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(cos) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(tan) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(asin) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(acos) + +/**************************************************************************** +* Implementation of atan2 * +****************************************************************************/ + +template +struct atan2_default_impl +{ + typedef Scalar retval; + static inline Scalar run(const Scalar& x, const Scalar& y) + { + using std::atan2; + return atan2(x, y); + } +}; + +template +struct atan2_default_impl +{ + static inline Scalar run(const Scalar&, const Scalar&) + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) + return Scalar(0); + } +}; + +template +struct atan2_impl : atan2_default_impl::IsInteger> {}; + +template +struct atan2_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(atan2, Scalar) atan2(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(atan2, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of pow * +****************************************************************************/ + +template +struct pow_default_impl +{ + typedef Scalar retval; + static inline Scalar run(const Scalar& x, const Scalar& y) + { + using std::pow; + return pow(x, y); + } +}; + +template +struct pow_default_impl +{ + static inline Scalar run(Scalar x, Scalar y) + { + Scalar res(1); + eigen_assert(!NumTraits::IsSigned || y >= 0); + if(y & 1) res *= x; + y >>= 1; + while(y) + { + x *= x; + if(y&1) res *= x; + y >>= 1; + } + return res; + } +}; + +template +struct pow_impl : pow_default_impl::IsInteger> {}; + +template +struct pow_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(pow, Scalar) pow(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(pow, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of random * +****************************************************************************/ + +template +struct random_default_impl {}; + +template +struct random_impl : random_default_impl::IsComplex, NumTraits::IsInteger> {}; + +template +struct random_retval +{ + typedef Scalar type; +}; + +template inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y); +template inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(); + +template +struct random_default_impl +{ + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return x + (y-x) * Scalar(std::rand()) / Scalar(RAND_MAX); + } + static inline Scalar run() + { + return run(Scalar(NumTraits::IsSigned ? -1 : 0), Scalar(1)); + } +}; + +enum { + floor_log2_terminate, + floor_log2_move_up, + floor_log2_move_down, + floor_log2_bogus +}; + +template struct floor_log2_selector +{ + enum { middle = (lower + upper) / 2, + value = (upper <= lower + 1) ? int(floor_log2_terminate) + : (n < (1 << middle)) ? int(floor_log2_move_down) + : (n==0) ? int(floor_log2_bogus) + : int(floor_log2_move_up) + }; +}; + +template::value> +struct floor_log2 {}; + +template +struct floor_log2 +{ + enum { value = floor_log2::middle>::value }; +}; + +template +struct floor_log2 +{ + enum { value = floor_log2::middle, upper>::value }; +}; + +template +struct floor_log2 +{ + enum { value = (n >= ((unsigned int)(1) << (lower+1))) ? lower+1 : lower }; +}; + +template +struct floor_log2 +{ + // no value, error at compile time +}; + +template +struct random_default_impl +{ + typedef typename NumTraits::NonInteger NonInteger; + + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return x + Scalar((NonInteger(y)-x+1) * std::rand() / (RAND_MAX + NonInteger(1))); + } + + static inline Scalar run() + { +#ifdef EIGEN_MAKING_DOCS + return run(Scalar(NumTraits::IsSigned ? -10 : 0), Scalar(10)); +#else + enum { rand_bits = floor_log2<(unsigned int)(RAND_MAX)+1>::value, + scalar_bits = sizeof(Scalar) * CHAR_BIT, + shift = EIGEN_PLAIN_ENUM_MAX(0, int(rand_bits) - int(scalar_bits)) + }; + Scalar x = Scalar(std::rand() >> shift); + Scalar offset = NumTraits::IsSigned ? Scalar(1 << (rand_bits-1)) : Scalar(0); + return x - offset; +#endif + } +}; + +template +struct random_default_impl +{ + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return Scalar(random(real(x), real(y)), + random(imag(x), imag(y))); + } + static inline Scalar run() + { + typedef typename NumTraits::Real RealScalar; + return Scalar(random(), random()); + } +}; + +template +inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(x, y); +} + +template +inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random() +{ + return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(); +} + +/**************************************************************************** +* Implementation of fuzzy comparisons * +****************************************************************************/ + +template +struct scalar_fuzzy_default_impl {}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, const RealScalar& prec) + { + return abs(x) <= abs(y) * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + using std::min; + return abs(x - y) <= (min)(abs(x), abs(y)) * prec; + } + static inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + return x <= y || isApprox(x, y, prec); + } +}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const Scalar&, const RealScalar&) + { + return x == Scalar(0); + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar&) + { + return x == y; + } + static inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, const RealScalar&) + { + return x <= y; + } +}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, const RealScalar& prec) + { + return abs2(x) <= abs2(y) * prec * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + using std::min; + return abs2(x - y) <= (min)(abs2(x), abs2(y)) * prec * prec; + } +}; + +template +struct scalar_fuzzy_impl : scalar_fuzzy_default_impl::IsComplex, NumTraits::IsInteger> {}; + +template +inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::template isMuchSmallerThan(x, y, precision); +} + +template +inline bool isApprox(const Scalar& x, const Scalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::isApprox(x, y, precision); +} + +template +inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::isApproxOrLessThan(x, y, precision); +} + +/****************************************** +*** The special case of the bool type *** +******************************************/ + +template<> struct random_impl +{ + static inline bool run() + { + return random(0,1)==0 ? false : true; + } +}; + +template<> struct scalar_fuzzy_impl +{ + typedef bool RealScalar; + + template + static inline bool isMuchSmallerThan(const bool& x, const bool&, const bool&) + { + return !x; + } + + static inline bool isApprox(bool x, bool y, bool) + { + return x == y; + } + + static inline bool isApproxOrLessThan(const bool& x, const bool& y, const bool&) + { + return (!x) || y; + } + +}; + +/**************************************************************************** +* Special functions * +****************************************************************************/ + +// std::isfinite is non standard, so let's define our own version, +// even though it is not very efficient. +template bool isfinite(const T& x) +{ + return x::highest() && x>NumTraits::lowest(); +} + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_MATHFUNCTIONS_H diff --git a/Biopool/Sources/Eigen/src/Core/Matrix.h b/Biopool/Sources/Eigen/src/Core/Matrix.h new file mode 100644 index 0000000..8742a01 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Matrix.h @@ -0,0 +1,420 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// Copyright (C) 2008-2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIX_H +#define EIGEN_MATRIX_H + +namespace Eigen { + +/** \class Matrix + * \ingroup Core_Module + * + * \brief The matrix class, also used for vectors and row-vectors + * + * The %Matrix class is the work-horse for all \em dense (\ref dense "note") matrices and vectors within Eigen. + * Vectors are matrices with one column, and row-vectors are matrices with one row. + * + * The %Matrix class encompasses \em both fixed-size and dynamic-size objects (\ref fixedsize "note"). + * + * The first three template parameters are required: + * \tparam _Scalar \anchor matrix_tparam_scalar Numeric type, e.g. float, double, int or std::complex. + * User defined sclar types are supported as well (see \ref user_defined_scalars "here"). + * \tparam _Rows Number of rows, or \b Dynamic + * \tparam _Cols Number of columns, or \b Dynamic + * + * The remaining template parameters are optional -- in most cases you don't have to worry about them. + * \tparam _Options \anchor matrix_tparam_options A combination of either \b #RowMajor or \b #ColMajor, and of either + * \b #AutoAlign or \b #DontAlign. + * The former controls \ref TopicStorageOrders "storage order", and defaults to column-major. The latter controls alignment, which is required + * for vectorization. It defaults to aligning matrices except for fixed sizes that aren't a multiple of the packet size. + * \tparam _MaxRows Maximum number of rows. Defaults to \a _Rows (\ref maxrows "note"). + * \tparam _MaxCols Maximum number of columns. Defaults to \a _Cols (\ref maxrows "note"). + * + * Eigen provides a number of typedefs covering the usual cases. Here are some examples: + * + * \li \c Matrix2d is a 2x2 square matrix of doubles (\c Matrix) + * \li \c Vector4f is a vector of 4 floats (\c Matrix) + * \li \c RowVector3i is a row-vector of 3 ints (\c Matrix) + * + * \li \c MatrixXf is a dynamic-size matrix of floats (\c Matrix) + * \li \c VectorXf is a dynamic-size vector of floats (\c Matrix) + * + * \li \c Matrix2Xf is a partially fixed-size (dynamic-size) matrix of floats (\c Matrix) + * \li \c MatrixX3d is a partially dynamic-size (fixed-size) matrix of double (\c Matrix) + * + * See \link matrixtypedefs this page \endlink for a complete list of predefined \em %Matrix and \em Vector typedefs. + * + * You can access elements of vectors and matrices using normal subscripting: + * + * \code + * Eigen::VectorXd v(10); + * v[0] = 0.1; + * v[1] = 0.2; + * v(0) = 0.3; + * v(1) = 0.4; + * + * Eigen::MatrixXi m(10, 10); + * m(0, 1) = 1; + * m(0, 2) = 2; + * m(0, 3) = 3; + * \endcode + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_MATRIX_PLUGIN. + * + * Some notes: + * + *
+ *
\anchor dense Dense versus sparse:
+ *
This %Matrix class handles dense, not sparse matrices and vectors. For sparse matrices and vectors, see the Sparse module. + * + * Dense matrices and vectors are plain usual arrays of coefficients. All the coefficients are stored, in an ordinary contiguous array. + * This is unlike Sparse matrices and vectors where the coefficients are stored as a list of nonzero coefficients.
+ * + *
\anchor fixedsize Fixed-size versus dynamic-size:
+ *
Fixed-size means that the numbers of rows and columns are known are compile-time. In this case, Eigen allocates the array + * of coefficients as a fixed-size array, as a class member. This makes sense for very small matrices, typically up to 4x4, sometimes up + * to 16x16. Larger matrices should be declared as dynamic-size even if one happens to know their size at compile-time. + * + * Dynamic-size means that the numbers of rows or columns are not necessarily known at compile-time. In this case they are runtime + * variables, and the array of coefficients is allocated dynamically on the heap. + * + * Note that \em dense matrices, be they Fixed-size or Dynamic-size, do not expand dynamically in the sense of a std::map. + * If you want this behavior, see the Sparse module.
+ * + *
\anchor maxrows _MaxRows and _MaxCols:
+ *
In most cases, one just leaves these parameters to the default values. + * These parameters mean the maximum size of rows and columns that the matrix may have. They are useful in cases + * when the exact numbers of rows and columns are not known are compile-time, but it is known at compile-time that they cannot + * exceed a certain value. This happens when taking dynamic-size blocks inside fixed-size matrices: in this case _MaxRows and _MaxCols + * are the dimensions of the original matrix, while _Rows and _Cols are Dynamic.
+ *
+ * + * \see MatrixBase for the majority of the API methods for matrices, \ref TopicClassHierarchy, + * \ref TopicStorageOrders + */ + +namespace internal { +template +struct traits > +{ + typedef _Scalar Scalar; + typedef Dense StorageKind; + typedef DenseIndex Index; + typedef MatrixXpr XprKind; + enum { + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _MaxRows, + MaxColsAtCompileTime = _MaxCols, + Flags = compute_matrix_flags<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::ret, + CoeffReadCost = NumTraits::ReadCost, + Options = _Options, + InnerStrideAtCompileTime = 1, + OuterStrideAtCompileTime = (Options&RowMajor) ? ColsAtCompileTime : RowsAtCompileTime + }; +}; +} + +template +class Matrix + : public PlainObjectBase > +{ + public: + + /** \brief Base class typedef. + * \sa PlainObjectBase + */ + typedef PlainObjectBase Base; + + enum { Options = _Options }; + + EIGEN_DENSE_PUBLIC_INTERFACE(Matrix) + + typedef typename Base::PlainObject PlainObject; + + using Base::base; + using Base::coeffRef; + + /** + * \brief Assigns matrices to each other. + * + * \note This is a special case of the templated operator=. Its purpose is + * to prevent a default operator= from hiding the templated operator=. + * + * \callgraph + */ + EIGEN_STRONG_INLINE Matrix& operator=(const Matrix& other) + { + return Base::_set(other); + } + + /** \internal + * \brief Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE Matrix& operator=(const MatrixBase& other) + { + return Base::_set(other); + } + + /* Here, doxygen failed to copy the brief information when using \copydoc */ + + /** + * \brief Copies the generic expression \a other into *this. + * \copydetails DenseBase::operator=(const EigenBase &other) + */ + template + EIGEN_STRONG_INLINE Matrix& operator=(const EigenBase &other) + { + return Base::operator=(other); + } + + template + EIGEN_STRONG_INLINE Matrix& operator=(const ReturnByValue& func) + { + return Base::operator=(func); + } + + /** \brief Default constructor. + * + * For fixed-size matrices, does nothing. + * + * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix + * is called a null matrix. This constructor is the unique way to create null matrices: resizing + * a matrix to 0 is not supported. + * + * \sa resize(Index,Index) + */ + EIGEN_STRONG_INLINE explicit Matrix() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + // FIXME is it still needed + Matrix(internal::constructor_without_unaligned_array_assert) + : Base(internal::constructor_without_unaligned_array_assert()) + { Base::_check_template_params(); EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED } + + /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors + * + * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, + * it is redundant to pass the dimension here, so it makes more sense to use the default + * constructor Matrix() instead. + */ + EIGEN_STRONG_INLINE explicit Matrix(Index dim) + : Base(dim, RowsAtCompileTime == 1 ? 1 : dim, ColsAtCompileTime == 1 ? 1 : dim) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Matrix) + eigen_assert(dim >= 0); + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == dim); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE Matrix(const T0& x, const T1& y) + { + Base::_check_template_params(); + Base::template _init2(x, y); + } + #else + /** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns. + * + * This is useful for dynamic-size matrices. For fixed-size matrices, + * it is redundant to pass these parameters, so one should use the default constructor + * Matrix() instead. */ + Matrix(Index rows, Index cols); + /** \brief Constructs an initialized 2D vector with given coefficients */ + Matrix(const Scalar& x, const Scalar& y); + #endif + + /** \brief Constructs an initialized 3D vector with given coefficients */ + EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + } + /** \brief Constructs an initialized 4D vector with given coefficients */ + EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + m_storage.data()[3] = w; + } + + explicit Matrix(const Scalar *data); + + /** \brief Constructor copying the value of the expression \a other */ + template + EIGEN_STRONG_INLINE Matrix(const MatrixBase& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + // This test resides here, to bring the error messages closer to the user. Normally, these checks + // are performed deeply within the library, thus causing long and scary error traces. + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** \brief Copy constructor */ + EIGEN_STRONG_INLINE Matrix(const Matrix& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** \brief Copy constructor with in-place evaluation */ + template + EIGEN_STRONG_INLINE Matrix(const ReturnByValue& other) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + other.evalTo(*this); + } + + /** \brief Copy constructor for generic expressions. + * \sa MatrixBase::operator=(const EigenBase&) + */ + template + EIGEN_STRONG_INLINE Matrix(const EigenBase &other) + : Base(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + // FIXME/CHECK: isn't *this = other.derived() more efficient. it allows to + // go for pure _set() implementations, right? + *this = other; + } + + /** \internal + * \brief Override MatrixBase::swap() since for dynamic-sized matrices + * of same type it is enough to swap the data pointers. + */ + template + void swap(MatrixBase const & other) + { this->_swap(other.derived()); } + + inline Index innerStride() const { return 1; } + inline Index outerStride() const { return this->innerSize(); } + + /////////// Geometry module /////////// + + template + explicit Matrix(const RotationBase& r); + template + Matrix& operator=(const RotationBase& r); + + #ifdef EIGEN2_SUPPORT + template + explicit Matrix(const eigen2_RotationBase& r); + template + Matrix& operator=(const eigen2_RotationBase& r); + #endif + + // allow to extend Matrix outside Eigen + #ifdef EIGEN_MATRIX_PLUGIN + #include EIGEN_MATRIX_PLUGIN + #endif + + protected: + template + friend struct internal::conservative_resize_like_impl; + + using Base::m_storage; +}; + +/** \defgroup matrixtypedefs Global matrix typedefs + * + * \ingroup Core_Module + * + * Eigen defines several typedef shortcuts for most common matrix and vector types. + * + * The general patterns are the following: + * + * \c MatrixSizeType where \c Size can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size, + * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd + * for complex double. + * + * For example, \c Matrix3d is a fixed-size 3x3 matrix type of doubles, and \c MatrixXf is a dynamic-size matrix of floats. + * + * There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is + * a fixed-size vector of 4 complex floats. + * + * \sa class Matrix + */ + +#define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##SizeSuffix##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Vector##SizeSuffix##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##Size##X##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##X##Size##TypeSuffix; + +#define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4) + +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int, i) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double, d) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex, cf) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex, cd) + +#undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES +#undef EIGEN_MAKE_TYPEDEFS +#undef EIGEN_MAKE_FIXED_TYPEDEFS + +} // end namespace Eigen + +#endif // EIGEN_MATRIX_H diff --git a/Biopool/Sources/Eigen/src/Core/MatrixBase.h b/Biopool/Sources/Eigen/src/Core/MatrixBase.h new file mode 100644 index 0000000..5a744c5 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/MatrixBase.h @@ -0,0 +1,526 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2009 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIXBASE_H +#define EIGEN_MATRIXBASE_H + +namespace Eigen { + +/** \class MatrixBase + * \ingroup Core_Module + * + * \brief Base class for all dense matrices, vectors, and expressions + * + * This class is the base that is inherited by all matrix, vector, and related expression + * types. Most of the Eigen API is contained in this class, and its base classes. Other important + * classes for the Eigen API are Matrix, and VectorwiseOp. + * + * Note that some methods are defined in other modules such as the \ref LU_Module LU module + * for all functions related to matrix inversions. + * + * \tparam Derived is the derived type, e.g. a matrix type, or an expression, etc. + * + * When writing a function taking Eigen objects as argument, if you want your function + * to take as argument any matrix, vector, or expression, just let it take a + * MatrixBase argument. As an example, here is a function printFirstRow which, given + * a matrix, vector, or expression \a x, prints the first row of \a x. + * + * \code + template + void printFirstRow(const Eigen::MatrixBase& x) + { + cout << x.row(0) << endl; + } + * \endcode + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_MATRIXBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +template class MatrixBase + : public DenseBase +{ + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + typedef MatrixBase StorageBaseType; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseBase Base; + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::CoeffReadCost; + + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::eval; + using Base::operator+=; + using Base::operator-=; + using Base::operator*=; + using Base::operator/=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + typedef typename Base::ConstTransposeReturnType ConstTransposeReturnType; + typedef typename Base::RowXpr RowXpr; + typedef typename Base::ColXpr ColXpr; +#endif // not EIGEN_PARSED_BY_DOXYGEN + + + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** type of the equivalent square matrix */ + typedef Matrix SquareMatrixType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + + /** \returns the size of the main diagonal, which is min(rows(),cols()). + * \sa rows(), cols(), SizeAtCompileTime. */ + inline Index diagonalSize() const { return (std::min)(rows(),cols()); } + + /** \brief The plain matrix type corresponding to this expression. + * + * This is not necessarily exactly the return type of eval(). In the case of plain matrices, + * the return type of eval() is a const reference to a matrix, not a matrix! It is however guaranteed + * that the return type of eval() is either PlainObject or const PlainObject&. + */ + typedef Matrix::Scalar, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime, + AutoAlign | (internal::traits::Flags&RowMajorBit ? RowMajor : ColMajor), + internal::traits::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime + > PlainObject; + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; + /** \internal the return type of MatrixBase::adjoint() */ + typedef typename internal::conditional::IsComplex, + CwiseUnaryOp, ConstTransposeReturnType>, + ConstTransposeReturnType + >::type AdjointReturnType; + /** \internal Return type of eigenvalues() */ + typedef Matrix, internal::traits::ColsAtCompileTime, 1, ColMajor> EigenvaluesReturnType; + /** \internal the return type of identity */ + typedef CwiseNullaryOp,Derived> IdentityReturnType; + /** \internal the return type of unit vectors */ + typedef Block, SquareMatrixType>, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime> BasisReturnType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::MatrixBase +# include "../plugins/CommonCwiseUnaryOps.h" +# include "../plugins/CommonCwiseBinaryOps.h" +# include "../plugins/MatrixCwiseUnaryOps.h" +# include "../plugins/MatrixCwiseBinaryOps.h" +# ifdef EIGEN_MATRIXBASE_PLUGIN +# include EIGEN_MATRIXBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const MatrixBase& other); + + // We cannot inherit here via Base::operator= since it is causing + // trouble with MSVC. + + template + Derived& operator=(const DenseBase& other); + + template + Derived& operator=(const EigenBase& other); + + template + Derived& operator=(const ReturnByValue& other); + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + Derived& lazyAssign(const ProductBase& other); +#endif // not EIGEN_PARSED_BY_DOXYGEN + + template + Derived& operator+=(const MatrixBase& other); + template + Derived& operator-=(const MatrixBase& other); + + template + const typename ProductReturnType::Type + operator*(const MatrixBase &other) const; + + template + const typename LazyProductReturnType::Type + lazyProduct(const MatrixBase &other) const; + + template + Derived& operator*=(const EigenBase& other); + + template + void applyOnTheLeft(const EigenBase& other); + + template + void applyOnTheRight(const EigenBase& other); + + template + const DiagonalProduct + operator*(const DiagonalBase &diagonal) const; + + template + typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType + dot(const MatrixBase& other) const; + + #ifdef EIGEN2_SUPPORT + template + Scalar eigen2_dot(const MatrixBase& other) const; + #endif + + RealScalar squaredNorm() const; + RealScalar norm() const; + RealScalar stableNorm() const; + RealScalar blueNorm() const; + RealScalar hypotNorm() const; + const PlainObject normalized() const; + void normalize(); + + const AdjointReturnType adjoint() const; + void adjointInPlace(); + + typedef Diagonal DiagonalReturnType; + DiagonalReturnType diagonal(); + typedef const Diagonal ConstDiagonalReturnType; + const ConstDiagonalReturnType diagonal() const; + + template struct DiagonalIndexReturnType { typedef Diagonal Type; }; + template struct ConstDiagonalIndexReturnType { typedef const Diagonal Type; }; + + template typename DiagonalIndexReturnType::Type diagonal(); + template typename ConstDiagonalIndexReturnType::Type diagonal() const; + + // Note: The "MatrixBase::" prefixes are added to help MSVC9 to match these declarations with the later implementations. + // On the other hand they confuse MSVC8... + #if (defined _MSC_VER) && (_MSC_VER >= 1500) // 2008 or later + typename MatrixBase::template DiagonalIndexReturnType::Type diagonal(Index index); + typename MatrixBase::template ConstDiagonalIndexReturnType::Type diagonal(Index index) const; + #else + typename DiagonalIndexReturnType::Type diagonal(Index index); + typename ConstDiagonalIndexReturnType::Type diagonal(Index index) const; + #endif + + #ifdef EIGEN2_SUPPORT + template typename internal::eigen2_part_return_type::type part(); + template const typename internal::eigen2_part_return_type::type part() const; + + // huuuge hack. make Eigen2's matrix.part() work in eigen3. Problem: Diagonal is now a class template instead + // of an integer constant. Solution: overload the part() method template wrt template parameters list. + template class U> + const DiagonalWrapper part() const + { return diagonal().asDiagonal(); } + #endif // EIGEN2_SUPPORT + + template struct TriangularViewReturnType { typedef TriangularView Type; }; + template struct ConstTriangularViewReturnType { typedef const TriangularView Type; }; + + template typename TriangularViewReturnType::Type triangularView(); + template typename ConstTriangularViewReturnType::Type triangularView() const; + + template struct SelfAdjointViewReturnType { typedef SelfAdjointView Type; }; + template struct ConstSelfAdjointViewReturnType { typedef const SelfAdjointView Type; }; + + template typename SelfAdjointViewReturnType::Type selfadjointView(); + template typename ConstSelfAdjointViewReturnType::Type selfadjointView() const; + + const SparseView sparseView(const Scalar& m_reference = Scalar(0), + typename NumTraits::Real m_epsilon = NumTraits::dummy_precision()) const; + static const IdentityReturnType Identity(); + static const IdentityReturnType Identity(Index rows, Index cols); + static const BasisReturnType Unit(Index size, Index i); + static const BasisReturnType Unit(Index i); + static const BasisReturnType UnitX(); + static const BasisReturnType UnitY(); + static const BasisReturnType UnitZ(); + static const BasisReturnType UnitW(); + + const DiagonalWrapper asDiagonal() const; + const PermutationWrapper asPermutation() const; + + Derived& setIdentity(); + Derived& setIdentity(Index rows, Index cols); + + bool isIdentity(RealScalar prec = NumTraits::dummy_precision()) const; + bool isDiagonal(RealScalar prec = NumTraits::dummy_precision()) const; + + bool isUpperTriangular(RealScalar prec = NumTraits::dummy_precision()) const; + bool isLowerTriangular(RealScalar prec = NumTraits::dummy_precision()) const; + + template + bool isOrthogonal(const MatrixBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + bool isUnitary(RealScalar prec = NumTraits::dummy_precision()) const; + + /** \returns true if each coefficients of \c *this and \a other are all exactly equal. + * \warning When using floating point scalar values you probably should rather use a + * fuzzy comparison such as isApprox() + * \sa isApprox(), operator!= */ + template + inline bool operator==(const MatrixBase& other) const + { return cwiseEqual(other).all(); } + + /** \returns true if at least one pair of coefficients of \c *this and \a other are not exactly equal to each other. + * \warning When using floating point scalar values you probably should rather use a + * fuzzy comparison such as isApprox() + * \sa isApprox(), operator== */ + template + inline bool operator!=(const MatrixBase& other) const + { return cwiseNotEqual(other).any(); } + + NoAlias noalias(); + + inline const ForceAlignedAccess forceAlignedAccess() const; + inline ForceAlignedAccess forceAlignedAccess(); + template inline typename internal::add_const_on_value_type,Derived&>::type>::type forceAlignedAccessIf() const; + template inline typename internal::conditional,Derived&>::type forceAlignedAccessIf(); + + Scalar trace() const; + +/////////// Array module /////////// + + template RealScalar lpNorm() const; + + MatrixBase& matrix() { return *this; } + const MatrixBase& matrix() const { return *this; } + + /** \returns an \link ArrayBase Array \endlink expression of this matrix + * \sa ArrayBase::matrix() */ + ArrayWrapper array() { return derived(); } + const ArrayWrapper array() const { return derived(); } + +/////////// LU module /////////// + + const FullPivLU fullPivLu() const; + const PartialPivLU partialPivLu() const; + + #if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS + const LU lu() const; + #endif + + #ifdef EIGEN2_SUPPORT + const LU eigen2_lu() const; + #endif + + #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + const PartialPivLU lu() const; + #endif + + #ifdef EIGEN2_SUPPORT + template + void computeInverse(MatrixBase *result) const { + *result = this->inverse(); + } + #endif + + const internal::inverse_impl inverse() const; + template + void computeInverseAndDetWithCheck( + ResultType& inverse, + typename ResultType::Scalar& determinant, + bool& invertible, + const RealScalar& absDeterminantThreshold = NumTraits::dummy_precision() + ) const; + template + void computeInverseWithCheck( + ResultType& inverse, + bool& invertible, + const RealScalar& absDeterminantThreshold = NumTraits::dummy_precision() + ) const; + Scalar determinant() const; + +/////////// Cholesky module /////////// + + const LLT llt() const; + const LDLT ldlt() const; + +/////////// QR module /////////// + + const HouseholderQR householderQr() const; + const ColPivHouseholderQR colPivHouseholderQr() const; + const FullPivHouseholderQR fullPivHouseholderQr() const; + + #ifdef EIGEN2_SUPPORT + const QR qr() const; + #endif + + EigenvaluesReturnType eigenvalues() const; + RealScalar operatorNorm() const; + +/////////// SVD module /////////// + + JacobiSVD jacobiSvd(unsigned int computationOptions = 0) const; + + #ifdef EIGEN2_SUPPORT + SVD svd() const; + #endif + +/////////// Geometry module /////////// + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /// \internal helper struct to form the return type of the cross product + template struct cross_product_return_type { + typedef typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType Scalar; + typedef Matrix type; + }; + #endif // EIGEN_PARSED_BY_DOXYGEN + template + typename cross_product_return_type::type + cross(const MatrixBase& other) const; + template + PlainObject cross3(const MatrixBase& other) const; + PlainObject unitOrthogonal(void) const; + Matrix eulerAngles(Index a0, Index a1, Index a2) const; + + #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + ScalarMultipleReturnType operator*(const UniformScaling& s) const; + // put this as separate enum value to work around possible GCC 4.3 bug (?) + enum { HomogeneousReturnTypeDirection = ColsAtCompileTime==1?Vertical:Horizontal }; + typedef Homogeneous HomogeneousReturnType; + HomogeneousReturnType homogeneous() const; + #endif + + enum { + SizeMinusOne = SizeAtCompileTime==Dynamic ? Dynamic : SizeAtCompileTime-1 + }; + typedef Block::ColsAtCompileTime==1 ? SizeMinusOne : 1, + internal::traits::ColsAtCompileTime==1 ? 1 : SizeMinusOne> ConstStartMinusOne; + typedef CwiseUnaryOp::Scalar>, + const ConstStartMinusOne > HNormalizedReturnType; + + const HNormalizedReturnType hnormalized() const; + +////////// Householder module /////////// + + void makeHouseholderInPlace(Scalar& tau, RealScalar& beta); + template + void makeHouseholder(EssentialPart& essential, + Scalar& tau, RealScalar& beta) const; + template + void applyHouseholderOnTheLeft(const EssentialPart& essential, + const Scalar& tau, + Scalar* workspace); + template + void applyHouseholderOnTheRight(const EssentialPart& essential, + const Scalar& tau, + Scalar* workspace); + +///////// Jacobi module ///////// + + template + void applyOnTheLeft(Index p, Index q, const JacobiRotation& j); + template + void applyOnTheRight(Index p, Index q, const JacobiRotation& j); + +///////// MatrixFunctions module ///////// + + typedef typename internal::stem_function::type StemFunction; + const MatrixExponentialReturnValue exp() const; + const MatrixFunctionReturnValue matrixFunction(StemFunction f) const; + const MatrixFunctionReturnValue cosh() const; + const MatrixFunctionReturnValue sinh() const; + const MatrixFunctionReturnValue cos() const; + const MatrixFunctionReturnValue sin() const; + const MatrixSquareRootReturnValue sqrt() const; + const MatrixLogarithmReturnValue log() const; + +#ifdef EIGEN2_SUPPORT + template + Derived& operator+=(const Flagged, 0, + EvalBeforeAssigningBit>& other); + + template + Derived& operator-=(const Flagged, 0, + EvalBeforeAssigningBit>& other); + + /** \deprecated because .lazy() is deprecated + * Overloaded for cache friendly product evaluation */ + template + Derived& lazyAssign(const Flagged& other) + { return lazyAssign(other._expression()); } + + template + const Flagged marked() const; + const Flagged lazy() const; + + inline const Cwise cwise() const; + inline Cwise cwise(); + + VectorBlock start(Index size); + const VectorBlock start(Index size) const; + VectorBlock end(Index size); + const VectorBlock end(Index size) const; + template VectorBlock start(); + template const VectorBlock start() const; + template VectorBlock end(); + template const VectorBlock end() const; + + Minor minor(Index row, Index col); + const Minor minor(Index row, Index col) const; +#endif + + protected: + MatrixBase() : Base() {} + + private: + explicit MatrixBase(int); + MatrixBase(int,int); + template explicit MatrixBase(const MatrixBase&); + protected: + // mixing arrays and matrices is not legal + template Derived& operator+=(const ArrayBase& ) + {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;} + // mixing arrays and matrices is not legal + template Derived& operator-=(const ArrayBase& ) + {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;} +}; + +} // end namespace Eigen + +#endif // EIGEN_MATRIXBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/NestByValue.h b/Biopool/Sources/Eigen/src/Core/NestByValue.h new file mode 100644 index 0000000..cfe3e79 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/NestByValue.h @@ -0,0 +1,126 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NESTBYVALUE_H +#define EIGEN_NESTBYVALUE_H + +namespace Eigen { + +/** \class NestByValue + * \ingroup Core_Module + * + * \brief Expression which must be nested by value + * + * \param ExpressionType the type of the object of which we are requiring nesting-by-value + * + * This class is the return type of MatrixBase::nestByValue() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::nestByValue() + */ + +namespace internal { +template +struct traits > : public traits +{}; +} + +template class NestByValue + : public internal::dense_xpr_base< NestByValue >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(NestByValue) + + inline NestByValue(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + operator const ExpressionType&() const { return m_expression; } + + protected: + const ExpressionType m_expression; +}; + +/** \returns an expression of the temporary version of *this. + */ +template +inline const NestByValue +DenseBase::nestByValue() const +{ + return NestByValue(derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_NESTBYVALUE_H diff --git a/Biopool/Sources/Eigen/src/Core/NoAlias.h b/Biopool/Sources/Eigen/src/Core/NoAlias.h new file mode 100644 index 0000000..5278cfb --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/NoAlias.h @@ -0,0 +1,140 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NOALIAS_H +#define EIGEN_NOALIAS_H + +namespace Eigen { + +/** \class NoAlias + * \ingroup Core_Module + * + * \brief Pseudo expression providing an operator = assuming no aliasing + * + * \param ExpressionType the type of the object on which to do the lazy assignment + * + * This class represents an expression with special assignment operators + * assuming no aliasing between the target expression and the source expression. + * More precisely it alloas to bypass the EvalBeforeAssignBit flag of the source expression. + * It is the return type of MatrixBase::noalias() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::noalias() + */ +template class StorageBase> +class NoAlias +{ + typedef typename ExpressionType::Scalar Scalar; + public: + NoAlias(ExpressionType& expression) : m_expression(expression) {} + + /** Behaves like MatrixBase::lazyAssign(other) + * \sa MatrixBase::lazyAssign() */ + template + EIGEN_STRONG_INLINE ExpressionType& operator=(const StorageBase& other) + { return internal::assign_selector::run(m_expression,other.derived()); } + + /** \sa MatrixBase::operator+= */ + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const StorageBase& other) + { + typedef SelfCwiseBinaryOp, ExpressionType, OtherDerived> SelfAdder; + SelfAdder tmp(m_expression); + typedef typename internal::nested::type OtherDerivedNested; + typedef typename internal::remove_all::type _OtherDerivedNested; + internal::assign_selector::run(tmp,OtherDerivedNested(other.derived())); + return m_expression; + } + + /** \sa MatrixBase::operator-= */ + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const StorageBase& other) + { + typedef SelfCwiseBinaryOp, ExpressionType, OtherDerived> SelfAdder; + SelfAdder tmp(m_expression); + typedef typename internal::nested::type OtherDerivedNested; + typedef typename internal::remove_all::type _OtherDerivedNested; + internal::assign_selector::run(tmp,OtherDerivedNested(other.derived())); + return m_expression; + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const ProductBase& other) + { other.derived().addTo(m_expression); return m_expression; } + + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const ProductBase& other) + { other.derived().subTo(m_expression); return m_expression; } + + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const CoeffBasedProduct& other) + { return m_expression.derived() += CoeffBasedProduct(other.lhs(), other.rhs()); } + + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const CoeffBasedProduct& other) + { return m_expression.derived() -= CoeffBasedProduct(other.lhs(), other.rhs()); } +#endif + + protected: + ExpressionType& m_expression; +}; + +/** \returns a pseudo expression of \c *this with an operator= assuming + * no aliasing between \c *this and the source expression. + * + * More precisely, noalias() allows to bypass the EvalBeforeAssignBit flag. + * Currently, even though several expressions may alias, only product + * expressions have this flag. Therefore, noalias() is only usefull when + * the source expression contains a matrix product. + * + * Here are some examples where noalias is usefull: + * \code + * D.noalias() = A * B; + * D.noalias() += A.transpose() * B; + * D.noalias() -= 2 * A * B.adjoint(); + * \endcode + * + * On the other hand the following example will lead to a \b wrong result: + * \code + * A.noalias() = A * B; + * \endcode + * because the result matrix A is also an operand of the matrix product. Therefore, + * there is no alternative than evaluating A * B in a temporary, that is the default + * behavior when you write: + * \code + * A = A * B; + * \endcode + * + * \sa class NoAlias + */ +template +NoAlias MatrixBase::noalias() +{ + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_NOALIAS_H diff --git a/Biopool/Sources/Eigen/src/Core/NumTraits.h b/Biopool/Sources/Eigen/src/Core/NumTraits.h new file mode 100644 index 0000000..e886723 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/NumTraits.h @@ -0,0 +1,162 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NUMTRAITS_H +#define EIGEN_NUMTRAITS_H + +namespace Eigen { + +/** \class NumTraits + * \ingroup Core_Module + * + * \brief Holds information about the various numeric (i.e. scalar) types allowed by Eigen. + * + * \param T the numeric type at hand + * + * This class stores enums, typedefs and static methods giving information about a numeric type. + * + * The provided data consists of: + * \li A typedef \a Real, giving the "real part" type of \a T. If \a T is already real, + * then \a Real is just a typedef to \a T. If \a T is \c std::complex then \a Real + * is a typedef to \a U. + * \li A typedef \a NonInteger, giving the type that should be used for operations producing non-integral values, + * such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives + * \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to + * take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is + * only intended as a helper for code that needs to explicitly promote types. + * \li A typedef \a Nested giving the type to use to nest a value inside of the expression tree. If you don't know what + * this means, just use \a T here. + * \li An enum value \a IsComplex. It is equal to 1 if \a T is a \c std::complex + * type, and to 0 otherwise. + * \li An enum value \a IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int, + * and to \c 0 otherwise. + * \li Enum values ReadCost, AddCost and MulCost representing a rough estimate of the number of CPU cycles needed + * to by move / add / mul instructions respectively, assuming the data is already stored in CPU registers. + * Stay vague here. No need to do architecture-specific stuff. + * \li An enum value \a IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned. + * \li An enum value \a RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must + * be called, and to 0 if it is safe not to call it. Default is 0 if \a T is an arithmetic type, and 1 otherwise. + * \li An epsilon() function which, unlike std::numeric_limits::epsilon(), returns a \a Real instead of a \a T. + * \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default + * value by the fuzzy comparison operators. + * \li highest() and lowest() functions returning the highest and lowest possible values respectively. + */ + +template struct GenericNumTraits +{ + enum { + IsInteger = std::numeric_limits::is_integer, + IsSigned = std::numeric_limits::is_signed, + IsComplex = 0, + RequireInitialization = internal::is_arithmetic::value ? 0 : 1, + ReadCost = 1, + AddCost = 1, + MulCost = 1 + }; + + typedef T Real; + typedef typename internal::conditional< + IsInteger, + typename internal::conditional::type, + T + >::type NonInteger; + typedef T Nested; + + static inline Real epsilon() { return std::numeric_limits::epsilon(); } + static inline Real dummy_precision() + { + // make sure to override this for floating-point types + return Real(0); + } + static inline T highest() { return (std::numeric_limits::max)(); } + static inline T lowest() { return IsInteger ? (std::numeric_limits::min)() : (-(std::numeric_limits::max)()); } + +#ifdef EIGEN2_SUPPORT + enum { + HasFloatingPoint = !IsInteger + }; + typedef NonInteger FloatingPoint; +#endif +}; + +template struct NumTraits : GenericNumTraits +{}; + +template<> struct NumTraits + : GenericNumTraits +{ + static inline float dummy_precision() { return 1e-5f; } +}; + +template<> struct NumTraits : GenericNumTraits +{ + static inline double dummy_precision() { return 1e-12; } +}; + +template<> struct NumTraits + : GenericNumTraits +{ + static inline long double dummy_precision() { return 1e-15l; } +}; + +template struct NumTraits > + : GenericNumTraits > +{ + typedef _Real Real; + enum { + IsComplex = 1, + RequireInitialization = NumTraits<_Real>::RequireInitialization, + ReadCost = 2 * NumTraits<_Real>::ReadCost, + AddCost = 2 * NumTraits::AddCost, + MulCost = 4 * NumTraits::MulCost + 2 * NumTraits::AddCost + }; + + static inline Real epsilon() { return NumTraits::epsilon(); } + static inline Real dummy_precision() { return NumTraits::dummy_precision(); } +}; + +template +struct NumTraits > +{ + typedef Array ArrayType; + typedef typename NumTraits::Real RealScalar; + typedef Array Real; + typedef typename NumTraits::NonInteger NonIntegerScalar; + typedef Array NonInteger; + typedef ArrayType & Nested; + + enum { + IsComplex = NumTraits::IsComplex, + IsInteger = NumTraits::IsInteger, + IsSigned = NumTraits::IsSigned, + RequireInitialization = 1, + ReadCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::ReadCost, + AddCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::AddCost, + MulCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::MulCost + }; +}; + +} // end namespace Eigen + +#endif // EIGEN_NUMTRAITS_H diff --git a/Biopool/Sources/Eigen/src/Core/PermutationMatrix.h b/Biopool/Sources/Eigen/src/Core/PermutationMatrix.h new file mode 100644 index 0000000..e0d618d --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/PermutationMatrix.h @@ -0,0 +1,702 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2009-2011 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PERMUTATIONMATRIX_H +#define EIGEN_PERMUTATIONMATRIX_H + +namespace Eigen { + +template class PermutedImpl; + +/** \class PermutationBase + * \ingroup Core_Module + * + * \brief Base class for permutations + * + * \param Derived the derived class + * + * This class is the base class for all expressions representing a permutation matrix, + * internally stored as a vector of integers. + * The convention followed here is that if \f$ \sigma \f$ is a permutation, the corresponding permutation matrix + * \f$ P_\sigma \f$ is such that if \f$ (e_1,\ldots,e_p) \f$ is the canonical basis, we have: + * \f[ P_\sigma(e_i) = e_{\sigma(i)}. \f] + * This convention ensures that for any two permutations \f$ \sigma, \tau \f$, we have: + * \f[ P_{\sigma\circ\tau} = P_\sigma P_\tau. \f] + * + * Permutation matrices are square and invertible. + * + * Notice that in addition to the member functions and operators listed here, there also are non-member + * operator* to multiply any kind of permutation object with any kind of matrix expression (MatrixBase) + * on either side. + * + * \sa class PermutationMatrix, class PermutationWrapper + */ + +namespace internal { + +template +struct permut_matrix_product_retval; +template +struct permut_sparsematrix_product_retval; +enum PermPermProduct_t {PermPermProduct}; + +} // end namespace internal + +template +class PermutationBase : public EigenBase +{ + typedef internal::traits Traits; + typedef EigenBase Base; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + enum { + Flags = Traits::Flags, + CoeffReadCost = Traits::CoeffReadCost, + RowsAtCompileTime = Traits::RowsAtCompileTime, + ColsAtCompileTime = Traits::ColsAtCompileTime, + MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = Traits::MaxColsAtCompileTime + }; + typedef typename Traits::Scalar Scalar; + typedef typename Traits::Index Index; + typedef Matrix + DenseMatrixType; + typedef PermutationMatrix + PlainPermutationType; + using Base::derived; + #endif + + /** Copies the other permutation into *this */ + template + Derived& operator=(const PermutationBase& other) + { + indices() = other.indices(); + return derived(); + } + + /** Assignment from the Transpositions \a tr */ + template + Derived& operator=(const TranspositionsBase& tr) + { + setIdentity(tr.size()); + for(Index k=size()-1; k>=0; --k) + applyTranspositionOnTheRight(k,tr.coeff(k)); + return derived(); + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + Derived& operator=(const PermutationBase& other) + { + indices() = other.indices(); + return derived(); + } + #endif + + /** \returns the number of rows */ + inline Index rows() const { return indices().size(); } + + /** \returns the number of columns */ + inline Index cols() const { return indices().size(); } + + /** \returns the size of a side of the respective square matrix, i.e., the number of indices */ + inline Index size() const { return indices().size(); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + void evalTo(MatrixBase& other) const + { + other.setZero(); + for (int i=0; i=0 && j>=0 && i=0 && j>=0 && i inverse() const + { return derived(); } + /** \returns the tranpose permutation matrix. + * + * \note \note_try_to_help_rvo + */ + inline Transpose transpose() const + { return derived(); } + + /**** multiplication helpers to hopefully get RVO ****/ + + +#ifndef EIGEN_PARSED_BY_DOXYGEN + protected: + template + void assignTranspose(const PermutationBase& other) + { + for (int i=0; i + void assignProduct(const Lhs& lhs, const Rhs& rhs) + { + eigen_assert(lhs.cols() == rhs.rows()); + for (int i=0; i + inline PlainPermutationType operator*(const PermutationBase& other) const + { return PlainPermutationType(internal::PermPermProduct, derived(), other.derived()); } + + /** \returns the product of a permutation with another inverse permutation. + * + * \note \note_try_to_help_rvo + */ + template + inline PlainPermutationType operator*(const Transpose >& other) const + { return PlainPermutationType(internal::PermPermProduct, *this, other.eval()); } + + /** \returns the product of an inverse permutation with another permutation. + * + * \note \note_try_to_help_rvo + */ + template friend + inline PlainPermutationType operator*(const Transpose >& other, const PermutationBase& perm) + { return PlainPermutationType(internal::PermPermProduct, other.eval(), perm); } + + protected: + +}; + +/** \class PermutationMatrix + * \ingroup Core_Module + * + * \brief Permutation matrix + * + * \param SizeAtCompileTime the number of rows/cols, or Dynamic + * \param MaxSizeAtCompileTime the maximum number of rows/cols, or Dynamic. This optional parameter defaults to SizeAtCompileTime. Most of the time, you should not have to specify it. + * \param IndexType the interger type of the indices + * + * This class represents a permutation matrix, internally stored as a vector of integers. + * + * \sa class PermutationBase, class PermutationWrapper, class DiagonalMatrix + */ + +namespace internal { +template +struct traits > + : traits > +{ + typedef IndexType Index; + typedef Matrix IndicesType; +}; +} + +template +class PermutationMatrix : public PermutationBase > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + #endif + + inline PermutationMatrix() + {} + + /** Constructs an uninitialized permutation matrix of given size. + */ + inline PermutationMatrix(int size) : m_indices(size) + {} + + /** Copy constructor. */ + template + inline PermutationMatrix(const PermutationBase& other) + : m_indices(other.indices()) {} + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** Standard copy constructor. Defined only to prevent a default copy constructor + * from hiding the other templated constructor */ + inline PermutationMatrix(const PermutationMatrix& other) : m_indices(other.indices()) {} + #endif + + /** Generic constructor from expression of the indices. The indices + * array has the meaning that the permutations sends each integer i to indices[i]. + * + * \warning It is your responsibility to check that the indices array that you passes actually + * describes a permutation, i.e., each value between 0 and n-1 occurs exactly once, where n is the + * array's size. + */ + template + explicit inline PermutationMatrix(const MatrixBase& indices) : m_indices(indices) + {} + + /** Convert the Transpositions \a tr to a permutation matrix */ + template + explicit PermutationMatrix(const TranspositionsBase& tr) + : m_indices(tr.size()) + { + *this = tr; + } + + /** Copies the other permutation into *this */ + template + PermutationMatrix& operator=(const PermutationBase& other) + { + m_indices = other.indices(); + return *this; + } + + /** Assignment from the Transpositions \a tr */ + template + PermutationMatrix& operator=(const TranspositionsBase& tr) + { + return Base::operator=(tr.derived()); + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + PermutationMatrix& operator=(const PermutationMatrix& other) + { + m_indices = other.m_indices; + return *this; + } + #endif + + /** const version of indices(). */ + const IndicesType& indices() const { return m_indices; } + /** \returns a reference to the stored array representing the permutation. */ + IndicesType& indices() { return m_indices; } + + + /**** multiplication helpers to hopefully get RVO ****/ + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + PermutationMatrix(const Transpose >& other) + : m_indices(other.nestedPermutation().size()) + { + for (int i=0; i + PermutationMatrix(internal::PermPermProduct_t, const Lhs& lhs, const Rhs& rhs) + : m_indices(lhs.indices().size()) + { + Base::assignProduct(lhs,rhs); + } +#endif + + protected: + + IndicesType m_indices; +}; + + +namespace internal { +template +struct traits,_PacketAccess> > + : traits > +{ + typedef IndexType Index; + typedef Map, _PacketAccess> IndicesType; +}; +} + +template +class Map,_PacketAccess> + : public PermutationBase,_PacketAccess> > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + typedef typename IndicesType::Scalar Index; + #endif + + inline Map(const Index* indices) + : m_indices(indices) + {} + + inline Map(const Index* indices, Index size) + : m_indices(indices,size) + {} + + /** Copies the other permutation into *this */ + template + Map& operator=(const PermutationBase& other) + { return Base::operator=(other.derived()); } + + /** Assignment from the Transpositions \a tr */ + template + Map& operator=(const TranspositionsBase& tr) + { return Base::operator=(tr.derived()); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + Map& operator=(const Map& other) + { + m_indices = other.m_indices; + return *this; + } + #endif + + /** const version of indices(). */ + const IndicesType& indices() const { return m_indices; } + /** \returns a reference to the stored array representing the permutation. */ + IndicesType& indices() { return m_indices; } + + protected: + + IndicesType m_indices; +}; + +/** \class PermutationWrapper + * \ingroup Core_Module + * + * \brief Class to view a vector of integers as a permutation matrix + * + * \param _IndicesType the type of the vector of integer (can be any compatible expression) + * + * This class allows to view any vector expression of integers as a permutation matrix. + * + * \sa class PermutationBase, class PermutationMatrix + */ + +struct PermutationStorage {}; + +template class TranspositionsWrapper; +namespace internal { +template +struct traits > +{ + typedef PermutationStorage StorageKind; + typedef typename _IndicesType::Scalar Scalar; + typedef typename _IndicesType::Scalar Index; + typedef _IndicesType IndicesType; + enum { + RowsAtCompileTime = _IndicesType::SizeAtCompileTime, + ColsAtCompileTime = _IndicesType::SizeAtCompileTime, + MaxRowsAtCompileTime = IndicesType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = IndicesType::MaxColsAtCompileTime, + Flags = 0, + CoeffReadCost = _IndicesType::CoeffReadCost + }; +}; +} + +template +class PermutationWrapper : public PermutationBase > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + #endif + + inline PermutationWrapper(const IndicesType& indices) + : m_indices(indices) + {} + + /** const version of indices(). */ + const typename internal::remove_all::type& + indices() const { return m_indices; } + + protected: + + typename IndicesType::Nested m_indices; +}; + +/** \returns the matrix with the permutation applied to the columns. + */ +template +inline const internal::permut_matrix_product_retval +operator*(const MatrixBase& matrix, + const PermutationBase &permutation) +{ + return internal::permut_matrix_product_retval + + (permutation.derived(), matrix.derived()); +} + +/** \returns the matrix with the permutation applied to the rows. + */ +template +inline const internal::permut_matrix_product_retval + +operator*(const PermutationBase &permutation, + const MatrixBase& matrix) +{ + return internal::permut_matrix_product_retval + + (permutation.derived(), matrix.derived()); +} + +namespace internal { + +template +struct traits > +{ + typedef typename MatrixType::PlainObject ReturnType; +}; + +template +struct permut_matrix_product_retval + : public ReturnByValue > +{ + typedef typename remove_all::type MatrixTypeNestedCleaned; + + permut_matrix_product_retval(const PermutationType& perm, const MatrixType& matrix) + : m_permutation(perm), m_matrix(matrix) + {} + + inline int rows() const { return m_matrix.rows(); } + inline int cols() const { return m_matrix.cols(); } + + template inline void evalTo(Dest& dst) const + { + const int n = Side==OnTheLeft ? rows() : cols(); + + if(is_same::value && extract_data(dst) == extract_data(m_matrix)) + { + // apply the permutation inplace + Matrix mask(m_permutation.size()); + mask.fill(false); + int r = 0; + while(r < m_permutation.size()) + { + // search for the next seed + while(r=m_permutation.size()) + break; + // we got one, let's follow it until we are back to the seed + int k0 = r++; + int kPrev = k0; + mask.coeffRef(k0) = true; + for(int k=m_permutation.indices().coeff(k0); k!=k0; k=m_permutation.indices().coeff(k)) + { + Block(dst, k) + .swap(Block + (dst,((Side==OnTheLeft) ^ Transposed) ? k0 : kPrev)); + + mask.coeffRef(k) = true; + kPrev = k; + } + } + } + else + { + for(int i = 0; i < n; ++i) + { + Block + (dst, ((Side==OnTheLeft) ^ Transposed) ? m_permutation.indices().coeff(i) : i) + + = + + Block + (m_matrix, ((Side==OnTheRight) ^ Transposed) ? m_permutation.indices().coeff(i) : i); + } + } + } + + protected: + const PermutationType& m_permutation; + typename MatrixType::Nested m_matrix; +}; + +/* Template partial specialization for transposed/inverse permutations */ + +template +struct traits > > + : traits +{}; + +} // end namespace internal + +template +class Transpose > + : public EigenBase > > +{ + typedef Derived PermutationType; + typedef typename PermutationType::IndicesType IndicesType; + typedef typename PermutationType::PlainPermutationType PlainPermutationType; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef internal::traits Traits; + typedef typename Derived::DenseMatrixType DenseMatrixType; + enum { + Flags = Traits::Flags, + CoeffReadCost = Traits::CoeffReadCost, + RowsAtCompileTime = Traits::RowsAtCompileTime, + ColsAtCompileTime = Traits::ColsAtCompileTime, + MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = Traits::MaxColsAtCompileTime + }; + typedef typename Traits::Scalar Scalar; + #endif + + Transpose(const PermutationType& p) : m_permutation(p) {} + + inline int rows() const { return m_permutation.rows(); } + inline int cols() const { return m_permutation.cols(); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + void evalTo(MatrixBase& other) const + { + other.setZero(); + for (int i=0; i friend + inline const internal::permut_matrix_product_retval + operator*(const MatrixBase& matrix, const Transpose& trPerm) + { + return internal::permut_matrix_product_retval(trPerm.m_permutation, matrix.derived()); + } + + /** \returns the matrix with the inverse permutation applied to the rows. + */ + template + inline const internal::permut_matrix_product_retval + operator*(const MatrixBase& matrix) const + { + return internal::permut_matrix_product_retval(m_permutation, matrix.derived()); + } + + const PermutationType& nestedPermutation() const { return m_permutation; } + + protected: + const PermutationType& m_permutation; +}; + +template +const PermutationWrapper MatrixBase::asPermutation() const +{ + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_PERMUTATIONMATRIX_H diff --git a/Biopool/Sources/Eigen/src/Core/PlainObjectBase.h b/Biopool/Sources/Eigen/src/Core/PlainObjectBase.h new file mode 100644 index 0000000..f9c4327 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/PlainObjectBase.h @@ -0,0 +1,782 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2009 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSESTORAGEBASE_H +#define EIGEN_DENSESTORAGEBASE_H + +#ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO +# define EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED for(int i=0;i +EIGEN_ALWAYS_INLINE void check_rows_cols_for_overflow(Index rows, Index cols) +{ + // http://hg.mozilla.org/mozilla-central/file/6c8a909977d3/xpcom/ds/CheckedInt.h#l242 + // we assume Index is signed + Index max_index = (size_t(1) << (8 * sizeof(Index) - 1)) - 1; // assume Index is signed + bool error = (rows < 0 || cols < 0) ? true + : (rows == 0 || cols == 0) ? false + : (rows > max_index / cols); + if (error) + throw_std_bad_alloc(); +} + +template struct conservative_resize_like_impl; + +template struct matrix_swap_impl; + +} // end namespace internal + +/** \class PlainObjectBase + * \brief %Dense storage base class for matrices and arrays. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_PLAINOBJECTBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +#ifdef EIGEN_PARSED_BY_DOXYGEN +namespace internal { + +// this is a warkaround to doxygen not being able to understand the inheritence logic +// when it is hidden by the dense_xpr_base helper struct. +template struct dense_xpr_base_dispatcher_for_doxygen;// : public MatrixBase {}; +/** This class is just a workaround for Doxygen and it does not not actually exist. */ +template +struct dense_xpr_base_dispatcher_for_doxygen > + : public MatrixBase > {}; +/** This class is just a workaround for Doxygen and it does not not actually exist. */ +template +struct dense_xpr_base_dispatcher_for_doxygen > + : public ArrayBase > {}; + +} // namespace internal + +template +class PlainObjectBase : public internal::dense_xpr_base_dispatcher_for_doxygen +#else +template +class PlainObjectBase : public internal::dense_xpr_base::type +#endif +{ + public: + enum { Options = internal::traits::Options }; + typedef typename internal::dense_xpr_base::type Base; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + typedef Derived DenseType; + + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + + template friend class Eigen::Map; + friend class Eigen::Map; + typedef Eigen::Map MapType; + friend class Eigen::Map; + typedef const Eigen::Map ConstMapType; + friend class Eigen::Map; + typedef Eigen::Map AlignedMapType; + friend class Eigen::Map; + typedef const Eigen::Map ConstAlignedMapType; + template struct StridedMapType { typedef Eigen::Map type; }; + template struct StridedConstMapType { typedef Eigen::Map type; }; + template struct StridedAlignedMapType { typedef Eigen::Map type; }; + template struct StridedConstAlignedMapType { typedef Eigen::Map type; }; + + protected: + DenseStorage m_storage; + + public: + enum { NeedsToAlign = SizeAtCompileTime != Dynamic && (internal::traits::Flags & AlignedBit) != 0 }; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) + + Base& base() { return *static_cast(this); } + const Base& base() const { return *static_cast(this); } + + EIGEN_STRONG_INLINE Index rows() const { return m_storage.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_storage.cols(); } + + EIGEN_STRONG_INLINE const Scalar& coeff(Index row, Index col) const + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE const Scalar& coeff(Index index) const + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE const Scalar& coeffRef(Index row, Index col) const + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE const Scalar& coeffRef(Index index) const + { + return m_storage.data()[index]; + } + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return internal::ploadt + (m_storage.data() + (Flags & RowMajorBit + ? col + row * m_storage.cols() + : row + col * m_storage.rows())); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return internal::ploadt(m_storage.data() + index); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacket(Index row, Index col, const PacketScalar& x) + { + internal::pstoret + (m_storage.data() + (Flags & RowMajorBit + ? col + row * m_storage.cols() + : row + col * m_storage.rows()), x); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacket(Index index, const PacketScalar& x) + { + internal::pstoret(m_storage.data() + index, x); + } + + /** \returns a const pointer to the data array of this matrix */ + EIGEN_STRONG_INLINE const Scalar *data() const + { return m_storage.data(); } + + /** \returns a pointer to the data array of this matrix */ + EIGEN_STRONG_INLINE Scalar *data() + { return m_storage.data(); } + + /** Resizes \c *this to a \a rows x \a cols matrix. + * + * This method is intended for dynamic-size matrices, although it is legal to call it on any + * matrix as long as fixed dimensions are left unchanged. If you only want to change the number + * of rows and/or of columns, you can use resize(NoChange_t, Index), resize(Index, NoChange_t). + * + * If the current number of coefficients of \c *this exactly matches the + * product \a rows * \a cols, then no memory allocation is performed and + * the current values are left unchanged. In all other cases, including + * shrinking, the data is reallocated and all previous values are lost. + * + * Example: \include Matrix_resize_int_int.cpp + * Output: \verbinclude Matrix_resize_int_int.out + * + * \sa resize(Index) for vectors, resize(NoChange_t, Index), resize(Index, NoChange_t) + */ + EIGEN_STRONG_INLINE void resize(Index rows, Index cols) + { + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + internal::check_rows_cols_for_overflow(rows, cols); + Index size = rows*cols; + bool size_changed = size != this->size(); + m_storage.resize(size, rows, cols); + if(size_changed) EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + #else + internal::check_rows_cols_for_overflow(rows, cols); + m_storage.resize(rows*cols, rows, cols); + #endif + } + + /** Resizes \c *this to a vector of length \a size + * + * \only_for_vectors. This method does not work for + * partially dynamic matrices when the static dimension is anything other + * than 1. For example it will not work with Matrix. + * + * Example: \include Matrix_resize_int.cpp + * Output: \verbinclude Matrix_resize_int.out + * + * \sa resize(Index,Index), resize(NoChange_t, Index), resize(Index, NoChange_t) + */ + inline void resize(Index size) + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(PlainObjectBase) + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == size); + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + bool size_changed = size != this->size(); + #endif + if(RowsAtCompileTime == 1) + m_storage.resize(size, 1, size); + else + m_storage.resize(size, size, 1); + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + if(size_changed) EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + #endif + } + + /** Resizes the matrix, changing only the number of columns. For the parameter of type NoChange_t, just pass the special value \c NoChange + * as in the example below. + * + * Example: \include Matrix_resize_NoChange_int.cpp + * Output: \verbinclude Matrix_resize_NoChange_int.out + * + * \sa resize(Index,Index) + */ + inline void resize(NoChange_t, Index cols) + { + resize(rows(), cols); + } + + /** Resizes the matrix, changing only the number of rows. For the parameter of type NoChange_t, just pass the special value \c NoChange + * as in the example below. + * + * Example: \include Matrix_resize_int_NoChange.cpp + * Output: \verbinclude Matrix_resize_int_NoChange.out + * + * \sa resize(Index,Index) + */ + inline void resize(Index rows, NoChange_t) + { + resize(rows, cols()); + } + + /** Resizes \c *this to have the same dimensions as \a other. + * Takes care of doing all the checking that's needed. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE void resizeLike(const EigenBase& _other) + { + const OtherDerived& other = _other.derived(); + internal::check_rows_cols_for_overflow(other.rows(), other.cols()); + const Index othersize = other.rows()*other.cols(); + if(RowsAtCompileTime == 1) + { + eigen_assert(other.rows() == 1 || other.cols() == 1); + resize(1, othersize); + } + else if(ColsAtCompileTime == 1) + { + eigen_assert(other.rows() == 1 || other.cols() == 1); + resize(othersize, 1); + } + else resize(other.rows(), other.cols()); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * The method is intended for matrices of dynamic size. If you only want to change the number + * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or + * conservativeResize(Index, NoChange_t). + * + * Matrices are resized relative to the top-left element. In case values need to be + * appended to the matrix they will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index rows, Index cols) + { + internal::conservative_resize_like_impl::run(*this, rows, cols); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * As opposed to conservativeResize(Index rows, Index cols), this version leaves + * the number of columns unchanged. + * + * In case the matrix is growing, new rows will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index rows, NoChange_t) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(rows, cols()); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * As opposed to conservativeResize(Index rows, Index cols), this version leaves + * the number of rows unchanged. + * + * In case the matrix is growing, new columns will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(NoChange_t, Index cols) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(rows(), cols); + } + + /** Resizes the vector to \a size while retaining old values. + * + * \only_for_vectors. This method does not work for + * partially dynamic matrices when the static dimension is anything other + * than 1. For example it will not work with Matrix. + * + * When values are appended, they will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index size) + { + internal::conservative_resize_like_impl::run(*this, size); + } + + /** Resizes the matrix to \a rows x \a cols of \c other, while leaving old values untouched. + * + * The method is intended for matrices of dynamic size. If you only want to change the number + * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or + * conservativeResize(Index, NoChange_t). + * + * Matrices are resized relative to the top-left element. In case values need to be + * appended to the matrix they will copied from \c other. + */ + template + EIGEN_STRONG_INLINE void conservativeResizeLike(const DenseBase& other) + { + internal::conservative_resize_like_impl::run(*this, other); + } + + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + EIGEN_STRONG_INLINE Derived& operator=(const PlainObjectBase& other) + { + return _set(other); + } + + /** \sa MatrixBase::lazyAssign() */ + template + EIGEN_STRONG_INLINE Derived& lazyAssign(const DenseBase& other) + { + _resize_to_match(other); + return Base::lazyAssign(other.derived()); + } + + template + EIGEN_STRONG_INLINE Derived& operator=(const ReturnByValue& func) + { + resize(func.rows(), func.cols()); + return Base::operator=(func); + } + + EIGEN_STRONG_INLINE explicit PlainObjectBase() : m_storage() + { +// _check_template_params(); +// EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + // FIXME is it still needed ? + /** \internal */ + PlainObjectBase(internal::constructor_without_unaligned_array_assert) + : m_storage(internal::constructor_without_unaligned_array_assert()) + { +// _check_template_params(); EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } +#endif + + EIGEN_STRONG_INLINE PlainObjectBase(Index size, Index rows, Index cols) + : m_storage(size, rows, cols) + { +// _check_template_params(); +// EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + /** \copydoc MatrixBase::operator=(const EigenBase&) + */ + template + EIGEN_STRONG_INLINE Derived& operator=(const EigenBase &other) + { + _resize_to_match(other); + Base::operator=(other.derived()); + return this->derived(); + } + + /** \sa MatrixBase::operator=(const EigenBase&) */ + template + EIGEN_STRONG_INLINE PlainObjectBase(const EigenBase &other) + : m_storage(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + _check_template_params(); + internal::check_rows_cols_for_overflow(other.derived().rows(), other.derived().cols()); + Base::operator=(other.derived()); + } + + /** \name Map + * These are convenience functions returning Map objects. The Map() static functions return unaligned Map objects, + * while the AlignedMap() functions return aligned Map objects and thus should be called only with 16-byte-aligned + * \a data pointers. + * + * \see class Map + */ + //@{ + static inline ConstMapType Map(const Scalar* data) + { return ConstMapType(data); } + static inline MapType Map(Scalar* data) + { return MapType(data); } + static inline ConstMapType Map(const Scalar* data, Index size) + { return ConstMapType(data, size); } + static inline MapType Map(Scalar* data, Index size) + { return MapType(data, size); } + static inline ConstMapType Map(const Scalar* data, Index rows, Index cols) + { return ConstMapType(data, rows, cols); } + static inline MapType Map(Scalar* data, Index rows, Index cols) + { return MapType(data, rows, cols); } + + static inline ConstAlignedMapType MapAligned(const Scalar* data) + { return ConstAlignedMapType(data); } + static inline AlignedMapType MapAligned(Scalar* data) + { return AlignedMapType(data); } + static inline ConstAlignedMapType MapAligned(const Scalar* data, Index size) + { return ConstAlignedMapType(data, size); } + static inline AlignedMapType MapAligned(Scalar* data, Index size) + { return AlignedMapType(data, size); } + static inline ConstAlignedMapType MapAligned(const Scalar* data, Index rows, Index cols) + { return ConstAlignedMapType(data, rows, cols); } + static inline AlignedMapType MapAligned(Scalar* data, Index rows, Index cols) + { return AlignedMapType(data, rows, cols); } + + template + static inline typename StridedConstMapType >::type Map(const Scalar* data, const Stride& stride) + { return typename StridedConstMapType >::type(data, stride); } + template + static inline typename StridedMapType >::type Map(Scalar* data, const Stride& stride) + { return typename StridedMapType >::type(data, stride); } + template + static inline typename StridedConstMapType >::type Map(const Scalar* data, Index size, const Stride& stride) + { return typename StridedConstMapType >::type(data, size, stride); } + template + static inline typename StridedMapType >::type Map(Scalar* data, Index size, const Stride& stride) + { return typename StridedMapType >::type(data, size, stride); } + template + static inline typename StridedConstMapType >::type Map(const Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedConstMapType >::type(data, rows, cols, stride); } + template + static inline typename StridedMapType >::type Map(Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedMapType >::type(data, rows, cols, stride); } + + template + static inline typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, stride); } + template + static inline typename StridedAlignedMapType >::type MapAligned(Scalar* data, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, stride); } + template + static inline typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, Index size, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, size, stride); } + template + static inline typename StridedAlignedMapType >::type MapAligned(Scalar* data, Index size, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, size, stride); } + template + static inline typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, rows, cols, stride); } + template + static inline typename StridedAlignedMapType >::type MapAligned(Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, rows, cols, stride); } + //@} + + using Base::setConstant; + Derived& setConstant(Index size, const Scalar& value); + Derived& setConstant(Index rows, Index cols, const Scalar& value); + + using Base::setZero; + Derived& setZero(Index size); + Derived& setZero(Index rows, Index cols); + + using Base::setOnes; + Derived& setOnes(Index size); + Derived& setOnes(Index rows, Index cols); + + using Base::setRandom; + Derived& setRandom(Index size); + Derived& setRandom(Index rows, Index cols); + + #ifdef EIGEN_PLAINOBJECTBASE_PLUGIN + #include EIGEN_PLAINOBJECTBASE_PLUGIN + #endif + + protected: + /** \internal Resizes *this in preparation for assigning \a other to it. + * Takes care of doing all the checking that's needed. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE void _resize_to_match(const EigenBase& other) + { + #ifdef EIGEN_NO_AUTOMATIC_RESIZING + eigen_assert((this->size()==0 || (IsVectorAtCompileTime ? (this->size() == other.size()) + : (rows() == other.rows() && cols() == other.cols()))) + && "Size mismatch. Automatic resizing is disabled because EIGEN_NO_AUTOMATIC_RESIZING is defined"); + #else + resizeLike(other); + #endif + } + + /** + * \brief Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + * + * \sa operator=(const MatrixBase&), _set_noalias() + * + * \internal + */ + template + EIGEN_STRONG_INLINE Derived& _set(const DenseBase& other) + { + _set_selector(other.derived(), typename internal::conditional(int(OtherDerived::Flags) & EvalBeforeAssigningBit), internal::true_type, internal::false_type>::type()); + return this->derived(); + } + + template + EIGEN_STRONG_INLINE void _set_selector(const OtherDerived& other, const internal::true_type&) { _set_noalias(other.eval()); } + + template + EIGEN_STRONG_INLINE void _set_selector(const OtherDerived& other, const internal::false_type&) { _set_noalias(other); } + + /** \internal Like _set() but additionally makes the assumption that no aliasing effect can happen (which + * is the case when creating a new matrix) so one can enforce lazy evaluation. + * + * \sa operator=(const MatrixBase&), _set() + */ + template + EIGEN_STRONG_INLINE Derived& _set_noalias(const DenseBase& other) + { + // I don't think we need this resize call since the lazyAssign will anyways resize + // and lazyAssign will be called by the assign selector. + //_resize_to_match(other); + // the 'false' below means to enforce lazy evaluation. We don't use lazyAssign() because + // it wouldn't allow to copy a row-vector into a column-vector. + return internal::assign_selector::run(this->derived(), other.derived()); + } + + template + EIGEN_STRONG_INLINE void _init2(Index rows, Index cols, typename internal::enable_if::type* = 0) + { + EIGEN_STATIC_ASSERT(bool(NumTraits::IsInteger) && + bool(NumTraits::IsInteger), + FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED) + eigen_assert(rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); + internal::check_rows_cols_for_overflow(rows, cols); + m_storage.resize(rows*cols,rows,cols); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + template + EIGEN_STRONG_INLINE void _init2(const Scalar& x, const Scalar& y, typename internal::enable_if::type* = 0) + { + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 2) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + } + + template + friend struct internal::matrix_swap_impl; + + /** \internal generic implementation of swap for dense storage since for dynamic-sized matrices of same type it is enough to swap the + * data pointers. + */ + template + void _swap(DenseBase const & other) + { + enum { SwapPointers = internal::is_same::value && Base::SizeAtCompileTime==Dynamic }; + internal::matrix_swap_impl::run(this->derived(), other.const_cast_derived()); + } + + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + static EIGEN_STRONG_INLINE void _check_template_params() + { + EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (Options&RowMajor)==RowMajor) + && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (Options&RowMajor)==0) + && ((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0)) + && ((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0)) + && ((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0)) + && ((MaxColsAtCompileTime == Dynamic) || (MaxColsAtCompileTime >= 0)) + && (MaxRowsAtCompileTime == RowsAtCompileTime || RowsAtCompileTime==Dynamic) + && (MaxColsAtCompileTime == ColsAtCompileTime || ColsAtCompileTime==Dynamic) + && (Options & (DontAlign|RowMajor)) == Options), + INVALID_MATRIX_TEMPLATE_PARAMETERS) + } +#endif + +private: + enum { ThisConstantIsPrivateInPlainObjectBase }; +}; + +template +struct internal::conservative_resize_like_impl +{ + typedef typename Derived::Index Index; + static void run(DenseBase& _this, Index rows, Index cols) + { + if (_this.rows() == rows && _this.cols() == cols) return; + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived) + + if ( ( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows + (!Derived::IsRowMajor && _this.rows() == rows) ) // column-major and we change only the number of columns + { + internal::check_rows_cols_for_overflow(rows, cols); + _this.derived().m_storage.conservativeResize(rows*cols,rows,cols); + } + else + { + // The storage order does not allow us to use reallocation. + typename Derived::PlainObject tmp(rows,cols); + const Index common_rows = (std::min)(rows, _this.rows()); + const Index common_cols = (std::min)(cols, _this.cols()); + tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols); + _this.derived().swap(tmp); + } + } + + static void run(DenseBase& _this, const DenseBase& other) + { + if (_this.rows() == other.rows() && _this.cols() == other.cols()) return; + + // Note: Here is space for improvement. Basically, for conservativeResize(Index,Index), + // neither RowsAtCompileTime or ColsAtCompileTime must be Dynamic. If only one of the + // dimensions is dynamic, one could use either conservativeResize(Index rows, NoChange_t) or + // conservativeResize(NoChange_t, Index cols). For these methods new static asserts like + // EIGEN_STATIC_ASSERT_DYNAMIC_ROWS and EIGEN_STATIC_ASSERT_DYNAMIC_COLS would be good. + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived) + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(OtherDerived) + + if ( ( Derived::IsRowMajor && _this.cols() == other.cols()) || // row-major and we change only the number of rows + (!Derived::IsRowMajor && _this.rows() == other.rows()) ) // column-major and we change only the number of columns + { + const Index new_rows = other.rows() - _this.rows(); + const Index new_cols = other.cols() - _this.cols(); + _this.derived().m_storage.conservativeResize(other.size(),other.rows(),other.cols()); + if (new_rows>0) + _this.bottomRightCorner(new_rows, other.cols()) = other.bottomRows(new_rows); + else if (new_cols>0) + _this.bottomRightCorner(other.rows(), new_cols) = other.rightCols(new_cols); + } + else + { + // The storage order does not allow us to use reallocation. + typename Derived::PlainObject tmp(other); + const Index common_rows = (std::min)(tmp.rows(), _this.rows()); + const Index common_cols = (std::min)(tmp.cols(), _this.cols()); + tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols); + _this.derived().swap(tmp); + } + } +}; + +namespace internal { + +template +struct conservative_resize_like_impl +{ + typedef typename Derived::Index Index; + static void run(DenseBase& _this, Index size) + { + const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : size; + const Index new_cols = Derived::RowsAtCompileTime==1 ? size : 1; + _this.derived().m_storage.conservativeResize(size,new_rows,new_cols); + } + + static void run(DenseBase& _this, const DenseBase& other) + { + if (_this.rows() == other.rows() && _this.cols() == other.cols()) return; + + const Index num_new_elements = other.size() - _this.size(); + + const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : other.rows(); + const Index new_cols = Derived::RowsAtCompileTime==1 ? other.cols() : 1; + _this.derived().m_storage.conservativeResize(other.size(),new_rows,new_cols); + + if (num_new_elements > 0) + _this.tail(num_new_elements) = other.tail(num_new_elements); + } +}; + +template +struct matrix_swap_impl +{ + static inline void run(MatrixTypeA& a, MatrixTypeB& b) + { + a.base().swap(b); + } +}; + +template +struct matrix_swap_impl +{ + static inline void run(MatrixTypeA& a, MatrixTypeB& b) + { + static_cast(a).m_storage.swap(static_cast(b).m_storage); + } +}; + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_DENSESTORAGEBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/Product.h b/Biopool/Sources/Eigen/src/Core/Product.h new file mode 100644 index 0000000..53eb0fb --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Product.h @@ -0,0 +1,113 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2011 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PRODUCT_H +#define EIGEN_PRODUCT_H + +template class Product; +template class ProductImpl; + +/** \class Product + * \ingroup Core_Module + * + * \brief Expression of the product of two arbitrary matrices or vectors + * + * \param Lhs the type of the left-hand side expression + * \param Rhs the type of the right-hand side expression + * + * This class represents an expression of the product of two arbitrary matrices. + * + */ + +namespace internal { +template +struct traits > +{ + typedef MatrixXpr XprKind; + typedef typename remove_all::type LhsCleaned; + typedef typename remove_all::type RhsCleaned; + typedef typename scalar_product_traits::Scalar, typename traits::Scalar>::ReturnType Scalar; + typedef typename promote_storage_type::StorageKind, + typename traits::StorageKind>::ret StorageKind; + typedef typename promote_index_type::Index, + typename traits::Index>::type Index; + enum { + RowsAtCompileTime = LhsCleaned::RowsAtCompileTime, + ColsAtCompileTime = RhsCleaned::ColsAtCompileTime, + MaxRowsAtCompileTime = LhsCleaned::MaxRowsAtCompileTime, + MaxColsAtCompileTime = RhsCleaned::MaxColsAtCompileTime, + Flags = (MaxRowsAtCompileTime==1 ? RowMajorBit : 0), // TODO should be no storage order + CoeffReadCost = 0 // TODO CoeffReadCost should not be part of the expression traits + }; +}; +} // end namespace internal + + +template +class Product : public ProductImpl::StorageKind, + typename internal::traits::StorageKind>::ret> +{ + public: + + typedef typename ProductImpl< + Lhs, Rhs, + typename internal::promote_storage_type::ret>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(Product) + + typedef typename Lhs::Nested LhsNested; + typedef typename Rhs::Nested RhsNested; + typedef typename internal::remove_all::type LhsNestedCleaned; + typedef typename internal::remove_all::type RhsNestedCleaned; + + Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs) + { + eigen_assert(lhs.cols() == rhs.rows() + && "invalid matrix product" + && "if you wanted a coeff-wise or a dot product use the respective explicit functions"); + } + + inline Index rows() const { return m_lhs.rows(); } + inline Index cols() const { return m_rhs.cols(); } + + const LhsNestedCleaned& lhs() const { return m_lhs; } + const RhsNestedCleaned& rhs() const { return m_rhs; } + + protected: + + const LhsNested m_lhs; + const RhsNested m_rhs; +}; + +template +class ProductImpl : public internal::dense_xpr_base >::type +{ + typedef Product Derived; + public: + + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) +}; + +#endif // EIGEN_PRODUCT_H diff --git a/Biopool/Sources/Eigen/src/Core/ProductBase.h b/Biopool/Sources/Eigen/src/Core/ProductBase.h new file mode 100644 index 0000000..6cf02a6 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/ProductBase.h @@ -0,0 +1,293 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PRODUCTBASE_H +#define EIGEN_PRODUCTBASE_H + +namespace Eigen { + +/** \class ProductBase + * \ingroup Core_Module + * + */ + +namespace internal { +template +struct traits > +{ + typedef MatrixXpr XprKind; + typedef typename remove_all<_Lhs>::type Lhs; + typedef typename remove_all<_Rhs>::type Rhs; + typedef typename scalar_product_traits::ReturnType Scalar; + typedef typename promote_storage_type::StorageKind, + typename traits::StorageKind>::ret StorageKind; + typedef typename promote_index_type::Index, + typename traits::Index>::type Index; + enum { + RowsAtCompileTime = traits::RowsAtCompileTime, + ColsAtCompileTime = traits::ColsAtCompileTime, + MaxRowsAtCompileTime = traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = traits::MaxColsAtCompileTime, + Flags = (MaxRowsAtCompileTime==1 ? RowMajorBit : 0) + | EvalBeforeNestingBit | EvalBeforeAssigningBit | NestByRefBit, + // Note that EvalBeforeNestingBit and NestByRefBit + // are not used in practice because nested is overloaded for products + CoeffReadCost = 0 // FIXME why is it needed ? + }; +}; +} + +#define EIGEN_PRODUCT_PUBLIC_INTERFACE(Derived) \ + typedef ProductBase Base; \ + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ + typedef typename Base::LhsNested LhsNested; \ + typedef typename Base::_LhsNested _LhsNested; \ + typedef typename Base::LhsBlasTraits LhsBlasTraits; \ + typedef typename Base::ActualLhsType ActualLhsType; \ + typedef typename Base::_ActualLhsType _ActualLhsType; \ + typedef typename Base::RhsNested RhsNested; \ + typedef typename Base::_RhsNested _RhsNested; \ + typedef typename Base::RhsBlasTraits RhsBlasTraits; \ + typedef typename Base::ActualRhsType ActualRhsType; \ + typedef typename Base::_ActualRhsType _ActualRhsType; \ + using Base::m_lhs; \ + using Base::m_rhs; + +template +class ProductBase : public MatrixBase +{ + public: + typedef MatrixBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ProductBase) + + typedef typename Lhs::Nested LhsNested; + typedef typename internal::remove_all::type _LhsNested; + typedef internal::blas_traits<_LhsNested> LhsBlasTraits; + typedef typename LhsBlasTraits::DirectLinearAccessType ActualLhsType; + typedef typename internal::remove_all::type _ActualLhsType; + typedef typename internal::traits::Scalar LhsScalar; + + typedef typename Rhs::Nested RhsNested; + typedef typename internal::remove_all::type _RhsNested; + typedef internal::blas_traits<_RhsNested> RhsBlasTraits; + typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType; + typedef typename internal::remove_all::type _ActualRhsType; + typedef typename internal::traits::Scalar RhsScalar; + + // Diagonal of a product: no need to evaluate the arguments because they are going to be evaluated only once + typedef CoeffBasedProduct FullyLazyCoeffBaseProductType; + + public: + + typedef typename Base::PlainObject PlainObject; + + ProductBase(const Lhs& lhs, const Rhs& rhs) + : m_lhs(lhs), m_rhs(rhs) + { + eigen_assert(lhs.cols() == rhs.rows() + && "invalid matrix product" + && "if you wanted a coeff-wise or a dot product use the respective explicit functions"); + } + + inline Index rows() const { return m_lhs.rows(); } + inline Index cols() const { return m_rhs.cols(); } + + template + inline void evalTo(Dest& dst) const { dst.setZero(); scaleAndAddTo(dst,Scalar(1)); } + + template + inline void addTo(Dest& dst) const { scaleAndAddTo(dst,Scalar(1)); } + + template + inline void subTo(Dest& dst) const { scaleAndAddTo(dst,Scalar(-1)); } + + template + inline void scaleAndAddTo(Dest& dst,Scalar alpha) const { derived().scaleAndAddTo(dst,alpha); } + + const _LhsNested& lhs() const { return m_lhs; } + const _RhsNested& rhs() const { return m_rhs; } + + // Implicit conversion to the nested type (trigger the evaluation of the product) + operator const PlainObject& () const + { + m_result.resize(m_lhs.rows(), m_rhs.cols()); + derived().evalTo(m_result); + return m_result; + } + + const Diagonal diagonal() const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs); } + + template + const Diagonal diagonal() const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs); } + + const Diagonal diagonal(Index index) const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs).diagonal(index); } + + // restrict coeff accessors to 1x1 expressions. No need to care about mutators here since this isnt a Lvalue expression + typename Base::CoeffReturnType coeff(Index row, Index col) const + { +#ifdef EIGEN2_SUPPORT + return lhs().row(row).cwiseProduct(rhs().col(col).transpose()).sum(); +#else + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + Matrix result = *this; + return result.coeff(row,col); +#endif + } + + typename Base::CoeffReturnType coeff(Index i) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + Matrix result = *this; + return result.coeff(i); + } + + const Scalar& coeffRef(Index row, Index col) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeffRef(row,col); + } + + const Scalar& coeffRef(Index i) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeffRef(i); + } + + protected: + + LhsNested m_lhs; + RhsNested m_rhs; + + mutable PlainObject m_result; +}; + +// here we need to overload the nested rule for products +// such that the nested type is a const reference to a plain matrix +namespace internal { +template +struct nested, N, PlainObject> +{ + typedef PlainObject const& type; +}; +} + +template +class ScaledProduct; + +// Note that these two operator* functions are not defined as member +// functions of ProductBase, because, otherwise we would have to +// define all overloads defined in MatrixBase. Furthermore, Using +// "using Base::operator*" would not work with MSVC. +// +// Also note that here we accept any compatible scalar types +template +const ScaledProduct +operator*(const ProductBase& prod, typename Derived::Scalar x) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(const ProductBase& prod, typename Derived::RealScalar x) +{ return ScaledProduct(prod.derived(), x); } + + +template +const ScaledProduct +operator*(typename Derived::Scalar x,const ProductBase& prod) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(typename Derived::RealScalar x,const ProductBase& prod) +{ return ScaledProduct(prod.derived(), x); } + +namespace internal { +template +struct traits > + : traits, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> > +{ + typedef typename traits::StorageKind StorageKind; +}; +} + +template +class ScaledProduct + : public ProductBase, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> +{ + public: + typedef ProductBase, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> Base; + typedef typename Base::Scalar Scalar; + typedef typename Base::PlainObject PlainObject; +// EIGEN_PRODUCT_PUBLIC_INTERFACE(ScaledProduct) + + ScaledProduct(const NestedProduct& prod, Scalar x) + : Base(prod.lhs(),prod.rhs()), m_prod(prod), m_alpha(x) {} + + template + inline void evalTo(Dest& dst) const { dst.setZero(); scaleAndAddTo(dst, Scalar(1)); } + + template + inline void addTo(Dest& dst) const { scaleAndAddTo(dst, Scalar(1)); } + + template + inline void subTo(Dest& dst) const { scaleAndAddTo(dst, Scalar(-1)); } + + template + inline void scaleAndAddTo(Dest& dst,Scalar alpha) const { m_prod.derived().scaleAndAddTo(dst,alpha * m_alpha); } + + const Scalar& alpha() const { return m_alpha; } + + protected: + const NestedProduct& m_prod; + Scalar m_alpha; +}; + +/** \internal + * Overloaded to perform an efficient C = (A*B).lazy() */ +template +template +Derived& MatrixBase::lazyAssign(const ProductBase& other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_PRODUCTBASE_H diff --git a/Biopool/Sources/Eigen/src/Core/Random.h b/Biopool/Sources/Eigen/src/Core/Random.h new file mode 100644 index 0000000..1470e91 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Random.h @@ -0,0 +1,167 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_RANDOM_H +#define EIGEN_RANDOM_H + +namespace Eigen { + +namespace internal { + +template struct scalar_random_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_random_op) + template + inline const Scalar operator() (Index, Index = 0) const { return random(); } +}; + +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = false, IsRepeatable = false }; }; + +} // end namespace internal + +/** \returns a random matrix expression + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Random() should be used + * instead. + * + * Example: \include MatrixBase_random_int_int.cpp + * Output: \verbinclude MatrixBase_random_int_int.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary matrix whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index), MatrixBase::Random() + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random(Index rows, Index cols) +{ + return NullaryExpr(rows, cols, internal::scalar_random_op()); +} + +/** \returns a random vector expression + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Random() should be used + * instead. + * + * Example: \include MatrixBase_random_int.cpp + * Output: \verbinclude MatrixBase_random_int.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary vector whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index,Index), MatrixBase::Random() + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random(Index size) +{ + return NullaryExpr(size, internal::scalar_random_op()); +} + +/** \returns a fixed-size random matrix or vector expression + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_random.cpp + * Output: \verbinclude MatrixBase_random.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary matrix whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index,Index), MatrixBase::Random(Index) + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random() +{ + return NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_random_op()); +} + +/** Sets all coefficients in this expression to random values. + * + * Example: \include MatrixBase_setRandom.cpp + * Output: \verbinclude MatrixBase_setRandom.out + * + * \sa class CwiseNullaryOp, setRandom(Index), setRandom(Index,Index) + */ +template +inline Derived& DenseBase::setRandom() +{ + return *this = Random(rows(), cols()); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to random values. + * + * \only_for_vectors + * + * Example: \include Matrix_setRandom_int.cpp + * Output: \verbinclude Matrix_setRandom_int.out + * + * \sa MatrixBase::setRandom(), setRandom(Index,Index), class CwiseNullaryOp, MatrixBase::Random() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setRandom(Index size) +{ + resize(size); + return setRandom(); +} + +/** Resizes to the given size, and sets all coefficients in this expression to random values. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setRandom_int_int.cpp + * Output: \verbinclude Matrix_setRandom_int_int.out + * + * \sa MatrixBase::setRandom(), setRandom(Index), class CwiseNullaryOp, MatrixBase::Random() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setRandom(Index rows, Index cols) +{ + resize(rows, cols); + return setRandom(); +} + +} // end namespace Eigen + +#endif // EIGEN_RANDOM_H diff --git a/Biopool/Sources/Eigen/src/Core/Redux.h b/Biopool/Sources/Eigen/src/Core/Redux.h new file mode 100644 index 0000000..d66ff00 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Redux.h @@ -0,0 +1,421 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REDUX_H +#define EIGEN_REDUX_H + +namespace Eigen { + +namespace internal { + +// TODO +// * implement other kind of vectorization +// * factorize code + +/*************************************************************************** +* Part 1 : the logic deciding a strategy for vectorization and unrolling +***************************************************************************/ + +template +struct redux_traits +{ +public: + enum { + PacketSize = packet_traits::size, + InnerMaxSize = int(Derived::IsRowMajor) + ? Derived::MaxColsAtCompileTime + : Derived::MaxRowsAtCompileTime + }; + + enum { + MightVectorize = (int(Derived::Flags)&ActualPacketAccessBit) + && (functor_traits::PacketAccess), + MayLinearVectorize = MightVectorize && (int(Derived::Flags)&LinearAccessBit), + MaySliceVectorize = MightVectorize && int(InnerMaxSize)>=3*PacketSize + }; + +public: + enum { + Traversal = int(MayLinearVectorize) ? int(LinearVectorizedTraversal) + : int(MaySliceVectorize) ? int(SliceVectorizedTraversal) + : int(DefaultTraversal) + }; + +public: + enum { + Cost = ( Derived::SizeAtCompileTime == Dynamic + || Derived::CoeffReadCost == Dynamic + || (Derived::SizeAtCompileTime!=1 && functor_traits::Cost == Dynamic) + ) ? Dynamic + : Derived::SizeAtCompileTime * Derived::CoeffReadCost + + (Derived::SizeAtCompileTime-1) * functor_traits::Cost, + UnrollingLimit = EIGEN_UNROLLING_LIMIT * (int(Traversal) == int(DefaultTraversal) ? 1 : int(PacketSize)) + }; + +public: + enum { + Unrolling = Cost != Dynamic && Cost <= UnrollingLimit + ? CompleteUnrolling + : NoUnrolling + }; +}; + +/*************************************************************************** +* Part 2 : unrollers +***************************************************************************/ + +/*** no vectorization ***/ + +template +struct redux_novec_unroller +{ + enum { + HalfLength = Length/2 + }; + + typedef typename Derived::Scalar Scalar; + + static EIGEN_STRONG_INLINE Scalar run(const Derived &mat, const Func& func) + { + return func(redux_novec_unroller::run(mat,func), + redux_novec_unroller::run(mat,func)); + } +}; + +template +struct redux_novec_unroller +{ + enum { + outer = Start / Derived::InnerSizeAtCompileTime, + inner = Start % Derived::InnerSizeAtCompileTime + }; + + typedef typename Derived::Scalar Scalar; + + static EIGEN_STRONG_INLINE Scalar run(const Derived &mat, const Func&) + { + return mat.coeffByOuterInner(outer, inner); + } +}; + +// This is actually dead code and will never be called. It is required +// to prevent false warnings regarding failed inlining though +// for 0 length run() will never be called at all. +template +struct redux_novec_unroller +{ + typedef typename Derived::Scalar Scalar; + static EIGEN_STRONG_INLINE Scalar run(const Derived&, const Func&) { return Scalar(); } +}; + +/*** vectorization ***/ + +template +struct redux_vec_unroller +{ + enum { + PacketSize = packet_traits::size, + HalfLength = Length/2 + }; + + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + + static EIGEN_STRONG_INLINE PacketScalar run(const Derived &mat, const Func& func) + { + return func.packetOp( + redux_vec_unroller::run(mat,func), + redux_vec_unroller::run(mat,func) ); + } +}; + +template +struct redux_vec_unroller +{ + enum { + index = Start * packet_traits::size, + outer = index / int(Derived::InnerSizeAtCompileTime), + inner = index % int(Derived::InnerSizeAtCompileTime), + alignment = (Derived::Flags & AlignedBit) ? Aligned : Unaligned + }; + + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + + static EIGEN_STRONG_INLINE PacketScalar run(const Derived &mat, const Func&) + { + return mat.template packetByOuterInner(outer, inner); + } +}; + +/*************************************************************************** +* Part 3 : implementation of all cases +***************************************************************************/ + +template::Traversal, + int Unrolling = redux_traits::Unrolling +> +struct redux_impl; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename Derived::Index Index; + static EIGEN_STRONG_INLINE Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + Scalar res; + res = mat.coeffByOuterInner(0, 0); + for(Index i = 1; i < mat.innerSize(); ++i) + res = func(res, mat.coeffByOuterInner(0, i)); + for(Index i = 1; i < mat.outerSize(); ++i) + for(Index j = 0; j < mat.innerSize(); ++j) + res = func(res, mat.coeffByOuterInner(i, j)); + return res; + } +}; + +template +struct redux_impl + : public redux_novec_unroller +{}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + typedef typename Derived::Index Index; + + static Scalar run(const Derived& mat, const Func& func) + { + const Index size = mat.size(); + eigen_assert(size && "you are using an empty matrix"); + const Index packetSize = packet_traits::size; + const Index alignedStart = internal::first_aligned(mat); + enum { + alignment = bool(Derived::Flags & DirectAccessBit) || bool(Derived::Flags & AlignedBit) + ? Aligned : Unaligned + }; + const Index alignedSize2 = ((size-alignedStart)/(2*packetSize))*(2*packetSize); + const Index alignedSize = ((size-alignedStart)/(packetSize))*(packetSize); + const Index alignedEnd2 = alignedStart + alignedSize2; + const Index alignedEnd = alignedStart + alignedSize; + Scalar res; + if(alignedSize) + { + PacketScalar packet_res0 = mat.template packet(alignedStart); + if(alignedSize>packetSize) // we have at least two packets to partly unroll the loop + { + PacketScalar packet_res1 = mat.template packet(alignedStart+packetSize); + for(Index index = alignedStart + 2*packetSize; index < alignedEnd2; index += 2*packetSize) + { + packet_res0 = func.packetOp(packet_res0, mat.template packet(index)); + packet_res1 = func.packetOp(packet_res1, mat.template packet(index+packetSize)); + } + + packet_res0 = func.packetOp(packet_res0,packet_res1); + if(alignedEnd>alignedEnd2) + packet_res0 = func.packetOp(packet_res0, mat.template packet(alignedEnd2)); + } + res = func.predux(packet_res0); + + for(Index index = 0; index < alignedStart; ++index) + res = func(res,mat.coeff(index)); + + for(Index index = alignedEnd; index < size; ++index) + res = func(res,mat.coeff(index)); + } + else // too small to vectorize anything. + // since this is dynamic-size hence inefficient anyway for such small sizes, don't try to optimize. + { + res = mat.coeff(0); + for(Index index = 1; index < size; ++index) + res = func(res,mat.coeff(index)); + } + + return res; + } +}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + typedef typename Derived::Index Index; + + static Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + const Index innerSize = mat.innerSize(); + const Index outerSize = mat.outerSize(); + enum { + packetSize = packet_traits::size + }; + const Index packetedInnerSize = ((innerSize)/packetSize)*packetSize; + Scalar res; + if(packetedInnerSize) + { + PacketScalar packet_res = mat.template packet(0,0); + for(Index j=0; j(j,i)); + + res = func.predux(packet_res); + for(Index j=0; j::run(mat, func); + } + + return res; + } +}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + enum { + PacketSize = packet_traits::size, + Size = Derived::SizeAtCompileTime, + VectorizedSize = (Size / PacketSize) * PacketSize + }; + static EIGEN_STRONG_INLINE Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + Scalar res = func.predux(redux_vec_unroller::run(mat,func)); + if (VectorizedSize != Size) + res = func(res,redux_novec_unroller::run(mat,func)); + return res; + } +}; + +} // end namespace internal + +/*************************************************************************** +* Part 4 : public API +***************************************************************************/ + + +/** \returns the result of a full redux operation on the whole matrix or vector using \a func + * + * The template parameter \a BinaryOp is the type of the functor \a func which must be + * an associative operator. Both current STL and TR1 functor styles are handled. + * + * \sa DenseBase::sum(), DenseBase::minCoeff(), DenseBase::maxCoeff(), MatrixBase::colwise(), MatrixBase::rowwise() + */ +template +template +EIGEN_STRONG_INLINE typename internal::result_of::Scalar)>::type +DenseBase::redux(const Func& func) const +{ + typedef typename internal::remove_all::type ThisNested; + return internal::redux_impl + ::run(derived(), func); +} + +/** \returns the minimum of all coefficients of *this + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::minCoeff() const +{ + return this->redux(Eigen::internal::scalar_min_op()); +} + +/** \returns the maximum of all coefficients of *this + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::maxCoeff() const +{ + return this->redux(Eigen::internal::scalar_max_op()); +} + +/** \returns the sum of all coefficients of *this + * + * \sa trace(), prod(), mean() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::sum() const +{ + if(SizeAtCompileTime==0 || (SizeAtCompileTime==Dynamic && size()==0)) + return Scalar(0); + return this->redux(Eigen::internal::scalar_sum_op()); +} + +/** \returns the mean of all coefficients of *this +* +* \sa trace(), prod(), sum() +*/ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::mean() const +{ + return Scalar(this->redux(Eigen::internal::scalar_sum_op())) / Scalar(this->size()); +} + +/** \returns the product of all coefficients of *this + * + * Example: \include MatrixBase_prod.cpp + * Output: \verbinclude MatrixBase_prod.out + * + * \sa sum(), mean(), trace() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::prod() const +{ + if(SizeAtCompileTime==0 || (SizeAtCompileTime==Dynamic && size()==0)) + return Scalar(1); + return this->redux(Eigen::internal::scalar_product_op()); +} + +/** \returns the trace of \c *this, i.e. the sum of the coefficients on the main diagonal. + * + * \c *this can be any matrix, not necessarily square. + * + * \sa diagonal(), sum() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +MatrixBase::trace() const +{ + return derived().diagonal().sum(); +} + +} // end namespace Eigen + +#endif // EIGEN_REDUX_H diff --git a/Biopool/Sources/Eigen/src/Core/Replicate.h b/Biopool/Sources/Eigen/src/Core/Replicate.h new file mode 100644 index 0000000..79e3578 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Replicate.h @@ -0,0 +1,192 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REPLICATE_H +#define EIGEN_REPLICATE_H + +namespace Eigen { + +/** + * \class Replicate + * \ingroup Core_Module + * + * \brief Expression of the multiple replication of a matrix or vector + * + * \param MatrixType the type of the object we are replicating + * + * This class represents an expression of the multiple replication of a matrix or vector. + * It is the return type of DenseBase::replicate() and most of the time + * this is the only way it is used. + * + * \sa DenseBase::replicate() + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename MatrixType::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + enum { + Factor = (RowFactor==Dynamic || ColFactor==Dynamic) ? Dynamic : RowFactor*ColFactor + }; + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + enum { + RowsAtCompileTime = RowFactor==Dynamic || int(MatrixType::RowsAtCompileTime)==Dynamic + ? Dynamic + : RowFactor * MatrixType::RowsAtCompileTime, + ColsAtCompileTime = ColFactor==Dynamic || int(MatrixType::ColsAtCompileTime)==Dynamic + ? Dynamic + : ColFactor * MatrixType::ColsAtCompileTime, + //FIXME we don't propagate the max sizes !!! + MaxRowsAtCompileTime = RowsAtCompileTime, + MaxColsAtCompileTime = ColsAtCompileTime, + IsRowMajor = MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1 ? 1 + : MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1 ? 0 + : (MatrixType::Flags & RowMajorBit) ? 1 : 0, + Flags = (_MatrixTypeNested::Flags & HereditaryBits & ~RowMajorBit) | (IsRowMajor ? RowMajorBit : 0), + CoeffReadCost = _MatrixTypeNested::CoeffReadCost + }; +}; +} + +template class Replicate + : public internal::dense_xpr_base< Replicate >::type +{ + typedef typename internal::traits::MatrixTypeNested MatrixTypeNested; + typedef typename internal::traits::_MatrixTypeNested _MatrixTypeNested; + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Replicate) + + template + inline explicit Replicate(const OriginalMatrixType& matrix) + : m_matrix(matrix), m_rowFactor(RowFactor), m_colFactor(ColFactor) + { + EIGEN_STATIC_ASSERT((internal::is_same::type,OriginalMatrixType>::value), + THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE) + eigen_assert(RowFactor!=Dynamic && ColFactor!=Dynamic); + } + + template + inline Replicate(const OriginalMatrixType& matrix, Index rowFactor, Index colFactor) + : m_matrix(matrix), m_rowFactor(rowFactor), m_colFactor(colFactor) + { + EIGEN_STATIC_ASSERT((internal::is_same::type,OriginalMatrixType>::value), + THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE) + } + + inline Index rows() const { return m_matrix.rows() * m_rowFactor.value(); } + inline Index cols() const { return m_matrix.cols() * m_colFactor.value(); } + + inline Scalar coeff(Index row, Index col) const + { + // try to avoid using modulo; this is a pure optimization strategy + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? row + : row%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? col + : col%m_matrix.cols(); + + return m_matrix.coeff(actual_row, actual_col); + } + template + inline PacketScalar packet(Index row, Index col) const + { + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? row + : row%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? col + : col%m_matrix.cols(); + + return m_matrix.template packet(actual_row, actual_col); + } + + const _MatrixTypeNested& nestedExpression() const + { + return m_matrix; + } + + protected: + MatrixTypeNested m_matrix; + const internal::variable_if_dynamic m_rowFactor; + const internal::variable_if_dynamic m_colFactor; +}; + +/** + * \return an expression of the replication of \c *this + * + * Example: \include MatrixBase_replicate.cpp + * Output: \verbinclude MatrixBase_replicate.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(Index,Index), class Replicate + */ +template +template +inline const Replicate +DenseBase::replicate() const +{ + return Replicate(derived()); +} + +/** + * \return an expression of the replication of \c *this + * + * Example: \include MatrixBase_replicate_int_int.cpp + * Output: \verbinclude MatrixBase_replicate_int_int.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(), class Replicate + */ +template +inline const Replicate +DenseBase::replicate(Index rowFactor,Index colFactor) const +{ + return Replicate(derived(),rowFactor,colFactor); +} + +/** + * \return an expression of the replication of each column (or row) of \c *this + * + * Example: \include DirectionWise_replicate_int.cpp + * Output: \verbinclude DirectionWise_replicate_int.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(), class Replicate + */ +template +const typename VectorwiseOp::ReplicateReturnType +VectorwiseOp::replicate(Index factor) const +{ + return typename VectorwiseOp::ReplicateReturnType + (_expression(),Direction==Vertical?factor:1,Direction==Horizontal?factor:1); +} + +} // end namespace Eigen + +#endif // EIGEN_REPLICATE_H diff --git a/Biopool/Sources/Eigen/src/Core/ReturnByValue.h b/Biopool/Sources/Eigen/src/Core/ReturnByValue.h new file mode 100644 index 0000000..24b6a3f --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/ReturnByValue.h @@ -0,0 +1,103 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// Copyright (C) 2009-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_RETURNBYVALUE_H +#define EIGEN_RETURNBYVALUE_H + +namespace Eigen { + +/** \class ReturnByValue + * \ingroup Core_Module + * + */ + +namespace internal { + +template +struct traits > + : public traits::ReturnType> +{ + enum { + // We're disabling the DirectAccess because e.g. the constructor of + // the Block-with-DirectAccess expression requires to have a coeffRef method. + // Also, we don't want to have to implement the stride stuff. + Flags = (traits::ReturnType>::Flags + | EvalBeforeNestingBit) & ~DirectAccessBit + }; +}; + +/* The ReturnByValue object doesn't even have a coeff() method. + * So the only way that nesting it in an expression can work, is by evaluating it into a plain matrix. + * So internal::nested always gives the plain return matrix type. + * + * FIXME: I don't understand why we need this specialization: isn't this taken care of by the EvalBeforeNestingBit ?? + */ +template +struct nested, n, PlainObject> +{ + typedef typename traits::ReturnType type; +}; + +} // end namespace internal + +template class ReturnByValue + : public internal::dense_xpr_base< ReturnByValue >::type +{ + public: + typedef typename internal::traits::ReturnType ReturnType; + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ReturnByValue) + + template + inline void evalTo(Dest& dst) const + { static_cast(this)->evalTo(dst); } + inline Index rows() const { return static_cast(this)->rows(); } + inline Index cols() const { return static_cast(this)->cols(); } + +#ifndef EIGEN_PARSED_BY_DOXYGEN +#define Unusable YOU_ARE_TRYING_TO_ACCESS_A_SINGLE_COEFFICIENT_IN_A_SPECIAL_EXPRESSION_WHERE_THAT_IS_NOT_ALLOWED_BECAUSE_THAT_WOULD_BE_INEFFICIENT + class Unusable{ + Unusable(const Unusable&) {} + Unusable& operator=(const Unusable&) {return *this;} + }; + const Unusable& coeff(Index) const { return *reinterpret_cast(this); } + const Unusable& coeff(Index,Index) const { return *reinterpret_cast(this); } + Unusable& coeffRef(Index) { return *reinterpret_cast(this); } + Unusable& coeffRef(Index,Index) { return *reinterpret_cast(this); } +#endif +}; + +template +template +Derived& DenseBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + +} // end namespace Eigen + +#endif // EIGEN_RETURNBYVALUE_H diff --git a/Biopool/Sources/Eigen/src/Core/Reverse.h b/Biopool/Sources/Eigen/src/Core/Reverse.h new file mode 100644 index 0000000..9e4e8a2 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Reverse.h @@ -0,0 +1,239 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2009 Ricard Marxer +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REVERSE_H +#define EIGEN_REVERSE_H + +namespace Eigen { + +/** \class Reverse + * \ingroup Core_Module + * + * \brief Expression of the reverse of a vector or matrix + * + * \param MatrixType the type of the object of which we are taking the reverse + * + * This class represents an expression of the reverse of a vector. + * It is the return type of MatrixBase::reverse() and VectorwiseOp::reverse() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::reverse(), VectorwiseOp::reverse() + */ + +namespace internal { + +template +struct traits > + : traits +{ + typedef typename MatrixType::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + + // let's enable LinearAccess only with vectorization because of the product overhead + LinearAccess = ( (Direction==BothDirections) && (int(_MatrixTypeNested::Flags)&PacketAccessBit) ) + ? LinearAccessBit : 0, + + Flags = int(_MatrixTypeNested::Flags) & (HereditaryBits | LvalueBit | PacketAccessBit | LinearAccess), + + CoeffReadCost = _MatrixTypeNested::CoeffReadCost + }; +}; + +template struct reverse_packet_cond +{ + static inline PacketScalar run(const PacketScalar& x) { return preverse(x); } +}; + +template struct reverse_packet_cond +{ + static inline PacketScalar run(const PacketScalar& x) { return x; } +}; + +} // end namespace internal + +template class Reverse + : public internal::dense_xpr_base< Reverse >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Reverse) + using Base::IsRowMajor; + + // next line is necessary because otherwise const version of operator() + // is hidden by non-const version defined in this file + using Base::operator(); + + protected: + enum { + PacketSize = internal::packet_traits::size, + IsColMajor = !IsRowMajor, + ReverseRow = (Direction == Vertical) || (Direction == BothDirections), + ReverseCol = (Direction == Horizontal) || (Direction == BothDirections), + OffsetRow = ReverseRow && IsColMajor ? PacketSize : 1, + OffsetCol = ReverseCol && IsRowMajor ? PacketSize : 1, + ReversePacket = (Direction == BothDirections) + || ((Direction == Vertical) && IsColMajor) + || ((Direction == Horizontal) && IsRowMajor) + }; + typedef internal::reverse_packet_cond reverse_packet; + public: + + inline Reverse(const MatrixType& matrix) : m_matrix(matrix) { } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reverse) + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + inline Index innerStride() const + { + return -m_matrix.innerStride(); + } + + inline Scalar& operator()(Index row, Index col) + { + eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); + return coeffRef(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_matrix.const_cast_derived().coeffRef(ReverseRow ? m_matrix.rows() - row - 1 : row, + ReverseCol ? m_matrix.cols() - col - 1 : col); + } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_matrix.coeff(ReverseRow ? m_matrix.rows() - row - 1 : row, + ReverseCol ? m_matrix.cols() - col - 1 : col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(m_matrix.size() - index - 1); + } + + inline Scalar& coeffRef(Index index) + { + return m_matrix.const_cast_derived().coeffRef(m_matrix.size() - index - 1); + } + + inline Scalar& operator()(Index index) + { + eigen_assert(index >= 0 && index < m_matrix.size()); + return coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return reverse_packet::run(m_matrix.template packet( + ReverseRow ? m_matrix.rows() - row - OffsetRow : row, + ReverseCol ? m_matrix.cols() - col - OffsetCol : col)); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket( + ReverseRow ? m_matrix.rows() - row - OffsetRow : row, + ReverseCol ? m_matrix.cols() - col - OffsetCol : col, + reverse_packet::run(x)); + } + + template + inline const PacketScalar packet(Index index) const + { + return internal::preverse(m_matrix.template packet( m_matrix.size() - index - PacketSize )); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(m_matrix.size() - index - PacketSize, internal::preverse(x)); + } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_matrix; + } + + protected: + typename MatrixType::Nested m_matrix; +}; + +/** \returns an expression of the reverse of *this. + * + * Example: \include MatrixBase_reverse.cpp + * Output: \verbinclude MatrixBase_reverse.out + * + */ +template +inline typename DenseBase::ReverseReturnType +DenseBase::reverse() +{ + return derived(); +} + +/** This is the const version of reverse(). */ +template +inline const typename DenseBase::ConstReverseReturnType +DenseBase::reverse() const +{ + return derived(); +} + +/** This is the "in place" version of reverse: it reverses \c *this. + * + * In most cases it is probably better to simply use the reversed expression + * of a matrix. However, when reversing the matrix data itself is really needed, + * then this "in-place" version is probably the right choice because it provides + * the following additional features: + * - less error prone: doing the same operation with .reverse() requires special care: + * \code m = m.reverse().eval(); \endcode + * - this API allows to avoid creating a temporary (the current implementation creates a temporary, but that could be avoided using swap) + * - it allows future optimizations (cache friendliness, etc.) + * + * \sa reverse() */ +template +inline void DenseBase::reverseInPlace() +{ + derived() = derived().reverse().eval(); +} + +} // end namespace Eigen + +#endif // EIGEN_REVERSE_H diff --git a/Biopool/Sources/Eigen/src/Core/Select.h b/Biopool/Sources/Eigen/src/Core/Select.h new file mode 100644 index 0000000..92508a1 --- /dev/null +++ b/Biopool/Sources/Eigen/src/Core/Select.h @@ -0,0 +1,177 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_SELECT_H +#define EIGEN_SELECT_H + +namespace Eigen { + +/** \class Select + * \ingroup Core_Module + * + * \brief Expression of a coefficient wise version of the C++ ternary operator ?: + * + * \param ConditionMatrixType the type of the \em condition expression which must be a boolean matrix + * \param ThenMatrixType the type of the \em then expression + * \param ElseMatrixType the type of the \em else expression + * + * This class represents an expression of a coefficient wise version of the C++ ternary operator ?:. + * It is the return type of DenseBase::select() and most of the time this is the only way it is used. + * + * \sa DenseBase::select(const DenseBase&, const DenseBase&) const + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename traits::Scalar Scalar; + typedef Dense StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename ConditionMatrixType::Nested ConditionMatrixNested; + typedef typename ThenMatrixType::Nested ThenMatrixNested; + typedef typename ElseMatrixType::Nested ElseMatrixNested; + enum { + RowsAtCompileTime = ConditionMatrixType::RowsAtCompileTime, + ColsAtCompileTime = ConditionMatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = ConditionMatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = ConditionMatrixType::MaxColsAtCompileTime, + Flags = (unsigned int)ThenMatrixType::Flags & ElseMatrixType::Flags & HereditaryBits, + CoeffReadCost = traits::type>::CoeffReadCost + + EIGEN_SIZE_MAX(traits::type>::CoeffReadCost, + traits::type>::CoeffReadCost) + }; +}; +} + +template +class Select : internal::no_assignment_operator, + public internal::dense_xpr_base< Select >::type +{ + public: + + typedef typename internal::dense_xpr_base