From 7cab7c785fc0fb9bea1b334cf9e0e2ece845c6f9 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Sun, 28 Jul 2013 04:03:28 +0400 Subject: [PATCH] Edited documentation --- agl/CMakeLists.txt | 5 +- agl/README | 15 + agl/about.dox | 63 ++ agl/agl.cmake | 22 +- agl/agl.doxygen | 1889 ++++++++++++++++++++++++++++++++++++ agl/logo.png | Bin 0 -> 3478 bytes agl/src/CMakeLists.txt | 48 +- agl/src/coords.c | 114 ++- agl/src/main.c | 2 +- agl/src/messages.c | 24 +- agl/src/print_struct.c | 38 +- en_disp/ca.txt | 300 ++++++ en_disp/en_disp | Bin 0 -> 14366 bytes en_disp/no.csv | 300 ++++++ en_disp/no.txt | 300 ++++++ envir/CMakeLists.txt | 5 +- envir/README | 2 +- envir/about.dox | 65 ++ envir/envir.cmake | 22 +- envir/envir.doxygen | 1889 ++++++++++++++++++++++++++++++++++++ envir/envir.pdf | Bin 0 -> 109426 bytes envir/logo.png | Bin 0 -> 3478 bytes envir/src/CMakeLists.txt | 48 +- envir/src/add_main.c | 59 +- envir/src/add_main.h | 14 + envir/src/coords.c | 114 ++- envir/src/coords.h | 8 + envir/src/envir_search.c | 31 +- envir/src/envir_search.h | 8 + envir/src/main.c | 82 +- envir/src/messages.c | 24 +- envir/src/messages.h | 8 + envir/src/print_struct.c | 38 +- envir/src/print_struct.h | 8 + envir/src/set_center.c | 30 +- envir/src/set_center.h | 8 + statgen/README | 2 +- statgen/about.dox | 9 +- statgen/src/add_main.c | 3 +- statgen/src/coords.c | 5 +- statgen/src/graph.c | 3 + statgen/src/main.c | 16 +- statgen/src/stat_print.c | 7 +- statgen/src/stat_select.c | 5 +- statgen/src/stat_sort.c | 5 +- statgen/src/summary_stat.c | 3 +- statgen/statgen.doxygen | 5 +- statgen/statgen.pdf | Bin 146596 -> 123433 bytes 48 files changed, 5349 insertions(+), 297 deletions(-) create mode 100644 agl/README create mode 100644 agl/about.dox create mode 100644 agl/agl.doxygen create mode 100755 agl/logo.png create mode 100644 en_disp/ca.txt create mode 100755 en_disp/en_disp create mode 100644 en_disp/no.csv create mode 100644 en_disp/no.txt create mode 100644 envir/about.dox create mode 100644 envir/envir.doxygen create mode 100644 envir/envir.pdf create mode 100755 envir/logo.png diff --git a/agl/CMakeLists.txt b/agl/CMakeLists.txt index 4d47440..a37341d 100644 --- a/agl/CMakeLists.txt +++ b/agl/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required (VERSION 2.8) -cmake_policy(SET CMP0011 NEW) cmake_policy(SET CMP0003 OLD) +cmake_policy(SET CMP0011 NEW) +cmake_policy(SET CMP0015 NEW) # set project name set (PROJECT agl) @@ -28,4 +29,4 @@ set (LIBRARIES) set (TARGETS "") set (HEADERS "") -add_subdirectory (src) \ No newline at end of file +add_subdirectory (${${PROJECT}_SOURCE_DIR}) \ No newline at end of file diff --git a/agl/README b/agl/README new file mode 100644 index 0000000..83df9b3 --- /dev/null +++ b/agl/README @@ -0,0 +1,15 @@ +agl - program that creates PDB file with chosen aglomerate +Version: 1.0.1 +License: GPL + +Usage: + agl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE] [ -q ] [ -h ] + +Parametrs: + -a - input file with aglomerates (in format statgen) + -i - input file with coordinates + -c - cell size (float), A + -o - output file with coordinates + -l - log enable + -q - quiet enable + -h - show this help and exit diff --git a/agl/about.dox b/agl/about.dox new file mode 100644 index 0000000..c294ae9 --- /dev/null +++ b/agl/about.dox @@ -0,0 +1,63 @@ +/*! + * @mainpage agl + * @image latex ./logo.png + * + * @section intro_sec Introduction + * + * About this program: + * + * + * Developer: + * + * License: + * + * + * @section How-To-Use How to use + * Usage: + *
+ * agl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE] [ -q ] [ -h ]
+ *
+ * Parametrs:
+ *    -a          - input file with aglomerates (in format statgen)
+ *    -i          - input file with coordinates
+ *    -c          - cell size (float), A
+ *    -o          - output file with coordinates
+ *    -l          - log enable
+ *    -q          - quiet enable
+ *    -h          - show this help and exit
+ * 
+ * + * @page Install + * + * @section Requirements Requirements + * The application statgen requires the following external stuff: + * - cmake >= 2.8 + * - gcc >= 4.8 + * + * @section How-To How to install + * + * @subsection Linux Linux + * @code + * mkdir build && cd build + * cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ../ + * make + * make install + * @endcode + * + * @subsection Windows Windows + * @code + * create project file using 'cmake' + * compile project + * @endcode + * You may also download compiled executable file for Win_x86. + * + * @page Changelog + * V.1.0.1 (2013-07-27) + * * initial release + */ diff --git a/agl/agl.cmake b/agl/agl.cmake index 427f0d4..2b4603e 100644 --- a/agl/agl.cmake +++ b/agl/agl.cmake @@ -1,22 +1,32 @@ # set directories set (${PROJECT}_BINARY_DIR bin) -set (${PROJECT}_SOURCE_DIR src:include) +set (${PROJECT}_SOURCE_DIR src) +set (${PROJECT}_INCLUDE_DIR include) set (${PROJECT}_LIB_DIR lib) -set (CMAKE_INCLUDE_PATH ${${PROJECT}_SOURCE_DIR}) -set (CMAKE_LIBRARY_PATH ${${PROJECT}_LIB_DIR}) +# include_path +include_directories (${${PROJECT}_INCLUDE_DIR}/${PROJECT} + ${${PROJECT}_SOURCE_DIR}) +# library path +link_directories (${${PROJECT}_LIB_DIR}) +# executable path set (EXECUTABLE_OUTPUT_PATH ${${PROJECT}_BINARY_DIR}) + +# verbose set (CMAKE_VERBOSE_MAKEFILE ON) +# flags if ( WITH_DEBUG_MODE ) - ADD_DEFINITIONS ( -DDEBUG_MODE=1 ) + add_definitions ( -DDEBUG_MODE=1 ) endif () - if ( CMAKE_COMPILER_IS_GNUCXX ) set (ADD_CXX_FLAGS "-Wall") set (CMAKE_CXX_FLAGS "-O0 ${ADD_CXX_FLAGS}") set (CMAKE_CXX_FLAGS_DEBUG "-g -O0") set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +elseif ( MSVC ) + set (ADD_CXX_FLAGS "/W4") + set (CMAKE_CXX_FLAGS "${ADD_CXX_FLAGS}") else () - message (STATUS "Flags not enabled") + message ("Unknown compiler") endif () \ No newline at end of file diff --git a/agl/agl.doxygen b/agl/agl.doxygen new file mode 100644 index 0000000..dcdaba2 --- /dev/null +++ b/agl/agl.doxygen @@ -0,0 +1,1889 @@ +# Doxyfile 1.8.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = agl + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = V.1.0.1 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Program that creates PDB file with chosen aglomerate" + +# 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. + +PROJECT_LOGO = /home/arcanis/Documents/github/moldyn/agl/logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, +# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, +# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. Note that you specify absolute paths here, but also +# relative paths, which will be relative from the directory where doxygen is +# started. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, +# and language is one of the parsers supported by doxygen: IDL, Java, +# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, +# C++. For instance to make doxygen treat .inc files as Fortran files (default +# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note +# that for custom extensions you also need to set FILE_PATTERNS otherwise the +# files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# 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. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES (the +# default) will make doxygen replace the get and set methods by a property in +# the documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields or simple typedef fields will be shown +# inline in the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO (the default), structs, classes, and unions are shown on a separate +# page (for HTML and Man pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can +# be an expensive process and often the same symbol appear multiple times in +# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too +# small doxygen will become slower. If the cache is too large, memory is wasted. +# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid +# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 +# symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = 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 (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +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 (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +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. + +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. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if section-label ... \endif +# and \cond section-label ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool 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. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The 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 (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +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 +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be ignored. +# 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. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If left blank doxygen will +# generate a default style sheet. Note that it is recommended to use +# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this +# tag will in the future become obsolete. + +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 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. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen 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 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +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. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely +# identify the documentation publisher. This should be a reverse domain-name +# style string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When 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. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +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 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. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and +# SVG. The default value is HTML-CSS, which is slower, but has the best +# compatibility. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript +# pieces of code that will be used on startup of the MathJax code. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. +# There are two flavours of web server based search 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 manual for details. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# 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 (doxysearch.cgi) which are based on the open source search +# engine library Xapian. See the manual for configuration details. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will returned the search results when EXTERNAL_SEARCH is enabled. +# Doxygen ships with an example search engine (doxysearch) which is based on +# the open source search engine library Xapian. See the manual for configuration +# details. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id +# of to a relative location where the documentation can be found. +# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# 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. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4 will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +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. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# 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 directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .1 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# 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. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# 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. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files +# that can be used to generate PDF. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. If left blank docbook will be used as the default path. + +DOCBOOK_OUTPUT = docbook + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will 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, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# 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. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font 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 setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# manageable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. 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). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/agl/logo.png b/agl/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..41adc0cb46ab8b2f327c0851eae786631b4ba85a GIT binary patch literal 3478 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 RLIwr~22WQ%mvv4FO#tM^$sqs$ literal 0 HcmV?d00001 diff --git a/agl/src/CMakeLists.txt b/agl/src/CMakeLists.txt index b996fce..e3486ad 100644 --- a/agl/src/CMakeLists.txt +++ b/agl/src/CMakeLists.txt @@ -3,59 +3,27 @@ set ("${PROJECT}_VERSION_MINOR" 0) set ("${PROJECT}_VERSION_PATCH" 1) set ("${PROJECT}_VERSION" ${${PROJECT}_VERSION_MAJOR}.${${PROJECT}_VERSION_MINOR}.${${PROJECT}_VERSION_PATCH}) -message (STATUS ${${PROJECT}_VERSION}) +message (STATUS "${PROJECT}: Version ${${PROJECT}_VERSION}") -## set files -# main files -set (MAIN_SOURCES main) -# not public srcs -set (PRIVATE_CLASSES) -# headers only files -SET (HEADERS_ONLY) -# public srcs -set (PUBLIC_CLASSES add_main - coords - envir_search - messages - print_struct - set_center) -# public headers -set (PUBLIC_HEADERS) -# shared libraries +# set files +aux_source_directory (. SOURCES) + +# set library if (CMAKE_COMPILER_IS_GNUCXX) set (ADDITIONAL_LIB m) else () set (ADDITIONAL_LIB) endif() -set (SOURCES) - -# append list -foreach (class ${PRIVATE_CLASSES}) - LIST (APPEND SOURCES ${class}.c) - LIST (APPEND HEADERS ${class}.h) -endforeach () - -foreach (class ${HEADERS_ONLY}) - LIST (APPEND HEADERS ${class}.h) -endforeach () - -foreach (class ${PUBLIC_CLASSES}) - LIST (APPEND SOURCES ${class}.c) - LIST (APPEND HEADERS ../include/${PROJECT}/${class}.h) - LIST (APPEND PUBLIC_HEADERS ../include/${PROJECT}/${class}.h) -endforeach () # message message (STATUS "SOURCES: ${SOURCES}") # link libraries and compile -add_executable (${PROJECT} ${MAIN_SOURCES} ${SOURCES}) +add_executable (${PROJECT} ${SOURCES}) target_link_libraries (${PROJECT} ${ADDITIONAL_LIB}) # install properties -INSTALL (TARGETS ${PROJECT} - DESTINATION bin) +INSTALL (TARGETS ${PROJECT} DESTINATION bin) if (ADD_INCLUDE) - INSTALL (FILES ${PUBLIC_HEADERS} - DESTINATION include/${PROJECT}) + INSTALL (FILES ${PUBLIC_HEADERS} DESTINATION include/${PROJECT}) endif () \ No newline at end of file diff --git a/agl/src/coords.c b/agl/src/coords.c index 636dbf2..e7438cb 100644 --- a/agl/src/coords.c +++ b/agl/src/coords.c @@ -1,52 +1,67 @@ -/* Library for reading coordinates from input file - * - * Usage: - * reading_coords (mode, filename, type_interaction, labels, - * cell, &number_of_molecules, &number_of_atoms, true_label_molecule, - * label_molecule, type_atoms, coords, char_type_atoms) +/** + * @file */ #include #include - +/** + * @fn reading_coords + */ int reading_coords (const int mode, const char *filename, const int type_inter, const int *label_atom, const float *cell, int *num_mol, int *num_atoms, int *true_label_mol, int *label_mol, int *type_atoms, float *coords, char *ch_type_atoms) -/* filename - name of file with coordinates - * type_inter - type interaction (number of molecules for interaction) - * (number of molecules in aglomerate for agl) - * label_atom - types of atom for interaction - * (molecules in aglomerate for agl) - * cell - cell dimension - * num_mol - number of molecules for writing coordinates - * num_atoms - number of atoms for writing coordinates - * true_label_mol - massive of true numbers of molecule for atoms - * label_mol - massive of numbers of molecule for atoms - * type_atoms - massive of atom types for atoms - * coords - massive of coordinates - * ch_type_atoms - massive of char types for atoms +/** + * @brief function that reads coordinates from special file format + * @code + * reading_coords (0, filename, type_inter, label_atom, cell, &num_mol, &num_atoms, + * true_label_mol, label_mol, type_atoms, coords, ch_type_atoms); + * @endcode + * + * @param mode mode of reading; '1' is statgen, '2' is envir or + * frad, '3' is agl + * @param filename input file name + * @param type_inter number of needed atoms + * (number of needed molecules) + * @param label_atom massive of needed atom types + * (massive of needed molecules) + * @param cell massive of cell size + * @param num_mol number of molecules + * @param num_atoms number of atoms + * @param true_label_mol massive of true numbers of molecule for atoms + * @param label_mol massive of numbers of molecule for atoms + * @param type_atoms massive of atom types + * @param coords massive of coordinates + * @param ch_type_atoms massive of char atom types + * + * @return 1 - file $filename does not exist + * @return 2 - unknown mode + * @return 0 - exit without errors */ { char at_symb[32], file_string[256]; int atoms, cur_at_num, cur_at_type, cur_mol, i, j, tr_num_atoms, ref_mol, x, y; float cur_coords[3], *not_tr_coords, ref[3]; FILE *inp; -/* cur_*, at_symb - temp variables - * file_string - temp string variable - * atoms - total number of atoms in system - * tr_num_atoms - number of translated atoms for writing coordinates (m.b. 8*num_atoms) - * ref_mol - number of molecule for reference - * not_tr_coords - not translated coordinates - * ref - coordinates of reference molecule - * inp - file with input data + +/* cur_* temp variables + * at_symb temp variable + * file_string temp string variable + * atoms total number of atoms in system + * tr_num_atoms number of translated atoms (must be 8*num_atoms) + * ref_mol number of molecule for reference in translation + * not_tr_coords massive of not translated coordinates + * ref massive of coordinates of reference molecule + * inp input file */ +/// Work blocks + *num_atoms = 0; *num_mol = 0; -// Reading file +///
   reading file 
