c2b9aa35
dmayerich
Added scattering ...
|
1
|
#this code parses the results of a simulation and stores them in a SimParserClass structure
|
5e1cbbab
dmayerich
Bug fixes. UI upd...
|
2
3
|
from pylab import *
|
de89d3bc
dmayerich
Initial commit.
|
4
5
|
class SimParserClass:
|
78875071
David Mayerich
changes since UIU...
|
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
simResults = dict()
sxNearField = 0
syNearField = 0
intersectedNearField = 0
#near field data
gridNearField = []
maxNearField = []
#the stokes matrix is read from the output
stokesMatrix = []
scatAmpMatrix = []
|
de89d3bc
dmayerich
Initial commit.
|
20
|
|
78875071
David Mayerich
changes since UIU...
|
21
22
23
24
25
|
def __init__(self, parameters):
self.params = parameters;
self.simResults['lambda'] = list()
|
6f131540
dmayerich
Additional UI cha...
|
26
|
|
78875071
David Mayerich
changes since UIU...
|
27
28
29
30
31
32
33
34
35
36
37
38
39
|
self.simResults['extinction_unpolarized'] = list()
self.simResults['extinction_parallel'] = list()
self.simResults['extinction_perpendicular'] = list()
self.simResults['extinction_total'] = list()
self.simResults['detector_field'] = list()
self.gridNearField = []
self.maxNearField = []
def parseSimFile(self, l, fileName):
self.simResults['lambda'].append(l)
inFile = open(fileName, 'r')
|
de89d3bc
dmayerich
Initial commit.
|
40
|
|
78875071
David Mayerich
changes since UIU...
|
41
42
43
44
|
while True:
line = inFile.readline().strip()
|
c2b9aa35
dmayerich
Added scattering ...
|
45
46
|
#if the simulation is for a single plane wave
|
78875071
David Mayerich
changes since UIU...
|
47
48
|
if int(self.params['fixed_or_random_orientation']) == 0:
if line == 'scattering matrix elements':
|
c2b9aa35
dmayerich
Added scattering ...
|
49
50
51
52
53
54
55
|
#empty the stokes matrix
self.stokesMatrix = []
inFile.readline()
for s in range(0, 181):
values = map(float, inFile.readline().strip().split())
self.stokesMatrix.append(values)
break;
|
78875071
David Mayerich
changes since UIU...
|
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
|
elif line == 'unpolarized total ext, abs, scat efficiencies, w.r.t. xv, and asym. parm':
values = inFile.readline().strip().split(' ')
self.simResults['extinction_unpolarized'].append(values[0])
elif line == 'parallel total ext, abs, scat efficiencies':
values = inFile.readline().strip().split(' ')
self.simResults['extinction_parallel'].append(values[0])
elif line == 'perpendicular total ext, abs, scat efficiencies':
values = inFile.readline().strip().split(' ')
self.simResults['extinction_perpendicular'].append(values[0])
#if the simulation is for random orientations
else:
if line == 'scattering matrix elements':
break
elif line == 'total ext, abs, scat efficiencies, w.r.t. xv, and asym. parm':
values = inFile.readline().strip().split(' ')
self.simResults['extinction_total'].append(values[0])
def parseNearField(self, fileName):
inFile = open(fileName, 'r')
#get the size of the near field grid
line = inFile.readline().strip()
self.sxNearField, self.syNearField = map(int, line.split())
#get the number of spheres that are intersected
line = inFile.readline().strip()
self.intersectedNearField = int(line)
#process intersections here-----------
|
5e1cbbab
dmayerich
Bug fixes. UI upd...
|
88
|
|
78875071
David Mayerich
changes since UIU...
|
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#get the field values
self.gridNearField = []
for y in range(self.syNearField):
self.gridNearField.append([])
for x in range(self.sxNearField):
line = inFile.readline().strip()
values = map(float, line.split())
self.gridNearField[y].append(values[2])
E = array(self.gridNearField)
#the enhancement is E^4 (so (E^2)^2)
self.maxNearField.append(pow(abs(E).max(), 2))
#calculate and return the scattering amplitude matrix
def calcScatteringAmp(self):
|
c2b9aa35
dmayerich
Added scattering ...
|
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#compute the number of entries in the stokes matrix
nEntries = len(self.stokesMatrix)
#initialize the scattering amplitude matrix to empty
self.scatAmpMatrix = []
for s in range(0, nEntries):
Z = self.stokesMatrix[s]
scatEntry = []
s11 = complex(sqrt(0.5 * (Z[1] - Z[2] - Z[5] + Z[6])), 0.0)
scatEntry.append(s11)
scatEntry.append(complex(-0.5 * (Z[3] + Z[7]) / s11, 0.5 * (Z[4] + Z[8]) / s11))
scatEntry.append(complex(-0.5 * (Z[9] + Z[10]) / s11, -0.5 * (Z[13] + Z[14]) / s11))
scatEntry.append(complex(0.5 * (Z[11] + Z[12]) / s11, -0.5 * (Z[12] - Z[15]) / s11))
self.scatAmpMatrix.append(scatEntry)
S = self.scatAmpMatrix[0]
E = [S[0], S[2]]
self.simResults['detector_field'].append(E)
print(E)
|
78875071
David Mayerich
changes since UIU...
|
126
|
|
de89d3bc
dmayerich
Initial commit.
|
127
|
|
78875071
David Mayerich
changes since UIU...
|
128
129
130
131
|
def saveFile(self, fileName):
outFile = open(fileName, 'w')
outFile.write(str(self))
outFile.close()
|
de89d3bc
dmayerich
Initial commit.
|
132
|
|
78875071
David Mayerich
changes since UIU...
|
133
134
|
def __getitem__(self, key):
return self.simResults[key];
|
de89d3bc
dmayerich
Initial commit.
|
135
|
|
78875071
David Mayerich
changes since UIU...
|
136
137
|
def __str__(self):
result = '';
|
de89d3bc
dmayerich
Initial commit.
|
138
|
|
78875071
David Mayerich
changes since UIU...
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
for i in range(len(self.simResults['lambda'])):
result += str(self.simResults['lambda'][i])
if int(self.params['fixed_or_random_orientation']) == 0:
result += '\t' + str(self.simResults['extinction_unpolarized'][i])
result += '\t' + str(self.simResults['extinction_parallel'][i])
result += '\t' + str(self.simResults['extinction_perpendicular'][i])
else:
result += '\t' + str(self.simResults['extinction_total'][i])
#result += '\t' + str(self.simResults['detector_field'][i][0]) + '\t' + str(self.simResults['detector_field'][i][1])
#parse the near field if it is included in the simulation
#if int(parameters['calculate_near_field']) == 1:
# result += '\t' + str(maxNearField)
result += '\n'
return result
|