LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
LSST Data Management Base Package
Functions
ast::detail Namespace Reference

Functions

template<class AstMapT , class MapT >
AstMapT * polyTranImpl (MapT const &mapping, bool forward, double acc, double maxacc, int maxorder, std::vector< double > const &lbnd, std::vector< double > const &ubnd)
 Call astPolyTran to set (or replace) one direction of a polynomial transform with a fit based on the other direction. More...
 
FrameDict makeFrameDict (FrameSet const &frameSet)
 Make a FrameDict from a copy of a FrameSet. More...
 
void annulAstObject (AstObject *object)
 A wrapper around astAnnul; intended as a custom deleter for std::unique_ptr. More...
 
template<typename T1 , typename T2 >
void assertEqual (T1 val1, std::string const &descr1, T2 val2, std::string const &descr2)
 
void astBadToNan (std::vector< double > &p)
 Replace AST__BAD with a quiet NaN in a vector. More...
 
void astBadToNan (ast::Array2D const &arr)
 Replace AST__BAD with a quiet NaN in a 2-D array. More...
 
std::string formatAxisAttr (std::string const &name, int axis)
 Format an axis-specific attribute by appending the axis index. More...
 
bool isSeries (AstCmpMap const *cmpMap)
 Return true if the compound map is in series. More...
 
std::string getClassName (AstObject const *rawObj)
 Get the AST class name, changing CmpMap to SeriesMap or ParallelMap as appropriate. More...
 
double safeDouble (double val)
 Return a double value after checking status and replacing AST__BAD with nan More...
 
std::string stringToUpper (std::string const &str)
 Return a copy of a string in which all characters are uppercase. More...
 
const char * source ()
 Source function that allows astChannel to source from a Stream. More...
 
void sink (const char *cstr)
 Sink function that allows astChannel to sink to a Stream. More...
 
template AstChebyMap * polyTranImpl< AstChebyMap > (ChebyMap const &, bool, double, double, int, std::vector< double > const &, std::vector< double > const &)
 
template AstPolyMap * polyTranImpl< AstPolyMap > (PolyMap const &, bool, double, double, int, std::vector< double > const &, std::vector< double > const &)
 

Function Documentation

◆ annulAstObject()

void ast::detail::annulAstObject ( AstObject *  object)
inline

A wrapper around astAnnul; intended as a custom deleter for std::unique_ptr.

Definition at line 40 of file utils.h.

40  {
41  if (object != nullptr) {
42  astAnnul(object);
43  assertOK();
44  }
45 }
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.
Definition: base.cc:49

◆ assertEqual()

template<typename T1 , typename T2 >
void ast::detail::assertEqual ( T1  val1,
std::string const &  descr1,
T2  val2,
std::string const &  descr2 
)
inline

Definition at line 48 of file utils.h.

48  {
49  if (val1 != val2) {
51  os << descr1 << " = " << val1 << " != " << descr2 << " = " << val2;
52  throw std::invalid_argument(os.str());
53  }
54 }
std::ostream * os
Definition: Schema.cc:557

◆ astBadToNan() [1/2]

void ast::detail::astBadToNan ( ast::Array2D const &  arr)

Replace AST__BAD with a quiet NaN in a 2-D array.

Definition at line 27 of file utils.cc.

27  {
28  for (auto i = arr.begin(); i != arr.end(); ++i) {
29  for (auto j = i->begin(); j != i->end(); ++j) {
30  if (*j == AST__BAD) {
32  }
33  }
34  }
35 }
T quiet_NaN(T... args)

◆ astBadToNan() [2/2]

void ast::detail::astBadToNan ( std::vector< double > &  p)
inline

Replace AST__BAD with a quiet NaN in a vector.

Definition at line 59 of file utils.h.

59  {
60  for (auto &val : p) {
61  if (val == AST__BAD) {
63  }
64  }
65 }
ImageT val
Definition: CR.cc:146

◆ formatAxisAttr()