inp = fopen (filename, "r"); if (inp == NULL) return 1; @@ -61,10 +76,11 @@ int reading_coords (const int mode, const char *filename, const int type_inter, sscanf (file_string, "%i%s%f%f%f%i%i", &cur_at_num, at_symb, &cur_coords[0], &cur_coords[1], &cur_coords[2], &cur_at_type, &cur_mol); +// reading variables according to selected mode switch (mode) { case 0: -// for statgen +// mode == 0 (selected atoms) for (j=0; j translation tr_num_atoms = *num_atoms; for (i=0; i<*num_atoms; i++) for (j=0; j<3; j++) coords[3*i+j] = not_tr_coords[3*i+j]; -// Assign initial value to reference coordinates +// assign initial value to reference coordinates ref_mol = label_mol[0]; for (i=0; i<3; i++) ref[i] = coords[3*0+i]; @@ -154,7 +170,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (x=0; x<3; x++) { if (ref[x] >= 0.0) -// if xyz >= 0.0 A +// if xyz >= 0.0 A { for (j=0; j<3; j++) if (j == x) @@ -167,7 +183,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, tr_num_atoms++; } else -// if xyz < 0.0 A +// if xyz < 0.0 A { for (j=0; j<3; j++) if (j == x) @@ -186,7 +202,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (y=x+1; y<3; y++) { if ((ref[x] >= 0.0) && (ref[y] >= 0.0)) -// if xyz and xyz >= 0.0 A +// if xyz and xyz >= 0.0 A { for (j=0; j<3; j++) if ((j == x) || (j == y)) @@ -200,7 +216,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[x] < 0.0) && (ref[y] < 0.0)) -// if xyz and xyz < 0.0 A +// if xyz and xyz < 0.0 A { for (j=0; j<3; j++) if ((j == x) || (j == y)) @@ -216,7 +232,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (y=0; y<3; y++) if ((ref[x] < 0.0) && (ref[y] >= 0.0)) -// if xyz OR xyz >= 0.0 +// if xyz OR xyz >= 0.0 { for (j=0; j<3; j++) { @@ -235,7 +251,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) -// if x and y and z >= 0.0 A +// if x and y and z >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -247,7 +263,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) -// if x and y >= 0.0 A and z < 0.0 A +// if x and y >= 0.0 A and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -259,7 +275,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) -// if x and z >= 0.0 A and y < 0.0 A +// if x and z >= 0.0 A and y < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -271,7 +287,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) -// if y and z >= 0.0 A and x < 0.0 A +// if y and z >= 0.0 A and x < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -283,7 +299,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) -// if x and y < 0.0 A and z >= 0.0 A +// if x and y < 0.0 A and z >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -295,7 +311,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) -// if x and z < 0.0 A and y >= 0.0 A +// if x and z < 0.0 A and y >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -307,7 +323,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) -// if x >= 0.0 A and y and z < 0.0 A +// if x >= 0.0 A and y and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -319,7 +335,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) -// if x and y and z < 0.0 A +// if x and y and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -331,7 +347,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } } -// free memory +///
   free memory 
free (not_tr_coords); return 0; diff --git a/agl/src/main.c b/agl/src/main.c index 1759408..795b9c0 100644 --- a/agl/src/main.c +++ b/agl/src/main.c @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) if ((argv[i][0] == '-') && (argv[i][1] == 'h')) { sprintf (tmp_str, " agl\n"); - sprintf (tmp_str, "%sProgram for create PDB file with choosen aglomerate\n", tmp_str); + sprintf (tmp_str, "%sProgram for create PDB file with chosen aglomerate\n", tmp_str); sprintf (tmp_str, "%sVersion : 1.0.1 License : GPL\n", tmp_str); sprintf (tmp_str, "%s Evgeniy Alekseev aka arcanis\n", tmp_str); sprintf (tmp_str, "%s E-mail : esalexeev@gmail.com\n\n", tmp_str); diff --git a/agl/src/messages.c b/agl/src/messages.c index f4560f3..58c8795 100644 --- a/agl/src/messages.c +++ b/agl/src/messages.c @@ -1,16 +1,27 @@ -/* Library for printing messages at output - * - * Usage: - * message (log, mode, text, output) +/** + * @file */ #include #include +/** + * @fn message + */ int message (const int log, const int mode, const char *text, FILE *output) -/* mode - number of message - * text - additional text +/** + * @brief function that prints messages to output + * @code + * message (log, mode, text, output); + * @endcode + * + * @param log equal to 1 if print to logfile + * @param mode number of message + * @param text additional text + * @param output output file (may be stdout) + * + * @return 0 - exit without errors */ { char out[4096]; @@ -18,6 +29,7 @@ int message (const int log, const int mode, const char *text, FILE *output) if (log == 1) { char time_str[256]; + time_t t = time (NULL); struct tm* aTm = localtime (&t); sprintf (time_str, "[%04d-%02d-%02d %02d:%02d:%02d] [%2i]: ", aTm->tm_year+1900, diff --git a/agl/src/print_struct.c b/agl/src/print_struct.c index c1e6487..529698a 100644 --- a/agl/src/print_struct.c +++ b/agl/src/print_struct.c @@ -1,3 +1,7 @@ +/** + * @file + */ + /* Library for printing structure to pdb file * * Usage: @@ -8,23 +12,37 @@ #include +/** + * @fn print_structure + */ int print_structure (const char *output, const int num_needed_mol, const int *needed_mol, const int num_atoms, const int *label_mol, const char *ch_type_atoms, const float *coords) -/* output - output file name - * num_needed_mol - number of needed molecules - * needed_mol - massive of needed molecules - * num_atoms - number of atoms - * label_mol - massive of numbers of molecule for atoms - * ch_type_atoms - massive of char types for atoms - * coords - massive of coordinates +/** + * @brief function that prints structure to pdb file + * @code + * print_structure (output, num_needed_mol, needed_mol, num_atoms, label_mol, + * char_type_atoms, coords); + * @endcode + * + * @param output output file name + * @param num_needed_mol number of needed molecules + * @param needed_mol massive of number of needed molecules + * @param num_atoms number of atoms + * @param label_mol massive of numbers of molecule for atoms + * @param ch_type_atoms massive of char atom types + * @param coords massive of coordinates + * + * @return 0 - exit without errors */ { int cur_atom, cur_atom_num, cur_mol, i, j; FILE *f_out; -/* cur_atom - current atom - * cur_atom_num - true atom number - * cur_mol - current molecule + +/* cur_atom current atom + * cur_atom_num true atom number + * cur_mol current molecule + * f_out output file */ cur_atom = 1; diff --git a/en_disp/ca.txt b/en_disp/ca.txt new file mode 100644 index 0000000..13d4315 --- /dev/null +++ b/en_disp/ca.txt @@ -0,0 +1,300 @@ +0.495 10.418898 +1.495 9.950804 +2.495 9.82146 +3.495 9.850474 +4.495 9.696533 +5.495 9.753499 +6.495 9.762932 +7.495 9.723365 +8.495 10.014191 +9.495 10.090842 +10.495 9.997436 +11.495 10.016979 +12.495 10.031467 +13.495 9.924226 +14.495 9.890284 +15.495 9.77921 +16.495 9.702351 +17.495 9.716536 +18.495 9.71042 +19.495 9.384672 +20.495 9.517883 +21.495 9.664516 +22.495 9.632805 +23.495 9.735373 +24.495 9.765346 +25.495 9.645189 +26.495 9.641912 +27.495 10.163867 +28.495 10.181592 +29.495 9.926333 +30.495 10.033085 +31.495 10.127791 +32.495 10.311988 +33.495 9.808517 +34.495 10.272553 +35.495 10.329018 +36.495 10.309202 +37.495 10.098222 +38.495 10.159035 +39.495 9.957952 +40.495 9.998584 +41.495 10.069609 +42.495 9.89074 +43.495 9.84689 +44.495 9.708708 +45.495 9.649786 +46.495 9.325311 +47.495 9.555045 +48.495 9.554562 +49.495 9.524442 +50.495 9.699064 +51.495 9.362999 +52.495 9.786994 +53.495 9.765195 +54.495 9.670958 +55.495 9.35132 +56.495 9.761409 +57.495 9.392701 +58.495 9.356889 +59.495 9.408867 +60.495 9.417254 +61.495 9.628405 +62.495 9.901407 +63.495 9.670194 +64.495 9.662455 +65.495 9.639038 +66.495 9.812234 +67.495 9.671042 +68.495 9.75535 +69.495 9.745772 +70.495 9.912268 +71.495 9.785694 +72.495 9.817339 +73.495 10.029068 +74.495 9.936254 +75.495 9.606431 +76.495 9.515212 +77.495 9.756271 +78.495 9.687815 +79.495 9.531412 +80.495 10.024444 +81.495 9.846199 +82.495 9.600954 +83.495 9.470863 +84.495 9.530602 +85.495 9.471397 +86.495 9.569076 +87.495 9.97256 +88.495 9.945459 +89.495 9.539951 +90.495 9.730874 +91.495 9.708173 +92.495 9.728682 +93.495 9.636923 +94.495 9.51818 +95.495 9.694912 +96.495 10.127011 +97.495 10.343201 +98.495 10.326031 +99.495 10.14791 +100.495 10.362019 +101.495 10.27092 +102.495 10.137325 +103.495 9.942941 +104.495 10.193326 +105.495 10.257613 +106.495 9.895024 +107.495 9.655592 +108.495 9.483453 +109.495 9.684728 +110.495 9.885463 +111.495 10.026399 +112.495 10.047047 +113.495 10.1834 +114.495 10.090755 +115.495 9.975076 +116.495 10.050849 +117.495 9.994183 +118.495 9.807983 +119.495 9.722695 +120.495 9.801534 +121.495 9.907951 +122.495 9.860322 +123.495 9.869689 +124.495 9.895987 +125.495 9.841974 +126.495 9.951846 +127.495 9.832937 +128.495 9.885062 +129.495 9.813783 +130.495 9.684291 +131.495 9.885339 +132.495 9.708161 +133.495 9.754633 +134.495 9.792124 +135.495 9.808579 +136.495 9.811543 +137.495 9.782301 +138.495 9.56639 +139.495 9.841753 +140.495 9.914329 +141.495 9.977631 +142.495 9.749889 +143.495 9.76908 +144.495 9.882627 +145.495 9.841321 +146.495 9.832708 +147.495 10.450935 +148.495 10.140794 +149.495 9.723987 +150.495 9.397698 +151.495 9.557581 +152.495 9.281402 +153.495 9.572753 +154.495 10.605842 +155.495 9.995828 +156.495 10.119981 +157.495 10.080965 +158.495 10.009468 +159.495 10.040681 +160.495 10.135203 +161.495 10.351259 +162.495 10.101901 +163.495 9.943474 +164.495 9.987632 +165.495 9.823331 +166.495 10.067644 +167.495 9.987817 +168.495 10.070786 +169.495 9.883877 +170.495 9.94227 +171.495 10.033562 +172.495 9.982595 +173.495 10.068419 +174.495 10.139153 +175.495 9.979704 +176.495 9.699483 +177.495 10.011893 +178.495 9.928017 +179.495 10.124135 +180.495 10.066833 +181.495 10.069324 +182.495 10.351573 +183.495 10.644679 +184.495 11.008727 +185.495 10.476585 +186.495 10.563549 +187.495 10.955261 +188.495 10.288914 +189.495 10.181921 +190.495 10.173754 +191.495 10.202548 +192.495 9.969597 +193.495 10.012764 +194.495 10.104414 +195.495 10.037142 +196.495 10.074749 +197.495 10.001254 +198.495 10.077487 +199.495 10.052823 +200.495 9.915133 +201.495 9.842852 +202.495 9.667 +203.495 9.657872 +204.495 9.84561 +205.495 9.451061 +206.495 9.62459 +207.495 10.257664 +208.495 9.91896 +209.495 9.672087 +210.495 9.773147 +211.495 9.978817 +212.495 10.004964 +213.495 10.081589 +214.495 9.982108 +215.495 9.809712 +216.495 9.479629 +217.495 10.004244 +218.495 9.925939 +219.495 10.040169 +220.495 10.30559 +221.495 9.708866 +222.495 9.785239 +223.495 9.832165 +224.495 9.73784 +225.495 9.392737 +226.495 9.914623 +227.495 9.673237 +228.495 9.494724 +229.495 9.626924 +230.495 9.583567 +231.495 9.633996 +232.495 9.254592 +233.495 9.786718 +234.495 10.461098 +235.495 10.652362 +236.495 10.060664 +237.495 10.014629 +238.495 9.598738 +239.495 9.610362 +240.495 9.628961 +241.495 9.458214 +242.495 9.423989 +243.495 9.690958 +244.495 9.763616 +245.495 9.857896 +246.495 9.858091 +247.495 9.760202 +248.495 9.932053 +249.495 9.77053 +250.495 9.814235 +251.495 9.782696 +252.495 9.957203 +253.495 10.112691 +254.495 10.044214 +255.495 9.806607 +256.495 9.99203 +257.495 9.884048 +258.495 9.970362 +259.495 9.894917 +260.495 9.829692 +261.495 9.966207 +262.495 10.02361 +263.495 9.920719 +264.495 9.961572 +265.495 10.083698 +266.495 10.041025 +267.495 9.979657 +268.495 9.966049 +269.495 9.878101 +270.495 9.707976 +271.495 9.821568 +272.495 9.903031 +273.495 10.094413 +274.495 10.063516 +275.495 9.959853 +276.495 9.748308 +277.495 10.022636 +278.495 10.022269 +279.495 9.907438 +280.495 9.828258 +281.495 9.82824 +282.495 9.97273 +283.495 10.027607 +284.495 10.001367 +285.495 9.983068 +286.495 10.071244 +287.495 10.043729 +288.495 9.95981 +289.495 10.008244 +290.495 10.13468 +291.495 10.166469 +292.495 10.011308 +293.495 10.177845 +294.495 10.112561 +295.495 9.957638 +296.495 9.892344 +297.495 9.929006 +298.495 10.008845 +299.495 9.760489 diff --git a/en_disp/en_disp b/en_disp/en_disp new file mode 100755 index 0000000000000000000000000000000000000000..9b7894eb84baf17e5c5afb6e4f5aaa7443744c87 GIT binary patch literal 14366 zcmb<-^>JfjWMqH=CI&kO5bpwq16T+`GBA8l26MrL1A_$v2ZIBH9D_6i8v_FaD+2=q zOq~Oi1)~pu3}awmfYBUa6Brnn85kH?Kx`%u!N9=41T_Il%Rq%;G}IWd+d%d~rBQ4K ziRH+FNCpNN&A^}l769o7xfRM~U{FW^i^J#*P+tU50HU`3ye+yDPmw? zfYBheAfdpgB`F|xg4o1hm^<}zGLy_q^m9^lb29TvD|9O?%yi96^osNKjKJ|Dz`y_w zb9cW`u(2TTfb0PU2gq&_21s0j-aui4$R30)hFoGci11R5t@>r=ZnLMg}H^LI#LD zNJu<0lNXc&A4A0;>X{f|>VGIg$~jP;AM59gxI9c7wz~*aJx%RyKje1CYcyK>|=5fh5ia6$4QT zNaCO}1SAH+8A#$hAOR>YKoUm|p9&;#KB!s{)qo@piX)I12zMZf3xWiocmk5RFjNdg z%|H?dm7yRp5cX((!{O1*8Y`v1;L&=Zg!RQ~1_lO?<|7=3L9z@C|4oCW6d3-ihDa$e z@XI?e{8t6>L8T4D%Lo7e|NpP*C8fZS0V;A|UI6o*KzvXldwBrNw*v7&QTuWOm~RB) zgQE210x(|-#0N#?%L!n<5{M6q!j}zTz7&WLin^BtV7?HD4~nvv31B`Kh!2XYmjPft z6NnFrqL&U}{x3-dh73^DyfgswKY{q5D0!&>=Dz~*K~eEi0L*^`;)9~#B?Fj$3&aOi z(l0;!1Nrw7h!2X2mk<8^|8Mx#v-4t{N9QAt<|iKlLOhQjI3VW0;Bow50GK*n%;&)H z!u|jM|6kH3fWmLbcBKS{P!HV=N(l@e%|G}&I-iy^#U2I~i{J?O61yKH_5T6Cd;=&3 zc7S*=^#^}2dvrea=se_c@Rhv>;{}h4KT4Tm5AOmg^k}_Q@+H=z^B6?`BdGocTTe*^ z28L3>P>;^1FY5mP{~vpd)l5=>f${TUkb69uZ7akS7#K?A;7$+;-7lb!z~IsO^#6s} zm(~CO|L2!ycv%dgLB@DAzcGNQ?sWYDV|+O7`UK>T*RkEA+>#0m-L6kOW^}W(Dn#Tk zXdddk@QGjRz$bn|*B8hV5WzUt7hoBWZr2wcovt@N@e8=#c)|4V|Nl??0=_>!@kbm4 z$^U3}eZttyI!i)dYM ztrMU4;~-jLj*ACrx)BA@v;m^z11-y2ZNFMuq+@S^oE$nr>#TVh;)cz`_#YWqQ* z=X>KtFj$3v?+2LkK0uuJTO8uNY2B&4MO|Noyn42z88u75y5 zf86y4h3$_bzV;s6CwgO3hF8o%DbB2^>>97qb>#T6h5Sejk` zFgCmXVC-hK2K(nn&FXGZ194Ea{^>lnpF!M#0URbTZ2tWJ-_0r}uE3z}`Um1uL6Cp6 zK)g5*3(OVZO^$>Fy0ri}rr?48!K2d^8t4Ll;DIg(N)iHKf>#i%BktgS4Uny%lIF#+ z-$>q9=&XGM4*_sMye@hX0&*8`otOf{%;=^DCYmvG{YlC!K1VG1t?+d3l?`^@aR1LqW1Uy|DXtm zy7#qOx9cB|8Ql6{c!~XSfSv`>At>O+0FTVWv z|Gyb*8)K=+{tF=ex?R6`%<$+H0X5bcU=Crt;L**% zzm360m%nu*13pC_%?B7k3X}O;I|wOc0xK*{hFIBrfDx;;pdb*CfaURsAOHX3R}bo~ zfYW!*Ur=iJ!PxBjg%P5KVqfJE>#KayeAV=wpszp?1WMD>{*d6S&xE1?99KpBt)~bn z1jkh>f9pa*3YkHXnpRo^331$!di+K1H&78P*m?t$4Z0yzCu_Q!4m1rmA7H|fAdbH< z#Hv?VP=TS@^$QckZk(}Q8j4#1Ed3Uj8bB1`^MUub|NlE#rwV{=C6va9v9*90Td#fv z*=kIrt*H=iU<(YGUrS0IAd2w$b^jM^u_YO#4+?RDeouf{fX@{vrPjw?|A3M?L@f@- z2zd0if*QXbo!3Cw;m2oCb|4~y_Yq3C;H;2Qnz>&?!hzw%fzSW{@4ofLLol zECopih8K%KtOO8i28gu+#OedFK7d#)AeMp@tjJml;zme0FuchA3@xx<9%N*Ig`0IN zs2za+q?JE|Nr}TOFJ;^KL8Q~o44}Q|Nr}sNjosS$o~ZO`-@9o zG1WDK)LnyXEBf^R|8dtZAR}J$b-RA)JpN+#H)uq&s`7%GA75&oH`o4QEY*jmhg~3> zL3PCoxG6dySHn`v@fV-J{r~@31mZ$|8CdMFgKQR+abS3H_9M)Ni$7z!@czgD|Mx3{ z)GdXnJ9#)wk6*q8lou0 z>lo)4e>e?c=jX#|6F??`RDin3pz#rqV_fr6i_$Bt6jV+1jM5aebrn=iK#b(%#2o$H z{2Wk!6r_y7Ge0jgSs^DsIa?vMBD1)p*h)dwBvT=+C_fj>$SZ~@^~}pG$xO^qC@D(J zN=+`wFRD~XMX>^5a=A8xY9<#$kv7Nzx6GVW1$EV8b%m7t)Z#q#5~wv?t`(UjnR)44 z45~S448frBt<1c1g@U5|^rFOEunsN;E<;U)sMMnT%)E4ll>EF@E(TQ-!(uK5BTa>% z)Wj5!hQy-u(%jU%l46i$3=9m8Fup=!Q7Xu~;?xqZkjjEo1@+Xt_>|1z0tMX+b%nJ2 zB8809oC1a1)Z*gA^i-I07+~h6!Q2h;K0_!-m6ZbAjO1hmH%}i|KSy6z1>L-S1SeWS zww$&B)XMY)%Q(oRZYs zg4CkKlG3779R+U`rN)NF3f^F=6%=$+pz6Vco~Slu=0U<&RTY*PR8=7{p`f6f0o7NW zkzcM*l95>qNpYY60*}3d&G&>yQZbn+HXyMmF*miOsMrc*paM9W;Zdcd;0SgF5@8D| z6CloHP*4CxH%aQTMI)N|nNZU~;q3=kkBBa$1fT$N53>3YlxRUR7|H~x*E3Ax0+$F3 zs-_0TTnt>snhMT|ImzHum6y)IWumDN3{PaBaN!C74OyecUP(SA_CUoG7sMb{V{?#k zrkVQJROH zV*(?)07x7(b@t=+|NmNGM?naXIEaO+o`FFHG&je9#tg68Tby!rpX7o^USPoRy-nU{^ZgOP`wg8?KD^7r4j|Ns97X@JQy z{Q^mY6!{dm{1FBQhWYRR{|EIx8Q|uxfy;x& z`wTw({|}BDxO^U5o(0t4`tbk%dC=%BOrH4^J4gY@Zz_xo3=Tj3|4#+k@5Cq2&*aJ{ z(Z}q{r_jsd%BRu8>cMBw#^%9i(ai44=a9o^;mBv;$fx1Nr{KgV;lwB4#K!@SmmEe0 zhKwKo|AR)xKt_$?!5ab-I3e@P1yCC1Qcw~HvC(PJ+!II~G++;+C$K~Gg9hwD{3Buz zz9fhP!qEA0X%L%%fdMp80Afmk2oN7C56V9vA(;HvfB*AA`~>KHIcP!x#IIn1m=Bte z0P!23@~{H;El7}ofdN$hfS3{>f`NfS6iUM=&;$sW4V{O9rB!fwgH*nNvI0Lq8C8)hG90tBQ5#{c&p;-3jn_5Y!Kn7tpM{4}UMNH0AwY#jr-UB{sD zdJRfHgVNuiG#hk%h!~VsgVJVD+6_vFLFqIoT?VDwp!75-y$nikgVM*KG`hRoot>=| zG~E3{H5E+sEc6T%j0_Bo4NMJ;6f_EoQj1b^QWJ|)H5t&988R^F6<6k#BqlNF6_*r2 z=nNPuGp{7IsDME)FTW&J&(Xj%|y-~Rv4hbm`)l`jcU0hs$?DrbO|XBAL~!pbk0eIPSn zY!DsCzyO*Cg}WbCUZg=C3~Td1xv=IEoX%!oU;vdxF#BQU(FCZ50FWh6_k+~H+z%CI zsDiHB0?C2IVCCNfsD79~p4%l4KcE_5dPZy5EZa`1HuEX{D83_^a7~;u<*M8t#2gNPMq`eEzJVC&65ZCH>x7)B4jZD{&;K-Z`3fM%R6AkV=xgX(uA zHi&tEfq?-unGdgjq4hs>xg9*cfYgF8y8F*CFff27|6%$$p!zvLi)FCbhpr#g{{T4= zrXMu34zfppNd0%Ac>|^&R)50Q2g23?!qOMaepvc>1`R)$e%Sh)ABrGXAlgR|9)b@u z=QWys259?*0o+SrU;w2Lm|hSK(+8tLRh*dtR{x=jv%u>$RB={#eT6E{2Cs)u#n~BP^$V&v z2Lr6$Ko#d?fYk@6;#}}{GpaZ@1FZZ;73X1qmCLB&ybQ4N7FC>&0alKpit{tT%12aj z0R~vPhbk_}04vW>#f1>-g^?tf8H5>NAVb})o&oJurkk#5wndAk`DrlW2UQEusI+VsJIY^ zcn=Qoc{s#3FoM>yN-%(y)gjxk9f$hUU~$a+evy%ZL6AX`;Q_Qhg0)+2fYl?L3}L?k zi}N!0azo+~mJvQe#ScK!CwQ!nfq~&CRNS8zq8>a32TBV}pm2tmiA)ON5Ld<_?!*Lf z{|l)5LFo@xI`a^CLhj(-G~cPf+y?d=T@&W2FoX48Ne_ z&!F~#$6!HiJ!VL}fR;^yEOg+7RPdtApzxQ(NVkg2p!C4Y09t1XQV$+$Wnf@XgPM~7 zbw4bAwZZB^Dp9c=Gxm51!l6C|hjk8RFx;oP*+hJcC2x;~5a^{o_k=z?_FSsclYska`cJ!cXJDN4T%qNbnmkK!Z7u ztp*H`9SjZ*$h!^Db}k?!&B5Cn5PZjp`ifXg@LLIw2K2(1bquhd`fYCd`4nk3TS(Yr+<8LNlIp3d}(oN3e=DBnR)TK z`6;P6$k79eY6j3mEr=*!h)>N+VSu_LIT`HGD(FN#ID|km?IlGZwIxNFN%4@S1q|`= zNyWubT_6uLfTmy}dr;8ajAfroVo81`sw&VdDym3)e2A|zEUALF)xdHTN=gFlhe6W^ L_8w@L3#vE(NB_x_ literal 0 HcmV?d00001 diff --git a/en_disp/no.csv b/en_disp/no.csv new file mode 100644 index 0000000..67fa63a --- /dev/null +++ b/en_disp/no.csv @@ -0,0 +1,300 @@ +0.495 7.85555 +1.495 4.992043 +2.495 5.083519 +3.495 4.837184 +4.495 5.730787 +5.495 5.384058 +6.495 4.852617 +7.495 5.158381 +8.495 5.869892 +9.495 4.884564 +10.495 4.33198 +11.495 4.386514 +12.495 5.166891 +13.495 4.771049 +14.495 4.882547 +15.495 5.236072 +16.495 4.251842 +17.495 3.868952 +18.495 4.465192 +19.495 3.914108 +20.495 4.501608 +21.495 5.12093 +22.495 4.36732 +23.495 4.903208 +24.495 5.098126 +25.495 4.690235 +26.495 5.399739 +27.495 5.108307 +28.495 5.292021 +29.495 5.145338 +30.495 4.404358 +31.495 5.405853 +32.495 4.663691 +33.495 4.081963 +34.495 6.188183 +35.495 6.0188 +36.495 7.692908 +37.495 6.092902 +38.495 4.749257 +39.495 3.633642 +40.495 5.749056 +41.495 7.607848 +42.495 6.198161 +43.495 5.042036 +44.495 4.861593 +45.495 3.774541 +46.495 2.93576 +47.495 3.740174 +48.495 4.738251 +49.495 4.423623 +50.495 3.687216 +51.495 3.175314 +52.495 5.431673 +53.495 4.597431 +54.495 4.661989 +55.495 3.795582 +56.495 4.196253 +57.495 4.170956 +58.495 4.300163 +59.495 3.669111 +60.495 3.981718 +61.495 4.44312 +62.495 4.465314 +63.495 3.552949 +64.495 3.098147 +65.495 4.069936 +66.495 4.517417 +67.495 4.228989 +68.495 4.566031 +69.495 6.113259 +70.495 5.482125 +71.495 4.912869 +72.495 5.193067 +73.495 5.414767 +74.495 5.861018 +75.495 3.330722 +76.495 3.883945 +77.495 4.309343 +78.495 3.553871 +79.495 4.289112 +80.495 5.945142 +81.495 5.157633 +82.495 4.124648 +83.495 4.150417 +84.495 3.965337 +85.495 3.452004 +86.495 4.220101 +87.495 5.871353 +88.495 5.968219 +89.495 4.216883 +90.495 4.910265 +91.495 4.364788 +92.495 4.418641 +93.495 2.983683 +94.495 3.532853 +95.495 4.406537 +96.495 5.281766 +97.495 5.846073 +98.495 6.900974 +99.495 4.993888 +100.495 5.01344 +101.495 5.836103 +102.495 6.814361 +103.495 5.295947 +104.495 5.458851 +105.495 6.426154 +106.495 5.965657 +107.495 5.041414 +108.495 4.897183 +109.495 4.500224 +110.495 5.418111 +111.495 5.677549 +112.495 6.762825 +113.495 6.83103 +114.495 6.735544 +115.495 6.795608 +116.495 6.762779 +117.495 6.056893 +118.495 6.296188 +119.495 6.069157 +120.495 6.69384 +121.495 6.51264 +122.495 6.139268 +123.495 6.424421 +124.495 6.2766 +125.495 5.810904 +126.495 5.793117 +127.495 4.723606 +128.495 5.404977 +129.495 6.632844 +130.495 6.559532 +131.495 6.73709 +132.495 6.377484 +133.495 6.385852 +134.495 6.390564 +135.495 6.481876 +136.495 6.519546 +137.495 6.424363 +138.495 6.213209 +139.495 6.448448 +140.495 6.072065 +141.495 6.232355 +142.495 6.133897 +143.495 6.285806 +144.495 5.979782 +145.495 5.902345 +146.495 4.774288 +147.495 4.985182 +148.495 4.523976 +149.495 4.298417 +150.495 3.555156 +151.495 3.881785 +152.495 2.986247 +153.495 3.687659 +154.495 6.278628 +155.495 5.906808 +156.495 6.056681 +157.495 5.988139 +158.495 5.967813 +159.495 4.378355 +160.495 4.040305 +161.495 4.199613 +162.495 4.03333 +163.495 3.812861 +164.495 4.445457 +165.495 4.702903 +166.495 4.492487 +167.495 4.369803 +168.495 4.434697 +169.495 4.446601 +170.495 5.85261 +171.495 4.960565 +172.495 4.810213 +173.495 5.099955 +174.495 6.129668 +175.495 4.632645 +176.495 4.434772 +177.495 5.373664 +178.495 5.130775 +179.495 5.493731 +180.495 6.256959 +181.495 5.579167 +182.495 5.193838 +183.495 6.242636 +184.495 5.866744 +185.495 5.692851 +186.495 5.660518 +187.495 6.539093 +188.495 5.149898 +189.495 6.084246 +190.495 5.902113 +191.495 6.556249 +192.495 6.47089 +193.495 6.601765 +194.495 6.678838 +195.495 6.475928 +196.495 6.449563 +197.495 6.445582 +198.495 6.458978 +199.495 6.206001 +200.495 3.994532 +201.495 4.649855 +202.495 5.18968 +203.495 3.91944 +204.495 4.550412 +205.495 5.497172 +206.495 4.125317 +207.495 5.070048 +208.495 5.604442 +209.495 5.139417 +210.495 5.413501 +211.495 4.784013 +212.495 3.88686 +213.495 5.543916 +214.495 5.366814 +215.495 4.590774 +216.495 3.515021 +217.495 4.549414 +218.495 4.413313 +219.495 4.365502 +220.495 4.822679 +221.495 4.942861 +222.495 4.184449 +223.495 4.569083 +224.495 5.034656 +225.495 3.760486 +226.495 5.778256 +227.495 4.666387 +228.495 3.87934 +229.495 4.298156 +230.495 3.606369 +231.495 4.043328 +232.495 3.533107 +233.495 4.322265 +234.495 6.460613 +235.495 5.619601 +236.495 5.003014 +237.495 5.240613 +238.495 5.716251 +239.495 6.512721 +240.495 6.360552 +241.495 4.694978 +242.495 4.520795 +243.495 6.517642 +244.495 6.727004 +245.495 6.663968 +246.495 6.741717 +247.495 6.748613 +248.495 6.230022 +249.495 4.738152 +250.495 6.63096 +251.495 5.940607 +252.495 4.742698 +253.495 4.901755 +254.495 5.24829 +255.495 6.601441 +256.495 6.805718 +257.495 6.696987 +258.495 5.814055 +259.495 6.719182 +260.495 5.310413 +261.495 4.917739 +262.495 4.895024 +263.495 4.910364 +264.495 5.474503 +265.495 6.951988 +266.495 5.2517 +267.495 5.347468 +268.495 4.94037 +269.495 5.637509 +270.495 5.592732 +271.495 6.633568 +272.495 5.42893 +273.495 6.134158 +274.495 5.679378 +275.495 5.436838 +276.495 6.490301 +277.495 5.504136 +278.495 4.772426 +279.495 5.005461 +280.495 6.63088 +281.495 6.747831 +282.495 5.150361 +283.495 5.031422 +284.495 4.875282 +285.495 4.702079 +286.495 4.880232 +287.495 4.886068 +288.495 5.34387 +289.495 4.904718 +290.495 6.713236 +291.495 7.771074 +292.495 5.571742 +293.495 5.278872 +294.495 6.742266 +295.495 6.609142 +296.495 5.969145 +297.495 6.306997 +298.495 6.458366 +299.495 5.442104 diff --git a/en_disp/no.txt b/en_disp/no.txt new file mode 100644 index 0000000..67fa63a --- /dev/null +++ b/en_disp/no.txt @@ -0,0 +1,300 @@ +0.495 7.85555 +1.495 4.992043 +2.495 5.083519 +3.495 4.837184 +4.495 5.730787 +5.495 5.384058 +6.495 4.852617 +7.495 5.158381 +8.495 5.869892 +9.495 4.884564 +10.495 4.33198 +11.495 4.386514 +12.495 5.166891 +13.495 4.771049 +14.495 4.882547 +15.495 5.236072 +16.495 4.251842 +17.495 3.868952 +18.495 4.465192 +19.495 3.914108 +20.495 4.501608 +21.495 5.12093 +22.495 4.36732 +23.495 4.903208 +24.495 5.098126 +25.495 4.690235 +26.495 5.399739 +27.495 5.108307 +28.495 5.292021 +29.495 5.145338 +30.495 4.404358 +31.495 5.405853 +32.495 4.663691 +33.495 4.081963 +34.495 6.188183 +35.495 6.0188 +36.495 7.692908 +37.495 6.092902 +38.495 4.749257 +39.495 3.633642 +40.495 5.749056 +41.495 7.607848 +42.495 6.198161 +43.495 5.042036 +44.495 4.861593 +45.495 3.774541 +46.495 2.93576 +47.495 3.740174 +48.495 4.738251 +49.495 4.423623 +50.495 3.687216 +51.495 3.175314 +52.495 5.431673 +53.495 4.597431 +54.495 4.661989 +55.495 3.795582 +56.495 4.196253 +57.495 4.170956 +58.495 4.300163 +59.495 3.669111 +60.495 3.981718 +61.495 4.44312 +62.495 4.465314 +63.495 3.552949 +64.495 3.098147 +65.495 4.069936 +66.495 4.517417 +67.495 4.228989 +68.495 4.566031 +69.495 6.113259 +70.495 5.482125 +71.495 4.912869 +72.495 5.193067 +73.495 5.414767 +74.495 5.861018 +75.495 3.330722 +76.495 3.883945 +77.495 4.309343 +78.495 3.553871 +79.495 4.289112 +80.495 5.945142 +81.495 5.157633 +82.495 4.124648 +83.495 4.150417 +84.495 3.965337 +85.495 3.452004 +86.495 4.220101 +87.495 5.871353 +88.495 5.968219 +89.495 4.216883 +90.495 4.910265 +91.495 4.364788 +92.495 4.418641 +93.495 2.983683 +94.495 3.532853 +95.495 4.406537 +96.495 5.281766 +97.495 5.846073 +98.495 6.900974 +99.495 4.993888 +100.495 5.01344 +101.495 5.836103 +102.495 6.814361 +103.495 5.295947 +104.495 5.458851 +105.495 6.426154 +106.495 5.965657 +107.495 5.041414 +108.495 4.897183 +109.495 4.500224 +110.495 5.418111 +111.495 5.677549 +112.495 6.762825 +113.495 6.83103 +114.495 6.735544 +115.495 6.795608 +116.495 6.762779 +117.495 6.056893 +118.495 6.296188 +119.495 6.069157 +120.495 6.69384 +121.495 6.51264 +122.495 6.139268 +123.495 6.424421 +124.495 6.2766 +125.495 5.810904 +126.495 5.793117 +127.495 4.723606 +128.495 5.404977 +129.495 6.632844 +130.495 6.559532 +131.495 6.73709 +132.495 6.377484 +133.495 6.385852 +134.495 6.390564 +135.495 6.481876 +136.495 6.519546 +137.495 6.424363 +138.495 6.213209 +139.495 6.448448 +140.495 6.072065 +141.495 6.232355 +142.495 6.133897 +143.495 6.285806 +144.495 5.979782 +145.495 5.902345 +146.495 4.774288 +147.495 4.985182 +148.495 4.523976 +149.495 4.298417 +150.495 3.555156 +151.495 3.881785 +152.495 2.986247 +153.495 3.687659 +154.495 6.278628 +155.495 5.906808 +156.495 6.056681 +157.495 5.988139 +158.495 5.967813 +159.495 4.378355 +160.495 4.040305 +161.495 4.199613 +162.495 4.03333 +163.495 3.812861 +164.495 4.445457 +165.495 4.702903 +166.495 4.492487 +167.495 4.369803 +168.495 4.434697 +169.495 4.446601 +170.495 5.85261 +171.495 4.960565 +172.495 4.810213 +173.495 5.099955 +174.495 6.129668 +175.495 4.632645 +176.495 4.434772 +177.495 5.373664 +178.495 5.130775 +179.495 5.493731 +180.495 6.256959 +181.495 5.579167 +182.495 5.193838 +183.495 6.242636 +184.495 5.866744 +185.495 5.692851 +186.495 5.660518 +187.495 6.539093 +188.495 5.149898 +189.495 6.084246 +190.495 5.902113 +191.495 6.556249 +192.495 6.47089 +193.495 6.601765 +194.495 6.678838 +195.495 6.475928 +196.495 6.449563 +197.495 6.445582 +198.495 6.458978 +199.495 6.206001 +200.495 3.994532 +201.495 4.649855 +202.495 5.18968 +203.495 3.91944 +204.495 4.550412 +205.495 5.497172 +206.495 4.125317 +207.495 5.070048 +208.495 5.604442 +209.495 5.139417 +210.495 5.413501 +211.495 4.784013 +212.495 3.88686 +213.495 5.543916 +214.495 5.366814 +215.495 4.590774 +216.495 3.515021 +217.495 4.549414 +218.495 4.413313 +219.495 4.365502 +220.495 4.822679 +221.495 4.942861 +222.495 4.184449 +223.495 4.569083 +224.495 5.034656 +225.495 3.760486 +226.495 5.778256 +227.495 4.666387 +228.495 3.87934 +229.495 4.298156 +230.495 3.606369 +231.495 4.043328 +232.495 3.533107 +233.495 4.322265 +234.495 6.460613 +235.495 5.619601 +236.495 5.003014 +237.495 5.240613 +238.495 5.716251 +239.495 6.512721 +240.495 6.360552 +241.495 4.694978 +242.495 4.520795 +243.495 6.517642 +244.495 6.727004 +245.495 6.663968 +246.495 6.741717 +247.495 6.748613 +248.495 6.230022 +249.495 4.738152 +250.495 6.63096 +251.495 5.940607 +252.495 4.742698 +253.495 4.901755 +254.495 5.24829 +255.495 6.601441 +256.495 6.805718 +257.495 6.696987 +258.495 5.814055 +259.495 6.719182 +260.495 5.310413 +261.495 4.917739 +262.495 4.895024 +263.495 4.910364 +264.495 5.474503 +265.495 6.951988 +266.495 5.2517 +267.495 5.347468 +268.495 4.94037 +269.495 5.637509 +270.495 5.592732 +271.495 6.633568 +272.495 5.42893 +273.495 6.134158 +274.495 5.679378 +275.495 5.436838 +276.495 6.490301 +277.495 5.504136 +278.495 4.772426 +279.495 5.005461 +280.495 6.63088 +281.495 6.747831 +282.495 5.150361 +283.495 5.031422 +284.495 4.875282 +285.495 4.702079 +286.495 4.880232 +287.495 4.886068 +288.495 5.34387 +289.495 4.904718 +290.495 6.713236 +291.495 7.771074 +292.495 5.571742 +293.495 5.278872 +294.495 6.742266 +295.495 6.609142 +296.495 5.969145 +297.495 6.306997 +298.495 6.458366 +299.495 5.442104 diff --git a/envir/CMakeLists.txt b/envir/CMakeLists.txt index 9a76923..7ac6f6c 100644 --- a/envir/CMakeLists.txt +++ b/envir/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required (VERSION 2.8) -cmake_policy(SET CMP0011 NEW) cmake_policy(SET CMP0003 OLD) +cmake_policy(SET CMP0011 NEW) +cmake_policy(SET CMP0015 NEW) # set project name set (PROJECT envir) @@ -28,4 +29,4 @@ set (LIBRARIES) set (TARGETS "") set (HEADERS "") -add_subdirectory (src) \ No newline at end of file +add_subdirectory (${${PROJECT}_SOURCE_DIR}) \ No newline at end of file diff --git a/envir/README b/envir/README index 922317a..37a064a 100644 --- a/envir/README +++ b/envir/README @@ -1,4 +1,4 @@ -envir - program for search environment for chosen molecule by geometric criterion +envir - program that searchs environment for chosen molecule by geometric criterion Version: 1.0.1 License: GPL diff --git a/envir/about.dox b/envir/about.dox new file mode 100644 index 0000000..4758f00 --- /dev/null +++ b/envir/about.dox @@ -0,0 +1,65 @@ +/*! + * @mainpage envir + * @image latex ./logo.png + * + * @section intro_sec Introduction + * + * About this program: + *
    + *
  • Program that searchs environment for chosen molecule by geometric criterion + *
+ * + * Developer: + *
    + *
  • Evgeniy Alekseev aka arcanis
    + *
+ * License: + *
    + *
  • GPL + *
+ * + * @section How-To-Use How to use + * Usage: + *
+ * envir -i FILENAME -c X,Y,Z -o FILEMANE [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] 
+ *                                                   [ -l LOGFILE] [ -q ] [ -h ]
+ *
+ * Parametrs:
+ *    -i          - input file with coordinates
+ *    -c          - cell size (float), A
+ *    -o          - output file with coordinates
+ *    -n          - number of molecule for search (integer). Default is 1
+ *    -r          - radius of environment (float). Default is 6.0
+ *    -l          - log enable
+ *    -q          - quiet enable
+ *    -h          - show this help and exit
+ * 
+ * + * @page Install + * + * @section Requirements Requirements + * The application statgen requires the following external stuff: + * - cmake >= 2.8 + * - gcc >= 4.8 + * + * @section How-To How to install + * + * @subsection Linux Linux + * @code + * mkdir build && cd build + * cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ../ + * make + * make install + * @endcode + * + * @subsection Windows Windows + * @code + * create project file using 'cmake' + * compile project + * @endcode + * You may also download compiled executable file for Win_x86. + * + * @page Changelog + * V.1.0.1 (2013-07-27) + * * initial release + */ diff --git a/envir/envir.cmake b/envir/envir.cmake index 427f0d4..2b4603e 100644 --- a/envir/envir.cmake +++ b/envir/envir.cmake @@ -1,22 +1,32 @@ # set directories set (${PROJECT}_BINARY_DIR bin) -set (${PROJECT}_SOURCE_DIR src:include) +set (${PROJECT}_SOURCE_DIR src) +set (${PROJECT}_INCLUDE_DIR include) set (${PROJECT}_LIB_DIR lib) -set (CMAKE_INCLUDE_PATH ${${PROJECT}_SOURCE_DIR}) -set (CMAKE_LIBRARY_PATH ${${PROJECT}_LIB_DIR}) +# include_path +include_directories (${${PROJECT}_INCLUDE_DIR}/${PROJECT} + ${${PROJECT}_SOURCE_DIR}) +# library path +link_directories (${${PROJECT}_LIB_DIR}) +# executable path set (EXECUTABLE_OUTPUT_PATH ${${PROJECT}_BINARY_DIR}) + +# verbose set (CMAKE_VERBOSE_MAKEFILE ON) +# flags if ( WITH_DEBUG_MODE ) - ADD_DEFINITIONS ( -DDEBUG_MODE=1 ) + add_definitions ( -DDEBUG_MODE=1 ) endif () - if ( CMAKE_COMPILER_IS_GNUCXX ) set (ADD_CXX_FLAGS "-Wall") set (CMAKE_CXX_FLAGS "-O0 ${ADD_CXX_FLAGS}") set (CMAKE_CXX_FLAGS_DEBUG "-g -O0") set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +elseif ( MSVC ) + set (ADD_CXX_FLAGS "/W4") + set (CMAKE_CXX_FLAGS "${ADD_CXX_FLAGS}") else () - message (STATUS "Flags not enabled") + message ("Unknown compiler") endif () \ No newline at end of file diff --git a/envir/envir.doxygen b/envir/envir.doxygen new file mode 100644 index 0000000..2e224d0 --- /dev/null +++ b/envir/envir.doxygen @@ -0,0 +1,1889 @@ +# Doxyfile 1.8.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = envir + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = V.1.0.1 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Program that searchs environment for chosen molecule by geometric criterion" + +# 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. + +PROJECT_LOGO = /home/arcanis/Documents/github/moldyn/envir/logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, +# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, +# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. Note that you specify absolute paths here, but also +# relative paths, which will be relative from the directory where doxygen is +# started. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, +# and language is one of the parsers supported by doxygen: IDL, Java, +# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, +# C++. For instance to make doxygen treat .inc files as Fortran files (default +# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note +# that for custom extensions you also need to set FILE_PATTERNS otherwise the +# files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# 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. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES (the +# default) will make doxygen replace the get and set methods by a property in +# the documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields or simple typedef fields will be shown +# inline in the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO (the default), structs, classes, and unions are shown on a separate +# page (for HTML and Man pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can +# be an expensive process and often the same symbol appear multiple times in +# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too +# small doxygen will become slower. If the cache is too large, memory is wasted. +# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid +# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 +# symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = 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 (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +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 (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +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. + +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. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if section-label ... \endif +# and \cond section-label ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool 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. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The 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 (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +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 +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be ignored. +# 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. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If left blank doxygen will +# generate a default style sheet. Note that it is recommended to use +# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this +# tag will in the future become obsolete. + +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 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. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen 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 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +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. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely +# identify the documentation publisher. This should be a reverse domain-name +# style string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When 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. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +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 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. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and +# SVG. The default value is HTML-CSS, which is slower, but has the best +# compatibility. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript +# pieces of code that will be used on startup of the MathJax code. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. +# There are two flavours of web server based search 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 manual for details. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# 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 (doxysearch.cgi) which are based on the open source search +# engine library Xapian. See the manual for configuration details. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will returned the search results when EXTERNAL_SEARCH is enabled. +# Doxygen ships with an example search engine (doxysearch) which is based on +# the open source search engine library Xapian. See the manual for configuration +# details. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id +# of to a relative location where the documentation can be found. +# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# 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. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4 will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +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. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# 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 directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .1 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# 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. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# 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. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files +# that can be used to generate PDF. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. If left blank docbook will be used as the default path. + +DOCBOOK_OUTPUT = docbook + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will 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, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# 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. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font 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 setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# manageable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. 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). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/envir/envir.pdf b/envir/envir.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6004c1f33b56fd723917767b4ffaba6a1e4c60cf GIT binary patch literal 109426 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

6b66 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 z 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

<(WLy7imU61b?+d(}cxJe09pZT} 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 IUH#p-08vls<^TWy literal 0 HcmV?d00001 diff --git a/envir/logo.png b/envir/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..41adc0cb46ab8b2f327c0851eae786631b4ba85a GIT binary patch literal 3478 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 RLIwr~22WQ%mvv4FO#tM^$sqs$ literal 0 HcmV?d00001 diff --git a/envir/src/CMakeLists.txt b/envir/src/CMakeLists.txt index 0f005f6..e3486ad 100644 --- a/envir/src/CMakeLists.txt +++ b/envir/src/CMakeLists.txt @@ -3,59 +3,27 @@ set ("${PROJECT}_VERSION_MINOR" 0) set ("${PROJECT}_VERSION_PATCH" 1) set ("${PROJECT}_VERSION" ${${PROJECT}_VERSION_MAJOR}.${${PROJECT}_VERSION_MINOR}.${${PROJECT}_VERSION_PATCH}) -message (STATUS ${${PROJECT}_VERSION}) +message (STATUS "${PROJECT}: Version ${${PROJECT}_VERSION}") -## set files -# main files -set (MAIN_SOURCES main) -# not public srcs -set (PRIVATE_CLASSES add_main - coords - envir_search - messages - print_struct - set_center) -# headers only files -SET (HEADERS_ONLY) -# public srcs -set (PUBLIC_CLASSES) -# public headers -set (PUBLIC_HEADERS) -# shared libraries +# set files +aux_source_directory (. SOURCES) + +# set library if (CMAKE_COMPILER_IS_GNUCXX) set (ADDITIONAL_LIB m) else () set (ADDITIONAL_LIB) endif() -set (SOURCES) - -# append list -foreach (class ${PRIVATE_CLASSES}) - LIST (APPEND SOURCES ${class}.c) - LIST (APPEND HEADERS ${class}.h) -endforeach () - -foreach (class ${HEADERS_ONLY}) - LIST (APPEND HEADERS ${class}.h) -endforeach () - -foreach (class ${PUBLIC_CLASSES}) - LIST (APPEND SOURCES ${class}.c) - LIST (APPEND HEADERS ../include/${PROJECT}/${class}.h) - LIST (APPEND PUBLIC_HEADERS ../include/${PROJECT}/${class}.h) -endforeach () # message message (STATUS "SOURCES: ${SOURCES}") # link libraries and compile -add_executable (${PROJECT} ${MAIN_SOURCES} ${SOURCES}) +add_executable (${PROJECT} ${SOURCES}) target_link_libraries (${PROJECT} ${ADDITIONAL_LIB}) # install properties -INSTALL (TARGETS ${PROJECT} - DESTINATION bin) +INSTALL (TARGETS ${PROJECT} DESTINATION bin) if (ADD_INCLUDE) - INSTALL (FILES ${PUBLIC_HEADERS} - DESTINATION include/${PROJECT}) + INSTALL (FILES ${PUBLIC_HEADERS} DESTINATION include/${PROJECT}) endif () \ No newline at end of file diff --git a/envir/src/add_main.c b/envir/src/add_main.c index 08011fa..d2da375 100644 --- a/envir/src/add_main.c +++ b/envir/src/add_main.c @@ -1,4 +1,5 @@ -/* Additional library for main.c (envir) +/** + * @file */ #include @@ -6,7 +7,25 @@ #include "messages.h" +/** + * @fn error_checking + */ int error_checking (const float *cell, const char *input, const char *output) +/** + * @brief function that checks errors in input variables + * @code + * error_checking (cell, input, output); + * @endcode + * + * @param cell massive of cell size + * @param input first trajectory step + * @param output last trajectory step + * + * @return 11 - error in 'cell' + * @return 12 - error in 'input' + * @return 13 - error in 'output' + * @return 0 - exit without errors + */ { if ((cell[0] == 0.0) || (cell[1] == 0.0) || (cell[2] == 0.0)) return 11; @@ -19,8 +38,26 @@ int error_checking (const float *cell, const char *input, const char *output) } +/** + * @fn print_message + */ int print_message (const int quiet, FILE *std_output, const int log, FILE *f_log, const int mode, const char *str) +/** + * @brief function that prints message in log and stdout + * @code + * print_message (quiet, stdout, log, f_log, 0, str); + * @endcode + * + * @param quiet status of quiet-mode + * @param std_output stdout + * @param log status of log-mode + * @param f_log log file + * @param mode number of message in "messages.c" + * @param str additional text in message + * + * @return 0 - exit without errors + */ { if ((quiet != 1) && (std_output != stderr)) message (0, mode, str, std_output); @@ -31,8 +68,28 @@ int print_message (const int quiet, FILE *std_output, const int log, FILE *f_log } +/** + * @fn set_defaults + */ int set_defaults (float *cell, char *input, int *log, int *num_of_mol, char *output, int *quiet, float *rad) +/** + * @brief function for set default values of variables + * @code + * set_defaults (cell, &from, input, &log, &max_depth, &num_of_inter, output, &to, + * &type_inter, &quiet); + * @endcode + * + * @param cell massive of cell size + * @param input mask of trajectory files + * @param log status of log-mode + * @param num_of_mol number of molecule + * @param output output file name + * @param quiet status of quiet-mode + * @param rad radius of environment sphere + * + * @return 0 - exit without errors + */ { int i; diff --git a/envir/src/add_main.h b/envir/src/add_main.h index 803a547..785a7b3 100644 --- a/envir/src/add_main.h +++ b/envir/src/add_main.h @@ -1,6 +1,20 @@ +/** + * @file + */ + #ifndef ADD_MAIN_H #define ADD_MAIN_H +/** + * @fn error_checking + */ +/** + * @fn print_message + */ +/** + * @fn set_defaults + */ + int error_checking (const float *, const char *, const char *); int print_message (const int, FILE *, const int, FILE *, const int, const char *); int set_defaults (float *, char *, int *, int *, char *, int *, float *); diff --git a/envir/src/coords.c b/envir/src/coords.c index 636dbf2..e7438cb 100644 --- a/envir/src/coords.c +++ b/envir/src/coords.c @@ -1,52 +1,67 @@ -/* Library for reading coordinates from input file - * - * Usage: - * reading_coords (mode, filename, type_interaction, labels, - * cell, &number_of_molecules, &number_of_atoms, true_label_molecule, - * label_molecule, type_atoms, coords, char_type_atoms) +/** + * @file */ #include #include - +/** + * @fn reading_coords + */ int reading_coords (const int mode, const char *filename, const int type_inter, const int *label_atom, const float *cell, int *num_mol, int *num_atoms, int *true_label_mol, int *label_mol, int *type_atoms, float *coords, char *ch_type_atoms) -/* filename - name of file with coordinates - * type_inter - type interaction (number of molecules for interaction) - * (number of molecules in aglomerate for agl) - * label_atom - types of atom for interaction - * (molecules in aglomerate for agl) - * cell - cell dimension - * num_mol - number of molecules for writing coordinates - * num_atoms - number of atoms for writing coordinates - * true_label_mol - massive of true numbers of molecule for atoms - * label_mol - massive of numbers of molecule for atoms - * type_atoms - massive of atom types for atoms - * coords - massive of coordinates - * ch_type_atoms - massive of char types for atoms +/** + * @brief function that reads coordinates from special file format + * @code + * reading_coords (0, filename, type_inter, label_atom, cell, &num_mol, &num_atoms, + * true_label_mol, label_mol, type_atoms, coords, ch_type_atoms); + * @endcode + * + * @param mode mode of reading; '1' is statgen, '2' is envir or + * frad, '3' is agl + * @param filename input file name + * @param type_inter number of needed atoms + * (number of needed molecules) + * @param label_atom massive of needed atom types + * (massive of needed molecules) + * @param cell massive of cell size + * @param num_mol number of molecules + * @param num_atoms number of atoms + * @param true_label_mol massive of true numbers of molecule for atoms + * @param label_mol massive of numbers of molecule for atoms + * @param type_atoms massive of atom types + * @param coords massive of coordinates + * @param ch_type_atoms massive of char atom types + * + * @return 1 - file $filename does not exist + * @return 2 - unknown mode + * @return 0 - exit without errors */ { char at_symb[32], file_string[256]; int atoms, cur_at_num, cur_at_type, cur_mol, i, j, tr_num_atoms, ref_mol, x, y; float cur_coords[3], *not_tr_coords, ref[3]; FILE *inp; -/* cur_*, at_symb - temp variables - * file_string - temp string variable - * atoms - total number of atoms in system - * tr_num_atoms - number of translated atoms for writing coordinates (m.b. 8*num_atoms) - * ref_mol - number of molecule for reference - * not_tr_coords - not translated coordinates - * ref - coordinates of reference molecule - * inp - file with input data + +/* cur_* temp variables + * at_symb temp variable + * file_string temp string variable + * atoms total number of atoms in system + * tr_num_atoms number of translated atoms (must be 8*num_atoms) + * ref_mol number of molecule for reference in translation + * not_tr_coords massive of not translated coordinates + * ref massive of coordinates of reference molecule + * inp input file */ +/// Work blocks + *num_atoms = 0; *num_mol = 0; -// Reading file +///

   reading file 
inp = fopen (filename, "r"); if (inp == NULL) return 1; @@ -61,10 +76,11 @@ int reading_coords (const int mode, const char *filename, const int type_inter, sscanf (file_string, "%i%s%f%f%f%i%i", &cur_at_num, at_symb, &cur_coords[0], &cur_coords[1], &cur_coords[2], &cur_at_type, &cur_mol); +// reading variables according to selected mode switch (mode) { case 0: -// for statgen +// mode == 0 (selected atoms) for (j=0; j translation tr_num_atoms = *num_atoms; for (i=0; i<*num_atoms; i++) for (j=0; j<3; j++) coords[3*i+j] = not_tr_coords[3*i+j]; -// Assign initial value to reference coordinates +// assign initial value to reference coordinates ref_mol = label_mol[0]; for (i=0; i<3; i++) ref[i] = coords[3*0+i]; @@ -154,7 +170,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (x=0; x<3; x++) { if (ref[x] >= 0.0) -// if xyz >= 0.0 A +// if xyz >= 0.0 A { for (j=0; j<3; j++) if (j == x) @@ -167,7 +183,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, tr_num_atoms++; } else -// if xyz < 0.0 A +// if xyz < 0.0 A { for (j=0; j<3; j++) if (j == x) @@ -186,7 +202,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (y=x+1; y<3; y++) { if ((ref[x] >= 0.0) && (ref[y] >= 0.0)) -// if xyz and xyz >= 0.0 A +// if xyz and xyz >= 0.0 A { for (j=0; j<3; j++) if ((j == x) || (j == y)) @@ -200,7 +216,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[x] < 0.0) && (ref[y] < 0.0)) -// if xyz and xyz < 0.0 A +// if xyz and xyz < 0.0 A { for (j=0; j<3; j++) if ((j == x) || (j == y)) @@ -216,7 +232,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, for (y=0; y<3; y++) if ((ref[x] < 0.0) && (ref[y] >= 0.0)) -// if xyz OR xyz >= 0.0 +// if xyz OR xyz >= 0.0 { for (j=0; j<3; j++) { @@ -235,7 +251,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) -// if x and y and z >= 0.0 A +// if x and y and z >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -247,7 +263,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) -// if x and y >= 0.0 A and z < 0.0 A +// if x and y >= 0.0 A and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -259,7 +275,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) -// if x and z >= 0.0 A and y < 0.0 A +// if x and z >= 0.0 A and y < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -271,7 +287,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) -// if y and z >= 0.0 A and x < 0.0 A +// if y and z >= 0.0 A and x < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -283,7 +299,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) -// if x and y < 0.0 A and z >= 0.0 A +// if x and y < 0.0 A and z >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -295,7 +311,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) -// if x and z < 0.0 A and y >= 0.0 A +// if x and z < 0.0 A and y >= 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; @@ -307,7 +323,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) -// if x >= 0.0 A and y and z < 0.0 A +// if x >= 0.0 A and y and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -319,7 +335,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) -// if x and y and z < 0.0 A +// if x and y and z < 0.0 A { coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; @@ -331,7 +347,7 @@ int reading_coords (const int mode, const char *filename, const int type_inter, } } -// free memory +///
   free memory 
free (not_tr_coords); return 0; diff --git a/envir/src/coords.h b/envir/src/coords.h index c1d9160..6bdf48e 100644 --- a/envir/src/coords.h +++ b/envir/src/coords.h @@ -1,6 +1,14 @@ +/** + * @file + */ + #ifndef COORDS_H #define COORDS_H +/** + * @fn reading_coords + */ + int reading_coords (const int, const char *, const int, const int *, const float *, int *, int *, int *, int *, int *, float *, char *); diff --git a/envir/src/envir_search.c b/envir/src/envir_search.c index b61d0f7..82d0fde 100644 --- a/envir/src/envir_search.c +++ b/envir/src/envir_search.c @@ -1,3 +1,7 @@ +/** + * @file + */ + /* Library for search environment * * Usage: @@ -8,19 +12,32 @@ #include +/** + * @fn search_envir + */ int search_envir (const int num_of_mol, const int num_mol, const float *centr_coords, const double rad, int *needed_mol, int *num_needed_mol) -/* num_of_mol - number of molecule for search - * num_mol - number of molecules for writing coordinates - * centr_coords - massive of centered coordinates - * rad - criterion - * needed_mol - massive of needed molecules - * num_needed_mol - number of needed molecules +/** + * @brief function that searchs environment + * @code + * search_envir (number_of_molecule, num_mol, centr_coords, rad, needed_mol, + * &num_needed_mol); + * @endcode + * + * @param num_of_mol number of molecule + * @param num_mol number of molecules + * @param centr_coords massive of centered coordinates + * @param rad radius of environment sphere + * @param needed_mol massive of number of needed molecules + * @param num_needed_mol number of needed molecules + * + * @return 0 - exit without errors */ { float r; int i; -/* r - radius + +/* r radius */ *num_needed_mol = 0; diff --git a/envir/src/envir_search.h b/envir/src/envir_search.h index 80ef7fd..f40ae77 100644 --- a/envir/src/envir_search.h +++ b/envir/src/envir_search.h @@ -1,6 +1,14 @@ +/** + * @file + */ + #ifndef ENVIR_SEARCH_H #define ENVIR_SEARCH_H +/** + * @fn search_envir + */ + int search_envir (const int, const int, const float *, const double, int *, int *); #endif /* ENVIR_SEARCH_H */ \ No newline at end of file diff --git a/envir/src/main.c b/envir/src/main.c index 9c45ca0..db2475d 100644 --- a/envir/src/main.c +++ b/envir/src/main.c @@ -1,3 +1,7 @@ +/** + * @file + */ + #include #include #include @@ -11,7 +15,16 @@ #include "set_center.h" +/** + * @fn main + */ int main(int argc, char *argv[]) +/** + * @return 1 - error in error_checking + * @return 2 - input file does not exist + * @return 3 - memory error + * @return 0 - exit without errors + */ { char tmp_str[2048]; int error, i, j, *tmp_int; @@ -21,25 +34,26 @@ int main(int argc, char *argv[]) float cell[3], *centr_coords, *coords, rad; int *label_mol, log, num_atoms, num_mol, num_needed_mol, num_of_mol, *needed_mol, quiet, *true_label_mol; -/* ch_type_atoms - massive of char types for atoms - * input - input file name - * logfile - log file name - * output - output file name + +/* ch_type_atoms massive of char atom types + * input input file name + * logfile log file name + * output output file name * - * cell - cell dimension - * centr_coords - massive of coordinates of center molecules - * coords - massive of coordinates - * rad - criterion + * cell massive of cell size + * centr_coords massive of centered coordinates + * coords massive of coordinates + * rad radius of environment sphere * - * label_mol - massive of numbers of molecule for atoms - * log - status of log-mode - * num_atoms - number of atoms for writing coordinates - * num_mol - number of molecules for writing coordinates - * num_needed_mol - number of needed molecules - * num_of_mol - number of molecule for search - * needed_mol - massive of needed molecules - * quiet - status of quiet-mode - * true_label_mol - massive of true numbers of molecule for atoms + * label_mol massive of numbers of molecule for atoms + * log status of log-mode + * num_atoms number of atoms + * num_mol number of molecules + * num_needed_mol number of needed molecules + * num_of_mol number of molecule + * needed_mol massive of number of needed molecules + * quiet status of quiet-mode + * true_label_mol massive of true numbers of molecule for atoms */ set_defaults (cell, input, &log, &num_of_mol, output, &quiet, &rad); @@ -68,44 +82,44 @@ int main(int argc, char *argv[]) return 0; } else if ((argv[i][0] == '-') && (argv[i][1] == 'i')) -// input file +// input file { strcpy (input, argv[i+1]); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'c')) -// cell size +// cell size { sscanf (argv[i+1], "%f,%f,%f", &cell[0], &cell[1], &cell[2]); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'o')) -// output file +// output file { strcpy (output, argv[i+1]); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'n')) -// number of molecule +// number of molecule { sscanf (argv[i+1], "%i", &num_of_mol); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'r')) -// radius of environment +// radius of environment { sscanf (argv[i+1], "%f", &rad); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'l')) -// log mode +// log mode { log = 1; strcpy (logfile, argv[i+1]); i++; } else if ((argv[i][0] == '-') && (argv[i][1] == 'q')) -// quiet mode +// quiet mode { quiet = 1; } @@ -127,14 +141,14 @@ int main(int argc, char *argv[]) print_message (quiet, stdout, log, f_log, 2, argv[0]); -// processing -// initial variables +// processing +// initial variables print_message (quiet, stdout, log, f_log, 3, input); f_inp = fopen (input, "r"); if (f_inp == NULL) { print_message (quiet, stderr, log, f_log, 18, input); - return 1; + return 2; } fscanf (f_inp, "%i", &num_atoms); fclose (f_inp); @@ -143,7 +157,7 @@ int main(int argc, char *argv[]) label_mol = (int *) malloc (8 * num_atoms * sizeof (int)); tmp_int = (int *) malloc (8 * num_atoms * sizeof (int)); true_label_mol = (int *) malloc (num_atoms * sizeof (int)); -// error checking +// error checking if ((ch_type_atoms == NULL) || (coords == NULL) || (label_mol == NULL) || @@ -151,7 +165,7 @@ int main(int argc, char *argv[]) (true_label_mol == NULL)) { print_message (quiet, stderr, log, f_log, 19, argv[0]); - return 17; + return 3; } sprintf (tmp_str, "%6cInput file: '%s';\n%6cOutput file: '%s';\n%6cLog: %i;\n\ %6cQuiet: %i;\n%6cCell size: %.4f, %.4f, %.4f;\n%6cSelect molecule: %i;\n\ @@ -161,7 +175,7 @@ int main(int argc, char *argv[]) print_message (quiet, stdout, log, f_log, 6, argv[0]); -// reading coordinates +// reading coordinates print_message (quiet, stdout, log, f_log, 7, input); error = reading_coords (1, input, tmp_int, tmp_int, cell, &num_mol, &num_atoms, true_label_mol, label_mol, tmp_int, coords, ch_type_atoms); @@ -173,15 +187,15 @@ int main(int argc, char *argv[]) ' ', num_mol, ' ', num_atoms); print_message (quiet, stdout, log, f_log, 8, tmp_str); } -// error checking +// error checking if ((centr_coords == NULL) || (needed_mol == NULL)) { print_message (quiet, stderr, log, f_log, 19, argv[0]); - return 17; + return 3; } -// analyze +// analyze if (error == 0) { error = set_center (num_atoms, num_mol, label_mol, coords, centr_coords); @@ -203,7 +217,7 @@ int main(int argc, char *argv[]) print_message (quiet, stdout, log, f_log, 13, argv[0]); print_message (quiet, stdout, log, f_log, 15, argv[0]); -// free memory +// free memory free (ch_type_atoms); free (centr_coords); free (coords); diff --git a/envir/src/messages.c b/envir/src/messages.c index f4560f3..58c8795 100644 --- a/envir/src/messages.c +++ b/envir/src/messages.c @@ -1,16 +1,27 @@ -/* Library for printing messages at output - * - * Usage: - * message (log, mode, text, output) +/** + * @file */ #include #include +/** + * @fn message + */ int message (const int log, const int mode, const char *text, FILE *output) -/* mode - number of message - * text - additional text +/** + * @brief function that prints messages to output + * @code + * message (log, mode, text, output); + * @endcode + * + * @param log equal to 1 if print to logfile + * @param mode number of message + * @param text additional text + * @param output output file (may be stdout) + * + * @return 0 - exit without errors */ { char out[4096]; @@ -18,6 +29,7 @@ int message (const int log, const int mode, const char *text, FILE *output) if (log == 1) { char time_str[256]; + time_t t = time (NULL); struct tm* aTm = localtime (&t); sprintf (time_str, "[%04d-%02d-%02d %02d:%02d:%02d] [%2i]: ", aTm->tm_year+1900, diff --git a/envir/src/messages.h b/envir/src/messages.h index 4a500fa..6e6ed21 100644 --- a/envir/src/messages.h +++ b/envir/src/messages.h @@ -1,6 +1,14 @@ +/** + * @file + */ + #ifndef MESSAGES_H #define MESSAGES_H +/** + * @fn message + */ + int message (const int, const int, const char *, FILE *); #endif /* MESSAGES_H */ \ No newline at end of file diff --git a/envir/src/print_struct.c b/envir/src/print_struct.c index c1e6487..529698a 100644 --- a/envir/src/print_struct.c +++ b/envir/src/print_struct.c @@ -1,3 +1,7 @@ +/** + * @file + */ + /* Library for printing structure to pdb file * * Usage: @@ -8,23 +12,37 @@ #include +/** + * @fn print_structure + */ int print_structure (const char *output, const int num_needed_mol, const int *needed_mol, const int num_atoms, const int *label_mol, const char *ch_type_atoms, const float *coords) -/* output - output file name - * num_needed_mol - number of needed molecules - * needed_mol - massive of needed molecules - * num_atoms - number of atoms - * label_mol - massive of numbers of molecule for atoms - * ch_type_atoms - massive of char types for atoms - * coords - massive of coordinates +/** + * @brief function that prints structure to pdb file + * @code + * print_structure (output, num_needed_mol, needed_mol, num_atoms, label_mol, + * char_type_atoms, coords); + * @endcode + * + * @param output output file name + * @param num_needed_mol number of needed molecules + * @param needed_mol massive of number of needed molecules + * @param num_atoms number of atoms + * @param label_mol massive of numbers of molecule for atoms + * @param ch_type_atoms massive of char atom types + * @param coords massive of coordinates + * + * @return 0 - exit without errors */ { int cur_atom, cur_atom_num, cur_mol, i, j; FILE *f_out; -/* cur_atom - current atom - * cur_atom_num - true atom number - * cur_mol - current molecule + +/* cur_atom current atom + * cur_atom_num true atom number + * cur_mol current molecule + * f_out output file */ cur_atom = 1; diff --git a/envir/src/print_struct.h b/envir/src/print_struct.h index 075f60d..ad60ea8 100644 --- a/envir/src/print_struct.h +++ b/envir/src/print_struct.h @@ -1,6 +1,14 @@ +/** + * @file + */ + #ifndef PRINT_STRUCTURE_H #define PRINT_STRUCTURE_H +/** + * @fn print_structure + */ + int print_structure (const char *, const int, const int *, const int, const int *, const char *, const float *); diff --git a/envir/src/set_center.c b/envir/src/set_center.c index 32cf861..eed84f0 100644 --- a/envir/src/set_center.c +++ b/envir/src/set_center.c @@ -1,3 +1,7 @@ +/** + * @file + */ + /* Library for search center mass of molecules * * Usage: @@ -6,18 +10,30 @@ */ +/** + * @fn set_center + */ int set_center (const int num_atoms, const int num_mol, const int *label_mol, const float *coords, float *centr_coords) -/* num_atoms - number of atoms for writing coordinates - * num_mol - number of molecules for writing coordinates - * label_mol - massive of numbers of molecule for atoms - * coords - massive of coordinates - * coords - massive of coordinates of center molecules +/** + * @brief function that searchs center mass of molecules + * @code + * set_center (num_of_atoms, num_of_molecules, label_molecules, coords, centr_coords); + * @endcode + * + * @param num_atoms number of atoms + * @param num_mol number of molecules + * @param label_mol massive of numbers of molecule for atoms + * @param coords massive of coordinates + * @param centr_coords massive of centered coordinates + * + * @return 0 - exit without errors */ { int at_in_mol, cur_mol, i, j, k; -/* at_int_mol - number of atoms in molecule - * cur_mol - current molecule + +/* at_int_mol number of atoms in molecule + * cur_mol current molecule */ for (i=0; i<8*num_mol; i++) diff --git a/envir/src/set_center.h b/envir/src/set_center.h index 63a2377..73de6f7 100644 --- a/envir/src/set_center.h +++ b/envir/src/set_center.h @@ -1,6 +1,14 @@ +/** + * @file + */ + #ifndef SET_CENTER_H #define SET_CENTER_H +/** + * @fn set_center + */ + int set_center (const int, const int, const int *, const float *, float *); #endif /* SET_CENTER_H */ \ No newline at end of file diff --git a/statgen/README b/statgen/README index 524d3ea..135a81b 100644 --- a/statgen/README +++ b/statgen/README @@ -1,4 +1,4 @@ -statgen - program for analyze molecular dynamic trajectories +statgen - program that analyzes molecular dynamic trajectories using topological analysis Version: 1.0.1 License: GPL diff --git a/statgen/about.dox b/statgen/about.dox index 9310bbf..f130996 100644 --- a/statgen/about.dox +++ b/statgen/about.dox @@ -1,6 +1,13 @@ -/*! @mainpage statgen +/*! + * @mainpage statgen + * @image latex ./logo.png * * @section intro_sec Introduction + * + * About this program: + *
    + *
  • Program that analyzes molecular dynamic trajectories using topological analysis + *
* * Developer: *