示例#1
0
文件: stats.py 项目: headmetal/PmagPy
def main():
    """
    NAME
        stats.py
   
    DEFINITION
        calculates Gauss statistics for input data

    SYNTAX
        stats [command line options][< filename]

    INPUT
        single column of numbers

    OPTIONS
        -h prints help message and quits
        -i interactive entry of file name
        -f input file name
        -F output file name
 
    OUTPUT
      N, mean, sum, sigma, (%) 
      where sigma is the standard deviation
      where % is sigma as percentage of the mean
      stderr is the standard error and 
      95% conf.=  1.96*sigma/sqrt(N)
    """
    if '-h' in sys.argv:
        print main.__doc__
        sys.exit()
    if '-i' in sys.argv:
        file=raw_input("Enter file name: ")
        f=open(file,'rU')
    elif '-f' in sys.argv:
        ind=sys.argv.index('-f')
        file=sys.argv[ind+1]
        f=open(file,'rU')
    else:
        f=sys.stdin
    ofile = ""
    if '-F' in sys.argv:
        ind = sys.argv.index('-F')
        ofile= sys.argv[ind+1]
        out = open(ofile, 'w + a')
    data=f.readlines()
    dat=[]
    sum=0
    for line in data:
        rec=line.split()
        dat.append(float(rec[0]))
        sum+=float(float(rec[0]))
    mean,std=pmag.gausspars(dat)
    outdata = len(dat),mean,sum,std,100*std/mean
    if ofile == "":
        print len(dat),mean,sum,std,100*std/mean
    else:
        for i in outdata:
            i = str(i)
            out.write(i + " ")
示例#2
0
文件: EI.py 项目: jholmes/PmagPy
def main():
    """
    NAME
        EI.py [command line options]

    DESCRIPTION
        Finds bootstrap confidence bounds on Elongation and Inclination data

    SYNTAX
        EI.py  [command line options]

    OPTIONS
        -h prints help message and quits
        -f FILE specifies input file
        -p do parametric bootstrap

    INPUT
        dec/inc pairs

    OUTPUT
        makes a plot of the E/I pair and bootstrapped confidence bounds
        along with the E/I trend predicted by the TK03 field model
        prints out:
            Io (mean inclination), I_lower and I_upper are 95% confidence bounds on inclination
            Eo (elongation), E_lower and E_upper are 95% confidence bounds on elongation
            Edec,Einc are the elongation direction

    """
    par=0
    if '-h' in sys.argv:
        print main.__doc__
        sys.exit()
    if '-f' in sys.argv:
        ind=sys.argv.index('-f')
        file=open(sys.argv[ind+1],'rU')
    if '-p' in sys.argv: par=1
    rseed,nb,data=10,5000,[]
    upper,lower=int(round(.975*nb)),int(round(.025*nb))
    Es,Is=[],[]
    PLTS={'eq':1,'ei':2}
    pmagplotlib.plot_init(PLTS['eq'],5,5) 
    pmagplotlib.plot_init(PLTS['ei'],5,5) 
#    poly_tab= [  3.07448925e-06,  -3.49555831e-04,  -1.46990847e-02,   2.90905483e+00]
    poly_new= [  3.15976125e-06,  -3.52459817e-04,  -1.46641090e-02,   2.89538539e+00]
