Esempio n. 1
0
def getEQXs(fIn):
	isOut = lfmpp.getOut(fIn)
	t,xeq = lfmpp.getH5p(fIn,"xeq",Mask=isOut)
	t,yeq = lfmpp.getH5p(fIn,"yeq",Mask=isOut)
	t,tCr = lfmpp.getH5p(fIn,"tCr",Mask=isOut)
	t,tEq = lfmpp.getH5p(fIn,"Teq",Mask=isOut)

	R = []
	P = []
	Np = xeq.shape[1]
	print("Working with %d particles"%(Np))
	for n in range(Np):
		#Accumulate EQXs for time after first crossing
		tCrn = tCr[:,n]
		tSlc1 = tCrn.argmax()
		teqn = tEq[tSlc1:,n]
		ts,Ind = np.unique(teqn,return_index=True)
		#Have unique EQXs
		Neq = len(Ind)
		if (Neq>0):
			x = xeq[tSlc1:,n]
			y = yeq[tSlc1:,n]
			x = x[Ind]
			y = y[Ind]
	
			r = np.sqrt(x**2.0 + y**2.0)
			phi = np.arctan2(y,x)
			for i in range(Neq):
				R.append(r[i])
				P.append(phi[i])
	return np.array(R),np.array(P)
Esempio n. 2
0
def findMaxRad(fIn):

    isOut = lfmpp.getOut(fIn)
    t, ids = lfmpp.getH5p(fIn, "id", Mask=isOut)
    t, mp = lfmpp.getH5p(fIn, "mp", Mask=isOut)
    t, x = lfmpp.getH5p(fIn, "x", Mask=isOut)
    t, y = lfmpp.getH5p(fIn, "y", Mask=isOut)
    t, z = lfmpp.getH5p(fIn, "z", Mask=isOut)
    t, tCr = lfmpp.getH5p(fIn, "tCr", Mask=isOut)
    ids = ids[0, :]

    cylR = np.sqrt(x**2.0 + y**2.0)
    Np = len(ids)
    Rs = []
    print("\tFound %d particles\n" % (Np))
    print(Np)
    #Find slices for which particle is in sheath
    for n in range(Np):
        #Find last MP xing
        mpn = mp[:, n]
        tCrn = tCr[:, n]
        tSlc1 = tCrn.argmax()
        #Find box xing
        tSlc2 = np.argmax(mpn > 0)
        Rn = cylR[tSlc1:tSlc2, n]
        if (len(Rn) > 0):
            maxRn = Rn.max()
            Rs.append(maxRn)
    return Rs
Esempio n. 3
0
def getXKA(fIn):
    isOut = lfmpp.getOut(fIn, mp=True)

    #Get spherical coordinates of last MP Xing
    R, Phi, Lambda = lfmpp.getSphLoss(fIn)

    #Get time index of last MP crossing
    t, tEq = lfmpp.getH5p(fIn, "Teq", Mask=isOut)

    tsEq = np.argmax(tEq, axis=0)
    #Use these slices to find values at last X'ing
    t, Kt = lfmpp.getH5p(fIn, "kev", Mask=isOut)
    t, Vxt = lfmpp.getH5p(fIn, "vx", Mask=isOut)
    t, Vyt = lfmpp.getH5p(fIn, "vy", Mask=isOut)
    t, Vzt = lfmpp.getH5p(fIn, "vz", Mask=isOut)

    Np = Kt.shape[1]
    K = np.zeros(Np)
    A = np.zeros(Np)

    for i in range(Np):
        tsi = tsMP[i]
        vxi = Vxt[tsi, i]
        vyi = Vyt[tsi, i]
        vzi = Vzt[tsi, i]
        vmag = np.sqrt(vxi**2.0 + vyi**2.0 + vzi**2.0)

        K[i] = Kt[tsi, i]
        A[i] = np.arccos(vzi / vmag) * 180 / np.pi

    mlt = Phi
    return mlt, K, A
