#  Copyright 2023-2024 Amazon.com, Inc. or its affiliates.

"""This file was generated by xsdata, v23.8, on 2023-08-30 17:21:13

Generator: DataclassGenerator
See: https://xsdata.readthedocs.io/
"""
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Optional

from xsdata.models.datatype import XmlDateTime

__NAMESPACE__ = "urn:SICD:1.3.0"


@dataclass
class ArrayDouble:
    value: Optional[float] = field(
        default=None,
        metadata={
            "required": True,
        },
    )
    index: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


class CollectType(Enum):
    MONOSTATIC = "MONOSTATIC"
    BISTATIC = "BISTATIC"


@dataclass
class ComplexType:
    real: Optional[float] = field(
        default=None,
        metadata={
            "name": "Real",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    imag: Optional[float] = field(
        default=None,
        metadata={
            "name": "Imag",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


class CornerStringType(Enum):
    FRFC_1 = "1:FRFC"
    FRLC_2 = "2:FRLC"
    LRLC_3 = "3:LRLC"
    LRFC_4 = "4:LRFC"


class DirParamTypeSgn(Enum):
    PLUS_ONE = 1
    MINUS_ONE = -1


@dataclass
class ErrorDecorrFuncType:
    corr_coef_zero: Optional[float] = field(
        default=None,
        metadata={
            "name": "CorrCoefZero",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    decorr_rate: Optional[float] = field(
        default=None,
        metadata={
            "name": "DecorrRate",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


class EarthModel(Enum):
    WGS_84 = "WGS_84"


class ImagePlane(Enum):
    SLANT = "SLANT"
    GROUND = "GROUND"
    OTHER = "OTHER"


class ImageGridType(Enum):
    RGAZIM = "RGAZIM"
    RGZERO = "RGZERO"
    XRGYCR = "XRGYCR"
    XCTYAT = "XCTYAT"
    PLANE = "PLANE"


@dataclass
class ImageCreationType:
    application: Optional[str] = field(
        default=None,
        metadata={
            "name": "Application",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    date_time: Optional[XmlDateTime] = field(
        default=None,
        metadata={
            "name": "DateTime",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    site: Optional[str] = field(
        default=None,
        metadata={
            "name": "Site",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    profile: Optional[str] = field(
        default=None,
        metadata={
            "name": "Profile",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )


class ImagePixelType(Enum):
    RE32F_IM32F = "RE32F_IM32F"
    RE16I_IM16I = "RE16I_IM16I"
    AMP8I_PHS8I = "AMP8I_PHS8I"


class AzAutofocus(Enum):
    NO = "NO"
    GLOBAL = "GLOBAL"
    SV = "SV"


class ImageBeamComp(Enum):
    NO = "NO"
    SV = "SV"


class ImageFormAlgo(Enum):
    PFA = "PFA"
    RMA = "RMA"
    RGAZCOMP = "RGAZCOMP"
    OTHER = "OTHER"


class RgAutofocus(Enum):
    NO = "NO"
    GLOBAL = "GLOBAL"
    SV = "SV"


class STBeamComp(Enum):
    NO = "NO"
    GLOBAL = "GLOBAL"
    SV = "SV"


@dataclass
class LatLonHAERestrictionType:
    lat: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lat",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": -90.0,
            "max_inclusive": 90.0,
        },
    )
    lon: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lon",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": -180.0,
            "max_inclusive": 180.0,
        },
    )
    hae: Optional[float] = field(
        default=None,
        metadata={
            "name": "HAE",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class LatLonHAEType:
    lat: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lat",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    lon: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lon",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    hae: Optional[float] = field(
        default=None,
        metadata={
            "name": "HAE",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class LatLonRestrictionType:
    lat: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lat",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": -90.0,
            "max_inclusive": 90.0,
        },
    )
    lon: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lon",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": -180.0,
            "max_inclusive": 180.0,
        },
    )


@dataclass
class LatLonType:
    lat: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lat",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    lon: Optional[float] = field(
        default=None,
        metadata={
            "name": "Lon",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


class NoiseLevelType(Enum):
    ABSOLUTE = "ABSOLUTE"
    RELATIVE = "RELATIVE"


class OrientationType(Enum):
    UP = "UP"
    DOWN = "DOWN"
    LEFT = "LEFT"
    RIGHT = "RIGHT"
    ARBITRARY = "ARBITRARY"


@dataclass
class ParameterType:
    value: str = field(
        default="",
        metadata={
            "required": True,
        },
    )
    name: Optional[str] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class PolyCoef1DType:
    value: Optional[float] = field(
        default=None,
        metadata={
            "required": True,
        },
    )
    exponent1: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class PolyCoef2DType:
    value: Optional[float] = field(
        default=None,
        metadata={
            "required": True,
        },
    )
    exponent1: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
    exponent2: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


class PosVelErrFrame(Enum):
    ECF = "ECF"
    RIC_ECF = "RIC_ECF"
    RIC_ECI = "RIC_ECI"


class RMAImageType(Enum):
    RMAT = "RMAT"
    RMCR = "RMCR"
    INCA = "INCA"


class RMAlgorithm(Enum):
    OMEGA_K = "OMEGA_K"
    CSA = "CSA"
    RG_DOP = "RG_DOP"


class RadarModeType(Enum):
    SPOTLIGHT = "SPOTLIGHT"
    STRIPMAP = "STRIPMAP"
    DYNAMIC_STRIPMAP = "DYNAMIC STRIPMAP"


@dataclass
class RowColType:
    row: Optional[int] = field(
        default=None,
        metadata={
            "name": "Row",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    col: Optional[int] = field(
        default=None,
        metadata={
            "name": "Col",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


class SideOfTrack(Enum):
    L = "L"
    R = "R"


class WFParametersRcvDemodType(Enum):
    STRETCH = "STRETCH"
    CHIRP = "CHIRP"


@dataclass
class XYZType:
    x: Optional[float] = field(
        default=None,
        metadata={
            "name": "X",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    y: Optional[float] = field(
        default=None,
        metadata={
            "name": "Y",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    z: Optional[float] = field(
        default=None,
        metadata={
            "name": "Z",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class CollectionInfoType:
    collector_name: Optional[str] = field(
        default=None,
        metadata={
            "name": "CollectorName",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    illuminator_name: Optional[str] = field(
        default=None,
        metadata={
            "name": "IlluminatorName",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    core_name: Optional[str] = field(
        default=None,
        metadata={
            "name": "CoreName",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    collect_type: Optional[CollectType] = field(
        default=None,
        metadata={
            "name": "CollectType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    radar_mode: Optional["CollectionInfoType.RadarMode"] = field(
        default=None,
        metadata={
            "name": "RadarMode",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    classification: Optional[str] = field(
        default=None,
        metadata={
            "name": "Classification",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    country_code: List[str] = field(
        default_factory=list,
        metadata={
            "name": "CountryCode",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    parameter: List[ParameterType] = field(
        default_factory=list,
        metadata={
            "name": "Parameter",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class RadarMode:
        mode_type: Optional[RadarModeType] = field(
            default=None,
            metadata={
                "name": "ModeType",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        mode_id: Optional[str] = field(
            default=None,
            metadata={
                "name": "ModeID",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )


@dataclass
class ErrorStatisticsType:
    composite_scp: Optional["ErrorStatisticsType.CompositeSCP"] = field(
        default=None,
        metadata={
            "name": "CompositeSCP",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    components: Optional["ErrorStatisticsType.Components"] = field(
        default=None,
        metadata={
            "name": "Components",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    unmodeled: Optional["ErrorStatisticsType.Unmodeled"] = field(
        default=None,
        metadata={
            "name": "Unmodeled",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    additional_parms: Optional["ErrorStatisticsType.AdditionalParms"] = field(
        default=None,
        metadata={
            "name": "AdditionalParms",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class CompositeSCP:
        rg: Optional[float] = field(
            default=None,
            metadata={
                "name": "Rg",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        az: Optional[float] = field(
            default=None,
            metadata={
                "name": "Az",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        rg_az: Optional[float] = field(
            default=None,
            metadata={
                "name": "RgAz",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class Components:
        pos_vel_err: Optional["ErrorStatisticsType.Components.PosVelErr"] = field(
            default=None,
            metadata={
                "name": "PosVelErr",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        radar_sensor: Optional["ErrorStatisticsType.Components.RadarSensor"] = field(
            default=None,
            metadata={
                "name": "RadarSensor",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        tropo_error: Optional["ErrorStatisticsType.Components.TropoError"] = field(
            default=None,
            metadata={
                "name": "TropoError",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )
        iono_error: Optional["ErrorStatisticsType.Components.IonoError"] = field(
            default=None,
            metadata={
                "name": "IonoError",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )

        @dataclass
        class PosVelErr:
            frame: Optional[PosVelErrFrame] = field(
                default=None,
                metadata={
                    "name": "Frame",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            p1: Optional[float] = field(
                default=None,
                metadata={
                    "name": "P1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            p2: Optional[float] = field(
                default=None,
                metadata={
                    "name": "P2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            p3: Optional[float] = field(
                default=None,
                metadata={
                    "name": "P3",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            v1: Optional[float] = field(
                default=None,
                metadata={
                    "name": "V1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            v2: Optional[float] = field(
                default=None,
                metadata={
                    "name": "V2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            v3: Optional[float] = field(
                default=None,
                metadata={
                    "name": "V3",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            corr_coefs: Optional["ErrorStatisticsType.Components.PosVelErr.CorrCoefs"] = field(
                default=None,
                metadata={
                    "name": "CorrCoefs",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            position_decorr: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "PositionDecorr",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )

            @dataclass
            class CorrCoefs:
                p1_p2: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P1P2",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p1_p3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P1P3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p1_v1: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P1V1",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p1_v2: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P1V2",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p1_v3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P1V3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p2_p3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P2P3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p2_v1: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P2V1",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p2_v2: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P2V2",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p2_v3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P2V3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p3_v1: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P3V1",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p3_v2: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P3V2",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                p3_v3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "P3V3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                v1_v2: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "V1V2",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                v1_v3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "V1V3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                v2_v3: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "V2V3",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )

        @dataclass
        class RadarSensor:
            range_bias: Optional[float] = field(
                default=None,
                metadata={
                    "name": "RangeBias",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            clock_freq_sf: Optional[float] = field(
                default=None,
                metadata={
                    "name": "ClockFreqSF",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            transmit_freq_sf: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TransmitFreqSF",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            range_bias_decorr: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "RangeBiasDecorr",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )

        @dataclass
        class TropoError:
            tropo_range_vertical: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TropoRangeVertical",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tropo_range_slant: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TropoRangeSlant",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tropo_range_decorr: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "TropoRangeDecorr",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )

        @dataclass
        class IonoError:
            iono_range_vertical: Optional[float] = field(
                default=None,
                metadata={
                    "name": "IonoRangeVertical",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            iono_range_rate_vertical: Optional[float] = field(
                default=None,
                metadata={
                    "name": "IonoRangeRateVertical",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            iono_rg_rg_rate_cc: Optional[float] = field(
                default=None,
                metadata={
                    "name": "IonoRgRgRateCC",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            iono_range_vert_decorr: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "IonoRangeVertDecorr",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )

    @dataclass
    class Unmodeled:
        xrow: Optional[float] = field(
            default=None,
            metadata={
                "name": "Xrow",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        ycol: Optional[float] = field(
            default=None,
            metadata={
                "name": "Ycol",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        xrow_ycol: Optional[float] = field(
            default=None,
            metadata={
                "name": "XrowYcol",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        unmodeled_decorr: Optional["ErrorStatisticsType.Unmodeled.UnmodeledDecorr"] = field(
            default=None,
            metadata={
                "name": "UnmodeledDecorr",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )

        @dataclass
        class UnmodeledDecorr:
            xrow: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "Xrow",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            ycol: Optional[ErrorDecorrFuncType] = field(
                default=None,
                metadata={
                    "name": "Ycol",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )

    @dataclass
    class AdditionalParms:
        parameter: List[ParameterType] = field(
            default_factory=list,
            metadata={
                "name": "Parameter",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )


@dataclass
class ImageFormationType:
    rcv_chan_proc: Optional["ImageFormationType.RcvChanProc"] = field(
        default=None,
        metadata={
            "name": "RcvChanProc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    tx_rcv_polarization_proc: Optional[str] = field(
        default=None,
        metadata={
            "name": "TxRcvPolarizationProc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "pattern": r"(([VHXYSE]|RHC|LHC|OTHER[^:]*):([VHXYSE]|RHC|LHC|OTHER[^:]*))|OTHER|UNKNOWN",
        },
    )
    tstart_proc: Optional[float] = field(
        default=None,
        metadata={
            "name": "TStartProc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    tend_proc: Optional[float] = field(
        default=None,
        metadata={
            "name": "TEndProc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    tx_frequency_proc: Optional["ImageFormationType.TxFrequencyProc"] = field(
        default=None,
        metadata={
            "name": "TxFrequencyProc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    segment_identifier: Optional[str] = field(
        default=None,
        metadata={
            "name": "SegmentIdentifier",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    image_form_algo: Optional[ImageFormAlgo] = field(
        default=None,
        metadata={
            "name": "ImageFormAlgo",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    stbeam_comp: Optional[STBeamComp] = field(
        default=None,
        metadata={
            "name": "STBeamComp",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    image_beam_comp: Optional[ImageBeamComp] = field(
        default=None,
        metadata={
            "name": "ImageBeamComp",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    az_autofocus: Optional[AzAutofocus] = field(
        default=None,
        metadata={
            "name": "AzAutofocus",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    rg_autofocus: Optional[RgAutofocus] = field(
        default=None,
        metadata={
            "name": "RgAutofocus",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    processing: List["ImageFormationType.Processing"] = field(
        default_factory=list,
        metadata={
            "name": "Processing",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    polarization_calibration: Optional["ImageFormationType.PolarizationCalibration"] = field(
        default=None,
        metadata={
            "name": "PolarizationCalibration",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class RcvChanProc:
        num_chan_proc: Optional[int] = field(
            default=None,
            metadata={
                "name": "NumChanProc",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        prfscale_factor: Optional[float] = field(
            default=None,
            metadata={
                "name": "PRFScaleFactor",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )
        chan_index: List[int] = field(
            default_factory=list,
            metadata={
                "name": "ChanIndex",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )

    @dataclass
    class TxFrequencyProc:
        min_proc: Optional[float] = field(
            default=None,
            metadata={
                "name": "MinProc",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        max_proc: Optional[float] = field(
            default=None,
            metadata={
                "name": "MaxProc",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class Processing:
        type_value: Optional[str] = field(
            default=None,
            metadata={
                "name": "Type",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        applied: Optional[bool] = field(
            default=None,
            metadata={
                "name": "Applied",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        parameter: List[ParameterType] = field(
            default_factory=list,
            metadata={
                "name": "Parameter",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )

    @dataclass
    class PolarizationCalibration:
        distort_correction_applied: Optional[bool] = field(
            default=None,
            metadata={
                "name": "DistortCorrectionApplied",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        distortion: Optional["ImageFormationType.PolarizationCalibration.Distortion"] = field(
            default=None,
            metadata={
                "name": "Distortion",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

        @dataclass
        class Distortion:
            calibration_date: Optional[XmlDateTime] = field(
                default=None,
                metadata={
                    "name": "CalibrationDate",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            a: Optional[float] = field(
                default=None,
                metadata={
                    "name": "A",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            f1: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "F1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            q1: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "Q1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            q2: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "Q2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            f2: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "F2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            q3: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "Q3",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            q4: Optional[ComplexType] = field(
                default=None,
                metadata={
                    "name": "Q4",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            gain_error_a: Optional[float] = field(
                default=None,
                metadata={
                    "name": "GainErrorA",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            gain_error_f1: Optional[float] = field(
                default=None,
                metadata={
                    "name": "GainErrorF1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            gain_error_f2: Optional[float] = field(
                default=None,
                metadata={
                    "name": "GainErrorF2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            phase_error_f1: Optional[float] = field(
                default=None,
                metadata={
                    "name": "PhaseErrorF1",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            phase_error_f2: Optional[float] = field(
                default=None,
                metadata={
                    "name": "PhaseErrorF2",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )


@dataclass
class LatLonCornerStringType(LatLonType):
    index: Optional[CornerStringType] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class LatLonCornerType(LatLonType):
    index: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
            "min_inclusive": 1,
            "max_inclusive": 4,
        },
    )


@dataclass
class LatLonHAECornerRestrictType(LatLonHAERestrictionType):
    index: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
            "min_inclusive": 1,
            "max_inclusive": 4,
        },
    )


@dataclass
class LatLonHAECornerStringType(LatLonHAEType):
    index: Optional[CornerStringType] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class LineType:
    endpoint: List["LineType.Endpoint"] = field(
        default_factory=list,
        metadata={
            "name": "Endpoint",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "min_occurs": 2,
        },
    )
    size: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )

    @dataclass
    class Endpoint(LatLonType):
        index: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )


@dataclass
class MatchInfoType:
    num_match_types: Optional[int] = field(
        default=None,
        metadata={
            "name": "NumMatchTypes",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    match_type: List["MatchInfoType.MatchType"] = field(
        default_factory=list,
        metadata={
            "name": "MatchType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "min_occurs": 1,
        },
    )

    @dataclass
    class MatchType:
        type_id: Optional[str] = field(
            default=None,
            metadata={
                "name": "TypeID",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        current_index: Optional[int] = field(
            default=None,
            metadata={
                "name": "CurrentIndex",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )
        num_match_collections: Optional[int] = field(
            default=None,
            metadata={
                "name": "NumMatchCollections",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        match_collection: List["MatchInfoType.MatchType.MatchCollection"] = field(
            default_factory=list,
            metadata={
                "name": "MatchCollection",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )
        index: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

        @dataclass
        class MatchCollection:
            core_name: Optional[str] = field(
                default=None,
                metadata={
                    "name": "CoreName",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            match_index: Optional[int] = field(
                default=None,
                metadata={
                    "name": "MatchIndex",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            parameter: List[ParameterType] = field(
                default_factory=list,
                metadata={
                    "name": "Parameter",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            index: Optional[int] = field(
                default=None,
                metadata={
                    "type": "Attribute",
                    "required": True,
                },
            )


@dataclass
class Poly1DType:
    coef: List[PolyCoef1DType] = field(
        default_factory=list,
        metadata={
            "name": "Coef",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "min_occurs": 1,
        },
    )
    order1: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class Poly2DType:
    coef: List[PolyCoef2DType] = field(
        default_factory=list,
        metadata={
            "name": "Coef",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "min_occurs": 1,
        },
    )
    order1: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
    order2: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class PolygonType:
    vertex: List["PolygonType.Vertex"] = field(
        default_factory=list,
        metadata={
            "name": "Vertex",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "min_occurs": 3,
        },
    )
    size: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )

    @dataclass
    class Vertex(LatLonRestrictionType):
        index: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )


@dataclass
class RowColvertexType(RowColType):
    index: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class SCPCOAType:
    scptime: Optional[float] = field(
        default=None,
        metadata={
            "name": "SCPTime",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    arppos: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "ARPPos",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    arpvel: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "ARPVel",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    arpacc: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "ARPAcc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    side_of_track: Optional[SideOfTrack] = field(
        default=None,
        metadata={
            "name": "SideOfTrack",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    slant_range: Optional[float] = field(
        default=None,
        metadata={
            "name": "SlantRange",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    ground_range: Optional[float] = field(
        default=None,
        metadata={
            "name": "GroundRange",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    doppler_cone_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "DopplerConeAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    graze_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "GrazeAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": 0.0,
            "max_inclusive": 90.0,
        },
    )
    incidence_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "IncidenceAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": 0.0,
            "max_inclusive": 90.0,
        },
    )
    twist_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "TwistAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": -90.0,
            "max_inclusive": 90.0,
        },
    )
    slope_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "SlopeAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": 0.0,
            "max_inclusive": 90.0,
        },
    )
    azim_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "AzimAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": 0.0,
            "max_inclusive": 360.0,
        },
    )
    layover_ang: Optional[float] = field(
        default=None,
        metadata={
            "name": "LayoverAng",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "min_inclusive": 0.0,
            "max_inclusive": 360.0,
        },
    )


@dataclass
class DirParamType:
    uvect_ecf: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "UVectECF",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    ss: Optional[float] = field(
        default=None,
        metadata={
            "name": "SS",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    imp_resp_wid: Optional[float] = field(
        default=None,
        metadata={
            "name": "ImpRespWid",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    sgn: Optional[DirParamTypeSgn] = field(
        default=None,
        metadata={
            "name": "Sgn",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    imp_resp_bw: Optional[float] = field(
        default=None,
        metadata={
            "name": "ImpRespBW",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    kctr: Optional[float] = field(
        default=None,
        metadata={
            "name": "KCtr",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    delta_k1: Optional[float] = field(
        default=None,
        metadata={
            "name": "DeltaK1",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    delta_k2: Optional[float] = field(
        default=None,
        metadata={
            "name": "DeltaK2",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    delta_kcoapoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "DeltaKCOAPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    wgt_type: Optional["DirParamType.WgtType"] = field(
        default=None,
        metadata={
            "name": "WgtType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    wgt_funct: Optional["DirParamType.WgtFunct"] = field(
        default=None,
        metadata={
            "name": "WgtFunct",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class WgtType:
        window_name: Optional[str] = field(
            default=None,
            metadata={
                "name": "WindowName",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        parameter: List[ParameterType] = field(
            default_factory=list,
            metadata={
                "name": "Parameter",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )

    @dataclass
    class WgtFunct:
        wgt: List[ArrayDouble] = field(
            default_factory=list,
            metadata={
                "name": "Wgt",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 2,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )


@dataclass
class GainPhasePolyType:
    gain_poly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "GainPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    phase_poly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "PhasePoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class GeoInfoType:
    desc: List[ParameterType] = field(
        default_factory=list,
        metadata={
            "name": "Desc",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    point: Optional[LatLonRestrictionType] = field(
        default=None,
        metadata={
            "name": "Point",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    line: Optional[LineType] = field(
        default=None,
        metadata={
            "name": "Line",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    polygon: Optional[PolygonType] = field(
        default=None,
        metadata={
            "name": "Polygon",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    geo_info: List["GeoInfoType"] = field(
        default_factory=list,
        metadata={
            "name": "GeoInfo",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    name: Optional[str] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class ImageDataType:
    pixel_type: Optional[ImagePixelType] = field(
        default=None,
        metadata={
            "name": "PixelType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    amp_table: Optional["ImageDataType.AmpTable"] = field(
        default=None,
        metadata={
            "name": "AmpTable",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    num_rows: Optional[int] = field(
        default=None,
        metadata={
            "name": "NumRows",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    num_cols: Optional[int] = field(
        default=None,
        metadata={
            "name": "NumCols",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    first_row: Optional[int] = field(
        default=None,
        metadata={
            "name": "FirstRow",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    first_col: Optional[int] = field(
        default=None,
        metadata={
            "name": "FirstCol",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    full_image: Optional["ImageDataType.FullImage"] = field(
        default=None,
        metadata={
            "name": "FullImage",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    scppixel: Optional[RowColType] = field(
        default=None,
        metadata={
            "name": "SCPPixel",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    valid_data: Optional["ImageDataType.ValidData"] = field(
        default=None,
        metadata={
            "name": "ValidData",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class AmpTable:
        amplitude: List[ArrayDouble] = field(
            default_factory=list,
            metadata={
                "name": "Amplitude",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 256,
                "max_occurs": 256,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

    @dataclass
    class FullImage:
        num_rows: Optional[int] = field(
            default=None,
            metadata={
                "name": "NumRows",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        num_cols: Optional[int] = field(
            default=None,
            metadata={
                "name": "NumCols",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class ValidData:
        vertex: List[RowColvertexType] = field(
            default_factory=list,
            metadata={
                "name": "Vertex",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 3,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )


@dataclass
class PFAType:
    fpn: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "FPN",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    ipn: Optional[XYZType] = field(
        default=None,
        metadata={
            "name": "IPN",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    polar_ang_ref_time: Optional[float] = field(
        default=None,
        metadata={
            "name": "PolarAngRefTime",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    polar_ang_poly: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "PolarAngPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    spatial_freq_sfpoly: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "SpatialFreqSFPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    krg1: Optional[float] = field(
        default=None,
        metadata={
            "name": "Krg1",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    krg2: Optional[float] = field(
        default=None,
        metadata={
            "name": "Krg2",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    kaz1: Optional[float] = field(
        default=None,
        metadata={
            "name": "Kaz1",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    kaz2: Optional[float] = field(
        default=None,
        metadata={
            "name": "Kaz2",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    stdeskew: Optional["PFAType.STDeskew"] = field(
        default=None,
        metadata={
            "name": "STDeskew",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class STDeskew:
        applied: Optional[bool] = field(
            default=None,
            metadata={
                "name": "Applied",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        stdsphase_poly: Optional[Poly2DType] = field(
            default=None,
            metadata={
                "name": "STDSPhasePoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )


@dataclass
class RMAType:
    rmalgo_type: Optional[RMAlgorithm] = field(
        default=None,
        metadata={
            "name": "RMAlgoType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    image_type: Optional[RMAImageType] = field(
        default=None,
        metadata={
            "name": "ImageType",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    rmat: Optional["RMAType.RMAT"] = field(
        default=None,
        metadata={
            "name": "RMAT",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    rmcr: Optional["RMAType.RMCR"] = field(
        default=None,
        metadata={
            "name": "RMCR",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    inca: Optional["RMAType.INCA"] = field(
        default=None,
        metadata={
            "name": "INCA",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class RMAT:
        pos_ref: Optional[XYZType] = field(
            default=None,
            metadata={
                "name": "PosRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        vel_ref: Optional[XYZType] = field(
            default=None,
            metadata={
                "name": "VelRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        dop_cone_ang_ref: Optional[float] = field(
            default=None,
            metadata={
                "name": "DopConeAngRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class RMCR:
        pos_ref: Optional[XYZType] = field(
            default=None,
            metadata={
                "name": "PosRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        vel_ref: Optional[XYZType] = field(
            default=None,
            metadata={
                "name": "VelRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        dop_cone_ang_ref: Optional[float] = field(
            default=None,
            metadata={
                "name": "DopConeAngRef",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class INCA:
        time_capoly: Optional[Poly1DType] = field(
            default=None,
            metadata={
                "name": "TimeCAPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        r_ca_scp: Optional[float] = field(
            default=None,
            metadata={
                "name": "R_CA_SCP",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        freq_zero: Optional[float] = field(
            default=None,
            metadata={
                "name": "FreqZero",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        drate_sfpoly: Optional[Poly2DType] = field(
            default=None,
            metadata={
                "name": "DRateSFPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        dop_centroid_poly: Optional[Poly2DType] = field(
            default=None,
            metadata={
                "name": "DopCentroidPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )
        dop_centroid_coa: Optional[bool] = field(
            default=None,
            metadata={
                "name": "DopCentroidCOA",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )


@dataclass
class RadarCollectionType:
    tx_frequency: Optional["RadarCollectionType.TxFrequency"] = field(
        default=None,
        metadata={
            "name": "TxFrequency",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    ref_freq_index: Optional[int] = field(
        default=None,
        metadata={
            "name": "RefFreqIndex",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    waveform: Optional["RadarCollectionType.Waveform"] = field(
        default=None,
        metadata={
            "name": "Waveform",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    tx_polarization: Optional[str] = field(
        default=None,
        metadata={
            "name": "TxPolarization",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
            "pattern": r"[VHXYSE]|RHC|LHC|UNKNOWN|SEQUENCE|OTHER[^:]*",
        },
    )
    tx_sequence: Optional["RadarCollectionType.TxSequence"] = field(
        default=None,
        metadata={
            "name": "TxSequence",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    rcv_channels: Optional["RadarCollectionType.RcvChannels"] = field(
        default=None,
        metadata={
            "name": "RcvChannels",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    area: Optional["RadarCollectionType.Area"] = field(
        default=None,
        metadata={
            "name": "Area",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    parameter: List[ParameterType] = field(
        default_factory=list,
        metadata={
            "name": "Parameter",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class TxFrequency:
        min: Optional[float] = field(
            default=None,
            metadata={
                "name": "Min",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        max: Optional[float] = field(
            default=None,
            metadata={
                "name": "Max",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class Waveform:
        wfparameters: List["RadarCollectionType.Waveform.WFParameters"] = field(
            default_factory=list,
            metadata={
                "name": "WFParameters",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

        @dataclass
        class WFParameters:
            tx_pulse_length: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TxPulseLength",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tx_rfbandwidth: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TxRFBandwidth",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tx_freq_start: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TxFreqStart",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tx_fmrate: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TxFMRate",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            rcv_demod_type: Optional[WFParametersRcvDemodType] = field(
                default=None,
                metadata={
                    "name": "RcvDemodType",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            rcv_window_length: Optional[float] = field(
                default=None,
                metadata={
                    "name": "RcvWindowLength",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            adcsample_rate: Optional[float] = field(
                default=None,
                metadata={
                    "name": "ADCSampleRate",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            rcv_ifbandwidth: Optional[float] = field(
                default=None,
                metadata={
                    "name": "RcvIFBandwidth",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            rcv_freq_start: Optional[float] = field(
                default=None,
                metadata={
                    "name": "RcvFreqStart",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            rcv_fmrate: Optional[float] = field(
                default=None,
                metadata={
                    "name": "RcvFMRate",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            index: Optional[int] = field(
                default=None,
                metadata={
                    "type": "Attribute",
                    "required": True,
                },
            )

    @dataclass
    class TxSequence:
        tx_step: List["RadarCollectionType.TxSequence.TxStep"] = field(
            default_factory=list,
            metadata={
                "name": "TxStep",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

        @dataclass
        class TxStep:
            wfindex: Optional[int] = field(
                default=None,
                metadata={
                    "name": "WFIndex",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            tx_polarization: Optional[str] = field(
                default=None,
                metadata={
                    "name": "TxPolarization",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "pattern": r"[VHXYSE]|RHC|LHC|UNKNOWN|OTHER[^:]*",
                },
            )
            index: Optional[int] = field(
                default=None,
                metadata={
                    "type": "Attribute",
                    "required": True,
                },
            )

    @dataclass
    class RcvChannels:
        chan_parameters: List["RadarCollectionType.RcvChannels.ChanParameters"] = field(
            default_factory=list,
            metadata={
                "name": "ChanParameters",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

        @dataclass
        class ChanParameters:
            tx_rcv_polarization: Optional[str] = field(
                default=None,
                metadata={
                    "name": "TxRcvPolarization",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                    "pattern": r"(([VHXYSE]|RHC|LHC|OTHER[^:]*):([VHXYSE]|RHC|LHC|OTHER[^:]*))|OTHER|UNKNOWN",
                },
            )
            rcv_apcindex: Optional[int] = field(
                default=None,
                metadata={
                    "name": "RcvAPCIndex",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            index: Optional[int] = field(
                default=None,
                metadata={
                    "type": "Attribute",
                    "required": True,
                },
            )

    @dataclass
    class Area:
        corner: Optional["RadarCollectionType.Area.Corner"] = field(
            default=None,
            metadata={
                "name": "Corner",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        plane: Optional["RadarCollectionType.Area.Plane"] = field(
            default=None,
            metadata={
                "name": "Plane",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
            },
        )

        @dataclass
        class Corner:
            acp: List[LatLonHAECornerRestrictType] = field(
                default_factory=list,
                metadata={
                    "name": "ACP",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "min_occurs": 4,
                    "max_occurs": 4,
                },
            )

        @dataclass
        class Plane:
            ref_pt: Optional["RadarCollectionType.Area.Plane.RefPt"] = field(
                default=None,
                metadata={
                    "name": "RefPt",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            xdir: Optional["RadarCollectionType.Area.Plane.XDir"] = field(
                default=None,
                metadata={
                    "name": "XDir",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            ydir: Optional["RadarCollectionType.Area.Plane.YDir"] = field(
                default=None,
                metadata={
                    "name": "YDir",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            segment_list: Optional["RadarCollectionType.Area.Plane.SegmentList"] = field(
                default=None,
                metadata={
                    "name": "SegmentList",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )
            orientation: Optional[OrientationType] = field(
                default=None,
                metadata={
                    "name": "Orientation",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                },
            )

            @dataclass
            class RefPt:
                ecf: Optional[XYZType] = field(
                    default=None,
                    metadata={
                        "name": "ECF",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                line: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "Line",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                sample: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "Sample",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                name: Optional[str] = field(
                    default=None,
                    metadata={
                        "type": "Attribute",
                    },
                )

            @dataclass
            class XDir:
                uvect_ecf: Optional[XYZType] = field(
                    default=None,
                    metadata={
                        "name": "UVectECF",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                line_spacing: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "LineSpacing",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                num_lines: Optional[int] = field(
                    default=None,
                    metadata={
                        "name": "NumLines",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                first_line: Optional[int] = field(
                    default=None,
                    metadata={
                        "name": "FirstLine",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )

            @dataclass
            class YDir:
                uvect_ecf: Optional[XYZType] = field(
                    default=None,
                    metadata={
                        "name": "UVectECF",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                sample_spacing: Optional[float] = field(
                    default=None,
                    metadata={
                        "name": "SampleSpacing",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                num_samples: Optional[int] = field(
                    default=None,
                    metadata={
                        "name": "NumSamples",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )
                first_sample: Optional[int] = field(
                    default=None,
                    metadata={
                        "name": "FirstSample",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "required": True,
                    },
                )

            @dataclass
            class SegmentList:
                segment: List["RadarCollectionType.Area.Plane.SegmentList.Segment"] = field(
                    default_factory=list,
                    metadata={
                        "name": "Segment",
                        "type": "Element",
                        "namespace": "urn:SICD:1.3.0",
                        "min_occurs": 1,
                    },
                )
                size: Optional[int] = field(
                    default=None,
                    metadata={
                        "type": "Attribute",
                        "required": True,
                    },
                )

                @dataclass
                class Segment:
                    start_line: Optional[int] = field(
                        default=None,
                        metadata={
                            "name": "StartLine",
                            "type": "Element",
                            "namespace": "urn:SICD:1.3.0",
                            "required": True,
                        },
                    )
                    start_sample: Optional[int] = field(
                        default=None,
                        metadata={
                            "name": "StartSample",
                            "type": "Element",
                            "namespace": "urn:SICD:1.3.0",
                            "required": True,
                        },
                    )
                    end_line: Optional[int] = field(
                        default=None,
                        metadata={
                            "name": "EndLine",
                            "type": "Element",
                            "namespace": "urn:SICD:1.3.0",
                            "required": True,
                        },
                    )
                    end_sample: Optional[int] = field(
                        default=None,
                        metadata={
                            "name": "EndSample",
                            "type": "Element",
                            "namespace": "urn:SICD:1.3.0",
                            "required": True,
                        },
                    )
                    identifier: Optional[str] = field(
                        default=None,
                        metadata={
                            "name": "Identifier",
                            "type": "Element",
                            "namespace": "urn:SICD:1.3.0",
                            "required": True,
                        },
                    )
                    index: Optional[int] = field(
                        default=None,
                        metadata={
                            "type": "Attribute",
                            "required": True,
                        },
                    )


@dataclass
class RadiometricType:
    noise_level: Optional["RadiometricType.NoiseLevel"] = field(
        default=None,
        metadata={
            "name": "NoiseLevel",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    rcssfpoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "RCSSFPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    sigma_zero_sfpoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "SigmaZeroSFPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    beta_zero_sfpoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "BetaZeroSFPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    gamma_zero_sfpoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "GammaZeroSFPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class NoiseLevel:
        noise_level_type: Optional[NoiseLevelType] = field(
            default=None,
            metadata={
                "name": "NoiseLevelType",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        noise_poly: Optional[Poly2DType] = field(
            default=None,
            metadata={
                "name": "NoisePoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )


@dataclass
class RgAzCompType:
    az_sf: Optional[float] = field(
        default=None,
        metadata={
            "name": "AzSF",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    kaz_poly: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "KazPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class TimelineType:
    collect_start: Optional[XmlDateTime] = field(
        default=None,
        metadata={
            "name": "CollectStart",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    collect_duration: Optional[float] = field(
        default=None,
        metadata={
            "name": "CollectDuration",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    ipp: Optional["TimelineType.IPP"] = field(
        default=None,
        metadata={
            "name": "IPP",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class IPP:
        set: List["TimelineType.IPP.Set"] = field(
            default_factory=list,
            metadata={
                "name": "Set",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )

        @dataclass
        class Set:
            tstart: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TStart",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            tend: Optional[float] = field(
                default=None,
                metadata={
                    "name": "TEnd",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            ippstart: Optional[int] = field(
                default=None,
                metadata={
                    "name": "IPPStart",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            ippend: Optional[int] = field(
                default=None,
                metadata={
                    "name": "IPPEnd",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            ipppoly: Optional[Poly1DType] = field(
                default=None,
                metadata={
                    "name": "IPPPoly",
                    "type": "Element",
                    "namespace": "urn:SICD:1.3.0",
                    "required": True,
                },
            )
            index: Optional[int] = field(
                default=None,
                metadata={
                    "type": "Attribute",
                    "required": True,
                },
            )


@dataclass
class XYZPolyType:
    x: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "X",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    y: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "Y",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    z: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "Z",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class AntParamType:
    xaxis_poly: Optional[XYZPolyType] = field(
        default=None,
        metadata={
            "name": "XAxisPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    yaxis_poly: Optional[XYZPolyType] = field(
        default=None,
        metadata={
            "name": "YAxisPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    freq_zero: Optional[float] = field(
        default=None,
        metadata={
            "name": "FreqZero",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    eb: Optional["AntParamType.EB"] = field(
        default=None,
        metadata={
            "name": "EB",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    array: Optional[GainPhasePolyType] = field(
        default=None,
        metadata={
            "name": "Array",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    elem: Optional[GainPhasePolyType] = field(
        default=None,
        metadata={
            "name": "Elem",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    gain_bspoly: Optional[Poly1DType] = field(
        default=None,
        metadata={
            "name": "GainBSPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    ebfreq_shift: Optional[bool] = field(
        default=None,
        metadata={
            "name": "EBFreqShift",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    mlfreq_dilation: Optional[bool] = field(
        default=None,
        metadata={
            "name": "MLFreqDilation",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class EB:
        dcxpoly: Optional[Poly1DType] = field(
            default=None,
            metadata={
                "name": "DCXPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        dcypoly: Optional[Poly1DType] = field(
            default=None,
            metadata={
                "name": "DCYPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )


@dataclass
class GeoDataType:
    earth_model: Optional[EarthModel] = field(
        default=None,
        metadata={
            "name": "EarthModel",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    scp: Optional["GeoDataType.SCP"] = field(
        default=None,
        metadata={
            "name": "SCP",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    image_corners: Optional["GeoDataType.ImageCorners"] = field(
        default=None,
        metadata={
            "name": "ImageCorners",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    valid_data: Optional[PolygonType] = field(
        default=None,
        metadata={
            "name": "ValidData",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    geo_info: List[GeoInfoType] = field(
        default_factory=list,
        metadata={
            "name": "GeoInfo",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class SCP:
        ecf: Optional[XYZType] = field(
            default=None,
            metadata={
                "name": "ECF",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )
        llh: Optional[LatLonHAERestrictionType] = field(
            default=None,
            metadata={
                "name": "LLH",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "required": True,
            },
        )

    @dataclass
    class ImageCorners:
        icp: List[LatLonCornerStringType] = field(
            default_factory=list,
            metadata={
                "name": "ICP",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 4,
                "max_occurs": 4,
            },
        )


@dataclass
class GridType:
    image_plane: Optional[ImagePlane] = field(
        default=None,
        metadata={
            "name": "ImagePlane",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    type_value: Optional[ImageGridType] = field(
        default=None,
        metadata={
            "name": "Type",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    time_coapoly: Optional[Poly2DType] = field(
        default=None,
        metadata={
            "name": "TimeCOAPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    row: Optional[DirParamType] = field(
        default=None,
        metadata={
            "name": "Row",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    col: Optional[DirParamType] = field(
        default=None,
        metadata={
            "name": "Col",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )


@dataclass
class XYZPolyAttributeType(XYZPolyType):
    index: Optional[int] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )


@dataclass
class AntennaType:
    tx: Optional[AntParamType] = field(
        default=None,
        metadata={
            "name": "Tx",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    rcv: Optional[AntParamType] = field(
        default=None,
        metadata={
            "name": "Rcv",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    two_way: Optional[AntParamType] = field(
        default=None,
        metadata={
            "name": "TwoWay",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )


@dataclass
class PositionType:
    arppoly: Optional[XYZPolyType] = field(
        default=None,
        metadata={
            "name": "ARPPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
            "required": True,
        },
    )
    grppoly: Optional[XYZPolyType] = field(
        default=None,
        metadata={
            "name": "GRPPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    tx_apcpoly: Optional[XYZPolyType] = field(
        default=None,
        metadata={
            "name": "TxAPCPoly",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )
    rcv_apc: Optional["PositionType.RcvAPC"] = field(
        default=None,
        metadata={
            "name": "RcvAPC",
            "type": "Element",
            "namespace": "urn:SICD:1.3.0",
        },
    )

    @dataclass
    class RcvAPC:
        rcv_apcpoly: List[XYZPolyAttributeType] = field(
            default_factory=list,
            metadata={
                "name": "RcvAPCPoly",
                "type": "Element",
                "namespace": "urn:SICD:1.3.0",
                "min_occurs": 1,
            },
        )
        size: Optional[int] = field(
            default=None,
            metadata={
                "type": "Attribute",
                "required": True,
            },
        )


@dataclass
class SICD:
    class Meta:
        namespace = "urn:SICD:1.3.0"

    collection_info: Optional[CollectionInfoType] = field(
        default=None,
        metadata={
            "name": "CollectionInfo",
            "type": "Element",
            "required": True,
        },
    )
    image_creation: Optional[ImageCreationType] = field(
        default=None,
        metadata={
            "name": "ImageCreation",
            "type": "Element",
        },
    )
    image_data: Optional[ImageDataType] = field(
        default=None,
        metadata={
            "name": "ImageData",
            "type": "Element",
            "required": True,
        },
    )
    geo_data: Optional[GeoDataType] = field(
        default=None,
        metadata={
            "name": "GeoData",
            "type": "Element",
            "required": True,
        },
    )
    grid: Optional[GridType] = field(
        default=None,
        metadata={
            "name": "Grid",
            "type": "Element",
            "required": True,
        },
    )
    timeline: Optional[TimelineType] = field(
        default=None,
        metadata={
            "name": "Timeline",
            "type": "Element",
            "required": True,
        },
    )
    position: Optional[PositionType] = field(
        default=None,
        metadata={
            "name": "Position",
            "type": "Element",
            "required": True,
        },
    )
    radar_collection: Optional[RadarCollectionType] = field(
        default=None,
        metadata={
            "name": "RadarCollection",
            "type": "Element",
            "required": True,
        },
    )
    image_formation: Optional[ImageFormationType] = field(
        default=None,
        metadata={
            "name": "ImageFormation",
            "type": "Element",
            "required": True,
        },
    )
    scpcoa: Optional[SCPCOAType] = field(
        default=None,
        metadata={
            "name": "SCPCOA",
            "type": "Element",
            "required": True,
        },
    )
    radiometric: Optional[RadiometricType] = field(
        default=None,
        metadata={
            "name": "Radiometric",
            "type": "Element",
        },
    )
    antenna: Optional[AntennaType] = field(
        default=None,
        metadata={
            "name": "Antenna",
            "type": "Element",
        },
    )
    error_statistics: Optional[ErrorStatisticsType] = field(
        default=None,
        metadata={
            "name": "ErrorStatistics",
            "type": "Element",
        },
    )
    match_info: Optional[MatchInfoType] = field(
        default=None,
        metadata={
            "name": "MatchInfo",
            "type": "Element",
        },
    )
    rg_az_comp: Optional[RgAzCompType] = field(
        default=None,
        metadata={
            "name": "RgAzComp",
            "type": "Element",
        },
    )
    pfa: Optional[PFAType] = field(
        default=None,
        metadata={
            "name": "PFA",
            "type": "Element",
        },
    )
    rma: Optional[RMAType] = field(
        default=None,
        metadata={
            "name": "RMA",
            "type": "Element",
        },
    )
