Changeset 1758 for trunk/MagicSoft/Cosy


Ignore:
Timestamp:
02/14/03 23:18:37 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/Changelog

    r1757 r1758  
    3232     - added dat
    3333     - added rcc
     34
     35   * starg.cc, catalog/SlaStars.[h,cc], catalog/Slalib.[h,cc],
     36     catalog/StarCatalog.[h,cc], devdrv/macs.cc, devdrv/shaftencoder.cc,
     37     gui/MGCosy.[h,cc], gui/MGSkyPosition.[h,cc], gui/MGStarguider.[h,cc]:
     38     - changed to use MObservatory
     39     - changed usage of timer to new style
     40   
     41   * catalog/SlaPlanets.[h,cc]:
     42     - removed old style calculation
     43     - added fTt
     44
     45   * gui/MGCosy.cc:
     46     - added new tab for SE Test
     47
     48   * main/MCosy.[h,cc]:
     49     - don't use second SE when only one is attached
     50     - added SE Test stuff
    3451
    3552
  • trunk/MagicSoft/Cosy/catalog/SlaPlanets.cc

    r1757 r1758  
    77ClassImp(SlaPlanets);
    88
    9 SlaPlanets::SlaPlanets() : Slalib(), fDt(slaDt(2000.0)/60./60./24.)
     9SlaPlanets::SlaPlanets(MObservatory::LocationName_t key) : Slalib(key), fDt(slaDt(2000.0)/60./60./24.)
    1010{
    1111}
     
    1515}
    1616
    17 void SlaPlanets::SetMjd(const double mjd)
     17void SlaPlanets::SetMjd(double mjd)
    1818{
    1919    Slalib::SetMjd(mjd);
     20
     21    fTt = mjd + slaDtt(mjd)/60./60./24.;
    2022
    2123    //
     
    2931}
    3032
    31 #include "SlaStars.h"
    32 
    3333void SlaPlanets::UpdatePlanetPos(ePlanets_t planet)
    3434{
    35     /*
    36     double cp[6] = { 0, 0, 0, 0, 0, 0 };
    37 
    38     double coord[6];
    39 
    40     switch (planet)
    41     {
    42     case kEMoon:
    43         //
    44         // -- approximate geocentric pos and vel --
    45         //
    46         slaDmoon(GetMjd() + fDt, coord);
    47         break;
    48 
    49     case kEMercury:
    50     case kEVenus:
    51     case kEMars:
    52     case kEJupiter:
    53     case kESaturn:
    54     case kEUranus:
    55     case kENeptune:
    56     case kEPluto:
    57     case kESun:
    58         {
    59         */
    6035    //
    61     // coordinates of planet: heliocentric, equatoril, J2000
     36    // coordinates of planet: topocentric, equatorial, J2000
    6237    //
    63     double ra,dec,diam;
    64     // TDB, planet, elong, phi, *ra, *dec, *diam
     38    double ra, dec, diam;
    6539
    6640    // One can use TT instead of TDB for all plenets
    6741    // (except the moon)
    68 
    69     const double tt = GetMjd() + slaDtt(GetMjd())/60./60./24.;
    70 
    71     // FIXME: Shell be UT1
    72     const double ut1 = fmod(GetMjd(), 1);
    73 
    74     // tt should be tdb, but tt can be used
    75     const double tdb = tt + slaRcc(tt, ut1, GetElong(), 8300*cos(GetPhi()), 8300*sin(GetPhi() ))/60./60./24.;
    76     /*
    77      cout << "Dt: " << slaDtt(GetMjd()) << endl;
    78      cout << "Rc: " << slaRcc(tt, ut1, GetElong(), 8300*cos(GetPhi()), 8300*sin(GetPhi() )) << endl;
    79      */
    80     slaRdplan(tt, planet, GetElong(), GetPhi(),
    81               &ra, &dec, &diam);
    82     /*
    83      switch (planet)
    84      {
    85      case kEMoon: cout << "Moon: "; break;
    86      case kEMercury: cout << "Merkur: "; break;
    87      case kEVenus: cout << "Venus: "; break;
    88      case kEMars: cout << "Mars: "; break;
    89      case kEJupiter: cout << "Jupiter: "; break;
    90      case kESaturn: cout << "Saturn: "; break;
    91      case kEUranus: cout << "Uranus: "; break;
    92      case kENeptune: cout << "Neptun: "; break;
    93      case kEPluto: cout << "Pluto: "; break;
    94      case kESun: cout << "Sonne: "; break;
    95      }
    96 
    97      cout << (int)(ra*12/TMath::Pi()) << "h"<< (int)(ra*12/TMath::Pi()*60)%60 <<"min ";
    98      cout << (int)(dec*kRad2Deg) << "deg" << (int)(dec*kRad2Deg*60)%60 << "min" << endl;
    99      */
    100     /*
    101      SlaStars sla;
    102      sla.SetMjd(GetMjd());
    103      ZdAz za = sla.CalcZdAz(RaDec(ra,dec));
    104      cout << za.Zd()*kRad2Deg << " " << fmod(za.Az()*kRad2Deg+720,360.) << endl;
    105      fZdAz[planet] = za;
    106      */
     42    // TDB, planet, elong, phi, *ra, *dec, *diam
     43    slaRdplan(fTt, planet, GetElong(), GetPhi(), &ra, &dec, &diam);
    10744
    10845    double az, el;
    10946    slaDe2h(GetAlpha()-ra, dec, GetPhi(), &az, &el);
    11047
    111     cout << 90-el*kRad2Deg << " " << fmod(az*kRad2Deg+720,360.) << endl;
    11248    fZdAz[planet].Set(TMath::Pi()/2-el, az);
    113     /*
    114      }
    115      // !! Fall through!
    116      break;
    117      case kESun:
    118      coord[0] = cp[0] - fEarth[0];
    119      coord[1] = cp[1] - fEarth[1];
    120      coord[2] = cp[2] - fEarth[2];
    121      break;
    122      }
    123      fZdAz[planet] = XYZ2ZdAz(coord);
    124 
    125      if (planet==kESun)
    126      {
    127      cout << fZdAz[kESun].Zd()*kRad2Deg << " " <<  fZdAz[kESun].Az()*kRad2Deg << endl;
    128      }*/
    12949}
  • trunk/MagicSoft/Cosy/catalog/SlaPlanets.h

    r1109 r1758  
    2323{
    2424private:
    25     double fDt; // const: rootcint/TMemberInspector
     25    double fDt;        // [mjd] const: rootcint/TMemberInspector
     26    double fTt;        // [mjd] timescale TT
    2627
    2728    ZdAz fZdAz[10];    // [rad]
     
    3233
    3334public:
    34     SlaPlanets();
     35    SlaPlanets(MObservatory::LocationName_t key);
    3536    virtual ~SlaPlanets();
    3637
    37     //    const AltAz GetAltAz() const { return fAltAz*360/D2PI; }
    38     //    const ZdAz  GetZdAz()  const { return ZdAz(DPI/2-fAltAz.Alt(), fAltAz.Az())*360/D2PI; }
    39     //    const RaDec GetRaDec() const { return fRaDec*360/D2PI; }
    40 
    41     void SetMjd(const double mjd);
     38    void SetMjd(double mjd);
    4239
    4340    void UpdatePlanetPos(ePlanets_t planet);
  • trunk/MagicSoft/Cosy/catalog/SlaStars.cc

    r1757 r1758  
    55ClassImp(SlaStars);
    66
    7 SlaStars::SlaStars() : Slalib()
     7SlaStars::SlaStars(MObservatory::LocationName_t key) : Slalib(key)
    88{
    99}
  • trunk/MagicSoft/Cosy/catalog/SlaStars.h

    r1274 r1758  
    1616
    1717public:
    18     SlaStars();
     18    SlaStars(MObservatory::LocationName_t key);
    1919    virtual ~SlaStars();
    2020
  • trunk/MagicSoft/Cosy/catalog/Slalib.cc

    r1757 r1758  
    1010ClassImp(Slalib);
    1111
    12 Slalib::Slalib() : Timer()
     12Slalib::Slalib(MObservatory::LocationName_t key) : Timer(), MObservatory(key)
    1313{
    14     // p = pointer to MainFrame (not owner)
    15 
    16     //
    17     // calculate observers location (goe)
    18     //
    19     int status;
    20     //slaDaf2r(51, 38, 48.0, &fPhi,   &status);
    21     //slaDaf2r( 9, 56, 36.0, &fElong, &status);
    22     //fHeight = 300;
    23 
    24     slaDaf2r(28, 45, 30.0, &fPhi,   &status);
    25     slaDaf2r(17, 52, 48.0, &fElong, &status);
    26 
    27     fElong *= -1;
    28     fHeight = 2326;
    29 
    30     cout << "Latitude: 51\x9c 38'48.0\" = " <<  kRad2Deg*fPhi << "   ";
    31     cout << "Longitude: 9\x9c 56'36.0\" = " <<  kRad2Deg*fElong << endl;
    3214}
    3315
     
    3618}
    3719
    38 void Slalib::SetMjd(const double mjd)
     20void Slalib::SetMjd(double mjd)
    3921{
    40     fMjd   = mjd;
    41     fAlpha = slaGmst(fMjd) + fElong;
     22    Timer::SetMjd(mjd);
     23    fAlpha = slaGmst(mjd) + GetElong();
    4224}
    43 
    44 void Slalib::SetMjd2Now()
    45 {
    46     Now();
    47     SetMjd(CalcMjd());
    48 //    cout << "GetMjd: "<< (*this)() << " " << GetMjd() << endl;
    49 }
    50 
    51 void Slalib::SetMjd(const struct timeval *tm)
    52 {
    53     SetTimer(tm);
    54     SetMjd(CalcMjd());
    55 }
    56 
    5725
    5826ZdAz Slalib::XYZ2ZdAz(double coord[3]) const
     
    7341    //
    7442    double alt, az;
    75     slaDe2h(ha, dec, fPhi, &az, &alt);
     43    slaDe2h(ha, dec, GetPhi(), &az, &alt);
    7644
    7745    return ZdAz(kPiDiv2-alt, az);
  • trunk/MagicSoft/Cosy/catalog/Slalib.h

    r1757 r1758  
    55
    66#include "coord.h"
    7 #include "base/timer.h"
     7#include "timer.h"
     8#include "MObservatory.h"
    89
    9 class Slalib : public Timer
     10class Slalib : public Timer, public MObservatory
    1011{
    1112private:
    12     double   fAlpha;
    13     double   fMjd;
    14 
    15     double   fPhi;      // location of observatory
    16     double   fElong;
    17 
    18     double   fHeight;
     13    double fAlpha;
    1914
    2015public:
    21     Slalib();
     16    Slalib(MObservatory::LocationName_t key);
    2217    virtual ~Slalib();
    2318
    24     //    const AltAz GetAltAz() const { return fAltAz*360/D2PI; }
    25     //    const ZdAz  GetZdAz()  const { return ZdAz(DPI/2-fAltAz.Alt(), fAltAz.Az())*360/D2PI; }
    26     //    const RaDec GetRaDec() const { return fRaDec*360/D2PI; }
    27 
    28     void SetMjd2Now();
    29     void SetMjd(const struct timeval *tm);
    30 
    31     virtual void SetMjd(const double mjd);
     19    virtual void SetMjd(double mjd);
    3220
    3321    double GetAlpha() const  { return fAlpha; }
    34     double GetMjd() const    { return fMjd; }
    35 
    36     double GetPhi() const    { return fPhi; }
    37     double GetElong() const  { return fElong; }
    38 
    39     double GetHeight() const { return fHeight; }
    4022
    4123    ZdAz   XYZ2ZdAz(double coord[3]) const;
  • trunk/MagicSoft/Cosy/catalog/StarCatalog.cc

    r1531 r1758  
    1414ClassImp(StarCatalog);
    1515
    16 StarCatalog::StarCatalog() : SlaStars(), fEntries(0)
     16StarCatalog::StarCatalog(MObservatory::LocationName_t key) : SlaStars(key), fEntries(0)
    1717{
    1818    // p = pointer to MainFrame (not owner)
  • trunk/MagicSoft/Cosy/catalog/StarCatalog.h

    r1531 r1758  
    7171
    7272public:
    73     StarCatalog();
     73    StarCatalog(MObservatory::LocationName_t key);
    7474    virtual ~StarCatalog();
    7575
  • trunk/MagicSoft/Cosy/devdrv/macs.cc

    r1728 r1758  
    233233    StopGuarding();
    234234
    235     usleep(2000.*GetGuardTime());
     235    usleep(2000*GetGuardTime());
    236236
    237237    lout << "- " << GetNodeName() << ": Requesting Mac Software Version." << endl;
     
    610610double Macs::GetMjd()
    611611{
    612     return fPosTime.CalcMjd();
     612    return fPosTime.GetMjd();
    613613}
    614614
     
    620620double Macs::GetPdoMjd()
    621621{
    622     return fPdoTime.CalcMjd();
     622    return fPdoTime.GetMjd();
    623623}
    624624
  • trunk/MagicSoft/Cosy/devdrv/shaftencoder.cc

    r1742 r1758  
    213213double ShaftEncoder::GetMjd()
    214214{
    215     return fTime.CalcMjd();
     215    return fTime.GetMjd();
    216216}
    217217
  • trunk/MagicSoft/Cosy/gui/MGCosy.cc

    r1727 r1758  
    311311    TGCompositeFrame *tf2 = fTab->AddTab("Track");
    312312    TGCompositeFrame *tf4 = fTab->AddTab("Calibration");
    313     TGCompositeFrame *tf3 = fTab->AddTab("Demo");
     313    TGCompositeFrame *tf5 = fTab->AddTab("Test SE");
     314    /*TGCompositeFrame *tf3 =*/ fTab->AddTab("Demo");
    314315
    315316    fCZdAz = new MGCoordinates(tf1, kETypeZdAz);
     
    359360    l3 = new TGLabel(tf4, "the TPoint button. To set the Shaftencoder offset");
    360361    l4 = new TGLabel(tf4, "use the Calib SE button.");
     362    l1->Move(x, y);
     363    l2->Move(x, y+h);
     364    l3->Move(x, y+2*h);
     365    l4->Move(x, y+3*h);
     366    fList->Add(l1);
     367    fList->Add(l2);
     368    fList->Add(l3);
     369    fList->Add(l4);
     370
     371    l1 = new TGLabel(tf5, "START starts histograming the differences of");
     372    l2 = new TGLabel(tf5, "the two shaftencoders at the elevation axis.");
     373    l3 = new TGLabel(tf5, "Use STOP to stop histograming and display the");
     374    l4 = new TGLabel(tf5, "results on the screen.");
    361375    l1->Move(x, y);
    362376    l2->Move(x, y+h);
     
    569583}
    570584
    571 MGCosy::MGCosy(MsgQueue *q, const TGWindow *p, UInt_t w, UInt_t h)
    572     : TGMainFrame(p, w, h), fQueue(q)
     585MGCosy::MGCosy(MObservatory::LocationName_t key, MsgQueue *q, const TGWindow *p, UInt_t w, UInt_t h)
     586    : TGMainFrame(p, w, h), fObservatory(key), fQueue(q)
    573587{
    574588    fList = new MGList;
     
    596610    cout << "MGCosy: Creating MGSkyPosition" << endl;
    597611#endif
    598     fSkyPosition = new MGSkyPosition(f1, 300);
     612    fSkyPosition = new MGSkyPosition(fObservatory, f1, 300);
    599613#ifdef DEBUG
    600614    cout << "MGCosy: Creating MGAccuracy" << endl;
     
    750764    static Int_t decs=~0;
    751765
    752     static SlaStars sla;
     766    static SlaStars sla(fObservatory);
    753767    sla.SetMjd(mjd);
    754768
     
    863877    fUtc->SetText(new TGString(text));
    864878
    865     double mjd = time.CalcMjd();
     879    double mjd = time.GetMjd();
    866880
    867881    sprintf(text, "%12.6f", mjd);
     
    11141128                    return kTRUE;
    11151129                case 3:
     1130                    fQueue->Proc(WM_TESTSE, (void*)1);
     1131                    return kTRUE;
     1132                case 4:
    11161133                    StartDemo();
    11171134                    return kTRUE;
     
    11231140                StopDemo();
    11241141                fQueue->PostMsg(WM_STOP, 0, 0);
     1142                if (fTab->GetCurrent()==3)
     1143                    fQueue->Proc(WM_TESTSE, NULL);
    11251144                cout << "PostMsg (WM_Stop) returned." << endl;
    11261145                return kTRUE;
  • trunk/MagicSoft/Cosy/gui/MGCosy.h

    r1702 r1758  
    44#ifndef ROOT_TGFrame
    55#include <TGFrame.h>
     6#endif
     7
     8#ifndef MARS_MObservatory
     9#include <MObservatory.h>
    610#endif
    711
     
    3135{
    3236private:
     37    const MObservatory::LocationName_t fObservatory;
    3338
    3439    //
     
    104109
    105110public:
    106     MGCosy(MsgQueue *q, const TGWindow *p, UInt_t w, UInt_t h);
     111    MGCosy(MObservatory::LocationName_t key, MsgQueue *q, const TGWindow *p, UInt_t w, UInt_t h);
    107112    ~MGCosy();
    108113
  • trunk/MagicSoft/Cosy/gui/MGSkyPosition.cc

    r1727 r1758  
    4343    //   Neptun     7.8
    4444    //
    45     fSlaPlanet = new SlaPlanets;
    46     fSlaStar   = new SlaStars;
     45    fSlaPlanet = new SlaPlanets(fObservatory);
     46    fSlaStar   = new SlaStars(fObservatory);
    4747
    4848    //
     
    177177}
    178178
    179 MGSkyPosition::MGSkyPosition(const TGWindow* p, const UInt_t w)
    180     : MGEmbeddedCanvas("SkyPosition", p, w, 110)
     179MGSkyPosition::MGSkyPosition(MObservatory::LocationName_t key, const TGWindow* p, const UInt_t w)
     180    : MGEmbeddedCanvas("SkyPosition", p, w, 110), fObservatory(key)
    181181{
    182182    DrawCoordinateSystem();
  • trunk/MagicSoft/Cosy/gui/MGSkyPosition.h

    r1727 r1758  
    1111#ifndef MGEMBEDDEDCANVAS_H
    1212#include "MGEmbeddedCanvas.h"
     13#endif
     14
     15#ifndef MARS_MObservatory
     16#include "MObservatory.h"
    1317#endif
    1418
     
    4650    SlaPlanets *fSlaPlanet;
    4751
     52    const MObservatory::LocationName_t fObservatory;
     53
    4854    Int_t fX[9];
    4955    Int_t fY[9];
     
    6672
    6773public:
    68     MGSkyPosition(const TGWindow* p, const UInt_t w);
     74    MGSkyPosition(MObservatory::LocationName_t key, const TGWindow* p, const UInt_t w);
    6975    ~MGSkyPosition();
    7076
  • trunk/MagicSoft/Cosy/gui/MGStarguider.cc

    r1690 r1758  
    7272#define kZOOM 96
    7373
    74 MGStarguider::MGStarguider()
    75 : Camera(), TGMainFrame(gClient->GetRoot(), 768, 700), fDx((768-kZOOM)/2), fDy((512-kZOOM)/2)
     74MGStarguider::MGStarguider(MObservatory::LocationName_t key)
     75: Camera(), TGMainFrame(gClient->GetRoot(), 768, 700), fObservatory(key), fDx((768-kZOOM)/2), fDy((512-kZOOM)/2)
    7676{
    7777    gVirtualX->GrabButton(fId, kButton2, /*kButtonPressMask|kButtonReleaseMask|*/kNone, kNone, kNone, kNone);
     
    8080    fList = new MGList;
    8181
    82     fSao = new StarCatalog;
     82    fSao = new StarCatalog(fObservatory);
    8383    fRaDec = new RaDec(180, 40);
    8484
     
    612612
    613613        MStarList stars;
    614         fSao->GetStars(stars, time.CalcMjd(), *fRaDec);
     614        fSao->GetStars(stars, time.GetMjd(), *fRaDec);
    615615        fSao->GetImg(c, cimg, stars);
    616616        //fSao->GetImg(c, cimg, time.CalcMjd(), *fRaDec);
  • trunk/MagicSoft/Cosy/gui/MGStarguider.h

    r1690 r1758  
    1111#include "MGList.h"
    1212#include "MGImage.h"
     13
     14#ifndef MARS_MObservatory
     15#include "MObservatory.h"
     16#endif
    1317
    1418class AltAz;
     
    5660    TTimer *fTimer;
    5761
     62    const MObservatory::LocationName_t fObservatory;
     63
    5864    Int_t fDx;
    5965    Int_t fDy;
     
    7076
    7177public:
    72     MGStarguider();
     78    MGStarguider(MObservatory::LocationName_t key);
    7379    virtual ~MGStarguider();
    7480
  • trunk/MagicSoft/Cosy/main/MCosy.cc

    r1757 r1758  
    1010#include <TApplication.h>
    1111#include <TTimer.h>
     12
     13#include <TH2.h>
     14#include <TProfile.h>
     15#include <TCanvas.h>
    1216
    1317#include "MGCosy.h"
     
    147151//  are avaraged. The values are returned as a ZdAz object.
    148152//
     153//  If one of the two shaftencoders on the elevation axis is missing
     154//  the other one's position is returned.
     155//
    149156//  The positions are alway up-to-date because the shaftencoders are
    150157//  sending all changes immediatly.
     
    152159ZdAz MCosy::GetSePos()
    153160{
     161    const int pa = fAz->GetPos();
     162    if (fZd1->IsZombieNode() && fZd2->IsZombieNode())
     163        return ZdAz(0, pa);
     164
    154165    //
    155166    // Get the values
    156167    //
    157     const int p0 = fZd1->GetPos();
    158     const int p1 = fZd2->GetPos();
    159     const int p2 = fAz->GetPos();
     168    const int p1 =  fZd1->GetPos();
     169    const int p2 = -fZd2->GetPos();
     170
     171    if (fZd1->IsZombieNode())
     172        return ZdAz(p2, pa);
     173    if (fZd2->IsZombieNode())
     174        return ZdAz(p1, pa);
    160175
    161176    //
    162177    // interpolate shaft encoder positions
    163178    //
    164     const float p = (float)(p0-p1)/2;
     179    float p = (float)(p1+p2)/2;
    165180
    166181    //
    167182    // calculate 'regelabweichung'
    168183    //
    169     return ZdAz(p, p2);
     184    return ZdAz(p, pa);
    170185}
    171186
     
    655670void MCosy::TrackPosition(const RaDec &dst) // ra, dec [rad]
    656671{
    657     SlaStars sla;
     672    SlaStars sla(fObservatory);
    658673
    659674    //
    660675    // Position to actual position
    661676    //
    662     sla.SetMjd2Now();
     677    sla.Now();
    663678    ZdAz dest = sla.CalcZdAz(dst);
    664679
     
    707722    //
    708723    fRaDec = dst;
    709     fTracking = kTRUE;
     724    fBackground = kBgdTracking;
    710725
    711726//---    ofstream fout("log/cosy.pos");
     
    729744        // Request theoretical Position for a time in the future (To+dt) from CPU
    730745        //
    731         sla.SetMjd(sla.CalcMjd()+dt/(60*60*24));
     746        sla.SetMjd(sla.GetMjd()+dt/(60*60*24));
    732747        ZdAz dummy = fBending(sla.CalcZdAz(fRaDec));
    733748        dest = CorrectTarget(GetSePos(), dummy); // [se]
     
    817832    }
    818833
    819     fTracking = kFALSE;
     834    fBackground = kBgdNone;
    820835    StopMovement();
    821836    lout << "Tracking stopped." << endl;
     
    915930                return (void*)0xebb0;
    916931
    917             SlaStars sla;
    918             sla.SetMjd2Now();
     932            SlaStars sla(fObservatory);
     933            sla.Now();
    919934
    920935            RaDec rd = *((RaDec*)mp);
     
    943958        {
    944959            cout << "WM_TPoint: start." << endl;
    945             SlaStars sla;
    946             sla.SetMjd2Now();
     960            SlaStars sla(fObservatory);
     961            sla.Now();
    947962
    948963            RaDec rd = *((RaDec*)mp);
     
    976991        cout << "WM_Position: done. (return 0x7777)" << endl;
    977992        return (void*)0x7777;
     993
     994    case WM_TESTSE:
     995        cout << "WM_TestSe: start." << endl;
     996        fBackground = mp ? kBgdSeTest : kBgdNone;
     997        cout << "WM_TestSe: done. (return 0x1e51)" << endl;
     998        return (void*)0x1e51;
    978999
    9791000    case WM_TRACK:
     
    10401061            cout << endl;
    10411062
    1042             SlaStars sla;
    1043             sla.SetMjd2Now();
     1063            SlaStars sla(fObservatory);
     1064            sla.Now();
    10441065
    10451066            XY xy = *((XY*)mp);
     
    11601181}
    11611182
     1183void MCosy::TalkThreadTracking()
     1184{
     1185    if (fZd1->IsZombieNode() || fZd2->IsZombieNode() || fAz->IsZombieNode())
     1186        return;
     1187    if (!fMac1 || !fMac2)
     1188        return;
     1189
     1190    SlaStars sla(fObservatory);
     1191
     1192    ZdAz old;
     1193    ZdAz ist;
     1194
     1195    ZdAz sollzd;
     1196    ZdAz sollaz;
     1197
     1198    ZdAz istre = -fOffset;                // [re]
     1199    ZdAz time;
     1200
     1201    //
     1202    // only update fTrackingError while tracking
     1203    //
     1204    bool phca1=false;
     1205    bool phca2=false;
     1206    bool phcaz=false;
     1207
     1208    while (fBackground==kBgdTracking)
     1209    {
     1210        //
     1211        // Make changes (eg wind) smoother - attenuation of control function
     1212        //
     1213        const float weight = 1.; //0.3;
     1214
     1215        //
     1216        // This is the time constant which defines how fast
     1217        // you correct for external influences (like wind)
     1218        //
     1219        fZd1->ResetPosHasChanged();
     1220        fZd2->ResetPosHasChanged();
     1221        fAz->ResetPosHasChanged();
     1222        do
     1223        {
     1224            phca1 = fZd1->PosHasChanged();
     1225            phca2 = fZd2->PosHasChanged();
     1226            phcaz = fAz->PosHasChanged();
     1227            usleep(1);
     1228        } while (!phca1 && !phca2 && !phcaz && fBackground==kBgdTracking);
     1229
     1230        //---usleep(100000); // 0.1s
     1231
     1232        //
     1233        // get position, where we are
     1234        //
     1235        old = ist;
     1236        ist = GetSePos(); // [se]
     1237
     1238        //
     1239        // if the position didn't change continue
     1240        //
     1241        /*---
     1242         if ((int)ist.Zd() == (int)old.Zd() &&
     1243         (int)ist.Az() == (int)old.Az())
     1244         continue;
     1245         */
     1246        istre = GetRePosPdo();
     1247
     1248        //
     1249        // Get time from last shaftencoder position change (position: ist)
     1250        // FIXME: I cannot take the avarage
     1251        //
     1252        if (fZd1->GetMjd()>fZd2->GetMjd())
     1253            time.Zd(fZd1->GetMjd());
     1254        else
     1255            time.Zd(fZd2->GetMjd());
     1256        //time.Zd((fZd1->GetMjd()+fZd2->GetMjd())/2.0);
     1257        time.Az(fAz->GetMjd());
     1258
     1259        //
     1260        // if Shaftencoder changed position
     1261        // calculate were we should be
     1262        //
     1263        if (phca1 || phca2 /*(int)ist.Zd() != (int)old.Zd()*/)
     1264        {
     1265            sla.SetMjd(time.Zd());
     1266
     1267            ZdAz dummy = fBending(sla.CalcZdAz(fRaDec));
     1268            sollzd = CorrectTarget(ist, dummy); // [se]
     1269
     1270            fOffset.Zd(fOffset.Zd()*(1.-weight)+(ist.Zd()*kGearRatio.X()-istre.Zd())*weight);
     1271        }
     1272
     1273        if (phcaz /*(int)ist.Az() != (int)old.Az()*/)
     1274        {
     1275            sla.SetMjd(time.Az());
     1276
     1277            ZdAz dummy = fBending(sla.CalcZdAz(fRaDec));
     1278            sollaz = CorrectTarget(ist, dummy); // [se]
     1279
     1280            fOffset.Az(fOffset.Az()*(1.-weight)+(ist.Az()*kGearRatio.Y()-istre.Az())*weight);
     1281        }
     1282
     1283        ZdAz soll(sollzd.Zd(), sollaz.Az());
     1284        fZdAzSoll = fBending.CorrectBack(soll*2*TMath::Pi()/16384);
     1285
     1286        fTrackingError.Set((ist.Zd()-sollzd.Zd())*kGearRatio.X(),
     1287                           (ist.Az()-sollaz.Az())*kGearRatio.Y());
     1288
     1289        //---            fout << setprecision(15) << setw(17) << time.Zd()*60.*60.*24. << " ";
     1290        //---            fout << setprecision(5)  << setw(7)  << fTrackingError.Zd() << "  ";
     1291        //---            fout << setprecision(15) << setw(17) << time.Az()*60.*60.*24. << " ";
     1292        //---            fout << setprecision(5)  << setw(7)  << fTrackingError.Az() << endl;
     1293    }
     1294    //---        fout << endl << endl;
     1295}
     1296
     1297void MCosy::TalkThreadSeTest()
     1298{
     1299//    if (fZd1->IsZombieNode() || fZd2->IsZombieNode())
     1300    //        return;
     1301
     1302    if (fHistTestSe)
     1303    {
     1304        lout << "You are much too fast... try again." << endl;
     1305        return;
     1306    }
     1307
     1308    fHistTestSe = new TH2F("Diff", "Difference of SE values",
     1309                           201, fMin.Zd(), fMax.Zd(), 101, -50, 50);
     1310    fHistTestSe->SetXTitle("ZA [\\circ]");
     1311    fHistTestSe->SetYTitle("\\Delta SE");
     1312
     1313    Double_t offset = 0;
     1314
     1315    int cnt = 0;
     1316
     1317    lout << "Starting Shaftencoder Test..." << endl;
     1318
     1319    while (fBackground==kBgdSeTest)
     1320    {
     1321        fZd1->ResetPosHasChanged();
     1322        fZd2->ResetPosHasChanged();
     1323
     1324        while (!fZd1->PosHasChanged() && !fZd2->PosHasChanged() &&
     1325               fBackground==kBgdSeTest)
     1326            usleep(1);
     1327
     1328        const Double_t pos[3] = { fZd1->GetPos(), fZd2->GetPos(), fAz->GetPos() };
     1329
     1330        //
     1331        //  Estimate Offset from the first ten positions
     1332        //
     1333        if (cnt++<10)
     1334            offset += pos[0]+pos[1];
     1335        if (cnt++==10)
     1336            offset /= 10;
     1337        if (cnt<11)
     1338            continue;
     1339
     1340        Double_t apos = (pos[0]-pos[1])/2 * TMath::Pi()*2 / 16384;
     1341
     1342        ZdAz bend = fBending(ZdAz(apos, pos[2]))*kRad2Deg;
     1343
     1344        fHistTestSe->Fill(bend.Zd(), pos[0]+pos[1]-offset);
     1345    }
     1346
     1347    lout << "Shaftencoder Test Stopped... displaying Histogram." << endl;
     1348}
     1349
    11621350void MCosy::TalkThread()
    11631351{
     
    11801368    /*** FOR DEMO MODE ***/
    11811369
    1182     if (fZd1->IsZombieNode() || fZd2->IsZombieNode() || fAz->IsZombieNode())
    1183         return;
    1184 
    1185     if (!fMac1 || !fMac2)
    1186         return;
    1187 
    11881370    //
    11891371    // Start the Network
    11901372    //
    1191     /*
    1192      TEnv env(".cosyrc");
    1193 
    1194      cout << "Setting up software endswitch..." << flush;
    1195      fMac1->SetNegEndswitch(Deg2AzRE(env.GetValue("Az_Min[Deg]", -1.0)));
    1196      fMac1->SetPosEndswitch(Deg2AzRE(env.GetValue("Az_Max[Deg]", +1.0)));
    1197 
    1198      fMac2->SetNegEndswitch(Deg2ZdRE(env.GetValue("Zd_Min[Deg]", -1.0)));
    1199      fMac2->SetPosEndswitch(Deg2ZdRE(env.GetValue("Zd_Max[Deg]", +1.0)));
    1200      cout << "done." << endl;
    1201     */
    1202     SlaStars sla;
    12031373    while (1)
    12041374    {
     
    12061376        // wait until a tracking session is started
    12071377        //
    1208         while (!fTracking)
     1378        while (fBackground==kBgdNone)
    12091379            usleep(1);
    12101380
    1211 //---        ofstream fout("log/cosy.err");
    1212 //---        fout << "Tracking:";
    1213 //---        fout << " Ra: " << Rad2Deg(fRaDec.Ra())  << "\x9c  ";
    1214 //---        fout << "Dec: " << Rad2Deg(fRaDec.Dec()) << "\x9c" << endl << endl;
    1215 //---        fout << "     MjdZd/10ms    ErrZd/re";
    1216 //---        fout << "     MjdAz/10ms    ErrAd/re" << endl;
    1217 
    1218         ZdAz old;
    1219         ZdAz ist;
    1220 
    1221         ZdAz sollzd;
    1222         ZdAz sollaz;
    1223 
    1224         ZdAz istre = -fOffset;                // [re]
    1225         ZdAz time;
    1226 
    1227         //
    1228         // only update fTrackingError while tracking
    1229         //
    1230         bool phca1=false;
    1231         bool phca2=false;
    1232         bool phcaz=false;
    1233 
    1234         while (fTracking)
     1381        switch (fBackground)
    12351382        {
    1236             //
    1237             // Make changes (eg wind) smoother - attenuation of control function
    1238             //
    1239             const float weight = 1.; //0.3;
    1240 
    1241             //
    1242             // This is the time constant which defines how fast
    1243             // you correct for external influences (like wind)
    1244             //
    1245             fZd1->ResetPosHasChanged();
    1246             fZd2->ResetPosHasChanged();
    1247             fAz->ResetPosHasChanged();
    1248             do
    1249             {
    1250                 phca1 = fZd1->PosHasChanged();
    1251                 phca2 = fZd2->PosHasChanged();
    1252                 phcaz = fAz->PosHasChanged();
    1253                 usleep(1);
    1254             } while (!phca1 && !phca2 && !phcaz && fTracking);
    1255 
    1256             //---usleep(100000); // 0.1s
    1257 
    1258             //
    1259             // get position, where we are
    1260             //
    1261             old = ist;
    1262             ist = GetSePos(); // [se]
    1263 
    1264             //
    1265             // if the position didn't change continue
    1266             //
    1267             /*---
    1268             if ((int)ist.Zd() == (int)old.Zd() &&
    1269                 (int)ist.Az() == (int)old.Az())
    1270                 continue;
    1271             */
    1272             istre = GetRePosPdo();
    1273 
    1274             //
    1275             // Get time from last shaftencoder position change (position: ist)
    1276             // FIXME: I cannot take the avarage
    1277             //
    1278             if (fZd1->GetMjd()>fZd2->GetMjd())
    1279                 time.Zd(fZd1->GetMjd());
    1280             else
    1281                 time.Zd(fZd2->GetMjd());
    1282             //time.Zd((fZd1->GetMjd()+fZd2->GetMjd())/2.0);
    1283             time.Az(fAz->GetMjd());
    1284 
    1285             //
    1286             // if Shaftencoder changed position
    1287             // calculate were we should be
    1288             //
    1289             if (phca1 || phca2 /*(int)ist.Zd() != (int)old.Zd()*/)
    1290             {
    1291                 sla.SetMjd(time.Zd());
    1292 
    1293                 ZdAz dummy = fBending(sla.CalcZdAz(fRaDec));
    1294                 sollzd = CorrectTarget(ist, dummy); // [se]
    1295 
    1296                 fOffset.Zd(fOffset.Zd()*(1.-weight)+(ist.Zd()*kGearRatio.X()-istre.Zd())*weight);
    1297             }
    1298 
    1299             if (phcaz /*(int)ist.Az() != (int)old.Az()*/)
    1300             {
    1301                 sla.SetMjd(time.Az());
    1302 
    1303                 ZdAz dummy = fBending(sla.CalcZdAz(fRaDec));
    1304                 sollaz = CorrectTarget(ist, dummy); // [se]
    1305 
    1306                 fOffset.Az(fOffset.Az()*(1.-weight)+(ist.Az()*kGearRatio.Y()-istre.Az())*weight);
    1307             }
    1308 
    1309             ZdAz soll(sollzd.Zd(), sollaz.Az());
    1310             fZdAzSoll = fBending.CorrectBack(soll*2*TMath::Pi()/16384);
    1311 
    1312             fTrackingError.Set((ist.Zd()-sollzd.Zd())*kGearRatio.X(),
    1313                                (ist.Az()-sollaz.Az())*kGearRatio.Y());
    1314 
    1315 //---            fout << setprecision(15) << setw(17) << time.Zd()*60.*60.*24. << " ";
    1316 //---            fout << setprecision(5)  << setw(7)  << fTrackingError.Zd() << "  ";
    1317 //---            fout << setprecision(15) << setw(17) << time.Az()*60.*60.*24. << " ";
    1318 //---            fout << setprecision(5)  << setw(7)  << fTrackingError.Az() << endl;
     1383        case kBgdNone:
     1384            continue;
     1385
     1386        case kBgdTracking:
     1387            TalkThreadTracking();
     1388            continue;
     1389
     1390        case kBgdSeTest:
     1391            TalkThreadSeTest();
     1392            continue;
    13191393        }
    1320 
    1321 //---        fout << endl << endl;
    13221394    }
    13231395}
     
    13551427                 fVelocity, fOffset, fRaDec, fZdAzSoll, fStatus, avail);
    13561428
    1357 
    13581429    /*
    13591430     cout << (int)(fMac1->GetStatus()&Macs::kOutOfControl) << " ";
     
    13621433     */
    13631434
     1435    if (fBackground==kBgdSeTest || fHistTestSe==NULL)
     1436        return kTRUE;
     1437
     1438    DisplayHistTestSe();
     1439
    13641440    return kTRUE;
    13651441}
    13661442
     1443void MCosy::DisplayHistTestSe()
     1444{
     1445    TH2F &hist = *fHistTestSe;
     1446    fHistTestSe = NULL;
     1447
     1448    TCanvas *c=new TCanvas("c1", "", 1000, 1000);
     1449    c->Divide(1,2);
     1450
     1451    c->cd(1);
     1452    TH2 *h=(TH2*)hist.DrawCopy();
     1453
     1454    TProfile *p = h->ProfileX("_pfx", -1, 9999, "s");
     1455    p->SetLineColor(kBlue);
     1456    p->Draw("same");
     1457    p->SetBit(kCanDelete);
     1458
     1459    c->cd(2);
     1460
     1461    TH1F p2("spread", "Spread of the differences", hist.GetNbinsX(), hist.GetBinLowEdge(1),
     1462            hist.GetBinLowEdge(hist.GetNbinsX()+1));
     1463    p2.SetXTitle("ZA [\\circ]");
     1464    for (int i=0; i<hist.GetNbinsX(); i++)
     1465        p2.SetBinError(i, p->GetBinError(i));
     1466    p2.SetLineColor(kRed);
     1467    p2.SetStats(0);
     1468    p2.DrawCopy();
     1469
     1470    delete &hist;
     1471}
    13671472
    13681473// --------------------------------------------------------------------------
     
    14501555
    14511556    lout << "- Starting GUI." << endl;
    1452     fWin=new MGCosy(this, gClient->GetRoot(), 1, 1);
     1557    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    14531558}
    14541559
     
    14801585
    14811586    lout << "- Starting GUI." << endl;
    1482     fWin=new MGCosy(this, gClient->GetRoot(), 1, 1);
     1587    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    14831588}
    14841589
     
    14971602
    14981603    lout << "- Starting GUI." << endl;
    1499     fWin=new MGCosy(this, gClient->GetRoot(), 1, 1);
     1604    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    15001605}
    15011606
    15021607MCosy::MCosy(int mode, const char *dev, const int baud, MLog &out)
    1503 : Network(dev, baud, out), fZd1(0), fZd2(0), fAz(0), fMac1(0), fMac2(0), fMac3(0), fTracking(kFALSE)
     1608: Network(dev, baud, out), fObservatory(MObservatory::kMagic1), fZd1(0), fZd2(0), fAz(0), fMac1(0), fMac2(0), fMac3(0), fBackground(kBgdNone)
    15041609{
    15051610    TEnv env(".cosyrc");
  • trunk/MagicSoft/Cosy/main/MCosy.h

    r1757 r1758  
    77#include "MThread.h"
    88#include "MBending.h"
     9
     10#ifndef MARS_Mobservatory
     11#include "MObservatory.h"
     12#endif
    913
    1014#define kDEG ((char)0x9c)  // Linux 'ø'
     
    2226#define WM_CALCALTAZ    0x1009
    2327#define WM_HOME         0x100a
     28#define WM_TESTSE       0x100b
    2429
    2530
     
    2833class MGCosy;
    2934class MCosy;
     35class TH2F;
    3036
    3137class MTTalk : public MThread
     
    4652};
    4753
    48 
    4954class TTimer;
    5055class MCosy : public Network, public MsgQueue, public TObject
     
    6267    };
    6368
     69    const MObservatory::LocationName_t fObservatory;
     70
    6471    ShaftEncoder *fZd1;
    6572    ShaftEncoder *fZd2;
     
    7683                          // with a generic interface to both...
    7784
     85    enum BackgroundAction_t
     86    {
     87        kBgdNone,
     88        kBgdTracking,
     89        kBgdSeTest
     90    };
     91
     92    BackgroundAction_t fBackground;    // Flag for present backgroundthread
     93
    7894    ZdAz  fTrackingError; // Tracking Offset between SE and calc-pos [re]
    7995    ZdAz  fOffset;        // Offset between se and re coordinate system [re]
    8096    ZdAz  fZdAzSoll;      // Soll position when moving
    8197    RaDec fRaDec;         // Position to track
    82     int   fTracking;      // Flag for present tracking action
    8398    ZdAz  fAccuracy;      // Actual accuracy of Tracking
    8499    ZdAz  fVelocity;      // Actual velocity of Tracking
    85100    ZdAz  fMin;
    86101    ZdAz  fMax;
     102
     103    TH2F *fHistTestSe;
    87104
    88105    XY kGearRatio;        // describing the gear of the system [re/se]
     
    119136
    120137    void TalkThread();
     138    void TalkThreadTracking();
     139    void TalkThreadSeTest();
     140
     141    void DisplayHistTestSe();
    121142
    122143    int  SetPosition(const ZdAz &dst);
  • trunk/MagicSoft/Cosy/main/Makefile

    r1531 r1758  
    3333
    3434SRCFILES = MCosy.cc \
    35            MBending.cc \
    36            MStarguider.cc
     35           MBending.cc
    3736
    3837SRCS        = $(SRCFILES)
  • trunk/MagicSoft/Cosy/starg.cc

    r1691 r1758  
    1616    TApplication *app=new TApplication("Starguider", &argc, argv);
    1717
    18     MGStarguider starg;
     18    MGStarguider starg(MObservatory::kMagic1);
    1919
    2020    starg.Loop(0);
Note: See TracChangeset for help on using the changeset viewer.