Example #1
0
 def plot_Xscale_3D(self, ax, gp):
     rmin = np.log10(min(gp.xipol))
     rmax = np.log10(max(gp.xipol))
     gp.xfine = np.logspace(rmin, rmax, gp.nfine)
     if gp.investigate == 'walk':
         if gp.pops == 1:
             rhodm, nu1 = ga.rho_walk(gp.xepol, gp)
         else:
             rhodm, nu1, nu2 = ga.rho_walk(gp.xepol, gp)
     elif gp.investigate == 'gaia':
         rhodm, nu1 = ga.rho_gaia(gp.xepol, gp)
     for pop in range(gp.pops):
         # use our models
         nuprof = self.Mmedi.get_prof('nu', pop+1)
         tck = splrep(gp.xepol, nuprof)
         nuproffine = splev(gp.xfine, tck)
         if gp.investigate == 'walk' or gp.investigate == 'gaia':
             # or rather use analytic values, where available
             if pop == 0:
                 nuprof = nu1
             elif pop == 1:
                 nuprof = nu2
         if gp.geom == 'sphere':
             Mprof = gip.rho_SUM_Mr(gp.xfine, nuproffine)
             Mmax = max(Mprof) # Mprof[-1]
             ihalf = -1
             for kk in range(len(Mprof)):
                 # half-light radius (3D) is where mass is more than half
                 # ihalf gives the iindex of where this happens
                 if Mprof[kk] >= Mmax/2 and ihalf < 0:
                     xx = (gp.xfine[kk-1]+gp.xfine[kk])/2
                     print('rhalf = ', xx, ' pc')
                     ax.axvline(xx, color='green', lw=0.5, alpha=0.7)
                     ihalf = kk
Example #2
0
def analytic_rho(x):
    nn = ga.rho_gaia(x, gp)[0] # 0 for DM, 1 for stars
    return nn
Example #3
0
 def set_analytic(self, x0, gp):
     r0 = x0 # [pc], spherical case
     self.analytic.x0 = r0
     anbeta = []; annu = [];  anSig = []
     if gp.investigate == 'gaia':
         anrho = ga.rho_gaia(r0, gp)[0]
         anM = gip.rho_SUM_Mr(r0, anrho)
         annr = ga.nr3Dtot_gaia(r0, gp)
         tmp_annu = ga.rho_gaia(r0, gp)[1]
         annu.append( tmp_annu )
         anSig.append( gip.rho_INT_Sig(r0, tmp_annu, gp) )
         for pop in np.arange(1, gp.pops+1):
             beta = ga.beta_gaia(r0, gp)[pop]
             anbeta.append(beta)
             nu = ga.rho_gaia(r0,gp)[pop]
             annu.append(nu)
             anSig.append(gip.rho_INT_Sig(r0, nu, gp))
     elif gp.investigate == 'walk':
         anrho = ga.rho_walk(r0, gp)[0]
         anM = gip.rho_SUM_Mr(r0, anrho)
         annr = ga.nr3Dtot_deriv_walk(r0, gp) # TODO too high in case of core
         tmp_annu = ga.rho_walk(r0, gp)[1]
         annu.append( tmp_annu )
         anSig.append( gip.rho_INT_Sig(r0, tmp_annu, gp) )
         for pop in np.arange(1, gp.pops+1):
             beta = ga.beta_walk(r0, gp)[pop]
             anbeta.append(beta)
             nu = ga.rho_walk(r0, gp)[pop]
             dum,dum,dum,nudat,nuerr = np.transpose(np.loadtxt(gp.files.nufiles[pop], unpack=False, skiprows=1))
             locrhalf = np.argmin(abs(gp.xipol-gp.Xscale[pop]))
             nuhalf = nudat[locrhalf]*gp.nu0pc[pop]
             annuhalf = nu[np.argmin(abs(r0-locrhalf))]
             annu.append(nu*nuhalf/annuhalf)
             dum,dum,dum,Sigdat,Sigerr = np.transpose(np.loadtxt(gp.files.Sigfiles[pop], unpack=False, skiprows=1))
             locrhalf = np.argmin(abs(gp.xipol-gp.Xscale[pop]))
             Sighalf = Sigdat[locrhalf]*gp.Sig0pc[pop]
             Sig = gip.rho_INT_Sig(r0, nu, gp)
             anSighalf = Sig[np.argmin(abs(r0-locrhalf))]
             anSig.append(Sig*Sighalf/anSighalf)
     elif gp.investigate == 'triax':
         anrho = ga.rho_triax(r0, gp) # one and only
         anM = gip.rho_SUM_Mr(r0, anrho)
         annr = ga.nr3Dtot_deriv_triax(r0, gp)
         tmp_annu = ga.rho_triax(r0, gp) # TODO, M/L=1 assumed here, wrong
         annu.append(tmp_annu)
         anSig.append( gip.rho_INT_Sig(r0, tmp_annu, gp))
         for pop in np.arange(1, gp.pops+1):
             beta = ga.beta_triax(r0)
             anbeta.append(beta)
             nu = ga.rho_triax(r0, gp) # TODO, assumes M/L=1
             annu.append(nu)
             anSig.append( gip.rho_INT_Sig(r0, nu, gp))
     self.analytic.set_prof('rho', anrho, 0, gp)
     self.analytic.set_prof('M', anM, 0, gp)
     self.analytic.set_prof('nr', annr, 0, gp)
     self.analytic.set_prof('nu', annu[0], 0, gp)
     self.analytic.set_prof('nrnu', -gh.derivipol(np.log(annu[0]), np.log(r0)), 0, gp)
     self.analytic.set_prof('Sig', anSig[0], 0, gp)
     for pop in np.arange(1, gp.pops+1):
         self.analytic.set_prof('beta', anbeta[pop-1], pop, gp)
         self.analytic.set_prof('betastar', anbeta[pop-1]/(2.-anbeta[pop-1]), pop, gp)
         self.analytic.set_prof('nu', annu[pop], pop, gp)
         nrnu = -gh.derivipol(np.log(annu[pop]), np.log(r0))
         self.analytic.set_prof('nrnu', nrnu, pop, gp)
         self.analytic.set_prof('Sig', anSig[pop] , pop, gp)#/ Signorm, pop, gp)
         self.analytic.set_prof('sig', -np.ones(len(r0)), pop, gp)
     return
Example #4
0
def analytic_rho(x):
    nn = ga.rho_gaia(x, gp)[1]  # 0 for DM, 1 for stars
    return nn