def setup_pointlike(self):

        if os.path.isfile(self.srcmdl): return

        config = self.config

        self._ds = DataSpecification(ft1files=self.ft1file,
                                     ft2files=config['scfile'],
                                     ltcube=self.ltcube,
                                     binfile=self.binfile)

        self._sa = SpectralAnalysis(self._ds,
                                    binsperdec=config['binsperdec'],
                                    emin=config['emin'],
                                    emax=config['emax'],
                                    irf=config['irfs'],
                                    roi_dir=self.skydir,
                                    maxROI=config['radius'],
                                    minROI=config['radius'],
                                    zenithcut=config['zmax'],
                                    event_class=0,
                                    conv_type=config['convtype'])

        sources = []
        point_sources, diffuse_sources = [], []

        galdiff = config['galdiff']
        isodiff = config['isodiff']

        bkg_sources = self.get_background(galdiff, isodiff)
        sources += filter(None, bkg_sources)

        catalog = self.get_catalog(config['catalog'])
        catalogs = filter(None, [catalog])

        for source in sources:
            if isinstance(source, PointSource): point_sources.append(source)
            else: diffuse_sources.append(source)

        self._roi = self._sa.roi(roi_dir=self.skydir,
                                 point_sources=point_sources,
                                 diffuse_sources=diffuse_sources,
                                 catalogs=catalogs,
                                 fit_emin=config['emin'],
                                 fit_emax=config['emax'])

        # Create model file
        self._roi.toXML(self.srcmdl,
                        convert_extended=True,
                        expand_env_vars=True)
Exemple #2
0
def build_roi(name, snrdata, latdata):

    snrdata=loaddict(snrdata)
    latdata=loaddict(latdata)

    roi_dir = SkyDir(*snrdata[name]['cel'])
    snrsize = snrdata[name]['size']

    if isinstance(snrsize,list) and len(snrsize) == 2:
        snrradius = math.sqrt(snrsize[0]*snrsize[1])/2.0
    else:
        snrradius = snrsize/2.0

    ds = DataSpecification(**latdata['data'])

    sa = SpectralAnalysis(ds,
                          binsperdec = 4,
                          emin       = 1e4,
                          emax       = 10**5.5,
                          irf        = "P7SOURCE_V6",
                          roi_dir    = roi_dir,
                          maxROI     = 10,
                          minROI     = 10,
                          event_class= 0)


    diffuse_sources = get_default_diffuse(**latdata['diffuse'])

    catalog = Catalog2FGL(**latdata['catalog'])

    roi=sa.roi(point_sources=[],
               diffuse_sources=diffuse_sources,
               catalogs=catalog)

    print 'bins',roi.bin_edges

    for source in roi.get_sources():
        if np.degrees(source.skydir.difference(roi_dir)) < snrradius + 0.5:
            roi.del_source(source)

    snr = ExtendedSource(
        name = name,
        model = PowerLaw(),
        spatial_model = Disk(sigma=snrradius, center=roi_dir)
    )

    roi.add_source(snr)

    return roi
