def get_pairs(): changed=[];pairs=[] free = roi.free_sources[:] for s in free: s.chisq=chisq(s) cname=s.name.replace(' ','') if cname not in fgl.df.index: print '{:14s} {:6.0f} x'.format(s.name, s.ts) continue fl8y = fgl.df.loc[cname] trunc = fl8y.sname[5:] print '{:17s} {:6.0f} --> {:14s} {:6.0f}'.format(s.name, s.ts, trunc, fl8y.ts), if fl8y.extended: sx = sources.ExtendedSource(name=trunc, skydir=(fl8y.ra,fl8y.dec), model=fl8y.model, dmodel=s.dmodel) else: sx = sources.PointSource(name=trunc, skydir=(fl8y.ra,fl8y.dec), model=fl8y.model) roi.del_source(s.name) roi.add_source(sx) roi.get_sed(sx.name) sx.chisq = chisq(sx) newts=roi.TS(trunc) print ' -->{:6.0f}'.format(newts) changed.append( ( (s.name,s.model,s.ts, s.chisq,),# s.model.iflux(e_weight=1)), (sx.name,sx.model,sx.ts,sx.chisq,) # sx.model.iflux(e_weight=1)), #avoid saving dmodel? ) ) pairs.append((s, sx)) return changed, pairs
def make_test_source(self, offset, expected_overlap): model = sources.PowerLaw(1e-11, 2.0) source = sources.PointSource(name='test source', skydir=SkyDir(self.skydir.ra(), self.skydir.dec() + offset), model=model) conv = source.response(self.back_band) overlap = conv.overlap self.assertAlmostEqual(expected_overlap, overlap, delta=0.001)
def test_point(self): """-->response of point source at the center""" ptsrc = sources.PointSource(name='test', skydir=self.skydir, model=sources.PowerLaw(1e-11, 2.0)) self.resp = resp = ptsrc.response(self.back_band) self.assertAlmostEquals(0.633, resp.overlap, delta=0.01) self.assertAlmostEquals(1.0, resp._exposure_ratio) self.assertAlmostEquals(1242, resp.counts, delta=1.) self.assertAlmostEquals(150329, resp(resp.source.skydir), delta=10)
def psc_check(roi, psc_name='gll_psc*uw8011*' , outdir='psc_check'): """Compare the spectra of sources from a "gll" file with the corresponding pointlike original fits. """ from uw.like2.analyze import fermi_catalog from uw.like2.plotting import sed #load the catalog fgl = roi.config.get('fgl', None) if fgl is None: fgl = fermi_catalog.GLL_PSC2(psc_name) roi.config['fgl']= fgl # Replace sources, keep list of (old,new) changed = [] source_pairs=[] for s in roi.free_sources: cname=s.name.replace(' ','') if cname not in fgl.df.index: print '{:14s} {:6.0f} '.format(s.name, s.ts) continue fl8y = fgl.df.loc[cname] trunc = fl8y.sname[5:] print '{:14s} {:6.0f} --> {:14s} {:6.0f}'.format(s.name, s.ts, trunc, fl8y.ts), if fl8y.extended: sx = sources.ExtendedSource(name=trunc, skydir=(fl8y.ra,fl8y.dec), model=fl8y.model, dmodel=s.dmodel) else: sx = sources.PointSource(name=trunc, skydir=(fl8y.ra,fl8y.dec), model=fl8y.model) roi.del_source(s.name) roi.add_source(sx) newts=roi.TS(trunc) print ' -->{:6.0f}'.format(newts) changed.append(( (s.name,s.model,s.ts), (sx.name,sx.model,sx.ts))) #avoid saving dmodel? source_pairs.append((s, sx)) if outdir is None: return # save info for comparison def path_check(x): if not os.path.exists(x): os.mkdir(x) map( path_check, [outdir, outdir+'/info', outdir+'/sed']) pickle.dump(changed, open('psc_check/info/HP12_{}.pickle'.format(roi.name[5:]),'w')) # save plots for old,new in source_pairs: sed.plot_pair(old,new).savefig('psc_check/sed/{}_sed.jpg'.format(new.name.replace('+','p')))
def add_seed(s, update_if_exists=True): # use column 'key' to determine the model to use model = maps.table_info[s['key']][1]['model'] try: src = roi.add_source( sources.PointSource(name=s.name, skydir=s['skydir'], model=model)) if src.model.name == 'LogParabola': roi.freeze('beta', src.name) elif src.model.name == 'PLSuperExpCutoff': roi.freeze('Cutoff', src.name) print '%s: added at %s' % (s.name, s['skydir']) except Exception, msg: if update_if_exists: src = roi.get_source(s.name) print '{}: updating existing source at {} '.format( s.name, s['skydir']) else: print '{}: Fail to add "{}"'.format(s.name, msg)