LSSTApplications  16.0-1-gce273f5+12,16.0-1-gf77f410+3,16.0-10-g230e10e+5,16.0-10-g90ce0e4+3,16.0-10-gc1446dd+3,16.0-12-g726f8f3+1,16.0-13-g4c33ca5+3,16.0-13-g5f6c0b1+3,16.0-13-gd9b1b71+3,16.0-13-gde155d7+11,16.0-16-g925333c+3,16.0-17-g6a7bfb3b+3,16.0-17-gd75be2c9,16.0-2-g0febb12+11,16.0-2-g839ba83+41,16.0-2-g9d5294e+30,16.0-3-g404ea43+3,16.0-3-gbc759ec+1,16.0-3-gcfd6c53+28,16.0-4-g03cf288+19,16.0-4-g13a27c5+5,16.0-4-g2cc461c+2,16.0-4-g5f3a788+10,16.0-4-g8a0f11a+25,16.0-4-ga3eb747,16.0-42-gaa8aebfeb+1,16.0-5-g1991253+3,16.0-5-g865efd9+3,16.0-5-gb3f8a4b+35,16.0-5-gd0f1235,16.0-6-g0a6c279+4,16.0-6-g316b399+3,16.0-6-gf0acd13+22,16.0-6-gf9cb114+4,16.0-7-g88875c5,16.0-7-gc370964+2,16.0-8-g4dec96c+16,16.0-8-gb99f628,16.0-9-gcc4efb7+15,w.2018.38
LSSTDataManagementBasePackage
Functions
Right Ascension and Declination Parsers

Routines for converting right ascension and declination from degrees or radians into strings and back again. More...

Functions

double radToDeg (long double angleInRadians)
 
double degToRad (long double angleInDegrees)
 
double sexagesimalStrToDecimal (std::string inStr, std::string delimiter)
 Convert a sexagesimal string to a decimal double. More...
 
std::string lsst::utils::raRadToStr (double raRad)
 Convert a right ascension in radians to a string format. More...
 
std::string lsst::utils::raDegToStr (double raDeg)
 
std::string lsst::utils::decRadToStr (double decRad)
 
std::string lsst::utils::decDegToStr (double decDeg)
 
std::string lsst::utils::raDecRadToStr (double raRad, double decRad)
 
std::string lsst::utils::raDecDegToStr (double raDeg, double decDeg)
 
double lsst::utils::raStrToRad (std::string raStr, std::string delimiter=":")
 
double lsst::utils::raStrToDeg (std::string raStr, std::string delimiter=":")
 
double lsst::utils::decStrToRad (std::string decStr, std::string delimiter=":")
 
double lsst::utils::decStrToDeg (std::string decStr, std::string delimiter=":")
 

Detailed Description

Routines for converting right ascension and declination from degrees or radians into strings and back again.

Right ascensions and declinations (raDecs) are easiest read as strings in the form hh:mm:ss.ss +dd:mm::ss.s, but for calculations, they need to be in degrees or radians. These functions perform those calculations. The function names themselves use the following abbreviations

So, for example raStrToRad() converts a right ascension in the form of a string to radians.

The ouput strings are in fixed length Ra = hh:mm:ss.ss and Dec= +dd:mm::ss.s with all zeros present (not replaced with whitespace).

Input strings must be of a similar format, although some variation is allowed. The default delimiter (the colon) can be supplied as an optional argument

Function Documentation

◆ decDegToStr()

std::string lsst::utils::decDegToStr ( double  decDeg)

Definition at line 101 of file RaDecStr.cc.

