preparing data for visualization
John Machin
sjmachin at lexicon.net
Mon Nov 12 18:12:19 EST 2007
Bryan.Fodn... at gmail.com wrote:
> I would like to have my data in a format so that I can create a
> contour plot.
>
> My data is in a file with a format, where there may be multiple fields
>
> field = 1
>
> 1a 0
> 2a 0
The above is NOT consistent with the later listing of your data file.
[big snip
> 10b 0
>
> where the value is how far from the center it will be displaced,
>
> a b a
> b a b
> 10 0000000000|0000000000 0000000000|0000000000 0000000000|
[big snip of seemingly irrelevant stuff]
> 1 0000000000|0000000000 0000000000|0000000000 0000000000|
> 0000000000
>
> I could possibly have many of these that I will add together and
> normalize to one.
>
> Also, there are 60 a and b blocks, the middle 40 are 0.5 times the
> width of the outer 20.
>
> I thought about filling an array, but there is not a one to one
> symmetry.
>
> I cannot seem to get my head around this. Can anybody help me get
> started?
>
> I have tried to use a dictionary, but cannot seem to get it to work
> the way I want.
>
> I try this,
>
> ---------------------------------------------------------------------------------
>
> f = open('TEST1.MLC')
>
> fields = {}
>
> for line in f:
> if line.split()[0] == 'Field':
>
> field = int(line.split()[-1])
Do line.split() ONCE per line.
>
> elif line.split()[0] == 'Leaf':
> fields[field] = line.split()[-1]
> else:
> line = f.next()
Don't mix
for line in f
and
line = f.next()
otherwise you will you will skip lines that you don't want to skip and/
or become confused.
>
> ---------------------------------------------------------------------------------
>
> and get,
>
> ---------------------------------------------------------------------------------
>
> Traceback (most recent call last):
> File "<pyshell#1>", line 1, in <module>
> line.split()[0]
> IndexError: list index out of range
This indicates that you have a list for which 0 is not a valid index.
If it had 1 or more elements, then 0 would be a valid index. I
conclude that the list is empty. This would happen if line contained
no characters other than whitespace.
> Here is my data file,
>
> ---------------------------------------------------------------------------------
>
> File Rev = G
> Treatment = Dynamic Dose
> Last Name = Fodness
> First Name = Bryan
> Patient ID = 0001
> Number of Fields = 4
> Number of Leaves = 120
> Tolerance = 0.50
>
> Field = 10
> Index = 0.0000
> Carriage Group = 1
> Operator =
> Collimator = 0.0
> Leaf 1A = 0.00
> Leaf 2A = 0.00
[snip]
> Leaf 20A = 0.00
> Leaf 21A = 5.00
> Leaf 22A = 5.00
[snip]
> Leaf 40A = 5.00
[big snip -- your code failed no later than the 10th line in the data
file]
To find out what is going on, print out some variables:
8<--- fodness.py ----
f = open('fodness.dat')
fields = {}
for lino, line in enumerate(f):
tokens = line.split()
print "Line %d: tokens = %r" % (lino, tokens)
if not tokens:
continue # blank/empty line
tok0 = tokens[0]
if tok0 == 'Field':
field = int(tokens[-1])
elif tok0 == 'Leaf':
fields[field] = tokens[-1]
else:
continue
print " Fields:", fields
8<---
Results [truncated]:
C:\junk>fodness.py | more
Line 0: tokens = []
Line 1: tokens = ['File', 'Rev', '=', 'G']
[snip]
Line 8: tokens = ['Tolerance', '=', '0.50']
Line 9: tokens = []
Line 10: tokens = ['Field', '=', '10']
Fields: {}
Line 11: tokens = ['Index', '=', '0.0000']
Line 12: tokens = ['Carriage', 'Group', '=', '1']
Line 13: tokens = ['Operator', '=']
Line 14: tokens = ['Collimator', '=', '0.0']
Line 15: tokens = ['Leaf', '1A', '=', '0.00']
Fields: {10: '0.00'} <<<<<<<<<<====== Don't you need a float
instead of a string??
Line 16: tokens = ['Leaf', '2A', '=', '0.00']
Fields: {10: '0.00'}
Line 17: tokens = ['Leaf', '3A', '=', '0.00']
Fields: {10: '0.00'}
Line 18: tokens = ['Leaf', '4A', '=', '0.00']
Fields: {10: '0.00'}
Don't you want/need to use the leaf IDs (1A, 2A, etc)?? I guess that
you want to end up with NESTED dictonaries, like this:
fields = {
10: {
'1A': 0.0,
'2A': 0.0,
etc,
},
8: {
etc,
},
etc,
}
HTH,
John
More information about the Python-list
mailing list