diff --git a/csst_dfs_commons/models/common.py b/csst_dfs_commons/models/common.py index 84e5e62384dc25ccd6d308f55b4938b36dc2dd82..ed51da91fd10bb516e528bb89e5e9d4b75c7be6d 100644 --- a/csst_dfs_commons/models/common.py +++ b/csst_dfs_commons/models/common.py @@ -1,5 +1,6 @@ import copy from dataclasses import dataclass, field +import json def from_proto_model_list(clazz, records): return [clazz().from_proto_model(r) for r in records] @@ -11,10 +12,22 @@ def to_proto_model_list(protoObjClazz, records): return [r.to_proto_model(protoObjClazz) for r in records] def default_field(obj): - return field(default_factory=lambda: copy.copy(obj)) + return field(default_factory=lambda: copy.copy(obj)) + +class Dict(dict): + __setattr__ = dict.__setitem__ + __getattr__ = dict.__getitem__ + +def dict_to_object(dictObj): + if not isinstance(dictObj, dict): + return dictObj + inst=Dict() + for k,v in dictObj.items(): + inst[k] = dict_to_object(v) + return inst + @dataclass class BaseModel: - def from_dict(self, data = {}): for k in self.__dataclass_fields__.keys(): self.__setattr__(k, data.get(k, None)) @@ -24,7 +37,10 @@ class BaseModel: if record is None: return None for k in self.__dataclass_fields__.keys(): - self.__setattr__(k, record.__getattribute__(k)) + if k == 'header': + self.__setattr__(k, json.loads(record.__getattribute__(k))) + else: + self.__setattr__(k, record.__getattribute__(k)) return self def to_proto_model(self, protoObjClazz): @@ -35,19 +51,24 @@ class BaseModel: if isinstance(v, list) or isinstance(v, tuple): obj.__getattribute__(k).extend(v) elif isinstance(v, dict): - obj.__getattribute__(k).update(v) + if k == 'header': + obj.__setattr__(k, json.dumps(v)) + else: + obj.__getattribute__(k).update(v) else: obj.__setattr__(k, v) return obj @dataclass class Gaia3Record(BaseModel): - SourceId: int = -1 - RandomIndex: int = -1 + SolutionId: int = -1 + Designation: str = '' + SourceId: int = -1 + RandomIndex: int = -1 RefEpoch: float = -1 Ra: float = -1 RaError: float = -1 - Dec : float = -1 + Dec: float = -1 DecError: float = -1 Parallax: float = -1 ParallaxError: float = -1 @@ -57,7 +78,7 @@ class Gaia3Record(BaseModel): PmraError: float = -1 Pmdec: float = -1 PmdecError: float = -1 - RaDecCorr : float = -1 + RaDecCorr: float = -1 RaParallaxCorr: float = -1 RaPmraCorr: float = -1 RaPmdecCorr: float = -1 @@ -76,18 +97,18 @@ class Gaia3Record(BaseModel): AstrometricExcessNoise: float = -1 AstrometricExcessNoiseSig: float = -1 AstrometricParamsSolved: int = -1 - AstrometricPrimaryFlag: int = -1 + AstrometricPrimaryFlag: int = 0 NuEffUsedInAstrometry: float = -1 Pseudocolour: float = -1 PseudocolourError: float = -1 RaPseudocolourCorr: float = -1 DecPseudocolourCorr: float = -1 ParallaxPseudocolourCorr: float = -1 - PmraPseudocolourCorr : float = -1 + PmraPseudocolourCorr: float = -1 PmdecPseudocolourCorr: float = -1 AstrometricMatchedTransits: int = -1 VisibilityPeriodsUsed: int = -1 - AstrometricSigma5dMax : float = -1 + AstrometricSigma5dMax: float = -1 MatchedTransits: int = -1 NewMatchedTransits: int = -1 MatchedTransitsRemoved: int = -1 @@ -104,7 +125,7 @@ class Gaia3Record(BaseModel): ScanDirectionMeanK2: float = -1 ScanDirectionMeanK3: float = -1 ScanDirectionMeanK4: float = -1 - DuplicatedSource: int = -1 + DuplicatedSource: int = 0 PhotGNObs: int = -1 PhotGMeanFlux: float = -1 PhotGMeanFluxError: float = -1 @@ -120,29 +141,83 @@ class Gaia3Record(BaseModel): PhotRpMeanFluxError: float = -1 PhotRpMeanFluxOverError: float = -1 PhotRpMeanMag: float = -1 + PhotBpRpExcessFactor: float = -1 PhotBpNContaminatedTransits: float = -1 PhotBpNBlendedTransits: float = -1 PhotRpNContaminatedTransits: float = -1 PhotRpNBlendedTransits: float = -1 - PhotProcMode : float = -1 - PhotBpRpExcessFactor: float = -1 + PhotProcMode: float = -1 BpRp: float = -1 - BpG : float = -1 - GRp : float = -1 - Dr2RadialVelocity: float = -1 - Dr2RadialVelocityError: float = -1 - Dr2RvNbTransits: int = -1 - Dr2RvTemplateTeff: float = -1 - Dr2RvTemplateLogg: float = -1 - Dr2RvTemplateFeH : float = -1 + BpG: float = -1 + GRp: float = -1 + RadialVelocity: float = -1 + RadialVelocityError: float = -1 + RvMethodUsed: float = -1 + RvNbTransits: float = -1 + RvNbDeblendedTransits: float = -1 + RvVisibilityPeriodsUsed: float = -1 + RvExpectedSigToNoise: float = -1 + RvRenormalisedGof: float = -1 + RvChisqPvalue: float = -1 + RvTimeDuration: float = -1 + RvAmplitudeRobust: float = -1 + RvTemplateTeff: float = -1 + RvTemplateLogg: float = -1 + RvTemplateFeH: float = -1 + RvAtmParamOrigin: float = -1 + Vbroad: float = -1 + VbroadError: float = -1 + VbroadNbTransits: float = -1 + GrvsMag: float = -1 + GrvsMagError: float = -1 + GrvsMagNbTransits: float = -1 + RvsSpecSigToNoise: float = -1 + PhotVariableFlag: str = '' L: float = -1 B: float = -1 EclLon: float = -1 EclLat: float = -1 + InQsoCandidates: int = 0 + InGalaxyCandidates: int = 0 + NonSingleStar: int = -1 + HasXpContinuous: int = 0 + HasXpSampled: int = 0 + HasRvs: int = 0 + HasEpochPhotometry: int = 0 + HasEpochRv: int = 0 + HasMcmcGspphot: int = 0 + HasMcmcMsc: int = 0 + InAndromedaSurvey: int = 0 + ClassprobDscCombmodQuasar: float = -1 + ClassprobDscCombmodGalaxy: float = -1 + ClassprobDscCombmodStar: float = -1 + TeffGspphot: float = -1 + TeffGspphotLower: float = -1 + TeffGspphotUpper: float = -1 + LoggGspphot: float = -1 + LoggGspphotLower: float = -1 + LoggGspphotUpper: float = -1 + MhGspphot: float = -1 + MhGspphotLower: float = -1 + MhGspphotUpper: float = -1 + DistanceGspphot: float = -1 + DistanceGspphotLower: float = -1 + DistanceGspphotUpper: float = -1 + AzeroGspphot: float = -1 + AzeroGspphotLower: float = -1 + AzeroGspphotUpper: float = -1 + AgGspphot: float = -1 + AgGspphotLower: float = -1 + AgGspphotUpper: float = -1 + EbpminrpGspphot: float = -1 + EbpminrpGspphotLower: float = -1 + EbpminrpGspphotUpper: float = -1 + LibnameGspphot: str = '' NS8HIdx: int = -1 NS16HIdx: int = -1 NS32HIdx: int = -1 NS64HIdx: int = -1 - + FileIdx: int = -1 + def __init__(self): self.AstrometricNObsAc = 0 diff --git a/csst_dfs_commons/models/cpic.py b/csst_dfs_commons/models/cpic.py index 9706af496a0c3ca7fa90d35ca6532ae2ea8553cf..1e586e3873cf7d29e3806a58b7bff2f8c9d1d54a 100644 --- a/csst_dfs_commons/models/cpic.py +++ b/csst_dfs_commons/models/cpic.py @@ -30,6 +30,7 @@ class Level0Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + header: Dict[str,object] = default_field({}) @dataclasses.dataclass class CalMergeRecord(BaseModel): diff --git a/csst_dfs_commons/models/ifs.py b/csst_dfs_commons/models/ifs.py index 3e6b7ec90e7b05133f0093e18214dd47ec6f2487..0f92b289898cc8464b982859c0a2673584901842 100644 --- a/csst_dfs_commons/models/ifs.py +++ b/csst_dfs_commons/models/ifs.py @@ -13,14 +13,6 @@ class Level0PrcRecord(BaseModel): prc_time: str="" result_file_path: str="" -@dataclasses.dataclass -class Level0HeaderRecord(BaseModel): - id: int = 0 - object_name: str = "" - ra: float = 0 - dec: float = 0 - version: str = "" - @dataclasses.dataclass class Level0Record(BaseModel): id: int = 0 @@ -38,6 +30,7 @@ class Level0Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + header: Dict[str,object] = default_field({}) @dataclasses.dataclass class CalMergeRecord(BaseModel): diff --git a/csst_dfs_commons/models/mci.py b/csst_dfs_commons/models/mci.py index 3e6b7ec90e7b05133f0093e18214dd47ec6f2487..0f92b289898cc8464b982859c0a2673584901842 100644 --- a/csst_dfs_commons/models/mci.py +++ b/csst_dfs_commons/models/mci.py @@ -13,14 +13,6 @@ class Level0PrcRecord(BaseModel): prc_time: str="" result_file_path: str="" -@dataclasses.dataclass -class Level0HeaderRecord(BaseModel): - id: int = 0 - object_name: str = "" - ra: float = 0 - dec: float = 0 - version: str = "" - @dataclasses.dataclass class Level0Record(BaseModel): id: int = 0 @@ -38,6 +30,7 @@ class Level0Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + header: Dict[str,object] = default_field({}) @dataclasses.dataclass class CalMergeRecord(BaseModel): diff --git a/csst_dfs_commons/models/msc.py b/csst_dfs_commons/models/msc.py index b3141ad26999c6c15a663bfeac685eed95c1c012..ea9603685cac3610fafd819581f17b77ec35f123 100644 --- a/csst_dfs_commons/models/msc.py +++ b/csst_dfs_commons/models/msc.py @@ -30,6 +30,7 @@ class Level0Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + header: Dict[str,object] = default_field({}) @dataclasses.dataclass class CalMergeRecord(BaseModel): @@ -66,6 +67,17 @@ class Level1Record(BaseModel): pipeline_id: str="" refs: Dict[str,int] = default_field({}) +@dataclasses.dataclass +class Level1PrcRecord(BaseModel): + id: int = 0 + level1_id: int = 0 + pipeline_id: str = "" + prc_module: str = "" + params_file_path: str="" + prc_status: int = 0 + prc_time: str="" + result_file_path: str="" + @dataclasses.dataclass class Level2Record(BaseModel): id: int = 0 @@ -78,6 +90,20 @@ class Level2Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + import_status: int = 0 + +@dataclasses.dataclass +class Level2CoRecord(BaseModel): + id: int = 0 + data_type: str="" + filename : str="" + file_path: str="" + qc2_status: int = 0 + qc2_time: str="" + prc_status: int = 0 + prc_time: str="" + create_time: str="" + import_status: int = 0 @dataclasses.dataclass class Level2CatalogRecord(BaseModel): @@ -243,12 +269,164 @@ class Level2CatalogRecord(BaseModel): create_time: str = '' @dataclasses.dataclass -class Level1PrcRecord(BaseModel): - id: int = 0 - level1_id: int = 0 - pipeline_id: str = "" - prc_module: str = "" - params_file_path: str="" - prc_status: int = 0 - prc_time: str="" - result_file_path: str="" +class Level2CoCatalogRecord(BaseModel): + level2_id: int = 0 + seq: int = 0 + flux_aper: list = dataclasses.field(default_factory=list) + fluxerr_aper: list = dataclasses.field(default_factory=list) + mag_aper: list = dataclasses.field(default_factory=list) + magerr_aper: list = dataclasses.field(default_factory=list) + flux_auto: float = -1 + fluxerr_auto: float = -1 + mag_auto: float = -1 + magerr_auto: float = -1 + kron_radius: float = -1 + background: float = -1 + x_image: float = -1 + y_image: float = -1 + alpha_j2000: float = -1 + delta_j2000: float = -1 + a_image: float = -1 + b_image: float = -1 + theta_image: float = -1 + a_world: float = -1 + b_world: float = -1 + theta_world: float = -1 + theta_j2000: float = -1 + errx2_image: float = -1 + erry2_image: float = -1 + erra_image: float = -1 + errb_image: float = -1 + errtheta_image: float = -1 + erra_world: float = -1 + errb_world: float = -1 + errtheta_world: float = -1 + errtheta_j2000: float = -1 + xwin_image: float = -1 + ywin_image: float = -1 + alphawin_j2000: float = -1 + deltawin_j2000: float = -1 + errx2win_image: float = -1 + erry2win_image: float = -1 + flags: int = 0 + flags_weight: int = 0 + imaflags_iso: float = -1 + nimaflags_iso: float = -1 + fwhm_image: float = -1 + fwhm_world: float = -1 + elongation: float = -1 + ellipticity: float = -1 + class_star: float = -1 + flux_radius: float = -1 + fwhmpsf_image: float = -1 + fwhmpsf_world: float = -1 + xpsf_image: float = -1 + ypsf_image: float = -1 + alphapsf_j2000: float = -1 + deltapsf_j2000: float = -1 + flux_psf: float = -1 + fluxerr_psf: float = -1 + mag_psf: float = -1 + magerr_psf: float = -1 + niter_psf: int = 0 + chi2_psf: float = -1 + errx2psf_image: float = -1 + erry2psf_image: float = -1 + chi2_model: float = -1 + flags_model: int = 0 + niter_model: int = 0 + flux_model: float = -1 + fluxerr_model: float = -1 + mag_model: float = -1 + magerr_model: float = -1 + flux_hybrid: float = -1 + fluxerr_hybrid: float = -1 + mag_hybrid: float = -1 + magerr_hybrid: float = -1 + flux_max_model: float = -1 + mu_max_model: float = -1 + flux_eff_model: float = -1 + mu_eff_model: float = -1 + flux_mean_model: float = -1 + mu_mean_model: float = -1 + xmodel_image: float = -1 + ymodel_image: float = -1 + alphamodel_j2000: float = -1 + deltamodel_j2000: float = -1 + erry2model_image: float = -1 + erramodel_image: float = -1 + errbmodel_image: float = -1 + errthetamodel_image: float = -1 + erramodel_world: float = -1 + errbmodel_world: float = -1 + errthetamodel_world: float = -1 + errthetamodel_j2000: float = -1 + amodel_image: float = -1 + bmodel_image: float = -1 + thetamodel_image: float = -1 + amodel_world: float = -1 + bmodel_world: float = -1 + thetamodel_world: float = -1 + thetamodel_j2000: float = -1 + spread_model: float = -1 + spreaderr_model: float = -1 + noisearea_model: float = -1 + flux_spheroid: float = -1 + fluxerr_spheroid: float = -1 + mag_spheroid: float = -1 + magerr_spheroid: float = -1 + flux_max_spheroid: float = -1 + mu_max_spheroid: float = -1 + flux_eff_spheroid: float = -1 + mu_eff_spheroid: float = -1 + flux_mean_spheroid: float = -1 + mu_mean_spheroid: float = -1 + fluxratio_spheroid: float = -1 + fluxratioerr_spheroid: float = -1 + spheroid_reff_image: float = -1 + spheroid_refferr_image: float = -1 + spheroid_reff_world: float = -1 + spheroid_refferr_world: float = -1 + spheroid_aspect_image: float = -1 + spheroid_aspecterr_image: float = -1 + spheroid_aspect_world: float = -1 + spheroid_aspecterr_world: float = -1 + spheroid_theta_image: float = -1 + spheroid_thetaerr_image: float = -1 + spheroid_theta_world: float = -1 + spheroid_thetaerr_world: float = -1 + spheroid_theta_j2000: float = -1 + spheroid_sersicn: float = -1 + spheroid_sersicnerr: float = -1 + flux_disk: float = -1 + fluxerr_disk: float = -1 + mag_disk: float = -1 + magerr_disk: float = -1 + flux_max_disk: float = -1 + mu_max_disk: float = -1 + flux_eff_disk: float = -1 + mu_eff_disk: float = -1 + flux_mean_disk: float = -1 + mu_mean_disk: float = -1 + fluxratio_disk: float = -1 + fluxratioerr_disk: float = -1 + disk_scale_image: float = -1 + disk_scaleerr_image: float = -1 + disk_scale_world: float = -1 + disk_scaleerr_world: float = -1 + disk_aspect_image: float = -1 + disk_aspecterr_image: float = -1 + disk_aspect_world: float = -1 + disk_aspecterr_world: float = -1 + disk_inclination: float = -1 + disk_inclinationerr: float = -1 + disk_theta_image: float = -1 + disk_thetaerr_image: float = -1 + disk_theta_world: float = -1 + disk_thetaerr_world: float = -1 + disk_theta_j2000: float = -1 + NS8HIdx: int = 0 + NS16HIdx: int = 0 + NS32HIdx: int = 0 + NS64HIdx: int = 0 + create_time: str = '' diff --git a/csst_dfs_commons/models/sls.py b/csst_dfs_commons/models/sls.py index 4ad82d090e87a0f2ddff92d4502efa36138bea7b..701abaa92baea31cea6a8a34df41a88663a82782 100644 --- a/csst_dfs_commons/models/sls.py +++ b/csst_dfs_commons/models/sls.py @@ -30,6 +30,7 @@ class Level0Record(BaseModel): prc_status: int = 0 prc_time: str="" create_time: str="" + header: Dict[str,object] = default_field({}) @dataclasses.dataclass class CalMergeRecord(BaseModel): @@ -48,6 +49,7 @@ class CalMergeRecord(BaseModel): prc_time: str="" create_time: str="" level0_ids: list = dataclasses.field(default_factory=list) + @dataclasses.dataclass class Level1Record(BaseModel): id: int = 0 @@ -63,6 +65,7 @@ class Level1Record(BaseModel): create_time: str="" pipeline_id: str="" refs: Dict[str,int] = default_field({}) + @dataclasses.dataclass class Level2Spectra(BaseModel): id: int = 0