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
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]