Return primaty (top, bridge, hollow, 4fold) and
        secondary (chemical elements in close environment) site designation

def get_site(self, plot_voronoi_sites=False):
        """Return primaty (top, bridge, hollow, 4fold) and
        secondary (chemical elements in close environment) site designation"""

        if self.dissociated:
            return 'dissociated', ''

        if self.is_desorbed():
            return 'desorbed', ''

        if self.is_subsurface():
            return 'subsurface', ''

        C0 = self.B[-1:] * (3, 3, 1)
        ads_pos = C0.positions[4]

        C = self.B.copy() * (3, 3, 1)

        # Use top layer and adsorbate to map sites
        Dict = self.get_site_dict(ads_pos[:2])

        primary_site = None
        dis = self.B.get_cell()[0][0]
        Kind = None

        values = [np.linalg.norm(ads_pos[:2] - d['pos'][:2])
                  for d in list(Dict.values())]
        if len(values) == 0:
            return 'N/A', ''
        idx = np.argmin(values)
        dis = values[idx]
        kind = list(Dict.keys())[idx]
        primary_site = kind.split('_')[0]

        if plot_voronoi_sites:  # View sampled sites
            X = self.B.copy()
            X = X * (3, 3, 1)
            del X[-1]
            for pos in Dict.values():
                add_adsorbate(X, 'X', position=(pos['pos'][:2]), height=0.2)
            view(X)

        if primary_site == 'top':
            site_type = Dict[kind]['sym']

        if primary_site == 'bridge':
            site_type = Dict[kind]['sym'] + '|' + self.get_under_bridge()

        elif primary_site == 'hollow':
            site_type = Dict[kind]['sym'] + '|' + self.get_under_hollow()

        elif primary_site == '4fold':
            site_type = Dict[kind]['sym']

        if dis > 0.5:
            primary_site += '-tilt'
            print('Warning: A strong site match could not be found!')
            print('  structure labeled as {}'.format(primary_site))

        return primary_site, site_type