By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,095 Members | 1,658 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,095 IT Pros & Developers. It's quick & easy.

preparing data for visualization

P: n/a
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
3a 5
4a 5
5a 5
6a 5
7a 5
8a 5
9a 0
10a 0
1b 0
2b 0
3b 5
4b 5
5b 5
6b 5
7b 5
8b 5
9b 0
10b 0

field = 2

1a 0
2a 0
3a 0
4a 4
5a 4
6a 4
7a 4
8a 0
9a 0
10a 0
1b 0
2b 0
3b 0
4b 4
5b 4
6b 4
7b 4
8b 0
9b 0
10b 0

field = 3

1a 0
2a 0
3a 0
4a 0
5a 3
6a 3
7a 0
8a 0
9a 0
10a 0
1b 0
2b 0
3b 0
4b 0
5b 3
6b 3
7b 0
8b 0
9b 0
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|
0000000000
9 0000000000|0000000000 0000000000|0000000000 0000000000|
0000000000
8 0000011111|1111100000 0000000000|0000000000 0000000000|
0000000000
7 0000011111|1111100000 0000001111|1111000000 0000000000|
0000000000
6 0000011111|1111100000 0000001111|1111000000 0000000111|
1110000000
5 0000011111|1111100000 0000001111|1111000000 0000000111|
1110000000
4 0000011111|1111100000 0000001111|1111000000 0000000000|
0000000000
3 0000011111|1111100000 0000000000|0000000000 0000000000|
0000000000
2 0000000000|0000000000 0000000000|0000000000 0000000000|
0000000000
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])

elif line.split()[0] == 'Leaf':
fields[field] = line.split()[-1]
else:
line = f.next()

---------------------------------------------------------------------------------

and get,

---------------------------------------------------------------------------------

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
line.split()[0]
IndexError: list index out of range

---------------------------------------------------------------------------------

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
Leaf 3A = 0.00
Leaf 4A = 0.00
Leaf 5A = 0.00
Leaf 6A = 0.00
Leaf 7A = 0.00
Leaf 8A = 0.00
Leaf 9A = 0.00
Leaf 10A = 0.00
Leaf 11A = 0.00
Leaf 12A = 0.00
Leaf 13A = 0.00
Leaf 14A = 0.00
Leaf 15A = 0.00
Leaf 16A = 0.00
Leaf 17A = 0.00
Leaf 18A = 0.00
Leaf 19A = 0.00
Leaf 20A = 0.00
Leaf 21A = 5.00
Leaf 22A = 5.00
Leaf 23A = 5.00
Leaf 24A = 5.00
Leaf 25A = 5.00
Leaf 26A = 5.00
Leaf 27A = 5.00
Leaf 28A = 5.00
Leaf 29A = 5.00
Leaf 30A = 5.00
Leaf 31A = 5.00
Leaf 32A = 5.00
Leaf 33A = 5.00
Leaf 34A = 5.00
Leaf 35A = 5.00
Leaf 36A = 5.00
Leaf 37A = 5.00
Leaf 38A = 5.00
Leaf 39A = 5.00
Leaf 40A = 5.00
Leaf 41A = 0.00
Leaf 42A = 0.00
Leaf 43A = 0.00
Leaf 44A = 0.00
Leaf 45A = 0.00
Leaf 46A = 0.00
Leaf 47A = 0.00
Leaf 48A = 0.00
Leaf 49A = 0.00
Leaf 50A = 0.00
Leaf 51A = 0.00
Leaf 52A = 0.00
Leaf 53A = 0.00
Leaf 54A = 0.00
Leaf 55A = 0.00
Leaf 56A = 0.00
Leaf 57A = 0.00
Leaf 58A = 0.00
Leaf 59A = 0.00
Leaf 60A = 0.00
Leaf 1B = 0.00
Leaf 2B = 0.00
Leaf 3B = 0.00
Leaf 4B = 0.00
Leaf 5B = 0.00
Leaf 6B = 0.00
Leaf 7B = 0.00
Leaf 8B = 0.00
Leaf 9B = 0.00
Leaf 10B = 0.00
Leaf 11B = 0.00
Leaf 12B = 0.00
Leaf 13B = 0.00
Leaf 14B = 0.00
Leaf 15B = 0.00
Leaf 16B = 0.00
Leaf 17B = 0.00
Leaf 18B = 0.00
Leaf 19B = 0.00
Leaf 20B = 0.00
Leaf 21B = 5.00
Leaf 22B = 5.00
Leaf 23B = 5.00
Leaf 24B = 5.00
Leaf 25B = 5.00
Leaf 26B = 5.00
Leaf 27B = 5.00
Leaf 28B = 5.00
Leaf 29B = 5.00
Leaf 30B = 5.00
Leaf 31B = 5.00
Leaf 32B = 5.00
Leaf 33B = 5.00
Leaf 34B = 5.00
Leaf 35B = 5.00
Leaf 36B = 5.00
Leaf 37B = 5.00
Leaf 38B = 5.00
Leaf 39B = 5.00
Leaf 40B = 5.00
Leaf 41B = 0.00
Leaf 42B = 0.00
Leaf 43B = 0.00
Leaf 44B = 0.00
Leaf 45B = 0.00
Leaf 46B = 0.00
Leaf 47B = 0.00
Leaf 48B = 0.00
Leaf 49B = 0.00
Leaf 50B = 0.00
Leaf 51B = 0.00
Leaf 52B = 0.00
Leaf 53B = 0.00
Leaf 54B = 0.00
Leaf 55B = 0.00
Leaf 56B = 0.00
Leaf 57B = 0.00
Leaf 58B = 0.00
Leaf 59B = 0.00
Leaf 60B = 0.00
Note = 0
Shape = 4
500 500
500 -500
-500 -500
-500 500
Magnification = 1.00

