Feature lattice2

I have addressed the issues. Can you all take another look.Thanks.
A similar remark also applies to `origin`.   Or possibly additional checks can be performed when this attribute is changed.  For example, if a user did change the `origin` of an existing lattice (e.g. ``` lattice.origin = (0,1,0) ``` ) then a check could  occur that ensures that the dimensions of `origin` match the dimensions of `base_vec`/`size`