<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def wrann(self, write_fs=False, write_dir=''):
 """ Write a WFDB annotation file from this object. Parameters write_fs : bool, optional Whether to write the `fs` attribute to the file. """

        for field in ['record_name', 'extension']:
            if getattr(self, field) is None:
                raise Exception('Missing required field for writing annotation file: ',field)

        present_label_fields = self.get_label_fields()
        if not present_label_fields:
            raise Exception('At least one annotation label field is required to write the annotation: ', ann_label_fields)

        # Check the validity of individual fields
        self.check_fields()

        # Standardize the format of the custom_labels field
        self.standardize_custom_labels()

        # Create the label map used in this annotaion
        self.create_label_map()

        # Check the cohesion of fields
        self.check_field_cohesion(present_label_fields)

        # Calculate the label_store field if necessary
        if 'label_store' not in present_label_fields:
            self.convert_label_attribute(source_field=present_label_fields[0],
                                         target_field='label_store')

        # Write the header file using the specified fields
        self.wr_ann_file(write_fs=write_fs, write_dir=write_dir)

        return