#    poly_cp88= [ 5.34558576e-06,  -7.70922659e-04,   5.18529685e-03,   2.90941351e+00]
#    poly_qc96= [  7.08210133e-06,  -8.79536536e-04,   1.09625547e-03,   2.92513660e+00]
#    poly_cj98=[  6.56675431e-06,  -7.91823539e-04,  -1.08211350e-03,   2.80557710e+00]
#    poly_tk03_g20= [  4.96757685e-06,  -6.02256097e-04,  -5.96103272e-03,   2.84227449e+00]
#    poly_tk03_g30= [  7.82525963e-06,  -1.39781724e-03,   4.47187092e-02,   2.54637535e+00]
#    poly_gr99_g=[  1.24362063e-07,  -1.69383384e-04,  -4.24479223e-03,   2.59257437e+00]
#    poly_gr99_e=[  1.26348154e-07,   2.01691452e-04,  -4.99142308e-02,   3.69461060e+00]
    E_EI,E_tab,E_new,E_cp88,E_cj98,E_qc96,E_tk03_g20=[],[],[],[],[],[],[]
    E_tk03_g30,E_gr99_g,E_gr99_e=[],[],[]
    I2=range(0,90,5)
    for inc in I2:
        E_new.append(EI(inc,poly_new)) # use the polynomial from Tauxe et al. (2008)
    pmagplotlib.plotEI(PLTS['ei'],E_new,I2,1)
    if '-f' in sys.argv:
        random.seed(rseed)
        for line in file.readlines():
            rec=line.split()
            dec=float(rec[0])
            inc=float(rec[1])
            if par==1:
                if  len(rec)==4:
                    N=(int(rec[2]))  # append n
                    K=float(rec[3])  # append k
                    rec=[dec,inc,N,K]
                    data.append(rec)
            else:
                rec=[dec,inc]
                data.append(rec)
        pmagplotlib.plotEQ(PLTS['eq'],data,'Data')
        ppars=pmag.doprinc(data)
        n=ppars["N"]
        Io=ppars['inc']
        Edec=ppars['Edir'][0]
        Einc=ppars['Edir'][1]
        Eo=(ppars['tau2']/ppars['tau3'])
        b=0
        print 'doing bootstrap - be patient'
        while b<nb:
            bdata=[]
            for j in range(n):
                boot=random.randint(0,n-1)
                random.jumpahead(rseed)
                if par==1:
                    DIs=[]
                    D,I,N,K=data[boot][0],data[boot][1],data[boot][2],data[boot][3]
                    for k in range(N):
                        dec,inc=pmag.fshdev(K)
                        drot,irot=pmag.dodirot(dec,inc,D,I)
                        DIs.append([drot,irot])
                    fpars=pmag.fisher_mean(DIs)
                    bdata.append([fpars['dec'],fpars['inc'],1.])  # replace data[boot] with parametric dec,inc    
                else:
                    bdata.append(data[boot])
            ppars=pmag.doprinc(bdata)
            Is.append(ppars['inc'])
            Es.append(ppars['tau2']/ppars['tau3'])
            b+=1
            if b%100==0:print b
        Is.sort()
        Es.sort()
        x,std=pmag.gausspars(Es)
        stderr=std/math.sqrt(len(data))
        pmagplotlib.plotX(PLTS['ei'],Io,Eo,Is[lower],Is[upper],Es[lower],Es[upper],'b-')
#        pmagplotlib.plotX(PLTS['ei'],Io,Eo,Is[lower],Is[upper],Eo-stderr,Eo+stderr,'b-')
        print 'Io, Eo, I_lower, I_upper, E_lower, E_upper, Edec, Einc'
        print '%7.1f %4.2f %7.1f %7.1f %4.2f %4.2f %7.1f %7.1f' %(Io,Eo,Is[lower],Is[upper],Es[lower],Es[upper], Edec,Einc)
#        print '%7.1f %4.2f %7.1f %7.1f %4.2f %4.2f' %(Io,Eo,Is[lower],Is[upper],Eo-stderr,Eo+stderr)
    pmagplotlib.drawFIGS(PLTS)
    files,fmt={},'svg'
    for key in PLTS.keys():
        files[key]=key+'.'+fmt 
    ans=raw_input(" S[a]ve to save plot, [q]uit without saving:  ")
    if ans=="a": pmagplotlib.saveP(PLTS,files) 
