def main(): """ NAME plot_2cdfs.py DESCRIPTION makes plots of cdfs of data in input file SYNTAX plot_2cdfs.py [-h][command line options] OPTIONS -h prints help message and quits -f FILE1 FILE2 -t TITLE -fmt [svg,eps,png,pdf,jpg..] specify format of output figure, default is svg """ fmt = 'svg' title = "" if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-f' in sys.argv: ind = sys.argv.index('-f') file = sys.argv[ind + 1] X = numpy.loadtxt(file) file = sys.argv[ind + 2] X2 = numpy.loadtxt(file) # else: # X=numpy.loadtxt(sys.stdin,dtype=numpy.float) else: print('-f option required') print(main.__doc__) sys.exit() if '-fmt' in sys.argv: ind = sys.argv.index('-fmt') fmt = sys.argv[ind + 1] if '-t' in sys.argv: ind = sys.argv.index('-t') title = sys.argv[ind + 1] CDF = {'X': 1} pmagplotlib.plot_init(CDF['X'], 5, 5) pmagplotlib.plot_cdf(CDF['X'], X, '', 'r', '') pmagplotlib.plot_cdf(CDF['X'], X2, title, 'b', '') D, p = scipy.stats.ks_2samp(X, X2) if p >= .05: print(D, p, ' not rejected at 95%') else: print(D, p, ' rejected at 95%') pmagplotlib.draw_figs(CDF) ans = input('S[a]ve plot, <Return> to quit ') if ans == 'a': files = {'X': 'CDF_.' + fmt} pmagplotlib.save_plots(CDF, files)
def main(): """ NAME plot_2cdfs.py DESCRIPTION makes plots of cdfs of data in input file SYNTAX plot_2cdfs.py [-h][command line options] OPTIONS -h prints help message and quits -f FILE1 FILE2 -t TITLE -fmt [svg,eps,png,pdf,jpg..] specify format of output figure, default is svg """ fmt='svg' title="" if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-f' in sys.argv: ind=sys.argv.index('-f') file=sys.argv[ind+1] X=numpy.loadtxt(file) file=sys.argv[ind+2] X2=numpy.loadtxt(file) # else: # X=numpy.loadtxt(sys.stdin,dtype=numpy.float) else: print('-f option required') print(main.__doc__) sys.exit() if '-fmt' in sys.argv: ind=sys.argv.index('-fmt') fmt=sys.argv[ind+1] if '-t' in sys.argv: ind=sys.argv.index('-t') title=sys.argv[ind+1] CDF={'X':1} pmagplotlib.plot_init(CDF['X'],5,5) pmagplotlib.plot_cdf(CDF['X'],X,'','r','') pmagplotlib.plot_cdf(CDF['X'],X2,title,'b','') D,p=scipy.stats.ks_2samp(X,X2) if p>=.05: print(D,p,' not rejected at 95%') else: print(D,p,' rejected at 95%') pmagplotlib.draw_figs(CDF) ans= input('S[a]ve plot, <Return> to quit ') if ans=='a': files={'X':'CDF_.'+fmt} pmagplotlib.save_plots(CDF,files)
def main(): """ NAME plot_cdf.py DESCRIPTION makes plots of cdfs of data in input file SYNTAX plot_cdf.py [-h][command line options] OPTIONS -h prints help message and quits -f FILE -t TITLE -fmt [svg,eps,png,pdf,jpg..] specify format of output figure, default is svg -sav saves plot and quits """ fmt, plot = 'svg', 0 title = "" if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-sav' in sys.argv: plot = 1 if '-f' in sys.argv: ind = sys.argv.index('-f') file = sys.argv[ind + 1] X = numpy.loadtxt(file) # else: # X=numpy.loadtxt(sys.stdin,dtype=numpy.float) else: print('-f option required') print(main.__doc__) sys.exit() if '-fmt' in sys.argv: ind = sys.argv.index('-fmt') fmt = sys.argv[ind + 1] if '-t' in sys.argv: ind = sys.argv.index('-t') title = sys.argv[ind + 1] CDF = {'X': 1} pmagplotlib.plot_init(CDF['X'], 5, 5) pmagplotlib.plot_cdf(CDF['X'], X, title, 'r', '') files = {'X': 'CDF_.' + fmt} if plot == 0: pmagplotlib.draw_figs(CDF) ans = input('S[a]ve plot, <Return> to quit ') if ans == 'a': pmagplotlib.save_plots(CDF, files) else: pmagplotlib.save_plots(CDF, files)
def main(): """ NAME plot_cdf.py DESCRIPTION makes plots of cdfs of data in input file SYNTAX plot_cdf.py [-h][command line options] OPTIONS -h prints help message and quits -f FILE -t TITLE -fmt [svg,eps,png,pdf,jpg..] specify format of output figure, default is svg -sav saves plot and quits """ fmt,plot='svg',0 title="" if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-sav' in sys.argv:plot=1 if '-f' in sys.argv: ind=sys.argv.index('-f') file=sys.argv[ind+1] X=numpy.loadtxt(file) # else: # X=numpy.loadtxt(sys.stdin,dtype=numpy.float) else: print('-f option required') print(main.__doc__) sys.exit() if '-fmt' in sys.argv: ind=sys.argv.index('-fmt') fmt=sys.argv[ind+1] if '-t' in sys.argv: ind=sys.argv.index('-t') title=sys.argv[ind+1] CDF={'X':1} pmagplotlib.plot_init(CDF['X'],5,5) pmagplotlib.plot_cdf(CDF['X'],X,title,'r','') files={'X':'CDF_.'+fmt} if plot==0: pmagplotlib.draw_figs(CDF) ans= input('S[a]ve plot, <Return> to quit ') if ans=='a': pmagplotlib.save_plots(CDF,files) else: pmagplotlib.save_plots(CDF,files)
def main(): """ NAME revtest_MM1990.py DESCRIPTION calculates Watson's V statistic from input files through Monte Carlo simulation in order to test whether normal and reversed populations could have been drawn from a common mean (equivalent to watsonV.py). Also provides the critical angle between the two sample mean directions and the corresponding McFadden and McElhinny (1990) classification. INPUT FORMAT takes dec/inc as first two columns in two space delimited files (one file for normal directions, one file for reversed directions). SYNTAX revtest_MM1990.py [command line options] OPTIONS -h prints help message and quits -f FILE -f2 FILE -P (don't plot the Watson V cdf) OUTPUT Watson's V between the two populations and the Monte Carlo Critical Value Vc. M&M1990 angle, critical angle and classification Plot of Watson's V CDF from Monte Carlo simulation (red line), V is solid and Vc is dashed. """ D1, D2 = [], [] plot = 1 Flip = 1 if '-h' in sys.argv: # check if help is needed print(main.__doc__) sys.exit() # graceful quit if '-P' in sys.argv: plot = 0 if '-f' in sys.argv: ind = sys.argv.index('-f') file1 = sys.argv[ind + 1] f1 = open(file1, 'r') for line in f1.readlines(): rec = line.split() Dec, Inc = float(rec[0]), float(rec[1]) D1.append([Dec, Inc, 1.]) f1.close() if '-f2' in sys.argv: ind = sys.argv.index('-f2') file2 = sys.argv[ind + 1] f2 = open(file2, 'r') print("be patient, your computer is doing 5000 simulations...") for line in f2.readlines(): rec = line.split() Dec, Inc = float(rec[0]), float(rec[1]) D2.append([Dec, Inc, 1.]) f2.close() #take the antipode for the directions in file 2 D2_flip = [] for rec in D2: d, i = (rec[0] - 180.) % 360., -rec[1] D2_flip.append([d, i, 1.]) pars_1 = pmag.fisher_mean(D1) pars_2 = pmag.fisher_mean(D2_flip) cart_1 = pmag.dir2cart([pars_1["dec"], pars_1["inc"], pars_1["r"]]) cart_2 = pmag.dir2cart([pars_2['dec'], pars_2['inc'], pars_2["r"]]) Sw = pars_1['k'] * pars_1['r'] + pars_2['k'] * pars_2['r'] # k1*r1+k2*r2 xhat_1 = pars_1['k'] * cart_1[0] + pars_2['k'] * cart_2[0] # k1*x1+k2*x2 xhat_2 = pars_1['k'] * cart_1[1] + pars_2['k'] * cart_2[1] # k1*y1+k2*y2 xhat_3 = pars_1['k'] * cart_1[2] + pars_2['k'] * cart_2[2] # k1*z1+k2*z2 Rw = numpy.sqrt(xhat_1**2 + xhat_2**2 + xhat_3**2) V = 2 * (Sw - Rw) # #keep weighted sum for later when determining the "critical angle" let's save it as Sr (notation of McFadden and McElhinny, 1990) # Sr = Sw # # do monte carlo simulation of datasets with same kappas, but common mean # counter, NumSims = 0, 5000 Vp = [] # set of Vs from simulations for k in range(NumSims): # # get a set of N1 fisher distributed vectors with k1, calculate fisher stats # Dirp = [] for i in range(pars_1["n"]): Dirp.append(pmag.fshdev(pars_1["k"])) pars_p1 = pmag.fisher_mean(Dirp) # # get a set of N2 fisher distributed vectors with k2, calculate fisher stats # Dirp = [] for i in range(pars_2["n"]): Dirp.append(pmag.fshdev(pars_2["k"])) pars_p2 = pmag.fisher_mean(Dirp) # # get the V for these # Vk = pmag.vfunc(pars_p1, pars_p2) Vp.append(Vk) # # sort the Vs, get Vcrit (95th percentile one) # Vp.sort() k = int(.95 * NumSims) Vcrit = Vp[k] # # equation 18 of McFadden and McElhinny, 1990 calculates the critical value of R (Rwc) # Rwc = Sr - (old_div(Vcrit, 2)) # #following equation 19 of McFadden and McElhinny (1990) the critical angle is calculated. # k1 = pars_1['k'] k2 = pars_2['k'] R1 = pars_1['r'] R2 = pars_2['r'] critical_angle = numpy.degrees( numpy.arccos( old_div(((Rwc**2) - ((k1 * R1)**2) - ((k2 * R2)**2)), (2 * k1 * R1 * k2 * R2)))) D1_mean = (pars_1['dec'], pars_1['inc']) D2_mean = (pars_2['dec'], pars_2['inc']) angle = pmag.angle(D1_mean, D2_mean) # # print the results of the test # print("") print("Results of Watson V test: ") print("") print("Watson's V: " '%.1f' % (V)) print("Critical value of V: " '%.1f' % (Vcrit)) if V < Vcrit: print( '"Pass": Since V is less than Vcrit, the null hypothesis that the two populations are drawn from distributions that share a common mean direction (antipodal to one another) cannot be rejected.' ) elif V > Vcrit: print( '"Fail": Since V is greater than Vcrit, the two means can be distinguished at the 95% confidence level.' ) print("") print("M&M1990 classification:") print("") print("Angle between data set means: " '%.1f' % (angle)) print("Critical angle of M&M1990: " '%.1f' % (critical_angle)) if V > Vcrit: print("") elif V < Vcrit: if critical_angle < 5: print( "The McFadden and McElhinny (1990) classification for this test is: 'A'" ) elif critical_angle < 10: print( "The McFadden and McElhinny (1990) classification for this test is: 'B'" ) elif critical_angle < 20: print( "The McFadden and McElhinny (1990) classification for this test is: 'C'" ) else: print( "The McFadden and McElhinny (1990) classification for this test is: 'INDETERMINATE;" ) if plot == 1: CDF = {'cdf': 1} pmagplotlib.plot_init(CDF['cdf'], 5, 5) p1 = pmagplotlib.plot_cdf(CDF['cdf'], Vp, "Watson's V", 'r', "") p2 = pmagplotlib.plot_vs(CDF['cdf'], [V], 'g', '-') p3 = pmagplotlib.plot_vs(CDF['cdf'], [Vp[k]], 'b', '--') pmagplotlib.draw_figs(CDF) files, fmt = {}, 'svg' if file2 != "": files['cdf'] = 'WatsonsV_' + file1 + '_' + file2 + '.' + fmt else: files['cdf'] = 'WatsonsV_' + file1 + '.' + fmt if pmagplotlib.isServer: black = '#000000' purple = '#800080' titles = {} titles['cdf'] = 'Cumulative Distribution' CDF = pmagplotlib.add_borders(CDF, titles, black, purple) pmagplotlib.save_plots(CDF, files) else: ans = input(" S[a]ve to save plot, [q]uit without saving: ") if ans == "a": pmagplotlib.save_plots(CDF, files)
def main(): """ NAME find_EI.py DESCRIPTION Applies series of assumed flattening factor and "unsquishes" inclinations assuming tangent function. Finds flattening factor that gives elongation/inclination pair consistent with TK03. Finds bootstrap confidence bounds SYNTAX find_EI.py [command line options] OPTIONS -h prints help message and quits -f FILE specify input file name -n N specify number of bootstraps - the more the better, but slower!, default is 1000 -sc uses a "site-level" correction to a Fisherian distribution instead of a "study-level" correction to a TK03-consistent distribution. Note that many directions (~ 100) are needed for this correction to be reliable. -fmt [svg,png,eps,pdf..] change plot format, default is svg -sav saves the figures and quits INPUT dec/inc pairs, delimited with space or tabs OUTPUT four plots: 1) equal area plot of original directions 2) Elongation/inclination pairs as a function of f, data plus 25 bootstrap samples 3) Cumulative distribution of bootstrapped optimal inclinations plus uncertainties. Estimate from original data set plotted as solid line 4) Orientation of principle direction through unflattening NOTE: If distribution does not have a solution, plot labeled: Pathological. Some bootstrap samples may have valid solutions and those are plotted in the CDFs and E/I plot. """ fmt,nb='svg',1000 plot=0 if '-h' in sys.argv: print(main.__doc__) sys.exit() # graceful quit elif '-f' in sys.argv: ind=sys.argv.index('-f') file=sys.argv[ind+1] else: print(main.__doc__) sys.exit() if '-n' in sys.argv: ind=sys.argv.index('-n') nb=int(sys.argv[ind+1]) if '-sc' in sys.argv: site_correction = True else: site_correction = False if '-fmt' in sys.argv: ind=sys.argv.index('-fmt') fmt=sys.argv[ind+1] if '-sav' in sys.argv:plot=1 data=numpy.loadtxt(file) upper,lower=int(round(.975*nb)),int(round(.025*nb)) E,I=[],[] PLTS={'eq':1,'ei':2,'cdf':3,'v2':4} pmagplotlib.plot_init(PLTS['eq'],6,6) pmagplotlib.plot_init(PLTS['ei'],5,5) pmagplotlib.plot_init(PLTS['cdf'],5,5) pmagplotlib.plot_init(PLTS['v2'],5,5) pmagplotlib.plot_eq(PLTS['eq'],data,'Data') # this is a problem #if plot==0:pmagplotlib.draw_figs(PLTS) ppars=pmag.doprinc(data) Io=ppars['inc'] n=ppars["N"] Es,Is,Fs,V2s=pmag.find_f(data) if site_correction: Inc,Elong=Is[Es.index(min(Es))],Es[Es.index(min(Es))] flat_f = Fs[Es.index(min(Es))] else: Inc,Elong=Is[-1],Es[-1] flat_f = Fs[-1] pmagplotlib.plot_ei(PLTS['ei'],Es,Is,flat_f) pmagplotlib.plot_v2s(PLTS['v2'],V2s,Is,flat_f) b=0 print("Bootstrapping.... be patient") while b<nb: bdata=pmag.pseudo(data) Esb,Isb,Fsb,V2sb=pmag.find_f(bdata) if b<25: pmagplotlib.plot_ei(PLTS['ei'],Esb,Isb,Fsb[-1]) if Esb[-1]!=0: ppars=pmag.doprinc(bdata) if site_correction: I.append(abs(Isb[Esb.index(min(Esb))])) E.append(Esb[Esb.index(min(Esb))]) else: I.append(abs(Isb[-1])) E.append(Esb[-1]) b+=1 if b%25==0:print(b,' out of ',nb) I.sort() E.sort() Eexp=[] for i in I: Eexp.append(pmag.EI(i)) if Inc==0: title= 'Pathological Distribution: '+'[%7.1f, %7.1f]' %(I[lower],I[upper]) else: title= '%7.1f [%7.1f, %7.1f]' %( Inc, I[lower],I[upper]) pmagplotlib.plot_ei(PLTS['ei'],Eexp,I,1) pmagplotlib.plot_cdf(PLTS['cdf'],I,'Inclinations','r',title) pmagplotlib.plot_vs(PLTS['cdf'],[I[lower],I[upper]],'b','--') pmagplotlib.plot_vs(PLTS['cdf'],[Inc],'g','-') pmagplotlib.plot_vs(PLTS['cdf'],[Io],'k','-') if plot==0: print('%7.1f %s %7.1f _ %7.1f ^ %7.1f: %6.4f _ %6.4f ^ %6.4f' %(Io, " => ", Inc, I[lower],I[upper], Elong, E[lower],E[upper])) print("Io Inc I_lower, I_upper, Elon, E_lower, E_upper") pmagplotlib.draw_figs(PLTS) ans = "" while ans not in ['q', 'a']: ans= input("S[a]ve plots - <q> to quit: ") if ans=='q': print("\n Good bye\n") sys.exit() files={} files['eq']='findEI_eq.'+fmt files['ei']='findEI_ei.'+fmt files['cdf']='findEI_cdf.'+fmt files['v2']='findEI_v2.'+fmt pmagplotlib.save_plots(PLTS,files)
def main(): """ NAME revtest_MM1990.py DESCRIPTION calculates Watson's V statistic from input files through Monte Carlo simulation in order to test whether normal and reversed populations could have been drawn from a common mean (equivalent to watsonV.py). Also provides the critical angle between the two sample mean directions and the corresponding McFadden and McElhinny (1990) classification. INPUT FORMAT takes dec/inc as first two columns in two space delimited files (one file for normal directions, one file for reversed directions). SYNTAX revtest_MM1990.py [command line options] OPTIONS -h prints help message and quits -f FILE -f2 FILE -P (don't plot the Watson V cdf) OUTPUT Watson's V between the two populations and the Monte Carlo Critical Value Vc. M&M1990 angle, critical angle and classification Plot of Watson's V CDF from Monte Carlo simulation (red line), V is solid and Vc is dashed. """ D1,D2=[],[] plot=1 Flip=1 if '-h' in sys.argv: # check if help is needed print(main.__doc__) sys.exit() # graceful quit if '-P' in sys.argv: plot=0 if '-f' in sys.argv: ind=sys.argv.index('-f') file1=sys.argv[ind+1] f1=open(file1,'r') for line in f1.readlines(): rec=line.split() Dec,Inc=float(rec[0]),float(rec[1]) D1.append([Dec,Inc,1.]) f1.close() if '-f2' in sys.argv: ind=sys.argv.index('-f2') file2=sys.argv[ind+1] f2=open(file2,'r') print("be patient, your computer is doing 5000 simulations...") for line in f2.readlines(): rec=line.split() Dec,Inc=float(rec[0]),float(rec[1]) D2.append([Dec,Inc,1.]) f2.close() #take the antipode for the directions in file 2 D2_flip=[] for rec in D2: d,i=(rec[0]-180.)%360.,-rec[1] D2_flip.append([d,i,1.]) pars_1=pmag.fisher_mean(D1) pars_2=pmag.fisher_mean(D2_flip) cart_1=pmag.dir2cart([pars_1["dec"],pars_1["inc"],pars_1["r"]]) cart_2=pmag.dir2cart([pars_2['dec'],pars_2['inc'],pars_2["r"]]) Sw=pars_1['k']*pars_1['r']+pars_2['k']*pars_2['r'] # k1*r1+k2*r2 xhat_1=pars_1['k']*cart_1[0]+pars_2['k']*cart_2[0] # k1*x1+k2*x2 xhat_2=pars_1['k']*cart_1[1]+pars_2['k']*cart_2[1] # k1*y1+k2*y2 xhat_3=pars_1['k']*cart_1[2]+pars_2['k']*cart_2[2] # k1*z1+k2*z2 Rw=numpy.sqrt(xhat_1**2+xhat_2**2+xhat_3**2) V=2*(Sw-Rw) # #keep weighted sum for later when determining the "critical angle" let's save it as Sr (notation of McFadden and McElhinny, 1990) # Sr=Sw # # do monte carlo simulation of datasets with same kappas, but common mean # counter,NumSims=0,5000 Vp=[] # set of Vs from simulations for k in range(NumSims): # # get a set of N1 fisher distributed vectors with k1, calculate fisher stats # Dirp=[] for i in range(pars_1["n"]): Dirp.append(pmag.fshdev(pars_1["k"])) pars_p1=pmag.fisher_mean(Dirp) # # get a set of N2 fisher distributed vectors with k2, calculate fisher stats # Dirp=[] for i in range(pars_2["n"]): Dirp.append(pmag.fshdev(pars_2["k"])) pars_p2=pmag.fisher_mean(Dirp) # # get the V for these # Vk=pmag.vfunc(pars_p1,pars_p2) Vp.append(Vk) # # sort the Vs, get Vcrit (95th percentile one) # Vp.sort() k=int(.95*NumSims) Vcrit=Vp[k] # # equation 18 of McFadden and McElhinny, 1990 calculates the critical value of R (Rwc) # Rwc=Sr-(old_div(Vcrit,2)) # #following equation 19 of McFadden and McElhinny (1990) the critical angle is calculated. # k1=pars_1['k'] k2=pars_2['k'] R1=pars_1['r'] R2=pars_2['r'] critical_angle=numpy.degrees(numpy.arccos(old_div(((Rwc**2)-((k1*R1)**2)-((k2*R2)**2)),(2*k1*R1*k2*R2)))) D1_mean=(pars_1['dec'],pars_1['inc']) D2_mean=(pars_2['dec'],pars_2['inc']) angle=pmag.angle(D1_mean,D2_mean) # # print the results of the test # print("") print("Results of Watson V test: ") print("") print("Watson's V: " '%.1f' %(V)) print("Critical value of V: " '%.1f' %(Vcrit)) if V<Vcrit: print('"Pass": Since V is less than Vcrit, the null hypothesis that the two populations are drawn from distributions that share a common mean direction (antipodal to one another) cannot be rejected.') elif V>Vcrit: print('"Fail": Since V is greater than Vcrit, the two means can be distinguished at the 95% confidence level.') print("") print("M&M1990 classification:") print("") print("Angle between data set means: " '%.1f'%(angle)) print("Critical angle of M&M1990: " '%.1f'%(critical_angle)) if V>Vcrit: print("") elif V<Vcrit: if critical_angle<5: print("The McFadden and McElhinny (1990) classification for this test is: 'A'") elif critical_angle<10: print("The McFadden and McElhinny (1990) classification for this test is: 'B'") elif critical_angle<20: print("The McFadden and McElhinny (1990) classification for this test is: 'C'") else: print("The McFadden and McElhinny (1990) classification for this test is: 'INDETERMINATE;") if plot==1: CDF={'cdf':1} pmagplotlib.plot_init(CDF['cdf'],5,5) p1 = pmagplotlib.plot_cdf(CDF['cdf'],Vp,"Watson's V",'r',"") p2 = pmagplotlib.plot_vs(CDF['cdf'],[V],'g','-') p3 = pmagplotlib.plot_vs(CDF['cdf'],[Vp[k]],'b','--') pmagplotlib.draw_figs(CDF) files,fmt={},'svg' if file2!="": files['cdf']='WatsonsV_'+file1+'_'+file2+'.'+fmt else: files['cdf']='WatsonsV_'+file1+'.'+fmt if pmagplotlib.isServer: black = '#000000' purple = '#800080' titles={} titles['cdf']='Cumulative Distribution' CDF = pmagplotlib.add_borders(CDF,titles,black,purple) pmagplotlib.save_plots(CDF,files) else: ans=input(" S[a]ve to save plot, [q]uit without saving: ") if ans=="a": pmagplotlib.save_plots(CDF,files)
def main(): """ NAME find_EI.py DESCRIPTION Applies series of assumed flattening factor and "unsquishes" inclinations assuming tangent function. Finds flattening factor that gives elongation/inclination pair consistent with TK03. Finds bootstrap confidence bounds SYNTAX find_EI.py [command line options] OPTIONS -h prints help message and quits -f FILE specify input file name -n N specify number of bootstraps - the more the better, but slower!, default is 1000 -sc uses a "site-level" correction to a Fisherian distribution instead of a "study-level" correction to a TK03-consistent distribution. Note that many directions (~ 100) are needed for this correction to be reliable. -fmt [svg,png,eps,pdf..] change plot format, default is svg -sav saves the figures and quits INPUT dec/inc pairs, delimited with space or tabs OUTPUT four plots: 1) equal area plot of original directions 2) Elongation/inclination pairs as a function of f, data plus 25 bootstrap samples 3) Cumulative distribution of bootstrapped optimal inclinations plus uncertainties. Estimate from original data set plotted as solid line 4) Orientation of principle direction through unflattening NOTE: If distribution does not have a solution, plot labeled: Pathological. Some bootstrap samples may have valid solutions and those are plotted in the CDFs and E/I plot. """ fmt, nb = 'svg', 1000 plot = 0 if '-h' in sys.argv: print(main.__doc__) sys.exit() # graceful quit elif '-f' in sys.argv: ind = sys.argv.index('-f') file = sys.argv[ind + 1] else: print(main.__doc__) sys.exit() if '-n' in sys.argv: ind = sys.argv.index('-n') nb = int(sys.argv[ind + 1]) if '-sc' in sys.argv: site_correction = True else: site_correction = False if '-fmt' in sys.argv: ind = sys.argv.index('-fmt') fmt = sys.argv[ind + 1] if '-sav' in sys.argv: plot = 1 data = numpy.loadtxt(file) upper, lower = int(round(.975 * nb)), int(round(.025 * nb)) E, I = [], [] PLTS = {'eq': 1, 'ei': 2, 'cdf': 3, 'v2': 4} pmagplotlib.plot_init(PLTS['eq'], 6, 6) pmagplotlib.plot_init(PLTS['ei'], 5, 5) pmagplotlib.plot_init(PLTS['cdf'], 5, 5) pmagplotlib.plot_init(PLTS['v2'], 5, 5) pmagplotlib.plot_eq(PLTS['eq'], data, 'Data') # this is a problem #if plot==0:pmagplotlib.draw_figs(PLTS) ppars = pmag.doprinc(data) Io = ppars['inc'] n = ppars["N"] Es, Is, Fs, V2s = pmag.find_f(data) if site_correction: Inc, Elong = Is[Es.index(min(Es))], Es[Es.index(min(Es))] flat_f = Fs[Es.index(min(Es))] else: Inc, Elong = Is[-1], Es[-1] flat_f = Fs[-1] pmagplotlib.plot_ei(PLTS['ei'], Es, Is, flat_f) pmagplotlib.plot_v2s(PLTS['v2'], V2s, Is, flat_f) b = 0 print("Bootstrapping.... be patient") while b < nb: bdata = pmag.pseudo(data) Esb, Isb, Fsb, V2sb = pmag.find_f(bdata) if b < 25: pmagplotlib.plot_ei(PLTS['ei'], Esb, Isb, Fsb[-1]) if Esb[-1] != 0: ppars = pmag.doprinc(bdata) if site_correction: I.append(abs(Isb[Esb.index(min(Esb))])) E.append(Esb[Esb.index(min(Esb))]) else: I.append(abs(Isb[-1])) E.append(Esb[-1]) b += 1 if b % 25 == 0: print(b, ' out of ', nb) I.sort() E.sort() Eexp = [] for i in I: Eexp.append(pmag.EI(i)) if Inc == 0: title = 'Pathological Distribution: ' + '[%7.1f, %7.1f]' % (I[lower], I[upper]) else: title = '%7.1f [%7.1f, %7.1f]' % (Inc, I[lower], I[upper]) pmagplotlib.plot_ei(PLTS['ei'], Eexp, I, 1) pmagplotlib.plot_cdf(PLTS['cdf'], I, 'Inclinations', 'r', title) pmagplotlib.plot_vs(PLTS['cdf'], [I[lower], I[upper]], 'b', '--') pmagplotlib.plot_vs(PLTS['cdf'], [Inc], 'g', '-') pmagplotlib.plot_vs(PLTS['cdf'], [Io], 'k', '-') if plot == 0: print('%7.1f %s %7.1f _ %7.1f ^ %7.1f: %6.4f _ %6.4f ^ %6.4f' % (Io, " => ", Inc, I[lower], I[upper], Elong, E[lower], E[upper])) print("Io Inc I_lower, I_upper, Elon, E_lower, E_upper") pmagplotlib.draw_figs(PLTS) ans = "" while ans not in ['q', 'a']: ans = input("S[a]ve plots - <q> to quit: ") if ans == 'q': print("\n Good bye\n") sys.exit() files = {} files['eq'] = 'findEI_eq.' + fmt files['ei'] = 'findEI_ei.' + fmt files['cdf'] = 'findEI_cdf.' + fmt files['v2'] = 'findEI_v2.' + fmt pmagplotlib.save_plots(PLTS, files)
def main(): """ NAME watsons_v.py DESCRIPTION calculates Watson's V statistic from input files INPUT FORMAT takes dec/inc as first two columns in two space delimited files SYNTAX watsons_v.py [command line options] OPTIONS -h prints help message and quits -f FILE (with optional second) -f2 FILE (second file) -ant, flip antipodal directions to opposite direction in first file if only one file or flip all in second, if two files -P (don't save or show plot) -sav save figure and quit silently -fmt [png,svg,eps,pdf,jpg] format for saved figure OUTPUT Watson's V and the Monte Carlo Critical Value Vc. in plot, V is solid and Vc is dashed. """ Flip=0 show,plot=1,0 fmt='svg' file2="" if '-h' in sys.argv: # check if help is needed print(main.__doc__) sys.exit() # graceful quit if '-ant' in sys.argv: Flip=1 if '-sav' in sys.argv: show,plot=0,1 # don't display, but do save plot if '-fmt' in sys.argv: ind=sys.argv.index('-fmt') fmt=sys.argv[ind+1] if '-P' in sys.argv: show=0 # don't display or save plot if '-f' in sys.argv: ind=sys.argv.index('-f') file1=sys.argv[ind+1] data=numpy.loadtxt(file1).transpose() D1=numpy.array([data[0],data[1]]).transpose() file1_name=os.path.split(file1)[1].split('.')[0] else: print("-f is required") print(main.__doc__) sys.exit() if '-f2' in sys.argv: ind=sys.argv.index('-f2') file2=sys.argv[ind+1] data2=numpy.loadtxt(file2).transpose() D2=numpy.array([data2[0],data2[1]]).transpose() file2_name=os.path.split(file2)[1].split('.')[0] if Flip==1: D2,D=pmag.flip(D2) # D2 are now flipped if len(D2)!=0: if len(D)!=0: D2=numpy.concatenate(D,D2) # put all in D2 elif len(D)!=0: D2=D else: print('length of second file is zero') sys.exit() elif Flip==1:D2,D1=pmag.flip(D1) # peel out antipodal directions, put in D2 # counter,NumSims=0,5000 # # first calculate the fisher means and cartesian coordinates of each set of Directions # pars_1=pmag.fisher_mean(D1) pars_2=pmag.fisher_mean(D2) # # get V statistic for these # V=pmag.vfunc(pars_1,pars_2) # # do monte carlo simulation of datasets with same kappas, but common mean # Vp=[] # set of Vs from simulations if show==1:print("Doing ",NumSims," simulations") for k in range(NumSims): counter+=1 if counter==50: if show==1:print(k+1) counter=0 Dirp=[] # get a set of N1 fisher distributed vectors with k1, calculate fisher stats for i in range(pars_1["n"]): Dirp.append(pmag.fshdev(pars_1["k"])) pars_p1=pmag.fisher_mean(Dirp) # get a set of N2 fisher distributed vectors with k2, calculate fisher stats Dirp=[] for i in range(pars_2["n"]): Dirp.append(pmag.fshdev(pars_2["k"])) pars_p2=pmag.fisher_mean(Dirp) # get the V for these Vk=pmag.vfunc(pars_p1,pars_p2) Vp.append(Vk) # # sort the Vs, get Vcrit (95th one) # Vp.sort() k=int(.95*NumSims) if show==1: print("Watson's V, Vcrit: ") print(' %10.1f %10.1f'%(V,Vp[k])) if show==1 or plot==1: print("Watson's V, Vcrit: ") print(' %10.1f %10.1f'%(V,Vp[k])) CDF={'cdf':1} pmagplotlib.plot_init(CDF['cdf'],5,5) pmagplotlib.plot_cdf(CDF['cdf'],Vp,"Watson's V",'r',"") pmagplotlib.plot_vs(CDF['cdf'],[V],'g','-') pmagplotlib.plot_vs(CDF['cdf'],[Vp[k]],'b','--') if plot==0:pmagplotlib.draw_figs(CDF) files={} if pmagplotlib.isServer: # use server plot naming convention if file2!="": files['cdf']='watsons_v_'+file1+'_'+file2+'.'+fmt else: files['cdf']='watsons_v_'+file1+'.'+fmt else: # use more readable plot naming convention if file2!="": files['cdf']='watsons_v_'+file1_name+'_'+file2_name+'.'+fmt else: files['cdf']='watsons_v_'+file1_name+'.'+fmt if pmagplotlib.isServer: black = '#000000' purple = '#800080' titles={} titles['cdf']='Cumulative Distribution' CDF = pmagplotlib.add_borders(CDF,titles,black,purple) pmagplotlib.save_plots(CDF,files) elif plot==0: ans=input(" S[a]ve to save plot, [q]uit without saving: ") if ans=="a": pmagplotlib.save_plots(CDF,files) if plot==1: # save and quit silently pmagplotlib.save_plots(CDF,files)
def main(): """ NAME watsons_v.py DESCRIPTION calculates Watson's V statistic from input files INPUT FORMAT takes dec/inc as first two columns in two space delimited files SYNTAX watsons_v.py [command line options] OPTIONS -h prints help message and quits -f FILE (with optional second) -f2 FILE (second file) -ant, flip antipodal directions to opposite direction in first file if only one file or flip all in second, if two files -P (don't save or show plot) -sav save figure and quit silently -fmt [png,svg,eps,pdf,jpg] format for saved figure OUTPUT Watson's V and the Monte Carlo Critical Value Vc. in plot, V is solid and Vc is dashed. """ Flip = 0 show, plot = 1, 0 fmt = 'svg' file2 = "" if '-h' in sys.argv: # check if help is needed print(main.__doc__) sys.exit() # graceful quit if '-ant' in sys.argv: Flip = 1 if '-sav' in sys.argv: show, plot = 0, 1 # don't display, but do save plot if '-fmt' in sys.argv: ind = sys.argv.index('-fmt') fmt = sys.argv[ind + 1] if '-P' in sys.argv: show = 0 # don't display or save plot if '-f' in sys.argv: ind = sys.argv.index('-f') file1 = sys.argv[ind + 1] data = numpy.loadtxt(file1).transpose() D1 = numpy.array([data[0], data[1]]).transpose() file1_name = os.path.split(file1)[1].split('.')[0] else: print("-f is required") print(main.__doc__) sys.exit() if '-f2' in sys.argv: ind = sys.argv.index('-f2') file2 = sys.argv[ind + 1] data2 = numpy.loadtxt(file2).transpose() D2 = numpy.array([data2[0], data2[1]]).transpose() file2_name = os.path.split(file2)[1].split('.')[0] if Flip == 1: D2, D = pmag.flip(D2) # D2 are now flipped if len(D2) != 0: if len(D) != 0: D2 = numpy.concatenate(D, D2) # put all in D2 elif len(D) != 0: D2 = D else: print('length of second file is zero') sys.exit() elif Flip == 1: D2, D1 = pmag.flip(D1) # peel out antipodal directions, put in D2 # counter, NumSims = 0, 5000 # # first calculate the fisher means and cartesian coordinates of each set of Directions # pars_1 = pmag.fisher_mean(D1) pars_2 = pmag.fisher_mean(D2) # # get V statistic for these # V = pmag.vfunc(pars_1, pars_2) # # do monte carlo simulation of datasets with same kappas, but common mean # Vp = [] # set of Vs from simulations if show == 1: print("Doing ", NumSims, " simulations") for k in range(NumSims): counter += 1 if counter == 50: if show == 1: print(k + 1) counter = 0 Dirp = [] # get a set of N1 fisher distributed vectors with k1, calculate fisher stats for i in range(pars_1["n"]): Dirp.append(pmag.fshdev(pars_1["k"])) pars_p1 = pmag.fisher_mean(Dirp) # get a set of N2 fisher distributed vectors with k2, calculate fisher stats Dirp = [] for i in range(pars_2["n"]): Dirp.append(pmag.fshdev(pars_2["k"])) pars_p2 = pmag.fisher_mean(Dirp) # get the V for these Vk = pmag.vfunc(pars_p1, pars_p2) Vp.append(Vk) # # sort the Vs, get Vcrit (95th one) # Vp.sort() k = int(.95 * NumSims) if show == 1: print("Watson's V, Vcrit: ") print(' %10.1f %10.1f' % (V, Vp[k])) if show == 1 or plot == 1: print("Watson's V, Vcrit: ") print(' %10.1f %10.1f' % (V, Vp[k])) CDF = {'cdf': 1} pmagplotlib.plot_init(CDF['cdf'], 5, 5) pmagplotlib.plot_cdf(CDF['cdf'], Vp, "Watson's V", 'r', "") pmagplotlib.plot_vs(CDF['cdf'], [V], 'g', '-') pmagplotlib.plot_vs(CDF['cdf'], [Vp[k]], 'b', '--') if plot == 0: pmagplotlib.draw_figs(CDF) files = {} if pmagplotlib.isServer: # use server plot naming convention if file2 != "": files['cdf'] = 'watsons_v_' + file1 + '_' + file2 + '.' + fmt else: files['cdf'] = 'watsons_v_' + file1 + '.' + fmt else: # use more readable plot naming convention if file2 != "": files[ 'cdf'] = 'watsons_v_' + file1_name + '_' + file2_name + '.' + fmt else: files['cdf'] = 'watsons_v_' + file1_name + '.' + fmt if pmagplotlib.isServer: black = '#000000' purple = '#800080' titles = {} titles['cdf'] = 'Cumulative Distribution' CDF = pmagplotlib.add_borders(CDF, titles, black, purple) pmagplotlib.save_plots(CDF, files) elif plot == 0: ans = input(" S[a]ve to save plot, [q]uit without saving: ") if ans == "a": pmagplotlib.save_plots(CDF, files) if plot == 1: # save and quit silently pmagplotlib.save_plots(CDF, files)