Exemplo n.º 1
0
    def main(self, *argv):
        usage = "usage: %(prog)s [options]"
        description = """Generates PSF model."""
        parser = argparse.ArgumentParser(usage=usage, description=description)

        IRFManager.configure(parser)

        parser.add_argument('--ltfile',
                            default=None,
                            help='Set the livetime cube which will be used '
                            'to generate the exposure-weighted PSF model.')

        parser.add_argument('--src', default='Vela', help='')

        parser.add_argument('--irf',
                            default=None,
                            help='Set the names of one or more IRF models.')

        parser.add_argument('--output_dir',
                            default=None,
                            help='Set the output directory name.')

        parser.add_argument('--cth_bin_edge',
                            default='0.4,1.0',
                            help='Edges of cos(theta) bins '
                            '(e.g. 0.2,0.5,1.0).')

        parser.add_argument('--egy_bin_edge',
                            default=None,
                            help='Edges of energy bins.')

        parser.add_argument('--egy_bin',
                            default='1.25/5.0/0.25',
                            help='Set min/max energy.')

        parser.add_argument('--quantiles',
                            default='0.34,0.68,0.90,0.95',
                            help='Define the set of quantiles to compute.')

        parser.add_argument('--conversion_type',
                            default='front',
                            help='Draw plots.')

        parser.add_argument('--spectrum',
                            default='powerlaw/2',
                            help='Draw plots.')

        parser.add_argument('--edisp',
                            default=None,
                            help='Set the energy dispersion lookup table.')

        parser.add_argument('-o',
                            '--output',
                            default=None,
                            help='Set the output file.')

        parser.add_argument('--load_from_file',
                            default=False,
                            action='store_true',
                            help='Load IRFs from FITS.')

        opts = parser.parse_args(list(argv))

        irfs = opts.irf.split(',')

        [elo, ehi, ebin] = [float(t) for t in opts.egy_bin.split('/')]
        egy_bin_edge = np.linspace(elo, ehi, 1 + int((ehi - elo) / ebin))
        cth_bin_edge = [float(t) for t in opts.cth_bin_edge.split(',')]
        quantiles = [float(t) for t in opts.quantiles.split(',')]

        for irf in irfs:

            if opts.output is None:

                output_file = re.sub('\:\:', r'_', irf)

                output_file += '_%03.f%03.f' % (100 * cth_bin_edge[0],
                                                100 * cth_bin_edge[1])
                output_file += '_psfdata.P'
            else:
                output_file = opts.output

            irfm = IRFManager.create(irf, opts.load_from_file, opts.irf_dir)

            lonlat = (0, 0)
            if opts.src != 'iso' and opts.src != 'iso2':
                cat = Catalog()
                src = cat.get_source_by_name(opts.src)
                lonlat = (src['RAJ2000'], src['DEJ2000'])

            m = PSFModelLT(opts.ltfile,
                           irfm,
                           nbin=400,
                           cth_range=cth_bin_edge,
                           psf_type=opts.src,
                           lonlat=lonlat,
                           edisp_table=opts.edisp)

            spectrum = opts.spectrum.split('/')
            pars = [float(t) for t in spectrum[1].split(',')]
            m.set_spectrum(spectrum[0], pars)
            #            m.set_spectrum('powerlaw_exp',(1.607,3508.6))

            psf_data = PSFData(egy_bin_edge, cth_bin_edge, 'model')

            #            f = open(opts.o,'w')

            for i in range(len(psf_data.quantiles)):

                ql = psf_data.quantile_labels[i]
                q = psf_data.quantiles[i]
                for iegy in range(len(egy_bin_edge) - 1):

                    elo = egy_bin_edge[iegy]
                    ehi = egy_bin_edge[iegy + 1]
                    radius = m.quantile(10**elo, 10**ehi, q)
                    #                    print elo, ehi, radius
                    psf_data.qdata[i].set(iegy, 0, radius)


#                    line = '%6.3f '%(q)
#                    line += '%6.3f %6.3f '%(cth_range[0],cth_range[1])
#                    line += '%6.3f %6.3f %8.4f %8.4f'%(elo,ehi,radius,0.0)

#                    f.write(line + '\n')

#                m.set_spectrum('powerlaw_exp',(1.607,3508.6))
#                m.set_spectrum('powerlaw',(2.0))
#            psf_data.print_quantiles('test')
            psf_data.save(output_file)