Field = 8
Index = 0.4000
Carriage Group = 1
Operator =
Collimator = 0.0
Leaf 1A = 0.00
Leaf 2A = 0.00
Leaf 3A = 0.00
Leaf 4A = 0.00
Leaf 5A = 0.00
Leaf 6A = 0.00
Leaf 7A = 0.00
Leaf 8A = 0.00
Leaf 9A = 0.00
Leaf 10A = 0.00
Leaf 11A = 0.00
Leaf 12A = 0.00
Leaf 13A = 0.00
Leaf 14A = 0.00
Leaf 15A = 0.00
Leaf 16A = 0.00
Leaf 17A = 0.00
Leaf 18A = 0.00
Leaf 19A = 0.00
Leaf 20A = 0.00
Leaf 21A = 0.00
Leaf 22A = 0.00
Leaf 23A = 4.00
Leaf 24A = 4.00
Leaf 25A = 4.00
Leaf 26A = 4.00
Leaf 27A = 4.00
Leaf 28A = 4.00
Leaf 29A = 4.00
Leaf 30A = 4.00
Leaf 31A = 4.00
Leaf 32A = 4.00
Leaf 33A = 4.00
Leaf 34A = 4.00
Leaf 35A = 4.00
Leaf 36A = 4.00
Leaf 37A = 4.00
Leaf 38A = 4.00
Leaf 39A = 0.00
Leaf 40A = 0.00
Leaf 41A = 0.00
Leaf 42A = 0.00
Leaf 43A = 0.00
Leaf 44A = 0.00
Leaf 45A = 0.00
Leaf 46A = 0.00
Leaf 47A = 0.00
Leaf 48A = 0.00
Leaf 49A = 0.00
Leaf 50A = 0.00
Leaf 51A = 0.00
Leaf 52A = 0.00
Leaf 53A = 0.00
Leaf 54A = 0.00
Leaf 55A = 0.00
Leaf 56A = 0.00
Leaf 57A = 0.00
Leaf 58A = 0.00
Leaf 59A = 0.00
Leaf 60A = 0.00
Leaf 1B = 0.00
Leaf 2B = 0.00
Leaf 3B = 0.00
Leaf 4B = 0.00
Leaf 5B = 0.00
Leaf 6B = 0.00
Leaf 7B = 0.00
Leaf 8B = 0.00
Leaf 9B = 0.00
Leaf 10B = 0.00
Leaf 11B = 0.00
Leaf 12B = 0.00
Leaf 13B = 0.00
Leaf 14B = 0.00
Leaf 15B = 0.00
Leaf 16B = 0.00
Leaf 17B = 0.00
Leaf 18B = 0.00
Leaf 19B = 0.00
Leaf 20B = 0.00
Leaf 21B = 0.00
Leaf 22B = 0.00
Leaf 23B = 4.00
Leaf 24B = 4.00
Leaf 25B = 4.00
Leaf 26B = 4.00
Leaf 27B = 4.00
Leaf 28B = 4.00
Leaf 29B = 4.00
Leaf 30B = 4.00
Leaf 31B = 4.00
Leaf 32B = 4.00
Leaf 33B = 4.00
Leaf 34B = 4.00
Leaf 35B = 4.00
Leaf 36B = 4.00
Leaf 37B = 4.00
Leaf 38B = 4.00
Leaf 39B = 0.00
Leaf 40B = 0.00
Leaf 41B = 0.00
Leaf 42B = 0.00
Leaf 43B = 0.00
Leaf 44B = 0.00
Leaf 45B = 0.00
Leaf 46B = 0.00
Leaf 47B = 0.00
Leaf 48B = 0.00
Leaf 49B = 0.00
Leaf 50B = 0.00
Leaf 51B = 0.00
Leaf 52B = 0.00
Leaf 53B = 0.00
Leaf 54B = 0.00
Leaf 55B = 0.00
Leaf 56B = 0.00
Leaf 57B = 0.00
Leaf 58B = 0.00
Leaf 59B = 0.00
Leaf 60B = 0.00
Note = 0
Shape = 4
400 400
400 -400
-400 -400
-400 400
Magnification = 1.00

