예제 #1
0
def makedata(testpath):
    """ This will make the input data for the test case. The data will have the 
        default set of parameters Ne=Ne=1e11 and Te=Ti=2000.
        Inputs
            testpath - Directory that will hold the data.
            
    """
    finalpath = os.path.join(testpath, 'Origparams')
    if not os.path.isdir(finalpath):
        os.mkdir(finalpath)
    data = SIMVALUES
    z = sp.linspace(50., 1e3, 50)
    nz = len(z)
    params = sp.tile(data[sp.newaxis, sp.newaxis, :, :], (nz, 1, 1, 1))
    coords = sp.column_stack((sp.ones(nz), sp.ones(nz), z))
    species = ['O+', 'e-']
    times = sp.array([[0, 1e3]])
    vel = sp.zeros((nz, 1, 3))
    Icont1 = IonoContainer(coordlist=coords,
                           paramlist=params,
                           times=times,
                           sensor_loc=sp.zeros(3),
                           ver=0,
                           coordvecs=['x', 'y', 'z'],
                           paramnames=None,
                           species=species,
                           velocity=vel)

    finalfile = os.path.join(finalpath, '0 stats.h5')
    Icont1.saveh5(finalfile)
    # set start temp to 1000 K.
    Icont1.Param_List[:, :, :, 1] = 1e3
    Icont1.saveh5(os.path.join(testpath, 'startfile.h5'))
예제 #2
0
def makeinputh5(Iono,basedir):
    """This will make a h5 file for the IonoContainer that can be used as starting
    points for the fitter. The ionocontainer taken will be average over the x and y dimensions
    of space to make an average value of the parameters for each altitude.
    Inputs
    Iono - An instance of the Ionocontainer class that will be averaged over so it can
    be used for fitter starting points.
    basdir - A string that holds the directory that the file will be saved to.
    """
    # Get the parameters from the original data
    Param_List = Iono.Param_List
    dataloc = Iono.Cart_Coords
    times = Iono.Time_Vector
    velocity = Iono.Velocity
    zlist,idx = sp.unique(dataloc[:,2],return_inverse=True)
    siz = list(Param_List.shape[1:])
    vsiz = list(velocity.shape[1:])

    datalocsave = sp.column_stack((sp.zeros_like(zlist),sp.zeros_like(zlist),zlist))
    outdata = sp.zeros([len(zlist)]+siz)
    outvel = sp.zeros([len(zlist)]+vsiz)
    #  Do the averaging across space
    for izn,iz in enumerate(zlist):
        arr = sp.argwhere(idx==izn)
        outdata[izn]=sp.mean(Param_List[arr],axis=0)
        outvel[izn]=sp.mean(velocity[arr],axis=0)

    Ionoout = IonoContainer(datalocsave,outdata,times,Iono.Sensor_loc,ver=0,
                            paramnames=Iono.Param_Names, species=Iono.Species,velocity=outvel)
    Ionoout.saveh5(os.path.join(basedir,'startdata.h5'))
예제 #3
0
def makeinputh5(Iono, basedir):
    Param_List = Iono.Param_List
    dataloc = Iono.Cart_Coords
    times = Iono.Time_Vector
    velocity = Iono.Velocity
    zlist, idx = sp.unique(dataloc[:, 2], return_inverse=True)
    siz = list(Param_List.shape[1:])
    vsiz = list(velocity.shape[1:])

    datalocsave = sp.column_stack(
        (sp.zeros_like(zlist), sp.zeros_like(zlist), zlist))
    outdata = sp.zeros([len(zlist)] + siz)
    outvel = sp.zeros([len(zlist)] + vsiz)

    for izn, iz in enumerate(zlist):
        arr = sp.argwhere(idx == izn)
        outdata[izn] = sp.mean(Param_List[arr], axis=0)
        outvel[izn] = sp.mean(velocity[arr], axis=0)

    Ionoout = IonoContainer(datalocsave,
                            outdata,
                            times,
                            Iono.Sensor_loc,
                            ver=0,
                            paramnames=Iono.Param_Names,
                            species=Iono.Species,
                            velocity=outvel)
    Ionoout.saveh5(os.path.join(basedir, 'startdata.h5'))
