MaCh3  2.6.0
Reference Guide
Public Member Functions | Public Attributes | Protected Attributes | List of all members
MulticanonicalMCMCHandler Class Reference

Helper class for configuring and evaluating multicanonical umbrella weights. More...

#include <Fitters/MulticanonicalMCMCHandler.h>

Collaboration diagram for MulticanonicalMCMCHandler:
[legend]

Public Member Functions

 MulticanonicalMCMCHandler ()
 Constructor. More...
 
virtual ~MulticanonicalMCMCHandler ()
 Destructor. More...
 
void FindOscCovParams (const std::vector< ParameterHandlerBase * > &systematics)
 Locate the systematic object which contains the parameters used by the handler. Stores the parameter indices. More...
 
void AdjustUmbrellaStepScale (const std::vector< ParameterHandlerBase * > &systematics)
 Adjust the parameter-of-interest's step scale according to the width of the umbrella bias function. More...
 
void InitializeMulticanonicalHandlerConfig (Manager *fitMan, std::vector< ParameterHandlerBase * > &systematics)
 Read multicanonical configuration from the yaml via manager and initialise handler state. More...
 
void InitializeMulticanonicalParams (std::vector< ParameterHandlerBase * > &systematics)
 Initialise the starting values used by the multicanonical parameter handling. More...
 
double GetMulticanonicalWeight (double deltacp, double delm23_value)
 Compute the multicanonical penalty for the configured bias mode. More...
 
double GetMulticanonicalWeightSpline (double deltacp, double delm23_value)
 Compute the multicanonical penalty using a spline. More...
 
double GetMulticanonicalWeightGaussian (double deltacp)
 Compute a Gaussian multicanonical penalty. More...
 
double GetMulticanonicalWeightTripleGaussian (double deltacp)
 Compute a triple-Gaussian multicanonical penalty. More...
 
double GetMulticanonicalWeightVonMises (double deltacp)
 Compute a von Mises multicanonical penalty. More...
 
double GetMulticanonicalWeightGenGaussian (double deltacp)
 Compute a generalised-Gaussian multicanonical penalty. More...
 
double circularDistance (double x, double mean)
 Compute the circular distance between two angles. More...
 
double generalisedGaussian2 (double x, double mean, double width)
 Wraps the generalised gaussian function for a given x, mean, and width. Required to handle the wrappipng of the parameter space at 2pi. More...
 

Public Attributes

int oscCovVar
 Index of the oscillation-covariance systematic in the current fit. More...
 
int multicanonicalVar
 Parameter index used for the multicanonical delta_cp weight. More...
 
int multicanonicalVar_dm23
 Parameter index used for the multicanonical delm2_23 weight. More...
 
M3::BiasFunction umbrellaBiasFunction
 Selected bias function for multicanonical weights. More...
 
std::string umbrellaBiasFunctionName
 Configured bias function name for logging. More...
 
bool multicanonicalSpline
 Toggle for spline-based multicanonical weights. More...
 

Protected Attributes

double multicanonicalBeta
 Global scale factor applied to the multicanonical penalty. 1 is full strength, 0 is no penalty. More...
 
double delta_cp_value
 delta_cp value used during proposal evaluation. More...
 
double delm23_value
 delm2_23 value used during proposal evaluation. More...
 
TSpline3 * dcp_spline_IO
 Spline for the IO branch, if spline mode is enabled. More...
 
TSpline3 * dcp_spline_NO
 Spline for the NO branch, if spline mode is enabled. More...
 
double umbrellaMean
 Umbrella centre used for the current configuration. More...
 
double umbrellaWidth
 Umbrella width used for the current configuration. More...
 
int umbrellaNumber
 Number of total umbrellas used for the current configuration. More...
 
bool umbrellaOverlapMode
 Toggle for deriving umbrella widths from a desired # of sigma overlaps between umbrellas. More...
 
double umbrellaSigmaOverlap
 Requested overlap for evenly spaced umbrellas. More...
 
bool umbrellaAdjustStepScale
 Toggle for rescaling the step size based on the umbrella width. More...
 
double umbrellaStepScaleFactor
 Additional scale factor applied when rescaling the step size. This is for fine tuning. More...
 
bool flipWindow
 Optional flip-window control. More...
 
double vonMises_kappa
 Von Mises kappa parameter. Analogue of sigma for a gaussian. More...
 
