AssociationTask

class lsst.ap.association.AssociationTask(config: Optional[Config] = None, name: Optional[str] = None, parentTask: Optional[Task] = None, log: Optional[Union[logging.Logger, lsst.utils.logging.LsstLogAdapter]] = None)

Bases: lsst.pipe.base.Task

Associate DIAOSources into existing DIAObjects.

This task performs the association of detected DIASources in a visit with the previous DIAObjects detected over time. It also creates new DIAObjects out of DIASources that cannot be associated with previously detected DIAObjects.

Methods Summary

associate_sources(dia_objects, dia_sources) Associate the input DIASources with the catalog of DIAObjects.
check_dia_source_radec(dia_sources) Check that all DiaSources have non-NaN values for RA/DEC.
emptyMetadata() Empty (clear) the metadata for this Task and all sub-Tasks.
getFullMetadata() Get metadata for all tasks.
getFullName() Get the task name as a hierarchical name including parent task names.
getName() Get the name of the task.
getTaskDict() Get a dictionary of all tasks as a shallow copy.
makeField(doc) Make a lsst.pex.config.ConfigurableField for this task.
makeSubtask(name, **keyArgs) Create a subtask as a new instance as the name attribute of this task.
match(dia_objects, dia_sources, score_struct) Match DIAsources to DiaObjects given a score.
run(diaSources, diaObjects) Associate the new DiaSources with existing DiaObjects.
score(dia_objects, dia_sources, max_dist) Compute a quality score for each dia_source/dia_object pair between this catalog of DIAObjects and the input DIASource catalog.
timer(name, logLevel) Context manager to log performance data for an arbitrary block of code.

Methods Documentation

associate_sources(dia_objects, dia_sources)

Associate the input DIASources with the catalog of DIAObjects.

DiaObject DataFrame must be indexed on diaObjectId.

Parameters:
dia_objects : pandas.DataFrame

Catalog of DIAObjects to attempt to associate the input DIASources into.

dia_sources : pandas.DataFrame

DIASources to associate into the DIAObjectCollection.

Returns:
result : lsst.pipe.base.Struct

Results struct with components.

  • "diaSources" : Full set of diaSources both matched and not. (pandas.DataFrame)
  • "nUpdatedDiaObjects" : Number of DiaObjects that were associated. (int)
  • "nUnassociatedDiaObjects" : Number of DiaObjects that were not matched a new DiaSource. (int)
check_dia_source_radec(dia_sources)

Check that all DiaSources have non-NaN values for RA/DEC.

If one or more DiaSources are found to have NaN values, throw a warning to the log with the ids of the offending sources. Drop them from the table.

Parameters:
dia_sources : pandas.DataFrame

Input DiaSources to check for NaN values.

Returns:
trimmed_sources : pandas.DataFrame

DataFrame of DiaSources trimmed of all entries with NaN values for RA/DEC.

emptyMetadata() → None

Empty (clear) the metadata for this Task and all sub-Tasks.

getFullMetadata() → lsst.pipe.base._task_metadata.TaskMetadata

Get metadata for all tasks.

Returns:
metadata : TaskMetadata

The keys are the full task name. Values are metadata for the top-level task and all subtasks, sub-subtasks, etc.

Notes

The returned metadata includes timing information (if @timer.timeMethod is used) and any metadata set by the task. The name of each item consists of the full task name with . replaced by :, followed by . and the name of the item, e.g.:

topLevelTaskName:subtaskName:subsubtaskName.itemName

using : in the full task name disambiguates the rare situation that a task has a subtask and a metadata item with the same name.

getFullName() → str

Get the task name as a hierarchical name including parent task names.

Returns:
fullName : str

The full name consists of the name of the parent task and each subtask separated by periods. For example:

  • The full name of top-level task “top” is simply “top”.
  • The full name of subtask “sub” of top-level task “top” is “top.sub”.
  • The full name of subtask “sub2” of subtask “sub” of top-level task “top” is “top.sub.sub2”.
getName() → str

Get the name of the task.

Returns:
taskName : str

Name of the task.

See also

getFullName
getTaskDict() → Dict[str, weakref.ReferenceType[lsst.pipe.base.task.Task]]

Get a dictionary of all tasks as a shallow copy.

Returns:
taskDict : dict

Dictionary containing full task name: task object for the top-level task and all subtasks, sub-subtasks, etc.

