code: def find(self, group=None, element=None, name=None, VR=None):
          
          results = self.read()
  
          if name is not None:
              def find_name(data_element):
                  return data_element.name.lower() == name.lower()
              return filter(find_name, results)
  
          if group is not None:
              def find_group(data_element):
                  return (data_element.tag['group'] == group
                          or int(data_element.tag['group'], 16) == group)
              results = filter(find_group, results)
  
          if element is not None:
              def find_element(data_element):
                  return (data_element.tag['element'] == element
                          or int(data_element.tag['element'], 16) == element)
              results = filter(find_element, results)
  
          if VR is not None:
              def find_VR(data_element):
                  return data_element.VR.lower() == VR.lower()
              results = filter(find_VR, results)
  
          return results
docs: Searches for data elements in the DICOM file given the filters
          supplied to this method.
  
          :param group: Hex decimal for the group of a DICOM element e.g. 0x002
          :param element: Hex decimal for the element value of a DICOM element e.g. 0x0010
          :param name: Name of the DICOM element, e.g. "Modality"
          :param VR: Value Representation of the DICOM element, e.g. "PN"