double vonMises_I0_kappa
 Cached I0(kappa) value for the von Mises form. More...
 

Detailed Description

Helper class for configuring and evaluating multicanonical umbrella weights.

this method is used to bias the MCMC sampling of chains to particular regions of the parameter space The method relies on a bias function defined via a yaml configuration file in experimental specific code With a bias function defined chains run as normal and are combined after the fact using the information stored in the chains saved yaml configuration file.

Author
David Riley [26]

Definition at line 31 of file MulticanonicalMCMCHandler.h.

Constructor & Destructor Documentation

◆ MulticanonicalMCMCHandler()

MulticanonicalMCMCHandler::MulticanonicalMCMCHandler ( )

Constructor.

Definition at line 25 of file MulticanonicalMCMCHandler.cpp.

25  {
26  // Initialize member variables with defaults
27  oscCovVar = -1;
28  multicanonicalVar = -1;
30  multicanonicalSpline = false;
31  multicanonicalBeta = 1.0;
32  delta_cp_value = 0.0;
33  delm23_value = 0.0;
34  dcp_spline_IO = nullptr;
35  dcp_spline_NO = nullptr;
36  umbrellaMean = 0.0;
37  umbrellaWidth = 1.0;
38  umbrellaNumber = 5;
39  umbrellaOverlapMode = false;
43  flipWindow = false;
44 
45  vonMises_kappa = -1.0;
46  vonMises_I0_kappa = -1.0;
48  umbrellaBiasFunctionName = "gaussian";
49 }
double vonMises_I0_kappa
Cached I0(kappa) value for the von Mises form.
double umbrellaSigmaOverlap
Requested overlap for evenly spaced umbrellas.
double delm23_value
delm2_23 value used during proposal evaluation.
double umbrellaWidth
Umbrella width used for the current configuration.
TSpline3 * dcp_spline_IO
Spline for the IO branch, if spline mode is enabled.
int multicanonicalVar_dm23
Parameter index used for the multicanonical delm2_23 weight.
M3::BiasFunction umbrellaBiasFunction
Selected bias function for multicanonical weights.
TSpline3 * dcp_spline_NO
Spline for the NO branch, if spline mode is enabled.
bool multicanonicalSpline
Toggle for spline-based multicanonical weights.
bool umbrellaOverlapMode
Toggle for deriving umbrella widths from a desired # of sigma overlaps between umbrellas.
double vonMises_kappa
Von Mises kappa parameter. Analogue of sigma for a gaussian.
bool flipWindow
Optional flip-window control.
double delta_cp_value
delta_cp value used during proposal evaluation.
std::string umbrellaBiasFunctionName
Configured bias function name for logging.
double umbrellaMean
Umbrella centre used for the current configuration.
double umbrellaStepScaleFactor
Additional scale factor applied when rescaling the step size. This is for fine tuning.
int oscCovVar
Index of the oscillation-covariance systematic in the current fit.
int multicanonicalVar
Parameter index used for the multicanonical delta_cp weight.
int umbrellaNumber
Number of total umbrellas used for the current configuration.
bool umbrellaAdjustStepScale
Toggle for rescaling the step size based on the umbrella width.
double multicanonicalBeta
Global scale factor applied to the multicanonical penalty. 1 is full strength, 0 is no penalty.
@ kGaussian
Assumes gaussian prior.

◆ ~MulticanonicalMCMCHandler()

MulticanonicalMCMCHandler::~MulticanonicalMCMCHandler ( )
virtual

Destructor.

Definition at line 51 of file MulticanonicalMCMCHandler.cpp.

51  {
52  // Destructor
53 }

Member Function Documentation

◆ AdjustUmbrellaStepScale()

void MulticanonicalMCMCHandler::AdjustUmbrellaStepScale ( const std::vector< ParameterHandlerBase * > &  systematics)

Adjust the parameter-of-interest's step scale according to the width of the umbrella bias function.

This is used to adjust the step scale of the parameter to keep the size of the step scale relative to the new biased space the chain sees the same. Current assumes that your are sampling delta cp (ie cirular on 2pi)

Todo:
grab the step scale from the objejct directly and update based on the radtio to the umbrella width, removing assumption that its dcp

Definition at line 210 of file MulticanonicalMCMCHandler.cpp.

