CraneFoot

CranefootDrawing a family tree seems easy at first, but if there are hundreds or more members or families, the task quickly becomes impractical to do by hand. CraneFoot is a lightweight program designed primarily for geneticists but you can use it for other pedigree visualization as well.Cranefoot is able to process hundreds of families and thousands of individuals at once and wraps the results into a single document. It can cope with several marriages (two people who have at least one child) and cycles in the family graphs. Furthermore, if the pedigree file contains errors, such as false gender or duplicate entries, the user is notified of the problem. Unlike some other pedigree applications, Cranefoot employs a deterministic and thus very efficient drawing algorithm for each branch of the family tree. In fact, in many cases the layout step is almost linearly dependent on the number of nodes. For pedigrees under 1000 nodes the computational load is negligible with modern computers.

The principle behind the design of Cranefoot was simple: Quality before quantity. Scientists often make the mistake of adding features as soon as they get the program to run correctly for some input. This leads to incomprehensible and unmanageable sprawling code that is of little use to anyone. We have actively avoided such a tendency – and released the source code – with the hope that other people can also enjoy the results.

FinnDiane Study Group
Folkhälsan Research Center

Links
Online version
Documentation
Source code

References
High-throughput pedigree drawing. Eur J Hum Gen 13:987-989.

Version history
Current code is compatible with gcc 4.3.2 compiler (tested on Ubuntu 8.10).

2009-02-06 Cranefoot v3.2
Dharmalingam Ganesan from the Fraunhofer Center Maryland USA has analysed the code architecture of Cranefoot. The document (which is well written and very interesting) is a useful reference for anyone who wishes to incorporate the algorithms into their own software. The PDF-file is bundled with other documentation and source code and you can get it from the download page.

2008-12-12 Cranefoot v3.2
The sort() declaration problem is now fixed.

2007-03-21 Cranefoot v3.2
A typing error in ‘familyobject.h’ caused compilation problems on rare occasions. Fixed in Family 1.0.1.

2006-10-08 Cranefoot v3.2
If there are no text variables but the tracer variable is detected, the program crashes. If this happens, just remove the tracer variable since it has no effect without text. Fixed in v3.2.1.

2006-10-06 Cranefoot v3.2
Unlike it says in the user’s guide, the vertical order of strings below a node seems not to be determined by the order in the configuration file. Fixed in v3.2.1.

2006-10-04 Cranefoot v3.1
For some duplicates, the halos were incorrectly drawn. This is fixed in v3.2, thanks to A. Gurau.

2006-10-04 Cranefoot v3.2
Some bugfixes and an interface update. Text below nodes is now exclusively and explicitly controlled by ‘TextVariable’. The short-lived ‘LabelVariable’ is no longer used and the node name is no longer automatically printed.

2006-10-04 Cranefoot C#
C# interface to the basic Cranefoot classes by Alexandru Gurau is now available as an add-on.

2006-08-24 Cranefoot v3
The complete source code is now available for download. The software is under the GNU General Public License so you are free to redistribute and modify the code.

2006-07-22 Cranefoot v3.1
Some minor improvements: Sibling parents should not cause problems other than a few warnings. Furthermore, the order of siblings in a subtree can now be manually specified by using the new AgeVariable’. The shape of node symbols can be set with ‘ShapeVariable’ and the names of individuals can be altered in the drawing with ‘LabelVariable’.

2006-02-25 Cranefoot v3
The third generation is now available as online service, too.

2006-02-12 Cranefoot v3.0
The first documented release of the third generation. Some minor tweaks have been made since the beta version, and a new user’s guide was written.

2006-07-24 Cranefoot v3.1
Initially, AgeVariable could only be used from the pedigree file. This is now fixed so any input file can be used.

2006-07-24 Cranefoot v3.1
Some inbred pedigrees with multiple sibling marriages caused a crash, the exact cause of which is still unknown. The section of code that inhabited the bug is now completely rewritten and should not cause similar problems.

2006-02-22 Cranefoot v3.0
A visual enhancement to the way text is rendered in PostScript was found to cause an excessively large PDF-file after conversion. The effect is now removed.

2005-12-01 Cranefoot v2.3
A bug was detected in the core algorithm in v2.3 that might cause problems if the ‘SibCheck’ parameter is off. As a short-time remedy, please split sibling parents into two mating units to get around the sib check. The core of the upcoming v3 is built differently and will not have this fault.

2005-12-01 Cranefoot v2.3
Problems might occur for some pedigrees with a descendant mating with one of its ancestors. Work is being done to avoid such issues in future releases.

2005-12-01 Cranefoot v2.4
A bug was detected in the core algorithm of v2.4 that causes occasional program terminations. For those who encounter errors, please use v2.3 until a new release is available.

2005-12-14 Cranefoot v3.beta
The first version of the third generation. Most of the code has been restructured and the node positioning was augmented with a simulated annealing step that spreads the branches on the canvas. The interface was updated to be more consistent with the Himmeli software.

2005-12-01 Geranium
The Geranium interface was simplified by using the C++ standard template library.

2005-12-01 Cranefoot v2.4
Due to the problems in the core algorithm, v2.4 is no longer supported and will be replaced by the upcoming third generation.

2005-05-15 Cranefoot v2.4
The core node-positioning algorithm was rewritten to avoid unwanted duplicate splits. Also, separated trees are now aligned according to generations.

2005-03-23 Geranium
The API was updated to C++ to increase flexibility. In future releases the Geranium constructor can be overloaded. Furthermore, the internal data structures are now fully isolated from user code.