Fix bug in reverse kinetics generation for MultiKinetics from Josh's refactor.
Don't fail on generating html visualization when thermo is missing.
Fixed bug in flux diagram generation due to species name formatting.
Changed format of key for storing entries in some kinetics databases.

Previously the index of each entry was being used as the key. In principle
this should work fine, as each entry should have a unique index. In
practice, however, there are currently many entries in the database
(especially for H_Abstraction) that share an index, mainly because of
the sulfur rules. This commit enables the ability to handle multiple
entries with the same index (as long as they have different labels).
Molecule.getCp0() now properly handles monatomics.

Monatomics have no rotational degrees of freedom, so they have a Cp0 of
2.5R.
Added first version of tool for merging RMG-generated models.

Like many of the existing web tools, you need the Chemkin file and the
species dictionary for each model you are merging. The models to be
merged should be given in order of priority, since, when common species
and reactions are encountered, the earlier model is given priority.
You can also merge more than two models at once if you are so inclined.

The standalone script mergeModels.py could use a few more options (e.g.
the ability to specify where the output files are written), but it is
usable. The actual merging is done in the ReactionModel class, so it
should be easy to set this up as a web tool as well.
Update documentation/source/users/rmg/installation/windows.rst

Added a link to get the python27.def file on Windows in case pexports doesn't work.

On some systems (eg Windows 7 64 bit) the pexports method of generating the python27.def file 
doesn't seem to work, but apparently you can just download the file.
Print warning comments when thermo or kinetics differ during model merging.
Use RMG.log as log file name in generateReactions.

The RMG.initializeLog() method currently assumes that the log file is
named RMG.log as part of how it backs up the log file. This change is
needed in order to be able to run generateReactions.
Added (hardcoded) functionality for handling rings when generating frequencies.

In the new implementation, if a heavy atom in the molecule is in a cycle,
then a new functional group ringCH is incremented for each C-H bond in the
cycle. This is done instead of descending the functional group tree to
find the most specific group. This must be hardcoded as a special case
because our adjacency list representation is not well equipped to handle
"C-H bond with the carbon atom in a cycle" as a functional group.

This was tested with ethylene oxide (C1OC1). A QC calculation showed that
the lowest frequency in this molecule is ~800 cm^-1. With the old
algorithm, the system was overspecified and contained several frequencies
in the 300-800 cm^-1 range. Worse, the frequencies did not actually
reflect the heat capacity they were fitted to, leading to invalid Keq
values when running the pdep code. The new algorithm performs much better.
Added _fingerprint attribute to Molecule class.

This introduces the concept of a molecular "fingerprint": a short string
containing selected information about the molecule. This is particularly
useful in graph isomorphism comparisons, as it's always much faster to
compare the fingerprint than to do a full isomorphism test. Two fingerprint
strings matching is a necessary (but not sufficient) condition for the
associated molecules to be isomorphic. The fingerprint is cached so that
it only need be generated once per molecule.

For the moment the fingerprint consists of just the chemical formula. It
may be worthwhile to cache some other structural information as well
(e.g. bond types). The fingerprint isn't really meant to be accessible
outside the class, but you can use the getFingerprint() method if you
really want to see it.
Find cyclic and polycyclic vertices in graphs.

Also added aromaticity test for molecules.
Import polycyclic thermo groups from RMG-Java.
Search for polycylic ring strain correction prior to individual ring corrections.

Assumes a single polycyclic ring strain correction per molecule.  Gives error when
correction cannot be found.
Turned on cyclic symmetry numbers and updated algorithm.

The old algorithm needed some updates to reflect earlier refactoring and to
give reasonable estimates of the cyclic symmetry number. Also added some
unit tests for a few cyclic molecules.
Merge branch 'polycyclic'
Added Molecule.getNumberOfRadicalElectrons() for counting radicals.

In this function, monoradical atoms count as one, biradicals count as two,
etc.
Updated Molecule.getNumAtoms() with a bit of Cythonization.

This function may be called quite a bit more often, and speed may become
important.
Generate reactions now allows constraints on the generated species.

These are passed as (optional) keyword options to various methods used to
generate reactions. The keywords allow for control of the maximum number
of C, H, O, N, Si, and S atoms, the total number of heavy (non-H) atoms,
and the total number of radicals.

Note that RMG-Java also allows for setting the maximum number of cycles,
but I've left this out for now since finding cycles is considerably more
expensive than counting elements and radicals.
Added generatedSpeciesConstraints() block to RMG input file.

This optional block allows the user to set constraints on the species
generated during RMG jobs. The allowed constraints are:
maximumCarbonAtoms, maximumHydrogenAtoms, maximumOxygenAtoms,
maximumNitrogenAtoms, maximumSiliconAtoms, maximumSulfurAtoms,
maximumHeavyAtoms, and maximumRadicalElectrons.

These constraints are stored in the new reactionGenerationOptions
attribute of the CoreEdgeReactionModel class. The contents of this dict
are passed to KineticsDatabase.generateReactions() as the options so
that they may be enforced during reaction generation.

The expectation is that, if used, this should provide a significant speed
boost to many RMG jobs by eliminating graph isomorphism evaluations for
large molecules, which are known to be slow.