210  {
212  MACH3LOG_INFO("Adjusting umbrella step scale to keep ratio of step scale to multicanonical sigma constant");
213  MACH3LOG_INFO("Setting umbrella step scale factor to {}", umbrellaStepScaleFactor);
214  double stepScale = (umbrellaWidth * umbrellaStepScaleFactor) / (2.0 * TMath::Pi());
215  MACH3LOG_INFO("Setting individual step scale for multicanonical separate to {}", stepScale);
216  systematics[oscCovVar]->SetIndivStepScale(multicanonicalVar, stepScale);
217  MACH3LOG_INFO("Setting individual step scale for {} systematic to {}", multicanonicalVar, stepScale);
218  } else {
219  MACH3LOG_INFO("Not adjusting umbrella step scale, using value in OscCov config");
220  }
221 }
#define MACH3LOG_INFO
Definition: MaCh3Logger.h:35

◆ circularDistance()

double MulticanonicalMCMCHandler::circularDistance ( double  x,
double  mean 
)

Compute the circular distance between two angles.

This is used to calculate the distance between two angles in a circular space, such as delta_cp. It returns the shortest distance between the two angles, taking into account the wrapping at 2pi.

Definition at line 298 of file MulticanonicalMCMCHandler.cpp.

298 { return std::atan2(std::sin(x - mean), std::cos(x - mean)); }

◆ FindOscCovParams()

void MulticanonicalMCMCHandler::FindOscCovParams ( const std::vector< ParameterHandlerBase * > &  systematics)

Locate the systematic object which contains the parameters used by the handler. Stores the parameter indices.

Definition at line 62 of file MulticanonicalMCMCHandler.cpp.

62  {
63 
64  bool foundDeltaCP = false;
65  bool foundDelm23 = false;
66 
67  // Loop over the systematics and find the osc_cov systematic and the delta_cp parameter number
68  MACH3LOG_INFO("Looping over systematics to find delta_cp parameter");
69  MACH3LOG_INFO("Number of systematics: {}", systematics.size());
70 
71  for (size_t iCov = 0; iCov < systematics.size(); iCov++){
72  auto* syst = systematics[static_cast<int>(iCov)];
73  for (int i = 0; i < syst->GetNumParams(); i++) {
74  if (syst->GetParName(i) == "delta_cp") {
75  MACH3LOG_INFO("Found delta_cp parameter in systematic {} at index {}", syst->GetName(), i);
76  oscCovVar = static_cast<int>(iCov);
78  foundDeltaCP = true;
79  }
80  if (syst->GetParName(i) == "delm2_23") {
81  MACH3LOG_INFO("Found delm2_23 parameter in systematic {} at index {}", syst->GetName(), i);
83  foundDelm23 = true;
84  }
85  }
86  }
87 
88  // if we didn't find both parameters we need to throw
89  if (!foundDeltaCP) {
90  MACH3LOG_ERROR("Could not find delta_cp parameter in osc_cov systematic");
91  throw MaCh3Exception(__FILE__, __LINE__, "Could not find delta_cp parameter in osc_cov systematic");
92  }
93  if (!foundDelm23) {
94  MACH3LOG_ERROR("Could not find delm2_23 parameter in osc_cov systematic");
95  throw MaCh3Exception(__FILE__, __LINE__, "Could not find delm2_23 parameter in osc_cov systematic");
96  }
97 }
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
Custom exception class used throughout MaCh3.

◆ generalisedGaussian2()

double MulticanonicalMCMCHandler::generalisedGaussian2 ( double  x,
double  mean,
double  width 
)

Wraps the generalised gaussian function for a given x, mean, and width. Required to handle the wrappipng of the parameter space at 2pi.

Definition at line 290 of file MulticanonicalMCMCHandler.cpp.

290  {
291  constexpr int n = 2; // this controls the tightness of the gaussian fixed at 2 for now due to normalisation
292  // 1/4 * Gamma(1/4) = 0.906402477055 (this factor from 2n/Gamma(1/2n) for n=2)
293  const double normFactor = 1 / ((0.906402477055) * 2 * std::sqrt(2) * width); // the normalisation is a little ugly (uses gamma functions), im just going to hardcode them for now
294  double likelihood = normFactor * std::exp(-std::pow((std::pow(x - mean, 2) / (2 * std::pow(width, 2))), n));
295  return likelihood;
296 }

◆ GetMulticanonicalWeight()

double MulticanonicalMCMCHandler::GetMulticanonicalWeight ( double  deltacp,
double  delm23_value 
)

Compute the multicanonical penalty for the configured bias mode.

