25 #include "pybind11/pybind11.h" 
   26 #include "pybind11/eigen.h" 
   27 #include "pybind11/stl.h" 
   28 #include "ndarray/pybind11.h" 
   29 #include "ndarray/eigen.h" 
   41 using namespace pybind11::literals;
 
   48     py::class_<PhotometryModel, std::shared_ptr<PhotometryModel>> 
cls(mod, 
"PhotometryModel");
 
   50     cls.def(
"assignIndices", &PhotometryModel::assignIndices);
 
   51     cls.def(
"freezeErrorTransform", &PhotometryModel::freezeErrorTransform);
 
   53     cls.def(
"offsetParams", &PhotometryModel::offsetParams);
 
   54     cls.def(
"offsetFittedStar", &PhotometryModel::offsetFittedStar);
 
   57     cls.def(
"transformError", &PhotometryModel::transformError);
 
   58     cls.def(
"computeResidual", &PhotometryModel::computeResidual);
 
   60     cls.def(
"getRefError", &PhotometryModel::getRefError);
 
   61     cls.def(
"computeRefResidual", &PhotometryModel::computeRefResidual);
 
   63     cls.def(
"checkPositiveOnBBox", &PhotometryModel::checkPositiveOnBBox);
 
   66     cls.def(
"getMappingIndices", &PhotometryModel::getMappingIndices);
 
   67     cls.def(
"computeParameterDerivatives",
 
   68             [](PhotometryModel 
const &
self, MeasuredStar 
const &star, CcdImage 
const &ccdImage) {
 
   69                 Eigen::VectorXd derivatives(
self.getNpar(ccdImage));
 
   70                 self.computeParameterDerivatives(star, ccdImage, derivatives);
 
   74     cls.def(
"getNpar", &PhotometryModel::getNpar);
 
   75     cls.def(
"toPhotoCalib", &PhotometryModel::toPhotoCalib);
 
   76     cls.def(
"getMapping", &PhotometryModel::getMapping, py::return_value_policy::reference_internal);
 
   77     cls.def(
"getTotalParameters", &PhotometryModel::getTotalParameters);
 
   80     cls.def(
"__str__", [](PhotometryModel 
const &
self) { 
return "PhotometryModel"; });
 
   83 void declareSimplePhotometryModel(
py::module &mod) {
 
   84     py::class_<SimplePhotometryModel, std::shared_ptr<SimplePhotometryModel>, PhotometryModel> 
cls(
 
   85             mod, 
"SimplePhotometryModel");
 
   86     cls.def(
"__str__", [](SimplePhotometryModel 
const &
self) { 
return "SimplePhotometryModel"; });
 
   90     py::class_<SimpleFluxModel, std::shared_ptr<SimpleFluxModel>, SimplePhotometryModel, PhotometryModel> 
cls(
 
   91             mod, 
"SimpleFluxModel");
 
   92     cls.def(py::init<CcdImageList const &, double>(), 
"ccdImageList"_a, 
"errorPedestal"_a = 0);
 
   94     cls.def(
"__str__", [](SimpleFluxModel 
const &
self) { 
return "SimpleFluxModel"; });
 
   97 void declareSimpleMagnitudeModel(
py::module &mod) {
 
   98     py::class_<SimpleMagnitudeModel, std::shared_ptr<SimpleMagnitudeModel>, SimplePhotometryModel,
 
  100             cls(mod, 
"SimpleMagnitudeModel");
 
  101     cls.def(py::init<CcdImageList const &, double>(), 
"ccdImageList"_a, 
"errorPedestal"_a = 0);
 
  103     cls.def(
"__str__", [](SimpleMagnitudeModel 
const &
self) { 
return "SimpleMagnitudeModel"; });
 
  106 void declareConstrainedPhotometryModel(
py::module &mod) {
 
  107     py::class_<ConstrainedPhotometryModel, std::shared_ptr<ConstrainedPhotometryModel>, PhotometryModel> 
cls(
 
  108             mod, 
"ConstrainedPhotometryModel");
 
  109     cls.def(
"__str__", [](ConstrainedPhotometryModel 
const &
self) { 
return "ConstrainedPhotometryModel"; });
 
  112 void declareConstrainedFluxModel(
py::module &mod) {
 
  113     py::class_<ConstrainedFluxModel, std::shared_ptr<ConstrainedFluxModel>, PhotometryModel> 
cls(
 
  114             mod, 
"ConstrainedFluxModel");
 
  115     cls.def(py::init<CcdImageList const &, lsst::geom::Box2D const &, int, double>(), 
"CcdImageList"_a,
 
  116             "bbox"_a, 
"visitOrder"_a = 7, 
"errorPedestal"_a = 0);
 
  117     cls.def(
"__str__", [](ConstrainedFluxModel 
const &
self) { 
return "ConstrainedFluxModel"; });
 
  120 void declareConstrainedMagnitudeModel(
py::module &mod) {
 
  121     py::class_<ConstrainedMagnitudeModel, std::shared_ptr<ConstrainedMagnitudeModel>, PhotometryModel> 
cls(
 
  122             mod, 
"ConstrainedMagnitudeModel");
 
  123     cls.def(py::init<CcdImageList const &, lsst::geom::Box2D const &, int, double>(), 
"CcdImageList"_a,
 
  124             "bbox"_a, 
"visitOrder"_a = 7, 
"errorPedestal"_a = 0);
 
  125     cls.def(
"__str__", [](ConstrainedMagnitudeModel 
const &
self) { 
return "ConstrainedMagnitudeModel"; });
 
  129     py::module::import(
"lsst.jointcal.ccdImage");
 
  130     py::module::import(
"lsst.jointcal.photometryTransform");
 
  131     py::module::import(
"lsst.jointcal.star");
 
  132     declarePhotometryModel(mod);
 
  133     declareSimplePhotometryModel(mod);
 
  134     declareSimpleFluxModel(mod);
 
  135     declareSimpleMagnitudeModel(mod);
 
  136     declareConstrainedPhotometryModel(mod);
 
  137     declareConstrainedFluxModel(mod);
 
  138     declareConstrainedMagnitudeModel(mod);