def __init__(self, system, method=DEFAULT, ): inputs = [] if isinstance(system, Crystal): self.__sub = None elif isinstance(system, Surface): self.__sub = ValenceBandEdge(system=system.crystal(), method=method) inputs.append(self.__sub) elif hasattr(system, 'surface'): self.__sub = ValenceBandEdge(system=system.surface(), method=method) inputs.append(self.__sub) else: raise Exception self.__reference = ReferenceEnergy(system=system, method=method) self.__b = BandStructure(system=system, method=method) inputs.extend([self.__reference, self.__b]) API.Analysis.__init__( self, system=system, method=method, inputs=inputs, )
class ValenceBandEdge(API.Analysis): def __init__(self, system, method=DEFAULT, ): inputs = [] if isinstance(system, Crystal): self.__sub = None elif isinstance(system, Surface): self.__sub = ValenceBandEdge(system=system.crystal(), method=method) inputs.append(self.__sub) elif hasattr(system, 'surface'): self.__sub = ValenceBandEdge(system=system.surface(), method=method) inputs.append(self.__sub) else: raise Exception self.__reference = ReferenceEnergy(system=system, method=method) self.__b = BandStructure(system=system, method=method) inputs.extend([self.__reference, self.__b]) API.Analysis.__init__( self, system=system, method=method, inputs=inputs, ) def read(self): if not self.isDone(): return None if isinstance(self.system(), Crystal): valence = self.__b.read() reference = self.__reference.read() valence -= reference[0] elif isinstance(self.system(), Surface): valence, reference = self.__sub.read() reference = self.__reference.read() valence += reference[1] valence -= reference[0] print valence + reference[0] else: valence, reference = self.__sub.read() reference = self.__reference.read() return valence, reference