This wraps the various bias function implementations and returns the appropriate penalty

Returns
Returns the log likelihood penalty for the selected bias function at the proposed parameter values.

Definition at line 251 of file MulticanonicalMCMCHandler.cpp.

251  {
252  if (multicanonicalSpline) {
253  return GetMulticanonicalWeightSpline(deltacp, delm23);
254  }
255 
256  switch (umbrellaBiasFunction) {
258  return GetMulticanonicalWeightGaussian(deltacp);
260  return GetMulticanonicalWeightVonMises(deltacp);
262  return GetMulticanonicalWeightGenGaussian(deltacp);
263  }
264 
265  return GetMulticanonicalWeightGaussian(deltacp);
266 }
double GetMulticanonicalWeightVonMises(double deltacp)
Compute a von Mises multicanonical penalty.
double GetMulticanonicalWeightSpline(double deltacp, double delm23_value)
Compute the multicanonical penalty using a spline.
double GetMulticanonicalWeightGenGaussian(double deltacp)
Compute a generalised-Gaussian multicanonical penalty.
double GetMulticanonicalWeightGaussian(double deltacp)
Compute a Gaussian multicanonical penalty.

◆ GetMulticanonicalWeightGaussian()

double MulticanonicalMCMCHandler::GetMulticanonicalWeightGaussian ( double  deltacp)

Compute a Gaussian multicanonical penalty.

Definition at line 283 of file MulticanonicalMCMCHandler.cpp.

283  {
284  const double inv_sqrt_2pi = 1 / std::sqrt(2 * TMath::Pi());
285  const double neg_half_sigma_sq = -1 / (2 * umbrellaWidth * umbrellaWidth);
286  // return the log likelihood, ie the log of the normalised gaussian
287  return (-std::log(inv_sqrt_2pi * (1 / umbrellaWidth) * std::exp(neg_half_sigma_sq * (deltacp - umbrellaMean) * (deltacp - umbrellaMean)))) * (multicanonicalBeta);
288 }

◆ GetMulticanonicalWeightGenGaussian()

double MulticanonicalMCMCHandler::GetMulticanonicalWeightGenGaussian ( double  deltacp)

Compute a generalised-Gaussian multicanonical penalty.

the generalised gaussian is like a gaussian with an extra factor of n on the exponent of the gaussian. This allows for a stronger constraint in the tails of the distribution, more like a tophat function. The normalisation is a little ugly and uses gamma functions, so for now it is hardcoded to n=2. This is the current recommended configuration for umbrella sampling.

Todo:

implememnt the wrapping with circular distance function to avoid the need to calculate the weight multiple times for each parameter to ensure it recieves a bias even when it jumps the boundary

implement the normalisation for n != 2, and allow n to be set in the yaml configuration file

Definition at line 300 of file MulticanonicalMCMCHandler.cpp.

300  {
301  // implemenetation of the generalised gaussian as a bias function
302  // for now with a fixed n = 2 for simplicity
303  double g0 = generalisedGaussian2(deltacp, umbrellaMean, umbrellaWidth); // these two repeats are required for wrapping the gaussian around -pi and pi
304  double g1 = generalisedGaussian2(deltacp, umbrellaMean - 2 * TMath::Pi(), umbrellaWidth);
305  double g2 = generalisedGaussian2(deltacp, umbrellaMean + 2 * TMath::Pi(), umbrellaWidth);
306 #ifdef DEBUG
307  if (debugStream && debugEnabled) (*debugStream) << " g0: " << g0 << " g1: " << g1 << " g2: " << g2 << std::endl;
308 #endif
309  return -std::log(g0 + g1 + g2) * (multicanonicalBeta);
310 }
double generalisedGaussian2(double x, double mean, double width)
Wraps the generalised gaussian function for a given x, mean, and width. Required to handle the wrappi...

◆ GetMulticanonicalWeightSpline()

double MulticanonicalMCMCHandler::GetMulticanonicalWeightSpline ( double  deltacp,
double  delm23_value 
)

Compute the multicanonical penalty using a spline.

Definition at line 268 of file MulticanonicalMCMCHandler.cpp.

