54struct DoubleGaussianPsfPersistenceHelper {
59 afw::table::Key<double>
b;
61 static DoubleGaussianPsfPersistenceHelper
const& get() {
62 static DoubleGaussianPsfPersistenceHelper instance;
67 DoubleGaussianPsfPersistenceHelper(
const DoubleGaussianPsfPersistenceHelper&) =
delete;
68 DoubleGaussianPsfPersistenceHelper& operator=(
const DoubleGaussianPsfPersistenceHelper&) =
delete;
71 DoubleGaussianPsfPersistenceHelper(DoubleGaussianPsfPersistenceHelper&&) =
delete;
72 DoubleGaussianPsfPersistenceHelper& operator=(DoubleGaussianPsfPersistenceHelper&&) =
delete;
75 DoubleGaussianPsfPersistenceHelper()
81 b(
schema.addField<
double>(
"b",
"central amplitude of outer Gaussian (inner amplitude == 1)")) {}
84class DoubleGaussianPsfFactory :
public afw::table::io::PersistableFactory {
87 read(InputArchive
const& archive, CatalogVector
const& catalogs)
const {
88 static DoubleGaussianPsfPersistenceHelper
const&
keys = DoubleGaussianPsfPersistenceHelper::get();
91 afw::table::BaseRecord
const& record = catalogs.front().front();
93 return std::make_shared<DoubleGaussianPsf>(
94 record.get(
keys.dimensions.getX()), record.get(
keys.dimensions.getY()),
95 record.get(
keys.sigma1), record.get(
keys.sigma2), record.get(
keys.b));
104makeDoubleGaussianKernel(
int width,
int height,
double sigma1,
double&
sigma2,
double b) {
105 if (
b == 0.0 &&
sigma2 == 0.0) {
112 afw::math::DoubleGaussianFunction2<double> dg(
sigma1,
sigma2,
b);
117std::string getDoubleGaussianPsfPersistenceName() {
return "DoubleGaussianPsf"; }
119DoubleGaussianPsfFactory registration(getDoubleGaussianPsfPersistenceName());
123DoubleGaussianPsf::DoubleGaussianPsf(
int width,
int height,
double sigma1,
double sigma2,
double b)
130 return std::make_shared<DoubleGaussianPsf>(
getKernel()->getWidth(),
getKernel()->getHeight(), _sigma1,
135 return std::make_shared<DoubleGaussianPsf>(width, height, _sigma1, _sigma2, _b);
141 static DoubleGaussianPsfPersistenceHelper
const&
keys = DoubleGaussianPsfPersistenceHelper::get();
144 (*record).set(
keys.dimensions.getX(),
getKernel()->getWidth());
145 (*record).set(
keys.dimensions.getY(),
getKernel()->getHeight());
table::Key< std::string > name
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
#define LSST_ARCHIVE_ASSERT(EXPR)
An assertion macro used to validate the structure of an InputArchive.
std::shared_ptr< RecordT > addNew()
Create a new record, add it to the end of the catalog, and return a pointer to it.
An object passed to Persistable::write to allow it to persist itself.
void saveCatalog(BaseCatalog const &catalog)
Save a catalog in the archive.
BaseCatalog makeCatalog(Schema const &schema)
Return a new, empty catalog with the given schema.
static std::shared_ptr< T > dynamicCast(std::shared_ptr< Persistable > const &ptr)
Dynamically cast a shared_ptr.
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
double getSigma1() const
Return the radius of the inner Gaussian.
double getSigma2() const
Return the radius of the outer Gaussian.
std::shared_ptr< afw::detection::Psf > clone() const override
Polymorphic deep copy. Usually unnecessary, as Psfs are immutable.
double getB() const
Return the ratio of Gaussian peak amplitudes: outer/inner.
std::shared_ptr< afw::detection::Psf > resized(int width, int height) const override
Return a clone with specified kernel dimensions.
A Psf defined by a Kernel.
std::shared_ptr< afw::math::Kernel const > getKernel() const
Return the Kernel used to define this Psf.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A base class for image defects.
afw::table::PointKey< int > dimensions
afw::table::Schema schema
afw::table::Key< double > sigma2
afw::table::Key< double > sigma1
afw::table::Key< double > b
std::shared_ptr< table::io::Persistable > read(table::io::InputArchive const &archive, table::io::CatalogVector const &catalogs) const override