コード例 #1
0
ファイル: minimizer.cpp プロジェクト: blinkseb/theta
boost::shared_ptr<FunctionInfo> Minimizer::create_nll_function_info(const Model & model, const boost::shared_ptr<Distribution> & override_parameter_distribution, const ParValues & fixed_parameters){
    const Distribution & dist = override_parameter_distribution.get()? *override_parameter_distribution: model.get_parameter_distribution();
    ParValues start;
    dist.mode(start);
    Ranges ranges(dist);
    ParIds pids = fixed_parameters.get_parameters();
    for(ParIds::const_iterator pit = pids.begin(); pit!=pids.end(); ++pit){
        double val = fixed_parameters.get(*pit);
        start.set(*pit, val);
        ranges.set(*pit, make_pair(val, val));
    }
    ParValues step = asimov_likelihood_widths(model, override_parameter_distribution);
    return boost::shared_ptr<FunctionInfo>(new DefFunctionInfo(start, step, ranges, fixed_parameters));
}
コード例 #2
0
ファイル: minimizer.cpp プロジェクト: blinkseb/theta
MinimizationResult Minimizer::minimize2(const Function & f, const FunctionInfo & info, const ParValues & fixed_parameters){
    dynamic_cast<const DefFunctionInfo&>(info); // throws bad_cast
    ParIds pids = fixed_parameters.get_parameters();
    if(pids.size()==0){
        return minimize(f, info.get_start(), info.get_step(), info.get_ranges());
    }
    else{
        ParValues start(info.get_start());
        ParValues step(info.get_step());
        Ranges ranges(info.get_ranges());
        const ParIds & info_fixed = info.get_fixed_parameters();
        for(ParIds::const_iterator pit = pids.begin(); pit!=pids.end(); ++pit){
            if(!info_fixed.contains(*pit)){
                throw invalid_argument("fixed parameter in minimize2 which is not fixed in info. This is not allowed.");
            }
            double val = fixed_parameters.get(*pit);
            start.set(*pit, val);
            step.set(*pit, 0.0);
            ranges.set(*pit, make_pair(val, val));
        }
        return minimize(f, start, step, ranges);
    }
}