268  {
269  double dcp_spline_val;
270 
271  if (delm23 < 0) {
272  dcp_spline_val = dcp_spline_IO->Eval(deltacp);
273  return -(-std::log(dcp_spline_val) + std::log(dcp_spline_IO->Eval(-TMath::Pi() / 2))) * (multicanonicalBeta); // do I want this offset?? does it matter?
274  } else {
275  dcp_spline_val = dcp_spline_NO->Eval(deltacp);
276  return -(-std::log(dcp_spline_val) + std::log(dcp_spline_NO->Eval(-TMath::Pi() / 2))) * (multicanonicalBeta);
277  }
278  // std::cout << "Evaluating spline at delta_cp = " << deltacp << " gives value
279  // " << dcp_spline_val << "with -log lh of :" << -log(dcp_spline_val) <<
280  // std::endl;
281 }

◆ GetMulticanonicalWeightTripleGaussian()

double MulticanonicalMCMCHandler::GetMulticanonicalWeightTripleGaussian ( double  deltacp)

Compute a triple-Gaussian multicanonical penalty.

This was mostsly for testing the first implementation, probably not used anymore.

delta_cp_log_likelihood = -TMath::Log(TMath::Gaus(deltacp,TMath::Pi(),1,kTRUE)+TMath::Gaus(deltacp,0,1,kTRUE)+TMath::Gaus(deltacp,-TMath::Pi(),1,kTRUE));

Definition at line 312 of file MulticanonicalMCMCHandler.cpp.

312  { // pretty much deprecated at this point, just here for testing
313  // precalculate constants
314  constexpr double inv_sqrt_2pi = 0.3989422804014337;
315  double sigma = umbrellaWidth;
316  const double neg_half_sigma_sq = -1 / (2 * sigma * sigma);
317  // three gaussians centered at -pi, 0, pi with sigma pre-defined above
318  double exp1 = std::exp(neg_half_sigma_sq * (deltacp - TMath::Pi()) * (deltacp - TMath::Pi()));
319  double exp2 = std::exp(neg_half_sigma_sq * (deltacp) * (deltacp));
320  double exp3 = std::exp(neg_half_sigma_sq * (deltacp + TMath::Pi()) * (deltacp + TMath::Pi()));
322 
323  // return the log likelihood, ie the log of the normalised sum of the
324  // gaussians
325  return -std::log(inv_sqrt_2pi * (1 / sigma) * (exp1 + exp2 + exp3)) * (multicanonicalBeta);
326 }

◆ GetMulticanonicalWeightVonMises()

double MulticanonicalMCMCHandler::GetMulticanonicalWeightVonMises ( double  deltacp)

Compute a von Mises multicanonical penalty.

This is the circular analogue of a gaussian, meaning it handles the wrapping of the parameter space at 2pi automatically this avoids the need to calculate the weight multiple times for each parameter to ensure it recieves a bias even when it jumps the boundary the normalisation grows extremely quickly, widths of less that 0.05 should not be used until properly tested.

Definition at line 242 of file MulticanonicalMCMCHandler.cpp.

242  {
243  // calculate the Log form of the von Mises instead to avoid numerical issues
244  // and return directly
245  double log_vonMises = vonMises_kappa * std::cos(deltacp - umbrellaMean) - std::log(2 * TMath::Pi() * vonMises_I0_kappa);
246  // return the log likelihood, ie the log of the normalised von Mises
247  return -log_vonMises * (multicanonicalBeta);
248 }

◆ InitializeMulticanonicalHandlerConfig()

void MulticanonicalMCMCHandler::InitializeMulticanonicalHandlerConfig ( Manager fitMan,
std::vector< ParameterHandlerBase * > &  systematics 
)

Read multicanonical configuration from the yaml via manager and initialise handler state.

Todo:
DR: I realised this will fail if you set spline to true but don't

Definition at line 99 of file MulticanonicalMCMCHandler.cpp.

