From 0523b2f7fa79864f6f24d95085fa62852c3a7f85 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Fri, 2 Aug 2013 06:14:41 +0400 Subject: [PATCH] Added radf-1.0.1b --- agl/README | 2 +- agl/src/main.c | 10 +- envir/README | 3 +- envir/src/main.c | 17 +- radf/AUTHORS | 3 + radf/CMakeLists.txt | 32 + radf/COPYING | 341 +++++++ radf/INSTALL | 14 + radf/README | 25 + radf/logo.png | Bin 0 -> 3478 bytes radf/radf.cmake | 32 + radf/radf.doxygen | 1890 +++++++++++++++++++++++++++++++++++++++ radf/src/CMakeLists.txt | 29 + radf/src/Makefile | 21 + radf/src/add_main.c | 211 +++++ radf/src/add_main.h | 31 + radf/src/coords.c | 354 ++++++++ radf/src/coords.h | 16 + radf/src/main.c | 414 +++++++++ radf/src/messages.c | 119 +++ radf/src/messages.h | 14 + radf/src/radf.c | 302 +++++++ radf/src/radf.h | 26 + radf/src/radf_proc.c | 138 +++ radf/src/radf_proc.h | 16 + statgen/README | 3 +- statgen/src/Makefile | 2 +- statgen/src/int2char.c | 33 - statgen/src/int2char.h | 14 - statgen/src/main.c | 49 +- 30 files changed, 4068 insertions(+), 93 deletions(-) create mode 100644 radf/AUTHORS create mode 100644 radf/CMakeLists.txt create mode 100644 radf/COPYING create mode 100644 radf/INSTALL create mode 100644 radf/README create mode 100755 radf/logo.png create mode 100644 radf/radf.cmake create mode 100644 radf/radf.doxygen create mode 100644 radf/src/CMakeLists.txt create mode 100644 radf/src/Makefile create mode 100644 radf/src/add_main.c create mode 100644 radf/src/add_main.h create mode 100644 radf/src/coords.c create mode 100644 radf/src/coords.h create mode 100644 radf/src/main.c create mode 100644 radf/src/messages.c create mode 100644 radf/src/messages.h create mode 100644 radf/src/radf.c create mode 100644 radf/src/radf.h create mode 100644 radf/src/radf_proc.c create mode 100644 radf/src/radf_proc.h delete mode 100644 statgen/src/int2char.c delete mode 100644 statgen/src/int2char.h diff --git a/agl/README b/agl/README index 83df9b3..8533b9b 100644 --- a/agl/README +++ b/agl/README @@ -3,7 +3,7 @@ Version: 1.0.1 License: GPL Usage: - agl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE] [ -q ] [ -h ] + agl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE ] [ -q ] [ -h ] Parametrs: -a - input file with aglomerates (in format statgen) diff --git a/agl/src/main.c b/agl/src/main.c index 98bc89e..d119947 100644 --- a/agl/src/main.c +++ b/agl/src/main.c @@ -24,13 +24,13 @@ * @section How-To-Use How to use * Usage: *
- * agl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE] [ -q ] [ -h ]
+ * agl -a AGL_INP -i INPUT -c X,Y,Z -o OUTPUT [ -l LOGFILE ] [ -q ] [ -h ]
  *
  * Parametrs:
  *    -a          - input file with aglomerates (in format statgen)
  *    -i          - input file with coordinates
  *    -c          - cell size (float), A
- *    -o          - output file with coordinates
+ *    -o          - output file name
  *    -l          - log enable
  *    -q          - quiet enable
  *    -h          - show this help and exit
@@ -39,7 +39,7 @@
  * @page Install
  * 
  * @section Requirements Requirements
- * The application statgen requires the following external stuff:
+ * The application agl requires the following external stuff:
  * - cmake  >= 2.8
  * - gcc    >= 4.8
  *
@@ -131,12 +131,12 @@ int main(int argc, char *argv[])
       sprintf (tmp_str, "%s                                                    Evgeniy Alekseev aka arcanis\n", tmp_str);
       sprintf (tmp_str, "%s                                                    E-mail : esalexeev@gmail.com\n\n", tmp_str);
       sprintf (tmp_str, "%sUsage:\n", tmp_str);
-      sprintf (tmp_str, "%sagl -a FILENAME -i FILENAME -c X,Y,Z -o FILEMANE [ -l LOGFILE] [ -q ] [ -h ]\n\n", tmp_str);
+      sprintf (tmp_str, "%sagl -a AGL_INP -i INPUT -c X,Y,Z -o OUTPUT [ -l LOGFILE ] [ -q ] [ -h ]\n\n", tmp_str);
       sprintf (tmp_str, "%sParametrs:\n", tmp_str);
       sprintf (tmp_str, "%s  -a          - input file with aglomerates (in format statgen)\n", tmp_str);
       sprintf (tmp_str, "%s  -i          - input file with coordinates\n", tmp_str);
       sprintf (tmp_str, "%s  -c          - cell size (float), A\n", tmp_str);
-      sprintf (tmp_str, "%s  -o          - output file with coordinates\n", tmp_str);
+      sprintf (tmp_str, "%s  -o          - output file name\n", tmp_str);
       sprintf (tmp_str, "%s  -l          - log enable\n", tmp_str);
       sprintf (tmp_str, "%s  -q          - quiet enable\n", tmp_str);
       sprintf (tmp_str, "%s  -h          - show this help and exit\n", tmp_str);
diff --git a/envir/README b/envir/README
index 37a064a..e312aeb 100644
--- a/envir/README
+++ b/envir/README
@@ -3,7 +3,8 @@ Version: 1.0.1
 License: GPL
 
 Usage:
-  envir -i FILENAME -c X,Y,Z -o FILEMANE [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] [ -l LOGFILE] [ -q ] [ -h ]
+  envir -i FILENAME -c X,Y,Z -o FILEMANE [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] 
+                                                 [ -l LOGFILE ] [ -q ] [ -h ]
 
 Parametrs:
   -i          - input file with coordinates
diff --git a/envir/src/main.c b/envir/src/main.c
index a923bb7..6fcf7bd 100644
--- a/envir/src/main.c
+++ b/envir/src/main.c
@@ -24,13 +24,13 @@
  * @section How-To-Use How to use
  * Usage:
  * 
- * envir -i FILENAME -c X,Y,Z -o FILEMANE [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] 
- *                                                   [ -l LOGFILE] [ -q ] [ -h ]
+ * envir -i INPUT -c X,Y,Z -o OUTPUT [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] 
+ *                                           [ -l LOGFILE ] [ -q ] [ -h ]
  *
  * Parametrs:
- *    -i          - input file with coordinates
+ *    -i          - input file name
  *    -c          - cell size (float), A
- *    -o          - output file with coordinates
+ *    -o          - output file name
  *    -n          - number of molecule for search (integer). Default is 1
  *    -r          - radius of environment (float). Default is 6.0
  *    -l          - log enable
@@ -41,7 +41,7 @@
  * @page Install
  * 
  * @section Requirements Requirements
- * The application statgen requires the following external stuff:
+ * The application envir requires the following external stuff:
  * - cmake  >= 2.8
  * - gcc    >= 4.8
  *
@@ -133,11 +133,12 @@ int main(int argc, char *argv[])
       sprintf (tmp_str, "%s                                                    Evgeniy Alekseev aka arcanis\n", tmp_str);
       sprintf (tmp_str, "%s                                                    E-mail : esalexeev@gmail.com\n\n", tmp_str);
       sprintf (tmp_str, "%sUsage:\n", tmp_str);
-      sprintf (tmp_str, "%senvir -i FILENAME -c X,Y,Z -o FILEMANE [ -n NUM_OF_MOLECULE ] [ -r RADIUS ] [ -l LOGFILE] [ -q ] [ -h ]\n\n", tmp_str);
+      sprintf (tmp_str, "%senvir -i INPUT -c X,Y,Z -o OUTPUT [ -n NUM_OF_MOLECULE ] [ -r RADIUS ]\n", tmp_str);
+      sprintf (tmp_str, "%s                                          [ -l LOGFILE ] [ -q ] [ -h ]\n\n", tmp_str);
       sprintf (tmp_str, "%sParametrs:\n", tmp_str);
-      sprintf (tmp_str, "%s  -i          - input file with coordinates\n", tmp_str);
+      sprintf (tmp_str, "%s  -i          - input file name\n", tmp_str);
       sprintf (tmp_str, "%s  -c          - cell size (float), A\n", tmp_str);