Exemple #3
0
    def build_roi(self, name, fast):


        if fast:
            roi_size=5
            binsperdec = 2
            max_free=2
            free_radius=2
        else:
            roi_size = 10
            binsperdec = 4
            max_free=5
            free_radius=5

        catalog = Catalog2FGL('$FERMI/catalogs/gll_psc_v05.fit', 
                              latextdir='$FERMI/extended_archives/gll_psc_v05_templates',
                              prune_radius=0,
                              max_free=max_free,
                              free_radius=free_radius,
                              limit_parameters=True)

        ft1 = self.radiopsr_loader.get_ft1(name)
        ft2 = self.radiopsr_loader.get_ft2(name)
        ltcube = self.radiopsr_loader.get_ltcube(name)
        binfile = self.radiopsr_loader.get_binfile(name, binsperdec)

        roi_dir = self.radiopsr_loader.get_skydir(name)

        ds = DataSpecification(
            ft1files = ft1,
            ft2files = ft2,
            ltcube   = ltcube,
            binfile  = binfile)

        sa = SpectralAnalysis(ds,
                              binsperdec = binsperdec,
                              emin       = 100,
                              emax       = 1000000,
                              irf        = "P7SOURCE_V6",
                              roi_dir    = roi_dir,
                              maxROI     = roi_size,
                              minROI     = roi_size,
                              event_class= 0)

        fit_emin = 1e2
        fit_emax = 10**5.5

        model=PowerLaw(index=2, e0=np.sqrt(fit_emin*fit_emax))
        model.set_limits('index',-5,5)

        ps = PointSource(name=name, model=model, skydir=roi_dir)
        point_sources = [ps]

        diffuse_sources = get_default_diffuse(diffdir="/afs/slac/g/glast/groups/diffuse/rings/2year",
                                   gfile="ring_2year_P76_v0.fits",
                                   ifile="isotrop_2year_P76_source_v0.txt",
                                   limit_parameters=True)

        roi=sa.roi(point_sources=point_sources,
                   diffuse_sources=diffuse_sources,
                   catalogs=catalog,
                   fit_emin=fit_emin, fit_emax=fit_emax)
        return roi
Exemple #4
0
    def time_cut(roi, tstart, tstop, subdir, use_pointlike_ltcube, verbosity):
        """ Create a new ROI given a time cut. """

        sa = roi.sa
        ds = sa.dataspec

        get_defaults = lambda obj: [
            k[0] for k in obj.defaults if not isinstance(k, str)
        ]
        get_kwargs = lambda obj: {
            k: obj.__dict__[k]
            for k in get_defaults(obj)
        }

        ds_kwargs, sa_kwargs, roi_kwargs = map(get_kwargs, [ds, sa, roi])

        point_sources = [i.copy() for i in roi.psm.point_sources]
        diffuse_sources = [i.copy() for i in roi.dsm.diffuse_sources]

        if sa_kwargs['tstart'] != 0 or sa_kwargs['tstop'] != 0:
            raise Exception("sanity check")

        # * cut ft1file on time using gtselect

        ft2files = roi.sa.pixeldata.ft2files
        if len(ft2files) > 1: raise Exception("...")
        ft2file = ft2files[0]

        evfile = Gtlike.make_evfile(roi, subdir)

        cut_evfile = join(subdir, "cut_ft1_%s_%s.fits" % (tstart, tstop))

        if not exists(cut_evfile):
            if verbosity: print 'Running gtselect'
            gtselect = GtApp('gtselect', 'dataSubselector')
            gtselect.run(infile=evfile,
                         outfile=cut_evfile,
                         ra=0,
                         dec=0,
                         rad=180,
                         tmin=tstart,
                         tmax=tstop,
                         emin=1,
                         emax=1e7,
                         zmax=180)

        else:
            if verbosity:
                print '... Skiping gtselect for %s to %s' % (tstart, tstop)

        ds_kwargs['ft1files'] = cut_evfile

        # * create new binfile and ltcube
        ds_kwargs['binfile'] = join(subdir,
                                    'binned_%s_%s.fits' % (tstart, tstop))

        # save this to see if it has been phased by
        # the function uw.utilities.phasetools.phase_ltcube
        all_time_ltcube = ds_kwargs['ltcube']

        new_ltcube = join(subdir, 'ltcube_%s_%s.fits' % (tstart, tstop))

        if not exists(new_ltcube):
            if verbosity:
                print 'Running gtltcube for %s to %s' % (tstart, tstop)

            if use_pointlike_ltcube:
                pointlike_ltcube(evfile=cut_evfile,
                                 scfile=ft2file,
                                 outfile=new_ltcube,
                                 dcostheta=0.025,
                                 binsz=1,
                                 zmax=roi.sa.zenithcut,
                                 cone_angle=roi.sa.exp_radius,
                                 dir=roi.roi_dir)
            else:
                gtltcube = GtApp('gtltcube', 'Likelihood')
                gtltcube.run(evfile=cut_evfile,
                             scfile=ft2file,
                             outfile=new_ltcube,
                             dcostheta=0.025,
                             binsz=1)
        else:
            if verbosity:
                print '... Skiping gtltcube for %s to %s' % (tstart, tstop)

        # next, check if ltcube is phased, kind of a kluge
        f = pyfits.open(all_time_ltcube)
        if f['exposure'].header.has_key('PHASE'):
            assert f['exposure'].header['PHASE'] == f[
                'weighted_exposure'].header['PHASE']
            # If so, phase new ltcube
            phase = f['exposure'].header['PHASE']

            phased_ltcube = join(subdir,
                                 'phased_ltcube_%s_%s.fits' % (tstart, tstop))
            if not exists(phased_ltcube):
                phase_ltcube(new_ltcube, phased_ltcube, phase)
            else:
                if verbosity:
                    print '... Skiping gtltcube phasing for %s to %s' % (
                        tstart, tstop)

            ds_kwargs['ltcube'] = phased_ltcube
        else:
            ds_kwargs['ltcube'] = new_ltcube

        # * create new ds, sa, and roi
        new_ds = DataSpecification(**ds_kwargs)
        sa = SpectralAnalysis(new_ds, **sa_kwargs)
        return sa.roi(point_sources=point_sources,
                      diffuse_sources=diffuse_sources,
                      **roi_kwargs)
