Mostly-copy-and-paste SOM code from epca