Changeset 956 for library/bdm/stat/exp_family.h
- Timestamp:
- 05/19/10 03:56:03 (14 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/stat/exp_family.h
r951 r956 133 133 return std::numeric_limits< double >::max(); 134 134 } 135 void from_setting(const Setting& set){ 136 pdf::from_setting(set); 137 g=UI::build<fnc>(set,"g",UI::compulsory); 138 validate(); 139 } 140 void to_setting(Setting &set) const{ 141 pdf::to_setting(set); 142 UI::save(g.get(), set, "g"); 143 } 144 void validate() { 145 dim = g->dimension(); 146 dimc = g->dimensionc(); 147 } 135 void from_setting(const Setting& set); 136 void to_setting(Setting &set) const; 137 void validate(); 148 138 }; 149 139 UIREGISTER(mgdirac); … … 186 176 void to_setting ( Setting &root ) const ; 187 177 188 void validate() { 189 bdm_assert ( mu.length() == R.rows(), "mu and R parameters do not match" ); 190 dim = mu.length(); 191 } 178 void validate(); 192 179 //!@} 193 180 … … 336 323 } 337 324 void validate() { 325 eEF::validate(); 338 326 dim = H.rows(); 339 327 } … … 460 448 \sa log_level_enums 461 449 */ 462 void from_setting ( const Setting &set ) { 463 epdf::from_setting ( set ); 464 UI::get ( dimx, set, "dimx", UI::compulsory ); 465 if ( !UI::get ( nu, set, "nu", UI::optional ) ) { 466 nu = -1; 467 } 468 mat V; 469 if ( !UI::get ( V, set, "V", UI::optional ) ) { 470 vec dV; 471 UI::get ( dV, set, "dV", UI::compulsory ); 472 set_parameters ( dimx, ldmat ( dV ), nu ); 473 validate(); 474 475 } else { 476 set_parameters ( dimx, V, nu ); 477 validate(); 478 } 479 } 480 481 void to_setting ( Setting& set ) const { 482 epdf::to_setting ( set ); 483 UI::save ( dimx, set, "dimx" ); 484 UI::save ( V.to_mat(), set, "V" ); 485 UI::save ( nu, set, "nu" ); 486 }; 487 488 void validate() { 489 dim = dimx * ( dimx + nPsi ); 490 491 // check sizes, rvs etc. 492 // also check if RV are meaningful!!! 493 // meaningful = rv for theta and rv for r are split! 494 } 450 void from_setting ( const Setting &set ); 451 void to_setting ( Setting& set ) const; 452 void validate(); 495 453 void log_register ( bdm::logger& L, const string& prefix ); 496 454 … … 578 536 \endcode 579 537 */ 580 void from_setting ( const Setting &set ) { 581 epdf::from_setting ( set ); 582 UI::get ( beta, set, "beta", UI::compulsory ); 583 validate(); 584 } 585 void validate() { 586 //check rv 587 dim = beta.length(); 588 } 589 590 void to_setting ( Setting &set ) const 591 { 592 eEF::to_setting( set ); 593 UI::save( beta, set, "beta" ); 594 } 538 void from_setting ( const Setting &set ); 539 void validate(); 540 void to_setting ( Setting &set ) const; 595 541 }; 596 542 UIREGISTER ( eDirich ); … … 632 578 \endcode 633 579 */ 634 void from_setting ( const Setting &set ) { 635 pdf::from_setting ( set ); // reads rv and rvc 636 if ( _rv()._dsize() > 0 ) { 637 rvc = _rv().copy_t ( -1 ); 638 } 639 vec beta0; 640 if ( !UI::get ( beta0, set, "beta0", UI::optional ) ) { 641 beta0 = ones ( _rv()._dsize() ); 642 } 643 if ( !UI::get ( betac, set, "betac", UI::optional ) ) { 644 betac = 0.1 * ones ( _rv()._dsize() ); 645 } 646 _beta = beta0; 647 648 UI::get ( k, set, "k", UI::compulsory ); 649 validate(); 650 } 651 void validate() { 652 pdf_internal<eDirich>::validate(); 653 bdm_assert ( _beta.length() == betac.length(), "beta0 and betac are not compatible" ); 654 if ( _rv()._dsize() > 0 ) { 655 bdm_assert ( ( _rv()._dsize() == dimension() ) , "Size of rv does not match with beta" ); 656 } 657 dimc = _beta.length(); 658 }; 580 void from_setting ( const Setting &set ); 581 void to_setting (Setting &set) const; 582 void validate(); 659 583 }; 660 584 UIREGISTER ( mDirich ); … … 765 689 \endcode 766 690 */ 767 void from_setting ( const Setting &set ) { 768 epdf::from_setting ( set ); // reads rv 769 UI::get ( alpha, set, "alpha", UI::compulsory ); 770 UI::get ( beta, set, "beta", UI::compulsory ); 771 validate(); 772 } 773 void validate() { 774 bdm_assert ( alpha.length() == beta.length(), "parameters do not match" ); 775 dim = alpha.length(); 776 } 691 void from_setting ( const Setting &set ); 692 void to_setting ( Setting &set ) const; 693 void validate(); 777 694 }; 778 695 UIREGISTER ( egamma ); … … 888 805 \endcode 889 806 */ 890 void from_setting ( const Setting &set ) { 891 epdf::from_setting ( set ); // reads rv and rvc 892 893 UI::get ( high, set, "high", UI::compulsory ); 894 UI::get ( low, set, "low", UI::compulsory ); 895 set_parameters ( low, high ); 896 validate(); 897 } 898 void validate() { 899 bdm_assert ( high.length() == low.length(), "Incompatible high and low vectors" ); 900 dim = high.length(); 901 bdm_assert ( min ( distance ) > 0.0, "bad support" ); 902 } 807 void from_setting ( const Setting &set ); 808 void to_setting (Setting &set) const; 809 void validate(); 903 810 }; 904 811 UIREGISTER ( euni ); … … 922 829 iepdf.set_parameters ( -delta, delta ); 923 830 } 924 831 void to_setting (Setting &set) const { 832 pdf::to_setting ( set ); 833 UI::save( iepdf.mean(), set, "delta"); 834 UI::save(mean, set, "mean"); 835 } 925 836 void validate(){ 837 pdf_internal<euni>::validate(); 926 838 dimc = mean->dimensionc(); 927 iepdf.validate();839 928 840 } 929 841 … … 1006 918 UI::get ( R0, set, "R", UI::compulsory ); 1007 919 set_parameters ( A, mu_const, R0 ); 1008 validate();1009 }; 1010 920 } 921 922 void to_setting (Setting &set) const { 1011 923 pdf::to_setting(set); 1012 924 UI::save ( A, set, "A"); … … 1014 926 UI::save ( _R(), set, "R"); 1015 927 } 1016 void validate() { 928 929 void validate() { 1017 930 pdf_internal<TEpdf<sq_T> >::validate(); 1018 931 if (mu_const.length()==0) { // default in from_setting … … 1070 983 */ 1071 984 1072 void from_setting ( const Setting &set ) { 985 986 void from_setting ( const Setting &set ) { 1073 987 pdf::from_setting ( set ); 1074 988 shared_ptr<fnc> g = UI::build<fnc> ( set, "g", UI::compulsory ); … … 1084 998 //validate(); 1085 999 } 1086 void validate() { 1000 1001 1002 void to_setting (Setting &set) const { 1003 UI::save( g,set, "g"); 1004 UI::save(iepdf._R().to_mat(),set, "R"); 1005 1006 } 1007 1008 1009 1010 void validate() { 1087 1011 this->iepdf.validate(); 1088 1012 bdm_assert ( g->dimension() == this->iepdf.dimension(), "incompatible function" ); … … 1091 1015 this->iepdf.validate(); 1092 1016 } 1017 1093 1018 }; 1094 1019 … … 1128 1053 1129 1054 void validate() { 1055 mlnorm<ldmat, enorm>::validate(); 1130 1056 bdm_assert ( A.rows() == mu_const.length(), "mlstudent: A vs. mu mismatch" ); 1131 1057 bdm_assert ( _R.rows() == A.rows(), "mlstudent: A vs. R mismatch" ); … … 1175 1101 \endcode 1176 1102 */ 1177 void from_setting ( const Setting &set ) { 1178 pdf::from_setting ( set ); // reads rv and rvc 1179 vec betatmp; // ugly but necessary 1180 UI::get ( betatmp, set, "beta", UI::compulsory ); 1181 UI::get ( k, set, "k", UI::compulsory ); 1182 set_parameters ( k, betatmp ); 1183 validate(); 1184 } 1185 void validate() { 1186 pdf_internal<egamma>::validate(); 1187 1188 dim = _beta.length(); 1189 dimc = _beta.length(); 1190 } 1103 void from_setting ( const Setting &set ); 1104 void to_setting (Setting &set) const; 1105 void validate(); 1191 1106 }; 1192 1107 UIREGISTER ( mgamma ); … … 1236 1151 1237 1152 void validate (){ 1238 iepdf.validate();1153 pdf_internal<eigamma>::validate(); 1239 1154 dimc = dimension(); 1240 1155 }; … … 1338 1253 */ 1339 1254 void from_setting ( const Setting &set ); 1340 1255 void to_setting (Setting &set) const; 1341 1256 // TODO dodelat void to_setting( Setting &set ) const; 1342 1257 }; … … 1395 1310 1396 1311 void validate(){ 1397 iepdf.validate();1312 pdf_internal<elognorm>::validate(); 1398 1313 dimc = iepdf.dimension(); 1399 1314 } … … 1415 1330 */ 1416 1331 void from_setting ( const Setting &set ); 1332 void to_setting (Setting &set) const; 1417 1333 1418 1334 // TODO dodelat void to_setting( Setting &set ) const; … … 1449 1365 1450 1366 virtual void validate (){ 1367 epdf::validate(); 1451 1368 dim = p * p; 1452 1369 } … … 1519 1436 1520 1437 virtual void validate (){ 1438 epdf::validate(); 1521 1439 W.validate(); 1522 1440 dim = W.dimension(); … … 1594 1512 1595 1513 void validate(){ 1596 iepdf.validate();1514 pdf_internal<eiWishartCh>::validate(); 1597 1515 dimc = iepdf.dimension(); 1598 1516 } … … 1657 1575 samples = Av; 1658 1576 }; 1659 virtual void validate (){ 1660 bdm_assert (samples.length()==w.length(),"samples and weigths are of different lengths"); 1661 n = w.length(); 1662 if (n>0) 1663 pdf::dim = samples ( 0 ).length(); 1664 } 1577 virtual void validate (); 1665 1578 //! Potentially dangerous, use with care. 1666 1579 vec& _w() { … … 1709 1622 void qbounds ( vec &lb, vec &ub, double perc = 0.95 ) const; 1710 1623 1711 void to_setting ( Setting &set ) const { 1712 epdf::to_setting( set ); 1713 UI::save ( samples, set, "samples" ); 1714 UI::save ( w, set, "w" ); 1715 } 1716 1717 void from_setting ( const Setting &set ) { 1718 epdf::from_setting( set ); 1719 1720 UI::get( samples, set, "samples", UI::compulsory ); 1721 UI::get ( w, set, "w", UI::compulsory ); 1722 validate(); 1723 } 1624 void to_setting ( Setting &set ) const; 1625 void from_setting ( const Setting &set ); 1724 1626 1725 1627 }; … … 1745 1647 UI::get ( Rtmp, set, "R", UI::compulsory ); 1746 1648 R = Rtmp; // conversion 1747 validate();1748 1649 } 1650 1651 template<class sq_T> 1652 void enorm<sq_T>::validate() { 1653 eEF::validate(); 1654 bdm_assert ( mu.length() == R.rows(), "mu and R parameters do not match" ); 1655 dim = mu.length(); 1656 } 1749 1657 1750 1658 template<class sq_T> … … 1754 1662 UI::save ( R.to_mat(), set, "R"); 1755 1663 } 1664 1665 1756 1666 1757 1667 template<class sq_T>