示例#1
0

    if config.mltype == "splml":
        if config.forcen:
            ml_param = config.nmlspl
            string_ML = "nmlspl"
        else:
            ml_param = config.mlknotsteps
            string_ML = "knml"
    elif config.mltype == "polyml":
        ml_param = config.degree
        string_ML = "deg"
    else:
        raise RuntimeError('I dont know your microlensing type. Choose "polyml" or "spml".')

	regdiffparamskw = ut.read_preselected_regdiffparamskw(config.config_directory + 'preset_regdiff.txt')[0]
	result_dir = config.lens_directory + config.combkw[0,0]

	regdiffresult_dir = result_dir + 'sims_%s_opt_regdiff%s_t%s/' % (config.simset_copy, regdiffparamskw, str(int(config.tsrand)))
	spl1result_dir = result_dir + 'sims_%s_opt_spl1t%s/' % (config.simset_copy, str(int(tsrand)))

	group_list = [pycs3.tdcomb.comb.getresults(
						pycs3.tdcomb.comb.CScontainer('Regression difference',
													result_file_delays=regdiffresult_dir + 'sims_%s_opt_regdiff%s_t%s_delays.pkl' % (config.simset_copy, regdiffparamskw, str(int(config.tsrand))),
													result_file_errorbars=regdiffresult_dir + 'sims_%s_opt_regdiff%s_t%s_errorbars.pkl' % (config.simset_mock, regdiffparamskw, str(int(config.tsrand))),
													colour='red')),
				  pycs3.tdcomb.comb.getresults(
						pycs3.tdcomb.comb.CScontainer('Free-knot splines',
													result_file_delays=spl1result_dir + 'sims_%s_opt_spl1t%s_delays.pkl' % (config.simset_copy, str(int(tsrand))),
													result_file_errorbars=spl1result_dir + 'sims_%s_opt_spl1t%s_errorbars.pkl' % (config.simset_mock, str(int(tsrand))),
													colour='blue'))]
if optfctkw == "spl1":
	optfct = spl1
	splparamskw = ["ks%i" %knotstep[i] for i in range(len(knotstep))]

if optfctkw == "regdiff": # not used, small haxx to be able to execute 2 to check and 3 using the spl1 drawing
	optfct = regdiff
	splparamskw = "ks%i" % knotstep

if simoptfctkw == "spl1":
	simoptfct = spl1

if simoptfctkw == "regdiff":
	simoptfct = regdiff
	if use_preselected_regdiff :
		regdiffparamskw = ut.read_preselected_regdiffparamskw(preselection_file)
	else :
		regdiffparamskw = ut.generate_regdiffparamskw(pointdensity,covkernel, pow, amp)


if mltype == "splml" :
	if forcen == False :
		combkw = [["%s_ks%i_%s_knml_%i" %(optfctkw, knotstep[i], mlname, mlknotsteps[j]) for j in range(len(mlknotsteps))]for i in range(len(knotstep))]
	else :
		combkw = [["%s_ks%i_%s_nmlspl_%i" % (optfctkw, knotstep[i], mlname, nmlspl[j]) for j in range(len(nmlspl))]for i in range(len(knotstep))]
elif mltype == "polyml":
	combkw = [["%s_ks%i_%s_deg_%i" % (optfctkw, knotstep[i], mlname, degree[j]) for j in range(len(degree))] for i in range(len(knotstep))]
else :
	raise RuntimeError('I dont know your microlensing type. Choose "polyml" or "spml".')
