Пример #1
0
def do_signal_trials(n_sig, N=n_sig_trials):
    # get trial runner
    src = cy.sources(FRB_ra_rad,
                     FRB_dec_rad,
                     mjd=FRB_mjd_time,
                     sigma_t=np.zeros_like(FRB_ra_rad),
                     t_100=FRB_time_window)
    conf = {
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': "transient",
        'flux': cy.hyp.PowerLawFlux(args.gamma),
        'rates_by': 'livetime'
    }
    tr = cy.get_trial_runner(conf, src=src, ana=ana)
    # run trials
    trials = tr.get_many_fits(N, n_sig, poisson=True, logging=False)
    # save to disk
    dir = cy.utils.ensure_dir('{}/gamma/{}/dt/{}/n_sig/{}'.format(
        sig_dir, args.gamma, args.dt, n_sig))
    filename = '{}/sig_trials_{}.npy'.format(dir, args.seed)
    print('->', filename)
    # notice: trials.as_array is a numpy structured array, not a cy.utils.Arrays
    np.save(filename, trials.as_array)
Пример #2
0
def do_background_trials(N=n_bg_trials):
    src = cy.sources(FRB_ra_rad,
                     FRB_dec_rad,
                     mjd=FRB_mjd_time,
                     sigma_t=np.zeros_like(FRB_ra_rad),
                     t_100=FRB_time_window)
    conf = {
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': "transient",
        'flux': cy.hyp.PowerLawFlux(args.gamma)
    }
    tr = cy.get_trial_runner(conf, src=src, ana=ana)
    # run trials
    trials = tr.get_many_fits(N, logging=False)
    # save to disk
    dir = cy.utils.ensure_dir('{}/dt/{}'.format(bg_dir, args.dt))
    filename = '{}/bg_trials_seed_{}.npy'.format(dir, args.seed)
    print('->', filename)
    # notice: trials.as_array is a numpy structured array, not a cy.utils.Arrays
    np.save(filename, trials.as_array)