Field = 4
Index = 0.8000
Carriage Group = 1
Operator =
Collimator = 0.0
Leaf 1A = 0.00
Leaf 2A = 0.00
Leaf 3A = 0.00
Leaf 4A = 0.00
Leaf 5A = 0.00
Leaf 6A = 0.00
Leaf 7A = 0.00
Leaf 8A = 0.00
Leaf 9A = 0.00
Leaf 10A = 0.00
Leaf 11A = 0.00
Leaf 12A = 0.00
Leaf 13A = 0.00
Leaf 14A = 0.00
Leaf 15A = 0.00
Leaf 16A = 0.00
Leaf 17A = 0.00
Leaf 18A = 0.00
Leaf 19A = 0.00
Leaf 20A = 0.00
Leaf 21A = 0.00
Leaf 22A = 0.00
Leaf 23A = 0.00
Leaf 24A = 0.00
Leaf 25A = 0.00
Leaf 26A = 0.00
Leaf 27A = 2.00
Leaf 28A = 2.00
Leaf 29A = 2.00
Leaf 30A = 2.00
Leaf 31A = 2.00
Leaf 32A = 2.00
Leaf 33A = 2.00
Leaf 34A = 2.00
Leaf 35A = 0.00
Leaf 36A = 0.00
Leaf 37A = 0.00
Leaf 38A = 0.00
Leaf 39A = 0.00
Leaf 40A = 0.00
Leaf 41A = 0.00
Leaf 42A = 0.00
Leaf 43A = 0.00
Leaf 44A = 0.00
Leaf 45A = 0.00
Leaf 46A = 0.00
Leaf 47A = 0.00
Leaf 48A = 0.00
Leaf 49A = 0.00
Leaf 50A = 0.00
Leaf 51A = 0.00
Leaf 52A = 0.00
Leaf 53A = 0.00
Leaf 54A = 0.00
Leaf 55A = 0.00
Leaf 56A = 0.00
Leaf 57A = 0.00
Leaf 58A = 0.00
Leaf 59A = 0.00
Leaf 60A = 0.00
Leaf 1B = 0.00
Leaf 2B = 0.00
Leaf 3B = 0.00
Leaf 4B = 0.00
Leaf 5B = 0.00
Leaf 6B = 0.00
Leaf 7B = 0.00
Leaf 8B = 0.00
Leaf 9B = 0.00
Leaf 10B = 0.00
Leaf 11B = 0.00
Leaf 12B = 0.00
Leaf 13B = 0.00
Leaf 14B = 0.00
Leaf 15B = 0.00
Leaf 16B = 0.00
Leaf 17B = 0.00
Leaf 18B = 0.00
Leaf 19B = 0.00
Leaf 20B = 0.00
Leaf 21B = 0.00
Leaf 22B = 0.00
Leaf 23B = 0.00
Leaf 24B = 0.00
Leaf 25B = 0.00
Leaf 26B = 0.00
Leaf 27B = 2.00
Leaf 28B = 2.00
Leaf 29B = 2.00
Leaf 30B = 2.00
Leaf 31B = 2.00
Leaf 32B = 2.00
Leaf 33B = 2.00
Leaf 34B = 2.00
Leaf 35B = 0.00
Leaf 36B = 0.00
Leaf 37B = 0.00
Leaf 38B = 0.00
Leaf 39B = 0.00
Leaf 40B = 0.00
Leaf 41B = 0.00
Leaf 42B = 0.00
Leaf 43B = 0.00
Leaf 44B = 0.00
Leaf 45B = 0.00
Leaf 46B = 0.00
Leaf 47B = 0.00
Leaf 48B = 0.00
Leaf 49B = 0.00
Leaf 50B = 0.00
Leaf 51B = 0.00
Leaf 52B = 0.00
Leaf 53B = 0.00
Leaf 54B = 0.00
Leaf 55B = 0.00
Leaf 56B = 0.00
Leaf 57B = 0.00
Leaf 58B = 0.00
Leaf 59B = 0.00
Leaf 60B = 0.00
Note = 0
Shape = 4
200 200
200 -200
-200 -200
-200 200
Magnification = 1.00