std::string ast::detail::formatAxisAttr ( std::string const &  name,
int  axis 
)
inline

Format an axis-specific attribute by appending the axis index.

Parameters
[in]nameAttribute name
[in]axisAxis index, starting at 1
Returns
"<name>(<axis>)"

Definition at line 79 of file utils.h.

79  {
81  os << name << "(" << axis << ")";
82  return os.str();
83 }
table::Key< std::string > name
Definition: Amplifier.cc:116

◆ getClassName()

std::string ast::detail::getClassName ( AstObject const *  rawObj)

Get the AST class name, changing CmpMap to SeriesMap or ParallelMap as appropriate.

Parameters
[in]rawObjRaw AST object pointer

Definition at line 37 of file utils.cc.

37  {
38  std::string name = astGetC(rawObj, "Class");
39  assertOK();
40  if (name != "CmpMap") {
41  return name;
42  }
43  bool series = isSeries(reinterpret_cast<AstCmpMap const *>(rawObj));
44  return series ? "SeriesMap" : "ParallelMap";
45 }
bool isSeries(AstCmpMap const *cmpMap)
Return true if the compound map is in series.
Definition: utils.cc:47

◆ isSeries()

bool ast::detail::isSeries ( AstCmpMap const *  cmpMap)

Return true if the compound map is in series.

Definition at line 47 of file utils.cc.

47  {
48  AstMapping *rawMap1;
49  AstMapping *rawMap2;
50  int series, invert1, invert2;
51  astDecompose(cmpMap, &rawMap1, &rawMap2, &series, &invert1, &invert2);
52  astAnnul(rawMap1);
53  astAnnul(rawMap2);
54  assertOK();
55  return series;
56 }

◆ makeFrameDict()

FrameDict ast::detail::makeFrameDict ( FrameSet const &  frameSet)

Make a FrameDict from a copy of a FrameSet.

This exists purely to test FrameDict(FrameSet const &) from Python, as the standard pybind11 wrapper isn't sufficient to exercise a bug that was found.

Definition at line 44 of file testUtils.h.

44  {
45  return FrameDict(frameSet);
46 }
table::Key< table::Array< std::uint8_t > > frameSet

◆ polyTranImpl()

template<class AstMapT , class MapT >
AstMapT * ast::detail::polyTranImpl ( MapT const &  mapping,
bool  forward,
double  acc,
double  maxacc,
int  maxorder,
std::vector< double > const &  lbnd,
std::vector< double > const &  ubnd 
)

Call astPolyTran to set (or replace) one direction of a polynomial transform with a fit based on the other direction.

Template Parameters
AstMapTAST mapping class: one of AstChebyMap or AstPolyMap
MapTCorresponding astshim class: one of ast::ChebyMap or ast::PolyMap; this template parameter is second because it can always be deduced.
Parameters
[in]mapping
[in]forwardIf true the forward transformation is replaced. Otherwise the inverse transformation is replaced.
[in]accThe target accuracy, expressed as a geodesic distance within the ChebyMap's input space (if forward is false) or output space (if forward is true).
[in]maxaccThe maximum allowed accuracy for an acceptable polynomial, expressed as a geodesic distance within the ChebyMap's input space (if forward is false) or output space (if forward is true).
[in]maxorderThe maximum allowed polynomial order. This is one more than the maximum power of either input axis. So for instance, a value of 3 refers to a quadratic polynomial. Note, cross terms with total powers greater than or equal to maxorder are not inlcuded in the fit. So the maximum number of terms in each of the fitted polynomials is maxorder*(maxorder + 1)/2.
[in]lbndA vector holding the lower bounds of a rectangular region within the ChebyMap's input space (if forward is false) or output space (if forward is true). The new polynomial will be evaluated over this rectangle. The length should equal getNIn() or getNOut(), depending on forward.
[in]ubndA vector holding the upper bounds of a rectangular region within the ChebyMap's input space (if forward is false) or output space (if forward is true). The new polynomial will be evaluated over this rectangle. The length should equal getNIn() or getNOut(), depending on forward.
Exceptions
std::invalid_argumentif the size of lbnd or ubnd does not match getNIn() (if forward false) or getNOut() (if forward true).