예제 #4
0
def fitdata(basedir, configfile, optintputs):
    dirio = ("ACF", "Fitted")
    inputdir = os.path.join(basedir, dirio[0])
    outputdir = os.path.join(basedir, dirio[1])

    dirlist = glob.glob(os.path.join(inputdir, "*lags.h5"))
    dirlistsig = glob.glob(os.path.join(inputdir, "*sigs.h5"))

    Ionoin = IonoContainer.readh5(dirlist[0])
    Ionoinsig = IonoContainer.readh5(dirlistsig[0])
    fitterone = Fitterionoconainer(Ionoin, Ionoinsig, configfile)
    (fitteddata, fittederror) = fitterone.fitdata(
        ISRSfitfunction, startvalfunc, exinputs=[fitterone.simparams["startfile"]]
    )

    if fitterone.simparams["Pulsetype"].lower() == "barker":
        paramlist = fitteddata
        species = fitterone.simparams["species"]
        paranamsf = ["Ne"]
    else:
        (Nloc, Ntimes, nparams) = fitteddata.shape
        fittederronly = fittederror[:, :, range(nparams), range(nparams)]

        paramnames = []
        species = fitterone.simparams["species"]
        Nions = len(species) - 1
        Nis = fitteddata[:, :, 0 : Nions * 2 : 2]
        Tis = fitteddata[:, :, 1 : Nions * 2 : 2]
        Nisum = sp.nansum(Nis, axis=2)[:, :, sp.newaxis]
        Tisum = sp.nansum(Nis * Tis, axis=2)[:, :, sp.newaxis]
        Ti = Tisum / Nisum

        nNis = fittederronly[:, :, 0 : Nions * 2 : 2]
        nTis = fittederronly[:, :, 1 : Nions * 2 : 2]
        nNisum = sp.sqrt(sp.nansum(Nis * nNis ** 2, axis=2))[:, :, sp.newaxis] / Nisum
        nTisum = sp.sqrt(sp.nansum(Nis * nTis ** 2, axis=2))[:, :, sp.newaxis]
        nTi = nTisum / Nisum

        paramlist = sp.concatenate((fitteddata, Nisum, Ti, fittederronly, nNisum, nTi), axis=2)
        for isp in species[:-1]:
            paramnames.append("Ni_" + isp)
            paramnames.append("Ti_" + isp)
        paramnames = paramnames + ["Ne", "Te", "Vi", "Nepow", "Ni", "Ti"]
        paramnamese = ["n" + ip for ip in paramnames]
        paranamsf = sp.array(paramnames + paramnamese)

    Ionoout = IonoContainer(
        Ionoin.Sphere_Coords,
        paramlist,
        Ionoin.Time_Vector,
        ver=1,
        coordvecs=Ionoin.Coord_Vecs,
        paramnames=paranamsf,
        species=species,
    )

    outfile = os.path.join(outputdir, "fitteddata.h5")
    Ionoout.saveh5(outfile)
예제 #5
0
def makeinputh5(Iono,basedir):
    Param_List = Iono.Param_List
    dataloc = Iono.Cart_Coords
    times = Iono.Time_Vector
    velocity = Iono.Velocity
    zlist,idx = sp.unique(dataloc[:,2],return_inverse=True)
    siz = list(Param_List.shape[1:])
    vsiz = list(velocity.shape[1:])

    datalocsave = sp.column_stack((sp.zeros_like(zlist),sp.zeros_like(zlist),zlist))
    outdata = sp.zeros([len(zlist)]+siz)
    outvel = sp.zeros([len(zlist)]+vsiz)

    for izn,iz in enumerate(zlist):
        arr = sp.argwhere(idx==izn)
        outdata[izn]=sp.mean(Param_List[arr],axis=0)
        outvel[izn]=sp.mean(velocity[arr],axis=0)

    Ionoout = IonoContainer(datalocsave,outdata,times,Iono.Sensor_loc,ver=0,
                            paramnames=Iono.Param_Names, species=Iono.Species,velocity=outvel)
    Ionoout.saveh5(os.path.join(basedir,'startdata.h5'))
예제 #6
0
def fitdata(basedir,configfile,optinputs):
    """ This function will run the fitter on the estimated ACFs saved in h5 files.
        Inputs:
        basedir: A string for the directory that will hold all of the data for the simulation.
        configfile: The configuration file for the simulation.
        optinputs:A string that helps determine the what type of acfs will be fitted.
         """
    # determine the input folders which can be ACFs from the full simulation
    dirdict = {'fitting':('ACF','Fitted'),'fittingmat':('ACFMat','FittedMat'),
               'fittinginv':('ACFInv','FittedInv'),'fittingmatinv':('ACFMatInv','FittedMatInv')}
    dirio = dirdict[optinputs[0]]
    inputdir = os.path.join(basedir,dirio[0])
    outputdir = os.path.join(basedir,dirio[1])
    fitlist=optinputs[1]
    if len(optinputs)>2:
        exstr=optinputs[2]
    else:
        exstr=''
    dirlist = glob.glob(os.path.join(inputdir,'*lags{0}.h5'.format(exstr)))
    dirlistsig = glob.glob(os.path.join(inputdir,'*sigs{0}.h5'.format(exstr)))

    Ionoin=IonoContainer.readh5(dirlist[0])
    if len(dirlistsig)==0:
        Ionoinsig=None
    else:
        Ionoinsig=IonoContainer.readh5(dirlistsig[0])
    fitterone = Fitterionoconainer(Ionoin,Ionoinsig,configfile)
    
    (fitteddata,fittederror,funcevals) = fitterone.fitdata(ISRSfitfunction,fitterone.simparams['startfile'],fittimes=fitlist)


    if fitterone.simparams['Pulsetype'].lower() == 'barker':
        paramlist=fitteddata
        species = fitterone.simparams['species']
        paranamsf=['Ne']
    else:
        (Nloc,Ntimes,nparams)=fitteddata.shape
        fittederronly = sp.sqrt(fittederror)
        paramnames = []
        species = fitterone.simparams['species']
        # Seperate Ti and put it in as an element of the ionocontainer.
        Ti = fitteddata[:,:,1]

        nTi =  fittederronly[:,:,1]  
        
        paramlist = sp.concatenate((fitteddata,Ti[:,:,sp.newaxis],fittederronly,nTi[:,:,sp.newaxis],funcevals[:,:,sp.newaxis]),axis=2)
        for isp in species[:-1]:
            paramnames.append('Ni_'+isp)
            paramnames.append('Ti_'+isp)
        paramnames = paramnames+['Ne','Te','Vi','Nepow','Ti']
        paramnamese = ['n'+ip for ip in paramnames]
        paranamsf = sp.array(paramnames+paramnamese+['FuncEvals'])

    if fitlist is None:
        timevec = Ionoin.Time_Vector
    else:
        if len(fitlist)==0:
            timevec = Ionoin.Time_Vector
        else:
            timevec = Ionoin.Time_Vector[fitlist]
    # This requires
    if set(Ionoin.Coord_Vecs)=={'x','y','z'}:
        newver=0
        Ionoout=IonoContainer(Ionoin.Cart_Coords,paramlist,timevec,ver =newver,coordvecs = Ionoin.Coord_Vecs, paramnames=paranamsf,species=species)
    elif set(Ionoin.Coord_Vecs)=={'r','theta','phi'}:
        newver=1
        Ionoout=IonoContainer(Ionoin.Sphere_Coords,paramlist,timevec,ver =newver,coordvecs = Ionoin.Coord_Vecs, paramnames=paranamsf,species=species)
    

    outfile = os.path.join(outputdir,'fitteddata{0}.h5'.format(exstr))
    Ionoout.saveh5(outfile)