예제 #1
0
for beta in Beta:
      print beta
      B=[]
      for key in Fails.keys():
            Fails[key].append([])
      
      for mbh0 in Mbh0:
            MBH=[]
            Pmin=h.getP_RL(mbh0,RLmrange,RLzams)
            Pmax=h.getP_RL(mbh0,RLmrange,RLterminal)
            Pmax_i=interp1d(RLmrange,Pmax)
            Pmin_i=interp1d(RLmrange,Pmin)
            for key in Fails.keys():
                  Fails[key][-1].append([])
                  
            if h.getKerr_Param(mbh0,cstr.Mbh[0]-cstr.Mbh[1])<=cstr.aKerr[0]+cstr.aKerr[1]:       #Spin Test
                  for mdon0 in Mdon0:
                        MDON=[]
                        obs_mdon=(-obs_mbh+((1.0-beta)*mdon0)+mbh0)/(1.0-beta)  #Find Predicted range of don masses @ target Mbh range given mdon0,mbh0,and beta
                        
                        #Is a portion of this range in within the constraints? Find that portion
                        AtObs=transpose([[obs_mbh[i],obs_mdon[i]] for i in range(len(obs_mdon)) if (obs_mdon[i]>=obs_mdonlims[0][i] and obs_mdon[i]<=obs_mdonlims[1][i])])
                        
                        
                        
                        if len(AtObs)>0:                                                                                #Ratio Test
                              BhAtObs=AtObs[0]
                              DonAtObs=AtObs[1]
                              for p0 in P0:
                                    if p0>Pmin_i(mdon0) and p0<Pmax_i(mdon0):       #Main Sequence Test
                                          if not (mbh0>mdon0 and p0>cstr.P[0]-cstr.P[1]):   #p>p0 Test
예제 #2
0
파일: EvalRuns.py 프로젝트: chasebk/NU-XRBs
def checkWins(runpath):
	edd=0
	if not BINHIST in os.listdir(pth(runpath)):
		return [['DNF'],[]]
	
	rundata=loadtxt(pth(runpath,BINHIST))
	atPCross=[]
	for k in range(len(rundata)):
		
		
		edd=max(10.0**rundata[k][v.logMdot_bh]/h.getMeddingtonH(rundata[k][v.Mbh],rundata[k][v.surf_h]),edd)
			
		if rundata[k][v.P]>cstr.P[0]-cstr.P[1] and rundata[k][v.P]<cstr.P[0]+cstr.P[1]:
			atPCross.append(rundata[k])
		elif k>0 and rundata[k-1][v.P]<cstr.P[0]-cstr.P[1] and rundata[k][v.P]>cstr.P[0]-cstr.P[1]:
			atPCross.append(rundata[k-1])
			atPCross.append(rundata[k])
		elif k>0 and rundata[k-1][v.P]<cstr.P[0]+cstr.P[1] and rundata[k][v.P]>cstr.P[0]+cstr.P[1]:
			atPCross.append(rundata[k])
	if len(atPCross)==0:
		return [['P Fail'],array(transpose(rundata))]
   
	intervars=[[] for i in range(len(rundata[0]))]
	varlist=[v.logTeff,v.logg,v.Mbh,v.Mdon,v.logMdot_bh]
	per=[point[v.P] for point in atPCross]


	
	for i in varlist:
		
		val=[point[i] for point in atPCross]
	    
     
		intervars[i]=interp1d(per,val)
	
	P=linspace(max(cstr.P[0]-cstr.P[1],per[0]),cstr.P[0]+cstr.P[1],num=100,endpoint=True)
	Labels=[]
	Mbh_at_Plist=[]
	Mdon_at_Plist=[]
	for p in P:
		pscore=[]
		Mbh_at_Plist.append(intervars[v.Mbh](p))
		Mdon_at_Plist.append(intervars[v.Mdon](p))
		if h.getKerr_Param(rundata[0][v.Mbh],intervars[v.Mbh](p))<spinmax:pass
		else:pscore.append('Spin Fail')
		if intervars[v.Mbh](p)>Mbhmin and intervars[v.Mbh](p)<Mbhmax:pass
		else:pscore.append('Mbh Fail')
		MdonRange=h.getMdonRange(intervars[v.Mbh](p))
		if intervars[v.Mdon](p)>MdonRange[0] and intervars[v.Mdon](p)<MdonRange[1]:pass
		else:pscore.append('Mdon Fail')
		if pow(10.0,intervars[v.logTeff](p))>Tmin and pow(10.0,intervars[v.logTeff](p))<Tmax:pass
		else:pscore.append('Teff Fail')
		if pow(10.0,intervars[v.logg](p))>gmin and pow(10.0,intervars[v.logg](p))<gmax:pass
		else:pscore.append('g Fail')
		if pow(10.0,intervars[v.logMdot_bh](p))<h.getMdotCrit(intervars[v.Mdon](p),intervars[v.Mbh](p),p):pass
		else:pscore.append('Mdot Fail')
		if len(pscore)==0:
			Labels=['Win']
			
			break
		elif len(pscore)>len(Labels):Labels=pscore
	print edd                            
	return [Labels,array(transpose(rundata)),mean(Mbh_at_Plist),mean(Mdon_at_Plist),edd]