Coverage for gpaw/pes/__init__.py: 96%

28 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-20 00:19 +0000

1from ase.units import Bohr 

2 

3import gpaw.mpi as mpi 

4from gpaw.lrtddft.spectrum import Writer 

5 

6ds_prefactor = { 

7 'Ang': Bohr ** 2, 

8 'a.u.': 1.0, 

9 'Mb': Bohr ** 2 * 100} 

10 

11 

12class PESpectrum(Writer): 

13 

14 def __init__(self, 

15 enlist, 

16 folding='Gauss', 

17 width=0.08): # Gauss/Lorentz width 

18 Writer.__init__(self, folding, width) 

19 self.title = 'Photo emission spectrum' 

20 self.fields = 'Binding energy [eV] ' 

21 if folding is None: 

22 self.fields += 'Spectroscopic factor' 

23 else: 

24 self.fields += 'Folded spectroscopic factor' 

25 

26 self.energies = enlist[0] 

27 self.values = [] 

28 for val in enlist[1]: 

29 self.values.append([val]) 

30 

31 

32class BasePES: 

33 

34 def save_folded_pes(self, 

35 filename=None, 

36 width=0.08, # Gauss/Lorentz width 

37 emin=None, 

38 emax=None, 

39 de=None, 

40 folding='Gauss', 

41 comment=None): 

42 

43 ew = self.get_energies_and_weights() 

44 if mpi.rank == 0: 

45 sp = PESpectrum(ew, folding, width) 

46 sp.write(filename, emin, emax, de, comment) 

47 

48 def get_energies_and_weights(self): 

49 if self.be is None or self.f is None: 

50 self._calculate() 

51 

52 return self.be, self.f 

53 

54 def set_first_peak_energy(self, energy): 

55 self.first_peak_energy = energy