Esempio n. 4
0
def getPs(h5pFile, pC, Nk):
    isOut = lfmpp.getOut(h5pFile)
    R, PhiMP0, LambdaF, Tmp = lfmpp.getSphLoss1st(h5pFile)
    ids, PhiBX = lastPhi(h5pFile)

    dPhi = PhiBX - PhiMP0

    Ind = (abs(dPhi) >= pC)
    Ntot = Ind.sum()
    ids = ids[Ind]
    print("Found %d values larger than %3.2f" % (Ntot, pC))
    IndR = np.random.choice(Ntot, Nk, replace=False)
    ids = ids[IndR]
    return ids
Esempio n. 5
0
def NumCross(fIn, onlyOut=True):

    isOut = lfmpp.getOut(fIn)
    t, tCrF = lfmpp.getH5p(fIn, "tCr")
    t, pids = lfmpp.getH5p(fIn, "id")
    pids = pids[-1, :]
    print("\tAll particles:\n")
    NumX_All = CountXs(tCrF, pids)
    print("\tOnly out:\n")
    NumX_Out = CountXs(tCrF[:, isOut], pids[isOut])
    print("\tOnly in:\n")
    NumX_In = CountXs(tCrF[:, np.logical_not(isOut)],
                      pids[np.logical_not(isOut)])
    print("\t# of In + MP-X = %d\n" % np.sum(NumX_In > 0))

    return NumX_All, NumX_Out, NumX_In
Esempio n. 6
0
def getEQXs(fIn):
	isOut = lfmpp.getOut(fIn)
	t,xeq = lfmpp.getH5p(fIn,"xeq",Mask=isOut)
	t,yeq = lfmpp.getH5p(fIn,"yeq",Mask=isOut)
	t,tCr = lfmpp.getH5p(fIn,"tCr",Mask=isOut)
	t,tEq = lfmpp.getH5p(fIn,"Teq",Mask=isOut)
	t,Vx  = lfmpp.getH5p(fIn,"vx",Mask=isOut)
	t,Vy  = lfmpp.getH5p(fIn,"vy",Mask=isOut)
	t,Vz  = lfmpp.getH5p(fIn,"vz",Mask=isOut)

	Vmag = np.sqrt(Vx**2.0+Vy**2.0+Vz**2.0)

	A = []
	P = []
	Np = xeq.shape[1]
	print("Working with %d particles"%(Np))
	for n in range(Np):
		#Accumulate EQXs for time after first crossing
		tCrn = tCr[:,n]
		tSlc1 = tCrn.argmax()
		teqn = tEq[tSlc1:,n]
		ts,Ind = np.unique(teqn,return_index=True)
		#Have unique EQXs
		Neq = len(Ind)
		if (Neq>0):
			x = xeq[tSlc1:,n]
			y = yeq[tSlc1:,n]
			x = x[Ind]
			y = y[Ind]
			vm = Vmag[tSlc1:,n]
			vm = vm[Ind]
			vzn = Vz[tSlc1:,n]
			vzn = vzn[Ind]


			als = np.arccos(vzn/vm)*180.0/np.pi
			r = np.sqrt(x**2.0 + y**2.0)
			phi = np.arctan2(y,x)
			for i in range(Neq):
				A.append(als[i])
				P.append(phi[i])
	return np.array(A),np.array(P)
Esempio n. 7
0
def mpxK(fIn):
    #Get energies at last/first MPX
    isOut = lfmpp.getOut(fIn, mp=True)
    t, kevPT = lfmpp.getH5p(fIn, "kev")
    #Last MP crossings
    pid, Tmpx = lfmpp.getH5pFin(fIn, "tCr", Mask=isOut)
    #First MP crossings
    R, Phi, Lambda, Tmpx0 = lfmpp.getSphLoss1st(fIn)
    Np = isOut.sum()  #Number of out particles
    mpK = np.zeros(Np)
    mpK0 = np.zeros(Np)

    for n in range(Np):
        idn = np.int(pid[n] - 1)
        #Time slices of first/last MPX
        ts0 = np.argmin(Tmpx0[n] >= t)
        tsF = np.argmin(Tmpx[n] >= t)
        #print(n,idn,ts0,tsF)
        mpK[n] = kevPT[tsF, idn]
        mpK0[n] = kevPT[ts0, idn]
    return mpK0, mpK
