Finished phases output for HASH.
This commit is contained in:
		
							parent
							
								
									a01b6f6db5
								
							
						
					
					
						commit
						92a1c77f9c
					
				| @ -232,6 +232,8 @@ def picks_from_picksdict(picks, creation_info=None): | |||||||
|             if not isinstance(phase, dict): |             if not isinstance(phase, dict): | ||||||
|                 continue |                 continue | ||||||
|             onset = phase['mpp'] |             onset = phase['mpp'] | ||||||
|  |             ccode = phase['channel'] | ||||||
|  |             ncode = onsets['network'] | ||||||
|             pick = ope.Pick() |             pick = ope.Pick() | ||||||
|             if creation_info: |             if creation_info: | ||||||
|                 pick.creation_info = creation_info |                 pick.creation_info = creation_info | ||||||
| @ -252,7 +254,9 @@ def picks_from_picksdict(picks, creation_info=None): | |||||||
|                 picker = 'Unknown' |                 picker = 'Unknown' | ||||||
|             pick.phase_hint = label |             pick.phase_hint = label | ||||||
|             pick.method_id = ope.ResourceIdentifier(id=picker) |             pick.method_id = ope.ResourceIdentifier(id=picker) | ||||||
|             pick.waveform_id = ope.WaveformStreamID(station_code=station) |             pick.waveform_id = ope.WaveformStreamID(station_code=station, | ||||||
|  |                                                       channel_code=ccode, | ||||||
|  |                                                       network_code=ncode) | ||||||
|             try: |             try: | ||||||
|                 polarity = phase['fm'] |                 polarity = phase['fm'] | ||||||
|                 if polarity == 'U' or '+': |                 if polarity == 'U' or '+': | ||||||
| @ -722,6 +726,94 @@ def writephases(arrivals, fformat, filename, parameter, eventinfo=None): | |||||||
| 
 | 
 | ||||||
|         fid.close() |         fid.close() | ||||||
| 
 | 
 | ||||||
|  |     elif fformat == 'HASH': | ||||||
|  |         # two different input files for  | ||||||
|  |         # HASH-driver 1 and 2 (see HASH manual!) | ||||||
|  |         filename1 = filename + 'drv1' + '.phase' | ||||||
|  |         filename2 = filename + 'drv2' + '.phase' | ||||||
|  |         print ("Writing phases to %s for HASH for HASH-driver 1" % filename1) | ||||||
|  |         fid1 = open("%s" % filename1, 'w') | ||||||
|  |         print ("Writing phases to %s for HASH for HASH-driver 2" % filename2) | ||||||
|  |         fid2 = open("%s" % filename2, 'w') | ||||||
|  |         # get event information needed for HASH-input file | ||||||
|  |         eventsource = eventinfo.origins[0] | ||||||
|  |         event = parameter.get('eventID') | ||||||
|  |         hashID = event.split('.')[0][1:5] | ||||||
|  |         latdeg = eventsource['latitude'] | ||||||
|  |         latmin = eventsource['latitude'] * 60 / 10000 | ||||||
|  |         londeg = eventsource['longitude'] | ||||||
|  |         lonmin = eventsource['longitude'] * 60 / 10000 | ||||||
|  |         erh = 1 / 2 * (eventsource.origin_uncertainty['min_horizontal_uncertainty'] + | ||||||
|  |                        eventsource.origin_uncertainty['max_horizontal_uncertainty']) / 1000 | ||||||
|  |         erz = eventsource.depth_errors['uncertainty'] | ||||||
|  |         stime = eventsource['time'] | ||||||
|  |         if stime.year - 2000 >= 0: | ||||||
|  |            syear = stime.year - 2000 | ||||||
|  |         else: | ||||||
|  |            syear = stime.year - 1900 | ||||||
|  |         picks = eventinfo.picks | ||||||
|  |         # write header line including event information | ||||||
|  |         # for HASH-driver 1 | ||||||
|  |         fid1.write('%s%02d%02d%02d%02d%5.2f%2dN%5.2f%3dE%5.2f%6.3f%4.2f%5.2f%5.2f%s\n' % (syear, | ||||||
|  |                              stime.month, stime.day, stime.hour, stime.minute, stime.second,  | ||||||
|  |                                        latdeg, latmin, londeg, lonmin, eventsource['depth'],  | ||||||
|  |                                                    eventinfo.magnitudes[0]['mag'], erh, erz,  | ||||||
|  |                                                                                     hashID)) | ||||||
|  |         # write header line including event information | ||||||
|  |         # for HASH-driver 2 | ||||||
|  |         fid2.write('%d%02d%02d%02d%02d%5.2f%dN%5.2f%3dE%6.2f%5.2f    %d                                          %5.2f %5.2f                                        %4.2f      %s \n' % (syear, stime.month, stime.day,  | ||||||
|  |                                                stime.hour, stime.minute, stime.second,  | ||||||
|  |                                                          latdeg,latmin,londeg, lonmin,  | ||||||
|  |                                                                  eventsource['depth'],  | ||||||
|  |                                            eventsource['quality']['used_phase_count'], | ||||||
|  |                                                erh, erz, eventinfo.magnitudes[0]['mag'], | ||||||
|  |                                                                                 hashID)) | ||||||
|  | 
 | ||||||
