def rotate(alt, az)
      altrad = Math::PI/180*alt
      azrad = Math::PI/180*az
      
      sinalt = Math::sin(altrad)
      cosalt = Math::cos(altrad)
      sinaz = Math::sin(azrad)
      cosaz = Math::cos(azrad)
      
      mat1 = Matrix[[cosaz, -sinaz, 0], [sinaz, cosaz, 0], [0, 0, 1]]
      mat2 = Matrix[[1.0, 0.0, 0.0], [0.0, cosalt, -sinalt], [0.0, sinalt, cosalt]]
      mat = mat1*mat2    
      newatoms = atoms.collect{|a|
        a.rotate(mat)
      }
      newvectors = lattice_vectors.collect{|v|
        mat*v
      }
      uc = Geometry.new(newatoms, newvectors)
      if self.cart_to_miller
        uc.cart_to_miller = mat*self.cart_to_miller
        uc.miller_to_cart = uc.cart_to_miller.inverse
      end
      return uc
    end
def rotate(alt, az)
      altrad = Math::PI/180*alt
      azrad = Math::PI/180*az
      
      sinalt = Math::sin(altrad)
      cosalt = Math::cos(altrad)
      sinaz = Math::sin(azrad)
      cosaz = Math::cos(azrad)
      
      mat1 = Matrix[[cosaz, -sinaz, 0], [sinaz, cosaz, 0], [0, 0, 1]]
      mat2 = Matrix[[1.0, 0.0, 0.0], [0.0, cosalt, -sinalt], [0.0, sinalt, cosalt]]
      mat = mat1*mat2    
      newatoms = atoms.collect{|a|
        a.rotate(mat)
      }
      newvectors = lattice_vectors.collect{|v|
        mat*v
      }
      uc = Geometry.new(newatoms, newvectors)
      if self.cart_to_miller
        uc.cart_to_miller = mat*self.cart_to_miller
        uc.miller_to_cart = uc.cart_to_miller.inverse
      end
      return uc
    end
Rotate the geometry in 3 dimensions. The rotation is
 first about the x-axis then about the z-axis.
 * +az+ The azimuthal rotation in degrees about the z-axis
 * +alt+ The rotation in altitude in degrees about the x-axis

 Returns a new Aims#Geometry object.