Пример #1
0
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")
Пример #2
0
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:
Пример #3
0
 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")
Пример #4
0
 def test_to_dict_and_from_dict(self):
     l2 = FeffLdosTest.l.charge_transfer_to_string()
     d = FeffLdosTest.l.to_dict
     l3 = FeffLdos.from_dict(d).charge_transfer_to_string()
     self.assertEqual(l2, l3,
                      "Feffldos to and from dict does not match")
Пример #5
0
                    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:
Пример #6
0
 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)