combkw = np.asarray(combkw)
示例#3
0
def main(lensname, dataname, work_dir='./'):
    sys.path.append(work_dir + "config/")
    config = importlib.import_module("config_" + lensname + "_" + dataname)
    marginalisation_plot_dir = config.figure_directory + 'marginalisation_plots/'
    regdiff_dir = os.path.join(config.lens_directory, "regdiff_outputs/")
    regdiff_copie_dir = os.path.join(regdiff_dir, "copies/")

    if not os.path.isdir(marginalisation_plot_dir):
        os.mkdir(marginalisation_plot_dir)

    indiv_marg_dir = marginalisation_plot_dir + config.name_marg_regdiff + '/'
    if not os.path.isdir(indiv_marg_dir):
        os.mkdir(indiv_marg_dir)

    marginalisation_dir = config.lens_directory + config.name_marg_regdiff + '/'
    if not os.path.isdir(marginalisation_dir):
        os.mkdir(marginalisation_dir)

    if config.testmode:
        nbins = 500
    else:
        nbins = 5000

    colors = [
        "royalblue", "crimson", "seagreen", "darkorchid", "darkorange",
        'indianred', 'purple', 'brown', 'black', 'violet', 'dodgerblue',
        'palevioletred', 'olive', 'brown', 'salmon', 'chocolate', 'indigo',
        'steelblue', 'cyan', 'gold', 'lightcoral'
    ]

    f = open(
        marginalisation_dir + 'report_%s_sigma%2.1f.txt' %
        (config.name_marg_regdiff, config.sigmathresh), 'w')
    path_list = []
    name_list = []
    if config.mltype == "splml":
        if config.forcen:
            ml_param = config.nmlspl
            string_ML = "nmlspl"
        else:
            ml_param = config.mlknotsteps
            string_ML = "knml"
    elif config.mltype == "polyml":
        ml_param = config.degree
        string_ML = "deg"
    else:
        raise RuntimeError(
            'I dont know your microlensing type. Choose "polyml" or "spml".')

    kw_list = ut.read_preselected_regdiffparamskw(config.preselection_file)
    kw_dic = ut.get_keyword_regdiff_from_file(config.preselection_file)
    for s, set in enumerate(kw_dic):
        if 'name' not in list(set.keys()):
            set['name'] = 'Set %i' % s

    for paramskw, dickw in zip(kw_list, kw_dic):
        for n, noise in enumerate(config.tweakml_name_marg_regdiff):

            count = 0
            color_id = 0

            group_list = []
            medians_list = []
            errors_up_list = []
            errors_down_list = []
            simset_mock_ava = [
                "mocks_n%it%i_%s" %
                (int(config.nsim * config.nsimpkls), config.truetsr, twk)
                for twk in config.tweakml_name_marg_regdiff
            ]
            opt = 'regdiff'

            if not config.use_preselected_regdiff:
                raise RuntimeError(
                    "Turn the use_preselected_regdiff to True and set your preselection_file before using this script."
                )

            for a, kn in enumerate(config.knotstep_marg_regdiff):
                for b, ml in enumerate(config.mlknotsteps_marg_regdiff):

                    regdiff_mocks_dir = os.path.join(
                        regdiff_dir, "mocks_knt%i_mlknt%i/" % (kn, ml))

                    result_file_delay = regdiff_copie_dir + 'sims_%s_opt_regdiff%s' % (config.simset_copy, paramskw) \
                                        + 't%i_delays.pkl' % int(config.tsrand)
                    result_file_errorbars = regdiff_mocks_dir \
                                            + 'sims_%s_opt_regdiff%s' % (simset_mock_ava[n], paramskw) + \
                                            't%i_errorbars.pkl' % int(config.tsrand)

                    if not os.path.isfile(
                            result_file_delay) or not os.path.isfile(
                                result_file_errorbars):
                        print('Error I cannot find the files %s or %s. ' \
                              'Did you run the 3c and 4a?' % (result_file_delay, result_file_errorbars))
                        f.write('Error I cannot find the files %s or %s. \n' %
                                (result_file_delay, result_file_errorbars))
                        continue

                    group_list.append(
                        pycs3.tdcomb.comb.getresults(
                            pycs3.tdcomb.comb.CScontainer(
                                data=dataname,
                                knots=kn,
                                ml=ml,
                                name="knstp %i mlknstp %i" % (kn, ml),
                                drawopt=config.optfctkw,
                                runopt=opt,
                                ncopy=config.ncopy * config.ncopypkls,
                                nmocks=config.nsim * config.nsimpkls,
                                truetsr=config.truetsr,
                                colour=colors[color_id],
                                result_file_delays=result_file_delay,
                                result_file_errorbars=result_file_errorbars)))
                    medians_list.append(group_list[-1].medians)
                    errors_up_list.append(group_list[-1].errors_up)
                    errors_down_list.append(group_list[-1].errors_down)

                    if np.isnan(medians_list[-1]).any() or np.isnan(
                            errors_up_list[-1]).any() or np.isnan(
                                errors_down_list[-1]).any():
                        print(
                            "There is some Nan value in %s, for noise %s, kn %i, %s%i"
                            % (dickw['name'], noise, kn, string_ML, ml))
                        print(
                            "I could erase this entry and continue the marginalisation. "
                        )
                        ut.proquest(True)
                        medians_list = medians_list[:-1]
                        errors_down_list = errors_down_list[:-1]
                        errors_up_list = errors_down_list[:-1]
                        group_list = group_list[:-1]
                        continue
                    color_id += 1
                    count += 1
                    if color_id >= len(colors):
                        print(
                            "Warning : I don't have enough colors in my list, I'll restart from the beginning."
                        )
                        color_id = 0  # reset the color form the beginning

                    f.write('Set %i, knotstep : %2.2f, %s : %2.2f \n' %
                            (count, kn, string_ML, ml))
                    f.write(
                        'covkernel : %s, point density: %2.2f, pow : %2.2f, errscale:%2.2f \n'
                        % (dickw["covkernel"], dickw["pointdensity"],
                           dickw["pow"], dickw["errscale"]))
                    f.write('Tweak ml name : %s \n' % noise)
                    f.write(
                        '------------------------------------------------ \n')

            # build the bin list :
            medians_list = np.asarray(medians_list)
            errors_down_list = np.asarray(errors_down_list)
            errors_up_list = np.asarray(errors_up_list)
            binslist = []
            for i, lab in enumerate(config.delay_labels):
                bins = np.linspace(
                    min(medians_list[:, i]) - 10 * min(errors_down_list[:, i]),
                    max(medians_list[:, i]) + 10 * max(errors_up_list[:, i]),
                    nbins)
                binslist.append(bins)

            color_id = 0
            for g, group in enumerate(group_list):
                group.binslist = binslist
                group.plotcolor = colors[color_id]
                group.linearize(testmode=config.testmode)
                group.objects = config.lcs_label
                color_id += 1
                if color_id >= len(colors):
                    print(
                        "Warning : I don't have enough colors in my list, I'll restart from the beginning."
                    )
                    color_id = 0  # reset the color form the beginning

            combined = copy.deepcopy(
                pycs3.tdcomb.comb.combine_estimates(group_list,
                                                    sigmathresh=1000.0,
                                                    testmode=config.testmode))
            combined.linearize(testmode=config.testmode)
            combined.name = 'Most precise'

            print(
                "%s : Taking the best of all spline parameters for regdiff parameters set %s"
                % (config.name_marg_regdiff, dickw['name']))
            combined.niceprint()

            # plot the results :

            text = [(0.85, 0.90, r"$\mathrm{" + config.full_lensname + "}$" +
                     "\n" + r"$\mathrm{PyCS\ estimates}$", {
                         "fontsize": 26,
                         "horizontalalignment": "center"
                     })]
            radius = (np.max(errors_up_list) +
                      np.max(errors_down_list)) / 2.0 * 3.5
            ncurve = len(config.lcs_label)

            if ncurve > 2:
                auto_radius = True
                figsize = (17, 13)
            else:
                auto_radius = False
                figsize = (15, 10)

            if config.display:
                pycs3.tdcomb.plot.delayplot(group_list + [combined],
                                            rplot=radius,
                                            refgroup=combined,
                                            text=text,
                                            hidedetails=True,
                                            showbias=False,
                                            showran=False,
                                            tick_step_auto=True,
                                            autoobj=config.lcs_label,
                                            showlegend=True,
                                            figsize=figsize,
                                            horizontaldisplay=False,
                                            legendfromrefgroup=False,
                                            auto_radius=auto_radius)

            pycs3.tdcomb.plot.delayplot(group_list + [combined],
                                        rplot=radius,
                                        refgroup=combined,
                                        text=text,
                                        hidedetails=True,
                                        tick_step_auto=True,
                                        autoobj=config.lcs_label,
                                        showbias=False,
                                        showran=False,
                                        showlegend=True,
                                        figsize=figsize,
                                        horizontaldisplay=False,
                                        auto_radius=auto_radius,
                                        legendfromrefgroup=False,
                                        filename=indiv_marg_dir +
                                        config.name_marg_regdiff +
                                        "_%s_%s.png" % (dickw['name'], noise))

            pkl.dump(
                group_list,
                open(
                    marginalisation_dir + config.name_marg_regdiff + "_%s_%s" %
                    (dickw['name'], noise) + '_groups.pkl', 'wb'))
            pkl.dump(
                combined,
                open(
                    marginalisation_dir + config.name_marg_regdiff + "_%s_%s" %
                    (dickw['name'], noise) + '_combined.pkl', 'wb'))
            path_list.append(marginalisation_dir + config.name_marg_regdiff +
                             "_%s_%s" % (dickw['name'], noise) +
                             '_combined.pkl')
            name_list.append('%s, Noise : %s ' % (dickw['name'], noise))

    # ------  MAKE THE FINAL REGDIFF ESTIMATE ------#
    final_groups, final_combined = pycs3.tdcomb.comb.group_estimate(
        path_list,
        name_list=name_list,
        colors=colors,
        sigma_thresh=config.sigmathresh,
        new_name_marg=config.name_marg_regdiff,
        testmode=config.testmode,
        object_name=config.lcs_label)
    radius_f = (final_combined.errors_down[0] +
                final_combined.errors_up[0]) / 2.0 * 2.5
    text = [(0.85, 0.90, r"$\mathrm{" + config.full_lensname + "}$" + "\n" +
             r"$\mathrm{PyCS\ estimates}$", {
                 "fontsize": 26,
                 "horizontalalignment": "center"
             })]

    if config.display:
        pycs3.tdcomb.plot.delayplot(final_groups + [final_combined],
                                    rplot=radius_f,
                                    refgroup=final_combined,
                                    tick_step_auto=True,
                                    text=text,
                                    hidedetails=True,
                                    showbias=False,
                                    showran=False,
                                    auto_radius=auto_radius,
                                    autoobj=config.lcs_label,
                                    showlegend=True,
                                    figsize=(15, 10),
                                    horizontaldisplay=False,
                                    legendfromrefgroup=False)

    pycs3.tdcomb.plot.delayplot(final_groups + [final_combined],
                                rplot=radius_f,
                                refgroup=final_combined,
                                text=text,
                                hidedetails=True,
                                showbias=False,
                                showran=False,
                                showlegend=True,
                                figsize=(15, 10),
                                horizontaldisplay=False,
                                autoobj=config.lcs_label,
                                legendfromrefgroup=False,
                                auto_radius=auto_radius,
                                tick_step_auto=True,
                                filename=indiv_marg_dir +
                                config.name_marg_regdiff + "_sigma_%2.2f.png" %
                                (config.sigmathresh))

    pkl.dump(
        final_groups,
        open(
            marginalisation_dir + config.name_marg_regdiff +
            "_sigma_%2.2f" % config.sigmathresh + '_groups.pkl', 'wb'))
    pkl.dump(
        final_combined,
        open(
            marginalisation_dir + config.name_marg_regdiff +
            "_sigma_%2.2f" % config.sigmathresh + '_combined.pkl', 'wb'))
