00001 ///////////////////////////////////////////////////////////////////////////// 00002 /// 00003 /// \file 00004 /// 00005 /// The main page for the source code documentation. 00006 /// 00007 ///////////////////////////////////////////////////////////////////////////// 00008 /** 00009 00010 \mainpage 00011 00012 00013 \section intro Introduction 00014 00015 This software is developed within the framework of the 00016 <a href="http://www.pawelpilarczyk.com/cohomology/">Computational 00017 Cohomology</a> project. 00018 It is aimed at constructing the chain contraction 00019 of a cellular complex, and using this means to compute 00020 the homology, cohomology, and related operations 00021 on cubical or simplicial complexes. 00022 This software is currently under development, 00023 and a limited number of features are available at this time. 00024 In this version, the ring of coefficients is assumed 00025 to be the integers modulo 2, which best reflects 00026 the combinatorial nature of the approach. 00027 00028 00029 \section compilation Compilation 00030 00031 The compilation of the library and the programs is quite intuitive. 00032 In the directory into which the source code has been unpacked, 00033 one has to run the command <em>make</em>. 00034 Since this software requires 00035 the <a href="http://chomp.rutgers.edu/">CHomP library</a>, 00036 it must be downloaded and compiled first, 00037 and the path to where it is located must be corrected 00038 in the <em>makefile</em> if necessary. 00039 00040 In Linux all the necessary utilities 00041 should be present in the system by default 00042 (the GNU C++ compiler and the GNU make), 00043 but in Windows one should install them first (e.g. from the 00044 <a href="http://www.bloodshed.net/dev/devcpp.html">Dev-C++</a> 00045 distribution). 00046 For convenience, pre-compiled binary programs for some systems 00047 may be provided at the project website. 00048 00049 00050 \section library Software Library 00051 00052 The main part of this software is provided in terms 00053 of a C++ library, programmed as templates of classes 00054 and functions for optimal flexibility (so-called 00055 generic programming technique). 00056 All the header files of which the programming library consists 00057 are located in the subdirectory <em>chaincon</em>. 00058 00059 00060 \section programs Programs 00061 00062 The programs included in this package constitute a simple interface 00063 to the main functions of the C++ programming library. 00064 These are command-line utilities, to be run from a text terminal window 00065 (a.k.a. command prompt). 00066 Each program displays brief usage information 00067 when called without arguments. 00068 The programs read data from files in the text format 00069 and display all the results to the output stream, 00070 which is the screen by default, 00071 but can also be logged to a file using the "--log filename" 00072 command-line argument. 00073 00074 00075 \section data Data Formats 00076 00077 The classes defined in the software library 00078 are equipped with reading and writing operators 00079 that allows the conversion of the data to and from 00080 human-readable and intuitive text format. 00081 This format is in most part compatible 00082 with the CHomP software, and is described below. 00083 In particular, any line beginning with the semicolon ';' 00084 is treated as a comment and is skipped. 00085 00086 <b>Cubical complexes</b> are defined by listing all the cubical cells 00087 line by line, one cell per line. 00088 Faces of cells must be either omitted, 00089 or listed later than the corresponding cells. 00090 A cubical cell is defined as the Cartesian product 00091 of intervals of length 1 or 0 (degenerate ones), 00092 e.g. <em>[1,2]x[0]x[-3,-2]x[3]</em> (note the brackets, 00093 the commas, the letter 'x', and the way of defining degenerate intervals). 00094 If the dimension of the cell equals the dimension 00095 of the embedding space then it can be defined 00096 by listing the minimal coordinates of the vertices, 00097 e.g. <em>(1,0,-3,3)</em> (note the parentheses and the commas). 00098 00099 <b>Simplicial complexes</b> are defined by listing all the simplices 00100 line by line, one simplex per line. 00101 Faces of simplices must be either omitted, 00102 or listed later than the corresponding simplices. 00103 A simplex is defined as a comma-separated list of numbers of its vertices, 00104 e.g. <em>(1,3,18)</em>. 00105 00106 Several examples (see below) illustrate how these data formats 00107 can be actually used in practice, and also how the provided 00108 command-line programs can be used. 00109 00110 00111 \section examples Examples 00112 00113 There are some examples (to be downloaded separately) 00114 which may be helpful if one wants to quickly learn 00115 how the command-line programs should be used. 00116 Running these examples also gives some hint on the effectiveness 00117 of the software, and shows what kind of information it computes. 00118 The examples were prepared in such a way that a variety of features 00119 can be illustrated. 00120 Each example has a description in a text file, 00121 and a shell script (a.k.a. batch file) 00122 which runs a few commands and displays brief explanations of all the steps. 00123 A GUI Python script <em>examples.py</em> has been prepared, 00124 which can be used to browse the examples 00125 prepared for this piece of software. 00126 The list of examples is continually expanding. 00127 Contributions of new examples or suggestions are welcome. 00128 00129 00130 \section license License 00131 00132 This software package is published under the terms 00133 of the <a href="http://www.gnu.org/licenses/gpl.html">GNU 00134 General Public License, version 3</a>. 00135 00136 00137 \section remark Remarks 00138 00139 This documentation is currently under construction. 00140 Although many classes and functions already have their descriptions, 00141 I am aware of the fact that these descriptions are not as detailed 00142 as the user might wish to have. Therefore, this documentation 00143 has been generated in such a way that it includes the entire source code 00144 which sould be consulted if in doubt. The code has many additional 00145 comments which shed light on what it actually does. 00146 00147 I am still working on making this documentation more informative 00148 and complete, but it takes a lot of time. 00149 Therefore, I apologize for any inconvenience caused by the incomplete 00150 documentation and I invite to browse the source code instead, 00151 or ask me specific questions by email. 00152 00153 Pawel Pilarczyk 00154 00155 **/