Ignore:
Timestamp:
07/14/06 13:19:54 (18 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/main/MStarguider.cc

    r7788 r7790  
    1313#include <TSystem.h>
    1414#include <TFile.h> // temp writeout of histos
     15#include <TSocket.h>
     16
    1517#include "MAstro.h"
    1618#include "MString.h"
     
    3133
    3234#include "MGStarg.h"
     35#include "MGNumStars.h"
    3336#include "TGFrame.h"
    3437
     
    9093    IDM_kPixSize,
    9194    IDM_kAngle,
     95    IDM_kCut,
    9296    IDM_kInterpol250,
    9397    IDM_kInterpol125,
     
    126130
    127131    fGStarg->Update(fPos, fD);   
     132    fGNumStars->Update(fNumStarsDetected, fNumStarsCorrelated);
    128133 
    129134    return kTRUE;
     
    237242    fLimMag->AddEntry("8", IDM_kLimMag8);
    238243    fLimMag->AddEntry("9", IDM_kLimMag9);
    239     fLimMag->CheckEntry(IDM_kLimMag8);
     244    fLimMag->CheckEntry(IDM_kLimMag9);
    240245    fLimMag->Associate(this);
    241246    fList->Add(fLimMag);
    242247
    243     fSao->SetLimitMag(7.0);
     248    fSao->SetLimitMag(9.0);
    244249
    245250    fInterpol = new MGPopupMenu(p);
     
    305310    fMenu->AddPopup("&WritePics",  fWritePictures,   NULL);
    306311    fMenu->AddPopup("&Setup",      fSetup,           NULL);
    307 
    308312    fMenu->AddPopup("&Operations", fOperations,      NULL);
    309313
     
    327331
    328332    fGStarg = new MGStarg(this, 235);
     333    fGStarg->DrawText("0.75'", "1.50'", "3.00'", "Misspointing [min]");
     334    fGStarg->DrawHexagon();
    329335    fGStarg->Move(530,596+5);
    330336    fList->Add(fGStarg);
     
    335341    fList->Add(fCRaDec);
    336342
    337     fCZdAz = new MGCoordinates(this, kETypeZdAz, kFALSE);
    338     fCZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+581+20-4);
     343    fCZdAz = new MGCoordinates(this, kETypeZdAz, 2);
     344    fCZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+597);
    339345    AddFrame(fCZdAz);
    340346    fList->Add(fCZdAz);
    341347
    342     fPZdAz = new MGCoordinates(this, kETypeZdAz, kFALSE);
    343     fPZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+627+2*20-4);
     348    fPZdAz = new MGCoordinates(this, kETypeZdAz, 2);
     349    fPZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+640);
    344350    AddFrame(fPZdAz);
    345351    fList->Add(fPZdAz);
    346352
    347     fDZdAz = new MGCoordinates(this, kETypeZdAz, kFALSE);
    348     fDZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+673+3*20-4);
     353    fDZdAz = new MGCoordinates(this, kETypeZdAz, 2);
     354    fDZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+683);
    349355    AddFrame(fDZdAz);
    350356    fList->Add(fDZdAz);
    351357
    352     fSZdAz = new MGCoordinates(this, kETypeZdAz, kFALSE);
    353     fSZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+719+4*20-4);
     358    fSZdAz = new MGCoordinates(this, kETypeZdAz, 2);
     359    fSZdAz->Move(240+12+28, fMenu->GetDefaultHeight()+795);
    354360    AddFrame(fSZdAz);
    355361    fList->Add(fSZdAz);
    356362
     363    fGNumStars = new MGNumStars(this, 235);
     364    fGNumStars->DrawText("Number of stars");
     365    fGNumStars->Move(278, fMenu->GetDefaultHeight()+713);
     366    fList->Add(fGNumStars);
     367
    357368    fTPoint = new TGTextButton(this, "TPoint");
    358     fTPoint->Move(4, fMenu->GetDefaultHeight()+722+3*15+15);
     369    fTPoint->Move(4, fMenu->GetDefaultHeight()+785);
    359370    fTPoint->AllowStayDown(kTRUE);
    360371    AddFrame(fTPoint);
     
    362373
    363374    fStargTPoint = new TGTextButton(this, "StargTPoint");
    364     fStargTPoint->Move(240+12+28, fMenu->GetDefaultHeight()+785);
     375    fStargTPoint->Move(170, fMenu->GetDefaultHeight()+785);
    365376    fStargTPoint->AllowStayDown(kTRUE);
    366377    AddFrame(fStargTPoint);
     
    369380    fFps = new TGLabel(this, "---fps");
    370381    fFps->SetTextJustify(kTextRight);
    371     fFps->Move(650-495, fMenu->GetDefaultHeight()+619+13+60+20+2);
     382    fFps->Move(650-495, fMenu->GetDefaultHeight()+714+23);
    372383    AddFrame(fFps);
    373384    fList->Add(fFps);
     
    385396    fList->Add(fSkyBright);
    386397
    387     TGLabel *l = new TGLabel(this, "arcsec/pix");
     398    TGLabel *l = new TGLabel(this, "deg");
    388399    l->SetTextJustify(kTextLeft);
    389     l->Move(606-412, fMenu->GetDefaultHeight()+619+13+60);
     400    l->Move(606-412, fMenu->GetDefaultHeight()+669);
    390401    AddFrame(l);
    391402    fList->Add(l);
    392403
    393     l = new TGLabel(this, "deg");
     404    l = new TGLabel(this, "arcsec/pix");
    394405    l->SetTextJustify(kTextLeft);
    395     l->Move(606-412, fMenu->GetDefaultHeight()+619-10+60);
     406    l->Move(606-412, fMenu->GetDefaultHeight()+692);
    396407    AddFrame(l);
    397408    fList->Add(l);
    398409
    399     l = new TGLabel(this, "Telescope pointing at");
     410    l = new TGLabel(this, "sigma");
     411    l->SetTextJustify(kTextLeft);
     412    l->Move(606-412, fMenu->GetDefaultHeight()+715);
     413    AddFrame(l);
     414    fList->Add(l);
     415
     416    l = new TGLabel(this, "Zd/Az telescope pointing at");
    400417    l->SetTextJustify(kTextLeft);
    401418    l->Move(240+12+20+7, fMenu->GetDefaultHeight()+584-5);
     
    403420    fList->Add(l);
    404421
    405     l = new TGLabel(this, "Starguider position");
     422    l = new TGLabel(this, "Zd/Az starguider pointing at");
    406423    l->SetTextJustify(kTextLeft);
    407     l->Move(240+12+20+7, fMenu->GetDefaultHeight()+630+20-5);
     424    l->Move(240+12+20+7, fMenu->GetDefaultHeight()+630+20-5-23);
    408425    AddFrame(l);
    409426    fList->Add(l);
    410427
    411     l = new TGLabel(this, "Misspointing");
     428    l = new TGLabel(this, "Zd/Az misspointing");
    412429    l->SetTextJustify(kTextLeft);
    413     l->Move(240+12+20+7, fMenu->GetDefaultHeight()+676+2*20-5);
     430    l->Move(240+12+20+7, fMenu->GetDefaultHeight()+676+2*20-5-46);
    414431    AddFrame(l);
    415432    fList->Add(l);
     
    422439    fList->Add(l);
    423440#endif
     441
     442    // Set input box for rotation angle
     443    const Double_t angle = -0.4;
     444    fSao->SetRotationAngle(angle);
    424445   
     446    TString txt;
     447    txt += angle;
     448
     449    fAngle = new TGTextEntry(this, txt, IDM_kAngle);
     450    fAngle->SetAlignment(kTextCenterX);
     451    fAngle->Move(547-410, fMenu->GetDefaultHeight()+667);
     452    AddFrame(fAngle);
     453    fList->Add(fAngle);
     454
     455    // Set input box for pixel size
    425456    const Double_t pixsize = 48.8; // used to be 23.4
    426457
     
    428459    fSao->SetRotationAngle(0);
    429460
    430     TString txt;
     461    txt = "";
    431462    txt += pixsize;
    432463
    433464    fPixSize = new TGTextEntry(this, txt, IDM_kPixSize);
    434465    fPixSize->SetAlignment(kTextCenterX);
    435     fPixSize->Move(547-410, fMenu->GetDefaultHeight()+617+13+60);
     466    fPixSize->Move(547-410, fMenu->GetDefaultHeight()+690);
    436467    AddFrame(fPixSize);
    437468    fList->Add(fPixSize);
    438469
    439     const Double_t angle = -0.4;
    440     fSao->SetRotationAngle(angle);
     470    // Set input box for cleaning cut
     471    const Double_t cut = 3.0;
    441472
    442473    txt = "";
    443     txt += angle;
    444 
    445     fAngle = new TGTextEntry(this, txt, IDM_kAngle);
    446     fAngle->SetAlignment(kTextCenterX);
    447     fAngle->Move(547-410, fMenu->GetDefaultHeight()+617-10+60);
    448     AddFrame(fAngle);
    449     fList->Add(fAngle);
     474    txt += cut;
     475
     476    fCut = new TGTextEntry(this, txt, IDM_kCut);
     477    fCut->SetAlignment(kTextCenterX);
     478    fCut->Move(547-410, fMenu->GetDefaultHeight()+713);
     479    AddFrame(fCut);
     480    fList->Add(fCut);
    450481
    451482    // TGHorizontal3DLine *fLineSep = new TGHorizontal3DLine(this);
     
    467498    fList->Add(fImage);
    468499
     500    const Int_t w = 768;
     501    const Int_t h = 840;
     502    SetWMSizeHints(w, h, w, h, 1, 1);  // set the smallest and biggest size of the Main frame
     503
    469504    //
    470505    // Make everything visible
     
    477512    fStargTPoint->UnmapWindow();
    478513    fGStarg->UnmapWindow();
     514    fGNumStars->UnmapWindow();
    479515    fPZdAz->UnmapWindow();
    480516    fDZdAz->UnmapWindow();
     
    503539      fStatus(MDriveCom::kStandby)
    504540{
    505    
    506541    cout << " #### FIXME: Make MCaos Thread safe!" << endl;
     542
     543    fAmcSocket = new TSocket("amc", 7307);
    507544
    508545    fSao = new StarCatalog(obs);
     
    573610        delete fOutRq;
    574611
     612    delete fAmcSocket;
     613
    575614    cout << "Camera Display destroyed." << endl;
     615}
     616
     617bool MStarguider::SendAmcTrigger(const char *msg)
     618{
     619    if (!fAmcSocket->IsValid())
     620        return false;
     621
     622    TString txt("TRIGGER ");
     623    txt += msg;
     624
     625    const Int_t len = fAmcSocket->SendRaw(txt.Data(), txt.Length());
     626    if (len<0)
     627    {
     628        cout << "ERROR - Sending Trigger to Amc" << endl;
     629        return false;
     630    }
     631    if (len!=txt.Length())
     632    {
     633        cout << "Send wrong number (" << len << ") of Bytes to Amc." << endl;
     634        return false;
     635    }
     636
     637    return true;
    576638}
    577639
     
    648710        fDisplay->CheckEntry(IDM_kCatalog);
    649711        fGStarg->MapWindow();
     712        fGNumStars->MapWindow();
    650713
    651714        const Int_t ch0 =
     
    682745        fSkyBright->UnmapWindow();
    683746        fGStarg->UnmapWindow();
     747        fGNumStars->UnmapWindow();
    684748
    685749        fChannel->EnableEntry(IDM_kChannel2);
     
    730794    fStargTPoint->UnmapWindow();
    731795    fGStarg->UnmapWindow();
     796    fGNumStars->UnmapWindow();
    732797    fPZdAz->UnmapWindow();
    733798    fDZdAz->UnmapWindow();
     
    757822                    cout << "Rotation Angle changed to " << angle << "deg" << endl;
    758823                    fSao->SetRotationAngle(angle);
     824                    return kTRUE;
     825                }
     826            case IDM_kCut:
     827                {
     828                    const Float_t cut = atof(fCut->GetText());
     829                    cout << "Starguider cleaning level changed to " << cut << " sigma." << endl;
    759830                    return kTRUE;
    760831                }
     
    12921363                                     ZdAz &d, MTime &t, double &bright, Int_t &num)
    12931364{
    1294     const Int_t max = leds.GetEntries();
     1365    num = leds.GetEntries();
     1366    if (num < 3) //was 1
     1367    {
     1368        cout << "Sorry, less than 3 detected spot in FOV!" << endl;
     1369        if (fStargTPoint->IsDown())
     1370            fStargTPoint->SetDown(kFALSE);
     1371        return 0;
     1372    }
     1373
    12951374    if (stars.GetRealEntries() < 3)
    12961375    {
     
    13001379        return 0;
    13011380    }
    1302     if (max < 3) //was 1
    1303     {
    1304         cout << "Sorry, less than 3 detected spot in FOV!" << endl;
    1305         if (fStargTPoint->IsDown())
    1306             fStargTPoint->SetDown(kFALSE);
    1307         return 0;
    1308     }
    13091381
    13101382    stars.Sort(); // Sort by magnitude
     
    13201392    TArrayF x, y, mag;
    13211393
    1322     num = 0;
    1323 
    13241394    // FIXME: Is predefined value 3 a good idea?
    13251395
    13261396    MStar *star;
    13271397    MStarListIter NextStar(&stars);
    1328     while ((star=NextStar()) && num++<max+3)
     1398    while ((star=NextStar()))
    13291399    {
    13301400        TIter NextSp(&leds);
     
    14411511    *fOutStargTp << " " << d.Zd() << " " << d.Az();
    14421512    *fOutStargTp << " " << setprecision(11) << t.GetMjd();
    1443     *fOutStargTp << " " << max;
     1513    *fOutStargTp << " " << num;
    14441514    *fOutStargTp << " " << bright;
    14451515    *fOutStargTp << endl;
     
    15361606#endif
    15371607
    1538     // Convert from Pixel to millimeter (1pix=2.9mm)
     1608    // MAKE SURE THAT THIS VALUE CAN BE SETUP
     1609    // (Scalefactor describes the difference between the tpoint (=1)
     1610    //  and the starguider (!=1) camera
     1611    // Convert from Pixel to millimeter (1pix=2.6mm)
    15391612    x *= (2.58427 * scalefactor);
    15401613    y *= (2.58427 * scalefactor);
     
    15441617    y /= 1.0713;
    15451618
    1546     // Calculate Offset
     1619    // Convert offset from camera plane into local ccordinates
    15471620    Double_t dzd, daz;
    15481621    ac.GetDiffZdAz(x, y, dzd, daz);
     
    17191792    // Find Star at Center---for Tpoint Procedure
    17201793    if (fDisplay->IsEntryChecked(IDM_kFindStar))
     1794    {
     1795        // SCALE FACTOR ASSUMED TO BE 70
    17211796        FindStar(f, f2, center, t, 3.5, 70);
     1797        SendAmcTrigger("TPoint");
     1798    }
    17221799
    17231800    byte zimg[kZOOM*kZOOM];
     
    17511828            pos = fCosy->GetPointingPos();
    17521829
    1753         sgcenter = fStargCaos->Run(img, kFALSE, kFALSE, pos, t, 30, 3.0); // [px]
     1830        sgcenter = fStargCaos->Run(img, kFALSE, kFALSE, pos, t, 19, 3.0); // [px]
    17541831
    17551832        //const Float_t pixsize = atof(fPixSize->GetText()); // [arcsec/px]
     
    17751852#endif
    17761853            fSZdAz->SetCoordinates(star); // Misspointing found from Camera
     1854
     1855            SendAmcTrigger("Starguider");
    17771856        }
    17781857    }
     
    18911970
    18921971        // Next we evaluate the offset given by the LEDs. This we obtain
    1893         // in Zd/Az and add it to the tracking error.
     1972        // in Zd/Az and add it to the tracking error.
    18941973        if (fDisplay->IsEntryChecked(IDM_kStarguider))
    18951974        {
     1975            const Float_t cut = atof(fCut->GetText());
     1976
    18961977            Leds spots;
    18971978            f.SetBox(230);
    1898             f.SetCut(2.5);
     1979            f.SetCut(cut);
    18991980
    19001981            double bright;
    19011982            f.ExecuteAndMark(spots, 530, 292, bright);
    19021983
    1903             MString txt;
    1904             txt.Print("Sky Brightness: %.1f", bright);
    1905             fSkyBright->SetText(txt);
    1906 
    1907             const Bool_t brightnessisvalid = bright<1.75*fLastBright &&
    1908                 bright>30 && bright<110;
    1909 
    1910             fLastBright = bright;
    1911 
    19121984            ULong_t color;
    1913             gClient->GetColorByName("Green", color);   
     1985            gClient->GetColorByName("Green", color);
    19141986            if (bright> 60)
    19151987                gClient->GetColorByName("Yellow", color);
     
    19201992            fSkyBright->SetBackgroundColor(color);
    19211993
     1994            MString txt;
     1995            txt.Print("Sky Brightness: %.1f", bright);
     1996            fSkyBright->SetText(txt);
     1997
     1998            const Bool_t brightnessisvalid = bright<1.75*fLastBright &&
     1999                bright>30 && bright<110;
     2000
     2001            fLastBright = bright;
     2002
    19222003            Int_t numstars = 0;
    19232004            const Int_t rc = CalcTrackingError(spots, stars, fD, t, bright, numstars);
     
    19342015                                       fSao->GetZdAz(), sgcenter, /*sgcenterzdaz,*/
    19352016                                       star, bright, fPos, t);
     2017
     2018            fNumStarsDetected   = numstars;
     2019            fNumStarsCorrelated = rc;
    19362020
    19372021            if (fCosy)
     
    19452029        } //kStarguider
    19462030
    1947         if (centerisvalid)
     2031        if (centerisvalid && fNumStarsCorrelated>2)
    19482032        {
    1949             f2.DrawCircle(skycenter, 2.0, 0x0a);
    1950 
    1951             f2.DrawCircle(skycenter, 7.4, 0x0a); //0.1deg
    1952 
    1953             f2.DrawCircle(skycenter, 2.06*.5*74.0, 0x0a);
    1954             f2.DrawCircle(skycenter, 2.32*.5*74.0, 0x0a);
    1955             f2.DrawCircle(skycenter, 3.50*.5*74.0, 0x0a);
    1956             f2.DrawCircle(skycenter, 3.84*.5*74.0, 0x0a);
     2033            f2.DrawCircle(skycenter,   2.0,     0x0a);
     2034
     2035            const Double_t ap = fSao->GetPixSize()/3600; //[deg/pix]
     2036
     2037            f2.DrawCircle(skycenter,  0.10/ap, 0x0a); //0.1deg
     2038            f2.DrawHexagon(skycenter, 2.06/ap, 0x0a);
     2039            f2.DrawHexagon(skycenter, 3.50/ap, 0x0a);
     2040
     2041            /*
     2042             f2.DrawCircle(skycenter, 2.06*.5*74.0, 0x0a);
     2043             f2.DrawCircle(skycenter, 2.32*.5*74.0, 0x0a);
     2044             f2.DrawCircle(skycenter, 3.50*.5*74.0, 0x0a);
     2045             f2.DrawCircle(skycenter, 3.84*.5*74.0, 0x0a);
     2046             */
    19572047        }
    19582048
Note: See TracChangeset for help on using the changeset viewer.