Definition at line 30 of file polyMapUtils.cc.

31  {
32  // desired size of lbnd and ubnd
33  auto const bndSize = static_cast<unsigned int>(forward ? mapping.getNOut() : mapping.getNIn());
34 
35  if (lbnd.size() != bndSize) {
37  os << "lbnd.size() = " << lbnd.size() << " != " << bndSize << " = "
38  << (forward ? "getNOut()" : "getNIn()");
39  throw std::invalid_argument(os.str());
40  }
41  if (ubnd.size() != bndSize) {
43  os << "ubnd.size() = " << ubnd.size() << " != " << bndSize << " = "
44  << (forward ? "getNOut()" : "getNIn()");
45  throw std::invalid_argument(os.str());
46  }
47 
48  void *outRawMap = astPolyTran(mapping.getRawPtr(), static_cast<int>(forward), acc, maxacc, maxorder,
49  lbnd.data(), ubnd.data());
50  // Failure should result in a null pointer, so calling assertOK is unlikely to do anything,
51  // but better to be sure and than risk missing an uncaught error.
52  assertOK(reinterpret_cast<AstObject *>(outRawMap));
53  if (!outRawMap) {
54  throw std::runtime_error("Could not compute an inverse mapping");
55  }
56  return reinterpret_cast<AstMapT *>(outRawMap);
57 }
T data(T... args)
T forward(T... args)
T size(T... args)

◆ polyTranImpl< AstChebyMap >()

template AstChebyMap* ast::detail::polyTranImpl< AstChebyMap > ( ChebyMap const &  ,
bool  ,
double  ,
double  ,
int  ,
std::vector< double > const &  ,
std::vector< double > const &   
)

◆ polyTranImpl< AstPolyMap >()

template AstPolyMap* ast::detail::polyTranImpl< AstPolyMap > ( PolyMap const &  ,
bool  ,
double  ,
double  ,
int  ,
std::vector< double > const &  ,
std::vector< double > const &   
)

◆ safeDouble()

double ast::detail::safeDouble ( double  val)
inline

Return a double value after checking status and replacing AST__BAD with nan

Definition at line 100 of file utils.h.

100  {
101  assertOK();
102  return val != AST__BAD ? val : std::numeric_limits<double>::quiet_NaN();
103 }

◆ sink()

void ast::detail::sink ( const char *  cstr)
inline

Sink function that allows astChannel to sink to a Stream.

This function retrieves a pointer to a Stream ssptr using astChannelData, then calls ssptr->sink(cstr).

Definition at line 239 of file Stream.h.

239  {
240  auto ssptr = reinterpret_cast<Stream *>(astChannelData);
241  if (ssptr) {
242  auto isok = ssptr->sink(cstr);
243  if (!isok) {
244  astSetStatus(AST__ATGER);
245  }
246  }
247 }

◆ source()

const char* ast::detail::source ( )
inline

Source function that allows astChannel to source from a Stream.

This function retrieves a pointer to a Stream ssptr using astChannelData, then returns the result of calling ssptr->source()

Definition at line 224 of file Stream.h.

224  {
225  auto ssptr = reinterpret_cast<Stream *>(astChannelData);
226  if (ssptr) {
227  return ssptr->source();
228  } else {
229  return nullptr;
230  }
231 }

◆ stringToUpper()

std::string ast::detail::stringToUpper ( std::string const &  str)
inline

Return a copy of a string in which all characters are uppercase.

Definition at line 108 of file utils.h.

108  {
109  std::string upstr;
110  upstr.reserve(str.size());
111  for (char c : str) {
112  upstr += std::toupper(c);
113  }
114  return upstr;
115 }
T reserve(T... args)
T toupper(T... args)