33 double& azimuth,
double& elevation);
34 void sla_dh2e_(
double& azimuth,
double& elevation,
double& observer_latitude,
39 double& ecliptic_longitude,
double& ecliptic_latitude);
40 void sla_ecleq_(
double& ecliptic_longitude,
double& ecliptic_latitude,
double& time,
45 double& galactic_longitude,
double& galactic_latitude);
46 void sla_galeq_(
double& galactic_longitude,
double& galactic_latitude,
50 void sla_galsup_(
double& galactic_longitude,
double& galactic_latitude,
51 double& sgalactic_longitude,
double& sgalactic_latitude);
52 void sla_supgal_(
double& sgalactic_longitude,
double& sgalactic_latitude,
53 double& galactic_longitude,
double& galactic_latitude);
60 double& mjd,
int& status);
63 void sla_clyd_(
int& year,
int& month,
int&
day,
int& nyears,
int& ndays,
int&status);
67 int result[4],
int& status);
79 double& rightascension,
double&
declination,
double& diam);
82 void sla_preces_(
char *system,
double& ep0,
double& ep1,
double& ra,
double& dec,
int length);
87 void sla_prenut_(
double& epoch,
double& mjd,
double rmatpn[3][3] );
104 inline double wrap(
double angle )
106 int n = int(angle / (2 *
JMATH::PI)) - (angle < 0);
127 const double zone_width = 6 *
JMATH::PI / 180;
128 return -
JMATH::PI + (utmzone -1)*zone_width + zone_width/2;
145 if ( latitude_deg > 84. || latitude_deg < -80.)
147 std::cout <<
"UTM coordinate system not defined for given Latitude: %f (max 84 deg N or min -80 deg S), setting meridian convergence angle to 0 deg.";
158 double omega = lambda-lambda0;
162 double e2 = 0.0066943800;
164 double rho =
a*(1.-e2)/
pow(1.-e2*
pow(sin(phi),2),3./2.);
165 double nu =
a/sqrt(1-e2*
pow(sin(phi),2.));
170 double gamma = sin(phi) * omega
171 - sin(phi) *
pow(omega,3.)/3. *
pow(cos(phi),2.) * (2.*
pow(psi,2.)-psi)
172 - sin(phi) *
pow(omega,5.)/15. *
pow(cos(phi),4.) * (
pow(psi,4.)*(11.-24.*
pow(t,2.))-
173 pow(psi,3.)*(11.-36.*
pow(t,2.))+
174 2.*
pow(psi,2.)*(1.-7.*
pow(t,2.))+
177 - sin(phi) *
pow(omega,7.)/315. *
pow(cos(phi),6.) * (17.-26.*
pow(t,2.)+2.*
pow(t,4.));
193 inline void correct_to_j2000(
double& in_dec,
double& in_ra,
double& mjd,
double& out_dec,
double& out_ra,
bool reverse=
false)
201 double rmatpn[3][3] {};
204 JMATH::JMatrix3D M =
JMATH::JMatrix3D(rmatpn[0][0], rmatpn[0][1], rmatpn[0][2], rmatpn[1][0], rmatpn[1][1], rmatpn[1][2], rmatpn[2][0], rmatpn[2][1], rmatpn[2][2]);
211 v[0] = sin (theta) * cos(phi);
212 v[1] = sin (theta) * sin(phi);
225 double phi_2 = atan2(
v[1],
v[0] );
double theta_2 = acos(
v[2]);
227 out_ra =
wrap(phi_2);
257 (
double) amin / 60.0 +
258 (double) asec / 3600.0) / 180.0;
274 double ha = (
JMATH::PI * (double) hour / 12.0 +
308 const double right_ascension) :
324 double dec_j2000;
double ra_j2000;
328 const double const_dec_j2000 = dec_j2000;
329 return const_dec_j2000;
340 double dec_j2000;
double ra_j2000;
344 const double const_ra_j2000 = ra_j2000;
345 return const_ra_j2000;
374 const double gal_longitude) :
409 const double& azimuth) :
460 const int minutesNorth,
461 const int degreesEast,
462 const int minutesEast)
527 double ha = lst - ra;
537 double theta = -elevation +
JMATH::PI/2.0;
569 double azimuth_geo = azimuth_utm - meridian_convergence_angle;
571 double elevation = -zenith +
JMATH::PI/2.0;
583 double ra = lst - ha;
604 double &dec_j2000_n =
const_cast<double&
> (dec_j2000);
605 double &ra_j2000_n =
const_cast<double&
> (ra_j2000);
606 double galactic_longitude;
double galactic_latitude;
607 sla_eqgal_(ra_j2000_n, dec_j2000_n, galactic_longitude, galactic_latitude);
633 double elevation = -theta +
JMATH::PI/2.0;
658 double ra = lst - ha;
Auxiliary class to make coordinate transformations for a specific geographical location of the detect...
JNeutrinoDirection getDirectionOfNeutrino(const double &t1, const JSourceLocation &pos) const
Get direction pointing to source.
JAstronomy(const JGeographicalLocation &location)
Constructor.
JSourceLocation getLocationOfSource(const double t1, const JNeutrinoDirection &dir) const
Get location of source.
JSourceLocation getLocationOfSourceFromZenithAzimuth(const double t1, const JGEOMETRY3D::JAngle3D &dir) const
Get location of source given a neutrino direction (zenith,azimuth) and time.
JGalacticCoordinates getGalacticCoordinatesOfSource(const double t1, const JGEOMETRY3D::JAngle3D &dir) const
Get location of source in galactic coordinates given a neutrino direction and time.
Location of astrophysical source in Galactic coordinates.
JGalacticCoordinates()
Default constructor.
const double & getGalacticLongitude() const
JGalacticCoordinates(const double gal_latitude, const double gal_longitude)
Constructor.
const double & getGalacticLatitude() const
const double & getLongitude() const
const double & getLatitude() const
JGeographicalLocation()
Default constructor.
JGeographicalLocation(const int degreesNorth, const int minutesNorth, const int degreesEast, const int minutesEast)
Constructor.
JGeographicalLocation(const double latitude, const double longitude)
Constructor.
Direction of incident neutrino.
JNeutrinoDirection()
Default constructor.
JNeutrinoDirection(const double &zenith, const double &azimuth)
Constructor.
const double & getAzimuth() const
const double & getZenith() const
Location of astrophysical source.
const double & getDeclination() const
double getDeclinationJ2000(const double t1) const
Get declination in J2000.
JSourceLocation()
Default constructor.
const double & getRightAscension() const
JSourceLocation(const double declination, const double right_ascension)
Constructor.
double getRightAscensionJ2000(const double t1) const
Get Right Ascension in J2000.
Data structure for angles in three dimensions.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
JMatrix3D & transpose()
Transpose.
void transform(double &__x, double &__y, double &__z) const
Transform.
Singular value decomposition.
const JMatrix3D & invert(const double precision=1.0e-12) const
Get inverted matrix.
static const JGeographicalLocation Sicily(36, 16, 16, 06)
static const JSourceLocation VELAX(getRadians(-45, -10, -35.2), getHourAngle(8, 35, 20.66))
double getHourAngle(const int hour, const int min, const double sec)
Convert hour angle to radians.
double getDot(const JSourceLocation &first, const JSourceLocation &second)
Dot product.
void sla_clyd_(int &year, int &month, int &day, int &nyears, int &ndays, int &status)
double wrap(double angle)
double longitude_of_central_meridian(int utmzone)
static const double NUMBER_OF_SECONDS_PER_YEAR
void sla_dh2e_(double &azimuth, double &elevation, double &observer_latitude, double &hourangle, double &declination)
void sla_ecleq_(double &ecliptic_longitude, double &ecliptic_latitude, double &time, double &rightascension, double &declination)
void sla_djcal_(int &precision, double &mjd, int result[4], int &status)
static const JSourceLocation RXJ1713(getRadians(-39, -46, 0.0), getHourAngle(17, 13, 7))
double sla_gmst_(double &ut1)
void sla_galeq_(double &galactic_longitude, double &galactic_latitude, double &rightascension, double &declination)
void sla_prenut_(double &epoch, double &mjd, double rmatpn[3][3])
void sla_dd2tf_(int &ndec, double &day, char sign[1], int result[4])
double compute_meridian_convergence_angle(double longitude, double latitude)
void sla_eqgal_(double &rightascension, double &declination, double &galactic_longitude, double &galactic_latitude)
void sla_galsup_(double &galactic_longitude, double &galactic_latitude, double &sgalactic_longitude, double &sgalactic_latitude)
static const double NUMBER_OF_SECONDS_PER_DAY
double sla_gmsta_(double &ut1, double &part_day)
void sla_eqecl_(double &rightascension, double &declination, double &time, double &ecliptic_longitude, double &ecliptic_latitude)
static const JGeographicalLocation ORCA(42, 48, 06, 02)
static const double NUMBER_OF_SECONDS_PER_SEDERIAL_DAY
void correct_to_j2000(double &in_dec, double &in_ra, double &mjd, double &out_dec, double &out_ra, bool reverse=false)
Convert (Dec, RA) to J2000.
double getRadians(const int angle, const int amin, const double asec)
Convert angle to radians.
double sla_eqeqx_(double &ut1)
void sla_preces_(char *system, double &ep0, double &ep1, double &ra, double &dec, int length)
static const JGeographicalLocation ARCA(36, 17, 15, 58)
static const double NUMBER_OF_SECONDS_PER_HOUR
void sla_supgal_(double &sgalactic_longitude, double &sgalactic_latitude, double &galactic_longitude, double &galactic_latitude)
int get_utm_zone(double lat)
static const double MJD_EPOCH
static const JGeographicalLocation Pylos(36, 33, 16, 06)
void sla_rdplan_(double &dtt, int &object, const double &longitude, const double &latitude, double &rightascension, double &declination, double &diam)
void sla_de2h_(double &hourangle, double &declination, double &observer_latitude, double &azimuth, double &elevation)
double sla_dtt_(double &ut1)
static const JGeographicalLocation Antares(42, 48, 06, 10)
static const JSourceLocation galacticCenter(-0.5062816, -1.633335)
void sla_caldj_(int &year, int &month, int &day, double &mjd, int &status)
int sign(const T &value)
Get sign of value.
T pow(const T &x, const double y)
Power .
static const double PI
Mathematical constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const char *const hourangle