def test1(self):
        'complex. pack, detector, pixel hierarchy'
        
        mca = md.eventModeMCA(
            outfilename,
            (npacks, ndetsperpack, npixelsperdet,) )
        cylinder = operations.subtract( primitives.cylinder( sample2det * 1.1, detlength ),
                                        primitives.cylinder( sample2det * 0.9, detlength ) )
        ds = md.detectorSystem( cylinder, tofparams, mca )

        pack0 = makepack()
        packs = [pack0]
        for i in range(1, npacks):
            packs.append( mccomposite.scatterercopy( pack0, id = i ) )
            continue

        for i in range( npacks ):
            z = 0 * meter
            angle = (i-packindexat0)* 5./180 * N.pi
            x = sample2det * math.cos(angle)
            y = sample2det * math.sin(angle)
            ds.addElement( packs[i], (x,y,z) )
            continue

        cds = mh.scattererEngine( ds, coordinate_system = "InstrumentScientist" )

        for i in range(nevents):
            if i%1000 == 0: print i
            ev = mcni.neutron( r = (-L1,0,0), v = (vi,0,0) )
            cds.scatter(ev)
            continue

        return
Example #2
0
def onHollowCylinder(self, hollowCylinder):
    from mccomposite.geometry.primitives import cylinder
    from mccomposite.geometry.operations import subtract
    r1 = hollowCylinder.in_radius
    r2 = hollowCylinder.out_radius
    if r1 >= r2:
        msg = 'inner radius (%s) should be smaller than outer radius (%s)' %(
            r1, r2)
        raise RuntimeError, msg

    h = hollowCylinder.height
    if r1 == 0*r1:
        shape = cylinder(r2, h)
    else:
        shape = subtract( cylinder( r2, h ), cylinder(r1,h*2) )
    return shape.identify(self)
Example #3
0
    def test1(self):
        'complex. pack, detector, pixel hierarchy'

        mca = md.eventModeMCA(outfilename, (
            npacks,
            ndetsperpack,
            npixelsperdet,
        ))
        cylinder = operations.subtract(
            primitives.cylinder(sample2det * 1.1, detlength),
            primitives.cylinder(sample2det * 0.9, detlength))
        ds = md.detectorSystem(cylinder, tofparams, mca)

        pack0 = makepack()
        packs = [pack0]
        for i in range(1, npacks):
            packs.append(mccomposite.scatterercopy(pack0, id=i))
            continue

        for i in range(npacks):
            z = 0 * meter
            angle = (i - packindexat0) * 5. / 180 * N.pi
            x = sample2det * math.cos(angle)
            y = sample2det * math.sin(angle)
            ds.addElement(packs[i], (x, y, z))
            continue

        cds = mh.scattererEngine(ds, coordinate_system="InstrumentScientist")

        for i in range(nevents):
            if i % 1000 == 0: print i
            ev = mcni.neutron(r=(-L1, 0, 0), v=(vi, 0, 0))
            cds.scatter(ev)
            continue

        return
Example #4
0
def he3tube_withpixels(
        radius=units.length.inch / 2,
        height=units.length.meter,
        npixels=128,
        direction='z',
        id=0,
        pressure=10 * units.pressure.atm,
        mcweights=(0.9, 0, 0.1),
):

    import mccomposite.geometry.primitives as primitives
    cylinder = primitives.cylinder(radius, height)
    import mccomposite.geometry.operations as operations
    if direction == 'x':
        shape = operations.rotate(cylinder, (0, 90, 0))
    elif direction == 'y':
        shape = operations.rotate(cylinder, (-90, 0, 0))
    elif direction == 'z':
        shape = cylinder
    else:
        raise ValueError, "direction must be x, y, or z: %s" % direction

    ret = he3tube(
        cylinder, id = id,
        pressure = pressure,
        mcweights \
        = mcweights
        )

    import numpy as N
    start = -(npixels - 1) / 2. / npixels * height
    step = height / npixels
    displacements = N.array([start + step * i for i in range(npixels)])

    positions = N.zeros((npixels, 3)) * units.length.meter
    ind = {'x': 0, 'y': 1, 'z': 2}[direction]
    positions[:, ind] = displacements

    for i in range(npixels):
        pxl = pixel(id=i)
        ret.addElement(pxl, positions[i])
        continue

    return ret
