class FgcmMakeLutConnections(pipeBase.PipelineTaskConnections, dimensions=('instrument', ), defaultTemplates={}): camera = connectionTypes.PrerequisiteInput( doc="Camera instrument", name="camera", storageClass="Camera", dimensions=("instrument", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, ) transmission_optics = connectionTypes.PrerequisiteInput( doc="Optics transmission curve information", name="transmission_optics", storageClass="TransmissionCurve", dimensions=("instrument", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, deferLoad=True, ) transmission_sensor = connectionTypes.PrerequisiteInput( doc="Sensor transmission curve information", name="transmission_sensor", storageClass="TransmissionCurve", dimensions=( "instrument", "detector", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, deferLoad=True, multiple=True, ) transmission_filter = connectionTypes.PrerequisiteInput( doc="Filter transmission curve information", name="transmission_filter", storageClass="TransmissionCurve", dimensions=( "band", "instrument", "physical_filter", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, deferLoad=True, multiple=True, ) fgcmLookUpTable = connectionTypes.Output( doc=("Atmosphere + instrument look-up-table for FGCM throughput and " "chromatic corrections."), name="fgcmLookUpTable", storageClass="Catalog", dimensions=("instrument", ), )
class SkyCorrectionConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "visit")): rawLinker = cT.Input( doc="Raw data to provide exp-visit linkage to connect calExp inputs to camera/sky calibs.", name="raw", multiple=True, deferLoad=True, storageClass="ExposureU", dimensions=["instrument", "exposure", "detector"], ) calExpArray = cT.Input( doc="Input exposures to process", name="calexp", multiple=True, storageClass="ExposureF", dimensions=["instrument", "visit", "detector"], ) calBkgArray = cT.Input( doc="Input background files to use", multiple=True, name="calexpBackground", storageClass="Background", dimensions=["instrument", "visit", "detector"], ) camera = cT.PrerequisiteInput( doc="Input camera to use.", name="camera", storageClass="Camera", dimensions=["instrument", "calibration_label"], ) skyCalibs = cT.PrerequisiteInput( doc="Input sky calibrations to use.", name="sky", multiple=True, storageClass="ExposureF", dimensions=["instrument", "physical_filter", "detector", "calibration_label"], ) calExpCamera = cT.Output( doc="Output camera image.", name='calexp_camera', storageClass="ImageF", dimensions=["instrument", "visit"], ) skyCorr = cT.Output( doc="Output sky corrected images.", name='skyCorr', multiple=True, storageClass="Background", dimensions=["instrument", "visit", "detector"], )
class GenerateDonutCatalogWcsTaskConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "visit", "detector")): """ Specify the pipeline connections needed for GenerateDonutCatalogWcsTask. We need the reference catalogs and exposures and will produce donut catalogs for a specified instrument. """ refCatalogs = connectionTypes.PrerequisiteInput( doc="Reference catalog", storageClass="SimpleCatalog", dimensions=("htm7", ), multiple=True, deferLoad=True, name="cal_ref_cat", ) exposure = connectionTypes.Input( doc="Input exposure to make measurements on", dimensions=("exposure", "detector", "instrument"), storageClass="Exposure", name="postISRCCD", ) donutCatalog = connectionTypes.Output( doc="Donut Locations", dimensions=( "visit", "detector", "instrument", ), storageClass="DataFrame", name="donutCatalog", )
class MergeDefectsConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "detector")): inputDefects = cT.Input( name="singleExpDefects", doc="Measured defect lists.", storageClass="Defects", dimensions=("instrument", "detector", "exposure"), multiple=True, ) camera = cT.PrerequisiteInput( name='camera', doc="Camera associated with these defects.", storageClass="Camera", dimensions=("instrument", ), isCalibration=True, lookupFunction=lookupStaticCalibration, ) mergedDefects = cT.Output( name="defects", doc="Final merged defects.", storageClass="Defects", dimensions=("instrument", "detector"), multiple=False, isCalibration=True, )
class ProcessBrightStarsConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "visit", "detector")): inputExposure = cT.Input( doc="Input exposure from which to extract bright star stamps", name="calexp", storageClass="ExposureF", dimensions=("visit", "detector") ) skyCorr = cT.Input( doc="Input Sky Correction to be subtracted from the calexp if doApplySkyCorr=True", name="skyCorr", storageClass="Background", dimensions=("instrument", "visit", "detector") ) refCat = cT.PrerequisiteInput( doc="Reference catalog that contains bright star positions", name="gaia_dr2_20200414", storageClass="SimpleCatalog", dimensions=("skypix",), multiple=True, deferLoad=True ) brightStarStamps = cT.Output( doc="Set of preprocessed postage stamps, each centered on a single bright star.", name="brightStarStamps", storageClass="BrightStarStamps", dimensions=("visit", "detector") ) def __init__(self, *, config=None): super().__init__(config=config) if not config.doApplySkyCorr: self.inputs.remove("skyCorr")
class SingleStarCentroidTaskConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "visit", "detector")): inputExp = cT.Input( name="icExp", doc="Image-characterize output exposure", storageClass="ExposureF", dimensions=("instrument", "visit", "detector"), multiple=False, ) inputSources = cT.Input( name="icSrc", doc="Image-characterize output sources.", storageClass="SourceCatalog", dimensions=("instrument", "visit", "detector"), multiple=False, ) astromRefCat = cT.PrerequisiteInput( doc="Reference catalog to use for astrometry", name="gaia_dr2_20200414", storageClass="SimpleCatalog", dimensions=("skypix", ), deferLoad=True, multiple=True, ) atmospecCentroid = cT.Output( name="atmospecCentroid", doc="The main star centroid in yaml format.", storageClass="StructuredDataDict", dimensions=("instrument", "visit", "detector"), )
class CpVerifyVisitExpMergeConnections(pipeBase.PipelineTaskConnections, dimensions={"instrument", "visit"}, defaultTemplates={}): inputStats = cT.Input( name="detectorStats", doc="Input statistics to merge.", storageClass="StructuredDataDict", dimensions=["instrument", "visit", "detector"], multiple=True, ) camera = cT.PrerequisiteInput( name="camera", storageClass="Camera", doc="Input camera.", dimensions=[ "instrument", ], isCalibration=True, ) outputStats = cT.Output( name="exposureStats", doc="Output statistics.", storageClass="StructuredDataDict", dimensions=["instrument", "visit"], )
class CpFlatNormalizationConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "physical_filter")): inputMDs = cT.Input( name="cpFlatProc_metadata", doc="Input metadata for each visit/detector in input set.", storageClass="PropertyList", dimensions=("instrument", "physical_filter", "detector", "exposure"), multiple=True, ) camera = cT.PrerequisiteInput( name="camera", doc="Input camera to use for gain lookup.", storageClass="Camera", dimensions=("instrument", ), lookupFunction=lookupStaticCalibration, isCalibration=True, ) outputScales = cT.Output( name="cpFlatNormScales", doc="Output combined proposed calibration.", storageClass="StructuredDataDict", dimensions=("instrument", "physical_filter"), )
class PhotonTransferCurveSolveConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "detector") ): inputCovariances = cT.Input( name="ptcCovariances", doc="Tuple with measured covariances from flats.", storageClass="PhotonTransferCurveDataset", dimensions=("instrument", "exposure", "detector"), multiple=True, ) camera = cT.PrerequisiteInput( name="camera", doc="Camera the input data comes from.", storageClass="Camera", dimensions=("instrument", ), isCalibration=True, lookupFunction=lookupStaticCalibration, ) outputPtcDataset = cT.Output( name="ptcDatsetProposal", doc="Output proposed ptc dataset.", storageClass="PhotonTransferCurveDataset", dimensions=("instrument", "detector"), multiple=False, isCalibration=True, )
def __init__(self, *, config=None): super().__init__(config=config) if config and config.exposureScaling != 'InputList': self.inputs.discard("inputScales") if config and len(config.calibrationDimensions) != 0: newDimensions = tuple(config.calibrationDimensions) newOutputData = cT.Output( name=self.outputData.name, doc=self.outputData.doc, storageClass=self.outputData.storageClass, dimensions=self.allConnections['outputData'].dimensions + newDimensions, isCalibration=True, ) self.dimensions.update(config.calibrationDimensions) self.outputData = newOutputData if config.exposureScaling == 'InputList': newInputScales = cT.PrerequisiteInput( name=self.inputScales.name, doc=self.inputScales.doc, storageClass=self.inputScales.storageClass, dimensions=self.allConnections['inputScales'].dimensions + newDimensions) self.dimensions.update(config.calibrationDimensions) self.inputScales = newInputScales
class GridFitConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "exposure", "detector")): inputCat = cT.Input( doc="Source catalog produced by characterize spot task.", name='spotSrc', storageClass="SourceCatalog", dimensions=("instrument", "exposure", "detector")) bbox = cT.Input(doc="Bounding box for CCD.", name="postISRCCD.bbox", storageClass="Box2I", dimensions=("instrument", "exposure", "detector")) gridCalibTable = cT.PrerequisiteInput( doc="Calibration table for spot grid.", name="gridCalibration", storageClass="AstropyTable", dimensions=("instrument", "detector"), isCalibration=True) gridSourceCat = cT.Output(doc="Source catalog produced by grid fit task.", name="gridSpotSrc", storageClass="SourceCatalog", dimensions=("instrument", "exposure", "detector")) def __init__(self, *, config=None): super().__init__(config=config) if config.useGridCalibration is not True: self.prerequisiteInputs.discard("gridCalibTable")
class PatchConnections(PipelineTaskConnections, dimensions={"skymap", "tract"}): a = connectionTypes.Input( name="PatchA", storageClass="StructuredData", multiple=True, dimensions={"skymap", "tract", "patch"}, ) b = connectionTypes.PrerequisiteInput( name="PatchB", storageClass="StructuredData", multiple=False, dimensions={"skymap", "tract"}, ) out = connectionTypes.Output( name="PatchOut", storageClass="StructuredData", multiple=True, dimensions={"skymap", "tract", "patch"}, ) def __init__(self, *, config=None): super().__init__(config=config) if not config.doUseB: self.prerequisiteInputs.remove("b")
class ApertureTaskConnections( pipeBase.PipelineTaskConnections, defaultTemplates={"outputName": "customAperture"}, dimensions=("visit", "band"), ): exposures = connectionTypes.Input( doc="Input exposure to make measurements on", dimensions=("visit", "detector", "band"), storageClass="ExposureF", name="calexp", multiple=True, deferLoad=True, ) backgrounds = connectionTypes.Input( doc="Background model for the exposure", storageClass="Background", name="calexpBackground", dimensions=("visit", "detector", "band"), multiple=True, deferLoad=True, ) inputCatalogs = connectionTypes.Input( doc="Input catalog with existing measurements", dimensions=( "visit", "detector", "band", ), storageClass="SourceCatalog", name="src", multiple=True, deferLoad=True, ) outputCatalogs = connectionTypes.Output( doc="Aperture measurements", dimensions=("visit", "detector", "band"), storageClass="SourceCatalog", name="{outputName}", multiple=True, ) outputSchema = connectionTypes.InitOutput( doc="Schema created in Aperture PipelineTask", storageClass="SourceCatalog", name="{outputName}_schema", ) areaMasks = connectionTypes.PrerequisiteInput( doc="A mask of areas to be ignored", storageClass="Mask", dimensions=("visit", "detector", "band"), name="ApAreaMask", multiple=True, deferLoad=True, ) def __init__(self, *, config=None): super().__init__(config=config) if config.doLocalBackground is False: self.inputs.remove("backgrounds")
class CpVerifyStatsConnections( pipeBase.PipelineTaskConnections, dimensions={"instrument", "exposure", "detector"}, defaultTemplates={}): inputExp = cT.Input( name="postISRCCD", doc="Input exposure to calculate statistics for.", storageClass="Exposure", dimensions=["instrument", "exposure", "detector"], ) taskMetadata = cT.Input( name="isrTask_metadata", doc="Input task metadata to extract statistics from.", storageClass="PropertySet", dimensions=["instrument", "exposure", "detector"], ) inputCatalog = cT.Input( name="src", doc="Input catalog to calculate statistics for.", storageClass="SourceCatalog", dimensions=["instrument", "visit", "detector"], ) uncorrectedCatalog = cT.Input( name="uncorrectedSrc", doc="Input catalog without correction applied.", storageClass="SourceCatalog", dimensions=["instrument", "visit", "detector"], ) camera = cT.PrerequisiteInput( name="camera", storageClass="Camera", doc="Input camera.", dimensions=[ "instrument", ], isCalibration=True, ) outputStats = cT.Output( name="detectorStats", doc="Output statistics from cp_verify.", storageClass="StructuredDataDict", dimensions=["instrument", "exposure", "detector"], ) def __init__(self, *, config=None): super().__init__(config=config) if len(config.metadataStatKeywords) < 1: self.inputs.discard('taskMetadata') if len(config.catalogStatKeywords) < 1: self.inputs.discard('inputCatalog') self.inputs.discard('uncorrectedCatalog')
class VircamIsrTaskConnections(IsrTaskConnections): confidence = cT.PrerequisiteInput( name="confidence", doc="Confidence map associated with input exposure to process.", storageClass="ExposureF", dimensions=["instrument", "exposure", "detector"], ) def __init__(self, *, config=None): super().__init__(config=config) if config.doVircamConfidence is not True: self.prerequisiteInputs.discard("confidence")
class EstimateZernikesBaseConnections(pipeBase.PipelineTaskConnections, dimensions=("detector", "instrument")): donutCatalog = connectionTypes.Input( doc="Donut Locations", dimensions=( "visit", "detector", "instrument", ), storageClass="DataFrame", name="donutCatalog", multiple=True, ) camera = connectionTypes.PrerequisiteInput( name="camera", storageClass="Camera", doc="Input camera to construct complete exposures.", dimensions=["instrument"], isCalibration=True, lookupFunction=lookupStaticCalibration, ) donutStampsExtra = connectionTypes.Output( doc="Extra-focal Donut Postage Stamp Images", dimensions=("visit", "detector", "instrument"), storageClass="StampsBase", name="donutStampsExtra", multiple=True, ) donutStampsIntra = connectionTypes.Output( doc="Intra-focal Donut Postage Stamp Images", dimensions=("visit", "detector", "instrument"), storageClass="StampsBase", name="donutStampsIntra", multiple=True, ) outputZernikesRaw = connectionTypes.Output( doc="Zernike Coefficients from all donuts", dimensions=("visit", "detector", "instrument"), storageClass="NumpyArray", name="zernikeEstimateRaw", multiple=True, ) outputZernikesAvg = connectionTypes.Output( doc="Zernike Coefficients averaged over donuts", dimensions=("visit", "detector", "instrument"), storageClass="NumpyArray", name="zernikeEstimateAvg", multiple=True, )
class CutOutDonutsBaseTaskConnections(pipeBase.PipelineTaskConnections, dimensions=("exposure", "instrument")): exposures = connectionTypes.Input( doc="Input exposure to make measurements on", dimensions=("exposure", "detector", "instrument"), storageClass="Exposure", name="postISRCCD", multiple=True, ) donutCatalog = connectionTypes.Input( doc="Donut Locations", dimensions=( "visit", "detector", "instrument", ), storageClass="DataFrame", name="donutCatalog", multiple=True, ) camera = connectionTypes.PrerequisiteInput( name="camera", storageClass="Camera", doc="Input camera to construct complete exposures.", dimensions=["instrument"], isCalibration=True, lookupFunction=lookupStaticCalibration, ) donutStampsExtra = connectionTypes.Output( doc="Extra-focal Donut Postage Stamp Images", dimensions=("visit", "detector", "instrument"), storageClass="StampsBase", name="donutStampsExtra", multiple=True, ) donutStampsIntra = connectionTypes.Output( doc="Intra-focal Donut Postage Stamp Images", dimensions=("visit", "detector", "instrument"), storageClass="StampsBase", name="donutStampsIntra", multiple=True, )
class VisualizeBinExpConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "detector")): inputExp = cT.Input( name="calexp", doc="Input exposure data to mosaic.", storageClass="ExposureF", dimensions=("instrument", "detector"), ) camera = cT.PrerequisiteInput( name="camera", doc="Input camera to use for mosaic geometry.", storageClass="Camera", dimensions=("instrument", "calibration_label"), ) outputExp = cT.Output( name="calexpBin", doc="Output binned image.", storageClass="ExposureF", dimensions=("instrument", "detector"), )
class VisualizeMosaicExpConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", )): inputExps = cT.Input( name="calexpBin", doc="Input binned images mosaic.", storageClass="ExposureF", dimensions=("instrument", "detector"), multiple=True, ) camera = cT.PrerequisiteInput( name="camera", doc="Input camera to use for mosaic geometry.", storageClass="Camera", dimensions=("instrument", "calibration_label"), ) outputData = cT.Output( name="calexpFocalPlane", doc="Output binned mosaicked frame.", storageClass="ImageF", dimensions=("instrument", ), )
class CrosstalkSolveConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "detector")): inputRatios = cT.Input( name="crosstalkRatios", doc="Ratios measured for an input exposure.", storageClass="StructuredDataDict", dimensions=("instrument", "exposure", "detector"), multiple=True, ) inputFluxes = cT.Input( name="crosstalkFluxes", doc="Fluxes of CT source pixels, for nonlinear fits.", storageClass="StructuredDataDict", dimensions=("instrument", "exposure", "detector"), multiple=True, ) camera = cT.PrerequisiteInput( name="camera", doc="Camera the input data comes from.", storageClass="Camera", dimensions=("instrument",), isCalibration=True, lookupFunction=lookupStaticCalibration, ) outputCrosstalk = cT.Output( name="crosstalk", doc="Output proposed crosstalk calibration.", storageClass="CrosstalkCalib", dimensions=("instrument", "detector"), multiple=False, isCalibration=True, ) def __init__(self, *, config=None): super().__init__(config=config) if config.fluxOrder == 0: self.inputs.discard("inputFluxes")
class MeasureDefectsConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "exposure", "detector")): inputExp = cT.Input(name="defectExps", doc="Input ISR-processed exposures to measure.", storageClass="Exposure", dimensions=("instrument", "detector", "exposure"), multiple=False) camera = cT.PrerequisiteInput( name='camera', doc="Camera associated with this exposure.", storageClass="Camera", dimensions=("instrument", ), isCalibration=True, lookupFunction=lookupStaticCalibration, ) outputDefects = cT.Output( name="singleExpDefects", doc="Output measured defects.", storageClass="Defects", dimensions=("instrument", "detector", "exposure"), )
class CpVerifyBfkConnections(CpVerifyStatsConnections, dimensions={'instrument', 'visit', 'detector'}): inputExp = cT.Input( name="icExp", doc="Input exposure to calculate statistics for.", storageClass="ExposureF", dimensions=["instrument", "visit", "detector"], ) inputCatalog = cT.Input( name="icSrc", doc="Input catalog to calculate statistics from.", storageClass="SourceCatalog", dimensions=["instrument", "visit", "detector"], ) uncorrectedCatalog = cT.Input( name="uncorrectedSrc", doc="Input catalog without correction applied.", storageClass="SourceCatalog", dimensions=["instrument", "visit", "detector"], ) camera = cT.PrerequisiteInput( name="camera", storageClass="Camera", doc="Input camera.", dimensions=[ "instrument", ], isCalibration=True, ) outputStats = cT.Output( name="detectorStats", doc="Output statistics from cp_verify.", storageClass="StructuredDataDict", dimensions=["instrument", "visit", "detector"], )
class ApertureTaskConnections( pipeBase.PipelineTaskConnections, defaultTemplates={"outputName": "customAperture"}, dimensions=("visit", "band"), ): exposures = connectionTypes.Input( doc="Input exposure to make measurements on", dimensions=("visit", "detector", "band"), storageClass="ExposureF", name="calexp", multiple=True, deferLoad=True, ) backgrounds = connectionTypes.Input( doc="Background model for the exposure", storageClass="Background", name="calexpBackground", dimensions=("visit", "detector", "band"), multiple=True, deferLoad=True, ) inputCatalogs = connectionTypes.Input( doc="Input catalog with existing measurements", dimensions=( "visit", "detector", "band", ), storageClass="SourceCatalog", name="src", multiple=True, deferLoad=True, ) outputCatalogs = connectionTypes.Output( doc="Aperture measurements", dimensions=("visit", "detector", "band"), storageClass="SourceCatalog", name="{outputName}", multiple=True, ) outputSchema = connectionTypes.InitOutput( doc="Schema created in Aperture PipelineTask", storageClass="SourceCatalog", name="{outputName}_schema", ) areaMasks = connectionTypes.PrerequisiteInput( doc="A mask of areas to be ignored", storageClass="Mask", dimensions=("visit", "detector", "band"), name="ApAreaMask", multiple=True, deferLoad=True, ) def __init__(self, *, config=None): super().__init__(config=config) if config.doLocalBackground is False: self.inputs.remove("backgrounds") def adjustQuantum(self, inputs, outputs, label, data_id): # Find the data IDs common to all multiple=True inputs. input_names = ("exposures", "inputCatalogs", "backgrounds") inputs_by_data_id = [] for name in input_names: inputs_by_data_id.append( {ref.dataId: ref for ref in inputs[name][1]}) # Intersection looks messy because dict_keys only supports |. # not an "intersection" method. data_ids_to_keep = functools.reduce(operator.__and__, (d.keys() for d in inputs_by_data_id)) # Pull out just the DatasetRefs that are in common in the inputs # and order them consistently (note that consistent ordering is not # automatic). adjusted_inputs = {} for name, refs in zip(input_names, inputs_by_data_id): adjusted_inputs[name] = ( inputs[name][0], [refs[data_id] for data_id in data_ids_to_keep], ) # Also update the full dict of inputs, so we can pass it to # super() later. inputs[name] = adjusted_inputs[name] # Do the same for the outputs. outputs_by_data_id = { ref.dataId: ref for ref in outputs["outputCatalogs"][1] } adjusted_outputs = { "outputCatalogs": ( outputs["outputCatalogs"][0], [outputs_by_data_id[data_id] for data_id in data_ids_to_keep], ) } outputs["outputCatalogs"] = adjusted_outputs["outputCatalogs"] # Delegate to super(); ignore results because they are guaranteed # to be empty. super().adjustQuantum(inputs, outputs, label, data_id) return adjusted_inputs, adjusted_outputs
class FgcmCalibrateTractTableConnections(pipeBase.PipelineTaskConnections, dimensions=( "instrument", "tract", )): camera = connectionTypes.PrerequisiteInput( doc="Camera instrument", name="camera", storageClass="Camera", dimensions=("instrument", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, ) fgcmLookUpTable = connectionTypes.PrerequisiteInput( doc=("Atmosphere + instrument look-up-table for FGCM throughput and " "chromatic corrections."), name="fgcmLookUpTable", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) sourceSchema = connectionTypes.InitInput( doc="Schema for source catalogs", name="src_schema", storageClass="SourceCatalog", ) refCat = connectionTypes.PrerequisiteInput( doc="Reference catalog to use for photometric calibration", name="cal_ref_cat", storageClass="SimpleCatalog", dimensions=("skypix", ), deferLoad=True, multiple=True, ) source_catalogs = connectionTypes.Input( doc="Source table in parquet format, per visit", name="sourceTable_visit", storageClass="DataFrame", dimensions=("instrument", "visit"), deferLoad=True, multiple=True, ) visitSummary = connectionTypes.Input( doc="Per-visit summary statistics table", name="visitSummary", storageClass="ExposureCatalog", dimensions=("instrument", "visit"), deferLoad=True, multiple=True, ) background = connectionTypes.Input( doc="Calexp background model", name="calexpBackground", storageClass="Background", dimensions=("instrument", "visit", "detector"), deferLoad=True, multiple=True, ) fgcmPhotoCalib = connectionTypes.Output( doc= "Per-tract, per-visit photoCalib exposure catalogs produced from fgcm calibration", name="fgcmPhotoCalibTractCatalog", storageClass="ExposureCatalog", dimensions=( "instrument", "tract", "visit", ), multiple=True, ) fgcmTransmissionAtmosphere = connectionTypes.Output( doc= "Per-visit atmosphere transmission files produced from fgcm calibration", name="transmission_atmosphere_fgcm_tract", storageClass="TransmissionCurve", dimensions=( "instrument", "tract", "visit", ), multiple=True, ) fgcmRepeatability = connectionTypes.Output( doc="Per-band raw repeatability numbers in the fgcm tract calibration", name="fgcmRawRepeatability", storageClass="Catalog", dimensions=( "instrument", "tract", ), multiple=False, ) def __init__(self, *, config=None): super().__init__(config=config) # The ref_dataset_name will be deprecated with Gen2 loaderName = config.fgcmBuildStars.fgcmLoadReferenceCatalog.refObjLoader.ref_dataset_name if config.connections.refCat != loaderName: raise ValueError( "connections.refCat must be the same as " "config.fgcmBuildStars.fgcmLoadReferenceCatalog.refObjLoader.ref_dataset_name" ) if config.fgcmOutputProducts.doReferenceCalibration: loaderName = config.fgcmOutputProducts.refObjLoader.ref_dataset_name if config.connections.refCat != loaderName: raise ValueError( "connections.refCat must be the same as " "config.fgcmOutputProducts.refObjLoader.ref_dataset_name") if not config.fgcmBuildStars.doModelErrorsWithBackground: self.inputs.remove("background") if not config.fgcmOutputProducts.doAtmosphereOutput: self.prerequisiteInputs.remove("fgcmAtmosphereParameters") if not config.fgcmOutputProducts.doZeropointOutput: self.prerequisiteInputs.remove("fgcmZeropoints")
class CalibrateConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", "visit", "detector"), defaultTemplates={}): icSourceSchema = cT.InitInput( doc="Schema produced by characterize image task, used to initialize this task", name="icSrc_schema", storageClass="SourceCatalog", ) outputSchema = cT.InitOutput( doc="Schema after CalibrateTask has been initialized", name="src_schema", storageClass="SourceCatalog", ) exposure = cT.Input( doc="Input image to calibrate", name="icExp", storageClass="ExposureF", dimensions=("instrument", "visit", "detector"), ) background = cT.Input( doc="Backgrounds determined by characterize task", name="icExpBackground", storageClass="Background", dimensions=("instrument", "visit", "detector"), ) icSourceCat = cT.Input( doc="Source catalog created by characterize task", name="icSrc", storageClass="SourceCatalog", dimensions=("instrument", "visit", "detector"), ) astromRefCat = cT.PrerequisiteInput( doc="Reference catalog to use for astrometry", name="cal_ref_cat", storageClass="SimpleCatalog", dimensions=("skypix",), deferLoad=True, multiple=True, ) photoRefCat = cT.PrerequisiteInput( doc="Reference catalog to use for photometric calibration", name="cal_ref_cat", storageClass="SimpleCatalog", dimensions=("skypix",), deferLoad=True, multiple=True ) outputExposure = cT.Output( doc="Exposure after running calibration task", name="calexp", storageClass="ExposureF", dimensions=("instrument", "visit", "detector"), ) outputCat = cT.Output( doc="Source catalog produced in calibrate task", name="src", storageClass="SourceCatalog", dimensions=("instrument", "visit", "detector"), ) outputBackground = cT.Output( doc="Background models estimated in calibration task", name="calexpBackground", storageClass="Background", dimensions=("instrument", "visit", "detector"), ) matches = cT.Output( doc="Source/refObj matches from the astrometry solver", name="srcMatch", storageClass="Catalog", dimensions=("instrument", "visit", "detector"), ) matchesDenormalized = cT.Output( doc="Denormalized matches from astrometry solver", name="srcMatchFull", storageClass="Catalog", dimensions=("instrument", "visit", "detector"), ) def __init__(self, *, config=None): super().__init__(config=config) if config.doAstrometry is False: self.prerequisiteInputs.remove("astromRefCat") if config.doPhotoCal is False: self.prerequisiteInputs.remove("photoRefCat") if config.doWriteMatches is False or config.doAstrometry is False: self.outputs.remove("matches") if config.doWriteMatchesDenormalized is False or config.doAstrometry is False: self.outputs.remove("matchesDenormalized")
class FgcmBuildStarsTableConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", ), defaultTemplates={}): camera = connectionTypes.PrerequisiteInput( doc="Camera instrument", name="camera", storageClass="Camera", dimensions=("instrument", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, ) fgcmLookUpTable = connectionTypes.PrerequisiteInput( doc=("Atmosphere + instrument look-up-table for FGCM throughput and " "chromatic corrections."), name="fgcmLookUpTable", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) sourceSchema = connectionTypes.InitInput( doc="Schema for source catalogs", name="src_schema", storageClass="SourceCatalog", ) refCat = connectionTypes.PrerequisiteInput( doc="Reference catalog to use for photometric calibration", name="cal_ref_cat", storageClass="SimpleCatalog", dimensions=("skypix", ), deferLoad=True, multiple=True, ) sourceTable_visit = connectionTypes.Input( doc="Source table in parquet format, per visit", name="sourceTable_visit", storageClass="DataFrame", dimensions=("instrument", "visit"), deferLoad=True, multiple=True, ) visitSummary = connectionTypes.Input( doc=("Per-visit consolidated exposure metadata. These catalogs use " "detector id for the id and must be sorted for fast lookups of a " "detector."), name="visitSummary", storageClass="ExposureCatalog", dimensions=("instrument", "visit"), deferLoad=True, multiple=True, ) background = connectionTypes.Input( doc="Calexp background model", name="calexpBackground", storageClass="Background", dimensions=("instrument", "visit", "detector"), deferLoad=True, multiple=True, ) fgcmVisitCatalog = connectionTypes.Output( doc="Catalog of visit information for fgcm", name="fgcmVisitCatalog", storageClass="Catalog", dimensions=("instrument", ), ) fgcmStarObservations = connectionTypes.Output( doc="Catalog of star observations for fgcm", name="fgcmStarObservations", storageClass="Catalog", dimensions=("instrument", ), ) fgcmStarIds = connectionTypes.Output( doc="Catalog of fgcm calibration star IDs", name="fgcmStarIds", storageClass="Catalog", dimensions=("instrument", ), ) fgcmStarIndices = connectionTypes.Output( doc="Catalog of fgcm calibration star indices", name="fgcmStarIndices", storageClass="Catalog", dimensions=("instrument", ), ) fgcmReferenceStars = connectionTypes.Output( doc="Catalog of fgcm-matched reference stars", name="fgcmReferenceStars", storageClass="Catalog", dimensions=("instrument", ), ) def __init__(self, *, config=None): super().__init__(config=config) if not config.doReferenceMatches: self.prerequisiteInputs.remove("refCat") self.prerequisiteInputs.remove("fgcmLookUpTable") if not config.doModelErrorsWithBackground: self.inputs.remove("background") if not config.doReferenceMatches: self.outputs.remove("fgcmReferenceStars")
class FgcmOutputProductsConnections(pipeBase.PipelineTaskConnections, dimensions=("instrument", ), defaultTemplates={"cycleNumber": "0"}): camera = connectionTypes.PrerequisiteInput( doc="Camera instrument", name="camera", storageClass="Camera", dimensions=("instrument", ), lookupFunction=lookupStaticCalibrations, isCalibration=True, ) fgcmLookUpTable = connectionTypes.PrerequisiteInput( doc=("Atmosphere + instrument look-up-table for FGCM throughput and " "chromatic corrections."), name="fgcmLookUpTable", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) fgcmVisitCatalog = connectionTypes.Input( doc="Catalog of visit information for fgcm", name="fgcmVisitCatalog", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) fgcmStandardStars = connectionTypes.Input( doc="Catalog of standard star data from fgcm fit", name="fgcmStandardStars{cycleNumber}", storageClass="SimpleCatalog", dimensions=("instrument", ), deferLoad=True, ) fgcmZeropoints = connectionTypes.Input( doc="Catalog of zeropoints from fgcm fit", name="fgcmZeropoints{cycleNumber}", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) fgcmAtmosphereParameters = connectionTypes.Input( doc="Catalog of atmosphere parameters from fgcm fit", name="fgcmAtmosphereParameters{cycleNumber}", storageClass="Catalog", dimensions=("instrument", ), deferLoad=True, ) refCat = connectionTypes.PrerequisiteInput( doc="Reference catalog to use for photometric calibration", name="cal_ref_cat", storageClass="SimpleCatalog", dimensions=("skypix", ), deferLoad=True, multiple=True, ) fgcmPhotoCalib = connectionTypes.Output( doc=( "Per-visit photometric calibrations derived from fgcm calibration. " "These catalogs use detector id for the id and are sorted for " "fast lookups of a detector."), name="fgcmPhotoCalibCatalog", storageClass="ExposureCatalog", dimensions=( "instrument", "visit", ), multiple=True, ) fgcmTransmissionAtmosphere = connectionTypes.Output( doc= "Per-visit atmosphere transmission files produced from fgcm calibration", name="transmission_atmosphere_fgcm", storageClass="TransmissionCurve", dimensions=( "instrument", "visit", ), multiple=True, ) fgcmOffsets = connectionTypes.Output( doc="Per-band offsets computed from doReferenceCalibration", name="fgcmReferenceCalibrationOffsets", storageClass="Catalog", dimensions=("instrument", ), multiple=False, ) def __init__(self, *, config=None): super().__init__(config=config) if str(int(config.connections.cycleNumber) ) != config.connections.cycleNumber: raise ValueError("cycleNumber must be of integer format") if not config.doReferenceCalibration: self.prerequisiteInputs.remove("refCat") if not config.doAtmosphereOutput: self.inputs.remove("fgcmAtmosphereParameters") if not config.doZeropointOutput: self.inputs.remove("fgcmZeropoints") if not config.doReferenceCalibration: self.outputs.remove("fgcmOffsets")