def main(): """ NAME aarm_magic.py DESCRIPTION Converts AARM data to best-fit tensor (6 elements plus sigma) Original program ARMcrunch written to accomodate ARM anisotropy data collected from 6 axial directions (+X,+Y,+Z,-X,-Y,-Z) using the off-axis remanence terms to construct the tensor. A better way to do the anisotropy of ARMs is to use 9,12 or 15 measurements in the Hext rotational scheme. SYNTAX aarm_magic.py [-h][command line options] OPTIONS -h prints help message and quits -usr USER: identify user, default is "" -f FILE: specify input file, default is aarm_measurements.txt -crd [s,g,t] specify coordinate system, requires er_samples.txt file -fsa FILE: specify er_samples.txt file, default is er_samples.txt -Fa FILE: specify anisotropy output file, default is arm_anisotropy.txt -Fr FILE: specify results output file, default is aarm_results.txt INPUT Input for the present program is a series of baseline, ARM pairs. The baseline should be the AF demagnetized state (3 axis demag is preferable) for the following ARM acquisition. The order of the measurements is: positions 1,2,3, 6,7,8, 11,12,13 (for 9 positions) positions 1,2,3,4, 6,7,8,9, 11,12,13,14 (for 12 positions) positions 1-15 (for 15 positions) """ # initialize some parameters args = sys.argv user = "" meas_file = "aarm_measurements.txt" samp_file = "er_samples.txt" rmag_anis = "arm_anisotropy.txt" rmag_res = "aarm_results.txt" dir_path = '.' # # get name of file from command line # if '-WD' in args: ind = args.index('-WD') dir_path = args[ind + 1] if "-h" in args: print main.__doc__ sys.exit() if "-usr" in args: ind = args.index("-usr") user = sys.argv[ind + 1] if "-f" in args: ind = args.index("-f") meas_file = sys.argv[ind + 1] coord = '-1' if "-crd" in sys.argv: ind = sys.argv.index("-crd") coord = sys.argv[ind + 1] if coord == 's': coord = '-1' if coord == 'g': coord = '0' if coord == 't': coord = '100' if "-fsa" in args: ind = args.index("-fsa") samp_file = sys.argv[ind + 1] if "-Fa" in args: ind = args.index("-Fa") rmag_anis = args[ind + 1] if "-Fr" in args: ind = args.index("-Fr") rmag_res = args[ind + 1] meas_file = dir_path + '/' + meas_file samp_file = dir_path + '/' + samp_file rmag_anis = dir_path + '/' + rmag_anis rmag_res = dir_path + '/' + rmag_res # read in data meas_data, file_type = pmag.magic_read(meas_file) meas_data = pmag.get_dictitem(meas_data, 'magic_method_codes', 'LP-AN-ARM', 'has') if file_type != 'magic_measurements': print file_type print file_type, "This is not a valid magic_measurements file " sys.exit() if coord != '-1': # need to read in sample data samp_data, file_type = pmag.magic_read(samp_file) if file_type != 'er_samples': print file_type print file_type, "This is not a valid er_samples file " print "Only specimen coordinates will be calculated" coord = '-1' # # sort the specimen names # ssort = [] for rec in meas_data: spec = rec["er_specimen_name"] if spec not in ssort: ssort.append(spec) if len(ssort) > 1: sids = sorted(ssort) else: sids = ssort # # work on each specimen # specimen = 0 RmagSpecRecs, RmagResRecs = [], [] while specimen < len(sids): s = sids[specimen] data = [] RmagSpecRec = {} RmagResRec = {} method_codes = [] # # find the data from the meas_data file for this sample # data = pmag.get_dictitem(meas_data, 'er_specimen_name', s, 'T') # # find out the number of measurements (9, 12 or 15) # npos = len(data) / 2 if npos == 9: # # get dec, inc, int and convert to x,y,z # B, H, tmpH = pmag.designAARM( npos) # B matrix made from design matrix for positions X = [] for rec in data: Dir = [] Dir.append(float(rec["measurement_dec"])) Dir.append(float(rec["measurement_inc"])) Dir.append(float(rec["measurement_magn_moment"])) X.append(pmag.dir2cart(Dir)) # # subtract baseline and put in a work array # work = numpy.zeros((npos, 3), 'f') for i in range(npos): for j in range(3): work[i][j] = X[2 * i + 1][j] - X[2 * i][j] # # calculate tensor elements # first put ARM components in w vector # w = numpy.zeros((npos * 3), 'f') index = 0 for i in range(npos): for j in range(3): w[index] = work[i][j] index += 1 s = numpy.zeros((6), 'f') # initialize the s matrix for i in range(6): for j in range(len(w)): s[i] += B[i][j] * w[j] trace = s[0] + s[1] + s[2] # normalize by the trace for i in range(6): s[i] = s[i] / trace a = pmag.s2a(s) #------------------------------------------------------------ # Calculating dels is different than in the Kappabridge # routine. Use trace normalized tensor (a) and the applied # unit field directions (tmpH) to generate model X,Y,Z # components. Then compare these with the measured values. #------------------------------------------------------------ S = 0. comp = numpy.zeros((npos * 3), 'f') for i in range(npos): for j in range(3): index = i * 3 + j compare = a[j][0] * tmpH[i][0] + a[j][1] * tmpH[i][1] + a[ j][2] * tmpH[i][2] comp[index] = compare for i in range(npos * 3): d = w[i] / trace - comp[i] # del values S += d * d nf = float(npos * 3 - 6) # number of degrees of freedom if S > 0: sigma = numpy.sqrt(S / nf) else: sigma = 0 RmagSpecRec["rmag_anisotropy_name"] = data[0]["er_specimen_name"] RmagSpecRec["er_location_name"] = data[0]["er_location_name"] RmagSpecRec["er_specimen_name"] = data[0]["er_specimen_name"] RmagSpecRec["er_sample_name"] = data[0]["er_sample_name"] RmagSpecRec["er_site_name"] = data[0]["er_site_name"] RmagSpecRec["magic_experiment_names"] = RmagSpecRec[ "rmag_anisotropy_name"] + ":AARM" RmagSpecRec["er_citation_names"] = "This study" RmagResRec[ "rmag_result_name"] = data[0]["er_specimen_name"] + ":AARM" RmagResRec["er_location_names"] = data[0]["er_location_name"] RmagResRec["er_specimen_names"] = data[0]["er_specimen_name"] RmagResRec["er_sample_names"] = data[0]["er_sample_name"] RmagResRec["er_site_names"] = data[0]["er_site_name"] RmagResRec["magic_experiment_names"] = RmagSpecRec[ "rmag_anisotropy_name"] + ":AARM" RmagResRec["er_citation_names"] = "This study" if "magic_instrument_codes" in data[0].keys(): RmagSpecRec["magic_instrument_codes"] = data[0][ "magic_instrument_codes"] else: RmagSpecRec["magic_instrument_codes"] = "" RmagSpecRec["anisotropy_type"] = "AARM" RmagSpecRec[ "anisotropy_description"] = "Hext statistics adapted to AARM" if coord != '-1': # need to rotate s # set orientation priorities SO_methods = [] for rec in samp_data: if "magic_method_codes" not in rec: rec['magic_method_codes'] = 'SO-NO' if "magic_method_codes" in rec: methlist = rec["magic_method_codes"] for meth in methlist.split(":"): if "SO" in meth and "SO-POM" not in meth.strip(): if meth.strip() not in SO_methods: SO_methods.append(meth.strip()) SO_priorities = pmag.set_priorities(SO_methods, 0) # continue here redo, p = 1, 0 if len(SO_methods) <= 1: az_type = SO_methods[0] orient = pmag.find_samp_rec(RmagSpecRec["er_sample_name"], samp_data, az_type) if orient["sample_azimuth"] != "": method_codes.append(az_type) redo = 0 while redo == 1: if p >= len(SO_priorities): print "no orientation data for ", s orient["sample_azimuth"] = "" orient["sample_dip"] = "" method_codes.append("SO-NO") redo = 0 else: az_type = SO_methods[SO_methods.index( SO_priorities[p])] orient = pmag.find_samp_rec( PmagSpecRec["er_sample_name"], samp_data, az_type) if orient["sample_azimuth"] != "": method_codes.append(az_type) redo = 0 p += 1 az, pl = orient['sample_azimuth'], orient['sample_dip'] s = pmag.dosgeo(s, az, pl) # rotate to geographic coordinates if coord == '100': sampe_bed_dir, sample_bed_dip = orient[ 'sample_bed_dip_direction'], orient['sample_bed_dip'] s = pmag.dostilt( s, bed_dir, bed_dip) # rotate to geographic coordinates hpars = pmag.dohext(nf, sigma, s) # # prepare for output # RmagSpecRec["anisotropy_s1"] = '%8.6f' % (s[0]) RmagSpecRec["anisotropy_s2"] = '%8.6f' % (s[1]) RmagSpecRec["anisotropy_s3"] = '%8.6f' % (s[2]) RmagSpecRec["anisotropy_s4"] = '%8.6f' % (s[3]) RmagSpecRec["anisotropy_s5"] = '%8.6f' % (s[4]) RmagSpecRec["anisotropy_s6"] = '%8.6f' % (s[5]) RmagSpecRec["anisotropy_mean"] = '%8.3e' % (trace / 3) RmagSpecRec["anisotropy_sigma"] = '%8.6f' % (sigma) RmagSpecRec["anisotropy_unit"] = "Am^2" RmagSpecRec["anisotropy_n"] = '%i' % (npos) RmagSpecRec["anisotropy_tilt_correction"] = coord RmagSpecRec["anisotropy_F"] = '%7.1f ' % ( hpars["F"] ) # used by thellier_gui - must be taken out for uploading RmagSpecRec["anisotropy_F_crit"] = hpars[ "F_crit"] # used by thellier_gui - must be taken out for uploading RmagResRec["anisotropy_t1"] = '%8.6f ' % (hpars["t1"]) RmagResRec["anisotropy_t2"] = '%8.6f ' % (hpars["t2"]) RmagResRec["anisotropy_t3"] = '%8.6f ' % (hpars["t3"]) RmagResRec["anisotropy_v1_dec"] = '%7.1f ' % (hpars["v1_dec"]) RmagResRec["anisotropy_v2_dec"] = '%7.1f ' % (hpars["v2_dec"]) RmagResRec["anisotropy_v3_dec"] = '%7.1f ' % (hpars["v3_dec"]) RmagResRec["anisotropy_v1_inc"] = '%7.1f ' % (hpars["v1_inc"]) RmagResRec["anisotropy_v2_inc"] = '%7.1f ' % (hpars["v2_inc"]) RmagResRec["anisotropy_v3_inc"] = '%7.1f ' % (hpars["v3_inc"]) RmagResRec["anisotropy_ftest"] = '%7.1f ' % (hpars["F"]) RmagResRec["anisotropy_ftest12"] = '%7.1f ' % (hpars["F12"]) RmagResRec["anisotropy_ftest23"] = '%7.1f ' % (hpars["F23"]) RmagResRec["result_description"] = 'Critical F: ' + hpars[ "F_crit"] + ';Critical F12/F13: ' + hpars["F12_crit"] if hpars["e12"] > hpars["e13"]: RmagResRec["anisotropy_v1_zeta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v1_zeta_dec"] = '%7.1f ' % ( hpars['v2_dec']) RmagResRec["anisotropy_v1_zeta_inc"] = '%7.1f ' % ( hpars['v2_inc']) RmagResRec["anisotropy_v2_zeta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v2_zeta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v2_zeta_inc"] = '%7.1f ' % ( hpars['v1_inc']) RmagResRec["anisotropy_v1_eta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v1_eta_dec"] = '%7.1f ' % ( hpars['v3_dec']) RmagResRec["anisotropy_v1_eta_inc"] = '%7.1f ' % ( hpars['v3_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v3_eta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v3_eta_inc"] = '%7.1f ' % ( hpars['v1_inc']) else: RmagResRec["anisotropy_v1_zeta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v1_zeta_dec"] = '%7.1f ' % ( hpars['v3_dec']) RmagResRec["anisotropy_v1_zeta_inc"] = '%7.1f ' % ( hpars['v3_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v3_zeta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v3_zeta_inc"] = '%7.1f ' % ( hpars['v1_inc']) RmagResRec["anisotropy_v1_eta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v1_eta_dec"] = '%7.1f ' % ( hpars['v2_dec']) RmagResRec["anisotropy_v1_eta_inc"] = '%7.1f ' % ( hpars['v2_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v2_eta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v2_eta_inc"] = '%7.1f ' % ( hpars['v1_inc']) if hpars["e23"] > hpars['e12']: RmagResRec["anisotropy_v2_zeta_semi_angle"] = '%7.1f ' % ( hpars['e23']) RmagResRec["anisotropy_v2_zeta_dec"] = '%7.1f ' % ( hpars['v3_dec']) RmagResRec["anisotropy_v2_zeta_inc"] = '%7.1f ' % ( hpars['v3_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"] = '%7.1f ' % ( hpars['e23']) RmagResRec["anisotropy_v3_zeta_dec"] = '%7.1f ' % ( hpars['v2_dec']) RmagResRec["anisotropy_v3_zeta_inc"] = '%7.1f ' % ( hpars['v2_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v3_eta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v3_eta_inc"] = '%7.1f ' % ( hpars['v1_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v2_eta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v2_eta_inc"] = '%7.1f ' % ( hpars['v1_inc']) else: RmagResRec["anisotropy_v2_zeta_semi_angle"] = '%7.1f ' % ( hpars['e12']) RmagResRec["anisotropy_v2_zeta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v2_zeta_inc"] = '%7.1f ' % ( hpars['v1_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"] = '%7.1f ' % ( hpars['e23']) RmagResRec["anisotropy_v3_eta_dec"] = '%7.1f ' % ( hpars['v2_dec']) RmagResRec["anisotropy_v3_eta_inc"] = '%7.1f ' % ( hpars['v2_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"] = '%7.1f ' % ( hpars['e13']) RmagResRec["anisotropy_v3_zeta_dec"] = '%7.1f ' % ( hpars['v1_dec']) RmagResRec["anisotropy_v3_zeta_inc"] = '%7.1f ' % ( hpars['v1_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"] = '%7.1f ' % ( hpars['e23']) RmagResRec["anisotropy_v2_eta_dec"] = '%7.1f ' % ( hpars['v3_dec']) RmagResRec["anisotropy_v2_eta_inc"] = '%7.1f ' % ( hpars['v3_inc']) RmagResRec["tilt_correction"] = '-1' RmagResRec["anisotropy_type"] = 'AARM' RmagResRec["magic_method_codes"] = 'LP-AN-ARM:AE-H' RmagSpecRec["magic_method_codes"] = 'LP-AN-ARM:AE-H' RmagResRec["magic_software_packages"] = pmag.get_version() RmagSpecRec["magic_software_packages"] = pmag.get_version() specimen += 1 RmagSpecRecs.append(RmagSpecRec) RmagResRecs.append(RmagResRec) else: print 'skipping specimen ', s, ' only 9 positions supported', '; this has ', npos specimen += 1 if rmag_anis == "": rmag_anis = "rmag_anisotropy.txt" pmag.magic_write(rmag_anis, RmagSpecRecs, 'rmag_anisotropy') print "specimen tensor elements stored in ", rmag_anis if rmag_res == "": rmag_res = "rmag_results.txt" pmag.magic_write(rmag_res, RmagResRecs, 'rmag_results') print "specimen statistics and eigenparameters stored in ", rmag_res
def main(): """ NAME k15_s.py DESCRIPTION converts .k15 format data to .s format. assumes Jelinek Kappabridge measurement scheme SYNTAX k15_s.py [-h][-i][command line options][<filename] OPTIONS -h prints help message and quits -i allows interactive entry of options -f FILE, specifies input file, default: standard input -F FILE, specifies output file, default: standard output -crd [g, t] specifies [g]eographic rotation, or geographic AND tectonic rotation INPUT name [az,pl,strike,dip], followed by 3 rows of 5 measurements for each specimen OUTPUT least squares matrix elements and sigma: x11,x22,x33,x12,x23,x13,sigma """ firstline,itilt,igeo,linecnt,key=1,0,0,0,"" out="" data,k15=[],[] dir='./' ofile="" if '-WD' in sys.argv: ind=sys.argv.index('-WD') dir=sys.argv[ind+1]+'/' if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-i' in sys.argv: file=input("Input file name [.k15 format]: ") f=open(file,'r') data=f.readlines() f.close() file=input("Output file name [.s format]: ") out=open(file,'w') print (" [g]eographic, [t]ilt corrected, ") tg=input(" [return for specimen coordinates]: ") if tg=='g': igeo=1 elif tg=='t': igeo,itilt=1,1 elif '-f' in sys.argv: ind=sys.argv.index('-f') file=dir+sys.argv[ind+1] f=open(file,'r') data=f.readlines() f.close() else: data= sys.stdin.readlines() if len(data)==0: print(main.__doc__) sys.exit() if '-F' in sys.argv: ind=sys.argv.index('-F') ofile=dir+sys.argv[ind+1] out=open(ofile,'w') if '-crd' in sys.argv: ind=sys.argv.index('-crd') tg=sys.argv[ind+1] if tg=='g':igeo=1 if tg=='t': igeo,itilt=1,1 for line in data: rec=line.split() if firstline==1: firstline=0 nam=rec[0] if igeo==1: az,pl=float(rec[1]),float(rec[2]) if itilt==1: bed_az,bed_dip=90.+float(rec[3]),float(rec[4]) else: linecnt+=1 for i in range(5): k15.append(float(rec[i])) if linecnt==3: sbar,sigma,bulk=pmag.dok15_s(k15) if igeo==1: sbar=pmag.dosgeo(sbar,az,pl) if itilt==1: sbar=pmag.dostilt(sbar,bed_az,bed_dip) outstring="" for s in sbar:outstring+='%10.8f '%(s) outstring+='%10.8f'%(sigma) if out=="": print(outstring) else: out.write(outstring+'\n') linecnt,firstline,k15=0,1,[] if ofile!="":print ('Output saved in ',ofile)
def main(): """ NAME susar4-asc_magic.py DESCRIPTION converts ascii files generated by SUSAR ver.4.0 to MagIC formated files for use with PmagPy plotting software SYNTAX susar4-asc_magic.py -h [command line options] OPTIONS -h: prints the help message and quits -f FILE: specify .asc input file name -F MFILE: specify magic_measurements output file -Fa AFILE: specify rmag_anisotropy output file -Fr RFILE: specify rmag_results output file -Fs SFILE: specify er_specimens output file with location, sample, site, etc. information -usr USER: specify who made the measurements -loc LOC: specify location name for study -ins INST: specify instrument used -spc SPEC: specify number of characters to specify specimen from sample -ncn NCON: specify naming convention: default is #2 below -k15 : specify static 15 position mode - default is spinning -new : replace all existing magic files DEFAULTS AFILE: rmag_anisotropy.txt RFILE: rmag_results.txt SFILE: default is to create new er_specimen.txt file USER: "" LOC: "unknown" INST: "" SPEC: 0 sample name is same as site (if SPEC is 1, sample is all but last character) appends to 'er_specimens.txt, er_samples.txt, er_sites.txt' files Sample naming convention: [1] XXXXY: where XXXX is an arbitrary length site designation and Y is the single character sample designation. e.g., TG001a is the first sample from site TG001. [default] [2] XXXX-YY: YY sample from site XXXX (XXX, YY of arbitary length) [3] XXXX.YY: YY sample from site XXXX (XXX, YY of arbitary length) [4-Z] XXXX[YYY]: YYY is sample designation with Z characters from site XXX [5] site name same as sample [6] site is entered under a separate column -- NOT CURRENTLY SUPPORTED [7-Z] [XXXX]YYY: XXXX is site designation with Z characters with sample name XXXXYYYY NB: all others you will have to customize your self or e-mail [email protected] for help. """ citation='This study' cont=0 samp_con,Z="1",1 AniRecSs,AniRecs,SpecRecs,SampRecs,SiteRecs,MeasRecs=[],[],[],[],[],[] user,locname,specfile="","unknown","er_specimens.txt" isspec,inst,specnum='0',"",0 spin,new=1,0 dir_path='.' if '-WD' in sys.argv: ind=sys.argv.index('-WD') dir_path=sys.argv[ind+1] aoutput,routput,moutput=dir_path+'/rmag_anisotropy.txt',dir_path+'/rmag_results.txt',dir_path+'/magic_measurements.txt' if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-usr' in sys.argv: ind=sys.argv.index('-usr') user=sys.argv[ind+1] if "-ncn" in sys.argv: ind=sys.argv.index("-ncn") samp_con=sys.argv[ind+1] if "4" in samp_con: if "-" not in samp_con: print("option [4] must be in form 4-Z where Z is an integer") sys.exit() else: Z=samp_con.split("-")[1] samp_con="4" if "7" in samp_con: if "-" not in samp_con: print("option [7] must be in form 7-Z where Z is an integer") sys.exit() else: Z=samp_con.split("-")[1] samp_con="7" if '-k15' in sys.argv:spin=0 if '-f' in sys.argv: ind=sys.argv.index('-f') ascfile=dir_path+'/'+sys.argv[ind+1] if '-F' in sys.argv: ind=sys.argv.index('-F') moutput=dir_path+'/'+sys.argv[ind+1] if '-Fa' in sys.argv: ind=sys.argv.index('-Fa') aoutput=dir_path+'/'+sys.argv[ind+1] if '-Fr' in sys.argv: ind=sys.argv.index('-Fr') routput=dir_path+'/'+sys.argv[ind+1] if '-Fs' in sys.argv: ind=sys.argv.index('-Fs') specfile=dir_path+'/'+sys.argv[ind+1] isspec='1' elif '-loc' in sys.argv: ind=sys.argv.index('-loc') locname=sys.argv[ind+1] if '-spc' in sys.argv: ind=sys.argv.index('-spc') specnum=-(int(sys.argv[ind+1])) if specnum!=0:specnum=-specnum if isspec=="1": specs,file_type=pmag.magic_read(specfile) specnames,sampnames,sitenames=[],[],[] if '-new' not in sys.argv: # see if there are already specimen,sample, site files lying around try: SpecRecs,file_type=pmag.magic_read(dir_path+'/er_specimens.txt') for spec in SpecRecs: if spec['er_specimen_name'] not in specnames:specnames.append(samp['er_specimen_name']) except: SpecRecs,specs=[],[] try: SampRecs,file_type=pmag.magic_read(dir_path+'/er_samples.txt') for samp in SampRecs: if samp['er_sample_name'] not in sampnames:sampnames.append(samp['er_sample_name']) except: sampnames,SampRecs=[],[] try: SiteRecs,file_type=pmag.magic_read(dir_path+'/er_sites.txt') for site in SiteRecs: if site['er_site_names'] not in sitenames:sitenames.append(site['er_site_name']) except: sitenames,SiteRecs=[],[] try: input=open(ascfile,'r') except: print('Error opening file: ', ascfile) Data=input.readlines() k=0 while k<len(Data): line = Data[k] words=line.split() if "ANISOTROPY" in words: # first line of data for the spec MeasRec,AniRec,SpecRec,SampRec,SiteRec={},{},{},{},{} specname=words[0] AniRec['er_specimen_name']=specname if isspec=="1": for spec in specs: if spec['er_specimen_name']==specname: AniRec['er_sample_name']=spec['er_sample_name'] AniRec['er_site_name']=spec['er_site_name'] AniRec['er_location_name']=spec['er_location_name'] break elif isspec=="0": if specnum!=0: sampname=specname[:specnum] else: sampname=specname AniRec['er_sample_name']=sampname SpecRec['er_specimen_name']=specname SpecRec['er_sample_name']=sampname SampRec['er_sample_name']=sampname SiteRec['er_sample_name']=sampname SiteRec['site_description']='s' AniRec['er_site_name']=pmag.parse_site(AniRec['er_sample_name'],samp_con,Z) SpecRec['er_site_name']=pmag.parse_site(AniRec['er_sample_name'],samp_con,Z) SampRec['er_site_name']=pmag.parse_site(AniRec['er_sample_name'],samp_con,Z) SiteRec['er_site_name']=pmag.parse_site(AniRec['er_sample_name'],samp_con,Z) AniRec['er_location_name']=locname SpecRec['er_location_name']=locname SampRec['er_location_name']=locname SiteRec['er_location_name']=locname AniRec['er_citation_names']="This study" SpecRec['er_citation_names']="This study" SampRec['er_citation_names']="This study" SiteRec['er_citation_names']="This study" AniRec['er_citation_names']="This study" AniRec['magic_instrument_codes']=inst AniRec['magic_method_codes']="LP-X:AE-H:LP-AN-MS" AniRec['magic_experiment_names']=specname+":"+"LP-AN-MS" AniRec['er_analyst_mail_names']=user for key in list(AniRec.keys()):MeasRec[key]=AniRec[key] MeasRec['measurement_flag']='g' AniRec['anisotropy_flag']='g' MeasRec['measurement_standard']='u' MeasRec['measurement_description']='Bulk sucsecptibility measurement' AniRec['anisotropy_type']="AMS" AniRec['anisotropy_unit']="Normalized by trace" if spin==1: AniRec['anisotropy_n']="192" else: AniRec['anisotropy_n']="15" if 'Azi' in words and isspec=='0': SampRec['sample_azimuth']=words[1] labaz=float(words[1]) if 'Dip' in words: SampRec['sample_dip']='%7.1f'%(-float(words[1])) SpecRec['specimen_vol']='%8.3e'%(float(words[10])*1e-6) # convert actual volume to m^3 from cm^3 labdip=float(words[1]) if 'T1' in words and 'F1' in words: k+=2 # read in fourth line down line=Data[k] rec=line.split() dd=rec[1].split('/') dip_direction=int(dd[0])+90 SampRec['sample_bed_dip_direction']='%i'%(dip_direction) SampRec['sample_bed_dip']=dd[1] bed_dip=float(dd[1]) if "Mean" in words: k+=4 # read in fourth line down line=Data[k] rec=line.split() MeasRec['measurement_chi_volume']=rec[1] sigma=.01*float(rec[2])/3. AniRec['anisotropy_sigma']='%7.4f'%(sigma) AniRec['anisotropy_unit']='SI' if "factors" in words: k+=4 # read in second line down line=Data[k] rec=line.split() if "Specimen" in words: # first part of specimen data AniRec['anisotropy_s1']='%7.4f'%(old_div(float(words[5]),3.)) # eigenvalues sum to unity - not 3 AniRec['anisotropy_s2']='%7.4f'%(old_div(float(words[6]),3.)) AniRec['anisotropy_s3']='%7.4f'%(old_div(float(words[7]),3.)) k+=1 line=Data[k] rec=line.split() AniRec['anisotropy_s4']='%7.4f'%(old_div(float(rec[5]),3.)) # eigenvalues sum to unity - not 3 AniRec['anisotropy_s5']='%7.4f'%(old_div(float(rec[6]),3.)) AniRec['anisotropy_s6']='%7.4f'%(old_div(float(rec[7]),3.)) AniRec['anisotropy_tilt_correction']='-1' AniRecs.append(AniRec) AniRecG,AniRecT={},{} for key in list(AniRec.keys()):AniRecG[key]=AniRec[key] for key in list(AniRec.keys()):AniRecT[key]=AniRec[key] sbar=[] sbar.append(float(AniRec['anisotropy_s1'])) sbar.append(float(AniRec['anisotropy_s2'])) sbar.append(float(AniRec['anisotropy_s3'])) sbar.append(float(AniRec['anisotropy_s4'])) sbar.append(float(AniRec['anisotropy_s5'])) sbar.append(float(AniRec['anisotropy_s6'])) sbarg=pmag.dosgeo(sbar,labaz,labdip) AniRecG["anisotropy_s1"]='%12.10f'%(sbarg[0]) AniRecG["anisotropy_s2"]='%12.10f'%(sbarg[1]) AniRecG["anisotropy_s3"]='%12.10f'%(sbarg[2]) AniRecG["anisotropy_s4"]='%12.10f'%(sbarg[3]) AniRecG["anisotropy_s5"]='%12.10f'%(sbarg[4]) AniRecG["anisotropy_s6"]='%12.10f'%(sbarg[5]) AniRecG["anisotropy_tilt_correction"]='0' AniRecs.append(AniRecG) if bed_dip!="" and bed_dip!=0: # have tilt correction sbart=pmag.dostilt(sbarg,dip_direction,bed_dip) AniRecT["anisotropy_s1"]='%12.10f'%(sbart[0]) AniRecT["anisotropy_s2"]='%12.10f'%(sbart[1]) AniRecT["anisotropy_s3"]='%12.10f'%(sbart[2]) AniRecT["anisotropy_s4"]='%12.10f'%(sbart[3]) AniRecT["anisotropy_s5"]='%12.10f'%(sbart[4]) AniRecT["anisotropy_s6"]='%12.10f'%(sbart[5]) AniRecT["anisotropy_tilt_correction"]='100' AniRecs.append(AniRecT) MeasRecs.append(MeasRec) if SpecRec['er_specimen_name'] not in specnames: SpecRecs.append(SpecRec) specnames.append(SpecRec['er_specimen_name']) if SampRec['er_sample_name'] not in sampnames: SampRecs.append(SampRec) sampnames.append(SampRec['er_sample_name']) if SiteRec['er_site_name'] not in sitenames: SiteRecs.append(SiteRec) sitenames.append(SiteRec['er_site_name']) k+=1 # skip to next specimen pmag.magic_write(aoutput,AniRecs,'rmag_anisotropy') print("anisotropy tensors put in ",aoutput) pmag.magic_write(moutput,MeasRecs,'magic_measurements') print("bulk measurements put in ",moutput) if isspec=="0": SpecOut,keys=pmag.fillkeys(SpecRecs) output=dir_path+"/er_specimens.txt" pmag.magic_write(output,SpecOut,'er_specimens') print("specimen info put in ",output) output=dir_path+"/er_samples.txt" SampOut,keys=pmag.fillkeys(SampRecs) pmag.magic_write(output,SampOut,'er_samples') print("sample info put in ",output) output=dir_path+"/er_sites.txt" SiteOut,keys=pmag.fillkeys(SiteRecs) pmag.magic_write(output,SiteOut,'er_sites') print("site info put in ",output) print("""" You can now import your data into the Magic Console and complete data entry, for example the site locations, lithologies, etc. plotting can be done with aniso_magic.py """)
def main(): """ NAME susar4-asc_magic.py DESCRIPTION converts ascii files generated by SUSAR ver.4.0 to MagIC formated files for use with PmagPy plotting software SYNTAX susar4-asc_magic.py -h [command line options] OPTIONS -h: prints the help message and quits -f FILE: specify .asc input file name -F MFILE: specify magic_measurements output file -Fa AFILE: specify rmag_anisotropy output file -Fr RFILE: specify rmag_results output file -Fs SFILE: specify er_specimens output file with location, sample, site, etc. information -usr USER: specify who made the measurements -loc LOC: specify location name for study -ins INST: specify instrument used -spc SPEC: specify number of characters to specify specimen from sample -ncn NCON: specify naming convention: default is #2 below -k15 : specify static 15 position mode - default is spinning -new : replace all existing magic files DEFAULTS AFILE: rmag_anisotropy.txt RFILE: rmag_results.txt SFILE: default is to create new er_specimen.txt file USER: "" LOC: "unknown" INST: "" SPEC: 0 sample name is same as site (if SPEC is 1, sample is all but last character) appends to 'er_specimens.txt, er_samples.txt, er_sites.txt' files Sample naming convention: [1] XXXXY: where XXXX is an arbitrary length site designation and Y is the single character sample designation. e.g., TG001a is the first sample from site TG001. [default] [2] XXXX-YY: YY sample from site XXXX (XXX, YY of arbitary length) [3] XXXX.YY: YY sample from site XXXX (XXX, YY of arbitary length) [4-Z] XXXX[YYY]: YYY is sample designation with Z characters from site XXX [5] site name same as sample [6] site is entered under a separate column -- NOT CURRENTLY SUPPORTED [7-Z] [XXXX]YYY: XXXX is site designation with Z characters with sample name XXXXYYYY NB: all others you will have to customize your self or e-mail [email protected] for help. """ citation = 'This study' cont = 0 samp_con, Z = "1", 1 AniRecSs,AniRecs,SpecRecs,SampRecs,SiteRecs,MeasRecs=[],[],[],[],[],[] user, locname, specfile = "", "unknown", "er_specimens.txt" isspec, inst, specnum = '0', "", 0 spin, new = 1, 0 dir_path = '.' if '-WD' in sys.argv: ind = sys.argv.index('-WD') dir_path = sys.argv[ind + 1] aoutput, routput, moutput = dir_path + '/rmag_anisotropy.txt', dir_path + '/rmag_results.txt', dir_path + '/magic_measurements.txt' if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-usr' in sys.argv: ind = sys.argv.index('-usr') user = sys.argv[ind + 1] if "-ncn" in sys.argv: ind = sys.argv.index("-ncn") samp_con = sys.argv[ind + 1] if "4" in samp_con: if "-" not in samp_con: print("option [4] must be in form 4-Z where Z is an integer") sys.exit() else: Z = samp_con.split("-")[1] samp_con = "4" if "7" in samp_con: if "-" not in samp_con: print("option [7] must be in form 7-Z where Z is an integer") sys.exit() else: Z = samp_con.split("-")[1] samp_con = "7" if '-k15' in sys.argv: spin = 0 if '-f' in sys.argv: ind = sys.argv.index('-f') ascfile = dir_path + '/' + sys.argv[ind + 1] if '-F' in sys.argv: ind = sys.argv.index('-F') moutput = dir_path + '/' + sys.argv[ind + 1] if '-Fa' in sys.argv: ind = sys.argv.index('-Fa') aoutput = dir_path + '/' + sys.argv[ind + 1] if '-Fr' in sys.argv: ind = sys.argv.index('-Fr') routput = dir_path + '/' + sys.argv[ind + 1] if '-Fs' in sys.argv: ind = sys.argv.index('-Fs') specfile = dir_path + '/' + sys.argv[ind + 1] isspec = '1' elif '-loc' in sys.argv: ind = sys.argv.index('-loc') locname = sys.argv[ind + 1] if '-spc' in sys.argv: ind = sys.argv.index('-spc') specnum = -(int(sys.argv[ind + 1])) if specnum != 0: specnum = -specnum if isspec == "1": specs, file_type = pmag.magic_read(specfile) specnames, sampnames, sitenames = [], [], [] if '-new' not in sys.argv: # see if there are already specimen,sample, site files lying around try: SpecRecs, file_type = pmag.magic_read(dir_path + '/er_specimens.txt') for spec in SpecRecs: if spec['er_specimen_name'] not in specnames: specnames.append(samp['er_specimen_name']) except: SpecRecs, specs = [], [] try: SampRecs, file_type = pmag.magic_read(dir_path + '/er_samples.txt') for samp in SampRecs: if samp['er_sample_name'] not in sampnames: sampnames.append(samp['er_sample_name']) except: sampnames, SampRecs = [], [] try: SiteRecs, file_type = pmag.magic_read(dir_path + '/er_sites.txt') for site in SiteRecs: if site['er_site_names'] not in sitenames: sitenames.append(site['er_site_name']) except: sitenames, SiteRecs = [], [] try: input = open(ascfile, 'r') except: print('Error opening file: ', ascfile) Data = input.readlines() k = 0 while k < len(Data): line = Data[k] words = line.split() if "ANISOTROPY" in words: # first line of data for the spec MeasRec, AniRec, SpecRec, SampRec, SiteRec = {}, {}, {}, {}, {} specname = words[0] AniRec['er_specimen_name'] = specname if isspec == "1": for spec in specs: if spec['er_specimen_name'] == specname: AniRec['er_sample_name'] = spec['er_sample_name'] AniRec['er_site_name'] = spec['er_site_name'] AniRec['er_location_name'] = spec['er_location_name'] break elif isspec == "0": if specnum != 0: sampname = specname[:specnum] else: sampname = specname AniRec['er_sample_name'] = sampname SpecRec['er_specimen_name'] = specname SpecRec['er_sample_name'] = sampname SampRec['er_sample_name'] = sampname SiteRec['er_sample_name'] = sampname SiteRec['site_description'] = 's' AniRec['er_site_name'] = pmag.parse_site( AniRec['er_sample_name'], samp_con, Z) SpecRec['er_site_name'] = pmag.parse_site( AniRec['er_sample_name'], samp_con, Z) SampRec['er_site_name'] = pmag.parse_site( AniRec['er_sample_name'], samp_con, Z) SiteRec['er_site_name'] = pmag.parse_site( AniRec['er_sample_name'], samp_con, Z) AniRec['er_location_name'] = locname SpecRec['er_location_name'] = locname SampRec['er_location_name'] = locname SiteRec['er_location_name'] = locname AniRec['er_citation_names'] = "This study" SpecRec['er_citation_names'] = "This study" SampRec['er_citation_names'] = "This study" SiteRec['er_citation_names'] = "This study" AniRec['er_citation_names'] = "This study" AniRec['magic_instrument_codes'] = inst AniRec['magic_method_codes'] = "LP-X:AE-H:LP-AN-MS" AniRec['magic_experiment_names'] = specname + ":" + "LP-AN-MS" AniRec['er_analyst_mail_names'] = user for key in list(AniRec.keys()): MeasRec[key] = AniRec[key] MeasRec['measurement_flag'] = 'g' AniRec['anisotropy_flag'] = 'g' MeasRec['measurement_standard'] = 'u' MeasRec[ 'measurement_description'] = 'Bulk sucsecptibility measurement' AniRec['anisotropy_type'] = "AMS" AniRec['anisotropy_unit'] = "Normalized by trace" if spin == 1: AniRec['anisotropy_n'] = "192" else: AniRec['anisotropy_n'] = "15" if 'Azi' in words and isspec == '0': SampRec['sample_azimuth'] = words[1] labaz = float(words[1]) if 'Dip' in words: SampRec['sample_dip'] = '%7.1f' % (-float(words[1])) SpecRec['specimen_vol'] = '%8.3e' % (float( words[10]) * 1e-6) # convert actual volume to m^3 from cm^3 labdip = float(words[1]) if 'T1' in words and 'F1' in words: k += 2 # read in fourth line down line = Data[k] rec = line.split() dd = rec[1].split('/') dip_direction = int(dd[0]) + 90 SampRec['sample_bed_dip_direction'] = '%i' % (dip_direction) SampRec['sample_bed_dip'] = dd[1] bed_dip = float(dd[1]) if "Mean" in words: k += 4 # read in fourth line down line = Data[k] rec = line.split() MeasRec['measurement_chi_volume'] = rec[1] sigma = .01 * float(rec[2]) / 3. AniRec['anisotropy_sigma'] = '%7.4f' % (sigma) AniRec['anisotropy_unit'] = 'SI' if "factors" in words: k += 4 # read in second line down line = Data[k] rec = line.split() if "Specimen" in words: # first part of specimen data AniRec['anisotropy_s1'] = '%7.4f' % (old_div(float( words[5]), 3.)) # eigenvalues sum to unity - not 3 AniRec['anisotropy_s2'] = '%7.4f' % (old_div(float(words[6]), 3.)) AniRec['anisotropy_s3'] = '%7.4f' % (old_div(float(words[7]), 3.)) k += 1 line = Data[k] rec = line.split() AniRec['anisotropy_s4'] = '%7.4f' % (old_div(float( rec[5]), 3.)) # eigenvalues sum to unity - not 3 AniRec['anisotropy_s5'] = '%7.4f' % (old_div(float(rec[6]), 3.)) AniRec['anisotropy_s6'] = '%7.4f' % (old_div(float(rec[7]), 3.)) AniRec['anisotropy_tilt_correction'] = '-1' AniRecs.append(AniRec) AniRecG, AniRecT = {}, {} for key in list(AniRec.keys()): AniRecG[key] = AniRec[key] for key in list(AniRec.keys()): AniRecT[key] = AniRec[key] sbar = [] sbar.append(float(AniRec['anisotropy_s1'])) sbar.append(float(AniRec['anisotropy_s2'])) sbar.append(float(AniRec['anisotropy_s3'])) sbar.append(float(AniRec['anisotropy_s4'])) sbar.append(float(AniRec['anisotropy_s5'])) sbar.append(float(AniRec['anisotropy_s6'])) sbarg = pmag.dosgeo(sbar, labaz, labdip) AniRecG["anisotropy_s1"] = '%12.10f' % (sbarg[0]) AniRecG["anisotropy_s2"] = '%12.10f' % (sbarg[1]) AniRecG["anisotropy_s3"] = '%12.10f' % (sbarg[2]) AniRecG["anisotropy_s4"] = '%12.10f' % (sbarg[3]) AniRecG["anisotropy_s5"] = '%12.10f' % (sbarg[4]) AniRecG["anisotropy_s6"] = '%12.10f' % (sbarg[5]) AniRecG["anisotropy_tilt_correction"] = '0' AniRecs.append(AniRecG) if bed_dip != "" and bed_dip != 0: # have tilt correction sbart = pmag.dostilt(sbarg, dip_direction, bed_dip) AniRecT["anisotropy_s1"] = '%12.10f' % (sbart[0]) AniRecT["anisotropy_s2"] = '%12.10f' % (sbart[1]) AniRecT["anisotropy_s3"] = '%12.10f' % (sbart[2]) AniRecT["anisotropy_s4"] = '%12.10f' % (sbart[3]) AniRecT["anisotropy_s5"] = '%12.10f' % (sbart[4]) AniRecT["anisotropy_s6"] = '%12.10f' % (sbart[5]) AniRecT["anisotropy_tilt_correction"] = '100' AniRecs.append(AniRecT) MeasRecs.append(MeasRec) if SpecRec['er_specimen_name'] not in specnames: SpecRecs.append(SpecRec) specnames.append(SpecRec['er_specimen_name']) if SampRec['er_sample_name'] not in sampnames: SampRecs.append(SampRec) sampnames.append(SampRec['er_sample_name']) if SiteRec['er_site_name'] not in sitenames: SiteRecs.append(SiteRec) sitenames.append(SiteRec['er_site_name']) k += 1 # skip to next specimen pmag.magic_write(aoutput, AniRecs, 'rmag_anisotropy') print("anisotropy tensors put in ", aoutput) pmag.magic_write(moutput, MeasRecs, 'magic_measurements') print("bulk measurements put in ", moutput) if isspec == "0": SpecOut, keys = pmag.fillkeys(SpecRecs) output = dir_path + "/er_specimens.txt" pmag.magic_write(output, SpecOut, 'er_specimens') print("specimen info put in ", output) output = dir_path + "/er_samples.txt" SampOut, keys = pmag.fillkeys(SampRecs) pmag.magic_write(output, SampOut, 'er_samples') print("sample info put in ", output) output = dir_path + "/er_sites.txt" SiteOut, keys = pmag.fillkeys(SiteRecs) pmag.magic_write(output, SiteOut, 'er_sites') print("site info put in ", output) print("""" You can now import your data into the Magic Console and complete data entry, for example the site locations, lithologies, etc. plotting can be done with aniso_magic.py """)
def main(): """ NAME s_tilt.py DESCRIPTION rotates .s data into stratigraphic coordinates using strike and dip SYNTAX s_tilt.py [-h][options] OPTIONS -h prints help message and quits -i allows interactive entry of file name -f file specifies filename on command line -F FILE specifies output filename on command line < filename, reads from standard input (Unix like operating systems only) INPUT x11 x22 x33 x12 x23 x13 strike dip OUTPUT x11 x22 x33 x12 x23 x13 """ if '-h' in sys.argv: print main.__doc__ sys.exit() # read in the data elif '-i' in sys.argv: file=raw_input("Enter filename for processing: ") f=open(file,'rU') data=f.readlines() f.close() elif '-f' in sys.argv: ind=sys.argv.index('-f') file=sys.argv[ind+1] f=open(file,'rU') data=f.readlines() f.close() else: data=sys.stdin.readlines() ofile = "" if '-F' in sys.argv: ind = sys.argv.index('-F') ofile= sys.argv[ind+1] out = open(ofile, 'w + a') for line in data: s=[] rec=line.split() for i in range(6): s.append(float(rec[i])) bed_az,bed_dip=float(rec[6])+90.,float(rec[7]) #dip direction,dip # # get eigenvectors # s_rot=pmag.dostilt(s,bed_az,bed_dip) outstring="" for s in s_rot:outstring+='%10.8f '%(s) if ofile == "": print outstring else: out.write(outstring+"\n")
def main(): """ NAME k15_s.py DESCRIPTION converts .k15 format data to .s format. assumes Jelinek Kappabridge measurement scheme SYNTAX k15_s.py [-h][-i][command line options][<filename] OPTIONS -h prints help message and quits -i allows interactive entry of options -f FILE, specifies input file, default: standard input -F FILE, specifies output file, default: standard output -crd [g, t] specifies [g]eographic rotation, or geographic AND tectonic rotation INPUT name [az,pl,strike,dip], followed by 3 rows of 5 measurements for each specimen OUTPUT least squares matrix elements and sigma: x11,x22,x33,x12,x23,x13,sigma """ firstline, itilt, igeo, linecnt, key = 1, 0, 0, 0, "" out = "" data, k15 = [], [] if '-h' in sys.argv: print(main.__doc__) sys.exit() if '-i' in sys.argv: file = input("Input file name [.k15 format]: ") f = open(file, 'r') data = f.readlines() f.close() file = input("Output file name [.s format]: ") out = open(file, 'w') print(" [g]eographic, [t]ilt corrected, ") tg = input(" [return for specimen coordinates]: ") if tg == 'g': igeo = 1 elif tg == 't': igeo, itilt = 1, 1 elif '-f' in sys.argv: ind = sys.argv.index('-f') file = sys.argv[ind + 1] f = open(file, 'r') data = f.readlines() f.close() else: data = sys.stdin.readlines() if len(data) == 0: print(main.__doc__) sys.exit() if '-F' in sys.argv: ind = sys.argv.index('-F') file = sys.argv[ind + 1] out = open(file, 'w') if '-crd' in sys.argv: ind = sys.argv.index('-crd') tg = sys.argv[ind + 1] if tg == 'g': igeo = 1 if tg == 't': igeo, itilt = 1, 1 for line in data: rec = line.split() if firstline == 1: firstline = 0 nam = rec[0] if igeo == 1: az, pl = float(rec[1]), float(rec[2]) if itilt == 1: bed_az, bed_dip = 90. + float(rec[3]), float(rec[4]) else: linecnt += 1 for i in range(5): k15.append(float(rec[i])) if linecnt == 3: sbar, sigma, bulk = pmag.dok15_s(k15) if igeo == 1: sbar = pmag.dosgeo(sbar, az, pl) if itilt == 1: sbar = pmag.dostilt(sbar, bed_az, bed_dip) outstring = "" for s in sbar: outstring += '%10.8f ' % (s) outstring += '%10.8f' % (sigma) if out == "": print(outstring) else: out.write(outstring + '\n') linecnt, firstline, k15 = 0, 1, []
def main(): """ NAME aarm_magic.py DESCRIPTION Converts AARM data to best-fit tensor (6 elements plus sigma) Original program ARMcrunch written to accomodate ARM anisotropy data collected from 6 axial directions (+X,+Y,+Z,-X,-Y,-Z) using the off-axis remanence terms to construct the tensor. A better way to do the anisotropy of ARMs is to use 9,12 or 15 measurements in the Hext rotational scheme. SYNTAX aarm_magic.py [-h][command line options] OPTIONS -h prints help message and quits -usr USER: identify user, default is "" -f FILE: specify input file, default is aarm_measurements.txt -crd [s,g,t] specify coordinate system, requires er_samples.txt file -fsa FILE: specify er_samples.txt file, default is er_samples.txt -Fa FILE: specify anisotropy output file, default is arm_anisotropy.txt -Fr FILE: specify results output file, default is aarm_results.txt INPUT Input for the present program is a series of baseline, ARM pairs. The baseline should be the AF demagnetized state (3 axis demag is preferable) for the following ARM acquisition. The order of the measurements is: positions 1,2,3, 6,7,8, 11,12,13 (for 9 positions) positions 1,2,3,4, 6,7,8,9, 11,12,13,14 (for 12 positions) positions 1-15 (for 15 positions) """ # initialize some parameters args=sys.argv user="" meas_file="aarm_measurements.txt" samp_file="er_samples.txt" rmag_anis="arm_anisotropy.txt" rmag_res="aarm_results.txt" dir_path='.' # # get name of file from command line # if '-WD' in args: ind=args.index('-WD') dir_path=args[ind+1] if "-h" in args: print main.__doc__ sys.exit() if "-usr" in args: ind=args.index("-usr") user=sys.argv[ind+1] if "-f" in args: ind=args.index("-f") meas_file=sys.argv[ind+1] coord='-1' if "-crd" in sys.argv: ind=sys.argv.index("-crd") coord=sys.argv[ind+1] if coord=='s':coord='-1' if coord=='g':coord='0' if coord=='t':coord='100' if "-fsa" in args: ind=args.index("-fsa") samp_file=sys.argv[ind+1] if "-Fa" in args: ind=args.index("-Fa") rmag_anis=args[ind+1] if "-Fr" in args: ind=args.index("-Fr") rmag_res=args[ind+1] meas_file=dir_path+'/'+meas_file samp_file=dir_path+'/'+samp_file rmag_anis=dir_path+'/'+rmag_anis rmag_res=dir_path+'/'+rmag_res # read in data meas_data,file_type=pmag.magic_read(meas_file) meas_data=pmag.get_dictitem(meas_data,'magic_method_codes','LP-AN-ARM','has') if file_type != 'magic_measurements': print file_type print file_type,"This is not a valid magic_measurements file " sys.exit() if coord!='-1': # need to read in sample data samp_data,file_type=pmag.magic_read(samp_file) if file_type != 'er_samples': print file_type print file_type,"This is not a valid er_samples file " print "Only specimen coordinates will be calculated" coord='-1' # # sort the specimen names # ssort=[] for rec in meas_data: spec=rec["er_specimen_name"] if spec not in ssort: ssort.append(spec) if len(ssort)>1: sids=sorted(ssort) else: sids=ssort # # work on each specimen # specimen=0 RmagSpecRecs,RmagResRecs=[],[] while specimen < len(sids): s=sids[specimen] data=[] RmagSpecRec={} RmagResRec={} method_codes=[] # # find the data from the meas_data file for this sample # data=pmag.get_dictitem(meas_data,'er_specimen_name',s,'T') # # find out the number of measurements (9, 12 or 15) # npos=len(data)/2 if npos==9: # # get dec, inc, int and convert to x,y,z # B,H,tmpH=pmag.designAARM(npos) # B matrix made from design matrix for positions X=[] for rec in data: Dir=[] Dir.append(float(rec["measurement_dec"])) Dir.append(float(rec["measurement_inc"])) Dir.append(float(rec["measurement_magn_moment"])) X.append(pmag.dir2cart(Dir)) # # subtract baseline and put in a work array # work=numpy.zeros((npos,3),'f') for i in range(npos): for j in range(3): work[i][j]=X[2*i+1][j]-X[2*i][j] # # calculate tensor elements # first put ARM components in w vector # w=numpy.zeros((npos*3),'f') index=0 for i in range(npos): for j in range(3): w[index]=work[i][j] index+=1 s=numpy.zeros((6),'f') # initialize the s matrix for i in range(6): for j in range(len(w)): s[i]+=B[i][j]*w[j] trace=s[0]+s[1]+s[2] # normalize by the trace for i in range(6): s[i]=s[i]/trace a=pmag.s2a(s) #------------------------------------------------------------ # Calculating dels is different than in the Kappabridge # routine. Use trace normalized tensor (a) and the applied # unit field directions (tmpH) to generate model X,Y,Z # components. Then compare these with the measured values. #------------------------------------------------------------ S=0. comp=numpy.zeros((npos*3),'f') for i in range(npos): for j in range(3): index=i*3+j compare=a[j][0]*tmpH[i][0]+a[j][1]*tmpH[i][1]+a[j][2]*tmpH[i][2] comp[index]=compare for i in range(npos*3): d=w[i]/trace - comp[i] # del values S+=d*d nf=float(npos*3-6) # number of degrees of freedom if S >0: sigma=numpy.sqrt(S/nf) else: sigma=0 RmagSpecRec["rmag_anisotropy_name"]=data[0]["er_specimen_name"] RmagSpecRec["er_location_name"]=data[0]["er_location_name"] RmagSpecRec["er_specimen_name"]=data[0]["er_specimen_name"] RmagSpecRec["er_sample_name"]=data[0]["er_sample_name"] RmagSpecRec["er_site_name"]=data[0]["er_site_name"] RmagSpecRec["magic_experiment_names"]=RmagSpecRec["rmag_anisotropy_name"]+":AARM" RmagSpecRec["er_citation_names"]="This study" RmagResRec["rmag_result_name"]=data[0]["er_specimen_name"]+":AARM" RmagResRec["er_location_names"]=data[0]["er_location_name"] RmagResRec["er_specimen_names"]=data[0]["er_specimen_name"] RmagResRec["er_sample_names"]=data[0]["er_sample_name"] RmagResRec["er_site_names"]=data[0]["er_site_name"] RmagResRec["magic_experiment_names"]=RmagSpecRec["rmag_anisotropy_name"]+":AARM" RmagResRec["er_citation_names"]="This study" if "magic_instrument_codes" in data[0].keys(): RmagSpecRec["magic_instrument_codes"]=data[0]["magic_instrument_codes"] else: RmagSpecRec["magic_instrument_codes"]="" RmagSpecRec["anisotropy_type"]="AARM" RmagSpecRec["anisotropy_description"]="Hext statistics adapted to AARM" if coord!='-1': # need to rotate s # set orientation priorities SO_methods=[] for rec in samp_data: if "magic_method_codes" not in rec: rec['magic_method_codes']='SO-NO' if "magic_method_codes" in rec: methlist=rec["magic_method_codes"] for meth in methlist.split(":"): if "SO" in meth and "SO-POM" not in meth.strip(): if meth.strip() not in SO_methods: SO_methods.append(meth.strip()) SO_priorities=pmag.set_priorities(SO_methods,0) # continue here redo,p=1,0 if len(SO_methods)<=1: az_type=SO_methods[0] orient=pmag.find_samp_rec(RmagSpecRec["er_sample_name"],samp_data,az_type) if orient["sample_azimuth"] !="": method_codes.append(az_type) redo=0 while redo==1: if p>=len(SO_priorities): print "no orientation data for ",s orient["sample_azimuth"]="" orient["sample_dip"]="" method_codes.append("SO-NO") redo=0 else: az_type=SO_methods[SO_methods.index(SO_priorities[p])] orient=pmag.find_samp_rec(PmagSpecRec["er_sample_name"],samp_data,az_type) if orient["sample_azimuth"] !="": method_codes.append(az_type) redo=0 p+=1 az,pl=orient['sample_azimuth'],orient['sample_dip'] s=pmag.dosgeo(s,az,pl) # rotate to geographic coordinates if coord=='100': sampe_bed_dir,sample_bed_dip=orient['sample_bed_dip_direction'],orient['sample_bed_dip'] s=pmag.dostilt(s,bed_dir,bed_dip) # rotate to geographic coordinates hpars=pmag.dohext(nf,sigma,s) # # prepare for output # RmagSpecRec["anisotropy_s1"]='%8.6f'%(s[0]) RmagSpecRec["anisotropy_s2"]='%8.6f'%(s[1]) RmagSpecRec["anisotropy_s3"]='%8.6f'%(s[2]) RmagSpecRec["anisotropy_s4"]='%8.6f'%(s[3]) RmagSpecRec["anisotropy_s5"]='%8.6f'%(s[4]) RmagSpecRec["anisotropy_s6"]='%8.6f'%(s[5]) RmagSpecRec["anisotropy_mean"]='%8.3e'%(trace/3) RmagSpecRec["anisotropy_sigma"]='%8.6f'%(sigma) RmagSpecRec["anisotropy_unit"]="Am^2" RmagSpecRec["anisotropy_n"]='%i'%(npos) RmagSpecRec["anisotropy_tilt_correction"]=coord RmagSpecRec["anisotropy_F"]='%7.1f '%(hpars["F"]) # used by thellier_gui - must be taken out for uploading RmagSpecRec["anisotropy_F_crit"]=hpars["F_crit"] # used by thellier_gui - must be taken out for uploading RmagResRec["anisotropy_t1"]='%8.6f '%(hpars["t1"]) RmagResRec["anisotropy_t2"]='%8.6f '%(hpars["t2"]) RmagResRec["anisotropy_t3"]='%8.6f '%(hpars["t3"]) RmagResRec["anisotropy_v1_dec"]='%7.1f '%(hpars["v1_dec"]) RmagResRec["anisotropy_v2_dec"]='%7.1f '%(hpars["v2_dec"]) RmagResRec["anisotropy_v3_dec"]='%7.1f '%(hpars["v3_dec"]) RmagResRec["anisotropy_v1_inc"]='%7.1f '%(hpars["v1_inc"]) RmagResRec["anisotropy_v2_inc"]='%7.1f '%(hpars["v2_inc"]) RmagResRec["anisotropy_v3_inc"]='%7.1f '%(hpars["v3_inc"]) RmagResRec["anisotropy_ftest"]='%7.1f '%(hpars["F"]) RmagResRec["anisotropy_ftest12"]='%7.1f '%(hpars["F12"]) RmagResRec["anisotropy_ftest23"]='%7.1f '%(hpars["F23"]) RmagResRec["result_description"]='Critical F: '+hpars["F_crit"]+';Critical F12/F13: '+hpars["F12_crit"] if hpars["e12"]>hpars["e13"]: RmagResRec["anisotropy_v1_zeta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v1_zeta_dec"]='%7.1f '%(hpars['v2_dec']) RmagResRec["anisotropy_v1_zeta_inc"]='%7.1f '%(hpars['v2_inc']) RmagResRec["anisotropy_v2_zeta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v2_zeta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v2_zeta_inc"]='%7.1f '%(hpars['v1_inc']) RmagResRec["anisotropy_v1_eta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v1_eta_dec"]='%7.1f '%(hpars['v3_dec']) RmagResRec["anisotropy_v1_eta_inc"]='%7.1f '%(hpars['v3_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v3_eta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v3_eta_inc"]='%7.1f '%(hpars['v1_inc']) else: RmagResRec["anisotropy_v1_zeta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v1_zeta_dec"]='%7.1f '%(hpars['v3_dec']) RmagResRec["anisotropy_v1_zeta_inc"]='%7.1f '%(hpars['v3_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v3_zeta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v3_zeta_inc"]='%7.1f '%(hpars['v1_inc']) RmagResRec["anisotropy_v1_eta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v1_eta_dec"]='%7.1f '%(hpars['v2_dec']) RmagResRec["anisotropy_v1_eta_inc"]='%7.1f '%(hpars['v2_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v2_eta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v2_eta_inc"]='%7.1f '%(hpars['v1_inc']) if hpars["e23"]>hpars['e12']: RmagResRec["anisotropy_v2_zeta_semi_angle"]='%7.1f '%(hpars['e23']) RmagResRec["anisotropy_v2_zeta_dec"]='%7.1f '%(hpars['v3_dec']) RmagResRec["anisotropy_v2_zeta_inc"]='%7.1f '%(hpars['v3_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"]='%7.1f '%(hpars['e23']) RmagResRec["anisotropy_v3_zeta_dec"]='%7.1f '%(hpars['v2_dec']) RmagResRec["anisotropy_v3_zeta_inc"]='%7.1f '%(hpars['v2_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v3_eta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v3_eta_inc"]='%7.1f '%(hpars['v1_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v2_eta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v2_eta_inc"]='%7.1f '%(hpars['v1_inc']) else: RmagResRec["anisotropy_v2_zeta_semi_angle"]='%7.1f '%(hpars['e12']) RmagResRec["anisotropy_v2_zeta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v2_zeta_inc"]='%7.1f '%(hpars['v1_inc']) RmagResRec["anisotropy_v3_eta_semi_angle"]='%7.1f '%(hpars['e23']) RmagResRec["anisotropy_v3_eta_dec"]='%7.1f '%(hpars['v2_dec']) RmagResRec["anisotropy_v3_eta_inc"]='%7.1f '%(hpars['v2_inc']) RmagResRec["anisotropy_v3_zeta_semi_angle"]='%7.1f '%(hpars['e13']) RmagResRec["anisotropy_v3_zeta_dec"]='%7.1f '%(hpars['v1_dec']) RmagResRec["anisotropy_v3_zeta_inc"]='%7.1f '%(hpars['v1_inc']) RmagResRec["anisotropy_v2_eta_semi_angle"]='%7.1f '%(hpars['e23']) RmagResRec["anisotropy_v2_eta_dec"]='%7.1f '%(hpars['v3_dec']) RmagResRec["anisotropy_v2_eta_inc"]='%7.1f '%(hpars['v3_inc']) RmagResRec["tilt_correction"]='-1' RmagResRec["anisotropy_type"]='AARM' RmagResRec["magic_method_codes"]='LP-AN-ARM:AE-H' RmagSpecRec["magic_method_codes"]='LP-AN-ARM:AE-H' RmagResRec["magic_software_packages"]=pmag.get_version() RmagSpecRec["magic_software_packages"]=pmag.get_version() specimen+=1 RmagSpecRecs.append(RmagSpecRec) RmagResRecs.append(RmagResRec) else: print 'skipping specimen ',s,' only 9 positions supported','; this has ',npos specimen+=1 if rmag_anis=="":rmag_anis="rmag_anisotropy.txt" pmag.magic_write(rmag_anis,RmagSpecRecs,'rmag_anisotropy') print "specimen tensor elements stored in ",rmag_anis if rmag_res=="":rmag_res="rmag_results.txt" pmag.magic_write(rmag_res,RmagResRecs,'rmag_results') print "specimen statistics and eigenparameters stored in ",rmag_res