def _parse_tddft(self):
        """Parse the output resulted from a tddft calculation.
        
        """
        text = self.text
        energies = sections("SUMMARY OF TDDFT RESULTS",
                            "DONE WITH TD-DFT EXCITATION ENERGIES",
                            text)

        lines = energies[0].splitlines()
        regex = re.compile("""
                           \s+(\d+)   # State Number
                           \s+([ ^]+)  # State sym
                           \s+([+-]?\d+\.\d+) # Tot Energy  
                           \s+([+-]?\d+\.\d+) # Exc Energy
                               (\s+([+-]?\d+\.\d+) # 
                                \s+([+-]?\d+\.\d+) # Dipole moment
                                \s+([+-]?\d+\.\d+) # 
                                \s+([+-]?\d+\.\d+))? # Oscillator strength
                           """, flags=re.VERBOSE)

        states = []
        for line in lines:
            match = regex.match(line)
            if match:
                # Check for strange behaviour of symmetry
                if not re.match("\w+",match.group(4)):
                    raise ValueError("Strange symmetry string: %s"%match.group(4))
                 
                osc_strength = float(match.group(9)) if match.group(9) else 0.000
                states.append({"num": int(match.group(1)), "sym": match.group(4),
                               "strength": osc_strength})
        return {"states": states}
Parse the output resulted from a tddft calculation.