示例#4
0
def main(lensname, dataname, work_dir='./'):
    sys.path.append(work_dir + "config/")
    config = importlib.import_module("config_" + lensname + "_" + dataname)

    figure_directory = config.figure_directory + "spline_and_residuals_plots/"
    if not os.path.isdir(figure_directory):
        os.mkdir(figure_directory)

    for i, lc in enumerate(config.lcs_label):
        print("I will apply a initial shift of : %2.4f days for %s" %
              (config.timeshifts[i], config.lcs_label[i]))

    # Do the optimisation with the splines
    if config.mltype == "splml":
        if config.forcen:
            ml_param = config.nmlspl
            string_ML = "nmlspl"
        else:
            ml_param = config.mlknotsteps
            string_ML = "knml"
    elif config.mltype == "polyml":
        ml_param = config.degree
        string_ML = "deg"
    else:
        raise RuntimeError(
            "I don't know your microlensing type. Choose 'polyml' or 'spml'.")
    chi2 = np.zeros((len(config.knotstep), len(ml_param)))
    dof = np.zeros((len(config.knotstep), len(ml_param)))

    for i, kn in enumerate(config.knotstep):
        for j, ml in enumerate(ml_param):
            print(("ML param", j, ml))
            lcs = pycs3.gen.util.readpickle(config.data)
            if config.magshift is None:
                magsft = [-np.median(lc.getmags()) for lc in lcs]
            else:
                magsft = config.magshift
            pycs3.gen.lc_func.applyshifts(
                lcs, config.timeshifts, magsft
            )  #remove median and set the time shift to the initial guess
            if ml != 0:
                config.attachml(lcs, ml)  # add microlensing

            spline = config.spl1(lcs, kn=kn)
            pycs3.gen.mrg.colourise(lcs)
            rls = pycs3.gen.stat.subtract(lcs, spline)
            chi2[i, j] = pycs3.gen.stat.compute_chi2(rls, kn, ml)
            dof[i, j] = pycs3.gen.stat.compute_dof_spline(rls, kn, ml)

            if config.display:
                pycs3.gen.lc_func.display(lcs, [spline],
                                          showlegend=True,
                                          showdelays=True,
                                          filename="screen")
                pycs3.gen.stat.plotresiduals([rls])
            else:
                pycs3.gen.lc_func.display(lcs, [spline],
                                          showlegend=True,
                                          showdelays=True,
                                          filename=figure_directory +
                                          "spline_fit_ks%i_%s%i.png" %
                                          (kn, string_ML, ml))
                pycs3.gen.stat.plotresiduals([rls],
                                             filename=figure_directory +
                                             "residual_fit_ks%i_%s%i.png" %
                                             (kn, string_ML, ml))

            # and write data, again
            if not os.path.isdir(config.lens_directory + config.combkw[i, j]):
                os.mkdir(config.lens_directory + config.combkw[i, j])

            pycs3.gen.util.writepickle(
                (lcs, spline),
                config.lens_directory + '%s/initopt_%s_ks%i_%s%i.pkl' %
                (config.combkw[i, j], dataname, kn, string_ML, ml))

    #--- REGDIFF ---#
    # DO the optimisation with regdiff as well, just to have an idea, this the first point of the grid !
    lcs = pycs3.gen.util.readpickle(config.data)
    pycs3.gen.mrg.colourise(lcs)
    pycs3.gen.lc_func.applyshifts(lcs, config.timeshifts,
                                  [-np.median(lc.getmags()) for lc in lcs])

    for ind, l in enumerate(lcs):
        l.shiftmag(ind * 0.1)

    if config.use_preselected_regdiff:
        kwargs_optimiser_simoptfct = ut.get_keyword_regdiff_from_file(
            config.preselection_file)
        regdiff_param_kw = ut.read_preselected_regdiffparamskw(
            config.preselection_file)
    else:
        kwargs_optimiser_simoptfct = ut.get_keyword_regdiff(
            config.pointdensity, config.covkernel, config.pow, config.amp,
            config.scale, config.errscale)
        regdiff_param_kw = ut.generate_regdiffparamskw(config.pointdensity,
                                                       config.covkernel,
                                                       config.pow, config.amp,
                                                       config.scale,
                                                       config.errscale)

    for i, k in enumerate(kwargs_optimiser_simoptfct):
        myrslcs = [
            pycs3.regdiff.rslc.factory(l,
                                       pd=k['pointdensity'],
                                       covkernel=k['covkernel'],
                                       pow=k['pow'],
                                       errscale=k['errscale']) for l in lcs
        ]

        if config.display:
            pycs3.gen.lc_func.display(lcs, myrslcs)
        pycs3.gen.lc_func.display(lcs,
                                  myrslcs,
                                  showdelays=True,
                                  filename=figure_directory +
                                  "regdiff_fit%s.png" % regdiff_param_kw[i])

        for ind, l in enumerate(lcs):
            l.shiftmag(-ind * 0.1)

        config.regdiff(lcs, **kwargs_optimiser_simoptfct[i])

        if config.display:
            pycs3.gen.lc_func.display(lcs, showlegend=False, showdelays=True)
        pycs3.gen.lc_func.display(
            lcs,
            showlegend=False,
            showdelays=True,
            filename=figure_directory +
            "regdiff_optimized_fit%s.png" % regdiff_param_kw[i])
        if not os.path.isdir(config.lens_directory + 'regdiff_fitting'):
            os.mkdir(config.lens_directory + 'regdiff_fitting')
        pycs3.gen.util.writepickle(
            lcs, config.lens_directory +
            'regdiff_fitting/initopt_regdiff%s.pkl' % regdiff_param_kw[i])

    # Write the report :
    print("Report will be writen in " + config.lens_directory +
          'report/report_fitting.txt')

    f = open(config.lens_directory + 'report/report_fitting.txt', 'w')
    f.write('Measured time shift after fitting the splines : \n')
    f.write('------------------------------------------------\n')

    for i, kn in enumerate(config.knotstep):
        f.write('knotstep : %i' % kn + '\n')
        f.write('\n')
        for j, ml in enumerate(ml_param):
            lcs, spline = pycs3.gen.util.readpickle(
                config.lens_directory + '%s/initopt_%s_ks%i_%s%i.pkl' %
                (config.combkw[i, j], dataname, kn, string_ML, ml),
                verbose=False)
            delay_pair, delay_name = ut.getdelays(lcs)
            f.write('Micro-lensing %s = %i' % (string_ML, ml) +
                    "     Delays are " + str(delay_pair) + " for pairs " +
                    str(delay_name) + '. Chi2 Red : %2.5f ' % chi2[i, j] +
                    ' DoF : %i \n' % dof[i, j])

        f.write('\n')

    f.write('------------------------------------------------\n')
    f.write('Measured time shift after fitting with regdiff : \n')
    f.write('\n')

    for i, k in enumerate(kwargs_optimiser_simoptfct):
        lcs = pycs3.gen.util.readpickle(
            config.lens_directory +
            'regdiff_fitting/initopt_regdiff%s.pkl' % regdiff_param_kw[i],
            verbose=False)
        delay_pair, delay_name = ut.getdelays(lcs)
        f.write('Regdiff : ' + "     Delays are " + str(delay_pair) +
                " for pairs " + str(delay_name) + '\n')
        f.write('------------------------------------------------\n')

    starting_point = []
    for i in range(len(config.timeshifts)):
        for j in range(len(config.timeshifts)):
            if i >= j:
                continue
            else:
                starting_point.append(config.timeshifts[j] -
                                      config.timeshifts[i])

    f.write('Starting point used : ' + str(starting_point) + " for pairs " +
            str(delay_name) + '\n')
    f.close()