classmethod makeField(doc: str) → lsst.pex.config.configurableField.ConfigurableField

Make a lsst.pex.config.ConfigurableField for this task.

Parameters:
doc : str

Help text for the field.

Returns:
configurableField : lsst.pex.config.ConfigurableField

A ConfigurableField for this task.

Examples

Provides a convenient way to specify this task is a subtask of another task.

Here is an example of use:

class OtherTaskConfig(lsst.pex.config.Config):
    aSubtask = ATaskClass.makeField("brief description of task")
makeSubtask(name: str, **keyArgs) → None

Create a subtask as a new instance as the name attribute of this task.

Parameters:
name : str

Brief name of the subtask.

keyArgs

Extra keyword arguments used to construct the task. The following arguments are automatically provided and cannot be overridden:

  • “config”.
  • “parentTask”.

Notes

The subtask must be defined by Task.config.name, an instance of ConfigurableField or RegistryField.

match(dia_objects, dia_sources, score_struct)

Match DIAsources to DiaObjects given a score.

Parameters:
dia_objects : pandas.DataFrame

A SourceCatalog of DIAObjects to associate to DIASources.

dia_sources : pandas.DataFrame

A contiguous catalog of dia_sources for which the set of scores has been computed on with DIAObjectCollection.score.

score_struct : lsst.pipe.base.Struct

Results struct with components:

  • "scores": array of floats of match quality
    updated DIAObjects (array-like of float).
  • "obj_ids": array of floats of match quality
    updated DIAObjects (array-like of int).
  • "obj_idxs": indexes of the matched DIAObjects in the catalog.
    (array-like of int)

Default values for these arrays are INF, -1 and -1 respectively for unassociated sources.

Returns:
result : lsst.pipe.base.Struct

Results struct with components.

  • "diaSources" : Full set of diaSources both matched and not. (pandas.DataFrame)
  • "nUpdatedDiaObjects" : Number of DiaObjects that were associated. (int)
  • "nUnassociatedDiaObjects" : Number of DiaObjects that were not matched a new DiaSource. (int)
run(diaSources, diaObjects)

Associate the new DiaSources with existing DiaObjects.

Parameters:
diaSources : pandas.DataFrame

New DIASources to be associated with existing DIAObjects.

diaObjects : pandas.DataFrame

Existing diaObjects from the Apdb.

Returns:
result : lsst.pipe.base.Struct

Results struct with components.

  • "matchedDiaSources" : DiaSources that were matched. Matched Sources have their diaObjectId updated and set to the id of the diaObject they were matched to. (pandas.DataFrame)
  • "unAssocDiaSources" : DiaSources that were not matched. Unassociated sources have their diaObject set to 0 as they were not associated with any existing DiaObjects. (pandas.DataFrame)
  • "nUpdatedDiaObjects" : Number of DiaObjects that were matched to new DiaSources. (int)
  • "nUnassociatedDiaObjects" : Number of DiaObjects that were not matched a new DiaSource. (int)
score(dia_objects, dia_sources, max_dist)

Compute a quality score for each dia_source/dia_object pair between this catalog of DIAObjects and the input DIASource catalog.

max_dist sets maximum separation in arcseconds to consider a dia_source a possible match to a dia_object. If the pair is beyond this distance no score is computed.

Parameters:
dia_objects : pandas.DataFrame

A contiguous catalog of DIAObjects to score against dia_sources.

dia_sources : pandas.DataFrame

A contiguous catalog of dia_sources to “score” based on distance and (in the future) other metrics.

max_dist : lsst.geom.Angle

Maximum allowed distance to compute a score for a given DIAObject DIASource pair.

Returns:
result : lsst.pipe.base.Struct

Results struct with components:

  • "scores": array of floats of match quality updated DIAObjects
    (array-like of float).
  • "obj_idxs": indexes of the matched DIAObjects in the catalog.
    (array-like of int)
  • "obj_ids": array of floats of match quality updated DIAObjects
    (array-like of int).

Default values for these arrays are INF, -1, and -1 respectively for unassociated sources.

timer(name: str, logLevel: int = 10) → Iterator[None]

Context manager to log performance data for an arbitrary block of code.

Parameters:
name : str

Name of code being timed; data will be logged using item name: Start and End.

logLevel

A logging level constant.

See also

timer.logInfo

Examples

Creating a timer context:

with self.timer("someCodeToTime"):
    pass  # code to time