99  {
100 
101  FindOscCovParams(systematics);
102 
103  const auto mcmcConfig = fitMan->raw()["General"]["MCMC"];
104 
105  // Get the multicanonical beta value from the configuration file
106  // This acts as a global bias strength factor
107  multicanonicalBeta = mcmcConfig["Multicanonical"]["Beta"].as<double>();
108  MACH3LOG_INFO("Setting multicanonical beta to {}", multicanonicalBeta);
109 
111  // delete the umbrella section, thats not ideal
112  multicanonicalSpline = GetFromManager<bool>(mcmcConfig["Multicanonical"]["Spline"]["SplineMode"], false);
113 
114  const std::string biasFunctionName = GetFromManager<std::string>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaBiasFunction"], "");
115  const bool hasBiasFunction = !biasFunctionName.empty();
116 
117  // Spline and umbrella modes are mutually exclusive
118  if (multicanonicalSpline && hasBiasFunction) {
119  MACH3LOG_ERROR("Cannot use multicanonical spline together with umbrella bias function selection.");
120  throw MaCh3Exception(__FILE__, __LINE__, "Cannot use multicanonical spline together with umbrella bias function selection.");
121  }
122 
123  // Umbrella mode requires an explicit bias function selection
124  if (!multicanonicalSpline && !hasBiasFunction) {
125  MACH3LOG_ERROR("Multicanonical umbrella mode requires UmbrellaBiasFunction to be set (gaussian, vonMises, or generalisedGaussian).");
126  throw MaCh3Exception(__FILE__, __LINE__, "Multicanonical umbrella mode requires UmbrellaBiasFunction to be set.");
127  }
128 
129  // Parse and set the umbrella bias function enum
130  if (hasBiasFunction) {
131  umbrellaBiasFunction = ParseBiasFunction(biasFunctionName);
132  umbrellaBiasFunctionName = biasFunctionName;
133  MACH3LOG_INFO("Using umbrella bias function {}", umbrellaBiasFunctionName);
134  }
135 
136  // setup for spline bias mode
137  if (multicanonicalSpline) {
138 
139  std::string splineFileName = GetFromManager<std::string>(mcmcConfig["Multicanonical"]["Spline"]["SplineFile"], "nofile");
140 
141  TFile* splineFile = M3::Open(splineFileName.c_str(), "READ",__FILE__, __LINE__);
142 
143  // grab the splines and do a quick check that they are evaluatable
144  TSpline3* dcp_spline_IO_fromfile = static_cast<TSpline3*>(splineFile->Get("dcp_spline_IO"));
145  dcp_spline_IO = static_cast<TSpline3*>(dcp_spline_IO_fromfile->Clone("dcp_spline_IO"));
146  MACH3LOG_INFO("Using multicanonical spline from file {}", splineFileName);
147  dcp_spline_IO->Eval(0.0); // check that the spline is valid
148  MACH3LOG_INFO("Spline evaluated at 0.0 gives value: {}", dcp_spline_IO->Eval(0.0));
149 
150  TSpline3* dcp_spline_NO_fromfile = static_cast<TSpline3*>(splineFile->Get("dcp_spline_NO"));
151  dcp_spline_NO = static_cast<TSpline3*>(dcp_spline_NO_fromfile->Clone("dcp_spline_NO"));
152  MACH3LOG_INFO("Using multicanonical spline from file {}", splineFileName);
153  dcp_spline_NO->Eval(0.0); // check that the spline is valid
154  MACH3LOG_INFO("Spline evaluated at 0.0 gives value {}", dcp_spline_NO->Eval(0.0));
155 
156  splineFile->Close();
157  splineFile = nullptr;
158 
159  } else {
160  // Umbrella mode with explicit bias function selection
161  MACH3LOG_INFO("Using umbrella multicanonical method with bias function {}", umbrellaBiasFunctionName);
162  umbrellaMean = GetFromManager<double>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaMean"], 0);
163  MACH3LOG_INFO("Setting multicanonical mean to {}", umbrellaMean);
164 
165  umbrellaNumber = GetFromManager<int>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaNumber"], 5);
166 
167  // dynamically adjust the width of the gaussians to ensure a certain level
168  // of overlap? be careful, not enough windows here will lead to posterior
169  // (rather than bias) dominated results
170  umbrellaOverlapMode = GetFromManager<bool>(mcmcConfig["Multicanonical"]["Umbrella"]["AutoOverlapMode"], false);
171 
172  if (umbrellaOverlapMode) {
173  MACH3LOG_INFO("Setting width based on # of sigma overlapping between umbrellas");
174  umbrellaSigmaOverlap = GetFromManager<double>(mcmcConfig["Multicanonical"]["Umbrella"]["SigmaOverlap"], 3.0);
175  MACH3LOG_INFO("Setting umbrella number to {}", umbrellaNumber);
176  umbrellaWidth = TMath::Pi() / ((umbrellaNumber - 1) * (umbrellaSigmaOverlap));
177  } else {
178  // just grab the width directly from the config
179  umbrellaWidth = GetFromManager<double>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaWidth"], (2 * TMath::Pi()) / umbrellaNumber);
180  MACH3LOG_INFO("Setting width based on value in config {}", umbrellaWidth);
181  }
182 
183  // set individual step scale for dcp, so that the ratio of the step scale to
184  // the multicanonical sigma is stepscale/1sigmaerror = 1/2pi
185  umbrellaAdjustStepScale = GetFromManager<bool>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaAdjustStepScale"], false);
186  umbrellaStepScaleFactor = GetFromManager<double>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaStepScaleFactor"], 1.0);
187 
188  AdjustUmbrellaStepScale(systematics);
189 
190  // Set the flip window flag for the oscillation systematic DO NOT USE THIS
191  // flipWindow =
192  // GetFromManager<bool>(mcmcConfig["Multicanonical"]["Umbrella"]["FlipWindow"],
193  // false); MACH3LOG_INFO("Flip Window: {}", flipWindow);
194  }
195 
196  // initialize von Mises parameters
198  double temp_vonMises_sigma;
199  temp_vonMises_sigma = GetFromManager<double>(mcmcConfig["Multicanonical"]["Umbrella"]["UmbrellaWidth"], umbrellaWidth);
200  vonMises_kappa = 1.0 / (temp_vonMises_sigma * temp_vonMises_sigma);
201  vonMises_I0_kappa = TMath::BesselI0(vonMises_kappa);
202  MACH3LOG_INFO("Using von Mises distribution with kappa = {} and I0(kappa) = {}", vonMises_kappa, vonMises_I0_kappa);
203  }
204 
206  MACH3LOG_INFO("Using generalised Gaussian with mean {} and width {}", umbrellaMean, umbrellaWidth);
207  }
208 }
M3::BiasFunction ParseBiasFunction(const std::string &biasFunctionName)
YAML::Node const & raw() const
Return config.
Definition: Manager.h:47
void AdjustUmbrellaStepScale(const std::vector< ParameterHandlerBase * > &systematics)
Adjust the parameter-of-interest's step scale according to the width of the umbrella bias function.
void FindOscCovParams(const std::vector< ParameterHandlerBase * > &systematics)
Locate the systematic object which contains the parameters used by the handler. Stores the parameter ...
TFile * Open(const std::string &Name, const std::string &Type, const std::string &File, const int Line)
Opens a ROOT file with the given name and mode.

