Changeset 299

Show
Ignore:
Timestamp:
03/19/09 15:38:55 (15 years ago)
Author:
smidl
Message:

merger - cull de sac :-(

Files:
6 modified

Legend:

Unmodified
Added
Removed
  • Doxyfile

    r281 r299  
    1 # Doxyfile 1.5.6-KDevelop 
     1# Doxyfile 1.5.8 
     2 
     3# This file describes the settings to be used by the documentation system 
     4# doxygen (www.doxygen.org) for a project 
     5# 
     6# All text after a hash (#) is considered a comment and will be ignored 
     7# The format is: 
     8#       TAG = value [value, ...] 
     9# For lists items can also be appended using: 
     10#       TAG += value [value, ...] 
     11# Values that contain spaces should be placed between quotes (" ") 
    212 
    313#--------------------------------------------------------------------------- 
    414# Project related configuration options 
    515#--------------------------------------------------------------------------- 
     16 
     17# This tag specifies the encoding used for all characters in the config file  
     18# that follow. The default is UTF-8 which is also the encoding used for all  
     19# text before the first occurrence of this tag. Doxygen uses libiconv (or the  
     20# iconv built into libc) for the transcoding. See  
     21# http://www.gnu.org/software/libiconv for the list of possible encodings. 
     22 
    623DOXYFILE_ENCODING      = UTF-8 
     24 
     25# The PROJECT_NAME tag is a single word (or a sequence of words surrounded  
     26# by quotes) that should identify the project. 
     27 
    728PROJECT_NAME           = mixpp 
     29 
     30# The PROJECT_NUMBER tag can be used to enter a project or revision number.  
     31# This could be handy for archiving the generated documentation or  
     32# if some version control system is used. 
     33 
    834PROJECT_NUMBER         = 1 
     35 
     36# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)  
     37# base path where the generated documentation will be put.  
     38# If a relative path is entered, it will be relative to the location  
     39# where doxygen was started. If left blank the current directory will be used. 
     40 
    941OUTPUT_DIRECTORY       = ./doc 
     42 
     43# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create  
     44# 4096 sub-directories (in 2 levels) under the output directory of each output  
     45# format and will distribute the generated files over these directories.  
     46# Enabling this option can be useful when feeding doxygen a huge amount of  
     47# source files, where putting all generated files in the same directory would  
     48# otherwise cause performance problems for the file system. 
     49 
    1050CREATE_SUBDIRS         = NO 
     51 
     52# The OUTPUT_LANGUAGE tag is used to specify the language in which all  
     53# documentation generated by doxygen is written. Doxygen will use this  
     54# information to generate all constant output in the proper language.  
     55# The default language is English, other supported languages are:  
     56# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,  
     57# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,  
     58# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),  
     59# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,  
     60# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,  
     61# Spanish, Swedish, and Ukrainian. 
     62 
    1163OUTPUT_LANGUAGE        = English 
     64 
     65# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will  
     66# include brief member descriptions after the members that are listed in  
     67# the file and class documentation (similar to JavaDoc).  
     68# Set to NO to disable this. 
     69 
    1270BRIEF_MEMBER_DESC      = YES 
     71 
     72# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend  
     73# the brief description of a member or function before the detailed description.  
     74# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the  
     75# brief descriptions will be completely suppressed. 
     76 
    1377REPEAT_BRIEF           = YES 
     78 
     79# This tag implements a quasi-intelligent brief description abbreviator  
     80# that is used to form the text in various listings. Each string  
     81# in this list, if found as the leading text of the brief description, will be  
     82# stripped from the text and the result after processing the whole list, is  
     83# used as the annotated text. Otherwise, the brief description is used as-is.  
     84# If left blank, the following values are used ("$name" is automatically  
     85# replaced with the name of the entity): "The $name class" "The $name widget"  
     86# "The $name file" "is" "provides" "specifies" "contains"  
     87# "represents" "a" "an" "the" 
     88 
    1489ABBREVIATE_BRIEF       = "The $name class" \ 
    1590                         "The $name widget" \ 
     
    2398                         an \ 
    2499                         the 
     100 
     101# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then  
     102# Doxygen will generate a detailed section even if there is only a brief  
     103# description. 
     104 
    25105ALWAYS_DETAILED_SEC    = NO 
     106 
     107# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all  
     108# inherited members of a class in the documentation of that class as if those  
     109# members were ordinary class members. Constructors, destructors and assignment  
     110# operators of the base classes will not be shown. 
     111 
    26112INLINE_INHERITED_MEMB  = YES 
     113 
     114# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full  
     115# path before files name in the file list and in the header files. If set  
     116# to NO the shortest path that makes the file name unique will be used. 
     117 
    27118FULL_PATH_NAMES        = NO 
     119 
     120# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag  
     121# can be used to strip a user-defined part of the path. Stripping is  
     122# only done if one of the specified strings matches the left-hand part of  
     123# the path. The tag can be used to show relative paths in the file list.  
     124# If left blank the directory from which doxygen is run is used as the  
     125# path to strip. 
     126 
    28127STRIP_FROM_PATH        = /home/smidl/ 
     128 
     129# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of  
     130# the path mentioned in the documentation of a class, which tells  
     131# the reader which header file to include in order to use a class.  
     132# If left blank only the name of the header file containing the class  
     133# definition is used. Otherwise one should specify the include paths that  
     134# are normally passed to the compiler using the -I flag. 
     135 
    29136STRIP_FROM_INC_PATH    =  
     137 
     138# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter  
     139# (but less readable) file names. This can be useful is your file systems  
     140# doesn't support long names like on DOS, Mac, or CD-ROM. 
     141 
    30142SHORT_NAMES            = NO 
     143 
     144# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen  
     145# will interpret the first line (until the first dot) of a JavaDoc-style  
     146# comment as the brief description. If set to NO, the JavaDoc  
     147# comments will behave just like regular Qt-style comments  
     148# (thus requiring an explicit @brief command for a brief description.) 
     149 
    31150JAVADOC_AUTOBRIEF      = NO 
     151 
     152# If the QT_AUTOBRIEF tag is set to YES then Doxygen will  
     153# interpret the first line (until the first dot) of a Qt-style  
     154# comment as the brief description. If set to NO, the comments  
     155# will behave just like regular Qt-style comments (thus requiring  
     156# an explicit \brief command for a brief description.) 
     157 
    32158QT_AUTOBRIEF           = NO 
     159 
     160# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen  
     161# treat a multi-line C++ special comment block (i.e. a block of //! or ///  
     162# comments) as a brief description. This used to be the default behaviour.  
     163# The new default is to treat a multi-line C++ comment block as a detailed  
     164# description. Set this tag to YES if you prefer the old behaviour instead. 
     165 
    33166MULTILINE_CPP_IS_BRIEF = NO 
    34 DETAILS_AT_TOP         = YES 
     167 
     168# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented  
     169# member inherits the documentation from any documented member that it  
     170# re-implements. 
     171 
    35172INHERIT_DOCS           = YES 
     173 
     174# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce  
     175# a new page for each member. If set to NO, the documentation of a member will  
     176# be part of the file/class/namespace that contains it. 
     177 
    36178SEPARATE_MEMBER_PAGES  = NO 
     179 
     180# The TAB_SIZE tag can be used to set the number of spaces in a tab.  
     181# Doxygen uses this value to replace tabs by spaces in code fragments. 
     182 
    37183TAB_SIZE               = 8 
     184 
     185# This tag can be used to specify a number of aliases that acts  
     186# as commands in the documentation. An alias has the form "name=value".  
     187# For example adding "sideeffect=\par Side Effects:\n" will allow you to  
     188# put the command \sideeffect (or @sideeffect) in the documentation, which  
     189# will result in a user-defined paragraph with heading "Side Effects:".  
     190# You can put \n's in the value part of an alias to insert newlines. 
     191 
    38192ALIASES                =  
     193 
     194# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C  
     195# sources only. Doxygen will then generate output that is more tailored for C.  
     196# For instance, some of the names that are used will be different. The list  
     197# of all members will be omitted, etc. 
     198 
    39199OPTIMIZE_OUTPUT_FOR_C  = NO 
     200 
     201# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java  
     202# sources only. Doxygen will then generate output that is more tailored for  
     203# Java. For instance, namespaces will be presented as packages, qualified  
     204# scopes will look different, etc. 
     205 
    40206OPTIMIZE_OUTPUT_JAVA   = NO 
     207 
     208# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran  
     209# sources only. Doxygen will then generate output that is more tailored for  
     210# Fortran. 
     211 
    41212OPTIMIZE_FOR_FORTRAN   = NO 
     213 
     214# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL  
     215# sources. Doxygen will then generate output that is tailored for  
     216# VHDL. 
     217 
    42218OPTIMIZE_OUTPUT_VHDL   = NO 
     219 
     220# Doxygen selects the parser to use depending on the extension of the files it parses.  
     221# With this tag you can assign which parser to use for a given extension.  
     222# Doxygen has a built-in mapping, but you can override or extend it using this tag.  
     223# The format is ext=language, where ext is a file extension, and language is one of  
     224# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,  
     225# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat  
     226# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),  
     227# use: inc=Fortran f=C 
     228 
     229EXTENSION_MAPPING      =  
     230 
     231# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want  
     232# to include (a tag file for) the STL sources as input, then you should  
     233# set this tag to YES in order to let doxygen match functions declarations and  
     234# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.  
     235# func(std::string) {}). This also make the inheritance and collaboration  
     236# diagrams that involve STL classes more complete and accurate. 
     237 
    43238BUILTIN_STL_SUPPORT    = NO 
     239 
     240# If you use Microsoft's C++/CLI language, you should set this option to YES to  
     241# enable parsing support. 
     242 
    44243CPP_CLI_SUPPORT        = NO 
     244 
     245# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.  
     246# Doxygen will parse them like normal C++ but will assume all classes use public  
     247# instead of private inheritance when no explicit protection keyword is present. 
     248 
    45249SIP_SUPPORT            = NO 
     250 
     251# For Microsoft's IDL there are propget and propput attributes to indicate getter  
     252# and setter methods for a property. Setting this option to YES (the default)  
     253# will make doxygen to replace the get and set methods by a property in the  
     254# documentation. This will only work if the methods are indeed getting or  
     255# setting a simple type. If this is not the case, or you want to show the  
     256# methods anyway, you should set this option to NO. 
     257 
    46258IDL_PROPERTY_SUPPORT   = YES 
     259 
     260# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC  
     261# tag is set to YES, then doxygen will reuse the documentation of the first  
     262# member in the group (if any) for the other members of the group. By default  
     263# all members of a group must be documented explicitly. 
     264 
    47265DISTRIBUTE_GROUP_DOC   = NO 
     266 
     267# Set the SUBGROUPING tag to YES (the default) to allow class member groups of  
     268# the same type (for instance a group of public functions) to be put as a  
     269# subgroup of that type (e.g. under the Public Functions section). Set it to  
     270# NO to prevent subgrouping. Alternatively, this can be done per class using  
     271# the \nosubgrouping command. 
     272 
    48273SUBGROUPING            = YES 
     274 
     275# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum  
     276# is documented as struct, union, or enum with the name of the typedef. So  
     277# typedef struct TypeS {} TypeT, will appear in the documentation as a struct  
     278# with name TypeT. When disabled the typedef will appear as a member of a file,  
     279# namespace, or class. And the struct will be named TypeS. This can typically  
     280# be useful for C code in case the coding convention dictates that all compound  
     281# types are typedef'ed and only the typedef is referenced, never the tag name. 
     282 
    49283TYPEDEF_HIDES_STRUCT   = NO 
     284 
     285# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to  
     286# determine which symbols to keep in memory and which to flush to disk.  
     287# When the cache is full, less often used symbols will be written to disk.  
     288# For small to medium size projects (<1000 input files) the default value is  
     289# probably good enough. For larger projects a too small cache size can cause  
     290# doxygen to be busy swapping symbols to and from disk most of the time  
     291# causing a significant performance penality.  
     292# If the system has enough physical memory increasing the cache will improve the  
     293# performance by keeping more symbols in memory. Note that the value works on  
     294# a logarithmic scale so increasing the size by one will rougly double the  
     295# memory usage. The cache size is given by this formula:  
     296# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,  
     297# corresponding to a cache size of 2^16 = 65536 symbols 
     298 
    50299SYMBOL_CACHE_SIZE      = 0 
     300 
    51301#--------------------------------------------------------------------------- 
    52302# Build related configuration options 
    53303#--------------------------------------------------------------------------- 
     304 
     305# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in  
     306# documentation are documented, even if no documentation was available.  
     307# Private class members and static file members will be hidden unless  
     308# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 
     309 
    54310EXTRACT_ALL            = NO 
     311 
     312# If the EXTRACT_PRIVATE tag is set to YES all private members of a class  
     313# will be included in the documentation. 
     314 
    55315EXTRACT_PRIVATE        = NO 
     316 
     317# If the EXTRACT_STATIC tag is set to YES all static members of a file  
     318# will be included in the documentation. 
     319 
    56320EXTRACT_STATIC         = NO 
     321 
     322# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)  
     323# defined locally in source files will be included in the documentation.  
     324# If set to NO only classes defined in header files are included. 
     325 
    57326EXTRACT_LOCAL_CLASSES  = YES 
     327 
     328# This flag is only useful for Objective-C code. When set to YES local  
     329# methods, which are defined in the implementation section but not in  
     330# the interface are included in the documentation.  
     331# If set to NO (the default) only methods in the interface are included. 
     332 
    58333EXTRACT_LOCAL_METHODS  = NO 
     334 
     335# If this flag is set to YES, the members of anonymous namespaces will be  
     336# extracted and appear in the documentation as a namespace called  
     337# 'anonymous_namespace{file}', where file will be replaced with the base  
     338# name of the file that contains the anonymous namespace. By default  
     339# anonymous namespace are hidden. 
     340 
    59341EXTRACT_ANON_NSPACES   = NO 
     342 
     343# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all  
     344# undocumented members of documented classes, files or namespaces.  
     345# If set to NO (the default) these members will be included in the  
     346# various overviews, but no documentation section is generated.  
     347# This option has no effect if EXTRACT_ALL is enabled. 
     348 
    60349HIDE_UNDOC_MEMBERS     = NO 
     350 
     351# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all  
     352# undocumented classes that are normally visible in the class hierarchy.  
     353# If set to NO (the default) these classes will be included in the various  
     354# overviews. This option has no effect if EXTRACT_ALL is enabled. 
     355 
    61356HIDE_UNDOC_CLASSES     = NO 
     357 
     358# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all  
     359# friend (class|struct|union) declarations.  
     360# If set to NO (the default) these declarations will be included in the  
     361# documentation. 
     362 
    62363HIDE_FRIEND_COMPOUNDS  = NO 
     364 
     365# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any  
     366# documentation blocks found inside the body of a function.  
     367# If set to NO (the default) these blocks will be appended to the  
     368# function's detailed documentation block. 
     369 
    63370HIDE_IN_BODY_DOCS      = NO 
     371 
     372# The INTERNAL_DOCS tag determines if documentation  
     373# that is typed after a \internal command is included. If the tag is set  
     374# to NO (the default) then the documentation will be excluded.  
     375# Set it to YES to include the internal documentation. 
     376 
    64377INTERNAL_DOCS          = NO 
     378 
     379# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate  
     380# file names in lower-case letters. If set to YES upper-case letters are also  
     381# allowed. This is useful if you have classes or files whose names only differ  
     382# in case and if your file system supports case sensitive file names. Windows  
     383# and Mac users are advised to set this option to NO. 
     384 
    65385CASE_SENSE_NAMES       = YES 
     386 
     387# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen  
     388# will show members with their full class and namespace scopes in the  
     389# documentation. If set to YES the scope will be hidden. 
     390 
    66391HIDE_SCOPE_NAMES       = NO 
     392 
     393# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen  
     394# will put a list of the files that are included by a file in the documentation  
     395# of that file. 
     396 
    67397SHOW_INCLUDE_FILES     = YES 
     398 
     399# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]  
     400# is inserted in the documentation for inline members. 
     401 
    68402INLINE_INFO            = YES 
     403 
     404# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen  
     405# will sort the (detailed) documentation of file and class members  
     406# alphabetically by member name. If set to NO the members will appear in  
     407# declaration order. 
     408 
    69409SORT_MEMBER_DOCS       = YES 
     410 
     411# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the  
     412# brief documentation of file, namespace and class members alphabetically  
     413# by member name. If set to NO (the default) the members will appear in  
     414# declaration order. 
     415 
    70416SORT_BRIEF_DOCS        = NO 
     417 
     418# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the  
     419# hierarchy of group names into alphabetical order. If set to NO (the default)  
     420# the group names will appear in their defined order. 
     421 
    71422SORT_GROUP_NAMES       = NO 
     423 
     424# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be  
     425# sorted by fully-qualified names, including namespaces. If set to  
     426# NO (the default), the class list will be sorted only by class name,  
     427# not including the namespace part.  
     428# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.  
     429# Note: This option applies only to the class list, not to the  
     430# alphabetical list. 
     431 
    72432SORT_BY_SCOPE_NAME     = NO 
     433 
     434# The GENERATE_TODOLIST tag can be used to enable (YES) or  
     435# disable (NO) the todo list. This list is created by putting \todo  
     436# commands in the documentation. 
     437 
    73438GENERATE_TODOLIST      = YES 
     439 
     440# The GENERATE_TESTLIST tag can be used to enable (YES) or  
     441# disable (NO) the test list. This list is created by putting \test  
     442# commands in the documentation. 
     443 
    74444GENERATE_TESTLIST      = YES 
     445 
     446# The GENERATE_BUGLIST tag can be used to enable (YES) or  
     447# disable (NO) the bug list. This list is created by putting \bug  
     448# commands in the documentation. 
     449 
    75450GENERATE_BUGLIST       = YES 
     451 
     452# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or  
     453# disable (NO) the deprecated list. This list is created by putting  
     454# \deprecated commands in the documentation. 
     455 
    76456GENERATE_DEPRECATEDLIST= YES 
     457 
     458# The ENABLED_SECTIONS tag can be used to enable conditional  
     459# documentation sections, marked by \if sectionname ... \endif. 
     460 
    77461ENABLED_SECTIONS       =  
     462 
     463# The MAX_INITIALIZER_LINES tag determines the maximum number of lines  
     464# the initial value of a variable or define consists of for it to appear in  
     465# the documentation. If the initializer consists of more lines than specified  
     466# here it will be hidden. Use a value of 0 to hide initializers completely.  
     467# The appearance of the initializer of individual variables and defines in the  
     468# documentation can be controlled using \showinitializer or \hideinitializer  
     469# command in the documentation regardless of this setting. 
     470 
    78471MAX_INITIALIZER_LINES  = 30 
     472 
     473# Set the SHOW_USED_FILES tag to NO to disable the list of files generated  
     474# at the bottom of the documentation of classes and structs. If set to YES the  
     475# list will mention the files that were used to generate the documentation. 
     476 
    79477SHOW_USED_FILES        = YES 
     478 
     479# If the sources in your project are distributed over multiple directories  
     480# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy  
     481# in the documentation. The default is NO. 
     482 
    80483SHOW_DIRECTORIES       = NO 
     484 
     485# Set the SHOW_FILES tag to NO to disable the generation of the Files page.  
     486# This will remove the Files entry from the Quick Index and from the  
     487# Folder Tree View (if specified). The default is YES. 
     488 
    81489SHOW_FILES             = YES 
     490 
     491# Set the SHOW_NAMESPACES tag to NO to disable the generation of the  
     492# Namespaces page.  
     493# This will remove the Namespaces entry from the Quick Index  
     494# and from the Folder Tree View (if specified). The default is YES. 
     495 
    82496SHOW_NAMESPACES        = NO 
     497 
     498# The FILE_VERSION_FILTER tag can be used to specify a program or script that  
     499# doxygen should invoke to get the current version for each file (typically from  
     500# the version control system). Doxygen will invoke the program by executing (via  
     501# popen()) the command <command> <input-file>, where <command> is the value of  
     502# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file  
     503# provided by doxygen. Whatever the program writes to standard output  
     504# is used as the file version. See the manual for examples. 
     505 
    83506FILE_VERSION_FILTER    =  
     507 
     508# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by  
     509# doxygen. The layout file controls the global structure of the generated output files  
     510# in an output format independent way. The create the layout file that represents  
     511# doxygen's defaults, run doxygen with the -l option. You can optionally specify a  
     512# file name after the option, if omitted DoxygenLayout.xml will be used as the name  
     513# of the layout file. 
     514 
     515LAYOUT_FILE            =  
     516 
    84517#--------------------------------------------------------------------------- 
    85518# configuration options related to warning and progress messages 
    86519#--------------------------------------------------------------------------- 
     520 
     521# The QUIET tag can be used to turn on/off the messages that are generated  
     522# by doxygen. Possible values are YES and NO. If left blank NO is used. 
     523 
    87524QUIET                  = NO 
     525 
     526# The WARNINGS tag can be used to turn on/off the warning messages that are  
     527# generated by doxygen. Possible values are YES and NO. If left blank  
     528# NO is used. 
     529 
    88530WARNINGS               = YES 
     531 
     532# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings  
     533# for undocumented members. If EXTRACT_ALL is set to YES then this flag will  
     534# automatically be disabled. 
     535 
    89536WARN_IF_UNDOCUMENTED   = YES 
     537 
     538# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for  
     539# potential errors in the documentation, such as not documenting some  
     540# parameters in a documented function, or documenting parameters that  
     541# don't exist or using markup commands wrongly. 
     542 
    90543WARN_IF_DOC_ERROR      = YES 
     544 
     545# This WARN_NO_PARAMDOC option can be abled to get warnings for  
     546# functions that are documented, but have no documentation for their parameters  
     547# or return value. If set to NO (the default) doxygen will only warn about  
     548# wrong or incomplete parameter documentation, but not about the absence of  
     549# documentation. 
     550 
    91551WARN_NO_PARAMDOC       = NO 
     552 
     553# The WARN_FORMAT tag determines the format of the warning messages that  
     554# doxygen can produce. The string should contain the $file, $line, and $text  
     555# tags, which will be replaced by the file and line number from which the  
     556# warning originated and the warning text. Optionally the format may contain  
     557# $version, which will be replaced by the version of the file (if it could  
     558# be obtained via FILE_VERSION_FILTER) 
     559 
    92560WARN_FORMAT            = "$file:$line: $text" 
     561 
     562# The WARN_LOGFILE tag can be used to specify a file to which warning  
     563# and error messages should be written. If left blank the output is written  
     564# to stderr. 
     565 
    93566WARN_LOGFILE           =  
     567 
    94568#--------------------------------------------------------------------------- 
    95569# configuration options related to the input files 
    96570#--------------------------------------------------------------------------- 
     571 
     572# The INPUT tag can be used to specify the files and/or directories that contain  
     573# documented source files. You may enter file names like "myfile.cpp" or  
     574# directories like "/usr/src/myproject". Separate the files or directories  
     575# with spaces. 
     576 
    97577INPUT                  = . 
     578 
     579# This tag can be used to specify the character encoding of the source files  
     580# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is  
     581# also the default input encoding. Doxygen uses libiconv (or the iconv built  
     582# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for  
     583# the list of possible encodings. 
     584 
    98585INPUT_ENCODING         = UTF-8 
     586 
     587# If the value of the INPUT tag contains directories, you can use the  
     588# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp  
     589# and *.h) to filter out the source-files in the directories. If left  
     590# blank the following patterns are tested:  
     591# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx  
     592# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 
     593 
    99594FILE_PATTERNS          = *.c \ 
    100595                         *.cc \ 
     
    108603                         *.m \ 
    109604                         *.doc 
     605 
     606# The RECURSIVE tag can be used to turn specify whether or not subdirectories  
     607# should be searched for input files as well. Possible values are YES and NO.  
     608# If left blank NO is used. 
     609 
    110610RECURSIVE              = YES 
     611 
     612# The EXCLUDE tag can be used to specify files and/or directories that should  
     613# excluded from the INPUT source files. This way you can easily exclude a  
     614# subdirectory from a directory tree whose root is specified with the INPUT tag. 
     615 
    111616EXCLUDE                = win32 \ 
    112617                         linux \ 
     
    114619                         doprava \ 
    115620                         bdm/libconfig 
     621 
     622# The EXCLUDE_SYMLINKS tag can be used select whether or not files or  
     623# directories that are symbolic links (a Unix filesystem feature) are excluded  
     624# from the input. 
     625 
    116626EXCLUDE_SYMLINKS       = NO 
     627 
     628# If the value of the INPUT tag contains directories, you can use the  
     629# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude  
     630# certain files from those directories. Note that the wildcards are matched  
     631# against the file with absolute path, so to exclude all test directories  
     632# for example use the pattern */test/* 
     633 
    117634EXCLUDE_PATTERNS       =  
     635 
     636# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names  
     637# (namespaces, classes, functions, etc.) that should be excluded from the  
     638# output. The symbol name can be a fully qualified name, a word, or if the  
     639# wildcard * is used, a substring. Examples: ANamespace, AClass,  
     640# AClass::ANamespace, ANamespace::*Test 
     641 
    118642EXCLUDE_SYMBOLS        =  
     643 
     644# The EXAMPLE_PATH tag can be used to specify one or more files or  
     645# directories that contain example code fragments that are included (see  
     646# the \include command). 
     647 
    119648EXAMPLE_PATH           = ./doc/tutorial/src \ 
    120649                         ./tests \ 
     
    122651                         ./library/tutorial \ 
    123652                         ./library/mex 
     653 
     654# If the value of the EXAMPLE_PATH tag contains directories, you can use the  
     655# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp  
     656# and *.h) to filter out the source-files in the directories. If left  
     657# blank all files are included. 
     658 
    124659EXAMPLE_PATTERNS       = * 
     660 
     661# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be  
     662# searched for input files to be used with the \include or \dontinclude  
     663# commands irrespective of the value of the RECURSIVE tag.  
     664# Possible values are YES and NO. If left blank NO is used. 
     665 
    125666EXAMPLE_RECURSIVE      = NO 
     667 
     668# The IMAGE_PATH tag can be used to specify one or more files or  
     669# directories that contain image that are included in the documentation (see  
     670# the \image command). 
     671 
    126672IMAGE_PATH             = ./doc/images 
     673 
     674# The INPUT_FILTER tag can be used to specify a program that doxygen should  
     675# invoke to filter for each input file. Doxygen will invoke the filter program  
     676# by executing (via popen()) the command <filter> <input-file>, where <filter>  
     677# is the value of the INPUT_FILTER tag, and <input-file> is the name of an  
     678# input file. Doxygen will then use the output that the filter program writes  
     679# to standard output.  
     680# If FILTER_PATTERNS is specified, this tag will be  
     681# ignored. 
     682 
    127683INPUT_FILTER           =  
     684 
     685# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern  
     686# basis.  
     687# Doxygen will compare the file name with each pattern and apply the  
     688# filter if there is a match.  
     689# The filters are a list of the form:  
     690# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further  
     691# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER  
     692# is applied to all files. 
     693 
    128694FILTER_PATTERNS        =  
     695 
     696# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using  
     697# INPUT_FILTER) will be used to filter the input files when producing source  
     698# files to browse (i.e. when SOURCE_BROWSER is set to YES). 
     699 
    129700FILTER_SOURCE_FILES    = NO 
     701 
    130702#--------------------------------------------------------------------------- 
    131703# configuration options related to source browsing 
    132704#--------------------------------------------------------------------------- 
     705 
     706# If the SOURCE_BROWSER tag is set to YES then a list of source files will  
     707# be generated. Documented entities will be cross-referenced with these sources.  
     708# Note: To get rid of all source code in the generated output, make sure also  
     709# VERBATIM_HEADERS is set to NO. 
     710 
    133711SOURCE_BROWSER         = NO 
     712 
     713# Setting the INLINE_SOURCES tag to YES will include the body  
     714# of functions and classes directly in the documentation. 
     715 
    134716INLINE_SOURCES         = NO 
     717 
     718# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct  
     719# doxygen to hide any special comment blocks from generated source code  
     720# fragments. Normal C and C++ comments will always remain visible. 
     721 
    135722STRIP_CODE_COMMENTS    = YES 
     723 
     724# If the REFERENCED_BY_RELATION tag is set to YES  
     725# then for each documented function all documented  
     726# functions referencing it will be listed. 
     727 
    136728REFERENCED_BY_RELATION = YES 
     729 
     730# If the REFERENCES_RELATION tag is set to YES  
     731# then for each documented function all documented entities  
     732# called/used by that function will be listed. 
     733 
    137734REFERENCES_RELATION    = YES 
     735 
     736# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)  
     737# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from  
     738# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will  
     739# link to the source code.  
     740# Otherwise they will link to the documentation. 
     741 
    138742REFERENCES_LINK_SOURCE = YES 
     743 
     744# If the USE_HTAGS tag is set to YES then the references to source code  
     745# will point to the HTML generated by the htags(1) tool instead of doxygen  
     746# built-in source browser. The htags tool is part of GNU's global source  
     747# tagging system (see http://www.gnu.org/software/global/global.html). You  
     748# will need version 4.8.6 or higher. 
     749 
    139750USE_HTAGS              = NO 
     751 
     752# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen  
     753# will generate a verbatim copy of the header file for each class for  
     754# which an include is specified. Set to NO to disable this. 
     755 
    140756VERBATIM_HEADERS       = YES 
     757 
    141758#--------------------------------------------------------------------------- 
    142759# configuration options related to the alphabetical class index 
    143760#--------------------------------------------------------------------------- 
     761 
     762# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index  
     763# of all compounds will be generated. Enable this if the project  
     764# contains a lot of classes, structs, unions or interfaces. 
     765 
    144766ALPHABETICAL_INDEX     = YES 
     767 
     768# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then  
     769# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns  
     770# in which this list will be split (can be a number in the range [1..20]) 
     771 
    145772COLS_IN_ALPHA_INDEX    = 5 
     773 
     774# In case all classes in a project start with a common prefix, all  
     775# classes will be put under the same header in the alphabetical index.  
     776# The IGNORE_PREFIX tag can be used to specify one or more prefixes that  
     777# should be ignored while generating the index headers. 
     778 
    146779IGNORE_PREFIX          =  
     780 
    147781#--------------------------------------------------------------------------- 
    148782# configuration options related to the HTML output 
    149783#--------------------------------------------------------------------------- 
     784 
     785# If the GENERATE_HTML tag is set to YES (the default) Doxygen will  
     786# generate HTML output. 
     787 
    150788GENERATE_HTML          = YES 
     789 
     790# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.  
     791# If a relative path is entered the value of OUTPUT_DIRECTORY will be  
     792# put in front of it. If left blank `html' will be used as the default path. 
     793 
    151794HTML_OUTPUT            = html 
     795 
     796# The HTML_FILE_EXTENSION tag can be used to specify the file extension for  
     797# each generated HTML page (for example: .htm,.php,.asp). If it is left blank  
     798# doxygen will generate files with .html extension. 
     799 
    152800HTML_FILE_EXTENSION    = .html 
     801 
     802# The HTML_HEADER tag can be used to specify a personal HTML header for  
     803# each generated HTML page. If it is left blank doxygen will generate a  
     804# standard header. 
     805 
    153806HTML_HEADER            =  
     807 
     808# The HTML_FOOTER tag can be used to specify a personal HTML footer for  
     809# each generated HTML page. If it is left blank doxygen will generate a  
     810# standard footer. 
     811 
    154812HTML_FOOTER            =  
     813 
     814# The HTML_STYLESHEET tag can be used to specify a user-defined cascading  
     815# style sheet that is used by each HTML page. It can be used to  
     816# fine-tune the look of the HTML output. If the tag is left blank doxygen  
     817# will generate a default style sheet. Note that doxygen will try to copy  
     818# the style sheet file to the HTML output directory, so don't put your own  
     819# stylesheet in the HTML output directory as well, or it will be erased! 
     820 
    155821HTML_STYLESHEET        =  
     822 
     823# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,  
     824# files or namespaces will be aligned in HTML using tables. If set to  
     825# NO a bullet list will be used. 
     826 
    156827HTML_ALIGN_MEMBERS     = YES 
     828 
     829# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML  
     830# documentation will contain sections that can be hidden and shown after the  
     831# page has loaded. For this to work a browser that supports  
     832# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox  
     833# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). 
     834 
     835HTML_DYNAMIC_SECTIONS  = YES 
     836 
     837# If the GENERATE_DOCSET tag is set to YES, additional index files  
     838# will be generated that can be used as input for Apple's Xcode 3  
     839# integrated development environment, introduced with OSX 10.5 (Leopard).  
     840# To create a documentation set, doxygen will generate a Makefile in the  
     841# HTML output directory. Running make will produce the docset in that  
     842# directory and running "make install" will install the docset in  
     843# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find  
     844# it at startup.  
     845# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. 
     846 
     847GENERATE_DOCSET        = NO 
     848 
     849# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the  
     850# feed. A documentation feed provides an umbrella under which multiple  
     851# documentation sets from a single provider (such as a company or product suite)  
     852# can be grouped. 
     853 
     854DOCSET_FEEDNAME        = "Doxygen generated docs" 
     855 
     856# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that  
     857# should uniquely identify the documentation set bundle. This should be a  
     858# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen  
     859# will append .docset to the name. 
     860 
     861DOCSET_BUNDLE_ID       = org.doxygen.Project 
     862 
     863# If the GENERATE_HTMLHELP tag is set to YES, additional index files  
     864# will be generated that can be used as input for tools like the  
     865# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)  
     866# of the generated HTML documentation. 
     867 
    157868GENERATE_HTMLHELP      = NO 
    158 GENERATE_DOCSET        = NO 
    159 DOCSET_FEEDNAME        = "Doxygen generated docs" 
    160 DOCSET_BUNDLE_ID       = org.doxygen.Project 
    161 HTML_DYNAMIC_SECTIONS  = YES 
     869 
     870# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can  
     871# be used to specify the file name of the resulting .chm file. You  
     872# can add a path in front of the file if the result should not be  
     873# written to the html output directory. 
     874 
    162875CHM_FILE               =  
     876 
     877# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can  
     878# be used to specify the location (absolute path including file name) of  
     879# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run  
     880# the HTML help compiler on the generated index.hhp. 
     881 
    163882HHC_LOCATION           =  
    164 QTHELP_FILE            =  
    165 QTHELP_CONFIG          =  
    166 DOXYGEN2QTHELP_LOC     =  
     883 
     884# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag  
     885# controls if a separate .chi index file is generated (YES) or that  
     886# it should be included in the master .chm file (NO). 
     887 
    167888GENERATE_CHI           = NO 
     889 
     890# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING  
     891# is used to encode HtmlHelp index (hhk), content (hhc) and project file  
     892# content. 
     893 
    168894CHM_INDEX_ENCODING     =  
     895 
     896# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag  
     897# controls whether a binary table of contents is generated (YES) or a  
     898# normal table of contents (NO) in the .chm file. 
     899 
    169900BINARY_TOC             = NO 
     901 
     902# The TOC_EXPAND flag can be set to YES to add extra items for group members  
     903# to the contents of the HTML help documentation and to the tree view. 
     904 
    170905TOC_EXPAND             = NO 
     906 
     907# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER  
     908# are set, an additional index file will be generated that can be used as input for  
     909# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated  
     910# HTML documentation. 
     911 
     912GENERATE_QHP           = NO 
     913 
     914# If the QHG_LOCATION tag is specified, the QCH_FILE tag can  
     915# be used to specify the file name of the resulting .qch file.  
     916# The path specified is relative to the HTML output folder. 
     917 
     918QCH_FILE               =  
     919 
     920# The QHP_NAMESPACE tag specifies the namespace to use when generating  
     921# Qt Help Project output. For more information please see  
     922# http://doc.trolltech.com/qthelpproject.html#namespace 
     923 
     924QHP_NAMESPACE          =  
     925 
     926# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating  
     927# Qt Help Project output. For more information please see  
     928# http://doc.trolltech.com/qthelpproject.html#virtual-folders 
     929 
     930QHP_VIRTUAL_FOLDER     = doc 
     931 
     932# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.  
     933# For more information please see  
     934# http://doc.trolltech.com/qthelpproject.html#custom-filters 
     935 
     936QHP_CUST_FILTER_NAME   =  
     937 
     938# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see  
     939# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>. 
     940 
     941QHP_CUST_FILTER_ATTRS  =  
     942 
     943# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's  
     944# filter section matches.  
     945# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>. 
     946 
     947QHP_SECT_FILTER_ATTRS  =  
     948 
     949# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can  
     950# be used to specify the location of Qt's qhelpgenerator.  
     951# If non-empty doxygen will try to run qhelpgenerator on the generated  
     952# .qhp file. 
     953 
     954QHG_LOCATION           =  
     955 
     956# The DISABLE_INDEX tag can be used to turn on/off the condensed index at  
     957# top of each HTML page. The value NO (the default) enables the index and  
     958# the value YES disables it. 
     959 
    171960DISABLE_INDEX          = NO 
     961 
     962# This tag can be used to set the number of enum values (range [1..20])  
     963# that doxygen will group on one line in the generated HTML documentation. 
     964 
    172965ENUM_VALUES_PER_LINE   = 4 
     966 
     967# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index  
     968# structure should be generated to display hierarchical information.  
     969# If the tag value is set to FRAME, a side panel will be generated  
     970# containing a tree-like index structure (just like the one that  
     971# is generated for HTML Help). For this to work a browser that supports  
     972# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,  
     973# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are  
     974# probably better off using the HTML help feature. Other possible values  
     975# for this tag are: HIERARCHIES, which will generate the Groups, Directories,  
     976# and Class Hierarchy pages using a tree view instead of an ordered list;  
     977# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which  
     978# disables this behavior completely. For backwards compatibility with previous  
     979# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE  
     980# respectively. 
     981 
    173982GENERATE_TREEVIEW      = ALL 
     983 
     984# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be  
     985# used to set the initial width (in pixels) of the frame in which the tree  
     986# is shown. 
     987 
    174988TREEVIEW_WIDTH         = 250 
     989 
     990# Use this tag to change the font size of Latex formulas included  
     991# as images in the HTML documentation. The default is 10. Note that  
     992# when you change the font size after a successful doxygen run you need  
     993# to manually remove any form_*.png images from the HTML output directory  
     994# to force them to be regenerated. 
     995 
    175996FORMULA_FONTSIZE       = 11 
     997 
    176998#--------------------------------------------------------------------------- 
    177999# configuration options related to the LaTeX output 
    1781000#--------------------------------------------------------------------------- 
     1001 
     1002# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will  
     1003# generate Latex output. 
     1004 
    1791005GENERATE_LATEX         = NO 
     1006 
     1007# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.  
     1008# If a relative path is entered the value of OUTPUT_DIRECTORY will be  
     1009# put in front of it. If left blank `latex' will be used as the default path. 
     1010 
    1801011LATEX_OUTPUT           = latex 
     1012 
     1013# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be  
     1014# invoked. If left blank `latex' will be used as the default command name. 
     1015 
    1811016LATEX_CMD_NAME         = latex 
     1017 
     1018# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to  
     1019# generate index for LaTeX. If left blank `makeindex' will be used as the  
     1020# default command name. 
     1021 
    1821022MAKEINDEX_CMD_NAME     = makeindex 
     1023 
     1024# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact  
     1025# LaTeX documents. This may be useful for small projects and may help to  
     1026# save some trees in general. 
     1027 
    1831028COMPACT_LATEX          = NO 
     1029 
     1030# The PAPER_TYPE tag can be used to set the paper type that is used  
     1031# by the printer. Possible values are: a4, a4wide, letter, legal and  
     1032# executive. If left blank a4wide will be used. 
     1033 
    1841034PAPER_TYPE             = a4wide 
     1035 
     1036# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX  
     1037# packages that should be included in the LaTeX output. 
     1038 
    1851039EXTRA_PACKAGES         =  
     1040 
     1041# The LATEX_HEADER tag can be used to specify a personal LaTeX header for  
     1042# the generated latex document. The header should contain everything until  
     1043# the first chapter. If it is left blank doxygen will generate a  
     1044# standard header. Notice: only use this tag if you know what you are doing! 
     1045 
    1861046LATEX_HEADER           =  
     1047 
     1048# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated  
     1049# is prepared for conversion to pdf (using ps2pdf). The pdf file will  
     1050# contain links (just like the HTML output) instead of page references  
     1051# This makes the output suitable for online browsing using a pdf viewer. 
     1052 
    1871053PDF_HYPERLINKS         = YES 
     1054 
     1055# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of  
     1056# plain latex in the generated Makefile. Set this option to YES to get a  
     1057# higher quality PDF documentation. 
     1058 
    1881059USE_PDFLATEX           = YES 
     1060 
     1061# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.  
     1062# command to the generated LaTeX files. This will instruct LaTeX to keep  
     1063# running if errors occur, instead of asking the user for help.  
     1064# This option is also used when generating formulas in HTML. 
     1065 
    1891066LATEX_BATCHMODE        = NO 
     1067 
     1068# If LATEX_HIDE_INDICES is set to YES then doxygen will not  
     1069# include the index chapters (such as File Index, Compound Index, etc.)  
     1070# in the output. 
     1071 
    1901072LATEX_HIDE_INDICES     = NO 
     1073 
    1911074#--------------------------------------------------------------------------- 
    1921075# configuration options related to the RTF output 
    1931076#--------------------------------------------------------------------------- 
     1077 
     1078# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output  
     1079# The RTF output is optimized for Word 97 and may not look very pretty with  
     1080# other RTF readers or editors. 
     1081 
    1941082GENERATE_RTF           = NO 
     1083 
     1084# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.  
     1085# If a relative path is entered the value of OUTPUT_DIRECTORY will be  
     1086# put in front of it. If left blank `rtf' will be used as the default path. 
     1087 
    1951088RTF_OUTPUT             = rtf 
     1089 
     1090# If the COMPACT_RTF tag is set to YES Doxygen generates more compact  
     1091# RTF documents. This may be useful for small projects and may help to  
     1092# save some trees in general. 
     1093 
    1961094COMPACT_RTF            = NO 
     1095 
     1096# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated  
     1097# will contain hyperlink fields. The RTF file will  
     1098# contain links (just like the HTML output) instead of page references.  
     1099# This makes the output suitable for online browsing using WORD or other  
     1100# programs which support those fields.  
     1101# Note: wordpad (write) and others do not support links. 
     1102 
    1971103RTF_HYPERLINKS         = NO 
     1104 
     1105# Load stylesheet definitions from file. Syntax is similar to doxygen's  
     1106# config file, i.e. a series of assignments. You only have to provide  
     1107# replacements, missing definitions are set to their default value. 
     1108 
    1981109RTF_STYLESHEET_FILE    =  
     1110 
     1111# Set optional variables used in the generation of an rtf document.  
     1112# Syntax is similar to doxygen's config file. 
     1113 
    1991114RTF_EXTENSIONS_FILE    =  
     1115 
    2001116#--------------------------------------------------------------------------- 
    2011117# configuration options related to the man page output 
    2021118#--------------------------------------------------------------------------- 
     1119 
     1120# If the GENERATE_MAN tag is set to YES (the default) Doxygen will  
     1121# generate man pages 
     1122 
    2031123GENERATE_MAN           = NO 
     1124 
     1125# The MAN_OUTPUT tag is used to specify where the man pages will be put.  
     1126# If a relative path is entered the value of OUTPUT_DIRECTORY will be  
     1127# put in front of it. If left blank `man' will be used as the default path. 
     1128 
    2041129MAN_OUTPUT             = man 
     1130 
     1131# The MAN_EXTENSION tag determines the extension that is added to  
     1132# the generated man pages (default is the subroutine's section .3) 
     1133 
    2051134MAN_EXTENSION          = .3 
     1135 
     1136# If the MAN_LINKS tag is set to YES and Doxygen generates man output,  
     1137# then it will generate one additional man file for each entity  
     1138# documented in the real man page(s). These additional files  
     1139# only source the real man page, but without them the man command  
     1140# would be unable to find the correct page. The default is NO. 
     1141 
    2061142MAN_LINKS              = NO 
     1143 
    2071144#--------------------------------------------------------------------------- 
    2081145# configuration options related to the XML output 
    2091146#--------------------------------------------------------------------------- 
     1147 
     1148# If the GENERATE_XML tag is set to YES Doxygen will  
     1149# generate an XML file that captures the structure of  
     1150# the code including all documentation. 
     1151 
    2101152GENERATE_XML           = NO 
     1153 
     1154# The XML_OUTPUT tag is used to specify where the XML pages will be put.  
     1155# If a relative path is entered the value of OUTPUT_DIRECTORY will be  
     1156# put in front of it. If left blank `xml' will be used as the default path. 
     1157 
    2111158XML_OUTPUT             = xml 
     1159 
     1160# The XML_SCHEMA tag can be used to specify an XML schema,  
     1161# which can be used by a validating XML parser to check the  
     1162# syntax of the XML files. 
     1163 
    2121164XML_SCHEMA             =  
     1165 
     1166# The XML_DTD tag can be used to specify an XML DTD,  
     1167# which can be used by a validating XML parser to check the  
     1168# syntax of the XML files. 
     1169 
    2131170XML_DTD                =  
     1171 
     1172# If the XML_PROGRAMLISTING tag is set to YES Doxygen will  
     1173# dump the program listings (including syntax highlighting  
     1174# and cross-referencing information) to the XML output. Note that  
     1175# enabling this will significantly increase the size of the XML output. 
     1176 
    2141177XML_PROGRAMLISTING     = YES 
     1178 
    2151179#--------------------------------------------------------------------------- 
    2161180# configuration options for the AutoGen Definitions output 
    2171181#--------------------------------------------------------------------------- 
     1182 
     1183# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will  
     1184# generate an AutoGen Definitions (see autogen.sf.net) file  
     1185# that captures the structure of the code including all  
     1186# documentation. Note that this feature is still experimental  
     1187# and incomplete at the moment. 
     1188 
    2181189GENERATE_AUTOGEN_DEF   = NO 
     1190 
    2191191#--------------------------------------------------------------------------- 
    2201192# configuration options related to the Perl module output 
    2211193#--------------------------------------------------------------------------- 
     1194 
     1195# If the GENERATE_PERLMOD tag is set to YES Doxygen will  
     1196# generate a Perl module file that captures the structure of  
     1197# the code including all documentation. Note that this  
     1198# feature is still experimental and incomplete at the  
     1199# moment. 
     1200 
    2221201GENERATE_PERLMOD       = NO 
     1202 
     1203# If the PERLMOD_LATEX tag is set to YES Doxygen will generate  
     1204# the necessary Makefile rules, Perl scripts and LaTeX code to be able  
     1205# to generate PDF and DVI output from the Perl module output. 
     1206 
    2231207PERLMOD_LATEX          = NO 
     1208 
     1209# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be  
     1210# nicely formatted so it can be parsed by a human reader.  
     1211# This is useful  
     1212# if you want to understand what is going on.  
     1213# On the other hand, if this  
     1214# tag is set to NO the size of the Perl module output will be much smaller  
     1215# and Perl will parse it just the same. 
     1216 
    2241217PERLMOD_PRETTY         = YES 
     1218 
     1219# The names of the make variables in the generated doxyrules.make file  
     1220# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.  
     1221# This is useful so different doxyrules.make files included by the same  
     1222# Makefile don't overwrite each other's variables. 
     1223 
    2251224PERLMOD_MAKEVAR_PREFIX =  
     1225 
    2261226#--------------------------------------------------------------------------- 
    2271227# Configuration options related to the preprocessor    
    2281228#--------------------------------------------------------------------------- 
     1229 
     1230# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will  
     1231# evaluate all C-preprocessor directives found in the sources and include  
     1232# files. 
     1233 
    2291234ENABLE_PREPROCESSING   = YES 
     1235 
     1236# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro  
     1237# names in the source code. If set to NO (the default) only conditional  
     1238# compilation will be performed. Macro expansion can be done in a controlled  
     1239# way by setting EXPAND_ONLY_PREDEF to YES. 
     1240 
    2301241MACRO_EXPANSION        = NO 
     1242 
     1243# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES  
     1244# then the macro expansion is limited to the macros specified with the  
     1245# PREDEFINED and EXPAND_AS_DEFINED tags. 
     1246 
    2311247EXPAND_ONLY_PREDEF     = NO 
     1248 
     1249# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files  
     1250# in the INCLUDE_PATH (see below) will be search if a #include is found. 
     1251 
    2321252SEARCH_INCLUDES        = YES 
     1253 
     1254# The INCLUDE_PATH tag can be used to specify one or more directories that  
     1255# contain include files that are not input files but should be processed by  
     1256# the preprocessor. 
     1257 
    2331258INCLUDE_PATH           =  
     1259 
     1260# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard  
     1261# patterns (like *.h and *.hpp) to filter out the header-files in the  
     1262# directories. If left blank, the patterns specified with FILE_PATTERNS will  
     1263# be used. 
     1264 
    2341265INCLUDE_FILE_PATTERNS  =  
     1266 
     1267# The PREDEFINED tag can be used to specify one or more macro names that  
     1268# are defined before the preprocessor is started (similar to the -D option of  
     1269# gcc). The argument of the tag is a list of macros of the form: name  
     1270# or name=definition (no spaces). If the definition and the = are  
     1271# omitted =1 is assumed. To prevent a macro definition from being  
     1272# undefined via #undef or recursively expanded use the := operator  
     1273# instead of the = operator. 
     1274 
    2351275PREDEFINED             =  
     1276 
     1277# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then  
     1278# this tag can be used to specify a list of macro names that should be expanded.  
     1279# The macro definition that is found in the sources will be used.  
     1280# Use the PREDEFINED tag if you want to use a different macro definition. 
     1281 
    2361282EXPAND_AS_DEFINED      =  
     1283 
     1284# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then  
     1285# doxygen's preprocessor will remove all function-like macros that are alone  
     1286# on a line, have an all uppercase name, and do not end with a semicolon. Such  
     1287# function macros are typically used for boiler-plate code, and will confuse  
     1288# the parser if not removed. 
     1289 
    2371290SKIP_FUNCTION_MACROS   = YES 
     1291 
    2381292#--------------------------------------------------------------------------- 
    2391293# Configuration::additions related to external references    
    2401294#--------------------------------------------------------------------------- 
     1295 
     1296# The TAGFILES option can be used to specify one or more tagfiles.  
     1297# Optionally an initial location of the external documentation  
     1298# can be added for each tagfile. The format of a tag file without  
     1299# this location is as follows:  
     1300 
     1301# TAGFILES = file1 file2 ...  
     1302# Adding location for the tag files is done as follows:  
     1303 
     1304# TAGFILES = file1=loc1 "file2 = loc2" ...  
     1305# where "loc1" and "loc2" can be relative or absolute paths or  
     1306# URLs. If a location is present for each tag, the installdox tool  
     1307# does not have to be run to correct the links.  
     1308# Note that each tag file must have a unique name  
     1309# (where the name does NOT include the path)  
     1310# If a tag file is not located in the directory in which doxygen  
     1311# is run, you must also specify the path to the tagfile here. 
     1312 
    2411313TAGFILES               =  
     1314 
     1315# When a file name is specified after GENERATE_TAGFILE, doxygen will create  
     1316# a tag file that is based on the input files it reads. 
     1317 
    2421318GENERATE_TAGFILE       = mixpp.tag 
     1319 
     1320# If the ALLEXTERNALS tag is set to YES all external classes will be listed  
     1321# in the class index. If set to NO only the inherited external classes  
     1322# will be listed. 
     1323 
    2431324ALLEXTERNALS           = NO 
     1325 
     1326# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed  
     1327# in the modules index. If set to NO, only the current project's groups will  
     1328# be listed. 
     1329 
    2441330EXTERNAL_GROUPS        = YES 
     1331 
     1332# The PERL_PATH should be the absolute path and name of the perl script  
     1333# interpreter (i.e. the result of `which perl'). 
     1334 
    2451335PERL_PATH              = /usr/bin/perl 
     1336 
    2461337#--------------------------------------------------------------------------- 
    2471338# Configuration options related to the dot tool    
    2481339#--------------------------------------------------------------------------- 
     1340 
     1341# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will  
     1342# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base  
     1343# or super classes. Setting the tag to NO turns the diagrams off. Note that  
     1344# this option is superseded by the HAVE_DOT option below. This is only a  
     1345# fallback. It is recommended to install and use dot, since it yields more  
     1346# powerful graphs. 
     1347 
    2491348CLASS_DIAGRAMS         = YES 
     1349 
     1350# You can define message sequence charts within doxygen comments using the \msc  
     1351# command. Doxygen will then run the mscgen tool (see  
     1352# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the  
     1353# documentation. The MSCGEN_PATH tag allows you to specify the directory where  
     1354# the mscgen tool resides. If left empty the tool is assumed to be found in the  
     1355# default search path. 
     1356 
    2501357MSCGEN_PATH            =  
     1358 
     1359# If set to YES, the inheritance and collaboration graphs will hide  
     1360# inheritance and usage relations if the target is undocumented  
     1361# or is not a class. 
     1362 
    2511363HIDE_UNDOC_RELATIONS   = YES 
     1364 
     1365# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is  
     1366# available from the path. This tool is part of Graphviz, a graph visualization  
     1367# toolkit from AT&T and Lucent Bell Labs. The other options in this section  
     1368# have no effect if this option is set to NO (the default) 
     1369 
    2521370HAVE_DOT               = YES 
     1371 
     1372# By default doxygen will write a font called FreeSans.ttf to the output  
     1373# directory and reference it in all dot files that doxygen generates. This  
     1374# font does not include all possible unicode characters however, so when you need  
     1375# these (or just want a differently looking font) you can specify the font name  
     1376# using DOT_FONTNAME. You need need to make sure dot is able to find the font,  
     1377# which can be done by putting it in a standard location or by setting the  
     1378# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory  
     1379# containing the font. 
     1380 
    2531381DOT_FONTNAME           = FreeSans 
     1382 
     1383# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.  
     1384# The default size is 10pt. 
     1385 
     1386DOT_FONTSIZE           = 10 
     1387 
     1388# By default doxygen will tell dot to use the output directory to look for the  
     1389# FreeSans.ttf font (which doxygen will put there itself). If you specify a  
     1390# different font using DOT_FONTNAME you can set the path where dot  
     1391# can find it using this tag. 
     1392 
    2541393DOT_FONTPATH           =  
     1394 
     1395# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen  
     1396# will generate a graph for each documented class showing the direct and  
     1397# indirect inheritance relations. Setting this tag to YES will force the  
     1398# the CLASS_DIAGRAMS tag to NO. 
     1399 
    2551400CLASS_GRAPH            = NO 
     1401 
     1402# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen  
     1403# will generate a graph for each documented class showing the direct and  
     1404# indirect implementation dependencies (inheritance, containment, and  
     1405# class references variables) of the class with other documented classes. 
     1406 
    2561407COLLABORATION_GRAPH    = NO 
     1408 
     1409# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen  
     1410# will generate a graph for groups, showing the direct groups dependencies 
     1411 
    2571412GROUP_GRAPHS           = NO 
     1413 
     1414# If the UML_LOOK tag is set to YES doxygen will generate inheritance and  
     1415# collaboration diagrams in a style similar to the OMG's Unified Modeling  
     1416# Language. 
     1417 
    2581418UML_LOOK               = NO 
     1419 
     1420# If set to YES, the inheritance and collaboration graphs will show the  
     1421# relations between templates and their instances. 
     1422 
    2591423TEMPLATE_RELATIONS     = NO 
     1424 
     1425# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT  
     1426# tags are set to YES then doxygen will generate a graph for each documented  
     1427# file showing the direct and indirect include dependencies of the file with  
     1428# other documented files. 
     1429 
    2601430INCLUDE_GRAPH          = NO 
     1431 
     1432# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and  
     1433# HAVE_DOT tags are set to YES then doxygen will generate a graph for each  
     1434# documented header file showing the documented files that directly or  
     1435# indirectly include this file. 
     1436 
    2611437INCLUDED_BY_GRAPH      = NO 
     1438 
     1439# If the CALL_GRAPH and HAVE_DOT options are set to YES then  
     1440# doxygen will generate a call dependency graph for every global function  
     1441# or class method. Note that enabling this option will significantly increase  
     1442# the time of a run. So in most cases it will be better to enable call graphs  
     1443# for selected functions only using the \callgraph command. 
     1444 
    2621445CALL_GRAPH             = NO 
     1446 
     1447# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then  
     1448# doxygen will generate a caller dependency graph for every global function  
     1449# or class method. Note that enabling this option will significantly increase  
     1450# the time of a run. So in most cases it will be better to enable caller  
     1451# graphs for selected functions only using the \callergraph command. 
     1452 
    2631453CALLER_GRAPH           = NO 
     1454 
     1455# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen  
     1456# will graphical hierarchy of all classes instead of a textual one. 
     1457 
    2641458GRAPHICAL_HIERARCHY    = YES 
     1459 
     1460# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES  
     1461# then doxygen will show the dependencies a directory has on other directories  
     1462# in a graphical way. The dependency relations are determined by the #include  
     1463# relations between the files in the directories. 
     1464 
    2651465DIRECTORY_GRAPH        = YES 
     1466 
     1467# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images  
     1468# generated by dot. Possible values are png, jpg, or gif  
     1469# If left blank png will be used. 
     1470 
    2661471DOT_IMAGE_FORMAT       = png 
     1472 
     1473# The tag DOT_PATH can be used to specify the path where the dot tool can be  
     1474# found. If left blank, it is assumed the dot tool can be found in the path. 
     1475 
    2671476DOT_PATH               =  
     1477 
     1478# The DOTFILE_DIRS tag can be used to specify one or more directories that  
     1479# contain dot files that are included in the documentation (see the  
     1480# \dotfile command). 
     1481 
    2681482DOTFILE_DIRS           =  
     1483 
     1484# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of  
     1485# nodes that will be shown in the graph. If the number of nodes in a graph  
     1486# becomes larger than this value, doxygen will truncate the graph, which is  
     1487# visualized by representing a node as a red box. Note that doxygen if the  
     1488# number of direct children of the root node in a graph is already larger than  
     1489# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note  
     1490# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 
     1491 
    2691492DOT_GRAPH_MAX_NODES    = 50 
     1493 
     1494# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the  
     1495# graphs generated by dot. A depth value of 3 means that only nodes reachable  
     1496# from the root by following a path via at most 3 edges will be shown. Nodes  
     1497# that lay further from the root node will be omitted. Note that setting this  
     1498# option to 1 or 2 may greatly reduce the computation time needed for large  
     1499# code bases. Also note that the size of a graph can be further restricted by  
     1500# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. 
     1501 
    2701502MAX_DOT_GRAPH_DEPTH    = 1000 
     1503 
     1504# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent  
     1505# background. This is disabled by default, because dot on Windows does not  
     1506# seem to support this out of the box. Warning: Depending on the platform used,  
     1507# enabling this option may lead to badly anti-aliased labels on the edges of  
     1508# a graph (i.e. they become hard to read). 
     1509 
    2711510DOT_TRANSPARENT        = NO 
     1511 
     1512# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output  
     1513# files in one run (i.e. multiple -o and -T options on the command line). This  
     1514# makes dot run faster, but since only newer versions of dot (>1.8.10)  
     1515# support this, this feature is disabled by default. 
     1516 
    2721517DOT_MULTI_TARGETS      = NO 
     1518 
     1519# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will  
     1520# generate a legend page explaining the meaning of the various boxes and  
     1521# arrows in the dot generated graphs. 
     1522 
    2731523GENERATE_LEGEND        = YES 
     1524 
     1525# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will  
     1526# remove the intermediate dot files that are used to generate  
     1527# the various graphs. 
     1528 
    2741529DOT_CLEANUP            = NO 
    275 #--------------------------------------------------------------------------- 
    276 # Configuration::additions related to the search engine    
    277 #--------------------------------------------------------------------------- 
     1530 
     1531#--------------------------------------------------------------------------- 
     1532# Options related to the search engine 
     1533#--------------------------------------------------------------------------- 
     1534 
     1535# The SEARCHENGINE tag specifies whether or not a search engine should be  
     1536# used. If set to NO the values of all tags below this one will be ignored. 
     1537 
    2781538SEARCHENGINE           = NO 
  • bdm/estim/merger.cpp

    r286 r299  
    33#include "arx.h" 
    44 
    5 namespace bdm{ 
    6 vec merger::lognorm_merge ( mat &lW ) { 
    7         int nu=lW.rows(); 
    8         vec mu = sum ( lW ) /nu; //mean of logs 
    9         // vec lam = sum ( pow ( lW,2 ) )-nu*pow ( mu,2 ); ======= numerically unsafe! 
    10         vec lam = sum ( pow ( lW-outer_product ( ones ( lW.rows() ),mu ),2 ) ); 
    11         double coef=0.0; 
    12         vec sq2bl=sqrt ( 2*beta*lam ); //this term is everywhere 
    13         switch ( nu ) { 
    14                 case 2: 
    15                         coef= ( 1-0.5*sqrt ( ( 4.0*beta-3.0 ) /beta ) ); 
    16                         return  coef*sq2bl + mu ; 
    17                         break; 
    18                 case 3://Ratio of Bessel 
    19                         coef = sqrt ( ( 3*beta-2 ) /3*beta ); 
    20                         return log ( besselk ( 0,sq2bl*coef ) ) - log ( besselk ( 0,sq2bl ) ) +  mu; 
    21                         break; 
    22                 case 4: 
    23                         break; 
    24                 default: // Approximate conditional density 
    25                         break; 
     5namespace bdm 
     6{ 
     7        vec merger::lognorm_merge ( mat &lW ) 
     8        { 
     9                int nu=lW.rows(); 
     10                vec mu = sum ( lW ) /nu; //mean of logs 
     11                // vec lam = sum ( pow ( lW,2 ) )-nu*pow ( mu,2 ); ======= numerically unsafe! 
     12                vec lam = sum ( pow ( lW-outer_product ( ones ( lW.rows() ),mu ),2 ) ); 
     13                double coef=0.0; 
     14                vec sq2bl=sqrt ( 2*beta*lam ); //this term is everywhere 
     15                switch ( nu ) 
     16                { 
     17                        case 2: 
     18                                coef= ( 1-0.5*sqrt ( ( 4.0*beta-3.0 ) /beta ) ); 
     19                                return  coef*sq2bl + mu ; 
     20                                break; 
     21                        case 3://Ratio of Bessel 
     22                                coef = sqrt ( ( 3*beta-2 ) /3*beta ); 
     23                                return log ( besselk ( 0,sq2bl*coef ) ) - log ( besselk ( 0,sq2bl ) ) +  mu; 
     24                                break; 
     25                        case 4: 
     26                                break; 
     27                        default: // Approximate conditional density 
     28                                break; 
     29                } 
     30                return vec ( 0 ); 
    2631        } 
    27         return vec ( 0 ); 
     32 
     33        void merger::merge ( const epdf* g0 ) 
     34        { 
     35 
     36                it_assert_debug ( rv.equal ( g0->_rv() ),"Incompatible g0" ); 
     37                //Empirical density - samples 
     38                if (!fix_smp) 
     39                        eSmp.set_statistics ( ones ( Ns ), g0 ); 
     40                 
     41                Array<vec> &Smp = eSmp._samples(); //aux 
     42                vec &w = eSmp._w(); //aux 
     43 
     44                mat Smp_ex =ones ( dim +1,Ns ); // Extended samples for the ARX model - the last row is ones 
     45                for ( int i=0;i<Ns;i++ ) {      set_col_part ( Smp_ex,i,Smp ( i ) );} 
     46 
     47                if ( DBG )      *dbg << Name ( "Smp_0" ) << Smp_ex; 
     48 
     49                // Stuff for merging 
     50                vec lw_src ( Ns ); 
     51                vec lw_mix ( Ns ); 
     52                vec lw ( Ns ); 
     53                mat lW=zeros ( n,Ns ); 
     54                vec vec0 ( 0 ); 
     55 
     56                // Initial component in the mixture model 
     57                mat V0=1e-8*eye ( dim +1 ); 
     58                ARX A0; A0.set_statistics ( dim, V0 ); //initial guess of Mix: 
     59 
     60                Mix.init ( &A0, Smp_ex, Nc ); 
     61                //Preserve initial mixture for repetitive estimation via flattening 
     62                MixEF Mix_init ( Mix ); 
     63 
     64                // ============= MAIN LOOP ================== 
     65                bool converged=false; 
     66                int niter = 0; 
     67                char str[100]; 
     68 
     69                emix* Mpred=Mix.epredictor ( ); 
     70                vec Mix_pdf ( Ns ); 
     71                while ( !converged ) 
     72                { 
     73                        //Re-estimate Mix 
     74                        //Re-Initialize Mixture model 
     75                        Mix.flatten ( &Mix_init ); 
     76                        Mix.bayesB ( Smp_ex, w*Ns ); 
     77                        delete Mpred; 
     78                        Mpred = Mix.epredictor ( ); // Allocation => must be deleted at the end!! 
     79                        Mpred->set_rv ( rv ); //the predictor predicts rv of this merger 
     80 
     81                        // This will be active only later in iterations!!! 
     82                        if ((!fix_smp)&( 1./sum_sqr ( w ) <0.5*Ns )) 
     83                        { 
     84                                // Generate new samples 
     85                                eSmp.set_samples ( Mpred ); 
     86                                for ( int i=0;i<Ns;i++ ) 
     87                                { 
     88                                        //////////// !!!!!!!!!!!!! 
     89                                        if ( Smp ( i ) ( 2 ) <0 ) {Smp ( i ) ( 2 ) = 0.01; } 
     90                                        set_col_part ( Smp_ex,i,Smp ( i ) ); 
     91                                } 
     92                                if ( 0 ) 
     93                                { 
     94                                        cout<<"Resampling =" << 1./sum_sqr ( w ) << endl; 
     95                                        cout << sum ( Smp_ex,2 ) /Ns <<endl; 
     96                                        cout << Smp_ex*Smp_ex.T() /Ns << endl; 
     97                                } 
     98                        } 
     99                        if ( DBG ) 
     100                        { 
     101                                sprintf ( str,"Mpred_mean%d",niter ); 
     102                                *dbg << Name ( str ) << Mpred->mean(); 
     103 
     104 
     105                                sprintf ( str,"Mpdf%d",niter ); 
     106                                for ( int i=0;i<Ns;i++ ) {Mix_pdf ( i ) = Mix.logpred ( Smp_ex.get_col ( i ) );} 
     107                                *dbg << Name ( str ) << Mix_pdf; 
     108 
     109                                sprintf ( str,"Smp%d",niter ); 
     110                                *dbg << Name ( str ) << Smp_ex; 
     111 
     112                        } 
     113                        //Importace weighting 
     114                        for ( int i=0;i<n;i++ ) 
     115                        { 
     116                                lw_src=0.0; 
     117                                //======== Same RVs =========== 
     118                                //Split according to dependency in rvs 
     119                                if ( mpdfs ( i )->dimension() ==dim ) 
     120                                { 
     121                                        // no need for conditioning or marginalization 
     122                                        for ( int j=0;j<Ns; j++ )   // Smp is Array<> => for cycle 
     123                                        { 
     124                                                lw_src ( j ) =mpdfs ( i )->_epdf().evallog ( Smp ( j ) ); 
     125                                        } 
     126                                } 
     127                                else 
     128                                { 
     129                                        // compute likelihood of marginal on the conditional variable 
     130                                        if ( mpdfs ( i )->dimensionc() >0 ) 
     131                                        { 
     132                                                // Make marginal on rvc_i 
     133                                                epdf* tmp_marg = Mpred->marginal ( mpdfs ( i )->_rvc() ); 
     134                                                //compute vector of lw_src 
     135                                                for ( int k=0;k<Ns;k++ ) 
     136                                                { 
     137                                                        // Here val of tmp_marg = cond of mpdfs(i) ==> calling dls->get_cond 
     138                                                        lw_src ( k ) += tmp_marg->evallog ( dls ( i )->get_cond ( Smp ( k ) ) ); 
     139                                                } 
     140                                                delete tmp_marg; 
     141 
     142//                                      sprintf ( str,"marg%d",niter ); 
     143//                                      *dbg << Name ( str ) << lw_src; 
     144 
     145                                        } 
     146                                        // Compute likelihood of the missing variable 
     147                                        if ( dim > ( mpdfs ( i )->dimension() + mpdfs ( i )->dimensionc() ) ) 
     148                                        { 
     149                                                /////////////// 
     150                                                // There are variales unknown to mpdfs(i) : rvzs 
     151                                                mpdf* tmp_cond = Mpred->condition ( rvzs ( i ) ); 
     152                                                // Compute likelihood 
     153                                                vec lw_dbg=lw_src; 
     154                                                for ( int k= 0; k<Ns; k++ ) 
     155                                                { 
     156                                                        lw_src ( k ) += log ( 
     157                                                                            tmp_cond->evallogcond ( 
     158                                                                                zdls ( i )->pushdown ( Smp ( k ) ), 
     159                                                                                zdls ( i )->get_cond ( Smp ( k ) ) ) ); 
     160                                                        if ( !std::isfinite ( lw_src ( k ) ) ) 
     161                                                        { 
     162                                                                lw_src ( k ) = -1e16; cout << "!"; 
     163                                                        } 
     164                                                } 
     165                                                delete tmp_cond; 
     166                                        } 
     167                                        // Compute likelihood of the partial source 
     168                                        for ( int k= 0; k<Ns; k++ ) 
     169                                        { 
     170                                                mpdfs ( i )->condition ( dls ( i )->get_cond ( Smp ( k ) ) ); 
     171                                                lw_src ( k ) += mpdfs ( i )->_epdf().evallog ( dls ( i )->pushdown ( Smp ( k ) ) ); 
     172                                        } 
     173 
     174                                } 
     175//                      it_assert_debug(std::isfinite(sum(lw_src)),"bad"); 
     176                                lW.set_row ( i, lw_src ); // do not divide by mix 
     177                        } 
     178                        //Importance of the mixture 
     179                        for ( int j=0;j<Ns;j++ ) 
     180                        { 
     181                                lw_mix ( j ) =Mix.logpred ( Smp_ex.get_col ( j ) ); 
     182                        } 
     183                        lw = lognorm_merge ( lW ); //merge 
     184 
     185                        if ( DBG ) 
     186                        { 
     187                                sprintf ( str,"lW%d",niter ); 
     188                                *dbg << Name ( str ) << lW; 
     189                                sprintf ( str,"w%d",niter ); 
     190                                *dbg << Name ( str ) << w; 
     191                                sprintf ( str,"lw_m%d",niter ); 
     192                                *dbg << Name ( str ) << lw_mix; 
     193                        } 
     194                        //Importance weighting 
     195                        if (!fix_smp) 
     196                                lw -=  lw_mix; // hoping that it is not numerically sensitive... 
     197                        w = exp ( lw-max ( lw ) ); 
     198                        //renormalize 
     199                        double sumw =sum ( w ); 
     200                        if ( std::isfinite ( sumw ) ) 
     201                        { 
     202                                w = w/sumw; 
     203                        } 
     204                        else 
     205                        { 
     206                                it_file itf ( "merg_err.it" ); 
     207                                itf << Name ( "w" ) << w; 
     208                        } 
     209 
     210                        if ( DBG ) 
     211                        { 
     212                                sprintf ( str,"w_is_%d",niter ); 
     213                                *dbg << Name ( str ) << w; 
     214                        } 
     215                        // ==== stopping rule === 
     216                        niter++; 
     217                        converged = ( niter>20 ); 
     218                } 
     219                delete Mpred; 
     220//              cout << endl; 
     221 
     222        } 
     223 
    28224} 
    29  
    30 void merger::merge ( const epdf* g0 ) { 
    31 //      it_file dbg ( "merger_debug.it" ); 
    32  
    33         it_assert_debug ( rv.equal ( g0->_rv() ),"Incompatible g0" ); 
    34         //Empirical density - samples 
    35         eSmp.set_statistics ( ones ( Ns ), g0 ); 
    36         Array<vec> &Smp = eSmp._samples(); //aux 
    37         vec &w = eSmp._w(); //aux 
    38  
    39         mat Smp_ex =ones ( dim +1,Ns ); // Extended samples for the ARX model - the last row is ones 
    40         for ( int i=0;i<Ns;i++ ) {      set_col_part ( Smp_ex,i,Smp ( i ) );} 
    41  
    42 //      dbg << Name ( "Smp_0" ) << Smp_ex; 
    43  
    44         // Stuff for merging 
    45         vec lw_src ( Ns ); 
    46         vec lw_mix ( Ns ); 
    47         vec lw ( Ns ); 
    48         mat lW=zeros ( n,Ns ); 
    49         vec vec0 ( 0 ); 
    50  
    51         // Initial component in the mixture model 
    52         mat V0=1e-8*eye ( dim +1 ); 
    53         ARX A0; A0.set_statistics(dim, V0); //initial guess of Mix:  
    54  
    55         Mix.init ( &A0, Smp_ex, Nc ); 
    56         //Preserve initial mixture for repetitive estimation via flattening 
    57         MixEF Mix_init ( Mix ); 
    58  
    59         // ============= MAIN LOOP ================== 
    60         bool converged=false; 
    61         int niter = 0; 
    62         char str[100]; 
    63  
    64         emix* Mpred=Mix.epredictor (  ); 
    65         vec Mix_pdf ( Ns ); 
    66         while ( !converged ) { 
    67                 //Re-estimate Mix 
    68                 //Re-Initialize Mixture model 
    69                 Mix.flatten ( &Mix_init ); 
    70                 Mix.bayesB ( Smp_ex, w*Ns ); 
    71                 delete Mpred; 
    72                 Mpred = Mix.epredictor ( ); // Allocation => must be deleted at the end!! 
    73                 Mpred->set_rv(rv); //the predictor predicts rv of this merger 
    74  
    75                 // This will be active only later in iterations!!! 
    76                 if ( 1./sum_sqr ( w ) <0.5*Ns ) { 
    77                         // Generate new samples 
    78                         eSmp.set_samples ( Mpred ); 
    79                         for ( int i=0;i<Ns;i++ ) { 
    80                                 //////////// !!!!!!!!!!!!! 
    81                                 if ( Smp ( i ) ( 2 ) <0 ) {Smp ( i ) ( 2 ) = 0.01; } 
    82                                 set_col_part ( Smp_ex,i,Smp ( i ) ); 
    83                         } 
    84                         if(0){cout<<"Resampling =" << 1./sum_sqr ( w ) << endl; 
    85                         cout << sum ( Smp_ex,2 ) /Ns <<endl; 
    86                         cout << Smp_ex*Smp_ex.T() /Ns << endl;} 
    87                 } 
    88 //              sprintf ( str,"Mpred_mean%d",niter ); 
    89 //              dbg << Name ( str ) << Mpred->mean(); 
    90  
    91  
    92 //              sprintf ( str,"Mpdf%d",niter ); 
    93 //              for ( int i=0;i<Ns;i++ ) {Mix_pdf ( i ) = Mix.logpred ( Smp_ex.get_col ( i ) );} 
    94 //              dbg << Name ( str ) << Mix_pdf; 
    95  
    96 //              sprintf ( str,"Smp%d",niter ); 
    97 //              dbg << Name ( str ) << Smp_ex; 
    98  
    99                 //Importace weighting 
    100                 for ( int i=0;i<n;i++ ) { 
    101                         lw_src=0.0; 
    102                         //======== Same RVs =========== 
    103                         //Split according to dependency in rvs 
    104                         if ( mpdfs ( i )->dimension() ==dim ) { 
    105                                 // no need for conditioning or marginalization 
    106                                 for ( int j=0;j<Ns; j++ ) { // Smp is Array<> => for cycle 
    107                                         lw_src ( j ) =mpdfs ( i )->_epdf().evallog ( Smp ( j ) ); 
    108                                 } 
    109                         } 
    110                         else { 
    111                                 // compute likelihood of marginal on the conditional variable 
    112                                 if ( mpdfs ( i )->dimensionc() >0 ) { 
    113                                         // Make marginal on rvc_i 
    114                                         epdf* tmp_marg = Mpred->marginal ( mpdfs ( i )->_rvc() ); 
    115                                         //compute vector of lw_src 
    116                                         for ( int k=0;k<Ns;k++ ) { 
    117                                                 // Here val of tmp_marg = cond of mpdfs(i) ==> calling dls->get_cond 
    118                                                 lw_src ( k ) += tmp_marg->evallog ( dls ( i )->get_cond ( Smp ( k ) ) ); 
    119                                         } 
    120                                         delete tmp_marg; 
    121  
    122 //                                      sprintf ( str,"marg%d",niter ); 
    123 //                                      dbg << Name ( str ) << lw_src; 
    124  
    125                                 } 
    126                                 // Compute likelihood of the missing variable 
    127                                 if ( dim > ( mpdfs ( i )->dimension() + mpdfs ( i )->dimensionc() ) ) { 
    128                                         /////////////// 
    129                                         // There are variales unknown to mpdfs(i) : rvzs 
    130                                         mpdf* tmp_cond = Mpred->condition ( rvzs ( i ) ); 
    131                                         // Compute likelihood 
    132                                         vec lw_dbg=lw_src; 
    133                                         for ( int k= 0; k<Ns; k++ ) { 
    134                                                 lw_src ( k ) += log ( 
    135                                                                     tmp_cond->evallogcond ( 
    136                                                                         zdls ( i )->pushdown ( Smp ( k ) ), 
    137                                                                         zdls ( i )->get_cond ( Smp ( k ) ) ) ); 
    138                                                 if ( !std::isfinite ( lw_src ( k ) ) ) { 
    139                                                         lw_src ( k ) = -1e16; cout << "!"; 
    140                                                 } 
    141                                         } 
    142                                         delete tmp_cond; 
    143                                 } 
    144                                 // Compute likelihood of the partial source 
    145                                 for ( int k= 0; k<Ns; k++ ) { 
    146                                         mpdfs ( i )->condition ( dls ( i )->get_cond ( Smp ( k ) ) ); 
    147                                         lw_src ( k ) += mpdfs ( i )->_epdf().evallog ( dls ( i )->pushdown ( Smp ( k ) ) ); 
    148                                 } 
    149  
    150                         } 
    151 //                      it_assert_debug(std::isfinite(sum(lw_src)),"bad"); 
    152                         lW.set_row ( i, lw_src ); // do not divide by mix 
    153                 } 
    154                 //Importance of the mixture 
    155                 for ( int j=0;j<Ns;j++ ) { 
    156                         lw_mix ( j ) =Mix.logpred ( Smp_ex.get_col ( j ) ); 
    157                 } 
    158 //              sprintf ( str,"lW%d",niter ); 
    159 //              dbg << Name ( str ) << lW; 
    160  
    161                 lw = lognorm_merge ( lW ); //merge 
    162  
    163 //              sprintf ( str,"w%d",niter ); 
    164 //              dbg << Name ( str ) << w; 
    165 //              sprintf ( str,"lw_m%d",niter ); 
    166 //              dbg << Name ( str ) << lw_mix; 
    167  
    168                 //Importance weighting 
    169                 lw -=  lw_mix; // hoping that it is not numerically sensitive... 
    170                 w = exp ( lw-max ( lw ) ); 
    171                 //renormalize 
    172                 double sumw =sum ( w ); 
    173                 if ( std::isfinite ( sumw ) ) { 
    174                         w = w/sumw; 
    175                 } 
    176                 else { 
    177                         it_file itf ( "merg_err.it" ); 
    178                         itf << Name ( "w" ) << w; 
    179                 } 
    180  
    181 //              sprintf ( str,"w_is_%d",niter ); 
    182 //              dbg << Name ( str ) << w; 
    183  
    184 //              eSmp.resample(); // So that it can be used in bayes 
    185 //              for ( int i=0;i<Ns;i++ ) {      set_col_part ( Smp_ex,i,Smp ( i ) );} 
    186  
    187 //              sprintf ( str,"Smp_res%d",niter ); 
    188 //              dbg << Name ( str ) << Smp; 
    189  
    190                 // ==== stopping rule === 
    191                 niter++; 
    192                 converged = ( niter>20 ); 
    193         } 
    194         delete Mpred; 
    195         cout << endl; 
    196  
    197 } 
    198  
    199 } 
  • bdm/estim/merger.h

    r286 r299  
    1717#include "mixef.h" 
    1818 
    19 namespace bdm{ 
    20 using std::string; 
    21  
    22 /*! 
    23 @brief Function for general combination of pdfs 
    24  
    25 Mixtures of Gaussian densities are used internally. Switching to other densities should be trivial. 
    26 */ 
    27  
    28 class merger : public compositepdf, public epdf { 
    29 protected: 
    30         //!Internal mixture of EF models 
    31         MixEF Mix; 
    32         //! Data link for each mpdf in mpdfs 
    33         Array<datalink_m2e*> dls; 
    34         //! Array of rvs that are not modelled by mpdfs at all (aux) 
    35         Array<RV> rvzs; 
    36         //! Data Links of rv0 mpdfs - these will be conditioned the (rv,rvc) of mpdfs 
    37         Array<datalink_m2e*> zdls; 
    38  
    39         //!Number of samples used in approximation 
    40         int Ns; 
    41         //!Number of components in a mixture 
    42         int Nc; 
    43         //!Prior on the log-normal merging model 
    44         double beta; 
    45         //! Projection to empirical density 
    46         eEmp eSmp; 
    47  
    48 public: 
     19namespace bdm 
     20{ 
     21        using std::string; 
     22 
     23        /*! 
     24        @brief Function for general combination of pdfs 
     25 
     26        Mixtures of Gaussian densities are used internally. Switching to other densities should be trivial. 
     27        */ 
     28 
     29        class merger : public compositepdf, public epdf 
     30        { 
     31                protected: 
     32                        //!Internal mixture of EF models 
     33                        MixEF Mix; 
     34                        //! Data link for each mpdf in mpdfs 
     35                        Array<datalink_m2e*> dls; 
     36                        //! Array of rvs that are not modelled by mpdfs at all (aux) 
     37                        Array<RV> rvzs; 
     38                        //! Data Links of rv0 mpdfs - these will be conditioned the (rv,rvc) of mpdfs 
     39                        Array<datalink_m2e*> zdls; 
     40 
     41                        //!Number of samples used in approximation 
     42                        int Ns; 
     43                        //!Number of components in a mixture 
     44                        int Nc; 
     45                        //!Prior on the log-normal merging model 
     46                        double beta; 
     47                        //! Projection to empirical density 
     48                        eEmp eSmp; 
     49 
     50                        //! debug or not debug 
     51                        bool DBG; 
     52                        //! debugging file 
     53                        it_file* dbg; 
     54                        //! Flag if the samples are fixed or not 
     55                        bool fix_smp; 
     56                public: 
    4957//!Default constructor 
    50         merger ( const Array<mpdf*> &S ) : 
    51                         compositepdf ( S ), epdf ( ), 
    52                         Mix ( Array<BMEF*> ( 0 ),vec ( 0 ) ), dls ( n ), rvzs ( n ), zdls ( n ), eSmp() { 
    53                 RV ztmp; 
    54                 rv = getrv(false); 
    55                 dim = rv._dsize(); 
    56                 // Extend rv by rvc! 
    57                 RV rvc; setrvc ( rv,rvc ); 
    58                 rv.add ( rvc ); 
    59                 for ( int i=0;i<n;i++ ) { 
    60                         //Establich connection between mpdfs and merger 
    61                         dls ( i ) = new datalink_m2e;dls(i)->set_connection( mpdfs ( i )->_rv(), mpdfs ( i )->_rvc(), rv ); 
    62                         // find out what is missing in each mpdf 
    63                         ztmp= mpdfs ( i )->_rv(); 
    64                         ztmp.add ( mpdfs ( i )->_rvc() ); 
    65                         rvzs ( i ) =rv.subt ( ztmp ); 
    66                         zdls ( i ) = new datalink_m2e; zdls(i)->set_connection ( rvzs ( i ), ztmp, rv ) ; 
    67                 }; 
    68                 //Set Default values of parameters 
    69                 beta=2.0; 
    70                 Ns=100; 
    71                 Nc=10; 
    72                 Mix.set_method ( EM ); 
    73         } 
     58                        merger ( const Array<mpdf*> &S ) : 
     59                                        compositepdf ( S ), epdf ( ), 
     60                                        Mix ( Array<BMEF*> ( 0 ),vec ( 0 ) ), dls ( n ), rvzs ( n ), zdls ( n ), eSmp() 
     61                        { 
     62                                RV ztmp; 
     63                                rv = getrv ( false ); 
     64                                RV rvc; setrvc ( rv,rvc ); // Extend rv by rvc! 
     65                                rv.add ( rvc ); 
     66                                // get dimension 
     67                                dim = rv._dsize(); 
     68 
     69                                for ( int i=0;i<n;i++ ) 
     70                                { 
     71                                        //Establich connection between mpdfs and merger 
     72                                        dls ( i ) = new datalink_m2e;dls ( i )->set_connection ( mpdfs ( i )->_rv(), mpdfs ( i )->_rvc(), rv ); 
     73                                        // find out what is missing in each mpdf 
     74                                        ztmp= mpdfs ( i )->_rv(); 
     75                                        ztmp.add ( mpdfs ( i )->_rvc() ); 
     76                                        rvzs ( i ) =rv.subt ( ztmp ); 
     77                                        zdls ( i ) = new datalink_m2e; zdls ( i )->set_connection ( rvzs ( i ), ztmp, rv ) ; 
     78                                }; 
     79                                //Set Default values of parameters 
     80                                beta=2.0; 
     81                                Ns=100; 
     82                                Nc=10; 
     83                                Mix.set_method ( EM ); 
     84                                DBG = false; 
     85                                fix_smp = false; 
     86                        } 
     87                        //! set debug file 
     88                        void debug_file ( const string fname ) { if ( DBG ) delete dbg; dbg = new it_file ( fname ); if ( dbg ) DBG=true;} 
    7489//! Set internal parameters used in approximation 
    75         void set_parameters ( double beta0, int Ns0, int Nc0 ) {beta=beta0;Ns=Ns0;Nc=Nc0;eSmp.set_parameters(Ns0,false);} 
     90                        void set_parameters ( double beta0, int Ns0, int Nc0 ) {beta=beta0;Ns=Ns0;Nc=Nc0;eSmp.set_parameters ( Ns0,false );} 
     91                        void set_grid ( Array<vec> &XYZ ) 
     92                        { 
     93                                int dim=XYZ.length(); ivec szs ( dim ); 
     94                                for(int i=0; i<dim;i++){szs=XYZ(i).length();} 
     95                                Ns=prod(szs); 
     96                                eSmp.set_parameters(Ns,false); 
     97                                Array<vec> &samples=eSmp._samples(); 
     98                                eSmp._w()=ones(Ns)/Ns; 
     99                                                 
     100                                //set samples 
     101                                ivec is=zeros_i(dim);//indeces of dimensions in for cycle; 
     102                                vec smpi(dim); 
     103                                for(int i=0; i<Ns; i++){ 
     104                                        for(int j=0; j<dim; j++){smpi(j)=XYZ(j)(is(j)); /* jty vector*/ } 
     105                                        samples(i)=smpi; 
     106                                        // shift indeces 
     107                                        for (int j=0;j<dim;j++){ 
     108                                                if (is(j)==szs(j)-1) { //j-th index is full 
     109                                                        is(j)=0; //shift back 
     110                                                        is(j+1)++; //increase th next dimension; 
     111                                                        if (is(j+1)<szs(j+1)-1) break; 
     112                                                } else { 
     113                                                        is(j)++; break; 
     114                                                } 
     115                                        } 
     116                                } 
     117                                 
     118                                fix_smp = true; 
     119                        } 
    76120//!Initialize the proposal density. This function must be called before merge()! 
    77         void init() { ////////////// NOT FINISHED 
    78                 Array<vec> Smps ( n ); 
    79                 //Gibbs sampling 
    80                 for ( int i=0;i<n;i++ ) {Smps ( i ) =zeros ( 0 );} 
    81         } 
     121                        void init()   ////////////// NOT FINISHED 
     122                        { 
     123                                Array<vec> Smps ( n ); 
     124                                //Gibbs sampling 
     125                                for ( int i=0;i<n;i++ ) {Smps ( i ) =zeros ( 0 );} 
     126                        } 
    82127//!Create a mixture density using known proposal 
    83         void merge ( const epdf* g0 ); 
     128                        void merge ( const epdf* g0 ); 
    84129//!Create a mixture density, make sure to call init() before the first call 
    85         void merge () {merge ( & ( Mix.posterior() ) );}; 
     130                        void merge () {merge ( & ( Mix.posterior() ) );}; 
    86131 
    87132//! Merge log-likelihood values 
    88         vec lognorm_merge ( mat &lW ); 
     133                        vec lognorm_merge ( mat &lW ); 
    89134//! sample from merged density 
    90135//! weight w is a 
    91         vec sample ( ) const { return Mix.posterior().sample();} 
    92         double evallog ( const vec &dt ) const { 
    93                 vec dtf=ones ( dt.length() +1 ); 
    94                 dtf.set_subvector ( 0,dt ); 
    95                 return Mix.logpred ( dtf ); 
    96         } 
    97         vec mean() const { 
    98                 const Vec<double> &w = eSmp._w(); 
    99                 const Array<vec> &S = eSmp._samples(); 
    100                 vec tmp=zeros ( dim);  
    101                 for ( int i=0; i<Ns; i++ ) { 
    102                         tmp+=w ( i ) *S ( i ); 
    103                 } 
    104                 return tmp; 
    105         } 
    106         mat covariance() const { 
    107                 const vec &w = eSmp._w(); 
    108                 const Array<vec> &S = eSmp._samples(); 
    109                  
    110                 vec mea = mean();  
    111                  
    112                 cout << sum(w) << "," << w*w <<endl; 
    113                  
    114                 mat Tmp=zeros(dim, dim); 
    115                 for ( int i=0; i<Ns; i++ ) { 
    116                         Tmp+=w ( i ) *outer_product(S ( i ), S(i)); 
    117                 } 
    118                 return Tmp-outer_product(mea,mea); 
    119         } 
    120         vec variance() const { 
    121                 const vec &w = eSmp._w(); 
    122                 const Array<vec> &S = eSmp._samples(); 
    123                  
    124                 vec tmp=zeros(dim); 
    125                 for ( int i=0; i<Ns; i++ ) { 
    126                         tmp+=w ( i ) *pow(S ( i ),2); 
    127                 } 
    128                 return tmp-pow(mean(),2); 
    129         } 
     136                        vec sample ( ) const { return Mix.posterior().sample();} 
     137                        double evallog ( const vec &dt ) const 
     138                        { 
     139                                vec dtf=ones ( dt.length() +1 ); 
     140                                dtf.set_subvector ( 0,dt ); 
     141                                return Mix.logpred ( dtf ); 
     142                        } 
     143                        vec mean() const 
     144                        { 
     145                                const Vec<double> &w = eSmp._w(); 
     146                                const Array<vec> &S = eSmp._samples(); 
     147                                vec tmp=zeros ( dim ); 
     148                                for ( int i=0; i<Ns; i++ ) 
     149                                { 
     150                                        tmp+=w ( i ) *S ( i ); 
     151                                } 
     152                                return tmp; 
     153                        } 
     154                        mat covariance() const 
     155                        { 
     156                                const vec &w = eSmp._w(); 
     157                                const Array<vec> &S = eSmp._samples(); 
     158 
     159                                vec mea = mean(); 
     160 
     161                                cout << sum ( w ) << "," << w*w <<endl; 
     162 
     163                                mat Tmp=zeros ( dim, dim ); 
     164                                for ( int i=0; i<Ns; i++ ) 
     165                                { 
     166                                        Tmp+=w ( i ) *outer_product ( S ( i ), S ( i ) ); 
     167                                } 
     168                                return Tmp-outer_product ( mea,mea ); 
     169                        } 
     170                        vec variance() const 
     171                        { 
     172                                const vec &w = eSmp._w(); 
     173                                const Array<vec> &S = eSmp._samples(); 
     174 
     175                                vec tmp=zeros ( dim ); 
     176                                for ( int i=0; i<Ns; i++ ) 
     177                                { 
     178                                        tmp+=w ( i ) *pow ( S ( i ),2 ); 
     179                                } 
     180                                return tmp-pow ( mean(),2 ); 
     181                        } 
    130182//! for future use 
    131         virtual ~merger() { 
    132                 for ( int i=0; i<n; i++ ) { 
    133                         delete dls ( i ); 
    134                         delete zdls ( i ); 
    135                 } 
     183                        virtual ~merger() 
     184                        { 
     185                                for ( int i=0; i<n; i++ ) 
     186                                { 
     187                                        delete dls ( i ); 
     188                                        delete zdls ( i ); 
     189                                } 
     190                                if ( DBG ) delete dbg; 
     191                        }; 
     192 
     193//! Access function 
     194                        MixEF& _Mix() {return Mix;} 
     195//! Access function 
     196                        eEmp& _Smp() {return eSmp;} 
    136197        }; 
    137198 
    138 //! Access function 
    139         MixEF& _Mix() {return Mix;} 
    140 //! Access function 
    141         eEmp& _Smp() {return eSmp;} 
    142 }; 
    143  
    144199} 
    145200 
  • bdm/stat/libEF.h

    r294 r299  
    139139                        vec mean() const {return mu;} 
    140140                        vec variance() const {return diag ( R.to_mat() );} 
    141 //      mlnorm<sq_T>* condition ( const RV &rvn ) const ; 
     141//      mlnorm<sq_T>* condition ( const RV &rvn ) const ; <=========== fails to cmpile. Why? 
    142142                        mpdf* condition ( const RV &rvn ) const ; 
    143 //      enorm<sq_T>* marginal ( const RV &rv ) const; 
    144                         epdf* marginal ( const RV &rv ) const; 
     143        enorm<sq_T>* marginal ( const RV &rv ) const; 
     144//                      epdf* marginal ( const RV &rv ) const; 
    145145                        //!@} 
    146146 
     
    10821082 
    10831083        template<class sq_T> 
    1084         epdf* enorm<sq_T>::marginal ( const RV &rvn ) const 
     1084        enorm<sq_T>* enorm<sq_T>::marginal ( const RV &rvn ) const 
    10851085        { 
    10861086                it_assert_debug ( isnamed(), "rv description is not assigned" ); 
  • mpdm/CMakeLists.txt

    r288 r299  
    55EXEC(merg_pred) 
    66EXEC(merg_giw) 
    7 EXEC(merger_iter_cond) 
    8 EXEC(merg_2a) 
     7EXEC(TR2244/merger_iter_cond) 
     8EXEC(SYSID09/merg_2a) 
  • mpdm/TR2244/merger_iter_cond.cpp

    r297 r299  
    3333 
    3434        merger M ( A ); 
    35         enorm<fsqmat> g0; g0.set_rv ( all ); 
    36         g0.set_parameters ( vec ( "1 -1 1" ),3*eye ( 3 ));// +1*ones ( 3,3 ) ); 
     35        M.debug_file("iter_cond_debug.it"); 
     36        enorm<ldmat> g0; g0.set_rv ( all ); 
     37        mat Cov=0.3*eye ( 3 ); 
     38        Cov(1,2)=0.29; 
     39        Cov(2,1)=0.29; 
     40        g0.set_parameters ( vec ( "1 1 1" ),Cov);// +1*ones ( 3,3 ) ); 
    3741 
     42        enorm<ldmat>* teste=g0.marginal(concat(u1,u2)); 
     43        mlnorm<ldmat>* testm=(mlnorm<ldmat>*)teste->condition(u2); 
     44         
    3845        M.set_parameters ( 1.2,1000,1 ); 
     46         
     47        Array<vec> YUU(3);  
     48        YUU(0)=linspace(-2.9,3.1,20); 
     49        YUU(1)=linspace(-5,5,20); 
     50        YUU(2)=linspace(-3,3,20); 
    3951 
    40         int Ntrials=100; 
     52        M.set_grid(YUU); 
     53         
     54        int Ntrials=1; 
    4155        vec A1s ( Ntrials ); 
    4256        vec A2s ( Ntrials ); 
     
    5165                MixEF &MM = M._Mix(); 
    5266                epdf* MP = MM._Coms ( 0 )->epredictor ( ); 
     67                MP->set_rv(all); 
    5368 
    5469                RV yu1 = y; yu1.add ( u1 ); 
     
    6681                C2s(it) = P2c->_mu_const()(0); 
    6782 
     83                cout << "mean: " << MM._Coms(0)->_e()->mean() <<endl; 
    6884        } 
     85         
     86         
     87         
     88        cout << "A1s:" <<A1s<<endl; 
     89        cout << "C2s:" <<C2s<<endl; 
    6990        double A1mean = sum(A1s)/Ntrials; 
    7091        double A2mean = sum(A2s)/Ntrials; 
     
    7394        double R1mean = sum(R1s)/Ntrials; 
    7495        double R2mean = sum(R2s)/Ntrials; 
    75         cout << "A1: " << A1mean << " +- " << 2*(sum_sqr(A1s)/Ntrials-A1mean*A1mean) <<endl; 
    76         cout << "A2: " << A2mean << " +- " << 2*(sum_sqr(A2s)/Ntrials-A2mean*A2mean) <<endl; 
    77         cout << "C1: " << C1mean << " +- " << 2*(sum_sqr(C1s)/Ntrials-C1mean*C1mean) <<endl; 
    78         cout << "C2: " << C2mean << " +- " << 2*(sum_sqr(C2s)/Ntrials-C2mean*C2mean) <<endl; 
    79         cout << "R1: " << R1mean << " +- " << 2*(sum_sqr(R1s)/Ntrials-R1mean*R1mean) <<endl; 
    80         cout << "R2: " << R2mean << " +- " << 2*(sum_sqr(R2s)/Ntrials-R2mean*R2mean) <<endl; 
     96        cout << "A1: " << A1mean << " +- " << 2*sqrt(sum_sqr(A1s)/Ntrials-A1mean*A1mean) <<endl; 
     97        cout << "A2: " << A2mean << " +- " << 2*sqrt(sum_sqr(A2s)/Ntrials-A2mean*A2mean) <<endl; 
     98        cout << "C1: " << C1mean << " +- " << 2*sqrt(sum_sqr(C1s)/Ntrials-C1mean*C1mean) <<endl; 
     99        cout << "C2: " << C2mean << " +- " << 2*sqrt(sum_sqr(C2s)/Ntrials-C2mean*C2mean) <<endl; 
     100        cout << "R1: " << R1mean << " +- " << 2*sqrt(sum_sqr(R1s)/Ntrials-R1mean*R1mean) <<endl; 
     101        cout << "R2: " << R2mean << " +- " << 2*sqrt(sum_sqr(R2s)/Ntrials-R2mean*R2mean) <<endl; 
    81102}