Changeset 13621


Ignore:
Timestamp:
05/09/12 16:17:10 (13 years ago)
Author:
tbretz
Message:
Added rate scan stuff and fixed mappings and other details.
File:
1 edited

Legend:

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

    r13609 r13621  
    8383    float  fFtmControlTriggerRateCam;
    8484    deque<float> fFtmControlTriggerRateHist;
     85
     86    uint64_t  fRateScanDataId;
     87    deque<float> fRateScanDataHist;
    8588
    8689    // ------------- Initialize variables before the Dim stuff ------------
     
    182185    DimStampedInfo fDimFtmControlTriggerRates;
    183186
     187    DimStampedInfo fDimRateScanData;
     188
    184189    DimStampedInfo *fDimFadControlEventData;
    185190
     
    224229        for (uint64_t i=0; i<t.size(); i++)
    225230        {
    226             float range = nearbyint(128*(t[i]+offset)/scale); // [-2V; 2V]
     231            float range = nearbyint(128*(t[i]-offset)/scale); // [-2V; 2V]
    227232            if (range>127)
    228233                range=127;
     
    240245    // -------------------------------------------------------------------
    241246
     247    struct Statistics
     248    {
     249        float min;
     250        float max;
     251        float med;
     252        float avg;
     253        //float rms;
     254
     255        template<class T>
     256            Statistics(const T &t)
     257        {
     258            min = *min_element(t.begin(), t.end());
     259            max = *max_element(t.begin(), t.end());
     260            avg =  accumulate (t.begin(), t.end(), 0.)/t.size();
     261
     262            const size_t p = t.size()/2;
     263
     264            T copy(t);
     265            nth_element(copy.begin(), copy.begin()+p, copy.end());
     266            med = copy[p];
     267        }
     268    };
     269
    242270    void HandleMcpConfiguration(const DimData &d)
    243271    {
     
    256284    void WriteWeather(const DimData &d, const string &name, int i, float min, float max)
    257285    {
    258         const auto  fmin = min_element(fMagicWeatherHist[i].begin(), fMagicWeatherHist[i].end());
    259         const auto  fmax = max_element(fMagicWeatherHist[i].begin(), fMagicWeatherHist[i].end());
    260         const float favg = accumulate (fMagicWeatherHist[i].begin(), fMagicWeatherHist[i].end(), 0.)/fMagicWeatherHist[i].size();
     286        const Statistics stat(fMagicWeatherHist[i]);
    261287
    262288        ostringstream out;
     
    265291
    266292        out << "#ffffff\t" << fMagicWeatherHist[i].back() << '\n';
    267         out << "#ffffff\t" << *fmin << '\n';
    268         out << "#ffffff\t" <<  favg << '\n';
    269         out << "#ffffff\t" << *fmax << '\n';
     293        out << "#ffffff\t" << stat.min << '\n';
     294        out << "#ffffff\t" << stat.avg << '\n';
     295        out << "#ffffff\t" << stat.max << '\n';
    270296
    271297        ofstream("www/"+name+".txt") << out.str();
    272298
    273         WriteBinary("magicweather-"+name+"-hist", fMagicWeatherHist[i], max-min, -min);
     299        WriteBinary("magicweather-"+name+"-hist", fMagicWeatherHist[i], max-min, min);
    274300    }
    275301
     
    287313        }
    288314
     315        static const char *dir[] =
     316        {
     317            "N", "NNE", "NE", "ENE",
     318            "E", "ESE", "SE", "SSE",
     319            "S", "SSW", "SW", "WSW",
     320            "W", "WNW", "NW", "NNW"
     321        };
     322
     323        const uint16_t idx = uint16_t(floor(fmod(fMagicWeatherHist[kDir].back()+360+11.25, 360)/22.5));
     324
    289325        ostringstream out;
    290326        out << uint64_t(d.time.UnixTime()*1000) << '\n';
    291 
    292         for (int i=0; i<7; i++)
     327        for (int i=0; i<6; i++)
    293328            out << "#ffffff\t" << fMagicWeatherHist[i].back() << '\n';
     329        out << "#ffffff\t" << dir[idx] << '\n';
     330
    294331
    295332        ofstream("www/magicweather.txt") << out.str();
     
    320357        };
    321358
    322         const uint16_t i = uint16_t(floor(fmod(az+360+11.25, 360)/22));
     359        const uint16_t i = uint16_t(floor(fmod(az+360+11.25, 360)/22.5));
    323360        fDriveControlPointingAz = dir[i];
    324361
     
    404441        fBiasControlVoltageVec.assign(d.ptr<float>(), d.ptr<float>()+320);
    405442
    406         vector<float> v(fBiasControlVoltageVec);
    407         sort(v.begin(), v.end());
    408 
    409         fBiasControlVoltageMed = (v[159]+v[160])/2;
    410 
    411         //const char *ptr = d.ptr<char>();
    412         //ofstream fout("www/biascontrol-voltage.bin");
    413         //fout.write(ptr, 320*sizeof(float));
     443        const Statistics stat(fBiasControlVoltageVec);
     444
     445        fBiasControlVoltageMed = stat.med;
    414446
    415447        vector<float> val(320, 0);
     
    417449        {
    418450            const int idx = (fPixelMap.hv(i).hw()/9)*2+fPixelMap.hv(i).group();
    419             val[i] = v[i];
     451            val[idx] = fBiasControlVoltageVec[i];
    420452        }
    421453
    422454        WriteBinary("biascontrol-voltage", val, 75);
     455
     456        ostringstream out;
     457        out << setprecision(3);
     458        out << uint64_t(d.time.UnixTime()*1000) << '\n';
     459        out << kHtmlWhite << '\t' << stat.min << '\n';
     460        out << kHtmlWhite << '\t' << stat.med << '\n';
     461        out << kHtmlWhite << '\t' << stat.avg << '\n';
     462        out << kHtmlWhite << '\t' << stat.max << '\n';
     463        ofstream("www/voltage.txt") << out.str();
     464
    423465    }
    424466
     
    443485        {
    444486            const int idx = (fPixelMap.hv(i).hw()/9)*2+fPixelMap.hv(i).group();
    445             val[idx] = v[i];//max(v[i*2], v[i*2+1]);
     487            val[idx] = v[i];
    446488        }
    447489
     
    449491        WriteBinary("biascontrol-current", val, 1000);
    450492
    451         // Now sort them to determine the median
    452         sort(v.begin(), v.end());
     493        const Statistics stat(v);
    453494
    454495        // Exclude the three crazy channels
    455         fBiasControlCurrentMed = (v[159]+v[160])/2;
    456         fBiasControlCurrentMax = v[316];
     496        fBiasControlCurrentMed = stat.med;
     497        fBiasControlCurrentMax = stat.max;
    457498
    458499        // Store a history of the last 60 entries
     
    463504        // write the history to a file
    464505        WriteBinary("biascontrol-current-hist", fBiasControlCurrentHist, 1000);
     506
     507        ostringstream out;
     508        out << setprecision(3);
     509        out << uint64_t(d.time.UnixTime()*1000) << '\n';
     510        out << kHtmlWhite << '\t' << stat.min << '\n';
     511        out << kHtmlWhite << '\t' << stat.med << '\n';
     512        out << kHtmlWhite << '\t' << stat.avg << '\n';
     513        out << kHtmlWhite << '\t' << stat.max << '\n';
     514        ofstream("www/current.txt") << out.str();
    465515    }
    466516
     
    494544        out << "#ffffff\t" << fFtmControlTriggerRateCam << '\n';
    495545
    496         ofstream fout("www/trigger.txt");
    497         fout << out.str();
     546        ofstream("www/trigger.txt") << out.str();
     547
     548        const Statistics bstat(vector<float>(brates, brates+40));
     549        const Statistics pstat(vector<float>(prates, prates+160));
     550
     551        out.str("");
     552        out << uint64_t(d.time.UnixTime()*1000) << '\n';
     553        out << kHtmlWhite << '\t' << bstat.min << '\n';
     554        out << kHtmlWhite << '\t' << bstat.med << '\n';
     555        out << kHtmlWhite << '\t' << bstat.avg << '\n';
     556        out << kHtmlWhite << '\t' << bstat.max << '\n';
     557        ofstream("www/boardrates.txt") << out.str();
     558
     559        out.str("");
     560        out << uint64_t(d.time.UnixTime()*1000) << '\n';
     561        out << kHtmlWhite << '\t' << pstat.min << '\n';
     562        out << kHtmlWhite << '\t' << pstat.med << '\n';
     563        out << kHtmlWhite << '\t' << pstat.avg << '\n';
     564        out << kHtmlWhite << '\t' << pstat.max << '\n';
     565        ofstream("www/patchrates.txt") << out.str();
     566
     567
    498568    }
    499569
     
    521591        switch (d.qos)
    522592        {
    523         case 0:  WriteBinary("fadcontrol-eventdata", max, 2000, 1000); break;
    524         case 1:  WriteBinary("fadcontrol-eventdata", max, 2000,    0); break;
    525         default: WriteBinary("fadcontrol-eventdata", max,  250,    0); break;
     593        case 0:  WriteBinary("fadcontrol-eventdata", max, 2000, -1000); break;
     594        case 1:  WriteBinary("fadcontrol-eventdata", max, 2000,     0); break;
     595        default: WriteBinary("fadcontrol-eventdata", max,  250,     0); break;
    526596        }
    527597    }
     
    566636            fFscControlTemperatureHist.pop_front();
    567637
    568         const auto beg = fFscControlTemperatureHist.begin();
    569         const auto end = fFscControlTemperatureHist.end();
    570 
    571         const auto  fmin = min_element(beg, end);
    572         const auto  fmax = max_element(beg, end);
    573         const float favg = accumulate (beg, end, 0)/fFscControlTemperatureHist.size();
     638        const Statistics stat(fFscControlTemperatureHist);
    574639
    575640        ostringstream out;
    576641        out << setprecision(3);
    577642        out << uint64_t(d.time.UnixTime()*1000) << '\n';
    578         out << "#ffffff\t" << min   << '\n';
    579         out << "#ffffff\t" << avg   << '\n';
    580         out << "#ffffff\t" << max   << '\n';
    581         out << "#ffffff\t" << *fmin << '\n';
    582         out << "#ffffff\t" << favg << '\n';
    583         out << "#ffffff\t" << *fmax << '\n';
     643        out << "#ffffff\t" << min      << '\n';
     644        out << "#ffffff\t" << avg      << '\n';
     645        out << "#ffffff\t" << max      << '\n';
     646        out << "#ffffff\t" << stat.min << '\n';
     647        out << "#ffffff\t" << stat.avg << '\n';
     648        out << "#ffffff\t" << stat.max << '\n';
    584649
    585650        ofstream("www/fsc.txt") << out.str();
     
    587652        WriteBinary("fsccontrol-temperature-hist",
    588653                    fFscControlTemperatureHist, 30);
    589 
    590654    }
    591655
     
    610674    }
    611675
     676    void HandleRateScanData(const DimData &d)
     677    {
     678        if (!CheckDataSize(d, "RateScan:Data", 24+200*40))
     679            return;
     680
     681        const uint64_t id   = d.get<uint64_t>();
     682        const float    rate = log10(d.get<float>(20));
     683
     684        if (fRateScanDataId!=id)
     685        {
     686            fRateScanDataHist.clear();
     687            fRateScanDataId = id;
     688        }
     689        fRateScanDataHist.push_back(rate);
     690
     691        WriteBinary("ratescan-hist", fRateScanDataHist, 10, -1);
     692    }
    612693
    613694    // -------------------------------------------------------------------
     
    619700            return;
    620701
    621         if (HandleService(curr, fDimMcpConfiguration,       &StateMachineSmartFACT::HandleMcpConfiguration))
     702        if (HandleService(curr, fDimMcpConfiguration,       &StateMachineSmartFACT::configuHandleMcpConfiguration))
    622703            return;
    623704        if (HandleService(curr, fDimMagicWeatherData,       &StateMachineSmartFACT::HandleMagicWeatherData))
     
    642723            return;
    643724        if (HandleService(curr, fDimFscControlHumidity,     &StateMachineSmartFACT::HandleFscControlHumidity))
     725            return;
     726        if (HandleService(curr, fDimRateScanData,           &StateMachineSmartFACT::HandleRateScanData))
    644727            return;
    645728    }
     
    768851            if (fMcpConfigurationMaxEvents>0 || fMcpConfigurationState==12)
    769852                out << ']';
    770 
    771 
    772853        }
    773854        else
     
    9191000public:
    9201001    StateMachineSmartFACT(ostream &out=cout) : StateMachineDim(out, "SMART_FACT"),
     1002        fMcpConfigurationMaxTime(0),
     1003        fMcpConfigurationMaxEvents(0),
     1004        fRateScanDataId(0),
    9211005        //---
    9221006        fDimMcp                   ("MCP"),
     
    9511035        fDimFtmControlTriggerRates("FTM_CONTROL/TRIGGER_RATES",       (void*)NULL, 0, this),
    9521036        //-
    953         fMcpConfigurationMaxEvents(0),
    954         fMcpConfigurationMaxTime(0),
     1037        fDimRateScanData          ("RATE_SCAN/DATA",                  (void*)NULL, 0, this),
     1038        //-
    9551039        fDimFadControlEventData(0)
    9561040    {
Note: See TracChangeset for help on using the changeset viewer.