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
Esempio n. 2
0
def onSphereShell(self, sphereShell):
    from mccomposite.geometry.primitives import sphere
    from mccomposite.geometry.operations import subtract
    r1 = sphereShell.in_radius
    r2 = sphereShell.out_radius
    if r1 >= r2:
        msg = 'inner radius (%s) should be smaller than outer radius (%s)' %(
            r1, r2)
        raise RuntimeError, msg

    if r1 == 0*r1:
        shape = sphere(r2)
    else:
        shape = subtract( sphere(r2), sphere(r1) )
    return shape.identify(self)
Esempio n. 3
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)
Esempio n. 4
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
Esempio n. 6
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