from pydantic import Field
from ska_oso_pdm._shared import Metadata, PdmObject, ProjectID, TerseStrEnum
from ska_oso_pdm._shared.target import Target
from ska_oso_pdm.proposal.calibration import CalibrationStrategy
from ska_oso_pdm.proposal.data_product_sdp import DataProductSDP
from ska_oso_pdm.proposal.data_product_src import DataProductSRC
from ska_oso_pdm.proposal.observation_set import ObservationSets
from ska_oso_pdm.proposal.result import Result
[docs]
class Purpose(TerseStrEnum):
"""
A set of "purpose" categories associated with a project
"""
SCIENCE = "Science"
ENGINEERING = "Engineering"
COMMISSIONING = "Commissioning"
CALIBRATION = "Calibration"
[docs]
class Author(PdmObject):
"""
The author of a Proposal
"""
pis: list[str] = Field(default_factory=list)
cois: list[str] = Field(default_factory=list)
[docs]
class ScienceProgramme(PdmObject):
# This is the primary thing for the ObservingBlock. This list will be the same size as the group in the Proposal
observation_sets: list[ObservationSets] = Field(
default_factory=list,
description="List of observations associated with the proposal",
)
# The other fields are all required to get bits of data - when generating the SBDs we will link things from the observation sets
targets: list[Target] = Field(
default_factory=list, description="List of targets associated with the proposal"
)
calibration_strategies: list[CalibrationStrategy] = Field(
default_factory=list,
description="List of calibration strategies associated with the proposal",
)
data_product_sdps: list[DataProductSDP] = Field(
default_factory=list,
description="List of data products associated with the SDP",
)
data_product_src_nets: list[DataProductSRC] = Field(
default_factory=list,
description="List of data products associated with the SRC-Net",
)
result_details: list[Result] | None = Field(
default_factory=list,
description="List of target/observation set combinations with SensCalc results",
)
[docs]
class ObservingBlock(PdmObject):
obs_block_id: str
name: str | None = None
sbd_ids: list[str] = Field(default_factory=list)
science_programmes: list[ScienceProgramme] = Field(default_factory=list)
[docs]
class Project(PdmObject):
interface: str | None = None
prj_id: ProjectID | None = None
name: str | None = None
metadata: Metadata | None = None
prsl_ref: str | None = None
author: Author | None = None
purpose: Purpose | None = None
obs_blocks: list[ObservingBlock] = Field(default_factory=list)