Field = 1
Index = 1.0000
Carriage Group = 1
Operator =
Collimator = 0.0
Leaf 1A = 0.00
Leaf 2A = 0.00
Leaf 3A = 0.00
Leaf 4A = 0.00
Leaf 5A = 0.00
Leaf 6A = 0.00
Leaf 7A = 0.00
Leaf 8A = 0.00
Leaf 9A = 0.00
Leaf 10A = 0.00
Leaf 11A = 0.00
Leaf 12A = 0.00
Leaf 13A = 0.00
Leaf 14A = 0.00
Leaf 15A = 0.00
Leaf 16A = 0.00
Leaf 17A = 0.00
Leaf 18A = 0.00
Leaf 19A = 0.00
Leaf 20A = 0.00
Leaf 21A = 0.00
Leaf 22A = 0.00
Leaf 23A = 0.00
Leaf 24A = 0.00
Leaf 25A = 0.00
Leaf 26A = 0.00
Leaf 27A = 0.00
Leaf 28A = 0.00
Leaf 29A = 0.00
Leaf 30A = 0.50
Leaf 31A = 0.50
Leaf 32A = 0.00
Leaf 33A = 0.00
Leaf 34A = 0.00
Leaf 35A = 0.00
Leaf 36A = 0.00
Leaf 37A = 0.00
Leaf 38A = 0.00
Leaf 39A = 0.00
Leaf 40A = 0.00
Leaf 41A = 0.00
Leaf 42A = 0.00
Leaf 43A = 0.00
Leaf 44A = 0.00
Leaf 45A = 0.00
Leaf 46A = 0.00
Leaf 47A = 0.00
Leaf 48A = 0.00
Leaf 49A = 0.00
Leaf 50A = 0.00
Leaf 51A = 0.00
Leaf 52A = 0.00
Leaf 53A = 0.00
Leaf 54A = 0.00
Leaf 55A = 0.00
Leaf 56A = 0.00
Leaf 57A = 0.00
Leaf 58A = 0.00
Leaf 59A = 0.00
Leaf 60A = 0.00
Leaf 1B = 0.00
Leaf 2B = 0.00
Leaf 3B = 0.00
Leaf 4B = 0.00
Leaf 5B = 0.00
Leaf 6B = 0.00
Leaf 7B = 0.00
Leaf 8B = 0.00
Leaf 9B = 0.00
Leaf 10B = 0.00
Leaf 11B = 0.00
Leaf 12B = 0.00
Leaf 13B = 0.00
Leaf 14B = 0.00
Leaf 15B = 0.00
Leaf 16B = 0.00
Leaf 17B = 0.00
Leaf 18B = 0.00
Leaf 19B = 0.00
Leaf 20B = 0.00
Leaf 21B = 0.00
Leaf 22B = 0.00
Leaf 23B = 0.00
Leaf 24B = 0.00
Leaf 25B = 0.00
Leaf 26B = 0.00
Leaf 27B = 0.00
Leaf 28B = 0.00
Leaf 29B = 0.00
Leaf 30B = 0.50
Leaf 31B = 0.50
Leaf 32B = 0.00
Leaf 33B = 0.00
Leaf 34B = 0.00
Leaf 35B = 0.00
Leaf 36B = 0.00
Leaf 37B = 0.00
Leaf 38B = 0.00
Leaf 39B = 0.00
Leaf 40B = 0.00
Leaf 41B = 0.00
Leaf 42B = 0.00
Leaf 43B = 0.00
Leaf 44B = 0.00
Leaf 45B = 0.00
Leaf 46B = 0.00
Leaf 47B = 0.00
Leaf 48B = 0.00
Leaf 49B = 0.00
Leaf 50B = 0.00
Leaf 51B = 0.00
Leaf 52B = 0.00
Leaf 53B = 0.00
Leaf 54B = 0.00
Leaf 55B = 0.00
Leaf 56B = 0.00
Leaf 57B = 0.00
Leaf 58B = 0.00
Leaf 59B = 0.00
Leaf 60B = 0.00
Note = 0
Shape = 4
50 50
50 -50
-50 -50
-50 50
Magnification = 1.00

CRC = B4DC

---------------------------------------------------------------------------------

Nov 12 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a

Bryan.Fodn...@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

Nov 12 '07 #2

P: n/a
On Nov 12, 5:12 pm, John Machin <sjmac...@lexicon.netwrote:
Bryan.Fodn...@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.
In other words, the blank lines between the blocks of data.
>

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'}
Yep, crahing on blank lines.

f = open(r'C:\python25\user\MLC\TEST1.MLC')
fields = {}
for line in f:
the_line = line.split() # split only once
if the_line: # test if the_line empty
if the_line[0] == 'Field': # if not, start checking
field = int(the_line[-1])
elif the_line[0] == 'Leaf':
fields[field] = the_line[-1]
## f.next() removed
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,
}
The fixed code returns only one leaf, since you are
continuously overwriting it.
>>fields
{8: '0.00', 1: '0.00', 10: '0.00', 4: '0.00'}

Note also that the values are still strings, you probably
have to fix that.
>
HTH,
John- Hide quoted text -

- Show quoted text -- Hide quoted text -

- Show quoted text -

Nov 12 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.