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
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)
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)
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
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