示例#3
0
文件: scalc.py 项目: ihilburn/PmagPy
def main():
    """
    NAME
        scalc.py

    DESCRIPTION
       calculates Sb from VGP Long,VGP Lat,Directional kappa,Site latitude data

    SYNTAX 
        scalc -h [command line options] [< standard input]
    
    INPUT 
       takes space delimited files with PLong, PLat,[kappa, N_site, slat]
    
    OPTIONS
        -h prints help message and quits
        -f FILE: specify input file
        -c cutoff:  specify VGP colatitude cutoff value
        -k cutoff: specify kappa cutoff
        -v : use the VanDammme criterion 
        -a: use antipodes of reverse data: default is to use only normal
        -C:  use all data without regard to polarity
        -b: do a bootstrap for confidence
        -p: do relative to principle axis
    NOTES
        if kappa, N_site, lat supplied, will consider within site scatter
    OUTPUT
        N Sb  Sb_lower Sb_upper Co-lat. Cutoff
    """
    coord,kappa,cutoff="0",0,90.
    nb,anti,boot=1000,0,0
    all=0
    n=0
    v=0
    spin=1
    coord_key='tilt_correction'
    if '-h' in sys.argv:
        print main.__doc__
        sys.exit()
    if '-f' in sys.argv:
        ind=sys.argv.index("-f")
        in_file=sys.argv[ind+1]
        f=open(in_file,'rU')
        lines=f.readlines()
    else:
        lines=sys.stdin.readlines()
    if '-c' in sys.argv:
        ind=sys.argv.index('-c')
        cutoff=float(sys.argv[ind+1])
    if '-k' in sys.argv:
        ind=sys.argv.index('-k')
        kappa=float(sys.argv[ind+1])
    if '-n' in sys.argv:
        ind=sys.argv.index('-n')
        n=int(sys.argv[ind+1])
    if '-a' in sys.argv: anti=1
    if '-C' in sys.argv: cutoff=180. # no cutoff
    if '-b' in sys.argv: boot=1
    if '-v' in sys.argv: v=1
    if '-p' in sys.argv: spin=0
    #
    #
    # find desired vgp lat,lon, kappa,N_site data:
    #
    A,Vgps,slats,Pvgps=180.,[],[],[]
    for line in lines:
        if '\t' in line:
            rec=line.replace('\n','').split('\t') # split each line on space to get records
        else:
            rec=line.replace('\n','').split() # split each line on space to get records
        vgp={}
        vgp['vgp_lon'],vgp['vgp_lat']=rec[0],rec[1]
        Pvgps.append([float(rec[0]),float(rec[1])])
        if anti==1:
            if float(vgp['vgp_lat'])<0:
                vgp['vgp_lat']='%7.1f'%(-1*float(vgp['vgp_lat']))
                vgp['vgp_lon']='%7.1f'%(float(vgp['vgp_lon'])-180.)
        if len(rec)==5:
            vgp['average_k'],vgp['average_nn'],vgp['average_lat']=rec[2],rec[3],rec[4]
            slats.append(float(rec[4]))
        else: 
            vgp['average_k'],vgp['average_nn'],vgp['average_lat']="0","0","0"
        if 90.-(float(vgp['vgp_lat']))<=cutoff and float(vgp['average_k'])>=kappa and int(vgp['average_nn'])>=n: Vgps.append(vgp) 
    if spin==0: # do transformation to pole
        ppars=pmag.doprinc(Pvgps)
        for vgp in Vgps:
	    vlon,vlat=pmag.dotilt(float(vgp['vgp_lon']),float(vgp['vgp_lat']),ppars['dec']-180.,90.-ppars['inc'])
            vgp['vgp_lon']=vlon  
            vgp['vgp_lat']=vlat  
            vgp['average_k']="0"
    S_B= pmag.get_Sb(Vgps)
    A=cutoff
    if v==1:
        thetamax,A=181.,180.
        vVgps,cnt=[],0
        for vgp in Vgps:vVgps.append(vgp) # make a copy of Vgps
        while thetamax>A:
            thetas=[]
            A=1.8*S_B+5
            cnt+=1
            for vgp in vVgps:thetas.append(90.-(float(vgp['vgp_lat'])))
            thetas.sort()
            thetamax=thetas[-1]
            if thetamax<A:break
            nVgps=[]
            for  vgp in vVgps:
                if 90.-(float(vgp['vgp_lat']))<thetamax:nVgps.append(vgp)
            vVgps=[]
            for vgp in nVgps:vVgps.append(vgp) 
            S_B= pmag.get_Sb(vVgps)
        Vgps=[]
        for vgp in vVgps:Vgps.append(vgp) # make a new Vgp list
    SBs,Ns=[],[]
    if boot==1:
      for i in range(nb): # now do bootstrap 
        BVgps=[]
        for k in range(len(Vgps)):
            ind=random.randint(0,len(Vgps)-1)
            random.jumpahead(int(ind*1000))
            BVgps.append(Vgps[ind])
        SBs.append(pmag.get_Sb(BVgps))
      SBs.sort()
      low=int(.025*nb)
      high=int(.975*nb)
      print len(Vgps),'%7.1f %7.1f  %7.1f %7.1f '%(S_B,SBs[low],SBs[high],A)
    else:
      print len(Vgps),'%7.1f  %7.1f '%(S_B,A)
    if  len(slats)>2:
        stats= pmag.gausspars(slats)
        print 'mean lat = ','%7.1f'%(stats[0]) 
