Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > preparing data for visualization

Reply
Thread Tools

preparing data for visualization

 
 
Bryan.Fodness@gmail.com
Guest
Posts: n/a
 
      11-12-2007
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

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

 
Reply With Quote
 
 
 
 
John Machin
Guest
Posts: n/a
 
      11-12-2007

(E-Mail Removed) 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

 
Reply With Quote
 
 
 
 
mensanator@aol.com
Guest
Posts: n/a
 
      11-12-2007
On Nov 12, 5:12 pm, John Machin <(E-Mail Removed)> wrote:
> (E-Mail Removed) 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 -



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Preparing Data For Statistical Analysis and Reporting Robert Ruby 1 07-25-2007 01:50 AM
Preparing Data For Statistical Analysis Robert Ruby 0 07-24-2007 07:00 PM
Scientific computing and data visualization. Fie Pye Python 11 10-08-2006 08:08 PM
Scientific computing and data visualization. Fie Pye Python 0 09-06-2006 07:25 PM
visualization of tree data (with QT)? FBergemann C++ 1 01-23-2004 09:09 PM



Advertisments