Exemplo n.º 2
0
    def main(self,*argv):
        usage = "usage: %(prog)s [options]"
        description = """Generates PSF model."""
        parser = argparse.ArgumentParser(usage=usage,description=description)

        IRFManager.configure(parser)

        parser.add_argument('--ltfile', default = None, 
                          help = 'Set the livetime cube which will be used '
                          'to generate the exposure-weighted PSF model.')

        parser.add_argument('--src', default = 'Vela', 
                          help = '')
        
        parser.add_argument('--irf', default = None, 
                          help = 'Set the names of one or more IRF models.')
                
        parser.add_argument('--output_dir', default = None, 
                            help = 'Set the output directory name.')
        
        parser.add_argument('--cth_bin_edge', default = '0.4,1.0', 
                            help = 'Edges of cos(theta) bins '
                            '(e.g. 0.2,0.5,1.0).')

        parser.add_argument('--egy_bin_edge', default = None, 
                            help = 'Edges of energy bins.')

        parser.add_argument('--egy_bin', default = '1.25/5.0/0.25', 
                            help = 'Set min/max energy.')
        
        parser.add_argument('--quantiles', default = '0.34,0.68,0.90,0.95', 
                            help = 'Define the set of quantiles to compute.')
        
        parser.add_argument('--conversion_type', default = 'front', 
                            help = 'Draw plots.')

        parser.add_argument('--spectrum', default = 'powerlaw/2',
                            help = 'Draw plots.')

        parser.add_argument('--edisp', default = None,
                            help = 'Set the energy dispersion lookup table.')
        
        parser.add_argument('-o', '--output', default = None, 
                            help = 'Set the output file.')
        
        parser.add_argument('--load_from_file', default = False, 
                            action='store_true',
                            help = 'Load IRFs from FITS.')

        opts = parser.parse_args(list(argv))

        irfs = opts.irf.split(',')

        [elo, ehi, ebin] = [float(t) for t in opts.egy_bin.split('/')]
        egy_bin_edge = np.linspace(elo, ehi, 1 + int((ehi - elo) / ebin))
        cth_bin_edge = [float(t) for t in opts.cth_bin_edge.split(',')]
        quantiles = [float(t) for t in opts.quantiles.split(',')]
        
        for irf in irfs:

            if opts.output is None:

                output_file = re.sub('\:\:',r'_',irf)
                
                output_file += '_%03.f%03.f'%(100*cth_bin_edge[0],
                                              100*cth_bin_edge[1]) 
                output_file += '_psfdata.P'
            else:
                output_file = opts.output

            irfm = IRFManager.create(irf,opts.load_from_file,opts.irf_dir)

            lonlat = (0,0)
            if opts.src != 'iso' and opts.src != 'iso2':
                cat = Catalog()
                src = cat.get_source_by_name(opts.src)
                lonlat = (src['RAJ2000'], src['DEJ2000'])
            
            m = PSFModelLT(opts.ltfile, irfm,
                           nbin=400,
                           cth_range=cth_bin_edge,
                           psf_type=opts.src,
                           lonlat=lonlat,
                           edisp_table=opts.edisp)

            spectrum = opts.spectrum.split('/')            
            pars = [ float(t) for t in spectrum[1].split(',')]            
            m.set_spectrum(spectrum[0],pars)
#            m.set_spectrum('powerlaw_exp',(1.607,3508.6))

            psf_data = PSFData(egy_bin_edge,cth_bin_edge,'model')

#            f = open(opts.o,'w')

            for i in range(len(psf_data.quantiles)):

                ql = psf_data.quantile_labels[i]
                q = psf_data.quantiles[i]
                for iegy in range(len(egy_bin_edge)-1):

                    elo = egy_bin_edge[iegy]
                    ehi = egy_bin_edge[iegy+1]
                    radius = m.quantile(10**elo,10**ehi,q)
#                    print elo, ehi, radius
                    psf_data.qdata[i].set(iegy,0,radius)

#                    line = '%6.3f '%(q)
#                    line += '%6.3f %6.3f '%(cth_range[0],cth_range[1])
#                    line += '%6.3f %6.3f %8.4f %8.4f'%(elo,ehi,radius,0.0)
                    
#                    f.write(line + '\n')
            
#                m.set_spectrum('powerlaw_exp',(1.607,3508.6))
#                m.set_spectrum('powerlaw',(2.0))
#            psf_data.print_quantiles('test')
            psf_data.save(output_file)