示例#4
0
def main():
    """
    NAME
        pick_AC_specimens.py
    
    DESCRIPTION
        finds whether anisotropy correction yeilds more tightly 
        grouped intensities  than uncorrected data. 
        picks either all corrected or all uncorrected data and 
        puts in pmag_specimen format file
    
    SYNTAX
        pick_AC_specimens.py [-h][-i][-fu TFILE][-fc AFILE][-F FILE]

    OPTIONS
        -h prints help message and quits
        -i allows interactive setting of file names
        -fu TFILE uncorrected pmag_specimen format file with thellier interpretations
            created by thellier_magic_redo.py
        -fc AFILE anisotropy corrected pmag_specimen format file
            created by thellier_magic_redo.py
        -fcr CRIT pmag_criteria.txt format file with acceptance criteria
        -opt SIG use the optimizer_thelpars.txt file for criteria
        -F FILE pmag_specimens format output file with "best" set of data

    DEFAULTS
        TFILE: thellier_specimens.txt
        AFILE: AC_specimens.txt
        FILE: pmag_specimens.txt
    """
    tspec="thellier_specimens.txt"
    aspec="AC_specimens.txt"
    ofile="pmag_specimens.txt"
    critfile="pmag_criteria.txt"
    ACSamplist,Samplist,sigmin=[],[],10000
    GoodSamps,SpecOuts=[],[]
    P={'cdf':1}
    pmagplotlib.plot_init(P['cdf'],5,5)
# get arguments from command line
    if '-h' in sys.argv:
        print main.__doc__
        sys.exit()
    if '-fu' in sys.argv:
        ind=sys.argv.index('-fu')
        tspec=sys.argv[ind+1]
    if '-fc' in sys.argv:
        ind=sys.argv.index('-fc')
        aspec=sys.argv[ind+1]
    if '-fcr' in sys.argv:
        ind=sys.argv.index('-fcr')
        critfile=sys.argv[ind+1]
    if '-opt' in sys.argv:
        ind=sys.argv.index('-opt')
        critfile='optimum_thelpars.txt'
        sigcutoff=sys.argv[ind+1]
    if '-F' in sys.argv:
        ind=sys.argv.index('-F')
        ofile=sys.argv[ind+1]
    if '-i' in sys.argv:
        file=raw_input(" thellier_specimnens.txt file [thellier_specimens.txt]: ")
        if file!="":tfile=file 
        file=raw_input(" AC_specimnens.txt file [AC_specimens.txt]: ")
        if file!="":afile=file 
        file=raw_input(" pmag_specimnens.txt file [pmag_specimens.txt]: ")
        if file!="":ofile=file 
    # read in pmag_specimens file
    Specs,file_type=pmag.magic_read(tspec)
    Speclist=pmag.get_specs(Specs)
    ACSpecs,file_type=pmag.magic_read(aspec)
    ACspeclist=pmag.get_specs(ACSpecs)
    Crits,file_type=pmag.magic_read(critfile)
    keys=['specimen_int_mad','specimen_drats','specimen_fvds','specimen_b_beta','specimen_Z','specimen_md','specimen_dang']
    accept={}
    for crit in Crits:
        if critfile!='optimum_thelpars.txt':
            if crit['pmag_criteria_code']=='IE-SPEC':
                for key in keys: accept[key]=float(crit[key]) # assign acceptance criteria
                break
        else:
            if float(crit['sample_int_sigma_perc'])==float(sigcutoff):
                for key in keys: accept[key]=float(crit[key])
    Diff=[]
    for aspec in ACSpecs:
            grade,kill=pmag.grade(aspec,accept)
            if grade==len(accept): 
                print 'AC: ',aspec["er_specimen_name"],'%i'%(1e6*float(aspec["specimen_int"]))
                aint=(1e6*float(aspec["specimen_int"]))
                for spec in Specs:
                    if spec["er_specimen_name"]==aspec['er_specimen_name']:
                        print 'UC: ',spec["er_specimen_name"],'%i'%(1e6*float(spec["specimen_int"]))
                        int=(1e6*float(spec["specimen_int"]))
                        Diff.append(100.*abs(aint-int)/aint)
    x,s=pmag.gausspars(Diff)
    print x,s
    Diff.sort()
    print Diff[0],Diff[-1]
    pmagplotlib.plotCDF(P['cdf'],Diff,'% Difference','r')
    pmagplotlib.drawFIGS(P)
    raw_input()
