Ignore:
Timestamp:
05/15/04 16:46:27 (21 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy/gui
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/gui/MGAccuracy.cc

    r2518 r4076  
    1515#include <TList.h>
    1616#include <TGaxis.h>
     17#include <TGraph.h>
    1718#include <TCanvas.h>
    1819
    1920#include "coord.h"
     21#include "MTime.h"
    2022
    2123ClassImp(MGAccuracy);
     
    2830    TText text;
    2931    text.SetTextAlign(22);  // centered, centered (s.TAttText)
    30     text.DrawText(-80*2, 132.5*2, "Tracking Error [']");
     32    text.DrawText(-80*2, 132.5*2, "Ctrl Deviation [min]");
    3133
    3234
     
    7577    axe->SetBit(kCanDelete);
    7678    axe->Draw();
    77 
    78     //
    79     // FIXME? Use TAxis?
    80     //
    81 /*
    82     TLine line;
    83     line.SetLineColor(13);
    84     line.SetLineStyle(3);  // dotted  (s. TAttLine)
    85     line.DrawLine(-30, -65, -30,  65);
    86     line.DrawLine(-65, -30,  65, -30);
    87     line.DrawLine( 30, -65,  30,  65);
    88     line.DrawLine(-65,  30,  65,  30);
    89 
    90     line.DrawLine(-15, -65, -15,  65);
    91     line.DrawLine(-65, -15,  65, -15);
    92     line.DrawLine( 15, -65,  15,  65);
    93     line.DrawLine(-65,  15,  65,  15);
    94 
    95     line.DrawLine(-45, -65, -45,  65);
    96     line.DrawLine(-65, -45,  65, -45);
    97     line.DrawLine( 45, -65,  45,  65);
    98     line.DrawLine(-65,  45,  65,  45);
    99 
    100     line.SetLineColor(12);
    101     line.SetLineStyle(2);  // dashed  (s. TAttLine)
    102     line.DrawLine(-60, -65, -60,  65);
    103     line.DrawLine(-65, -60,  65, -60);
    104     line.DrawLine( 60, -65,  60,  65);
    105     line.DrawLine(-65,  60,  65,  60);
    106 
    107     line.SetLineColor(1);  // black
    108     line.SetLineStyle(1);  // solid  (s. TAttLine)
    109     line.DrawLine(-65,   0, 65,  0);
    110     line.DrawLine(  0, -65,  0, 65);
    111 
    112     line.DrawLine(-1,  60, 1,  60);
    113     line.DrawLine(-1, -60, 1, -60);
    114     line.DrawLine(-1,  30, 1,  30);
    115     line.DrawLine(-1, -30, 1, -30);
    116 
    117     line.DrawLine( 60, -1,  60, 1);
    118     line.DrawLine(-60, -1, -60, 1);
    119     line.DrawLine( 30, -1,  30, 1);
    120     line.DrawLine(-30, -1, -30, 1);
    121 
    122     TText text;
    123     text.SetTextAlign(22);  // centered, centered (s.TAttText)
    124     text.DrawText(60, 5, "dAz[\xb0]");
    125     text.DrawText(0, 70, "dZd[\xb0]");
    126 
    127     text.SetTextAlign(23);  // centered, centered (s.TAttText)
    128     text.DrawText(-60, -2, "-1'");
    129     text.DrawText( 60, -2, "1'");
    130     text.DrawText(-30, -2, "-30\"");
    131     text.DrawText( 30, -2, "30\"");
    132 
    133     text.SetTextAlign(32);  // centered, centered (s.TAttText)
    134     text.DrawText(-2, -60, "-1'");
    135     text.DrawText(-2,  60, "1'");
    136     text.DrawText(-2, -30, "-30\"");
    137     text.DrawText(-2,  30, "30\"");
    138     */
    13979}
    14080
     
    183123: MGEmbeddedCanvas("Accuracy", p, w, 300)
    184124{
     125    // FIXME: Overload MapWindow in newer Root versions to remove
     126    //        the contents of the graph!
     127    fGraph = new TGraph;
     128    fGraph->SetPoint(0, 0, 0);
     129    fGraph->SetLineColor(kBlue);
     130    fGraph->SetMarkerColor(kBlue);
     131    fGraph->SetMarkerStyle(kFullDotMedium);
     132    fGraph->Draw("LP");
     133    fList->Add(fGraph);
     134    //fGraph->SetNameTitle("AccVsT", "Accuracy vs Min of Time");
     135    //fGraph->Draw("APL");
     136    //fGraph->SetMarkerSize(2);
     137
    185138    DrawCoordinateSystem();
    186139
     
    192145
    193146    SetNoContextMenu();
     147
     148    MTime t(-1);
     149    fTime = t.GetAxisTime();
    194150}
    195151
     
    199155}
    200156
    201 void MGAccuracy::UpdateText(Float_t pzd, Float_t azd, Float_t aaz)
    202 {
    203     const Float_t d2r = TMath::Pi()/180.;
    204 
    205     pzd *= d2r;
    206     azd *= d2r;
    207     aaz *= d2r;
    208 
    209     const double el = TMath::Pi()/2-pzd;
    210 
    211     const double dphi2 = aaz/2.;
    212     const double cos2  = cos(dphi2)*cos(dphi2);
    213     const double sin2  = sin(dphi2)*sin(dphi2);
    214     const double d     = cos(azd)*cos2 - cos(2*el)*sin2;
    215 
    216     //
    217     // Original:
    218     //   cos(Zd1)*cos(Zd2)+sin(Zd1)*sin(Zd2)*cos(dAz)
    219     //
    220     // Correct:
    221     //   const double d = cos(azd)*cos2 - cos(el1+el2)*sin2;
    222     //
    223     // Estimated:
    224     //   const double d = cos(azd)*cos2 - cos(2*el)*sin2;
    225     //
    226 
    227     double dist = acos(d);
    228 
    229     dist *= 3600./d2r; // [min]
     157// dist [deg]
     158void MGAccuracy::UpdateText(Float_t dist)
     159{
     160    dist *= 3600.; // [sec]
    230161
    231162    int rs = (int)floor(fmod(dist, 60.));
    232163
    233     dist /= 60.;
    234     int rm = (int)dist;//floor(fmod(dist, 60.));
     164    dist /= 60.;   // [min]
     165    int rm = (int)dist;
    235166
    236167    char txt[100];
     
    239170    fTxt->SetText(fTxt->GetX(), fTxt->GetY(), txt);
    240171
    241     fBar->SetX2(dist*60);
     172    fBar->SetY2(dist*60); // [sec]
    242173    if (dist*16384<1*360*60)
    243174        fBar->SetLineColor(kGreen);
     
    247178        else
    248179            fBar->SetLineColor(kRed);
     180
     181    SetModified();
     182}
     183
     184// dist [deg]
     185void MGAccuracy::UpdateGraph(Float_t dist)
     186{
     187    MTime t(-1);
     188    const Double_t dtime = t.GetAxisTime()-fTime; // range [-0.5h, 0h]
     189
     190    dist *= 60; // min
     191
     192    static int odist = -1;
     193    if (odist==(int)(dist*10*60) && dtime<10)
     194        return;
     195
     196    odist = (int)(dist*10*60);
     197
     198    fGraph->SetPoint(fGraph->GetN(), dtime, dist*60);
     199
     200    const Double_t ntime = dtime;
     201    for (int i=0; i<fGraph->GetN(); i++)
     202    {
     203        Double_t x, y;
     204        fGraph->GetPoint(i, x,       y);
     205        fGraph->SetPoint(i, x-ntime, y);
     206        //cout << i << ":  " << x-ntime << " / " << y << endl;
     207    }
     208    while (fGraph->GetN()>0)
     209    {
     210        Double_t x, y;
     211        fGraph->GetPoint(0, x, y);
     212
     213        if (x==-ntime && y==0)
     214        {
     215            fGraph->RemovePoint(0);
     216            continue;
     217        }
     218
     219        if (x>-4.75*60)
     220            break;
     221
     222        fGraph->RemovePoint(0);
     223    }
     224
     225    fTime = t.GetAxisTime();
     226
     227    SetModified();
     228
     229    //cout << "N1 == " << fGraph->GetN() << endl;
     230
     231    //fGraph->GetHistogram()->SetXTitle("Time");
     232    //fGraph->GetHistogram()->SetYTitle("\\Delta [arcmin]");
     233    //fGraph->GetHistogram()->GetXaxis()->SetTimeFormat("%M %F1995-01-01 00:00:00");
     234    //fGraph->GetHistogram()->GetXaxis()->SetTimeDisplay(1);
     235    //fGraph->GetHistogram()->GetXaxis()->SetLabelSize(0.033);
     236}
     237
     238void MGAccuracy::Update(Float_t pzd, Float_t azd, Float_t aaz)
     239{
     240    const Float_t d2r = TMath::Pi()/180.;
     241
     242    pzd *= d2r;
     243    azd *= d2r;
     244    aaz *= d2r;
     245
     246    const double el = TMath::Pi()/2-pzd;
     247
     248    const double dphi2 = aaz/2.;
     249    const double cos2  = cos(dphi2)*cos(dphi2);
     250    const double sin2  = sin(dphi2)*sin(dphi2);
     251    const double d     = cos(azd)*cos2 - cos(2*el)*sin2;
     252
     253    //
     254    // Original:
     255    //   cos(Zd1)*cos(Zd2)+sin(Zd1)*sin(Zd2)*cos(dAz)
     256    //
     257    // Correct:
     258    //   const double d = cos(azd)*cos2 - cos(el1+el2)*sin2;
     259    //
     260    // Estimated:
     261    //   const double d = cos(azd)*cos2 - cos(2*el)*sin2;
     262    //
     263
     264    double dist = acos(d)*TMath::RadToDeg();
     265
     266    UpdateText(dist);
     267    UpdateGraph(dist);
    249268}
    250269
    251270void MGAccuracy::UpdateCross(Float_t x, Float_t y)
    252271{
     272    //
     273    // calculate actual time for planet positions
     274    // acc [deg]
     275    //
     276    // x["], y["]
     277    //
     278    static int X = ~0;
     279    static int Y = ~0;
     280
     281    int pixx = (int)(x/fPix);  // [pix]
     282    int pixy = (int)(y/fPix);  // [pix]
     283
     284    if (X==pixx && Y==pixy)
     285        return;
     286
     287    X = pixx;
     288    Y = pixy;
     289
    253290    fLin1->SetX1(x-5.);
    254291    fLin1->SetX2(x+5.);
     
    262299    fLin2->SetY1(y+5.);
    263300    fLin2->SetY2(y-5.);
     301
     302    SetModified();
    264303}
    265304
    266305void MGAccuracy::Update(ZdAz &pos, ZdAz &acc)
    267306{
    268     //
    269     // calculate actual time for planet positions
    270     // acc [deg]
    271     //
    272     static int X = ~0;
    273     static int Y = ~0;
    274 
    275     float x = acc.Az()*3600.; // ["]
    276     float y = acc.Zd()*3600.; // ["]
    277 
    278     int pixx = (int)(x/fPix);  // [pix]
    279     int pixy = (int)(y/fPix);  // [pix]
    280 
    281     if (X==pixx && Y==pixy)
    282         return;
    283 
    284     X = pixx;
    285     Y = pixy;
    286 
    287     UpdateCross(x, y);
    288     UpdateText(pos.Zd(), acc.Zd(), acc.Az());
    289 
    290     SetModified();
     307    UpdateCross(acc.Az()*3600., acc.Zd()*3600.);
     308    Update(pos.Zd(), acc.Zd(), acc.Az());
     309
    291310    UpdateCanvas();
    292311}
  • trunk/MagicSoft/Cosy/gui/MGAccuracy.h

    r2518 r4076  
    88//   Version: V1.0 (1-8-2000)
    99
    10 #ifndef MGEMBEDDEDCANVAS_H
     10#ifndef COSY_MGEmbeddedCanvas
    1111#include "MGEmbeddedCanvas.h"
    1212#endif
    1313
     14class TGraph;
    1415class TLine;
    1516class TText;
     
    2627    TLine  *fBar;
    2728
     29    TGraph *fGraph;
     30
     31    Double_t fTime;
     32
    2833    void DrawCoordinateSystem();
    2934
     
    3237    void InitBar();
    3338
    34     void UpdateText(Float_t zd, Float_t x, Float_t y);
    3539    void UpdateCross(Float_t x, Float_t y);
     40    void UpdateText(Float_t acc);
     41    void UpdateGraph(Float_t acc);
     42    void Update(Float_t zd, Float_t x, Float_t y);
    3643
    3744public:
  • trunk/MagicSoft/Cosy/gui/MGEmbeddedCanvas.h

    r2278 r4076  
    1 #ifndef MGEMBEDDEDCANVAS_H
    2 #define MGEMBEDDEDCANVAS_H
     1#ifndef COSY_MGEmbeddedCanvas
     2#define COSY_MGEmbeddedCanvas
    33
    44//
  • trunk/MagicSoft/Cosy/gui/MGImage.cc

    r2613 r4076  
    77// x11/src/GX11Gui.cxx
    88//
     9
     10//////////////////////////////////////////////////////////////////////////////
     11//
     12// MGImage
     13//
     14// If sync-mode is enabled the Redraw function is secured by a mutex (ignore
     15// error messages about it comming from root) This has the advantage that
     16// if you use a timer for screen update reading and writing the image is
     17// synchronized. In this way you don't get flickering half images.
     18//
     19//////////////////////////////////////////////////////////////////////////////
    920#include "MGImage.h"
    1021
     
    1728
    1829using namespace std;
    19 /*
    20 class MyX11 : public TGX11
    21 {
    22 public:
    23     Display *GetDisplay() { return fDisplay; }
    24     Drawable GetRootWin() { return fRootWin; }
    25     Drawable GetVisRootWin() { return fVisRootWin; }
    26     Int_t    GetDepth() { return fDepth; }
    27 };
    28 */
    2930
    3031MGImage::MGImage(const TGWindow* p, UInt_t w, UInt_t h, UInt_t options, ULong_t back)
     
    4041    fMuxPixmap = new TMutex;
    4142
    42     Resize(w, h);
     43    Resize(GetWidth(), GetHeight());
    4344
    4445    //
    4546    // create empty pixmap
    4647    //
    47     fPixmap = gVirtualX->CreatePixmap(fId, fWidth, fHeight);
    4848    fDefGC  = gVirtualX->CreateGC(fId, 0);
    4949    fImage  = (XImage*)gVirtualX->CreateImage(fWidth, fHeight);
     
    5454MGImage::~MGImage()
    5555{
    56     fMuxPixmap->Lock();
     56    if (fMuxPixmap->Lock()==13)
     57        cout << "MGImage::~MGImage - mutex is already locked by this thread" << endl;
    5758
    5859    cout << "Deleting MGImage..." << endl;
    5960
    60     gVirtualX->DeletePixmap(fPixmap);
    6161    gVirtualX->DeleteGC(fDefGC);
    6262    gVirtualX->DeleteImage((Drawable_t)fImage);
     
    6969void MGImage::DoRedraw()
    7070{
    71     fMuxPixmap->Lock();
    72 
    73     if (TestBit(kNeedRedraw))
    74     {
    75         gVirtualX->PutImage(fId, fDefGC, (Drawable_t)fImage, 0, 0, 0, 0, fWidth, fHeight);
     71    if (TestBit(kSyncMode))
     72        while (fMuxPixmap->Lock()==13)
     73            usleep(1);
     74
     75    //    gVirtualX->DrawLine(fId, fDefGC, 0, 0, fWidth+2, 0);
     76    //    gVirtualX->DrawLine(fId, fDefGC, 0, 0, 0, fHeight+2);
     77    //    gVirtualX->DrawLine(fId, fDefGC, fWidth+2, 0,  fWidth+2, fHeight+2);
     78    //    gVirtualX->DrawLine(fId, fDefGC, 0, fHeight+2, fWidth+2, fHeight+2);
     79
     80    //    if (TestBit(kNeedRedraw))
     81    {
     82        gVirtualX->PutImage(fId, fDefGC, (Drawable_t)fImage, 0, 0, 0, 0,
     83                            fWidth, fHeight);
    7684        ResetBit(kNeedRedraw);
    7785    }
    7886
    79     fMuxPixmap->UnLock();
     87    if (TestBit(kSyncMode))
     88        if (fMuxPixmap->UnLock()==13)
     89            cout << "MGImage::DoRedraw - tried to unlock mutex locked by other thread." << endl;
    8090}
    8191
     
    109119void MGImage::DrawImg(const byte *buffer)
    110120{
    111     if (fMuxPixmap->TryLock())
    112         return;
     121    if (TestBit(kSyncMode))
     122        while (fMuxPixmap->Lock()==13)
     123            usleep(1);
     124    else
     125    {
     126        const Int_t rc = fMuxPixmap->Lock();
     127        if (rc==13)
     128            cout << "MGImage::DrawImg - mutex is already locked by this thread" << endl;
     129        if (rc)
     130            return;
     131    }
    113132
    114133    switch (gVirtualX->GetDepth())
     
    129148    SetBit(kNeedRedraw);
    130149
    131     fMuxPixmap->UnLock();
     150    if (fMuxPixmap->UnLock()==13)
     151        cout << "MGImage::DrawImage - tried to unlock mutex locked by other thread." << endl;
    132152}
    133153
     
    143163        {   
    144164            //      00000011   00001100        00110000
    145             *d++ = (*s2&0x3) | (*s2&0xb)<<3 | (*s2&0x30)<<7;
    146             s1++;
     165            //*d++ = (*s2&0x3) | (*s2&0xb)<<3 | (*s2&0x30)<<7;
     166            *d++ = (*s2&0x3)<<3 | (*s2&0xb)<<6 | (*s2&0x30)<<10;
    147167        }
    148168        else
     
    150170            //      11111100     11111000        11111100
    151171            *d++ = (*s1&0xfc) | (*s1&0xf8)<<5 | (*s1&0xfc)<<11;
    152             s2++;
    153         }
     172        }
     173        s1++;
     174        s2++;
    154175    }
    155176}
     
    181202void MGImage::DrawColImg(const byte *gbuf, const byte *cbuf)
    182203{
    183     if (fMuxPixmap->TryLock())
    184         return;
     204    if (TestBit(kSyncMode))
     205        while (fMuxPixmap->Lock()==13)
     206            usleep(1);
     207    else
     208    {
     209        const Int_t rc = fMuxPixmap->Lock();
     210        if (rc==13)
     211            cout << "MGImage::DrawColImg - mutex is already locked by this thread" << endl;
     212        if (rc)
     213            return;
     214    }
    185215
    186216    // FROM libAfterImage:
     
    190220    //#define ALPHA_SOLID               0xFF
    191221    // * Lowermost 8 bits - Blue channel
    192     // * bits 8 to 15     - Green channel
     222    // * bits  8 to 15    - Green channel
    193223    // * bits 16 to 23    - Red channel
    194224    // * bits 24 to 31    - Alpha channel
     
    211241    SetBit(kNeedRedraw);
    212242
    213     fMuxPixmap->UnLock();
    214 }
     243    if (fMuxPixmap->UnLock()==13)
     244        cout << "MGImage::DrawColImage - tried to unlock mutex locked by other thread." << endl;
     245}
  • trunk/MagicSoft/Cosy/gui/MGImage.h

    r2518 r4076  
    2424
    2525    GContext_t fDefGC;
    26     Pixmap_t   fPixmap;
     26    //Pixmap_t   fPixmap;
    2727
    2828    UInt_t fWidth;
     
    3131    TMutex *fMuxPixmap; //! test
    3232
    33     enum { kNeedRedraw = BIT(17) };
     33    enum
     34    {
     35        kNeedRedraw = BIT(17),
     36        kSyncMode   = BIT(18)
     37    };
    3438
    3539    void DrawImg16(unsigned short *d, char *s, char *e);
     
    4751    void DrawColImg(const byte *gbuf, const byte *cbuf);
    4852
     53    void EnableSyncMode()  { SetBit(kSyncMode); }
     54    void DisableSyncMode() { ResetBit(kSyncMode); }
     55
    4956    ClassDef(MGImage, 0)
    5057};
  • trunk/MagicSoft/Cosy/gui/MGPngReader.cc

    r2615 r4076  
    347347    const Double_t pixsize = 23.4;
    348348
    349     fSao->SetPixSize(pixsize/3600);
     349    fSao->SetPixSize(pixsize);
    350350
    351351    TString txt;
     
    586586            const Float_t pixsize = atof(fPixSize->GetText());
    587587            cout << "Pixel Size changed to " << pixsize << "\"/pix" << endl;
    588             fSao->SetPixSize(pixsize/3600);
     588            fSao->SetPixSize(pixsize);
    589589        }
    590590        return kTRUE;
  • trunk/MagicSoft/Cosy/gui/MGSkyPosition.h

    r2278 r4076  
    99
    1010
    11 #ifndef MGEMBEDDEDCANVAS_H
     11#ifndef COSY_MGEmbeddedCanvas
    1212#include "MGEmbeddedCanvas.h"
    1313#endif
  • trunk/MagicSoft/Cosy/gui/MGTPoint.cc

    r2615 r4076  
    151151    const Double_t pixsize = 23.4;
    152152
    153     fSao->SetPixSize(pixsize/3600);
     153    fSao->SetPixSize(pixsize);
    154154
    155155    TString txt;
     
    225225            const Float_t pixsize = atof(fPixSize->GetText());
    226226            cout << "Pixel Size changed to " << pixsize << "\"/pix" << endl;
    227             fSao->SetPixSize(pixsize/3600);
     227            fSao->SetPixSize(pixsize);
    228228        }
    229229        return kTRUE;
  • trunk/MagicSoft/Cosy/gui/MGVelocity.cc

    r2278 r4076  
    181181    // calculate actual time for planet positions
    182182    //
    183     float vx = zdaz.Az()*3600.; // ["/min]
    184     float vy = zdaz.Zd()*3600.; // ["/min]
     183    float vx = zdaz.Az(); // [U_mot/min]
     184    float vy = zdaz.Zd(); // [U_mot/min]
    185185
    186186    int pixx = (int)(vx*fScale/fPix);
  • trunk/MagicSoft/Cosy/gui/MGVelocity.h

    r2278 r4076  
    88//   Version: V1.0 (1-8-2000)
    99
    10 #ifndef MGEMBEDDEDCANVAS_H
     10#ifndef COSY_MGEmbeddedCanvas
    1111#include "MGEmbeddedCanvas.h"
    1212#endif
Note: See TracChangeset for help on using the changeset viewer.