from __future__ import division
from common import *
PRINT = 0
HALOPARENTSONLY = 1
[docs]def progenInit(objs,SN1,SN2, IDs,progenType, printer = 1, parentsOnly = 1):
"""Function used to initialize progen data.
Parameters
----------
objs : list
List of SPHGR objects
SN1 : int
Starting snapnum
SN2 : int
Ending snapnum (typically 0)
IDs : list
List of galaxy or halo indexes of interest
progenType : string
specify 'galaxy' or 'halo'
Notes
-----
This function does not return anything.
However, it does add the following information to the
root of your object (data not saved to disk):
'galaxy'
********
- obj.galaxies[n].progen_z
- obj.galaxies[n].progen_indexes
- obj.galaxies[n].progen_central
- obj.galaxies[n].progen_cmx
- obj.galaxies[n].progen_cmy
- obj.galaxies[n].progen_cmz
- obj.galaxies[n].progen_HMR
- obj.galaxies[n].progen_FMR
- obj.galaxies[n].progen_SFR
- obj.galaxies[n].progen_gas_mass
- obj.galaxies[n].progen_stellar_mass
- obj.galaxies[n].progen_total_mass
- obj.galaxies[n].progen_halo_mass
- obj.galaxies[n].progen_halo_gmass
- obj.galaxies[n].progen_halo_smass
- obj.galaxies[n].progen_gHMR
- obj.galaxies[n].progen_gFMR
- obj.galaxies[n].progen_sHMR
- obj.galaxies[n].progen_h2HMR
- obj.galaxies[n].progen_indexes2
- obj.galaxies[n].progen_central2
- obj.galaxies[n].progen_cmx2
- obj.galaxies[n].progen_cmy2
- obj.galaxies[n].progen_cmz2
- obj.galaxies[n].progen_HMR2
- obj.galaxies[n].progen_FMR2
- obj.galaxies[n].progen_SFR2
- obj.galaxies[n].progen_gas_mass2
- obj.galaxies[n].progen_stellar_mass2
- obj.galaxies[n].progen_total_mass2
- obj.galaxies[n].progen_halo_mass2
- obj.galaxies[n].progen_halo_gmass2
- obj.galaxies[n].progen_halo_smass2
'halo'
******
- obj.halos[n].progen_z = z
- obj.halos[n].progen_r = r
- obj.halos[n].progen_m = m
Examples
--------
>>> import initSnap as iS
>>> pList = iS.initSnap(SNAPNUM1,SNAPNUM1)
>>> sims = []
>>> for i in range(0,len(pList)):
>>> sims.append(iS.loadPickle(pList[i]))
>>> progenInit(sims,SNAPNUM1,SNAPNUM2,'galaxy')
"""
global PRINT, HALOPARENTSONLY
HALOPARENTSONLY = parentsOnly
PRINT = printer
snaps = np.arange(SN2,SN1+1,1)
## check for progen files ##
for i in range(0,len(objs)):
query_progens(objs[i],snaps,progenType)
#if shape(IDs)[0] == 1:
# IDs = [IDs]
## process galaxy history ##
for i in range(0,len(objs)):
objs[i].progenType = progenType
for j in range(0,len(IDs[i])):
if progenType == 'galaxy':
print IDs[i][j]
getGalaxyProgens(objs[i],IDs[i][j])
else:
getHaloProgens(objs[i],IDs[i][j])
return
[docs]def halo_pool_helper(args):
return getHaloProgens(*args)
[docs]def galaxy_pool_helper(args):
return getGalaxyProgens(*args)
[docs]def multiProgenInit(objs,SN1,SN2, IDs,progenType,NPROCS=None,printFreq=60.0,parentsOnly=1):
import multiprocessing as mp
import time
from datetime import datetime
global HALOPARENTSONLY
HALOPARENTSONLY = parentsOnly
snaps = np.arange(SN2,SN1+1,1)
#http://stackoverflow.com/questions/13689927/how-to-get-the-amount-of-work-left-to-be-done-by-a-python-multiprocessing-pool
#http://stackoverflow.com/questions/3827065/can-i-use-a-multiprocessing-queue-in-a-function-called-by-pool-imap
def f_init(q):
getHaloProgens.q = q
getGalaxyProgens.q = q
for i in range(0,len(objs)):
query_progens(objs[i],snaps,progenType)
for i in range(0,len(objs)):
job_args = []
n = len(IDs[i])
for j in range(0,n):
job_args.append((objs[i],IDs[i][j]))
if NPROCS == None:
print 'entering pool for obj %d with %d processors' % (i,mp.cpu_count())
else:
print 'entering pool for obj %d with %d processors' % (i,NPROCS)
m = mp.Manager()
q = m.Queue()
p = mp.Pool(NPROCS, f_init, [q])
#p = Pool(processes=NPROCS)
if progenType == 'galaxy':
#result = p.map_async(galaxy_pool_helper, job_args)
#p.close()
#p.join()
result = p.map_async(galaxy_pool_helper, job_args)
while True:
if result.ready():
print('100% complete')
break
else:
size = q.qsize()
percent = float(size)/float(n) * 100
print('%f%% (%d/%d)...%s' % (percent,size,n,datetime.now()))
time.sleep(printFreq)
print ' '
result = result.get()
for j in range(0,len(result)):
g = objs[i].galaxies[IDs[i][j]]
g.progen_z = result[j]['z']
g.progen_HRM = result[j]['HMR']
g.progen_FMR = result[j]['FMR']
g.progen_SFR = result[j]['SFR']
g.progen_gas_mass = result[j]['G_M']
g.progen_stellar_mass = result[j]['S_M']
g.progen_total_mass = result[j]['T_M']
g.progen_halo_mass = result[j]['HM']
g.progen_halo_gmass = result[j]['HGM']
g.progen_halo_smass = result[j]['HSM']
g.progen_central = result[j]['CENTRAL']
g.progen_indexes = result[j]['INDEXLIST']
g.progen_cmx = result[j]['cmx']
g.progen_cmy = result[j]['cmy']
g.progen_cmz = result[j]['cmz']
g.progen_ALPHA = result[j]['ALPHA']
g.progen_BETA = result[j]['BETA']
g.progen_HRM2 = result[j]['HMR2']
g.progen_FMR2 = result[j]['FMR2']
g.progen_SFR2 = result[j]['SFR2']
g.progen_gas_mass2 = result[j]['G_M2']
g.progen_stellar_mass2 = result[j]['S_M2']
g.progen_total_mass2 = result[j]['T_M2']
g.progen_halo_mass2 = result[j]['HM2']
g.progen_halo_gmass2 = result[j]['HGM2']
g.progen_halo_smass2 = result[j]['HSM2']
g.progen_central2 = result[j]['CENTRAL2']
g.progen_indexes2 = result[j]['INDEXLIST2']
g.progen_cmx2 = result[j]['cmx2']
g.progen_cmy2 = result[j]['cmy2']
g.progen_cmz2 = result[j]['cmz2']
elif progenType == 'halo':
#result = p.map(halo_pool_helper, job_args)
#p.close()
#p.join()
result = p.map_async(halo_pool_helper, job_args)
while True:
if result.ready():
print('100% complete')
break
else:
size = q.qsize()
percent = float(size)/float(n) * 100
print('%f%% (%d/%d)...%s' % (percent,size,n,datetime.now()))
time.sleep(printFreq)
print ' '
result = result.get()
for j in range(0,len(result)):
h = objs[i].halos[IDs[i][j]]
h.progen_z = result[j]['z']
h.progen_r = result[j]['r']
h.progen_m = result[j]['m']
[docs]def query_progens(obj,snaps,progenType):
"""Function to check for the exitstance of PROGEN files on disk.
Parameters
----------
obj : SPHGR object
snaps : numpy_array
array of snapshots going from SN2-->SN1+1
See Also
--------
progenInit
Examples
--------
>>> for i in range(0,len(objs)):
>>> query_progens(objs[i],snaps)
"""
progens = []
missing = []
for i in snaps:
#progen_tmp = '%s/%s_progens_%04d_to_%04d.npz' % (obj.locs.PROGEN_DIR,
# progenType,i,i-1)
progen_tmp = '%s/%s_progens_%04d_to_%04d.pickle' % (obj.locs.PROGEN_DIR,
progenType,i,i-1)
if os.path.isfile(progen_tmp):
progens.append(progen_tmp)
elif i > 0:
#print 'could not find',progen_tmp
missing.append(progen_tmp[-16:-4])
obj.locs.progen_files = progens
obj.locs.progen_missing = missing
return
[docs]def getGalaxyProgens(obj,galID):
import cPickle
dataLen = len(obj.locs.progen_files)
if PRINT:
if galID == -1:
print 'PROGEN-ING all GALS'
else:
print 'PROGEN-ING GAL',galID
j = galID
obj.galaxies[galID].progen_galaxies = []
curGal = obj.galaxies[galID].getProgenGalaxy()
curGal.redshift = obj.redshift
obj.galaxies[galID].progen_galaxies.append(curGal)
if PRINT:
print 'MISSING:'
for i in range(0,len(obj.locs.progen_missing)):
print obj.locs.progen_missing[i]
indexer = np.arange(0,len(obj.locs.progen_files))
if PRINT: print indexer
for i in indexer[::-1]:
## we first read in progen_SNAPNUM1_to_SNAPNUM2,
## this gives us information about the progen
## galaxy in the previous snapshot, then we leapfrog
## backwards until a -1 is encountered in the index
#print('reading in %s' % obj.progen_files[i])
progenData = cPickle.load(open(obj.locs.progen_files[i],'rb'))
prevGalIndexes = progenData['previousGalaxyIndexes']
prevGalaxies = progenData['progenGalaxyList']
if prevGalIndexes[j] == -1:
break
prevGal = prevGalaxies[j]
prevGal.redshift = progenData['prevRedshift']
obj.galaxies[galID].progen_galaxies.append(prevGal)
j = prevGalIndexes[j]
"""
def getGalaxyProgens(obj,galID):
#Function to gather galaxy PROGEN data
Parameters
----------
obj : SPHGR object
galID : galaxy ID to PROGEN
Notes
-----
This function is responsible for filling out the progen_data within the SPHGR object.
It reads in progen_SNAPNUM1_to_SNAPNUM2, and finds information
about the the galaxy in the previous snapshot, then leapfrogs
backwards until a -1 is encountered in the index.
Examples
--------
>>> for i in range(0,len(objs)):
>>> getGalaxyProgens(objs[i],galaxyIDs[i])
#
if hasattr(getGalaxyProgens,'q'):
getHaloProgens.q.put('test')
dataLen = len(obj.locs.progen_files)
sHMR, gHMR, gFMR, h2HMR = [],[],[],[]
z, HMR, FMR, SFR, T_M, G_M, S_M = [],[],[],[],[],[],[]
HM, HGM, HSM = [],[],[]
CENTRAL = []
INDEXLIST = []
cmx,cmy,cmz=[],[],[]
alpha = []
beta = []
HMR2, FMR2, SFR2, T_M2, G_M2, S_M2 = [],[],[],[],[],[]
cmx2,cmy2,cmz2,CENTRAL2,HM2,HGM2,HSM2 = [],[],[],[],[],[],[]
INDEXLIST2=[]
if PRINT: print 'PROGEN-ING GAL',galID
j = galID
INDEXLIST.append(int(j))
## load in data from current snapshot object ##
h = obj.h
time = 1. / (1.+obj.redshift)
z.append(obj.redshift)
HMR.append(obj.galaxies[j].HMR * time)
FMR.append(obj.galaxies[j].FMR * time)
SFR.append(obj.galaxies[j].sfr)
T_M.append(obj.galaxies[j].gas_mass + obj.galaxies[j].stellar_mass)
G_M.append(obj.galaxies[j].gas_mass)
S_M.append(obj.galaxies[j].stellar_mass)
HM.append( obj.galaxies[j].halo_mass)
HGM.append(obj.galaxies[j].halo_gmass)
HSM.append(obj.galaxies[j].halo_smass)
CENTRAL.append(obj.galaxies[j].central)
cmx.append(obj.galaxies[j].cm[0]*h)
cmy.append(obj.galaxies[j].cm[1]*h)
cmz.append(obj.galaxies[j].cm[2]*h)
alpha.append(obj.galaxies[j].ALPHA)
beta.append(obj.galaxies[j].BETA)
sHMR.append(obj.galaxies[j].stellar_HMR * time)
gHMR.append(obj.galaxies[j].gas_HMR * time)
#gFMR.append(obj.galaxies[j].gas_FMR * time)
h2HMR.append(obj.galaxies[j].H2_HMR * time)
HMR2.append(0)
FMR2.append(0)
SFR2.append(0)
T_M2.append(0)
G_M2.append(0)
S_M2.append(0)
HM2.append(0)
HGM2.append(0)
HSM2.append(0)
cmx2.append(0)
cmy2.append(0)
cmz2.append(0)
CENTRAL2.append(0)
INDEXLIST2.append(int(j))
if PRINT:
print 'MISSING:'
for i in range(0,len(obj.locs.progen_missing)):
print obj.locs.progen_missing[i]
indexer = np.arange(0,len(obj.locs.progen_files))
if PRINT: print indexer
for i in indexer[::-1]:
## we first read in progen_SNAPNUM1_to_SNAPNUM2,
## this gives us information about the progen
## galaxy in the previous snapshot, then we leapfrog
## backwards until a -1 is encountered in the index
#print('reading in %s' % obj.progen_files[i])
#yum = np.load(obj.locs.progen_files[i])
#progens = yum['progen']
progens = np.load(obj.locs.progen_files[i])
#prev_index = progens[j,1]
prev_index = progens['index'][j]
if prev_index == -1:
break
redshift = progens['redshift']
time = 1.0 / (1.0 + redshift)
z.append(float(redshift))
HMR.append(progens['HMR'][j] * time)
FMR.append(progens['FMR'][j] * time)
SFR.append(progens['sfr'][j])
G_M.append(progens['gmass'][j])
S_M.append(progens['smass'][j])
T_M.append(progens['gmass'][j]+progens['smass'][j])
sHMR.append(progens['stellar_HMR'][j] * time)
gHMR.append(progens['gas_HMR'][j] * time)
#gFMR.append(progens['gas_FMR'][j] * time)
h2HMR.append(progens['H2_HMR'][j] * time)
HM.append( progens['RS_mass'][j])
HGM.append(progens['RS_gmass'][j])
HSM.append(progens['RS_smass'][j])
CENTRAL.append(progens['central'][j])
alpha.append(progens['ALPHA'][j])
beta.append( progens['BETA'][j])
cmx.append(progens['cm'][j,0]*h)
cmy.append(progens['cm'][j,1]*h)
cmz.append(progens['cm'][j,2]*h)
####### SECOND MOST MASSIVE PROGEN #######
prev_index2 = progens['index2'][j]
HMR2.append(progens['HMR2'][j] * time)
FMR2.append(progens['FMR2'][j] * time)
SFR2.append(progens['sfr2'][j])
G_M2.append(progens['gmass2'][j])
S_M2.append(progens['smass2'][j])
T_M2.append(progens['gmass2'][j]+progens['smass2'][j])
HM2.append( progens['RS_mass2'][j])
HGM2.append(progens['RS_gmass2'][j])
HSM2.append(progens['RS_smass2'][j])
CENTRAL2.append(progens['central2'][j])
cmx2.append(progens['cm'][j,0]*h)
cmy2.append(progens['cm'][j,1]*h)
cmz2.append(progens['cm'][j,2]*h)
#redshift = progens[j,0]
#time = 1./(1.+redshift)
#z.append(redshift)
#HMR.append(progens[j,5] * time)
#FMR.append(progens[j,6] * time)
#SFR.append(progens[j,9])
#G_M.append(progens[j,7])
#S_M.append(progens[j,8])
#T_M.append(progens[j,7]+progens[j,8])
#HM.append( progens[j,11])
#HGM.append(progens[j,12])
#HSM.append(progens[j,13])
#CENTRAL.append(int(progens[j,14]))
#cmx.append(progens[j,2]*h)
#cmy.append(progens[j,3]*h)
#cmz.append(progens[j,4]*h)
####### SECOND MOST MASSIVE PROGEN #######
#prev_index2 = progens[j,15]
#HMR2.append(progens[j,5+14] * time)
#FMR2.append(progens[j,6+14] * time)
#SFR2.append(progens[j,9+14])
#G_M2.append(progens[j,7+14])
#S_M2.append(progens[j,8+14])
#T_M2.append(progens[j,7+14]+progens[j,8+14])
#HM2.append( progens[j,11+14])
#HGM2.append(progens[j,12+14])
#HSM2.append(progens[j,13+14])
#CENTRAL2.append(int(progens[j,14+14]))
#cmx2.append(progens[j,2+14]*h)
#cmy2.append(progens[j,3+14]*h)
#cmz2.append(progens[j,4+14]*h)
## assign index for nex iteration ##
j = prev_index
INDEXLIST.append(int(j))
INDEXLIST2.append(int(prev_index2))
## assign data to object ##
obj.galaxies[galID].progen_z = z
obj.galaxies[galID].progen_HMR = HMR
obj.galaxies[galID].progen_FMR = FMR
obj.galaxies[galID].progen_SFR = SFR
obj.galaxies[galID].progen_gas_mass = G_M
obj.galaxies[galID].progen_stellar_mass = S_M
obj.galaxies[galID].progen_total_mass = T_M
obj.galaxies[galID].progen_halo_mass = HM
obj.galaxies[galID].progen_halo_gmass = HGM
obj.galaxies[galID].progen_halo_smass = HSM
obj.galaxies[galID].progen_central = CENTRAL
obj.galaxies[galID].progen_indexes = INDEXLIST
obj.galaxies[galID].progen_cmx = cmx
obj.galaxies[galID].progen_cmy = cmy
obj.galaxies[galID].progen_cmz = cmz
obj.galaxies[galID].progen_ALPHA = alpha
obj.galaxies[galID].progen_BETA = beta
obj.galaxies[galID].progen_sHMR = sHMR
obj.galaxies[galID].progen_gHMR = gHMR
obj.galaxies[galID].progen_gFMR = gFMR
obj.galaxies[galID].progen_h2HMR = h2HMR
### SECOND MOST MASSIVE PROGEN ###
obj.galaxies[galID].progen_HMR2 = HMR2
obj.galaxies[galID].progen_FMR2 = FMR2
obj.galaxies[galID].progen_SFR2 = SFR2
obj.galaxies[galID].progen_gas_mass2 = G_M2
obj.galaxies[galID].progen_stellar_mass2 = S_M2
obj.galaxies[galID].progen_total_mass2 = T_M2
obj.galaxies[galID].progen_halo_mass2 = HM2
obj.galaxies[galID].progen_halo_gmass2 = HGM2
obj.galaxies[galID].progen_halo_smass2 = HSM2
obj.galaxies[galID].progen_central2 = CENTRAL2
obj.galaxies[galID].progen_indexes2 = INDEXLIST2
obj.galaxies[galID].progen_cmx2 = cmx2
obj.galaxies[galID].progen_cmy2 = cmy2
obj.galaxies[galID].progen_cmz2 = cmz2
return {'z':z,
'HMR':HMR,'FMR':FMR,'SFR':SFR,'G_M':G_M,'S_M':S_M,'T_M':T_M,'HM':HM,'HGM':HGM,'HSM':HSM,'CENTRAL':CENTRAL,'INDEXLIST':INDEXLIST,'cmx':cmx,'cmy':cmy,'cmz':cmz,'ALPHA':alpha,'BETA':beta,
'HMR2':HMR2,'FMR2':FMR2,'SFR2':SFR2,'G_M2':G_M2,'S_M2':S_M2,'T_M2':T_M2,'HM2':HM2,'HGM2':HGM2,'HSM2':HSM2,'CENTRAL2':CENTRAL2,'INDEXLIST2':INDEXLIST2,'cmx2':cmx2,'cmy2':cmy2,'cmz2':cmz2}
"""
[docs]def getHaloProgens(obj,halID):
if hasattr(getHaloProgens,'q'):
getHaloProgens.q.put('test')
dataLen = len(obj.locs.progen_files)
z, r, m = [],[],[]
CENTRAL = []
INDEXLIST = []
cmx,cmy,cmz=[],[],[]
if PRINT: print 'PROGEN-ING HALO',halID
j = halID
INDEXLIST.append(int(j))
## load in data from current snapshot object ##
h = obj.h
z.append(obj.redshift)
r.append(obj.halos[j].r200 / (1.+obj.redshift))
m.append(obj.halos[j].mass)
if HALOPARENTSONLY:
isparent = obj.halos[j].hparent
if isparent != -1:
return {'z':z,'r':r,'m':m}
#CENTRAL.append(obj.galaxies[j].central)
#cmx.append(obj.galaxies[j].cm[0]*h)
#cmy.append(obj.galaxies[j].cm[1]*h)
#cmz.append(obj.galaxies[j].cm[2]*h)
if PRINT:
print 'MISSING:'
for i in range(0,len(obj.locs.progen_missing)):
print obj.locs.progen_missing[i]
indexer = np.arange(0,len(obj.locs.progen_files))
for i in indexer[::-1]:
## we first read in progen_SNAPNUM1_to_SNAPNUM2,
## this gives us information about the progen
## galaxy in the previous snapshot, then we leapfrog
## backwards until a -1 is encountered in the index
#print('reading in %s' % obj.progen_files[i])
progens = np.load(obj.locs.progen_files[i])
prev_index = progens['index'][j]
if prev_index == -1:
break
redshift = progens['redshift']
time = 1.0 / (1.0 + redshift)
z.append(redshift)
r.append(progens['radius'][j] * time)
m.append(progens['mass'][j])
"""
yum = np.load(obj.locs.progen_files[i])
progens = yum['progen']
prev_index = progens[j,0]
if prev_index == -1:
print 'breaking at',i
break
redshift = progens[j,1]
z.append(redshift)
r.append(progens[j,3] / (1.+redshift))
m.append(progens[j,2])
#CENTRAL.append(int(progens[j,14]))
#cmx.append(progens[j,2]*h)
#cmy.append(progens[j,3]*h)
#cmz.append(progens[j,4]*h)
"""
## assign index for nex iteration ##
j = prev_index
INDEXLIST.append(int(j))
## assign data to object ##
obj.halos[halID].progen_z = z
obj.halos[halID].progen_r = r
obj.halos[halID].progen_m = m
#obj.galaxies[galID].progen_central = CENTRAL
#obj.galaxies[galID].progen_indexes = INDEXLIST
#obj.galaxies[galID].progen_cmx = cmx
#obj.galaxies[galID].progen_cmy = cmy
#obj.galaxies[galID].progen_cmz = cmz
return {'z':z,'r':r,'m':m}
[docs]class progenPlot(object):
"""Class to assist in the plotting of PROGEN data.
Parameters
----------
objs : list of SPHGR objects
galIDs : list of galaxy IDs to plot
COLORS : list of colors
LABELS : list of labels
"""
import pylab as plt
#from pylab import *
#from pylab import figure, twinx, legend
def __init__(self,objs,galIDs,COLORS,LABELS):
self.makeplot(objs,galIDs,COLORS,LABELS)
[docs] def makeplot(self,objs,galIDs,COLORS,LABELS):
fig=plt.figure()
ax1=fig.add_subplot(111)
ax2=plt.twinx()
legendlinestmp = []
for i in range(0,len(objs)):
for j in range(0,len(galIDs[i])):
FS = objs[i].rto.FS
if not objs[i].snapAttribs.DM_ONLY:
if objs[i].progenType == 'galaxy':
curGal = objs[i].galaxies[galIDs[i][j]]
x = curGal.progen_z
l1 = ax1.plot(x, np.log10(curGal.progen_total_mass),
'-', color=COLORS[i],lw=1.5,
label='%s total M' % LABELS[i])
l2 = ax1.plot(x, np.log10(curGal.progen_stellar_mass),
'*-',color=COLORS[i],mfc=COLORS[i],
label='%s stellar' % LABELS[i])
l3 = ax1.plot(x, np.log10(curGal.progen_gas_mass),
'o-',color=COLORS[i],mfc=COLORS[i],
label='%s gas' % LABELS[i])
l4 = ax2.plot(x, np.log10(curGal.progen_SFR),
'-.',color=COLORS[i], label='%s SFR' % LABELS[i])
l5 = ax2.plot(x, np.log10(curGal.progen_HMR),
'--',color=COLORS[i], label='%s HMR' % LABELS[i])
#l6 = ax1.plot(x, np.log10(curGal.progen_halo_mass) ,
# '-', color='k', label='RS mass')
#l7 = ax1.plot(x, np.log10(curGal.progen_halo_gmass),
# '--',color='k', label='RS gmass')
#l8 = ax1.plot(x, np.log10(curGal.progen_halo_smass),
# '-.',color='k', label='RS smass')
legendlinestmp.extend((l1,l2,l3,l4,l5))
elif objs[i].progenType == 'halo':
curHalo = objs[i].halos[galIDs[i][j]]
x = curHalo.progen_z
l1 = ax2.plot(x, np.log10(curHalo.progen_m),
'-',color=COLORS[i],lw=1.5,
label='%s Mass' % LABELS[i])
l2 = ax2.plot(x, np.log10(curHalo.progen_r),
'-',color=COLORS[i],lw=1.5,
label='%s Mass' % LABELS[i])
legendlinestmp.extend((l1,l2))
else:
curHalo = objs[i].halos[galIDs[i][j]]
x = curHalo.progen_z
l1 = ax1.plot(x, np.log10(curHalo.progen_m),
'-',color=COLORS[i],lw=1.5,
label='%s Mass' % LABELS[i])
l2 = ax2.plot(x, np.log10(curHalo.progen_r),
'--',color=COLORS[i], label='%s r' % LABELS[i])
legendlinestmp.extend((l1,l2))
#gca().invert_xaxis()
#ax1.set_xlabel(r'$z$',fontsize=FS)
#ax1.set_ylabel(r'Log M [M$_\odot$]',fontsize=FS)
#ax2.set_ylabel(r'Log r [kpc]',fontsize=FS)
#ax1.minorticks_on()
#ax2.minorticks_on()
#return
legendlines = legendlinestmp[0]
for i in range(1,len(legendlinestmp)):
legendlines += legendlinestmp[i]
legendlabels = [l.get_label() for l in legendlines]
l100 = ax2.plot(0,0,'k-',label=r'M$_{total}$')
l101 = ax2.plot(0,0,'*-',color='k',label=r'M$_\star$')
l102 = ax2.plot(0,0,'o-',color='k',label=r'M$_{gas}$')
l103 = ax2.plot(0,0,'-.',color='k',label=r'SFR')
l104 = ax2.plot(0,0,'--',color='k',label=r'HMR')
legendlines1 = l100+l101+l102+l103+l104
legendlabels1 = [l.get_label() for l in legendlines1]
legendlines2=[]
for i in range(0,len(objs)):
ltmp = ax2.fill(0,0,color=COLORS[i],label=LABELS[i])
legendlines2.extend(ltmp)
legendlabels2 = [l.get_label() for l in legendlines2]
plt.gca().invert_xaxis()
ax1.minorticks_on()
ax2.minorticks_on()
#ax1.legend(legendlines, legendlabels, loc=2,frameon=True,fancybox=True)
legend1 = ax1.legend(legendlines1, legendlabels1, loc=2,frameon=True,fancybox=True)
ax1.legend(legendlines2, legendlabels2, loc=4,frameon=True,fancybox=True)
plt.gca().add_artist(legend1)
ax1.set_xlabel(r'$z$',fontsize=FS)
ax1.set_ylabel(r'Log M [M$_\odot$]',fontsize=FS)
ax2.set_ylabel(r'Log SFR [M$_\odot$ yr$^{-1}$], Log r [kpc]', fontsize=FS)