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 + " ")
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)
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])
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()
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