FACT++  1.0
int StateMachineSmartFACT::Execute ( )
inlineprivatevirtual

Is called continously to execute actions in the current state.

This is what the state machine is doing in a certain state continously. In an idle state this might just be doing nothing.

In the tracking state of the drive system this might be sending new command values to the drive based on its current position.

The current state of the state machine can be accessed by GetCurrentState()

Returns
Usually it should just return the current state. However, sometimes execution might lead to a new state, e.g. when a hardware error is detected. In this case a new state can be returned to put the state machine into a different state. Note, that the function is responsible of doing all actions connected with the state change itself. If not overwritten it returns the current status.

Reimplemented from StateMachineImp.

Definition at line 2613 of file smartfact.cc.

References StateMachineSmartFACT::EventHist::clean(), DimDescribedState::description(), dev, Moon::disk, Tools::Form(), Sun::fSunSet12, Header(), hum, Time::IsValid(), Time::JavaDate(), HTML::kBlue, Feedback::State::kCalibrated, Feedback::State::kCalibrating, MCP::State::kConfigured, MCP::State::kConfiguring1, MCP::State::kConfiguring2, MCP::State::kConfiguring3, FSC::State::kConnected, PFmini::State::kConnected, SQM::State::kConnected, Lid::State::kConnected, MagicWeather::State::kConnected, TNGWeather::State::kConnected, MagicLidar::State::kConnected, GPS::State::kConnected, Drive::State::kConnected, Agilent::State::kConnected, RateControl::State::kConnected, Feedback::State::kConnected, RateScan::State::kConnected, MCP::State::kConnected, FTM::State::kConnected, BIAS::State::kConnected, Power::State::kCoolingFailure, FSC::State::kDisconnected, FTM::kFtmConfig, FTM::kFtmLocked, HTML::kGreen, MCP::State::kIdle, Drive::State::kInitialized, RateScan::State::kInProgress, Drive::State::kLocked, Lid::State::kMoving, BIAS::State::kNotReferenced, DimState::kOffline, Feedback::State::kOnStandby, Drive::State::kOnTrack, Lid::State::kOpen, BIAS::State::kOverCurrent, BIAS::State::kRamping, MagicWeather::State::kReceiving, HTML::kRed, RateControl::State::kSettingGlobalThreshold, Power::State::kSystemOff, MCP::State::kTakingData, Drive::State::kTracking, MCP::State::kTriggerOn, FTM::State::kTriggerOn, Temperature::State::kValid, Agilent::State::kVoltageOff, BIAS::State::kVoltageOff, BIAS::State::kVoltageOn, HTML::kWhite, HTML::kYellow, Time::MinutesTo(), Time::NightAsInt(), DimState::online(), StateMachineSmartFACT::EventHist::rget(), Tools::Scientific(), Time::SecondsTo(), DimState::state(), Sun::state, Moon::time, Sun::time, DimVersion::version(), Moon::visible, and Sun::visible.

