00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef ETIRM_ICRF_GPCM_H_
00020 #define ETIRM_ICRF_GPCM_H_
00021
00022 #ifdef ETIRM_NO_DIR_PREFIX
00023 #include "etirmtypes.h"
00024 #else
00025 #include "etirm/etirmtypes.h"
00026 #endif
00027
00028 #include <string>
00029
00030 namespace etirm
00031 {
00032
00033
00034
00035 class ICRF_GPCM
00036 {
00037
00038 public:
00039
00040
00041 ICRF_GPCM(int ncat, Response firstResp) :
00042 mNumCat(ncat), mNumParameters(ncat), mFirstResponse(firstResp), mExpz(ncat)
00043 {
00044 }
00045
00046 Real ICRF(Response r, const RealVector ¶m, Real theta) const;
00047
00048
00049
00050
00051
00052 Real OpenICRF(Response r, const RealVector ¶m, Real theta) const;
00053
00054
00055 void ICRFDeriv1(Response r, const RealVector ¶m, Real theta, RealVector &deriv);
00056
00057
00058 bool GradientDefined() const
00059 {
00060 return true;
00061 }
00062
00063
00064 bool HessianDefined() const
00065 {
00066 return false;
00067 }
00068
00069
00070 void Scale(Real slope, Real intercept, RealVector ¶m);
00071
00072
00073 int NumParameters() const
00074 {
00075 return mNumParameters;
00076 }
00077
00078
00079 int NumAllParameters() const
00080 {
00081 return mNumParameters;
00082 }
00083
00084
00085
00086
00087 int NumRespCat() const
00088 {
00089 return mNumCat;
00090 }
00091
00092
00093 std::string Name() const
00094 {
00095 return std::string("GPCM");
00096 }
00097
00098
00099 IRTModel Model() const
00100 {
00101 return GPCM;
00102 }
00103
00104
00105 void GetAllParameters(const RealVector &estParam, RealVector &allParam) const;
00106
00107
00108
00109 template <class I> void SetAllParameters(I begin_param, I end_param, RealVector &estParam)
00110 {
00111
00112 if ((end_param - begin_param) != mNumParameters || estParam.size() != mNumParameters)
00113 throw InvalidArgument("Wrong number of parameters", "ICRF_GPCM::SetAllParameters");
00114
00115 RealVector::iterator ie = estParam.begin();
00116 while (begin_param != end_param)
00117 {
00118 *ie = *begin_param;
00119 ++ie;
00120 ++begin_param;
00121 }
00122 }
00123
00124 private:
00125
00126 int mNumCat;
00127
00128 int mNumParameters;
00129
00130 Response mFirstResponse;
00131
00132 RealVector mExpz;
00133
00134
00135
00136
00137
00138 Real mDenom;
00139
00140 Real mDenom2;
00141
00142 void ExpZ(const RealVector ¶m, Real theta);
00143
00144
00145 };
00146
00147 }
00148
00149 #endif // ETIRM_ICRF_GPCM_H_