def test_simstats(): import numpy as np from testing import value_eq from numerics import simstats m,v,e,k = simstats(rstream) m_ref = 0.507154277182 v_ref = 0.0840257344388 e_ref = 0.00949486225214 k_ref = 1.07291426596 assert(value_eq(float(m),m_ref)) assert(value_eq(float(v),v_ref)) assert(value_eq(float(e),e_ref)) assert(value_eq(float(k),k_ref)) m_ref = np.array(10*[m_ref]) v_ref = np.array(10*[v_ref]) e_ref = np.array(10*[e_ref]) k_ref = np.array(10*[k_ref]) m,v,e,k = simstats(rstream_wide) assert(value_eq(m,m_ref)) assert(value_eq(v,v_ref)) assert(value_eq(e,e_ref)) assert(value_eq(k,k_ref))
def read_stat_h5(self,*files,equil=0,savefile=None): save = False if savefile is not None: if os.path.exists(savefile): vlog('\nLoading from save file {}'.format(savefile)) self.load(savefile) vlog('Done',n=1,time=True) return else: save = True #end if #end if vlog('\nReading n(k) data from stat.h5 files',time=True) k = [] nk = [] nke = [] if len(files)==1 and isinstance(files[0],(list,tuple)): files = files[0] #end if for file in files: if isinstance(file,StatFile): stat = file else: vlog('Reading stat.h5 file',n=1,time=True) stat = StatFile(file,observables=['momentum_distribution']) #end if vlog('Processing n(k) data from stat.h5 file',n=1,time=True) vlog('filename = {}'.format(stat.filepath),n=2) group = stat.observable_groups(self,single=True) kpoints = np.array(group['kpoints']) nofk = np.array(group['value']) nk_mean,nk_var,nk_error,nk_kappa = simstats(nofk[equil:],dim=0) k.extend(kpoints) nk.extend(nk_mean) nke.extend(nk_error) #end for vlog('Converting concatenated lists to arrays',n=1,time=True) data = obj( tot = obj( k = np.array(k), nk = np.array(nk), nk_err = np.array(nke), ) ) self.set_attribute('raw',data) if save: vlog('Saving to file {}'.format(savefile),n=1) self.save(savefile) #end if vlog('stat.h5 file read finished',n=1,time=True)
def md_statistics(self, equil=None, autocorr=None): import numpy as np from numerics import simstats, simplestats mds = obj() for q, v in self.md_data.items(): if equil is not None: v = v[equil:] #end if if autocorr is None: mean, var, error, kappa = simstats(v) else: nv = len(v) nb = int(np.floor(float(nv) / autocorr)) nexclude = nv - nb * autocorr v = v[nexclude:] v.shape = nb, autocorr mean, error = simplestats(v.mean(axis=1)) #end if mds[q] = mean, error #end for return mds
nm.append(nm_tmp) #end for nm = np.array(nm) # Obtain dimensions of number matrices nblocks, nstates, nstates = nm[0][0].shape # Store stats of number matrix corresponding to single determinant with no jastrow, projected # on MO basis from numerics import simstats m_mo, v_mo, e_mo, k_mo = simstats(nm, dim=2) # stats over blocks # Perform "unitary" transform on each block's number matrix individually # and store in nmqmcu (i.e., up component of number matrix prime) # After the transformation, number matrix has been transformed from # the MO basis to the AO basis s = sp nmqmc = np.empty((nKpoints, nSpin, nblocks, nAtomicWFC, nAtomicWFC), dtype=complex) for k in range(nKpoints): for b in range(nblocks): nmqmc[k][s][b] = kWeights[k] * np.matmul( atomicProjections[k][s][:, :], np.matmul(nm[k][0][b][:, :],