[refs #195] plotting method for Comparison object implemented
This commit is contained in:
		
							parent
							
								
									5f9a9242d1
								
							
						
					
					
						commit
						27e334609c
					
				| @ -3,6 +3,10 @@ | ||||
| 
 | ||||
| import copy | ||||
| 
 | ||||
| import numpy as np | ||||
| 
 | ||||
| import matplotlib.pyplot as plt | ||||
| 
 | ||||
| from obspy import read_events | ||||
| 
 | ||||
| from pylot.core.read.io import picks_from_evt | ||||
| @ -20,16 +24,18 @@ class Comparison(object): | ||||
|     compared pick sets. The results can be displayed as histograms showing its | ||||
|     properties. | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, **kwargs): | ||||
|         names = list() | ||||
|         self._pdfs = dict() | ||||
|         for name, fn in kwargs: | ||||
|         for name, fn in kwargs.items(): | ||||
|             self._pdfs[name] = PDFDictionary.from_quakeml(fn) | ||||
|             names.append(name) | ||||
|         if len(names) > 2: | ||||
|             raise ValueError('Comparison is only defined for two ' | ||||
|                                  'arguments!') | ||||
|                              'arguments!') | ||||
|         self._names = names | ||||
|         self._compare = self.compare_picksets() | ||||
| 
 | ||||
|     def __nonzero__(self): | ||||
|         if not len(self.names) == 2 or not self._pdfs: | ||||
| @ -49,10 +55,23 @@ class Comparison(object): | ||||
|                                                             ' is either not a' \ | ||||
|                                                             ' list or its ' \ | ||||
|                                                             'length is not 2:' \ | ||||
|                                                             'names : {names}'.format(names=names) | ||||
|                                                             'names : {names}'.format( | ||||
|             names=names) | ||||
|         self._names = names | ||||
| 
 | ||||
|     def compare_picksets(self): | ||||
|     @property | ||||
|     def comparison(self): | ||||
|         return self._compare | ||||
| 
 | ||||
|     @property | ||||
|     def stations(self): | ||||
|         return self.comparison.keys() | ||||
| 
 | ||||
|     @property | ||||
|     def nstations(self): | ||||
|         return len(self.stations) | ||||
| 
 | ||||
|     def compare_picksets(self, type='exp'): | ||||
|         """ | ||||
|         Compare two picksets A and B and return a dictionary compiling the results. | ||||
|         Comparison is carried out with the help of pdf representation of the picks | ||||
| @ -67,8 +86,8 @@ class Comparison(object): | ||||
|         """ | ||||
|         compare_pdfs = dict() | ||||
| 
 | ||||
|         pdf_a = self.get(self.names[0]) | ||||
|         pdf_b = self.get(self.names[1]) | ||||
|         pdf_a = self.get(self.names[0]).pdf_data(type) | ||||
|         pdf_b = self.get(self.names[1]).pdf_data(type) | ||||
| 
 | ||||
|         for station, phases in pdf_a.items(): | ||||
|             if station in pdf_b.keys(): | ||||
| @ -82,12 +101,42 @@ class Comparison(object): | ||||
| 
 | ||||
|         return compare_pdfs | ||||
| 
 | ||||
|     def plot(self): | ||||
|         nstations = self.nstations | ||||
|         stations = self.stations | ||||
|         istations = range(nstations) | ||||
|         fig, axarr = plt.subplots(nstations, 2, sharex='col', sharey='row') | ||||
| 
 | ||||
|         for n in istations: | ||||
|             station = stations[n] | ||||
|             compare_pdf = self.comparison[station] | ||||
|             for l, phase in enumerate(compare_pdf.keys()): | ||||
|                 axarr[n, l].plot(compare_pdf[phase].axis, | ||||
|                                  compare_pdf[phase].data) | ||||
|                 if n is 0: | ||||
|                     axarr[n, l].set_title(phase) | ||||
|                 if l is 0: | ||||
|                     axann = axarr[n, l].annotate(station, xy=(.05, .5), | ||||
|                                                  xycoords='axes fraction') | ||||
|                     bbox_props = dict(boxstyle='round', facecolor='lightgrey', | ||||
|                                       alpha=.7) | ||||
|                     axann.set_bbox(bbox_props) | ||||
|                 if n == int(np.median(istations)) and l is 0: | ||||
|                     label = 'probability density (qualitative)' | ||||
|                     axarr[n, l].set_ylabel(label) | ||||
|         plt.setp([a.get_xticklabels() for a in axarr[0, :]], visible=False) | ||||
|         plt.setp([a.get_yticklabels() for a in axarr[:, 1]], visible=False) | ||||
|         plt.setp([a.get_yticklabels() for a in axarr[:, 0]], visible=False) | ||||
| 
 | ||||
|         plt.show() | ||||
| 
 | ||||
| 
 | ||||
| class PDFDictionary(object): | ||||
|     """ | ||||
|     A PDFDictionary is a dictionary like object containing structured data on | ||||
|     the probability density function of seismic phase onsets. | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, data): | ||||
|         self._pickdata = data | ||||
| 
 | ||||
| @ -111,7 +160,7 @@ class PDFDictionary(object): | ||||
|         if len(cat) > 1: | ||||
|             raise NotImplementedError('reading more than one event at the same ' | ||||
|                                       'time is not implemented yet! Sorry!') | ||||
|         self.pick_data = picks_from_evt(cat[0]) | ||||
|         return PDFDictionary(picks_from_evt(cat[0])) | ||||
| 
 | ||||
|     def pdf_data(self, type='exp'): | ||||
|         """ | ||||
| @ -127,10 +176,10 @@ class PDFDictionary(object): | ||||
| 
 | ||||
|         for station, phases in pdf_picks.items(): | ||||
|             for phase, values in phases.items(): | ||||
|                 phases[phase] = ProbabilityDensityFunction.fromPick(values['epp'], | ||||
|                                                                     values['mpp'], | ||||
|                                                                     values['lpp'], | ||||
|                                                                     type=type) | ||||
|                 phases[phase] = ProbabilityDensityFunction.fromPick( | ||||
|                     values['epp'], | ||||
|                     values['mpp'], | ||||
|                     values['lpp'], | ||||
|                     type=type) | ||||
| 
 | ||||
|         return pdf_picks | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user