Example #1
0
 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
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
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')))
Example #5
0
 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)