def __init__(self, ft1, skydir, emax, emins=np.logspace(2,4,17), rads=np.linspace(0.1,4,40), verbose=False, ): self.ft1 = ft1 self.skydir = skydir self.emax = emax stats = np.empty([len(emins),len(rads)]) for iemin,emin in enumerate(emins): for irad,radius in enumerate(rads): phases = get_phases(ft1, skydir, emin, emax, radius) stat = hm(phases) if len(phases) > 0 else 0 if verbose: print 'emin=%s, radius=%s, stat=%s, len=%s' % (emin,radius,stat,len(phases)) stats[iemin,irad] = stat a = np.argmax(stats) coord_e, coord_r = np.unravel_index(a, stats.shape) self.optimal_emin = emins[coord_e] self.optimal_radius = rads[coord_r] self.optimal_h = np.max(stats)
def find_offpeak(ft1,name,skydir, pwncat1phase, emax=100000): # First, find energy and radius that maximize H test. opt = OptimizePhases(ft1,skydir, emax=emax, verbose=True) print 'optimal energy=%s & radius=%s, h=%s' % (opt.optimal_emin,opt.optimal_radius,opt.optimal_h) # Get optimal phases phases = get_phases(ft1, skydir, opt.optimal_emin, emax, opt.optimal_radius) # compute bayesian blocks on the optimized list of phases off_peak_bb = OffPeakBB(phases) global results results=tolist( dict( name=name, pwncat1phase = pwncat1phase.tolist() if pwncat1phase is not None else None, off_peak_phase = off_peak_bb.off_peak.tolist(), blocks = off_peak_bb.blocks, optimal_emin = opt.optimal_emin, emax = emax, optimal_radius = opt.optimal_radius, ncpPrior=off_peak_bb.ncpPrior, actual_ncpPrior=off_peak_bb.actual_ncpPrior, ) ) yaml.dump(results,open('results_%s.yaml' % name,'w')) plot_phaseogram_blocks(ft1, repeat_phase=False, skydir = skydir, emin = opt.optimal_emin, emax = emax, radius = opt.optimal_radius, phase_range = off_peak_bb.off_peak, blocks_kwargs=dict(color='green'), phase_range_kwargs=dict(color='green', label='blocks'), data_kwargs=dict(color='red'), blocks = off_peak_bb.blocks) if pwncat1phase is not None: PhaseRange(pwncat1phase).axvspan(label='pwncat1', alpha=0.25, color='blue') P.legend() P.title(name) P.savefig('results_%s.pdf' % name) P.savefig('results_%s.png' % name)