Ignore:
Timestamp:
07/17/03 00:25:48 (21 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/catalog/Slalib.cc

    r1758 r2280  
    1616Slalib::~Slalib()
    1717{
     18}
     19
     20Double_t Slalib::Trunc(Double_t val)
     21{
     22    /* dint(A) - truncate to nearest whole number towards zero (double) */
     23    return val<0 ? TMath::Ceil(val) : TMath::Floor(val);
     24}
     25
     26Double_t Slalib::Round(Double_t val)
     27{
     28    /* dnint(A) - round to nearest whole number (double) */
     29    return val<0 ? TMath::Ceil(val-0.5) : TMath::Floor(val+0.5);
    1830}
    1931
     
    4557    return ZdAz(kPiDiv2-alt, az);
    4658}
     59
     60Double_t Slalib::Hms2Sec(Int_t deg, UInt_t min, Double_t sec, Char_t sgn)
     61{
     62    const Double_t rc = TMath::Sign((60.0 * (60.0 * (Double_t)TMath::Abs(deg) + (Double_t)min) + sec), (Double_t)deg);
     63    return sgn=='-' ? -rc : rc;
     64}
     65
     66Double_t Slalib::Dms2Rad(Int_t deg, UInt_t min, Double_t sec, Char_t sgn)
     67{
     68    /* pi/(180*3600):  arcseconds to radians */
     69#define DAS2R 4.8481368110953599358991410235794797595635330237270e-6
     70    return Hms2Sec(deg, min, sec, sgn)*DAS2R;
     71}
     72
     73Double_t Slalib::Hms2Rad(Int_t hor, UInt_t min, Double_t sec, Char_t sgn)
     74{
     75    /* pi/(12*3600):  seconds of time to radians */
     76#define DS2R 7.2722052166430399038487115353692196393452995355905e-5
     77    return Hms2Sec(hor, min, sec, sgn)*DS2R;
     78}
     79
     80Double_t Slalib::Dms2Deg(Int_t deg, UInt_t min, Double_t sec, Char_t sgn)
     81{
     82    return Hms2Sec(deg, min, sec, sgn)/3600.;
     83}
     84
     85Double_t Slalib::Hms2Deg(Int_t hor, UInt_t min, Double_t sec, Char_t sgn)
     86{
     87    return Hms2Sec(hor, min, sec, sgn)/240.;
     88}
     89
     90Double_t Slalib::Dms2Hor(Int_t deg, UInt_t min, Double_t sec, Char_t sgn)
     91{
     92    return Hms2Sec(deg, min, sec, sgn)/15.;
     93}
     94
     95Double_t Slalib::Hms2Hor(Int_t hor, UInt_t min, Double_t sec, Char_t sgn)
     96{
     97    return Hms2Sec(hor, min, sec, sgn)/3600.;
     98}
     99
     100void Slalib::Day2Hms(Double_t day, Char_t &sgn, UShort_t &hor, UShort_t &min, UShort_t &sec)
     101{
     102    /* Handle sign */
     103    sgn = day<0?'-':'+';
     104
     105    /* Round interval and express in smallest units required */
     106    Double_t a = Round(86400. * TMath::Abs(day)); // Days to seconds
     107
     108    /* Separate into fields */
     109    const Double_t ah = Trunc(a/3600.);
     110    a -= ah * 3600.;
     111    const Double_t am = Trunc(a/60.);
     112    a -= am * 60.;
     113    const Double_t as = Trunc(a);
     114
     115    /* Return results */
     116    hor = (UShort_t)ah;
     117    min = (UShort_t)am;
     118    sec = (UShort_t)as;
     119}
     120
     121void Slalib::Rad2Hms(Double_t rad, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     122{
     123    Day2Hms(rad/(TMath::Pi()*2), sgn, deg, min, sec);
     124}
     125
     126void Slalib::Rad2Dms(Double_t rad, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     127{
     128    Rad2Hms(rad*15, sgn, deg, min, sec);
     129}
     130
     131void Slalib::Deg2Dms(Double_t d, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     132{
     133    Day2Hms(d/24, sgn, deg, min, sec);
     134}
     135
     136void Slalib::Deg2Hms(Double_t d, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     137{
     138    Rad2Hms(d/360, sgn, deg, min, sec);
     139}
     140
     141void Slalib::Hor2Dms(Double_t h, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     142{
     143    Day2Hms(h*15/24, sgn, deg, min, sec);
     144}
     145
     146void Slalib::Hor2Hms(Double_t h, Char_t &sgn, UShort_t &deg, UShort_t &min, UShort_t &sec)
     147{
     148    Day2Hms(h/24, sgn, deg, min, sec);
     149}
     150
     151void Slalib::Day2Hm(Double_t day, Char_t &sgn, UShort_t &hor, Double_t &min)
     152{
     153    /* Handle sign */
     154    sgn = day<0?'-':'+';
     155
     156    /* Round interval and express in smallest units required */
     157    Double_t a = Round(86400. * TMath::Abs(day)); // Days to seconds
     158
     159    /* Separate into fields */
     160    const Double_t ah = Trunc(a/3600.);
     161    a -= ah * 3600.;
     162
     163    /* Return results */
     164    hor = (UShort_t)ah;
     165    min = a/60.;
     166}
     167
     168void Slalib::Rad2Hm(Double_t rad, Char_t &sgn, UShort_t &deg, Double_t &min)
     169{
     170    Day2Hm(rad/(TMath::Pi()*2), sgn, deg, min);
     171}
     172
     173void Slalib::Rad2Dm(Double_t rad, Char_t &sgn, UShort_t &deg, Double_t &min)
     174{
     175    Rad2Hm(rad*15, sgn, deg, min);
     176}
     177
     178void Slalib::Deg2Dm(Double_t d, Char_t &sgn, UShort_t &deg, Double_t &min)
     179{
     180    Day2Hm(d/24, sgn, deg, min);
     181}
     182
     183void Slalib::Deg2Hm(Double_t d, Char_t &sgn, UShort_t &deg, Double_t &min)
     184{
     185    Rad2Hm(d/360, sgn, deg, min);
     186}
     187
     188void Slalib::Hor2Dm(Double_t h, Char_t &sgn, UShort_t &deg, Double_t &min)
     189{
     190    Day2Hm(h*15/24, sgn, deg, min);
     191}
     192
     193void Slalib::Hor2Hm(Double_t h, Char_t &sgn, UShort_t &deg, Double_t &min)
     194{
     195    Day2Hm(h/24, sgn, deg, min);
     196}
     197
Note: See TracChangeset for help on using the changeset viewer.