#!/usr/bin/env python
import dddm
import wimprates as wr
import numpy as np
import argparse

assert wr.__version__ != '0.2.2'

# # Direct detection of Dark matter using different target materials #
#
# Author:
#
# Joran Angevaare <j.angevaare@nikef.nl>
#
# Date:
#
# 28 october 2019
#
print("run_dddm_emcee.py::\tstart")

parser = argparse.ArgumentParser(
    description="Running a fit for a certain set of parameters"
)
parser.add_argument('-mw', type=np.float, default=50.,
                    help="wimp mass")
parser.add_argument('-cross_section', type=np.float, default=-45,
                    help="wimp cross-section")
parser.add_argument('-poisson', type=bool, default=False,
                    help="Add poisson noise to the test data set")
parser.add_argument('-nwalkers', type=int, default=250,
                    help="walkers of MCMC")
parser.add_argument('-nsteps', type=int, default=150,
                    help="steps of MCMC")
parser.add_argument('-notes', type=str, default="default",
                    help="notes on particular settings")
parser.add_argument('-bins', type=int, default=10,
                    help="the number of energy bins")
parser.add_argument('-target', type=str, default='Xe',
                    help="Target material of the detector (Xe/Ge/Ar)")
parser.add_argument('-nparams', type=int, default=2,
                    help="Number of parameters to fit")
parser.add_argument('-priors_from', type=str, default="Pato_2010",
                    help="Obtain priors from paper <priors_from>")
parser.add_argument(
    '-verbose',
    type=float,
    default=0,
    help="Set to 0 (no print statements), 1 (some print statements) or >1 (a lot of print statements). Set the level of print statements while fitting.")
parser.add_argument(
    '-shielding',
    type=str,
    default="default",
    help="yes / no / default, override internal determination if we need to take into account earth shielding.")
args = parser.parse_args()

print(f"run_dddm_emcee.py::\tstart for mw = {args.mw}, sigma = "
      f"{args.cross_section}. Fitting {args.nparams} parameters")
stats = dddm.MCMCStatModel(args.target, args.verbose)
if args.shielding != "default":
    yes_or_no = {"yes": True, "no": False}
    stats.config['earth_shielding'] = yes_or_no[args.shielding]
    stats.set_models()
stats.config['poisson'] = args.poisson
stats.config['notes'] = args.notes
stats.config['n_energy_bins'] = args.bins
stats.set_prior(args.priors_from)
stats.fit_parameters = stats.known_parameters[:args.nparams]
stats.set_benchmark(mass=args.mw, log_cross_section=args.cross_section)
stats.nwalkers = args.nwalkers
stats.nsteps = args.nsteps
stats.eval_benchmark()
stats.run()
stats.save_results()
assert stats.log_dict['did_run']

print(
    f"run_dddm_emcee.py::\tfinished for mw = {args.mw}, sigma = {args.cross_section}")
print("finished, bye bye")
