5 #include "astrometry/solver.h" 6 #include "astrometry/index.h" 7 #include "astrometry/multiindex.h" 8 #include "astrometry/starkd.h" 9 #include "astrometry/fitsioutils.h" 10 #include "astrometry/fitstable.h" 11 #include "astrometry/log.h" 12 #include "astrometry/tic.h" 13 #include "astrometry/healpix.h" 27 #include "pybind11/pybind11.h" 28 #include "pybind11/stl.h" 39 namespace extensions {
40 namespace astrometryNet {
49 py::class_<index_t>
cls(mod,
"index_t");
51 cls.def(
"overlapsScaleRange",
52 [](index_t&
self,
double qlo,
double qhi) {
return index_overlaps_scale_range(&
self, qlo, qhi); },
54 cls.def(
"reload", [](index_t&
self) {
55 if (index_reload(&
self)) {
57 os <<
"Failed to reload multi-index file " <<
self.indexname;
62 cls.def_readonly(
"indexid", &index_t::indexid);
63 cls.def_readonly(
"healpix", &index_t::healpix);
64 cls.def_readonly(
"hpnside", &index_t::hpnside);
65 cls.def_readonly(
"nstars", &index_t::nstars);
66 cls.def_readonly(
"nquads", &index_t::nquads);
72 static void declareMultiIndex(
py::module& mod) {
73 py::class_<MultiIndex>
cls(mod,
"MultiIndex");
75 cls.def(py::init<std::string const&>(),
"filepath"_a);
77 cls.def(
"__getitem__",
78 [](MultiIndex
const&
self,
int i) {
82 py::return_value_policy::reference_internal, py::is_operator());
84 cls.def(
"addIndex", &MultiIndex::addIndex,
"filepath"_a,
"metadataOnly"_a);
85 cls.def(
"isWithinRange", &MultiIndex::isWithinRange,
"ra"_a,
"dec"_a,
"radius"_a);
86 cls.def(
"unload", &MultiIndex::unload);
87 cls.def_property_readonly(
"name", &MultiIndex::getName);
88 cls.def(
"__len__", &MultiIndex::getLength);
89 cls.def(
"reload", &MultiIndex::reload);
96 py::class_<Solver>
cls(mod,
"Solver");
98 cls.def(py::init<>());
127 cls.def(
"getCatalog", &Solver::getCatalog,
"inds"_a,
"ctrCoord"_a,
"radius"_a,
"idCol"_a,
128 "filterNameList"_a,
"magColList"_a,
"magErrColList"_a,
"starGalCol"_a,
"varCol"_a,
129 "uniqueIds"_a =
true);
130 cls.def(
"getSolveStats", &Solver::getSolveStats);
131 cls.def(
"getWcs", &Solver::getWcs);
132 cls.def(
"didSolve", &Solver::didSolve);
134 cls.def(
"getQuadSizeRangeArcsec", &Solver::getQuadSizeRangeArcsec);
135 cls.def(
"addIndices", &Solver::addIndices,
"indices"_a);
136 cls.def(
"setParity", &Solver::setParity,
"setParityFlipped",
"parity"_a);
137 cls.def(
"setMatchThreshold", &Solver::setMatchThreshold,
"threshold"_a);
138 cls.def(
"setPixelScaleRange", &Solver::setPixelScaleRange,
"low"_a,
"high"_a);
139 cls.def(
"setRaDecRadius", &Solver::setRaDecRadius,
"ra"_a,
"dec"_a,
"rad"_a);
140 cls.def(
"setImageSize", &Solver::setImageSize,
"width"_a,
"height"_a);
141 cls.def(
"setMaxStars", &Solver::setMaxStars,
"maxStars"_a);
142 cls.def(
"setStars", &Solver::setStars,
"sourceCat"_a,
"x0"_a,
"y0"_a);
149 void an_log_callback(
void* baton,
enum log_level level,
const char*
file,
int line,
const char* func,
158 int lsstlevel = levelmap[level];
163 const int len =
vsnprintf(NULL, 0, format, va) + 1;
171 if (msg[len - 2] ==
'\n') {
176 if (an_log.isEnabledFor(lsstlevel)) {
177 an_log.logMsg(log4cxx::Level::toLevel(lsstlevel), log4cxx::spi::LocationInfo(file, func, line), msg);
182 void start_an_logging() {
185 log_use_function(an_log_callback, NULL);
191 log_use_function(NULL, NULL);
199 fits_use_error_system();
202 mod.def(
"healpixDistance", &
healpixDistance,
"hp"_a,
"nside"_a,
"coord"_a);
204 mod.def(
"an_log_init", [](
int level) { log_init(static_cast<log_level>(level)); },
"level"_a);
206 mod.def(
"an_log_get_level", []() {
return static_cast<int>(log_get_level()); });
207 mod.def(
"an_log_set_level", [](
int level) { log_set_level(static_cast<log_level>(level)); },
"level"_a);
208 mod.def(
"finalize", &finalize);
210 declareMultiIndex(mod);
std::size_t cppIndex(std::ptrdiff_t size, std::ptrdiff_t i)
Compute a C++ index from a Python index (negative values count from the end) and range-check.
lsst::afw::geom::Angle healpixDistance(int hp, int nside, lsst::afw::geom::SpherePoint const &coord)
Calculate the distance from coordinates to a healpix.
LSST DM logging module built on log4cxx.
A base class for image defects.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
#define LOG_ERROR(message...)
Log a error-level message to the default logger using a varargs/printf style interface.
def line(points, frame=None, origin=afwImage.PARENT, symbs=False, ctype=None, size=0.5)
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
#define LOG_GET(logger)
Returns a Log object associated with logger.
PYBIND11_MODULE(astrometry_net, mod)
Reports errors that are due to events beyond the control of the program.