Method returning a dictionary of projections on elements.

        Returns:
            a dictionary in the {Spin.up:[][{Element:values}],
            Spin.down:[][{Element:values}]} format
            if there is no projections in the band structure
            returns an empty dict

def get_projection_on_elements(self):
        """
        Method returning a dictionary of projections on elements.

        Returns:
            a dictionary in the {Spin.up:[][{Element:values}],
            Spin.down:[][{Element:values}]} format
            if there is no projections in the band structure
            returns an empty dict
        """
        result = {}
        structure = self.structure
        for spin, v in self.projections.items():
            result[spin] = [[collections.defaultdict(float)
                             for i in range(len(self.kpoints))]
                            for j in range(self.nb_bands)]
            for i, j, k in itertools.product(range(self.nb_bands),
                                             range(len(self.kpoints)),
                                             range(structure.num_sites)):
                result[spin][i][j][str(structure[k].specie)] += np.sum(
                    v[i, j, :, k])
        return result