class FeffLdosTest(unittest.TestCase): filepath1 = os.path.join(test_dir, 'feff.inp') filepath2 = os.path.join(test_dir, 'ldos') l = FeffLdos.from_file(filepath1, filepath2) def test_init(self): efermi = FeffLdosTest.l.complete_dos.efermi self.assertEqual(efermi, -11.430, "Did not read correct Fermi energy from ldos file") def test_complete_dos(self): complete_dos = FeffLdosTest.l.complete_dos self.assertEqual(complete_dos.as_dict()['spd_dos']['S']['efermi'], -11.430, "Failed to construct complete_dos dict properly") def test_as_dict_and_from_dict(self): l2 = FeffLdosTest.l.charge_transfer_to_string() d = FeffLdosTest.l.as_dict() l3 = FeffLdos.from_dict(d).charge_transfer_to_string() self.assertEqual(l2, l3, "Feffldos to and from dict does not match")
Version: 1.0 Last updated: August, 2012''') parser.add_argument('filename', metavar='filename', type=str, nargs=1, help='ldos%% file set to plot') parser.add_argument('filename1', metavar='filename1', type=str, nargs=1, help='feff.inp input file ') parser.add_argument('-s', '--site', dest='site', action='store_const', const=True, help='plot site projected DOS') parser.add_argument('-e', '--element', dest='element', action='store_const', const=True, help='plot element projected DOS') parser.add_argument('-o', '--orbital', dest="orbital", action='store_const', const=True, help='plot orbital projected DOS') args = parser.parse_args() f = FeffLdos.from_file(args.filename1[0], args.filename[0]) dos = f.complete_dos all_dos = OrderedDict() all_dos['Total'] = dos structure = f.complete_dos.structure if args.site: for i in xrange(len(structure)): site = structure[i] all_dos['Site ' + str(i) + " " + site.specie.symbol] = \ dos.get_site_dos(site) if args.element: all_dos.update(dos.get_element_dos()) if args.orbital:
help='plot site projected DOS') parser.add_argument('-e', '--element', dest='element', action='store_const', const=True, help='plot element projected DOS') parser.add_argument('-o', '--orbital', dest="orbital", action='store_const', const=True, help='plot orbital projected DOS') args = parser.parse_args() f = FeffLdos.from_file(args.filename1[0], args.filename[0]) dos = f.complete_dos all_dos = OrderedDict() all_dos['Total'] = dos structure = f.complete_dos.structure if args.site: for i in xrange(len(structure)): site = structure[i] all_dos['Site ' + str(i) + " " + site.specie.symbol] = \ dos.get_site_dos(site) if args.element: all_dos.update(dos.get_element_dos()) if args.orbital:
def feff_ldos(self,option): """ Plot feff LDOS density of states from ldos.dat files Args: option: specifies whether plot by -s(site), -e(element), -o(orbital) """ file_name=tkFileDialog.askopenfilename(**self.file_opt) if file_name == '' or file_name==(): return self.xmu_ent.delete(0, END) self.xmu_ent.insert(0, file_name) file_type = file_name.split(".")[-1] if file_type == 'dat': directory = '' directory_list = file_name.split('/') for dir in directory_list[:-1]: directory = directory + '/' +dir directory = directory[1:] file_name=file_name[:-6] feffinpfile = directory + '/feff.inp' p = FeffLdos.from_file(feffinpfile, file_name) dos = p.complete_dos self.all_dos = OrderedDict() self.all_dos['Total'] = dos structure = p.complete_dos.structure if option == '-s': for i in xrange(len(structure)): site = structure[i] self.all_dos['Site ' + str(i) + " " + site.specie.symbol] = \ dos.get_site_dos(site) if option == '-e': self.all_dos.update(dos.get_element_dos()) if option == '-o': self.all_dos.update(dos.get_spd_dos()) #display keys = self.all_dos.keys() for label in keys: energies = self.all_dos[label].energies - self.all_dos[label].efermi densities = self.all_dos[label].densities efermi = self.all_dos[label].efermi self._doses[label] = {'energies': energies, 'densities': densities, 'efermi': efermi} y = None alldensities = [] allenergies = [] """ Note that this complicated processing of energies is to allow for stacked plots in matplotlib. """ for key, dos in self._doses.items(): energies = dos['energies'] densities = dos['densities'] if not y: y = {Spin.up: np.zeros(energies.shape), Spin.down: np.zeros(energies.shape)} newdens = {} for spin in [Spin.up, Spin.down]: if spin in densities: if self.stack: y[spin] += densities[spin] newdens[spin] = y[spin].copy() else: newdens[spin] = densities[spin] allenergies.append(energies) alldensities.append(newdens) keys = list(self.all_dos.keys()) keys.reverse() alldensities.reverse() allenergies.reverse() allpts = [] for i, key in enumerate(keys): x = [] y = [] for spin in [Spin.up, Spin.down]: if spin in alldensities[i]: densities = list(int(spin) * alldensities[i][spin]) energies = list(allenergies[i]) if spin == Spin.down: energies.reverse() densities.reverse() x.extend(energies) y.extend(densities) allpts.extend(zip(x, y)) if self.stack: self.plt.fill(x, y, color=self.color_order[i % len(self.color_order)], label=str(key)) else: self.plt.plot(x, y, color=self.color_order[i % len(self.color_order)], label=str(key)) if not self.zero_at_efermi: ylim = self.plt.ylim() self.plt.plot([self._doses[key]['efermi'], self._doses[key]['efermi']], ylim, self.color_order[i % 4] + '--', linewidth=2) self.plt.set_xlabel('Energies (eV)') self.plt.set_ylabel('Density of states') self.fontp.set_size('x-small') self.plt.legend(prop=self.fontp, loc=0) self.canvas.show() else: tkMessageBox.showerror(title = "feff_ldos by site", message = "Must select Ldos.dat file") self.xmu_ent.delete(0, Tk.END)