00001 00011 #ifndef _QBASE_LOAD_CURVE_HH_ 00012 #define _QBASE_LOAD_CURVE_HH_ 00013 00014 #include "QCuore.hh" 00015 #include "QLCSlowConfig.hh" 00016 00017 #include <map> 00018 #include <vector> 00019 #include <string> 00020 #include <ostream> 00021 00022 namespace Cuore {class QEvent;} 00023 using namespace Cuore; 00024 class QLCMeasConfig; 00025 00026 class QBaseLoadCurve { 00027 00028 public: 00029 00035 enum QLCProcedure_t { 00036 QDefault_p, 00038 QSequential_p, 00040 QBisection_p 00042 }; 00043 00048 QBaseLoadCurve(unsigned short lg); 00049 00051 virtual ~QBaseLoadCurve(); 00052 00062 virtual QLCProcedure_t SetProcedure(QLCProcedure_t procedure) = 0; 00063 00074 virtual void AddMeasurement(const QEvent* const ev, 00075 const QLCSlowConfig* config) = 0; 00076 00078 unsigned short GetLg() const { return fLg; } 00079 00080 virtual void Dump(std::ostream& file) const = 0; 00081 protected: 00082 00091 virtual unsigned short 00092 FindMeasurement(QLCSlowConfig* refMeas, 00093 std::vector<unsigned short>& matching) const; 00094 00101 virtual unsigned short 00102 FindMostRecent(const std::vector<unsigned short>& measIds) const; 00103 00108 virtual bool ScheduleNextMeasurement() = 0; 00109 00111 QLCProcedure_t fProcedure; 00112 00117 std::map<unsigned short,QLCSlowConfig*> fMeasurements; 00118 00120 unsigned short fMeasurementId; 00121 00123 unsigned short fPointId; 00124 00126 const unsigned short fLg; 00127 }; 00128 00129 #endif // _QBASE_LOAD_CURVE_HH_