Пример #3
0
def run_background_trials(args):
    """Run the background trials for the stacked nova analysis

    :type args: dict-like
    :param args: Command line arguments or dict with keys needed for analysis
    """
    delta_t = args.deltaT
    delta_t_days = delta_t / 86400.

    ana_dir = cy.utils.ensure_dir('/data/user/apizzuto/csky_cache/greco_ana')
    greco_ana = cy.get_analysis(
        cy.selections.repo,
        'version-002-p10',
        cy.selections.GRECOOnlineDataSpecs.GRECO_IC86_2012_2019,
        dir=ana_dir)
    conf = {
        'ana': greco_ana,
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': 'transient'}

    only_gamma = not args.all_nova
    weighting_scheme = args.weighting
    src, sample_str = get_sources(only_gamma, weighting_scheme, delta_t_days)

    cy.CONF['src'] = src
    cy.CONF['mp_cpus'] = 5

    tr = cy.get_trial_runner(conf, ana=greco_ana, src=src)
    n_trials = args.ntrials

    bg_trials = tr.get_many_fits(n_trials, seed=args.seed, logging=False)

    filename = '/data/user/apizzuto/Nova/csky_trials/stacking_sens_res/bg/' \
        + '{}_delta_t_{:.2e}_seed_{}.npy'.format(
            sample_str, delta_t, args.seed)
    np.save(filename, bg_trials.as_array)
Пример #4
0
def find_n_sig(beta=0.9, nsigma=None):
    # get signal trials, background distribution, and trial runner
    sig_trials = cy.bk.get_best(sig, 'gamma', args.gamma, 'dt', args.dt,
                                'n_sig')
    b = cy.bk.get_best(bg, 'gamma', args.gamma, 'dt', args.dt)
    src = cy.sources(FRB_ra_rad,
                     FRB_dec_rad,
                     mjd=FRB_mjd_time,
                     sigma_t=np.zeros_like(FRB_ra_rad),
                     t_100=FRB_time_window)
    conf = {
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': "transient",
        'flux': cy.hyp.PowerLawFlux(args.gamma),
        'box_mode': 'center'
    }
    tr = cy.get_trial_runner(conf, src=src, ana=ana)
    # determine ts threshold
    if nsigma is not None:
        ts = b.isf_nsigma(nsigma)
    else:
        ts = b.median()
    # include background trials in calculation
    trials = {0: b.trials}
    trials.update(sig_trials)
    # get number of signal events
    # (arguments prevent additional trials from being run)
    result = tr.find_n_sig(ts,
                           beta,
                           max_batch_size=0,
                           logging=False,
                           trials=trials,
                           n_bootstrap=1)
    # return flux
    return tr.to_E2dNdE(result, E0=1e5)
cy.CONF['mp_cpus'] = 2

################################################################################
# CSKY SOURCE DESCRIPTION
################################################################################
src = cy.utils.Sources(ra=src_ra,dec=src_dec,weight=wt,deg=False)
flux    = cy.hyp.PowerLawFlux(gamma=index,norm=E0)

################################################################################
# BACKGROUND
################################################################################
#conf = dict(fitter_args = _fmin_method='bfgs')
timer = cy.timing.Timer()
time = timer.time
with time('trial runner construction'):
    tr = cy.get_trial_runner(src=src, ana=ana,flux=flux, mp_cpus=2, sindec_bandwidth=np.radians(.1))

################################################################################
# N Bias test
################################################################################
n_sig_arr =[1,10,20,30,40,50,60,70,80,90,100,150,200,250,300,350,400,437]

trials = [tr.get_many_fits(100, n_sig=n_sig, logging=False, seed=n_sig*np.random.randint(1,1000)) for n_sig in n_sig_arr]
for (n_sig, t) in zip(n_sig_arr, trials):
    t['ntrue'] = np.repeat(n_sig, len(t))
time = timer.time
allt = cy.utils.Arrays.concatenate(trials)
#allt
np.savez(wrkdir+"trials_with_sig_inj_"+str(index)+".npz",allt.as_array)

fig, axs = plt.subplots(1, 2, figsize=(6,3))
Пример #6
0
result_dict = {'dec': [], 'sens': [], 'sens_nsig': []}

ra = 0.
mjd_start = 57200.
sin_decs = np.linspace(-0.95, 0.95, 20)
for dec in np.arcsin(sin_decs):
    src = cy.utils.Sources(ra=ra,
                           dec=dec,
                           mjd=mjd_start,
                           sigma_t=0.,
                           t_100=delta_t_days)
    cy.CONF['src'] = src
    cy.CONF['mp_cpus'] = 5

    tr = cy.get_trial_runner(conf, ana=greco_ana, src=src)
    bg = cy.dists.Chi2TSD(tr.get_many_fits(args.ntrials_bg))

    tr = cy.get_trial_runner(
        conf,
        ana=greco_ana,
        src=src,
        inj_conf={'flux': cy.hyp.PowerLawFlux(args.index)})

    ########################################################################
    # SENSITIVITY CALCULATION
    ########################################################################
    nsig_step = 1. if delta_t < 864000. else 20.

    sensitivity = tr.find_n_sig(bg.median(),
                                0.9,
Пример #7
0
def run_all_signal_trials(args):
    r"""Look at output background trials and run the signal
    trials for a stacked nova analysis
    """
    delta_t = args.deltaT
    delta_t_days = delta_t / 86400.

    ana_dir = cy.utils.ensure_dir('/data/user/apizzuto/csky_cache/greco_ana')
    greco_ana = cy.get_analysis(
        cy.selections.repo,
        'version-002-p10',
        cy.selections.GRECOOnlineDataSpecs.GRECO_IC86_2012_2019,
        dir=ana_dir)
    conf = {
        'ana': greco_ana,
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': 'transient'
    }

    only_gamma = not args.all_nova
    print('only', only_gamma)
    print('all', args.all_nova)
    print('~all', ~args.all_nova)
    weighting_scheme = args.weighting
    src, sample_str = get_sources(only_gamma, weighting_scheme, delta_t_days)

    cy.CONF['src'] = src
    cy.CONF['mp_cpus'] = 5

    def ndarray_to_Chi2TSD(trials):
        return cy.dists.Chi2TSD(cy.utils.Arrays(trials))

    bg = cy.bk.get_all(
        '/data/user/apizzuto/Nova/csky_trials/stacking_sens_res/bg/',
        '{}_delta_t_{:.2e}_seed_*.npy'.format(sample_str, delta_t),
        merge=np.concatenate,
        post_convert=ndarray_to_Chi2TSD)

    tr = cy.get_trial_runner(
        conf,
        ana=greco_ana,
        src=src,
        inj_conf={'flux': cy.hyp.PowerLawFlux(args.index)})

    result = {}

    if delta_t < 1e3:
        n_sig_step = 5
    elif delta_t <= 86400. and args.index <= 2.5:
        n_sig_step = 7
    elif delta_t <= 86400:
        n_sig_step = 15
    elif args.index <= 2.5:
        n_sig_step = 15
    else:
        n_sig_step = 25

    ########################################################################
    # SENSITIVITY CALCULATION
    ########################################################################
    beta = 0.9
    sensitivity = tr.find_n_sig(bg.median(),
                                beta,
                                batch_size=args.ntrials_sig,
                                n_sig_step=n_sig_step,
                                max_batch_size=0,
                                logging=True,
                                n_bootstrap=1)

    sensitivity['E2dNdE'] = tr.to_E2dNdE(sensitivity, E0=1., unit=1e3)

    ########################################################################
    # DISCOVERY POTENTIAL CALC
    ########################################################################
    thresh_ts = bg.isf_nsigma(5.)
    beta = 0.5  # beta = 0.5
    discovery = tr.find_n_sig(thresh_ts,
                              beta,
                              batch_size=args.ntrials_sig,
                              n_sig_step=n_sig_step,
                              max_batch_size=0,
                              logging=True,
                              n_bootstrap=1)
    discovery['E2dNdE'] = tr.to_E2dNdE(discovery, E0=1., unit=1e3)
    discovery['nsigma'] = 5.
    discovery['CL'] = beta

    ########################################################################
    # FIT BIAS TRIALS
    ########################################################################
    n_sigs = np.r_[:201:10]
    trials = [
        tr.get_many_fits(int(args.ntrials_sig / 2),
                         n_sig=n_sig,
                         logging=False,
                         seed=n_sig) for n_sig in n_sigs
    ]
    for (n_sig, t) in zip(n_sigs, trials):
        t['ntrue'] = np.repeat(n_sig, len(t))
    allt = cy.utils.Arrays.concatenate(trials)

    result['bg'] = bg
    result['sensitivity'] = sensitivity
    result['discovery'] = discovery
    result['fit'] = allt
    result['settings'] = args
    result['source_info'] = {'ra': src.ra, 'dec': src.dec, 'mjd': src.mjd}

    with open(
            '/data/user/apizzuto/Nova/csky_trials/stacking_sens_res/' +
            'signal_results/' + '{}_delta_t_{:.2e}_gamma_{}_.pkl'.format(
                sample_str, delta_t, args.index), 'wb') as f:
        pickle.dump(result, f)
Пример #8
0
cy.CONF['mp_cpus'] = n_cpus

src = cy.sources(FRB_ra_rad,
                 FRB_dec_rad,
                 mjd=FRB_mjd_time,
                 sigma_t=np.zeros_like(FRB_ra_rad),
                 t_100=FRB_time_window)
conf = {
    'extended': True,
    'space': "ps",
    'time': "transient",
    'sig': "transient"
}  #,'flux': cy.hyp.PowerLawFlux(gamma)}

with time('background estimation'):
    allE_tr = cy.get_trial_runner(conf, ana=ana, src=src)
    bg = cy.dists.TSD(allE_tr.get_many_fits(10000, mp_cpus=n_cpus))

# you could also use np.logspace()
Ebins = 10**np.r_[3:7.1:.25]
trs = [
    cy.get_trial_runner(conf,
                        ana=ana,
                        src=src,
                        flux=cy.hyp.PowerLawFlux(gamma,
                                                 energy_range=(Emin, Emax)))
    for (Emin, Emax) in zip(Ebins[:-1], Ebins[1:])
]

senss = []
Пример #9
0
    'sig': 'tw',
    'sig_kw': dict(t0=mjd_grb, dt=inj_duration, box_mode='post'),
    #Note that the box_mode here is set to 'pre'. This is so that we can control injecting the size of pulses.
    # hold t0 fixed
    'fitter_args': dict(t0=mjd_grb),
    # use multiprocessing
    'mp_cpus': 10,
    'prior': None  #prior =None is the key for removing the penalty term
}

afterglow_inj = {}
afterglow_inj.update(afterglow)
del afterglow_inj['fitter_args']

tr_inj = cy.get_trial_runner(afterglow_inj,
                             src=sources,
                             inj_conf=dict(src=sources),
                             extra_keep=['run', 'event'])

#Defining the Multi trial runner to perform the analysis on the same scrambled sky
multr = cy.trial.MultiTrialRunner(
    # the Analysis
    ana,
    # bg+sig injection trial runner (produces trials)
    tr_inj,
    # llh test trial runners (perform fits given trials)
    trs,
    # background distrubutions, can also do without this info since was getting some error when i use it
    #bgs=bg,
    # use multiprocessing
    mp_cpus=10,
)
Пример #10
0
def run_differential_sens(args):
    r"""Look at output background trials and run the signal
    trials for a stacked nova analysis
    """
    delta_t = args.deltaT
    delta_t_days = delta_t / 86400.

    ana_dir = cy.utils.ensure_dir('/data/user/apizzuto/csky_cache/greco_ana')
    greco_ana = cy.get_analysis(
        cy.selections.repo,
        'version-002-p10',
        cy.selections.GRECOOnlineDataSpecs.GRECO_IC86_2012_2019,
        dir=ana_dir)
    conf = {
        'ana': greco_ana,
        'extended': True,
        'space': "ps",
        'time': "transient",
        'sig': 'transient'
    }

    only_gamma = not args.all_nova
    weighting_scheme = args.weighting
    src, sample_str = get_sources(only_gamma, weighting_scheme, delta_t_days)

    cy.CONF['src'] = src
    cy.CONF['mp_cpus'] = 5

    def ndarray_to_Chi2TSD(trials):
        return cy.dists.Chi2TSD(cy.utils.Arrays(trials))

    bg = cy.bk.get_all(
        '/data/user/apizzuto/Nova/csky_trials/stacking_sens_res/bg/',
        '{}_delta_t_{:.2e}_seed_*.npy'.format(sample_str, delta_t),
        merge=np.concatenate,
        post_convert=ndarray_to_Chi2TSD)

    Ebins = 10**np.r_[0.:4.1:1.0]
    trs = [
        cy.get_trial_runner(conf,
                            ana=greco_ana,
                            src=src,
                            flux=cy.hyp.PowerLawFlux(2.0,
                                                     energy_range=(Emin,
                                                                   Emax)))
        for (Emin, Emax) in zip(Ebins[:-1], Ebins[1:])
    ]

    if delta_t < 1e3:
        n_sig_step = 5
    elif delta_t <= 86400.:
        n_sig_step = 7
    elif delta_t <= 86400:
        n_sig_step = 15
    else:
        n_sig_step = 15

    result = {}

    for ii, tr in enumerate(trs):
        try:
            #################################################################
            # SENSITIVITY CALCULATION
            #################################################################
            beta = 0.9
            sensitivity = tr.find_n_sig(bg.median(),
                                        beta,
                                        batch_size=args.ntrials_sig,
                                        n_sig_step=n_sig_step,
                                        max_batch_size=0,
                                        logging=True,
                                        n_bootstrap=1)

            sensitivity['E2dNdE'] = tr.to_E2dNdE(sensitivity,
                                                 E0=Ebins[ii] / 1e3,
                                                 unit=1e3)
            tmp_key = f'sensitivity_{Ebins[ii]:.1f}_{Ebins[ii+1]:.1f}'
            result[tmp_key] = sensitivity
        except Exception as e:
            print(f"Could not do energy range {Ebins[ii]} to {Ebins[ii+1]}")

    result['bg'] = bg
    result['settings'] = args
    result['source_info'] = {
        'ra': list(src.ra),
        'dec': list(src.dec),
        'mjd': list(src.mjds)
    }

    with open(
            '/data/user/apizzuto/Nova/csky_trials/stacking_sens_res/' +
            'differential_sens/' +
            '{}_delta_t_{:.2e}.pkl'.format(sample_str, delta_t), 'wb') as f:
        pickle.dump(result, f)
Пример #11
0
     flux_data = np.copy(data['EF30-100'])
     src_weights = flux_data / np.sum(flux_data)
     
 srcs = cy.utils.Sources(ra=data['RAdeg'], dec=data['DEdeg'], deg=True, weight=src_weights)
 
 for g in gamma:
     #Get Trials Runner
     
     #Set signal flux (for injections)
     #   Power law from gamma, with or without some cutoff (for determining sensitivity changes and energy range)
     if not E_cut:
         flux = cy.hyp.PowerLawFlux(g)
     elif E_cut:
         flux = cy.hyp.PowerLawFlux(g, energy_range=(ethresh_low, ethresh_high))
         
     tr = cy.get_trial_runner(src=srcs, ana=ana, flux=flux, mp_cpus=cpus)
     
     for s in seed:
         print('Doing {} BG trials for {} data, {} weight, gamma = {}, seed = {} ...'.format(num_trials,dSetName,w,g,s))
         
         if do_bg_trials:
             if g == 2.0:
                 bg_trials()
         
         if w == 'equal':
             if g == 1.75: 
                 n_sigs = np.r_[2:22.1:2, 30:70.1:4] 
             elif g == 2.0: 
                 n_sigs = np.r_[2:42.1:4, 60:100.1:4] 
             elif g == 2.25: 
                 n_sigs = np.r_[10:50.1:4, 120:160.1:4]