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"

def find(self, group=None, element=None, name=None, VR=None):
        """ 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"
        """
        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