preparing data for visualization

Discussion in 'Python' started by Bryan.Fodness@gmail.com, Nov 12, 2007.

  1. Guest

    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, 2007
    #1
    1. Advertising

  2. John Machin Guest

    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
     
    John Machin, Nov 12, 2007
    #2
    1. Advertising

  3. Guest

    On Nov 12, 5:12 pm, John Machin <> wrote:
    > 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, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. FBergemann
    Replies:
    1
    Views:
    528
    Donovan Rebbechi
    Jan 23, 2004
  2. Fie Pye
    Replies:
    11
    Views:
    676
    Fabian Braennstroem
    Oct 8, 2006
  3. Fie Pye
    Replies:
    0
    Views:
    295
    Fie Pye
    Sep 6, 2006
  4. Robert
    Replies:
    0
    Views:
    128
    Robert
    Jul 24, 2007
  5. Robert
    Replies:
    1
    Views:
    122
    M. Edward (Ed) Borasky
    Jul 25, 2007
Loading...

Share This Page