code: def get_projections_on_elements_and_orbitals(self, el_orb_spec):
          
          result = {}
          structure = self.structure
          el_orb_spec = {get_el_sp(el): orbs for el, orbs in el_orb_spec.items()}
          for spin, v in self.projections.items():
              result[spin] = [[{str(e): collections.defaultdict(float)
                                for e in el_orb_spec}
                               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)):
                  sp = structure[k].specie
                  for orb_i in range(len(v[i][j])):
                      o = Orbital(orb_i).name[0]
                      if sp in el_orb_spec:
                          if o in el_orb_spec[sp]:
                              result[spin][i][j][str(sp)][o] += v[i][j][
                                  orb_i][k]
          return result
docs: Method returning a dictionary of projections on elements and specific
          orbitals
  
          Args:
              el_orb_spec: A dictionary of Elements and Orbitals for which we want
                  to have projections on. It is given as: {Element:[orbitals]},
                  e.g., {'Cu':['d','s']}
  
          Returns:
              A dictionary of projections on elements in the
              {Spin.up:[][{Element:{orb:values}}],
              Spin.down:[][{Element:{orb:values}}]} format
              if there is no projections in the band structure returns an empty
              dict.