Changeset 13699 for trunk/FACT++


Ignore:
Timestamp:
05/13/12 14:29:38 (13 years ago)
Author:
tbretz
Message:
Added path option (not yet activated); added path to output files; some updates to coloring and output especially for the current display and whether they are calibrated or not; added thresholds
File:
1 edited

Legend:

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

    r13693 r13699  
    4848    Time fLastUpdate;
    4949
     50    string fPath;
     51
    5052    // ----------------------------- Data storage -------------------------
    5153
     
    8486    deque<float> fFtmControlTriggerRateHist;
    8587
     88    vector<float> fFtmPatchThresholds;
     89
    8690    uint64_t  fRateScanDataId;
    8791    deque<float> fRateScanDataHist;
     
    100104        string server;
    101105        pair<Time, int> info;
     106        string msg;
    102107
    103108        DimStampedInfo dim;
     
    117122            info = make_pair(Time(tsec, tms*1000),
    118123                             disconnected ? -2 : dim.getQuality());
     124
     125            msg = disconnected ? "" : dim.getString();
    119126        }
    120127
     
    146153                return "Offline";
    147154
    148             ostringstream msg;
    149             msg << "V" << info.second/100 << 'r' << info.second%100;
    150             return msg.str();
     155            ostringstream out;
     156            out << "V" << info.second/100 << 'r' << info.second%100;
     157            return out.str();
    151158        }
    152159    };
     
    186193
    187194    DimStampedInfo fDimFtmControlTriggerRates;
     195    DimStampedInfo fDimFtmControlStaticData;
    188196
    189197    DimStampedInfo fDimRateScanData;
     
    241249        const char *ptr = reinterpret_cast<char*>(val.data());
    242250
    243         ofstream fout("www/"+fname+".bin");
     251        ofstream fout(fPath+"/"+fname+".bin");
    244252        fout << offset << '\n';
    245253        fout << offset+scale << '\n';
     
    309317        out << "#ffffff\t" << stat.max << '\n';
    310318
    311         ofstream("www/"+name+".txt") << out.str();
     319        ofstream(fPath+"/"+name+".txt") << out.str();
    312320
    313321        WriteBinary("magicweather-"+name+"-hist", fMagicWeatherHist[i], max-min, min);
     
    344352
    345353
    346         ofstream("www/magicweather.txt") << out.str();
     354        ofstream(fPath+"/magicweather.txt") << out.str();
    347355
    348356        WriteWeather(d, "temp",  kTemp,   -5,   35);
     
    381389        out << az << '\n';
    382390
    383         ofstream("www/drive-pointing.txt") << out.str();
     391        ofstream(fPath+"/drive-pointing.txt") << out.str();
    384392    }
    385393
     
    389397            return;
    390398
    391         const double zd  = d.get<double>(4*8) * M_PI / 180;
    392         const double dzd = d.get<double>(6*8) * M_PI / 180;
    393         const double daz = d.get<double>(7*8) * M_PI / 180;
     399        const double zd  = d.get<double>(3*8) * M_PI / 180;
     400        const double dzd = d.get<double>(5*8) * M_PI / 180;
     401        const double daz = d.get<double>(6*8) * M_PI / 180;
    394402
    395403        // Correct:
     
    399407        const double dev = cos(dzd) - sin(zd+dzd)*sin(zd)*(1.-cos(daz));
    400408        fDriveControlTrackingDev = acos(dev) * 180 / M_PI * 3600;
     409
    401410        if (fDriveControlTrackingDev<0.01)
    402411            fDriveControlTrackingDev=0;
     
    428437        out << "#ffffff\t" << wang << '\n';
    429438
    430         ofstream("www/drive.txt") << out.str();
     439        ofstream(fPath+"/drive.txt") << out.str();
    431440    }
    432441
     
    448457            return;
    449458
     459        const float *ptr = d.ptr<float>();
    450460        vector<float> dev(ptr+416, ptr+416+320);
    451461
     
    471481        out << kHtmlWhite << '\t' << stat.max << '\n';
    472482        ofstream("www/feedback.txt") << out.str();
    473 
    474483    }
    475484
     
    495504        }
    496505
    497         WriteBinary("biascontrol-voltage", val, 75);
     506        if (fDimBiasControl.state()==BIAS::kVoltageOn)
     507            WriteBinary("biascontrol-voltage", val, 10, 65);
     508        else
     509            WriteBinary("biascontrol-voltage", val, 75);
    498510
    499511        ostringstream out;
     
    504516        out << kHtmlWhite << '\t' << stat.avg << '\n';
    505517        out << kHtmlWhite << '\t' << stat.max << '\n';
    506         ofstream("www/voltage.txt") << out.str();
     518        ofstream(fPath+"/voltage.txt") << out.str();
    507519
    508520    }
     
    518530            v[i] = d.ptr<uint16_t>()[i] * 5000./4096;
    519531
     532        const bool cal = fFeedbackCalibration.size()>0 && fBiasControlVoltageVec.size()>0;
     533
    520534        // Calibrate the data (subtract offset)
    521         if (fFeedbackCalibration.size()>0 && fBiasControlVoltageVec.size()>0)
     535        if (cal)
    522536            for (int i=0; i<320; i++)
     537            {
    523538                v[i] -= fBiasControlVoltageVec[i]/fFeedbackCalibration[i]*1e6;
     539                v[i] /= fPixelMap.hv(i).group() ? 5 : 4;
     540            }
    524541
    525542        // Get the maximum of each patch
     
    532549
    533550        // Write the 160 patch values to a file
    534         WriteBinary("biascontrol-current", val, 500);
     551        WriteBinary("biascontrol-current", val, 100);
    535552
    536553        const Statistics stat(v, 0, 3);
     
    542559        // Store a history of the last 60 entries
    543560        fBiasControlCurrentHist.push_back(fBiasControlCurrentMed);
    544         if (fBiasControlCurrentHist.size()>60)
     561        if (fBiasControlCurrentHist.size()>360)
    545562            fBiasControlCurrentHist.pop_front();
    546563
    547564        // write the history to a file
    548         WriteBinary("biascontrol-current-hist", fBiasControlCurrentHist, 500);
     565        WriteBinary("biascontrol-current-hist", fBiasControlCurrentHist, 100);
     566
     567        const string col0 = cal ? kHtmlGreen : kHtmlWhite;
     568
     569        string col1 = col0;
     570        string col2 = col0;
     571        string col3 = col0;
     572        string col4 = col0;
     573
     574        if (cal && stat.min>65)
     575            col1 = kYellow;
     576        if (cal && stat.min>80)
     577            col1 = kRed;
     578
     579        if (cal && stat.med>65)
     580            col2 = kYellow;
     581        if (cal && stat.med>80)
     582            col2 = kRed;
     583
     584        if (cal && stat.avg>65)
     585            col3 = kYellow;
     586        if (cal && stat.avg>80)
     587            col3 = kRed;
     588
     589        if (cal && stat.max>65)
     590            col4 = kYellow;
     591        if (cal && stat.max>80)
     592            col4 = kRed;
    549593
    550594        ostringstream out;
    551595        out << setprecision(3);
    552596        out << d.time.JavaDate() << '\n';
    553         out << kHtmlWhite << '\t' << stat.min << '\n';
    554         out << kHtmlWhite << '\t' << stat.med << '\n';
    555         out << kHtmlWhite << '\t' << stat.avg << '\n';
    556         out << kHtmlWhite << '\t' << stat.max << '\n';
    557         ofstream("www/current.txt") << out.str();
     597        out << col0 << '\t' << (cal?"yes":"no") << '\n';
     598        out << col1 << '\t' << stat.min << '\n';
     599        out << col2 << '\t' << stat.med << '\n';
     600        out << col3 << '\t' << stat.avg << '\n';
     601        out << col4 << '\t' << stat.max << '\n';
     602        ofstream(fPath+"/current.txt") << out.str();
    558603    }
    559604
     
    591636        out << "#ffffff\t" << fFtmControlTriggerRateCam << '\n';
    592637
    593         ofstream("www/trigger.txt") << out.str();
     638        ofstream(fPath+"/trigger.txt") << out.str();
    594639
    595640        const Statistics bstat(vector<float>(brates, brates+40));
     
    602647        out << kHtmlWhite << '\t' << bstat.avg << '\n';
    603648        out << kHtmlWhite << '\t' << bstat.max << '\n';
    604         ofstream("www/boardrates.txt") << out.str();
     649        ofstream(fPath+"/boardrates.txt") << out.str();
    605650
    606651        out.str("");
     
    610655        out << kHtmlWhite << '\t' << pstat.avg << '\n';
    611656        out << kHtmlWhite << '\t' << pstat.max << '\n';
    612         ofstream("www/patchrates.txt") << out.str();
     657        ofstream(fPath+"/patchrates.txt") << out.str();
     658    }
     659
     660    void HandleFtmControlStaticData(const DimData &d)
     661    {
     662        if (!CheckDataSize(d, "FtmControl:StaticData", 740))
     663            return;
     664
     665        const uint16_t *ptr = d.ptr<uint16_t>(260);
     666        vector<uint16_t> vec(ptr, ptr+160);
     667
     668        WriteBinary("ftmcontrol-thresholds", vec, 1000);
     669
     670        const Statistics stat(vec);
     671
     672        ostringstream out;
     673        out << d.time.JavaDate() << '\n';
     674        out << kHtmlWhite << '\t' << stat.min << '\n';
     675        out << kHtmlWhite << '\t' << stat.med << '\n';
     676        out << kHtmlWhite << '\t' << stat.avg << '\n';
     677        out << kHtmlWhite << '\t' << stat.max << '\n';
     678        ofstream(fPath+"/thresholds.txt") << out.str();
    613679    }
    614680
     
    694760        out << "#ffffff\t" << stat.max << '\n';
    695761
    696         ofstream("www/fsc.txt") << out.str();
     762        ofstream(fPath+"/fsc.txt") << out.str();
    697763
    698764        WriteBinary("fsccontrol-temperature-hist",
     
    765831            return;
    766832        if (HandleService(curr, fDimFtmControlTriggerRates, &StateMachineSmartFACT::HandleFtmControlTriggerRates))
     833            return;
     834        if (HandleService(curr, fDimFtmControlStaticData,   &StateMachineSmartFACT::HandleFtmControlStaticData))
    767835            return;
    768836        if (HandleService(curr, *fDimFadControlEventData,   &StateMachineSmartFACT::HandleFadControlEventData))
     
    828896        const State rc = GetState(state);
    829897
     898        if (rc.index==-2 && state.state()>-2)
     899        {
     900            ostringstream out;
     901            out << kWhite << '\t' << state.state() << '\n';
     902            return out.str();
     903        }
     904
    830905        //ostringstream msg;
    831906        //msg << kHtmlWhite << '\t' << rc.name << " [" << rc.index << "]\n";
     
    884959            {
    885960                if (fMcpConfigurationState==12)
    886                     out << fMcpConfigurationMaxTime-(Time()-fMcpConfigurationRunStart).total_seconds() << 's';
     961                {
     962
     963                    const uint32_t dt = (Time()-fMcpConfigurationRunStart).total_seconds();
     964                    if (dt>fMcpConfigurationMaxTime)
     965                        out << "---";
     966                    else
     967                        out << fMcpConfigurationMaxTime-dt << 's';
     968                }
    887969                else
    888970                    out << "[" << fMcpConfigurationMaxTime << "s]";
     
    9871069        {
    9881070            string col = fBiasControlVoltageMed>3?kHtmlGreen:kHtmlWhite;
    989             if (fBiasControlCurrentMax>280)
     1071            if (fBiasControlCurrentMax>65)
    9901072                col = kHtmlYellow;
    991             if (fBiasControlCurrentMax>350)
     1073            if (fBiasControlCurrentMax>80)
    9921074                col = kHtmlRed;
    9931075
    994             if (fFeedbackCalibration.size()==0)
    995                 col = kHtmlBlue;
     1076            // Bias in overcurrent => Red
    9961077            if (fDimBiasControl.state()==BIAS::kOverCurrent)
    9971078                col = kHtmlRed;
    9981079
     1080            // MCP in ReadyForDatataking/Configuring/Configured/TriggerOn/TakingData
     1081            // and Bias not in "data-taking state' => Red
     1082            if (fDimMcp.state()>5 &&
     1083                (fDimBiasControl.state()==BIAS::kVoltageOn ||
     1084                 fDimBiasControl.state()==BIAS::kVoltageOff))
     1085                col = kHtmlRed;
     1086
     1087            const bool cal = fFeedbackCalibration.size();
     1088
     1089            // Feedback is currently calibrating => Blue
    9991090            if (fDimFeedback.state()==13)
    10001091            {
     
    10071098                out << col << '\t';
    10081099                out << fBiasControlCurrentMed << '\t';
    1009                 out << fBiasControlCurrentMax << '\t';
     1100                if (cal)
     1101                    out << fBiasControlCurrentMax;
     1102                else
     1103                    out << "&mdash; ";
     1104                out << '\t';
    10101105            }
    10111106            out << fBiasControlVoltageMed << '\n';
     
    10171112        // ------------------------------------------
    10181113
    1019         ofstream("www/fact.txt") << out.str();
     1114        ofstream(fPath+"/fact.txt") << out.str();
    10201115
    10211116        // ==========================================
     
    10311126
    10321127            out << GetStateHtml(fDimMcp,          4);
    1033             out << GetStateHtml(fDimControl,      0);
     1128            out << kHtmlWhite << '\t' << (fDimControl.state()>-2?fDimControl.msg:"---") << "\n";
    10341129            out << GetStateHtml(fDimDataLogger,   1);
    10351130            out << GetStateHtml(fDimDriveControl, 2);
     
    10451140        }
    10461141
    1047         ofstream("www/status.txt") << out.str();
     1142        ofstream(fPath+"/status.txt") << out.str();
    10481143
    10491144        return kStateRunning;
     
    10521147public:
    10531148    StateMachineSmartFACT(ostream &out=cout) : StateMachineDim(out, "SMART_FACT"),
     1149        fPath("www/smartfact/data"),
    10541150        fMcpConfigurationMaxTime(0),
    10551151        fMcpConfigurationMaxEvents(0),
     
    10881184        //---
    10891185        fDimFtmControlTriggerRates("FTM_CONTROL/TRIGGER_RATES",       (void*)NULL, 0, this),
     1186        fDimFtmControlStaticData  ("FTM_CONTROL/STATIC_DATA",         (void*)NULL, 0, this),
    10901187        //-
    10911188        fDimRateScanData          ("RATE_SCAN/DATA",                  (void*)NULL, 0, this),
     
    11211218        }
    11221219
     1220        // First move all the dim services to another class so that
     1221        // they can be instatiated all at once _after_ path was set
     1222        //fPath = conf.Get<string>("path");
     1223
    11231224        // Pixel map is needed to deal with this service
    11241225        fDimFadControlEventData=new DimStampedInfo("FAD_CONTROL/EVENT_DATA", (void*)NULL, 0, this);
     
    11421243    po::options_description control("Smart FACT");
    11431244    control.add_options()
    1144         ("pixel-map-file", var<string>("FACTmapV5a.txt"), "Pixel mapping file. Used here to get the default reference voltage.")
     1245        ("pixel-map-file", var<string>("FACTmapV5a.txt"), "Pixel mapping file. Used here to get the default reference voltage")
     1246        ("path",           var<string>("www/smartfact"),  "Output path for the data-files")
    11451247        ;
    11461248
Note: See TracChangeset for help on using the changeset viewer.