bool Jacobian_1to1::get_derivative_parameters(const string &par_name, double par_value, const ParamTransformSeq &par_trans, const ParameterGroupInfo &group_info, const ParameterInfo &ctl_par_info, vector<JacobianRun> &del_numeric_par_vec, bool phiredswh_flag) { bool success = false; double par_0 = par_value; double par_1; const ParameterGroupRec *g_rec = group_info.get_group_rec_ptr(par_name); if (g_rec->forcen == "ALWAYS_3" || phiredswh_flag == true) { // Central Difference vector<double> new_par_vec; vector<Parameters> dir_numeric_pars_vec; success = central_diff(par_name, par_value, group_info, ctl_par_info, par_trans, new_par_vec, dir_numeric_pars_vec); if (success) { for (auto & ipar : new_par_vec) { del_numeric_par_vec.push_back(JacobianRun(par_name, ipar)); } } } if (!success) { // Forward Difference success = forward_diff(par_name, par_value, group_info, ctl_par_info, par_trans, par_1); if(success) { del_numeric_par_vec.push_back(JacobianRun(par_name, par_1)); } } return success; }
ParameterGroupInfo TranSVD::build_par_group_info(const ParameterGroupInfo &base_pg_info) { double derinc_sup; double derinc_par; int max_col; double max_val; ParameterGroupInfo pg_info; stringstream grp_name; for (int i_sup=0, n_sup=super_parameter_names.size(); i_sup < n_sup; ++i_sup) { get_MatrixXd_row_abs_max(Vt, i_sup, &max_col, &max_val); derinc_par = base_pg_info.get_group_rec_ptr(base_parameter_names[max_col])->derinc; derinc_sup = .01; grp_name.str(""); grp_name << "g_" << super_parameter_names[i_sup]; ParameterGroupRec sup_rec(grp_name.str(), "ABSOLUTE", derinc_sup, 0.0, "SWITCH", 2.0, "PARABOLIC"); //add new group pg_info.insert_group(grp_name.str(), sup_rec); // connect super parameter to new group pg_info.insert_parameter_link(super_parameter_names[i_sup], grp_name.str()); } return pg_info; }