Example #5
0
    def test(self):
        # create a weird shape
        from mccomposite.geometry import primitives
        block = primitives.block((1, 1, 1))
        sphere = primitives.sphere(1)
        cylinder = primitives.cylinder(2, 2.001)

        from mccomposite.geometry import operations
        dilated = operations.dilate(sphere, 2)
        translated = operations.translate(block, (0, 0, 0.5))
        united = operations.unite(dilated, translated)

        rotated = operations.rotate(united, (90, 0, 0))

        intersect = operations.intersect(rotated, cylinder)

        difference = operations.subtract(intersect, sphere)

        print mccomposite.scattererEngine(difference)

        shape = difference
        #shape = block
        #shape = dilated
        #shape = united
        #shape = intersect
        #shape = operations.rotate(block, (90,0,0) )
        #shape = rotated
        #shape = sphere
        #shape = operations.subtract(sphere, block)
        #shape = operations.subtract( primitives.cylinder(1, 2.1), sphere )

        #create pure python representation of scatterer composite
        composite = mccomposite.composite(shape)
        nprinter = NeutronPrinter(shape)
        composite.addElement(nprinter)

        #render the c++ representation
        ccomposite = mccomposite.scattererEngine(composite)

        ev = mcni.neutron(r=(0, 0, -5), v=(0, 0, 1))
        ccomposite.scatter(ev)

        return
    def test(self):
        # create a weird shape
        from mccomposite.geometry import primitives
        block = primitives.block( (1,1,1) )
        sphere = primitives.sphere( 1 )
        cylinder = primitives.cylinder( 2,2.001 )

        from mccomposite.geometry import operations
        dilated = operations.dilate( sphere, 2 )
        translated = operations.translate( block, (0,0,0.5) )
        united = operations.unite( dilated, translated )

        rotated = operations.rotate( united, (90,0,0) )

        intersect = operations.intersect( rotated, cylinder )

        difference = operations.subtract( intersect, sphere )
        
        print mccomposite.scattererEngine( difference )

        shape = difference
        #shape = block
        #shape = dilated
        #shape = united
        #shape = intersect
        #shape = operations.rotate(block, (90,0,0) )
        #shape = rotated
        #shape = sphere
        #shape = operations.subtract(sphere, block)
        #shape = operations.subtract( primitives.cylinder(1, 2.1), sphere )

        #create pure python representation of scatterer composite
        composite = mccomposite.composite( shape )
        nprinter = NeutronPrinter( shape )
        composite.addElement( nprinter )

        #render the c++ representation
        ccomposite = mccomposite.scattererEngine( composite )

        ev = mcni.neutron( r = (0,0,-5), v = (0,0,1) )
        ccomposite.scatter(ev)
        
        return
Example #7
0
    def test1(self):
        'simple. one detector'
        ndets = 1
        
        cylinder = primitives.cylinder( detradius, detlength )
        he3tube = md.he3tube(
            cylinder, id = 0,
            pressure = units.pressure.atm * pressure,
            mcweights = (
            absorption_weight, scattering_weight, transmission_weight)
            )
        mca = md.eventModeMCA( 'events.dat', (ndets,npixels,) )
        ds = md.detectorSystem( cylinder, tofparams, mca )

        m = units.length.meter
        
        for i in range(npixels):
            pixel = md.pixel( id = i )
            he3tube.addElement(
                pixel,
                N.array( [0,0,(-0.495+i*0.01)] ) * m,
                (0,0,0) )
            continue
        ds.addElement( he3tube )

        cds = mh.scattererEngine( ds, coordinate_system = "InstrumentScientist" )

        for i in range(nevents):
            if i%1000 == 0 and interactive: 
                # print i
                print '.',
                sys.stdout.flush()
            ev = mcni.neutron( r = (-L,0,0), v = (vi,0,0) )
            cds.scatter(ev)
            continue

        return
Example #8
0
    def test_locate(self):
        from mccomposite.geometry import primitives, locate
        c = primitives.cylinder(1, 1)

        assert locate((0, 0, 0), c) == "inside"
        return
    def test_locate(self):
        from mccomposite.geometry import primitives, locate
        c = primitives.cylinder(1,1)

        assert locate( (0,0,0), c ) == "inside"
        return