101  {
102 
103  double dec = decDeg; //Shorthand
104 
105  std::string sgn = (dec<0) ? "-" : "+";
106 
107  //Rounding the declination prevents 14.999999999 being represented
108  //as 14.:59:60.00
109  dec = fabs(round(dec*1e6)/1e6);
110 
111  int degrees = (int) floor(dec);
112  dec -= degrees;
113 
114  int min = (int) floor(dec*60);
115  dec -= min/60.;
116 
117  double sec = dec*3600;
118  sec = floor(sec*100)/100.;
119 
120  std::string str = sgn;
121  return boost::str(boost::format("%s%02i:%02i:%05.2f") % sgn % degrees % min % sec);
122 
123 }
int min
Definition: Coord.cc:82
double dec
Definition: Match.cc:41
STL class.
AngleUnit constexpr degrees
constant with units of degrees
Definition: Angle.h:106
double sec
Definition: Coord.cc:83
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:129
T fabs(T... args)
Extent< int, N > floor(Extent< double, N > const &input) noexcept
Return the component-wise floor (round towards more negative).
Definition: Extent.cc:108
T round(T... args)

◆ decRadToStr()

std::string lsst::utils::decRadToStr ( double  decRad)

Definition at line 96 of file RaDecStr.cc.

96  {
97  return decDegToStr( radToDeg(decRad) );
98 }
double radToDeg(long double angleInRadians)
Definition: RaDecStr.cc:60
std::string decDegToStr(double decDeg)
Definition: RaDecStr.cc:101

◆ decStrToDeg()

double lsst::utils::decStrToDeg ( std::string  decStr,
std::string  delimiter = ":" 
)

Definition at line 215 of file RaDecStr.cc.

215  {
216  return sexagesimalStrToDecimal(decStr, delimiter);
217 }
double sexagesimalStrToDecimal(std::string inStr, std::string delimiter)
Convert a sexagesimal string to a decimal double.
Definition: RaDecStr.cc:156

◆ decStrToRad()

double lsst::utils::decStrToRad ( std::string  decStr,
std::string  delimiter = ":" 
)

Definition at line 210 of file RaDecStr.cc.

210  {
211  return degToRad( decStrToDeg(decStr, delimiter) );
212 }
double decStrToDeg(std::string decStr, std::string delimiter=":")
Definition: RaDecStr.cc:215
double degToRad(long double angleInDegrees)
Definition: RaDecStr.cc:66

◆ degToRad()

double degToRad ( long double  angleInDegrees)

Definition at line 66 of file RaDecStr.cc.

66  {
67  const long double pi = 3.141592653589793115997963468544;
68  return angleInDegrees * pi / 180.;
69 }

◆ raDecDegToStr()

std::string lsst::utils::raDecDegToStr ( double  raDeg,
double  decDeg 
)

Definition at line 133 of file RaDecStr.cc.

133  {
134  std::string val = raDegToStr(raDeg);
135  val = val + " "+decDegToStr(decDeg);
136  return val;
137 }
ImageT val
Definition: CR.cc:146
STL class.
std::string raDegToStr(double raDeg)
Definition: RaDecStr.cc:78
std::string decDegToStr(double decDeg)
Definition: RaDecStr.cc:101

◆ raDecRadToStr()

std::string lsst::utils::raDecRadToStr ( double  raRad,
double  decRad 
)

Definition at line 126 of file RaDecStr.cc.

126  {
127  std::string val = raRadToStr(raRad);
128  val = val + " "+decRadToStr(decRad);
129  return val;
130 }
std::string decRadToStr(double decRad)
Definition: RaDecStr.cc:96
ImageT val
Definition: CR.cc:146
STL class.
std::string raRadToStr(double raRad)
Convert a right ascension in radians to a string format.
Definition: RaDecStr.cc:74

◆ raDegToStr()

std::string lsst::utils::raDegToStr ( double  raDeg)

Definition at line 78 of file RaDecStr.cc.

78  {
79 
80  double ra = raDeg; //Shorthand
81 
82  //Convert to seconds of arc
83  ra = round(ra*1e6)/1e6;
84  ra *= 86400/360;
85 
86  int hr = (int) floor(ra/3600.);
87  ra -= hr*3600;
88 
89  int mn = (int) floor(ra/60.);
90  ra -= mn*60; //Only seconds remain
91 
92  return boost::str( boost::format("%02i:%02i:%05.2f") % hr % mn % ra);
93 }
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:129
Extent< int, N > floor(Extent< double, N > const &input) noexcept
Return the component-wise floor (round towards more negative).
Definition: Extent.cc:108
T round(T... args)

