Provide access to more information in ScatteringSystem
This commit is contained in:
parent
38a4dbfcd7
commit
840744ec97
|
@ -535,6 +535,11 @@ cdef class ScatteringSystem:
|
|||
r.append(self.s[0].p[pi])
|
||||
return r
|
||||
|
||||
property particle_count:
|
||||
"""Number of particles in the system (or unit cell)"""
|
||||
def __get__(self):
|
||||
self.check_s()
|
||||
return self.s[0].p_count
|
||||
property fecv_size:
|
||||
"""Length of the full excitation coefficient vector"""
|
||||
def __get__(self):
|
||||
|
@ -561,6 +566,44 @@ cdef class ScatteringSystem:
|
|||
def __get__(self):
|
||||
return self.s[0].lattice_dimension
|
||||
|
||||
property lattice_basis:
|
||||
"""Direct lattice basis vectors for periodic system in 3D cartesian coordinates"""
|
||||
def __get__(self):
|
||||
cdef int d = self.lattice_dimension
|
||||
if d == 0:
|
||||
return None
|
||||
else:
|
||||
return np.array([[self.s[0].per.lattice_basis[i].x,
|
||||
self.s[0].per.lattice_basis[i].y,
|
||||
self.s[0].per.lattice_basis[i].z,
|
||||
] for i in range(d)])
|
||||
|
||||
property reciprocal_basis:
|
||||
"""Reciprocal lattice basis vectors for periodic system in 3D cartesian coordinates"""
|
||||
def __get__(self):
|
||||
cdef int d = self.lattice_dimension
|
||||
if d == 0:
|
||||
return None
|
||||
else:
|
||||
return np.array([[self.s[0].per.reciprocal_basis[i].x,
|
||||
self.s[0].per.reciprocal_basis[i].y,
|
||||
self.s[0].per.reciprocal_basis[i].z,
|
||||
] for i in range(d)])
|
||||
|
||||
def bspec_pi(self, qpms_ss_pi_t pi):
|
||||
"""Gives the BaseSpec of a particle defined by an index in the internal particles' order, in the form of an array that can be fed to BaseSpec constructor"""
|
||||
self.check_s()
|
||||
cdef qpms_ss_pi_t pcount = self.s[0].p_count
|
||||
if pi >= pcount or pi < 0: raise IndexError("Invalid particle index")
|
||||
cdef const qpms_vswf_set_spec_t *bspec = qpms_ss_bspec_pi(self.s, pi)
|
||||
return np.array([ bspec[0].ilist[i] for i in range(bspec[0].n)])
|
||||
property bspecs:
|
||||
"""Gives the BaseSpecs of all particles in the internal particles' order, in the form of arrays that can be fed to BaseSpec constructor"""
|
||||
def __get__(self):
|
||||
self.check_s()
|
||||
cdef qpms_ss_pi_t pi, pcount = self.s[0].p_count
|
||||
return [self.bspec_pi(pi) for pi in range(pcount)]
|
||||
|
||||
property unitcell_volume:
|
||||
def __get__(self):
|
||||
self.check_s()
|
||||
|
@ -792,7 +835,7 @@ cdef class ScatteringSystem:
|
|||
cdef np.ndarray[int32_t, ndim=1] ar = np.empty((self.s[0].p_count,), dtype=np.int32)
|
||||
cdef int32_t[::1] ar_view = ar
|
||||
for pi in range(self.s[0].p_count):
|
||||
ar_view[pi] = self.s[0].tm[self.s[0].p[pi].tmatrix_id].spec[0].n
|
||||
ar_view[pi] = qpms_ss_bspec_pi(self.s, pi)[0].n
|
||||
return ar
|
||||
|
||||
|
||||
|
|
|
@ -602,6 +602,7 @@ cdef extern from "scatsystem.h":
|
|||
qpms_tmatrix_operation_t op
|
||||
struct qpms_scatsys_periodic_info_t:
|
||||
cart3_t lattice_basis[3]
|
||||
cart3_t reciprocal_basis[3]
|
||||
double unitcell_volume
|
||||
double eta
|
||||
#etc.
|
||||
|
|
Loading…
Reference in New Issue