@classmethod
def parse(cls, fp, data_objects=None, close=True):
    """
            This method parses the file and return a list of DataObjects
            with both header and data properties filled in accordingly.
            The filename argument is always required. If no file object is passed
            as keyword argument, it only serves as a label. Otherwise a new file
            object is created.
            File objects are closed unless close is set to False.
            Existing DataObjects can be passed as well and will then 
            be used instead of creating new ones.
        """
    filename, fp, close = cls._get_file(fp, close=close)
    data_objects = cls._parse_header(filename, fp, data_objects=data_objects)
    data_objects = cls._parse_data(filename, fp, data_objects=data_objects)
    if close:
        fp.close()
    return data_objects