◆ InitializeMulticanonicalParams()

void MulticanonicalMCMCHandler::InitializeMulticanonicalParams ( std::vector< ParameterHandlerBase * > &  systematics)

Initialise the starting values used by the multicanonical parameter handling.

This moves the starting point of the chain to the centre of the umbrella bias function. Only affects the parameter of interest.

Definition at line 223 of file MulticanonicalMCMCHandler.cpp.

223  {
224  // Set starting point of chain to umbrella center for non-spline umbrella modes
225  if (!multicanonicalSpline) {
226  systematics[oscCovVar]->PrintPreFitCurrPropValues();
227  systematics[oscCovVar]->SetParCurrProp(multicanonicalVar, umbrellaMean);
228  MACH3LOG_INFO("Setting starting point of chain to mean value for multicanonical separate: {}", umbrellaMean);
229  // pass the mean to the covarianceOsc object for parameter flipping DO NOT USE: UNTESTED
230  // if (flipWindow) {
231  // auto* oscCov = dynamic_cast<covarianceOsc*>(syst);
232  // if (oscCov) {
233  // oscCov->setFlipWindow(flipWindow);
234  // oscCov->setMulticanonicalSeparateMean(umbrellaMean);
235  // }
236  //}
237  systematics[oscCovVar]->PrintPreFitCurrPropValues();
238  MACH3LOG_INFO("Setting starting point of chain to umbrella center: {}", umbrellaMean);
239  }
240 }

Member Data Documentation

◆ dcp_spline_IO

TSpline3* MulticanonicalMCMCHandler::dcp_spline_IO
protected

Spline for the IO branch, if spline mode is enabled.

Definition at line 121 of file MulticanonicalMCMCHandler.h.

◆ dcp_spline_NO

TSpline3* MulticanonicalMCMCHandler::dcp_spline_NO
protected

Spline for the NO branch, if spline mode is enabled.

Definition at line 123 of file MulticanonicalMCMCHandler.h.

◆ delm23_value

double MulticanonicalMCMCHandler::delm23_value
protected

delm2_23 value used during proposal evaluation.

Definition at line 118 of file MulticanonicalMCMCHandler.h.

