diff -Nru fesslix-headers-1506+74+11+9~ubuntu16.04.1/debian/bzr-builder.manifest fesslix-headers-1507+74+11+9~ubuntu16.04.1/debian/bzr-builder.manifest --- fesslix-headers-1506+74+11+9~ubuntu16.04.1/debian/bzr-builder.manifest 2022-06-03 09:39:44.000000000 +0000 +++ fesslix-headers-1507+74+11+9~ubuntu16.04.1/debian/bzr-builder.manifest 2022-06-23 13:03:15.000000000 +0000 @@ -1,5 +1,5 @@ -# bzr-builder format 0.3 deb-version 1506+74+11+9 -lp:fesslix revid:w.betz@fesslix.org-20220602094018-ntgqnorof38pkdvs +# bzr-builder format 0.3 deb-version 1507+74+11+9 +lp:fesslix revid:w.betz@fesslix.org-20220623124735-4je7ybtdv18whq1t merge headers lp:fesslix/headers revid:wolfgang.betz@fesslix.org-20160617160613-oejdz6yq1w8o1e2n nest-part flxlib lp:fesslix/flxlib src src_lib revid:w.betz@fesslix.org-20220531184829-1bbk94w0ga8vjrzq nest-part flxeigen lp:fesslix/flxeigen src src_eigen revid:wolfgang.betz@fesslix.org-20180130051605-ujtj7yiguh9xzm51 diff -Nru fesslix-headers-1506+74+11+9~ubuntu16.04.1/debian/changelog fesslix-headers-1507+74+11+9~ubuntu16.04.1/debian/changelog --- fesslix-headers-1506+74+11+9~ubuntu16.04.1/debian/changelog 2022-06-03 09:39:44.000000000 +0000 +++ fesslix-headers-1507+74+11+9~ubuntu16.04.1/debian/changelog 2022-06-23 13:03:15.000000000 +0000 @@ -1,8 +1,8 @@ -fesslix-headers (1506+74+11+9~ubuntu16.04.1) xenial; urgency=low +fesslix-headers (1507+74+11+9~ubuntu16.04.1) xenial; urgency=low * Auto build. - -- Wolfgang Betz Fri, 03 Jun 2022 09:39:44 +0000 + -- Wolfgang Betz Thu, 23 Jun 2022 13:03:15 +0000 fesslix-headers (0.624-0ubuntu1) precise; urgency=low diff -Nru fesslix-headers-1506+74+11+9~ubuntu16.04.1/src/flxobjrbrv.cpp fesslix-headers-1507+74+11+9~ubuntu16.04.1/src/flxobjrbrv.cpp --- fesslix-headers-1506+74+11+9~ubuntu16.04.1/src/flxobjrbrv.cpp 2022-06-03 09:39:39.000000000 +0000 +++ fesslix-headers-1507+74+11+9~ubuntu16.04.1/src/flxobjrbrv.cpp 2022-06-23 13:03:07.000000000 +0000 @@ -37,7 +37,8 @@ objReadBox->insert("rbrv_mvn_cond_obsv", new FlxObjReadRBRV_mvn_cond_obsv()); objReadBox->insert("rbrv_psd", new FlxObjReadRBRV_psd()); objReadBox->insert("rbrv_sphere", new FlxObjReadRBRV_sphere()); - objReadBox->insert("rbrv_vfset", new FlxObjReadRBRV_vfset()); + objReadBox->insert("rbrv_dirichlet", new FlxObjReadRBRV_vfset(1)); + objReadBox->insert("rbrv_vfset", new FlxObjReadRBRV_vfset(0)); objReadBox->insert("rbrv_print", new FlxObjReadRBRV_print()); objReadBox->insert("rbrv_info", new FlxObjReadRBRV_info()); objReadBox->insert("rbrv_vec_get", new FlxObjReadRBRV_vec_get()); @@ -866,8 +867,10 @@ } } -FlxObjRBRV_vfset::FlxObjRBRV_vfset(const bool dolog, FlxString* set_name, std::vector< FlxString* > set_parents, FlxFunction* Nfun, FlxMtxConstFun* vecfun) -: FlxObjBase(dolog), set_name(set_name), set_parents(set_parents), Nfun(Nfun), vecfun(vecfun) + + +FlxObjRBRV_vfset::FlxObjRBRV_vfset(const bool dolog, FlxString* set_name, std::vector< FlxString* > set_parents, FlxFunction* Nfun, FlxMtxConstFun* vecfun, const tuint type) +: FlxObjBase(dolog), type(type), set_name(set_name), set_parents(set_parents), Nfun(Nfun), vecfun(vecfun) { } @@ -888,16 +891,25 @@ RBRV_set_baseDPtr parents; RBRV_entry_read_base::generate_set_base(data->rbrv_box,name,set_parents,parents); const tuint Nparents = set_parents.size(); - RBRV_vfset* ts = NULL; + RBRV_set_parents* ts = NULL; try { const tuint Ndim = Nfun->cast2tuint(false); const std::string family = name + "::"; - ts = new RBRV_vfset(false,name,false,Ndim,new FlxMtxConstFun(*vecfun),Nparents,parents); + switch (type) { + case 0: + ts = new RBRV_vfset(false,name,false,Ndim,new FlxMtxConstFun(*vecfun),Nparents,parents); + break; + case 1: + ts = new RBRV_dirichlet(false,name,false,Ndim,new FlxMtxConstFun(*vecfun),Nparents,parents); + break; + default: + throw FlxException_Crude("FlxObjRBRV_vfset::task_01"); + } parents = NULL; data->rbrv_box.register_set(ts); GlobalVar.slog(4) << "rbrv_noise: created new set '" << name << "'." << std::endl; } catch (FlxException& e) { - FLXMSG("FlxObjRBRV_noise::task",1); + FLXMSG("FlxObjRBRV_vfset::task_02",1); if (parents) delete [] parents; if (ts) delete ts; throw; @@ -918,7 +930,7 @@ vecfun = new FlxMtxConstFun(true); reader->getChar('}'); read_optionalPara(false); - return new FlxObjRBRV_vfset(get_doLog(), set_name, set_parents, Nfun, vecfun ); + return new FlxObjRBRV_vfset(get_doLog(), set_name, set_parents, Nfun, vecfun, type ); } catch (FlxException& e) { FLXMSG("FlxObjReadRBRV_rvset::read",1); delete set_name; @@ -2042,5 +2054,120 @@ counter += get_NOX_only_this(); } +// ------------------------------------------------------------------------------------------------ + +RBRV_dirichlet::RBRV_dirichlet(const bool internal, const std::string& name, const bool noID, const tuint Nentries, FlxMtxConstFun* vecfun, const tuint Nparents, RBRV_set_base** const parents, flxVec* avec) +: RBRV_set_parents(internal,Nentries,name,Nparents,parents,noID), Nentries(Nentries), x_of_set(Nentries), alpha_vec(Nentries), vecfun(vecfun) +{ + if (avec) { + if (vecfun || avec->get_N()!=Nentries) { + if (vecfun) { + delete vecfun; + vecfun = NULL; + } + throw FlxException_Crude("RBRV_dirichlet::RBRV_dirichlet"); + } + alpha_vec = *avec; + } +} + +RBRV_dirichlet::~RBRV_dirichlet() +{ + if (vecfun) delete vecfun; +} + +void RBRV_dirichlet::get_pars() +{ + // get alpha-values (parameters of Dirichlet distribution) + if (vecfun) { + const std::string vecName = vecfun->eval(); + tdouble* vp = data->ConstMtxBox.get_Vec(Nentries,vecName,true); + flxVec tv(vp,Nentries); + alpha_vec = tv; + return; + } +} + +void RBRV_dirichlet::transform_y2x() +{ + get_pars(); + // use Gamma distribution for random number generation + const tdouble*const y_vec = y_of_set.get_tmp_vptr_const(); + for (tuint i=0;i set_parents; FlxFunction* Nfun; @@ -379,7 +422,7 @@ void task(); public: - FlxObjRBRV_vfset ( const bool dolog, FlxString* set_name, std::vector set_parents, FlxFunction* Nfun, FlxMtxConstFun* vecfun ); + FlxObjRBRV_vfset ( const bool dolog, FlxString* set_name, std::vector set_parents, FlxFunction* Nfun, FlxMtxConstFun* vecfun, const tuint type ); ~FlxObjRBRV_vfset(); }; @@ -387,10 +430,17 @@ * @brief object read class: for FlxObjRBRV_sphere */ class FlxObjReadRBRV_vfset : public FlxObjReadBase { + protected: + const tuint type; + // 0: vfset + // 1: dirichlet variable public: + FlxObjReadRBRV_vfset(const tuint type) : type(type) {} FlxObjBase* read (); }; +//------------------------------------------------------------ + /** * @brief object class: defines a RBRV_print */ diff -Nru fesslix-headers-1506+74+11+9~ubuntu16.04.1/src/flxversion.h fesslix-headers-1507+74+11+9~ubuntu16.04.1/src/flxversion.h --- fesslix-headers-1506+74+11+9~ubuntu16.04.1/src/flxversion.h 2022-06-03 09:39:39.000000000 +0000 +++ fesslix-headers-1507+74+11+9~ubuntu16.04.1/src/flxversion.h 2022-06-23 13:03:07.000000000 +0000 @@ -19,8 +19,8 @@ #define fesslix_flxversion_H -#define VERSION_REV 1506 -#define VERSION_DATE "2022-06-02" +#define VERSION_REV 1507 +#define VERSION_DATE "2022-06-23" #endif // fesslix_flxversion_H