From af7471f4b45a0c8ce230fbf74a75c15b2ec39001 Mon Sep 17 00:00:00 2001 From: Nathan Nguyen <159226326+Indigo5684@users.noreply.github.com> Date: Tue, 25 Feb 2025 22:21:47 -0600 Subject: [PATCH] Modern Phys Lab --- .../physics/modern-phys-lab/counting/run.py | 56 +++++++++++++++---- .../physics/modern-phys-lab/diffraction.py | 2 +- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/statics/physics/modern-phys-lab/counting/run.py b/statics/physics/modern-phys-lab/counting/run.py index 3fc2b2d..10e68e1 100644 --- a/statics/physics/modern-phys-lab/counting/run.py +++ b/statics/physics/modern-phys-lab/counting/run.py @@ -1,5 +1,7 @@ import numpy as np import matplotlib.pyplot as plt +from matplotlib import colors +import scipy def read_file(file: str) -> np.typing.ArrayLike: with open(f'{file}.csv', 'r') as file: @@ -12,7 +14,7 @@ all_data = { '40': sum([read_file(f'40-{i}') for i in range(1, 6)]) } -fig, axs = plt.subplots(len(all_data), sharex='all') +fig, axs = plt.subplots(len(all_data), 1, sharex='col') i = 0 for dwell_time in all_data: @@ -41,15 +43,47 @@ for dwell_time in all_data: print(f'Found {times_dev_more_than_P} / {N} ({times_dev_more_than_P / N * 100:0.2f}%) samples deviating from the mean more than P {P:0.2f}') ax = axs[i] + ax.set_xlabel('Run Count') + ax.set_ylabel('Events Measured') + ax.set_title('Raw Data') + ax.scatter(np.arange(1, len(data)+1), data, s=4) + ax.legend(['\n'.join([ + f'Mean: {mean:0.2f}', + f'Sample Sd. Dev: {stdev:0.2f}', + f'P: {P:0.2f}', + f'Events > sigma: {times_dev_more_than_s} ({times_dev_more_than_s / N * 100:0.2f}%)', + f'Events > P: {times_dev_more_than_P} ({times_dev_more_than_P / N * 100:0.2f}%)' + ])]) + + # ax = axs[i][1] + # ax.set_visible(False) + + # ax.set_title(f'Cumulative Average ({dwell_time}ms Dwell time)') + # ax.set_xlabel('After N Runs') + # ax.set_ylabel('Cumulative Average') + + # sample_num = np.arange(1, N + 1) + # cumulative_average = np.cumsum(data) / sample_num + # ax.plot(sample_num, cumulative_average, label=f'Final Value: {cumulative_average[-1]:0.2f}') + # ax.legend() + + + # ax = axs[i] + # N, bins, patches = ax.hist(data, density=True, bins=32, label='Measured Data') + + # fracs = N / N.max() + # norm = colors.Normalize(fracs.min(), fracs.max()) + # for thisfrac, thispatch in zip(fracs, patches): + # color = plt.cm.viridis(norm(thisfrac)) + # thispatch.set_facecolor(color) + + # ax.set_xlabel('Event Count') + # ax.set_ylabel('Frequency') + + # linspace = np.arange(bins.min(), bins.max()) + # gaussian = scipy.stats.norm.pdf(linspace, mean, stdev) + # ax.plot(linspace, gaussian, label='Fitted Gaussian') + # ax.legend() + i += 1 - - ax.set_title(f'Cumulative Average ({dwell_time}ms Dwell time)') - ax.set_xlabel('After N Runs') - ax.set_ylabel('Cumulative Average') - - sample_num = np.arange(1, N + 1) - cumulative_average = np.cumsum(data) / sample_num - ax.plot(sample_num, cumulative_average, label=f'Final Value: {cumulative_average[-1]:0.2f}') - ax.legend() - plt.show() \ No newline at end of file diff --git a/statics/physics/modern-phys-lab/diffraction.py b/statics/physics/modern-phys-lab/diffraction.py index 6dd4c26..2e50d6a 100644 --- a/statics/physics/modern-phys-lab/diffraction.py +++ b/statics/physics/modern-phys-lab/diffraction.py @@ -6,7 +6,7 @@ voltages = np.array(np.arange(2500, 5000 + 1, +500)) #+1 to include 5000 voltages_inv_sqrt = 1 / np.sqrt(voltages) # New units: m -diameter_measured_error = 0.002 +diameter_measured_error = 0.001 # Average inner and outer # New format: d[0 = small, 1 = large][voltage]