Esempio n. 8
0
def getPBlk(h5pFile, pC, Np):
    #Get Np particles for each of 3 types
    #pI:(0,180), (-15,0),(-180,-15)
    #And have dPhi>=pC
    pIL = [0, -45, -180]
    pIH = [180, 0.0, -45]
    Nd = len(pIL)

    pIDs = np.zeros(Np * Nd, dtype=np.int)
    isOut = lfmpp.getOut(h5pFile)
    R, PhiMP0, LambdaF, Tmp = lfmpp.getSphLoss1st(h5pFile)
    ids, PhiBX = lastPhi(h5pFile)
    dPhi = PhiBX - PhiMP0

    print(PhiMP0.min(), PhiMP0.max())
    print(dPhi.min(), dPhi.max())
    for d in range(Nd):
        pcd = pC[d]
        if (pC[d] >= 0):
            IndPC = (dPhi >= pC[d])
        else:
            IndPC = (dPhi <= pC[d])

        IndPI = (PhiMP0 >= pIL[d]) & (PhiMP0 <= pIH[d])
        Ind = IndPC & IndPI
        subIDs = ids[Ind]
        subDP = dPhi[Ind]
        #Pick Np randomly
        Ntot = Ind.sum()
        print("Found %d values w/ dP >= %f, and pI between %f and %f" %
              (Ntot, pC[d], pIL[d], pIH[d]))
        IndR = np.random.choice(Ntot, Np, replace=False)
        rIDs = subIDs[IndR]
        i0 = d * Np
        i1 = i0 + Np
        pIDs[i0:i1] = rIDs
        print(rIDs)
        print(subDP[IndR])
    return pIDs
Esempio n. 9
0
def getTimes(fIn, doTail=False):
    isOut = lfmpp.getOut(fIn, mp=True, tl=doTail)
    t, mpF = lfmpp.getH5p(fIn, "mp")
    mp = mpF[:, isOut]

    #Last MP crossings
    pid, Tmpx = lfmpp.getH5pFin(fIn, "tCr", Mask=isOut)

    #First MP crossings
    R, Phi, Lambda, Tmpx0 = lfmpp.getSphLoss1st(fIn)

    #Time of loss from box, time slice index
    tsMP = np.argmax(mp, axis=0)
    #Convert to physical time
    Tbx = t[tsMP]
    if (doTail):
        #Remove particles that leave through tail but never cross MP
        DelT = Tbx - Tmpx
        Tbx = Tbx[DelT > 0]
        Tmpx = Tmpx[DelT > 0]
        pid = pid[DelT > 0]

    return Tmpx, Tmpx0, Tbx, pid
Esempio n. 10
0
def lastPhi(fIn):
    isOut = lfmpp.getOut(fIn)
    ids, x = lfmpp.getH5pFin(fIn, "x", Mask=isOut)
    ids, y = lfmpp.getH5pFin(fIn, "y", Mask=isOut)
    pBX = np.arctan2(y, x) * 180.0 / np.pi
    return pBX
Esempio n. 11
0
pMP1 = []
pMP0 = []
msDp = []
pBX = []
mDp = []
LogScl = LogNorm(1, 500)

for i in range(Ns):
    #xBin = np.linspace(-180,180,100)
    xBin = np.linspace(-60, 60, 100)
    yBin = np.linspace(0, 30, 30)

    fIn = dirStub + "/" + spcs[i] + "." + fileStub
    print("Reading %s" % (fIn))
    print("Species %s" % (Leg[i]))
    isOut = lfmpp.getOut(fIn)
    pid, NumX = lfmpp.countMPX(fIn, isOut)
    R, PhiMP0, LambdaF, Tmp = lfmpp.getSphLoss1st(fIn)
    R, PhiMP1, LambdaL = lfmpp.getSphLoss(fIn)
    PhiBX = lastPhi(fIn)

    pMP0.append(PhiMP0)
    pMP1.append(PhiMP1)
    mpDp.append(PhiMP1 - PhiMP0)
    pBX.append(PhiBX)
    msDp.append(PhiBX - PhiMP1)

    mDp.append(PhiBX - PhiMP0)
