code: def neighbors2(self, distance, chain_residue, atom = None, resid_list = None):
          '''this one is more precise since it uses the chain identifier also'''
          if atom == None:
              lines = [line for line in self.atomlines(resid_list) if line[17:20] in allowed_PDB_residues_types]
          else:
              lines = [line for line in self.atomlines(resid_list) if line[17:20] in allowed_PDB_residues_types and line[12:16] == atom]
          shash = spatialhash.SpatialHash(distance)
          for line in lines:
              pos = (float(line[30:38]), float(line[38:46]), float(line[46:54]))
              shash.insert(pos, line[21:26])
          neighbor_list = []
          for line in lines:
              resid = line[21:26]
              if resid == chain_residue:
                  pos = (float(line[30:38]), float(line[38:46]), float(line[46:54]))
                  for data in shash.nearby(pos, distance):
                      if data[1] not in neighbor_list:
                          neighbor_list.append(data[1])
                  neighbor_list.sort()
          return neighbor_list