00001
00008 #ifndef _QLOAD_CURVE_HH_
00009 #define _QLOAD_CURVE_HH_
00010
00011 #include "QCuore.hh"
00012
00013 #include "QBaseLoadCurve.hh"
00014 #include "QLCMeasurement.hh"
00015 #include "QLCCurvePoint.hh"
00016 #include "QEvent.hh"
00017 #include "QRawEvent.hh"
00018
00019 class QLoadCurve : public QBaseLoadCurve {
00020
00021 public:
00022
00027 QLoadCurve(unsigned short lg);
00028
00030 virtual ~QLoadCurve();
00031
00040 virtual QLCProcedure_t SetProcedure(QLCProcedure_t procedure);
00041
00048 virtual void AddMeasurement(const QEvent* const ev,
00049 const QLCSlowConfig* config);
00050
00051 virtual void Dump(std::ostream& file) const;
00052
00058 void EnableStrictCheck(const bool enable) { fStrictCheck = enable; };
00059
00064 void SetMaxExternalBias(const float maxBias) { fMaxExternalBias = maxBias; }
00065
00070 void SetNumHpPerConfig(size_t min) { fNumHpPerConfig = min; }
00071
00076 void SetNumNoisePerConfig(size_t min) { fNumNoisePerConfig = min; }
00077
00078 protected:
00079
00091 virtual bool ProcessPoint(QLCCurvePoint* point);
00092
00100 virtual bool ProcessCurve() const;
00101
00112 virtual bool ScheduleNextMeasurement();
00113
00120 virtual bool ScheduleNextMeasSequential();
00121
00127 virtual void FillMeasurement(const QEvent* ev, QLCMeasurement* meas) const;
00128
00139 virtual bool ValidateMeasurement(const QLCMeasurement* meas);
00140
00149 virtual unsigned short FindPoint(const float bias) const;
00150
00157 virtual QLCCurvePoint* GetPoint(const float bias);
00158
00166 virtual size_t GetCurve(std::map<double, double>& points,
00167 const bool onlyDonePoints) const;
00168
00169 private:
00170 std::map<unsigned short, QLCCurvePoint*> fCurvePoints;
00171
00172 bool CheckSameOffsetAndGain(const std::vector<unsigned short>& measList,
00173 const QLCMeasurement* refMeas) const;
00174
00175 const QLCMeasurement* GetMeasurement(const unsigned short id) const;
00176
00181 const double fBaselineMax;
00182
00184 const int fPointsOverIP;
00185
00187 float fMaxExternalBias;
00188
00196 bool fStrictCheck;
00197
00198 size_t fNumNoisePerConfig;
00199 size_t fNumHpPerConfig;
00200 };
00201
00202 #endif // _QLOAD_CURVE_HH_