Blame view

mstm_simparser.py 3.8 KB
5e1cbbab   dmayerich   Bug fixes. UI upd...
1
2
  from pylab import *
  
de89d3bc   dmayerich   Initial commit.
3
4
5
  class SimParserClass:
  
      simResults = dict()
5e1cbbab   dmayerich   Bug fixes. UI upd...
6
7
8
9
10
11
12
13
14
      
      sxNearField = 0
      syNearField = 0
      intersectedNearField = 0
      
      #near field data
      gridNearField = []
      maxNearField = []
      
de89d3bc   dmayerich   Initial commit.
15
  
6f131540   dmayerich   Additional UI cha...
16
17
18
19
20
21
      def __init__(self, parameters):
          
          self.params = parameters;
          
          self.simResults['lambda'] = list()      
  
de89d3bc   dmayerich   Initial commit.
22
23
24
          self.simResults['extinction_unpolarized'] = list()
          self.simResults['extinction_parallel'] = list()
          self.simResults['extinction_perpendicular'] = list()
6f131540   dmayerich   Additional UI cha...
25
          self.simResults['extinction_total'] = list()
5e1cbbab   dmayerich   Bug fixes. UI upd...
26
27
28
29
30
          
          self.gridNearField = []
          self.maxNearField = []
          
          
de89d3bc   dmayerich   Initial commit.
31
32
33
34
      def parseSimFile(self, l, fileName):
          self.simResults['lambda'].append(l)
          inFile = open(fileName, 'r')
  
6f131540   dmayerich   Additional UI cha...
35
          
de89d3bc   dmayerich   Initial commit.
36
          while True:
6f131540   dmayerich   Additional UI cha...
37
              
de89d3bc   dmayerich   Initial commit.
38
39
              line = inFile.readline().strip()
  
6f131540   dmayerich   Additional UI cha...
40
41
42
43
44
45
46
47
48
49
50
51
52
53
              if int(self.params['fixed_or_random_orientation']) == 0:
                  if line == 'scattering matrix elements':
                      break
                  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])
              
              else:
6f131540   dmayerich   Additional UI cha...
54
55
56
57
58
                  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])
5e1cbbab   dmayerich   Bug fixes. UI upd...
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
                      
      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-----------
          
  
          #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)
edf1d940   dmayerich   UI modifications ...
85
          self.maxNearField.append(abs(E).max())
5e1cbbab   dmayerich   Bug fixes. UI upd...
86
                 
de89d3bc   dmayerich   Initial commit.
87
88
89
90
  
      def saveFile(self, fileName):
          outFile = open(fileName, 'w')
          outFile.write(str(self))
6f131540   dmayerich   Additional UI cha...
91
          outFile.close()
de89d3bc   dmayerich   Initial commit.
92
93
94
95
96
97
98
99
  
      def __getitem__(self, key):
          return self.simResults[key];
  
      def __str__(self):
          result = '';
  
          for i in range(len(self.simResults['lambda'])):
5e1cbbab   dmayerich   Bug fixes. UI upd...
100
101
102
103
104
105
106
107
108
109
              result += str(self.simResults['lambda'][i])
              result += '\t' + str(self.simResults['extinction_unpolarized'][i])
              result += '\t' + str(self.simResults['extinction_parallel'][i])
              result += '\t' + str(self.simResults['extinction_perpendicular'][i])
              
              #parse the near field if it is included in the simulation
              if int(parameters['calculate_near_field']) == 1:
                  result += '\t' + str(maxNearField)
                  
              result += '\n'
de89d3bc   dmayerich   Initial commit.
110
          return result