-      sprintf (tmp_str, "%s  -o          - output file with coordinates\n", tmp_str);
+      sprintf (tmp_str, "%s  -o          - output file name\n", tmp_str);
       sprintf (tmp_str, "%s  -n          - number of molecule for search (integer). Default is 1\n", tmp_str);
       sprintf (tmp_str, "%s  -r          - radius of environment (float). Default is 6.0\n", tmp_str);
       sprintf (tmp_str, "%s  -l          - log enable\n", tmp_str);
diff --git a/radf/AUTHORS b/radf/AUTHORS
new file mode 100644
index 0000000..2c0d60a
--- /dev/null
+++ b/radf/AUTHORS
@@ -0,0 +1,3 @@
+Current developers:
+
+Evgeniy Alekseev aka arcanis 
diff --git a/radf/CMakeLists.txt b/radf/CMakeLists.txt
new file mode 100644
index 0000000..a083524
--- /dev/null
+++ b/radf/CMakeLists.txt
@@ -0,0 +1,32 @@
+cmake_minimum_required (VERSION 2.8)
+
+cmake_policy(SET CMP0003 OLD)
+cmake_policy(SET CMP0011 NEW)
+cmake_policy(SET CMP0015 NEW)
+
+# set project name
+set (PROJECT radf)
+# set additional cmake file
+include (${PROJECT}.cmake)
+
+
+# additional options
+OPTION (WITH_DEBUG_MODE "Build with debug mode" OFF)
+OPTION (ADD_INCLUDE "Add include files" OFF)
+
+# set libraries
+set (LIBRARIES)
+  foreach (LIBRARY ${LIBRARIES})
+    find_library ("${LIBRARY}_FOUND" ${LIBRARY})
+      message (STATUS "Check the ${LIBRARY} is installed: " ${${LIBRARY}_FOUND})
+      if ("${${LIBRARY}_FOUND}" STREQUAL "${LIBRARY}_FOUND-NOTFOUND")
+        message (STATUS "Adding library sources")
+        add_subdirectory (../${LIBRARY} lib/${LIBRARY})
+      endif ()
+  endforeach ()
+
+# additional targets
+set (TARGETS "")
+set (HEADERS "")
+
+add_subdirectory (${${PROJECT}_SOURCE_DIR})
\ No newline at end of file
diff --git a/radf/COPYING b/radf/COPYING
new file mode 100644
index 0000000..eb47f5d
--- /dev/null
+++ b/radf/COPYING
@@ -0,0 +1,341 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+   Everyone is permitted to copy and distribute verbatim copies
+    of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C) 19yy  
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  , 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/radf/INSTALL b/radf/INSTALL
new file mode 100644
index 0000000..cbd6143
--- /dev/null
+++ b/radf/INSTALL
@@ -0,0 +1,14 @@
+CMakeFlags:
+  -DCMAKE_INSTALL_PREFIX=         - install prefix (default is '/usr/local')
+  -DADD_INCLUDE=1                 - install include files (default is disable)
+  -DWITH_DEBUG_MODE=1             - compile with flag '-g' (default is disable)
+
+Install for Linux:
+  mkdir build && cd build
+  cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ../
+  make
+  make install
+Install for Windows:
+  create project file using 'cmake'
+  compile project
+You may also download compiled executable file for Win_x86.
diff --git a/radf/README b/radf/README
new file mode 100644
index 0000000..e952e84
--- /dev/null
+++ b/radf/README
@@ -0,0 +1,25 @@
+radf - program that calculates radial distribution function (RDF) or radial-angles 
+distribution function
+Version : 1.0.1
+License : GPL
+
+Usage:
+radf -i INPUT -s FIRST,LAST -c X,Y,Z -a ... -o OUTPUT [ -r MIN,MAX ] [ -rs R_STEP ] 
+                [ -a MIN,MAX ] [ -as ANG_STEP ] [ -m ] [ -l LOGFILE ] [ -q ] [ -h ]
+
+Parametrs:
+  -i          - mask of input files
+  -s          - trajectory steps (integer)
+  -c          - cell size (float), A
+  -a          - atom types (integer). Format: 'ATOM1-ATOM2' or 'A1,A2,A3-B1,B2,B3' 
+                (will enable RDF calculation for center mass automaticaly)
+  -o          - output file name
+  -r          - minimal and maximal radii for analyze (float), A. Default is '2.0,15.0'
+  -rs         - radius step for analyze (float), A. Default is '0.2'
+  -a          - minimal and maximal angles for analyze (float), deg. Default is '0.0,90.0'
+  -as         - angle step for analyze (float), deg. This option will enable RADF 
+                calculation automaticaly
+  -m          - matrix output enable
+  -l          - log enable
+  -q          - quiet enable
+  -h          - show this help and exit
diff --git a/radf/logo.png b/radf/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..41adc0cb46ab8b2f327c0851eae786631b4ba85a
GIT binary patch
literal 3478
zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_tsSc;uILpV4%IBGajIv5xj
zI14-?iy0XB4ude`@%$Aj3=F&$o-U3d6?5LstuC4JbnbEc{pD#wN^GZ&E?D%a^@iAb
z1rDZ@DMCuDE=Q+!?~00bjM{ZgdG+yEH}!Vy*4sU8+l^g$Z{J<4(#$=axG=6sG3}m@
zkOIewoSjpwqjoE4>M)*ZJ!7-~Z*q@%OH0bS{1a!M@2^~Ue{%l4=e6(jmv~;jED;=M
z_u|&3P5b;_Gi;b6_Q2$@x3}^6!kyRZ&pw{{ev6og^r6<;Up9>=W-EQlUB1CaUCNlWXP^;*rPyn_AD*G{-yd-~bM#nBB>r#F3?du__5wu;%cKzBV9AC3>k?ERMJAUvV;9Q^EUmOsXCDmlOpQFvG
ze*4dB(bBirR;Nx~`6^|3iX)d)QEp^pykI70WLWWU3tqNtmy|OfE?x3b-{Qz6Wu%~-
z+~aij*P=!Jw~vSV&-%h>kdP5}EtSuMIq1TKbplsowThMoe_hU-*&Z0Hx$uIl-_`kM
zOWG%zEopyP7Ukf7Sm>nLw9+#xe_d|d;_NEc@v7PH>ijO>YjZnv%A;J;m&{RIRMon1
z&0fFPFM6gJFIherqM6q`G=wMkD%%5nzf2G5OKkn8OFKJi1V8+|)V73ka!}iosZ(Q@
zDaoCl5$l)zvS*5si;=NA({szUkA0T(C|;j7^{Z&I91GtnL)mlByfjKokL7r8+7j#`
z>CCp{?*E1pUI`mJ?p#V#Iz4OIu|0ERQs1grL{@G(@%i`iP7l8Y>)uUuNKKu3h&ArE
z+`BF7`d)0E-2M1iuXIFo^y`x|joHQjEZVf;!=q~!D_49_HsZW-S!&w$s;{hzW@R=V
zWcGWJyENQRadZ0lf6rC~E-u^m>6AA6ds)j*3Ge!3^|$r%OMMnvRo=gT<;gtW;?%Tz
z=?nH$otkof()u0Kjcb2>5$}_+T(njvVnagkZ`6S{C%e9UirW46@hS%VSL^vjM0NeP9qW6sb?=(HyUW9wucmt~UiDOI(}yGT
zY`rI`X#0j&{Qalwm!09gzNUT7*(JO$6OnPr?Flyf>&xm=mnQE%6x^C8{ix~p(HX9l
zjR%g#F834G6*P^^iaZ~+@PhQ?@U^GjS(VPp=r|)Vk-1~f)0g-ESAThwDX!l6W2xMS
zpVL;nI?1&E|4J7QuhK=YQbR?>{<%EdHg6YCm6>p-qP(X@N$u_BWxpwi?8EkFp&5qJ1
zKHn-^KlhlwnW5ySch6@34|mzN($M_4cfhL4xz0|jj*HqXkF`!b^Zw|jyx!fLM3&xe
zyCNc%CwBGox$hNiTY1e7K2Qr;zh~pNZO6A9PB)%t8mVNhJ8}JX-c|E#D(#hcYy0H)
zYppvq>EP)nc|VfQ{gr?E=W98ejNAp~Wi3jkDN7@+y?xt!bw+%Y-gW1~;Hf%(pTv}3
z>!16T_Tkkr<=*!jSdRO4o|v#}*RCL!V^z7;1-A<}t_cb~dv^UAo7(@u{;53W#T_x<
zkLUTlv2eV6ZCSR(DO11GT_+~I-JCWzvy_q$8Bw;*Md7&*6uJorvJco>v8=m%@oa;n1I834~ibFy?OfU
zwy#4wve8Vw*sgjqO6O~jCoUwS}#lcl8%GF@b>c+Juw^w)t>p9kY8QCG5
zI#*Q+PE3_My=!&z3a`+!=@%ExyOlGSy+(eM@z&W4@*g%FD3)C+XrcGP?!$yb@}hYjt2`E&EZMapqu1&9^_5+J
zYBIvE9X4FqWgNe6#d5(qr&qfsKFw6%zcJAvQdX$;veKtT+ZR3B{kGXxBSdkPtKrHn
zWvM!?e{vCuALbl5x$YB(3FF}gW-fj8sO0EHW-hL$HmtckZ_+Ez$@jt~q-U?$QDpf+
zy^&w}q{;?Q1@?#)1rwd-A30$?bp@~Gtvi1hS1q>c{C9fBry}>={ak-V>iA-K|Ah0n
zo@KwsnAg+2L9gT1g#Rno=QCyP-4f5?8onlSf({NrGq?Tr1JJnys$b&iMEx&n^SK)X7Kzh3i=o+
zC>iwNyZU2kKV7k!TY)W3%bYYH7P?G6Fkd*}e`12lL%l+$j!GBV4?mk4o0^vM@_fGa
zZBIqVD;~kj69OyWs@!6F$K=K>jS6Jp;>^U#e-Vr7$X2*J_H)Z~`
zS8DxPo@X|%jxXC>&g{><Fm{>Nh+5n68P4zc-%t^~7}X-6fqK7sVzX
zia7Jb>fyaB%onE#GQVzkdSvC}2?3w3uQ~bkR#|#(ZA^f~YJ;`4{qCW^SH9AW4YsZN
z(#7(s!fT<|!(A0qrcY32HP5;A#Pa)%jSYo6->v*s_5Jwnn%2+rBlhh0bzy?yVS8Dt
zlJEck{`~Ep4NAfSQI?ej^*rqUZ
zS*tILZ_PBGE!gR~*y&l?3*&dbZZiVI3f+p^_P^Y^tklNY<*C{iktx@=#j{Rhuh}=_
zz2TJ)pI+HB&F9ehyQ;6N>-okty^QnU_j;U~9T94JNR;a?k4>AQd}3twY^R0Oo2$Re
z-L$E%3yFOm*}5mB$eRCa{Q`T*c|5PouGscW7gy3$UfA~J=ikjoH|+^!Wi|9)s}aN8
zqhw>hb$9NZ>)WO?&1SZX4>|kTWq+GC4DI|C%*x
zxcx6Kt7>Q6S^9fb-d*E@mj~>wYw`B-ZdsFi^JMuCHp)XZvSJMHb(x2h7Gw;!A_srTs7yAsT$KL4uUKYdvCyz`ZbRaC6WGX80$
zrxu2X{>=|5umAP0=)F4cdc7%g6m;986ZE?)=XUh{Q~mQ`+4XJHR~gEeET8+Hhj+be
z%Bh*_qO~*&pFV%$BYM@nK~yU!Iy6Aw;-Zl1J=<&rXRKQ_eZ{MKhL#7POI=-M^H)ea
z@g4ptIepUEI;kH$`%~@by9cEo;+^^8yZ?pK>jw1)o_hh}jwP?`_J&$jfwM+UpiAZbj?&kgjAqYfU-?Q|$w(-fPh#SySBDPWcMak@aOBe`
z?by8U`)4g%_FnbZwM$Fpn4YhHzgO~6kuUd;n&RD);~vT#I=%kClECNOd}S{$BQ}1i
z5^klVOq&HGmmOQPa@DG;-MeFp*5~qvU!89zZCrkMiKn2c^TY`v&T7-9$G}%JZT_%J(gqme)F1%=1~X
zV#g_=nHilnU9a?9;&@n_f1jIj{8Pm`fvc{*3oqn$Rs>B->$tvc|I$_8Ls*&azgsc$
z!iQ;KkRl5RQ^xpebiOviU4fxRR^4d#-wXXhaOIH_Pd7j3f&4;YJ
zJ};j!M`h*gMWI`d%2^+daq^6=D7v&W}ZCrN3@`R_k)!U;_Ul-
zrd_JY{e5@Of!*etIJ_VFwaRDk|K|x@pLSq%@}G6KdV6!y?RDqA`M35^yyaTWQq5%(
z;xA76Te*!dM`A@-Z|Q{Nmeqdm)Eb|}Nfpmo{X?R>AbEn@YQfECzog1PR||EX6}+S4
z_RU1wEY0G;J%4UxI@1$!oGc~zoH)NJj*2WT+l!H=WjM`-GAuE
RLIwr~22WQ%mvv4FO#tM^$sqs$

literal 0
HcmV?d00001

diff --git a/radf/radf.cmake b/radf/radf.cmake
new file mode 100644
index 0000000..2b4603e
--- /dev/null
+++ b/radf/radf.cmake
@@ -0,0 +1,32 @@
+# set directories
+set (${PROJECT}_BINARY_DIR bin)
+set (${PROJECT}_SOURCE_DIR src)
+set (${PROJECT}_INCLUDE_DIR include)
+set (${PROJECT}_LIB_DIR lib)
+
+# include_path
+include_directories (${${PROJECT}_INCLUDE_DIR}/${PROJECT}
+                     ${${PROJECT}_SOURCE_DIR})
+# library path
+link_directories (${${PROJECT}_LIB_DIR})
+# executable path
+set (EXECUTABLE_OUTPUT_PATH ${${PROJECT}_BINARY_DIR})
+
+# verbose
+set (CMAKE_VERBOSE_MAKEFILE ON)
+
+# flags
+if ( WITH_DEBUG_MODE )
+  add_definitions ( -DDEBUG_MODE=1 )
+endif ()
+if ( CMAKE_COMPILER_IS_GNUCXX )
+  set (ADD_CXX_FLAGS  "-Wall")
+  set (CMAKE_CXX_FLAGS "-O0 ${ADD_CXX_FLAGS}")
+  set (CMAKE_CXX_FLAGS_DEBUG "-g -O0")
+  set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
+elseif ( MSVC )
+  set (ADD_CXX_FLAGS  "/W4")
+  set (CMAKE_CXX_FLAGS "${ADD_CXX_FLAGS}")
+else ()
+  message ("Unknown compiler")
+endif ()
\ No newline at end of file
diff --git a/radf/radf.doxygen b/radf/radf.doxygen
new file mode 100644
index 0000000..5454313
--- /dev/null
+++ b/radf/radf.doxygen
@@ -0,0 +1,1890 @@
+# Doxyfile 1.8.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should 
+# identify the project. Note that if you do not use Doxywizard you need 
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = radf
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = V.1.0.1
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "radf - program that calculates radial distribution function RDF or radial-angles 
+distribution function RADF"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = /home/arcanis/Documents/github/moldyn/radf/logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ./docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, 
+# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, 
+# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip. Note that you specify absolute paths here, but also 
+# relative paths, which will be relative from the directory where doxygen is 
+# started.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only). 
+# A mapping has the form "name=value". For example adding 
+# "class=itcl::class" will allow you to use the command class in the 
+# itcl::class meaning.
+
+TCL_SUBST              = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given 
+# extension. Doxygen has a built-in mapping, but you can override or extend it 
+# using this tag. The format is ext=language, where ext is a file extension, 
+# and language is one of the parsers supported by doxygen: IDL, Java, 
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, 
+# C++. For instance to make doxygen treat .inc files as Fortran files (default 
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note 
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the 
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all 
+# comments according to the Markdown format, which allows for more readable 
+# documentation. See http://daringfireball.net/projects/markdown/ for details. 
+# The output of markdown processing is further processed by doxygen, so you 
+# can mix doxygen, HTML, and XML commands with Markdown formatting. 
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented 
+# classes, or namespaces to their corresponding documentation. Such a link can 
+# be prevented in individual cases by by putting a % sign in front of the word 
+# or globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate 
+# getter and setter methods for a property. Setting this option to YES (the 
+# default) will make doxygen replace the get and set methods by a property in 
+# the documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
+# unions with only public data fields or simple typedef fields will be shown 
+# inline in the documentation of the scope in which they are defined (i.e. file, 
+# namespace, or group documentation), provided this scope is documented. If set 
+# to NO (the default), structs, classes, and unions are shown on a separate 
+# page (for HTML and Man pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This 
+# cache is used to resolve symbols given their name and scope. Since this can 
+# be an expensive process and often the same symbol appear multiple times in 
+# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too 
+# small doxygen will become slower. If the cache is too large, memory is wasted. 
+# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid 
+# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 
+# symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal 
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if section-label ... \endif 
+# and \cond section-label ... \endcond blocks.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command  , where  is the value of 
+# the FILE_VERSION_FILTER tag, and  is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. To create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
+# containing the references data. This must be a list of .bib files. The 
+# .bib extension is automatically appended if omitted. Using this command 
+# requires the bibtex tool to be installed. See also 
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this 
+# feature you need bibtex and perl available in the search path. Do not use 
+# file names with spaces, bibtex cannot handle them.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = .
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# Note that relative paths are relative to the directory from which doxygen is 
+# run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command  , where  
+# is the value of the INPUT_FILTER tag, and  is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be ignored. 
+# Note that the filter must not add or remove lines; it is applied before the 
+# code is scanned, but not when the output code is generated. If lines are added 
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that 
+# is part of the input, its contents will be placed on the main page 
+# (index.html). This can be useful if you have a project on for instance GitHub 
+# and want reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible  
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is advised to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when 
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If left blank doxygen will 
+# generate a default style sheet. Note that it is recommended to use 
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this 
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional 
+# user-defined cascading style sheet that is included after the standard 
+# style sheets created by doxygen. Using this option one can overrule 
+# certain style aspects. This is preferred over using HTML_STYLESHEET 
+# since it does not replace the standard style sheet and is therefor more 
+# robust against future updates. Doxygen will copy the style sheet file to 
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the style sheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of 
+# entries shown in the various tree structured indices initially; the user 
+# can expand and collapse entries dynamically later on. Doxygen will expand 
+# the tree to such a level that at most the specified number of entries are 
+# visible (unless a fully collapsed tree already exceeds this amount). 
+# So setting the number of entries 1 will produce a full collapsed tree by 
+# default. 0 is a special value representing an infinite number of entries 
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely 
+# identify the documentation publisher. This should be a reverse domain-name 
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+#  
+# Qt Help Project / Custom Filters.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+#  
+# Qt Help Project / Filter Attributes.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
+# at top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it. Since the tabs have the same information as the 
+# navigation tree you can set this option to NO if you already set 
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature. 
+# Since the tree basically has the same information as the tab index you 
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you may also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for 
+# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and 
+# SVG. The default value is HTML-CSS, which is slower, but has the best 
+# compatibility.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to 
+# the MathJax Content Delivery Network so you can quickly see the result without 
+# installing MathJax.  However, it is strongly recommended to install a local 
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     = 
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript 
+# pieces of code that will be used on startup of the MathJax code.
+
+MATHJAX_CODEFILE       = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a web server instead of a web client using Javascript. 
+# There are two flavours of web server based search depending on the 
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for 
+# searching and an index file used by the script. When EXTERNAL_SEARCH is 
+# enabled the indexing and searching needs to be provided by external tools. 
+# See the manual for details.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP 
+# script for searching. Instead the search results are written to an XML file 
+# which needs to be processed by an external indexer. Doxygen will invoke an 
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain 
+# the search results. Doxygen ships with an example indexer (doxyindexer) and 
+# search engine (doxysearch.cgi) which are based on the open source search 
+# engine library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server 
+# which will returned the search results when EXTERNAL_SEARCH is enabled. 
+# Doxygen ships with an example search engine (doxysearch) which is based on 
+# the open source search engine library Xapian. See the manual for configuration 
+# details.
+
+SEARCHENGINE_URL       = 
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed 
+# search data is written to a file for indexing by an external tool. With the 
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the 
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is 
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple 
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID     = 
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen 
+# projects other than the one defined by this configuration file, but that are 
+# all added to the same external search index. Each project needs to have a 
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id 
+# of to a relative location where the documentation can be found. 
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS  = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4 will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images 
+# or other source files which should be copied to the LaTeX output directory. 
+# Note that the files will be copied as-is; there are no commands or markers 
+# available.
+
+LATEX_EXTRA_FILES      = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = YES
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .1
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files 
+# that can be used to generate PDF.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in 
+# front of it. If left blank docbook will be used as the default path.
+
+DOCBOOK_OUTPUT         = docbook
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each 
+# tag file the location of the external documentation should be added. The 
+# format of a tag file without this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths 
+# or URLs. Note that each tag file must have a unique name (where the name does 
+# NOT include the path). If a tag file is not located in the directory in which 
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed 
+# in the related pages index. If set to NO, only the current project's 
+# pages will be listed.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = NO
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that 
+# doxygen generates. When you want a differently looking font you can specify 
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
+# the font, which can be done by putting it in a standard location or by setting 
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font. 
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
+# set the path where dot can find it.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside 
+# the class node. If there are many fields or methods and many nodes the 
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS 
+# threshold limits the number of items for each type to make the size more 
+# manageable. Set this to 0 for no limit. Note that the threshold may be 
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used. If you choose svg you need to set 
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
+# enable generation of interactive SVG images that allow zooming and panning. 
+# Note that this requires a modern browser other than Internet Explorer. 
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/radf/src/CMakeLists.txt b/radf/src/CMakeLists.txt
new file mode 100644
index 0000000..e3486ad
--- /dev/null
+++ b/radf/src/CMakeLists.txt
@@ -0,0 +1,29 @@
+set ("${PROJECT}_VERSION_MAJOR" 1)
+set ("${PROJECT}_VERSION_MINOR" 0)
+set ("${PROJECT}_VERSION_PATCH" 1)
+set ("${PROJECT}_VERSION" ${${PROJECT}_VERSION_MAJOR}.${${PROJECT}_VERSION_MINOR}.${${PROJECT}_VERSION_PATCH})
+
+message (STATUS "${PROJECT}: Version ${${PROJECT}_VERSION}")
+
+# set files
+aux_source_directory (. SOURCES)
+
+# set library
+if (CMAKE_COMPILER_IS_GNUCXX)
+  set (ADDITIONAL_LIB m)
+else ()
+  set (ADDITIONAL_LIB)
+endif()
+
+# message
+message (STATUS "SOURCES: ${SOURCES}")
+
+# link libraries and compile
+add_executable (${PROJECT} ${SOURCES})
+target_link_libraries (${PROJECT} ${ADDITIONAL_LIB})
+
+# install properties
+INSTALL (TARGETS ${PROJECT} DESTINATION bin)
+if (ADD_INCLUDE)
+  INSTALL (FILES ${PUBLIC_HEADERS} DESTINATION include/${PROJECT})
+endif ()
\ No newline at end of file
diff --git a/radf/src/Makefile b/radf/src/Makefile
new file mode 100644
index 0000000..c8c09b1
--- /dev/null
+++ b/radf/src/Makefile
@@ -0,0 +1,21 @@
+PROJECT=RADF
+
+CC=gcc
+CFLAGS=-c -Wall -fPIC
+LDFLAGS=-lm
+SOURCES_DIR=src
+SOURCES=main.c add_main.c coords.c messages.c radf.c radf_proc.c
+OBJECTS=$(SOURCES:.c=.o)
+EXECUTABLE=radf
+
+$(PROJECT): $(SOURCES) $(EXECUTABLE)
+
+$(EXECUTABLE): $(OBJECTS)
+	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
+
+.c.o:
+	$(CC) $(CFLAGS) $< -o $@
+
+clean:
+	rm -f *.o
+
diff --git a/radf/src/add_main.c b/radf/src/add_main.c
new file mode 100644
index 0000000..f37474c
--- /dev/null
+++ b/radf/src/add_main.c
@@ -0,0 +1,211 @@
+/**
+ * @file
+ */
+
+#include 
+
+#include "messages.h"
+
+
+/**
+ * @fn error_checking
+ */
+int error_checking (const float *cell, const int from, const char *input, 
+                    const int num_needed_at, const int *needed_at, 
+                    const char *output, const int to)
+/**
+ * @brief function that checks errors in input variables
+ * @code
+ * error_checking (cell, from, input, num_needed_at, needed_at, output, to);
+ * @endcode
+ * 
+ * @param cell            massive of cell size
+ * @param from            first trajectory step
+ * @param input           input file name
+ * @param num_needed_at   number of needed atom types
+ * @param needed_at       massive of number of needed atom types
+ * @param output          output file name
+ * @param to              last trajectory step
+ * 
+ * @return 11             - error in 'cell'
+ * @return 12             - error in 'input'
+ * @return 13             - error in 'output'
+ * @return 14             - error in 'from' or 'to'
+ * @return 15             - error in 'num_needed_at'
+ * @return 16             - error in 'needed_at'
+ * @return 0              - exit without errors
+ */
+{
+  if ((cell[0] == 0.0) || (cell[1] == 0.0) || (cell[2] == 0.0))
+    return 11;
+  if (input[0] == '#')
+    return 12;
+  if (output[0] == '#')
+    return 13;
+  if ((from == -1) || (to == -1))
+    return 14;
+  if ((num_needed_at != 2) && (num_needed_at != 6))
+    return 15;
+  if (num_needed_at == 6)
+    if ((needed_at[0] == needed_at[1]) || 
+       (needed_at[0] == needed_at[2]) || 
+       (needed_at[1] == needed_at[2]) || 
+       (needed_at[3] == needed_at[4]) || 
+       (needed_at[3] == needed_at[5]) || 
+       (needed_at[4] == needed_at[5]))
+      return 16;
+  
+  return 0;
+}
+
+
+/**
+ * @fn print_message
+ */
+int print_message (const int quiet, FILE *std_output, const int log, FILE *f_log, 
+                   const int mode, const char *str)
+/**
+ * @brief function that prints message in log and stdout
+ * @code
+ * print_message (quiet, stdout, log, f_log, 0, str);
+ * @endcode
+ * 
+ * @param quiet           status of quiet-mode
+ * @param std_output      stdout
+ * @param log             status of log-mode
+ * @param f_log           log file
+ * @param mode            number of message in "messages.c"
+ * @param str             additional text in message
+ * 
+ * @return 0              - exit without errors
+ */
+{
+  if ((quiet != 1) && (std_output != stderr))
+    message (0, mode, str, std_output);
+  if (log == 1)
+    message (1, mode, str, f_log);
+  
+  return 0;
+}
+
+
+/**
+ * @fn printing_head
+ */
+int printing_head (const char *output, const int log, const int quiet, const int matrix, 
+                   const char *input, const int from, const int to, const float *cell, 
+                   const int mode, const double r_min, const double r_max, 
+                   const double r_step, const double ang_min, const double ang_max, 
+                   const double ang_step, const int *needed_at)
+/**
+ * @brief function that prints header in output file
+ * @code
+ * printing_head (output, log, quiet, matrix, input, from, to, cell, mode, r_min, 
+ *                r_max, r_step, ang_min, ang_max, ang_step, needed_at);
+ * @endcode
+ * 
+ * @param output          output file nams
+ * @param log             status of log-mode
+ * @param quiet           status of quiet-mode
+ * @param matrix          status of matrix-mode
+ * @param input           mask of trajectory files
+ * @param from            first trajectory step
+ * @param to              last trajectory step
+ * @param cell            massive of cell size
+ * @param mode            0 - if RDF, 1 - if RDF for center mass, 2 - if RADF
+ * @param r_max           maximal radius
+ * @param r_min           minimal radius
+ * @param r_step          radius step
+ * @param ang_max         maximal angle for RADF
+ * @param ang_min         minimal angle for RADF
+ * @param ang_step        anlge step for RADF
+ * @param needed_at       massive of number of needed atom types
+ * 
+ * @return 0              - exit without errors
+ */
+{
+  FILE *f_out;
+  
+  f_out = fopen (output, "w");
+  fprintf (f_out, "radf ::: V.1.0.1 ::: 2013-07-23\n\n");
+  fprintf (f_out, "CONFIGURATION\n");
+  
+  fprintf (f_out, "LOG=%i\nQUIET=%i\nMATRIX=%i\n", log, quiet, matrix);
+  fprintf (f_out, "MASK=%s\nFIRST=%i\nLAST=%i\n", input, from, to);
+  fprintf (f_out, "CELL=%.4f,%.4f,%.4f\n", cell[0], cell[1], cell[2]);
+  fprintf (f_out, "MODE=%i\n", mode);
+  fprintf (f_out, "R_MIN=%.3f\nR_MAX=%.3f\nR_STEP=%.3f", r_min, r_max, r_step);
+  switch (mode)
+  {
+    case 0:
+      fprintf (f_out, "ATOM=%i-%i\n", needed_at[0], needed_at[1]);
+      break;
+    case 1:
+      fprintf (f_out, "ATOM=%i,%i,%i-%i,%i,%i\n", needed_at[0], needed_at[1], 
+needed_at[2], needed_at[3], needed_at[4], needed_at[5]);
+      break;
+    case 2:
+      fprintf (f_out, "ANG_MIN=%.2f\nANG_MAX=%.2f\nANG_STEP=%.2f\n\
+ATOM=%i,%i,%i-%i,%i,%i\n",ang_min, ang_max, ang_step, needed_at[0], needed_at[1], 
+needed_at[2], needed_at[3], needed_at[4], needed_at[5]);
+      break;
+  }
+  
+  fprintf (f_out, "END\n\n");
+  fclose (f_out);
+  
+  return 0;
+}
+
+
+/**
+ * @fn set_defaults
+ */
+int set_defaults (float *ang_max, float *ang_min, float *ang_step, float *cell, 
+                  int *from, char *input, int *log, int *matrix, float *r_max, 
+                  float *r_min, float *r_step, char *output, int *to, int *quiet)
+/**
+ * @brief function that sets default values of variables
+ * @code
+ * set_defaults (&ang_max, &ang_min, &ang_step, cell, &from, input, &log, &r_max, 
+ *               &r_min, &r_step, output, &to, &quiet);
+ * @endcode
+ * 
+ * @param ang_max         maximal angle for RADF
+ * @param ang_min         minimal angle for RADF
+ * @param ang_step        angle step
+ * @param cell            massive of cell size
+ * @param from            first trajectory step
+ * @param input           mask of trajectory files
+ * @param log             status of log-mode
+ * @param matrix          status of matrix-mode
+ * @param r_max           maximal radius
+ * @param r_min           minimal radius
+ * @param r_step          radius step
+ * @param output          output file name
+ * @param to              last trajectory step
+ * @param quiet           status of quiet-mode
+ * 
+ * @return 0              - exit without errors
+ */
+{
+  int i;
+  
+  *ang_max = 90.0;
+  *ang_min = 0.0;
+  *ang_step = 0.0;
+  for (i=0; i<3; i++)
+    cell[i] = 0.0;
+  *from = -1;
+  input[0] = '#';
+  *log = 0;
+  *matrix = 0;
+  *r_max = 15.0;
+  *r_min = 2.0;
+  *r_step = 0.2;
+  output[0] = '#';
+  *to = -1;
+  *quiet = 0;
+  
+  return 0;
+}
\ No newline at end of file
diff --git a/radf/src/add_main.h b/radf/src/add_main.h
new file mode 100644
index 0000000..d604cda
--- /dev/null
+++ b/radf/src/add_main.h
@@ -0,0 +1,31 @@
+/**
+ * @file
+ */
+
+#ifndef ADD_MAIN_H
+#define ADD_MAIN_H
+
+/**
+ * @fn error_checking
+ */
+/**
+ * @fn print_message
+ */
+/**
+ * @fn printing_head
+ */
+/**
+ * @fn set_defaults
+ */
+
+int error_checking (const float *, const int, const char *, const int, const int *, 
+                    const char *, const int);
+int print_message (const int, FILE *, const int, FILE *, const int, const char *);
+int printing_head (const char *, const int, const int, const int, const char *, 
+                   const int, const int, const float *, const int, const double, 
+                   const double, const double, const double, const double, const double, 
+                   const int *);
+int set_defaults (float *, float *, float *, float *, int *, char *, int *, int *,
+                  float *, float *, float *, char *, int *, int *);
+
+#endif /* ADD_MAIN_H */
\ No newline at end of file
diff --git a/radf/src/coords.c b/radf/src/coords.c
new file mode 100644
index 0000000..e7438cb
--- /dev/null
+++ b/radf/src/coords.c
@@ -0,0 +1,354 @@
+/**
+ * @file
+ */
+
+#include 
+#include 
+
+/**
+ * @fn reading_coords
+ */
+int reading_coords (const int mode, const char *filename, const int type_inter, 
+                    const int *label_atom, const float *cell, int *num_mol, 
+                    int *num_atoms, int *true_label_mol, int *label_mol, 
+                    int *type_atoms, float *coords, char *ch_type_atoms)
+/**
+ * @brief function that reads coordinates from special file format
+ * @code
+ * reading_coords (0, filename, type_inter, label_atom, cell, &num_mol, &num_atoms, 
+ *                 true_label_mol, label_mol, type_atoms, coords, ch_type_atoms);
+ * @endcode
+ * 
+ * @param mode            mode of reading; '1' is statgen, '2' is envir or 
+ *                        frad, '3' is agl
+ * @param filename        input file name
+ * @param type_inter      number of needed atoms
+ *                        (number of needed molecules)
+ * @param label_atom      massive of needed atom types
+ *                        (massive of needed molecules)
+ * @param cell            massive of cell size
+ * @param num_mol         number of molecules
+ * @param num_atoms       number of atoms
+ * @param true_label_mol  massive of true numbers of molecule for atoms
+ * @param label_mol       massive of numbers of molecule for atoms
+ * @param type_atoms      massive of atom types
+ * @param coords          massive of coordinates
+ * @param ch_type_atoms   massive of char atom types
+ * 
+ * @return 1              - file $filename does not exist
+ * @return 2              - unknown mode
+ * @return 0              - exit without errors
+ */
+{
+  char at_symb[32], file_string[256];
+  int atoms, cur_at_num, cur_at_type, cur_mol, i, j, tr_num_atoms, ref_mol, x, y;
+  float cur_coords[3], *not_tr_coords, ref[3];
+  FILE *inp;
+  
+/* cur_*                  temp variables
+ * at_symb                temp variable
+ * file_string            temp string variable
+ * atoms                  total number of atoms in system
+ * tr_num_atoms           number of translated atoms (must be 8*num_atoms)
+ * ref_mol                number of molecule for reference in translation
+ * not_tr_coords          massive of not translated coordinates
+ * ref                    massive of coordinates of reference molecule
+ * inp                    input file
+ */
+  
+/// Work blocks
+  
+  *num_atoms = 0;
+  *num_mol = 0;
+  
+/// 
   reading file 
+ inp = fopen (filename, "r"); + if (inp == NULL) + return 1; + + ref_mol = -1; + fscanf (inp, "%i", &atoms); + not_tr_coords = (float *) malloc (3 * atoms * sizeof (float)); + fgets (file_string, 256, inp); + for (i=0; i translation
+ tr_num_atoms = *num_atoms; + for (i=0; i<*num_atoms; i++) + for (j=0; j<3; j++) + coords[3*i+j] = not_tr_coords[3*i+j]; + +// assign initial value to reference coordinates + ref_mol = label_mol[0]; + for (i=0; i<3; i++) + ref[i] = coords[3*0+i]; + + for (i=0; i<*num_atoms; i++) + { + if (label_mol[i] != ref_mol) + { + ref_mol = label_mol[i]; + for (j=0; j<3; j++) + ref[j] = not_tr_coords[3*i+j]; + } + + for (x=0; x<3; x++) + { + if (ref[x] >= 0.0) +// if xyz >= 0.0 A + { + for (j=0; j<3; j++) + if (j == x) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] - cell[j]; + else + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + else +// if xyz < 0.0 A + { + for (j=0; j<3; j++) + if (j == x) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] + cell[j]; + else + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + } + + for (x=0; x<3; x++) + { + for (y=x+1; y<3; y++) + { + if ((ref[x] >= 0.0) && (ref[y] >= 0.0)) +// if xyz and xyz >= 0.0 A + { + for (j=0; j<3; j++) + if ((j == x) || (j == y)) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] - cell[j]; + else + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[x] < 0.0) && (ref[y] < 0.0)) +// if xyz and xyz < 0.0 A + { + for (j=0; j<3; j++) + if ((j == x) || (j == y)) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] + cell[j]; + else + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + } + + for (y=0; y<3; y++) + if ((ref[x] < 0.0) && (ref[y] >= 0.0)) +// if xyz OR xyz >= 0.0 + { + for (j=0; j<3; j++) + { + if (j == x) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] + cell[j]; + if (j == y) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j] - cell[j]; + if ((j != x) && (j != y)) + coords[3*tr_num_atoms+j] = not_tr_coords[3*i+j]; + } + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + } + + if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) +// if x and y and z >= 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] - cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] >= 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) +// if x and y >= 0.0 A and z < 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] + cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) +// if x and z >= 0.0 A and y < 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] - cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] >= 0.0)) +// if y and z >= 0.0 A and x < 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] - cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] >= 0.0)) +// if x and y < 0.0 A and z >= 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] - cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] < 0.0) && (ref[1] >= 0.0) && (ref[2] < 0.0)) +// if x and z < 0.0 A and y >= 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] - cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] + cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] >= 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) +// if x >= 0.0 A and y and z < 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] - cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] + cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + + if ((ref[0] < 0.0) && (ref[1] < 0.0) && (ref[2] < 0.0)) +// if x and y and z < 0.0 A + { + coords[3*tr_num_atoms+0] = not_tr_coords[3*i+0] + cell[0]; + coords[3*tr_num_atoms+1] = not_tr_coords[3*i+1] + cell[1]; + coords[3*tr_num_atoms+2] = not_tr_coords[3*i+2] + cell[2]; + + label_mol[tr_num_atoms] = label_mol[i]; + type_atoms[tr_num_atoms] = type_atoms[i]; + tr_num_atoms++; + } + } + +///
   free memory 
+ free (not_tr_coords); + + return 0; +} \ No newline at end of file diff --git a/radf/src/coords.h b/radf/src/coords.h new file mode 100644 index 0000000..6bdf48e --- /dev/null +++ b/radf/src/coords.h @@ -0,0 +1,16 @@ +/** + * @file + */ + +#ifndef COORDS_H +#define COORDS_H + +/** + * @fn reading_coords + */ + +int reading_coords (const int, const char *, const int, const int *, + const float *, int *, int *, int *, int *, int *, float *, + char *); + +#endif /* COORDS_H */ \ No newline at end of file diff --git a/radf/src/main.c b/radf/src/main.c new file mode 100644 index 0000000..d85bca0 --- /dev/null +++ b/radf/src/main.c @@ -0,0 +1,414 @@ +/** + * @file + */ +/** + * @mainpage radf + * @image latex ./logo.png + * + * @section intro_sec Introduction + * + * About this program: + * + * + * Developer: + * + * License: + * + * + * @section How-To-Use How to use + * Usage: + *
+ * radf -i INPUT -s FIRST,LAST -c X,Y,Z -a ... -o OUTPUT [ -r MIN,MAX ] [ -rs R_STEP ] 
+ *                 [ -a MIN,MAX ] [ -as ANG_STEP ] [ -m ] [ -l LOGFILE ] [ -q ] [ -h ]
+ * Parametrs:
+ *    -i          - mask of input files
+ *    -s          - trajectory steps (integer)
+ *    -c          - cell size (float), A
+ *    -a          - atom types (integer). Format: 'ATOM1-ATOM2' or 'A1,A2,A3-B1,B2,B3' 
+ *                  (will enable RDF calculation for center mass automaticaly)
+ *    -o          - output file name
+ *    -r          - minimal and maximal radii for analyze (float), A. Default is '2.0,15.0'
+ *    -rs         - radius step for analyze (float), A. Default is '0.2'
+ *    -a          - minimal and maximal angles for analyze (float), deg. Default is '0.0,90.0'
+ *    -as         - angle step for analyze (float), deg. This option will enable RADF 
+ *                  calculation automaticaly
+ *    -m          - matrix output enable
+ *    -l          - log enable
+ *    -q          - quiet enable
+ *    -h          - show this help and exit
+ * 
+ * + * @page Install + * + * @section Requirements Requirements + * The application radf requires the following external stuff: + * - cmake >= 2.8 + * - gcc >= 4.8 + * + * @section How-To How to install + * + * @subsection Linux Linux + * @code + * mkdir build && cd build + * cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ../ + * make + * make install + * @endcode + * + * @subsection Windows Windows + * @code + * create project file using 'cmake' + * compile project + * @endcode + * You may also download compiled executable file for Win_x86. + * + * @page Changelog + * V.1.0.1 (2013-07-27) + * * initial release + */ + +#include +#include +#include +#include + +#include "add_main.h" +#include "coords.h" +#include "messages.h" +#include "radf.h" +#include "radf_proc.h" + + +/** + * @fn main + */ +int main(int argc, char *argv[]) +/** + * @return 1 - error in error_checking + * @return 2 - input file does not exist + * @return 3 - memory error + * @return 0 - exit without errors + */ +{ + char filename[256], tmp_str[2048]; + int error, i, j; + FILE *f_inp, *f_log; + + char input[256], logfile[256], output[256]; + float ang_max, ang_min, ang_step, cell[3], *coords, r_max, r_min, r_step; + int from, *label_mol, log, matrix, mode, num_atoms, num_mol, num_needed_at, + needed_at[6], quiet, *radf, step, to, *true_label_mol, *type_atoms; + +/* input input file name + * logfile log file name + * output output file name + * + * ang_max maximal angle for RADF + * ang_min minimal angle for RADF + * ang_step anlge step for RADF + * cell massive of cell size + * coords massive of coordinates + * r_max maximal radius + * r_min minimal radius + * r_step radius step + * + * from first trajectory step + * label_mol massive of numbers of molecule for atoms + * log status of log-mode + * matrix status of matrix-mode + * mode 0 - if RDF, 1 - if RDF for center mass, 2 - if RADF + * num_atoms number of atoms + * num_mol number of molecules + * num_needed_at number of needed atom types + * needed_at massive of number of needed atom types + * quiet status of quiet-mode + * radf not normed RADF + * step $(to - from + 1) + * to last trajectory step + * true_label_mol massive of true numbers of molecule for atoms + * type_atoms massive of atom types + */ + + set_defaults (&ang_max, &ang_min, &ang_step, cell, &from, input, &log, &matrix, + &r_max, &r_min, &r_step, output, &to, &quiet); + + for (i=1; i to) + { + to += from; + from = to - from; + to -= from; + } + step = to - from + 1; + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'c')) +// cell size + { + sscanf (argv[i+1], "%f,%f,%f", &cell[0], &cell[1], &cell[2]); + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'a') && (argv[i][2] == 't')) +// atom types + { + num_needed_at = 2; + for (j=0; j r_max) + { + r_min += r_max; + r_max = r_min - r_max; + r_min -= r_max; + } + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'r') && (argv[i][2] == 's')) +// radius step + { + sscanf (argv[i+1], "%f", &r_step); + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'a') && (argv[i][2] == '\0')) +// angles + { + sscanf (argv[i+1], "%f,%f", &ang_min, &ang_max); + if (ang_min > ang_max) + { + ang_min += ang_max; + ang_max = ang_min - ang_max; + ang_min -= ang_max; + } + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'a') && (argv[i][2] == 's')) +// angle step + { + sscanf (argv[i+1], "%f", &ang_step); + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'm')) +// matrix mode + { + matrix = 1; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'l')) +// log mode + { + log = 1; + strcpy (logfile, argv[i+1]); + i++; + } + else if ((argv[i][0] == '-') && (argv[i][1] == 'q')) +// quiet mode + { + quiet = 1; + } + } + + if (log == 1) + f_log = fopen (logfile, "w"); + + print_message (quiet, stdout, log, f_log, 0, argv[0]); + print_message (quiet, stdout, log, f_log, 1, argv[0]); + +// error check + error = error_checking (cell, from, input, num_needed_at, needed_at, output, to); + if (error != 0) + { + print_message (quiet, stderr, log, f_log, 17, argv[0]); + return 1; + } + + print_message (quiet, stdout, log, f_log, 2, argv[0]); + +// processing +// initial variables +// set mode + if ((num_needed_at == 6) && (ang_step != 0.0)) + mode = 2; + else if (num_needed_at == 6) + mode = 1; + else if (num_needed_at == 2) + mode = 0; + + sprintf (filename, "%s.%03i", input, from); + print_message (quiet, stdout, log, f_log, 3, filename); + f_inp = fopen (filename, "r"); + if (f_inp == NULL) + { + print_message (quiet, stderr, log, f_log, 18, filename); + return 2; + } + fscanf (f_inp, "%i", &num_atoms); + fclose (f_inp); + coords = (float *) malloc (2 * 3 * 8 * num_atoms * sizeof (float)); + label_mol = (int *) malloc (2 * 8 * num_atoms * sizeof (int)); + if (mode == 2) + { + i = (r_max - r_min) / r_step; + j = (ang_max - ang_min) / ang_step; + i *= j; + } + else + i = (r_max - r_min) / r_step; + radf = (int *) malloc (i * sizeof (int)); + for (j=0; j +#include + + +/** + * @fn message + */ +int message (const int log, const int mode, const char *text, FILE *output) +/** + * @brief function that prints messages to output + * @code + * message (log, mode, text, output); + * @endcode + * + * @param log equal to 1 if print to logfile + * @param mode number of message + * @param text additional text + * @param output output file (may be stdout) + * + * @return 1 - unknown mode + * @return 0 - exit without errors + */ +{ + char out[4096]; + + if (log == 1) + { + char time_str[256]; + + time_t t = time (NULL); + struct tm* aTm = localtime (&t); + sprintf (time_str, "[%04d-%02d-%02d %02d:%02d:%02d] [%2i]: ", aTm->tm_year+1900, + aTm->tm_mon+1, aTm->tm_mday, aTm->tm_hour, aTm->tm_min, aTm->tm_sec, mode); + fputs (time_str, output); + } + + switch (mode) + { + case 0: + sprintf (out, "Start program: '%s'\n", text); + break; + case 1: + sprintf (out, "Checking errors\n"); + break; + case 2: + sprintf (out, "Errors are not detected\n"); + break; + case 3: + sprintf (out, "Initialization of variables from file '%s'\n", text); + break; + case 4: + sprintf (out, "%6cAglomerate was selected successfully\n", ' '); + break; + case 5: + sprintf (out, "Initial parametrs: \n%s", text); + break; + case 6: + sprintf (out, "Processing\n"); + break; + case 7: + sprintf (out, "Open file: '%s'\n", text); + break; + case 8: + sprintf (out, "%s", text); + break; + case 9: + sprintf (out, "%6cSize of variables was changed successfully\n", ' '); + break; + case 10: + sprintf (out, "%6cConnectivity matrix was created successfully\n", ' '); + break; + case 11: + sprintf (out, "%6cConnectivity matrix was processed successfully\n", ' '); + break; + case 12: + sprintf (out, "%6cResult was printed to file '%s' successfully\n", ' ', text); + break; + case 13: + sprintf (out, "End of processing\n"); + break; + case 14: + sprintf (out, "Print result to file '%s'\n", text); + break; + case 15: + sprintf (out, "Free memory\n"); + break; + case 16: + sprintf (out, "Exiting without errors\n"); + break; + case 17: + sprintf (out, "Something wrong!\nSee '%s -h' for more details\n", text); + break; + case 18: + sprintf (out, "File '%s' not found\nError\n", text); + break; + case 19: + sprintf (out, "Memory error\n"); + break; + case 20: + sprintf (out, "%6cCenter of molecules was set successfully\n", ' '); + break; + case 21: + sprintf (out, "%6cEnvironment was selected successfully\n", ' '); + break; + case 22: + sprintf (out, "%6cRADF was appended successfully\n", ' '); + break; + default: + return 1; + break; + } + + fputs (out, output); + return 0; +} \ No newline at end of file diff --git a/radf/src/messages.h b/radf/src/messages.h new file mode 100644 index 0000000..6e6ed21 --- /dev/null +++ b/radf/src/messages.h @@ -0,0 +1,14 @@ +/** + * @file + */ + +#ifndef MESSAGES_H +#define MESSAGES_H + +/** + * @fn message + */ + +int message (const int, const int, const char *, FILE *); + +#endif /* MESSAGES_H */ \ No newline at end of file diff --git a/radf/src/radf.c b/radf/src/radf.c new file mode 100644 index 0000000..c9e60b1 --- /dev/null +++ b/radf/src/radf.c @@ -0,0 +1,302 @@ +/** + * @file + */ + +#include + +// pi +#if !defined __USE_BSD && !defined __USE_XOPEN +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif /* __USE_BSD && __USE_XOPEN */ +#endif /* M_PI */ + + +/** + * @fn search_rdf + */ +int search_rdf (const int num_atoms, const int *type_atoms, const int *label_mol, + const float *coords, const double r_min, const double r_max, + const double r_step, int *radf) +/** + * @brief function that searchs molecule for rdf massive + * @code + * search_rdf (num_atoms, type_atoms, label_mol, coords, r_min, r_max, r_step, radf); + * @endcode + * + * @param num_atoms number of atoms + * @param type_atoms massive of atom types + * @param label_mol massive of numbers of molecule for atoms + * @param coords massive of coordinates + * @param r_min minimal radius + * @param r_max maximal radius + * @param r_step radius step + * @param radf not normed RDF + * + * @return 0 - exit without errors + */ +{ + float r; + int i, j, k; + +/* r radius + */ + + for (i=0; i= r_min) && (r <= r_max)) + { + k = (r - r_min) / r_step; + radf[k]++; + } + } + + return 0; +} + + +/** + * @fn search_rdf_centr + */ +int search_rdf_centr (const int num_atoms, const int *type_atoms, const int *label_mol, + const float *coords, const double r_min, const double r_max, + const double r_step, int *radf) +/** + * @brief function that searchs molecule for rdf massive by centered coordinates + * @code + * search_rdf_centr (num_atoms, type_atoms, label_mol, coords, r_min, r_max, r_step, + * radf); + * @endcode + * + * @param num_atoms number of atoms + * @param type_atoms massive of atom types + * @param label_mol massive of numbers of molecule for atoms + * @param coords massive of coordinates + * @param r_min minimal radius + * @param r_max maximal radius + * @param r_step radius step + * @param radf not normed RDF + * + * @return 0 - exit without errors + * @return 1 - error in set center (missing atoms) + */ +{ + float r, cur_coords[2][3]; + int coef, cur_at, i, j, k, l; + +/* cur_coords centered coordinates + * r radius + * coef ==1 if j=num_atoms + * cur_at number of founded atoms + */ + + for (i=0; i= r_min) && (r <= r_max)) + { + k = (r - r_min) / r_step; + radf[k]++; + } + } + + return 0; +} + + +/** + * @fn search_radf + */ +int search_radf (const int num_atoms, const int *type_atoms, const int *label_mol, + const float *coords, const double r_min, const double r_max, + const double r_step, const double ang_min, const double ang_max, + const double ang_step, int *radf) +/** + * @brief function that searchs molecule for radf massive + * @code + * search_radf (num_atoms, type_atoms, label_mol, coords, r_min, r_max, r_step, + * ang_min, ang_max, ang_step, radf); + * @endcode + * + * @param num_atoms number of atoms + * @param type_atoms massive of atom types + * @param label_mol massive of numbers of molecule for atoms + * @param coords massive of coordinates + * @param r_min minimal radius + * @param r_max maximal radius + * @param r_step radius step + * @param ang_min minimal angle + * @param ang_max maximal angle + * @param ang_step anlge step + * @param radf not normed RADF + * + * @return 0 - exit without errors + * @return 1 - error in set center (missing atoms) + */ +{ + float ang, cos_ang, cur_coords[2][3], normal[2][3], r; + int coef, cur_at, i, j, k, l, n, n_max, plane_index[6]; + +/* ang angle + * cur_coords centered coordinates + * normal normal to planes + * r radius + * coef ==1 if j=num_atoms + * cur_at number of founded atoms + * n_max range of angles + * plane_index atoms forming plane + */ + + for (i=0; i 90) + ang = 180 - ang; + + n_max = (ang_max - ang_min) / ang_step; + if ((r >= r_min) && (r <= r_max)) + if ((ang >= ang_min) && (ang <= ang_max)) + { + k = (r - r_min) / r_step; + n = (ang - ang_min) / ang_step; + radf[n_max*k+n]++; + } + } + + return 0; +} diff --git a/radf/src/radf.h b/radf/src/radf.h new file mode 100644 index 0000000..dca5716 --- /dev/null +++ b/radf/src/radf.h @@ -0,0 +1,26 @@ +/** + * @file + */ + +#ifndef RADF_H +#define RADF_H + +/** + * @fn search_rdf + */ +/** + * @fn search_rdf_centr + */ +/** + * @fn search_radf + */ + +int search_rdf (const int, const int *, const int *, const float *, const double, + const double, const double, int *); +int search_rdf_centr (const int, const int *, const int *, const float *, const double, + const double, const double, int *); +int search_radf (const int, const int *, const int *, const float *, const double, + const double, const double, const double, const double, const double, + int *); + +#endif /* RADF_H */ \ No newline at end of file diff --git a/radf/src/radf_proc.c b/radf/src/radf_proc.c new file mode 100644 index 0000000..64c23dd --- /dev/null +++ b/radf/src/radf_proc.c @@ -0,0 +1,138 @@ +/** + * @file + */ + +#include +#include + +// pi +#if !defined __USE_BSD && !defined __USE_XOPEN +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif /* __USE_BSD && __USE_XOPEN */ +#endif /* M_PI */ + + +/** + * @fn print_result + */ +int print_result (const char *output, const int matrix, const int mode, + const int step, const int num_atoms, const double r_min, + const double r_max, const double r_step, const double ang_min, + const double ang_max, const double ang_step, const float *cell, + const int *radf) +/** + * @brief function that print result to output file + * @code + * print_result (output, matrix, mode, step, num_atoms, r_min, r_max, r_step, ang_min, + * ang_max, ang_step, cell, radf); + * @endcode + * + * @param output output file name + * @param matrix status of matrix-mode + * @param mode 1 - if RDF, 2 - if RDF for center mass, 3 - if RADF + * @param step $(to - from + 1) + * @param num_atoms number of atoms + * @param r_min minimal radius + * @param r_max maximal radius + * @param r_step radius step + * @param ang_min minimal angle + * @param ang_max maximal angle + * @param ang_step angle step + * @param cell cell size + * @param radf not normed RADF + * + * @return 0 - exit without errors + */ +{ + float ang, dv, norm, r, ro; + int i, j, k, n; + FILE *f_out; + +/* ang angle + * dv volume + * norm normed RDF + * r radius + * ro density + * f_out output file + */ + + f_out = fopen (output, "a"); + fprintf (f_out, "SUMMARY STATISTIC\n"); + + switch (mode) + { + case 0: + if (matrix == 0) + fprintf (f_out, "| r | dV | RDF | RDFnorm |\n------------------------------------------\n"); + k = (r_max - r_min) / r_step; + for (i=0; i * statgen -i INPUT -s FIRST,LAST -c X,Y,Z -a ... -r ... -o OUTPUT [ -g DEPTH ] - * [ -l LOGFILE ] [ -q ] [ -h ] + * [ -l LOGFILE ] [ -q ] [ -h ] * * Parametrs: * -i - mask of input files @@ -78,7 +78,6 @@ #include "add_main.h" #include "coords.h" -#include "int2char.h" #include "messages.h" #include "stat_print.h" #include "stat_select.h" @@ -98,7 +97,7 @@ int main (int argc, char *argv[]) */ { char filename[256], tmp_str[2048]; - int error, i, index, j, k, label[2]; + int error, i, index, j, label[2]; float label_fl; FILE *f_inp, *f_log; @@ -164,7 +163,8 @@ int main (int argc, char *argv[]) sprintf (tmp_str, "%s Evgeniy Alekseev aka arcanis\n", tmp_str); sprintf (tmp_str, "%s E-mail : esalexeev@gmail.com\n\n", tmp_str); sprintf (tmp_str, "%sUsage:\n", tmp_str); - sprintf (tmp_str, "%sstatgen -i INPUT -s FIRST,LAST -c X,Y,Z -a ... -r ... -o OUTPUT [ -g DEPTH ] [ -l LOGFILE ] [ -q ] [ -h ]\n\n", tmp_str); + sprintf (tmp_str, "%sstatgen -i INPUT -s FIRST,LAST -c X,Y,Z -a ... -r ... -o OUTPUT [ -g DEPTH ]\n", tmp_str); + sprintf (tmp_str, "%s [ -l LOGFILE ] [ -q ] [ -h ]\n\n", tmp_str); sprintf (tmp_str, "%sParametrs:\n", tmp_str); sprintf (tmp_str, "%s -i - mask of input files\n", tmp_str); sprintf (tmp_str, "%s -s - trajectory steps (integer)\n", tmp_str); @@ -298,13 +298,7 @@ int main (int argc, char *argv[]) // processing // initial variables - k = strlen (input); - strcpy (filename, input); - filename[k] = '.'; - filename[k+1] = conv (from, 3); - filename[k+2] = conv (from, 2); - filename[k+3] = conv (from, 1); - filename[k+4] = '\0'; + sprintf (filename, "%s.%03i", input, from); print_message (quiet, stdout, log, f_log, 3, filename); f_inp = fopen (filename, "r"); if (f_inp == NULL) @@ -327,15 +321,15 @@ int main (int argc, char *argv[]) stat_all = (int *) malloc (2 * sizeof (int)); // error checking if ((coords == NULL) || - (label_mol == NULL) || - (true_label_mol == NULL) || - (type_agl == NULL) || - (type_atoms == NULL) || - (agl == NULL) || - (connect == NULL) || - (num_mol_agl == NULL) || - (stat == NULL) || - (stat_all == NULL)) + (label_mol == NULL) || + (true_label_mol == NULL) || + (type_agl == NULL) || + (type_atoms == NULL) || + (agl == NULL) || + (connect == NULL) || + (num_mol_agl == NULL) || + (stat == NULL) || + (stat_all == NULL)) { print_message (quiet, stderr, log, f_log, 19, argv[0]); return 3; @@ -371,15 +365,12 @@ int main (int argc, char *argv[]) for (i=from; i