|  |         # write phase lines | ||||||
|  |         for key in arrivals: | ||||||
|  |             if arrivals[key].has_key('P'): | ||||||
|  |                 if arrivals[key]['P']['weight'] < 4 and arrivals[key]['P']['fm'] is not None: | ||||||
|  |                     stat = key | ||||||
|  |                     ccode = arrivals[key]['P']['channel'] | ||||||
|  |                     ncode = arrivals[key]['network'] | ||||||
|  | 
 | ||||||
|  |                     if arrivals[key]['P']['weight'] < 2: | ||||||
|  |                         Pqual='I' | ||||||
|  |                     else: | ||||||
|  |                         Pqual='E' | ||||||
|  |                      | ||||||
|  |                     for i in range(len(picks)): | ||||||
|  |                          station = picks[i].waveform_id.station_code | ||||||
|  |                          if station == stat: | ||||||
|  |                              # get resource ID | ||||||
|  |                              resid_picks = picks[i].get('resource_id') | ||||||
|  |                              # find same ID in eventinfo | ||||||
|  |                              # there it is the pick_id!! | ||||||
|  |                              for j in range(len(eventinfo.origins[0].arrivals)): | ||||||
|  |                                  resid_eventinfo = eventinfo.origins[0].arrivals[j].get('pick_id') | ||||||
|  |                                  if resid_eventinfo == resid_picks and eventinfo.origins[0].arrivals[j].phase == 'P': | ||||||
|  |                                      if len(stat) > 4: # HASH handles only 4-string station IDs | ||||||
|  |                                          stat = stat[1:5] | ||||||
|  |                                      az = eventinfo.origins[0].arrivals[j].get('azimuth') | ||||||
|  |                                      inz = eventinfo.origins[0].arrivals[j].get('takeoff_angle') | ||||||
|  |                                      dist = eventinfo.origins[0].arrivals[j].get('distance')  | ||||||
|  |                                      # write phase line for HASH-driver 1 | ||||||
|  |                                      fid1.write('%-4s%sP%s%d                   0                                   %3.1f          %03d %03d   2     1   %s\n' % (stat, Pqual, arrivals[key]['P']['fm'], arrivals[key]['P']['weight'],  | ||||||
|  |                                                                                dist, inz, az, ccode)) | ||||||
|  |                                      # write phase line for HASH-driver 2 | ||||||
|  |                                      fid2.write('%-4s %s   %s %s %s                    \n' % ( | ||||||
|  |                                                                                            stat, | ||||||
|  |                                                                                           ncode, | ||||||
|  |                                                                                           ccode, | ||||||
|  |                                                                                           Pqual, | ||||||
|  |                                                                        arrivals[key]['P']['fm'])) | ||||||
|  |                                      break | ||||||
|  | 
 | ||||||
|  |         fid1.write('                                    %s' % hashID) | ||||||
|  |         fid1.close() | ||||||
|  |         fid2.close() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def merge_picks(event, picks): | def merge_picks(event, picks): | ||||||
|     """ |     """ | ||||||
|     takes an event object and a list of picks and searches for matching |     takes an event object and a list of picks and searches for matching | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user