Ejemplo n.º 1
0
    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,
                )
Ejemplo n.º 2
0
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