Nb = 40
N0 = -60
N1 = 120
Esempio n. 12
0
def findCrossings(fIn, PhiC=30.0, DelPhi=5):

    isOut = lfmpp.getOut(fIn)
    t, ids = lfmpp.getH5p(fIn, "id", Mask=isOut)
    t, mp = lfmpp.getH5p(fIn, "mp", Mask=isOut)
    t, x = lfmpp.getH5p(fIn, "x", Mask=isOut)
    t, y = lfmpp.getH5p(fIn, "y", Mask=isOut)
    t, z = lfmpp.getH5p(fIn, "z", Mask=isOut)
    t, vx = lfmpp.getH5p(fIn, "vx", Mask=isOut)
    t, vy = lfmpp.getH5p(fIn, "vy", Mask=isOut)
    t, vz = lfmpp.getH5p(fIn, "vz", Mask=isOut)
    t, tCr = lfmpp.getH5p(fIn, "tCr", Mask=isOut)
    ids = ids[0, :]

    phi = np.arctan2(y, x) * 180 / np.pi
    if (np.abs(PhiC) > 5):
        #Fix for flop
        phi[phi < 0] = phi[phi < 0] + 360
    Np = len(ids)
    #print("\tFound %d particles\n"%(Np))
    Vx = []
    Vy = []
    Vz = []
    sM = []
    zM = []

    for n in range(Np):

        #Find last MP xing
        mpn = mp[:, n]
        tCrn = tCr[:, n]
        tSlc1 = tCrn.argmax()
        #Find box xing
        tSlc2 = np.argmax(mpn > 0)
        pn = phi[tSlc1:tSlc2, n]

        #print(pn.shape)
        #Identify sign changes and bound for within +/- 5 degrees
        #Otherwise funny business @ p=0/360
        dp = pn - PhiC
        dpsgn = np.sign(dp)
        dpFlp = ((np.roll(dpsgn, 1) - dpsgn) != 0).astype(int)
        dpFlp = (dpFlp > 0)
        dpAbs = np.abs(dp) <= DelPhi
        isPCr = dpFlp & dpAbs
        #print(len(pn),tCr.sum())
        Nx = isPCr.sum()
        if (Nx > 0):
            vxn = vx[tSlc1:tSlc2, n]
            vyn = vy[tSlc1:tSlc2, n]
            vzn = vz[tSlc1:tSlc2, n]
            xn = x[tSlc1:tSlc2, n]
            yn = y[tSlc1:tSlc2, n]
            zn = z[tSlc1:tSlc2, n]

            vxx = vxn[isPCr]
            vyx = vyn[isPCr]
            vzx = vzn[isPCr]
            xx = xn[isPCr]
            yx = yn[isPCr]
            zx = zn[isPCr]

            for i in range(Nx):
                Vx.append(vxx[i])
                Vy.append(vyx[i])
                Vz.append(vzx[i])
                sM.append(np.sqrt(xx[i]**2.0 + yx[i]**2.0))
                zM.append(zx[i])
            #print(n,isPCr)
    Vx = np.array(Vx)
    Vy = np.array(Vy)
    Vz = np.array(Vz)
    sM = np.array(sM)
    zM = np.array(zM)
    print("\tPhi = %5.2f, NumP = %d\n" % (PhiC, len(Vx)))
    return sM, zM, Vx, Vy, Vz
Esempio n. 13
0
def lastK(fIn):
    isOut = lfmpp.getOut(fIn)
    ids, kev = lfmpp.getH5pFin(fIn, "kev", Mask=isOut)
    return ids, kev
Esempio n. 14
0
def getLastEQX(fIn):
    isOut = lfmpp.getOut(fIn)
    ids, xeq = lfmpp.getH5pFin(fIn, "xeq", Mask=isOut)
    ids, yeq = lfmpp.getH5pFin(fIn, "yeq", Mask=isOut)
    return xeq, yeq