forked from hmrtn/Multi-Diagnostic-Toolkit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nplt.py
144 lines (107 loc) · 3.98 KB
/
nplt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
"""Nude Faraday Probe Data Plotting Module
This module contains the functions used to plot current density vs
radial position for the electric propulsion systems in the Advanced Propulsion
Laboratory at the University of Washington.
"""
__author__ = 'Kaito Durkee'
import sys
import os
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from scipy.signal import butter, lfilter
from scipy.stats import maxwell
from scipy.interpolate import CubicSpline, splev, splrep
from scipy import interpolate as inter
import re
from PyQt5.QtWidgets import QCheckBox
from ErrorClasses import DataError, FileError
import warnings
def get_radial_position(filename):
# Pull out radial position from filename as a float.
position_match = re.search(
'[-]?[0-9]?[0-9][ ]?cm',filename)
if position_match == None:
raise ValueError("Filename format is incorrect: %r" % filename)
position_string = position_match.group()
position_string = "".join(position_string.split())
position_string = position_string[:-2]
# if position_string[-1] == '-':
# position_string = position_string[:-1]
position = float(position_string)
return position
def check_folders_in_directory(id_list):
flag = False
for folder in os.listdir():
if folder[0] in id_list:
flag = True
if flag == False:
raise FileError("No folders in directory are named correctly: " +
"CHECK DIRECTORY")
def get_data(name):
data = {}
os.chdir(name)
# id is L, R, D, or T (Left, Right, Double, or Triple)
id_list = ['L','R','D','T']
check_folders_in_directory(id_list)
for id in id_list:
for id_folder in os.listdir():
if id_folder[0] == id:
data[id] = {}
for position_folder in os.listdir(id_folder):
for shot_file in os.listdir(
id_folder + '/' + position_folder):
position = get_radial_position(shot_file)
data[id][position] = {shot_file: np.ndfromtxt(
id_folder + '/' + position_folder +'/' +
shot_file, delimiter='\t')}
if data == {}:
raise DataError("Data could not be read.")
return data
def butter_filter(data, order, cutoff):
buttered = {}
sos = signal.butter(order, cutoff, btype='low', analog=False, output='sos')
for id in data:
buttered[id] = {}
for position in data[id]:
buttered[id][position] = {}
for shot_file in data[id][position]:
corrected = np.array(
signal.sosfiltfilt(sos, data[id][position][shot_file][:, 1]))
buttered[id][position][shot_file] = corrected
return buttered
def butter_avg(buttered):
avg = {}
for id in buttered.keys():
avg[id] = {}
for position in buttered[id]:
avg[id][position] = {}
for shot_file in buttered[id][position]:
length = len(buttered[id][position][shot_file])
average_vals = (np.sum(
buttered[id][position][shot_file], axis=0) / length)
avg[id][position] = average_vals
return avg
def get_max_vals(avg):
max_vals = {}
for id in avg.keys():
max_vals[id] = {}
for position in avg[id]:
max_val_at_position = np.amax(
np.absolute(avg[id][position]))
max_vals[id][position] = max_val_at_position
return max_vals
def Idensity(max_vals):
area_of_probe = 1.2667686E-4 # m^2 = pi*[(12.7 mm)/2]^2
shunt_resistance = 99.2 # Ohms
const = area_of_probe * shunt_resistance
Idensity = {}
# Create a dictionary of radial position mapped to
# max current density values.
for id in max_vals.keys():
Idensity[id] = {}
for position in max_vals[id]:
Idensity[id][position] = max_vals[id][position] / const
return Idensity
if __name__ == 'main':
print('Running nplt')