def load4yr(sirin=True, nopull=True, mode='box', **kwargs): print("Mode: " + str(mode)) print("No pull?" + str(nopull)) llh = MultiPointSourceLLH() print("loading IC40...") IC40 = init40(mode=mode, nopull=nopull) print("loading IC59...") IC59 = init59(mode=mode, nopull=nopull) if sirin: print("loading IC79 - sirin's version...") IC79 = init79_sirin(mode=mode, nopull=nopull) else: print("loading IC79...") #Nopull is not used for kai's sample - the correction happened after his dataset started being used. IC79 = init79(mode=mode) print("loading IC86I...") IC86I = init86I(mode=mode, nopull=nopull) samples = [IC40, IC59, IC79, IC86I] arr_exp = [] arr_mc = [] for i in xrange(len(samples)): llh.add_sample(str(i), samples[i][0]) print("Adding sample" + str(samples[i])) arr_exp.append(samples[i][1]) arr_mc.append(samples[i][2]) #gotta make exp, MC into dicts. exp = {0: arr_exp[0], 1: arr_exp[1], 2: arr_exp[2], 3: arr_exp[3]} MC = {0: arr_mc[0], 1: arr_mc[1], 2: arr_mc[2], 3: arr_mc[3]} return (llh, exp, MC)
def multi_init(n, **kwargs): llh = MultiPointSourceLLH( #hemispheres=dict(Full=[-np.inf, np.inf]), seed=np.random.randint(2**32), **kwargs) for i in xrange(len(n)): llh.add_sample(str(i), n[i]) return llh
def multi_init(n, **kwargs): llh = MultiPointSourceLLH(seed=np.random.randint(2**32), **kwargs) for i in xrange(len(n)): llh.add_sample(str(i), n[i]) print("Adding sample: {}".format(str(n[i]))) return llh
def load7yr_mese(energy=True, sirin=False, mode='all', **kwargs): print("Energy: " + str(energy)) print("Mode: " + str(mode)) llh = MultiPointSourceLLH() print("loading IC40...") IC40 = init40(energy=energy, mode=mode) print("loading IC59...") IC59 = init59(energy=energy, mode=mode) if sirin: print("loading IC79 - sirin's version...") IC79 = init79_sirin(energy=energy, mode=mode, decorr=True) else: print("loading IC79...") IC79 = init79(energy=energy, mode=mode, decorr=True) print("loading IC86I...") IC86I = init86I(energy=energy, mode=mode, decorr=True) print("loading IC86II - IC86IV...") IC86II_III_IV = init3yr(energy=energy, mode=mode, decorr=True) print("loading MESE 3yr...") MESE3yr = initMESE3yr(energy=energy, mode=mode) print("loading MESE followup...") MESEfollowup = initMESEfollowup(energy=energy, mode=mode) samples = [IC40, IC59, IC79, IC86I, IC86II_III_IV, MESE3yr, MESEfollowup] arr_exp = [] arr_mc = [] for i in xrange(len(samples)): llh.add_sample(str(i), samples[i][0]) print("Adding sample" + str(samples[i])) arr_exp.append(samples[i][1]) arr_mc.append(samples[i][2]) #gotta make exp, MC into dicts. exp = { 0: arr_exp[0], 1: arr_exp[1], 2: arr_exp[2], 3: arr_exp[3], 4: arr_exp[4], 5: arr_exp[5], 6: arr_exp[6] } MC = { 0: arr_mc[0], 1: arr_mc[1], 2: arr_mc[2], 3: arr_mc[3], 4: arr_mc[4], 5: arr_mc[5], 6: arr_mc[6] } return (llh, exp, MC)
def load1yr(nopull=True, mode='box', **kwargs): print("Mode: " + str(mode)) print("No pull?" + str(nopull)) llh = MultiPointSourceLLH() print("loading IC86I...") IC86I = init86I(mode=mode, nopull=nopull) samples = [IC86I] arr_exp = [] arr_mc = [] for i in xrange(len(samples)): llh.add_sample(str(i), samples[i][0]) print("Adding sample" + str(samples[i])) arr_exp.append(samples[i][1]) arr_mc.append(samples[i][2]) #gotta make exp, MC into dicts. exp = {0: arr_exp[0]} MC = {0: arr_mc[0]} return (llh, exp, MC)
def load3yr_no40(energy=True, sirin=False, nopull=False, mode='all', **kwargs): print("Energy: " + str(energy)) print("Mode: " + str(mode)) print("No pull?" + str(nopull)) llh = MultiPointSourceLLH() print("loading IC59...") IC59 = init59(mode=mode, nopull=nopull) if sirin: print("loading IC79 - sirin's version...") IC79 = init79_sirin(mode=mode, nopull=nopull) else: print("loading IC79...") #Nopull is not used for kai's sample - the correction happened after his dataset started being used. IC79 = init79(mode=mode) print("loading IC86I...") IC86I = init86I(mode=mode, nopull=nopull) samples = [IC59, IC79, IC86I] for i in xrange(len(samples)): llh.add_sample(str(i), samples[i]) print("Adding sample" + str(samples[i])) return llh
def load7yr(energy=True, sirin=False, mode='all', **kwargs): print("Energy: " + str(energy)) print("Mode: " + str(mode)) llh = MultiPointSourceLLH() print("loading IC40...") IC40 = init40(energy=energy, mode=mode) print("loading IC59...") IC59 = init59(energy=energy, mode=mode) if sirin: print("loading IC79 - sirin's version...") IC79 = init79_sirin(energy=energy, mode=mode) else: print("loading IC79...") IC79 = init79(energy=energy, mode=mode) print("loading IC86I...") IC86I = init86I(energy=energy, mode=mode) print("loading IC86II - IC86IV...") IC86II_III_IV = init3yr(energy=energy, mode=mode) samples = [IC40, IC59, IC79, IC86I, IC86II_III_IV] for i in xrange(len(samples)): llh.add_sample(str(i), samples[i]) print("Adding sample" + str(samples[i])) return llh
print("\n# Setting up LLH for sample '{}'".format(name)) # Get exp data and MC exp = _loader.exp_data_loader(name)[name] mc = _loader.mc_loader(name)[name] # Setup the energy LLH model with fixed index, only ns is fitted settings = _loader.settings_loader(name, skylab_bins=use_skylab_bins)[name] llh_model = EnergyLLH(**settings["llh_model_opts"]) llh = PointSourceLLH(exp, mc, livetime, llh_model, scramble=scramble, **settings["llh_opts"]) multillh.add_sample(name, llh) del exp del mc gc.collect() # Load the BG only distribution with gzip.open(pdf_path) as fp: bg_ts_dist = ExpTailEmpiricalDist.from_json(fp) print("Loaded BG only TS distribution from:\n {}".format(pdf_path)) # ############################################################################## result = { "ts": [], "ns": [], "gamma": [],
def config(alert_ind, seed=1, scramble=True, e_range=(0, np.inf), g_range=[1., 5.], gamma=2.0, E0=1 * TeV, remove=False, ncpu=20, nside=256, poisson=False, injector=True, verbose=True, smear=True): r""" Configure point source likelihood and injector. Parameters ---------- alert_ind: int index of IceCube alert event seed : int Seed for random number generator Returns ------- llh : PointSourceLLH Point source likelihood object inj : PriorInjector Point source injector object """ seasons = [("GFUOnline_v001p02", "IC86, 2011-2018"), ("GFUOnline_v001p02", "IC86, 2019")] #skymaps_path = '/data/user/steinrob/millipede_scan_archive/fits_v3_prob_map/' #files = glob(skymaps_path + '*.fits') #skymap_fits = fits.open(files[alert_ind])[0].data #Turn this into a function read_alert_event() #skymap_files = glob('/data/ana/realtime/alert_catalog_v2/2yr_prelim/fits_files/Run13*.fits.gz') skymap_files = glob( '/data/ana/realtime/alert_catalog_v2/fits_files/Run1*.fits.gz') #skymap_f = fits.open(skymap_files[alert_ind]) #skymap_fits = skymap_f[1].data #skymap_header = skymap_f[1].header skymap_fits, skymap_header = hp.read_map(skymap_files[alert_ind], h=True, verbose=False) skymap_header = {name: val for name, val in skymap_header} run_id, ev_id = skymap_header['RUNID'], skymap_header['EVENTID'] ev_mjd = skymap_header['EVENTMJD'] ev_iso = skymap_header['START'] signalness = skymap_header['SIGNAL'] ev_en = skymap_header['ENERGY'] ev_ra, ev_dec = np.radians(skymap_header['RA']), np.radians( skymap_header['DEC']) ev_stream = skymap_header['I3TYPE'] skymap_llh = skymap_fits.copy() skymap_fits = np.exp(-1. * skymap_fits / 2.) #Convert from 2LLH to unnormalized probability skymap_fits = np.where(skymap_fits > 1e-12, skymap_fits, 0.0) skymap_fits = skymap_fits / np.sum(skymap_fits) if smear: ninety_msk = skymap_llh < 64.2 init_nside = hp.get_nside(skymap_llh) cdf = np.cumsum(np.sort(skymap_fits[ninety_msk][::-1])) pixs_above_ninety = np.count_nonzero(cdf > 0.1) original_ninety_area = hp.nside2pixarea(init_nside) * pixs_above_ninety new_ninety_area = hp.nside2pixarea(init_nside) * np.count_nonzero( skymap_fits[ninety_msk]) original_ninety_radius = np.sqrt(original_ninety_area / np.pi) new_ninety_radius = np.sqrt(new_ninety_area / np.pi) scaled_probs = scale_2d_gauss(skymap_fits, original_ninety_radius, new_ninety_radius) skymap_fits = scaled_probs if hp.pixelfunc.get_nside(skymap_fits) != nside: skymap_fits = hp.pixelfunc.ud_grade(skymap_fits, nside) skymap_fits = skymap_fits / skymap_fits.sum() #print(hp.pixelfunc.get_nside(skymap_fits)) spatial_prior = SpatialPrior(skymap_fits, containment=0.99) llh = [] # store individual llh as lists to prevent pointer over-writing multillh = MultiPointSourceLLH(ncpu=1) if verbose: print("\n seasons:") for season in np.atleast_1d(seasons): sample = season[0] name = season[1] exp, mc, livetime = Datasets[sample].season(name, floor=np.radians(0.2)) sinDec_bins = Datasets[sample].sinDec_bins(name) energy_bins = Datasets[sample].energy_bins(name) msg = " - % 15s (" % season msg += "livetime %7.2f days, %6d events" % (livetime, exp.size) msg += ", mjd0 %.2f" % min(exp['time']) msg += ", mjd1 %.2f)" % max(exp['time']) if verbose: print(msg) llh_model = EnergyLLH(twodim_bins=[energy_bins, sinDec_bins], allow_empty=True, bounds=g_range, seed=gamma, kernel=1, ncpu=ncpu) llh.append( PointSourceLLH(exp, mc, livetime, mode="box", scramble=scramble, llh_model=llh_model, nsource_bounds=(0., 1e3), nsource=1.)) multillh.add_sample(sample + " : " + name, llh[-1]) # save a little RAM by removing items copied into LLHs del exp, mc # END for (season) ######################### REMOVE EVENT if injector is False: return multillh, spatial_prior else: inj = PriorInjector(spatial_prior, seed=seed, gamma=gamma, E0=1 * TeV, bunchsize=10) inj.fill(multillh.exp, multillh.mc, multillh.livetime) if verbose: print("\n injected spectrum:") print(" - %s" % str(inj.spectrum)) return multillh, spatial_prior, inj
def config(seasons, seed=1, scramble=True, e_range=(0, np.inf), verbose=True, gamma=2.0, dec=0., remove=False, src_w=None): r""" Configure multi season point source likelihood and injector. Parameters ---------- seasons : list List of season names seed : int Seed for random number generator Returns ------- multillh : MultiPointSourceLLH Multi year point source likelihood object inj : PointSourceInjector Point source injector object """ print("Scramble is %s" % str(scramble)) # store individual llh as lists to prevent pointer over-writing llh = [] multillh = MultiPointSourceLLH(seed=seed, ncpu=25) # setup likelihoods if verbose: print("\n seasons:") for season in np.atleast_1d(seasons): sample = season[0] name = season[1] exp, mc, livetime = Datasets[sample].season(name) sinDec_bins = Datasets[sample].sinDec_bins(name) energy_bins = Datasets[sample].energy_bins(name) if sample == "GFU" and remove: exp = Datasets['GFU'].remove_ev( exp, 58018.87118560489) # remove EHE 170922A mc = mc[mc["logE"] > 1.] if verbose: print(" - % 15s : % 15s" % (sample, name)) vals = (livetime, exp.size, min(exp['time']), max(exp['time'])) print( " (livetime %7.2f days, %6d events, mjd0 %.2f, mjd1 %.2f)" % vals) llh_model = EnergyLLH(twodim_bins=[energy_bins, sinDec_bins], allow_empty=True, bounds=[1., 4.], seed=2., kernel=1) llh.append( StackingPointSourceLLH(exp, mc, livetime, mode="box", scramble=scramble, llh_model=llh_model, nsource_bounds=(0., 1e3), nsource=15.)) multillh.add_sample(sample + " : " + name, llh[-1]) # save a little RAM by removing items copied into LLHs del exp, mc # END for (season) ####### # LLH # ####### ############################################################################# ############ # INJECTOR # ############ inj = PointSourceInjector(gamma=gamma, E0=1 * TeV, seed=seed, e_range=e_range) inj.fill(dec, multillh.exp, multillh.mc, multillh.livetime, src_w) ############ # INJECTOR # ############ ############################################################################# if verbose: print("\n fitted spectrum:") vals = (inj.E0 / TeV) print(" - dN/dE = A (E / %.1f TeV)^-index TeV^-1cm^-2s^-1" % vals) print(" - index is *fit*") print("\n injected spectrum:") vals = (inj.E0 / TeV, inj.gamma) print(" - dN/dE = A (E / %.1f TeV)^-%.2f TeV^-1cm^-2s^-1" % vals) return (multillh, inj)