示例#5
0
def main():
    """
    NAME
        pick_AC_specimens.py
    
    DESCRIPTION
        finds whether anisotropy correction yeilds more tightly 
        grouped intensities  than uncorrected data. 
        picks either all corrected or all uncorrected data and 
        puts in pmag_specimen format file
    
    SYNTAX
        pick_AC_specimens.py [command line options]

    OPTIONS
        -h prints help message and quits
        -fu TFILE uncorrected pmag_specimen format file with thellier interpretations
            created by thellier_magic_redo.py
        -fc AFILE anisotropy corrected pmag_specimen format file
            created by thellier_magic_redo.py
        -fcr CRIT pmag_criteria.txt format file with acceptance criteria
        -opt SIG use the optimizer_thelpars.txt file for criteria
        -F FILE pmag_specimens format output file with "best" set of data

    DEFAULTS
        TFILE: thellier_specimens.txt
        AFILE: AC_specimens.txt
        FILE: TorAC_specimens.txt
    """
    tspec="thellier_specimens.txt"
    aspec="AC_specimens.txt"
    ofile="TorAC_specimens.txt"
    critfile="pmag_criteria.txt"
    dir_path='.'
    ACSamplist,Samplist,sigmin=[],[],10000
    GoodSamps,SpecOuts=[],[]
