Changeset 8833


Ignore:
Timestamp:
01/24/08 14:05:28 (17 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/Changelog

    r8832 r8833  
    7171   * videodev/VideodevLinkDef.h:
    7272     - removed Camkera from dictionary
     73
     74   * main/MCosy.[h,cc]:
     75     - replaced kDeg2Rad and kRad2Deg by TMath
     76     - replaced lout by gLog
     77     - made a few changes for the new coordinate classes
     78     - added cancel points to thread where possible
     79     - changed to new threading classes
     80     - thread doesn't run detached anymore
     81
    7382
    7483
  • trunk/MagicSoft/Cosy/main/MCosy.cc

    r8376 r8833  
    44#include <fstream>
    55
    6 #include <TROOT.h>
    76#include <TEnv.h>
    8 #include <TSystem.h>
     7#include <TTimer.h>
    98#include <TApplication.h>
    10 #include <TTimer.h>
    119
    1210#include <TH2.h>
     
    1412#include <TProfile.h>
    1513#include <TCanvas.h>
     14
     15#include "MLogManip.h"
    1616
    1717#include "MGCosy.h"
     
    2323#include "MTracking.h"
    2424
    25 #include "slalib/slalib.h"  // FIXME: REMOVE
    26 
    2725#include "macs.h"
    2826#include "shaftencoder.h"
     
    5654
    5755    ZdAz source = src * 360.0/16384.0;
    58     ZdAz dest   = dst * kRad2Deg;
     56    ZdAz dest   = dst * TMath::RadToDeg();
    5957
    6058    if (dest.Zd()>-3 && dest.Zd()<3)
     
    207205
    208206    MTime t(-1);
    209     lout << t << " - MCosy::WaitForEndMovement aborted...";
     207    gLog << t << " - MCosy::WaitForEndMovement aborted...";
    210208    if (Break())
    211         lout << " Break signal...";
     209        gLog << " Break signal...";
    212210    if (HasError())
    213         lout << " Network has error...";
     211        gLog << " Network has error...";
    214212    if (HasZombie())
    215         lout << " Network has zombie...";
    216     lout << endl;
     213        gLog << " Network has zombie...";
     214    gLog << endl;
    217215}
    218216
     
    272270    if (d.Zd()<fMin.Zd())
    273271    {
    274         lout << "ERROR: Requested Zenith Angle below negative endswitch." << endl;
     272        gLog << "ERROR: Requested Zenith Angle below negative endswitch." << endl;
    275273        return kFALSE;
    276274    }
     
    278276    if (d.Zd()>fMax.Zd())
    279277    {
    280         lout << "ERROR: Requested Zenith Angle behind positive endswitch." << endl;
     278        gLog << "ERROR: Requested Zenith Angle behind positive endswitch." << endl;
    281279        return kFALSE;
    282280    }
     
    284282    if (d.Az()<fMin.Az())
    285283    {
    286         lout << "ERROR: Requested Azimuth Angle below negative endswitch." << endl;
     284        gLog << "ERROR: Requested Azimuth Angle below negative endswitch." << endl;
    287285        return kFALSE;
    288286    }
     
    290288    if (d.Az()>fMax.Az())
    291289    {
    292         lout << "ERROR: Requested Azimuth Angle behind positive endswitch." << endl;
     290        gLog << "ERROR: Requested Azimuth Angle behind positive endswitch." << endl;
    293291        return kFALSE;
    294292    }
     
    303301    // AlignTrackingPos [deg]
    304302
    305     pointing *= kRad2Deg;
     303    pointing *= TMath::RadToDeg();
    306304
    307305    if (pointing.Zd()<0)
     
    309307        pointing.Zd(-pointing.Zd());
    310308        pointing.Az(pointing.Az()+180);
    311         //lout << "ZD=-ZD Az+=180" << endl;
     309        //gLog << "ZD=-ZD Az+=180" << endl;
    312310    }
    313311
    314312    const ZdAz se = GetSePos()*TMath::TwoPi()/kResSE;   // [rad]
    315     const ZdAz unbendedse = fBending.CorrectBack(se)*kRad2Deg; // ist pointing
    316 
    317     //lout << "Unbended: " << unbendedse.Zd() << " " << unbendedse.Az() << endl;
     313    const ZdAz unbendedse = fBending.CorrectBack(se)*TMath::RadToDeg(); // ist pointing
     314
     315    //gLog << "Unbended: " << unbendedse.Zd() << " " << unbendedse.Az() << endl;
    318316
    319317    do
     
    323321            break;
    324322
    325         //lout << "AZ += " << TMath::Sign(360., d) << endl;
     323        //gLog << "AZ += " << TMath::Sign(360., d) << endl;
    326324
    327325        pointing.Az(pointing.Az()+TMath::Sign(360., d));
    328326    } while (1);
    329327
    330     return pointing/kRad2Deg;
     328    return pointing/TMath::RadToDeg();
    331329/*
    332330    const Bool_t rc = CheckRange(pointing);
    333     za = pointing/kRad2Deg; // [rad]
     331    za = pointing/TMath::RadToDeg(); // [rad]
    334332
    335333    if (!rc)
    336         lout << "Error: Aligned position out of Range." << endl;
     334        gLog << "Error: Aligned position out of Range." << endl;
    337335
    338336    return rc;*/
     
    353351        return -1;
    354352
    355     ZdAz point=AlignTrackingPos(ZdAz(zd, az)/kRad2Deg);
     353    ZdAz point=AlignTrackingPos(ZdAz(zd, az)/TMath::RadToDeg());
    356354    /*
    357355    if (!AlignTrackingPos(ZdAz(zd, az), point))
     
    363361    // FIXME: Check Range missing!
    364362
    365     const ZdAz diff = (dest-point)*kRad2Deg;
     363    const ZdAz diff = (dest-point)*TMath::RadToDeg();
    366364
    367365    if (diff.Zd()>5 || diff.Az()>5)
     
    392390int MCosy::SetPosition(const ZdAz &dst, Bool_t track) // [rad]
    393391{
    394     MPointing point(this, lout);
     392    MSlewing point(this);
    395393
    396394//#ifdef EXPERT
     
    434432void MCosy::TrackPosition(const RaDec &dst) // ra, dec [rad]
    435433{
    436     MTracking track(this, lout);
     434    MTracking track(this);
    437435    track.SetOut(fOutRep);
    438436//#ifdef EXPERT
     
    459457void MCosy::TrackPositionGRB(const RaDec &dst) // ra, dec [rad]
    460458{
    461     MTracking track(this, lout);
     459    MTracking track(this);
    462460    track.SetOut(fOutRep);
    463461//#ifdef EXPERT
     
    563561}
    564562
    565 void *MCosy::Proc(int msg, void *mp)
     563Int_t MCosy::Proc(int msg, void *mp)
    566564{
    567565    switch (msg)
     
    569567    case WM_WAIT:
    570568        cout << "Wait for execution of Proc(WM_*, ): done." << endl;
    571         return NULL;
     569        return 0;
    572570
    573571    case WM_STOP:
    574572        //cout << "MCosy::Proc: Stop." << endl;
    575573        if (!CheckNetwork())
    576             return (void*)0xebb0;
     574            return 0xebb0;
    577575        StopMovement();
    578         return NULL;
     576        return 0;
    579577/*
    580578    case WM_PRESET:
     
    605603            cout << "Calibrating to: " << rd.Ra()*24/360 << "h " << rd.Dec() << "°" << endl;
    606604
    607             ZdAz za=sla.CalcZdAz(rd*kDeg2Rad)*16384.0/k2Pi;
     605            ZdAz za=sla.CalcZdAz(rd*TMath::DegToRad())*16384.0/k2Pi;
    608606
    609607            cout << "Calc Zd: " << za.Zd() << " Az: " << za.Az() << endl;
     
    629627            cout << "TPoint Star: " << rd.Ra()/15 << "h " << rd.Dec() << "°" << endl;
    630628
    631             AltAz za=sla.CalcAltAz(rd*kDeg2Rad)*kRad2Deg;
     629            AltAz za=sla.CalcAltAz(rd*TMath::DegToRad())*TMath::RadToDeg();
    632630
    633631            if (!fOutTp)
     
    653651            ZdAz sepos = GetSePos()*TMath::TwoPi()/kResSE;
    654652            za.Set(TMath::Pi()/2-sepos.Zd(), sepos.Az());
    655             za *= kRad2Deg;
     653            za *= TMath::RadToDeg();
    656654
    657655            cout << "     SE-Pos: " << za.Alt() << "° " << za.Az() << "°" << endl;
     
    668666            //cout << "WM_TPoint: done. (return 0xaffe)" << endl;
    669667        }
    670         return (void*)0xca1b;
     668        return 0xca1b;
    671669
    672670    case WM_TRACKPOS:
     
    674672        {
    675673            if (!CheckNetwork())
    676                 return (void*)0xebb0;
    677 
    678             ZdAz dest = *((ZdAz*)mp) * kDeg2Rad;
     674                return 0xebb0;
     675
     676            ZdAz dest = *((ZdAz*)mp) * TMath::DegToRad();
    679677            if (!SetPosition(dest, kTRUE))
    680                 return (void*)0x1234;
     678                return 0x1234;
    681679
    682680            SlaStars sla(fObservatory);
     
    687685        }
    688686        //cout << "WM_TrackPosition: done. (return 0xabcd)" << endl;
    689         return (void*)0xabcd;
     687        return 0xabcd;
    690688/*
    691689    case WM_ARM:
     
    716714        {
    717715            if (!CheckNetwork())
    718                 return (void*)0xebb0;
     716                return 0xebb0;
    719717
    720718            ZdAz dest = *((ZdAz*)mp);
    721             SetPosition(dest*kDeg2Rad);
     719            SetPosition(dest*TMath::DegToRad());
    722720        }
    723721        //cout << "WM_Position: done. (return 0x7777)" << endl;
    724         return (void*)0x7777;
     722        return 0x7777;
    725723
    726724    case WM_POSITION1:
     
    728726        {
    729727            if (!CheckNetwork())
    730                 return (void*)0xebb0;
     728                return 0xebb0;
    731729
    732730            ZdAz dest = *((ZdAz*)mp);
    733             SetPosition(dest*kDeg2Rad, kTRUE);
     731            SetPosition(dest*TMath::DegToRad(), kTRUE);
    734732        }
    735733        //cout << "WM_Position: done. (return 0x7777)" << endl;
    736         return (void*)0x7777;
     734        return 0x7777;
    737735
    738736    case WM_PREPS:
     
    740738        {
    741739            if (!CheckNetwork())
    742                 return (void*)0xebb0;
     740                return 0xebb0;
    743741
    744742            const char *preps = (const char*)mp;
     
    749747            {
    750748                cout << "ERROR: cannot open prepos.txt." << endl;
    751                 return (void*)0xebb1;
     749                return 0xebb1;
    752750            }
    753751
     
    767765                {
    768766                    ZdAz dest(zd, az);
    769                     SetPosition(dest*kDeg2Rad);
    770                     return (void*)0x7979;
     767                    SetPosition(dest*TMath::DegToRad());
     768                    return 0x7979;
    771769                }
    772770                cout << "ERROR - Requested preposition not found in file..." << endl;
     
    774772        }
    775773        //cout << "WM_Track: done. (return 0x8888)" << endl;
    776         return (void*)0x7878;
     774        return 0x7878;
    777775
    778776    case WM_TESTSE:
     
    780778        fBackground = mp ? kBgdSeTest : kBgdNone;
    781779        //cout << "WM_TestSe: done. (return 0x1e51)" << endl;
    782         return (void*)0x1e51;
     780        return 0x1e51;
    783781
    784782    case WM_GEAR:
     
    786784        fBackground = mp ? kBgdGear : kBgdNone;
    787785        //cout << "WM_Gear: done. (return 0xfeaf)" << endl;
    788         return (void*)0xfeaf;
     786        return 0xfeaf;
    789787
    790788    case WM_DISPLAY:
     
    792790        fTriggerDisplay = kTRUE;
    793791        //cout << "WM_Disply: done. (return 0xd1e1)" << endl;
    794         return (void*)0xd1e1;
     792        return 0xd1e1;
    795793
    796794    case WM_TRACK:
     
    802800                fStarguider->SetPointingPosition(((RaDec*)mp)[1]);
    803801            if (!CheckNetwork())
    804                 return (void*)0xebb0;
     802                return 0xebb0;
    805803
    806804            if (msg==WM_TRACK)
    807                 TrackPosition(dest*kDeg2Rad);
     805                TrackPosition(dest*TMath::DegToRad());
    808806            else
    809                 TrackPositionGRB(dest*kDeg2Rad);
     807                TrackPositionGRB(dest*TMath::DegToRad());
    810808        }
    811809        //cout << "WM_Track/GRB: done. (return 0x8888)" << endl;
    812         return (void*)0x8888;
     810        return 0x8888;
    813811
    814812    case WM_NEWTRACK:
     
    816814        fRaDec = *((RaDec*)mp);
    817815        //cout << "WM_NewTrack: done. (return 0x9999)" << endl;
    818         return (void*)0x9999;
     816        return 0x9999;
    819817
    820818    case WM_LOADBENDING:
     
    822820        fBending.Load("bending.txt");
    823821        //cout << "WM_LoadBending: done. (return 0xbe0d)" << endl;
    824         return (void*)0xbe0d;
     822        return 0xbe0d;
    825823
    826824    case WM_RESETBENDING:
     
    828826        fBending.Reset();
    829827        //cout << "WM_ResetBending: done. (return 0xbe0e)" << endl;
    830         return (void*)0xbe0e;
     828        return 0xbe0e;
    831829
    832830    case WM_HOME:
    833831        //cout << "WM_Home: START" << endl;
    834832        if (!CheckNetwork())
    835             return (void*)0xebb0;
     833            return 0xebb0;
    836834        else
    837835        {
     
    846844            fMac2->SetHome(250000, env.GetValue("Zd_MaxTime2ReachHome[s]", 100));
    847845
    848             lout << "SETHOME DONE" << endl;
     846            gLog << "SETHOME DONE" << endl;
    849847
    850848            SetStatus(HasError() ? MDriveCom::kError : MDriveCom::kStopped);
     
    860858        }
    861859        //cout << "WM_Home: done. (return 0x403e)" << endl;
    862         return (void*)0x403e;
     860        return 0x403e;
    863861
    864862    case WM_CALCALTAZ:
     
    872870            RaDec rd(xy.X()*15., xy.Y()); // [deg]
    873871
    874             ZdAz a1 = sla.CalcZdAz(rd*kDeg2Rad); // [rad]
     872            ZdAz a1 = sla.CalcZdAz(rd*TMath::DegToRad()); // [rad]
    875873
    876874            cout << "Ra/Dec source: " << xy.X()  << "h " << xy.Y()  << "°" << endl;
    877             cout << "Zd/Az target:  " << a1.Zd()*kRad2Deg << "° " << a1.Az()*kRad2Deg << "°" << endl;
     875            cout << "Zd/Az target:  " << a1.Zd()*TMath::RadToDeg() << "° " << a1.Az()*TMath::RadToDeg() << "°" << endl;
    878876
    879877            if (fZd1 && fZd2 && fAz)
     
    882880            a1 = fBending(a1);
    883881            CheckRange(a1);
    884             a1 *= kRad2Deg;
     882            a1 *= TMath::RadToDeg();
    885883
    886884            const ZdAz a2 = a1*kResSE/360;
     
    889887            cout << "SE bended:     " << a2.Zd() << "  " << a2.Az() << endl;
    890888        }
    891         return (void*)0xa17a;
     889        return 0xa17a;
    892890
    893891    case WM_ENDSWITCH:
    894892        {
    895893            ZdAz pos = GetSePos()*TMath::TwoPi()/kResSE;
    896             pos = fBending.SubtractOffsets(pos)*kRad2Deg;
     894            pos = fBending.SubtractOffsets(pos)*TMath::RadToDeg();
    897895
    898896            cout << "Endswitch Position:  Zd=" << pos.Zd() << "°  Az=";
     
    900898        }
    901899
    902         return (void*)0x1010;
     900        return 0x1010;
    903901
    904902    case WM_QUIT:
     
    906904        if (!CheckNetwork())
    907905        {
    908             lout << "ERROR: Cannot shutdown CANbus network." << endl;
    909             return (void*)0xebb0;
     906            gLog << "ERROR: Cannot shutdown CANbus network." << endl;
     907            return 0xebb0;
    910908        }
    911909        TerminateApp();
    912910        cout << "WM_Quit: done." << endl;
    913         return (void*)0xaaaa;
     911        return 0xaaaa;
    914912    }
    915913    cout << "MCosy::Proc: Unknown message 0x" << msg << endl;
    916     return (void*)0xffffffff;
    917 }
    918 
    919 void *MTTalk::Thread()
     914    return 0xffffffff;
     915}
     916
     917Int_t MTTalk::Thread()
    920918{
    921919    fCosy->TalkThread();
    922     return NULL;
     920    return 0;
    923921}
    924922
     
    942940    cout << " * Max:  " << zmax << "deg  " << amax << "deg" << endl;
    943941
    944     fMin = fBending.AddOffsets(fMin/kRad2Deg);
    945     fMax = fBending.AddOffsets(fMax/kRad2Deg);
    946 
    947     cout << " * Min': " << fMin.Zd()*kRad2Deg << "deg  " << fMin.Az()*kRad2Deg << "deg" << endl;
    948     cout << " * Max': " << fMax.Zd()*kRad2Deg << "deg  " << fMax.Az()*kRad2Deg << "deg" << endl;
     942    fMin = fBending.AddOffsets(fMin/TMath::RadToDeg());
     943    fMax = fBending.AddOffsets(fMax/TMath::RadToDeg());
     944
     945    cout << " * Min': " << fMin.Zd()*TMath::RadToDeg() << "deg  " << fMin.Az()*TMath::RadToDeg() << "deg" << endl;
     946    cout << " * Max': " << fMax.Zd()*TMath::RadToDeg() << "deg  " << fMax.Az()*TMath::RadToDeg() << "deg" << endl;
    949947
    950948    cout << "Reading gear ratios..." << flush;
    951     kGear.X(env.GetValue("Zd_GearRatio[U_mot/U_tel]", 1000.0));
    952     kGear.Y(env.GetValue("Az_GearRatio[U_mot/U_tel]", 1000.0));
    953 
     949//    kGear.X(env.GetValue("Zd_GearRatio[U_mot/U_tel]", 1000.0));
     950//    kGear.Y(env.GetValue("Az_GearRatio[U_mot/U_tel]", 1000.0));
     951    kGear.Set(env.GetValue("Zd_GearRatio[U_mot/U_tel]", 1000.0),
     952              env.GetValue("Az_GearRatio[U_mot/U_tel]", 1000.0));
     953
     954    Bool_t mac1 = fMac1 && !fMac1->IsZombieNode();
     955    Bool_t mac2 = fMac2 && !fMac2->IsZombieNode();
     956    Bool_t mac3 = fMac3 && !fMac3->IsZombieNode();
     957
     958    Bool_t zd1  = fZd1  && !fZd1->IsZombieNode();
     959    Bool_t zd2  = fZd2  && !fZd2->IsZombieNode();
     960    Bool_t az   = fAz   && !fAz->IsZombieNode();
     961
     962    Double_t x = 0;
     963    Double_t y = 0;
     964    y = mac1 ? fMac1->GetRes() : (mac3 ? fMac3->GetRes() : env.GetValue("Az_ResRE[re/U_mot]", 1500));
     965    x = mac2 ? fMac2->GetRes() : env.GetValue("Zd_ResRE[re/U_mot]", 1500);
     966    kResRE.Set(x,y);
     967
     968    x = zd1 ? fZd1->GetPhysRes() : (zd2 ? fZd2->GetPhysRes() : env.GetValue("Zd_ResSE[se/U_mot]", 16384));
     969    y = az  ? fAz->GetPhysRes() : env.GetValue("Az_ResSE[se/U_mot]", 16384);
     970    kResSE.Set(x,y);
     971
     972    /*
    954973    kResRE.Y(0);
    955974    if (fMac1 && !fMac1->IsZombieNode())
    956975        kResRE.Y(fMac1->GetRes());
    957976    else
     977        y = fMac3 && !fMac3->IsZombieNode() ? fMac3->GetRes() : env.GetValue("Az_ResRE[re/U_mot]", 1500);
    958978        if (fMac3 && !fMac3->IsZombieNode())
    959979            kResRE.Y(fMac3->GetRes());
     
    9811001    else
    9821002        kResSE.Y(env.GetValue("Az_ResSE[se/U_mot]", 16384));
     1003        */
    9831004
    9841005    // believing the Macs manual '*4' shouldn't be necessary, but it is.
     
    9861007    // Calculating speeds we have to convert back to qc
    9871008    kResRE  *= 4;
    988     kGearTot = kResRE*kGear;
     1009    kGearTot = Mul(kResRE, kGear);
     1010//    kGearTot = kResRE*kGear;
    9891011
    9901012    cout << "done." << endl;
     
    10001022    if (!fMac3)
    10011023    {
    1002         lout << "Unable to Init Sync! Mac3 not available." << endl;
     1024        gLog << "Unable to Init Sync! Mac3 not available." << endl;
    10031025        return;
    10041026    }
     
    10191041    if (fHist)
    10201042    {
    1021         lout << "You are much too fast... try again." << endl;
     1043        gLog << "You are much too fast... try again." << endl;
    10221044        return;
    10231045    }
     
    10321054    int cnt = 0;
    10331055
    1034     lout << "Starting Shaftencoder Test..." << endl;
     1056    gLog << "Starting Shaftencoder Test..." << endl;
    10351057
    10361058    while (fBackground==kBgdSeTest)
     
    10411063        while (!fZd1->PosHasChanged() && !fZd2->PosHasChanged() &&
    10421064               fBackground==kBgdSeTest)
     1065        {
    10431066            usleep(1);
     1067            TThread::CancelPoint();
     1068        }
    10441069
    10451070        const Double_t pos[3] = {
     
    10641089        Double_t apos = (pos[0]-pos[1])/2 * TMath::TwoPi() / kResSE.X();
    10651090
    1066         ZdAz bend = fBending.CorrectBack(ZdAz(apos, pos[2]))*kRad2Deg;
     1091        ZdAz bend = fBending.CorrectBack(ZdAz(apos, pos[2]))*TMath::RadToDeg();
    10671092        fHist->Fill(bend.Zd(), pos[0]+pos[1]-offset);
    10681093    }
    10691094
    1070     lout << "Shaftencoder Test Stopped... displaying Histogram." << endl;
     1095    gLog << "Shaftencoder Test Stopped... displaying Histogram." << endl;
    10711096
    10721097    fBackground=kBgdSeTestDispl;
     
    10801105    if (fHist)
    10811106    {
    1082         lout << "You are much too fast... try again." << endl;
     1107        gLog << "You are much too fast... try again." << endl;
    10831108        return;
    10841109    }
     
    10931118    fHist->SetZTitle("Re/Se");
    10941119
    1095     lout << "Starting Gear determination..." << endl;
     1120    gLog << "Starting Gear determination..." << endl;
    10961121
    10971122    ZdAz se0 = GetSePos();
     
    11061131        while (!fZd1->PosHasChanged() && !fZd2->PosHasChanged() &&
    11071132               !fAz->PosHasChanged() && fBackground==kBgdGear)
     1133        {
    11081134            usleep(1);
     1135            TThread::CancelPoint();
     1136        }
    11091137
    11101138        ZdAz se = GetSePos();
     
    11211149            se -= dse/2;
    11221150
    1123             ZdAz bend = fBending.CorrectBack(se*TMath::TwoPi()/kResSE)*kRad2Deg;
     1151            ZdAz bend = fBending.CorrectBack(se*TMath::TwoPi()/kResSE)*TMath::RadToDeg();
    11241152            ((TH3*)fHist)->Fill(bend.Zd(), bend.Az(), dre.Zd()/dse.Zd());
    11251153        }
     
    11321160            se -= dse/2;
    11331161
    1134             ZdAz bend = fBending.CorrectBack(se*TMath::TwoPi()/kResSE)*kRad2Deg;
     1162            ZdAz bend = fBending.CorrectBack(se*TMath::TwoPi()/kResSE)*TMath::RadToDeg();
    11351163            ((TH3*)fHist)->Fill(bend.Az(), bend.Az(), dre.Az()/dse.Az());
    11361164        }
    11371165    }
    1138     lout << "Gear Test Stopped... displaying Histogram." << endl;
     1166    gLog << "Gear Test Stopped... displaying Histogram." << endl;
    11391167
    11401168    fBackground=kBgdGearDispl;
     
    11701198        //
    11711199        while (fBackground==kBgdNone)
     1200        {
    11721201            usleep(1);
     1202            TThread::CancelPoint();
     1203        }
    11731204
    11741205        switch (fBackground)
     
    12131244    if (rc)
    12141245    {
    1215         lout << "* GUI update skipped due to locked mutex." << endl;
     1246        gLog << "* GUI update skipped due to locked mutex." << endl;
    12161247        return kTRUE;
    12171248    }
     
    12511282                 fRaDec, fZdAzSoll, fStatus, avail);
    12521283
    1253     lout.UpdateGui();
     1284    gLog.UpdateGui();
    12541285
    12551286    const Bool_t trigger = fTriggerDisplay;
     
    12701301void MCosy::DisplayHistTestSe(Bool_t del)
    12711302{
    1272     lout << "Displaying histogram..." << endl;
     1303    gLog << "Displaying histogram..." << endl;
    12731304
    12741305    TH2F &hist = *(TH2F*)fHist;
     
    13081339void MCosy::DisplayHistGear(Bool_t del)
    13091340{
    1310     lout << "Displaying histogram..." << endl;
     1341    gLog << "Displaying histogram..." << endl;
    13111342
    13121343    TH3F &hist = *(TH3F*)fHist;
     
    14021433    ReadConfig();
    14031434
    1404     lout << "- Starting TX Thread." << endl;
     1435    gLog << "- Starting TX Thread." << endl;
    14051436    fTTalk = new MTTalk(this);
    14061437
    1407     lout << "- Starting GUI update." << endl;
     1438    gLog << "- Starting GUI update." << endl;
    14081439    fUpdateGui->TurnOn();
    14091440}
     
    14191450void MCosy::Stop()
    14201451{
    1421     lout << "- Stopping GUI update." << endl;
     1452    gLog << inf << "- Stopping GUI update." << endl;
    14221453    fUpdateGui->TurnOff();
    1423     lout << "- GUI Update stopped." << endl;
    1424 
     1454    gLog << inf << "- GUI Update stopped." << endl;
     1455
     1456    gLog << inf << "- Stopping TX Thread." << endl;
    14251457    delete fTTalk;
    1426     lout << "- TX Thread stopped." << endl;
    1427 
     1458    gLog << inf << "- TX Thread stopped." << endl;
     1459
     1460    gLog << inf << "- Stopping CAN network." << endl;
    14281461    Network::Stop();
     1462    gLog << inf << "- CAN network stopped." << endl;
     1463
     1464    gLog << inf << "- Stopping message queue." << endl;
     1465    CancelThread();
     1466    gLog << inf << "- Message queue stopped." << endl;
    14291467}
    14301468
     
    14391477    // Create Nodes
    14401478    //
    1441     lout << "- Setting up network." << endl;
    1442 
    1443     fMac1=new Macs(id1, "Mac/Az", lout);
    1444     fMac2=new Macs(id3, "Mac/Zd", lout);
     1479    gLog << "- Setting up network." << endl;
     1480
     1481    fMac1=new Macs(id1, "Mac/Az", gLog);
     1482    fMac2=new Macs(id3, "Mac/Zd", gLog);
    14451483    if (id2>=0)
    1446         fMac3=new Macs(id2, "Mac/Az-Sync", lout);
    1447 
    1448     fZd1=new ShaftEncoder(id4, "SE/Zd1", lout);
    1449     fZd2=new ShaftEncoder(id5, "SE/Zd2", lout);
    1450     fAz =new ShaftEncoder(id6, "SE/Az",  lout);
     1484        fMac3=new Macs(id2, "Mac/Az-Sync", gLog);
     1485
     1486    fZd1=new ShaftEncoder(id4, "SE/Zd1", gLog);
     1487    fZd2=new ShaftEncoder(id5, "SE/Zd2", gLog);
     1488    fAz =new ShaftEncoder(id6, "SE/Az",  gLog);
    14511489
    14521490    fZd1->SetReport(fOutRep);
     
    14581496    fZd2->SetMotor(fMac2);
    14591497 
    1460     lout << "- Connecting devices to network." << endl;
     1498    gLog << "- Connecting devices to network." << endl;
    14611499
    14621500    //
     
    14741512    // Create Gui Event timer and Gui
    14751513    //
    1476     lout << "- Initializing GUI Timer." << endl;
     1514    gLog << "- Initializing GUI Timer." << endl;
    14771515    fUpdateGui = new TTimer(this, 100); // 100ms
    14781516
    1479     lout << "- Starting GUI." << endl;
     1517    gLog << "- Starting GUI." << endl;
    14801518    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    14811519}
     
    14861524    // Create Nodes
    14871525    //
    1488     lout << "- Setting up network." << endl;
    1489 
    1490     fZd1=new ShaftEncoder(id4, "SE/Zd1", lout);
    1491     fZd2=new ShaftEncoder(id5, "SE/Zd2", lout);
    1492     fAz =new ShaftEncoder(id6, "SE/Az",  lout);
    1493 
    1494     lout << "- Connecting devices to network." << endl;
     1526    gLog << "- Setting up network." << endl;
     1527
     1528    fZd1=new ShaftEncoder(id4, "SE/Zd1", gLog);
     1529    fZd2=new ShaftEncoder(id5, "SE/Zd2", gLog);
     1530    fAz =new ShaftEncoder(id6, "SE/Az",  gLog);
     1531
     1532    gLog << "- Connecting devices to network." << endl;
    14951533
    14961534    //
     
    15041542    // Create Gui Event timer and Gui
    15051543    //
    1506     lout << "- Initializing GUI Timer." << endl;
     1544    gLog << "- Initializing GUI Timer." << endl;
    15071545    fUpdateGui = new TTimer(this, 100); // 100ms
    15081546
    1509     lout << "- Starting GUI." << endl;
     1547    gLog << "- Starting GUI." << endl;
    15101548    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    15111549}
     
    15161554    // Create Nodes
    15171555    //
    1518     lout << "- Setting up network." << endl;
     1556    gLog << "- Setting up network." << endl;
    15191557
    15201558    //
    15211559    // Create Gui Event timer and Gui
    15221560    //
    1523     lout << "- Initializing GUI Timer." << endl;
     1561    gLog << "- Initializing GUI Timer." << endl;
    15241562    fUpdateGui = new TTimer(this, 100); // 100ms
    15251563
    1526     lout << "- Starting GUI." << endl;
     1564    gLog << "- Starting GUI." << endl;
    15271565    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
    15281566}
     
    15621600}
    15631601
    1564 MCosy::MCosy(/*int mode,*/ const char *dev, const int baud, MLog &out)
    1565 : Network(dev, baud, out), fObservatory(MObservatory::kMagic1), fStarguider(NULL), fZd1(0), fZd2(0), fAz(0), fMac1(0), fMac2(0), fMac3(0), fBackground(kBgdNone), fStatus(MDriveCom::kStopped), fOutTp(0), fOutRep(0)
     1602MCosy::MCosy()
     1603: Network(), fObservatory(MObservatory::kMagic1), fStarguider(NULL),
     1604fZd1(0), fZd2(0), fAz(0), fMac1(0), fMac2(0), fMac3(0),
     1605fBackground(kBgdNone), fTriggerDisplay(kFALSE), fStatus(MDriveCom::kStopped),
     1606fOutTp(0), fOutRep(0)
    15661607{
    15671608    TEnv env(".cosyrc");
     
    15821623
    15831624/*
    1584     lout << "- Program in ";
     1625    gLog << "- Program in ";
    15851626    switch (mode)
    15861627    {
    15871628    case 0:
    1588         lout << "<<Standard mode>>" << endl;*/
     1629        gLog << "<<Standard mode>>" << endl;*/
    15891630        fBending.Load("bending.txt");
    15901631        Constructor(id1, id2, id3, id4, id5, id6);/*
    15911632        break;
    15921633    case 1:
    1593         lout << "<<SE mode>>" << endl;
     1634        gLog << "<<SE mode>>" << endl;
    15941635        fBending.Load("bending.txt");
    15951636        ConstructorSE(id4, id5, id6);
    15961637        break;
    15971638    default:
    1598         lout << "<<Demo mode>>" << endl;
     1639        gLog << "<<Demo mode>>" << endl;
    15991640        ConstructorDemo();
    16001641    }
    16011642*/
    1602     lout.SetOutputGui(fWin->GetLog(), kTRUE);
     1643    gLog.SetOutputGui(fWin->GetLog(), kTRUE);
    16031644
    16041645    fZd1->SetDisplay(fWin->GetLabel2());
     
    16061647    fAz->SetDisplay(fWin->GetLabel1());
    16071648
    1608     fCom = new MDriveCom(this, *fOutRep);
    1609     fCom->Start();
     1649    fCom = new MDriveCom(this, fOutRep);
     1650//    fCom->Start();
    16101651}
    16111652
     
    16231664*/
    16241665
    1625     lout.DisableOutputDevice(MLog::eGui);
     1666    gLog.DisableOutputDevice(MLog::eGui);
    16261667    // FIXME: WHY DOES THIS CRASH THE APPLICATIOn WHILE TRAKING?
    1627     // lout.SetOutputGui(NULL, kFALSE);
     1668    // gLog.SetOutputGui(NULL, kFALSE);
    16281669
    16291670    gApplication->Terminate(0);
     
    16321673MCosy::~MCosy()
    16331674{
     1675    cout << "Deleting GUI timer." << endl;
     1676    // FIXME: Wait until last Update was finished!!!
     1677    delete fUpdateGui;
     1678
     1679    //fMutexGui.Lock();
     1680
     1681    // Now the files can safely be closed
     1682    cout << "Closing output files." << endl;
    16341683    if (fOutTp)
    16351684    {
     
    16391688    delete fOutRep;
    16401689
    1641     cout << "Deleting GUI timer." << endl;
    1642 
    1643     delete fUpdateGui;
     1690    cout << "Deleting CC communication." << endl;
    16441691    delete fCom;
    16451692
    16461693    cout << "Deleting Nodes." << endl;
    1647 
    16481694    fZd1->SetReport(0);
    16491695    fZd2->SetReport(0);
     
    16601706    cout << "Deleting MGCosy." << endl;
    16611707
    1662     lout.DisableOutputDevice(MLog::eGui);
     1708    gLog.DisableOutputDevice(MLog::eGui);
    16631709
    16641710    delete fWin;
  • trunk/MagicSoft/Cosy/main/MCosy.h

    r7788 r8833  
    22#define COSY_MCosy
    33
    4 #include "coord.h"
     4//#include "coord.h"
    55#include "msgqueue.h"
     6#include "MPointing.h"
     7
     8#ifndef MARS_MThread
     9#define COSY_MThread
    610#include "MThread.h"
    7 #include "MBending.h"
     11#endif
    812
    913#ifndef COSY_Network
     
    4953class MDriveCom;
    5054
    51 class MTTalk : public MThread
     55class MTTalk : public MyThreadX
    5256{
    5357private:
    5458    MCosy *fCosy;
    5559
    56     void *Thread();
     60    Int_t Thread();
    5761
    5862public:
    59     MTTalk(MCosy *cosy) : MThread(false), fCosy(cosy)
    60     {
    61         SetPriority(10);
    62         Detach();
    63         Start();
     63    MTTalk(MCosy *cosy) : MyThreadX("MTTalk"), fCosy(cosy)
     64    {
     65        //SetPriority(10);
     66        //Detach();
     67        RunThread();
    6468    }
    65     ~MTTalk() { std::cout << "~MTTalk::MTTalk" << std::endl; }
     69    ~MTTalk()
     70    {
     71        std::cout << "~MTTalk::CancelThread" << std::endl;
     72        CancelThread();
     73        std::cout << "~MTTalk::MTTalk" << std::endl;
     74    }
    6675};
    6776
     
    7079{
    7180    friend class MTTalk;
    72     friend class MPointing;
     81    friend class MSlewing;
    7382    friend class MTracking;
    7483
     
    125134    XY kGearTot; // describing the resolution of the system [re/U_tel]
    126135
    127     MBending fBending;
     136    MPointing fBending;
    128137
    129138    UInt_t fStatus;
     
    176185
    177186public:
    178     MCosy(/*int mode,*/ const char *dev, const int baud, MLog &out=gLog);
     187    MCosy();
    179188    ~MCosy();
    180189
     
    182191    void Stop();
    183192
    184     void *Proc(int msg, void *mp);
     193    Int_t Proc(int msg, void *mp);
    185194
    186195    Bool_t HandleTimer(TTimer *t);
Note: See TracChangeset for help on using the changeset viewer.