diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..dfee473 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "pybind11"] + path = pyEdda/pybind11 + url = https://github.com/pybind/pybind11.git + branch = master \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 947960f..da93937 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,41 +8,50 @@ cmake_minimum_required (VERSION 2.8) project (edda) ### Provide options that the user can optionally select. +option (EDDA_BUILD_VIS "Build distribution vis tools." OFF) + option (EDDA_BUILD_TESTS "Build the test programs." OFF) option (EDDA_BUILD_EXAMPLES "Build the example programs." ON) -option (EDDA_BUILD_SHARED_LIBS "Build into shared libraries." ON) -option (EDDA_BUILD_PARAVIEW_PLUGINS "Build Paraview Plugins." OFF) -option (EDDA_WITH_VTK "Build with VTK integration." OFF) +option (EDDA_BUILD_SHARED_LIBS "Build into shared libraries." OFF) #option (EDDA_WITH_OPENMP "Build with OpenMP parallelization." ON) +option (EDDA_BUILD_PYTHON_BINDINGS "Build the python bindings for edda." ON) -set (THRUST_DEVICE_SYSTEM "CUDA" CACHE STRING "Thrust device backend (CUDA/TBB/OPENMP/CPP).") +set (THRUST_DEVICE_SYSTEM "CPP" CACHE STRING "Thrust device backend (CUDA/TBB/OPENMP/CPP).") set_property(CACHE THRUST_DEVICE_SYSTEM PROPERTY STRINGS "CUDA;TBB;OPENMP;CPP") ### -# Tell the compiler to use C++11. -include(CheckCXXCompilerFlag) -CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) -CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) -if(COMPILER_SUPPORTS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -elseif(COMPILER_SUPPORTS_CXX0X) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") -else() - message(WARNING "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") + + + +# Tell the compiler to use C++11, if not using Visual Studio. +if (NOT MSVC) + include(CheckCXXCompilerFlag) + CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) + CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) + if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") + else() + message(WARNING "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") + endif() endif() # All warnings on #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall) +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals") + # Load settings for the boost project. find_package (Boost REQUIRED) -if (Boost_FOUND) - include_directories (${Boost_INCLUDE_DIRS}) - link_libraries (${Boost_LIBRARIES}) +if (NOT Boost_FOUND) + set ( BOOST_ROOT "/usr/local" CACHE PATH "the root directory containing Boost") endif () - +include_directories (${Boost_INCLUDE_DIRS}) +link_libraries (${Boost_LIBRARIES}) + # default CUDA off set(EDDA_BUILD_WITH_CUDA OFF) @@ -128,39 +137,11 @@ else () set(LIB_TYPE STATIC) endif () +# for examples +add_definitions(-DSAMPLE_DATA_PATH="${CMAKE_SOURCE_DIR}/sample_data/") -# Choose either Paraview or VTK library -if (EDDA_BUILD_PARAVIEW_PLUGINS) - find_package(ParaView REQUIRED) - include(${PARAVIEW_USE_FILE}) - list(APPEND LINK_LIBS ${VTK_LIBRARIES}) - -elseif (EDDA_WITH_VTK ) - # VTK integration - find_package(VTK) - include (${VTK_USE_FILE}) - list(APPEND LINK_LIBS ${VTK_LIBRARIES}) - -endif () - - -#################### VTK fix for Cuda ####################### -macro(REMOVE_VTK_DEFINITIONS) - get_directory_property(_dir_defs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) - set(_vtk_definitions) - foreach(_item ${_dir_defs}) - if(_item MATCHES "vtk*") - list(APPEND _vtk_definitions -D${_item}) - endif() - endforeach() - remove_definitions(${_vtk_definitions}) -endmacro(REMOVE_VTK_DEFINITIONS) - -if (EDDA_BUILD_PARAVIEW_PLUGINS OR EDDA_WITH_VTK) - REMOVE_VTK_DEFINITIONS() -endif () - - +############################################## +# sources # Make the configuration file. configure_file ("${PROJECT_SOURCE_DIR}/edda.h.in" @@ -172,6 +153,13 @@ include_directories ("${PROJECT_SOURCE_DIR}/src") # Add the src subdirectory to the build. add_subdirectory (src) +############################################## +# tools + +if (EDDA_BUILD_VIS) + add_subdirectory (vis) +endif () + # If EDDA_BUILD_TESTS is on, enable testing. if (EDDA_BUILD_TESTS) enable_testing () @@ -183,3 +171,7 @@ if (EDDA_BUILD_EXAMPLES) add_subdirectory (examples) endif () +# If EDDA_BUILD_PYTHON_BINDINGS is on, build the python bindings for edda with pybind11. +if (EDDA_BUILD_PYTHON_BINDINGS) + add_subdirectory (pyEdda) +endif () diff --git a/Doxyfile b/Doxyfile index dd8361c..9748218 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.6 +# Doxyfile 1.8.12 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -46,10 +46,10 @@ PROJECT_NUMBER = PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. PROJECT_LOGO = @@ -60,7 +60,7 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# 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 @@ -70,6 +70,14 @@ OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = 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. @@ -85,14 +93,14 @@ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# If the BRIEF_MEMBER_DESC tag is set to YES, 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. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, 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 @@ -127,7 +135,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, 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 # The default value is: YES. @@ -197,9 +205,9 @@ MULTILINE_CPP_IS_BRIEF = NO 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. +# 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. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO @@ -261,11 +269,14 @@ OPTIMIZE_OUTPUT_VHDL = NO # 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. 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. +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. 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 For files without extension you can use no_extension as a placeholder. +# Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. @@ -282,10 +293,19 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES @@ -325,13 +345,20 @@ SIP_SUPPORT = 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 +# 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. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES 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 @@ -390,7 +417,7 @@ LOOKUP_CACHE_SIZE = 0 # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# 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 respectively EXTRACT_STATIC tags are set to YES. @@ -398,37 +425,37 @@ LOOKUP_CACHE_SIZE = 0 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = YES +EXTRACT_ALL = YES -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. 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 +# 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. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local methods, +# This flag is only useful for Objective-C code. If 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 only methods in the interface are +# included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. @@ -453,21 +480,21 @@ HIDE_UNDOC_MEMBERS = NO # 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 these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be +# (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. 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 these +# documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -481,7 +508,7 @@ HIDE_IN_BODY_DOCS = NO 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 +# 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. @@ -490,12 +517,19 @@ INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the +# their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -523,14 +557,14 @@ INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES 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. +# name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that +# name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. @@ -575,27 +609,25 @@ SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = 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. +# 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. # The default value is: YES. GENERATE_TODOLIST = YES -# 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. +# 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. # The default value is: YES. GENERATE_TESTLIST = YES -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# 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. # The default value is: YES. GENERATE_BUGLIST = YES -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( 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. # The default value is: YES. @@ -620,8 +652,8 @@ ENABLED_SECTIONS = 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. +# 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. # The default value is: YES. SHOW_USED_FILES = YES @@ -669,8 +701,7 @@ LAYOUT_FILE = # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -686,7 +717,7 @@ CITE_BIB_FILES = QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -694,7 +725,7 @@ QUIET = NO WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag 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. # The default value is: YES. @@ -711,12 +742,18 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = 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 @@ -740,7 +777,7 @@ WARN_LOGFILE = # The INPUT tag is 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. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @@ -756,12 +793,17 @@ 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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = @@ -778,7 +820,7 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -794,8 +836,8 @@ EXCLUDE_SYMLINKS = NO # 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 = build* -EXCLUDE_PATTERNS += cpplint.py +EXCLUDE_PATTERNS = build* \ + cpplint.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -848,6 +890,10 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -857,11 +903,15 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for +# INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. @@ -921,7 +971,7 @@ REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# 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. # The default value is: YES. @@ -968,6 +1018,25 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -998,7 +1067,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1060,13 +1129,15 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1082,7 +1153,7 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to +# will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 @@ -1113,8 +1184,9 @@ HTML_COLORSTYLE_GAMMA = 80 # 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. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES @@ -1210,28 +1282,29 @@ GENERATE_HTMLHELP = NO CHM_FILE = # 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 +# 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. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# 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). +# 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). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# 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. +# 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. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1344,7 +1417,7 @@ DISABLE_INDEX = NO # 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. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has @@ -1372,7 +1445,7 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1401,7 +1474,7 @@ FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. @@ -1471,11 +1544,11 @@ SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1487,7 +1560,7 @@ SERVER_BASED_SEARCH = NO # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). # @@ -1500,7 +1573,7 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). See the section "External Indexing and # Searching" for details. @@ -1538,7 +1611,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1569,7 +1642,7 @@ LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1587,9 +1660,12 @@ COMPACT_LATEX = NO PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1603,23 +1679,36 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or @@ -1637,8 +1726,8 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a # higher quality PDF documentation. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1679,11 +1768,19 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# 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. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The +# 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 too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1698,7 +1795,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES doxygen generates more compact 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. # The default value is: NO. @@ -1735,11 +1832,21 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -1763,6 +1870,13 @@ MAN_OUTPUT = man MAN_EXTENSION = .3 +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + # 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 @@ -1776,7 +1890,7 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -1790,19 +1904,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify a XML DTD, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -1815,7 +1917,7 @@ XML_PROGRAMLISTING = YES # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -1829,14 +1931,23 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = 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 http://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. +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://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. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1845,7 +1956,7 @@ 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 +# 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. @@ -1853,7 +1964,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary +# 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. # The default value is: NO. @@ -1861,9 +1972,9 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely +# 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 +# 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. # The default value is: YES. @@ -1883,14 +1994,14 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. 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 only conditional compilation will be +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. @@ -1906,7 +2017,7 @@ MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO -# If the SEARCH_INCLUDES tag is set to YES the includes files in the +# If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1948,9 +2059,9 @@ PREDEFINED = EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all refrences to 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 +# remove all references to 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. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1970,7 +2081,7 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: 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. @@ -1982,20 +2093,21 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. # The default value is: NO. 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 +# 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. # The default value is: YES. EXTERNAL_GROUPS = YES -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. @@ -2012,7 +2124,7 @@ PERL_PATH = /usr/bin/perl # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to # NO turns the diagrams off. Note that this option also works with HAVE_DOT # disabled, but it is recommended to install and use dot, since it yields more @@ -2037,7 +2149,7 @@ MSCGEN_PATH = DIA_PATH = -# If set to YES, the inheritance and collaboration graphs will hide inheritance +# 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. # The default value is: YES. @@ -2062,7 +2174,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You 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 @@ -2110,7 +2222,7 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# 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. # The default value is: NO. @@ -2162,7 +2274,8 @@ INCLUDED_BY_GRAPH = YES # # 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. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2173,7 +2286,8 @@ CALL_GRAPH = NO # # 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. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2196,11 +2310,15 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif and svg. +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2243,6 +2361,19 @@ MSCFILE_DIRS = DIAFILE_DIRS = +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + # 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 @@ -2279,7 +2410,7 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# Set the DOT_MULTI_TARGETS tag to YES to 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. @@ -2296,7 +2427,7 @@ DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot # files that are used to generate the various graphs. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/README.md b/README.md index 7eade53..25a713b 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,6 @@ Complete a generic data management framework so that in the future we can build Project website https://sites.google.com/site/gravityvisdb/edda + +Class Structures +https://rawgit.com/GRAVITYLab/edda/master/html/index.html diff --git a/edda.h.in b/edda.h.in index 2254978..9dd093d 100644 --- a/edda.h.in +++ b/edda.h.in @@ -10,8 +10,4 @@ #cmakedefine OS_MACOSX #cmakedefine OS_WIN -#include "common.h" -#include "distributions/distribution.h" -#include "distributions/gaussian_mixture.h" - #endif // EDDA_H_ diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index be74152..323e45c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -2,15 +2,26 @@ # Use of this source code is governed by a MIT-style license that can be # found in the LICENSE file. +project(edda_examples) + set(sources - #uncertainIsocontour.cu - #streamlineGaussian.cu + #loadScalarDataset.cpp + #loadCurvilinearDataset.cpp + distrModelerExample.cpp + VectorDistrModelerExample.cpp + MVDistrModelerExample_GMM.cpp + MVDistrModelerExample_Hist.cpp + scalarIOExample.cpp + vectorIOExample.cpp + jointGMMIOExample.cpp + jointHistIOExample.cpp ) + include_directories(${CMAKE_SOURCE_DIR}/src) # Force compile .cu files -add_definitions("-x c++") +#add_definitions("-x c++") foreach (file ${sources}) @@ -27,7 +38,4 @@ foreach (file ${sources}) target_link_libraries ( ${name} edda ${LINK_LIBS} ) endforeach () -if (EDDA_WITH_VTK) - add_subdirectory (vtk) -endif () diff --git a/examples/MVDistrModelerExample_GMM.cpp b/examples/MVDistrModelerExample_GMM.cpp new file mode 100644 index 0000000..04ff9df --- /dev/null +++ b/examples/MVDistrModelerExample_GMM.cpp @@ -0,0 +1,158 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution.h" +#include "distributions/variant.h" +#include "dataset/distr_array.h" + +#include "distributions/distribution_modeler.h" + +using namespace std; +using namespace edda; +using namespace edda::dist; + + + +int main(int argc, char* argv[]) +{ + if(argc < 8) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + string filename1 = argv[1]; + string filename2 = argv[2]; + string filename3 = argv[3]; + int xdim = atoi(argv[4]); + int ydim = atoi(argv[5]); + int zdim = atoi(argv[6]); + int blockXdim = atoi(argv[7]); + int blockYdim = atoi(argv[8]); + int blockZdim = atoi(argv[9]); + + float *inData1; + inData1 = new float[xdim*ydim*zdim]; + + FILE *fIn1 = fopen(filename1.c_str(),"rb"); + if(!fIn1) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus1 = fread(inData1, sizeof(float), xdim*ydim*zdim, fIn1); + fclose(fIn1); + + float *inData2; + inData2 = new float[xdim*ydim*zdim]; + + FILE *fIn2 = fopen(filename2.c_str(),"rb"); + if(!fIn2) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus2 = fread(inData2, sizeof(float), xdim*ydim*zdim, fIn2); + fclose(fIn2); + + float *inData3; + inData3 = new float[xdim*ydim*zdim]; + + FILE *fIn3 = fopen(filename3.c_str(),"rb"); + if(!fIn3) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus3 = fread(inData3, sizeof(float), xdim*ydim*zdim, fIn3); + fclose(fIn3); + + int newW(0),newH(0),newD(0); + + if(xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + + + //edda ensemble data modeling + DistributionModeler mv_dm(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter =0; + + for(size_t z=0; z trainSamples; + trainSamples.push_back(data1); + trainSamples.push_back(data2); + trainSamples.push_back(data3); + + std::cout << "dimensions: [" << z << "][" << y << "][" << x << "]\n"; + + mv_dm.computeJointGMM(trainSamples, blockXdim*blockYdim*blockZdim, 2, counter); + + counter++; + } + } + } + std::vector dVec; + dVec.push_back(mv_dm.getMVDistrArray(3)); + + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec); + + + //Testing: to see if the edda dataset was properly created with the joint distribution. + /*shared_ptr> shr_ds(ds); + std::cout<< "number of arrays :\n " << shr_ds->getNumDistrArray() << std::endl; + + DistrArray *testArray = shr_ds->getArray(0); + std::cout << "testArray = " << testArray->getDistr(10) << std::endl; + std::cout << "=================================\n";*/ + + return 0; +} diff --git a/examples/MVDistrModelerExample_Hist.cpp b/examples/MVDistrModelerExample_Hist.cpp new file mode 100644 index 0000000..59eaa67 --- /dev/null +++ b/examples/MVDistrModelerExample_Hist.cpp @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution_modeler.h" + +using namespace std; +using namespace edda; + + + +int main(int argc, char* argv[]) +{ + if(argc < 8) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + string filename1 = argv[1]; + string filename2 = argv[2]; + string filename3 = argv[3]; + int xdim = atoi(argv[4]); + int ydim = atoi(argv[5]); + int zdim = atoi(argv[6]); + int blockXdim = atoi(argv[7]); + int blockYdim = atoi(argv[8]); + int blockZdim = atoi(argv[9]); + + float *inData1; + inData1 = new float[xdim*ydim*zdim]; + + FILE *fIn1 = fopen(filename1.c_str(),"rb"); + if(!fIn1) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus1 = fread(inData1, sizeof(float), xdim*ydim*zdim, fIn1); + fclose(fIn1); + + float *inData2; + inData2 = new float[xdim*ydim*zdim]; + + FILE *fIn2 = fopen(filename2.c_str(),"rb"); + if(!fIn2) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus2 = fread(inData2, sizeof(float), xdim*ydim*zdim, fIn2); + fclose(fIn2); + + float *inData3; + inData3 = new float[xdim*ydim*zdim]; + + FILE *fIn3 = fopen(filename3.c_str(),"rb"); + if(!fIn3) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus3 = fread(inData3, sizeof(float), xdim*ydim*zdim, fIn3); + fclose(fIn3); + + int newW(0),newH(0),newD(0); + + if(xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + + + //edda ensemble data modeling + DistributionModeler mv_dm(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter =0; + + for(size_t z=0; z min_val(3, FLT_MAX); + std::vector max_val(3, -FLT_MAX); + std::vector bins(3, 30); + + + int i = 0; + for(size_t zz=z; zzmax_val[0]) max_val[0] = data1[i]; + if(data2[i]max_val[1]) max_val[1] = data2[i]; + if(data3[i]max_val[2]) max_val[2] = data3[i]; + i++; + } + } + } + + std::vector trainSamples; + trainSamples.push_back(data1); + trainSamples.push_back(data2); + trainSamples.push_back(data3); + + std::cout << "dimensions: [" << z << "][" << y << "][" << x << "]\n"; + + mv_dm.computeJointHistogram(trainSamples, blockXdim*blockYdim*blockZdim, min_val, max_val, bins, counter); + + counter++; + } + } + } + std::vector dVec; + dVec.push_back(mv_dm.getMVDistrArray(3)); + + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec); + + //Testing: to see if the edda dataset was properly created with the joint distribution. + /*shared_ptr> shr_ds(ds); + std::cout<< "number of arrays :\n " << shr_ds->getNumDistrArray() << std::endl; + + DistrArray *testArray = shr_ds->getArray(0); + std::cout << "testArray = " << testArray->getDistr(10) << std::endl; + std::cout << "=================================\n";*/ + + return 0; +} diff --git a/examples/VectorDistrModelerExample.cpp b/examples/VectorDistrModelerExample.cpp new file mode 100644 index 0000000..a569b4b --- /dev/null +++ b/examples/VectorDistrModelerExample.cpp @@ -0,0 +1,141 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution_modeler.h" + +using namespace std; +using namespace edda; + + + +int main(int argc, char* argv[]) +{ + if(argc < 8) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + string filename1 = argv[1]; + string filename2 = argv[2]; + string filename3 = argv[3]; + int xdim = atoi(argv[4]); + int ydim = atoi(argv[5]); + int zdim = atoi(argv[6]); + int blockXdim = atoi(argv[7]); + int blockYdim = atoi(argv[8]); + int blockZdim = atoi(argv[9]); + + float *inData1; + inData1 = new float[xdim*ydim*zdim]; + + FILE *fIn1 = fopen(filename1.c_str(),"rb"); + if(!fIn1) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus1 = fread(inData1, sizeof(float), xdim*ydim*zdim, fIn1); + fclose(fIn1); + + float *inData2; + inData2 = new float[xdim*ydim*zdim]; + + FILE *fIn2 = fopen(filename2.c_str(),"rb"); + if(!fIn2) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus2 = fread(inData2, sizeof(float), xdim*ydim*zdim, fIn2); + fclose(fIn2); + + float *inData3; + inData3 = new float[xdim*ydim*zdim]; + + FILE *fIn3 = fopen(filename3.c_str(),"rb"); + if(!fIn3) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus3 = fread(inData3, sizeof(float), xdim*ydim*zdim, fIn3); + fclose(fIn3); + + int newW(0),newH(0),newD(0); + + if(xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + + + //edda ensemble data modeling + DistributionModeler dm1(newW*newH*newD); + DistributionModeler dm2(newW*newH*newD); + DistributionModeler dm3(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter =0; + + for(size_t z=0; z dVec; + dVec.push_back(dm1.getDistrArray()); + dVec.push_back(dm2.getDistrArray()); + dVec.push_back(dm3.getDistrArray()); + + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec); + + return 0; +} diff --git a/examples/distrModelerExample.cpp b/examples/distrModelerExample.cpp new file mode 100644 index 0000000..712959c --- /dev/null +++ b/examples/distrModelerExample.cpp @@ -0,0 +1,166 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution_modeler.h" + +using namespace std; +using namespace edda; + + + +int main(int argc, char* argv[]) +{ + string filename; + int xdim; + int ydim; + int zdim; + int blockXdim; + int blockYdim; + int blockZdim; + + if(argc < 8) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + else + { + filename = argv[1]; + xdim = atoi(argv[2]); + ydim = atoi(argv[3]); + zdim = atoi(argv[4]); + blockXdim = atoi(argv[5]); + blockYdim = atoi(argv[6]); + blockZdim = atoi(argv[7]); + } + + float *inData; + inData = new float[xdim*ydim*zdim]; + + FILE *fIn = fopen(filename.c_str(),"rb"); + if(!fIn) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus = fread(inData, sizeof(float), xdim*ydim*zdim, fIn); + fclose(fIn); + + int newW(0),newH(0),newD(0); + + if(xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if(zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + std::cout << "successfully read the file\n"; + //edda data modeling + DistributionModeler dm(newW*newH*newD); + + int counter =0; + for(size_t z=0; z dVec; + dVec.push_back(dm.getDistrArray()); + + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec); + + /*//edda ensemble data modeling + DistributionModelerNew dm1(newW*newH*newD); + DistributionModelerNew dm2(newW*newH*newD); + DistributionModelerNew dm3(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter =0; + + for(size_t z=0; z dVec; + dVec.push_back(dm1.getDistrArray()); + dVec.push_back(dm2.getDistrArray()); + dVec.push_back(dm3.getDistrArray()); + + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec);*/ + + + return 0; +} diff --git a/test/gmm_raw2vtk.cpp b/examples/gmm_raw2vtk.cpp similarity index 85% rename from test/gmm_raw2vtk.cpp rename to examples/gmm_raw2vtk.cpp index 8e69e90..04bd382 100644 --- a/test/gmm_raw2vtk.cpp +++ b/examples/gmm_raw2vtk.cpp @@ -1,13 +1,22 @@ #include #include #include + +#include +#include "vtkFloatArray.h" +#include "vtkPointData.h" #include #include #include -#include "vtk/vtk_common.h" -#include +#include +#include #include +//this file use old VTK IO type, which is not supported anymore. This file may be deleted in the future + + +#define vsp_new(T,x) vtkSmartPointer x = vtkSmartPointer::New() + using namespace std; using namespace edda; diff --git a/examples/jointGMMIOExample.cpp b/examples/jointGMMIOExample.cpp new file mode 100644 index 0000000..5e95f27 --- /dev/null +++ b/examples/jointGMMIOExample.cpp @@ -0,0 +1,267 @@ +#include +#include + +#include "dataset/distr_array.h" +#include "distributions/distribution_modeler.h" +#include "distributions/joint_GMM.h" +#include "distributions/joint_gaussian.h" +#include "io/edda_reader.h" +#include "io/edda_writer.h" + +using namespace edda; +using namespace std; +using namespace edda::dist; + +int main(int argc, char* argv[]) +{ + + if (argc < 10) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + string filename1 = argv[1]; + string filename2 = argv[2]; + string filename3 = argv[3]; + int xdim = atoi(argv[4]); + int ydim = atoi(argv[5]); + int zdim = atoi(argv[6]); + int blockXdim = atoi(argv[7]); + int blockYdim = atoi(argv[8]); + int blockZdim = atoi(argv[9]); + + + //////for quicker testing + //cout << "USAGE: default settings\n"; + //string filename1 = "E:/Data/edda/PRECIPf25.binLE.raw_corrected_2_subsampled"; + //string filename2 = "E:/Data/edda/QGRAUPf25.binLE.raw_corrected_2_subsampled"; + //string filename3 = "E:/Data/edda/QRAINf25.binLE.raw_corrected_2_subsampled"; + //int xdim =30; + //int ydim = 30; + //int zdim = 30; + //int blockXdim = 10; + //int blockYdim = 10; + //int blockZdim = 10; + + + int nVar = 3; + int nComp = 2; + + + //from here to the creation of "Dataset *ds" is the same with the example in MVDistrModelerExample_GMM.cpp + float *inData1; + inData1 = new float[xdim*ydim*zdim]; + + FILE *fIn1 = fopen(filename1.c_str(), "rb"); + if (!fIn1) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus1 = fread(inData1, sizeof(float), xdim*ydim*zdim, fIn1); + fclose(fIn1); + + float *inData2; + inData2 = new float[xdim*ydim*zdim]; + + FILE *fIn2 = fopen(filename2.c_str(), "rb"); + if (!fIn2) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus2 = fread(inData2, sizeof(float), xdim*ydim*zdim, fIn2); + fclose(fIn2); + + float *inData3; + inData3 = new float[xdim*ydim*zdim]; + + FILE *fIn3 = fopen(filename3.c_str(), "rb"); + if (!fIn3) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus3 = fread(inData3, sizeof(float), xdim*ydim*zdim, fIn3); + fclose(fIn3); + + int newW(0), newH(0), newD(0); + + if (xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if (ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if (zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + + + //edda ensemble data modeling + DistributionModeler mv_dm(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter = 0; + + for (size_t z = 0; z trainSamples; + trainSamples.push_back(data1); + trainSamples.push_back(data2); + trainSamples.push_back(data3); + + std::cout << "dimensions: [" << z << "][" << y << "][" << x << "]\n"; + + mv_dm.computeJointGMM(trainSamples, blockXdim*blockYdim*blockZdim, nComp, counter); + + counter++; + } + } + } + std::vector dVec; + dVec.push_back(mv_dm.getDistrArray()); + + Dataset *ds = new Dataset(new RegularCartesianGrid(newW, newH, newD), dVec); + shared_ptr> shr_ds(ds); + + + //write the dataset using the writer + EddaWriter eddaWriter; + eddaWriter.writeEddaDataset(shr_ds, "testDataJointGMM.edda"); + + //read the dataset using the reader + EddaReader eddaReader; + shared_ptr> shr_ds2 = eddaReader.loadEddaDataset("testDataJointGMM.edda"); + + //basic compare + int numDistrArray1 = shr_ds->getNumDistrArray(); + int numDistrArray2 = shr_ds2->getNumDistrArray(); + if (numDistrArray1 != numDistrArray2){ + cout << "Joint GMM IO failed! number of arrays changed! " << endl; + return 0; + } + + DistrArray *array1 = shr_ds->getArray(0); //we know there is only 1 array + DistrArray *array2 = shr_ds2->getArray(0); //we know there is only 1 array + int n1 = array1->getLength(); + int n2 = array2->getLength(); + if (n1 != n2){ + cout << "Joint GMM IO failed! length of arrays changed! " << endl; + return 0; + } + + //print and compare one arbitrary candidate + cout << endl << "Compare one single GMM from original dataset, and the dataset after IO: " << endl << endl; + dist::Variant curDist1 = array1->getDistr(n1 / 2); + dist::JointGMM curJGMM1 = boost::get(curDist1); + cout << "joint GMM No. " << n1 / 2 << " of the original dataset:" << endl; + cout << curJGMM1 << endl << endl; + + dist::Variant curDist2 = array2->getDistr(n1 / 2); + dist::JointGMM curJGMM2 = boost::get(curDist2); + cout << "joint GMM No. " << n1 / 2 << " of the dataset after IO:" << endl; + cout << curJGMM2 << endl; + + ////compare sample. currently not supported + //vector sample1 = curJGMM1.getJointSample(); + //vector sample2 = curJGMM2.getJointSample(); + //cout << "A sample from joint GMM No. " << n1 / 2 << " of the original dataset:" << endl; + //for (int i = 0; i < sample1.size(); i++) { + // cout << sample1[i] << " "; + //} + //cout << endl; + //cout << "A sample from joint GMM No. " << n1 / 2 << " of the dataset after IO:" << endl; + //for (int i = 0; i < sample2.size(); i++) { + // cout << sample2[i] << " "; + //} + //cout << endl; + + + //compare every parameter one by one + double dif = 0.0; + + for (int j = 0; j < n1; j++){ + dist::Variant curDist1 = array1->getDistr(j); + dist::Variant curDist2 = array2->getDistr(j); + + string s = getName(curDist2); + if (s.compare(0, 15, "JointGMM") != 0) { + cout << "Joint GMM IO failed! arrays element not joint GMM! " << endl; + return 0; + } + + dist::JointGMM curJGMM1 = boost::get(curDist1); + dist::JointGMM curJGMM2 = boost::get(curDist2); + + int nVar1 = curJGMM1.getNumVariables(); + int nComp1 = curJGMM1.getNumComponents(); + int nVar2 = curJGMM2.getNumVariables(); + int nComp2 = curJGMM2.getNumComponents(); + if (nVar1 != nVar2 || nComp1 != nComp2){ + cout << "Joint GMM IO failed! nVar or nComp of at least one joint GMM changed! " << endl; + return 0; + } + + for (int c = 0; c < nComp1; c++) + { + dif += abs(curJGMM1.getWeight(c) - curJGMM2.getWeight(c)); + + dist::JointGaussian jg1 = curJGMM1.getJointGaussian(c); + const ublas_vector curMean1 = jg1.getMean(); + const ublas_matrix curCov1 = jg1.getCovariance(); + dist::JointGaussian jg2 = curJGMM2.getJointGaussian(c); + const ublas_vector curMean2 = jg2.getMean(); + const ublas_matrix curCov2 = jg2.getCovariance(); + for (int i = 0; i < nVar; i++){ + dif += abs(curMean1(i) - curMean2(i)); + } + for (int j = 0; j < nVar; j++){ + for (int i = j; i < nVar; i++){ + dif += abs(curCov1(j, i) - curCov2(j, i)); + } + } + } + } + + cout << "the total difference between parameters of the modeler result and the IO result is: " << dif << endl; + + return 1; +} \ No newline at end of file diff --git a/examples/jointHistIOExample.cpp b/examples/jointHistIOExample.cpp new file mode 100644 index 0000000..28f8147 --- /dev/null +++ b/examples/jointHistIOExample.cpp @@ -0,0 +1,293 @@ +#include +#include + +#include "dataset/distr_array.h" +#include "distributions/distribution_modeler.h" +#include "distributions/joint_GMM.h" +#include "distributions/joint_gaussian.h" +#include "io/edda_reader.h" +#include "io/edda_writer.h" + + +#include "distributions/joint_histogram.h" + + +using namespace edda; +using namespace std; +using namespace edda::dist; + +int main(int argc, char* argv[]) +{ + + if (argc < 10) + { + cout << "USAGE: check the parameter list!!\n"; + exit(11); + } + string filename1 = argv[1]; + string filename2 = argv[2]; + string filename3 = argv[3]; + int xdim = atoi(argv[4]); + int ydim = atoi(argv[5]); + int zdim = atoi(argv[6]); + int blockXdim = atoi(argv[7]); + int blockYdim = atoi(argv[8]); + int blockZdim = atoi(argv[9]); + + + //////for quicker testing + //cout << "USAGE: default settings\n"; + //string filename1 = "E:/Data/edda/PRECIPf25.binLE.raw_corrected_2_subsampled"; + //string filename2 = "E:/Data/edda/QGRAUPf25.binLE.raw_corrected_2_subsampled"; + //string filename3 = "E:/Data/edda/QRAINf25.binLE.raw_corrected_2_subsampled"; + //int xdim =30; + //int ydim = 30; + //int zdim = 30; + //int blockXdim = 10; + //int blockYdim = 10; + //int blockZdim = 10; + + + int nVar = 3; + int nComp = 2; + + + //from here to the creation of "Dataset *ds" is the same with the example in MVDistrModelerExample_Hist.cpp + float *inData1; + inData1 = new float[xdim*ydim*zdim]; + + FILE *fIn1 = fopen(filename1.c_str(), "rb"); + if (!fIn1) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus1 = fread(inData1, sizeof(float), xdim*ydim*zdim, fIn1); + fclose(fIn1); + + float *inData2; + inData2 = new float[xdim*ydim*zdim]; + + FILE *fIn2 = fopen(filename2.c_str(), "rb"); + if (!fIn2) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus2 = fread(inData2, sizeof(float), xdim*ydim*zdim, fIn2); + fclose(fIn2); + + float *inData3; + inData3 = new float[xdim*ydim*zdim]; + + FILE *fIn3 = fopen(filename3.c_str(), "rb"); + if (!fIn3) + { + fprintf(stderr, "Error opening file\n"); + exit(13); + } + size_t readStatus3 = fread(inData3, sizeof(float), xdim*ydim*zdim, fIn3); + fclose(fIn3); + + int newW(0), newH(0), newD(0); + + if (xdim % blockXdim == 0) + newW = xdim / blockXdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if (ydim % blockYdim == 0) + newH = ydim / blockYdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + if (zdim % blockZdim == 0) + newD = zdim / blockZdim; + else + { + fprintf(stderr, "Wrong dimension combination\n"); + exit(14); + } + + DistributionModeler mv_dm(newW*newH*newD); + + cout << "starting partitioning\n"; + int counter = 0; + + for (size_t z = 0; z min_val(3, FLT_MAX); + std::vector max_val(3, -FLT_MAX); + std::vector bins(3, 30); + + + int i = 0; + for (size_t zz = z; zzmax_val[0]) max_val[0] = data1[i]; + if (data2[i]max_val[1]) max_val[1] = data2[i]; + if (data3[i]max_val[2]) max_val[2] = data3[i]; + i++; + } + } + } + + std::vector trainSamples; + trainSamples.push_back(data1); + trainSamples.push_back(data2); + trainSamples.push_back(data3); + + std::cout << "dimensions: [" << z << "][" << y << "][" << x << "]\n"; + + mv_dm.computeJointHistogram(trainSamples, blockXdim*blockYdim*blockZdim, min_val, max_val, bins, counter); + + counter++; + } + } + } + std::vector dVec; + dVec.push_back(mv_dm.getDistrArray()); + + Dataset *ds = new Dataset(new RegularCartesianGrid(newW, newH, newD), dVec); + shared_ptr> shr_ds(ds); + + //write the dataset using the writer + EddaWriter eddaWriter; + eddaWriter.writeEddaDataset(shr_ds, "testDataJointHist.edda"); + + //read the dataset using the reader + EddaReader eddaReader; + shared_ptr> shr_ds2 = eddaReader.loadEddaDataset("testDataJointHist.edda"); + + + //basic compare + int numDistrArray1 = shr_ds->getNumDistrArray(); + int numDistrArray2 = shr_ds2->getNumDistrArray(); + if (numDistrArray1 != numDistrArray2){ + cout << "Joint Histogram IO failed! number of arrays changed! " << endl; + return 0; + } + + DistrArray *array1 = shr_ds->getArray(0); //we know there is only 1 array + DistrArray *array2 = shr_ds2->getArray(0); //we know there is only 1 array + int n1 = array1->getLength(); + int n2 = array2->getLength(); + if (n1 != n2){ + cout << "Joint Histogram IO failed! length of arrays changed! " << endl; + return 0; + } + + //print and compare one arbitrary candidate + cout << endl << "Compare one single Histogram from original dataset, and the dataset after IO: " << endl << endl; + + dist::Variant curDist1 = array1->getDistr(n1 / 2); + dist::JointHistogram curJHist1 = boost::get(curDist1); + cout << "joint Histogram No. " << n1 / 2 << " from the original dataset:" << endl; + cout << curJHist1 << endl << endl; + + dist::Variant curDist2 = array2->getDistr(n1 / 2); + dist::JointHistogram curJHist2 = boost::get(curDist2); + cout << "joint Histogram No. " << n1 / 2 << " from the dataset after IO:" << endl; + cout << curJHist2 << endl; + + //compare every parameter one by one + double dif = 0.0; + + for (int j = 0; j < n1; j++){ + dist::Variant curDist1 = array1->getDistr(j); + dist::Variant curDist2 = array2->getDistr(j); + + string s = getName(curDist2); + if (s.compare(0, 15, "JointHistogram") != 0) { + cout << "Joint Histogram IO failed! arrays element not joint Histogram! " << endl; + return 0; + } + + dist::JointHistogram curJHist1 = boost::get(curDist1); + dist::JointHistogram curJHist2 = boost::get(curDist2); + + int num_vars1 = curJHist1.getNumVars(); + int num_vars2 = curJHist2.getNumVars(); + if (num_vars1 != num_vars2){ + cout << "Joint Histogram IO failed! num_vars of at least one joint Histogram changed! " << endl; + return 0; + } + + std::vector min_vals1 = curJHist1.getMinVals(); + std::vector min_vals2 = curJHist2.getMinVals(); + std::vector max_vals1 = curJHist1.getMaxVals(); + std::vector max_vals2 = curJHist2.getMaxVals(); + std::vector bin_widths1 = curJHist1.getBinWidths(); + std::vector bin_widths2 = curJHist2.getBinWidths(); + std::vector num_bins1 = curJHist1.getNumBins(); + std::vector num_bins2 = curJHist2.getNumBins(); + + for (int v = 0; v < num_vars1; v++) { + dif += abs(min_vals1[v] - min_vals2[v]); + dif += abs(max_vals1[v] - max_vals2[v]); + dif += abs(bin_widths1[v] - bin_widths2[v]); + dif += abs(num_bins1[v] - num_bins2[v]); + } + + //compare pdf + boost::unordered_map, Real> pdf1 = curJHist1.getDistr(); + boost::unordered_map, Real> pdf2 = curJHist2.getDistr(); + int n_pdf1 = pdf1.size(); + int n_pdf2 = pdf2.size(); + if (n_pdf1 != n_pdf2) { + cout << "Joint Histogram IO failed! pdf size of at least one joint Histogram changed! " << endl; + return 0; + } + for (auto it1 = pdf1.begin(); it1 != pdf1.end(); ++it1) { + std::vector vint1 = it1->first; + if (pdf2.find(vint1) == pdf2.end()) { + cout << "Joint Histogram IO failed! at least one key of at least one pdf of at least one joint Histogram changed! " << endl; + return 0; + } + Real r1 = it1->second; + Real r2 = pdf2[vint1]; + int n_vint1 = vint1.size(); + dif += abs(r1 - r2); + } + + //compare mean and cov + std::vector curMean1 = getJointMean(curJHist1); + ublas_matrix curCov1 = curJHist1.getCovariance(); + std::vector curMean2 = getJointMean(curJHist2); + ublas_matrix curCov2 = curJHist2.getCovariance(); + for (int i = 0; i < num_vars1; i++) { + dif += abs(curMean1[i] - curMean2[i]); + } + for (int j = 0; j < num_vars1; j++) { + for (int i = j; i < num_vars1; i++) { + dif += abs(curCov1(j, i) - curCov2(j, i)); + } + } + } + + cout << "the total difference between parameters of the modeler result and the IO result is: " << dif << endl; + + return 1; +} \ No newline at end of file diff --git a/examples/scalarIOExample.cpp b/examples/scalarIOExample.cpp new file mode 100644 index 0000000..e7e6748 --- /dev/null +++ b/examples/scalarIOExample.cpp @@ -0,0 +1,187 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution_modeler.h" +#include "dataset/grid.h" + +#define IOTEST + +#ifdef IOTEST +#include "io/edda_writer.h" +#include "io/edda_reader.h" +#endif + +using namespace std; +using namespace edda; + + + +int main(int argc, char* argv[]) +{ + string filename; + int xdim; + int ydim; + int zdim; + int blockXdim; + int blockYdim; + int blockZdim; + + cout << "USAGE: default settings\n"; + filename = string(SAMPLE_DATA_PATH) + "/subIsabel.raw"; + xdim = 100; + ydim = 100; + zdim = 100; + blockXdim = 10; + blockYdim = 10; + blockZdim = 10; + + + float *inData; + inData = new float[xdim*ydim*zdim]; + + FILE *fIn = fopen(filename.c_str(),"rb"); + if(!fIn) + { + fprintf(stderr, "Error opening file %s\n", filename.c_str()); + exit(13); + } + size_t readStatus = fread(inData, sizeof(float), xdim*ydim*zdim, fIn); + fclose(fIn); + + int newW(0),newH(0),newD(0); + newW = xdim / blockXdim; + newH = ydim / blockYdim; + newD = zdim / blockZdim; + + //first creata an edda data using DistributionModeler + DistributionModeler dm(newW*newH*newD); + float *data; + data = new float[blockXdim*blockYdim*blockZdim]; + int counter =0; + for(size_t z=0; z dVec; + dVec.push_back(dm.getDistrArray()); + Dataset *ds = new Dataset (new RegularCartesianGrid(newW, newH, newD), dVec); + shared_ptr> shr_ds(ds); + + //write the dataset using the writer + EddaWriter eddaWriter; + eddaWriter.writeEddaDataset(shr_ds, "testData.edda"); + + //read the dataset using the reader + EddaReader eddaReader; + shared_ptr> shr_ds2 = eddaReader.loadEddaDataset("testData.edda"); + + //single test of the result of IO functions + dist::Variant distr; + + cout << endl; + distr = shr_ds->at_comp_distr_new(6, 5, 5)[0]; + cout << "modeler result at_comp(6,5,5) : " << distr << endl; + distr = shr_ds2->at_comp_distr_new(6, 5, 5)[0]; + cout << "IO reuslt at_comp(6,5,5) : " << distr << endl; + + cout << endl; + distr = shr_ds->at_comp_distr_new(7, 5, 5)[0]; + cout << "modeler result at_comp(7,5,5) : " << distr << endl; + distr = shr_ds2->at_comp_distr_new(7, 5, 5)[0]; + cout << "IO reuslt at_comp(7,5,5) : " << distr << endl; + + cout << endl; + distr = shr_ds->at_comp_distr_new(8, 5, 5)[0]; + cout << "modeler result at_comp(8,5,5) : " << distr << endl; + distr = shr_ds2->at_comp_distr_new(8, 5, 5)[0]; + cout << "IO reuslt at_comp(8,5,5) : " << distr << endl; + + cout << endl; + distr = shr_ds->at_comp_distr_new(9, 5, 5)[0]; + cout << "modeler result at_comp(9,5,5) : " << distr << endl; + distr = shr_ds2->at_comp_distr_new(9, 5, 5)[0]; + cout << "IO reuslt at_comp(9,5,5) : " << distr << endl; + + cout << endl; + + //one-by-one test of the result of IO functions + int* dims = shr_ds2->getDimension(); + double dif = 0; + for (int k = 0; k < dims[2]; k++){ + for (int j = 0; j < dims[1]; j++){ + for (int i = 0; i < dims[0]; i++){ + dist::Variant distr = shr_ds->at_comp_distr_new(i, j, k)[0]; + dist::Variant distr2 = shr_ds2->at_comp_distr_new(i, j, k)[0]; + + if (getName(distr).compare(0, 15, "GaussianMixture") == 0 && getName(distr2).compare(0, 15, "GaussianMixture") == 0){ + dist::GMM curDist1 = boost::get(distr); + dist::GMM curDist2 = boost::get(distr2); + for (int model = 0; model < curDist2.getNumComponents(); model++){ + dif = dif + abs(curDist1.models[model].m - curDist2.models[model].m) + + abs(curDist1.models[model].v - curDist2.models[model].v) + + abs(curDist1.models[model].w - curDist2.models[model].w); + } + } + else if(getName(distr).compare(0, 15, "Histogram") == 0 && getName(distr2).compare(0, 15, "Histogram") == 0){ + dist::Histogram curDist1 = boost::get(distr); + dist::Histogram curDist2 = boost::get(distr2); + int nbins1 = curDist1.getBins(); + int nbins2 = curDist2.getBins(); + float minv1 = curDist1.getMinValue(); + float maxv1 = curDist1.getMaxValue(); + float minv2 = curDist2.getMinValue(); + float maxv2 = curDist2.getMaxValue(); + dif = dif + abs(nbins1 - nbins2) + abs(minv1 - minv2) + abs(maxv1 - maxv2); + for (int b = 0; b < min(nbins1, nbins2); b++){ + dif = dif + abs(curDist1.getBinValue(b) - curDist2.getBinValue(b)); + } + } + else{ + dif = dif + 1000; + } + } + } + } + cout << "the total difference between the modeler result and the IO result is: " << dif << endl; + + + return 0; +} diff --git a/examples/vectorIOExample.cpp b/examples/vectorIOExample.cpp new file mode 100644 index 0000000..b890275 --- /dev/null +++ b/examples/vectorIOExample.cpp @@ -0,0 +1,204 @@ +#include +#include +#include +#include +#include + +#include "distributions/distribution_modeler.h" +#include "dataset/grid.h" + +#define IOTEST + +#ifdef IOTEST +#include "io/edda_writer.h" +#include "io/edda_reader.h" +#endif + +using namespace std; +using namespace edda; + + + +int main(int argc, char* argv[]) +{ + string filename; + int xdim; + int ydim; + int zdim; + int blockXdim; + int blockYdim; + int blockZdim; + + cout << "USAGE: default settings\n"; + filename = string(SAMPLE_DATA_PATH) + "/subIsabel.raw"; + xdim = 100; + ydim = 100; + zdim = 100; + blockXdim = 10; + blockYdim = 10; + blockZdim = 10; + + + float *inData; + inData = new float[xdim*ydim*zdim]; + + FILE *fIn = fopen(filename.c_str(),"rb"); + if(!fIn) + { + fprintf(stderr, "Error opening file %s\n", filename.c_str()); + exit(13); + } + size_t readStatus = fread(inData, sizeof(float), xdim*ydim*zdim, fIn); + fclose(fIn); + + int newW(0),newH(0),newD(0); + newW = xdim / blockXdim; + newH = ydim / blockYdim; + newD = zdim / blockZdim; + + //first creata an edda data using DistributionModeler + DistributionModeler dm1(newW*newH*newD); + DistributionModeler dm2(newW*newH*newD); + DistributionModeler dm3(newW*newH*newD); + float *data1 = new float[blockXdim*blockYdim*blockZdim]; + float *data2 = new float[blockXdim*blockYdim*blockZdim]; + float *data3 = new float[blockXdim*blockYdim*blockZdim]; + int counter =0; + for(size_t z=0; z dVec; + dVec.push_back(dm1.getDistrArray()); + dVec.push_back(dm2.getDistrArray()); + dVec.push_back(dm3.getDistrArray()); + Dataset *ds = new Dataset(new RegularCartesianGrid(newW, newH, newD), dVec); + shared_ptr> shr_ds(ds); + + //write the dataset using the writer + EddaWriter eddaWriter; + eddaWriter.writeEddaDataset(shr_ds, "testData.edda"); + + //read the dataset using the reader + EddaReader eddaReader; + shared_ptr> shr_ds2 = eddaReader.loadEddaDataset("testData.edda"); + + + //single test of the result of IO functions + std::vector distrs; + + cout << endl; + distrs = shr_ds->at_comp_distr_new(6, 5, 5); + cout << "modeler result at_comp(6,5,5) : " << endl; + for (int i = 0; i < distrs.size(); i++){ + cout << distrs[i] << endl; + } + cout << endl; + distrs = shr_ds2->at_comp_distr_new(6, 5, 5); + cout << "IO reuslt at_comp(6,5,5) : " << endl; + for (int i = 0; i < distrs.size(); i++){ + cout << distrs[i] << endl; + } + cout << endl; + + distrs = shr_ds->at_comp_distr_new(7, 5, 5); + cout << "modeler result at_comp(7,5,5) : " << endl; + for (int i = 0; i < distrs.size(); i++){ + cout << distrs[i] << endl; + } + cout << endl; + distrs = shr_ds2->at_comp_distr_new(7, 5, 5); + cout << "IO reuslt at_comp(7,5,5) : " << endl; + for (int i = 0; i < distrs.size(); i++){ + cout << distrs[i] << endl; + } + cout << endl; + + + //one-by-one test of the result of IO functions + int* dims = shr_ds2->getDimension(); + double dif = 0; + for (int k = 0; k < dims[2]; k++){ + for (int j = 0; j < dims[1]; j++){ + for (int i = 0; i < dims[0]; i++){ + std::vector distrs = shr_ds->at_comp_distr_new(i, j, k); + std::vector distrs2 = shr_ds2->at_comp_distr_new(i, j, k); + if (distrs.size() == distrs2.size()){ + for (int i = 0; i < distrs.size(); i++){ + if (getName(distrs[i]).compare(0, 15, "GaussianMixture") == 0 && getName(distrs2[i]).compare(0, 15, "GaussianMixture") == 0){ + dist::GMM curDist1 = boost::get(distrs[i]); + dist::GMM curDist2 = boost::get(distrs2[i]); + for (int model = 0; model < curDist2.getNumComponents(); model++){ + dif = dif + abs(curDist1.models[model].m - curDist2.models[model].m) + + abs(curDist1.models[model].v - curDist2.models[model].v) + + abs(curDist1.models[model].w - curDist2.models[model].w); + } + } + else if (getName(distrs[i]).compare(0, 15, "Histogram") == 0 && getName(distrs2[i]).compare(0, 15, "Histogram") == 0){ + dist::Histogram curDist1 = boost::get(distrs[i]); + dist::Histogram curDist2 = boost::get(distrs2[i]); + int nbins1 = curDist1.getBins(); + int nbins2 = curDist2.getBins(); + float minv1 = curDist1.getMinValue(); + float maxv1 = curDist1.getMaxValue(); + float minv2 = curDist2.getMinValue(); + float maxv2 = curDist2.getMaxValue(); + dif = dif + abs(nbins1 - nbins2) + abs(minv1 - minv2) + abs(maxv1 - maxv2); + for (int b = 0; b < min(nbins1, nbins2); b++){ + dif = dif + abs(curDist1.getBinValue(b) - curDist2.getBinValue(b)); + } + } + else{ + dif = dif + 1000; + } + } + } + else{ + dif = dif + 1000; + } + } + } + } + cout << "the total difference between the modeler result and the IO result is: " << dif << endl; + + + return 0; +} diff --git a/examples/vtk/denseSamplingField.cpp b/examples/vtk/denseSamplingField.cpp deleted file mode 100644 index b4d1dc2..0000000 --- a/examples/vtk/denseSamplingField.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2015 The Edda Authors. All rights reserved. -// Use of this source code is governed by a MIT-style license that can be -// found in the LICENSE file. - -/// Read a distribution data set and generate a new field of random samples. - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "distributions/gaussian.h" -#include "distributions/distribution.h" -#include "io/file_reader.h" -#include "io/file_writer.h" -#include "io/path.h" -#include "vtk/vtk_common.h" -#include "vtk/gmm_vtk_data_array.h" -#include "dataset/dataset.h" -#include "dataset/data_array.h" - -using namespace std; -using namespace edda; - -void process_vtk_file(string &vtk_file, int res) -{ - vsp_new(vtkStructuredGrid, sgrid1); - vsp_new(vtkImageData, image1); - vtkDataSet *dataset; - if (getFileExtension(vtk_file).compare("vts")==0) { - vsp_new(vtkXMLStructuredGridReader, reader); - reader->SetFileName(vtk_file.c_str()); - reader->Update(); - sgrid1->DeepCopy(reader->GetOutput()); - dataset = sgrid1.Get(); - - int *dim = sgrid1->GetDimensions(); - int newdim[3] = {(dim[0]-1)*res+1, (dim[1]-1)*res+1, (dim[2]-1)*res+1}; - printf("dim: %d %d %d\n", dim[0], dim[1], dim[2]); - - //vtkFloatArray *floatArray = vtkFloatArray::New(); - //floatArray->DeepCopy(sgrid1->GetPoints()); - shared_ary array(sgrid1->GetPoints()->GetNumberOfPoints()); - VECTOR3 *pf = (VECTOR3 *)sgrid1->GetPoints()->GetVoidPointer(0); - std::copy(pf , pf+array.getLength(), array.get()); - Dataset pointsDataset(new RegularCartesianGrid(dim[0], dim[1], dim[2]), - new VectorArray(array) ); - - Dataset valuesDataset(new RegularCartesianGrid(dim[0], dim[1], dim[2]), - new DataSamplingArray(new GmmVtkDataArray(sgrid1->GetPointData() )) - ); - - int newsize = newdim[0]*newdim[1]*newdim[2]; - vsp_new(vtkPoints, points); - points->SetNumberOfPoints(newsize); - vsp_new(vtkFloatArray, sampledArray); - sampledArray->SetNumberOfComponents(1); - sampledArray->SetNumberOfTuples(newsize); - sampledArray->SetName("RandomSample"); - int i,j,k; - int count = 0; - for (k=0; kSetPoint(count, v[0], v[1], v[2]); - - Real val; - r = valuesDataset.at_phys(p, val); - if (r!=SUCCESS) { - printf("Error in interpolating value [%d %d %d]\n", i,j,k); - } - sampledArray->SetTuple1(count, val); - count++; - } - - vsp_new(vtkStructuredGrid, output); - output->SetDimensions(newdim); - output->SetPoints(points); - output->GetPointData()->AddArray(sampledArray); - - - printf("Saving output file: sampling.vts\n"); - vsp_new(vtkXMLStructuredGridWriter, writer); - writer->SetFileName("sampling.vts"); - writer->SetInputData(output); - writer->Write(); - } else if (getFileExtension(vtk_file).compare("vti")==0) { - vsp_new(vtkXMLImageDataReader, reader); - reader->SetFileName(vtk_file.c_str()); - reader->Update(); - image1->DeepCopy( reader->GetOutput() ); - dataset = image1.Get(); - - vsp_new(vtkImageData, output); - - printf("Saving output file: sampling.vti\n"); - vsp_new(vtkXMLImageDataWriter, writer); - writer->SetFileName("sampling.vti"); - writer->SetInputData(output); - writer->Write(); - - - } else { - printf("File format not supported\n"); - exit(1); - } - - - // create denser grids - - -} - - -int main(int argc, char **argv) { - srand(time(NULL)); - - cout << "denseSamplingField " << endl; - if (argc<=2) - return -1; - string input_file = argv[1]; - - process_vtk_file(input_file, atoi(argv[2])); - -} diff --git a/examples/vtk/streamlineGaussianVTK.cpp b/examples/vtk/streamlineGaussianVTK.cpp deleted file mode 100644 index e6720d1..0000000 --- a/examples/vtk/streamlineGaussianVTK.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2015 The Edda Authors. All rights reserved. -// Use of this source code is governed by a MIT-style license that can be -// found in the LICENSE file. -#include -#include -#include -#include -#include - -#include "vtkDataSet.h" -#include "vtkSmartPointer.h" -#include "vtkLineSource.h" -#include "vtkRenderWindowInteractor.h" -#include "vtkInteractorStyleTrackballCamera.h" -#include "vtkRenderWindow.h" -#include "vtkRenderer.h" -#include "vtkActor.h" -#include "vtkPolyDataMapper.h" -#include "vtkOutlineFilter.h" -#include "vtkProperty.h" -#include "vtkLineWidget.h" -#include "vtkCommand.h" -#include "vtkCallbackCommand.h" -#include "vtkPointData.h" -#include "vtkFloatArray.h" -#include "vtkSphereSource.h" - -#include "vtkCubeSource.h" -#include "vtkLine.h" -#include "vtkIdList.h" -#include "vtkPoints.h" -#include "vtkCellArray.h" - -#include "vtkAppendPolyData.h" -#include "vtkGlyph3D.h" -#include "vtkGlyph3DMapper.h" - -#include -#include -#include -#include -#include -#include - -#include "vtkTransformFilter.h" -#include "vtkTransform.h" - -using namespace std; -using namespace edda; - -#define vsp_new(cls,x) vtkSmartPointer x = vtkSmartPointer::New() - -vtkSmartPointer lineWidget; -vtkSmartPointer renWin; -vtkSmartPointer streamlines; - -shared_ptr > streamTracer; - -void computeStreamlines(vtkSmartPointer vtk_seeds) -{ - int i; - // convert seeds from vtk - list seeds; - for (i=0; iGetNumberOfPoints(); i++) - { - double p[3]; - vtk_seeds->GetPoint(i, p); - // add a particle location with zero mean - seeds.push_back(Gaussian3( - dist::Gaussian(p[0], 0), - dist::Gaussian(p[1], 0), - dist::Gaussian(p[2], 0) ) - ); - } - - list >traces; - streamTracer->step_size = 0.05; - streamTracer->max_steps = 500; - streamTracer->compute(seeds, traces); - - // convert traces to vtk - vtkPoints *points = vtkPoints::New(); - vtkCellArray *cells = vtkCellArray::New(); - vtkFloatArray *fieldData = vtkFloatArray::New(); - fieldData->SetNumberOfComponents(1); - vtkFloatArray *uncertainty = vtkFloatArray::New(); - uncertainty->SetName("uncertainty"); - uncertainty->SetNumberOfComponents(3); - int count = 0; - for (auto traceItr = traces.begin(); traceItr != traces.end(); ++traceItr) - { - auto &singleTrace = *traceItr; - vtkIdList *ids = vtkIdList::New(); - for (auto posItr = singleTrace.begin(); posItr!=singleTrace.end(); ++posItr) - { - Gaussian3 &p = *posItr; - - int id = points->InsertNextPoint(p[0].mean, p[1].mean, p[2].mean); - ids->InsertNextId(id); - - // get 97.5% percentile - uncertainty->InsertNextTuple3( - sqrt(p[0].var)*1.96, - sqrt(p[1].var)*1.96, - sqrt(p[2].var)*1.96 ); - - fieldData->InsertNextTuple1(count); - } - cells->InsertNextCell(ids); - count ++; - } - streamlines->SetPoints(points); - streamlines->SetLines(cells); - streamlines->GetPointData()->SetScalars(fieldData); - streamlines->GetPointData()->SetVectors(uncertainty); -} - -void updateSeeds(vtkObject* caller, unsigned long eventId, void *clientdata, void *calldata) -{ - vsp_new(vtkPolyData, seeds) ; - lineWidget->GetPolyData(seeds); - computeStreamlines(seeds); - renWin->Render(); -} - - -int main(int argc, char **argv) -{ - cout << "Input arguments: " << endl; - if (argc<2) - return -1; - string filename; - filename = argv[1]; - - cout << "Press 'i' to change the rake\n"; - - // load data with random sampling - shared_ptr > dataset = loadVectorData(filename); - - VECTOR3 minB, maxB; - dataset->getGrid()->boundary(minB, maxB); - - // create stream tracer - new StreamTracer(dataset); - streamTracer = shared_ptr > - (new StreamTracer(dataset) ); - - // create a dummy vtk bounding box - vsp_new(vtkCubeSource, cube); - cube->SetBounds(minB[0], maxB[0], minB[1], maxB[1], minB[2], maxB[2]); - cube->Update(); - - // user can change the seeding rake - lineWidget = vtkSmartPointer::New(); - lineWidget->SetInputData(cube->GetOutput()); - lineWidget->SetResolution(19); // 20 seeds along the line - lineWidget->SetAlignToYAxis(); - lineWidget->PlaceWidget(); - lineWidget->ClampToBoundsOn(); - - vsp_new(vtkPolyData, seeds); - lineWidget->GetPolyData(seeds); - - streamlines = vtkSmartPointer::New(); - - computeStreamlines(seeds); - - // - // render Streamlines - // - vsp_new(vtkPolyDataMapper, mapper); - mapper->SetScalarRange(0, 20); // for 20 seeds - mapper->SetInputData(streamlines); - mapper->SetColorModeToMapScalars(); - vsp_new(vtkActor, actor); - actor->SetMapper(mapper); - - // - // glyph for uncertainty range - // - vsp_new(vtkGlyph3DMapper, uncertaintyMapper); - uncertaintyMapper->SetInputData(streamlines); - uncertaintyMapper->SetColorModeToMapScalars(); - uncertaintyMapper->SetScaleModeToScaleByVectorComponents(); - uncertaintyMapper->OrientOff(); - uncertaintyMapper->SetScaleArray("uncertainty"); - uncertaintyMapper->SetScaleFactor(1.); - uncertaintyMapper->SetScalarRange(0, 20); - - vsp_new(vtkSphereSource, sphere); - sphere->SetPhiResolution(8); - sphere->SetThetaResolution(8); - uncertaintyMapper->SetSourceConnection(sphere->GetOutputPort()); - - vsp_new(vtkActor, uncertaintyActor); - uncertaintyActor->SetMapper(uncertaintyMapper); - - // - // outline - // - vsp_new(vtkOutlineFilter, outline); - outline->SetInputData(cube->GetOutput()); - - vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New(); - outlineMapper->SetInputConnection(outline->GetOutputPort()); - - vtkActor *outlineActor = vtkActor::New(); - outlineActor->SetMapper(outlineMapper); - outlineActor->GetProperty()->SetColor(.5,.5,.5); - - // - // renderer - // - vsp_new(vtkRenderer, ren); - renWin = vtkSmartPointer::New(); - renWin->AddRenderer(ren); - vsp_new(vtkRenderWindowInteractor, iren); - iren->SetRenderWindow(renWin); - vsp_new(vtkInteractorStyleTrackballCamera, style); - iren->SetInteractorStyle(style); - - // line widget interactor - lineWidget->SetInteractor(iren); - lineWidget->SetDefaultRenderer(ren); - vsp_new(vtkCallbackCommand, callback ); - callback->SetCallback(updateSeeds); - lineWidget->AddObserver(vtkCommand::EndInteractionEvent, callback); - - ren->AddActor(actor); - ren->AddActor(uncertaintyActor); - ren->AddActor(outlineActor); - ren->SetBackground(0,0,0); - ren->ResetCamera(); - - renWin->SetSize(500,500); - - iren->Initialize(); - renWin->Render(); - iren->Start(); - - return 0; -} - - - diff --git a/html/AUTHORS_8md.html b/html/AUTHORS_8md.html index 748d7fb..2025cce 100644 --- a/html/AUTHORS_8md.html +++ b/html/AUTHORS_8md.html @@ -3,16 +3,15 @@ - + + EDDA: AUTHORS.md File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -89,9 +65,9 @@
diff --git a/html/LICENSE_8md.html b/html/LICENSE_8md.html index ec1d18a..d41b41e 100644 --- a/html/LICENSE_8md.html +++ b/html/LICENSE_8md.html @@ -3,16 +3,15 @@ - + + EDDA: LICENSE.md File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -89,9 +65,9 @@
diff --git a/html/README_8md.html b/html/README_8md.html index 79d984e..99a01b7 100644 --- a/html/README_8md.html +++ b/html/README_8md.html @@ -3,16 +3,15 @@ - + + EDDA: README.md File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -89,9 +65,9 @@
diff --git a/html/VecDistrModeler_8h.html b/html/VecDistrModeler_8h.html new file mode 100644 index 0000000..98a4e4d --- /dev/null +++ b/html/VecDistrModeler_8h.html @@ -0,0 +1,111 @@ + + + + + + + +EDDA: distr_modeler/VecDistrModeler.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
VecDistrModeler.h File Reference
+
+
+
#include <iostream>
+#include <string>
+#include <vector>
+#include <stdlib.h>
+#include "edda.h"
+#include "distributions/gaussian.h"
+#include "distributions/distribution.h"
+#include <distributions/gaussian_mixture.h>
+#include "distributions/histogram.h"
+#include <distributions/estimate_gmm.h>
+#include "distributions/variant.h"
+#include "dataset/dataset.h"
+#include "dataset/distr_array.h"
+#include "core/interpolator.h"
+#include "io/edda_vtk_writer.h"
+#include "core/vector_matrix.h"
+#include "core/shared_ary.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  edda::VecDistrModeler< T >
 
+ + + + +

+Namespaces

 edda
 Experimental functionality.
 
+
+ + + + diff --git a/html/VecDistrModeler_8h_source.html b/html/VecDistrModeler_8h_source.html new file mode 100644 index 0000000..e496cbb --- /dev/null +++ b/html/VecDistrModeler_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +EDDA: distr_modeler/VecDistrModeler.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
VecDistrModeler.h
+
+
+Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
2 // Use of this source code is governed by a MIT-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef VEC_DISTRIBUTION_MODELER_H
6 #define VEC_DISTRIBUTION_MODELER_H
7 
8 #include <iostream>
9 #include <string>
10 #include <vector>
11 #include <stdlib.h>
12 #include "edda.h"
13 #include "distributions/gaussian.h"
18 #include "distributions/variant.h"
19 #include "dataset/dataset.h"
20 #include "dataset/distr_array.h"
21 #include "core/interpolator.h"
22 #include "io/edda_vtk_writer.h"
23 
24 #include "core/vector_matrix.h"
25 #include "core/shared_ary.h"
26 
27 
28 using namespace edda;
29 using namespace std;
30 using namespace edda::dist;
31 
32 
33 using namespace std;
34 
35 namespace edda{
36 
37 // Distribution modeler
38 template <typename T>
40 protected:
41  shared_ptr<Dataset<VECTOR3> > dataset;
42  size_t xSize, ySize, zSize;
44  size_t binCount;
45  size_t numComp; //number of components.
46 public:
48  {
49  xSize = 1;
50  ySize = 1;
51  zSize = 1;
52  binCount = 32;
53  numComp = 3;
54  }
55  void initVectorComponent(size_t n)
56  {
57  numComp = n;
58  }
59  void assignGrid(int X, int Y, int Z)
60  {
61  xSize = X;
62  ySize = Y;
63  zSize = Z;
64  distArray = new T[xSize*ySize*zSize*numComp];
65  }
66  void initHistogram(size_t bin)
67  {
68  binCount = bin;
69  }
70  void computeGMM(float *data, size_t size, size_t index)
71  {
72  for(size_t i=0; i<numComp; i++)
73  {
74  double *dataD;
75  dataD = new double[size];
76  for(size_t j=0; j<size; j++)
77  {
78  dataD[j] = (double) data[j*numComp + i];
79  }
80  T new_distr;
81  eddaComputeEM(dataD, size, &new_distr);
82  distArray[index*numComp + i] = new_distr;
83  }
84 
85 
86 
87  }
88  void computeHistogram(float *data, size_t size, size_t index)
89  {
90 
91  for(size_t i=0; i<numComp; i++)
92  {
93  float *dataF;
94  dataF = new float[size];
95  for(size_t j=0; j<size; j++)
96  {
97  dataF[j] = data[j*numComp + i];
98  }
99  T new_distr;
100  new_distr = eddaComputeHistogram(data, size, binCount);
101  distArray[index*numComp + i] = new_distr;
102  }
103 
104 
105  }
106  void model()
107  {
108  shared_ary<Vector<T,3> > pArray(new Vector<T, 3>[xSize*ySize*zSize], xSize*ySize*zSize);
109  for(int i=0; i<xSize*ySize*zSize*3; i += 3)
110  {
111  Vector<T, 3> curVectorDistr;
112  for(int j=0; j<3; j++)
113  {
114  curVectorDistr[j] = distArray[i+j];
115  }
116  pArray[i/3] = curVectorDistr;
117  }
118  DistrArray * abs_array = new VectorDistrArray<T,3>(pArray);
119  dataset = make_Dataset<VECTOR3>(new RegularCartesianGrid(xSize, ySize, zSize), abs_array);
120  }
121  /*void writeToVTK(const string &edda_fname, const string &array_name_prefix){
122  writeEddaVtkDataset(dataset, edda_fname, array_name_prefix);
123  }*/
124  shared_ptr<Dataset<VECTOR3>> getDataset(){
125  return dataset;
126  }
127 
128 
129 };
130 
131 }
132 #endif // VEC_DISTRIBUTION_MODELER_H
Array of vector distributions.
Definition: distr_array.h:132
+ +
T * distArray
Definition: VecDistrModeler.h:43
+
size_t zSize
Definition: VecDistrModeler.h:42
+
shared_ptr< Dataset< VECTOR3 > > getDataset()
Definition: VecDistrModeler.h:124
+
Definition: shared_ary.h:13
+
Experimental functionality.
Definition: distributionModeler.h:26
+
VecDistrModeler()
Definition: VecDistrModeler.h:47
+
The class interface of distrbution arrays used by the Dataset class.
Definition: distr_array.h:24
+ + +
void model()
Definition: VecDistrModeler.h:106
+
Definition: VecDistrModeler.h:39
+ +
void computeGMM(float *data, size_t size, size_t index)
Definition: VecDistrModeler.h:70
+
Definition: grid.h:185
+
shared_ptr< Dataset< VECTOR3 > > dataset
Definition: VecDistrModeler.h:41
+
void initHistogram(size_t bin)
Definition: VecDistrModeler.h:66
+ +
void initVectorComponent(size_t n)
Definition: VecDistrModeler.h:55
+ +
void assignGrid(int X, int Y, int Z)
Definition: VecDistrModeler.h:59
+ + +
size_t binCount
Definition: VecDistrModeler.h:44
+ +
size_t numComp
Definition: VecDistrModeler.h:45
+
void eddaComputeEM(double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
Definition: estimate_gmm.h:142
+
dist::Histogram eddaComputeHistogram(float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)
Definition: histogram.h:296
+ +
Vectors are Tuples that have geometry concepts.
Definition: vector_matrix.h:27
+ +
void computeHistogram(float *data, size_t size, size_t index)
Definition: VecDistrModeler.h:88
+ + + +
Definition: distribution.h:20
+
+ + + + diff --git a/html/abstract__data__array_8h.html b/html/abstract__data__array_8h.html index e2bb9c4..8d0ac93 100644 --- a/html/abstract__data__array_8h.html +++ b/html/abstract__data__array_8h.html @@ -38,7 +38,6 @@
@@ -92,9 +68,9 @@
eddaRandomProbeFilter.h File Reference
-
#include "vtkFiltersCoreModule.h"
-#include "vtkDataSetAlgorithm.h"
-#include "vtkDataSetAttributes.h"
+
#include "vtkFiltersCoreModule.h"
+#include "vtkDataSetAlgorithm.h"
+#include "vtkDataSetAttributes.h"

Go to the source code of this file.

@@ -106,9 +82,9 @@ diff --git a/html/eddaRandomProbeFilter_8h_source.html b/html/eddaRandomProbeFilter_8h_source.html index a6befe4..01f3227 100644 --- a/html/eddaRandomProbeFilter_8h_source.html +++ b/html/eddaRandomProbeFilter_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaRandomProbeFilter.h Source File + + +EDDA: vis/src/vtk/eddaRandomProbeFilter.h Source File + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -90,208 +66,45 @@
eddaRandomProbeFilter.h
-Go to the documentation of this file.
1 /*=========================================================================
-
2 
-
3  Program: Visualization Toolkit
-
4  Module: vtkProbeFilter.h
-
5 
-
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-
7  All rights reserved.
-
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
9 
-
10  This software is distributed WITHOUT ANY WARRANTY; without even
-
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-
12  PURPOSE. See the above copyright notice for more information.
-
13 
-
14 =========================================================================*/
-
15 // .NAME vtkProbeFilter - sample data values at specified point locations
-
16 // .SECTION Description
-
17 // vtkProbeFilter is a filter that computes point attributes (e.g., scalars,
-
18 // vectors, etc.) at specified point positions. The filter has two inputs:
-
19 // the Input and Source. The Input geometric structure is passed through the
-
20 // filter. The point attributes are computed at the Input point positions
-
21 // by interpolating into the source data. For example, we can compute data
-
22 // values on a plane (plane specified as Input) from a volume (Source).
-
23 // The cell data of the source data is copied to the output based on in
-
24 // which source cell each input point is. If an array of the same name exists
-
25 // both in source's point and cell data, only the one from the point data is
-
26 // probed.
-
27 //
-
28 // This filter can be used to resample data, or convert one dataset form into
-
29 // another. For example, an unstructured grid (vtkUnstructuredGrid) can be
-
30 // probed with a volume (three-dimensional vtkImageData), and then volume
-
31 // rendering techniques can be used to visualize the results. Another example:
-
32 // a line or curve can be used to probe data to produce x-y plots along
-
33 // that line or curve.
-
34 
-
35 #ifndef eddaRandomProbeFilter_h
-
36 #define eddaRandomProbeFilter_h
-
37 
-
38 #include "vtkFiltersCoreModule.h" // For export macro
-
39 #include "vtkDataSetAlgorithm.h"
-
40 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
-
41 
-
42 class vtkIdTypeArray;
-
43 class vtkCharArray;
-
44 class vtkMaskPoints;
-
45 
-
46 class VTKFILTERSCORE_EXPORT eddaRandomProbeFilter : public vtkDataSetAlgorithm
-
47 {
-
48 public:
-
49  static eddaRandomProbeFilter *New();
-
50  vtkTypeMacro(eddaRandomProbeFilter,vtkDataSetAlgorithm)
-
51  void PrintSelf(ostream& os, vtkIndent indent);
-
52 
-
53  // Description:
-
54  // Specify the point locations used to probe input. Any geometry
-
55  // can be used.
-
56  void SetSourceData(vtkDataObject *source);
-
57  vtkDataObject *GetSource();
-
58 
-
59  // Description:
-
60  // Specify the point locations used to probe input. Any geometry
-
61  // can be used. New style. Equivalent to SetInputConnection(1, algOutput).
-
62  void SetSourceConnection(vtkAlgorithmOutput* algOutput);
-
63 
-
64  // Description:
-
65  // This flag is used only when a piece is requested to update. By default
-
66  // the flag is off. Because no spatial correspondence between input pieces
-
67  // and source pieces is known, all of the source has to be requested no
-
68  // matter what piece of the output is requested. When there is a spatial
-
69  // correspondence, the user/application can set this flag. This hint allows
-
70  // the breakup of the probe operation to be much more efficient. When piece
-
71  // m of n is requested for update by the user, then only n of m needs to
-
72  // be requested of the source.
-
73  vtkSetMacro(SpatialMatch, int)
-
74  vtkGetMacro(SpatialMatch, int)
-
75  vtkBooleanMacro(SpatialMatch, int)
-
76 
-
77  // Description:
-
78  // Get the list of point ids in the output that contain attribute data
-
79  // interpolated from the source.
-
80  vtkGetObjectMacro(ValidPoints, vtkIdTypeArray)
-
81 
-
82  // Description:
-
83  // Returns the name of the char array added to the output with values 1 for
-
84  // valid points and 0 for invalid points.
-
85  // Set to "vtkValidPointMask" by default.
-
86  vtkSetStringMacro(ValidPointMaskArrayName)
-
87  vtkGetStringMacro(ValidPointMaskArrayName)
-
88 
-
89  // Description:
-
90  // Shallow copy the input cell data arrays to the output.
-
91  // Off by default.
-
92  vtkSetMacro(PassCellArrays, int)
-
93  vtkBooleanMacro(PassCellArrays, int)
-
94  vtkGetMacro(PassCellArrays, int)
-
95  // Description:
-
96  // Shallow copy the input point data arrays to the output
-
97  // Off by default.
-
98  vtkSetMacro(PassPointArrays, int)
-
99  vtkBooleanMacro(PassPointArrays, int)
-
100  vtkGetMacro(PassPointArrays, int)
-
101 
-
102 
-
103  // Description:
-
104  // Set whether to pass the field-data arrays from the Input i.e. the input
-
105  // providing the geometry to the output. On by default.
-
106  vtkSetMacro(PassFieldArrays, int)
-
107  vtkBooleanMacro(PassFieldArrays, int)
-
108  vtkGetMacro(PassFieldArrays, int)
-
109 
-
110  // Description:
-
111  // Set the tolerance used to compute whether a point in the
-
112  // source is in a cell of the input. This value is only used
-
113  // if ComputeTolerance is off.
-
114  vtkSetMacro(Tolerance, double)
-
115  vtkGetMacro(Tolerance, double)
-
116 
-
117  // Description:
-
118  // Set whether to use the Tolerance field or precompute the tolerance.
-
119  // When on, the tolerance will be computed and the field
-
120  // value is ignored. Off by default.
-
121  vtkSetMacro(ComputeTolerance, bool)
-
122  vtkBooleanMacro(ComputeTolerance, bool)
-
123  vtkGetMacro(ComputeTolerance, bool)
-
124 
-
125 //BTX
-
126 protected:
- -
128  ~eddaRandomProbeFilter();
-
129 
-
130  int PassCellArrays;
-
131  int PassPointArrays;
-
132  int PassFieldArrays;
-
133 
-
134  int SpatialMatch;
-
135 
-
136  double Tolerance;
-
137  bool ComputeTolerance;
-
138 
-
139  virtual int RequestData(vtkInformation *, vtkInformationVector **,
-
140  vtkInformationVector *);
-
141  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
-
142  vtkInformationVector *);
-
143  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
-
144  vtkInformationVector *);
-
145 
-
146  // Description:
-
147  // Call at end of RequestData() to pass attribute data respecting the
-
148  // PassCellArrays, PassPointArrays, PassFieldArrays flags.
-
149  void PassAttributeData(
-
150  vtkDataSet* input, vtkDataObject* source, vtkDataSet* output);
-
151 
-
152  // Description:
-
153  // Equivalent to calling InitializeForProbing(); ProbeEmptyPoints().
-
154  void Probe(vtkDataSet *input, vtkDataSet *source, vtkDataSet *output);
-
155 
-
156  // Description:
-
157  // Build the field lists. This is required before calling
-
158  // InitializeForProbing().
-
159  void BuildFieldList(vtkDataSet* source);
-
160 
-
161  // Description:
-
162  // Initializes output and various arrays which keep track for probing status.
-
163  virtual void InitializeForProbing(vtkDataSet *input, vtkDataSet *output);
-
164 
-
165  // Description:
-
166  // Probe only those points that are marked as not-probed by the MaskPoints
-
167  // array.
-
168  // srcIdx is the index in the PointList for the given source.
-
169  void ProbeEmptyPoints(vtkDataSet *input, int srcIdx, vtkDataSet *source,
-
170  vtkDataSet *output);
-
171 
-
172  char* ValidPointMaskArrayName;
-
173  vtkIdTypeArray *ValidPoints;
-
174  vtkCharArray* MaskPoints;
-
175  int NumberOfValidPoints;
-
176 
-
177  // Agreed, this is sort of a hack to allow subclasses to override the default
-
178  // behavior of this filter to call NullPoint() for every point that is
-
179  // not-a-hit when probing. This makes it possible for subclasses to initialize
-
180  // the arrays with different defaults.
-
181  bool UseNullPoint;
-
182 
-
183  vtkDataSetAttributes::FieldList* CellList;
-
184  vtkDataSetAttributes::FieldList* PointList;
-
185 private:
-
186  eddaRandomProbeFilter(const eddaRandomProbeFilter&); // Not implemented.
-
187  void operator=(const eddaRandomProbeFilter&); // Not implemented.
-
188 
-
189  class vtkVectorOfArrays;
-
190  vtkVectorOfArrays* CellArrays;
-
191 //ETX
-
192 };
-
193 
-
194 #endif
+Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkProbeFilter.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 // .NAME vtkProbeFilter - sample data values at specified point locations
16 // .SECTION Description
17 // vtkProbeFilter is a filter that computes point attributes (e.g., scalars,
18 // vectors, etc.) at specified point positions. The filter has two inputs:
19 // the Input and Source. The Input geometric structure is passed through the
20 // filter. The point attributes are computed at the Input point positions
21 // by interpolating into the source data. For example, we can compute data
22 // values on a plane (plane specified as Input) from a volume (Source).
23 // The cell data of the source data is copied to the output based on in
24 // which source cell each input point is. If an array of the same name exists
25 // both in source's point and cell data, only the one from the point data is
26 // probed.
27 //
28 // This filter can be used to resample data, or convert one dataset form into
29 // another. For example, an unstructured grid (vtkUnstructuredGrid) can be
30 // probed with a volume (three-dimensional vtkImageData), and then volume
31 // rendering techniques can be used to visualize the results. Another example:
32 // a line or curve can be used to probe data to produce x-y plots along
33 // that line or curve.
34 
35 #ifndef eddaRandomProbeFilter_h
36 #define eddaRandomProbeFilter_h
37 
38 #include "vtkFiltersCoreModule.h" // For export macro
39 #include "vtkDataSetAlgorithm.h"
40 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
41 
42 class vtkIdTypeArray;
43 class vtkCharArray;
44 class vtkMaskPoints;
45 
46 class eddaRandomProbeFilter : public vtkDataSetAlgorithm
47 {
48 public:
49  static eddaRandomProbeFilter *New();
50  vtkTypeMacro(eddaRandomProbeFilter,vtkDataSetAlgorithm)
51  void PrintSelf(ostream& os, vtkIndent indent);
52 
53  // Description:
54  // Specify the point locations used to probe input. Any geometry
55  // can be used.
56  void SetSourceData(vtkDataObject *source);
57  vtkDataObject *GetSource();
58 
59  // Description:
60  // Specify the point locations used to probe input. Any geometry
61  // can be used. New style. Equivalent to SetInputConnection(1, algOutput).
62  void SetSourceConnection(vtkAlgorithmOutput* algOutput);
63 
64  // Description:
65  // This flag is used only when a piece is requested to update. By default
66  // the flag is off. Because no spatial correspondence between input pieces
67  // and source pieces is known, all of the source has to be requested no
68  // matter what piece of the output is requested. When there is a spatial
69  // correspondence, the user/application can set this flag. This hint allows
70  // the breakup of the probe operation to be much more efficient. When piece
71  // m of n is requested for update by the user, then only n of m needs to
72  // be requested of the source.
74  vtkGetMacro(SpatialMatch, int)
75  vtkBooleanMacro(SpatialMatch, int)
76 
77  // Description:
78  // Get the list of point ids in the output that contain attribute data
79  // interpolated from the source.
80  vtkGetObjectMacro(ValidPoints, vtkIdTypeArray)
81 
82  // Description:
83  // Returns the name of the char array added to the output with values 1 for
84  // valid points and 0 for invalid points.
85  // Set to "vtkValidPointMask" by default.
87  vtkGetStringMacro(ValidPointMaskArrayName)
88 
89  // Description:
90  // Shallow copy the input cell data arrays to the output.
91  // Off by default.
93  vtkBooleanMacro(PassCellArrays, int)
94  vtkGetMacro(PassCellArrays, int)
95  // Description:
96  // Shallow copy the input point data arrays to the output
97  // Off by default.
99  vtkBooleanMacro(PassPointArrays, int)
100  vtkGetMacro(PassPointArrays, int)
101 
102 
103  // Description:
104  // Set whether to pass the field-data arrays from the Input i.e. the input
105  // providing the geometry to the output. On by default.
107  vtkBooleanMacro(PassFieldArrays, int)
108  vtkGetMacro(PassFieldArrays, int)
109 
110  // Description:
111  // Set the tolerance used to compute whether a point in the
112  // source is in a cell of the input. This value is only used
113  // if ComputeTolerance is off.
114  vtkSetMacro(Tolerance, double)
115  vtkGetMacro(Tolerance, double)
116 
117  // Description:
118  // Set whether to use the Tolerance field or precompute the tolerance.
119  // When on, the tolerance will be computed and the field
120  // value is ignored. Off by default.
122  vtkBooleanMacro(ComputeTolerance, bool)
123  vtkGetMacro(ComputeTolerance, bool)
124 
125 //BTX
126 protected:
128  ~eddaRandomProbeFilter();
129 
130  int PassCellArrays;
131  int PassPointArrays;
132  int PassFieldArrays;
133 
134  int SpatialMatch;
135 
136  double Tolerance;
137  bool ComputeTolerance;
138 
139  virtual int RequestData(vtkInformation *, vtkInformationVector **,
140  vtkInformationVector *);
141  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
142  vtkInformationVector *);
143  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
144  vtkInformationVector *);
145 
146  // Description:
147  // Call at end of RequestData() to pass attribute data respecting the
148  // PassCellArrays, PassPointArrays, PassFieldArrays flags.
149  void PassAttributeData(
150  vtkDataSet* input, vtkDataObject* source, vtkDataSet* output);
151 
152  // Description:
153  // Equivalent to calling InitializeForProbing(); ProbeEmptyPoints().
154  void Probe(vtkDataSet *input, vtkDataSet *source, vtkDataSet *output);
155 
156  // Description:
157  // Build the field lists. This is required before calling
158  // InitializeForProbing().
159  void BuildFieldList(vtkDataSet* source);
160 
161  // Description:
162  // Initializes output and various arrays which keep track for probing status.
163  virtual void InitializeForProbing(vtkDataSet *input, vtkDataSet *output);
164 
165  // Description:
166  // Probe only those points that are marked as not-probed by the MaskPoints
167  // array.
168  // srcIdx is the index in the PointList for the given source.
169  void ProbeEmptyPoints(vtkDataSet *input, int srcIdx, vtkDataSet *source,
170  vtkDataSet *output);
171 
173  vtkIdTypeArray *ValidPoints;
174  vtkCharArray* MaskPoints;
176 
177  // Agreed, this is sort of a hack to allow subclasses to override the default
178  // behavior of this filter to call NullPoint() for every point that is
179  // not-a-hit when probing. This makes it possible for subclasses to initialize
180  // the arrays with different defaults.
182 
183  vtkDataSetAttributes::FieldList* CellList;
184  vtkDataSetAttributes::FieldList* PointList;
185 private:
186  eddaRandomProbeFilter(const eddaRandomProbeFilter&); // Not implemented.
187  void operator=(const eddaRandomProbeFilter&); // Not implemented.
188 
189  class vtkVectorOfArrays;
190  vtkVectorOfArrays* CellArrays;
191 //ETX
192 };
193 
194 #endif
void Probe(vtkDataSet *input, vtkDataSet *source, vtkDataSet *output)
Definition: eddaRandomProbeFilter.cpp:251
+
void SetSourceData(vtkDataObject *source)
Definition: eddaRandomProbeFilter.cpp:92
+
int vtkBooleanMacro(SpatialMatch, int) vtkGetObjectMacro(ValidPoints
+
vtkTypeMacro(eddaRandomProbeFilter, vtkDataSetAlgorithm) void PrintSelf(ostream &os
+
int PassCellArrays
Definition: eddaRandomProbeFilter.h:130
+
vtkIndent indent
Definition: eddaRandomProbeFilter.h:51
+
bool ComputeTolerance
Definition: eddaRandomProbeFilter.h:137
+
char * ValidPointMaskArrayName
Definition: eddaRandomProbeFilter.h:172
+
void SetSourceConnection(vtkAlgorithmOutput *algOutput)
Definition: eddaRandomProbeFilter.cpp:86
+
static eddaRandomProbeFilter * New()
+
vtkCharArray * MaskPoints
Definition: eddaRandomProbeFilter.h:174
+
bool UseNullPoint
Definition: eddaRandomProbeFilter.h:181
+
vtkDataObject * GetSource()
Definition: eddaRandomProbeFilter.cpp:98
+
void PassAttributeData(vtkDataSet *input, vtkDataObject *source, vtkDataSet *output)
Definition: eddaRandomProbeFilter.cpp:139
+
int PassPointArrays
Definition: eddaRandomProbeFilter.h:131
+
double Tolerance
Definition: eddaRandomProbeFilter.h:136
+
void ProbeEmptyPoints(vtkDataSet *input, int srcIdx, vtkDataSet *source, vtkDataSet *output)
Definition: eddaRandomProbeFilter.cpp:288
Definition: eddaRandomProbeFilter.h:46
+
vtkDataSetAttributes::FieldList * PointList
Definition: eddaRandomProbeFilter.h:184
+
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomProbeFilter.cpp:475
+
int PassFieldArrays
Definition: eddaRandomProbeFilter.h:132
+
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomProbeFilter.cpp:437
+
vtkSetMacro(SpatialMatch, int) vtkGetMacro(SpatialMatch
+
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomProbeFilter.cpp:109
+
vtkDataSetAttributes::FieldList * CellList
Definition: eddaRandomProbeFilter.h:183
+
vtkIdTypeArray * ValidPoints
Definition: eddaRandomProbeFilter.h:173
+
void BuildFieldList(vtkDataSet *source)
Definition: eddaRandomProbeFilter.cpp:173
+
int vtkIdTypeArray vtkSetStringMacro(ValidPointMaskArrayName) vtkGetStringMacro(ValidPointMaskArrayName) vtkSetMacro(PassCellArrays
+
int vtkIdTypeArray int int int vtkGetMacro(PassPointArrays, int) vtkSetMacro(PassFieldArrays
Definition: eddaRandomProbeFilter.cpp:39
+
int NumberOfValidPoints
Definition: eddaRandomProbeFilter.h:175
+
int SpatialMatch
Definition: eddaRandomProbeFilter.h:134
+
virtual void InitializeForProbing(vtkDataSet *input, vtkDataSet *output)
Definition: eddaRandomProbeFilter.cpp:189
diff --git a/html/eddaRandomSampleField_8cpp.html b/html/eddaRandomSampleField_8cpp.html index b4488b6..37d22a6 100644 --- a/html/eddaRandomSampleField_8cpp.html +++ b/html/eddaRandomSampleField_8cpp.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaRandomSampleField.cpp File Reference + + +EDDA: vis/src/vtk/eddaRandomSampleField.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,16 +68,16 @@
eddaRandomSampleField.cpp File Reference
-
#include <iostream>
-#include "eddaRandomSampleField.h"
-#include "common.h"
-#include "vtk_common.h"
-#include "vtkInformation.h"
-#include "vtkInformationVector.h"
-#include "vtkObjectFactory.h"
-#include "vtkStreamingDemandDrivenPipeline.h"
-#include "gmm_vtk_data_array.h"
-#include "thrust/device_vector.h"
+
#include <iostream>
+#include "eddaRandomSampleField.h"
+#include "common.h"
+#include "vtk_common.h"
+#include "vtkInformation.h"
+#include "vtkInformationVector.h"
+#include "vtkObjectFactory.h"
+#include "vtkStreamingDemandDrivenPipeline.h"
+#include "io/gmm_vtk_data_array.h"
+#include "thrust/device_vector.h"
@@ -109,7 +85,9 @@

Functions

 

Function Documentation

- + +

§ vtkStandardNewMacro()

+
@@ -128,9 +106,9 @@

Function Documentation

diff --git a/html/eddaRandomSampleField_8h.html b/html/eddaRandomSampleField_8h.html index a7a92f5..ae48c41 100644 --- a/html/eddaRandomSampleField_8h.html +++ b/html/eddaRandomSampleField_8h.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaRandomSampleField.h File Reference + + +EDDA: vis/src/vtk/eddaRandomSampleField.h File Reference + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,11 +68,11 @@
eddaRandomSampleField.h File Reference
-
#include <string>
-#include "vtkFiltersCoreModule.h"
-#include "vtkDataSetAlgorithm.h"
-#include "vtkDataSetAttributes.h"
-#include "gmm_vtk_data_array.h"
+
#include <string>
+#include "vtkFiltersCoreModule.h"
+#include "vtkDataSetAlgorithm.h"
+#include "vtkDataSetAttributes.h"
+#include "io/gmm_vtk_data_array.h"

Go to the source code of this file.

@@ -108,9 +84,9 @@ diff --git a/html/eddaRandomSampleField_8h_source.html b/html/eddaRandomSampleField_8h_source.html index 163f77d..7a8fef9 100644 --- a/html/eddaRandomSampleField_8h_source.html +++ b/html/eddaRandomSampleField_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaRandomSampleField.h Source File + + +EDDA: vis/src/vtk/eddaRandomSampleField.h Source File + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -90,62 +66,27 @@
eddaRandomSampleField.h
-Go to the documentation of this file.
1 #ifndef eddaRandomSampleField_h
-
2 #define eddaRandomSampleField_h
-
3 
-
4 #include <string>
-
5 #include "vtkFiltersCoreModule.h" // For export macro
-
6 #include "vtkDataSetAlgorithm.h"
-
7 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
-
8 
-
9 #include "gmm_vtk_data_array.h"
-
10 
-
11 class vtkIdTypeArray;
-
12 class vtkCharArray;
-
13 class vtkMaskPoints;
-
14 
-
15 class VTKFILTERSCORE_EXPORT eddaRandomSampleField : public vtkDataSetAlgorithm
-
16 {
-
17 public:
-
18  static eddaRandomSampleField *New();
-
19  vtkTypeMacro(eddaRandomSampleField,vtkDataSetAlgorithm)
-
20  void PrintSelf(ostream& os, vtkIndent indent);
-
21 
-
22 protected:
-
23  double Isov;
-
24  std::string ResultName;
-
25  std::string Prefix;
-
26 
- - -
29 
-
30  virtual int RequestData(vtkInformation *, vtkInformationVector **,
-
31  vtkInformationVector *);
-
32  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
-
33  vtkInformationVector *);
-
34  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
-
35  vtkInformationVector *);
-
36 
-
37  // non-vtk functions
-
38  virtual void InitializeData(vtkDataSet* input,
-
39  vtkDataSet* output);
-
40  virtual void SampleDataArray(std::shared_ptr<edda::GmmVtkDataArray> dataArray, vtkSmartPointer<vtkFieldData> output);
-
41 
-
42 private:
-
43  eddaRandomSampleField(const eddaRandomSampleField&); // Not implemented.
-
44  void operator=(const eddaRandomSampleField&); // Not implemented.
-
45 
-
46 };
-
47 
-
48 #endif // eddaRandomSampleField_h
+Go to the documentation of this file.
1 #ifndef eddaRandomSampleField_h
2 #define eddaRandomSampleField_h
3 
4 #include <string>
5 #include "vtkFiltersCoreModule.h" // For export macro
6 #include "vtkDataSetAlgorithm.h"
7 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
8 
10 
11 class vtkIdTypeArray;
12 class vtkCharArray;
13 class vtkMaskPoints;
14 
15 class eddaRandomSampleField : public vtkDataSetAlgorithm
16 {
17 public:
18  static eddaRandomSampleField *New();
19  vtkTypeMacro(eddaRandomSampleField,vtkDataSetAlgorithm)
20  void PrintSelf(ostream& os, vtkIndent indent);
21 
22 protected:
23  double Isov;
24  std::string ResultName;
25  std::string Prefix;
26 
29 
30  virtual int RequestData(vtkInformation *, vtkInformationVector **,
31  vtkInformationVector *);
32  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
33  vtkInformationVector *);
34  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
35  vtkInformationVector *);
36 
37  // non-vtk functions
38  virtual void InitializeData(vtkDataSet* input,
39  vtkDataSet* output);
40  virtual void SampleDataArray(std::shared_ptr<edda::GmmVtkDataArray> dataArray, vtkSmartPointer<vtkFieldData> output);
41 
42 private:
43  eddaRandomSampleField(const eddaRandomSampleField&); // Not implemented.
44  void operator=(const eddaRandomSampleField&); // Not implemented.
45 
46 };
47 
48 #endif // eddaRandomSampleField_h
std::string ResultName
Definition: eddaRandomSampleField.h:24
+
Experimental functionality.
Definition: distributionModeler.h:26
+
virtual void SampleDataArray(std::shared_ptr< edda::GmmVtkDataArray > dataArray, vtkSmartPointer< vtkFieldData > output)
+ +
double Isov
Definition: eddaRandomSampleField.h:23
+
vtkTypeMacro(eddaRandomSampleField, vtkDataSetAlgorithm) void PrintSelf(ostream &os
+
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomSampleField.cpp:104
+
virtual void InitializeData(vtkDataSet *input, vtkDataSet *output)
Definition: eddaRandomSampleField.cpp:45
+
std::string Prefix
Definition: eddaRandomSampleField.h:25
+
vtkIndent indent
Definition: eddaRandomSampleField.h:20
+
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomSampleField.cpp:135
+
static eddaRandomSampleField * New()
Definition: eddaRandomSampleField.h:15
+
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaRandomSampleField.cpp:54
diff --git a/html/eddaSamplingArray_8cpp.html b/html/eddaSamplingArray_8cpp.html index 93b6242..3ba76ed 100644 --- a/html/eddaSamplingArray_8cpp.html +++ b/html/eddaSamplingArray_8cpp.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaSamplingArray.cpp File Reference + + +EDDA: vis/src/vtk/eddaSamplingArray.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,8 +68,8 @@
eddaSamplingArray.cpp File Reference
-
#include "eddaSamplingArray.h"
-#include "vtkObjectFactory.h"
+
#include "eddaSamplingArray.h"
+#include "vtkObjectFactory.h"
@@ -101,7 +77,9 @@

Functions

 

Function Documentation

- + +

§ vtkStandardNewMacro()

+
@@ -120,9 +98,9 @@

Function Documentation

diff --git a/html/eddaSamplingArray_8h.html b/html/eddaSamplingArray_8h.html index f5f07ab..e9062aa 100644 --- a/html/eddaSamplingArray_8h.html +++ b/html/eddaSamplingArray_8h.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaSamplingArray.h File Reference + + +EDDA: vis/src/vtk/eddaSamplingArray.h File Reference + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,27 +68,26 @@
eddaSamplingArray.h File Reference
-
#include <cstdio>
-#include <vtkDataArray.h>
-#include <vtkIdList.h>
-#include <dataset/abstract_data_array.h>
-#include <dataset/abstract_sampling_array.h>
-#include <core/vector_matrix.h>
+
#include <cstdio>
+#include <vtkDataArray.h>
+#include <vtkIdList.h>
+#include <dataset/distr_array.h>
+#include <core/vector_matrix.h>

Go to the source code of this file.

- +

Classes

class  eddaSamplingArray
 The eddaSamplingArray class is a vtkDataArray that returns a random sample from the distribution array. This is still experimental and unsafe to use because the grandparent class vtkAbstractArray allows GetVoidPointer() to bypass GetTuple(). More...
 The eddaSamplingArray class is a vtkDataArray that returns a random sample from the distribution array. This is still experimental and unsafe to use because the grandparent class vtkAbstractArray allows GetVoidPointer() to bypass GetTuple(). More...
 
diff --git a/html/eddaSamplingArray_8h_source.html b/html/eddaSamplingArray_8h_source.html index 5e03da8..f0503c6 100644 --- a/html/eddaSamplingArray_8h_source.html +++ b/html/eddaSamplingArray_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaSamplingArray.h Source File + + +EDDA: vis/src/vtk/eddaSamplingArray.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -90,601 +66,58 @@
eddaSamplingArray.h
-Go to the documentation of this file.
1 #ifndef eddaSamplingArray_h
-
2 #define eddaSamplingArray_h
-
3 #include <cstdio>
-
4 #include <vtkDataArray.h>
-
5 
-
6 #include <vtkIdList.h>
-
7 
- - -
10 #include <core/vector_matrix.h>
-
11 using namespace edda;
-
12 
-
17 class eddaSamplingArray : public vtkDataArray
-
18 {
- -
20 public:
-
21  vtkTypeMacro(eddaSamplingArray,vtkDataArray)
-
22  static eddaSamplingArray *New();
-
23 
- -
25  pArray = new DataSamplingArray( array );
-
26  this->SetNumberOfComponents( array->getNumComponents() );
-
27  this->SetNumberOfTuples(array->getLength());
-
28  }
-
29 
-
30  // Description:
-
31  // Set the tuple at the ith location using the jth tuple in the source array.
-
32  // This method assumes that the two arrays have the same type
-
33  // and structure. Note that range checking and memory allocation is not
-
34  // performed; use in conjunction with SetNumberOfTuples() to allocate space.
-
35  virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source)
-
36  {
-
37  printf("SetTuple\n");
-
38  }
-
39 
-
40  // Description:
-
41  // Insert the jth tuple in the source array, at ith location in this array.
-
42  // Note that memory allocation is performed as necessary to hold the data.
-
43  // This pure virtual function is redeclared here to avoid
-
44  // declaration hidden warnings.
-
45  virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source)
-
46  {
-
47  printf("InsertTuple\n");
-
48  }
-
49 
-
50  // Description:
-
51  // Insert the jth tuple in the source array, at the end in this array.
-
52  // Note that memory allocation is performed as necessary to hold the data.
-
53  // Returns the location at which the data was inserted.
-
54  // This pure virtual function is redeclared here to avoid
-
55  // declaration hidden warnings.
-
56  virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray* source)
-
57  {
-
58  printf("InsertTuple\n");
-
59  return j;
-
60  }
-
61 
-
62  // Description:
-
63  // Given a list of point ids, return an array of tuples.
-
64  // You must insure that the output array has been previously
-
65  // allocated with enough space to hold the data.
-
66  void GetTuples(vtkIdList *ptIds, vtkAbstractArray *aa)
-
67  {
-
68  vtkDataArray *outArray = vtkDataArray::FastDownCast(aa);
-
69  if (!outArray)
-
70  {
-
71  vtkWarningMacro("Input is not a vtkDataArray.");
-
72  return;
-
73  }
-
74 
-
75  if ((outArray->GetNumberOfComponents() != this->GetNumberOfComponents()))
-
76  {
-
77  vtkWarningMacro("Number of components for input and output do not match");
-
78  return;
-
79  }
-
80 
-
81  vtkIdType num=ptIds->GetNumberOfIds();
-
82  for (vtkIdType i=0; i<num; i++)
-
83  {
-
84  outArray->SetTuple(i, this->GetTuple(ptIds->GetId(i)));
-
85  }
-
86  }
-
87 
-
88  // Description:
-
89  // Get the tuples for the range of points ids specified
-
90  // (i.e., p1->p2 inclusive). You must insure that the output array has
-
91  // been previously allocated with enough space to hold the data.
-
92  //virtual void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output);
-
93 
-
94 
-
95  // Description:
-
96  // Set the ith tuple in this array as the interpolated tuple value,
-
97  // given the ptIndices in the source array and associated
-
98  // interpolation weights.
-
99  // This method assumes that the two arrays are of the same type
-
100  // and strcuture.
-
101  //virtual void InterpolateTuple(vtkIdType i, vtkIdList *ptIndices,
-
102  // vtkAbstractArray* source, double* weights);
-
103 
-
104  // Description
-
105  // Insert the ith tuple in this array as interpolated from the two values,
-
106  // p1 and p2, and an interpolation factor, t.
-
107  // The interpolation factor ranges from (0,1),
-
108  // with t=0 located at p1. This method assumes that the three arrays are of
-
109  // the same type. p1 is value at index id1 in source1, while, p2 is
-
110  // value at index id2 in source2.
-
111  //virtual void InterpolateTuple(vtkIdType i,
-
112  // vtkIdType id1, vtkAbstractArray* source1,
-
113  // vtkIdType id2, vtkAbstractArray* source2, double t);
-
114 
-
115  // Description:
-
116  // Get the data tuple at ith location. Return it as a pointer to an array.
-
117  // Note: this method is not thread-safe, and the pointer is only valid
-
118  // as long as another method invocation to a vtk object is not performed.
-
119  virtual double *GetTuple(vtkIdType i)
-
120  {
-
121  static std::vector<double> vec;
-
122  vec = std::vector<double>(this->GetNumberOfComponents());
-
123  GetTuple(i, &vec[0]);
-
124  return &vec[0];
-
125  }
-
126 
-
127  // Description:
-
128  // Get the data tuple at ith location by filling in a user-provided array,
-
129  // Make sure that your array is large enough to hold the NumberOfComponents
-
130  // amount of data being returned.
-
131  virtual void GetTuple(vtkIdType i, double * tuple)
-
132  {
-
133  std::vector<dist::Variant> varvec = pArray->getVector(i);
-
134  for (int c = 0; c < this->GetNumberOfComponents(); c++)
-
135  tuple[c] = boost::get<Real> ( varvec[c] );
-
136  }
-
137 
-
138  // Description:
-
139  // These methods are included as convenience for the wrappers.
-
140  // GetTuple() and SetTuple() which return/take arrays can not be
-
141  // used from wrapped languages. These methods can be used instead.
-
142  //double GetTuple1(vtkIdType i);
-
143  //double* GetTuple2(vtkIdType i);
-
144  //double* GetTuple3(vtkIdType i);
-
145  //double* GetTuple4(vtkIdType i);
-
146  //double* GetTuple6(vtkIdType i);
-
147  //double* GetTuple9(vtkIdType i);
-
148 
-
149  // Description:
-
150  // Set the data tuple at ith location. Note that range checking or
-
151  // memory allocation is not performed; use this method in conjunction
-
152  // with SetNumberOfTuples() to allocate space.
-
153  virtual void SetTuple(vtkIdType i, const float * tuple) {
-
154  printf("SetTuple\n");
-
155  }
-
156 
-
157  virtual void SetTuple(vtkIdType i, const double * tuple) {
-
158  printf("SetTuple\n");
-
159  }
-
160  // Description:
-
161  // These methods are included as convenience for the wrappers.
-
162  // GetTuple() and SetTuple() which return/take arrays can not be
-
163  // used from wrapped languages. These methods can be used instead.
-
164 #if 0
-
165  void SetTuple1(vtkIdType i, double value);
-
166  void SetTuple2(vtkIdType i, double val0, double val1);
-
167  void SetTuple3(vtkIdType i, double val0, double val1, double val2);
-
168  void SetTuple4(vtkIdType i, double val0, double val1, double val2,
-
169  double val3);
-
170  void SetTuple6(vtkIdType i, double val0, double val1, double val2,
-
171  double val3, double val4, double val5);
-
172  void SetTuple9(vtkIdType i, double val0, double val1, double val2,
-
173  double val3, double val4, double val5, double val6,
-
174  double val7, double val8);
-
175 #endif
-
176 
-
177  // Description:
-
178  // Insert the data tuple at ith location. Note that memory allocation
-
179  // is performed as necessary to hold the data.
-
180  virtual void InsertTuple(vtkIdType i, const float * tuple) {
-
181  printf("InsertTuple\n");
-
182  }
-
183  virtual void InsertTuple(vtkIdType i, const double * tuple){
-
184  printf("InsertTuple\n");
-
185  }
-
186  // Description:
-
187  // These methods are included as convenience for the wrappers.
-
188  // InsertTuple() which takes arrays can not be
-
189  // used from wrapped languages. These methods can be used instead.
-
190 #if 0
-
191  void InsertTuple1(vtkIdType i, double value);
-
192  void InsertTuple2(vtkIdType i, double val0, double val1);
-
193  void InsertTuple3(vtkIdType i, double val0, double val1, double val2);
-
194  void InsertTuple4(vtkIdType i, double val0, double val1, double val2,
-
195  double val3);
-
196  void InsertTuple9(vtkIdType i, double val0, double val1, double val2,
-
197  double val3, double val4, double val5, double val6,
-
198  double val7, double val8);
-
199 #endif
-
200 
-
201  // Description:
-
202  // Insert the data tuple at the end of the array and return the location at
-
203  // which the data was inserted. Memory is allocated as necessary to hold
-
204  // the data.
-
205  virtual vtkIdType InsertNextTuple(const float * tuple) {
-
206  printf("InsertNextTuple\n");
-
207  return 0;
-
208  }
-
209  virtual vtkIdType InsertNextTuple(const double * tuple) {
-
210  printf("InsertNextTuple\n");
-
211  return 0;
-
212  }
-
213 
-
214  // Description:
-
215  // These methods are included as convenience for the wrappers.
-
216  // InsertTuple() which takes arrays can not be
-
217  // used from wrapped languages. These methods can be used instead.
-
218 #if 0
-
219  void InsertNextTuple1(double value);
-
220  void InsertNextTuple2(double val0, double val1);
-
221  void InsertNextTuple3(double val0, double val1, double val2);
-
222  void InsertNextTuple4(double val0, double val1, double val2,
-
223  double val3);
-
224  void InsertNextTuple9(double val0, double val1, double val2,
-
225  double val3, double val4, double val5, double val6,
-
226  double val7, double val8);
-
227 #endif
-
228 
-
229  // Description:
-
230  // These methods remove tuples from the data array. They shift data and
-
231  // resize array, so the data array is still valid after this operation. Note,
-
232  // this operation is fairly slow.
-
233  virtual void RemoveTuple(vtkIdType id) {
-
234  printf("RemoveTuple\n");
-
235  }
-
236  virtual void RemoveFirstTuple() {
-
237  printf("RemoveTuple\n");
-
238  }
-
239  virtual void RemoveLastTuple() {
-
240  printf("RemoveTuple\n");
-
241  }
-
242 
-
243  // Description:
-
244  // Return the data component at the ith tuple and jth component location.
-
245  // Note that i is less than NumberOfTuples and j is less than
-
246  // NumberOfComponents.
-
247  //virtual double GetComponent(vtkIdType i, int j);
-
248 
-
249  // Description:
-
250  // Set the data component at the ith tuple and jth component location.
-
251  // Note that i is less than NumberOfTuples and j is less than
-
252  // NumberOfComponents. Make sure enough memory has been allocated
-
253  // (use SetNumberOfTuples() and SetNumberOfComponents()).
-
254  //virtual void SetComponent(vtkIdType i, int j, double c);
-
255 
-
256  // Description:
-
257  // Insert the data component at ith tuple and jth component location.
-
258  // Note that memory allocation is performed as necessary to hold the data.
-
259  //virtual void InsertComponent(vtkIdType i, int j, double c);
-
260 
-
261  // Description:
-
262  // Get the data as a double array in the range (tupleMin,tupleMax) and
-
263  // (compMin, compMax). The resulting double array consists of all data in
-
264  // the tuple range specified and only the component range specified. This
-
265  // process typically requires casting the data from native form into
-
266  // doubleing point values. This method is provided as a convenience for data
-
267  // exchange, and is not very fast.
-
268  //virtual void GetData(vtkIdType tupleMin, vtkIdType tupleMax, int compMin,
-
269  // int compMax, vtkDoubleArray* data);
-
270 
-
271  // Description:
-
272  // Deep copy of data. Copies data from different data arrays even if
-
273  // they are different types (using doubleing-point exchange).
-
274  //virtual void DeepCopy(vtkAbstractArray *aa);
-
275  //virtual void DeepCopy(vtkDataArray *da);
-
276 
-
277  // Description:
-
278  // Fill a component of a data array with a specified value. This method
-
279  // sets the specified component to specified value for all tuples in the
-
280  // data array. This methods can be used to initialize or reinitialize a
-
281  // single component of a multi-component array.
-
282  //virtual void FillComponent(int j, double c);
-
283 
-
284  // Description:
-
285  // Copy a component from one data array into a component on this data array.
-
286  // This method copies the specified component ("fromComponent") from the
-
287  // specified data array ("from") to the specified component ("j") over all
-
288  // the tuples in this data array. This method can be used to extract
-
289  // a component (column) from one data array and paste that data into
-
290  // a component on this data array.
-
291  //virtual void CopyComponent(int j, vtkDataArray *from,
-
292  // int fromComponent);
-
293 
-
294  // Description:
-
295  // Get the address of a particular data index. Make sure data is allocated
-
296  // for the number of items requested. Set MaxId according to the number of
-
297  // data values requested.
-
298  virtual void* WriteVoidPointer(vtkIdType id, vtkIdType number) {
-
299  printf("WriteVoidPointer\n");
-
300  return NULL;
-
301  }
-
302 
-
303  // Description:
-
304  // Return the memory in kilobytes consumed by this data array. Used to
-
305  // support streaming and reading/writing data. The value returned is
-
306  // guaranteed to be greater than or equal to the memory required to
-
307  // actually represent the data represented by this object. The
-
308  // information returned is valid only after the pipeline has
-
309  // been updated.
-
310  //virtual unsigned long GetActualMemorySize();
-
311 
-
312  // Description:
-
313  // Create default lookup table. Generally used to create one when none
-
314  // is available.
-
315  //void CreateDefaultLookupTable();
-
316 
-
317  // Description:
-
318  // Set/get the lookup table associated with this scalar data, if any.
-
319  //void SetLookupTable(vtkLookupTable *lut);
-
320  //vtkGetObjectMacro(LookupTable,vtkLookupTable);
-
321 
-
322  // Description:
-
323  // The range of the data array values for the given component will be
-
324  // returned in the provided range array argument. If comp is -1, the range
-
325  // of the magnitude (L2 norm) over all components will be provided. The
-
326  // range is computed and then cached, and will not be re-computed on
-
327  // subsequent calls to GetRange() unless the array is modified or the
-
328  // requested component changes.
-
329  // THIS METHOD IS NOT THREAD SAFE.
-
330  //void GetRange(double range[2], int comp)
-
331 
-
332  // Description:
-
333  // Return the range of the data array values for the given component. If
-
334  // comp is -1, return the range of the magnitude (L2 norm) over all
-
335  // components.The range is computed and then cached, and will not be
-
336  // re-computed on subsequent calls to GetRange() unless the array is
-
337  // modified or the requested component changes.
-
338  // THIS METHOD IS NOT THREAD SAFE.
-
339  //double* GetRange(int comp)
-
340 
-
341  // Description:
-
342  // Return the range of the data array. If the array has multiple components,
-
343  // then this will return the range of only the first component (component
-
344  // zero). The range is computed and then cached, and will not be re-computed
-
345  // on subsequent calls to GetRange() unless the array is modified.
-
346  // THIS METHOD IS NOT THREAD SAFE.
-
347  //double* GetRange()
-
348 
-
349  // Description:
-
350  // The the range of the data array values will be returned in the provided
-
351  // range array argument. If the data array has multiple components, then
-
352  // this will return the range of only the first component (component zero).
-
353  // The range is computend and then cached, and will not be re-computed on
-
354  // subsequent calls to GetRange() unless the array is modified.
-
355  // THIS METHOD IS NOT THREAD SAFE.
-
356  //void GetRange(double range[2])
-
357 
-
358  // Description:
-
359  // These methods return the Min and Max possible range of the native
-
360  // data type. For example if a vtkScalars consists of unsigned char
-
361  // data these will return (0,255).
-
362 #if 0
-
363  void GetDataTypeRange(double range[2]);
-
364  double GetDataTypeMin();
-
365  double GetDataTypeMax();
-
366  static void GetDataTypeRange(int type, double range[2]);
-
367  static double GetDataTypeMin(int type);
-
368  static double GetDataTypeMax(int type);
-
369 #endif
-
370 
-
371  // Description:
-
372  // Return the maximum norm for the tuples.
-
373  // Note that the max. is computed every time GetMaxNorm is called.
-
374  //virtual double GetMaxNorm();
-
375 
-
376  // Description:
-
377  // Creates an array for dataType where dataType is one of
-
378  // VTK_BIT, VTK_CHAR, VTK_SIGNED_CHAR, VTK_UNSIGNED_CHAR, VTK_SHORT,
-
379  // VTK_UNSIGNED_SHORT, VTK_INT, VTK_UNSIGNED_INT, VTK_LONG,
-
380  // VTK_UNSIGNED_LONG, VTK_DOUBLE, VTK_DOUBLE, VTK_ID_TYPE.
-
381  // Note that the data array returned has be deleted by the
-
382  // user.
-
383  //static vtkDataArray* CreateDataArray(int dataType);
-
384 
-
385  // Description:
-
386  // This key is used to hold tight bounds on the range of
-
387  // one component over all tuples of the array.
-
388  // Two values (a minimum and maximum) are stored for each component.
-
389  // When GetRange() is called when no tuples are present in the array
-
390  // this value is set to { VTK_DOUBLE_MAX, VTK_DOUBLE_MIN }.
-
391  //static vtkInformationDoubleVectorKey* COMPONENT_RANGE();
-
392 
-
393  // Description:
-
394  // This key is used to hold tight bounds on the $L_2$ norm
-
395  // of tuples in the array.
-
396  // Two values (a minimum and maximum) are stored for each component.
-
397  // When GetRange() is called when no tuples are present in the array
-
398  // this value is set to { VTK_DOUBLE_MAX, VTK_DOUBLE_MIN }.
-
399  //static vtkInformationDoubleVectorKey* L2_NORM_RANGE();
-
400 
-
401  // Description:
-
402  // Copy information instance. Arrays use information objects
-
403  // in a variety of ways. It is important to have flexibility in
-
404  // this regard because certain keys should not be coppied, while
-
405  // others must be. NOTE: Up to the implmeneter to make sure that
-
406  // keys not inteneded to be coppied are excluded here.
-
407  //virtual int CopyInformation(vtkInformation *infoFrom, int deep=1);
-
408 
-
409  // Description:
-
410  // Method for type-checking in FastDownCast implementations.
-
411  //virtual int GetArrayType() { return DataArray; }
-
412 
-
413  //------------------------------------------------------------------------------
-
414  inline static eddaSamplingArray* FastDownCast(vtkAbstractArray *source)
-
415  {
-
416  switch (source->GetArrayType())
-
417  {
-
418  case DataArrayTemplate:
-
419  case TypedDataArray:
-
420  case DataArray:
-
421  case MappedDataArray:
-
422  return static_cast<eddaSamplingArray*>(source);
-
423  default:
-
424  return NULL;
-
425  }
-
426  }
-
427 protected:
-
428  // Description:
-
429  // Compute the range for a specific component. If comp is set -1
-
430  // then L2 norm is computed on all components. Call ClearRange
-
431  // to force a recomputation if it is needed. The range is copied
-
432  // to the range argument.
-
433  // THIS METHOD IS NOT THREAD SAFE.
-
434  //virtual void ComputeRange(double range[2], int comp);
-
435 
-
436  // Description:
-
437  // Computes the range for each component of an array, the length
-
438  // of \a ranges must be two times the number of components.
-
439  // Returns true if the range was computed. Will return false
-
440  // if you try to compute the range of an array of length zero.
-
441  //virtual bool ComputeScalarRange(double* ranges);
-
442 
-
443  // Returns true if the range was computed. Will return false
-
444  // if you try to compute the range of an array of length zero.
-
445  //virtual bool ComputeVectorRange(double range[2]);
-
446 
-
447  // Construct object with default tuple dimension (number of components) of 1.
- -
449  pArray = NULL;
-
450  }
-
451 
- -
453  if (pArray)
-
454  delete pArray;
-
455  }
-
456 
-
457 
-
458 public : // vtkAbstractArray
-
459 
-
460  // Description:
-
461  // Release storage and reset array to initial state.
-
462  virtual void Initialize() {
-
463  if (pArray)
-
464  delete pArray ;
-
465  pArray = NULL;
-
466  }
-
467 
-
468  virtual int GetDataType() {
-
469  return VTK_DOUBLE;
-
470  }
-
471 
-
472  virtual int GetDataTypeSize() {
-
473  return static_cast<int>(sizeof(double));
-
474  }
-
475 
-
476  virtual void SetNumberOfTuples(vtkIdType number) {
-
477  this->Size = number * this->GetNumberOfComponents(); // allocated size of data
-
478  this->MaxId = number; // maximum index inserted thus far
-
479  }
-
480 
-
481  virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds,
-
482  vtkAbstractArray* source) {
-
483  printf("InsertTuples\n");
-
484  }
-
485 
-
486  virtual void *GetVoidPointer(vtkIdType id) {
-
487  static std::vector<double> data; // array data type simulates double
-
488  bool refill = false;
-
489  if (data.size() != this->GetDataSize()) {
-
490  data.resize(this->GetDataSize());
-
491  refill = true;
-
492  } else {
-
493  refill = (rand() % 10 == 0);
-
494  }
-
495 
-
496  if (refill) {
-
497  //printf("Refilling random array (id=%d)\n", (int)id);
-
498  for (int i=0; i<this->GetNumberOfTuples(); i++)
-
499  {
-
500  this->GetTuple(i, &data[i*this->GetNumberOfComponents()]);
-
501  }
-
502  }
-
503  return &data[id*this->GetNumberOfComponents()];
-
504  }
-
505 
-
506  virtual void Squeeze() {
-
507  printf("Squeeze");
-
508  }
-
509 
-
510  virtual int Resize(vtkIdType numTuples) {
-
511  return 0;
-
512  }
-
513  virtual void SetVoidArray(void *vtkNotUsed(array),
-
514  vtkIdType vtkNotUsed(size),
-
515  int vtkNotUsed(save)) {
-
516 
-
517  }
-
518  virtual vtkArrayIterator* NewIterator() {
-
519  printf("vtkArrayIterator\n");
-
520  return NULL;
-
521  }
-
522 
-
523  // Return the indices where a specific value appears.
-
524  virtual vtkIdType LookupValue(vtkVariant value) {return 0;}
-
525  virtual void LookupValue(vtkVariant value, vtkIdList* ids) {}
-
526 
-
527  virtual void SetVariantValue(vtkIdType idx, vtkVariant value) {}
-
528 
-
529  virtual void DataChanged() {}
-
530  virtual void ClearLookup() {}
-
531  virtual int Allocate(vtkIdType sz, vtkIdType ext=1000) {
-
532  printf("Allocate\n");
-
533  return 0;
-
534  }
-
535  virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart,
-
536  vtkAbstractArray* source) {}
-
537 
-
538  virtual void InsertVariantValue(vtkIdType idx, vtkVariant value) {}
-
539 
-
540 
-
541 private:
-
542  eddaSamplingArray(const eddaSamplingArray& a); // Not implemented.
-
543  void operator=(const eddaSamplingArray& a); // Not implemented.
-
544 };
-
545 
-
546 
-
547 #endif //eddaSamplingArray_h
-
virtual void RemoveFirstTuple()
Definition: eddaSamplingArray.h:236
- -
virtual void RemoveLastTuple()
Definition: eddaSamplingArray.h:239
-
virtual void Initialize()
Definition: eddaSamplingArray.h:462
-
virtual void Squeeze()
Definition: eddaSamplingArray.h:506
-
static eddaSamplingArray * FastDownCast(vtkAbstractArray *source)
Definition: eddaSamplingArray.h:414
-
virtual int Allocate(vtkIdType sz, vtkIdType ext=1000)
Definition: eddaSamplingArray.h:531
-
virtual void ClearLookup()
Definition: eddaSamplingArray.h:530
-
virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:35
-
virtual vtkIdType LookupValue(vtkVariant value)
Definition: eddaSamplingArray.h:524
-
virtual void LookupValue(vtkVariant value, vtkIdList *ids)
Definition: eddaSamplingArray.h:525
-
virtual void SetTuple(vtkIdType i, const double *tuple)
Definition: eddaSamplingArray.h:157
-
void SetEddaArray(edda::AbstractDataArray *array)
Definition: eddaSamplingArray.h:24
-
virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:481
-
virtual void InsertVariantValue(vtkIdType idx, vtkVariant value)
Definition: eddaSamplingArray.h:538
-
virtual void SetTuple(vtkIdType i, const float *tuple)
Definition: eddaSamplingArray.h:153
-
virtual int GetDataType()
Definition: eddaSamplingArray.h:468
-
virtual void SetVoidArray(void *vtkNotUsed(array), vtkIdType vtkNotUsed(size), int vtkNotUsed(save))
Definition: eddaSamplingArray.h:513
-
virtual void DataChanged()
Definition: eddaSamplingArray.h:529
-
void GetTuples(vtkIdList *ptIds, vtkAbstractArray *aa)
Definition: eddaSamplingArray.h:66
-
The AbstractDataArray class used in the Dataset class.
Definition: abstract_data_array.h:12
-
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:56
-
virtual void InsertTuple(vtkIdType i, const double *tuple)
Definition: eddaSamplingArray.h:183
- -
virtual size_t getLength()=0
-
virtual void SetVariantValue(vtkIdType idx, vtkVariant value)
Definition: eddaSamplingArray.h:527
-
virtual int Resize(vtkIdType numTuples)
Definition: eddaSamplingArray.h:510
-
virtual vtkIdType InsertNextTuple(const float *tuple)
Definition: eddaSamplingArray.h:205
-
virtual void SetNumberOfTuples(vtkIdType number)
Definition: eddaSamplingArray.h:476
-
eddaSamplingArray()
Definition: eddaSamplingArray.h:448
-
The eddaSamplingArray class is a vtkDataArray that returns a random sample from the distribution arra...
Definition: eddaSamplingArray.h:17
-
virtual void GetTuple(vtkIdType i, double *tuple)
Definition: eddaSamplingArray.h:131
-
virtual void * GetVoidPointer(vtkIdType id)
Definition: eddaSamplingArray.h:486
-
virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:45
-
virtual void * WriteVoidPointer(vtkIdType id, vtkIdType number)
Definition: eddaSamplingArray.h:298
-
~eddaSamplingArray()
Definition: eddaSamplingArray.h:452
-
virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:535
-
virtual void InsertTuple(vtkIdType i, const float *tuple)
Definition: eddaSamplingArray.h:180
+Go to the documentation of this file.
1 #ifndef eddaSamplingArray_h
2 #define eddaSamplingArray_h
3 #include <cstdio>
4 #include <vtkDataArray.h>
5 
6 #include <vtkIdList.h>
7 
8 #include <dataset/distr_array.h>
9 #include <core/vector_matrix.h>
10 using namespace edda;
11 
16 class eddaSamplingArray : public vtkDataArray
17 {
18  edda::DistrArray *pArray;
19 public:
20  vtkTypeMacro(eddaSamplingArray,vtkDataArray)
21  static eddaSamplingArray *New();
22 
24  pArray = array ;
25  this->SetNumberOfComponents( array->getNumComponents() );
26  this->SetNumberOfTuples(array->getLength());
27  }
28 
29  // Description:
30  // Set the tuple at the ith location using the jth tuple in the source array.
31  // This method assumes that the two arrays have the same type
32  // and structure. Note that range checking and memory allocation is not
33  // performed; use in conjunction with SetNumberOfTuples() to allocate space.
34  virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source)
35  {
36  printf("SetTuple\n");
37  }
38 
39  // Description:
40  // Insert the jth tuple in the source array, at ith location in this array.
41  // Note that memory allocation is performed as necessary to hold the data.
42  // This pure virtual function is redeclared here to avoid
43  // declaration hidden warnings.
44  virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source)
45  {
46  printf("InsertTuple\n");
47  }
48 
49  // Description:
50  // Insert the jth tuple in the source array, at the end in this array.
51  // Note that memory allocation is performed as necessary to hold the data.
52  // Returns the location at which the data was inserted.
53  // This pure virtual function is redeclared here to avoid
54  // declaration hidden warnings.
55  virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray* source)
56  {
57  printf("InsertTuple\n");
58  return j;
59  }
60 
61  // Description:
62  // Given a list of point ids, return an array of tuples.
63  // You must insure that the output array has been previously
64  // allocated with enough space to hold the data.
65  void GetTuples(vtkIdList *ptIds, vtkAbstractArray *aa)
66  {
67  vtkDataArray *outArray = vtkDataArray::FastDownCast(aa);
68  if (!outArray)
69  {
70  vtkWarningMacro("Input is not a vtkDataArray.");
71  return;
72  }
73 
74  if ((outArray->GetNumberOfComponents() != this->GetNumberOfComponents()))
75  {
76  vtkWarningMacro("Number of components for input and output do not match");
77  return;
78  }
79 
80  vtkIdType num=ptIds->GetNumberOfIds();
81  for (vtkIdType i=0; i<num; i++)
82  {
83  outArray->SetTuple(i, this->GetTuple(ptIds->GetId(i)));
84  }
85  }
86 
87  // Description:
88  // Get the tuples for the range of points ids specified
89  // (i.e., p1->p2 inclusive). You must insure that the output array has
90  // been previously allocated with enough space to hold the data.
91  //virtual void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output);
92 
93 
94  // Description:
95  // Set the ith tuple in this array as the interpolated tuple value,
96  // given the ptIndices in the source array and associated
97  // interpolation weights.
98  // This method assumes that the two arrays are of the same type
99  // and strcuture.
100  //virtual void InterpolateTuple(vtkIdType i, vtkIdList *ptIndices,
101  // vtkAbstractArray* source, double* weights);
102 
103  // Description
104  // Insert the ith tuple in this array as interpolated from the two values,
105  // p1 and p2, and an interpolation factor, t.
106  // The interpolation factor ranges from (0,1),
107  // with t=0 located at p1. This method assumes that the three arrays are of
108  // the same type. p1 is value at index id1 in source1, while, p2 is
109  // value at index id2 in source2.
110  //virtual void InterpolateTuple(vtkIdType i,
111  // vtkIdType id1, vtkAbstractArray* source1,
112  // vtkIdType id2, vtkAbstractArray* source2, double t);
113 
114  // Description:
115  // Get the data tuple at ith location. Return it as a pointer to an array.
116  // Note: this method is not thread-safe, and the pointer is only valid
117  // as long as another method invocation to a vtk object is not performed.
118  virtual double *GetTuple(vtkIdType i)
119  {
120  static std::vector<double> vec;
121  vec = std::vector<double>(this->GetNumberOfComponents());
122  GetTuple(i, &vec[0]);
123  return &vec[0];
124  }
125 
126  // Description:
127  // Get the data tuple at ith location by filling in a user-provided array,
128  // Make sure that your array is large enough to hold the NumberOfComponents
129  // amount of data being returned.
130  virtual void GetTuple(vtkIdType i, double * tuple)
131  {
132  std::vector<Real> varvec = pArray->getVector(i);
133  for (int c = 0; c < this->GetNumberOfComponents(); c++)
134  tuple[c] = varvec[c] ;
135  }
136 
137  // Description:
138  // These methods are included as convenience for the wrappers.
139  // GetTuple() and SetTuple() which return/take arrays can not be
140  // used from wrapped languages. These methods can be used instead.
141  //double GetTuple1(vtkIdType i);
142  //double* GetTuple2(vtkIdType i);
143  //double* GetTuple3(vtkIdType i);
144  //double* GetTuple4(vtkIdType i);
145  //double* GetTuple6(vtkIdType i);
146  //double* GetTuple9(vtkIdType i);
147 
148  // Description:
149  // Set the data tuple at ith location. Note that range checking or
150  // memory allocation is not performed; use this method in conjunction
151  // with SetNumberOfTuples() to allocate space.
152  virtual void SetTuple(vtkIdType i, const float * tuple) {
153  printf("SetTuple\n");
154  }
155 
156  virtual void SetTuple(vtkIdType i, const double * tuple) {
157  printf("SetTuple\n");
158  }
159  // Description:
160  // These methods are included as convenience for the wrappers.
161  // GetTuple() and SetTuple() which return/take arrays can not be
162  // used from wrapped languages. These methods can be used instead.
163 #if 0
164  void SetTuple1(vtkIdType i, double value);
165  void SetTuple2(vtkIdType i, double val0, double val1);
166  void SetTuple3(vtkIdType i, double val0, double val1, double val2);
167  void SetTuple4(vtkIdType i, double val0, double val1, double val2,
168  double val3);
169  void SetTuple6(vtkIdType i, double val0, double val1, double val2,
170  double val3, double val4, double val5);
171  void SetTuple9(vtkIdType i, double val0, double val1, double val2,
172  double val3, double val4, double val5, double val6,
173  double val7, double val8);
174 #endif
175 
176  // Description:
177  // Insert the data tuple at ith location. Note that memory allocation
178  // is performed as necessary to hold the data.
179  virtual void InsertTuple(vtkIdType i, const float * tuple) {
180  printf("InsertTuple\n");
181  }
182  virtual void InsertTuple(vtkIdType i, const double * tuple){
183  printf("InsertTuple\n");
184  }
185  // Description:
186  // These methods are included as convenience for the wrappers.
187  // InsertTuple() which takes arrays can not be
188  // used from wrapped languages. These methods can be used instead.
189 #if 0
190  void InsertTuple1(vtkIdType i, double value);
191  void InsertTuple2(vtkIdType i, double val0, double val1);
192  void InsertTuple3(vtkIdType i, double val0, double val1, double val2);
193  void InsertTuple4(vtkIdType i, double val0, double val1, double val2,
194  double val3);
195  void InsertTuple9(vtkIdType i, double val0, double val1, double val2,
196  double val3, double val4, double val5, double val6,
197  double val7, double val8);
198 #endif
199 
200  // Description:
201  // Insert the data tuple at the end of the array and return the location at
202  // which the data was inserted. Memory is allocated as necessary to hold
203  // the data.
204  virtual vtkIdType InsertNextTuple(const float * tuple) {
205  printf("InsertNextTuple\n");
206  return 0;
207  }
208  virtual vtkIdType InsertNextTuple(const double * tuple) {
209  printf("InsertNextTuple\n");
210  return 0;
211  }
212 
213  // Description:
214  // These methods are included as convenience for the wrappers.
215  // InsertTuple() which takes arrays can not be
216  // used from wrapped languages. These methods can be used instead.
217 #if 0
218  void InsertNextTuple1(double value);
219  void InsertNextTuple2(double val0, double val1);
220  void InsertNextTuple3(double val0, double val1, double val2);
221  void InsertNextTuple4(double val0, double val1, double val2,
222  double val3);
223  void InsertNextTuple9(double val0, double val1, double val2,
224  double val3, double val4, double val5, double val6,
225  double val7, double val8);
226 #endif
227 
228  // Description:
229  // These methods remove tuples from the data array. They shift data and
230  // resize array, so the data array is still valid after this operation. Note,
231  // this operation is fairly slow.
232  virtual void RemoveTuple(vtkIdType id) {
233  printf("RemoveTuple\n");
234  }
235  virtual void RemoveFirstTuple() {
236  printf("RemoveTuple\n");
237  }
238  virtual void RemoveLastTuple() {
239  printf("RemoveTuple\n");
240  }
241 
242  // Description:
243  // Return the data component at the ith tuple and jth component location.
244  // Note that i is less than NumberOfTuples and j is less than
245  // NumberOfComponents.
246  //virtual double GetComponent(vtkIdType i, int j);
247 
248  // Description:
249  // Set the data component at the ith tuple and jth component location.
250  // Note that i is less than NumberOfTuples and j is less than
251  // NumberOfComponents. Make sure enough memory has been allocated
252  // (use SetNumberOfTuples() and SetNumberOfComponents()).
253  //virtual void SetComponent(vtkIdType i, int j, double c);
254 
255  // Description:
256  // Insert the data component at ith tuple and jth component location.
257  // Note that memory allocation is performed as necessary to hold the data.
258  //virtual void InsertComponent(vtkIdType i, int j, double c);
259 
260  // Description:
261  // Get the data as a double array in the range (tupleMin,tupleMax) and
262  // (compMin, compMax). The resulting double array consists of all data in
263  // the tuple range specified and only the component range specified. This
264  // process typically requires casting the data from native form into
265  // doubleing point values. This method is provided as a convenience for data
266  // exchange, and is not very fast.
267  //virtual void GetData(vtkIdType tupleMin, vtkIdType tupleMax, int compMin,
268  // int compMax, vtkDoubleArray* data);
269 
270  // Description:
271  // Deep copy of data. Copies data from different data arrays even if
272  // they are different types (using doubleing-point exchange).
273  //virtual void DeepCopy(vtkAbstractArray *aa);
274  //virtual void DeepCopy(vtkDataArray *da);
275 
276  // Description:
277  // Fill a component of a data array with a specified value. This method
278  // sets the specified component to specified value for all tuples in the
279  // data array. This methods can be used to initialize or reinitialize a
280  // single component of a multi-component array.
281  //virtual void FillComponent(int j, double c);
282 
283  // Description:
284  // Copy a component from one data array into a component on this data array.
285  // This method copies the specified component ("fromComponent") from the
286  // specified data array ("from") to the specified component ("j") over all
287  // the tuples in this data array. This method can be used to extract
288  // a component (column) from one data array and paste that data into
289  // a component on this data array.
290  //virtual void CopyComponent(int j, vtkDataArray *from,
291  // int fromComponent);
292 
293  // Description:
294  // Get the address of a particular data index. Make sure data is allocated
295  // for the number of items requested. Set MaxId according to the number of
296  // data values requested.
297  virtual void* WriteVoidPointer(vtkIdType id, vtkIdType number) {
298  printf("WriteVoidPointer\n");
299  return NULL;
300  }
301 
302  // Description:
303  // Return the memory in kilobytes consumed by this data array. Used to
304  // support streaming and reading/writing data. The value returned is
305  // guaranteed to be greater than or equal to the memory required to
306  // actually represent the data represented by this object. The
307  // information returned is valid only after the pipeline has
308  // been updated.
309  //virtual unsigned long GetActualMemorySize();
310 
311  // Description:
312  // Create default lookup table. Generally used to create one when none
313  // is available.
314  //void CreateDefaultLookupTable();
315 
316  // Description:
317  // Set/get the lookup table associated with this scalar data, if any.
318  //void SetLookupTable(vtkLookupTable *lut);
319  //vtkGetObjectMacro(LookupTable,vtkLookupTable);
320 
321  // Description:
322  // The range of the data array values for the given component will be
323  // returned in the provided range array argument. If comp is -1, the range
324  // of the magnitude (L2 norm) over all components will be provided. The
325  // range is computed and then cached, and will not be re-computed on
326  // subsequent calls to GetRange() unless the array is modified or the
327  // requested component changes.
328  // THIS METHOD IS NOT THREAD SAFE.
329  //void GetRange(double range[2], int comp)
330 
331  // Description:
332  // Return the range of the data array values for the given component. If
333  // comp is -1, return the range of the magnitude (L2 norm) over all
334  // components.The range is computed and then cached, and will not be
335  // re-computed on subsequent calls to GetRange() unless the array is
336  // modified or the requested component changes.
337  // THIS METHOD IS NOT THREAD SAFE.
338  //double* GetRange(int comp)
339 
340  // Description:
341  // Return the range of the data array. If the array has multiple components,
342  // then this will return the range of only the first component (component
343  // zero). The range is computed and then cached, and will not be re-computed
344  // on subsequent calls to GetRange() unless the array is modified.
345  // THIS METHOD IS NOT THREAD SAFE.
346  //double* GetRange()
347 
348  // Description:
349  // The the range of the data array values will be returned in the provided
350  // range array argument. If the data array has multiple components, then
351  // this will return the range of only the first component (component zero).
352  // The range is computend and then cached, and will not be re-computed on
353  // subsequent calls to GetRange() unless the array is modified.
354  // THIS METHOD IS NOT THREAD SAFE.
355  //void GetRange(double range[2])
356 
357  // Description:
358  // These methods return the Min and Max possible range of the native
359  // data type. For example if a vtkScalars consists of unsigned char
360  // data these will return (0,255).
361 #if 0
362  void GetDataTypeRange(double range[2]);
363  double GetDataTypeMin();
364  double GetDataTypeMax();
365  static void GetDataTypeRange(int type, double range[2]);
366  static double GetDataTypeMin(int type);
367  static double GetDataTypeMax(int type);
368 #endif
369 
370  // Description:
371  // Return the maximum norm for the tuples.
372  // Note that the max. is computed every time GetMaxNorm is called.
373  //virtual double GetMaxNorm();
374 
375  // Description:
376  // Creates an array for dataType where dataType is one of
377  // VTK_BIT, VTK_CHAR, VTK_SIGNED_CHAR, VTK_UNSIGNED_CHAR, VTK_SHORT,
378  // VTK_UNSIGNED_SHORT, VTK_INT, VTK_UNSIGNED_INT, VTK_LONG,
379  // VTK_UNSIGNED_LONG, VTK_DOUBLE, VTK_DOUBLE, VTK_ID_TYPE.
380  // Note that the data array returned has be deleted by the
381  // user.
382  //static vtkDataArray* CreateDataArray(int dataType);
383 
384  // Description:
385  // This key is used to hold tight bounds on the range of
386  // one component over all tuples of the array.
387  // Two values (a minimum and maximum) are stored for each component.
388  // When GetRange() is called when no tuples are present in the array
389  // this value is set to { VTK_DOUBLE_MAX, VTK_DOUBLE_MIN }.
390  //static vtkInformationDoubleVectorKey* COMPONENT_RANGE();
391 
392  // Description:
393  // This key is used to hold tight bounds on the $L_2$ norm
394  // of tuples in the array.
395  // Two values (a minimum and maximum) are stored for each component.
396  // When GetRange() is called when no tuples are present in the array
397  // this value is set to { VTK_DOUBLE_MAX, VTK_DOUBLE_MIN }.
398  //static vtkInformationDoubleVectorKey* L2_NORM_RANGE();
399 
400  // Description:
401  // Copy information instance. Arrays use information objects
402  // in a variety of ways. It is important to have flexibility in
403  // this regard because certain keys should not be coppied, while
404  // others must be. NOTE: Up to the implmeneter to make sure that
405  // keys not inteneded to be coppied are excluded here.
406  //virtual int CopyInformation(vtkInformation *infoFrom, int deep=1);
407 
408  // Description:
409  // Method for type-checking in FastDownCast implementations.
410  //virtual int GetArrayType() { return DataArray; }
411 
412  //------------------------------------------------------------------------------
413  inline static eddaSamplingArray* FastDownCast(vtkAbstractArray *source)
414  {
415  switch (source->GetArrayType())
416  {
417  case DataArrayTemplate:
418  case TypedDataArray:
419  case DataArray:
420  case MappedDataArray:
421  return static_cast<eddaSamplingArray*>(source);
422  default:
423  return NULL;
424  }
425  }
426 protected:
427  // Description:
428  // Compute the range for a specific component. If comp is set -1
429  // then L2 norm is computed on all components. Call ClearRange
430  // to force a recomputation if it is needed. The range is copied
431  // to the range argument.
432  // THIS METHOD IS NOT THREAD SAFE.
433  //virtual void ComputeRange(double range[2], int comp);
434 
435  // Description:
436  // Computes the range for each component of an array, the length
437  // of \a ranges must be two times the number of components.
438  // Returns true if the range was computed. Will return false
439  // if you try to compute the range of an array of length zero.
440  //virtual bool ComputeScalarRange(double* ranges);
441 
442  // Returns true if the range was computed. Will return false
443  // if you try to compute the range of an array of length zero.
444  //virtual bool ComputeVectorRange(double range[2]);
445 
446  // Construct object with default tuple dimension (number of components) of 1.
448  pArray = NULL;
449  }
450 
452  if (pArray)
453  delete pArray;
454  }
455 
456 
457 public : // vtkAbstractArray
458 
459  // Description:
460  // Release storage and reset array to initial state.
461  virtual void Initialize() {
462  if (pArray)
463  delete pArray ;
464  pArray = NULL;
465  }
466 
467  virtual int GetDataType() {
468  return VTK_DOUBLE;
469  }
470 
471  virtual int GetDataTypeSize() {
472  return static_cast<int>(sizeof(double));
473  }
474 
475  virtual void SetNumberOfTuples(vtkIdType number) {
476  this->Size = number * this->GetNumberOfComponents(); // allocated size of data
477  this->MaxId = number; // maximum index inserted thus far
478  }
479 
480  virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds,
481  vtkAbstractArray* source) {
482  printf("InsertTuples\n");
483  }
484 
485  virtual void *GetVoidPointer(vtkIdType id) {
486  static std::vector<double> data; // array data type simulates double
487  bool refill = false;
488  if (data.size() != this->GetDataSize()) {
489  data.resize(this->GetDataSize());
490  refill = true;
491  } else {
492  refill = (rand() % 10 == 0);
493  }
494 
495  if (refill) {
496  //printf("Refilling random array (id=%d)\n", (int)id);
497  for (int i=0; i<this->GetNumberOfTuples(); i++)
498  {
499  this->GetTuple(i, &data[i*this->GetNumberOfComponents()]);
500  }
501  }
502  return &data[id*this->GetNumberOfComponents()];
503  }
504 
505  virtual void Squeeze() {
506  printf("Squeeze");
507  }
508 
509  virtual int Resize(vtkIdType numTuples) {
510  return 0;
511  }
512  virtual void SetVoidArray(void *vtkNotUsed(array),
513  vtkIdType vtkNotUsed(size),
514  int vtkNotUsed(save)) {
515 
516  }
517  virtual vtkArrayIterator* NewIterator() {
518  printf("vtkArrayIterator\n");
519  return NULL;
520  }
521 
522  // Return the indices where a specific value appears.
523  virtual vtkIdType LookupValue(vtkVariant value) {return 0;}
524  virtual void LookupValue(vtkVariant value, vtkIdList* ids) {}
525 
526  virtual void SetVariantValue(vtkIdType idx, vtkVariant value) {}
527 
528  virtual void DataChanged() {}
529  virtual void ClearLookup() {}
530  virtual int Allocate(vtkIdType sz, vtkIdType ext=1000) {
531  printf("Allocate\n");
532  return 0;
533  }
534  virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart,
535  vtkAbstractArray* source) {}
536 
537  virtual void InsertVariantValue(vtkIdType idx, vtkVariant value) {}
538 
539 
540 private:
541  eddaSamplingArray(const eddaSamplingArray& a); // Not implemented.
542  void operator=(const eddaSamplingArray& a); // Not implemented.
543 };
544 
545 
546 #endif //eddaSamplingArray_h
virtual void RemoveFirstTuple()
Definition: eddaSamplingArray.h:235
+
virtual void RemoveLastTuple()
Definition: eddaSamplingArray.h:238
+
virtual void Initialize()
Definition: eddaSamplingArray.h:461
+
virtual void Squeeze()
Definition: eddaSamplingArray.h:505
+
static eddaSamplingArray * FastDownCast(vtkAbstractArray *source)
Definition: eddaSamplingArray.h:413
+
virtual int Allocate(vtkIdType sz, vtkIdType ext=1000)
Definition: eddaSamplingArray.h:530
+
virtual void ClearLookup()
Definition: eddaSamplingArray.h:529
+
Experimental functionality.
Definition: distributionModeler.h:26
+
The class interface of distrbution arrays used by the Dataset class.
Definition: distr_array.h:24
+
virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:34
+
virtual vtkIdType LookupValue(vtkVariant value)
Definition: eddaSamplingArray.h:523
+
virtual void LookupValue(vtkVariant value, vtkIdList *ids)
Definition: eddaSamplingArray.h:524
+
virtual void SetTuple(vtkIdType i, const double *tuple)
Definition: eddaSamplingArray.h:156
+
virtual std::vector< Real > getVector(size_t idx)=0
+
virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:480
+
virtual void InsertVariantValue(vtkIdType idx, vtkVariant value)
Definition: eddaSamplingArray.h:537
+
virtual void SetTuple(vtkIdType i, const float *tuple)
Definition: eddaSamplingArray.h:152
+
virtual int GetDataType()
Definition: eddaSamplingArray.h:467
+
virtual void SetVoidArray(void *vtkNotUsed(array), vtkIdType vtkNotUsed(size), int vtkNotUsed(save))
Definition: eddaSamplingArray.h:512
+
virtual int getNumComponents()=0
+
virtual void DataChanged()
Definition: eddaSamplingArray.h:528
+
void GetTuples(vtkIdList *ptIds, vtkAbstractArray *aa)
Definition: eddaSamplingArray.h:65
+
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:55
+
virtual void InsertTuple(vtkIdType i, const double *tuple)
Definition: eddaSamplingArray.h:182
+
virtual size_t getLength()=0
+
virtual void SetVariantValue(vtkIdType idx, vtkVariant value)
Definition: eddaSamplingArray.h:526
+
virtual int Resize(vtkIdType numTuples)
Definition: eddaSamplingArray.h:509
+
virtual vtkIdType InsertNextTuple(const float *tuple)
Definition: eddaSamplingArray.h:204
+
void SetEddaArray(edda::DistrArray *array)
Definition: eddaSamplingArray.h:23
+ +
virtual void SetNumberOfTuples(vtkIdType number)
Definition: eddaSamplingArray.h:475
+
eddaSamplingArray()
Definition: eddaSamplingArray.h:447
+
The eddaSamplingArray class is a vtkDataArray that returns a random sample from the distribution arra...
Definition: eddaSamplingArray.h:16
+
virtual void GetTuple(vtkIdType i, double *tuple)
Definition: eddaSamplingArray.h:130
+
virtual void * GetVoidPointer(vtkIdType id)
Definition: eddaSamplingArray.h:485
+
virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:44
+
virtual void * WriteVoidPointer(vtkIdType id, vtkIdType number)
Definition: eddaSamplingArray.h:297
+
~eddaSamplingArray()
Definition: eddaSamplingArray.h:451
+
virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)
Definition: eddaSamplingArray.h:534
+
virtual void InsertTuple(vtkIdType i, const float *tuple)
Definition: eddaSamplingArray.h:179
-
virtual double * GetTuple(vtkIdType i)
Definition: eddaSamplingArray.h:119
-
virtual void RemoveTuple(vtkIdType id)
Definition: eddaSamplingArray.h:233
-
Take a distribution data array and output a sample.
Definition: abstract_sampling_array.h:19
-
virtual vtkArrayIterator * NewIterator()
Definition: eddaSamplingArray.h:518
-
virtual int GetDataTypeSize()
Definition: eddaSamplingArray.h:472
-
virtual int getNumComponents()=0
-
virtual vtkIdType InsertNextTuple(const double *tuple)
Definition: eddaSamplingArray.h:209
+
virtual double * GetTuple(vtkIdType i)
Definition: eddaSamplingArray.h:118
+
virtual void RemoveTuple(vtkIdType id)
Definition: eddaSamplingArray.h:232
+
virtual vtkArrayIterator * NewIterator()
Definition: eddaSamplingArray.h:517
+
virtual int GetDataTypeSize()
Definition: eddaSamplingArray.h:471
+
virtual vtkIdType InsertNextTuple(const double *tuple)
Definition: eddaSamplingArray.h:208
diff --git a/html/eddaThreshold_8cpp.html b/html/eddaThreshold_8cpp.html index 5099c58..3346c24 100644 --- a/html/eddaThreshold_8cpp.html +++ b/html/eddaThreshold_8cpp.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaThreshold.cpp File Reference + + +EDDA: vis/src/vtk/eddaThreshold.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,17 +68,18 @@
eddaThreshold.cpp File Reference
-
#include <math.h>
-#include "vtkDataSet.h"
-#include "vtkUnstructuredGrid.h"
-#include "vtkStreamingDemandDrivenPipeline.h"
-#include "vtkImageData.h"
-#include "vtkStructuredGrid.h"
-#include "vtkInformation.h"
-#include "vtkInformationVector.h"
-#include "vtkObjectFactory.h"
-#include "gmm_vtk_data_array.h"
-#include "eddaThreshold.h"
+
#include <math.h>
+#include "vtkDataSet.h"
+#include "vtkUnstructuredGrid.h"
+#include "vtkStreamingDemandDrivenPipeline.h"
+#include "vtkImageData.h"
+#include "vtkStructuredGrid.h"
+#include "vtkInformation.h"
+#include "vtkInformationVector.h"
+#include "vtkObjectFactory.h"
+#include "vtk_common.h"
+#include "io/gmm_vtk_data_array.h"
+#include "eddaThreshold.h"
@@ -110,7 +87,9 @@

Functions

 

Function Documentation

- + +

§ vtkStandardNewMacro()

+
@@ -129,9 +108,9 @@

Function Documentation

diff --git a/html/eddaThreshold_8h.html b/html/eddaThreshold_8h.html index 39ed99e..498af95 100644 --- a/html/eddaThreshold_8h.html +++ b/html/eddaThreshold_8h.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaThreshold.h File Reference + + +EDDA: vis/src/vtk/eddaThreshold.h File Reference + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,7 +68,7 @@
eddaThreshold.h File Reference
-
#include "vtkDataSetAlgorithm.h"
+
#include "vtkDataSetAlgorithm.h"

Go to the source code of this file.

@@ -104,9 +80,9 @@ diff --git a/html/eddaThreshold_8h_source.html b/html/eddaThreshold_8h_source.html index 14f7501..db3f03c 100644 --- a/html/eddaThreshold_8h_source.html +++ b/html/eddaThreshold_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaThreshold.h Source File + + +EDDA: vis/src/vtk/eddaThreshold.h Source File + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -90,88 +66,26 @@
eddaThreshold.h
-Go to the documentation of this file.
1 #ifndef eddaThreshold_h
-
2 #define eddaThreshold_h
-
3 
-
4 #include "vtkDataSetAlgorithm.h"
-
5 
-
6 class vtkDataArray;
-
7 class vtkIdList;
-
8 
-
9 class eddaThreshold : public vtkDataSetAlgorithm
-
10 {
-
11 public:
-
12  static eddaThreshold *New();
-
13  vtkTypeMacro(eddaThreshold,vtkDataSetAlgorithm)
-
14  void PrintSelf(ostream& os, vtkIndent indent);
-
15 
-
16  // Description:
-
17  // Criterion is cells whose scalars are less or equal to lower threshold.
-
18  void ThresholdByLower(double lower) {
-
19  this->LowerThreshold = lower;
-
20  this->Modified();
-
21  }
-
22 
-
23  // Description:
-
24  // Criterion is cells whose scalars are greater or equal to upper threshold.
-
25  void ThresholdByUpper(double upper) {
-
26  this->UpperThreshold = upper;
-
27  this->Modified();
-
28  }
-
29 
-
30  // Description:
-
31  // Criterion is cells whose scalars are between lower and upper thresholds
-
32  // (inclusive of the end values).
-
33  void ThresholdBetween(double lower, double upper) {
-
34  this->LowerThreshold = lower;
-
35  this->UpperThreshold = upper;
-
36  this->Modified();
-
37  }
-
38 
-
39  // Description:
-
40  // Get the Upper and Lower thresholds.
- -
42  vtkSetMacro(UpperThreshold,double)
-
43 
- -
45  vtkSetMacro(LowerThreshold,double)
-
46 
-
47 protected:
-
48  eddaThreshold();
-
49  ~eddaThreshold();
-
50 
-
51  // Usual data generation method
-
52  virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) ;
-
53 
-
54  virtual int FillInputPortInformation(int port, vtkInformation *info) ;
-
55 
-
56  double LowerThreshold;
-
57  double UpperThreshold;
-
58 
-
59 private:
-
60  eddaThreshold(const eddaThreshold&); // Not implemented.
-
61  void operator=(const eddaThreshold&); // Not implemented.
-
62 };
-
63 
-
64 #endif // eddaThreshold_h
-
void ThresholdByLower(double lower)
Definition: eddaThreshold.h:18
+Go to the documentation of this file.
1 #ifndef eddaThreshold_h
2 #define eddaThreshold_h
3 
4 #include "vtkDataSetAlgorithm.h"
5 
6 class vtkDataArray;
7 class vtkIdList;
8 
9 class eddaThreshold : public vtkDataSetAlgorithm
10 {
11 public:
12  static eddaThreshold *New();
13  vtkTypeMacro(eddaThreshold,vtkDataSetAlgorithm)
14  void PrintSelf(ostream& os, vtkIndent indent);
15 
16  // Description:
17  // Criterion is cells whose scalars are less or equal to lower threshold.
18  void ThresholdByLower(double lower) {
19  this->LowerThreshold = lower;
20  this->Modified();
21  }
22 
23  // Description:
24  // Criterion is cells whose scalars are greater or equal to upper threshold.
25  void ThresholdByUpper(double upper) {
26  this->UpperThreshold = upper;
27  this->Modified();
28  }
29 
30  // Description:
31  // Criterion is cells whose scalars are between lower and upper thresholds
32  // (inclusive of the end values).
33  void ThresholdBetween(double lower, double upper) {
34  this->LowerThreshold = lower;
35  this->UpperThreshold = upper;
36  this->Modified();
37  }
38 
39  // Description:
40  // Get the Upper and Lower thresholds.
42  vtkSetMacro(UpperThreshold,double)
43 
45  vtkSetMacro(LowerThreshold,double)
46 
47 protected:
48  eddaThreshold();
50 
51  // Usual data generation method
52  virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) ;
53 
54  virtual int FillInputPortInformation(int port, vtkInformation *info) ;
55 
58 
59 private:
60  eddaThreshold(const eddaThreshold&); // Not implemented.
61  void operator=(const eddaThreshold&); // Not implemented.
62 };
63 
64 #endif // eddaThreshold_h
void ThresholdByLower(double lower)
Definition: eddaThreshold.h:18
void ThresholdBetween(double lower, double upper)
Definition: eddaThreshold.h:33
double UpperThreshold
Definition: eddaThreshold.h:57
vtkIndent indent
Definition: eddaThreshold.h:14
vtkTypeMacro(eddaThreshold, vtkDataSetAlgorithm) void PrintSelf(ostream &os
-
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaThreshold.cpp:34
+
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaThreshold.cpp:35
+
~eddaThreshold()
Definition: eddaThreshold.cpp:28
Definition: eddaThreshold.h:9
+
void ThresholdByUpper(double upper)
Definition: eddaThreshold.h:25
vtkGetMacro(UpperThreshold, double) vtkSetMacro(UpperThreshold
double LowerThreshold
Definition: eddaThreshold.h:56
-
virtual int FillInputPortInformation(int port, vtkInformation *info)
Definition: eddaThreshold.cpp:82
+
virtual int FillInputPortInformation(int port, vtkInformation *info)
Definition: eddaThreshold.cpp:83
static eddaThreshold * New()
diff --git a/html/eddaUncertainIsocontour_8cpp.html b/html/eddaUncertainIsocontour_8cpp.html index 6921077..3ba7827 100644 --- a/html/eddaUncertainIsocontour_8cpp.html +++ b/html/eddaUncertainIsocontour_8cpp.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaUncertainIsocontour.cpp File Reference + + +EDDA: vis/src/vtk/eddaUncertainIsocontour.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,23 +68,23 @@
eddaUncertainIsocontour.cpp File Reference
-
#include <iostream>
-#include <cstring>
-#include "eddaUncertainIsocontour.h"
-#include "vtk_common.h"
-#include "vtkCell.h"
-#include "vtkCellData.h"
-#include "vtkCharArray.h"
-#include "vtkIdTypeArray.h"
-#include "vtkImageData.h"
-#include "vtkInformation.h"
-#include "vtkInformationVector.h"
-#include "vtkMath.h"
-#include "vtkObjectFactory.h"
-#include "vtkPointData.h"
-#include "vtkStreamingDemandDrivenPipeline.h"
-#include "gmm_vtk_data_array.h"
-#include "thrust/device_vector.h"
+
#include <iostream>
+#include <cstring>
+#include "eddaUncertainIsocontour.h"
+#include "vtk_common.h"
+#include "vtkCell.h"
+#include "vtkCellData.h"
+#include "vtkCharArray.h"
+#include "vtkIdTypeArray.h"
+#include "vtkImageData.h"
+#include "vtkInformation.h"
+#include "vtkInformationVector.h"
+#include "vtkMath.h"
+#include "vtkObjectFactory.h"
+#include "vtkPointData.h"
+#include "vtkStreamingDemandDrivenPipeline.h"
+#include "io/gmm_vtk_data_array.h"
+#include "thrust/device_vector.h"
@@ -116,7 +92,9 @@

Functions

 

Function Documentation

- + +

§ vtkStandardNewMacro()

+
@@ -135,9 +113,9 @@

Function Documentation

diff --git a/html/eddaUncertainIsocontour_8h.html b/html/eddaUncertainIsocontour_8h.html index ea5d21b..b4b4436 100644 --- a/html/eddaUncertainIsocontour_8h.html +++ b/html/eddaUncertainIsocontour_8h.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaUncertainIsocontour.h File Reference + + +EDDA: vis/src/vtk/eddaUncertainIsocontour.h File Reference + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -92,9 +68,9 @@
eddaUncertainIsocontour.h File Reference
-
#include "vtkFiltersCoreModule.h"
-#include "vtkDataSetAlgorithm.h"
-#include "vtkDataSetAttributes.h"
+
#include "vtkFiltersCoreModule.h"
+#include "vtkDataSetAlgorithm.h"
+#include "vtkDataSetAttributes.h"

Go to the source code of this file.

@@ -106,9 +82,9 @@ diff --git a/html/eddaUncertainIsocontour_8h_source.html b/html/eddaUncertainIsocontour_8h_source.html index b19609f..18eb545 100644 --- a/html/eddaUncertainIsocontour_8h_source.html +++ b/html/eddaUncertainIsocontour_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/eddaUncertainIsocontour.h Source File + + +EDDA: vis/src/vtk/eddaUncertainIsocontour.h Source File + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -82,7 +58,7 @@
@@ -90,61 +66,23 @@
eddaUncertainIsocontour.h
-Go to the documentation of this file.
1 #ifndef eddaUncertainIsocontour_h
-
2 #define eddaUncertainIsocontour_h
-
3 
-
4 #include "vtkFiltersCoreModule.h" // For export macro
-
5 #include "vtkDataSetAlgorithm.h"
-
6 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
-
7 
-
8 class vtkIdTypeArray;
-
9 class vtkCharArray;
-
10 class vtkMaskPoints;
-
11 
-
12 class VTKFILTERSCORE_EXPORT eddaUncertainIsocontour : public vtkDataSetAlgorithm
-
13 {
-
14 public:
-
15  static eddaUncertainIsocontour *New();
-
16  vtkTypeMacro(eddaUncertainIsocontour,vtkDataSetAlgorithm)
-
17  void PrintSelf(ostream& os, vtkIndent indent);
-
18 
-
22  vtkGetMacro(Isov, double)
-
23 
-
27  vtkSetMacro(Isov, double)
-
28 
-
29 protected:
-
30  double Isov;
-
31 
- - -
34 
-
35  virtual int RequestData(vtkInformation *, vtkInformationVector **,
-
36  vtkInformationVector *);
-
37  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
-
38  vtkInformationVector *);
-
39  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
-
40  vtkInformationVector *);
-
41 
-
42  virtual void InitializeData(vtkDataSet* input,
-
43  vtkDataSet* output);
-
44 
-
45  virtual void Compute(vtkDataSet* input, int *dim,
-
46  vtkDataSet* output);
-
47 
-
48 private:
-
49  eddaUncertainIsocontour(const eddaUncertainIsocontour&); // Not implemented.
-
50  void operator=(const eddaUncertainIsocontour&); // Not implemented.
-
51 
-
52 };
-
53 
-
54 #endif // eddaUncertainIsocontour_h
+Go to the documentation of this file.
1 #ifndef eddaUncertainIsocontour_h
2 #define eddaUncertainIsocontour_h
3 
4 #include "vtkFiltersCoreModule.h" // For export macro
5 #include "vtkDataSetAlgorithm.h"
6 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
7 
8 class vtkIdTypeArray;
9 class vtkCharArray;
10 class vtkMaskPoints;
11 
12 class eddaUncertainIsocontour : public vtkDataSetAlgorithm
13 {
14 public:
15  static eddaUncertainIsocontour *New();
16  vtkTypeMacro(eddaUncertainIsocontour,vtkDataSetAlgorithm)
17  void PrintSelf(ostream& os, vtkIndent indent);
18 
22  vtkGetMacro(Isov, double)
23 
27  vtkSetMacro(Isov, double)
28 
29 protected:
30  double Isov;
31 
34 
35  virtual int RequestData(vtkInformation *, vtkInformationVector **,
36  vtkInformationVector *);
37  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
38  vtkInformationVector *);
39  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
40  vtkInformationVector *);
41 
42  virtual void InitializeData(vtkDataSet* input,
43  vtkDataSet* output);
44 
45  virtual void Compute(vtkDataSet* input, int *dim,
46  vtkDataSet* output);
47 
48 private:
49  eddaUncertainIsocontour(const eddaUncertainIsocontour&); // Not implemented.
50  void operator=(const eddaUncertainIsocontour&); // Not implemented.
51 
52 };
53 
54 #endif // eddaUncertainIsocontour_h
vtkIndent indent
Definition: eddaUncertainIsocontour.h:17
+
double Isov
Definition: eddaUncertainIsocontour.h:30
+
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaUncertainIsocontour.cpp:93
+
static eddaUncertainIsocontour * New()
+
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaUncertainIsocontour.cpp:110
Definition: eddaUncertainIsocontour.h:12
+
virtual void Compute(vtkDataSet *input, int *dim, vtkDataSet *output)
+
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Definition: eddaUncertainIsocontour.cpp:55
+
virtual void InitializeData(vtkDataSet *input, vtkDataSet *output)
Definition: eddaUncertainIsocontour.cpp:47
+
vtkTypeMacro(eddaUncertainIsocontour, vtkDataSetAlgorithm) void PrintSelf(ostream &os
+
vtkGetMacro(Isov, double) vtkSetMacro(Isov
Get isovalue.
diff --git a/html/edda_8h.html b/html/edda_8h.html index 1b44801..79317bb 100644 --- a/html/edda_8h.html +++ b/html/edda_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/edda.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -92,24 +68,23 @@
edda.h File Reference
- +

Go to the source code of this file.

- - + +

Macros

#define OS_MACOSX
 
#define OS_LINUX
 

Macro Definition Documentation

- + +

§ OS_LINUX

+
- +
#define OS_MACOSX#define OS_LINUX
@@ -119,9 +94,9 @@

Macro Definition Documentation

diff --git a/html/edda_8h_source.html b/html/edda_8h_source.html index 90c9e32..569496e 100644 --- a/html/edda_8h_source.html +++ b/html/edda_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/edda.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -90,32 +66,12 @@
edda.h
-Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
-
2 // Use of this source code is governed by a MIT-style license that can be
-
3 // found in the LICENSE file.
-
4 
-
5 #ifndef EDDA_H_
-
6 #define EDDA_H_
-
7 
-
8 // A set of macros used for platform detection.
-
9 /* #undef OS_LINUX */
-
10 #define OS_MACOSX
-
11 /* #undef OS_WIN */
-
12 
-
13 #include "common.h"
- - -
16 
-
17 #endif // EDDA_H_
- - - -
+Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
2 // Use of this source code is governed by a MIT-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef EDDA_H_
6 #define EDDA_H_
7 
8 // A set of macros used for platform detection.
9 #define OS_LINUX
10 /* #undef OS_MACOSX */
11 /* #undef OS_WIN */
12 
13 #endif // EDDA_H_
diff --git a/html/edda__export_8h.html b/html/edda__export_8h.html index cb80fb9..4760f98 100644 --- a/html/edda__export_8h.html +++ b/html/edda__export_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/edda_export.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -92,7 +68,8 @@
edda_export.h File Reference
- +
#include "edda.h"
+

Go to the source code of this file.

@@ -101,7 +78,9 @@

 

Macro Definition Documentation

- + +

§ EDDA_EXPORT

+
@@ -116,9 +95,9 @@

Macro Definition Documentation

diff --git a/html/edda__export_8h_source.html b/html/edda__export_8h_source.html index 0df28e1..8a91b9b 100644 --- a/html/edda__export_8h_source.html +++ b/html/edda__export_8h_source.html @@ -3,16 +3,15 @@ - + +EDDA: src/edda_export.h Source File + - @@ -21,7 +20,7 @@
- @@ -30,48 +29,25 @@
+
EDDA
- + - - + + + + +
@@ -90,32 +66,13 @@
edda_export.h
-Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
-
2 // Use of this source code is governed by a MIT-style license that can be
-
3 // found in the LICENSE file.
-
4 
-
5 #ifndef EDDA_EXPORT_H_
-
6 #define EDDA_EXPORT_H_
-
7 
-
8 //#include "edda.h"
-
9 
-
10 // Defines EDDA_EXPORT so that functionality implemented by
-
11 // the edda library can be exported to consumers.
-
12 
-
13 #if defined(OS_WIN)
-
14 #define EDDA_EXPORT __declspec(dllexport)
-
15 
-
16 #else // defined(OS_WIN)
-
17 #define EDDA_EXPORT __attribute__((visibility("default")))
-
18 #endif
-
19 
-
20 #endif // EDDA_EXPORT_H_
+Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
2 // Use of this source code is governed by a MIT-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef EDDA_EXPORT_H_
6 #define EDDA_EXPORT_H_
7 
8 #include "edda.h"
9 
10 // Defines EDDA_EXPORT so that functionality implemented by
11 // the edda library can be exported to consumers.
12 
13 #if defined(OS_WIN)
14 #define EDDA_EXPORT __declspec(dllexport)
15 
16 #else // defined(OS_WIN)
17 #define EDDA_EXPORT __attribute__((visibility("default")))
18 #endif
19 
20 #endif // EDDA_EXPORT_H_
diff --git a/html/edda__reader_8cpp.html b/html/edda__reader_8cpp.html new file mode 100644 index 0000000..f7dc5af --- /dev/null +++ b/html/edda__reader_8cpp.html @@ -0,0 +1,116 @@ + + + + + + + +EDDA: src/io/edda_reader.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_reader.cpp File Reference
+
+
+
#include <memory>
+#include <vtkDataSet.h>
+#include <vtkXMLImageDataReader.h>
+#include <vtkXMLStructuredGridReader.h>
+#include <vtkImageData.h>
+#include <vtkNew.h>
+#include <vtkFieldData.h>
+#include <vtkStringArray.h>
+#include <vtkStdString.h>
+#include <vtkPoints.h>
+#include "io/path.h"
+#include "io/gmm_vtk_data_array.h"
+#include "io/edda_reader.h"
+#include "dataset/distr_array.h"
+#include "distributions/histogram.h"
+
+ + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + + + + + + + + +

+Functions

DistrArrayedda::readGMMArray (ifstream &myfile, int n)
 
DistrArrayedda::readHistoArray (ifstream &myfile, int n)
 
template<typename T >
shared_ptr< Dataset< T > > edda::loadEddaDatasetTemplate (const string &edda_file)
 
shared_ptr< Dataset< Real > > edda::loadEddaScalarDataset_noneVTK (const string &edda_file)
 
shared_ptr< Dataset< VECTOR3 > > edda::loadEddaVector3Dataset_noneVTK (const string &edda_file)
 
+
+ + + + diff --git a/html/edda__reader_8h.html b/html/edda__reader_8h.html new file mode 100644 index 0000000..88b5f40 --- /dev/null +++ b/html/edda__reader_8h.html @@ -0,0 +1,99 @@ + + + + + + + +EDDA: src/io/edda_reader.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_reader.h File Reference
+
+
+
#include <string>
+#include "edda_export.h"
+#include "dataset/dataset.h"
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + +

+Functions

std::shared_ptr< Dataset< Real > > EDDA_EXPORT edda::loadEddaScalarDataset_noneVTK (const std::string &edda_file)
 
std::shared_ptr< Dataset< VECTOR3 > > EDDA_EXPORT edda::loadEddaVector3Dataset_noneVTK (const std::string &edda_file)
 
+
+ + + + diff --git a/html/edda__reader_8h_source.html b/html/edda__reader_8h_source.html new file mode 100644 index 0000000..b9f1a4d --- /dev/null +++ b/html/edda__reader_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +EDDA: src/io/edda_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
edda_reader.h
+
+
+Go to the documentation of this file.
1 #ifndef EDDA_READER
2 #define EDDA_READER
3 
4 #include <string>
5 #include "edda_export.h"
6 #include "dataset/dataset.h"
7 
8 namespace edda{
9  std::shared_ptr<Dataset<Real> > EDDA_EXPORT loadEddaScalarDataset_noneVTK(const std::string &edda_file);
10  std::shared_ptr<Dataset<VECTOR3> > EDDA_EXPORT loadEddaVector3Dataset_noneVTK(const std::string &edda_file);
11 }
12 
13 #endif
Experimental functionality.
Definition: distributionModeler.h:26
+ +
shared_ptr< Dataset< Real > > loadEddaScalarDataset_noneVTK(const string &edda_file)
Definition: edda_reader.cpp:332
+
#define EDDA_EXPORT
Definition: edda_export.h:17
+
shared_ptr< Dataset< VECTOR3 > > loadEddaVector3Dataset_noneVTK(const string &edda_file)
Definition: edda_reader.cpp:337
+ +
+ + + + diff --git a/html/edda__vtk__reader_8cpp.html b/html/edda__vtk__reader_8cpp.html new file mode 100644 index 0000000..d4ecd9e --- /dev/null +++ b/html/edda__vtk__reader_8cpp.html @@ -0,0 +1,116 @@ + + + + + + + +EDDA: src/io/edda_vtk_reader.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_vtk_reader.cpp File Reference
+
+
+
#include <memory>
+#include <vtkDataSet.h>
+#include <vtkXMLImageDataReader.h>
+#include <vtkXMLStructuredGridReader.h>
+#include <vtkImageData.h>
+#include <vtkNew.h>
+#include <vtkFieldData.h>
+#include <vtkStringArray.h>
+#include <vtkStdString.h>
+#include <vtkPoints.h>
+#include "io/path.h"
+#include "io/gmm_vtk_data_array.h"
+#include "io/edda_vtk_reader.h"
+#include "dataset/distr_array.h"
+#include "distributions/histogram.h"
+
+ + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + + + + + + + + +

+Functions

string edda::getDistrType (vtkFieldData *vtk_data, const string &array_name_prefix)
 
DistrArrayedda::genHistoArray (vtkPointData *vtk_point_data)
 
template<typename T >
shared_ptr< Dataset< T > > edda::loadEddaDataset (const string &edda_file, const string &array_name_prefix)
 
shared_ptr< Dataset< Real > > edda::loadEddaScalarDataset (const string &edda_file, const string &array_name_prefix)
 
shared_ptr< Dataset< VECTOR3 > > edda::loadEddaVector3Dataset (const string &edda_file, const string &array_name_prefix)
 
+
+ + + + diff --git a/html/edda__vtk__reader_8h.html b/html/edda__vtk__reader_8h.html new file mode 100644 index 0000000..7b3c11e --- /dev/null +++ b/html/edda__vtk__reader_8h.html @@ -0,0 +1,99 @@ + + + + + + + +EDDA: src/io/edda_vtk_reader.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_vtk_reader.h File Reference
+
+
+
#include <string>
+#include "edda_export.h"
+#include "dataset/dataset.h"
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + +

+Functions

std::shared_ptr< Dataset< Real > > EDDA_EXPORT edda::loadEddaScalarDataset (const std::string &edda_file, const std::string &array_name_prefix="")
 
std::shared_ptr< Dataset< VECTOR3 > > EDDA_EXPORT edda::loadEddaVector3Dataset (const std::string &edda_file, const std::string &array_name_prefix="")
 
+
+ + + + diff --git a/html/edda__vtk__reader_8h_source.html b/html/edda__vtk__reader_8h_source.html new file mode 100644 index 0000000..21c257a --- /dev/null +++ b/html/edda__vtk__reader_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +EDDA: src/io/edda_vtk_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
edda_vtk_reader.h
+
+
+Go to the documentation of this file.
1 #ifndef EDDA_VTK_READER
2 #define EDDA_VTK_READER
3 
4 #include <string>
5 #include "edda_export.h"
6 #include "dataset/dataset.h"
7 
8 namespace edda{
9 
10 
11  std::shared_ptr<Dataset<Real> > EDDA_EXPORT loadEddaScalarDataset(const std::string &edda_file, const std::string &array_name_prefix = "");
12  std::shared_ptr<Dataset<VECTOR3> > EDDA_EXPORT loadEddaVector3Dataset(const std::string &edda_file, const std::string &array_name_prefix = "");
13 
14 }
15 
16 #endif
shared_ptr< Dataset< VECTOR3 > > loadEddaVector3Dataset(const string &edda_file, const string &array_name_prefix)
Definition: edda_vtk_reader.cpp:143
+
Experimental functionality.
Definition: distributionModeler.h:26
+
shared_ptr< Dataset< Real > > loadEddaScalarDataset(const string &edda_file, const string &array_name_prefix)
Definition: edda_vtk_reader.cpp:138
+ +
#define EDDA_EXPORT
Definition: edda_export.h:17
+ +
+ + + + diff --git a/html/edda__vtk__writer_8cpp.html b/html/edda__vtk__writer_8cpp.html new file mode 100644 index 0000000..61da1ea --- /dev/null +++ b/html/edda__vtk__writer_8cpp.html @@ -0,0 +1,110 @@ + + + + + + + +EDDA: src/io/edda_vtk_writer.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_vtk_writer.cpp File Reference
+
+
+
#include <vtkImageData.h>
+#include <vtkXMLImageDataWriter.h>
+#include <vtkSmartPointer.h>
+#include <vtkPointData.h>
+#include <vtkFloatArray.h>
+#include <vtkStringArray.h>
+#include <vtkFieldData.h>
+#include "distributions/gaussian_mixture.h"
+#include "distributions/histogram.h"
+#include "edda_vtk_writer.h"
+
+ + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + + + + + + + +

+Functions

const dist::GMMTuple edda::getGmmModels_archival (dist::Variant &distr, int GMs, int model)
 
void edda::addVtkGmmArrays (vtkPointData *vtk_point_data, DistrArray *array, const string &array_name, int GMs)
 
void edda::addVtkHistoArrays (vtkPointData *vtk_point_data, DistrArray *array, const string &array_name)
 
void edda::setDistrType (vtkFieldData *vtk_data, string distrName, const string &array_name_prefix)
 
void edda::writeEddaVtkDataset (shared_ptr< Dataset< Real > > dataset, const string &edda_file, const string &array_name_prefix)
 
+
+ + + + diff --git a/html/edda__vtk__writer_8h.html b/html/edda__vtk__writer_8h.html new file mode 100644 index 0000000..287af65 --- /dev/null +++ b/html/edda__vtk__writer_8h.html @@ -0,0 +1,97 @@ + + + + + + + +EDDA: src/io/edda_vtk_writer.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_vtk_writer.h File Reference
+
+
+
#include <string>
+#include "edda_export.h"
+#include "dataset/dataset.h"
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + +

+Functions

void EDDA_EXPORT edda::writeEddaVtkDataset (std::shared_ptr< Dataset< Real > >, const std::string &edda_file, const std::string &array_name_prefix="")
 
+
+ + + + diff --git a/html/edda__vtk__writer_8h_source.html b/html/edda__vtk__writer_8h_source.html new file mode 100644 index 0000000..e46c192 --- /dev/null +++ b/html/edda__vtk__writer_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +EDDA: src/io/edda_vtk_writer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
edda_vtk_writer.h
+
+
+Go to the documentation of this file.
1 #ifndef EDDA_VTK_WRITER
2 #define EDDA_VTK_WRITER
3 
4 #include <string>
5 #include "edda_export.h"
6 #include "dataset/dataset.h"
7 
8 namespace edda{
9 
10  void EDDA_EXPORT writeEddaVtkDataset(std::shared_ptr<Dataset<Real> > , const std::string &edda_file, const std::string &array_name_prefix = "");
11 
12 }
13 
14 #endif
Experimental functionality.
Definition: distributionModeler.h:26
+ +
void writeEddaVtkDataset(shared_ptr< Dataset< Real > > dataset, const string &edda_file, const string &array_name_prefix)
Definition: edda_vtk_writer.cpp:140
+
#define EDDA_EXPORT
Definition: edda_export.h:17
+ +
+ + + + diff --git a/html/edda__writer_8cpp.html b/html/edda__writer_8cpp.html new file mode 100644 index 0000000..5e0f6ba --- /dev/null +++ b/html/edda__writer_8cpp.html @@ -0,0 +1,113 @@ + + + + + + + +EDDA: src/io/edda_writer.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_writer.cpp File Reference
+
+
+
#include <vtkImageData.h>
+#include <vtkXMLImageDataWriter.h>
+#include <vtkSmartPointer.h>
+#include <vtkPointData.h>
+#include <vtkFloatArray.h>
+#include <vtkStringArray.h>
+#include <vtkFieldData.h>
+#include "distributions/gaussian_mixture.h"
+#include "distributions/histogram.h"
+#include "edda_writer.h"
+
+ + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + + + + + + + + + + +

+Functions

const dist::GMMTuple edda::getGmmModels (dist::Variant &distr, int GMs, int model)
 
void edda::writeGmmArrays (ofstream &myFile, DistrArray *array, int GMs)
 
void edda::writeHistoArrays (ofstream &myFile, DistrArray *array)
 
template<typename T >
void edda::writeEddaDatasetTemplate (shared_ptr< Dataset< T > > dataset, const string &edda_file)
 
void edda::writeEddaDataset (shared_ptr< Dataset< VECTOR3 > > dataset, const string &edda_file)
 
void edda::writeEddaDataset (shared_ptr< Dataset< Real > > dataset, const string &edda_file)
 
+
+ + + + diff --git a/html/edda__writer_8h.html b/html/edda__writer_8h.html new file mode 100644 index 0000000..71a29fd --- /dev/null +++ b/html/edda__writer_8h.html @@ -0,0 +1,99 @@ + + + + + + + +EDDA: src/io/edda_writer.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
edda_writer.h File Reference
+
+
+
#include <string>
+#include "edda_export.h"
+#include "dataset/dataset.h"
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + +

+Functions

void EDDA_EXPORT edda::writeEddaDataset (std::shared_ptr< Dataset< Real > >, const std::string &edda_file)
 
void EDDA_EXPORT edda::writeEddaDataset (std::shared_ptr< Dataset< VECTOR3 > >, const std::string &edda_file)
 
+
+ + + + diff --git a/html/edda__writer_8h_source.html b/html/edda__writer_8h_source.html new file mode 100644 index 0000000..7171f65 --- /dev/null +++ b/html/edda__writer_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +EDDA: src/io/edda_writer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
edda_writer.h
+
+
+Go to the documentation of this file.
1 #ifndef EDDA_WRITER
2 #define EDDA_WRITER
3 
4 #include <string>
5 #include "edda_export.h"
6 #include "dataset/dataset.h"
7 
8 namespace edda{
9  void EDDA_EXPORT writeEddaDataset(std::shared_ptr<Dataset<Real> >, const std::string &edda_file);
10  void EDDA_EXPORT writeEddaDataset(std::shared_ptr<Dataset<VECTOR3> >, const std::string &edda_file);
11 }
12 
13 #endif
Experimental functionality.
Definition: distributionModeler.h:26
+ +
void writeEddaDataset(shared_ptr< Dataset< VECTOR3 > > dataset, const string &edda_file)
Definition: edda_writer.cpp:301
+
#define EDDA_EXPORT
Definition: edda_export.h:17
+ +
+ + + + diff --git a/html/ensembleExample_8cpp.html b/html/ensembleExample_8cpp.html new file mode 100644 index 0000000..54ee4f1 --- /dev/null +++ b/html/ensembleExample_8cpp.html @@ -0,0 +1,142 @@ + + + + + + + +EDDA: distr_modeler/ensembleExample.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ensembleExample.cpp File Reference
+
+
+
#include <iostream>
+#include <stdlib.h>
+#include <cmath>
+#include <vector>
+#include <sstream>
+#include <netcdfcpp.h>
+#include "distributionModeler.h"
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+ + + +

+Variables

const int NC_ERR = 2
 
+

Function Documentation

+ +

§ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +
+
+

Variable Documentation

+ +

§ NC_ERR

+ +
+
+ + + + +
const int NC_ERR = 2
+
+ +
+
+
+ + + + diff --git a/html/estimate__gmm_8h.html b/html/estimate__gmm_8h.html new file mode 100644 index 0000000..7384be8 --- /dev/null +++ b/html/estimate__gmm_8h.html @@ -0,0 +1,125 @@ + + + + + + + +EDDA: src/distributions/estimate_gmm.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
estimate_gmm.h File Reference
+
+
+
#include <iostream>
+#include <cmath>
+#include <vector>
+#include <core/interpolator.h>
+#include <distributions/gaussian_mixture.h>
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 edda
 Experimental functionality.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int edda::check_convergence (double fmax, double fmin, double ftol)
 EM helper function. More...
 
double edda::eval_gaussian_density (double mean, double sigma, double val)
 EM helper function. More...
 
void edda::update_parameters (int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
 EM helper function. More...
 
double edda::classprob (int j, double x, int k, double *prob, double *mean, double *sd)
 EM helper function. More...
 
void edda::update_class_prob (int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
 EM helper function. More...
 
double edda::computeLogLikelihood (int n, double *data, int k, double *prob, double *mean, double *sd)
 EM helper function. More...
 
template<int GMMs>
void edda::eddaComputeEM (double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
 
template<int GMMs>
bool edda::testforMatch (double val, dist::GaussianMixture< GMMs > *currentGMM, std::vector< float > *valList, std::vector< float > *distList)
 Incremental update helper function. More...
 
template<int GMMs>
void edda::eddaUpdateGMMIncremental (double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
 
+
+ + + + diff --git a/html/estimate__gmm_8h_source.html b/html/estimate__gmm_8h_source.html new file mode 100644 index 0000000..824a786 --- /dev/null +++ b/html/estimate__gmm_8h_source.html @@ -0,0 +1,92 @@ + + + + + + + +EDDA: src/distributions/estimate_gmm.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EDDA +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
estimate_gmm.h
+
+
+Go to the documentation of this file.
1 // Copyright 2015 The Edda Authors. All rights reserved.
2 // Use of this source code is governed by a MIT-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef ESTIMATE_GMM_H
6 #define ESTIMATE_GMM_H
7 
8 
9 #include <iostream>
10 #include <cmath>
11 #include <vector>
12 
13 //edda includes
14 #include <core/interpolator.h>
16 
17 namespace edda
18 {
19 
22 
25 inline int check_convergence(double fmax, double fmin, double ftol)
26 {
27  double EPS = 1e-10;
28  double delta = fabs(fmax - fmin);
29  double accuracy = (fabs(fmax) + fabs(fmin)) * ftol;
30  return (delta < (accuracy + EPS));
31 }
32 
35 inline double eval_gaussian_density(double mean, double sigma, double val)
36 {
37  double EPS = 1e-10;
38  double prob=0.0;
39  double exponent=0.0;
40 
41  if(sigma>0)
42  {
43  exponent = (val-mean)/sigma;
44  exponent = -(exponent*exponent)/2.0;
45  prob = ( 1.0 / (sigma*sqrt( 2.0*M_PI))) * exp(exponent);
46  }
47  else
48  {
49  if(fabs(val-mean) < EPS)
50  prob=1.0;
51  else
52  prob=0.0;
53  }
54 
55  return prob;
56 }
57 
60 inline void update_parameters(int n, double * data, int k, double * prob, double * mean, double * sd, double ** class_prob)
61 {
62  double EPS = 1e-6;
63 
64  //Update weights first
65  for (int j = 0; j < k; j++)
66  {
67  prob[j] = 0.0;
68  for (int i = 0; i < n; i++)
69  prob[j] += class_prob[i][j];
70 
71  prob[j] /= n;
72  }
73 
74  //update mean
75  for (int j = 0; j < k; j++)
76  {
77  mean[j] = 0.0;
78  for (int i = 0; i < n; i++)
79  mean[j] += data[i] * class_prob[i][j];
80 
81  mean[j] /= n * prob[j] + EPS;
82  }
83 
84  //update standard deviation
85  for (int j = 0; j < k; j++)
86  {
87  sd[j] = 0.0;
88  for (int i = 0; i < n; i++)
89  sd[j] += (data[i] - mean[j])*(data[i] - mean[j]) * class_prob[i][j];
90  sd[j] /= (n * prob[j] + EPS);
91  sd[j] = sqrt(sd[j]);
92  }
93 }
94 
97 inline double classprob(int j, double x, int k, double *prob, double *mean, double *sd)
98 {
99  double num = prob[j]*eval_gaussian_density(mean[j],sd[j],x);
100 
101  double denom=0;
102  for(int i=0;i<k;i++)
103  denom += prob[i]*eval_gaussian_density(mean[i],sd[i],x);
104 
105  return num/denom;
106 }
107 
110 inline void update_class_prob(int n, double * data, int k, double * prob, double * mean, double * sd, double ** class_prob)
111 {
112  int i, j;
113  for (i = 0; i < n; i++)
114  for (j = 0; j < k; j++)
115  class_prob[i][j] = classprob(j, data[i],k, prob, mean, sd);
116 }
117 
120 inline double computeLogLikelihood(int n, double* data,int k, double* prob,double* mean,double* sd)
121 {
122  double llk=0;
123 
124  for(int p=0;p<n;p++)
125  {
126  double val=0;
127  for(int q=0;q<k;q++)
128  {
129  val += prob[q]*eval_gaussian_density(mean[q],sd[q],data[p]);
130  }
131 
132  llk += log(val);
133  }
134 
135  return llk/n;
136 }
137 
141 template <int GMMs>
142 void eddaComputeEM(double *samples, int numSamples, dist::GaussianMixture<GMMs>* new_gmm)
143 {
144  double eps = 1e-6;
145 
146  if(numSamples<GMMs)
147  {
148  std::cout<<"Number of samples must be larger than number of clusters..."<<std::endl;
149  return;
150  }
151  else
152  {
153  double llk = 0, prev_llk = 0;
154  double *mean,*sd,*weight;
155  double **class_prob;
156 
157  //Allocate memories for computation
159  class_prob = (double **) malloc(sizeof(double *)*numSamples);
160  for(int i=0;i<numSamples;i++)
161  class_prob[i] = (double *) malloc(sizeof(double) * GMMs);
162 
163  mean = (double *) malloc(sizeof(double) * GMMs);
164  sd = (double *) malloc(sizeof(double) * GMMs);
165  weight = (double *) malloc(sizeof(double) * GMMs);
166 
167  //initial estimate of parameters
169  double mean1 = 0.0, sd1 = 0.0;
170 
171  for (int i = 0; i < numSamples; i++)
172  mean1 += samples[i];
173  mean1 /= numSamples;
174 
175  for (int i = 0; i < numSamples; i++)
176  sd1 += (samples[i] - mean1)*(samples[i] - mean1);
177  sd1 = sqrt(sd1 / numSamples);
178 
179  for (int j = 0; j < GMMs; j++)
180  {
181  weight[j] = 1.0 / GMMs;
182  mean[j] = samples[rand() % numSamples];
183  sd[j] = sd1;
184  }
185 
186  //Do while loop for iterative estimation
188  do{
189  //save prev likelihood
190  prev_llk = llk;
191 
192  //update probabilities
193  update_class_prob(numSamples, samples, GMMs, weight, mean, sd, class_prob);
194 
195  //update the parameters with newly estimated probabilities
196  update_parameters(numSamples, samples, GMMs, weight, mean, sd, class_prob);
197 
198  //compute new likelihood
199  llk = computeLogLikelihood(numSamples, samples, GMMs, weight, mean, sd);
200 
201  } while (!check_convergence(llk, prev_llk, eps));
202 
203  //Update the gmm object with estimated values
205  for(int m=0;m<GMMs;m++)
206  {
207  new_gmm->models[m].m = mean[m];
208  new_gmm->models[m].v = sd[m];
209  new_gmm->models[m].w = weight[m];
210  }
211 
212  //Clean up
213  free(mean);
214  free(sd);
215  free(weight);
216 
217  for (int i = 0; i < numSamples; i++)
218  free(class_prob[i]);
219  free(class_prob);
220  }
221 }
222 
223 
226 
229 template <int GMMs>
230 bool testforMatch(double val, dist::GaussianMixture<GMMs>* currentGMM, std::vector<float> *valList, std::vector<float> *distList)
231 {
232  float sigmaTh = 2.0;
233  int match=0;
234  valList->clear();
235  distList->clear();
236 
237  for(int i=0;i<GMMs;i++)
238  {
239  float threshold[2];
240  threshold[0] = currentGMM->models[i].m - sigmaTh*sqrt(currentGMM->models[i].v);
241  threshold[1] = currentGMM->models[i].m + sigmaTh*sqrt(currentGMM->models[i].v);
242 
243  distList->push_back(fabs(currentGMM->models[i].m - val));
244 
245  if((val>= threshold[0]) && (val<= threshold[1]))
246  {
247  valList->push_back(fabs(currentGMM->models[i].m - val));
248  match++;
249  }
250  else
251  {
252  valList->push_back(9999999);
253  }
254  }
255 
256  return (match);
257 }
258 
262 template <int GMMs>
263 void eddaUpdateGMMIncremental(double *samples, int numSamples, dist::GaussianMixture<GMMs>* new_gmm)
264 {
265  float alpha = 0.2;//Mixing rate in updation
266 
267  float initVar = new_gmm->models[0].v;
268  for(int i=0;i<GMMs;i++)
269  {
270  if(new_gmm->models[i].v>initVar)
271  initVar =new_gmm->models[i].v;
272  }
273 
274  for(int i=0;i<numSamples;i++)
275  {
276  std::vector<float> valList;
277  std::vector<float> distList;
278  int minIndex=0;
279  float minProb=0.0;
280  bool match;
281  float sumWeight=0.0;
282 
283  match = testforMatch(samples[i], new_gmm,&valList, &distList);
284 
285  //Find the max prob Gaussian from the current GMM
286  minProb = valList[0]; minIndex=0;
287  for(int k=0;k<valList.size();k++)
288  {
289  if(minProb>valList[k])
290  {
291  minProb = valList[k];
292  minIndex = k;
293  }
294  }
295 
296  //updation for the matched gaussian
297  if(match)
298  {
299  //Update gaussians accordingly
300  for(int k=0;k<valList.size();k++)
301  {
302  if(k==minIndex)
303  {
304  //Update weight
305  new_gmm->models[k].w += alpha*(1-new_gmm->models[k].w);
306 
307  //Update Mean
308  new_gmm->models[k].m = (1-alpha)*new_gmm->models[k].m + alpha*samples[i];
309 
310  //Update standard Deviation
311  float dev = new_gmm->models[k].v;
312  float temp = (samples[i] - new_gmm->models[k].m);
313  dev = (1-alpha)*dev + alpha*temp*temp;
314 
315  new_gmm->models[k].v = dev;
316  }
317  //updation for the other gaussians
318  else
319  {
320  //Update weight
321  new_gmm->models[k].w = (1-alpha)*new_gmm->models[k].w;
322  }
323  }
324 
325  }
326  //Update if no match found
327  else
328  {
329  int mid = 0;
330  if(valList.size() > GMMs-1)
331  {
332  //find gaussian with min weight
333  float minw = new_gmm->models[0].w;
334  for(int k=0;k<valList.size();k++)
335  {
336  if(new_gmm->models[k].w < minw)
337  {
338  mid=k;
339  minw = new_gmm->models[k].w;
340  }
341  }
342  }
343 
344  new_gmm->models[mid].m = samples[i];
345  new_gmm->models[mid].v = initVar;
346  new_gmm->models[mid].w = 0.00001;
347  }
348 
349  //Renormalize weights
350  sumWeight=0.0;
351  for(int k=0;k<valList.size();k++)
352  sumWeight += new_gmm->models[k].w;
353 
354  for(int k=0;k<valList.size();k++)
355  new_gmm->models[k].w = new_gmm->models[k].w/sumWeight;
356 
357  valList.clear();
358  }
359 }
360 
361 }
362 
363 #endif // ESTIMATE_GMM
void eddaUpdateGMMIncremental(double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
Definition: estimate_gmm.h:263
+
int check_convergence(double fmax, double fmin, double ftol)
EM helper function.
Definition: estimate_gmm.h:25
+
void update_class_prob(int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
EM helper function.
Definition: estimate_gmm.h:110
+
Experimental functionality.
Definition: distributionModeler.h:26
+
double computeLogLikelihood(int n, double *data, int k, double *prob, double *mean, double *sd)
EM helper function.
Definition: estimate_gmm.h:120
+
Defines a Gaussian Mixture class GMs: number of Gaussian Models.
Definition: gaussian_mixture.h:35
+
double eval_gaussian_density(double mean, double sigma, double val)
EM helper function.
Definition: estimate_gmm.h:35
+
double classprob(int j, double x, int k, double *prob, double *mean, double *sd)
EM helper function.
Definition: estimate_gmm.h:97
+
void update_parameters(int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
EM helper function.
Definition: estimate_gmm.h:60
+
bool testforMatch(double val, dist::GaussianMixture< GMMs > *currentGMM, std::vector< float > *valList, std::vector< float > *distList)
Incremental update helper function.
Definition: estimate_gmm.h:230
+
const double EPS
Definition: common.h:24
+
void eddaComputeEM(double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
Definition: estimate_gmm.h:142
+
Tuple< GMMTuple, GMs > models
Definition: gaussian_mixture.h:63
+ + +
+ + + + diff --git a/html/file__reader_8cpp.html b/html/file__reader_8cpp.html index b78eadd..0d6e4a7 100644 --- a/html/file__reader_8cpp.html +++ b/html/file__reader_8cpp.html @@ -38,7 +38,6 @@
+ All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
@@ -132,7 +131,7 @@
diff --git a/html/file__reader_8h.html b/html/file__reader_8h.html index 843f186..0df62aa 100644 --- a/html/file__reader_8h.html +++ b/html/file__reader_8h.html @@ -38,7 +38,6 @@
  • Main Page
  • Related Pages
  • -
  • Modules
  • Namespaces
  • Classes
  • Files
  • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
    @@ -159,7 +158,7 @@
    diff --git a/html/file__reader_8h_source.html b/html/file__reader_8h_source.html index 08fa9b0..29b9f44 100644 --- a/html/file__reader_8h_source.html +++ b/html/file__reader_8h_source.html @@ -38,7 +38,6 @@
    • Main Page
    • Related Pages
    • -
    • Modules
    • Namespaces
    • Classes
    • Files
    • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
      @@ -292,7 +291,7 @@
      diff --git a/html/file__writer_8h.html b/html/file__writer_8h.html index 54b4091..7cf50d7 100644 --- a/html/file__writer_8h.html +++ b/html/file__writer_8h.html @@ -38,7 +38,6 @@
      @@ -94,17 +70,17 @@
      fuzzy_isosurface.h File Reference
      -
      #include <memory>
      -#include <common.h>
      -#include <dataset/dataset.h>
      -#include <distributions/distribution.h>
      -#include <core/shared_ary.h>
      -#include <dataset/abstract_data_array.h>
      -#include <thrust/host_vector.h>
      -#include <thrust/device_vector.h>
      -#include "core/ndarray.h"
      -#include "core/gmm_array.h"
      -#include "distributions/gaussian_mixture.h"
      +
      #include <memory>
      +#include <common.h>
      +#include <dataset/dataset.h>
      +#include <distributions/distribution.h>
      +#include <core/shared_ary.h>
      +#include <dataset/distr_array.h>
      +#include <thrust/host_vector.h>
      +#include <thrust/device_vector.h>
      +#include "core/ndarray.h"
      +#include "core/thrust_gmm_array.h"
      +#include "distributions/gaussian_mixture.h"

      Go to the source code of this file.

      @@ -115,10 +91,10 @@
      - - + + - +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
       edda::detail
       edda::detail
       

      @@ -130,9 +106,9 @@ diff --git a/html/fuzzy__isosurface_8h_source.html b/html/fuzzy__isosurface_8h_source.html index f900c5f..6fb1c7c 100644 --- a/html/fuzzy__isosurface_8h_source.html +++ b/html/fuzzy__isosurface_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/filters/fuzzy_isosurface.h Source File + + +EDDA: vis/src/filters/fuzzy_isosurface.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -82,7 +58,7 @@
      @@ -90,95 +66,29 @@
      fuzzy_isosurface.h
      -Go to the documentation of this file.
      1 #ifndef FUZZY_ISOSURFACE_H
      -
      2 #define FUZZY_ISOSURFACE_H
      -
      3 
      -
      4 // Implementation of "Analysis of Large-Scale Scalar Data Using Hixels" by Thompson et al.
      -
      5 
      -
      6 #include <memory>
      -
      7 #include <common.h>
      -
      8 #include <dataset/dataset.h>
      - -
      10 #include <core/shared_ary.h>
      - -
      12 
      -
      13 #include <thrust/host_vector.h>
      -
      14 #include <thrust/device_vector.h>
      -
      15 #include "core/ndarray.h"
      -
      16 #include "core/gmm_array.h"
      - -
      18 
      -
      19 namespace edda{
      -
      20 
      -
      21 namespace detail{
      -
      22 
      - -
      27  const double isov;
      -
      28  public:
      -
      29  FuzzyIsocontour(double isov_)
      -
      30  : isov(isov_)
      -
      31  {}
      -
      32 
      -
      33  __host__ __device__
      -
      34  template <typename Dist>
      -
      35  float operator() (const Dist &distr) {
      -
      36  double b = dist::getCdf(distr, isov);
      -
      37  double a = 1 - b;
      -
      38  double g;
      -
      39  if (a==0)
      -
      40  g = b;
      -
      41  else if (b==0)
      -
      42  g = a;
      -
      43  else
      -
      44  g = a/b - b/a;
      -
      45 
      -
      46  return g;
      -
      47  }
      -
      48  };
      -
      49 } // namespace detail
      -
      50 
      -
      51 
      -
      52 
      -
      61 template<class Iterator>
      -
      62 ReturnStatus FuzzyIsosurface(Iterator dataIterator, int dim[3],
      -
      63  double isov, std::shared_ptr<NdArray<Real> > &probField)
      -
      64 {
      -
      65  int size = dim[0]*dim[1]*dim[2];
      -
      66  probField.reset( new NdArray<Real>(3, dim) );
      -
      67 
      -
      68  thrust::transform( dataIterator,
      -
      69  dataIterator + size,
      -
      70  probField->begin(),
      - -
      72  );
      -
      73 
      -
      74  return ReturnStatus::SUCCESS;
      -
      75 }
      -
      76 
      -
      77 } // namespace edda
      -
      78 #endif // LEVEL_CROSSING_PROB_H
      - - +Go to the documentation of this file.
      1 #ifndef FUZZY_ISOSURFACE_H
      2 #define FUZZY_ISOSURFACE_H
      3 
      4 // Implementation of "Analysis of Large-Scale Scalar Data Using Hixels" by Thompson et al.
      5 
      6 #include <memory>
      7 #include <common.h>
      8 #include <dataset/dataset.h>
      10 #include <core/shared_ary.h>
      11 #include <dataset/distr_array.h>
      12 
      13 #include <thrust/host_vector.h>
      14 #include <thrust/device_vector.h>
      15 #include "core/ndarray.h"
      16 #include "core/thrust_gmm_array.h"
      18 
      19 namespace edda{
      20 
      21 namespace detail{
      22 
      27  const double isov;
      28  public:
      29  FuzzyIsocontour(double isov_)
      30  : isov(isov_)
      31  {}
      32 
      33  __host__ __device__
      34  template <typename Dist>
      35  float operator() (const Dist &distr) {
      36  double b = dist::getCdf(distr, isov);
      37  double a = 1 - b;
      38  double g;
      39  if (a==0)
      40  g = b;
      41  else if (b==0)
      42  g = a;
      43  else
      44  g = a/b - b/a;
      45 
      46  return g;
      47  }
      48  };
      49 } // namespace detail
      50 
      51 
      52 
      61 template<class Iterator>
      62 ReturnStatus FuzzyIsosurface(Iterator dataIterator, int dim[3],
      63  double isov, std::shared_ptr<NdArray<Real> > &probField)
      64 {
      65  int size = dim[0]*dim[1]*dim[2];
      66  probField.reset( new NdArray<Real>(3, dim) );
      67 
      68  thrust::transform( dataIterator,
      69  dataIterator + size,
      70  probField->begin(),
      72  );
      73 
      74  return ReturnStatus::SUCCESS;
      75 }
      76 
      77 } // namespace edda
      78 #endif // LEVEL_CROSSING_PROB_H
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      ReturnStatus FuzzyIsosurface(Iterator dataIterator, int dim[3], double isov, std::shared_ptr< NdArray< Real > > &probField)
      Definition: fuzzy_isosurface.h:62
      - -
      ReturnStatus
      Definition: common.h:32
      +
      ReturnStatus
      Definition: common.h:34
      +
      Definition: fuzzy_isosurface.h:26
      + -
      Definition: common.h:32
      +
      Definition: common.h:34
      FuzzyIsocontour(double isov_)
      Definition: fuzzy_isosurface.h:29
      __host__ __device__ float operator()(const Dist &distr)
      Definition: fuzzy_isosurface.h:35
      -
      double getCdf(const T &dist, double x)
      Compute CDF of a distribution.
      Definition: distribution.h:81
      +
      __host__ __device__ double getCdf(const Dist &dist, double x)
      Return CDF of x.
      Definition: distribution_tag.h:106
      diff --git a/html/gaussian_8h.html b/html/gaussian_8h.html index 20d80d6..c09bd10 100644 --- a/html/gaussian_8h.html +++ b/html/gaussian_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/gaussian.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -89,80 +65,103 @@
      gaussian.h File Reference
      -
      #include <cmath>
      -#include <cstdlib>
      -#include <iostream>
      -#include <boost/math/distributions.hpp>
      -#include <thrust/random.h>
      -#include "distribution.h"
      -#include "core/statistics.h"
      +
      #include <cstdlib>
      +#include <iostream>
      +#include <math.h>
      +#include <boost/math/distributions.hpp>
      +#include <thrust/random.h>
      +#include "distribution_tag.h"
      +#include "core/statistics.h"

      Go to the source code of this file.

      - +

      Classes

      struct  edda::dist::Gaussian
       Defines a Gaussian class. More...
       Defines a Gaussian class. More...
       
      - - + + - +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
       edda::dist
       edda::dist
       
      + + + +

      +Macros

      #define _USE_MATH_DEFINES
       
      - + - + - + - + - + - + - + - + + + - + - + - + - +

      Functions

      __host__ __device__ double edda::dist::getMean (const Gaussian &dist)
       Return mean. More...
       Return mean. More...
       
      __host__ __device__ double edda::dist::getVar (const Gaussian &dist)
       Return variance. More...
       Return variance. More...
       
      __host__ __device__ double edda::dist::getPdf (const Gaussian &dist, const double x)
       Return PDF of x. More...
       Return PDF of x. More...
       
      __host__ double edda::dist::getSample (const Gaussian &dist)
       Return a random sample. More...
       Return a random sample. More...
       
      __host__ __device__ double edda::dist::getSample (const Gaussian &dist, thrust::default_random_engine &rng)
       Return a random sample using random engine. More...
       Return a random sample using random engine. More...
       
      __host__ __device__ double edda::dist::getCdf (const Gaussian &dist, double x)
       Return CDF of x. More...
       Return CDF of x. More...
       
      __host__ double edda::dist::getCdfPrecise (const Gaussian &dist, double x)
       Return CDF of x. More...
       Return CDF of x. More...
       
      __host__ std::ostream & edda::dist::operator<< (std::ostream &os, const Gaussian &dist)
       Print itself. More...
       Print itself. More...
       
      __host__ __device__ std::string edda::dist::getName (const Gaussian &x)
       
      __host__ __device__ Gaussian & edda::dist::operator- (Gaussian &x)
       random variable with unary - More...
       random variable with unary - More...
       
      __host__ __device__ Gaussian & edda::dist::operator+= (Gaussian &x, const Gaussian &rhs)
       random variable += More...
       random variable += More...
       
      __host__ __device__ Gaussian & edda::dist::operator+= (Gaussian &x, const double r)
       random variable += with scalar More...
       random variable += with scalar More...
       
      __host__ __device__ Gaussian & edda::dist::operator*= (Gaussian &x, const double r)
       random variable *= with scalar More...
       random variable *= with scalar More...
       
      +

      Macro Definition Documentation

      + +

      § _USE_MATH_DEFINES

      + +
      +
      + + + + +
      #define _USE_MATH_DEFINES
      +
      + +
      +
      diff --git a/html/gaussian_8h_source.html b/html/gaussian_8h_source.html index 7e70ae2..02d6f79 100644 --- a/html/gaussian_8h_source.html +++ b/html/gaussian_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/gaussian.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -90,186 +66,36 @@
      gaussian.h
      -Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      -
      2 // Use of this source code is governed by a MIT-style license that can be
      -
      3 // found in the LICENSE file.
      -
      4 
      -
      5 #ifndef DIST_GAUSSIAN_H_
      -
      6 #define DIST_GAUSSIAN_H_
      -
      7 
      -
      8 
      -
      9 #include <cmath>
      -
      10 #include <cstdlib>
      -
      11 #include <iostream>
      -
      12 
      -
      13 #include <boost/math/distributions.hpp>
      -
      14 #include <thrust/random.h>
      -
      15 
      -
      16 #include "distribution.h"
      -
      17 #include "core/statistics.h"
      -
      18 
      -
      19 namespace edda {
      -
      20 namespace dist {
      -
      21 
      -
      22 // ------------------------------------------------------------------------------
      - -
      27  Real mean, var;
      -
      28  // constructor
      -
      29  __host__ __device__
      -
      30  Gaussian(): Gaussian(0, (Real)1.) {}
      -
      31  __host__ __device__
      -
      32  Gaussian(Real m, Real var): mean(m), var(var) { }
      -
      33 
      -
      34 };
      -
      35 
      -
      36 // ------------------------------------------------------------------------------
      -
      37 // Below defines Gaussian related generic functions
      -
      38 
      -
      42 __host__ __device__
      -
      43 inline double getMean(const Gaussian &dist)
      -
      44 {
      -
      45  return dist.mean;
      -
      46 }
      -
      47 
      -
      51 __host__ __device__
      -
      52 inline double getVar(const Gaussian &dist)
      -
      53 {
      -
      54  return (double) dist.var;
      -
      55 }
      -
      56 
      -
      60 __host__ __device__
      -
      61 inline double getPdf(const Gaussian &dist, const double x)
      -
      62 {
      -
      63  if (dist.var==0) {
      -
      64  return ( fabs(x-dist.mean) < EPS )? 1.: 0;
      -
      65  }
      -
      66  return exp( -0.5 * pow(x-dist.mean, 2) / dist.var ) / sqrt(2. * dist.var * M_PI);
      -
      67 }
      -
      68 
      -
      72 __host__
      -
      73 inline double getSample(const Gaussian &dist)
      -
      74 {
      -
      75  return box_muller((double)dist.mean, (double)sqrt(dist.var) );
      -
      76 }
      -
      77 
      -
      81 __host__ __device__
      -
      82 inline double getSample(const Gaussian &dist, thrust::default_random_engine &rng)
      -
      83 {
      -
      84  thrust::random::normal_distribution<double> ndist(dist.mean, sqrt(dist.var) );
      -
      85  return ndist(rng);
      -
      86 }
      -
      87 
      -
      88 #if 0
      -
      89 namespace detail {
      -
      90  // Returns the erf() of a value (not super precice, but ok)
      -
      91  // ref: http://www.cplusplus.com/forum/beginner/62864/
      -
      92  // ref: http://math.stackexchange.com/questions/97/how-to-accurately-calculate-the-error-function-erfx-with-a-computer
      -
      93  // seems wrong. Don't use.
      -
      94  __host__ __device__
      -
      95  inline double erf(double x)
      -
      96  {
      -
      97  double y = 1.0 / ( 1.0 + 0.3275911 * x);
      -
      98  return 1 - (((((
      -
      99  + 1.061405429 * y
      -
      100  - 1.453152027) * y
      -
      101  + 1.421413741) * y
      -
      102  - 0.284496736) * y
      -
      103  + 0.254829592) * y)
      -
      104  * exp (-x * x);
      -
      105  }
      -
      106 }
      -
      107 #endif
      -
      108 
      -
      114 __host__ __device__
      -
      115 inline double getCdf(const Gaussian &dist, double x)
      -
      116 {
      -
      117  if (dist.var==0) {
      -
      118  return x >= dist.mean ? 1 : 0;
      -
      119  }
      -
      120  //return 0.5 * (1 + boost::math::erf((x - dist.mean) / (sqrt(2.*dist.var))));
      -
      121  return 0.5 * (1 + erf((x - dist.mean) / (sqrt(2.*dist.var))));
      -
      122 }
      -
      123 
      -
      127 __host__
      -
      128 inline double getCdfPrecise(const Gaussian &dist, double x)
      -
      129 {
      -
      130  if (dist.var==0) {
      -
      131  return x >= dist.mean ? 1 : 0;
      -
      132  }
      -
      133  // TODO: need to implement on our own for Cuda to work
      -
      134  boost::math::normal_distribution<double> normal (dist.mean, sqrt(dist.var) );
      -
      135  return boost::math::cdf<>(normal, x);
      -
      136 }
      -
      137 
      -
      141 __host__
      -
      142 inline std::ostream& operator<<(std::ostream& os, const Gaussian &dist)
      -
      143 {
      -
      144  os << "<Gaussian: mean=" << getMean(dist) << ", variance=" << getVar(dist) << ">" ;
      -
      145  return os;
      -
      146 }
      -
      147 
      -
      148 // ------------------------------------------------------------------------------
      -
      149 // Below defines Gaussian related arithmetics
      -
      150 
      -
      154 __host__ __device__
      - -
      156 {
      -
      157  x.mean = -x.mean;
      -
      158  return x;
      -
      159 }
      -
      160 
      -
      164 __host__ __device__
      -
      165 inline Gaussian& operator+=(Gaussian &x, const Gaussian& rhs) {
      -
      166  x.mean += rhs.mean;
      -
      167  x.var += rhs.var;
      -
      168  return x;
      -
      169 }
      -
      170 
      -
      174 __host__ __device__
      -
      175 inline Gaussian& operator+=(Gaussian &x, const double r) {
      -
      176  x.mean += r;
      -
      177  return x;
      -
      178 }
      -
      179 
      -
      183 __host__ __device__
      -
      184 inline Gaussian& operator*=(Gaussian &x, const double r) {
      -
      185  x.mean *= r;
      -
      186  x.var *= r*r;
      -
      187  return x;
      -
      188 }
      -
      189 
      -
      190 } // namespace dist
      -
      191 } // namespace edda
      -
      192 
      -
      193 #endif // DIST_GAUSSIAN_H_
      -
      __host__ __device__ Gaussian & operator+=(Gaussian &x, const Gaussian &rhs)
      random variable +=
      Definition: gaussian.h:165
      -
      Definition: distribution.h:32
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef DIST_GAUSSIAN_H_
      6 #define DIST_GAUSSIAN_H_
      7 
      8 #include <cstdlib>
      9 #include <iostream>
      10 #define _USE_MATH_DEFINES // For Visual Studio
      11 #include <math.h>
      12 
      13 #include <boost/math/distributions.hpp>
      14 #include <thrust/random.h>
      15 
      16 #include "distribution_tag.h"
      17 #include "core/statistics.h"
      18 
      19 namespace edda {
      20 namespace dist {
      21 
      22 // ------------------------------------------------------------------------------
      27  Real mean, var;
      28  // constructor
      29  __host__ __device__
      30  Gaussian(): Gaussian(0, (Real)1.) {}
      31  __host__ __device__
      32  Gaussian(Real m, Real var): mean(m), var(var) { }
      33 
      34 };
      35 
      36 // ------------------------------------------------------------------------------
      37 // Below defines Gaussian related generic functions
      38 
      42 __host__ __device__
      43 inline double getMean(const Gaussian &dist)
      44 {
      45  return dist.mean;
      46 }
      47 
      51 __host__ __device__
      52 inline double getVar(const Gaussian &dist)
      53 {
      54  return (double) dist.var;
      55 }
      56 
      60 __host__ __device__
      61 inline double getPdf(const Gaussian &dist, const double x)
      62 {
      63  if (dist.var==0) {
      64  return ( fabs(x-dist.mean) < EPS )? 1.: 0;
      65  }
      66  return exp( -0.5 * pow(x-dist.mean, 2) / dist.var ) / sqrt(2. * dist.var * M_PI);
      67 }
      68 
      72 __host__
      73 inline double getSample(const Gaussian &dist)
      74 {
      75  return box_muller((double)dist.mean, (double)sqrt(dist.var) );
      76 }
      77 
      81 __host__ __device__
      82 inline double getSample(const Gaussian &dist, thrust::default_random_engine &rng)
      83 {
      84  thrust::random::normal_distribution<double> ndist(dist.mean, sqrt(dist.var) );
      85  return ndist(rng);
      86 }
      87 
      88 #if 0
      89 namespace detail {
      90  // Returns the erf() of a value (not super precice, but ok)
      91  // ref: http://www.cplusplus.com/forum/beginner/62864/
      92  // ref: http://math.stackexchange.com/questions/97/how-to-accurately-calculate-the-error-function-erfx-with-a-computer
      93  // seems wrong. Don't use.
      94  __host__ __device__
      95  inline double erf(double x)
      96  {
      97  double y = 1.0 / ( 1.0 + 0.3275911 * x);
      98  return 1 - (((((
      99  + 1.061405429 * y
      100  - 1.453152027) * y
      101  + 1.421413741) * y
      102  - 0.284496736) * y
      103  + 0.254829592) * y)
      104  * exp (-x * x);
      105  }
      106 }
      107 #endif
      108 
      114 __host__ __device__
      115 inline double getCdf(const Gaussian &dist, double x)
      116 {
      117  if (dist.var==0) {
      118  return x >= dist.mean ? 1 : 0;
      119  }
      120  //return 0.5 * (1 + boost::math::erf((x - dist.mean) / (sqrt(2.*dist.var))));
      121  return 0.5 * (1 + erf((x - dist.mean) / (sqrt(2.*dist.var))));
      122 }
      123 
      127 __host__
      128 inline double getCdfPrecise(const Gaussian &dist, double x)
      129 {
      130  if (dist.var==0) {
      131  return x >= dist.mean ? 1 : 0;
      132  }
      133  // TODO: need to implement on our own for Cuda to work
      134  boost::math::normal_distribution<double> normal (dist.mean, sqrt(dist.var) );
      135  return boost::math::cdf<>(normal, x);
      136 }
      137 
      141 __host__
      142 inline std::ostream& operator<<(std::ostream& os, const Gaussian &dist)
      143 {
      144  os << "<Gaussian: mean=" << getMean(dist) << ", variance=" << getVar(dist) << ">" ;
      145  return os;
      146 }
      147 
      148 __host__ __device__
      149 inline std::string getName(const Gaussian &x) {
      150  return "Gaussian";
      151 }
      152 
      153 // ------------------------------------------------------------------------------
      154 // Below defines Gaussian related arithmetics
      155 
      159 __host__ __device__
      161 {
      162  x.mean = -x.mean;
      163  return x;
      164 }
      165 
      169 __host__ __device__
      170 inline Gaussian& operator+=(Gaussian &x, const Gaussian& rhs) {
      171  x.mean += rhs.mean;
      172  x.var += rhs.var;
      173  return x;
      174 }
      175 
      179 __host__ __device__
      180 inline Gaussian& operator+=(Gaussian &x, const double r) {
      181  x.mean += r;
      182  return x;
      183 }
      184 
      188 __host__ __device__
      189 inline Gaussian& operator*=(Gaussian &x, const double r) {
      190  x.mean *= r;
      191  x.var *= r*r;
      192  return x;
      193 }
      194 
      195 } // namespace dist
      196 } // namespace edda
      197 
      198 #endif // DIST_GAUSSIAN_H_
      std::string getName(const Real &x)
      Definition: distribution_tag.h:226
      +
      __host__ double getSample(const Dist &dist)
      Return a random sample.
      Definition: distribution_tag.h:84
      + +
      __host__ __device__ double getPdf(const Dist &dist, const double x)
      Return PDF of x.
      Definition: distribution_tag.h:73
      +
      __host__ __device__ Gaussian & operator+=(Gaussian &x, const Gaussian &rhs)
      random variable +=
      Definition: gaussian.h:170
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      Real mean
      Definition: gaussian.h:27
      -
      __host__ __device__ double getPdf(const Gaussian &dist, const double x)
      Return PDF of x.
      Definition: gaussian.h:61
      -
      __host__ __device__ double getVar(const Gaussian &dist)
      Return variance.
      Definition: gaussian.h:52
      +
      __host__ __device__ double getVar(const Dist &dist)
      Return variance.
      Definition: distribution_tag.h:62
      +
      __host__ __device__ double getMean(const Dist &dist)
      Return mean.
      Definition: distribution_tag.h:51
      Defines a Gaussian class.
      Definition: gaussian.h:26
      __host__ std::ostream & operator<<(std::ostream &os, const Gaussian &dist)
      Print itself.
      Definition: gaussian.h:142
      __host__ __device__ Gaussian()
      Definition: gaussian.h:30
      -
      __host__ __device__ Gaussian & operator*=(Gaussian &x, const double r)
      random variable *= with scalar
      Definition: gaussian.h:184
      +
      __host__ __device__ Gaussian & operator*=(Gaussian &x, const double r)
      random variable *= with scalar
      Definition: gaussian.h:189
      T box_muller(T m, T s)
      Definition: statistics.h:26
      __host__ double getCdfPrecise(const Gaussian &dist, double x)
      Return CDF of x.
      Definition: gaussian.h:128
      -
      T operator-(const T &lhs, const T &rhs)
      random variable -
      Definition: distribution.h:63
      +
      T operator-(const T &lhs, const T &rhs)
      random variable -
      Definition: distribution_tag.h:180
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      - -
      const double EPS
      Definition: common.h:22
      -
      __host__ double getSample(const Gaussian &dist)
      Return a random sample.
      Definition: gaussian.h:73
      +
      const double EPS
      Definition: common.h:24
      +
      Definition: distribution_tag.h:34
      __host__ __device__ Gaussian(Real m, Real var)
      Definition: gaussian.h:32
      -
      float Real
      Definition: common.h:26
      -
      double getMean(const T &dist)
      Compute the mean of the distribution.
      Definition: distribution.h:92
      -
      double getCdf(const T &dist, double x)
      Compute CDF of a distribution.
      Definition: distribution.h:81
      +
      float Real
      Definition: common.h:28
      Real var
      Definition: gaussian.h:27
      +
      __host__ __device__ double getCdf(const Dist &dist, double x)
      Return CDF of x.
      Definition: distribution_tag.h:106
      diff --git a/html/gaussian__mixture_8h.html b/html/gaussian__mixture_8h.html index e8700e1..2c4ea8f 100644 --- a/html/gaussian__mixture_8h.html +++ b/html/gaussian__mixture_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/gaussian_mixture.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -89,20 +65,21 @@
      gaussian_mixture.h File Reference
      -
      #include <cmath>
      -#include <cstdlib>
      -#include <iostream>
      -#include <vector>
      -#include <boost/math/distributions.hpp>
      -#include "common.h"
      -#include "distribution.h"
      -#include "gaussian.h"
      -#include "core/statistics.h"
      +
      #include <cmath>
      +#include <cstdlib>
      +#include <iostream>
      +#include <vector>
      +#include <boost/math/distributions.hpp>
      +#include "common.h"
      +#include "distribution_tag.h"
      +#include "gaussian.h"
      +#include "core/statistics.h"

      Go to the source code of this file.

      @@ -110,71 +87,79 @@ Classes - - + +
      struct  edda::dist::GMMTuple
       
      class  edda::dist::GaussianMixture< GMMs >
       Defines a Gaussian Mixture class. More...
      class  edda::dist::GaussianMixture< GMs >
       Defines a Gaussian Mixture class GMs: number of Gaussian Models. More...
       
      - - + + - +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
       edda::dist
       edda::dist
       
      + + + +

      +Typedefs

      typedef GaussianMixture< MAX_GMsedda::dist::DefaultGaussianMixture
       
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Functions

      template<int GMMs>
      double edda::dist::getMean (const GaussianMixture< GMMs > &dist)
       Return mean. More...
       
      template<int GMMs>
      double edda::dist::getVar (const GaussianMixture< GMMs > &dist)
       Return variance. More...
       
      template<int GMMs>
      double edda::dist::getPdf (const GaussianMixture< GMMs > &dist, const double x)
       Return PDF of x. More...
       
      template<int GMMs>
      double edda::dist::getSample (const GaussianMixture< GMMs > &dist)
       Return a sample. More...
       
      template<int GMMs>
      __host__ __device__ double edda::dist::getSample (const GaussianMixture< GMMs > &dist, thrust::default_random_engine &rng)
       Return a sample. More...
       
      template<int GMMs>
      __host__ __device__ double edda::dist::getCdf (const GaussianMixture< GMMs > &dist, double x)
       Return CDF of x. More...
       
      template<int GMMs>
      std::ostream & edda::dist::operator<< (std::ostream &os, const GaussianMixture< GMMs > &dist)
       Print itself. More...
       
      template<int GMMs>
      GaussianMixture< GMMs > & edda::dist::operator- (GaussianMixture< GMMs > &x)
       random variable with unary - More...
       
      template<int GMMs>
      GaussianMixture< GMMs > & edda::dist::operator+= (GaussianMixture< GMMs > &x, const GaussianMixture< GMMs > &rhs)
       random variable += More...
       
      template<int GMMs>
      GaussianMixture< GMMs > & edda::dist::operator+= (GaussianMixture< GMMs > &x, const double r)
       random variable += with scalar More...
       
      template<int GMMs>
      GaussianMixture< GMMs > & edda::dist::operator*= (GaussianMixture< GMMs > &x, const double r)
       random variable *= with scalar More...
       
      template<int GMs>
      double edda::dist::getMean (const GaussianMixture< GMs > &dist)
       Return mean. More...
       
      template<int GMs>
      double edda::dist::getVar (const GaussianMixture< GMs > &dist)
       Return variance. More...
       
      template<int GMs>
      double edda::dist::getPdf (const GaussianMixture< GMs > &dist, const double x)
       Return PDF of x. More...
       
      template<int GMs>
      double edda::dist::getSample (const GaussianMixture< GMs > &dist)
       Return a sample. More...
       
      template<int GMs>
      __host__ __device__ double edda::dist::getSample (const GaussianMixture< GMs > &dist, thrust::default_random_engine &rng)
       Return a sample. More...
       
      template<int GMs>
      __host__ __device__ double edda::dist::getCdf (const GaussianMixture< GMs > &dist, double x)
       Return CDF of x. More...
       
      template<int GMs>
      std::ostream & edda::dist::operator<< (std::ostream &os, const GaussianMixture< GMs > &dist)
       Print itself. More...
       
      template<int GMs>
      __host__ __device__ std::string edda::dist::getName (const GaussianMixture< GMs > &x)
       
      template<int GMs>
      GaussianMixture< GMs > edda::dist::operator- (const GaussianMixture< GMs > &x)
       random variable with unary - More...
       
      template<int GMs>
      GaussianMixture< GMs > & edda::dist::operator+= (GaussianMixture< GMs > &x, const GaussianMixture< GMs > &rhs)
       random variable += More...
       
      template<int GMs>
      GaussianMixture< GMs > & edda::dist::operator+= (GaussianMixture< GMs > &x, const double r)
       random variable += with scalar More...
       
      template<int GMs>
      GaussianMixture< GMs > & edda::dist::operator*= (GaussianMixture< GMs > &x, const double r)
       random variable *= with scalar More...
       
      diff --git a/html/gaussian__mixture_8h_source.html b/html/gaussian__mixture_8h_source.html index 48ea93d..69dc3a0 100644 --- a/html/gaussian__mixture_8h_source.html +++ b/html/gaussian__mixture_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/gaussian_mixture.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -90,260 +66,44 @@
      gaussian_mixture.h
      -Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      -
      2 // Use of this source code is governed by a MIT-style license that can be
      -
      3 // found in the LICENSE file.
      -
      4 
      -
      5 #ifndef GAUSSIAN_MIXTURE_H
      -
      6 #define GAUSSIAN_MIXTURE_H
      -
      7 
      -
      8 #include <cmath>
      -
      9 #include <cstdlib>
      -
      10 #include <iostream>
      -
      11 #include <vector>
      -
      12 
      -
      13 #include <boost/math/distributions.hpp>
      -
      14 #include "common.h"
      -
      15 #include "distribution.h"
      -
      16 #include "gaussian.h"
      -
      17 #include "core/statistics.h"
      -
      18 
      -
      19 namespace edda {
      -
      20 namespace dist {
      -
      21 
      -
      22 struct GMMTuple {
      -
      23  union{
      -
      24  struct{Real m,v,w;}; // mean, variance, weight
      -
      25  Real p[3];
      -
      26  };
      -
      27 };
      -
      28 
      -
      29 // ------------------------------------------------------------------------------
      -
      33 template <int GMMs>
      - -
      35 
      -
      36  void modelReduction(const std::vector<GMMTuple> &models_) {
      -
      37  if (models_.size() <= GMMs) {
      -
      38  init();
      -
      39  for (size_t i=0; i<models_.size(); i++)
      -
      40  models[i] = models_[i];
      -
      41 
      -
      42  } else {
      -
      43 
      - -
      45  }
      -
      46  }
      -
      47 
      -
      51  __host__ __device__
      -
      52  void init () {
      -
      53  //memset(this, 0, sizeof(GaussianMixture<GMMs>));
      -
      54  for (int i=0; i<GMMs; i++)
      -
      55  models[i].w = 0;
      -
      56  }
      -
      57 
      -
      58 public:
      - -
      60 
      -
      61  // constructor
      -
      62  __host__ __device__
      -
      63  GaussianMixture() { init(); }
      -
      64 
      -
      65  template <int GMMs_>
      -
      66  void assign (const Tuple<GMMTuple, GMMs_> &models) {
      -
      67  std::vector<GMMTuple> vmodels_;
      -
      68  for (int i=0; i<GMMs_; i++)
      -
      69  {
      -
      70  GMMTuple t = models[i];
      -
      71  vmodels_.push_back(t);
      -
      72  }
      -
      73  modelReduction(vmodels_);
      -
      74  }
      -
      75 
      -
      76  GaussianMixture(const std::vector<GMMTuple> &models_) {
      -
      77  modelReduction(models_);
      -
      78  }
      -
      79 
      -
      83  __host__ __device__
      - -
      85  double sum = 0;
      -
      86  int i;
      -
      87  for (i=0; i<GMMs; i++) {
      -
      88  sum += models[i].w;
      -
      89  }
      -
      90  if (sum == 0) return;
      -
      91  for (i=0; i<GMMs; i++) {
      -
      92  models[i].w /= sum;
      -
      93  }
      -
      94  }
      -
      95 };
      -
      96 
      -
      97 // ------------------------------------------------------------------------------
      -
      98 // Below defines GaussianMixture related generic functions
      -
      99 
      -
      103 template <int GMMs>
      -
      104 inline double getMean(const GaussianMixture<GMMs> &dist)
      -
      105 {
      -
      106  double mean = 0;
      -
      107  for (int i=0; i<GMMs; i++)
      -
      108  {
      -
      109  mean += dist.models[i].m * dist.models[i].w;
      -
      110  }
      -
      111  return mean;
      -
      112 }
      -
      113 
      -
      123 template <int GMMs>
      -
      124 inline double getVar(const GaussianMixture<GMMs> &dist)
      -
      125 {
      -
      126  // Let the first summation as term1 and second as term2
      -
      127  double term1=0, term2=0;
      -
      128  for (int i=0; i<GMMs; i++)
      -
      129  {
      -
      130  const GMMTuple & model = dist.models[i];
      -
      131  term1 += (double)model.w * model.v + (double)model.w * model.m * model.m ;
      -
      132  term2 += (double)model.w * model.m;
      -
      133  }
      -
      134  return term1 - term2 * term2;
      -
      135 }
      -
      136 
      -
      140 template <int GMMs>
      -
      141 inline double getPdf(const GaussianMixture<GMMs> &dist, const double x)
      -
      142 {
      -
      143  double p=0;
      -
      144  for (int i=0; i<GMMs; i++)
      -
      145  {
      -
      146  p += getPdf( Gaussian(dist.models[i].m, dist.models[i].v), x ) * dist.models[i].w;
      -
      147  }
      -
      148  return p;
      -
      149 }
      -
      150 
      -
      157 template <int GMMs>
      -
      158 inline double getSample(const GaussianMixture<GMMs> &dist)
      -
      159 {
      -
      160  float ratio = rand() / (float)RAND_MAX;
      -
      161  float accumulated = 0;
      -
      162  for (int i=0; i<GMMs; i++)
      -
      163  {
      -
      164  accumulated += dist.models[i].w;
      -
      165  if (ratio < accumulated) {
      -
      166  return getSample( Gaussian(dist.models[i].m, dist.models[i].v) );
      -
      167  }
      -
      168  }
      -
      169  // return sample from the last model
      -
      170  return getSample( Gaussian(dist.models[GMMs-1].m, dist.models[GMMs-1].v) );
      -
      171 }
      -
      172 
      -
      179 template <int GMMs>
      -
      180 __host__ __device__
      -
      181 inline double getSample(const GaussianMixture<GMMs> &dist, thrust::default_random_engine &rng)
      -
      182 {
      -
      183  thrust::uniform_real_distribution<Real> uniform;
      -
      184  float ratio = uniform(rng);
      -
      185  float accumulated = 0;
      -
      186  for (int i=0; i<GMMs; i++)
      -
      187  {
      -
      188  accumulated += dist.models[i].w;
      -
      189  if (ratio < accumulated) {
      -
      190  return getSample( Gaussian(dist.models[i].m, dist.models[i].v), rng );
      -
      191  }
      -
      192  }
      -
      193  // return sample from the last model
      -
      194  return getSample( Gaussian(dist.models[GMMs-1].m, dist.models[GMMs-1].v), rng );
      -
      195 }
      -
      199 template <int GMMs>
      -
      200 __host__ __device__
      -
      201 inline double getCdf(const GaussianMixture<GMMs> &dist, double x)
      -
      202 {
      -
      203  double cdf=0;
      -
      204  for (int i=0; i<GMMs; i++)
      -
      205  {
      -
      206  if (dist.models[i].w >0)
      -
      207  cdf += getCdf(Gaussian(dist.models[i].m, dist.models[i].v), x) * dist.models[i].w;
      -
      208  }
      -
      209  return cdf;
      -
      210 }
      -
      211 
      -
      215 template <int GMMs>
      -
      216 inline std::ostream& operator<<(std::ostream& os, const GaussianMixture<GMMs> &dist)
      -
      217 {
      -
      218  os << "<GaussianMixture(m,v,w):";
      -
      219  for (int i=0; i<GMMs; i++)
      -
      220  os << " (" << dist.models[i].m << "," << dist.models[i].v << "," << dist.models[i].w << ")";
      -
      221  os << ">";
      -
      222  return os;
      -
      223 }
      -
      224 
      -
      225 // ------------------------------------------------------------------------------
      -
      226 // Below defines Gaussian related arithmetics
      -
      227 
      -
      231 template <int GMMs>
      - -
      233 {
      -
      234  for (int i=0; i<GMMs; i++)
      -
      235  x.models[i].m = -x.models[i].m;
      -
      236  return x;
      -
      237 }
      -
      238 
      -
      242 template <int GMMs>
      - -
      244  throw NotImplementedException();
      -
      245 }
      -
      246 
      -
      250 template <int GMMs>
      - -
      252  for (int i=0; i<GMMs; i++)
      -
      253  x.models[i].m += r;
      -
      254  return x;
      -
      255 }
      -
      256 
      -
      260 template <int GMMs>
      - -
      262  for (int i=0; i<GMMs; i++) {
      -
      263  x.models[i].m *= r;
      -
      264  x.models[i].v *= r;
      -
      265  }
      -
      266  return x;
      -
      267 }
      -
      268 
      -
      269 } // namespace dist
      -
      270 } // namespace edda
      -
      271 
      -
      272 
      -
      273 #endif // GAUSSIAN_MIXTURE_H
      -
      __host__ __device__ Gaussian & operator+=(Gaussian &x, const Gaussian &rhs)
      random variable +=
      Definition: gaussian.h:165
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef GAUSSIAN_MIXTURE_H
      6 #define GAUSSIAN_MIXTURE_H
      7 
      8 #include <cmath>
      9 #include <cstdlib>
      10 #include <iostream>
      11 #include <vector>
      12 
      13 #include <boost/math/distributions.hpp>
      14 #include "common.h"
      15 #include "distribution_tag.h"
      16 #include "gaussian.h"
      17 #include "core/statistics.h"
      18 
      19 namespace edda {
      20 namespace dist {
      21 
      22 struct GMMTuple {
      23  union{
      24  struct{Real m,v,w;}; // mean, variance, weight
      25  Real p[3];
      26  };
      27 };
      28 
      29 // ------------------------------------------------------------------------------
      34 template <int GMs>
      36 
      37  void modelReduction(const std::vector<GMMTuple> &models_) {
      38  if (models_.size() <= GMs) {
      39  init();
      40  for (size_t i=0; i<models_.size(); i++)
      41  models[i] = models_[i];
      42 
      43  } else {
      44  // Too many Gaussian models
      46  }
      47  }
      48 
      52  __host__ __device__
      53  void init () {
      54  //memset(this, 0, sizeof(GaussianMixture<GMs>));
      55  models[0].v = 1;
      56  models[0].m = 0;
      57  models[0].w = 1;
      58  for (int i=1; i<GMs; i++)
      59  models[i].w = 0;
      60  }
      61 
      62 public:
      64 
      65  // constructor
      66  __host__ __device__
      67  GaussianMixture() { init(); }
      68 
      69  template <int GMs_>
      70  void assign (const Tuple<GMMTuple, GMs_> &models) {
      71  std::vector<GMMTuple> vmodels_;
      72  for (int i=0; i<GMs_; i++)
      73  {
      74  GMMTuple t = models[i];
      75  vmodels_.push_back(t);
      76  }
      77  modelReduction(vmodels_);
      78  normalizeWeights();
      79  }
      80 
      81  GaussianMixture(const std::vector<GMMTuple> &models_) {
      82  modelReduction(models_);
      83  normalizeWeights();
      84  }
      85 
      89  __host__ __device__
      91  double sum = 0;
      92  int i;
      93  for (i=0; i<GMs; i++) {
      94  sum += models[i].w;
      95  }
      96  if (sum == 0) return;
      97  for (i=0; i<GMs; i++) {
      98  models[i].w /= sum;
      99  }
      100  }
      101 };
      102 
      103 // ------------------------------------------------------------------------------
      104 // Below defines GaussianMixture related generic functions
      105 
      109 template <int GMs>
      110 inline double getMean(const GaussianMixture<GMs> &dist)
      111 {
      112  double mean = 0;
      113  for (int i=0; i<GMs; i++)
      114  {
      115  mean += dist.models[i].m * dist.models[i].w;
      116  }
      117  return mean;
      118 }
      119 
      129 template <int GMs>
      130 inline double getVar(const GaussianMixture<GMs> &dist)
      131 {
      132  // Let the first summation as term1 and second as term2
      133  double term1=0, term2=0;
      134  for (int i=0; i<GMs; i++)
      135  {
      136  const GMMTuple & model = dist.models[i];
      137  term1 += (double)model.w * model.v + (double)model.w * model.m * model.m ;
      138  term2 += (double)model.w * model.m;
      139  }
      140  return term1 - term2 * term2;
      141 }
      142 
      146 template <int GMs>
      147 inline double getPdf(const GaussianMixture<GMs> &dist, const double x)
      148 {
      149  double p=0;
      150  for (int i=0; i<GMs; i++)
      151  {
      152  p += getPdf( Gaussian(dist.models[i].m, dist.models[i].v), x ) * dist.models[i].w;
      153  }
      154  return p;
      155 }
      156 
      163 template <int GMs>
      164 inline double getSample(const GaussianMixture<GMs> &dist)
      165 {
      166  float ratio = rand() / (float)RAND_MAX;
      167  float accumulated = 0;
      168  for (int i=GMs-1; i >= 0; i--)
      169  {
      170  accumulated += dist.models[i].w;
      171  if (ratio < accumulated) {
      172  return getSample( Gaussian(dist.models[i].m, dist.models[i].v) );
      173  }
      174  }
      175  // return sample from the last model
      176  return getSample( Gaussian(dist.models[0].m, dist.models[0].v) );
      177 }
      178 
      185 template <int GMs>
      186 __host__ __device__
      187 inline double getSample(const GaussianMixture<GMs> &dist, thrust::default_random_engine &rng)
      188 {
      189  thrust::uniform_real_distribution<Real> uniform;
      190  float ratio = uniform(rng);
      191  float accumulated = 0;
      192  for (int i=GMs-1; i>=0; i--)
      193  {
      194  accumulated += dist.models[i].w;
      195  if (ratio < accumulated) {
      196  return getSample( Gaussian(dist.models[i].m, dist.models[i].v), rng );
      197  }
      198  }
      199  // return sample from the last model
      200  return getSample( Gaussian(dist.models[0].m, dist.models[0].v), rng );
      201 }
      205 template <int GMs>
      206 __host__ __device__
      207 inline double getCdf(const GaussianMixture<GMs> &dist, double x)
      208 {
      209  double cdf=0;
      210  for (int i=0; i<GMs; i++)
      211  {
      212  if (dist.models[i].w >0)
      213  cdf += getCdf(Gaussian(dist.models[i].m, dist.models[i].v), x) * dist.models[i].w;
      214  }
      215  return cdf;
      216 }
      217 
      221 template <int GMs>
      222 inline std::ostream& operator<<(std::ostream& os, const GaussianMixture<GMs> &dist)
      223 {
      224  os << "<GaussianMixture(m,v,w):";
      225  for (int i=0; i<GMs; i++)
      226  os << " (" << dist.models[i].m << "," << dist.models[i].v << "," << dist.models[i].w << ")";
      227  os << ">";
      228  return os;
      229 }
      230 
      231 __host__ __device__
      232 template <int GMs>
      233 inline std::string getName(const GaussianMixture<GMs> &x) {
      234  std::stringstream ss;
      235  ss << "GaussianMixture" << GMs;
      236  return ss.str();
      237 }
      238 
      239 // ------------------------------------------------------------------------------
      240 // Below defines Gaussian related arithmetics
      241 
      245 template <int GMs>
      247 {
      248  throw NotImplementedException();
      249 
      250 }
      251 
      255 template <int GMs>
      257  throw NotImplementedException();
      258 }
      259 
      263 template <int GMs>
      265  for (int i=0; i<GMs; i++)
      266  x.models[i].m += r;
      267  return x;
      268 }
      269 
      273 template <int GMs>
      275  for (int i=0; i<GMs; i++) {
      276  x.models[i].m *= r;
      277  x.models[i].v *= r;
      278  }
      279  return x;
      280 }
      281 
      283 
      284 } // namespace dist
      285 } // namespace edda
      286 
      287 
      288 
      289 #endif // GAUSSIAN_MIXTURE_H
      std::string getName(const Real &x)
      Definition: distribution_tag.h:226
      +
      __host__ double getSample(const Dist &dist)
      Return a random sample.
      Definition: distribution_tag.h:84
      + +
      __host__ __device__ double getPdf(const Dist &dist, const double x)
      Return PDF of x.
      Definition: distribution_tag.h:73
      +
      __host__ __device__ Gaussian & operator+=(Gaussian &x, const Gaussian &rhs)
      random variable +=
      Definition: gaussian.h:170
      Real p[3]
      Definition: gaussian_mixture.h:25
      -
      Definition: distribution.h:32
      -
      GaussianMixture(const std::vector< GMMTuple > &models_)
      Definition: gaussian_mixture.h:76
      -
      __host__ __device__ double getPdf(const Gaussian &dist, const double x)
      Return PDF of x.
      Definition: gaussian.h:61
      -
      Tuple< GMMTuple, GMMs > models
      Definition: gaussian_mixture.h:59
      -
      __host__ __device__ double getVar(const Gaussian &dist)
      Return variance.
      Definition: gaussian.h:52
      +
      __host__ __device__ void normalizeWeights()
      Scale sum of weights to 1.
      Definition: gaussian_mixture.h:90
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      __host__ __device__ GaussianMixture()
      Definition: gaussian_mixture.h:67
      +
      GaussianMixture(const std::vector< GMMTuple > &models_)
      Definition: gaussian_mixture.h:81
      +
      __host__ __device__ double getVar(const Dist &dist)
      Return variance.
      Definition: distribution_tag.h:62
      +
      __host__ __device__ double getMean(const Dist &dist)
      Return mean.
      Definition: distribution_tag.h:51
      Defines a Gaussian class.
      Definition: gaussian.h:26
      -
      __host__ __device__ GaussianMixture()
      Definition: gaussian_mixture.h:63
      -
      Defines a Gaussian Mixture class.
      Definition: gaussian_mixture.h:34
      +
      Defines a Gaussian Mixture class GMs: number of Gaussian Models.
      Definition: gaussian_mixture.h:35
      -
      __host__ __device__ Gaussian & operator*=(Gaussian &x, const double r)
      random variable *= with scalar
      Definition: gaussian.h:184
      +
      void assign(const Tuple< GMMTuple, GMs_ > &models)
      Definition: gaussian_mixture.h:70
      +
      __host__ __device__ Gaussian & operator*=(Gaussian &x, const double r)
      random variable *= with scalar
      Definition: gaussian.h:189
      Definition: gaussian_mixture.h:22
      Real w
      Definition: gaussian_mixture.h:24
      -
      T operator-(const T &lhs, const T &rhs)
      random variable -
      Definition: distribution.h:63
      -
      Definition: common.h:39
      +
      T operator-(const T &lhs, const T &rhs)
      random variable -
      Definition: distribution_tag.h:180
      +
      Definition: common.h:42
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      - -
      __host__ double getSample(const Gaussian &dist)
      Return a random sample.
      Definition: gaussian.h:73
      -
      void assign(const Tuple< GMMTuple, GMMs_ > &models)
      Definition: gaussian_mixture.h:66
      +
      Definition: distribution_tag.h:34
      Definition: tuple.h:18
      Real m
      Definition: gaussian_mixture.h:24
      -
      float Real
      Definition: common.h:26
      -
      double getMean(const T &dist)
      Compute the mean of the distribution.
      Definition: distribution.h:92
      -
      double getCdf(const T &dist, double x)
      Compute CDF of a distribution.
      Definition: distribution.h:81
      +
      Tuple< GMMTuple, GMs > models
      Definition: gaussian_mixture.h:63
      +
      float Real
      Definition: common.h:28
      Real v
      Definition: gaussian_mixture.h:24
      -
      __host__ __device__ void normalizeWeights()
      Scale sum of weights to 1.
      Definition: gaussian_mixture.h:84
      +
      GaussianMixture< MAX_GMs > DefaultGaussianMixture
      Definition: gaussian_mixture.h:282
      +
      __host__ __device__ double getCdf(const Dist &dist, double x)
      Return CDF of x.
      Definition: distribution_tag.h:106
      diff --git a/html/globals.html b/html/globals.html index 0063c9b..91da7cf 100644 --- a/html/globals.html +++ b/html/globals.html @@ -3,16 +3,15 @@ - + + EDDA: File Members + - @@ -21,7 +20,7 @@ - @@ -30,76 +29,26 @@
      +
      EDDA
      - + - - - - + + + + +
      @@ -111,174 +60,286 @@
      Here is a list of all file members with links to the files they belong to:
      -

      - a -

      diff --git a/html/globals_defs.html b/html/globals_defs.html index a472fe8..9757f5b 100644 --- a/html/globals_defs.html +++ b/html/globals_defs.html @@ -3,16 +3,15 @@ - + + EDDA: File Members + - @@ -21,7 +20,7 @@ - @@ -30,58 +29,26 @@
      +
      EDDA
      - + - - - + + + + +
      @@ -92,20 +59,73 @@
       
      diff --git a/html/globals_func.html b/html/globals_func.html index d2969eb..51ccf40 100644 --- a/html/globals_func.html +++ b/html/globals_func.html @@ -3,16 +3,15 @@ - + + EDDA: File Members + - @@ -21,7 +20,7 @@ - @@ -30,70 +29,26 @@
      +
      EDDA
      - + - - - - + + + + +
      @@ -105,95 +60,120 @@
        -

      - a -

      diff --git a/html/globals_type.html b/html/globals_type.html index 598b029..d28eff5 100644 --- a/html/globals_type.html +++ b/html/globals_type.html @@ -3,16 +3,15 @@ - + + EDDA: File Members + - @@ -21,7 +20,7 @@ - @@ -30,58 +29,26 @@
      +
      EDDA
      - + - - - + + + + +
      @@ -92,16 +59,37 @@
       
      diff --git a/html/globals_vars.html b/html/globals_vars.html index 89ff9a0..75ce145 100644 --- a/html/globals_vars.html +++ b/html/globals_vars.html @@ -3,16 +3,15 @@ - + + EDDA: File Members + - @@ -21,7 +20,7 @@ - @@ -30,58 +29,26 @@
      +
      EDDA
      - + - - - + + + + +
      @@ -93,36 +60,30 @@ diff --git a/html/gmm__array_8h.html b/html/gmm__array_8h.html index e45038b..1d813aa 100644 --- a/html/gmm__array_8h.html +++ b/html/gmm__array_8h.html @@ -38,7 +38,6 @@
      + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
      @@ -127,7 +126,7 @@
      diff --git a/html/gmm__array_8h_source.html b/html/gmm__array_8h_source.html index 8ddfd4d..3998bf9 100644 --- a/html/gmm__array_8h_source.html +++ b/html/gmm__array_8h_source.html @@ -38,7 +38,6 @@
      @@ -90,13 +66,13 @@
      gmm_vtk_data_array.cpp File Reference
      -
      #include "thrust/device_vector.h"
      +
      #include "thrust/device_vector.h"
      diff --git a/html/gmm__vtk__data__array_8h.html b/html/gmm__vtk__data__array_8h.html index 050be0a..de75464 100644 --- a/html/gmm__vtk__data__array_8h.html +++ b/html/gmm__vtk__data__array_8h.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/gmm_vtk_data_array.h File Reference + + +EDDA: src/io/gmm_vtk_data_array.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -82,7 +58,7 @@
      @@ -93,34 +69,41 @@
      gmm_vtk_data_array.h File Reference
      -
      #include <vector>
      -#include <stdexcept>
      -#include <string>
      -#include <vtk/vtk_common.h>
      -#include <distributions/gaussian_mixture.h>
      -#include <dataset/abstract_data_array.h>
      -#include <core/gmm_array.h>
      +
      #include <vector>
      +#include <stdexcept>
      +#include <string>
      +#include <vtkImageData.h>
      +#include <vtkSmartPointer.h>
      +#include <vtkDataArray.h>
      +#include <vtkFloatArray.h>
      +#include <vtkPointData.h>
      +#include <vtkCellData.h>
      +#include <vtkFieldData.h>
      +#include <vtkStructuredGrid.h>
      +#include <distributions/gaussian_mixture.h>
      +#include <dataset/distr_array.h>
      +#include <core/thrust_gmm_array.h>

      Go to the source code of this file.

      - +

      Classes

      class  edda::GmmVtkDataArray
       GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved memory accessing. More...
       GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved memory accessing. More...
       
      - - + +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
      diff --git a/html/gmm__vtk__data__array_8h_source.html b/html/gmm__vtk__data__array_8h_source.html index 5188be1..b5d341c 100644 --- a/html/gmm__vtk__data__array_8h_source.html +++ b/html/gmm__vtk__data__array_8h_source.html @@ -3,16 +3,15 @@ - -EDDA: src/vtk/gmm_vtk_data_array.h Source File + + +EDDA: src/io/gmm_vtk_data_array.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -82,7 +58,7 @@
      @@ -90,90 +66,39 @@
      gmm_vtk_data_array.h
      -Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      -
      2 // Use of this source code is governed by a MIT-style license that can be
      -
      3 // found in the LICENSE file.
      -
      4 
      -
      5 #ifndef GMM_VTK_ARRAY_H
      -
      6 #define GMM_VTK_ARRAY_H
      -
      7 
      -
      8 #include <vector>
      -
      9 #include <stdexcept>
      -
      10 #include <string>
      -
      11 
      -
      12 #include <vtk/vtk_common.h>
      -
      13 
      - - -
      16 #include <core/gmm_array.h>
      -
      17 
      -
      18 namespace edda {
      -
      19 
      -
      20 //---------------------------------------------------------------------------------------
      -
      21 
      - -
      24 {
      -
      25 protected:
      -
      26  std::vector<vtkSmartPointer<vtkDataArray> > arrays;
      -
      27 
      -
      28  size_t length = 0;
      -
      29  int components = 1;
      -
      30 public:
      -
      31  GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="") ;
      -
      32 
      -
      35  GmmVtkDataArray(std::vector<vtkSmartPointer<vtkDataArray> > arrays_);
      -
      36 
      -
      37  typedef std::vector<vtkSmartPointer<vtkDataArray> > RawArrayType;
      -
      38 
      -
      39  virtual ~GmmVtkDataArray() { }
      -
      40 
      -
      41  virtual size_t getLength() { return length; }
      -
      42 
      -
      43  virtual int getNumComponents() { return this->components; }
      -
      44 
      -
      45  virtual dist::Variant getScalar(size_t idx);
      -
      46 
      -
      47  virtual std::vector<dist::Variant> getVector(size_t idx);
      -
      48 
      -
      49  virtual boost::any getItem(size_t idx);
      -
      50 
      -
      51  virtual void setItem(size_t idx, int component, const boost::any &item);
      -
      52 
      -
      53  virtual boost::any getRawArray() { return boost::any(arrays); }
      -
      54 
      -
      55  std::shared_ptr<GmmArray> genNdArray() ;
      -
      56 };
      -
      57 
      -
      58 } // namespace edda
      -
      59 
      -
      60 #endif // GMM_VTK_ARRAY_H
      -
      Definition: variant.h:18
      - - -
      virtual std::vector< dist::Variant > getVector(size_t idx)
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef GMM_VTK_ARRAY_H
      6 #define GMM_VTK_ARRAY_H
      7 
      8 #include <vector>
      9 #include <stdexcept>
      10 #include <string>
      11 
      12 #include <vtkImageData.h>
      13 #include <vtkSmartPointer.h>
      14 #include <vtkDataArray.h>
      15 #include <vtkFloatArray.h>
      16 #include <vtkPointData.h>
      17 #include <vtkCellData.h>
      18 #include <vtkFieldData.h>
      19 #include <vtkStructuredGrid.h>
      20 
      22 #include <dataset/distr_array.h>
      23 #include <core/thrust_gmm_array.h>
      24 
      25 namespace edda {
      26 
      27 //---------------------------------------------------------------------------------------
      28 
      31 {
      32 protected:
      33  std::vector<vtkSmartPointer<vtkDataArray> > arrays;
      34 
      35  size_t length = 0;
      36  int components = 1;
      38 public:
      39  GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="") ;
      40 
      43  GmmVtkDataArray(std::vector<vtkSmartPointer<vtkDataArray> > arrays_);
      44 
      45  typedef std::vector<vtkSmartPointer<vtkDataArray> > RawArrayType;
      46 
      47  virtual ~GmmVtkDataArray();
      48 
      49  virtual size_t getLength();
      50 
      51  virtual int getNumComponents() ;
      52 
      53  virtual void SetTargetComponent(int idx) {target_comp = idx;}
      54 
      55  virtual int GetTargetComponent() {return target_comp;}
      56 
      57  virtual dist::Variant getDistr(size_t idx);
      58 
      59  virtual std::vector<dist::Variant> getDistrVector(size_t idx);
      60 
      61  virtual Real getScalar(size_t idx);
      62 
      63  virtual std::vector<Real> getVector(size_t idx);
      64 
      65  virtual boost::any getRawArray() { return boost::any(arrays); }
      66 
      67  std::shared_ptr<GmmArray> genNdArray() ;
      68 
      69  virtual std::string getDistrName() {
      70  std::stringstream ss;
      71  ss << "GaussianMixture" << MAX_GMs;
      72  return ss.str();
      73  }
      74 };
      75 
      76 } // namespace edda
      77 
      78 #endif // GMM_VTK_ARRAY_H
      virtual std::string getDistrName()
      Definition: gmm_vtk_data_array.h:69
      +
      Definition: variant.h:25
      + +
      virtual Real getScalar(size_t idx)
      +
      virtual void SetTargetComponent(int idx)
      Definition: gmm_vtk_data_array.h:53
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      The class interface of distrbution arrays used by the Dataset class.
      Definition: distr_array.h:24
      GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="")
      - -
      The AbstractDataArray class used in the Dataset class.
      Definition: abstract_data_array.h:12
      -
      virtual ~GmmVtkDataArray()
      Definition: gmm_vtk_data_array.h:39
      -
      size_t length
      Definition: gmm_vtk_data_array.h:28
      -
      virtual int getNumComponents()
      Definition: gmm_vtk_data_array.h:43
      -
      virtual void setItem(size_t idx, int component, const boost::any &item)
      -
      virtual boost::any getItem(size_t idx)
      Get data at the given index.
      -
      virtual boost::any getRawArray()
      Definition: gmm_vtk_data_array.h:53
      -
      int components
      Definition: gmm_vtk_data_array.h:29
      +
      virtual ~GmmVtkDataArray()
      +
      size_t length
      Definition: gmm_vtk_data_array.h:35
      +
      virtual int getNumComponents()
      + +
      virtual boost::any getRawArray()
      Definition: gmm_vtk_data_array.h:65
      +
      #define MAX_GMs
      Definition: common.h:54
      +
      int components
      Definition: gmm_vtk_data_array.h:36
      std::shared_ptr< GmmArray > genNdArray()
      -
      virtual size_t getLength()
      Definition: gmm_vtk_data_array.h:41
      -
      std::vector< vtkSmartPointer< vtkDataArray > > arrays
      Definition: gmm_vtk_data_array.h:26
      +
      virtual int GetTargetComponent()
      Definition: gmm_vtk_data_array.h:55
      +
      virtual size_t getLength()
      +
      virtual std::vector< dist::Variant > getDistrVector(size_t idx)
      +
      std::vector< vtkSmartPointer< vtkDataArray > > arrays
      Definition: gmm_vtk_data_array.h:33
      -
      std::vector< vtkSmartPointer< vtkDataArray > > RawArrayType
      Definition: gmm_vtk_data_array.h:37
      -
      GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved...
      Definition: gmm_vtk_data_array.h:23
      -
      virtual dist::Variant getScalar(size_t idx)
      +
      float Real
      Definition: common.h:28
      +
      std::vector< vtkSmartPointer< vtkDataArray > > RawArrayType
      Definition: gmm_vtk_data_array.h:45
      +
      GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved...
      Definition: gmm_vtk_data_array.h:30
      +
      virtual std::vector< Real > getVector(size_t idx)
      +
      int target_comp
      Definition: gmm_vtk_data_array.h:37
      +
      virtual dist::Variant getDistr(size_t idx)
      diff --git a/html/grid_8cpp.html b/html/grid_8cpp.html index 20282a4..a233109 100644 --- a/html/grid_8cpp.html +++ b/html/grid_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: src/dataset/grid.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -93,15 +69,15 @@
      grid.cpp File Reference
      -
      #include <iostream>
      -#include <cfloat>
      -#include "grid.h"
      -#include "core/interpolator.h"
      +
      #include <iostream>
      +#include <cfloat>
      +#include "grid.h"
      +#include "core/interpolator.h"
      - - + +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
      ",""],legend:[1,"
      ","
      "],thead:[1,"

      @@ -112,9 +88,9 @@ diff --git a/html/grid_8h.html b/html/grid_8h.html index 10c6520..614c9a9 100644 --- a/html/grid_8h.html +++ b/html/grid_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/dataset/grid.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -97,45 +73,46 @@
      grid.h File Reference
      -
      #include <cassert>
      -#include <vector>
      -#include <boost/any.hpp>
      -#include "common.h"
      -#include "core/interpolator.h"
      -#include "core/vector_matrix.h"
      +
      #include <cassert>
      +#include <vector>
      +#include <boost/any.hpp>
      +#include "common.h"
      +#include "core/interpolator.h"
      +#include "core/vector_matrix.h"
      +#include "edda_export.h"

      Go to the source code of this file.

      - + - + - +

      Classes

      struct  edda::PointInfo
       about the advection point More...
       about the advection point More...
       
      class  edda::Grid
       base class for grid More...
       base class for grid More...
       
      class  edda::CartesianGrid
       Cartesian Grid (Regular and Irregular) More...
       Cartesian Grid (Regular and Irregular) More...
       
      class  edda::RegularCartesianGrid
       
      - - + +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
      - - + +

      Macros

      #define UCGridPhy2Comp(x, y, f)   (((x) - (y))*(f))
       regular cartesian grid More...
      #define UCGridPhy2Comp(x, y, f)   (((x) - (y))*(f))
       regular cartesian grid More...
       
      - +

      Typedefs

      typedef struct edda::PointInfo edda::PointInfo
       about the advection point More...
       about the advection point More...
       

      @@ -157,7 +134,9 @@

       

      Macro Definition Documentation

      - + +

      § UCGridPhy2Comp

      +
      @@ -194,9 +173,9 @@

      Macro Definition Documentation

      diff --git a/html/grid_8h_source.html b/html/grid_8h_source.html index 9ef4b3c..cf66a1e 100644 --- a/html/grid_8h_source.html +++ b/html/grid_8h_source.html @@ -3,16 +3,15 @@ - + +EDDA: src/dataset/grid.h Source File + - @@ -21,7 +20,7 @@
      - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -90,413 +66,54 @@
      grid.h
      -Go to the documentation of this file.
      1 //
      -
      3 // OSU Flow Vis Library
      -
      4 // Created: Han-Wei Shen, Liya Li
      -
      5 // The Ohio State University
      -
      6 // Date: 06/2005
      -
      7 // Streamlines
      -
      8 //
      -
      10 
      -
      11 #ifndef _GRID_H_
      -
      12 #define _GRID_H_
      -
      13 
      -
      14 #include <cassert>
      -
      15 #include <vector>
      -
      16 #include <boost/any.hpp>
      -
      17 #include "common.h"
      -
      18 #include "core/interpolator.h"
      -
      19 #include "core/vector_matrix.h"
      -
      20 //#include "Cell.h"
      -
      21 
      -
      22 namespace edda{
      -
      23 
      -
      24 enum CellType {
      - - - - -
      29 };
      -
      30 
      -
      31 enum InterpType {
      - - -
      34 };
      -
      35 
      -
      36 
      -
      37 
      -
      41 typedef struct PointInfo
      -
      42 {
      - -
      44  VECTOR3 interpolant; // interpolation coefficients
      -
      45  int fromCell; // advecting result from which cell, mainly used for unstructured grid
      -
      46  int inCell; // in which cell
      -
      47 
      - -
      49  {
      -
      50  fromCell = inCell = -1;
      -
      51  }
      -
      52 
      -
      53  PointInfo(const VECTOR3& pcoord, const VECTOR3& coeff, int fCell, int iCell)
      -
      54  {
      -
      55  phyCoord = pcoord;
      -
      56  interpolant = coeff;
      -
      57  fromCell = fCell;
      -
      58  inCell = iCell;
      -
      59  }
      -
      60 }PointInfo;
      -
      61 
      -
      67 class Grid
      -
      68 {
      -
      69 public:
      -
      70  Grid() {}
      -
      71  virtual ~Grid() {}
      -
      72  // physical coordinate of vertex verIdx
      -
      73  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos) = 0;
      -
      74  // Return interpolation result
      -
      75  //virtual ReturnStatus at_phys(VECTOR3& pos, AbstractDataArray *array, boost::any output) = 0;
      -
      76  // get vertex list of a cell
      -
      77  virtual ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices) = 0;
      -
      78  // get the cell id and also interpolating coefficients for the given physical position
      -
      79  virtual ReturnStatus phys_to_cell(PointInfo& pInfo) = 0;
      -
      80  // interpolation: replaced by templated interpolator
      -
      81  //virtual ReturnStatus interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output) = 0;
      -
      82  // the volume of cell
      -
      83  virtual double cellVolume(int cellId) = 0;
      -
      84  // type of cell
      -
      85  virtual CellType getCellType() = 0;
      -
      86  // how to interpolate
      -
      87  virtual InterpType getInterpType() = 0;
      -
      88  // get min and maximal boundary
      -
      89  virtual void boundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      -
      90  // set bounding box
      -
      91  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      -
      92  // get grid spacing in x,y,z dimensions
      -
      93  virtual void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) = 0;
      -
      94  // boundary intersection
      -
      95  virtual void boundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      -
      96  VECTOR3& endP,float* stepSize, float oldStepSize) = 0;
      -
      97  // whether the point is in the bounding box
      -
      98  virtual bool isInBBox(VECTOR3& pos) = 0;
      -
      99  // whether the point is in the bounding box not counting ghost cells
      -
      100  virtual bool isInRealBBox(VECTOR3& p) = 0;
      -
      101  virtual bool isInRealBBox(VECTOR3& pos, float t) = 0;
      -
      102 
      -
      103 protected:
      -
      104  // reset parameters
      -
      105  virtual void Reset(void) = 0;
      -
      106  // compute bounding box
      -
      107  virtual void computeBBox(void) = 0;
      -
      108  // whether in a cell
      -
      109  virtual bool isInCell(PointInfo& pInfo, const int cellId) = 0;
      -
      110 };
      -
      111 
      -
      117 class CartesianGrid : public Grid
      -
      118 {
      -
      119 public:
      -
      120  // constructor and destructor
      -
      121  CartesianGrid(int xdim, int ydim, int zdim);
      -
      122  CartesianGrid();
      -
      123  ~CartesianGrid();
      -
      124 
      -
      125  // get dimensions
      -
      126  virtual int *getDimension() ;
      -
      127  // physical coordinate of vertex verIdx
      -
      128  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos) =0;
      -
      129  // Return interpolation result
      -
      130  virtual ReturnStatus getIndex(int i, int j, int k, size_t &idx);
      -
      131  // get vertex list of a cell
      -
      132  virtual ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices) =0;
      -
      133  // get the cell id and also interpolating coefficients for the given physical position
      -
      134  virtual ReturnStatus phys_to_cell(PointInfo& pInfo) =0;
      -
      135 
      -
      136  // interpolation
      -
      137  //template <class T>
      -
      138  //virtual void interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output) = 0;
      -
      139  // the volume of cell
      -
      140  virtual double cellVolume(int cellId) = 0;
      -
      141  // type of cell
      -
      142  virtual CellType getCellType() = 0;
      -
      143  // how to interpolate
      -
      144  virtual InterpType getInterpType() { return TRI_LERP; }
      -
      145  // get min and maximal boundary
      -
      146  virtual void boundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      -
      147  // set bounding box (includes ghost cells)
      -
      148  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      -
      149  // set bounding box (does not include ghost cells)
      -
      150  virtual void setRealBoundary(VECTOR4& minB, VECTOR4& maxB) = 0;
      -
      151  // get grid spacing in x,y,z dimensions
      -
      152  virtual void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) = 0;
      -
      153  // boundary intersection
      -
      154  virtual void boundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      -
      155  VECTOR3& endP,float* stepSize, float oldStepSize) = 0;
      -
      156 protected:
      -
      157  // reset parameters
      -
      158  void Reset(void);
      -
      159  // dimension related
      -
      160  inline int xdim(void) { return m_nDimension[0];}
      -
      161  inline int ydim(void) { return m_nDimension[1];}
      -
      162  inline int zdim(void) { return m_nDimension[2];}
      -
      163  inline int xcelldim(void) {return (m_nDimension[0] - 1);}
      -
      164  inline int ycelldim(void) {return (m_nDimension[1] - 1);}
      -
      165  inline int zcelldim(void) {return (m_nDimension[2] - 1);}
      -
      166 
      -
      167  int m_nDimension[3]; // dimension
      -
      168 
      -
      169  // min and maximal boundary (includes ghost cells)
      - -
      171 
      -
      172  // min and maximal boundary (does not include ghost cells)
      - -
      174 };
      -
      175 
      -
      181 // map coordinates in computational space to physical space
      -
      182 #define UCGridPhy2Comp(x, y, f) (((x) - (y))*(f))
      -
      183 
      - -
      185 {
      -
      186 private:
      -
      187  float mappingFactorX; // mapping from physical space to computational space
      -
      188  float mappingFactorY;
      -
      189  float mappingFactorZ;
      -
      190  float oneOvermappingFactorX;
      -
      191  float oneOvermappingFactorY;
      -
      192  float oneOvermappingFactorZ;
      -
      193  float gridSpacing; // the minimal grid spacing of all dimensions
      -
      194 
      -
      195 public:
      -
      196  RegularCartesianGrid(int xdim, int ydim, int zdim);
      - - -
      199  // physical coordinate of vertex verIdx
      -
      200  ReturnStatus at_vertex(int verIdx, VECTOR3& pos);
      -
      201  // Return interpolation result
      -
      202  //ReturnStatus at_phys(VECTOR3& pos, AbstractDataArray *array, boost::any output) ;
      -
      203  // get vertex list of a cell
      -
      204  ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices);
      -
      205  // get the cell id and also interpolating coefficients for the given physical position
      - -
      207  // the volume of cell
      -
      208  double cellVolume(int cellId);
      -
      209  // cell type
      - -
      211  // set bounding box (includes ghost cells)
      -
      212  void setBoundary(VECTOR3& minB, VECTOR3& maxB);
      -
      213  // set bounding box (does not include ghost cells)
      -
      214  void setRealBoundary(VECTOR4& minB, VECTOR4& maxB);
      -
      215  // get min and maximal boundary
      -
      216  void boundary(VECTOR3& minB, VECTOR3& maxB);
      -
      217  // get grid spacing in x,y,z dimensions
      -
      218  void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace)
      -
      219  { xspace = oneOvermappingFactorX; yspace = oneOvermappingFactorY; zspace = oneOvermappingFactorZ; }
      -
      220  void boundaryIntersection(VECTOR3&, VECTOR3&, VECTOR3&, float*, float);
      -
      221  // whether the point is in the bounding box
      -
      222  bool isInBBox(VECTOR3& pos);
      -
      223  // whether the point is in the bounding box (not counting ghost cells)
      -
      224  bool isInRealBBox(VECTOR3& pos);
      -
      225  bool isInRealBBox(VECTOR3& pos, float t);
      -
      226 
      -
      227 
      -
      228 protected:
      -
      229  void reset(void);
      -
      230  // compute bounding box
      -
      231  void computeBBox(void);
      -
      232  // whether in a cell
      -
      233  bool isInCell(PointInfo& pInfo, const int cellId);
      -
      234 };
      -
      235 
      -
      236 /*
      -
      237 //Comment the following code out since they have not been implemented
      -
      238 //
      -
      240 //
      -
      241 // irregular cartesian grid
      -
      242 //
      -
      244 class IrregularCartesianGrid : public CartesianGrid
      -
      245 {
      -
      246 private:
      -
      247  float* m_pXSpacing; // space array for x, y, z dimension
      -
      248  float* m_pYSpacing;
      -
      249  float* m_pZSpacing;
      -
      250 
      -
      251 public:
      -
      252  IrregularCartesianGrid(int xdim, int ydim, int zdim);
      -
      253  IrregularCartesianGrid();
      -
      254  ~IrregularCartesianGrid();
      -
      255 
      -
      256 protected:
      -
      257  void Reset(void);
      -
      258 };
      -
      259 
      -
      261 //
      -
      262 // curvilinear grid
      -
      263 //
      -
      265 class CurvilinearGrid : public Grid
      -
      266 {
      -
      267 private:
      -
      268  int m_nDimension[3]; // dimension
      -
      269 
      -
      270 public:
      -
      271  // constructor and deconstructor
      -
      272  CurvilinearGrid(int xdim, int ydim, int zdim);
      -
      273  CurvilinearGrid();
      -
      274  ~CurvilinearGrid();
      -
      275 };
      -
      276 
      -
      277 */
      -
      278 
      -
      279 #if 0
      -
      280 //
      -
      282 // irregular grid
      -
      283 //
      -
      285 class IrregularGrid : public Grid
      -
      286 {
      -
      287 private:
      -
      288  int m_nNodeNum; // number of nodes
      -
      289  int m_nTetraNum; // number of tetras
      -
      290  CVertex* m_pVertexGeom; // geometry of all vertices
      -
      291  CTetra* m_pTetra; // tetra
      -
      292  TetraInfo* m_pTetraInfo; // pre-computed tetra information
      -
      293  TVertex* m_pVertexTopo; // vertex topology
      -
      294  VECTOR3 m_vMinBound, m_vMaxBound; // min and maximal boundary
      -
      295  bool m_bTetraInfoInit; // whether the tetra information is pre-computed
      -
      296 
      -
      297 public:
      -
      298  // constructor and deconstructor
      -
      299  IrregularGrid();
      -
      300  IrregularGrid(int nodeNum, int tetraNum, CVertex* pVertexGeom, CTetra* pTetra, TVertex* pVertexTopo);
      -
      301  ~IrregularGrid();
      -
      302 
      -
      303  // from virtual functions
      -
      304  virtual void reset(void);
      -
      305  virtual void getDimension(int& xdim, int& ydim, int& zdim) ;
      -
      306  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos);
      -
      307  //virtual bool at_phys(VECTOR3& pos);
      -
      308  virtual ReturnStatus getCellVertices(int cellId, std::vector<int>& vVertices);
      -
      309  virtual ReturnStatus phys_to_cell(PointInfo& pInfo);
      -
      310  //virtual void interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output);
      -
      311  virtual double cellVolume(int cellId);
      -
      312  virtual bool isInCell(PointInfo& pInfo, const int cellId);
      -
      313  virtual CellType getCellType() {return TETRAHEDRON;}
      -
      314 
      -
      315  virtual void computeBBox(void);
      -
      316  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB);
      -
      317  virtual void boundary(VECTOR3& minB, VECTOR3& maxB);
      -
      318  virtual bool isInBBox(VECTOR3& pos);
      -
      319  virtual bool isInRealBBox(VECTOR3& pos);
      -
      320  virtual bool isInRealBBox(VECTOR3& pos, float t);
      -
      321 
      -
      322  // irregular specific functions
      -
      323  virtual void SetTetraInfoInit(bool bInit);
      -
      324  virtual bool GetTetraInfoInit(void);
      -
      325  virtual int nextTetra(PointInfo& pInfo, int tetraId);
      -
      326  virtual void PreGetP2NMatrix(MATRIX3& m, int cellId);
      -
      327  virtual bool Physical2NaturalCoord(VECTOR3& nCoord, VECTOR3& pCoord, int cellId);
      -
      328 
      -
      329  virtual void GetGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) {assert(false);}
      -
      330  virtual void BoundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      -
      331  VECTOR3& endP,float* stepSize, float oldStepSize){assert(false);}
      -
      332 
      -
      333 };
      -
      334 
      -
      335 #endif
      -
      336 float getStepSize(VECTOR3& p, VECTOR3& p1, VECTOR3& p2, float oldStepSize);
      -
      337 
      -
      338 } // namesapce edda
      -
      339 #endif
      -
      int ycelldim(void)
      Definition: grid.h:164
      -
      virtual void Reset(void)=0
      -
      ReturnStatus at_vertex(int verIdx, VECTOR3 &pos)
      Definition: grid.cpp:233
      -
      virtual bool isInCell(PointInfo &pInfo, const int cellId)=0
      -
      base class for grid
      Definition: grid.h:67
      -
      void setBoundary(VECTOR3 &minB, VECTOR3 &maxB)
      Definition: grid.cpp:107
      -
      bool isInCell(PointInfo &pInfo, const int cellId)
      Definition: grid.cpp:264
      -
      void Reset(void)
      Definition: grid.cpp:45
      -
      virtual void getGridSpacing(int cellId, float &xspace, float &yspace, float &zspace)=0
      -
      bool isInBBox(VECTOR3 &pos)
      Definition: grid.cpp:137
      -
      int m_nDimension[3]
      Definition: grid.h:167
      -
      RegularCartesianGrid()
      Definition: grid.cpp:73
      -
      virtual ReturnStatus phys_to_cell(PointInfo &pInfo)=0
      -
      virtual double cellVolume(int cellId)=0
      -
      virtual int * getDimension()
      Definition: grid.cpp:50
      -
      void boundaryIntersection(VECTOR3 &, VECTOR3 &, VECTOR3 &, float *, float)
      Definition: grid.cpp:362
      -
      virtual void boundary(VECTOR3 &minB, VECTOR3 &maxB)=0
      -
      ReturnStatus phys_to_cell(PointInfo &pInfo)
      Definition: grid.cpp:302
      -
      VECTOR3 phyCoord
      Definition: grid.h:43
      -
      Specialization of Vector3 for higher performance.
      Definition: vector_matrix.h:92
      -
      virtual ReturnStatus getCellVertices(int cellId, std::vector< size_t > &vVertices)=0
      -
      virtual void getGridSpacing(int cellId, float &xspace, float &yspace, float &zspace)=0
      -
      Grid()
      Definition: grid.h:70
      -
      int zcelldim(void)
      Definition: grid.h:165
      -
      int fromCell
      Definition: grid.h:45
      -
      int xdim(void)
      Definition: grid.h:160
      -
      CellType
      Definition: grid.h:24
      -
      VECTOR3 m_vMinBound
      Definition: grid.h:170
      -
      virtual ReturnStatus getIndex(int i, int j, int k, size_t &idx)
      Definition: grid.cpp:55
      -
      virtual ~Grid()
      Definition: grid.h:71
      -
      PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)
      Definition: grid.h:53
      -
      virtual ReturnStatus getCellVertices(int cellId, std::vector< size_t > &vVertices)=0
      -
      Definition: grid.h:184
      -
      ReturnStatus
      Definition: common.h:32
      -
      ReturnStatus getCellVertices(int cellId, std::vector< size_t > &vVertices)
      Definition: grid.cpp:201
      -
      PointInfo()
      Definition: grid.h:48
      -
      Definition: grid.h:25
      -
      bool isInRealBBox(VECTOR3 &pos)
      Definition: grid.cpp:150
      -
      virtual void setBoundary(VECTOR3 &minB, VECTOR3 &maxB)=0
      -
      Definition: grid.h:26
      -
      void computeBBox(void)
      Definition: grid.cpp:172
      -
      InterpType
      Definition: grid.h:31
      -
      Specialization of Vector4 for higher performance.
      Definition: vector_matrix.h:128
      -
      Definition: grid.h:33
      -
      virtual CellType getCellType()=0
      -
      virtual ReturnStatus at_vertex(int verIdx, VECTOR3 &pos)=0
      -
      float getStepSize(VECTOR3 &p, VECTOR3 &p1, VECTOR3 &p2, float oldStepSize)
      Definition: grid.cpp:1144
      -
      virtual bool isInRealBBox(VECTOR3 &p)=0
      -
      virtual void computeBBox(void)=0
      -
      VECTOR3 m_vMaxBound
      Definition: grid.h:170
      -
      virtual void setBoundary(VECTOR3 &minB, VECTOR3 &maxB)=0
      -
      virtual double cellVolume(int cellId)=0
      -
      ~CartesianGrid()
      Definition: grid.cpp:41
      -
      VECTOR4 m_vMaxRealBound
      Definition: grid.h:173
      -
      void setRealBoundary(VECTOR4 &minB, VECTOR4 &maxB)
      Definition: grid.cpp:128
      -
      Definition: grid.h:28
      -
      Definition: grid.h:32
      -
      CartesianGrid()
      Definition: grid.cpp:36
      -
      virtual CellType getCellType()=0
      -
      Definition: grid.h:27
      -
      virtual ReturnStatus phys_to_cell(PointInfo &pInfo)=0
      -
      int ydim(void)
      Definition: grid.h:161
      -
      void getGridSpacing(int cellId, float &xspace, float &yspace, float &zspace)
      Definition: grid.h:218
      +Go to the documentation of this file.
      1 //
      3 // OSU Flow Vis Library
      4 // Created: Han-Wei Shen, Liya Li
      5 // The Ohio State University
      6 // Date: 06/2005
      7 // Streamlines
      8 //
      10 
      11 #ifndef EDDA_GRID_H_
      12 #define EDDA_GRID_H_
      13 
      14 #include <cassert>
      15 #include <vector>
      16 #include <boost/any.hpp>
      17 #include "common.h"
      18 #include "core/interpolator.h"
      19 #include "core/vector_matrix.h"
      20 #include "edda_export.h"
      21 //#include "Cell.h"
      22 
      23 namespace edda{
      24 
      25 enum CellType {
      30 };
      31 
      32 enum InterpType {
      35 };
      36 
      37 
      38 
      42 typedef struct PointInfo
      43 {
      45  VECTOR3 interpolant; // interpolation coefficients
      46  int fromCell; // advecting result from which cell, mainly used for unstructured grid
      47  int inCell; // in which cell
      48 
      50  {
      51  fromCell = inCell = -1;
      52  }
      53 
      54  PointInfo(const VECTOR3& pcoord, const VECTOR3& coeff, int fCell, int iCell)
      55  {
      56  phyCoord = pcoord;
      57  interpolant = coeff;
      58  fromCell = fCell;
      59  inCell = iCell;
      60  }
      61 }PointInfo;
      62 
      69 {
      70 public:
      71  Grid() {}
      72  virtual ~Grid() {}
      73  // physical coordinate of vertex verIdx
      74  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos) = 0;
      75  // Return interpolation result
      76  //virtual ReturnStatus at_phys(VECTOR3& pos, AbstractDataArray *array, boost::any output) = 0;
      77  // get vertex list of a cell
      78  virtual ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices) = 0;
      79  // get the cell id and also interpolating coefficients for the given physical position
      80  virtual ReturnStatus phys_to_cell(PointInfo& pInfo) = 0;
      81  // interpolation: replaced by templated interpolator
      82  //virtual ReturnStatus interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output) = 0;
      83  // the volume of cell
      84  virtual double cellVolume(int cellId) = 0;
      85  // type of cell
      86  virtual CellType getCellType() = 0;
      87  // how to interpolate
      88  virtual InterpType getInterpType() = 0;
      89  // get min and maximal boundary
      90  virtual void boundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      91  // set bounding box
      92  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      93  // get grid spacing in x,y,z dimensions
      94  virtual void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) = 0;
      95  // boundary intersection
      96  virtual void boundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      97  VECTOR3& endP,float* stepSize, float oldStepSize) = 0;
      98  // whether the point is in the bounding box
      99  virtual bool isInBBox(VECTOR3& pos) = 0;
      100  // whether the point is in the bounding box not counting ghost cells
      101  virtual bool isInRealBBox(VECTOR3& p) = 0;
      102  virtual bool isInRealBBox(VECTOR3& pos, float t) = 0;
      103 
      104 protected:
      105  // reset parameters
      106  virtual void Reset(void) = 0;
      107  // compute bounding box
      108  virtual void computeBBox(void) = 0;
      109  // whether in a cell
      110  virtual bool isInCell(PointInfo& pInfo, const int cellId) = 0;
      111 };
      112 
      118 class CartesianGrid : public Grid
      119 {
      120 public:
      121  // constructor and destructor
      122  CartesianGrid(int xdim, int ydim, int zdim);
      123  CartesianGrid();
      124  ~CartesianGrid();
      125 
      126  // get dimensions
      127  virtual int *getDimension() ;
      128  // physical coordinate of vertex verIdx
      129  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos) =0;
      130  // Return interpolation result
      131  virtual ReturnStatus getIndex(int i, int j, int k, size_t &idx);
      132  // get vertex list of a cell
      133  virtual ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices) =0;
      134  // get the cell id and also interpolating coefficients for the given physical position
      135  virtual ReturnStatus phys_to_cell(PointInfo& pInfo) =0;
      136 
      137  // interpolation
      138  //template <class T>
      139  //virtual void interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output) = 0;
      140  // the volume of cell
      141  virtual double cellVolume(int cellId) = 0;
      142  // type of cell
      143  virtual CellType getCellType() = 0;
      144  // how to interpolate
      145  virtual InterpType getInterpType() { return TRI_LERP; }
      146  // get min and maximal boundary
      147  virtual void boundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      148  // set bounding box (includes ghost cells)
      149  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB) = 0;
      150  // set bounding box (does not include ghost cells)
      151  virtual void setRealBoundary(VECTOR4& minB, VECTOR4& maxB) = 0;
      152  // get grid spacing in x,y,z dimensions
      153  virtual void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) = 0;
      154  // boundary intersection
      155  virtual void boundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      156  VECTOR3& endP,float* stepSize, float oldStepSize) = 0;
      157 protected:
      158  // reset parameters
      159  void Reset(void);
      160  // dimension related
      161  inline int xdim(void) { return m_nDimension[0];}
      162  inline int ydim(void) { return m_nDimension[1];}
      163  inline int zdim(void) { return m_nDimension[2];}
      164  inline int xcelldim(void) {return (m_nDimension[0] - 1);}
      165  inline int ycelldim(void) {return (m_nDimension[1] - 1);}
      166  inline int zcelldim(void) {return (m_nDimension[2] - 1);}
      167 
      168  int m_nDimension[3]; // dimension
      169 
      170  // min and maximal boundary (includes ghost cells)
      171  VECTOR3 m_vMinBound, m_vMaxBound;
      172 
      173  // min and maximal boundary (does not include ghost cells)
      174  VECTOR4 m_vMinRealBound, m_vMaxRealBound;
      175 };
      176 
      182 // map coordinates in computational space to physical space
      183 #define UCGridPhy2Comp(x, y, f) (((x) - (y))*(f))
      184 
      186 {
      187 private:
      188  float mappingFactorX; // mapping from physical space to computational space
      189  float mappingFactorY;
      190  float mappingFactorZ;
      191  float oneOvermappingFactorX;
      192  float oneOvermappingFactorY;
      193  float oneOvermappingFactorZ;
      194  float gridSpacing; // the minimal grid spacing of all dimensions
      195 
      196 public:
      197  RegularCartesianGrid(int xdim, int ydim, int zdim);
      200  // physical coordinate of vertex verIdx
      201  ReturnStatus at_vertex(int verIdx, VECTOR3& pos);
      202  // Return interpolation result
      203  //ReturnStatus at_phys(VECTOR3& pos, AbstractDataArray *array, boost::any output) ;
      204  // get vertex list of a cell
      205  ReturnStatus getCellVertices(int cellId, std::vector<size_t>& vVertices);
      206  // get the cell id and also interpolating coefficients for the given physical position
      207  ReturnStatus phys_to_cell(PointInfo& pInfo);
      208  // the volume of cell
      209  double cellVolume(int cellId);
      210  // cell type
      212  // set bounding box (includes ghost cells)
      213  void setBoundary(VECTOR3& minB, VECTOR3& maxB);
      214  // set bounding box (does not include ghost cells)
      215  void setRealBoundary(VECTOR4& minB, VECTOR4& maxB);
      216  // get min and maximal boundary
      217  void boundary(VECTOR3& minB, VECTOR3& maxB);
      218  // get grid spacing in x,y,z dimensions
      219  void getGridSpacing(int cellId, float& xspace, float& yspace, float& zspace)
      220  { xspace = oneOvermappingFactorX; yspace = oneOvermappingFactorY; zspace = oneOvermappingFactorZ; }
      221  void boundaryIntersection(VECTOR3&, VECTOR3&, VECTOR3&, float*, float);
      222  // whether the point is in the bounding box
      223  bool isInBBox(VECTOR3& pos);
      224  // whether the point is in the bounding box (not counting ghost cells)
      225  bool isInRealBBox(VECTOR3& pos);
      226  bool isInRealBBox(VECTOR3& pos, float t);
      227 
      228 
      229 protected:
      230  void reset(void);
      231  // compute bounding box
      232  void computeBBox(void);
      233  // whether in a cell
      234  bool isInCell(PointInfo& pInfo, const int cellId);
      235 };
      236 
      237 /*
      238 //Comment the following code out since they have not been implemented
      239 //
      241 //
      242 // irregular cartesian grid
      243 //
      245 class IrregularCartesianGrid : public CartesianGrid
      246 {
      247 private:
      248  float* m_pXSpacing; // space array for x, y, z dimension
      249  float* m_pYSpacing;
      250  float* m_pZSpacing;
      251 
      252 public:
      253  IrregularCartesianGrid(int xdim, int ydim, int zdim);
      254  IrregularCartesianGrid();
      255  ~IrregularCartesianGrid();
      256 
      257 protected:
      258  void Reset(void);
      259 };
      260 
      262 //
      263 // curvilinear grid
      264 //
      266 class CurvilinearGrid : public Grid
      267 {
      268 private:
      269  int m_nDimension[3]; // dimension
      270 
      271 public:
      272  // constructor and deconstructor
      273  CurvilinearGrid(int xdim, int ydim, int zdim);
      274  CurvilinearGrid();
      275  ~CurvilinearGrid();
      276 };
      277 
      278 */
      279 
      280 
      281 #if 0
      282 //
      284 // irregular grid
      285 //
      287 class IrregularGrid : public Grid
      288 {
      289 private:
      290  int m_nNodeNum; // number of nodes
      291  int m_nTetraNum; // number of tetras
      292  CVertex* m_pVertexGeom; // geometry of all vertices
      293  CTetra* m_pTetra; // tetra
      294  TetraInfo* m_pTetraInfo; // pre-computed tetra information
      295  TVertex* m_pVertexTopo; // vertex topology
      296  VECTOR3 m_vMinBound, m_vMaxBound; // min and maximal boundary
      297  bool m_bTetraInfoInit; // whether the tetra information is pre-computed
      298 
      299 public:
      300  // constructor and deconstructor
      301  IrregularGrid();
      302  IrregularGrid(int nodeNum, int tetraNum, CVertex* pVertexGeom, CTetra* pTetra, TVertex* pVertexTopo);
      303  ~IrregularGrid();
      304 
      305  // from virtual functions
      306  virtual void reset(void);
      307  virtual void getDimension(int& xdim, int& ydim, int& zdim) ;
      308  virtual ReturnStatus at_vertex(int verIdx, VECTOR3& pos);
      309  //virtual bool at_phys(VECTOR3& pos);
      310  virtual ReturnStatus getCellVertices(int cellId, std::vector<int>& vVertices);
      311  virtual ReturnStatus phys_to_cell(PointInfo& pInfo);
      312  //virtual void interpolate(std::vector<boost::any>& vData, VECTOR3 coeff, boost::any &output);
      313  virtual double cellVolume(int cellId);
      314  virtual bool isInCell(PointInfo& pInfo, const int cellId);
      315  virtual CellType getCellType() {return TETRAHEDRON;}
      316 
      317  virtual void computeBBox(void);
      318  virtual void setBoundary(VECTOR3& minB, VECTOR3& maxB);
      319  virtual void boundary(VECTOR3& minB, VECTOR3& maxB);
      320  virtual bool isInBBox(VECTOR3& pos);
      321  virtual bool isInRealBBox(VECTOR3& pos);
      322  virtual bool isInRealBBox(VECTOR3& pos, float t);
      323 
      324  // irregular specific functions
      325  virtual void SetTetraInfoInit(bool bInit);
      326  virtual bool GetTetraInfoInit(void);
      327  virtual int nextTetra(PointInfo& pInfo, int tetraId);
      328  virtual void PreGetP2NMatrix(MATRIX3& m, int cellId);
      329  virtual bool Physical2NaturalCoord(VECTOR3& nCoord, VECTOR3& pCoord, int cellId);
      330 
      331  virtual void GetGridSpacing(int cellId, float& xspace, float& yspace, float& zspace) {assert(false);}
      332  virtual void BoundaryIntersection(VECTOR3& intersectP, VECTOR3& startP,
      333  VECTOR3& endP,float* stepSize, float oldStepSize){assert(false);}
      334 
      335 };
      336 
      337 #endif
      338 float getStepSize(VECTOR3& p, VECTOR3& p1, VECTOR3& p2, float oldStepSize);
      339 
      340 } // namesapce edda
      341 #endif
      int ycelldim(void)
      Definition: grid.h:165
      +
      base class for grid
      Definition: grid.h:68
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      VECTOR3 phyCoord
      Definition: grid.h:44
      +
      Specialization of Vector3 for higher performance.
      Definition: vector_matrix.h:101
      +
      Grid()
      Definition: grid.h:71
      +
      int zcelldim(void)
      Definition: grid.h:166
      +
      int fromCell
      Definition: grid.h:46
      +
      int xdim(void)
      Definition: grid.h:161
      +
      CellType
      Definition: grid.h:25
      + +
      VECTOR3 m_vMinBound
      Definition: grid.h:171
      +
      virtual ~Grid()
      Definition: grid.h:72
      +
      PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)
      Definition: grid.h:54
      +
      Definition: grid.h:185
      +
      ReturnStatus
      Definition: common.h:34
      +
      PointInfo()
      Definition: grid.h:49
      +
      Definition: grid.h:26
      +
      Definition: grid.h:27
      +
      InterpType
      Definition: grid.h:32
      +
      Specialization of Vector4 for higher performance.
      Definition: vector_matrix.h:145
      +
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      +
      Definition: grid.h:34
      +
      float getStepSize(VECTOR3 &p, VECTOR3 &p1, VECTOR3 &p2, float oldStepSize)
      Definition: grid.cpp:1156
      +
      Definition: grid.h:29
      +
      Definition: grid.h:33
      +
      Definition: vector_matrix.h:261
      +
      Definition: grid.h:28
      +
      int ydim(void)
      Definition: grid.h:162
      +
      void getGridSpacing(int cellId, float &xspace, float &yspace, float &zspace)
      Definition: grid.h:219
      -
      CellType getCellType()
      Definition: grid.h:210
      -
      Cartesian Grid (Regular and Irregular)
      Definition: grid.h:117
      -
      VECTOR3 interpolant
      Definition: grid.h:44
      -
      virtual bool isInBBox(VECTOR3 &pos)=0
      -
      int xcelldim(void)
      Definition: grid.h:163
      -
      struct edda::PointInfo PointInfo
      about the advection point
      +
      CellType getCellType()
      Definition: grid.h:211
      +
      Cartesian Grid (Regular and Irregular)
      Definition: grid.h:118
      +
      VECTOR3 interpolant
      Definition: grid.h:45
      +
      int xcelldim(void)
      Definition: grid.h:164
      -
      int inCell
      Definition: grid.h:46
      -
      virtual void boundaryIntersection(VECTOR3 &intersectP, VECTOR3 &startP, VECTOR3 &endP, float *stepSize, float oldStepSize)=0
      -
      void reset(void)
      Definition: grid.cpp:91
      -
      about the advection point
      Definition: grid.h:41
      +
      int inCell
      Definition: grid.h:47
      +
      about the advection point
      Definition: grid.h:42
      -
      virtual void setRealBoundary(VECTOR4 &minB, VECTOR4 &maxB)=0
      -
      Vector3< float > VECTOR3
      Definition: vector_matrix.h:227
      -
      VECTOR4 m_vMinRealBound
      Definition: grid.h:173
      -
      void boundary(VECTOR3 &minB, VECTOR3 &maxB)
      Definition: grid.cpp:98
      -
      virtual InterpType getInterpType()
      Definition: grid.h:144
      -
      virtual void boundaryIntersection(VECTOR3 &intersectP, VECTOR3 &startP, VECTOR3 &endP, float *stepSize, float oldStepSize)=0
      -
      virtual void boundary(VECTOR3 &minB, VECTOR3 &maxB)=0
      -
      int zdim(void)
      Definition: grid.h:162
      -
      virtual ReturnStatus at_vertex(int verIdx, VECTOR3 &pos)=0
      -
      double cellVolume(int cellId)
      Definition: grid.cpp:356
      -
      ~RegularCartesianGrid()
      Definition: grid.cpp:87
      -
      virtual InterpType getInterpType()=0
      +
      VECTOR4 m_vMinRealBound
      Definition: grid.h:174
      +
      virtual InterpType getInterpType()
      Definition: grid.h:145
      +
      int zdim(void)
      Definition: grid.h:163
      diff --git a/html/group__filters.html b/html/group__filters.html index 7cdfe34..5eaffa1 100644 --- a/html/group__filters.html +++ b/html/group__filters.html @@ -3,16 +3,15 @@ - + + EDDA: Filters + - @@ -21,7 +20,7 @@ - @@ -30,43 +29,26 @@
      +
      EDDA
      - + - + + + +
      +
      @@ -83,9 +65,9 @@
      diff --git a/html/hierarchy.html b/html/hierarchy.html index a1add22..6222573 100644 --- a/html/hierarchy.html +++ b/html/hierarchy.html @@ -3,16 +3,15 @@ - + + EDDA: Class Hierarchy + - @@ -21,7 +20,7 @@ - @@ -30,51 +29,26 @@
      +
      EDDA
      - + - - + + + + +
      @@ -90,107 +64,132 @@
      This inheritance list is sorted roughly, but not completely, alphabetically:
      [detail level 123]
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      oC_Variant
      |\Cedda::dist::Variant
      oCedda::AbstractDataArrayUsed in the Dataset class
      |oCedda::DataSamplingArrayTake a distribution data array and output a sample
      |oCedda::GmmVtkDataArrayGmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved memory accessing
      |oCedda::ScalarArray< T >A simple implementation of DataArray
      |\Cedda::VectorArray< T, N >
      oCedda::Dataset< T >Holds all information of a dataset, which includes: 1) Geometry and 2) Data array
      oCedda::dist::DistributionRoot class for all distribution-type classes
      |oCedda::dist::ContinuousDistribution
      ||oCedda::dist::GaussianDefines a Gaussian class
      ||\Cedda::dist::GaussianMixture< GMMs >Defines a Gaussian Mixture class
      |oCedda::dist::DiscreteDistribution
      |\Cedda::dist::Variant
      oCedda::detail::FuzzyIsocontour
      oCedda::GetPositionAsIs
      oCedda::GetPositionFromDistributionMeanGet the position from mean of the distribution
      oCGetPositionPolicy
      |\Cedda::StreamTracer< DataType, GetPositionPolicy >Uncertain particle tracing
      oCedda::detail::GetSample_functor
      oCedda::GetSample_functor
      oCedda::GmmArray
      oCedda::dist::GMMTuple
      oCedda::GridBase class for grid
      |\Cedda::CartesianGridCartesian Grid (Regular and Irregular)
      | \Cedda::RegularCartesianGrid
      oCiterator_adaptor
      |\Cedda::ndarray_iterator< typename >
      oCedda::detail::LevelCrossingFunctor< RandomIterator >
      oCedda::NdArray< Type >
      oCedda::NdArray< Real >
      oCedda::OutOfBoundException
      oCedda::PointInfoAbout the advection point
      oCedda::RandSimply return a random value between 0..1
      oCruntime_error
      |\Cedda::NotImplementedException
      oCshared_ptr
      |oCedda::shared_ary< T >
      |\Cedda::shared_ary< edda::Vector< T, N > >
      oCstatic_visitor
      |oCedda::dist::detail::_getCdf
      |oCedda::dist::detail::_getMean
      |oCedda::dist::detail::_getPdf
      |oCedda::dist::detail::_getSample
      |\Cedda::dist::detail::_getVar
      oCedda::Tuple< T, N >
      oCedda::Tuple< edda::dist::GMMTuple, GMMs >
      oCedda::Tuple< edda::NdArray< Real >, MAX_GMMs *3 >
      oCedda::Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >
      oCedda::Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >
      oCedda::Tuple< Real, 3 >
      |\Cedda::Tuple3< Real >
      | \Cedda::Vector< Real, 3 >Specialization of Vector3 for higher performance
      oCedda::Tuple< Real, 4 >
      |\Cedda::Tuple4< Real >
      | \Cedda::Vector< Real, 4 >Specialization of Vector4 for higher performance
      oCedda::Tuple< Real, N >
      |\Cedda::Vector< Real, N >Vectors are Tuples that have geometry concepts
      oCedda::Tuple< T, 1 >
      |\Cedda::Tuple1< T >
      oCedda::Tuple< T, 2 >
      |\Cedda::Tuple2< T >
      oCedda::Tuple< T, 3 >
      |\Cedda::Tuple3< T >
      oCedda::Tuple< T, 4 >
      |\Cedda::Tuple4< T >
      oCedda::Tuple< T, 5 >
      |\Cedda::Tuple5< T >
      oCedda::Tuple< T, 6 >
      |\Cedda::Tuple6< T >
      oCedda::Tuple< T, 7 >
      |\Cedda::Tuple7< T >
      oCedda::Tuple< T, 8 >
      |\Cedda::Tuple8< T >
      oCedda::Tuple< T, 9 >
      |\Cedda::Tuple9< T >
      oCunary_function
      |oCedda::detail::GenRandCreate a Thrust default random engine with a given seed
      |\Cedda::detail::MakeStridedGmm
      oCvector
      |\CeddaRandomProbeFilter::vtkVectorOfArrays
      oCvtkCompositeDataSetAlgorithm
      |\CvtkCompositeUncertainIsocontour
      oCvtkDataArray
      |oCeddaSamplingArrayVtkDataArray that returns a random sample from the distribution array. This is still experimental and unsafe to use because the grandparent class vtkAbstractArray allows GetVoidPointer() to bypass GetTuple()
      |\CvtkSamplingArrayVtkDataArray that returns a random sample from the distribution array. This is still experimental and unsafe to use because the grandparent class vtkAbstractArray allows GetVoidPointer() to bypass GetTuple()
      oCvtkDataSetAlgorithm
      |oCeddaRandomProbeFilter
      |oCeddaRandomSampleField
      |oCeddaThreshold
      |\CeddaUncertainIsocontour
      \CvtkImageAlgorithm
       \CvtkEddaReaderReads an internal .info file format and creates a dataset with vtkSamplingArray. This class is experimental
       C_Variant
       CBMPImage
       Cedda::Cell
       Cedda::Dataset< T >Holds all information of a dataset, which includes: 1) Geometry and 2) Data array
       Cedda::DistrArrayThe class interface of distrbution arrays used by the Dataset class
       Cedda::dist::DistributionInterface class with virtual classes
       Cedda::DistributionModeler< T >
       Cedda::dist::DistributionTagThe Distribution class is a root class for all distribution-type classes
       Cedda::detail::FieldInterp< FieldIterator >
       Cedda::detail::FuzzyIsocontour
       Cedda::GetPositionAsIs
       Cedda::GetPositionFromDistributionMeanGet the position from mean of the distribution
       CGetPositionPolicy
       Cedda::detail::GetSample
       Cedda::GetSample_functor
       Cedda::GmmArray
       Cedda::dist::GMMTuple
       Cedda::GridBase class for grid
       Cedda::HistoArray
       Citerator_adaptor
       Cedda::detail::LevelCrossingFunctor< RandomIterator >
       Cedda::MATRIX3
       Cedda::detail::MCStreamline_functor< FieldIterator >
       Cedda::NdArray< Type >A general n-dimensional array compatible to Cuda
       Cedda::NdArray< Real >
       Cedda::OutOfBoundException
       Cedda::PointInfoAbout the advection point
       Cedda::RandSimply return a random value between 0..1
       Cruntime_error
       Cshared_ptr
       Cstatic_visitor
       CtagBITMAPFILEHEADER
       CtagBITMAPINFOHEADER
       Cedda::Tetra_step
       Cedda::Tuple< T, N >
       Cedda::Tuple< edda::dist::GMMTuple, GMs >
       Cedda::Tuple< edda::NdArray< Real >, MAX_GMs *3 >
       Cedda::Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >
       Cedda::Tuple< int, 3 >
       Cedda::Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >
       Cedda::Tuple< Real, 3 >
       Cedda::Tuple< Real, 4 >
       Cedda::Tuple< Real, N >
       Cedda::Tuple< T, 1 >
       Cedda::Tuple< T, 2 >
       Cedda::Tuple< T, 3 >
       Cedda::Tuple< T, 4 >
       Cedda::Tuple< T, 5 >
       Cedda::Tuple< T, 6 >
       Cedda::Tuple< T, 7 >
       Cedda::Tuple< T, 8 >
       Cedda::Tuple< T, 9 >
       Cunary_function
       Cedda::VecDistrModeler< T >
       Cvector
       CvtkDataArray
       CvtkDataSetAlgorithm
      diff --git a/html/histo__array_8h.html b/html/histo__array_8h.html new file mode 100644 index 0000000..52c1915 --- /dev/null +++ b/html/histo__array_8h.html @@ -0,0 +1,79 @@ + + + + + + + +EDDA: src/dataset/histo_array.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      histo_array.h File Reference
      +
      + + + + + diff --git a/html/histo__array_8h_source.html b/html/histo__array_8h_source.html new file mode 100644 index 0000000..20e1092 --- /dev/null +++ b/html/histo__array_8h_source.html @@ -0,0 +1,77 @@ + + + + + + + +EDDA: src/dataset/histo_array.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      histo_array.h
      +
      + + + + + diff --git a/html/histogram_8h.html b/html/histogram_8h.html new file mode 100644 index 0000000..6f73ff5 --- /dev/null +++ b/html/histogram_8h.html @@ -0,0 +1,134 @@ + + + + + + + +EDDA: src/distributions/histogram.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      histogram.h File Reference
      +
      +
      +
      #include <iostream>
      +#include <typeinfo>
      +#include "common.h"
      +#include "edda_export.h"
      +#include "core/vector_matrix.h"
      +#include "core/tuple.h"
      +#include "core/thrust_common.h"
      +#include "distribution_tag.h"
      +#include "core/shared_ary.h"
      +
      +

      Go to the source code of this file.

      + + + + + +

      +Classes

      class  edda::dist::Histogram
       The Distribution class is a root class for all distribution-type classes. More...
       
      + + + + + + +

      +Namespaces

       edda
       Experimental functionality.
       
       edda::dist
       
      + + + + + + + + + + + + + + + + + + + + + + + + + +

      +Functions

      double edda::dist::getMean (const Histogram &dist)
       Compute the mean of the distribution. More...
       
      double edda::dist::getVar (const Histogram &dist)
       Compute Variance. More...
       
      double edda::dist::getPdf (const Histogram &dist, const double x)
       Return PDF of x. More...
       
      double edda::dist::getSample (const Histogram &dist)
       Get a Monte-Carlo sample of the distribution. We rely on the specific implementation from each distribution. More...
       
      double edda::dist::getCdf (const Histogram &dist, double x)
       Return CDF of x. More...
       
      std::ostream & edda::dist::operator<< (std::ostream &os, const Histogram &dist)
       Print itself. More...
       
      __host__ __device__ std::string edda::dist::getName (const Histogram &x)
       
      dist::Histogram edda::eddaComputeHistogram (float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)
       
      dist::Histogram edda::eddaComputeHistogram (double *dataArray, int nElement, const int _nBins, const double _minValue=1, const double _maxValue=-1)
       
      +
      + + + + diff --git a/html/histogram_8h_source.html b/html/histogram_8h_source.html new file mode 100644 index 0000000..a78fdf8 --- /dev/null +++ b/html/histogram_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +EDDA: src/distributions/histogram.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      histogram.h
      +
      +
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef HISTOGRAM_H
      6 #define HISTOGRAM_H
      7 
      10 
      11 #include <iostream>
      12 #include <typeinfo>
      13 #include <iostream>
      14 
      15 #include "common.h"
      16 #include "edda_export.h"
      17 #include "core/vector_matrix.h"
      18 #include "core/tuple.h"
      19 #include "core/thrust_common.h"
      20 #include "distribution_tag.h"
      21 #include "core/shared_ary.h"
      22 
      23 namespace edda {
      24 namespace dist {
      25 
      32 public:
      33 
      35 
      36  Histogram(double* histData){//use when load from vtk
      37  m_nBins = histData[0];
      38  m_minValue = histData[1];
      39  m_maxValue = histData[2];
      40  m_binWidth = (m_maxValue - m_minValue) / (Real)(m_nBins);
      41 
      42  m_cdf.resize(m_nBins);
      43  for (int b = 0; b < m_nBins; b++){
      44  m_cdf[b] = histData[b+3];
      45  }
      46  }
      47 
      48  Histogram(float* histData, int _nBins){//use when load from .edda file
      49  m_nBins = _nBins;
      50  m_minValue = histData[0];
      51  m_maxValue = histData[1];
      52  m_binWidth = (m_maxValue - m_minValue) / (Real)(m_nBins);
      53 
      54  m_cdf.resize(m_nBins);
      55  for (int b = 0; b < m_nBins; b++){
      56  m_cdf[b] = histData[b + 2];
      57  }
      58  }
      59 
      60  Histogram(Real *dataArray, int nElements, const int _nBins, const Real _minValue = 1, const Real _maxValue = -1){
      61  if (_minValue > _maxValue){// no input min/max value
      62  m_minValue = dataArray[0];
      63  m_maxValue = dataArray[0];
      64  for (int i = 1; i < nElements; i++){
      65  if (m_minValue > dataArray[i])
      66  m_minValue = dataArray[i];
      67  if (m_maxValue < dataArray[i])
      68  m_maxValue = dataArray[i];
      69  }
      70  }
      71  else{
      72  m_minValue = _minValue;
      73  m_maxValue = _maxValue;
      74  }
      75 
      76  m_nBins = _nBins;
      77 
      78  m_binWidth = (m_maxValue - m_minValue) / (Real)(m_nBins);
      79 
      80  m_cdf.resize(m_nBins);
      81 
      82  //modeling and convert to cdf
      83  for (int i = 0; i < nElements; i++){
      84  int b = valueToBinsIndex(dataArray[i]);
      85  m_cdf[b] ++;
      86  }
      87 
      88  for (int b = 1; b < m_nBins; b++)
      89  m_cdf[b] += m_cdf[b - 1];
      90 
      91  for (int b = 0; b < m_nBins; b++){
      92  m_cdf[b] /= (Real)nElements;
      93  }
      94  }
      95 
      96  Histogram(const Histogram &hist)
      97  : m_nBins(hist.m_nBins),
      98  m_minValue(hist.m_minValue),
      99  m_maxValue(hist.m_maxValue),
      100  m_binWidth(hist.m_binWidth)
      101  {
      102  m_cdf = hist.m_cdf;
      103  }
      104 
      105  Real getMean() const{
      106  Real mean = 0;
      107  Real cValue = m_minValue + m_binWidth / 2.0;
      108  for (int i = 0; i < m_nBins; i++){
      109  if (i == 0) mean += m_cdf[0] * cValue;
      110  else mean += (m_cdf[i] - m_cdf[i - 1]) * cValue;
      111  cValue += m_binWidth;
      112  }
      113  return mean;
      114  }
      115 
      116  Real getVar() const{
      117  //using Var(X) = E[X^2] - (E[X])^2 to compute Var
      118  Real mean = 0;
      119  Real mSqrt = 0;
      120  Real cValue = m_minValue + m_binWidth / 2.0;
      121  for (int i = 0; i < m_nBins; i++){
      122  if (i == 0) mean += m_cdf[0] * cValue;
      123  else mean += (m_cdf[i] - m_cdf[i - 1]) * cValue;
      124 
      125  if (i == 0) mSqrt += m_cdf[0] * cValue * cValue;
      126  else mSqrt += (m_cdf[i] - m_cdf[i - 1]) * cValue * cValue;
      127 
      128  cValue += m_binWidth;
      129  }
      130  return mSqrt - mean*mean;
      131  }
      132 
      133  Real getPdf(const double x) const{
      134  int b = valueToBinsIndex(x);
      135 
      136  if (b == 0) return m_cdf[0];
      137  else return (m_cdf[b] - m_cdf[b - 1]);
      138  }
      139 
      140  Real getCdf(const double x) const{
      141  int b = valueToBinsIndex(x);
      142 
      143  return m_cdf[b];
      144  }
      145 
      146  Real getSample() const{
      147  Real sample;
      148  Real r = rand() / (float)RAND_MAX;
      149 
      150  int low = 0;
      151  int high = m_nBins - 1;
      152 
      153  //bineary searh in cdf
      154  //do{
      155  // int mid = floor((low + high) / 2.0);
      156 
      157  // Real prevCdf;
      158  // if (mid == 0) prevCdf = -0.1;
      159  // else prevCdf = m_cdf[mid - 1];
      160 
      161  // if (prevCdf < r && r <= m_cdf[mid]){
      162  // //sample here
      163  // Real subr = rand() / (float)RAND_MAX;
      164  // Real s, t;
      165  // rangeOfBin(s, t, mid);
      166  // sample = s + m_binWidth * subr;
      167  // break;
      168  // }
      169  // else if (m_cdf[mid] > r){
      170  // high = mid - 1;
      171  // }
      172  // else{
      173  // low = mid + 1;
      174  // }
      175  //} while (1);
      176 
      177  //sequence search
      178  for (int b = 0; b < m_nBins; b++){
      179  if (m_cdf[b] >= r){
      180  Real subr = rand() / (float)RAND_MAX;
      181  Real s, t;
      182  rangeOfBin(s, t, b);
      183  sample = s + m_binWidth * subr;
      184  break;
      185  }
      186  }
      187 
      188  return sample;
      189  }
      190 
      191  void output(std::ostream& os) const{
      192  os << "<Histogram Min:" << this->m_minValue << " Max:" << this->m_maxValue;
      193  for (int b = 0; b < m_nBins; b++)
      194  os << ", Bin " << b << ": " << m_cdf[b];
      195  os << ">";
      196  }
      197 
      198  int getBins(){
      199  return m_nBins;
      200  }
      201 
      202  float getMaxValue(){
      203  return m_maxValue;
      204  }
      205 
      206  float getMinValue(){
      207  return m_minValue;
      208  }
      209 
      210 
      211  float getBinValue(int b){
      212  //This usually return accumlative prob
      213  return m_cdf[b];
      214  }
      215 
      216 protected:
      217  int valueToBinsIndex(Real v) const {
      218  if (v < m_minValue)
      219  return 0;
      220  else if (v >= m_maxValue)
      221  return (m_nBins - 1);
      222  else
      223  return floor((v - m_minValue) / m_binWidth);
      224  }
      225 
      226  void rangeOfBin(Real& s, Real &t, int b) const{
      227  s = m_minValue + b * m_binWidth;
      228  t = m_minValue + (b + 1) * m_binWidth;
      229  }
      230 
      231  int m_nBins;
      235  std::vector<Real> m_cdf;
      236 };
      237 
      241 inline double getMean(const Histogram &dist)
      242 {
      243  return (double)dist.getMean();
      244 }
      245 
      249 inline double getVar(const Histogram &dist)
      250 {
      251  return (double)dist.getVar();
      252 }
      253 
      257 inline double getPdf(const Histogram &dist, const double x)
      258 {
      259  return (double)dist.getPdf(x);
      260 }
      261 
      265 inline double getSample(const Histogram &dist)
      266 {
      267  return (double)dist.getSample();
      268 }
      269 
      270 
      274 //__host__ __device__
      275 inline double getCdf(const Histogram &dist, double x)
      276 {
      277  return (double)dist.getCdf(x);
      278 }
      279 
      283 inline std::ostream& operator<<(std::ostream& os, const Histogram &dist)
      284 {
      285  dist.output(os);
      286  return os;
      287 }
      288 
      289 __host__ __device__
      290 inline std::string getName(const Histogram &x) {
      291  return "Histogram";
      292 }
      293 
      294 } // namespace dist
      295 
      296 inline dist::Histogram eddaComputeHistogram(float *dataArray, int nElement, const int _nBins, const float _minValue = 1, const float _maxValue = -1)
      297 {
      298  //convert to internal data type
      299  Real* _dataArray = (Real*)malloc(sizeof(Real)*nElement);
      300  for (int i = 0; i < nElement; i++)_dataArray[i] = (Real)dataArray[i];
      301  dist::Histogram h = dist::Histogram(_dataArray, nElement, _nBins, _minValue, _maxValue);
      302  free(_dataArray);
      303  return h;
      304 }
      305 
      306 inline dist::Histogram eddaComputeHistogram(double *dataArray, int nElement, const int _nBins, const double _minValue = 1, const double _maxValue = -1)
      307 {
      308  //convert to internal data type
      309  Real* _dataArray = (Real*)malloc(sizeof(Real)*nElement);
      310  for (int i = 0; i < nElement; i++)_dataArray[i] = (Real)dataArray[i];
      311  dist::Histogram h = dist::Histogram(_dataArray, nElement, _nBins, _minValue, _maxValue);
      312  free(_dataArray);
      313  return h;
      314 }
      315 
      316 } // namespace edda
      317 
      318 #endif // HISTOGRAM_H
      float getMinValue()
      Definition: histogram.h:206
      +
      void output(std::ostream &os) const
      Definition: histogram.h:191
      +
      std::string getName(const Real &x)
      Definition: distribution_tag.h:226
      +
      std::vector< Real > m_cdf
      Definition: histogram.h:235
      +
      __host__ double getSample(const Dist &dist)
      Return a random sample.
      Definition: distribution_tag.h:84
      + +
      __host__ __device__ double getPdf(const Dist &dist, const double x)
      Return PDF of x.
      Definition: distribution_tag.h:73
      +
      void rangeOfBin(Real &s, Real &t, int b) const
      Definition: histogram.h:226
      +
      int valueToBinsIndex(Real v) const
      Definition: histogram.h:217
      +
      Histogram(const Histogram &hist)
      Definition: histogram.h:96
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      int getBins()
      Definition: histogram.h:198
      +
      Histogram(float *histData, int _nBins)
      Definition: histogram.h:48
      +
      __host__ __device__ double getVar(const Dist &dist)
      Return variance.
      Definition: distribution_tag.h:62
      +
      __host__ __device__ double getMean(const Dist &dist)
      Return mean.
      Definition: distribution_tag.h:51
      +
      Definition: distribution_tag.h:37
      +
      Histogram(Real *dataArray, int nElements, const int _nBins, const Real _minValue=1, const Real _maxValue=-1)
      Definition: histogram.h:60
      + +
      __host__ std::ostream & operator<<(std::ostream &os, const Gaussian &dist)
      Print itself.
      Definition: gaussian.h:142
      + +
      Real getPdf(const double x) const
      Definition: histogram.h:133
      +
      Histogram()
      Definition: histogram.h:34
      +
      float getMaxValue()
      Definition: histogram.h:202
      + +
      Real getSample() const
      Definition: histogram.h:146
      +
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      +
      Real m_minValue
      Definition: histogram.h:232
      +
      Real getCdf(const double x) const
      Definition: histogram.h:140
      +
      Real m_binWidth
      Definition: histogram.h:234
      + +
      dist::Histogram eddaComputeHistogram(float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)
      Definition: histogram.h:296
      +
      Real getVar() const
      Definition: histogram.h:116
      + +
      int m_nBins
      Definition: histogram.h:231
      +
      Real m_maxValue
      Definition: histogram.h:233
      +
      Real getMean() const
      Definition: histogram.h:105
      +
      The Distribution class is a root class for all distribution-type classes.
      Definition: histogram.h:31
      +
      float getBinValue(int b)
      Definition: histogram.h:211
      + +
      float Real
      Definition: common.h:28
      +
      Histogram(double *histData)
      Definition: histogram.h:36
      +
      __host__ __device__ double getCdf(const Dist &dist, double x)
      Return CDF of x.
      Definition: distribution_tag.h:106
      +
      + + + + diff --git a/html/index.html b/html/index.html index 108aa8b..0b775bc 100644 --- a/html/index.html +++ b/html/index.html @@ -3,16 +3,15 @@ - + + EDDA: Main Page + - @@ -21,7 +20,7 @@ - @@ -30,43 +29,26 @@
      +
      EDDA
      - + - + + + + +
      @@ -83,9 +65,9 @@
      diff --git a/html/interpolator_8h.html b/html/interpolator_8h.html index 3698e1c..a3ea85f 100644 --- a/html/interpolator_8h.html +++ b/html/interpolator_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/interpolator.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -93,33 +69,33 @@
      interpolator.h File Reference
      -
      #include "tuple.h"
      +
      #include "tuple.h"

      Go to the source code of this file.

      - - + +

      Namespaces

       edda
       Experimental functionality.
       edda
       Experimental functionality.
       
      - + - + - + - + @@ -131,9 +107,9 @@ diff --git a/html/interpolator_8h_source.html b/html/interpolator_8h_source.html index bc11f8d..b94574d 100644 --- a/html/interpolator_8h_source.html +++ b/html/interpolator_8h_source.html @@ -3,16 +3,15 @@ - + +EDDA: src/core/interpolator.h Source File + - @@ -21,7 +20,7 @@

      Functions

      template<class T , typename coeffT = float>
      edda::lerp (const T &x, const T &y, const coeffT ratio)
       linear interpolation More...
       linear interpolation More...
       
      template<class T , typename coeffT = float>
      edda::biLerp (const T &ll, const T &hl, const T &lh, const T &hh, const coeffT coeff[2])
       bilinear interpolation More...
       bilinear interpolation More...
       
      template<class T , typename coeffT = float>
      edda::triLerp (const T &lll, const T &hll, const T &lhl, const T &hhl, const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
       trilinear interpolation More...
       trilinear interpolation More...
       
      template<class T >
      edda::baryInterp (const T &v1, const T &v2, const T &v3, const T &v4, double coeff[3])
       barycentric interpolation More...
       barycentric interpolation More...
       
      template<class T >
      edda::cubeLerp (const Tuple8< T > points, const double coeff[3])
      - @@ -30,48 +29,25 @@
      +
      EDDA
      - + - - + + + + +
      @@ -90,71 +66,10 @@
      interpolator.h
      -Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      -
      2 // Use of this source code is governed by a MIT-style license that can be
      -
      3 // found in the LICENSE file.
      -
      4 
      -
      5 #ifndef INTERPOLATOR_H_
      -
      6 #define INTERPOLATOR_H_
      -
      7 
      -
      8 #include "tuple.h"
      -
      9 
      -
      10 namespace edda {
      -
      11 
      -
      13 template <class T, typename coeffT=float>
      -
      14 inline T lerp(const T &x, const T &y, const coeffT ratio)
      -
      15 {
      -
      16  return x * (1. - ratio) + y * ratio;
      -
      17 }
      -
      18 
      -
      20 template <class T, typename coeffT=float>
      -
      21 inline T biLerp(const T &ll, const T &hl, const T &lh, const T &hh, const coeffT coeff[2])
      -
      22 {
      -
      23  return lerp(lerp(ll, hl, coeff[0]), lerp(lh, hh, coeff[0]), coeff[1]);
      -
      24 }
      -
      25 
      -
      27 template <class T, typename coeffT=float>
      -
      28 inline T triLerp(const T &lll, const T &hll, const T &lhl, const T &hhl,
      -
      29  const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
      -
      30 {
      -
      31  return lerp(biLerp(lll, hll, lhl, hhl, coeff),
      -
      32  biLerp(llh, hlh, lhh, hhh, coeff),
      -
      33  coeff[2]);
      -
      34 }
      -
      35 
      -
      36 //-----------------------------------------------------------------------------------------
      -
      37 // The classes to be used in data model:
      -
      38 
      -
      40 template <class T>
      -
      41 inline T baryInterp(const T &v1, const T &v2, const T &v3, const T &v4, double coeff[3])
      -
      42 {
      -
      43  return v1 +
      -
      44  (v2-v1)*coeff[0] +
      -
      45  (v3-v1)*coeff[1] +
      -
      46  (v4-v1)*coeff[2];
      -
      47 }
      -
      48 
      -
      50 template<class T>
      -
      51 inline T cubeLerp(const Tuple8<T> points, const double coeff[3])
      -
      52 {
      -
      53  return TriLerp(points[0], points[1], points[2], points[3],
      -
      54  points[4], points[5], points[6], points[7],
      -
      55  coeff);
      -
      56 }
      -
      57 
      -
      59 template<class T>
      -
      60 inline T tetraLerp(const Tuple4<T> points, const double coeff[3])
      -
      61 {
      -
      62  return baryInterp(points[0], points[1], points[2], points[3], coeff);
      -
      63 }
      -
      64 
      -
      65 
      -
      66 } // namespace edda
      -
      67 
      -
      68 #endif // INTERPOLATOR_H_
      -
      T triLerp(const T &lll, const T &hll, const T &lhl, const T &hhl, const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
      trilinear interpolation
      Definition: interpolator.h:28
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef EDDA_INTERPOLATOR_H_
      6 #define EDDA_INTERPOLATOR_H_
      7 
      8 #include "tuple.h"
      9 
      10 namespace edda {
      11 
      13 template <class T, typename coeffT=float>
      14 inline T lerp(const T &x, const T &y, const coeffT ratio)
      15 {
      16  return x * (1. - ratio) + y * ratio;
      17 }
      18 
      20 template <class T, typename coeffT=float>
      21 inline T biLerp(const T &ll, const T &hl, const T &lh, const T &hh, const coeffT coeff[2])
      22 {
      23  return lerp(lerp(ll, hl, coeff[0]), lerp(lh, hh, coeff[0]), coeff[1]);
      24 }
      25 
      27 template <class T, typename coeffT=float>
      28 inline T triLerp(const T &lll, const T &hll, const T &lhl, const T &hhl,
      29  const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
      30 {
      31  return lerp(biLerp(lll, hll, lhl, hhl, coeff),
      32  biLerp(llh, hlh, lhh, hhh, coeff),
      33  coeff[2]);
      34 }
      35 
      36 //-----------------------------------------------------------------------------------------
      37 // The classes to be used in data model:
      38 
      40 template <class T>
      41 inline T baryInterp(const T &v1, const T &v2, const T &v3, const T &v4, double coeff[3])
      42 {
      43  return v1 +
      44  (v2-v1)*coeff[0] +
      45  (v3-v1)*coeff[1] +
      46  (v4-v1)*coeff[2];
      47 }
      48 
      50 template<class T>
      51 inline T cubeLerp(const Tuple8<T> points, const double coeff[3])
      52 {
      53  return TriLerp(points[0], points[1], points[2], points[3],
      54  points[4], points[5], points[6], points[7],
      55  coeff);
      56 }
      57 
      59 template<class T>
      60 inline T tetraLerp(const Tuple4<T> points, const double coeff[3])
      61 {
      62  return baryInterp(points[0], points[1], points[2], points[3], coeff);
      63 }
      64 
      65 
      66 } // namespace edda
      67 
      68 #endif // INTERPOLATOR_H_
      T triLerp(const T &lll, const T &hll, const T &lhl, const T &hhl, const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
      trilinear interpolation
      Definition: interpolator.h:28
      T biLerp(const T &ll, const T &hl, const T &lh, const T &hh, const coeffT coeff[2])
      bilinear interpolation
      Definition: interpolator.h:21
      T tetraLerp(const Tuple4< T > points, const double coeff[3])
      Definition: interpolator.h:60
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      Definition: tuple.h:114
      Definition: tuple.h:106
      T cubeLerp(const Tuple8< T > points, const double coeff[3])
      Definition: interpolator.h:51
      @@ -164,9 +79,9 @@
      diff --git a/html/invert__matrix_8h.html b/html/invert__matrix_8h.html new file mode 100644 index 0000000..a1c73f3 --- /dev/null +++ b/html/invert__matrix_8h.html @@ -0,0 +1,112 @@ + + + + + + + +EDDA: src/distributions/invert_matrix.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      invert_matrix.h File Reference
      +
      +
      +
      #include "common.h"
      +#include <boost/numeric/ublas/lu.hpp>
      +#include <boost/numeric/ublas/io.hpp>
      +#include <boost/numeric/ublas/vector.hpp>
      +#include <boost/numeric/ublas/matrix.hpp>
      +
      +

      Go to the source code of this file.

      + + + + + +

      +Namespaces

       edda
       Experimental functionality.
       
      + + + + + +

      +Typedefs

      typedef boost::numeric::ublas::vector< Real > edda::ublas_vector
       
      typedef boost::numeric::ublas::matrix< Real > edda::ublas_matrix
       
      + + + + + + + + +

      +Functions

      template<class T >
      bool edda::invert_matrix (const ublas::matrix< T > &input, ublas::matrix< T > &inverse)
       
      int edda::determinant_sign (const boost::numeric::ublas::permutation_matrix< std::size_t > &pm)
       
      double edda::determinant (const boost::numeric::ublas::matrix< Real > &m)
       
      +
      + + + + diff --git a/html/invert__matrix_8h_source.html b/html/invert__matrix_8h_source.html new file mode 100644 index 0000000..a241f5c --- /dev/null +++ b/html/invert__matrix_8h_source.html @@ -0,0 +1,85 @@ + + + + + + + +EDDA: src/distributions/invert_matrix.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      invert_matrix.h
      +
      +
      +Go to the documentation of this file.
      1 // C++ matrix inversion (boost::ublas)
      2 // Another recurrent question is "how do I invert a matrix in [my library of choice]?. Neither boost::ublas nor MTL documentation answers this satisfactorily.
      3 // If you're using boost::ublas, you can find the InvertMatrix funcion here: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion
      4 // And a simple example below:
      5 
      6 #include "common.h"
      7 #include <boost/numeric/ublas/lu.hpp>
      8 #include <boost/numeric/ublas/io.hpp>
      9 #include <boost/numeric/ublas/vector.hpp>
      10 #include <boost/numeric/ublas/matrix.hpp>
      11 
      12 namespace edda
      13 {
      14  // for linear algebra
      15  typedef boost::numeric::ublas::vector<Real> ublas_vector;
      16  typedef boost::numeric::ublas::matrix<Real> ublas_matrix;
      17  using namespace boost::numeric;
      18 
      19  /* Matrix inversion routine.
      20  Uses lu_factorize and lu_substitute in uBLAS to invert a matrix */
      21 template<class T>
      22 bool invert_matrix(const ublas::matrix<T>& input, ublas::matrix<T>& inverse)
      23 {
      24  typedef ublas::permutation_matrix<std::size_t> pmatrix;
      25 
      26  // create a working copy of the input
      27  ublas::matrix<T> A(input);
      28 
      29  // create a permutation matrix for the LU-factorization
      30  pmatrix pm(A.size1());
      31 
      32  // perform LU-factorization
      33  int res = ublas::lu_factorize(A, pm);
      34  if (res != 0)
      35  return false;
      36 
      37  // create identity matrix of "inverse"
      38  //inverse.assign(ublas::identity_matrix<T> (A.size1()));
      39  inverse = ublas::identity_matrix<T> (A.size1());
      40 
      41  // backsubstitute to get the inverse
      42  ublas::lu_substitute(A, pm, inverse);
      43 
      44  return true;
      45 }
      46 
      47 inline
      48 int determinant_sign(const boost::numeric::ublas::permutation_matrix<std::size_t>& pm)
      49 {
      50  int pm_sign=1;
      51  std::size_t size = pm.size();
      52  for (std::size_t i = 0; i < size; ++i)
      53  if (i != pm(i))
      54  pm_sign *= -1.0; // swap_rows would swap a pair of rows here, so we change sign
      55  return pm_sign;
      56 }
      57 
      58 inline
      59 double determinant(const boost::numeric::ublas::matrix<Real>& m ) {
      60  ublas_matrix mm = m;
      61  boost::numeric::ublas::permutation_matrix<std::size_t> pm(m.size1());
      62  double det = 1.0;
      63  if( boost::numeric::ublas::lu_factorize(mm,pm) ) {
      64  det = 0.0;
      65  } else {
      66  for(int i = 0; i < m.size1(); i++)
      67  det *= m(i,i); // multiply by elements on diagonal
      68  det = det * determinant_sign( pm );
      69  }
      70  return det;
      71 }
      72 
      73 } //edda
      boost::numeric::ublas::vector< Real > ublas_vector
      Definition: invert_matrix.h:15
      +
      double determinant(const boost::numeric::ublas::matrix< Real > &m)
      Definition: invert_matrix.h:59
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      bool invert_matrix(const ublas::matrix< T > &input, ublas::matrix< T > &inverse)
      Definition: invert_matrix.h:22
      + +
      boost::numeric::ublas::matrix< Real > ublas_matrix
      Definition: invert_matrix.h:16
      + +
      int determinant_sign(const boost::numeric::ublas::permutation_matrix< std::size_t > &pm)
      Definition: invert_matrix.h:48
      +
      + + + + diff --git a/html/joint__GMM_8h.html b/html/joint__GMM_8h.html new file mode 100644 index 0000000..3c729c1 --- /dev/null +++ b/html/joint__GMM_8h.html @@ -0,0 +1,151 @@ + + + + + + + +EDDA: src/distributions/joint_GMM.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      joint_GMM.h File Reference
      +
      +
      +
      #include <iostream>
      +#include <typeinfo>
      +#include "common.h"
      +#include "edda_export.h"
      +#include "core/vector_matrix.h"
      +#include "core/tuple.h"
      +#include "core/thrust_common.h"
      +#include "distribution_tag.h"
      +#include "core/shared_ary.h"
      +#include "distributions/joint_gaussian.h"
      +#include "core/statistics.h"
      +#include <boost/numeric/ublas/matrix.hpp>
      +#include <boost/numeric/ublas/io.hpp>
      +#include <boost/numeric/ublas/assignment.hpp>
      +
      +

      Go to the source code of this file.

      + + + + + +

      +Classes

      class  edda::dist::JointGMM
       The Distribution class is a root class for all distribution-type classes. More...
       
      + + + + + + +

      +Namespaces

       edda
       Experimental functionality.
       
       edda::dist
       
      + + + +

      +Macros

      #define EMEPS   0.0000000000222044604
       
      + + + + + + + + + + + + + + + + +

      +Functions

      Real edda::dist::getPdf (const JointGMM &dist, const std::vector< Real > x)
       Return probability of x. More...
       
      std::vector< Real > edda::dist::getJointSample (const JointGMM &dist, thrust::default_random_engine &rng)
       Return a sample drawn from dist. More...
       
      std::ostream & edda::dist::operator<< (std::ostream &os, const JointGMM &dist)
       Print itself. More...
       
      __host__ __device__ std::string edda::dist::getName (const JointGMM &x)
       Print the distribution typw. More...
       
      dist::JointGMM edda::eddaComputeJointGMM (std::vector< Real *> &dataAry, int nSamples, int nComp)
       Compute the Gaussian Mixture Model. More...
       
      +

      Macro Definition Documentation

      + +

      § EMEPS

      + +
      +
      + + + + +
      #define EMEPS   0.0000000000222044604
      +
      + +
      +
      +
      + + + + diff --git a/html/joint__GMM_8h_source.html b/html/joint__GMM_8h_source.html new file mode 100644 index 0000000..fe400fa --- /dev/null +++ b/html/joint__GMM_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +EDDA: src/distributions/joint_GMM.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      joint_GMM.h
      +
      +
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef JointGMM_H
      6 #define JointGMM_H
      7 
      8 #include <iostream>
      9 #include <typeinfo>
      10 #include <iostream>
      11 
      12 #include "common.h"
      13 #include "edda_export.h"
      14 #include "core/vector_matrix.h"
      15 #include "core/tuple.h"
      16 #include "core/thrust_common.h"
      17 #include "distribution_tag.h"
      18 #include "core/shared_ary.h"
      20 
      21 #include "common.h"
      22 #include "distribution_tag.h"
      23 #include "core/statistics.h"
      24 
      25 #include <boost/numeric/ublas/matrix.hpp>
      26 #include <boost/numeric/ublas/io.hpp>
      27 #include <boost/numeric/ublas/assignment.hpp>
      28 using namespace boost::numeric::ublas;
      29 
      30 #define EMEPS 0.0000000000222044604
      31 
      32 namespace edda {
      33  namespace dist {
      34 
      41  public:
      42 
      47 
      51  JointGMM(const JointGMM &gmm)
      52  : weights(gmm.weights), gaus(gmm.gaus), nVar(gmm.nVar), nComp(gmm.nComp)
      53  {
      54  }
      55 
      59  void setGMM(int _nVar, int _nComp, ublas_vector &_weights, ublas_matrix &_means, ublas_matrix &_covs){
      60  nVar = _nVar;
      61  nComp = _nComp;
      62 
      63  gaus.clear();
      64  weights.resize(nComp);
      65  std::copy(_weights.begin(), _weights.end(), weights.begin());
      66 
      67  for (int i = 0; i < nComp; i++){
      68  boost::numeric::ublas::matrix_row<boost::numeric::ublas::matrix<float> > m(_means, i);
      69  ublas_matrix cov_ = subrange( _covs, i*nVar, (i+1)*nVar, 0, nVar );
      70 
      71  JointGaussian g(m, cov_);
      72  gaus.push_back(g);
      73  }
      74  }
      75 
      79  std::vector<Real> getMean(int comp) const{
      80  return getJointMean(gaus[comp]);
      81  }
      82 
      86  Real getPdf(const std::vector<Real> x) const{
      87  Real pdf = 0;
      88  for (int i = 0; i < nComp; i++){
      89  pdf += weights[i] * getJointPdf(gaus[i], x);
      90  }
      91 
      92  return pdf;
      93  }
      94 
      98  std::vector<Real> getCompWgtLogProbability(const std::vector<Real> x) const{
      99  std::vector<Real> wProbs(nComp, 0);
      100  for (int i = 0; i < nComp; i++){
      101  wProbs[i] = log(weights[i]) + gaus[i].getJointLogPdf(x);
      102  }
      103 
      104  return wProbs;
      105  }
      106 
      110  std::vector<Real> getJointSample(thrust::default_random_engine &rng) const{
      111  Real r = rand() / (float)RAND_MAX;
      112  float sum = 0;
      113  std::vector<Real> s;
      114 
      115  for (int i = 0; i < gaus.size(); i++){
      116  sum += weights[i];
      117  if (sum >= r || i==gaus.size()-1){
      118  s = gaus[i].getJointSample(rng);
      119  break;
      120  }
      121  }
      122  return s;
      123  }
      124 
      128  void output(std::ostream& os) const{
      129  for (int i = 0; i < nComp; i++){
      130  os << "Component: " << i << std::endl;
      131  os << "weight: " << weights[i] << std::endl;
      132  os << gaus[i] << std::endl;
      133  }
      134  }
      135 
      136  protected:
      137  std::vector<Real> weights;
      138  std::vector<JointGaussian> gaus;
      139  int nVar;
      140  int nComp;
      141  };
      142 
      146  inline Real getPdf(const JointGMM &dist, const std::vector<Real> x)
      147  {
      148  return (Real)dist.getPdf(x);
      149  }
      150 
      154  inline std::vector<Real> getJointSample(const JointGMM &dist, thrust::default_random_engine &rng)
      155  {
      156  return dist.getJointSample(rng);
      157  }
      158 
      162  inline std::ostream& operator<<(std::ostream& os, const JointGMM &dist)
      163  {
      164  dist.output(os);
      165  return os;
      166  }
      167 
      171  __host__ __device__
      172  inline std::string getName(const JointGMM &x) {
      173  return "JointGMM";
      174  }
      175 
      176  } // namespace dist
      177 
      181  inline dist::JointGMM eddaComputeJointGMM(std::vector<Real*>& dataAry, int nSamples, int nComp)
      182  //inline dist::JointGMM eddaComputeJointGMM(int nComp, ublas_matrix &samples)
      183  {
      184  int nVar = dataAry.size();
      185 
      186  //convert input sample to ublas_matrix
      187  ublas_matrix samples(nSamples, nVar);
      188  for (int j = 0; j < nVar; j++){
      189  for (int i = 0; i < nSamples; i++){
      190  samples(i, j) = dataAry[j][i];
      191  }
      192  }
      193 
      194  dist::JointGMM gmm;
      195  //initialization:
      196  //equally set weights, randomly pickup mean, set identity CovMatrix
      197  ublas_vector w(nComp);
      198  ublas_matrix m(nComp, nVar);
      199  ublas_matrix covs(nComp* nVar, nVar);
      200  for (int i = 0; i < nComp; i++)w(i) = 1.0/(float)nComp;
      201  for (int i = 0; i < nComp; i++){
      202  int r = rand() % nSamples;
      203  subrange(m, i, i + 1, 0, nVar) = subrange(samples, r, r + 1, 0, nVar);
      204  }
      205  for (int i = 0; i < nComp; i++ ){
      206  subrange(covs, i*nVar, (i+1)*nVar, 0, nVar) = ublas::identity_matrix<Real>(nVar);
      207  }
      208 
      209  int n_iter = 100;
      210  float current_log_likelihood = NAN;
      211  bool converged_ = false;
      212 
      213  ublas_matrix log_likelihoods(nSamples, 1);
      214  ublas_matrix resposibilities(nSamples, nComp);
      215  for (int i = 0; i < n_iter; i++){
      216  gmm.setGMM(nVar, nComp, w, m, covs);
      217  float prev_log_likelihood = current_log_likelihood;
      218  //E step
      219  current_log_likelihood = 0;
      220  for (int smpPtr = 0; smpPtr < nSamples; smpPtr++){
      221  std::vector<Real> s(nVar);
      222  boost::numeric::ublas::matrix_row<boost::numeric::ublas::matrix<float> > mr(samples, smpPtr);
      223  std::copy(mr.begin(), mr.end(), s.begin());
      224  std::vector<Real> score = gmm.getCompWgtLogProbability(s);
      225 
      226  log_likelihoods(smpPtr, 1) = 0;
      227 
      228  double maxScore = score[0];
      229  for (int j = 1; j < nComp; j++){
      230  if (score[j] > maxScore)maxScore = score[j];
      231  }
      232  for (int j = 0; j < nComp; j++){
      233  log_likelihoods(smpPtr, 1) += exp(score[j]-maxScore);
      234  }
      235 
      236  log_likelihoods(smpPtr, 1) = log(log_likelihoods(smpPtr, 1)) + maxScore;
      237  current_log_likelihood += log_likelihoods(smpPtr, 1);
      238  for (int j = 0; j < nComp; j++){
      239  resposibilities(smpPtr, j) = exp(score[j] - log_likelihoods(smpPtr, 1));
      240  }
      241  }
      242 
      243  //current log likelihood
      244  current_log_likelihood /= (float)nSamples;
      245 
      246  if (prev_log_likelihood == prev_log_likelihood){
      247  double change = abs(current_log_likelihood - prev_log_likelihood);
      248  if (change < 0.001){//threshold for stopping EM
      249  break;
      250  }
      251  }
      252 
      253  //E step
      254  ublas_vector weights(nComp);
      255  for (int j = 0; j < nComp; j++){
      256  weights(j) = 0;
      257  for (int smpPtr = 0; smpPtr < nSamples; smpPtr++){
      258  weights(j) += resposibilities(smpPtr, j);
      259  }
      260  }
      261 
      262  ublas_matrix weighted_X_sum = boost::numeric::ublas::prod(boost::numeric::ublas::trans(resposibilities) , samples);
      263 
      264  double sumWeight = 0;
      265  for (int j = 0; j < nComp; j++){
      266  sumWeight += weights(j);
      267  }
      268  for (int j = 0; j < nComp; j++){
      269  w(j) = (weights(j) / (sumWeight + 10 * EMEPS) + EMEPS);
      270  }
      271 
      272  for (int c = 0; c < nComp; c++){
      273  subrange(m, c, c + 1, 0, nVar) = subrange(weighted_X_sum, c, c + 1, 0, nVar) / (weights(c) + 10 * EMEPS);
      274  }
      275 
      276  //estimate covariance matrix
      277  for (int c = 0; c < nComp; c++){
      278  ublas_vector post(nSamples);
      279  double sumPost = 0;
      280  for (int s = 0; s < nSamples; s++){
      281  post(s) = resposibilities(s, c);
      282  sumPost += resposibilities(s, c);
      283  }
      284  ublas_vector mu = row(m, c);
      285  ublas_matrix diff(nSamples, nVar);
      286  for (int s = 0; s < nSamples; s++){
      287  row(diff, s) = row(samples, s) - mu;
      288  }
      289 
      290  ublas_matrix postDiff( nVar, nSamples );
      291  for (int s = 0; s < nSamples; s++){
      292  column(postDiff, s) = row(diff, s) * post(s);
      293  }
      294 
      295  ublas_matrix avg_cv = boost::numeric::ublas::prod(postDiff, diff);
      296  avg_cv = avg_cv / (sumPost + 10 * EMEPS);
      297  ublas_matrix cv = avg_cv + 0.001 * ublas::identity_matrix<Real>(nVar);
      298  subrange(covs, c*nVar, (c + 1)*nVar, 0, nVar) = cv;
      299  }
      300  }
      301 
      302  gmm.setGMM(nVar, nComp, w, m, covs);
      303  return gmm;
      304  }
      305 
      306 } // namespace edda
      307 
      308 #endif // JointGMM_H
      std::vector< Real > getCompWgtLogProbability(const std::vector< Real > x) const
      Return weight probability of each component (only used by EM)
      Definition: joint_GMM.h:98
      + +
      boost::numeric::ublas::vector< Real > ublas_vector
      Definition: invert_matrix.h:15
      +
      dist::JointGMM eddaComputeJointGMM(std::vector< Real *> &dataAry, int nSamples, int nComp)
      Compute the Gaussian Mixture Model.
      Definition: joint_GMM.h:181
      +
      int nComp
      Definition: joint_GMM.h:140
      +
      Real getPdf(const std::vector< Real > x) const
      Return probability of x.
      Definition: joint_GMM.h:86
      + +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      JointGMM()
      Constructor.
      Definition: joint_GMM.h:46
      +
      __host__ __device__ double getJointPdf(const Dist &dist, const std::vector< Real > x_)
      Return PDF of x.
      Definition: distribution_tag.h:128
      + +
      void setGMM(int _nVar, int _nComp, ublas_vector &_weights, ublas_matrix &_means, ublas_matrix &_covs)
      Return probability of x.
      Definition: joint_GMM.h:59
      + + +
      std::vector< Real > getJointSample(thrust::default_random_engine &rng) const
      Return a samplel drawn from GMM.
      Definition: joint_GMM.h:110
      +
      JointGMM(const JointGMM &gmm)
      Constructor by giving GMM&#39;s parameters.
      Definition: joint_GMM.h:51
      +
      std::vector< Real > weights
      Definition: joint_GMM.h:137
      +
      std::vector< JointGaussian > gaus
      Definition: joint_GMM.h:138
      +
      __host__ __device__ std::string getName(const JointGMM &x)
      Print the distribution typw.
      Definition: joint_GMM.h:172
      + +
      void output(std::ostream &os) const
      Print GMM parameters.
      Definition: joint_GMM.h:128
      +
      #define EMEPS
      Definition: joint_GMM.h:30
      +
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      +
      Definition: distribution_tag.h:40
      +
      Defines a Gaussian class.
      Definition: joint_gaussian.h:36
      +
      Definition: distribution_tag.h:34
      + +
      boost::numeric::ublas::matrix< Real > ublas_matrix
      Definition: invert_matrix.h:16
      +
      Real getPdf(const JointGMM &dist, const std::vector< Real > x)
      Return probability of x.
      Definition: joint_GMM.h:146
      + + +
      std::vector< Real > getJointSample(const JointGMM &dist, thrust::default_random_engine &rng)
      Return a sample drawn from dist.
      Definition: joint_GMM.h:154
      +
      std::vector< Real > getMean(int comp) const
      Return means.
      Definition: joint_GMM.h:79
      +
      __host__ __device__ std::vector< Real > getJointMean(const Dist &dist)
      Definition: distribution_tag.h:117
      + +
      float Real
      Definition: common.h:28
      +
      std::ostream & operator<<(std::ostream &os, const JointGMM &dist)
      Print itself.
      Definition: joint_GMM.h:162
      +
      The Distribution class is a root class for all distribution-type classes.
      Definition: joint_GMM.h:40
      +
      int nVar
      Definition: joint_GMM.h:139
      +
      + + + + diff --git a/html/joint__gaussian_8h.html b/html/joint__gaussian_8h.html new file mode 100644 index 0000000..22db243 --- /dev/null +++ b/html/joint__gaussian_8h.html @@ -0,0 +1,149 @@ + + + + + + + +EDDA: src/distributions/joint_gaussian.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      joint_gaussian.h File Reference
      +
      +
      +
      #include <cstdlib>
      +#include <iostream>
      +#include <vector>
      +#include <math.h>
      +#include <boost/limits.hpp>
      +#include <boost/assert.hpp>
      +#include <boost/static_assert.hpp>
      +#include <boost/random.hpp>
      +#include "common.h"
      +#include "distribution_tag.h"
      +#include "core/statistics.h"
      +#include "invert_matrix.h"
      +#include "Eigen/Dense"
      +
      +

      Go to the source code of this file.

      + + + + + +

      +Classes

      struct  edda::dist::JointGaussian
       Defines a Gaussian class. More...
       
      + + + + + + +

      +Namespaces

       edda
       Experimental functionality.
       
       edda::dist
       
      + + + +

      +Macros

      #define _USE_MATH_DEFINES
       
      + + + + + + + + + + + + + + + +

      +Functions

      __host__ __device__ std::vector< Real > edda::dist::getJointMean (const JointGaussian &dist)
       
      __host__ __device__ double edda::dist::getJointPdf (const JointGaussian &dist, const std::vector< Real > x_)
       Return PDF of x. More...
       
      __host__ __device__ std::vector< Real > edda::dist::getJointSample (const JointGaussian &dist, thrust::default_random_engine &rng)
       Return a random sample using random engine. More...
       
      __host__ std::ostream & edda::dist::operator<< (std::ostream &os, const JointGaussian &dist)
       Print itself. More...
       
      __host__ __device__ std::string edda::dist::getName (const JointGaussian &dist)
       Print the distribution type. More...
       
      +

      Macro Definition Documentation

      + +

      § _USE_MATH_DEFINES

      + +
      +
      + + + + +
      #define _USE_MATH_DEFINES
      +
      + +
      +
      +
      + + + + diff --git a/html/joint__gaussian_8h_source.html b/html/joint__gaussian_8h_source.html new file mode 100644 index 0000000..efa8968 --- /dev/null +++ b/html/joint__gaussian_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +EDDA: src/distributions/joint_gaussian.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      joint_gaussian.h
      +
      +
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef DIST_JOINT_GAUSSIAN_H_
      6 #define DIST_JOINT_GAUSSIAN_H_
      7 
      8 #include <cstdlib>
      9 #include <iostream>
      10 #include <vector>
      11 #define _USE_MATH_DEFINES // For Visual Studio
      12 #include <math.h>
      13 
      14 #include <boost/limits.hpp>
      15 #include <boost/assert.hpp>
      16 #include <boost/static_assert.hpp>
      17 #include <boost/random.hpp>
      18 
      19 #include "common.h"
      20 #include "distribution_tag.h"
      21 #include "core/statistics.h"
      22 #include "invert_matrix.h"
      23 
      24 #include "Eigen/Dense"
      25 
      26 using namespace std;
      27 using namespace Eigen;
      28 
      29 namespace edda {
      30  namespace dist {
      31 
      32  // ------------------------------------------------------------------------------
      37 
      38  // constructor
      39  __host__ __device__
      41  mean = ublas::zero_vector<Real>(3);
      42  setMatrices(ublas::identity_matrix<Real>(3));
      43  }
      44 
      48  __host__ __device__
      49  JointGaussian(const ublas_vector &mean, const ublas_matrix &cov) {
      50  assert(mean.size() == cov.size1() && mean.size() == cov.size2());
      51  this->mean = mean;
      52  setMatrices(cov);
      53 
      54  }
      55 
      59  __host__ __device__
      60  void setMatrices(const ublas_matrix &cov) {
      61  this->cov = cov;
      62 
      63  int covSize = this->cov.size1(); //cov.size1 == cov.size2
      64 
      65  //BEGIN eigenDecomposition using Eigen Library********************
      66  MatrixXf rawCov(covSize, covSize);
      67  for (int i = 0; i < covSize; i++){
      68  for (int j = 0; j < covSize; j++){
      69  rawCov(i,j) = this->cov(i, j);
      70  }
      71  }
      72  SelfAdjointEigenSolver<MatrixXf> eigensolver(rawCov);
      73  if (eigensolver.info() != Success){ std::cout << "eigen decomposition fails" << std::endl; }
      74  ublas_matrix eigenVectors(covSize, covSize);
      75  ublas_vector eigenValues(covSize);
      76  for (int i = 0; i < covSize; i++)eigenValues(i) = eigensolver.eigenvalues()[i];
      77  for (int i = 0; i < covSize; i++){
      78  for (int j = 0; j < covSize; j++){
      79  eigenVectors(i, j) = eigensolver.eigenvectors()(i, j);
      80  }
      81  }
      82  //END eigenDecomposition and eigen value vector is in boost data structure now********************
      83 
      84  //compute eigenMat by eigenvector and eigenvalue (for sampling)
      85  eigenMat.resize(covSize, covSize);
      86  for (int j = 0; j < covSize; j++){
      87  double sqrtEvalue = sqrt(eigenValues(j));
      88  if (sqrtEvalue != sqrtEvalue)sqrtEvalue = 0; //discard the small negative Eigen value
      89  column(eigenMat, j) = column(eigenVectors, j) *sqrtEvalue;
      90  }
      91 
      92  //compute the U matrix and logPDet (for probability estimation)
      93  double cond = 0.0000000000222044604;//just a eps value
      94  double maxAbsEv = -1;
      95  for (int i = 0; i < covSize; i++){
      96  if (maxAbsEv < fabs(eigenValues(i))){
      97  maxAbsEv = fabs(eigenValues(i));
      98  }
      99  }
      100  double eps = cond * maxAbsEv;
      101 
      102  logPDet = 0;
      103  for (int i = 0; i < covSize; i++){
      104  if (eigenValues(i) > eps)
      105  logPDet += log(eigenValues(i));
      106  }
      107 
      108  uMat.resize(covSize, covSize);
      109  for (int j = 0; j < covSize; j++){
      110  double spinv = eigenValues(j);
      111  if (spinv > eps) spinv = 1.0 / spinv;
      112  column(uMat, j) = column(eigenVectors, j) *sqrt(spinv);
      113  }
      114  }
      115 
      119  __host__ __device__
      120  std::vector<Real> getJointSample(thrust::default_random_engine &rng) const {
      121  //draw nVar samples from independent standard normal variant
      122  thrust::random::normal_distribution<double> ndist(0,1);
      123  ublas_vector r(cov.size1());
      124  for (int j = 0; j < r.size(); j++){
      125  r(j) = ndist(rng);
      126  }
      127 
      128  //transform the above sample by the covariance matrix
      129  ublas_vector s(cov.size1());
      130  boost::numeric::ublas::axpy_prod(eigenMat, r, s, true);
      131  std::vector<Real> retS(cov.size1());
      132  for (int j = 0; j < r.size(); j++){
      133  retS[j] = s(j) + mean(j);
      134  }
      135 
      136  return retS;
      137  }
      138 
      142  __host__ __device__
      143  inline double getJointLogPdf(const std::vector<Real> x_) const
      144  {
      145  int k = this->mean.size();
      146  assert(x_.size() == k);
      147  ublas_vector x(k);
      148  std::copy(x_.begin(), x_.end(), x.begin());
      149  x = x - this->mean;
      150  ublas_vector tmp;
      151  tmp = ublas::prod(ublas::trans(x), getUMat());
      152  double density = ublas::inner_prod(tmp, tmp);
      153 
      154  return -0.5 * (k * 1.83787706641 + getLogDet() + density);
      155  }
      156 
      157  __host__ __device__
      158  const ublas_vector &getMean() const { return this->mean; }
      159 
      160  __host__ __device__
      161  const ublas_matrix &getCovariance() const { return this->cov; }
      162 
      163  __host__ __device__
      164  const ublas_matrix &getEigenMat() const { return this->eigenMat; }
      165 
      166  __host__ __device__
      167  const ublas_matrix &getUMat() const { return this->uMat; }
      168 
      169  __host__ __device__
      170  double getLogDet() const { return this->logPDet; }
      171 
      172  private:
      173  ublas_vector mean; // boost's vector
      174  ublas_matrix cov; //covariance matrix
      175  ublas_matrix eigenMat; //use when draw sample, sample = eigenMat * z + mean
      176  ublas_matrix uMat; //use compute the point probability from Gaussian
      177  double logPDet;
      178  };
      179 
      180  // ------------------------------------------------------------------------------
      181  // Below defines JointGaussian related generic functions
      182  __host__ __device__
      183  inline std::vector<Real> getJointMean(const JointGaussian &dist)
      184  {
      185  ublas_vector mean = dist.getMean();
      186  std::vector<Real> m(mean.size());
      187  std::copy(mean.begin(), mean.end(), m.begin());
      188  return m;
      189  }
      190 
      194  __host__ __device__
      195  inline double getJointPdf(const JointGaussian &dist, const std::vector<Real> x_)
      196  {
      197  ublas_vector mean = dist.getMean();
      198  int k = mean.size();
      199  assert(x_.size() == k);
      200  ublas_vector x(k);
      201  std::copy(x_.begin(), x_.end(), x.begin());
      202  x = x - mean;
      203  ublas_vector tmp;
      204  tmp = ublas::prod(ublas::trans(x), dist.getUMat());
      205  double density = ublas::inner_prod(tmp, tmp);
      206 
      207  return exp(-0.5 * (k * 1.83787706641 + dist.getLogDet() + density));
      208  }
      209 
      213  __host__ __device__
      214  inline std::vector<Real> getJointSample(const JointGaussian &dist, thrust::default_random_engine &rng)
      215  {
      216  return getJointSample(dist, rng);
      217  }
      218 
      222  __host__
      223  inline std::ostream& operator<<(std::ostream& os, const JointGaussian &dist)
      224  {
      225  os << "<JointGaussian: mean=" << dist.getMean() << ", covariance=" << dist.getCovariance() << ", eigenMatrix=" << dist.getEigenMat() << ">";
      226  return os;
      227  }
      228 
      232  __host__ __device__
      233  inline std::string getName(const JointGaussian &dist) {
      234  return "JointGaussian";
      235  }
      236 
      237 
      238  } // namespace dist
      239 } // namespace edda
      240 
      241 #endif // DIST_GAUSSIAN_H_
      __host__ __device__ double getJointPdf(const JointGaussian &dist, const std::vector< Real > x_)
      Return PDF of x.
      Definition: joint_gaussian.h:195
      + +
      boost::numeric::ublas::vector< Real > ublas_vector
      Definition: invert_matrix.h:15
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      __host__ __device__ double getLogDet() const
      Definition: joint_gaussian.h:170
      + + +
      __host__ __device__ const ublas_matrix & getUMat() const
      Definition: joint_gaussian.h:167
      + +
      __host__ __device__ JointGaussian()
      Definition: joint_gaussian.h:40
      +
      __host__ std::ostream & operator<<(std::ostream &os, const JointGaussian &dist)
      Print itself.
      Definition: joint_gaussian.h:223
      +
      __host__ __device__ JointGaussian(const ublas_vector &mean, const ublas_matrix &cov)
      Constructor.
      Definition: joint_gaussian.h:49
      +
      __host__ __device__ void setMatrices(const ublas_matrix &cov)
      set and compute the necessary matrixes (eigenMat: for sampling; uMat: for probability computation) ...
      Definition: joint_gaussian.h:60
      + +
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      +
      Definition: distribution_tag.h:40
      +
      __host__ __device__ std::vector< Real > getJointSample(const JointGaussian &dist, thrust::default_random_engine &rng)
      Return a random sample using random engine.
      Definition: joint_gaussian.h:214
      +
      __host__ __device__ std::vector< Real > getJointSample(thrust::default_random_engine &rng) const
      Return a sample drawn from this joint Gaussian.
      Definition: joint_gaussian.h:120
      +
      Defines a Gaussian class.
      Definition: joint_gaussian.h:36
      +
      Definition: distribution_tag.h:34
      +
      boost::numeric::ublas::matrix< Real > ublas_matrix
      Definition: invert_matrix.h:16
      +
      __host__ __device__ std::string getName(const JointGaussian &dist)
      Print the distribution type.
      Definition: joint_gaussian.h:233
      +
      __host__ __device__ std::vector< Real > getJointMean(const JointGaussian &dist)
      Definition: joint_gaussian.h:183
      + +
      __host__ __device__ const ublas_matrix & getCovariance() const
      Definition: joint_gaussian.h:161
      +
      __host__ __device__ const ublas_matrix & getEigenMat() const
      Definition: joint_gaussian.h:164
      +
      __host__ __device__ double getJointLogPdf(const std::vector< Real > x_) const
      Return log probability of x (This function is used by EM)
      Definition: joint_gaussian.h:143
      +
      __host__ __device__ const ublas_vector & getMean() const
      Definition: joint_gaussian.h:158
      +
      + + + + diff --git a/html/joint__histogram_8h.html b/html/joint__histogram_8h.html new file mode 100644 index 0000000..de50212 --- /dev/null +++ b/html/joint__histogram_8h.html @@ -0,0 +1,156 @@ + + + + + + + +EDDA: src/distributions/joint_histogram.h File Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      joint_histogram.h File Reference
      +
      +
      +
      #include <cstdlib>
      +#include <iostream>
      +#include <vector>
      +#include <unordered_set>
      +#include <math.h>
      +#include <boost/limits.hpp>
      +#include <boost/assert.hpp>
      +#include <boost/static_assert.hpp>
      +#include <boost/bind.hpp>
      +#include "common.h"
      +#include "distribution_tag.h"
      +#include "core/statistics.h"
      +#include <boost/unordered_map.hpp>
      +
      +

      Go to the source code of this file.

      + + + + + +

      +Classes

      struct  edda::dist::JointHistogram
       Define a Joint histogram class. More...
       
      + + + + + + +

      +Namespaces

       edda
       Experimental functionality.
       
       edda::dist
       
      + + + +

      +Macros

      #define _USE_MATH_DEFINES
       
      + + + + + + + + + + + + + + + + + + + + + + +

      +Functions

      __host__ __device__ std::vector< Real > edda::dist::getJointMean (const JointHistogram &dist)
       Return joint mean of the joint histogram. More...
       
      __host__ __device__ double edda::dist::getJointPdf (const JointHistogram &dist, const std::vector< Real > &x_)
       Return the probability of a multivariate value given a JointHistogram object (distribution) More...
       
      __host__ std::vector< Real > edda::dist::getJointSample (const JointHistogram &dist)
       Generate a random sample from a distribution. More...
       
      __host__ __device__ std::vector< Real > edda::dist::getJointSample (const JointHistogram &dist, thrust::default_random_engine &rng)
       Return a random sample using random engine. This function leaves the interface for parallel platforms. More...
       
      __host__ std::ostream & edda::dist::operator<< (std::ostream &os, const JointHistogram &dist)
       Print the joint histogram itself. More...
       
      __host__ __device__ std::string edda::dist::getName (const JointHistogram &dist)
       Return the distribution type in string, i.e. "JointHistogram" the joint histogram object. More...
       
      __host__ __device__ JointHistogram edda::dist::eddaComputeJointHistogram (std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)
       This function is the interface used to construct a JointHistogram object outside of the class. More...
       
      +

      Macro Definition Documentation

      + +

      § _USE_MATH_DEFINES

      + +
      +
      + + + + +
      #define _USE_MATH_DEFINES
      +
      + +
      +
      +
      + + + + diff --git a/html/joint__histogram_8h_source.html b/html/joint__histogram_8h_source.html new file mode 100644 index 0000000..70d285a --- /dev/null +++ b/html/joint__histogram_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +EDDA: src/distributions/joint_histogram.h Source File + + + + + + + + + +
      +
      + + + + + + +
      +
      EDDA +
      +
      +
      + + + + + + + + +
      +
      + + +
      + +
      + + +
      +
      +
      +
      joint_histogram.h
      +
      +
      +Go to the documentation of this file.
      1 // Copyright 2015 The Edda Authors. All rights reserved.
      2 // Use of this source code is governed by a MIT-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef DIST_JOINT_HISTOGRAM_H_
      6 #define DIST_JOINT_HISTOGRAM_H_
      7 
      8 #include <cstdlib>
      9 #include <iostream>
      10 #include <vector>
      11 #include <unordered_set>
      12 #define _USE_MATH_DEFINES // For Visual Studio
      13 #include <math.h>
      14 
      15 #include <boost/limits.hpp>
      16 #include <boost/assert.hpp>
      17 #include <boost/static_assert.hpp>
      18 #include <boost/bind.hpp>
      19 
      20 #include "common.h"
      21 #include "distribution_tag.h"
      22 #include "core/statistics.h"
      23 #include <boost/unordered_map.hpp>
      24 
      25 namespace edda {
      26 namespace dist {
      27 
      29 
      35 
      37  __host__ __device__
      39  // initialize a default joint histogram for 3 variables
      40  num_vars = 3;
      41 
      42  min_vals = std::vector<Real>(num_vars, 0);
      43  max_vals = std::vector<Real>(num_vars, 0);
      44  num_bins = std::vector<int>(num_vars, 0);
      45  mean = ublas::zero_vector<Real>(3);
      46  setCovariance( ublas::identity_matrix<Real>(3) );
      47  }
      48 
      56  __host__ __device__
      57  JointHistogram(std::vector<Real*>& dataAry, int nElements, const std::vector<Real> &mins,
      58  const std::vector<Real> &maxs, const std::vector<int> &nBins) {
      59  assert(dataAry.size()==mins.size() && mins.size()==maxs.size() && mins.size()==nBins.size());
      60  for(int i=0; i<mins.size(); i++) assert(maxs[i]>=mins[i]);
      61 
      62  // initialize a joint histogram from given data
      63  num_vars = dataAry.size();
      64  min_vals = mins;
      65  max_vals = maxs;
      66  num_bins = nBins;
      67  // compute the pdf, mean and cov
      68  _update(dataAry, nElements);
      69  }
      70 
      80  __host__ __device__
      81  JointHistogram(int nVars, std::vector<Real> mins, std::vector<Real> maxs, std::vector<Real> binWidths,
      82  std::vector<int> nBins, boost::unordered_map<std::vector<int>, Real> new_pdf,
      83  ublas_vector new_mean, ublas_matrix new_cov) {
      84  // construct from a given JointHistogram parameters
      85  num_vars = nVars;
      86  min_vals = mins;
      87  max_vals = maxs;
      88  num_bins = nBins;
      89  bin_widths = binWidths;
      90  pdf = new_pdf;
      91  mean = new_mean;
      92  setCovariance(new_cov);
      93  _computeJointCdf();
      94  }
      95 
      99  __host__ __device__
      100  void setMinVals(const std::vector<Real>& mins) { min_vals = mins; }
      101 
      105  __host__ __device__
      106  std::vector<Real> getMinVals() const { return min_vals; }
      107 
      111  __host__ __device__
      112  void setMaxVals(const std::vector<Real>& maxs) { max_vals = maxs; }
      113 
      117  __host__ __device__
      118  std::vector<Real> getMaxVals() const { return max_vals; }
      119 
      123  __host__ __device__
      124  void setBinWidths(const std::vector<Real>& widths) { bin_widths = widths; }
      125 
      129  __host__ __device__
      130  std::vector<Real> getBinWidths() const { return bin_widths; }
      131 
      135  __host__ __device__
      136  void setNumBins(const std::vector<int>& bins) { num_bins = bins; }
      137 
      141  __host__ __device__
      142  std::vector<int> getNumBins() const { return num_bins; }
      143 
      146  __host__ __device__
      147  void setNumVars(const int nVars) { num_vars = nVars; }
      148 
      151  __host__ __device__
      152  int getNumVars() const { return num_vars; }
      153 
      158  void setDistr(boost::unordered_map<std::vector<int>, Real> p) { pdf = p; }
      159 
      164  boost::unordered_map<std::vector<int>, Real> getDistr() const { return pdf; }
      165 
      173  std::vector<std::pair<std::vector<int>, Real>> getJointCdf() const {
      174  assert(cdf.size()>0);
      175  assert(cdf.size()==pdf.size());
      176  return cdf;
      177  }
      178 
      181  __host__ __device__
      182  void setCovariance(const ublas_matrix &cov) {
      183  this->cov = cov;
      184  this->det = determinant(this->cov);
      185  }
      186 
      189  __host__ __device__
      190  const ublas_matrix &getCovariance() const { return this->cov ; }
      191 
      194  __host__ __device__
      195  double getDet() const { return this->det ; }
      196 
      201  JointHistogram marginalization(std::unordered_set<int>& vars) const {
      202  assert(pdf.size()>0);
      203  assert(vars.size()>0);
      204 
      205  std::vector<int> new_num_bins;
      206  std::vector<Real> new_bin_widths;
      207  std::vector<Real> new_min_vals;
      208  std::vector<Real> new_max_vals;
      209  boost::unordered_map<std::vector<int>, Real> new_pdf;
      210  ublas_vector new_mean = ublas::zero_vector<Real>(vars.size()); // boost's vector
      211  ublas_matrix new_cov(ublas::identity_matrix<Real>(vars.size())); // boost's vector
      212  int varid = 0;
      213  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      214  new_num_bins.push_back(num_bins[*itv]);
      215  new_bin_widths.push_back(bin_widths[*itv]);
      216  new_min_vals.push_back(min_vals[*itv]);
      217  new_max_vals.push_back(max_vals[*itv]);
      218  new_mean[varid] = mean[*itv];
      219  varid++;
      220  }
      221  // marginalize the pdf
      222  for (auto itp=pdf.begin(); itp!=pdf.end(); ++itp) {
      223  std::vector<int> bin = itp->first;
      224  std::vector<int> key;
      225  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      226  key.push_back(bin[*itv]);
      227  }
      228  new_pdf[key] += itp->second;
      229  }
      230  // compute new mean and cov
      231  int iitr=0;
      232  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      233  int jitr = 0;
      234  for(auto jtv=vars.begin(); jtv!=vars.end(); ++jtv) {
      235  new_cov(iitr,jitr) = cov(*itv, *jtv);
      236  jitr++;
      237  }
      238  iitr++;
      239  }
      240  JointHistogram jhist(vars.size(), new_min_vals, new_max_vals, new_bin_widths, new_num_bins, new_pdf, new_mean, new_cov);
      241  return jhist;
      242  }
      243 
      250  JointHistogram conditionalHist(std::unordered_set<int>& vars, std::vector<int>& cond_var, std::vector<std::pair<int,int>>& bin_range) {
      251  // step 0: check input parameter
      252  assert(pdf.size()>0);
      253  assert(vars.size()>0);
      254  assert(cond_var.size()>0 && cond_var.size()==bin_range.size());
      255  for(int i=0; i<bin_range.size(); i++) {// validate bin range
      256  assert(bin_range[i].first<=bin_range[i].second);
      257  }
      258  for(int i=0; i<cond_var.size(); i++) {// check for duplication
      259  for(int j=i+1; j<cond_var.size(); j++) {
      260  assert(cond_var[i]!=cond_var[j]);
      261  }
      262  }
      263  // step 1: computing P(cond_var in bin_range)
      264  Real pB = 0;
      265  bool flag_valid = false;
      266  for (auto itp=pdf.begin(); itp!=pdf.end(); ++itp) {
      267  std::vector<int> bin = itp->first;
      268  bool flag_in_range = true;
      269  for(int i=0; i<cond_var.size(); i++) {
      270  if(bin[cond_var[i]]<bin_range[i].first || bin[cond_var[i]]>bin_range[i].second) {
      271  flag_in_range = false;
      272  break;
      273  }
      274  }
      275  if(flag_in_range){
      276  flag_valid = true;
      277  pB += itp->second;
      278  }
      279  }
      280  if(pB==0 || !flag_valid) {// no point in conditional range
      281  throw std::runtime_error("no data item falls in the given bin ranges!");
      282  }
      283 
      284  // step 2: computing P(vars AND cond_vars)/P(cond_var in bin_range)
      285  boost::unordered_map<std::vector<int>, Real> new_pdf;
      286  for (auto itp=pdf.begin(); itp!=pdf.end(); ++itp) {
      287  std::vector<int> bin = itp->first;
      288  std::vector<int> key;
      289  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      290  key.push_back(bin[*itv]);
      291  }
      292  bool flag_in_range = true;
      293  for(int i=0; i<cond_var.size(); i++) {
      294  if(bin[cond_var[i]]<bin_range[i].first || bin[cond_var[i]]>bin_range[i].second) {
      295  flag_in_range = false;
      296  break;
      297  }
      298  }
      299  if(flag_in_range)
      300  new_pdf[key] += itp->second/pB;
      301  }
      302 
      303  // step 3: construct a new JointHistogram
      304  std::vector<int> new_num_bins;
      305  std::vector<Real> new_bin_widths;
      306  std::vector<Real> new_min_vals;
      307  std::vector<Real> new_max_vals;
      308  ublas_vector new_mean = ublas::zero_vector<Real>(vars.size()); // boost's vector
      309  ublas_matrix new_cov(ublas::identity_matrix<Real>(vars.size())); // boost's vector
      310  int varid = 0;
      311  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      312  new_num_bins.push_back(num_bins[*itv]);
      313  new_bin_widths.push_back(bin_widths[*itv]);
      314  new_min_vals.push_back(min_vals[*itv]);
      315  new_max_vals.push_back(max_vals[*itv]);
      316  new_mean[varid] = mean[*itv];
      317  varid++;
      318  }
      319  int iitr=0;
      320  for(auto itv=vars.begin(); itv!=vars.end(); ++itv) {
      321  int jitr = 0;
      322  for(auto jtv=vars.begin(); jtv!=vars.end(); ++jtv) {
      323  new_cov(iitr,jitr) = cov(*itv, *jtv);
      324  jitr++;
      325  }
      326  iitr++;
      327  }
      328  JointHistogram jhist(vars.size(), new_min_vals, new_max_vals, new_bin_widths, new_num_bins, new_pdf, new_mean, new_cov);
      329  return jhist;
      330  }
      331 
      332 private:
      333  int num_vars; // number of variables
      334  std::vector<Real> min_vals; // min of each variable
      335  std::vector<Real> max_vals; // max of each variable
      336  std::vector<int> num_bins; // number of bins for each variable
      337  std::vector<Real> bin_widths; // bin width of each variable
      338  boost::unordered_map<std::vector<int>, Real> pdf; // probability distribution function
      339  std::vector<std::pair<std::vector<int>, Real>> cdf; // cumulative distribution function
      340  ublas_matrix cov; // covariance matrix
      341  double det; // determinant of the covariance matrix
      342 
      346  __host__ __device__
      347  void _update(std::vector<Real*>& dataAry, int nElements) {
      348  // 1. compute the PDF (i.e. a sparse matrix)
      349  boost::unordered_map<std::vector<int>, int> cntMap;
      350  std::vector<int> key(num_vars);
      351  bin_widths.clear();
      352  for(int i=0; i<num_vars; i++)
      353  bin_widths.push_back((max_vals[i]-min_vals[i])/num_bins[i]);
      354  for(int j=0; j<nElements; j++) {
      355  for(int i=0; i<num_vars; i++) {// value to bin index
      356  key[i] = std::floor((dataAry[i][j]-min_vals[i])/bin_widths[i]);
      357  if(key[i]>=0 && key[i]<num_bins[i])
      358  continue;
      359  else
      360  key[i] = num_bins[i]-1;
      361  }
      362  cntMap[key]++;// rely on the default initialization
      363  }
      364  // convert count to frequency
      365  for (auto it=cntMap.begin(); it!=cntMap.end(); ++it) {
      366  pdf[it->first] = it->second*1.0/nElements;
      367  }
      368  _computeJointCdf();
      369 
      370  // 2. update the mean
      371  mean = ublas::zero_vector<Real>(num_vars);
      372  for (auto it=pdf.begin(); it!=pdf.end(); ++it) {
      373  std::vector<int> bin = it->first;
      374  for(int i=0; i<bin.size(); i++) {
      375  mean[i] += (min_vals[i]+(bin[i]+0.5)*bin_widths[i])*it->second;
      376  }
      377  }
      378 
      379  // 3. update the cov matrix
      380  setCovariance( ublas::identity_matrix<Real>(num_vars) );
      381  for(int i=0; i<num_vars; i++) {
      382  for(int j=0; j<num_vars; j++) {
      383  for(int k=0; k<nElements; k++) {
      384  cov(i,j) += (dataAry[i][k]-mean[i])*(dataAry[j][k]-mean[j]);
      385  }
      386  }
      387  }
      388  cov *= 1.0/nElements;
      389  setCovariance(cov);
      390  }
      391 
      393  __host__ __device__
      394  void _computeJointCdf() {
      395  assert(pdf.size()>0);
      396  if(cdf.size()==pdf.size()) return; // already constructed before
      397 
      398  // sort PDF in decreasing order, i.e. move high frequency bins to front
      399  std::vector<std::pair<std::vector<int>, Real>> sorted_pdf(pdf.begin(), pdf.end());
      400  std::sort(sorted_pdf.begin(), sorted_pdf.end(),
      401  boost::bind(&std::pair<std::vector<int>, Real>::second, _1) >
      402  boost::bind(&std::pair<std::vector<int>, Real>::second, _2));
      403 
      404  // construct a CDF on the sparse JointHistogram
      405  Real accFreq = sorted_pdf[0].second;
      406  cdf.push_back(sorted_pdf[0]);
      407  for(int i=1; i<sorted_pdf.size(); i++) {
      408  accFreq += sorted_pdf[i].second;
      409  std::pair<std::vector<int>, Real> tmp(sorted_pdf[i].first, accFreq);
      410  cdf.push_back(tmp);
      411  }
      412  //const float epsilon = std::numeric_limits<float>::epsilon();
      413  //assert(abs(accFreq-1)<epsilon);
      414  }
      415 };
      416 
      417 // ------------------------------------------------------------------------------
      418 // Below defines JointHistogram related generic functions
      422 __host__ __device__
      423 inline std::vector<Real> getJointMean(const JointHistogram &dist) {
      424  std::vector<Real> m(dist.mean.size());
      425  std::copy(dist.mean.begin(), dist.mean.end(), m.begin());
      426  return m;
      427 }
      428 
      434 //TODO: need to change the function name, getJointFrequency?
      435 __host__ __device__
      436 inline double getJointPdf(const JointHistogram &dist, const std::vector<Real> &x_) {
      437  int nvars = dist.getNumVars();
      438  std::vector<Real> mins = dist.getMinVals();
      439  std::vector<Real> widths = dist.getBinWidths();
      440  std::vector<int> bins = dist.getNumBins();
      441  std::vector<int> key(nvars);
      442  for(int i=0; i<nvars; i++) {// value to bin index
      443  key[i] = std::floor((x_[i]-mins[i])/widths[i]);
      444  if(key[i]>=0 && key[i]<bins[i])
      445  continue;
      446  else
      447  key[i] = bins[i]-1;
      448  }
      449  return (dist.getDistr())[key];
      450 }
      451 
      459 __host__
      460 static inline int biSearchNextLarge(std::vector<std::pair<std::vector<int>, Real>>& vec, Real p) {
      461  assert(vec.size()>0);
      462  if(vec.size()==1) return 0;
      463  // vec is sorted, increasing order
      464  int low = 0;
      465  int high = vec.size()-1;
      466 
      467  while(low<=high) {
      468  int mid = low+ (high-low)/2;
      469  if(vec[mid].second<p) low = mid+1;
      470  else if(vec[mid].second>p) high = mid-1;
      471  else return mid+1;
      472  }
      473 
      474  if(high<0) return 0; //p<vec[0];
      475  else{
      476  if( low > (vec.size()-1))
      477  return vec.size()-1; // p>=vec[vec.size()-1]
      478  else
      479  return (low<high) ? low+1 : high+1;
      480  }
      481 }
      482 
      486 __host__
      487 inline std::vector<Real> getJointSample(const JointHistogram &dist) {
      488  if(dist.getDistr().size()==0) {
      489  printf("ERROR: distribution size is 0.\n");
      490  return std::vector<Real>(dist.getNumVars(), 0);
      491  }
      492  std::vector<std::pair<std::vector<int>, Real>> cdf;
      493  cdf = dist.getJointCdf();
      494  Real x = static_cast<Real>(rand())/RAND_MAX;
      495  int i=0;
      496  bool useBiSearch = true;
      497  if(useBiSearch) {
      498  i = biSearchNextLarge(cdf, x);
      499  }
      500  else {
      501  while(x > cdf[i].second)
      502  i++;
      503  }
      504 
      505  // if reach here, we find the bin
      506  std::vector<int> bin = cdf[i].first;
      507  std::vector<Real> smp;
      508  std::vector<Real> mins = dist.getMinVals();
      509  std::vector<Real> widths = dist.getBinWidths();
      510  bool binCenter = true;
      511  for(int i=0; i<bin.size(); i++) {
      512  Real smpPos;
      513  if(binCenter) smpPos = 0.5;// use bin center
      514  else smpPos = static_cast<Real>(rand())/RAND_MAX;
      515  smp.push_back(mins[i]+(bin[i]+smpPos)*widths[i]);
      516  }
      517  return smp;
      518 }
      519 
      525 __host__ __device__
      526 inline std::vector<Real> getJointSample(const JointHistogram &dist, thrust::default_random_engine &rng) {
      527  // TODO version used on device side
      528  return getJointSample(dist);
      529 }
      530 
      536 __host__
      537 inline std::ostream& operator<<(std::ostream& os, const JointHistogram &dist) {
      538  os << "<JointHistogram: mean=" << dist.mean << ", covariance=" << dist.getCovariance() << ">" ;
      539  return os;
      540 }
      541 
      545 __host__ __device__
      546 inline std::string getName(const JointHistogram &dist) {
      547  return "JointHistogram";
      548 }
      549 
      561 __host__ __device__
      562 inline JointHistogram eddaComputeJointHistogram(std::vector<Real*>& dataAry, int nElements, const std::vector<Real> &mins,
      563  const std::vector<Real> &maxs, const std::vector<int> &nBins) {
      564  JointHistogram tmp(dataAry, nElements, mins, maxs, nBins);
      565  return tmp;
      566 }
      567 
      568 } // namespace dist
      569 } // namespace edda
      570 
      571 #endif // DIST_HISTOGRAM_H_
      std::string getName(const Real &x)
      Definition: distribution_tag.h:226
      + +
      boost::numeric::ublas::vector< Real > ublas_vector
      Definition: invert_matrix.h:15
      +
      __host__ __device__ std::vector< Real > getMaxVals() const
      Get the max value of each variable.
      Definition: joint_histogram.h:118
      +
      double determinant(const boost::numeric::ublas::matrix< Real > &m)
      Definition: invert_matrix.h:59
      +
      ublas_vector mean
      joint mean of the distribution, a boost&#39;s vector
      Definition: joint_histogram.h:34
      +
      boost::unordered_map< std::vector< int >, Real > getDistr() const
      Get the distribution (pdf) of the joint histogram.
      Definition: joint_histogram.h:164
      +
      __host__ __device__ JointHistogram eddaComputeJointHistogram(std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)
      This function is the interface used to construct a JointHistogram object outside of the class...
      Definition: joint_histogram.h:562
      +
      Experimental functionality.
      Definition: distributionModeler.h:26
      +
      __host__ __device__ double getJointPdf(const Dist &dist, const std::vector< Real > x_)
      Return PDF of x.
      Definition: distribution_tag.h:128
      +
      __host__ __device__ void setMinVals(const std::vector< Real > &mins)
      Set the min value of each variable.
      Definition: joint_histogram.h:100
      +
      Definition: distribution_tag.h:37
      +
      __host__ __device__ std::vector< int > getNumBins() const
      Get the number of bins for each variable.
      Definition: joint_histogram.h:142
      +
      __host__ std::vector< Real > getJointSample(const Dist &dist)
      Return a random sample.
      Definition: distribution_tag.h:139
      +
      __host__ std::ostream & operator<<(std::ostream &os, const Gaussian &dist)
      Print itself.
      Definition: gaussian.h:142
      +
      __host__ __device__ void setMaxVals(const std::vector< Real > &maxs)
      Set the max value of each variable.
      Definition: joint_histogram.h:112
      + +
      __host__ __device__ void setCovariance(const ublas_matrix &cov)
      Set the covariance matrix of the joint histogram.
      Definition: joint_histogram.h:182
      +
      __host__ __device__ void setNumBins(const std::vector< int > &bins)
      Set the number of bins for each variable.
      Definition: joint_histogram.h:136
      +
      #define EDDA_EXPORT
      Definition: edda_export.h:17
      +
      Definition: distribution_tag.h:40
      +
      JointHistogram conditionalHist(std::unordered_set< int > &vars, std::vector< int > &cond_var, std::vector< std::pair< int, int >> &bin_range)
      Compute the joint histogram of certain variables (vars) given the rest of variables(cond_var) within ...
      Definition: joint_histogram.h:250
      +
      __host__ __device__ JointHistogram()
      Default constructor.
      Definition: joint_histogram.h:38
      +
      Define a Joint histogram class.
      Definition: joint_histogram.h:33
      +
      __host__ __device__ std::vector< Real > getBinWidths() const
      Get the bin width used for each variable.
      Definition: joint_histogram.h:130
      +
      void setDistr(boost::unordered_map< std::vector< int >, Real > p)
      Set the distribution (pdf) of the joint histogram.
      Definition: joint_histogram.h:158
      +
      boost::numeric::ublas::matrix< Real > ublas_matrix
      Definition: invert_matrix.h:16
      +
      __host__ __device__ int getNumVars() const
      Get the number of variables of the joint histogram.
      Definition: joint_histogram.h:152
      +
      JointHistogram marginalization(std::unordered_set< int > &vars) const
      Marginalization of the jointHistogram.
      Definition: joint_histogram.h:201
      + +
      __host__ __device__ double getDet() const
      Get the determinant of the covariance matrix.
      Definition: joint_histogram.h:195
      +
      __host__ __device__ JointHistogram(std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)
      Constructor with data and distribution parameters.
      Definition: joint_histogram.h:57
      +
      __host__ __device__ std::vector< Real > getJointMean(const Dist &dist)
      Definition: distribution_tag.h:117
      +
      __host__ __device__ void setBinWidths(const std::vector< Real > &widths)
      Set the bin width used for each variable.
      Definition: joint_histogram.h:124
      +
      float Real
      Definition: common.h:28
      +
      __host__ __device__ JointHistogram(int nVars, std::vector< Real > mins, std::vector< Real > maxs, std::vector< Real > binWidths, std::vector< int > nBins, boost::unordered_map< std::vector< int >, Real > new_pdf, ublas_vector new_mean, ublas_matrix new_cov)
      Constructor that constructs a given jontHistogram parameters.
      Definition: joint_histogram.h:81
      +
      std::vector< std::pair< std::vector< int >, Real > > getJointCdf() const
      Compute a cumulative distribution function, which is similar to the CDF, but only for the non-empty b...
      Definition: joint_histogram.h:173
      +
      __host__ __device__ void setNumVars(const int nVars)
      Set the number of variables of the joint histogram.
      Definition: joint_histogram.h:147
      +
      __host__ __device__ const ublas_matrix & getCovariance() const
      Get the covariance matrix of the joint histogram.
      Definition: joint_histogram.h:190
      +
      __host__ __device__ std::vector< Real > getMinVals() const
      Get the min value of each variable.
      Definition: joint_histogram.h:106
      +
      + + + + diff --git a/html/jquery.js b/html/jquery.js index c197801..f5343ed 100644 --- a/html/jquery.js +++ b/html/jquery.js @@ -13,19 +13,75 @@ * * Date: Mon Nov 21 21:11:03 2011 -0500 */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
      a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
      ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
      t
      ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
      ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; -if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
      a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
      ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
      t
      ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
      ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 -},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

      ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
      ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/

      ","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},ac=a(av); -ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
      ","
      "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; -if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
      ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b -})}})(window); +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

      ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
      ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/
      ",""],legend:[1,"
      ","
      "],thead:[1,"
      ","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
      ","
      "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
      ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
      ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
      + +
      +
      loadCurvilinearDataset.cpp File Reference
      +
      +
      +
      #include <iostream>
      +#include <fstream>
      +#include <string>
      +#include <cstdio>
      +#include <cfloat>
      +#include "edda.h"
      +#include "distributions/gaussian.h"
      +#include "distributions/distribution.h"
      +#include "io/edda_vtk_reader.h"
      +#include "dataset/dataset.h"
      +
      + + + +

      +Functions

      int main (int argc, char **argv)
       
      +

      Function Documentation

      + +

      § main()

      + +
      +
      + + + + + + + + + + + + + + + + + + +
      int main (int argc,
      char ** argv 
      )
      +
      + +
      +
      +
      + + + + diff --git a/html/loadGaussianScalarField_8cpp.html b/html/loadGaussianScalarField_8cpp.html index f84bc67..8ea710b 100644 --- a/html/loadGaussianScalarField_8cpp.html +++ b/html/loadGaussianScalarField_8cpp.html @@ -38,7 +38,6 @@
      + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
      @@ -134,7 +133,7 @@

      Function Documentation

      diff --git a/html/loadGaussianVectorField_8cpp.html b/html/loadGaussianVectorField_8cpp.html index 8b46614..18959c1 100644 --- a/html/loadGaussianVectorField_8cpp.html +++ b/html/loadGaussianVectorField_8cpp.html @@ -38,7 +38,6 @@
      • Main Page
      • Related Pages
      • -
      • Modules
      • Namespaces
      • Classes
      • Files
      • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
        @@ -151,7 +150,7 @@

        Function Documentation

        diff --git a/html/loadScalarDataset_8cpp.html b/html/loadScalarDataset_8cpp.html new file mode 100644 index 0000000..8f7a762 --- /dev/null +++ b/html/loadScalarDataset_8cpp.html @@ -0,0 +1,124 @@ + + + + + + + +EDDA: examples/loadScalarDataset.cpp File Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        loadScalarDataset.cpp File Reference
        +
        +
        +
        #include <iostream>
        +#include <string>
        +#include <cstdio>
        +#include "edda.h"
        +#include "distributions/gaussian.h"
        +#include "distributions/distribution.h"
        +#include "io/edda_vtk_reader.h"
        +#include "dataset/dataset.h"
        +#include "io/edda_writer.h"
        +#include "io/edda_reader.h"
        +
        + + + +

        +Functions

        int main (int argc, char **argv)
         
        +

        Function Documentation

        + +

        § main()

        + +
        +
        + + + + + + + + + + + + + + + + + + +
        int main (int argc,
        char ** argv 
        )
        +
        + +
        +
        +
        + + + + diff --git a/html/mc__streamline_8h.html b/html/mc__streamline_8h.html new file mode 100644 index 0000000..af781cc --- /dev/null +++ b/html/mc__streamline_8h.html @@ -0,0 +1,108 @@ + + + + + + + +EDDA: vis/src/filters/mc_streamline.h File Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        mc_streamline.h File Reference
        +
        +
        +
        #include "random_sample_field.h"
        +#include "core/tuple.h"
        +
        +

        Go to the source code of this file.

        + + + + + + +

        +Classes

        struct  edda::detail::FieldInterp< FieldIterator >
         
        struct  edda::detail::MCStreamline_functor< FieldIterator >
         
        + + + + + + +

        +Namespaces

         edda
         Experimental functionality.
         
         edda::detail
         
        + + + + + +

        +Functions

        template<class FieldIterator , class ParticleIterator , class OutputIterator >
        void edda::mc_streamline (FieldIterator fieldBegin, FieldIterator fieldEnd, ParticleIterator pBegin, ParticleIterator pEnd, int steps, OutputIterator out)
         Monte-Carlo streamline computation. More...
         
        +
        + + + + diff --git a/html/mc__streamline_8h_source.html b/html/mc__streamline_8h_source.html new file mode 100644 index 0000000..5442c40 --- /dev/null +++ b/html/mc__streamline_8h_source.html @@ -0,0 +1,92 @@ + + + + + + + +EDDA: vis/src/filters/mc_streamline.h Source File + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        mc_streamline.h
        +
        +
        +Go to the documentation of this file.
        1 #ifndef MC_STREAMLINE_H
        2 #define MC_STREAMLINE_H
        3 #include "random_sample_field.h"
        4 #include "core/tuple.h"
        5 
        6 namespace edda{
        7 
        8 namespace detail{
        9  template <class FieldIterator>
        10  struct FieldInterp
        11  {
        13  FieldIterator fieldBegin;
        14  FieldInterp (FieldIterator fieldBegin_, Tuple3<int> dim_)
        15  : fieldBegin(fieldBegin_), dim(dim_) { }
        16  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
        17  __host__ __device__
        18  VECTOR3 operator() (thrust::tuple<Tuple3<Dist>, thrust::default_random_engine> &tuple)
        19  {
        20  Dist &dist = thrust::get<0>(tuple);
        21  return dist::getSample(dist, thrust::get<1>(tuple));
        22  }
        23  };
        24 
        25  template <class FieldIterator>
        27  {
        28  FieldIterator fieldBegin;
        29 
        30  template <typename Dist>
        31  __host__ __device__
        32  double opeartor() (thrust::tuple<Dist, VECTOR3 )
        33  };
        34 }
        35 
        39 template <class FieldIterator, class ParticleIterator, class OutputIterator>
        40 void mc_streamline(FieldIterator fieldBegin, FieldIterator fieldEnd,
        41  ParticleIterator pBegin, ParticleIterator pEnd,
        42  int steps,
        43  OutputIterator out)
        44 {
        45  static int rseed ; // random generator seeds
        46  rseed += time(NULL) % 10000;
        47  int particles = pEnd-pBegin;
        48  for (int i=0; i<steps; i++)
        49  thrust::transform( thrust::make_zip_iterator(thrust::make_tuple(pBegin, randomEngineIterator(rseed)) ) ,
        50  thrust::make_zip_iterator(thrust::make_tuple(pEnd, randomEngineIterator(rseed+particles)) ),
        51  out+i*particles,
        53 
        54  //detail::GetSample_functor()
        55  seed += n;
        56 }
        57 
        58 
        59 
        60 } // edda
        61 
        62 #endif // MC_STREAMLINE_H
        63 
        __host__ double getSample(const Dist &dist)
        Return a random sample.
        Definition: distribution_tag.h:84
        +
        Experimental functionality.
        Definition: distributionModeler.h:26
        +
        Definition: mc_streamline.h:26
        + +
        Definition: mc_streamline.h:10
        +
        Specialization of Vector3 for higher performance.
        Definition: vector_matrix.h:101
        +
        FieldIterator fieldBegin
        Definition: mc_streamline.h:13
        +
        FieldInterp(FieldIterator fieldBegin_, Tuple3< int > dim_)
        Definition: mc_streamline.h:14
        +
        Tuple3< int > dim
        Definition: mc_streamline.h:12
        +
        FieldIterator fieldBegin
        Definition: mc_streamline.h:28
        +
        __host__ __device__ VECTOR3 operator()(thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)
        Definition: mc_streamline.h:18
        +
        void mc_streamline(FieldIterator fieldBegin, FieldIterator fieldEnd, ParticleIterator pBegin, ParticleIterator pEnd, int steps, OutputIterator out)
        Monte-Carlo streamline computation.
        Definition: mc_streamline.h:40
        + +
        thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator(int seed)
        randomEngineIterator creates a Thrust default random engine with a given seed
        Definition: thrust_common.h:59
        +
        Vector3< float > VECTOR3
        Definition: vector_matrix.h:253
        +
        + + + + diff --git a/html/md_AUTHORS.html b/html/md_AUTHORS.html index 4acba29..038e18c 100644 --- a/html/md_AUTHORS.html +++ b/html/md_AUTHORS.html @@ -3,16 +3,15 @@ - + + EDDA: AUTHORS + - @@ -21,7 +20,7 @@ - @@ -30,42 +29,25 @@
        +
        EDDA
        - + - + + + + +
        @@ -80,18 +62,14 @@
        AUTHORS
        -

        ```text Names should be added to this file with this pattern:

        -

        For individuals: Name <email address>="">

        -

        For organizations: Organization <fnmatch pattern>="">

        -

        See python fnmatch module documentation for more information. ```

        -

        Wenbin He hewen.nosp@m.bin..nosp@m.495@g.nosp@m.mail.nosp@m..com

        +
        Names should be added to this file with this pattern:
        For individuals:
        Name <email address>
        For organizations:
        Organization <fnmatch pattern>
        See python fnmatch module documentation for more information.

        Wenbin He hewen.nosp@m.bin..nosp@m.495@g.nosp@m.mail.nosp@m..com

        Chun-Ming Chen

        diff --git a/html/md_LICENSE.html b/html/md_LICENSE.html index 895d8d4..2ec861a 100644 --- a/html/md_LICENSE.html +++ b/html/md_LICENSE.html @@ -3,16 +3,15 @@ - + + EDDA: LICENSE + - @@ -21,7 +20,7 @@ - @@ -30,42 +29,25 @@
        +
        EDDA
        - + - + + + + +
        @@ -88,9 +70,9 @@
        diff --git a/html/md_README.html b/html/md_README.html index 3ccb4ca..c3125e7 100644 --- a/html/md_README.html +++ b/html/md_README.html @@ -3,16 +3,15 @@ - + + EDDA: edda + - @@ -21,7 +20,7 @@ - @@ -30,42 +29,25 @@
        +
        EDDA
        - + - + + + + +
        @@ -90,13 +72,14 @@
      • Basic visualizaiton routines for distribution data.
      • Current goal

        -

        Complete a generic data management framework so that in the future we can build uncertainty visualization given any known distribution model.

        +

        Complete a generic data management framework so that in the future we can build uncertainty visualization given any known distribution model.

        +

        Project website https://sites.google.com/site/gravityvisdb/edda

        diff --git a/html/menu.js b/html/menu.js new file mode 100644 index 0000000..97db4c2 --- /dev/null +++ b/html/menu.js @@ -0,0 +1,26 @@ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
      • '); + } else { + $('#main-menu').append('
      • '); + } + } + $('#main-menu').smartmenus(); +} diff --git a/html/menudata.js b/html/menudata.js new file mode 100644 index 0000000..da7d75d --- /dev/null +++ b/html/menudata.js @@ -0,0 +1,173 @@ +var menudata={children:[ +{text:'Main Page',url:'index.html'}, +{text:'Related Pages',url:'pages.html'}, +{text:'Modules',url:'modules.html'}, +{text:'Namespaces',url:'namespaces.html',children:[ +{text:'Namespace List',url:'namespaces.html'}, +{text:'Namespace Members',url:'namespacemembers.html',children:[ +{text:'All',url:'namespacemembers.html',children:[ +{text:'_',url:'namespacemembers.html#index__'}, +{text:'a',url:'namespacemembers_a.html#index_a'}, +{text:'b',url:'namespacemembers_b.html#index_b'}, +{text:'c',url:'namespacemembers_c.html#index_c'}, +{text:'d',url:'namespacemembers_d.html#index_d'}, +{text:'e',url:'namespacemembers_e.html#index_e'}, +{text:'f',url:'namespacemembers_f.html#index_f'}, +{text:'g',url:'namespacemembers_g.html#index_g'}, +{text:'h',url:'namespacemembers_h.html#index_h'}, +{text:'i',url:'namespacemembers_i.html#index_i'}, +{text:'k',url:'namespacemembers_k.html#index_k'}, +{text:'l',url:'namespacemembers_l.html#index_l'}, +{text:'m',url:'namespacemembers_m.html#index_m'}, +{text:'o',url:'namespacemembers_o.html#index_o'}, +{text:'p',url:'namespacemembers_p.html#index_p'}, +{text:'r',url:'namespacemembers_r.html#index_r'}, +{text:'s',url:'namespacemembers_s.html#index_s'}, +{text:'t',url:'namespacemembers_t.html#index_t'}, +{text:'u',url:'namespacemembers_u.html#index_u'}, +{text:'v',url:'namespacemembers_v.html#index_v'}, +{text:'w',url:'namespacemembers_w.html#index_w'}]}, +{text:'Functions',url:'namespacemembers_func.html',children:[ +{text:'a',url:'namespacemembers_func.html#index_a'}, +{text:'b',url:'namespacemembers_func.html#index_b'}, +{text:'c',url:'namespacemembers_func.html#index_c'}, +{text:'d',url:'namespacemembers_func.html#index_d'}, +{text:'e',url:'namespacemembers_func.html#index_e'}, +{text:'f',url:'namespacemembers_func.html#index_f'}, +{text:'g',url:'namespacemembers_func.html#index_g'}, +{text:'i',url:'namespacemembers_func.html#index_i'}, +{text:'l',url:'namespacemembers_func.html#index_l'}, +{text:'m',url:'namespacemembers_func.html#index_m'}, +{text:'o',url:'namespacemembers_func.html#index_o'}, +{text:'r',url:'namespacemembers_func.html#index_r'}, +{text:'s',url:'namespacemembers_func.html#index_s'}, +{text:'t',url:'namespacemembers_func.html#index_t'}, +{text:'u',url:'namespacemembers_func.html#index_u'}, +{text:'w',url:'namespacemembers_func.html#index_w'}]}, +{text:'Variables',url:'namespacemembers_vars.html'}, +{text:'Typedefs',url:'namespacemembers_type.html'}, +{text:'Enumerations',url:'namespacemembers_enum.html'}, +{text:'Enumerator',url:'namespacemembers_eval.html'}]}]}, +{text:'Classes',url:'annotated.html',children:[ +{text:'Class List',url:'annotated.html'}, +{text:'Class Index',url:'classes.html'}, +{text:'Class Hierarchy',url:'hierarchy.html'}, +{text:'Class Members',url:'functions.html',children:[ +{text:'All',url:'functions.html',children:[ +{text:'a',url:'functions.html#index_a'}, +{text:'b',url:'functions_b.html#index_b'}, +{text:'c',url:'functions_c.html#index_c'}, +{text:'d',url:'functions_d.html#index_d'}, +{text:'e',url:'functions_e.html#index_e'}, +{text:'f',url:'functions_f.html#index_f'}, +{text:'g',url:'functions_g.html#index_g'}, +{text:'h',url:'functions_h.html#index_h'}, +{text:'i',url:'functions_i.html#index_i'}, +{text:'j',url:'functions_j.html#index_j'}, +{text:'l',url:'functions_l.html#index_l'}, +{text:'m',url:'functions_m.html#index_m'}, +{text:'n',url:'functions_n.html#index_n'}, +{text:'o',url:'functions_o.html#index_o'}, +{text:'p',url:'functions_p.html#index_p'}, +{text:'q',url:'functions_q.html#index_q'}, +{text:'r',url:'functions_r.html#index_r'}, +{text:'s',url:'functions_s.html#index_s'}, +{text:'t',url:'functions_t.html#index_t'}, +{text:'u',url:'functions_u.html#index_u'}, +{text:'v',url:'functions_v.html#index_v'}, +{text:'w',url:'functions_w.html#index_w'}, +{text:'x',url:'functions_x.html#index_x'}, +{text:'y',url:'functions_y.html#index_y'}, +{text:'z',url:'functions_z.html#index_z'}, +{text:'~',url:'functions_0x7e.html#index_0x7e'}]}, +{text:'Functions',url:'functions_func.html',children:[ +{text:'a',url:'functions_func.html#index_a'}, +{text:'b',url:'functions_func_b.html#index_b'}, +{text:'c',url:'functions_func_c.html#index_c'}, +{text:'d',url:'functions_func_d.html#index_d'}, +{text:'e',url:'functions_func_e.html#index_e'}, +{text:'f',url:'functions_func_f.html#index_f'}, +{text:'g',url:'functions_func_g.html#index_g'}, +{text:'h',url:'functions_func_h.html#index_h'}, +{text:'i',url:'functions_func_i.html#index_i'}, +{text:'j',url:'functions_func_j.html#index_j'}, +{text:'l',url:'functions_func_l.html#index_l'}, +{text:'m',url:'functions_func_m.html#index_m'}, +{text:'n',url:'functions_func_n.html#index_n'}, +{text:'o',url:'functions_func_o.html#index_o'}, +{text:'p',url:'functions_func_p.html#index_p'}, +{text:'r',url:'functions_func_r.html#index_r'}, +{text:'s',url:'functions_func_s.html#index_s'}, +{text:'t',url:'functions_func_t.html#index_t'}, +{text:'u',url:'functions_func_u.html#index_u'}, +{text:'v',url:'functions_func_v.html#index_v'}, +{text:'w',url:'functions_func_w.html#index_w'}, +{text:'x',url:'functions_func_x.html#index_x'}, +{text:'y',url:'functions_func_y.html#index_y'}, +{text:'z',url:'functions_func_z.html#index_z'}, +{text:'~',url:'functions_func_0x7e.html#index_0x7e'}]}, +{text:'Variables',url:'functions_vars.html',children:[ +{text:'a',url:'functions_vars.html#index_a'}, +{text:'b',url:'functions_vars.html#index_b'}, +{text:'c',url:'functions_vars.html#index_c'}, +{text:'d',url:'functions_vars.html#index_d'}, +{text:'e',url:'functions_vars.html#index_e'}, +{text:'f',url:'functions_vars.html#index_f'}, +{text:'g',url:'functions_vars.html#index_g'}, +{text:'h',url:'functions_vars.html#index_h'}, +{text:'i',url:'functions_vars.html#index_i'}, +{text:'l',url:'functions_vars.html#index_l'}, +{text:'m',url:'functions_vars.html#index_m'}, +{text:'n',url:'functions_vars.html#index_n'}, +{text:'o',url:'functions_vars.html#index_o'}, +{text:'p',url:'functions_vars.html#index_p'}, +{text:'q',url:'functions_vars.html#index_q'}, +{text:'r',url:'functions_vars.html#index_r'}, +{text:'s',url:'functions_vars.html#index_s'}, +{text:'t',url:'functions_vars.html#index_t'}, +{text:'u',url:'functions_vars.html#index_u'}, +{text:'v',url:'functions_vars.html#index_v'}, +{text:'w',url:'functions_vars.html#index_w'}, +{text:'x',url:'functions_vars.html#index_x'}, +{text:'y',url:'functions_vars.html#index_y'}, +{text:'z',url:'functions_vars.html#index_z'}]}, +{text:'Typedefs',url:'functions_type.html'}, +{text:'Enumerator',url:'functions_eval.html'}, +{text:'Related Functions',url:'functions_rela.html'}]}]}, +{text:'Files',url:'files.html',children:[ +{text:'File List',url:'files.html'}, +{text:'File Members',url:'globals.html',children:[ +{text:'All',url:'globals.html',children:[ +{text:'_',url:'globals.html#index__'}, +{text:'a',url:'globals.html#index_a'}, +{text:'b',url:'globals.html#index_b'}, +{text:'c',url:'globals.html#index_c'}, +{text:'d',url:'globals.html#index_d'}, +{text:'e',url:'globals.html#index_e'}, +{text:'f',url:'globals.html#index_f'}, +{text:'g',url:'globals.html#index_g'}, +{text:'i',url:'globals.html#index_i'}, +{text:'l',url:'globals.html#index_l'}, +{text:'m',url:'globals.html#index_m'}, +{text:'n',url:'globals.html#index_n'}, +{text:'o',url:'globals.html#index_o'}, +{text:'p',url:'globals.html#index_p'}, +{text:'r',url:'globals.html#index_r'}, +{text:'s',url:'globals.html#index_s'}, +{text:'t',url:'globals.html#index_t'}, +{text:'u',url:'globals.html#index_u'}, +{text:'v',url:'globals.html#index_v'}, +{text:'w',url:'globals.html#index_w'}]}, +{text:'Functions',url:'globals_func.html',children:[ +{text:'a',url:'globals_func.html#index_a'}, +{text:'c',url:'globals_func.html#index_c'}, +{text:'f',url:'globals_func.html#index_f'}, +{text:'g',url:'globals_func.html#index_g'}, +{text:'m',url:'globals_func.html#index_m'}, +{text:'p',url:'globals_func.html#index_p'}, +{text:'t',url:'globals_func.html#index_t'}, +{text:'u',url:'globals_func.html#index_u'}, +{text:'v',url:'globals_func.html#index_v'}]}, +{text:'Variables',url:'globals_vars.html'}, +{text:'Typedefs',url:'globals_type.html'}, +{text:'Macros',url:'globals_defs.html'}]}]}]} diff --git a/html/modules.html b/html/modules.html index edd8573..7923a27 100644 --- a/html/modules.html +++ b/html/modules.html @@ -3,16 +3,15 @@ - + + EDDA: Modules + - @@ -21,7 +20,7 @@ - @@ -30,43 +29,26 @@
        +
        EDDA
        - + - + + + + +
        @@ -82,15 +64,15 @@
        Here is a list of all modules:
        diff --git a/html/namespaceedda.html b/html/namespaceedda.html index 1198826..57f98e0 100644 --- a/html/namespaceedda.html +++ b/html/namespaceedda.html @@ -3,16 +3,15 @@ - + + EDDA: edda Namespace Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -99,27 +75,78 @@ - + - + - +

        Namespaces

         detail
         detail
         
         dist
         dist
         
         Math
         Math
         
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - - + + + + @@ -141,63 +168,27 @@ + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + +

        Classes

        class  CartesianGrid
         Cartesian Grid (Regular and Irregular) More...
         
        struct  Cell
         
        class  CurvilinearGrid
         
        class  Dataset
         Holds all information of a dataset, which includes: 1) Geometry and 2) Data array. More...
         
        class  DistrArray
         The class interface of distrbution arrays used by the Dataset class. More...
         
        class  DistributionModeler
         
        struct  GetPositionAsIs
         
        struct  GetPositionFromDistributionMean
         Get the position from mean of the distribution. More...
         
        struct  GetSample_functor
         
        class  GmmArray
         
        class  GmmVtkDataArray
         GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved memory accessing. More...
         
        class  Grid
         base class for grid More...
         
        class  HistoArray
         
        class  JointDistrArray
         An array of joint distributions. More...
         
        class  MATRIX3
         
        class  NdArray
         A general n-dimensional array compatible to Cuda. More...
         
        class  ndarray_iterator
         
        struct  NotImplementedException
         
        class  OutOfBoundException
         
        class  GmmArray
        struct  PointInfo
         about the advection point More...
         
        struct  Rand
         Simply return a random value between 0..1. More...
         
        class  RegularCartesianGrid
         
        class  ScalarDistrArray
         Array of scalar distributions. More...
         
        class  shared_ary
         
        struct  Rand
         Simply return a random value between 0..1. More...
        class  StreamTracer
         Uncertain particle tracing. More...
         
        struct  Tetra_step
         
        class  Tuple
         
         
        struct  Tuple9
         
        class  VecDistrModeler
         
        class  Vector
         Vectors are Tuples that have geometry concepts. More...
         Vectors are Tuples that have geometry concepts. More...
         
        class  Vector< Real, 3 >
         Specialization of Vector3 for higher performance. More...
         Specialization of Vector3 for higher performance. More...
         
        class  Vector< Real, 4 >
         Specialization of Vector4 for higher performance. More...
         
        class  AbstractDataArray
         The AbstractDataArray class used in the Dataset class. More...
         
        class  DataSamplingArray
         Take a distribution data array and output a sample. More...
         
        class  ScalarArray
         A simple implementation of DataArray. More...
         
        class  VectorArray
         
        class  Dataset
         Holds all information of a dataset, which includes: 1) Geometry and 2) Data array. More...
         
        struct  PointInfo
         about the advection point More...
         
        class  Grid
         base class for grid More...
         
        class  CartesianGrid
         Cartesian Grid (Regular and Irregular) More...
         
        class  RegularCartesianGrid
         
        struct  GetPositionAsIs
         
        struct  GetPositionFromDistributionMean
         Get the position from mean of the distribution. More...
         
        class  StreamTracer
         Uncertain particle tracing. More...
         
        class  ndarray_iterator
         
        struct  GetSample_functor
         Specialization of Vector4 for higher performance. More...
         
        class  GmmVtkDataArray
         GmmVtkDataArray implements AbstractDataArray. It holds vtkDataArrys and returns GMMs with interleaved memory accessing. More...
        class  VectorDistrArray
         Array of vector distributions. More...
         
        - - + + @@ -209,10 +200,12 @@ - + - - + + + +

        Typedefs

        typedef float Real
         
        typedef Tuple< NdArray< Real >
        -::SelfDevicePtr, MAX_GMMs *3 > 
        DeviceGMMArray
         
        typedef Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 > DeviceGMMArray
         
        template<typename Real >
        using Vector3 = Vector< Real, 3 >
         
        typedef Vector4< float > VECTOR4
         
        typedef struct edda::PointInfo PointInfo
         about the advection point More...
         about the advection point More...
         
        typedef Vector3< dist::GaussianGaussian3
         
        typedef boost::numeric::ublas::vector< Realublas_vector
         
        typedef boost::numeric::ublas::matrix< Realublas_matrix
         
        @@ -231,6 +224,18 @@ WEIGHTED_SUM } + + @@ -246,19 +251,19 @@ Functions - + - + - + - + @@ -269,11 +274,12 @@ - - + + + + + @@ -283,6 +289,8 @@ + + @@ -309,7 +317,7 @@ - + @@ -326,93 +334,144 @@ - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + +

        Enumerations

         
        enum  DistrType {
        +  GMM, +GMM2, +GMM3, +GMM4, +
        +  GMM5, +HIST, +HYBRID +
        + }
         
        enum  TraceDir { TD_FORWARD, TD_BACKWARD }
        template<class T , typename coeffT = float>
        lerp (const T &x, const T &y, const coeffT ratio)
         linear interpolation More...
         linear interpolation More...
         
        template<class T , typename coeffT = float>
        biLerp (const T &ll, const T &hl, const T &lh, const T &hh, const coeffT coeff[2])
         bilinear interpolation More...
         bilinear interpolation More...
         
        template<class T , typename coeffT = float>
        triLerp (const T &lll, const T &hll, const T &lhl, const T &hhl, const T &llh, const T &hlh, const T &lhh, const T &hhh, const coeffT coeff[3])
         trilinear interpolation More...
         trilinear interpolation More...
         
        template<class T >
        baryInterp (const T &v1, const T &v2, const T &v3, const T &v4, double coeff[3])
         barycentric interpolation More...
         barycentric interpolation More...
         
        template<class T >
        cubeLerp (const Tuple8< T > points, const double coeff[3])
        template<class T >
        box_muller (T m, T s)
         
        thrust::transform_iterator
        -< detail::GenRand,
        -thrust::counting_iterator< int > > 
        randomEngineIterator (int seed)
         randomEngineIterator creates a Thrust default random engine with a given seed More...
        thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator (int seed)
         randomEngineIterator creates a Thrust default random engine with a given seed More...
         
        template<class InputIterator , class OutputIterator >
        void randomSampleField (InputIterator begin, InputIterator end, OutputIterator out)
         
        template<typename A , int N>
        std::ostream & operator<< (std::ostream &out, const Tuple< A, N > &t)
         
        template<typename A , int N>
        bool operator!= (const Tuple< A, N > &t1, const Tuple< A, N > &t2)
         
        VECTOR3 operator* (const MATRIX3 &m0, const VECTOR3 &v0)
         
        template<typename Real >
        Real dot (const Vector3< Real > &v0, const Vector3< Real > &v1)
         
         
        template<typename Real >
        Real dot (const Vector4< Real > &v0, const Vector4< Real > &v1)
         Vector 4 operators. More...
         Vector 4 operators. More...
         
        template<typename Real >
        Vector4< Realoperator+ (const Vector4< Real > &v0, const Vector4< Real > &v1)
        template<typename Real >
        Vector4< Realoperator* (const Vector4< Real > &v0, float x0)
         
        template<typename T >
        std::shared_ptr< Dataset< T > > make_Dataset (Grid *pGrid, AbstractDataArray *pArray)
         Create a shared pointer of Dataset. More...
         
        template<typename T >
        std::shared_ptr< Dataset< T > > make_Dataset (Grid *pGrid, DistrArray *pArray)
         Create a shared pointer of Dataset. More...
         
        float getStepSize (VECTOR3 &p, VECTOR3 &p1, VECTOR3 &p2, float oldStepSize)
         
        template<class Iterator >
        ReturnStatus FuzzyIsosurface (Iterator dataIterator, int dim[3], double isov, std::shared_ptr< NdArray< Real > > &probField)
         
        template<class RandomIterator >
        ReturnStatus levelCrossingProb (RandomIterator dataIterator, int dim[3], double isov, std::shared_ptr< NdArray< Real > > &probField)
         
        template<class InputIterator , class OutputIterator >
        void randomSampleField (InputIterator begin, InputIterator end, OutputIterator out)
         
        shared_ary< GaussianloadGaussianRawArray (string meanfile, string stdfile, size_t len)
         array loader More...
         
        shared_ary< Gaussian3loadVec3GaussianRawArray (string meanfile, string stdfile, size_t len)
         
        shared_ptr< Dataset< Gaussian > > loadGaussianRegularGrids (string &meanfile, string &stdfile, int dim[3])
         dataset creator More...
         
        shared_ptr< Dataset< double > > loadGaussianSamplingRegularGrids (string &meanfile, string &stdfile, int dim[3])
         create a regular grid dataset of random values from gaussian distributions More...
         
        shared_ptr< Dataset< Gaussian3 > > loadVec3GaussianRegularGrids (string &meanfile, string &stdfile, int dim[3])
         create a regular grid dataset of 3d gaussian distribution More...
         
        shared_ptr< Dataset< VECTOR3 > > loadVec3GaussianSamplingRegularGrids (string &meanfile, string &stdfile, int dim[3])
         create a regular grid dataset of random samples from 3d gaussian distribution More...
         
        template<typename T >
        shared_ary< T > loadRawFile (const std::string &fname, size_t len)
         
        shared_ary< dist::GaussianloadGaussianRawArray (std::string meanfile, std::string stdfile, size_t len)
         
        shared_ary< Gaussian3loadVec3GaussianRawArray (std::string meanfile, std::string stdfile, size_t len)
         
        std::shared_ptr< Dataset
        -< dist::Gaussian > > 
        loadGaussianRegularGrids (std::string &meanfile, std::string &stdfile, int dim[3])
         create a regular grid dataset of gaussian distribution More...
         
        std::shared_ptr< Dataset
        -< double > > 
        loadGaussianSamplingRegularGrids (std::string &meanfile, std::string &stdfile, int dim[3])
         create a regular grid dataset of random values from gaussian distributions More...
         
        std::shared_ptr< Dataset
        -< Gaussian3 > > 
        loadVec3GaussianRegularGrids (std::string &meanfile, std::string &stdfile, int dim[3])
         create a regular grid dataset of 3d gaussian distribution More...
         
        std::shared_ptr< Dataset
        -< VECTOR3 > > 
        loadVec3GaussianSamplingRegularGrids (std::string &meanfile, std::string &stdfile, int dim[3])
         create a regular grid dataset of random samples from 3d gaussian distribution More...
         
        template<typename T >
        std::shared_ptr< Dataset< T > > loadData (std::string filename, bool bSamplingDistribution=false)
         
        template<typename T >
        std::shared_ptr< Dataset< T > > loadVectorData (std::string filename, bool bSamplingDistribution=false)
         
        template<typename T >
        void writeRawNrrdFile (std::shared_ptr< Dataset< T > > dataset, std::string filename)
         
        ReturnStatus write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        std::string getPath (const std::string &filepath)
         
        std::string getFilename (const std::string &filepath)
         
        int check_convergence (double fmax, double fmin, double ftol)
         EM helper function. More...
         
        double eval_gaussian_density (double mean, double sigma, double val)
         EM helper function. More...
         
        void update_parameters (int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
         EM helper function. More...
         
        double classprob (int j, double x, int k, double *prob, double *mean, double *sd)
         EM helper function. More...
         
        void update_class_prob (int n, double *data, int k, double *prob, double *mean, double *sd, double **class_prob)
         EM helper function. More...
         
        double computeLogLikelihood (int n, double *data, int k, double *prob, double *mean, double *sd)
         EM helper function. More...
         
        template<int GMMs>
        void eddaComputeEM (double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
         
        template<int GMMs>
        bool testforMatch (double val, dist::GaussianMixture< GMMs > *currentGMM, std::vector< float > *valList, std::vector< float > *distList)
         Incremental update helper function. More...
         
        template<int GMMs>
        void eddaUpdateGMMIncremental (double *samples, int numSamples, dist::GaussianMixture< GMMs > *new_gmm)
         
        dist::Histogram eddaComputeHistogram (float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)
         
        dist::Histogram eddaComputeHistogram (double *dataArray, int nElement, const int _nBins, const double _minValue=1, const double _maxValue=-1)
         
        template<class T >
        bool invert_matrix (const ublas::matrix< T > &input, ublas::matrix< T > &inverse)
         
        int determinant_sign (const boost::numeric::ublas::permutation_matrix< std::size_t > &pm)
         
        double determinant (const boost::numeric::ublas::matrix< Real > &m)
         
        dist::JointGMM eddaComputeJointGMM (std::vector< Real *> &dataAry, int nSamples, int nComp)
         Compute the Gaussian Mixture Model. More...
         
        DistrArrayreadGMMArray (ifstream &myfile, int n)
         
        DistrArrayreadHistoArray (ifstream &myfile, int n)
         
        template<typename T >
        shared_ptr< Dataset< T > > loadEddaDatasetTemplate (const string &edda_file)
         
        shared_ptr< Dataset< Real > > loadEddaScalarDataset_noneVTK (const string &edda_file)
         
        shared_ptr< Dataset< VECTOR3 > > loadEddaVector3Dataset_noneVTK (const string &edda_file)
         
        std::shared_ptr< Dataset< Real > > EDDA_EXPORT loadEddaScalarDataset_noneVTK (const std::string &edda_file)
         
        std::shared_ptr< Dataset< VECTOR3 > > EDDA_EXPORT loadEddaVector3Dataset_noneVTK (const std::string &edda_file)
         
        string getDistrType (vtkFieldData *vtk_data, const string &array_name_prefix)
         
        DistrArraygenHistoArray (vtkPointData *vtk_point_data)
         
        template<typename T >
        shared_ptr< Dataset< T > > loadEddaDataset (const string &edda_file, const string &array_name_prefix)
         
        shared_ptr< Dataset< Real > > loadEddaScalarDataset (const string &edda_file, const string &array_name_prefix)
         
        shared_ptr< Dataset< VECTOR3 > > loadEddaVector3Dataset (const string &edda_file, const string &array_name_prefix)
         
        std::shared_ptr< Dataset< Real > > EDDA_EXPORT loadEddaScalarDataset (const std::string &edda_file, const std::string &array_name_prefix="")
         
        std::shared_ptr< Dataset< VECTOR3 > > EDDA_EXPORT loadEddaVector3Dataset (const std::string &edda_file, const std::string &array_name_prefix="")
         
        const dist::GMMTuple getGmmModels_archival (dist::Variant &distr, int GMs, int model)
         
        void addVtkGmmArrays (vtkPointData *vtk_point_data, DistrArray *array, const string &array_name, int GMs)
         
        void addVtkHistoArrays (vtkPointData *vtk_point_data, DistrArray *array, const string &array_name)
         
        void setDistrType (vtkFieldData *vtk_data, string distrName, const string &array_name_prefix)
         
        void writeEddaVtkDataset (shared_ptr< Dataset< Real > > dataset, const string &edda_file, const string &array_name_prefix)
         
        void EDDA_EXPORT writeEddaVtkDataset (std::shared_ptr< Dataset< Real > >, const std::string &edda_file, const std::string &array_name_prefix="")
         
        const dist::GMMTuple getGmmModels (dist::Variant &distr, int GMs, int model)
         
        void writeGmmArrays (ofstream &myFile, DistrArray *array, int GMs)
         
        void writeHistoArrays (ofstream &myFile, DistrArray *array)
         
        template<typename T >
        void writeEddaDatasetTemplate (shared_ptr< Dataset< T > > dataset, const string &edda_file)
         
        void writeEddaDataset (shared_ptr< Dataset< VECTOR3 > > dataset, const string &edda_file)
         
        void writeEddaDataset (shared_ptr< Dataset< Real > > dataset, const string &edda_file)
         
        void EDDA_EXPORT writeEddaDataset (std::shared_ptr< Dataset< Real > >, const std::string &edda_file)
         
        void EDDA_EXPORT writeEddaDataset (std::shared_ptr< Dataset< VECTOR3 > >, const std::string &edda_file)
         
        ReturnStatus write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        std::string getPath (const std::string &filepath)
         
        std::string getFilename (const std::string &filepath)
         
        string removeFileExtension (const string &filename)
         
        bool isFilenameOnly (const string &filename)
         
        string getFileExtension (const string &filename)
         
        std::string removeFileExtension (const std::string &filename)
         
        bool isFilenameOnly (const std::string &filename)
         
        std::string getFileExtension (const std::string &filename)
         
        std::string EDDA_EXPORT removeFileExtension (const std::string &filename)
         
        bool EDDA_EXPORT isFilenameOnly (const std::string &filename)
         
        std::string EDDA_EXPORT getFileExtension (const std::string &filename)
         
        template<class Iterator >
        ReturnStatus FuzzyIsosurface (Iterator dataIterator, int dim[3], double isov, std::shared_ptr< NdArray< Real > > &probField)
         
        template<class RandomIterator >
        ReturnStatus levelCrossingProb (RandomIterator dataIterator, int dim[3], double isov, std::shared_ptr< NdArray< Real > > &probField)
         
        template<class FieldIterator , class ParticleIterator , class OutputIterator >
        void mc_streamline (FieldIterator fieldBegin, FieldIterator fieldEnd, ParticleIterator pBegin, ParticleIterator pEnd, int steps, OutputIterator out)
         Monte-Carlo streamline computation. More...
         
        - - @@ -421,62 +480,90 @@ + +

        Variables

        const int kNdArrayMaxDims = 8
         
        const double DEG_TO_RAD = 0.0174532925199432957692
         
        const double RAD_TO_DEG = 57.2957795130823208768
         
        const double EPS = 1.0E-6
         
        const int kNdArrayMaxDims = 8
         

        Detailed Description

        Experimental functionality.

        -

        Distributions: Define generic functions, which can be overriden by specific template classes

        +

        Distributions: Define distribution interfaces

        +

        Distributions: Define generic functions, tags

        +

        Histogram: TODO

        Typedef Documentation

        - + +

        § DeviceGMMArray

        +
        - +
        typedef Tuple<NdArray<Real>::SelfDevicePtr, MAX_GMMs*3> edda::DeviceGMMArraytypedef Tuple<NdArray<Real>::SelfDevicePtr, MAX_GMs*3> edda::DeviceGMMArray
        - + +

        § PointInfo

        +
        +

        about the advection point

        +
        - + +

        § Real

        +
        - +
        typedef struct edda::PointInfo edda::PointInfotypedef float edda::Real
        -

        about the advection point

        +
        +
        + +

        § ublas_matrix

        + +
        +
        + + + + +
        typedef boost::numeric::ublas::matrix<Real> edda::ublas_matrix
        +
        - + +

        § ublas_vector

        +
        - +
        typedef float edda::Realtypedef boost::numeric::ublas::vector<Real> edda::ublas_vector
        - + +

        § Vector3

        +
        @@ -490,7 +577,9 @@
        - + +

        § VECTOR3

        +
        @@ -502,7 +591,9 @@ - + +

        § Vector4

        +
        @@ -516,7 +607,9 @@
        - + +

        § VECTOR4

        +
        @@ -529,7 +622,9 @@

        Enumeration Type Documentation

        - + +

        § CellType

        +
        @@ -539,19 +634,40 @@

        Enumeration Type Documentation

        - - - - + + + + +
        Enumerator
        TRIANGLE  -
        CUBE  -
        POLYGON  -
        TETRAHEDRON  -
        Enumerator
        TRIANGLE 
        CUBE 
        POLYGON 
        TETRAHEDRON 
        + +
        +
        + +

        § DistrType

        + +
        +
        + + + + +
        enum edda::DistrType
        +
        + + + + + + + +
        Enumerator
        GMM 
        GMM2 
        GMM3 
        GMM4 
        GMM5 
        HIST 
        HYBRID 
        - + +

        § InterpType

        +
        @@ -561,15 +677,15 @@

        Enumeration Type Documentation

        - - + +
        Enumerator
        TRI_LERP  -
        WEIGHTED_SUM  -
        Enumerator
        TRI_LERP 
        WEIGHTED_SUM 
        - + +

        § ReturnStatus

        +
        @@ -579,17 +695,16 @@

        Enumeration Type Documentation

        - - - + + +
        Enumerator
        SUCCESS  -
        FAIL  -
        OUT_OF_BOUND  -
        Enumerator
        SUCCESS 
        FAIL 
        OUT_OF_BOUND 
        - + +

        § TraceDir

        +
        @@ -599,15 +714,15 @@

        Enumeration Type Documentation

        - - + +
        Enumerator
        TD_FORWARD  -
        TD_BACKWARD  -
        Enumerator
        TD_FORWARD 
        TD_BACKWARD 
        - + +

        § TraceOrd

        +
        @@ -617,20 +732,92 @@

        Enumeration Type Documentation

        - - - - + + + +
        Enumerator
        TO_EULER  -
        TO_RK2  -
        TO_RK4  -
        TO_RK45  -
        Enumerator
        TO_EULER 
        TO_RK2 
        TO_RK4 
        TO_RK45 

        Function Documentation

        - + +

        § addVtkGmmArrays()

        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        void edda::addVtkGmmArrays (vtkPointData * vtk_point_data,
        DistrArrayarray,
        const string & array_name,
        int GMs 
        )
        +
        + +
        +
        + +

        § addVtkHistoArrays()

        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        void edda::addVtkHistoArrays (vtkPointData * vtk_point_data,
        DistrArrayarray,
        const string & array_name 
        )
        +
        + +
        +
        + +

        § baryInterp()

        +
        @@ -686,7 +873,9 @@

        Function Documentation

        - + +

        § biLerp()

        +
        @@ -742,7 +931,9 @@

        Function Documentation

        - + +

        § box_muller()

        +
        @@ -770,26 +961,32 @@

        Function Documentation

        - + +

        § check_convergence()

        +
        -
        -template<typename Real >
        - + - - + + - - + + + + + + + + @@ -804,64 +1001,54 @@

        Function Documentation

        Vector3<Real> edda::cross int edda::check_convergence (const Vector3< Real > & v0, double fmax,
        const Vector3< Real > & v1 double fmin,
        double ftol 
        +

        EM helper function.

        +
        - + +

        § classprob()

        +
        -
        -template<class T >
        - - -
        - + - - + + - - + + + - - + + -
        T edda::cubeLerp double edda::classprob (const Tuple8< T > points, int j,
        const double coeff[3] double x,
        )int k,
        -
        -inline
        -
        - -
        -
        - -
        -
        -
        -template<typename Real >
        - - -
        - - - - - + + + + - - + + + + + + + + @@ -876,28 +1063,948 @@

        Function Documentation

        Real edda::dot (const Vector3< Real > & v0, double * prob,
        const Vector3< Real > & v1 double * mean,
        double * sd 
        +

        EM helper function.

        +
        - + +

        § computeLogLikelihood()

        +
        -
        -template<typename Real >
        + + +
        - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Real edda::dot double edda::computeLogLikelihood (const Vector4< Real > & v0, int n,
        const Vector4< Real > & v1 double * data,
        int k,
        double * prob,
        double * mean,
        double * sd 
        )
        +
        +inline
        +
        + +

        EM helper function.

        + +
        +
        + +

        § cross()

        + +
        +
        +
        +template<typename Real >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        Vector3<Real> edda::cross (const Vector3< Real > & v0,
        const Vector3< Real > & v1 
        )
        +
        +inline
        +
        + +
        +
        + +

        § cubeLerp()

        + +
        +
        +
        +template<class T >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        T edda::cubeLerp (const Tuple8< T > points,
        const double coeff[3] 
        )
        +
        +inline
        +
        + +
        +
        + +

        § determinant()

        + +
        +
        + + + + + +
        + + + + + + + + +
        double edda::determinant (const boost::numeric::ublas::matrix< Real > & m)
        +
        +inline
        +
        + +
        +
        + +

        § determinant_sign()

        + +
        +
        + + + + + +
        + + + + + + + + +
        int edda::determinant_sign (const boost::numeric::ublas::permutation_matrix< std::size_t > & pm)
        +
        +inline
        +
        + +
        +
        + +

        § dot() [1/2]

        + +
        +
        +
        +template<typename Real >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        Real edda::dot (const Vector3< Real > & v0,
        const Vector3< Real > & v1 
        )
        +
        +inline
        +
        + +
        +
        + +

        § dot() [2/2]

        + +
        +
        +
        +template<typename Real >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        Real edda::dot (const Vector4< Real > & v0,
        const Vector4< Real > & v1 
        )
        +
        +inline
        +
        + +

        Vector 4 operators.

        + +
        +
        + +

        § eddaComputeEM()

        + +
        +
        +
        +template<int GMMs>
        + + + + + + + + + + + + + + + + + + + + + + + + +
        void edda::eddaComputeEM (double * samples,
        int numSamples,
        dist::GaussianMixture< GMMs > * new_gmm 
        )
        +
        +

        Main EM function

        + +
        +
        + +

        § eddaComputeHistogram() [1/2]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        dist::Histogram edda::eddaComputeHistogram (float * dataArray,
        int nElement,
        const int _nBins,
        const float _minValue = 1,
        const float _maxValue = -1 
        )
        +
        +inline
        +
        + +
        +
        + +

        § eddaComputeHistogram() [2/2]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        dist::Histogram edda::eddaComputeHistogram (double * dataArray,
        int nElement,
        const int _nBins,
        const double _minValue = 1,
        const double _maxValue = -1 
        )
        +
        +inline
        +
        + +
        +
        + +

        § eddaComputeJointGMM()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        dist::JointGMM edda::eddaComputeJointGMM (std::vector< Real *> & dataAry,
        int nSamples,
        int nComp 
        )
        +
        +inline
        +
        + +

        Compute the Gaussian Mixture Model.

        + +
        +
        + +

        § eddaUpdateGMMIncremental()

        + +
        +
        +
        +template<int GMMs>
        + + + + + + + + + + + + + + + + + + + + + + + + +
        void edda::eddaUpdateGMMIncremental (double * samples,
        int numSamples,
        dist::GaussianMixture< GMMs > * new_gmm 
        )
        +
        +

        Main Incremental GMM update function

        + +
        +
        + +

        § eval_gaussian_density()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        double edda::eval_gaussian_density (double mean,
        double sigma,
        double val 
        )
        +
        +inline
        +
        + +

        EM helper function.

        + +
        +
        + +

        § FuzzyIsosurface()

        + +
        +
        +
        +template<class Iterator >
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        ReturnStatus edda::FuzzyIsosurface (Iterator dataIterator,
        int dim[3],
        double isov,
        std::shared_ptr< NdArray< Real > > & probField 
        )
        +
        +

        Compute level crossing probablility.

        +
        Parameters
        + + + + +
        dataIteratora random-accessible iterator for the input array, in size dim[0]*dim[1]*dim[2]
        isovisovalue to query
        [out]probFieldoutput array.
        +
        +
        +

        Compute cell-wise probability of level crossing given distributions on the grid points. The output will be allocated with size (dim[0]-1)*(dim[1]-1)*(dim[2]-1).

        + +
        +
        + +

        § genHistoArray()

        + +
        +
        + + + + + + + + +
        DistrArray* edda::genHistoArray (vtkPointData * vtk_point_data)
        +
        + +
        +
        + +

        § get_Vector4()

        + +
        +
        +
        +template<typename Real >
        + + + + + +
        + + + + + + + + +
        Vector4<Real> edda::get_Vector4 (Vector3< Realvec)
        +
        +inline
        +
        + +
        +
        + +

        § getDistrType()

        + +
        +
        + + + + + + + + + + + + + + + + + + +
        string edda::getDistrType (vtkFieldData * vtk_data,
        const string & array_name_prefix 
        )
        +
        + +
        +
        + +

        § getFileExtension() [1/2]

        + +
        +
        + + + + + + + + +
        std::string EDDA_EXPORT edda::getFileExtension (const std::string & filename)
        +
        + +
        +
        + +

        § getFileExtension() [2/2]

        + +
        +
        + + + + + + + + +
        string edda::getFileExtension (const string & filename)
        +
        + +
        +
        + +

        § getFilename()

        + +
        +
        + + + + + + + + +
        std::string EDDA_EXPORT edda::getFilename (const std::string & filepath)
        +
        + +
        +
        + +

        § getGmmModels()

        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        const dist::GMMTuple edda::getGmmModels (dist::Variantdistr,
        int GMs,
        int model 
        )
        +
        + +
        +
        + +

        § getGmmModels_archival()

        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        const dist::GMMTuple edda::getGmmModels_archival (dist::Variantdistr,
        int GMs,
        int model 
        )
        +
        + +
        +
        + +

        § getPath()

        + +
        +
        + + + + + + + + +
        std::string EDDA_EXPORT edda::getPath (const std::string & filepath)
        +
        + +
        +
        + +

        § getStepSize()

        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        float edda::getStepSize (VECTOR3p,
        VECTOR3p1,
        VECTOR3p2,
        float oldStepSize 
        )
        +
        + +
        +
        + +

        § invert_matrix()

        + +
        +
        +
        +template<class T >
        + + + + + + + + + + + + + + + + + + +
        bool edda::invert_matrix (const ublas::matrix< T > & input,
        ublas::matrix< T > & inverse 
        )
        +
        + +
        +
        + +

        § isFilenameOnly() [1/2]

        + +
        +
        + + + + + + + + +
        bool EDDA_EXPORT edda::isFilenameOnly (const std::string & filename)
        +
        + +
        +
        + +

        § isFilenameOnly() [2/2]

        + +
        +
        + + + + + + + + +
        bool edda::isFilenameOnly (const string & filename)
        +
        + +
        +
        + +

        § lerp()

        + +
        +
        +
        +template<class T , typename coeffT = float>
        + + +
        + + + + + + + + + + + + + + + + + + @@ -912,20 +2019,22 @@

        Function Documentation

        T edda::lerp (const T & x,
        const T & y,
        const coeffT ratio 
        -

        Vector 4 operators.

        +

        linear interpolation

        - + +

        § levelCrossingProb()

        +
        -template<class Iterator >
        +template<class RandomIterator >
        - + - + @@ -943,7 +2052,7 @@

        Function Documentation

        - + @@ -966,57 +2075,49 @@

        Function Documentation

        - + +

        § loadEddaDataset()

        +
        -template<typename Real >
        -
        ReturnStatus edda::FuzzyIsosurface ReturnStatus edda::levelCrossingProb (Iterator RandomIterator  dataIterator,
        std::shared_ptr< NdArray< Real > > & std::shared_ptr< NdArray< Real > > &  probField 
        - - - - -
        +template<typename T > - + - - + + + + + + + -
        Vector4<Real> edda::get_Vector4 shared_ptr<Dataset<T> > edda::loadEddaDataset (Vector3< Real > vec)const string & edda_file,
        const string & array_name_prefix 
        -
        -inline
        -
        - -
        - - -
        -
        - - - - - + +
        std::string edda::getFileExtension (const std::string & filename) )
        - + +

        § loadEddaDatasetTemplate()

        +
        +
        +template<typename T >
        - + - +
        string edda::getFileExtension shared_ptr<Dataset<T> > edda::loadEddaDatasetTemplate ( const string & filename)edda_file)
        @@ -1024,65 +2125,51 @@

        Function Documentation

        - + +

        § loadEddaScalarDataset() [1/2]

        +
        - + - - + -
        std::string edda::getFilename std::shared_ptr<Dataset<Real> > EDDA_EXPORT edda::loadEddaScalarDataset ( const std::string & filepath)edda_file,
        -
        - -
        -
        - -
        -
        - - - + + - + + + + +
        std::string edda::getPath ( const std::string & filepath)array_name_prefix = "" 
        )
        - + +

        § loadEddaScalarDataset() [2/2]

        +
        - + - - - - - - - - - - - - - - + + - - + + @@ -1094,15 +2181,17 @@

        Function Documentation

        - + +

        § loadEddaScalarDataset_noneVTK() [1/2]

        +
        float edda::getStepSize shared_ptr<Dataset<Real> > edda::loadEddaScalarDataset (VECTOR3 & p,
        VECTOR3 & p1,
        VECTOR3 & p2, const string & edda_file,
        float oldStepSize const string & array_name_prefix 
        - + - +
        bool edda::isFilenameOnly std::shared_ptr<Dataset<Real> > EDDA_EXPORT edda::loadEddaScalarDataset_noneVTK ( const std::string & filename)edda_file)
        @@ -1110,15 +2199,17 @@

        Function Documentation

        - + +

        § loadEddaScalarDataset_noneVTK() [2/2]

        +
        - + - +
        bool edda::isFilenameOnly shared_ptr<Dataset<Real> > edda::loadEddaScalarDataset_noneVTK ( const string & filename)edda_file)
        @@ -1126,32 +2217,23 @@

        Function Documentation

        - + +

        § loadEddaVector3Dataset() [1/2]

        +
        -
        -template<class T , typename coeffT = float>
        - - - - - -
        - + - - - - - - - - + + - - + + @@ -1159,84 +2241,96 @@

        Function Documentation

        T edda::lerp std::shared_ptr<Dataset<VECTOR3> > EDDA_EXPORT edda::loadEddaVector3Dataset (const T & x,
        const T & y, const std::string & edda_file,
        const coeffT ratio const std::string & array_name_prefix = "" 
        -
        -inline
        -

        linear interpolation

        -
        - + +

        § loadEddaVector3Dataset() [2/2]

        +
        -
        -template<class RandomIterator >
        - + - - + + - - + + - - - + + +
        ReturnStatus edda::levelCrossingProb shared_ptr<Dataset<VECTOR3> > edda::loadEddaVector3Dataset (RandomIterator dataIterator, const string & edda_file,
        int dim[3], const string & array_name_prefix 
        double isov, )
        +
        + +
        +
        + +

        § loadEddaVector3Dataset_noneVTK() [1/2]

        + +
        +
        + - + + + + - - +
        std::shared_ptr<Dataset<VECTOR3> > EDDA_EXPORT edda::loadEddaVector3Dataset_noneVTK (const std::string & edda_file) std::shared_ptr< NdArray< Real > > & probField 
        +
        + +
        +
        + +

        § loadEddaVector3Dataset_noneVTK() [2/2]

        + +
        +
        + + + + + - -
        shared_ptr<Dataset<VECTOR3> > edda::loadEddaVector3Dataset_noneVTK (const string & edda_file) )
        -

        Compute level crossing probablility.

        -
        Parameters
        - - - - -
        dataIteratora random-accessible iterator for the input array, in size dim[0]*dim[1]*dim[2]
        isovisovalue to query
        [out]probFieldoutput array.
        -
        -
        -

        Compute cell-wise probability of level crossing given distributions on the grid points. The output will be allocated with size (dim[0]-1)*(dim[1]-1)*(dim[2]-1).

        - + +

        § make_Dataset()

        +
        template<typename T >
        + + + + + +
        - + - - + + - - + + @@ -1244,31 +2338,60 @@

        Function Documentation

        std::shared_ptr<Dataset<T> > edda::loadData std::shared_ptr< Dataset<T> > edda::make_Dataset (std::string filename, GridpGrid,
        bool bSamplingDistribution = false DistrArraypArray 
        +
        +inline
        +

        Create a shared pointer of Dataset.

        +
        - + +

        § mc_streamline()

        +
        +
        +template<class FieldIterator , class ParticleIterator , class OutputIterator >
        - + - - + + - - + + + + + + + + + + + + + + + + + + + + - - + + @@ -1278,31 +2401,32 @@

        Function Documentation

        shared_ary<Gaussian> edda::loadGaussianRawArray void edda::mc_streamline (string meanfile, FieldIterator fieldBegin,
        string stdfile, FieldIterator fieldEnd,
        ParticleIterator pBegin,
        ParticleIterator pEnd,
        int steps,
        size_t len OutputIterator out 
        -

        array loader

        +

        Monte-Carlo streamline computation.

        - + +

        § operator!=()

        +
        +
        +template<typename A , int N>
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1310,31 +2434,32 @@

        Function Documentation

        shared_ary<dist::Gaussian> edda::loadGaussianRawArray bool edda::operator!= (std::string meanfile,
        std::string stdfile, const Tuple< A, N > & t1,
        size_t len const Tuple< A, N > & t2 
        +
        +inline
        - + +

        § operator*() [1/7]

        +
        - + - - - - - - - - + + - - + + @@ -1344,31 +2469,30 @@

        Function Documentation

        std::shared_ptr<Dataset<dist::Gaussian> > edda::loadGaussianRegularGrids VECTOR3 edda::operator* (std::string & meanfile,
        std::string & stdfile, const MATRIX3m0,
        int dim[3] const VECTOR3v0 
        -

        create a regular grid dataset of gaussian distribution

        -
        - + +

        § operator*() [2/7]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1376,34 +2500,37 @@

        Function Documentation

        shared_ptr<Dataset<Gaussian> > edda::loadGaussianRegularGrids Real edda::operator* (string & meanfile,
        string & stdfile, Vector3< Real > & v0,
        int dim[3] Vector3< Real > & v1 
        +
        +inline
        -

        dataset creator

        -

        create a regular grid dataset of gaussian distribution

        -
        - + +

        § operator*() [3/7]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1411,33 +2538,37 @@

        Function Documentation

        std::shared_ptr<Dataset<double> > edda::loadGaussianSamplingRegularGrids Vector3<Real> edda::operator* (std::string & meanfile,
        std::string & stdfile, float x0,
        int dim[3] const Vector3< Real > & v0 
        +
        +inline
        -

        create a regular grid dataset of random values from gaussian distributions

        -
        - + +

        § operator*() [4/7]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1445,29 +2576,37 @@

        Function Documentation

        shared_ptr<Dataset<double> > edda::loadGaussianSamplingRegularGrids Vector3<Real> edda::operator* (string & meanfile,
        string & stdfile, const Vector3< Real > & v0,
        int dim[3] float x0 
        +
        +inline
        -

        create a regular grid dataset of random values from gaussian distributions

        -
        - + +

        § operator*() [5/7]

        +
        -template<typename T >
        +template<typename Real >
        + + + + + +
        - + - - + + - - + + @@ -1475,31 +2614,37 @@

        Function Documentation

        shared_ary<T> edda::loadRawFile Real edda::operator* (const std::string & fname, Vector4< Real > & v0,
        size_t len Vector4< Real > & v1 
        +
        +inline
        - + +

        § operator*() [6/7]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1507,31 +2652,37 @@

        Function Documentation

        shared_ary<Gaussian3> edda::loadVec3GaussianRawArray Vector4<Real> edda::operator* (string meanfile,
        string stdfile, float x0,
        size_t len const Vector4< Real > & v0 
        +
        +inline
        - + +

        § operator*() [7/7]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1539,31 +2690,37 @@

        Function Documentation

        shared_ary<Gaussian3> edda::loadVec3GaussianRawArray Vector4<Real> edda::operator* (std::string meanfile,
        std::string stdfile, const Vector4< Real > & v0,
        size_t len float x0 
        +
        +inline
        - + +

        § operator+() [1/2]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1571,33 +2728,37 @@

        Function Documentation

        std::shared_ptr<Dataset<Gaussian3> > edda::loadVec3GaussianRegularGrids Vector3<Real> edda::operator+ (std::string & meanfile,
        std::string & stdfile, const Vector3< Real > & v0,
        int dim[3] const Vector3< Real > & v1 
        +
        +inline
        -

        create a regular grid dataset of 3d gaussian distribution

        -
        - + +

        § operator+() [2/2]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1605,33 +2766,37 @@

        Function Documentation

        shared_ptr<Dataset<Gaussian3> > edda::loadVec3GaussianRegularGrids Vector4<Real> edda::operator+ (string & meanfile,
        string & stdfile, const Vector4< Real > & v0,
        int dim[3] const Vector4< Real > & v1 
        +
        +inline
        -

        create a regular grid dataset of 3d gaussian distribution

        -
        - + +

        § operator-() [1/2]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1639,33 +2804,37 @@

        Function Documentation

        std::shared_ptr<Dataset<VECTOR3> > edda::loadVec3GaussianSamplingRegularGrids Vector3<Real> edda::operator- (std::string & meanfile,
        std::string & stdfile, const Vector3< Real > & v0,
        int dim[3] const Vector3< Real > & v1 
        +
        +inline
        -

        create a regular grid dataset of random samples from 3d gaussian distribution

        -
        - + +

        § operator-() [2/2]

        +
        +
        +template<typename Real >
        + + + + + +
        - + - - - - - - - - + + - - + + @@ -1673,29 +2842,34 @@

        Function Documentation

        shared_ptr<Dataset<VECTOR3> > edda::loadVec3GaussianSamplingRegularGrids Vector4<Real> edda::operator- (string & meanfile,
        string & stdfile, const Vector4< Real > & v0,
        int dim[3] const Vector4< Real > & v1 
        +
        +inline
        -

        create a regular grid dataset of random samples from 3d gaussian distribution

        -
        - + +

        § operator<<()

        +
        -template<typename T >
        +template<typename A , int N>
        - + - - + + - - + + @@ -1707,26 +2881,25 @@

        Function Documentation

        - + +

        § operator==()

        +
        -template<typename T >
        -
        std::shared_ptr<Dataset<T> > edda::loadVectorData std::ostream& edda::operator<< (std::string filename, std::ostream & out,
        bool bSamplingDistribution = false const Tuple< A, N > & t 
        - - - - -
        +template<typename A , int N> - + - - + + - - + + @@ -1734,42 +2907,25 @@

        Function Documentation

        std::shared_ptr< Dataset<T> > edda::make_Dataset bool edda::operator== (Grid * pGrid, const Tuple< A, N > & t1,
        AbstractDataArray * pArray const Tuple< A, N > & t2 
        -
        -inline
        -

        Create a shared pointer of Dataset.

        -
        - + +

        § randomEngineIterator()

        +
        -
        -template<typename A , int N>
        @@ -1779,28 +2935,37 @@

        Function Documentation

        - + - - - - - - - - - - + + - -
        bool edda::operator!= thrust::transform_iterator<detail::GenRand, thrust::counting_iterator<int> > edda::randomEngineIterator (const Tuple< A, N > & t1,
        const Tuple< A, N > & t2 
        int seed) )
        +

        randomEngineIterator creates a Thrust default random engine with a given seed

        +
        Returns
        A Thrust iterator
        +

        Note: The caller should ensure that the seeds provided are not repetative in patterns

        +
        - + +

        § randomSampleField()

        +
        -template<typename Real >
        - - - - - -
        +template<class InputIterator , class OutputIterator > - + - - + + - - + + + + + + + + @@ -1808,35 +2973,29 @@

        Function Documentation

        Real edda::operator* void edda::randomSampleField (Vector3< Real > & v0, InputIterator begin,
        Vector3< Real > & v1 InputIterator end,
        OutputIterator out 
        -
        -inline
        +

        Random sampling an array. Output iterator must point to elements in type 'Real'

        +

        Output iterator must point to elements in type 'Real'

        - + +

        § readGMMArray()

        +
        -
        -template<typename Real >
        - - - - - -
        - + - - + + - - + + @@ -1844,35 +3003,27 @@

        Function Documentation

        Vector3<Real> edda::operator* DistrArray* edda::readGMMArray (float x0, ifstream & myfile,
        const Vector3< Real > & v0 int n 
        -
        -inline
        - + +

        § readHistoArray()

        +
        -
        -template<typename Real >
        - - - - - -
        - + - - + + - - + + @@ -1880,71 +3031,69 @@

        Function Documentation

        Vector3<Real> edda::operator* DistrArray* edda::readHistoArray (const Vector3< Real > & v0, ifstream & myfile,
        float x0 int n 
        -
        -inline
        - + +

        § removeFileExtension() [1/2]

        +
        -
        -template<typename Real >
        - - - - - -
        - + - - - - - + + - - +
        Real edda::operator* std::string EDDA_EXPORT edda::removeFileExtension (Vector4< Real > & v0,
        const std::string & filename) Vector4< Real > & v1 
        +
        + +
        + + +

        § removeFileExtension() [2/2]

        + +
        +
        + + + + + - -
        string edda::removeFileExtension (const string & filename) )
        -
        -inline
        - + +

        § setDistrType()

        +
        -
        -template<typename Real >
        - - - - - -
        - + - - + + - - + + + + + + + + @@ -1952,35 +3101,41 @@

        Function Documentation

        Vector4<Real> edda::operator* void edda::setDistrType (float x0, vtkFieldData * vtk_data,
        const Vector4< Real > & v0 string distrName,
        const string & array_name_prefix 
        -
        -inline
        - + +

        § testforMatch()

        +
        -template<typename Real >
        - - - - - -
        +template<int GMMs> - + - - + + - - + + + + + + + + + + + + + + @@ -1988,35 +3143,34 @@

        Function Documentation

        Vector4<Real> edda::operator* bool edda::testforMatch (const Vector4< Real > & v0, double val,
        float x0 dist::GaussianMixture< GMMs > * currentGMM,
        std::vector< float > * valList,
        std::vector< float > * distList 
        -
        -inline
        +

        Incremental update helper function.

        +
        - + +

        § tetraLerp()

        +
        -template<typename Real >
        +template<class T >
        - + - - + + - - + + @@ -2033,26 +3187,70 @@

        Function Documentation

        - + +

        § triLerp()

        +
        -template<typename Real >
        +template<class T , typename coeffT = float>
        Vector3<Real> edda::operator+ T edda::tetraLerp (const Vector3< Real > & v0, const Tuple4< T > points,
        const Vector3< Real > & v1 const double coeff[3] 
        - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2067,28 +3265,60 @@

        Function Documentation

        Vector4<Real> edda::operator+ T edda::triLerp (const Vector4< Real > & v0, const T & lll,
        const Vector4< Real > & v1 const T & hll,
        const T & lhl,
        const T & hhl,
        const T & llh,
        const T & hlh,
        const T & lhh,
        const T & hhh,
        const coeffT coeff[3] 
        +

        trilinear interpolation

        +
        - + +

        § update_class_prob()

        +
        -
        -template<typename Real >
        - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -2103,28 +3333,60 @@

        Function Documentation

        Vector3<Real> edda::operator- (const Vector3< Real > & v0, void edda::update_class_prob (int n,
        double * data,
        int k,
        double * prob,
        double * mean,
        double * sd,
        const Vector3< Real > & v1 double ** class_prob 
        +

        EM helper function.

        +
        - + +

        § update_parameters()

        +
        -
        -template<typename Real >
        - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2139,25 +3401,51 @@

        Function Documentation

        Vector4<Real> edda::operator- void edda::update_parameters (const Vector4< Real > & v0, int n,
        const Vector4< Real > & v1 double * data,
        int k,
        double * prob,
        double * mean,
        double * sd,
        double ** class_prob 
        +

        EM helper function.

        +
        - + +

        § write_nrrd_3d()

        +
        -
        -template<typename A , int N>
        - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2169,23 +3457,23 @@

        Function Documentation

        - + +

        § writeEddaDataset() [1/4]

        +
        -
        -template<typename A , int N>
        std::ostream& edda::operator<< ReturnStatus EDDA_EXPORT edda::write_nrrd_3d (std::ostream & out, const char * nrrd_fname,
        const Tuple< A, N > & t const char * raw_fname,
        int w,
        int h,
        int d,
        const char * type 
        - + - - + + - - + + @@ -2197,57 +3485,51 @@

        Function Documentation

        - + +

        § writeEddaDataset() [2/4]

        +
        -
        bool edda::operator== void EDDA_EXPORT edda::writeEddaDataset (const Tuple< A, N > & t1, std::shared_ptr< Dataset< Real > > ,
        const Tuple< A, N > & t2 const std::string & edda_file 
        - - - - -
        - + - - + + + + + + + + + + + +
        thrust::transform_iterator<detail::GenRand, thrust::counting_iterator<int> > edda::randomEngineIterator void EDDA_EXPORT edda::writeEddaDataset (int seed)std::shared_ptr< Dataset< VECTOR3 > > ,
        const std::string & edda_file 
        )
        -
        -inline
        -

        randomEngineIterator creates a Thrust default random engine with a given seed

        -
        Returns
        A Thrust iterator
        -

        Note: The caller should ensure that the seeds provided are not repetative in patterns

        -
        - + +

        § writeEddaDataset() [3/4]

        +
        -
        -template<class InputIterator , class OutputIterator >
        - + - - - - - - - - + + - - + + @@ -2256,63 +3538,56 @@

        Function Documentation

        void edda::randomSampleField void edda::writeEddaDataset (InputIterator begin,
        InputIterator end, shared_ptr< Dataset< VECTOR3 > > dataset,
        OutputIterator out const string & edda_file 
        -

        Random sampling an array. Output iterator must point to elements in type 'Real'

        -

        Output iterator must point to elements in type 'Real'

        - + +

        § writeEddaDataset() [4/4]

        +
        - + - - - + + -
        std::string edda::removeFileExtension void edda::writeEddaDataset (const std::string & filename)shared_ptr< Dataset< Real > > dataset,
        -
        - -
        -
        - -
        -
        - - - + + - + + + + +
        string edda::removeFileExtension ( const string & filename)edda_file 
        )
        - + +

        § writeEddaDatasetTemplate()

        +
        -template<class T >
        - - - - - -
        +template<typename T > - + - - + + - - + + @@ -2320,77 +3595,67 @@

        Function Documentation

        T edda::tetraLerp void edda::writeEddaDatasetTemplate (const Tuple4< T > points, shared_ptr< Dataset< T > > dataset,
        const double coeff[3] const string & edda_file 
        -
        -inline
        - + +

        § writeEddaVtkDataset() [1/2]

        +
        -
        -template<class T , typename coeffT = float>
        - - - - - -
        - + - - - - - - - - - - - - - - + + - - + + - - + + - - - + + +
        T edda::triLerp void EDDA_EXPORT edda::writeEddaVtkDataset (const T & lll,
        const T & hll,
        const T & lhl, std::shared_ptr< Dataset< Real > > ,
        const T & hhl, const std::string & edda_file,
        const T & llh, const std::string & array_name_prefix = "" 
        const T & hlh, )
        +
        + +
        + + +

        § writeEddaVtkDataset() [2/2]

        + +
        +
        + - - - - + + + + - - + + - - + + @@ -2398,56 +3663,33 @@

        Function Documentation

        const T & lhh, void edda::writeEddaVtkDataset (shared_ptr< Dataset< Real > > dataset,
        const T & hhh, const string & edda_file,
        const coeffT coeff[3] const string & array_name_prefix 
        -
        -inline
        -

        trilinear interpolation

        -
        - + +

        § writeGmmArrays()

        +
        - + - - - - - - - - + + - - - - - - - - + + - - - - - - - + @@ -2459,23 +3701,23 @@

        Function Documentation

        - + +

        § writeHistoArrays()

        +
        -
        -template<typename T >
        ReturnStatus edda::write_nrrd_3d void edda::writeGmmArrays (const char * nrrd_fname,
        const char * raw_fname, ofstream & myFile,
        int w,
        int h, DistrArrayarray,
        int d,
        const char * type GMs 
        - + - - + + - - + + @@ -2488,7 +3730,9 @@

        Function Documentation

        Variable Documentation

        - + +

        § DEG_TO_RAD

        +
        void edda::writeRawNrrdFile void edda::writeHistoArrays (std::shared_ptr< Dataset< T > > dataset, ofstream & myFile,
        std::string filename DistrArrayarray 
        @@ -2500,7 +3744,9 @@

        Variable Documentation

        - + +

        § EPS

        +
        @@ -2512,7 +3758,9 @@

        Variable Documentation

        - + +

        § kNdArrayMaxDims

        +
        @@ -2524,7 +3772,9 @@

        Variable Documentation

        - + +

        § PI_BY_2

        +
        @@ -2536,7 +3786,9 @@

        Variable Documentation

        - + +

        § RAD_TO_DEG

        +
        @@ -2551,9 +3803,9 @@

        Variable Documentation

        diff --git a/html/namespaceedda_1_1Math.html b/html/namespaceedda_1_1Math.html index 0d741b9..855b0cc 100644 --- a/html/namespaceedda_1_1Math.html +++ b/html/namespaceedda_1_1Math.html @@ -3,16 +3,15 @@ - + +EDDA: edda::Math Namespace Reference + - @@ -21,7 +20,7 @@
        - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -93,9 +69,9 @@
        diff --git a/html/namespaceedda_1_1detail.html b/html/namespaceedda_1_1detail.html index f4b161c..7df1908 100644 --- a/html/namespaceedda_1_1detail.html +++ b/html/namespaceedda_1_1detail.html @@ -3,16 +3,15 @@ - + + EDDA: edda::detail Namespace Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -87,8 +63,7 @@
        edda::detail Namespace Reference
        @@ -96,46 +71,32 @@ - + + + - + - + - + + + + + -

        Classes

        struct  MakeStridedGmm
        struct  FieldInterp
         
        class  FuzzyIsocontour
         
        struct  GenRand
         Create a Thrust default random engine with a given seed. More...
         Create a Thrust default random engine with a given seed. More...
         
        class  FuzzyIsocontour
        struct  GetSample
         
        class  LevelCrossingFunctor
         
        struct  GetSample_functor
        struct  MakeHistogram
         
        struct  MakeStridedGmm
         
        struct  MCStreamline_functor
         
        - - -

        -Functions

        void print (boost::property_tree::ptree const &pt)
         
        -

        Function Documentation

        - -
        -
        - - - - - - - - -
        void edda::detail::print (boost::property_tree::ptree const & pt)
        -
        - -
        -
        - +

        Detailed Description

        +

        Histogram array class: integrate separate arrays to Thrust-readable arrays

        +
        diff --git a/html/namespaceedda_1_1dist.html b/html/namespaceedda_1_1dist.html index cadd083..87a5ca2 100644 --- a/html/namespaceedda_1_1dist.html +++ b/html/namespaceedda_1_1dist.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist Namespace Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -98,149 +74,291 @@ - +

        Namespaces

         detail
         detail
         
        + + + + - + - + + - + - + + + + - - + + + + + + + + + + + + +

        Classes

        class  ContinuousDistributionTag
         
        class  DiscreteDistributionTag
         
        class  Distribution
         The Distribution class is a root class for all distribution-type classes. More...
         The Distribution class is an interface class with virtual classes. More...
         
        class  ContinuousDistribution
        class  DistributionTag
         The Distribution class is a root class for all distribution-type classes. More...
         
        class  DiscreteDistribution
        class  DistributionWrapper
         
        struct  Gaussian
         Defines a Gaussian class. More...
         Defines a Gaussian class. More...
         
        class  GaussianMixture
         Defines a Gaussian Mixture class GMs: number of Gaussian Models. More...
         
        struct  GMMTuple
         
        class  GaussianMixture
         Defines a Gaussian Mixture class. More...
        class  Histogram
         The Distribution class is a root class for all distribution-type classes. More...
         
        class  JointDistributionTag
         
        struct  JointGaussian
         Defines a Gaussian class. More...
         
        class  JointGMM
         The Distribution class is a root class for all distribution-type classes. More...
         
        struct  JointHistogram
         Define a Joint histogram class. More...
         
        struct  Variant
         
        - - + + + + + + + + + +

        Typedefs

        typedef boost::variant< Real,
        -Gaussian, GaussianMixture
        -< 1 >, GaussianMixture
        -< 2 >, GaussianMixture
        -< 3 >, GaussianMixture
        -< 4 >, GaussianMixture< 5 > > 
        _Variant
         
        typedef DistributionWrapper< GaussianGaussianWrapper
         
        typedef DistributionWrapper< DefaultGaussianMixtureGaussianMixtureWrapper
         
        typedef DistributionWrapper< RealRealValueWrapper
         
        typedef GaussianMixture< MAX_GMsDefaultGaussianMixture
         
        typedef boost::variant< Real, Gaussian, Histogram, GaussianMixture< 2 >, GaussianMixture< 3 >, GaussianMixture< 4 >, GaussianMixture< 5 >, JointGaussian, JointHistogram_Variant
         
        - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - - - - - - - - + + + + + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -251,18 +369,84 @@ - + + + + + + + + + - +

        Functions

        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ __device__ double getMean (const Dist &dist)
         Return mean. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ __device__ double getVar (const Dist &dist)
         Return variance. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ __device__ double getPdf (const Dist &dist, const double x)
         Return PDF of x. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ double getSample (const Dist &dist)
         Return a random sample. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ double getSample (const Dist &dist, thrust::default_random_engine &rng)
         Return a random sample. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ __device__ double getCdf (const Dist &dist, double x)
         Return CDF of x. More...
         
        template<class Dist >
        __host__ __device__ std::vector< RealgetJointMean (const Dist &dist)
         
        template<class Dist >
        __host__ __device__ double getJointPdf (const Dist &dist, const std::vector< Real > x_)
         Return PDF of x. More...
         
        template<class Dist >
        __host__ std::vector< RealgetJointSample (const Dist &dist)
         Return a random sample. More...
         
        template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        __host__ __device__ std::vector< RealgetJointSample (const Dist &dist, thrust::default_random_engine &rng)
         Return a random sample using random engine. More...
         
        template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        operator-= (const T &lhs, const T &rhs)
         random variable -= More...
         random variable -= More...
         
        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        operator+ (const T &lhs, const T &rhs)
         random variable + More...
         random variable + More...
         
        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        operator- (const T &lhs, const T &rhs)
         random variable - More...
         random variable - More...
         
        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        operator* (const T &lhs, const double x)
         random variable * More...
         random variable * More...
         
        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        double getCdf (const T &dist, double x)
         Compute CDF of a distribution. More...
         
        template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        double getMean (const T &dist)
         Compute the mean of the distribution. More...
         
        template<class T , int N, ENABLE_IF_BASE_OF(T, Distribution) >
        template<typename T , int N, ENABLE_IF_BASE_OF(T, DistributionTag) >
        __host__ __device__ Vector< Real, N > getSample (const Tuple< T, N > &distvec, thrust::default_random_engine &rng)
         Return a vector sample from a vector of distributions. More...
         
        template<class T , int N, ENABLE_IF_BASE_OF(T, DistributionTag) >
        Vector< double, N > getMean (const Tuple< T, N > &dist)
         Get a Monte-Carlo sample of the distribution. We rely on the specific implementation from each distribution. More...
         Get vector mean. More...
         
        double getPdf (const Real &value, double x)
         Degenerated functions for Real type. More...
         
        double getCdf (const Real &value, double x)
         
        double getMean (const Real &value)
         
        double getVar (const Real &value)
         
        double getSample (const Real &value)
         
        std::string getName (const Real &x)
         
        __host__ __device__ double getMean (const Gaussian &dist)
         Return mean. More...
         Return mean. More...
         
        __host__ __device__ double getVar (const Gaussian &dist)
         Return variance. More...
         Return variance. More...
         
        __host__ __device__ double getPdf (const Gaussian &dist, const double x)
         Return PDF of x. More...
         Return PDF of x. More...
         
        __host__ double getSample (const Gaussian &dist)
         Return a random sample. More...
         Return a random sample. More...
         
        __host__ __device__ double getSample (const Gaussian &dist, thrust::default_random_engine &rng)
         Return a random sample using random engine. More...
         Return a random sample using random engine. More...
         
        __host__ __device__ double getCdf (const Gaussian &dist, double x)
         Return CDF of x. More...
         Return CDF of x. More...
         
        __host__ double getCdfPrecise (const Gaussian &dist, double x)
         Return CDF of x. More...
         Return CDF of x. More...
         
        __host__ std::ostream & operator<< (std::ostream &os, const Gaussian &dist)
         Print itself. More...
         Print itself. More...
         
        __host__ __device__ std::string getName (const Gaussian &x)
         
        __host__ __device__ Gaussianoperator- (Gaussian &x)
         random variable with unary - More...
         random variable with unary - More...
         
        __host__ __device__ Gaussianoperator+= (Gaussian &x, const Gaussian &rhs)
         random variable += More...
         random variable += More...
         
        __host__ __device__ Gaussianoperator+= (Gaussian &x, const double r)
         random variable += with scalar More...
         random variable += with scalar More...
         
        __host__ __device__ Gaussianoperator*= (Gaussian &x, const double r)
         random variable *= with scalar More...
         random variable *= with scalar More...
         
        template<int GMMs>
        double getMean (const GaussianMixture< GMMs > &dist)
         Return mean. More...
         
        template<int GMMs>
        double getVar (const GaussianMixture< GMMs > &dist)
         Return variance. More...
         
        template<int GMMs>
        double getPdf (const GaussianMixture< GMMs > &dist, const double x)
         Return PDF of x. More...
         
        template<int GMMs>
        double getSample (const GaussianMixture< GMMs > &dist)
         Return a sample. More...
         
        template<int GMMs>
        __host__ __device__ double getSample (const GaussianMixture< GMMs > &dist, thrust::default_random_engine &rng)
         Return a sample. More...
         
        template<int GMMs>
        __host__ __device__ double getCdf (const GaussianMixture< GMMs > &dist, double x)
         Return CDF of x. More...
         
        template<int GMMs>
        std::ostream & operator<< (std::ostream &os, const GaussianMixture< GMMs > &dist)
         Print itself. More...
         
        template<int GMMs>
        GaussianMixture< GMMs > & operator- (GaussianMixture< GMMs > &x)
         random variable with unary - More...
         
        template<int GMMs>
        GaussianMixture< GMMs > & operator+= (GaussianMixture< GMMs > &x, const GaussianMixture< GMMs > &rhs)
         random variable += More...
         
        template<int GMMs>
        GaussianMixture< GMMs > & operator+= (GaussianMixture< GMMs > &x, const double r)
         random variable += with scalar More...
         
        template<int GMMs>
        GaussianMixture< GMMs > & operator*= (GaussianMixture< GMMs > &x, const double r)
         random variable *= with scalar More...
         
        template<int GMs>
        double getMean (const GaussianMixture< GMs > &dist)
         Return mean. More...
         
        template<int GMs>
        double getVar (const GaussianMixture< GMs > &dist)
         Return variance. More...
         
        template<int GMs>
        double getPdf (const GaussianMixture< GMs > &dist, const double x)
         Return PDF of x. More...
         
        template<int GMs>
        double getSample (const GaussianMixture< GMs > &dist)
         Return a sample. More...
         
        template<int GMs>
        __host__ __device__ double getSample (const GaussianMixture< GMs > &dist, thrust::default_random_engine &rng)
         Return a sample. More...
         
        template<int GMs>
        __host__ __device__ double getCdf (const GaussianMixture< GMs > &dist, double x)
         Return CDF of x. More...
         
        template<int GMs>
        std::ostream & operator<< (std::ostream &os, const GaussianMixture< GMs > &dist)
         Print itself. More...
         
        template<int GMs>
        __host__ __device__ std::string getName (const GaussianMixture< GMs > &x)
         
        template<int GMs>
        GaussianMixture< GMs > operator- (const GaussianMixture< GMs > &x)
         random variable with unary - More...
         
        template<int GMs>
        GaussianMixture< GMs > & operator+= (GaussianMixture< GMs > &x, const GaussianMixture< GMs > &rhs)
         random variable += More...
         
        template<int GMs>
        GaussianMixture< GMs > & operator+= (GaussianMixture< GMs > &x, const double r)
         random variable += with scalar More...
         
        template<int GMs>
        GaussianMixture< GMs > & operator*= (GaussianMixture< GMs > &x, const double r)
         random variable *= with scalar More...
         
        double getMean (const Histogram &dist)
         Compute the mean of the distribution. More...
         
        double getVar (const Histogram &dist)
         Compute Variance. More...
         
        double getPdf (const Histogram &dist, const double x)
         Return PDF of x. More...
         
        double getSample (const Histogram &dist)
         Get a Monte-Carlo sample of the distribution. We rely on the specific implementation from each distribution. More...
         
        double getCdf (const Histogram &dist, double x)
         Return CDF of x. More...
         
        std::ostream & operator<< (std::ostream &os, const Histogram &dist)
         Print itself. More...
         
        __host__ __device__ std::string getName (const Histogram &x)
         
        __host__ __device__ std::vector< RealgetJointMean (const JointGaussian &dist)
         
        __host__ __device__ double getJointPdf (const JointGaussian &dist, const std::vector< Real > x_)
         Return PDF of x. More...
         
        __host__ __device__ std::vector< RealgetJointSample (const JointGaussian &dist, thrust::default_random_engine &rng)
         Return a random sample using random engine. More...
         
        __host__ std::ostream & operator<< (std::ostream &os, const JointGaussian &dist)
         Print itself. More...
         
        __host__ __device__ std::string getName (const JointGaussian &dist)
         Print the distribution type. More...
         
        Real getPdf (const JointGMM &dist, const std::vector< Real > x)
         Return probability of x. More...
         
        std::vector< RealgetJointSample (const JointGMM &dist, thrust::default_random_engine &rng)
         Return a sample drawn from dist. More...
         
        std::ostream & operator<< (std::ostream &os, const JointGMM &dist)
         Print itself. More...
         
        __host__ __device__ std::string getName (const JointGMM &x)
         Print the distribution typw. More...
         
        __host__ __device__ std::vector< RealgetJointMean (const JointHistogram &dist)
         Return joint mean of the joint histogram. More...
         
        __host__ __device__ double getJointPdf (const JointHistogram &dist, const std::vector< Real > &x_)
         Return the probability of a multivariate value given a JointHistogram object (distribution) More...
         
        __host__ std::vector< RealgetJointSample (const JointHistogram &dist)
         Generate a random sample from a distribution. More...
         
        __host__ __device__ std::vector< RealgetJointSample (const JointHistogram &dist, thrust::default_random_engine &rng)
         Return a random sample using random engine. This function leaves the interface for parallel platforms. More...
         
        __host__ std::ostream & operator<< (std::ostream &os, const JointHistogram &dist)
         Print the joint histogram itself. More...
         
        __host__ __device__ std::string getName (const JointHistogram &dist)
         Return the distribution type in string, i.e. "JointHistogram" the joint histogram object. More...
         
        __host__ __device__ JointHistogram eddaComputeJointHistogram (std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)
         This function is the interface used to construct a JointHistogram object outside of the class. More...
         
        double getPdf (const Variant &dist, double x)
         
        double getCdf (const Variant &dist, double x)
         
        double getSample (const Variant &dist)
         
        template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, Distribution) >
        std::string getName (const Variant &dist)
         
        std::vector< RealgetJointMean (const Variant &dist)
         
        double getJointPdf (const Variant &dist, const std::vector< Real > &x)
         
        std::vector< RealgetJointSample (const Variant &dist)
         
        template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        Vector< Real, N > getSample (const Vector< Dist, N > &v)
         Return a vector sample. More...
         Return a vector sample. More...
         

        Typedef Documentation

        - + +

        § _Variant

        + + + +

        § DefaultGaussianMixture

        + + + +

        § GaussianMixtureWrapper

        + + + +

        § GaussianWrapper

        + + +

        § RealValueWrapper

        + +
        +
        @@ -270,7 +454,76 @@

        Typedef Documentation

        Function Documentation

        - + +

        § eddaComputeJointHistogram()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        __host__ __device__ JointHistogram edda::dist::eddaComputeJointHistogram (std::vector< Real *> & dataAry,
        int nElements,
        const std::vector< Real > & mins,
        const std::vector< Real > & maxs,
        const std::vector< int > & nBins 
        )
        +
        +inline
        +
        + +

        This function is the interface used to construct a JointHistogram object outside of the class.

        +
        Parameters
        + + + + + + +
        dataArythe raw multivariate data array. Each vector element is a pointer pointing to the start location of a block of memory that stores one variable
        nElementsnumber of elements in each variable. All variables are assumed to have the same number of elements
        minsminimum value of each variable
        maxsmaximum value of each variable
        nBinsnumber of bins in each variable
        +
        +
        +
        Returns
        the constructed JointHistogram object
        + +
        +
        + +

        § getCdf() [1/6]

        +
        @@ -280,7 +533,7 @@

        Function Documentation

        - + @@ -304,19 +557,21 @@

        Function Documentation

        - + +

        § getCdf() [2/6]

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        double edda::dist::getCdf (const Variant & const Variant dist,
        - + - + @@ -338,11 +593,13 @@

        Function Documentation

        double edda::dist::getCdf __host__ __device__ double edda::dist::getCdf (const T & const Dist &  dist,
        -

        Compute CDF of a distribution.

        +

        Return CDF of x.

        - + +

        § getCdf() [3/6]

        +
        @@ -352,7 +609,7 @@

        Function Documentation

        - + @@ -379,11 +636,13 @@

        Function Documentation

        - + +

        § getCdf() [4/6]

        +
        -template<int GMMs>
        +template<int GMs>
        __host__ __device__ double edda::dist::getCdf (const Gaussian & const Gaussian dist,
        - + @@ -417,7 +676,9 @@

        Function Documentation

        - + +

        § getCdf() [5/6]

        +
        @@ -391,7 +650,7 @@

        Function Documentation

        __host__ __device__ double edda::dist::getCdf (const GaussianMixture< GMMs > & const GaussianMixture< GMs > &  dist,
        @@ -425,9 +686,45 @@

        Function Documentation

        + + +
        - + + + + + + + + + + + + + + + + +
        __host__ double edda::dist::getCdfPrecise double edda::dist::getCdf (const Realvalue,
        double x 
        )
        +
        +inline
        +
        + +
        +
        + +

        § getCdf() [6/6]

        + +
        +
        + + + - + + + + + + +
        + + + - + @@ -453,7 +750,9 @@

        Function Documentation

        - + +

        § getCdfPrecise()

        +
        double edda::dist::getCdf (const Gaussian & const Histogram dist,
        @@ -461,11 +760,21 @@

        Function Documentation

        @@ -475,11 +784,13 @@

        Function Documentation

        - + - - + + + + + + + + + + + +
        __host__ __device__ double edda::dist::getMean __host__ double edda::dist::getCdfPrecise (const Gaussian & dist)const Gaussiandist,
        double x 
        )
        -

        Return mean.

        +

        Return CDF of x.

        - + +

        § getJointMean() [1/4]

        +
        @@ -487,9 +798,9 @@

        Function Documentation

        - + - + @@ -503,39 +814,49 @@

        Function Documentation

        - + +

        § getJointMean() [2/4]

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<class Dist >
        +
        double edda::dist::getMean std::vector<Real> edda::dist::getJointMean (const Variant & const Variant dist)
        + + + + +
        - + - +
        double edda::dist::getMean __host__ __device__ std::vector<Real> edda::dist::getJointMean (const T & const Dist &  dist)
        +
        +inline
        - -

        Compute the mean of the distribution.

        +
        +

        Joint Distribution Functions

        - + +

        § getJointMean() [3/4]

        +
        -
        -template<int GMMs>
        - + - + @@ -547,23 +868,21 @@

        Function Documentation

        double edda::dist::getMean __host__ __device__ std::vector<Real> edda::dist::getJointMean (const GaussianMixture< GMMs > & const JointGaussian dist)
        -

        Return mean.

        -
        - + +

        § getJointMean() [4/4]

        +
        -
        -template<class T , int N, ENABLE_IF_BASE_OF(T, Distribution) >
        - + - - + +
        - + - + @@ -575,12 +894,19 @@

        Function Documentation

        Vector<double, N> edda::dist::getMean __host__ __device__ std::vector<Real> edda::dist::getJointMean (const Tuple< T, N > & const JointHistogram dist)
        -

        Get a Monte-Carlo sample of the distribution. We rely on the specific implementation from each distribution.

        -

        Get vector mean

        +

        Return joint mean of the joint histogram.

        +
        Parameters
        + + +
        distthe joint histogram
        +
        +
        - + +

        § getJointPdf() [1/4]

        +
        @@ -588,15 +914,15 @@

        Function Documentation

        - +
        - + - + - + @@ -612,11 +938,51 @@

        Function Documentation

        __host__ __device__ double edda::dist::getPdf double edda::dist::getJointPdf (const Gaussian & const Variant dist,
        const double const std::vector< Real > &  x 
        +
        + + +

        § getJointPdf() [2/4]

        + +
        +
        +
        +template<class Dist >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ double edda::dist::getJointPdf (const Dist & dist,
        const std::vector< Realx_ 
        )
        +
        +inline
        +
        +

        Return PDF of x.

        - + +

        § getJointPdf() [3/4]

        +
        @@ -624,16 +990,16 @@

        Function Documentation

        - + - + - - + + @@ -648,28 +1014,1237 @@

        Function Documentation

        double edda::dist::getPdf __host__ __device__ double edda::dist::getJointPdf (const Variant & const JointGaussian dist,
        double x const std::vector< Realx_ 
        +

        Return PDF of x.

        +
        - + +

        § getJointPdf() [4/4]

        +
        -
        -template<int GMMs>
        + + +
        - + - + - - + + + + + + + + +
        double edda::dist::getPdf __host__ __device__ double edda::dist::getJointPdf (const GaussianMixture< GMMs > & const JointHistogram dist,
        const double x const std::vector< Real > & x_ 
        )
        +
        +inline
        +
        + +

        Return the probability of a multivariate value given a JointHistogram object (distribution)

        +
        Parameters
        + + + +
        distthe JointHistogram distribution
        xthe multivariate value
        +
        +
        +
        Returns
        the probability of the given value
        + +
        +
        + +

        § getJointSample() [1/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        std::vector<Real> edda::dist::getJointSample (const Variantdist)
        +
        +inline
        +
        + +
        +
        + +

        § getJointSample() [2/7]

        + +
        +
        +
        +template<class Dist >
        + + + + + +
        + + + + + + + + +
        __host__ std::vector<Real> edda::dist::getJointSample (const Dist & dist)
        +
        +inline
        +
        + +

        Return a random sample.

        + +
        +
        + +

        § getJointSample() [3/7]

        + +
        +
        +
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::getJointSample (const Dist & dist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a random sample using random engine.

        + +
        +
        + +

        § getJointSample() [4/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        std::vector<Real> edda::dist::getJointSample (const JointGMMdist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a sample drawn from dist.

        + +
        +
        + +

        § getJointSample() [5/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::getJointSample (const JointGaussiandist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a random sample using random engine.

        + +
        +
        + +

        § getJointSample() [6/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ std::vector<Real> edda::dist::getJointSample (const JointHistogramdist)
        +
        +inline
        +
        + +

        Generate a random sample from a distribution.

        +
        Parameters
        + + +
        distthe JointHistogram object (the distribution)
        +
        +
        +
        Returns
        a multivariate sample
        + +
        +
        + +

        § getJointSample() [7/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::getJointSample (const JointHistogramdist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a random sample using random engine. This function leaves the interface for parallel platforms.

        +
        Parameters
        + + + +
        distthe JointHistogram object
        rngrandom engine from thrust
        +
        +
        +
        Returns
        a random float number
        + +
        +
        + +

        § getMean() [1/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ double edda::dist::getMean (const Gaussiandist)
        +
        +inline
        +
        + +

        Return mean.

        + +
        +
        + +

        § getMean() [2/7]

        + +
        +
        +
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + +
        __host__ __device__ double edda::dist::getMean (const Dist & dist)
        +
        +inline
        +
        + +

        Return mean.

        + +
        +
        + +

        § getMean() [3/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        double edda::dist::getMean (const Variantdist)
        +
        +inline
        +
        + +
        +
        + +

        § getMean() [4/7]

        + +
        +
        +
        +template<int GMs>
        + + + + + +
        + + + + + + + + +
        double edda::dist::getMean (const GaussianMixture< GMs > & dist)
        +
        +inline
        +
        + +

        Return mean.

        + +
        +
        + +

        § getMean() [5/7]

        + +
        +
        +
        +template<class T , int N, ENABLE_IF_BASE_OF(T, DistributionTag) >
        + + + + + +
        + + + + + + + + +
        Vector<double, N> edda::dist::getMean (const Tuple< T, N > & dist)
        +
        +inline
        +
        + +

        Get vector mean.

        + +
        +
        + +

        § getMean() [6/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        double edda::dist::getMean (const Realvalue)
        +
        +inline
        +
        + +
        +
        + +

        § getMean() [7/7]

        + +
        +
        + + + + + +
        + + + + + + + + +
        double edda::dist::getMean (const Histogramdist)
        +
        +inline
        +
        + +

        Compute the mean of the distribution.

        + +
        +
        + +

        § getName() [1/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        std::string edda::dist::getName (const Variantdist)
        +
        +inline
        +
        + +
        +
        + +

        § getName() [2/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const Gaussianx)
        +
        +inline
        +
        + +
        +
        + +

        § getName() [3/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const JointGMMx)
        +
        +inline
        +
        + +

        Print the distribution typw.

        + +
        +
        + +

        § getName() [4/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        std::string edda::dist::getName (const Realx)
        +
        +inline
        +
        + +
        +
        + +

        § getName() [5/8]

        + +
        +
        +
        +template<int GMs>
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const GaussianMixture< GMs > & x)
        +
        +inline
        +
        + +
        +
        + +

        § getName() [6/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const JointGaussiandist)
        +
        +inline
        +
        + +

        Print the distribution type.

        + +
        +
        + +

        § getName() [7/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const Histogramx)
        +
        +inline
        +
        + +
        +
        + +

        § getName() [8/8]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::string edda::dist::getName (const JointHistogramdist)
        +
        +inline
        +
        + +

        Return the distribution type in string, i.e. "JointHistogram" the joint histogram object.

        +
        Returns
        the type of the object in string, i.e. "JointHistogram"
        + +
        +
        + +

        § getPdf() [1/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ double edda::dist::getPdf (const Gaussiandist,
        const double x 
        )
        +
        +inline
        +
        + +

        Return PDF of x.

        + +
        +
        + +

        § getPdf() [2/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        double edda::dist::getPdf (const Variantdist,
        double x 
        )
        +
        +inline
        +
        + +
        +
        + +

        § getPdf() [3/7]

        + +
        +
        +
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ double edda::dist::getPdf (const Dist & dist,
        const double x 
        )
        +
        +inline
        +
        + +

        Return PDF of x.

        + +
        +
        + +

        § getPdf() [4/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        Real edda::dist::getPdf (const JointGMMdist,
        const std::vector< Realx 
        )
        +
        +inline
        +
        + +

        Return probability of x.

        + +
        +
        + +

        § getPdf() [5/7]

        + +
        +
        +
        +template<int GMs>
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        double edda::dist::getPdf (const GaussianMixture< GMs > & dist,
        const double x 
        )
        +
        +inline
        +
        + +

        Return PDF of x.

        + +
        +
        + +

        § getPdf() [6/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        double edda::dist::getPdf (const Realvalue,
        double x 
        )
        +
        +inline
        +
        + +

        Degenerated functions for Real type.

        + +
        +
        + +

        § getPdf() [7/7]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        double edda::dist::getPdf (const Histogramdist,
        const double x 
        )
        +
        +inline
        +
        + +

        Return PDF of x.

        + +
        +
        + +

        § getSample() [1/11]

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ double edda::dist::getSample (const Gaussiandist)
        +
        +inline
        +
        + +

        Return a random sample.

        + +
        +
        + +

        § getSample() [2/11]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ double edda::dist::getSample (const Gaussiandist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a random sample using random engine.

        + +
        +
        + +

        § getSample() [3/11]

        + +
        +
        +
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + +
        __host__ double edda::dist::getSample (const Dist & dist)
        +
        +inline
        +
        + +

        Return a random sample.

        + +
        +
        + +

        § getSample() [4/11]

        + +
        +
        + + + + + +
        + + + + + + + + +
        double edda::dist::getSample (const Variantdist)
        +
        +inline
        +
        + +
        +
        + +

        § getSample() [5/11]

        + +
        +
        +
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ double edda::dist::getSample (const Dist & dist,
        thrust::default_random_engine & rng 
        )
        +
        +inline
        +
        + +

        Return a random sample.

        + +
        +
        + +

        § getSample() [6/11]

        + +
        +
        +
        +template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        + + + + + +
        + + + + + + + + +
        Vector<Real, N> edda::dist::getSample (const Vector< Dist, N > & v)
        +
        +inline
        +
        + +

        Return a vector sample.

        + +
        +
        + +

        § getSample() [7/11]

        + +
        +
        +
        +template<int GMs>
        + + + + + +
        + + + + + + + + +
        double edda::dist::getSample (const GaussianMixture< GMs > & dist)
        +
        +inline
        +
        + +

        Return a sample.

        +

        Note: To ensure correct sampling distribution, the sum of weights should be normalized to 1 before calling this function.

        + +
        +
        + +

        § getSample() [8/11]

        + +
        +
        +
        +template<int GMs>
        + + + - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1detail_1_1FieldInterp-members.html b/html/structedda_1_1detail_1_1FieldInterp-members.html new file mode 100644 index 0000000..f6549eb --- /dev/null +++ b/html/structedda_1_1detail_1_1FieldInterp-members.html @@ -0,0 +1,84 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        +
        + + + + + + + + + + + + @@ -684,23 +2259,38 @@

        Function Documentation

        __host__ __device__ double edda::dist::getSample (const GaussianMixture< GMs > & dist,
        thrust::default_random_engine & rng 
        -

        Return PDF of x.

        +

        Return a sample.

        +

        Note: To ensure correct sampling distribution, the sum of weights should be normalized to 1 before calling this function.

        - + +

        § getSample() [9/11]

        +
        +
        +template<typename T , int N, ENABLE_IF_BASE_OF(T, DistributionTag) >
        @@ -710,11 +2300,13 @@

        Function Documentation

        - + - - + + + + + + + + + + + +
        __host__ double edda::dist::getSample __host__ __device__ Vector<Real, N> edda::dist::getSample (const Gaussian & dist)const Tuple< T, N > & distvec,
        thrust::default_random_engine & rng 
        )
        -

        Return a random sample.

        +

        Return a vector sample from a vector of distributions.

        - + +

        § getSample() [10/11]

        +
        @@ -724,8 +2316,8 @@

        Function Documentation

        - - + +
        double edda::dist::getSample (const Variant & dist)const Realvalue)
        @@ -738,7 +2330,9 @@

        Function Documentation

        - + +

        § getSample() [11/11]

        +
        @@ -746,21 +2340,11 @@

        Function Documentation

        @@ -770,24 +2354,24 @@

        Function Documentation

        - + - - - - - - - - - - + + - -
        __host__ __device__ double edda::dist::getSample double edda::dist::getSample (const Gaussian & dist,
        thrust::default_random_engine & rng 
        const Histogramdist) )
        -

        Return a random sample using random engine.

        +

        Get a Monte-Carlo sample of the distribution. We rely on the specific implementation from each distribution.

        - + +

        § getVar() [1/6]

        +
        -
        -template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, Distribution) >
        - + - - + +
        Vector<Real, N> edda::dist::getSample __host__ __device__ double edda::dist::getVar (const Vector< Dist, N > & v)const Gaussiandist)
        @@ -798,23 +2382,25 @@

        Function Documentation

        -

        Return a vector sample.

        +

        Return variance.

        - + +

        § getVar() [2/6]

        +
        -template<int GMMs>
        +template<class Dist , ENABLE_IF_BASE_OF(Dist, DistributionTag) >
        - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1Tuple9-members.html b/html/structedda_1_1Tuple9-members.html index d6b4e28..baf1781 100644 --- a/html/structedda_1_1Tuple9-members.html +++ b/html/structedda_1_1Tuple9-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - + - + @@ -826,36 +2412,25 @@

        Function Documentation

        double edda::dist::getSample __host__ __device__ double edda::dist::getVar (const GaussianMixture< GMMs > & const Dist &  dist)
        -

        Return a sample.

        -

        Note: To ensure correct sampling distribution, the sum of weights should be normalized to 1 before calling this function.

        +

        Return variance.

        - + +

        § getVar() [3/6]

        +
        -
        -template<int GMMs>
        @@ -865,22 +2440,23 @@

        Function Documentation

        - + - - - - - - - - - - + + - -
        __host__ __device__ double edda::dist::getSample double edda::dist::getVar (const GaussianMixture< GMMs > & dist,
        thrust::default_random_engine & rng 
        const Variantdist) )
        -

        Return a sample.

        -

        Note: To ensure correct sampling distribution, the sum of weights should be normalized to 1 before calling this function.

        -
        - + +

        § getVar() [4/6]

        +
        +
        +template<int GMs>
        - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1Tuple8-members.html b/html/structedda_1_1Tuple8-members.html index 3929152..60fed40 100644 --- a/html/structedda_1_1Tuple8-members.html +++ b/html/structedda_1_1Tuple8-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - + - + @@ -893,10 +2469,14 @@

        Function Documentation

        Return variance.

        +

        if f(x) = sum_i( w_i * f_i(x) ), v_i = variance of f_i, and m_i = mean of f_i, then var(f) = sum_i( w_i * v_i + w_i * m_i^2 ) - (sum_i( w_i * m_i) )^2.

        +

        ref: http://stats.stackexchange.com/questions/16608/what-is-the-variance-of-the-weighted-mixture-of-two-gaussians (code not verified)

        - + +

        § getVar() [5/6]

        +
        __host__ __device__ double edda::dist::getVar double edda::dist::getVar (const Gaussian & const GaussianMixture< GMs > &  dist)
        @@ -906,8 +2486,8 @@

        Function Documentation

        - - + +
        double edda::dist::getVar (const Variant & dist)const Realvalue)
        @@ -920,11 +2500,11 @@

        Function Documentation

        - + +

        § getVar() [6/6]

        +
        -
        -template<int GMMs>
        - + @@ -944,17 +2524,17 @@

        Function Documentation

        @@ -932,7 +2512,7 @@

        Function Documentation

        double edda::dist::getVar (const GaussianMixture< GMMs > & const Histogram dist)
        -

        Return variance.

        -

        if f(x) = sum_i( w_i * f_i(x) ), v_i = variance of f_i, and m_i = mean of f_i, then var(f) = sum_i( w_i * v_i + w_i * m_i^2 ) - (sum_i( w_i * m_i) )^2.

        -

        ref: http://stats.stackexchange.com/questions/16608/what-is-the-variance-of-the-weighted-mixture-of-two-gaussians (code not verified)

        +

        Compute Variance.

        - + +

        § operator*()

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1Tuple7-members.html b/html/structedda_1_1Tuple7-members.html index f4627ab..17ae492 100644 --- a/html/structedda_1_1Tuple7-members.html +++ b/html/structedda_1_1Tuple7-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        @@ -988,7 +2568,9 @@

        Function Documentation

        - + +

        § operator*=() [1/2]

        +
        @@ -998,7 +2580,7 @@

        Function Documentation

        - + @@ -1024,19 +2606,21 @@

        Function Documentation

        - + +

        § operator*=() [2/2]

        +
        -template<int GMMs>
        +template<int GMs>
        __host__ __device__ Gaussian& edda::dist::operator*= (Gaussian & Gaussian x,
        - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1Tuple6-members.html b/html/structedda_1_1Tuple6-members.html index eea20d5..75fd22b 100644 --- a/html/structedda_1_1Tuple6-members.html +++ b/html/structedda_1_1Tuple6-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - + - + @@ -1062,11 +2646,13 @@

        Function Documentation

        - + +

        § operator+()

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        GaussianMixture<GMMs>& edda::dist::operator*= GaussianMixture<GMs>& edda::dist::operator*= (GaussianMixture< GMMs > & GaussianMixture< GMs > &  x,
        - - + + - - + + - - - - + + + +
        @@ -1100,7 +2686,9 @@

        Function Documentation

        - + +

        § operator+=() [1/4]

        +
        @@ -1110,13 +2698,13 @@

        Function Documentation

        - + - + @@ -1136,7 +2724,9 @@

        Function Documentation

        - + +

        § operator+=() [2/4]

        +
        __host__ __device__ Gaussian& edda::dist::operator+= (Gaussian & Gaussian x,
        const Gaussian & const Gaussian rhs 
        @@ -1146,7 +2736,7 @@

        Function Documentation

        - + @@ -1172,25 +2762,27 @@

        Function Documentation

        - + +

        § operator+=() [3/4]

        +
        -template<int GMMs>
        +template<int GMs>
        __host__ __device__ Gaussian& edda::dist::operator+= (Gaussian & Gaussian x,
        - - + + - - + + - - - - + + + +
        - + - + - + @@ -1210,19 +2802,21 @@

        Function Documentation

        - + +

        § operator+=() [4/4]

        +
        -template<int GMMs>
        +template<int GMs>
        GaussianMixture<GMMs>& edda::dist::operator+= GaussianMixture<GMs>& edda::dist::operator+= (GaussianMixture< GMMs > & GaussianMixture< GMs > &  x,
        const GaussianMixture< GMMs > & const GaussianMixture< GMs > &  rhs 
        - - + + - - + + - - - - + + + +
        - + - + @@ -1248,11 +2842,41 @@

        Function Documentation

        - + +

        § operator-() [1/3]

        + +
        +
        +
        GaussianMixture<GMMs>& edda::dist::operator+= GaussianMixture<GMs>& edda::dist::operator+= (GaussianMixture< GMMs > & GaussianMixture< GMs > &  x,
        + + + + +
        + + + + + + + + +
        __host__ __device__ Gaussian& edda::dist::operator- (Gaussianx)
        +
        +inline
        +
        + +

        random variable with unary -

        + +
        + + +

        § operator-() [2/3]

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        - - + + - - + + - - - - + + + + @@ -144,9 +118,9 @@ diff --git a/html/structedda_1_1Tuple2-members.html b/html/structedda_1_1Tuple2-members.html index c1ba302..eba05cb 100644 --- a/html/structedda_1_1Tuple2-members.html +++ b/html/structedda_1_1Tuple2-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        @@ -1286,17 +2910,21 @@

        Function Documentation

        - + +

        § operator-() [3/3]

        +
        +
        +template<int GMs>
        - + - + @@ -1312,21 +2940,33 @@

        Function Documentation

        - + +

        § operator-=()

        +
        -template<int GMMs>
        +template<class T , ENABLE_IF_BASE_OF(T, DistributionTag) >
        __host__ __device__ Gaussian& edda::dist::operator- GaussianMixture<GMs> edda::dist::operator- (Gaussian & const GaussianMixture< GMs > &  x)
        @@ -1336,30 +2976,109 @@

        Function Documentation

        - + - - + + + + + + + + + + + +
        GaussianMixture<GMMs>& edda::dist::operator- T edda::dist::operator-= (GaussianMixture< GMMs > & x)const T & lhs,
        const T & rhs 
        )
        -

        random variable with unary -

        +

        random variable -=

        +
        + +
        + + +

        § operator<<() [1/6]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ std::ostream& edda::dist::operator<< (std::ostream & os,
        const Gaussiandist 
        )
        +
        +inline
        +
        + +

        Print itself.

        + +
        +
        + +

        § operator<<() [2/6]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        std::ostream& edda::dist::operator<< (std::ostream & os,
        const JointGMMdist 
        )
        +
        +inline
        +
        + +

        Print itself.

        - + +

        § operator<<() [3/6]

        +
        -template<class T , ENABLE_IF_BASE_OF(T, Distribution) >
        +template<int GMs>
        - + - - + + - - + + @@ -1374,11 +3093,13 @@

        Function Documentation

        T edda::dist::operator-= std::ostream& edda::dist::operator<< (const T & lhs, std::ostream & os,
        const T & rhs const GaussianMixture< GMs > & dist 
        -

        random variable -=

        +

        Print itself.

        - + +

        § operator<<() [4/6]

        +
        @@ -1394,7 +3115,7 @@

        Function Documentation

        - + @@ -1414,11 +3135,11 @@

        Function Documentation

        - + +

        § operator<<() [5/6]

        +
        -
        -template<int GMMs>
        const Gaussian & const JointGaussian dist 
        - + @@ -1450,14 +3171,59 @@

        Function Documentation

        Print itself.

        + + + +

        § operator<<() [6/6]

        + +
        +
        +
        @@ -1432,7 +3153,7 @@

        Function Documentation

        const GaussianMixture< GMMs > & const Histogram dist 
        + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ std::ostream& edda::dist::operator<< (std::ostream & os,
        const JointHistogramdist 
        )
        +
        +inline
        +
        + +

        Print the joint histogram itself.

        +
        Parameters
        + + +
        osdestination stream the joint histogram object
        +
        +
        +
        Returns
        destination stream after inserting information of the JointHistogram object
        +
        diff --git a/html/namespaceedda_1_1dist_1_1detail.html b/html/namespaceedda_1_1dist_1_1detail.html index db08973..9a3d1fb 100644 --- a/html/namespaceedda_1_1dist_1_1detail.html +++ b/html/namespaceedda_1_1dist_1_1detail.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::detail Namespace Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,23 +71,31 @@ - - + + + + + + - + + + + +

        Classes

        struct  _getPdf
         
        struct  _getCdf
         
        struct  _getJointMean
         
        struct  _getJointPdf
         
        struct  _getJointSample
         
        struct  _getMean
         
        struct  _getVar
        struct  _getName
         
        struct  _getPdf
         
        struct  _getSample
         
        struct  _getVar
         
        diff --git a/html/namespacemembers.html b/html/namespacemembers.html index 918bd42..3cfd9dc 100644 --- a/html/namespacemembers.html +++ b/html/namespacemembers.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,81 +29,26 @@
        +
        EDDA
        - + - - - - + + + + +
        @@ -116,332 +60,35 @@
        Here is a list of all namespace members with links to the namespace documentation for each member:
        -

        - _ -

        - - -

        - b -

          -
        • baryInterp() -: edda -
        • -
        • biLerp() -: edda -
        • -
        • box_muller() -: edda -
        • -
        - - -

        - c -

        - - -

        - d -

          -
        • DEG_TO_RAD -: edda -
        • -
        • DeviceGMMArray -: edda -
        • -
        • dot() -: edda -
        • -
        - - -

        - e -

        - - -

        - f -

          -
        • FAIL -: edda -
        • -
        • FuzzyIsosurface() -: edda -
        • -
        - - -

        - g -

        - - -

        - i -

          -
        • InterpType -: edda -
        • -
        • isFilenameOnly() -: edda -
        • -
        - - -

        - k -

          -
        • kNdArrayMaxDims -: edda -
        • -
        - - -

        - l -

          -
        • lerp() -: edda -
        • -
        • levelCrossingProb() -: edda -
        • -
        • loadData() -: edda -
        • -
        • loadGaussianRawArray() -: edda -
        • -
        • loadGaussianRegularGrids() -: edda -
        • -
        • loadGaussianSamplingRegularGrids() -: edda -
        • -
        • loadRawFile() -: edda -
        • -
        • loadVec3GaussianRawArray() -: edda -
        • -
        • loadVec3GaussianRegularGrids() -: edda -
        • -
        • loadVec3GaussianSamplingRegularGrids() -: edda -
        • -
        • loadVectorData() -: edda -
        • -
        - - -

        - m -

          -
        • make_Dataset() -: edda -
        • -
        - - -

        - o -

        - - -

        - p -

        - - -

        - r -

          -
        • RAD_TO_DEG -: edda -
        • -
        • randomEngineIterator() -: edda -
        • -
        • randomSampleField() -: edda -
        • -
        • Real -: edda -
        • -
        • removeFileExtension() -: edda -
        • -
        • ReturnStatus -: edda -
        • -
        - - -

        - s -

          -
        • SUCCESS -: edda -
        • -
        - - -

        - t -

          -
        • TD_BACKWARD -: edda -
        • -
        • TD_FORWARD -: edda -
        • -
        • TETRAHEDRON -: edda -
        • -
        • tetraLerp() -: edda -
        • -
        • TO_EULER -: edda -
        • -
        • TO_RK2 -: edda -
        • -
        • TO_RK4 -: edda -
        • -
        • TO_RK45 -: edda -
        • -
        • TraceDir -: edda -
        • -
        • TraceOrd -: edda -
        • -
        • TRI_LERP -: edda -
        • -
        • TRIANGLE -: edda -
        • -
        • triLerp() -: edda -
        • -
        - - -

        - v -

          -
        • Vector3 -: edda +

          - w -

            +
          • WEIGHTED_SUM +: edda
          • -
          • VECTOR3 -: edda +
          • write_nrrd_3d() +: edda
          • -
          • VECTOR4 -: edda +
          • writeEddaDataset() +: edda
          • -
          • Vector4 -: edda +
          • writeEddaDatasetTemplate() +: edda
          • -
          - - -

          - w -

            -
          • WEIGHTED_SUM -: edda +
          • writeEddaVtkDataset() +: edda
          • -
          • write_nrrd_3d() -: edda +
          • writeGmmArrays() +: edda
          • -
          • writeRawNrrdFile() -: edda +
          • writeHistoArrays() +: edda
        diff --git a/html/namespacemembers_enum.html b/html/namespacemembers_enum.html index 106d061..79353ce 100644 --- a/html/namespacemembers_enum.html +++ b/html/namespacemembers_enum.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,59 +29,26 @@
        +
        EDDA
        - + - - - + + + + +
        @@ -96,6 +62,9 @@
      • CellType : edda
      • +
      • DistrType +: edda +
      • InterpType : edda
      • @@ -112,9 +81,9 @@
        diff --git a/html/namespacemembers_eval.html b/html/namespacemembers_eval.html index f560036..c773a38 100644 --- a/html/namespacemembers_eval.html +++ b/html/namespacemembers_eval.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,59 +29,26 @@
        +
        EDDA
        - + - - - + + + + +
        @@ -99,6 +65,27 @@
      • FAIL : edda
      • +
      • GMM +: edda +
      • +
      • GMM2 +: edda +
      • +
      • GMM3 +: edda +
      • +
      • GMM4 +: edda +
      • +
      • GMM5 +: edda +
      • +
      • HIST +: edda +
      • +
      • HYBRID +: edda +
      • OUT_OF_BOUND : edda
      • @@ -142,9 +129,9 @@
        diff --git a/html/namespacemembers_func.html b/html/namespacemembers_func.html index 6bd2d11..c666666 100644 --- a/html/namespacemembers_func.html +++ b/html/namespacemembers_func.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,76 +29,26 @@
        +
        EDDA
        - + - - - - + + + + +
        @@ -111,7 +60,17 @@
          -

        - b -

          +

          - a -

            +
          • addVtkGmmArrays() +: edda +
          • +
          • addVtkHistoArrays() +: edda +
          • +
          + + +

          - b -

          • baryInterp() : edda
          • @@ -124,7 +83,16 @@

            - b -

            -

            - c -

              +

              - c -

                +
              • check_convergence() +: edda +
              • +
              • classprob() +: edda +
              • +
              • computeLogLikelihood() +: edda +
              • cross() : edda
              • @@ -134,47 +102,99 @@

                - c -

                -

                - d -

                  +

                  - d -

                    +
                  • determinant() +: edda +
                  • +
                  • determinant_sign() +: edda +
                  • dot() : edda
                  -

                  - f -

                    +

                    - e -

                      +
                    • eddaComputeEM() +: edda +
                    • +
                    • eddaComputeHistogram() +: edda +
                    • +
                    • eddaComputeJointGMM() +: edda +
                    • +
                    • eddaComputeJointHistogram() +: edda::dist +
                    • +
                    • eddaUpdateGMMIncremental() +: edda +
                    • +
                    • eval_gaussian_density() +: edda +
                    • +
                    + + +

                    - f -

                    • FuzzyIsosurface() : edda
                    -

                    - g -

                      +

                      - g -

                        +
                      • genHistoArray() +: edda +
                      • get_Vector4() : edda
                      • getCdf() -: edda::dist +: edda::dist
                      • getCdfPrecise() : edda::dist
                      • +
                      • getDistrType() +: edda +
                      • getFileExtension() -: edda +: edda
                      • getFilename() -: edda +: edda +
                      • +
                      • getGmmModels() +: edda +
                      • +
                      • getGmmModels_archival() +: edda +
                      • +
                      • getJointMean() +: edda::dist +
                      • +
                      • getJointPdf() +: edda::dist +
                      • +
                      • getJointSample() +: edda::dist
                      • getMean() -: edda::dist +: edda::dist +
                      • +
                      • getName() +: edda::dist
                      • getPath() -: edda +: edda
                      • getPdf() -: edda::dist +: edda::dist
                      • getSample() -: edda::dist +: edda::dist
                      • getStepSize() : edda @@ -185,58 +205,55 @@

                        - g -

                        -

                        - i -

                          +

                          - i -

                            +
                          • invert_matrix() +: edda +
                          • isFilenameOnly() : edda
                          -

                          - l -

                            +

                            - l -

                            • lerp() : edda
                            • levelCrossingProb() : edda
                            • -
                            • loadData() -: edda -
                            • -
                            • loadGaussianRawArray() -: edda -
                            • -
                            • loadGaussianRegularGrids() -: edda -
                            • -
                            • loadGaussianSamplingRegularGrids() -: edda +
                            • loadEddaDataset() +: edda
                            • -
                            • loadRawFile() -: edda +
                            • loadEddaDatasetTemplate() +: edda
                            • -
                            • loadVec3GaussianRawArray() -: edda +
                            • loadEddaScalarDataset() +: edda
                            • -
                            • loadVec3GaussianRegularGrids() -: edda +
                            • loadEddaScalarDataset_noneVTK() +: edda
                            • -
                            • loadVec3GaussianSamplingRegularGrids() -: edda +
                            • loadEddaVector3Dataset() +: edda
                            • -
                            • loadVectorData() -: edda +
                            • loadEddaVector3Dataset_noneVTK() +: edda
                            -

                            - m -

                              +

                              - m -

                              -

                              - o -

                                +

                                - o -

                                • operator!=() : edda
                                • @@ -252,17 +269,17 @@

                                  - o -

        diff --git a/html/namespacemembers_type.html b/html/namespacemembers_type.html index 80653de..2334a09 100644 --- a/html/namespacemembers_type.html +++ b/html/namespacemembers_type.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,59 +29,26 @@
        +
        EDDA
        - + - - - + + + + +
        @@ -94,13 +60,19 @@
         
        diff --git a/html/namespacemembers_vars.html b/html/namespacemembers_vars.html index 1a0a5e8..dbf3efe 100644 --- a/html/namespacemembers_vars.html +++ b/html/namespacemembers_vars.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace Members + - @@ -21,7 +20,7 @@ - @@ -30,59 +29,26 @@
        +
        EDDA
        - + - - - + + + + +
        @@ -112,9 +78,9 @@
        diff --git a/html/namespaces.html b/html/namespaces.html index 124363f..b36be04 100644 --- a/html/namespaces.html +++ b/html/namespaces.html @@ -3,16 +3,15 @@ - + + EDDA: Namespace List + - @@ -21,7 +20,7 @@ - @@ -30,49 +29,26 @@
        +
        EDDA
        - + - - + + + + +
        @@ -88,19 +64,19 @@
        Here is a list of all namespaces with brief descriptions:
        [detail level 123]
        - - - - - + + + + +
        \NeddaExperimental functionality
         oNdetail
         oNdist
         |\Ndetail
         \NMath
         NeddaExperimental functionality
         Ndetail
         Ndist
         Ndetail
         NMath
        diff --git a/html/ndarray_8h.html b/html/ndarray_8h.html index 5af7a5b..db4ae3e 100644 --- a/html/ndarray_8h.html +++ b/html/ndarray_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/ndarray.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -94,21 +70,25 @@
        ndarray.h File Reference
        -
        #include <cassert>
        -#include <iostream>
        -#include "thrust_common.h"
        +
        #include <cstdio>
        +#include <cassert>
        +#include <iostream>
        +#include <memory>
        +#include <thrust/random/uniform_real_distribution.h>
        +#include "thrust_common.h"

        Go to the source code of this file.

        +

        Classes

        class  edda::NdArray< Type >
         A general n-dimensional array compatible to Cuda. More...
         
        - - + +

        Namespaces

         edda
         Experimental functionality.
         edda
         Experimental functionality.
         

        @@ -119,9 +99,9 @@ diff --git a/html/ndarray_8h_source.html b/html/ndarray_8h_source.html index bfe58f3..cb5e54e 100644 --- a/html/ndarray_8h_source.html +++ b/html/ndarray_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/ndarray.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -90,240 +66,42 @@
        ndarray.h
        -Go to the documentation of this file.
        1 // Copyright 2015 The Edda Authors. All rights reserved.
        -
        2 // Use of this source code is governed by a MIT-style license that can be
        -
        3 // found in the LICENSE file.
        -
        4 
        -
        5 #ifndef NDARRAY_H_
        -
        6 #define NDARRAY_H_
        -
        7 
        -
        8 #include <cassert>
        -
        9 #include <iostream>
        -
        10 
        -
        11 #include "thrust_common.h"
        -
        12 
        -
        13 namespace edda {
        -
        14 
        -
        15 const int kNdArrayMaxDims = 8;
        -
        16 
        -
        17 template <typename Type>
        -
        18 class NdArray {
        -
        19 
        -
        20  thrust::device_ptr<Type> dev_ptr;
        -
        21  int num_of_dims_ = 0;
        -
        22  int num_of_elems_ = 0;
        -
        23  int dims_[kNdArrayMaxDims];
        -
        24  int strides_[kNdArrayMaxDims];
        -
        25  bool ownership_ = true;
        -
        26 
        -
        27 
        -
        28 public:
        -
        32  NdArray(int num_of_dims, int* dims) {
        -
        33 
        -
        34  init_shape(num_of_dims, dims);
        -
        35 
        -
        36  dev_ptr = thrust::device_malloc<Type>(num_of_elems_);
        -
        37 
        -
        38  }
        -
        39 
        -
        43  NdArray(const std::initializer_list<int>& dims) {
        -
        44 
        -
        45  init_shape(dims);
        -
        46 
        -
        47  dev_ptr = thrust::device_malloc<Type>(num_of_elems_);
        -
        48 
        -
        49  }
        -
        50 
        -
        54  NdArray(Type* data, int num_of_dims, int* dims)
        -
        55  : NdArray(num_of_dims, dims)
        -
        56  {
        -
        57  thrust::copy(data, data+num_of_elems_, dev_ptr );
        -
        58  }
        -
        59 
        -
        63  NdArray(Type* data, const std::initializer_list<int>& dims)
        -
        64  : NdArray( dims )
        -
        65  {
        -
        66  thrust::copy(data, data+num_of_elems_, dev_ptr );
        -
        67  }
        -
        68 
        -
        74  NdArray(thrust::device_ptr<Type> dev_ptr, int num_of_dims, int* dims)
        -
        75  : NdArray( num_of_dims, dims )
        -
        76  {
        -
        77  this->dev_ptr = dev_ptr;
        -
        78  this->ownership_ = false;
        -
        79  }
        -
        80 
        -
        81 
        - -
        83  if (this->ownership_) {
        -
        84  thrust::device_free( dev_ptr );
        -
        85  }
        -
        86  }
        -
        87 
        -
        88  template <typename OutputIterator>
        -
        89  void copy_to_host(OutputIterator out) {
        -
        90 
        -
        91  thrust::copy(begin(), end(), out);
        -
        92  }
        -
        93 
        -
        94  __host__ __device__ int num_of_dims() const {
        -
        95  return num_of_dims_;
        -
        96  }
        -
        97 
        -
        98  __host__ __device__ int num_of_elems() const {
        -
        99  return num_of_elems_;
        -
        100  }
        -
        101 
        -
        102  __host__ __device__ const int* dims() const {
        -
        103  return dims_;
        -
        104  }
        -
        105 
        -
        106  __host__ __device__ void set_ownership(bool own) {
        -
        107  this->ownership_ = own;
        -
        108  }
        -
        109 
        -
        110  __host__ __device__ thrust::device_ptr<Type> & data() {
        -
        111  return dev_ptr;
        -
        112  }
        -
        113 
        -
        114  __host__ __device__ const thrust::device_ptr<Type> begin() const {
        -
        115  return dev_ptr;
        -
        116  }
        -
        117 
        -
        118  __host__ __device__ const thrust::device_ptr<Type> end() const {
        -
        119  return dev_ptr + num_of_elems_;
        -
        120  }
        -
        121 
        -
        122  __host__ __device__ thrust::device_ptr<Type> get_ptr(const std::initializer_list<int>& ind) {
        -
        123  int nd = num_of_dims_;
        -
        124  int* strides = strides_;
        -
        125  thrust::device_ptr<Type> dptr = dev_ptr;
        -
        126  auto it = ind.begin();
        -
        127  while (nd--) {
        -
        128  dptr += (*strides++) * (*it++);
        -
        129  }
        -
        130  return dptr;
        -
        131  }
        -
        132 
        -
        133  __host__ __device__ Type get_val(const std::initializer_list<int>& ind) {
        -
        134  return *(get_ptr(ind));
        -
        135  }
        -
        136 
        -
        137  __host__ __device__ void set_val(
        -
        138  const std::initializer_list<int>& ind, const Type& val) {
        -
        139  *(get_ptr(ind)) = val;
        -
        140  }
        -
        141 
        -
        142  __host__ __device__ void Reshape(
        -
        143  const std::initializer_list<int>& newshape) {
        -
        144 
        -
        145  // total size check
        -
        146  int newsize=1;
        -
        147  auto it = newshape.begin();
        -
        148  for (; it != newshape.end(); ++it)
        -
        149  newsize *= *it;
        -
        150  assert (newsize == num_of_elems_);
        -
        151 
        -
        152  num_of_dims_ = newshape.size();
        -
        153 
        -
        154  it = newshape.begin();
        -
        155  for (int i = 0; i < num_of_dims_; ++i, ++it)
        -
        156  dims_[i] = *it;
        -
        157 
        -
        158  UpdateStrides();
        -
        159  }
        -
        160 
        -
        161  // NdArray* Slice(const std::initializer_list<int>& from,
        -
        162  // const std::initializer_list<int>& to) {
        -
        163  // int* dims = new int[num_of_dims_];
        -
        164  // auto itf = from.begin(), itt = to.begin();
        -
        165  // for (int i = 0; i < num_of_dims_; ++i) {
        -
        166  // dims[i] = *(itt + i) - *(itf + i) + 1;
        -
        167  // }
        -
        168 
        -
        169  // int* strides = new int[num_of_dims_];
        -
        170  // for (int i = 0; i < num_of_dims_; ++i) {
        -
        171  // strides[i] = strides_[i];
        -
        172  // }
        -
        173 
        -
        174  // return new NdArray(get_ptr(from), num_of_dims_, dims, strides);
        -
        175  // }
        -
        176 
        -
        177  private:
        -
        178  __host__ __device__ void init_shape(const std::initializer_list<int>& dims) {
        -
        179 
        -
        180  assert(dims.size() <= kNdArrayMaxDims);
        -
        181 
        -
        182  num_of_dims_ = dims.size();
        -
        183 
        -
        184  auto it = dims.begin();
        -
        185  for (int i = 0; i < num_of_dims_; ++i)
        -
        186  dims_[i] = *(it + i);
        -
        187 
        -
        188  UpdateStrides();
        -
        189 
        -
        190  num_of_elems_ = 1;
        -
        191  for (int i = 0; i < num_of_dims_; ++i)
        -
        192  num_of_elems_ *= dims_[i];
        -
        193  }
        -
        194 
        -
        195  __host__ __device__ void init_shape(int num_of_dims, int* dims) {
        -
        196 
        -
        197  assert(num_of_dims <= kNdArrayMaxDims);
        -
        198 
        -
        199  num_of_dims_ = num_of_dims;
        -
        200 
        -
        201  for (int i = 0; i < num_of_dims_; ++i)
        -
        202  dims_[i] = dims[i];
        -
        203 
        -
        204  UpdateStrides();
        -
        205 
        -
        206  num_of_elems_ = 1;
        -
        207  for (int i = 0; i < num_of_dims_; ++i)
        -
        208  num_of_elems_ *= dims_[i];
        -
        209 
        -
        210  }
        -
        211 
        -
        212  __host__ __device__ void UpdateStrides() {
        -
        213  int stride = 1;
        -
        214  for (int i = num_of_dims_ - 1; i >= 0; --i) {
        -
        215  strides_[i] = stride;
        -
        216  stride *= dims_[i] ? dims_[i] : 1;
        -
        217  }
        -
        218  }
        -
        219 
        -
        220 };
        -
        221 
        -
        222 } // namespace dv
        -
        223 
        -
        224 #endif // NDARRAY_H_
        -
        __host__ __device__ Type get_val(const std::initializer_list< int > &ind)
        Definition: ndarray.h:133
        -
        NdArray(thrust::device_ptr< Type > dev_ptr, int num_of_dims, int *dims)
        pass a device pointer.
        Definition: ndarray.h:74
        -
        const int kNdArrayMaxDims
        Definition: ndarray.h:15
        -
        ~NdArray()
        Definition: ndarray.h:82
        -
        __host__ __device__ int num_of_dims() const
        Definition: ndarray.h:94
        -
        NdArray(const std::initializer_list< int > &dims)
        Create an empty array.
        Definition: ndarray.h:43
        -
        NdArray(int num_of_dims, int *dims)
        Create an empty array.
        Definition: ndarray.h:32
        -
        __host__ __device__ void set_ownership(bool own)
        Definition: ndarray.h:106
        -
        __host__ __device__ const thrust::device_ptr< Type > begin() const
        Definition: ndarray.h:114
        -
        __host__ __device__ thrust::device_ptr< Type > & data()
        Definition: ndarray.h:110
        +Go to the documentation of this file.
        1 // Copyright 2015 The Edda Authors. All rights reserved.
        2 // Use of this source code is governed by a MIT-style license that can be
        3 // found in the LICENSE file.
        4 
        5 #ifndef NDARRAY_H_
        6 #define NDARRAY_H_
        7 
        8 #include <cstdio>
        9 #include <cassert>
        10 #include <iostream>
        11 #include <memory>
        12 #include <thrust/random/uniform_real_distribution.h>
        13 #ifdef __CUDACC__
        14 #include <cuda.h>
        15 #endif
        16 
        17 #include "thrust_common.h"
        18 
        19 namespace edda {
        20 
        21 const int kNdArrayMaxDims = 8;
        22 
        26 template <typename Type>
        27 class NdArray {
        28 
        29  thrust::device_ptr<Type> dData;
        30  NdArray<Type> *dSelfPtr = 0;
        31  int num_of_dims = 0;
        32  int num_of_elems = 0;
        33  int dims[kNdArrayMaxDims];
        34  int strides[kNdArrayMaxDims];
        35  bool ownership = false;
        36 
        37 public:
        39 
        43  __host__ __device__
        44  NdArray(): ownership(false) { }
        45 
        49  NdArray(int num_of_dims_, int* dims_) {
        50 
        51  init_shape(num_of_dims_, dims_);
        52 
        53  dData = thrust::device_malloc<Type>(num_of_elems);
        54 
        55  ownership = true;
        56  printf("NdArray created\n");
        57  }
        58 
        62  NdArray(const std::initializer_list<int>& dims_) {
        63 
        64  init_shape(dims_);
        65 
        66  dData = thrust::device_malloc<Type>(num_of_elems);
        67 
        68  ownership = true;
        69  printf("NdArray created\n");
        70  }
        71 
        75  NdArray(Type* data, int num_of_dims_, int* dims_)
        76  : NdArray(num_of_dims_, dims_)
        77  {
        78  thrust::copy(data, data+num_of_elems, dData );
        79  }
        80 
        84  NdArray(Type* data, const std::initializer_list<int>& dims_)
        85  : NdArray( dims_ )
        86  {
        87  thrust::copy(data, data+num_of_elems, dData );
        88 
        89  }
        90 
        96  __host__ __device__
        97  NdArray(thrust::device_ptr<Type> dData, int num_of_dims_, int* dims_)
        98  : NdArray( num_of_dims_, dims_ )
        99  {
        100  this->dData = dData;
        101 
        102  }
        103 
        104  NdArray(const NdArray &obj) {
        105  this->operator=( obj );
        106  }
        107 
        112  printf("opeartor=\n");
        113  this->dData = obj.dData;
        114  this->num_of_dims = obj.num_of_dims;
        115  this->num_of_elems = obj.num_of_elems;
        116  for (int i=0; i<num_of_dims; i++) {
        117  this->dims[i] = obj.dims[i];
        118  this->strides[i] = obj.strides[i];
        119  }
        120  this->ownership = false;
        121  return *this;
        122  }
        123 
        127  void take(NdArray<Type> &obj) {
        128  free(); // free the current data
        129  *this = obj;
        130  this->ownership = true;
        131  obj.ownership = false;
        132  }
        133 
        135  free();
        136  }
        137 
        138  void free() {
        139  if (this->ownership ) {
        140  printf("Release NdArray\n");
        141  thrust::device_free( dData );
        142  }
        143 
        144 #ifdef __CUDACC__
        145  if ( dSelfPtr )
        146  cudaFree( dSelfPtr );
        147 #endif
        148  }
        149 
        150  template <typename OutputIterator>
        151  void copy_to_host(OutputIterator out) {
        152 
        153  thrust::copy(begin(), end(), out);
        154  }
        155 
        156  __host__ __device__ int get_num_of_dims() const {
        157  return num_of_dims;
        158  }
        159 
        160  __host__ __device__ int get_num_of_elems() const {
        161  return num_of_elems;
        162  }
        163 
        164  __host__ __device__ const int* get_dims() const {
        165  return dims;
        166  }
        167 
        168  __host__ __device__
        169  void set_ownership(bool own) {
        170  this->ownership = own;
        171  printf("Set Ownership\n");
        172  }
        173 
        174  __host__ __device__
        175  thrust::device_ptr<Type> & data() {
        176  return dData;
        177  }
        178 
        179  const thrust::device_ptr<Type> begin() const {
        180  return dData;
        181  }
        182 
        183  const thrust::device_ptr<Type> end() const {
        184  return dData + num_of_elems;
        185  }
        186 
        187  __host__ __device__ thrust::device_ptr<Type> get_ptr(const std::initializer_list<int>& ind) const {
        188  int nd = num_of_dims;
        189  const int* s = strides;
        190  thrust::device_ptr<Type> dptr = dData;
        191  auto it = ind.begin();
        192  while (nd--) {
        193  dptr += (*s++) * (*it++);
        194  }
        195  return dptr;
        196  }
        197 
        198  __device__ __host__ Type get_val(const std::initializer_list<int>& ind) const {
        199  return *(get_ptr(ind));
        200  }
        201 
        202  __device__ __host__ Type get_val(int ind) const {
        203  //printf("val[%d] = %f\n", ind, (float) dData[ind]);
        204  return dData[ind];
        205  }
        206 
        207  __host__ __device__ void set_val(
        208  const std::initializer_list<int>& ind, const Type& val) {
        209  *(get_ptr(ind)) = val;
        210  }
        211 
        212  __host__ __device__ void Reshape(
        213  const std::initializer_list<int>& newshape) {
        214 
        215  // total size check
        216  int newsize=1;
        217  auto it = newshape.begin();
        218  for (; it != newshape.end(); ++it)
        219  newsize *= *it;
        220  assert (newsize == num_of_elems);
        221 
        222  num_of_dims = newshape.size();
        223 
        224  it = newshape.begin();
        225  for (int i = 0; i < num_of_dims; ++i, ++it)
        226  dims[i] = *it;
        227 
        228  UpdateStrides();
        229  }
        230 
        231  // NdArray* Slice(const std::initializer_list<int>& from,
        232  // const std::initializer_list<int>& to) {
        233  // int* dims = new int[num_of_dims];
        234  // auto itf = from.begin(), itt = to.begin();
        235  // for (int i = 0; i < num_of_dims; ++i) {
        236  // dims[i] = *(itt + i) - *(itf + i) + 1;
        237  // }
        238 
        239  // int* strides = new int[num_of_dims];
        240  // for (int i = 0; i < num_of_dims; ++i) {
        241  // strides[i] = strides_[i];
        242  // }
        243 
        244  // return new NdArray(get_ptr(from), num_of_dims, dims, strides);
        245  // }
        246 
        247  __host__
        248  SelfDevicePtr get_selft_ptr() {
        249 #ifdef __CUDACC__
        250  if (!dSelfPtr) {
        251 
        252  cudaMalloc(&dSelfPtr, sizeof(NdArray<Type>));
        253  cudaMemcpy(dSelfPtr, this, sizeof(NdArray<Type>), cudaMemcpyHostToDevice);
        254 
        255  }
        256  return dSelfPtr;
        257 #else
        258  return this;
        259 #endif
        260  }
        261 
        262  private:
        263  void init_shape(const std::initializer_list<int>& dims_) {
        264 
        265  assert(dims_.size() <= kNdArrayMaxDims);
        266 
        267  num_of_dims = dims_.size();
        268 
        269  auto it = dims_.begin();
        270  for (int i = 0; i < num_of_dims; ++i)
        271  dims[i] = *(it + i);
        272 
        273  UpdateStrides();
        274 
        275  num_of_elems = 1;
        276  for (int i = 0; i < num_of_dims; ++i)
        277  num_of_elems *= dims[i];
        278  }
        279 
        280  void init_shape(int num_of_dims_, int* dims_) {
        281 
        282  assert(num_of_dims_ <= kNdArrayMaxDims);
        283 
        284  num_of_dims = num_of_dims_;
        285 
        286  for (int i = 0; i < num_of_dims; ++i)
        287  dims[i] = dims_[i];
        288 
        289  UpdateStrides();
        290 
        291  num_of_elems = 1;
        292  for (int i = 0; i < num_of_dims; ++i)
        293  num_of_elems *= dims[i];
        294 
        295  }
        296 
        297  __host__ __device__ void UpdateStrides() {
        298  int stride = 1;
        299  for (int i = num_of_dims - 1; i >= 0; --i) {
        300  strides[i] = stride;
        301  stride *= dims[i] ? dims[i] : 1;
        302  }
        303  }
        304 
        305 };
        306 
        307 
        308 
        309 } // namespace edda
        310 
        311 #endif // NDARRAY_H_
        NdArray< Type > & operator=(const NdArray< Type > &obj)
        Assignment will be a shallow copy of the input.
        Definition: ndarray.h:111
        +
        NdArray< Type > * SelfDevicePtr
        Definition: ndarray.h:38
        +
        const thrust::device_ptr< Type > end() const
        Definition: ndarray.h:183
        +
        void take(NdArray< Type > &obj)
        Take over the ownership of the input.
        Definition: ndarray.h:127
        +
        __host__ SelfDevicePtr get_selft_ptr()
        Definition: ndarray.h:248
        +
        __host__ __device__ thrust::device_ptr< Type > get_ptr(const std::initializer_list< int > &ind) const
        Definition: ndarray.h:187
        +
        NdArray(int num_of_dims_, int *dims_)
        Create an empty array.
        Definition: ndarray.h:49
        +
        Experimental functionality.
        Definition: distributionModeler.h:26
        +
        NdArray(Type *data, const std::initializer_list< int > &dims_)
        Create a device array and copy host content to it.
        Definition: ndarray.h:84
        +
        __device__ __host__ Type get_val(const std::initializer_list< int > &ind) const
        Definition: ndarray.h:198
        +
        __host__ __device__ int get_num_of_dims() const
        Definition: ndarray.h:156
        +
        const int kNdArrayMaxDims
        Definition: ndarray.h:21
        +
        ~NdArray()
        Definition: ndarray.h:134
        +
        __host__ __device__ int get_num_of_elems() const
        Definition: ndarray.h:160
        +
        __host__ __device__ void set_ownership(bool own)
        Definition: ndarray.h:169
        +
        __host__ __device__ thrust::device_ptr< Type > & data()
        Definition: ndarray.h:175
        +
        __host__ __device__ NdArray()
        Create an empty array.
        Definition: ndarray.h:44
        +
        __host__ __device__ const int * get_dims() const
        Definition: ndarray.h:164
        -
        NdArray(Type *data, int num_of_dims, int *dims)
        Create a device array and copy host content to it.
        Definition: ndarray.h:54
        -
        __host__ __device__ int num_of_elems() const
        Definition: ndarray.h:98
        -
        NdArray(Type *data, const std::initializer_list< int > &dims)
        Create a device array and copy host content to it.
        Definition: ndarray.h:63
        -
        void copy_to_host(OutputIterator out)
        Definition: ndarray.h:89
        -
        __host__ __device__ void set_val(const std::initializer_list< int > &ind, const Type &val)
        Definition: ndarray.h:137
        -
        __host__ __device__ void Reshape(const std::initializer_list< int > &newshape)
        Definition: ndarray.h:142
        -
        __host__ __device__ const int * dims() const
        Definition: ndarray.h:102
        -
        __host__ __device__ thrust::device_ptr< Type > get_ptr(const std::initializer_list< int > &ind)
        Definition: ndarray.h:122
        -
        Definition: ndarray.h:18
        -
        __host__ __device__ const thrust::device_ptr< Type > end() const
        Definition: ndarray.h:118
        +
        __host__ __device__ NdArray(thrust::device_ptr< Type > dData, int num_of_dims_, int *dims_)
        pass a device pointer.
        Definition: ndarray.h:97
        +
        const thrust::device_ptr< Type > begin() const
        Definition: ndarray.h:179
        +
        __device__ __host__ Type get_val(int ind) const
        Definition: ndarray.h:202
        +
        NdArray(const std::initializer_list< int > &dims_)
        Create an empty array.
        Definition: ndarray.h:62
        +
        void copy_to_host(OutputIterator out)
        Definition: ndarray.h:151
        +
        void free()
        Definition: ndarray.h:138
        +
        NdArray(Type *data, int num_of_dims_, int *dims_)
        Create a device array and copy host content to it.
        Definition: ndarray.h:75
        +
        __host__ __device__ void set_val(const std::initializer_list< int > &ind, const Type &val)
        Definition: ndarray.h:207
        +
        __host__ __device__ void Reshape(const std::initializer_list< int > &newshape)
        Definition: ndarray.h:212
        +
        NdArray(const NdArray &obj)
        Definition: ndarray.h:104
        +
        A general n-dimensional array compatible to Cuda.
        Definition: ndarray.h:27
        diff --git a/html/ndarray__iterator_8h.html b/html/ndarray__iterator_8h.html index 7c0c164..c43cadb 100644 --- a/html/ndarray__iterator_8h.html +++ b/html/ndarray__iterator_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/iterators/ndarray_iterator.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -94,10 +70,10 @@
        ndarray_iterator.h File Reference
        -
        #include <thrust/iterator/iterator_adaptor.h>
        -#include "common.h"
        -#include "core/thrust_common.h"
        -#include "core/ndarray.h"
        +
        #include <thrust/iterator/iterator_adaptor.h>
        +#include "common.h"
        +#include "core/thrust_common.h"
        +#include "core/ndarray.h"

        Go to the source code of this file.

        @@ -112,8 +88,8 @@
        - - + +

        Namespaces

         edda
         Experimental functionality.
         edda
         Experimental functionality.
         

        @@ -125,9 +101,9 @@ diff --git a/html/ndarray__iterator_8h_source.html b/html/ndarray__iterator_8h_source.html index 0a86d7c..d81f6f0 100644 --- a/html/ndarray__iterator_8h_source.html +++ b/html/ndarray__iterator_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/iterators/ndarray_iterator.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -90,110 +66,26 @@
        ndarray_iterator.h
        -Go to the documentation of this file.
        1 #ifndef NDARRAY_ITERATOR
        -
        2 #define NDARRAY_ITERATOR
        -
        3 
        -
        4 #include <thrust/iterator/iterator_adaptor.h>
        -
        5 #include "common.h"
        -
        6 #include "core/thrust_common.h"
        -
        7 #include "core/ndarray.h"
        -
        8 
        -
        9 
        -
        10 namespace edda {
        -
        11 
        -
        12 template<typename >
        - -
        14  : public thrust::iterator_adaptor<
        -
        15  ndarray_iterator<T>, // the first template parameter is the name of the iterator we're creating
        -
        16  Iterator // the second template parameter is the name of the iterator we're adapting
        -
        17  // we can use the default for the additional template parameters
        -
        18  >
        -
        19 {
        -
        20  public:
        -
        21  // shorthand for the name of the iterator_adaptor we're deriving from
        -
        22  typedef thrust::iterator_adaptor<
        -
        23  repeat_iterator<Iterator>,
        -
        24  Iterator
        - -
        26  __host__ __device__
        -
        27  repeat_iterator(const Iterator &x, int n) : super_t(x), begin(x), n(n) {}
        -
        28  // befriend thrust::iterator_core_access to allow it access to the private interface below
        - -
        30  private:
        -
        31  // repeat each element of the adapted range n times
        -
        32  unsigned int n;
        -
        33  // used to keep track of where we began
        -
        34  const Iterator begin;
        -
        35  // it is private because only thrust::iterator_core_access needs access to it
        -
        36  __host__ __device__
        -
        37  typename super_t::reference dereference() const
        -
        38  {
        -
        39  return *(begin + (this->base() - begin) / n);
        -
        40  }
        -
        41 };
        -
        42 
        -
        43 
        -
        44 
        -
        45 
        -
        46 class ndarray_iterator {
        -
        47 
        -
        48 private:
        -
        49  NdArray &ndarray;
        -
        50 
        -
        51 public:
        -
        52  ndarray_iterator(const NdArray &ndarray_) {
        -
        53  ndarray = ndarray_;
        -
        54  }
        -
        55 
        -
        56  Type operator() ()
        -
        57 };
        -
        58 
        -
        59 
        - -
        61  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
        -
        62  __host__ __device__
        -
        63  double operator() (thrust::tuple<Dist, thrust::default_random_engine> &tuple)
        -
        64  {
        -
        65  Dist &dist = thrust::get<0>(tuple);
        -
        66  return dist::getSample(dist, thrust::get<1>(tuple));
        -
        67  }
        -
        68 };
        -
        69 
        -
        73 template <class InputIterator, class OutputIterator>
        -
        74 void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
        -
        75 {
        -
        76  static int seed ;
        -
        77  seed += time(NULL) % 10000;
        -
        78  int n = end-begin;
        -
        79  thrust::transform( thrust::make_zip_iterator(thrust::make_tuple(begin, randomEngineIterator(seed)) ) ,
        -
        80  thrust::make_zip_iterator(thrust::make_tuple(end, randomEngineIterator(seed+n)) ),
        -
        81  out, GetSample_functor()) ;
        -
        82  seed += n;
        -
        83 }
        -
        84 
        -
        85 } // edda
        -
        86 
        -
        87 #endif // NDARRAY_ITERATOR
        - -
        void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
        Definition: random_sample_field.h:33
        +Go to the documentation of this file.
        1 #ifndef NDARRAY_ITERATOR
        2 #define NDARRAY_ITERATOR
        3 
        4 #include <thrust/iterator/iterator_adaptor.h>
        5 #include "common.h"
        6 #include "core/thrust_common.h"
        7 #include "core/ndarray.h"
        8 
        9 
        10 namespace edda {
        11 
        12 template<typename >
        14  : public thrust::iterator_adaptor<
        15  ndarray_iterator<T>, // the first template parameter is the name of the iterator we're creating
        16  Iterator // the second template parameter is the name of the iterator we're adapting
        17  // we can use the default for the additional template parameters
        18  >
        19 {
        20  public:
        21  // shorthand for the name of the iterator_adaptor we're deriving from
        22  typedef thrust::iterator_adaptor<
        23  repeat_iterator<Iterator>,
        24  Iterator
        26  __host__ __device__
        27  repeat_iterator(const Iterator &x, int n) : super_t(x), begin(x), n(n) {}
        28  // befriend thrust::iterator_core_access to allow it access to the private interface below
        30  private:
        31  // repeat each element of the adapted range n times
        32  unsigned int n;
        33  // used to keep track of where we began
        34  const Iterator begin;
        35  // it is private because only thrust::iterator_core_access needs access to it
        36  __host__ __device__
        37  typename super_t::reference dereference() const
        38  {
        39  return *(begin + (this->base() - begin) / n);
        40  }
        41 };
        42 
        43 
        44 
        45 
        46 class ndarray_iterator {
        47 
        48 private:
        49  NdArray &ndarray;
        50 
        51 public:
        52  ndarray_iterator(const NdArray &ndarray_) {
        53  ndarray = ndarray_;
        54  }
        55 
        56  Type operator() ()
        57 };
        58 
        59 
        61  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
        62  __host__ __device__
        63  double operator() (thrust::tuple<Dist, thrust::default_random_engine> &tuple)
        64  {
        65  Dist &dist = thrust::get<0>(tuple);
        66  return dist::getSample(dist, thrust::get<1>(tuple));
        67  }
        68 };
        69 
        73 template <class InputIterator, class OutputIterator>
        74 void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
        75 {
        76  static int seed ;
        77  seed += time(NULL) % 10000;
        78  int n = end-begin;
        79  thrust::transform( thrust::make_zip_iterator(thrust::make_tuple(begin, randomEngineIterator(seed)) ) ,
        80  thrust::make_zip_iterator(thrust::make_tuple(end, randomEngineIterator(seed+n)) ),
        81  out, GetSample_functor()) ;
        82  seed += n;
        83 }
        84 
        85 } // edda
        86 
        87 #endif // NDARRAY_ITERATOR
        __host__ double getSample(const Dist &dist)
        Return a random sample.
        Definition: distribution_tag.h:84
        +
        void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
        Definition: thrust_random_sample.h:44
        Definition: ndarray_iterator.h:60
        -
        __host__ __device__ double operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)
        Definition: ndarray_iterator.h:63
        +
        Experimental functionality.
        Definition: distributionModeler.h:26
        ndarray_iterator(const NdArray &ndarray_)
        Definition: ndarray_iterator.h:52
        __host__ __device__ repeat_iterator(const Iterator &x, int n)
        Definition: ndarray_iterator.h:27
        +
        Definition: ndarray_iterator.h:13
        friend class thrust::iterator_core_access
        Definition: ndarray_iterator.h:29
        thrust::iterator_adaptor< repeat_iterator< Iterator >, Iterator > super_t
        Definition: ndarray_iterator.h:25
        -
        __host__ double getSample(const Gaussian &dist)
        Return a random sample.
        Definition: gaussian.h:73
        thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator(int seed)
        randomEngineIterator creates a Thrust default random engine with a given seed
        Definition: thrust_common.h:59
        -
        Definition: ndarray.h:21
        +
        A general n-dimensional array compatible to Cuda.
        Definition: ndarray.h:27
        diff --git a/html/nrrd_8cpp.html b/html/nrrd_8cpp.html index cce4c0d..ef83bc6 100644 --- a/html/nrrd_8cpp.html +++ b/html/nrrd_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: src/io/nrrd.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -93,27 +69,27 @@
        nrrd.cpp File Reference
        -
        #include <stdio.h>
        -#include <stdlib.h>
        -#include <io/nrrd.h>
        +
        #include <stdio.h>
        +#include <stdlib.h>
        +#include <io/nrrd.h>
        - - + +

        Namespaces

         edda
         Experimental functionality.
         edda
         Experimental functionality.
         
        - - + +

        Functions

        ReturnStatus edda::write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        ReturnStatus edda::write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        diff --git a/html/nrrd_8h.html b/html/nrrd_8h.html index 151bbb5..669b2e8 100644 --- a/html/nrrd_8h.html +++ b/html/nrrd_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/io/nrrd.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -93,27 +69,28 @@
        nrrd.h File Reference
        -
        #include "common.h"
        +
        #include "common.h"
        +#include "edda_export.h"

        Go to the source code of this file.

        - - + +

        Namespaces

         edda
         Experimental functionality.
         edda
         Experimental functionality.
         
        - - + +

        Functions

        ReturnStatus edda::write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        ReturnStatus edda::write_nrrd_3d (const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
         
        diff --git a/html/nrrd_8h_source.html b/html/nrrd_8h_source.html index ecdc966..ac0c799 100644 --- a/html/nrrd_8h_source.html +++ b/html/nrrd_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/io/nrrd.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -90,32 +66,18 @@
        nrrd.h
        -Go to the documentation of this file.
        1 // Copyright 2015 The Edda Authors. All rights reserved.
        -
        2 // Use of this source code is governed by a MIT-style license that can be
        -
        3 // found in the LICENSE file.
        -
        4 
        -
        5 #ifndef NRRD_H_
        -
        6 #define NRRD_H_
        -
        7 
        -
        8 #include "common.h"
        -
        9 
        -
        10 namespace edda {
        -
        11 
        -
        12 ReturnStatus write_nrrd_3d(const char *nrrd_fname, const char *raw_fname,
        -
        13  int w, int h, int d, const char *type);
        -
        14 
        -
        15 } // namespace edda
        -
        16 
        -
        17 #endif // NRRD_H_
        -
        ReturnStatus
        Definition: common.h:32
        -
        ReturnStatus write_nrrd_3d(const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
        Definition: nrrd.cpp:12
        +Go to the documentation of this file.
        1 // Copyright 2015 The Edda Authors. All rights reserved.
        2 // Use of this source code is governed by a MIT-style license that can be
        3 // found in the LICENSE file.
        4 
        5 #ifndef NRRD_H_
        6 #define NRRD_H_
        7 
        8 #include "common.h"
        9 #include "edda_export.h"
        10 
        11 namespace edda {
        12 
        13 ReturnStatus EDDA_EXPORT write_nrrd_3d(const char *nrrd_fname, const char *raw_fname,
        14  int w, int h, int d, const char *type);
        15 
        16 } // namespace edda
        17 
        18 #endif // NRRD_H_
        Experimental functionality.
        Definition: distributionModeler.h:26
        + +
        ReturnStatus
        Definition: common.h:34
        +
        ReturnStatus write_nrrd_3d(const char *nrrd_fname, const char *raw_fname, int w, int h, int d, const char *type)
        Definition: nrrd.cpp:12
        +
        #define EDDA_EXPORT
        Definition: edda_export.h:17
        diff --git a/html/old_2ndarray_8h.html b/html/old_2ndarray_8h.html index 33f8779..7b7d051 100644 --- a/html/old_2ndarray_8h.html +++ b/html/old_2ndarray_8h.html @@ -38,7 +38,6 @@
        + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
        @@ -122,7 +121,7 @@
        diff --git a/html/old_2ndarray_8h_source.html b/html/old_2ndarray_8h_source.html index 14f8c93..7f2755b 100644 --- a/html/old_2ndarray_8h_source.html +++ b/html/old_2ndarray_8h_source.html @@ -38,7 +38,6 @@
        • Main Page
        • Related Pages
        • -
        • Modules
        • Namespaces
        • Classes
        • Files
        • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
          @@ -362,7 +361,7 @@
          diff --git a/html/pages.html b/html/pages.html index 6db7663..d5ca11e 100644 --- a/html/pages.html +++ b/html/pages.html @@ -3,16 +3,15 @@ - + + EDDA: Related Pages + - @@ -21,7 +20,7 @@ - @@ -30,43 +29,26 @@
          +
          EDDA
          - + - + + + + +
          @@ -82,17 +64,17 @@
          Here is a list of all related documentation pages:
          diff --git a/html/path_8cpp.html b/html/path_8cpp.html index b702de8..1500227 100644 --- a/html/path_8cpp.html +++ b/html/path_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: src/io/path.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -93,20 +69,20 @@
          path.cpp File Reference
          -
          #include <io/path.h>
          +
          #include <io/path.h>
          - - + +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
          - - - - + + + + @@ -117,9 +93,9 @@ diff --git a/html/path_8h.html b/html/path_8h.html index 0a94fa8..5739933 100644 --- a/html/path_8h.html +++ b/html/path_8h.html @@ -3,16 +3,15 @@ - + +EDDA: src/io/path.h File Reference + - @@ -21,7 +20,7 @@

          Functions

          std::string edda::getPath (const std::string &filepath)
           
          std::string edda::getFilename (const std::string &filepath)
           
          std::string edda::getPath (const std::string &filepath)
           
          std::string edda::getFilename (const std::string &filepath)
           
          string edda::removeFileExtension (const string &filename)
           
          bool edda::isFilenameOnly (const string &filename)
          - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -93,35 +69,36 @@
          path.h File Reference
          -
          #include <string>
          +
          #include <string>
          +#include "edda_export.h"

          Go to the source code of this file.

          - - + +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
          - - - - - - - - - - + + + + + + + + + +

          Functions

          std::string edda::getPath (const std::string &filepath)
           
          std::string edda::getFilename (const std::string &filepath)
           
          std::string edda::removeFileExtension (const std::string &filename)
           
          bool edda::isFilenameOnly (const std::string &filename)
           
          std::string edda::getFileExtension (const std::string &filename)
           
          std::string edda::getPath (const std::string &filepath)
           
          std::string edda::getFilename (const std::string &filepath)
           
          std::string EDDA_EXPORT edda::removeFileExtension (const std::string &filename)
           
          bool EDDA_EXPORT edda::isFilenameOnly (const std::string &filename)
           
          std::string EDDA_EXPORT edda::getFileExtension (const std::string &filename)
           
          diff --git a/html/path_8h_source.html b/html/path_8h_source.html index d186924..17961bd 100644 --- a/html/path_8h_source.html +++ b/html/path_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/io/path.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,31 +66,20 @@
          path.h
          -Go to the documentation of this file.
          1 #ifndef PATH_H_
          -
          2 #define PATH_H_
          -
          3 
          -
          4 #include <string>
          -
          5 namespace edda{
          -
          6 std::string getPath(const std::string &file);
          -
          7 std::string getFilename(const std::string &filepath);
          -
          8 std::string removeFileExtension(const std::string &filename);
          -
          9 bool isFilenameOnly(const std::string &filename);
          -
          10 std::string getFileExtension(const std::string &filename);
          -
          11 }
          -
          12 #endif
          -
          13 
          -
          14 
          +Go to the documentation of this file.
          1 #ifndef PATH_H_
          2 #define PATH_H_
          3 
          4 #include <string>
          5 #include "edda_export.h"
          6 
          7 namespace edda{
          8 std::string EDDA_EXPORT getPath(const std::string &file);
          9 std::string EDDA_EXPORT getFilename(const std::string &filepath);
          10 std::string EDDA_EXPORT removeFileExtension(const std::string &filename);
          11 bool EDDA_EXPORT isFilenameOnly(const std::string &filename);
          12 std::string EDDA_EXPORT getFileExtension(const std::string &filename);
          13 }
          14 #endif
          15 
          16 
          Experimental functionality.
          Definition: distributionModeler.h:26
          string removeFileExtension(const string &filename)
          Definition: path.cpp:25
          -
          std::string getFilename(const std::string &filepath)
          Definition: path.cpp:16
          -
          std::string getPath(const std::string &filepath)
          Definition: path.cpp:8
          + +
          std::string getPath(const std::string &filepath)
          Definition: path.cpp:8
          string getFileExtension(const string &filename)
          Definition: path.cpp:36
          +
          #define EDDA_EXPORT
          Definition: edda_export.h:17
          +
          std::string getFilename(const std::string &filepath)
          Definition: path.cpp:16
          bool isFilenameOnly(const string &filename)
          Definition: path.cpp:31
          diff --git a/html/randomSampleField_8cpp.html b/html/randomSampleField_8cpp.html new file mode 100644 index 0000000..4c72e2f --- /dev/null +++ b/html/randomSampleField_8cpp.html @@ -0,0 +1,177 @@ + + + + + + + +EDDA: vis/examples/randomSampleField.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          randomSampleField.cpp File Reference
          +
          +
          +
          #include <string>
          +#include <cstdlib>
          +#include <cstdio>
          +#include <iostream>
          +#include <vtkPiecewiseFunction.h>
          +#include <vtkSmartPointer.h>
          +#include <vtkSmartVolumeMapper.h>
          +#include <vtkVolumeProperty.h>
          +#include <vtkVolume.h>
          +#include <vtkXMLImageDataWriter.h>
          +#include <vtkColorTransferFunction.h>
          +#include <vtkOutlineFilter.h>
          +#include <vtkXMLImageDataReader.h>
          +#include <vtkXMLStructuredGridReader.h>
          +#include <vtkCellDataToPointData.h>
          +#include <vtkXMLStructuredGridWriter.h>
          +#include <vtkXMLUnstructuredGridReader.h>
          +#include <vtkUnstructuredGrid.h>
          +#include <vtkXMLUnstructuredGridWriter.h>
          +#include <vtkRenderer.h>
          +#include <vtkRenderWindow.h>
          +#include <vtkRenderWindowInteractor.h>
          +#include <vtkInteractorStyleTrackballCamera.h>
          +#include <vtkPolyDataMapper.h>
          +#include <vtkActor.h>
          +#include <vtkProperty.h>
          +#include "distributions/gaussian.h"
          +#include "distributions/distribution.h"
          +#include "io/edda_vtk_reader.h"
          +#include "io/path.h"
          +#include "vtk/vtk_common.h"
          +#include "vtk/eddaRandomProbeFilter.h"
          +#include "vtk/eddaRandomSampleField.h"
          +
          + + + + + +

          +Functions

          vtkSmartPointer< vtkDataSet > process_vtk_file (string &vtk_file, string &source_file)
           
          int main (int argc, char **argv)
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + + + + + + + + + + + + +
          int main (int argc,
          char ** argv 
          )
          +
          + +
          +
          + +

          § process_vtk_file()

          + +
          +
          + + + + + + + + + + + + + + + + + + +
          vtkSmartPointer<vtkDataSet> process_vtk_file (string & vtk_file,
          string & source_file 
          )
          +
          + +
          +
          +
          + + + + diff --git a/html/randomSample_8cpp.html b/html/randomSample_8cpp.html deleted file mode 100644 index 60800ab..0000000 --- a/html/randomSample_8cpp.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -EDDA: examples/vtk/randomSample.cpp File Reference - - - - - - - - - -
          -
          - - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          - -
          -
          randomSample.cpp File Reference
          -
          -
          -
          #include <string>
          -#include <cstdlib>
          -#include <cstdio>
          -#include <iostream>
          -#include <vtkPiecewiseFunction.h>
          -#include <vtkSmartPointer.h>
          -#include <vtkSmartVolumeMapper.h>
          -#include <vtkVolumeProperty.h>
          -#include <vtkVolume.h>
          -#include <vtkXMLImageDataWriter.h>
          -#include <vtkColorTransferFunction.h>
          -#include <vtkOutlineFilter.h>
          -#include <vtkXMLImageDataReader.h>
          -#include <vtkXMLStructuredGridReader.h>
          -#include <vtkCellDataToPointData.h>
          -#include <vtkXMLStructuredGridWriter.h>
          -#include <vtkXMLUnstructuredGridReader.h>
          -#include <vtkUnstructuredGrid.h>
          -#include <vtkXMLUnstructuredGridWriter.h>
          -#include <vtkRenderer.h>
          -#include <vtkRenderWindow.h>
          -#include <vtkRenderWindowInteractor.h>
          -#include <vtkInteractorStyleTrackballCamera.h>
          -#include <vtkPolyDataMapper.h>
          -#include <vtkActor.h>
          -#include <vtkProperty.h>
          -#include "distributions/gaussian.h"
          -#include "distributions/distribution.h"
          -#include "io/file_reader.h"
          -#include "io/file_writer.h"
          -#include "io/path.h"
          -#include "vtk/vtk_common.h"
          -#include "vtk/eddaRandomProbeFilter.h"
          -#include "vtk/eddaRandomSampleField.h"
          -
          - - - - - -

          -Functions

          vtkSmartPointer< vtkDataSet > process_vtk_file (string &vtk_file, string &source_file)
           
          int main (int argc, char **argv)
           
          -

          Function Documentation

          - -
          -
          - - - - - - - - - - - - - - - - - - -
          int main (int argc,
          char ** argv 
          )
          -
          - -
          -
          - -
          -
          - - - - - - - - - - - - - - - - - - -
          vtkSmartPointer<vtkDataSet> process_vtk_file (string & vtk_file,
          string & source_file 
          )
          -
          - -
          -
          -
          - - - - diff --git a/html/random__sample__field_8h.html b/html/random__sample__field_8h.html deleted file mode 100644 index 8647558..0000000 --- a/html/random__sample__field_8h.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -EDDA: src/filters/random_sample_field.h File Reference - - - - - - - - - -
          -
          - - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          - -
          -
          random_sample_field.h File Reference
          -
          -
          -
          #include <thrust/iterator/zip_iterator.h>
          -#include <thrust/iterator/transform_iterator.h>
          -#include "common.h"
          -#include "core/thrust_common.h"
          -#include "distributions/variant.h"
          -#include "distributions/gaussian_mixture.h"
          -
          -

          Go to the source code of this file.

          - - - - -

          -Classes

          struct  edda::detail::GetSample_functor
           
          - - - - - - -

          -Namespaces

           edda
           Experimental functionality.
           
           edda::detail
           
          - - - - -

          -Functions

          template<class InputIterator , class OutputIterator >
          void edda::randomSampleField (InputIterator begin, InputIterator end, OutputIterator out)
           
          -
          - - - - diff --git a/html/random__sample__field_8h_source.html b/html/random__sample__field_8h_source.html deleted file mode 100644 index 6ab8c6c..0000000 --- a/html/random__sample__field_8h_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -EDDA: src/filters/random_sample_field.h Source File - - - - - - - - - -
          -
          - - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          -
          -
          random_sample_field.h
          -
          -
          -Go to the documentation of this file.
          1 #ifndef RANDOM_SAMPLE_FIELD
          -
          2 #define RANDOM_SAMPLE_FIELD
          -
          3 
          -
          4 #include <thrust/iterator/zip_iterator.h>
          -
          5 #include <thrust/iterator/transform_iterator.h>
          -
          6 #include "common.h"
          -
          7 #include "core/thrust_common.h"
          - - -
          10 
          -
          11 namespace edda {
          -
          12 
          -
          13 namespace detail {
          - -
          19  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
          -
          20  __host__ __device__
          -
          21  double operator() (thrust::tuple<Dist, thrust::default_random_engine> &tuple)
          -
          22  {
          -
          23  Dist &dist = thrust::get<0>(tuple);
          -
          24  return dist::getSample(dist, thrust::get<1>(tuple));
          -
          25  }
          -
          26  };
          -
          27 } // namespace detail
          -
          28 
          -
          32 template <class InputIterator, class OutputIterator>
          -
          33 void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
          -
          34 {
          -
          35  static int seed ;
          -
          36  seed += time(NULL) % 10000;
          -
          37  int n = end-begin;
          -
          38  thrust::transform( thrust::make_zip_iterator(thrust::make_tuple(begin, randomEngineIterator(seed)) ) ,
          -
          39  thrust::make_zip_iterator(thrust::make_tuple(end, randomEngineIterator(seed+n)) ),
          - -
          41  seed += n;
          -
          42 }
          -
          43 
          -
          44 } // edda
          -
          45 
          -
          46 #endif // RANDOM_SAMPLE_FIELD
          -
          void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
          Definition: random_sample_field.h:33
          -
          __host__ __device__ double operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)
          Definition: random_sample_field.h:21
          - - -
          __host__ double getSample(const Gaussian &dist)
          Return a random sample.
          Definition: gaussian.h:73
          -
          Definition: random_sample_field.h:14
          - -
          thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator(int seed)
          randomEngineIterator creates a Thrust default random engine with a given seed
          Definition: thrust_common.h:59
          - -
          - - - - diff --git a/html/random__sampling__iterator_8h.html b/html/random__sampling__iterator_8h.html index 907588f..307de0d 100644 --- a/html/random__sampling__iterator_8h.html +++ b/html/random__sampling__iterator_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/iterators/random_sampling_iterator.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,18 +66,18 @@
          random_sampling_iterator.h File Reference
          -
          #include <thrust/iterator/iterator_adaptor.h>
          -#include "common.h"
          -#include "core/thrust_common.h"
          -#include "core/ndarray.h"
          +
          #include <thrust/iterator/iterator_adaptor.h>
          +#include "common.h"
          +#include "core/thrust_common.h"
          +#include "core/ndarray.h"

          Go to the source code of this file.

          diff --git a/html/random__sampling__iterator_8h_source.html b/html/random__sampling__iterator_8h_source.html index 57f48c0..84412d5 100644 --- a/html/random__sampling__iterator_8h_source.html +++ b/html/random__sampling__iterator_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/iterators/random_sampling_iterator.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,52 +66,9 @@
          random_sampling_iterator.h
          -Go to the documentation of this file.
          1 #ifndef NDARRAY_ITERATOR
          -
          2 #define NDARRAY_ITERATOR
          -
          3 
          -
          4 #include <thrust/iterator/iterator_adaptor.h>
          -
          5 #include "common.h"
          -
          6 #include "core/thrust_common.h"
          -
          7 #include "core/ndarray.h"
          -
          8 
          -
          9 namespace edda {
          -
          10 
          -
          11 template<typename T>
          -
          12 class ndarray_iterator
          -
          13  : public thrust::iterator_adaptor<
          -
          14  ndarray_iterator<T>, // the first template parameter is the name of the iterator we're creating
          -
          15  Iterator // the second template parameter is the name of the iterator we're adapting
          -
          16  // we can use the default for the additional template parameters
          -
          17  >
          -
          18 {
          -
          19  public:
          -
          20  // shorthand for the name of the iterator_adaptor we're deriving from
          -
          21  typedef thrust::iterator_adaptor<
          -
          22  repeat_iterator<Iterator>,
          -
          23  Iterator
          -
          24  > super_t;
          -
          25  __host__ __device__
          -
          26  repeat_iterator(const Iterator &x, int n) : super_t(x), begin(x), n(n) {}
          -
          27  // befriend thrust::iterator_core_access to allow it access to the private interface below
          -
          28  friend class thrust::iterator_core_access;
          -
          29  private:
          -
          30  // repeat each element of the adapted range n times
          -
          31  unsigned int n;
          -
          32  // used to keep track of where we began
          -
          33  const Iterator begin;
          -
          34  // it is private because only thrust::iterator_core_access needs access to it
          -
          35  __host__ __device__
          -
          36  typename super_t::reference dereference() const
          -
          37  {
          -
          38  return *(begin + (this->base() - begin) / n);
          -
          39  }
          -
          40 };
          -
          41 
          -
          42 
          -
          43 
          -
          44 #endif // NDARRAY_ITERATOR
          - +Go to the documentation of this file.
          1 #ifndef NDARRAY_ITERATOR
          2 #define NDARRAY_ITERATOR
          3 
          4 #include <thrust/iterator/iterator_adaptor.h>
          5 #include "common.h"
          6 #include "core/thrust_common.h"
          7 #include "core/ndarray.h"
          8 
          9 namespace edda {
          10 
          11 template<typename T>
          12 class ndarray_iterator
          13  : public thrust::iterator_adaptor<
          14  ndarray_iterator<T>, // the first template parameter is the name of the iterator we're creating
          15  Iterator // the second template parameter is the name of the iterator we're adapting
          16  // we can use the default for the additional template parameters
          17  >
          18 {
          19  public:
          20  // shorthand for the name of the iterator_adaptor we're deriving from
          21  typedef thrust::iterator_adaptor<
          22  repeat_iterator<Iterator>,
          23  Iterator
          24  > super_t;
          25  __host__ __device__
          26  repeat_iterator(const Iterator &x, int n) : super_t(x), begin(x), n(n) {}
          27  // befriend thrust::iterator_core_access to allow it access to the private interface below
          28  friend class thrust::iterator_core_access;
          29  private:
          30  // repeat each element of the adapted range n times
          31  unsigned int n;
          32  // used to keep track of where we began
          33  const Iterator begin;
          34  // it is private because only thrust::iterator_core_access needs access to it
          35  __host__ __device__
          36  typename super_t::reference dereference() const
          37  {
          38  return *(begin + (this->base() - begin) / n);
          39  }
          40 };
          41 
          42 
          43 
          44 #endif // NDARRAY_ITERATOR
          Experimental functionality.
          Definition: distributionModeler.h:26
          __host__ __device__ repeat_iterator(const Iterator &x, int n)
          Definition: ndarray_iterator.h:27
          +
          friend class thrust::iterator_core_access
          Definition: ndarray_iterator.h:29
          thrust::iterator_adaptor< repeat_iterator< Iterator >, Iterator > super_t
          Definition: ndarray_iterator.h:25
          @@ -143,9 +76,9 @@
          diff --git a/html/search/all_0.html b/html/search/all_0.html index 17b6da8..4359463 100644 --- a/html/search/all_0.html +++ b/html/search/all_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_0.js b/html/search/all_0.js index 923592e..5d67b01 100644 --- a/html/search/all_0.js +++ b/html/search/all_0.js @@ -1,11 +1,14 @@ var searchData= [ ['_5fgetcdf',['_getCdf',['../structedda_1_1dist_1_1detail_1_1__getCdf.html',1,'edda::dist::detail']]], - ['_5fgetcdf',['_getCdf',['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a6843ed99941c43cd8750cf2100330dc3',1,'edda::dist::detail::_getCdf']]], + ['_5fgetjointmean',['_getJointMean',['../structedda_1_1dist_1_1detail_1_1__getJointMean.html',1,'edda::dist::detail']]], + ['_5fgetjointpdf',['_getJointPdf',['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html',1,'edda::dist::detail']]], + ['_5fgetjointsample',['_getJointSample',['../structedda_1_1dist_1_1detail_1_1__getJointSample.html',1,'edda::dist::detail']]], ['_5fgetmean',['_getMean',['../structedda_1_1dist_1_1detail_1_1__getMean.html',1,'edda::dist::detail']]], - ['_5fgetpdf',['_getPdf',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#aa062a26f3dc8d025121022f4f9bdcd97',1,'edda::dist::detail::_getPdf']]], + ['_5fgetname',['_getName',['../structedda_1_1dist_1_1detail_1_1__getName.html',1,'edda::dist::detail']]], ['_5fgetpdf',['_getPdf',['../structedda_1_1dist_1_1detail_1_1__getPdf.html',1,'edda::dist::detail']]], ['_5fgetsample',['_getSample',['../structedda_1_1dist_1_1detail_1_1__getSample.html',1,'edda::dist::detail']]], ['_5fgetvar',['_getVar',['../structedda_1_1dist_1_1detail_1_1__getVar.html',1,'edda::dist::detail']]], - ['_5fvariant',['_Variant',['../namespaceedda_1_1dist.html#a7ed6bf19ce7888ad2ee8bd4eb1d867f8',1,'edda::dist']]] + ['_5fuse_5fmath_5fdefines',['_USE_MATH_DEFINES',['../gaussian_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): gaussian.h'],['../joint__gaussian_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): joint_gaussian.h'],['../joint__histogram_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): joint_histogram.h']]], + ['_5fvariant',['_Variant',['../namespaceedda_1_1dist.html#a52b3d75b36bc599929d7970e9383c0f2',1,'edda::dist']]] ]; diff --git a/html/search/all_1.html b/html/search/all_1.html index e290644..bc87ea8 100644 --- a/html/search/all_1.html +++ b/html/search/all_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_1.js b/html/search/all_1.js index ff325a2..57c8455 100644 --- a/html/search/all_1.js +++ b/html/search/all_1.js @@ -1,16 +1,19 @@ var searchData= [ - ['abstract_5fdata_5farray_2eh',['abstract_data_array.h',['../abstract__data__array_8h.html',1,'']]], - ['abstract_5fsampling_5farray_2eh',['abstract_sampling_array.h',['../abstract__sampling__array_8h.html',1,'']]], - ['abstractdataarray',['AbstractDataArray',['../classedda_1_1AbstractDataArray.html',1,'edda']]], - ['allocate',['Allocate',['../classvtkSamplingArray.html#a346bf9fea7b4774992a9671dff8cf458',1,'vtkSamplingArray::Allocate()'],['../classeddaSamplingArray.html#a917f0e4abe5eb584b1460e1c9d39efe4',1,'eddaSamplingArray::Allocate()']]], + ['adaptive_5fvertex_5fcell_5fwalk',['adaptive_vertex_cell_walk',['../classedda_1_1CurvilinearGrid.html#a2ac31ae9685dede3583cfd17b4e88ed4',1,'edda::CurvilinearGrid']]], + ['addvtkgmmarrays',['addVtkGmmArrays',['../namespaceedda.html#a48211faeadb7b6b1295d3ef3c53bde17',1,'edda']]], + ['addvtkhistoarrays',['addVtkHistoArrays',['../namespaceedda.html#aa0210106832c1fa8123f74c671c82e58',1,'edda']]], + ['allocate',['Allocate',['../classeddaSamplingArray.html#a917f0e4abe5eb584b1460e1c9d39efe4',1,'eddaSamplingArray']]], ['approx_5fequal',['approx_equal',['../test__common_8h.html#a68842a038cb91a47ccb1f03de6cfc4c0',1,'test_common.h']]], - ['array',['array',['../classedda_1_1DataSamplingArray.html#add60cf9f9b32583645e42aef99d96ca0',1,'edda::DataSamplingArray::array()'],['../classedda_1_1ScalarArray.html#a3f18a060b5cac5e110bf9687e0720b03',1,'edda::ScalarArray::array()'],['../classedda_1_1VectorArray.html#a65929b542b0a1b1d35e9f7af8ac3c690',1,'edda::VectorArray::array()']]], + ['array',['array',['../classedda_1_1ScalarDistrArray.html#af14704b6796513e744fde185226132b8',1,'edda::ScalarDistrArray::array()'],['../classedda_1_1VectorDistrArray.html#a167fecce5d4dfcf8288d9c23ba5c5264',1,'edda::VectorDistrArray::array()'],['../classedda_1_1JointDistrArray.html#aad8819cabc65d140d4d16e31e980b60f',1,'edda::JointDistrArray::array()']]], ['arrays',['arrays',['../classedda_1_1GmmVtkDataArray.html#a76c34511771f4c4932782fa649c69df1',1,'edda::GmmVtkDataArray']]], - ['assign',['assign',['../classedda_1_1dist_1_1GaussianMixture.html#a17d607517f480dc263f56d9aa458102c',1,'edda::dist::GaussianMixture']]], - ['at_5fcomp',['at_comp',['../classedda_1_1Dataset.html#a1bc76a28b31c0590043d5a8372b5b810',1,'edda::Dataset']]], - ['at_5fphys',['at_phys',['../classedda_1_1Dataset.html#a885f84a2a2de16d496ee003c859def8a',1,'edda::Dataset']]], - ['at_5fvertex',['at_vertex',['../classedda_1_1Grid.html#a2df64d91c52a5a6790b24eeb70bb9bb2',1,'edda::Grid::at_vertex()'],['../classedda_1_1CartesianGrid.html#a5113fab2e80988b778151608e42ae4da',1,'edda::CartesianGrid::at_vertex()'],['../classedda_1_1RegularCartesianGrid.html#a27fcba8a9def09d616fe20f30b38fec6',1,'edda::RegularCartesianGrid::at_vertex()']]], + ['assign',['assign',['../classedda_1_1dist_1_1GaussianMixture.html#ace459f5fa7ac233bc5ca3c713f4f82b4',1,'edda::dist::GaussianMixture']]], + ['assigngrid',['assignGrid',['../classedda_1_1DistributionModeler.html#ac58d871bc15eff4fa66cb31646ba2292',1,'edda::DistributionModeler::assignGrid()'],['../classedda_1_1VecDistrModeler.html#a8df86623db04cb419b0cf3fff0badfe1',1,'edda::VecDistrModeler::assignGrid()']]], + ['at_5fcomp',['at_comp',['../classedda_1_1Dataset.html#a5af9671298bb2caa13dcbaaebc508c07',1,'edda::Dataset']]], + ['at_5fcomp_5fdistr',['at_comp_distr',['../classedda_1_1Dataset.html#ad17d6a2478d61429c399aef7d2d84ded',1,'edda::Dataset']]], + ['at_5fcomp_5fdistr_5fvector',['at_comp_distr_vector',['../classedda_1_1Dataset.html#a31ac5c14c35d9cb4570782a6f57d899c',1,'edda::Dataset']]], + ['at_5fphys',['at_phys',['../classedda_1_1CurvilinearGrid.html#a2acd425f15acd55f64f3fa860043af12',1,'edda::CurvilinearGrid::at_phys()'],['../classedda_1_1Dataset.html#a65d909dd1c68ce077846625f8b3ad400',1,'edda::Dataset::at_phys()']]], + ['at_5fvertex',['at_vertex',['../classedda_1_1CurvilinearGrid.html#adb2ec7686ea2b49d3379b5946da6a419',1,'edda::CurvilinearGrid::at_vertex()'],['../classedda_1_1Grid.html#a2df64d91c52a5a6790b24eeb70bb9bb2',1,'edda::Grid::at_vertex()'],['../classedda_1_1CartesianGrid.html#a5113fab2e80988b778151608e42ae4da',1,'edda::CartesianGrid::at_vertex()'],['../classedda_1_1RegularCartesianGrid.html#a27fcba8a9def09d616fe20f30b38fec6',1,'edda::RegularCartesianGrid::at_vertex()']]], ['authors_2emd',['AUTHORS.md',['../AUTHORS_8md.html',1,'']]], ['authors',['AUTHORS',['../md_AUTHORS.html',1,'']]] ]; diff --git a/html/search/all_10.html b/html/search/all_10.html index c55c836..16ffd9a 100644 --- a/html/search/all_10.html +++ b/html/search/all_10.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_10.js b/html/search/all_10.js index 4fe0163..7a758ed 100644 --- a/html/search/all_10.js +++ b/html/search/all_10.js @@ -1,39 +1,26 @@ var searchData= [ - ['sampledataarray',['SampleDataArray',['../classeddaRandomSampleField.html#a59d9a1ce75be572a5fc56a9aa1765f72',1,'eddaRandomSampleField']]], - ['samples',['SAMPLES',['../streamlineMonteCarlo_8cpp.html#a3c63a827daaf7041222aa1fe6a8d9630',1,'streamlineMonteCarlo.cpp']]], - ['scalararray',['ScalarArray',['../classedda_1_1ScalarArray.html',1,'edda']]], - ['scalararray',['ScalarArray',['../classedda_1_1ScalarArray.html#a4e412ae1e9ab6d18df7f13a4105f4a73',1,'edda::ScalarArray']]], - ['seeds',['seeds',['../test__vtk__pipeline_8cpp.html#aa06dd1fc53f3ad746591a32d79457e9b',1,'test_vtk_pipeline.cpp']]], - ['selfdeviceptr',['SelfDevicePtr',['../classedda_1_1NdArray.html#aeee148104912a94ae7f9a52ddbf6b632',1,'edda::NdArray']]], - ['set',['set',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd2833a76c0753e6766b4abeaffbb4c5',1,'edda::Vector< Real, 3 >::set()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ac225598517bc52939096bd6fd54023ce',1,'edda::Vector< Real, 4 >::set()']]], - ['set_5fownership',['set_ownership',['../classedda_1_1NdArray.html#a3f871df765d4dbe7d026c93ac0c28f4e',1,'edda::NdArray::set_ownership(bool own)'],['../classedda_1_1NdArray.html#a0cec1d5f0c34d1f44c8203bdb62b68e3',1,'edda::NdArray::set_ownership(bool own)']]], - ['set_5fval',['set_val',['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray::set_val(const std::initializer_list< int > &ind, const Type &val)'],['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray::set_val(const std::initializer_list< int > &ind, const Type &val)']]], - ['setboundary',['setBoundary',['../classedda_1_1Grid.html#af3650ba5e9f2eedecadd0cafad4798a3',1,'edda::Grid::setBoundary()'],['../classedda_1_1CartesianGrid.html#a955ac477d9f7f95b6142a4cc97605c74',1,'edda::CartesianGrid::setBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a005accc847e5455e57f4e523e7b99bd6',1,'edda::RegularCartesianGrid::setBoundary()']]], - ['seteddaarray',['SetEddaArray',['../classvtkSamplingArray.html#a1d074a513450ea7c608de1b3232e708e',1,'vtkSamplingArray::SetEddaArray()'],['../classeddaSamplingArray.html#a410b3a8d21e3ed91110da7da99f93c78',1,'eddaSamplingArray::SetEddaArray()']]], - ['setitem',['setItem',['../classedda_1_1AbstractDataArray.html#aade6731b6b68fb94fe2369eba637d43b',1,'edda::AbstractDataArray::setItem()'],['../classedda_1_1DataSamplingArray.html#a4bbc69bc61d7ea504160a1c4f9631aec',1,'edda::DataSamplingArray::setItem()'],['../classedda_1_1ScalarArray.html#a5e8fb8dae54a82a9996dd43c2068c69c',1,'edda::ScalarArray::setItem()'],['../classedda_1_1VectorArray.html#a0e5cf62545fbeb841f3796714e1cb5a2',1,'edda::VectorArray::setItem()'],['../classedda_1_1GmmVtkDataArray.html#a72d14608d2fd1081d9597241768ebf1c',1,'edda::GmmVtkDataArray::setItem()']]], - ['setnumberoftuples',['SetNumberOfTuples',['../classvtkSamplingArray.html#ae71726d544c6a80683bb5fcfb218690f',1,'vtkSamplingArray::SetNumberOfTuples()'],['../classeddaSamplingArray.html#a227706ad000143370b166318ed20bcfc',1,'eddaSamplingArray::SetNumberOfTuples()']]], - ['setrealboundary',['setRealBoundary',['../classedda_1_1CartesianGrid.html#abe9b85a02f3cc95d6b3aea12bb54e1f9',1,'edda::CartesianGrid::setRealBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a837950c49d82ec89ecc79181ca2de390',1,'edda::RegularCartesianGrid::setRealBoundary()']]], - ['setsourceconnection',['SetSourceConnection',['../classeddaRandomProbeFilter.html#a071d5410a123cb241996c6f35c90a3f1',1,'eddaRandomProbeFilter']]], - ['setsourcedata',['SetSourceData',['../classeddaRandomProbeFilter.html#a025f0fa555ac54d677ba01e75aeec66c',1,'eddaRandomProbeFilter']]], - ['settuple',['SetTuple',['../classvtkSamplingArray.html#a5b16fa81ca007e9d58e6a9d0ac99b3c1',1,'vtkSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a71ca0c7dff87d5e941dd005c4ec04e36',1,'vtkSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classvtkSamplingArray.html#ab0fe7b7e689182222f389913cff15628',1,'vtkSamplingArray::SetTuple(vtkIdType i, const double *tuple)'],['../classeddaSamplingArray.html#a95e56e923f0e3c0d379355253836a24c',1,'eddaSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a66a463aa54a151e7ed6c76693ead3978',1,'eddaSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#ac7949700cfa4662839a696b873742dd5',1,'eddaSamplingArray::SetTuple(vtkIdType i, const double *tuple)']]], - ['setvariantvalue',['SetVariantValue',['../classvtkSamplingArray.html#a786eb5b49b05b860c4d2cc0e48f3a115',1,'vtkSamplingArray::SetVariantValue()'],['../classeddaSamplingArray.html#ae71b18bac49013fc99530e4f9148210c',1,'eddaSamplingArray::SetVariantValue()']]], - ['setvoidarray',['SetVoidArray',['../classvtkSamplingArray.html#a339b8ef1d6ab9bb42774bedbbe3bb1be',1,'vtkSamplingArray::SetVoidArray()'],['../classeddaSamplingArray.html#a7759fff2d32c5d9b73ade5c0df174614',1,'eddaSamplingArray::SetVoidArray()']]], - ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html',1,'edda']]], - ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html#af338c5a848dfbde825c9520c5ba0a959',1,'edda::shared_ary::shared_ary()'],['../classedda_1_1shared__ary.html#a6164ce3cb376ee64e5b819f3b2eb1f7e',1,'edda::shared_ary::shared_ary(T *p, size_t n_)'],['../classedda_1_1shared__ary.html#a87a4d8eface1debf626881862ced62e4',1,'edda::shared_ary::shared_ary(size_t n_)']]], - ['shared_5fary_2eh',['shared_ary.h',['../shared__ary_8h.html',1,'']]], - ['shared_5fary_3c_20edda_3a_3avector_3c_20t_2c_20n_20_3e_20_3e',['shared_ary< edda::Vector< T, N > >',['../classedda_1_1shared__ary.html',1,'edda']]], - ['spatialmatch',['SpatialMatch',['../classeddaRandomProbeFilter.html#a67455f5653d93d03bcabde2231146757',1,'eddaRandomProbeFilter']]], - ['squeeze',['Squeeze',['../classvtkSamplingArray.html#a830c16cdac1fa0275e8d67ea9a4115ee',1,'vtkSamplingArray::Squeeze()'],['../classeddaSamplingArray.html#abeb4a46753f12abc8cce6c81e7a89200',1,'eddaSamplingArray::Squeeze()']]], - ['statistics_2eh',['statistics.h',['../statistics_8h.html',1,'']]], - ['step_5fsize',['step_size',['../classedda_1_1StreamTracer.html#ae5c09740fd4e418cc480fa9fa40ec50a',1,'edda::StreamTracer']]], - ['stream_5ftracer_2eh',['stream_tracer.h',['../stream__tracer_8h.html',1,'']]], - ['streamlinegaussianvtk_2ecpp',['streamlineGaussianVTK.cpp',['../streamlineGaussianVTK_8cpp.html',1,'']]], - ['streamlinemontecarlo_2ecpp',['streamlineMonteCarlo.cpp',['../streamlineMonteCarlo_8cpp.html',1,'']]], - ['streamlines',['streamlines',['../streamlineGaussianVTK_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlines(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlines(): streamlineMonteCarlo.cpp']]], - ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html',1,'edda']]], - ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html#afd2a7cb908f8ab75b54abccf49206645',1,'edda::StreamTracer::StreamTracer()'],['../streamlineGaussianVTK_8cpp.html#a28d57910e2cb285650456eea5857c3c0',1,'streamTracer(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a04bae7717e99d67c4ec9eb691c271bb5',1,'streamTracer(): streamlineMonteCarlo.cpp']]], - ['success',['SUCCESS',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716a530eabd3f34ef67fe4ab833f2bae1622',1,'edda']]], - ['super_5ft',['super_t',['../classedda_1_1ndarray__iterator.html#af10246b4a1530457d9ac30f1a897df6c',1,'edda::ndarray_iterator']]], - ['swap',['swap',['../classedda_1_1shared__ary.html#a79f7586a6e2ea57698ab940a629e340d',1,'edda::shared_ary']]] + ['p',['p',['../structedda_1_1dist_1_1GMMTuple.html#a5feb8eb1f4ab6490cad0f7accceac426',1,'edda::dist::GMMTuple']]], + ['parray',['pArray',['../classedda_1_1Dataset.html#a2d6ffd6ccd2e511740db0c2864d2c2fd',1,'edda::Dataset']]], + ['passattributedata',['PassAttributeData',['../classeddaRandomProbeFilter.html#a1db9d2255338950cd660590feab426a2',1,'eddaRandomProbeFilter']]], + ['passcellarrays',['PassCellArrays',['../classeddaRandomProbeFilter.html#ae63da6f5fc1ea74ad47ccc58b219726a',1,'eddaRandomProbeFilter']]], + ['passfieldarrays',['PassFieldArrays',['../classeddaRandomProbeFilter.html#a300608995e2abb9325753bd6a67b8ca2',1,'eddaRandomProbeFilter']]], + ['passpointarrays',['PassPointArrays',['../classeddaRandomProbeFilter.html#a8e654d8f86c9f53558313a408a0d41a8',1,'eddaRandomProbeFilter']]], + ['path_2ecpp',['path.cpp',['../path_8cpp.html',1,'']]], + ['path_2eh',['path.h',['../path_8h.html',1,'']]], + ['pbitmapfileheader',['PBITMAPFILEHEADER',['../bmp__image_8h.html#ad416d6889f9e54036d81a3ccb3461290',1,'bmp_image.h']]], + ['pbitmapinfoheader',['PBITMAPINFOHEADER',['../bmp__image_8h.html#a17a11cc369b8290d453bd4b23334a3bf',1,'bmp_image.h']]], + ['pgrid',['pGrid',['../classedda_1_1Dataset.html#a8a71a86531d1f159cebe2971b0039560',1,'edda::Dataset']]], + ['phycoord',['phyCoord',['../structedda_1_1PointInfo.html#a4c6cffc07aa2bde86bfae400ea723b8a',1,'edda::PointInfo']]], + ['phys_5fto_5fcell',['phys_to_cell',['../classedda_1_1CurvilinearGrid.html#a52535b4d70f9155f552246d1289908ba',1,'edda::CurvilinearGrid::phys_to_cell()'],['../classedda_1_1Grid.html#a3ef6ca899ea32fe1eed621898a7095d1',1,'edda::Grid::phys_to_cell()'],['../classedda_1_1CartesianGrid.html#a7b596e7a80dd4a534a37a53dd0e4ddf8',1,'edda::CartesianGrid::phys_to_cell()'],['../classedda_1_1RegularCartesianGrid.html#ac60d9f13f178104274c497034703467d',1,'edda::RegularCartesianGrid::phys_to_cell()']]], + ['phys_5fto_5fcomp_5fcoords',['phys_to_comp_coords',['../classedda_1_1CurvilinearGrid.html#a2b261eb7f7113a6f6a9bdc33f9db02c9',1,'edda::CurvilinearGrid']]], + ['pi_5fby_5f2',['PI_BY_2',['../namespaceedda.html#a6a021411c1f74214e17e1150d8f4079c',1,'edda']]], + ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html',1,'edda']]], + ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html#acc2731dc3751bdba37d8d0ca2f306134',1,'edda::PointInfo::PointInfo()'],['../structedda_1_1PointInfo.html#a81fd3d6e757c85db78cea4516f9f9eb9',1,'edda::PointInfo::PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)'],['../namespaceedda.html#a943d0c00e55b9d2ca21b97d3b218993d',1,'edda::PointInfo()']]], + ['pointlist',['PointList',['../classeddaRandomProbeFilter.html#aa6f3755de01f1a75885cf25ec3693ab1',1,'eddaRandomProbeFilter']]], + ['polygon',['POLYGON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea2d3cdf5619d0d548ffefff873d913140',1,'edda']]], + ['prefix',['Prefix',['../classeddaRandomSampleField.html#a768de28149cff3a3a8973ab561d72da3',1,'eddaRandomSampleField']]], + ['probe',['Probe',['../classeddaRandomProbeFilter.html#a857b5eb5c460a6c34631562da0950cc9',1,'eddaRandomProbeFilter']]], + ['probeemptypoints',['ProbeEmptyPoints',['../classeddaRandomProbeFilter.html#a35b379341a6f89f6ca7c3b15128ba1b7',1,'eddaRandomProbeFilter']]], + ['process_5fvtk_5ffile',['process_vtk_file',['../fuzzyIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): fuzzyIsocontourVTK.cpp'],['../randomSampleField_8cpp.html#a88f42db7844dfd6059a18e35f95d4130',1,'process_vtk_file(string &vtk_file, string &source_file): randomSampleField.cpp'],['../uncertainIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): uncertainIsocontourVTK.cpp']]] ]; diff --git a/html/search/all_11.html b/html/search/all_11.html index 6f3943a..d689820 100644 --- a/html/search/all_11.html +++ b/html/search/all_11.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_11.js b/html/search/all_11.js index d86b578..869e83e 100644 --- a/html/search/all_11.js +++ b/html/search/all_11.js @@ -1,68 +1,4 @@ var searchData= [ - ['iterator_5fcore_5faccess',['iterator_core_access',['../classedda_1_1ndarray__iterator.html#a3c5d767e643bbf0d93d71b9a37c4b8a3',1,'edda::ndarray_iterator']]], - ['take',['take',['../classedda_1_1NdArray.html#a37a403de9db8176d39b5fd515a4d1d01',1,'edda::NdArray']]], - ['td_5fbackward',['TD_BACKWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1eaf625f13a06c072f78a07c6e8227250dc',1,'edda']]], - ['td_5fforward',['TD_FORWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1ea0415d5460bee3431708f967a58b00ae8',1,'edda']]], - ['test',['TEST',['../test__common_8h.html#af471db13ecaac3935fc460845124f486',1,'test_common.h']]], - ['test_5farray_2ecpp',['test_array.cpp',['../test__array_8cpp.html',1,'']]], - ['test_5fcommon_2eh',['test_common.h',['../test__common_8h.html',1,'']]], - ['test_5fgaussian_2ecpp',['test_gaussian.cpp',['../test__gaussian_8cpp.html',1,'']]], - ['test_5fndarray_2ecpp',['test_NdArray.cpp',['../test__NdArray_8cpp.html',1,'']]], - ['test_5fthreshold',['test_threshold',['../test__vtk__filters_8cpp.html#a2efb78dd152ccb27aa7c6a40aa5afaf3',1,'test_vtk_filters.cpp']]], - ['test_5fthrust_2ecpp',['test_thrust.cpp',['../test__thrust_8cpp.html',1,'']]], - ['test_5fvariant',['test_variant',['../test__variant_8cpp.html#aa9d40b1984ca033b3ea9e97993c3858a',1,'test_variant.cpp']]], - ['test_5fvariant_2ecpp',['test_variant.cpp',['../test__variant_8cpp.html',1,'']]], - ['test_5fvtk_5ffilters_2ecpp',['test_vtk_filters.cpp',['../test__vtk__filters_8cpp.html',1,'']]], - ['test_5fvtk_5fpipeline_2ecpp',['test_vtk_pipeline.cpp',['../test__vtk__pipeline_8cpp.html',1,'']]], - ['test_5fvtkeddareader_2ecpp',['test_vtkEddaReader.cpp',['../test__vtkEddaReader_8cpp.html',1,'']]], - ['tetrahedron',['TETRAHEDRON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea20602774a5b3a8ff1145bcd0ca59ec8c',1,'edda']]], - ['tetralerp',['tetraLerp',['../namespaceedda.html#a695a7e0efb2ab6affdc20001192c0006',1,'edda']]], - ['thresholdbetween',['ThresholdBetween',['../classeddaThreshold.html#aab5d54fee0ccb2cd1116a87a41f17f7b',1,'eddaThreshold']]], - ['thresholdbylower',['ThresholdByLower',['../classeddaThreshold.html#a02a56991ed507396e580e609de2a17ef',1,'eddaThreshold']]], - ['thresholdbyupper',['ThresholdByUpper',['../classeddaThreshold.html#abb1baf518917bf90f6666a0c309fd165',1,'eddaThreshold']]], - ['thrust_5fcommon_2eh',['thrust_common.h',['../thrust__common_8h.html',1,'']]], - ['to_5feuler',['TO_EULER',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da95e35f89507c7491563bd104f3fc3d93',1,'edda']]], - ['to_5frk2',['TO_RK2',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da2688e6dda77917b5d1244fbb87a040cb',1,'edda']]], - ['to_5frk4',['TO_RK4',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034dad96fc7dc216bd2f2507d30f3d9e6172f',1,'edda']]], - ['to_5frk45',['TO_RK45',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da8f2955b09f2eb97a1432225998b8eb4d',1,'edda']]], - ['tolerance',['Tolerance',['../classeddaRandomProbeFilter.html#a3fccd47c6c7b04a5039392eb6c6f9c3f',1,'eddaRandomProbeFilter']]], - ['tracedir',['TraceDir',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1e',1,'edda']]], - ['traceord',['TraceOrd',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034d',1,'edda']]], - ['tri_5flerp',['TRI_LERP',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781ab1bf76c70fe926145cc62335d104c288',1,'edda']]], - ['triangle',['TRIANGLE',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea3c1078d5ad96f5762e321e34fd9a8359',1,'edda']]], - ['trilerp',['triLerp',['../namespaceedda.html#ae9734f47a623e06d20c371e010fe761e',1,'edda']]], - ['tuple',['Tuple',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple',['Tuple',['../classedda_1_1Tuple.html#a0474ff57c17e224def4b2ee2b2329e6d',1,'edda::Tuple::Tuple()'],['../classedda_1_1Tuple.html#a5ecb3290fd84a8f1b53ccb58371e7be9',1,'edda::Tuple::Tuple(const T &scalar)'],['../classedda_1_1Tuple.html#a69b581682e5c6fbe1930e5cd6ab647b1',1,'edda::Tuple::Tuple(const T *init)'],['../classedda_1_1Tuple.html#a60852e69ca7d6eb98283ea383cc5d0a8',1,'edda::Tuple::Tuple(const Tuple< U, N > &v)']]], - ['tuple_2eh',['tuple.h',['../tuple_8h.html',1,'']]], - ['tuple1',['Tuple1',['../structedda_1_1Tuple1.html',1,'edda']]], - ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html#a4b573e5df5a0dc3663e70e2f42fcdb55',1,'edda::Tuple2::Tuple2()'],['../structedda_1_1Tuple2.html#ac1af7bd6b37f5a601988f690527a05f2',1,'edda::Tuple2::Tuple2(const T &x, const T &y)']]], - ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html',1,'edda']]], - ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html',1,'edda']]], - ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html#af8f5cf58b185b2b2ef9d38161c518170',1,'edda::Tuple3::Tuple3()'],['../structedda_1_1Tuple3.html#a6cf42eb68b87ded412dd288ae5350e64',1,'edda::Tuple3::Tuple3(const T &x, const T &y, const T &z)']]], - ['tuple3_3c_20real_20_3e',['Tuple3< Real >',['../structedda_1_1Tuple3.html',1,'edda']]], - ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html#a518d7b0aed299710413edde9bfd2b792',1,'edda::Tuple4::Tuple4()'],['../structedda_1_1Tuple4.html#af0b36d1663eee09908560f9bfe9dce47',1,'edda::Tuple4::Tuple4(const T &x, const T &y, const T &z, const T &w)']]], - ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html',1,'edda']]], - ['tuple4_3c_20real_20_3e',['Tuple4< Real >',['../structedda_1_1Tuple4.html',1,'edda']]], - ['tuple5',['Tuple5',['../structedda_1_1Tuple5.html',1,'edda']]], - ['tuple6',['Tuple6',['../structedda_1_1Tuple6.html',1,'edda']]], - ['tuple7',['Tuple7',['../structedda_1_1Tuple7.html',1,'edda']]], - ['tuple8',['Tuple8',['../structedda_1_1Tuple8.html',1,'edda']]], - ['tuple9',['Tuple9',['../structedda_1_1Tuple9.html',1,'edda']]], - ['tuple_3c_20edda_3a_3adist_3a_3agmmtuple_2c_20gmms_20_3e',['Tuple< edda::dist::GMMTuple, GMMs >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20ndarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_203_20_3e',['Tuple< Real, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_204_20_3e',['Tuple< Real, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_20n_20_3e',['Tuple< Real, N >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_201_20_3e',['Tuple< T, 1 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_202_20_3e',['Tuple< T, 2 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_203_20_3e',['Tuple< T, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_204_20_3e',['Tuple< T, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_205_20_3e',['Tuple< T, 5 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_206_20_3e',['Tuple< T, 6 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_207_20_3e',['Tuple< T, 7 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_208_20_3e',['Tuple< T, 8 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_209_20_3e',['Tuple< T, 9 >',['../classedda_1_1Tuple.html',1,'edda']]] + ['quadrilateral_5fvertex',['quadrilateral_vertex',['../classedda_1_1CurvilinearGrid.html#af12b8985498423e4fd75768c1a5a5fce',1,'edda::CurvilinearGrid']]] ]; diff --git a/html/search/all_12.html b/html/search/all_12.html index 3c7c89e..698e2c5 100644 --- a/html/search/all_12.html +++ b/html/search/all_12.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_12.js b/html/search/all_12.js index 9e1117a..1366af7 100644 --- a/html/search/all_12.js +++ b/html/search/all_12.js @@ -1,9 +1,34 @@ var searchData= [ - ['ucgridphy2comp',['UCGridPhy2Comp',['../grid_8h.html#ad7352884ed931142171b2bbfc9849f59',1,'grid.h']]], - ['uncertain_5fisocontour_2ecpp',['uncertain_isocontour.cpp',['../uncertain__isocontour_8cpp.html',1,'']]], - ['uncertainisocontourvtk_2ecpp',['uncertainIsocontourVTK.cpp',['../uncertainIsocontourVTK_8cpp.html',1,'']]], - ['updateseeds',['updateSeeds',['../streamlineGaussianVTK_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'updateSeeds(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'updateSeeds(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): streamlineMonteCarlo.cpp']]], - ['upperthreshold',['UpperThreshold',['../classeddaThreshold.html#a24dd718cc876a3e20f07fe807c243498',1,'eddaThreshold']]], - ['usenullpoint',['UseNullPoint',['../classeddaRandomProbeFilter.html#a054974d60116bf5a9cbb59b23120bc8f',1,'eddaRandomProbeFilter']]] + ['rad_5fto_5fdeg',['RAD_TO_DEG',['../namespaceedda.html#aa2b6739b83019da1bc86858c266b6fb7',1,'edda']]], + ['rand',['Rand',['../structedda_1_1Rand.html',1,'edda']]], + ['random_5fsampling_5fiterator_2eh',['random_sampling_iterator.h',['../random__sampling__iterator_8h.html',1,'']]], + ['randomengineiterator',['randomEngineIterator',['../namespaceedda.html#a884e513bd5d79a76dd22cc63dd4c915e',1,'edda']]], + ['randomsamplefield',['randomSampleField',['../namespaceedda.html#a67f5f04842c5c70e606c714890d6999a',1,'edda']]], + ['randomsamplefield_2ecpp',['randomSampleField.cpp',['../randomSampleField_8cpp.html',1,'']]], + ['rangeofbin',['rangeOfBin',['../classedda_1_1dist_1_1Histogram.html#a1b545a7a369aa1d5a30027b8e9da54ef',1,'edda::dist::Histogram']]], + ['rawarraytype',['RawArrayType',['../classedda_1_1GmmVtkDataArray.html#a2e7db86742898d8e251c4e8c64bb66af',1,'edda::GmmVtkDataArray']]], + ['readgmmarray',['readGMMArray',['../namespaceedda.html#a1b7b73460dff3b4161a554d88e76b403',1,'edda']]], + ['readhistoarray',['readHistoArray',['../namespaceedda.html#a886a48d1c5a607af3f17cfb3cf21526d',1,'edda']]], + ['readimage',['readImage',['../structBMPImage.html#a41deba435e3a2e15d3a94d4f3869580b',1,'BMPImage']]], + ['readme_2emd',['README.md',['../README_8md.html',1,'']]], + ['real',['Real',['../namespaceedda.html#aaf50451f174934601d7a0c5a714f35ac',1,'edda']]], + ['realvaluewrapper',['RealValueWrapper',['../namespaceedda_1_1dist.html#a0463a1d2a03104f3478ce0359a34f45c',1,'edda::dist']]], + ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html',1,'edda']]], + ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a65429826eea71b490814fe9de5a49f8f',1,'edda::RegularCartesianGrid::RegularCartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1RegularCartesianGrid.html#a360d7cebde168cc3648709a64797513f',1,'edda::RegularCartesianGrid::RegularCartesianGrid()']]], + ['removefileextension',['removeFileExtension',['../namespaceedda.html#a89fb66cfd4f962f6851f8a907f7360fe',1,'edda::removeFileExtension(const string &filename)'],['../namespaceedda.html#acdd43f929df53649359f93dad75891f7',1,'edda::removeFileExtension(const std::string &filename)']]], + ['removefirsttuple',['RemoveFirstTuple',['../classeddaSamplingArray.html#a3ebcd0868580cf501ee09ae691e6bb32',1,'eddaSamplingArray']]], + ['removelasttuple',['RemoveLastTuple',['../classeddaSamplingArray.html#ae35ad87165232a83fe5ded43163fad09',1,'eddaSamplingArray']]], + ['removetuple',['RemoveTuple',['../classeddaSamplingArray.html#af53efdac4dd1d02550b5ad6e984a71dc',1,'eddaSamplingArray']]], + ['renwin',['renWin',['../streamlineMonteCarlo_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'streamlineMonteCarlo.cpp']]], + ['repeat_5fiterator',['repeat_iterator',['../classedda_1_1ndarray__iterator.html#a32b7b66b3a9c69c89d22a466edcb3fce',1,'edda::ndarray_iterator']]], + ['requestdata',['RequestData',['../classeddaRandomProbeFilter.html#a8c132c96d159621fda6b42fe0e73325d',1,'eddaRandomProbeFilter::RequestData()'],['../classeddaRandomSampleField.html#ad1e19e6f7b4e5a539580a7d84d56d17d',1,'eddaRandomSampleField::RequestData()'],['../classeddaThreshold.html#aff4eceff2757e2fd354d727073d20f4d',1,'eddaThreshold::RequestData()'],['../classeddaUncertainIsocontour.html#ad37cfda400761fea4026a5444197a9c0',1,'eddaUncertainIsocontour::RequestData()']]], + ['requestinformation',['RequestInformation',['../classeddaRandomProbeFilter.html#ada5ca0cbe086afc1bddb8897c9708ceb',1,'eddaRandomProbeFilter::RequestInformation()'],['../classeddaRandomSampleField.html#a689ee6b2f71fefcfbb7c44ec290b2c4a',1,'eddaRandomSampleField::RequestInformation()'],['../classeddaUncertainIsocontour.html#a1ea95bfbc75c9f94d41ee6a33939d19d',1,'eddaUncertainIsocontour::RequestInformation()']]], + ['requestupdateextent',['RequestUpdateExtent',['../classeddaRandomProbeFilter.html#a7116ddc47ee0f86745d407af8de27739',1,'eddaRandomProbeFilter::RequestUpdateExtent()'],['../classeddaRandomSampleField.html#a28a38cefecb18b090fd0ced4dd612aaf',1,'eddaRandomSampleField::RequestUpdateExtent()'],['../classeddaUncertainIsocontour.html#a3d519989a7d7b6fa1d04ba3a76d00fbd',1,'eddaUncertainIsocontour::RequestUpdateExtent()']]], + ['reset',['reset',['../classedda_1_1RegularCartesianGrid.html#ae6ad91b11d948d68895be2a19578857a',1,'edda::RegularCartesianGrid::reset()'],['../classedda_1_1CurvilinearGrid.html#aca2a68f167c432a939fea51a5e1720db',1,'edda::CurvilinearGrid::Reset()'],['../classedda_1_1Grid.html#af73f922e3af6588f4a5666a1441c4d7b',1,'edda::Grid::Reset()'],['../classedda_1_1CartesianGrid.html#a14dc0303c95983a8a70dcea7304b4cdb',1,'edda::CartesianGrid::Reset()']]], + ['reshape',['Reshape',['../classedda_1_1NdArray.html#a22e1f19adf5edc51ba39c1e6700057d0',1,'edda::NdArray']]], + ['resize',['Resize',['../classeddaSamplingArray.html#ad1b2a4a22266322e79c4ce14359bcdf9',1,'eddaSamplingArray']]], + ['resultname',['ResultName',['../classeddaRandomSampleField.html#abbd9f0676da786b3b679416dc1c71a0c',1,'eddaRandomSampleField']]], + ['returnstatus',['ReturnStatus',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716',1,'edda']]], + ['runge_5fkutta2',['runge_kutta2',['../classedda_1_1StreamTracer.html#abad5e625caab94678254551cb7ea3250',1,'edda::StreamTracer']]] ]; diff --git a/html/search/all_13.html b/html/search/all_13.html index 0bd629b..516a9b6 100644 --- a/html/search/all_13.html +++ b/html/search/all_13.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_13.js b/html/search/all_13.js index c049af3..df1a438 100644 --- a/html/search/all_13.js +++ b/html/search/all_13.js @@ -1,40 +1,54 @@ var searchData= [ - ['v',['v',['../structedda_1_1dist_1_1GMMTuple.html#a3ddda36da723410e6abce93cccc5b912',1,'edda::dist::GMMTuple']]], - ['validpointmaskarrayname',['ValidPointMaskArrayName',['../classeddaRandomProbeFilter.html#a9090be614887e64d4b06fbad9d6fb9c8',1,'eddaRandomProbeFilter']]], - ['validpoints',['ValidPoints',['../classeddaRandomProbeFilter.html#ade8dc98fdd22d7cc9903636c12fd17fb',1,'eddaRandomProbeFilter']]], - ['var',['var',['../structedda_1_1dist_1_1Gaussian.html#aad9425149a0a8a57a43f6098e065b04e',1,'edda::dist::Gaussian']]], - ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html',1,'edda::dist']]], - ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html#a92fa2ae6b8f75d7374489b95c91e658f',1,'edda::dist::Variant::Variant()'],['../structedda_1_1dist_1_1Variant.html#ac7a5508f29008494bf6379cfd0340d56',1,'edda::dist::Variant::Variant(const Real &obj)'],['../structedda_1_1dist_1_1Variant.html#ae651a2f3d881e8b4bce44e87d845f0db',1,'edda::dist::Variant::Variant(const Gaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#a529a0b831d2a209e139f320dcb345d9c',1,'edda::dist::Variant::Variant(const GaussianMixture< GMMs > &obj)']]], - ['variant_2eh',['variant.h',['../variant_8h.html',1,'']]], - ['vec',['vec',['../classedda_1_1Tuple.html#aa251ac1a46de47bde1e2f837a9155c72',1,'edda::Tuple']]], - ['vector',['Vector',['../classedda_1_1Vector.html',1,'edda']]], - ['vector',['Vector',['../classedda_1_1Vector.html#a290b3bf675e9161100d95e534b8f2485',1,'edda::Vector::Vector()'],['../classedda_1_1Vector.html#ae88490122ef6783e0b0c94e1ae072cf6',1,'edda::Vector::Vector(const Vector< U, N > &v)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#acdc0c2c4c4f9c6acbe526123985a95fe',1,'edda::Vector< Real, 3 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ae63026d9b882a70c2a6ca180697ba0a3',1,'edda::Vector< Real, 3 >::Vector(Real x, Real y, Real z)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a9df48f68f5dc29b71e94eacb03bd1303',1,'edda::Vector< Real, 3 >::Vector(const Vector< U, 3 > &v)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a4bb70f52f6b368bfa8b7e1fb60426986',1,'edda::Vector< Real, 4 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a8edebd979704903563a042fcee1380c0',1,'edda::Vector< Real, 4 >::Vector(Real x, Real y, Real z, Real w)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aa35a7dbcb5ac5b23f766ad5ec36ca5df',1,'edda::Vector< Real, 4 >::Vector(const Vector< U, 4 > &v)']]], - ['vector3',['Vector3',['../namespaceedda.html#a42494897f5c4030485999c80c72ea1fa',1,'edda::Vector3()'],['../namespaceedda.html#a85fb595d837d493f208da6f010859b10',1,'edda::VECTOR3()']]], - ['vector4',['VECTOR4',['../namespaceedda.html#ae93d140330f286d94cd5daa9b4a4fd47',1,'edda::VECTOR4()'],['../namespaceedda.html#a40f524404274580cb165394a7ad59669',1,'edda::Vector4()']]], - ['vector_3c_20real_2c_203_20_3e',['Vector< Real, 3 >',['../classedda_1_1Vector_3_01Real_00_013_01_4.html',1,'edda']]], - ['vector_3c_20real_2c_204_20_3e',['Vector< Real, 4 >',['../classedda_1_1Vector_3_01Real_00_014_01_4.html',1,'edda']]], - ['vector_5fmatrix_2eh',['vector_matrix.h',['../vector__matrix_8h.html',1,'']]], - ['vectorarray',['VectorArray',['../classedda_1_1VectorArray.html',1,'edda']]], - ['vectorarray',['VectorArray',['../classedda_1_1VectorArray.html#ac7bd8b62e222429dd8b9f1e297148805',1,'edda::VectorArray']]], - ['vsp_5fnew',['vsp_new',['../streamlineGaussianVTK_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineMonteCarlo.cpp'],['../test__vtkEddaReader_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtkEddaReader.cpp'],['../vtk__common_8h.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): vtk_common.h'],['../test__vtk__filters_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtk_filters.cpp']]], - ['vtk_5fcommon_2eh',['vtk_common.h',['../vtk__common_8h.html',1,'']]], - ['vtkbooleanmacro',['vtkBooleanMacro',['../classvtkCompositeUncertainIsocontour.html#aa605cc3076e76aeb4c21669e03bfea9c',1,'vtkCompositeUncertainIsocontour::vtkBooleanMacro()'],['../classeddaRandomProbeFilter.html#a632a9adcdd3c22cdaa0284a3b1493318',1,'eddaRandomProbeFilter::vtkBooleanMacro(SpatialMatch, int) vtkGetObjectMacro(ValidPoints'],['../classeddaRandomProbeFilter.html#ae7b08929533571ac659a611b2ee7cc19',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassCellArrays, int) vtkGetMacro(PassCellArrays'],['../classeddaRandomProbeFilter.html#a97616b6d4dcdb3c4cfcb4d1144d22b85',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassFieldArrays, int) vtkGetMacro(PassFieldArrays']]], - ['vtkcompositedataprobefilter',['vtkCompositeDataProbeFilter',['../classvtkCompositeUncertainIsocontour.html#a9c7d4a900e2d2b984077c8ada5b07edb',1,'vtkCompositeUncertainIsocontour']]], - ['vtkcompositeuncertainisocontour',['vtkCompositeUncertainIsocontour',['../classvtkCompositeUncertainIsocontour.html',1,'']]], - ['vtkcompositeuncertainisocontour_2ecpp',['vtkCompositeUncertainIsocontour.cpp',['../vtkCompositeUncertainIsocontour_8cpp.html',1,'']]], - ['vtkcompositeuncertainisocontour_2eh',['vtkCompositeUncertainIsocontour.h',['../vtkCompositeUncertainIsocontour_8h.html',1,'']]], - ['vtkeddareader',['vtkEddaReader',['../classvtkEddaReader.html',1,'vtkEddaReader'],['../classvtkEddaReader.html#ac8abd3c2e8d04a1aafe9acb9f0dee998',1,'vtkEddaReader::vtkEddaReader()']]], - ['vtkeddareader_2ecpp',['vtkEddaReader.cpp',['../vtkEddaReader_8cpp.html',1,'']]], - ['vtkeddareader_2eh',['vtkEddaReader.h',['../vtkEddaReader_8h.html',1,'']]], - ['vtkgetmacro',['vtkGetMacro',['../classvtkCompositeUncertainIsocontour.html#a4052cc17cb081c0ae68655c81181ca52',1,'vtkCompositeUncertainIsocontour::vtkGetMacro(PassPartialArrays, bool)'],['../classvtkCompositeUncertainIsocontour.html#ac45fb0c12f79e8a4e3a72ff2b8a9c605',1,'vtkCompositeUncertainIsocontour::vtkGetMacro(Isov, double)'],['../classeddaRandomProbeFilter.html#a4619b8633f69191c2f57be11d353e332',1,'eddaRandomProbeFilter::vtkGetMacro()'],['../classeddaThreshold.html#a2cfe4bf36cbcaff6f5066ef3f5898d7e',1,'eddaThreshold::vtkGetMacro(UpperThreshold, double) vtkSetMacro(UpperThreshold'],['../classeddaThreshold.html#a4a79ea1388a0d06fce23a8d0e236dc5a',1,'eddaThreshold::vtkGetMacro(LowerThreshold, double) vtkSetMacro(LowerThreshold'],['../classeddaUncertainIsocontour.html#a95f2f24b18e0e8c82d9c8acff99ce76b',1,'eddaUncertainIsocontour::vtkGetMacro()']]], - ['vtkgetstringmacro',['vtkGetStringMacro',['../classvtkEddaReader.html#a01c9e81f8b386422644567b8c62e70c3',1,'vtkEddaReader']]], - ['vtksamplingarray',['vtkSamplingArray',['../classvtkSamplingArray.html',1,'vtkSamplingArray'],['../classvtkSamplingArray.html#ae6c707c064992edff053d21ae38d6287',1,'vtkSamplingArray::vtkSamplingArray()']]], - ['vtksamplingarray_2ecpp',['vtkSamplingArray.cpp',['../vtkSamplingArray_8cpp.html',1,'']]], - ['vtksamplingarray_2eh',['vtkSamplingArray.h',['../vtkSamplingArray_8h.html',1,'']]], - ['vtksetmacro',['vtkSetMacro',['../classvtkCompositeUncertainIsocontour.html#a9f8797e0df307fdcdfb3ff5d74eb5319',1,'vtkCompositeUncertainIsocontour::vtkSetMacro(PassPartialArrays, bool)'],['../classvtkCompositeUncertainIsocontour.html#adfbe7e9d5b105a5226a866e4fdd4894f',1,'vtkCompositeUncertainIsocontour::vtkSetMacro(Isov, double)'],['../classeddaRandomProbeFilter.html#a2d304675305857537943e50e8976ceed',1,'eddaRandomProbeFilter::vtkSetMacro(SpatialMatch, int) vtkGetMacro(SpatialMatch'],['../classeddaRandomProbeFilter.html#a8c635957d28f76e3a39c3c710a1bdb74',1,'eddaRandomProbeFilter::vtkSetMacro(PassPointArrays, int) vtkBooleanMacro(PassPointArrays'],['../classeddaRandomProbeFilter.html#abd7abdc9a670f285cdc24f276f57cff4',1,'eddaRandomProbeFilter::vtkSetMacro(Tolerance, double) vtkGetMacro(Tolerance'],['../classeddaRandomProbeFilter.html#a9377fb7f3778182774721ca646ae69cb',1,'eddaRandomProbeFilter::vtkSetMacro(ComputeTolerance, bool) vtkBooleanMacro(ComputeTolerance']]], - ['vtksetstringmacro',['vtkSetStringMacro',['../classvtkEddaReader.html#a00e16616071a982026ff30c12722909e',1,'vtkEddaReader::vtkSetStringMacro()'],['../classeddaRandomProbeFilter.html#adbb19457e8f2f3a68519b3649037932d',1,'eddaRandomProbeFilter::vtkSetStringMacro()']]], - ['vtkstandardnewmacro',['vtkStandardNewMacro',['../vtkCompositeUncertainIsocontour_8cpp.html#a80c998a5f6dbb4f2374fc8d4ffa4a942',1,'vtkStandardNewMacro(vtkCompositeUncertainIsocontour): vtkCompositeUncertainIsocontour.cpp'],['../vtkEddaReader_8cpp.html#a60823a07820ad1c8f564b40b1e8cf412',1,'vtkStandardNewMacro(vtkEddaReader): vtkEddaReader.cpp'],['../vtkSamplingArray_8cpp.html#ac25aead90d777cdfe642636205d138b9',1,'vtkStandardNewMacro(vtkSamplingArray): vtkSamplingArray.cpp'],['../eddaRandomProbeFilter_8cpp.html#a0a1074a80804b83f743eb0f675b4c85e',1,'vtkStandardNewMacro(eddaRandomProbeFilter) using namespace edda: eddaRandomProbeFilter.cpp'],['../eddaRandomSampleField_8cpp.html#ae9a8045eb759c1a45611a08def30a823',1,'vtkStandardNewMacro(eddaRandomSampleField) eddaRandomSampleField: eddaRandomSampleField.cpp'],['../eddaSamplingArray_8cpp.html#adf7058b06c210d0698668f31d52eadb9',1,'vtkStandardNewMacro(eddaSamplingArray): eddaSamplingArray.cpp'],['../eddaThreshold_8cpp.html#ab5fbf37bee4392a739755137825c30b3',1,'vtkStandardNewMacro(eddaThreshold) eddaThreshold: eddaThreshold.cpp'],['../eddaUncertainIsocontour_8cpp.html#af93440a47bf1832f11ac6e7d30d53c4e',1,'vtkStandardNewMacro(eddaUncertainIsocontour) eddaUncertainIsocontour: eddaUncertainIsocontour.cpp']]], - ['vtktypemacro',['vtkTypeMacro',['../classvtkCompositeUncertainIsocontour.html#a9f25abd34ce9ff5d5174e38d8a014b21',1,'vtkCompositeUncertainIsocontour::vtkTypeMacro()'],['../classvtkEddaReader.html#a2221aa8c7ab4ae1cd74d4015432db066',1,'vtkEddaReader::vtkTypeMacro()'],['../classvtkSamplingArray.html#a0b2f221fc0f1dbc874238b24b91849c4',1,'vtkSamplingArray::vtkTypeMacro()'],['../classeddaRandomProbeFilter.html#a029be5a10e6c5717bacc393095cd3be8',1,'eddaRandomProbeFilter::vtkTypeMacro()'],['../classeddaRandomSampleField.html#a7d1f46f9e336cace7a8b63a50683d8b6',1,'eddaRandomSampleField::vtkTypeMacro()'],['../classeddaSamplingArray.html#afca484cd5b215ae296be7583f0349714',1,'eddaSamplingArray::vtkTypeMacro()'],['../classeddaThreshold.html#a10f5f73d5d06ddb61f395b0118ade35b',1,'eddaThreshold::vtkTypeMacro()'],['../classeddaUncertainIsocontour.html#ae28f67fcb8397bb23bf05be7e94930ef',1,'eddaUncertainIsocontour::vtkTypeMacro()']]], - ['vtkvectorofarrays',['vtkVectorOfArrays',['../classeddaRandomProbeFilter_1_1vtkVectorOfArrays.html',1,'eddaRandomProbeFilter']]] + ['sampledataarray',['SampleDataArray',['../classeddaRandomSampleField.html#a59d9a1ce75be572a5fc56a9aa1765f72',1,'eddaRandomSampleField']]], + ['samples',['SAMPLES',['../streamlineMonteCarlo_8cpp.html#a3c63a827daaf7041222aa1fe6a8d9630',1,'streamlineMonteCarlo.cpp']]], + ['scalardistrarray',['ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html',1,'edda']]], + ['scalardistrarray',['ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html#a75c12ee43b26d941bc36f5bb6db30ee5',1,'edda::ScalarDistrArray']]], + ['selfdeviceptr',['SelfDevicePtr',['../classedda_1_1NdArray.html#aeee148104912a94ae7f9a52ddbf6b632',1,'edda::NdArray']]], + ['set',['set',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd2833a76c0753e6766b4abeaffbb4c5',1,'edda::Vector< Real, 3 >::set()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ac225598517bc52939096bd6fd54023ce',1,'edda::Vector< Real, 4 >::set()']]], + ['set_5fownership',['set_ownership',['../classedda_1_1NdArray.html#a0cec1d5f0c34d1f44c8203bdb62b68e3',1,'edda::NdArray']]], + ['set_5fval',['set_val',['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray']]], + ['setbinwidths',['setBinWidths',['../structedda_1_1dist_1_1JointHistogram.html#a2e03366852fa3eaf4772a5bcf8b84fec',1,'edda::dist::JointHistogram']]], + ['setboundary',['setBoundary',['../classedda_1_1CurvilinearGrid.html#a38e351041b2c875da72c22ab32617372',1,'edda::CurvilinearGrid::setBoundary()'],['../classedda_1_1Grid.html#af3650ba5e9f2eedecadd0cafad4798a3',1,'edda::Grid::setBoundary()'],['../classedda_1_1CartesianGrid.html#a955ac477d9f7f95b6142a4cc97605c74',1,'edda::CartesianGrid::setBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a005accc847e5455e57f4e523e7b99bd6',1,'edda::RegularCartesianGrid::setBoundary()']]], + ['setcovariance',['setCovariance',['../structedda_1_1dist_1_1JointHistogram.html#ac18457451dcc2383f463ec84a6159af3',1,'edda::dist::JointHistogram']]], + ['setdistr',['setDistr',['../structedda_1_1dist_1_1JointHistogram.html#aebf84de7d2b246929c1d43534f599cba',1,'edda::dist::JointHistogram']]], + ['setdistrtype',['setDistrType',['../namespaceedda.html#ae5111b4310bc98fa0e49544ecdb3d5ed',1,'edda']]], + ['seteddaarray',['SetEddaArray',['../classeddaSamplingArray.html#a0eb6297da156ae9fa99da822bb475140',1,'eddaSamplingArray']]], + ['setgmm',['setGMM',['../classedda_1_1dist_1_1JointGMM.html#a49f668c07fea5e7b684715f7154e3e1a',1,'edda::dist::JointGMM']]], + ['setmatrices',['setMatrices',['../structedda_1_1dist_1_1JointGaussian.html#a5a3ef4ba7bd6cb66f0ffa8aa585cb02b',1,'edda::dist::JointGaussian']]], + ['setmaxvals',['setMaxVals',['../structedda_1_1dist_1_1JointHistogram.html#aef2fb0ca3a39b13ec3ab6258b38dffd7',1,'edda::dist::JointHistogram']]], + ['setminvals',['setMinVals',['../structedda_1_1dist_1_1JointHistogram.html#a71d65d77cc3049f846be0336d51801e0',1,'edda::dist::JointHistogram']]], + ['setnumberoftuples',['SetNumberOfTuples',['../classeddaSamplingArray.html#a227706ad000143370b166318ed20bcfc',1,'eddaSamplingArray']]], + ['setnumbins',['setNumBins',['../structedda_1_1dist_1_1JointHistogram.html#aea20ebc8b419fe0066eedd9df04dc5f2',1,'edda::dist::JointHistogram']]], + ['setnumvars',['setNumVars',['../structedda_1_1dist_1_1JointHistogram.html#a54bf387134faa785520f52dedd9b6048',1,'edda::dist::JointHistogram']]], + ['setrealboundary',['setRealBoundary',['../classedda_1_1CurvilinearGrid.html#ab5ccaa6ccbb3b9f604055c7d82c92543',1,'edda::CurvilinearGrid::setRealBoundary()'],['../classedda_1_1CartesianGrid.html#abe9b85a02f3cc95d6b3aea12bb54e1f9',1,'edda::CartesianGrid::setRealBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a837950c49d82ec89ecc79181ca2de390',1,'edda::RegularCartesianGrid::setRealBoundary()']]], + ['setsourceconnection',['SetSourceConnection',['../classeddaRandomProbeFilter.html#a071d5410a123cb241996c6f35c90a3f1',1,'eddaRandomProbeFilter']]], + ['setsourcedata',['SetSourceData',['../classeddaRandomProbeFilter.html#a025f0fa555ac54d677ba01e75aeec66c',1,'eddaRandomProbeFilter']]], + ['settargetcomponent',['SetTargetComponent',['../classedda_1_1DistrArray.html#a14123887b3d5913359f6930899185f07',1,'edda::DistrArray::SetTargetComponent()'],['../classedda_1_1ScalarDistrArray.html#ae6e5bc3479c82f3079ff6ca36c6e3cba',1,'edda::ScalarDistrArray::SetTargetComponent()'],['../classedda_1_1VectorDistrArray.html#ac8f1746a48a733a92dd41e221c90fb74',1,'edda::VectorDistrArray::SetTargetComponent()'],['../classedda_1_1JointDistrArray.html#aebc41801fc291f5e8c9d397d28572f72',1,'edda::JointDistrArray::SetTargetComponent()'],['../classedda_1_1GmmVtkDataArray.html#af9a4946189dff6b025bf2dc106a1c0ee',1,'edda::GmmVtkDataArray::SetTargetComponent()']]], + ['settuple',['SetTuple',['../classeddaSamplingArray.html#a95e56e923f0e3c0d379355253836a24c',1,'eddaSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a66a463aa54a151e7ed6c76693ead3978',1,'eddaSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#ac7949700cfa4662839a696b873742dd5',1,'eddaSamplingArray::SetTuple(vtkIdType i, const double *tuple)']]], + ['setvariantvalue',['SetVariantValue',['../classeddaSamplingArray.html#ae71b18bac49013fc99530e4f9148210c',1,'eddaSamplingArray']]], + ['setvoidarray',['SetVoidArray',['../classeddaSamplingArray.html#a7759fff2d32c5d9b73ade5c0df174614',1,'eddaSamplingArray']]], + ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html#af338c5a848dfbde825c9520c5ba0a959',1,'edda::shared_ary::shared_ary()'],['../classedda_1_1shared__ary.html#a6164ce3cb376ee64e5b819f3b2eb1f7e',1,'edda::shared_ary::shared_ary(T *p, size_t n_)'],['../classedda_1_1shared__ary.html#a87a4d8eface1debf626881862ced62e4',1,'edda::shared_ary::shared_ary(size_t n_)']]], + ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html',1,'edda']]], + ['shared_5fary_2eh',['shared_ary.h',['../shared__ary_8h.html',1,'']]], + ['shared_5fary_3c_20distr_20_3e',['shared_ary< Distr >',['../classedda_1_1shared__ary.html',1,'edda']]], + ['shared_5fary_3c_20edda_3a_3avector_3c_20distr_2c_20n_20_3e_20_3e',['shared_ary< edda::Vector< Distr, N > >',['../classedda_1_1shared__ary.html',1,'edda']]], + ['simplicial_5fdecomposition_5fodd',['simplicial_decomposition_odd',['../classedda_1_1CurvilinearGrid.html#afaea203b36f9874bee4beaee4dbb131a',1,'edda::CurvilinearGrid']]], + ['spatialdecompositionexample_2ecpp',['spatialDecompositionExample.cpp',['../spatialDecompositionExample_8cpp.html',1,'']]], + ['spatialmatch',['SpatialMatch',['../classeddaRandomProbeFilter.html#a67455f5653d93d03bcabde2231146757',1,'eddaRandomProbeFilter']]], + ['squeeze',['Squeeze',['../classeddaSamplingArray.html#abeb4a46753f12abc8cce6c81e7a89200',1,'eddaSamplingArray']]], + ['statistics_2eh',['statistics.h',['../statistics_8h.html',1,'']]], + ['step_5fsize',['step_size',['../classedda_1_1StreamTracer.html#ae5c09740fd4e418cc480fa9fa40ec50a',1,'edda::StreamTracer']]], + ['stream_5ftracer_2eh',['stream_tracer.h',['../stream__tracer_8h.html',1,'']]], + ['streamlinemontecarlo_2ecpp',['streamlineMonteCarlo.cpp',['../streamlineMonteCarlo_8cpp.html',1,'']]], + ['streamlines',['streamlines',['../streamlineMonteCarlo_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlineMonteCarlo.cpp']]], + ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html#afd2a7cb908f8ab75b54abccf49206645',1,'edda::StreamTracer::StreamTracer()'],['../streamlineMonteCarlo_8cpp.html#a04bae7717e99d67c4ec9eb691c271bb5',1,'streamTracer(): streamlineMonteCarlo.cpp']]], + ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html',1,'edda']]], + ['subid',['subid',['../structedda_1_1Cell.html#abe7710a7b9e12341604024c1bdf4da89',1,'edda::Cell']]], + ['subtetra_5fface',['subtetra_face',['../classedda_1_1CurvilinearGrid.html#ac49f48f7436c3a2887f3b948976a952b',1,'edda::CurvilinearGrid']]], + ['subtetra_5fvertex',['subtetra_vertex',['../classedda_1_1CurvilinearGrid.html#a4d8e4b3261f31fc6383e87c913d26261',1,'edda::CurvilinearGrid']]], + ['subtriangle_5fvertex',['subtriangle_vertex',['../classedda_1_1CurvilinearGrid.html#abd79d45f2e2368ab6bf15131e6bbd2d7',1,'edda::CurvilinearGrid']]], + ['success',['SUCCESS',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716a530eabd3f34ef67fe4ab833f2bae1622',1,'edda']]], + ['super_5ft',['super_t',['../classedda_1_1ndarray__iterator.html#af10246b4a1530457d9ac30f1a897df6c',1,'edda::ndarray_iterator']]], + ['swap',['swap',['../classedda_1_1shared__ary.html#a79f7586a6e2ea57698ab940a629e340d',1,'edda::shared_ary']]] ]; diff --git a/html/search/all_14.html b/html/search/all_14.html index 2ad638b..6f35c28 100644 --- a/html/search/all_14.html +++ b/html/search/all_14.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_14.js b/html/search/all_14.js index dc97be6..e61e26c 100644 --- a/html/search/all_14.js +++ b/html/search/all_14.js @@ -1,8 +1,85 @@ var searchData= [ - ['w',['w',['../structedda_1_1dist_1_1GMMTuple.html#a3f52857178189dcb76b5132a60c0a50a',1,'edda::dist::GMMTuple::w()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0f6853b9fab936215074e7a1b880b2d6',1,'edda::Vector< Real, 4 >::w()']]], - ['weighted_5fsum',['WEIGHTED_SUM',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781a5cd0cc87f7789a6f7120f6f4f55594ed',1,'edda']]], - ['write_5fnrrd_5f3d',['write_nrrd_3d',['../namespaceedda.html#aa7d9a6036df168e12c9274b3c867b196',1,'edda']]], - ['writerawnrrdfile',['writeRawNrrdFile',['../namespaceedda.html#a84955479cafdd0ef664aac47680dfb74',1,'edda']]], - ['writevoidpointer',['WriteVoidPointer',['../classvtkSamplingArray.html#a5a9b6f6c5d13d67f508617cf3fb2f5af',1,'vtkSamplingArray::WriteVoidPointer()'],['../classeddaSamplingArray.html#a57dd19cefe182bb6846b618b14d5bcd9',1,'eddaSamplingArray::WriteVoidPointer()']]] + ['iterator_5fcore_5faccess',['iterator_core_access',['../classedda_1_1ndarray__iterator.html#a3c5d767e643bbf0d93d71b9a37c4b8a3',1,'edda::ndarray_iterator']]], + ['tagbitmapfileheader',['tagBITMAPFILEHEADER',['../structtagBITMAPFILEHEADER.html',1,'']]], + ['tagbitmapinfoheader',['tagBITMAPINFOHEADER',['../structtagBITMAPINFOHEADER.html',1,'']]], + ['take',['take',['../classedda_1_1NdArray.html#a37a403de9db8176d39b5fd515a4d1d01',1,'edda::NdArray']]], + ['target_5fcomp',['target_comp',['../classedda_1_1VectorDistrArray.html#ab094fcbff0e6230da317b5c90453181d',1,'edda::VectorDistrArray::target_comp()'],['../classedda_1_1JointDistrArray.html#a4099f1638f9d5888aec37ad14bbdc74c',1,'edda::JointDistrArray::target_comp()'],['../classedda_1_1GmmVtkDataArray.html#a342aa1813d8a9083bd28344f3b1a39e6',1,'edda::GmmVtkDataArray::target_comp()']]], + ['td_5fbackward',['TD_BACKWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1eaf625f13a06c072f78a07c6e8227250dc',1,'edda']]], + ['td_5fforward',['TD_FORWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1ea0415d5460bee3431708f967a58b00ae8',1,'edda']]], + ['test',['TEST',['../test__common_8h.html#af471db13ecaac3935fc460845124f486',1,'test_common.h']]], + ['test_5farray_2ecpp',['test_array.cpp',['../test__array_8cpp.html',1,'']]], + ['test_5fcommon_2eh',['test_common.h',['../test__common_8h.html',1,'']]], + ['test_5fdistribution_2ecpp',['test_distribution.cpp',['../test__distribution_8cpp.html',1,'']]], + ['test_5fgaussian_2ecpp',['test_gaussian.cpp',['../test__gaussian_8cpp.html',1,'']]], + ['test_5fhistogram_5fio_2ecpp',['test_histogram_io.cpp',['../test__histogram__io_8cpp.html',1,'']]], + ['test_5fio_2ecpp',['test_io.cpp',['../test__io_8cpp.html',1,'']]], + ['test_5fjoint_5fhistogram_2ecpp',['test_joint_histogram.cpp',['../test__joint__histogram_8cpp.html',1,'']]], + ['test_5fjointgmm_2ecpp',['test_jointGMM.cpp',['../test__jointGMM_8cpp.html',1,'']]], + ['test_5fndarray_2ecpp',['test_NdArray.cpp',['../test__NdArray_8cpp.html',1,'']]], + ['test_5fthreshold',['test_threshold',['../test__vtk__filters_8cpp.html#a2efb78dd152ccb27aa7c6a40aa5afaf3',1,'test_vtk_filters.cpp']]], + ['test_5fthrust_2ecpp',['test_thrust.cpp',['../test__thrust_8cpp.html',1,'']]], + ['test_5fvtk_5ffilters_2ecpp',['test_vtk_filters.cpp',['../test__vtk__filters_8cpp.html',1,'']]], + ['testformatch',['testforMatch',['../namespaceedda.html#ac9b0cfdf55fb9252d59749ffb800e527',1,'edda']]], + ['tetra',['tetra',['../structedda_1_1Tetra__step.html#adfbd9c715abd5e1c1396d179a34c5f6f',1,'edda::Tetra_step']]], + ['tetra_5fstep',['Tetra_step',['../structedda_1_1Tetra__step.html',1,'edda']]], + ['tetra_5fstep',['tetra_step',['../classedda_1_1CurvilinearGrid.html#a6cc7444266390785cb138f41b25755b6',1,'edda::CurvilinearGrid']]], + ['tetrahedral_5fwalk_5flocate',['tetrahedral_walk_locate',['../classedda_1_1CurvilinearGrid.html#a1df251d8110bab2b03e0c3e9619ebad6',1,'edda::CurvilinearGrid']]], + ['tetrahedron',['TETRAHEDRON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea20602774a5b3a8ff1145bcd0ca59ec8c',1,'edda']]], + ['tetralerp',['tetraLerp',['../namespaceedda.html#a695a7e0efb2ab6affdc20001192c0006',1,'edda']]], + ['thresholdbetween',['ThresholdBetween',['../classeddaThreshold.html#aab5d54fee0ccb2cd1116a87a41f17f7b',1,'eddaThreshold']]], + ['thresholdbylower',['ThresholdByLower',['../classeddaThreshold.html#a02a56991ed507396e580e609de2a17ef',1,'eddaThreshold']]], + ['thresholdbyupper',['ThresholdByUpper',['../classeddaThreshold.html#abb1baf518917bf90f6666a0c309fd165',1,'eddaThreshold']]], + ['thrust_5fcommon_2eh',['thrust_common.h',['../thrust__common_8h.html',1,'']]], + ['thrust_5fgmm_5farray_2eh',['thrust_gmm_array.h',['../thrust__gmm__array_8h.html',1,'']]], + ['thrust_5fhisto_5farray_2eh',['thrust_histo_array.h',['../thrust__histo__array_8h.html',1,'']]], + ['thrust_5frandom_5fsample_2eh',['thrust_random_sample.h',['../thrust__random__sample_8h.html',1,'']]], + ['timestamp_5ft',['timestamp_t',['../vectSpatialDecompExample_8cpp.html#a29217083807c6b153656eda1a04f306d',1,'vectSpatialDecompExample.cpp']]], + ['to_5feuler',['TO_EULER',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da95e35f89507c7491563bd104f3fc3d93',1,'edda']]], + ['to_5frk2',['TO_RK2',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da2688e6dda77917b5d1244fbb87a040cb',1,'edda']]], + ['to_5frk4',['TO_RK4',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034dad96fc7dc216bd2f2507d30f3d9e6172f',1,'edda']]], + ['to_5frk45',['TO_RK45',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da8f2955b09f2eb97a1432225998b8eb4d',1,'edda']]], + ['tolerance',['Tolerance',['../classeddaRandomProbeFilter.html#a3fccd47c6c7b04a5039392eb6c6f9c3f',1,'eddaRandomProbeFilter']]], + ['tracedir',['TraceDir',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1e',1,'edda']]], + ['traceord',['TraceOrd',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034d',1,'edda']]], + ['transpose',['transpose',['../classedda_1_1MATRIX3.html#ac4c24f4b918f08d555f7dda168d5ef8a',1,'edda::MATRIX3']]], + ['tri_5flerp',['TRI_LERP',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781ab1bf76c70fe926145cc62335d104c288',1,'edda']]], + ['triangle',['TRIANGLE',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea3c1078d5ad96f5762e321e34fd9a8359',1,'edda']]], + ['trilerp',['triLerp',['../namespaceedda.html#ae9734f47a623e06d20c371e010fe761e',1,'edda']]], + ['tuple',['Tuple',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple',['Tuple',['../classedda_1_1Tuple.html#a0474ff57c17e224def4b2ee2b2329e6d',1,'edda::Tuple::Tuple()'],['../classedda_1_1Tuple.html#a5ecb3290fd84a8f1b53ccb58371e7be9',1,'edda::Tuple::Tuple(const T &scalar)'],['../classedda_1_1Tuple.html#a69b581682e5c6fbe1930e5cd6ab647b1',1,'edda::Tuple::Tuple(const T *init)'],['../classedda_1_1Tuple.html#a60852e69ca7d6eb98283ea383cc5d0a8',1,'edda::Tuple::Tuple(const Tuple< U, N > &v)']]], + ['tuple_2eh',['tuple.h',['../tuple_8h.html',1,'']]], + ['tuple1',['Tuple1',['../structedda_1_1Tuple1.html',1,'edda']]], + ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html',1,'edda']]], + ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html#a4b573e5df5a0dc3663e70e2f42fcdb55',1,'edda::Tuple2::Tuple2()'],['../structedda_1_1Tuple2.html#ac1af7bd6b37f5a601988f690527a05f2',1,'edda::Tuple2::Tuple2(const T &x, const T &y)']]], + ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html#af8f5cf58b185b2b2ef9d38161c518170',1,'edda::Tuple3::Tuple3()'],['../structedda_1_1Tuple3.html#a6cf42eb68b87ded412dd288ae5350e64',1,'edda::Tuple3::Tuple3(const T &x, const T &y, const T &z)']]], + ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple3_3c_20int_20_3e',['Tuple3< int >',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple3_3c_20real_20_3e',['Tuple3< Real >',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html#a518d7b0aed299710413edde9bfd2b792',1,'edda::Tuple4::Tuple4()'],['../structedda_1_1Tuple4.html#af0b36d1663eee09908560f9bfe9dce47',1,'edda::Tuple4::Tuple4(const T &x, const T &y, const T &z, const T &w)']]], + ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html',1,'edda']]], + ['tuple4_3c_20real_20_3e',['Tuple4< Real >',['../structedda_1_1Tuple4.html',1,'edda']]], + ['tuple5',['Tuple5',['../structedda_1_1Tuple5.html',1,'edda']]], + ['tuple6',['Tuple6',['../structedda_1_1Tuple6.html',1,'edda']]], + ['tuple7',['Tuple7',['../structedda_1_1Tuple7.html',1,'edda']]], + ['tuple8',['Tuple8',['../structedda_1_1Tuple8.html',1,'edda']]], + ['tuple9',['Tuple9',['../structedda_1_1Tuple9.html',1,'edda']]], + ['tuple_3c_20edda_3a_3adist_3a_3agmmtuple_2c_20gms_20_3e',['Tuple< edda::dist::GMMTuple, GMs >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_2c_20max_5fgms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20int_2c_203_20_3e',['Tuple< int, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20ndarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgms_20_2a3_20_3e',['Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_203_20_3e',['Tuple< Real, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_204_20_3e',['Tuple< Real, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_20n_20_3e',['Tuple< Real, N >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_201_20_3e',['Tuple< T, 1 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_202_20_3e',['Tuple< T, 2 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_203_20_3e',['Tuple< T, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_204_20_3e',['Tuple< T, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_205_20_3e',['Tuple< T, 5 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_206_20_3e',['Tuple< T, 6 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_207_20_3e',['Tuple< T, 7 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_208_20_3e',['Tuple< T, 8 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_209_20_3e',['Tuple< T, 9 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['type',['type',['../structedda_1_1Cell.html#a7c2af62929a97abb3d6f6f3f8830807e',1,'edda::Cell']]] ]; diff --git a/html/search/all_15.html b/html/search/all_15.html index d3b5274..05b90ea 100644 --- a/html/search/all_15.html +++ b/html/search/all_15.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_15.js b/html/search/all_15.js index caa55e6..0bdbd35 100644 --- a/html/search/all_15.js +++ b/html/search/all_15.js @@ -1,6 +1,13 @@ var searchData= [ - ['x',['x',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a19d61540f816dd232115080e8d9e245c',1,'edda::dist::detail::_getPdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a326ad483b659e24b2208adde995108e5',1,'edda::dist::detail::_getCdf::x()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a0d03b796a432f02139bd75511c3058a8',1,'edda::Vector< Real, 3 >::x()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ad049d4083f2e9f921e5750d111bdb405',1,'edda::Vector< Real, 4 >::x()']]], - ['xcelldim',['xcelldim',['../classedda_1_1CartesianGrid.html#ab177745dd86d88eb84d67500748e2c00',1,'edda::CartesianGrid']]], - ['xdim',['xdim',['../classedda_1_1CartesianGrid.html#aeb7c6fb8918008f17898bbffd2afdb8b',1,'edda::CartesianGrid']]] + ['ublas_5fmatrix',['ublas_matrix',['../namespaceedda.html#a7700035bd6d18c23761d9e9981955848',1,'edda']]], + ['ublas_5fvector',['ublas_vector',['../namespaceedda.html#a403e945b0685b365e25de9f712368d99',1,'edda']]], + ['ucgridphy2comp',['UCGridPhy2Comp',['../grid_8h.html#ad7352884ed931142171b2bbfc9849f59',1,'grid.h']]], + ['uncertainisocontourvtk_2ecpp',['uncertainIsocontourVTK.cpp',['../uncertainIsocontourVTK_8cpp.html',1,'']]], + ['up_5fcells',['up_cells',['../classedda_1_1CurvilinearGrid.html#a01a7ae4e58960db32347e7dff2606b9c',1,'edda::CurvilinearGrid']]], + ['update_5fclass_5fprob',['update_class_prob',['../namespaceedda.html#a17578e6edb597deb5437a8ef81a0368c',1,'edda']]], + ['update_5fparameters',['update_parameters',['../namespaceedda.html#a0277b5151ce74008ef5a91e0f3c70937',1,'edda']]], + ['updateseeds',['updateSeeds',['../streamlineMonteCarlo_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'streamlineMonteCarlo.cpp']]], + ['upperthreshold',['UpperThreshold',['../classeddaThreshold.html#a24dd718cc876a3e20f07fe807c243498',1,'eddaThreshold']]], + ['usenullpoint',['UseNullPoint',['../classeddaRandomProbeFilter.html#a054974d60116bf5a9cbb59b23120bc8f',1,'eddaRandomProbeFilter']]] ]; diff --git a/html/search/all_16.html b/html/search/all_16.html index b4e3666..ea3d47b 100644 --- a/html/search/all_16.html +++ b/html/search/all_16.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_16.js b/html/search/all_16.js index 99c2d8d..95a0365 100644 --- a/html/search/all_16.js +++ b/html/search/all_16.js @@ -1,6 +1,35 @@ var searchData= [ - ['y',['y',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#aa8603bd9ae2ed6741d6fe1f10464c4e9',1,'edda::Vector< Real, 3 >::y()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a5613cb96521f879c3be79b022caaf760',1,'edda::Vector< Real, 4 >::y()']]], - ['ycelldim',['ycelldim',['../classedda_1_1CartesianGrid.html#a260d4e7f4510c77bfc9341707bf8e341',1,'edda::CartesianGrid']]], - ['ydim',['ydim',['../classedda_1_1CartesianGrid.html#ab018ac1a44d18def0a02d9b1691e4a06',1,'edda::CartesianGrid']]] + ['v',['v',['../structedda_1_1dist_1_1GMMTuple.html#a3ddda36da723410e6abce93cccc5b912',1,'edda::dist::GMMTuple']]], + ['validpointmaskarrayname',['ValidPointMaskArrayName',['../classeddaRandomProbeFilter.html#a9090be614887e64d4b06fbad9d6fb9c8',1,'eddaRandomProbeFilter']]], + ['validpoints',['ValidPoints',['../classeddaRandomProbeFilter.html#ade8dc98fdd22d7cc9903636c12fd17fb',1,'eddaRandomProbeFilter']]], + ['valuetobinsindex',['valueToBinsIndex',['../classedda_1_1dist_1_1Histogram.html#a61c88146474a8452f3ae15a7e7a483b1',1,'edda::dist::Histogram']]], + ['var',['var',['../structedda_1_1dist_1_1Gaussian.html#aad9425149a0a8a57a43f6098e065b04e',1,'edda::dist::Gaussian']]], + ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html#a92fa2ae6b8f75d7374489b95c91e658f',1,'edda::dist::Variant::Variant()'],['../structedda_1_1dist_1_1Variant.html#ac7a5508f29008494bf6379cfd0340d56',1,'edda::dist::Variant::Variant(const Real &obj)'],['../structedda_1_1dist_1_1Variant.html#ae651a2f3d881e8b4bce44e87d845f0db',1,'edda::dist::Variant::Variant(const Gaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#af5f0e31d762593b7411a95cd8c61a7e7',1,'edda::dist::Variant::Variant(const GaussianMixture< 2 > &obj)'],['../structedda_1_1dist_1_1Variant.html#a1f4f390836631812dcc3a23ab2c568d3',1,'edda::dist::Variant::Variant(const GaussianMixture< 3 > &obj)'],['../structedda_1_1dist_1_1Variant.html#ab858de5210fa7b9d7a64a905f2a80d71',1,'edda::dist::Variant::Variant(const GaussianMixture< 4 > &obj)'],['../structedda_1_1dist_1_1Variant.html#a8ee8d5d2ba5a0bf3e4ff1c168c19f061',1,'edda::dist::Variant::Variant(const GaussianMixture< 5 > &obj)'],['../structedda_1_1dist_1_1Variant.html#ad89101e1c92c448627bfc4ec3f53c21a',1,'edda::dist::Variant::Variant(const Histogram &obj)'],['../structedda_1_1dist_1_1Variant.html#a411b6acd9be0368d020e497d01404fe7',1,'edda::dist::Variant::Variant(const JointGaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#a5494ba6c0d43e87e82b9b10aacb2495d',1,'edda::dist::Variant::Variant(const JointHistogram &obj)']]], + ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html',1,'edda::dist']]], + ['variant_2eh',['variant.h',['../variant_8h.html',1,'']]], + ['vec',['vec',['../classedda_1_1Tuple.html#aa251ac1a46de47bde1e2f837a9155c72',1,'edda::Tuple']]], + ['vecdistrmodeler',['VecDistrModeler',['../classedda_1_1VecDistrModeler.html',1,'edda']]], + ['vecdistrmodeler',['VecDistrModeler',['../classedda_1_1VecDistrModeler.html#ad6917349fd9373b88e338413e146cccf',1,'edda::VecDistrModeler']]], + ['vecdistrmodeler_2eh',['VecDistrModeler.h',['../VecDistrModeler_8h.html',1,'']]], + ['vector',['Vector',['../classedda_1_1Vector.html#a290b3bf675e9161100d95e534b8f2485',1,'edda::Vector::Vector()'],['../classedda_1_1Vector.html#ae88490122ef6783e0b0c94e1ae072cf6',1,'edda::Vector::Vector(const Vector< U, N > &v)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#acdc0c2c4c4f9c6acbe526123985a95fe',1,'edda::Vector< Real, 3 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ae63026d9b882a70c2a6ca180697ba0a3',1,'edda::Vector< Real, 3 >::Vector(Real x, Real y, Real z)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a9df48f68f5dc29b71e94eacb03bd1303',1,'edda::Vector< Real, 3 >::Vector(const Vector< U, 3 > &v)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a4bb70f52f6b368bfa8b7e1fb60426986',1,'edda::Vector< Real, 4 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a8edebd979704903563a042fcee1380c0',1,'edda::Vector< Real, 4 >::Vector(Real x, Real y, Real z, Real w)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aa35a7dbcb5ac5b23f766ad5ec36ca5df',1,'edda::Vector< Real, 4 >::Vector(const Vector< U, 4 > &v)']]], + ['vector',['Vector',['../classedda_1_1Vector.html',1,'edda']]], + ['vector3',['Vector3',['../namespaceedda.html#a42494897f5c4030485999c80c72ea1fa',1,'edda::Vector3()'],['../namespaceedda.html#a85fb595d837d493f208da6f010859b10',1,'edda::VECTOR3()']]], + ['vector4',['Vector4',['../namespaceedda.html#a40f524404274580cb165394a7ad59669',1,'edda::Vector4()'],['../namespaceedda.html#ae93d140330f286d94cd5daa9b4a4fd47',1,'edda::VECTOR4()']]], + ['vector_3c_20real_2c_203_20_3e',['Vector< Real, 3 >',['../classedda_1_1Vector_3_01Real_00_013_01_4.html',1,'edda']]], + ['vector_3c_20real_2c_204_20_3e',['Vector< Real, 4 >',['../classedda_1_1Vector_3_01Real_00_014_01_4.html',1,'edda']]], + ['vector_5fmatrix_2ecpp',['vector_matrix.cpp',['../vector__matrix_8cpp.html',1,'']]], + ['vector_5fmatrix_2eh',['vector_matrix.h',['../vector__matrix_8h.html',1,'']]], + ['vectordistrarray',['VectorDistrArray',['../classedda_1_1VectorDistrArray.html#a2329c0bdd775bdfe2cfaaf3fecc2911b',1,'edda::VectorDistrArray']]], + ['vectordistrarray',['VectorDistrArray',['../classedda_1_1VectorDistrArray.html',1,'edda']]], + ['vectspatialdecompexample_2ecpp',['vectSpatialDecompExample.cpp',['../vectSpatialDecompExample_8cpp.html',1,'']]], + ['vsp_5fnew',['vsp_new',['../gmm__raw2vtk_8cpp.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): gmm_raw2vtk.cpp'],['../streamlineMonteCarlo_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineMonteCarlo.cpp'],['../test__vtk__filters_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtk_filters.cpp'],['../vtk__common_8h.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): vtk_common.h']]], + ['vtk_5fcommon_2eh',['vtk_common.h',['../vtk__common_8h.html',1,'']]], + ['vtkbooleanmacro',['vtkBooleanMacro',['../classeddaRandomProbeFilter.html#a632a9adcdd3c22cdaa0284a3b1493318',1,'eddaRandomProbeFilter::vtkBooleanMacro(SpatialMatch, int) vtkGetObjectMacro(ValidPoints'],['../classeddaRandomProbeFilter.html#ae7b08929533571ac659a611b2ee7cc19',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassCellArrays, int) vtkGetMacro(PassCellArrays'],['../classeddaRandomProbeFilter.html#a97616b6d4dcdb3c4cfcb4d1144d22b85',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassFieldArrays, int) vtkGetMacro(PassFieldArrays']]], + ['vtkgetmacro',['vtkGetMacro',['../classeddaRandomProbeFilter.html#a4619b8633f69191c2f57be11d353e332',1,'eddaRandomProbeFilter::vtkGetMacro()'],['../classeddaThreshold.html#a2cfe4bf36cbcaff6f5066ef3f5898d7e',1,'eddaThreshold::vtkGetMacro(UpperThreshold, double) vtkSetMacro(UpperThreshold'],['../classeddaThreshold.html#a4a79ea1388a0d06fce23a8d0e236dc5a',1,'eddaThreshold::vtkGetMacro(LowerThreshold, double) vtkSetMacro(LowerThreshold'],['../classeddaUncertainIsocontour.html#a95f2f24b18e0e8c82d9c8acff99ce76b',1,'eddaUncertainIsocontour::vtkGetMacro()']]], + ['vtksetmacro',['vtkSetMacro',['../classeddaRandomProbeFilter.html#a2d304675305857537943e50e8976ceed',1,'eddaRandomProbeFilter::vtkSetMacro(SpatialMatch, int) vtkGetMacro(SpatialMatch'],['../classeddaRandomProbeFilter.html#a8c635957d28f76e3a39c3c710a1bdb74',1,'eddaRandomProbeFilter::vtkSetMacro(PassPointArrays, int) vtkBooleanMacro(PassPointArrays'],['../classeddaRandomProbeFilter.html#abd7abdc9a670f285cdc24f276f57cff4',1,'eddaRandomProbeFilter::vtkSetMacro(Tolerance, double) vtkGetMacro(Tolerance'],['../classeddaRandomProbeFilter.html#a9377fb7f3778182774721ca646ae69cb',1,'eddaRandomProbeFilter::vtkSetMacro(ComputeTolerance, bool) vtkBooleanMacro(ComputeTolerance']]], + ['vtksetstringmacro',['vtkSetStringMacro',['../classeddaRandomProbeFilter.html#adbb19457e8f2f3a68519b3649037932d',1,'eddaRandomProbeFilter']]], + ['vtkstandardnewmacro',['vtkStandardNewMacro',['../eddaRandomProbeFilter_8cpp.html#a0a1074a80804b83f743eb0f675b4c85e',1,'vtkStandardNewMacro(eddaRandomProbeFilter) using namespace edda: eddaRandomProbeFilter.cpp'],['../eddaRandomSampleField_8cpp.html#ae9a8045eb759c1a45611a08def30a823',1,'vtkStandardNewMacro(eddaRandomSampleField) eddaRandomSampleField: eddaRandomSampleField.cpp'],['../eddaSamplingArray_8cpp.html#adf7058b06c210d0698668f31d52eadb9',1,'vtkStandardNewMacro(eddaSamplingArray): eddaSamplingArray.cpp'],['../eddaThreshold_8cpp.html#ab5fbf37bee4392a739755137825c30b3',1,'vtkStandardNewMacro(eddaThreshold) eddaThreshold: eddaThreshold.cpp'],['../eddaUncertainIsocontour_8cpp.html#af93440a47bf1832f11ac6e7d30d53c4e',1,'vtkStandardNewMacro(eddaUncertainIsocontour) eddaUncertainIsocontour: eddaUncertainIsocontour.cpp']]], + ['vtktypemacro',['vtkTypeMacro',['../classeddaRandomProbeFilter.html#a029be5a10e6c5717bacc393095cd3be8',1,'eddaRandomProbeFilter::vtkTypeMacro()'],['../classeddaRandomSampleField.html#a7d1f46f9e336cace7a8b63a50683d8b6',1,'eddaRandomSampleField::vtkTypeMacro()'],['../classeddaSamplingArray.html#afca484cd5b215ae296be7583f0349714',1,'eddaSamplingArray::vtkTypeMacro()'],['../classeddaThreshold.html#a10f5f73d5d06ddb61f395b0118ade35b',1,'eddaThreshold::vtkTypeMacro()'],['../classeddaUncertainIsocontour.html#ae28f67fcb8397bb23bf05be7e94930ef',1,'eddaUncertainIsocontour::vtkTypeMacro()']]], + ['vtkvectorofarrays',['vtkVectorOfArrays',['../classeddaRandomProbeFilter_1_1vtkVectorOfArrays.html',1,'eddaRandomProbeFilter']]] ]; diff --git a/html/search/all_17.html b/html/search/all_17.html index 6dcb33c..e5fec60 100644 --- a/html/search/all_17.html +++ b/html/search/all_17.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_17.js b/html/search/all_17.js index 41b1e2b..323f868 100644 --- a/html/search/all_17.js +++ b/html/search/all_17.js @@ -1,6 +1,20 @@ var searchData= [ - ['z',['z',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a76b6cf67e0290df95229981de908f65b',1,'edda::Vector< Real, 3 >::z()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a672e9040328cb8ee9ced09dde2970819',1,'edda::Vector< Real, 4 >::z()']]], - ['zcelldim',['zcelldim',['../classedda_1_1CartesianGrid.html#ab519af80b6c046f434155d66f39e0621',1,'edda::CartesianGrid']]], - ['zdim',['zdim',['../classedda_1_1CartesianGrid.html#ac41b35c859961fbd6a087b42ec31dd26',1,'edda::CartesianGrid']]] + ['w',['w',['../structedda_1_1dist_1_1GMMTuple.html#a3f52857178189dcb76b5132a60c0a50a',1,'edda::dist::GMMTuple::w()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a7ac0955f0bf91e451e907807b1341dd2',1,'edda::Vector< Real, 4 >::w()']]], + ['walk_5fon_5fx_5fboundary',['walk_on_x_boundary',['../classedda_1_1CurvilinearGrid.html#a6038ba308e31d9efa551dcf24ed2e629',1,'edda::CurvilinearGrid']]], + ['walk_5fon_5fy_5fboundary',['walk_on_y_boundary',['../classedda_1_1CurvilinearGrid.html#a84cf9f0447e45af0081effb7544cd716',1,'edda::CurvilinearGrid']]], + ['walk_5fon_5fz_5fboundary',['walk_on_z_boundary',['../classedda_1_1CurvilinearGrid.html#a74af8698703ccc3b1ecdf7498adabb6f',1,'edda::CurvilinearGrid']]], + ['weighted_5fsum',['WEIGHTED_SUM',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781a5cd0cc87f7789a6f7120f6f4f55594ed',1,'edda']]], + ['weights',['weights',['../classedda_1_1dist_1_1JointGMM.html#a479a4af061d7414da3a2b42df3f2e87f',1,'edda::dist::JointGMM']]], + ['width',['width',['../structBMPImage.html#a35875dd635eb414965fd87e169b8fb25',1,'BMPImage']]], + ['word',['WORD',['../bmp__image_8h.html#a197942eefa7db30960ae396d68339b97',1,'bmp_image.h']]], + ['write_5fnrrd_5f3d',['write_nrrd_3d',['../namespaceedda.html#a16acb70ca142da596ce521f7f7e88b48',1,'edda']]], + ['writeeddadataset',['writeEddaDataset',['../namespaceedda.html#ae4df2b63adb378e5ec4d5faea44fb276',1,'edda::writeEddaDataset(shared_ptr< Dataset< VECTOR3 > > dataset, const string &edda_file)'],['../namespaceedda.html#ad2590515cca348f64cf15b3852c52e12',1,'edda::writeEddaDataset(shared_ptr< Dataset< Real > > dataset, const string &edda_file)'],['../namespaceedda.html#a3aa48f7da7ce22160f2b64385ab95083',1,'edda::writeEddaDataset(std::shared_ptr< Dataset< Real > >, const std::string &edda_file)'],['../namespaceedda.html#ac32ce7972112fa2097a809a8d80b9f15',1,'edda::writeEddaDataset(std::shared_ptr< Dataset< VECTOR3 > >, const std::string &edda_file)']]], + ['writeeddadatasettemplate',['writeEddaDatasetTemplate',['../namespaceedda.html#af85dcaf04d30ad3f92f1ce40363deea4',1,'edda']]], + ['writeeddavtkdataset',['writeEddaVtkDataset',['../namespaceedda.html#ac26c1973bdecea1b5e4dfd63e61e814f',1,'edda::writeEddaVtkDataset(shared_ptr< Dataset< Real > > dataset, const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#af6740e072ccbb643ef565257d2078740',1,'edda::writeEddaVtkDataset(std::shared_ptr< Dataset< Real > >, const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['writegmmarrays',['writeGmmArrays',['../namespaceedda.html#a03aad037e96b7411d05ab26d952a015a',1,'edda']]], + ['writehistoarrays',['writeHistoArrays',['../namespaceedda.html#aa06eac99c4d7bccd193695b0d5b37aad',1,'edda']]], + ['writeimage',['writeImage',['../structBMPImage.html#a0f952cefc332e3f040d86199ba0a2aac',1,'BMPImage']]], + ['writetovtk',['writeToVTK',['../classedda_1_1DistributionModeler.html#a943931a00c79d6ede792c6e21ebb06f3',1,'edda::DistributionModeler']]], + ['writevoidpointer',['WriteVoidPointer',['../classeddaSamplingArray.html#a57dd19cefe182bb6846b618b14d5bcd9',1,'eddaSamplingArray']]] ]; diff --git a/html/search/all_18.html b/html/search/all_18.html index f83cb81..cbc2155 100644 --- a/html/search/all_18.html +++ b/html/search/all_18.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_18.js b/html/search/all_18.js index 702caa5..a4404cd 100644 --- a/html/search/all_18.js +++ b/html/search/all_18.js @@ -1,21 +1,7 @@ var searchData= [ - ['_7eabstractdataarray',['~AbstractDataArray',['../classedda_1_1AbstractDataArray.html#aa83756aa71cb59e3537e02795b8c8810',1,'edda::AbstractDataArray']]], - ['_7ecartesiangrid',['~CartesianGrid',['../classedda_1_1CartesianGrid.html#a2fdf7940fc29d204446d0d6480ef4c10',1,'edda::CartesianGrid']]], - ['_7edatasamplingarray',['~DataSamplingArray',['../classedda_1_1DataSamplingArray.html#a48ff8632fb766faafb8fcfcd12a73636',1,'edda::DataSamplingArray']]], - ['_7edataset',['~Dataset',['../classedda_1_1Dataset.html#a5173045ab90bbe2caa946c095a758d22',1,'edda::Dataset']]], - ['_7eeddarandomprobefilter',['~eddaRandomProbeFilter',['../classeddaRandomProbeFilter.html#aa0e3cd815bf24e3396bac4b6f49a41a9',1,'eddaRandomProbeFilter']]], - ['_7eeddarandomsamplefield',['~eddaRandomSampleField',['../classeddaRandomSampleField.html#ae90286e2863e54f07bce0eb0edf7bc48',1,'eddaRandomSampleField']]], - ['_7eeddasamplingarray',['~eddaSamplingArray',['../classeddaSamplingArray.html#a0dbdad926057f5eb28adaee958f9e540',1,'eddaSamplingArray']]], - ['_7eeddathreshold',['~eddaThreshold',['../classeddaThreshold.html#a2c91c92373ffd672422781819ea4342d',1,'eddaThreshold']]], - ['_7eeddauncertainisocontour',['~eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#af4cfdab36d73c447476db07036452231',1,'eddaUncertainIsocontour']]], - ['_7egmmvtkdataarray',['~GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a1316dfe2b3ac642ed6cd718619af4587',1,'edda::GmmVtkDataArray']]], - ['_7egrid',['~Grid',['../classedda_1_1Grid.html#a72f84115bb6a22fa18149e2c46141bed',1,'edda::Grid']]], - ['_7endarray',['~NdArray',['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray::~NdArray()'],['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray::~NdArray()']]], - ['_7eregularcartesiangrid',['~RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a07680966dceebd2c70513e483058ec48',1,'edda::RegularCartesianGrid']]], - ['_7escalararray',['~ScalarArray',['../classedda_1_1ScalarArray.html#afbe5f3d3c5372d129ed274d3f377c790',1,'edda::ScalarArray']]], - ['_7evectorarray',['~VectorArray',['../classedda_1_1VectorArray.html#a70d077e16628af4ad2af2f517938b393',1,'edda::VectorArray']]], - ['_7evtkcompositedataprobefilter',['~vtkCompositeDataProbeFilter',['../classvtkCompositeUncertainIsocontour.html#a27995e83da016c5383664ee72f81ca9f',1,'vtkCompositeUncertainIsocontour']]], - ['_7evtkeddareader',['~vtkEddaReader',['../classvtkEddaReader.html#a81c16719feb51cbb9d9b2c16042f47a5',1,'vtkEddaReader']]], - ['_7evtksamplingarray',['~vtkSamplingArray',['../classvtkSamplingArray.html#ac4a08f30d4eb37854a6079a0105209dc',1,'vtkSamplingArray']]] + ['x',['x',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a19d61540f816dd232115080e8d9e245c',1,'edda::dist::detail::_getPdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a326ad483b659e24b2208adde995108e5',1,'edda::dist::detail::_getCdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html#a70e558e11ffb133930469d8f615ac3c7',1,'edda::dist::detail::_getJointPdf::x()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a119f5b1551d2abfd3b5109abe4c0f1eb',1,'edda::Vector< Real, 3 >::x()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a3eede0379e7658c343b2dfc09463fdda',1,'edda::Vector< Real, 4 >::x()']]], + ['xcelldim',['xcelldim',['../classedda_1_1CartesianGrid.html#ab177745dd86d88eb84d67500748e2c00',1,'edda::CartesianGrid']]], + ['xdim',['xdim',['../classedda_1_1CartesianGrid.html#aeb7c6fb8918008f17898bbffd2afdb8b',1,'edda::CartesianGrid']]], + ['xsize',['xSize',['../classedda_1_1DistributionModeler.html#a92d498bbd832055ef0c8adb693db962b',1,'edda::DistributionModeler::xSize()'],['../classedda_1_1VecDistrModeler.html#aac9fad2bd21019d3ded852c3b516460f',1,'edda::VecDistrModeler::xSize()']]] ]; diff --git a/html/search/namespaces_1.html b/html/search/all_19.html similarity index 89% rename from html/search/namespaces_1.html rename to html/search/all_19.html index 1bc0229..100b2ff 100644 --- a/html/search/namespaces_1.html +++ b/html/search/all_19.html @@ -1,9 +1,9 @@ - + - + diff --git a/html/search/all_19.js b/html/search/all_19.js new file mode 100644 index 0000000..6698135 --- /dev/null +++ b/html/search/all_19.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['y',['y',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a4e4a241273c2a448c8de8f41730c4c38',1,'edda::Vector< Real, 3 >::y()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a47ff40206ce06035d5b6079c0c2fb754',1,'edda::Vector< Real, 4 >::y()']]], + ['ycelldim',['ycelldim',['../classedda_1_1CartesianGrid.html#a260d4e7f4510c77bfc9341707bf8e341',1,'edda::CartesianGrid']]], + ['ydim',['ydim',['../classedda_1_1CartesianGrid.html#ab018ac1a44d18def0a02d9b1691e4a06',1,'edda::CartesianGrid']]], + ['ysize',['ySize',['../classedda_1_1DistributionModeler.html#af4685ae8856fcbbcfdfb77fb6a8ceafb',1,'edda::DistributionModeler::ySize()'],['../classedda_1_1VecDistrModeler.html#a9c97557c459f23ae7211997d707bd6fd',1,'edda::VecDistrModeler::ySize()']]] +]; diff --git a/html/search/all_1a.html b/html/search/all_1a.html new file mode 100644 index 0000000..559a0d8 --- /dev/null +++ b/html/search/all_1a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/all_1a.js b/html/search/all_1a.js new file mode 100644 index 0000000..a90837b --- /dev/null +++ b/html/search/all_1a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['z',['z',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#aecb4ffd5dba9a6e926670948552f8973',1,'edda::Vector< Real, 3 >::z()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6bfa739f8915f0c72267869cae15777a',1,'edda::Vector< Real, 4 >::z()']]], + ['zcelldim',['zcelldim',['../classedda_1_1CartesianGrid.html#ab519af80b6c046f434155d66f39e0621',1,'edda::CartesianGrid']]], + ['zdim',['zdim',['../classedda_1_1CartesianGrid.html#ac41b35c859961fbd6a087b42ec31dd26',1,'edda::CartesianGrid']]], + ['zero',['Zero',['../classedda_1_1Vector.html#aed7f478dfd4b68a56a7e09c883e79ace',1,'edda::Vector::Zero()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a86df4084cdc8d3a7206b73cd181119df',1,'edda::Vector< Real, 3 >::Zero()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6b0253f857662f34adbc7710fa7dbec1',1,'edda::Vector< Real, 4 >::Zero()']]], + ['zsize',['zSize',['../classedda_1_1DistributionModeler.html#a18f70bf8ab01e2aee85abcbcbcf87fec',1,'edda::DistributionModeler::zSize()'],['../classedda_1_1VecDistrModeler.html#ab7fb9ac27f5ecf38d1aa48b98d1e366b',1,'edda::VecDistrModeler::zSize()']]] +]; diff --git a/html/search/all_1b.html b/html/search/all_1b.html new file mode 100644 index 0000000..7369ced --- /dev/null +++ b/html/search/all_1b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/all_1b.js b/html/search/all_1b.js new file mode 100644 index 0000000..e007cca --- /dev/null +++ b/html/search/all_1b.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['_7ecartesiangrid',['~CartesianGrid',['../classedda_1_1CartesianGrid.html#a2fdf7940fc29d204446d0d6480ef4c10',1,'edda::CartesianGrid']]], + ['_7ecurvilineargrid',['~CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html#ab3e32ac4de956bebafc30247477732f1',1,'edda::CurvilinearGrid']]], + ['_7edataset',['~Dataset',['../classedda_1_1Dataset.html#a5173045ab90bbe2caa946c095a758d22',1,'edda::Dataset']]], + ['_7edistrarray',['~DistrArray',['../classedda_1_1DistrArray.html#a07c587c29d37dceb1d589d68af6c4de5',1,'edda::DistrArray']]], + ['_7eeddarandomprobefilter',['~eddaRandomProbeFilter',['../classeddaRandomProbeFilter.html#aa0e3cd815bf24e3396bac4b6f49a41a9',1,'eddaRandomProbeFilter']]], + ['_7eeddarandomsamplefield',['~eddaRandomSampleField',['../classeddaRandomSampleField.html#ae90286e2863e54f07bce0eb0edf7bc48',1,'eddaRandomSampleField']]], + ['_7eeddasamplingarray',['~eddaSamplingArray',['../classeddaSamplingArray.html#a0dbdad926057f5eb28adaee958f9e540',1,'eddaSamplingArray']]], + ['_7eeddathreshold',['~eddaThreshold',['../classeddaThreshold.html#a2c91c92373ffd672422781819ea4342d',1,'eddaThreshold']]], + ['_7eeddauncertainisocontour',['~eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#af4cfdab36d73c447476db07036452231',1,'eddaUncertainIsocontour']]], + ['_7egmmvtkdataarray',['~GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a1316dfe2b3ac642ed6cd718619af4587',1,'edda::GmmVtkDataArray']]], + ['_7egrid',['~Grid',['../classedda_1_1Grid.html#a72f84115bb6a22fa18149e2c46141bed',1,'edda::Grid']]], + ['_7ejointdistrarray',['~JointDistrArray',['../classedda_1_1JointDistrArray.html#ac68b6a97c45088ea4a1e5dfa0c70f065',1,'edda::JointDistrArray']]], + ['_7endarray',['~NdArray',['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray']]], + ['_7eregularcartesiangrid',['~RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a07680966dceebd2c70513e483058ec48',1,'edda::RegularCartesianGrid']]], + ['_7escalardistrarray',['~ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html#a4f9ce07472da7b0befdbe9272b6b9d33',1,'edda::ScalarDistrArray']]], + ['_7evectordistrarray',['~VectorDistrArray',['../classedda_1_1VectorDistrArray.html#a6d2f1ca030272b3dd08da422f7d21ae6',1,'edda::VectorDistrArray']]] +]; diff --git a/html/search/all_2.html b/html/search/all_2.html index 95ded12..0f777c2 100644 --- a/html/search/all_2.html +++ b/html/search/all_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_2.js b/html/search/all_2.js index ad9742c..59a3809 100644 --- a/html/search/all_2.js +++ b/html/search/all_2.js @@ -1,10 +1,32 @@ var searchData= [ ['baryinterp',['baryInterp',['../namespaceedda.html#a23a4a142a4ba07fb1318645250902c4e',1,'edda']]], - ['begin',['begin',['../classedda_1_1NdArray.html#a686014415d0469e79cac5164b300f2ac',1,'edda::NdArray::begin()'],['../classedda_1_1GmmArray.html#acb64ace250f0432e5cbc7e04a5cebc21',1,'edda::GmmArray::begin()'],['../classedda_1_1NdArray.html#a686014415d0469e79cac5164b300f2ac',1,'edda::NdArray::begin()']]], + ['begin',['begin',['../classedda_1_1NdArray.html#a20be2048dabae43730f822bf95f4261e',1,'edda::NdArray::begin()'],['../classedda_1_1GmmArray.html#acb64ace250f0432e5cbc7e04a5cebc21',1,'edda::GmmArray::begin()'],['../classedda_1_1HistoArray.html#adba95c3695e7e78acddd71daece4de9e',1,'edda::HistoArray::begin()']]], + ['bfoffbits',['bfOffBits',['../structtagBITMAPFILEHEADER.html#a5740a971a88afb51b014f54d9eb1c95c',1,'tagBITMAPFILEHEADER']]], + ['bfreserved1',['bfReserved1',['../structtagBITMAPFILEHEADER.html#aee794445cde1ce265644c1718afc6b52',1,'tagBITMAPFILEHEADER']]], + ['bfreserved2',['bfReserved2',['../structtagBITMAPFILEHEADER.html#a017d814d24a7c65de297be31856501dc',1,'tagBITMAPFILEHEADER']]], + ['bfsize',['bfSize',['../structtagBITMAPFILEHEADER.html#ad6fa0d3a907934d597b2773bc45e4d43',1,'tagBITMAPFILEHEADER']]], + ['bftype',['bfType',['../structtagBITMAPFILEHEADER.html#a64ced0b35fb93012ce3d66b2f1dd5bb8',1,'tagBITMAPFILEHEADER']]], + ['bibitcount',['biBitCount',['../structtagBITMAPINFOHEADER.html#a713c58f9cf7d5f115938d189d59fadf5',1,'tagBITMAPINFOHEADER']]], + ['biclrimportant',['biClrImportant',['../structtagBITMAPINFOHEADER.html#a637282b108fc8ac3bdf41479f9931ccb',1,'tagBITMAPINFOHEADER']]], + ['biclrused',['biClrUsed',['../structtagBITMAPINFOHEADER.html#adbf6bd52839895672030a734d2ae752f',1,'tagBITMAPINFOHEADER']]], + ['bicompression',['biCompression',['../structtagBITMAPINFOHEADER.html#a6b50d93eae77d44af8907740e337583d',1,'tagBITMAPINFOHEADER']]], + ['biheight',['biHeight',['../structtagBITMAPINFOHEADER.html#aa18cf290b7f7a6d1cc8058feae85ab68',1,'tagBITMAPINFOHEADER']]], ['bilerp',['biLerp',['../namespaceedda.html#a923e527ea437795f77c2adda560f66ed',1,'edda']]], - ['boundary',['boundary',['../classedda_1_1Grid.html#a3cd1a33c83c842a7f4bc4d762ceef6d7',1,'edda::Grid::boundary()'],['../classedda_1_1CartesianGrid.html#a1d097420ee875e5843c0a2d74574a782',1,'edda::CartesianGrid::boundary()'],['../classedda_1_1RegularCartesianGrid.html#a010a1b53e23329d5346a24591d397867',1,'edda::RegularCartesianGrid::boundary()']]], - ['boundaryintersection',['boundaryIntersection',['../classedda_1_1Grid.html#ac228595cf39fff8e5230f53a5b76687a',1,'edda::Grid::boundaryIntersection()'],['../classedda_1_1CartesianGrid.html#a387121fae344bb70e0585c62193c161f',1,'edda::CartesianGrid::boundaryIntersection()'],['../classedda_1_1RegularCartesianGrid.html#a13bdc8d580c22e3f00dea4d5d2fdb4d7',1,'edda::RegularCartesianGrid::boundaryIntersection()']]], + ['bincount',['binCount',['../classedda_1_1DistributionModeler.html#a410bc6124b366c8c93082bccaf480a9d',1,'edda::DistributionModeler::binCount()'],['../classedda_1_1VecDistrModeler.html#aba70279cacbe3c50419282b45f8af973',1,'edda::VecDistrModeler::binCount()']]], + ['biplanes',['biPlanes',['../structtagBITMAPINFOHEADER.html#a261e0f0a578bcd4d53a4a221e6ebe2fa',1,'tagBITMAPINFOHEADER']]], + ['bisize',['biSize',['../structtagBITMAPINFOHEADER.html#a78b47f256953606cbf23cd665452a263',1,'tagBITMAPINFOHEADER']]], + ['bisizeimage',['biSizeImage',['../structtagBITMAPINFOHEADER.html#ac69dfda61a32d8ec53dd11ef165d198b',1,'tagBITMAPINFOHEADER']]], + ['bitmapfileheader',['BITMAPFILEHEADER',['../bmp__image_8h.html#a38b6ed7c3c145c657e13b5d5053833cf',1,'bmp_image.h']]], + ['bitmapimage',['bitmapImage',['../structBMPImage.html#abe81c46c20b28b04cb9fb970b1a3c205',1,'BMPImage']]], + ['bitmapinfoheader',['BITMAPINFOHEADER',['../bmp__image_8h.html#a5334657d9ccd03e5f7681d8172c7b73c',1,'bmp_image.h']]], + ['biwidth',['biWidth',['../structtagBITMAPINFOHEADER.html#a4bbc605184be98c4da36f707f7695e0f',1,'tagBITMAPINFOHEADER']]], + ['bixpelspermeter',['biXPelsPerMeter',['../structtagBITMAPINFOHEADER.html#ae363738b6e92248a7be41f4e7ed55c54',1,'tagBITMAPINFOHEADER']]], + ['biypelspermeter',['biYPelsPerMeter',['../structtagBITMAPINFOHEADER.html#ac6226594275d045ff0d03849945d920f',1,'tagBITMAPINFOHEADER']]], + ['bmp_5fimage_2eh',['bmp_image.h',['../bmp__image_8h.html',1,'']]], + ['bmpimage',['BMPImage',['../structBMPImage.html',1,'BMPImage'],['../structBMPImage.html#a836750cb00a5a32d72823f6a14d6c117',1,'BMPImage::BMPImage()']]], + ['boundary',['boundary',['../classedda_1_1CurvilinearGrid.html#a1365bfbceb738b5bef334a5ac2722d2d',1,'edda::CurvilinearGrid::boundary()'],['../classedda_1_1Grid.html#a3cd1a33c83c842a7f4bc4d762ceef6d7',1,'edda::Grid::boundary()'],['../classedda_1_1CartesianGrid.html#a1d097420ee875e5843c0a2d74574a782',1,'edda::CartesianGrid::boundary()'],['../classedda_1_1RegularCartesianGrid.html#a010a1b53e23329d5346a24591d397867',1,'edda::RegularCartesianGrid::boundary()']]], + ['boundaryintersection',['boundaryIntersection',['../classedda_1_1CurvilinearGrid.html#a680b178fa4409f0da29098b1c5c03158',1,'edda::CurvilinearGrid::boundaryIntersection()'],['../classedda_1_1Grid.html#ac228595cf39fff8e5230f53a5b76687a',1,'edda::Grid::boundaryIntersection()'],['../classedda_1_1CartesianGrid.html#a387121fae344bb70e0585c62193c161f',1,'edda::CartesianGrid::boundaryIntersection()'],['../classedda_1_1RegularCartesianGrid.html#a13bdc8d580c22e3f00dea4d5d2fdb4d7',1,'edda::RegularCartesianGrid::boundaryIntersection()']]], ['box_5fmuller',['box_muller',['../namespaceedda.html#a99e63c404645ad326c632c2ce97beaba',1,'edda']]], ['buildfieldlist',['BuildFieldList',['../classeddaRandomProbeFilter.html#a39a7d796afb3ca9f524b32981c3fff99',1,'eddaRandomProbeFilter']]] ]; diff --git a/html/search/all_3.html b/html/search/all_3.html index 4d312d0..ac9dbf9 100644 --- a/html/search/all_3.html +++ b/html/search/all_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_3.js b/html/search/all_3.js index ac0a465..c96875a 100644 --- a/html/search/all_3.js +++ b/html/search/all_3.js @@ -2,22 +2,37 @@ var searchData= [ ['cartesiangrid',['CartesianGrid',['../classedda_1_1CartesianGrid.html',1,'edda']]], ['cartesiangrid',['CartesianGrid',['../classedda_1_1CartesianGrid.html#a1942381db5e2825ac62960dbe333f035',1,'edda::CartesianGrid::CartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1CartesianGrid.html#af59ed87c760524442d7f273212e03bc1',1,'edda::CartesianGrid::CartesianGrid()']]], - ['cast',['cast',['../classedda_1_1Tuple.html#a573a869c415b5881da83c9a35dd4cc10',1,'edda::Tuple']]], + ['cast',['cast',['../classedda_1_1Tuple.html#a97fa98eaebf6d2a011778774f2f22115',1,'edda::Tuple']]], + ['cell',['Cell',['../structedda_1_1Cell.html',1,'edda']]], + ['cell_5fhexahedron',['CELL_HEXAHEDRON',['../curvilinear__grid_8h.html#ab8b0be26d6b4bffc0d52b999c2cebcbe',1,'curvilinear_grid.h']]], + ['cell_5ftetrahedron',['CELL_TETRAHEDRON',['../curvilinear__grid_8h.html#a4de2af08cf6101d17941cb01f6ba2245',1,'curvilinear_grid.h']]], ['celllist',['CellList',['../classeddaRandomProbeFilter.html#af4e084d3abe6b8555ac53a5bb1aa302b',1,'eddaRandomProbeFilter']]], ['celltype',['CellType',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63e',1,'edda']]], - ['cellvolume',['cellVolume',['../classedda_1_1Grid.html#a226725af5b61a11b52d97e66ea899703',1,'edda::Grid::cellVolume()'],['../classedda_1_1CartesianGrid.html#ac7fd54a60214a297fb5ea0428e75c522',1,'edda::CartesianGrid::cellVolume()'],['../classedda_1_1RegularCartesianGrid.html#a466ddf48fea9cfa189384960df43931b',1,'edda::RegularCartesianGrid::cellVolume()']]], + ['cellvolume',['cellVolume',['../classedda_1_1CurvilinearGrid.html#aaa18ce71a73a9ae783cd2e210b45743b',1,'edda::CurvilinearGrid::cellVolume()'],['../classedda_1_1Grid.html#a226725af5b61a11b52d97e66ea899703',1,'edda::Grid::cellVolume()'],['../classedda_1_1CartesianGrid.html#ac7fd54a60214a297fb5ea0428e75c522',1,'edda::CartesianGrid::cellVolume()'],['../classedda_1_1RegularCartesianGrid.html#a466ddf48fea9cfa189384960df43931b',1,'edda::RegularCartesianGrid::cellVolume()']]], + ['central_5fdifference_5fneighbors',['central_difference_neighbors',['../classedda_1_1CurvilinearGrid.html#a0ff0a356e08882701bad8deff4d18fe7',1,'edda::CurvilinearGrid']]], + ['check_5fconvergence',['check_convergence',['../namespaceedda.html#a86f6ef9cc6522926fc4bc18985e132d5',1,'edda']]], ['clamp',['clamp',['../classedda_1_1Vector.html#a51a82f3e95eb87bf98aaa26f3d2bd03a',1,'edda::Vector::clamp()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a08f179cb06c5aae652a49b02c65fd941',1,'edda::Vector< Real, 4 >::clamp()']]], - ['clearlookup',['ClearLookup',['../classvtkSamplingArray.html#ac89f082a67c20a0d317622d5c64f4e18',1,'vtkSamplingArray::ClearLookup()'],['../classeddaSamplingArray.html#a8836ff715cad39c5d9244a267e8ef3d1',1,'eddaSamplingArray::ClearLookup()']]], + ['classprob',['classprob',['../namespaceedda.html#ac61d9325dd77e388d2f85ca345b11754',1,'edda']]], + ['clearlookup',['ClearLookup',['../classeddaSamplingArray.html#a8836ff715cad39c5d9244a267e8ef3d1',1,'eddaSamplingArray']]], ['common_2eh',['common.h',['../common_8h.html',1,'']]], ['components',['components',['../classedda_1_1GmmVtkDataArray.html#a31ef4c800c0abd9aa8ec05e620ce5e0c',1,'edda::GmmVtkDataArray']]], - ['compute',['Compute',['../classeddaUncertainIsocontour.html#a63962b7bbddb0b53803b5f722a736a1d',1,'eddaUncertainIsocontour::Compute()'],['../classedda_1_1StreamTracer.html#adbbf6510363f650089804bd2a45d0f88',1,'edda::StreamTracer::compute()']]], - ['computebbox',['computeBBox',['../classedda_1_1Grid.html#a538c4f44fa3b37c892705f02475ba568',1,'edda::Grid::computeBBox()'],['../classedda_1_1RegularCartesianGrid.html#ac26c70ad564400a15ef51ad1a5489c59',1,'edda::RegularCartesianGrid::computeBBox()']]], - ['computestreamlines',['computeStreamlines',['../streamlineGaussianVTK_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'computeStreamlines(vtkSmartPointer< vtkPolyData > vtk_seeds): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'computeStreamlines(vtkSmartPointer< vtkPolyData > vtk_seeds): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#ac594a54429651d60641a73ca31217c1b',1,'computeStreamlines(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): test_vtk_pipeline.cpp']]], + ['compute',['compute',['../classedda_1_1StreamTracer.html#adbbf6510363f650089804bd2a45d0f88',1,'edda::StreamTracer::compute()'],['../classeddaUncertainIsocontour.html#a63962b7bbddb0b53803b5f722a736a1d',1,'eddaUncertainIsocontour::Compute()']]], + ['computebbox',['computeBBox',['../classedda_1_1CurvilinearGrid.html#a3936c83ac19e8d0eaae70a215276b198',1,'edda::CurvilinearGrid::computeBBox()'],['../classedda_1_1Grid.html#a538c4f44fa3b37c892705f02475ba568',1,'edda::Grid::computeBBox()'],['../classedda_1_1RegularCartesianGrid.html#ac26c70ad564400a15ef51ad1a5489c59',1,'edda::RegularCartesianGrid::computeBBox()']]], + ['computegmm',['computeGMM',['../classedda_1_1DistributionModeler.html#aec88585c3ee7d12c32e77d9d083792b2',1,'edda::DistributionModeler::computeGMM()'],['../classedda_1_1VecDistrModeler.html#ae693d32fc295776c212691b1da47c32b',1,'edda::VecDistrModeler::computeGMM()']]], + ['computehistogram',['computeHistogram',['../classedda_1_1DistributionModeler.html#aa1b07f595d22ab6dffd4990028cd1239',1,'edda::DistributionModeler::computeHistogram()'],['../classedda_1_1VecDistrModeler.html#a8b6e93d3a61a505c6b15c93532725cb6',1,'edda::VecDistrModeler::computeHistogram()']]], + ['computeloglikelihood',['computeLogLikelihood',['../namespaceedda.html#a3cd88e2836805d8b67720a7ea3559945',1,'edda']]], + ['computestreamlines',['computeStreamlines',['../streamlineMonteCarlo_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'streamlineMonteCarlo.cpp']]], ['computetolerance',['ComputeTolerance',['../classeddaRandomProbeFilter.html#aaaf5ce5de7410d35fcce0c50af55ce97',1,'eddaRandomProbeFilter']]], - ['continuousdistribution',['ContinuousDistribution',['../classedda_1_1dist_1_1ContinuousDistribution.html',1,'edda::dist']]], - ['copy_5fto_5fhost',['copy_to_host',['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray::copy_to_host(OutputIterator out)'],['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray::copy_to_host(OutputIterator out)']]], - ['createdefaultexecutive',['CreateDefaultExecutive',['../classvtkCompositeUncertainIsocontour.html#a05e48e9f4970fa0ae87b51707fe7bfa0',1,'vtkCompositeUncertainIsocontour']]], + ['conditionalhist',['conditionalHist',['../structedda_1_1dist_1_1JointHistogram.html#a0f45088ac3316d3da5a9c6ed9b6e1225',1,'edda::dist::JointHistogram']]], + ['continuousdistributiontag',['ContinuousDistributionTag',['../classedda_1_1dist_1_1ContinuousDistributionTag.html',1,'edda::dist']]], + ['coordinates_5fat_5fcell',['coordinates_at_cell',['../classedda_1_1CurvilinearGrid.html#a223c4304bbe20fffeba1db6bcd804737',1,'edda::CurvilinearGrid']]], + ['coordinates_5fat_5fvertex',['coordinates_at_vertex',['../classedda_1_1CurvilinearGrid.html#a533dc9283bb06d8e21e6e35d1896baa5',1,'edda::CurvilinearGrid']]], + ['copy_5fto_5fhost',['copy_to_host',['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray']]], ['cross',['cross',['../namespaceedda.html#afeb533ece9d7f2447ee12393696a5ffb',1,'edda']]], ['cube',['CUBE',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63eaee5742601be37980f6574329a54c49bc',1,'edda']]], - ['cubelerp',['cubeLerp',['../namespaceedda.html#a02b3b3fb6f033d50cda9fbbe40358a04',1,'edda']]] + ['cubelerp',['cubeLerp',['../namespaceedda.html#a02b3b3fb6f033d50cda9fbbe40358a04',1,'edda']]], + ['curvilinear_5fgrid_2ecpp',['curvilinear_grid.cpp',['../curvilinear__grid_8cpp.html',1,'']]], + ['curvilinear_5fgrid_2eh',['curvilinear_grid.h',['../curvilinear__grid_8h.html',1,'']]], + ['curvilineargrid',['CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html',1,'edda']]], + ['curvilineargrid',['CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html#abf2957e4165674f4f9369abfd67b23cb',1,'edda::CurvilinearGrid::CurvilinearGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1CurvilinearGrid.html#a4fd415a721b141d7c4c22b70b6f0e716',1,'edda::CurvilinearGrid::CurvilinearGrid(int *dim, VECTOR3 *pVertexGeom)'],['../classedda_1_1CurvilinearGrid.html#a052c257d139f4689d590fca746614610',1,'edda::CurvilinearGrid::CurvilinearGrid(int *dim, float *point_ary)'],['../classedda_1_1CurvilinearGrid.html#aa30ef1e3a373022d82704726b216f40c',1,'edda::CurvilinearGrid::CurvilinearGrid()']]] ]; diff --git a/html/search/all_4.html b/html/search/all_4.html index d72a910..8308168 100644 --- a/html/search/all_4.html +++ b/html/search/all_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_4.js b/html/search/all_4.js index cf1a619..af25e26 100644 --- a/html/search/all_4.js +++ b/html/search/all_4.js @@ -1,21 +1,38 @@ var searchData= [ - ['data',['data',['../classedda_1_1NdArray.html#ae08ff31a4c35850e2fa52619cd1b9e58',1,'edda::NdArray::data()'],['../classedda_1_1NdArray.html#adab41970261227bb8cbee61437668836',1,'edda::NdArray::data()']]], - ['data_5farray_2eh',['data_array.h',['../data__array_8h.html',1,'']]], - ['datachanged',['DataChanged',['../classvtkSamplingArray.html#a9f659ba660b75566ee7b3a8734b207d4',1,'vtkSamplingArray::DataChanged()'],['../classeddaSamplingArray.html#a3a62c7477232aeb406a32069ca26198a',1,'eddaSamplingArray::DataChanged()']]], - ['datasamplingarray',['DataSamplingArray',['../classedda_1_1DataSamplingArray.html#a4da45b8109475832f7d573375e5b223f',1,'edda::DataSamplingArray']]], - ['datasamplingarray',['DataSamplingArray',['../classedda_1_1DataSamplingArray.html',1,'edda']]], + ['data',['data',['../classedda_1_1NdArray.html#adab41970261227bb8cbee61437668836',1,'edda::NdArray']]], + ['datachanged',['DataChanged',['../classeddaSamplingArray.html#a3a62c7477232aeb406a32069ca26198a',1,'eddaSamplingArray']]], ['dataset',['Dataset',['../classedda_1_1Dataset.html',1,'edda']]], - ['dataset',['Dataset',['../classedda_1_1Dataset.html#a6435bda7663a40aecf2cab8ddf4dce86',1,'edda::Dataset']]], + ['dataset',['Dataset',['../classedda_1_1Dataset.html#a298506475496c892c0269643dced7e0f',1,'edda::Dataset::Dataset()'],['../classedda_1_1DistributionModeler.html#a7c2e901b02f769e23f10f34ec2074a7e',1,'edda::DistributionModeler::dataset()'],['../classedda_1_1VecDistrModeler.html#a88dd02d8a6514a636c72917d50bc96d0',1,'edda::VecDistrModeler::dataset()']]], ['dataset_2eh',['dataset.h',['../dataset_8h.html',1,'']]], ['ddataptrarray',['dDataPtrArray',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab3016a5744ec98f46a4791f84d9e7473',1,'edda::detail::MakeStridedGmm']]], + ['defaultgaussianmixture',['DefaultGaussianMixture',['../namespaceedda_1_1dist.html#a7ac563ae69a0db2921a59877f32c2846',1,'edda::dist']]], ['deg_5fto_5frad',['DEG_TO_RAD',['../namespaceedda.html#aaba1e417275e1d2467125f4144a9f629',1,'edda']]], - ['densesamplingfield_2ecpp',['denseSamplingField.cpp',['../denseSamplingField_8cpp.html',1,'']]], - ['devicegmmarray',['DeviceGMMArray',['../namespaceedda.html#a0b758f3aa270bb713e189ca658be44f6',1,'edda']]], - ['dims',['dims',['../classedda_1_1NdArray.html#a4d7a4bab93f3633052353ebd2c7126b6',1,'edda::NdArray']]], - ['dir',['dir',['../classedda_1_1StreamTracer.html#a6f3c23ea936d22d007d49786e40da954',1,'edda::StreamTracer']]], - ['discretedistribution',['DiscreteDistribution',['../classedda_1_1dist_1_1DiscreteDistribution.html',1,'edda::dist']]], + ['det',['det',['../classedda_1_1MATRIX3.html#af2af932e00c6550a38487cea6bddfb09',1,'edda::MATRIX3']]], + ['determinant',['determinant',['../namespaceedda.html#a3238989f3e09702c057659bfce848d99',1,'edda']]], + ['determinant_5fsign',['determinant_sign',['../namespaceedda.html#ac74aafc0aebbdea9b454c51915fc09f6',1,'edda']]], + ['devicegmmarray',['DeviceGMMArray',['../namespaceedda.html#adf57cb048134c8ba9b3560698eb45a61',1,'edda']]], + ['dim',['dim',['../structedda_1_1detail_1_1FieldInterp.html#a982525b1a30d26cce95fb7a4d12ef571',1,'edda::detail::FieldInterp']]], + ['dimension',['Dimension',['../classedda_1_1MATRIX3.html#a314381814825aedf7dca2f682f5a200a',1,'edda::MATRIX3']]], + ['dir',['dir',['../structedda_1_1Tetra__step.html#a10100612bbc3f52c2016134e9d76c469',1,'edda::Tetra_step::dir()'],['../classedda_1_1StreamTracer.html#a6f3c23ea936d22d007d49786e40da954',1,'edda::StreamTracer::dir()']]], + ['dir_5fi',['DIR_I',['../curvilinear__grid_8h.html#ae263e4d06458c8f803fba86a94e33ea6',1,'curvilinear_grid.h']]], + ['dir_5fj',['DIR_J',['../curvilinear__grid_8h.html#ace93a5df3e99dc8e2957c0ca5916634d',1,'curvilinear_grid.h']]], + ['dir_5fk',['DIR_K',['../curvilinear__grid_8h.html#a37e7df6820136290f573a181abec4945',1,'curvilinear_grid.h']]], + ['discretedistributiontag',['DiscreteDistributionTag',['../classedda_1_1dist_1_1DiscreteDistributionTag.html',1,'edda::dist']]], + ['dist',['dist',['../classedda_1_1dist_1_1DistributionWrapper.html#a197ac2320ba13cca2574b2ee5ea45f19',1,'edda::dist::DistributionWrapper']]], + ['distarray',['distArray',['../classedda_1_1DistributionModeler.html#a53028234d7736e523df148cc3ad3939a',1,'edda::DistributionModeler::distArray()'],['../classedda_1_1VecDistrModeler.html#a4a56bb18658949c2f7299691a5df08d6',1,'edda::VecDistrModeler::distArray()']]], + ['distr_5farray_2eh',['distr_array.h',['../distr__array_8h.html',1,'']]], + ['distrarray',['DistrArray',['../classedda_1_1DistrArray.html',1,'edda']]], ['distribution',['Distribution',['../classedda_1_1dist_1_1Distribution.html',1,'edda::dist']]], ['distribution_2eh',['distribution.h',['../distribution_8h.html',1,'']]], - ['dot',['dot',['../namespaceedda.html#ac6eb0fa147f28e44295bbe3201c0281e',1,'edda::dot(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#acbc60ac78a9972a32aa4a470f9174087',1,'edda::dot(const Vector4< Real > &v0, const Vector4< Real > &v1)']]] + ['distribution_5ftag_2eh',['distribution_tag.h',['../distribution__tag_8h.html',1,'']]], + ['distributionmodeler',['DistributionModeler',['../classedda_1_1DistributionModeler.html',1,'edda']]], + ['distributionmodeler',['DistributionModeler',['../classedda_1_1DistributionModeler.html#a3de1ac390bc65ff36b79a39309977e6b',1,'edda::DistributionModeler']]], + ['distributionmodeler_2eh',['distributionModeler.h',['../distributionModeler_8h.html',1,'']]], + ['distributiontag',['DistributionTag',['../classedda_1_1dist_1_1DistributionTag.html',1,'edda::dist']]], + ['distributionwrapper',['DistributionWrapper',['../classedda_1_1dist_1_1DistributionWrapper.html',1,'edda::dist']]], + ['distributionwrapper',['DistributionWrapper',['../classedda_1_1dist_1_1DistributionWrapper.html#aa883c36befbaa6da37f0c87449dd7b97',1,'edda::dist::DistributionWrapper']]], + ['distrtype',['DistrType',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7',1,'edda']]], + ['dot',['dot',['../namespaceedda.html#ac6eb0fa147f28e44295bbe3201c0281e',1,'edda::dot(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#acbc60ac78a9972a32aa4a470f9174087',1,'edda::dot(const Vector4< Real > &v0, const Vector4< Real > &v1)']]], + ['dword',['DWORD',['../bmp__image_8h.html#af483253b2143078cede883fc3c111ad2',1,'bmp_image.h']]] ]; diff --git a/html/search/all_5.html b/html/search/all_5.html index 99ef726..7919cd4 100644 --- a/html/search/all_5.html +++ b/html/search/all_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_5.js b/html/search/all_5.js index 001c019..e3f3de4 100644 --- a/html/search/all_5.js +++ b/html/search/all_5.js @@ -7,6 +7,18 @@ var searchData= ['edda_2eh',['edda.h',['../edda_8h.html',1,'']]], ['edda_5fexport',['EDDA_EXPORT',['../edda__export_8h.html#a4130eba3dcc4b1e840d3ee6e2a2e4d6b',1,'edda_export.h']]], ['edda_5fexport_2eh',['edda_export.h',['../edda__export_8h.html',1,'']]], + ['edda_5freader_2ecpp',['edda_reader.cpp',['../edda__reader_8cpp.html',1,'']]], + ['edda_5freader_2eh',['edda_reader.h',['../edda__reader_8h.html',1,'']]], + ['edda_5fvtk_5freader_2ecpp',['edda_vtk_reader.cpp',['../edda__vtk__reader_8cpp.html',1,'']]], + ['edda_5fvtk_5freader_2eh',['edda_vtk_reader.h',['../edda__vtk__reader_8h.html',1,'']]], + ['edda_5fvtk_5fwriter_2ecpp',['edda_vtk_writer.cpp',['../edda__vtk__writer_8cpp.html',1,'']]], + ['edda_5fvtk_5fwriter_2eh',['edda_vtk_writer.h',['../edda__vtk__writer_8h.html',1,'']]], + ['edda_5fwriter_2ecpp',['edda_writer.cpp',['../edda__writer_8cpp.html',1,'']]], + ['edda_5fwriter_2eh',['edda_writer.h',['../edda__writer_8h.html',1,'']]], + ['eddacomputeem',['eddaComputeEM',['../namespaceedda.html#adf290c6f2f0638ac28e9c459293d674f',1,'edda']]], + ['eddacomputehistogram',['eddaComputeHistogram',['../namespaceedda.html#aa585d5f090e81748dbd4560a7e9e51e2',1,'edda::eddaComputeHistogram(float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)'],['../namespaceedda.html#a6a5def648aa6805218b5b43c71bdaeb6',1,'edda::eddaComputeHistogram(double *dataArray, int nElement, const int _nBins, const double _minValue=1, const double _maxValue=-1)']]], + ['eddacomputejointgmm',['eddaComputeJointGMM',['../namespaceedda.html#a56f6ad37e7d5ac9b859a6f24473c2800',1,'edda']]], + ['eddacomputejointhistogram',['eddaComputeJointHistogram',['../namespaceedda_1_1dist.html#a04c11decab6db9edf9983631f06ef510',1,'edda::dist']]], ['eddarandomprobefilter',['eddaRandomProbeFilter',['../classeddaRandomProbeFilter.html',1,'']]], ['eddarandomprobefilter_2ecpp',['eddaRandomProbeFilter.cpp',['../eddaRandomProbeFilter_8cpp.html',1,'']]], ['eddarandomprobefilter_2eh',['eddaRandomProbeFilter.h',['../eddaRandomProbeFilter_8h.html',1,'']]], @@ -22,10 +34,16 @@ var searchData= ['eddauncertainisocontour',['eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html',1,'eddaUncertainIsocontour'],['../classeddaUncertainIsocontour.html#ae4e870c0689ed7d50bdf21166706182b',1,'eddaUncertainIsocontour::eddaUncertainIsocontour()']]], ['eddauncertainisocontour_2ecpp',['eddaUncertainIsocontour.cpp',['../eddaUncertainIsocontour_8cpp.html',1,'']]], ['eddauncertainisocontour_2eh',['eddaUncertainIsocontour.h',['../eddaUncertainIsocontour_8h.html',1,'']]], + ['eddaupdategmmincremental',['eddaUpdateGMMIncremental',['../namespaceedda.html#ada3481b5e318feefa332d69f067f445c',1,'edda']]], + ['edge_5fvertex',['edge_vertex',['../classedda_1_1CurvilinearGrid.html#a9b2d92c3411c0b9d447f4061cdb5845c',1,'edda::CurvilinearGrid']]], + ['emeps',['EMEPS',['../joint__GMM_8h.html#a2307c1fc7acefc09238a702be7606c25',1,'joint_GMM.h']]], ['enable_5fif_5fbase_5fof',['ENABLE_IF_BASE_OF',['../common_8h.html#aa9a69652fb421d221f087dff01b9d007',1,'common.h']]], - ['end',['end',['../classedda_1_1NdArray.html#adaf51d9ef085dbd77eb910ffddf8554c',1,'edda::NdArray::end()'],['../classedda_1_1GmmArray.html#a1ff8017b7fcd7cc7c82a7375d4d3da2d',1,'edda::GmmArray::end()'],['../classedda_1_1NdArray.html#adaf51d9ef085dbd77eb910ffddf8554c',1,'edda::NdArray::end()']]], + ['end',['end',['../classedda_1_1NdArray.html#a557ace637946af190e2631a9d59f48fb',1,'edda::NdArray::end()'],['../classedda_1_1GmmArray.html#a1ff8017b7fcd7cc7c82a7375d4d3da2d',1,'edda::GmmArray::end()'],['../classedda_1_1HistoArray.html#a821645de6dcf8001fc62578b120773d6',1,'edda::HistoArray::end()']]], + ['ensembleexample_2ecpp',['ensembleExample.cpp',['../ensembleExample_8cpp.html',1,'']]], ['eps',['EPS',['../namespaceedda.html#a01a5588f4970959e27a63f1e50862c02',1,'edda']]], + ['estimate_5fgmm_2eh',['estimate_gmm.h',['../estimate__gmm_8h.html',1,'']]], ['euler',['euler',['../classedda_1_1StreamTracer.html#a880892fada69bb3e36cbab4c7de1e29b',1,'edda::StreamTracer']]], + ['eval_5fgaussian_5fdensity',['eval_gaussian_density',['../namespaceedda.html#a9d438e50e5dc488e5d812cea23ac606a',1,'edda']]], ['math',['Math',['../namespaceedda_1_1Math.html',1,'edda']]], ['edda',['edda',['../md_README.html',1,'']]] ]; diff --git a/html/search/all_6.html b/html/search/all_6.html index 6133ab3..89d590c 100644 --- a/html/search/all_6.html +++ b/html/search/all_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_6.js b/html/search/all_6.js index 94f0b9d..13fea0d 100644 --- a/html/search/all_6.js +++ b/html/search/all_6.js @@ -1,13 +1,23 @@ var searchData= [ + ['face',['face',['../structedda_1_1Tetra__step.html#ad9e3b39a9fe489b37b0d47a6d3cc18b8',1,'edda::Tetra_step']]], ['fail',['FAIL',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716a760ca38d2c3b1ab790a5ee4097d349b0',1,'edda']]], - ['fastdowncast',['FastDownCast',['../classvtkSamplingArray.html#a5132154823c01446adb05c38754ffa4c',1,'vtkSamplingArray::FastDownCast()'],['../classeddaSamplingArray.html#a75b9e3a91d32106e0c26ae86d62a4afa',1,'eddaSamplingArray::FastDownCast()']]], - ['file_5freader_2ecpp',['file_reader.cpp',['../file__reader_8cpp.html',1,'']]], - ['file_5freader_2eh',['file_reader.h',['../file__reader_8h.html',1,'']]], - ['file_5fwriter_2eh',['file_writer.h',['../file__writer_8h.html',1,'']]], - ['filename',['FileName',['../classvtkEddaReader.html#af0bb3fd96db93f567912a5392aa69669',1,'vtkEddaReader']]], - ['fillinputportinformation',['FillInputPortInformation',['../classvtkCompositeUncertainIsocontour.html#af546fd86fe72d5bcb9a3e10e60617f1a',1,'vtkCompositeUncertainIsocontour::FillInputPortInformation()'],['../classeddaThreshold.html#ad93869e45c27462151ac99f6d56ff432',1,'eddaThreshold::FillInputPortInformation()']]], - ['filloutputportinformation',['FillOutputPortInformation',['../classvtkEddaReader.html#a3c63f1875e9b7efd817bd363e1d1ec01',1,'vtkEddaReader']]], + ['fastdowncast',['FastDownCast',['../classeddaSamplingArray.html#a75b9e3a91d32106e0c26ae86d62a4afa',1,'eddaSamplingArray']]], + ['fel_5fdir_5f0',['FEL_DIR_0',['../curvilinear__grid_8h.html#a2279888e5ba8c879a85948869584b65d',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fi',['FEL_DIR_I',['../curvilinear__grid_8h.html#ae008c4c0b0970e5b10380053096dada1',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fj',['FEL_DIR_J',['../curvilinear__grid_8h.html#ac1d0722d36cca59e4baeed6d1fd7ae1e',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fk',['FEL_DIR_K',['../curvilinear__grid_8h.html#ae437c09c93776462d49e8efecf18d4d8',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fi',['FEL_DIR_NEG_I',['../curvilinear__grid_8h.html#ae702bc981c7117987a9f08e660670c22',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fj',['FEL_DIR_NEG_J',['../curvilinear__grid_8h.html#aef638f39f57d640def49f714d5aff8e9',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fk',['FEL_DIR_NEG_K',['../curvilinear__grid_8h.html#a9eee3c07e56af4b166c6df98e0d5ba18',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fi',['FEL_DIR_POS_I',['../curvilinear__grid_8h.html#abf59425ac456cf25adb2c23fcd9c86e9',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fj',['FEL_DIR_POS_J',['../curvilinear__grid_8h.html#ac1ad2c353ea53a33fa7fecadb801bdc2',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fk',['FEL_DIR_POS_K',['../curvilinear__grid_8h.html#a02a30f740d6d4bbb29809a419f21ea21',1,'curvilinear_grid.h']]], + ['fel_5forient',['FEL_orient',['../curvilinear__grid_8cpp.html#ab3f43eb4767acffae0f7d41732517817',1,'FEL_orient(const VECTOR3 &a, const VECTOR3 &b, const VECTOR3 &c, const VECTOR3 &d): curvilinear_grid.cpp'],['../curvilinear__grid_8cpp.html#a794efb262a737dbea2090779d5cc3065',1,'FEL_orient(const VECTOR3 &a, const VECTOR3 &b, const VECTOR3 &c, const VECTOR3 &d, const VECTOR3 &e): curvilinear_grid.cpp']]], + ['fieldbegin',['fieldBegin',['../structedda_1_1detail_1_1FieldInterp.html#aeecf63fba35b725bbab3eb2776bd8096',1,'edda::detail::FieldInterp::fieldBegin()'],['../structedda_1_1detail_1_1MCStreamline__functor.html#af26a34f507f9d99368f070d3dc16a989',1,'edda::detail::MCStreamline_functor::fieldBegin()']]], + ['fieldinterp',['FieldInterp',['../structedda_1_1detail_1_1FieldInterp.html',1,'edda::detail']]], + ['fieldinterp',['FieldInterp',['../structedda_1_1detail_1_1FieldInterp.html#a1040ba8ac5592e50e63acda38d9e4730',1,'edda::detail::FieldInterp']]], + ['fillinputportinformation',['FillInputPortInformation',['../classeddaThreshold.html#ad93869e45c27462151ac99f6d56ff432',1,'eddaThreshold']]], ['filters',['Filters',['../group__filters.html',1,'']]], ['free',['free',['../classedda_1_1NdArray.html#a9aed821c3cc69f87b46ab3bcf5e216c0',1,'edda::NdArray']]], ['fromcell',['fromCell',['../structedda_1_1PointInfo.html#a6330e57eebd764eb565f5d0892871750',1,'edda::PointInfo']]], diff --git a/html/search/all_7.html b/html/search/all_7.html index 5748125..0e8c527 100644 --- a/html/search/all_7.html +++ b/html/search/all_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_7.js b/html/search/all_7.js index cf8ac14..de47184 100644 --- a/html/search/all_7.js +++ b/html/search/all_7.js @@ -1,67 +1,105 @@ var searchData= [ + ['gaus',['gaus',['../classedda_1_1dist_1_1JointGMM.html#a9d7ba4b30097b161f2474b48b04b672d',1,'edda::dist::JointGMM']]], ['gaussian',['Gaussian',['../structedda_1_1dist_1_1Gaussian.html',1,'edda::dist']]], ['gaussian',['Gaussian',['../structedda_1_1dist_1_1Gaussian.html#aa3127b2d21bce076814c65a833184e00',1,'edda::dist::Gaussian::Gaussian()'],['../structedda_1_1dist_1_1Gaussian.html#a7f8de0faab287e72c664f0ed928b2b8b',1,'edda::dist::Gaussian::Gaussian(Real m, Real var)']]], ['gaussian_2eh',['gaussian.h',['../gaussian_8h.html',1,'']]], - ['gaussian3',['Gaussian3',['../loadGaussianVectorField_8cpp.html#affd76c1e25d5b22f077bb34594959ced',1,'Gaussian3(): loadGaussianVectorField.cpp'],['../namespaceedda.html#a6d54e1203ede2af17ea3a993e32d6a19',1,'edda::Gaussian3()']]], ['gaussian_5fmixture_2eh',['gaussian_mixture.h',['../gaussian__mixture_8h.html',1,'']]], ['gaussianmixture',['GaussianMixture',['../classedda_1_1dist_1_1GaussianMixture.html',1,'edda::dist']]], - ['gaussianmixture',['GaussianMixture',['../classedda_1_1dist_1_1GaussianMixture.html#a655e1d6442a400b01da0c8dc2d1f06a8',1,'edda::dist::GaussianMixture::GaussianMixture()'],['../classedda_1_1dist_1_1GaussianMixture.html#a45982b12d73cfebda033ea3914183fd9',1,'edda::dist::GaussianMixture::GaussianMixture(const std::vector< GMMTuple > &models_)']]], + ['gaussianmixture',['GaussianMixture',['../classedda_1_1dist_1_1GaussianMixture.html#a7de9bc1aefa230984cc701775c2e81bf',1,'edda::dist::GaussianMixture::GaussianMixture()'],['../classedda_1_1dist_1_1GaussianMixture.html#a87f5f62be41772792a5854cb7d1bd86b',1,'edda::dist::GaussianMixture::GaussianMixture(const std::vector< GMMTuple > &models_)']]], + ['gaussianmixturewrapper',['GaussianMixtureWrapper',['../namespaceedda_1_1dist.html#a2d3e0c51c495e90c8dbaee455bebd5a4',1,'edda::dist']]], + ['gaussianwrapper',['GaussianWrapper',['../namespaceedda_1_1dist.html#a661e9bee1ea3b68d1b0b53beb82ee9c4',1,'edda::dist']]], + ['gen_5fgmm',['gen_gmm',['../test__distribution_8cpp.html#aeff201fdc6932ddd65285555515ae0d5',1,'test_distribution.cpp']]], + ['gen_5fgmm2',['gen_gmm2',['../test__distribution_8cpp.html#aa0c546d12d071b102c425ea764d8a20a',1,'test_distribution.cpp']]], + ['genhistoarray',['genHistoArray',['../namespaceedda.html#a0678153de16df96c75a12f10a13039ed',1,'edda']]], ['genndarray',['genNdArray',['../classedda_1_1GmmVtkDataArray.html#a878602a1d07990b43d2906d26aa24b8d',1,'edda::GmmVtkDataArray']]], ['genrand',['GenRand',['../structedda_1_1detail_1_1GenRand.html',1,'edda::detail']]], - ['get_5fdims',['get_dims',['../classedda_1_1NdArray.html#afbaf9df3ade5a0ebe71010c9ffd51572',1,'edda::NdArray']]], - ['get_5fnum_5fof_5fdims',['get_num_of_dims',['../classedda_1_1NdArray.html#a0242f3d47bed17ffb98338ad0b694b7e',1,'edda::NdArray']]], - ['get_5fnum_5fof_5felems',['get_num_of_elems',['../classedda_1_1NdArray.html#a7b1103d1c10c8c1d2297610abc8a9c81',1,'edda::NdArray']]], - ['get_5fptr',['get_ptr',['../classedda_1_1NdArray.html#a32ece2f75bdefc5f653d27e413755c38',1,'edda::NdArray::get_ptr(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a32ece2f75bdefc5f653d27e413755c38',1,'edda::NdArray::get_ptr(const std::initializer_list< int > &ind) const ']]], + ['get_5fdims',['get_dims',['../classedda_1_1NdArray.html#aa785288d77d5ff168c1dc9353c917032',1,'edda::NdArray']]], + ['get_5fijk_5fof_5fcell',['get_ijk_of_cell',['../classedda_1_1CurvilinearGrid.html#af90d0f3ceec707a5080b98660dadd881',1,'edda::CurvilinearGrid']]], + ['get_5fijk_5fof_5fvertex',['get_ijk_of_vertex',['../classedda_1_1CurvilinearGrid.html#ac3ccd1d4ca3e425063a082ce9a029699',1,'edda::CurvilinearGrid']]], + ['get_5fnum_5fof_5fdims',['get_num_of_dims',['../classedda_1_1NdArray.html#a29e41bacd5203bcd4c64361f19a3fad8',1,'edda::NdArray']]], + ['get_5fnum_5fof_5felems',['get_num_of_elems',['../classedda_1_1NdArray.html#a31b2533ddfd3aa1fa4921c61796f3826',1,'edda::NdArray']]], + ['get_5fptr',['get_ptr',['../classedda_1_1NdArray.html#acecbf8fb7b2fbc54043482328982dcc3',1,'edda::NdArray']]], ['get_5fselft_5fptr',['get_selft_ptr',['../classedda_1_1NdArray.html#a6566d61ec6ea36a0f647993a248f9e27',1,'edda::NdArray']]], - ['get_5fval',['get_val',['../classedda_1_1NdArray.html#a7b2ba998de52689614fc8b3fea4b6c3b',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a1a6cd2618bbe5a4e15839c86362a9fb6',1,'edda::NdArray::get_val(int ind) const '],['../classedda_1_1NdArray.html#a7b2ba998de52689614fc8b3fea4b6c3b',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a1a6cd2618bbe5a4e15839c86362a9fb6',1,'edda::NdArray::get_val(int ind) const ']]], + ['get_5fval',['get_val',['../classedda_1_1NdArray.html#ac2c55599aa81d6538954af54d6769636',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const'],['../classedda_1_1NdArray.html#a0b0778c432529c54647f61c5dbfc97f9',1,'edda::NdArray::get_val(int ind) const']]], ['get_5fvector4',['get_Vector4',['../namespaceedda.html#a82d1260b77795b3136b52bb51b191007',1,'edda']]], - ['getarray',['getArray',['../classedda_1_1Dataset.html#a7bc1d0aecb6b80d48c0ce83d970ff4b7',1,'edda::Dataset']]], - ['getcdf',['getCdf',['../namespaceedda_1_1dist.html#a9108a700d9ad1ce168d1a4be549e05ba',1,'edda::dist::getCdf(const T &dist, double x)'],['../namespaceedda_1_1dist.html#ae5e41075ba1bc83bfc967f3c42c198c6',1,'edda::dist::getCdf(const Gaussian &dist, double x)'],['../namespaceedda_1_1dist.html#a0de789b610d232edfeb17f1774c78a11',1,'edda::dist::getCdf(const GaussianMixture< GMMs > &dist, double x)'],['../namespaceedda_1_1dist.html#aaf0614edae93da7e92e84c8b0afa232b',1,'edda::dist::getCdf(const Variant &dist, double x)']]], + ['getarray',['getArray',['../classedda_1_1Dataset.html#af0bb73430e75e1d39c29d8c3834e6299',1,'edda::Dataset']]], + ['getbins',['getBins',['../classedda_1_1dist_1_1Histogram.html#a9d3461acb4a40b2a666fba5c3374a580',1,'edda::dist::Histogram']]], + ['getbinvalue',['getBinValue',['../classedda_1_1dist_1_1Histogram.html#aadbd203fadc50952e85f5145a820c5c5',1,'edda::dist::Histogram']]], + ['getbinwidths',['getBinWidths',['../structedda_1_1dist_1_1JointHistogram.html#a780d4875f78933ce1acb4a7357e56958',1,'edda::dist::JointHistogram']]], + ['getcdf',['getCdf',['../classedda_1_1dist_1_1Distribution.html#a254f00ebe52a7dc2db12637950d186b8',1,'edda::dist::Distribution::getCdf()'],['../classedda_1_1dist_1_1DistributionWrapper.html#ad9291362ce423a8f23afbd4d85636a80',1,'edda::dist::DistributionWrapper::getCdf()'],['../classedda_1_1dist_1_1Histogram.html#aa68fe26e09f201acc3649aaf3a5d245a',1,'edda::dist::Histogram::getCdf()'],['../namespaceedda_1_1dist.html#a79e06f89251bbc5b975824846ca03e29',1,'edda::dist::getCdf(const Dist &dist, double x)'],['../namespaceedda_1_1dist.html#ae429248395e426fbcbf6db522aadd1ef',1,'edda::dist::getCdf(const Real &value, double x)'],['../namespaceedda_1_1dist.html#ae5e41075ba1bc83bfc967f3c42c198c6',1,'edda::dist::getCdf(const Gaussian &dist, double x)'],['../namespaceedda_1_1dist.html#afd2142c4a8c9b7922cb4176a1d3fc8e1',1,'edda::dist::getCdf(const GaussianMixture< GMs > &dist, double x)'],['../namespaceedda_1_1dist.html#aaab8c4a0a3f2529b3c634c492ec98acf',1,'edda::dist::getCdf(const Histogram &dist, double x)'],['../namespaceedda_1_1dist.html#aaf0614edae93da7e92e84c8b0afa232b',1,'edda::dist::getCdf(const Variant &dist, double x)']]], ['getcdfprecise',['getCdfPrecise',['../namespaceedda_1_1dist.html#a963983f8e973f9cf381ef37379ec4b81',1,'edda::dist']]], - ['getcelltype',['getCellType',['../classedda_1_1Grid.html#a6bc09e138a4e000284935c1797799c92',1,'edda::Grid::getCellType()'],['../classedda_1_1CartesianGrid.html#a5fcd49675005e39a9a5bf04cff1192a0',1,'edda::CartesianGrid::getCellType()'],['../classedda_1_1RegularCartesianGrid.html#aed25647409c250191b9f4c5b64de2484',1,'edda::RegularCartesianGrid::getCellType()']]], - ['getcellvertices',['getCellVertices',['../classedda_1_1Grid.html#a03a9c59b80664b69e0225966691a3648',1,'edda::Grid::getCellVertices()'],['../classedda_1_1CartesianGrid.html#a8320281bcfe0b9f7fad04cbb6f4dd080',1,'edda::CartesianGrid::getCellVertices()'],['../classedda_1_1RegularCartesianGrid.html#adbec43a3b5345edec3b92299777ed6f2',1,'edda::RegularCartesianGrid::getCellVertices()']]], - ['getdata',['getData',['../classedda_1_1Tuple.html#a595e7069d531212beee67ef8286db5f6',1,'edda::Tuple::getData()'],['../classedda_1_1Tuple.html#a8a33b4bad6ab1f30b6decf6343261db5',1,'edda::Tuple::getData() const '],['../classedda_1_1Dataset.html#acfded9296fa3c02b30c3ffc51b5bd4bb',1,'edda::Dataset::getData(int idx, Type &data) const '],['../classedda_1_1Dataset.html#a8991544e9b6ff376b3b19f0073269e3d',1,'edda::Dataset::getData(int idx, Vector< Type, N > &data) const '],['../test__vtk__pipeline_8cpp.html#a65d2448c2a9316cad917af150222ecce',1,'getData(): test_vtk_pipeline.cpp']]], - ['getdatatype',['GetDataType',['../classvtkSamplingArray.html#af2609f92870c3ed88905da20232e6e6e',1,'vtkSamplingArray::GetDataType()'],['../classeddaSamplingArray.html#aca5347384a310ff910c41985fdd6a71b',1,'eddaSamplingArray::GetDataType()']]], - ['getdatatypesize',['GetDataTypeSize',['../classvtkSamplingArray.html#a3d3fab21cd89c9a7c37a4881aba64886',1,'vtkSamplingArray::GetDataTypeSize()'],['../classeddaSamplingArray.html#a592f5afb03e3826d9f3eb26cb868eca1',1,'eddaSamplingArray::GetDataTypeSize()']]], + ['getcelltype',['getCellType',['../classedda_1_1CurvilinearGrid.html#aa8a7fff214f47ef4e29951bcad0f4bd4',1,'edda::CurvilinearGrid::getCellType()'],['../classedda_1_1Grid.html#a6bc09e138a4e000284935c1797799c92',1,'edda::Grid::getCellType()'],['../classedda_1_1CartesianGrid.html#a5fcd49675005e39a9a5bf04cff1192a0',1,'edda::CartesianGrid::getCellType()'],['../classedda_1_1RegularCartesianGrid.html#aed25647409c250191b9f4c5b64de2484',1,'edda::RegularCartesianGrid::getCellType()']]], + ['getcellvertices',['getCellVertices',['../classedda_1_1CurvilinearGrid.html#a55d27be7ae9ef3ab2f43621d8e793719',1,'edda::CurvilinearGrid::getCellVertices()'],['../classedda_1_1Grid.html#a03a9c59b80664b69e0225966691a3648',1,'edda::Grid::getCellVertices()'],['../classedda_1_1CartesianGrid.html#a8320281bcfe0b9f7fad04cbb6f4dd080',1,'edda::CartesianGrid::getCellVertices()'],['../classedda_1_1RegularCartesianGrid.html#adbec43a3b5345edec3b92299777ed6f2',1,'edda::RegularCartesianGrid::getCellVertices()']]], + ['getcompwgtlogprobability',['getCompWgtLogProbability',['../classedda_1_1dist_1_1JointGMM.html#a369c39d9ee1c0380a6bbcca1d9075f4b',1,'edda::dist::JointGMM']]], + ['getcovariance',['getCovariance',['../structedda_1_1dist_1_1JointGaussian.html#a1e333f6e51cc6ed712dae76de5d30a7b',1,'edda::dist::JointGaussian::getCovariance()'],['../structedda_1_1dist_1_1JointHistogram.html#a45ec825f21978f21c65aafc07be3c208',1,'edda::dist::JointHistogram::getCovariance()']]], + ['getdata',['getData',['../classedda_1_1Tuple.html#a595e7069d531212beee67ef8286db5f6',1,'edda::Tuple::getData()'],['../classedda_1_1Tuple.html#a3adba3cbbe1031f5131621f81c903234',1,'edda::Tuple::getData() const']]], + ['getdataset',['getDataset',['../classedda_1_1DistributionModeler.html#a0062ffcd380b73745de4c6ebaba263b0',1,'edda::DistributionModeler::getDataset()'],['../classedda_1_1VecDistrModeler.html#a2f2faa0a0769810d6870c8f6f4c745ea',1,'edda::VecDistrModeler::getDataset()']]], + ['getdatatype',['GetDataType',['../classeddaSamplingArray.html#aca5347384a310ff910c41985fdd6a71b',1,'eddaSamplingArray']]], + ['getdatatypesize',['GetDataTypeSize',['../classeddaSamplingArray.html#a592f5afb03e3826d9f3eb26cb868eca1',1,'eddaSamplingArray']]], + ['getdet',['getDet',['../structedda_1_1dist_1_1JointHistogram.html#a3dd03ab5345b2e91e916f40f391ef8bd',1,'edda::dist::JointHistogram']]], ['getdimension',['getDimension',['../classedda_1_1Dataset.html#a0dc71932f495f2bcf2f8f625e4dfc9a3',1,'edda::Dataset::getDimension()'],['../classedda_1_1CartesianGrid.html#aa9e3f187b8ff610ddca88795b8c55eb5',1,'edda::CartesianGrid::getDimension()']]], - ['getfileextension',['getFileExtension',['../namespaceedda.html#ac59d3b1cb5943a0ea7f5d13d9f3a2b9c',1,'edda::getFileExtension(const string &filename)'],['../namespaceedda.html#aca9694333df360407cbe5fcf95d13096',1,'edda::getFileExtension(const std::string &filename)']]], - ['getfilename',['getFilename',['../namespaceedda.html#aa4f1eea26a3db487019ad2c5c2bd5ccc',1,'edda']]], + ['getdistr',['getDistr',['../classedda_1_1DistrArray.html#aeb1b1f3a2610228b27887d33661571d9',1,'edda::DistrArray::getDistr()'],['../classedda_1_1ScalarDistrArray.html#a1a5a047f4a1d003a7d39a6b729bd32ad',1,'edda::ScalarDistrArray::getDistr()'],['../classedda_1_1VectorDistrArray.html#a67b8a3bdd420ba44afa0ee5836097f9c',1,'edda::VectorDistrArray::getDistr()'],['../classedda_1_1JointDistrArray.html#a2c3940f2d9136d3552aceb70027fd278',1,'edda::JointDistrArray::getDistr()'],['../structedda_1_1dist_1_1JointHistogram.html#aa2a00124db85a4364825780efd8e6103',1,'edda::dist::JointHistogram::getDistr()'],['../classedda_1_1GmmVtkDataArray.html#a5e969e8644115ef72fecf2f684466449',1,'edda::GmmVtkDataArray::getDistr()']]], + ['getdistrname',['getDistrName',['../classedda_1_1DistrArray.html#adbc00eb86170ca8738f2dff579a2547a',1,'edda::DistrArray::getDistrName()'],['../classedda_1_1ScalarDistrArray.html#ac6e7b61e6ed4e6e1cb0f2adae9638d79',1,'edda::ScalarDistrArray::getDistrName()'],['../classedda_1_1VectorDistrArray.html#a8d5fb4a5c8201fff49a18a29938a9e36',1,'edda::VectorDistrArray::getDistrName()'],['../classedda_1_1JointDistrArray.html#a77a74c92eaef146ebec61ee12a3e8c90',1,'edda::JointDistrArray::getDistrName()'],['../classedda_1_1GmmVtkDataArray.html#a1cbda5e87ffca48d134dea0ef7d53b61',1,'edda::GmmVtkDataArray::getDistrName()']]], + ['getdistrtype',['getDistrType',['../namespaceedda.html#a96b8aef92851e782f1b502a5fdcae897',1,'edda']]], + ['getdistrvector',['getDistrVector',['../classedda_1_1DistrArray.html#aba9a46474348268221314e7fe7562c97',1,'edda::DistrArray::getDistrVector()'],['../classedda_1_1ScalarDistrArray.html#a3040365ebed333e1f6b2052da5934c2f',1,'edda::ScalarDistrArray::getDistrVector()'],['../classedda_1_1VectorDistrArray.html#a255b09fb5f72c4323364436218a5b151',1,'edda::VectorDistrArray::getDistrVector()'],['../classedda_1_1JointDistrArray.html#a0b6fad770b3ec7cee12d7a5979a3fb47',1,'edda::JointDistrArray::getDistrVector()'],['../classedda_1_1GmmVtkDataArray.html#a3b84b9c3cd7fbedfd61270052ef4515f',1,'edda::GmmVtkDataArray::getDistrVector()']]], + ['geteigenmat',['getEigenMat',['../structedda_1_1dist_1_1JointGaussian.html#ac96fcfb4d2baa2ef8246fddb993cfe3c',1,'edda::dist::JointGaussian']]], + ['getfileextension',['getFileExtension',['../namespaceedda.html#ac59d3b1cb5943a0ea7f5d13d9f3a2b9c',1,'edda::getFileExtension(const string &filename)'],['../namespaceedda.html#ad23a3dce27ab3adaa101e5bf29ef538c',1,'edda::getFileExtension(const std::string &filename)']]], + ['getfilename',['getFilename',['../namespaceedda.html#a8130836224d1649c7f9c9630555f9942',1,'edda']]], + ['getgmmmodels',['getGmmModels',['../namespaceedda.html#af2d06efbb6ce6930e5627610326f8da5',1,'edda']]], + ['getgmmmodels_5farchival',['getGmmModels_archival',['../namespaceedda.html#ad4a4b406b0a371f8e004dc1f1e18f0cc',1,'edda']]], ['getgrid',['getGrid',['../classedda_1_1Dataset.html#acf435e0080a5f00527dc49d61ad96650',1,'edda::Dataset']]], - ['getgridspacing',['getGridSpacing',['../classedda_1_1Grid.html#a253dfed75ec539a26f993c9f75a87a75',1,'edda::Grid::getGridSpacing()'],['../classedda_1_1CartesianGrid.html#a2f5865f683be69cb92e64f6d9c4d9814',1,'edda::CartesianGrid::getGridSpacing()'],['../classedda_1_1RegularCartesianGrid.html#a49a0bbd594f86199ccb997729a3ccc0a',1,'edda::RegularCartesianGrid::getGridSpacing()']]], + ['getgridspacing',['getGridSpacing',['../classedda_1_1CurvilinearGrid.html#a99849d08352aa03202c47c711e986f89',1,'edda::CurvilinearGrid::getGridSpacing()'],['../classedda_1_1Grid.html#a253dfed75ec539a26f993c9f75a87a75',1,'edda::Grid::getGridSpacing()'],['../classedda_1_1CartesianGrid.html#a2f5865f683be69cb92e64f6d9c4d9814',1,'edda::CartesianGrid::getGridSpacing()'],['../classedda_1_1RegularCartesianGrid.html#a49a0bbd594f86199ccb997729a3ccc0a',1,'edda::RegularCartesianGrid::getGridSpacing()']]], ['getindex',['getIndex',['../classedda_1_1CartesianGrid.html#a717a62a55b2244d94ee0daba808500e2',1,'edda::CartesianGrid']]], ['getinterptype',['getInterpType',['../classedda_1_1Grid.html#af900e5f451efd731b8ec282c67334547',1,'edda::Grid::getInterpType()'],['../classedda_1_1CartesianGrid.html#aa206aa1bf588c180b8cfbe63723757b8',1,'edda::CartesianGrid::getInterpType()']]], - ['getitem',['getItem',['../classedda_1_1AbstractDataArray.html#af59b2bbdeadeddea90a2f9d22d057dfa',1,'edda::AbstractDataArray::getItem()'],['../classedda_1_1DataSamplingArray.html#aa0e3e26e84c38c8252cdcddcca3e1168',1,'edda::DataSamplingArray::getItem()'],['../classedda_1_1ScalarArray.html#a26506ab978225aae83454a8f7a000163',1,'edda::ScalarArray::getItem()'],['../classedda_1_1VectorArray.html#a73bd4bad60609b662b61c818cc9517b2',1,'edda::VectorArray::getItem()'],['../classedda_1_1GmmVtkDataArray.html#a715a8a0ae4570b861f1f22ced0a6743f',1,'edda::GmmVtkDataArray::getItem()']]], - ['getlength',['getLength',['../classedda_1_1shared__ary.html#a7e0edb1932334df3a1c4174aec3347ef',1,'edda::shared_ary::getLength()'],['../classedda_1_1AbstractDataArray.html#a7f25dbb3907b82fb35a2a6465c57497b',1,'edda::AbstractDataArray::getLength()'],['../classedda_1_1DataSamplingArray.html#aedd8686f8f05792f862e8537e6e5bba5',1,'edda::DataSamplingArray::getLength()'],['../classedda_1_1ScalarArray.html#ab5d941d19575ba5a0eac6c700cb81f1d',1,'edda::ScalarArray::getLength()'],['../classedda_1_1VectorArray.html#a058c81b9c6693539b0166e8a36365612',1,'edda::VectorArray::getLength()'],['../classedda_1_1GmmVtkDataArray.html#ae253c523c5d1488fb18214cfe4df4c78',1,'edda::GmmVtkDataArray::getLength()']]], - ['getmag',['getMag',['../classedda_1_1Vector.html#ac06066eb3afd0fab6de89d42256a884a',1,'edda::Vector::getMag()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a2c46ece01225f6cca913d19979f34f62',1,'edda::Vector< Real, 3 >::getMag()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#afc9ac78de6ea4e52b3035cb2f39e7795',1,'edda::Vector< Real, 4 >::getMag()']]], - ['getmax',['getMax',['../classedda_1_1Vector.html#a0efa64201ee38c0e5f8f16b9fa719be5',1,'edda::Vector::getMax()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd90bee3d0cc11749bc7322b0911c4c8',1,'edda::Vector< Real, 3 >::getMax()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#afe21b6c9d9656d14a887b49fe96af090',1,'edda::Vector< Real, 4 >::getMax()']]], - ['getmean',['getMean',['../namespaceedda_1_1dist.html#aa647a75ef90d5ec917d5d82cee61e35a',1,'edda::dist::getMean(const T &dist)'],['../namespaceedda_1_1dist.html#ad57b2fa1045786424910800ecb46d95f',1,'edda::dist::getMean(const Tuple< T, N > &dist)'],['../namespaceedda_1_1dist.html#aa90608d9ba4ac81988b490f6a431910f',1,'edda::dist::getMean(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#af5e42adfe6c6317ccfbc85744476b6aa',1,'edda::dist::getMean(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#a994a5806eeb6bfd42d487393d94d38df',1,'edda::dist::getMean(const Variant &dist)']]], - ['getnumcomponents',['getNumComponents',['../classedda_1_1AbstractDataArray.html#a95a0b368f5867ca8ad283cacfe067760',1,'edda::AbstractDataArray::getNumComponents()'],['../classedda_1_1DataSamplingArray.html#a748c18ccfc9b23d8d8d95cfda3188820',1,'edda::DataSamplingArray::getNumComponents()'],['../classedda_1_1ScalarArray.html#ab5c90ef4f106ee6b827c53d708f12747',1,'edda::ScalarArray::getNumComponents()'],['../classedda_1_1VectorArray.html#ab55dfed7c680f323c0990c35ee96abfa',1,'edda::VectorArray::getNumComponents()'],['../classedda_1_1GmmVtkDataArray.html#a52a2a8b8afa15807ec7ca859b712e66b',1,'edda::GmmVtkDataArray::getNumComponents()']]], - ['getoutput',['GetOutput',['../classvtkEddaReader.html#acc58191423c9bb76422520a02c649c2a',1,'vtkEddaReader::GetOutput()'],['../classvtkEddaReader.html#a9f3294899f4bc2d940d1dd14635d6c1b',1,'vtkEddaReader::GetOutput(int idx)']]], - ['getpath',['getPath',['../namespaceedda.html#a33c899f398e10b56ea24b4a0aebc403e',1,'edda']]], - ['getpdf',['getPdf',['../namespaceedda_1_1dist.html#ab49c27e7d7ee9b8c26bea6bf735c92dd',1,'edda::dist::getPdf(const Gaussian &dist, const double x)'],['../namespaceedda_1_1dist.html#a7da5da407561b88b86cbd9c72749efce',1,'edda::dist::getPdf(const GaussianMixture< GMMs > &dist, const double x)'],['../namespaceedda_1_1dist.html#a2053d1af598768527673eceecde7c309',1,'edda::dist::getPdf(const Variant &dist, double x)']]], - ['getposition',['getPosition',['../structedda_1_1GetPositionAsIs.html#a05f5568ab6c91b17c3e611dbd7535ae4',1,'edda::GetPositionAsIs::getPosition()'],['../structedda_1_1GetPositionFromDistributionMean.html#a6bd189b05a1b73f8fcddfed44e311a0c',1,'edda::GetPositionFromDistributionMean::getPosition()']]], + ['getjointcdf',['getJointCdf',['../structedda_1_1dist_1_1JointHistogram.html#a2afec00c5f46dcf706ca922bfc28fc49',1,'edda::dist::JointHistogram']]], + ['getjointlogpdf',['getJointLogPdf',['../structedda_1_1dist_1_1JointGaussian.html#a5ad2263029fa5d3154f6fc6b5d53aff0',1,'edda::dist::JointGaussian']]], + ['getjointmean',['getJointMean',['../namespaceedda_1_1dist.html#aca5d6bb4ab8925701a51faa2a6a41587',1,'edda::dist::getJointMean(const Dist &dist)'],['../namespaceedda_1_1dist.html#a3dfb8956e6fd7f1f9d7d5404d159870e',1,'edda::dist::getJointMean(const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#ad46e1fb3d92fd27a62bbf8031819764c',1,'edda::dist::getJointMean(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#a5a6a6cf268763e6a80cd78742d69d385',1,'edda::dist::getJointMean(const Variant &dist)']]], + ['getjointpdf',['getJointPdf',['../namespaceedda_1_1dist.html#aa75196d159f2cf0deda5c38db76997f4',1,'edda::dist::getJointPdf(const Dist &dist, const std::vector< Real > x_)'],['../namespaceedda_1_1dist.html#ae850655ae199f3d99ac19904b0a4aead',1,'edda::dist::getJointPdf(const JointGaussian &dist, const std::vector< Real > x_)'],['../namespaceedda_1_1dist.html#a35aabc0834890277afff7845b761f2b0',1,'edda::dist::getJointPdf(const JointHistogram &dist, const std::vector< Real > &x_)'],['../namespaceedda_1_1dist.html#aa5711759a65d169a0889a7ce69131cfb',1,'edda::dist::getJointPdf(const Variant &dist, const std::vector< Real > &x)']]], + ['getjointsample',['getJointSample',['../structedda_1_1dist_1_1JointGaussian.html#ae91c9b176275373323f7b197933a2851',1,'edda::dist::JointGaussian::getJointSample()'],['../classedda_1_1dist_1_1JointGMM.html#ad62fb0a1c2a24c98b6161b7301112c7a',1,'edda::dist::JointGMM::getJointSample()'],['../namespaceedda_1_1dist.html#ad58360f81442685309c506fab1e1a74e',1,'edda::dist::getJointSample(const Dist &dist)'],['../namespaceedda_1_1dist.html#a55b0094e86dd4d053c2cea811959f45b',1,'edda::dist::getJointSample(const Dist &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a2cfa0a94161a6137f20a642d66c38360',1,'edda::dist::getJointSample(const JointGaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a13f9fa2ee7f77dcc8045a1cde0d086a0',1,'edda::dist::getJointSample(const JointGMM &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#acf0cb6b74fa4b6332c551938e0cb3759',1,'edda::dist::getJointSample(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#a95b312f52dd53d2dceffa48ae7c8568a',1,'edda::dist::getJointSample(const JointHistogram &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#acd2ee03b0fa2450c54bbf615b2f9b455',1,'edda::dist::getJointSample(const Variant &dist)']]], + ['getlength',['getLength',['../classedda_1_1shared__ary.html#a1e8241f74adc1b4bb4203a4156d0a01a',1,'edda::shared_ary::getLength()'],['../classedda_1_1DistrArray.html#a7683836fa362da37960b5b8d7a333f48',1,'edda::DistrArray::getLength()'],['../classedda_1_1ScalarDistrArray.html#aa88300692fb6c5e4a26077baa8cbc4f6',1,'edda::ScalarDistrArray::getLength()'],['../classedda_1_1VectorDistrArray.html#a9cd5f4e6b27832cfd87739bf68ee2d6d',1,'edda::VectorDistrArray::getLength()'],['../classedda_1_1JointDistrArray.html#a08458dcfe3c717f40586b653e881f2b0',1,'edda::JointDistrArray::getLength()'],['../classedda_1_1GmmVtkDataArray.html#ae253c523c5d1488fb18214cfe4df4c78',1,'edda::GmmVtkDataArray::getLength()']]], + ['getlogdet',['getLogDet',['../structedda_1_1dist_1_1JointGaussian.html#abe3a2982612be96288f940a6c5898b00',1,'edda::dist::JointGaussian']]], + ['getmag',['getMag',['../classedda_1_1Vector.html#a31eb4a856ac0e023704a85efa39e70f9',1,'edda::Vector::getMag()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a1f6ef2dfc90a7c633954dad0e03569ad',1,'edda::Vector< Real, 3 >::getMag()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0c9eb8919a1f42d31adcfdb9167a0f24',1,'edda::Vector< Real, 4 >::getMag()']]], + ['getmax',['getMax',['../classedda_1_1Vector.html#a13a14781835ea20809c3f8fe58fd49e0',1,'edda::Vector::getMax()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a5cc40943382c1b088d88f233379e687b',1,'edda::Vector< Real, 3 >::getMax()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ad992bd1dc5b6aa1dbd016655f8aa3e70',1,'edda::Vector< Real, 4 >::getMax()']]], + ['getmaxvals',['getMaxVals',['../structedda_1_1dist_1_1JointHistogram.html#aecbe3708c2c2cbf48253bea63b5c3174',1,'edda::dist::JointHistogram']]], + ['getmaxvalue',['getMaxValue',['../classedda_1_1dist_1_1Histogram.html#a12f4d770557360f1c7593f0a0fe0f2fb',1,'edda::dist::Histogram']]], + ['getmean',['getMean',['../classedda_1_1dist_1_1Distribution.html#a27bb96ba473069f5e585fe6187a18b12',1,'edda::dist::Distribution::getMean()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a0b9571390e01745c60f3d25a4309d666',1,'edda::dist::DistributionWrapper::getMean()'],['../classedda_1_1dist_1_1Histogram.html#a9cb7ec74ec7817755bf829ef2c59652f',1,'edda::dist::Histogram::getMean()'],['../structedda_1_1dist_1_1JointGaussian.html#a863db28ebe8a3ca52826ad87916f1d75',1,'edda::dist::JointGaussian::getMean()'],['../classedda_1_1dist_1_1JointGMM.html#ad5eb1b0c40f7b8264bbc5ad77c3e89f5',1,'edda::dist::JointGMM::getMean()'],['../namespaceedda_1_1dist.html#a31e7d01d2efb25f0bd964ce5ad22b094',1,'edda::dist::getMean(const Dist &dist)'],['../namespaceedda_1_1dist.html#ad57b2fa1045786424910800ecb46d95f',1,'edda::dist::getMean(const Tuple< T, N > &dist)'],['../namespaceedda_1_1dist.html#ab9581b103da8087763aa54015a251d76',1,'edda::dist::getMean(const Real &value)'],['../namespaceedda_1_1dist.html#aa90608d9ba4ac81988b490f6a431910f',1,'edda::dist::getMean(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a572cfa9c03d70c39f8dfdf6804bc1dee',1,'edda::dist::getMean(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#a4249273536d8bfc3f31c00f5bbf31ada',1,'edda::dist::getMean(const Histogram &dist)'],['../namespaceedda_1_1dist.html#a994a5806eeb6bfd42d487393d94d38df',1,'edda::dist::getMean(const Variant &dist)']]], + ['getminvals',['getMinVals',['../structedda_1_1dist_1_1JointHistogram.html#a300353858869ef100d4b887b2eb83c40',1,'edda::dist::JointHistogram']]], + ['getminvalue',['getMinValue',['../classedda_1_1dist_1_1Histogram.html#a41d9990fabd432eb1fe9370cec28b7af',1,'edda::dist::Histogram']]], + ['getname',['getName',['../classedda_1_1dist_1_1Distribution.html#a1cb97d044975bf69aa7415c8a88cb61c',1,'edda::dist::Distribution::getName()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a1a851af373ffa093cad8777a750dfac0',1,'edda::dist::DistributionWrapper::getName()'],['../namespaceedda_1_1dist.html#af1caedbeed631586c1998b1519677ac2',1,'edda::dist::getName(const Real &x)'],['../namespaceedda_1_1dist.html#ab9048c44535d5b133ca1ccc61d500225',1,'edda::dist::getName(const Gaussian &x)'],['../namespaceedda_1_1dist.html#aa6b164453af92a895db76d0bf04c4d27',1,'edda::dist::getName(const GaussianMixture< GMs > &x)'],['../namespaceedda_1_1dist.html#af13e6b4b9681e4473617cb95026debb9',1,'edda::dist::getName(const Histogram &x)'],['../namespaceedda_1_1dist.html#aa5c641f8793ab998bdc49d0a8072619a',1,'edda::dist::getName(const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#a06f5e211488f46424e94ef7cc7989532',1,'edda::dist::getName(const JointGMM &x)'],['../namespaceedda_1_1dist.html#aeef22a70cee13e6d838e28346cfe2d8d',1,'edda::dist::getName(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#af6e225bb8047fad35d73f359e6a52140',1,'edda::dist::getName(const Variant &dist)']]], + ['getnumbins',['getNumBins',['../structedda_1_1dist_1_1JointHistogram.html#a033e6aa2dd112c7b62192cd6cfe3d530',1,'edda::dist::JointHistogram']]], + ['getnumcomponents',['getNumComponents',['../classedda_1_1DistrArray.html#ac5ca0f304fc582030f9585c62f596a68',1,'edda::DistrArray::getNumComponents()'],['../classedda_1_1ScalarDistrArray.html#a13deee467fad20fcdaee8ad10c86e487',1,'edda::ScalarDistrArray::getNumComponents()'],['../classedda_1_1VectorDistrArray.html#ac8bad4a6f0c12f1fc35c884000a91cd7',1,'edda::VectorDistrArray::getNumComponents()'],['../classedda_1_1JointDistrArray.html#a2ebcd7d64c3f95e535374a6b3e163ad8',1,'edda::JointDistrArray::getNumComponents()'],['../classedda_1_1GmmVtkDataArray.html#a52a2a8b8afa15807ec7ca859b712e66b',1,'edda::GmmVtkDataArray::getNumComponents()']]], + ['getnumvars',['getNumVars',['../structedda_1_1dist_1_1JointHistogram.html#a7dcd92c737a39fcf82160e7c3c82a1de',1,'edda::dist::JointHistogram']]], + ['getpath',['getPath',['../namespaceedda.html#a8cd83bac4be9c72912f9012320903fea',1,'edda']]], + ['getpdf',['getPdf',['../classedda_1_1dist_1_1Distribution.html#a415b6b30bd106c3837f6d524d5ab56f8',1,'edda::dist::Distribution::getPdf()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a99d3c366cf997baa044c64d6d885aa9f',1,'edda::dist::DistributionWrapper::getPdf()'],['../classedda_1_1dist_1_1Histogram.html#a8c23482a40867efeb519774bef64209a',1,'edda::dist::Histogram::getPdf()'],['../classedda_1_1dist_1_1JointGMM.html#ab5ae4fe145e613aeddd9712b9dd8c2e3',1,'edda::dist::JointGMM::getPdf()'],['../namespaceedda_1_1dist.html#a2b1096c376ca2120d6194f9452bc7a4a',1,'edda::dist::getPdf(const Dist &dist, const double x)'],['../namespaceedda_1_1dist.html#af2bde14dfa1c9aaae56340e7f6f0d958',1,'edda::dist::getPdf(const Real &value, double x)'],['../namespaceedda_1_1dist.html#ab49c27e7d7ee9b8c26bea6bf735c92dd',1,'edda::dist::getPdf(const Gaussian &dist, const double x)'],['../namespaceedda_1_1dist.html#ab45cc21a0371c7a4471556c715669571',1,'edda::dist::getPdf(const GaussianMixture< GMs > &dist, const double x)'],['../namespaceedda_1_1dist.html#a08a42b6795d5052cb716dcf739a78188',1,'edda::dist::getPdf(const Histogram &dist, const double x)'],['../namespaceedda_1_1dist.html#a312ac0b0a859377524410f5eb079b25f',1,'edda::dist::getPdf(const JointGMM &dist, const std::vector< Real > x)'],['../namespaceedda_1_1dist.html#a2053d1af598768527673eceecde7c309',1,'edda::dist::getPdf(const Variant &dist, double x)']]], + ['getposition',['getPosition',['../structedda_1_1GetPositionAsIs.html#a4c8da04a1fa5e24a15458149aed4725b',1,'edda::GetPositionAsIs::getPosition()'],['../structedda_1_1GetPositionFromDistributionMean.html#a429ea3dc9a5d41b2f78a5ae2dd09624d',1,'edda::GetPositionFromDistributionMean::getPosition()']]], ['getpositionasis',['GetPositionAsIs',['../structedda_1_1GetPositionAsIs.html',1,'edda']]], ['getpositionfromdistributionmean',['GetPositionFromDistributionMean',['../structedda_1_1GetPositionFromDistributionMean.html',1,'edda']]], - ['getrawarray',['getRawArray',['../classedda_1_1AbstractDataArray.html#af7070129998073a6fe0bc1ffc259d31d',1,'edda::AbstractDataArray::getRawArray()'],['../classedda_1_1DataSamplingArray.html#a6aae3e35466acb5dc659c2dbbab5c523',1,'edda::DataSamplingArray::getRawArray()'],['../classedda_1_1ScalarArray.html#aeff0d890ae2f1e024c175bbcec21f00c',1,'edda::ScalarArray::getRawArray()'],['../classedda_1_1VectorArray.html#a52ebb5d335b08eeb7f0f965ba4ea11a4',1,'edda::VectorArray::getRawArray()'],['../classedda_1_1GmmVtkDataArray.html#a01d173f90474b4af8ba5a56ebeb1a3f7',1,'edda::GmmVtkDataArray::getRawArray()']]], - ['getsample',['getSample',['../namespaceedda_1_1dist.html#a9885c551a8bdba31a86d259358b92b3a',1,'edda::dist::getSample(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a72b01a24c403bf720b720f3725799d22',1,'edda::dist::getSample(const Gaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a842831a08d95719388f98462dadaec08',1,'edda::dist::getSample(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#ad890c0da31f057aa0a856e98dbd5b89d',1,'edda::dist::getSample(const GaussianMixture< GMMs > &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a77d1842129bc870fa0ea6c6a9a73ae29',1,'edda::dist::getSample(const Variant &dist)'],['../namespaceedda_1_1dist.html#a98351fba7bddbd637f89560bd6f74518',1,'edda::dist::getSample(const Vector< Dist, N > &v)']]], - ['getsample_5ffunctor',['GetSample_functor',['../structedda_1_1detail_1_1GetSample__functor.html',1,'edda::detail']]], + ['getrawarray',['getRawArray',['../classedda_1_1DistrArray.html#abc0b8d0332dddc57b78f04410f94f488',1,'edda::DistrArray::getRawArray()'],['../classedda_1_1ScalarDistrArray.html#a3389e05a8082cb7907991308692704e4',1,'edda::ScalarDistrArray::getRawArray()'],['../classedda_1_1VectorDistrArray.html#a26fd26e0739febc15ba63eaf2b80d94e',1,'edda::VectorDistrArray::getRawArray()'],['../classedda_1_1JointDistrArray.html#aae134d393f566ee75ab739667b12a6d0',1,'edda::JointDistrArray::getRawArray()'],['../classedda_1_1GmmVtkDataArray.html#a01d173f90474b4af8ba5a56ebeb1a3f7',1,'edda::GmmVtkDataArray::getRawArray()']]], + ['getsample',['getSample',['../classedda_1_1Dataset.html#ad1687916a4bd1486d61cacd96b1c293d',1,'edda::Dataset::getSample(int idx, Real &data) const'],['../classedda_1_1Dataset.html#a8c75d6c4b03907728d2afa64121c80db',1,'edda::Dataset::getSample(int idx, Vector< Real, N > &data) const'],['../classedda_1_1dist_1_1Distribution.html#a6bdc867a7ab1a8d956b576ac7bdaba0b',1,'edda::dist::Distribution::getSample()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a98fe7a774c9bf2a5aa1795feb05ef237',1,'edda::dist::DistributionWrapper::getSample()'],['../classedda_1_1dist_1_1Histogram.html#a90511639e51b8aa1daf30e3207b40aa3',1,'edda::dist::Histogram::getSample()'],['../namespaceedda_1_1dist.html#a17c380a73708459e22641942be1bbbf1',1,'edda::dist::getSample(const Dist &dist)'],['../namespaceedda_1_1dist.html#a34d4f53145d2811644ee4f50b15e4d41',1,'edda::dist::getSample(const Dist &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a97fb97d2f21ff7d6d25a4bdd27cec5e6',1,'edda::dist::getSample(const Tuple< T, N > &distvec, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a205c55f0600d37afbfc20dcd9026d23b',1,'edda::dist::getSample(const Real &value)'],['../namespaceedda_1_1dist.html#a9885c551a8bdba31a86d259358b92b3a',1,'edda::dist::getSample(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a72b01a24c403bf720b720f3725799d22',1,'edda::dist::getSample(const Gaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#aa130e91bab7646331af5ee2ed183bacc',1,'edda::dist::getSample(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#a46cf547b9f777cd1be0f767a84438dd1',1,'edda::dist::getSample(const GaussianMixture< GMs > &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#adc0fc9226bf2879d6f5257934b935c98',1,'edda::dist::getSample(const Histogram &dist)'],['../namespaceedda_1_1dist.html#a77d1842129bc870fa0ea6c6a9a73ae29',1,'edda::dist::getSample(const Variant &dist)'],['../namespaceedda_1_1dist.html#a98351fba7bddbd637f89560bd6f74518',1,'edda::dist::getSample(const Vector< Dist, N > &v)']]], + ['getsample',['GetSample',['../structedda_1_1detail_1_1GetSample.html',1,'edda::detail']]], ['getsample_5ffunctor',['GetSample_functor',['../structedda_1_1GetSample__functor.html',1,'edda']]], - ['getscalar',['getScalar',['../classedda_1_1AbstractDataArray.html#a9cd2e7ece1d3287650d00923fcd7ec0d',1,'edda::AbstractDataArray::getScalar()'],['../classedda_1_1DataSamplingArray.html#a92f7b99b222f6ddf935fc0ccd5d52d58',1,'edda::DataSamplingArray::getScalar()'],['../classedda_1_1ScalarArray.html#a7fa33454d6e995bf6d7edbf7aa029096',1,'edda::ScalarArray::getScalar()'],['../classedda_1_1VectorArray.html#ae47a8e6c9d3621ef5588b3b2a831f61f',1,'edda::VectorArray::getScalar()'],['../classedda_1_1GmmVtkDataArray.html#a42f57d6c03d51f57b73921c94cdae1e0',1,'edda::GmmVtkDataArray::getScalar()']]], + ['getscalar',['getScalar',['../classedda_1_1DistrArray.html#aea5a637c9775541ffbcea3795538222f',1,'edda::DistrArray::getScalar()'],['../classedda_1_1ScalarDistrArray.html#a812726ffca24ba1ae6867613b8996268',1,'edda::ScalarDistrArray::getScalar()'],['../classedda_1_1VectorDistrArray.html#a7ba96f56da60f8a3231ca1d74f61ddf1',1,'edda::VectorDistrArray::getScalar()'],['../classedda_1_1JointDistrArray.html#a76c98464be7d2f746a703fd10b37090d',1,'edda::JointDistrArray::getScalar()'],['../classedda_1_1GmmVtkDataArray.html#a91261283cd5e58b00b07f95e0dc87ed9',1,'edda::GmmVtkDataArray::getScalar()']]], ['getsource',['GetSource',['../classeddaRandomProbeFilter.html#a654017afa9fbc870c947ea4833c26056',1,'eddaRandomProbeFilter']]], + ['getspacing',['getSpacing',['../classedda_1_1Dataset.html#a885027511ef9edfafb85369e1a1f302c',1,'edda::Dataset']]], ['getstepsize',['getStepSize',['../namespaceedda.html#aa3b8bbdd2ee47371f895f59cb7b998b2',1,'edda']]], - ['gettuple',['GetTuple',['../classvtkSamplingArray.html#a8cb7724cd5a5d880fb83c5a16d933758',1,'vtkSamplingArray::GetTuple(vtkIdType i)'],['../classvtkSamplingArray.html#a9198e7cb513cfd40cf01871d1bc6cae0',1,'vtkSamplingArray::GetTuple(vtkIdType i, double *tuple)'],['../classeddaSamplingArray.html#ab2dccfe1f54d510c301f36f431efa7d8',1,'eddaSamplingArray::GetTuple(vtkIdType i)'],['../classeddaSamplingArray.html#a21d51b69cde556e775bcbbda111698c0',1,'eddaSamplingArray::GetTuple(vtkIdType i, double *tuple)']]], - ['gettuples',['GetTuples',['../classvtkSamplingArray.html#a7bebc7aedd34a523b56b62157968df89',1,'vtkSamplingArray::GetTuples()'],['../classeddaSamplingArray.html#a006f8736c0022ca398aa1e0a4ee0cacb',1,'eddaSamplingArray::GetTuples()']]], - ['getvar',['getVar',['../namespaceedda_1_1dist.html#ae1a0a4253e7afaee605973f5fdb6ede5',1,'edda::dist::getVar(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a31f7eacc233c2d776db7d696c65603a0',1,'edda::dist::getVar(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#aa25f0db989602c94afc4c166db827029',1,'edda::dist::getVar(const Variant &dist)']]], - ['getvector',['getVector',['../classedda_1_1AbstractDataArray.html#a4631c8b1d81460a8319b853d09403db6',1,'edda::AbstractDataArray::getVector()'],['../classedda_1_1DataSamplingArray.html#a5efeb57907431fa9ee9f755ac5bd7849',1,'edda::DataSamplingArray::getVector()'],['../classedda_1_1ScalarArray.html#a324332d06930633966ee4db81f1a47a5',1,'edda::ScalarArray::getVector()'],['../classedda_1_1VectorArray.html#a3e1570929f1aec18d4883b86916b896b',1,'edda::VectorArray::getVector()'],['../classedda_1_1GmmVtkDataArray.html#a32281833ca01307e505282a71c50a00c',1,'edda::GmmVtkDataArray::getVector()']]], - ['getvoidpointer',['GetVoidPointer',['../classvtkSamplingArray.html#af376e0857696d553d3032646ef8ddb37',1,'vtkSamplingArray::GetVoidPointer()'],['../classeddaSamplingArray.html#aaa1270ca6c35fea4ef70cbf412d2be0a',1,'eddaSamplingArray::GetVoidPointer()']]], - ['gmm_5farray_2eh',['gmm_array.h',['../gmm__array_8h.html',1,'']]], - ['gmm_5fndarray_2ecpp',['gmm_ndarray.cpp',['../gmm__ndarray_8cpp.html',1,'']]], + ['gettargetcomponent',['GetTargetComponent',['../classedda_1_1DistrArray.html#aee9a461cdc7198d5e24fee3fd56a487d',1,'edda::DistrArray::GetTargetComponent()'],['../classedda_1_1ScalarDistrArray.html#afde8ec2e09b72b4d3bced51efd42e481',1,'edda::ScalarDistrArray::GetTargetComponent()'],['../classedda_1_1VectorDistrArray.html#a2c4c73a50b6c76b7c822e924e35541e2',1,'edda::VectorDistrArray::GetTargetComponent()'],['../classedda_1_1JointDistrArray.html#afb9c63cfb5e228e05c2c38599d33daed',1,'edda::JointDistrArray::GetTargetComponent()'],['../classedda_1_1GmmVtkDataArray.html#aa3cb2e811c43ba5b41b88230435823a8',1,'edda::GmmVtkDataArray::GetTargetComponent()']]], + ['gettuple',['GetTuple',['../classeddaSamplingArray.html#ab2dccfe1f54d510c301f36f431efa7d8',1,'eddaSamplingArray::GetTuple(vtkIdType i)'],['../classeddaSamplingArray.html#a21d51b69cde556e775bcbbda111698c0',1,'eddaSamplingArray::GetTuple(vtkIdType i, double *tuple)']]], + ['gettuples',['GetTuples',['../classeddaSamplingArray.html#a006f8736c0022ca398aa1e0a4ee0cacb',1,'eddaSamplingArray']]], + ['getumat',['getUMat',['../structedda_1_1dist_1_1JointGaussian.html#af5de6130861940ae8facda0277f0f436',1,'edda::dist::JointGaussian']]], + ['getvar',['getVar',['../classedda_1_1dist_1_1Histogram.html#a023685fca409b8b07f5f167e2e25a9a7',1,'edda::dist::Histogram::getVar()'],['../namespaceedda_1_1dist.html#acd44dfe5c45d9d6e37bf83e250513ed6',1,'edda::dist::getVar(const Dist &dist)'],['../namespaceedda_1_1dist.html#a4ec5e176ff5afc97ece133b8707129d6',1,'edda::dist::getVar(const Real &value)'],['../namespaceedda_1_1dist.html#ae1a0a4253e7afaee605973f5fdb6ede5',1,'edda::dist::getVar(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a506aba2f4e7f4fd143596205f16c043f',1,'edda::dist::getVar(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#ae925f7c4fc5e8761839a17ce455d38b3',1,'edda::dist::getVar(const Histogram &dist)'],['../namespaceedda_1_1dist.html#aa25f0db989602c94afc4c166db827029',1,'edda::dist::getVar(const Variant &dist)']]], + ['getvector',['getVector',['../classedda_1_1DistrArray.html#aa763f6ecd5271bb8143c63732c3cc427',1,'edda::DistrArray::getVector()'],['../classedda_1_1ScalarDistrArray.html#ad2ca9bb63f9e9b37be9eb3533637adc7',1,'edda::ScalarDistrArray::getVector()'],['../classedda_1_1VectorDistrArray.html#ac5f9dbd64ca6c51b6136abac2ed031c0',1,'edda::VectorDistrArray::getVector()'],['../classedda_1_1JointDistrArray.html#ac05bfaa84d0ccdae61eec955e9f5c2fa',1,'edda::JointDistrArray::getVector()'],['../classedda_1_1GmmVtkDataArray.html#ae796813d075e55751cf80d25d364e167',1,'edda::GmmVtkDataArray::getVector()']]], + ['getvoidpointer',['GetVoidPointer',['../classeddaSamplingArray.html#aaa1270ca6c35fea4ef70cbf412d2be0a',1,'eddaSamplingArray']]], + ['gmm',['GMM',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7aa5971b151d3224c6f1fa20078af8478d',1,'edda']]], + ['gmm2',['GMM2',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a75a0486914b1b728d52bfbeca30555d2',1,'edda']]], + ['gmm3',['GMM3',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a2c224be0d0a84c391fa2abd1fe4ee8e1',1,'edda']]], + ['gmm4',['GMM4',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a5b6e9e45babeacf7862db72115ea4d3b',1,'edda']]], + ['gmm5',['GMM5',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a59561bb7e534f1d77bccd3085e3f506d',1,'edda']]], ['gmm_5fraw2vtk_2ecpp',['gmm_raw2vtk.cpp',['../gmm__raw2vtk_8cpp.html',1,'']]], ['gmm_5fvtk_5fdata_5farray_2ecpp',['gmm_vtk_data_array.cpp',['../gmm__vtk__data__array_8cpp.html',1,'']]], ['gmm_5fvtk_5fdata_5farray_2eh',['gmm_vtk_data_array.h',['../gmm__vtk__data__array_8h.html',1,'']]], - ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html',1,'edda']]], ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html#a8882c526949846d7dcd0af6227073e55',1,'edda::GmmArray::GmmArray()'],['../classedda_1_1GmmArray.html#a72bae3ef6338366cb29dd4624a94e0f0',1,'edda::GmmArray::GmmArray(std::vector< NdArray< Real > > &data_)']]], + ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html',1,'edda']]], ['gmmtuple',['GMMTuple',['../structedda_1_1dist_1_1GMMTuple.html',1,'edda::dist']]], ['gmmvtkdataarray',['GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a4a7d87c6074f386ae136fb3806173d7e',1,'edda::GmmVtkDataArray::GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="")'],['../classedda_1_1GmmVtkDataArray.html#a7222e89309e565a3406b71a72375a6f1',1,'edda::GmmVtkDataArray::GmmVtkDataArray(std::vector< vtkSmartPointer< vtkDataArray > > arrays_)']]], ['gmmvtkdataarray',['GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html',1,'edda']]], diff --git a/html/search/all_8.html b/html/search/all_8.html index 0179bdd..80bda06 100644 --- a/html/search/all_8.html +++ b/html/search/all_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_8.js b/html/search/all_8.js index 1fb257e..ace2fb7 100644 --- a/html/search/all_8.js +++ b/html/search/all_8.js @@ -1,22 +1,14 @@ var searchData= [ - ['ijk_5fto_5fidx',['IJK_TO_IDX',['../level__crossing__prob_8h.html#a1b9a61d5870ac595d332e99b4e808637',1,'level_crossing_prob.h']]], - ['incell',['inCell',['../structedda_1_1PointInfo.html#a13dba4966a4b7d7e4e552e9010e7963f',1,'edda::PointInfo']]], - ['indent',['indent',['../classvtkEddaReader.html#a4d3352141bf8250d95cc7a750fd5603a',1,'vtkEddaReader::indent()'],['../classeddaRandomProbeFilter.html#ac38d146802cd315d7581a237b2deb183',1,'eddaRandomProbeFilter::indent()'],['../classeddaRandomSampleField.html#aa4a51806545d1361a752d2b71a2f3b16',1,'eddaRandomSampleField::indent()'],['../classeddaThreshold.html#a357e9ccf6a6db4f7e4c03c3da2fe2a16',1,'eddaThreshold::indent()'],['../classeddaUncertainIsocontour.html#aff0c0464cef279618d1126b3c6ef0ec1',1,'eddaUncertainIsocontour::indent()']]], - ['initialize',['Initialize',['../classvtkSamplingArray.html#ac9878436dbd495d86e101b866c4d3a08',1,'vtkSamplingArray::Initialize()'],['../classeddaSamplingArray.html#a2d54b23cd3cc796fca8d8dcca59e1461',1,'eddaSamplingArray::Initialize()']]], - ['initializedata',['InitializeData',['../classeddaRandomSampleField.html#a5fe3bf9581ae4d2b5fa64fa0066f1e7d',1,'eddaRandomSampleField::InitializeData()'],['../classeddaUncertainIsocontour.html#aa6fb89df5e14e1af150663400d0b0928',1,'eddaUncertainIsocontour::InitializeData()']]], - ['initializeforprobing',['InitializeForProbing',['../classeddaRandomProbeFilter.html#a0fb8a8b51fd20381b2c8e9c0af7979b4',1,'eddaRandomProbeFilter']]], - ['insertnexttuple',['InsertNextTuple',['../classvtkSamplingArray.html#ae5c97d95a1bdaf4adcc7eafc94307061',1,'vtkSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#aeee0f267a87d48967589240c6e10fcee',1,'vtkSamplingArray::InsertNextTuple(const float *tuple)'],['../classvtkSamplingArray.html#a34e50a7a59c79d575bb8fd24aa1cac79',1,'vtkSamplingArray::InsertNextTuple(const double *tuple)'],['../classeddaSamplingArray.html#a5a53d3af13b49fcc96d5740cc6f65c41',1,'eddaSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ad1dcfaae658f8f654a36b5f44169d05c',1,'eddaSamplingArray::InsertNextTuple(const float *tuple)'],['../classeddaSamplingArray.html#a6a217b33265b7c1479e599426ea9bb93',1,'eddaSamplingArray::InsertNextTuple(const double *tuple)']]], - ['inserttuple',['InsertTuple',['../classvtkSamplingArray.html#a7079fab8f11b3b2722e4dbf7abb97745',1,'vtkSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a09661d340900f7aecee9f3afc1e734e2',1,'vtkSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classvtkSamplingArray.html#aa5ac71bb2f6c66897bcd32ff8f8b8b7e',1,'vtkSamplingArray::InsertTuple(vtkIdType i, const double *tuple)'],['../classeddaSamplingArray.html#a3790cca34e0ab1d26fdcb34615b18711',1,'eddaSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ac35f9f51620a0f2041a23c7b97c696a1',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#a75595f1dc37a34015c4a6f61a928c460',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const double *tuple)']]], - ['inserttuples',['InsertTuples',['../classvtkSamplingArray.html#a16e278b6c71acdbbf3eee17f5ba441c6',1,'vtkSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a5ede4d98e477ed0a99e842aa684ffa6b',1,'vtkSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#aefef60a43c103e6c068f9ee808d8e2ff',1,'eddaSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a97382f7737b3062f4bcba5346b0d5db5',1,'eddaSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)']]], - ['insertvariantvalue',['InsertVariantValue',['../classvtkSamplingArray.html#a080bbcfa9a56ce38678e5ffb5295d4d1',1,'vtkSamplingArray::InsertVariantValue()'],['../classeddaSamplingArray.html#a8cc4b752c04c2d717f696c444de90fcf',1,'eddaSamplingArray::InsertVariantValue()']]], - ['interpolant',['interpolant',['../structedda_1_1PointInfo.html#a4c998e4aae508e07f67824248763dbfd',1,'edda::PointInfo']]], - ['interpolator_2eh',['interpolator.h',['../interpolator_8h.html',1,'']]], - ['interptype',['InterpType',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781',1,'edda']]], - ['isfilenameonly',['isFilenameOnly',['../namespaceedda.html#a650c15dfb37c601b775c77c0cae2e2e8',1,'edda::isFilenameOnly(const string &filename)'],['../namespaceedda.html#aeb61617b7fd35e528be54559ab4b791e',1,'edda::isFilenameOnly(const std::string &filename)']]], - ['isinbbox',['isInBBox',['../classedda_1_1Grid.html#ae408bdf07e1399a49b8ed072a6cea3f0',1,'edda::Grid::isInBBox()'],['../classedda_1_1RegularCartesianGrid.html#af49f1b4e511b1483270ac7bd56582246',1,'edda::RegularCartesianGrid::isInBBox()']]], - ['isincell',['isInCell',['../classedda_1_1Grid.html#a1b894a56e8196bde04c97c4e96356b98',1,'edda::Grid::isInCell()'],['../classedda_1_1RegularCartesianGrid.html#abe0e246ccf092b9de8dc51c37bdd8902',1,'edda::RegularCartesianGrid::isInCell()']]], - ['isinrealbbox',['isInRealBBox',['../classedda_1_1Grid.html#a44af2580d9f5b7daaaec751af572d4d3',1,'edda::Grid::isInRealBBox(VECTOR3 &p)=0'],['../classedda_1_1Grid.html#a9f1b1592679771450108ef0efb853211',1,'edda::Grid::isInRealBBox(VECTOR3 &pos, float t)=0'],['../classedda_1_1RegularCartesianGrid.html#af356418f390fe9fad0d47b391e402fc5',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1RegularCartesianGrid.html#a8641391fbf8dc4313b80a0723996119b',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos, float t)']]], - ['isov',['Isov',['../classeddaRandomSampleField.html#a781625f8263388cd304a6d34dd072be3',1,'eddaRandomSampleField::Isov()'],['../classeddaUncertainIsocontour.html#ac39cde59b4de5e912bcad2df35be2593',1,'eddaUncertainIsocontour::Isov()']]], - ['istuple',['IsTuple',['../classedda_1_1Tuple.html#a0959313ba74890d7b6910c5334bd5c21',1,'edda::Tuple']]] + ['height',['height',['../structBMPImage.html#ad56a6b040478a6012223634dcc19005c',1,'BMPImage']]], + ['hexa_5fface',['hexa_face',['../classedda_1_1CurvilinearGrid.html#af4a3a578a56a958f6d4c87d6a000cae9',1,'edda::CurvilinearGrid']]], + ['hexahedral_5fwalk_5flocate',['hexahedral_walk_locate',['../classedda_1_1CurvilinearGrid.html#a2a0891b203a599ff8294a2ccf6debf77',1,'edda::CurvilinearGrid']]], + ['hist',['HIST',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a6e917340f74c567e73e3afda120e206e',1,'edda']]], + ['histo_5farray_2eh',['histo_array.h',['../histo__array_8h.html',1,'']]], + ['histoarray',['HistoArray',['../classedda_1_1HistoArray.html#ad0b8063073cedb2dbb3041ca088516c2',1,'edda::HistoArray::HistoArray()'],['../classedda_1_1HistoArray.html#aa5fe8af9532ea51b928bd84f591ec6cd',1,'edda::HistoArray::HistoArray(std::vector< NdArray< Real > > &data_)']]], + ['histoarray',['HistoArray',['../classedda_1_1HistoArray.html',1,'edda']]], + ['histogram',['Histogram',['../classedda_1_1dist_1_1Histogram.html#a8fcf6c3d74130f50f94aafa76eb81d32',1,'edda::dist::Histogram::Histogram()'],['../classedda_1_1dist_1_1Histogram.html#a24ab247c7281b007a4baa6e6feff325f',1,'edda::dist::Histogram::Histogram(double *histData)'],['../classedda_1_1dist_1_1Histogram.html#a04eed91a93b061ad335c20c07970f90c',1,'edda::dist::Histogram::Histogram(float *histData, int _nBins)'],['../classedda_1_1dist_1_1Histogram.html#aa029ee6d7eb33fe94236d5cb6873a19a',1,'edda::dist::Histogram::Histogram(Real *dataArray, int nElements, const int _nBins, const Real _minValue=1, const Real _maxValue=-1)'],['../classedda_1_1dist_1_1Histogram.html#a76a5afd7910e7afb1e2e311297528586',1,'edda::dist::Histogram::Histogram(const Histogram &hist)']]], + ['histogram',['Histogram',['../classedda_1_1dist_1_1Histogram.html',1,'edda::dist']]], + ['histogram_2eh',['histogram.h',['../histogram_8h.html',1,'']]], + ['hybrid',['HYBRID',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a07b98b2333d2fff7e7fa92da24d4bc54',1,'edda']]] ]; diff --git a/html/search/all_9.html b/html/search/all_9.html index cd46d44..8ebc8a2 100644 --- a/html/search/all_9.html +++ b/html/search/all_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_9.js b/html/search/all_9.js index d2c34b1..7771f5d 100644 --- a/html/search/all_9.js +++ b/html/search/all_9.js @@ -1,4 +1,31 @@ var searchData= [ - ['kndarraymaxdims',['kNdArrayMaxDims',['../namespaceedda.html#a34a02e3b4884d34500d553916a6015ff',1,'edda']]] + ['identity',['Identity',['../classedda_1_1MATRIX3.html#aa3578f2299cffbe6d46388c4afc89d37',1,'edda::MATRIX3']]], + ['ijk',['ijk',['../structedda_1_1Cell.html#a751450b94f6ae7d56f1df6e8320269a2',1,'edda::Cell']]], + ['ijk_5fto_5fidx',['IJK_TO_IDX',['../level__crossing__prob_8h.html#a1b9a61d5870ac595d332e99b4e808637',1,'level_crossing_prob.h']]], + ['incell',['inCell',['../structedda_1_1PointInfo.html#a13dba4966a4b7d7e4e552e9010e7963f',1,'edda::PointInfo']]], + ['indent',['indent',['../classeddaRandomProbeFilter.html#ac38d146802cd315d7581a237b2deb183',1,'eddaRandomProbeFilter::indent()'],['../classeddaRandomSampleField.html#aa4a51806545d1361a752d2b71a2f3b16',1,'eddaRandomSampleField::indent()'],['../classeddaThreshold.html#a357e9ccf6a6db4f7e4c03c3da2fe2a16',1,'eddaThreshold::indent()'],['../classeddaUncertainIsocontour.html#aff0c0464cef279618d1126b3c6ef0ec1',1,'eddaUncertainIsocontour::indent()']]], + ['init_5fjacobian_5fvectors',['init_jacobian_vectors',['../classedda_1_1CurvilinearGrid.html#adab903c5a72441472ff90ff176342d86',1,'edda::CurvilinearGrid']]], + ['inithistogram',['initHistogram',['../classedda_1_1DistributionModeler.html#a8c37ffbbf6ba2915785eb4c38630a5ca',1,'edda::DistributionModeler::initHistogram()'],['../classedda_1_1VecDistrModeler.html#a7d9d4ef5a891e06b5137e929b2a011dc',1,'edda::VecDistrModeler::initHistogram()']]], + ['initialize',['Initialize',['../classeddaSamplingArray.html#a2d54b23cd3cc796fca8d8dcca59e1461',1,'eddaSamplingArray']]], + ['initializedata',['InitializeData',['../classeddaRandomSampleField.html#a5fe3bf9581ae4d2b5fa64fa0066f1e7d',1,'eddaRandomSampleField::InitializeData()'],['../classeddaUncertainIsocontour.html#aa6fb89df5e14e1af150663400d0b0928',1,'eddaUncertainIsocontour::InitializeData()']]], + ['initializeforprobing',['InitializeForProbing',['../classeddaRandomProbeFilter.html#a0fb8a8b51fd20381b2c8e9c0af7979b4',1,'eddaRandomProbeFilter']]], + ['initvectorcomponent',['initVectorComponent',['../classedda_1_1VecDistrModeler.html#a19bd3017c95d296d29e38f26d41da049',1,'edda::VecDistrModeler']]], + ['insertnexttuple',['InsertNextTuple',['../classeddaSamplingArray.html#a5a53d3af13b49fcc96d5740cc6f65c41',1,'eddaSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ad1dcfaae658f8f654a36b5f44169d05c',1,'eddaSamplingArray::InsertNextTuple(const float *tuple)'],['../classeddaSamplingArray.html#a6a217b33265b7c1479e599426ea9bb93',1,'eddaSamplingArray::InsertNextTuple(const double *tuple)']]], + ['inserttuple',['InsertTuple',['../classeddaSamplingArray.html#a3790cca34e0ab1d26fdcb34615b18711',1,'eddaSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ac35f9f51620a0f2041a23c7b97c696a1',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#a75595f1dc37a34015c4a6f61a928c460',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const double *tuple)']]], + ['inserttuples',['InsertTuples',['../classeddaSamplingArray.html#aefef60a43c103e6c068f9ee808d8e2ff',1,'eddaSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a97382f7737b3062f4bcba5346b0d5db5',1,'eddaSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)']]], + ['insertvariantvalue',['InsertVariantValue',['../classeddaSamplingArray.html#a8cc4b752c04c2d717f696c444de90fcf',1,'eddaSamplingArray']]], + ['interpolant',['interpolant',['../structedda_1_1PointInfo.html#a4c998e4aae508e07f67824248763dbfd',1,'edda::PointInfo']]], + ['interpolator_2eh',['interpolator.h',['../interpolator_8h.html',1,'']]], + ['interptype',['InterpType',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781',1,'edda']]], + ['inverse',['inverse',['../classedda_1_1MATRIX3.html#a85fba645c6aef23b057514485a745c50',1,'edda::MATRIX3']]], + ['inverse_5fjacobian_5ft',['inverse_jacobian_t',['../classedda_1_1CurvilinearGrid.html#a99ba7a06aa358bb42288c643d7ec0d46',1,'edda::CurvilinearGrid']]], + ['invert_5fmatrix',['invert_matrix',['../namespaceedda.html#a5a86f75ae6bab789e3b007f2c7baf953',1,'edda']]], + ['invert_5fmatrix_2eh',['invert_matrix.h',['../invert__matrix_8h.html',1,'']]], + ['isfilenameonly',['isFilenameOnly',['../namespaceedda.html#a650c15dfb37c601b775c77c0cae2e2e8',1,'edda::isFilenameOnly(const string &filename)'],['../namespaceedda.html#a78433ff250adc5c1a5acd7e1c3fc1167',1,'edda::isFilenameOnly(const std::string &filename)']]], + ['isinbbox',['isInBBox',['../classedda_1_1CurvilinearGrid.html#aa5ec9f4860ea445e2ea00a050a37f5d7',1,'edda::CurvilinearGrid::isInBBox()'],['../classedda_1_1Grid.html#ae408bdf07e1399a49b8ed072a6cea3f0',1,'edda::Grid::isInBBox()'],['../classedda_1_1RegularCartesianGrid.html#af49f1b4e511b1483270ac7bd56582246',1,'edda::RegularCartesianGrid::isInBBox()']]], + ['isincell',['isInCell',['../classedda_1_1CurvilinearGrid.html#ad956441c37414f6c499b0c3339c31fa7',1,'edda::CurvilinearGrid::isInCell()'],['../classedda_1_1Grid.html#a1b894a56e8196bde04c97c4e96356b98',1,'edda::Grid::isInCell()'],['../classedda_1_1RegularCartesianGrid.html#abe0e246ccf092b9de8dc51c37bdd8902',1,'edda::RegularCartesianGrid::isInCell()']]], + ['isinrealbbox',['isInRealBBox',['../classedda_1_1CurvilinearGrid.html#af3a6e64599a5cdf193ac4b9c68b6804d',1,'edda::CurvilinearGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1CurvilinearGrid.html#a0a4030e55cf42268c402d37125cb116f',1,'edda::CurvilinearGrid::isInRealBBox(VECTOR3 &pos, float t)'],['../classedda_1_1Grid.html#a44af2580d9f5b7daaaec751af572d4d3',1,'edda::Grid::isInRealBBox(VECTOR3 &p)=0'],['../classedda_1_1Grid.html#a9f1b1592679771450108ef0efb853211',1,'edda::Grid::isInRealBBox(VECTOR3 &pos, float t)=0'],['../classedda_1_1RegularCartesianGrid.html#af356418f390fe9fad0d47b391e402fc5',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1RegularCartesianGrid.html#a8641391fbf8dc4313b80a0723996119b',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos, float t)']]], + ['isov',['Isov',['../classeddaRandomSampleField.html#a781625f8263388cd304a6d34dd072be3',1,'eddaRandomSampleField::Isov()'],['../classeddaUncertainIsocontour.html#ac39cde59b4de5e912bcad2df35be2593',1,'eddaUncertainIsocontour::Isov()']]], + ['istuple',['IsTuple',['../classedda_1_1Tuple.html#a0959313ba74890d7b6910c5334bd5c21',1,'edda::Tuple']]] ]; diff --git a/html/search/all_a.html b/html/search/all_a.html index eab6553..f17bf66 100644 --- a/html/search/all_a.html +++ b/html/search/all_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_a.js b/html/search/all_a.js index 2e6df85..7d47eb7 100644 --- a/html/search/all_a.js +++ b/html/search/all_a.js @@ -1,25 +1,15 @@ var searchData= [ - ['length',['LENGTH',['../classedda_1_1Tuple.html#afb8ddf6fb80305c89efa8473e3a2cb8ea315f6eceb8fc99af67f42c59586efb29',1,'edda::Tuple::LENGTH()'],['../classedda_1_1GmmVtkDataArray.html#a6add24c021c3834d0976f8e889ccda8c',1,'edda::GmmVtkDataArray::length()'],['../classedda_1_1Tuple.html#a215ff458f27cc0fe956891848c6c7fc9',1,'edda::Tuple::length()']]], - ['lerp',['lerp',['../namespaceedda.html#a11b2f402dfb2825dd367b2746ea4de3b',1,'edda']]], - ['level_5fcrossing_5fprob_2eh',['level_crossing_prob.h',['../level__crossing__prob_8h.html',1,'']]], - ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html',1,'edda::detail']]], - ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a83000c2b698e25f4965363b9ec9f7d07',1,'edda::detail::LevelCrossingFunctor']]], - ['levelcrossingprob',['levelCrossingProb',['../namespaceedda.html#a10964cd6e9d723498536ca77b487f664',1,'edda']]], - ['license_2emd',['LICENSE.md',['../LICENSE_8md.html',1,'']]], - ['linewidget',['lineWidget',['../streamlineGaussianVTK_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'lineWidget(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'lineWidget(): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#ae63c6f6b90e2ccc16c4bfa872d63dacd',1,'lineWidget(): test_vtk_pipeline.cpp']]], - ['loaddata',['loadData',['../namespaceedda.html#af9dab9d3a9c202d56da2edb4137c3e34',1,'edda']]], - ['loadgaussianrawarray',['loadGaussianRawArray',['../namespaceedda.html#ad0bdbe77e68ea2bc22b1a708e21e6baa',1,'edda::loadGaussianRawArray(string meanfile, string stdfile, size_t len)'],['../namespaceedda.html#a553d9689ba28d5278a6c938e1b2bcdad',1,'edda::loadGaussianRawArray(std::string meanfile, std::string stdfile, size_t len)']]], - ['loadgaussianregulargrids',['loadGaussianRegularGrids',['../namespaceedda.html#a770a1dc2f490ee6b674ebc7d37aff2e8',1,'edda::loadGaussianRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#aa7e1bcd4725ccc86da94b89f6cfd9874',1,'edda::loadGaussianRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadgaussiansamplingregulargrids',['loadGaussianSamplingRegularGrids',['../namespaceedda.html#aa147eaacf686f9ca543b76d40f895478',1,'edda::loadGaussianSamplingRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#a850c736f7689de01f62dede353d555c2',1,'edda::loadGaussianSamplingRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadgaussianscalarfield_2ecpp',['loadGaussianScalarField.cpp',['../loadGaussianScalarField_8cpp.html',1,'']]], - ['loadgaussianvectorfield_2ecpp',['loadGaussianVectorField.cpp',['../loadGaussianVectorField_8cpp.html',1,'']]], - ['loadrawfile',['loadRawFile',['../namespaceedda.html#ab3649691ea7a7b3e0bc37a636578b223',1,'edda']]], - ['loadvec3gaussianrawarray',['loadVec3GaussianRawArray',['../namespaceedda.html#a9d41bb881d0825bb5ab0f32b7ea4a0c2',1,'edda::loadVec3GaussianRawArray(string meanfile, string stdfile, size_t len)'],['../namespaceedda.html#a4e31702f23f37b96cdcf16fb03846808',1,'edda::loadVec3GaussianRawArray(std::string meanfile, std::string stdfile, size_t len)']]], - ['loadvec3gaussianregulargrids',['loadVec3GaussianRegularGrids',['../namespaceedda.html#ab2fb088e61990e94cc358cf02017af99',1,'edda::loadVec3GaussianRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#aa084dc0f2ddd1a90149bc0c9913b8965',1,'edda::loadVec3GaussianRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadvec3gaussiansamplingregulargrids',['loadVec3GaussianSamplingRegularGrids',['../namespaceedda.html#a7594c8d9d0a433f24bebc894d95c781d',1,'edda::loadVec3GaussianSamplingRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#a2d146a5d586cc1cf8dba62e45393eca1',1,'edda::loadVec3GaussianSamplingRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadvectordata',['loadVectorData',['../namespaceedda.html#a92a51d8e27341b8b713f144c7919aef4',1,'edda']]], - ['lookupvalue',['LookupValue',['../classvtkSamplingArray.html#a9dd53fbbbec73e4605cab387b829d70b',1,'vtkSamplingArray::LookupValue(vtkVariant value)'],['../classvtkSamplingArray.html#a721c8f15feee37c9f3dca448df2b2965',1,'vtkSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)'],['../classeddaSamplingArray.html#a8e2d7af44f27052d28b093209b2525ba',1,'eddaSamplingArray::LookupValue(vtkVariant value)'],['../classeddaSamplingArray.html#ad68fe2bb7916ad21caeea2ddea3a655b',1,'eddaSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)']]], - ['lowerthreshold',['LowerThreshold',['../classeddaThreshold.html#a27a4fb8c390c575bf22b8c864c25d13d',1,'eddaThreshold']]], - ['license',['LICENSE',['../md_LICENSE.html',1,'']]] + ['joint_5fgaussian_2eh',['joint_gaussian.h',['../joint__gaussian_8h.html',1,'']]], + ['joint_5fgmm_2eh',['joint_GMM.h',['../joint__GMM_8h.html',1,'']]], + ['joint_5fhistogram_2eh',['joint_histogram.h',['../joint__histogram_8h.html',1,'']]], + ['jointdistrarray',['JointDistrArray',['../classedda_1_1JointDistrArray.html#afddb4a57585b39908f240797726dc120',1,'edda::JointDistrArray::JointDistrArray(shared_ary< Distr > array, int num_comps)'],['../classedda_1_1JointDistrArray.html#a083660787ae85d08d0ba013bd70c03a2',1,'edda::JointDistrArray::JointDistrArray(shared_ary< Distr > array)']]], + ['jointdistrarray',['JointDistrArray',['../classedda_1_1JointDistrArray.html',1,'edda']]], + ['jointdistributiontag',['JointDistributionTag',['../classedda_1_1dist_1_1JointDistributionTag.html',1,'edda::dist']]], + ['jointgaussian',['JointGaussian',['../structedda_1_1dist_1_1JointGaussian.html#af3b46828cb14f0ae54211364973ed7d6',1,'edda::dist::JointGaussian::JointGaussian()'],['../structedda_1_1dist_1_1JointGaussian.html#a17ff41d9125c26c925da8352b1f3892c',1,'edda::dist::JointGaussian::JointGaussian(const ublas_vector &mean, const ublas_matrix &cov)']]], + ['jointgaussian',['JointGaussian',['../structedda_1_1dist_1_1JointGaussian.html',1,'edda::dist']]], + ['jointgmm',['JointGMM',['../classedda_1_1dist_1_1JointGMM.html',1,'edda::dist']]], + ['jointgmm',['JointGMM',['../classedda_1_1dist_1_1JointGMM.html#a05da04ffd4ecb9a2d92852ec395df755',1,'edda::dist::JointGMM::JointGMM()'],['../classedda_1_1dist_1_1JointGMM.html#ac77e7e74791e1f8448e6ed539c7ffe31',1,'edda::dist::JointGMM::JointGMM(const JointGMM &gmm)']]], + ['jointhistogram',['JointHistogram',['../structedda_1_1dist_1_1JointHistogram.html#a45163a4ab60ddc5ef248975a124b8e5c',1,'edda::dist::JointHistogram::JointHistogram()'],['../structedda_1_1dist_1_1JointHistogram.html#acd11826fedf1978f822a998f8652f27d',1,'edda::dist::JointHistogram::JointHistogram(std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)'],['../structedda_1_1dist_1_1JointHistogram.html#a2dba9cf6f5d62c43921f8065aa382260',1,'edda::dist::JointHistogram::JointHistogram(int nVars, std::vector< Real > mins, std::vector< Real > maxs, std::vector< Real > binWidths, std::vector< int > nBins, boost::unordered_map< std::vector< int >, Real > new_pdf, ublas_vector new_mean, ublas_matrix new_cov)']]], + ['jointhistogram',['JointHistogram',['../structedda_1_1dist_1_1JointHistogram.html',1,'edda::dist']]] ]; diff --git a/html/search/all_b.html b/html/search/all_b.html index a2c161e..6ef469e 100644 --- a/html/search/all_b.html +++ b/html/search/all_b.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_b.js b/html/search/all_b.js index 7f7b964..d2c34b1 100644 --- a/html/search/all_b.js +++ b/html/search/all_b.js @@ -1,18 +1,4 @@ var searchData= [ - ['m',['m',['../structedda_1_1dist_1_1GMMTuple.html#a51f92001831208525f57b22006b874e8',1,'edda::dist::GMMTuple']]], - ['m_5fndimension',['m_nDimension',['../classedda_1_1CartesianGrid.html#ab87b87344ff04b342fba7a09bfd36259',1,'edda::CartesianGrid']]], - ['m_5fvmaxbound',['m_vMaxBound',['../classedda_1_1CartesianGrid.html#a096d323e8074766915b96d4d5ba545c3',1,'edda::CartesianGrid']]], - ['m_5fvmaxrealbound',['m_vMaxRealBound',['../classedda_1_1CartesianGrid.html#a363b39d07aa945fd4b0ea38ed36831e3',1,'edda::CartesianGrid']]], - ['m_5fvminbound',['m_vMinBound',['../classedda_1_1CartesianGrid.html#a6b76c040a7f84ec3ccf4bc29de8672fc',1,'edda::CartesianGrid']]], - ['m_5fvminrealbound',['m_vMinRealBound',['../classedda_1_1CartesianGrid.html#a5eda0e56f6f7d3b802ece2d418e2e9f4',1,'edda::CartesianGrid']]], - ['main',['main',['../denseSamplingField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): denseSamplingField.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): fuzzyIsocontourVTK.cpp'],['../randomSample_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): randomSample.cpp'],['../streamlineGaussianVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineMonteCarlo.cpp'],['../uncertainIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): uncertainIsocontourVTK.cpp'],['../loadGaussianScalarField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadGaussianScalarField.cpp'],['../loadGaussianVectorField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadGaussianVectorField.cpp'],['../test__variant_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_variant.cpp'],['../test__vtk__pipeline_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): test_vtk_pipeline.cpp'],['../test__vtkEddaReader_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtkEddaReader.cpp'],['../gmm__raw2vtk_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): gmm_raw2vtk.cpp'],['../test__array_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_array.cpp'],['../test__vtk__filters_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtk_filters.cpp']]], - ['make_5fdataset',['make_Dataset',['../namespaceedda.html#a3f08b2db90fb22fbd37da5e8a7ad8759',1,'edda']]], - ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html',1,'edda::detail']]], - ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html#a8684a5ede0a882636924da4213def59a',1,'edda::detail::MakeStridedGmm::MakeStridedGmm()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a9f8475cd1640b85b26165e93363fb705',1,'edda::detail::MakeStridedGmm::MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)']]], - ['maskpoints',['MaskPoints',['../classeddaRandomProbeFilter.html#aaa3705c5768ecba66c0ab92b081bc7c5',1,'eddaRandomProbeFilter']]], - ['max_5fgmms',['MAX_GMMs',['../common_8h.html#a68251c7af4b9d9b0060747d1d2768bb5',1,'common.h']]], - ['max_5fsteps',['max_steps',['../classedda_1_1StreamTracer.html#abb1e966b1b8d8674a082f9f23e9948f5',1,'edda::StreamTracer']]], - ['mean',['mean',['../structedda_1_1dist_1_1Gaussian.html#abded38b8a7bfc642a7d3fe7690b58a7c',1,'edda::dist::Gaussian']]], - ['models',['models',['../classedda_1_1dist_1_1GaussianMixture.html#a7b44bbaaa4ea8a49ccf5f04e1628032b',1,'edda::dist::GaussianMixture']]] + ['kndarraymaxdims',['kNdArrayMaxDims',['../namespaceedda.html#a34a02e3b4884d34500d553916a6015ff',1,'edda']]] ]; diff --git a/html/search/all_c.html b/html/search/all_c.html index bdd3ee2..4ca7bb9 100644 --- a/html/search/all_c.html +++ b/html/search/all_c.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_c.js b/html/search/all_c.js index 5e32da0..c11c1be 100644 --- a/html/search/all_c.js +++ b/html/search/all_c.js @@ -1,23 +1,26 @@ var searchData= [ - ['narrays',['narrays',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab7974a41a2bf7bd27678b6c1afa0a3a0',1,'edda::detail::MakeStridedGmm::narrays()'],['../classedda_1_1GmmArray.html#a3da54976d6acc96ae59c51d58c4c263d',1,'edda::GmmArray::narrays()']]], - ['ndarray',['NdArray',['../classedda_1_1NdArray.html',1,'edda']]], - ['ndarray',['NdArray',['../classedda_1_1NdArray.html#a0abdf947385624a40c4155c8e1bb062a',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#a684a9d17ef355e6326670a9de4b969b1',1,'edda::NdArray::NdArray(int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#a4dfa99dd16afaff2c67f16373387bec5',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims)'],['../classedda_1_1NdArray.html#a66f05b73d99ed3cae72f76055b0a4c96',1,'edda::NdArray::NdArray(Type *data, int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#a66396544ac7769d5b4dc60d92e71ead6',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims)'],['../classedda_1_1NdArray.html#aec8e7397b842ea9296d2f85198bf5465',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dev_ptr, int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#ae633a1410673ad6097e750b5fa3ba0fa',1,'edda::NdArray::NdArray(const NdArray< Type > &ptr)'],['../classedda_1_1NdArray.html#a1a30d1735b2c3ba3d0ac938b499d0cb4',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#aa9cd12543a68ed9b868c037daa35cf63',1,'edda::NdArray::NdArray(int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a3ff76f2e8debe3f7d59dafed51732e96',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#a2244b2694148f802f617f045f59a4a83',1,'edda::NdArray::NdArray(Type *data, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a91bea3ecf3695047292f851e87448177',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#ac9afd638e4ecfe02e1a670381f3554fc',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dData, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a0c31d15f5a3ac139ba5330d9477fd46a',1,'edda::NdArray::NdArray(const NdArray &obj)']]], - ['ndarray_2eh',['ndarray.h',['../old_2ndarray_8h.html',1,'']]], - ['ndarray_2eh',['ndarray.h',['../src_2core_2ndarray_8h.html',1,'']]], - ['ndarray_3c_20real_20_3e',['NdArray< Real >',['../classedda_1_1NdArray.html',1,'edda']]], - ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html',1,'edda']]], - ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html#a773439b81d38c01ceea2a6f87e053ef6',1,'edda::ndarray_iterator']]], - ['ndarray_5fiterator_2eh',['ndarray_iterator.h',['../ndarray__iterator_8h.html',1,'']]], - ['new',['New',['../classvtkCompositeUncertainIsocontour.html#aa078cd01aa819c9b4fbea769407a5876',1,'vtkCompositeUncertainIsocontour::New()'],['../classvtkEddaReader.html#af56e2965c0d3c112905d5899020cebda',1,'vtkEddaReader::New()'],['../classeddaRandomProbeFilter.html#ac2e25358fa6d393d0e14b6a9723f9c11',1,'eddaRandomProbeFilter::New()'],['../classeddaRandomSampleField.html#ac97c3e54a48f5623c6d50134171ac68f',1,'eddaRandomSampleField::New()'],['../classeddaThreshold.html#a8667a189d7931b2b2d3b8254e97d5b3f',1,'eddaThreshold::New()'],['../classeddaUncertainIsocontour.html#a92ff4c4b076822b4fb4d9e916173f8d4',1,'eddaUncertainIsocontour::New()']]], - ['newiterator',['NewIterator',['../classvtkSamplingArray.html#a8121dcf4b9e0d537119733225d3bff90',1,'vtkSamplingArray::NewIterator()'],['../classeddaSamplingArray.html#a9db524110a7b67181975c48ce5469c5a',1,'eddaSamplingArray::NewIterator()']]], - ['normalize',['normalize',['../classedda_1_1Vector.html#a7b782d162af77f502480d3cc9dab287f',1,'edda::Vector::normalize()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a44a3c23b172bf3fadb7e4e2b743784e4',1,'edda::Vector< Real, 3 >::normalize()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abeb3985e6b892c60380f37019dd5fc22',1,'edda::Vector< Real, 4 >::normalize()']]], - ['normalizeweights',['normalizeWeights',['../classedda_1_1dist_1_1GaussianMixture.html#a5a23c20c755a9ebf03628d7fbe88be51',1,'edda::dist::GaussianMixture']]], - ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html',1,'edda']]], - ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html#a8906b88f0485fab9f5513adf17878c06',1,'edda::NotImplementedException']]], - ['nrrd_2ecpp',['nrrd.cpp',['../nrrd_8cpp.html',1,'']]], - ['nrrd_2eh',['nrrd.h',['../nrrd_8h.html',1,'']]], - ['num_5fof_5fdims',['num_of_dims',['../classedda_1_1NdArray.html#acd6b6df685abb90925fe856c0eec99ea',1,'edda::NdArray']]], - ['num_5fof_5felems',['num_of_elems',['../classedda_1_1GmmArray.html#abe3844027b4efd8eaa029c78735f4fa6',1,'edda::GmmArray::num_of_elems()'],['../classedda_1_1NdArray.html#a680c5833ff6e442928e877282a047d99',1,'edda::NdArray::num_of_elems()']]], - ['numberofvalidpoints',['NumberOfValidPoints',['../classeddaRandomProbeFilter.html#ab9f37f880d57cc5d17f63cd1123e09e2',1,'eddaRandomProbeFilter']]] + ['length',['LENGTH',['../classedda_1_1Tuple.html#afb8ddf6fb80305c89efa8473e3a2cb8ea315f6eceb8fc99af67f42c59586efb29',1,'edda::Tuple::LENGTH()'],['../classedda_1_1GmmVtkDataArray.html#a6add24c021c3834d0976f8e889ccda8c',1,'edda::GmmVtkDataArray::length()'],['../classedda_1_1Tuple.html#a1995e5d1027885bf9fbd1eb492dd62b0',1,'edda::Tuple::length()']]], + ['lerp',['lerp',['../namespaceedda.html#a11b2f402dfb2825dd367b2746ea4de3b',1,'edda']]], + ['level_5fcrossing_5fprob_2eh',['level_crossing_prob.h',['../level__crossing__prob_8h.html',1,'']]], + ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html',1,'edda::detail']]], + ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a83000c2b698e25f4965363b9ec9f7d07',1,'edda::detail::LevelCrossingFunctor']]], + ['levelcrossingprob',['levelCrossingProb',['../namespaceedda.html#a10964cd6e9d723498536ca77b487f664',1,'edda']]], + ['license_2emd',['LICENSE.md',['../LICENSE_8md.html',1,'']]], + ['linewidget',['lineWidget',['../streamlineMonteCarlo_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'streamlineMonteCarlo.cpp']]], + ['loadcurvilineardataset_2ecpp',['loadCurvilinearDataset.cpp',['../loadCurvilinearDataset_8cpp.html',1,'']]], + ['loadeddadataset',['loadEddaDataset',['../namespaceedda.html#a31366f061dcd4fdbcb594962a0a92123',1,'edda']]], + ['loadeddadatasettemplate',['loadEddaDatasetTemplate',['../namespaceedda.html#af8e5336e85fafb75fbbb554976e3c5f1',1,'edda']]], + ['loadeddascalardataset',['loadEddaScalarDataset',['../namespaceedda.html#a232e8d200d03969dfda8651f4595413b',1,'edda::loadEddaScalarDataset(const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#a044d1013647d14c501d7439e0107461b',1,'edda::loadEddaScalarDataset(const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['loadeddascalardataset_5fnonevtk',['loadEddaScalarDataset_noneVTK',['../namespaceedda.html#a0176f3df770a81a866555d83031314e0',1,'edda::loadEddaScalarDataset_noneVTK(const string &edda_file)'],['../namespaceedda.html#ab31a6c38e69fb7d44f6881d72f445c45',1,'edda::loadEddaScalarDataset_noneVTK(const std::string &edda_file)']]], + ['loadeddavector3dataset',['loadEddaVector3Dataset',['../namespaceedda.html#a87ca0e53d7d40f1273b6bbbccdf6f359',1,'edda::loadEddaVector3Dataset(const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#a23d552e79d112a68ff0ace5c522fae54',1,'edda::loadEddaVector3Dataset(const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['loadeddavector3dataset_5fnonevtk',['loadEddaVector3Dataset_noneVTK',['../namespaceedda.html#adab080ce51506bc7ae6ec2175f790476',1,'edda::loadEddaVector3Dataset_noneVTK(const string &edda_file)'],['../namespaceedda.html#a58f7892f2380f346cab70664a7112f45',1,'edda::loadEddaVector3Dataset_noneVTK(const std::string &edda_file)']]], + ['loadscalardataset_2ecpp',['loadScalarDataset.cpp',['../loadScalarDataset_8cpp.html',1,'']]], + ['locate',['locate',['../classedda_1_1CurvilinearGrid.html#ac1961aee6a8ddb5896d3c9154efa8d41',1,'edda::CurvilinearGrid::locate(VECTOR3, Cell &)'],['../classedda_1_1CurvilinearGrid.html#a09dc1627514970ef26560fc87880c26c',1,'edda::CurvilinearGrid::locate(VECTOR3 pp, Cell &prev_cell, Cell &cell)']]], + ['locate_5fclose_5fvertex_5fcell',['locate_close_vertex_cell',['../classedda_1_1CurvilinearGrid.html#af5c50d9d03aa0002baff200d6d205573',1,'edda::CurvilinearGrid']]], + ['locate_5finitialization',['locate_initialization',['../classedda_1_1CurvilinearGrid.html#a7ec4b4c9088d7a282381068cb23c4bc0',1,'edda::CurvilinearGrid']]], + ['long',['LONG',['../bmp__image_8h.html#a27ec6163192f1e1e72d87421379ea3d4',1,'bmp_image.h']]], + ['lookupvalue',['LookupValue',['../classeddaSamplingArray.html#a8e2d7af44f27052d28b093209b2525ba',1,'eddaSamplingArray::LookupValue(vtkVariant value)'],['../classeddaSamplingArray.html#ad68fe2bb7916ad21caeea2ddea3a655b',1,'eddaSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)']]], + ['lowerthreshold',['LowerThreshold',['../classeddaThreshold.html#a27a4fb8c390c575bf22b8c864c25d13d',1,'eddaThreshold']]], + ['license',['LICENSE',['../md_LICENSE.html',1,'']]] ]; diff --git a/html/search/all_d.html b/html/search/all_d.html index d510933..fedf606 100644 --- a/html/search/all_d.html +++ b/html/search/all_d.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_d.js b/html/search/all_d.js index db0341b..3f730c7 100644 --- a/html/search/all_d.js +++ b/html/search/all_d.js @@ -1,19 +1,39 @@ var searchData= [ - ['operator_21_3d',['operator!=',['../namespaceedda.html#af67fbd966d5b27087d91e6f03578182e',1,'edda']]], - ['operator_28_29',['operator()',['../structedda_1_1detail_1_1MakeStridedGmm.html#a9dca80558776667d82ff47ae0c92db4f',1,'edda::detail::MakeStridedGmm::operator()()'],['../structedda_1_1Rand.html#a5a38aac92548b3f31d1b16303a3bee0b',1,'edda::Rand::operator()()'],['../structedda_1_1detail_1_1GenRand.html#a68ba11082a68844dc47569c783a4ded8',1,'edda::detail::GenRand::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#acd2a8c160d5ab421874fca981b31eb55',1,'edda::dist::detail::_getPdf::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a6424d543a81f75cdd69f24023f03c202',1,'edda::dist::detail::_getPdf::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a5c4c54fb06bc68af3b1ddf0d58251117',1,'edda::dist::detail::_getCdf::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a559eb61fc139e513223eca929c593020',1,'edda::dist::detail::_getCdf::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#aab900f64d0ecdcf09c8e029da314549d',1,'edda::dist::detail::_getMean::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#adaefb1915027f1148233486f3d3308dc',1,'edda::dist::detail::_getMean::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#ab461512d48aa011b46b8c8ea0fd1ebc7',1,'edda::dist::detail::_getVar::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#a8a70478cd10813a1120f92032f9aa0f1',1,'edda::dist::detail::_getVar::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#a8041e22e1d0fe81e5da6e5edae40ae28',1,'edda::dist::detail::_getSample::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#af6f156cd9c20190130cb7c9e2e0784e2',1,'edda::dist::detail::_getSample::operator()(const Real &value)'],['../classedda_1_1detail_1_1FuzzyIsocontour.html#a25e0eaa572478a70b8b58e6f931f07ae',1,'edda::detail::FuzzyIsocontour::operator()()'],['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a36c2d21711184f3daf6a3f33281a4d55',1,'edda::detail::LevelCrossingFunctor::operator()()'],['../structedda_1_1detail_1_1GetSample__functor.html#a46804b47fe97932a0e709875c456c2e9',1,'edda::detail::GetSample_functor::operator()()'],['../structedda_1_1GetSample__functor.html#a5f4849e63cbb242edb757175ce6012a1',1,'edda::GetSample_functor::operator()()']]], - ['operator_2a',['operator*',['../namespaceedda.html#a93a705f34f601e0c925267ab199b479f',1,'edda::operator*(Vector3< Real > &v0, Vector3< Real > &v1)'],['../namespaceedda.html#a092ab795ecf1f325e4056f40858d371b',1,'edda::operator*(float x0, const Vector3< Real > &v0)'],['../namespaceedda.html#a4d54e9ca6dd220324644e648329d863b',1,'edda::operator*(const Vector3< Real > &v0, float x0)'],['../namespaceedda.html#acdef9524e97c2706696c859254d81e94',1,'edda::operator*(Vector4< Real > &v0, Vector4< Real > &v1)'],['../namespaceedda.html#a913e795aa19c428470e731edbc5eb89e',1,'edda::operator*(float x0, const Vector4< Real > &v0)'],['../namespaceedda.html#af5b257dd62a06c315c2aa54eede0f31c',1,'edda::operator*(const Vector4< Real > &v0, float x0)'],['../namespaceedda_1_1dist.html#a78f6668de51fec25ca4aa7b20e8ff0d4',1,'edda::dist::operator*()']]], - ['operator_2a_3d',['operator*=',['../classedda_1_1Vector.html#a25d1c240ae3711b22744d51a0b126964',1,'edda::Vector::operator*=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#afccc2dbdbc600927565c0f65ae947e18',1,'edda::Vector< Real, 3 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a785486f5047caae109488890f0afa2d7',1,'edda::Vector< Real, 3 >::operator*=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abf2b05cabb5b258eadae11bf0dffb9e5',1,'edda::Vector< Real, 4 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a483a6a7ec9e8161f5b90c2947418e6e0',1,'edda::Vector< Real, 4 >::operator*=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#a38c31366442e9ca68ca47078e45fb753',1,'edda::dist::operator*=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#afd0226c751009498f2cc44927210cddd',1,'edda::dist::operator*=(GaussianMixture< GMMs > &x, const double r)']]], - ['operator_2b',['operator+',['../namespaceedda.html#acecfbcb6c30af36d25b9b1b9cedbe59c',1,'edda::operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a27197e5e9ff856ae849deb83455a3d86',1,'edda::operator+(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a009a15003c26d6a2758d765b7b6a1986',1,'edda::dist::operator+()']]], - ['operator_2b_3d',['operator+=',['../classedda_1_1Vector.html#aee0537c94e3200cb990b7e3c1f2dcb07',1,'edda::Vector::operator+=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ab313e1388d04b85e88769a97795682b2',1,'edda::Vector< Real, 3 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a6c655cded68b3a825cbbfd55e30366bf',1,'edda::Vector< Real, 3 >::operator+=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aac6bcb42e07728e89bda1b21f79fab41',1,'edda::Vector< Real, 4 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6941d0f3c43154cea564fcf3ed4a2a8e',1,'edda::Vector< Real, 4 >::operator+=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#af7751f10c483dc2185cac5bfe025c665',1,'edda::dist::operator+=(Gaussian &x, const Gaussian &rhs)'],['../namespaceedda_1_1dist.html#aed2de5205f617c0f8b0522d56bfeb5fc',1,'edda::dist::operator+=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a83b07028ee1d406c06088f2af17f879b',1,'edda::dist::operator+=(GaussianMixture< GMMs > &x, const GaussianMixture< GMMs > &rhs)'],['../namespaceedda_1_1dist.html#a3436532879fcd5605b607ede18e66519',1,'edda::dist::operator+=(GaussianMixture< GMMs > &x, const double r)']]], - ['operator_2d',['operator-',['../namespaceedda.html#ac11a6122a4c14ce20220d9e0c0154b69',1,'edda::operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a8e1c93f0d10f69d2b4ccd279df70f60c',1,'edda::operator-(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a47f4afe8c1eae437e92feba150506583',1,'edda::dist::operator-(const T &lhs, const T &rhs)'],['../namespaceedda_1_1dist.html#ac9a05dbf3c74b32366019864fc24620c',1,'edda::dist::operator-(Gaussian &x)'],['../namespaceedda_1_1dist.html#a2fc42de0a0589d976889db602446139a',1,'edda::dist::operator-(GaussianMixture< GMMs > &x)']]], - ['operator_2d_3d',['operator-=',['../namespaceedda_1_1dist.html#a7b2538cb9c7683dc03c02554fdea6a1e',1,'edda::dist']]], - ['operator_3c_3c',['operator<<',['../namespaceedda.html#a08f55a86eb475b793bcf4b6f10b094a9',1,'edda::operator<<()'],['../namespaceedda_1_1dist.html#ab0bc58880769fb054f0cb66abd1bf89d',1,'edda::dist::operator<<(std::ostream &os, const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a29e3c93d588836a25b4f449aa3f375a3',1,'edda::dist::operator<<(std::ostream &os, const GaussianMixture< GMMs > &dist)']]], - ['operator_3d',['operator=',['../classedda_1_1NdArray.html#a8af48db4d18004cca74c208fcd8d03df',1,'edda::NdArray::operator=(const NdArray< Type > &ptr)'],['../classedda_1_1NdArray.html#ad518fa10456c2eb79125caece7ba7dd4',1,'edda::NdArray::operator=(const NdArray< Type > &obj)']]], - ['operator_3d_3d',['operator==',['../classedda_1_1Vector.html#a730a077a982c8935e3e24b8ed0882aed',1,'edda::Vector::operator==()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ad7c249c67d864bb1432488d038678fc5',1,'edda::Vector< Real, 3 >::operator==()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#acc1c93765ca872fcf7a12c0db457c85b',1,'edda::Vector< Real, 4 >::operator==()'],['../namespaceedda.html#a74bdd32ade7fd3a6672f8a2b7dbb25c9',1,'edda::operator==()']]], - ['operator_5b_5d',['operator[]',['../classedda_1_1shared__ary.html#a7031c4183fba9bc9a6d892566d21006c',1,'edda::shared_ary::operator[]()'],['../classedda_1_1Tuple.html#ac6f05f69f7d6cc8464cdcb1e2565e96c',1,'edda::Tuple::operator[](int i)'],['../classedda_1_1Tuple.html#a8ac59556d0d2a77226ee13366010d82d',1,'edda::Tuple::operator[](int i) const ']]], - ['ord',['ord',['../classedda_1_1StreamTracer.html#a803bbf5eed13823c9c502722a2fc5621',1,'edda::StreamTracer']]], - ['os_5fmacosx',['OS_MACOSX',['../edda_8h.html#a0bf58363320a89953c7f10150df30212',1,'edda.h']]], - ['out_5fof_5fbound',['OUT_OF_BOUND',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716af6f7fba99d195f9df03aa3440a26e3b5',1,'edda']]], - ['outofboundexception',['OutOfBoundException',['../classedda_1_1OutOfBoundException.html',1,'edda']]] + ['m',['m',['../structedda_1_1dist_1_1GMMTuple.html#a51f92001831208525f57b22006b874e8',1,'edda::dist::GMMTuple']]], + ['m_5fbinwidth',['m_binWidth',['../classedda_1_1dist_1_1Histogram.html#a78e968cd9358d661ba8b06ce44f5c987',1,'edda::dist::Histogram']]], + ['m_5fcdf',['m_cdf',['../classedda_1_1dist_1_1Histogram.html#a8bb932b42a80e859598e131d67e8e686',1,'edda::dist::Histogram']]], + ['m_5fmaxvalue',['m_maxValue',['../classedda_1_1dist_1_1Histogram.html#ac9205c786a9a3063b4556d8a559802d5',1,'edda::dist::Histogram']]], + ['m_5fminvalue',['m_minValue',['../classedda_1_1dist_1_1Histogram.html#ad567bb59006090492cdbb34c3a5e5d38',1,'edda::dist::Histogram']]], + ['m_5fnbins',['m_nBins',['../classedda_1_1dist_1_1Histogram.html#a646ad7e9990bd5a75f420c2c073f506a',1,'edda::dist::Histogram']]], + ['m_5fndimension',['m_nDimension',['../classedda_1_1CartesianGrid.html#ab87b87344ff04b342fba7a09bfd36259',1,'edda::CartesianGrid']]], + ['m_5fvmaxbound',['m_vMaxBound',['../classedda_1_1CartesianGrid.html#a096d323e8074766915b96d4d5ba545c3',1,'edda::CartesianGrid']]], + ['m_5fvmaxrealbound',['m_vMaxRealBound',['../classedda_1_1CartesianGrid.html#a363b39d07aa945fd4b0ea38ed36831e3',1,'edda::CartesianGrid']]], + ['m_5fvminbound',['m_vMinBound',['../classedda_1_1CartesianGrid.html#a6b76c040a7f84ec3ccf4bc29de8672fc',1,'edda::CartesianGrid']]], + ['m_5fvminrealbound',['m_vMinRealBound',['../classedda_1_1CartesianGrid.html#a5eda0e56f6f7d3b802ece2d418e2e9f4',1,'edda::CartesianGrid']]], + ['main',['main',['../ensembleExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): ensembleExample.cpp'],['../spatialDecompositionExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): spatialDecompositionExample.cpp'],['../vectSpatialDecompExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): vectSpatialDecompExample.cpp'],['../gmm__raw2vtk_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): gmm_raw2vtk.cpp'],['../loadCurvilinearDataset_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadCurvilinearDataset.cpp'],['../loadScalarDataset_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadScalarDataset.cpp'],['../test__array_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_array.cpp'],['../test__distribution_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_distribution.cpp'],['../test__histogram__io_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_histogram_io.cpp'],['../test__io_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_io.cpp'],['../test__joint__histogram_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_joint_histogram.cpp'],['../test__jointGMM_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_jointGMM.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): fuzzyIsocontourVTK.cpp'],['../randomSampleField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): randomSampleField.cpp'],['../streamlineMonteCarlo_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineMonteCarlo.cpp'],['../test__vtk__filters_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtk_filters.cpp'],['../uncertainIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): uncertainIsocontourVTK.cpp']]], + ['make_5fdataset',['make_Dataset',['../namespaceedda.html#a8bbd8bc35c8aef9dad8c320fdc6c8b0a',1,'edda']]], + ['make_5fgaussian_5farray',['make_Gaussian_array',['../test__distribution_8cpp.html#afa7c86194420ea1fd6d18b666e7935f5',1,'test_distribution.cpp']]], + ['make_5fgmm2_5farray',['make_GMM2_array',['../test__distribution_8cpp.html#a4597fc5434572264834b9e93b13714ee',1,'test_distribution.cpp']]], + ['make_5fgmm_5farray',['make_GMM_array',['../test__distribution_8cpp.html#ae749b7d1a52474391b17f77ed48e0388',1,'test_distribution.cpp']]], + ['make_5fhybrid_5farray',['make_hybrid_array',['../test__distribution_8cpp.html#abbdf464e7910a232b6238672a672ca8a',1,'test_distribution.cpp']]], + ['make_5fjointgaussian_5farray',['make_JointGaussian_array',['../test__distribution_8cpp.html#a3f698deea47058c02819f6b3ef59d122',1,'test_distribution.cpp']]], + ['make_5fjointhistogram_5farray',['make_JointHistogram_array',['../test__distribution_8cpp.html#a7c8ddfc2fc641ef7daf7705666cf22e3',1,'make_JointHistogram_array(): test_distribution.cpp'],['../test__joint__histogram_8cpp.html#a7c8ddfc2fc641ef7daf7705666cf22e3',1,'make_JointHistogram_array(): test_joint_histogram.cpp']]], + ['makehistogram',['MakeHistogram',['../structedda_1_1detail_1_1MakeHistogram.html',1,'edda::detail']]], + ['makehistogram',['MakeHistogram',['../structedda_1_1detail_1_1MakeHistogram.html#a07c887c64555751c7eea8fc2752aad82',1,'edda::detail::MakeHistogram']]], + ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html#a8684a5ede0a882636924da4213def59a',1,'edda::detail::MakeStridedGmm::MakeStridedGmm()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a9f8475cd1640b85b26165e93363fb705',1,'edda::detail::MakeStridedGmm::MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)']]], + ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html',1,'edda::detail']]], + ['marginalization',['marginalization',['../structedda_1_1dist_1_1JointHistogram.html#aec77970e71df3ebc73bf394b43a86621',1,'edda::dist::JointHistogram']]], + ['maskpoints',['MaskPoints',['../classeddaRandomProbeFilter.html#aaa3705c5768ecba66c0ab92b081bc7c5',1,'eddaRandomProbeFilter']]], + ['matrix3',['MATRIX3',['../classedda_1_1MATRIX3.html#a786badb0e26328b38e13e306325131e0',1,'edda::MATRIX3::MATRIX3()'],['../classedda_1_1MATRIX3.html#a8f6e126432de41bc92c4004804770a02',1,'edda::MATRIX3::MATRIX3(const VECTOR3 &v0, const VECTOR3 &v1, const VECTOR3 &v2)']]], + ['matrix3',['MATRIX3',['../classedda_1_1MATRIX3.html',1,'edda']]], + ['max_5fgms',['MAX_GMs',['../common_8h.html#a4b5eb4ecd7706e9581a0348b1050b9df',1,'common.h']]], + ['max_5fsteps',['max_steps',['../classedda_1_1StreamTracer.html#abb1e966b1b8d8674a082f9f23e9948f5',1,'edda::StreamTracer']]], + ['mc_5fstreamline',['mc_streamline',['../namespaceedda.html#aef2ad1f505da386282ade60d201ba6cd',1,'edda']]], + ['mc_5fstreamline_2eh',['mc_streamline.h',['../mc__streamline_8h.html',1,'']]], + ['mcstreamline_5ffunctor',['MCStreamline_functor',['../structedda_1_1detail_1_1MCStreamline__functor.html',1,'edda::detail']]], + ['mean',['mean',['../structedda_1_1dist_1_1Gaussian.html#abded38b8a7bfc642a7d3fe7690b58a7c',1,'edda::dist::Gaussian::mean()'],['../structedda_1_1dist_1_1JointHistogram.html#a8aa0e9ab4fc3c3067f4e2466e12344c1',1,'edda::dist::JointHistogram::mean()']]], + ['min',['min',['../curvilinear__grid_8cpp.html#af7090876f8d90c439bf9c99a2e3f8509',1,'curvilinear_grid.cpp']]], + ['model',['model',['../classedda_1_1DistributionModeler.html#a2a009935c4d3ab1f0c6222e571039db4',1,'edda::DistributionModeler::model()'],['../classedda_1_1VecDistrModeler.html#a0db71032de909e61cff9ea5120bafbde',1,'edda::VecDistrModeler::model()']]], + ['models',['models',['../classedda_1_1dist_1_1GaussianMixture.html#a58cc2e067440f90ca4386511f7b1832d',1,'edda::dist::GaussianMixture']]] ]; diff --git a/html/search/all_e.html b/html/search/all_e.html index 3cda017..9b78086 100644 --- a/html/search/all_e.html +++ b/html/search/all_e.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_e.js b/html/search/all_e.js index fb826c0..9612d79 100644 --- a/html/search/all_e.js +++ b/html/search/all_e.js @@ -1,26 +1,27 @@ var searchData= [ - ['p',['p',['../structedda_1_1dist_1_1GMMTuple.html#a5feb8eb1f4ab6490cad0f7accceac426',1,'edda::dist::GMMTuple']]], - ['parray',['pArray',['../classedda_1_1Dataset.html#addc26bb8363ae78a3a9b2996c367feb4',1,'edda::Dataset']]], - ['passattributedata',['PassAttributeData',['../classeddaRandomProbeFilter.html#a1db9d2255338950cd660590feab426a2',1,'eddaRandomProbeFilter']]], - ['passcellarrays',['PassCellArrays',['../classeddaRandomProbeFilter.html#ae63da6f5fc1ea74ad47ccc58b219726a',1,'eddaRandomProbeFilter']]], - ['passfieldarrays',['PassFieldArrays',['../classeddaRandomProbeFilter.html#a300608995e2abb9325753bd6a67b8ca2',1,'eddaRandomProbeFilter']]], - ['passpartialarrays',['PassPartialArrays',['../classvtkCompositeUncertainIsocontour.html#a035a464d2ad49d247c1d72a0cca55988',1,'vtkCompositeUncertainIsocontour']]], - ['passpointarrays',['PassPointArrays',['../classeddaRandomProbeFilter.html#a8e654d8f86c9f53558313a408a0d41a8',1,'eddaRandomProbeFilter']]], - ['path_2ecpp',['path.cpp',['../path_8cpp.html',1,'']]], - ['path_2eh',['path.h',['../path_8h.html',1,'']]], - ['pgrid',['pGrid',['../classedda_1_1Dataset.html#a8a71a86531d1f159cebe2971b0039560',1,'edda::Dataset']]], - ['phycoord',['phyCoord',['../structedda_1_1PointInfo.html#a4c6cffc07aa2bde86bfae400ea723b8a',1,'edda::PointInfo']]], - ['phys_5fto_5fcell',['phys_to_cell',['../classedda_1_1Grid.html#a3ef6ca899ea32fe1eed621898a7095d1',1,'edda::Grid::phys_to_cell()'],['../classedda_1_1CartesianGrid.html#a7b596e7a80dd4a534a37a53dd0e4ddf8',1,'edda::CartesianGrid::phys_to_cell()'],['../classedda_1_1RegularCartesianGrid.html#ac60d9f13f178104274c497034703467d',1,'edda::RegularCartesianGrid::phys_to_cell()']]], - ['pi_5fby_5f2',['PI_BY_2',['../namespaceedda.html#a6a021411c1f74214e17e1150d8f4079c',1,'edda']]], - ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html',1,'edda']]], - ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html#acc2731dc3751bdba37d8d0ca2f306134',1,'edda::PointInfo::PointInfo()'],['../structedda_1_1PointInfo.html#a81fd3d6e757c85db78cea4516f9f9eb9',1,'edda::PointInfo::PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)'],['../namespaceedda.html#a943d0c00e55b9d2ca21b97d3b218993d',1,'edda::PointInfo()']]], - ['pointlist',['PointList',['../classeddaRandomProbeFilter.html#aa6f3755de01f1a75885cf25ec3693ab1',1,'eddaRandomProbeFilter']]], - ['polygon',['POLYGON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea2d3cdf5619d0d548ffefff873d913140',1,'edda']]], - ['prefix',['Prefix',['../classeddaRandomSampleField.html#a768de28149cff3a3a8973ab561d72da3',1,'eddaRandomSampleField']]], - ['print',['print',['../namespaceedda_1_1detail.html#a60b2e0585a28b435390ac74b6708a6fd',1,'edda::detail']]], - ['printself',['PrintSelf',['../classvtkCompositeUncertainIsocontour.html#aef6a64c65c000b6f956fd3a2a0cd2118',1,'vtkCompositeUncertainIsocontour']]], - ['probe',['Probe',['../classeddaRandomProbeFilter.html#a857b5eb5c460a6c34631562da0950cc9',1,'eddaRandomProbeFilter']]], - ['probeemptypoints',['ProbeEmptyPoints',['../classeddaRandomProbeFilter.html#a35b379341a6f89f6ca7c3b15128ba1b7',1,'eddaRandomProbeFilter']]], - ['process_5fvtk_5ffile',['process_vtk_file',['../denseSamplingField_8cpp.html#a2041ba38def6074ddb551db8efb1fa1e',1,'process_vtk_file(string &vtk_file, int res): denseSamplingField.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): fuzzyIsocontourVTK.cpp'],['../randomSample_8cpp.html#a88f42db7844dfd6059a18e35f95d4130',1,'process_vtk_file(string &vtk_file, string &source_file): randomSample.cpp'],['../uncertainIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): uncertainIsocontourVTK.cpp']]] + ['n_5finitial_5flocations',['n_initial_locations',['../classedda_1_1CurvilinearGrid.html#a5de9ec4573031672b6f29f897a05fddd',1,'edda::CurvilinearGrid']]], + ['narrays',['narrays',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab7974a41a2bf7bd27678b6c1afa0a3a0',1,'edda::detail::MakeStridedGmm::narrays()'],['../classedda_1_1GmmArray.html#a3da54976d6acc96ae59c51d58c4c263d',1,'edda::GmmArray::narrays()'],['../classedda_1_1HistoArray.html#a5f15453dfc62eea349c0f91ef513e922',1,'edda::HistoArray::narrays()']]], + ['nc_5ferr',['NC_ERR',['../ensembleExample_8cpp.html#a6d1bf214ede7eda4e61f9f6a0b37ce7c',1,'ensembleExample.cpp']]], + ['ncomp',['nComp',['../classedda_1_1dist_1_1JointGMM.html#a240fc4fffb8a98da46eda49081c68f64',1,'edda::dist::JointGMM']]], + ['ndarray',['NdArray',['../classedda_1_1NdArray.html',1,'edda']]], + ['ndarray',['NdArray',['../classedda_1_1NdArray.html#a1a30d1735b2c3ba3d0ac938b499d0cb4',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#aa9cd12543a68ed9b868c037daa35cf63',1,'edda::NdArray::NdArray(int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a3ff76f2e8debe3f7d59dafed51732e96',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#a2244b2694148f802f617f045f59a4a83',1,'edda::NdArray::NdArray(Type *data, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a91bea3ecf3695047292f851e87448177',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#ac9afd638e4ecfe02e1a670381f3554fc',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dData, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a0c31d15f5a3ac139ba5330d9477fd46a',1,'edda::NdArray::NdArray(const NdArray &obj)']]], + ['ndarray_2eh',['ndarray.h',['../ndarray_8h.html',1,'']]], + ['ndarray_3c_20real_20_3e',['NdArray< Real >',['../classedda_1_1NdArray.html',1,'edda']]], + ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html',1,'edda']]], + ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html#a773439b81d38c01ceea2a6f87e053ef6',1,'edda::ndarray_iterator']]], + ['ndarray_5fiterator_2eh',['ndarray_iterator.h',['../ndarray__iterator_8h.html',1,'']]], + ['new',['New',['../classeddaRandomProbeFilter.html#ac2e25358fa6d393d0e14b6a9723f9c11',1,'eddaRandomProbeFilter::New()'],['../classeddaRandomSampleField.html#ac97c3e54a48f5623c6d50134171ac68f',1,'eddaRandomSampleField::New()'],['../classeddaThreshold.html#a8667a189d7931b2b2d3b8254e97d5b3f',1,'eddaThreshold::New()'],['../classeddaUncertainIsocontour.html#a92ff4c4b076822b4fb4d9e916173f8d4',1,'eddaUncertainIsocontour::New()']]], + ['newiterator',['NewIterator',['../classeddaSamplingArray.html#a9db524110a7b67181975c48ce5469c5a',1,'eddaSamplingArray']]], + ['normalize',['normalize',['../classedda_1_1Vector.html#a7b782d162af77f502480d3cc9dab287f',1,'edda::Vector::normalize()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a44a3c23b172bf3fadb7e4e2b743784e4',1,'edda::Vector< Real, 3 >::normalize()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abeb3985e6b892c60380f37019dd5fc22',1,'edda::Vector< Real, 4 >::normalize()']]], + ['normalizeweights',['normalizeWeights',['../classedda_1_1dist_1_1GaussianMixture.html#a5c8c7893dd642c9035d25b12cc7e8e98',1,'edda::dist::GaussianMixture']]], + ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html',1,'edda']]], + ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html#a8906b88f0485fab9f5513adf17878c06',1,'edda::NotImplementedException']]], + ['nrrd_2ecpp',['nrrd.cpp',['../nrrd_8cpp.html',1,'']]], + ['nrrd_2eh',['nrrd.h',['../nrrd_8h.html',1,'']]], + ['num_5fcomps',['num_comps',['../classedda_1_1JointDistrArray.html#a5dbb26cb4647e5eac16e315161a95f50',1,'edda::JointDistrArray']]], + ['num_5fof_5felems',['num_of_elems',['../classedda_1_1GmmArray.html#abe3844027b4efd8eaa029c78735f4fa6',1,'edda::GmmArray::num_of_elems()'],['../classedda_1_1HistoArray.html#af0a8a2c36afa0d7d90d9b5f6ae6394f0',1,'edda::HistoArray::num_of_elems()']]], + ['numberofvalidpoints',['NumberOfValidPoints',['../classeddaRandomProbeFilter.html#ab9f37f880d57cc5d17f63cd1123e09e2',1,'eddaRandomProbeFilter']]], + ['numcomp',['numComp',['../classedda_1_1VecDistrModeler.html#a0d6c069c0c456094545b6841d7e02983',1,'edda::VecDistrModeler']]], + ['nvar',['nVar',['../classedda_1_1dist_1_1JointGMM.html#abf279ec0da47ed1571381e31ba56ab7f',1,'edda::dist::JointGMM']]] ]; diff --git a/html/search/all_f.html b/html/search/all_f.html index 7419b02..3bf97c6 100644 --- a/html/search/all_f.html +++ b/html/search/all_f.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/all_f.js b/html/search/all_f.js index 477f5ed..933decb 100644 --- a/html/search/all_f.js +++ b/html/search/all_f.js @@ -1,30 +1,20 @@ var searchData= [ - ['rad_5fto_5fdeg',['RAD_TO_DEG',['../namespaceedda.html#aa2b6739b83019da1bc86858c266b6fb7',1,'edda']]], - ['rand',['Rand',['../structedda_1_1Rand.html',1,'edda']]], - ['random_5fsample_5ffield_2eh',['random_sample_field.h',['../random__sample__field_8h.html',1,'']]], - ['random_5fsampling_5fiterator_2eh',['random_sampling_iterator.h',['../random__sampling__iterator_8h.html',1,'']]], - ['randomengineiterator',['randomEngineIterator',['../namespaceedda.html#a884e513bd5d79a76dd22cc63dd4c915e',1,'edda']]], - ['randomsample_2ecpp',['randomSample.cpp',['../randomSample_8cpp.html',1,'']]], - ['randomsamplefield',['randomSampleField',['../namespaceedda.html#a67f5f04842c5c70e606c714890d6999a',1,'edda']]], - ['rawarraytype',['RawArrayType',['../classedda_1_1GmmVtkDataArray.html#a2e7db86742898d8e251c4e8c64bb66af',1,'edda::GmmVtkDataArray']]], - ['readme_2emd',['README.md',['../README_8md.html',1,'']]], - ['real',['Real',['../namespaceedda.html#aaf50451f174934601d7a0c5a714f35ac',1,'edda']]], - ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html',1,'edda']]], - ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a65429826eea71b490814fe9de5a49f8f',1,'edda::RegularCartesianGrid::RegularCartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1RegularCartesianGrid.html#a360d7cebde168cc3648709a64797513f',1,'edda::RegularCartesianGrid::RegularCartesianGrid()']]], - ['removefileextension',['removeFileExtension',['../namespaceedda.html#a89fb66cfd4f962f6851f8a907f7360fe',1,'edda::removeFileExtension(const string &filename)'],['../namespaceedda.html#a960fcdcb7f45492009ef51087fbbd662',1,'edda::removeFileExtension(const std::string &filename)']]], - ['removefirsttuple',['RemoveFirstTuple',['../classvtkSamplingArray.html#a9defaa0f1e62e12e4546b57a9b7932a5',1,'vtkSamplingArray::RemoveFirstTuple()'],['../classeddaSamplingArray.html#a3ebcd0868580cf501ee09ae691e6bb32',1,'eddaSamplingArray::RemoveFirstTuple()']]], - ['removelasttuple',['RemoveLastTuple',['../classvtkSamplingArray.html#a85f4f8b506a76f265619f289bf2dc97a',1,'vtkSamplingArray::RemoveLastTuple()'],['../classeddaSamplingArray.html#ae35ad87165232a83fe5ded43163fad09',1,'eddaSamplingArray::RemoveLastTuple()']]], - ['removetuple',['RemoveTuple',['../classvtkSamplingArray.html#aa3d910c443e34f021a3b346101f143f5',1,'vtkSamplingArray::RemoveTuple()'],['../classeddaSamplingArray.html#af53efdac4dd1d02550b5ad6e984a71dc',1,'eddaSamplingArray::RemoveTuple()']]], - ['renwin',['renWin',['../streamlineGaussianVTK_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'renWin(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'renWin(): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#a2383c407890df9dfe61f963667a59dc0',1,'renWin(): test_vtk_pipeline.cpp']]], - ['repeat_5fiterator',['repeat_iterator',['../classedda_1_1ndarray__iterator.html#a32b7b66b3a9c69c89d22a466edcb3fce',1,'edda::ndarray_iterator']]], - ['requestdata',['RequestData',['../classvtkCompositeUncertainIsocontour.html#ab998df8352e565e7e0ae93c6164b23f6',1,'vtkCompositeUncertainIsocontour::RequestData()'],['../classvtkEddaReader.html#af374b8b920c77c215a5a58f50875e671',1,'vtkEddaReader::RequestData()'],['../classeddaRandomProbeFilter.html#a8c132c96d159621fda6b42fe0e73325d',1,'eddaRandomProbeFilter::RequestData()'],['../classeddaRandomSampleField.html#ad1e19e6f7b4e5a539580a7d84d56d17d',1,'eddaRandomSampleField::RequestData()'],['../classeddaThreshold.html#aff4eceff2757e2fd354d727073d20f4d',1,'eddaThreshold::RequestData()'],['../classeddaUncertainIsocontour.html#ad37cfda400761fea4026a5444197a9c0',1,'eddaUncertainIsocontour::RequestData()']]], - ['requestinformation',['RequestInformation',['../classvtkEddaReader.html#abdd18e6ab94ad1132e4e70b67b892ae2',1,'vtkEddaReader::RequestInformation()'],['../classeddaRandomProbeFilter.html#ada5ca0cbe086afc1bddb8897c9708ceb',1,'eddaRandomProbeFilter::RequestInformation()'],['../classeddaRandomSampleField.html#a689ee6b2f71fefcfbb7c44ec290b2c4a',1,'eddaRandomSampleField::RequestInformation()'],['../classeddaUncertainIsocontour.html#a1ea95bfbc75c9f94d41ee6a33939d19d',1,'eddaUncertainIsocontour::RequestInformation()']]], - ['requestupdateextent',['RequestUpdateExtent',['../classeddaRandomProbeFilter.html#a7116ddc47ee0f86745d407af8de27739',1,'eddaRandomProbeFilter::RequestUpdateExtent()'],['../classeddaRandomSampleField.html#a28a38cefecb18b090fd0ced4dd612aaf',1,'eddaRandomSampleField::RequestUpdateExtent()'],['../classeddaUncertainIsocontour.html#a3d519989a7d7b6fa1d04ba3a76d00fbd',1,'eddaUncertainIsocontour::RequestUpdateExtent()']]], - ['reset',['reset',['../classedda_1_1RegularCartesianGrid.html#ae6ad91b11d948d68895be2a19578857a',1,'edda::RegularCartesianGrid::reset()'],['../classedda_1_1Grid.html#af73f922e3af6588f4a5666a1441c4d7b',1,'edda::Grid::Reset()'],['../classedda_1_1CartesianGrid.html#a14dc0303c95983a8a70dcea7304b4cdb',1,'edda::CartesianGrid::Reset()']]], - ['reshape',['Reshape',['../classedda_1_1NdArray.html#a070bea444506daa6585ef5a1548e7b3f',1,'edda::NdArray::Reshape(const std::initializer_list< int > &newshape)'],['../classedda_1_1NdArray.html#a22e1f19adf5edc51ba39c1e6700057d0',1,'edda::NdArray::Reshape(const std::initializer_list< int > &newshape)']]], - ['resize',['Resize',['../classvtkSamplingArray.html#a2282389340d54249e6852feb3ce74f07',1,'vtkSamplingArray::Resize()'],['../classeddaSamplingArray.html#ad1b2a4a22266322e79c4ce14359bcdf9',1,'eddaSamplingArray::Resize()']]], - ['resultname',['ResultName',['../classeddaRandomSampleField.html#abbd9f0676da786b3b679416dc1c71a0c',1,'eddaRandomSampleField']]], - ['returnstatus',['ReturnStatus',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716',1,'edda']]], - ['runge_5fkutta2',['runge_kutta2',['../classedda_1_1StreamTracer.html#abad5e625caab94678254551cb7ea3250',1,'edda::StreamTracer']]] + ['operator_21_3d',['operator!=',['../namespaceedda.html#af67fbd966d5b27087d91e6f03578182e',1,'edda']]], + ['operator_28_29',['operator()',['../structedda_1_1Rand.html#a5a38aac92548b3f31d1b16303a3bee0b',1,'edda::Rand::operator()()'],['../structedda_1_1detail_1_1GenRand.html#a68ba11082a68844dc47569c783a4ded8',1,'edda::detail::GenRand::operator()()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a0118169750bc2ef507b038cec4146d1d',1,'edda::detail::MakeStridedGmm::operator()()'],['../structedda_1_1detail_1_1MakeHistogram.html#af10c404c1995bea119d760d41aaddfab',1,'edda::detail::MakeHistogram::operator()()'],['../structedda_1_1detail_1_1GetSample.html#a0b5a531990782a9e4ebed88806950ba5',1,'edda::detail::GetSample::operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)'],['../structedda_1_1detail_1_1GetSample.html#a6560142c0df4f0ab3cf8a48a9462006f',1,'edda::detail::GetSample::operator()(thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)'],['../classedda_1_1MATRIX3.html#a030082dc7f7744ae321cb8985ab75c4d',1,'edda::MATRIX3::operator()(const int i) const'],['../classedda_1_1MATRIX3.html#a9f82c905fd6df3ec9aa4487b7686bd5a',1,'edda::MATRIX3::operator()(const int i, const int j) const'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#acd2a8c160d5ab421874fca981b31eb55',1,'edda::dist::detail::_getPdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a5c4c54fb06bc68af3b1ddf0d58251117',1,'edda::dist::detail::_getCdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#aab900f64d0ecdcf09c8e029da314549d',1,'edda::dist::detail::_getMean::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#ab461512d48aa011b46b8c8ea0fd1ebc7',1,'edda::dist::detail::_getVar::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#a8041e22e1d0fe81e5da6e5edae40ae28',1,'edda::dist::detail::_getSample::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointMean.html#a7433cda1b562df68ec925cf90bfdea64',1,'edda::dist::detail::_getJointMean::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html#a3f794ca87b28f9d7ffff23f3e9bf4dd0',1,'edda::dist::detail::_getJointPdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointSample.html#aa76014001f39b24ca1e6d20e20adedae',1,'edda::dist::detail::_getJointSample::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getName.html#a7ffa43bda44c6928e561678aff5396cc',1,'edda::dist::detail::_getName::operator()()'],['../structedda_1_1GetSample__functor.html#a5f4849e63cbb242edb757175ce6012a1',1,'edda::GetSample_functor::operator()()'],['../classedda_1_1detail_1_1FuzzyIsocontour.html#a25e0eaa572478a70b8b58e6f931f07ae',1,'edda::detail::FuzzyIsocontour::operator()()'],['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a36c2d21711184f3daf6a3f33281a4d55',1,'edda::detail::LevelCrossingFunctor::operator()()'],['../structedda_1_1detail_1_1FieldInterp.html#a298ad254765885bfcc54053338f6c1a6',1,'edda::detail::FieldInterp::operator()()']]], + ['operator_2a',['operator*',['../namespaceedda.html#a3260935238fdcdc00cc0d15c45223c38',1,'edda::operator*(const MATRIX3 &m0, const VECTOR3 &v0)'],['../namespaceedda.html#a93a705f34f601e0c925267ab199b479f',1,'edda::operator*(Vector3< Real > &v0, Vector3< Real > &v1)'],['../namespaceedda.html#a092ab795ecf1f325e4056f40858d371b',1,'edda::operator*(float x0, const Vector3< Real > &v0)'],['../namespaceedda.html#a4d54e9ca6dd220324644e648329d863b',1,'edda::operator*(const Vector3< Real > &v0, float x0)'],['../namespaceedda.html#acdef9524e97c2706696c859254d81e94',1,'edda::operator*(Vector4< Real > &v0, Vector4< Real > &v1)'],['../namespaceedda.html#a913e795aa19c428470e731edbc5eb89e',1,'edda::operator*(float x0, const Vector4< Real > &v0)'],['../namespaceedda.html#af5b257dd62a06c315c2aa54eede0f31c',1,'edda::operator*(const Vector4< Real > &v0, float x0)'],['../namespaceedda_1_1dist.html#a78f6668de51fec25ca4aa7b20e8ff0d4',1,'edda::dist::operator*()']]], + ['operator_2a_3d',['operator*=',['../classedda_1_1Vector.html#a25d1c240ae3711b22744d51a0b126964',1,'edda::Vector::operator*=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#afccc2dbdbc600927565c0f65ae947e18',1,'edda::Vector< Real, 3 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a785486f5047caae109488890f0afa2d7',1,'edda::Vector< Real, 3 >::operator*=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abf2b05cabb5b258eadae11bf0dffb9e5',1,'edda::Vector< Real, 4 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a483a6a7ec9e8161f5b90c2947418e6e0',1,'edda::Vector< Real, 4 >::operator*=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#a38c31366442e9ca68ca47078e45fb753',1,'edda::dist::operator*=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a42b1c674310d83b56e1f665859dce41a',1,'edda::dist::operator*=(GaussianMixture< GMs > &x, const double r)']]], + ['operator_2b',['operator+',['../namespaceedda.html#acecfbcb6c30af36d25b9b1b9cedbe59c',1,'edda::operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a27197e5e9ff856ae849deb83455a3d86',1,'edda::operator+(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a009a15003c26d6a2758d765b7b6a1986',1,'edda::dist::operator+()']]], + ['operator_2b_3d',['operator+=',['../classedda_1_1Vector.html#aee0537c94e3200cb990b7e3c1f2dcb07',1,'edda::Vector::operator+=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ab313e1388d04b85e88769a97795682b2',1,'edda::Vector< Real, 3 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a6c655cded68b3a825cbbfd55e30366bf',1,'edda::Vector< Real, 3 >::operator+=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aac6bcb42e07728e89bda1b21f79fab41',1,'edda::Vector< Real, 4 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6941d0f3c43154cea564fcf3ed4a2a8e',1,'edda::Vector< Real, 4 >::operator+=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#af7751f10c483dc2185cac5bfe025c665',1,'edda::dist::operator+=(Gaussian &x, const Gaussian &rhs)'],['../namespaceedda_1_1dist.html#aed2de5205f617c0f8b0522d56bfeb5fc',1,'edda::dist::operator+=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a1cd36a8c6f68732ce9d2e57a4438e6d0',1,'edda::dist::operator+=(GaussianMixture< GMs > &x, const GaussianMixture< GMs > &rhs)'],['../namespaceedda_1_1dist.html#a71d748acc49c073702a3cee3537fd67a',1,'edda::dist::operator+=(GaussianMixture< GMs > &x, const double r)']]], + ['operator_2d',['operator-',['../namespaceedda.html#ac11a6122a4c14ce20220d9e0c0154b69',1,'edda::operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a8e1c93f0d10f69d2b4ccd279df70f60c',1,'edda::operator-(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a47f4afe8c1eae437e92feba150506583',1,'edda::dist::operator-(const T &lhs, const T &rhs)'],['../namespaceedda_1_1dist.html#ac9a05dbf3c74b32366019864fc24620c',1,'edda::dist::operator-(Gaussian &x)'],['../namespaceedda_1_1dist.html#a851dbf769a25e162b70b713aed19f92e',1,'edda::dist::operator-(const GaussianMixture< GMs > &x)']]], + ['operator_2d_3d',['operator-=',['../namespaceedda_1_1dist.html#a7b2538cb9c7683dc03c02554fdea6a1e',1,'edda::dist']]], + ['operator_3c_3c',['operator<<',['../classedda_1_1dist_1_1Distribution.html#a20f3358bb9a62d1848b395c334980686',1,'edda::dist::Distribution::operator<<()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a1d8c78e4fda90a65d5d5253f9e600a48',1,'edda::dist::DistributionWrapper::operator<<()'],['../namespaceedda.html#a08f55a86eb475b793bcf4b6f10b094a9',1,'edda::operator<<()'],['../namespaceedda_1_1dist.html#ab0bc58880769fb054f0cb66abd1bf89d',1,'edda::dist::operator<<(std::ostream &os, const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a12cd057018d4b4108aa635992eae52ed',1,'edda::dist::operator<<(std::ostream &os, const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#aa18cf2d711cb8adac8cb72bb2b3472df',1,'edda::dist::operator<<(std::ostream &os, const Histogram &dist)'],['../namespaceedda_1_1dist.html#a00bd32e954236178af53401be176f6e7',1,'edda::dist::operator<<(std::ostream &os, const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#acf9d5f253b8f25573d44f5866ed1306d',1,'edda::dist::operator<<(std::ostream &os, const JointGMM &dist)'],['../namespaceedda_1_1dist.html#a91d4d1cf16c26a74c13c091ac71e16f9',1,'edda::dist::operator<<(std::ostream &os, const JointHistogram &dist)']]], + ['operator_3d',['operator=',['../classedda_1_1NdArray.html#ad518fa10456c2eb79125caece7ba7dd4',1,'edda::NdArray::operator=()'],['../classedda_1_1MATRIX3.html#a4f83a2c2c699e340e9d29ce903562db4',1,'edda::MATRIX3::operator=()']]], + ['operator_3d_3d',['operator==',['../classedda_1_1Vector.html#ac9ed33a068f23bd170ce73e5c386a1ad',1,'edda::Vector::operator==()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a94f65a348f8dfa6d3e7b8d83610b17b4',1,'edda::Vector< Real, 3 >::operator==()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0bac5c96ac0e8ed9ba4d19098c3f3710',1,'edda::Vector< Real, 4 >::operator==()'],['../namespaceedda.html#a74bdd32ade7fd3a6672f8a2b7dbb25c9',1,'edda::operator==()']]], + ['operator_5b_5d',['operator[]',['../classedda_1_1shared__ary.html#aba4445b89b0341167715ff0bc18f8d96',1,'edda::shared_ary::operator[]()'],['../classedda_1_1Tuple.html#ac6f05f69f7d6cc8464cdcb1e2565e96c',1,'edda::Tuple::operator[](int i)'],['../classedda_1_1Tuple.html#a5bf78b200bdd601ae9228a94d118d631',1,'edda::Tuple::operator[](int i) const'],['../classedda_1_1MATRIX3.html#adc87d6072d72a9ec75036dff94c3b7a6',1,'edda::MATRIX3::operator[]()']]], + ['ord',['ord',['../classedda_1_1StreamTracer.html#a803bbf5eed13823c9c502722a2fc5621',1,'edda::StreamTracer']]], + ['os_5flinux',['OS_LINUX',['../edda_8h.html#ae273c7db78098028c7a6b6b230ac0503',1,'edda.h']]], + ['out_5fof_5fbound',['OUT_OF_BOUND',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716af6f7fba99d195f9df03aa3440a26e3b5',1,'edda']]], + ['outofboundexception',['OutOfBoundException',['../classedda_1_1OutOfBoundException.html',1,'edda']]], + ['output',['output',['../classedda_1_1dist_1_1Histogram.html#adda96835c96a8670ae4c9965e7346fc2',1,'edda::dist::Histogram::output()'],['../classedda_1_1dist_1_1JointGMM.html#a839a656814ef252e50c62f6594d9d2d4',1,'edda::dist::JointGMM::output()']]] ]; diff --git a/html/search/classes_0.html b/html/search/classes_0.html index fabdc03..2e45b2c 100644 --- a/html/search/classes_0.html +++ b/html/search/classes_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_0.js b/html/search/classes_0.js index caf94fc..8e7a34c 100644 --- a/html/search/classes_0.js +++ b/html/search/classes_0.js @@ -1,7 +1,11 @@ var searchData= [ ['_5fgetcdf',['_getCdf',['../structedda_1_1dist_1_1detail_1_1__getCdf.html',1,'edda::dist::detail']]], + ['_5fgetjointmean',['_getJointMean',['../structedda_1_1dist_1_1detail_1_1__getJointMean.html',1,'edda::dist::detail']]], + ['_5fgetjointpdf',['_getJointPdf',['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html',1,'edda::dist::detail']]], + ['_5fgetjointsample',['_getJointSample',['../structedda_1_1dist_1_1detail_1_1__getJointSample.html',1,'edda::dist::detail']]], ['_5fgetmean',['_getMean',['../structedda_1_1dist_1_1detail_1_1__getMean.html',1,'edda::dist::detail']]], + ['_5fgetname',['_getName',['../structedda_1_1dist_1_1detail_1_1__getName.html',1,'edda::dist::detail']]], ['_5fgetpdf',['_getPdf',['../structedda_1_1dist_1_1detail_1_1__getPdf.html',1,'edda::dist::detail']]], ['_5fgetsample',['_getSample',['../structedda_1_1dist_1_1detail_1_1__getSample.html',1,'edda::dist::detail']]], ['_5fgetvar',['_getVar',['../structedda_1_1dist_1_1detail_1_1__getVar.html',1,'edda::dist::detail']]] diff --git a/html/search/classes_1.html b/html/search/classes_1.html index 800b6ae..5f1bc63 100644 --- a/html/search/classes_1.html +++ b/html/search/classes_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_1.js b/html/search/classes_1.js index 619e5e1..27bf475 100644 --- a/html/search/classes_1.js +++ b/html/search/classes_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['abstractdataarray',['AbstractDataArray',['../classedda_1_1AbstractDataArray.html',1,'edda']]] + ['bmpimage',['BMPImage',['../structBMPImage.html',1,'']]] ]; diff --git a/html/search/classes_10.html b/html/search/classes_10.html new file mode 100644 index 0000000..d9261c9 --- /dev/null +++ b/html/search/classes_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/classes_10.js b/html/search/classes_10.js new file mode 100644 index 0000000..37a3ee9 --- /dev/null +++ b/html/search/classes_10.js @@ -0,0 +1,36 @@ +var searchData= +[ + ['tagbitmapfileheader',['tagBITMAPFILEHEADER',['../structtagBITMAPFILEHEADER.html',1,'']]], + ['tagbitmapinfoheader',['tagBITMAPINFOHEADER',['../structtagBITMAPINFOHEADER.html',1,'']]], + ['tetra_5fstep',['Tetra_step',['../structedda_1_1Tetra__step.html',1,'edda']]], + ['tuple',['Tuple',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple1',['Tuple1',['../structedda_1_1Tuple1.html',1,'edda']]], + ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html',1,'edda']]], + ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple3_3c_20int_20_3e',['Tuple3< int >',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple3_3c_20real_20_3e',['Tuple3< Real >',['../structedda_1_1Tuple3.html',1,'edda']]], + ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html',1,'edda']]], + ['tuple4_3c_20real_20_3e',['Tuple4< Real >',['../structedda_1_1Tuple4.html',1,'edda']]], + ['tuple5',['Tuple5',['../structedda_1_1Tuple5.html',1,'edda']]], + ['tuple6',['Tuple6',['../structedda_1_1Tuple6.html',1,'edda']]], + ['tuple7',['Tuple7',['../structedda_1_1Tuple7.html',1,'edda']]], + ['tuple8',['Tuple8',['../structedda_1_1Tuple8.html',1,'edda']]], + ['tuple9',['Tuple9',['../structedda_1_1Tuple9.html',1,'edda']]], + ['tuple_3c_20edda_3a_3adist_3a_3agmmtuple_2c_20gms_20_3e',['Tuple< edda::dist::GMMTuple, GMs >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_2c_20max_5fgms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20int_2c_203_20_3e',['Tuple< int, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20ndarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgms_20_2a3_20_3e',['Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_203_20_3e',['Tuple< Real, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_204_20_3e',['Tuple< Real, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20real_2c_20n_20_3e',['Tuple< Real, N >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_201_20_3e',['Tuple< T, 1 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_202_20_3e',['Tuple< T, 2 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_203_20_3e',['Tuple< T, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_204_20_3e',['Tuple< T, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_205_20_3e',['Tuple< T, 5 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_206_20_3e',['Tuple< T, 6 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_207_20_3e',['Tuple< T, 7 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_208_20_3e',['Tuple< T, 8 >',['../classedda_1_1Tuple.html',1,'edda']]], + ['tuple_3c_20t_2c_209_20_3e',['Tuple< T, 9 >',['../classedda_1_1Tuple.html',1,'edda']]] +]; diff --git a/html/search/classes_11.html b/html/search/classes_11.html new file mode 100644 index 0000000..1169783 --- /dev/null +++ b/html/search/classes_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/classes_11.js b/html/search/classes_11.js new file mode 100644 index 0000000..ad36c01 --- /dev/null +++ b/html/search/classes_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html',1,'edda::dist']]], + ['vecdistrmodeler',['VecDistrModeler',['../classedda_1_1VecDistrModeler.html',1,'edda']]], + ['vector',['Vector',['../classedda_1_1Vector.html',1,'edda']]], + ['vector_3c_20real_2c_203_20_3e',['Vector< Real, 3 >',['../classedda_1_1Vector_3_01Real_00_013_01_4.html',1,'edda']]], + ['vector_3c_20real_2c_204_20_3e',['Vector< Real, 4 >',['../classedda_1_1Vector_3_01Real_00_014_01_4.html',1,'edda']]], + ['vectordistrarray',['VectorDistrArray',['../classedda_1_1VectorDistrArray.html',1,'edda']]], + ['vtkvectorofarrays',['vtkVectorOfArrays',['../classeddaRandomProbeFilter_1_1vtkVectorOfArrays.html',1,'eddaRandomProbeFilter']]] +]; diff --git a/html/search/classes_2.html b/html/search/classes_2.html index f65d263..e3a6f9c 100644 --- a/html/search/classes_2.html +++ b/html/search/classes_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_2.js b/html/search/classes_2.js index 96de9f5..91b64cf 100644 --- a/html/search/classes_2.js +++ b/html/search/classes_2.js @@ -1,5 +1,7 @@ var searchData= [ ['cartesiangrid',['CartesianGrid',['../classedda_1_1CartesianGrid.html',1,'edda']]], - ['continuousdistribution',['ContinuousDistribution',['../classedda_1_1dist_1_1ContinuousDistribution.html',1,'edda::dist']]] + ['cell',['Cell',['../structedda_1_1Cell.html',1,'edda']]], + ['continuousdistributiontag',['ContinuousDistributionTag',['../classedda_1_1dist_1_1ContinuousDistributionTag.html',1,'edda::dist']]], + ['curvilineargrid',['CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html',1,'edda']]] ]; diff --git a/html/search/classes_3.html b/html/search/classes_3.html index 927e837..ed4b46e 100644 --- a/html/search/classes_3.html +++ b/html/search/classes_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_3.js b/html/search/classes_3.js index cc7f5af..e3435ef 100644 --- a/html/search/classes_3.js +++ b/html/search/classes_3.js @@ -1,7 +1,10 @@ var searchData= [ - ['datasamplingarray',['DataSamplingArray',['../classedda_1_1DataSamplingArray.html',1,'edda']]], ['dataset',['Dataset',['../classedda_1_1Dataset.html',1,'edda']]], - ['discretedistribution',['DiscreteDistribution',['../classedda_1_1dist_1_1DiscreteDistribution.html',1,'edda::dist']]], - ['distribution',['Distribution',['../classedda_1_1dist_1_1Distribution.html',1,'edda::dist']]] + ['discretedistributiontag',['DiscreteDistributionTag',['../classedda_1_1dist_1_1DiscreteDistributionTag.html',1,'edda::dist']]], + ['distrarray',['DistrArray',['../classedda_1_1DistrArray.html',1,'edda']]], + ['distribution',['Distribution',['../classedda_1_1dist_1_1Distribution.html',1,'edda::dist']]], + ['distributionmodeler',['DistributionModeler',['../classedda_1_1DistributionModeler.html',1,'edda']]], + ['distributiontag',['DistributionTag',['../classedda_1_1dist_1_1DistributionTag.html',1,'edda::dist']]], + ['distributionwrapper',['DistributionWrapper',['../classedda_1_1dist_1_1DistributionWrapper.html',1,'edda::dist']]] ]; diff --git a/html/search/classes_4.html b/html/search/classes_4.html index a447290..b1f5f93 100644 --- a/html/search/classes_4.html +++ b/html/search/classes_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_5.html b/html/search/classes_5.html index 63484c4..7f718b3 100644 --- a/html/search/classes_5.html +++ b/html/search/classes_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_5.js b/html/search/classes_5.js index 4eddf0b..2547a90 100644 --- a/html/search/classes_5.js +++ b/html/search/classes_5.js @@ -1,4 +1,5 @@ var searchData= [ + ['fieldinterp',['FieldInterp',['../structedda_1_1detail_1_1FieldInterp.html',1,'edda::detail']]], ['fuzzyisocontour',['FuzzyIsocontour',['../classedda_1_1detail_1_1FuzzyIsocontour.html',1,'edda::detail']]] ]; diff --git a/html/search/classes_6.html b/html/search/classes_6.html index f3d7035..1c02825 100644 --- a/html/search/classes_6.html +++ b/html/search/classes_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_6.js b/html/search/classes_6.js index 32f8895..4a93b52 100644 --- a/html/search/classes_6.js +++ b/html/search/classes_6.js @@ -5,8 +5,8 @@ var searchData= ['genrand',['GenRand',['../structedda_1_1detail_1_1GenRand.html',1,'edda::detail']]], ['getpositionasis',['GetPositionAsIs',['../structedda_1_1GetPositionAsIs.html',1,'edda']]], ['getpositionfromdistributionmean',['GetPositionFromDistributionMean',['../structedda_1_1GetPositionFromDistributionMean.html',1,'edda']]], + ['getsample',['GetSample',['../structedda_1_1detail_1_1GetSample.html',1,'edda::detail']]], ['getsample_5ffunctor',['GetSample_functor',['../structedda_1_1GetSample__functor.html',1,'edda']]], - ['getsample_5ffunctor',['GetSample_functor',['../structedda_1_1detail_1_1GetSample__functor.html',1,'edda::detail']]], ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html',1,'edda']]], ['gmmtuple',['GMMTuple',['../structedda_1_1dist_1_1GMMTuple.html',1,'edda::dist']]], ['gmmvtkdataarray',['GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html',1,'edda']]], diff --git a/html/search/classes_7.html b/html/search/classes_7.html index 9e5f5c9..2af8b70 100644 --- a/html/search/classes_7.html +++ b/html/search/classes_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_7.js b/html/search/classes_7.js index e6718ee..afb5d57 100644 --- a/html/search/classes_7.js +++ b/html/search/classes_7.js @@ -1,4 +1,5 @@ var searchData= [ - ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html',1,'edda::detail']]] + ['histoarray',['HistoArray',['../classedda_1_1HistoArray.html',1,'edda']]], + ['histogram',['Histogram',['../classedda_1_1dist_1_1Histogram.html',1,'edda::dist']]] ]; diff --git a/html/search/classes_8.html b/html/search/classes_8.html index 82c35b3..a57aeae 100644 --- a/html/search/classes_8.html +++ b/html/search/classes_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_8.js b/html/search/classes_8.js index b300769..48691e2 100644 --- a/html/search/classes_8.js +++ b/html/search/classes_8.js @@ -1,4 +1,8 @@ var searchData= [ - ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html',1,'edda::detail']]] + ['jointdistrarray',['JointDistrArray',['../classedda_1_1JointDistrArray.html',1,'edda']]], + ['jointdistributiontag',['JointDistributionTag',['../classedda_1_1dist_1_1JointDistributionTag.html',1,'edda::dist']]], + ['jointgaussian',['JointGaussian',['../structedda_1_1dist_1_1JointGaussian.html',1,'edda::dist']]], + ['jointgmm',['JointGMM',['../classedda_1_1dist_1_1JointGMM.html',1,'edda::dist']]], + ['jointhistogram',['JointHistogram',['../structedda_1_1dist_1_1JointHistogram.html',1,'edda::dist']]] ]; diff --git a/html/search/classes_9.html b/html/search/classes_9.html index 4e83ac8..59ec044 100644 --- a/html/search/classes_9.html +++ b/html/search/classes_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_9.js b/html/search/classes_9.js index 19b7170..e6718ee 100644 --- a/html/search/classes_9.js +++ b/html/search/classes_9.js @@ -1,7 +1,4 @@ var searchData= [ - ['ndarray',['NdArray',['../classedda_1_1NdArray.html',1,'edda']]], - ['ndarray_3c_20real_20_3e',['NdArray< Real >',['../classedda_1_1NdArray.html',1,'edda']]], - ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html',1,'edda']]], - ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html',1,'edda']]] + ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html',1,'edda::detail']]] ]; diff --git a/html/search/classes_a.html b/html/search/classes_a.html index 616feb6..aaef5a5 100644 --- a/html/search/classes_a.html +++ b/html/search/classes_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_a.js b/html/search/classes_a.js index 81a6e74..ff5cb6b 100644 --- a/html/search/classes_a.js +++ b/html/search/classes_a.js @@ -1,4 +1,7 @@ var searchData= [ - ['outofboundexception',['OutOfBoundException',['../classedda_1_1OutOfBoundException.html',1,'edda']]] + ['makehistogram',['MakeHistogram',['../structedda_1_1detail_1_1MakeHistogram.html',1,'edda::detail']]], + ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html',1,'edda::detail']]], + ['matrix3',['MATRIX3',['../classedda_1_1MATRIX3.html',1,'edda']]], + ['mcstreamline_5ffunctor',['MCStreamline_functor',['../structedda_1_1detail_1_1MCStreamline__functor.html',1,'edda::detail']]] ]; diff --git a/html/search/classes_b.html b/html/search/classes_b.html index 4461152..e0416e6 100644 --- a/html/search/classes_b.html +++ b/html/search/classes_b.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_b.js b/html/search/classes_b.js index cc5e33d..19b7170 100644 --- a/html/search/classes_b.js +++ b/html/search/classes_b.js @@ -1,4 +1,7 @@ var searchData= [ - ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html',1,'edda']]] + ['ndarray',['NdArray',['../classedda_1_1NdArray.html',1,'edda']]], + ['ndarray_3c_20real_20_3e',['NdArray< Real >',['../classedda_1_1NdArray.html',1,'edda']]], + ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html',1,'edda']]], + ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html',1,'edda']]] ]; diff --git a/html/search/classes_c.html b/html/search/classes_c.html index 8f92c86..88047d3 100644 --- a/html/search/classes_c.html +++ b/html/search/classes_c.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_c.js b/html/search/classes_c.js index 7faa4f8..81a6e74 100644 --- a/html/search/classes_c.js +++ b/html/search/classes_c.js @@ -1,5 +1,4 @@ var searchData= [ - ['rand',['Rand',['../structedda_1_1Rand.html',1,'edda']]], - ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html',1,'edda']]] + ['outofboundexception',['OutOfBoundException',['../classedda_1_1OutOfBoundException.html',1,'edda']]] ]; diff --git a/html/search/classes_d.html b/html/search/classes_d.html index 9690cf0..f3a3ef9 100644 --- a/html/search/classes_d.html +++ b/html/search/classes_d.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_d.js b/html/search/classes_d.js index 14d3a9d..cc5e33d 100644 --- a/html/search/classes_d.js +++ b/html/search/classes_d.js @@ -1,7 +1,4 @@ var searchData= [ - ['scalararray',['ScalarArray',['../classedda_1_1ScalarArray.html',1,'edda']]], - ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html',1,'edda']]], - ['shared_5fary_3c_20edda_3a_3avector_3c_20t_2c_20n_20_3e_20_3e',['shared_ary< edda::Vector< T, N > >',['../classedda_1_1shared__ary.html',1,'edda']]], - ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html',1,'edda']]] + ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html',1,'edda']]] ]; diff --git a/html/search/classes_e.html b/html/search/classes_e.html index 24a3ef3..5e33956 100644 --- a/html/search/classes_e.html +++ b/html/search/classes_e.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_e.js b/html/search/classes_e.js index b9b79ad..7faa4f8 100644 --- a/html/search/classes_e.js +++ b/html/search/classes_e.js @@ -1,31 +1,5 @@ var searchData= [ - ['tuple',['Tuple',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple1',['Tuple1',['../structedda_1_1Tuple1.html',1,'edda']]], - ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html',1,'edda']]], - ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html',1,'edda']]], - ['tuple3_3c_20real_20_3e',['Tuple3< Real >',['../structedda_1_1Tuple3.html',1,'edda']]], - ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html',1,'edda']]], - ['tuple4_3c_20real_20_3e',['Tuple4< Real >',['../structedda_1_1Tuple4.html',1,'edda']]], - ['tuple5',['Tuple5',['../structedda_1_1Tuple5.html',1,'edda']]], - ['tuple6',['Tuple6',['../structedda_1_1Tuple6.html',1,'edda']]], - ['tuple7',['Tuple7',['../structedda_1_1Tuple7.html',1,'edda']]], - ['tuple8',['Tuple8',['../structedda_1_1Tuple8.html',1,'edda']]], - ['tuple9',['Tuple9',['../structedda_1_1Tuple9.html',1,'edda']]], - ['tuple_3c_20edda_3a_3adist_3a_3agmmtuple_2c_20gmms_20_3e',['Tuple< edda::dist::GMMTuple, GMMs >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20edda_3a_3andarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< edda::NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20ndarray_3c_20real_20_3e_3a_3aselfdeviceptr_2c_20max_5fgmms_20_2a3_20_3e',['Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMMs *3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_203_20_3e',['Tuple< Real, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_204_20_3e',['Tuple< Real, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20real_2c_20n_20_3e',['Tuple< Real, N >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_201_20_3e',['Tuple< T, 1 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_202_20_3e',['Tuple< T, 2 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_203_20_3e',['Tuple< T, 3 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_204_20_3e',['Tuple< T, 4 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_205_20_3e',['Tuple< T, 5 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_206_20_3e',['Tuple< T, 6 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_207_20_3e',['Tuple< T, 7 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_208_20_3e',['Tuple< T, 8 >',['../classedda_1_1Tuple.html',1,'edda']]], - ['tuple_3c_20t_2c_209_20_3e',['Tuple< T, 9 >',['../classedda_1_1Tuple.html',1,'edda']]] + ['rand',['Rand',['../structedda_1_1Rand.html',1,'edda']]], + ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html',1,'edda']]] ]; diff --git a/html/search/classes_f.html b/html/search/classes_f.html index cee523a..3ce6361 100644 --- a/html/search/classes_f.html +++ b/html/search/classes_f.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/classes_f.js b/html/search/classes_f.js index 37e72df..48ccbe8 100644 --- a/html/search/classes_f.js +++ b/html/search/classes_f.js @@ -1,12 +1,8 @@ var searchData= [ - ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html',1,'edda::dist']]], - ['vector',['Vector',['../classedda_1_1Vector.html',1,'edda']]], - ['vector_3c_20real_2c_203_20_3e',['Vector< Real, 3 >',['../classedda_1_1Vector_3_01Real_00_013_01_4.html',1,'edda']]], - ['vector_3c_20real_2c_204_20_3e',['Vector< Real, 4 >',['../classedda_1_1Vector_3_01Real_00_014_01_4.html',1,'edda']]], - ['vectorarray',['VectorArray',['../classedda_1_1VectorArray.html',1,'edda']]], - ['vtkcompositeuncertainisocontour',['vtkCompositeUncertainIsocontour',['../classvtkCompositeUncertainIsocontour.html',1,'']]], - ['vtkeddareader',['vtkEddaReader',['../classvtkEddaReader.html',1,'']]], - ['vtksamplingarray',['vtkSamplingArray',['../classvtkSamplingArray.html',1,'']]], - ['vtkvectorofarrays',['vtkVectorOfArrays',['../classeddaRandomProbeFilter_1_1vtkVectorOfArrays.html',1,'eddaRandomProbeFilter']]] + ['scalardistrarray',['ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html',1,'edda']]], + ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html',1,'edda']]], + ['shared_5fary_3c_20distr_20_3e',['shared_ary< Distr >',['../classedda_1_1shared__ary.html',1,'edda']]], + ['shared_5fary_3c_20edda_3a_3avector_3c_20distr_2c_20n_20_3e_20_3e',['shared_ary< edda::Vector< Distr, N > >',['../classedda_1_1shared__ary.html',1,'edda']]], + ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html',1,'edda']]] ]; diff --git a/html/search/defines_0.html b/html/search/defines_0.html index c2f0b46..e53ef23 100644 --- a/html/search/defines_0.html +++ b/html/search/defines_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_0.js b/html/search/defines_0.js index 222a293..f305188 100644 --- a/html/search/defines_0.js +++ b/html/search/defines_0.js @@ -1,5 +1,4 @@ var searchData= [ - ['edda_5fexport',['EDDA_EXPORT',['../edda__export_8h.html#a4130eba3dcc4b1e840d3ee6e2a2e4d6b',1,'edda_export.h']]], - ['enable_5fif_5fbase_5fof',['ENABLE_IF_BASE_OF',['../common_8h.html#aa9a69652fb421d221f087dff01b9d007',1,'common.h']]] + ['_5fuse_5fmath_5fdefines',['_USE_MATH_DEFINES',['../gaussian_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): gaussian.h'],['../joint__gaussian_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): joint_gaussian.h'],['../joint__histogram_8h.html#a525335710b53cb064ca56b936120431e',1,'_USE_MATH_DEFINES(): joint_histogram.h']]] ]; diff --git a/html/search/defines_1.html b/html/search/defines_1.html index 9e1d9fa..d4f6f4e 100644 --- a/html/search/defines_1.html +++ b/html/search/defines_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_1.js b/html/search/defines_1.js index 1cef4ab..abca46f 100644 --- a/html/search/defines_1.js +++ b/html/search/defines_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['ijk_5fto_5fidx',['IJK_TO_IDX',['../level__crossing__prob_8h.html#a1b9a61d5870ac595d332e99b4e808637',1,'level_crossing_prob.h']]] + ['cell_5fhexahedron',['CELL_HEXAHEDRON',['../curvilinear__grid_8h.html#ab8b0be26d6b4bffc0d52b999c2cebcbe',1,'curvilinear_grid.h']]], + ['cell_5ftetrahedron',['CELL_TETRAHEDRON',['../curvilinear__grid_8h.html#a4de2af08cf6101d17941cb01f6ba2245',1,'curvilinear_grid.h']]] ]; diff --git a/html/search/defines_2.html b/html/search/defines_2.html index 6ef4b98..1971683 100644 --- a/html/search/defines_2.html +++ b/html/search/defines_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_2.js b/html/search/defines_2.js index 4515196..9b19332 100644 --- a/html/search/defines_2.js +++ b/html/search/defines_2.js @@ -1,4 +1,6 @@ var searchData= [ - ['max_5fgmms',['MAX_GMMs',['../common_8h.html#a68251c7af4b9d9b0060747d1d2768bb5',1,'common.h']]] + ['dir_5fi',['DIR_I',['../curvilinear__grid_8h.html#ae263e4d06458c8f803fba86a94e33ea6',1,'curvilinear_grid.h']]], + ['dir_5fj',['DIR_J',['../curvilinear__grid_8h.html#ace93a5df3e99dc8e2957c0ca5916634d',1,'curvilinear_grid.h']]], + ['dir_5fk',['DIR_K',['../curvilinear__grid_8h.html#a37e7df6820136290f573a181abec4945',1,'curvilinear_grid.h']]] ]; diff --git a/html/search/defines_3.html b/html/search/defines_3.html index e575d66..f64e41c 100644 --- a/html/search/defines_3.html +++ b/html/search/defines_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_3.js b/html/search/defines_3.js index a1cc374..3530bb6 100644 --- a/html/search/defines_3.js +++ b/html/search/defines_3.js @@ -1,4 +1,6 @@ var searchData= [ - ['os_5fmacosx',['OS_MACOSX',['../edda_8h.html#a0bf58363320a89953c7f10150df30212',1,'edda.h']]] + ['edda_5fexport',['EDDA_EXPORT',['../edda__export_8h.html#a4130eba3dcc4b1e840d3ee6e2a2e4d6b',1,'edda_export.h']]], + ['emeps',['EMEPS',['../joint__GMM_8h.html#a2307c1fc7acefc09238a702be7606c25',1,'joint_GMM.h']]], + ['enable_5fif_5fbase_5fof',['ENABLE_IF_BASE_OF',['../common_8h.html#aa9a69652fb421d221f087dff01b9d007',1,'common.h']]] ]; diff --git a/html/search/defines_4.html b/html/search/defines_4.html index 90e654d..3bc3005 100644 --- a/html/search/defines_4.html +++ b/html/search/defines_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_4.js b/html/search/defines_4.js index b39e41b..350772c 100644 --- a/html/search/defines_4.js +++ b/html/search/defines_4.js @@ -1,4 +1,13 @@ var searchData= [ - ['test',['TEST',['../test__common_8h.html#af471db13ecaac3935fc460845124f486',1,'test_common.h']]] + ['fel_5fdir_5f0',['FEL_DIR_0',['../curvilinear__grid_8h.html#a2279888e5ba8c879a85948869584b65d',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fi',['FEL_DIR_I',['../curvilinear__grid_8h.html#ae008c4c0b0970e5b10380053096dada1',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fj',['FEL_DIR_J',['../curvilinear__grid_8h.html#ac1d0722d36cca59e4baeed6d1fd7ae1e',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fk',['FEL_DIR_K',['../curvilinear__grid_8h.html#ae437c09c93776462d49e8efecf18d4d8',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fi',['FEL_DIR_NEG_I',['../curvilinear__grid_8h.html#ae702bc981c7117987a9f08e660670c22',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fj',['FEL_DIR_NEG_J',['../curvilinear__grid_8h.html#aef638f39f57d640def49f714d5aff8e9',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fneg_5fk',['FEL_DIR_NEG_K',['../curvilinear__grid_8h.html#a9eee3c07e56af4b166c6df98e0d5ba18',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fi',['FEL_DIR_POS_I',['../curvilinear__grid_8h.html#abf59425ac456cf25adb2c23fcd9c86e9',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fj',['FEL_DIR_POS_J',['../curvilinear__grid_8h.html#ac1ad2c353ea53a33fa7fecadb801bdc2',1,'curvilinear_grid.h']]], + ['fel_5fdir_5fpos_5fk',['FEL_DIR_POS_K',['../curvilinear__grid_8h.html#a02a30f740d6d4bbb29809a419f21ea21',1,'curvilinear_grid.h']]] ]; diff --git a/html/search/defines_5.html b/html/search/defines_5.html index e02f8a2..3eba238 100644 --- a/html/search/defines_5.html +++ b/html/search/defines_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_5.js b/html/search/defines_5.js index b0ee173..1cef4ab 100644 --- a/html/search/defines_5.js +++ b/html/search/defines_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['ucgridphy2comp',['UCGridPhy2Comp',['../grid_8h.html#ad7352884ed931142171b2bbfc9849f59',1,'grid.h']]] + ['ijk_5fto_5fidx',['IJK_TO_IDX',['../level__crossing__prob_8h.html#a1b9a61d5870ac595d332e99b4e808637',1,'level_crossing_prob.h']]] ]; diff --git a/html/search/defines_6.html b/html/search/defines_6.html index 52aef19..a12ea1c 100644 --- a/html/search/defines_6.html +++ b/html/search/defines_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_6.js b/html/search/defines_6.js index 5d96bde..70ab75e 100644 --- a/html/search/defines_6.js +++ b/html/search/defines_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['vsp_5fnew',['vsp_new',['../streamlineGaussianVTK_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineMonteCarlo.cpp'],['../test__vtkEddaReader_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtkEddaReader.cpp'],['../vtk__common_8h.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): vtk_common.h'],['../test__vtk__filters_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtk_filters.cpp']]] + ['max_5fgms',['MAX_GMs',['../common_8h.html#a4b5eb4ecd7706e9581a0348b1050b9df',1,'common.h']]] ]; diff --git a/html/search/defines_7.html b/html/search/defines_7.html index 1a4527c..fc5ae29 100644 --- a/html/search/defines_7.html +++ b/html/search/defines_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_7.js b/html/search/defines_7.js index 736be1b..5a3e8d9 100644 --- a/html/search/defines_7.js +++ b/html/search/defines_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['platform_5fid',['PLATFORM_ID',['../CMakeFiles_23_80_82_2CompilerIdC_2CMakeCCompilerId_8c.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCCompilerId.c'],['../CMakeFiles_23_80_82_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCXXCompilerId.cpp'],['../mac_2CMakeFiles_23_80_82_2CompilerIdC_2CMakeCCompilerId_8c.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCCompilerId.c'],['../mac_2CMakeFiles_23_80_82_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCXXCompilerId.cpp'],['../mac_2CMakeFiles_23_82_82_2CompilerIdC_2CMakeCCompilerId_8c.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCCompilerId.c'],['../mac_2CMakeFiles_23_82_82_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCXXCompilerId.cpp'],['../mac_2CMakeFiles_23_83_81_2CompilerIdC_2CMakeCCompilerId_8c.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCCompilerId.c'],['../mac_2CMakeFiles_23_83_81_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCXXCompilerId.cpp'],['../yoshi_2CMakeFiles_22_88_811_820130917-gabfd5_2CompilerIdC_2CMakeCCompilerId_8c.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCCompilerId.c'],['../yoshi_2CMakeFiles_22_88_811_820130917-gabfd5_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#adbc5372f40838899018fadbc89bd588b',1,'PLATFORM_ID(): CMakeCXXCompilerId.cpp']]] + ['os_5flinux',['OS_LINUX',['../edda_8h.html#ae273c7db78098028c7a6b6b230ac0503',1,'edda.h']]] ]; diff --git a/html/search/defines_8.html b/html/search/defines_8.html index 66764b7..dc60deb 100644 --- a/html/search/defines_8.html +++ b/html/search/defines_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_8.js b/html/search/defines_8.js index af1351b..b39e41b 100644 --- a/html/search/defines_8.js +++ b/html/search/defines_8.js @@ -1,5 +1,4 @@ var searchData= [ - ['stringify',['STRINGIFY',['../mac_2CMakeFiles_23_83_81_2CompilerIdC_2CMakeCCompilerId_8c.html#a43e1cad902b6477bec893cb6430bd6c8',1,'STRINGIFY(): CMakeCCompilerId.c'],['../mac_2CMakeFiles_23_83_81_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#a43e1cad902b6477bec893cb6430bd6c8',1,'STRINGIFY(): CMakeCXXCompilerId.cpp']]], - ['stringify_5fhelper',['STRINGIFY_HELPER',['../mac_2CMakeFiles_23_83_81_2CompilerIdC_2CMakeCCompilerId_8c.html#a2ae9b72bb13abaabfcf2ee0ba7d3fa1d',1,'STRINGIFY_HELPER(): CMakeCCompilerId.c'],['../mac_2CMakeFiles_23_83_81_2CompilerIdCXX_2CMakeCXXCompilerId_8cpp.html#a2ae9b72bb13abaabfcf2ee0ba7d3fa1d',1,'STRINGIFY_HELPER(): CMakeCXXCompilerId.cpp']]] + ['test',['TEST',['../test__common_8h.html#af471db13ecaac3935fc460845124f486',1,'test_common.h']]] ]; diff --git a/html/search/defines_9.html b/html/search/defines_9.html index f6fd783..db0744d 100644 --- a/html/search/defines_9.html +++ b/html/search/defines_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_9.js b/html/search/defines_9.js index b39e41b..b0ee173 100644 --- a/html/search/defines_9.js +++ b/html/search/defines_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['test',['TEST',['../test__common_8h.html#af471db13ecaac3935fc460845124f486',1,'test_common.h']]] + ['ucgridphy2comp',['UCGridPhy2Comp',['../grid_8h.html#ad7352884ed931142171b2bbfc9849f59',1,'grid.h']]] ]; diff --git a/html/search/defines_a.html b/html/search/defines_a.html index c28019f..0978366 100644 --- a/html/search/defines_a.html +++ b/html/search/defines_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/defines_a.js b/html/search/defines_a.js index b0ee173..f774cf3 100644 --- a/html/search/defines_a.js +++ b/html/search/defines_a.js @@ -1,4 +1,4 @@ var searchData= [ - ['ucgridphy2comp',['UCGridPhy2Comp',['../grid_8h.html#ad7352884ed931142171b2bbfc9849f59',1,'grid.h']]] + ['vsp_5fnew',['vsp_new',['../gmm__raw2vtk_8cpp.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): gmm_raw2vtk.cpp'],['../streamlineMonteCarlo_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): streamlineMonteCarlo.cpp'],['../test__vtk__filters_8cpp.html#a2cb50b06530d1dd6951e508da67e6950',1,'vsp_new(): test_vtk_filters.cpp'],['../vtk__common_8h.html#a6532a12da8a1f006198c30213c215ba5',1,'vsp_new(): vtk_common.h']]] ]; diff --git a/html/search/enums_0.html b/html/search/enums_0.html index b4cbe1e..f3028ad 100644 --- a/html/search/enums_0.html +++ b/html/search/enums_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enums_1.html b/html/search/enums_1.html index 2af2a03..557299d 100644 --- a/html/search/enums_1.html +++ b/html/search/enums_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enums_1.js b/html/search/enums_1.js index dc66d6e..ec15a9c 100644 --- a/html/search/enums_1.js +++ b/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['interptype',['InterpType',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781',1,'edda']]] + ['distrtype',['DistrType',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7',1,'edda']]] ]; diff --git a/html/search/enums_2.html b/html/search/enums_2.html index f96cf0a..fd02042 100644 --- a/html/search/enums_2.html +++ b/html/search/enums_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enums_2.js b/html/search/enums_2.js index 8839446..dc66d6e 100644 --- a/html/search/enums_2.js +++ b/html/search/enums_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['returnstatus',['ReturnStatus',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716',1,'edda']]] + ['interptype',['InterpType',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781',1,'edda']]] ]; diff --git a/html/search/enums_3.html b/html/search/enums_3.html index 77df324..8af305a 100644 --- a/html/search/enums_3.html +++ b/html/search/enums_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enums_3.js b/html/search/enums_3.js index fa37972..8839446 100644 --- a/html/search/enums_3.js +++ b/html/search/enums_3.js @@ -1,5 +1,4 @@ var searchData= [ - ['tracedir',['TraceDir',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1e',1,'edda']]], - ['traceord',['TraceOrd',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034d',1,'edda']]] + ['returnstatus',['ReturnStatus',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716',1,'edda']]] ]; diff --git a/html/search/enums_4.html b/html/search/enums_4.html new file mode 100644 index 0000000..7115288 --- /dev/null +++ b/html/search/enums_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/enums_4.js b/html/search/enums_4.js new file mode 100644 index 0000000..fa37972 --- /dev/null +++ b/html/search/enums_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tracedir',['TraceDir',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1e',1,'edda']]], + ['traceord',['TraceOrd',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034d',1,'edda']]] +]; diff --git a/html/search/enumvalues_0.html b/html/search/enumvalues_0.html index 3e00fcf..96eafe7 100644 --- a/html/search/enumvalues_0.html +++ b/html/search/enumvalues_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_1.html b/html/search/enumvalues_1.html index 0e575c9..4e43948 100644 --- a/html/search/enumvalues_1.html +++ b/html/search/enumvalues_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_2.html b/html/search/enumvalues_2.html index e59f4ac..85bd7da 100644 --- a/html/search/enumvalues_2.html +++ b/html/search/enumvalues_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_2.js b/html/search/enumvalues_2.js index ee10cb4..de1d8f5 100644 --- a/html/search/enumvalues_2.js +++ b/html/search/enumvalues_2.js @@ -1,4 +1,8 @@ var searchData= [ - ['length',['LENGTH',['../classedda_1_1Tuple.html#afb8ddf6fb80305c89efa8473e3a2cb8ea315f6eceb8fc99af67f42c59586efb29',1,'edda::Tuple']]] + ['gmm',['GMM',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7aa5971b151d3224c6f1fa20078af8478d',1,'edda']]], + ['gmm2',['GMM2',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a75a0486914b1b728d52bfbeca30555d2',1,'edda']]], + ['gmm3',['GMM3',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a2c224be0d0a84c391fa2abd1fe4ee8e1',1,'edda']]], + ['gmm4',['GMM4',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a5b6e9e45babeacf7862db72115ea4d3b',1,'edda']]], + ['gmm5',['GMM5',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a59561bb7e534f1d77bccd3085e3f506d',1,'edda']]] ]; diff --git a/html/search/enumvalues_3.html b/html/search/enumvalues_3.html index 0a2d754..7dcc658 100644 --- a/html/search/enumvalues_3.html +++ b/html/search/enumvalues_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_3.js b/html/search/enumvalues_3.js index 46fc44f..a0d08ec 100644 --- a/html/search/enumvalues_3.js +++ b/html/search/enumvalues_3.js @@ -1,4 +1,5 @@ var searchData= [ - ['out_5fof_5fbound',['OUT_OF_BOUND',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716af6f7fba99d195f9df03aa3440a26e3b5',1,'edda']]] + ['hist',['HIST',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a6e917340f74c567e73e3afda120e206e',1,'edda']]], + ['hybrid',['HYBRID',['../namespaceedda.html#af8b59ad1295703ca81468f182b9c7fd7a07b98b2333d2fff7e7fa92da24d4bc54',1,'edda']]] ]; diff --git a/html/search/enumvalues_4.html b/html/search/enumvalues_4.html index 1258082..8aa53cc 100644 --- a/html/search/enumvalues_4.html +++ b/html/search/enumvalues_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_4.js b/html/search/enumvalues_4.js index 72ba0f9..ee10cb4 100644 --- a/html/search/enumvalues_4.js +++ b/html/search/enumvalues_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['polygon',['POLYGON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea2d3cdf5619d0d548ffefff873d913140',1,'edda']]] + ['length',['LENGTH',['../classedda_1_1Tuple.html#afb8ddf6fb80305c89efa8473e3a2cb8ea315f6eceb8fc99af67f42c59586efb29',1,'edda::Tuple']]] ]; diff --git a/html/search/enumvalues_5.html b/html/search/enumvalues_5.html index e42d495..249dade 100644 --- a/html/search/enumvalues_5.html +++ b/html/search/enumvalues_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_5.js b/html/search/enumvalues_5.js index f4f1f4b..46fc44f 100644 --- a/html/search/enumvalues_5.js +++ b/html/search/enumvalues_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['success',['SUCCESS',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716a530eabd3f34ef67fe4ab833f2bae1622',1,'edda']]] + ['out_5fof_5fbound',['OUT_OF_BOUND',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716af6f7fba99d195f9df03aa3440a26e3b5',1,'edda']]] ]; diff --git a/html/search/enumvalues_6.html b/html/search/enumvalues_6.html index 96249ec..aa26252 100644 --- a/html/search/enumvalues_6.html +++ b/html/search/enumvalues_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_6.js b/html/search/enumvalues_6.js index f15cb67..72ba0f9 100644 --- a/html/search/enumvalues_6.js +++ b/html/search/enumvalues_6.js @@ -1,12 +1,4 @@ var searchData= [ - ['td_5fbackward',['TD_BACKWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1eaf625f13a06c072f78a07c6e8227250dc',1,'edda']]], - ['td_5fforward',['TD_FORWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1ea0415d5460bee3431708f967a58b00ae8',1,'edda']]], - ['tetrahedron',['TETRAHEDRON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea20602774a5b3a8ff1145bcd0ca59ec8c',1,'edda']]], - ['to_5feuler',['TO_EULER',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da95e35f89507c7491563bd104f3fc3d93',1,'edda']]], - ['to_5frk2',['TO_RK2',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da2688e6dda77917b5d1244fbb87a040cb',1,'edda']]], - ['to_5frk4',['TO_RK4',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034dad96fc7dc216bd2f2507d30f3d9e6172f',1,'edda']]], - ['to_5frk45',['TO_RK45',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da8f2955b09f2eb97a1432225998b8eb4d',1,'edda']]], - ['tri_5flerp',['TRI_LERP',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781ab1bf76c70fe926145cc62335d104c288',1,'edda']]], - ['triangle',['TRIANGLE',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea3c1078d5ad96f5762e321e34fd9a8359',1,'edda']]] + ['polygon',['POLYGON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea2d3cdf5619d0d548ffefff873d913140',1,'edda']]] ]; diff --git a/html/search/enumvalues_7.html b/html/search/enumvalues_7.html index d38c296..256125f 100644 --- a/html/search/enumvalues_7.html +++ b/html/search/enumvalues_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/enumvalues_7.js b/html/search/enumvalues_7.js index 36c6d17..f4f1f4b 100644 --- a/html/search/enumvalues_7.js +++ b/html/search/enumvalues_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['weighted_5fsum',['WEIGHTED_SUM',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781a5cd0cc87f7789a6f7120f6f4f55594ed',1,'edda']]] + ['success',['SUCCESS',['../namespaceedda.html#aa0433980f2b7cbba42ff2234832b9716a530eabd3f34ef67fe4ab833f2bae1622',1,'edda']]] ]; diff --git a/html/search/enumvalues_8.html b/html/search/enumvalues_8.html new file mode 100644 index 0000000..422e9a0 --- /dev/null +++ b/html/search/enumvalues_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/enumvalues_8.js b/html/search/enumvalues_8.js new file mode 100644 index 0000000..f15cb67 --- /dev/null +++ b/html/search/enumvalues_8.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['td_5fbackward',['TD_BACKWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1eaf625f13a06c072f78a07c6e8227250dc',1,'edda']]], + ['td_5fforward',['TD_FORWARD',['../namespaceedda.html#acf3bdd4206b32502667aac4c27d90d1ea0415d5460bee3431708f967a58b00ae8',1,'edda']]], + ['tetrahedron',['TETRAHEDRON',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea20602774a5b3a8ff1145bcd0ca59ec8c',1,'edda']]], + ['to_5feuler',['TO_EULER',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da95e35f89507c7491563bd104f3fc3d93',1,'edda']]], + ['to_5frk2',['TO_RK2',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da2688e6dda77917b5d1244fbb87a040cb',1,'edda']]], + ['to_5frk4',['TO_RK4',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034dad96fc7dc216bd2f2507d30f3d9e6172f',1,'edda']]], + ['to_5frk45',['TO_RK45',['../namespaceedda.html#a377719ed3f74cff16fe1b72b570e034da8f2955b09f2eb97a1432225998b8eb4d',1,'edda']]], + ['tri_5flerp',['TRI_LERP',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781ab1bf76c70fe926145cc62335d104c288',1,'edda']]], + ['triangle',['TRIANGLE',['../namespaceedda.html#a459230caa8b746cb6818233f3f58c63ea3c1078d5ad96f5762e321e34fd9a8359',1,'edda']]] +]; diff --git a/html/search/enumvalues_9.html b/html/search/enumvalues_9.html new file mode 100644 index 0000000..1fdafe6 --- /dev/null +++ b/html/search/enumvalues_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/enumvalues_9.js b/html/search/enumvalues_9.js new file mode 100644 index 0000000..36c6d17 --- /dev/null +++ b/html/search/enumvalues_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weighted_5fsum',['WEIGHTED_SUM',['../namespaceedda.html#a431337c36fb50c77e958d8dfae855781a5cd0cc87f7789a6f7120f6f4f55594ed',1,'edda']]] +]; diff --git a/html/search/files_0.html b/html/search/files_0.html index c7aa36c..63c6ce0 100644 --- a/html/search/files_0.html +++ b/html/search/files_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_0.js b/html/search/files_0.js index cd6dbec..ee69ff6 100644 --- a/html/search/files_0.js +++ b/html/search/files_0.js @@ -1,6 +1,4 @@ var searchData= [ - ['abstract_5fdata_5farray_2eh',['abstract_data_array.h',['../abstract__data__array_8h.html',1,'']]], - ['abstract_5fsampling_5farray_2eh',['abstract_sampling_array.h',['../abstract__sampling__array_8h.html',1,'']]], ['authors_2emd',['AUTHORS.md',['../AUTHORS_8md.html',1,'']]] ]; diff --git a/html/search/files_1.html b/html/search/files_1.html index eca1c80..5b37391 100644 --- a/html/search/files_1.html +++ b/html/search/files_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_1.js b/html/search/files_1.js index 82b03ed..72f49f8 100644 --- a/html/search/files_1.js +++ b/html/search/files_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['common_2eh',['common.h',['../common_8h.html',1,'']]] + ['bmp_5fimage_2eh',['bmp_image.h',['../bmp__image_8h.html',1,'']]] ]; diff --git a/html/search/files_10.html b/html/search/files_10.html new file mode 100644 index 0000000..a4842ca --- /dev/null +++ b/html/search/files_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/files_10.js b/html/search/files_10.js new file mode 100644 index 0000000..d799f1e --- /dev/null +++ b/html/search/files_10.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['test_5farray_2ecpp',['test_array.cpp',['../test__array_8cpp.html',1,'']]], + ['test_5fcommon_2eh',['test_common.h',['../test__common_8h.html',1,'']]], + ['test_5fdistribution_2ecpp',['test_distribution.cpp',['../test__distribution_8cpp.html',1,'']]], + ['test_5fgaussian_2ecpp',['test_gaussian.cpp',['../test__gaussian_8cpp.html',1,'']]], + ['test_5fhistogram_5fio_2ecpp',['test_histogram_io.cpp',['../test__histogram__io_8cpp.html',1,'']]], + ['test_5fio_2ecpp',['test_io.cpp',['../test__io_8cpp.html',1,'']]], + ['test_5fjoint_5fhistogram_2ecpp',['test_joint_histogram.cpp',['../test__joint__histogram_8cpp.html',1,'']]], + ['test_5fjointgmm_2ecpp',['test_jointGMM.cpp',['../test__jointGMM_8cpp.html',1,'']]], + ['test_5fndarray_2ecpp',['test_NdArray.cpp',['../test__NdArray_8cpp.html',1,'']]], + ['test_5fthrust_2ecpp',['test_thrust.cpp',['../test__thrust_8cpp.html',1,'']]], + ['test_5fvtk_5ffilters_2ecpp',['test_vtk_filters.cpp',['../test__vtk__filters_8cpp.html',1,'']]], + ['thrust_5fcommon_2eh',['thrust_common.h',['../thrust__common_8h.html',1,'']]], + ['thrust_5fgmm_5farray_2eh',['thrust_gmm_array.h',['../thrust__gmm__array_8h.html',1,'']]], + ['thrust_5fhisto_5farray_2eh',['thrust_histo_array.h',['../thrust__histo__array_8h.html',1,'']]], + ['thrust_5frandom_5fsample_2eh',['thrust_random_sample.h',['../thrust__random__sample_8h.html',1,'']]], + ['tuple_2eh',['tuple.h',['../tuple_8h.html',1,'']]] +]; diff --git a/html/search/files_11.html b/html/search/files_11.html new file mode 100644 index 0000000..f8f5c17 --- /dev/null +++ b/html/search/files_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/files_11.js b/html/search/files_11.js new file mode 100644 index 0000000..6d7b796 --- /dev/null +++ b/html/search/files_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uncertainisocontourvtk_2ecpp',['uncertainIsocontourVTK.cpp',['../uncertainIsocontourVTK_8cpp.html',1,'']]] +]; diff --git a/html/search/files_12.html b/html/search/files_12.html new file mode 100644 index 0000000..50b6099 --- /dev/null +++ b/html/search/files_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/files_12.js b/html/search/files_12.js new file mode 100644 index 0000000..8054e88 --- /dev/null +++ b/html/search/files_12.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['variant_2eh',['variant.h',['../variant_8h.html',1,'']]], + ['vecdistrmodeler_2eh',['VecDistrModeler.h',['../VecDistrModeler_8h.html',1,'']]], + ['vector_5fmatrix_2ecpp',['vector_matrix.cpp',['../vector__matrix_8cpp.html',1,'']]], + ['vector_5fmatrix_2eh',['vector_matrix.h',['../vector__matrix_8h.html',1,'']]], + ['vectspatialdecompexample_2ecpp',['vectSpatialDecompExample.cpp',['../vectSpatialDecompExample_8cpp.html',1,'']]], + ['vtk_5fcommon_2eh',['vtk_common.h',['../vtk__common_8h.html',1,'']]] +]; diff --git a/html/search/files_2.html b/html/search/files_2.html index 04a8a46..f5456fb 100644 --- a/html/search/files_2.html +++ b/html/search/files_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_2.js b/html/search/files_2.js index fa65cbf..a94de5f 100644 --- a/html/search/files_2.js +++ b/html/search/files_2.js @@ -1,7 +1,6 @@ var searchData= [ - ['data_5farray_2eh',['data_array.h',['../data__array_8h.html',1,'']]], - ['dataset_2eh',['dataset.h',['../dataset_8h.html',1,'']]], - ['densesamplingfield_2ecpp',['denseSamplingField.cpp',['../denseSamplingField_8cpp.html',1,'']]], - ['distribution_2eh',['distribution.h',['../distribution_8h.html',1,'']]] + ['common_2eh',['common.h',['../common_8h.html',1,'']]], + ['curvilinear_5fgrid_2ecpp',['curvilinear_grid.cpp',['../curvilinear__grid_8cpp.html',1,'']]], + ['curvilinear_5fgrid_2eh',['curvilinear_grid.h',['../curvilinear__grid_8h.html',1,'']]] ]; diff --git a/html/search/files_3.html b/html/search/files_3.html index 0dc9a56..3442829 100644 --- a/html/search/files_3.html +++ b/html/search/files_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_3.js b/html/search/files_3.js index 4a43f27..bb817ba 100644 --- a/html/search/files_3.js +++ b/html/search/files_3.js @@ -1,15 +1,8 @@ var searchData= [ - ['edda_2eh',['edda.h',['../edda_8h.html',1,'']]], - ['edda_5fexport_2eh',['edda_export.h',['../edda__export_8h.html',1,'']]], - ['eddarandomprobefilter_2ecpp',['eddaRandomProbeFilter.cpp',['../eddaRandomProbeFilter_8cpp.html',1,'']]], - ['eddarandomprobefilter_2eh',['eddaRandomProbeFilter.h',['../eddaRandomProbeFilter_8h.html',1,'']]], - ['eddarandomsamplefield_2ecpp',['eddaRandomSampleField.cpp',['../eddaRandomSampleField_8cpp.html',1,'']]], - ['eddarandomsamplefield_2eh',['eddaRandomSampleField.h',['../eddaRandomSampleField_8h.html',1,'']]], - ['eddasamplingarray_2ecpp',['eddaSamplingArray.cpp',['../eddaSamplingArray_8cpp.html',1,'']]], - ['eddasamplingarray_2eh',['eddaSamplingArray.h',['../eddaSamplingArray_8h.html',1,'']]], - ['eddathreshold_2ecpp',['eddaThreshold.cpp',['../eddaThreshold_8cpp.html',1,'']]], - ['eddathreshold_2eh',['eddaThreshold.h',['../eddaThreshold_8h.html',1,'']]], - ['eddauncertainisocontour_2ecpp',['eddaUncertainIsocontour.cpp',['../eddaUncertainIsocontour_8cpp.html',1,'']]], - ['eddauncertainisocontour_2eh',['eddaUncertainIsocontour.h',['../eddaUncertainIsocontour_8h.html',1,'']]] + ['dataset_2eh',['dataset.h',['../dataset_8h.html',1,'']]], + ['distr_5farray_2eh',['distr_array.h',['../distr__array_8h.html',1,'']]], + ['distribution_2eh',['distribution.h',['../distribution_8h.html',1,'']]], + ['distribution_5ftag_2eh',['distribution_tag.h',['../distribution__tag_8h.html',1,'']]], + ['distributionmodeler_2eh',['distributionModeler.h',['../distributionModeler_8h.html',1,'']]] ]; diff --git a/html/search/files_4.html b/html/search/files_4.html index 891b5da..d6d5623 100644 --- a/html/search/files_4.html +++ b/html/search/files_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_4.js b/html/search/files_4.js index 89dd7c5..12d015a 100644 --- a/html/search/files_4.js +++ b/html/search/files_4.js @@ -1,8 +1,25 @@ var searchData= [ - ['file_5freader_2ecpp',['file_reader.cpp',['../file__reader_8cpp.html',1,'']]], - ['file_5freader_2eh',['file_reader.h',['../file__reader_8h.html',1,'']]], - ['file_5fwriter_2eh',['file_writer.h',['../file__writer_8h.html',1,'']]], - ['fuzzy_5fisosurface_2eh',['fuzzy_isosurface.h',['../fuzzy__isosurface_8h.html',1,'']]], - ['fuzzyisocontourvtk_2ecpp',['fuzzyIsocontourVTK.cpp',['../fuzzyIsocontourVTK_8cpp.html',1,'']]] + ['edda_2eh',['edda.h',['../edda_8h.html',1,'']]], + ['edda_5fexport_2eh',['edda_export.h',['../edda__export_8h.html',1,'']]], + ['edda_5freader_2ecpp',['edda_reader.cpp',['../edda__reader_8cpp.html',1,'']]], + ['edda_5freader_2eh',['edda_reader.h',['../edda__reader_8h.html',1,'']]], + ['edda_5fvtk_5freader_2ecpp',['edda_vtk_reader.cpp',['../edda__vtk__reader_8cpp.html',1,'']]], + ['edda_5fvtk_5freader_2eh',['edda_vtk_reader.h',['../edda__vtk__reader_8h.html',1,'']]], + ['edda_5fvtk_5fwriter_2ecpp',['edda_vtk_writer.cpp',['../edda__vtk__writer_8cpp.html',1,'']]], + ['edda_5fvtk_5fwriter_2eh',['edda_vtk_writer.h',['../edda__vtk__writer_8h.html',1,'']]], + ['edda_5fwriter_2ecpp',['edda_writer.cpp',['../edda__writer_8cpp.html',1,'']]], + ['edda_5fwriter_2eh',['edda_writer.h',['../edda__writer_8h.html',1,'']]], + ['eddarandomprobefilter_2ecpp',['eddaRandomProbeFilter.cpp',['../eddaRandomProbeFilter_8cpp.html',1,'']]], + ['eddarandomprobefilter_2eh',['eddaRandomProbeFilter.h',['../eddaRandomProbeFilter_8h.html',1,'']]], + ['eddarandomsamplefield_2ecpp',['eddaRandomSampleField.cpp',['../eddaRandomSampleField_8cpp.html',1,'']]], + ['eddarandomsamplefield_2eh',['eddaRandomSampleField.h',['../eddaRandomSampleField_8h.html',1,'']]], + ['eddasamplingarray_2ecpp',['eddaSamplingArray.cpp',['../eddaSamplingArray_8cpp.html',1,'']]], + ['eddasamplingarray_2eh',['eddaSamplingArray.h',['../eddaSamplingArray_8h.html',1,'']]], + ['eddathreshold_2ecpp',['eddaThreshold.cpp',['../eddaThreshold_8cpp.html',1,'']]], + ['eddathreshold_2eh',['eddaThreshold.h',['../eddaThreshold_8h.html',1,'']]], + ['eddauncertainisocontour_2ecpp',['eddaUncertainIsocontour.cpp',['../eddaUncertainIsocontour_8cpp.html',1,'']]], + ['eddauncertainisocontour_2eh',['eddaUncertainIsocontour.h',['../eddaUncertainIsocontour_8h.html',1,'']]], + ['ensembleexample_2ecpp',['ensembleExample.cpp',['../ensembleExample_8cpp.html',1,'']]], + ['estimate_5fgmm_2eh',['estimate_gmm.h',['../estimate__gmm_8h.html',1,'']]] ]; diff --git a/html/search/files_5.html b/html/search/files_5.html index 1741195..86035b5 100644 --- a/html/search/files_5.html +++ b/html/search/files_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_5.js b/html/search/files_5.js index 9ec6cae..0c030e8 100644 --- a/html/search/files_5.js +++ b/html/search/files_5.js @@ -1,12 +1,5 @@ var searchData= [ - ['gaussian_2eh',['gaussian.h',['../gaussian_8h.html',1,'']]], - ['gaussian_5fmixture_2eh',['gaussian_mixture.h',['../gaussian__mixture_8h.html',1,'']]], - ['gmm_5farray_2eh',['gmm_array.h',['../gmm__array_8h.html',1,'']]], - ['gmm_5fndarray_2ecpp',['gmm_ndarray.cpp',['../gmm__ndarray_8cpp.html',1,'']]], - ['gmm_5fraw2vtk_2ecpp',['gmm_raw2vtk.cpp',['../gmm__raw2vtk_8cpp.html',1,'']]], - ['gmm_5fvtk_5fdata_5farray_2ecpp',['gmm_vtk_data_array.cpp',['../gmm__vtk__data__array_8cpp.html',1,'']]], - ['gmm_5fvtk_5fdata_5farray_2eh',['gmm_vtk_data_array.h',['../gmm__vtk__data__array_8h.html',1,'']]], - ['grid_2ecpp',['grid.cpp',['../grid_8cpp.html',1,'']]], - ['grid_2eh',['grid.h',['../grid_8h.html',1,'']]] + ['fuzzy_5fisosurface_2eh',['fuzzy_isosurface.h',['../fuzzy__isosurface_8h.html',1,'']]], + ['fuzzyisocontourvtk_2ecpp',['fuzzyIsocontourVTK.cpp',['../fuzzyIsocontourVTK_8cpp.html',1,'']]] ]; diff --git a/html/search/files_6.html b/html/search/files_6.html index 262d3da..384e5c5 100644 --- a/html/search/files_6.html +++ b/html/search/files_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_6.js b/html/search/files_6.js index cc63655..4aa984a 100644 --- a/html/search/files_6.js +++ b/html/search/files_6.js @@ -1,4 +1,10 @@ var searchData= [ - ['interpolator_2eh',['interpolator.h',['../interpolator_8h.html',1,'']]] + ['gaussian_2eh',['gaussian.h',['../gaussian_8h.html',1,'']]], + ['gaussian_5fmixture_2eh',['gaussian_mixture.h',['../gaussian__mixture_8h.html',1,'']]], + ['gmm_5fraw2vtk_2ecpp',['gmm_raw2vtk.cpp',['../gmm__raw2vtk_8cpp.html',1,'']]], + ['gmm_5fvtk_5fdata_5farray_2ecpp',['gmm_vtk_data_array.cpp',['../gmm__vtk__data__array_8cpp.html',1,'']]], + ['gmm_5fvtk_5fdata_5farray_2eh',['gmm_vtk_data_array.h',['../gmm__vtk__data__array_8h.html',1,'']]], + ['grid_2ecpp',['grid.cpp',['../grid_8cpp.html',1,'']]], + ['grid_2eh',['grid.h',['../grid_8h.html',1,'']]] ]; diff --git a/html/search/files_7.html b/html/search/files_7.html index c535572..f608e34 100644 --- a/html/search/files_7.html +++ b/html/search/files_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_7.js b/html/search/files_7.js index 4d3267f..e6c780b 100644 --- a/html/search/files_7.js +++ b/html/search/files_7.js @@ -1,7 +1,5 @@ var searchData= [ - ['level_5fcrossing_5fprob_2eh',['level_crossing_prob.h',['../level__crossing__prob_8h.html',1,'']]], - ['license_2emd',['LICENSE.md',['../LICENSE_8md.html',1,'']]], - ['loadgaussianscalarfield_2ecpp',['loadGaussianScalarField.cpp',['../loadGaussianScalarField_8cpp.html',1,'']]], - ['loadgaussianvectorfield_2ecpp',['loadGaussianVectorField.cpp',['../loadGaussianVectorField_8cpp.html',1,'']]] + ['histo_5farray_2eh',['histo_array.h',['../histo__array_8h.html',1,'']]], + ['histogram_2eh',['histogram.h',['../histogram_8h.html',1,'']]] ]; diff --git a/html/search/files_8.html b/html/search/files_8.html index 21c328a..9f9ccf9 100644 --- a/html/search/files_8.html +++ b/html/search/files_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_8.js b/html/search/files_8.js index 8f8215f..928b534 100644 --- a/html/search/files_8.js +++ b/html/search/files_8.js @@ -1,8 +1,5 @@ var searchData= [ - ['ndarray_2eh',['ndarray.h',['../old_2ndarray_8h.html',1,'']]], - ['ndarray_2eh',['ndarray.h',['../src_2core_2ndarray_8h.html',1,'']]], - ['ndarray_5fiterator_2eh',['ndarray_iterator.h',['../ndarray__iterator_8h.html',1,'']]], - ['nrrd_2ecpp',['nrrd.cpp',['../nrrd_8cpp.html',1,'']]], - ['nrrd_2eh',['nrrd.h',['../nrrd_8h.html',1,'']]] + ['interpolator_2eh',['interpolator.h',['../interpolator_8h.html',1,'']]], + ['invert_5fmatrix_2eh',['invert_matrix.h',['../invert__matrix_8h.html',1,'']]] ]; diff --git a/html/search/files_9.html b/html/search/files_9.html index 00a5201..bde7589 100644 --- a/html/search/files_9.html +++ b/html/search/files_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_9.js b/html/search/files_9.js index 9f04869..531f85d 100644 --- a/html/search/files_9.js +++ b/html/search/files_9.js @@ -1,5 +1,6 @@ var searchData= [ - ['path_2ecpp',['path.cpp',['../path_8cpp.html',1,'']]], - ['path_2eh',['path.h',['../path_8h.html',1,'']]] + ['joint_5fgaussian_2eh',['joint_gaussian.h',['../joint__gaussian_8h.html',1,'']]], + ['joint_5fgmm_2eh',['joint_GMM.h',['../joint__GMM_8h.html',1,'']]], + ['joint_5fhistogram_2eh',['joint_histogram.h',['../joint__histogram_8h.html',1,'']]] ]; diff --git a/html/search/files_a.html b/html/search/files_a.html index ab04755..0b3bb1d 100644 --- a/html/search/files_a.html +++ b/html/search/files_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_a.js b/html/search/files_a.js index f499833..58be10b 100644 --- a/html/search/files_a.js +++ b/html/search/files_a.js @@ -1,7 +1,7 @@ var searchData= [ - ['random_5fsample_5ffield_2eh',['random_sample_field.h',['../random__sample__field_8h.html',1,'']]], - ['random_5fsampling_5fiterator_2eh',['random_sampling_iterator.h',['../random__sampling__iterator_8h.html',1,'']]], - ['randomsample_2ecpp',['randomSample.cpp',['../randomSample_8cpp.html',1,'']]], - ['readme_2emd',['README.md',['../README_8md.html',1,'']]] + ['level_5fcrossing_5fprob_2eh',['level_crossing_prob.h',['../level__crossing__prob_8h.html',1,'']]], + ['license_2emd',['LICENSE.md',['../LICENSE_8md.html',1,'']]], + ['loadcurvilineardataset_2ecpp',['loadCurvilinearDataset.cpp',['../loadCurvilinearDataset_8cpp.html',1,'']]], + ['loadscalardataset_2ecpp',['loadScalarDataset.cpp',['../loadScalarDataset_8cpp.html',1,'']]] ]; diff --git a/html/search/files_b.html b/html/search/files_b.html index 11010e1..4248332 100644 --- a/html/search/files_b.html +++ b/html/search/files_b.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_b.js b/html/search/files_b.js index 3f06445..000a83c 100644 --- a/html/search/files_b.js +++ b/html/search/files_b.js @@ -1,8 +1,4 @@ var searchData= [ - ['shared_5fary_2eh',['shared_ary.h',['../shared__ary_8h.html',1,'']]], - ['statistics_2eh',['statistics.h',['../statistics_8h.html',1,'']]], - ['stream_5ftracer_2eh',['stream_tracer.h',['../stream__tracer_8h.html',1,'']]], - ['streamlinegaussianvtk_2ecpp',['streamlineGaussianVTK.cpp',['../streamlineGaussianVTK_8cpp.html',1,'']]], - ['streamlinemontecarlo_2ecpp',['streamlineMonteCarlo.cpp',['../streamlineMonteCarlo_8cpp.html',1,'']]] + ['mc_5fstreamline_2eh',['mc_streamline.h',['../mc__streamline_8h.html',1,'']]] ]; diff --git a/html/search/files_c.html b/html/search/files_c.html index 6fbd135..46529b7 100644 --- a/html/search/files_c.html +++ b/html/search/files_c.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_c.js b/html/search/files_c.js index 92dd7cd..1c98b40 100644 --- a/html/search/files_c.js +++ b/html/search/files_c.js @@ -1,14 +1,7 @@ var searchData= [ - ['test_5farray_2ecpp',['test_array.cpp',['../test__array_8cpp.html',1,'']]], - ['test_5fcommon_2eh',['test_common.h',['../test__common_8h.html',1,'']]], - ['test_5fgaussian_2ecpp',['test_gaussian.cpp',['../test__gaussian_8cpp.html',1,'']]], - ['test_5fndarray_2ecpp',['test_NdArray.cpp',['../test__NdArray_8cpp.html',1,'']]], - ['test_5fthrust_2ecpp',['test_thrust.cpp',['../test__thrust_8cpp.html',1,'']]], - ['test_5fvariant_2ecpp',['test_variant.cpp',['../test__variant_8cpp.html',1,'']]], - ['test_5fvtk_5ffilters_2ecpp',['test_vtk_filters.cpp',['../test__vtk__filters_8cpp.html',1,'']]], - ['test_5fvtk_5fpipeline_2ecpp',['test_vtk_pipeline.cpp',['../test__vtk__pipeline_8cpp.html',1,'']]], - ['test_5fvtkeddareader_2ecpp',['test_vtkEddaReader.cpp',['../test__vtkEddaReader_8cpp.html',1,'']]], - ['thrust_5fcommon_2eh',['thrust_common.h',['../thrust__common_8h.html',1,'']]], - ['tuple_2eh',['tuple.h',['../tuple_8h.html',1,'']]] + ['ndarray_2eh',['ndarray.h',['../ndarray_8h.html',1,'']]], + ['ndarray_5fiterator_2eh',['ndarray_iterator.h',['../ndarray__iterator_8h.html',1,'']]], + ['nrrd_2ecpp',['nrrd.cpp',['../nrrd_8cpp.html',1,'']]], + ['nrrd_2eh',['nrrd.h',['../nrrd_8h.html',1,'']]] ]; diff --git a/html/search/files_d.html b/html/search/files_d.html index 1201a33..6a4f3b1 100644 --- a/html/search/files_d.html +++ b/html/search/files_d.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_d.js b/html/search/files_d.js index 742fea0..9f04869 100644 --- a/html/search/files_d.js +++ b/html/search/files_d.js @@ -1,5 +1,5 @@ var searchData= [ - ['uncertain_5fisocontour_2ecpp',['uncertain_isocontour.cpp',['../uncertain__isocontour_8cpp.html',1,'']]], - ['uncertainisocontourvtk_2ecpp',['uncertainIsocontourVTK.cpp',['../uncertainIsocontourVTK_8cpp.html',1,'']]] + ['path_2ecpp',['path.cpp',['../path_8cpp.html',1,'']]], + ['path_2eh',['path.h',['../path_8h.html',1,'']]] ]; diff --git a/html/search/files_e.html b/html/search/files_e.html index 2d91997..a9ab64f 100644 --- a/html/search/files_e.html +++ b/html/search/files_e.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/files_e.js b/html/search/files_e.js index 4070857..2afe9f7 100644 --- a/html/search/files_e.js +++ b/html/search/files_e.js @@ -1,12 +1,6 @@ var searchData= [ - ['variant_2eh',['variant.h',['../variant_8h.html',1,'']]], - ['vector_5fmatrix_2eh',['vector_matrix.h',['../vector__matrix_8h.html',1,'']]], - ['vtk_5fcommon_2eh',['vtk_common.h',['../vtk__common_8h.html',1,'']]], - ['vtkcompositeuncertainisocontour_2ecpp',['vtkCompositeUncertainIsocontour.cpp',['../vtkCompositeUncertainIsocontour_8cpp.html',1,'']]], - ['vtkcompositeuncertainisocontour_2eh',['vtkCompositeUncertainIsocontour.h',['../vtkCompositeUncertainIsocontour_8h.html',1,'']]], - ['vtkeddareader_2ecpp',['vtkEddaReader.cpp',['../vtkEddaReader_8cpp.html',1,'']]], - ['vtkeddareader_2eh',['vtkEddaReader.h',['../vtkEddaReader_8h.html',1,'']]], - ['vtksamplingarray_2ecpp',['vtkSamplingArray.cpp',['../vtkSamplingArray_8cpp.html',1,'']]], - ['vtksamplingarray_2eh',['vtkSamplingArray.h',['../vtkSamplingArray_8h.html',1,'']]] + ['random_5fsampling_5fiterator_2eh',['random_sampling_iterator.h',['../random__sampling__iterator_8h.html',1,'']]], + ['randomsamplefield_2ecpp',['randomSampleField.cpp',['../randomSampleField_8cpp.html',1,'']]], + ['readme_2emd',['README.md',['../README_8md.html',1,'']]] ]; diff --git a/html/search/files_f.html b/html/search/files_f.html new file mode 100644 index 0000000..ca17558 --- /dev/null +++ b/html/search/files_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/files_f.js b/html/search/files_f.js new file mode 100644 index 0000000..9724cce --- /dev/null +++ b/html/search/files_f.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['shared_5fary_2eh',['shared_ary.h',['../shared__ary_8h.html',1,'']]], + ['spatialdecompositionexample_2ecpp',['spatialDecompositionExample.cpp',['../spatialDecompositionExample_8cpp.html',1,'']]], + ['statistics_2eh',['statistics.h',['../statistics_8h.html',1,'']]], + ['stream_5ftracer_2eh',['stream_tracer.h',['../stream__tracer_8h.html',1,'']]], + ['streamlinemontecarlo_2ecpp',['streamlineMonteCarlo.cpp',['../streamlineMonteCarlo_8cpp.html',1,'']]] +]; diff --git a/html/search/functions_0.html b/html/search/functions_0.html index 16a5a52..03cae5d 100644 --- a/html/search/functions_0.html +++ b/html/search/functions_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_0.js b/html/search/functions_0.js index c8d74cd..caea183 100644 --- a/html/search/functions_0.js +++ b/html/search/functions_0.js @@ -1,5 +1,15 @@ var searchData= [ - ['_5fgetcdf',['_getCdf',['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a6843ed99941c43cd8750cf2100330dc3',1,'edda::dist::detail::_getCdf']]], - ['_5fgetpdf',['_getPdf',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#aa062a26f3dc8d025121022f4f9bdcd97',1,'edda::dist::detail::_getPdf']]] + ['adaptive_5fvertex_5fcell_5fwalk',['adaptive_vertex_cell_walk',['../classedda_1_1CurvilinearGrid.html#a2ac31ae9685dede3583cfd17b4e88ed4',1,'edda::CurvilinearGrid']]], + ['addvtkgmmarrays',['addVtkGmmArrays',['../namespaceedda.html#a48211faeadb7b6b1295d3ef3c53bde17',1,'edda']]], + ['addvtkhistoarrays',['addVtkHistoArrays',['../namespaceedda.html#aa0210106832c1fa8123f74c671c82e58',1,'edda']]], + ['allocate',['Allocate',['../classeddaSamplingArray.html#a917f0e4abe5eb584b1460e1c9d39efe4',1,'eddaSamplingArray']]], + ['approx_5fequal',['approx_equal',['../test__common_8h.html#a68842a038cb91a47ccb1f03de6cfc4c0',1,'test_common.h']]], + ['assign',['assign',['../classedda_1_1dist_1_1GaussianMixture.html#ace459f5fa7ac233bc5ca3c713f4f82b4',1,'edda::dist::GaussianMixture']]], + ['assigngrid',['assignGrid',['../classedda_1_1DistributionModeler.html#ac58d871bc15eff4fa66cb31646ba2292',1,'edda::DistributionModeler::assignGrid()'],['../classedda_1_1VecDistrModeler.html#a8df86623db04cb419b0cf3fff0badfe1',1,'edda::VecDistrModeler::assignGrid()']]], + ['at_5fcomp',['at_comp',['../classedda_1_1Dataset.html#a5af9671298bb2caa13dcbaaebc508c07',1,'edda::Dataset']]], + ['at_5fcomp_5fdistr',['at_comp_distr',['../classedda_1_1Dataset.html#ad17d6a2478d61429c399aef7d2d84ded',1,'edda::Dataset']]], + ['at_5fcomp_5fdistr_5fvector',['at_comp_distr_vector',['../classedda_1_1Dataset.html#a31ac5c14c35d9cb4570782a6f57d899c',1,'edda::Dataset']]], + ['at_5fphys',['at_phys',['../classedda_1_1CurvilinearGrid.html#a2acd425f15acd55f64f3fa860043af12',1,'edda::CurvilinearGrid::at_phys()'],['../classedda_1_1Dataset.html#a65d909dd1c68ce077846625f8b3ad400',1,'edda::Dataset::at_phys()']]], + ['at_5fvertex',['at_vertex',['../classedda_1_1CurvilinearGrid.html#adb2ec7686ea2b49d3379b5946da6a419',1,'edda::CurvilinearGrid::at_vertex()'],['../classedda_1_1Grid.html#a2df64d91c52a5a6790b24eeb70bb9bb2',1,'edda::Grid::at_vertex()'],['../classedda_1_1CartesianGrid.html#a5113fab2e80988b778151608e42ae4da',1,'edda::CartesianGrid::at_vertex()'],['../classedda_1_1RegularCartesianGrid.html#a27fcba8a9def09d616fe20f30b38fec6',1,'edda::RegularCartesianGrid::at_vertex()']]] ]; diff --git a/html/search/functions_1.html b/html/search/functions_1.html index 3b4eacf..5d7a2e3 100644 --- a/html/search/functions_1.html +++ b/html/search/functions_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_1.js b/html/search/functions_1.js index 295d1c5..35cd32e 100644 --- a/html/search/functions_1.js +++ b/html/search/functions_1.js @@ -1,9 +1,11 @@ var searchData= [ - ['allocate',['Allocate',['../classvtkSamplingArray.html#a346bf9fea7b4774992a9671dff8cf458',1,'vtkSamplingArray::Allocate()'],['../classeddaSamplingArray.html#a917f0e4abe5eb584b1460e1c9d39efe4',1,'eddaSamplingArray::Allocate()']]], - ['approx_5fequal',['approx_equal',['../test__common_8h.html#a68842a038cb91a47ccb1f03de6cfc4c0',1,'test_common.h']]], - ['assign',['assign',['../classedda_1_1dist_1_1GaussianMixture.html#a17d607517f480dc263f56d9aa458102c',1,'edda::dist::GaussianMixture']]], - ['at_5fcomp',['at_comp',['../classedda_1_1Dataset.html#a1bc76a28b31c0590043d5a8372b5b810',1,'edda::Dataset']]], - ['at_5fphys',['at_phys',['../classedda_1_1Dataset.html#a885f84a2a2de16d496ee003c859def8a',1,'edda::Dataset']]], - ['at_5fvertex',['at_vertex',['../classedda_1_1Grid.html#a2df64d91c52a5a6790b24eeb70bb9bb2',1,'edda::Grid::at_vertex()'],['../classedda_1_1CartesianGrid.html#a5113fab2e80988b778151608e42ae4da',1,'edda::CartesianGrid::at_vertex()'],['../classedda_1_1RegularCartesianGrid.html#a27fcba8a9def09d616fe20f30b38fec6',1,'edda::RegularCartesianGrid::at_vertex()']]] + ['baryinterp',['baryInterp',['../namespaceedda.html#a23a4a142a4ba07fb1318645250902c4e',1,'edda']]], + ['begin',['begin',['../classedda_1_1NdArray.html#a20be2048dabae43730f822bf95f4261e',1,'edda::NdArray::begin()'],['../classedda_1_1GmmArray.html#acb64ace250f0432e5cbc7e04a5cebc21',1,'edda::GmmArray::begin()'],['../classedda_1_1HistoArray.html#adba95c3695e7e78acddd71daece4de9e',1,'edda::HistoArray::begin()']]], + ['bilerp',['biLerp',['../namespaceedda.html#a923e527ea437795f77c2adda560f66ed',1,'edda']]], + ['bmpimage',['BMPImage',['../structBMPImage.html#a836750cb00a5a32d72823f6a14d6c117',1,'BMPImage']]], + ['boundary',['boundary',['../classedda_1_1CurvilinearGrid.html#a1365bfbceb738b5bef334a5ac2722d2d',1,'edda::CurvilinearGrid::boundary()'],['../classedda_1_1Grid.html#a3cd1a33c83c842a7f4bc4d762ceef6d7',1,'edda::Grid::boundary()'],['../classedda_1_1CartesianGrid.html#a1d097420ee875e5843c0a2d74574a782',1,'edda::CartesianGrid::boundary()'],['../classedda_1_1RegularCartesianGrid.html#a010a1b53e23329d5346a24591d397867',1,'edda::RegularCartesianGrid::boundary()']]], + ['boundaryintersection',['boundaryIntersection',['../classedda_1_1CurvilinearGrid.html#a680b178fa4409f0da29098b1c5c03158',1,'edda::CurvilinearGrid::boundaryIntersection()'],['../classedda_1_1Grid.html#ac228595cf39fff8e5230f53a5b76687a',1,'edda::Grid::boundaryIntersection()'],['../classedda_1_1CartesianGrid.html#a387121fae344bb70e0585c62193c161f',1,'edda::CartesianGrid::boundaryIntersection()'],['../classedda_1_1RegularCartesianGrid.html#a13bdc8d580c22e3f00dea4d5d2fdb4d7',1,'edda::RegularCartesianGrid::boundaryIntersection()']]], + ['box_5fmuller',['box_muller',['../namespaceedda.html#a99e63c404645ad326c632c2ce97beaba',1,'edda']]], + ['buildfieldlist',['BuildFieldList',['../classeddaRandomProbeFilter.html#a39a7d796afb3ca9f524b32981c3fff99',1,'eddaRandomProbeFilter']]] ]; diff --git a/html/search/functions_10.html b/html/search/functions_10.html index 52cb0d3..c78227c 100644 --- a/html/search/functions_10.html +++ b/html/search/functions_10.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_10.js b/html/search/functions_10.js index df3c584..3613e0e 100644 --- a/html/search/functions_10.js +++ b/html/search/functions_10.js @@ -1,15 +1,33 @@ var searchData= [ - ['take',['take',['../classedda_1_1NdArray.html#a37a403de9db8176d39b5fd515a4d1d01',1,'edda::NdArray']]], - ['test_5fthreshold',['test_threshold',['../test__vtk__filters_8cpp.html#a2efb78dd152ccb27aa7c6a40aa5afaf3',1,'test_vtk_filters.cpp']]], - ['test_5fvariant',['test_variant',['../test__variant_8cpp.html#aa9d40b1984ca033b3ea9e97993c3858a',1,'test_variant.cpp']]], - ['tetralerp',['tetraLerp',['../namespaceedda.html#a695a7e0efb2ab6affdc20001192c0006',1,'edda']]], - ['thresholdbetween',['ThresholdBetween',['../classeddaThreshold.html#aab5d54fee0ccb2cd1116a87a41f17f7b',1,'eddaThreshold']]], - ['thresholdbylower',['ThresholdByLower',['../classeddaThreshold.html#a02a56991ed507396e580e609de2a17ef',1,'eddaThreshold']]], - ['thresholdbyupper',['ThresholdByUpper',['../classeddaThreshold.html#abb1baf518917bf90f6666a0c309fd165',1,'eddaThreshold']]], - ['trilerp',['triLerp',['../namespaceedda.html#ae9734f47a623e06d20c371e010fe761e',1,'edda']]], - ['tuple',['Tuple',['../classedda_1_1Tuple.html#a0474ff57c17e224def4b2ee2b2329e6d',1,'edda::Tuple::Tuple()'],['../classedda_1_1Tuple.html#a5ecb3290fd84a8f1b53ccb58371e7be9',1,'edda::Tuple::Tuple(const T &scalar)'],['../classedda_1_1Tuple.html#a69b581682e5c6fbe1930e5cd6ab647b1',1,'edda::Tuple::Tuple(const T *init)'],['../classedda_1_1Tuple.html#a60852e69ca7d6eb98283ea383cc5d0a8',1,'edda::Tuple::Tuple(const Tuple< U, N > &v)']]], - ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html#a4b573e5df5a0dc3663e70e2f42fcdb55',1,'edda::Tuple2::Tuple2()'],['../structedda_1_1Tuple2.html#ac1af7bd6b37f5a601988f690527a05f2',1,'edda::Tuple2::Tuple2(const T &x, const T &y)']]], - ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html#af8f5cf58b185b2b2ef9d38161c518170',1,'edda::Tuple3::Tuple3()'],['../structedda_1_1Tuple3.html#a6cf42eb68b87ded412dd288ae5350e64',1,'edda::Tuple3::Tuple3(const T &x, const T &y, const T &z)']]], - ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html#a518d7b0aed299710413edde9bfd2b792',1,'edda::Tuple4::Tuple4()'],['../structedda_1_1Tuple4.html#af0b36d1663eee09908560f9bfe9dce47',1,'edda::Tuple4::Tuple4(const T &x, const T &y, const T &z, const T &w)']]] + ['sampledataarray',['SampleDataArray',['../classeddaRandomSampleField.html#a59d9a1ce75be572a5fc56a9aa1765f72',1,'eddaRandomSampleField']]], + ['scalardistrarray',['ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html#a75c12ee43b26d941bc36f5bb6db30ee5',1,'edda::ScalarDistrArray']]], + ['set',['set',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd2833a76c0753e6766b4abeaffbb4c5',1,'edda::Vector< Real, 3 >::set()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ac225598517bc52939096bd6fd54023ce',1,'edda::Vector< Real, 4 >::set()']]], + ['set_5fownership',['set_ownership',['../classedda_1_1NdArray.html#a0cec1d5f0c34d1f44c8203bdb62b68e3',1,'edda::NdArray']]], + ['set_5fval',['set_val',['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray']]], + ['setbinwidths',['setBinWidths',['../structedda_1_1dist_1_1JointHistogram.html#a2e03366852fa3eaf4772a5bcf8b84fec',1,'edda::dist::JointHistogram']]], + ['setboundary',['setBoundary',['../classedda_1_1CurvilinearGrid.html#a38e351041b2c875da72c22ab32617372',1,'edda::CurvilinearGrid::setBoundary()'],['../classedda_1_1Grid.html#af3650ba5e9f2eedecadd0cafad4798a3',1,'edda::Grid::setBoundary()'],['../classedda_1_1CartesianGrid.html#a955ac477d9f7f95b6142a4cc97605c74',1,'edda::CartesianGrid::setBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a005accc847e5455e57f4e523e7b99bd6',1,'edda::RegularCartesianGrid::setBoundary()']]], + ['setcovariance',['setCovariance',['../structedda_1_1dist_1_1JointHistogram.html#ac18457451dcc2383f463ec84a6159af3',1,'edda::dist::JointHistogram']]], + ['setdistr',['setDistr',['../structedda_1_1dist_1_1JointHistogram.html#aebf84de7d2b246929c1d43534f599cba',1,'edda::dist::JointHistogram']]], + ['setdistrtype',['setDistrType',['../namespaceedda.html#ae5111b4310bc98fa0e49544ecdb3d5ed',1,'edda']]], + ['seteddaarray',['SetEddaArray',['../classeddaSamplingArray.html#a0eb6297da156ae9fa99da822bb475140',1,'eddaSamplingArray']]], + ['setgmm',['setGMM',['../classedda_1_1dist_1_1JointGMM.html#a49f668c07fea5e7b684715f7154e3e1a',1,'edda::dist::JointGMM']]], + ['setmatrices',['setMatrices',['../structedda_1_1dist_1_1JointGaussian.html#a5a3ef4ba7bd6cb66f0ffa8aa585cb02b',1,'edda::dist::JointGaussian']]], + ['setmaxvals',['setMaxVals',['../structedda_1_1dist_1_1JointHistogram.html#aef2fb0ca3a39b13ec3ab6258b38dffd7',1,'edda::dist::JointHistogram']]], + ['setminvals',['setMinVals',['../structedda_1_1dist_1_1JointHistogram.html#a71d65d77cc3049f846be0336d51801e0',1,'edda::dist::JointHistogram']]], + ['setnumberoftuples',['SetNumberOfTuples',['../classeddaSamplingArray.html#a227706ad000143370b166318ed20bcfc',1,'eddaSamplingArray']]], + ['setnumbins',['setNumBins',['../structedda_1_1dist_1_1JointHistogram.html#aea20ebc8b419fe0066eedd9df04dc5f2',1,'edda::dist::JointHistogram']]], + ['setnumvars',['setNumVars',['../structedda_1_1dist_1_1JointHistogram.html#a54bf387134faa785520f52dedd9b6048',1,'edda::dist::JointHistogram']]], + ['setrealboundary',['setRealBoundary',['../classedda_1_1CurvilinearGrid.html#ab5ccaa6ccbb3b9f604055c7d82c92543',1,'edda::CurvilinearGrid::setRealBoundary()'],['../classedda_1_1CartesianGrid.html#abe9b85a02f3cc95d6b3aea12bb54e1f9',1,'edda::CartesianGrid::setRealBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a837950c49d82ec89ecc79181ca2de390',1,'edda::RegularCartesianGrid::setRealBoundary()']]], + ['setsourceconnection',['SetSourceConnection',['../classeddaRandomProbeFilter.html#a071d5410a123cb241996c6f35c90a3f1',1,'eddaRandomProbeFilter']]], + ['setsourcedata',['SetSourceData',['../classeddaRandomProbeFilter.html#a025f0fa555ac54d677ba01e75aeec66c',1,'eddaRandomProbeFilter']]], + ['settargetcomponent',['SetTargetComponent',['../classedda_1_1DistrArray.html#a14123887b3d5913359f6930899185f07',1,'edda::DistrArray::SetTargetComponent()'],['../classedda_1_1ScalarDistrArray.html#ae6e5bc3479c82f3079ff6ca36c6e3cba',1,'edda::ScalarDistrArray::SetTargetComponent()'],['../classedda_1_1VectorDistrArray.html#ac8f1746a48a733a92dd41e221c90fb74',1,'edda::VectorDistrArray::SetTargetComponent()'],['../classedda_1_1JointDistrArray.html#aebc41801fc291f5e8c9d397d28572f72',1,'edda::JointDistrArray::SetTargetComponent()'],['../classedda_1_1GmmVtkDataArray.html#af9a4946189dff6b025bf2dc106a1c0ee',1,'edda::GmmVtkDataArray::SetTargetComponent()']]], + ['settuple',['SetTuple',['../classeddaSamplingArray.html#a95e56e923f0e3c0d379355253836a24c',1,'eddaSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a66a463aa54a151e7ed6c76693ead3978',1,'eddaSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#ac7949700cfa4662839a696b873742dd5',1,'eddaSamplingArray::SetTuple(vtkIdType i, const double *tuple)']]], + ['setvariantvalue',['SetVariantValue',['../classeddaSamplingArray.html#ae71b18bac49013fc99530e4f9148210c',1,'eddaSamplingArray']]], + ['setvoidarray',['SetVoidArray',['../classeddaSamplingArray.html#a7759fff2d32c5d9b73ade5c0df174614',1,'eddaSamplingArray']]], + ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html#af338c5a848dfbde825c9520c5ba0a959',1,'edda::shared_ary::shared_ary()'],['../classedda_1_1shared__ary.html#a6164ce3cb376ee64e5b819f3b2eb1f7e',1,'edda::shared_ary::shared_ary(T *p, size_t n_)'],['../classedda_1_1shared__ary.html#a87a4d8eface1debf626881862ced62e4',1,'edda::shared_ary::shared_ary(size_t n_)']]], + ['simplicial_5fdecomposition_5fodd',['simplicial_decomposition_odd',['../classedda_1_1CurvilinearGrid.html#afaea203b36f9874bee4beaee4dbb131a',1,'edda::CurvilinearGrid']]], + ['squeeze',['Squeeze',['../classeddaSamplingArray.html#abeb4a46753f12abc8cce6c81e7a89200',1,'eddaSamplingArray']]], + ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html#afd2a7cb908f8ab75b54abccf49206645',1,'edda::StreamTracer']]], + ['swap',['swap',['../classedda_1_1shared__ary.html#a79f7586a6e2ea57698ab940a629e340d',1,'edda::shared_ary']]] ]; diff --git a/html/search/functions_11.html b/html/search/functions_11.html index 5e91b09..3ab653e 100644 --- a/html/search/functions_11.html +++ b/html/search/functions_11.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_11.js b/html/search/functions_11.js index 0313be9..df2d9c3 100644 --- a/html/search/functions_11.js +++ b/html/search/functions_11.js @@ -1,4 +1,17 @@ var searchData= [ - ['updateseeds',['updateSeeds',['../streamlineGaussianVTK_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'updateSeeds(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'updateSeeds(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): streamlineMonteCarlo.cpp']]] + ['take',['take',['../classedda_1_1NdArray.html#a37a403de9db8176d39b5fd515a4d1d01',1,'edda::NdArray']]], + ['test_5fthreshold',['test_threshold',['../test__vtk__filters_8cpp.html#a2efb78dd152ccb27aa7c6a40aa5afaf3',1,'test_vtk_filters.cpp']]], + ['testformatch',['testforMatch',['../namespaceedda.html#ac9b0cfdf55fb9252d59749ffb800e527',1,'edda']]], + ['tetrahedral_5fwalk_5flocate',['tetrahedral_walk_locate',['../classedda_1_1CurvilinearGrid.html#a1df251d8110bab2b03e0c3e9619ebad6',1,'edda::CurvilinearGrid']]], + ['tetralerp',['tetraLerp',['../namespaceedda.html#a695a7e0efb2ab6affdc20001192c0006',1,'edda']]], + ['thresholdbetween',['ThresholdBetween',['../classeddaThreshold.html#aab5d54fee0ccb2cd1116a87a41f17f7b',1,'eddaThreshold']]], + ['thresholdbylower',['ThresholdByLower',['../classeddaThreshold.html#a02a56991ed507396e580e609de2a17ef',1,'eddaThreshold']]], + ['thresholdbyupper',['ThresholdByUpper',['../classeddaThreshold.html#abb1baf518917bf90f6666a0c309fd165',1,'eddaThreshold']]], + ['transpose',['transpose',['../classedda_1_1MATRIX3.html#ac4c24f4b918f08d555f7dda168d5ef8a',1,'edda::MATRIX3']]], + ['trilerp',['triLerp',['../namespaceedda.html#ae9734f47a623e06d20c371e010fe761e',1,'edda']]], + ['tuple',['Tuple',['../classedda_1_1Tuple.html#a0474ff57c17e224def4b2ee2b2329e6d',1,'edda::Tuple::Tuple()'],['../classedda_1_1Tuple.html#a5ecb3290fd84a8f1b53ccb58371e7be9',1,'edda::Tuple::Tuple(const T &scalar)'],['../classedda_1_1Tuple.html#a69b581682e5c6fbe1930e5cd6ab647b1',1,'edda::Tuple::Tuple(const T *init)'],['../classedda_1_1Tuple.html#a60852e69ca7d6eb98283ea383cc5d0a8',1,'edda::Tuple::Tuple(const Tuple< U, N > &v)']]], + ['tuple2',['Tuple2',['../structedda_1_1Tuple2.html#a4b573e5df5a0dc3663e70e2f42fcdb55',1,'edda::Tuple2::Tuple2()'],['../structedda_1_1Tuple2.html#ac1af7bd6b37f5a601988f690527a05f2',1,'edda::Tuple2::Tuple2(const T &x, const T &y)']]], + ['tuple3',['Tuple3',['../structedda_1_1Tuple3.html#af8f5cf58b185b2b2ef9d38161c518170',1,'edda::Tuple3::Tuple3()'],['../structedda_1_1Tuple3.html#a6cf42eb68b87ded412dd288ae5350e64',1,'edda::Tuple3::Tuple3(const T &x, const T &y, const T &z)']]], + ['tuple4',['Tuple4',['../structedda_1_1Tuple4.html#a518d7b0aed299710413edde9bfd2b792',1,'edda::Tuple4::Tuple4()'],['../structedda_1_1Tuple4.html#af0b36d1663eee09908560f9bfe9dce47',1,'edda::Tuple4::Tuple4(const T &x, const T &y, const T &z, const T &w)']]] ]; diff --git a/html/search/functions_12.html b/html/search/functions_12.html index 1ab0742..cacca93 100644 --- a/html/search/functions_12.html +++ b/html/search/functions_12.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_12.js b/html/search/functions_12.js index 073b473..69896d5 100644 --- a/html/search/functions_12.js +++ b/html/search/functions_12.js @@ -1,16 +1,7 @@ var searchData= [ - ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html#a92fa2ae6b8f75d7374489b95c91e658f',1,'edda::dist::Variant::Variant()'],['../structedda_1_1dist_1_1Variant.html#ac7a5508f29008494bf6379cfd0340d56',1,'edda::dist::Variant::Variant(const Real &obj)'],['../structedda_1_1dist_1_1Variant.html#ae651a2f3d881e8b4bce44e87d845f0db',1,'edda::dist::Variant::Variant(const Gaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#a529a0b831d2a209e139f320dcb345d9c',1,'edda::dist::Variant::Variant(const GaussianMixture< GMMs > &obj)']]], - ['vector',['Vector',['../classedda_1_1Vector.html#a290b3bf675e9161100d95e534b8f2485',1,'edda::Vector::Vector()'],['../classedda_1_1Vector.html#ae88490122ef6783e0b0c94e1ae072cf6',1,'edda::Vector::Vector(const Vector< U, N > &v)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#acdc0c2c4c4f9c6acbe526123985a95fe',1,'edda::Vector< Real, 3 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ae63026d9b882a70c2a6ca180697ba0a3',1,'edda::Vector< Real, 3 >::Vector(Real x, Real y, Real z)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a9df48f68f5dc29b71e94eacb03bd1303',1,'edda::Vector< Real, 3 >::Vector(const Vector< U, 3 > &v)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a4bb70f52f6b368bfa8b7e1fb60426986',1,'edda::Vector< Real, 4 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a8edebd979704903563a042fcee1380c0',1,'edda::Vector< Real, 4 >::Vector(Real x, Real y, Real z, Real w)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aa35a7dbcb5ac5b23f766ad5ec36ca5df',1,'edda::Vector< Real, 4 >::Vector(const Vector< U, 4 > &v)']]], - ['vectorarray',['VectorArray',['../classedda_1_1VectorArray.html#ac7bd8b62e222429dd8b9f1e297148805',1,'edda::VectorArray']]], - ['vtkbooleanmacro',['vtkBooleanMacro',['../classvtkCompositeUncertainIsocontour.html#aa605cc3076e76aeb4c21669e03bfea9c',1,'vtkCompositeUncertainIsocontour::vtkBooleanMacro()'],['../classeddaRandomProbeFilter.html#a632a9adcdd3c22cdaa0284a3b1493318',1,'eddaRandomProbeFilter::vtkBooleanMacro(SpatialMatch, int) vtkGetObjectMacro(ValidPoints'],['../classeddaRandomProbeFilter.html#ae7b08929533571ac659a611b2ee7cc19',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassCellArrays, int) vtkGetMacro(PassCellArrays'],['../classeddaRandomProbeFilter.html#a97616b6d4dcdb3c4cfcb4d1144d22b85',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassFieldArrays, int) vtkGetMacro(PassFieldArrays']]], - ['vtkcompositedataprobefilter',['vtkCompositeDataProbeFilter',['../classvtkCompositeUncertainIsocontour.html#a9c7d4a900e2d2b984077c8ada5b07edb',1,'vtkCompositeUncertainIsocontour']]], - ['vtkeddareader',['vtkEddaReader',['../classvtkEddaReader.html#ac8abd3c2e8d04a1aafe9acb9f0dee998',1,'vtkEddaReader']]], - ['vtkgetmacro',['vtkGetMacro',['../classvtkCompositeUncertainIsocontour.html#a4052cc17cb081c0ae68655c81181ca52',1,'vtkCompositeUncertainIsocontour::vtkGetMacro(PassPartialArrays, bool)'],['../classvtkCompositeUncertainIsocontour.html#ac45fb0c12f79e8a4e3a72ff2b8a9c605',1,'vtkCompositeUncertainIsocontour::vtkGetMacro(Isov, double)'],['../classeddaRandomProbeFilter.html#a4619b8633f69191c2f57be11d353e332',1,'eddaRandomProbeFilter::vtkGetMacro()'],['../classeddaThreshold.html#a2cfe4bf36cbcaff6f5066ef3f5898d7e',1,'eddaThreshold::vtkGetMacro(UpperThreshold, double) vtkSetMacro(UpperThreshold'],['../classeddaThreshold.html#a4a79ea1388a0d06fce23a8d0e236dc5a',1,'eddaThreshold::vtkGetMacro(LowerThreshold, double) vtkSetMacro(LowerThreshold'],['../classeddaUncertainIsocontour.html#a95f2f24b18e0e8c82d9c8acff99ce76b',1,'eddaUncertainIsocontour::vtkGetMacro()']]], - ['vtkgetstringmacro',['vtkGetStringMacro',['../classvtkEddaReader.html#a01c9e81f8b386422644567b8c62e70c3',1,'vtkEddaReader']]], - ['vtksamplingarray',['vtkSamplingArray',['../classvtkSamplingArray.html#ae6c707c064992edff053d21ae38d6287',1,'vtkSamplingArray']]], - ['vtksetmacro',['vtkSetMacro',['../classvtkCompositeUncertainIsocontour.html#a9f8797e0df307fdcdfb3ff5d74eb5319',1,'vtkCompositeUncertainIsocontour::vtkSetMacro(PassPartialArrays, bool)'],['../classvtkCompositeUncertainIsocontour.html#adfbe7e9d5b105a5226a866e4fdd4894f',1,'vtkCompositeUncertainIsocontour::vtkSetMacro(Isov, double)'],['../classeddaRandomProbeFilter.html#a2d304675305857537943e50e8976ceed',1,'eddaRandomProbeFilter::vtkSetMacro(SpatialMatch, int) vtkGetMacro(SpatialMatch'],['../classeddaRandomProbeFilter.html#a8c635957d28f76e3a39c3c710a1bdb74',1,'eddaRandomProbeFilter::vtkSetMacro(PassPointArrays, int) vtkBooleanMacro(PassPointArrays'],['../classeddaRandomProbeFilter.html#abd7abdc9a670f285cdc24f276f57cff4',1,'eddaRandomProbeFilter::vtkSetMacro(Tolerance, double) vtkGetMacro(Tolerance'],['../classeddaRandomProbeFilter.html#a9377fb7f3778182774721ca646ae69cb',1,'eddaRandomProbeFilter::vtkSetMacro(ComputeTolerance, bool) vtkBooleanMacro(ComputeTolerance']]], - ['vtksetstringmacro',['vtkSetStringMacro',['../classvtkEddaReader.html#a00e16616071a982026ff30c12722909e',1,'vtkEddaReader::vtkSetStringMacro()'],['../classeddaRandomProbeFilter.html#adbb19457e8f2f3a68519b3649037932d',1,'eddaRandomProbeFilter::vtkSetStringMacro()']]], - ['vtkstandardnewmacro',['vtkStandardNewMacro',['../vtkCompositeUncertainIsocontour_8cpp.html#a80c998a5f6dbb4f2374fc8d4ffa4a942',1,'vtkStandardNewMacro(vtkCompositeUncertainIsocontour): vtkCompositeUncertainIsocontour.cpp'],['../vtkEddaReader_8cpp.html#a60823a07820ad1c8f564b40b1e8cf412',1,'vtkStandardNewMacro(vtkEddaReader): vtkEddaReader.cpp'],['../vtkSamplingArray_8cpp.html#ac25aead90d777cdfe642636205d138b9',1,'vtkStandardNewMacro(vtkSamplingArray): vtkSamplingArray.cpp'],['../eddaRandomProbeFilter_8cpp.html#a0a1074a80804b83f743eb0f675b4c85e',1,'vtkStandardNewMacro(eddaRandomProbeFilter) using namespace edda: eddaRandomProbeFilter.cpp'],['../eddaRandomSampleField_8cpp.html#ae9a8045eb759c1a45611a08def30a823',1,'vtkStandardNewMacro(eddaRandomSampleField) eddaRandomSampleField: eddaRandomSampleField.cpp'],['../eddaSamplingArray_8cpp.html#adf7058b06c210d0698668f31d52eadb9',1,'vtkStandardNewMacro(eddaSamplingArray): eddaSamplingArray.cpp'],['../eddaThreshold_8cpp.html#ab5fbf37bee4392a739755137825c30b3',1,'vtkStandardNewMacro(eddaThreshold) eddaThreshold: eddaThreshold.cpp'],['../eddaUncertainIsocontour_8cpp.html#af93440a47bf1832f11ac6e7d30d53c4e',1,'vtkStandardNewMacro(eddaUncertainIsocontour) eddaUncertainIsocontour: eddaUncertainIsocontour.cpp']]], - ['vtktypemacro',['vtkTypeMacro',['../classvtkCompositeUncertainIsocontour.html#a9f25abd34ce9ff5d5174e38d8a014b21',1,'vtkCompositeUncertainIsocontour::vtkTypeMacro()'],['../classvtkEddaReader.html#a2221aa8c7ab4ae1cd74d4015432db066',1,'vtkEddaReader::vtkTypeMacro()'],['../classvtkSamplingArray.html#a0b2f221fc0f1dbc874238b24b91849c4',1,'vtkSamplingArray::vtkTypeMacro()'],['../classeddaRandomProbeFilter.html#a029be5a10e6c5717bacc393095cd3be8',1,'eddaRandomProbeFilter::vtkTypeMacro()'],['../classeddaRandomSampleField.html#a7d1f46f9e336cace7a8b63a50683d8b6',1,'eddaRandomSampleField::vtkTypeMacro()'],['../classeddaSamplingArray.html#afca484cd5b215ae296be7583f0349714',1,'eddaSamplingArray::vtkTypeMacro()'],['../classeddaThreshold.html#a10f5f73d5d06ddb61f395b0118ade35b',1,'eddaThreshold::vtkTypeMacro()'],['../classeddaUncertainIsocontour.html#ae28f67fcb8397bb23bf05be7e94930ef',1,'eddaUncertainIsocontour::vtkTypeMacro()']]] + ['up_5fcells',['up_cells',['../classedda_1_1CurvilinearGrid.html#a01a7ae4e58960db32347e7dff2606b9c',1,'edda::CurvilinearGrid']]], + ['update_5fclass_5fprob',['update_class_prob',['../namespaceedda.html#a17578e6edb597deb5437a8ef81a0368c',1,'edda']]], + ['update_5fparameters',['update_parameters',['../namespaceedda.html#a0277b5151ce74008ef5a91e0f3c70937',1,'edda']]], + ['updateseeds',['updateSeeds',['../streamlineMonteCarlo_8cpp.html#a96cd5e1dc934297dbf710c04b1408e2c',1,'streamlineMonteCarlo.cpp']]] ]; diff --git a/html/search/functions_13.html b/html/search/functions_13.html index 724f5c1..42d3e0c 100644 --- a/html/search/functions_13.html +++ b/html/search/functions_13.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_13.js b/html/search/functions_13.js index 9f9f99e..2e5b683 100644 --- a/html/search/functions_13.js +++ b/html/search/functions_13.js @@ -1,7 +1,14 @@ var searchData= [ - ['w',['w',['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0f6853b9fab936215074e7a1b880b2d6',1,'edda::Vector< Real, 4 >']]], - ['write_5fnrrd_5f3d',['write_nrrd_3d',['../namespaceedda.html#aa7d9a6036df168e12c9274b3c867b196',1,'edda']]], - ['writerawnrrdfile',['writeRawNrrdFile',['../namespaceedda.html#a84955479cafdd0ef664aac47680dfb74',1,'edda']]], - ['writevoidpointer',['WriteVoidPointer',['../classvtkSamplingArray.html#a5a9b6f6c5d13d67f508617cf3fb2f5af',1,'vtkSamplingArray::WriteVoidPointer()'],['../classeddaSamplingArray.html#a57dd19cefe182bb6846b618b14d5bcd9',1,'eddaSamplingArray::WriteVoidPointer()']]] + ['valuetobinsindex',['valueToBinsIndex',['../classedda_1_1dist_1_1Histogram.html#a61c88146474a8452f3ae15a7e7a483b1',1,'edda::dist::Histogram']]], + ['variant',['Variant',['../structedda_1_1dist_1_1Variant.html#a92fa2ae6b8f75d7374489b95c91e658f',1,'edda::dist::Variant::Variant()'],['../structedda_1_1dist_1_1Variant.html#ac7a5508f29008494bf6379cfd0340d56',1,'edda::dist::Variant::Variant(const Real &obj)'],['../structedda_1_1dist_1_1Variant.html#ae651a2f3d881e8b4bce44e87d845f0db',1,'edda::dist::Variant::Variant(const Gaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#af5f0e31d762593b7411a95cd8c61a7e7',1,'edda::dist::Variant::Variant(const GaussianMixture< 2 > &obj)'],['../structedda_1_1dist_1_1Variant.html#a1f4f390836631812dcc3a23ab2c568d3',1,'edda::dist::Variant::Variant(const GaussianMixture< 3 > &obj)'],['../structedda_1_1dist_1_1Variant.html#ab858de5210fa7b9d7a64a905f2a80d71',1,'edda::dist::Variant::Variant(const GaussianMixture< 4 > &obj)'],['../structedda_1_1dist_1_1Variant.html#a8ee8d5d2ba5a0bf3e4ff1c168c19f061',1,'edda::dist::Variant::Variant(const GaussianMixture< 5 > &obj)'],['../structedda_1_1dist_1_1Variant.html#ad89101e1c92c448627bfc4ec3f53c21a',1,'edda::dist::Variant::Variant(const Histogram &obj)'],['../structedda_1_1dist_1_1Variant.html#a411b6acd9be0368d020e497d01404fe7',1,'edda::dist::Variant::Variant(const JointGaussian &obj)'],['../structedda_1_1dist_1_1Variant.html#a5494ba6c0d43e87e82b9b10aacb2495d',1,'edda::dist::Variant::Variant(const JointHistogram &obj)']]], + ['vecdistrmodeler',['VecDistrModeler',['../classedda_1_1VecDistrModeler.html#ad6917349fd9373b88e338413e146cccf',1,'edda::VecDistrModeler']]], + ['vector',['Vector',['../classedda_1_1Vector.html#a290b3bf675e9161100d95e534b8f2485',1,'edda::Vector::Vector()'],['../classedda_1_1Vector.html#ae88490122ef6783e0b0c94e1ae072cf6',1,'edda::Vector::Vector(const Vector< U, N > &v)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#acdc0c2c4c4f9c6acbe526123985a95fe',1,'edda::Vector< Real, 3 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ae63026d9b882a70c2a6ca180697ba0a3',1,'edda::Vector< Real, 3 >::Vector(Real x, Real y, Real z)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a9df48f68f5dc29b71e94eacb03bd1303',1,'edda::Vector< Real, 3 >::Vector(const Vector< U, 3 > &v)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a4bb70f52f6b368bfa8b7e1fb60426986',1,'edda::Vector< Real, 4 >::Vector()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a8edebd979704903563a042fcee1380c0',1,'edda::Vector< Real, 4 >::Vector(Real x, Real y, Real z, Real w)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aa35a7dbcb5ac5b23f766ad5ec36ca5df',1,'edda::Vector< Real, 4 >::Vector(const Vector< U, 4 > &v)']]], + ['vectordistrarray',['VectorDistrArray',['../classedda_1_1VectorDistrArray.html#a2329c0bdd775bdfe2cfaaf3fecc2911b',1,'edda::VectorDistrArray']]], + ['vtkbooleanmacro',['vtkBooleanMacro',['../classeddaRandomProbeFilter.html#a632a9adcdd3c22cdaa0284a3b1493318',1,'eddaRandomProbeFilter::vtkBooleanMacro(SpatialMatch, int) vtkGetObjectMacro(ValidPoints'],['../classeddaRandomProbeFilter.html#ae7b08929533571ac659a611b2ee7cc19',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassCellArrays, int) vtkGetMacro(PassCellArrays'],['../classeddaRandomProbeFilter.html#a97616b6d4dcdb3c4cfcb4d1144d22b85',1,'eddaRandomProbeFilter::vtkBooleanMacro(PassFieldArrays, int) vtkGetMacro(PassFieldArrays']]], + ['vtkgetmacro',['vtkGetMacro',['../classeddaRandomProbeFilter.html#a4619b8633f69191c2f57be11d353e332',1,'eddaRandomProbeFilter::vtkGetMacro()'],['../classeddaThreshold.html#a2cfe4bf36cbcaff6f5066ef3f5898d7e',1,'eddaThreshold::vtkGetMacro(UpperThreshold, double) vtkSetMacro(UpperThreshold'],['../classeddaThreshold.html#a4a79ea1388a0d06fce23a8d0e236dc5a',1,'eddaThreshold::vtkGetMacro(LowerThreshold, double) vtkSetMacro(LowerThreshold'],['../classeddaUncertainIsocontour.html#a95f2f24b18e0e8c82d9c8acff99ce76b',1,'eddaUncertainIsocontour::vtkGetMacro()']]], + ['vtksetmacro',['vtkSetMacro',['../classeddaRandomProbeFilter.html#a2d304675305857537943e50e8976ceed',1,'eddaRandomProbeFilter::vtkSetMacro(SpatialMatch, int) vtkGetMacro(SpatialMatch'],['../classeddaRandomProbeFilter.html#a8c635957d28f76e3a39c3c710a1bdb74',1,'eddaRandomProbeFilter::vtkSetMacro(PassPointArrays, int) vtkBooleanMacro(PassPointArrays'],['../classeddaRandomProbeFilter.html#abd7abdc9a670f285cdc24f276f57cff4',1,'eddaRandomProbeFilter::vtkSetMacro(Tolerance, double) vtkGetMacro(Tolerance'],['../classeddaRandomProbeFilter.html#a9377fb7f3778182774721ca646ae69cb',1,'eddaRandomProbeFilter::vtkSetMacro(ComputeTolerance, bool) vtkBooleanMacro(ComputeTolerance']]], + ['vtksetstringmacro',['vtkSetStringMacro',['../classeddaRandomProbeFilter.html#adbb19457e8f2f3a68519b3649037932d',1,'eddaRandomProbeFilter']]], + ['vtkstandardnewmacro',['vtkStandardNewMacro',['../eddaRandomProbeFilter_8cpp.html#a0a1074a80804b83f743eb0f675b4c85e',1,'vtkStandardNewMacro(eddaRandomProbeFilter) using namespace edda: eddaRandomProbeFilter.cpp'],['../eddaRandomSampleField_8cpp.html#ae9a8045eb759c1a45611a08def30a823',1,'vtkStandardNewMacro(eddaRandomSampleField) eddaRandomSampleField: eddaRandomSampleField.cpp'],['../eddaSamplingArray_8cpp.html#adf7058b06c210d0698668f31d52eadb9',1,'vtkStandardNewMacro(eddaSamplingArray): eddaSamplingArray.cpp'],['../eddaThreshold_8cpp.html#ab5fbf37bee4392a739755137825c30b3',1,'vtkStandardNewMacro(eddaThreshold) eddaThreshold: eddaThreshold.cpp'],['../eddaUncertainIsocontour_8cpp.html#af93440a47bf1832f11ac6e7d30d53c4e',1,'vtkStandardNewMacro(eddaUncertainIsocontour) eddaUncertainIsocontour: eddaUncertainIsocontour.cpp']]], + ['vtktypemacro',['vtkTypeMacro',['../classeddaRandomProbeFilter.html#a029be5a10e6c5717bacc393095cd3be8',1,'eddaRandomProbeFilter::vtkTypeMacro()'],['../classeddaRandomSampleField.html#a7d1f46f9e336cace7a8b63a50683d8b6',1,'eddaRandomSampleField::vtkTypeMacro()'],['../classeddaSamplingArray.html#afca484cd5b215ae296be7583f0349714',1,'eddaSamplingArray::vtkTypeMacro()'],['../classeddaThreshold.html#a10f5f73d5d06ddb61f395b0118ade35b',1,'eddaThreshold::vtkTypeMacro()'],['../classeddaUncertainIsocontour.html#ae28f67fcb8397bb23bf05be7e94930ef',1,'eddaUncertainIsocontour::vtkTypeMacro()']]] ]; diff --git a/html/search/functions_14.html b/html/search/functions_14.html index 396906b..054643c 100644 --- a/html/search/functions_14.html +++ b/html/search/functions_14.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_14.js b/html/search/functions_14.js index 839e87c..6827150 100644 --- a/html/search/functions_14.js +++ b/html/search/functions_14.js @@ -1,6 +1,16 @@ var searchData= [ - ['x',['x',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a0d03b796a432f02139bd75511c3058a8',1,'edda::Vector< Real, 3 >::x()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ad049d4083f2e9f921e5750d111bdb405',1,'edda::Vector< Real, 4 >::x()']]], - ['xcelldim',['xcelldim',['../classedda_1_1CartesianGrid.html#ab177745dd86d88eb84d67500748e2c00',1,'edda::CartesianGrid']]], - ['xdim',['xdim',['../classedda_1_1CartesianGrid.html#aeb7c6fb8918008f17898bbffd2afdb8b',1,'edda::CartesianGrid']]] + ['w',['w',['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a7ac0955f0bf91e451e907807b1341dd2',1,'edda::Vector< Real, 4 >']]], + ['walk_5fon_5fx_5fboundary',['walk_on_x_boundary',['../classedda_1_1CurvilinearGrid.html#a6038ba308e31d9efa551dcf24ed2e629',1,'edda::CurvilinearGrid']]], + ['walk_5fon_5fy_5fboundary',['walk_on_y_boundary',['../classedda_1_1CurvilinearGrid.html#a84cf9f0447e45af0081effb7544cd716',1,'edda::CurvilinearGrid']]], + ['walk_5fon_5fz_5fboundary',['walk_on_z_boundary',['../classedda_1_1CurvilinearGrid.html#a74af8698703ccc3b1ecdf7498adabb6f',1,'edda::CurvilinearGrid']]], + ['write_5fnrrd_5f3d',['write_nrrd_3d',['../namespaceedda.html#a16acb70ca142da596ce521f7f7e88b48',1,'edda']]], + ['writeeddadataset',['writeEddaDataset',['../namespaceedda.html#ae4df2b63adb378e5ec4d5faea44fb276',1,'edda::writeEddaDataset(shared_ptr< Dataset< VECTOR3 > > dataset, const string &edda_file)'],['../namespaceedda.html#ad2590515cca348f64cf15b3852c52e12',1,'edda::writeEddaDataset(shared_ptr< Dataset< Real > > dataset, const string &edda_file)'],['../namespaceedda.html#a3aa48f7da7ce22160f2b64385ab95083',1,'edda::writeEddaDataset(std::shared_ptr< Dataset< Real > >, const std::string &edda_file)'],['../namespaceedda.html#ac32ce7972112fa2097a809a8d80b9f15',1,'edda::writeEddaDataset(std::shared_ptr< Dataset< VECTOR3 > >, const std::string &edda_file)']]], + ['writeeddadatasettemplate',['writeEddaDatasetTemplate',['../namespaceedda.html#af85dcaf04d30ad3f92f1ce40363deea4',1,'edda']]], + ['writeeddavtkdataset',['writeEddaVtkDataset',['../namespaceedda.html#ac26c1973bdecea1b5e4dfd63e61e814f',1,'edda::writeEddaVtkDataset(shared_ptr< Dataset< Real > > dataset, const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#af6740e072ccbb643ef565257d2078740',1,'edda::writeEddaVtkDataset(std::shared_ptr< Dataset< Real > >, const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['writegmmarrays',['writeGmmArrays',['../namespaceedda.html#a03aad037e96b7411d05ab26d952a015a',1,'edda']]], + ['writehistoarrays',['writeHistoArrays',['../namespaceedda.html#aa06eac99c4d7bccd193695b0d5b37aad',1,'edda']]], + ['writeimage',['writeImage',['../structBMPImage.html#a0f952cefc332e3f040d86199ba0a2aac',1,'BMPImage']]], + ['writetovtk',['writeToVTK',['../classedda_1_1DistributionModeler.html#a943931a00c79d6ede792c6e21ebb06f3',1,'edda::DistributionModeler']]], + ['writevoidpointer',['WriteVoidPointer',['../classeddaSamplingArray.html#a57dd19cefe182bb6846b618b14d5bcd9',1,'eddaSamplingArray']]] ]; diff --git a/html/search/functions_15.html b/html/search/functions_15.html index 2dee32b..e267c40 100644 --- a/html/search/functions_15.html +++ b/html/search/functions_15.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_15.js b/html/search/functions_15.js index 99c2d8d..858a887 100644 --- a/html/search/functions_15.js +++ b/html/search/functions_15.js @@ -1,6 +1,6 @@ var searchData= [ - ['y',['y',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#aa8603bd9ae2ed6741d6fe1f10464c4e9',1,'edda::Vector< Real, 3 >::y()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a5613cb96521f879c3be79b022caaf760',1,'edda::Vector< Real, 4 >::y()']]], - ['ycelldim',['ycelldim',['../classedda_1_1CartesianGrid.html#a260d4e7f4510c77bfc9341707bf8e341',1,'edda::CartesianGrid']]], - ['ydim',['ydim',['../classedda_1_1CartesianGrid.html#ab018ac1a44d18def0a02d9b1691e4a06',1,'edda::CartesianGrid']]] + ['x',['x',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a119f5b1551d2abfd3b5109abe4c0f1eb',1,'edda::Vector< Real, 3 >::x()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a3eede0379e7658c343b2dfc09463fdda',1,'edda::Vector< Real, 4 >::x()']]], + ['xcelldim',['xcelldim',['../classedda_1_1CartesianGrid.html#ab177745dd86d88eb84d67500748e2c00',1,'edda::CartesianGrid']]], + ['xdim',['xdim',['../classedda_1_1CartesianGrid.html#aeb7c6fb8918008f17898bbffd2afdb8b',1,'edda::CartesianGrid']]] ]; diff --git a/html/search/functions_16.html b/html/search/functions_16.html index 55d2cda..f72517f 100644 --- a/html/search/functions_16.html +++ b/html/search/functions_16.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_16.js b/html/search/functions_16.js index 41b1e2b..9f05c36 100644 --- a/html/search/functions_16.js +++ b/html/search/functions_16.js @@ -1,6 +1,6 @@ var searchData= [ - ['z',['z',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a76b6cf67e0290df95229981de908f65b',1,'edda::Vector< Real, 3 >::z()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a672e9040328cb8ee9ced09dde2970819',1,'edda::Vector< Real, 4 >::z()']]], - ['zcelldim',['zcelldim',['../classedda_1_1CartesianGrid.html#ab519af80b6c046f434155d66f39e0621',1,'edda::CartesianGrid']]], - ['zdim',['zdim',['../classedda_1_1CartesianGrid.html#ac41b35c859961fbd6a087b42ec31dd26',1,'edda::CartesianGrid']]] + ['y',['y',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a4e4a241273c2a448c8de8f41730c4c38',1,'edda::Vector< Real, 3 >::y()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a47ff40206ce06035d5b6079c0c2fb754',1,'edda::Vector< Real, 4 >::y()']]], + ['ycelldim',['ycelldim',['../classedda_1_1CartesianGrid.html#a260d4e7f4510c77bfc9341707bf8e341',1,'edda::CartesianGrid']]], + ['ydim',['ydim',['../classedda_1_1CartesianGrid.html#ab018ac1a44d18def0a02d9b1691e4a06',1,'edda::CartesianGrid']]] ]; diff --git a/html/search/functions_17.html b/html/search/functions_17.html index 6e7bfab..2615d53 100644 --- a/html/search/functions_17.html +++ b/html/search/functions_17.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_17.js b/html/search/functions_17.js index 702caa5..ab13ea0 100644 --- a/html/search/functions_17.js +++ b/html/search/functions_17.js @@ -1,21 +1,7 @@ var searchData= [ - ['_7eabstractdataarray',['~AbstractDataArray',['../classedda_1_1AbstractDataArray.html#aa83756aa71cb59e3537e02795b8c8810',1,'edda::AbstractDataArray']]], - ['_7ecartesiangrid',['~CartesianGrid',['../classedda_1_1CartesianGrid.html#a2fdf7940fc29d204446d0d6480ef4c10',1,'edda::CartesianGrid']]], - ['_7edatasamplingarray',['~DataSamplingArray',['../classedda_1_1DataSamplingArray.html#a48ff8632fb766faafb8fcfcd12a73636',1,'edda::DataSamplingArray']]], - ['_7edataset',['~Dataset',['../classedda_1_1Dataset.html#a5173045ab90bbe2caa946c095a758d22',1,'edda::Dataset']]], - ['_7eeddarandomprobefilter',['~eddaRandomProbeFilter',['../classeddaRandomProbeFilter.html#aa0e3cd815bf24e3396bac4b6f49a41a9',1,'eddaRandomProbeFilter']]], - ['_7eeddarandomsamplefield',['~eddaRandomSampleField',['../classeddaRandomSampleField.html#ae90286e2863e54f07bce0eb0edf7bc48',1,'eddaRandomSampleField']]], - ['_7eeddasamplingarray',['~eddaSamplingArray',['../classeddaSamplingArray.html#a0dbdad926057f5eb28adaee958f9e540',1,'eddaSamplingArray']]], - ['_7eeddathreshold',['~eddaThreshold',['../classeddaThreshold.html#a2c91c92373ffd672422781819ea4342d',1,'eddaThreshold']]], - ['_7eeddauncertainisocontour',['~eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#af4cfdab36d73c447476db07036452231',1,'eddaUncertainIsocontour']]], - ['_7egmmvtkdataarray',['~GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a1316dfe2b3ac642ed6cd718619af4587',1,'edda::GmmVtkDataArray']]], - ['_7egrid',['~Grid',['../classedda_1_1Grid.html#a72f84115bb6a22fa18149e2c46141bed',1,'edda::Grid']]], - ['_7endarray',['~NdArray',['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray::~NdArray()'],['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray::~NdArray()']]], - ['_7eregularcartesiangrid',['~RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a07680966dceebd2c70513e483058ec48',1,'edda::RegularCartesianGrid']]], - ['_7escalararray',['~ScalarArray',['../classedda_1_1ScalarArray.html#afbe5f3d3c5372d129ed274d3f377c790',1,'edda::ScalarArray']]], - ['_7evectorarray',['~VectorArray',['../classedda_1_1VectorArray.html#a70d077e16628af4ad2af2f517938b393',1,'edda::VectorArray']]], - ['_7evtkcompositedataprobefilter',['~vtkCompositeDataProbeFilter',['../classvtkCompositeUncertainIsocontour.html#a27995e83da016c5383664ee72f81ca9f',1,'vtkCompositeUncertainIsocontour']]], - ['_7evtkeddareader',['~vtkEddaReader',['../classvtkEddaReader.html#a81c16719feb51cbb9d9b2c16042f47a5',1,'vtkEddaReader']]], - ['_7evtksamplingarray',['~vtkSamplingArray',['../classvtkSamplingArray.html#ac4a08f30d4eb37854a6079a0105209dc',1,'vtkSamplingArray']]] + ['z',['z',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#aecb4ffd5dba9a6e926670948552f8973',1,'edda::Vector< Real, 3 >::z()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6bfa739f8915f0c72267869cae15777a',1,'edda::Vector< Real, 4 >::z()']]], + ['zcelldim',['zcelldim',['../classedda_1_1CartesianGrid.html#ab519af80b6c046f434155d66f39e0621',1,'edda::CartesianGrid']]], + ['zdim',['zdim',['../classedda_1_1CartesianGrid.html#ac41b35c859961fbd6a087b42ec31dd26',1,'edda::CartesianGrid']]], + ['zero',['Zero',['../classedda_1_1Vector.html#aed7f478dfd4b68a56a7e09c883e79ace',1,'edda::Vector::Zero()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a86df4084cdc8d3a7206b73cd181119df',1,'edda::Vector< Real, 3 >::Zero()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6b0253f857662f34adbc7710fa7dbec1',1,'edda::Vector< Real, 4 >::Zero()']]] ]; diff --git a/html/search/functions_18.html b/html/search/functions_18.html new file mode 100644 index 0000000..84c65ca --- /dev/null +++ b/html/search/functions_18.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/functions_18.js b/html/search/functions_18.js new file mode 100644 index 0000000..e007cca --- /dev/null +++ b/html/search/functions_18.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['_7ecartesiangrid',['~CartesianGrid',['../classedda_1_1CartesianGrid.html#a2fdf7940fc29d204446d0d6480ef4c10',1,'edda::CartesianGrid']]], + ['_7ecurvilineargrid',['~CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html#ab3e32ac4de956bebafc30247477732f1',1,'edda::CurvilinearGrid']]], + ['_7edataset',['~Dataset',['../classedda_1_1Dataset.html#a5173045ab90bbe2caa946c095a758d22',1,'edda::Dataset']]], + ['_7edistrarray',['~DistrArray',['../classedda_1_1DistrArray.html#a07c587c29d37dceb1d589d68af6c4de5',1,'edda::DistrArray']]], + ['_7eeddarandomprobefilter',['~eddaRandomProbeFilter',['../classeddaRandomProbeFilter.html#aa0e3cd815bf24e3396bac4b6f49a41a9',1,'eddaRandomProbeFilter']]], + ['_7eeddarandomsamplefield',['~eddaRandomSampleField',['../classeddaRandomSampleField.html#ae90286e2863e54f07bce0eb0edf7bc48',1,'eddaRandomSampleField']]], + ['_7eeddasamplingarray',['~eddaSamplingArray',['../classeddaSamplingArray.html#a0dbdad926057f5eb28adaee958f9e540',1,'eddaSamplingArray']]], + ['_7eeddathreshold',['~eddaThreshold',['../classeddaThreshold.html#a2c91c92373ffd672422781819ea4342d',1,'eddaThreshold']]], + ['_7eeddauncertainisocontour',['~eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#af4cfdab36d73c447476db07036452231',1,'eddaUncertainIsocontour']]], + ['_7egmmvtkdataarray',['~GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a1316dfe2b3ac642ed6cd718619af4587',1,'edda::GmmVtkDataArray']]], + ['_7egrid',['~Grid',['../classedda_1_1Grid.html#a72f84115bb6a22fa18149e2c46141bed',1,'edda::Grid']]], + ['_7ejointdistrarray',['~JointDistrArray',['../classedda_1_1JointDistrArray.html#ac68b6a97c45088ea4a1e5dfa0c70f065',1,'edda::JointDistrArray']]], + ['_7endarray',['~NdArray',['../classedda_1_1NdArray.html#a44cc9e0b42ae2534c2845be9bac54243',1,'edda::NdArray']]], + ['_7eregularcartesiangrid',['~RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a07680966dceebd2c70513e483058ec48',1,'edda::RegularCartesianGrid']]], + ['_7escalardistrarray',['~ScalarDistrArray',['../classedda_1_1ScalarDistrArray.html#a4f9ce07472da7b0befdbe9272b6b9d33',1,'edda::ScalarDistrArray']]], + ['_7evectordistrarray',['~VectorDistrArray',['../classedda_1_1VectorDistrArray.html#a6d2f1ca030272b3dd08da422f7d21ae6',1,'edda::VectorDistrArray']]] +]; diff --git a/html/search/functions_2.html b/html/search/functions_2.html index 78be8b4..c21af16 100644 --- a/html/search/functions_2.html +++ b/html/search/functions_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_2.js b/html/search/functions_2.js index ad9742c..7f06337 100644 --- a/html/search/functions_2.js +++ b/html/search/functions_2.js @@ -1,10 +1,24 @@ var searchData= [ - ['baryinterp',['baryInterp',['../namespaceedda.html#a23a4a142a4ba07fb1318645250902c4e',1,'edda']]], - ['begin',['begin',['../classedda_1_1NdArray.html#a686014415d0469e79cac5164b300f2ac',1,'edda::NdArray::begin()'],['../classedda_1_1GmmArray.html#acb64ace250f0432e5cbc7e04a5cebc21',1,'edda::GmmArray::begin()'],['../classedda_1_1NdArray.html#a686014415d0469e79cac5164b300f2ac',1,'edda::NdArray::begin()']]], - ['bilerp',['biLerp',['../namespaceedda.html#a923e527ea437795f77c2adda560f66ed',1,'edda']]], - ['boundary',['boundary',['../classedda_1_1Grid.html#a3cd1a33c83c842a7f4bc4d762ceef6d7',1,'edda::Grid::boundary()'],['../classedda_1_1CartesianGrid.html#a1d097420ee875e5843c0a2d74574a782',1,'edda::CartesianGrid::boundary()'],['../classedda_1_1RegularCartesianGrid.html#a010a1b53e23329d5346a24591d397867',1,'edda::RegularCartesianGrid::boundary()']]], - ['boundaryintersection',['boundaryIntersection',['../classedda_1_1Grid.html#ac228595cf39fff8e5230f53a5b76687a',1,'edda::Grid::boundaryIntersection()'],['../classedda_1_1CartesianGrid.html#a387121fae344bb70e0585c62193c161f',1,'edda::CartesianGrid::boundaryIntersection()'],['../classedda_1_1RegularCartesianGrid.html#a13bdc8d580c22e3f00dea4d5d2fdb4d7',1,'edda::RegularCartesianGrid::boundaryIntersection()']]], - ['box_5fmuller',['box_muller',['../namespaceedda.html#a99e63c404645ad326c632c2ce97beaba',1,'edda']]], - ['buildfieldlist',['BuildFieldList',['../classeddaRandomProbeFilter.html#a39a7d796afb3ca9f524b32981c3fff99',1,'eddaRandomProbeFilter']]] + ['cartesiangrid',['CartesianGrid',['../classedda_1_1CartesianGrid.html#a1942381db5e2825ac62960dbe333f035',1,'edda::CartesianGrid::CartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1CartesianGrid.html#af59ed87c760524442d7f273212e03bc1',1,'edda::CartesianGrid::CartesianGrid()']]], + ['cast',['cast',['../classedda_1_1Tuple.html#a97fa98eaebf6d2a011778774f2f22115',1,'edda::Tuple']]], + ['cellvolume',['cellVolume',['../classedda_1_1CurvilinearGrid.html#aaa18ce71a73a9ae783cd2e210b45743b',1,'edda::CurvilinearGrid::cellVolume()'],['../classedda_1_1Grid.html#a226725af5b61a11b52d97e66ea899703',1,'edda::Grid::cellVolume()'],['../classedda_1_1CartesianGrid.html#ac7fd54a60214a297fb5ea0428e75c522',1,'edda::CartesianGrid::cellVolume()'],['../classedda_1_1RegularCartesianGrid.html#a466ddf48fea9cfa189384960df43931b',1,'edda::RegularCartesianGrid::cellVolume()']]], + ['central_5fdifference_5fneighbors',['central_difference_neighbors',['../classedda_1_1CurvilinearGrid.html#a0ff0a356e08882701bad8deff4d18fe7',1,'edda::CurvilinearGrid']]], + ['check_5fconvergence',['check_convergence',['../namespaceedda.html#a86f6ef9cc6522926fc4bc18985e132d5',1,'edda']]], + ['clamp',['clamp',['../classedda_1_1Vector.html#a51a82f3e95eb87bf98aaa26f3d2bd03a',1,'edda::Vector::clamp()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a08f179cb06c5aae652a49b02c65fd941',1,'edda::Vector< Real, 4 >::clamp()']]], + ['classprob',['classprob',['../namespaceedda.html#ac61d9325dd77e388d2f85ca345b11754',1,'edda']]], + ['clearlookup',['ClearLookup',['../classeddaSamplingArray.html#a8836ff715cad39c5d9244a267e8ef3d1',1,'eddaSamplingArray']]], + ['compute',['compute',['../classedda_1_1StreamTracer.html#adbbf6510363f650089804bd2a45d0f88',1,'edda::StreamTracer::compute()'],['../classeddaUncertainIsocontour.html#a63962b7bbddb0b53803b5f722a736a1d',1,'eddaUncertainIsocontour::Compute()']]], + ['computebbox',['computeBBox',['../classedda_1_1CurvilinearGrid.html#a3936c83ac19e8d0eaae70a215276b198',1,'edda::CurvilinearGrid::computeBBox()'],['../classedda_1_1Grid.html#a538c4f44fa3b37c892705f02475ba568',1,'edda::Grid::computeBBox()'],['../classedda_1_1RegularCartesianGrid.html#ac26c70ad564400a15ef51ad1a5489c59',1,'edda::RegularCartesianGrid::computeBBox()']]], + ['computegmm',['computeGMM',['../classedda_1_1DistributionModeler.html#aec88585c3ee7d12c32e77d9d083792b2',1,'edda::DistributionModeler::computeGMM()'],['../classedda_1_1VecDistrModeler.html#ae693d32fc295776c212691b1da47c32b',1,'edda::VecDistrModeler::computeGMM()']]], + ['computehistogram',['computeHistogram',['../classedda_1_1DistributionModeler.html#aa1b07f595d22ab6dffd4990028cd1239',1,'edda::DistributionModeler::computeHistogram()'],['../classedda_1_1VecDistrModeler.html#a8b6e93d3a61a505c6b15c93532725cb6',1,'edda::VecDistrModeler::computeHistogram()']]], + ['computeloglikelihood',['computeLogLikelihood',['../namespaceedda.html#a3cd88e2836805d8b67720a7ea3559945',1,'edda']]], + ['computestreamlines',['computeStreamlines',['../streamlineMonteCarlo_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'streamlineMonteCarlo.cpp']]], + ['conditionalhist',['conditionalHist',['../structedda_1_1dist_1_1JointHistogram.html#a0f45088ac3316d3da5a9c6ed9b6e1225',1,'edda::dist::JointHistogram']]], + ['coordinates_5fat_5fcell',['coordinates_at_cell',['../classedda_1_1CurvilinearGrid.html#a223c4304bbe20fffeba1db6bcd804737',1,'edda::CurvilinearGrid']]], + ['coordinates_5fat_5fvertex',['coordinates_at_vertex',['../classedda_1_1CurvilinearGrid.html#a533dc9283bb06d8e21e6e35d1896baa5',1,'edda::CurvilinearGrid']]], + ['copy_5fto_5fhost',['copy_to_host',['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray']]], + ['cross',['cross',['../namespaceedda.html#afeb533ece9d7f2447ee12393696a5ffb',1,'edda']]], + ['cubelerp',['cubeLerp',['../namespaceedda.html#a02b3b3fb6f033d50cda9fbbe40358a04',1,'edda']]], + ['curvilineargrid',['CurvilinearGrid',['../classedda_1_1CurvilinearGrid.html#abf2957e4165674f4f9369abfd67b23cb',1,'edda::CurvilinearGrid::CurvilinearGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1CurvilinearGrid.html#a4fd415a721b141d7c4c22b70b6f0e716',1,'edda::CurvilinearGrid::CurvilinearGrid(int *dim, VECTOR3 *pVertexGeom)'],['../classedda_1_1CurvilinearGrid.html#a052c257d139f4689d590fca746614610',1,'edda::CurvilinearGrid::CurvilinearGrid(int *dim, float *point_ary)'],['../classedda_1_1CurvilinearGrid.html#aa30ef1e3a373022d82704726b216f40c',1,'edda::CurvilinearGrid::CurvilinearGrid()']]] ]; diff --git a/html/search/functions_3.html b/html/search/functions_3.html index ebf2eeb..e6f4744 100644 --- a/html/search/functions_3.html +++ b/html/search/functions_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_3.js b/html/search/functions_3.js index 3d4fbf2..a7d0faa 100644 --- a/html/search/functions_3.js +++ b/html/search/functions_3.js @@ -1,15 +1,13 @@ var searchData= [ - ['cartesiangrid',['CartesianGrid',['../classedda_1_1CartesianGrid.html#a1942381db5e2825ac62960dbe333f035',1,'edda::CartesianGrid::CartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1CartesianGrid.html#af59ed87c760524442d7f273212e03bc1',1,'edda::CartesianGrid::CartesianGrid()']]], - ['cast',['cast',['../classedda_1_1Tuple.html#a573a869c415b5881da83c9a35dd4cc10',1,'edda::Tuple']]], - ['cellvolume',['cellVolume',['../classedda_1_1Grid.html#a226725af5b61a11b52d97e66ea899703',1,'edda::Grid::cellVolume()'],['../classedda_1_1CartesianGrid.html#ac7fd54a60214a297fb5ea0428e75c522',1,'edda::CartesianGrid::cellVolume()'],['../classedda_1_1RegularCartesianGrid.html#a466ddf48fea9cfa189384960df43931b',1,'edda::RegularCartesianGrid::cellVolume()']]], - ['clamp',['clamp',['../classedda_1_1Vector.html#a51a82f3e95eb87bf98aaa26f3d2bd03a',1,'edda::Vector::clamp()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a08f179cb06c5aae652a49b02c65fd941',1,'edda::Vector< Real, 4 >::clamp()']]], - ['clearlookup',['ClearLookup',['../classvtkSamplingArray.html#ac89f082a67c20a0d317622d5c64f4e18',1,'vtkSamplingArray::ClearLookup()'],['../classeddaSamplingArray.html#a8836ff715cad39c5d9244a267e8ef3d1',1,'eddaSamplingArray::ClearLookup()']]], - ['compute',['Compute',['../classeddaUncertainIsocontour.html#a63962b7bbddb0b53803b5f722a736a1d',1,'eddaUncertainIsocontour::Compute()'],['../classedda_1_1StreamTracer.html#adbbf6510363f650089804bd2a45d0f88',1,'edda::StreamTracer::compute()']]], - ['computebbox',['computeBBox',['../classedda_1_1Grid.html#a538c4f44fa3b37c892705f02475ba568',1,'edda::Grid::computeBBox()'],['../classedda_1_1RegularCartesianGrid.html#ac26c70ad564400a15ef51ad1a5489c59',1,'edda::RegularCartesianGrid::computeBBox()']]], - ['computestreamlines',['computeStreamlines',['../streamlineGaussianVTK_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'computeStreamlines(vtkSmartPointer< vtkPolyData > vtk_seeds): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#afa66efa39eeccf7b9bc62e6302b30d46',1,'computeStreamlines(vtkSmartPointer< vtkPolyData > vtk_seeds): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#ac594a54429651d60641a73ca31217c1b',1,'computeStreamlines(vtkObject *caller, unsigned long eventId, void *clientdata, void *calldata): test_vtk_pipeline.cpp']]], - ['copy_5fto_5fhost',['copy_to_host',['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray::copy_to_host(OutputIterator out)'],['../classedda_1_1NdArray.html#a06aa8bcd9b22c81d43a4f32b43f9a7e1',1,'edda::NdArray::copy_to_host(OutputIterator out)']]], - ['createdefaultexecutive',['CreateDefaultExecutive',['../classvtkCompositeUncertainIsocontour.html#a05e48e9f4970fa0ae87b51707fe7bfa0',1,'vtkCompositeUncertainIsocontour']]], - ['cross',['cross',['../namespaceedda.html#afeb533ece9d7f2447ee12393696a5ffb',1,'edda']]], - ['cubelerp',['cubeLerp',['../namespaceedda.html#a02b3b3fb6f033d50cda9fbbe40358a04',1,'edda']]] + ['data',['data',['../classedda_1_1NdArray.html#adab41970261227bb8cbee61437668836',1,'edda::NdArray']]], + ['datachanged',['DataChanged',['../classeddaSamplingArray.html#a3a62c7477232aeb406a32069ca26198a',1,'eddaSamplingArray']]], + ['dataset',['Dataset',['../classedda_1_1Dataset.html#a298506475496c892c0269643dced7e0f',1,'edda::Dataset']]], + ['det',['det',['../classedda_1_1MATRIX3.html#af2af932e00c6550a38487cea6bddfb09',1,'edda::MATRIX3']]], + ['determinant',['determinant',['../namespaceedda.html#a3238989f3e09702c057659bfce848d99',1,'edda']]], + ['determinant_5fsign',['determinant_sign',['../namespaceedda.html#ac74aafc0aebbdea9b454c51915fc09f6',1,'edda']]], + ['dimension',['Dimension',['../classedda_1_1MATRIX3.html#a314381814825aedf7dca2f682f5a200a',1,'edda::MATRIX3']]], + ['distributionmodeler',['DistributionModeler',['../classedda_1_1DistributionModeler.html#a3de1ac390bc65ff36b79a39309977e6b',1,'edda::DistributionModeler']]], + ['distributionwrapper',['DistributionWrapper',['../classedda_1_1dist_1_1DistributionWrapper.html#aa883c36befbaa6da37f0c87449dd7b97',1,'edda::dist::DistributionWrapper']]], + ['dot',['dot',['../namespaceedda.html#ac6eb0fa147f28e44295bbe3201c0281e',1,'edda::dot(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#acbc60ac78a9972a32aa4a470f9174087',1,'edda::dot(const Vector4< Real > &v0, const Vector4< Real > &v1)']]] ]; diff --git a/html/search/functions_4.html b/html/search/functions_4.html index 7317ea9..9ae34ff 100644 --- a/html/search/functions_4.html +++ b/html/search/functions_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_4.js b/html/search/functions_4.js index 93eb623..dbe4247 100644 --- a/html/search/functions_4.js +++ b/html/search/functions_4.js @@ -1,9 +1,15 @@ var searchData= [ - ['data',['data',['../classedda_1_1NdArray.html#ae08ff31a4c35850e2fa52619cd1b9e58',1,'edda::NdArray::data()'],['../classedda_1_1NdArray.html#adab41970261227bb8cbee61437668836',1,'edda::NdArray::data()']]], - ['datachanged',['DataChanged',['../classvtkSamplingArray.html#a9f659ba660b75566ee7b3a8734b207d4',1,'vtkSamplingArray::DataChanged()'],['../classeddaSamplingArray.html#a3a62c7477232aeb406a32069ca26198a',1,'eddaSamplingArray::DataChanged()']]], - ['datasamplingarray',['DataSamplingArray',['../classedda_1_1DataSamplingArray.html#a4da45b8109475832f7d573375e5b223f',1,'edda::DataSamplingArray']]], - ['dataset',['Dataset',['../classedda_1_1Dataset.html#a6435bda7663a40aecf2cab8ddf4dce86',1,'edda::Dataset']]], - ['dims',['dims',['../classedda_1_1NdArray.html#a4d7a4bab93f3633052353ebd2c7126b6',1,'edda::NdArray']]], - ['dot',['dot',['../namespaceedda.html#ac6eb0fa147f28e44295bbe3201c0281e',1,'edda::dot(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#acbc60ac78a9972a32aa4a470f9174087',1,'edda::dot(const Vector4< Real > &v0, const Vector4< Real > &v1)']]] + ['eddacomputeem',['eddaComputeEM',['../namespaceedda.html#adf290c6f2f0638ac28e9c459293d674f',1,'edda']]], + ['eddacomputehistogram',['eddaComputeHistogram',['../namespaceedda.html#aa585d5f090e81748dbd4560a7e9e51e2',1,'edda::eddaComputeHistogram(float *dataArray, int nElement, const int _nBins, const float _minValue=1, const float _maxValue=-1)'],['../namespaceedda.html#a6a5def648aa6805218b5b43c71bdaeb6',1,'edda::eddaComputeHistogram(double *dataArray, int nElement, const int _nBins, const double _minValue=1, const double _maxValue=-1)']]], + ['eddacomputejointgmm',['eddaComputeJointGMM',['../namespaceedda.html#a56f6ad37e7d5ac9b859a6f24473c2800',1,'edda']]], + ['eddacomputejointhistogram',['eddaComputeJointHistogram',['../namespaceedda_1_1dist.html#a04c11decab6db9edf9983631f06ef510',1,'edda::dist']]], + ['eddarandomsamplefield',['eddaRandomSampleField',['../classeddaRandomSampleField.html#af3116d98cfbd7389115564e5a05d8536',1,'eddaRandomSampleField']]], + ['eddasamplingarray',['eddaSamplingArray',['../classeddaSamplingArray.html#a079ebab48c561b18292ad7df6dcde1b2',1,'eddaSamplingArray']]], + ['eddathreshold',['eddaThreshold',['../classeddaThreshold.html#a365803ea6b23e241f74ca61f5941956b',1,'eddaThreshold']]], + ['eddauncertainisocontour',['eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#ae4e870c0689ed7d50bdf21166706182b',1,'eddaUncertainIsocontour']]], + ['eddaupdategmmincremental',['eddaUpdateGMMIncremental',['../namespaceedda.html#ada3481b5e318feefa332d69f067f445c',1,'edda']]], + ['end',['end',['../classedda_1_1NdArray.html#a557ace637946af190e2631a9d59f48fb',1,'edda::NdArray::end()'],['../classedda_1_1GmmArray.html#a1ff8017b7fcd7cc7c82a7375d4d3da2d',1,'edda::GmmArray::end()'],['../classedda_1_1HistoArray.html#a821645de6dcf8001fc62578b120773d6',1,'edda::HistoArray::end()']]], + ['euler',['euler',['../classedda_1_1StreamTracer.html#a880892fada69bb3e36cbab4c7de1e29b',1,'edda::StreamTracer']]], + ['eval_5fgaussian_5fdensity',['eval_gaussian_density',['../namespaceedda.html#a9d438e50e5dc488e5d812cea23ac606a',1,'edda']]] ]; diff --git a/html/search/functions_5.html b/html/search/functions_5.html index 1f1d9ce..54f53d0 100644 --- a/html/search/functions_5.html +++ b/html/search/functions_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_5.js b/html/search/functions_5.js index 7bec093..2e98fe9 100644 --- a/html/search/functions_5.js +++ b/html/search/functions_5.js @@ -1,9 +1,10 @@ var searchData= [ - ['eddarandomsamplefield',['eddaRandomSampleField',['../classeddaRandomSampleField.html#af3116d98cfbd7389115564e5a05d8536',1,'eddaRandomSampleField']]], - ['eddasamplingarray',['eddaSamplingArray',['../classeddaSamplingArray.html#a079ebab48c561b18292ad7df6dcde1b2',1,'eddaSamplingArray']]], - ['eddathreshold',['eddaThreshold',['../classeddaThreshold.html#a365803ea6b23e241f74ca61f5941956b',1,'eddaThreshold']]], - ['eddauncertainisocontour',['eddaUncertainIsocontour',['../classeddaUncertainIsocontour.html#ae4e870c0689ed7d50bdf21166706182b',1,'eddaUncertainIsocontour']]], - ['end',['end',['../classedda_1_1NdArray.html#adaf51d9ef085dbd77eb910ffddf8554c',1,'edda::NdArray::end()'],['../classedda_1_1GmmArray.html#a1ff8017b7fcd7cc7c82a7375d4d3da2d',1,'edda::GmmArray::end()'],['../classedda_1_1NdArray.html#adaf51d9ef085dbd77eb910ffddf8554c',1,'edda::NdArray::end()']]], - ['euler',['euler',['../classedda_1_1StreamTracer.html#a880892fada69bb3e36cbab4c7de1e29b',1,'edda::StreamTracer']]] + ['fastdowncast',['FastDownCast',['../classeddaSamplingArray.html#a75b9e3a91d32106e0c26ae86d62a4afa',1,'eddaSamplingArray']]], + ['fel_5forient',['FEL_orient',['../curvilinear__grid_8cpp.html#ab3f43eb4767acffae0f7d41732517817',1,'FEL_orient(const VECTOR3 &a, const VECTOR3 &b, const VECTOR3 &c, const VECTOR3 &d): curvilinear_grid.cpp'],['../curvilinear__grid_8cpp.html#a794efb262a737dbea2090779d5cc3065',1,'FEL_orient(const VECTOR3 &a, const VECTOR3 &b, const VECTOR3 &c, const VECTOR3 &d, const VECTOR3 &e): curvilinear_grid.cpp']]], + ['fieldinterp',['FieldInterp',['../structedda_1_1detail_1_1FieldInterp.html#a1040ba8ac5592e50e63acda38d9e4730',1,'edda::detail::FieldInterp']]], + ['fillinputportinformation',['FillInputPortInformation',['../classeddaThreshold.html#ad93869e45c27462151ac99f6d56ff432',1,'eddaThreshold']]], + ['free',['free',['../classedda_1_1NdArray.html#a9aed821c3cc69f87b46ab3bcf5e216c0',1,'edda::NdArray']]], + ['fuzzyisocontour',['FuzzyIsocontour',['../classedda_1_1detail_1_1FuzzyIsocontour.html#a4e0f4e37f8529f05415f261ce37e89b5',1,'edda::detail::FuzzyIsocontour']]], + ['fuzzyisosurface',['FuzzyIsosurface',['../namespaceedda.html#a629f0b35330b040ccbedac006b828afe',1,'edda']]] ]; diff --git a/html/search/functions_6.html b/html/search/functions_6.html index c9faaa6..c7bc6fb 100644 --- a/html/search/functions_6.html +++ b/html/search/functions_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_6.js b/html/search/functions_6.js index 0cabb5b..549561f 100644 --- a/html/search/functions_6.js +++ b/html/search/functions_6.js @@ -1,9 +1,84 @@ var searchData= [ - ['fastdowncast',['FastDownCast',['../classvtkSamplingArray.html#a5132154823c01446adb05c38754ffa4c',1,'vtkSamplingArray::FastDownCast()'],['../classeddaSamplingArray.html#a75b9e3a91d32106e0c26ae86d62a4afa',1,'eddaSamplingArray::FastDownCast()']]], - ['fillinputportinformation',['FillInputPortInformation',['../classvtkCompositeUncertainIsocontour.html#af546fd86fe72d5bcb9a3e10e60617f1a',1,'vtkCompositeUncertainIsocontour::FillInputPortInformation()'],['../classeddaThreshold.html#ad93869e45c27462151ac99f6d56ff432',1,'eddaThreshold::FillInputPortInformation()']]], - ['filloutputportinformation',['FillOutputPortInformation',['../classvtkEddaReader.html#a3c63f1875e9b7efd817bd363e1d1ec01',1,'vtkEddaReader']]], - ['free',['free',['../classedda_1_1NdArray.html#a9aed821c3cc69f87b46ab3bcf5e216c0',1,'edda::NdArray']]], - ['fuzzyisocontour',['FuzzyIsocontour',['../classedda_1_1detail_1_1FuzzyIsocontour.html#a4e0f4e37f8529f05415f261ce37e89b5',1,'edda::detail::FuzzyIsocontour']]], - ['fuzzyisosurface',['FuzzyIsosurface',['../namespaceedda.html#a629f0b35330b040ccbedac006b828afe',1,'edda']]] + ['gaussian',['Gaussian',['../structedda_1_1dist_1_1Gaussian.html#aa3127b2d21bce076814c65a833184e00',1,'edda::dist::Gaussian::Gaussian()'],['../structedda_1_1dist_1_1Gaussian.html#a7f8de0faab287e72c664f0ed928b2b8b',1,'edda::dist::Gaussian::Gaussian(Real m, Real var)']]], + ['gaussianmixture',['GaussianMixture',['../classedda_1_1dist_1_1GaussianMixture.html#a7de9bc1aefa230984cc701775c2e81bf',1,'edda::dist::GaussianMixture::GaussianMixture()'],['../classedda_1_1dist_1_1GaussianMixture.html#a87f5f62be41772792a5854cb7d1bd86b',1,'edda::dist::GaussianMixture::GaussianMixture(const std::vector< GMMTuple > &models_)']]], + ['gen_5fgmm',['gen_gmm',['../test__distribution_8cpp.html#aeff201fdc6932ddd65285555515ae0d5',1,'test_distribution.cpp']]], + ['gen_5fgmm2',['gen_gmm2',['../test__distribution_8cpp.html#aa0c546d12d071b102c425ea764d8a20a',1,'test_distribution.cpp']]], + ['genhistoarray',['genHistoArray',['../namespaceedda.html#a0678153de16df96c75a12f10a13039ed',1,'edda']]], + ['genndarray',['genNdArray',['../classedda_1_1GmmVtkDataArray.html#a878602a1d07990b43d2906d26aa24b8d',1,'edda::GmmVtkDataArray']]], + ['get_5fdims',['get_dims',['../classedda_1_1NdArray.html#aa785288d77d5ff168c1dc9353c917032',1,'edda::NdArray']]], + ['get_5fijk_5fof_5fcell',['get_ijk_of_cell',['../classedda_1_1CurvilinearGrid.html#af90d0f3ceec707a5080b98660dadd881',1,'edda::CurvilinearGrid']]], + ['get_5fijk_5fof_5fvertex',['get_ijk_of_vertex',['../classedda_1_1CurvilinearGrid.html#ac3ccd1d4ca3e425063a082ce9a029699',1,'edda::CurvilinearGrid']]], + ['get_5fnum_5fof_5fdims',['get_num_of_dims',['../classedda_1_1NdArray.html#a29e41bacd5203bcd4c64361f19a3fad8',1,'edda::NdArray']]], + ['get_5fnum_5fof_5felems',['get_num_of_elems',['../classedda_1_1NdArray.html#a31b2533ddfd3aa1fa4921c61796f3826',1,'edda::NdArray']]], + ['get_5fptr',['get_ptr',['../classedda_1_1NdArray.html#acecbf8fb7b2fbc54043482328982dcc3',1,'edda::NdArray']]], + ['get_5fselft_5fptr',['get_selft_ptr',['../classedda_1_1NdArray.html#a6566d61ec6ea36a0f647993a248f9e27',1,'edda::NdArray']]], + ['get_5fval',['get_val',['../classedda_1_1NdArray.html#ac2c55599aa81d6538954af54d6769636',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const'],['../classedda_1_1NdArray.html#a0b0778c432529c54647f61c5dbfc97f9',1,'edda::NdArray::get_val(int ind) const']]], + ['get_5fvector4',['get_Vector4',['../namespaceedda.html#a82d1260b77795b3136b52bb51b191007',1,'edda']]], + ['getarray',['getArray',['../classedda_1_1Dataset.html#af0bb73430e75e1d39c29d8c3834e6299',1,'edda::Dataset']]], + ['getbins',['getBins',['../classedda_1_1dist_1_1Histogram.html#a9d3461acb4a40b2a666fba5c3374a580',1,'edda::dist::Histogram']]], + ['getbinvalue',['getBinValue',['../classedda_1_1dist_1_1Histogram.html#aadbd203fadc50952e85f5145a820c5c5',1,'edda::dist::Histogram']]], + ['getbinwidths',['getBinWidths',['../structedda_1_1dist_1_1JointHistogram.html#a780d4875f78933ce1acb4a7357e56958',1,'edda::dist::JointHistogram']]], + ['getcdf',['getCdf',['../classedda_1_1dist_1_1Distribution.html#a254f00ebe52a7dc2db12637950d186b8',1,'edda::dist::Distribution::getCdf()'],['../classedda_1_1dist_1_1DistributionWrapper.html#ad9291362ce423a8f23afbd4d85636a80',1,'edda::dist::DistributionWrapper::getCdf()'],['../classedda_1_1dist_1_1Histogram.html#aa68fe26e09f201acc3649aaf3a5d245a',1,'edda::dist::Histogram::getCdf()'],['../namespaceedda_1_1dist.html#a79e06f89251bbc5b975824846ca03e29',1,'edda::dist::getCdf(const Dist &dist, double x)'],['../namespaceedda_1_1dist.html#ae429248395e426fbcbf6db522aadd1ef',1,'edda::dist::getCdf(const Real &value, double x)'],['../namespaceedda_1_1dist.html#ae5e41075ba1bc83bfc967f3c42c198c6',1,'edda::dist::getCdf(const Gaussian &dist, double x)'],['../namespaceedda_1_1dist.html#afd2142c4a8c9b7922cb4176a1d3fc8e1',1,'edda::dist::getCdf(const GaussianMixture< GMs > &dist, double x)'],['../namespaceedda_1_1dist.html#aaab8c4a0a3f2529b3c634c492ec98acf',1,'edda::dist::getCdf(const Histogram &dist, double x)'],['../namespaceedda_1_1dist.html#aaf0614edae93da7e92e84c8b0afa232b',1,'edda::dist::getCdf(const Variant &dist, double x)']]], + ['getcdfprecise',['getCdfPrecise',['../namespaceedda_1_1dist.html#a963983f8e973f9cf381ef37379ec4b81',1,'edda::dist']]], + ['getcelltype',['getCellType',['../classedda_1_1CurvilinearGrid.html#aa8a7fff214f47ef4e29951bcad0f4bd4',1,'edda::CurvilinearGrid::getCellType()'],['../classedda_1_1Grid.html#a6bc09e138a4e000284935c1797799c92',1,'edda::Grid::getCellType()'],['../classedda_1_1CartesianGrid.html#a5fcd49675005e39a9a5bf04cff1192a0',1,'edda::CartesianGrid::getCellType()'],['../classedda_1_1RegularCartesianGrid.html#aed25647409c250191b9f4c5b64de2484',1,'edda::RegularCartesianGrid::getCellType()']]], + ['getcellvertices',['getCellVertices',['../classedda_1_1CurvilinearGrid.html#a55d27be7ae9ef3ab2f43621d8e793719',1,'edda::CurvilinearGrid::getCellVertices()'],['../classedda_1_1Grid.html#a03a9c59b80664b69e0225966691a3648',1,'edda::Grid::getCellVertices()'],['../classedda_1_1CartesianGrid.html#a8320281bcfe0b9f7fad04cbb6f4dd080',1,'edda::CartesianGrid::getCellVertices()'],['../classedda_1_1RegularCartesianGrid.html#adbec43a3b5345edec3b92299777ed6f2',1,'edda::RegularCartesianGrid::getCellVertices()']]], + ['getcompwgtlogprobability',['getCompWgtLogProbability',['../classedda_1_1dist_1_1JointGMM.html#a369c39d9ee1c0380a6bbcca1d9075f4b',1,'edda::dist::JointGMM']]], + ['getcovariance',['getCovariance',['../structedda_1_1dist_1_1JointGaussian.html#a1e333f6e51cc6ed712dae76de5d30a7b',1,'edda::dist::JointGaussian::getCovariance()'],['../structedda_1_1dist_1_1JointHistogram.html#a45ec825f21978f21c65aafc07be3c208',1,'edda::dist::JointHistogram::getCovariance()']]], + ['getdata',['getData',['../classedda_1_1Tuple.html#a595e7069d531212beee67ef8286db5f6',1,'edda::Tuple::getData()'],['../classedda_1_1Tuple.html#a3adba3cbbe1031f5131621f81c903234',1,'edda::Tuple::getData() const']]], + ['getdataset',['getDataset',['../classedda_1_1DistributionModeler.html#a0062ffcd380b73745de4c6ebaba263b0',1,'edda::DistributionModeler::getDataset()'],['../classedda_1_1VecDistrModeler.html#a2f2faa0a0769810d6870c8f6f4c745ea',1,'edda::VecDistrModeler::getDataset()']]], + ['getdatatype',['GetDataType',['../classeddaSamplingArray.html#aca5347384a310ff910c41985fdd6a71b',1,'eddaSamplingArray']]], + ['getdatatypesize',['GetDataTypeSize',['../classeddaSamplingArray.html#a592f5afb03e3826d9f3eb26cb868eca1',1,'eddaSamplingArray']]], + ['getdet',['getDet',['../structedda_1_1dist_1_1JointHistogram.html#a3dd03ab5345b2e91e916f40f391ef8bd',1,'edda::dist::JointHistogram']]], + ['getdimension',['getDimension',['../classedda_1_1Dataset.html#a0dc71932f495f2bcf2f8f625e4dfc9a3',1,'edda::Dataset::getDimension()'],['../classedda_1_1CartesianGrid.html#aa9e3f187b8ff610ddca88795b8c55eb5',1,'edda::CartesianGrid::getDimension()']]], + ['getdistr',['getDistr',['../classedda_1_1DistrArray.html#aeb1b1f3a2610228b27887d33661571d9',1,'edda::DistrArray::getDistr()'],['../classedda_1_1ScalarDistrArray.html#a1a5a047f4a1d003a7d39a6b729bd32ad',1,'edda::ScalarDistrArray::getDistr()'],['../classedda_1_1VectorDistrArray.html#a67b8a3bdd420ba44afa0ee5836097f9c',1,'edda::VectorDistrArray::getDistr()'],['../classedda_1_1JointDistrArray.html#a2c3940f2d9136d3552aceb70027fd278',1,'edda::JointDistrArray::getDistr()'],['../structedda_1_1dist_1_1JointHistogram.html#aa2a00124db85a4364825780efd8e6103',1,'edda::dist::JointHistogram::getDistr()'],['../classedda_1_1GmmVtkDataArray.html#a5e969e8644115ef72fecf2f684466449',1,'edda::GmmVtkDataArray::getDistr()']]], + ['getdistrname',['getDistrName',['../classedda_1_1DistrArray.html#adbc00eb86170ca8738f2dff579a2547a',1,'edda::DistrArray::getDistrName()'],['../classedda_1_1ScalarDistrArray.html#ac6e7b61e6ed4e6e1cb0f2adae9638d79',1,'edda::ScalarDistrArray::getDistrName()'],['../classedda_1_1VectorDistrArray.html#a8d5fb4a5c8201fff49a18a29938a9e36',1,'edda::VectorDistrArray::getDistrName()'],['../classedda_1_1JointDistrArray.html#a77a74c92eaef146ebec61ee12a3e8c90',1,'edda::JointDistrArray::getDistrName()'],['../classedda_1_1GmmVtkDataArray.html#a1cbda5e87ffca48d134dea0ef7d53b61',1,'edda::GmmVtkDataArray::getDistrName()']]], + ['getdistrtype',['getDistrType',['../namespaceedda.html#a96b8aef92851e782f1b502a5fdcae897',1,'edda']]], + ['getdistrvector',['getDistrVector',['../classedda_1_1DistrArray.html#aba9a46474348268221314e7fe7562c97',1,'edda::DistrArray::getDistrVector()'],['../classedda_1_1ScalarDistrArray.html#a3040365ebed333e1f6b2052da5934c2f',1,'edda::ScalarDistrArray::getDistrVector()'],['../classedda_1_1VectorDistrArray.html#a255b09fb5f72c4323364436218a5b151',1,'edda::VectorDistrArray::getDistrVector()'],['../classedda_1_1JointDistrArray.html#a0b6fad770b3ec7cee12d7a5979a3fb47',1,'edda::JointDistrArray::getDistrVector()'],['../classedda_1_1GmmVtkDataArray.html#a3b84b9c3cd7fbedfd61270052ef4515f',1,'edda::GmmVtkDataArray::getDistrVector()']]], + ['geteigenmat',['getEigenMat',['../structedda_1_1dist_1_1JointGaussian.html#ac96fcfb4d2baa2ef8246fddb993cfe3c',1,'edda::dist::JointGaussian']]], + ['getfileextension',['getFileExtension',['../namespaceedda.html#ac59d3b1cb5943a0ea7f5d13d9f3a2b9c',1,'edda::getFileExtension(const string &filename)'],['../namespaceedda.html#ad23a3dce27ab3adaa101e5bf29ef538c',1,'edda::getFileExtension(const std::string &filename)']]], + ['getfilename',['getFilename',['../namespaceedda.html#a8130836224d1649c7f9c9630555f9942',1,'edda']]], + ['getgmmmodels',['getGmmModels',['../namespaceedda.html#af2d06efbb6ce6930e5627610326f8da5',1,'edda']]], + ['getgmmmodels_5farchival',['getGmmModels_archival',['../namespaceedda.html#ad4a4b406b0a371f8e004dc1f1e18f0cc',1,'edda']]], + ['getgrid',['getGrid',['../classedda_1_1Dataset.html#acf435e0080a5f00527dc49d61ad96650',1,'edda::Dataset']]], + ['getgridspacing',['getGridSpacing',['../classedda_1_1CurvilinearGrid.html#a99849d08352aa03202c47c711e986f89',1,'edda::CurvilinearGrid::getGridSpacing()'],['../classedda_1_1Grid.html#a253dfed75ec539a26f993c9f75a87a75',1,'edda::Grid::getGridSpacing()'],['../classedda_1_1CartesianGrid.html#a2f5865f683be69cb92e64f6d9c4d9814',1,'edda::CartesianGrid::getGridSpacing()'],['../classedda_1_1RegularCartesianGrid.html#a49a0bbd594f86199ccb997729a3ccc0a',1,'edda::RegularCartesianGrid::getGridSpacing()']]], + ['getindex',['getIndex',['../classedda_1_1CartesianGrid.html#a717a62a55b2244d94ee0daba808500e2',1,'edda::CartesianGrid']]], + ['getinterptype',['getInterpType',['../classedda_1_1Grid.html#af900e5f451efd731b8ec282c67334547',1,'edda::Grid::getInterpType()'],['../classedda_1_1CartesianGrid.html#aa206aa1bf588c180b8cfbe63723757b8',1,'edda::CartesianGrid::getInterpType()']]], + ['getjointcdf',['getJointCdf',['../structedda_1_1dist_1_1JointHistogram.html#a2afec00c5f46dcf706ca922bfc28fc49',1,'edda::dist::JointHistogram']]], + ['getjointlogpdf',['getJointLogPdf',['../structedda_1_1dist_1_1JointGaussian.html#a5ad2263029fa5d3154f6fc6b5d53aff0',1,'edda::dist::JointGaussian']]], + ['getjointmean',['getJointMean',['../namespaceedda_1_1dist.html#aca5d6bb4ab8925701a51faa2a6a41587',1,'edda::dist::getJointMean(const Dist &dist)'],['../namespaceedda_1_1dist.html#a3dfb8956e6fd7f1f9d7d5404d159870e',1,'edda::dist::getJointMean(const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#ad46e1fb3d92fd27a62bbf8031819764c',1,'edda::dist::getJointMean(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#a5a6a6cf268763e6a80cd78742d69d385',1,'edda::dist::getJointMean(const Variant &dist)']]], + ['getjointpdf',['getJointPdf',['../namespaceedda_1_1dist.html#aa75196d159f2cf0deda5c38db76997f4',1,'edda::dist::getJointPdf(const Dist &dist, const std::vector< Real > x_)'],['../namespaceedda_1_1dist.html#ae850655ae199f3d99ac19904b0a4aead',1,'edda::dist::getJointPdf(const JointGaussian &dist, const std::vector< Real > x_)'],['../namespaceedda_1_1dist.html#a35aabc0834890277afff7845b761f2b0',1,'edda::dist::getJointPdf(const JointHistogram &dist, const std::vector< Real > &x_)'],['../namespaceedda_1_1dist.html#aa5711759a65d169a0889a7ce69131cfb',1,'edda::dist::getJointPdf(const Variant &dist, const std::vector< Real > &x)']]], + ['getjointsample',['getJointSample',['../structedda_1_1dist_1_1JointGaussian.html#ae91c9b176275373323f7b197933a2851',1,'edda::dist::JointGaussian::getJointSample()'],['../classedda_1_1dist_1_1JointGMM.html#ad62fb0a1c2a24c98b6161b7301112c7a',1,'edda::dist::JointGMM::getJointSample()'],['../namespaceedda_1_1dist.html#ad58360f81442685309c506fab1e1a74e',1,'edda::dist::getJointSample(const Dist &dist)'],['../namespaceedda_1_1dist.html#a55b0094e86dd4d053c2cea811959f45b',1,'edda::dist::getJointSample(const Dist &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a2cfa0a94161a6137f20a642d66c38360',1,'edda::dist::getJointSample(const JointGaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a13f9fa2ee7f77dcc8045a1cde0d086a0',1,'edda::dist::getJointSample(const JointGMM &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#acf0cb6b74fa4b6332c551938e0cb3759',1,'edda::dist::getJointSample(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#a95b312f52dd53d2dceffa48ae7c8568a',1,'edda::dist::getJointSample(const JointHistogram &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#acd2ee03b0fa2450c54bbf615b2f9b455',1,'edda::dist::getJointSample(const Variant &dist)']]], + ['getlength',['getLength',['../classedda_1_1shared__ary.html#a1e8241f74adc1b4bb4203a4156d0a01a',1,'edda::shared_ary::getLength()'],['../classedda_1_1DistrArray.html#a7683836fa362da37960b5b8d7a333f48',1,'edda::DistrArray::getLength()'],['../classedda_1_1ScalarDistrArray.html#aa88300692fb6c5e4a26077baa8cbc4f6',1,'edda::ScalarDistrArray::getLength()'],['../classedda_1_1VectorDistrArray.html#a9cd5f4e6b27832cfd87739bf68ee2d6d',1,'edda::VectorDistrArray::getLength()'],['../classedda_1_1JointDistrArray.html#a08458dcfe3c717f40586b653e881f2b0',1,'edda::JointDistrArray::getLength()'],['../classedda_1_1GmmVtkDataArray.html#ae253c523c5d1488fb18214cfe4df4c78',1,'edda::GmmVtkDataArray::getLength()']]], + ['getlogdet',['getLogDet',['../structedda_1_1dist_1_1JointGaussian.html#abe3a2982612be96288f940a6c5898b00',1,'edda::dist::JointGaussian']]], + ['getmag',['getMag',['../classedda_1_1Vector.html#a31eb4a856ac0e023704a85efa39e70f9',1,'edda::Vector::getMag()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a1f6ef2dfc90a7c633954dad0e03569ad',1,'edda::Vector< Real, 3 >::getMag()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0c9eb8919a1f42d31adcfdb9167a0f24',1,'edda::Vector< Real, 4 >::getMag()']]], + ['getmax',['getMax',['../classedda_1_1Vector.html#a13a14781835ea20809c3f8fe58fd49e0',1,'edda::Vector::getMax()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a5cc40943382c1b088d88f233379e687b',1,'edda::Vector< Real, 3 >::getMax()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ad992bd1dc5b6aa1dbd016655f8aa3e70',1,'edda::Vector< Real, 4 >::getMax()']]], + ['getmaxvals',['getMaxVals',['../structedda_1_1dist_1_1JointHistogram.html#aecbe3708c2c2cbf48253bea63b5c3174',1,'edda::dist::JointHistogram']]], + ['getmaxvalue',['getMaxValue',['../classedda_1_1dist_1_1Histogram.html#a12f4d770557360f1c7593f0a0fe0f2fb',1,'edda::dist::Histogram']]], + ['getmean',['getMean',['../classedda_1_1dist_1_1Distribution.html#a27bb96ba473069f5e585fe6187a18b12',1,'edda::dist::Distribution::getMean()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a0b9571390e01745c60f3d25a4309d666',1,'edda::dist::DistributionWrapper::getMean()'],['../classedda_1_1dist_1_1Histogram.html#a9cb7ec74ec7817755bf829ef2c59652f',1,'edda::dist::Histogram::getMean()'],['../structedda_1_1dist_1_1JointGaussian.html#a863db28ebe8a3ca52826ad87916f1d75',1,'edda::dist::JointGaussian::getMean()'],['../classedda_1_1dist_1_1JointGMM.html#ad5eb1b0c40f7b8264bbc5ad77c3e89f5',1,'edda::dist::JointGMM::getMean()'],['../namespaceedda_1_1dist.html#a31e7d01d2efb25f0bd964ce5ad22b094',1,'edda::dist::getMean(const Dist &dist)'],['../namespaceedda_1_1dist.html#ad57b2fa1045786424910800ecb46d95f',1,'edda::dist::getMean(const Tuple< T, N > &dist)'],['../namespaceedda_1_1dist.html#ab9581b103da8087763aa54015a251d76',1,'edda::dist::getMean(const Real &value)'],['../namespaceedda_1_1dist.html#aa90608d9ba4ac81988b490f6a431910f',1,'edda::dist::getMean(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a572cfa9c03d70c39f8dfdf6804bc1dee',1,'edda::dist::getMean(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#a4249273536d8bfc3f31c00f5bbf31ada',1,'edda::dist::getMean(const Histogram &dist)'],['../namespaceedda_1_1dist.html#a994a5806eeb6bfd42d487393d94d38df',1,'edda::dist::getMean(const Variant &dist)']]], + ['getminvals',['getMinVals',['../structedda_1_1dist_1_1JointHistogram.html#a300353858869ef100d4b887b2eb83c40',1,'edda::dist::JointHistogram']]], + ['getminvalue',['getMinValue',['../classedda_1_1dist_1_1Histogram.html#a41d9990fabd432eb1fe9370cec28b7af',1,'edda::dist::Histogram']]], + ['getname',['getName',['../classedda_1_1dist_1_1Distribution.html#a1cb97d044975bf69aa7415c8a88cb61c',1,'edda::dist::Distribution::getName()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a1a851af373ffa093cad8777a750dfac0',1,'edda::dist::DistributionWrapper::getName()'],['../namespaceedda_1_1dist.html#af1caedbeed631586c1998b1519677ac2',1,'edda::dist::getName(const Real &x)'],['../namespaceedda_1_1dist.html#ab9048c44535d5b133ca1ccc61d500225',1,'edda::dist::getName(const Gaussian &x)'],['../namespaceedda_1_1dist.html#aa6b164453af92a895db76d0bf04c4d27',1,'edda::dist::getName(const GaussianMixture< GMs > &x)'],['../namespaceedda_1_1dist.html#af13e6b4b9681e4473617cb95026debb9',1,'edda::dist::getName(const Histogram &x)'],['../namespaceedda_1_1dist.html#aa5c641f8793ab998bdc49d0a8072619a',1,'edda::dist::getName(const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#a06f5e211488f46424e94ef7cc7989532',1,'edda::dist::getName(const JointGMM &x)'],['../namespaceedda_1_1dist.html#aeef22a70cee13e6d838e28346cfe2d8d',1,'edda::dist::getName(const JointHistogram &dist)'],['../namespaceedda_1_1dist.html#af6e225bb8047fad35d73f359e6a52140',1,'edda::dist::getName(const Variant &dist)']]], + ['getnumbins',['getNumBins',['../structedda_1_1dist_1_1JointHistogram.html#a033e6aa2dd112c7b62192cd6cfe3d530',1,'edda::dist::JointHistogram']]], + ['getnumcomponents',['getNumComponents',['../classedda_1_1DistrArray.html#ac5ca0f304fc582030f9585c62f596a68',1,'edda::DistrArray::getNumComponents()'],['../classedda_1_1ScalarDistrArray.html#a13deee467fad20fcdaee8ad10c86e487',1,'edda::ScalarDistrArray::getNumComponents()'],['../classedda_1_1VectorDistrArray.html#ac8bad4a6f0c12f1fc35c884000a91cd7',1,'edda::VectorDistrArray::getNumComponents()'],['../classedda_1_1JointDistrArray.html#a2ebcd7d64c3f95e535374a6b3e163ad8',1,'edda::JointDistrArray::getNumComponents()'],['../classedda_1_1GmmVtkDataArray.html#a52a2a8b8afa15807ec7ca859b712e66b',1,'edda::GmmVtkDataArray::getNumComponents()']]], + ['getnumvars',['getNumVars',['../structedda_1_1dist_1_1JointHistogram.html#a7dcd92c737a39fcf82160e7c3c82a1de',1,'edda::dist::JointHistogram']]], + ['getpath',['getPath',['../namespaceedda.html#a8cd83bac4be9c72912f9012320903fea',1,'edda']]], + ['getpdf',['getPdf',['../classedda_1_1dist_1_1Distribution.html#a415b6b30bd106c3837f6d524d5ab56f8',1,'edda::dist::Distribution::getPdf()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a99d3c366cf997baa044c64d6d885aa9f',1,'edda::dist::DistributionWrapper::getPdf()'],['../classedda_1_1dist_1_1Histogram.html#a8c23482a40867efeb519774bef64209a',1,'edda::dist::Histogram::getPdf()'],['../classedda_1_1dist_1_1JointGMM.html#ab5ae4fe145e613aeddd9712b9dd8c2e3',1,'edda::dist::JointGMM::getPdf()'],['../namespaceedda_1_1dist.html#a2b1096c376ca2120d6194f9452bc7a4a',1,'edda::dist::getPdf(const Dist &dist, const double x)'],['../namespaceedda_1_1dist.html#af2bde14dfa1c9aaae56340e7f6f0d958',1,'edda::dist::getPdf(const Real &value, double x)'],['../namespaceedda_1_1dist.html#ab49c27e7d7ee9b8c26bea6bf735c92dd',1,'edda::dist::getPdf(const Gaussian &dist, const double x)'],['../namespaceedda_1_1dist.html#ab45cc21a0371c7a4471556c715669571',1,'edda::dist::getPdf(const GaussianMixture< GMs > &dist, const double x)'],['../namespaceedda_1_1dist.html#a08a42b6795d5052cb716dcf739a78188',1,'edda::dist::getPdf(const Histogram &dist, const double x)'],['../namespaceedda_1_1dist.html#a312ac0b0a859377524410f5eb079b25f',1,'edda::dist::getPdf(const JointGMM &dist, const std::vector< Real > x)'],['../namespaceedda_1_1dist.html#a2053d1af598768527673eceecde7c309',1,'edda::dist::getPdf(const Variant &dist, double x)']]], + ['getposition',['getPosition',['../structedda_1_1GetPositionAsIs.html#a4c8da04a1fa5e24a15458149aed4725b',1,'edda::GetPositionAsIs::getPosition()'],['../structedda_1_1GetPositionFromDistributionMean.html#a429ea3dc9a5d41b2f78a5ae2dd09624d',1,'edda::GetPositionFromDistributionMean::getPosition()']]], + ['getrawarray',['getRawArray',['../classedda_1_1DistrArray.html#abc0b8d0332dddc57b78f04410f94f488',1,'edda::DistrArray::getRawArray()'],['../classedda_1_1ScalarDistrArray.html#a3389e05a8082cb7907991308692704e4',1,'edda::ScalarDistrArray::getRawArray()'],['../classedda_1_1VectorDistrArray.html#a26fd26e0739febc15ba63eaf2b80d94e',1,'edda::VectorDistrArray::getRawArray()'],['../classedda_1_1JointDistrArray.html#aae134d393f566ee75ab739667b12a6d0',1,'edda::JointDistrArray::getRawArray()'],['../classedda_1_1GmmVtkDataArray.html#a01d173f90474b4af8ba5a56ebeb1a3f7',1,'edda::GmmVtkDataArray::getRawArray()']]], + ['getsample',['getSample',['../classedda_1_1Dataset.html#ad1687916a4bd1486d61cacd96b1c293d',1,'edda::Dataset::getSample(int idx, Real &data) const'],['../classedda_1_1Dataset.html#a8c75d6c4b03907728d2afa64121c80db',1,'edda::Dataset::getSample(int idx, Vector< Real, N > &data) const'],['../classedda_1_1dist_1_1Distribution.html#a6bdc867a7ab1a8d956b576ac7bdaba0b',1,'edda::dist::Distribution::getSample()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a98fe7a774c9bf2a5aa1795feb05ef237',1,'edda::dist::DistributionWrapper::getSample()'],['../classedda_1_1dist_1_1Histogram.html#a90511639e51b8aa1daf30e3207b40aa3',1,'edda::dist::Histogram::getSample()'],['../namespaceedda_1_1dist.html#a17c380a73708459e22641942be1bbbf1',1,'edda::dist::getSample(const Dist &dist)'],['../namespaceedda_1_1dist.html#a34d4f53145d2811644ee4f50b15e4d41',1,'edda::dist::getSample(const Dist &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a97fb97d2f21ff7d6d25a4bdd27cec5e6',1,'edda::dist::getSample(const Tuple< T, N > &distvec, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a205c55f0600d37afbfc20dcd9026d23b',1,'edda::dist::getSample(const Real &value)'],['../namespaceedda_1_1dist.html#a9885c551a8bdba31a86d259358b92b3a',1,'edda::dist::getSample(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a72b01a24c403bf720b720f3725799d22',1,'edda::dist::getSample(const Gaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#aa130e91bab7646331af5ee2ed183bacc',1,'edda::dist::getSample(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#a46cf547b9f777cd1be0f767a84438dd1',1,'edda::dist::getSample(const GaussianMixture< GMs > &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#adc0fc9226bf2879d6f5257934b935c98',1,'edda::dist::getSample(const Histogram &dist)'],['../namespaceedda_1_1dist.html#a77d1842129bc870fa0ea6c6a9a73ae29',1,'edda::dist::getSample(const Variant &dist)'],['../namespaceedda_1_1dist.html#a98351fba7bddbd637f89560bd6f74518',1,'edda::dist::getSample(const Vector< Dist, N > &v)']]], + ['getscalar',['getScalar',['../classedda_1_1DistrArray.html#aea5a637c9775541ffbcea3795538222f',1,'edda::DistrArray::getScalar()'],['../classedda_1_1ScalarDistrArray.html#a812726ffca24ba1ae6867613b8996268',1,'edda::ScalarDistrArray::getScalar()'],['../classedda_1_1VectorDistrArray.html#a7ba96f56da60f8a3231ca1d74f61ddf1',1,'edda::VectorDistrArray::getScalar()'],['../classedda_1_1JointDistrArray.html#a76c98464be7d2f746a703fd10b37090d',1,'edda::JointDistrArray::getScalar()'],['../classedda_1_1GmmVtkDataArray.html#a91261283cd5e58b00b07f95e0dc87ed9',1,'edda::GmmVtkDataArray::getScalar()']]], + ['getsource',['GetSource',['../classeddaRandomProbeFilter.html#a654017afa9fbc870c947ea4833c26056',1,'eddaRandomProbeFilter']]], + ['getspacing',['getSpacing',['../classedda_1_1Dataset.html#a885027511ef9edfafb85369e1a1f302c',1,'edda::Dataset']]], + ['getstepsize',['getStepSize',['../namespaceedda.html#aa3b8bbdd2ee47371f895f59cb7b998b2',1,'edda']]], + ['gettargetcomponent',['GetTargetComponent',['../classedda_1_1DistrArray.html#aee9a461cdc7198d5e24fee3fd56a487d',1,'edda::DistrArray::GetTargetComponent()'],['../classedda_1_1ScalarDistrArray.html#afde8ec2e09b72b4d3bced51efd42e481',1,'edda::ScalarDistrArray::GetTargetComponent()'],['../classedda_1_1VectorDistrArray.html#a2c4c73a50b6c76b7c822e924e35541e2',1,'edda::VectorDistrArray::GetTargetComponent()'],['../classedda_1_1JointDistrArray.html#afb9c63cfb5e228e05c2c38599d33daed',1,'edda::JointDistrArray::GetTargetComponent()'],['../classedda_1_1GmmVtkDataArray.html#aa3cb2e811c43ba5b41b88230435823a8',1,'edda::GmmVtkDataArray::GetTargetComponent()']]], + ['gettuple',['GetTuple',['../classeddaSamplingArray.html#ab2dccfe1f54d510c301f36f431efa7d8',1,'eddaSamplingArray::GetTuple(vtkIdType i)'],['../classeddaSamplingArray.html#a21d51b69cde556e775bcbbda111698c0',1,'eddaSamplingArray::GetTuple(vtkIdType i, double *tuple)']]], + ['gettuples',['GetTuples',['../classeddaSamplingArray.html#a006f8736c0022ca398aa1e0a4ee0cacb',1,'eddaSamplingArray']]], + ['getumat',['getUMat',['../structedda_1_1dist_1_1JointGaussian.html#af5de6130861940ae8facda0277f0f436',1,'edda::dist::JointGaussian']]], + ['getvar',['getVar',['../classedda_1_1dist_1_1Histogram.html#a023685fca409b8b07f5f167e2e25a9a7',1,'edda::dist::Histogram::getVar()'],['../namespaceedda_1_1dist.html#acd44dfe5c45d9d6e37bf83e250513ed6',1,'edda::dist::getVar(const Dist &dist)'],['../namespaceedda_1_1dist.html#a4ec5e176ff5afc97ece133b8707129d6',1,'edda::dist::getVar(const Real &value)'],['../namespaceedda_1_1dist.html#ae1a0a4253e7afaee605973f5fdb6ede5',1,'edda::dist::getVar(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a506aba2f4e7f4fd143596205f16c043f',1,'edda::dist::getVar(const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#ae925f7c4fc5e8761839a17ce455d38b3',1,'edda::dist::getVar(const Histogram &dist)'],['../namespaceedda_1_1dist.html#aa25f0db989602c94afc4c166db827029',1,'edda::dist::getVar(const Variant &dist)']]], + ['getvector',['getVector',['../classedda_1_1DistrArray.html#aa763f6ecd5271bb8143c63732c3cc427',1,'edda::DistrArray::getVector()'],['../classedda_1_1ScalarDistrArray.html#ad2ca9bb63f9e9b37be9eb3533637adc7',1,'edda::ScalarDistrArray::getVector()'],['../classedda_1_1VectorDistrArray.html#ac5f9dbd64ca6c51b6136abac2ed031c0',1,'edda::VectorDistrArray::getVector()'],['../classedda_1_1JointDistrArray.html#ac05bfaa84d0ccdae61eec955e9f5c2fa',1,'edda::JointDistrArray::getVector()'],['../classedda_1_1GmmVtkDataArray.html#ae796813d075e55751cf80d25d364e167',1,'edda::GmmVtkDataArray::getVector()']]], + ['getvoidpointer',['GetVoidPointer',['../classeddaSamplingArray.html#aaa1270ca6c35fea4ef70cbf412d2be0a',1,'eddaSamplingArray']]], + ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html#a8882c526949846d7dcd0af6227073e55',1,'edda::GmmArray::GmmArray()'],['../classedda_1_1GmmArray.html#a72bae3ef6338366cb29dd4624a94e0f0',1,'edda::GmmArray::GmmArray(std::vector< NdArray< Real > > &data_)']]], + ['gmmvtkdataarray',['GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a4a7d87c6074f386ae136fb3806173d7e',1,'edda::GmmVtkDataArray::GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="")'],['../classedda_1_1GmmVtkDataArray.html#a7222e89309e565a3406b71a72375a6f1',1,'edda::GmmVtkDataArray::GmmVtkDataArray(std::vector< vtkSmartPointer< vtkDataArray > > arrays_)']]], + ['grid',['Grid',['../classedda_1_1Grid.html#a1a342186fd933582723559004dd25489',1,'edda::Grid']]] ]; diff --git a/html/search/functions_7.html b/html/search/functions_7.html index ec330da..7f10e2b 100644 --- a/html/search/functions_7.html +++ b/html/search/functions_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_7.js b/html/search/functions_7.js index 02d5372..cdf97d6 100644 --- a/html/search/functions_7.js +++ b/html/search/functions_7.js @@ -1,51 +1,6 @@ var searchData= [ - ['gaussian',['Gaussian',['../structedda_1_1dist_1_1Gaussian.html#aa3127b2d21bce076814c65a833184e00',1,'edda::dist::Gaussian::Gaussian()'],['../structedda_1_1dist_1_1Gaussian.html#a7f8de0faab287e72c664f0ed928b2b8b',1,'edda::dist::Gaussian::Gaussian(Real m, Real var)']]], - ['gaussianmixture',['GaussianMixture',['../classedda_1_1dist_1_1GaussianMixture.html#a655e1d6442a400b01da0c8dc2d1f06a8',1,'edda::dist::GaussianMixture::GaussianMixture()'],['../classedda_1_1dist_1_1GaussianMixture.html#a45982b12d73cfebda033ea3914183fd9',1,'edda::dist::GaussianMixture::GaussianMixture(const std::vector< GMMTuple > &models_)']]], - ['genndarray',['genNdArray',['../classedda_1_1GmmVtkDataArray.html#a878602a1d07990b43d2906d26aa24b8d',1,'edda::GmmVtkDataArray']]], - ['get_5fdims',['get_dims',['../classedda_1_1NdArray.html#afbaf9df3ade5a0ebe71010c9ffd51572',1,'edda::NdArray']]], - ['get_5fnum_5fof_5fdims',['get_num_of_dims',['../classedda_1_1NdArray.html#a0242f3d47bed17ffb98338ad0b694b7e',1,'edda::NdArray']]], - ['get_5fnum_5fof_5felems',['get_num_of_elems',['../classedda_1_1NdArray.html#a7b1103d1c10c8c1d2297610abc8a9c81',1,'edda::NdArray']]], - ['get_5fptr',['get_ptr',['../classedda_1_1NdArray.html#a32ece2f75bdefc5f653d27e413755c38',1,'edda::NdArray::get_ptr(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a32ece2f75bdefc5f653d27e413755c38',1,'edda::NdArray::get_ptr(const std::initializer_list< int > &ind) const ']]], - ['get_5fselft_5fptr',['get_selft_ptr',['../classedda_1_1NdArray.html#a6566d61ec6ea36a0f647993a248f9e27',1,'edda::NdArray']]], - ['get_5fval',['get_val',['../classedda_1_1NdArray.html#a7b2ba998de52689614fc8b3fea4b6c3b',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a1a6cd2618bbe5a4e15839c86362a9fb6',1,'edda::NdArray::get_val(int ind) const '],['../classedda_1_1NdArray.html#a7b2ba998de52689614fc8b3fea4b6c3b',1,'edda::NdArray::get_val(const std::initializer_list< int > &ind) const '],['../classedda_1_1NdArray.html#a1a6cd2618bbe5a4e15839c86362a9fb6',1,'edda::NdArray::get_val(int ind) const ']]], - ['get_5fvector4',['get_Vector4',['../namespaceedda.html#a82d1260b77795b3136b52bb51b191007',1,'edda']]], - ['getarray',['getArray',['../classedda_1_1Dataset.html#a7bc1d0aecb6b80d48c0ce83d970ff4b7',1,'edda::Dataset']]], - ['getcdf',['getCdf',['../namespaceedda_1_1dist.html#a9108a700d9ad1ce168d1a4be549e05ba',1,'edda::dist::getCdf(const T &dist, double x)'],['../namespaceedda_1_1dist.html#ae5e41075ba1bc83bfc967f3c42c198c6',1,'edda::dist::getCdf(const Gaussian &dist, double x)'],['../namespaceedda_1_1dist.html#a0de789b610d232edfeb17f1774c78a11',1,'edda::dist::getCdf(const GaussianMixture< GMMs > &dist, double x)'],['../namespaceedda_1_1dist.html#aaf0614edae93da7e92e84c8b0afa232b',1,'edda::dist::getCdf(const Variant &dist, double x)']]], - ['getcdfprecise',['getCdfPrecise',['../namespaceedda_1_1dist.html#a963983f8e973f9cf381ef37379ec4b81',1,'edda::dist']]], - ['getcelltype',['getCellType',['../classedda_1_1Grid.html#a6bc09e138a4e000284935c1797799c92',1,'edda::Grid::getCellType()'],['../classedda_1_1CartesianGrid.html#a5fcd49675005e39a9a5bf04cff1192a0',1,'edda::CartesianGrid::getCellType()'],['../classedda_1_1RegularCartesianGrid.html#aed25647409c250191b9f4c5b64de2484',1,'edda::RegularCartesianGrid::getCellType()']]], - ['getcellvertices',['getCellVertices',['../classedda_1_1Grid.html#a03a9c59b80664b69e0225966691a3648',1,'edda::Grid::getCellVertices()'],['../classedda_1_1CartesianGrid.html#a8320281bcfe0b9f7fad04cbb6f4dd080',1,'edda::CartesianGrid::getCellVertices()'],['../classedda_1_1RegularCartesianGrid.html#adbec43a3b5345edec3b92299777ed6f2',1,'edda::RegularCartesianGrid::getCellVertices()']]], - ['getdata',['getData',['../classedda_1_1Tuple.html#a595e7069d531212beee67ef8286db5f6',1,'edda::Tuple::getData()'],['../classedda_1_1Tuple.html#a8a33b4bad6ab1f30b6decf6343261db5',1,'edda::Tuple::getData() const '],['../classedda_1_1Dataset.html#acfded9296fa3c02b30c3ffc51b5bd4bb',1,'edda::Dataset::getData(int idx, Type &data) const '],['../classedda_1_1Dataset.html#a8991544e9b6ff376b3b19f0073269e3d',1,'edda::Dataset::getData(int idx, Vector< Type, N > &data) const '],['../test__vtk__pipeline_8cpp.html#a65d2448c2a9316cad917af150222ecce',1,'getData(): test_vtk_pipeline.cpp']]], - ['getdatatype',['GetDataType',['../classvtkSamplingArray.html#af2609f92870c3ed88905da20232e6e6e',1,'vtkSamplingArray::GetDataType()'],['../classeddaSamplingArray.html#aca5347384a310ff910c41985fdd6a71b',1,'eddaSamplingArray::GetDataType()']]], - ['getdatatypesize',['GetDataTypeSize',['../classvtkSamplingArray.html#a3d3fab21cd89c9a7c37a4881aba64886',1,'vtkSamplingArray::GetDataTypeSize()'],['../classeddaSamplingArray.html#a592f5afb03e3826d9f3eb26cb868eca1',1,'eddaSamplingArray::GetDataTypeSize()']]], - ['getdimension',['getDimension',['../classedda_1_1Dataset.html#a0dc71932f495f2bcf2f8f625e4dfc9a3',1,'edda::Dataset::getDimension()'],['../classedda_1_1CartesianGrid.html#aa9e3f187b8ff610ddca88795b8c55eb5',1,'edda::CartesianGrid::getDimension()']]], - ['getfileextension',['getFileExtension',['../namespaceedda.html#ac59d3b1cb5943a0ea7f5d13d9f3a2b9c',1,'edda::getFileExtension(const string &filename)'],['../namespaceedda.html#aca9694333df360407cbe5fcf95d13096',1,'edda::getFileExtension(const std::string &filename)']]], - ['getfilename',['getFilename',['../namespaceedda.html#aa4f1eea26a3db487019ad2c5c2bd5ccc',1,'edda']]], - ['getgrid',['getGrid',['../classedda_1_1Dataset.html#acf435e0080a5f00527dc49d61ad96650',1,'edda::Dataset']]], - ['getgridspacing',['getGridSpacing',['../classedda_1_1Grid.html#a253dfed75ec539a26f993c9f75a87a75',1,'edda::Grid::getGridSpacing()'],['../classedda_1_1CartesianGrid.html#a2f5865f683be69cb92e64f6d9c4d9814',1,'edda::CartesianGrid::getGridSpacing()'],['../classedda_1_1RegularCartesianGrid.html#a49a0bbd594f86199ccb997729a3ccc0a',1,'edda::RegularCartesianGrid::getGridSpacing()']]], - ['getindex',['getIndex',['../classedda_1_1CartesianGrid.html#a717a62a55b2244d94ee0daba808500e2',1,'edda::CartesianGrid']]], - ['getinterptype',['getInterpType',['../classedda_1_1Grid.html#af900e5f451efd731b8ec282c67334547',1,'edda::Grid::getInterpType()'],['../classedda_1_1CartesianGrid.html#aa206aa1bf588c180b8cfbe63723757b8',1,'edda::CartesianGrid::getInterpType()']]], - ['getitem',['getItem',['../classedda_1_1AbstractDataArray.html#af59b2bbdeadeddea90a2f9d22d057dfa',1,'edda::AbstractDataArray::getItem()'],['../classedda_1_1DataSamplingArray.html#aa0e3e26e84c38c8252cdcddcca3e1168',1,'edda::DataSamplingArray::getItem()'],['../classedda_1_1ScalarArray.html#a26506ab978225aae83454a8f7a000163',1,'edda::ScalarArray::getItem()'],['../classedda_1_1VectorArray.html#a73bd4bad60609b662b61c818cc9517b2',1,'edda::VectorArray::getItem()'],['../classedda_1_1GmmVtkDataArray.html#a715a8a0ae4570b861f1f22ced0a6743f',1,'edda::GmmVtkDataArray::getItem()']]], - ['getlength',['getLength',['../classedda_1_1shared__ary.html#a7e0edb1932334df3a1c4174aec3347ef',1,'edda::shared_ary::getLength()'],['../classedda_1_1AbstractDataArray.html#a7f25dbb3907b82fb35a2a6465c57497b',1,'edda::AbstractDataArray::getLength()'],['../classedda_1_1DataSamplingArray.html#aedd8686f8f05792f862e8537e6e5bba5',1,'edda::DataSamplingArray::getLength()'],['../classedda_1_1ScalarArray.html#ab5d941d19575ba5a0eac6c700cb81f1d',1,'edda::ScalarArray::getLength()'],['../classedda_1_1VectorArray.html#a058c81b9c6693539b0166e8a36365612',1,'edda::VectorArray::getLength()'],['../classedda_1_1GmmVtkDataArray.html#ae253c523c5d1488fb18214cfe4df4c78',1,'edda::GmmVtkDataArray::getLength()']]], - ['getmag',['getMag',['../classedda_1_1Vector.html#ac06066eb3afd0fab6de89d42256a884a',1,'edda::Vector::getMag()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a2c46ece01225f6cca913d19979f34f62',1,'edda::Vector< Real, 3 >::getMag()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#afc9ac78de6ea4e52b3035cb2f39e7795',1,'edda::Vector< Real, 4 >::getMag()']]], - ['getmax',['getMax',['../classedda_1_1Vector.html#a0efa64201ee38c0e5f8f16b9fa719be5',1,'edda::Vector::getMax()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd90bee3d0cc11749bc7322b0911c4c8',1,'edda::Vector< Real, 3 >::getMax()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#afe21b6c9d9656d14a887b49fe96af090',1,'edda::Vector< Real, 4 >::getMax()']]], - ['getmean',['getMean',['../namespaceedda_1_1dist.html#aa647a75ef90d5ec917d5d82cee61e35a',1,'edda::dist::getMean(const T &dist)'],['../namespaceedda_1_1dist.html#ad57b2fa1045786424910800ecb46d95f',1,'edda::dist::getMean(const Tuple< T, N > &dist)'],['../namespaceedda_1_1dist.html#aa90608d9ba4ac81988b490f6a431910f',1,'edda::dist::getMean(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#af5e42adfe6c6317ccfbc85744476b6aa',1,'edda::dist::getMean(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#a994a5806eeb6bfd42d487393d94d38df',1,'edda::dist::getMean(const Variant &dist)']]], - ['getnumcomponents',['getNumComponents',['../classedda_1_1AbstractDataArray.html#a95a0b368f5867ca8ad283cacfe067760',1,'edda::AbstractDataArray::getNumComponents()'],['../classedda_1_1DataSamplingArray.html#a748c18ccfc9b23d8d8d95cfda3188820',1,'edda::DataSamplingArray::getNumComponents()'],['../classedda_1_1ScalarArray.html#ab5c90ef4f106ee6b827c53d708f12747',1,'edda::ScalarArray::getNumComponents()'],['../classedda_1_1VectorArray.html#ab55dfed7c680f323c0990c35ee96abfa',1,'edda::VectorArray::getNumComponents()'],['../classedda_1_1GmmVtkDataArray.html#a52a2a8b8afa15807ec7ca859b712e66b',1,'edda::GmmVtkDataArray::getNumComponents()']]], - ['getoutput',['GetOutput',['../classvtkEddaReader.html#acc58191423c9bb76422520a02c649c2a',1,'vtkEddaReader::GetOutput()'],['../classvtkEddaReader.html#a9f3294899f4bc2d940d1dd14635d6c1b',1,'vtkEddaReader::GetOutput(int idx)']]], - ['getpath',['getPath',['../namespaceedda.html#a33c899f398e10b56ea24b4a0aebc403e',1,'edda']]], - ['getpdf',['getPdf',['../namespaceedda_1_1dist.html#ab49c27e7d7ee9b8c26bea6bf735c92dd',1,'edda::dist::getPdf(const Gaussian &dist, const double x)'],['../namespaceedda_1_1dist.html#a7da5da407561b88b86cbd9c72749efce',1,'edda::dist::getPdf(const GaussianMixture< GMMs > &dist, const double x)'],['../namespaceedda_1_1dist.html#a2053d1af598768527673eceecde7c309',1,'edda::dist::getPdf(const Variant &dist, double x)']]], - ['getposition',['getPosition',['../structedda_1_1GetPositionAsIs.html#a05f5568ab6c91b17c3e611dbd7535ae4',1,'edda::GetPositionAsIs::getPosition()'],['../structedda_1_1GetPositionFromDistributionMean.html#a6bd189b05a1b73f8fcddfed44e311a0c',1,'edda::GetPositionFromDistributionMean::getPosition()']]], - ['getrawarray',['getRawArray',['../classedda_1_1AbstractDataArray.html#af7070129998073a6fe0bc1ffc259d31d',1,'edda::AbstractDataArray::getRawArray()'],['../classedda_1_1DataSamplingArray.html#a6aae3e35466acb5dc659c2dbbab5c523',1,'edda::DataSamplingArray::getRawArray()'],['../classedda_1_1ScalarArray.html#aeff0d890ae2f1e024c175bbcec21f00c',1,'edda::ScalarArray::getRawArray()'],['../classedda_1_1VectorArray.html#a52ebb5d335b08eeb7f0f965ba4ea11a4',1,'edda::VectorArray::getRawArray()'],['../classedda_1_1GmmVtkDataArray.html#a01d173f90474b4af8ba5a56ebeb1a3f7',1,'edda::GmmVtkDataArray::getRawArray()']]], - ['getsample',['getSample',['../namespaceedda_1_1dist.html#a9885c551a8bdba31a86d259358b92b3a',1,'edda::dist::getSample(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a72b01a24c403bf720b720f3725799d22',1,'edda::dist::getSample(const Gaussian &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a842831a08d95719388f98462dadaec08',1,'edda::dist::getSample(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#ad890c0da31f057aa0a856e98dbd5b89d',1,'edda::dist::getSample(const GaussianMixture< GMMs > &dist, thrust::default_random_engine &rng)'],['../namespaceedda_1_1dist.html#a77d1842129bc870fa0ea6c6a9a73ae29',1,'edda::dist::getSample(const Variant &dist)'],['../namespaceedda_1_1dist.html#a98351fba7bddbd637f89560bd6f74518',1,'edda::dist::getSample(const Vector< Dist, N > &v)']]], - ['getscalar',['getScalar',['../classedda_1_1AbstractDataArray.html#a9cd2e7ece1d3287650d00923fcd7ec0d',1,'edda::AbstractDataArray::getScalar()'],['../classedda_1_1DataSamplingArray.html#a92f7b99b222f6ddf935fc0ccd5d52d58',1,'edda::DataSamplingArray::getScalar()'],['../classedda_1_1ScalarArray.html#a7fa33454d6e995bf6d7edbf7aa029096',1,'edda::ScalarArray::getScalar()'],['../classedda_1_1VectorArray.html#ae47a8e6c9d3621ef5588b3b2a831f61f',1,'edda::VectorArray::getScalar()'],['../classedda_1_1GmmVtkDataArray.html#a42f57d6c03d51f57b73921c94cdae1e0',1,'edda::GmmVtkDataArray::getScalar()']]], - ['getsource',['GetSource',['../classeddaRandomProbeFilter.html#a654017afa9fbc870c947ea4833c26056',1,'eddaRandomProbeFilter']]], - ['getstepsize',['getStepSize',['../namespaceedda.html#aa3b8bbdd2ee47371f895f59cb7b998b2',1,'edda']]], - ['gettuple',['GetTuple',['../classvtkSamplingArray.html#a8cb7724cd5a5d880fb83c5a16d933758',1,'vtkSamplingArray::GetTuple(vtkIdType i)'],['../classvtkSamplingArray.html#a9198e7cb513cfd40cf01871d1bc6cae0',1,'vtkSamplingArray::GetTuple(vtkIdType i, double *tuple)'],['../classeddaSamplingArray.html#ab2dccfe1f54d510c301f36f431efa7d8',1,'eddaSamplingArray::GetTuple(vtkIdType i)'],['../classeddaSamplingArray.html#a21d51b69cde556e775bcbbda111698c0',1,'eddaSamplingArray::GetTuple(vtkIdType i, double *tuple)']]], - ['gettuples',['GetTuples',['../classvtkSamplingArray.html#a7bebc7aedd34a523b56b62157968df89',1,'vtkSamplingArray::GetTuples()'],['../classeddaSamplingArray.html#a006f8736c0022ca398aa1e0a4ee0cacb',1,'eddaSamplingArray::GetTuples()']]], - ['getvar',['getVar',['../namespaceedda_1_1dist.html#ae1a0a4253e7afaee605973f5fdb6ede5',1,'edda::dist::getVar(const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a31f7eacc233c2d776db7d696c65603a0',1,'edda::dist::getVar(const GaussianMixture< GMMs > &dist)'],['../namespaceedda_1_1dist.html#aa25f0db989602c94afc4c166db827029',1,'edda::dist::getVar(const Variant &dist)']]], - ['getvector',['getVector',['../classedda_1_1AbstractDataArray.html#a4631c8b1d81460a8319b853d09403db6',1,'edda::AbstractDataArray::getVector()'],['../classedda_1_1DataSamplingArray.html#a5efeb57907431fa9ee9f755ac5bd7849',1,'edda::DataSamplingArray::getVector()'],['../classedda_1_1ScalarArray.html#a324332d06930633966ee4db81f1a47a5',1,'edda::ScalarArray::getVector()'],['../classedda_1_1VectorArray.html#a3e1570929f1aec18d4883b86916b896b',1,'edda::VectorArray::getVector()'],['../classedda_1_1GmmVtkDataArray.html#a32281833ca01307e505282a71c50a00c',1,'edda::GmmVtkDataArray::getVector()']]], - ['getvoidpointer',['GetVoidPointer',['../classvtkSamplingArray.html#af376e0857696d553d3032646ef8ddb37',1,'vtkSamplingArray::GetVoidPointer()'],['../classeddaSamplingArray.html#aaa1270ca6c35fea4ef70cbf412d2be0a',1,'eddaSamplingArray::GetVoidPointer()']]], - ['gmmarray',['GmmArray',['../classedda_1_1GmmArray.html#a8882c526949846d7dcd0af6227073e55',1,'edda::GmmArray::GmmArray()'],['../classedda_1_1GmmArray.html#a72bae3ef6338366cb29dd4624a94e0f0',1,'edda::GmmArray::GmmArray(std::vector< NdArray< Real > > &data_)']]], - ['gmmvtkdataarray',['GmmVtkDataArray',['../classedda_1_1GmmVtkDataArray.html#a4a7d87c6074f386ae136fb3806173d7e',1,'edda::GmmVtkDataArray::GmmVtkDataArray(vtkFieldData *fieldData, const char *arrayNamePrefix="")'],['../classedda_1_1GmmVtkDataArray.html#a7222e89309e565a3406b71a72375a6f1',1,'edda::GmmVtkDataArray::GmmVtkDataArray(std::vector< vtkSmartPointer< vtkDataArray > > arrays_)']]], - ['grid',['Grid',['../classedda_1_1Grid.html#a1a342186fd933582723559004dd25489',1,'edda::Grid']]] + ['hexahedral_5fwalk_5flocate',['hexahedral_walk_locate',['../classedda_1_1CurvilinearGrid.html#a2a0891b203a599ff8294a2ccf6debf77',1,'edda::CurvilinearGrid']]], + ['histoarray',['HistoArray',['../classedda_1_1HistoArray.html#ad0b8063073cedb2dbb3041ca088516c2',1,'edda::HistoArray::HistoArray()'],['../classedda_1_1HistoArray.html#aa5fe8af9532ea51b928bd84f591ec6cd',1,'edda::HistoArray::HistoArray(std::vector< NdArray< Real > > &data_)']]], + ['histogram',['Histogram',['../classedda_1_1dist_1_1Histogram.html#a8fcf6c3d74130f50f94aafa76eb81d32',1,'edda::dist::Histogram::Histogram()'],['../classedda_1_1dist_1_1Histogram.html#a24ab247c7281b007a4baa6e6feff325f',1,'edda::dist::Histogram::Histogram(double *histData)'],['../classedda_1_1dist_1_1Histogram.html#a04eed91a93b061ad335c20c07970f90c',1,'edda::dist::Histogram::Histogram(float *histData, int _nBins)'],['../classedda_1_1dist_1_1Histogram.html#aa029ee6d7eb33fe94236d5cb6873a19a',1,'edda::dist::Histogram::Histogram(Real *dataArray, int nElements, const int _nBins, const Real _minValue=1, const Real _maxValue=-1)'],['../classedda_1_1dist_1_1Histogram.html#a76a5afd7910e7afb1e2e311297528586',1,'edda::dist::Histogram::Histogram(const Histogram &hist)']]] ]; diff --git a/html/search/functions_8.html b/html/search/functions_8.html index afd4fac..347734a 100644 --- a/html/search/functions_8.html +++ b/html/search/functions_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_8.js b/html/search/functions_8.js index 9125e6a..cc97701 100644 --- a/html/search/functions_8.js +++ b/html/search/functions_8.js @@ -1,14 +1,21 @@ var searchData= [ - ['initialize',['Initialize',['../classvtkSamplingArray.html#ac9878436dbd495d86e101b866c4d3a08',1,'vtkSamplingArray::Initialize()'],['../classeddaSamplingArray.html#a2d54b23cd3cc796fca8d8dcca59e1461',1,'eddaSamplingArray::Initialize()']]], + ['identity',['Identity',['../classedda_1_1MATRIX3.html#aa3578f2299cffbe6d46388c4afc89d37',1,'edda::MATRIX3']]], + ['init_5fjacobian_5fvectors',['init_jacobian_vectors',['../classedda_1_1CurvilinearGrid.html#adab903c5a72441472ff90ff176342d86',1,'edda::CurvilinearGrid']]], + ['inithistogram',['initHistogram',['../classedda_1_1DistributionModeler.html#a8c37ffbbf6ba2915785eb4c38630a5ca',1,'edda::DistributionModeler::initHistogram()'],['../classedda_1_1VecDistrModeler.html#a7d9d4ef5a891e06b5137e929b2a011dc',1,'edda::VecDistrModeler::initHistogram()']]], + ['initialize',['Initialize',['../classeddaSamplingArray.html#a2d54b23cd3cc796fca8d8dcca59e1461',1,'eddaSamplingArray']]], ['initializedata',['InitializeData',['../classeddaRandomSampleField.html#a5fe3bf9581ae4d2b5fa64fa0066f1e7d',1,'eddaRandomSampleField::InitializeData()'],['../classeddaUncertainIsocontour.html#aa6fb89df5e14e1af150663400d0b0928',1,'eddaUncertainIsocontour::InitializeData()']]], ['initializeforprobing',['InitializeForProbing',['../classeddaRandomProbeFilter.html#a0fb8a8b51fd20381b2c8e9c0af7979b4',1,'eddaRandomProbeFilter']]], - ['insertnexttuple',['InsertNextTuple',['../classvtkSamplingArray.html#ae5c97d95a1bdaf4adcc7eafc94307061',1,'vtkSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#aeee0f267a87d48967589240c6e10fcee',1,'vtkSamplingArray::InsertNextTuple(const float *tuple)'],['../classvtkSamplingArray.html#a34e50a7a59c79d575bb8fd24aa1cac79',1,'vtkSamplingArray::InsertNextTuple(const double *tuple)'],['../classeddaSamplingArray.html#a5a53d3af13b49fcc96d5740cc6f65c41',1,'eddaSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ad1dcfaae658f8f654a36b5f44169d05c',1,'eddaSamplingArray::InsertNextTuple(const float *tuple)'],['../classeddaSamplingArray.html#a6a217b33265b7c1479e599426ea9bb93',1,'eddaSamplingArray::InsertNextTuple(const double *tuple)']]], - ['inserttuple',['InsertTuple',['../classvtkSamplingArray.html#a7079fab8f11b3b2722e4dbf7abb97745',1,'vtkSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a09661d340900f7aecee9f3afc1e734e2',1,'vtkSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classvtkSamplingArray.html#aa5ac71bb2f6c66897bcd32ff8f8b8b7e',1,'vtkSamplingArray::InsertTuple(vtkIdType i, const double *tuple)'],['../classeddaSamplingArray.html#a3790cca34e0ab1d26fdcb34615b18711',1,'eddaSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ac35f9f51620a0f2041a23c7b97c696a1',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#a75595f1dc37a34015c4a6f61a928c460',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const double *tuple)']]], - ['inserttuples',['InsertTuples',['../classvtkSamplingArray.html#a16e278b6c71acdbbf3eee17f5ba441c6',1,'vtkSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a5ede4d98e477ed0a99e842aa684ffa6b',1,'vtkSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#aefef60a43c103e6c068f9ee808d8e2ff',1,'eddaSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a97382f7737b3062f4bcba5346b0d5db5',1,'eddaSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)']]], - ['insertvariantvalue',['InsertVariantValue',['../classvtkSamplingArray.html#a080bbcfa9a56ce38678e5ffb5295d4d1',1,'vtkSamplingArray::InsertVariantValue()'],['../classeddaSamplingArray.html#a8cc4b752c04c2d717f696c444de90fcf',1,'eddaSamplingArray::InsertVariantValue()']]], - ['isfilenameonly',['isFilenameOnly',['../namespaceedda.html#a650c15dfb37c601b775c77c0cae2e2e8',1,'edda::isFilenameOnly(const string &filename)'],['../namespaceedda.html#aeb61617b7fd35e528be54559ab4b791e',1,'edda::isFilenameOnly(const std::string &filename)']]], - ['isinbbox',['isInBBox',['../classedda_1_1Grid.html#ae408bdf07e1399a49b8ed072a6cea3f0',1,'edda::Grid::isInBBox()'],['../classedda_1_1RegularCartesianGrid.html#af49f1b4e511b1483270ac7bd56582246',1,'edda::RegularCartesianGrid::isInBBox()']]], - ['isincell',['isInCell',['../classedda_1_1Grid.html#a1b894a56e8196bde04c97c4e96356b98',1,'edda::Grid::isInCell()'],['../classedda_1_1RegularCartesianGrid.html#abe0e246ccf092b9de8dc51c37bdd8902',1,'edda::RegularCartesianGrid::isInCell()']]], - ['isinrealbbox',['isInRealBBox',['../classedda_1_1Grid.html#a44af2580d9f5b7daaaec751af572d4d3',1,'edda::Grid::isInRealBBox(VECTOR3 &p)=0'],['../classedda_1_1Grid.html#a9f1b1592679771450108ef0efb853211',1,'edda::Grid::isInRealBBox(VECTOR3 &pos, float t)=0'],['../classedda_1_1RegularCartesianGrid.html#af356418f390fe9fad0d47b391e402fc5',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1RegularCartesianGrid.html#a8641391fbf8dc4313b80a0723996119b',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos, float t)']]] + ['initvectorcomponent',['initVectorComponent',['../classedda_1_1VecDistrModeler.html#a19bd3017c95d296d29e38f26d41da049',1,'edda::VecDistrModeler']]], + ['insertnexttuple',['InsertNextTuple',['../classeddaSamplingArray.html#a5a53d3af13b49fcc96d5740cc6f65c41',1,'eddaSamplingArray::InsertNextTuple(vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ad1dcfaae658f8f654a36b5f44169d05c',1,'eddaSamplingArray::InsertNextTuple(const float *tuple)'],['../classeddaSamplingArray.html#a6a217b33265b7c1479e599426ea9bb93',1,'eddaSamplingArray::InsertNextTuple(const double *tuple)']]], + ['inserttuple',['InsertTuple',['../classeddaSamplingArray.html#a3790cca34e0ab1d26fdcb34615b18711',1,'eddaSamplingArray::InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#ac35f9f51620a0f2041a23c7b97c696a1',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#a75595f1dc37a34015c4a6f61a928c460',1,'eddaSamplingArray::InsertTuple(vtkIdType i, const double *tuple)']]], + ['inserttuples',['InsertTuples',['../classeddaSamplingArray.html#aefef60a43c103e6c068f9ee808d8e2ff',1,'eddaSamplingArray::InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a97382f7737b3062f4bcba5346b0d5db5',1,'eddaSamplingArray::InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)']]], + ['insertvariantvalue',['InsertVariantValue',['../classeddaSamplingArray.html#a8cc4b752c04c2d717f696c444de90fcf',1,'eddaSamplingArray']]], + ['inverse',['inverse',['../classedda_1_1MATRIX3.html#a85fba645c6aef23b057514485a745c50',1,'edda::MATRIX3']]], + ['inverse_5fjacobian_5ft',['inverse_jacobian_t',['../classedda_1_1CurvilinearGrid.html#a99ba7a06aa358bb42288c643d7ec0d46',1,'edda::CurvilinearGrid']]], + ['invert_5fmatrix',['invert_matrix',['../namespaceedda.html#a5a86f75ae6bab789e3b007f2c7baf953',1,'edda']]], + ['isfilenameonly',['isFilenameOnly',['../namespaceedda.html#a650c15dfb37c601b775c77c0cae2e2e8',1,'edda::isFilenameOnly(const string &filename)'],['../namespaceedda.html#a78433ff250adc5c1a5acd7e1c3fc1167',1,'edda::isFilenameOnly(const std::string &filename)']]], + ['isinbbox',['isInBBox',['../classedda_1_1CurvilinearGrid.html#aa5ec9f4860ea445e2ea00a050a37f5d7',1,'edda::CurvilinearGrid::isInBBox()'],['../classedda_1_1Grid.html#ae408bdf07e1399a49b8ed072a6cea3f0',1,'edda::Grid::isInBBox()'],['../classedda_1_1RegularCartesianGrid.html#af49f1b4e511b1483270ac7bd56582246',1,'edda::RegularCartesianGrid::isInBBox()']]], + ['isincell',['isInCell',['../classedda_1_1CurvilinearGrid.html#ad956441c37414f6c499b0c3339c31fa7',1,'edda::CurvilinearGrid::isInCell()'],['../classedda_1_1Grid.html#a1b894a56e8196bde04c97c4e96356b98',1,'edda::Grid::isInCell()'],['../classedda_1_1RegularCartesianGrid.html#abe0e246ccf092b9de8dc51c37bdd8902',1,'edda::RegularCartesianGrid::isInCell()']]], + ['isinrealbbox',['isInRealBBox',['../classedda_1_1CurvilinearGrid.html#af3a6e64599a5cdf193ac4b9c68b6804d',1,'edda::CurvilinearGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1CurvilinearGrid.html#a0a4030e55cf42268c402d37125cb116f',1,'edda::CurvilinearGrid::isInRealBBox(VECTOR3 &pos, float t)'],['../classedda_1_1Grid.html#a44af2580d9f5b7daaaec751af572d4d3',1,'edda::Grid::isInRealBBox(VECTOR3 &p)=0'],['../classedda_1_1Grid.html#a9f1b1592679771450108ef0efb853211',1,'edda::Grid::isInRealBBox(VECTOR3 &pos, float t)=0'],['../classedda_1_1RegularCartesianGrid.html#af356418f390fe9fad0d47b391e402fc5',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos)'],['../classedda_1_1RegularCartesianGrid.html#a8641391fbf8dc4313b80a0723996119b',1,'edda::RegularCartesianGrid::isInRealBBox(VECTOR3 &pos, float t)']]] ]; diff --git a/html/search/functions_9.html b/html/search/functions_9.html index 542b9e0..6999e7e 100644 --- a/html/search/functions_9.html +++ b/html/search/functions_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_9.js b/html/search/functions_9.js index d33701f..938a5d9 100644 --- a/html/search/functions_9.js +++ b/html/search/functions_9.js @@ -1,17 +1,7 @@ var searchData= [ - ['length',['length',['../classedda_1_1Tuple.html#a215ff458f27cc0fe956891848c6c7fc9',1,'edda::Tuple']]], - ['lerp',['lerp',['../namespaceedda.html#a11b2f402dfb2825dd367b2746ea4de3b',1,'edda']]], - ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a83000c2b698e25f4965363b9ec9f7d07',1,'edda::detail::LevelCrossingFunctor']]], - ['levelcrossingprob',['levelCrossingProb',['../namespaceedda.html#a10964cd6e9d723498536ca77b487f664',1,'edda']]], - ['loaddata',['loadData',['../namespaceedda.html#af9dab9d3a9c202d56da2edb4137c3e34',1,'edda']]], - ['loadgaussianrawarray',['loadGaussianRawArray',['../namespaceedda.html#ad0bdbe77e68ea2bc22b1a708e21e6baa',1,'edda::loadGaussianRawArray(string meanfile, string stdfile, size_t len)'],['../namespaceedda.html#a553d9689ba28d5278a6c938e1b2bcdad',1,'edda::loadGaussianRawArray(std::string meanfile, std::string stdfile, size_t len)']]], - ['loadgaussianregulargrids',['loadGaussianRegularGrids',['../namespaceedda.html#a770a1dc2f490ee6b674ebc7d37aff2e8',1,'edda::loadGaussianRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#aa7e1bcd4725ccc86da94b89f6cfd9874',1,'edda::loadGaussianRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadgaussiansamplingregulargrids',['loadGaussianSamplingRegularGrids',['../namespaceedda.html#aa147eaacf686f9ca543b76d40f895478',1,'edda::loadGaussianSamplingRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#a850c736f7689de01f62dede353d555c2',1,'edda::loadGaussianSamplingRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadrawfile',['loadRawFile',['../namespaceedda.html#ab3649691ea7a7b3e0bc37a636578b223',1,'edda']]], - ['loadvec3gaussianrawarray',['loadVec3GaussianRawArray',['../namespaceedda.html#a9d41bb881d0825bb5ab0f32b7ea4a0c2',1,'edda::loadVec3GaussianRawArray(string meanfile, string stdfile, size_t len)'],['../namespaceedda.html#a4e31702f23f37b96cdcf16fb03846808',1,'edda::loadVec3GaussianRawArray(std::string meanfile, std::string stdfile, size_t len)']]], - ['loadvec3gaussianregulargrids',['loadVec3GaussianRegularGrids',['../namespaceedda.html#ab2fb088e61990e94cc358cf02017af99',1,'edda::loadVec3GaussianRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#aa084dc0f2ddd1a90149bc0c9913b8965',1,'edda::loadVec3GaussianRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadvec3gaussiansamplingregulargrids',['loadVec3GaussianSamplingRegularGrids',['../namespaceedda.html#a7594c8d9d0a433f24bebc894d95c781d',1,'edda::loadVec3GaussianSamplingRegularGrids(string &meanfile, string &stdfile, int dim[3])'],['../namespaceedda.html#a2d146a5d586cc1cf8dba62e45393eca1',1,'edda::loadVec3GaussianSamplingRegularGrids(std::string &meanfile, std::string &stdfile, int dim[3])']]], - ['loadvectordata',['loadVectorData',['../namespaceedda.html#a92a51d8e27341b8b713f144c7919aef4',1,'edda']]], - ['lookupvalue',['LookupValue',['../classvtkSamplingArray.html#a9dd53fbbbec73e4605cab387b829d70b',1,'vtkSamplingArray::LookupValue(vtkVariant value)'],['../classvtkSamplingArray.html#a721c8f15feee37c9f3dca448df2b2965',1,'vtkSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)'],['../classeddaSamplingArray.html#a8e2d7af44f27052d28b093209b2525ba',1,'eddaSamplingArray::LookupValue(vtkVariant value)'],['../classeddaSamplingArray.html#ad68fe2bb7916ad21caeea2ddea3a655b',1,'eddaSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)']]] + ['jointdistrarray',['JointDistrArray',['../classedda_1_1JointDistrArray.html#afddb4a57585b39908f240797726dc120',1,'edda::JointDistrArray::JointDistrArray(shared_ary< Distr > array, int num_comps)'],['../classedda_1_1JointDistrArray.html#a083660787ae85d08d0ba013bd70c03a2',1,'edda::JointDistrArray::JointDistrArray(shared_ary< Distr > array)']]], + ['jointgaussian',['JointGaussian',['../structedda_1_1dist_1_1JointGaussian.html#af3b46828cb14f0ae54211364973ed7d6',1,'edda::dist::JointGaussian::JointGaussian()'],['../structedda_1_1dist_1_1JointGaussian.html#a17ff41d9125c26c925da8352b1f3892c',1,'edda::dist::JointGaussian::JointGaussian(const ublas_vector &mean, const ublas_matrix &cov)']]], + ['jointgmm',['JointGMM',['../classedda_1_1dist_1_1JointGMM.html#a05da04ffd4ecb9a2d92852ec395df755',1,'edda::dist::JointGMM::JointGMM()'],['../classedda_1_1dist_1_1JointGMM.html#ac77e7e74791e1f8448e6ed539c7ffe31',1,'edda::dist::JointGMM::JointGMM(const JointGMM &gmm)']]], + ['jointhistogram',['JointHistogram',['../structedda_1_1dist_1_1JointHistogram.html#a45163a4ab60ddc5ef248975a124b8e5c',1,'edda::dist::JointHistogram::JointHistogram()'],['../structedda_1_1dist_1_1JointHistogram.html#acd11826fedf1978f822a998f8652f27d',1,'edda::dist::JointHistogram::JointHistogram(std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)'],['../structedda_1_1dist_1_1JointHistogram.html#a2dba9cf6f5d62c43921f8065aa382260',1,'edda::dist::JointHistogram::JointHistogram(int nVars, std::vector< Real > mins, std::vector< Real > maxs, std::vector< Real > binWidths, std::vector< int > nBins, boost::unordered_map< std::vector< int >, Real > new_pdf, ublas_vector new_mean, ublas_matrix new_cov)']]] ]; diff --git a/html/search/functions_a.html b/html/search/functions_a.html index 94fd395..8ca8f11 100644 --- a/html/search/functions_a.html +++ b/html/search/functions_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_a.js b/html/search/functions_a.js index 2c91bcb..d8c424a 100644 --- a/html/search/functions_a.js +++ b/html/search/functions_a.js @@ -1,6 +1,17 @@ var searchData= [ - ['main',['main',['../denseSamplingField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): denseSamplingField.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): fuzzyIsocontourVTK.cpp'],['../randomSample_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): randomSample.cpp'],['../streamlineGaussianVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineMonteCarlo.cpp'],['../uncertainIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): uncertainIsocontourVTK.cpp'],['../loadGaussianScalarField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadGaussianScalarField.cpp'],['../loadGaussianVectorField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadGaussianVectorField.cpp'],['../test__variant_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_variant.cpp'],['../test__vtk__pipeline_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): test_vtk_pipeline.cpp'],['../test__vtkEddaReader_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtkEddaReader.cpp'],['../gmm__raw2vtk_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): gmm_raw2vtk.cpp'],['../test__array_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_array.cpp'],['../test__vtk__filters_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtk_filters.cpp']]], - ['make_5fdataset',['make_Dataset',['../namespaceedda.html#a3f08b2db90fb22fbd37da5e8a7ad8759',1,'edda']]], - ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html#a8684a5ede0a882636924da4213def59a',1,'edda::detail::MakeStridedGmm::MakeStridedGmm()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a9f8475cd1640b85b26165e93363fb705',1,'edda::detail::MakeStridedGmm::MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)']]] + ['length',['length',['../classedda_1_1Tuple.html#a1995e5d1027885bf9fbd1eb492dd62b0',1,'edda::Tuple']]], + ['lerp',['lerp',['../namespaceedda.html#a11b2f402dfb2825dd367b2746ea4de3b',1,'edda']]], + ['levelcrossingfunctor',['LevelCrossingFunctor',['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a83000c2b698e25f4965363b9ec9f7d07',1,'edda::detail::LevelCrossingFunctor']]], + ['levelcrossingprob',['levelCrossingProb',['../namespaceedda.html#a10964cd6e9d723498536ca77b487f664',1,'edda']]], + ['loadeddadataset',['loadEddaDataset',['../namespaceedda.html#a31366f061dcd4fdbcb594962a0a92123',1,'edda']]], + ['loadeddadatasettemplate',['loadEddaDatasetTemplate',['../namespaceedda.html#af8e5336e85fafb75fbbb554976e3c5f1',1,'edda']]], + ['loadeddascalardataset',['loadEddaScalarDataset',['../namespaceedda.html#a232e8d200d03969dfda8651f4595413b',1,'edda::loadEddaScalarDataset(const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#a044d1013647d14c501d7439e0107461b',1,'edda::loadEddaScalarDataset(const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['loadeddascalardataset_5fnonevtk',['loadEddaScalarDataset_noneVTK',['../namespaceedda.html#a0176f3df770a81a866555d83031314e0',1,'edda::loadEddaScalarDataset_noneVTK(const string &edda_file)'],['../namespaceedda.html#ab31a6c38e69fb7d44f6881d72f445c45',1,'edda::loadEddaScalarDataset_noneVTK(const std::string &edda_file)']]], + ['loadeddavector3dataset',['loadEddaVector3Dataset',['../namespaceedda.html#a87ca0e53d7d40f1273b6bbbccdf6f359',1,'edda::loadEddaVector3Dataset(const string &edda_file, const string &array_name_prefix)'],['../namespaceedda.html#a23d552e79d112a68ff0ace5c522fae54',1,'edda::loadEddaVector3Dataset(const std::string &edda_file, const std::string &array_name_prefix="")']]], + ['loadeddavector3dataset_5fnonevtk',['loadEddaVector3Dataset_noneVTK',['../namespaceedda.html#adab080ce51506bc7ae6ec2175f790476',1,'edda::loadEddaVector3Dataset_noneVTK(const string &edda_file)'],['../namespaceedda.html#a58f7892f2380f346cab70664a7112f45',1,'edda::loadEddaVector3Dataset_noneVTK(const std::string &edda_file)']]], + ['locate',['locate',['../classedda_1_1CurvilinearGrid.html#ac1961aee6a8ddb5896d3c9154efa8d41',1,'edda::CurvilinearGrid::locate(VECTOR3, Cell &)'],['../classedda_1_1CurvilinearGrid.html#a09dc1627514970ef26560fc87880c26c',1,'edda::CurvilinearGrid::locate(VECTOR3 pp, Cell &prev_cell, Cell &cell)']]], + ['locate_5fclose_5fvertex_5fcell',['locate_close_vertex_cell',['../classedda_1_1CurvilinearGrid.html#af5c50d9d03aa0002baff200d6d205573',1,'edda::CurvilinearGrid']]], + ['locate_5finitialization',['locate_initialization',['../classedda_1_1CurvilinearGrid.html#a7ec4b4c9088d7a282381068cb23c4bc0',1,'edda::CurvilinearGrid']]], + ['lookupvalue',['LookupValue',['../classeddaSamplingArray.html#a8e2d7af44f27052d28b093209b2525ba',1,'eddaSamplingArray::LookupValue(vtkVariant value)'],['../classeddaSamplingArray.html#ad68fe2bb7916ad21caeea2ddea3a655b',1,'eddaSamplingArray::LookupValue(vtkVariant value, vtkIdList *ids)']]] ]; diff --git a/html/search/functions_b.html b/html/search/functions_b.html index 1a03617..a6efa74 100644 --- a/html/search/functions_b.html +++ b/html/search/functions_b.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_b.js b/html/search/functions_b.js index eedf1ce..d6e04a2 100644 --- a/html/search/functions_b.js +++ b/html/search/functions_b.js @@ -1,12 +1,18 @@ var searchData= [ - ['ndarray',['NdArray',['../classedda_1_1NdArray.html#a0abdf947385624a40c4155c8e1bb062a',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#a684a9d17ef355e6326670a9de4b969b1',1,'edda::NdArray::NdArray(int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#a4dfa99dd16afaff2c67f16373387bec5',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims)'],['../classedda_1_1NdArray.html#a66f05b73d99ed3cae72f76055b0a4c96',1,'edda::NdArray::NdArray(Type *data, int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#a66396544ac7769d5b4dc60d92e71ead6',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims)'],['../classedda_1_1NdArray.html#aec8e7397b842ea9296d2f85198bf5465',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dev_ptr, int num_of_dims, int *dims)'],['../classedda_1_1NdArray.html#ae633a1410673ad6097e750b5fa3ba0fa',1,'edda::NdArray::NdArray(const NdArray< Type > &ptr)'],['../classedda_1_1NdArray.html#a1a30d1735b2c3ba3d0ac938b499d0cb4',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#aa9cd12543a68ed9b868c037daa35cf63',1,'edda::NdArray::NdArray(int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a3ff76f2e8debe3f7d59dafed51732e96',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#a2244b2694148f802f617f045f59a4a83',1,'edda::NdArray::NdArray(Type *data, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a91bea3ecf3695047292f851e87448177',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#ac9afd638e4ecfe02e1a670381f3554fc',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dData, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a0c31d15f5a3ac139ba5330d9477fd46a',1,'edda::NdArray::NdArray(const NdArray &obj)']]], - ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html#a773439b81d38c01ceea2a6f87e053ef6',1,'edda::ndarray_iterator']]], - ['new',['New',['../classvtkCompositeUncertainIsocontour.html#aa078cd01aa819c9b4fbea769407a5876',1,'vtkCompositeUncertainIsocontour::New()'],['../classvtkEddaReader.html#af56e2965c0d3c112905d5899020cebda',1,'vtkEddaReader::New()'],['../classeddaRandomProbeFilter.html#ac2e25358fa6d393d0e14b6a9723f9c11',1,'eddaRandomProbeFilter::New()'],['../classeddaRandomSampleField.html#ac97c3e54a48f5623c6d50134171ac68f',1,'eddaRandomSampleField::New()'],['../classeddaThreshold.html#a8667a189d7931b2b2d3b8254e97d5b3f',1,'eddaThreshold::New()'],['../classeddaUncertainIsocontour.html#a92ff4c4b076822b4fb4d9e916173f8d4',1,'eddaUncertainIsocontour::New()']]], - ['newiterator',['NewIterator',['../classvtkSamplingArray.html#a8121dcf4b9e0d537119733225d3bff90',1,'vtkSamplingArray::NewIterator()'],['../classeddaSamplingArray.html#a9db524110a7b67181975c48ce5469c5a',1,'eddaSamplingArray::NewIterator()']]], - ['normalize',['normalize',['../classedda_1_1Vector.html#a7b782d162af77f502480d3cc9dab287f',1,'edda::Vector::normalize()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a44a3c23b172bf3fadb7e4e2b743784e4',1,'edda::Vector< Real, 3 >::normalize()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abeb3985e6b892c60380f37019dd5fc22',1,'edda::Vector< Real, 4 >::normalize()']]], - ['normalizeweights',['normalizeWeights',['../classedda_1_1dist_1_1GaussianMixture.html#a5a23c20c755a9ebf03628d7fbe88be51',1,'edda::dist::GaussianMixture']]], - ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html#a8906b88f0485fab9f5513adf17878c06',1,'edda::NotImplementedException']]], - ['num_5fof_5fdims',['num_of_dims',['../classedda_1_1NdArray.html#acd6b6df685abb90925fe856c0eec99ea',1,'edda::NdArray']]], - ['num_5fof_5felems',['num_of_elems',['../classedda_1_1NdArray.html#a680c5833ff6e442928e877282a047d99',1,'edda::NdArray']]] + ['main',['main',['../ensembleExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): ensembleExample.cpp'],['../spatialDecompositionExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): spatialDecompositionExample.cpp'],['../vectSpatialDecompExample_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): vectSpatialDecompExample.cpp'],['../gmm__raw2vtk_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): gmm_raw2vtk.cpp'],['../loadCurvilinearDataset_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadCurvilinearDataset.cpp'],['../loadScalarDataset_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): loadScalarDataset.cpp'],['../test__array_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_array.cpp'],['../test__distribution_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_distribution.cpp'],['../test__histogram__io_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_histogram_io.cpp'],['../test__io_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_io.cpp'],['../test__joint__histogram_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_joint_histogram.cpp'],['../test__jointGMM_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): test_jointGMM.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): fuzzyIsocontourVTK.cpp'],['../randomSampleField_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): randomSampleField.cpp'],['../streamlineMonteCarlo_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): streamlineMonteCarlo.cpp'],['../test__vtk__filters_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): test_vtk_filters.cpp'],['../uncertainIsocontourVTK_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv): uncertainIsocontourVTK.cpp']]], + ['make_5fdataset',['make_Dataset',['../namespaceedda.html#a8bbd8bc35c8aef9dad8c320fdc6c8b0a',1,'edda']]], + ['make_5fgaussian_5farray',['make_Gaussian_array',['../test__distribution_8cpp.html#afa7c86194420ea1fd6d18b666e7935f5',1,'test_distribution.cpp']]], + ['make_5fgmm2_5farray',['make_GMM2_array',['../test__distribution_8cpp.html#a4597fc5434572264834b9e93b13714ee',1,'test_distribution.cpp']]], + ['make_5fgmm_5farray',['make_GMM_array',['../test__distribution_8cpp.html#ae749b7d1a52474391b17f77ed48e0388',1,'test_distribution.cpp']]], + ['make_5fhybrid_5farray',['make_hybrid_array',['../test__distribution_8cpp.html#abbdf464e7910a232b6238672a672ca8a',1,'test_distribution.cpp']]], + ['make_5fjointgaussian_5farray',['make_JointGaussian_array',['../test__distribution_8cpp.html#a3f698deea47058c02819f6b3ef59d122',1,'test_distribution.cpp']]], + ['make_5fjointhistogram_5farray',['make_JointHistogram_array',['../test__distribution_8cpp.html#a7c8ddfc2fc641ef7daf7705666cf22e3',1,'make_JointHistogram_array(): test_distribution.cpp'],['../test__joint__histogram_8cpp.html#a7c8ddfc2fc641ef7daf7705666cf22e3',1,'make_JointHistogram_array(): test_joint_histogram.cpp']]], + ['makehistogram',['MakeHistogram',['../structedda_1_1detail_1_1MakeHistogram.html#a07c887c64555751c7eea8fc2752aad82',1,'edda::detail::MakeHistogram']]], + ['makestridedgmm',['MakeStridedGmm',['../structedda_1_1detail_1_1MakeStridedGmm.html#a8684a5ede0a882636924da4213def59a',1,'edda::detail::MakeStridedGmm::MakeStridedGmm()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a9f8475cd1640b85b26165e93363fb705',1,'edda::detail::MakeStridedGmm::MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)']]], + ['marginalization',['marginalization',['../structedda_1_1dist_1_1JointHistogram.html#aec77970e71df3ebc73bf394b43a86621',1,'edda::dist::JointHistogram']]], + ['matrix3',['MATRIX3',['../classedda_1_1MATRIX3.html#a786badb0e26328b38e13e306325131e0',1,'edda::MATRIX3::MATRIX3()'],['../classedda_1_1MATRIX3.html#a8f6e126432de41bc92c4004804770a02',1,'edda::MATRIX3::MATRIX3(const VECTOR3 &v0, const VECTOR3 &v1, const VECTOR3 &v2)']]], + ['mc_5fstreamline',['mc_streamline',['../namespaceedda.html#aef2ad1f505da386282ade60d201ba6cd',1,'edda']]], + ['min',['min',['../curvilinear__grid_8cpp.html#af7090876f8d90c439bf9c99a2e3f8509',1,'curvilinear_grid.cpp']]], + ['model',['model',['../classedda_1_1DistributionModeler.html#a2a009935c4d3ab1f0c6222e571039db4',1,'edda::DistributionModeler::model()'],['../classedda_1_1VecDistrModeler.html#a0db71032de909e61cff9ea5120bafbde',1,'edda::VecDistrModeler::model()']]] ]; diff --git a/html/search/functions_c.html b/html/search/functions_c.html index a6536e9..6578665 100644 --- a/html/search/functions_c.html +++ b/html/search/functions_c.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_c.js b/html/search/functions_c.js index b050d44..6eeaef6 100644 --- a/html/search/functions_c.js +++ b/html/search/functions_c.js @@ -1,15 +1,10 @@ var searchData= [ - ['operator_21_3d',['operator!=',['../namespaceedda.html#af67fbd966d5b27087d91e6f03578182e',1,'edda']]], - ['operator_28_29',['operator()',['../structedda_1_1detail_1_1MakeStridedGmm.html#a9dca80558776667d82ff47ae0c92db4f',1,'edda::detail::MakeStridedGmm::operator()()'],['../structedda_1_1Rand.html#a5a38aac92548b3f31d1b16303a3bee0b',1,'edda::Rand::operator()()'],['../structedda_1_1detail_1_1GenRand.html#a68ba11082a68844dc47569c783a4ded8',1,'edda::detail::GenRand::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#acd2a8c160d5ab421874fca981b31eb55',1,'edda::dist::detail::_getPdf::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a6424d543a81f75cdd69f24023f03c202',1,'edda::dist::detail::_getPdf::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a5c4c54fb06bc68af3b1ddf0d58251117',1,'edda::dist::detail::_getCdf::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a559eb61fc139e513223eca929c593020',1,'edda::dist::detail::_getCdf::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#aab900f64d0ecdcf09c8e029da314549d',1,'edda::dist::detail::_getMean::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#adaefb1915027f1148233486f3d3308dc',1,'edda::dist::detail::_getMean::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#ab461512d48aa011b46b8c8ea0fd1ebc7',1,'edda::dist::detail::_getVar::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#a8a70478cd10813a1120f92032f9aa0f1',1,'edda::dist::detail::_getVar::operator()(const Real &value)'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#a8041e22e1d0fe81e5da6e5edae40ae28',1,'edda::dist::detail::_getSample::operator()(const T &dist)'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#af6f156cd9c20190130cb7c9e2e0784e2',1,'edda::dist::detail::_getSample::operator()(const Real &value)'],['../classedda_1_1detail_1_1FuzzyIsocontour.html#a25e0eaa572478a70b8b58e6f931f07ae',1,'edda::detail::FuzzyIsocontour::operator()()'],['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a36c2d21711184f3daf6a3f33281a4d55',1,'edda::detail::LevelCrossingFunctor::operator()()'],['../structedda_1_1detail_1_1GetSample__functor.html#a46804b47fe97932a0e709875c456c2e9',1,'edda::detail::GetSample_functor::operator()()'],['../structedda_1_1GetSample__functor.html#a5f4849e63cbb242edb757175ce6012a1',1,'edda::GetSample_functor::operator()()']]], - ['operator_2a',['operator*',['../namespaceedda.html#a93a705f34f601e0c925267ab199b479f',1,'edda::operator*(Vector3< Real > &v0, Vector3< Real > &v1)'],['../namespaceedda.html#a092ab795ecf1f325e4056f40858d371b',1,'edda::operator*(float x0, const Vector3< Real > &v0)'],['../namespaceedda.html#a4d54e9ca6dd220324644e648329d863b',1,'edda::operator*(const Vector3< Real > &v0, float x0)'],['../namespaceedda.html#acdef9524e97c2706696c859254d81e94',1,'edda::operator*(Vector4< Real > &v0, Vector4< Real > &v1)'],['../namespaceedda.html#a913e795aa19c428470e731edbc5eb89e',1,'edda::operator*(float x0, const Vector4< Real > &v0)'],['../namespaceedda.html#af5b257dd62a06c315c2aa54eede0f31c',1,'edda::operator*(const Vector4< Real > &v0, float x0)'],['../namespaceedda_1_1dist.html#a78f6668de51fec25ca4aa7b20e8ff0d4',1,'edda::dist::operator*()']]], - ['operator_2a_3d',['operator*=',['../classedda_1_1Vector.html#a25d1c240ae3711b22744d51a0b126964',1,'edda::Vector::operator*=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#afccc2dbdbc600927565c0f65ae947e18',1,'edda::Vector< Real, 3 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a785486f5047caae109488890f0afa2d7',1,'edda::Vector< Real, 3 >::operator*=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abf2b05cabb5b258eadae11bf0dffb9e5',1,'edda::Vector< Real, 4 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a483a6a7ec9e8161f5b90c2947418e6e0',1,'edda::Vector< Real, 4 >::operator*=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#a38c31366442e9ca68ca47078e45fb753',1,'edda::dist::operator*=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#afd0226c751009498f2cc44927210cddd',1,'edda::dist::operator*=(GaussianMixture< GMMs > &x, const double r)']]], - ['operator_2b',['operator+',['../namespaceedda.html#acecfbcb6c30af36d25b9b1b9cedbe59c',1,'edda::operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a27197e5e9ff856ae849deb83455a3d86',1,'edda::operator+(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a009a15003c26d6a2758d765b7b6a1986',1,'edda::dist::operator+()']]], - ['operator_2b_3d',['operator+=',['../classedda_1_1Vector.html#aee0537c94e3200cb990b7e3c1f2dcb07',1,'edda::Vector::operator+=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ab313e1388d04b85e88769a97795682b2',1,'edda::Vector< Real, 3 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a6c655cded68b3a825cbbfd55e30366bf',1,'edda::Vector< Real, 3 >::operator+=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aac6bcb42e07728e89bda1b21f79fab41',1,'edda::Vector< Real, 4 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6941d0f3c43154cea564fcf3ed4a2a8e',1,'edda::Vector< Real, 4 >::operator+=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#af7751f10c483dc2185cac5bfe025c665',1,'edda::dist::operator+=(Gaussian &x, const Gaussian &rhs)'],['../namespaceedda_1_1dist.html#aed2de5205f617c0f8b0522d56bfeb5fc',1,'edda::dist::operator+=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a83b07028ee1d406c06088f2af17f879b',1,'edda::dist::operator+=(GaussianMixture< GMMs > &x, const GaussianMixture< GMMs > &rhs)'],['../namespaceedda_1_1dist.html#a3436532879fcd5605b607ede18e66519',1,'edda::dist::operator+=(GaussianMixture< GMMs > &x, const double r)']]], - ['operator_2d',['operator-',['../namespaceedda.html#ac11a6122a4c14ce20220d9e0c0154b69',1,'edda::operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a8e1c93f0d10f69d2b4ccd279df70f60c',1,'edda::operator-(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a47f4afe8c1eae437e92feba150506583',1,'edda::dist::operator-(const T &lhs, const T &rhs)'],['../namespaceedda_1_1dist.html#ac9a05dbf3c74b32366019864fc24620c',1,'edda::dist::operator-(Gaussian &x)'],['../namespaceedda_1_1dist.html#a2fc42de0a0589d976889db602446139a',1,'edda::dist::operator-(GaussianMixture< GMMs > &x)']]], - ['operator_2d_3d',['operator-=',['../namespaceedda_1_1dist.html#a7b2538cb9c7683dc03c02554fdea6a1e',1,'edda::dist']]], - ['operator_3c_3c',['operator<<',['../namespaceedda.html#a08f55a86eb475b793bcf4b6f10b094a9',1,'edda::operator<<()'],['../namespaceedda_1_1dist.html#ab0bc58880769fb054f0cb66abd1bf89d',1,'edda::dist::operator<<(std::ostream &os, const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a29e3c93d588836a25b4f449aa3f375a3',1,'edda::dist::operator<<(std::ostream &os, const GaussianMixture< GMMs > &dist)']]], - ['operator_3d',['operator=',['../classedda_1_1NdArray.html#a8af48db4d18004cca74c208fcd8d03df',1,'edda::NdArray::operator=(const NdArray< Type > &ptr)'],['../classedda_1_1NdArray.html#ad518fa10456c2eb79125caece7ba7dd4',1,'edda::NdArray::operator=(const NdArray< Type > &obj)']]], - ['operator_3d_3d',['operator==',['../classedda_1_1Vector.html#a730a077a982c8935e3e24b8ed0882aed',1,'edda::Vector::operator==()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ad7c249c67d864bb1432488d038678fc5',1,'edda::Vector< Real, 3 >::operator==()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#acc1c93765ca872fcf7a12c0db457c85b',1,'edda::Vector< Real, 4 >::operator==()'],['../namespaceedda.html#a74bdd32ade7fd3a6672f8a2b7dbb25c9',1,'edda::operator==()']]], - ['operator_5b_5d',['operator[]',['../classedda_1_1shared__ary.html#a7031c4183fba9bc9a6d892566d21006c',1,'edda::shared_ary::operator[]()'],['../classedda_1_1Tuple.html#ac6f05f69f7d6cc8464cdcb1e2565e96c',1,'edda::Tuple::operator[](int i)'],['../classedda_1_1Tuple.html#a8ac59556d0d2a77226ee13366010d82d',1,'edda::Tuple::operator[](int i) const ']]] + ['ndarray',['NdArray',['../classedda_1_1NdArray.html#a1a30d1735b2c3ba3d0ac938b499d0cb4',1,'edda::NdArray::NdArray()'],['../classedda_1_1NdArray.html#aa9cd12543a68ed9b868c037daa35cf63',1,'edda::NdArray::NdArray(int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a3ff76f2e8debe3f7d59dafed51732e96',1,'edda::NdArray::NdArray(const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#a2244b2694148f802f617f045f59a4a83',1,'edda::NdArray::NdArray(Type *data, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a91bea3ecf3695047292f851e87448177',1,'edda::NdArray::NdArray(Type *data, const std::initializer_list< int > &dims_)'],['../classedda_1_1NdArray.html#ac9afd638e4ecfe02e1a670381f3554fc',1,'edda::NdArray::NdArray(thrust::device_ptr< Type > dData, int num_of_dims_, int *dims_)'],['../classedda_1_1NdArray.html#a0c31d15f5a3ac139ba5330d9477fd46a',1,'edda::NdArray::NdArray(const NdArray &obj)']]], + ['ndarray_5fiterator',['ndarray_iterator',['../classedda_1_1ndarray__iterator.html#a773439b81d38c01ceea2a6f87e053ef6',1,'edda::ndarray_iterator']]], + ['new',['New',['../classeddaRandomProbeFilter.html#ac2e25358fa6d393d0e14b6a9723f9c11',1,'eddaRandomProbeFilter::New()'],['../classeddaRandomSampleField.html#ac97c3e54a48f5623c6d50134171ac68f',1,'eddaRandomSampleField::New()'],['../classeddaThreshold.html#a8667a189d7931b2b2d3b8254e97d5b3f',1,'eddaThreshold::New()'],['../classeddaUncertainIsocontour.html#a92ff4c4b076822b4fb4d9e916173f8d4',1,'eddaUncertainIsocontour::New()']]], + ['newiterator',['NewIterator',['../classeddaSamplingArray.html#a9db524110a7b67181975c48ce5469c5a',1,'eddaSamplingArray']]], + ['normalize',['normalize',['../classedda_1_1Vector.html#a7b782d162af77f502480d3cc9dab287f',1,'edda::Vector::normalize()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a44a3c23b172bf3fadb7e4e2b743784e4',1,'edda::Vector< Real, 3 >::normalize()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abeb3985e6b892c60380f37019dd5fc22',1,'edda::Vector< Real, 4 >::normalize()']]], + ['normalizeweights',['normalizeWeights',['../classedda_1_1dist_1_1GaussianMixture.html#a5c8c7893dd642c9035d25b12cc7e8e98',1,'edda::dist::GaussianMixture']]], + ['notimplementedexception',['NotImplementedException',['../structedda_1_1NotImplementedException.html#a8906b88f0485fab9f5513adf17878c06',1,'edda::NotImplementedException']]] ]; diff --git a/html/search/functions_d.html b/html/search/functions_d.html index 8cdcc06..9f4209c 100644 --- a/html/search/functions_d.html +++ b/html/search/functions_d.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_d.js b/html/search/functions_d.js index a2319bc..95a9ada 100644 --- a/html/search/functions_d.js +++ b/html/search/functions_d.js @@ -1,11 +1,16 @@ var searchData= [ - ['passattributedata',['PassAttributeData',['../classeddaRandomProbeFilter.html#a1db9d2255338950cd660590feab426a2',1,'eddaRandomProbeFilter']]], - ['phys_5fto_5fcell',['phys_to_cell',['../classedda_1_1Grid.html#a3ef6ca899ea32fe1eed621898a7095d1',1,'edda::Grid::phys_to_cell()'],['../classedda_1_1CartesianGrid.html#a7b596e7a80dd4a534a37a53dd0e4ddf8',1,'edda::CartesianGrid::phys_to_cell()'],['../classedda_1_1RegularCartesianGrid.html#ac60d9f13f178104274c497034703467d',1,'edda::RegularCartesianGrid::phys_to_cell()']]], - ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html#acc2731dc3751bdba37d8d0ca2f306134',1,'edda::PointInfo::PointInfo()'],['../structedda_1_1PointInfo.html#a81fd3d6e757c85db78cea4516f9f9eb9',1,'edda::PointInfo::PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)']]], - ['print',['print',['../namespaceedda_1_1detail.html#a60b2e0585a28b435390ac74b6708a6fd',1,'edda::detail']]], - ['printself',['PrintSelf',['../classvtkCompositeUncertainIsocontour.html#aef6a64c65c000b6f956fd3a2a0cd2118',1,'vtkCompositeUncertainIsocontour']]], - ['probe',['Probe',['../classeddaRandomProbeFilter.html#a857b5eb5c460a6c34631562da0950cc9',1,'eddaRandomProbeFilter']]], - ['probeemptypoints',['ProbeEmptyPoints',['../classeddaRandomProbeFilter.html#a35b379341a6f89f6ca7c3b15128ba1b7',1,'eddaRandomProbeFilter']]], - ['process_5fvtk_5ffile',['process_vtk_file',['../denseSamplingField_8cpp.html#a2041ba38def6074ddb551db8efb1fa1e',1,'process_vtk_file(string &vtk_file, int res): denseSamplingField.cpp'],['../fuzzyIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): fuzzyIsocontourVTK.cpp'],['../randomSample_8cpp.html#a88f42db7844dfd6059a18e35f95d4130',1,'process_vtk_file(string &vtk_file, string &source_file): randomSample.cpp'],['../uncertainIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): uncertainIsocontourVTK.cpp']]] + ['operator_21_3d',['operator!=',['../namespaceedda.html#af67fbd966d5b27087d91e6f03578182e',1,'edda']]], + ['operator_28_29',['operator()',['../structedda_1_1Rand.html#a5a38aac92548b3f31d1b16303a3bee0b',1,'edda::Rand::operator()()'],['../structedda_1_1detail_1_1GenRand.html#a68ba11082a68844dc47569c783a4ded8',1,'edda::detail::GenRand::operator()()'],['../structedda_1_1detail_1_1MakeStridedGmm.html#a0118169750bc2ef507b038cec4146d1d',1,'edda::detail::MakeStridedGmm::operator()()'],['../structedda_1_1detail_1_1MakeHistogram.html#af10c404c1995bea119d760d41aaddfab',1,'edda::detail::MakeHistogram::operator()()'],['../structedda_1_1detail_1_1GetSample.html#a0b5a531990782a9e4ebed88806950ba5',1,'edda::detail::GetSample::operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)'],['../structedda_1_1detail_1_1GetSample.html#a6560142c0df4f0ab3cf8a48a9462006f',1,'edda::detail::GetSample::operator()(thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)'],['../classedda_1_1MATRIX3.html#a030082dc7f7744ae321cb8985ab75c4d',1,'edda::MATRIX3::operator()(const int i) const'],['../classedda_1_1MATRIX3.html#a9f82c905fd6df3ec9aa4487b7686bd5a',1,'edda::MATRIX3::operator()(const int i, const int j) const'],['../structedda_1_1dist_1_1detail_1_1__getPdf.html#acd2a8c160d5ab421874fca981b31eb55',1,'edda::dist::detail::_getPdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a5c4c54fb06bc68af3b1ddf0d58251117',1,'edda::dist::detail::_getCdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getMean.html#aab900f64d0ecdcf09c8e029da314549d',1,'edda::dist::detail::_getMean::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getVar.html#ab461512d48aa011b46b8c8ea0fd1ebc7',1,'edda::dist::detail::_getVar::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getSample.html#a8041e22e1d0fe81e5da6e5edae40ae28',1,'edda::dist::detail::_getSample::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointMean.html#a7433cda1b562df68ec925cf90bfdea64',1,'edda::dist::detail::_getJointMean::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html#a3f794ca87b28f9d7ffff23f3e9bf4dd0',1,'edda::dist::detail::_getJointPdf::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getJointSample.html#aa76014001f39b24ca1e6d20e20adedae',1,'edda::dist::detail::_getJointSample::operator()()'],['../structedda_1_1dist_1_1detail_1_1__getName.html#a7ffa43bda44c6928e561678aff5396cc',1,'edda::dist::detail::_getName::operator()()'],['../structedda_1_1GetSample__functor.html#a5f4849e63cbb242edb757175ce6012a1',1,'edda::GetSample_functor::operator()()'],['../classedda_1_1detail_1_1FuzzyIsocontour.html#a25e0eaa572478a70b8b58e6f931f07ae',1,'edda::detail::FuzzyIsocontour::operator()()'],['../classedda_1_1detail_1_1LevelCrossingFunctor.html#a36c2d21711184f3daf6a3f33281a4d55',1,'edda::detail::LevelCrossingFunctor::operator()()'],['../structedda_1_1detail_1_1FieldInterp.html#a298ad254765885bfcc54053338f6c1a6',1,'edda::detail::FieldInterp::operator()()']]], + ['operator_2a',['operator*',['../namespaceedda.html#a3260935238fdcdc00cc0d15c45223c38',1,'edda::operator*(const MATRIX3 &m0, const VECTOR3 &v0)'],['../namespaceedda.html#a93a705f34f601e0c925267ab199b479f',1,'edda::operator*(Vector3< Real > &v0, Vector3< Real > &v1)'],['../namespaceedda.html#a092ab795ecf1f325e4056f40858d371b',1,'edda::operator*(float x0, const Vector3< Real > &v0)'],['../namespaceedda.html#a4d54e9ca6dd220324644e648329d863b',1,'edda::operator*(const Vector3< Real > &v0, float x0)'],['../namespaceedda.html#acdef9524e97c2706696c859254d81e94',1,'edda::operator*(Vector4< Real > &v0, Vector4< Real > &v1)'],['../namespaceedda.html#a913e795aa19c428470e731edbc5eb89e',1,'edda::operator*(float x0, const Vector4< Real > &v0)'],['../namespaceedda.html#af5b257dd62a06c315c2aa54eede0f31c',1,'edda::operator*(const Vector4< Real > &v0, float x0)'],['../namespaceedda_1_1dist.html#a78f6668de51fec25ca4aa7b20e8ff0d4',1,'edda::dist::operator*()']]], + ['operator_2a_3d',['operator*=',['../classedda_1_1Vector.html#a25d1c240ae3711b22744d51a0b126964',1,'edda::Vector::operator*=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#afccc2dbdbc600927565c0f65ae947e18',1,'edda::Vector< Real, 3 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a785486f5047caae109488890f0afa2d7',1,'edda::Vector< Real, 3 >::operator*=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#abf2b05cabb5b258eadae11bf0dffb9e5',1,'edda::Vector< Real, 4 >::operator*=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a483a6a7ec9e8161f5b90c2947418e6e0',1,'edda::Vector< Real, 4 >::operator*=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#a38c31366442e9ca68ca47078e45fb753',1,'edda::dist::operator*=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a42b1c674310d83b56e1f665859dce41a',1,'edda::dist::operator*=(GaussianMixture< GMs > &x, const double r)']]], + ['operator_2b',['operator+',['../namespaceedda.html#acecfbcb6c30af36d25b9b1b9cedbe59c',1,'edda::operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a27197e5e9ff856ae849deb83455a3d86',1,'edda::operator+(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a009a15003c26d6a2758d765b7b6a1986',1,'edda::dist::operator+()']]], + ['operator_2b_3d',['operator+=',['../classedda_1_1Vector.html#aee0537c94e3200cb990b7e3c1f2dcb07',1,'edda::Vector::operator+=()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#ab313e1388d04b85e88769a97795682b2',1,'edda::Vector< Real, 3 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a6c655cded68b3a825cbbfd55e30366bf',1,'edda::Vector< Real, 3 >::operator+=(Vector< Real, 3 > x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#aac6bcb42e07728e89bda1b21f79fab41',1,'edda::Vector< Real, 4 >::operator+=(Real x)'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a6941d0f3c43154cea564fcf3ed4a2a8e',1,'edda::Vector< Real, 4 >::operator+=(Vector< Real, 4 > x)'],['../namespaceedda_1_1dist.html#af7751f10c483dc2185cac5bfe025c665',1,'edda::dist::operator+=(Gaussian &x, const Gaussian &rhs)'],['../namespaceedda_1_1dist.html#aed2de5205f617c0f8b0522d56bfeb5fc',1,'edda::dist::operator+=(Gaussian &x, const double r)'],['../namespaceedda_1_1dist.html#a1cd36a8c6f68732ce9d2e57a4438e6d0',1,'edda::dist::operator+=(GaussianMixture< GMs > &x, const GaussianMixture< GMs > &rhs)'],['../namespaceedda_1_1dist.html#a71d748acc49c073702a3cee3537fd67a',1,'edda::dist::operator+=(GaussianMixture< GMs > &x, const double r)']]], + ['operator_2d',['operator-',['../namespaceedda.html#ac11a6122a4c14ce20220d9e0c0154b69',1,'edda::operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)'],['../namespaceedda.html#a8e1c93f0d10f69d2b4ccd279df70f60c',1,'edda::operator-(const Vector4< Real > &v0, const Vector4< Real > &v1)'],['../namespaceedda_1_1dist.html#a47f4afe8c1eae437e92feba150506583',1,'edda::dist::operator-(const T &lhs, const T &rhs)'],['../namespaceedda_1_1dist.html#ac9a05dbf3c74b32366019864fc24620c',1,'edda::dist::operator-(Gaussian &x)'],['../namespaceedda_1_1dist.html#a851dbf769a25e162b70b713aed19f92e',1,'edda::dist::operator-(const GaussianMixture< GMs > &x)']]], + ['operator_2d_3d',['operator-=',['../namespaceedda_1_1dist.html#a7b2538cb9c7683dc03c02554fdea6a1e',1,'edda::dist']]], + ['operator_3c_3c',['operator<<',['../classedda_1_1dist_1_1Distribution.html#a20f3358bb9a62d1848b395c334980686',1,'edda::dist::Distribution::operator<<()'],['../classedda_1_1dist_1_1DistributionWrapper.html#a1d8c78e4fda90a65d5d5253f9e600a48',1,'edda::dist::DistributionWrapper::operator<<()'],['../namespaceedda.html#a08f55a86eb475b793bcf4b6f10b094a9',1,'edda::operator<<()'],['../namespaceedda_1_1dist.html#ab0bc58880769fb054f0cb66abd1bf89d',1,'edda::dist::operator<<(std::ostream &os, const Gaussian &dist)'],['../namespaceedda_1_1dist.html#a12cd057018d4b4108aa635992eae52ed',1,'edda::dist::operator<<(std::ostream &os, const GaussianMixture< GMs > &dist)'],['../namespaceedda_1_1dist.html#aa18cf2d711cb8adac8cb72bb2b3472df',1,'edda::dist::operator<<(std::ostream &os, const Histogram &dist)'],['../namespaceedda_1_1dist.html#a00bd32e954236178af53401be176f6e7',1,'edda::dist::operator<<(std::ostream &os, const JointGaussian &dist)'],['../namespaceedda_1_1dist.html#acf9d5f253b8f25573d44f5866ed1306d',1,'edda::dist::operator<<(std::ostream &os, const JointGMM &dist)'],['../namespaceedda_1_1dist.html#a91d4d1cf16c26a74c13c091ac71e16f9',1,'edda::dist::operator<<(std::ostream &os, const JointHistogram &dist)']]], + ['operator_3d',['operator=',['../classedda_1_1NdArray.html#ad518fa10456c2eb79125caece7ba7dd4',1,'edda::NdArray::operator=()'],['../classedda_1_1MATRIX3.html#a4f83a2c2c699e340e9d29ce903562db4',1,'edda::MATRIX3::operator=()']]], + ['operator_3d_3d',['operator==',['../classedda_1_1Vector.html#ac9ed33a068f23bd170ce73e5c386a1ad',1,'edda::Vector::operator==()'],['../classedda_1_1Vector_3_01Real_00_013_01_4.html#a94f65a348f8dfa6d3e7b8d83610b17b4',1,'edda::Vector< Real, 3 >::operator==()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#a0bac5c96ac0e8ed9ba4d19098c3f3710',1,'edda::Vector< Real, 4 >::operator==()'],['../namespaceedda.html#a74bdd32ade7fd3a6672f8a2b7dbb25c9',1,'edda::operator==()']]], + ['operator_5b_5d',['operator[]',['../classedda_1_1shared__ary.html#aba4445b89b0341167715ff0bc18f8d96',1,'edda::shared_ary::operator[]()'],['../classedda_1_1Tuple.html#ac6f05f69f7d6cc8464cdcb1e2565e96c',1,'edda::Tuple::operator[](int i)'],['../classedda_1_1Tuple.html#a5bf78b200bdd601ae9228a94d118d631',1,'edda::Tuple::operator[](int i) const'],['../classedda_1_1MATRIX3.html#adc87d6072d72a9ec75036dff94c3b7a6',1,'edda::MATRIX3::operator[]()']]], + ['output',['output',['../classedda_1_1dist_1_1Histogram.html#adda96835c96a8670ae4c9965e7346fc2',1,'edda::dist::Histogram::output()'],['../classedda_1_1dist_1_1JointGMM.html#a839a656814ef252e50c62f6594d9d2d4',1,'edda::dist::JointGMM::output()']]] ]; diff --git a/html/search/functions_e.html b/html/search/functions_e.html index 649b2c9..3c23488 100644 --- a/html/search/functions_e.html +++ b/html/search/functions_e.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_e.js b/html/search/functions_e.js index e91e36b..21b9a8b 100644 --- a/html/search/functions_e.js +++ b/html/search/functions_e.js @@ -1,18 +1,10 @@ var searchData= [ - ['randomengineiterator',['randomEngineIterator',['../namespaceedda.html#a884e513bd5d79a76dd22cc63dd4c915e',1,'edda']]], - ['randomsamplefield',['randomSampleField',['../namespaceedda.html#a67f5f04842c5c70e606c714890d6999a',1,'edda']]], - ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a65429826eea71b490814fe9de5a49f8f',1,'edda::RegularCartesianGrid::RegularCartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1RegularCartesianGrid.html#a360d7cebde168cc3648709a64797513f',1,'edda::RegularCartesianGrid::RegularCartesianGrid()']]], - ['removefileextension',['removeFileExtension',['../namespaceedda.html#a89fb66cfd4f962f6851f8a907f7360fe',1,'edda::removeFileExtension(const string &filename)'],['../namespaceedda.html#a960fcdcb7f45492009ef51087fbbd662',1,'edda::removeFileExtension(const std::string &filename)']]], - ['removefirsttuple',['RemoveFirstTuple',['../classvtkSamplingArray.html#a9defaa0f1e62e12e4546b57a9b7932a5',1,'vtkSamplingArray::RemoveFirstTuple()'],['../classeddaSamplingArray.html#a3ebcd0868580cf501ee09ae691e6bb32',1,'eddaSamplingArray::RemoveFirstTuple()']]], - ['removelasttuple',['RemoveLastTuple',['../classvtkSamplingArray.html#a85f4f8b506a76f265619f289bf2dc97a',1,'vtkSamplingArray::RemoveLastTuple()'],['../classeddaSamplingArray.html#ae35ad87165232a83fe5ded43163fad09',1,'eddaSamplingArray::RemoveLastTuple()']]], - ['removetuple',['RemoveTuple',['../classvtkSamplingArray.html#aa3d910c443e34f021a3b346101f143f5',1,'vtkSamplingArray::RemoveTuple()'],['../classeddaSamplingArray.html#af53efdac4dd1d02550b5ad6e984a71dc',1,'eddaSamplingArray::RemoveTuple()']]], - ['repeat_5fiterator',['repeat_iterator',['../classedda_1_1ndarray__iterator.html#a32b7b66b3a9c69c89d22a466edcb3fce',1,'edda::ndarray_iterator']]], - ['requestdata',['RequestData',['../classvtkCompositeUncertainIsocontour.html#ab998df8352e565e7e0ae93c6164b23f6',1,'vtkCompositeUncertainIsocontour::RequestData()'],['../classvtkEddaReader.html#af374b8b920c77c215a5a58f50875e671',1,'vtkEddaReader::RequestData()'],['../classeddaRandomProbeFilter.html#a8c132c96d159621fda6b42fe0e73325d',1,'eddaRandomProbeFilter::RequestData()'],['../classeddaRandomSampleField.html#ad1e19e6f7b4e5a539580a7d84d56d17d',1,'eddaRandomSampleField::RequestData()'],['../classeddaThreshold.html#aff4eceff2757e2fd354d727073d20f4d',1,'eddaThreshold::RequestData()'],['../classeddaUncertainIsocontour.html#ad37cfda400761fea4026a5444197a9c0',1,'eddaUncertainIsocontour::RequestData()']]], - ['requestinformation',['RequestInformation',['../classvtkEddaReader.html#abdd18e6ab94ad1132e4e70b67b892ae2',1,'vtkEddaReader::RequestInformation()'],['../classeddaRandomProbeFilter.html#ada5ca0cbe086afc1bddb8897c9708ceb',1,'eddaRandomProbeFilter::RequestInformation()'],['../classeddaRandomSampleField.html#a689ee6b2f71fefcfbb7c44ec290b2c4a',1,'eddaRandomSampleField::RequestInformation()'],['../classeddaUncertainIsocontour.html#a1ea95bfbc75c9f94d41ee6a33939d19d',1,'eddaUncertainIsocontour::RequestInformation()']]], - ['requestupdateextent',['RequestUpdateExtent',['../classeddaRandomProbeFilter.html#a7116ddc47ee0f86745d407af8de27739',1,'eddaRandomProbeFilter::RequestUpdateExtent()'],['../classeddaRandomSampleField.html#a28a38cefecb18b090fd0ced4dd612aaf',1,'eddaRandomSampleField::RequestUpdateExtent()'],['../classeddaUncertainIsocontour.html#a3d519989a7d7b6fa1d04ba3a76d00fbd',1,'eddaUncertainIsocontour::RequestUpdateExtent()']]], - ['reset',['reset',['../classedda_1_1RegularCartesianGrid.html#ae6ad91b11d948d68895be2a19578857a',1,'edda::RegularCartesianGrid::reset()'],['../classedda_1_1Grid.html#af73f922e3af6588f4a5666a1441c4d7b',1,'edda::Grid::Reset()'],['../classedda_1_1CartesianGrid.html#a14dc0303c95983a8a70dcea7304b4cdb',1,'edda::CartesianGrid::Reset()']]], - ['reshape',['Reshape',['../classedda_1_1NdArray.html#a070bea444506daa6585ef5a1548e7b3f',1,'edda::NdArray::Reshape(const std::initializer_list< int > &newshape)'],['../classedda_1_1NdArray.html#a22e1f19adf5edc51ba39c1e6700057d0',1,'edda::NdArray::Reshape(const std::initializer_list< int > &newshape)']]], - ['resize',['Resize',['../classvtkSamplingArray.html#a2282389340d54249e6852feb3ce74f07',1,'vtkSamplingArray::Resize()'],['../classeddaSamplingArray.html#ad1b2a4a22266322e79c4ce14359bcdf9',1,'eddaSamplingArray::Resize()']]], - ['runge_5fkutta2',['runge_kutta2',['../classedda_1_1StreamTracer.html#abad5e625caab94678254551cb7ea3250',1,'edda::StreamTracer']]] + ['passattributedata',['PassAttributeData',['../classeddaRandomProbeFilter.html#a1db9d2255338950cd660590feab426a2',1,'eddaRandomProbeFilter']]], + ['phys_5fto_5fcell',['phys_to_cell',['../classedda_1_1CurvilinearGrid.html#a52535b4d70f9155f552246d1289908ba',1,'edda::CurvilinearGrid::phys_to_cell()'],['../classedda_1_1Grid.html#a3ef6ca899ea32fe1eed621898a7095d1',1,'edda::Grid::phys_to_cell()'],['../classedda_1_1CartesianGrid.html#a7b596e7a80dd4a534a37a53dd0e4ddf8',1,'edda::CartesianGrid::phys_to_cell()'],['../classedda_1_1RegularCartesianGrid.html#ac60d9f13f178104274c497034703467d',1,'edda::RegularCartesianGrid::phys_to_cell()']]], + ['phys_5fto_5fcomp_5fcoords',['phys_to_comp_coords',['../classedda_1_1CurvilinearGrid.html#a2b261eb7f7113a6f6a9bdc33f9db02c9',1,'edda::CurvilinearGrid']]], + ['pointinfo',['PointInfo',['../structedda_1_1PointInfo.html#acc2731dc3751bdba37d8d0ca2f306134',1,'edda::PointInfo::PointInfo()'],['../structedda_1_1PointInfo.html#a81fd3d6e757c85db78cea4516f9f9eb9',1,'edda::PointInfo::PointInfo(const VECTOR3 &pcoord, const VECTOR3 &coeff, int fCell, int iCell)']]], + ['probe',['Probe',['../classeddaRandomProbeFilter.html#a857b5eb5c460a6c34631562da0950cc9',1,'eddaRandomProbeFilter']]], + ['probeemptypoints',['ProbeEmptyPoints',['../classeddaRandomProbeFilter.html#a35b379341a6f89f6ca7c3b15128ba1b7',1,'eddaRandomProbeFilter']]], + ['process_5fvtk_5ffile',['process_vtk_file',['../fuzzyIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): fuzzyIsocontourVTK.cpp'],['../randomSampleField_8cpp.html#a88f42db7844dfd6059a18e35f95d4130',1,'process_vtk_file(string &vtk_file, string &source_file): randomSampleField.cpp'],['../uncertainIsocontourVTK_8cpp.html#a5155ec6116eb25d1d35c5821f6007482',1,'process_vtk_file(string vtk_file, float isov): uncertainIsocontourVTK.cpp']]] ]; diff --git a/html/search/functions_f.html b/html/search/functions_f.html index 386c7d4..07e22cf 100644 --- a/html/search/functions_f.html +++ b/html/search/functions_f.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/functions_f.js b/html/search/functions_f.js index c2cf58b..b5f74b6 100644 --- a/html/search/functions_f.js +++ b/html/search/functions_f.js @@ -1,22 +1,22 @@ var searchData= [ - ['sampledataarray',['SampleDataArray',['../classeddaRandomSampleField.html#a59d9a1ce75be572a5fc56a9aa1765f72',1,'eddaRandomSampleField']]], - ['scalararray',['ScalarArray',['../classedda_1_1ScalarArray.html#a4e412ae1e9ab6d18df7f13a4105f4a73',1,'edda::ScalarArray']]], - ['set',['set',['../classedda_1_1Vector_3_01Real_00_013_01_4.html#abd2833a76c0753e6766b4abeaffbb4c5',1,'edda::Vector< Real, 3 >::set()'],['../classedda_1_1Vector_3_01Real_00_014_01_4.html#ac225598517bc52939096bd6fd54023ce',1,'edda::Vector< Real, 4 >::set()']]], - ['set_5fownership',['set_ownership',['../classedda_1_1NdArray.html#a3f871df765d4dbe7d026c93ac0c28f4e',1,'edda::NdArray::set_ownership(bool own)'],['../classedda_1_1NdArray.html#a0cec1d5f0c34d1f44c8203bdb62b68e3',1,'edda::NdArray::set_ownership(bool own)']]], - ['set_5fval',['set_val',['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray::set_val(const std::initializer_list< int > &ind, const Type &val)'],['../classedda_1_1NdArray.html#a76b24faa92fda62ea1ce4ceafe08f0ee',1,'edda::NdArray::set_val(const std::initializer_list< int > &ind, const Type &val)']]], - ['setboundary',['setBoundary',['../classedda_1_1Grid.html#af3650ba5e9f2eedecadd0cafad4798a3',1,'edda::Grid::setBoundary()'],['../classedda_1_1CartesianGrid.html#a955ac477d9f7f95b6142a4cc97605c74',1,'edda::CartesianGrid::setBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a005accc847e5455e57f4e523e7b99bd6',1,'edda::RegularCartesianGrid::setBoundary()']]], - ['seteddaarray',['SetEddaArray',['../classvtkSamplingArray.html#a1d074a513450ea7c608de1b3232e708e',1,'vtkSamplingArray::SetEddaArray()'],['../classeddaSamplingArray.html#a410b3a8d21e3ed91110da7da99f93c78',1,'eddaSamplingArray::SetEddaArray()']]], - ['setitem',['setItem',['../classedda_1_1AbstractDataArray.html#aade6731b6b68fb94fe2369eba637d43b',1,'edda::AbstractDataArray::setItem()'],['../classedda_1_1DataSamplingArray.html#a4bbc69bc61d7ea504160a1c4f9631aec',1,'edda::DataSamplingArray::setItem()'],['../classedda_1_1ScalarArray.html#a5e8fb8dae54a82a9996dd43c2068c69c',1,'edda::ScalarArray::setItem()'],['../classedda_1_1VectorArray.html#a0e5cf62545fbeb841f3796714e1cb5a2',1,'edda::VectorArray::setItem()'],['../classedda_1_1GmmVtkDataArray.html#a72d14608d2fd1081d9597241768ebf1c',1,'edda::GmmVtkDataArray::setItem()']]], - ['setnumberoftuples',['SetNumberOfTuples',['../classvtkSamplingArray.html#ae71726d544c6a80683bb5fcfb218690f',1,'vtkSamplingArray::SetNumberOfTuples()'],['../classeddaSamplingArray.html#a227706ad000143370b166318ed20bcfc',1,'eddaSamplingArray::SetNumberOfTuples()']]], - ['setrealboundary',['setRealBoundary',['../classedda_1_1CartesianGrid.html#abe9b85a02f3cc95d6b3aea12bb54e1f9',1,'edda::CartesianGrid::setRealBoundary()'],['../classedda_1_1RegularCartesianGrid.html#a837950c49d82ec89ecc79181ca2de390',1,'edda::RegularCartesianGrid::setRealBoundary()']]], - ['setsourceconnection',['SetSourceConnection',['../classeddaRandomProbeFilter.html#a071d5410a123cb241996c6f35c90a3f1',1,'eddaRandomProbeFilter']]], - ['setsourcedata',['SetSourceData',['../classeddaRandomProbeFilter.html#a025f0fa555ac54d677ba01e75aeec66c',1,'eddaRandomProbeFilter']]], - ['settuple',['SetTuple',['../classvtkSamplingArray.html#a5b16fa81ca007e9d58e6a9d0ac99b3c1',1,'vtkSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classvtkSamplingArray.html#a71ca0c7dff87d5e941dd005c4ec04e36',1,'vtkSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classvtkSamplingArray.html#ab0fe7b7e689182222f389913cff15628',1,'vtkSamplingArray::SetTuple(vtkIdType i, const double *tuple)'],['../classeddaSamplingArray.html#a95e56e923f0e3c0d379355253836a24c',1,'eddaSamplingArray::SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)'],['../classeddaSamplingArray.html#a66a463aa54a151e7ed6c76693ead3978',1,'eddaSamplingArray::SetTuple(vtkIdType i, const float *tuple)'],['../classeddaSamplingArray.html#ac7949700cfa4662839a696b873742dd5',1,'eddaSamplingArray::SetTuple(vtkIdType i, const double *tuple)']]], - ['setvariantvalue',['SetVariantValue',['../classvtkSamplingArray.html#a786eb5b49b05b860c4d2cc0e48f3a115',1,'vtkSamplingArray::SetVariantValue()'],['../classeddaSamplingArray.html#ae71b18bac49013fc99530e4f9148210c',1,'eddaSamplingArray::SetVariantValue()']]], - ['setvoidarray',['SetVoidArray',['../classvtkSamplingArray.html#a339b8ef1d6ab9bb42774bedbbe3bb1be',1,'vtkSamplingArray::SetVoidArray()'],['../classeddaSamplingArray.html#a7759fff2d32c5d9b73ade5c0df174614',1,'eddaSamplingArray::SetVoidArray()']]], - ['shared_5fary',['shared_ary',['../classedda_1_1shared__ary.html#af338c5a848dfbde825c9520c5ba0a959',1,'edda::shared_ary::shared_ary()'],['../classedda_1_1shared__ary.html#a6164ce3cb376ee64e5b819f3b2eb1f7e',1,'edda::shared_ary::shared_ary(T *p, size_t n_)'],['../classedda_1_1shared__ary.html#a87a4d8eface1debf626881862ced62e4',1,'edda::shared_ary::shared_ary(size_t n_)']]], - ['squeeze',['Squeeze',['../classvtkSamplingArray.html#a830c16cdac1fa0275e8d67ea9a4115ee',1,'vtkSamplingArray::Squeeze()'],['../classeddaSamplingArray.html#abeb4a46753f12abc8cce6c81e7a89200',1,'eddaSamplingArray::Squeeze()']]], - ['streamtracer',['StreamTracer',['../classedda_1_1StreamTracer.html#afd2a7cb908f8ab75b54abccf49206645',1,'edda::StreamTracer']]], - ['swap',['swap',['../classedda_1_1shared__ary.html#a79f7586a6e2ea57698ab940a629e340d',1,'edda::shared_ary']]] + ['randomengineiterator',['randomEngineIterator',['../namespaceedda.html#a884e513bd5d79a76dd22cc63dd4c915e',1,'edda']]], + ['randomsamplefield',['randomSampleField',['../namespaceedda.html#a67f5f04842c5c70e606c714890d6999a',1,'edda']]], + ['rangeofbin',['rangeOfBin',['../classedda_1_1dist_1_1Histogram.html#a1b545a7a369aa1d5a30027b8e9da54ef',1,'edda::dist::Histogram']]], + ['readgmmarray',['readGMMArray',['../namespaceedda.html#a1b7b73460dff3b4161a554d88e76b403',1,'edda']]], + ['readhistoarray',['readHistoArray',['../namespaceedda.html#a886a48d1c5a607af3f17cfb3cf21526d',1,'edda']]], + ['readimage',['readImage',['../structBMPImage.html#a41deba435e3a2e15d3a94d4f3869580b',1,'BMPImage']]], + ['regularcartesiangrid',['RegularCartesianGrid',['../classedda_1_1RegularCartesianGrid.html#a65429826eea71b490814fe9de5a49f8f',1,'edda::RegularCartesianGrid::RegularCartesianGrid(int xdim, int ydim, int zdim)'],['../classedda_1_1RegularCartesianGrid.html#a360d7cebde168cc3648709a64797513f',1,'edda::RegularCartesianGrid::RegularCartesianGrid()']]], + ['removefileextension',['removeFileExtension',['../namespaceedda.html#a89fb66cfd4f962f6851f8a907f7360fe',1,'edda::removeFileExtension(const string &filename)'],['../namespaceedda.html#acdd43f929df53649359f93dad75891f7',1,'edda::removeFileExtension(const std::string &filename)']]], + ['removefirsttuple',['RemoveFirstTuple',['../classeddaSamplingArray.html#a3ebcd0868580cf501ee09ae691e6bb32',1,'eddaSamplingArray']]], + ['removelasttuple',['RemoveLastTuple',['../classeddaSamplingArray.html#ae35ad87165232a83fe5ded43163fad09',1,'eddaSamplingArray']]], + ['removetuple',['RemoveTuple',['../classeddaSamplingArray.html#af53efdac4dd1d02550b5ad6e984a71dc',1,'eddaSamplingArray']]], + ['repeat_5fiterator',['repeat_iterator',['../classedda_1_1ndarray__iterator.html#a32b7b66b3a9c69c89d22a466edcb3fce',1,'edda::ndarray_iterator']]], + ['requestdata',['RequestData',['../classeddaRandomProbeFilter.html#a8c132c96d159621fda6b42fe0e73325d',1,'eddaRandomProbeFilter::RequestData()'],['../classeddaRandomSampleField.html#ad1e19e6f7b4e5a539580a7d84d56d17d',1,'eddaRandomSampleField::RequestData()'],['../classeddaThreshold.html#aff4eceff2757e2fd354d727073d20f4d',1,'eddaThreshold::RequestData()'],['../classeddaUncertainIsocontour.html#ad37cfda400761fea4026a5444197a9c0',1,'eddaUncertainIsocontour::RequestData()']]], + ['requestinformation',['RequestInformation',['../classeddaRandomProbeFilter.html#ada5ca0cbe086afc1bddb8897c9708ceb',1,'eddaRandomProbeFilter::RequestInformation()'],['../classeddaRandomSampleField.html#a689ee6b2f71fefcfbb7c44ec290b2c4a',1,'eddaRandomSampleField::RequestInformation()'],['../classeddaUncertainIsocontour.html#a1ea95bfbc75c9f94d41ee6a33939d19d',1,'eddaUncertainIsocontour::RequestInformation()']]], + ['requestupdateextent',['RequestUpdateExtent',['../classeddaRandomProbeFilter.html#a7116ddc47ee0f86745d407af8de27739',1,'eddaRandomProbeFilter::RequestUpdateExtent()'],['../classeddaRandomSampleField.html#a28a38cefecb18b090fd0ced4dd612aaf',1,'eddaRandomSampleField::RequestUpdateExtent()'],['../classeddaUncertainIsocontour.html#a3d519989a7d7b6fa1d04ba3a76d00fbd',1,'eddaUncertainIsocontour::RequestUpdateExtent()']]], + ['reset',['reset',['../classedda_1_1RegularCartesianGrid.html#ae6ad91b11d948d68895be2a19578857a',1,'edda::RegularCartesianGrid::reset()'],['../classedda_1_1CurvilinearGrid.html#aca2a68f167c432a939fea51a5e1720db',1,'edda::CurvilinearGrid::Reset()'],['../classedda_1_1Grid.html#af73f922e3af6588f4a5666a1441c4d7b',1,'edda::Grid::Reset()'],['../classedda_1_1CartesianGrid.html#a14dc0303c95983a8a70dcea7304b4cdb',1,'edda::CartesianGrid::Reset()']]], + ['reshape',['Reshape',['../classedda_1_1NdArray.html#a22e1f19adf5edc51ba39c1e6700057d0',1,'edda::NdArray']]], + ['resize',['Resize',['../classeddaSamplingArray.html#ad1b2a4a22266322e79c4ce14359bcdf9',1,'eddaSamplingArray']]], + ['runge_5fkutta2',['runge_kutta2',['../classedda_1_1StreamTracer.html#abad5e625caab94678254551cb7ea3250',1,'edda::StreamTracer']]] ]; diff --git a/html/search/groups_0.html b/html/search/groups_0.html index 2090afa..e4f877c 100644 --- a/html/search/groups_0.html +++ b/html/search/groups_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/namespaces_0.html b/html/search/namespaces_0.html index dc60686..becd52b 100644 --- a/html/search/namespaces_0.html +++ b/html/search/namespaces_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/namespaces_1.js b/html/search/namespaces_1.js deleted file mode 100644 index 79d6ac4..0000000 --- a/html/search/namespaces_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dist',['dist',['../namespaceedda_1_1dist.html',1,'edda']]], - ['edda',['edda',['../namespaceedda.html',1,'']]] -]; diff --git a/html/search/pages_0.html b/html/search/pages_0.html index c51c834..d0102ff 100644 --- a/html/search/pages_0.html +++ b/html/search/pages_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/pages_1.html b/html/search/pages_1.html index 2a98fce..d447b6a 100644 --- a/html/search/pages_1.html +++ b/html/search/pages_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/pages_2.html b/html/search/pages_2.html index 0711a0b..937b8cb 100644 --- a/html/search/pages_2.html +++ b/html/search/pages_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/related_0.html b/html/search/related_0.html index b647634..1086ba1 100644 --- a/html/search/related_0.html +++ b/html/search/related_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/search.css b/html/search/search.css index 4d7612f..3cf9df9 100644 --- a/html/search/search.css +++ b/html/search/search.css @@ -6,14 +6,12 @@ #MSearchBox { white-space : nowrap; - position: absolute; float: none; - display: inline; margin-top: 8px; right: 0px; width: 170px; + height: 24px; z-index: 102; - background-color: white; } #MSearchBox .left @@ -48,12 +46,13 @@ height:19px; background:url('search_m.png') repeat-x; border:none; - width:111px; + width:115px; margin-left:20px; padding-left:4px; color: #909090; outline: none; font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; } #FSearchBox #MSearchField { @@ -64,7 +63,7 @@ display:block; position:absolute; right:10px; - top:0px; + top:8px; width:20px; height:19px; background:url('search_r.png') no-repeat; @@ -102,7 +101,7 @@ left: 0; top: 0; border: 1px solid #90A5CE; background-color: #F9FAFC; - z-index: 1; + z-index: 10001; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; @@ -165,6 +164,7 @@ iframe#MSearchResults { left: 0; top: 0; border: 1px solid #000; background-color: #EEF1F7; + z-index:10000; } /* ----------------------------------- */ diff --git a/html/search/search.js b/html/search/search.js index ecdce8d..dedce3b 100644 --- a/html/search/search.js +++ b/html/search/search.js @@ -1,44 +1,3 @@ -// Search script generated by doxygen -// Copyright (C) 2009 by Dimitri van Heesch. - -// The code in this file is loosly based on main.js, part of Natural Docs, -// which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL. - -var indexSectionsWithContent = -{ - 0: "_abcdefgiklmnoprstuvwxyz~", - 1: "_acdefglmnoprstv", - 2: "e", - 3: "acdefgilnprstuv", - 4: "_abcdefgilmnoprstuvwxyz~", - 5: "acdefiklmnoprstuvwx", - 6: "_dgiprsv", - 7: "cirt", - 8: "cflopstw", - 9: "t", - 10: "eimotuv", - 11: "f", - 12: "ael" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "namespaces", - 3: "files", - 4: "functions", - 5: "variables", - 6: "typedefs", - 7: "enums", - 8: "enumvalues", - 9: "related", - 10: "defines", - 11: "groups", - 12: "pages" -}; - function convertToId(search) { var result = ''; @@ -50,11 +9,11 @@ function convertToId(search) { result+=c; } - else if (cn<16) + else if (cn<16) { result+="_0"+cn.toString(16); } - else + else { result+="_"+cn.toString(16); } @@ -93,14 +52,14 @@ function getYPos(item) /* A class handling everything associated with the search panel. Parameters: - name - The name of the global variable that will be + name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts. resultPath - path to use for external files */ function SearchBox(name, resultsPath, inFrame, label) { if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } - + // ---------- Instance variables this.name = name; this.resultsPath = resultsPath; @@ -177,7 +136,7 @@ function SearchBox(name, resultsPath, inFrame, label) } // stop selection hide timer - if (this.hideTimeout) + if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout=0; @@ -206,7 +165,7 @@ function SearchBox(name, resultsPath, inFrame, label) if (e.shiftKey==1) { this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); + var win=this.DOMSearchSelectWindow(); for (i=0;i - + diff --git a/html/search/typedefs_0.js b/html/search/typedefs_0.js index 41ac74a..fa023c2 100644 --- a/html/search/typedefs_0.js +++ b/html/search/typedefs_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['_5fvariant',['_Variant',['../namespaceedda_1_1dist.html#a7ed6bf19ce7888ad2ee8bd4eb1d867f8',1,'edda::dist']]] + ['_5fvariant',['_Variant',['../namespaceedda_1_1dist.html#a52b3d75b36bc599929d7970e9383c0f2',1,'edda::dist']]] ]; diff --git a/html/search/typedefs_1.html b/html/search/typedefs_1.html index 455fe2b..a6b5eea 100644 --- a/html/search/typedefs_1.html +++ b/html/search/typedefs_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_1.js b/html/search/typedefs_1.js index 2e8c2bd..a0e61fb 100644 --- a/html/search/typedefs_1.js +++ b/html/search/typedefs_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['devicegmmarray',['DeviceGMMArray',['../namespaceedda.html#a0b758f3aa270bb713e189ca658be44f6',1,'edda']]] + ['bitmapfileheader',['BITMAPFILEHEADER',['../bmp__image_8h.html#a38b6ed7c3c145c657e13b5d5053833cf',1,'bmp_image.h']]], + ['bitmapinfoheader',['BITMAPINFOHEADER',['../bmp__image_8h.html#a5334657d9ccd03e5f7681d8172c7b73c',1,'bmp_image.h']]] ]; diff --git a/html/search/typedefs_2.html b/html/search/typedefs_2.html index fac5dba..07e259e 100644 --- a/html/search/typedefs_2.html +++ b/html/search/typedefs_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_2.js b/html/search/typedefs_2.js index 59527bb..6ec54bd 100644 --- a/html/search/typedefs_2.js +++ b/html/search/typedefs_2.js @@ -1,4 +1,6 @@ var searchData= [ - ['gaussian3',['Gaussian3',['../loadGaussianVectorField_8cpp.html#affd76c1e25d5b22f077bb34594959ced',1,'Gaussian3(): loadGaussianVectorField.cpp'],['../namespaceedda.html#a6d54e1203ede2af17ea3a993e32d6a19',1,'edda::Gaussian3()']]] + ['defaultgaussianmixture',['DefaultGaussianMixture',['../namespaceedda_1_1dist.html#a7ac563ae69a0db2921a59877f32c2846',1,'edda::dist']]], + ['devicegmmarray',['DeviceGMMArray',['../namespaceedda.html#adf57cb048134c8ba9b3560698eb45a61',1,'edda']]], + ['dword',['DWORD',['../bmp__image_8h.html#af483253b2143078cede883fc3c111ad2',1,'bmp_image.h']]] ]; diff --git a/html/search/typedefs_3.html b/html/search/typedefs_3.html index 9cb52e4..8020459 100644 --- a/html/search/typedefs_3.html +++ b/html/search/typedefs_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_3.js b/html/search/typedefs_3.js index d77bb19..8bec6a3 100644 --- a/html/search/typedefs_3.js +++ b/html/search/typedefs_3.js @@ -1,4 +1,5 @@ var searchData= [ - ['istuple',['IsTuple',['../classedda_1_1Tuple.html#a0959313ba74890d7b6910c5334bd5c21',1,'edda::Tuple']]] + ['gaussianmixturewrapper',['GaussianMixtureWrapper',['../namespaceedda_1_1dist.html#a2d3e0c51c495e90c8dbaee455bebd5a4',1,'edda::dist']]], + ['gaussianwrapper',['GaussianWrapper',['../namespaceedda_1_1dist.html#a661e9bee1ea3b68d1b0b53beb82ee9c4',1,'edda::dist']]] ]; diff --git a/html/search/typedefs_4.html b/html/search/typedefs_4.html index 64c6cce..fd42831 100644 --- a/html/search/typedefs_4.html +++ b/html/search/typedefs_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_4.js b/html/search/typedefs_4.js index 2a2109a..d77bb19 100644 --- a/html/search/typedefs_4.js +++ b/html/search/typedefs_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['pointinfo',['PointInfo',['../namespaceedda.html#a943d0c00e55b9d2ca21b97d3b218993d',1,'edda']]] + ['istuple',['IsTuple',['../classedda_1_1Tuple.html#a0959313ba74890d7b6910c5334bd5c21',1,'edda::Tuple']]] ]; diff --git a/html/search/typedefs_5.html b/html/search/typedefs_5.html index e014348..feb2efa 100644 --- a/html/search/typedefs_5.html +++ b/html/search/typedefs_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_5.js b/html/search/typedefs_5.js index 5b06ea0..0b08592 100644 --- a/html/search/typedefs_5.js +++ b/html/search/typedefs_5.js @@ -1,5 +1,4 @@ var searchData= [ - ['rawarraytype',['RawArrayType',['../classedda_1_1GmmVtkDataArray.html#a2e7db86742898d8e251c4e8c64bb66af',1,'edda::GmmVtkDataArray']]], - ['real',['Real',['../namespaceedda.html#aaf50451f174934601d7a0c5a714f35ac',1,'edda']]] + ['long',['LONG',['../bmp__image_8h.html#a27ec6163192f1e1e72d87421379ea3d4',1,'bmp_image.h']]] ]; diff --git a/html/search/typedefs_6.html b/html/search/typedefs_6.html index 25d6aef..5275905 100644 --- a/html/search/typedefs_6.html +++ b/html/search/typedefs_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_6.js b/html/search/typedefs_6.js index 149b743..2d2fc8a 100644 --- a/html/search/typedefs_6.js +++ b/html/search/typedefs_6.js @@ -1,5 +1,6 @@ var searchData= [ - ['selfdeviceptr',['SelfDevicePtr',['../classedda_1_1NdArray.html#aeee148104912a94ae7f9a52ddbf6b632',1,'edda::NdArray']]], - ['super_5ft',['super_t',['../classedda_1_1ndarray__iterator.html#af10246b4a1530457d9ac30f1a897df6c',1,'edda::ndarray_iterator']]] + ['pbitmapfileheader',['PBITMAPFILEHEADER',['../bmp__image_8h.html#ad416d6889f9e54036d81a3ccb3461290',1,'bmp_image.h']]], + ['pbitmapinfoheader',['PBITMAPINFOHEADER',['../bmp__image_8h.html#a17a11cc369b8290d453bd4b23334a3bf',1,'bmp_image.h']]], + ['pointinfo',['PointInfo',['../namespaceedda.html#a943d0c00e55b9d2ca21b97d3b218993d',1,'edda']]] ]; diff --git a/html/search/typedefs_7.html b/html/search/typedefs_7.html index 77c1930..c2e4cbe 100644 --- a/html/search/typedefs_7.html +++ b/html/search/typedefs_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/typedefs_7.js b/html/search/typedefs_7.js index d6b2303..4424119 100644 --- a/html/search/typedefs_7.js +++ b/html/search/typedefs_7.js @@ -1,5 +1,6 @@ var searchData= [ - ['vector3',['Vector3',['../namespaceedda.html#a42494897f5c4030485999c80c72ea1fa',1,'edda::Vector3()'],['../namespaceedda.html#a85fb595d837d493f208da6f010859b10',1,'edda::VECTOR3()']]], - ['vector4',['VECTOR4',['../namespaceedda.html#ae93d140330f286d94cd5daa9b4a4fd47',1,'edda::VECTOR4()'],['../namespaceedda.html#a40f524404274580cb165394a7ad59669',1,'edda::Vector4()']]] + ['rawarraytype',['RawArrayType',['../classedda_1_1GmmVtkDataArray.html#a2e7db86742898d8e251c4e8c64bb66af',1,'edda::GmmVtkDataArray']]], + ['real',['Real',['../namespaceedda.html#aaf50451f174934601d7a0c5a714f35ac',1,'edda']]], + ['realvaluewrapper',['RealValueWrapper',['../namespaceedda_1_1dist.html#a0463a1d2a03104f3478ce0359a34f45c',1,'edda::dist']]] ]; diff --git a/html/search/typedefs_8.html b/html/search/typedefs_8.html new file mode 100644 index 0000000..7b8981e --- /dev/null +++ b/html/search/typedefs_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/typedefs_8.js b/html/search/typedefs_8.js new file mode 100644 index 0000000..149b743 --- /dev/null +++ b/html/search/typedefs_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['selfdeviceptr',['SelfDevicePtr',['../classedda_1_1NdArray.html#aeee148104912a94ae7f9a52ddbf6b632',1,'edda::NdArray']]], + ['super_5ft',['super_t',['../classedda_1_1ndarray__iterator.html#af10246b4a1530457d9ac30f1a897df6c',1,'edda::ndarray_iterator']]] +]; diff --git a/html/search/typedefs_9.html b/html/search/typedefs_9.html new file mode 100644 index 0000000..4d560a8 --- /dev/null +++ b/html/search/typedefs_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/typedefs_9.js b/html/search/typedefs_9.js new file mode 100644 index 0000000..83f6add --- /dev/null +++ b/html/search/typedefs_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timestamp_5ft',['timestamp_t',['../vectSpatialDecompExample_8cpp.html#a29217083807c6b153656eda1a04f306d',1,'vectSpatialDecompExample.cpp']]] +]; diff --git a/html/search/typedefs_a.html b/html/search/typedefs_a.html new file mode 100644 index 0000000..aa0d2e9 --- /dev/null +++ b/html/search/typedefs_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/typedefs_a.js b/html/search/typedefs_a.js new file mode 100644 index 0000000..8777bee --- /dev/null +++ b/html/search/typedefs_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ublas_5fmatrix',['ublas_matrix',['../namespaceedda.html#a7700035bd6d18c23761d9e9981955848',1,'edda']]], + ['ublas_5fvector',['ublas_vector',['../namespaceedda.html#a403e945b0685b365e25de9f712368d99',1,'edda']]] +]; diff --git a/html/search/typedefs_b.html b/html/search/typedefs_b.html new file mode 100644 index 0000000..b83f8e2 --- /dev/null +++ b/html/search/typedefs_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/typedefs_b.js b/html/search/typedefs_b.js new file mode 100644 index 0000000..1081db1 --- /dev/null +++ b/html/search/typedefs_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vector3',['Vector3',['../namespaceedda.html#a42494897f5c4030485999c80c72ea1fa',1,'edda::Vector3()'],['../namespaceedda.html#a85fb595d837d493f208da6f010859b10',1,'edda::VECTOR3()']]], + ['vector4',['Vector4',['../namespaceedda.html#a40f524404274580cb165394a7ad59669',1,'edda::Vector4()'],['../namespaceedda.html#ae93d140330f286d94cd5daa9b4a4fd47',1,'edda::VECTOR4()']]] +]; diff --git a/html/search/typedefs_c.html b/html/search/typedefs_c.html new file mode 100644 index 0000000..7eb3e5a --- /dev/null +++ b/html/search/typedefs_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/typedefs_c.js b/html/search/typedefs_c.js new file mode 100644 index 0000000..ba5b275 --- /dev/null +++ b/html/search/typedefs_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['word',['WORD',['../bmp__image_8h.html#a197942eefa7db30960ae396d68339b97',1,'bmp_image.h']]] +]; diff --git a/html/search/variables_0.html b/html/search/variables_0.html index 1b8adc9..164aa54 100644 --- a/html/search/variables_0.html +++ b/html/search/variables_0.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_0.js b/html/search/variables_0.js index 83056fd..b052a83 100644 --- a/html/search/variables_0.js +++ b/html/search/variables_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['array',['array',['../classedda_1_1DataSamplingArray.html#add60cf9f9b32583645e42aef99d96ca0',1,'edda::DataSamplingArray::array()'],['../classedda_1_1ScalarArray.html#a3f18a060b5cac5e110bf9687e0720b03',1,'edda::ScalarArray::array()'],['../classedda_1_1VectorArray.html#a65929b542b0a1b1d35e9f7af8ac3c690',1,'edda::VectorArray::array()']]], + ['array',['array',['../classedda_1_1ScalarDistrArray.html#af14704b6796513e744fde185226132b8',1,'edda::ScalarDistrArray::array()'],['../classedda_1_1VectorDistrArray.html#a167fecce5d4dfcf8288d9c23ba5c5264',1,'edda::VectorDistrArray::array()'],['../classedda_1_1JointDistrArray.html#aad8819cabc65d140d4d16e31e980b60f',1,'edda::JointDistrArray::array()']]], ['arrays',['arrays',['../classedda_1_1GmmVtkDataArray.html#a76c34511771f4c4932782fa649c69df1',1,'edda::GmmVtkDataArray']]] ]; diff --git a/html/search/variables_1.html b/html/search/variables_1.html index 78f63cd..857fbbd 100644 --- a/html/search/variables_1.html +++ b/html/search/variables_1.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_1.js b/html/search/variables_1.js index d623368..d1f947c 100644 --- a/html/search/variables_1.js +++ b/html/search/variables_1.js @@ -1,6 +1,21 @@ var searchData= [ - ['celllist',['CellList',['../classeddaRandomProbeFilter.html#af4e084d3abe6b8555ac53a5bb1aa302b',1,'eddaRandomProbeFilter']]], - ['components',['components',['../classedda_1_1GmmVtkDataArray.html#a31ef4c800c0abd9aa8ec05e620ce5e0c',1,'edda::GmmVtkDataArray']]], - ['computetolerance',['ComputeTolerance',['../classeddaRandomProbeFilter.html#aaaf5ce5de7410d35fcce0c50af55ce97',1,'eddaRandomProbeFilter']]] + ['bfoffbits',['bfOffBits',['../structtagBITMAPFILEHEADER.html#a5740a971a88afb51b014f54d9eb1c95c',1,'tagBITMAPFILEHEADER']]], + ['bfreserved1',['bfReserved1',['../structtagBITMAPFILEHEADER.html#aee794445cde1ce265644c1718afc6b52',1,'tagBITMAPFILEHEADER']]], + ['bfreserved2',['bfReserved2',['../structtagBITMAPFILEHEADER.html#a017d814d24a7c65de297be31856501dc',1,'tagBITMAPFILEHEADER']]], + ['bfsize',['bfSize',['../structtagBITMAPFILEHEADER.html#ad6fa0d3a907934d597b2773bc45e4d43',1,'tagBITMAPFILEHEADER']]], + ['bftype',['bfType',['../structtagBITMAPFILEHEADER.html#a64ced0b35fb93012ce3d66b2f1dd5bb8',1,'tagBITMAPFILEHEADER']]], + ['bibitcount',['biBitCount',['../structtagBITMAPINFOHEADER.html#a713c58f9cf7d5f115938d189d59fadf5',1,'tagBITMAPINFOHEADER']]], + ['biclrimportant',['biClrImportant',['../structtagBITMAPINFOHEADER.html#a637282b108fc8ac3bdf41479f9931ccb',1,'tagBITMAPINFOHEADER']]], + ['biclrused',['biClrUsed',['../structtagBITMAPINFOHEADER.html#adbf6bd52839895672030a734d2ae752f',1,'tagBITMAPINFOHEADER']]], + ['bicompression',['biCompression',['../structtagBITMAPINFOHEADER.html#a6b50d93eae77d44af8907740e337583d',1,'tagBITMAPINFOHEADER']]], + ['biheight',['biHeight',['../structtagBITMAPINFOHEADER.html#aa18cf290b7f7a6d1cc8058feae85ab68',1,'tagBITMAPINFOHEADER']]], + ['bincount',['binCount',['../classedda_1_1DistributionModeler.html#a410bc6124b366c8c93082bccaf480a9d',1,'edda::DistributionModeler::binCount()'],['../classedda_1_1VecDistrModeler.html#aba70279cacbe3c50419282b45f8af973',1,'edda::VecDistrModeler::binCount()']]], + ['biplanes',['biPlanes',['../structtagBITMAPINFOHEADER.html#a261e0f0a578bcd4d53a4a221e6ebe2fa',1,'tagBITMAPINFOHEADER']]], + ['bisize',['biSize',['../structtagBITMAPINFOHEADER.html#a78b47f256953606cbf23cd665452a263',1,'tagBITMAPINFOHEADER']]], + ['bisizeimage',['biSizeImage',['../structtagBITMAPINFOHEADER.html#ac69dfda61a32d8ec53dd11ef165d198b',1,'tagBITMAPINFOHEADER']]], + ['bitmapimage',['bitmapImage',['../structBMPImage.html#abe81c46c20b28b04cb9fb970b1a3c205',1,'BMPImage']]], + ['biwidth',['biWidth',['../structtagBITMAPINFOHEADER.html#a4bbc605184be98c4da36f707f7695e0f',1,'tagBITMAPINFOHEADER']]], + ['bixpelspermeter',['biXPelsPerMeter',['../structtagBITMAPINFOHEADER.html#ae363738b6e92248a7be41f4e7ed55c54',1,'tagBITMAPINFOHEADER']]], + ['biypelspermeter',['biYPelsPerMeter',['../structtagBITMAPINFOHEADER.html#ac6226594275d045ff0d03849945d920f',1,'tagBITMAPINFOHEADER']]] ]; diff --git a/html/search/variables_10.html b/html/search/variables_10.html index c43ead3..3143a87 100644 --- a/html/search/variables_10.html +++ b/html/search/variables_10.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_10.js b/html/search/variables_10.js index 773f577..9b89293 100644 --- a/html/search/variables_10.js +++ b/html/search/variables_10.js @@ -1,8 +1,6 @@ var searchData= [ - ['v',['v',['../structedda_1_1dist_1_1GMMTuple.html#a3ddda36da723410e6abce93cccc5b912',1,'edda::dist::GMMTuple']]], - ['validpointmaskarrayname',['ValidPointMaskArrayName',['../classeddaRandomProbeFilter.html#a9090be614887e64d4b06fbad9d6fb9c8',1,'eddaRandomProbeFilter']]], - ['validpoints',['ValidPoints',['../classeddaRandomProbeFilter.html#ade8dc98fdd22d7cc9903636c12fd17fb',1,'eddaRandomProbeFilter']]], - ['var',['var',['../structedda_1_1dist_1_1Gaussian.html#aad9425149a0a8a57a43f6098e065b04e',1,'edda::dist::Gaussian']]], - ['vec',['vec',['../classedda_1_1Tuple.html#aa251ac1a46de47bde1e2f837a9155c72',1,'edda::Tuple']]] + ['rad_5fto_5fdeg',['RAD_TO_DEG',['../namespaceedda.html#aa2b6739b83019da1bc86858c266b6fb7',1,'edda']]], + ['renwin',['renWin',['../streamlineMonteCarlo_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'streamlineMonteCarlo.cpp']]], + ['resultname',['ResultName',['../classeddaRandomSampleField.html#abbd9f0676da786b3b679416dc1c71a0c',1,'eddaRandomSampleField']]] ]; diff --git a/html/search/variables_11.html b/html/search/variables_11.html index d9dbba9..d27fb7a 100644 --- a/html/search/variables_11.html +++ b/html/search/variables_11.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_11.js b/html/search/variables_11.js index ec02235..9c745f6 100644 --- a/html/search/variables_11.js +++ b/html/search/variables_11.js @@ -1,4 +1,12 @@ var searchData= [ - ['w',['w',['../structedda_1_1dist_1_1GMMTuple.html#a3f52857178189dcb76b5132a60c0a50a',1,'edda::dist::GMMTuple']]] + ['samples',['SAMPLES',['../streamlineMonteCarlo_8cpp.html#a3c63a827daaf7041222aa1fe6a8d9630',1,'streamlineMonteCarlo.cpp']]], + ['spatialmatch',['SpatialMatch',['../classeddaRandomProbeFilter.html#a67455f5653d93d03bcabde2231146757',1,'eddaRandomProbeFilter']]], + ['step_5fsize',['step_size',['../classedda_1_1StreamTracer.html#ae5c09740fd4e418cc480fa9fa40ec50a',1,'edda::StreamTracer']]], + ['streamlines',['streamlines',['../streamlineMonteCarlo_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlineMonteCarlo.cpp']]], + ['streamtracer',['streamTracer',['../streamlineMonteCarlo_8cpp.html#a04bae7717e99d67c4ec9eb691c271bb5',1,'streamlineMonteCarlo.cpp']]], + ['subid',['subid',['../structedda_1_1Cell.html#abe7710a7b9e12341604024c1bdf4da89',1,'edda::Cell']]], + ['subtetra_5fface',['subtetra_face',['../classedda_1_1CurvilinearGrid.html#ac49f48f7436c3a2887f3b948976a952b',1,'edda::CurvilinearGrid']]], + ['subtetra_5fvertex',['subtetra_vertex',['../classedda_1_1CurvilinearGrid.html#a4d8e4b3261f31fc6383e87c913d26261',1,'edda::CurvilinearGrid']]], + ['subtriangle_5fvertex',['subtriangle_vertex',['../classedda_1_1CurvilinearGrid.html#abd79d45f2e2368ab6bf15131e6bbd2d7',1,'edda::CurvilinearGrid']]] ]; diff --git a/html/search/variables_12.html b/html/search/variables_12.html index faca26f..bc5a2b1 100644 --- a/html/search/variables_12.html +++ b/html/search/variables_12.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_12.js b/html/search/variables_12.js index b21ff9f..140a7a3 100644 --- a/html/search/variables_12.js +++ b/html/search/variables_12.js @@ -1,4 +1,8 @@ var searchData= [ - ['x',['x',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a19d61540f816dd232115080e8d9e245c',1,'edda::dist::detail::_getPdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a326ad483b659e24b2208adde995108e5',1,'edda::dist::detail::_getCdf::x()']]] + ['target_5fcomp',['target_comp',['../classedda_1_1VectorDistrArray.html#ab094fcbff0e6230da317b5c90453181d',1,'edda::VectorDistrArray::target_comp()'],['../classedda_1_1JointDistrArray.html#a4099f1638f9d5888aec37ad14bbdc74c',1,'edda::JointDistrArray::target_comp()'],['../classedda_1_1GmmVtkDataArray.html#a342aa1813d8a9083bd28344f3b1a39e6',1,'edda::GmmVtkDataArray::target_comp()']]], + ['tetra',['tetra',['../structedda_1_1Tetra__step.html#adfbd9c715abd5e1c1396d179a34c5f6f',1,'edda::Tetra_step']]], + ['tetra_5fstep',['tetra_step',['../classedda_1_1CurvilinearGrid.html#a6cc7444266390785cb138f41b25755b6',1,'edda::CurvilinearGrid']]], + ['tolerance',['Tolerance',['../classeddaRandomProbeFilter.html#a3fccd47c6c7b04a5039392eb6c6f9c3f',1,'eddaRandomProbeFilter']]], + ['type',['type',['../structedda_1_1Cell.html#a7c2af62929a97abb3d6f6f3f8830807e',1,'edda::Cell']]] ]; diff --git a/html/search/variables_13.html b/html/search/variables_13.html new file mode 100644 index 0000000..afaaf28 --- /dev/null +++ b/html/search/variables_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_13.js b/html/search/variables_13.js new file mode 100644 index 0000000..b9fb2e5 --- /dev/null +++ b/html/search/variables_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['upperthreshold',['UpperThreshold',['../classeddaThreshold.html#a24dd718cc876a3e20f07fe807c243498',1,'eddaThreshold']]], + ['usenullpoint',['UseNullPoint',['../classeddaRandomProbeFilter.html#a054974d60116bf5a9cbb59b23120bc8f',1,'eddaRandomProbeFilter']]] +]; diff --git a/html/search/variables_14.html b/html/search/variables_14.html new file mode 100644 index 0000000..6756061 --- /dev/null +++ b/html/search/variables_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_14.js b/html/search/variables_14.js new file mode 100644 index 0000000..773f577 --- /dev/null +++ b/html/search/variables_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['v',['v',['../structedda_1_1dist_1_1GMMTuple.html#a3ddda36da723410e6abce93cccc5b912',1,'edda::dist::GMMTuple']]], + ['validpointmaskarrayname',['ValidPointMaskArrayName',['../classeddaRandomProbeFilter.html#a9090be614887e64d4b06fbad9d6fb9c8',1,'eddaRandomProbeFilter']]], + ['validpoints',['ValidPoints',['../classeddaRandomProbeFilter.html#ade8dc98fdd22d7cc9903636c12fd17fb',1,'eddaRandomProbeFilter']]], + ['var',['var',['../structedda_1_1dist_1_1Gaussian.html#aad9425149a0a8a57a43f6098e065b04e',1,'edda::dist::Gaussian']]], + ['vec',['vec',['../classedda_1_1Tuple.html#aa251ac1a46de47bde1e2f837a9155c72',1,'edda::Tuple']]] +]; diff --git a/html/search/variables_15.html b/html/search/variables_15.html new file mode 100644 index 0000000..2097098 --- /dev/null +++ b/html/search/variables_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_15.js b/html/search/variables_15.js new file mode 100644 index 0000000..0000384 --- /dev/null +++ b/html/search/variables_15.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['w',['w',['../structedda_1_1dist_1_1GMMTuple.html#a3f52857178189dcb76b5132a60c0a50a',1,'edda::dist::GMMTuple']]], + ['weights',['weights',['../classedda_1_1dist_1_1JointGMM.html#a479a4af061d7414da3a2b42df3f2e87f',1,'edda::dist::JointGMM']]], + ['width',['width',['../structBMPImage.html#a35875dd635eb414965fd87e169b8fb25',1,'BMPImage']]] +]; diff --git a/html/search/variables_16.html b/html/search/variables_16.html new file mode 100644 index 0000000..1073406 --- /dev/null +++ b/html/search/variables_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_16.js b/html/search/variables_16.js new file mode 100644 index 0000000..a767ce2 --- /dev/null +++ b/html/search/variables_16.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['x',['x',['../structedda_1_1dist_1_1detail_1_1__getPdf.html#a19d61540f816dd232115080e8d9e245c',1,'edda::dist::detail::_getPdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getCdf.html#a326ad483b659e24b2208adde995108e5',1,'edda::dist::detail::_getCdf::x()'],['../structedda_1_1dist_1_1detail_1_1__getJointPdf.html#a70e558e11ffb133930469d8f615ac3c7',1,'edda::dist::detail::_getJointPdf::x()']]], + ['xsize',['xSize',['../classedda_1_1DistributionModeler.html#a92d498bbd832055ef0c8adb693db962b',1,'edda::DistributionModeler::xSize()'],['../classedda_1_1VecDistrModeler.html#aac9fad2bd21019d3ded852c3b516460f',1,'edda::VecDistrModeler::xSize()']]] +]; diff --git a/html/search/variables_17.html b/html/search/variables_17.html new file mode 100644 index 0000000..a9744b8 --- /dev/null +++ b/html/search/variables_17.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_17.js b/html/search/variables_17.js new file mode 100644 index 0000000..44ea12f --- /dev/null +++ b/html/search/variables_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ysize',['ySize',['../classedda_1_1DistributionModeler.html#af4685ae8856fcbbcfdfb77fb6a8ceafb',1,'edda::DistributionModeler::ySize()'],['../classedda_1_1VecDistrModeler.html#a9c97557c459f23ae7211997d707bd6fd',1,'edda::VecDistrModeler::ySize()']]] +]; diff --git a/html/search/variables_18.html b/html/search/variables_18.html new file mode 100644 index 0000000..370e89d --- /dev/null +++ b/html/search/variables_18.html @@ -0,0 +1,26 @@ + + + + + + + + + +
          +
          Loading...
          +
          + +
          Searching...
          +
          No Matches
          + +
          + + diff --git a/html/search/variables_18.js b/html/search/variables_18.js new file mode 100644 index 0000000..5b76141 --- /dev/null +++ b/html/search/variables_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zsize',['zSize',['../classedda_1_1DistributionModeler.html#a18f70bf8ab01e2aee85abcbcbcf87fec',1,'edda::DistributionModeler::zSize()'],['../classedda_1_1VecDistrModeler.html#ab7fb9ac27f5ecf38d1aa48b98d1e366b',1,'edda::VecDistrModeler::zSize()']]] +]; diff --git a/html/search/variables_2.html b/html/search/variables_2.html index ea80d20..35233e3 100644 --- a/html/search/variables_2.html +++ b/html/search/variables_2.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_2.js b/html/search/variables_2.js index 0eae43d..d623368 100644 --- a/html/search/variables_2.js +++ b/html/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['ddataptrarray',['dDataPtrArray',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab3016a5744ec98f46a4791f84d9e7473',1,'edda::detail::MakeStridedGmm']]], - ['deg_5fto_5frad',['DEG_TO_RAD',['../namespaceedda.html#aaba1e417275e1d2467125f4144a9f629',1,'edda']]], - ['dir',['dir',['../classedda_1_1StreamTracer.html#a6f3c23ea936d22d007d49786e40da954',1,'edda::StreamTracer']]] + ['celllist',['CellList',['../classeddaRandomProbeFilter.html#af4e084d3abe6b8555ac53a5bb1aa302b',1,'eddaRandomProbeFilter']]], + ['components',['components',['../classedda_1_1GmmVtkDataArray.html#a31ef4c800c0abd9aa8ec05e620ce5e0c',1,'edda::GmmVtkDataArray']]], + ['computetolerance',['ComputeTolerance',['../classeddaRandomProbeFilter.html#aaaf5ce5de7410d35fcce0c50af55ce97',1,'eddaRandomProbeFilter']]] ]; diff --git a/html/search/variables_3.html b/html/search/variables_3.html index 0dca26f..e45e613 100644 --- a/html/search/variables_3.html +++ b/html/search/variables_3.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_3.js b/html/search/variables_3.js index 5132f95..df08adb 100644 --- a/html/search/variables_3.js +++ b/html/search/variables_3.js @@ -1,4 +1,10 @@ var searchData= [ - ['eps',['EPS',['../namespaceedda.html#a01a5588f4970959e27a63f1e50862c02',1,'edda']]] + ['dataset',['dataset',['../classedda_1_1DistributionModeler.html#a7c2e901b02f769e23f10f34ec2074a7e',1,'edda::DistributionModeler::dataset()'],['../classedda_1_1VecDistrModeler.html#a88dd02d8a6514a636c72917d50bc96d0',1,'edda::VecDistrModeler::dataset()']]], + ['ddataptrarray',['dDataPtrArray',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab3016a5744ec98f46a4791f84d9e7473',1,'edda::detail::MakeStridedGmm']]], + ['deg_5fto_5frad',['DEG_TO_RAD',['../namespaceedda.html#aaba1e417275e1d2467125f4144a9f629',1,'edda']]], + ['dim',['dim',['../structedda_1_1detail_1_1FieldInterp.html#a982525b1a30d26cce95fb7a4d12ef571',1,'edda::detail::FieldInterp']]], + ['dir',['dir',['../structedda_1_1Tetra__step.html#a10100612bbc3f52c2016134e9d76c469',1,'edda::Tetra_step::dir()'],['../classedda_1_1StreamTracer.html#a6f3c23ea936d22d007d49786e40da954',1,'edda::StreamTracer::dir()']]], + ['dist',['dist',['../classedda_1_1dist_1_1DistributionWrapper.html#a197ac2320ba13cca2574b2ee5ea45f19',1,'edda::dist::DistributionWrapper']]], + ['distarray',['distArray',['../classedda_1_1DistributionModeler.html#a53028234d7736e523df148cc3ad3939a',1,'edda::DistributionModeler::distArray()'],['../classedda_1_1VecDistrModeler.html#a4a56bb18658949c2f7299691a5df08d6',1,'edda::VecDistrModeler::distArray()']]] ]; diff --git a/html/search/variables_4.html b/html/search/variables_4.html index 400e8e9..97ec255 100644 --- a/html/search/variables_4.html +++ b/html/search/variables_4.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_4.js b/html/search/variables_4.js index 6b626d6..853e329 100644 --- a/html/search/variables_4.js +++ b/html/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['filename',['FileName',['../classvtkEddaReader.html#af0bb3fd96db93f567912a5392aa69669',1,'vtkEddaReader']]], - ['fromcell',['fromCell',['../structedda_1_1PointInfo.html#a6330e57eebd764eb565f5d0892871750',1,'edda::PointInfo']]] + ['edge_5fvertex',['edge_vertex',['../classedda_1_1CurvilinearGrid.html#a9b2d92c3411c0b9d447f4061cdb5845c',1,'edda::CurvilinearGrid']]], + ['eps',['EPS',['../namespaceedda.html#a01a5588f4970959e27a63f1e50862c02',1,'edda']]] ]; diff --git a/html/search/variables_5.html b/html/search/variables_5.html index 7f1241f..d77fa84 100644 --- a/html/search/variables_5.html +++ b/html/search/variables_5.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_5.js b/html/search/variables_5.js index 53d38c3..32c7c52 100644 --- a/html/search/variables_5.js +++ b/html/search/variables_5.js @@ -1,7 +1,6 @@ var searchData= [ - ['incell',['inCell',['../structedda_1_1PointInfo.html#a13dba4966a4b7d7e4e552e9010e7963f',1,'edda::PointInfo']]], - ['indent',['indent',['../classvtkEddaReader.html#a4d3352141bf8250d95cc7a750fd5603a',1,'vtkEddaReader::indent()'],['../classeddaRandomProbeFilter.html#ac38d146802cd315d7581a237b2deb183',1,'eddaRandomProbeFilter::indent()'],['../classeddaRandomSampleField.html#aa4a51806545d1361a752d2b71a2f3b16',1,'eddaRandomSampleField::indent()'],['../classeddaThreshold.html#a357e9ccf6a6db4f7e4c03c3da2fe2a16',1,'eddaThreshold::indent()'],['../classeddaUncertainIsocontour.html#aff0c0464cef279618d1126b3c6ef0ec1',1,'eddaUncertainIsocontour::indent()']]], - ['interpolant',['interpolant',['../structedda_1_1PointInfo.html#a4c998e4aae508e07f67824248763dbfd',1,'edda::PointInfo']]], - ['isov',['Isov',['../classeddaRandomSampleField.html#a781625f8263388cd304a6d34dd072be3',1,'eddaRandomSampleField::Isov()'],['../classeddaUncertainIsocontour.html#ac39cde59b4de5e912bcad2df35be2593',1,'eddaUncertainIsocontour::Isov()']]] + ['face',['face',['../structedda_1_1Tetra__step.html#ad9e3b39a9fe489b37b0d47a6d3cc18b8',1,'edda::Tetra_step']]], + ['fieldbegin',['fieldBegin',['../structedda_1_1detail_1_1FieldInterp.html#aeecf63fba35b725bbab3eb2776bd8096',1,'edda::detail::FieldInterp::fieldBegin()'],['../structedda_1_1detail_1_1MCStreamline__functor.html#af26a34f507f9d99368f070d3dc16a989',1,'edda::detail::MCStreamline_functor::fieldBegin()']]], + ['fromcell',['fromCell',['../structedda_1_1PointInfo.html#a6330e57eebd764eb565f5d0892871750',1,'edda::PointInfo']]] ]; diff --git a/html/search/variables_6.html b/html/search/variables_6.html index 7536df8..c656bb6 100644 --- a/html/search/variables_6.html +++ b/html/search/variables_6.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_6.js b/html/search/variables_6.js index d2c34b1..ce34879 100644 --- a/html/search/variables_6.js +++ b/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['kndarraymaxdims',['kNdArrayMaxDims',['../namespaceedda.html#a34a02e3b4884d34500d553916a6015ff',1,'edda']]] + ['gaus',['gaus',['../classedda_1_1dist_1_1JointGMM.html#a9d7ba4b30097b161f2474b48b04b672d',1,'edda::dist::JointGMM']]] ]; diff --git a/html/search/variables_7.html b/html/search/variables_7.html index 66186a6..8aac836 100644 --- a/html/search/variables_7.html +++ b/html/search/variables_7.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_7.js b/html/search/variables_7.js index 4717acd..75cbfec 100644 --- a/html/search/variables_7.js +++ b/html/search/variables_7.js @@ -1,6 +1,5 @@ var searchData= [ - ['length',['length',['../classedda_1_1GmmVtkDataArray.html#a6add24c021c3834d0976f8e889ccda8c',1,'edda::GmmVtkDataArray']]], - ['linewidget',['lineWidget',['../streamlineGaussianVTK_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'lineWidget(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'lineWidget(): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#ae63c6f6b90e2ccc16c4bfa872d63dacd',1,'lineWidget(): test_vtk_pipeline.cpp']]], - ['lowerthreshold',['LowerThreshold',['../classeddaThreshold.html#a27a4fb8c390c575bf22b8c864c25d13d',1,'eddaThreshold']]] + ['height',['height',['../structBMPImage.html#ad56a6b040478a6012223634dcc19005c',1,'BMPImage']]], + ['hexa_5fface',['hexa_face',['../classedda_1_1CurvilinearGrid.html#af4a3a578a56a958f6d4c87d6a000cae9',1,'edda::CurvilinearGrid']]] ]; diff --git a/html/search/variables_8.html b/html/search/variables_8.html index aa13bf2..a74c6ca 100644 --- a/html/search/variables_8.html +++ b/html/search/variables_8.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_8.js b/html/search/variables_8.js index 88d784f..793f63d 100644 --- a/html/search/variables_8.js +++ b/html/search/variables_8.js @@ -1,13 +1,8 @@ var searchData= [ - ['m',['m',['../structedda_1_1dist_1_1GMMTuple.html#a51f92001831208525f57b22006b874e8',1,'edda::dist::GMMTuple']]], - ['m_5fndimension',['m_nDimension',['../classedda_1_1CartesianGrid.html#ab87b87344ff04b342fba7a09bfd36259',1,'edda::CartesianGrid']]], - ['m_5fvmaxbound',['m_vMaxBound',['../classedda_1_1CartesianGrid.html#a096d323e8074766915b96d4d5ba545c3',1,'edda::CartesianGrid']]], - ['m_5fvmaxrealbound',['m_vMaxRealBound',['../classedda_1_1CartesianGrid.html#a363b39d07aa945fd4b0ea38ed36831e3',1,'edda::CartesianGrid']]], - ['m_5fvminbound',['m_vMinBound',['../classedda_1_1CartesianGrid.html#a6b76c040a7f84ec3ccf4bc29de8672fc',1,'edda::CartesianGrid']]], - ['m_5fvminrealbound',['m_vMinRealBound',['../classedda_1_1CartesianGrid.html#a5eda0e56f6f7d3b802ece2d418e2e9f4',1,'edda::CartesianGrid']]], - ['maskpoints',['MaskPoints',['../classeddaRandomProbeFilter.html#aaa3705c5768ecba66c0ab92b081bc7c5',1,'eddaRandomProbeFilter']]], - ['max_5fsteps',['max_steps',['../classedda_1_1StreamTracer.html#abb1e966b1b8d8674a082f9f23e9948f5',1,'edda::StreamTracer']]], - ['mean',['mean',['../structedda_1_1dist_1_1Gaussian.html#abded38b8a7bfc642a7d3fe7690b58a7c',1,'edda::dist::Gaussian']]], - ['models',['models',['../classedda_1_1dist_1_1GaussianMixture.html#a7b44bbaaa4ea8a49ccf5f04e1628032b',1,'edda::dist::GaussianMixture']]] + ['ijk',['ijk',['../structedda_1_1Cell.html#a751450b94f6ae7d56f1df6e8320269a2',1,'edda::Cell']]], + ['incell',['inCell',['../structedda_1_1PointInfo.html#a13dba4966a4b7d7e4e552e9010e7963f',1,'edda::PointInfo']]], + ['indent',['indent',['../classeddaRandomProbeFilter.html#ac38d146802cd315d7581a237b2deb183',1,'eddaRandomProbeFilter::indent()'],['../classeddaRandomSampleField.html#aa4a51806545d1361a752d2b71a2f3b16',1,'eddaRandomSampleField::indent()'],['../classeddaThreshold.html#a357e9ccf6a6db4f7e4c03c3da2fe2a16',1,'eddaThreshold::indent()'],['../classeddaUncertainIsocontour.html#aff0c0464cef279618d1126b3c6ef0ec1',1,'eddaUncertainIsocontour::indent()']]], + ['interpolant',['interpolant',['../structedda_1_1PointInfo.html#a4c998e4aae508e07f67824248763dbfd',1,'edda::PointInfo']]], + ['isov',['Isov',['../classeddaRandomSampleField.html#a781625f8263388cd304a6d34dd072be3',1,'eddaRandomSampleField::Isov()'],['../classeddaUncertainIsocontour.html#ac39cde59b4de5e912bcad2df35be2593',1,'eddaUncertainIsocontour::Isov()']]] ]; diff --git a/html/search/variables_9.html b/html/search/variables_9.html index 78cc249..3968526 100644 --- a/html/search/variables_9.html +++ b/html/search/variables_9.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_9.js b/html/search/variables_9.js index 8b9907d..d2c34b1 100644 --- a/html/search/variables_9.js +++ b/html/search/variables_9.js @@ -1,6 +1,4 @@ var searchData= [ - ['narrays',['narrays',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab7974a41a2bf7bd27678b6c1afa0a3a0',1,'edda::detail::MakeStridedGmm::narrays()'],['../classedda_1_1GmmArray.html#a3da54976d6acc96ae59c51d58c4c263d',1,'edda::GmmArray::narrays()']]], - ['num_5fof_5felems',['num_of_elems',['../classedda_1_1GmmArray.html#abe3844027b4efd8eaa029c78735f4fa6',1,'edda::GmmArray']]], - ['numberofvalidpoints',['NumberOfValidPoints',['../classeddaRandomProbeFilter.html#ab9f37f880d57cc5d17f63cd1123e09e2',1,'eddaRandomProbeFilter']]] + ['kndarraymaxdims',['kNdArrayMaxDims',['../namespaceedda.html#a34a02e3b4884d34500d553916a6015ff',1,'edda']]] ]; diff --git a/html/search/variables_a.html b/html/search/variables_a.html index 592abaa..ce54923 100644 --- a/html/search/variables_a.html +++ b/html/search/variables_a.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_a.js b/html/search/variables_a.js index c7da21e..82ab326 100644 --- a/html/search/variables_a.js +++ b/html/search/variables_a.js @@ -1,4 +1,6 @@ var searchData= [ - ['ord',['ord',['../classedda_1_1StreamTracer.html#a803bbf5eed13823c9c502722a2fc5621',1,'edda::StreamTracer']]] + ['length',['length',['../classedda_1_1GmmVtkDataArray.html#a6add24c021c3834d0976f8e889ccda8c',1,'edda::GmmVtkDataArray']]], + ['linewidget',['lineWidget',['../streamlineMonteCarlo_8cpp.html#adc16b41b160a388547ee8a05d26f73f3',1,'streamlineMonteCarlo.cpp']]], + ['lowerthreshold',['LowerThreshold',['../classeddaThreshold.html#a27a4fb8c390c575bf22b8c864c25d13d',1,'eddaThreshold']]] ]; diff --git a/html/search/variables_b.html b/html/search/variables_b.html index 78052a1..4825aed 100644 --- a/html/search/variables_b.html +++ b/html/search/variables_b.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_b.js b/html/search/variables_b.js index 5e9dd0a..8955d14 100644 --- a/html/search/variables_b.js +++ b/html/search/variables_b.js @@ -1,14 +1,18 @@ var searchData= [ - ['p',['p',['../structedda_1_1dist_1_1GMMTuple.html#a5feb8eb1f4ab6490cad0f7accceac426',1,'edda::dist::GMMTuple']]], - ['parray',['pArray',['../classedda_1_1Dataset.html#addc26bb8363ae78a3a9b2996c367feb4',1,'edda::Dataset']]], - ['passcellarrays',['PassCellArrays',['../classeddaRandomProbeFilter.html#ae63da6f5fc1ea74ad47ccc58b219726a',1,'eddaRandomProbeFilter']]], - ['passfieldarrays',['PassFieldArrays',['../classeddaRandomProbeFilter.html#a300608995e2abb9325753bd6a67b8ca2',1,'eddaRandomProbeFilter']]], - ['passpartialarrays',['PassPartialArrays',['../classvtkCompositeUncertainIsocontour.html#a035a464d2ad49d247c1d72a0cca55988',1,'vtkCompositeUncertainIsocontour']]], - ['passpointarrays',['PassPointArrays',['../classeddaRandomProbeFilter.html#a8e654d8f86c9f53558313a408a0d41a8',1,'eddaRandomProbeFilter']]], - ['pgrid',['pGrid',['../classedda_1_1Dataset.html#a8a71a86531d1f159cebe2971b0039560',1,'edda::Dataset']]], - ['phycoord',['phyCoord',['../structedda_1_1PointInfo.html#a4c6cffc07aa2bde86bfae400ea723b8a',1,'edda::PointInfo']]], - ['pi_5fby_5f2',['PI_BY_2',['../namespaceedda.html#a6a021411c1f74214e17e1150d8f4079c',1,'edda']]], - ['pointlist',['PointList',['../classeddaRandomProbeFilter.html#aa6f3755de01f1a75885cf25ec3693ab1',1,'eddaRandomProbeFilter']]], - ['prefix',['Prefix',['../classeddaRandomSampleField.html#a768de28149cff3a3a8973ab561d72da3',1,'eddaRandomSampleField']]] + ['m',['m',['../structedda_1_1dist_1_1GMMTuple.html#a51f92001831208525f57b22006b874e8',1,'edda::dist::GMMTuple']]], + ['m_5fbinwidth',['m_binWidth',['../classedda_1_1dist_1_1Histogram.html#a78e968cd9358d661ba8b06ce44f5c987',1,'edda::dist::Histogram']]], + ['m_5fcdf',['m_cdf',['../classedda_1_1dist_1_1Histogram.html#a8bb932b42a80e859598e131d67e8e686',1,'edda::dist::Histogram']]], + ['m_5fmaxvalue',['m_maxValue',['../classedda_1_1dist_1_1Histogram.html#ac9205c786a9a3063b4556d8a559802d5',1,'edda::dist::Histogram']]], + ['m_5fminvalue',['m_minValue',['../classedda_1_1dist_1_1Histogram.html#ad567bb59006090492cdbb34c3a5e5d38',1,'edda::dist::Histogram']]], + ['m_5fnbins',['m_nBins',['../classedda_1_1dist_1_1Histogram.html#a646ad7e9990bd5a75f420c2c073f506a',1,'edda::dist::Histogram']]], + ['m_5fndimension',['m_nDimension',['../classedda_1_1CartesianGrid.html#ab87b87344ff04b342fba7a09bfd36259',1,'edda::CartesianGrid']]], + ['m_5fvmaxbound',['m_vMaxBound',['../classedda_1_1CartesianGrid.html#a096d323e8074766915b96d4d5ba545c3',1,'edda::CartesianGrid']]], + ['m_5fvmaxrealbound',['m_vMaxRealBound',['../classedda_1_1CartesianGrid.html#a363b39d07aa945fd4b0ea38ed36831e3',1,'edda::CartesianGrid']]], + ['m_5fvminbound',['m_vMinBound',['../classedda_1_1CartesianGrid.html#a6b76c040a7f84ec3ccf4bc29de8672fc',1,'edda::CartesianGrid']]], + ['m_5fvminrealbound',['m_vMinRealBound',['../classedda_1_1CartesianGrid.html#a5eda0e56f6f7d3b802ece2d418e2e9f4',1,'edda::CartesianGrid']]], + ['maskpoints',['MaskPoints',['../classeddaRandomProbeFilter.html#aaa3705c5768ecba66c0ab92b081bc7c5',1,'eddaRandomProbeFilter']]], + ['max_5fsteps',['max_steps',['../classedda_1_1StreamTracer.html#abb1e966b1b8d8674a082f9f23e9948f5',1,'edda::StreamTracer']]], + ['mean',['mean',['../structedda_1_1dist_1_1Gaussian.html#abded38b8a7bfc642a7d3fe7690b58a7c',1,'edda::dist::Gaussian::mean()'],['../structedda_1_1dist_1_1JointHistogram.html#a8aa0e9ab4fc3c3067f4e2466e12344c1',1,'edda::dist::JointHistogram::mean()']]], + ['models',['models',['../classedda_1_1dist_1_1GaussianMixture.html#a58cc2e067440f90ca4386511f7b1832d',1,'edda::dist::GaussianMixture']]] ]; diff --git a/html/search/variables_c.html b/html/search/variables_c.html index b2260e4..40b9b9a 100644 --- a/html/search/variables_c.html +++ b/html/search/variables_c.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_c.js b/html/search/variables_c.js index 6da339f..a927fca 100644 --- a/html/search/variables_c.js +++ b/html/search/variables_c.js @@ -1,6 +1,12 @@ var searchData= [ - ['rad_5fto_5fdeg',['RAD_TO_DEG',['../namespaceedda.html#aa2b6739b83019da1bc86858c266b6fb7',1,'edda']]], - ['renwin',['renWin',['../streamlineGaussianVTK_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'renWin(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a75a46b80daa76226065e3922d67c145f',1,'renWin(): streamlineMonteCarlo.cpp'],['../test__vtk__pipeline_8cpp.html#a2383c407890df9dfe61f963667a59dc0',1,'renWin(): test_vtk_pipeline.cpp']]], - ['resultname',['ResultName',['../classeddaRandomSampleField.html#abbd9f0676da786b3b679416dc1c71a0c',1,'eddaRandomSampleField']]] + ['n_5finitial_5flocations',['n_initial_locations',['../classedda_1_1CurvilinearGrid.html#a5de9ec4573031672b6f29f897a05fddd',1,'edda::CurvilinearGrid']]], + ['narrays',['narrays',['../structedda_1_1detail_1_1MakeStridedGmm.html#ab7974a41a2bf7bd27678b6c1afa0a3a0',1,'edda::detail::MakeStridedGmm::narrays()'],['../classedda_1_1GmmArray.html#a3da54976d6acc96ae59c51d58c4c263d',1,'edda::GmmArray::narrays()'],['../classedda_1_1HistoArray.html#a5f15453dfc62eea349c0f91ef513e922',1,'edda::HistoArray::narrays()']]], + ['nc_5ferr',['NC_ERR',['../ensembleExample_8cpp.html#a6d1bf214ede7eda4e61f9f6a0b37ce7c',1,'ensembleExample.cpp']]], + ['ncomp',['nComp',['../classedda_1_1dist_1_1JointGMM.html#a240fc4fffb8a98da46eda49081c68f64',1,'edda::dist::JointGMM']]], + ['num_5fcomps',['num_comps',['../classedda_1_1JointDistrArray.html#a5dbb26cb4647e5eac16e315161a95f50',1,'edda::JointDistrArray']]], + ['num_5fof_5felems',['num_of_elems',['../classedda_1_1GmmArray.html#abe3844027b4efd8eaa029c78735f4fa6',1,'edda::GmmArray::num_of_elems()'],['../classedda_1_1HistoArray.html#af0a8a2c36afa0d7d90d9b5f6ae6394f0',1,'edda::HistoArray::num_of_elems()']]], + ['numberofvalidpoints',['NumberOfValidPoints',['../classeddaRandomProbeFilter.html#ab9f37f880d57cc5d17f63cd1123e09e2',1,'eddaRandomProbeFilter']]], + ['numcomp',['numComp',['../classedda_1_1VecDistrModeler.html#a0d6c069c0c456094545b6841d7e02983',1,'edda::VecDistrModeler']]], + ['nvar',['nVar',['../classedda_1_1dist_1_1JointGMM.html#abf279ec0da47ed1571381e31ba56ab7f',1,'edda::dist::JointGMM']]] ]; diff --git a/html/search/variables_d.html b/html/search/variables_d.html index f477999..125bf94 100644 --- a/html/search/variables_d.html +++ b/html/search/variables_d.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_d.js b/html/search/variables_d.js index 8c3f321..c7da21e 100644 --- a/html/search/variables_d.js +++ b/html/search/variables_d.js @@ -1,9 +1,4 @@ var searchData= [ - ['samples',['SAMPLES',['../streamlineMonteCarlo_8cpp.html#a3c63a827daaf7041222aa1fe6a8d9630',1,'streamlineMonteCarlo.cpp']]], - ['seeds',['seeds',['../test__vtk__pipeline_8cpp.html#aa06dd1fc53f3ad746591a32d79457e9b',1,'test_vtk_pipeline.cpp']]], - ['spatialmatch',['SpatialMatch',['../classeddaRandomProbeFilter.html#a67455f5653d93d03bcabde2231146757',1,'eddaRandomProbeFilter']]], - ['step_5fsize',['step_size',['../classedda_1_1StreamTracer.html#ae5c09740fd4e418cc480fa9fa40ec50a',1,'edda::StreamTracer']]], - ['streamlines',['streamlines',['../streamlineGaussianVTK_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlines(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a13be10cc6982f2e1d678449f1a04b5f3',1,'streamlines(): streamlineMonteCarlo.cpp']]], - ['streamtracer',['streamTracer',['../streamlineGaussianVTK_8cpp.html#a28d57910e2cb285650456eea5857c3c0',1,'streamTracer(): streamlineGaussianVTK.cpp'],['../streamlineMonteCarlo_8cpp.html#a04bae7717e99d67c4ec9eb691c271bb5',1,'streamTracer(): streamlineMonteCarlo.cpp']]] + ['ord',['ord',['../classedda_1_1StreamTracer.html#a803bbf5eed13823c9c502722a2fc5621',1,'edda::StreamTracer']]] ]; diff --git a/html/search/variables_e.html b/html/search/variables_e.html index 1165006..3f5bb66 100644 --- a/html/search/variables_e.html +++ b/html/search/variables_e.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_e.js b/html/search/variables_e.js index f1dfede..a791b55 100644 --- a/html/search/variables_e.js +++ b/html/search/variables_e.js @@ -1,4 +1,13 @@ var searchData= [ - ['tolerance',['Tolerance',['../classeddaRandomProbeFilter.html#a3fccd47c6c7b04a5039392eb6c6f9c3f',1,'eddaRandomProbeFilter']]] + ['p',['p',['../structedda_1_1dist_1_1GMMTuple.html#a5feb8eb1f4ab6490cad0f7accceac426',1,'edda::dist::GMMTuple']]], + ['parray',['pArray',['../classedda_1_1Dataset.html#a2d6ffd6ccd2e511740db0c2864d2c2fd',1,'edda::Dataset']]], + ['passcellarrays',['PassCellArrays',['../classeddaRandomProbeFilter.html#ae63da6f5fc1ea74ad47ccc58b219726a',1,'eddaRandomProbeFilter']]], + ['passfieldarrays',['PassFieldArrays',['../classeddaRandomProbeFilter.html#a300608995e2abb9325753bd6a67b8ca2',1,'eddaRandomProbeFilter']]], + ['passpointarrays',['PassPointArrays',['../classeddaRandomProbeFilter.html#a8e654d8f86c9f53558313a408a0d41a8',1,'eddaRandomProbeFilter']]], + ['pgrid',['pGrid',['../classedda_1_1Dataset.html#a8a71a86531d1f159cebe2971b0039560',1,'edda::Dataset']]], + ['phycoord',['phyCoord',['../structedda_1_1PointInfo.html#a4c6cffc07aa2bde86bfae400ea723b8a',1,'edda::PointInfo']]], + ['pi_5fby_5f2',['PI_BY_2',['../namespaceedda.html#a6a021411c1f74214e17e1150d8f4079c',1,'edda']]], + ['pointlist',['PointList',['../classeddaRandomProbeFilter.html#aa6f3755de01f1a75885cf25ec3693ab1',1,'eddaRandomProbeFilter']]], + ['prefix',['Prefix',['../classeddaRandomSampleField.html#a768de28149cff3a3a8973ab561d72da3',1,'eddaRandomSampleField']]] ]; diff --git a/html/search/variables_f.html b/html/search/variables_f.html index 537dd7c..20f5167 100644 --- a/html/search/variables_f.html +++ b/html/search/variables_f.html @@ -1,7 +1,7 @@ - + diff --git a/html/search/variables_f.js b/html/search/variables_f.js index b9fb2e5..869e83e 100644 --- a/html/search/variables_f.js +++ b/html/search/variables_f.js @@ -1,5 +1,4 @@ var searchData= [ - ['upperthreshold',['UpperThreshold',['../classeddaThreshold.html#a24dd718cc876a3e20f07fe807c243498',1,'eddaThreshold']]], - ['usenullpoint',['UseNullPoint',['../classeddaRandomProbeFilter.html#a054974d60116bf5a9cbb59b23120bc8f',1,'eddaRandomProbeFilter']]] + ['quadrilateral_5fvertex',['quadrilateral_vertex',['../classedda_1_1CurvilinearGrid.html#af12b8985498423e4fd75768c1a5a5fce',1,'edda::CurvilinearGrid']]] ]; diff --git a/html/shared__ary_8h.html b/html/shared__ary_8h.html index 8639948..ade9aee 100644 --- a/html/shared__ary_8h.html +++ b/html/shared__ary_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/shared_ary.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -93,7 +69,7 @@
          shared_ary.h File Reference
          -
          #include <memory>
          +
          #include <memory>

          Go to the source code of this file.

          @@ -104,16 +80,16 @@
          - - + +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
          diff --git a/html/shared__ary_8h_source.html b/html/shared__ary_8h_source.html index bb7771b..386dad9 100644 --- a/html/shared__ary_8h_source.html +++ b/html/shared__ary_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/shared_ary.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,57 +66,21 @@
          shared_ary.h
          -Go to the documentation of this file.
          1 
          -
          2 #ifndef SHARED_ARRAY_H_
          -
          3 #define SHARED_ARRAY_H_
          -
          4 
          -
          5 #include <memory>
          -
          6 
          -
          7 namespace edda{
          -
          8 
          -
          12 template <class T>
          -
          13 class shared_ary : public std::shared_ptr<T>
          -
          14 {
          -
          15  size_t n;
          -
          16  class DeleteArray
          -
          17  {
          -
          18  public:
          -
          19  void operator () (T* d) const
          -
          20  {
          -
          21  if (d)
          -
          22  delete [] d;
          -
          23  }
          -
          24  };
          -
          25 
          -
          26 public:
          -
          27  shared_ary(): std::shared_ptr<T>(NULL, DeleteArray()), n(0) {}
          -
          28  shared_ary(T *p, size_t n_): std::shared_ptr<T>(p, DeleteArray()), n(n_) { }
          -
          29  shared_ary(size_t n_): shared_ary(new T[n_], n_) {}
          -
          30 
          -
          31  T & operator[] (int i) const { //std::cout << n << ',' << i;
          -
          32  assert(i>=0 && i<n); return this->get()[i]; }
          -
          33  size_t getLength() const {return n;}
          -
          34  void swap(shared_ary<T> &ary) {
          -
          35  std::shared_ptr<T>::swap(ary); std::swap(n, ary.n);
          -
          36  }
          -
          37 };
          -
          38 
          -
          39 } // namespace edda
          -
          40 
          -
          41 #endif // SHARED_ARRAY_H_
          -
          Definition: shared_ary.h:13
          -
          size_t getLength() const
          Definition: shared_ary.h:33
          +Go to the documentation of this file.
          1 
          2 #ifndef SHARED_ARRAY_H_
          3 #define SHARED_ARRAY_H_
          4 
          5 #include <memory>
          6 
          7 namespace edda{
          8 
          12 template <class T>
          13 class shared_ary : public std::shared_ptr<T>
          14 {
          15  size_t n;
          16  class DeleteArray
          17  {
          18  public:
          19  void operator () (T* d) const
          20  {
          21  if (d)
          22  delete [] d;
          23  }
          24  };
          25 
          26 public:
          27  shared_ary(): std::shared_ptr<T>(NULL, DeleteArray()), n(0) {}
          28  shared_ary(T *p, size_t n_): std::shared_ptr<T>(p, DeleteArray()), n(n_) { }
          29  shared_ary(size_t n_): shared_ary(new T[n_], n_) {}
          30 
          31  T & operator[] (int i) const { //std::cout << n << ',' << i;
          32  assert(i>=0 && i<n); return this->get()[i]; }
          33  size_t getLength() const {return n;}
          34  void swap(shared_ary<T> &ary) {
          35  std::shared_ptr<T>::swap(ary); std::swap(n, ary.n);
          36  }
          37 };
          38 
          39 } // namespace edda
          40 
          41 #endif // SHARED_ARRAY_H_
          Definition: shared_ary.h:13
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          shared_ary(T *p, size_t n_)
          Definition: shared_ary.h:28
          shared_ary(size_t n_)
          Definition: shared_ary.h:29
          shared_ary()
          Definition: shared_ary.h:27
          -
          T & operator[](int i) const
          Definition: shared_ary.h:31
          +
          size_t getLength() const
          Definition: shared_ary.h:33
          +
          T & operator[](int i) const
          Definition: shared_ary.h:31
          void swap(shared_ary< T > &ary)
          Definition: shared_ary.h:34
          diff --git a/html/spatialDecompositionExample_8cpp.html b/html/spatialDecompositionExample_8cpp.html new file mode 100644 index 0000000..18b9d5a --- /dev/null +++ b/html/spatialDecompositionExample_8cpp.html @@ -0,0 +1,120 @@ + + + + + + + +EDDA: distr_modeler/spatialDecompositionExample.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          spatialDecompositionExample.cpp File Reference
          +
          +
          +
          #include <iostream>
          +#include <stdlib.h>
          +#include <cmath>
          +#include <vector>
          +#include <sstream>
          +#include "distributionModeler.h"
          +
          + + + +

          +Functions

          int main (int argc, char *argv[])
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + + + + + + + + + + + + +
          int main (int argc,
          char * argv[] 
          )
          +
          + +
          +
          +
          + + + + diff --git a/html/splitbar.png b/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/html/splitbar.png differ diff --git a/html/src_2core_2ndarray_8h.html b/html/src_2core_2ndarray_8h.html index 330b24d..78f564a 100644 --- a/html/src_2core_2ndarray_8h.html +++ b/html/src_2core_2ndarray_8h.html @@ -38,7 +38,6 @@
          + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
          @@ -116,7 +115,7 @@
          diff --git a/html/src_2core_2ndarray_8h_source.html b/html/src_2core_2ndarray_8h_source.html index aaed5b4..6c29fb1 100644 --- a/html/src_2core_2ndarray_8h_source.html +++ b/html/src_2core_2ndarray_8h_source.html @@ -38,7 +38,6 @@

        diff --git a/html/structedda_1_1NotImplementedException.html b/html/structedda_1_1NotImplementedException.html index 47f70c6..193e75c 100644 --- a/html/structedda_1_1NotImplementedException.html +++ b/html/structedda_1_1NotImplementedException.html @@ -3,16 +3,15 @@ - + + EDDA: edda::NotImplementedException Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -112,7 +86,9 @@

         

        Constructor & Destructor Documentation

        - + +

        § NotImplementedException()

        +
        @@ -141,9 +117,9 @@

        Constructor & Destructor Documentation

        diff --git a/html/structedda_1_1PointInfo-members.html b/html/structedda_1_1PointInfo-members.html index 8ededfd..44b846d 100644 --- a/html/structedda_1_1PointInfo-members.html +++ b/html/structedda_1_1PointInfo-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -104,9 +78,9 @@
        diff --git a/html/structedda_1_1PointInfo.html b/html/structedda_1_1PointInfo.html index 1375f01..aeccadc 100644 --- a/html/structedda_1_1PointInfo.html +++ b/html/structedda_1_1PointInfo.html @@ -3,16 +3,15 @@ - + + EDDA: edda::PointInfo Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -123,7 +97,9 @@

        Detailed Description

        about the advection point

        Constructor & Destructor Documentation

        - + +

        § PointInfo() [1/2]

        +
        @@ -146,7 +122,9 @@ - + +

        § PointInfo() [2/2]

        +
        @@ -193,7 +171,9 @@

        Member Data Documentation

        - + +

        § fromCell

        +
        @@ -205,7 +185,9 @@

        Member Data Documentation

        - + +

        § inCell

        +
        @@ -217,7 +199,9 @@

        Member Data Documentation

        - + +

        § interpolant

        +
        @@ -229,7 +213,9 @@

        Member Data Documentation

        - + +

        § phyCoord

        +
        @@ -247,9 +233,9 @@

        Member Data Documentation

        diff --git a/html/structedda_1_1Rand-members.html b/html/structedda_1_1Rand-members.html index 32f2c27..510ff27 100644 --- a/html/structedda_1_1Rand-members.html +++ b/html/structedda_1_1Rand-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -99,9 +73,9 @@
        diff --git a/html/structedda_1_1Rand.html b/html/structedda_1_1Rand.html index cf28f7e..3773fd2 100644 --- a/html/structedda_1_1Rand.html +++ b/html/structedda_1_1Rand.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Rand Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -110,7 +84,9 @@

        Simply return a random value between 0..1.

        Need to pass a unique index value

        Member Function Documentation

        - + +

        § operator()()

        +
        @@ -140,9 +116,9 @@ diff --git a/html/structedda_1_1Tetra__step-members.html b/html/structedda_1_1Tetra__step-members.html new file mode 100644 index 0000000..d5dafe0 --- /dev/null +++ b/html/structedda_1_1Tetra__step-members.html @@ -0,0 +1,83 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        +
        + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::Tetra_step Member List
        +
        +
        + +

        This is the complete list of members for edda::Tetra_step, including all inherited members.

        + + + + +
        diredda::Tetra_step
        faceedda::Tetra_step
        tetraedda::Tetra_step
        + + + + diff --git a/html/structedda_1_1Tetra__step.html b/html/structedda_1_1Tetra__step.html new file mode 100644 index 0000000..1d77dc1 --- /dev/null +++ b/html/structedda_1_1Tetra__step.html @@ -0,0 +1,138 @@ + + + + + + + +EDDA: edda::Tetra_step Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::Tetra_step Struct Reference
        +
        +
        + +

        #include <curvilinear_grid.h>

        + + + + + + + + +

        +Public Attributes

        int dir
         
        int tetra
         
        int face
         
        +

        Member Data Documentation

        + +

        § dir

        + +
        +
        + + + + +
        int edda::Tetra_step::dir
        +
        + +
        +
        + +

        § face

        + +
        +
        + + + + +
        int edda::Tetra_step::face
        +
        + +
        +
        + +

        § tetra

        + +
        +
        + + + + +
        int edda::Tetra_step::tetra
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1Tuple1-members.html b/html/structedda_1_1Tuple1-members.html index 2a1c20d..5094283 100644 --- a/html/structedda_1_1Tuple1-members.html +++ b/html/structedda_1_1Tuple1-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple1< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 1 >inline
        cast() constedda::Tuple< T, 1 >inline
        getData()edda::Tuple< T, 1 >inline
        getData() constedda::Tuple< T, 1 >inline
        getData() constedda::Tuple< T, 1 >inline
        IsTuple typedefedda::Tuple< T, 1 >
        LENGTH enum valueedda::Tuple< T, 1 >
        length() constedda::Tuple< T, 1 >inline
        length() constedda::Tuple< T, 1 >inline
        operator[](int i)edda::Tuple< T, 1 >inline
        operator[](int i) constedda::Tuple< T, 1 >inline
        operator[](int i) constedda::Tuple< T, 1 >inline
        Tuple()edda::Tuple< T, 1 >inline
        Tuple(const T &scalar)edda::Tuple< T, 1 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 1 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple1.html b/html/structedda_1_1Tuple1.html index b44d2f8..3a52018 100644 --- a/html/structedda_1_1Tuple1.html +++ b/html/structedda_1_1Tuple1.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple1< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple1< T >:
        - - + + edda::Tuple< T, 1 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 1 >
        vec [N]
         
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple2< T >, including all inherited members.

        - + - + - + - + @@ -113,9 +87,9 @@
        cast() constedda::Tuple< T, 2 >inline
        cast() constedda::Tuple< T, 2 >inline
        getData()edda::Tuple< T, 2 >inline
        getData() constedda::Tuple< T, 2 >inline
        getData() constedda::Tuple< T, 2 >inline
        IsTuple typedefedda::Tuple< T, 2 >
        LENGTH enum valueedda::Tuple< T, 2 >
        length() constedda::Tuple< T, 2 >inline
        length() constedda::Tuple< T, 2 >inline
        operator[](int i)edda::Tuple< T, 2 >inline
        operator[](int i) constedda::Tuple< T, 2 >inline
        operator[](int i) constedda::Tuple< T, 2 >inline
        Tuple()edda::Tuple< T, 2 >inline
        Tuple(const T &scalar)edda::Tuple< T, 2 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 2 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple2.html b/html/structedda_1_1Tuple2.html index 93e8bbc..335bc04 100644 --- a/html/structedda_1_1Tuple2.html +++ b/html/structedda_1_1Tuple2.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple2< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -101,8 +75,8 @@ Inheritance diagram for edda::Tuple2< T >:
        - - + + edda::Tuple< T, 2 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        @@ -147,7 +121,9 @@

        Additional Inherited Members

         

        Constructor & Destructor Documentation

        - + +

        § Tuple2() [1/2]

        +
        @@ -172,7 +148,9 @@

        Constructor & Destructor Documentation

        - + +

        § Tuple2() [2/2]

        +
        @@ -214,9 +192,9 @@

        Constructor & Destructor Documentation

        diff --git a/html/structedda_1_1Tuple3-members.html b/html/structedda_1_1Tuple3-members.html index 8bce326..5bb86d7 100644 --- a/html/structedda_1_1Tuple3-members.html +++ b/html/structedda_1_1Tuple3-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple3< T >, including all inherited members.

        - + - + - + - + @@ -113,9 +87,9 @@
        cast() constedda::Tuple< T, 3 >inline
        cast() constedda::Tuple< T, 3 >inline
        getData()edda::Tuple< T, 3 >inline
        getData() constedda::Tuple< T, 3 >inline
        getData() constedda::Tuple< T, 3 >inline
        IsTuple typedefedda::Tuple< T, 3 >
        LENGTH enum valueedda::Tuple< T, 3 >
        length() constedda::Tuple< T, 3 >inline
        length() constedda::Tuple< T, 3 >inline
        operator[](int i)edda::Tuple< T, 3 >inline
        operator[](int i) constedda::Tuple< T, 3 >inline
        operator[](int i) constedda::Tuple< T, 3 >inline
        Tuple()edda::Tuple< T, 3 >inline
        Tuple(const T &scalar)edda::Tuple< T, 3 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 3 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple3.html b/html/structedda_1_1Tuple3.html index c1824c3..63e7078 100644 --- a/html/structedda_1_1Tuple3.html +++ b/html/structedda_1_1Tuple3.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple3< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -101,8 +75,8 @@ Inheritance diagram for edda::Tuple3< T >:
        - - + + edda::Tuple< T, 3 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        @@ -147,7 +121,9 @@

        Additional Inherited Members

         

        Constructor & Destructor Documentation

        - + +

        § Tuple3() [1/2]

        +
        @@ -172,7 +148,9 @@

        Constructor & Destructor Documentation

        - + +

        § Tuple3() [2/2]

        +
        @@ -220,9 +198,9 @@

        Constructor & Destructor Documentation

        diff --git a/html/structedda_1_1Tuple4-members.html b/html/structedda_1_1Tuple4-members.html index 3327e11..b72b825 100644 --- a/html/structedda_1_1Tuple4-members.html +++ b/html/structedda_1_1Tuple4-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple4< T >, including all inherited members.

        - + - + - + - + @@ -113,9 +87,9 @@
        cast() constedda::Tuple< T, 4 >inline
        cast() constedda::Tuple< T, 4 >inline
        getData()edda::Tuple< T, 4 >inline
        getData() constedda::Tuple< T, 4 >inline
        getData() constedda::Tuple< T, 4 >inline
        IsTuple typedefedda::Tuple< T, 4 >
        LENGTH enum valueedda::Tuple< T, 4 >
        length() constedda::Tuple< T, 4 >inline
        length() constedda::Tuple< T, 4 >inline
        operator[](int i)edda::Tuple< T, 4 >inline
        operator[](int i) constedda::Tuple< T, 4 >inline
        operator[](int i) constedda::Tuple< T, 4 >inline
        Tuple()edda::Tuple< T, 4 >inline
        Tuple(const T &scalar)edda::Tuple< T, 4 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 4 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple4.html b/html/structedda_1_1Tuple4.html index 21e4501..ec3f30c 100644 --- a/html/structedda_1_1Tuple4.html +++ b/html/structedda_1_1Tuple4.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple4< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -101,8 +75,8 @@ Inheritance diagram for edda::Tuple4< T >:
        - - + + edda::Tuple< T, 4 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        @@ -147,7 +121,9 @@

        Additional Inherited Members

         

        Constructor & Destructor Documentation

        - + +

        § Tuple4() [1/2]

        +
        @@ -172,7 +148,9 @@

        Constructor & Destructor Documentation

        - + +

        § Tuple4() [2/2]

        +
        @@ -226,9 +204,9 @@

        Constructor & Destructor Documentation

        diff --git a/html/structedda_1_1Tuple5-members.html b/html/structedda_1_1Tuple5-members.html index 645df94..d669580 100644 --- a/html/structedda_1_1Tuple5-members.html +++ b/html/structedda_1_1Tuple5-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple5< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 5 >inline
        cast() constedda::Tuple< T, 5 >inline
        getData()edda::Tuple< T, 5 >inline
        getData() constedda::Tuple< T, 5 >inline
        getData() constedda::Tuple< T, 5 >inline
        IsTuple typedefedda::Tuple< T, 5 >
        LENGTH enum valueedda::Tuple< T, 5 >
        length() constedda::Tuple< T, 5 >inline
        length() constedda::Tuple< T, 5 >inline
        operator[](int i)edda::Tuple< T, 5 >inline
        operator[](int i) constedda::Tuple< T, 5 >inline
        operator[](int i) constedda::Tuple< T, 5 >inline
        Tuple()edda::Tuple< T, 5 >inline
        Tuple(const T &scalar)edda::Tuple< T, 5 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 5 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple5.html b/html/structedda_1_1Tuple5.html index 235d7e5..a69460d 100644 --- a/html/structedda_1_1Tuple5.html +++ b/html/structedda_1_1Tuple5.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple5< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple5< T >:
        - - + + edda::Tuple< T, 5 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 5 >
        vec [N]
         
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple6< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 6 >inline
        cast() constedda::Tuple< T, 6 >inline
        getData()edda::Tuple< T, 6 >inline
        getData() constedda::Tuple< T, 6 >inline
        getData() constedda::Tuple< T, 6 >inline
        IsTuple typedefedda::Tuple< T, 6 >
        LENGTH enum valueedda::Tuple< T, 6 >
        length() constedda::Tuple< T, 6 >inline
        length() constedda::Tuple< T, 6 >inline
        operator[](int i)edda::Tuple< T, 6 >inline
        operator[](int i) constedda::Tuple< T, 6 >inline
        operator[](int i) constedda::Tuple< T, 6 >inline
        Tuple()edda::Tuple< T, 6 >inline
        Tuple(const T &scalar)edda::Tuple< T, 6 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 6 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple6.html b/html/structedda_1_1Tuple6.html index b821ac9..2a8447a 100644 --- a/html/structedda_1_1Tuple6.html +++ b/html/structedda_1_1Tuple6.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple6< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple6< T >:
        - - + + edda::Tuple< T, 6 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 6 >
        vec [N]
         
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple7< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 7 >inline
        cast() constedda::Tuple< T, 7 >inline
        getData()edda::Tuple< T, 7 >inline
        getData() constedda::Tuple< T, 7 >inline
        getData() constedda::Tuple< T, 7 >inline
        IsTuple typedefedda::Tuple< T, 7 >
        LENGTH enum valueedda::Tuple< T, 7 >
        length() constedda::Tuple< T, 7 >inline
        length() constedda::Tuple< T, 7 >inline
        operator[](int i)edda::Tuple< T, 7 >inline
        operator[](int i) constedda::Tuple< T, 7 >inline
        operator[](int i) constedda::Tuple< T, 7 >inline
        Tuple()edda::Tuple< T, 7 >inline
        Tuple(const T &scalar)edda::Tuple< T, 7 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 7 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple7.html b/html/structedda_1_1Tuple7.html index af454af..2c21cd9 100644 --- a/html/structedda_1_1Tuple7.html +++ b/html/structedda_1_1Tuple7.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple7< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple7< T >:
        - - + + edda::Tuple< T, 7 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 7 >
        vec [N]
         
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple8< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 8 >inline
        cast() constedda::Tuple< T, 8 >inline
        getData()edda::Tuple< T, 8 >inline
        getData() constedda::Tuple< T, 8 >inline
        getData() constedda::Tuple< T, 8 >inline
        IsTuple typedefedda::Tuple< T, 8 >
        LENGTH enum valueedda::Tuple< T, 8 >
        length() constedda::Tuple< T, 8 >inline
        length() constedda::Tuple< T, 8 >inline
        operator[](int i)edda::Tuple< T, 8 >inline
        operator[](int i) constedda::Tuple< T, 8 >inline
        operator[](int i) constedda::Tuple< T, 8 >inline
        Tuple()edda::Tuple< T, 8 >inline
        Tuple(const T &scalar)edda::Tuple< T, 8 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 8 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple8.html b/html/structedda_1_1Tuple8.html index cdc618b..a3984b0 100644 --- a/html/structedda_1_1Tuple8.html +++ b/html/structedda_1_1Tuple8.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple8< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple8< T >:
        - - + + edda::Tuple< T, 8 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 8 >
        vec [N]
         
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,14 +69,14 @@

        This is the complete list of members for edda::Tuple9< T >, including all inherited members.

        - + - + - + - + @@ -111,9 +85,9 @@
        cast() constedda::Tuple< T, 9 >inline
        cast() constedda::Tuple< T, 9 >inline
        getData()edda::Tuple< T, 9 >inline
        getData() constedda::Tuple< T, 9 >inline
        getData() constedda::Tuple< T, 9 >inline
        IsTuple typedefedda::Tuple< T, 9 >
        LENGTH enum valueedda::Tuple< T, 9 >
        length() constedda::Tuple< T, 9 >inline
        length() constedda::Tuple< T, 9 >inline
        operator[](int i)edda::Tuple< T, 9 >inline
        operator[](int i) constedda::Tuple< T, 9 >inline
        operator[](int i) constedda::Tuple< T, 9 >inline
        Tuple()edda::Tuple< T, 9 >inline
        Tuple(const T &scalar)edda::Tuple< T, 9 >inlineexplicit
        Tuple(const T *init)edda::Tuple< T, 9 >inlineexplicit
        diff --git a/html/structedda_1_1Tuple9.html b/html/structedda_1_1Tuple9.html index 77c065d..24cf25a 100644 --- a/html/structedda_1_1Tuple9.html +++ b/html/structedda_1_1Tuple9.html @@ -3,16 +3,15 @@ - + + EDDA: edda::Tuple9< T > Struct Template Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -100,8 +74,8 @@ Inheritance diagram for edda::Tuple9< T >:
        - - + + edda::Tuple< T, 9 >
        @@ -122,18 +96,18 @@
         
        __host__ __device__ Tuple (const Tuple< U, N > &v)
         
        __host__ __device__ int length () const
         
        __host__ __device__ int length () const
         
        __host__ __device__ T * getData ()
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ const T * getData () const
         
        __host__ __device__ T & operator[] (int i)
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        __host__ __device__ const T & operator[] (int i) const
         
        __host__ __device__ Tuple< TR, N > cast () const
         
        - Protected Attributes inherited from edda::Tuple< T, 9 >
        vec [N]
         
        + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::detail::FieldInterp< FieldIterator > Member List
        +
        +
        + +

        This is the complete list of members for edda::detail::FieldInterp< FieldIterator >, including all inherited members.

        + + + + + +
        dimedda::detail::FieldInterp< FieldIterator >
        fieldBeginedda::detail::FieldInterp< FieldIterator >
        FieldInterp(FieldIterator fieldBegin_, Tuple3< int > dim_)edda::detail::FieldInterp< FieldIterator >inline
        operator()(thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)edda::detail::FieldInterp< FieldIterator >inline
        + + + + diff --git a/html/structedda_1_1detail_1_1FieldInterp.html b/html/structedda_1_1detail_1_1FieldInterp.html new file mode 100644 index 0000000..648deea --- /dev/null +++ b/html/structedda_1_1detail_1_1FieldInterp.html @@ -0,0 +1,205 @@ + + + + + + + +EDDA: edda::detail::FieldInterp< FieldIterator > Struct Template Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::detail::FieldInterp< FieldIterator > Struct Template Reference
        +
        +
        + +

        #include <mc_streamline.h>

        + + + + + + + +

        +Public Member Functions

         FieldInterp (FieldIterator fieldBegin_, Tuple3< int > dim_)
         
        template<class Dist >
        __host__ __device__ VECTOR3 operator() (thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)
         
        + + + + + +

        +Public Attributes

        Tuple3< int > dim
         
        FieldIterator fieldBegin
         
        +

        Constructor & Destructor Documentation

        + +

        § FieldInterp()

        + +
        +
        +
        +template<class FieldIterator >
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        edda::detail::FieldInterp< FieldIterator >::FieldInterp (FieldIterator fieldBegin_,
        Tuple3< int > dim_ 
        )
        +
        +inline
        +
        + +
        +
        +

        Member Function Documentation

        + +

        § operator()()

        + +
        +
        +
        +template<class FieldIterator >
        +
        +template<class Dist >
        + + + + + +
        + + + + + + + + +
        __host__ __device__ VECTOR3 edda::detail::FieldInterp< FieldIterator >::operator() (thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > & tuple)
        +
        +inline
        +
        + +
        +
        +

        Member Data Documentation

        + +

        § dim

        + +
        +
        +
        +template<class FieldIterator >
        + + + + +
        Tuple3<int> edda::detail::FieldInterp< FieldIterator >::dim
        +
        + +
        +
        + +

        § fieldBegin

        + +
        +
        +
        +template<class FieldIterator >
        + + + + +
        FieldIterator edda::detail::FieldInterp< FieldIterator >::fieldBegin
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1detail_1_1GenRand-members.html b/html/structedda_1_1detail_1_1GenRand-members.html index f48ed45..ec30dd9 100644 --- a/html/structedda_1_1detail_1_1GenRand-members.html +++ b/html/structedda_1_1detail_1_1GenRand-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -99,9 +73,9 @@
        diff --git a/html/structedda_1_1detail_1_1GenRand.html b/html/structedda_1_1detail_1_1GenRand.html index c764e93..4bc800f 100644 --- a/html/structedda_1_1detail_1_1GenRand.html +++ b/html/structedda_1_1detail_1_1GenRand.html @@ -3,16 +3,15 @@ - + + EDDA: edda::detail::GenRand Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -111,15 +85,16 @@ - +

        Public Member Functions

        __device__
        -thrust::default_random_engine 
        operator() (int idx)
        __device__ thrust::default_random_engine operator() (int idx)
         

        Detailed Description

        Create a Thrust default random engine with a given seed.

        The caller should ensure that the seeds provided are not repetative in patterns.

        Member Function Documentation

        - + +

        § operator()()

        +
        @@ -149,9 +124,9 @@ diff --git a/html/structedda_1_1detail_1_1GetSample-members.html b/html/structedda_1_1detail_1_1GetSample-members.html new file mode 100644 index 0000000..aad303d --- /dev/null +++ b/html/structedda_1_1detail_1_1GetSample-members.html @@ -0,0 +1,82 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        +
        + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::detail::GetSample Member List
        +
        +
        + +

        This is the complete list of members for edda::detail::GetSample, including all inherited members.

        + + + +
        operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)edda::detail::GetSampleinline
        operator()(thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)edda::detail::GetSampleinline
        + + + + diff --git a/html/structedda_1_1detail_1_1GetSample.html b/html/structedda_1_1detail_1_1GetSample.html new file mode 100644 index 0000000..3209fa1 --- /dev/null +++ b/html/structedda_1_1detail_1_1GetSample.html @@ -0,0 +1,159 @@ + + + + + + + +EDDA: edda::detail::GetSample Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::detail::GetSample Struct Reference
        +
        +
        + +

        #include <thrust_random_sample.h>

        + + + + + + + + +

        +Public Member Functions

        template<class Dist >
        __host__ __device__ double operator() (thrust::tuple< Dist, thrust::default_random_engine > &tuple)
         
        template<class Dist >
        __host__ __device__ VECTOR3 operator() (thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > &tuple)
         
        +

        Member Function Documentation

        + +

        § operator()() [1/2]

        + +
        +
        +
        +template<class Dist >
        + + + + + +
        + + + + + + + + +
        __host__ __device__ double edda::detail::GetSample::operator() (thrust::tuple< Dist, thrust::default_random_engine > & tuple)
        +
        +inline
        +
        +
        Parameters
        + + + +
        tuple0distribution
        tuple1Thrust random engine
        +
        +
        + +
        +
        + +

        § operator()() [2/2]

        + +
        +
        +
        +template<class Dist >
        + + + + + +
        + + + + + + + + +
        __host__ __device__ VECTOR3 edda::detail::GetSample::operator() (thrust::tuple< Tuple3< Dist >, thrust::default_random_engine > & tuple)
        +
        +inline
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1detail_1_1GetSample__functor-members.html b/html/structedda_1_1detail_1_1GetSample__functor-members.html deleted file mode 100644 index 7c7fb82..0000000 --- a/html/structedda_1_1detail_1_1GetSample__functor-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -EDDA: Member List - - - - - - - - - -
        -
        - - - - - - -
        -
        EDDA -
        -
        -
        - - - - - - - - - -
        - -
        - - -
        -
        -
        -
        edda::detail::GetSample_functor Member List
        -
        -
        - -

        This is the complete list of members for edda::detail::GetSample_functor, including all inherited members.

        - - -
        operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)edda::detail::GetSample_functorinline
        - - - - diff --git a/html/structedda_1_1detail_1_1GetSample__functor.html b/html/structedda_1_1detail_1_1GetSample__functor.html deleted file mode 100644 index 54f95d5..0000000 --- a/html/structedda_1_1detail_1_1GetSample__functor.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -EDDA: edda::detail::GetSample_functor Struct Reference - - - - - - - - - -
        -
        - - - - - - -
        -
        EDDA -
        -
        -
        - - - - - - - - - -
        - -
        - - -
        -
        - -
        -
        edda::detail::GetSample_functor Struct Reference
        -
        -
        - -

        #include <random_sample_field.h>

        - - - - - -

        -Public Member Functions

        template<class Dist >
        __host__ __device__ double operator() (thrust::tuple< Dist, thrust::default_random_engine > &tuple)
         
        -

        Member Function Documentation

        - -
        -
        -
        -template<class Dist >
        - - - - - -
        - - - - - - - - -
        __host__ __device__ double edda::detail::GetSample_functor::operator() (thrust::tuple< Dist, thrust::default_random_engine > & tuple)
        -
        -inline
        -
        -
        Parameters
        - - - -
        tuple0distribution
        tuple1Thrust random engine
        -
        -
        - -
        -
        -
        The documentation for this struct was generated from the following file: -
        - - - - diff --git a/html/structedda_1_1detail_1_1MCStreamline__functor-members.html b/html/structedda_1_1detail_1_1MCStreamline__functor-members.html new file mode 100644 index 0000000..b399b35 --- /dev/null +++ b/html/structedda_1_1detail_1_1MCStreamline__functor-members.html @@ -0,0 +1,81 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::detail::MCStreamline_functor< FieldIterator > Member List
        +
        +
        + +

        This is the complete list of members for edda::detail::MCStreamline_functor< FieldIterator >, including all inherited members.

        + + +
        fieldBeginedda::detail::MCStreamline_functor< FieldIterator >
        + + + + diff --git a/html/structedda_1_1detail_1_1MCStreamline__functor.html b/html/structedda_1_1detail_1_1MCStreamline__functor.html new file mode 100644 index 0000000..5624260 --- /dev/null +++ b/html/structedda_1_1detail_1_1MCStreamline__functor.html @@ -0,0 +1,108 @@ + + + + + + + +EDDA: edda::detail::MCStreamline_functor< FieldIterator > Struct Template Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::detail::MCStreamline_functor< FieldIterator > Struct Template Reference
        +
        +
        + +

        #include <mc_streamline.h>

        + + + + +

        +Public Attributes

        FieldIterator fieldBegin
         
        +

        Member Data Documentation

        + +

        § fieldBegin

        + +
        +
        +
        +template<class FieldIterator >
        + + + + +
        FieldIterator edda::detail::MCStreamline_functor< FieldIterator >::fieldBegin
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1detail_1_1MakeHistogram-members.html b/html/structedda_1_1detail_1_1MakeHistogram-members.html new file mode 100644 index 0000000..a7990ec --- /dev/null +++ b/html/structedda_1_1detail_1_1MakeHistogram-members.html @@ -0,0 +1,82 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::detail::MakeHistogram Member List
        +
        +
        + +

        This is the complete list of members for edda::detail::MakeHistogram, including all inherited members.

        + + + +
        MakeHistogram()edda::detail::MakeHistograminline
        operator()(int idx) constedda::detail::MakeHistograminline
        + + + + diff --git a/html/structedda_1_1detail_1_1MakeHistogram.html b/html/structedda_1_1detail_1_1MakeHistogram.html new file mode 100644 index 0000000..d0f3a3b --- /dev/null +++ b/html/structedda_1_1detail_1_1MakeHistogram.html @@ -0,0 +1,154 @@ + + + + + + + +EDDA: edda::detail::MakeHistogram Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::detail::MakeHistogram Struct Reference
        +
        +
        + +

        #include <thrust_histo_array.h>

        +
        +Inheritance diagram for edda::detail::MakeHistogram:
        +
        +
        + + + +
        + + + + + + +

        +Public Member Functions

         MakeHistogram ()
         
        __host__ __device__ dist::Histogram operator() (int idx) const
         
        +

        Constructor & Destructor Documentation

        + +

        § MakeHistogram()

        + +
        +
        + + + + + +
        + + + + + + + +
        edda::detail::MakeHistogram::MakeHistogram ()
        +
        +inline
        +
        + +
        +
        +

        Member Function Documentation

        + +

        § operator()()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ dist::Histogram edda::detail::MakeHistogram::operator() (int idx) const
        +
        +inline
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1detail_1_1MakeHistogram.png b/html/structedda_1_1detail_1_1MakeHistogram.png new file mode 100644 index 0000000..25ea8f9 Binary files /dev/null and b/html/structedda_1_1detail_1_1MakeHistogram.png differ diff --git a/html/structedda_1_1detail_1_1MakeStridedGmm-members.html b/html/structedda_1_1detail_1_1MakeStridedGmm-members.html index e19e031..ccaeff1 100644 --- a/html/structedda_1_1detail_1_1MakeStridedGmm-members.html +++ b/html/structedda_1_1detail_1_1MakeStridedGmm-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -99,13 +73,13 @@
        MakeStridedGmm()edda::detail::MakeStridedGmminline
        MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)edda::detail::MakeStridedGmminline
        narraysedda::detail::MakeStridedGmm
        operator()(int idx) const edda::detail::MakeStridedGmminline
        operator()(int idx) constedda::detail::MakeStridedGmminline
        diff --git a/html/structedda_1_1detail_1_1MakeStridedGmm.html b/html/structedda_1_1detail_1_1MakeStridedGmm.html index ef50ed7..1b028a8 100644 --- a/html/structedda_1_1detail_1_1MakeStridedGmm.html +++ b/html/structedda_1_1detail_1_1MakeStridedGmm.html @@ -3,16 +3,15 @@ - + + EDDA: edda::detail::MakeStridedGmm Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -97,7 +71,7 @@
        -

        #include <gmm_array.h>

        +

        #include <thrust_gmm_array.h>

        Inheritance diagram for edda::detail::MakeStridedGmm:
        @@ -111,22 +85,22 @@ Public Member Functions
         MakeStridedGmm ()
         
         MakeStridedGmm (const DeviceGMMArray &dDataPtrArray_, int narrays_)
         MakeStridedGmm (const DeviceGMMArray &dDataPtrArray_, int narrays_)
         
        __host__ __device__
        -dist::GaussianMixture
        -< MAX_GMMs
        operator() (int idx) const
         
        __host__ __device__ dist::DefaultGaussianMixture operator() (int idx) const
         
        - +

        Public Attributes

        DeviceGMMArray dDataPtrArray
        DeviceGMMArray dDataPtrArray
         
        int narrays
         

        Constructor & Destructor Documentation

        - + +

        § MakeStridedGmm() [1/2]

        +
        @@ -149,7 +123,9 @@

        Constructor & Destructor Documentation

        - + +

        § MakeStridedGmm() [2/2]

        +
        @@ -159,7 +135,7 @@

        Constructor & Destructor Documentation

        - + @@ -184,7 +160,9 @@

        Constructor & Destructor Documentation

        Member Function Documentation

        - + +

        § operator()()

        +
        edda::detail::MakeStridedGmm::MakeStridedGmm (const DeviceGMMArrayconst DeviceGMMArray dDataPtrArray_,
        @@ -192,7 +170,7 @@

        Member Function Documentation

        - + @@ -209,19 +187,23 @@

        Member Function Documentation

        Member Data Documentation

        - + +

        § dDataPtrArray

        +
        __host__ __device__ dist::GaussianMixture<MAX_GMMs> edda::detail::MakeStridedGmm::operator() __host__ __device__ dist::DefaultGaussianMixture edda::detail::MakeStridedGmm::operator() ( int  idx)
        - +
        DeviceGMMArray edda::detail::MakeStridedGmm::dDataPtrArrayDeviceGMMArray edda::detail::MakeStridedGmm::dDataPtrArray
        - + +

        § narrays

        +
        @@ -234,14 +216,14 @@

        Member Data Documentation


        The documentation for this struct was generated from the following file: diff --git a/html/structedda_1_1detail_1_1MakeStridedGmm.png b/html/structedda_1_1detail_1_1MakeStridedGmm.png index 320118e..6f376c2 100644 Binary files a/html/structedda_1_1detail_1_1MakeStridedGmm.png and b/html/structedda_1_1detail_1_1MakeStridedGmm.png differ diff --git a/html/structedda_1_1dist_1_1GMMTuple-members.html b/html/structedda_1_1dist_1_1GMMTuple-members.html index a90f1d4..ea21814 100644 --- a/html/structedda_1_1dist_1_1GMMTuple-members.html +++ b/html/structedda_1_1dist_1_1GMMTuple-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -102,9 +76,9 @@
        diff --git a/html/structedda_1_1dist_1_1GMMTuple.html b/html/structedda_1_1dist_1_1GMMTuple.html index d6a4c6c..217a303 100644 --- a/html/structedda_1_1dist_1_1GMMTuple.html +++ b/html/structedda_1_1dist_1_1GMMTuple.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::GMMTuple Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -116,7 +90,9 @@
         

        Member Data Documentation

        - + +

        § @2

        +
        @@ -128,7 +104,9 @@

        Member Data Documentation

        - + +

        § m

        +
        @@ -140,7 +118,9 @@

        Member Data Documentation

        - + +

        § p

        +
        @@ -152,7 +132,9 @@

        Member Data Documentation

        - + +

        § v

        +
        @@ -164,7 +146,9 @@

        Member Data Documentation

        - + +

        § w

        +
        @@ -182,9 +166,9 @@

        Member Data Documentation

        diff --git a/html/structedda_1_1dist_1_1Gaussian-members.html b/html/structedda_1_1dist_1_1Gaussian-members.html index d7b3a1d..6f1199e 100644 --- a/html/structedda_1_1dist_1_1Gaussian-members.html +++ b/html/structedda_1_1dist_1_1Gaussian-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -102,9 +76,9 @@
        diff --git a/html/structedda_1_1dist_1_1Gaussian.html b/html/structedda_1_1dist_1_1Gaussian.html index 84327db..e67b49b 100644 --- a/html/structedda_1_1dist_1_1Gaussian.html +++ b/html/structedda_1_1dist_1_1Gaussian.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::Gaussian Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -107,8 +81,8 @@
        -edda::dist::ContinuousDistribution -edda::dist::Distribution +edda::dist::ContinuousDistributionTag +edda::dist::DistributionTag
        @@ -129,7 +103,9 @@

        Detailed Description

        Defines a Gaussian class.

        Constructor & Destructor Documentation

        - + +

        § Gaussian() [1/2]

        +
        @@ -152,7 +128,9 @@ - + +

        § Gaussian() [2/2]

        +
        @@ -187,7 +165,9 @@

        Member Data Documentation

        - + +

        § mean

        +
        @@ -199,7 +179,9 @@

        Member Data Documentation

        - + +

        § var

        +
        @@ -217,9 +199,9 @@

        Member Data Documentation

        diff --git a/html/structedda_1_1dist_1_1Gaussian.png b/html/structedda_1_1dist_1_1Gaussian.png index eb9c408..7618261 100644 Binary files a/html/structedda_1_1dist_1_1Gaussian.png and b/html/structedda_1_1dist_1_1Gaussian.png differ diff --git a/html/structedda_1_1dist_1_1GaussianMixture-members.html b/html/structedda_1_1dist_1_1GaussianMixture-members.html deleted file mode 100644 index cee2543..0000000 --- a/html/structedda_1_1dist_1_1GaussianMixture-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -EDDA: Member List - - - - - - - - - -
        -
        -
        - - - - - -
        -
        EDDA -
        -
        - - - - - - - - - - -
        - -
        - - - -
        -
        -
        edda::dist::GaussianMixture Member List
        -
        -
        - -

        This is the complete list of members for edda::dist::GaussianMixture, including all inherited members.

        - - - - - -
        GaussianMixture()edda::dist::GaussianMixtureinlineexplicit
        GaussianMixture(std::vector< GMMTuple > models_)edda::dist::GaussianMixtureinlineexplicit
        modelsedda::dist::GaussianMixture
        normalizeWeights()edda::dist::GaussianMixtureinline
        - - - - diff --git a/html/structedda_1_1dist_1_1GaussianMixture.html b/html/structedda_1_1dist_1_1GaussianMixture.html deleted file mode 100644 index 25aae4e..0000000 --- a/html/structedda_1_1dist_1_1GaussianMixture.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - -EDDA: edda::dist::GaussianMixture Struct Reference - - - - - - - - - -
        -
        - - - - - - -
        -
        EDDA -
        -
        -
        - - - - - - - - - -
        - -
        - - -
        -
        - -
        -
        edda::dist::GaussianMixture Struct Reference
        -
        -
        - -

        Defines a Gaussian Mixture class. - More...

        - -

        #include <gaussian_mixture.h>

        -
        -Inheritance diagram for edda::dist::GaussianMixture:
        -
        -
        - - -edda::dist::ContinuousDistribution -edda::dist::Distribution - -
        - - - - - - - - -

        -Public Member Functions

         GaussianMixture ()
         
         GaussianMixture (std::vector< GMMTuple > models_)
         
        void normalizeWeights ()
         
        - - - -

        -Public Attributes

        std::vector< GMMTuplemodels
         
        -

        Detailed Description

        -

        Defines a Gaussian Mixture class.

        -

        Constructor & Destructor Documentation

        - -
        -
        - - - - - -
        - - - - - - - -
        edda::dist::GaussianMixture::GaussianMixture ()
        -
        -inlineexplicit
        -
        - -
        -
        - -
        -
        - - - - - -
        - - - - - - - - -
        edda::dist::GaussianMixture::GaussianMixture (std::vector< GMMTuplemodels_)
        -
        -inlineexplicit
        -
        - -
        -
        -

        Member Function Documentation

        - -
        -
        - - - - - -
        - - - - - - - -
        void edda::dist::GaussianMixture::normalizeWeights ()
        -
        -inline
        -
        - -
        -
        -

        Member Data Documentation

        - -
        -
        - - - - -
        std::vector<GMMTuple> edda::dist::GaussianMixture::models
        -
        - -
        -
        -
        The documentation for this struct was generated from the following file: -
        - - - - diff --git a/html/structedda_1_1dist_1_1GaussianMixture.png b/html/structedda_1_1dist_1_1GaussianMixture.png deleted file mode 100644 index 1f16905..0000000 Binary files a/html/structedda_1_1dist_1_1GaussianMixture.png and /dev/null differ diff --git a/html/structedda_1_1dist_1_1JointGaussian-members.html b/html/structedda_1_1dist_1_1JointGaussian-members.html new file mode 100644 index 0000000..8336b27 --- /dev/null +++ b/html/structedda_1_1dist_1_1JointGaussian-members.html @@ -0,0 +1,90 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::dist::JointGaussian Member List
        +
        +
        + +

        This is the complete list of members for edda::dist::JointGaussian, including all inherited members.

        + + + + + + + + + + + +
        getCovariance() constedda::dist::JointGaussianinline
        getEigenMat() constedda::dist::JointGaussianinline
        getJointLogPdf(const std::vector< Real > x_) constedda::dist::JointGaussianinline
        getJointSample(thrust::default_random_engine &rng) constedda::dist::JointGaussianinline
        getLogDet() constedda::dist::JointGaussianinline
        getMean() constedda::dist::JointGaussianinline
        getUMat() constedda::dist::JointGaussianinline
        JointGaussian()edda::dist::JointGaussianinline
        JointGaussian(const ublas_vector &mean, const ublas_matrix &cov)edda::dist::JointGaussianinline
        setMatrices(const ublas_matrix &cov)edda::dist::JointGaussianinline
        + + + + diff --git a/html/structedda_1_1dist_1_1JointGaussian.html b/html/structedda_1_1dist_1_1JointGaussian.html new file mode 100644 index 0000000..041dd6f --- /dev/null +++ b/html/structedda_1_1dist_1_1JointGaussian.html @@ -0,0 +1,404 @@ + + + + + + + +EDDA: edda::dist::JointGaussian Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::dist::JointGaussian Struct Reference
        +
        +
        + +

        Defines a Gaussian class. + More...

        + +

        #include <joint_gaussian.h>

        +
        +Inheritance diagram for edda::dist::JointGaussian:
        +
        +
        + + +edda::dist::ContinuousDistributionTag +edda::dist::JointDistributionTag +edda::dist::DistributionTag +edda::dist::DistributionTag + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        __host__ __device__ JointGaussian ()
         
        __host__ __device__ JointGaussian (const ublas_vector &mean, const ublas_matrix &cov)
         Constructor. More...
         
        __host__ __device__ void setMatrices (const ublas_matrix &cov)
         set and compute the necessary matrixes (eigenMat: for sampling; uMat: for probability computation) More...
         
        __host__ __device__ std::vector< RealgetJointSample (thrust::default_random_engine &rng) const
         Return a sample drawn from this joint Gaussian. More...
         
        __host__ __device__ double getJointLogPdf (const std::vector< Real > x_) const
         Return log probability of x (This function is used by EM) More...
         
        __host__ __device__ const ublas_vectorgetMean () const
         
        __host__ __device__ const ublas_matrixgetCovariance () const
         
        __host__ __device__ const ublas_matrixgetEigenMat () const
         
        __host__ __device__ const ublas_matrixgetUMat () const
         
        __host__ __device__ double getLogDet () const
         
        +

        Detailed Description

        +

        Defines a Gaussian class.

        +

        Constructor & Destructor Documentation

        + +

        § JointGaussian() [1/2]

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ edda::dist::JointGaussian::JointGaussian ()
        +
        +inline
        +
        + +
        +
        + +

        § JointGaussian() [2/2]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + +
        __host__ __device__ edda::dist::JointGaussian::JointGaussian (const ublas_vectormean,
        const ublas_matrixcov 
        )
        +
        +inline
        +
        + +

        Constructor.

        + +
        +
        +

        Member Function Documentation

        + +

        § getCovariance()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ const ublas_matrix& edda::dist::JointGaussian::getCovariance () const
        +
        +inline
        +
        + +
        +
        + +

        § getEigenMat()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ const ublas_matrix& edda::dist::JointGaussian::getEigenMat () const
        +
        +inline
        +
        + +
        +
        + +

        § getJointLogPdf()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ double edda::dist::JointGaussian::getJointLogPdf (const std::vector< Realx_) const
        +
        +inline
        +
        + +

        Return log probability of x (This function is used by EM)

        + +
        +
        + +

        § getJointSample()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::JointGaussian::getJointSample (thrust::default_random_engine & rng) const
        +
        +inline
        +
        + +

        Return a sample drawn from this joint Gaussian.

        + +
        +
        + +

        § getLogDet()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ double edda::dist::JointGaussian::getLogDet () const
        +
        +inline
        +
        + +
        +
        + +

        § getMean()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ const ublas_vector& edda::dist::JointGaussian::getMean () const
        +
        +inline
        +
        + +
        +
        + +

        § getUMat()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ const ublas_matrix& edda::dist::JointGaussian::getUMat () const
        +
        +inline
        +
        + +
        +
        + +

        § setMatrices()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointGaussian::setMatrices (const ublas_matrixcov)
        +
        +inline
        +
        + +

        set and compute the necessary matrixes (eigenMat: for sampling; uMat: for probability computation)

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1dist_1_1JointGaussian.png b/html/structedda_1_1dist_1_1JointGaussian.png new file mode 100644 index 0000000..7ef6ef2 Binary files /dev/null and b/html/structedda_1_1dist_1_1JointGaussian.png differ diff --git a/html/structedda_1_1dist_1_1JointHistogram-members.html b/html/structedda_1_1dist_1_1JointHistogram-members.html new file mode 100644 index 0000000..d6b9b6d --- /dev/null +++ b/html/structedda_1_1dist_1_1JointHistogram-members.html @@ -0,0 +1,102 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::dist::JointHistogram Member List
        +
        +
        + +

        This is the complete list of members for edda::dist::JointHistogram, including all inherited members.

        + + + + + + + + + + + + + + + + + + + + + + + +
        conditionalHist(std::unordered_set< int > &vars, std::vector< int > &cond_var, std::vector< std::pair< int, int >> &bin_range)edda::dist::JointHistograminline
        getBinWidths() constedda::dist::JointHistograminline
        getCovariance() constedda::dist::JointHistograminline
        getDet() constedda::dist::JointHistograminline
        getDistr() constedda::dist::JointHistograminline
        getJointCdf() constedda::dist::JointHistograminline
        getMaxVals() constedda::dist::JointHistograminline
        getMinVals() constedda::dist::JointHistograminline
        getNumBins() constedda::dist::JointHistograminline
        getNumVars() constedda::dist::JointHistograminline
        JointHistogram()edda::dist::JointHistograminline
        JointHistogram(std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)edda::dist::JointHistograminline
        JointHistogram(int nVars, std::vector< Real > mins, std::vector< Real > maxs, std::vector< Real > binWidths, std::vector< int > nBins, boost::unordered_map< std::vector< int >, Real > new_pdf, ublas_vector new_mean, ublas_matrix new_cov)edda::dist::JointHistograminline
        marginalization(std::unordered_set< int > &vars) constedda::dist::JointHistograminline
        meanedda::dist::JointHistogram
        setBinWidths(const std::vector< Real > &widths)edda::dist::JointHistograminline
        setCovariance(const ublas_matrix &cov)edda::dist::JointHistograminline
        setDistr(boost::unordered_map< std::vector< int >, Real > p)edda::dist::JointHistograminline
        setMaxVals(const std::vector< Real > &maxs)edda::dist::JointHistograminline
        setMinVals(const std::vector< Real > &mins)edda::dist::JointHistograminline
        setNumBins(const std::vector< int > &bins)edda::dist::JointHistograminline
        setNumVars(const int nVars)edda::dist::JointHistograminline
        + + + + diff --git a/html/structedda_1_1dist_1_1JointHistogram.html b/html/structedda_1_1dist_1_1JointHistogram.html new file mode 100644 index 0000000..cf1a088 --- /dev/null +++ b/html/structedda_1_1dist_1_1JointHistogram.html @@ -0,0 +1,954 @@ + + + + + + + +EDDA: edda::dist::JointHistogram Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::dist::JointHistogram Struct Reference
        +
        +
        + +

        Define a Joint histogram class. + More...

        + +

        #include <joint_histogram.h>

        +
        +Inheritance diagram for edda::dist::JointHistogram:
        +
        +
        + + +edda::dist::DiscreteDistributionTag +edda::dist::JointDistributionTag +edda::dist::DistributionTag +edda::dist::DistributionTag + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        __host__ __device__ JointHistogram ()
         Default constructor. More...
         
        __host__ __device__ JointHistogram (std::vector< Real *> &dataAry, int nElements, const std::vector< Real > &mins, const std::vector< Real > &maxs, const std::vector< int > &nBins)
         Constructor with data and distribution parameters. More...
         
        __host__ __device__ JointHistogram (int nVars, std::vector< Real > mins, std::vector< Real > maxs, std::vector< Real > binWidths, std::vector< int > nBins, boost::unordered_map< std::vector< int >, Real > new_pdf, ublas_vector new_mean, ublas_matrix new_cov)
         Constructor that constructs a given jontHistogram parameters. More...
         
        __host__ __device__ void setMinVals (const std::vector< Real > &mins)
         Set the min value of each variable. More...
         
        __host__ __device__ std::vector< RealgetMinVals () const
         Get the min value of each variable. More...
         
        __host__ __device__ void setMaxVals (const std::vector< Real > &maxs)
         Set the max value of each variable. More...
         
        __host__ __device__ std::vector< RealgetMaxVals () const
         Get the max value of each variable. More...
         
        __host__ __device__ void setBinWidths (const std::vector< Real > &widths)
         Set the bin width used for each variable. More...
         
        __host__ __device__ std::vector< RealgetBinWidths () const
         Get the bin width used for each variable. More...
         
        __host__ __device__ void setNumBins (const std::vector< int > &bins)
         Set the number of bins for each variable. More...
         
        __host__ __device__ std::vector< int > getNumBins () const
         Get the number of bins for each variable. More...
         
        __host__ __device__ void setNumVars (const int nVars)
         Set the number of variables of the joint histogram. More...
         
        __host__ __device__ int getNumVars () const
         Get the number of variables of the joint histogram. More...
         
        void setDistr (boost::unordered_map< std::vector< int >, Real > p)
         Set the distribution (pdf) of the joint histogram. More...
         
        boost::unordered_map< std::vector< int >, RealgetDistr () const
         Get the distribution (pdf) of the joint histogram. More...
         
        std::vector< std::pair< std::vector< int >, Real > > getJointCdf () const
         Compute a cumulative distribution function, which is similar to the CDF, but only for the non-empty bins and these non-empty bins are sorted in decreasing order (based on their probability) before computing this CDF. More...
         
        __host__ __device__ void setCovariance (const ublas_matrix &cov)
         Set the covariance matrix of the joint histogram. More...
         
        __host__ __device__ const ublas_matrixgetCovariance () const
         Get the covariance matrix of the joint histogram. More...
         
        __host__ __device__ double getDet () const
         Get the determinant of the covariance matrix. More...
         
        JointHistogram marginalization (std::unordered_set< int > &vars) const
         Marginalization of the jointHistogram. More...
         
        JointHistogram conditionalHist (std::unordered_set< int > &vars, std::vector< int > &cond_var, std::vector< std::pair< int, int >> &bin_range)
         Compute the joint histogram of certain variables (vars) given the rest of variables(cond_var) within certain ranges (bin_range) More...
         
        + + + + +

        +Public Attributes

        ublas_vector mean
         joint mean of the distribution, a boost's vector More...
         
        +

        Detailed Description

        +

        Define a Joint histogram class.

        +

        Joint histogram is used for datasets containing multiple variables. Inferences, such as marginalization, conditional probability, can be done with a joint histogram.

        +

        Constructor & Destructor Documentation

        + +

        § JointHistogram() [1/3]

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ edda::dist::JointHistogram::JointHistogram ()
        +
        +inline
        +
        + +

        Default constructor.

        + +
        +
        + +

        § JointHistogram() [2/3]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        __host__ __device__ edda::dist::JointHistogram::JointHistogram (std::vector< Real *> & dataAry,
        int nElements,
        const std::vector< Real > & mins,
        const std::vector< Real > & maxs,
        const std::vector< int > & nBins 
        )
        +
        +inline
        +
        + +

        Constructor with data and distribution parameters.

        +
        Parameters
        + + + + + + +
        dataArythe input data which consists of multiple variables
        nElementsnumber of data elements
        minsan array specifies the minimum values of each variable
        maxsan array specifies the maximum values of each variable
        nBinsan array specifies the number of bins for each variable in the joint histogram
        +
        +
        + +
        +
        + +

        § JointHistogram() [3/3]

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        __host__ __device__ edda::dist::JointHistogram::JointHistogram (int nVars,
        std::vector< Realmins,
        std::vector< Realmaxs,
        std::vector< RealbinWidths,
        std::vector< int > nBins,
        boost::unordered_map< std::vector< int >, Realnew_pdf,
        ublas_vector new_mean,
        ublas_matrix new_cov 
        )
        +
        +inline
        +
        + +

        Constructor that constructs a given jontHistogram parameters.

        +
        Parameters
        + + + + + + + + + +
        nVarsnumber of components/variables
        minsan array specifies the minimum values of each variable
        maxsan array specifies the maximum values of each variable
        binWidthsan array specifies the bin width in each variable
        nBinsan array specifies the number of bins in each variable
        new_pdfthe pdf of the given jointHistogram
        new_meanthe joint mean of the given jointHistogram
        new_covthe covariance matrix of the given jointHistogram
        +
        +
        + +
        +
        +

        Member Function Documentation

        + +

        § conditionalHist()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        JointHistogram edda::dist::JointHistogram::conditionalHist (std::unordered_set< int > & vars,
        std::vector< int > & cond_var,
        std::vector< std::pair< int, int >> & bin_range 
        )
        +
        +inline
        +
        + +

        Compute the joint histogram of certain variables (vars) given the rest of variables(cond_var) within certain ranges (bin_range)

        +
        Parameters
        + + + + +
        varscompute the joint histogram of these variables
        cond_vargiven the range of these variables
        bin_rangethe bin range of conditional variables (cond_var)
        +
        +
        +
        Returns
        return the conditional distribution, which is also a jointHistogram
        + +
        +
        + +

        § getBinWidths()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::JointHistogram::getBinWidths () const
        +
        +inline
        +
        + +

        Get the bin width used for each variable.

        +
        Returns
        each element of the vector represents the bin width of the corresponding variable
        + +
        +
        + +

        § getCovariance()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ const ublas_matrix& edda::dist::JointHistogram::getCovariance () const
        +
        +inline
        +
        + +

        Get the covariance matrix of the joint histogram.

        +
        Returns
        the covariance matrix,
        + +
        +
        + +

        § getDet()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ double edda::dist::JointHistogram::getDet () const
        +
        +inline
        +
        + +

        Get the determinant of the covariance matrix.

        +
        Returns
        the determinant of the covariance matrix,
        + +
        +
        + +

        § getDistr()

        + +
        +
        + + + + + +
        + + + + + + + +
        boost::unordered_map<std::vector<int>, Real> edda::dist::JointHistogram::getDistr () const
        +
        +inline
        +
        + +

        Get the distribution (pdf) of the joint histogram.

        +
        Returns
        un unordered_map that stores a pdf. In the map structure, the key (std:vector<int>) is the index of a non-empty bin of the joint histogram; the value is the probability of that bin.
        + +
        +
        + +

        § getJointCdf()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::vector<std::pair<std::vector<int>, Real> > edda::dist::JointHistogram::getJointCdf () const
        +
        +inline
        +
        + +

        Compute a cumulative distribution function, which is similar to the CDF, but only for the non-empty bins and these non-empty bins are sorted in decreasing order (based on their probability) before computing this CDF.

        +
        Returns
        a sparse cumulative distribution function, which contains only non-empty bins' cumulative distributions. Note that this is not the real CDF for the distribution, as the order of the bins was sorted in decreasing order first. This function is only used for sampling.
        + +
        +
        + +

        § getMaxVals()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::JointHistogram::getMaxVals () const
        +
        +inline
        +
        + +

        Get the max value of each variable.

        +
        Returns
        each element of the vector represents the max of the corresponding variable
        + +
        +
        + +

        § getMinVals()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ std::vector<Real> edda::dist::JointHistogram::getMinVals () const
        +
        +inline
        +
        + +

        Get the min value of each variable.

        +
        Returns
        each element of the vector represents the min of the corresponding variable
        + +
        +
        + +

        § getNumBins()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ std::vector<int> edda::dist::JointHistogram::getNumBins () const
        +
        +inline
        +
        + +

        Get the number of bins for each variable.

        +
        Returns
        each element of the vector represents the number of bins for the corresponding variable
        + +
        +
        + +

        § getNumVars()

        + +
        +
        + + + + + +
        + + + + + + + +
        __host__ __device__ int edda::dist::JointHistogram::getNumVars () const
        +
        +inline
        +
        + +

        Get the number of variables of the joint histogram.

        +
        Returns
        the number of variables
        + +
        +
        + +

        § marginalization()

        + +
        +
        + + + + + +
        + + + + + + + + +
        JointHistogram edda::dist::JointHistogram::marginalization (std::unordered_set< int > & vars) const
        +
        +inline
        +
        + +

        Marginalization of the jointHistogram.

        +
        Parameters
        + + +
        varsvariables want to be left after marginalization, i.e. project onto which variables
        +
        +
        +
        Returns
        the marginalized distribution, which is also a jointHistogram
        + +
        +
        + +

        § setBinWidths()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setBinWidths (const std::vector< Real > & widths)
        +
        +inline
        +
        + +

        Set the bin width used for each variable.

        +
        Parameters
        + + +
        widthseach element of the vector represents the bin width of the corresponding variable
        +
        +
        + +
        +
        + +

        § setCovariance()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setCovariance (const ublas_matrixcov)
        +
        +inline
        +
        + +

        Set the covariance matrix of the joint histogram.

        +
        Parameters
        + + +
        covthe covariance matrix,
        +
        +
        + +
        +
        + +

        § setDistr()

        + +
        +
        + + + + + +
        + + + + + + + + +
        void edda::dist::JointHistogram::setDistr (boost::unordered_map< std::vector< int >, Realp)
        +
        +inline
        +
        + +

        Set the distribution (pdf) of the joint histogram.

        +
        Parameters
        + + +
        pan unordered_map that stores a pdf. In the map structure, the key (std:vector<int>) is the index of a non-empty bin of the joint histogram; the value is the probability of that bin.
        +
        +
        + +
        +
        + +

        § setMaxVals()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setMaxVals (const std::vector< Real > & maxs)
        +
        +inline
        +
        + +

        Set the max value of each variable.

        +
        Parameters
        + + +
        maxseach element of the vector represents the max of the corresponding variable
        +
        +
        + +
        +
        + +

        § setMinVals()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setMinVals (const std::vector< Real > & mins)
        +
        +inline
        +
        + +

        Set the min value of each variable.

        +
        Parameters
        + + +
        minseach element of the vector represents the min of the corresponding variable
        +
        +
        + +
        +
        + +

        § setNumBins()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setNumBins (const std::vector< int > & bins)
        +
        +inline
        +
        + +

        Set the number of bins for each variable.

        +
        Parameters
        + + +
        binseach element of the vector represents the number of bins for the corresponding variable
        +
        +
        + +
        +
        + +

        § setNumVars()

        + +
        +
        + + + + + +
        + + + + + + + + +
        __host__ __device__ void edda::dist::JointHistogram::setNumVars (const int nVars)
        +
        +inline
        +
        + +

        Set the number of variables of the joint histogram.

        +
        Parameters
        + + +
        nVarsthe number of variables
        +
        +
        + +
        +
        +

        Member Data Documentation

        + +

        § mean

        + +
        +
        + + + + +
        ublas_vector edda::dist::JointHistogram::mean
        +
        + +

        joint mean of the distribution, a boost's vector

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1dist_1_1JointHistogram.png b/html/structedda_1_1dist_1_1JointHistogram.png new file mode 100644 index 0000000..2bac05b Binary files /dev/null and b/html/structedda_1_1dist_1_1JointHistogram.png differ diff --git a/html/structedda_1_1dist_1_1Variant-members.html b/html/structedda_1_1dist_1_1Variant-members.html index ab8e00c..69f495b 100644 --- a/html/structedda_1_1dist_1_1Variant-members.html +++ b/html/structedda_1_1dist_1_1Variant-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -98,13 +72,19 @@
        Variant()edda::dist::Variantinline
        Variant(const Real &obj)edda::dist::Variantinline
        Variant(const Gaussian &obj)edda::dist::Variantinline
        Variant(const GaussianMixture< GMMs > &obj)edda::dist::Variantinline
        Variant(const GaussianMixture< 2 > &obj)edda::dist::Variantinline
        Variant(const GaussianMixture< 3 > &obj)edda::dist::Variantinline
        Variant(const GaussianMixture< 4 > &obj)edda::dist::Variantinline
        Variant(const GaussianMixture< 5 > &obj)edda::dist::Variantinline
        Variant(const Histogram &obj)edda::dist::Variantinline
        Variant(const JointGaussian &obj)edda::dist::Variantinline
        Variant(const JointHistogram &obj)edda::dist::Variantinline
        diff --git a/html/structedda_1_1dist_1_1Variant.html b/html/structedda_1_1dist_1_1Variant.html index 3d75314..6bb39a9 100644 --- a/html/structedda_1_1dist_1_1Variant.html +++ b/html/structedda_1_1dist_1_1Variant.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::Variant Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -103,7 +77,7 @@
        -edda::dist::Distribution +edda::dist::DistributionTag
        @@ -115,12 +89,25 @@ - - - + + + + + + + + + + + + + +
         
         Variant (const Gaussian &obj)
         
        template<int GMMs>
         Variant (const GaussianMixture< GMMs > &obj)
         
         Variant (const GaussianMixture< 2 > &obj)
         
         Variant (const GaussianMixture< 3 > &obj)
         
         Variant (const GaussianMixture< 4 > &obj)
         
         Variant (const GaussianMixture< 5 > &obj)
         
         Variant (const Histogram &obj)
         
         Variant (const JointGaussian &obj)
         
         Variant (const JointHistogram &obj)
         

        Constructor & Destructor Documentation

        - + +

        § Variant() [1/10]

        +
        @@ -143,7 +130,9 @@

        Constructor & Destructor Documentation

        - + +

        § Variant() [2/10]

        +
        @@ -167,7 +156,9 @@

        Constructor & Destructor Documentation

        - + +

        § Variant() [3/10]

        +
        @@ -191,11 +182,167 @@

        Constructor & Destructor Documentation

        - + +

        § Variant() [4/10]

        + +
        +
        +
        + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const GaussianMixture< 2 > & obj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [5/10]

        + +
        +
        + + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const GaussianMixture< 3 > & obj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [6/10]

        + +
        +
        + + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const GaussianMixture< 4 > & obj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [7/10]

        + +
        +
        + + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const GaussianMixture< 5 > & obj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [8/10]

        + +
        +
        + + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const Histogramobj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [9/10]

        + +
        +
        + + + + + +
        + + + + + + + + +
        edda::dist::Variant::Variant (const JointGaussianobj)
        +
        +inline
        +
        + +
        +
        + +

        § Variant() [10/10]

        +
        -
        -template<int GMMs>
        - + @@ -223,9 +370,9 @@

        Constructor & Destructor Documentation

        diff --git a/html/structedda_1_1dist_1_1Variant.png b/html/structedda_1_1dist_1_1Variant.png index ce5425a..9bdea9d 100644 Binary files a/html/structedda_1_1dist_1_1Variant.png and b/html/structedda_1_1dist_1_1Variant.png differ diff --git a/html/structedda_1_1dist_1_1detail_1_1__getCdf-members.html b/html/structedda_1_1dist_1_1detail_1_1__getCdf-members.html index d77610e..edf2118 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getCdf-members.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getCdf-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        @@ -203,7 +350,7 @@

        Constructor & Destructor Documentation

        edda::dist::Variant::Variant (const GaussianMixture< GMMs > & const JointHistogram obj)
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -95,16 +69,14 @@

        This is the complete list of members for edda::dist::detail::_getCdf, including all inherited members.

        - - - +
        _getCdf(double _x)edda::dist::detail::_getCdfinline
        operator()(const T &dist)edda::dist::detail::_getCdfinline
        operator()(const Real &value)edda::dist::detail::_getCdfinline
        operator()(const T &dist)edda::dist::detail::_getCdfinline
        xedda::dist::detail::_getCdf
        diff --git a/html/structedda_1_1dist_1_1detail_1_1__getCdf.html b/html/structedda_1_1dist_1_1detail_1_1__getCdf.html index 2c0a6da..22b39dc 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getCdf.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getCdf.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::detail::_getCdf Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -102,53 +76,26 @@ Inheritance diagram for edda::dist::detail::_getCdf:
        - - + +
        - - - -

        Public Member Functions

         _getCdf (double _x)
         
        template<class T >
        double operator() (const T &dist)
         
        double operator() (const Real &value)
         

        Public Attributes

        double x
         
        -

        Constructor & Destructor Documentation

        - -
        -
        - - - - - -
        - - - - - - - - -
        edda::dist::detail::_getCdf::_getCdf (double _x)
        -
        -inline
        -
        - -
        -

        Member Function Documentation

        - + +

        § operator()()

        +
        @@ -172,34 +119,12 @@

        Member Function Documentation

        -
        -
        - -
        -
        - - - - - -
        - - - - - - - - -
        double edda::dist::detail::_getCdf::operator() (const Realvalue)
        -
        -inline
        -
        -

        Member Data Documentation

        - + +

        § x

        +
        @@ -217,9 +142,9 @@

        Member Data Documentation

        diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointMean-members.html b/html/structedda_1_1dist_1_1detail_1_1__getJointMean-members.html new file mode 100644 index 0000000..0c763e9 --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointMean-members.html @@ -0,0 +1,81 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        +
        + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::dist::detail::_getJointMean Member List
        +
        +
        + +

        This is the complete list of members for edda::dist::detail::_getJointMean, including all inherited members.

        + + +
        operator()(const T &dist)edda::dist::detail::_getJointMeaninline
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointMean.html b/html/structedda_1_1dist_1_1detail_1_1__getJointMean.html new file mode 100644 index 0000000..3ba331b --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointMean.html @@ -0,0 +1,129 @@ + + + + + + + +EDDA: edda::dist::detail::_getJointMean Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::dist::detail::_getJointMean Struct Reference
        +
        +
        + +

        #include <variant.h>

        +
        +Inheritance diagram for edda::dist::detail::_getJointMean:
        +
        +
        + + + +
        + + + + + +

        +Public Member Functions

        template<class T >
        std::vector< Realoperator() (const T &dist)
         
        +

        Member Function Documentation

        + +

        § operator()()

        + +
        +
        +
        +template<class T >
        + + + + + +
        + + + + + + + + +
        std::vector<Real> edda::dist::detail::_getJointMean::operator() (const T & dist)
        +
        +inline
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointMean.png b/html/structedda_1_1dist_1_1detail_1_1__getJointMean.png new file mode 100644 index 0000000..8f671dd Binary files /dev/null and b/html/structedda_1_1dist_1_1detail_1_1__getJointMean.png differ diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointPdf-members.html b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf-members.html new file mode 100644 index 0000000..19ec17f --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf-members.html @@ -0,0 +1,82 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::dist::detail::_getJointPdf Member List
        +
        +
        + +

        This is the complete list of members for edda::dist::detail::_getJointPdf, including all inherited members.

        + + + +
        operator()(const T &dist)edda::dist::detail::_getJointPdfinline
        xedda::dist::detail::_getJointPdf
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.html b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.html new file mode 100644 index 0000000..0ed0eb0 --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.html @@ -0,0 +1,150 @@ + + + + + + + +EDDA: edda::dist::detail::_getJointPdf Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::dist::detail::_getJointPdf Struct Reference
        +
        +
        + +

        #include <variant.h>

        +
        +Inheritance diagram for edda::dist::detail::_getJointPdf:
        +
        +
        + + + +
        + + + + + +

        +Public Member Functions

        template<class T >
        double operator() (const T &dist)
         
        + + + +

        +Public Attributes

        std::vector< Realx
         
        +

        Member Function Documentation

        + +

        § operator()()

        + +
        +
        +
        +template<class T >
        + + + + + +
        + + + + + + + + +
        double edda::dist::detail::_getJointPdf::operator() (const T & dist)
        +
        +inline
        +
        + +
        +
        +

        Member Data Documentation

        + +

        § x

        + +
        +
        + + + + +
        std::vector<Real> edda::dist::detail::_getJointPdf::x
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.png b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.png new file mode 100644 index 0000000..baac546 Binary files /dev/null and b/html/structedda_1_1dist_1_1detail_1_1__getJointPdf.png differ diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointSample-members.html b/html/structedda_1_1dist_1_1detail_1_1__getJointSample-members.html new file mode 100644 index 0000000..c8beeeb --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointSample-members.html @@ -0,0 +1,81 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        +
        +
        edda::dist::detail::_getJointSample Member List
        +
        +
        + +

        This is the complete list of members for edda::dist::detail::_getJointSample, including all inherited members.

        + + +
        operator()(const T &dist)edda::dist::detail::_getJointSampleinline
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointSample.html b/html/structedda_1_1dist_1_1detail_1_1__getJointSample.html new file mode 100644 index 0000000..199b2ad --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getJointSample.html @@ -0,0 +1,129 @@ + + + + + + + +EDDA: edda::dist::detail::_getJointSample Struct Reference + + + + + + + + + +
        +
        + + + + + + +
        +
        EDDA +
        +
        +
        + + + + + + + + +
        +
        + + +
        + +
        + + +
        +
        + +
        +
        edda::dist::detail::_getJointSample Struct Reference
        +
        +
        + +

        #include <variant.h>

        +
        +Inheritance diagram for edda::dist::detail::_getJointSample:
        +
        +
        + + + +
        + + + + + +

        +Public Member Functions

        template<class T >
        std::vector< Realoperator() (const T &dist)
         
        +

        Member Function Documentation

        + +

        § operator()()

        + +
        +
        +
        +template<class T >
        + + + + + +
        + + + + + + + + +
        std::vector<Real> edda::dist::detail::_getJointSample::operator() (const T & dist)
        +
        +inline
        +
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getJointSample.png b/html/structedda_1_1dist_1_1detail_1_1__getJointSample.png new file mode 100644 index 0000000..053e044 Binary files /dev/null and b/html/structedda_1_1dist_1_1detail_1_1__getJointSample.png differ diff --git a/html/structedda_1_1dist_1_1detail_1_1__getMean-members.html b/html/structedda_1_1dist_1_1detail_1_1__getMean-members.html index aad9286..69a7283 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getMean-members.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getMean-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -96,13 +70,12 @@

        This is the complete list of members for edda::dist::detail::_getMean, including all inherited members.

        -
        operator()(const T &dist)edda::dist::detail::_getMeaninline
        operator()(const Real &value)edda::dist::detail::_getMeaninline
        diff --git a/html/structedda_1_1dist_1_1detail_1_1__getMean.html b/html/structedda_1_1dist_1_1detail_1_1__getMean.html index 9165ad6..c485b79 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getMean.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getMean.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::detail::_getMean Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -101,8 +75,8 @@ Inheritance diagram for edda::dist::detail::_getMean:
        - - + +
        @@ -111,11 +85,11 @@ - -
        template<class T >
        double operator() (const T &dist)
         
        double operator() (const Real &value)
         

        Member Function Documentation

        - + +

        § operator()()

        +
        @@ -139,30 +113,6 @@

        Member Function Documentation

        -
        -
        - -
        -
        - - - - - -
        - - - - - - - - -
        double edda::dist::detail::_getMean::operator() (const Realvalue)
        -
        -inline
        -
        -

        The documentation for this struct was generated from the following file:
          @@ -171,9 +121,9 @@

          Member Function Documentation

          diff --git a/html/structedda_1_1dist_1_1detail_1_1__getName-members.html b/html/structedda_1_1dist_1_1detail_1_1__getName-members.html new file mode 100644 index 0000000..27016a4 --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getName-members.html @@ -0,0 +1,81 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          +
          +
          edda::dist::detail::_getName Member List
          +
          +
          + +

          This is the complete list of members for edda::dist::detail::_getName, including all inherited members.

          + + +
          operator()(const T &dist)edda::dist::detail::_getNameinline
          + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getName.html b/html/structedda_1_1dist_1_1detail_1_1__getName.html new file mode 100644 index 0000000..58f0d20 --- /dev/null +++ b/html/structedda_1_1dist_1_1detail_1_1__getName.html @@ -0,0 +1,129 @@ + + + + + + + +EDDA: edda::dist::detail::_getName Struct Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          edda::dist::detail::_getName Struct Reference
          +
          +
          + +

          #include <variant.h>

          +
          +Inheritance diagram for edda::dist::detail::_getName:
          +
          +
          + + + +
          + + + + + +

          +Public Member Functions

          template<class T >
          std::string operator() (const T &dist)
           
          +

          Member Function Documentation

          + +

          § operator()()

          + +
          +
          +
          +template<class T >
          + + + + + +
          + + + + + + + + +
          std::string edda::dist::detail::_getName::operator() (const T & dist)
          +
          +inline
          +
          + +
          +
          +
          The documentation for this struct was generated from the following file: +
          + + + + diff --git a/html/structedda_1_1dist_1_1detail_1_1__getName.png b/html/structedda_1_1dist_1_1detail_1_1__getName.png new file mode 100644 index 0000000..1aed111 Binary files /dev/null and b/html/structedda_1_1dist_1_1detail_1_1__getName.png differ diff --git a/html/structedda_1_1dist_1_1detail_1_1__getPdf-members.html b/html/structedda_1_1dist_1_1detail_1_1__getPdf-members.html index 7f68291..16d9ce5 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getPdf-members.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getPdf-members.html @@ -3,16 +3,15 @@ - + + EDDA: Member List + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -95,16 +69,14 @@

          This is the complete list of members for edda::dist::detail::_getPdf, including all inherited members.

          - - - +
          _getPdf(double _x)edda::dist::detail::_getPdfinline
          operator()(const T &dist)edda::dist::detail::_getPdfinline
          operator()(const Real &value)edda::dist::detail::_getPdfinline
          operator()(const T &dist)edda::dist::detail::_getPdfinline
          xedda::dist::detail::_getPdf
          diff --git a/html/structedda_1_1dist_1_1detail_1_1__getPdf.html b/html/structedda_1_1dist_1_1detail_1_1__getPdf.html index c22cee0..e19e372 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getPdf.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getPdf.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::detail::_getPdf Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -102,53 +76,26 @@ Inheritance diagram for edda::dist::detail::_getPdf:
          - - + +
          - - - -

          Public Member Functions

           _getPdf (double _x)
           
          template<class T >
          double operator() (const T &dist)
           
          double operator() (const Real &value)
           

          Public Attributes

          double x
           
          -

          Constructor & Destructor Documentation

          - -
          -
          - - - - - -
          - - - - - - - - -
          edda::dist::detail::_getPdf::_getPdf (double _x)
          -
          -inline
          -
          - -
          -

          Member Function Documentation

          - + +

          § operator()()

          +
          @@ -172,34 +119,12 @@

          Member Function Documentation

        -
        -
        - -
        -
        - - - - - -
        - - - - - - - - -
        double edda::dist::detail::_getPdf::operator() (const Realvalue)
        -
        -inline
        -
        -

        Member Data Documentation

        - + +

        § x

        +
        @@ -217,9 +142,9 @@

        Member Data Documentation

        diff --git a/html/structedda_1_1dist_1_1detail_1_1__getSample-members.html b/html/structedda_1_1dist_1_1detail_1_1__getSample-members.html index f719205..c28448f 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getSample-members.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getSample-members.html @@ -3,16 +3,15 @@ - + +EDDA: Member List + - @@ -21,7 +20,7 @@
        - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -96,13 +70,12 @@

        This is the complete list of members for edda::dist::detail::_getSample, including all inherited members.

        -
        operator()(const T &dist)edda::dist::detail::_getSampleinline
        operator()(const Real &value)edda::dist::detail::_getSampleinline
        diff --git a/html/structedda_1_1dist_1_1detail_1_1__getSample.html b/html/structedda_1_1dist_1_1detail_1_1__getSample.html index a6b6f42..83a44e3 100644 --- a/html/structedda_1_1dist_1_1detail_1_1__getSample.html +++ b/html/structedda_1_1dist_1_1detail_1_1__getSample.html @@ -3,16 +3,15 @@ - + + EDDA: edda::dist::detail::_getSample Struct Reference + - @@ -21,7 +20,7 @@ - @@ -30,50 +29,25 @@
        +
        EDDA
        - + - - + + + + +
        @@ -101,8 +75,8 @@ Inheritance diagram for edda::dist::detail::_getSample:
        - - + +
        @@ -111,11 +85,11 @@ - -
        template<class T >
        double operator() (const T &dist)
         
        double operator() (const Real &value)
         

        Member Function Documentation

        - + +

        § operator()()

        +
        @@ -139,30 +113,6 @@

        Member Function Documentation

        -
        - - -
        -
        - - - - - -
        - - - - - - - - -
        double edda::dist::detail::_getSample::operator() (const Realvalue)
        -
        -inline
        -
        -

        The documentation for this struct was generated from the following file:
        -
        - - -
        -
        - - - - - -
        - - - - - - - - -
        double edda::dist::detail::_getVar::operator() (const Realvalue)
        -
        -inline
        -
        -

        The documentation for this struct was generated from the following file:
          @@ -171,9 +121,9 @@

          Member Function Documentation

          diff --git a/html/structtagBITMAPFILEHEADER-members.html b/html/structtagBITMAPFILEHEADER-members.html new file mode 100644 index 0000000..3860311 --- /dev/null +++ b/html/structtagBITMAPFILEHEADER-members.html @@ -0,0 +1,81 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + +
          +
          +
          +
          tagBITMAPFILEHEADER Member List
          +
          + + + + + diff --git a/html/structtagBITMAPFILEHEADER.html b/html/structtagBITMAPFILEHEADER.html new file mode 100644 index 0000000..4376591 --- /dev/null +++ b/html/structtagBITMAPFILEHEADER.html @@ -0,0 +1,166 @@ + + + + + + + +EDDA: tagBITMAPFILEHEADER Struct Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + +
          +
          + +
          +
          tagBITMAPFILEHEADER Struct Reference
          +
          +
          + +

          #include <bmp_image.h>

          + + + + + + + + + + + + +

          +Public Attributes

          WORD bfType
           
          DWORD bfSize
           
          WORD bfReserved1
           
          WORD bfReserved2
           
          DWORD bfOffBits
           
          +

          Member Data Documentation

          + +

          § bfOffBits

          + +
          +
          + + + + +
          DWORD tagBITMAPFILEHEADER::bfOffBits
          +
          + +
          +
          + +

          § bfReserved1

          + +
          +
          + + + + +
          WORD tagBITMAPFILEHEADER::bfReserved1
          +
          + +
          +
          + +

          § bfReserved2

          + +
          +
          + + + + +
          WORD tagBITMAPFILEHEADER::bfReserved2
          +
          + +
          +
          + +

          § bfSize

          + +
          +
          + + + + +
          DWORD tagBITMAPFILEHEADER::bfSize
          +
          + +
          +
          + +

          § bfType

          + +
          +
          + + + + +
          WORD tagBITMAPFILEHEADER::bfType
          +
          + +
          +
          +
          The documentation for this struct was generated from the following file: +
          + + + + diff --git a/html/structtagBITMAPINFOHEADER-members.html b/html/structtagBITMAPINFOHEADER-members.html new file mode 100644 index 0000000..5209f95 --- /dev/null +++ b/html/structtagBITMAPINFOHEADER-members.html @@ -0,0 +1,87 @@ + + + + + + + +EDDA: Member List + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + +
          +
          +
          +
          tagBITMAPINFOHEADER Member List
          +
          + + + + + diff --git a/html/structtagBITMAPINFOHEADER.html b/html/structtagBITMAPINFOHEADER.html new file mode 100644 index 0000000..5dceab9 --- /dev/null +++ b/html/structtagBITMAPINFOHEADER.html @@ -0,0 +1,262 @@ + + + + + + + +EDDA: tagBITMAPINFOHEADER Struct Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + +
          +
          + +
          +
          tagBITMAPINFOHEADER Struct Reference
          +
          +
          + +

          #include <bmp_image.h>

          + + + + + + + + + + + + + + + + + + + + + + + + +

          +Public Attributes

          DWORD biSize
           
          LONG biWidth
           
          LONG biHeight
           
          WORD biPlanes
           
          WORD biBitCount
           
          DWORD biCompression
           
          DWORD biSizeImage
           
          LONG biXPelsPerMeter
           
          LONG biYPelsPerMeter
           
          DWORD biClrUsed
           
          DWORD biClrImportant
           
          +

          Member Data Documentation

          + +

          § biBitCount

          + +
          +
          + + + + +
          WORD tagBITMAPINFOHEADER::biBitCount
          +
          + +
          +
          + +

          § biClrImportant

          + +
          +
          + + + + +
          DWORD tagBITMAPINFOHEADER::biClrImportant
          +
          + +
          +
          + +

          § biClrUsed

          + +
          +
          + + + + +
          DWORD tagBITMAPINFOHEADER::biClrUsed
          +
          + +
          +
          + +

          § biCompression

          + +
          +
          + + + + +
          DWORD tagBITMAPINFOHEADER::biCompression
          +
          + +
          +
          + +

          § biHeight

          + +
          +
          + + + + +
          LONG tagBITMAPINFOHEADER::biHeight
          +
          + +
          +
          + +

          § biPlanes

          + +
          +
          + + + + +
          WORD tagBITMAPINFOHEADER::biPlanes
          +
          + +
          +
          + +

          § biSize

          + +
          +
          + + + + +
          DWORD tagBITMAPINFOHEADER::biSize
          +
          + +
          +
          + +

          § biSizeImage

          + +
          +
          + + + + +
          DWORD tagBITMAPINFOHEADER::biSizeImage
          +
          + +
          +
          + +

          § biWidth

          + +
          +
          + + + + +
          LONG tagBITMAPINFOHEADER::biWidth
          +
          + +
          +
          + +

          § biXPelsPerMeter

          + +
          +
          + + + + +
          LONG tagBITMAPINFOHEADER::biXPelsPerMeter
          +
          + +
          +
          + +

          § biYPelsPerMeter

          + +
          +
          + + + + +
          LONG tagBITMAPINFOHEADER::biYPelsPerMeter
          +
          + +
          +
          +
          The documentation for this struct was generated from the following file: +
          + + + + diff --git a/html/tabs.css b/html/tabs.css index 9cf578f..a28614b 100644 --- a/html/tabs.css +++ b/html/tabs.css @@ -1,60 +1 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/html/test__NdArray_8cpp.html b/html/test__NdArray_8cpp.html index dff759d..c6b229e 100644 --- a/html/test__NdArray_8cpp.html +++ b/html/test__NdArray_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: test/test_NdArray.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,13 +66,13 @@
          test_NdArray.cpp File Reference
          -
          #include "test_NdArray_cuda.cu"
          +
          #include "test_NdArray_cuda.cu"
          diff --git a/html/test__array_8cpp.html b/html/test__array_8cpp.html index 4f6bf89..363ee8e 100644 --- a/html/test__array_8cpp.html +++ b/html/test__array_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: test/test_array.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -92,15 +68,15 @@
          test_array.cpp File Reference
          -
          #include "vtkSmartPointer.h"
          -#include "vtkXMLPolyDataReader.h"
          -#include "vtkXMLPolyDataWriter.h"
          -#include "vtkPoints.h"
          -#include "vtkPolyData.h"
          -#include "vtkDoubleArray.h"
          -#include "vtkPointData.h"
          -#include "vtkVariant.h"
          -#include "vtkVariantArray.h"
          +
          #include "vtkSmartPointer.h"
          +#include "vtkXMLPolyDataReader.h"
          +#include "vtkXMLPolyDataWriter.h"
          +#include "vtkPoints.h"
          +#include "vtkPolyData.h"
          +#include "vtkDoubleArray.h"
          +#include "vtkPointData.h"
          +#include "vtkVariant.h"
          +#include "vtkVariantArray.h"
          @@ -108,7 +84,9 @@

          Functions

           

          Function Documentation

          - + +

          § main()

          +
          @@ -137,9 +115,9 @@

          Function Documentation

          diff --git a/html/test__common_8h.html b/html/test__common_8h.html index 88e48d5..d21887e 100644 --- a/html/test__common_8h.html +++ b/html/test__common_8h.html @@ -3,16 +3,15 @@ - + +EDDA: test/test_common.h File Reference + - @@ -21,7 +20,7 @@
          - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -93,8 +69,8 @@
          test_common.h File Reference
          -
          #include <iostream>
          -#include "common.h"
          +
          #include <iostream>
          +#include "common.h"

          Go to the source code of this file.

          @@ -110,7 +86,9 @@
           

          Macro Definition Documentation

          - + +

          § TEST

          +
          @@ -127,7 +105,9 @@

          Macro Definition Documentation

          Function Documentation

          - + +

          § approx_equal()

          +
          @@ -158,9 +138,9 @@

          Function Documentation

          diff --git a/html/test__common_8h_source.html b/html/test__common_8h_source.html index 4e6987b..de269c7 100644 --- a/html/test__common_8h_source.html +++ b/html/test__common_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: test/test_common.h Source File + - @@ -21,7 +20,7 @@
          - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,29 +66,15 @@
          test_common.h
          -Go to the documentation of this file.
          1 #ifndef TEST_COMMON_H
          -
          2 #define TEST_COMMON_H
          -
          3 
          -
          4 #include <iostream>
          -
          5 
          -
          6 #include "common.h"
          -
          7 
          -
          8 #define TEST(b) { if (!(b)) { std::cerr << "TEST FAIL: " << #b << std::endl; return 1; } }
          -
          9 
          -
          10 template<typename T>
          -
          11 bool approx_equal(T a, T b) { return std::abs(a-b) < edda::EPS ; }
          -
          12 
          -
          13 
          -
          14 #endif // TEST_COMMON_H
          -
          bool approx_equal(T a, T b)
          Definition: test_common.h:11
          -
          const double EPS
          Definition: common.h:22
          +Go to the documentation of this file.
          1 #ifndef TEST_COMMON_H
          2 #define TEST_COMMON_H
          3 
          4 #include <iostream>
          5 
          6 #include "common.h"
          7 
          8 #define TEST(b) { if (!(b)) { std::cerr << "TEST FAIL: " << #b << std::endl; return 1; } }
          9 
          10 template<typename T>
          11 bool approx_equal(T a, T b) { return std::abs(a-b) < edda::EPS ; }
          12 
          13 
          14 #endif // TEST_COMMON_H
          bool approx_equal(T a, T b)
          Definition: test_common.h:11
          +
          const double EPS
          Definition: common.h:24
          diff --git a/html/test__distribution_8cpp.html b/html/test__distribution_8cpp.html new file mode 100644 index 0000000..c73bc3e --- /dev/null +++ b/html/test__distribution_8cpp.html @@ -0,0 +1,261 @@ + + + + + + + +EDDA: test/test_distribution.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          test_distribution.cpp File Reference
          +
          +
          +
          #include <cstdlib>
          +#include <ctime>
          +#include <iostream>
          +#include "distributions/distribution.h"
          +#include "distributions/variant.h"
          +#include "dataset/distr_array.h"
          +
          + + + + + + + + + + + + + + + + + + + +

          +Functions

          DefaultGaussianMixture gen_gmm ()
           
          GaussianMixture< 2 > gen_gmm2 ()
           
          DistrArraymake_Gaussian_array ()
           
          DistrArraymake_GMM_array ()
           
          DistrArraymake_GMM2_array ()
           
          DistrArraymake_hybrid_array ()
           
          DistrArraymake_JointGaussian_array ()
           
          DistrArraymake_JointHistogram_array ()
           
          int main ()
           
          +

          Function Documentation

          + +

          § gen_gmm()

          + +
          +
          + + + + + + + +
          DefaultGaussianMixture gen_gmm ()
          +
          + +
          +
          + +

          § gen_gmm2()

          + +
          +
          + + + + + + + +
          GaussianMixture<2> gen_gmm2 ()
          +
          + +
          +
          + +

          § main()

          + +
          +
          + + + + + + + +
          int main ()
          +
          + +
          +
          + +

          § make_Gaussian_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_Gaussian_array ()
          +
          + +
          +
          + +

          § make_GMM2_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_GMM2_array ()
          +
          + +
          +
          + +

          § make_GMM_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_GMM_array ()
          +
          + +
          +
          + +

          § make_hybrid_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_hybrid_array ()
          +
          + +
          +
          + +

          § make_JointGaussian_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_JointGaussian_array ()
          +
          + +
          +
          + +

          § make_JointHistogram_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_JointHistogram_array ()
          +
          + +
          +
          +
          + + + + diff --git a/html/test__gaussian_8cpp.html b/html/test__gaussian_8cpp.html index 4950687..a934945 100644 --- a/html/test__gaussian_8cpp.html +++ b/html/test__gaussian_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: test/test_gaussian.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,13 +66,13 @@
          test_gaussian.cpp File Reference
          -
          #include "test_gaussian_cuda.cu"
          +
          #include "test_gaussian_cuda.cu"
          diff --git a/html/test__histogram__io_8cpp.html b/html/test__histogram__io_8cpp.html new file mode 100644 index 0000000..d528182 --- /dev/null +++ b/html/test__histogram__io_8cpp.html @@ -0,0 +1,112 @@ + + + + + + + +EDDA: test/test_histogram_io.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          test_histogram_io.cpp File Reference
          +
          +
          +
          #include <cstdlib>
          +#include <ctime>
          +#include <iostream>
          +#include "io/edda_vtk_reader.h"
          +#include "io/edda_vtk_writer.h"
          +#include "io/edda_reader.h"
          +#include "io/edda_writer.h"
          +#include "distributions/histogram.h"
          +#include "dataset/distr_array.h"
          +
          + + + +

          +Functions

          int main ()
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + +
          int main ()
          +
          + +
          +
          +
          + + + + diff --git a/html/test__io_8cpp.html b/html/test__io_8cpp.html new file mode 100644 index 0000000..4bef065 --- /dev/null +++ b/html/test__io_8cpp.html @@ -0,0 +1,108 @@ + + + + + + + +EDDA: test/test_io.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          test_io.cpp File Reference
          +
          +
          +
          #include <cstdlib>
          +#include <ctime>
          +#include <iostream>
          +#include "io/edda_vtk_reader.h"
          +#include "io/edda_vtk_writer.h"
          +
          + + + +

          +Functions

          int main ()
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + +
          int main ()
          +
          + +
          +
          +
          + + + + diff --git a/html/test__jointGMM_8cpp.html b/html/test__jointGMM_8cpp.html new file mode 100644 index 0000000..fd64feb --- /dev/null +++ b/html/test__jointGMM_8cpp.html @@ -0,0 +1,107 @@ + + + + + + + +EDDA: test/test_jointGMM.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          test_jointGMM.cpp File Reference
          +
          +
          +
          #include "distributions/joint_GMM.h"
          +#include "distributions/joint_gaussian.h"
          +#include "vector"
          +#include "bmp_image.h"
          +
          + + + +

          +Functions

          int main ()
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + +
          int main ()
          +
          + +
          +
          +
          + + + + diff --git a/html/test__joint__histogram_8cpp.html b/html/test__joint__histogram_8cpp.html new file mode 100644 index 0000000..f434265 --- /dev/null +++ b/html/test__joint__histogram_8cpp.html @@ -0,0 +1,142 @@ + + + + + + + +EDDA: test/test_joint_histogram.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          test_joint_histogram.cpp File Reference
          +
          +
          +
          #include <cstdlib>
          +#include <ctime>
          +#include <iostream>
          +#include "distributions/distribution.h"
          +#include "distributions/variant.h"
          +#include "dataset/distr_array.h"
          +#include "distributions/joint_histogram.h"
          +#include "bmp_image.h"
          +#include <time.h>
          +
          + + + + + +

          +Functions

          DistrArraymake_JointHistogram_array ()
           
          int main (int argc, char *argv[])
           
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + + + + + + + + + + + + +
          int main (int argc,
          char * argv[] 
          )
          +
          + +
          +
          + +

          § make_JointHistogram_array()

          + +
          +
          + + + + + + + +
          DistrArray* make_JointHistogram_array ()
          +
          + +
          +
          +
          + + + + diff --git a/html/test__thrust_8cpp.html b/html/test__thrust_8cpp.html index 3dad4ca..426203f 100644 --- a/html/test__thrust_8cpp.html +++ b/html/test__thrust_8cpp.html @@ -3,16 +3,15 @@ - + + EDDA: test/test_thrust.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,13 +66,13 @@
          test_thrust.cpp File Reference
          -
          #include "test_thrust_cuda.cu"
          +
          #include "test_thrust_cuda.cu"
          diff --git a/html/test__variant_8cpp.html b/html/test__variant_8cpp.html index 20c15a3..5232dad 100644 --- a/html/test__variant_8cpp.html +++ b/html/test__variant_8cpp.html @@ -38,7 +38,6 @@
          + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
          @@ -162,7 +161,7 @@

          Function Documentation

          diff --git a/html/test__vtkEddaReader_8cpp.html b/html/test__vtkEddaReader_8cpp.html index c028065..9aa2f4d 100644 --- a/html/test__vtkEddaReader_8cpp.html +++ b/html/test__vtkEddaReader_8cpp.html @@ -38,7 +38,6 @@
          @@ -93,16 +69,16 @@
          test_vtk_filters.cpp File Reference
          -
          #include <iostream>
          -#include <vtkSmartPointer.h>
          -#include <vtkXMLStructuredGridReader.h>
          -#include <vtkStructuredGrid.h>
          -#include "vtk/eddaThreshold.h"
          -#include "edda.h"
          +
          #include <iostream>
          +#include <vtkSmartPointer.h>
          +#include <vtkXMLStructuredGridReader.h>
          +#include <vtkStructuredGrid.h>
          +#include "vtk/eddaThreshold.h"
          +#include "edda.h"
          - +

          Macros

          #define vsp_new(cls, x)   vtkSmartPointer<cls> x = vtkSmartPointer<cls>::New()
          #define vsp_new(cls, x)   vtkSmartPointer<cls> x = vtkSmartPointer<cls>::New()
           

          @@ -113,7 +89,9 @@

           

          Macro Definition Documentation

          - + +

          § vsp_new

          +
          @@ -140,7 +118,9 @@

          Macro Definition Documentation

          Function Documentation

          - + +

          § main()

          +
          @@ -166,7 +146,9 @@

          Function Documentation

          - + +

          § test_threshold()

          +
          @@ -184,9 +166,9 @@

          Function Documentation

          diff --git a/html/test__vtk__pipeline_8cpp.html b/html/test__vtk__pipeline_8cpp.html index 7e20c84..8341bbb 100644 --- a/html/test__vtk__pipeline_8cpp.html +++ b/html/test__vtk__pipeline_8cpp.html @@ -38,7 +38,6 @@
          - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -94,53 +70,51 @@
          thrust_common.h File Reference
          -
          #include <thrust/device_vector.h>
          -#include <thrust/transform.h>
          -#include <thrust/sequence.h>
          -#include <thrust/copy.h>
          -#include <thrust/fill.h>
          -#include <thrust/replace.h>
          -#include <thrust/functional.h>
          -#include <thrust/iterator/counting_iterator.h>
          -#include <thrust/random.h>
          -#include <cmath>
          -#include <ctime>
          +
          #include <thrust/device_vector.h>
          +#include <thrust/transform.h>
          +#include <thrust/sequence.h>
          +#include <thrust/copy.h>
          +#include <thrust/fill.h>
          +#include <thrust/replace.h>
          +#include <thrust/functional.h>
          +#include <thrust/iterator/counting_iterator.h>
          +#include <thrust/random.h>
          +#include <cmath>
          +#include <ctime>

          Go to the source code of this file.

          - + - +

          Classes

          struct  edda::Rand
           Simply return a random value between 0..1. More...
           Simply return a random value between 0..1. More...
           
          struct  edda::detail::GenRand
           Create a Thrust default random engine with a given seed. More...
           Create a Thrust default random engine with a given seed. More...
           
          - - + + - + - +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
           edda::detail
           edda::detail
           
           edda::Math
           edda::Math
           
          - - + +

          Functions

          thrust::transform_iterator
          -< detail::GenRand,
          -thrust::counting_iterator< int > > 
          edda::randomEngineIterator (int seed)
           randomEngineIterator creates a Thrust default random engine with a given seed More...
          thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > edda::randomEngineIterator (int seed)
           randomEngineIterator creates a Thrust default random engine with a given seed More...
           
          diff --git a/html/thrust__common_8h_source.html b/html/thrust__common_8h_source.html index 18511eb..692b9fb 100644 --- a/html/thrust__common_8h_source.html +++ b/html/thrust__common_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/thrust_common.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,71 +66,17 @@
          thrust_common.h
          -Go to the documentation of this file.
          1 #ifndef THRUST_COMMON_H
          -
          2 #define THRUST_COMMON_H
          -
          3 
          -
          4 #include <thrust/device_vector.h>
          -
          5 #include <thrust/transform.h>
          -
          6 #include <thrust/sequence.h>
          -
          7 #include <thrust/copy.h>
          -
          8 #include <thrust/fill.h>
          -
          9 #include <thrust/replace.h>
          -
          10 #include <thrust/functional.h>
          -
          11 #include <thrust/iterator/counting_iterator.h>
          -
          12 #include <thrust/random.h>
          -
          13 
          -
          14 #include <cmath>
          -
          15 #include <ctime>
          -
          16 
          -
          17 namespace edda{
          -
          18 
          -
          19 
          -
          25 struct Rand{
          -
          26  __host__ __device__
          -
          27  inline float operator() (int index)
          -
          28  {
          -
          29  thrust::default_random_engine rng(index<<1);
          -
          30  return rng();
          -
          31  }
          -
          32 };
          -
          33 
          -
          34 namespace detail {
          -
          40  struct GenRand: public thrust::unary_function<int, thrust::default_random_engine>
          -
          41  {
          -
          42  __device__
          -
          43  thrust::default_random_engine operator () (int idx)
          -
          44  {
          -
          45  thrust::default_random_engine randEng;
          -
          46  randEng.discard(idx << 1);
          -
          47  return randEng;
          -
          48  }
          -
          49  };
          -
          50 }
          -
          51 
          -
          58 inline thrust::transform_iterator<detail::GenRand, thrust::counting_iterator<int> >
          - -
          60  return thrust::make_transform_iterator(thrust::make_counting_iterator(seed), detail::GenRand()) ;
          -
          61 }
          -
          62 
          -
          63 // Calling Cuda math functions
          -
          64 namespace Math{
          -
          65 
          -
          66 } // Math
          -
          67 
          -
          68 } // edda
          -
          69 
          -
          70 #endif // THRUST_COMMON_H
          +Go to the documentation of this file.
          1 #ifndef THRUST_COMMON_H
          2 #define THRUST_COMMON_H
          3 
          4 #include <thrust/device_vector.h>
          5 #include <thrust/transform.h>
          6 #include <thrust/sequence.h>
          7 #include <thrust/copy.h>
          8 #include <thrust/fill.h>
          9 #include <thrust/replace.h>
          10 #include <thrust/functional.h>
          11 #include <thrust/iterator/counting_iterator.h>
          12 #include <thrust/random.h>
          13 
          14 #include <cmath>
          15 #include <ctime>
          16 
          17 namespace edda{
          18 
          19 
          25 struct Rand{
          26  __host__ __device__
          27  inline float operator() (int index)
          28  {
          29  thrust::default_random_engine rng(index<<1);
          30  return rng();
          31  }
          32 };
          33 
          34 namespace detail {
          40  struct GenRand: public thrust::unary_function<int, thrust::default_random_engine>
          41  {
          42  __device__
          43  thrust::default_random_engine operator () (int idx)
          44  {
          45  thrust::default_random_engine randEng;
          46  randEng.discard(idx << 1);
          47  return randEng;
          48  }
          49  };
          50 }
          51 
          58 inline thrust::transform_iterator<detail::GenRand, thrust::counting_iterator<int> >
          60  return thrust::make_transform_iterator(thrust::make_counting_iterator(seed), detail::GenRand()) ;
          61 }
          62 
          63 // Calling Cuda math functions
          64 namespace Math{
          65 
          66 } // Math
          67 
          68 } // edda
          69 
          70 #endif // THRUST_COMMON_H
          Experimental functionality.
          Definition: distributionModeler.h:26
          __host__ __device__ float operator()(int index)
          Definition: thrust_common.h:27
          thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator(int seed)
          randomEngineIterator creates a Thrust default random engine with a given seed
          Definition: thrust_common.h:59
          -
          __device__ thrust::default_random_engine operator()(int idx)
          Definition: thrust_common.h:43
          Simply return a random value between 0..1.
          Definition: thrust_common.h:25
          Create a Thrust default random engine with a given seed.
          Definition: thrust_common.h:40
          diff --git a/html/thrust__gmm__array_8h.html b/html/thrust__gmm__array_8h.html new file mode 100644 index 0000000..aa181b9 --- /dev/null +++ b/html/thrust__gmm__array_8h.html @@ -0,0 +1,110 @@ + + + + + + + +EDDA: src/core/thrust_gmm_array.h File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          thrust_gmm_array.h File Reference
          +
          +
          +
          #include <memory>
          +#include <thrust/iterator/constant_iterator.h>
          +#include <thrust/host_vector.h>
          +#include <core/ndarray.h>
          +#include <core/thrust_common.h>
          +#include <distributions/gaussian_mixture.h>
          +
          +

          Go to the source code of this file.

          + + + + + + +

          +Classes

          struct  edda::detail::MakeStridedGmm
           
          class  edda::GmmArray
           
          + + + + + + +

          +Namespaces

           edda
           Experimental functionality.
           
           edda::detail
           
          + + + +

          +Typedefs

          typedef Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 > edda::DeviceGMMArray
           
          +
          + + + + diff --git a/html/thrust__gmm__array_8h_source.html b/html/thrust__gmm__array_8h_source.html new file mode 100644 index 0000000..d5e6dd4 --- /dev/null +++ b/html/thrust__gmm__array_8h_source.html @@ -0,0 +1,100 @@ + + + + + + + +EDDA: src/core/thrust_gmm_array.h Source File + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          +
          +
          thrust_gmm_array.h
          +
          +
          +Go to the documentation of this file.
          1 #ifndef GMM_ARRAY_H
          2 #define GMM_ARRAY_H
          3 
          4 #include <memory>
          5 #include <thrust/iterator/constant_iterator.h>
          6 #include <thrust/host_vector.h>
          7 
          8 #include <core/ndarray.h>
          9 #include <core/thrust_common.h>
          11 
          12 namespace edda{
          13 
          15 
          16 namespace detail {
          17  struct MakeStridedGmm: public thrust::unary_function<int, dist::DefaultGaussianMixture > {
          18  // [GMMs][n] array
          19  DeviceGMMArray dDataPtrArray;
          20  int narrays;
          21 
          23  MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_) : dDataPtrArray(dDataPtrArray_), narrays(narrays_) {}
          24 
          25  __host__ __device__
          27  {
          29  int narray = narrays;
          30  for (int i=0; i<narray; i++) {
          31  gmm.models[i/3].p[i%3] = dDataPtrArray[i]->get_val(idx);
          32  }
          33  if (narray==2)
          34  gmm.models[0].w = 1.;
          35  return gmm;
          36  }
          37 
          38  };
          39 
          40 } // detail
          41 
          42 class GmmArray{
          47  Tuple<NdArray<Real>, MAX_GMs*3> dataArray;
          48  Tuple<NdArray<Real>::SelfDevicePtr, MAX_GMs*3> dDataPtrArray;
          49 
          50  detail::MakeStridedGmm getMakeStridedGmm() {
          51  return detail::MakeStridedGmm(dDataPtrArray, narrays);
          52  }
          53 public:
          54 
          55  int narrays;
          57 
          58  GmmArray() {}
          59 
          60  GmmArray(std::vector<NdArray<Real> > &data_) {
          61  narrays = data_.size();
          62  if ( narrays > MAX_GMs*3 ) {
          63  printf ( "Warning: The provided GMM models are larger than the maximum size. Extra models will be discarded!");
          64  narrays = MAX_GMs*3;
          65  }
          66 
          67  assert(narrays >= 2);
          68 
          69  num_of_elems = data_[0].get_num_of_elems();
          70 
          71  for (int i=0; i<narrays; i++)
          72  {
          73  dataArray[i].take( data_[i] );
          74  dDataPtrArray[i] = dataArray[i].get_selft_ptr();
          75  }
          76  }
          77 
          78 
          79  inline thrust::transform_iterator<detail::MakeStridedGmm, thrust::counting_iterator<int> >
          80  begin() {
          81  return thrust::make_transform_iterator( thrust::make_counting_iterator(0),
          82  detail::MakeStridedGmm(dDataPtrArray, narrays)
          83  );
          84  }
          85 
          86  inline thrust::transform_iterator<detail::MakeStridedGmm, thrust::counting_iterator<int> >
          87  end() {
          88  return thrust::make_transform_iterator( thrust::make_counting_iterator(num_of_elems),
          89  detail::MakeStridedGmm(dDataPtrArray, narrays)
          90  );
          91  }
          92 
          93 
          94 };
          95 
          96 } // edda
          97 
          98 #endif // #ifndef GMM_ARRAY_H
          Tuple< NdArray< Real >::SelfDevicePtr, MAX_GMs *3 > DeviceGMMArray
          Definition: thrust_gmm_array.h:14
          +
          GmmArray()
          Definition: thrust_gmm_array.h:58
          +
          thrust::transform_iterator< detail::MakeStridedGmm, thrust::counting_iterator< int > > begin()
          Definition: thrust_gmm_array.h:80
          +
          int narrays
          Definition: thrust_gmm_array.h:55
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          Definition: thrust_gmm_array.h:42
          +
          thrust::transform_iterator< detail::MakeStridedGmm, thrust::counting_iterator< int > > end()
          Definition: thrust_gmm_array.h:87
          +
          Definition: thrust_gmm_array.h:17
          +
          Defines a Gaussian Mixture class GMs: number of Gaussian Models.
          Definition: gaussian_mixture.h:35
          +
          __host__ __device__ dist::DefaultGaussianMixture operator()(int idx) const
          Definition: thrust_gmm_array.h:26
          + +
          MakeStridedGmm()
          Definition: thrust_gmm_array.h:22
          + +
          DeviceGMMArray dDataPtrArray
          Definition: thrust_gmm_array.h:19
          +
          #define MAX_GMs
          Definition: common.h:54
          +
          GmmArray(std::vector< NdArray< Real > > &data_)
          Definition: thrust_gmm_array.h:60
          +
          Definition: tuple.h:18
          +
          int num_of_elems
          Definition: thrust_gmm_array.h:56
          +
          MakeStridedGmm(const DeviceGMMArray &dDataPtrArray_, int narrays_)
          Definition: thrust_gmm_array.h:23
          +
          Tuple< GMMTuple, GMs > models
          Definition: gaussian_mixture.h:63
          +
          int narrays
          Definition: thrust_gmm_array.h:20
          + + +
          + + + + diff --git a/html/thrust__histo__array_8h.html b/html/thrust__histo__array_8h.html new file mode 100644 index 0000000..63af190 --- /dev/null +++ b/html/thrust__histo__array_8h.html @@ -0,0 +1,104 @@ + + + + + + + +EDDA: src/core/thrust_histo_array.h File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          thrust_histo_array.h File Reference
          +
          +
          +
          #include <memory>
          +#include <thrust/iterator/constant_iterator.h>
          +#include <thrust/host_vector.h>
          +#include <core/ndarray.h>
          +#include <core/thrust_common.h>
          +#include <distributions/histogram.h>
          +
          +

          Go to the source code of this file.

          + + + + + + +

          +Classes

          struct  edda::detail::MakeHistogram
           
          class  edda::HistoArray
           
          + + + + + + +

          +Namespaces

           edda
           Experimental functionality.
           
           edda::detail
           
          +
          + + + + diff --git a/html/thrust__histo__array_8h_source.html b/html/thrust__histo__array_8h_source.html new file mode 100644 index 0000000..820579e --- /dev/null +++ b/html/thrust__histo__array_8h_source.html @@ -0,0 +1,93 @@ + + + + + + + +EDDA: src/core/thrust_histo_array.h Source File + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          +
          +
          thrust_histo_array.h
          +
          +
          +Go to the documentation of this file.
          1 #ifndef GMM_ARRAY_H
          2 #define GMM_ARRAY_H
          3 
          4 #include <memory>
          5 #include <thrust/iterator/constant_iterator.h>
          6 #include <thrust/host_vector.h>
          7 
          8 #include <core/ndarray.h>
          9 #include <core/thrust_common.h>
          11 
          12 namespace edda{
          13 
          17 
          18 namespace detail {
          19  struct MakeHistogram: public thrust::unary_function<int, dist::Histogram > {
          20 
          22 
          23  __host__ __device__
          25  {
          26  dist::Histogram histo;
          27  // TODO
          28  return histo;
          29  }
          30 
          31  };
          32 
          33 } // detail
          34 
          35 
          36 class HistoArray{
          37 
          38 
          39  detail::MakeHistoArray getMakeHistogram() {
          40  return detail::MakeHistogram();
          41  }
          42 public:
          43 
          44  int narrays;
          46 
          48 
          49  HistoArray(std::vector<NdArray<Real> > &data_) {
          50 
          51  }
          52 
          53 
          54  inline thrust::transform_iterator<detail::MakeHistogram, thrust::counting_iterator<int> >
          55  begin() {
          56  return thrust::make_transform_iterator( thrust::make_counting_iterator(0),
          57  detail::MakeHistogram(dDataPtrArray, narrays)
          58  );
          59  }
          60 
          61  inline thrust::transform_iterator<detail::MakeHistogram, thrust::counting_iterator<int> >
          62  end() {
          63  return thrust::make_transform_iterator( thrust::make_counting_iterator(num_of_elems),
          64  detail::MakeHistogram(dDataPtrArray, narrays)
          65  );
          66  }
          67 
          68 
          69 };
          70 
          71 } // edda
          72 
          73 #endif // #ifndef GMM_ARRAY_H
          Definition: thrust_histo_array.h:19
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          int narrays
          Definition: thrust_histo_array.h:44
          +
          thrust::transform_iterator< detail::MakeHistogram, thrust::counting_iterator< int > > end()
          Definition: thrust_histo_array.h:62
          +
          int num_of_elems
          Definition: thrust_histo_array.h:45
          + +
          HistoArray(std::vector< NdArray< Real > > &data_)
          Definition: thrust_histo_array.h:49
          + +
          Definition: thrust_histo_array.h:36
          +
          HistoArray()
          Definition: thrust_histo_array.h:47
          +
          __host__ __device__ dist::Histogram operator()(int idx) const
          Definition: thrust_histo_array.h:24
          +
          MakeHistogram()
          Definition: thrust_histo_array.h:21
          +
          thrust::transform_iterator< detail::MakeHistogram, thrust::counting_iterator< int > > begin()
          Definition: thrust_histo_array.h:55
          + +
          The Distribution class is a root class for all distribution-type classes.
          Definition: histogram.h:31
          + +
          + + + + diff --git a/html/thrust__random__sample_8h.html b/html/thrust__random__sample_8h.html new file mode 100644 index 0000000..92eea3f --- /dev/null +++ b/html/thrust__random__sample_8h.html @@ -0,0 +1,109 @@ + + + + + + + +EDDA: src/core/thrust_random_sample.h File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          thrust_random_sample.h File Reference
          +
          +
          +
          #include <thrust/iterator/zip_iterator.h>
          +#include <thrust/iterator/transform_iterator.h>
          +#include "common.h"
          +#include "core/thrust_common.h"
          +#include "distributions/variant.h"
          +#include "distributions/gaussian_mixture.h"
          +
          +

          Go to the source code of this file.

          + + + + +

          +Classes

          struct  edda::detail::GetSample
           
          + + + + + + +

          +Namespaces

           edda
           Experimental functionality.
           
           edda::detail
           
          + + + + +

          +Functions

          template<class InputIterator , class OutputIterator >
          void edda::randomSampleField (InputIterator begin, InputIterator end, OutputIterator out)
           
          +
          + + + + diff --git a/html/thrust__random__sample_8h_source.html b/html/thrust__random__sample_8h_source.html new file mode 100644 index 0000000..5b747db --- /dev/null +++ b/html/thrust__random__sample_8h_source.html @@ -0,0 +1,90 @@ + + + + + + + +EDDA: src/core/thrust_random_sample.h Source File + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          +
          +
          thrust_random_sample.h
          +
          +
          +Go to the documentation of this file.
          1 #ifndef RANDOM_SAMPLE_FIELD
          2 #define RANDOM_SAMPLE_FIELD
          3 
          4 #include <thrust/iterator/zip_iterator.h>
          5 #include <thrust/iterator/transform_iterator.h>
          6 #include "common.h"
          7 #include "core/thrust_common.h"
          10 
          11 namespace edda {
          12 
          13 namespace detail {
          14  struct GetSample {
          19  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
          20  __host__ __device__
          21  double operator() (thrust::tuple<Dist, thrust::default_random_engine> &tuple)
          22  {
          23  Dist &dist = thrust::get<0>(tuple);
          24  return dist::getSample(dist, thrust::get<1>(tuple));
          25  }
          26 
          27  template <class Dist> //, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
          28  __host__ __device__
          29  VECTOR3 operator() (thrust::tuple<Tuple3<Dist>, thrust::default_random_engine> &tuple)
          30  {
          31  Tuple3<Dist> &distvec = thrust::get<0>(tuple);
          32  thrust::default_random_engine &randEng = thrust::get<1>(tuple);
          33  return VECTOR3(dist::getSample(distvec, randEng),
          34  dist::getSample(distvec, randEng),
          35  dist::getSample(distvec, randEng));
          36  }
          37  };
          38 } // namespace detail
          39 
          43 template <class InputIterator, class OutputIterator>
          44 void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
          45 {
          46  static int seed ;
          47  seed += time(NULL) % 10000;
          48  int n = end-begin;
          49  thrust::transform( thrust::make_zip_iterator(thrust::make_tuple(begin, randomEngineIterator(seed)) ) ,
          50  thrust::make_zip_iterator(thrust::make_tuple(end, randomEngineIterator(seed+n)) ),
          51  out, detail::GetSample()) ;
          52  seed += n;
          53 }
          54 
          55 
          56 } // edda
          57 
          58 #endif // RANDOM_SAMPLE_FIELD
          __host__ double getSample(const Dist &dist)
          Return a random sample.
          Definition: distribution_tag.h:84
          +
          void randomSampleField(InputIterator begin, InputIterator end, OutputIterator out)
          Definition: thrust_random_sample.h:44
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          Definition: thrust_random_sample.h:14
          +
          Definition: tuple.h:101
          +
          Specialization of Vector3 for higher performance.
          Definition: vector_matrix.h:101
          + +
          __host__ __device__ double operator()(thrust::tuple< Dist, thrust::default_random_engine > &tuple)
          Definition: thrust_random_sample.h:21
          + + +
          thrust::transform_iterator< detail::GenRand, thrust::counting_iterator< int > > randomEngineIterator(int seed)
          randomEngineIterator creates a Thrust default random engine with a given seed
          Definition: thrust_common.h:59
          + +
          Vector3< float > VECTOR3
          Definition: vector_matrix.h:253
          +
          + + + + diff --git a/html/tuple_8h.html b/html/tuple_8h.html index 58ea7ab..0db2c48 100644 --- a/html/tuple_8h.html +++ b/html/tuple_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/tuple.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -94,9 +70,9 @@
          tuple.h File Reference
          -
          #include <cassert>
          -#include <iostream>
          -#include "thrust_common.h"
          +
          #include <cassert>
          +#include <iostream>
          +#include "thrust_common.h"

          Go to the source code of this file.

          @@ -125,8 +101,8 @@
          - - + +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           

          @@ -144,9 +120,9 @@ diff --git a/html/tuple_8h_source.html b/html/tuple_8h_source.html index 653fb0b..4067f03 100644 --- a/html/tuple_8h_source.html +++ b/html/tuple_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/tuple.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,185 +66,21 @@
          tuple.h
          -Go to the documentation of this file.
          1 // Copyright 2015 The Edda Authors. All rights reserved.
          -
          2 // Use of this source code is governed by a MIT-style license that can be
          -
          3 // found in the LICENSE file.
          -
          4 
          -
          5 // Reference: vtkTuple from VTK
          -
          6 
          -
          7 #ifndef TUPLE_H_
          -
          8 #define TUPLE_H_
          -
          9 
          -
          10 #include <cassert>
          -
          11 #include <iostream>
          -
          12 #include "thrust_common.h"
          -
          13 
          -
          14 namespace edda {
          -
          15 
          -
          16 // Compared to std::vector, Tuple is a fixed-length vector for space saving
          -
          17 template<typename T, int N>
          -
          18 class Tuple
          -
          19 {
          -
          20 protected:
          -
          21  T vec[N];
          -
          22 
          -
          23 public:
          -
          24  enum { LENGTH = N };
          -
          25  typedef int IsTuple; // for compile-time generic type check
          -
          26 
          -
          27  __host__ __device__
          - -
          29  {}
          -
          30 
          -
          31  // assign all values as scalar
          -
          32  __host__ __device__
          -
          33  explicit Tuple(const T& scalar)
          -
          34  {
          -
          35  for (int i = 0; i < N; ++i)
          -
          36  this->vec[i] = scalar;
          -
          37  }
          -
          38 
          -
          39  __host__ __device__
          -
          40  explicit Tuple(const T* init)
          -
          41  {
          -
          42  for (int i = 0; i < N; ++i)
          -
          43  this->vec[i] = init[i];
          -
          44  }
          -
          45 
          -
          46  // assign Tuple
          -
          47  template<typename U>
          -
          48  __host__ __device__
          -
          49  Tuple(const Tuple<U, N>& v)
          -
          50  {
          -
          51  for (int i = 0; i < N; ++i)
          -
          52  this->vec[i] = v[i];
          -
          53  }
          -
          54 
          -
          55  // Get the length of the tuple.
          -
          56  __host__ __device__
          -
          57  inline int length() const { return N; }
          -
          58 
          -
          59  // Get a pointer to the underlying data of the tuple.
          -
          60  __host__ __device__
          -
          61  inline T* getData() { return this->vec; }
          -
          62  __host__ __device__
          -
          63  inline const T* getData() const { return this->vec; }
          -
          64 
          -
          65  // Get a reference to the underlying data element of the tuple.
          -
          66  // This works similarly to the way C++ STL containers work. No
          -
          67  // bounds checking is performed.
          -
          68  __host__ __device__
          -
          69  inline T& operator[](int i) {
          -
          70  //assert("pre: index_in_bounds" && i >= 0 && i < N);
          -
          71  return this->vec[i];
          -
          72  }
          -
          73  __host__ __device__
          -
          74  inline const T& operator[](int i) const {
          -
          75  //assert("pre: index_in_bounds" && i >= 0 && i < N);
          -
          76  return this->vec[i];
          -
          77  }
          -
          78 
          -
          79  // Cast the tuple to the specified type, returning the result.
          -
          80  template<typename TR>
          -
          81  __host__ __device__
          - -
          83  {
          -
          84  Tuple<TR, N> result;
          -
          85  for (int i = 0; i < N; ++i)
          -
          86  {
          -
          87  result[i] = static_cast<TR>(this->vec[i]);
          -
          88  }
          -
          89  return result;
          -
          90  }
          -
          91 
          -
          92 };
          -
          93 
          -
          94 // Convenience use
          -
          95 template<typename T> struct Tuple1 : public Tuple<T, 1> {};
          -
          96 template<typename T> struct Tuple2 : public Tuple<T, 2> {
          -
          97  Tuple2() {}
          -
          98  explicit Tuple2(const T& x, const T& y)
          -
          99  {this->vec[0] = x; this->vec[1] = y;}
          -
          100 };
          -
          101 template<typename T> struct Tuple3 : public Tuple<T, 3> {
          -
          102  Tuple3() {}
          -
          103  explicit Tuple3(const T& x, const T& y, const T& z)
          -
          104  {this->vec[0] = x; this->vec[1] = y; this->vec[2] = z;}
          -
          105 };
          -
          106 template<typename T> struct Tuple4 : public Tuple<T, 4> {
          -
          107  Tuple4() {}
          -
          108  explicit Tuple4(const T& x, const T& y, const T& z, const T& w)
          -
          109  {this->vec[0] = x; this->vec[1] = y; this->vec[2] = z; this->vec[3] = w;}
          -
          110 };
          -
          111 template<typename T> struct Tuple5 : public Tuple<T, 5> {};
          -
          112 template<typename T> struct Tuple6 : public Tuple<T, 6> {};
          -
          113 template<typename T> struct Tuple7 : public Tuple<T, 7> {};
          -
          114 template<typename T> struct Tuple8 : public Tuple<T, 8> {};
          -
          115 template<typename T> struct Tuple9 : public Tuple<T, 9> {};
          -
          116 
          -
          117 
          -
          118 // Output the contents of a tuple, mainly useful for debugging.
          -
          119 template<typename A, int N>
          -
          120 std::ostream& operator<<(std::ostream& out, const Tuple<A, N>& t)
          -
          121 {
          -
          122  out << "(";
          -
          123  bool first = true;
          -
          124  for (int i = 0; i < N; ++i)
          -
          125  {
          -
          126  if (first)
          -
          127  {
          -
          128  first = false;
          -
          129  }
          -
          130  else
          -
          131  {
          -
          132  out << ", ";
          -
          133  }
          -
          134  out << t[i];
          -
          135  }
          -
          136  out << ")";
          -
          137  return out;
          -
          138 }
          -
          139 
          -
          140 // Equality operator performs an equality check on each component.
          -
          141 template<typename A, int N>
          -
          142 bool operator==(const Tuple<A, N>& t1, const Tuple<A, N>& t2)
          -
          143 {
          -
          144  for (int i = 0; i < N; ++i)
          -
          145  {
          -
          146  if (t1[i] != t2[i])
          -
          147  {
          -
          148  return false;
          -
          149  }
          -
          150  }
          -
          151  return true;
          -
          152 }
          -
          153 
          -
          154 
          -
          155 // Inequality for vector type.
          -
          156 template<typename A, int N>
          -
          157 inline bool operator!=(const Tuple<A, N>& t1, const Tuple<A, N>& t2)
          -
          158 {
          -
          159  return !(t1 == t2);
          -
          160 }
          -
          161 
          -
          162 } // edda
          -
          163 
          -
          164 #endif // TUPLE_H_
          +Go to the documentation of this file.
          1 // Copyright 2015 The Edda Authors. All rights reserved.
          2 // Use of this source code is governed by a MIT-style license that can be
          3 // found in the LICENSE file.
          4 
          5 // Reference: vtkTuple from VTK
          6 
          7 #ifndef TUPLE_H_
          8 #define TUPLE_H_
          9 
          10 #include <cassert>
          11 #include <iostream>
          12 #include "thrust_common.h"
          13 
          14 namespace edda {
          15 
          16 // Compared to std::vector, Tuple is a fixed-length vector for space saving
          17 template<typename T, int N>
          18 class Tuple
          19 {
          20 protected:
          21  T vec[N];
          22 
          23 public:
          24  enum { LENGTH = N };
          25  typedef int IsTuple; // for compile-time generic type check
          26 
          27  __host__ __device__
          29  {}
          30 
          31  // assign all values as scalar
          32  __host__ __device__
          33  explicit Tuple(const T& scalar)
          34  {
          35  for (int i = 0; i < N; ++i)
          36  this->vec[i] = scalar;
          37  }
          38 
          39  __host__ __device__
          40  explicit Tuple(const T* init)
          41  {
          42  for (int i = 0; i < N; ++i)
          43  this->vec[i] = init[i];
          44  }
          45 
          46  // assign Tuple
          47  template<typename U>
          48  __host__ __device__
          49  Tuple(const Tuple<U, N>& v)
          50  {
          51  for (int i = 0; i < N; ++i)
          52  this->vec[i] = v[i];
          53  }
          54 
          55  // Get the length of the tuple.
          56  __host__ __device__
          57  inline int length() const { return N; }
          58 
          59  // Get a pointer to the underlying data of the tuple.
          60  __host__ __device__
          61  inline T* getData() { return this->vec; }
          62  __host__ __device__
          63  inline const T* getData() const { return this->vec; }
          64 
          65  // Get a reference to the underlying data element of the tuple.
          66  // This works similarly to the way C++ STL containers work. No
          67  // bounds checking is performed.
          68  __host__ __device__
          69  inline T& operator[](int i) {
          70  //assert("pre: index_in_bounds" && i >= 0 && i < N);
          71  return this->vec[i];
          72  }
          73  __host__ __device__
          74  inline const T& operator[](int i) const {
          75  //assert("pre: index_in_bounds" && i >= 0 && i < N);
          76  return this->vec[i];
          77  }
          78 
          79  // Cast the tuple to the specified type, returning the result.
          80  template<typename TR>
          81  __host__ __device__
          83  {
          84  Tuple<TR, N> result;
          85  for (int i = 0; i < N; ++i)
          86  {
          87  result[i] = static_cast<TR>(this->vec[i]);
          88  }
          89  return result;
          90  }
          91 
          92 };
          93 
          94 // Convenience use
          95 template<typename T> struct Tuple1 : public Tuple<T, 1> {};
          96 template<typename T> struct Tuple2 : public Tuple<T, 2> {
          97  Tuple2() {}
          98  explicit Tuple2(const T& x, const T& y)
          99  {this->vec[0] = x; this->vec[1] = y;}
          100 };
          101 template<typename T> struct Tuple3 : public Tuple<T, 3> {
          102  Tuple3() {}
          103  explicit Tuple3(const T& x, const T& y, const T& z)
          104  {this->vec[0] = x; this->vec[1] = y; this->vec[2] = z;}
          105 };
          106 template<typename T> struct Tuple4 : public Tuple<T, 4> {
          107  Tuple4() {}
          108  explicit Tuple4(const T& x, const T& y, const T& z, const T& w)
          109  {this->vec[0] = x; this->vec[1] = y; this->vec[2] = z; this->vec[3] = w;}
          110 };
          111 template<typename T> struct Tuple5 : public Tuple<T, 5> {};
          112 template<typename T> struct Tuple6 : public Tuple<T, 6> {};
          113 template<typename T> struct Tuple7 : public Tuple<T, 7> {};
          114 template<typename T> struct Tuple8 : public Tuple<T, 8> {};
          115 template<typename T> struct Tuple9 : public Tuple<T, 9> {};
          116 
          117 
          118 // Output the contents of a tuple, mainly useful for debugging.
          119 template<typename A, int N>
          120 std::ostream& operator<<(std::ostream& out, const Tuple<A, N>& t)
          121 {
          122  out << "(";
          123  bool first = true;
          124  for (int i = 0; i < N; ++i)
          125  {
          126  if (first)
          127  {
          128  first = false;
          129  }
          130  else
          131  {
          132  out << ", ";
          133  }
          134  out << t[i];
          135  }
          136  out << ")";
          137  return out;
          138 }
          139 
          140 // Equality operator performs an equality check on each component.
          141 template<typename A, int N>
          142 bool operator==(const Tuple<A, N>& t1, const Tuple<A, N>& t2)
          143 {
          144  for (int i = 0; i < N; ++i)
          145  {
          146  if (t1[i] != t2[i])
          147  {
          148  return false;
          149  }
          150  }
          151  return true;
          152 }
          153 
          154 
          155 // Inequality for vector type.
          156 template<typename A, int N>
          157 inline bool operator!=(const Tuple<A, N>& t1, const Tuple<A, N>& t2)
          158 {
          159  return !(t1 == t2);
          160 }
          161 
          162 } // edda
          163 
          164 #endif // TUPLE_H_
          __host__ __device__ Tuple< TR, N > cast() const
          Definition: tuple.h:82
          Definition: tuple.h:113
          bool operator!=(const Tuple< A, N > &t1, const Tuple< A, N > &t2)
          Definition: tuple.h:157
          Tuple3()
          Definition: tuple.h:102
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          __host__ __device__ Tuple(const T *init)
          Definition: tuple.h:40
          Tuple4(const T &x, const T &y, const T &z, const T &w)
          Definition: tuple.h:108
          Definition: tuple.h:101
          __host__ __device__ Tuple()
          Definition: tuple.h:28
          Definition: tuple.h:95
          Definition: tuple.h:114
          -
          __host__ __device__ const T * getData() const
          Definition: tuple.h:63
          bool operator==(const Tuple< A, N > &t1, const Tuple< A, N > &t2)
          Definition: tuple.h:142
          Definition: tuple.h:24
          __host__ __device__ Tuple(const Tuple< U, N > &v)
          Definition: tuple.h:49
          __host__ __device__ Tuple(const T &scalar)
          Definition: tuple.h:33
          -
          __host__ __device__ Tuple< TR, N > cast() const
          Definition: tuple.h:82
          Definition: tuple.h:106
          Definition: tuple.h:96
          Tuple2()
          Definition: tuple.h:97
          @@ -278,20 +90,21 @@
          Tuple4()
          Definition: tuple.h:107
          Definition: tuple.h:18
          int IsTuple
          Definition: tuple.h:25
          +
          __host__ __device__ int length() const
          Definition: tuple.h:57
          T vec[N]
          Definition: tuple.h:21
          Definition: tuple.h:112
          __host__ __device__ T & operator[](int i)
          Definition: tuple.h:69
          -
          __host__ __device__ const T & operator[](int i) const
          Definition: tuple.h:74
          +
          __host__ __device__ const T * getData() const
          Definition: tuple.h:63
          Tuple2(const T &x, const T &y)
          Definition: tuple.h:98
          -
          __host__ __device__ int length() const
          Definition: tuple.h:57
          +
          __host__ __device__ const T & operator[](int i) const
          Definition: tuple.h:74
          __host__ __device__ T * getData()
          Definition: tuple.h:61
          Tuple3(const T &x, const T &y, const T &z)
          Definition: tuple.h:103
          diff --git a/html/uncertainIsocontourVTK_8cpp.html b/html/uncertainIsocontourVTK_8cpp.html index e353554..21b8f21 100644 --- a/html/uncertainIsocontourVTK_8cpp.html +++ b/html/uncertainIsocontourVTK_8cpp.html @@ -3,16 +3,15 @@ - -EDDA: examples/vtk/uncertainIsocontourVTK.cpp File Reference + + +EDDA: vis/examples/uncertainIsocontourVTK.cpp File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -82,7 +58,7 @@
          @@ -92,37 +68,36 @@
          uncertainIsocontourVTK.cpp File Reference
          -
          #include <string>
          -#include <cstdlib>
          -#include <cstdio>
          -#include <iostream>
          -#include <vtkPiecewiseFunction.h>
          -#include <vtkSmartPointer.h>
          -#include <vtkSmartVolumeMapper.h>
          -#include <vtkVolumeProperty.h>
          -#include <vtkVolume.h>
          -#include <vtkXMLImageDataWriter.h>
          -#include <vtkColorTransferFunction.h>
          -#include <vtkOutlineFilter.h>
          -#include <vtkXMLImageDataReader.h>
          -#include <vtkXMLStructuredGridReader.h>
          -#include <vtkCellDataToPointData.h>
          -#include <vtkXMLStructuredGridWriter.h>
          -#include <vtkRenderer.h>
          -#include <vtkRenderWindow.h>
          -#include <vtkRenderWindowInteractor.h>
          -#include <vtkInteractorStyleTrackballCamera.h>
          -#include <vtkPolyDataMapper.h>
          -#include <vtkActor.h>
          -#include <vtkProperty.h>
          -#include "distributions/gaussian.h"
          -#include "distributions/distribution.h"
          -#include "io/file_reader.h"
          -#include "io/file_writer.h"
          -#include "io/path.h"
          -#include "filters/level_crossing_prob.h"
          -#include "vtk/vtk_common.h"
          -#include "vtk/eddaUncertainIsocontour.h"
          +
          #include <string>
          +#include <cstdlib>
          +#include <cstdio>
          +#include <iostream>
          +#include <vtkPiecewiseFunction.h>
          +#include <vtkSmartPointer.h>
          +#include <vtkSmartVolumeMapper.h>
          +#include <vtkVolumeProperty.h>
          +#include <vtkVolume.h>
          +#include <vtkXMLImageDataWriter.h>
          +#include <vtkColorTransferFunction.h>
          +#include <vtkOutlineFilter.h>
          +#include <vtkXMLImageDataReader.h>
          +#include <vtkXMLStructuredGridReader.h>
          +#include <vtkCellDataToPointData.h>
          +#include <vtkXMLStructuredGridWriter.h>
          +#include <vtkRenderer.h>
          +#include <vtkRenderWindow.h>
          +#include <vtkRenderWindowInteractor.h>
          +#include <vtkInteractorStyleTrackballCamera.h>
          +#include <vtkPolyDataMapper.h>
          +#include <vtkActor.h>
          +#include <vtkProperty.h>
          +#include "distributions/gaussian.h"
          +#include "distributions/distribution.h"
          +#include "io/edda_vtk_reader.h"
          +#include "io/path.h"
          +#include "filters/level_crossing_prob.h"
          +#include "vtk/vtk_common.h"
          +#include "vtk/eddaUncertainIsocontour.h"
          @@ -132,7 +107,9 @@

          Functions

           

          Function Documentation

          - + +

          § main()

          +
          @@ -158,7 +135,9 @@

          Function Documentation

          - + +

          § process_vtk_file()

          +
          @@ -187,9 +166,9 @@

          Function Documentation

          diff --git a/html/uncertainIsocontour_8cpp.html b/html/uncertainIsocontour_8cpp.html deleted file mode 100644 index 943631a..0000000 --- a/html/uncertainIsocontour_8cpp.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -EDDA: examples/uncertainIsocontour.cpp File Reference - - - - - - - - - -
          -
          -
          - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          - -
          -
          uncertainIsocontour.cpp File Reference
          -
          -
          -
          #include <string>
          -#include <cstdlib>
          -#include <cstdio>
          -#include <iostream>
          -#include "edda.h"
          -#include "io/file_reader.h"
          -#include "io/file_writer.h"
          -
          - - - -

          -Functions

          int main (int argc, char **argv)
           
          -

          Function Documentation

          - -
          -
          - - - - - - - - - - - - - - - - - - -
          int main (int argc,
          char ** argv 
          )
          -
          - -
          -
          -
          - - - - diff --git a/html/uncertain__isocontour_8cpp.html b/html/uncertain__isocontour_8cpp.html index dd4961b..33cd0e7 100644 --- a/html/uncertain__isocontour_8cpp.html +++ b/html/uncertain__isocontour_8cpp.html @@ -38,7 +38,6 @@
          + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
          @@ -94,7 +93,7 @@
          diff --git a/html/uncertain__isocontour_8h.html b/html/uncertain__isocontour_8h.html deleted file mode 100644 index e98120f..0000000 --- a/html/uncertain__isocontour_8h.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -EDDA: src/filters/uncertain_isocontour.h File Reference - - - - - - - - - -
          -
          - - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          - -
          -
          uncertain_isocontour.h File Reference
          -
          -
          -
          #include <memory>
          -#include <common.h>
          -#include <dataset/dataset.h>
          -#include <distributions/distribution.h>
          -#include <core/shared_ary.h>
          -#include <dataset/abstract_data_array.h>
          -#include <thrust/host_vector.h>
          -#include <thrust/device_vector.h>
          -#include "core/ndarray.h"
          -#include "core/gmm_ndarray.h"
          -#include "distributions/gaussian_mixture.h"
          -
          -

          Go to the source code of this file.

          - - - - - -

          -Namespaces

           edda
           Experimental functionality.
           
          - - - - - - - - - -

          -Functions

          ReturnStatus edda::levelCrossing (std::shared_ptr< GmmNdArray > gmmArray_, int dim[3], double isov, std::shared_ptr< NdArray< float > > &probField)
           
          ReturnStatus edda::levelCrossingSerial (AbstractDataArray *input, int dim[3], double isov, float *probField)
           
          template<typename Dist , ENABLE_IF_BASE_OF(Dist, dist::Distribution) >
          std::shared_ptr< Dataset< Real > > edda::uncertainIsocontour (std::shared_ptr< Dataset< Dist > > dataset, double isov)
           Compute level crossing probabilities given a Dataset class. More...
           
          -
          - - - - diff --git a/html/uncertain__isocontour_8h_source.html b/html/uncertain__isocontour_8h_source.html deleted file mode 100644 index 352cd0a..0000000 --- a/html/uncertain__isocontour_8h_source.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -EDDA: src/filters/uncertain_isocontour.h Source File - - - - - - - - - -
          -
          - - - - - - -
          -
          EDDA -
          -
          -
          - - - - - - - - - -
          - -
          - - -
          -
          -
          -
          uncertain_isocontour.h
          -
          -
          -Go to the documentation of this file.
          1 #ifndef UNCERTAIN_ISOCONTOUR_H_
          -
          2 #define UNCERTAIN_ISOCONTOUR_H_
          -
          3 
          -
          4 #include <memory>
          -
          5 #include <common.h>
          -
          6 #include <dataset/dataset.h>
          - -
          8 #include <core/shared_ary.h>
          - -
          10 
          -
          11 #include <thrust/host_vector.h>
          -
          12 #include <thrust/device_vector.h>
          -
          13 #include "core/ndarray.h"
          -
          14 #include "core/gmm_ndarray.h"
          - -
          16 
          -
          17 
          -
          18 namespace edda{
          -
          19 
          -
          28 ReturnStatus levelCrossing(std::shared_ptr<GmmNdArray> gmmArray_, int dim[3], double isov, std::shared_ptr<NdArray<float> > &probField);
          -
          29 
          -
          36 ReturnStatus levelCrossingSerial(AbstractDataArray *input, int dim[3], double isov, float *probField);
          -
          37 
          -
          38 // serial
          -
          46 template <typename Dist, ENABLE_IF_BASE_OF(Dist, dist::Distribution)>
          -
          47 std::shared_ptr<Dataset<Real> > uncertainIsocontour(std::shared_ptr<Dataset<Dist> > dataset, double isov)
          -
          48 {
          -
          49  int *dim = dataset->getDimension();
          -
          50  int new_dim[3]={dim[0]-1, dim[1]-1, dim[2]-1};
          -
          51  shared_ary<float> output(new_dim[0]*new_dim[1]*new_dim[2]);
          -
          52 
          -
          53  levelCrossingSerial(dataset->getArray(), dataset->getDimension(), isov, output.get());
          -
          54 
          -
          55  return make_Dataset<float>(new RegularCartesianGrid(new_dim[0], new_dim[1], new_dim[2]),
          -
          56  new ScalarArray<Real>(output) // TODO
          -
          57  );
          -
          58 }
          -
          59 
          -
          60 } // namespace edda
          -
          61 #endif // UNCERTAIN_ISOCONTOUR_H_
          - - -
          ReturnStatus levelCrossing(std::shared_ptr< GmmNdArray > gmmArray_, int dim[3], double isov, std::shared_ptr< NdArray< float > > &probField)
          -
          Definition: shared_ary.h:13
          - - -
          Definition: grid.h:184
          -
          ReturnStatus
          Definition: common.h:32
          -
          Holds all information of a dataset, which includes: 1) Geometry and 2) Data array.
          Definition: dataset.h:24
          -
          ReturnStatus levelCrossingSerial(AbstractDataArray *input, int dim[3], double isov, float *probField)
          - -
          std::shared_ptr< Dataset< Real > > uncertainIsocontour(std::shared_ptr< Dataset< Dist > > dataset, double isov)
          Compute level crossing probabilities given a Dataset class.
          Definition: uncertain_isocontour.h:47
          -
          A simple implementation of DataArray.
          Definition: data_array.h:28
          - - - -
          - - - - diff --git a/html/variant_8h.html b/html/variant_8h.html index 2171b96..e2dc4bf 100644 --- a/html/variant_8h.html +++ b/html/variant_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/variant.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,15 +66,19 @@ Classes | Namespaces | Typedefs | +Enumerations | Functions
          variant.h File Reference
          -
          #include <boost/variant.hpp>
          -#include "distribution.h"
          -#include "gaussian.h"
          -#include "gaussian_mixture.h"
          +
          #include <boost/variant.hpp>
          +#include "distribution_tag.h"
          +#include "gaussian.h"
          +#include "gaussian_mixture.h"
          +#include "histogram.h"
          +#include "joint_gaussian.h"
          +#include "joint_histogram.h"

          Go to the source code of this file.

          @@ -116,26 +96,44 @@ + + + + + + + +
           
          struct  edda::dist::detail::_getSample
           
          struct  edda::dist::detail::_getJointMean
           
          struct  edda::dist::detail::_getJointPdf
           
          struct  edda::dist::detail::_getJointSample
           
          struct  edda::dist::detail::_getName
           
          - - + + - + - +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
           edda::dist
           edda::dist
           
           edda::dist::detail
           edda::dist::detail
           
          - - + + +

          Typedefs

          typedef boost::variant< Real,
          -Gaussian, GaussianMixture
          -< 1 >, GaussianMixture
          -< 2 >, GaussianMixture
          -< 3 >, GaussianMixture
          -< 4 >, GaussianMixture< 5 > > 
          edda::dist::_Variant
           
          typedef boost::variant< Real, Gaussian, Histogram, GaussianMixture< 2 >, GaussianMixture< 3 >, GaussianMixture< 4 >, GaussianMixture< 5 >, JointGaussian, JointHistogram > edda::dist::_Variant
           
          + + +

          +Enumerations

          enum  edda::DistrType {
          +  edda::GMM, +edda::GMM2, +edda::GMM3, +edda::GMM4, +
          +  edda::GMM5, +edda::HIST, +edda::HYBRID +
          + }
           
          @@ -149,17 +147,25 @@ - + + + + + + + + + - +

          Functions

           
          double edda::dist::getSample (const Variant &dist)
           
          template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, Distribution) >
          std::string edda::dist::getName (const Variant &dist)
           
          std::vector< Real > edda::dist::getJointMean (const Variant &dist)
           
          double edda::dist::getJointPdf (const Variant &dist, const std::vector< Real > &x)
           
          std::vector< Real > edda::dist::getJointSample (const Variant &dist)
           
          template<class Dist , int N, ENABLE_IF_BASE_OF(Dist, DistributionTag) >
          Vector< Real, N > edda::dist::getSample (const Vector< Dist, N > &v)
           Return a vector sample. More...
           Return a vector sample. More...
           
          diff --git a/html/variant_8h_source.html b/html/variant_8h_source.html index 9679fd6..42c1bc0 100644 --- a/html/variant_8h_source.html +++ b/html/variant_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/distributions/variant.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,153 +66,65 @@
          variant.h
          -Go to the documentation of this file.
          1 #ifndef VARIANT_H
          -
          2 #define VARIANT_H
          -
          3 
          -
          5 //#define BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT
          -
          6 
          -
          7 #include <boost/variant.hpp>
          -
          8 
          -
          9 #include "distribution.h"
          -
          10 #include "gaussian.h"
          -
          11 #include "gaussian_mixture.h"
          -
          12 
          -
          13 namespace edda{
          -
          14 namespace dist{
          -
          15 
          -
          16  typedef boost::variant<Real, Gaussian, GaussianMixture<1>, GaussianMixture<2>, GaussianMixture<3>, GaussianMixture<4>, GaussianMixture<5> > _Variant;
          -
          17 
          -
          18  struct Variant : public _Variant, public Distribution {
          -
          19  Variant() : _Variant() {}
          -
          20  Variant(const Real &obj) : _Variant (obj) {}
          -
          21  Variant(const Gaussian &obj) : _Variant (obj) {}
          -
          22  template <int GMMs>
          -
          23  Variant(const GaussianMixture<GMMs> &obj) : _Variant (obj) {}
          -
          24  };
          -
          25 
          -
          26  namespace detail{
          -
          27  struct _getPdf : public boost::static_visitor<double> {
          -
          28  double x;
          -
          29  _getPdf(double _x) : x(_x) {}
          -
          30  template <class T> inline double operator() (const T& dist) { return getPdf(dist, x); }
          -
          31  inline double operator() (const Real& value) { return (x==value)?1.:0; }
          -
          32  };
          -
          33  struct _getCdf : public boost::static_visitor<double> {
          -
          34  double x;
          -
          35  _getCdf(double _x) : x(_x) {}
          -
          36  template <class T> inline double operator() (const T& dist) { return getCdf(dist, x); }
          -
          37  inline double operator() (const Real& value) { return (x<=value)?1.:0; }
          -
          38  };
          -
          39  struct _getMean : public boost::static_visitor<double> {
          -
          40  template <class T> inline double operator() (const T& dist) { return getMean(dist); }
          -
          41  inline double operator() (const Real& value) { return value; }
          -
          42  };
          -
          43  struct _getVar: public boost::static_visitor<double> {
          -
          44  template <class T> inline double operator() (const T& dist) { return getVar(dist); }
          -
          45  inline double operator() (const Real& value) { return 0; }
          -
          46  };
          -
          47  struct _getSample : public boost::static_visitor<double> {
          -
          48  template <class T> inline double operator() (const T& dist) { return getSample(dist); }
          -
          49  inline double operator() (const Real& value) { return value; }
          -
          50  };
          -
          51 #if 0
          -
          52  struct _plus_assign: public boost::static_visitor<double> {
          -
          53  template <class T> inline double operator() (const T& lhs, const T& rhs) { lhs += rhs; return lhs; }
          -
          54  };
          -
          55  struct _subtract_assign: public boost::static_visitor<Variant> {
          -
          56  template <class T> inline Variant operator() (const T& lhs, const T& rhs) { lhs -= rhs; return lhs; }
          -
          57  };
          -
          58 #endif
          -
          59  } // namespace detail
          -
          60 
          -
          61  inline double getPdf(const Variant &dist, double x) {
          -
          62  detail::_getPdf f(x);
          -
          63  return boost::apply_visitor( f, dist);
          -
          64  }
          -
          65  inline double getCdf(const Variant &dist, double x) {
          -
          66  detail::_getCdf f(x);
          -
          67  return boost::apply_visitor( f, dist );
          -
          68  }
          -
          69  inline double getMean(const Variant &dist) {
          - -
          71  return boost::apply_visitor( f, dist);
          -
          72  }
          -
          73  inline double getVar(const Variant &dist) {
          - -
          75  return boost::apply_visitor( f, dist);
          -
          76  }
          -
          77  inline double getSample(const Variant &dist) {
          - -
          79  return boost::apply_visitor( f, dist);
          -
          80  }
          -
          81 #if 0
          -
          82  inline Variant operator-=(const Variant& lhs, const Variant& rhs) {
          -
          83  detail::_subtract_assign f;
          -
          84  return boost::apply_visitor( f, lhs, rhs);
          -
          85  }
          -
          86 
          -
          90  template<class T, ENABLE_IF_BASE_OF(T, Distribution) >
          -
          91  inline T operator*(const T& lhs, const double x) {
          -
          92  T h(lhs);
          -
          93  return h *= x;
          -
          94  }
          -
          95 #endif
          -
          96 
          -
          97 
          -
          101  template <class Dist, int N, ENABLE_IF_BASE_OF(Dist, Distribution) >
          - -
          103  {
          -
          104  Vector<Real, N> out;
          -
          105  for (int i=0; i<N; i++)
          -
          106  out[i] = getSample(v[i]);
          -
          107  return out;
          -
          108  }
          -
          109 
          -
          110 } // namespace dist
          -
          111 } // namespace edda
          -
          112 
          -
          113 #endif // #define VARIANT_H
          -
          double x
          Definition: variant.h:34
          -
          Definition: variant.h:18
          -
          double operator()(const T &dist)
          Definition: variant.h:48
          -
          double operator()(const T &dist)
          Definition: variant.h:30
          -
          Definition: variant.h:47
          -
          T operator-=(const T &lhs, const T &rhs)
          random variable -=
          Definition: distribution.h:45
          -
          __host__ __device__ double getPdf(const Gaussian &dist, const double x)
          Return PDF of x.
          Definition: gaussian.h:61
          -
          __host__ __device__ double getVar(const Gaussian &dist)
          Return variance.
          Definition: gaussian.h:52
          -
          Definition: variant.h:27
          -
          Variant(const Gaussian &obj)
          Definition: variant.h:21
          -
          Definition: variant.h:39
          -
          Defines a Gaussian class.
          Definition: gaussian.h:26
          -
          Definition: variant.h:33
          -
          Variant(const GaussianMixture< GMMs > &obj)
          Definition: variant.h:23
          -
          Definition: variant.h:43
          -
          Defines a Gaussian Mixture class.
          Definition: gaussian_mixture.h:34
          -
          T operator*(const T &lhs, const double x)
          random variable *
          Definition: distribution.h:72
          +Go to the documentation of this file.
          1 #ifndef VARIANT_H
          2 #define VARIANT_H
          3 
          5 //#define BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT
          6 
          7 #include <boost/variant.hpp>
          8 
          9 #include "distribution_tag.h"
          10 #include "gaussian.h"
          11 #include "gaussian_mixture.h"
          12 #include "histogram.h"
          13 #include "joint_gaussian.h"
          14 #include "joint_histogram.h"
          15 
          16 namespace edda{
          18 
          19 namespace dist{
          20 
          21  typedef boost::variant<Real, Gaussian, Histogram,
          22  GaussianMixture<2>, GaussianMixture<3>, GaussianMixture<4>, GaussianMixture<5>,
          24 
          25  struct Variant : public _Variant, public DistributionTag {
          26  Variant() : _Variant() {}
          27  Variant(const Real &obj) : _Variant (obj) {}
          28  Variant(const Gaussian &obj) : _Variant (obj) {}
          29  Variant(const GaussianMixture<2> &obj) : _Variant (obj) {}
          30  Variant(const GaussianMixture<3> &obj) : _Variant (obj) {}
          31  Variant(const GaussianMixture<4> &obj) : _Variant (obj) {}
          32  Variant(const GaussianMixture<5> &obj) : _Variant (obj) {}
          33  Variant(const Histogram &obj) : _Variant (obj) {}
          34  Variant(const JointGaussian &obj) : _Variant (obj) {}
          35  Variant(const JointHistogram &obj) : _Variant (obj) {}
          36  };
          37 
          38  namespace detail{
          39  struct _getPdf : public boost::static_visitor<double> {
          40  double x;
          41  template <class T> inline double operator() (const T& dist) { return getPdf(dist, x); }
          42  };
          43  struct _getCdf : public boost::static_visitor<double> {
          44  double x;
          45  template <class T> inline double operator() (const T& dist) { return getCdf(dist, x); }
          46  };
          47  struct _getMean : public boost::static_visitor<double> {
          48  template <class T> inline double operator() (const T& dist) { return getMean(dist); }
          49  };
          50  struct _getVar: public boost::static_visitor<double> {
          51  template <class T> inline double operator() (const T& dist) { return getVar(dist); }
          52  };
          53  struct _getSample : public boost::static_visitor<double> {
          54  template <class T> inline double operator() (const T& dist) { return getSample(dist); }
          55  };
          56  struct _getJointMean : public boost::static_visitor<std::vector<Real> > {
          57  template <class T> inline std::vector<Real> operator() (const T& dist) { return getJointMean(dist); }
          58  };
          59  struct _getJointPdf : public boost::static_visitor<double> {
          60  std::vector<Real> x;
          61  template <class T> inline double operator() (const T& dist) { return getJointPdf(dist, x); }
          62  };
          63  struct _getJointSample : public boost::static_visitor<std::vector<Real> > {
          64  template <class T> inline std::vector<Real> operator() (const T& dist) { return getJointSample(dist); }
          65  };
          66  struct _getName : public boost::static_visitor<std::string> {
          67  template <class T> inline std::string operator() (const T& dist) { return getName(dist); }
          68  };
          69  } // namespace detail
          70 
          71  inline double getPdf(const Variant &dist, double x) {
          72  detail::_getPdf f; f.x = x;
          73  return boost::apply_visitor( f, dist );
          74  }
          75  inline double getCdf(const Variant &dist, double x) {
          76  detail::_getCdf f; f.x = x;
          77  return boost::apply_visitor( f, dist );
          78  }
          79  inline double getMean(const Variant &dist) {
          81  return boost::apply_visitor( f, dist );
          82  }
          83  inline double getVar(const Variant &dist) {
          85  return boost::apply_visitor( f, dist );
          86  }
          87  inline double getSample(const Variant &dist) {
          89  return boost::apply_visitor( f, dist );
          90  }
          91  inline std::string getName(const Variant &dist) {
          93  return boost::apply_visitor( f, dist );
          94  }
          95  inline std::vector<Real> getJointMean(const Variant &dist) {
          97  return boost::apply_visitor( f, dist );
          98  }
          99  inline double getJointPdf(const Variant &dist, const std::vector<Real> &x) {
          100  detail::_getJointPdf f; f.x = x;
          101  return boost::apply_visitor( f, dist );
          102  }
          103  inline std::vector<Real> getJointSample(const Variant &dist) {
          105  return boost::apply_visitor( f, dist );
          106  }
          107 
          108 
          112  template <class Dist, int N, ENABLE_IF_BASE_OF(Dist, DistributionTag) >
          114  {
          115  Vector<Real, N> out;
          116  for (int i=0; i<N; i++)
          117  out[i] = getSample(v[i]);
          118  return out;
          119  }
          120 
          121 } // namespace dist
          122 } // namespace edda
          123 
          124 #endif // #define VARIANT_H
          double x
          Definition: variant.h:44
          +
          std::string getName(const Real &x)
          Definition: distribution_tag.h:226
          +
          __host__ double getSample(const Dist &dist)
          Return a random sample.
          Definition: distribution_tag.h:84
          + +
          __host__ __device__ double getPdf(const Dist &dist, const double x)
          Return PDF of x.
          Definition: distribution_tag.h:73
          +
          Definition: variant.h:25
          +
          Variant(const Histogram &obj)
          Definition: variant.h:33
          +
          Variant(const JointHistogram &obj)
          Definition: variant.h:35
          +
          Definition: variant.h:17
          +
          Definition: variant.h:17
          +
          Definition: variant.h:53
          +
          Definition: variant.h:66
          + +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          __host__ __device__ double getJointPdf(const Dist &dist, const std::vector< Real > x_)
          Return PDF of x.
          Definition: distribution_tag.h:128
          +
          Definition: variant.h:39
          +
          __host__ __device__ double getVar(const Dist &dist)
          Return variance.
          Definition: distribution_tag.h:62
          +
          __host__ __device__ double getMean(const Dist &dist)
          Return mean.
          Definition: distribution_tag.h:51
          +
          Variant(const Gaussian &obj)
          Definition: variant.h:28
          +
          Definition: variant.h:47
          +
          Definition: variant.h:43
          +
          Definition: variant.h:50
          +
          __host__ std::vector< Real > getJointSample(const Dist &dist)
          Return a random sample.
          Definition: distribution_tag.h:139
          +
          Definition: variant.h:17
          +
          boost::variant< Real, Gaussian, Histogram, GaussianMixture< 2 >, GaussianMixture< 3 >, GaussianMixture< 4 >, GaussianMixture< 5 >, JointGaussian, JointHistogram > _Variant
          Definition: variant.h:23
          +
          std::vector< Real > x
          Definition: variant.h:60
          +
          The Distribution class is a root class for all distribution-type classes.
          Definition: distribution_tag.h:30
          +
          Variant(const JointGaussian &obj)
          Definition: variant.h:34
          +
          Definition: variant.h:17
          +
          Definition: variant.h:17
          +
          Variant(const GaussianMixture< 3 > &obj)
          Definition: variant.h:30
          +
          Definition: variant.h:59
          +
          Definition: variant.h:56
          - -
          boost::variant< Real, Gaussian, GaussianMixture< 1 >, GaussianMixture< 2 >, GaussianMixture< 3 >, GaussianMixture< 4 >, GaussianMixture< 5 > > _Variant
          Definition: variant.h:16
          -
          double operator()(const T &dist)
          Definition: variant.h:40
          -
          __host__ double getSample(const Gaussian &dist)
          Return a random sample.
          Definition: gaussian.h:73
          -
          double operator()(const T &dist)
          Definition: variant.h:36
          -
          Variant(const Real &obj)
          Definition: variant.h:20
          -
          _getPdf(double _x)
          Definition: variant.h:29
          -
          double x
          Definition: variant.h:28
          -
          The Distribution class is a root class for all distribution-type classes.
          Definition: distribution.h:28
          -
          double operator()(const T &dist)
          Definition: variant.h:44
          -
          Vectors are Tuples that have geometry concepts.
          Definition: vector_matrix.h:26
          -
          Variant()
          Definition: variant.h:19
          +
          Variant(const GaussianMixture< 5 > &obj)
          Definition: variant.h:32
          +
          Variant(const GaussianMixture< 2 > &obj)
          Definition: variant.h:29
          +
          Define a Joint histogram class.
          Definition: joint_histogram.h:33
          + +
          Defines a Gaussian class.
          Definition: joint_gaussian.h:36
          +
          Variant(const Real &obj)
          Definition: variant.h:27
          +
          Definition: variant.h:17
          +
          double x
          Definition: variant.h:40
          + +
          Vectors are Tuples that have geometry concepts.
          Definition: vector_matrix.h:27
          +
          Variant()
          Definition: variant.h:26
          -
          float Real
          Definition: common.h:26
          -
          double getMean(const T &dist)
          Compute the mean of the distribution.
          Definition: distribution.h:92
          -
          double getCdf(const T &dist, double x)
          Compute CDF of a distribution.
          Definition: distribution.h:81
          -
          _getCdf(double _x)
          Definition: variant.h:35
          +
          __host__ __device__ std::vector< Real > getJointMean(const Dist &dist)
          Definition: distribution_tag.h:117
          +
          float Real
          Definition: common.h:28
          +
          Definition: variant.h:63
          +
          Variant(const GaussianMixture< 4 > &obj)
          Definition: variant.h:31
          +
          DistrType
          Definition: variant.h:17
          +
          __host__ __device__ double getCdf(const Dist &dist, double x)
          Return CDF of x.
          Definition: distribution_tag.h:106
          +
          Definition: variant.h:17
          diff --git a/html/vectSpatialDecompExample_8cpp.html b/html/vectSpatialDecompExample_8cpp.html new file mode 100644 index 0000000..c6b282d --- /dev/null +++ b/html/vectSpatialDecompExample_8cpp.html @@ -0,0 +1,151 @@ + + + + + + + +EDDA: distr_modeler/vectSpatialDecompExample.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          vectSpatialDecompExample.cpp File Reference
          +
          +
          +
          #include <iostream>
          +#include <stdlib.h>
          +#include <cmath>
          +#include <vector>
          +#include <sstream>
          +#include "edda.h"
          +#include "distributions/gaussian.h"
          +#include "distributions/distribution.h"
          +#include <distributions/gaussian_mixture.h>
          +#include "distributions/histogram.h"
          +#include <distributions/estimate_gmm.h>
          +#include "distributions/variant.h"
          +#include "dataset/dataset.h"
          +#include "dataset/distr_array.h"
          +#include <sys/time.h>
          +#include "VecDistrModeler.h"
          +
          + + + +

          +Typedefs

          typedef unsigned long long timestamp_t
           
          + + + +

          +Functions

          int main (int argc, char *argv[])
           
          +

          Typedef Documentation

          + +

          § timestamp_t

          + +
          +
          + + + + +
          typedef unsigned long long timestamp_t
          +
          + +
          +
          +

          Function Documentation

          + +

          § main()

          + +
          +
          + + + + + + + + + + + + + + + + + + +
          int main (int argc,
          char * argv[] 
          )
          +
          + +
          +
          +
          + + + + diff --git a/html/vector__matrix_8cpp.html b/html/vector__matrix_8cpp.html new file mode 100644 index 0000000..f951308 --- /dev/null +++ b/html/vector__matrix_8cpp.html @@ -0,0 +1,93 @@ + + + + + + + +EDDA: src/core/vector_matrix.cpp File Reference + + + + + + + + + +
          +
          + + + + + + +
          +
          EDDA +
          +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + + +
          +
          + +
          +
          vector_matrix.cpp File Reference
          +
          +
          + + + + + +

          +Namespaces

           edda
           Experimental functionality.
           
          + + + +

          +Functions

          VECTOR3 edda::operator* (const MATRIX3 &m0, const VECTOR3 &v0)
           
          +
          + + + + diff --git a/html/vector__matrix_8h.html b/html/vector__matrix_8h.html index cadeace..d0bbb85 100644 --- a/html/vector__matrix_8h.html +++ b/html/vector__matrix_8h.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/vector_matrix.h File Reference + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -95,28 +71,31 @@
          vector_matrix.h File Reference
          -
          #include <cmath>
          -#include "common.h"
          -#include "tuple.h"
          +
          #include <algorithm>
          +#include <cmath>
          +#include "common.h"
          +#include "tuple.h"

          Go to the source code of this file.

          - + - + - + + +

          Classes

          class  edda::Vector< Real, N >
           Vectors are Tuples that have geometry concepts. More...
           Vectors are Tuples that have geometry concepts. More...
           
          class  edda::Vector< Real, 3 >
           Specialization of Vector3 for higher performance. More...
           Specialization of Vector3 for higher performance. More...
           
          class  edda::Vector< Real, 4 >
           Specialization of Vector4 for higher performance. More...
           Specialization of Vector4 for higher performance. More...
           
          class  edda::MATRIX3
           
          - - + +

          Namespaces

           edda
           Experimental functionality.
           edda
           Experimental functionality.
           
          - + @@ -177,13 +156,15 @@ + +

          @@ -160,7 +139,7 @@

           
          template<typename Real >
          Real edda::dot (const Vector4< Real > &v0, const Vector4< Real > &v1)
           Vector 4 operators. More...
           Vector 4 operators. More...
           
          template<typename Real >
          Vector4< Real > edda::operator+ (const Vector4< Real > &v0, const Vector4< Real > &v1)
          template<typename Real >
          Vector4< Real > edda::operator* (const Vector4< Real > &v0, float x0)
           
          VECTOR3 edda::operator* (const MATRIX3 &m0, const VECTOR3 &v0)
           
          diff --git a/html/vector__matrix_8h_source.html b/html/vector__matrix_8h_source.html index 455388a..dd66547 100644 --- a/html/vector__matrix_8h_source.html +++ b/html/vector__matrix_8h_source.html @@ -3,16 +3,15 @@ - + + EDDA: src/core/vector_matrix.h Source File + - @@ -21,7 +20,7 @@ - @@ -30,48 +29,25 @@
          +
          EDDA
          - + - - + + + + +
          @@ -90,481 +66,80 @@
          vector_matrix.h
          -Go to the documentation of this file.
          1 // Vector and Matrix Class
          -
          3 //
          -
          4 // Created by: Matt Camuto
          -
          5 //
          -
          6 // Modification:
          -
          7 // Time Programmer
          -
          8 // 07-09-99 R. Wenger
          -
          9 // 08-20-99 K. Boner
          -
          10 // 07-15-00 J. Gao
          -
          11 // 05-25-05 H-W Shen, Liya Li
          -
          12 // 01-2016 C-M Chen
          -
          14 
          -
          15 #ifndef _VECTOR_MATRIX_H_
          -
          16 #define _VECTOR_MATRIX_H_
          -
          17 
          -
          18 #include <cmath>
          -
          19 #include "common.h"
          -
          20 #include "tuple.h"
          -
          21 
          -
          22 namespace edda{
          -
          23 
          -
          25 template <typename Real, int N>
          -
          26 class Vector : public Tuple<Real, N>
          -
          27 {
          -
          28  using Tuple<Real, N>::vec;
          -
          29 public :
          -
          30  // constructor
          -
          31  Vector() {}
          -
          32 
          -
          33  // assign Vector
          -
          34  template<typename U>
          -
          35  Vector(const Vector<U, N>& v)
          -
          36  {
          -
          37  for (int i = 0; i < N; ++i)
          -
          38  this->vec[i] = v[i];
          -
          39  }
          -
          40 
          -
          41  template <typename Real2>
          -
          42  bool operator ==(const Vector<Real2, N> &v) const {
          -
          43  for (int i=0; i<N; i++)
          -
          44  {
          -
          45  if (fabs(vec[0]-v(0)) >= EPS )
          -
          46  return false;
          -
          47  }
          -
          48  return true;
          -
          49  }
          -
          50  // get magnitude
          -
          51  double getMag() const {
          -
          52  double r = 0;
          -
          53  for (int i=0; i<N; i++)
          -
          54  r += vec[i]*vec[i];
          -
          55  return sqrt(r);
          -
          56  }
          -
          57  // get the maximum value
          -
          58  Real getMax() const {
          -
          59  Real r = vec[0];
          -
          60  for (int i=1; i<N; i++)
          -
          61  r = std::max(r, vec[i]);
          -
          62  return r;
          -
          63  }
          -
          64  // normalize vector
          -
          65  void normalize() {
          -
          66  double norm = getMag();
          -
          67  if (norm!=0) (*this) *= (1/norm);
          -
          68  }
          - -
          70  for (int i=0; i<N; i++)
          -
          71  vec[i]+=x;
          -
          72  return *this;
          -
          73  }
          - -
          75  for (int i=0; i<N; i++)
          -
          76  vec[i]*=x;
          -
          77  return *this;
          -
          78  }
          -
          79 
          -
          80  // make sure all component<=1.0
          -
          81  void clamp()
          -
          82  {
          -
          83  for (int i = 0; i < this->getLen(); i++)
          -
          84  if (vec[i]>1.0) vec[i] = 1.0;
          -
          85  }
          -
          86 };
          -
          87 
          -
          91 template <typename Real>
          -
          92 class Vector<Real, 3> : public Tuple3<Real>
          -
          93 {
          -
          94  using Tuple<Real, 3>::vec;
          -
          95 
          -
          96 public:
          -
          97  // constructor
          -
          98  Vector() {}
          -
          99  Vector(Real x, Real y, Real z) { set(x,y,z); }
          -
          100  // assign Vector
          -
          101  template<typename U> Vector(const Vector<U, 3>& v) { set(v.x(), v.y(), v.z()); }
          -
          102 
          -
          103  inline void set(Real x, Real y, Real z) { vec[0]=x; vec[1]=y; vec[2]=z; }
          -
          104  inline Real x() const {return vec[0];}
          -
          105  inline Real y() const {return vec[1];}
          -
          106  inline Real z() const {return vec[2];}
          -
          107 
          -
          108  template<typename Real2>
          -
          109  bool operator ==(const Vector<Real2, 3>& v) const {
          -
          110  return (fabs(vec[0]-v(0)) < EPS &&
          -
          111  fabs(vec[1]-v(1)) < EPS &&
          -
          112  fabs(vec[2]-v(2)) < EPS);
          -
          113  }
          -
          114  // get magnitude
          -
          115  double getMag() const { return sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); }
          -
          116  // get the maximum value
          -
          117  Real getMax() const { return std::max(vec[0], std::max(vec[1], vec[2])); }
          -
          118  // normalize vector
          -
          119  void normalize() { double norm = getMag(); if (norm!=0) (*this) *= (1/norm); }
          -
          120  Vector<Real, 3> operator+=(Real x) { vec[0]+=x; vec[1]+=x; vec[2]+=x; return *this; }
          -
          121  Vector<Real, 3> operator*=(Real x) { vec[0]*=x; vec[1]*=x; vec[2]*=x; return *this; }
          -
          122  Vector<Real, 3> operator+=(Vector<Real, 3> x) { vec[0]+=x[0]; vec[1]+=x[1]; vec[2]+=x[2]; return *this; }
          -
          123  Vector<Real, 3> operator*=(Vector<Real, 3> x) { vec[0]*=x[0]; vec[1]*=x[1]; vec[2]*=x[2]; return *this; }
          -
          124 };
          -
          125 
          -
          127 template <typename Real>
          -
          128 class Vector<Real, 4> : public Tuple4<Real>
          -
          129 {
          -
          130  using Tuple<Real, 4>::vec;
          -
          131 public :
          -
          132  // constructor
          -
          133  Vector() {}
          -
          134  Vector(Real x, Real y, Real z, Real w) { set(x,y,z,w); }
          -
          135  // assign Vector
          -
          136  template<typename U> Vector(const Vector<U, 4>& v) { set(v.x(), v.y(), v.z(), v.w()); }
          -
          137 
          -
          138  inline void set(Real x, Real y, Real z, Real w) { vec[0]=x; vec[1]=y; vec[2]=z; vec[3]=w; }
          -
          139  inline Real x() const {return vec[0];}
          -
          140  inline Real y() const {return vec[1];}
          -
          141  inline Real z() const {return vec[2];}
          -
          142  inline Real w() const {return vec[3];}
          -
          143 
          -
          144  template <typename Real2>
          -
          145  bool operator ==(const Vector<Real2, 4>& v) const {
          -
          146  return (fabs(vec[0]-v(0)) < EPS &&
          -
          147  fabs(vec[1]-v(1)) < EPS &&
          -
          148  fabs(vec[2]-v(2)) < EPS &&
          -
          149  fabs(vec[3]-v(3)) < EPS);
          -
          150  }
          -
          151  // get magnitude
          -
          152  double getMag() const { return sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2] + vec[3]*vec[3]); }
          -
          153  // get the maximum value
          -
          154  Real getMax() const { return std::max(vec[0], std::max(vec[1], std::max(vec[2], vec[3]))); }
          -
          155  // normalize vector
          -
          156  void normalize() { double norm = getMag(); if (norm!=0) (*this) *= (1/norm); }
          -
          157  Vector<Real, 4> operator+=(Real x) { vec[0]+=x; vec[1]+=x; vec[2]+=x; vec[3]+=x; return *this; }
          -
          158  Vector<Real, 4> operator*=(Real x) { vec[0]*=x; vec[1]*=x; vec[2]*=x; vec[3]+=x; return *this; }
          -
          159  Vector<Real, 4> operator+=(Vector<Real, 4> x) { vec[0]+=x[0]; vec[1]+=x[1]; vec[2]+=x[2]; vec[3]+=x[3]; return *this; }
          -
          160  Vector<Real, 4> operator*=(Vector<Real, 4> x) { vec[0]*=x[0]; vec[1]*=x[1]; vec[2]*=x[2]; vec[3]+=x[3]; return *this; }
          -
          161 
          -
          162  // make sure all component<=1.0
          -
          163  void clamp()
          -
          164  {
          -
          165  for (int i = 0; i < this->getLen(); i++)
          -
          166  if (vec[i]>1.0) vec[i] = 1.0;
          -
          167  }
          -
          168 };
          -
          169 
          -
          170 template<typename Real> using Vector3 = Vector<Real, 3> ;
          -
          171 template<typename Real> using Vector4 = Vector<Real, 4> ;
          -
          172 
          -
          173 //************************
          -
          174 // VECTOR operations
          -
          175 //************************
          -
          176 template<typename Real> inline Real dot(const Vector3<Real> & v0, const Vector3<Real> & v1)
          -
          177 // return dot product of v0 and v1
          -
          178 { return( v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2]); }
          -
          179 template<typename Real> inline Vector3<Real> cross(const Vector3<Real> & v0, const Vector3<Real> & v1)
          -
          180 // return cross product of v0 and v1
          -
          181 { return Vector3<Real>( v0[1]*v1[2] - v0[2]*v1[1],
          -
          182  v0[2]*v1[0] - v0[0]*v1[2],
          -
          183  v0[0]*v1[1] - v0[1]*v1[0] );
          -
          184 }
          -
          185 template<typename Real> inline Vector3<Real> operator +(const Vector3<Real> & v0, const Vector3<Real> & v1)
          -
          186 // return v0 + v1
          -
          187 { return(Vector3<Real> (v0[0] + v1[0], v0[1] + v1[1], v0[2] + v1[2])); }
          -
          188 template<typename Real> inline Vector3<Real> operator -(const Vector3<Real> & v0, const Vector3<Real> & v1)
          -
          189 // return v0 - v1
          -
          190 { return(Vector3<Real>(v0[0] - v1[0], v0[1] - v1[1], v0[2] - v1[2])); }
          -
          191 template<typename Real> inline Real operator *(Vector3<Real>& v0, Vector3<Real>& v1)
          -
          192 // return v0*v1T
          -
          193 { return (v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v0[2]); }
          -
          194 template<typename Real> inline Vector3<Real> operator *(float x0, const Vector3<Real> & v0)
          -
          195 // return x0*v0
          -
          196 { return(Vector3<Real>(v0[0]*x0, v0[1]*x0, v0[2]*x0)); }
          -
          197 template<typename Real> inline Vector3<Real> operator *(const Vector3<Real> & v0, float x0)
          -
          198 // return v0*x0 (= x0*v0)
          -
          199 { return(x0*v0); }
          -
          200 
          -
          201 template<typename Real>
          - -
          203 { Vector4<Real> temp(vec[0], vec[1], vec[2], 1.0); return temp;}
          -
          204 
          -
          206 template<typename Real> inline Real dot(const Vector4<Real> & v0, const Vector4<Real> & v1)
          -
          207 // return dot product of v0 and v1
          -
          208 { return( v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2] + v0[3]*v1[3]); }
          -
          209 //template<typename Real> inline Vector4<Real> cross(const Vector4<Real> & v0, const Vector4<Real> & v1)
          -
          210 template<typename Real> inline Vector4<Real> operator +(const Vector4<Real> & v0, const Vector4<Real> & v1)
          -
          211 // return v0 + v1
          -
          212 { return(Vector4<Real> (v0[0] + v1[0], v0[1] + v1[1], v0[2] + v1[2], v0[3] + v1[3])); }
          -
          213 template<typename Real> inline Vector4<Real> operator -(const Vector4<Real> & v0, const Vector4<Real> & v1)
          -
          214 // return v0 - v1
          -
          215 { return(Vector4<Real>(v0[0] - v1[0], v0[1] - v1[1], v0[2] - v1[2], v0[3] - v1[3])); }
          -
          216 template<typename Real> inline Real operator *(Vector4<Real>& v0, Vector4<Real>& v1)
          -
          217 // return v0*v1T
          -
          218 { return (v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v0[2] + v0[3] * v1[3]); }
          -
          219 template<typename Real> inline Vector4<Real> operator *(float x0, const Vector4<Real> & v0)
          -
          220 // return x0*v0
          -
          221 { return(Vector4<Real>(x0*v0[0], x0*v0[1], x0*v0[2], x0*v0[3])); }
          -
          222 template<typename Real> inline Vector4<Real> operator *(const Vector4<Real> & v0, float x0)
          -
          223 // return v0*x0 (= x0*v0)
          -
          224 { return(x0*v0); }
          -
          225 
          -
          226 // backward compatibility
          - - -
          229 
          -
          230 
          -
          231 #if 0
          -
          232 // 3d matrix
          -
          235 class MATRIX3
          -
          236 {
          -
          237 private :
          -
          238  Vector3 mat[3]; // a vector represents each matrix row
          -
          239 
          -
          240 public :
          -
          241 
          -
          242  MATRIX3() // constructor
          -
          243  { Identity(); };
          -
          244  MATRIX3(const Vector3 & v0, const Vector3 & v1, const Vector3 & v2)
          -
          245  { mat[0] = v0; mat[1] = v1; mat[2] = v2; }; // constructor
          -
          246  int Dimension() const
          -
          247  { return 3; };
          -
          248  Vector3 & operator [](const int i) // index row i
          -
          249  { return(mat[i]); };
          -
          250  // Note: reference row i, column j of MATRIX3 m0 as m0[i][j] (not m0[i,j])
          -
          251  Vector3 operator()(const int i) const // return row i
          -
          252  { return(mat[i]); };
          -
          253  float operator ()(const int i, const int j) const
          -
          254  { return(mat[i](j)); }; // return element (i,j)
          -
          255  MATRIX3 & operator =(const MATRIX3 & m0) // copy matrix m0
          -
          256  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2);
          -
          257  return(*this); };
          -
          258  void Identity(); // set to identity
          -
          259 
          -
          260  float det(); // determinant of the matrix
          -
          261 
          -
          262  int inverse( MATRIX3& m) ;//added by lijie to handle curvilinear grid
          -
          263  MATRIX3 transpose();//added by lijie to handle curvilinear grid
          -
          264 };
          -
          265 
          -
          267 // 4d matrix
          -
          269 class MATRIX4
          -
          270 {
          -
          271 
          -
          272 private :
          -
          273  Vector4 mat[4]; // a vector represents each matrix row
          -
          274 
          -
          275 public :
          -
          276 
          -
          277  MATRIX4() // constructor
          -
          278  { Identity(); };
          -
          279  MATRIX4(const Vector4 & v0, const Vector4 & v1,
          -
          280  const Vector4 & v2, const Vector4 & v3) // constructor
          -
          281  { mat[0] = v0; mat[1] = v1; mat[2] = v2; mat[3] = v3; };
          -
          282  int Dimension() const
          -
          283  { return 4; };
          -
          284  Vector4 & operator [](int i) // index row i
          -
          285  { return(mat[i]); };
          -
          286  // Note: reference row i, column j of MATRIX4 m0 as m0[i][j] (not m0[i,j])
          -
          287  Vector4 operator()(const int i) const // return row i
          -
          288  { return(mat[i]); };
          -
          289  float operator ()(const int i, const int j) const
          -
          290  { return(mat[i](j)); }; // return element (i,j)
          -
          291  MATRIX4 & operator =(const MATRIX4 & m0) // copy matrix m0
          -
          292  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2); mat[3] = m0(3);
          -
          293  return(*this); };
          -
          294  MATRIX4 & operator =(const MATRIX3 & m0) // copy matrix m0
          -
          295  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2);
          -
          296  Vector4 temp(0.0,0.0,0.0,1.0);
          -
          297  mat[3] = temp;
          -
          298  return(*this); };
          -
          299  void Identity(); // set to identity
          -
          300 };
          -
          301 
          -
          302 //************************
          -
          303 // VECTOR2 operations
          -
          304 //************************
          -
          305 
          -
          306 inline VECTOR2 operator +(const VECTOR2 & v0, const VECTOR2 & v1)
          -
          307 // return v0 + v1
          -
          308 { return(VECTOR2(v0(0) + v1(0), v0(1) + v1(1))); };
          -
          309 
          -
          310 inline VECTOR2 operator -(const VECTOR2 & v0, const VECTOR2 & v1)
          -
          311 // return v0 - v1
          -
          312 { return(VECTOR2(v0(0) - v1(0), v0(1) - v1(1))); };
          -
          313 
          -
          314 inline VECTOR2 operator *(float x0, const VECTOR2 & v0)
          -
          315 // return x0*v0
          -
          316 { return(VECTOR2(x0*v0(0), x0*v0(1))); };
          -
          317 
          -
          318 inline VECTOR2 operator *(const VECTOR2 & v0, float x0)
          -
          319 // return v0*x0 (= x0*v0)
          -
          320 { return(x0*v0); };
          -
          321 
          -
          322 
          -
          323 //************************
          -
          324 // Vector3 operations
          -
          325 //************************
          -
          326 
          -
          327 inline float dot(const Vector3 & v0, const Vector3 & v1)
          -
          328 // return dot product of v0 and v1
          -
          329 { return(v0(0)*v1(0) + v0(1)*v1(1) + v0(2)*v1(2)); };
          -
          330 
          -
          331 inline Vector3 cross(const Vector3 & v0, const Vector3 & v1)
          -
          332 // return cross product of v0 and v1
          -
          333 { return(Vector3(v0(1)*v1(2) - v0(2)*v1(1),
          -
          334  v0(2)*v1(0) - v0(0)*v1(2),
          -
          335  v0(0)*v1(1) - v0(1)*v1(0))); };
          -
          336 
          -
          337 inline Vector3 operator +(const Vector3 & v0, const Vector3 & v1)
          -
          338 // return v0 + v1
          -
          339 { return(Vector3(v0(0) + v1(0), v0(1) + v1(1), v0(2) + v1(2))); };
          -
          340 
          -
          341 inline Vector3 operator -(const Vector3 & v0, const Vector3 & v1)
          -
          342 // return v0 - v1
          -
          343 { return(Vector3(v0(0) - v1(0), v0(1) - v1(1), v0(2) - v1(2))); };
          -
          344 
          -
          345 inline float operator *(Vector3& v0, Vector3& v1)
          -
          346 // return v0*v1T
          -
          347 { return (v0(0) * v1(0) + v0(1) * v1(1) + v0(2) * v0(2)); };
          -
          348 
          -
          349 inline Vector3 operator *(float x0, const Vector3 & v0)
          -
          350 // return x0*v0
          -
          351 { return(Vector3(x0*v0(0), x0*v0(1), x0*v0(2))); };
          -
          352 
          -
          353 inline Vector3 operator *(const Vector3 & v0, float x0)
          -
          354 // return v0*x0 (= x0*v0)
          -
          355 { return(x0*v0); };
          -
          356 
          -
          357 inline Vector4 get_Vector4(Vector3 vec)
          -
          358 { Vector4 temp(vec[0], vec[1], vec[2], 1.0); return temp;};
          -
          359 
          -
          360 //************************
          -
          361 // Vector4 operations
          -
          362 //************************
          -
          363 
          -
          364 inline float dot(const Vector4 & v0, const Vector4 & v1)
          -
          365 // return dot product of v0 and v1
          -
          366 { return(v0(0)*v1(0) + v0(1)*v1(1) + v0(2)*v1(2) + v0(3)*v1(3)); };
          -
          367 
          -
          368 inline Vector4 operator +(const Vector4 & v0, const Vector4 & v1)
          -
          369 // return v0 + v1
          -
          370 { return(Vector4(v0(0)+v1(0), v0(1)+v1(1), v0(2)+v1(2), v0(3)+v1(3))); };
          -
          371 
          -
          372 inline Vector4 operator -(const Vector4 & v0, const Vector4 & v1)
          -
          373 // return v0 - v1
          -
          374 { return(Vector4(v0(0)-v1(0), v0(1)-v1(1), v0(2)-v1(2), v0(3)-v1(3))); };
          -
          375 
          -
          376 inline Vector4 operator *(float x0, const Vector4 & v0)
          -
          377 // return x0*v0
          -
          378 { return(Vector4(x0*v0(0), x0*v0(1), x0*v0(2), x0*v0(3))); };
          -
          379 
          -
          380 inline Vector4 operator *(const Vector4 & v0, float x0)
          -
          381 // return v0*x0 (= x0*v0)
          -
          382 { return(x0*v0); };
          -
          383 
          -
          384 //************************
          -
          385 // MATRIX3 operations
          -
          386 //************************
          -
          387 
          -
          388 MATRIX3 operator +(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 + m1
          -
          389 MATRIX3 operator -(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 - m1
          -
          390 MATRIX3 operator *(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 * m1
          -
          391 MATRIX3 operator *(const float x0, const MATRIX3 & m0); // return x0 * m0
          -
          392 MATRIX3 operator *(const MATRIX3 & m0, const float x0); // return m0 * x0
          -
          393 Vector3 operator *(const MATRIX3 & m0, const Vector3 & v0); // return m0 * v0
          -
          394 Vector3 operator *(const Vector3 & v0, const MATRIX3 & m0); // return v0 * m0
          -
          395 
          -
          396 //************************
          -
          397 // MATRIX4 operations
          -
          398 //************************
          -
          399 
          -
          400 MATRIX4 operator +(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 + m1
          -
          401 MATRIX4 operator -(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 - m1
          -
          402 MATRIX4 operator *(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 * m1
          -
          403 MATRIX4 operator *(const float x0, const MATRIX4 & m0); // return x0 * m0
          -
          404 MATRIX4 operator *(const MATRIX4 & m0, const float x0); // return m0 * x0
          -
          405 Vector4 operator *(const MATRIX4 & m0, const Vector4 & v0); // return m0 * v0
          -
          406 Vector4 operator *(const Vector4 & v0, const MATRIX4 & m0); // return v0 * m0
          -
          407 Vector3 operator *(const MATRIX4 & m0, const Vector3 & v0); // return m0 * v0
          -
          408 Vector3 operator *(const Vector3 & v0, const MATRIX4 & m0); // return v0 * m0
          -
          409 
          -
          410 
          -
          411 MATRIX4 inverse(const MATRIX4 & m); // return inverse of m; return 0 matrix if
          -
          412 // m is singular
          -
          413 MATRIX4 rotate_matrix(int type, float angle); // type: 1:x, 2:y, 3:z
          -
          414 MATRIX4 translate_matrix(float dx, float dy, float dz);
          -
          415 MATRIX4 scale_matrix(float sx, float sy, float sz);
          -
          416 
          -
          417 #endif
          -
          418 
          -
          419 } // namespace edda
          -
          420 
          -
          421 #endif
          -
          bool operator==(const Vector< Real2, N > &v) const
          Definition: vector_matrix.h:42
          -
          void normalize()
          Definition: vector_matrix.h:156
          -
          void clamp()
          Definition: vector_matrix.h:81
          -
          Real y() const
          Definition: vector_matrix.h:140
          -
          Real x() const
          Definition: vector_matrix.h:139
          -
          Vector(Real x, Real y, Real z, Real w)
          Definition: vector_matrix.h:134
          -
          Vector(const Vector< U, 4 > &v)
          Definition: vector_matrix.h:136
          -
          Vector< Real, 3 > Vector3
          Definition: vector_matrix.h:170
          -
          Vector< Real, 4 > operator*=(Vector< Real, 4 > x)
          Definition: vector_matrix.h:160
          -
          Real y() const
          Definition: vector_matrix.h:105
          -
          void set(Real x, Real y, Real z, Real w)
          Definition: vector_matrix.h:138
          -
          Real getMax() const
          Definition: vector_matrix.h:58
          +Go to the documentation of this file.
          1 // Vector and Matrix Class
          3 //
          4 // Created by: Matt Camuto
          5 //
          6 // Modification:
          7 // Time Programmer
          8 // 07-09-99 R. Wenger
          9 // 08-20-99 K. Boner
          10 // 07-15-00 J. Gao
          11 // 05-25-05 H-W Shen, Liya Li
          12 // 01-2016 C-M Chen
          14 
          15 #ifndef EDDA_VECTOR_MATRIX_H_
          16 #define EDDA_VECTOR_MATRIX_H_
          17 
          18 #include <algorithm>
          19 #include <cmath>
          20 #include "common.h"
          21 #include "tuple.h"
          22 
          23 namespace edda{
          24 
          26 template <typename Real, int N>
          27 class Vector : public Tuple<Real, N>
          28 {
          29  using Tuple<Real, N>::vec;
          30 public :
          31  // constructor
          32  Vector() {}
          33 
          34  // assign Vector
          35  template<typename U>
          36  Vector(const Vector<U, N>& v)
          37  {
          38  for (int i = 0; i < N; ++i)
          39  this->vec[i] = v[i];
          40  }
          41 
          42  template <typename Real2>
          43  bool operator ==(const Vector<Real2, N> &v) const {
          44  for (int i=0; i<N; i++)
          45  {
          46  if (fabs(vec[i] - v[i]) >= EPS)
          47  return false;
          48  //if (fabs(vec[0]-v(0)) >= EPS )
          49  // return false;
          50  }
          51  return true;
          52  }
          53  // get magnitude
          54  double getMag() const {
          55  double r = 0;
          56  for (int i=0; i<N; i++)
          57  r += vec[i]*vec[i];
          58  return sqrt(r);
          59  }
          60  // get the maximum value
          61  Real getMax() const {
          62  Real r = vec[0];
          63  for (int i=1; i<N; i++)
          64  r = std::max(r, vec[i]);
          65  return r;
          66  }
          67  // normalize vector
          68  void normalize() {
          69  double norm = getMag();
          70  if (norm!=0) (*this) *= (1/norm);
          71  }
          73  for (int i=0; i<N; i++)
          74  vec[i]+=x;
          75  return *this;
          76  }
          78  for (int i=0; i<N; i++)
          79  vec[i]*=x;
          80  return *this;
          81  }
          82 
          83  // make sure all component<=1.0
          84  void clamp()
          85  {
          86  for (int i = 0; i < this->getLen(); i++)
          87  if (vec[i]>1.0) vec[i] = 1.0;
          88  }
          89 
          90  void Zero()
          91  {
          92  for (int i = 0; i < this->getLen(); i++)
          93  vec[i] = 0.0;
          94  }
          95 };
          96 
          100 template <typename Real>
          101 class Vector<Real, 3> : public Tuple3<Real>
          102 {
          103  using Tuple<Real, 3>::vec;
          104 
          105 public:
          106  // constructor
          107  Vector() {}
          108  Vector(Real x, Real y, Real z) { set(x,y,z); }
          109  // assign Vector
          110  template<typename U> Vector(const Vector<U, 3>& v) { set(v.x(), v.y(), v.z()); }
          111 
          112  inline void set(Real x, Real y, Real z) { vec[0]=x; vec[1]=y; vec[2]=z; }
          113  inline Real x() const {return vec[0];}
          114  inline Real y() const {return vec[1];}
          115  inline Real z() const {return vec[2];}
          116 
          117  template<typename Real2>
          118  bool operator ==(const Vector<Real2, 3>& v) const {
          119  //return (fabs(vec[0]-v(0)) < EPS &&
          120  // fabs(vec[1]-v(1)) < EPS &&
          121  // fabs(vec[2]-v(2)) < EPS);
          122  return (fabs(vec[0] - v[0]) < EPS &&
          123  fabs(vec[1] - v[1]) < EPS &&
          124  fabs(vec[2] - v[2]) < EPS);
          125  }
          126  // get magnitude
          127  double getMag() const { return sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); }
          128  // get the maximum value
          129  Real getMax() const { return std::max(vec[0], std::max(vec[1], vec[2])); }
          130  // normalize vector
          131  void normalize() { double norm = getMag(); if (norm!=0) (*this) *= (1/norm); }
          132  Vector<Real, 3> operator+=(Real x) { vec[0]+=x; vec[1]+=x; vec[2]+=x; return *this; }
          133  Vector<Real, 3> operator*=(Real x) { vec[0]*=x; vec[1]*=x; vec[2]*=x; return *this; }
          134  Vector<Real, 3> operator+=(Vector<Real, 3> x) { vec[0]+=x[0]; vec[1]+=x[1]; vec[2]+=x[2]; return *this; }
          135  Vector<Real, 3> operator*=(Vector<Real, 3> x) { vec[0]*=x[0]; vec[1]*=x[1]; vec[2]*=x[2]; return *this; }
          136 
          137  void Zero() // make zero vector
          138  {
          139  vec[0] = vec[1] = vec[2] = 0.0;
          140  };
          141 };
          142 
          144 template <typename Real>
          145 class Vector<Real, 4> : public Tuple4<Real>
          146 {
          147  using Tuple<Real, 4>::vec;
          148 public :
          149  // constructor
          150  Vector() {}
          151  Vector(Real x, Real y, Real z, Real w) { set(x,y,z,w); }
          152  // assign Vector
          153  template<typename U> Vector(const Vector<U, 4>& v) { set(v.x(), v.y(), v.z(), v.w()); }
          154 
          155  inline void set(Real x, Real y, Real z, Real w) { vec[0]=x; vec[1]=y; vec[2]=z; vec[3]=w; }
          156  inline Real x() const {return vec[0];}
          157  inline Real y() const {return vec[1];}
          158  inline Real z() const {return vec[2];}
          159  inline Real w() const {return vec[3];}
          160 
          161  template <typename Real2>
          162  bool operator ==(const Vector<Real2, 4>& v) const {
          163  //return (fabs(vec[0]-v(0)) < EPS &&
          164  // fabs(vec[1]-v(1)) < EPS &&
          165  // fabs(vec[2]-v(2)) < EPS &&
          166  // fabs(vec[3]-v(3)) < EPS);
          167  return (fabs(vec[0] - v[0]) < EPS &&
          168  fabs(vec[1] - v[1]) < EPS &&
          169  fabs(vec[2] - v[2]) < EPS &&
          170  fabs(vec[3] - v[3]) < EPS);
          171  }
          172  // get magnitude
          173  double getMag() const { return sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2] + vec[3]*vec[3]); }
          174  // get the maximum value
          175  Real getMax() const { return std::max(vec[0], std::max(vec[1], std::max(vec[2], vec[3]))); }
          176  // normalize vector
          177  void normalize() { double norm = getMag(); if (norm!=0) (*this) *= (1/norm); }
          178  Vector<Real, 4> operator+=(Real x) { vec[0]+=x; vec[1]+=x; vec[2]+=x; vec[3]+=x; return *this; }
          179  Vector<Real, 4> operator*=(Real x) { vec[0]*=x; vec[1]*=x; vec[2]*=x; vec[3]+=x; return *this; }
          180  Vector<Real, 4> operator+=(Vector<Real, 4> x) { vec[0]+=x[0]; vec[1]+=x[1]; vec[2]+=x[2]; vec[3]+=x[3]; return *this; }
          181  Vector<Real, 4> operator*=(Vector<Real, 4> x) { vec[0]*=x[0]; vec[1]*=x[1]; vec[2]*=x[2]; vec[3]+=x[3]; return *this; }
          182 
          183  // make sure all component<=1.0
          184  void clamp()
          185  {
          186  for (int i = 0; i < this->getLen(); i++)
          187  if (vec[i]>1.0) vec[i] = 1.0;
          188  }
          189 
          190  void Zero() // make zero vector
          191  {
          192  vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
          193  };
          194 };
          195 
          196 template<typename Real> using Vector3 = Vector<Real, 3> ;
          197 template<typename Real> using Vector4 = Vector<Real, 4> ;
          198 
          199 //************************
          200 // VECTOR operations
          201 //************************
          202 template<typename Real> inline Real dot(const Vector3<Real> & v0, const Vector3<Real> & v1)
          203 // return dot product of v0 and v1
          204 { return( v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2]); }
          205 template<typename Real> inline Vector3<Real> cross(const Vector3<Real> & v0, const Vector3<Real> & v1)
          206 // return cross product of v0 and v1
          207 { return Vector3<Real>( v0[1]*v1[2] - v0[2]*v1[1],
          208  v0[2]*v1[0] - v0[0]*v1[2],
          209  v0[0]*v1[1] - v0[1]*v1[0] );
          210 }
          211 template<typename Real> inline Vector3<Real> operator +(const Vector3<Real> & v0, const Vector3<Real> & v1)
          212 // return v0 + v1
          213 { return(Vector3<Real> (v0[0] + v1[0], v0[1] + v1[1], v0[2] + v1[2])); }
          214 template<typename Real> inline Vector3<Real> operator -(const Vector3<Real> & v0, const Vector3<Real> & v1)
          215 // return v0 - v1
          216 { return(Vector3<Real>(v0[0] - v1[0], v0[1] - v1[1], v0[2] - v1[2])); }
          217 template<typename Real> inline Real operator *(Vector3<Real>& v0, Vector3<Real>& v1)
          218 // return v0*v1T
          219 { return (v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v0[2]); }
          220 template<typename Real> inline Vector3<Real> operator *(float x0, const Vector3<Real> & v0)
          221 // return x0*v0
          222 { return(Vector3<Real>(v0[0]*x0, v0[1]*x0, v0[2]*x0)); }
          223 template<typename Real> inline Vector3<Real> operator *(const Vector3<Real> & v0, float x0)
          224 // return v0*x0 (= x0*v0)
          225 { return(x0*v0); }
          226 
          227 template<typename Real>
          229 { Vector4<Real> temp(vec[0], vec[1], vec[2], 1.0); return temp;}
          230 
          232 template<typename Real> inline Real dot(const Vector4<Real> & v0, const Vector4<Real> & v1)
          233 // return dot product of v0 and v1
          234 { return( v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2] + v0[3]*v1[3]); }
          235 //template<typename Real> inline Vector4<Real> cross(const Vector4<Real> & v0, const Vector4<Real> & v1)
          236 template<typename Real> inline Vector4<Real> operator +(const Vector4<Real> & v0, const Vector4<Real> & v1)
          237 // return v0 + v1
          238 { return(Vector4<Real> (v0[0] + v1[0], v0[1] + v1[1], v0[2] + v1[2], v0[3] + v1[3])); }
          239 template<typename Real> inline Vector4<Real> operator -(const Vector4<Real> & v0, const Vector4<Real> & v1)
          240 // return v0 - v1
          241 { return(Vector4<Real>(v0[0] - v1[0], v0[1] - v1[1], v0[2] - v1[2], v0[3] - v1[3])); }
          242 template<typename Real> inline Real operator *(Vector4<Real>& v0, Vector4<Real>& v1)
          243 // return v0*v1T
          244 { return (v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v0[2] + v0[3] * v1[3]); }
          245 template<typename Real> inline Vector4<Real> operator *(float x0, const Vector4<Real> & v0)
          246 // return x0*v0
          247 { return(Vector4<Real>(x0*v0[0], x0*v0[1], x0*v0[2], x0*v0[3])); }
          248 template<typename Real> inline Vector4<Real> operator *(const Vector4<Real> & v0, float x0)
          249 // return v0*x0 (= x0*v0)
          250 { return(x0*v0); }
          251 
          252 // backward compatibility
          255 
          256 
          259 // 3d matrix
          261 class MATRIX3
          262 {
          263 private :
          264  VECTOR3 mat[3]; // a vector represents each matrix row
          265 
          266 public :
          267 
          268  MATRIX3() // constructor
          269  { Identity(); };
          270  MATRIX3(const VECTOR3 & v0, const VECTOR3 & v1, const VECTOR3 & v2)
          271  { mat[0] = v0; mat[1] = v1; mat[2] = v2; }; // constructor
          272  int Dimension() const
          273  { return 3; };
          274  VECTOR3 & operator [](const int i) // index row i
          275  { return(mat[i]); };
          276  // Note: reference row i, column j of MATRIX3 m0 as m0[i][j] (not m0[i,j])
          277  VECTOR3 operator()(const int i) const // return row i
          278  { return(mat[i]); };
          279  float operator ()(const int i, const int j) const
          280  { return(mat[i][j]); }; // return element (i,j)
          281  MATRIX3 & operator =(const MATRIX3 & m0) // copy matrix m0
          282  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2); return(*this); };
          283 
          284  void Identity(); // set to identity
          285  float det(); // determinant of the matrix
          286  int inverse( MATRIX3& m) ;//added by lijie to handle curvilinear grid
          287  MATRIX3 transpose();//added by lijie to handle curvilinear grid
          288 };
          289 
          290 //currently only uncomment this one, with others commented below
          291 VECTOR3 operator *(const MATRIX3 & m0, const VECTOR3 & v0); // return m0 * v0
          292 
          293 #if 0
          294 // 4d matrix
          297 class MATRIX4
          298 {
          299 
          300 private :
          301  Vector4 mat[4]; // a vector represents each matrix row
          302 
          303 public :
          304 
          305  MATRIX4() // constructor
          306  { Identity(); };
          307  MATRIX4(const Vector4 & v0, const Vector4 & v1,
          308  const Vector4 & v2, const Vector4 & v3) // constructor
          309  { mat[0] = v0; mat[1] = v1; mat[2] = v2; mat[3] = v3; };
          310  int Dimension() const
          311  { return 4; };
          312  Vector4 & operator [](int i) // index row i
          313  { return(mat[i]); };
          314  // Note: reference row i, column j of MATRIX4 m0 as m0[i][j] (not m0[i,j])
          315  Vector4 operator()(const int i) const // return row i
          316  { return(mat[i]); };
          317  float operator ()(const int i, const int j) const
          318  { return(mat[i](j)); }; // return element (i,j)
          319  MATRIX4 & operator =(const MATRIX4 & m0) // copy matrix m0
          320  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2); mat[3] = m0(3);
          321  return(*this); };
          322  MATRIX4 & operator =(const MATRIX3 & m0) // copy matrix m0
          323  { mat[0] = m0(0); mat[1] = m0(1); mat[2] = m0(2);
          324  Vector4 temp(0.0,0.0,0.0,1.0);
          325  mat[3] = temp;
          326  return(*this); };
          327  void Identity(); // set to identity
          328 };
          329 
          330 //************************
          331 // VECTOR2 operations
          332 //************************
          333 
          334 inline VECTOR2 operator +(const VECTOR2 & v0, const VECTOR2 & v1)
          335 // return v0 + v1
          336 { return(VECTOR2(v0(0) + v1(0), v0(1) + v1(1))); };
          337 
          338 inline VECTOR2 operator -(const VECTOR2 & v0, const VECTOR2 & v1)
          339 // return v0 - v1
          340 { return(VECTOR2(v0(0) - v1(0), v0(1) - v1(1))); };
          341 
          342 inline VECTOR2 operator *(float x0, const VECTOR2 & v0)
          343 // return x0*v0
          344 { return(VECTOR2(x0*v0(0), x0*v0(1))); };
          345 
          346 inline VECTOR2 operator *(const VECTOR2 & v0, float x0)
          347 // return v0*x0 (= x0*v0)
          348 { return(x0*v0); };
          349 
          350 
          351 //************************
          352 // Vector3 operations
          353 //************************
          354 
          355 inline float dot(const Vector3 & v0, const Vector3 & v1)
          356 // return dot product of v0 and v1
          357 { return(v0(0)*v1(0) + v0(1)*v1(1) + v0(2)*v1(2)); };
          358 
          359 inline Vector3 cross(const Vector3 & v0, const Vector3 & v1)
          360 // return cross product of v0 and v1
          361 { return(Vector3(v0(1)*v1(2) - v0(2)*v1(1),
          362  v0(2)*v1(0) - v0(0)*v1(2),
          363  v0(0)*v1(1) - v0(1)*v1(0))); };
          364 
          365 inline Vector3 operator +(const Vector3 & v0, const Vector3 & v1)
          366 // return v0 + v1
          367 { return(Vector3(v0(0) + v1(0), v0(1) + v1(1), v0(2) + v1(2))); };
          368 
          369 inline Vector3 operator -(const Vector3 & v0, const Vector3 & v1)
          370 // return v0 - v1
          371 { return(Vector3(v0(0) - v1(0), v0(1) - v1(1), v0(2) - v1(2))); };
          372 
          373 inline float operator *(Vector3& v0, Vector3& v1)
          374 // return v0*v1T
          375 { return (v0(0) * v1(0) + v0(1) * v1(1) + v0(2) * v0(2)); };
          376 
          377 inline Vector3 operator *(float x0, const Vector3 & v0)
          378 // return x0*v0
          379 { return(Vector3(x0*v0(0), x0*v0(1), x0*v0(2))); };
          380 
          381 inline Vector3 operator *(const Vector3 & v0, float x0)
          382 // return v0*x0 (= x0*v0)
          383 { return(x0*v0); };
          384 
          386 { Vector4 temp(vec[0], vec[1], vec[2], 1.0); return temp;};
          387 
          388 //************************
          389 // Vector4 operations
          390 //************************
          391 
          392 inline float dot(const Vector4 & v0, const Vector4 & v1)
          393 // return dot product of v0 and v1
          394 { return(v0(0)*v1(0) + v0(1)*v1(1) + v0(2)*v1(2) + v0(3)*v1(3)); };
          395 
          396 inline Vector4 operator +(const Vector4 & v0, const Vector4 & v1)
          397 // return v0 + v1
          398 { return(Vector4(v0(0)+v1(0), v0(1)+v1(1), v0(2)+v1(2), v0(3)+v1(3))); };
          399 
          400 inline Vector4 operator -(const Vector4 & v0, const Vector4 & v1)
          401 // return v0 - v1
          402 { return(Vector4(v0(0)-v1(0), v0(1)-v1(1), v0(2)-v1(2), v0(3)-v1(3))); };
          403 
          404 inline Vector4 operator *(float x0, const Vector4 & v0)
          405 // return x0*v0
          406 { return(Vector4(x0*v0(0), x0*v0(1), x0*v0(2), x0*v0(3))); };
          407 
          408 inline Vector4 operator *(const Vector4 & v0, float x0)
          409 // return v0*x0 (= x0*v0)
          410 { return(x0*v0); };
          411 
          412 //************************
          413 // MATRIX3 operations
          414 //************************
          415 
          416 MATRIX3 operator +(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 + m1
          417 MATRIX3 operator -(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 - m1
          418 MATRIX3 operator *(const MATRIX3 & m0, const MATRIX3 & m1); // return m0 * m1
          419 MATRIX3 operator *(const float x0, const MATRIX3 & m0); // return x0 * m0
          420 MATRIX3 operator *(const MATRIX3 & m0, const float x0); // return m0 * x0
          421 Vector3 operator *(const Vector3 & v0, const MATRIX3 & m0); // return v0 * m0
          422 
          423 //************************
          424 // MATRIX4 operations
          425 //************************
          426 
          427 MATRIX4 operator +(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 + m1
          428 MATRIX4 operator -(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 - m1
          429 MATRIX4 operator *(const MATRIX4 & m0, const MATRIX4 & m1); // return m0 * m1
          430 MATRIX4 operator *(const float x0, const MATRIX4 & m0); // return x0 * m0
          431 MATRIX4 operator *(const MATRIX4 & m0, const float x0); // return m0 * x0
          432 Vector4 operator *(const MATRIX4 & m0, const Vector4 & v0); // return m0 * v0
          433 Vector4 operator *(const Vector4 & v0, const MATRIX4 & m0); // return v0 * m0
          434 Vector3 operator *(const MATRIX4 & m0, const Vector3 & v0); // return m0 * v0
          435 Vector3 operator *(const Vector3 & v0, const MATRIX4 & m0); // return v0 * m0
          436 
          437 
          438 MATRIX4 inverse(const MATRIX4 & m); // return inverse of m; return 0 matrix if
          439 // m is singular
          440 MATRIX4 rotate_matrix(int type, float angle); // type: 1:x, 2:y, 3:z
          441 MATRIX4 translate_matrix(float dx, float dy, float dz);
          442 MATRIX4 scale_matrix(float sx, float sy, float sz);
          443 
          444 #endif
          445 
          446 } // namespace edda
          447 
          448 #endif
          void normalize()
          Definition: vector_matrix.h:177
          +
          void clamp()
          Definition: vector_matrix.h:84
          +
          double getMag() const
          Definition: vector_matrix.h:54
          +
          void Zero()
          Definition: vector_matrix.h:190
          +
          Real x() const
          Definition: vector_matrix.h:113
          +
          Real getMax() const
          Definition: vector_matrix.h:129
          +
          Vector(Real x, Real y, Real z, Real w)
          Definition: vector_matrix.h:151
          +
          Experimental functionality.
          Definition: distributionModeler.h:26
          +
          Vector(const Vector< U, 4 > &v)
          Definition: vector_matrix.h:153
          +
          Vector< Real, 3 > Vector3
          Definition: vector_matrix.h:196
          +
          Vector< Real, 4 > operator*=(Vector< Real, 4 > x)
          Definition: vector_matrix.h:181
          Definition: tuple.h:101
          -
          void set(Real x, Real y, Real z)
          Definition: vector_matrix.h:103
          -
          Specialization of Vector3 for higher performance.
          Definition: vector_matrix.h:92
          -
          Real operator*(Vector3< Real > &v0, Vector3< Real > &v1)
          Definition: vector_matrix.h:191
          -
          void normalize()
          Definition: vector_matrix.h:119
          -
          double getMag() const
          Definition: vector_matrix.h:115
          -
          Vector3< Real > operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:185
          -
          Real x() const
          Definition: vector_matrix.h:104
          -
          Vector3< Real > operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:188
          -
          Vector3< Real > cross(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:179
          +
          Real getMax() const
          Definition: vector_matrix.h:61
          +
          Specialization of Vector3 for higher performance.
          Definition: vector_matrix.h:101
          +
          void normalize()
          Definition: vector_matrix.h:131
          +
          MATRIX3(const VECTOR3 &v0, const VECTOR3 &v1, const VECTOR3 &v2)
          Definition: vector_matrix.h:270
          +
          void Zero()
          Definition: vector_matrix.h:137
          +
          Vector3< Real > operator+(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:211
          +
          double getMag() const
          Definition: vector_matrix.h:173
          +
          Vector3< Real > operator-(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:214
          +
          VECTOR3 operator()(const int i) const
          Definition: vector_matrix.h:277
          +
          Vector3< Real > cross(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:205
          +
          Real z() const
          Definition: vector_matrix.h:158
          Definition: tuple.h:106
          -
          Vector< Real, 4 > operator+=(Real x)
          Definition: vector_matrix.h:157
          -
          Vector4< float > VECTOR4
          Definition: vector_matrix.h:228
          -
          Vector< Real, 3 > operator+=(Real x)
          Definition: vector_matrix.h:120
          -
          Specialization of Vector4 for higher performance.
          Definition: vector_matrix.h:128
          -
          Vector(Real x, Real y, Real z)
          Definition: vector_matrix.h:99
          -
          const double EPS
          Definition: common.h:22
          -
          void clamp()
          Definition: vector_matrix.h:163
          -
          double getMag() const
          Definition: vector_matrix.h:152
          -
          Vector()
          Definition: vector_matrix.h:98
          -
          Vector(const Vector< U, 3 > &v)
          Definition: vector_matrix.h:101
          -
          Real z() const
          Definition: vector_matrix.h:106
          -
          Vector< Real, 3 > operator*=(Real x)
          Definition: vector_matrix.h:121
          -
          Vector4< Real > get_Vector4(Vector3< Real > vec)
          Definition: vector_matrix.h:202
          -
          void normalize()
          Definition: vector_matrix.h:65
          -
          Real getMax() const
          Definition: vector_matrix.h:154
          -
          Real w() const
          Definition: vector_matrix.h:142
          +
          VECTOR3 operator*(const MATRIX3 &m0, const VECTOR3 &v0)
          Definition: vector_matrix.cpp:82
          +
          Vector< Real, 4 > operator+=(Real x)
          Definition: vector_matrix.h:178
          +
          double getMag() const
          Definition: vector_matrix.h:127
          +
          Vector4< float > VECTOR4
          Definition: vector_matrix.h:254
          +
          int Dimension() const
          Definition: vector_matrix.h:272
          +
          Vector< Real, 3 > operator+=(Real x)
          Definition: vector_matrix.h:132
          +
          bool operator==(const Vector< Real2, N > &v) const
          Definition: vector_matrix.h:43
          +
          Specialization of Vector4 for higher performance.
          Definition: vector_matrix.h:145
          +
          Real x() const
          Definition: vector_matrix.h:156
          +
          void Zero()
          Definition: vector_matrix.h:90
          +
          Vector(Real x, Real y, Real z)
          Definition: vector_matrix.h:108
          +
          Real y() const
          Definition: vector_matrix.h:157
          +
          Real w() const
          Definition: vector_matrix.h:159
          +
          const double EPS
          Definition: common.h:24
          +
          void clamp()
          Definition: vector_matrix.h:184
          +
          Vector()
          Definition: vector_matrix.h:107
          +
          Vector(const Vector< U, 3 > &v)
          Definition: vector_matrix.h:110
          +
          Real y() const
          Definition: vector_matrix.h:114
          +
          Vector< Real, 3 > operator*=(Real x)
          Definition: vector_matrix.h:133
          +
          Vector4< Real > get_Vector4(Vector3< Real > vec)
          Definition: vector_matrix.h:228
          +
          void normalize()
          Definition: vector_matrix.h:68
          +
          Real getMax() const
          Definition: vector_matrix.h:175
          Definition: tuple.h:18
          +
          MATRIX3()
          Definition: vector_matrix.h:268
          +
          Definition: vector_matrix.h:261
          Real vec[N]
          Definition: tuple.h:21
          -
          Vector< Real, N > operator*=(double x)
          Definition: vector_matrix.h:74
          +
          Vector< Real, N > operator*=(double x)
          Definition: vector_matrix.h:77
          -
          Vectors are Tuples that have geometry concepts.
          Definition: vector_matrix.h:26
          -
          Vector< Real, 4 > Vector4
          Definition: vector_matrix.h:171
          -
          Vector< Real, N > operator+=(double x)
          Definition: vector_matrix.h:69
          -
          Real getMax() const
          Definition: vector_matrix.h:117
          -
          Real dot(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:176
          -
          float Real
          Definition: common.h:26
          -
          Vector< Real, 4 > operator*=(Real x)
          Definition: vector_matrix.h:158
          -
          Vector()
          Definition: vector_matrix.h:31
          -
          Vector()
          Definition: vector_matrix.h:133
          -
          Real z() const
          Definition: vector_matrix.h:141
          -
          Vector(const Vector< U, N > &v)
          Definition: vector_matrix.h:35
          -
          Vector3< float > VECTOR3
          Definition: vector_matrix.h:227
          -
          double getMag() const
          Definition: vector_matrix.h:51
          -
          Vector< Real, 3 > operator+=(Vector< Real, 3 > x)
          Definition: vector_matrix.h:122
          -
          Vector< Real, 4 > operator+=(Vector< Real, 4 > x)
          Definition: vector_matrix.h:159
          -
          Vector< Real, 3 > operator*=(Vector< Real, 3 > x)
          Definition: vector_matrix.h:123
          +
          Vectors are Tuples that have geometry concepts.
          Definition: vector_matrix.h:27
          +
          Vector< Real, 4 > Vector4
          Definition: vector_matrix.h:197
          +
          Vector< Real, N > operator+=(double x)
          Definition: vector_matrix.h:72
          +
          Real z() const
          Definition: vector_matrix.h:115
          +
          Real dot(const Vector3< Real > &v0, const Vector3< Real > &v1)
          Definition: vector_matrix.h:202
          +
          __host__ __device__ Real & operator[](int i)
          Definition: tuple.h:69
          +
          float Real
          Definition: common.h:28
          +
          Vector< Real, 4 > operator*=(Real x)
          Definition: vector_matrix.h:179
          +
          Vector()
          Definition: vector_matrix.h:32
          +
          Vector()
          Definition: vector_matrix.h:150
          +
          Vector(const Vector< U, N > &v)
          Definition: vector_matrix.h:36
          +
          Vector3< float > VECTOR3
          Definition: vector_matrix.h:253
          +
          Vector< Real, 3 > operator+=(Vector< Real, 3 > x)
          Definition: vector_matrix.h:134
          +
          Vector< Real, 4 > operator+=(Vector< Real, 4 > x)
          Definition: vector_matrix.h:180
          +
          Vector< Real, 3 > operator*=(Vector< Real, 3 > x)
          Definition: vector_matrix.h:135
          diff --git a/html/vtkCompositeUncertainIsocontour_8cpp.html b/html/vtkCompositeUncertainIsocontour_8cpp.html index 7f0561c..e62e45b 100644 --- a/html/vtkCompositeUncertainIsocontour_8cpp.html +++ b/html/vtkCompositeUncertainIsocontour_8cpp.html @@ -38,7 +38,6 @@
          + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
          @@ -131,7 +130,7 @@

          Function Documentation

          diff --git a/html/vtkCompositeUncertainIsocontour_8h.html b/html/vtkCompositeUncertainIsocontour_8h.html index 2925091..97726cf 100644 --- a/html/vtkCompositeUncertainIsocontour_8h.html +++ b/html/vtkCompositeUncertainIsocontour_8h.html @@ -38,7 +38,6 @@
          • Main Page
          • Related Pages
          • -
          • Modules
          • Namespaces
          • Classes
          • Files
          • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
            @@ -105,7 +104,7 @@
            diff --git a/html/vtkCompositeUncertainIsocontour_8h_source.html b/html/vtkCompositeUncertainIsocontour_8h_source.html index 15d89ed..599f5e0 100644 --- a/html/vtkCompositeUncertainIsocontour_8h_source.html +++ b/html/vtkCompositeUncertainIsocontour_8h_source.html @@ -38,7 +38,6 @@
            • Main Page
            • Related Pages
            • -
            • Modules
            • Namespaces
            • Classes
            • Files
            • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
              @@ -199,7 +198,7 @@
              diff --git a/html/vtkEddaReader_8cpp.html b/html/vtkEddaReader_8cpp.html index 92593cc..a014d70 100644 --- a/html/vtkEddaReader_8cpp.html +++ b/html/vtkEddaReader_8cpp.html @@ -38,7 +38,6 @@
              • Main Page
              • Related Pages
              • -
              • Modules
              • Namespaces
              • Classes
              • Files
              • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
                @@ -130,7 +129,7 @@

                Function Documentation

                diff --git a/html/vtkEddaReader_8h.html b/html/vtkEddaReader_8h.html index d184d7b..53cb759 100644 --- a/html/vtkEddaReader_8h.html +++ b/html/vtkEddaReader_8h.html @@ -38,7 +38,6 @@
                • Main Page
                • Related Pages
                • -
                • Modules
                • Namespaces
                • Classes
                • Files
                • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
                  @@ -113,7 +112,7 @@
                  diff --git a/html/vtkEddaReader_8h_source.html b/html/vtkEddaReader_8h_source.html index 85e2b6a..fd5cd87 100644 --- a/html/vtkEddaReader_8h_source.html +++ b/html/vtkEddaReader_8h_source.html @@ -38,7 +38,6 @@
                  • Main Page
                  • Related Pages
                  • -
                  • Modules
                  • Namespaces
                  • Classes
                  • Files
                  • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
                    @@ -167,7 +166,7 @@
                    diff --git a/html/vtkRandomSampleField_8cpp.html b/html/vtkRandomSampleField_8cpp.html deleted file mode 100644 index 624610b..0000000 --- a/html/vtkRandomSampleField_8cpp.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -EDDA: src/vtk/vtkRandomSampleField.cpp File Reference - - - - - - - - - -
                    -
                    - - - - - - -
                    -
                    EDDA -
                    -
                    -
                    - - - - - - - - - -
                    - -
                    - - -
                    -
                    - -
                    -
                    vtkRandomSampleField.cpp File Reference
                    -
                    -
                    -
                    #include <iostream>
                    -#include "vtkRandomSampleField.h"
                    -#include "common.h"
                    -#include "vtk_common.h"
                    -#include "vtkInformation.h"
                    -#include "vtkInformationVector.h"
                    -#include "vtkObjectFactory.h"
                    -#include "vtkStreamingDemandDrivenPipeline.h"
                    -#include "gmm_vtk_data_array.h"
                    -#include "thrust/device_vector.h"
                    -
                    - - - -

                    -Functions

                     vtkStandardNewMacro (vtkRandomSampleField)
                     
                    -

                    Function Documentation

                    - -
                    -
                    - - - - - - - - -
                    vtkStandardNewMacro (vtkRandomSampleField )
                    -
                    - -
                    -
                    -
                    - - - - diff --git a/html/vtkRandomSampleField_8h.html b/html/vtkRandomSampleField_8h.html deleted file mode 100644 index 50f11ab..0000000 --- a/html/vtkRandomSampleField_8h.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -EDDA: src/vtk/vtkRandomSampleField.h File Reference - - - - - - - - - -
                    -
                    - - - - - - -
                    -
                    EDDA -
                    -
                    -
                    - - - - - - - - - -
                    - -
                    - - -
                    -
                    - -
                    -
                    vtkRandomSampleField.h File Reference
                    -
                    -
                    -
                    #include <string>
                    -#include "vtkFiltersCoreModule.h"
                    -#include "vtkDataSetAlgorithm.h"
                    -#include "vtkDataSetAttributes.h"
                    -#include "gmm_vtk_data_array.h"
                    -
                    -

                    Go to the source code of this file.

                    - - - - -

                    -Classes

                    class  vtkRandomSampleField
                     
                    -
                    - - - - diff --git a/html/vtkRandomSampleField_8h_source.html b/html/vtkRandomSampleField_8h_source.html deleted file mode 100644 index 10fd41e..0000000 --- a/html/vtkRandomSampleField_8h_source.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -EDDA: src/vtk/vtkRandomSampleField.h Source File - - - - - - - - - -
                    -
                    - - - - - - -
                    -
                    EDDA -
                    -
                    -
                    - - - - - - - - - -
                    - -
                    - - -
                    -
                    -
                    -
                    vtkRandomSampleField.h
                    -
                    -
                    -Go to the documentation of this file.
                    1 #ifndef VTK_RANDOM_SAMPLE_FIELD_H
                    -
                    2 #define VTK_RANDOM_SAMPLE_FIELD_H
                    -
                    3 
                    -
                    4 #include <string>
                    -
                    5 #include "vtkFiltersCoreModule.h" // For export macro
                    -
                    6 #include "vtkDataSetAlgorithm.h"
                    -
                    7 #include "vtkDataSetAttributes.h" // needed for vtkDataSetAttributes::FieldList
                    -
                    8 
                    -
                    9 #include "gmm_vtk_data_array.h"
                    -
                    10 
                    -
                    11 class vtkIdTypeArray;
                    -
                    12 class vtkCharArray;
                    -
                    13 class vtkMaskPoints;
                    -
                    14 
                    -
                    15 class VTKFILTERSCORE_EXPORT vtkRandomSampleField : public vtkDataSetAlgorithm
                    -
                    16 {
                    -
                    17 public:
                    -
                    18  static vtkRandomSampleField *New();
                    -
                    19  vtkTypeMacro(vtkRandomSampleField,vtkDataSetAlgorithm);
                    -
                    20  void PrintSelf(ostream& os, vtkIndent indent);
                    -
                    21 
                    -
                    22 protected:
                    -
                    23  double Isov;
                    -
                    24  std::string ResultName;
                    -
                    25  std::string Prefix;
                    -
                    26 
                    - - -
                    29 
                    -
                    30  virtual int RequestData(vtkInformation *, vtkInformationVector **,
                    -
                    31  vtkInformationVector *);
                    -
                    32  virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
                    -
                    33  vtkInformationVector *);
                    -
                    34  virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
                    -
                    35  vtkInformationVector *);
                    -
                    36 
                    -
                    37  // non-vtk functions
                    -
                    38  virtual void InitializeData(vtkDataSet* input,
                    -
                    39  vtkDataSet* output);
                    -
                    40  virtual void SampleDataArray(std::shared_ptr<edda::GmmVtkDataArray> dataArray, vtkSmartPointer<vtkFieldData> output);
                    -
                    41 
                    -
                    42 private:
                    -
                    43  vtkRandomSampleField(const vtkRandomSampleField&); // Not implemented.
                    -
                    44  void operator=(const vtkRandomSampleField&); // Not implemented.
                    -
                    45 
                    -
                    46 };
                    -
                    47 
                    -
                    48 #endif // VTK_RANDOM_SAMPLE_FIELD_H
                    -
                    double Isov
                    Definition: vtkRandomSampleField.h:23
                    - -
                    std::string Prefix
                    Definition: vtkRandomSampleField.h:25
                    -
                    Definition: vtkRandomSampleField.h:15
                    -
                    std::string ResultName
                    Definition: vtkRandomSampleField.h:24
                    -
                    - - - - diff --git a/html/vtkSamplingArray_8cpp.html b/html/vtkSamplingArray_8cpp.html index b0aed2d..92888b3 100644 --- a/html/vtkSamplingArray_8cpp.html +++ b/html/vtkSamplingArray_8cpp.html @@ -38,7 +38,6 @@
                    • Main Page
                    • Related Pages
                    • -
                    • Modules
                    • Namespaces
                    • Classes
                    • Files
                    • @@ -71,7 +70,7 @@ onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> - All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages + All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
                      @@ -120,7 +119,7 @@

                      Function Documentation

                      diff --git a/html/vtkSamplingArray_8h.html b/html/vtkSamplingArray_8h.html index 0294080..e53d449 100644 --- a/html/vtkSamplingArray_8h.html +++ b/html/vtkSamplingArray_8h.html @@ -38,7 +38,6 @@
                      @@ -90,27 +66,12 @@
                      vtk_common.h
                      -Go to the documentation of this file.
                      1 #ifndef VTK_COMMON_H
                      -
                      2 #define VTK_COMMON_H
                      -
                      3 
                      -
                      4 #include <vtkImageData.h>
                      -
                      5 #include <vtkSmartPointer.h>
                      -
                      6 #include <vtkDataArray.h>
                      -
                      7 #include <vtkFloatArray.h>
                      -
                      8 #include <vtkPointData.h>
                      -
                      9 #include <vtkCellData.h>
                      -
                      10 #include <vtkFieldData.h>
                      -
                      11 #include <vtkStructuredGrid.h>
                      -
                      12 
                      -
                      13 #define vsp_new(T,x) vtkSmartPointer<T> x = vtkSmartPointer<T>::New()
                      -
                      14 
                      -
                      15 #endif
                      -
                      +Go to the documentation of this file.
                      1 #ifndef VTK_COMMON_H
                      2 #define VTK_COMMON_H
                      3 
                      4 #include <vtkImageData.h>
                      5 #include <vtkSmartPointer.h>
                      6 #include <vtkDataArray.h>
                      7 #include <vtkFloatArray.h>
                      8 #include <vtkPointData.h>
                      9 #include <vtkCellData.h>
                      10 #include <vtkFieldData.h>
                      11 #include <vtkStructuredGrid.h>
                      12 
                      13 #define vsp_new(T,x) vtkSmartPointer<T> x = vtkSmartPointer<T>::New()
                      14 
                      15 #endif
                      diff --git a/pyEdda/CMakeLists.txt b/pyEdda/CMakeLists.txt new file mode 100644 index 0000000..73455ab --- /dev/null +++ b/pyEdda/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 2.8.12) +project(pyEdda) + +include_directories(${CMAKE_SOURCE_DIR}/src) + + + +add_subdirectory(pybind11) + +pybind11_add_module(pyedda pyEdda.cpp) + +target_link_libraries(pyedda PRIVATE edda) #needed when using Visual Studio diff --git a/pyEdda/README.md b/pyEdda/README.md new file mode 100644 index 0000000..c4e2124 --- /dev/null +++ b/pyEdda/README.md @@ -0,0 +1,24 @@ +# pyedda +Extreme-scale Distribution-based Data Analysis Library bindings for python + +Note: + +1. uses pybind11 to generate python bindings + +2. library generated in ../lib/ + +3. use `--recursive` option while cloning to clone pybind11 project as well. for e.g: + +```bash +git clone --recursive https://github.com/GRAVITYLab/edda.git +``` + +4. if `--recursive` is not used manually clone pybind11 project to the path `pyEdda/pybind11` + + +## pybind11 resources +Github +https://github.com/pybind/pybind11 + +Tutorial +http://pybind11.readthedocs.io/en/master/ diff --git a/pyEdda/pyEdda.cpp b/pyEdda/pyEdda.cpp new file mode 100644 index 0000000..de097ea --- /dev/null +++ b/pyEdda/pyEdda.cpp @@ -0,0 +1,105 @@ +#include +#include +#include "py_distribution_modeler.h" +#include "py_histogram.h" +#include "py_gaussian.h" +#include "py_gmm.h" +#include "py_joint_histogram.h" +#include "py_joint_gaussian.h" + +using namespace std; + + +namespace py = pybind11; + + +PYBIND11_MODULE(pyedda, m) { + py::class_(m, "DistributionModeler") + .def(py::init()) + .def("computeGMM", &PyDistributionModeler::computeGMM) + .def("computeHistogram", &PyDistributionModeler::computeHistogram) + .def("printDistr", &PyDistributionModeler::printDistr) + .def("getDistr", &PyDistributionModeler::getDistr) + .def("unit_test1", []() {}); + + //Univariate Histogram + py::class_(m, "Histogram") + .def(py::init()) + .def(py::init, const int>()) + .def(py::init, const int, const Real, const Real >()) + .def("getMean", &PyHistogram::getMean) + .def("getVar", &PyHistogram::getVar) + .def("getPdf", &PyHistogram::getPdf) + .def("getCdf", &PyHistogram::getCdf) + .def("getSample", &PyHistogram::getSample) + .def("output", &PyHistogram::output) + .def("getBins", &PyHistogram::getBins) + .def("getMaxValue", &PyHistogram::getMaxValue) + .def("getMinValue", &PyHistogram::getMinValue) + .def("getBinValue", &PyHistogram::getBinValue); + + //Univariate Gaussian + py::class_(m, "Gaussian") + .def(py::init<>()) + .def(py::init()) + .def("getMean", &PyGaussian::getGaussianMean) + .def("getVar", &PyGaussian::getGaussianVar) + .def("getPdf", &PyGaussian::getGaussianPdf) + .def("getSample", &PyGaussian::getGaussianSample) + .def("getCdf", &PyGaussian::getGaussianCdf) + .def("getCdfPrecise", &PyGaussian::getGaussianCdfPrecise) + .def("output", &PyGaussian::output); + + //Univariate GMM + py::class_(m, "GMM") + .def(py::init<>()) + .def(py::init()) + .def(py::init>()) + .def(py::init, int>()) + .def("assign", &PyGMM::assign) + .def("getNumComponents", &PyGMM::getNumComponents) + .def("normalizeWeights", &PyGMM::normalizeWeights) + .def("getMean", &PyGMM::getGMMMean) + .def("getVar", &PyGMM::getGMMVar) + .def("getPdf", &PyGMM::getGMMPdf) + .def("getSample", &PyGMM::getGMMSample) + .def("getCdf", &PyGMM::getGMMCdf) + .def("output", &PyGMM::output); + + + //JointHistogram + py::class_(m, "JointHistogram") + .def(py::init()) + .def(py::init, int, py::array_t, py::array_t, py::array_t>()) + .def("setMinVals", &PyJointHistogram::setMinVals) + .def("getMinVals", &PyJointHistogram::getMinVals) + .def("setMaxVals", &PyJointHistogram::setMaxVals) + .def("getMaxVals", &PyJointHistogram::getMaxVals) + .def("setBinWidths", &PyJointHistogram::setBinWidths) + .def("getBinWidths", &PyJointHistogram::getBinWidths) + .def("setNumBins", &PyJointHistogram::setNumBins) + .def("setNumVars", &PyJointHistogram::setNumVars) + .def("getNumBins", &PyJointHistogram::getNumBins) + .def("getNumVars", &PyJointHistogram::getNumVars) + .def("getJointMean", &PyJointHistogram::getJointMean) + .def("getJointSample", &PyJointHistogram::getJointSample); + + // C-like functions for JointHistogram + m.def("getJointMean", &getJointMean_py); + m.def("marginalization", &marginalization, py::return_value_policy::reference); + m.def("conditionalHist", &conditionalHist, py::return_value_policy::reference); + + + //JointGaussian + py::class_(m, "JointGaussian") + .def(py::init()) + .def(py::init, py::array_t>()) + .def("getMean", &PyJointGaussian::getMean) + .def("getJointSample", &PyJointGaussian::getJointSample) + .def("getJointPdf", &PyJointGaussian::getJointPdf); + + // C-like functions for JointGaussian + m.def("getJointMean_Gaussian", &getJointMean_Gaussian); // TODO: need to find a way for function overloading in pybind11 + m.def("getJointSample_Gaussian", &getJointSample_Gaussian); // TODO: need to find a way for function overloading in pybind11 + m.def("getJointPdf_Gaussian", &getJointPdf_Gaussian); // TODO: need to find a way for function overloading in pybind11 +} diff --git a/pyEdda/py_distribution_modeler.h b/pyEdda/py_distribution_modeler.h new file mode 100644 index 0000000..d9faa4c --- /dev/null +++ b/pyEdda/py_distribution_modeler.h @@ -0,0 +1,156 @@ +#include +#include +#include +#include +#include + +#include +#include +#include "distributions/distribution_modeler.h" + + +using namespace std; +using namespace edda; + + +namespace py = pybind11; + + +class PyDistributionModeler { +protected: + DistributionModeler* dm; + size_t len; +public: + /// \brief Constructor with specified length + PyDistributionModeler(int l){ + len = l; + dm = new DistributionModeler(l); + } + void computeGMM(py::array_t data, size_t nGmm, size_t index){ + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions must be one"); + + int size = info.shape[0]; + + + dm->computeGMM(ptr, size, nGmm, index); + + } + void computeHistogram(py::array_t data, int binCount, size_t index ){ + + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions must be one"); + + int size = info.shape[0]; + + + + dm->computeHistogram(ptr, size, index, binCount); + + } + void printDistr(){ + DistrArray * darray = dm->getDistrArray(); + for(int i=0; igetDistr(i) << endl << endl; + } + } + auto getDistr(int index){ + DistrArray * darray = dm->getDistrArray(); + dist::Variant curDist = darray->getDistr(index); + string s = getName(curDist); + + if (s.compare(0, 15, "GaussianMixture") == 0) { + // Only compare the first 15 chars because this string ends with the number of Gaussian models + // distr type. 1: GaussianMixture. 2: Histogram + // if GaussianMixture: + int distrTypeNumber = 1; + + // number of gaussian components + int GMs = stoi(s.substr(15)); + + py::array_t rv1(GMs); + auto r1 = rv1.mutable_unchecked<1>(); + + py::array_t rv2(GMs); + auto r2 = rv2.mutable_unchecked<1>(); + + py::array_t rv3(GMs); + auto r3 = rv3.mutable_unchecked<1>(); + + // GMM parameters + std::vector gmmtv = boost::get(curDist).models; + int c1=0,c2=0,c3=0; + for (int i = 0; i < GMs * 3; i++){ + if (i % 3 == 0) + { + r1[c1] = gmmtv[i / 3].m; + c1++; + } + else if (i % 3 == 1) + { + r2[c2] = gmmtv[i / 3].v; + c2++; + } + else + { + r3[c3] = gmmtv[i / 3].w; + c3++; + } + } + + //return multiple values in python call by returning a tuple in c++ side + return std::make_tuple(rv1,rv2,rv3,s); + + } + else if (s.compare(0, 15, "Histogram") == 0) { + // if Histogram: + int distrTypeNumber = 2; + + dist::Histogram curHist = boost::get(curDist); + + int nbins = curHist.getBins(); + float minv = curHist.getMinValue(); + float maxv = curHist.getMaxValue(); + + py::array_t rv1(1); + auto r1 = rv1.mutable_unchecked<1>(); + + py::array_t rv2(1); + auto r2 = rv2.mutable_unchecked<1>(); + + py::array_t rv3(nbins); + auto r3 = rv3.mutable_unchecked<1>(); + + r1[0] = minv; + r2[0] = maxv; + + // bin values + for (int b = 0; b < nbins; b++) + { + r3[b] = curHist.getBinValue(b); + } + + //return multiple values in python call by returning a tuple in c++ side + return std::make_tuple(rv1,rv2,rv3,s); + + } + + + + } + + +}; + + diff --git a/pyEdda/py_gaussian.h b/pyEdda/py_gaussian.h new file mode 100644 index 0000000..e4080b1 --- /dev/null +++ b/pyEdda/py_gaussian.h @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include + +#include +#include +#include "distributions/gaussian.h" + +using namespace std; +using namespace edda::dist; + +namespace py = pybind11; + +class PyGaussian { +protected: + Gaussian* gaussian; + +public: + PyGaussian() + { + gaussian = new Gaussian(); + } + + PyGaussian(Real m, Real s) + { + gaussian = new Gaussian(m, s); + } + + double getGaussianMean() + { + return getMean(*gaussian); + } + + double getGaussianVar() + { + return getVar(*gaussian); + } + + double getGaussianPdf(const double x) + { + return getPdf(*gaussian, x); + } + + double getGaussianSample() + { + return getSample(*gaussian); + } + + double getGaussianCdf(const double x) + { + return getCdf(*gaussian, x); + } + + double getGaussianCdfPrecise(const double x) + { + return getCdfPrecise(*gaussian, x); + } + + void output() + { + std::cout << *gaussian << std::endl; + } +}; \ No newline at end of file diff --git a/pyEdda/py_gmm.h b/pyEdda/py_gmm.h new file mode 100644 index 0000000..7eca7ca --- /dev/null +++ b/pyEdda/py_gmm.h @@ -0,0 +1,140 @@ +#include +#include +#include +#include +#include + +#include +#include +#include "distributions/gmm.h" + +using namespace std; +using namespace edda::dist; + +namespace py = pybind11; + +class PyGMM { +protected: + GMM* gmm; + +public: + PyGMM() + { + gmm = new GMM(); + } + + PyGMM(int gms) + { + gmm = new GMM(gms); + } + + PyGMM(py::array_t p_model) + { + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = p_model.request(); + + //Check the input numpy array's dimensionality + int ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("Number of dimensions must be 2"); + + if( info.shape[1] != 3 ) + throw std::runtime_error("Length of the 2nd dimensions must be 3"); + + std::vector c_Models; + auto parameter = p_model.unchecked<2>(); + for( int i=0; i data, int GMs) + { + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + + //Check the input numpy array's dimensionality + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions must be one"); + + int nElements = info.shape[0]; + + GMM tmpGmm = eddaComputeGMM(ptr, nElements, GMs); + gmm = new GMM(tmpGmm.models); + + } + + void assign(py::array_t p_model) + { + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = p_model.request(); + + //Check the input numpy array's dimensionality + int ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("Number of dimensions must be 2"); + + if( info.shape[1] != 3 ) + throw std::runtime_error("Length of the 2nd dimensions must be 3"); + + std::vector c_Models; + auto parameter = p_model.unchecked<2>(); + for( int i=0; iassign(c_Models); + } + + int getNumComponents() + { + return gmm->getNumComponents(); + } + + void normalizeWeights() + { + gmm->normalizeWeights(); + } + + double getGMMMean() + { + return getMean(*gmm); + } + + double getGMMVar() + { + return getVar(*gmm); + } + + double getGMMPdf(const double x) + { + return getPdf(*gmm, x); + } + + double getGMMSample() + { + return getSample(*gmm); + } + + double getGMMCdf(const double x) + { + return getCdf(*gmm, x); + } + + void output() + { + std::cout << *gmm << std::endl; + } +}; \ No newline at end of file diff --git a/pyEdda/py_histogram.h b/pyEdda/py_histogram.h new file mode 100644 index 0000000..80377ae --- /dev/null +++ b/pyEdda/py_histogram.h @@ -0,0 +1,105 @@ +#include +#include +#include +#include +#include + +#include +#include +#include "distributions/histogram.h" + +using namespace std; +using namespace edda::dist; + +namespace py = pybind11; + +class PyHistogram { +protected: + Histogram* hist; + +public: + PyHistogram(py::array_t data, const int _nBins) + { + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + + //Check the input numpy array's dimensionality + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions must be one"); + + int nElements = info.shape[0]; + + hist = new Histogram(ptr, nElements, _nBins); + } + + PyHistogram(py::array_t data, const int _nBins, + const Real _minValue, const Real _maxValue) + { + //first convert the numpy array (data) to a pointer of array to be passed to the c++ functions + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + + //Check the input numpy array's dimensionality + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions must be one"); + + int nElements = info.shape[0]; + + hist = new Histogram(ptr, nElements, _nBins, _minValue, _maxValue); + } + + PyHistogram(PyHistogram* pyHist) + { + hist = pyHist->hist; + } + + Real getMean() const + { + return hist->getMean(); + } + + Real getVar() const + { + return hist->getVar(); + } + + Real getPdf(const double x) const + { + return hist->getPdf(x); + } + + Real getCdf(const double x) const + { + return hist->getCdf(x); + } + + Real getSample() const + { + return hist->getSample(); + } + + void output() const + { + std::cout << *hist << std::endl; + } + + int getBins() + { + return hist->getBins(); + } + + float getMaxValue(){ + return hist->getMaxValue(); + } + + float getMinValue(){ + return hist->getMinValue(); + } + + float getBinValue(int b){ + return hist->getBinValue(b); + } +}; \ No newline at end of file diff --git a/pyEdda/py_joint_gaussian.h b/pyEdda/py_joint_gaussian.h new file mode 100644 index 0000000..6c91714 --- /dev/null +++ b/pyEdda/py_joint_gaussian.h @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include "distributions/joint_gaussian.h" + +using namespace std; +using namespace edda::dist; + +namespace py = pybind11; + +class PyJointGaussian { +public: + JointGaussian* hist; + +public: + /// constructors + PyJointGaussian(JointGaussian* pyHist) { + hist = pyHist; + } + + PyJointGaussian(PyJointGaussian* pyHist) { + hist = pyHist->hist; + } + + PyJointGaussian(py::array_t mean, py::array_t covs) { + py::buffer_info info = mean.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("The mean of a PyJointGaussian should be a 1D numpy array"); + int dim = info.shape[0]; + ublas_vector c_mean(dim); + for(int i=0; i(info.ptr); + ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("The covariance matrix of a PyJointGaussian should be a 2D numpy array"); + int dim0 = info.shape[0]; + int dim1 = info.shape[1]; + if(dim0 != dim1) + throw std::runtime_error("The covariance matrix should be a square matrix"); + + ublas_matrix c_covs(dim0, dim1); + for(int i=0; i mat) { + py::buffer_info info = mat.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("The covariance matrix of a PyJointGaussian should be a 2D numpy array"); + int dim0 = info.shape[0]; + int dim1 = info.shape[1]; + ublas_matrix c_covs(dim0, dim1); + for(int i=0; isetMatrices(c_covs); + } + + py::array_t getJointSample() { + std::vector v = hist->getJointSample(); + return py::array_t(v.size(), v.data()); + } + + Real getJointLogPdf(py::array_t x) { + py::buffer_info info = x.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions should be 1"); + int dim = info.shape[0]; + std::vector c_x {ptr, ptr + dim}; + + return hist->getJointLogPdf(c_x); + } + + Real getJointPdf(py::array_t x) { + py::buffer_info info = x.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions should be 1"); + int dim = info.shape[0]; + std::vector c_x {ptr, ptr + dim}; + + return hist->getJointPdf(c_x); + } + + py::array_t getMean() { + ublas_vector m = hist->getMean(); + std::vector v{m.begin(), m.end()}; + return py::array_t(v.size(), v.data()); + } +}; + + +py::array_t getJointMean_Gaussian(PyJointGaussian& pyhist) { + return pyhist.getMean(); +} + +py::array_t getJointSample_Gaussian(PyJointGaussian& pyhist) { + return pyhist.getJointSample(); +} + +Real getJointPdf_Gaussian(PyJointGaussian& pyhist, py::array_t x) { + // py::buffer_info info = x.request(); + // auto ptr = static_cast(info.ptr); + // int ndim = info.ndim; + // if(ndim != 1) + // throw std::runtime_error("Number of dimensions for the sample x must be one"); + // int dim = info.shape[0]; + // std::vector c_x {ptr, ptr + dim}; + + // return pyhist.hist->getJointPdf(c_x); + return pyhist.getJointPdf(x); // a simpler way +} diff --git a/pyEdda/py_joint_histogram.h b/pyEdda/py_joint_histogram.h new file mode 100644 index 0000000..6fb8be8 --- /dev/null +++ b/pyEdda/py_joint_histogram.h @@ -0,0 +1,225 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include "distributions/joint_histogram.h" + +using namespace std; +using namespace edda::dist; + +namespace py = pybind11; + +class PyJointHistogram { +public: + JointHistogram* hist; + +public: + /// constructors + PyJointHistogram(JointHistogram* pyHist) { + hist = pyHist; + } + + PyJointHistogram(PyJointHistogram* pyHist) { + hist = pyHist->hist; + } + + PyJointHistogram(py::array_t data, int nElements, py::array_t mins, py::array_t maxs, py::array_t nBins) { + // convert data from 2D numpy array to vector of Real pointers, i.e. vector + py::buffer_info info = data.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("Number of dimensions for the data array must be two, one for variables, one for elemetns of the vars"); + int nVars = info.shape[0]; + nElements = info.shape[1]; // these two values should be the same, if not, use numpy array's second dimension + + std::vector c_data; + for(int i = 0; i < nVars; i++) { + auto ptr = static_cast((Real*)info.ptr + i * nElements); + c_data.push_back(ptr); + } + // convert mins array from numpy array of floats to vector of floats + info = mins.request(); + ptr = static_cast(info.ptr); + ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the mins array must be one"); + int nMins = info.shape[0]; + std::vector c_mins {ptr, ptr + nMins}; + + + // convert maxs array from numpy array of floats to vector of floats + info = maxs.request(); + ptr = static_cast(info.ptr); + ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the maxs array must be one"); + int nMaxs = info.shape[0]; + std::vector c_maxs {ptr, ptr + nMaxs}; + + // convert nBins array from numpy array of ints to vector of ints + info = maxs.request(); + auto ptrint = static_cast(info.ptr); + ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the nBins array must be one"); + int nnBins = info.shape[0]; + std::vector c_nBins {ptrint, ptrint + nnBins}; + + hist = new JointHistogram(c_data, nElements, c_mins, c_maxs, c_nBins); + } + + /// seter and geter + void setMinVals(py::array_t mins) { + py::buffer_info info = mins.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the mins array must be one"); + int nMins = info.shape[0]; + std::vector c_mins {ptr, ptr + nMins}; + hist->setMinVals(c_mins); + } + + py::array_t getMinVals() { + std::vector v = hist->getMinVals(); + return py::array_t(v.size(), v.data()); + } + + void setMaxVals(py::array_t maxs) { + py::buffer_info info = maxs.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the mins array must be one"); + int nMaxs = info.shape[0]; + std::vector c_maxs {ptr, ptr + nMaxs}; + hist->setMinVals(c_maxs); + } + + py::array_t getMaxVals() { + std::vector v = hist->getMaxVals(); + return py::array_t(v.size(), v.data()); + } + + void setBinWidths(py::array_t widths) { + py::buffer_info info = widths.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the mins array must be one"); + int nWidths = info.shape[0]; + std::vector c_widths {ptr, ptr + nWidths}; + hist->setBinWidths(c_widths); + } + + py::array_t getBinWidths() { + std::vector v = hist->getBinWidths(); + return py::array_t(v.size(), v.data()); + } + + void setNumBins(py::array_t nBins) { + py::buffer_info info = nBins.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Number of dimensions for the mins array must be one"); + int nnBins = info.shape[0]; + std::vector c_nBins {ptr, ptr + nnBins}; + hist->setNumBins(c_nBins); + } + + py::array_t getNumBins() { + std::vector v = hist->getNumBins(); + return py::array_t(v.size(), v.data()); + } + + void setNumVars(int nVars) { + hist->setNumVars(nVars); + } + + int getNumVars() { + return hist->getNumVars(); + } + + py::array_t getJointMean() { + std::vector v = hist->getJointMean(); + return py::array_t(v.size(), v.data()); + } + + py::array_t getJointSample() { + std::vector v = hist->getJointSample(); + return py::array_t(v.size(), v.data()); + } +}; + + +py::array_t getJointMean_py(PyJointHistogram& hist) { + return hist.getJointMean(); +} + +PyJointHistogram marginalization(PyJointHistogram& pyHist, py::array_t vars) { + std::unordered_set marvars; + + py::buffer_info info = vars.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Variables to be marginalized must be in 1D"); + int num_vars = info.shape[0]; + for(int i=0; imarginalization(marvars)); + return mhist; +} + +PyJointHistogram conditionalHist(PyJointHistogram& pyHist, py::array_t orivars, py::array_t condvars, py::array_t condbins) { + std::unordered_set c_orivars; + py::buffer_info info = orivars.request(); + auto ptr = static_cast(info.ptr); + int ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Dimensions of Variables must be in 1D"); + int num_vars = info.shape[0]; + for(int i=0; i c_condvars; + info = condvars.request(); + ptr = static_cast(info.ptr); + ndim = info.ndim; + if(ndim != 1) + throw std::runtime_error("Dimensions of conditional variables must be in 1D"); + num_vars = info.shape[0]; + for(int i=0; i> c_binrange; + info = condbins.request(); + ptr = static_cast(info.ptr); + ndim = info.ndim; + if(ndim != 2) + throw std::runtime_error("Dimension of conditional range must be in 2D"); + num_vars = info.shape[0]; + int bin_range = info.shape[1]; // must be 2, representing start and end index of the bin + if(bin_range != 2) + throw std::runtime_error("Dimension of a bin range must be in 2D"); + for(int i=0; i rg(rg_start, rg_end); + c_binrange.push_back(rg); + } + + PyJointHistogram chist(pyHist.hist->conditionalHist(c_orivars, c_condvars, c_binrange)); + return chist; +} \ No newline at end of file diff --git a/pyEdda/pybind11 b/pyEdda/pybind11 new file mode 160000 index 0000000..add56cc --- /dev/null +++ b/pyEdda/pybind11 @@ -0,0 +1 @@ +Subproject commit add56ccdcac23a6c522a2c1174a866e293c61dab diff --git a/pyEdda/test.py b/pyEdda/test.py new file mode 100644 index 0000000..98bdb9b --- /dev/null +++ b/pyEdda/test.py @@ -0,0 +1,17 @@ +#make print in python 2, 3 compatible +from __future__ import print_function +import numpy as np +import pyedda as edda + +#Distribution modeler +dm = edda.DistributionModeler(2) +dummy_data = np.random.rand(100) +dm.computeGMM(dummy_data,2,0) +dm.computeHistogram(dummy_data,32,1) +dm.printDistr() +r1,r2,r3,r4 = dm.getDistr(1) +print (r1) +print (r2) +print (r3) +print (r4) +print() diff --git a/pyEdda/test_joint_histogram.py b/pyEdda/test_joint_histogram.py new file mode 100644 index 0000000..d9bb7f0 --- /dev/null +++ b/pyEdda/test_joint_histogram.py @@ -0,0 +1,103 @@ +#make print in python 2, 3 compatible +from __future__ import print_function +import numpy as np +import pyedda as edda +from scipy import misc + + +#JointHistogram +print("Testing code for JointHistogram with an image example...") +#print("This testing code requires the scipy package!") + +im = misc.imread("../sample_data/test_img.bmp") +width, height, channel = (im.shape) + +bz = 20 #block size +dsUs = width/bz +dsVs = height/bz + +jointMeanImg = np.ndarray(shape=(width, height, channel), dtype=np.int) +jointSmpImg = np.ndarray(shape=(width, height, channel), dtype=np.int) +marginMeanImg = np.ndarray(shape=(width, height, channel), dtype=np.int) +marginSmpImg = np.ndarray(shape=(width, height, channel), dtype=np.int) +condMeanImg = np.ndarray(shape=(width, height, channel), dtype=np.int) +condSmpImg = np.ndarray(shape=(width, height, channel), dtype=np.int) + +for dsU in range(dsUs): + for dsV in range(dsVs): + var0 = [] + var1 = [] + var2 = [] + + var0 = im[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 0] + var1 = im[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 1] + var2 = im[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 2] + + npdata = [] + npdata.append(var0.flatten()) + npdata.append(var1.flatten()) + npdata.append(var2.flatten()) + npdata = np.array(npdata) + + # print(npdata.shape) # should be 3, blckSize*blockSize + + bins = np.array([30, 30, 30]) # each var has 30 bins + mins = np.amin(npdata, axis=1) # min of each var + maxs = np.amax(npdata, axis=1) # max of each var + + # construct joint histogram for the three variables (for the current block) + jointHist = edda.JointHistogram(npdata, npdata.shape[1], mins, maxs, bins) + + ########################################################################## + # finish construction, start testing # + ########################################################################## + # 1. test joint mean + mean = jointHist.getJointMean() # return joint mean as a numpy array + #mean = edda.getJointMean(jointHist); # another way to call it + jointMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz] = mean + + # 2. test joint sample + for u in range(dsU*bz, (dsU+1)*bz): + for v in range(dsV*bz, (dsV+1)*bz): + jointSmpImg[u, v] = jointHist.getJointSample() + + # 3. test marginalization + marvars = np.array([1, 2]) # marginalize to dimension 1 and 2 + marginHist = edda.marginalization(jointHist, marvars) + marginMean = marginHist.getJointMean() + marginMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 0] = 0 + marginMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 1] = marginMean[0] + marginMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 2] = marginMean[1] + for u in range(dsU*bz, (dsU+1)*bz): + for v in range(dsV*bz, (dsV+1)*bz): + marginSmp = marginHist.getJointSample() + marginSmpImg[u, v, 0] = 0 + marginSmpImg[u, v, 1] = marginSmp[0] + marginSmpImg[u, v, 2] = marginSmp[1] + + # 4. test conditionalHistogram + orivars = np.array([0, 1]) + condvars = np.array([2]) + condbins = np.array([[0,29]]) + condHist = edda.conditionalHist(jointHist, orivars, condvars, condbins) + condMean = condHist.getJointMean() + condMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 0] = condMean[0] + condMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 1] = condMean[1] + condMeanImg[dsU*bz:(dsU+1)*bz, dsV*bz:(dsV+1)*bz, 2] = 0 + for u in range(dsU*bz, (dsU+1)*bz): + for v in range(dsV*bz, (dsV+1)*bz): + condSmp = condHist.getJointSample() + condSmpImg[u, v, 0] = condSmp[0] + condSmpImg[u, v, 1] = condSmp[1] + condSmpImg[u, v, 2] = 0 + + + +misc.imsave('./joint_mean.bmp', jointMeanImg) +misc.imsave('./joint_sample.bmp', jointSmpImg) +# result for marginalized distribution +misc.imsave('./margin_mean.bmp', marginMeanImg) +misc.imsave('./margin_sample.bmp', marginSmpImg) +# result for conditional distribution +misc.imsave('./cond_mean.bmp', condMeanImg) +misc.imsave('./cond_sample.bmp', condSmpImg) diff --git a/pyEdda/test_uni_gaussian.py b/pyEdda/test_uni_gaussian.py new file mode 100644 index 0000000..f701c5f --- /dev/null +++ b/pyEdda/test_uni_gaussian.py @@ -0,0 +1,19 @@ +#make print in python 2, 3 compatible +from __future__ import print_function +import numpy as np +import pyedda as edda + + +#Univariate Gaussian +print("//////////Univariate Gaussian///////") +dummy_data = np.random.rand(100) +gaussian = edda.Gaussian(100, 20) +print("gaussian.getMean():", gaussian.getMean()) +print("gaussian.getVar():", gaussian.getVar()) +print("gaussian.getPdf(105):", gaussian.getPdf(105)) +print("gaussian.getSample():", gaussian.getSample()) +print("gaussian.getCdf(105):", gaussian.getCdf(105)) +print("gaussian.getCdfPrecise():", gaussian.getCdfPrecise(105)) +print("Output gaussian:") +gaussian.output() +print() diff --git a/pyEdda/test_uni_gmm.py b/pyEdda/test_uni_gmm.py new file mode 100644 index 0000000..12e3da5 --- /dev/null +++ b/pyEdda/test_uni_gmm.py @@ -0,0 +1,23 @@ +#make print in python 2, 3 compatible +from __future__ import print_function +import numpy as np +import pyedda as edda + +#Univariate GMM +print("//////////Univariate GMM///////") +gmm = edda.GMM(4) +models = np.array([[0.2, 10, 2],[0.5, 15, 4],[0.1, 8, 7],[0.2,6, 9]]) +gmm = edda.GMM(models) +print("gmm.getNumComponents():", gmm.getNumComponents() ) +print("gmm.getMean():", gmm.getMean()) +print("gmm.getVar():", gmm.getVar()) +print("gmm.getPdf(10):", gmm.getPdf(10)) +print("gmm.getSample():", gmm.getSample()) +print("gaussian.getCdf(10):", gmm.getCdf(10)) +print("Output GMM:") +gmm.output() +print("Model and output a gmm by trainig samples:") +dummy_data = np.random.rand(100) +modelGmm = edda.GMM(dummy_data,3) +modelGmm.output() +print() diff --git a/pyEdda/test_uni_histogram.py b/pyEdda/test_uni_histogram.py new file mode 100644 index 0000000..b39c454 --- /dev/null +++ b/pyEdda/test_uni_histogram.py @@ -0,0 +1,23 @@ +#make print in python 2, 3 compatible +from __future__ import print_function +import numpy as np +import pyedda as edda + +#Univariate histogram +print("//////////Univariate Histogram///////") +dummy_data = np.random.rand(100) +hist = edda.Histogram(dummy_data, 10) +print ("hist.getMean():", hist.getMean()) +histCopy = edda.Histogram(hist) +print("histCopy.getMean():", histCopy.getMean()) +print("hist.getVar():", hist.getVar()) +print("hist.getPdf(0.5):",hist.getPdf(0.5)) +print("hist.getCdf(1.0):",hist.getCdf(1.0)) +print("hist.getSample():", hist.getSample()) +print("Output histogram:") +hist.output() +print("hist.getBins():", hist.getBins()) +print("hist.getMaxValue():", hist.getMaxValue()) +print("hist.getMinValue():", hist.getMinValue()) +print("hist.getBinValue(3):", hist.getBinValue(3)) +print() \ No newline at end of file diff --git a/sample_data/SW6_PIV.info b/sample_data/SW6_PIV.info deleted file mode 100644 index df5372a..0000000 --- a/sample_data/SW6_PIV.info +++ /dev/null @@ -1,9 +0,0 @@ -gtype regular -xdim 148 -ydim 89 -zdim 21 -dtype gaussian -vtype float -tuples 3 -mfile SW6_PIV.raw -sfile SW6_PIV_std.raw diff --git a/sample_data/SW6_PIV.raw b/sample_data/SW6_PIV.raw deleted file mode 100644 index 9a3990b..0000000 Binary files a/sample_data/SW6_PIV.raw and /dev/null differ diff --git a/sample_data/SW6_PIV_std.raw b/sample_data/SW6_PIV_std.raw deleted file mode 100644 index 714f2e9..0000000 Binary files a/sample_data/SW6_PIV_std.raw and /dev/null differ diff --git a/sample_data/isabel_pressure_small.vti b/sample_data/isabel_pressure_small.vti new file mode 100644 index 0000000..5f77c3c Binary files /dev/null and b/sample_data/isabel_pressure_small.vti differ diff --git a/sample_data/out_0_9602.vts b/sample_data/out_0_9602.vts new file mode 100644 index 0000000..5492d69 --- /dev/null +++ b/sample_data/out_0_9602.vts @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + _AQAAAACAAACoFQAAXBIAAA==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AQAAAACAAACoFQAA5BMAAA==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AQAAAACAAACoFQAAERQAAA==eJwdmGk4ltsXxsk806BMocxTeA3P+zx7rVeGRJHI2HQicxlPkimzzEORUsaoFCGhkqKZBqKkgeqoI2nOaUD++n+4r2t/+F37y1r7XvdeG/MXMp8611Hu7Qo4ELQBe5ZlY9E4L254Gg9yipVk/GcEellpUw3JFliVLo/qG+3QYLkGO/5mMYatOgXfjWyZntbHUD/HnJljhMXtce0CxA+iMeyr+ohvx1RQzogfvYeSYb+NNhWXZIGS34qA218YfYZkaMfKAbi9KABOcfEysQ7DsPeqOnV/jR0G29mhzfZMxnP3A/rr3hnw9B/E/g+G2NubBgvc11PxKyVww3gI7o23xprIR/AoOQKEHRsJL5cuai2rBJVZf3LVwBrfPc/AJRnz8Xp/AL60OohYcwF3yTvAkoB+vNweDhwdEWJ1l8EecCRcMx9QI+czrD5+HETbUuHzwQD8qb0Y1+8dJNeuq5NmX2E4dqSNuAbxouuzA6CTqsvp++lCyT6PxpXKEmBidYRZ7TvBjIdPMMZz5z8Sv6RItLmuMTr6jvQqazOYz6MA3xQrIGGrMQm8KIddbV3kj8JMCpmzpa6UW2gIk8xfBROTPZDcPEK2rD3KjKx6TITa68hx2o2qcHKmdjVxiGWDCk4OecC53WegNOwCIVcO0/btSawvX4IpVZ+btGTZCNtHy48KvBpOyRyxo2S4vpi++BFDHRRzo0KiTSGi34vy5LXAyNf7ybDRQppl/ZLBJjccj/Yjb25F0U3TU6TLOpZ1WxxAe0QU0ySj0efTOuR2leR0jB3BSZtXdNdrPbQWT2ZxG8WCU7wwqtxLxkt6yWDdfAQTrleiv08zLbu4BYO401iTF2tI62p5lPC2xlVuo/DvvTKUvFBLmw+VMwWrPoPaLmuyqlcVPn0IwQW12djvMgxvIp/htNNSRiI2E68uuQF2FQvofQUnsEJuE47MMrimZxBidW6hZqkZU3+5BJX3fIDVpI5QvypQOHYDRvJeZFJ4GqCP7Y4T0cmM12AOxqi5olJjHvTs2oMeYIbpBZUk45kQut7Xxp71uhxeiVTcpnwRORbJWK7phd6nFsONC3aks3sNNpnrcsRKzTh6qrqcKbcs+PplEday7XHMtg9jvpfBQ4tKjDmchy5K+ajoeAEemjRB1+xVvGZgBzxCSSRS4ySc9+UF/7EXbOkhLyK+rZ5Ols2CsskTePkGF8mxDQb7blEc/XyJCakCxkSt+P8KG7ag9yplY4TgdVQ1+I7sif3k0f5YysbV0lQ1cNpUsWSzkan/e9PEb07Um2w/4m8XANqhL8i1KRtYOSZDp0xR1Ft6nP3XE5qa1/jKlN1njtzT4RiXG48K1dnIWxsI7io36B17Y+ht3jU0K7KNidt7BJylfbDK0B/X6g2SxzLSOF7/xSQsWpixjGZDl3Aya1FwOdw7pIAuQ+oYsek/sHjKYJjZPdN4kXyaVbiY2O7QoFXM4mHKRQHV65thrUM303biJFJ32k1FspTxWVEf80DZiF24gw97jXXwzO1QMEyajynZ2jCrsIA5zT8N4/u4yeaKSNBsmyR+2/7GBKvr8OiLMiz8OA0fV12A07croH2XE55fuh3adSyw+0MHPPiWBl/z1PG0y3tcEOYB3W/MgI7aD1N6JeTE+2OoMvgYwqoayV9x2ziDyxrQuNcJxUINoLXgG8kPVMTBa+Owpr8L9k8pInFJI3/k/ymbvLWYIm8EmuF5oTyey9NHr74JmN5mSzd8i4TOKQ6xepCNf7Rg1ggUGstx2a4VEGYrg5YLL0ByxhCErgwl6YwjfBMYZR8UPgmNuabw0VCVydRKhFXiSfAoWg/PBViB0Rkf8m5qETvS9C69X1kT1PMjsIdtz8wv2EzrpKzEmbhxptV4J7P+Y60RzyYwDVXypz0WW+DCJwSrKwtYqTL7oHZBCoSG5VA2suspgxgPyjJlOyXq+oDYxrWj25wHc7kfokPPFGJ+cy3lFLGMiHBq6BiXcyyXQQ/UMd6GESVhaNepjBfLt+BSpTd07NZf8H6gnv3maQsrRF0V06uVkDeyhty6coToqbRCSFwdHVEpj69+7yCHK+rYBiFquLstC/Q8v5LLomLwenoex1lrPjuiyRCPnVKEv9o02EOSBcSiIIEZtUsktzRUsXNWEENeNkFtjwDklFrBuI0Waj3eBsqCSdBC8eDTge1YXZ4MZWxefPfuH+CSk8S+65Hws4EHl+t3w+xjS0y2FwEeooGxzT3g7YB4d1QSDeSPEiGHQLidbo+d5YHkXNo9bNWTBmEhScgRnweFY08gfF8/SJJaeL9cmTTN88JT37rIH82+biH2S1zxd/FqVJ3kQ3GVYyjrSsPPFW7wIjsNR+8lw/nPZjgQqcvZ6N8E6QLHGGq4CDIFH4NbXwBp2ZEOBS5nICX+GhEbOwrnYvlw93gHctvcZQTeajB+GRfoA7ZGMHDDDQ498gaHFYvIKyYLB+pm6KJXcvgs5isIHRmiA698gi63GJgdkEbzPYQJ/FTNun4/l4o9HQ8FwsbQrd7AZH20IQ3yB0jPJRcsM9vPQH2JaVePA7VjKo+8kVLCR3zy6KEWghGS22mHtt8QnrkcLTk69FRJLWuHKAeFhteipclxyqkhHsNrOkyd87LItBI3SuypMv0tfop1dJ48Ts144+Dju2So0BXtZJxNVyzPJsX2+fjOrpIt87SJFSskgNFHi3CRcxx4L07AS9t16APb9UAkxxMnURS95rwl8XIFyO0cJQIbq+CTRDtmnK6Bh0Vu+FDBHrWKxJBbEIjjkQJ463EC83piIaXzJyxIz8P+FT4oU7odTWbF0DNeC8VTUrCHcQZpjj5qfDdBm2Z9TnFjBMpbTIDZiVtMzzDg/pGNqNZfCZ39hpDw4zXETzzD+R+y4ImTA1w/Ogyt9rbkdFcfuqn/IJOMKoZdPwAhc/V//G4F5A0vhL81bfCB0WtQMS4F9S5FEHQ5BpqBJyChZwP82PoNW13LoOBmJxQXF+OPG8FQPxMBPgd2At+YLgypVMPiKF24dTINg6pl8cyeURid9wK+6oXCT7UqUChOAq2SUKhyVMSMGTcQwQ7mbbcwBvPfJMaf09HXzwgNS5egzlAt4b65GkT0lWA0ZIAt4ZBHTXpPQ3mKBQZ6xWFW1Ijp5XXcpLbEGHv1o4lvsyWVdV6DKpG0pPlLNXE4fAQaqqU5/0TeZNLmC6NntgK6nZeitIdSWE+fdtC9vInYo2UPpyqjsGyDIN4+kgu6An/jowFflv6xFFYaWfJ/Zu3bPmaFUDyOVFdDgas23vYQgWOXXcBQMI3Vnl1IF8qFYXjadmz54MnYyaoBl8ZvWN8dhy1rR0Bt4gzRHOQitwsu0+kig2DTnwkv6jOBX2sKTjf+B68a5hHlN4P0lrhAWCcYAKlHvkNrfyJejAL8ukkT+Z0bYMq2Bp3rjFGpbAnpXJOMPf77Qc/gLpY8Ooc/dudiSDAfPmjfB6qcpXhtwgXiFHTB7McEKXVvIftWniMvRj8w5k4uaB6vDGa1B9Et/zW5cOE4JLeqkIDxSWKm/4NY7LhKrOZ0e7sNVuz8Bfp7HHHtoBiqVByAiMNB8EuDH15GfMVzoeUQvCoLYhTj4Nc0g8sai3E+5y+S92MQencuwsvsMfBSSIKanlGQWnUOtJvKySjPI0Zq+1pI23iC9HUuZfoPW4BMAU16PziRlm+FKB1oiGGvymHdCSPocN0F3U03mVKFFJLglwONWwyhZK0r1owG09W5L5nRvCLy74A/q844EW5YcBPVjUdZPUskqQMHXagTgvdJ3BoRMnvrOHkV64vHJhTx2X9bMDcqjS2f4EVFeGvTCpHriJxABI64RuBNxVSi6cmNg1zLcFRnJ/3AtY71h6mWEmFne7ejws+LyD5TAU1e3GgQ+gM8XR/AtSQKzJ+uoAW59Ng/49ww20Qftbl+0S+4klFN5BoopEuSW0NW8KM7haUnCcTezwqDu+Lx+dsGYqlbBzx3gtBzuBEWegTArzv1wPtMCvYs5wehZaVA5vVDgQQNz5cH4T/xv6B4xBacRXKIx+dcCH0ej0X2Eihz8RC2h+fimvlp6CaVyfBmSuB/92RQ+nQBHnHmwl6tGNL4sZV8v9FI8j+lwInUVGJTyMP5Z1cA7j/fiw1+5fBils0IvlBE6005eHTtd3JQromMmazFl+r3YF+7EuJfuzBeVBfKTqeQo1/2wGJ9XQ5gCsSo3weHiQPI1e4Pe2gfzF4kAKd/OIPywEXSuzoT2Nm6KCW0ClcPZsG0aA1piSolTsGS4C5xmPmw5wkk6/PD7YK5Ph1yYv4whU8PE9mxw7RWkiqKtd2A+7lR5N5RO6rKdBdZmn6R2SYij1ecAmBZuiy+z8ll/ZswSXdnn4WOhhjm2voaWi2IRV1DF6rAZDeE+crCprjFxP2OIr7y0kHhD8OM1I4i1snHuZRSojg9q2LFrDRdzuyJT6e5VZJA0FYQH/kvwZeSz8j75kkmVHExbe76C/IaNFHbSRACnrwA89vjxJiyBf+gbKJy1ofozjE7sj6DlLgB9Orp0k/35yJTr4unr+0mvR4L0bs3lwlcyg8XXFIwUkGY2TKuhgniByDFRB5X+0chphxmAsTukpMth8iUpQjsPsnA8bR87OTVQpXpaVCz6SWMxSmi5r4Nhg+fh52rrPHwynl41MgaDl9QQP6nmujmMx9/my5HnuJgDOrpIkt2rsF1O0ThbddK8oEdD/73rCGi+RbkSpzEzZ7vILY9D8WnbhDHEH78sdIGA/nciMfcm/9Tc4nqIKLja4hDTRHo/v07LPt1moz1OZA1Xncg1EqXc6M7iNSrbsXWhQ1gJZ2Id0Xk5+bGMZJ6Txi2mkmBYEYiKN9MgjczZnO5xApZDcIwtagF1L8WYcdMC5npJZD4IoipYCdCsEc/ZG6/wZjvLCYGi48yzvYF5CuXI2js38fcUXYmCfInIFy/hPTN+fzg+jzqlLscOL5bD0OO5YxF3yNabGMjZWoFTJrOcvp7mhklnh9JJc9Kz+W5TWTTgDvJX1TE6Df9hm+F8rRlZtjc/3iKeZ8vTr90lsO7Pytg4xsl3GEsh+XRdpjIOTnnu7UQspsPuAvE6a4qKRRUzsaG+3X0n75Y+18C3BIXNa2T4OCHtAr6S2Uq3eutgOmsF2Q1qGCHjS5aPawhmloZTH36XnTZtYgIzt1T7zoNjRw1iL2fR4S98khq8w0mJqqS6NH5qLAukmG37sWh8XTs8SuGrfI+WJOzGP1OZYD/F25cYNKBrR0acH1JEdHoKULuBXdJz0cRqNmZixOeq7DCWATzU/QwbPdCWJbRD07plVBW1g9XFFKZB2qVRNenENPP5qA7nxTYlCegeJIWqmmlkBhNXc4BrVD0FZ0h17+eJaskxUiGzNycs9KAup+qcNgwBPi6M/BTnijeiR1lQq4U02zfIaI4qwdH10fi35oDTEpnI2T95KDhRT/gV+JFpfo9ePFZChp9L4GqThmyI+oX85LblBBNKTR1eEmqHw2T30HZOBPAh1YSo6SiKgtunOWlu/Sj2MGfbUmC4wgctWkj7z286aWvaJj/VAA1F3lg2ZsCHLvUCAlle+E5E8N4H6qFNDwDAiqTFP53jqr12Ue53xtmf69RJUPkDHN23hDxOvkb2uwsSDOfCP47IkG6g5OYeR4dRlOf9tJXJMvwTU0ual1bjdqjd0H3RRV6XPlMTmiV0Fv0Q1h6e49hY9A+ep854j+0Mu7l6ocTCYm4V5rB/zRL6EEePnbN1RIcvBhKj6XqooBBCTEjOyDobTgKT26Fn3OMR4YIvF2mSrNdUolYpyFm0k2we0ASghalol2YBTho3WZndqui7Yw+qrisQFJuiZsvecKusb/RJY3Bmd8vifo/ssyCLFUsFirALMFiwncpGSWpcfD9i6Dr0jvAw7eJCF4XY2I8w0jVPUDzT+Uo16LAyfGZywvyIuAXfAolBR3g/nEhTl/4E7Aw5uJMSMty6nIH4PulILKw6AVMfH/K7lAogPwHKWib/hj6szeATqAfmXTU5XCif9O3VR9DjlAaaIkKYP+lDHgt5gcj+0yA61EvI8uUwGqtbEx/dwiK5PpJ6fsaiH52C9qu0ETMyRae7/6blNh6kgMdgHUpPLTngiTIblPExs1WeNZ+lh1Vb4TxuQZwPfIz9FfNsqWjRPG9jSgmmgwAKp4HjrgJtbFaiw54n0e+hS4HxeMujOCFAvaKV42U+ctGqnTCgOJpVGd8JrZSDdLp+HyJJQZTySgXWoB393nCrVcKOPF8HSp6MJT28WIUc7xO9JS34IzYGdzClKDmgha45RCDku7PYHiz8f8Z0wfO4L7/JylbNgMFajaYJSCCWEgwa/pfMD2nR/nqJGNdvxiYsR+SfzYq4XKFRuhrNITqdgobGoZhhc0b0y03BcgV03k4JDfKZs++w+j5brhKcQjMlHagZ1MyiYp2pL4opKC7dTReSfeFcCkxjDJ7iPwH2uAdlwjejpNC5VfHwVwwGfuoRHTPrcPZE4HYrr8ZjycEYdS6k/i9VQ0/rjGBGKNcEGoyw5XFW0hbWAn5VP4ERnovwLuDG3Crfh1G6FvjKZVuDDWeYIK3LoEh/T6iP+mJ5olF8ECgEtfq3YGP3btw17Pd8Gc/92qylBFXyMc/Oztn/oekTUGWM29/Furd9KXcZaRgXesm/LOvi99qTDrLhpibr/OgyOYT1bnIAXMVXSj96HVMV3gTiHi5QeqBVhA+c5o4NFoDrdkFwTaDlJ7yLfq+zDEyT3I5eviIgLXrOVIel80yUM5ihX67xkoXLKTMYruIX2YCrl3tThVHZlDNfxlT984HmT6ULaTuW9pS7zNymP8B2zcJKA==AQAAAACAAACoFQAAZxIAAA==eJwNl3VYVucfxkXpkq63aKkXhJeXt8+HRmdM7EAxZk4wEMWYIoqo2Ngt021izjlbGeqMTZ3O2WLMwvrpsBDr9/xxrvPPcz3XOd+478/dZq0Mrb+SnVVefHfZicv1zSGkKyNSCqjvM4HXD19IHSbKWLJBhmaIkunnnRhYaI/Nlmy2l49h0/0i3rU7K73vIsNqioxWOUrK+zuxZ5w9n6f3Jj99NM6KaUz6LZwhnwO41iEQm7NurNrsiHq1PU99uvNn8Ti6Zc3grV2jtOW+PzuKAphg5YLPQFuG37WjsaQXrW4X8PD5PP7XRMsYWwWJXwcy9IqMq2+b0LWwB1/GF/CVuozBtTOp6JdB/gUF0dM8Gbe+KX/b3peGdSjk0cupdHowXXzfInasDWNsQAgVh/24XuRHixu+fCh2ZsGhEupXFLP5wUIeS4XsVsaSsEzG3d9UHFQFcW2hAufaAB7uV3FyrpJrLiqkahO+NnF8TlGT5xBHsm0c4a1i8E+K5nOumudaNXXbjBw7aqaknZZe9Vr+mp5EqaMW5xAtvkla/nBN5FWMmcIEWNOoY4mjgTfpBrwqdDwJ0XEoSMfTfkk0PDFz8HoK/VsYidWa8Hhs5Mf3BtL6GqjONCDrrafFFAt+6lTMA01UtjHz3WsTI3ONZOmNHOigw715EhlFMvar5JxKVJI7oTnpNo5sGvwVr1r3YPHxHH56paFwk5zVd2R8mePDvBxXxj7zZtDHULp91UPMTDe+c4nnyE45iQdk3LP1x3tuc5bH+vL6RgSdi3PI2JmD7Z8tOHhAzjVJxsFSL1KmOZIW5Efl0WSyNP04NacHgzpp+LRcTs+aAPIveeHT157B5+x5ZG+m1Kc/KwYOZlSZhsmOMnaM8MNriRM202yICm9Cn11ZnHIZSnLKaL7vmMHBKwq6l3hy/Wt7vv3xpVTn9lg6d62QuuBxzH4+lmEebbhzNYhoLxnNG/2puerLw1886dxtFI/3T+Zi05EoAjtQ9SCcql/kLMgOof2oYJZcCmJGWADpzQIYu0iOsZUKz/GJFNjEcn9eHE8fRJFyNoo3Q6K45BrFutQ4fguPZVViCvVaCas2SfhkaHkt6s+cJNa1TGJijoaLj7S0OWUmayEUvTTSIcfA1Xwj6V8ZqB1mYEw7A7bBBkaYzKwcmcwjVwvSZCN2VSbedxZ9TTURfs/IwBtGuiZYWBqTStt6M6f3mLj2m5mn+WaStpnotdjEpN0mWkySk75QTps0Of1WeTJyjzO/dmpO9LJUeoemcKcmhNKZclpUyCie7Mvqzh60r3XCKk+Gfm4ac1dZ2LrLl8I5ckYMkfG/R96M/tMD+Z9OTPxBwVt1GnXLLbje8OJod1G/bSpRIx8+XHPHdbYjh74NZsXqdDppjLxy9mZypvieCBXzq5W0Txb7t9eOvElpBBe2Iu+ihZOuXsjWBTC/RyCXr3uxYZ8j+39twunDWSS868Le3W1JlVrgsl6BwioEZc8QVFs+SV9FvpA6b8qlT/43XCjryN5xQbwaJJ46Pw7U+HEOH16NtmXJPTs6jVEyrbgVsw748yo7jvyp4fz8dzCjv5eRsSiEbY+CeaoPZjMqzgQr6TdJi3xLEk1LEpkzNp5tc1ri3DeS2TGRVD+JYGnblpReNFGy20xVg47l7kksP6DlcYaem5MNnC3Tc6lezx9/6Ik+b6FkncT5TnqmZBj49J2RO2Jft480k7LXRJPVycR+D501KZy/Y+CO6H3CaTP1LcWOF1pYV2Bh/3szrTLgTU8TRZ+M2Pc249TGwjgrif3tJap3WrAqVrDMNZA/D/qx1s+DCeFuHPNUUjLVwItB8aw668LVlnL87eQ8UMtZ09+DA2uaY1Hp0M3WUWEfx6d7TnzTTc76VzJ+z/Rl7nMP7Gpc6fODjrs1OhYMjmfDHlu2eMgxh8r58pcPmlEerB/oikKtY6mDgXzbCAY2a4b8BxnVv8vZ0FLGx+9cuRXjxEsPEx0jjHiMiSV761upx3EZe0YHEj7ai6hKF5Td7ahrzGDx7lTyTybRfEmjNOJOAA0nQ1k9VMHvD6zZfq1BWujbKH1a2oFmdyXOOtnQN0bO0a1ihgbKWXXSG+0Ptnh+58/mWwZK8nUkz3RhdV0k7VNC8eweCc0U/LMijO5+Ydw5Hop7RShx0xWcOQN/XYhn/wcN64LUVJ2IQ+Wq4eWwaDzConHfG8/DnhayrpoYetzI62tadj1IYs0aHZ+GG0jtpcMtWvzfmjQUYRLlHUw4HNPzo9xA8WcDd4WPbLa34HLZzNJoA/12SaR5m3nfxMi+IUaKFpr41NpCh3GS0AuJuCyJm/XJnC6QqNxq5J8wE++2mYlslJjoBgPmwO1IJcs2q+jRXEFlHw8uH41gcJWGmu0JLDwUiuyTI4qmcv47J6fPQKHR7Tzw/duPyDka1jbE0CdTRvxra8rfy+jVT0VGhoznjR78UebOzEUa6lNjufi3D1JPG04/F/qsUzEo1YcqyYMb+ggqqzU0Doxk2QhvJo5uxoCrMgYqVFxK9WPJO3dsi+N4sU1L9DexbPzXk8sHmxA7I4C2TwOJ6OzH0gfO9M+IpXMDOB/R0pAZwpO8u9L4qb74WIdx5LyYIzvBG70+SepR6Tx5n8b2fTGs2XFPCo1TsmJfMMvV/uSE+PL5rQ8nNMmkNzcjM/vRIfeddHttOFPFbjuZI6g4Leff1uFsuiJnnHh3dAhnpGMgFyZrGFKvYeauRO5tjaWsZzzOH+MZ0iWGGy21XCyKpYM+kylvjHjPMRCzMYng+UnYpelRnDDgcMPAsZt6OiZl0uWgmQG+Fua81xMv+p4uGdkz08yoTAvtjpjYOj6Tz8ctxFYIP1gq/KCdkVXrTDS7Y+HwCaETov+bmibTYxM8r5fQTzOR28tE1j0xMyUSiyRYmyNxYKKS3iVKEmsEk7X0IMEvkjyxw1+tUrHkqjdHvWx55STnYxMV1k+8qdZ54HE5lpTp0cQ7hhMyvTkx6TaoxZmHjirMb70Jm+mJz/FAWpVGciVLxowKZ+ysbJjxVEblbgWRIwUDDvBkRYdgjteqmTnbH7OfA6ZMa9SnZaxIUjI/wI9JbT2IMsYzeHssVr/6UqS1YX18M9Y/CaBf2yAaX3jRuciN0s4aJvykJXtIKD9lfZTcor5Ik277UbNDxiErOXmrbJlmSWD/S1j/PIyKnq7UzfhX2nNdTshsOZ2C/djo7sudRMEVXyBOzPgNWz9urvdCYVDzqSaM4q/D6P8hiNvzxVyGhsF14U/JwSSnBxKSa+K2fTS1rzXUNYuh3a6WmOviWeDbksPfq+nfI45viyTcT+oZKvy4OF3LxzZarl/UcbO18O7pBsr6J5H+v0yuhVgI/ElicLyBGw/1tM8zErPIjNs0M4mtjZR/ZaTvLvhT9L63h5G/o4zsrTCx/qwFtVHix5smujib6PBEYtYEidVxJoKfG9l620zH8RK3Y+GaXGhKmJyySiWzrPypGuHDsStqHD4FEb7aj9ImdlRvteGMRU6XSUomjwrAf18QJWui2TRWyfOnQu8P2eHT1JbMFDkfxAztGSV2+ZIPpcvV/OqvYPcpFw6U2BFRbkO+0NX6EUqKcnx4/k8LLOdjGKKU4e/gTJ2bLR3PWbNWaMs6HyV/7fTmrOCyeXFqyqMU2E1pzsUW4o6PTVFVycg/E0j7034M2unJKVFnl1DBcSFWPKz5Tyos+ihFVwVwszKIjFsKLre3w3ml6Mc3Lah46s2S8ltShN8z6bM5FKtWSu5s9sJmmCu+syMZG6mg+mdvynZ9lGJq3eiWL7zdNwT7lgoO/h5I2btAnvQNYrQhjNYtg1jsFIzBUcI3QcOJn6PZcz2KqQVq0g7GcXJKLBe0CeRaq5nglcm08UZSxxnYUqvhaNskAm30ZNgJ767T0W91IuUNmbSPl3gUZaE2Us/wJgbOPDeRIPi86Wszba8ZkOZn8ctiyDsldnubgcQNRn4+ZqbNJInpZyS8hpj4S2ni+VWJFo+EF0wy4pRj4tkcCxc1MD0RqiPN7Bwl55ctcv446cdPRSEU7wlDt8afs9nOTDxli3qFDTUWBVNXi93oJXq6ogW11Srmurmhnm5PeK0tRxusqRR3VObJsQzyI9gSxYC4IL4Vs3M6xZ5/j9hyt48tV5sq6NdHjkMrH8rHRTJIL3zkvDPDB9qxqL0t3WZZkzpfjrRAzOEbL5KuBBIwRkW7HY60kdkw/4o1VyJtGdNDzvnDgdQvdBO1DidqXAS/RdmwtLJeOjhH+MAVW24WyJlyR0V+lCMRUe4U+ISQM82e7uF10qGgq1JxYzivvg9keWIII1z9uOLrz7O3frRZ5UVrzTPpkfqDFJbrwogdSkJERk08JafJfBW1JcJHhIad2RjIyhsq3n0RvnVXw8JjQuc7JnA3LYaAhHhSy6Noa4jjXKuWzLgQTZ+cDOJLzBT8o+W/cC1PdifRXzBX2j8GhlclMeFZPPeNmewQGKHebGHZSx3bhwouy7MQssLMgjoTl07p2HYmk+93C7mpMvIsyciU7WauNkissoOseAtPdhn4kJ+Kf3Iy57tYaFVsZFadGSHh3P4d2k+V6HbEyESRhWNuiV6ILHNrWShHh3lT9LUrozzsiTljy/6trXC8q2BCcABDXvhz4kKQ8AIv4pQOKOfaEd3TjkrHjuS+VvDpD396vA3ghFsQkeXuZKxzYmWwHd8lOlFelY3jcwXT/AP4bXEAdsIXZ9s1p3eGPfIyW7JHuVO8vCcRDxTY/+PHMmt/IiYGUTDAmZBARzoPs+ZBmieP+uRyuVxB7kwVC6QAPm9R0amJA+trGqTkG02wFfOyMieP/GmByO5688jahXVHY3jzxpOpW2ulFQduSY2CJea9HYN1YpBgUH+q17rQtVs48lIPbm35IkU6NmWz4NxeIhO2do4Q/h6OReRUnWCBUYmBjPiowuGxkrqpgbS+rKSLzMCASJFBy6J56h+HmzKGrrPUvLKLYfNxNTNWRjBvRCrxDSa+PZLIOeH5/j46fDfpmLBa+H+c2P2XcbyNS+exUzKHPI28a2vg3rcmSsMs3HA30Uewvrxai4jtFDak4GUC9wATa59YSJgnMfa+GR+x5w7letbZp1IZmsr2zxLRb0wsni1YT3hD3nLBe+cF+wsWVJoUtDkdgId9IJ9/9eFlqhvXs+14lhvOpdrO/OMznA/iTKjIqle9lfi29KR/lmDowXaMOxxCs9KulI0ZhUZogm53ANnBwbRa6ou6wIF0cU9OQxKr5w1kufVoPoszm1rLCBG5eVm0G0/uOKDvZc/Iw5nkjR7MPK8CthxXUPtrAH2NgaI+/uy/58Chw4LpZ2Qw6+dhqI4UcGSykqRNvszyDGb4Kgco+yiVB9jTrro3ayaNpW/DRA52C+R/S1wYP74FziY3ssc/lHZ1txGzOZJ3o0t4kTGdDfuDmblR5JQ7/sS/8GHlmCaUrfNjnykFz0VD2ZhcytB/o/l1iozbjSqyEmWC7VVM/DOQKSdVSFVKLEcEq3zRUXZfi2ZKPJU/RpC9OIY9b9Ws3KVGs7sFBdeiKOxk5uwuE2nX9fS20vOpXsupGxqqNydwWZvIrn0JeOVJZOtSuHLSwvJ9Bi6PMrEv3EDDOR2OPXQ8vaelsL/E5twUps+XeDbCzBgbC7IrJs6tNfKiyMCpiXq6vkhhUp80KkrNVAgNuNND4g/hRds3mNGLOyfWGgiaJTJ3qpw3k304ft6eX7Y7Y/82lxnSOJ6qprPSfg4zBYc9miTj4kEPwtNdGKu255uYHIakDuN+QQlrUstZ1E1G1QAZSS4eLJ9vj2u1A7+PH8D3mkLuLppH5rCFeHvJqNDLeDdVZKsaBz5/cRdBtA/D7SdQs7SUxR0WsPKxnLXVcn7IdqH5UuEzIXaM2ZvHhpNTmJI3nxNBM7inUhDxJYgLVbbME9nv+HMrNvcewpUl01ggW84vYUv4fZyCAleRsyc5svnSM+m21xvpwLppXF9VQVXf1WQcmk/N+mCyBwXQ9YAXeycIltil5EvsbNI3LsU67mc2JmWx85maR4JZl/6mQq6VcVPk3roucs55BXIrV4XTt8GcDzGSWJxIG62a1o9j2TQihiJ5LE5SHPNWhXFV6OAFhRGroWZ6uWhFjtRSX5TEfzO1HA7UsuBRIp2K46kfbabDddBn6rn/l57Hi/WE9dXhs0pH/zId/7npWW1l4c1TiTHZgu8kEz+8FjmtVOS9UJETXug5fkwnMlsqZ5xhf40Ju0ozjZdMeHoZmSMYcIVOz6L6RP4P5AzTgg==AQAAAACAAACoFQAA0BMAAA==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AQAAAACAAACoFQAAqRMAAA==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AQAAAACAAACoFQAAXRIAAA==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AQAAAACAAACoFQAAahIAAA==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AQAAAACAAACoFQAAoBAAAA==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AQAAAACAAACoFQAAoBAAAA==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AQAAAACAAACoFQAAVBIAAA==eJwNl3dck9cfhbHuvfegTuqAkL3DE5IQRggbRAEVFSEhDEFwIEMQt9Y9sI7WidatgNpq3VvctW5t3fOn1orr9/5/7/28773ne85zPN/n8qYkiQE7vdGTzsGzcvKGylgzVsrfobkoUr3xnFvKrvUanrWQ8ZNZwu2qUkackqJdISVmSzDd1qURXFjK9I5yejeRkfJQybn0KTxa5YWtsxRxdwk/zU8n44/JJK4XMWehitPTXKyoO41vSxXcuCDn+ukQ9m9IY3BsCYenaam878WA+aFktZpKZJ9UhlxNZsQSOyWF6dzwSsazlzeVR5zsdBhZNiKHY99cbI735X+pcn7Y7KJ/TQgFC1O5/Fsyc1JVzFhWiGJ/Cn88UUMvJfmxLmq/UuJxxh/f+8Gs9wii11ANi/r7c+uuhfN3bFzcIqaeUkb60HC0K2Pw7eZHC0kopp4+zC8Oot2hKKZuTaNXrpgumWaWfIwlMtrGZXcbp1/FUtN7EJ2TAngz2I+FlfHU6ackd4aVors6HpwNou5BFY/jhmIYPJToQ0NZOCOJrbVsFM0K4UROMJ18o/hzZCz3ysPZfieCqolZ1P9jNKOuBvKvXEvNGh9Gzddg/mwjtXUO+uJSKs5n8eebTM7PiCU+MoWxlxyU+ToIDSjmQ0QJpqgcrkweTnDDUk75q+j+xcjyxdE0y/anqDKNlBE2gsMSKGhl4V23QmStjXy+K6d7NxGrXqbxdbaLLiIvbt4MxbFVx84Fxbzz9EE3V0v90HRsjzUsPSbmaVM9/qsT8fTQUj28kGGjLEgWS3AVi5l+R8bP/qnsexLOgl02vr01EVU/l9UrjXi0S8Fvp5hTn6RU+4spU0QTbQzi44RUPKMTmHfExdSLEtruUGL+18m5DlIaL4xkjcyGspOE0FTYtlrM1SveLFxqRfKPsD5TzNfyGB4pFAw64kVVoATLTTXBY/S8nRFF4SMzrsW+vF8VRncPDdvEctYUK3g6NJCjZw3Ma2LhU3MVi/ysHF8byMdnkHVUyfF6Sp7ctuF3W8GBywGkuEPGf6CogTlVPrzeaKVRmYOPK9RcrGfkef9AZpt9Sb2TiH5dBH1MiayxqPjuoS97F/vRO97CF62Wc53COapLZP8nB10/O9g0M55pG1XsT5fSapuaHcd9adw+hYSj+bSonUnPPlPZ810u9d1GsaMygosh2RTYoGajgR8+JSG2pjMufwSfNo0mLXwCS06Jab1VhLdRTOnBdM42MtDlUxH9hsTDmyH0Ko8kN01Hyxono6ocNP1i4FaRhIfvxzKxQTixy7KwZxeRlKyjTo6UxD0q7PXSSCuVsPK3XGbVjmDnSl+2byhA1z2d4nOptFtlIassiJRq4bu75TL5sQNtfAAvQ4bx7oKav3MVpO1QcOa9nE9T0ugSFczaRBnhXW0URgTycr6WujXJRPWR8q6rAVGjVF7vUFFeW8H0eBPr7qp5us/Bjg1yPiyTE/WPgsDobBot0mBboCbhhYr23nBhmoqv53wonOeLe7ssahcH8Oc/wXyxQvhyPZODpTwcJmZ13wDuuQLx87VTpbfz1w4Le3ZHsX+ZhHsBEqq7i7FvFXQyI4ELC8006x7FTOGQvo38qf2Tkk//SJnUHJYtkxHk5kuvZ6OxNQ4g64IvE+MS8YlU0Ga0lt0SO38W6DgWE8Lo//mSdy2K1+ttxC9P4vCpWKbKgng0xcKdrSGktYslq44K2b/BeHUaxc7Zk8hrOZ6YFeEsuisjyipFvnYSHbJMlN7To241gpM4aX09h5PnShmpzybiTgozPaV0exJHc085vUY50b8z0T0yhqN+pcgnK7mvkHGusYx+CzX80teFbnIkiy8aGPlhJE2M+fx2V8mHI96YQnzxrpXNmcU6LreJ5J3RwNHAbJpWJdDxiA3733J+POxDg0ZZdO+sZvLgIdT5nM6pFoIO24zm3v0gfAsCGZ5upangISP+VGFKVjPkop4JtTSIR2bwXbiO1j5KWj538jpXQ48OPvS8lEreThHbDqXTcY2Sh2HeNHSKqb/AxcRoYe5+juLsXhE963nRuL6Kq+52zq4w8DjMzN19VlY813HXaub5FT2xT0yEffCi60U5mp99OPswmDm9A4h+ayb/nZnpp+wMHaOit7eK2AdyRp0UYd+u4fupfnQOMOAS/uvUKT8s5f7cm6jkUo0/Sp0SxUoly0qsbHsKAyv8GLErkLrzgykSKXidauKI2Mb1ZaFUTxrK20h4mGjnwWp/lgRFcmmYHMc/YbzzMOPYqUZTFkFQuY5ykeC3HukE1R9Iv6NFzLqYiNSqoU8izP3Xxhy1jaPPAvDaraPt0nBKTKWknSrheYA/d6OkSC8IOtucwqSeBbx5HMjfJ8SMGVPACK9peGzTkXFegtvy4Vw44Mna1ykE/Wrm7U8m9PNLWD9hKu3Wq1i8V8amS0HYXJ50up7Bv0NMXO6ZwvNR43liLyZvnoIjMxykv8tmf4NU2kYOZsEnH9wrvYiYKOFvZxQPp2dw/w8Dz2v5EBroYEyVgr7nXajfe3JP4Iv40f5MGitnyS0XLwtVfPgplaExCi4IjOJ7fgDyPyV8vqrAEuHF535yDnTypOqElLSqDBqkiXj1WEyzbcGE7dDwa0sdd35Rc2+IkSnjZHxbbyTvipFZcQa+fZCjijIzYruE8R+M/PIpAMNmK169ApBnmRkv9ed1fyWJRyRMDjdgy/blY5mZ8OMuDizT8HyDibIII1oPJSeEWQ5fYeHJzxre5fgzZb2/oB+orG9ljjDXM04L3vhfGu/MWgraWnjwysaJV4GE7TRxNtrEh20hSDsEYlykZtY1H4x5TvKX6anJTGdpWSiaH/UMnOmPbXYcP65K5PwtDY/GSzh9zRdJTSbySREEtzSyMj6EbXWmsLFtCU83DcOttozPwxX8/crF6tRgLvSQECy8w+WOU9jVsoSlpeFsinSS1FbL8DcqMkudrKjSsFvhycu86Xz+XEj0X4P5FuFkwPJAksu0JMW4GNPPyfEeatq8HMrBhSW0PDeQ1XIJf5a5OBcuaLlaxx5vb6rGpKBZpeKQcCfNFf50aB/J2NYy1jdWELNSzeXOgp/ukiBOshH1OYJJt/RcG2BEtlZOfDsn51M8kX4RYZgnY06InBMdDOwSZu9WhSe3Zgps8dXFsb6eXAr05uVWCfvjtNRTaNnzWsWJHoG8SLWSsNkH9b5w9p+JIO9XC/2eGCi/JejHy4dmj5XMqhlIB8J4OSOEO9djSW8yiBVjldz7PpVvY63oe+ro19XMY4uWE0f03Bbyxxoi5Dk6FhcpSAgUMvuknMzqCBaPHc2JL3qqR/nSu74dhVhHh6ZqlHFWhv0byB6djp/rBPBL3EBG2i30aR6BKjSAYe5qxt9I40WkEtfBbFZLtXx3MZqrziA8v4bSdlw27ned1Hsfyb03VmaPG8TqFfmsv61jXMNAJreYxI+timm+NZ2uIhNrFlvIWTaaab8G0bGflBEBTrZ5xbGpcjLlpwu4YfUTvltD5vMB6GubiRLCcVfPdP5bGE3E+cnsF9bUTxjKS6eDo50dOEIG8WCx8J7H/Zkv03M2cgztv4/jauAQOv3uoL/Wi6TPYRyYkEzdTWJ2RYVTE+jHx49Fgg8FUq5ykpogosGxIOJuSrlmc/Drejt/R1spdhnoMcTG2+5a5taWM3Gkil2DFfgsTCZO4PXRYgFLGgWRk+nLpS7epJQ4MJ9SkXhHRJdcTybMDmWLkB3uv4nR/y6jdTcL2pHhPOszkCHNxzH2gRXtVz9OHlaRXykmV9CjaJqZtCOD+Cg1syvUh3cDfDB1jGSncOaVHBceCRpW++l4ct+PkoXh7LwQQGlGIMXTDbzvIsXcPY33SisDfhARfT2MjbP8iLgcQrDGgttWDVs0Gk4v0hIw18LKAgOLKkO4YElk5uYM0guteFuD8XbYGLNUy3QPIX/fRzDerKD8o5J1zjBUYRnsfzGMTo/svL8i4cVXDcN6i2nVdjLVZZE0Hmmgjm8+FW8mYnpUisGcwRlDJnPvjSZ8rR8v3V3ELhGjbjaIO7YS8hsns1Xg+/w0Ox86h6K4G8WQdTIuCn4wYXA609NsNFkwkAThnd8vktNYraQgLZbnEQq+FBqo9UMgi4oFVo/IRpsm5G8LBb1L/Jh7cTDHOjq408yBXOhwp4U7qlwbyYFXUPG7gsSNIfzbSMHamUo2JIko76vAqY5CIdITI2SlYqwB97F6nhvUrJzqpEmqgeXt/cjJsnPxixxdKw1P/vNkxmER42ppuenyov1zMW+3a5lx3Zs+jYW+MFXoKFF6esz2Y1K6jeHrQlgpsFZJng9Xwv043lbJV6sP31ttLP/HTNIo8AgwYx4fSud2kQTURNHITcLrEhF5FTpEKj/y3cLpFKPkaJmVsjHRzEPG6WgpXcLF5Cw387HCSPkfgXwQepP4UBAn9gr7dhvxqath34rRaA/6c+V5GjWzQ9iryKRwSSgX2/nQaIiMv2JtTH2bzbbZDtakC3vys7EZBhNdaaXZMiXBN+xENE3A+iiRX49G888NlcAh40kojmXc0UTqPCpiTaNhHFs5hvtxyTz81Y/SuGxWvrZS0zOAJpuD0LmN4fJhI5a5NmYdSUT2QCSwTRodXnhzu7kwfx2ctJobx+6GQp/YlMG4kYl0vCnw148i7jwOwT5SRsL+DPLaZ1DRJp2d6jjk84cQ2kDClht6QoTcXXIyhYJ+ZprWCmPHIk8GPcjlWd0R9M2RcCVB8MpRRs5sMxIdOxx1rIWvUSL2C/cq6WViYp4Xw8UKITu8KEfOtftqRGczyGzroOKlCo3A4qXuwvnzDbw6p6VpYgob1jtp2EHE4xapvFnhT3JrDe8FPz3kFcz2eoOY7rKQjoGwJwJr7TZQOUfNX12UfPbxY9deI4ceSYmwRNNpXRQbB8eQf1NHQaKG8Lc6ttc3EBevIqaBnq6Xw9HbE3i8PYxn10yoPorIcrNSa5admIkK3K+YufSHLw+6G1gyTeiCVVqOSQL5ZjdjXW3l7FIJXybZWJcWx4PdGkJy9bT8EsAWuZ55taJpUxiHSzyOB/uFvH1hYsqWwVTYTQRvElimQmDHdAfzhQ7QWNCSc56dyN+VTH+WS8+4JNrlJHHJqwRj6TAKBT4tjwqgsq6PwHVBDJ4XxtTDYh72suDXNobNe8aiCYjg6Z4Y9hxMJvw3Nfc99CzcncLD9loqXw3mzp18+jZQkvEsij0NZWxfIHjkL7DEnMI0tYtV/YoQJ45kz1gVc1dFs/Z/KYRmGQj90Ui3aQ5892bQo08ReTd9OdAxAam3mZthXhR42Emsq8ZtbzJVzYS8jHQRf9vJjUESRu7RYhI6/JZiIVc/euOeJMG5Uc+nhgOZOU1OxcMUnNU+fJmfTEW1wIMLHWwvlPGD04yfLIout4ykrlMiEjj721MXcSfNzLGH0ear4NF3LVy2Wdm/QM7IJA2mpi7ueNio7hTNhtdKyrMH4R1kIGKSjlCr0E8aaPj5hom5U624dY5j4EMlV9r6YKntg2ujmifLtKyta+aROZpRAqtNm+VD0zgLg6Wx/H7NSFo/NbUPBrN5r53qKAtHXtlp21/Ef27xpP4VzL71OjZlCux2dBIzzgt9pTV0+SONS+Oj+bRPQdcyofM+17KpqYoG5HCmJJ6yp8EkDdUSODqCuM1JWDc4yTCkU+VWQIuTWcxzZiJdOYBzrx2EVzuYkJrCa5eGla29KXqrZGrdycwckEpFqY4y93Tco5y0bSei7mkZvWd40cUp9KWJk4n3SmXVagWdD1rAP52Fc5IFBpez9pMno1Y5iT8r6KxIRqJc0E2eFWX/dLqPVzBLo6bxKcHHbovpEF1Cm6ogDndUETcjkdllaSiqRZh/kaD0GMCeBQaWuSfz4nIqFw+nMLC/kW+WTAIEfzBNkXLdIuT1Ny8hn32ZI5bQ6InQT9alsCq1mPhFDoYfT+FYi2QqGzgwNtKQc0DNgK16PrQIwTtBT6saEznhArsdC2efm/APRQ6iZxrI/WkgDV74ciMglGN1hQ7jGcDRl1Iqdug59FnM/pMaPv4XyyGrnbg5Rra4CdkgZPXP32dS66GDM62SCPbTM+OrkeK7Oq5MD8DtXSCpPU1U5yWS8rs3vymSaXo0lG9XA2iQJMzZB3+aegdTbLHT4YaF5upR/LYrDkFGhOULDF5hQrTHxEjfQgZdmET9+VPo9C0J4wWhJ33nJOJSMpIiJ/0rU+ikLqFJQxfjfVNp3zKW/wNGv3OCAQAAAACAAAD4QAAA1jgAAA==eJwtm3c4Vv8fxjNSSkIkJHuvjITneW4iRDZJIStkNDSlvam0i+y9R0mK8zlNtLRsSdkzRUM7v+f7+P3ncrl6Xed0nft9vz/nvEznFND9ivkozWtniTow6OHLefAL72U9OnqH5FfmYlrHVxbD0pik6efCV4obNTJF1MXKHAisnwH3pLmUp3cOdM7NQvoihaoixRx4ewugTcPRWIE3B1Vec7Doww/jvlfZ0NssCFM26697Pg4pvGXx2jPorx15ODu9j5V16Q65IZAH9RPfWHKLjEnn1lxo+XFDKLmQOvQpB07pM7A8T5AKOZ8DrmezoJsrUxXskQPPOAEEanoZv16aA78rc7Bw06RxApt7Om+K1fwsHwqmHSyb5Qza6Wg+jIL6WfpX7pA1z/IwQ+g7m2tEOnjyYMXDg3jDAup6aC5idGaCoSFAGc7MxQ+X2TjMJV7l9SIH1xbOAe+8PcbXinOwWlIQit/5TEqicvBVfS6Hxf26AHPC37P6FjLoxWcKsC9lkDXRSxOT+nycdPvJavtjSPyn5yNVhRe1JrnUng15+ObMD4FhPorJm4fuCAH8DeOtuvgkF3pGgtAeTzEuycsFS38uGkLnm0juzIWimRCHtTOgGJuKe1nx1SZ0jWIxLn8bZd1xJuSgVxFePPrHGlypT3IOFEJzgA9yimkUV2sB7gsKAFJfq3ZsKoC76lwk6xVWLtMtgMOgEIrDvhlvmFuAje+EsTbS1GRzRz4CekU4LLuIG9j69RNr7xNj2lHtBu6H/mTtenaLlBuWgc9hOg6kqJIczeuY/CiAr0GnKL4N1yAvKQLvq7lV5mOl4FEXw2N+X+OYolL86pgPO3LApO9EKZqfiKPpdKoJ3+pStN5bwGHFn7yLpR+5cMB+KR095y4mGviwx6yIfC2gETE2F2Gb5pBsQ4KScXFU8GpRP/QoHDKSxqVNwcYkuQrvmbK4+qTBZK59FWTfykFKXZyhqVCFoXJ5SFUqMAS+VULxrAKHJXnyNRIL58BcTY+elvgKi/pF4MN9ieQHvkCMmTS4BPOp20vrsBjKWB5hYVL06ikUuzQw23Md46TIU1R3a0M/MI5RWfYEORvYf7W4gLHy6BPoquji+UAx47LXExxv0eWw7Ld348QpSdAntOiz0l349FUGvnJ7yHGJdzhvo4FovsmqakY7+uYuwVj6PobVgTY0fDDBp6WvGJfSW1HXy8Iy/a+M3KWt2OZsCsn53MxevlYU/TSFvBsPc39vC3DajMP6yBzF1jF5aKqo0ygfwcOzqviRvJb8UB1E0k0DvBAtMo5s7UWrpCl2bK9l1A92w1TREjH/+Jk3fnXh6fwV4D0lybwW2wWpbTZYlSrHtPTuwoY5trh4Up55FV34GGvLYR2o+IyZ6Uoouq9Cz1w0jqZDGnh3w4IsWDEK401GeHzlhwnj9hBWr7fAgWPfGUdLB/A80QaG8nLMCqoff8/awef6YuYnh35Y99gjVWcpc55sP67ucEBh91LmYt5+TAw7cFgzRb7BbZsy6i8r0zKRX7Bolyb8DY3IpyOf0P3EGEsVdRlRrSNYJmCJB/kzmS+rh9DlvRJzDmsxt70YhOYqB1QXM5mtfuz7kO2IqDFzZq7+IMYMnPDltAVzaMEgJrKdOKxpPBN4dlsZLguU6djQrwh/rgm59frEImwMcDBBpps1Q/TmBySXWSJrviBTJnkYwkJ2qL+tx3ydPYS5/I5QuruMed54CA89nGA7Ys18MnsI4gNOKN+/gnlofBAb3J05rIfpE2AMK0P6kRLtPPsbXvBr4SLfYsI/fRxiBSaY0ezO6LEehZGSFfJahJkHtUaQHGOHPXaGTG7DYbw87IhtupZMsadDUH7tBIbtSmZe0hDc1zmjqWkl887hIdjUTbFCzPJw2ruf9cnImn7xIBdBqqOs2oG3xEsuF3FtP1mXrm4i3NdzEKHMg/LySapsfQ4kW2dAeF4M5bsoB331s1DwYB6V+TEb9ezsdfRIq+pgZ3tjyhysfvCvMu5CNl5J/D8Pt+Yhur2fVbjMmnaZlYeO6lHW9jkd5BI7258c/sXadnsT2f09B88ieMDaPkldSM7BCfGZqKuKpiJccxAiOBvnheZR5fI5mFcvgNU/U6qy2Nme1ToHInN+Vi6vzUaQ6xTrVl8eTv0bYN13tKZTS/NgrfWJZb2sg2hq5eEA/x9WMb2JTMTnIlGWF8bJ/6idMrkoKZiJHU9PULfrciAXPxuSjsJU4tUcSHvMgVVFYlUHO9vneAtCIuxDpSszB/7NU6zswXxMMIZZYy7WtN+tfLzcMs46PvKW3NTPx3anfyyfrI1kfWIeDi6fjjkWf6h1i/Jws44fK5KPUdfZ2S55SwB8G+ZQiZfZP28XBBV3qcqfne23d86FwIXXldVLc9H9YSrnS3YUYSznE2uZpzUdZlOEOf0TLFO9t0T2TiEi+riQqhRGBhYU4jn3TJRWTFDbzxdAJ1oAe2wPUl2GBdi6kZ3zMTxUxWQ+5JWEkTTncFX3u3ykKIiA2/BkZWxqPrQuzeOw3u0qw3fH3yy1adb0Rssy/FrFhXGfNlKdeB3b2magddKfXH11DaLTBaHg2kd5al5Dy2kR7GP5ULX3S9EZJob0M4+rTA6XYpmkOKZtnFOl612Kj0IL4OW42LhKqhQdOyQ4rHN77+DT3xnoq7GkPRbdAdej2VjLek1Yi2jcPCcCjyo70jxBofTvAojfraDuClMISZGGlRAf1X60CnN2y2Lf5YOVxgZViFwgD/FeA5PffFVw41KAX1upScr9SjxxVOSwcgJeQcleFL89zWnPrJcQX7MAzZ00ufvrOdKnySLzgCTR1azDRmMVlJXJUE87nmKegSbWSEWZJC16CgVxHdQyNBjFt57ANWcx5i3yZ+QdfILsvbrIm32E8c/oCXrz9TgsNf0uCFbI4fFr0JELO2E3ooSPJwtJc0MHfitp471JM9Uf3I6gr0tQKTjThEHaIKvNgEF6JMOkvhVGIoDH7xKG89pWHL1gCt3xR4xdC1shvNYMqXItDJPGFgRuXMZhBQ6PwG6rOtxkmbRRwTDmvdHGny/JJPL3AHalLcUF1gXqi2ofroyYQum3OkN/eQ8mV1mC6qIZv8y7sYq1ApNDo4zoB13gK7fBwlRu5uChLnRvtYWIAz+zxISd+btWclgu68Zh6aiFWm4TeonQGJomdBH96CLZrTwKN28GjJssqKWSw5BRWY4niscYpyUGQR6w/03VEcbsuQO4ds0OWYUCzM+n+/FJ3gFRNeJMdbt+RL51wJFeaeYjvn4sb3HksKRvf8F1A23MbjCiPwZ/xsVp+nDYc4boBX8CXcFE4C8hapH5Byx+aAn9mBSG3JJhlO1ZiZJnXMwXykPYs8UBT/YtYPZnDuJMtyPmrFZgygQM4niCE/iV1Zi/Fw3i2rmpPDyY9xXPDmmDz82IXrbmC4bX6eOL2Wmi5jSGMWMWzMy+V+2WG0XMeitMM8xnNMwdgYS6HRTG+ZjC04YhJ++IxVHSzFd7h7DskhN6jFWZ85lDKFjpDMaQFnP/j0EImblwWG+svsH0tjbKuIxorZ9fcCVNH2HXT5KO4TH0XWLh9bq2KsGKUdxvsMLa+GuM0vQRzEq3w71ds5g+54dhnOCIvveyTCvBYTya7QyRUxpM+vkQtj9wxj4FXeblk0PYenOKJeqciwyecVbjt1X0tVs5uDT4nbUiho/21cvBWTkuyGwqISPZ2eCpnQ5bt1ByMjwbv6P5YWKsQAItshFoLYC1GSOU38JsRDIFYfO1hGr9ngXp8rloTzGgpsVkgf/ZVD9UP8zOrqPjLJ5Z7vTA3xxsjf7BulrER0vvy8GSbVwIv1NCGN+zMVeKD1U3QwlPWTZsGvgxtk6BHD+QjU0xAvAoHaHk3LJxLUoQMe9KqBNa2Uhm972tqgZUF8mCOd9URpV/zcXc0s8sWs+dXp2Wi08/frIUR/joNlX2TNHhhqRdKWlnzy+bTj74rA0jUc7sfn5gFjKuKpAj/DmIlp+D8bIRqqwhG3yz5uJvdgkVmZeN43uEkKOlT+XpZ8M0dorl9i0PLX++slgb3OmV2XkoXvmHZSQwg+5hzxQNDx4orykldeW5YM6YiXDtMPKPfc8Hs2YjxVqBqLJ3h3WWgojtHqb6X+VgVF0IRjeLqdqsHHxJEIZW/2LqinYOwgpEOaxHewshdv4XC13u9DLdQrh9nYavfjNoVkUB3srx4VR0KSldUgC3ullY9zqULGXvNX5BgtDaLU827snHHx5h8NKDVIJpPrrYPTZSp5A6I5SPD26i8BhVp7rYO90/X/Gpfrj1OorseaBguJoelbsOb/4ZmGs3g9536RrO6Qqg06OE5P8pxa4mIWSJBpNle0tRGC6K4NmLCGFnuD+/OPos3lMiDSUYGloAV/90qiyxBNPdJZFgJU6tFy3BWm9pDsvMn8YHXkFUrl1Nfx4mGOgUhmTPdNpDnmBEXhyaQ3mk3o4C9zspaK9ZQ07GV2H4iAy4peeSxSJVqFeWB1/yPWqypBKCMxQRGnCYOhhYCa4tSli6pqLKsOY2RsJVp3qUzkuo90li17NVdMD6FwgXksFO3mn0qOxz/BlWxOvGOCLb+AwHtNWxrV2P+NU+ReQibRzTeUldmc7u9m8Xo8E0gGLufYLMh3rQP/Oy6t2CJ4hRM8AFhTATeDxGy7ylHNahnvdY3KzKfmZd6dnP32E6SwttPF+JtGwH5nnrw3f4ODELbcfgoBF6BwSIgMAbOM1mIV33ELVSrI3dbU3R63S2ii+0FVZNy+D+wtokYKwFpxkWcGbZMmbNb0GviBWHlRs9DMMhXTzydKb1HYZQFWuIFzHDRNNnAJ08LDif3E74g/rg2GIOA69u6l1zDzzlrWGzRphacq8bMwRt4ZUrb2LC1Y1MfjvseyTL+BLFnlNb7bG9Ip7x4FInZJZN9d7LE5/g/9kA2kcc6W8lH/Gk3RgBrt1k5pUPMK03Q8VpX6K6fRiF061xo+c2JV43CMd9KyGxZF/V/dwBVO12wF/5zyY7uvqxd48TUjI3M3659yOgzxnp12nGvY19eFfixmHtcfiM98NLEG/rQA/yjOPZbxNsK+ggsm8/4oiGOVqsVpGqfDY3dgUGj6VTJRPDsJO1h89gTKVi3RBy1Z0gPk2ZkcU9BG99F3y8Fss4tHMQw6mu2PL4NaM5dgCHg9w5LGN8QZypIXge29NjX8bx3p+B3WXt5F7tJ6DEHJMnnMi0M6P4oGQD27I4qrF5BIE19qg2mGU0nT1bx5qcsGXCiBH8nn3/u1wQOH6FUeUyhGOObvjs+obhHzoIWbHVHJbs2y8Q2mMIrW32dPuFzzArYOC7wxvi4z+GqpkWGF1sT+KUPmLhWRu0d52jpMM/YHyJA0bsdxkzMYIUG2f8fWvJUN02jBp3VzQsSWZY9Q9hstoN86Q7GVb/BlETM8X66p4Do4TfrD3hvvRGdp7n+3KBN1+czpZn5+pMPhifaSEZp7KwTGgWLvWnEmHNLDQEzcHM8e3k8+dMVKgIoXsA5OfdTGhEiuDcelGiE52J2edE4ff8IPWqKQMPbkx1tuMncrBx0R/W1RO+tOhwNqTKuKDVLE67hWTjwBo+bP/ZQrTfZiEgeBZ0VqSRl1FZ2EnNgULUDrLEOAtvtwvB2ciUNPzLxL87Inh7UpTwP8hEVb0oPmYcpAr5M/FkfIr1/kcOfjv+ZQXc86V5Y9gZvpEbA+oLaG6BHIyJzkBJdSvpu5QNZ93ZyJ2WTkp1ssF7UBDKB3eStDdZyFMRRleLKdl+Ngsv/efhb6soqbHKwrxwMTDtD1KRBzPhcECSw1r0PRc/iidZYqJ+9OJTuTBL5UFx5AL6mmAu3i2fCQP9NuJ5JQf8vgK4uyKdbNJh34fiubjbsJNUtGajzFUEbj9MifzpbDyKFcXhp6JkkXk2FK7Mx0VqP9USmYUXuVIcVn1kAc7d5EbFaz96QKgA8w/zgWksQa+7kA8Pudn44fSGqInl4/LSucjnziCReXlYc1gEjzJ2EXu7PKxQEUO7mRlR+s3eX9h5Hp8sSr4U5SJkgwQ+G0dRAW9ycDdyEYd11v8aPg7PhO5Vf9ruWym2PRbAg98SdG1IKYTWCmNIrZ3M7yhBur8Y7i7OIO98SrA7bwFiJnYS86/FaLaXgncDiNiVYojESCP5sgixZBbj5gUZPBDaSHU4FEE0b6pjUwyCJ9yieJIWQBsVUpjHuwDPzSXppeNVWJm6EGL328iqpVX4cE0W991SycC5Svyapohq+80kkrsSCaXK+Ni0hHBF30bxuCpU4maSQ2K3sWlSHQFjLGr1eAX+SS7msI5+fA7GNjk8sg2gi4SfQ+qZEjY1zqdDPj/DeK869u99QVLbn0I/WAfRT8+TlSNPUP5DD7u5XIisMrur1ywBrStOJA49xuoFRjDTrqfyRh4hSNsEoS5bqvKjavHXyZTDCj72DvtHdHD9jh+tHtiB1hMG8PkmQnd9a8eaR8a41PuAKFx6gytbgQCxo2RfQBsuq5kDRw3I+vBW5M6zhOb+cYo/rQUXdluDmXeJOjvcjNBEGwiMRpgcMWxC08up843H4kMocTPGCWtf+l3zAO7qA4HJc+n+Jf3oKbNAza1KMju7F5/OrsATi23kjX0PbILscMZzEdli3I3qIEdcVqymTN27QLc7Y/1iB2r1mU50znDDswBRxrnyd2izX8Nh+R74iI4YJi4Ur6OzdUdBly6DoL4ArbVpBFFp1pi54zrZfGcIWS/toDrmR5RcB3Gizgm7+wWIpd4A8t65QnhTOrXYqh+zvN0xGctPBezqg81ZD+z8uIphe64HEl3eHJZJ0xg8L7Pw+LA3LXr0E272mMNJfRbdeHMUVlw2kIwvIu9/jUDZ1QH1D1YT/hPDuBzkgmn3ucl53yF8P74KoRdiqaItg/AQ9MAJ5doqx9QBuFithWx0JCO0vA89aT4cllX1OErGWSib7k1zbxtDhosF2uz46cdpH/HguA1mxBSQqK4PaBhywMadrmR76AgqZ7hi18c/FJf5MLZpu8NO7RhV6zSE+5UeuLMjuyp2/yCYX9dC4NoRxrEL/Xjq4ju1m/t9hrIesKvcixYXHodGqgU2lc6ko5ifMNJtA/l5+WR31CgOOzti9y4nUs31AZt3uEKB/zsV3DoMn1R3xL/dT8Wxsz1Vcw30bc9W/Zs3hM0bPHHpdjQjRGUA555MsaRcsuEkxIM1FsF0d2wWfGk+xJ2Qp+O5syAiOxttdWOkNIyd5x8FESleSRLGMnBcRQTO0ueJU3IGRmeIYfumAFK2KgOrbonD7LYm6eDLQEGwJHhWm1Ke09JxP0uOw1I6nI2vrjw47x9Mi73OgqfQDARVydPV1llI2zobWy3GScftTAhYzcXwyUpiviwTQodE8Hn3eRI2yOZ6iaF+IIA8jc/AzOkLsPyrJik1z4BiqSS6m0B91ktHYe8Uy+JzNhzGeFCXFUxXsXeQxy9nYMlCBVp1IAsF7C66V+UzoUOy4CEkhPuhVcTpVyYKnOZhgfYFwn85E8dl5+NY63oipp+JK7cXQH+LFrGpy0CzqxS+17Compx0BO2Un9qJPuZglcp0mM7aQC8Oz8HfmfyoOqRA2wyw946QObhe85nMYM+yYmthpHZUEaUfWVhxQhSPoy6QFeez4OMujgr1QEJrsWfKqAT09moR+5pMxEUvhNoKBqWRmIHJ/Kmz5fch+dCSZGfv+Aa6aCQPvZOz8WCvIr09MA9L1gpB1vsr2dmTi8/6ooieQcixjbn4FSGOo2YXiS9XLgbMJLGZK4hkx+cgtXUhBHO1yGyNHIxvk8HMs0uois9ZmH5FmcN6ZVUKvwOC2MMbSrs8ZPfwnSKIua9Ec+mXYP7d+ZjlP0G0souRFi2JfV406ZAthvd9aRR8vUjqsougc0EWu1YFEU/tIrRpKWDWT00iUVaI1BdKUPiiQp10LMB3Hi0Oax4/BbnvEriSEUYvXV+FPuFF6JqtQs8sqsQeb3kwbL8Tlx+3cV5dGWUPCBF2vI2D4Wp4qHyB9F6/BX4bTThU+5ICyVtw+KQNk0wlsvxABa4m6CLmy1hVRE053n4y4rD+pdZhaEIFtvLhdPKNZ9gboon+BUr0p7SnOKmii7awT8Qr8QnG1i6B1bEykl3yGHHtRnDfcZwotT+CWBsDXtrWxEL0EfgvA/MXzyIHVtbC0nkZtul/N/onUg3b5hUc1sSCDuz+ZojnVmH0so/t4C1h4FmyPP0g/g2KD5lhh+YAsV7VBu+Xy8GjmEdGdFqxYcsKmF3YQd6rt2DPqZWQNtYma42aYeXrgF7rTuq0ZRP+6DojpOyryc3L9bj5x4PD6o4bALPcDIFmofQDh348KbUEv44sXf2yFwm3bHFKr5PcCezBE01HvH+XShbKdOPmkAvuRASQWX87ESvljj9qUsRx/D28edbgJlclJdD/Dl79nhh5bM8QG2tHxmAAh/XsxwcYiy2HXMcGWjhzBCqrbRDAlKbHeYex77EDHs5rI4yDg/gW7Yowj3gyyc6cJyGrkSvtRrJ/9sG1eC3M7s0mi3t7MZDmDQuNBGrXyx54n/HFpUXHGVJ0JxLKN3BYW+0+IVffElceB9PzvowiMdkWrhFStL3dB4QZOLF3/kYy/e4wdgqvQnvnRVLhMwRNvjVo0lxJZmgO4upqLzz+x03OiAzg2Cof1JnEUO6/+nBopT/kmy8zFnR04/TpUA6r0mQMp+Is4e8WTE/rYs+yeSuRWyRJ/zUchcEdJ6ziaSCrc0YwlL8Kwr/Pkw3LhzErbw3Mfa3JO8Eh5E16gTf6HzXz6wAkuH1R+OcQlfmmHy9+++N7WhIjpbIH9ivCOKy4ljH8e2sJQf5gevX+T9AOXIlnMpJ0UP0opKSdkXfrNaFNP+CaiDvu55wj+98OQ2L+Wly6v5zI5gyhc4s3PLb8pG6dHETxDl/MU4iiqrYMYH9EAASQzthj34vimilWgnkWxFbOxCOJMNpvcyb6+QWw9KQq7d+aATcHIUSp/iPGrAzMExLFFaMa0lGSjmZ2Lk3+uUoemaejJ0ISDsZhxKQnDZcvSmPxbBXyYWcaqj/JoqX/RKWEQCpOsdQ5LImtWWCdm4kVjDA66HomLqwTQM9dVbpuYSb4M4UQnfmP/DmRgfUbRNF+rYZ0/UuH4Q1xzPRNIINn0tH5VBJBt8JImnI63vdK4xlThfheT4OEsRx0fQ5VWrJS2R17ijXRmQW5xfy4cziM9rDNwqjcHHiqqtEnqzIhHiyMhnOTxJ6d4Z8NxJCUWEs8KzKwImYB1OUSyRv29f6Nl0JHaTi5eD8dN9IWoSBdhVBL0zHeJYcdEkGVCcWpmCamwWFZv2HvJptnQelzGK1inY0ZAYL4FK9GC97OgnWuCPJlp9GSi7Pwaft8xEs+IoR97bOfSEBpayK5tDQTEey8vfY9nIRWZqDzvQzMYlXIFq0MfJVVgOgCtcr3SWlwddWcek/klIdZO+dg1ng4ve5eLuo3CuP1NXV65eJcTBaKgcXHRU/PzoHiTgn8DH1Mbsvl4OKThZCxSyLcGdmoa5PBn8cbSY10NjZ2y+NSlApZyN7XJhWVse5+xa3r/Rm47KnDYVXLlCB/lijeLdlEt58sRqbIApw106SXfy5CEWshbnhw0xVeRYiekMF+x6ck9VkhxC0VILMpmSxlFqLbQxkDVzaRspwCmG5QQxZRJi+nFUDmpiYecGUbX1yUBzEJQw7L62klznbJIHvpFlpHrBKiAop4JatNK3vcxsklqjgRxkPHpd7Csk8auPnqKUkerkCItQ6sIpOI2tIK5Ifo4f3PEOKz9yaSo5egyk2GxBSXo2HQCN1v80w+rigDd4o5h2Wz/Bkeb9aGp20Evd72KeI/6WHmXC1awugJXh1ZiiPh0+gc3cf4nczAZvMH5LzJI6wxMIXeggskwr4WeVHm2DTdhRStrcGuCvZzKs1LrB2r8dXABs/LQxmSivfhs8GVw7JMaUfJFxbkJrbQtiFvkFthjvlRGvQKqTa4uFtDOfMXCXvbArfDK6HwspJML23GpKEj+oWiSXhsExYnu2D5EQYZCWqEy89VmB3dTMnLN6AxaQ37+brF0NZ6iVl71nNYgvz98J+xAlkrttBat3ohNtseC7LU6H8WPchpcQaT9xthdXfBTskdrIYygsud2P11DRykDpKfbu+ht80b0XLqxFXoHZ4M+KKS9zq1I/8tvuWuh5XnAGOxYSt0ebdwWJ/8RzBxcSUaRTbTSexsX/PWCY+5VeiObYMwmOMO3/SPRPpnPzQy1sKcu4isTezDwkvr4KSwleg49CJGyR/TKqVI4d9urMoPhP+Gi9Tf6C4s3BOCFTd4mVwdb/FFdQeHxSofxbIaO7iJbaINXT4gyMAFfBuUaLGqYcw8vhr+LcNEymgIw/peOM2TR6Y1DmC9kS+sJUPJpkP9EG0NALNuHhHT7EPwhmBw1x+hPl/vwQvrMIzLz2EeGX4HFcNdHFZZ+keULbbHqoKNtJ7pKIquu4CqUKSRNYJBUQ/MXzpE1ssM4+dLL+xwyCG/bg/CtcMXUoVB5Pj6AQQfWQ++YCFyek4/FktsQCQzijp+vhdb/4UhtEaI+erue1yeEclhceETZPfYQzlwI93RPoqr7L2g2VCRZrCzfcEuD7jOHiTXbw+Dn+GNZ5LZRM15CM72flBauZ4M/B7AjYn1uCQqSLSz+nHs7AZslYmglFT64BMZjlHWPOYPh06kX5xiHVHNhNi+OahVDaefrsiA8wphpEOd5stOh+IZMWRfmEYf+puGP/4SOF9XQzI807CrYyF8HK8QhdZUfPOWhXHLarLPMxUKsopYPc5LDtWkQNhRFcv4DBj6osmYnzz1Tmr76kxUPpwDuZXh9K8Ydo6lCOPZdnX6wWA6hPvE0PFyGq1gnY4dtAQSzWtJfUEaspnSkC+6Qij5NCyqlEWMkQfZn5iKcxGKKPjLS+p+p2B3nCqSZZYwjixPRkjXFGsWuw9LBwsi9lI4zS2XibYgEQS+U6fHj2bAomQ+Ciy56M5P6fh8RhIyqo9IgG869CQWYZVPHFF+kQaz03LI+eZBCrTTUKGlBF/h6UQuMhXXWWroP7WU0VOWDP59+hzWEyoLP4rnom3GRlpHKgudpfPg66RBvz6QiZwJcTQnctF/hzIQ2yIF1cRH5IsHex/xl2Hv3nHkfnU6ljbJ4/GkB+mTT8fTnco4XMhLQkLScO+4OvZWMxmRySnwfWTAYa3UyMXTxyIQEN5Ei53Jwf4X87FqkybdOJ6NqLlScDzITad6ZCNpdBEiWh4TmwdZWBMpD4OV8SRLJQt+o0qYb72GMPZnwu+8GliveUgmlQGpLC0YT9ow0tvS4PFp6mz54GgRAk9LwDxiM829sgjL06XxYaE23Z3DzvDncvgyzENn8xTicoISXJ8/JeXrCpAtp4Zau6tk+Ho+ZidrYh1rDcn/nAcz+8Vw9OYio6J5oLcZoDQlnKE/lA0f/qnzjcIDt3HjvhLMiyJoO/oW/CbUEM1cTP/5VgGrRdqYozOd/qxTgTfDuli87RlRDrwJt31L4CgZT/6dKYe0gDGKuFxJbNoNiDQzsddulJKIKUOo/DIMDWUwKKoUYSw7Diuy/QnCOwyQKLGNDml6jEh/Y3hd0KE9qx4h+yML6se4aZWcWkQuMMdDo4ek93INcoctIXk8llTsq8aSLBvk8RoTP+uHkE2wR3hLMfWp9T6SFdjd2GEa8wzvHcjwr+OwwsTeILNvOVoVttEjTa0IzrNB1D5teunhFiwwcoDwi0lSYtiM/k0uaD1AkeTRRjz1cUddzRHyM74BFaZr8TpGjhxdVA/t4HWIGwqhLnm8wilmADacV2fW+j2Dq85U9oaG9SLX3hErb22l++b2YIO9GzZOatLv4ruwjXcN9rb/IoYanTi3xhuHZ9wkSvffYWugH1xEIsnAig5U+Adid8Jc8iK7HeqlIYirFKN25rfhMtmEY7wrmH4TDeDeupfDGqCHEDfdFd5ZEbSQ+yDuWntA+pw6/e1+P5b4eOPE+6/kKKMPFj/9UH2qhCy81wMp1SA89gsldUbdEGeEolGYi3w/yu7tKZugvrmo6uKWd3j7YhsWS3oxDQJa8YXr0NS7NoEPKLRxgyi1hTZPH0bHtTWQkVCjD/IN4WffOoiHjpPQ3QNouhIAr84CUv29D99agvGm358sC+2F4O8wbB78TDmWduPeli14W7m6KuFsJ1aTHSgLC2LaOr3BfO3DUx3g5wdkEjdoeGyhPWJH8M1gLTR2qtLcY0MIivLBrZFPZJnvIJKXrkehXT7xeNuP6EMbsOWaD7lp14e3heGY4/WBMj/bAy+1CMxhylYFhXUh5OBOCDWHMs0k2uGUM8X6c2kUvAKrELhgC+2n9gEBZ9eiZ1KFPn5yGGadPqhs/khYPwdRk70eETp5ZPn2ASR93YArO71JUU8fXspvxO3OAWpUsRcfsyIgz/Ot8tK/LoTx7MKnto3MmrR2SH+fYg3wZOBztgho51B6r0Q6zu2Zj7hzKnRFUBoa+yRRvvMneZSbCtaXRdATqiIZoymY1SoPSXKUtDmm4NRMFYguVSH6+cmozNNA9LE4am5XEowPLYZx5mVGsHUiXl80nrqHehkQ+SiC3dtCaeO16djfOB8t1WxWfhomIIWokZ8kbjwVJs4yuLm3irxlpELZRAEmPMdI6eUUPPNXgYanCrHvTkbyhAbeWsRRz0SSsfjxYlxdfoUxuDMRx99MsWJTMvDh0jwcpkJpvbF0VKWL46+aKq26PJ3dNxbi8NNf5HZCGurUZWFpRxGrT6nYLK2IzdHHyOSSVGTrq2L7VRUSHJiC9QWaGM2+QiUcTQZXmC5O58UxonoSkbnHhMMqvZCJ8z2iiNIMo6sHMkB/XoCui6q0JzMDz72lsdrrN/l4Ph3z9srBKoEip3vTcGyzEnsGHSN5qmkIOq4GLn0V0uGWiuK/WoiduESFbUnB2jt6yMpPYEx7moQdrxkcVt3vbMxl9+oXuuG0jVs21JUWIjhdjX6dm4Xyk7KYMfqHRP1kz7hcRew5SshNy0zIJqlioOEY2X0oAwcrNCG8TplkZqbDUk8X7o3nqEc30uD+fQniN2cw/v5KwU+xqeydf60QLF4ZrLm8kWaw83yFkgK8zTXoHIcCVOxQwdmDk0Ttcj7uHtJA7CRNxl7mQWmnDtZPO04mv+TiQLI+/IsViPaPHEjqGWHm56OUZ282Oz9ZuOl8i5H7IRPdu6beIYqr3YJSnAaM2zfTPz3Z2d6ogwW2WnTAkZsIljbAzZpp9O6scsSqG0H3Fk3m3riBPB0m7modIc/Ty/BppxnMjRaQiPXXsZJlifJIC0qd5xoeBthihfEI4+2BYnzSn3qvlxP4GIGmDFSvj6DF3R6BqjHF29OadJ1SLeQ3Lse2rN+E72s19rWswKhNOXlf9hAzFOzhVhtOSuweICDPGXKXRylW3j043XeHyOPuSvrZHax19MKqejXmeT8KxfeCpt4F7G/F4NOVsE2JoA/rt0D2hBPcz2nQk8+asEhjFSZtJ8ghn0YsSV+DFx8Kyd/2eiQIr8P9f6vIBaXXWNvgD36j61SB+EvEOm6Aj+5vkws362AevAk+QmuYP6weQyRlN4fFf7cb5467I9g9grby6EJzlCe8VdVpuefvsX+ZLyKdx0kI8x3Um9ajWzSbDJ1/C4PAENhuXU4GC95A2G0TticepXLWtkJkwXZoKoQzPNKb4HYhCpHHdjP7ol/hncYRDusF/yASQ9bCec0W+tGVflxJ9oHeMxVa/GMvsu+vh3zgCAlh7xEnr4bAa38KaTraBT/HTZhoW0JOR7/Hbe9teONsRRlIduCKw25sbkpifDF8gys8B3Hy3Ammbl0jJsWOc1jfVw1j/T1PnDiwmb70fhB+4n5YEqZMH1w8AKXVQQiSGyQyB/qgaRmG298TiE9lD2bM3QLHldpk4EYXogx2YJqIIrXL8D3UbPZg3eQ1RinjLTIlD8HHIJZZkdWMZvcTU9/3LhtBq4kXmuQ306+eDsEgww87XyvRZhKDODUehPaKfqIX2I9rI2E4uvUqaUvqhcTdLRicrUEkLnUj7+MO7AoXowSFO+EpshcD5ysZjnM60B1zCMzks8zOwBbcbpli5b4dgfpZLzAGNtHWQcMQ4vKHv58SbXpjEKs8g4HSPpL3tx9Z3uEQ9Ykncw36cMQwAjx1qiRJrQfDYTuhFjabssjshMbVvfjrf5fx+moH3BoPwdnqPHPuUAsGtaM5rLeNaVhTIw4ToUD6Q2cqdPOlcKxQhm4XT4VXuCxenO4lb3VSsO+rIr5sSSH97slwuaGGa6+WkwPnknD9uzZCBu5Qu8oTMVPfAKdy46oY3Qm4l26EqMRExrTyq6AawWHlc6djTHAB/HUC6Ti5NNTzLsT3NzK0/dpUfH0kC4NvvcRsTwoaVitBsyaFuKQno01MHQF8lmR3XRJSV+pArOgOdaU/EdP3GWBr7eWqq8KJ2DVkhDrjJMbL7qtYIT2VUXEb07GkcgGORQTS626lwbp1IT4YyNKrv6SiNlEOApV9hEc1FWUsZexal0oW2qXA9Jc6Ar0sCZN9jZKCi7Fe4A61ZE0SVqkswVzX81U39iWiINYY9OVkxhP7BOQ8mGLx+2Tg9FxJ9v9fIO1VlM5+Fhfh2klZunowDS++yoN/Xj/pk0qDUrwKrgSmEnlWKva4a2Jpy3JyzCIFt9mzY4EKoXaYJ0P1mCEOJZyouh6QhLkjJrA+lsZ4tzgRe+Smvp1Lvp+FE87SaK4JoreLZCFplxw0w+RoXXt2nhsq45XCABmMyoBNmzqO56QSnYvpGE/UAV+NBemNTUPlLQMoH7pFWR1MhWWzMbqXeldZxaVA0xQ4opbHqFmTjJqo5RxWUnABGtl7k//sDfSXsnz4ZqnCo0ae/taTBzcHLWxvGyS13Hn416sL/WepxJ87FyeuGaJ0hRnJfpMN7yEG3l/Kp2xzsvBQYxks/C9WdiZlguu6JaKHCCOAkQEl3qmOfbP2Jo756aJWkt03xsohUbgE7ssV6VM/b0Df3gTn9YZI63AZ6kaATZ1JZEPJdfxus4DvHH1SY3wN011sEN54iKq/VoKYdge880k0ueJXjPwrrtA+OcZ4yJ5ZMbPXcljD3bWwubwMA0FhtGNNDV5IW7GfDXk6I6Ia8ZIrITPZSRq5H6JpkROk7p0lTl73Ib1pFQS2CZKQ0LsYcPdE8Nf4qgtraDSu9oOWRCwDCRT6g4PgY6jJnB9eCdXJcA4rr60ZMzJdcCA2jE472ARl99WQCZWj+T42oMfWCzFcb0i8UT1S/P1g5HKUpOq/gvq3IER7vKEa7j2HrPdGXBujTYKlnuH3922Qdh5l8HY+xp+du2Em58m8pFsLl3kHp85teLuQet0bh5aF0XfOvIfwFX+4P5ChFzR14HxBMB5xN5J7X9oR2xeO7dN2kV/lbWAUb0Xelnzq7qdmPN2yG6271zD2DDbgD+MgGnYuYDp5vka//BHEeuxh8vi8wNDxqex9aMXusXf9cNg6lDas6YVDZxA+20vTuh+6UeYUzs6R5+TPh078rI9A1UQweXfuHU4834XN6seo9Kx2bHu+H6HicYzmja1IEjgCCzUdpuXtJlwSOI4nQdHMvIR6LNkTw2HJnxvEuGoAzHaF0GmzBxAeugEe36Tofo0+yExshO969i6p2IOL57Zh2NuXTJBOdhfbDQvVQOo+6YB92EG4RhYzykPfIF/rKF65Mph3kluwxOIEfvyOZYpua8Q76uTUdUUN4W1BAIIXhdDzJwbQ8XsDotdJ0ffm9UM4bhOkfz4mIfy9iMF2yEt6E9/kLkwEROGT+yqq7PI7PKk/iMOjFQwN43aMpB3Fil1mTBv2brLj7gnI+Jxjmhg04R7zFIclIzYMUd71CO7bQPOfH4ScTwgixyRpneJ+GE/fDI3xR2Raei8ib27H37q1JEWvGzN6oqC61Zbao/weWxYcwlZvmhH0sB3Mj0cx+7MFs3agFfki0fDjvcAMv9WEyYtTrB2Jqfj2ZiHuGXrS5cnszvxeFvVMIfpVTjL4fJUhuZUiCXuS4MSnie4AT0KiEtHooIeea6+p5XsSYKthhLNh0yidlKtIi2YiX22RiQTvVcQFmOILM4Rh6B0PuytT56IFj1MxqSQNMSdP+sq7FERDDiYBQvSK4WT286SM+HsUGXmUhPDNmpgf70labifiV54efge+psyLE2AdaQSzr/+qFjy/ig31TBSoyZuc1bsKuWJTCNuGMnafisfczimWiV4aUhuk8eioJ/1seypEJeTZO7MQveFYCr4nqyDMhpAPO5NR5q+F0lZPYmydBK4ofRSceUX5ySTii5oxqlf8qpI0SsDAHha00zVMDiZdxbpVZnh3MZyh/i0emtEWHNaobDou68rg22tPellwGo5GKUCtWYiu2pWKgGlqmGNCiGlQCmwfa0ORz5O81U1GZrcBe99+QW2cnoS/F0wwxjtWZSiViNgewFjDzOTPvgREUsuw6mAE41rTVUiOTmXv672ZaDkuD8VoL/pZbQY6G5XRsUaYHmxIh5GHJtbZE8JdmYYcRT3MsF9D9u1kz1BrI5zb/ZiazkxByV8WFLmaq86tSMZRB3Nc995hIp+ThERFS7Se389I+ZmIcdepd4iqovl41qjG3um8aWWPPIxoacN8tgh9wz0XShn6qPhGkT65HDzYYoyr6m5E5VYWKspMwZ17i6p1ycTPk5Y4bxtdVWWeAfdRG9jeeWISfy4d62vtoM1zgWHanIb541PfSKd4lGOL7FIc6FhH80XegNdJBrawROh9FmVwnzTDZuZtov7kGkbGreB72YI8m1YK+0P2UPwUQ/WYFuNRhitmTEwzSfpcCEdVD2z1sWE0yxTCmc8Tfdn3GenWBdgnO3WW4u1ag+J31jhr50NfU6zG8d12MJk2l846+ABnXVxQZ1BA3Pffw71GDyxKkCB88+5Af5Yv6g0uVr2hKJSXBOGrx3bGHsEqFG0Ow6KVzxlrBSrxgN2Hh7RFmK/5b2O6fcRUF1VuwvmNa9D0YR0dfqsBV+TX4fJSAbrywWt8+RUALYUUkub4Eq33QvFvrJ/6tawOQhe3otp+0KTT5glONezG3RXvGC5LH2HH+/2IvinOXDqjFuf6DsLrtilTs7sa3HZTu/llk/fwebEeR13X0eVFHTApDEFtGT/97Fg7RPM3Q7XpEvF62oqF5TthG1NKebk2QffnfnDVRjFcx1+jxfUI0o1FmOeSXyL06zFYDBgzNVxeQGjTCUis8GFeX/gclY+n+mH39l508YWAwfCmz73pxnupTTjxho/uOdOJbbu3Q6jzNBHI7cDJ93sgNe8EdeNnG+JwGEMbCxkOAc2QMTmO+/fVmKfHGqD3IRoVz52YFexs3xFyEs9jtjMHfV/j5Z2pjHKi+lF/OBTe4V701UV9mFGxGT/CptPWT7sRrrcTVtwxpKDhPV7f2YcDeoHUxOy3OLfyCPKqHjJMPFrZOXwCbsGGzOyGJuxUOglxcW/m3N2NsM85hSuvDzD9zRrg/vP01HVlDUBdIAwyol6058x+LHLYArM6Xrr2Wg/Otu9Eo8cJElzeiddR+9HW6koldr+FecURdH97zohVaEPVmxP4U8VgKsY341bGSZyy9WdKMNk7kdJpdDgeZv7kaUTsrtipXQ+DsAoNw6V2T7o3ox+vbm6Buwcvvc6mF0zHXdilcpxE2HTB+Pd++FVbUwciOnDx3xF8+N7ICCpsw131aKitNWW+kGrB64mTqGgIZK6424T8qNOo/3aEuT26ES/qpljd/MmIGFDGfz5soVQSLvFp4D8fdu7pBGyq18N/Puwu76sY1DPh+LD1m+ORwTTl+LB7XsQhhGnO8WFTN8Wh96MFx4fdYBQHkffLYbYs1cRQLQ51oZZTrCXJcFiigv982AnPJPCHaeA/H3ZrcwKELfTxnw977fJVJMWacHzYpNR43DhlyvFhs/+wWdHmHB/2eFIcfhov5/iwdkFxeKFmiRw6zWTO6jgE3ZxiZSUl4/SQCv7zYfeNJWG7iyb+82EVDyWi0soA//mwwfMTcNWHwfFhLwlcxVlzM44P2xwYjwtLLTg+7KLp8WD1L+f4sB/Y13uz0RKLBzJNqu7Gwd9n6syhkD079rmr4T8fNq8jGUm1WvjPh60PTULb3SX4z4dN+5WA8VYmx4ddOXoV128v4/iwiyyvIjd/OceH7e+Jx3U3K44Pe6s4HofNrGGeVmASlsL+/WPrqd7bkIa015r4z4et105Dt70u/vNhc0tSQDkZ4z8fVlM7GaKhZhwf9uD8JKy3sOT4sLkhibDUXMHxYffyJUL9lQ3Hh33yMgF1FbaoNqJNYu4mwM5kyoUpssvBjt0G+M+HTUnKhjG/Mf7zYTM/ZkJHcxnHhxU0zYAIey7858OenJWOeiV7jg97wikNutOcOD7s74FU8F1x5viwYaX/vVtxgfXoDxOJpFRkDU95HNfWXEd4lDnHhy2KuIbrctYcH3bCpgRXUh05PmyAWhHWT1vN8WF9ygtwuNWT48N6vMuHU/I6jg/bHJoPU0lfjg9bo50PnS5ftNfaMcTms//Gym/qW33BB1hl68bxYc+X3EOk9BqOD3szkYbVKX+ODxtYUgWdrFCOD3vi5W2cKN/M8WG3v76FsA1bOT4sy/kWFj3axvFhf4vcQvbW7ag4d5fx5msFVtDbp76fj3+Nma1BHB+2+MVLrLsZxvFho988w/PXOzg+bK72Y9hs28/xYRMmanDs5SGOD2v7phqQOcLxYV1cqhF07wjHhy2dV42aWUcR8XQWU+XLQ5QoH53a9fa2Y277Vo4PO7q3DUpvd3F82E3jjahfeYjjwz6sfYXu5mMcH3anxws82h3N8WG3aT7H94cxHB+2LaMOsV4nOT5sTWAd5NJOwkKCncmWdfC5NdV7JbM78Tl4F8eH1WF39elZezk+7If8NpznPcrxYa3Z3fXXs2iOD7syvx46h05xfNiYXa+x5Nlpjg/77eMr+PrEcnxYyfJXsE2NReUIi3n48iv4lU9l1JK+bhTO3M3xYZufdaI8aD/Hh+290w7Becc4PmyECruf/47h+LDBZxsRQp3m+LDv1jbgMN8Zjg9bVl8Pp6tnOD7sw/h6dLacwVM/G2ZnVD1UPpzhsPbW9eBh2m6ODyt+owtdcw9wfNilcW8RtPcYx4c1/dyCLdtOcnzYCbcm3DaK5fiwbjKN2Hv0DMeHjY9rwL/5Zzk+rNK6BsisOgtVMwdmNnumaISc5bBOr+/FxZlRHB9W064bWkcOcHzYYuUOuFYf4/iwXZGt8K45yfFh41qbkBUby/FhazIasaftDMeH3SHVCO+wsxwfdmd3AybzzqIlxpnpVNOAx+Qs/gfOhpPq + + diff --git a/sample_data/subIsabel.raw b/sample_data/subIsabel.raw new file mode 100644 index 0000000..19aa1e9 Binary files /dev/null and b/sample_data/subIsabel.raw differ diff --git a/sample_data/test_img.bmp b/sample_data/test_img.bmp new file mode 100644 index 0000000..b36fb28 Binary files /dev/null and b/sample_data/test_img.bmp differ diff --git a/sample_data/wideRangeJointGMMTest.bin b/sample_data/wideRangeJointGMMTest.bin new file mode 100644 index 0000000..5a673b9 Binary files /dev/null and b/sample_data/wideRangeJointGMMTest.bin differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a4ac977..cf80d97 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,10 +11,6 @@ set (SRC_DIRS io ) -if (EDDA_WITH_VTK OR EDDA_BUILD_PARAVIEW_PLUGINS) - set (SRC_DIRS ${SRC_DIRS} vtk) -endif () - foreach (dir in ${SRC_DIRS}) file(GLOB tmp ${dir}/*.cpp ${dir}/*.cu) list(APPEND SRC_FILES ${tmp}) @@ -35,9 +31,9 @@ endif () ### for building shared library (BUILD_SHARED_LIBS=ON), otherwise this does nothing: target_link_libraries(${PROJECT_NAME} ${LINK_LIBS}) -set_target_properties (${PROJECT_NAME} PROPERTIES - DEBUG_OUTPUT_NAME "${PROJECT_NAME}_d" - RELEASE_OUTPUT_NAME "${PROJECT_NAME}") +#set_target_properties (${PROJECT_NAME} PROPERTIES +# DEBUG_OUTPUT_NAME "${PROJECT_NAME}_d" +# RELEASE_OUTPUT_NAME "${PROJECT_NAME}") #install ( # DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ @@ -53,7 +49,3 @@ install ( TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME}) -if (EDDA_BUILD_PARAVIEW_PLUGINS) - add_subdirectory(vtk) -endif () - diff --git a/src/Eigen/Array b/src/Eigen/Array new file mode 100644 index 0000000..3d004fb --- /dev/null +++ b/src/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/src/Eigen/CMakeLists.txt b/src/Eigen/CMakeLists.txt new file mode 100644 index 0000000..a92dd6f --- /dev/null +++ b/src/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/src/Eigen/Cholesky b/src/Eigen/Cholesky new file mode 100644 index 0000000..f727f5d --- /dev/null +++ b/src/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/src/Eigen/CholmodSupport b/src/Eigen/CholmodSupport new file mode 100644 index 0000000..88c29a6 --- /dev/null +++ b/src/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/src/Eigen/Core b/src/Eigen/Core new file mode 100644 index 0000000..509c529 --- /dev/null +++ b/src/Eigen/Core @@ -0,0 +1,376 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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" + +// Disable the ipa-cp-clone optimization flag with MinGW 6.x or newer (enabled by default with -O3) +// See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556 for details. +#if defined(__MINGW32__) && EIGEN_GNUC_AT_LEAST(4,6) + #pragma GCC optimize ("-fno-ipa-cp-clone") +#endif + +#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__) || (defined __INTEL_COMPILER) || 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" { + // In theory we should only include immintrin.h and not the other *mmintrin.h header files directly. + // Doing so triggers some issues with ICC. However old gcc versions seems to not have this file, thus: + #if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1110 + #include + #else + #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 + #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)) && (!defined(_WIN32_WCE)) + #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 + */ + +#include "src/Core/util/Constants.h" +#include "src/Core/util/ForwardDeclarations.h" +#include "src/Core/util/Meta.h" +#include "src/Core/util/StaticAssert.h" +#include "src/Core/util/XprHelper.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/Ref.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/CoreIterators.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/src/Eigen/Dense b/src/Eigen/Dense new file mode 100644 index 0000000..5768910 --- /dev/null +++ b/src/Eigen/Dense @@ -0,0 +1,7 @@ +#include "Core" +#include "LU" +#include "Cholesky" +#include "QR" +#include "SVD" +#include "Geometry" +#include "Eigenvalues" diff --git a/src/Eigen/Dense.bak b/src/Eigen/Dense.bak new file mode 100644 index 0000000..e630258 --- /dev/null +++ b/src/Eigen/Dense.bak @@ -0,0 +1,2 @@ +#include "Core" +#include "Eigenvalues" diff --git a/src/Eigen/Eigen b/src/Eigen/Eigen new file mode 100644 index 0000000..19b40ea --- /dev/null +++ b/src/Eigen/Eigen @@ -0,0 +1,2 @@ +#include "Dense" +//#include "Sparse" diff --git a/src/Eigen/Eigen2Support b/src/Eigen/Eigen2Support new file mode 100644 index 0000000..6aa009d --- /dev/null +++ b/src/Eigen/Eigen2Support @@ -0,0 +1,95 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 + +#ifndef EIGEN_NO_EIGEN2_DEPRECATED_WARNING + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__) +#warning "Eigen2 support is deprecated in Eigen 3.2.x and it will be removed in Eigen 3.3. (Define EIGEN_NO_EIGEN2_DEPRECATED_WARNING to disable this warning)" +#else +#pragma message ("Eigen2 support is deprecated in Eigen 3.2.x and it will be removed in Eigen 3.3. (Define EIGEN_NO_EIGEN2_DEPRECATED_WARNING to disable this warning)") +#endif + +#endif // EIGEN_NO_EIGEN2_DEPRECATED_WARNING + +#include "src/Core/util/DisableStupidWarnings.h" + +/** \ingroup Support_modules + * \defgroup Eigen2Support_Module Eigen2 support module + * + * \warning Eigen2 support is deprecated in Eigen 3.2.x and it will be removed in Eigen 3.3. + * + * 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/src/Eigen/Eigenvalues b/src/Eigen/Eigenvalues new file mode 100644 index 0000000..53c5a73 --- /dev/null +++ b/src/Eigen/Eigenvalues @@ -0,0 +1,48 @@ +#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/RealQZ.h" +#include "src/Eigenvalues/GeneralizedEigenSolver.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/src/Eigen/Geometry b/src/Eigen/Geometry new file mode 100644 index 0000000..efd9d45 --- /dev/null +++ b/src/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/src/Eigen/Householder b/src/Eigen/Householder new file mode 100644 index 0000000..6e348db --- /dev/null +++ b/src/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/src/Eigen/IterativeLinearSolvers b/src/Eigen/IterativeLinearSolvers new file mode 100644 index 0000000..0f4159d --- /dev/null +++ b/src/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" + +/** + * \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/src/Eigen/Jacobi b/src/Eigen/Jacobi new file mode 100644 index 0000000..ba8a4dc --- /dev/null +++ b/src/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/src/Eigen/LU b/src/Eigen/LU new file mode 100644 index 0000000..db57955 --- /dev/null +++ b/src/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/src/Eigen/LeastSquares b/src/Eigen/LeastSquares new file mode 100644 index 0000000..35137c2 --- /dev/null +++ b/src/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/src/Eigen/MetisSupport b/src/Eigen/MetisSupport new file mode 100644 index 0000000..6a113f7 --- /dev/null +++ b/src/Eigen/MetisSupport @@ -0,0 +1,28 @@ +#ifndef EIGEN_METISSUPPORT_MODULE_H +#define EIGEN_METISSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +extern "C" { +#include +} + + +/** \ingroup Support_modules + * \defgroup MetisSupport_Module MetisSupport module + * + * \code + * #include + * \endcode + * This module defines an interface to the METIS reordering package (http://glaros.dtc.umn.edu/gkhome/views/metis). + * It can be used just as any other built-in method as explained in \link OrderingMethods_Module here. \endlink + */ + + +#include "src/MetisSupport/MetisSupport.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_METISSUPPORT_MODULE_H diff --git a/src/Eigen/OrderingMethods b/src/Eigen/OrderingMethods new file mode 100644 index 0000000..7c0f1ff --- /dev/null +++ b/src/Eigen/OrderingMethods @@ -0,0 +1,66 @@ +#ifndef EIGEN_ORDERINGMETHODS_MODULE_H +#define EIGEN_ORDERINGMETHODS_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** + * \defgroup OrderingMethods_Module OrderingMethods module + * + * This module is currently for internal use only + * + * It defines various built-in and external ordering methods for sparse matrices. + * They are typically used to reduce the number of elements during + * the sparse matrix decomposition (LLT, LU, QR). + * Precisely, in a preprocessing step, a permutation matrix P is computed using + * those ordering methods and applied to the columns of the matrix. + * Using for instance the sparse Cholesky decomposition, it is expected that + * the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A). + * + * + * Usage : + * \code + * #include + * \endcode + * + * A simple usage is as a template parameter in the sparse decomposition classes : + * + * \code + * SparseLU > solver; + * \endcode + * + * \code + * SparseQR > solver; + * \endcode + * + * It is possible as well to call directly a particular ordering method for your own purpose, + * \code + * AMDOrdering ordering; + * PermutationMatrix perm; + * SparseMatrix A; + * //Fill the matrix ... + * + * ordering(A, perm); // Call AMD + * \endcode + * + * \note Some of these methods (like AMD or METIS), need the sparsity pattern + * of the input matrix to be symmetric. When the matrix is structurally unsymmetric, + * Eigen computes internally the pattern of \f$A^T*A\f$ before calling the method. + * If your matrix is already symmetric (at leat in structure), you can avoid that + * by calling the method with a SelfAdjointView type. + * + * \code + * // Call the ordering on the pattern of the lower triangular matrix A + * ordering(A.selfadjointView(), perm); + * \endcode + */ + +#ifndef EIGEN_MPL2_ONLY +#include "src/OrderingMethods/Amd.h" +#endif + +#include "src/OrderingMethods/Ordering.h" +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_ORDERINGMETHODS_MODULE_H diff --git a/src/Eigen/PaStiXSupport b/src/Eigen/PaStiXSupport new file mode 100644 index 0000000..7c616ee --- /dev/null +++ b/src/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/src/Eigen/PardisoSupport b/src/Eigen/PardisoSupport new file mode 100644 index 0000000..99330ce --- /dev/null +++ b/src/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/src/Eigen/QR b/src/Eigen/QR new file mode 100644 index 0000000..ac5b026 --- /dev/null +++ b/src/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/src/Eigen/QtAlignedMalloc b/src/Eigen/QtAlignedMalloc new file mode 100644 index 0000000..46f7d83 --- /dev/null +++ b/src/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/src/Eigen/Readme.txt b/src/Eigen/Readme.txt new file mode 100644 index 0000000..e6ccdbe --- /dev/null +++ b/src/Eigen/Readme.txt @@ -0,0 +1,3 @@ +This folder contains Eigen Library 3.2.10. +Eigen Library is downloaded from the Eigen official website, http://eigen.tuxfamily.org/index.php?title=Main_Page +Eigen is licensed under the MPL2. \ No newline at end of file diff --git a/src/Eigen/SPQRSupport b/src/Eigen/SPQRSupport new file mode 100644 index 0000000..7f1eb47 --- /dev/null +++ b/src/Eigen/SPQRSupport @@ -0,0 +1,29 @@ +#ifndef EIGEN_SPQRSUPPORT_MODULE_H +#define EIGEN_SPQRSUPPORT_MODULE_H + +#include "SparseCore" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "SuiteSparseQR.hpp" + +/** \ingroup Support_modules + * \defgroup SPQRSupport_Module SuiteSparseQR module + * + * This module provides an interface to the SPQR library, which is part of the suitesparse package. + * + * \code + * #include + * \endcode + * + * In order to use this module, the SPQR headers must be accessible from the include paths, and your binary must be linked to the SPQR library and its dependencies (Cholmod, AMD, COLAMD,...). + * For a cmake based project, you can use our FindSPQR.cmake and FindCholmod.Cmake modules + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" +#include "src/CholmodSupport/CholmodSupport.h" +#include "src/SPQRSupport/SuiteSparseQRSupport.h" + +#endif diff --git a/src/Eigen/SVD b/src/Eigen/SVD new file mode 100644 index 0000000..fd31001 --- /dev/null +++ b/src/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/src/Eigen/Sparse b/src/Eigen/Sparse new file mode 100644 index 0000000..7cc9c09 --- /dev/null +++ b/src/Eigen/Sparse @@ -0,0 +1,27 @@ +#ifndef EIGEN_SPARSE_MODULE_H +#define EIGEN_SPARSE_MODULE_H + +/** \defgroup Sparse_Module Sparse meta-module + * + * Meta-module including all related modules: + * - \ref SparseCore_Module + * - \ref OrderingMethods_Module + * - \ref SparseCholesky_Module + * - \ref SparseLU_Module + * - \ref SparseQR_Module + * - \ref IterativeLinearSolvers_Module + * + * \code + * #include + * \endcode + */ + +#include "SparseCore" +#include "OrderingMethods" +#include "SparseCholesky" +#include "SparseLU" +#include "SparseQR" +#include "IterativeLinearSolvers" + +#endif // EIGEN_SPARSE_MODULE_H + diff --git a/src/Eigen/SparseCholesky b/src/Eigen/SparseCholesky new file mode 100644 index 0000000..9f5056a --- /dev/null +++ b/src/Eigen/SparseCholesky @@ -0,0 +1,47 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2013 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_SPARSECHOLESKY_MODULE_H +#define EIGEN_SPARSECHOLESKY_MODULE_H + +#include "SparseCore" +#include "OrderingMethods" + +#include "src/Core/util/DisableStupidWarnings.h" + +/** + * \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 + */ + +#ifdef EIGEN_MPL2_ONLY +#error The SparseCholesky module has nothing to offer in MPL2 only mode +#endif + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" +#include "src/SparseCholesky/SimplicialCholesky.h" + +#ifndef EIGEN_MPL2_ONLY +#include "src/SparseCholesky/SimplicialCholesky_impl.h" +#endif + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SPARSECHOLESKY_MODULE_H diff --git a/src/Eigen/SparseCore b/src/Eigen/SparseCore new file mode 100644 index 0000000..24bcf01 --- /dev/null +++ b/src/Eigen/SparseCore @@ -0,0 +1,64 @@ +#ifndef EIGEN_SPARSECORE_MODULE_H +#define EIGEN_SPARSECORE_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include +#include +#include +#include +#include + +/** + * \defgroup SparseCore_Module SparseCore module + * + * This module provides a sparse matrix representation, and basic associated 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/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/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/src/Eigen/SparseLU b/src/Eigen/SparseLU new file mode 100644 index 0000000..8527a49 --- /dev/null +++ b/src/Eigen/SparseLU @@ -0,0 +1,49 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2012 Désiré Nuentsa-Wakam +// Copyright (C) 2012 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_SPARSELU_MODULE_H +#define EIGEN_SPARSELU_MODULE_H + +#include "SparseCore" + +/** + * \defgroup SparseLU_Module SparseLU module + * This module defines a supernodal factorization of general sparse matrices. + * The code is fully optimized for supernode-panel updates with specialized kernels. + * Please, see the documentation of the SparseLU class for more details. + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +// Ordering interface +#include "OrderingMethods" + +#include "src/SparseLU/SparseLU_gemm_kernel.h" + +#include "src/SparseLU/SparseLU_Structs.h" +#include "src/SparseLU/SparseLU_SupernodalMatrix.h" +#include "src/SparseLU/SparseLUImpl.h" +#include "src/SparseCore/SparseColEtree.h" +#include "src/SparseLU/SparseLU_Memory.h" +#include "src/SparseLU/SparseLU_heap_relax_snode.h" +#include "src/SparseLU/SparseLU_relax_snode.h" +#include "src/SparseLU/SparseLU_pivotL.h" +#include "src/SparseLU/SparseLU_panel_dfs.h" +#include "src/SparseLU/SparseLU_kernel_bmod.h" +#include "src/SparseLU/SparseLU_panel_bmod.h" +#include "src/SparseLU/SparseLU_column_dfs.h" +#include "src/SparseLU/SparseLU_column_bmod.h" +#include "src/SparseLU/SparseLU_copy_to_ucol.h" +#include "src/SparseLU/SparseLU_pruneL.h" +#include "src/SparseLU/SparseLU_Utils.h" +#include "src/SparseLU/SparseLU.h" + +#endif // EIGEN_SPARSELU_MODULE_H diff --git a/src/Eigen/SparseQR b/src/Eigen/SparseQR new file mode 100644 index 0000000..4ee4206 --- /dev/null +++ b/src/Eigen/SparseQR @@ -0,0 +1,33 @@ +#ifndef EIGEN_SPARSEQR_MODULE_H +#define EIGEN_SPARSEQR_MODULE_H + +#include "SparseCore" +#include "OrderingMethods" +#include "src/Core/util/DisableStupidWarnings.h" + +/** \defgroup SparseQR_Module SparseQR module + * \brief Provides QR decomposition for sparse matrices + * + * This module provides a simplicial version of the left-looking Sparse QR decomposition. + * The columns of the input matrix should be reordered to limit the fill-in during the + * decomposition. Built-in methods (COLAMD, AMD) or external methods (METIS) can be used to this end. + * See the \link OrderingMethods_Module OrderingMethods\endlink module for the list + * of built-in and external ordering methods. + * + * \code + * #include + * \endcode + * + * + */ + +#include "src/misc/Solve.h" +#include "src/misc/SparseSolve.h" + +#include "OrderingMethods" +#include "src/SparseCore/SparseColEtree.h" +#include "src/SparseQR/SparseQR.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif diff --git a/src/Eigen/StdDeque b/src/Eigen/StdDeque new file mode 100644 index 0000000..f272347 --- /dev/null +++ b/src/Eigen/StdDeque @@ -0,0 +1,27 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/StdList b/src/Eigen/StdList new file mode 100644 index 0000000..225c1e1 --- /dev/null +++ b/src/Eigen/StdList @@ -0,0 +1,26 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/StdVector b/src/Eigen/StdVector new file mode 100644 index 0000000..6b22627 --- /dev/null +++ b/src/Eigen/StdVector @@ -0,0 +1,27 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/SuperLUSupport b/src/Eigen/SuperLUSupport new file mode 100644 index 0000000..575e14f --- /dev/null +++ b/src/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/src/Eigen/UmfPackSupport b/src/Eigen/UmfPackSupport new file mode 100644 index 0000000..7b1b660 --- /dev/null +++ b/src/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/src/Eigen/src/CMakeLists.txt b/src/Eigen/src/CMakeLists.txt new file mode 100644 index 0000000..c326f37 --- /dev/null +++ b/src/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/src/Eigen/src/Cholesky/CMakeLists.txt b/src/Eigen/src/Cholesky/CMakeLists.txt new file mode 100644 index 0000000..d01488b --- /dev/null +++ b/src/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/src/Eigen/src/Cholesky/LDLT.h b/src/Eigen/src/Cholesky/LDLT.h new file mode 100644 index 0000000..abd30bd --- /dev/null +++ b/src/Eigen/src/Cholesky/LDLT.h @@ -0,0 +1,611 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_LDLT_H +#define EIGEN_LDLT_H + +namespace Eigen { + +namespace internal { + template struct LDLT_Traits; + + // PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef + enum SignMatrix { PositiveSemiDef, NegativeSemiDef, ZeroSign, Indefinite }; +} + +/** \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_sign(internal::ZeroSign), + 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_sign(internal::ZeroSign), + 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_sign(internal::ZeroSign), + 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 == internal::PositiveSemiDef || m_sign == internal::ZeroSign; + } + + #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 == internal::NegativeSemiDef || m_sign == internal::ZeroSign; + } + + /** \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, const 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: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + + /** \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; + internal::SignMatrix 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, SignMatrix& sign) + { + using std::abs; + 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 (numext::real(mat.coeff(0,0)) > 0) sign = PositiveSemiDef; + else if (numext::real(mat.coeff(0,0)) < 0) sign = NegativeSemiDef; + else sign = ZeroSign; + return true; + } + + for (Index k = 0; k < size; ++k) + { + // Find largest diagonal element + Index index_of_biggest_in_corner; + mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner); + index_of_biggest_in_corner += k; + + 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) = numext::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().real().head(k).asDiagonal() * A10.adjoint(); + mat.coeffRef(k,k) -= (A10 * temp.head(k)).value(); + if(rs>0) + A21.noalias() -= A20 * temp.head(k); + } + + // In some previous versions of Eigen (e.g., 3.2.1), the scaling was omitted if the pivot + // was smaller than the cutoff value. However, soince LDLT is not rank-revealing + // we should only make sure we do not introduce INF or NaN values. + // LAPACK also uses 0 as the cutoff value. + RealScalar realAkk = numext::real(mat.coeffRef(k,k)); + if((rs>0) && (abs(realAkk) > RealScalar(0))) + A21 /= realAkk; + + if (sign == PositiveSemiDef) { + if (realAkk < 0) sign = Indefinite; + } else if (sign == NegativeSemiDef) { + if (realAkk > 0) sign = Indefinite; + } else if (sign == ZeroSign) { + if (realAkk > 0) sign = PositiveSemiDef; + else if (realAkk < 0) sign = NegativeSemiDef; + } + } + + 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, const typename MatrixType::RealScalar& sigma=1) + { + using numext::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 = numext::real(mat.coeff(j,j)); + Scalar wj = w.coeff(j); + RealScalar swj2 = sigma*numext::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*numext::conj(wj)/gamma)*w.tail(rs); + } + return true; + } + + template + static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w, const 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, SignMatrix& sign) + { + 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, const 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) +{ + check_template_parameters(); + + 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); + m_sign = internal::ZeroSign; + + 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, const typename LDLT::RealScalar& 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 ? internal::PositiveSemiDef : internal::NegativeSemiDef; + 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::RealScalar RealScalar; + const typename Diagonal::RealReturnType vectorD(dec().vectorD()); + // In some previous versions, tolerance was set to the max of 1/highest and the maximal diagonal entry * epsilon + // as motivated by LAPACK's xGELSS: + // RealScalar tolerance = (max)(vectorD.array().abs().maxCoeff() *NumTraits::epsilon(),RealScalar(1) / NumTraits::highest()); + // However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest + // diagonal element is not well justified and to numerical issues in some cases. + // Moreover, Lapack's xSYTRS routines use 0 for the tolerance. + RealScalar tolerance = RealScalar(1) / NumTraits::highest(); + + 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."); + eigen_assert(m_matrix.rows() == 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().real().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/src/Eigen/src/Cholesky/LLT.h b/src/Eigen/src/Cholesky/LLT.h new file mode 100644 index 0000000..7c11a2d --- /dev/null +++ b/src/Eigen/src/Cholesky/LLT.h @@ -0,0 +1,498 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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: + + static void check_template_parameters() + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar); + } + + /** \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) +{ + using std::sqrt; + 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; + + Index 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(Index i=0; i g; + g.makeGivens(mat(i,i), -temp(i), &mat(i,i)); + + Index 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(Index j=0; j struct llt_inplace +{ + typedef typename NumTraits::Real RealScalar; + template + static typename MatrixType::Index unblocked(MatrixType& mat) + { + using std::sqrt; + 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 = numext::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 /= 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) +{ + check_template_parameters(); + + 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/src/Eigen/src/Cholesky/LLT_MKL.h b/src/Eigen/src/Cholesky/LLT_MKL.h new file mode 100644 index 0000000..66675d7 --- /dev/null +++ b/src/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) ? -1 : info>0 ? info-1 : size; \ + 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/src/Eigen/src/CholmodSupport/CMakeLists.txt b/src/Eigen/src/CholmodSupport/CMakeLists.txt new file mode 100644 index 0000000..814dfa6 --- /dev/null +++ b/src/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/src/Eigen/src/CholmodSupport/CholmodSupport.h b/src/Eigen/src/CholmodSupport/CholmodSupport.h new file mode 100644 index 0000000..99dbe17 --- /dev/null +++ b/src/Eigen/src/CholmodSupport/CholmodSupport.h @@ -0,0 +1,607 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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) +{ + 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.z = 0; + res.sorted = 1; + if(mat.isCompressed()) + { + res.packed = 1; + res.nz = 0; + } + 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 if (internal::is_same<_Index,SuiteSparse_long>::value) + { + res.itype = CHOLMOD_LONG; + } + else + { + eigen_assert(false && "Index type 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 = (void*)(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, static_cast(cm.p)[cm.ncol], + static_cast(cm.p), static_cast(cm.i),static_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) + { + m_shiftOffset[0] = m_shiftOffset[1] = RealScalar(0.0); + cholmod_start(&m_cholmod); + } + + CholmodBase(const MatrixType& matrix) + : m_cholmodFactor(0), m_info(Success), m_isInitialized(false) + { + m_shiftOffset[0] = m_shiftOffset[1] = RealScalar(0.0); + 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 sparsity pattern 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 have the same sparsity pattern as 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_p(&A, m_shiftOffset, 0, 0, m_cholmodFactor, &m_cholmod); + + // If the factorization failed, minor is the column at which it did. On success minor == n. + this->m_info = (m_cholmodFactor->minor == m_cholmodFactor->n ? Success : NumericalIssue); + 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_UNUSED_VARIABLE(size); + eigen_assert(size==b.rows()); + + // note: cd stands for Cholmod Dense + Rhs& b_ref(b.const_cast_derived()); + cholmod_dense b_cd = viewAsCholmod(b_ref); + 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 careful 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_UNUSED_VARIABLE(size); + 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 careful with alignment, etc.) + dest = viewAsEigen(*x_cs); + cholmod_free_sparse(&x_cs, &m_cholmod); + } + #endif // EIGEN_PARSED_BY_DOXYGEN + + + /** Sets the shift parameter that will be used to adjust the diagonal coefficients during the numerical factorization. + * + * During the numerical factorization, an offset term is added to the diagonal coefficients:\n + * \c d_ii = \a offset + \c d_ii + * + * The default is \a offset=0. + * + * \returns a reference to \c *this. + */ + Derived& setShift(const RealScalar& offset) + { + m_shiftOffset[0] = offset; + return derived(); + } + + template + void dumpMemory(Stream& /*s*/) + {} + + protected: + mutable cholmod_common m_cholmod; + cholmod_factor* m_cholmodFactor; + RealScalar m_shiftOffset[2]; + 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. Therefore, it has little practical interest. + * The sparse matrix A must be selfadjoint 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(); + Base::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. Therefore, it has little practical interest. + * The sparse matrix A must be selfadjoint 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(); + Base::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 selfadjoint 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(); + Base::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 selfadjoint 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(); + Base::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/src/Eigen/src/Core/Array.h b/src/Eigen/src/Core/Array.h new file mode 100644 index 0000000..0b9c38c --- /dev/null +++ b/src/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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 Array() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_COEFFS_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_COEFFS_IF_THAT_OPTION_IS_ENABLED + } +#endif + +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + Array(Array&& other) + : Base(std::move(other)) + { + Base::_check_template_params(); + if (RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic) + Base::_set_noalias(other); + } + Array& operator=(Array&& other) + { + other.swap(*this); + return *this; + } +#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_COEFFS_IF_THAT_OPTION_IS_ENABLED + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE Array(const T0& val0, const T1& val1) + { + Base::_check_template_params(); + this->template _init2(val0, val1); + } + #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& val0, const Scalar& val1); + #endif + + /** constructs an initialized 3D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3) + m_storage.data()[0] = val0; + m_storage.data()[1] = val1; + m_storage.data()[2] = val2; + } + /** constructs an initialized 4D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4) + m_storage.data()[0] = val0; + m_storage.data()[1] = val1; + m_storage.data()[2] = val2; + m_storage.data()[3] = val3; + } + + 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_to_match(other); + *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/src/Eigen/src/Core/ArrayBase.h b/src/Eigen/src/Core/ArrayBase.h new file mode 100644 index 0000000..33ff553 --- /dev/null +++ b/src/Eigen/src/Core/ArrayBase.h @@ -0,0 +1,226 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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; + + 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::operator*; + 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 Eigen::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/src/Eigen/src/Core/ArrayWrapper.h b/src/Eigen/src/Core/ArrayWrapper.h new file mode 100644 index 0000000..b4641e2 --- /dev/null +++ b/src/Eigen/src/Core/ArrayWrapper.h @@ -0,0 +1,264 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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; + // Let's remove NestByRefBit + enum { + Flags0 = traits::type >::Flags, + Flags = Flags0 & ~NestByRefBit + }; +}; +} + +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.const_cast_derived().data(); } + inline const Scalar* data() const { return m_expression.data(); } + + inline CoeffReturnType coeff(Index rowId, Index colId) const + { + return m_expression.coeff(rowId, colId); + } + + inline Scalar& coeffRef(Index rowId, Index colId) + { + return m_expression.const_cast_derived().coeffRef(rowId, colId); + } + + inline const Scalar& coeffRef(Index rowId, Index colId) const + { + return m_expression.const_cast_derived().coeffRef(rowId, colId); + } + + 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 rowId, Index colId) const + { + return m_expression.template packet(rowId, colId); + } + + template + inline void writePacket(Index rowId, Index colId, const PacketScalar& val) + { + m_expression.const_cast_derived().template writePacket(rowId, colId, val); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& val) + { + m_expression.const_cast_derived().template writePacket(index, val); + } + + template + inline void evalTo(Dest& dst) const { dst = m_expression; } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_expression; + } + + /** Forwards the resizing request to the nested expression + * \sa DenseBase::resize(Index) */ + void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); } + /** Forwards the resizing request to the nested expression + * \sa DenseBase::resize(Index,Index)*/ + void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); } + + 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; + // Let's remove NestByRefBit + enum { + Flags0 = traits::type >::Flags, + Flags = Flags0 & ~NestByRefBit + }; +}; +} + +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& a_matrix) : m_expression(a_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.const_cast_derived().data(); } + inline const Scalar* data() const { return m_expression.data(); } + + inline CoeffReturnType coeff(Index rowId, Index colId) const + { + return m_expression.coeff(rowId, colId); + } + + inline Scalar& coeffRef(Index rowId, Index colId) + { + return m_expression.const_cast_derived().coeffRef(rowId, colId); + } + + inline const Scalar& coeffRef(Index rowId, Index colId) const + { + return m_expression.derived().coeffRef(rowId, colId); + } + + 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 rowId, Index colId) const + { + return m_expression.template packet(rowId, colId); + } + + template + inline void writePacket(Index rowId, Index colId, const PacketScalar& val) + { + m_expression.const_cast_derived().template writePacket(rowId, colId, val); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& val) + { + m_expression.const_cast_derived().template writePacket(index, val); + } + + const typename internal::remove_all::type& + nestedExpression() const + { + return m_expression; + } + + /** Forwards the resizing request to the nested expression + * \sa DenseBase::resize(Index) */ + void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); } + /** Forwards the resizing request to the nested expression + * \sa DenseBase::resize(Index,Index)*/ + void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); } + + protected: + NestedExpressionType m_expression; +}; + +} // end namespace Eigen + +#endif // EIGEN_ARRAYWRAPPER_H diff --git a/src/Eigen/src/Core/Assign.h b/src/Eigen/src/Core/Assign.h new file mode 100644 index 0000000..f481731 --- /dev/null +++ b/src/Eigen/src/Core/Assign.h @@ -0,0 +1,590 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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, typename Derived1::Index 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 &, typename Derived1::Index) {} +}; + +/*********************** +*** 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, typename Derived1::Index 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 &, typename Derived1::Index) {} +}; + +/*************************************************************************** +* 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 typename Derived1::Scalar Scalar; + typedef packet_traits PacketTraits; + enum { + packetSize = PacketTraits::size, + alignable = PacketTraits::AlignedOnScalar, + dstIsAligned = assign_traits::DstIsAligned, + dstAlignment = alignable ? Aligned : int(dstIsAligned), + srcAlignment = assign_traits::JointAlignment + }; + const Scalar *dst_ptr = &dst.coeffRef(0,0); + if((!bool(dstIsAligned)) && (size_t(dst_ptr) % sizeof(Scalar))>0) + { + // the pointer is not aligend-on scalar, so alignment is not possible + return assign_impl::run(dst, src); + } + 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) || bool(dstIsAligned)) ? 0 : internal::first_aligned(dst_ptr, 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::Flags) & EvalBeforeAssigningBit) != 0, + bool NeedToTranspose = ((int(Derived::RowsAtCompileTime) == 1 && int(OtherDerived::ColsAtCompileTime) == 1) + | // FIXME | instead of || to please GCC 4.4.0 stupid warning "suggest parentheses around &&". + // revert to || as soon as not needed anymore. + (int(Derived::ColsAtCompileTime) == 1 && int(OtherDerived::RowsAtCompileTime) == 1)) + && int(Derived::SizeAtCompileTime) != 1> +struct assign_selector; + +template +struct assign_selector { + static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.derived()); } + template + static EIGEN_STRONG_INLINE Derived& evalTo(ActualDerived& dst, const ActualOtherDerived& other) { other.evalTo(dst); return dst; } +}; +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 + static EIGEN_STRONG_INLINE Derived& evalTo(ActualDerived& dst, const ActualOtherDerived& other) { Transpose dstTrans(dst); other.evalTo(dstTrans); return dst; } +}; +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) +{ + return internal::assign_selector::evalTo(derived(), other.derived()); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const ReturnByValue& other) +{ + return internal::assign_selector::evalTo(derived(), other.derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_ASSIGN_H diff --git a/src/Eigen/src/Core/Assign_MKL.h b/src/Eigen/src/Core/Assign_MKL.h new file mode 100644 index 0000000..7772951 --- /dev/null +++ b/src/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. +#ifndef _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/src/Eigen/src/Core/BandMatrix.h b/src/Eigen/src/Core/BandMatrix.h new file mode 100644 index 0000000..ffd7fe8 --- /dev/null +++ b/src/Eigen/src/Core/BandMatrix.h @@ -0,0 +1,334 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/src/Core/Block.h b/src/Eigen/src/Core/Block.h new file mode 100644 index 0000000..8278944 --- /dev/null +++ b/src/Eigen/src/Core/Block.h @@ -0,0 +1,406 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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) + * + * 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, + IsDense = is_same::value, + IsRowMajor = (IsDense&&MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1 + : (IsDense&&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 || (InnerPanel && (traits::Flags&LinearAccessBit))) ? 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::ret> class BlockImpl_dense; + +} // end namespace internal + +template class BlockImpl; + +template class Block + : public BlockImpl::StorageKind> +{ + typedef BlockImpl::StorageKind> Impl; + public: + //typedef typename Impl::Base Base; + typedef Impl Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(Block) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) + + /** Column or Row constructor + */ + inline Block(XprType& xpr, Index i) : Impl(xpr,i) + { + eigen_assert( (i>=0) && ( + ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i= 0 && BlockRows >= 1 && a_startRow + BlockRows <= xpr.rows() + && a_startCol >= 0 && BlockCols >= 1 && a_startCol + BlockCols <= xpr.cols()); + } + + /** Dynamic-size constructor + */ + inline Block(XprType& xpr, + Index a_startRow, Index a_startCol, + Index blockRows, Index blockCols) + : Impl(xpr, a_startRow, a_startCol, blockRows, blockCols) + { + eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows) + && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols)); + eigen_assert(a_startRow >= 0 && blockRows >= 0 && a_startRow <= xpr.rows() - blockRows + && a_startCol >= 0 && blockCols >= 0 && a_startCol <= xpr.cols() - blockCols); + } +}; + +// The generic default implementation for dense block simplu forward to the internal::BlockImpl_dense +// that must be specialized for direct and non-direct access... +template +class BlockImpl + : public internal::BlockImpl_dense +{ + typedef internal::BlockImpl_dense Impl; + typedef typename XprType::Index Index; + public: + typedef Impl Base; + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl) + inline BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {} + inline BlockImpl(XprType& xpr, Index a_startRow, Index a_startCol) : Impl(xpr, a_startRow, a_startCol) {} + inline BlockImpl(XprType& xpr, Index a_startRow, Index a_startCol, Index blockRows, Index blockCols) + : Impl(xpr, a_startRow, a_startCol, blockRows, blockCols) {} +}; + +namespace internal { + +/** \internal Internal implementation of dense Blocks in the general case. */ +template class BlockImpl_dense + : public internal::dense_xpr_base >::type +{ + typedef Block BlockType; + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(BlockType) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) + + class InnerIterator; + + /** Column or Row constructor + */ + inline BlockImpl_dense(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()) + {} + + /** Fixed-size constructor + */ + inline BlockImpl_dense(XprType& xpr, Index a_startRow, Index a_startCol) + : m_xpr(xpr), m_startRow(a_startRow), m_startCol(a_startCol), + m_blockRows(BlockRows), m_blockCols(BlockCols) + {} + + /** Dynamic-size constructor + */ + inline BlockImpl_dense(XprType& xpr, + Index a_startRow, Index a_startCol, + Index blockRows, Index blockCols) + : m_xpr(xpr), m_startRow(a_startRow), m_startCol(a_startCol), + m_blockRows(blockRows), m_blockCols(blockCols) + {} + + inline Index rows() const { return m_blockRows.value(); } + inline Index cols() const { return m_blockCols.value(); } + + inline Scalar& coeffRef(Index rowId, Index colId) + { + EIGEN_STATIC_ASSERT_LVALUE(XprType) + return m_xpr.const_cast_derived() + .coeffRef(rowId + m_startRow.value(), colId + m_startCol.value()); + } + + inline const Scalar& coeffRef(Index rowId, Index colId) const + { + return m_xpr.derived() + .coeffRef(rowId + m_startRow.value(), colId + m_startCol.value()); + } + + EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const + { + return m_xpr.coeff(rowId + m_startRow.value(), colId + 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 rowId, Index colId) const + { + return m_xpr.template packet + (rowId + m_startRow.value(), colId + m_startCol.value()); + } + + template + inline void writePacket(Index rowId, Index colId, const PacketScalar& val) + { + m_xpr.const_cast_derived().template writePacket + (rowId + m_startRow.value(), colId + m_startCol.value(), val); + } + + 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& val) + { + m_xpr.const_cast_derived().template writePacket + (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), val); + } + + #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 Internal implementation of dense Blocks in the direct access case.*/ +template +class BlockImpl_dense + : public MapBase > +{ + typedef Block BlockType; + public: + + typedef MapBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(BlockType) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense) + + /** Column or Row constructor + */ + inline BlockImpl_dense(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) + { + init(); + } + + /** Fixed-size constructor + */ + inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol) + : Base(internal::const_cast_ptr(&xpr.coeffRef(startRow,startCol))), m_xpr(xpr) + { + init(); + } + + /** Dynamic-size constructor + */ + inline BlockImpl_dense(XprType& xpr, + Index startRow, Index startCol, + Index blockRows, Index blockCols) + : Base(internal::const_cast_ptr(&xpr.coeffRef(startRow,startCol)), blockRows, blockCols), + m_xpr(xpr) + { + 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 BlockImpl_dense(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 internal + +} // end namespace Eigen + +#endif // EIGEN_BLOCK_H diff --git a/src/Eigen/src/Core/BooleanRedux.h b/src/Eigen/src/Core/BooleanRedux.h new file mode 100644 index 0000000..be9f48a --- /dev/null +++ b/src/Eigen/src/Core/BooleanRedux.h @@ -0,0 +1,154 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 true; } +}; + +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 false; } +}; + +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(); +} + +/** \returns true is \c *this contains at least one Not A Number (NaN). + * + * \sa allFinite() + */ +template +inline bool DenseBase::hasNaN() const +{ + return !((derived().array()==derived().array()).all()); +} + +/** \returns true if \c *this contains only finite numbers, i.e., no NaN and no +/-INF values. + * + * \sa hasNaN() + */ +template +inline bool DenseBase::allFinite() const +{ + return !((derived()-derived()).hasNaN()); +} + +} // end namespace Eigen + +#endif // EIGEN_ALLANDANY_H diff --git a/src/Eigen/src/Core/CMakeLists.txt b/src/Eigen/src/Core/CMakeLists.txt new file mode 100644 index 0000000..2346fc2 --- /dev/null +++ b/src/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/src/Eigen/src/Core/CommaInitializer.h b/src/Eigen/src/Core/CommaInitializer.h new file mode 100644 index 0000000..56ee38f --- /dev/null +++ b/src/Eigen/src/Core/CommaInitializer.h @@ -0,0 +1,157 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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; + } + + /* Copy/Move constructor which transfers ownership. This is crucial in + * absence of return value optimization to avoid assertions during destruction. */ + // FIXME in C++11 mode this could be replaced by a proper RValue constructor + inline CommaInitializer(const CommaInitializer& o) + : m_xpr(o.m_xpr), m_row(o.m_row), m_col(o.m_col), m_currentBlockRows(o.m_currentBlockRows) { + // Mark original object as finished. In absence of R-value references we need to const_cast: + const_cast(o).m_row = m_xpr.rows(); + const_cast(o).m_col = m_xpr.cols(); + const_cast(o).m_currentBlockRows = 0; + } + + /* 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(other.rows()==0) + { + m_col += other.cols(); + return *this; + } + 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 + * + * \note According the c++ standard, the argument expressions of this comma initializer are evaluated in arbitrary order. + * + * \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/src/Eigen/src/Core/CoreIterators.h b/src/Eigen/src/Core/CoreIterators.h new file mode 100644 index 0000000..6da4683 --- /dev/null +++ b/src/Eigen/src/Core/CoreIterators.h @@ -0,0 +1,61 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_COREITERATORS_H +#define EIGEN_COREITERATORS_H + +namespace Eigen { + +/* This file contains the respective InnerIterator definition of the expressions defined in Eigen/Core + */ + +/** \ingroup SparseCore_Module + * \class InnerIterator + * \brief An InnerIterator allows to loop over the element of a sparse (or dense) matrix or expression + * + * todo + */ + +// generic version for dense matrix and expressions +template class DenseBase::InnerIterator +{ + protected: + typedef typename Derived::Scalar Scalar; + typedef typename Derived::Index Index; + + enum { IsRowMajor = (Derived::Flags&RowMajorBit)==RowMajorBit }; + public: + EIGEN_STRONG_INLINE InnerIterator(const Derived& expr, Index outer) + : m_expression(expr), m_inner(0), m_outer(outer), m_end(expr.innerSize()) + {} + + EIGEN_STRONG_INLINE Scalar value() const + { + return (IsRowMajor) ? m_expression.coeff(m_outer, m_inner) + : m_expression.coeff(m_inner, m_outer); + } + + EIGEN_STRONG_INLINE InnerIterator& operator++() { m_inner++; return *this; } + + EIGEN_STRONG_INLINE Index index() const { return m_inner; } + inline Index row() const { return IsRowMajor ? m_outer : index(); } + inline Index col() const { return IsRowMajor ? index() : m_outer; } + + EIGEN_STRONG_INLINE operator bool() const { return m_inner < m_end && m_inner>=0; } + + protected: + const Derived& m_expression; + Index m_inner; + const Index m_outer; + const Index m_end; +}; + +} // end namespace Eigen + +#endif // EIGEN_COREITERATORS_H diff --git a/src/Eigen/src/Core/CwiseBinaryOp.h b/src/Eigen/src/Core/CwiseBinaryOp.h new file mode 100644 index 0000000..519a866 --- /dev/null +++ b/src/Eigen/src/Core/CwiseBinaryOp.h @@ -0,0 +1,230 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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), + Cost0 = EIGEN_ADD_COST(LhsCoeffReadCost,RhsCoeffReadCost), + CoeffReadCost = EIGEN_ADD_COST(Cost0,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_is_product_like::ret \ + ? int(internal::scalar_product_traits::Defined) \ + : 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& aLhs, const Rhs& aRhs, const BinaryOp& func = BinaryOp()) + : m_lhs(aLhs), m_rhs(aRhs), 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(aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.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 rowId, Index colId) const + { + return derived().functor()(derived().lhs().coeff(rowId, colId), + derived().rhs().coeff(rowId, colId)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const + { + return derived().functor().packetOp(derived().lhs().template packet(rowId, colId), + derived().rhs().template packet(rowId, colId)); + } + + 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/src/Eigen/src/Core/CwiseNullaryOp.h b/src/Eigen/src/Core/CwiseNullaryOp.h new file mode 100644 index 0000000..a93bab2 --- /dev/null +++ b/src/Eigen/src/Core/CwiseNullaryOp.h @@ -0,0 +1,864 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 nbRows, Index nbCols, const NullaryOp& func = NullaryOp()) + : m_rows(nbRows), m_cols(nbCols), m_functor(func) + { + eigen_assert(nbRows >= 0 + && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == nbRows) + && nbCols >= 0 + && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == nbCols)); + } + + 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 rowId, Index colId) const + { + return m_functor(rowId, colId); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const + { + return m_functor.packetOp(rowId, colId); + } + + 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 nbRows and \a nbCols 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 nbRows and \a nbCols 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 nbRows, Index nbCols, const Scalar& value) +{ + return DenseBase::NullaryExpr(nbRows, nbCols, 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 val, to within precision \a prec */ +template +bool DenseBase::isApproxToConstant +(const Scalar& val, const RealScalar& prec) const +{ + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if(!internal::isApprox(this->coeff(i, j), val, 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& val, const RealScalar& prec) const +{ + return isApproxToConstant(val, prec); +} + +/** Alias for setConstant(): sets all coefficients in this expression to \a val. + * + * \sa setConstant(), Constant(), class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE void DenseBase::fill(const Scalar& val) +{ + setConstant(val); +} + +/** 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& val) +{ + return derived() = Constant(rows(), cols(), val); +} + +/** 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& val) +{ + resize(size); + return setConstant(val); +} + +/** Resizes to the given size, and sets all coefficients in this expression to the given \a value. + * + * \param nbRows the new number of rows + * \param nbCols the new number of columns + * \param val 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 nbRows, Index nbCols, const Scalar& val) +{ + resize(nbRows, nbCols); + return setConstant(val); +} + +/** + * \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 newSize, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return derived() = Derived::NullaryExpr(newSize, internal::linspaced_op(low,high,newSize)); +} + +/** + * \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 nbRows, Index nbCols) +{ + return Constant(nbRows, nbCols, 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(const 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 newSize) +{ + resize(newSize); + return setConstant(Scalar(0)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to zero. + * + * \param nbRows the new number of rows + * \param nbCols 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 nbRows, Index nbCols) +{ + resize(nbRows, nbCols); + return setConstant(Scalar(0)); +} + +// ones: + +/** \returns an expression of a matrix where all coefficients equal one. + * + * The parameters \a nbRows and \a nbCols 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 nbRows, Index nbCols) +{ + return Constant(nbRows, nbCols, Scalar(1)); +} + +/** \returns an expression of a vector where all coefficients equal one. + * + * The parameter \a newSize 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 newSize) +{ + return Constant(newSize, 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 +(const 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 newSize, 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 newSize) +{ + resize(newSize); + return setConstant(Scalar(1)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to one. + * + * \param nbRows the new number of rows + * \param nbCols 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 nbRows, Index nbCols) +{ + resize(nbRows, nbCols); + return setConstant(Scalar(1)); +} + +// Identity: + +/** \returns an expression of the identity matrix (not necessarily square). + * + * The parameters \a nbRows and \a nbCols 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 nbRows, Index nbCols) +{ + return DenseBase::NullaryExpr(nbRows, nbCols, 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 +(const 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 nbRows the new number of rows + * \param nbCols 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 nbRows, Index nbCols) +{ + derived().resize(nbRows, nbCols); + 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 newSize, Index i) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return BasisReturnType(SquareMatrixType::Identity(newSize,newSize), 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/src/Eigen/src/Core/CwiseUnaryOp.h b/src/Eigen/src/Core/CwiseUnaryOp.h new file mode 100644 index 0000000..f7ee60e --- /dev/null +++ b/src/Eigen/src/Core/CwiseUnaryOp.h @@ -0,0 +1,126 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 = EIGEN_ADD_COST(_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 rowId, Index colId) const + { + return derived().functor()(derived().nestedExpression().coeff(rowId, colId)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const + { + return derived().functor().packetOp(derived().nestedExpression().template packet(rowId, colId)); + } + + 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/src/Eigen/src/Core/CwiseUnaryView.h b/src/Eigen/src/Core/CwiseUnaryView.h new file mode 100644 index 0000000..f3b2ffe --- /dev/null +++ b/src/Eigen/src/Core/CwiseUnaryView.h @@ -0,0 +1,139 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 = EIGEN_ADD_COST(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 == Dynamic + ? int(Dynamic) + : outer_stride_at_compile_time::ret * int(sizeof(typename traits::Scalar) / sizeof(Scalar)) + }; +}; +} + +template +class CwiseUnaryViewImpl; + +template +class CwiseUnaryView : 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) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(CwiseUnaryViewImpl) + + inline Scalar* data() { return &coeffRef(0); } + inline const Scalar* data() const { return &coeff(0); } + + inline Index innerStride() const + { + return derived().nestedExpression().innerStride() * sizeof(typename internal::traits::Scalar) / sizeof(Scalar); + } + + inline Index outerStride() const + { + return derived().nestedExpression().outerStride() * sizeof(typename internal::traits::Scalar) / sizeof(Scalar); + } + + 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/src/Eigen/src/Core/DenseBase.h b/src/Eigen/src/Core/DenseBase.h new file mode 100644 index 0000000..4b371b0 --- /dev/null +++ b/src/Eigen/src/Core/DenseBase.h @@ -0,0 +1,521 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_DENSEBASE_H +#define EIGEN_DENSEBASE_H + +namespace Eigen { + +namespace internal { + +// The index type defined by EIGEN_DEFAULT_DENSE_INDEX_TYPE must be a signed type. +// This dummy function simply aims at checking that at compile time. +static inline void check_DenseIndex_is_signed() { + EIGEN_STATIC_ASSERT(NumTraits::IsSigned,THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE); +} + +} // end namespace internal + +/** \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, + DenseCoeffsBase > +#else + : public DenseCoeffsBase +#endif // not EIGEN_PARSED_BY_DOXYGEN +{ + public: + + 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 internal::special_scalar_op_base > Base; + + using Base::operator*; + 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 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 newSize) + { + EIGEN_ONLY_USED_FOR_DEBUG(newSize); + eigen_assert(newSize == 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 nbRows, Index nbCols) + { + EIGEN_ONLY_USED_FOR_DEBUG(nbRows); + EIGEN_ONLY_USED_FOR_DEBUG(nbCols); + eigen_assert(nbRows == this->rows() && nbCols == 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); + + /** \internal Copies \a other into *this without evaluating other. \returns a reference to *this. */ + template + Derived& lazyAssign(const DenseBase& other); + + /** \internal Evaluates \a other into *this. \returns a reference to *this. */ + template + Derived& lazyAssign(const ReturnByValue& other); + + CommaInitializer operator<< (const Scalar& s); + + template + const Flagged flagged() const; + + template + CommaInitializer operator<< (const DenseBase& other); + + Eigen::Transpose transpose(); + typedef typename internal::add_const >::type ConstTransposeReturnType; + ConstTransposeReturnType transpose() const; + void transposeInPlace(); +#ifndef EIGEN_NO_DEBUG + protected: + template + void checkTransposeAliasing(const OtherDerived& other) const; + public: +#endif + + + 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, + const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isMuchSmallerThan(const RealScalar& other, + const RealScalar& prec = NumTraits::dummy_precision()) const; + template + bool isMuchSmallerThan(const DenseBase& other, + const RealScalar& prec = NumTraits::dummy_precision()) const; + + bool isApproxToConstant(const Scalar& value, const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isConstant(const Scalar& value, const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isZero(const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isOnes(const RealScalar& prec = NumTraits::dummy_precision()) const; + + inline bool hasNaN() const; + inline bool allFinite() 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); + } + + 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, const typename ThenDerived::Scalar& elseScalar) const; + + template + inline const Select + select(const typename ElseDerived::Scalar& thenScalar, const DenseBase& elseMatrix) const; + + template RealScalar lpNorm() const; + + template + inline const Replicate replicate() const; + + typedef Replicate ReplicateReturnType; + inline const ReplicateReturnType 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/src/Eigen/src/Core/DenseCoeffsBase.h b/src/Eigen/src/Core/DenseCoeffsBase.h new file mode 100644 index 0000000..3c890f2 --- /dev/null +++ b/src/Eigen/src/Core/DenseCoeffsBase.h @@ -0,0 +1,754 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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& val) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().template writePacket(row,col,val); + } + + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacketByOuterInner + (Index outer, Index inner, const typename internal::packet_traits::type& val) + { + writePacket(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner), + val); + } + + /** \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& val) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().template writePacket(index,val); + } + +#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/src/Eigen/src/Core/DenseStorage.h b/src/Eigen/src/Core/DenseStorage.h new file mode 100644 index 0000000..568493c --- /dev/null +++ b/src/Eigen/src/Core/DenseStorage.h @@ -0,0 +1,434 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 {}; + +template void check_static_allocation_size() +{ + // if EIGEN_STACK_ALLOCATION_LIMIT is defined to 0, then no limit + #if EIGEN_STACK_ALLOCATION_LIMIT + EIGEN_STATIC_ASSERT(Size * sizeof(T) <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG); + #endif +} + +/** \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() + { + check_static_allocation_size(); + } + + plain_array(constructor_without_unaligned_array_assert) + { + check_static_allocation_size(); + } +}; + +#if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT) + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) +#elif EIGEN_GNUC_AT_LEAST(4,7) + // GCC 4.7 is too aggressive in its optimizations and remove the alignement test based on the fact the array is declared to be aligned. + // See this bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900 + // Hiding the origin of the array pointer behind a function argument seems to do the trick even if the function is inlined: + template + EIGEN_ALWAYS_INLINE PtrType eigen_unaligned_array_assert_workaround_gcc47(PtrType array) { return array; } + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \ + eigen_assert((reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(array)) & sizemask) == 0 \ + && "this assertion is explained here: " \ + "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \ + " **** READ THIS WEB PAGE !!! ****"); +#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/group__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); + check_static_allocation_size(); + } + + plain_array(constructor_without_unaligned_array_assert) + { + check_static_allocation_size(); + } +}; + +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: + DenseStorage() {} + DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()) {} + DenseStorage(const DenseStorage& other) : m_data(other.m_data) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) m_data = other.m_data; + return *this; + } + DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); } + static DenseIndex rows(void) {return _Rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + void resize(DenseIndex,DenseIndex,DenseIndex) {} + const T *data() const { return m_data.array; } + T *data() { return m_data.array; } +}; + +// null matrix +template class DenseStorage +{ + public: + DenseStorage() {} + DenseStorage(internal::constructor_without_unaligned_array_assert) {} + DenseStorage(const DenseStorage&) {} + DenseStorage& operator=(const DenseStorage&) { return *this; } + DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + void swap(DenseStorage& ) {} + static DenseIndex rows(void) {return _Rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + void resize(DenseIndex,DenseIndex,DenseIndex) {} + const T *data() const { return 0; } + 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: + DenseStorage() : m_rows(0), m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {} + DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows), m_cols(other.m_cols) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) + { + m_data = other.m_data; + m_rows = other.m_rows; + m_cols = other.m_cols; + } + return *this; + } + DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) : m_rows(nbRows), m_cols(nbCols) {} + 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); } + DenseIndex rows() const {return m_rows;} + DenseIndex cols() const {return m_cols;} + void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) { m_rows = nbRows; m_cols = nbCols; } + void resize(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) { m_rows = nbRows; m_cols = nbCols; } + const T *data() const { return m_data.array; } + 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: + DenseStorage() : m_rows(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {} + DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) + { + m_data = other.m_data; + m_rows = other.m_rows; + } + return *this; + } + DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex) : m_rows(nbRows) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + DenseIndex rows(void) const {return m_rows;} + DenseIndex cols(void) const {return _Cols;} + void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } + void resize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; } + const T *data() const { return m_data.array; } + 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: + DenseStorage() : m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {} + DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_cols(other.m_cols) {} + DenseStorage& operator=(const DenseStorage& other) + { + if (this != &other) + { + m_data = other.m_data; + m_cols = other.m_cols; + } + return *this; + } + DenseStorage(DenseIndex, DenseIndex, DenseIndex nbCols) : m_cols(nbCols) {} + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + DenseIndex rows(void) const {return _Rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } + void resize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; } + const T *data() const { return m_data.array; } + T *data() { return m_data.array; } +}; + +// purely dynamic matrix. +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + DenseIndex m_cols; + public: + DenseStorage() : m_data(0), m_rows(0), m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(0), m_rows(0), m_cols(0) {} + DenseStorage(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols) + : m_data(internal::conditional_aligned_new_auto(size)), m_rows(nbRows), m_cols(nbCols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_rows(std::move(other.m_rows)) + , m_cols(std::move(other.m_cols)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_rows, other.m_rows); + swap(m_cols, other.m_cols); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); } + 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); } + DenseIndex rows(void) const {return m_rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*m_cols); + m_rows = nbRows; + m_cols = nbCols; + } + void resize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols) + { + 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 = nbRows; + m_cols = nbCols; + } + const T *data() const { return m_data; } + T *data() { return m_data; } + private: + DenseStorage(const DenseStorage&); + DenseStorage& operator=(const DenseStorage&); +}; + +// matrix with dynamic width and fixed height (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_cols; + public: + DenseStorage() : m_data(0), m_cols(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {} + DenseStorage(DenseIndex size, DenseIndex, DenseIndex nbCols) : m_data(internal::conditional_aligned_new_auto(size)), m_cols(nbCols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_cols(std::move(other.m_cols)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_cols, other.m_cols); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); } + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + static DenseIndex rows(void) {return _Rows;} + DenseIndex cols(void) const {return m_cols;} + void conservativeResize(DenseIndex size, DenseIndex, DenseIndex nbCols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, _Rows*m_cols); + m_cols = nbCols; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex, DenseIndex nbCols) + { + 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 = nbCols; + } + const T *data() const { return m_data; } + T *data() { return m_data; } + private: + DenseStorage(const DenseStorage&); + DenseStorage& operator=(const DenseStorage&); +}; + +// matrix with dynamic height and fixed width (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + public: + DenseStorage() : m_data(0), m_rows(0) {} + DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {} + DenseStorage(DenseIndex size, DenseIndex nbRows, DenseIndex) : m_data(internal::conditional_aligned_new_auto(size)), m_rows(nbRows) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + DenseStorage(DenseStorage&& other) + : m_data(std::move(other.m_data)) + , m_rows(std::move(other.m_rows)) + { + other.m_data = nullptr; + } + DenseStorage& operator=(DenseStorage&& other) + { + using std::swap; + swap(m_data, other.m_data); + swap(m_rows, other.m_rows); + return *this; + } +#endif + ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); } + void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + DenseIndex rows(void) const {return m_rows;} + static DenseIndex cols(void) {return _Cols;} + void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*_Cols); + m_rows = nbRows; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex nbRows, 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 = nbRows; + } + const T *data() const { return m_data; } + T *data() { return m_data; } + private: + DenseStorage(const DenseStorage&); + DenseStorage& operator=(const DenseStorage&); +}; + +} // end namespace Eigen + +#endif // EIGEN_MATRIX_H diff --git a/src/Eigen/src/Core/Diagonal.h b/src/Eigen/src/Core/Diagonal.h new file mode 100644 index 0000000..68cf6d4 --- /dev/null +++ b/src/Eigen/src/Core/Diagonal.h @@ -0,0 +1,237 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 { + RowsAtCompileTime = (int(DiagIndex) == DynamicIndex || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic + : (EIGEN_PLAIN_ENUM_MIN(MatrixType::RowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0), + MatrixType::ColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))), + ColsAtCompileTime = 1, + MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic + : DiagIndex == DynamicIndex ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime, + MatrixType::MaxColsAtCompileTime) + : (EIGEN_PLAIN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0), + MatrixType::MaxColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))), + 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: + + enum { DiagIndex = _DiagIndex }; + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal) + + inline Diagonal(MatrixType& matrix, Index a_index = DiagIndex) : m_matrix(matrix), m_index(a_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 idx) + { + EIGEN_STATIC_ASSERT_LVALUE(MatrixType) + return m_matrix.const_cast_derived().coeffRef(idx+rowOffset(), idx+colOffset()); + } + + inline const Scalar& coeffRef(Index idx) const + { + return m_matrix.const_cast_derived().coeffRef(idx+rowOffset(), idx+colOffset()); + } + + inline CoeffReturnType coeff(Index idx) const + { + return m_matrix.coeff(idx+rowOffset(), idx+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_dynamicindex 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 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::DiagonalDynamicIndexReturnType +MatrixBase::diagonal(Index index) +{ + return DiagonalDynamicIndexReturnType(derived(), index); +} + +/** This is the const version of diagonal(Index). */ +template +inline typename MatrixBase::ConstDiagonalDynamicIndexReturnType +MatrixBase::diagonal(Index index) const +{ + return ConstDiagonalDynamicIndexReturnType(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/src/Eigen/src/Core/DiagonalMatrix.h b/src/Eigen/src/Core/DiagonalMatrix.h new file mode 100644 index 0000000..53c757b --- /dev/null +++ b/src/Eigen/src/Core/DiagonalMatrix.h @@ -0,0 +1,313 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 DiagonalVectorType::RealScalar RealScalar; + 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 + inline void addTo(MatrixBase &other) const + { other.diagonal() += diagonal(); } + template + inline 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(); } + + /** \returns the diagonal matrix product of \c *this by the matrix \a matrix. + */ + template + const DiagonalProduct + operator*(const MatrixBase &matrix) const + { + return DiagonalProduct(matrix.derived(), derived()); + } + + inline const DiagonalWrapper, const DiagonalVectorType> > + inverse() const + { + return diagonal().cwiseInverse(); + } + + inline const DiagonalWrapper, const DiagonalVectorType> > + operator*(const Scalar& scalar) const + { + return diagonal() * scalar; + } + friend inline const DiagonalWrapper, const DiagonalVectorType> > + operator*(const Scalar& scalar, const DiagonalBase& other) + { + return other.diagonal() * scalar; + } + + #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 +inline 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& a_diagonal) : m_diagonal(a_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(const RealScalar& prec) const +{ + using std::abs; + if(cols() != rows()) return false; + RealScalar maxAbsOnDiagonal = static_cast(-1); + for(Index j = 0; j < cols(); ++j) + { + RealScalar absOnDiagonal = 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/src/Eigen/src/Core/DiagonalProduct.h b/src/Eigen/src/Core/DiagonalProduct.h new file mode 100644 index 0000000..cc6b536 --- /dev/null +++ b/src/Eigen/src/Core/DiagonalProduct.h @@ -0,0 +1,131 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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, + _ScalarAccessOnDiag = !((int(_StorageOrder) == ColMajor && int(ProductOrder) == OnTheLeft) + ||(int(_StorageOrder) == RowMajor && 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::DiagonalVectorType::Flags)&PacketAccessBit))), + _Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && _SameTypes && (_ScalarAccessOnDiag || (bool(int(DiagonalType::DiagonalVectorType::Flags)&PacketAccessBit))), + _LinearAccessMask = (RowsAtCompileTime==1 || ColsAtCompileTime==1) ? LinearAccessBit : 0, + + Flags = ((HereditaryBits|_LinearAccessMask|AlignedBit) & (unsigned int)(MatrixType::Flags)) | (_Vectorizable ? PacketAccessBit : 0),//(int(MatrixType::Flags)&int(DiagonalType::DiagonalVectorType::Flags)&AlignedBit), + Cost0 = EIGEN_ADD_COST(NumTraits::MulCost, MatrixType::CoeffReadCost), + CoeffReadCost = EIGEN_ADD_COST(Cost0,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())); + } + + EIGEN_STRONG_INLINE Index rows() const { return m_matrix.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_matrix.cols(); } + + EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const + { + return m_diagonal.diagonal().coeff(ProductOrder == OnTheLeft ? row : col) * m_matrix.coeff(row, col); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index idx) const + { + enum { + StorageOrder = int(MatrixType::Flags) & RowMajorBit ? RowMajor : ColMajor + }; + return coeff(int(StorageOrder)==ColMajor?idx:0,int(StorageOrder)==ColMajor?0:idx); + } + + 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()); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index idx) const + { + enum { + StorageOrder = int(MatrixType::Flags) & RowMajorBit ? RowMajor : ColMajor + }; + return packet(int(StorageOrder)==ColMajor?idx:0,int(StorageOrder)==ColMajor?0:idx); + } + + 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) || (int(DiagonalType::DiagonalVectorType::Flags)&AlignedBit)==AlignedBit) ? 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 &a_diagonal) const +{ + return DiagonalProduct(derived(), a_diagonal.derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_DIAGONALPRODUCT_H diff --git a/src/Eigen/src/Core/Dot.h b/src/Eigen/src/Core/Dot.h new file mode 100644 index 0000000..23aab83 --- /dev/null +++ b/src/Eigen/src/Core/Dot.h @@ -0,0 +1,263 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008, 2010 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 +inline 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 numext::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 +{ + using std::sqrt; + return 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) + { + using std::pow; + 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, const RealScalar& prec) const +{ + typename internal::nested::type nested(derived()); + typename internal::nested::type otherNested(other.derived()); + return numext::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(const 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/src/Eigen/src/Core/EigenBase.h b/src/Eigen/src/Core/EigenBase.h new file mode 100644 index 0000000..fadb458 --- /dev/null +++ b/src/Eigen/src/Core/EigenBase.h @@ -0,0 +1,131 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2009 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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(); +} + +} // end namespace Eigen + +#endif // EIGEN_EIGENBASE_H diff --git a/src/Eigen/src/Core/Flagged.h b/src/Eigen/src/Core/Flagged.h new file mode 100644 index 0000000..1f2955f --- /dev/null +++ b/src/Eigen/src/Core/Flagged.h @@ -0,0 +1,140 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/src/Core/ForceAlignedAccess.h b/src/Eigen/src/Core/ForceAlignedAccess.h new file mode 100644 index 0000000..807c7a2 --- /dev/null +++ b/src/Eigen/src/Core/ForceAlignedAccess.h @@ -0,0 +1,146 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/src/Core/Functors.h b/src/Eigen/src/Core/Functors.h new file mode 100644 index 0000000..5f14c65 --- /dev/null +++ b/src/Eigen/src/Core/Functors.h @@ -0,0 +1,1026 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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; + using std::sqrt; + 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 numext::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 { + enum { + // TODO vectorize mixed product + Vectorizable = is_same::value && packet_traits::HasDiv && packet_traits::HasDiv + }; + typedef typename scalar_product_traits::ReturnType result_type; + EIGEN_EMPTY_STRUCT_CTOR(scalar_quotient_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::pdiv(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = (NumTraits::MulCost + NumTraits::MulCost), // rough estimate! + PacketAccess = scalar_quotient_op::Vectorizable + }; +}; + + + +/** \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 + }; +}; + +/** \internal + * \brief Template functors for comparison of two scalars + * \todo Implement packet-comparisons + */ +template struct scalar_cmp_op; + +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = false + }; +}; + +template +struct result_of(Scalar,Scalar)> { + typedef bool type; +}; + + +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a==b;} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a<=b;} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return !(a<=b || b<=a);} +}; +template struct scalar_cmp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op) + EIGEN_STRONG_INLINE bool operator()(const Scalar& a, const Scalar& b) const {return a!=b;} +}; + +// 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 { using std::abs; return 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 numext::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 { using numext::conj; return 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 numext::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 numext::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 numext::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 numext::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 { using std::exp; return 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 { using std::log; return 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() outside 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 }; }; + +/** \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 { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_quotient1_op(const scalar_quotient1_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_quotient1_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::pdiv(a, pset1(m_other)); } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = 2 * NumTraits::MulCost, PacketAccess = packet_traits::HasDiv }; }; + +// 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 (where size is 1 for coeff access or PacketSize for packet access) +// base += [size*step, ..., size*step] +// +// TODO: Perhaps it's better to initialize lazily (so not in the constructor but in packetOp) +// in order to avoid the padd() in operator() ? +template +struct linspaced_op_impl +{ + typedef typename packet_traits::type Packet; + + linspaced_op_impl(const Scalar& low, const 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 + { + m_base = padd(m_base, pset1(m_step)); + return m_low+Scalar(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(const Scalar& low, const 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(Scalar(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(const Scalar& low, const Scalar& high, DenseIndex num_steps) : impl((num_steps==1 ? high : low), (num_steps==1 ? Scalar() : (high-low)/Scalar(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 Eigen, any binary op (Product, CwiseBinaryOp) require the Lhs and Rhs to have the same scalar type, except for multiplication +// where the mixing of different types is handled by scalar_product_traits +// In particular, real * complex is allowed. +// FIXME move this to functor_traits adding a functor_default +template struct functor_is_product_like { enum { ret = 0 }; }; +template struct functor_is_product_like > { enum { ret = 1 }; }; +template struct functor_is_product_like > { enum { ret = 1 }; }; +template struct functor_is_product_like > { 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 { using std::sqrt; return 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 { using std::cos; return 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 { using std::sin; return 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 { using std::tan; return 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 { using std::acos; return 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 { using std::asin; return 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 numext::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/src/Eigen/src/Core/Fuzzy.h b/src/Eigen/src/Core/Fuzzy.h new file mode 100644 index 0000000..fe63bd2 --- /dev/null +++ b/src/Eigen/src/Core/Fuzzy.h @@ -0,0 +1,150 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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, const 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, const typename Derived::RealScalar&) + { + return x.matrix() == y.matrix(); + } +}; + +template::IsInteger> +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived& y, const typename Derived::RealScalar& prec) + { + return x.cwiseAbs2().sum() <= numext::abs2(prec) * y.cwiseAbs2().sum(); + } +}; + +template +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived&, const 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, const typename Derived::RealScalar& prec) + { + return x.cwiseAbs2().sum() <= numext::abs2(prec * y); + } +}; + +template +struct isMuchSmallerThan_scalar_selector +{ + static bool run(const Derived& x, const typename Derived::RealScalar&, const 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, + const 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, + const 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, + const RealScalar& prec +) const +{ + return internal::isMuchSmallerThan_object_selector::run(derived(), other.derived(), prec); +} + +} // end namespace Eigen + +#endif // EIGEN_FUZZY_H diff --git a/src/Eigen/src/Core/GeneralProduct.h b/src/Eigen/src/Core/GeneralProduct.h new file mode 100644 index 0000000..5744eb7 --- /dev/null +++ b/src/Eigen/src/Core/GeneralProduct.h @@ -0,0 +1,633 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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) + { + 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 { + +// Column major +template +EIGEN_DONT_INLINE void outer_product_selector_run(const ProductType& prod, Dest& dest, const Func& func, const false_type&) +{ + 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 +EIGEN_DONT_INLINE void outer_product_selector_run(const ProductType& prod, Dest& dest, const Func& func, const true_type&) { + 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 +struct traits > + : traits, Lhs, Rhs> > +{}; + +} + +template +class GeneralProduct + : public ProductBase, Lhs, Rhs> +{ + template struct is_row_major : internal::conditional<(int(T::Flags)&RowMajorBit), internal::true_type, internal::false_type>::type {}; + + public: + EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) + + GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) + { + } + + struct set { template void operator()(const Dst& dst, const Src& src) const { dst.const_cast_derived() = src; } }; + struct add { template void operator()(const Dst& dst, const Src& src) const { dst.const_cast_derived() += src; } }; + struct sub { template void operator()(const Dst& dst, const Src& src) const { dst.const_cast_derived() -= src; } }; + struct adds { + Scalar m_scale; + adds(const Scalar& s) : m_scale(s) {} + template void operator()(const Dst& dst, const Src& src) const { + dst.const_cast_derived() += m_scale * src; + } + }; + + template + inline void evalTo(Dest& dest) const { + internal::outer_product_selector_run(*this, dest, set(), is_row_major()); + } + + template + inline void addTo(Dest& dest) const { + internal::outer_product_selector_run(*this, dest, add(), is_row_major()); + } + + template + inline void subTo(Dest& dest) const { + internal::outer_product_selector_run(*this, dest, sub(), is_row_major()); + } + + template void scaleAndAddTo(Dest& dest, const Scalar& alpha) const + { + internal::outer_product_selector_run(*this, dest, adds(alpha), is_row_major()); + } +}; + +/*********************************************************************** +* Implementation of General Matrix Vector Product +***********************************************************************/ + +/* According to the shape/flags of the matrix we have to distinghish 3 different cases: + * 1 - the matrix is col-major, BLAS compatible and M is large => 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& a_lhs, const Rhs& a_rhs) : Base(a_lhs,a_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, const 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, const 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, const 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()); + + // make sure Dest is a compile-time vector type (bug 1166) + typedef typename conditional::type ActualDest; + + 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 = (ActualDest::InnerStrideAtCompileTime==1), + ComplexByReal = (NumTraits::IsComplex) && (!NumTraits::IsComplex), + MightCannotUseDest = (ActualDest::InnerStrideAtCompileTime!=1) || ComplexByReal + }; + + gemv_static_vector_if static_dest; + + bool alphaIsCompatible = (!ComplexByReal) || (numext::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, const 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.col(0).innerStride(), //NOTE if dest is not a vector at compile-time, then dest.innerStride() might be wrong. (bug 1166) + actualAlpha); + } +}; + +template<> struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, const 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, const 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/src/Eigen/src/Core/GenericPacketMath.h b/src/Eigen/src/Core/GenericPacketMath.h new file mode 100644 index 0000000..5f783eb --- /dev/null +++ b/src/Eigen/src/Core/GenericPacketMath.h @@ -0,0 +1,350 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 numext::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) { using std::abs; 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. + * For instance, for a packet of 8 elements, 4 scalar will be read from \a *from and + * duplicated to form: {from[0],from[0],from[1],from[1],,from[2],from[2],,from[3],from[3]} + * Currently, this function is only used for scalar * complex products. + */ +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) +{ + // FIXME: uncomment the following in case we drop the internal imag and real functions. +// using std::imag; +// using std::real; + 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) { using std::sin; return sin(a); } + +/** \internal \returns the cosine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pcos(const Packet& a) { using std::cos; return cos(a); } + +/** \internal \returns the tan of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet ptan(const Packet& a) { using std::tan; 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) { using std::asin; 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) { using std::acos; return acos(a); } + +/** \internal \returns the exp of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pexp(const Packet& a) { using std::exp; return exp(a); } + +/** \internal \returns the log of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet plog(const Packet& a) { using std::log; 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) { using std::sqrt; 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 packet_size minus \a Offset last elements + * of \a first and \a Offset first elements of \a second. + * + * This function is currently only used to optimize matrix-vector products on unligned matrices. + * It takes 2 packets that represent a contiguous memory array, and returns a packet starting + * at the position \a Offset. For instance, for packets of 4 elements, we have: + * Input: + * - first = {f0,f1,f2,f3} + * - second = {s0,s1,s2,s3} + * Output: + * - if Offset==0 then {f0,f1,f2,f3} + * - if Offset==1 then {f1,f2,f3,s0} + * - if Offset==2 then {f2,f3,s0,s1} + * - if Offset==3 then {f3,s0,s1,s3} + */ +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/src/Eigen/src/Core/GlobalFunctions.h b/src/Eigen/src/Core/GlobalFunctions.h new file mode 100644 index 0000000..2acf977 --- /dev/null +++ b/src/Eigen/src/Core/GlobalFunctions.h @@ -0,0 +1,92 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2010-2012 Gael Guennebaud +// Copyright (C) 2010 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_GLOBAL_FUNCTIONS_H +#define EIGEN_GLOBAL_FUNCTIONS_H + +#define EIGEN_ARRAY_DECLARE_GLOBAL_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 Eigen +{ + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(real,scalar_real_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(imag,scalar_imag_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(conj,scalar_conjugate_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sin,scalar_sin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cos,scalar_cos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(asin,scalar_asin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(acos,scalar_acos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(tan,scalar_tan_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(exp,scalar_exp_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log,scalar_log_op) + EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(abs,scalar_abs_op) + EIGEN_ARRAY_DECLARE_GLOBAL_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() + ); + } + + /** + * \brief Component-wise division of a scalar by array elements. + **/ + template + inline const Eigen::CwiseUnaryOp, const Derived> + operator/(const 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(abs2,scalar_abs2_op) + } +} + +// TODO: cleanly disable those functions that are not supported on Array (numext::real_ref, internal::random, internal::isApprox...) + +#endif // EIGEN_GLOBAL_FUNCTIONS_H diff --git a/src/Eigen/src/Core/IO.h b/src/Eigen/src/Core/IO.h new file mode 100644 index 0000000..8d4bc59 --- /dev/null +++ b/src/Eigen/src/Core/IO.h @@ -0,0 +1,250 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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), + rowSpacer(""), coeffSeparator(_coeffSeparator), precision(_precision), flags(_flags) + { + 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; + using std::log; + 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; + } + + std::streamsize old_precision = 0; + if(explicit_precision) old_precision = s.precision(explicit_precision); + + bool align_cols = !(fmt.flags & DontAlignCols); + if(align_cols) + { + // compute the largest width + for(Index j = 0; j < m.cols(); ++j) + for(Index i = 0; i < m.rows(); ++i) + { + std::stringstream sstr; + sstr.copyfmt(s); + sstr << m.coeff(i,j); + width = std::max(width, Index(sstr.str().length())); + } + } + 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/src/Eigen/src/Core/Map.h b/src/Eigen/src/Core/Map.h new file mode 100644 index 0000000..f804c89 --- /dev/null +++ b/src/Eigen/src/Core/Map.h @@ -0,0 +1,192 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 dataPtr pointer to the array to map + * \param a_stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType dataPtr, const StrideType& a_stride = StrideType()) + : Base(cast_to_pointer_type(dataPtr)), m_stride(a_stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size vector case. + * + * \param dataPtr pointer to the array to map + * \param a_size the size of the vector expression + * \param a_stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType dataPtr, Index a_size, const StrideType& a_stride = StrideType()) + : Base(cast_to_pointer_type(dataPtr), a_size), m_stride(a_stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size matrix case. + * + * \param dataPtr pointer to the array to map + * \param nbRows the number of rows of the matrix expression + * \param nbCols the number of columns of the matrix expression + * \param a_stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType dataPtr, Index nbRows, Index nbCols, const StrideType& a_stride = StrideType()) + : Base(cast_to_pointer_type(dataPtr), nbRows, nbCols), m_stride(a_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/src/Eigen/src/Core/MapBase.h b/src/Eigen/src/Core/MapBase.h new file mode 100644 index 0000000..81efc4a --- /dev/null +++ b/src/Eigen/src/Core/MapBase.h @@ -0,0 +1,251 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 rowId, Index colId) const + { + return m_data[colId * colStride() + rowId * 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 rowId, Index colId) const + { + return this->m_data[colId * colStride() + rowId * 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 rowId, Index colId) const + { + return internal::ploadt + (m_data + (colId * colStride() + rowId * rowStride())); + } + + template + inline PacketScalar packet(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return internal::ploadt(m_data + index * innerStride()); + } + + explicit inline MapBase(PointerType dataPtr) : m_data(dataPtr), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime) + { + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + checkSanity(); + } + + inline MapBase(PointerType dataPtr, Index vecSize) + : m_data(dataPtr), + m_rows(RowsAtCompileTime == Dynamic ? vecSize : Index(RowsAtCompileTime)), + m_cols(ColsAtCompileTime == Dynamic ? vecSize : Index(ColsAtCompileTime)) + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + eigen_assert(vecSize >= 0); + eigen_assert(dataPtr == 0 || SizeAtCompileTime == Dynamic || SizeAtCompileTime == vecSize); + checkSanity(); + } + + inline MapBase(PointerType dataPtr, Index nbRows, Index nbCols) + : m_data(dataPtr), m_rows(nbRows), m_cols(nbCols) + { + eigen_assert( (dataPtr == 0) + || ( nbRows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == nbRows) + && nbCols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == nbCols))); + checkSanity(); + } + + #ifdef EIGEN_MAPBASE_PLUGIN + #include EIGEN_MAPBASE_PLUGIN + #endif + + 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) + && "input pointer is not aligned on a 16 byte boundary"); + } + + PointerType m_data; + const internal::variable_if_dynamic m_rows; + const internal::variable_if_dynamic m_cols; +}; + +template class MapBase + : public MapBase +{ + typedef MapBase ReadOnlyMapBase; + 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& val) + { + internal::pstoret + (this->m_data + (col * colStride() + row * rowStride()), val); + } + + template + inline void writePacket(Index index, const PacketScalar& val) + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + internal::pstoret + (this->m_data + index * innerStride(), val); + } + + explicit inline MapBase(PointerType dataPtr) : Base(dataPtr) {} + inline MapBase(PointerType dataPtr, Index vecSize) : Base(dataPtr, vecSize) {} + inline MapBase(PointerType dataPtr, Index nbRows, Index nbCols) : Base(dataPtr, nbRows, nbCols) {} + + Derived& operator=(const MapBase& other) + { + ReadOnlyMapBase::Base::operator=(other); + return derived(); + } + + // In theory we could simply refer to Base:Base::operator=, but MSVC does not like Base::Base, + // see bugs 821 and 920. + using ReadOnlyMapBase::Base::operator=; +}; + +#undef EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS + +} // end namespace Eigen + +#endif // EIGEN_MAPBASE_H diff --git a/src/Eigen/src/Core/MathFunctions.h b/src/Eigen/src/Core/MathFunctions.h new file mode 100644 index 0000000..dc2c698 --- /dev/null +++ b/src/Eigen/src/Core/MathFunctions.h @@ -0,0 +1,779 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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) Eigen::internal::func##_impl::type> +#define EIGEN_MATHFUNC_RETVAL(func, scalar) typename Eigen::internal::func##_retval::type>::type + +/**************************************************************************** +* Implementation of real * +****************************************************************************/ + +template::IsComplex> +struct real_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x; + } +}; + +template +struct real_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + using std::real; + return real(x); + } +}; + +template struct real_impl : real_default_impl {}; + +template +struct real_retval +{ + typedef typename NumTraits::Real type; +}; + + +/**************************************************************************** +* Implementation of imag * +****************************************************************************/ + +template::IsComplex> +struct imag_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar&) + { + return RealScalar(0); + } +}; + +template +struct imag_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + using std::imag; + return imag(x); + } +}; + +template struct imag_impl : imag_default_impl {}; + +template +struct imag_retval +{ + typedef typename NumTraits::Real type; +}; + +/**************************************************************************** +* 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; +}; + +/**************************************************************************** +* 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; +}; + +/**************************************************************************** +* Implementation of conj * +****************************************************************************/ + +template::IsComplex> +struct conj_impl +{ + static inline Scalar run(const Scalar& x) + { + return x; + } +}; + +template +struct conj_impl +{ + static inline Scalar run(const Scalar& x) + { + using std::conj; + return conj(x); + } +}; + +template +struct conj_retval +{ + typedef Scalar type; +}; + +/**************************************************************************** +* Implementation of abs2 * +****************************************************************************/ + +template +struct abs2_impl_default +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x*x; + } +}; + +template +struct abs2_impl_default // IsComplex +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return real(x)*real(x) + imag(x)*imag(x); + } +}; + +template +struct abs2_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return abs2_impl_default::IsComplex>::run(x); + } +}; + +template +struct abs2_retval +{ + typedef typename NumTraits::Real type; +}; + +/**************************************************************************** +* Implementation of norm1 * +****************************************************************************/ + +template +struct norm1_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + using std::abs; + return abs(real(x)) + abs(imag(x)); + } +}; + +template +struct norm1_default_impl +{ + static inline Scalar run(const Scalar& x) + { + using std::abs; + return abs(x); + } +}; + +template +struct norm1_impl : norm1_default_impl::IsComplex> {}; + +template +struct norm1_retval +{ + typedef typename NumTraits::Real type; +}; + +/**************************************************************************** +* 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; + using std::abs; + using std::sqrt; + RealScalar _x = abs(x); + RealScalar _y = abs(y); + RealScalar p = (max)(_x, _y); + if(p==RealScalar(0)) return RealScalar(0); + 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; +}; + +/**************************************************************************** +* 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 atanh2 * +****************************************************************************/ + +template +struct atanh2_default_impl +{ + typedef Scalar retval; + typedef typename NumTraits::Real RealScalar; + static inline Scalar run(const Scalar& x, const Scalar& y) + { + using std::abs; + using std::log; + using std::sqrt; + Scalar z = x / y; + if (y == Scalar(0) || abs(z) > sqrt(NumTraits::epsilon())) + return RealScalar(0.5) * log((y + x) / (y - x)); + else + return z + z*z*z / RealScalar(3); + } +}; + +template +struct atanh2_default_impl +{ + static inline Scalar run(const Scalar&, const Scalar&) + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) + return Scalar(0); + } +}; + +template +struct atanh2_impl : atanh2_default_impl::IsInteger> {}; + +template +struct atanh2_retval +{ + typedef Scalar type; +}; + +/**************************************************************************** +* 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; +}; + +/**************************************************************************** +* 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)), + offset = NumTraits::IsSigned ? (1 << (EIGEN_PLAIN_ENUM_MIN(rand_bits,scalar_bits)-1)) : 0 + }; + return Scalar((std::rand() >> shift) - 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(); +} + +} // end namespace internal + +/**************************************************************************** +* Generic math function * +****************************************************************************/ + +namespace numext { + +template +inline EIGEN_MATHFUNC_RETVAL(real, Scalar) real(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(real, Scalar)::run(x); +} + +template +inline typename internal::add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) >::type real_ref(const Scalar& x) +{ + return internal::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); +} + +template +inline EIGEN_MATHFUNC_RETVAL(imag, Scalar) imag(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(imag, Scalar)::run(x); +} + +template +inline typename internal::add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) >::type imag_ref(const Scalar& x) +{ + return internal::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); +} + +template +inline EIGEN_MATHFUNC_RETVAL(conj, Scalar) conj(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(conj, Scalar)::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(abs2, Scalar) abs2(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(abs2, Scalar)::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(norm1, Scalar) norm1(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(norm1, Scalar)::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(hypot, Scalar) hypot(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y); +} + +template +inline EIGEN_MATHFUNC_RETVAL(atanh2, Scalar) atanh2(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(atanh2, Scalar)::run(x, y); +} + +template +inline EIGEN_MATHFUNC_RETVAL(pow, Scalar) pow(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(pow, Scalar)::run(x, y); +} + +// 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 numext + +namespace internal { + +/**************************************************************************** +* 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) + { + using std::abs; + return abs(x) <= abs(y) * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + using std::min; + using std::abs; + 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 numext::abs2(x) <= numext::abs2(y) * prec * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + using std::min; + return numext::abs2(x - y) <= (min)(numext::abs2(x), numext::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, + const 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, + const 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, + const 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; + } + +}; + + +} // end namespace internal + +} // end namespace Eigen + +#endif // EIGEN_MATHFUNCTIONS_H diff --git a/src/Eigen/src/Core/Matrix.h b/src/Eigen/src/Core/Matrix.h new file mode 100644 index 0000000..02be142 --- /dev/null +++ b/src/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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 Matrix() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_COEFFS_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_COEFFS_IF_THAT_OPTION_IS_ENABLED } + +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + Matrix(Matrix&& other) + : Base(std::move(other)) + { + Base::_check_template_params(); + if (RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic) + Base::_set_noalias(other); + } + Matrix& operator=(Matrix&& other) + { + other.swap(*this); + return *this; + } +#endif + + /** \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_COEFFS_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_to_match(other); + // 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/src/Eigen/src/Core/MatrixBase.h b/src/Eigen/src/Core/MatrixBase.h new file mode 100644 index 0000000..e83ef4d --- /dev/null +++ b/src/Eigen/src/Core/MatrixBase.h @@ -0,0 +1,563 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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); + + template + Derived& lazyAssign(const ProductBase& other); + + template + Derived& lazyAssign(const MatrixPowerProduct& other); + + 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 typename internal::add_const >::type ConstDiagonalReturnType; + 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; + + typedef Diagonal DiagonalDynamicIndexReturnType; + typedef typename internal::add_const >::type ConstDiagonalDynamicIndexReturnType; + + DiagonalDynamicIndexReturnType diagonal(Index index); + ConstDiagonalDynamicIndexReturnType diagonal(Index index) const; + + #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), + const 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(const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isDiagonal(const RealScalar& prec = NumTraits::dummy_precision()) const; + + bool isUpperTriangular(const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isLowerTriangular(const RealScalar& prec = NumTraits::dummy_precision()) const; + + template + bool isOrthogonal(const MatrixBase& other, + const RealScalar& prec = NumTraits::dummy_precision()) const; + bool isUnitary(const 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 Eigen::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); + +///////// SparseCore module ///////// + + template + EIGEN_STRONG_INLINE const typename SparseMatrixBase::template CwiseProductDenseReturnType::Type + cwiseProduct(const SparseMatrixBase &other) const + { + return other.cwiseProduct(derived()); + } + +///////// 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; + const MatrixPowerReturnValue pow(const RealScalar& p) 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;} +}; + + +/*************************************************************************** +* Implementation of matrix base methods +***************************************************************************/ + +/** replaces \c *this by \c *this * \a other. + * + * \returns a reference to \c *this + * + * Example: \include MatrixBase_applyOnTheRight.cpp + * Output: \verbinclude MatrixBase_applyOnTheRight.out + */ +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*=(). + * + * Example: \include MatrixBase_applyOnTheRight.cpp + * Output: \verbinclude MatrixBase_applyOnTheRight.out + */ +template +template +inline void MatrixBase::applyOnTheRight(const EigenBase &other) +{ + other.derived().applyThisOnTheRight(derived()); +} + +/** replaces \c *this by \a other * \c *this. + * + * Example: \include MatrixBase_applyOnTheLeft.cpp + * Output: \verbinclude MatrixBase_applyOnTheLeft.out + */ +template +template +inline void MatrixBase::applyOnTheLeft(const EigenBase &other) +{ + other.derived().applyThisOnTheLeft(derived()); +} + +} // end namespace Eigen + +#endif // EIGEN_MATRIXBASE_H diff --git a/src/Eigen/src/Core/NestByValue.h b/src/Eigen/src/Core/NestByValue.h new file mode 100644 index 0000000..a893b17 --- /dev/null +++ b/src/Eigen/src/Core/NestByValue.h @@ -0,0 +1,111 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/src/Core/NoAlias.h b/src/Eigen/src/Core/NoAlias.h new file mode 100644 index 0000000..768bfb1 --- /dev/null +++ b/src/Eigen/src/Core/NoAlias.h @@ -0,0 +1,134 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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()); } + + template + ExpressionType& operator=(const ReturnByValue& func) + { return m_expression = func; } +#endif + + ExpressionType& expression() const + { + return m_expression; + } + + 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/src/Eigen/src/Core/NumTraits.h b/src/Eigen/src/Core/NumTraits.h new file mode 100644 index 0000000..bac9e50 --- /dev/null +++ b/src/Eigen/src/Core/NumTraits.h @@ -0,0 +1,150 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 + }; + + static inline RealScalar epsilon() { return NumTraits::epsilon(); } + static inline RealScalar dummy_precision() { return NumTraits::dummy_precision(); } +}; + +} // end namespace Eigen + +#endif // EIGEN_NUMTRAITS_H diff --git a/src/Eigen/src/Core/PermutationMatrix.h b/src/Eigen/src/Core/PermutationMatrix.h new file mode 100644 index 0000000..bda79fa --- /dev/null +++ b/src/Eigen/src/Core/PermutationMatrix.h @@ -0,0 +1,722 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 Index(indices().size()); } + + /** \returns the number of columns */ + inline Index cols() const { return Index(indices().size()); } + + /** \returns the size of a side of the respective square matrix, i.e., the number of indices */ + inline Index size() const { return Index(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); } + + /** \returns the determinant of the permutation matrix, which is either 1 or -1 depending on the parity of the permutation. + * + * This function is O(\c n) procedure allocating a buffer of \c n booleans. + */ + Index determinant() const + { + Index res = 1; + Index n = size(); + Matrix mask(n); + mask.fill(false); + Index r = 0; + while(r < n) + { + // search for the next seed + while(r=n) + break; + // we got one, let's follow it until we are back to the seed + Index k0 = r++; + mask.coeffRef(k0) = true; + for(Index k=indices().coeff(k0); k!=k0; k=indices().coeff(k)) + { + mask.coeffRef(k) = true; + res = -res; + } + } + return res; + } + + 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& a_indices) : m_indices(a_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* indicesPtr) + : m_indices(indicesPtr) + {} + + inline Map(const Index* indicesPtr, Index size) + : m_indices(indicesPtr,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& a_indices) + : m_indices(a_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; + typedef typename MatrixType::Index Index; + + permut_matrix_product_retval(const PermutationType& perm, const MatrixType& matrix) + : m_permutation(perm), m_matrix(matrix) + {} + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + template inline void evalTo(Dest& dst) const + { + const Index n = Side==OnTheLeft ? rows() : cols(); + // FIXME we need an is_same for expression that is not sensitive to constness. For instance + // is_same_xpr, Block >::value should be true. + const typename Dest::Scalar *dst_data = internal::extract_data(dst); + if( is_same::value + && blas_traits::HasUsableDirectAccess + && blas_traits::HasUsableDirectAccess + && dst_data!=0 && dst_data == extract_data(m_matrix)) + { + // apply the permutation inplace + Matrix mask(m_permutation.size()); + mask.fill(false); + Index 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 + Index k0 = r++; + Index kPrev = k0; + mask.coeffRef(k0) = true; + for(Index 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/src/Eigen/src/Core/PlainObjectBase.h b/src/Eigen/src/Core/PlainObjectBase.h new file mode 100644 index 0000000..9f71956 --- /dev/null +++ b/src/Eigen/src/Core/PlainObjectBase.h @@ -0,0 +1,822 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_DENSESTORAGEBASE_H +#define EIGEN_DENSESTORAGEBASE_H + +#if defined(EIGEN_INITIALIZE_MATRICES_BY_ZERO) +# define EIGEN_INITIALIZE_COEFFS +# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i::quiet_NaN(); +#else +# undef EIGEN_INITIALIZE_COEFFS +# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED +#endif + +namespace Eigen { + +namespace internal { + +template struct check_rows_cols_for_overflow { + template + static EIGEN_ALWAYS_INLINE void run(Index, Index) + { + } +}; + +template<> struct check_rows_cols_for_overflow { + template + static EIGEN_ALWAYS_INLINE void run(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) ? 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 rowId, Index colId) const + { + if(Flags & RowMajorBit) + return m_storage.data()[colId + rowId * m_storage.cols()]; + else // column-major + return m_storage.data()[rowId + colId * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE const Scalar& coeff(Index index) const + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index rowId, Index colId) + { + if(Flags & RowMajorBit) + return m_storage.data()[colId + rowId * m_storage.cols()]; + else // column-major + return m_storage.data()[rowId + colId * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE const Scalar& coeffRef(Index rowId, Index colId) const + { + if(Flags & RowMajorBit) + return m_storage.data()[colId + rowId * m_storage.cols()]; + else // column-major + return m_storage.data()[rowId + colId * 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 rowId, Index colId) const + { + return internal::ploadt + (m_storage.data() + (Flags & RowMajorBit + ? colId + rowId * m_storage.cols() + : rowId + colId * 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 rowId, Index colId, const PacketScalar& val) + { + internal::pstoret + (m_storage.data() + (Flags & RowMajorBit + ? colId + rowId * m_storage.cols() + : rowId + colId * m_storage.rows()), val); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacket(Index index, const PacketScalar& val) + { + internal::pstoret(m_storage.data() + index, val); + } + + /** \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 nbRows, Index nbCols) + { + eigen_assert( EIGEN_IMPLIES(RowsAtCompileTime!=Dynamic,nbRows==RowsAtCompileTime) + && EIGEN_IMPLIES(ColsAtCompileTime!=Dynamic,nbCols==ColsAtCompileTime) + && EIGEN_IMPLIES(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic,nbRows<=MaxRowsAtCompileTime) + && EIGEN_IMPLIES(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic,nbCols<=MaxColsAtCompileTime) + && nbRows>=0 && nbCols>=0 && "Invalid sizes when resizing a matrix or array."); + internal::check_rows_cols_for_overflow::run(nbRows, nbCols); + #ifdef EIGEN_INITIALIZE_COEFFS + Index size = nbRows*nbCols; + bool size_changed = size != this->size(); + m_storage.resize(size, nbRows, nbCols); + if(size_changed) EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED + #else + internal::check_rows_cols_for_overflow::run(nbRows, nbCols); + m_storage.resize(nbRows*nbCols, nbRows, nbCols); + #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 && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0); + #ifdef EIGEN_INITIALIZE_COEFFS + 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_COEFFS + if(size_changed) EIGEN_INITIALIZE_COEFFS_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 nbCols) + { + resize(rows(), nbCols); + } + + /** 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 nbRows, NoChange_t) + { + resize(nbRows, 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::run(Index(other.rows()), Index(other.cols())); + const Index othersize = Index(other.rows())*Index(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 nbRows, Index nbCols) + { + internal::conservative_resize_like_impl::run(*this, nbRows, nbCols); + } + + /** 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 nbRows, NoChange_t) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(nbRows, 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 nbCols) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(rows(), nbCols); + } + + /** 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 PlainObjectBase() : m_storage() + { +// _check_template_params(); +// EIGEN_INITIALIZE_COEFFS_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_COEFFS_IF_THAT_OPTION_IS_ENABLED + } +#endif + +#ifdef EIGEN_HAVE_RVALUE_REFERENCES + PlainObjectBase(PlainObjectBase&& other) + : m_storage( std::move(other.m_storage) ) + { + } + + PlainObjectBase& operator=(PlainObjectBase&& other) + { + using std::swap; + swap(m_storage, other.m_storage); + return *this; + } +#endif + + /** Copy constructor */ + EIGEN_STRONG_INLINE PlainObjectBase(const PlainObjectBase& other) + : m_storage() + { + _check_template_params(); + lazyAssign(other); + } + + template + EIGEN_STRONG_INLINE PlainObjectBase(const DenseBase &other) + : m_storage() + { + _check_template_params(); + lazyAssign(other); + } + + EIGEN_STRONG_INLINE PlainObjectBase(Index a_size, Index nbRows, Index nbCols) + : m_storage(a_size, nbRows, nbCols) + { +// _check_template_params(); +// EIGEN_INITIALIZE_COEFFS_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(Index(other.derived().rows()) * Index(other.derived().cols()), other.derived().rows(), other.derived().cols()) + { + _check_template_params(); + internal::check_rows_cols_for_overflow::run(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"); + EIGEN_ONLY_USED_FOR_DEBUG(other); + if(this->size()==0) + resizeLike(other); + #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 nbRows, Index nbCols, typename internal::enable_if::type* = 0) + { + EIGEN_STATIC_ASSERT(bool(NumTraits::IsInteger) && + bool(NumTraits::IsInteger), + FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED) + resize(nbRows,nbCols); + } + template + EIGEN_STRONG_INLINE void _init2(const Scalar& val0, const Scalar& val1, typename internal::enable_if::type* = 0) + { + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 2) + m_storage.data()[0] = val0; + m_storage.data()[1] = val1; + } + + 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 }; +}; + +namespace internal { + +template +struct 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::run(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); + } + } +}; + +// Here, the specialization for vectors inherits from the general matrix case +// to allow calling .conservativeResize(rows,cols) on vectors. +template +struct conservative_resize_like_impl + : conservative_resize_like_impl +{ + using conservative_resize_like_impl::run; + + 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/src/Eigen/src/Core/ProductBase.h b/src/Eigen/src/Core/ProductBase.h new file mode 100644 index 0000000..cf74470 --- /dev/null +++ b/src/Eigen/src/Core/ProductBase.h @@ -0,0 +1,290 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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: + +#ifndef EIGEN_NO_MALLOC + typedef typename Base::PlainObject BasePlainObject; + typedef Matrix DynPlainObject; + typedef typename internal::conditional<(BasePlainObject::SizeAtCompileTime==Dynamic) || (BasePlainObject::SizeAtCompileTime*int(sizeof(Scalar)) < int(EIGEN_STACK_ALLOCATION_LIMIT)), + BasePlainObject, DynPlainObject>::type PlainObject; +#else + typedef typename Base::PlainObject PlainObject; +#endif + + ProductBase(const Lhs& a_lhs, const Rhs& a_rhs) + : m_lhs(a_lhs), m_rhs(a_rhs) + { + eigen_assert(a_lhs.cols() == a_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, const 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 typename GeneralProduct::PlainObject const& type; +}; +template +struct nested, N, PlainObject> +{ + typedef typename GeneralProduct::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, const typename Derived::Scalar& x) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(const ProductBase& prod, const typename Derived::RealScalar& x) +{ return ScaledProduct(prod.derived(), x); } + + +template +const ScaledProduct +operator*(const typename Derived::Scalar& x,const ProductBase& prod) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(const 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, const 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, const Scalar& a_alpha) const { m_prod.derived().scaleAndAddTo(dst,a_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/src/Eigen/src/Core/Random.h b/src/Eigen/src/Core/Random.h new file mode 100644 index 0000000..480fea4 --- /dev/null +++ b/src/Eigen/src/Core/Random.h @@ -0,0 +1,152 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 newSize, 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 newSize) +{ + resize(newSize); + return setRandom(); +} + +/** Resizes to the given size, and sets all coefficients in this expression to random values. + * + * \param nbRows the new number of rows + * \param nbCols 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 nbRows, Index nbCols) +{ + resize(nbRows, nbCols); + return setRandom(); +} + +} // end namespace Eigen + +#endif // EIGEN_RANDOM_H diff --git a/src/Eigen/src/Core/Redux.h b/src/Eigen/src/Core/Redux.h new file mode 100644 index 0000000..9b8662a --- /dev/null +++ b/src/Eigen/src/Core/Redux.h @@ -0,0 +1,409 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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; + } +}; + +// NOTE: for SliceVectorizedTraversal we simply bypass unrolling +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 \c *this. + * \warning the result is undefined if \c *this contains NaN. + */ +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 \c *this. + * \warning the result is undefined if \c *this contains NaN. + */ +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/src/Eigen/src/Core/Ref.h b/src/Eigen/src/Core/Ref.h new file mode 100644 index 0000000..7a3beca --- /dev/null +++ b/src/Eigen/src/Core/Ref.h @@ -0,0 +1,278 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2012 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_REF_H +#define EIGEN_REF_H + +namespace Eigen { + +template class RefBase; +template,OuterStride<> >::type > class Ref; + +/** \class Ref + * \ingroup Core_Module + * + * \brief A matrix or vector expression mapping an existing expressions + * + * \tparam PlainObjectType the equivalent matrix type of the mapped data + * \tparam Options specifies whether the pointer is \c #Aligned, or \c #Unaligned. + * The default is \c #Unaligned. + * \tparam StrideType optionally specifies strides. By default, Ref implies a contiguous storage along the inner dimension (inner stride==1), + * but accept a variable outer stride (leading dimension). + * This can be overridden by specifying strides. + * The type passed here must be a specialization of the Stride template, see examples below. + * + * This class permits to write non template functions taking Eigen's object as parameters while limiting the number of copies. + * A Ref<> object can represent either a const expression or a l-value: + * \code + * // in-out argument: + * void foo1(Ref x); + * + * // read-only const argument: + * void foo2(const Ref& x); + * \endcode + * + * In the in-out case, the input argument must satisfies the constraints of the actual Ref<> type, otherwise a compilation issue will be triggered. + * By default, a Ref can reference any dense vector expression of float having a contiguous memory layout. + * Likewise, a Ref can reference any column major dense matrix expression of float whose column's elements are contiguously stored with + * the possibility to have a constant space inbetween each column, i.e.: the inner stride mmust be equal to 1, but the outer-stride (or leading dimension), + * can be greater than the number of rows. + * + * In the const case, if the input expression does not match the above requirement, then it is evaluated into a temporary before being passed to the function. + * Here are some examples: + * \code + * MatrixXf A; + * VectorXf a; + * foo1(a.head()); // OK + * foo1(A.col()); // OK + * foo1(A.row()); // compilation error because here innerstride!=1 + * foo2(A.row()); // The row is copied into a contiguous temporary + * foo2(2*a); // The expression is evaluated into a temporary + * foo2(A.col().segment(2,4)); // No temporary + * \endcode + * + * The range of inputs that can be referenced without temporary can be enlarged using the last two template parameter. + * Here is an example accepting an innerstride!=1: + * \code + * // in-out argument: + * void foo3(Ref > x); + * foo3(A.row()); // OK + * \endcode + * The downside here is that the function foo3 might be significantly slower than foo1 because it won't be able to exploit vectorization, and will involved more + * expensive address computations even if the input is contiguously stored in memory. To overcome this issue, one might propose to overloads internally calling a + * template function, e.g.: + * \code + * // in the .h: + * void foo(const Ref& A); + * void foo(const Ref >& A); + * + * // in the .cpp: + * template void foo_impl(const TypeOfA& A) { + * ... // crazy code goes here + * } + * void foo(const Ref& A) { foo_impl(A); } + * void foo(const Ref >& A) { foo_impl(A); } + * \endcode + * + * + * \sa PlainObjectBase::Map(), \ref TopicStorageOrders + */ + +namespace internal { + +template +struct traits > + : public traits > +{ + typedef _PlainObjectType PlainObjectType; + typedef _StrideType StrideType; + enum { + Options = _Options, + Flags = traits >::Flags | NestByRefBit + }; + + template struct match { + enum { + HasDirectAccess = internal::has_direct_access::ret, + StorageOrderMatch = PlainObjectType::IsVectorAtCompileTime || Derived::IsVectorAtCompileTime || ((PlainObjectType::Flags&RowMajorBit)==(Derived::Flags&RowMajorBit)), + InnerStrideMatch = int(StrideType::InnerStrideAtCompileTime)==int(Dynamic) + || int(StrideType::InnerStrideAtCompileTime)==int(Derived::InnerStrideAtCompileTime) + || (int(StrideType::InnerStrideAtCompileTime)==0 && int(Derived::InnerStrideAtCompileTime)==1), + OuterStrideMatch = Derived::IsVectorAtCompileTime + || int(StrideType::OuterStrideAtCompileTime)==int(Dynamic) || int(StrideType::OuterStrideAtCompileTime)==int(Derived::OuterStrideAtCompileTime), + AlignmentMatch = (_Options!=Aligned) || ((PlainObjectType::Flags&AlignedBit)==0) || ((traits::Flags&AlignedBit)==AlignedBit), + ScalarTypeMatch = internal::is_same::value, + MatchAtCompileTime = HasDirectAccess && StorageOrderMatch && InnerStrideMatch && OuterStrideMatch && AlignmentMatch && ScalarTypeMatch + }; + typedef typename internal::conditional::type type; + }; + +}; + +template +struct traits > : public traits {}; + +} + +template class RefBase + : public MapBase +{ + typedef typename internal::traits::PlainObjectType PlainObjectType; + typedef typename internal::traits::StrideType StrideType; + +public: + + typedef MapBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(RefBase) + + 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(); + } + + RefBase() + : Base(0,RowsAtCompileTime==Dynamic?0:RowsAtCompileTime,ColsAtCompileTime==Dynamic?0:ColsAtCompileTime), + // Stride<> does not allow default ctor for Dynamic strides, so let' initialize it with dummy values: + m_stride(StrideType::OuterStrideAtCompileTime==Dynamic?0:StrideType::OuterStrideAtCompileTime, + StrideType::InnerStrideAtCompileTime==Dynamic?0:StrideType::InnerStrideAtCompileTime) + {} + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(RefBase) + +protected: + + typedef Stride StrideBase; + + template + void construct(Expression& expr) + { + if(PlainObjectType::RowsAtCompileTime==1) + { + eigen_assert(expr.rows()==1 || expr.cols()==1); + ::new (static_cast(this)) Base(expr.data(), 1, expr.size()); + } + else if(PlainObjectType::ColsAtCompileTime==1) + { + eigen_assert(expr.rows()==1 || expr.cols()==1); + ::new (static_cast(this)) Base(expr.data(), expr.size(), 1); + } + else + ::new (static_cast(this)) Base(expr.data(), expr.rows(), expr.cols()); + + if(Expression::IsVectorAtCompileTime && (!PlainObjectType::IsVectorAtCompileTime) && ((Expression::Flags&RowMajorBit)!=(PlainObjectType::Flags&RowMajorBit))) + ::new (&m_stride) StrideBase(expr.innerStride(), StrideType::InnerStrideAtCompileTime==0?0:1); + else + ::new (&m_stride) StrideBase(StrideType::OuterStrideAtCompileTime==0?0:expr.outerStride(), + StrideType::InnerStrideAtCompileTime==0?0:expr.innerStride()); + } + + StrideBase m_stride; +}; + + +template class Ref + : public RefBase > +{ + private: + typedef internal::traits Traits; + template + inline Ref(const PlainObjectBase& expr, + typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0); + public: + + typedef RefBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Ref) + + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + inline Ref(PlainObjectBase& expr, + typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0) + { + EIGEN_STATIC_ASSERT(static_cast(Traits::template match::MatchAtCompileTime), STORAGE_LAYOUT_DOES_NOT_MATCH); + Base::construct(expr.derived()); + } + template + inline Ref(const DenseBase& expr, + typename internal::enable_if::MatchAtCompileTime),Derived>::type* = 0) + #else + template + inline Ref(DenseBase& expr) + #endif + { + EIGEN_STATIC_ASSERT(static_cast(internal::is_lvalue::value), THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY); + EIGEN_STATIC_ASSERT(static_cast(Traits::template match::MatchAtCompileTime), STORAGE_LAYOUT_DOES_NOT_MATCH); + enum { THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY = Derived::ThisConstantIsPrivateInPlainObjectBase}; + Base::construct(expr.const_cast_derived()); + } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Ref) + +}; + +// this is the const ref version +template class Ref + : public RefBase > +{ + typedef internal::traits Traits; + public: + + typedef RefBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Ref) + + template + inline Ref(const DenseBase& expr, + typename internal::enable_if::ScalarTypeMatch),Derived>::type* = 0) + { +// std::cout << match_helper::HasDirectAccess << "," << match_helper::OuterStrideMatch << "," << match_helper::InnerStrideMatch << "\n"; +// std::cout << int(StrideType::OuterStrideAtCompileTime) << " - " << int(Derived::OuterStrideAtCompileTime) << "\n"; +// std::cout << int(StrideType::InnerStrideAtCompileTime) << " - " << int(Derived::InnerStrideAtCompileTime) << "\n"; + construct(expr.derived(), typename Traits::template match::type()); + } + + inline Ref(const Ref& other) : Base(other) { + // copy constructor shall not copy the m_object, to avoid unnecessary malloc and copy + } + + template + inline Ref(const RefBase& other) { + construct(other.derived(), typename Traits::template match::type()); + } + + protected: + + template + void construct(const Expression& expr,internal::true_type) + { + Base::construct(expr); + } + + template + void construct(const Expression& expr, internal::false_type) + { + m_object.lazyAssign(expr); + Base::construct(m_object); + } + + protected: + TPlainObjectType m_object; +}; + +} // end namespace Eigen + +#endif // EIGEN_REF_H diff --git a/src/Eigen/src/Core/Replicate.h b/src/Eigen/src/Core/Replicate.h new file mode 100644 index 0000000..ac4537c --- /dev/null +++ b/src/Eigen/src/Core/Replicate.h @@ -0,0 +1,177 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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& a_matrix) + : m_matrix(a_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& a_matrix, Index rowFactor, Index colFactor) + : m_matrix(a_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 rowId, Index colId) const + { + // try to avoid using modulo; this is a pure optimization strategy + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? rowId + : rowId%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? colId + : colId%m_matrix.cols(); + + return m_matrix.coeff(actual_row, actual_col); + } + template + inline PacketScalar packet(Index rowId, Index colId) const + { + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? rowId + : rowId%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? colId + : colId%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 +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 +const typename DenseBase::ReplicateReturnType +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/src/Eigen/src/Core/ReturnByValue.h b/src/Eigen/src/Core/ReturnByValue.h new file mode 100644 index 0000000..f635598 --- /dev/null +++ b/src/Eigen/src/Core/ReturnByValue.h @@ -0,0 +1,99 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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 + : internal::no_assignment_operator, 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); } + template Unusable& packet(Index) const; + template Unusable& packet(Index, Index) const; +#endif +}; + +template +template +Derived& DenseBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + +template +template +Derived& DenseBase::lazyAssign(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + + +} // end namespace Eigen + +#endif // EIGEN_RETURNBYVALUE_H diff --git a/src/Eigen/src/Core/Reverse.h b/src/Eigen/src/Core/Reverse.h new file mode 100644 index 0000000..e30ae3d --- /dev/null +++ b/src/Eigen/src/Core/Reverse.h @@ -0,0 +1,224 @@ +// 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 +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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/src/Eigen/src/Core/Select.h b/src/Eigen/src/Core/Select.h new file mode 100644 index 0000000..87993bb --- /dev/null +++ b/src/Eigen/src/Core/Select.h @@ -0,0 +1,162 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#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