HTTPS SSH
libatomprobe is a C++ library to help build atom probe software.

It contains data structures, file readers and algorithms which are useful
in processing the point data generated by atom probe tomography. Using
it, you can write C++ programs that use features within the library


To build this library, you need to have a compiler - the same one as
you use to build your program. You then need to "link" to it. Under
gcc/clang, this is achieved by passing "-latomprobe" during compilation
of your program, after installing the library.

Contributing
============
We are really intrested to hear what you have done with this library,
and any feedback or additions that you may  have made. Please contact
us on our forums to tell us what neat things you have done:

http://sourceforge.net/p/apttools/discussion/

We are particularly excited to hear from anyone who might have new
modules to contribute

Licence
=======
libatomprobe is distributed under the terms of the GNU General Public
Licence, version 3.0 or greater.

You may use this in your application, provided that if you distribute
your program, you make your program available under the same terms. These
terms are fully detailed in the COPYING file in this folder. 

In summary, two important points are that you need to make the source code
for your program, and this library available to end users. End users must
also be free to similarly distribute the program You may not use technical
measures to prevent users from modifying or compiling the program.

Wikipedia Page:
	https://en.wikipedia.org/wiki/GNU_General_Public_License


Dependencies:
============
You need to install the development libraries for these (usually *-dev or *-devel):
	gsl
	qhull
	libxml2
	libiconv

You need to install the following helper programs:
	g++
	cmake


Compiling Under Linux
=====================
Debian/Ubuntu/Mint:
	In the following the "#" is not part of the command. Do not type it in, or cut and paste it.
	it simply shows which lines are commands.

	-install the dependencies using this command as administrator (root):
		# apt-get install libgsl-dev libqhull-dev libxml2-dev libiconv-dev g++ cmake

Fedora/redhat/centos
	dnf install gsl-devel qhull-devel libxml2-devel libiconv-devel 


After installing dependencies:

	- In the folder, tell cmake to perform checks and set up the compile framework:
		# cmake .
	
	- Compile the library
		# make

	- Install the library
		# make install



Compiling Under OSX
===================

We recommend using "MacPorts" to obtain the dependencies. First install
MacPorts, then install the dependencies like so:
sudo port install gsl qhull cmake gcc libxml2

	cmake .
	make

Compiling Under Cygwin (For windows)
=====================
A windows version of the library  can be compiled, to enable running
the program under windows.

Use cygwin (cygwin.com) to install the following libraries
	libxml2
	gsl
	qhull

You will also  need these programs to compile the program
	g++
	cmake
	make

To compile, run :
	cmake .
	make

This generates a .dll. You *must* either 

	install the library, or 
	have this in the library path (eg same folder) as the program you are trying to run

If you do not  do this, the program will fail to load, due to a missing
dll.

As the libatomprobe library built this way depends on other cygwin
libraries, you *should* run any generated programs form the cygwin
prompt

Testing the built library
===========

Tests are in the test folder, e.g.
test/unittests

you can run the unit tests with
./unittests

This should provide some output and, ideally, not fail.


Debugging vs. Release
===========

By default, the library is built in a debug mode, where extra checks are
performed at run time. This means the library runs slower, but you are
more likely to catch bugs in the usage of the library, and internally
within the library.

To build a "release" (non-debug) version (which is faster), use the
following cmake command:

	cmake -DCMAKE_BUILD_TYPE=Release .

If you built the library in debug mode, you must also build your program
with the "DEBUG" define enabled, when using libatomprobe. If you fail
to do this, your program may experience random crashes whenever you use
code involving libatomprobe.

You can enable extra debugging with "ubsan", if using gcc >=4.9