2614  {
2615  Time now;
2616  if (now-fLastUpdate<boost::posix_time::seconds(1))
2618  fLastUpdate=now;
2619 
2620  // ==============================================================
2621 
2622  bool reqscript = false;
2623 
2624 #ifdef HAVE_SQL
2625  try
2626  {
2627  const string query = Tools::Form("SELECT COUNT(*) FROM calendar.Data WHERE NOT u LIKE 'moon' AND y=%d AND m=%d AND d=%d",
2628  now.NightAsInt()/10000, (now.NightAsInt()/100)%100-1, now.NightAsInt()%100);
2629 
2630  const mysqlpp::StoreQueryResult res = Database(fDatabase).query(query).store();
2631 
2632  const uint32_t cnt = res[0][0];
2633 
2634  reqscript = cnt>0 && (fSun.state==3 || fSun.state==4);
2635  }
2636  catch (const exception &e)
2637  {
2638  Out() << e.what() << endl;
2639  }
2640 #endif
2641  // ==============================================================
2642 
2643  struct statvfs vfs;
2644  statvfs("/daq", &vfs);
2645 
2646  const uint64_t freedaq = vfs.f_bsize*vfs.f_bavail;
2647 
2648  // ==============================================================
2649 
2650  const bool data_taking =
2653 
2654  const bool data_run =
2655  fMcpConfigurationName=="data" ||
2656  fMcpConfigurationName=="data-rt";
2657 
2658  const bool bias_on =
2662 
2663  const bool calibrated =
2665 
2666  const bool haderr = !fErrorList.empty();
2667 
2668  bool newerr = false;
2669 
2670  newerr |= SetError(!fDimDNS.online(),
2671  "<b><#darkred>DIM network not available</#></b>");
2672  newerr |= SetError(!fDimControl.online(),
2673  "<b>no dimctrl server available</b>");
2674  newerr |= SetError(fDimDataLogger.state()<20 || fDimDataLogger.state()>40,
2675  "<b>datalogger not ready</b>");
2676 
2677  newerr |= SetError(fDimControl.state()!=3 && reqscript,
2678  "<b>No script running during datataking time.</b>");
2679 
2680  //newerr |= SetError(fDimDriveControl.state()==Drive::State::kLocked,
2681  // "<b><#darkred>Drive in LOCKED state, drive was automatically parked</#></b>");
2682 
2683  newerr |= SetError(fDimDriveControl.state()>0xff && data_taking && data_run,
2684  "Drive in ERROR state during data-run");
2685  newerr |= SetError(fDriveControlMoonDist>155,
2686  "Moon within the field-of-view of the cones");
2688  "Moon within the field-of-view of the camera");
2689 
2690  newerr |= SetError(fDimBiasControl.state()<BIAS::State::kRamping && data_taking && data_run,
2691  "BIAS not operating during data-run");
2693  "BIAS channels in OverCurrent");
2695  "BIAS voltage not at reference");
2696 
2698  "Feedback in standby due to high currents");
2699 
2700 
2701  newerr |= SetError(bias_on && calibrated && fBiasControlCurrentMed>115,
2702  "Median current (excl. crazy) exceeds 115&micro;A/pix");
2703  newerr |= SetError(bias_on && calibrated && fBiasControlCurrentMax>160,
2704  "Maximum current (excl. crazy) exceeds 160&micro;A/pix");
2705 
2706  newerr |= SetError(fFscControlHumidityAvg>60,
2707  "Average camera humidity exceed 60%");
2708 
2709  newerr |= SetError(!fPfMiniHumidityHist.empty() && fPfMiniHumidityHist.back()>50,
2710  "Camera humidity inside camera exceeds 50% (PFmini)");
2711  newerr |= SetError(!fTemperatureControlHist.empty() && (fTemperatureControlHist.back()<26.5 || fTemperatureControlHist.back()>29),
2712  "Container temperature outside [26.5;29]&deg;C");
2713 
2715  "Outside humidity exceeds 98% while lid is open");
2717  "Wind gusts exceed 50km/h during tracking");
2718 
2720  "Sensor temperature exceeds outside temperature by more than 15&deg;C");
2721 
2723  "Trigger rate below 1Hz while trigger switched on");
2724 
2726  "FTM - clock conditioner not locked!");
2727 
2728  newerr |= SetError(fDimTimeCheck.state()==1,
2729  "Warning NTP time difference of drive PC exceeds 1s");
2730  newerr |= SetError(fDimTimeCheck.state()<1,
2731  "Warning timecheck not running");
2732 
2736  "Bias voltage switched on, but bias crate not calibrated");
2737 
2739  "Last run finshed, but contained zero events.");
2740 
2741  newerr |= SetError(fFreeSpace<uint64_t(50000000000),
2742  "Less than 50GB disk space left on newdaq.");
2743 
2744  newerr |= SetError(freedaq<uint64_t(800000000000),
2745  "Less than 800GB disk space left on daq.");
2746 
2748  "Cooling unit reports failure!");
2749 
2750  for (auto it=fControlAlarmHist.begin(); it!=fControlAlarmHist.end(); it++)
2751  newerr |= SetError(it->time.IsValid(), it->msg);
2753 
2755 
2756  // FTM in Connected instead of Idle --> power cyclen
2757 
2758  /* // Check offline and disconnected status?
2759  Out() << fDimMcp << endl;
2760  Out() << fDimControl << endl;
2761  Out() << fDimDataLogger << endl;
2762  Out() << fDimDriveControl << endl;
2763  Out() << fDimFadControl << endl;
2764  Out() << fDimFtmControl << endl;
2765  Out() << fDimBiasControl << endl;
2766  Out() << fDimFeedback << endl;
2767  Out() << fDimRateControl << endl;
2768  Out() << fDimFscControl << endl;
2769  Out() << fDimMagicWeather << endl;
2770  Out() << fDimRateScan << endl;
2771  Out() << fDimChat << endl;
2772  */
2773 
2774  // FTU in error
2775  // FAD lost
2776 
2777  // --------------------------------------------------------------
2778  ostringstream out;
2779 
2780  if (newerr)
2781  {
2782  SetAudio("error");
2783 
2784  out << now.JavaDate() << '\n';
2785  out << HTML::kWhite << '\t';
2786  out << "<->" << fErrorHist.rget() << "<->";
2787  out << '\n';
2788 
2789  ofstream(fPath+"/errorhist.data") << out.str();
2790  }
2791 
2792  out.str("");
2793  out << Header(now) << '\t' << (!fErrorList.empty()) << '\t' << (fDimControl.state()>0) << '\n';
2794  out << setprecision(3);
2795  out << HTML::kWhite << '\t';
2796  for (auto it=fErrorList.begin(); it!=fErrorList.end(); it++)
2797  out << *it << "<br/>";
2798  out << '\n';
2799 
2800  if (haderr || !fErrorList.empty())
2801  ofstream(fPath+"/error.data") << out.str();
2802 
2803  // ==============================================================
2804 
2805  out.str("");
2806  out << Header(now) << '\t' << (!fErrorList.empty()) << '\t' << (fDimControl.state()>0) << '\n';
2807  out << setprecision(3);
2808 
2809  // -------------- System status --------------
2810  if (fDimDNS.online() && fDimMcp.state()>=MCP::State::kIdle) // Idle
2811  {
2812  string col = HTML::kBlue;
2813  switch (fMcpConfigurationState)
2814  {
2815  case MCP::State::kIdle:
2816  case DimState::kOffline:
2817  col = HTML::kWhite;
2818  break;
2824  col = HTML::kBlue;
2825  break;
2827  col = HTML::kBlue;
2828  if (fDimFadControl.state()==FAD::State::kRunInProgress)
2829  col = HTML::kGreen;
2830  break;
2831  }
2832 
2833  const bool other =
2837 
2838  if (other)
2839  col = HTML::kBlue;
2840 
2841  out << col << '\t';
2842 
2843  if (!other)
2844  {
2845  const string conf = fMcpConfigurationName.length()>0?" ["+fMcpConfigurationName+"]":"";
2846  switch (fMcpConfigurationState)
2847  {
2848  case MCP::State::kIdle:
2849  out << "Idle" << conf;
2850  break;
2854  out << "Configuring" << conf;
2855  break;
2857  out << "Configured" << conf;
2858  break;
2861  out << fMcpConfigurationName;
2862  if (fFadControlDrsRuns[2]>0)
2863  out << "(" << fFadControlDrsRuns[2] << ")";
2864  break;
2865  }
2866  }
2867  else
2869  out << "Calibrating threshold";
2870  else
2872  out << "Rate scan in progress";
2873  else
2875  out << "Lid moving";
2876 
2877 
2880  {
2881  ostringstream evt;
2883  {
2884  const int64_t de = int64_t(fMcpConfigurationMaxEvents) - int64_t(fFadControlNumEvents);
2886  evt << de;
2887  else
2889  }
2890  else
2891  {
2893  {
2894  if (fFadControlNumEvents>2999)
2895  evt << floor(fFadControlNumEvents/1000) << 'k';
2896  else
2897  evt << fFadControlNumEvents;
2898  }
2899  }
2900 
2901  ostringstream tim;
2903  {
2904  const uint32_t dt = (Time()-fMcpConfigurationRunStart).total_seconds();
2906  tim << fMcpConfigurationMaxTime-dt << 's';
2907  else
2908  tim << fMcpConfigurationMaxTime << 's';
2909  }
2910  else
2911  {
2914  }
2915 
2916  const bool has_evt = !evt.str().empty();
2917  const bool has_tim = !tim.str().empty();
2918 
2919  if (has_evt || has_tim)
2920  out << " [";
2921  out << evt.str();
2922  if (has_evt && has_tim)
2923  out << '/';
2924  out << tim.str();
2925  if (has_evt || has_tim)
2926  out << ']';
2927  }
2928  }
2929  else
2930  out << HTML::kWhite;
2931  out << '\n';
2932 
2933  // ------------------ Drive -----------------
2934  if (fDimDNS.online() && fDimDriveControl.state()>=Drive::State::kInitialized) // Armed, Moving, Tracking, OnTrack, Error
2935  {
2936  const uint32_t dev = !fDriveControlTrackingDevHist.empty() ? round(fDriveControlTrackingDevHist.back()) : 0;
2937  const State rc = fDimDriveControl.description();
2938  string col = HTML::kGreen;
2940  col = HTML::kWhite;
2943  col = HTML::kBlue;
2944  if (fDimDriveControl.state()==Drive::State::kTracking || // Tracking
2946  {
2947  if (dev>60) // ~1.5mm
2948  col = HTML::kYellow;
2949  if (dev>120) // ~1/4 of a pixel ~ 2.5mm
2950  col = HTML::kRed;
2951  }
2952  if (fDimDriveControl.state()>0xff)
2953  col = HTML::kRed;
2954  out << col << '\t';
2955 
2956  //out << rc.name << '\t';
2957  out << fDriveControlPointingAz << ' ';
2958  out << fDriveControlPointingZd << "&deg;";
2959  out << setprecision(2);
2962  {
2963  out << " &plusmn; " << dev << '"';
2964  if (!fDriveControlSourceName.empty())
2965  out << " [" << fDriveControlSourceName << ']';
2966  }
2969  out << " &#10227;";
2970  out << setprecision(3);
2971  }
2972  else
2973  out << HTML::kWhite << '\t';
2974 
2975  if (fSun.time.IsValid() && fMoon.time.IsValid())
2976  {
2977  if (fSun.visible)
2978  {
2979  out << " &#9788;";
2981  out << " [" << fSun.fSunSet12.MinutesTo() << "&darr;]";
2982  }
2983  else
2984  if (!fSun.visible && fMoon.visible)
2985  {
2986  out << " &#9790;";
2988  out << " [" << fMoon.disk << "%]";
2989  }
2990  }
2991  if (fDimDNS.online() && fDimDriveControl.state()>0xff)
2992  out << " <ERR>";
2994  out << " &otimes;";
2995  out << '\n';
2996 
2997  // ------------------- FSC ------------------
2999  {
3000  string col = HTML::kGreen;
3001  if (fFscControlTemperatureHist.back()>9)
3002  col = HTML::kYellow;
3003  if (fFscControlTemperatureHist.back()>15)
3004  col = HTML::kRed;
3005 
3006  out << col << '\t' << fFscControlTemperatureHist.back() << '\n';
3007  }
3008  else
3009  out << HTML::kWhite << '\n';
3010 
3011  // --------------- MagicWeather -------------
3013  {
3014  /*
3015  const float diff = fMagicWeatherHist[kTemp].back()-fMagicWeatherHist[kDew].back();
3016  string col1 = HTML::kRed;
3017  if (diff>0.3)
3018  col1 = HTML::kYellow;
3019  if (diff>0.7)
3020  col1 = HTML::kGreen;
3021  */
3022 
3023  const float wind = fMagicWeatherHist[kGusts].back();
3024  const float hum = fMagicWeatherHist[kHum].back();
3025  string col = HTML::kGreen;
3026  if (wind>35 || hum>95)
3027  col = HTML::kYellow;
3028  if (wind>45 || hum>98)
3029  col = HTML::kRed;
3030 
3031  out << col << '\t';
3032  out << fMagicWeatherHist[kHum].back() << '\t';
3033  out << setprecision(2);
3034  out << fMagicWeatherHist[kGusts].back() << '\n';
3035  out << setprecision(3);
3036  }
3037  else
3038  out << HTML::kWhite << "\n";
3039 
3040  // --------------- FtmControl -------------
3042  {
3043  string col = HTML::kGreen;
3044  if (!fFtmControlTriggerRateHist.empty())
3045  {
3046  if (fFtmControlTriggerRateHist.back()<15)
3047  col = HTML::kYellow;
3048  if (fFtmControlTriggerRateHist.back()>100)
3049  col = HTML::kRed;
3050 
3051  out << col << '\t' << fFtmControlTriggerRateHist.back() << " Hz";
3052  }
3053 
3054  if (bias_on)
3055  out << " (" << setprecision(4) << fFtmPatchThresholdMed << ')';
3056  out << '\n';
3057  }
3058  else
3059  out << HTML::kWhite << '\n';
3060 
3061  // --------------- BiasControl -------------
3062  const bool bias_off = fDimBiasControl.state()==BIAS::State::kVoltageOff;
3063  const bool bias_oc = fDimBiasControl.state()==BIAS::State::kOverCurrent;
3064 
3065  if (fDimDNS.online() && (bias_on || bias_off))
3066  {
3067 
3068  string col = fBiasControlVoltageMed>3?HTML::kGreen:HTML::kWhite;
3069  if (bias_on)
3070  {
3072  col = HTML::kYellow;
3074  col = HTML::kRed;
3075  }
3076 
3077  // Bias in overcurrent => Red
3078  if (bias_oc)
3079  col = HTML::kRed;
3080 
3081  // MCP in ReadyForDatataking/Configuring/Configured/TriggerOn/TakingData
3082  // and Bias not in "data-taking state' => Red
3083  if (fMcpConfigurationState>MCP::State::kIdle && !bias_on)
3084  col = HTML::kWhite;
3085 
3086  const bool cal = fDimFeedback.state()>=Feedback::State::kCalibrated;
3087 
3088  // Feedback is currently calibrating => Blue
3090  {
3091  out << HTML::kBlue << '\t';
3092  out << "***\t";
3093  out << "***\t";
3094  }
3095  else
3096  {
3097  out << col << '\t';
3098  out << setprecision(fBiasControlCurrentMed<100?2:3);
3099  out << (bias_off ? 0 : (fBiasControlCurrentMed<10?fBiasControlCurrentMed:floor(fBiasControlCurrentMed))) << '\t';
3100  if (bias_oc)
3101  out << "(OC) ";
3102  else
3103  {
3104  if (cal)
3105  {
3106  out << setprecision(fBiasControlCurrentMax<100?2:3);
3107  out << (bias_off ? 0 : (fBiasControlCurrentMax<10?fBiasControlCurrentMax:floor(fBiasControlCurrentMax)));
3108  }
3109  else
3110  out << "&mdash; ";
3111  }
3112  out << '\t';
3113  }
3115  out << setprecision(2) << fBiasControlPowerTot << " W";
3116  else
3117  out << setprecision(3) << (bias_off ? 0 : fBiasControlVoltageMed) << " V";
3118  out << '\n';
3119  }
3120  else
3121  out << HTML::kWhite << '\n';
3122 
3123  ofstream(fPath+"/fact.data") << out.str();
3124 
3125  // ==============================================================
3126 
3127  out.str("");
3128  out << Header(now) << '\t' << (!fErrorList.empty()) << '\t' << (fDimControl.state()>0) << '\n';
3129 
3130  if (!fDimDNS.online())
3131  out << HTML::kWhite << "\tOffline\n\n\n\n\n\n\n\n\n\n\n\n\n";
3132  else
3133  {
3134  ostringstream dt;
3135  dt << (Time()-fRunTime);
3136 
3137  out << HTML::kGreen << '\t' << fDimDNS.version() << '\n';
3138 
3139  out << GetStateHtml(fDimControl, 0);
3141  out << GetStateHtml(fDimDataLogger, 1);
3143  out << GetStateHtml(fDimTimeCheck, 1);
3163  out << GetStateHtml(fDimChat, 0);
3164  out << GetStateHtml(fDimSkypeClient, 1);
3165 
3166  string col = HTML::kRed;
3167  if (fFreeSpace>uint64_t(199999999999))
3168  col = HTML::kYellow;
3169  if (fFreeSpace>uint64_t(999999999999))
3170  col = HTML::kGreen;
3171  if (fFreeSpace==UINT64_MAX)
3172  col = HTML::kWhite;
3173 
3174  out << col << '\t' << Tools::Scientific(fFreeSpace) << "B\n";
3175 
3176  col = HTML::kRed;
3177  if (freedaq>uint64_t(999999999999))
3178  col = HTML::kYellow;
3179  if (freedaq>uint64_t(149999999999))
3180  col = HTML::kGreen;
3181  if (freedaq==UINT64_MAX)
3182  col = HTML::kWhite;
3183 
3184  out << col << '\t' << Tools::Scientific(freedaq) << "B\n";
3185 
3186  out << HTML::kGreen << '\t' << dt.str().substr(0, dt.str().length()-7) << '\n';
3187  }
3188 
3189  ofstream(fPath+"/status.data") << out.str();
3190 
3191  if (now-fLastAstroCalc>boost::posix_time::seconds(15))
3192  {
3193  UpdateAstronomy();
3194  fLastAstroCalc = now;
3195  }
3196 
3198  }
DimDescribedState fDimGpsControl
Definition: smartfact.cc:639
DimDescribedState fDimPwrControl
Definition: smartfact.cc:644
DimDescribedState fDimPfMiniControl
Definition: smartfact.cc:638
int32_t fFtmControlTriggerRateTooLow
Definition: smartfact.cc:575
deque< float > fDriveControlTrackingDevHist
Definition: smartfact.cc:567
DimDescribedState fDimMagicWeather
Definition: smartfact.cc:629
static const string kYellow
Definition: smartfact.cc:75
uint64_t JavaDate() const
Definition: Time.h:111
deque< float > fFscControlTemperatureHist
Definition: smartfact.cc:553
DimDescribedState fDimDriveControl
Definition: smartfact.cc:627
Adds some functionality to boost::posix_time::ptime for our needs.
Definition: Time.h:30
deque< float > fPfMiniHumidityHist
Definition: smartfact.cc:557
uint32_t NightAsInt() const
Definition: Time.cc:397
bool visible
Definition: smartfact.cc:106
DimDescribedState fDimLidControl
Definition: smartfact.cc:645
Time fSunSet12
Definition: smartfact.cc:98
const int32_t & state() const
Definition: DimState.h:80
DimDescribedState fDimDataLogger
Definition: smartfact.cc:626
DimDescribedState fDimMagicLidar
Definition: smartfact.cc:630
DimDescribedState fDimChat
Definition: smartfact.cc:648
State description() const
Definition: DimState.h:160
FTM and FTUs are being reconfigured.
Definition: HeadersFTM.h:22
std::ostream & Out() const
Definition: MessageImp.h:73
DimDescribedState fDimAgilentControl80
Definition: smartfact.cc:643
EventHist fControlAlarmHist
Definition: smartfact.cc:528
DimDescribedState fDimFeedback
Definition: smartfact.cc:633
std::string SecondsTo(const Time &=Time()) const
Definition: Time.cc:291
std::string version() const
Definition: DimState.h:236
bool fLastRunFinishedWithZeroEvents
Definition: smartfact.cc:537
DimDescribedState fDimMcp
Definition: smartfact.cc:625
DimDescribedState fDimSkypeClient
Definition: smartfact.cc:649
deque< float > fFtmControlTriggerRateHist
Definition: smartfact.cc:574
Time time
Definition: moon.cc:16
DimDescribedState fDimAgilentControl24
Definition: smartfact.cc:641
DimDescribedState fDimTngWeather
Definition: smartfact.cc:631
DimDescribedState fDimAgilentControl50
Definition: smartfact.cc:642
string Header(const Time &d)
Definition: smartfact.cc:603
string fDriveControlSourceName
Definition: smartfact.cc:564
string fDriveControlPointingAz
Definition: smartfact.cc:563
static const string kBlue
Definition: smartfact.cc:78
DimDescribedState fDimTimeCheck
Definition: smartfact.cc:628
string GetStateHtml(const DimState &state, int green) const
Definition: smartfact.cc:2228
static const string kWhite
Definition: smartfact.cc:74
bool IsValid() const
Definition: Time.h:90
string fMcpConfigurationName
Definition: smartfact.cc:534
float hum
Definition: HeadersPFmini.h:55
int state
Definition: smartfact.cc:101
std::string Form(const char *fmt,...)
Definition: tools.cc:45
bool SetError(bool b, const string &err)
Definition: smartfact.cc:2262
std::string Scientific(uint64_t val)
Definition: tools.cc:148
deque< float > fMagicWeatherHist[kWeatherEnd]
Definition: smartfact.cc:540
static const string kGreen
Definition: smartfact.cc:77
int64_t fMcpConfigurationMaxEvents
Definition: smartfact.cc:533
DimDescribedState fDimRateScan
Definition: smartfact.cc:647
vector< uint32_t > fFadControlDrsRuns
Definition: smartfact.cc:572
void SetAudio(const string &name)
Definition: smartfact.cc:615
DimDescribedState fDimBiasControl
Definition: smartfact.cc:634
double disk
Definition: moon.cc:24
set< string > fErrorList
Definition: smartfact.cc:589
DimDescribedState fDimTemperature
Definition: smartfact.cc:632
DimDescribedState fDimSqmControl
Definition: smartfact.cc:640
Return to feeserver c CVS log Up to[MAIN] dcscvs FeeServer feeserver src Wed FeeServer_v0 v0 dev
Definition: feeserver.c:5
bool online() const
Definition: DimState.h:82
int64_t fMcpConfigurationMaxTime
Definition: smartfact.cc:532
DimDescribedState fDimFtmControl
Definition: smartfact.cc:635
std::string MinutesTo(const Time &=Time()) const
Definition: Time.cc:281
Time time
Definition: smartfact.cc:88
static const string kRed
Definition: smartfact.cc:76
DimDescribedState fDimFadControl
Definition: smartfact.cc:636
deque< float > fTemperatureControlHist
Definition: smartfact.cc:560
DimDescribedState fDimFscControl
Definition: smartfact.cc:637
int64_t fFadControlNumEvents
Definition: smartfact.cc:569
DimDescribedState fDimRateControl
Definition: smartfact.cc:646
DimControl fDimControl
Definition: smartfact.cc:624
bool visible
Definition: moon.cc:26
int32_t fMcpConfigurationState
Definition: smartfact.cc:531

+ Here is the call graph for this function: