예제 #1
0
def test_ascending():
    'Test ascending iteration of volumes'

    g = construct.Geometry()
    box = g.shapes.Box("box",'1mm','2mm','3mm')    

    top = g.structure.Volume('top', material='air', shape=box)
    vol = top
    for dn in range(3):
        d = g.structure.Volume('daughter_%d' % dn, material='air', shape=box)
        top.placements.append(g.structure.Placement('place_%d'%dn, volume=d).name)
        top.placements.append(g.structure.Placement('again_%d'%dn, volume=d).name)
        for gdn in range(2):
            gd = g.structure.Volume('granddaughter_%d_%d' % (dn, gdn), material='air', shape=box)
            d.placements.append(g.structure.Placement('place_%d_%d' % (dn, gdn), volume=gd).name)


    seen = set()
    for vol in ascending(g.store.structure, top):
        print vol
        if vol.name in seen:
            raise ValueError, "Seen again: %s" % vol.name
            seen.add(vol.name)

    #print g.store.structure
    vols = list(ascending_all(g.store.structure, top))
    #print '\n'.join([v.name for v in vols])
    assert len(vols) == 19, len(vols)
    assert vols[-1].name == 'top'
예제 #2
0
def test_ascending():
    'Test ascending iteration of volumes'

    g = construct.Geometry()
    box = g.shapes.Box("box",'1mm','2mm','3mm')    

    top = g.structure.Volume('top', material='air', shape=box)
    vol = top
    for dn in range(3):
        d = g.structure.Volume('daughter_%d' % dn, material='air', shape=box)
        top.placements.append(g.structure.Placement('place_%d'%dn, volume=d).name)
        top.placements.append(g.structure.Placement('again_%d'%dn, volume=d).name)
        for gdn in range(2):
            gd = g.structure.Volume('granddaughter_%d_%d' % (dn, gdn), material='air', shape=box)
            d.placements.append(g.structure.Placement('place_%d_%d' % (dn, gdn), volume=gd).name)


    seen = set()
    for vol in ascending(g.store.structure, top):
        print (vol)
        if vol.name in seen:
            raise (ValueError, "Seen again: %s" % vol.name)
            seen.add(vol.name)

    #print (g.store.structure)
    vols = list(ascending_all(g.store.structure, top))
    #print ('\n'.join([v.name for v in vols]))
    assert len(vols) == 19, len(vols)
    assert vols[-1].name == 'top'
예제 #3
0
파일: __init__.py 프로젝트: DUNE/gegede
def convert(geom):
    '''
    Return an lxml.etree formed from the geometry
    '''

    gdml_node = etree.Element("gdml")

    # I have no idea what this means but it reproduces what other GDML
    # files have and w/out it Geant4 complains.
    gdml_node.set('{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation',
                  'http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd')

    # <define>
    define_node = etree.Element('define')
    gdml_node.append(define_node)
    center = identity = None
    for name, obj in geom.store.structure.items():
        typename = type(obj).__name__.lower()
        node = None
        if typename == 'position':
            node = etree.Element('position', **nt_qunit2xmldict(obj, 'cm'))
            if obj.name == 'center':
                center = obj
        if typename == 'rotation':
            node = etree.Element('rotation', **nt_qunit2xmldict(obj, 'degree'))
            if obj.name == 'identity':
                identity = obj
        if node is not None:
            define_node.append(node)
        continue
    if center is None:
        define_node.append(etree.Element('position', name='center'))
    if identity is None:
        define_node.append(etree.Element('rotation', name='identity'))

    # <materials>
    materials_node = etree.Element('materials')
    gdml_node.append(materials_node)
    for name, obj in geom.store.matter.items():
        node = make_material_node(obj)
        if node is not None:
            materials_node.append(node)

    # <solids>
    solids_node = etree.Element('solids')
    gdml_node.append(solids_node)
    for obj in geom.store.shapes.values():
        node = make_shape_node(obj)
        if node is not None:
            solids_node.append(node)        
    

    # <structure>
    structure_node = etree.Element('structure')
    gdml_node.append(structure_node)
    for vol in ascending(geom.store.structure, geom.world):
        assert vol
        node = make_volume_node(vol, geom.store.structure)
        if node is not None:
            structure_node.append(node)

    # <setup>
    setup_node = etree.Element('setup', name="Default", version="0")
    gdml_node.append(setup_node)

    world_node = etree.Element('world', ref=geom.world)
    setup_node.append(world_node)

    return gdml_node
예제 #4
0
파일: __init__.py 프로젝트: gyang9/gegede
def convert(geom):
    '''
    Return an lxml.etree formed from the geometry
    '''

    gdml_node = etree.Element("gdml")

    # I have no idea what this means but it reproduces what other GDML
    # files have and w/out it Geant4 complains.
    gdml_node.set(
        '{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation',
        'http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd'
    )

    # <define>
    define_node = etree.Element('define')
    gdml_node.append(define_node)
    center = identity = None
    for name, obj in geom.store.structure.items():
        typename = type(obj).__name__.lower()
        node = None
        if typename == 'position':
            node = etree.Element('position', **nt_qunit2xmldict(obj, 'cm'))
            if obj.name == 'center':
                center = obj
        if typename == 'rotation':
            node = etree.Element('rotation', **nt_qunit2xmldict(obj, 'degree'))
            if obj.name == 'identity':
                identity = obj
        if node is not None:
            define_node.append(node)
        continue
    if center is None:
        define_node.append(etree.Element('position', name='center'))
    if identity is None:
        define_node.append(etree.Element('rotation', name='identity'))

    # <materials>
    materials_node = etree.Element('materials')
    gdml_node.append(materials_node)
    for name, obj in geom.store.matter.items():
        node = make_material_node(obj)
        if node is not None:
            materials_node.append(node)

    # <solids>
    solids_node = etree.Element('solids')
    gdml_node.append(solids_node)
    for obj in geom.store.shapes.values():
        node = make_shape_node(obj)
        if node is not None:
            solids_node.append(node)

    # <structure>
    structure_node = etree.Element('structure')
    gdml_node.append(structure_node)
    for vol in ascending(geom.store.structure, geom.world):
        assert vol
        node = make_volume_node(vol, geom.store.structure)
        if node is not None:
            structure_node.append(node)

    # <setup>
    setup_node = etree.Element('setup', name="Default", version="0")
    gdml_node.append(setup_node)

    world_node = etree.Element('world', ref=geom.world)
    setup_node.append(world_node)

    return gdml_node