def test_plot_subfaults(self): strike_numbers = numpy.array([ 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11 ]) dip_numbers = numpy.array([ 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3 ]) # Let's try making the centroids everywhere pp = PdfPages('multipage.pdf') for i in range(len(strike_numbers)): centroid_index = i num_subfaults_length = 6 num_subfaults_width = 2 f, axarr = pyplot.subplots(2, 2) for j in [0, 1]: for k in [0, 1]: subfaults = generate_event_deformation.find_subfaults_to_include( strike_numbers, dip_numbers, centroid_index, num_subfaults_length, num_subfaults_width, prefer_down_dip_expansion=j, prefer_along_strike_expansion=k) # pyplot.subplot(2,2,2*j+k) axarr[j, k].plot( strike_numbers, dip_numbers, 'p', color='black') axarr[j, k].plot( strike_numbers[subfaults], dip_numbers[subfaults], 'p', color='orange') axarr[j, k].set_xlim((strike_numbers.min() - 1, strike_numbers.max() + 1)) axarr[j, k].set_ylim((dip_numbers.min() - 1, dip_numbers.max() + 1)) axarr[j, k].set_title('Up Dip: ' + str(j) + ' / Along Strk:' + str(k)) axarr[j, k].plot( strike_numbers[centroid_index], dip_numbers[centroid_index], 'p', color='red') pp.savefig() pp.close()
def test_find_subfaults_to_include(self): centroid_index = 8 strike_numbers = numpy.array([ 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11 ]) dip_numbers = numpy.array([ 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3 ]) centroid_strike_number = strike_numbers[centroid_index] centroid_dip_number = dip_numbers[centroid_index] # Case 1 -- include everything num_subfaults_length = 11 num_subfaults_width = 4 subfaults = generate_event_deformation.find_subfaults_to_include( strike_numbers, dip_numbers, centroid_index, num_subfaults_length, num_subfaults_width) assert all(strike_numbers[subfaults] == strike_numbers) assert all(dip_numbers[subfaults] == dip_numbers) # Case 2 -- include just the centroid num_subfaults_length = 1 num_subfaults_width = 1 subfaults = generate_event_deformation.find_subfaults_to_include( strike_numbers, dip_numbers, centroid_index, num_subfaults_length, num_subfaults_width) assert strike_numbers[subfaults] == centroid_strike_number assert dip_numbers[subfaults] == centroid_dip_number # Case 3 -- a case where we can't match all the constraints num_subfaults_length = 7 num_subfaults_width = 2 # Centroid neighbours include missing values centroid_index = (dip_numbers == 4).nonzero()[0] subfaults = generate_event_deformation.find_subfaults_to_include( strike_numbers, dip_numbers, centroid_index, num_subfaults_length, num_subfaults_width) assert (centroid_index in subfaults.tolist()) empirical_length = strike_numbers[subfaults].max() -\ strike_numbers[subfaults].min() + 1 tol = 0.7 * num_subfaults_length assert (abs(empirical_length - num_subfaults_length) <= tol) empirical_width = dip_numbers[subfaults].max() -\ dip_numbers[subfaults].min() + 1 tol = 0.5 * num_subfaults_width assert (abs(empirical_width - num_subfaults_width) <= tol) empirical_area = len(subfaults) desired_area = num_subfaults_width * num_subfaults_length tol = desired_area * 0.2 assert (abs(empirical_area - desired_area) <= tol)