31 std::shared_ptr<WrapperCalculationCleanFlags> calculation_is_clean,
43 const std::vector<ROOT::Fit::ParameterSettings> ¶meter_settings)
45 gradf_.SetInitialGradient(parameter_settings,
grad_);
66 gradf_.SetStepTolerance(step_tolerance);
71 gradf_.SetGradTolerance(grad_tolerance);
76 gradf_.SetNCycles(ncycles);
81 gradf_.SetErrorLevel(error_level);
105 grad_[result->task_id] = result->grad;
108 return job_completed;
118 zmq::message_t gradient_message(
grad_.begin(),
grad_.end());
128 std::move(minuit_internal_x_message), std::move(offsets_message));
132 std::move(gradient_message),
133 std::move(minuit_internal_x_message));
163 auto gradient_message_end =
165 std::copy(gradient_message_begin, gradient_message_end,
grad_.begin());
168 auto minuit_internal_x_message_begin = minuit_internal_x_message.data<
double>();
169 auto minuit_internal_x_message_end =
170 minuit_internal_x_message_begin + minuit_internal_x_message.size() /
sizeof(
double);
171 std::copy(minuit_internal_x_message_begin, minuit_internal_x_message_end,
minuit_internal_x_.begin());
180 auto offsets_message_end = offsets_message_begin + N_offsets;
181 std::copy(offsets_message_begin, offsets_message_end,
shared_offset_.offsets().begin());
190 minimizer_->fitter()->Config().ParamsSettings());
205 grad_[i_component] =
gradf_.FastPartialDerivative(minim.GetFCN(),
minimizer_->fitter()->Config().ParamsSettings(),
206 i_component,
grad_[i_component]);
211 if (
get_manager()->process_manager().is_master()) {
216 for (std::size_t ix = 0; ix <
N_tasks_; ++ix) {
232 if (
get_manager()->process_manager().is_master()) {
239 grad[ix] =
grad_[ix].derivative;
245 double *previous_gstep)
247 if (
get_manager()->process_manager().is_master()) {
248 for (std::size_t i_component = 0; i_component <
N_tasks_; ++i_component) {
249 grad_[i_component] = {previous_grad[i_component], previous_g2[i_component], previous_gstep[i_component]};
264 grad[ix] =
grad_[ix].derivative;
265 previous_g2[ix] =
grad_[ix].second_derivative;
266 previous_gstep[ix] =
grad_[ix].step_size;
int Int_t
Signed integer 4 bytes (int).
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
int Strategy() const
strategy
double ErrorDef() const
error definition
Minuit2Minimizer class implementing the ROOT::Math::Minimizer interface for Minuit2 minimization algo...
API class for defining four levels of strategies: low (0), medium (1), high (2), very high (>=3); act...
double GradientStepTolerance() const
double GradientTolerance() const
unsigned int GradientNCycles() const
static bool getTimingAnalysis()
Messenger & messenger() const
JobManager * get_manager()
Get JobManager instance; create and activate if necessary.
void gather_worker_results()
Wait for all tasks to be retrieved for the current Job.
value_t receive_from_master_on_worker(bool *more=nullptr)
void send_from_worker_to_master(T &&item)
specialization that sends the final message
void publish_from_master_to_workers(T &&item)
specialization that sends the final message
static void start_timer(std::string section_name)
static void end_timer(std::string section_name)
virtual void add(JobTask job_task)=0
Enqueue a task.
ROOT::Minuit2::NumericalDerivator gradf_
bool usesMinuitInternalValues() override
Implement usesMinuitInternalValues to return true when you want Minuit to send this class Minuit-inte...
void update_state() override
Virtual function to update any necessary state on workers.
void update_workers_state_isCalculating()
std::vector< ROOT::Minuit2::DerivatorElement > grad_
void fillGradientWithPrevResult(double *grad, double *previous_grad, double *previous_g2, double *previous_gstep) override
void updateMinuitInternalParameterValues(const std::vector< double > &minuit_internal_x) override
Minuit passes in parameter values that may not conform to RooFit internal standards (like applying ra...
void run_derivator(unsigned int i_component) const
Calculation stuff (mostly duplicates of RooGradMinimizerFcn code):
std::size_t N_tasks_at_workers_
SharedOffset::OffsetVec offsets_previous_
void setNCycles(unsigned int ncycles) const
void send_back_task_result_from_worker(std::size_t task) override
void synchronizeWithMinimizer(const ROOT::Math::MinimizerOptions &options) override
Synchronize minimizer settings with calculators in child classes.
void fillGradient(double *grad) override
LikelihoodGradientJob(std::shared_ptr< RooAbsL > likelihood, std::shared_ptr< WrapperCalculationCleanFlags > calculation_is_clean, std::size_t N_dim, RooMinimizer *minimizer, SharedOffset offset)
void setStepTolerance(double step_tolerance) const
void setGradTolerance(double grad_tolerance) const
void setStrategy(int istrat)
void update_workers_state()
void evaluate_task(std::size_t task) override
Job overrides:
bool receive_task_result_on_master(const zmq::message_t &message) override
void synchronizeParameterSettingsImpl(const std::vector< ROOT::Fit::ParameterSettings > ¶meter_settings) override
std::vector< double > minuit_internal_x_
void setErrorLevel(double error_level) const
std::shared_ptr< WrapperCalculationCleanFlags > calculation_is_clean_
RooMinimizer * minimizer_
LikelihoodGradientWrapper(std::shared_ptr< RooAbsL > likelihood, std::shared_ptr< WrapperCalculationCleanFlags > calculation_is_clean, std::size_t N_dim, RooMinimizer *minimizer, SharedOffset offset)
SharedOffset shared_offset_
Wrapper class around ROOT::Math::Minimizer that provides a seamless interface between the minimizer f...
Namespace for new RooFit test statistic calculation.
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
combined job_object, state and task identifier type