33 #ifndef LSST_AP_SPATIAL_UTIL_H
34 #define LSST_AP_SPATIAL_UTIL_H
47 namespace lsst {
namespace ap {
50 double const RA_DEC_SCALE = 1.19304647111111111111111111111e07;
74 int const zonesPerDegree,
75 int const zonesPerStripe,
76 int const maxEntriesPerZoneEstimate
114 return stripeId << 16;
121 int c =
static_cast<int>(
std::floor((ra/360.0)*nc));
133 assert(dec >= -90.0 && dec <= 90.0 &&
"declination out of bounds");
142 return d <= -90.0 ? -90.0 :
d;
149 return d >= 90.0 ? 90.0 :
d;
157 assert(dec >= -90.0 && dec <= 90.0 &&
"declination out of bounds");
165 return chunkId >> 16;
170 return chunkId & 0x7fff;
177 return d <= -90.0 ? -90.0 :
d;
184 return d >= 90.0 ? 90.0 :
d;
230 double alpha(
double const theta,
double const centerDec,
double const dec);
232 double maxAlpha(
double const theta,
double const centerDec);
235 std::vector<int> & chunkIds,
236 CircularRegion
const & region,
237 ZoneStripeChunkDecomposition
const & zsc,
238 int const workerId = 0,
239 int const numWorkers = 1
243 std::vector<int> & chunkIds,
244 RectangularRegion
const & region,
245 ZoneStripeChunkDecomposition
const & zsc,
246 int const workerId = 0,
247 int const numWorkers = 1
252 assert(ra >= 0.0 && ra < 360.0);
254 return d >= 4294967295.0 ? 4294967295u :
static_cast<uint32_t
>(
d);
259 assert(delta >= 0.0 && delta <= 180.0);
260 return static_cast<int32_t
>(
std::ceil(delta*RA_DEC_SCALE));
265 assert(dec >= -90.0 && dec <= 90.0);
266 return static_cast<int32_t
>(
std::floor(dec*RA_DEC_SCALE));
271 assert(delta >= 0.0 && delta <= 90.0);
272 return static_cast<int32_t
>(
std::ceil(delta*RA_DEC_SCALE));
279 }
else if (dec >= 90.0) {
288 #endif // LSST_AP_SPATIAL_UTIL_H
int getFirstChunkForStripe(int const stripeId) const
void swap(Ellipse< DataT > &a, Ellipse< DataT > &b)
double clampDec(double const dec)
void computeChunkIds(std::vector< int > &chunkIds, CircularRegion const ®ion, ZoneStripeChunkDecomposition const &zsc, int const workerId=0, int const numWorkers=1)
boost::int32_t deltaDecToScaledInteger(double const delta)
boost::uint32_t deltaRaToScaledInteger(double const delta)
double getZoneDecMax(int const zone) const
int decToZone(double const dec) const
int getStripeZoneMin(int const stripeId) const
ZoneStripeChunkDecomposition & operator=(ZoneStripeChunkDecomposition const &zsc)
int getStripeZoneMax(int const stripeId) const
ZoneStripeChunkDecomposition(int const zonesPerDegree, int const zonesPerStripe, int const maxEntriesPerZoneEstimate)
int decToStripe(double const dec) const
double getStripeDecMax(int const stripeId) const
SelectEigenView< T >::Type copy(Eigen::EigenBase< T > const &other)
Copy an arbitrary Eigen expression into a new EigenView.
int getMaxEntriesPerZoneEstimate() const
boost::uint32_t raToScaledInteger(double const ra)
boost::int32_t decToScaledInteger(double const dec)
Extent< int, N > ceil(Extent< double, N > const &input)
int getZonesPerStripe() const
int _maxEntriesPerZoneEstimate
A decomposition of the unit sphere into zones, stripes, and chunks.
double maxAlpha(double const theta, double const centerDec)
int radecToChunk(double const ra, double const dec) const
double getZoneDecMin(int const zone) const
std::vector< int > _chunksPerStripe
Master header file for the association pipeline.
double alpha(double const theta, double const centerDec, double const dec)
int getNumChunksPerStripe(int const stripeId) const
void swap(ZoneStripeChunkDecomposition &zsc)
int getNumChunksPerStripe(int const stripeId, double const minWidth) const
Extent< int, N > floor(Extent< double, N > const &input)
double stripeAndCircleToRaRange(int const stripeId, double const cenRa, double const cenDec, double const rad) const
static int chunkToSequence(int const chunkId)
afw::table::Key< double > b
static int chunkToStripe(int const chunkId)
Class describing a circular region on the sky.
Class describing a rectangular (in ra and dec) region on the sky.
double getStripeDecMin(int const stripeId) const