Exemple #5
0
    def get_roi(self,
                name,
                phase,
                fit_emin,
                fit_emax,
                binsperdec,
                extended=False,
                roi_size=10,
                catalog_kwargs=dict(),
                **kwargs):
        """ Sets up the ROI for studying a LAT Pulsar in the off pulse. """

        sourcedict = yaml.load(open(self.pwndata))[name]
        ltcube = sourcedict['ltcube']
        pulsar_position = SkyDir(*sourcedict['cel'])
        ft1 = sourcedict['ft1']
        ft2 = sourcedict['ft2']

        source = PWNRegion.get_source(name,
                                      position=pulsar_position,
                                      fit_emin=fit_emin,
                                      fit_emax=fit_emax,
                                      sigma=0.1,
                                      extended=extended)
        sources = [source]
        roi_dir = pulsar_position

        phase = PhaseRange(phase)

        point_sources, diffuse_sources = [], []
        for source in sources:
            if isinstance(source, PointSource):
                point_sources.append(source)
            else:
                diffuse_sources.append(source)

        diffuse_sources += PWNRegion.get_background()

        catalog = PWNRegion.get_catalog(**catalog_kwargs)

        binfile = join(self.savedir, 'binned_phased.fits')

        phased_ltcube = PWNRegion.phase_ltcube(ltcube, phase, self.savedir)
        phased_ft1 = PWNRegion.phase_ft1(ft1, phase, self.savedir)

        ds = DataSpecification(ft1files=phased_ft1,
                               ft2files=ft2,
                               ltcube=phased_ltcube,
                               binfile=binfile)

        print 'For now, 4 bins per decade. Eventually, this will have to be better.'
        sa = SpectralAnalysis(ds,
                              binsperdec=binsperdec,
                              emin=100,
                              emax=1000000,
                              irf="P7SOURCE_V6",
                              roi_dir=roi_dir,
                              maxROI=roi_size,
                              minROI=roi_size,
                              event_class=0)

        roi = sa.roi(point_sources=point_sources,
                     diffuse_sources=diffuse_sources,
                     catalogs=catalog,
                     phase_factor=1,
                     fit_emin=fit_emin,
                     fit_emax=fit_emax,
                     **kwargs)

        print 'bins ', roi.bin_edges

        roi.extra = dict(unphased_ft1=ft1, unphased_ltcube=ltcube, phase=phase)

        self.roi = roi

        return roi