Example #1
0
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)
    blocks = results['blocks']

    off_peak_phase = off_peak_results[pwn]['phase']

    import pickle
    jd = pickle.load(open('/nfs/farm/g/glast/u55/pulsar/2ndPulsarcatalog/psue/General/josh_dicts.pickle'))
    offset = float(jd[pwn.replace('PSRJ','J')]['shift'])

    print pwn,offset

    plot_phaseogram_blocks(ft1, skydir=skydir, 
                           emin=emin, emax=emax, radius=radius, 
                           phase_range=off_peak_phase, 
                           phase_range_kwargs=dict(color='black', fill=False, alpha=None, hatch='//'),
                           blocks=blocks, 
                           blocks_kwargs=dict(color='grey' if bw else 'red'),
                           nbins=nbins,
                           repeat_phase=False,
                           data_kwargs=dict(color='black', linewidth=0.5),
                           offset=offset,
                           axes=axes)


    axes.set_ylim(ymax=axes.get_ylim()[1]*1.2)

    # from http://matplotlib.sourceforge.net/faq/howto_faq.html#align-my-ylabels-across-multiple-subplots
    axes.yaxis.set_label_coords(-0.25,0.5)

    y,x = np.unravel_index(i, (nrows,ncols))
    if x != 0:
        axes.set_ylabel('')