# get arguments from command line
    if '-h' in sys.argv:
        print main.__doc__
        sys.exit()
    if '-WD' in sys.argv:
        ind=sys.argv.index('-WD')
        dir_path=sys.argv[ind+1]
    if '-fu' in sys.argv:
        ind=sys.argv.index('-fu')
        tspec=sys.argv[ind+1]
    if '-fc' in sys.argv:
        ind=sys.argv.index('-fc')
        aspec=sys.argv[ind+1]
    if '-fcr' in sys.argv:
        ind=sys.argv.index('-fcr')
        critfile=sys.argv[ind+1]
    if '-opt' in sys.argv:
        ind=sys.argv.index('-opt')
        critfile='optimum_thelpars.txt'
        sigcutoff=sys.argv[ind+1]
    if '-F' in sys.argv:
        ind=sys.argv.index('-F')
        ofile=sys.argv[ind+1]
    if '-i' in sys.argv:
        file=raw_input(" thellier_specimnens.txt file [thellier_specimens.txt]: ")
        if file!="":tfile=file 
        file=raw_input(" AC_specimnens.txt file [AC_specimens.txt]: ")
        if file!="":afile=file 
        file=raw_input(" pmag_specimnens.txt file [pmag_specimens.txt]: ")
        if file!="":ofile=file 
    # read in pmag_specimens file
    tspec=dir_path+'/'+tspec
    aspec=dir_path+'/'+aspec
    ofile=dir_path+'/'+ofile
    critfile=dir_path+'/'+critfile
    Specs,file_type=pmag.magic_read(tspec)
    Speclist=pmag.get_specs(Specs)
    ACSpecs,file_type=pmag.magic_read(aspec)
    ACspeclist=pmag.get_specs(ACSpecs)
    Crits,file_type=pmag.magic_read(critfile)
    keys=['specimen_int_mad','specimen_drats','specimen_fvds','specimen_b_beta','specimen_Z','specimen_md','specimen_dang']
    accept={}
    for crit in Crits:
        if critfile!='optimum_thelpars.txt':
            if crit['pmag_criteria_code']=='IE-SPEC':
                for key in keys: accept[key]=float(crit[key]) # assign acceptance criteria
                break
        else:
            if float(crit['sample_int_sigma_perc'])==float(sigcutoff):
                for key in keys: accept[key]=float(crit[key])
    print len(accept)
    for spec in Specs:
        grade,kill=pmag.grade(spec,accept)
        if grade==len(accept): 
            if spec["er_sample_name"] not in Samplist:Samplist.append(spec["er_sample_name"])
    for spec in ACSpecs:
        grade,kill=pmag.grade(spec,accept)
        if grade==len(accept): 
            if spec["er_sample_name"] not in ACSamplist:ACSamplist.append(spec["er_sample_name"])
    #
    for samp in Samplist:
        print samp
        useAC,Ints,ACInts,GoodSpecs,AC,UC,ALL,ALLInts=0,[],[],[],[],[],[],[]
        sample_int_sigma_perc=""
        for spec in Specs:
            ThisAC=[]
            if spec["er_sample_name"]==samp:
                grade,kill=pmag.grade(spec,accept)
                if grade==len(accept): 
                    UC.append(spec)
                    print 'UC: ',spec["er_specimen_name"],'%i'%(1e6*float(spec["specimen_int"]))
                    Ints.append(float(spec["specimen_int"]))
        if samp in ACSamplist:
            for spec in ACSpecs:
                if spec["er_sample_name"]==samp:
                    grade,kill=pmag.grade(spec,accept)
                    if grade==len(accept): 
                        AC.append(spec)
                        print 'AC: ',spec["er_specimen_name"],'%i'%(1e6*float(spec["specimen_int"]))
                        ACInts.append(float(spec["specimen_int"]))
                        ThisAC.append(spec["er_specimen_name"]) 
                        ALLInts.append(float(spec["specimen_int"]))
                        ALL.append(spec)
        for spec in UC:
            if spec['er_specimen_name'] not in ThisAC:
                ALLInts.append(float(spec["specimen_int"]))
                ALL.append(spec)
        if len(AC)>2:
            allx,allstd=pmag.gausspars(ALLInts)
            ix,istd=pmag.gausspars(Ints)
            ax,astd=pmag.gausspars(ACInts)
            print "Nall= ",len(ALLInts),allx,allstd,"Ni= ",len(Ints),ix,istd,"Na= ",len(ACInts),ax,astd
            if astd<istd: 
                if astd<allstd:
                    for spec in AC: SpecOuts.append(spec)
                    print 'using AC'
                else:
                    for spec in ALL: 
                        SpecOuts.append(spec)
                        print spec['er_specimen_name'],spec['magic_method_codes'],spec['specimen_int']
                    print 'using ALL'
            else:
                if istd<allstd: 
                    for spec in UC: SpecOuts.append(spec)
                    print 'using UC'
                else:
                    for spec in ALL: 
                        SpecOuts.append(spec)
                        print spec['er_specimen_name'],spec['magic_method_codes'],spec['specimen_int']
                    print 'using ALL'
        else:
            for spec in UC: SpecOuts.append(spec)
            print 'No AC, using UC'
        raw_input()
    pmag.magic_write(SpecOuts,ofile,'pmag_specimens')
    print 'thellier data assessed for AC correction put in ', ofile