#ifndef ROOT_TQpDataBase
#define ROOT_TQpDataBase
#ifndef ROOT_TError
#include "TError.h"
#endif
#ifndef ROOT_TQpVar
#include "TQpVar.h"
#endif
#ifndef ROOT_TMatrixD
#include "TMatrixD.h"
#endif
class TQpDataBase : public TObject
{
protected:
static void RandomlyChooseBoundedVariables(TVectorD &x,TVectorD &dualx,TVectorD &blx,TVectorD &ixlow,
TVectorD &bux,TVectorD &ixupp,Double_t &ix,Double_t percentLowerOnly,
Double_t percentUpperOnly,Double_t percentBound);
public:
Int_t fNx;
Int_t fMy;
Int_t fMz;
TVectorD fG;
TVectorD fBa;
TVectorD fXupBound;
TVectorD fXupIndex;
TVectorD fXloBound;
TVectorD fXloIndex;
TVectorD fCupBound;
TVectorD fCupIndex;
TVectorD fCloBound;
TVectorD fCloIndex;
TQpDataBase();
TQpDataBase(Int_t nx,Int_t my,Int_t mz);
TQpDataBase(const TQpDataBase &another);
virtual ~TQpDataBase() {}
virtual void PutQIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
virtual void PutAIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
virtual void PutCIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
virtual void Qmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
virtual void Amult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
virtual void Cmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
virtual void ATransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
virtual void CTransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
virtual void GetDiagonalOfQ(TVectorD &dQ) = 0;
virtual TVectorD &GetG () { return fG; }
virtual TVectorD &GetBa () { return fBa; }
virtual TVectorD &GetXupperBound () { return fXupBound; }
virtual TVectorD &GetiXupperBound() { return fXupIndex; }
virtual TVectorD &GetXlowerBound () { return fXloBound; }
virtual TVectorD &GetiXlowerBound() { return fXloIndex; }
virtual TVectorD &GetSupperBound () { return fCupBound; }
virtual TVectorD &GetiSupperBound() { return fCupIndex; }
virtual TVectorD &GetSlowerBound () { return fCloBound; }
virtual TVectorD &GetiSlowerBound() { return fCloIndex; }
virtual Double_t DataNorm () = 0;
virtual void DataRandom (TVectorD &x,TVectorD &y,TVectorD &z,TVectorD &s) = 0;
virtual Double_t ObjectiveValue(TQpVar *vars) = 0;
TQpDataBase &operator= (const TQpDataBase &source);
ClassDef(TQpDataBase,1)
};
#endif