Coverage for tests/test_CatalogCalculation.py : 42%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# This file is part of meas_base. # # Developed for the LSST Data Management System. # This product includes software developed by the LSST Project # (https://www.lsst.org). # See the COPYRIGHT file at the top-level directory of this distribution # for details of code ownership. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>.
"""Plugin which is guaranteed to fail, testing the failure framework. """ def getExecutionOrder(cls): return cls.DEFAULT_CATALOGCALCULATION
catCalc.CatalogCalculationPlugin.__init__(self, config, name, schema, metadata) self.failKey = schema.addField(name + "_fail", type="Flag", doc="Failure test")
# note: flagbit doesn't matter, since a FlagHandler isn't used raise MeasurementError("Supposed to fail", 0)
measRecord.set(self.failKey, True)
"""Test plugin which operates on single records.
Takes a single record, reads a value, squares it, and writes out the results to the record. """ def getExecutionOrder(cls): return cls.DEFAULT_CATALOGCALCULATION
catCalc.CatalogCalculationPlugin.__init__(self, config, name, schema, metadata) self.failKey = schema.addField(name + "_fail", type="Flag", doc="Failure flag") self.squareKey = schema.addField(name + "_square", type="D", doc="Square of input catalog")
value = measRecord.get("start") measRecord.set(self.squareKey, value**2)
measRecord.set(self.failKey, True)
"""Test plugin which operates on multiple records.
This plugin takes the whole source catalog at once, and loops over the catalog internally. The algorithm simply reads a value, cubes it, and writes the results out to the table. """
def getExecutionOrder(cls): return cls.DEFAULT_CATALOGCALCULATION
catCalc.CatalogCalculationPlugin.__init__(self, config, name, schema, metadata) self.failKey = schema.addField(name + "_fail", type="Flag", doc="Failure flag") self.cubeKey = schema.addField(name + "_cube", type="D", doc="Cube of input catalog")
for rec in catalog: value = rec.get("start") rec.set(self.cubeKey, value**3)
for rec in catalog: rec.set(self.failKey, True)
"""Test plugin which depends on a previous plugin execution.
Used to test runlevel resolution. This plugin takes in single records, reads a value calculated by a previous plugin, computes a square root, and writes the results to the table. """ def getExecutionOrder(cls): return cls.DEFAULT_CATALOGCALCULATION + 1
catCalc.CatalogCalculationPlugin.__init__(self, config, name, schema, metadata) self.failKey = schema.addField(name + "_fail", type="Flag", doc="Failure flag") self.sqrtKey = schema.addField(name + "_sqrt", type="D", doc="Square root of singleRecord catalogCalculation")
value = measRecord.get("singleRecordCatalogCalculation_square") measRecord.set(self.sqrtKey, value**0.5)
measRecord.set(self.failKey, True)
"""Test the catalogCalculation framework using plugins defined above. """ # Create a schema object, and populate it with a field to simulate # results from measurements on an image schema = afwTable.SourceTable.makeMinimalSchema() schema.addField("start", type="D") # Instantiate a config object adding each of the above plugins, and # use it to create a task catCalcConfig = catCalc.CatalogCalculationConfig() catCalcConfig.plugins.names = ["FailcatalogCalculation", "singleRecordCatalogCalculation", "multiRecordCatalogCalculation", "dependentCatalogCalulation"] catCalcTask = catCalc.CatalogCalculationTask(schema=schema, config=catCalcConfig) # Create a catalog with five sources as input to the task self.catalog = afwTable.SourceCatalog(schema) self.numObjects = 5 for i in range(self.numObjects): rec = self.catalog.addNew() rec.set("start", float(i + 1))
# Run the catalogCalculation task, outputs will be checked in test # methods catCalcTask.run(self.catalog)
# Verify the failure flag got set for the plugin expected to fail self.assertEqual(len(self.catalog), self.numObjects) for src in self.catalog: self.assertTrue(src.get("FailcatalogCalculation_fail"))
# Verify the single record plugin ran successfully for rec in self.catalog: self.assertAlmostEqual(rec.get("start")**2, rec.get("singleRecordCatalogCalculation_square"), 4)
# Verify that the system correctly handled a plugin which expects a # full catalog to be passed for rec in self.catalog: self.assertAlmostEqual(rec.get("start")**3, rec.get("multiRecordCatalogCalculation_cube"), 4)
# Verify that the system runs plugins in the correct run order for rec in self.catalog: self.assertAlmostEqual(rec.get("start"), rec.get("dependentCatalogCalulation_sqrt"), 4)
del self.catalog, self.numObjects,
lsst.utils.tests.init()
lsst.utils.tests.init() unittest.main() |