◆ delta_cp_value

double MulticanonicalMCMCHandler::delta_cp_value
protected

delta_cp value used during proposal evaluation.

Definition at line 116 of file MulticanonicalMCMCHandler.h.

◆ flipWindow

bool MulticanonicalMCMCHandler::flipWindow
protected

Optional flip-window control.

briefly tested feature to mirrow windows about their centres. Not tested but may be useful in the future. Currently disabled and not used.

Definition at line 142 of file MulticanonicalMCMCHandler.h.

◆ multicanonicalBeta

double MulticanonicalMCMCHandler::multicanonicalBeta
protected

Global scale factor applied to the multicanonical penalty. 1 is full strength, 0 is no penalty.

Definition at line 113 of file MulticanonicalMCMCHandler.h.

◆ multicanonicalSpline

bool MulticanonicalMCMCHandler::multicanonicalSpline

Toggle for spline-based multicanonical weights.

Definition at line 109 of file MulticanonicalMCMCHandler.h.

◆ multicanonicalVar

int MulticanonicalMCMCHandler::multicanonicalVar

Parameter index used for the multicanonical delta_cp weight.

Definition at line 98 of file MulticanonicalMCMCHandler.h.

◆ multicanonicalVar_dm23

int MulticanonicalMCMCHandler::multicanonicalVar_dm23

Parameter index used for the multicanonical delm2_23 weight.

Definition at line 100 of file MulticanonicalMCMCHandler.h.

◆ oscCovVar

int MulticanonicalMCMCHandler::oscCovVar

Index of the oscillation-covariance systematic in the current fit.

Definition at line 96 of file MulticanonicalMCMCHandler.h.

◆ umbrellaAdjustStepScale

bool MulticanonicalMCMCHandler::umbrellaAdjustStepScale
protected

Toggle for rescaling the step size based on the umbrella width.

Definition at line 137 of file MulticanonicalMCMCHandler.h.

◆ umbrellaBiasFunction

M3::BiasFunction MulticanonicalMCMCHandler::umbrellaBiasFunction

Selected bias function for multicanonical weights.

Definition at line 103 of file MulticanonicalMCMCHandler.h.

◆ umbrellaBiasFunctionName

std::string MulticanonicalMCMCHandler::umbrellaBiasFunctionName

Configured bias function name for logging.

Definition at line 106 of file MulticanonicalMCMCHandler.h.

◆ umbrellaMean

double MulticanonicalMCMCHandler::umbrellaMean
protected

Umbrella centre used for the current configuration.

Definition at line 126 of file MulticanonicalMCMCHandler.h.

◆ umbrellaNumber

int MulticanonicalMCMCHandler::umbrellaNumber
protected

Number of total umbrellas used for the current configuration.

Currently only used when auto-overlap mode is enabled. This is not fully tested.

Definition at line 131 of file MulticanonicalMCMCHandler.h.

◆ umbrellaOverlapMode

bool MulticanonicalMCMCHandler::umbrellaOverlapMode
protected

Toggle for deriving umbrella widths from a desired # of sigma overlaps between umbrellas.

Definition at line 133 of file MulticanonicalMCMCHandler.h.

◆ umbrellaSigmaOverlap

double MulticanonicalMCMCHandler::umbrellaSigmaOverlap
protected

Requested overlap for evenly spaced umbrellas.

Definition at line 135 of file MulticanonicalMCMCHandler.h.

◆ umbrellaStepScaleFactor

double MulticanonicalMCMCHandler::umbrellaStepScaleFactor
protected

Additional scale factor applied when rescaling the step size. This is for fine tuning.

Definition at line 139 of file MulticanonicalMCMCHandler.h.

◆ umbrellaWidth

double MulticanonicalMCMCHandler::umbrellaWidth
protected

Umbrella width used for the current configuration.

Definition at line 128 of file MulticanonicalMCMCHandler.h.

◆ vonMises_I0_kappa

double MulticanonicalMCMCHandler::vonMises_I0_kappa
protected

Cached I0(kappa) value for the von Mises form.

Definition at line 147 of file MulticanonicalMCMCHandler.h.

◆ vonMises_kappa

double MulticanonicalMCMCHandler::vonMises_kappa
protected

Von Mises kappa parameter. Analogue of sigma for a gaussian.

Definition at line 145 of file MulticanonicalMCMCHandler.h.


The documentation for this class was generated from the following files: