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'))
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'))
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'))
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)
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'))
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)