Add well with associated scan fields. ``self.wells[0]`` and
        ``self.fields[0]`` will be used as base. ScanWellData will be added to
        ScanWellArray and ScanFieldData to ScanFieldArray. The amount of fields
        added is decided by Properties/CountOfScanFields.

        Parameters
        ----------
        well_x : int
        well_y : int
        start_x : int
            In meters. FieldXCoordinate of first field in well.
        start_y : int
            In meters. FieldYCoordinate of first field in well.

        Raises
        ------
        ValueError
            If well or fields already exists.

def add_well(self, well_x, well_y, start_x, start_y):
        """Add well with associated scan fields. ``self.wells[0]`` and
        ``self.fields[0]`` will be used as base. ScanWellData will be added to
        ScanWellArray and ScanFieldData to ScanFieldArray. The amount of fields
        added is decided by Properties/CountOfScanFields.

        Parameters
        ----------
        well_x : int
        well_y : int
        start_x : int
            In meters. FieldXCoordinate of first field in well.
        start_y : int
            In meters. FieldYCoordinate of first field in well.

        Raises
        ------
        ValueError
            If well or fields already exists.
        """
        # raise ValueError if well already exists
        if self.well_exists(well_x, well_y):
            raise ValueError('Well already exists in ScanWellArray')

        if len(self.well_fields(well_x, well_y)) != 0:
            raise ValueError('Fields belonging to well already exists in ScanFieldArray')

        base_well = deepcopy(self.wells[0])

        # append well to ScanWellArray
        base_well.attrib['WellX'] = str(well_x)
        base_well.attrib['WellY'] = str(well_y)
        base_well.attrib['FieldXStartCoordinate'] = str(start_x)
        base_well.attrib['FieldYStartCoordinate'] = str(start_y)
        self.well_array.append(base_well)

        # append fields to ScanFieldArray
        x_fields = int(self.properties.CountOfScanFieldsX)
        y_fields = int(self.properties.CountOfScanFieldsY)
        x_dist = float(self.properties.ScanFieldStageDistanceX) * 1e-6 # in um
        y_dist = float(self.properties.ScanFieldStageDistanceY) * 1e-6
        x_label = str(self.properties.TextWellPlateHorizontal[well_x - 1])
        y_label = str(self.properties.TextWellPlateVertical[well_y - 1])

        for i in range(x_fields):
            for j in range(y_fields):
                base_field = deepcopy(self.fields[0])

                base_field.FieldXCoordinate = start_x + i*x_dist
                base_field.FieldYCoordinate = start_y + j*y_dist

                base_field.attrib['WellX'] = str(well_x)
                base_field.attrib['WellY'] = str(well_y)

                base_field.attrib['FieldX'] = str(i+1)
                base_field.attrib['FieldY'] = str(j+1)

                base_field.attrib['LabelX'] = x_label
                base_field.attrib['LabelY'] = y_label

                self.field_array.append(base_field)