generated from erosita/uds
maps
This commit is contained in:
235
data/allsky/modelrxte.f
Normal file
235
data/allsky/modelrxte.f
Normal file
@@ -0,0 +1,235 @@
|
||||
!
|
||||
! Makes projected GRXE sky model. Model parameters are from Revnivtsev+ 2006
|
||||
! The final map can be converted to erg/s/cm2 by multiplying by Lsun/kpc^2
|
||||
! Roman Krivonos, 2013
|
||||
!
|
||||
! ergs-to-photons coefficient is taken from the following model:
|
||||
!========================================================================
|
||||
!Model atable{polarmodel.fits}<1> + gaussian<2> Source No.: 1 Active/On
|
||||
!Model Model Component Parameter Unit Value
|
||||
! par comp
|
||||
! 1 1 polarcol wdmass 0.600000 frozen
|
||||
! 2 1 polarcol norm 1.26483E-09 +/- 2.76500E-11
|
||||
! 3 2 gaussian LineE keV 6.70000 frozen
|
||||
! 4 2 gaussian Sigma keV 0.190000 frozen
|
||||
! 5 2 gaussian norm 1.10106E-02 +/- 1.41770E-03
|
||||
!________________________________________________________________________
|
||||
! flux 3 20
|
||||
! Model Flux 0.22374 photons (2.3232e-09 ergs/cm^2/s) range (3.0000 - 20.000 keV)
|
||||
! k= 0.22374/2.3232e-09=9.63068e+07
|
||||
|
||||
include 'inc/wimage_simple.f'
|
||||
include 'inc/deletefile.f'
|
||||
include 'inc/printerror.f'
|
||||
include 'inc/read_cobe.f'
|
||||
|
||||
implicit none
|
||||
integer nmapm,nmapx,nmapy
|
||||
parameter(nmapm=40000)
|
||||
integer NROWS
|
||||
parameter (NROWS=609)
|
||||
real skydld(nmapm,nmapm),skyerr(nmapm,nmapm)
|
||||
real skyexp(nmapm,nmapm)
|
||||
real sky(nmapm,nmapm)
|
||||
|
||||
|
||||
real*8 crval1,crval2,crpix1,crpix2,cdelt1,cdelt2,crota2
|
||||
character*80 comment
|
||||
integer unit,status,block,extver,hdutype,simple,bitpix
|
||||
integer naxes(3),naxis,pcount,gcount,extend
|
||||
logical anyf
|
||||
|
||||
real*8 ibx1,iby1,ibx2,iby2
|
||||
|
||||
integer TROWMAX,isel,tnrows,iraw
|
||||
parameter (TROWMAX=500000)
|
||||
integer sel(TROWMAX)
|
||||
real dflux(TROWMAX),dflux_49(TROWMAX),dglat(TROWMAX),dglon(TROWMAX)
|
||||
|
||||
character filename*140,fileout*140,nullstr*1
|
||||
logical exact,anynull
|
||||
integer irx,iry,nr
|
||||
integer s,i,j,n,m
|
||||
real*8 ra,dec,lon,lat,xsrc,ysrc,totalcobe,totalmodel
|
||||
real*8 dr,rd,resp2Crab,delta
|
||||
character*400 arg
|
||||
parameter (dr=0.0174533,rd=57.2958)
|
||||
real*8 sumd,sumd_r,sumd_m,koeff,id_l,id_b,b0,texp,sigma,pi,fwhm
|
||||
PARAMETER(pi=3.14159)
|
||||
real*8 rmin,rmax,rstep,r,rEarth
|
||||
real*8 lmin,lmax,bmin,bmax,model,model0,model1,modelrxte
|
||||
real*8 dOmega,dV,l,b,x0,y0,z0,theta,phi,zEarth,R0,theta0,phi0
|
||||
! parameters for AIT projection
|
||||
character*200 outfile
|
||||
integer size_sky,sx,sy,k,ir
|
||||
parameter (size_sky=2000)
|
||||
real ncatched(size_sky,size_sky)
|
||||
real*8 xrval,yrval,xinc,yinc,rot,xrpix,yrpix,lcur,bcur,x,y,totFlux,Flux
|
||||
real aitmap(nmapm,nmapm),prev,lonr,latr
|
||||
|
||||
delta=2.0
|
||||
sx=int(380.0/delta)
|
||||
sy=int(200.0/delta)
|
||||
if(sx .gt. nmapm .or. sy .gt. nmapm) then
|
||||
print*,sx,sy,nmapm
|
||||
return
|
||||
endif
|
||||
|
||||
xinc=delta
|
||||
yinc=delta
|
||||
rot=0.0
|
||||
xrpix=sx/2.0
|
||||
yrpix=sy/2.0
|
||||
xrval=0.0d0
|
||||
yrval=0.0d0
|
||||
|
||||
|
||||
aitmap=0.0
|
||||
|
||||
zEarth=16.46d0/1000.0d0
|
||||
rEarth=8.5d0
|
||||
|
||||
rmin=1.0
|
||||
rmax=22.0
|
||||
nr=2600
|
||||
rstep=(rmax-rmin)/(nr-1)
|
||||
|
||||
status=0
|
||||
|
||||
!lmin=-180.0
|
||||
!lmax=180.0
|
||||
bmin=-30.0
|
||||
bmax=30.0
|
||||
|
||||
|
||||
totFlux=0.0
|
||||
sumd=0.0
|
||||
sumd_r=0.0
|
||||
|
||||
outfile='modelrxte_ait_wide.dat'
|
||||
call ftgiou(unit,status)
|
||||
open(unit,file=outfile)
|
||||
|
||||
do j=1,nmapm
|
||||
do k=1,nmapm
|
||||
status=0
|
||||
call FTWLDP(DBLE(j),DBLE(k),xrval,yrval,xrpix,yrpix,xinc,yinc,rot,'-AIT',lon,lat,status)
|
||||
if(status.eq.0) then
|
||||
if(lat.gt.bmax.or.lat.lt.bmin) cycle
|
||||
l=lon
|
||||
b=lat
|
||||
|
||||
phi=l*dr
|
||||
theta=(90.0+b)*dr
|
||||
dOmega=sin(theta)*(delta*dr)**2
|
||||
sumd_r=0.0d0
|
||||
do ir=0,nr-1
|
||||
r=rmin+ir*rstep
|
||||
dV=r*r*rstep*dOmega
|
||||
x0=r*sin(theta)*cos(phi)-rEarth
|
||||
y0=r*sin(theta)*sin(phi)
|
||||
z0=r*cos(theta)-zEarth
|
||||
R0=dsqrt(x0**2+y0**2+z0**2)
|
||||
phi0=datan2(y0,x0)!-pi..pi
|
||||
theta0=dacos(z0/R0)!0..pi
|
||||
model=modelrxte(x0,y0,z0,R0,theta0,phi0)
|
||||
Flux=model*dV/r/r/4/pi
|
||||
sumd_r=sumd_r+Flux
|
||||
sumd=sumd+model*dV
|
||||
totFlux=totFlux+Flux
|
||||
enddo
|
||||
|
||||
aitmap(j,k)=sumd_r
|
||||
|
||||
write(unit,'(2f9.3,1pe14.4)'),lon,lat,aitmap(j,k)
|
||||
else
|
||||
call ftgerr(status,comment)
|
||||
!print *,comment
|
||||
!stop
|
||||
cycle
|
||||
status=0
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
|
||||
close(unit)
|
||||
call ftfiou(unit,status)
|
||||
|
||||
print*,'Total Flux',totFlux
|
||||
print*,'Integral ',sumd
|
||||
|
||||
! In oder to convert pixel value of the map to flux in this pixel, you need to multiply by Lsun/kpc**2=4.01831e-10
|
||||
! Lsun=3.826e+33 erg/s, kpc=3.08568e+21 cm
|
||||
|
||||
outfile='modelrxte_ait_3to20keV_flux.fits'
|
||||
call deletefile(outfile,status)
|
||||
call write_image_xy(outfile,aitmap,xrval,yrval,xrpix,yrpix,xinc,yinc,rot,sx,sy,nmapm)
|
||||
|
||||
200 end
|
||||
|
||||
|
||||
|
||||
|
||||
real*8 function modelrxte(X,Y,Z,R,theta,phi)
|
||||
implicit none
|
||||
real*8 dr,rd
|
||||
parameter (dr=0.0174533,rd=57.2958)
|
||||
real*8, intent(in) :: R,theta,phi
|
||||
REAL*8 X,Y,Z
|
||||
REAL*8 Xt,Yt,Zt
|
||||
REAL*8 X0,Y0,Z0,Rdisk,Rt,Rmax,Rm,BarRmax,Rxy,r0,BarCutoff
|
||||
REAL*8 BarTilt,Zdisk,rhobulge0,rhobulge,rhodisk,rhodisk0
|
||||
parameter (BarTilt=(180d0-29.0)*dr,BarRmax=2.4)
|
||||
parameter (X0=3.4,Y0=1.2,Z0=1.12,Rdisk=2.5,Zdisk=0.13,Rm=3.0)
|
||||
real*8 Lsun
|
||||
parameter(Lsun = 3.826e+33)
|
||||
|
||||
modelrxte=0.0
|
||||
|
||||
|
||||
rhobulge0=1.0
|
||||
! Mikej bulge luminosity 3.9+/-0.5 x 10^37 erg/s = 1.02e4 Lsun
|
||||
! bulge volume without BarCutoff = 42.599
|
||||
rhobulge0=1.02e4/42.599
|
||||
|
||||
Rmax=10.0
|
||||
|
||||
rhodisk0=1.0
|
||||
! disk volume = 4.82471
|
||||
! Mikej disk lumin ~10e37 = 26137 Lsun
|
||||
rhodisk0=2.6137e4/4.82471
|
||||
|
||||
Xt=X*dcos(BarTilt)-Y*dsin(BarTilt)
|
||||
Yt=X*dsin(BarTilt)+Y*dcos(BarTilt)
|
||||
Zt=Z
|
||||
|
||||
r0=0.5
|
||||
Rxy=dsqrt( (Xt)**2 + (Yt)**2 )
|
||||
BarCutoff=1 .0
|
||||
if(Rxy.gt.BarRmax) then
|
||||
BarCutoff=dexp(-Rxy**2/2/r0**2)
|
||||
endif
|
||||
|
||||
|
||||
Rt=dsqrt((Xt/X0)**2 + (Yt/Y0)**2 + (Zt/Z0)**2)
|
||||
|
||||
! Avoid singularity in GC, say close than 1pc
|
||||
if(Rt.lt.0.05) Rt=0.05
|
||||
|
||||
rhobulge = rhobulge0*Rt**(-1.8)*exp(-Rt**3)*BarCutoff
|
||||
|
||||
rhodisk = 0.0
|
||||
if(R.lt.Rmax) then
|
||||
rhodisk=rhodisk0*dexp(-(Rm/R)**3 -R/Rdisk -dabs(Z)/Zdisk)
|
||||
endif
|
||||
|
||||
modelrxte=rhodisk+rhobulge
|
||||
|
||||
|
||||
!check, volume should be 4/3*pi = 4.18879
|
||||
!modelrxte=0.0
|
||||
!if(R.lt.15.0) modelrxte=1.0
|
||||
|
||||
return
|
||||
end function modelrxte
|
||||
|
Reference in New Issue
Block a user