◆ radToDeg()

double radToDeg ( long double  angleInRadians)

Definition at line 60 of file RaDecStr.cc.

60  {
61  const long double pi = 3.141592653589793115997963468544;
62  return angleInRadians * 180./pi;
63 }

◆ raRadToStr()

std::string lsst::utils::raRadToStr ( double  raRad)

Convert a right ascension in radians to a string format.

Parameters
raRadRa in radians

Definition at line 74 of file RaDecStr.cc.

74  {
75  return raDegToStr( radToDeg(raRad) );
76 }
double radToDeg(long double angleInRadians)
Definition: RaDecStr.cc:60
std::string raDegToStr(double raDeg)
Definition: RaDecStr.cc:78

◆ raStrToDeg()

double lsst::utils::raStrToDeg ( std::string  raStr,
std::string  delimiter = ":" 
)

Definition at line 199 of file RaDecStr.cc.

199  {
200  double ra_hours = sexagesimalStrToDecimal(raStr, delimiter);
201  if (ra_hours < 0) {
202  std::string msg= boost::str(boost::format("Right ascension %s is negative!") % raStr);
203  throw LSST_EXCEPT(except::RuntimeError, msg);
204  }
205 
206  return ra_hours * (360.0/24.0); // hours to degrees
207 }
double sexagesimalStrToDecimal(std::string inStr, std::string delimiter)
Convert a sexagesimal string to a decimal double.
Definition: RaDecStr.cc:156
STL class.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:129
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
Reports errors that are due to events beyond the control of the program.
Definition: Runtime.h:104

◆ raStrToRad()

double lsst::utils::raStrToRad ( std::string  raStr,
std::string  delimiter = ":" 
)

Definition at line 194 of file RaDecStr.cc.

194  {
195  return degToRad( raStrToDeg(raStr, delimiter) );
196 }
double raStrToDeg(std::string raStr, std::string delimiter=":")
Definition: RaDecStr.cc:199
double degToRad(long double angleInDegrees)
Definition: RaDecStr.cc:66

◆ sexagesimalStrToDecimal()

double sexagesimalStrToDecimal ( std::string  inStr,
std::string  delimiter 
)

Convert a sexagesimal string to a decimal double.

Helper function to parse sexagesimal string in either hours:minutes:seconds or degrees:minutes:seconds, and then convert this to a decimal double. Note that no conversion between hours and degrees is performed.

Parameters
inStrString to parse and convert
delimiterDelimiter separating minutes and seconds from hours or degrees.

Definition at line 156 of file RaDecStr.cc.

159  {
160  // Regex the hh:mm:ss or dd:mm:ss with delimiter.
161  std::string regexStr = "(\\d+)";
162  regexStr.append(delimiter);
163  regexStr.append("(\\d+)");
164  regexStr.append(delimiter);
165  regexStr.append("([\\d\\.]+)");
166 
167  const boost::regex re(regexStr);
168  boost::cmatch what;
169  //This throws an exception of failure. I could catch it,
170  //but I'd only throw it again
171  if(! boost::regex_search(inStr.c_str(), what, re)) {
173  "Failed to parse %s as a right ascension or declination with regex %s")
174  % inStr % regexStr);
175  throw LSST_EXCEPT(except::RuntimeError, msg);
176  }
177 
178  //Convert strings to doubles. Again, errors thrown on failure
179  double hh_or_dd = std::stod(std::string(what[1].first, what[1].second));
180  double mm = std::stod(std::string(what[2].first, what[2].second));
181  double ss = std::stod(std::string(what[3].first, what[3].second));
182 
183  hh_or_dd += (mm + ss/60.0)/60.0;
184 
185  //Search for leading - sign.
186  std::string pmStr = "^-";
187  static const boost::regex pm(pmStr);
188  if(boost::regex_search(inStr, pm))
189  hh_or_dd *= -1;
190  return hh_or_dd;
191 }
T stod(T... args)
STL class.
T append(T... args)
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:129
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
T c_str(T... args)
Reports errors that are due to events beyond the control of the program.
Definition: Runtime.h:104