def get_brightest_sources(sra,sdec,rad,fl_tres,fglfile): names = [] ras = [] decs = [] if not os.path.exists(fglfile): # print "Specified FGL file ",fglfile # print "does not exitst. Exit." return [],[],[] fglf = pyfits.open(fglfile) source = fglf[1].data.field('Source_name') assoc1 = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') sdis = [sdist(ra[i],dec[i],sra,sdec) for i in range(len(source))] inds = [ i for i in range(len(source)) if sdist(ra[i],dec[i],sra,sdec)<rad] flux = fglf[1].data.field('Flux1000') # print len(sdis),len(inds) dists = [sdis[i] for i in inds if flux[i] > fl_tres ] snames = [source[i] for i in inds if flux[i] > fl_tres ] names = [assoc1[i] for i in inds if flux[i] > fl_tres ] for i in range(len(names)): if names[i] == '': names[i] = snames[i] ras = [ra[i] for i in inds if flux[i] > fl_tres and sdis[i]<rad ] decs = [dec[i] for i in inds if flux[i] > fl_tres and sdis[i]<rad ] # print sdis,ras,decs fglf.close() return names,ras,decs
def get_brightest_sources(sra, sdec, rad, fl_tres, fglfile): names = [] ras = [] decs = [] if not os.path.exists(fglfile): # print "Specified FGL file ",fglfile # print "does not exitst. Exit." return [], [], [] fglf = pyfits.open(fglfile) source = fglf[1].data.field('Source_name') assoc1 = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') sdis = [sdist(ra[i], dec[i], sra, sdec) for i in range(len(source))] inds = [ i for i in range(len(source)) if sdist(ra[i], dec[i], sra, sdec) < rad ] flux = fglf[1].data.field('Flux1000') # print len(sdis),len(inds) dists = [sdis[i] for i in inds if flux[i] > fl_tres] snames = [source[i] for i in inds if flux[i] > fl_tres] names = [assoc1[i] for i in inds if flux[i] > fl_tres] for i in range(len(names)): if names[i] == '': names[i] = snames[i] ras = [ra[i] for i in inds if flux[i] > fl_tres and sdis[i] < rad] decs = [dec[i] for i in inds if flux[i] > fl_tres and sdis[i] < rad] # print sdis,ras,decs fglf.close() return names, ras, decs
def spc(sname, radius, fglfile): # Calculates the source proximity coefficient according # to 2FGL fluxes. sigma = 1.0 * 1.0 try: fglf = pyfits.open(fglfile) except (): return 0.0, -1, "Failed to open catalog file" source = fglf[1].data.field('Source_name') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') flux = fglf[1].data.field('Flux1000') sra, sdec, sind = get_fgl_source_coords(sname, fglfile) if sind == -1: print "Failed to querry 2FGL file ", fglfile, " for the coordinates of ", sname return 0.0, -1 # indexes = [ i for i in range(len(source)) if sdist(ra[i],dec[i],sra,sdec) < radius and source[i] != sname ] spcx = 0.0 for i in range(len(source)): dist = sdist(ra[i], dec[i], sra, sdec) if dist < radius and i != sind: spcx += flux[i] / (2.0 + dist * dist) spcx = spcx / flux[sind] print "Source proximity coefficient for ", sname, ":", spcx return spcx, 1
def spc(sname,radius,fglfile): # Calculates the source proximity coefficient according # to 2FGL fluxes. sigma = 1.0*1.0 try: fglf = pyfits.open(fglfile) except(): return 0.0, -1, "Failed to open catalog file" source = fglf[1].data.field('Source_name') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') flux = fglf[1].data.field('Flux1000') sra,sdec,sind = get_fgl_source_coords(sname,fglfile) if sind == -1: print "Failed to querry 2FGL file ",fglfile," for the coordinates of ",sname return 0.0,-1 # indexes = [ i for i in range(len(source)) if sdist(ra[i],dec[i],sra,sdec) < radius and source[i] != sname ] spcx = 0.0 for i in range(len(source)): dist = sdist(ra[i],dec[i],sra,sdec) if dist < radius and i != sind: spcx += flux[i]/(2.0+dist*dist) spcx = spcx/flux[sind] print "Source proximity coefficient for ",sname,":",spcx return spcx, 1
def get_closest_fgl_asssource(sra, sdec, fglfile): if not os.path.exists(fglfile): # print "Specified FGL file ",fglfile # print "does not exitst. Exit." return -1.0, -1.0, -1, 0 fglf = pyfits.open(fglfile) source1 = fglf[1].data.field('Source_name') source = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') sdis = [sdist(ra[i], dec[i], sra, sdec) for i in range(len(source))] ind = sdis.index(min(sdis)) fglf.close() snm = source[ind] if snm == "": snm = source1[ind] return source1[ind], sdis[ind], snm, 0
def get_closest_fgl_asssource(sra,sdec,fglfile): if not os.path.exists(fglfile): # print "Specified FGL file ",fglfile # print "does not exitst. Exit." return -1.0,-1.0,-1,0 fglf = pyfits.open(fglfile) source1 = fglf[1].data.field('Source_name') source = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') sdis = [sdist(ra[i],dec[i],sra,sdec) for i in range(len(source))] ind = sdis.index(min(sdis)) fglf.close() snm = source[ind] if snm == "": snm = source1[ind] return source1[ind],sdis[ind],snm,0
def write_xml_model(self): dist = [] dtp = [('dist',float),('name','S20')] for k in self.SourceList: s = self.SourceList[k] dist.append((sdist(s.ra,s.dec,self.ra,self.dec),k)) darr = array(dist,dtype=dtp) sort(darr,order='dist') xmlf = open(self.model_file,'w') xmlf.write('<?xml version="1.0" ?>\n') xmlf.write('<source_library title="source library">\n') xmlf.write('\n<!-- Point Sources -->\n') diff_src = [] for s in sort(darr,order='dist'): src = self.SourceList[s['name']] sn = src.name st = src.type if st != "SkyDirFunction": diff_src.append(s['name']) continue smodel = src.model xmlf.write('<source name="%s" type="PointSource">\n' %(sn)) xmlf.write('\t<!-- Source is %s degrees away from ROI center -->\n' %s['dist']) xmlf.write('\t<spectrum type="%s">\n'%smodel) for par in src.pars: p = src.pars[par] fr = "0" if p.fixed: fr = "1" xmlf.write('\t\t<parameter free="%s" max="%e" min="%e" name="%s" scale="%d" value="%2.4f"/>\n'%(fr,p.max,p.min,p.name,p.scale,p.value)) xmlf.write('\t</spectrum>\n') xmlf.write('\t<spatialModel type="SkyDirFunction">\n') xmlf.write('\t\t<parameter free="0" max="360.0" min="-360.0" name="RA" scale="1.0" value="%s"/>\n' %src.ra) xmlf.write('\t\t<parameter free="0" max="90" min="-90" name="DEC" scale="1.0" value="%s"/>\n' %src.dec) xmlf.write('\t</spatialModel>\n') xmlf.write('</source>\n') xmlf.write('\n<!-- Extended Sources -->\n') for n in diff_src: src = self.SourceList[n] sn = src.name st = src.type smodel = src.model xmlf.write('<source name="%s" type="DiffuseSource">\n' %(sn)) xmlf.write('\t<!-- Source is %s degrees away from ROI center -->\n' %s['dist']) addfile1 = "" addfile2 = 'file="%s/%s"'%(self.templates_path,src.template) if smodel == "FileFunction": addfile1 = 'file="%s/%s"'%(self.templates_path,src.template) addfile2 = "" xmlf.write('\t<spectrum type="%s" %s>\n'%(smodel,addfile1)) for par in src.pars: p = src.pars[par] fr = "1" if p.fixed: fr = "0" xmlf.write('\t\t<parameter free="%s" max="%e" min="%e" name="%s" scale="%d" value="%2.4f"/>\n'% (fr,p.max,p.min,p.name,p.scale,p.value)) xmlf.write('\t</spectrum>\n') xmlf.write('\t<spatialModel %s type="%s">\n'%(addfile2,src.type)) if src.type == "SpatialMap": xmlf.write('\t\t<parameter free="0" max="1000.0" min="0.001" name="Prefactor" scale="1.0" value="1.0"/>\n' %s) if src.type == "MapCubeFunction": xmlf.write('\t\t<parameter free="0" max="1000.0" min="0.001" name="Normalization" scale="1.0" value="1.0"/>\n' %s) if src.type == "ConstantValue": xmlf.write('\t\t<parameter free="0" max="10.0" min="0.0" name="Value" scale="1.0" value="1.0"/>\n' %s) xmlf.write('\t</spatialModel>\n') xmlf.write('</source>\n') xmlf.write('</source_library>\n') xmlf.close()
def initsources(self): from fgltools import sdist import pyfits errors = [] # self.SourceList[:] = [] if self.haveCatalog == True: # Getting list of templates templates = [] for (dirpath, dirnames, filenames) in os.walk(self.templates_path): templates.extend(filenames) #---------------------------------------------------- fglf = pyfits.open(self.catalog) source = fglf[1].data.field('Source_name') assoc1 = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') model = fglf[1].data.field('SpectrumType') flux = fglf[1].data.field('Flux1000') pl_index = fglf[1].data.field('Spectral_Index') beta = fglf[1].data.field('beta') cutoff = fglf[1].data.field('Cutoff') eb = fglf[1].data.field('Pivot_Energy') # inds = [ i for i in range(len(source)) if \ # sdist(ra[i],dec[i],self.ra,self.dec)>0.0 \ # and sdist(ra[i],dec[i],self.ra,self.dec)<self.all_deg \ # and flux[i]>self.all_flux and flux[i]<1.0] inds = [ i for i in range(len(source)) if \ sdist(ra[i],dec[i],self.ra,self.dec)<self.none_deg and source[i] not in self.SourceList ] ext_sn = fglf[1].data.field('Extended_Source_Name') ext_sn4 = fglf[4].data.field('Source_Name') ext_file = fglf[4].data.field('Spatial_Filename') for i in inds: dist = sdist(ra[i],dec[i],self.ra,self.dec) mod = model[i] pars = self.default_pars(mod,index=pl_index[i], eb=eb[i],beta=beta[i],cut=cutoff[i],f=flux[i]) source_type = "SkyDirFunction" sn = source[i] if assoc1[i].strip() != "": sn = assoc1[i].strip() mfil = "" if ext_sn[i].strip() != "": source_type = "SpatialMap" sn = ext_sn[i] for j in range(len(ext_sn4)): if ext_sn[i] == ext_sn4[j]: mfil = ext_file[j] if mfil not in templates: errors.append("Template file %s is not in templates."%mfil) break sss = LatSource(sn,ra[i],dec[i],source_type,mod,pars, mfil,flux[i],assoc1[i]) self.SourceList[source[i]] = sss dels = [] # delete source outside outer radius limit (self.none_deg) for s in self.SourceList: src = self.SourceList[s] if sdist(src.ra,src.dec,self.ra,self.dec)>self.none_deg: dels.append(s) for s in dels: del self.SourceList[s] for s in self.SourceList: src = self.SourceList[s] d = sdist(src.ra,src.dec,self.ra,self.dec) for p in src.pars: src.pars[p].fixed = 0 if (d<self.norm_deg): try: src.pars["Prefactor"].fixed = 1 except: pass if (d<self.all_deg): for p in src.pars: src.pars[p].fixed = 1 reselect = False try: if sdist(self.ra,self.dec, self.SourceList[self.selected_source].ra, self.SourceList[self.selected_source].dec)>self.none_deg: reselect = True except: pass # for i in range(len(source)): # d = sdist(ra[i],dec[i],self.ra,self.dec) if reselect: # print "reselct" self.selected_source = self.SourceList.keys()[0] self.selected_ra = self.SourceList[self.selected_source].ra self.selected_dec = self.SourceList[self.selected_source].dec # adding Galactic Diffuse Emission xxx = [templates[i] for i in xrange(len(templates)) if templates[i][:3] == "gll"] if len(xxx): gd_template = xxx[0] else: gd_template = "" errors.append("Failed to file template for Galactic Diffusion.") pars = self.default_pars("PowerLaw",index=0.0) source_type = "MapCubeFunction" sss = LatSource('GalacticDiffuse',0.0,0.0,source_type,"PowerLaw",pars,gd_template) sss.pars["Prefactor"] = Param("Prefactor",1.0,10.0,1.0,1.0,1,0.0) sss.pars["Index"] = Param("Index",0.0,1.0,-1.0,1.0,0,0.0) sss.pars["Scale"] = Param("Scale",1.0e2,2.0e2,5.0e1,1.0,0,0.0) if sss.name not in self.SourceList: self.SourceList[sss.name] = sss # adding Extragalactic Diffuse Background Emission xxx = [templates[i] for i in xrange(len(templates)) if templates[i][:3] == "iso"] if len(xxx): gd_template = xxx[0] else: gd_template = "" errors.append("Failed to file template for ExtraGalactic Diffusion.") pars = self.default_pars("FileFunction") source_type = "ConstantValue" sss = LatSource('ExtragalacticDiffBkg',0.0,0.0,source_type,"FileFunction",pars,gd_template) if sss.name not in self.SourceList: self.SourceList[sss.name] = sss
def write_xml_model(self): dist = [] dtp = [('dist', float), ('name', 'S20')] for k in self.SourceList: s = self.SourceList[k] dist.append((sdist(s.ra, s.dec, self.ra, self.dec), k)) darr = array(dist, dtype=dtp) sort(darr, order='dist') xmlf = open(self.model_file, 'w') xmlf.write('<?xml version="1.0" ?>\n') xmlf.write('<source_library title="source library">\n') xmlf.write('\n<!-- Point Sources -->\n') diff_src = [] for s in sort(darr, order='dist'): src = self.SourceList[s['name']] sn = src.name st = src.type if st != "SkyDirFunction": diff_src.append(s['name']) continue smodel = src.model xmlf.write('<source name="%s" type="PointSource">\n' % (sn)) xmlf.write( '\t<!-- Source is %s degrees away from ROI center -->\n' % s['dist']) xmlf.write('\t<spectrum type="%s">\n' % smodel) for par in src.pars: p = src.pars[par] fr = "0" if p.fixed: fr = "1" xmlf.write( '\t\t<parameter free="%s" max="%e" min="%e" name="%s" scale="%d" value="%2.4f"/>\n' % (fr, p.max, p.min, p.name, p.scale, p.value)) xmlf.write('\t</spectrum>\n') xmlf.write('\t<spatialModel type="SkyDirFunction">\n') xmlf.write( '\t\t<parameter free="0" max="360.0" min="-360.0" name="RA" scale="1.0" value="%s"/>\n' % src.ra) xmlf.write( '\t\t<parameter free="0" max="90" min="-90" name="DEC" scale="1.0" value="%s"/>\n' % src.dec) xmlf.write('\t</spatialModel>\n') xmlf.write('</source>\n') xmlf.write('\n<!-- Extended Sources -->\n') for n in diff_src: src = self.SourceList[n] sn = src.name st = src.type smodel = src.model xmlf.write('<source name="%s" type="DiffuseSource">\n' % (sn)) xmlf.write( '\t<!-- Source is %s degrees away from ROI center -->\n' % s['dist']) addfile1 = "" addfile2 = 'file="%s/%s"' % (self.templates_path, src.template) if smodel == "FileFunction": addfile1 = 'file="%s/%s"' % (self.templates_path, src.template) addfile2 = "" xmlf.write('\t<spectrum type="%s" %s>\n' % (smodel, addfile1)) for par in src.pars: p = src.pars[par] fr = "1" if p.fixed: fr = "0" xmlf.write( '\t\t<parameter free="%s" max="%e" min="%e" name="%s" scale="%d" value="%2.4f"/>\n' % (fr, p.max, p.min, p.name, p.scale, p.value)) xmlf.write('\t</spectrum>\n') xmlf.write('\t<spatialModel %s type="%s">\n' % (addfile2, src.type)) if src.type == "SpatialMap": xmlf.write( '\t\t<parameter free="0" max="1000.0" min="0.001" name="Prefactor" scale="1.0" value="1.0"/>\n' % s) if src.type == "MapCubeFunction": xmlf.write( '\t\t<parameter free="0" max="1000.0" min="0.001" name="Normalization" scale="1.0" value="1.0"/>\n' % s) if src.type == "ConstantValue": xmlf.write( '\t\t<parameter free="0" max="10.0" min="0.0" name="Value" scale="1.0" value="1.0"/>\n' % s) xmlf.write('\t</spatialModel>\n') xmlf.write('</source>\n') xmlf.write('</source_library>\n') xmlf.close()
def initsources(self): from fgltools import sdist import pyfits errors = [] # self.SourceList[:] = [] if self.haveCatalog == True: # Getting list of templates templates = [] for (dirpath, dirnames, filenames) in os.walk(self.templates_path): templates.extend(filenames) #---------------------------------------------------- fglf = pyfits.open(self.catalog) source = fglf[1].data.field('Source_name') assoc1 = fglf[1].data.field('ASSOC1') ra = fglf[1].data.field('RAJ2000') dec = fglf[1].data.field('DEJ2000') model = fglf[1].data.field('SpectrumType') flux = fglf[1].data.field('Flux1000') pl_index = fglf[1].data.field('Spectral_Index') beta = fglf[1].data.field('beta') cutoff = fglf[1].data.field('Cutoff') eb = fglf[1].data.field('Pivot_Energy') # inds = [ i for i in range(len(source)) if \ # sdist(ra[i],dec[i],self.ra,self.dec)>0.0 \ # and sdist(ra[i],dec[i],self.ra,self.dec)<self.all_deg \ # and flux[i]>self.all_flux and flux[i]<1.0] inds = [ i for i in range(len(source)) if \ sdist(ra[i],dec[i],self.ra,self.dec)<self.none_deg and source[i] not in self.SourceList ] ext_sn = fglf[1].data.field('Extended_Source_Name') ext_sn4 = fglf[4].data.field('Source_Name') ext_file = fglf[4].data.field('Spatial_Filename') for i in inds: dist = sdist(ra[i], dec[i], self.ra, self.dec) mod = model[i] pars = self.default_pars(mod, index=pl_index[i], eb=eb[i], beta=beta[i], cut=cutoff[i], f=flux[i]) source_type = "SkyDirFunction" sn = source[i] if assoc1[i].strip() != "": sn = assoc1[i].strip() mfil = "" if ext_sn[i].strip() != "": source_type = "SpatialMap" sn = ext_sn[i] for j in range(len(ext_sn4)): if ext_sn[i] == ext_sn4[j]: mfil = ext_file[j] if mfil not in templates: errors.append( "Template file %s is not in templates." % mfil) break sss = LatSource(sn, ra[i], dec[i], source_type, mod, pars, mfil, flux[i], assoc1[i]) self.SourceList[source[i]] = sss dels = [] # delete source outside outer radius limit (self.none_deg) for s in self.SourceList: src = self.SourceList[s] if sdist(src.ra, src.dec, self.ra, self.dec) > self.none_deg: dels.append(s) for s in dels: del self.SourceList[s] for s in self.SourceList: src = self.SourceList[s] d = sdist(src.ra, src.dec, self.ra, self.dec) for p in src.pars: src.pars[p].fixed = 0 if (d < self.norm_deg): try: src.pars["Prefactor"].fixed = 1 except: pass if (d < self.all_deg): for p in src.pars: src.pars[p].fixed = 1 reselect = False try: if sdist(self.ra, self.dec, self.SourceList[self.selected_source].ra, self. SourceList[self.selected_source].dec) > self.none_deg: reselect = True except: pass # for i in range(len(source)): # d = sdist(ra[i],dec[i],self.ra,self.dec) if reselect: # print "reselct" self.selected_source = self.SourceList.keys()[0] self.selected_ra = self.SourceList[self.selected_source].ra self.selected_dec = self.SourceList[self.selected_source].dec # adding Galactic Diffuse Emission xxx = [ templates[i] for i in xrange(len(templates)) if templates[i][:3] == "gll" ] if len(xxx): gd_template = xxx[0] else: gd_template = "" errors.append( "Failed to file template for Galactic Diffusion.") pars = self.default_pars("PowerLaw", index=0.0) source_type = "MapCubeFunction" sss = LatSource('GalacticDiffuse', 0.0, 0.0, source_type, "PowerLaw", pars, gd_template) sss.pars["Prefactor"] = Param("Prefactor", 1.0, 10.0, 1.0, 1.0, 1, 0.0) sss.pars["Index"] = Param("Index", 0.0, 1.0, -1.0, 1.0, 0, 0.0) sss.pars["Scale"] = Param("Scale", 1.0e2, 2.0e2, 5.0e1, 1.0, 0, 0.0) if sss.name not in self.SourceList: self.SourceList[sss.name] = sss # adding Extragalactic Diffuse Background Emission xxx = [ templates[i] for i in xrange(len(templates)) if templates[i][:3] == "iso" ] if len(xxx): gd_template = xxx[0] else: gd_template = "" errors.append( "Failed to file template for ExtraGalactic Diffusion.") pars = self.default_pars("FileFunction") source_type = "ConstantValue" sss = LatSource('ExtragalacticDiffBkg', 0.0, 0.0, source_type, "FileFunction", pars, gd_template) if sss.name not in self.SourceList: self.SourceList[sss.name] = sss