Ignore:
Timestamp:
05/24/12 15:20:34 (12 years ago)
Author:
tbretz
Message:
Added TNG dust measurement
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/smartfact.cc

    r13850 r13872  
    334334    deque<float> fMagicWeatherHist[kWeatherEnd];
    335335
     336    deque<float> fTngWeatherDustHist;
     337    Time  fTngWeatherDustTime;
     338
    336339    vector<float> fFeedbackCalibration;
    337340
     
    361364    deque<float> fFtmControlTriggerRateHist;
    362365
    363     vector<float> fFtmPatchThresholds;
     366    float fFtmPatchThresholdMed;
    364367
    365368    bool fFtmControlFtuOk;
     
    368371    uint8_t   fRateScanBoard;
    369372    deque<float> fRateScanDataHist[41];
     373
     374    bool fHasError;
    370375
    371376    // ------------- Initialize variables before the Dim stuff ------------
     
    377382    DimDescribedState fDimDriveControl;
    378383    DimDescribedState fDimMagicWeather;
     384    DimDescribedState fDimTngWeather;
    379385    DimDescribedState fDimFeedback;
    380386    DimDescribedState fDimBiasControl;
     
    475481            return;
    476482
    477         const string str  = fControlMessageHist.size()>0 ? fControlMessageHist.back() : "         ";
    478483        const string time = d.GetTimeAsStr("%H:%M:%S ");
     484
     485        string str = "         ";
     486        for (auto it=fControlMessageHist.rbegin(); it!=fControlMessageHist.rend(); it++)
     487        {
     488            str = it->substr(0, time.length());
     489            if (str!="--:--:-- ")
     490                break;
     491        }
    479492
    480493        ostringstream tst;
     
    482495
    483496        string msg;
    484         msg += str.substr(0, time.length())==time ? "--:--:-- " : time;
     497        msg += str==time ? "--:--:-- " : time;
    485498        msg += "<->"+string(d.Ptr<char>())+"</->";
    486499
     
    497510        out << '\n';
    498511
    499         ofstream(fPath+"/test.txt") << out.str();
     512        ofstream(fPath+"/scriptlog.txt") << out.str();
    500513    }
    501514
     
    514527
    515528        if (d.GetQoS()<0)
    516             HandleControlMessageImp(d);
     529        {
     530            DimControl ctrl;
     531            ctrl.Handler(d);
     532
     533            const string msg = ctrl.shortmsg+"<br>"+ctrl.file;
     534            HandleControlMessageImp(Event(d, msg.data(), msg.length()+1));
     535        }
    517536    }
    518537
     
    595614            out << "#ffffff\t" << fMagicWeatherHist[i].back() << '\n';
    596615        out << "#ffffff\t" << dir[idx] << '\n';
    597 
    598         ofstream(fPath+"/magicweather.txt") << out.str();
     616        out << "#ffffff\t";
     617        if (fTngWeatherDustHist.size()>0)
     618            out << fTngWeatherDustHist.back() << '\t' << fTngWeatherDustTime.GetAsStr("%H:%M") << '\n';
     619        else
     620            out << "\t\n";
     621
     622        ofstream(fPath+"/weather.txt") << out.str();
    599623
    600624        out.str("");
     
    613637        out << kHtmlWhite << '\t' << moon.fMoonTransit.GetAsStr("%H:%M") << '\n';
    614638        out << kHtmlWhite << '\t' << moon.fMoonSet.GetAsStr("%H:%M") << '\n';
     639        out << kHtmlWhite << '\t';
    615640
    616641        ofstream(fPath+"/astro.txt") << out.str();
     
    622647        WriteWeather(d, "gusts", kGusts,   0,  100);
    623648        WriteWeather(d, "press", kPress, 700, 1000);
     649
     650        return GetCurrentState();
     651    }
     652
     653    int HandleTngWeatherDust(const EventImp &d)
     654    {
     655        if (!CheckDataSize(d, "TngWeather:Dust", 4))
     656            return GetCurrentState();
     657
     658        fTngWeatherDustTime = d.GetTime();
     659
     660        fTngWeatherDustHist.push_back(d.GetFloat());
     661        if (fTngWeatherDustHist.size()>300)
     662                fTngWeatherDustHist.pop_front();
     663
     664        const Statistics stat(fTngWeatherDustHist);
     665
     666        const double scale = stat.max>0 ? pow(10, ceil(log10(stat.max))) : 0;
     667
     668        WriteBinary(d, "tng-dust-hist", fTngWeatherDustHist, scale);
     669
     670        ostringstream out;
     671        out << d.GetJavaDate() << '\n';
     672
     673        ofstream(fPath+"/tngdust.txt") << out.str();
    624674
    625675        return GetCurrentState();
     
    763813    int HandleFeedbackDeviation(const EventImp &d)
    764814    {
    765         if (!CheckDataSize(d, "Feedback:Deviation", 2*4*416+8))
     815        if (!CheckDataSize(d, "Feedback:Deviation", (2*416+2)*4))
    766816            return GetCurrentState();
    767817
     
    10791129
    10801130        const Statistics stat(vec);
     1131
     1132        fFtmPatchThresholdMed = stat.med;
    10811133
    10821134        ostringstream out;
     
    12671319        }
    12681320
     1321        // Cycle by time!
    12691322        fRateScanBoard ++;
    12701323        fRateScanBoard %= 40;
    12711324
    12721325        WriteBinary(d, "ratescan-hist",  fRateScanDataHist[0],                10, -2);
    1273         WriteBinary(d, "ratescan-board", fRateScanDataHist[fRateScanBoard+1], 10, -2);
     1326        WriteBinary(d, "ratescan-board", fRateScanDataHist[fRateScanBoard+1], 10, -4);
    12741327
    12751328        ostringstream out;
    12761329        out << setprecision(3);
    12771330        out << d.GetJavaDate() << '\n';
     1331        out << "#ffffff\t" << fFtmPatchThresholdMed << '\n';
    12781332        out << "#ffffff\t" << pow(10, fRateScanDataHist[0].back()) << '\n';
    12791333        out << "#ffffff\t" << max << '\n';
    12801334
    1281         ofstream(fPath+"/ratecan.txt") << out.str();
     1335        ofstream(fPath+"/ratescan.txt") << out.str();
    12821336
    12831337        out.str("");
     
    12861340        out << "#ffffff\t" << pow(10, fRateScanDataHist[fRateScanBoard+1].back()) << '\n';
    12871341
    1288         ofstream(fPath+"/ratecan_board.txt") << out.str();
     1342        ofstream(fPath+"/ratescan_board.txt") << out.str();
    12891343
    12901344        return GetCurrentState();
     
    12961350    {
    12971351        ostringstream out;
    1298         out << d.GetJavaDate() << '\t' << fDimControl.online() << '\n';
     1352        out << d.GetJavaDate() << '\t' << fHasError << '\n';
    12991353        switch (d.GetQoS())
    13001354        {
     
    13351389        Out() << fDimFscControl   << endl;
    13361390        Out() << fDimMagicWeather << endl;
     1391        Out() << fDimTngWeather   << endl;
    13371392        Out() << fDimRateScan     << endl;
    13381393        Out() << fDimChatServer   << endl;
     
    13471402
    13481403        if (&state==&fDimControl)
    1349         {
    1350             ostringstream out;
    1351             out << kHtmlGreen << '\t';
    1352             return kHtmlGreen+'\t'+(state.state()==-3?"Idle":state.msg)+'\n';
    1353         }
     1404            return kHtmlGreen +'\t'+(state.state()==-3?"Idle":fDimControl.shortmsg)+'\n';
    13541405
    13551406        const State rc = state.description();
     
    13921443        fLastUpdate=now;
    13931444
     1445        // ==============================================================
     1446
     1447        ostringstream msg;
     1448
     1449        if (fDimDriveControl.state()>0xff)
     1450            msg << "Drive in ERROR state<br/>";
     1451        if (fDimBiasControl.state()<BIAS::kRamping && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1452            msg << "BIAS not operating during data-taking<br/>";
     1453        if (fDimBiasControl.state()==BIAS::kOverCurrent)
     1454            msg << "BIAS channels in OverCurrent<br/>";
     1455        if (fDimBiasControl.state()==BIAS::kNotReferenced)
     1456            msg << "BIAS voltage not at reference<br/>";
     1457        if (fBiasControlCurrentMed>75)
     1458            msg << "Median current exceeds 75&micro;A/pix<br/>";
     1459        if (fBiasControlCurrentMax>90)
     1460            msg << "Maximum current exceeds 90&micro;A/pix<br/>";
     1461        if (fMagicWeatherHist[kHum].size()>0 && fMagicWeatherHist[kHum].back()>98 && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1462            msg << "Outside humidity exceeds 98% during data-taking<br/>";
     1463        if (fMagicWeatherHist[kGusts].size()>0 && fMagicWeatherHist[kGusts].back()>98 && fDimDriveControl.state()==7)
     1464            msg << "Wind gusts exceed 50km/h during tracking<br/>";
     1465        if (fFscControlTemperatureHist.size()>0 && fFscControlTemperatureHist.back()>7)
     1466            msg << "Sensor temperature exceeds outside temperature by more than 7&deg;C<br/>";
     1467        if (fFtmControlTriggerRateCam<0.01 && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1468            msg << "Trigger rate below 10mHz during data taking<br/>";
     1469        if (fFscControlHumidityAvg>60)
     1470            msg << "Average camera humidity exceed 60%<br/>";
     1471        if (!fDimControl.online())
     1472            msg << "dimctrl offline<br/>";
     1473
     1474        /* // Check offline and disconnected status?
     1475          Out() << fDimMcp          << endl;
     1476          Out() << fDimControl      << endl;
     1477          Out() << fDimDataLogger   << endl;
     1478          Out() << fDimDriveControl << endl;
     1479          Out() << fDimFadControl   << endl;
     1480          Out() << fDimFtmControl   << endl;
     1481          Out() << fDimBiasControl  << endl;
     1482          Out() << fDimFeedback     << endl;
     1483          Out() << fDimRateControl  << endl;
     1484          Out() << fDimFscControl   << endl;
     1485          Out() << fDimMagicWeather << endl;
     1486          Out() << fDimRateScan     << endl;
     1487          Out() << fDimChatServer   << endl;
     1488          */
     1489
     1490        // FTU in error
     1491        // FAD lost
     1492
     1493        // --------------------------------------------------------------
     1494
     1495        const bool haserror = msg.str().size()>0;
     1496
    13941497        ostringstream out;
    1395         out << now.JavaDate() << '\t' << fDimControl.online() << '\n';
     1498        out << now.JavaDate() << '\t' << haserror << '\n';
     1499        out << setprecision(3);
     1500        out << kHtmlWhite << '\t' << msg.str() << '\n';
     1501
     1502        if (haserror || fHasError)
     1503            ofstream(fPath+"/error.txt") << out.str();
     1504
     1505        fHasError = haserror;
     1506
     1507        // ==============================================================
     1508
     1509        out.str("");
     1510        out << now.JavaDate() << '\t' << fHasError << '\n';
    13961511        out << setprecision(3);
    13971512
     
    16231738            out << kHtmlWhite << '\n';
    16241739
    1625 
    1626         // ------------------------------------------
    1627 
    16281740        ofstream(fPath+"/fact.txt") << out.str();
    16291741
    1630         // ==========================================
     1742        // ==============================================================
    16311743
    16321744        out.str("");
    1633         out << now.JavaDate() << '\t' << fDimControl.online() << '\n';
     1745        out << now.JavaDate() << '\t' << fHasError << '\n';
    16341746
    16351747        if (!fDimDNS.online())
     
    16391751            out << kHtmlGreen << '\t' << fDimDNS.version() << '\n';
    16401752
     1753            out << GetStateHtml(fDimControl,      0);
    16411754            out << GetStateHtml(fDimMcp,          4);
    1642             out << GetStateHtml(fDimControl,      0);
    16431755            out << GetStateHtml(fDimDataLogger,   1);
    16441756            out << GetStateHtml(fDimDriveControl, 2);
     
    16501762            out << GetStateHtml(fDimFscControl,   2);
    16511763            out << GetStateHtml(fDimMagicWeather, 2);
     1764            out << GetStateHtml(fDimTngWeather,   2);
    16521765            out << GetStateHtml(fDimRateScan,     4);
    16531766            out << GetStateHtml(fDimChatServer,   1);
     
    16651778        fMcpConfigurationMaxTime(0),
    16661779        fMcpConfigurationMaxEvents(0),
     1780        fTngWeatherDustTime(Time::none),
    16671781        fBiasControlVoltageMed(0),
     1782        fBiasControlCurrentMed(0),
    16681783        fBiasControlCurrentMax(0),
    16691784        fFscControlHumidityAvg(0),
     1785        fFtmControlTriggerRateCam(0),
    16701786        fRateScanDataId(0),
    16711787        fRateScanBoard(0),
     1788        fHasError(false),
    16721789        // ---
    16731790        fDimMcp         ("MCP"),
     
    16751792        fDimDriveControl("DRIVE_CONTROL"),
    16761793        fDimMagicWeather("MAGIC_WEATHER"),
     1794        fDimTngWeather  ("TNG_WEATHER"),
    16771795        fDimFeedback    ("FEEDBACK"),
    16781796        fDimBiasControl ("BIAS_CONTROL"),
     
    16901808        fDimDriveControl.Subscribe(*this);
    16911809        fDimMagicWeather.Subscribe(*this);
     1810        fDimTngWeather.Subscribe(*this);
    16921811        fDimFeedback.Subscribe(*this);
    16931812        fDimBiasControl.Subscribe(*this);
     
    17001819
    17011820        Subscribe("DIM_CONTROL/MESSAGE")
    1702             (bind(&StateMachineSmartFACT::HandleDimControlMessage,  this, placeholders::_1));
     1821            (bind(&StateMachineSmartFACT::HandleDimControlMessage,   this, placeholders::_1));
    17031822
    17041823        Subscribe("MCP/CONFIGURATION")
    1705             (bind(&StateMachineSmartFACT::HandleMcpConfiguration,   this, placeholders::_1));
     1824            (bind(&StateMachineSmartFACT::HandleMcpConfiguration,    this, placeholders::_1));
    17061825
    17071826        Subscribe("DRIVE_CONTROL/POINTING_POSITION")
    1708             (bind(&StateMachineSmartFACT::HandleDrivePointing,      this, placeholders::_1));
     1827            (bind(&StateMachineSmartFACT::HandleDrivePointing,       this, placeholders::_1));
    17091828        Subscribe("DRIVE_CONTROL/TRACKING_POSITION")
    1710             (bind(&StateMachineSmartFACT::HandleDriveTracking,      this, placeholders::_1));
     1829            (bind(&StateMachineSmartFACT::HandleDriveTracking,       this, placeholders::_1));
    17111830        Subscribe("DRIVE_CONTROL/SOURCE_POSITION")
    1712             (bind(&StateMachineSmartFACT::HandleDriveSource,        this, placeholders::_1));
     1831            (bind(&StateMachineSmartFACT::HandleDriveSource,         this, placeholders::_1));
    17131832
    17141833        Subscribe("FSC_CONTROL/TEMPERATURE")
    1715             (bind(&StateMachineSmartFACT::HandleFscTemperature,     this, placeholders::_1));
     1834            (bind(&StateMachineSmartFACT::HandleFscTemperature,      this, placeholders::_1));
    17161835        Subscribe("FSC_CONTROL/HUMIDITY")
    1717             (bind(&StateMachineSmartFACT::HandleFscHumidity,        this, placeholders::_1));
     1836            (bind(&StateMachineSmartFACT::HandleFscHumidity,         this, placeholders::_1));
    17181837
    17191838        Subscribe("MAGIC_WEATHER/DATA")
    1720             (bind(&StateMachineSmartFACT::HandleMagicWeatherData,   this, placeholders::_1));
     1839            (bind(&StateMachineSmartFACT::HandleMagicWeatherData,    this, placeholders::_1));
     1840        Subscribe("TNG_WEATHER/DUST")
     1841            (bind(&StateMachineSmartFACT::HandleTngWeatherDust,      this, placeholders::_1));
    17211842
    17221843        Subscribe("FEEDBACK/DEVIATION")
Note: See TracChangeset for help on using the changeset viewer.