I'm not answering questions about this code -- it's a work in progress (updated every other day) and if you can't figure out how to use it on your own, you're not the (currently) intended audience. For example, I've only had time to add a small subsection of the elements.
I originally implemented a very different solution -- a very exact and shiny one. The problem is that the number of permutations increases too rapidly, so that anything larger than e.g. B3(NO3)4 would use up 8 GB of RAM or more. 'Easy' molecules like C18 didn't use that much RAM, but still introduced a noticeable delay. Trimming the list of permutations introduces errors (small, hopefully) but speeds things up orders of magnitude.
In other words: this calculator is moderately fast (python), and very accurate (as far as I can tell). As I keep on looking at more and more complex examples for validation I find that I need to introduce various trimming functions to keep the matrices small.
Having said that, it's still kind of neat. Here's RuCl5^2- by my program and Matt Monroe's calculator (which I trust):
And plotting on top (scaled Monroe's by 1.08 to compensate for the error in scaling in Monroe's program which gives 108% abundance):
I removed the figures of W6O19^- since the error in the y axis scale in Monroe's program (went to 120%) made it a less good example, and the list of peaks is too long for easy comparison.
Here's another figure:
|A hypothetical W6^- molecule|
Anyway, here are a couple of syntax examples:
Usage: ./isocalc 'Al2(NO3)3' ./isocalc 'Al2(NO3)3' -1 ./isocalc 'Al2(NO3)3' -1 output.dat ./isocalc Al2N3O9 ./isocalc Al(NO3)3(OH)1 ./isocalc Al(NO3)3(OH) ./isocalc Al
See here for the source code: