00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef ROOT_TQpDataBase
00044 #define ROOT_TQpDataBase
00045
00046 #ifndef ROOT_TError
00047 #include "TError.h"
00048 #endif
00049
00050 #ifndef ROOT_TQpVar
00051 #include "TQpVar.h"
00052 #endif
00053
00054 #ifndef ROOT_TMatrixD
00055 #include "TMatrixD.h"
00056 #endif
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 class TQpDataBase : public TObject
00067 {
00068
00069 protected:
00070
00071
00072
00073 static void RandomlyChooseBoundedVariables(TVectorD &x,TVectorD &dualx,TVectorD &blx,TVectorD &ixlow,
00074 TVectorD &bux,TVectorD &ixupp,Double_t &ix,Double_t percentLowerOnly,
00075 Double_t percentUpperOnly,Double_t percentBound);
00076
00077 public:
00078
00079 Int_t fNx;
00080 Int_t fMy;
00081 Int_t fMz;
00082
00083 TVectorD fG;
00084 TVectorD fBa;
00085 TVectorD fXupBound;
00086 TVectorD fXupIndex;
00087 TVectorD fXloBound;
00088 TVectorD fXloIndex;
00089 TVectorD fCupBound;
00090 TVectorD fCupIndex;
00091 TVectorD fCloBound;
00092 TVectorD fCloIndex;
00093
00094 TQpDataBase();
00095 TQpDataBase(Int_t nx,Int_t my,Int_t mz);
00096 TQpDataBase(const TQpDataBase &another);
00097 virtual ~TQpDataBase() {}
00098
00099 virtual void PutQIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
00100 virtual void PutAIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
00101 virtual void PutCIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
00102
00103 virtual void Qmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
00104 virtual void Amult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
00105 virtual void Cmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
00106 virtual void ATransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
00107 virtual void CTransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
00108
00109 virtual void GetDiagonalOfQ(TVectorD &dQ) = 0;
00110
00111 virtual TVectorD &GetG () { return fG; }
00112 virtual TVectorD &GetBa () { return fBa; }
00113
00114 virtual TVectorD &GetXupperBound () { return fXupBound; }
00115 virtual TVectorD &GetiXupperBound() { return fXupIndex; }
00116 virtual TVectorD &GetXlowerBound () { return fXloBound; }
00117 virtual TVectorD &GetiXlowerBound() { return fXloIndex; }
00118 virtual TVectorD &GetSupperBound () { return fCupBound; }
00119 virtual TVectorD &GetiSupperBound() { return fCupIndex; }
00120 virtual TVectorD &GetSlowerBound () { return fCloBound; }
00121 virtual TVectorD &GetiSlowerBound() { return fCloIndex; }
00122
00123 virtual Double_t DataNorm () = 0;
00124 virtual void DataRandom (TVectorD &x,TVectorD &y,TVectorD &z,TVectorD &s) = 0;
00125 virtual Double_t ObjectiveValue(TQpVar *vars) = 0;
00126
00127 TQpDataBase &operator= (const TQpDataBase &source);
00128
00129 ClassDef(TQpDataBase,1)
00130 };
00131 #endif